proj-9.6.0/AUTHORS.md000664 001754 001755 00000001241 14764566077 014066 0ustar00e012349e012349000000 000000 # Authors ## Original Author - Gerald Evenden (1935-2016) ## Maintainers - Kristian Evers - Even Rouault ## Project Steering Committee Process and membership can be found at: Chair: - Kristian Evers Members: - Frank Warmerdam - Howard Butler - Charles Karney - Thomas Knudsen - Even Rouault - Kurt Schwehr ## Contributors The full list of contributors can be found on GitHub proj-9.6.0/CITATION000664 001754 001755 00000001010 14764566077 013546 0ustar00e012349e012349000000 000000 To cite PROJ in publications use: PROJ contributors (2025). PROJ coordinate transformation software library. Open Source Geospatial Foundation. URL https://proj.org/. DOI: 10.5281/zenodo.5884394 A BibTeX entry for LaTeX users is .. code-block:: latex @Manual{, title = {{PROJ} coordinate transformation software library}, author = {{PROJ contributors}}, organization = {Open Source Geospatial Foundation}, year = {2025}, url = {https://proj.org/}, doi = {10.5281/zenodo.5884394}, } proj-9.6.0/CITATION.cff000664 001754 001755 00000004231 14764566077 014313 0ustar00e012349e012349000000 000000 cff-version: 1.2.0 message: Please cite this software using these metadata or in the CITATION file. type: software title: PROJ version: 9.6.0 date-released: 2025-03-15 doi: 10.5281/zenodo.5884394 abstract: PROJ is a generic coordinate transformation software that transforms geospatial coordinates from one coordinate reference system (CRS) to another. This includes cartographic projections as well as geodetic transformations. url: https://proj.org repository-code: https://github.com/OSGeo/PROJ/ license: MIT authors: - given-names: Gerald I. family-names: Evenden affiliation: United States Geological Survey - given-names: Even family-names: Rouault affiliation: Spatialys orcid: https://orcid.org/0000-0002-5068-0476 - given-names: Frank family-names: Warmerdam affiliation: Planet Labs Inc - given-names: Kristian family-names: Evers affiliation: Danish Agency for Climate Data orcid: https://orcid.org/0000-0002-1310-4576 - given-names: Thomas family-names: Knudsen affiliation: Danish Agency for Climate Data - given-names: Howard family-names: Butler affiliation: Hobu Inc orcid: https://orcid.org/0000-0002-5340-1380 - given-names: Mike W. family-names: Taves affiliation: GNS Science orcid: https://orcid.org/0000-0003-3657-7963 - given-names: Kurt family-names: Schwehr affiliation: Google Inc orcid: https://orcid.org/0000-0002-5624-8190 - given-names: Elliott family-names: Sales de Andrade orcid: https://orcid.org/0000-0001-7310-8942 - given-names: Charles family-names: Karney affiliation: SRI International orcid: https://orcid.org/0000-0002-5006-5836 - given-names: Sebastiaan family-names: Couwenberg - given-names: Nyall family-names: Dawson affiliation: North Road orcid: https://orcid.org/0000-0001-9812-7584 - given-names: Alan D. family-names: Snow affiliation: Corteva orcid: https://orcid.org/0000-0002-7333-3100 - given-names: Javier family-names: Jimenez Shaw orcid: https://orcid.org/0000-0002-7227-9173 keywords: - PROJ - geodesy - cartography - coordinates - projections - conversion proj-9.6.0/CMakeLists.txt000664 001754 001755 00000040372 14764566077 015167 0ustar00e012349e012349000000 000000 ################################################################################ # # This file is part of CMake configuration for PROJ 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 3.16) project(PROJ DESCRIPTION "PROJ coordinate transformation software library" LANGUAGES C CXX ) # Only interpret if() arguments as variables or keywords when unquoted cmake_policy(SET CMP0054 NEW) # Set C++ version # Make CMAKE_CXX_STANDARD available as cache option overridable by user set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard version to use (default is 17)") message(STATUS "Requiring C++${CMAKE_CXX_STANDARD}") set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) message(STATUS "Requiring C++${CMAKE_CXX_STANDARD} - done") # Set C99 version # Make CMAKE_C_STANDARD available as cache option overridable by user set(CMAKE_C_STANDARD 99 CACHE STRING "C standard version to use (default is 99)") message(STATUS "Requiring C${CMAKE_C_STANDARD}") set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) message(STATUS "Requiring C${CMAKE_C_STANDARD} - done") # Set global -fvisibility=hidden set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_CXX_VISIBILITY_PRESET hidden) # Set warnings as variables, then store as cache options set(PROJ_common_WARN_FLAGS # common only to GNU/Clang C/C++ -Wall -Wdate-time -Werror=format-security -Werror=vla -Wextra -Wformat -Wmissing-declarations -Wshadow -Wswitch -Wunused-parameter ) if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wduplicated-cond -Wduplicated-branches -Wlogical-op ) set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wmissing-prototypes ) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8) set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wextra-semi) endif() set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Weffc++ # -Wold-style-cast -Woverloaded-virtual -Wzero-as-null-pointer-constant ) elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wcomma -Wdeprecated -Wdocumentation -Wno-documentation-deprecated-sync -Wfloat-conversion -Wlogical-op-parentheses # -Wweak-vtables ) set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wmissing-prototypes -Wc11-extensions ) set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Weffc++ -Wextra-semi # -Wold-style-cast -Woverloaded-virtual -Wshorten-64-to-32 -Wunused-private-field -Wzero-as-null-pointer-constant ) elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") add_definitions(/D_CRT_SECURE_NO_WARNINGS) # Eliminate deprecation warnings set(PROJ_C_WARN_FLAGS /W4 /wd4706 # Suppress warning about assignment within conditional expression /wd4996 # Suppress warning about sprintf, etc., being unsafe ) if("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "arm64") # Suppress an inaccurate warning when compiling for an MSVC/ARM64 platform # It incorrectly assumes a division by zero is possible despite a check set(PROJ_C_WARN_FLAGS ${PROJ_C_WARN_FLAGS} /wd4723) endif() set(PROJ_CXX_WARN_FLAGS /EHsc ${PROJ_C_WARN_FLAGS}) elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel") if(MSVC) set(PROJ_C_WARN_FLAGS /Wall) set(PROJ_CXX_WARN_FLAGS /Wall) else() set(PROJ_C_WARN_FLAGS -Wall) set(PROJ_CXX_WARN_FLAGS -Wall) endif() endif() if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") # Intel CXX compiler based on clang defaults to -ffast-math, which # breaks std::isinf(), std::isnan(), etc. set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -fno-fast-math) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fno-fast-math) endif () set(PROJ_C_WARN_FLAGS "${PROJ_C_WARN_FLAGS}" CACHE STRING "C flags used to compile PROJ targets") set(PROJ_CXX_WARN_FLAGS "${PROJ_CXX_WARN_FLAGS}" CACHE STRING "C++ flags used to compile PROJ targets") ################################################################################ # PROJ CMake modules ################################################################################ # Path to additional CMake modules set(CMAKE_MODULE_PATH ${PROJ_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) include(ProjUtilities) message(STATUS "Configuring PROJ:") ################################################################################ #PROJ version information ################################################################################ include(ProjVersion) proj_version(MAJOR 9 MINOR 6 PATCH 0) set(PROJ_SOVERSION 25) set(PROJ_BUILD_VERSION "${PROJ_SOVERSION}.${PROJ_VERSION}") ################################################################################ # Build features and variants ################################################################################ include(Ccache) include(ProjConfig) include(ProjMac) include(policies) ############################################## ### SWITCH BETWEEN STATIC OR SHARED LIBRARY### ############################################## # default config is shared option(BUILD_SHARED_LIBS "Build PROJ library shared." ON) ################################################################################ # Check for nlohmann_json ################################################################################ set(NLOHMANN_JSON_ORIGIN "auto" CACHE STRING "nlohmann/json origin. The default auto will try to use external \ nlohmann/json if possible") set_property(CACHE NLOHMANN_JSON_ORIGIN PROPERTY STRINGS auto internal external) # Probably not the strictest minimum, but known to work with it set(MIN_NLOHMANN_JSON_VERSION 3.7.0) if(NLOHMANN_JSON_ORIGIN STREQUAL "external") find_package(nlohmann_json REQUIRED) set(NLOHMANN_JSON "external") elseif(NLOHMANN_JSON_ORIGIN STREQUAL "internal") set(NLOHMANN_JSON "internal") else() find_package(nlohmann_json QUIET) if(nlohmann_json_FOUND) set(NLOHMANN_JSON "external") else() set(NLOHMANN_JSON "internal") endif() endif() if(NLOHMANN_JSON STREQUAL "external") # Check minimum version if(nlohmann_json_VERSION VERSION_LESS MIN_NLOHMANN_JSON_VERSION) message(STATUS "external nlohmann/json version ${nlohmann_json_VERSION} " "is older than minimum requirement ${MIN_NLOHMANN_JSON_VERSION}") set(NLOHMANN_JSON "internal") else() message(STATUS "found nlohmann/json version ${nlohmann_json_VERSION}") endif() endif() message(STATUS "nlohmann/json: ${NLOHMANN_JSON}") ################################################################################ # Check for sqlite3 ################################################################################ find_program(EXE_SQLITE3 sqlite3) if(NOT EXE_SQLITE3) message(SEND_ERROR "sqlite3 binary not found!") endif() # Deprecated variables since PROJ 9.4.0 if(DEFINED SQLITE3_INCLUDE_DIR) message(DEPRECATION "Use SQLite3_INCLUDE_DIR instead of SQLITE3_INCLUDE_DIR") set(SQLite3_INCLUDE_DIR ${SQLITE3_INCLUDE_DIR}) endif() if(DEFINED SQLITE3_LIBRARY) message(DEPRECATION "Use SQLite3_LIBRARY instead of SQLITE3_LIBRARY") set(SQLite3_LIBRARY ${SQLITE3_LIBRARY}) endif() find_package(SQLite3 REQUIRED) # Would build and run with older versions, but with horrible performance # See https://github.com/OSGeo/PROJ/issues/1718 if(SQLite3_VERSION VERSION_LESS "3.11") message(SEND_ERROR "SQLite3 >= 3.11 required!") endif() ################################################################################ # Check for libtiff ################################################################################ option(ENABLE_TIFF "Enable TIFF support to read some grids" ON) mark_as_advanced(ENABLE_TIFF) set(TIFF_ENABLED FALSE) if(ENABLE_TIFF) find_package(TIFF REQUIRED) if(TIFF_FOUND) set(TIFF_ENABLED TRUE) else() message(SEND_ERROR "libtiff dependency not found! Use ENABLE_TIFF=OFF to force it off") endif() else() message(WARNING "TIFF support is not enabled and will result in the inability to read " "some grids") endif() ################################################################################ # Check for curl ################################################################################ option(ENABLE_CURL "Enable Curl support" ON) set(CURL_ENABLED FALSE) if(ENABLE_CURL) find_package(CURL REQUIRED) if(CURL_FOUND) set(CURL_ENABLED TRUE) # Curl SSL options are described in # https://curl.se/libcurl/c/CURLOPT_SSL_OPTIONS.html #set(CURLSSLOPT_NO_REVOKE 2) #set(SSL_OPTIONS ${CURLSSLOPT_NO_REVOKE}) #add_compile_definitions(SSL_OPTIONS=${SSL_OPTIONS}) else() message(SEND_ERROR "curl dependency not found!") endif() endif() ################################################################################ option(EMBED_PROJ_DATA_PATH "Whether the PROJ_DATA_PATH should be embedded" ON) if(DEFINED PROJ_LIB_ENV_VAR_TRIED_LAST) set(PROJ_DATA_ENV_VAR_TRIED_LAST ${PROJ_LIB_ENV_VAR_TRIED_LAST}) message(WARNING "PROJ_LIB_ENV_VAR_TRIED_LAST option has been renamed to PROJ_DATA_ENV_VAR_TRIED_LAST. PROJ_LIB_ENV_VAR_TRIED_LAST is still working for now, but may be completely replaced by PROJ_DATA_ENV_VAR_TRIED_LAST in a future release") else() option(PROJ_DATA_ENV_VAR_TRIED_LAST "Whether the PROJ_DATA environment variable should be tried after the hardcoded location" OFF) endif() if(PROJ_DATA_ENV_VAR_TRIED_LAST) add_definitions(-DPROJ_DATA_ENV_VAR_TRIED_LAST) endif() ################################################################################ # threading configuration ################################################################################ set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads) if(Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}") endif() # 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() # Put the libraries 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 PROJ libraries. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJ_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJ_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJ_BINARY_DIR}/bin) link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) ################################################################################ # Installation ################################################################################ include(ProjInstallPath) # By default GNUInstallDirs will use the upper case project name # for CMAKE_INSTALL_DOCDIR, resulting in something like share/doc/PROJ # instead of share/doc/proj which historically have been the path used # by the project. # Here force the use of a lower case project name and reset after # GNUInstallDirs has done its thing set(PROJECT_NAME_ORIGINAL "${PROJECT_NAME}") string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME) include(GNUInstallDirs) set(PROJECT_NAME "${PROJECT_NAME_ORIGINAL}") set(PROJ_DATA_PATH "${CMAKE_INSTALL_FULL_DATADIR}/proj") ################################################################################ # Tests ################################################################################ option(BUILD_TESTING "Build the testing tree." ON) if(BUILD_TESTING) enable_testing() include(ProjTest) else() message(STATUS "Testing disabled") endif() ################################################################################ # Whether we should embed resources ################################################################################ function (is_sharp_embed_available res) if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.21 AND ((CMAKE_C_COMPILER_ID STREQUAL "GNU") OR (CMAKE_C_COMPILER_ID STREQUAL "Clang"))) # CMAKE_C_STANDARD=23 only supported since CMake 3.21 set(TEST_SHARP_EMBED "static const unsigned char embedded[] = {\n#embed __FILE__\n};\nint main() { (void)embedded; return 0;}" ) set(CMAKE_C_STANDARD_BACKUP "${CMAKE_C_STANDARD}") set(CMAKE_C_STANDARD "23") check_c_source_compiles("${TEST_SHARP_EMBED}" _TEST_SHARP_EMBED) set(CMAKE_C_STANDARD "${CMAKE_C_STANDARD_BACKUP}") if (_TEST_SHARP_EMBED) set(${res} ON PARENT_SCOPE) else() set(${res} OFF PARENT_SCOPE) endif() else() set(${res} OFF PARENT_SCOPE) endif() endfunction() is_sharp_embed_available(IS_SHARP_EMBED_AVAILABLE_RES) if (NOT DEFINED BUILD_SHARED_LIBS) message(FATAL_ERROR "BUILD_SHARED_LIBS should be set") endif() if (NOT BUILD_SHARED_LIBS) set(DEFAULT_EMBED_RESOURCE_FILES ON) else() set(DEFAULT_EMBED_RESOURCE_FILES OFF) endif() option(EMBED_RESOURCE_FILES "Whether resource files (limited to proj.db) should be embedded into the PROJ library" ${DEFAULT_EMBED_RESOURCE_FILES}) option(USE_ONLY_EMBEDDED_RESOURCE_FILES "Whether embedded resource files (limited to proj.db) should be used (should nominally be used together with EMBED_RESOURCE_FILES=ON, otherwise this will result in non-functional builds)" OFF) if (USE_ONLY_EMBEDDED_RESOURCE_FILES AND NOT EMBED_RESOURCE_FILES) message(WARNING "USE_ONLY_EMBEDDED_RESOURCE_FILES=ON set but EMBED_RESOURCE_FILES=OFF: some drivers will lack required resource files") endif() ################################################################################ # Build configured components ################################################################################ set(PROJ_DICTIONARY world other.extra nad27 GL27 nad83 nad.lst CH ITRF2000 ITRF2008 ITRF2014 ITRF2020 ) include_directories(${PROJ_SOURCE_DIR}/src) add_subdirectory(data) add_subdirectory(include) add_subdirectory(src) add_subdirectory(man) add_subdirectory(cmake) if(BUILD_TESTING) add_subdirectory(test) endif() option(BUILD_EXAMPLES "Whether to build example programs" OFF) if(BUILD_EXAMPLES) add_subdirectory(examples) endif() add_subdirectory(scripts) set(docfiles COPYING NEWS.md AUTHORS.md) install(FILES ${docfiles} DESTINATION ${CMAKE_INSTALL_DOCDIR}) ################################################################################ # pkg-config support ################################################################################ configure_proj_pc() install(FILES ${CMAKE_CURRENT_BINARY_DIR}/proj.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") ################################################################################ # "make dist" workalike ################################################################################ set(CPACK_SOURCE_GENERATOR "TGZ;ZIP") set(CPACK_SOURCE_PACKAGE_FILE_NAME "proj-${PROJ_VERSION}") set(CPACK_PACKAGE_VENDOR "OSGeo") set(CPACK_PACKAGE_VERSION_MAJOR ${PROJ_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${PROJ_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${PROJ_VERSION_PATCH}) set(CPACK_VERBATIM_VARIABLES TRUE) set(CPACK_SOURCE_IGNORE_FILES /\\..* # any file/directory starting with . /.*\\.yml /.*\\.gz /.*\\.zip /.*build.*/ \\.deps /autogen\\.sh /autom4te\\.cache /CODE_OF_CONDUCT.md /CONTRIBUTING.md /disabled_workflows/ /Dockerfile /docs/ /Doxyfile /HOWTO-RELEASE.md /m4/lt* /m4/libtool* /media/ /schemas/ /test/fuzzers/ /test/gigs/.*gie\\.failing /test/postinstall/ /travis/ ${PROJECT_BINARY_DIR} ) include(CPack) get_property(_is_multi_config_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(NOT _is_multi_config_generator) add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source ) message(STATUS "PROJ: Configured 'dist' target") endif() configure_file(cmake/uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/proj_uninstall.cmake @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/proj_uninstall.cmake) message(STATUS "EMBED_RESOURCE_FILES=${EMBED_RESOURCE_FILES}") proj-9.6.0/COPYING000664 001754 001755 00000003370 14764566077 013457 0ustar00e012349e012349000000 000000 All source, data files and other contents of the PROJ 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. Frank Warmerdam placed everything under the following MIT style license because he believed it is effectively the same as public domain, allowing anyone to use the code as they wish, including making proprietary derivatives. Initial PROJ 4.3 public domain code was put as Frank Warmerdam as copyright holder, but he didn't mean to imply he did the work. Essentially all work was done by Gerald Evenden. Copyright information can be found in source files. -------------- 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. proj-9.6.0/ChangeLog000664 001754 001755 00000175101 14764566077 014200 0ustar00e012349e012349000000 000000 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 advertise #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: Propagate 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 accessible 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 among 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 propagation 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_gridshift.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 existence 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 delimiter 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. Among 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: committed 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 * upgraded 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 primitive systems. Documented entries unchanged. Rel. 4.3.1 94/2/16 Base-line ------------------------------------------------------------------------- 94/6/2 Transverse Mercator, spherical inverse fixed. Misplaced parenthesis. 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 matrices. 94/3/19 Problems with MAPGEN's mapdef choking on call to proj. Fixed with PROJ.4.3-patch-01. 94/3/22 Bump 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 beginning of -V option output. 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 structures. 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 headers. 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. proj-9.6.0/INSTALL000664 001754 001755 00000000607 14764566077 013455 0ustar00e012349e012349000000 000000 Basic Installation ================== These are generic installation instructions. See details online at https://proj.org/install.html PROJ can be built using a modern C/C++ compiler with CMake. From the source directory, use the following commands to configure, build and install PROJ: mkdir build cd build cmake .. cmake --build . cmake --build . --target install proj-9.6.0/NEWS.md000664 001754 001755 00000275612 14764566077 013534 0ustar00e012349e012349000000 000000 # PROJ Release Notes ## 9.6.0 ### Updates * `projinfo`: display whether an operation is time-dependent (#4255) * Add CMake options `EMBED_RESOURCE_FILES` and `USE_ONLY_EMBEDDED_RESOURCE_FILES` for `proj.db` and `proj.ini` embedding (#4265, #4274) * Database: ingest deprecated ESRI names to be able to better import old WKT ESRI (#4282) * `proj_factors()`: enhance speed when called repeatedly on same compound or projected CRS (#4289) * Add Airocean projection (formerly Dymaxion) (#4303) * `createOperations()`: Optimization by avoiding database lookups for CRS (typically PROJ strings) using unknown datums (#4320) * PROJJSON export: for a Projected CRS, add an explicit type=GeographicCRS/GeodeticCRS members to the base_crs member (#4331) * `proj_trans_bounds()`: make it work when target CRS is a CompoundCRS (#4333) * `createOperations()`: do Helmert transformation in 2D when one of source or target CRS is compound (#4337) * Map EPSG method 'Vertical Offset by Grid Interpolation (asc)' to +proj=vgridshift (#4344) * Add support for 'Coordinate Frame rotation full matrix (geocen)' and Coordinate Frame rotation full matrix (geog2D)' methods (#4348) * Add a CMake `EMBED_RESOURCE_DIRECTORY` option to embed .tif/.json files in to libproj (#4349, #4373) * Take into account new EPSG methods 'Cartesian Grid Offsets by TIN Interpolation (JSON)' and 'Vertical Offset by TIN Interpolation (JSON)' (#4353) * Added an option `native_ca` to `proj.ini` and an environment variable `PROJ_NATIVE_CA` to be able to configure curl to use the operating system CA store. (#4356) * Database: add an optional step_direction column to the concatenated_operation_step table (#4357) * Database: replicate EGM2008 grid transformation record to WGS 84 realizations (#4363) * Improve ETRFxxx to ETRFyyy, and WGS 84 (xxx) to WGS 84 (yyy) (#4364) * Build: Update to C++17 version (#4366, #4369) * Add bash completion script for projinfo (#4371) * Dispatch content of `4D_api.cpp` into multiple .cpp files (#4393) * Add `proj_trans_bounds_3D()` (#4394) * Database: add a engineering_datum and engineering_crs tables; import few related EPSG records (#4396) * NKG transformations: Add support for EUREF-FIN in Finish transformations (#4399) * Add Spilhaus projection (#4401) * Export ESRI:54099 `WGS_1984_Spilhaus_Ocean_Map_in_Square` as PROJ string (#4402) * Database: update to EPSG v12.004 (#4413) * `proj_download_file()`: invalidate in-memory caches related to downloaded file (for the current context) (#4414) ### Bug Fixes * `createObjectsFromName()`: be more tolerant about N/S vs North/South, absence of zone or height (#4318) * `createFromPROJString`: avoid repeated openings of proj.db and proj.ini and lookup of 'epsg' (#4334) * Debugging/internals: append sub-grid index to grid name when opening a multi-grid TIFF file (#4381) * `createOperations()`: use more appropriate operation when using a 'PROJ {grid_name}' geoid model, based on matching the vertical datum (#4379) * `proj_clone()`: properly propagate `errorIfBestTransformationNotAvailable` and other flags from source object (#4382) * Inverse +proj=cass: fix non-convergence on inputs where easting=false_easting or northing=false_northing (#4386) * Fix typo in parameter for ITRF97 in ITRF2014 file (#4408) * Retry on "SSL connection timeout" (#4419) ## 9.5.1 ### Updates * Database: update to EPSG v11.022 (#4254, #4275, #4297, #4312) * Speed-up dramatically proj.db build time (#4280) * Database: ingest deprecated ESRI names to be able to better import old WKT ESRI (#4282) ### Bug fixes * `findsOpsInRegistryWithIntermediate()`: Restrict to using known source/target CRS that have the same originating authority (#4252) * `isTimeDependent()`: Do not mark "static" Coordinate Frame helmert transformations as time-dependent, only time-dependent ones (#4259) * Fix clang-19 "warning: empty paragraph passed to '@throw' command [-Wdocumentation]" (#4263) * WKT importer: fix `nullptr` dereference on invalid `VERTCS[]` (#4266) * Fixed `sql_filelist.cmake` relative path issue (#4296) * Fail consistently on network error and grid transformations (#4302) * Fix `-Wshadow` warnings between `parammappings.cpp` and `singleoperation.cpp` with unity builds (#4304) * Removed leftover setting of `CMAKE_REQUIRED_FLAGS` (#4322) * WKT1 ESRI export: fix wrong mapping of Lambert Cylindrical Equal Area to Behrmann (#4328) * Numerous documentation fixes (#4248, #4267, #4291, #4293) ## 9.5.0 ### Updates * Database: add constraint for unicity of CRS and operation names (#4071) * Make a few more functions that accept a `PJ*` to actually accept a `const PJ*` (#4074) * Database: Increase consistency in trigger checks (#4080) * Speed-up `+proj=cart +inv` (#4087) * Added EPSG:9656 "Cartesian Grid Offsets" operation method, and imported related records (#4094) * Add a `WKTParser::grammarErrorList()` method so that `proj_create_from_wkt()` can behave as documented (#4108) * `CRS::stripVerticalComponent()`: Redirect it to `demoteTo2D(std::string(), nullptr)` (#4127) * Add `proj_context_set_user_writable_directory()` to public API (#4144) * CMake: for Windows builds, defaults PROJ DLL to be just `proj_${PROJ_MAJOR_VERSION}.dll` (#4167) * Add `toWGS84AutocorrectWrongValues()` method and use it in PROJ.4 and WKT1 CRS import (#4172) * WKT import: add support for Oracle WKT "Albers_Conical_Equal_Area" spelling (#4181) * Limit number of C++ exceptions thrown & caught internally (#4183) * Database: update to EPSG 11.016 (#4241) * CMake: add option `EMBED_PROJ_DATA_PATH` (#4207) * Add SEA Inverse projection (#4211) * projinfo: Add 2 args equivalent to usage of `-s` and `-t` (#4218) * CMake: add TESTING_USE_NETWORK configure option (#4220) * Add `PROJ_ERR_COORD_TRANSFM_MISSING_TIME` and `proj_coordoperation_requires_per_coordinate_input_time()` (#4221) * Add new Conversion "Local Orthographic" (#4228, #4229) * Add data/ITRF2020 with ITRF2020 to ITRFother, and ITRF2020 plate motion models (#4235) ### Bug Fixes * Fix `imoll` and `imoll_o` zone calculations to correct inverse transformations near the "seams" (#4159) * Fix wrong EPSG conversion code for UTM south (#4166) * BoundCRS::exportToPROJ(): handle case of NADCON conus grid (#4168) * `+proj=gridshift`: make projected grids work with `PROJ_NETWORK=ON` (#4174) * `createOperations()`: make it work when transforming from/to a CompoundCRS with a DerivedVerticalCRS with ellipsoidal height (#4176) * Support default context as `nullptr` in `CoordinateTransformer` (#4177) * cct: emit error message and return error code when not being able to open input file (#4200) * Fix race condition surrounding DB reopening during fork (#4231) * `GeographicBoundingBox::create()`: accept degenerate bounding box reduced to a point or a line (#4237) * `createOperation()`: tune so that ITRF2000->ETRS89 does not return only NKG grid based operations but also time-dependent Helmert (#4244) ## 9.4.1 ### Updates * Database: update to EPSG v11.006 (#4086) * Database: update ESRI dataset to ArcGIS Pro 3.3 (#4143) * Process `EPSG_CODE_METHOD_VERTICALGRID_GTG` properly with code 1129 (#4213) ### Bug fixes * DatabaseContext::lookForGridInfo(): do not trigger network activity in PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE mode when all grids are known (#4090) * Retry "Connection reset by peer" (#4107) * Use unique names for NKG transformations (#4111) * proj_create()/proj_create_from_database(): recall CRS AUTH:CODE in error message (#4114) * DerivedProjectedCRS: deal with lack of explicit CS in BASEPROJCRS in WKT (#4139) * proj_symbol_rename.h: update with current symbols (#4145) * Improve detection of compatible/incompatible celestial bodies (#4150) ## 9.4.0 ### Updates * Add support for transformations involving coordinate epoch changes (PointMotionOperation), specifically for Canadian NAD83(CSRS)(#3884) * SSL_OPTIONS: set SSL options on Curl library (#3936) * Add support for unity builds (#3962) * Added ability to install *.tif if present in data (#3970) * createOperationsCompoundToGeog(): tune selection logic when --grid-check known_available is specified (#3990) * Increase CMake minimum version from 3.9 to 3.16 (#3997) * CMake: use FetchContent to get googletest-1.12.1 (#4006) * CMake: Replace custom FindSqlite3 with FindSQLite3 built-in (#4007) * tpeqd: use numerically stable formula for computing the central angle from (phi_1, lam_1) to (phi_2, lam_2) (#4009) * Move content of proj_experimental.h to proj.h (#4019) * Add +proj=mod_krovak projection method for Modified Krovak that applies to S-JTSK/05 in the Czech Republic (#4021) * PROJString formatter optimizer: simplify pipelines doing [Modified]Krovak (South West) <--> [Modified]Krovak (East North) by just doing an axis swap (#4034) * +proj=gridshift: enhance to support grids referenced in projected CRS, and with easting_offset/northing_offset corrections (#4038) * Tune concatenated operation instantiation, reference CR2005 geoid for Czechia and add (disabled by default) records for Czechia S-JTSK/05 based transformations (#4044) * Database: update to EPSG v11.004 (#4062) ### Bug fixes * Fix missing symbols at link time for Windows target in Visual Studio (#3984) * Improve error message in axisswap (#3975) * Avoid convergence errors in +proj=gridshift when using biquadratic interpolation (#3985) ## 9.3.1 ### Updates * Update to EPSG 10.098 (#3968) * Update ESRI objects to v3.2.0 (#3944) ### Bug fixes * ITRF2008: fix wrong sign for 'dry' parameter of EURA and EURA_T (#3870) * Fix build error with MSVC 2019 in /std:c++20 on NN_NO_CHECK() (#3872) * ESRI WKT import: normalize GCS_unknown to unknown and D_unknown to unknown (#3874) * CoordinateOperationFactory: deal with CompoundToCompound with a horizontal similarity transformation and a ballpark vertical (#3881) * Ellipsoid::_isEquivalentTo(): fix so that an ellipsoid of semi-major axis A (and non-zero inv flattening) isn't equivalent to a sphere of radius A (#3882) * isEquivalentTo(): make a datum name 'unknown' equivalent to another one (#3883) * cs2cs: fix handling of input coordinates in grad (#3886) * Make setargv.obj available on Universal Windows Platform (#3891) * Allow opening proj.db with a URI (#3892) * createOperations(): fix GeogCRS 3D with TOWGS84 to geocentric CRS (#3915) * Fix test suite so that it can pass with ENABLE_TIFF=OFF (#3916) * GeographicBoundingBox::intersects(): avoid infinite recursion and stack overflow on invalid bounding boxes (#3919) * Fix importing '+proj=topocentric ... +type=crs' by using a geocentric CRS as the base CRS (#3924) * Allow LOCAL_CS with 3 axes (#3928) * WKT1 parser: in non-strict mode, accept missing UNIT[] in GEOGCS, GEOCCS, PROJCS and VERT_CS elements (#3933) * createOperations(): fix issue with a obscure case involving CompoundCRS of unknown horizontal datum + boundCRS of vertical (#3934) * createOperations(): fix bad PROJ pipeline when converting between Geog3D with non-metre height to CompoundCRS (#3943) * createOperations(): Fix possible null dereference on invalid WKT input (#3946) * proj_factor: fix when input is a compound CRS of a projected CRS (#3950) * pj_get_suggested_operation(): tune it to give correct result for RGAF09 to RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height transformation (#3954) * Move static NameSpace::GLOBAL definition in static.cpp to avoid 'static initialization fiasco' (#3956) * horner: allow arbitrary input type of coordinate (#3961) ## 9.3.0 ### Updates * Add C++ API to transform coordinate (#3705) * CMake: add PROJ_DB_CACHE_DIR (#3711) * Implement EPSG:1026 Mercator (Spherical) method (#3741) * CMake: remove useless cross-compiling related checks (#3747) * Add mapping of Equidistant Conic to new EPSG:1119 method (#3812) * Implement proposal001 from Planetary DWG from OGC (#3816) * Add option in proj CLI to use a CRS (#3825) * proj_factors(): make it work with projected CRS with non-metre unit and/or northing/easting axis order (#3826) * PROJ_DEBUG: make ON an alias of 2, and OFF of 1 (#3835) * Database: update to EPSG 10.094 (#3847) ### Bug fixes * GeographicBoundingBox::intersection(): avoid infinite recursion and stack overflow on invalid bounding boxes (#3748) * Various fixes related to concatenated operations (#3820) * Projected CRS identification: fix crash when the base CRS is a non-geographic geodetic CRS (#3830) * Avoid C++ exceptions to be thrown (and caught) when parsing strings like '+proj=longlat +datum=WGS84 +type=crs' (#3834) * BUG: Handle prefix whitespace when guessing WKT dialiect (#3841) * proj_alter_id(): make it replace an existing ID instead of appending a new one (#3846) * bonne: fix inverse map projection computations when lat_1 < 0 (#3849) * WKT1 ESRI import/export: fix GCS name for EPSG:8353 S-JTSK_[JTSK03]_Krovak_East_North (#3851) ## 9.2.1 ### Database updates * Add alias for old ESRI datum/CRS names of EPSG:8353 S_JTSK_JTSK03_Krovak_East_North (#3678) * Pseudo Mercator now supported with IAU CRS's (#3645) * Updated to EPSG 10.088 (#3731) ### Bug fixes * Fixed build errors with Cygwin (#3642) * PROJ string CRS parser: make sure that PROJ arguments of the rotated string are kept in the WKT representation (#3656) * Fix slowness on proj_trans() when doing WGS 84 <--> NAD83 conversions (#3661) * vgridshift/gridshift: accept hydroid_height as valid band description (#3675) * WKT/PROJJSON: import/export accuracy of ConcatenatedOperation (#3676) * Coordinate operation factory: count identified concatenated operations as a single step (#3677) * EngineeringCRS: make proj_create_engineering_crs() set a datum name and relax isEquivalentTo() comparisons (#3685) * PROJJSON: fix import/export of integer parameter value, and deal with interpolation CRS parameters in conversions (#3695) * CMake: avoid imbalanced cmake_policy push/pop if TIFF or CURL dependency cannot be found (#3697) * proj_create_crs_to_crs(): restore transformation selection behaviour of PROJ 9.1 when grids are missing (#3707) * ESRI WKT: improve roundtrip of name and definition for UPS WGS84 CRS (#3720) * CRS instantiation from PROJ.4 string: set 'Unknown based on XXXX ellipsoid' datum name when instantiating from known +a, +rf (#3727) * cs2cs / proj_create_crs_to_crs(): fix regression with geocentric CRS (#3729) * proj_trans(): set PROJ_ERR_COORD_TRANSFM_NO_OPERATION error when failing in ONLY_BEST=YES mode (#3730) * tinshift: raise maximum size of JSON file to 100 MB (#3736) ## 9.2.0 ### Updates * Database * EPSG updated to EPSG 10.082 (#3609) * ESRI objects updated to v3.1.0 (#3575) * Added Slovenian geoid model SLO-VRP2016/Koper (#3610) * Projections * Added generic Space Oblique Mercator (#3338) * Inverse eck4: Add checks for projection domain (#3625) * Transformations * Added support for NADCON5 grids and transformation method (#3510) * Added option ONLY_BEST=YES (#3535) When enabled only use the best possible transformation between two CRS's can be instantiated. If the best possible transformations can't be instantiated it will fail instead of opting for the next best transformation. With ONLY_BEST=YES a transformation will fail if a needed grid is unavailable. The option can be toggled in proj.ini and with --only-best in cs2cs. * Implement 'Similarity transformation' (EPSG:9621) and import related transformations from EPSG (#3578) * Optimise transformations between GDA94, GDA2020 and WGS84 (#3621) * Performance improvements * Pass PJ_COORD by reference for fwd4d and inv4d callbacks (#3503) * Improved of inverse meridian length calculations (#3516) * Avoid very poor performance on a geographic CRS whose datum name is the alias of an official one (#3624) * Well-Known Text improvements * Support WKT:2019 COORDINATEMETADATA[] construct (#2711) * implement alterCSLinearUnit for CompoundCRS (#3325) * Implement alterCSLinearUnit for BoundCRS (#3327) * Added PJ_TYPE_DERIVED_PROJECTED_CRS (#3488) * Added support for ISO19111 CoordinateMetadata class (#3562) * Update WKT import to support WKT2 corrigendum (#3573) * WKT import: Make axis direction and range meaning enumeration case insensitive as mandated by spec (#3577) * Implement AffineCS and handle it in WKT (#3579) * WKT1 parser: Support inf as inverse flattening value (#3626) * PROJJSON * Version number changed to 0.6 * Added an additional optional source_crs property in abridged_transformation (#3454) * Added support for ISO19111 CoordinateMetadata class (#3562) * Implement AffineCS and handle it in PROJJSON (#3579) * C/C++ API * C API: add proj_get_domain_count(), proj_get_area_of_use_ex() and proj_get_scope_ex() (#3588) ### Deprecations The following functions have been deprecated and will be removed in a future version. * C API function proj_rtodms. Use proj_rtodms2 instead (#3431) * C experimental API function proj_create_conversion_tunisia_mapping_grid(). Use proj_create_conversion_tunisia_mining_grid() instead (#3559) * C++ API function createTunisiaMapingGrid(). Use createTunisiaMiningGrid() instead (#3559) * Added explicit NaN handling to proj_trans and gie (#3603) * CMake * Added uninstall target (#3362) * Adopted use of TIFF:TIFF and CURL::libcurl targets (#3374) * Security improvements * Replaced uses of sprintf with the safer snprintf (#3421, #3431) * Various other improvements * Implemented platform independent mutex for better results on lesser used platforms (#3425) * Improved name and remarks in descriptions of some vertical transformations (#3334) * Implemented stricter matching by name to avoid false positives (#3487) * Improved numerical accuracy of the meridian length calculations and its inverse (#3516) * Added PROJ_IGNORE_CELESTIAL_BODY=YES environment variable that allows better matching of non-earth shaped ellipsoids to other celestial bodies (#3569) ### Bug fixes * rtodms(): fix potential buffer overflow not dealt with (#3441) * NetworkFile::open(): fix memory leak in unlikely error code path (#3443) * When importing LOCAL_CS["foo"], generates a non-empty name for the datum (#3491) * Avoid unit mix-up in CRS::alterCSLinearUnit for DerivedProjectedCRS (#3499) * WKT to PROJ conversions: Map 'Lambert Azimuthal Equal Area (Spherical)' to '+proj=laea +R_A' (#3526) * ProjectedCRS::identify(): Relax trust in id/authority in definition to identify (#3532) * Fix instantion of `http://www.opengis.net/def/crs/IAU/2015/xxx` URNs (#3569) * Fix proj_normalize_for_visualization() on a transformation with FORCE_OVER=YES (#3570) * createBoundCRSToWGS84IfPossible(): Do not report +towgs84 for a CRS with multiple extents, such as EPSG:6316 (#3587) * pj_get_suggested_operation(): handle longitudes outside of [-180,180] for coordinate operation selection (#3595) * WKT1 parser: only emit warning when encountering invalid UNKNOWN WKT1 axis direction (#3618) * projinfo: fix long option name --source-crs (#3601) ## 9.1.1 ### Updates * Database: register at_bev_AT_GIS_GRID_2021_09_28 grid (#3442) ### Bug fixes * Implement alterGeodeticCRS and stripVerticalComponent for DerivedProjected (#3482) * Various improvements to handling of DerivedProjectedCRS (#3482, #3477, #3342, #3319, #3317) * Add missing `` includes (#3459) * cs2cs: better validate value of -W option (#3453) * DatabaseContext::lookForGridInfo(): fix caching of filenames and set correct URLs (#3448) * Database: register in grid_alternatives grids from PROJ-data that have no corresponding transformation record (#3446) * cass projection: fix forward computation of easting (#3433) * Implement Geographic/Vertical Offset conversions (#3413) * vandg projection: handle +over to extend the validity domain outside of |lon|>180deg (#3427) * eqdc projection: avoid floating point division by zero in non-nominal case (#3415) * createOperations(): fix issues when transforming between Geog3D and DerivedGeog3D CRS with Geographic3D offsets method (#3411) * VerticalCRS::_isEquivalentTo(): do not consider VerticalCRS and DerivedVerticalCRS as equivalent (#3408) * cct and cs2cs: Avoid problems when encountering UTF-8 BOM characters at beginning of input files (#3395) * createFromUserInput(): Improved lookup when approximate name is provided (#3371) * projinfo / cs2cs : auto promotion to 3D of CRS specified by name (#3367) * findsOpsInRegistryWithIntermediate(): make it work when source/target geodetic CRS has no known id (#3365) * createOperations(): emulate PROJ < 6 behavior when doing geocentric <--> geographic transformation between datum with unknown transformation (#3361) * Fix issue when transforming from/into a WKT2 Bound VerticalCRS with a 'Geographic3D to GravityRelatedHeight' method (#3355) * proj_normalize_for_visualization(): take into account FORCE_OVER property from source operation (#3350) * Link geodtest against libm when available (#3341) ## 9.1.0 ### Updates * Database * Database: update to EPSG v10.074 (#3273) * Update ESRI objects to version 3.0.0 (#3257) * Generate null transformation between geodetic/vertical datum ensemble and its members (#3266) * Add fk delete cascade to database tables for improved customizability of the database (#3237) * Add Svalbard geoid grid no_kv_arcgp-2006-sk to grid alternatives (#3292) * Added French grid fr_ign_RAF20 to grid alternatives (#3228) * WKT & PROJJSON * WKT2 parser: allow unit-less PARAMETER for coordinate operations (#3271) * WKT and PROJJSON adjustments (#3234) * Bump PROJJSON to v0.5 (#3216) * Change order of horizontal and vertical operations when dealing with WKT1 / PROJ4 compound CRS (#3127) * Coordinate Operations * Implement Vertical Offset and slope transformation method (#3200) * Add Interrupted Mollweide (land and ocean view) projections (#3139) * Add invertible Horner polynomials (#3133) * Optimizations * NTv2 and GTX grid readers: add a cache of lines to speed-up (#3241) * IComparable::isEquivalentTo() optimizations (#3233) * Various Updates * createOperations() / proj_trans(): better take into account area of interest name / do not only keep first returned coordinate operation (#3282) * createOperations(): take into account axis unit and inversion of target DerivedProjectedCRS (#3281) * Allow a Compound CRS with derived projected (#3283) * Make "Vertical Offset and Slope" method usable as a deriving conversion of a DerivedVerticalCRS (#3270) * PROJ pipeline generator: recognize opposite Helmert transformations using a different convention (#3265) * createOperations(): prefer simpler pipelines / affects WGS 84 to GDA94/GDA2020 (#3248) * Make it possible to determine which grid files were actually used during a transformation (#3180) * Transformation: no longer do vertical transformation when doing compound CRS to 2D CRS / add --3d to cs2cs (#3119) * Deprecate PROJ4 CMake name (#3094) * Use GNUInstallDirs for CMake install locations (#3100) * Introduce PROJ_DATA environment variable to deprecate PROJ_LIB (#3253) ### Bug fixes * projinfo: fix crash on --list-crs when proj.db cannot be opened (#3290) * getCRSInfoList(): fix retrieval of projected_crs given by text_definition only (#3289) * WKT parser: fix issue when parsing some WKT1 with Hotine_Oblique_Mercator_Azimuth_Center and ignoring rectified_grid_angle (#3280) * WKT1 import: better deal when the angular unit of the GEOGCS[] of the PROJCS[] doesn't match the one from the database (#3274) * createOperations(): avoid potential infinite recursions (#3264) * WKT ESRI: fix related to projected CRS export and add support for geographic 3D CRS with LINUNIT node (#3256) * proj_grid_info(): make it work again with remote grids (#3239) * createOperations(): fix projected CRS with non-metre horiz&vertical unit and towgs84 to gencentric CRS (#3231) * createOperations(): fix infinite recursion in a complex case (#3226) ## 9.0.1 ### Database updates * Update to EPSG 10.064 (#3208) * Add OGC:CRS84h (WGS 84 longitude-latitude-height) (#3155) ### Bug fixes * Use CMAKE_INSTALL_MANDIR to override default (#3081) * Increase MAX_ITER so Mollweide forward projection works near the poles (#3082) * Fix wrong results with SQLite 3.38.0 (#3091) * Fix issue when transforming from/to BoundCRS of 3D CRS with non-Greenwich prime meridian, created from WKT (#3098) * Fix issues with WKT of concatenated operations (#3105) * CMake: fix installation of proj.pc on Windows (#3109) * createOperations(): fix issue in transformation northing, easting projected CRS -> +proj=longlat +lon_wrap (#3110) * unitconvert: round to nearest date when converting to yyyymmdd (#3111) * Fix comparison of GeodeticRefrenceFrame vs DynamicGeodeticReferenceFrame (#3120) * createOperations(): fix transformation involving CompoundCRS, ToWGS84 and PROJ4_GRIDS (#3124) * Fix datum names when importing from PROJ4 crs strings (affects some transformations using geoidgrids) (#3129) * Deal with PARAMETER["EPSG code for Interpolation CRS",crs_code] (#3149) * createOperations(): fix CompoundCRS[BoundCRS[ProjectedCRS],BoundCRS[VerticalCRS]] to Geog3DCrs (#3151) * ITRF2014: fix ITRF2014:ITRF88,ITRF94 and ITRF96 definitions (#3159) * createBoundCRSToWGS84IfPossible(): improve selection logic to generate +towgs84= taking into account extent (#3160) * createOperations(): fix some complex cases involving TOWGS84 and CompoundCRS (#3163) * Fix cmake CURL dependency, update appveyor - vcpkg interaction (#3185) * WKT import: deal with Projected CRS that is a mix of WKT1:GDAL / WKT1:ESRI (#3189) * createOperations(): fix/improve result of 'BD72 + Ostend height ' to 'WGS84+EGM96 height' (#3199) * Identifier::isEquivalentName(): fix when ending by ' + ' which could indirectly cause an infinite stack call in master (#3202) * WKT import: correctly deal with absence of Latitude_Of_Origin parameter in WKT1 ESRI with Stereographic projection (#3212) * PROJJSON parser: do not error out if a datum ensemble member is unknown in the database (#3223) ## 9.0.0 ### Breaking changes * Support for the autotools build system has been removed (#3027) See RFC7 for details: ### Updates * Database updates: * ESRI projection engine db to version 12.9 (#2943) * EPSG v10.054 (#3051) * Vertical grid files for PL-geoid-2011, Polish geoid model (#2960) * Belgian geoid model hBG18 to grid alternatives (#3044) * Add new option to proj_create_crs_to_crs_from_pj method to force +over on transformation operations (#2914) * Specify CMAKE_INSTALL_RPATH for macOS; use -rpath LDFLAGS for tests (#3009) * Implement Geographic3D to Depth/Geog2D+Depth as used by ETRS89 to CD Norway depth (#3010) * Allow PROJ_LIB paths wrapped with double quotes (#3031) * Use external gtest by default when possible (#3035) * CMake: make BUILD_SHARED_LIBS=ON the default even on Windows (#3042) * proj.ini: add a 'ca_bundle_path' variable (#3049) ### Bug fixes * Fix extremely long parsing time on hostile PROJ strings (#2968) * CMake: fix warning with external googletest (#2980) * proj_get_crs_info_list_from_database(): report PJ_TYPE_GEODETIC_CRS for IAU_2015 -ocentric geodetic CRS (#3013) * peirce_q: rename +type parameter wrongly introduced in 8.2.1 to +shape (#3014) * Set more precise error code for parsing errors in proj_create() (#3037) * createOperations(): fix transformations from/to a BoundCRS of a DerivedGeographicCRS coming from WKT (#3046) * Better deal with importing strings like '+init=epsg:XXXX +over' (#3055) * Fix importing CRS definition with +proj=peirce_q and +shape different from square or diamond (#3057) ## 8.2.1 ### Updates * Database updated with EPSG v. 10.041 (#2974) ### Bug fixes * BoundCRS WKT import: fix setting of name (#2917) * PROJStringFormatter::toString(): avoid invalid iterator increment (#2932) * Ensure CApi test are cross-platform (#2934) * createOperations(): do not stop at the first operation in the PROJ namespace for vertical transformations (#2937) * createOperationsCompoundToCompound(): fix null pointer dereference when connection to proj.db doesn't exist. (#2938) * Fix windows.h conflict with Criterion::STRICT (#2950) * Cache result of proj_get_type() to help for performance of proj_factors() (#2967) * createOperations(): improvement for "NAD83(CSRS) + CGVD28 height" to "NAD83(CSRS) + CGVD2013(CGG2013) height" (#2977) * WKT1 import: correctly deal with missing rectified_grid_angle parameter (#2986) * Fix and additional options for Peirce Quincuncial projections (#2978) * Fix build with Intel C++ compiler (#2995) ## 8.2.0 ### Announcements From PROJ 9.0.0 and onwards CMake will be the only build system bundled with the PROJ package. As a consequence support for Autotools builds will stop when the 8.2 branch of PROJ reaches end of life. We encourage everyone to adjust their build workflows as soon as possible and report any discrepancies discovered between Autotools and CMake builds. Details about the build system unification can be found in PROJ RFC 7. ### Updates * Added the S2 projection (#2749) * Added support for Degree Sign on input (#2791) * ESRI WKT: add support for import/export of (non interrupted) Goode Homolosine (#2827) * Make filemanager aware of UWP Win32 API (#2831) * Add proj_create_conversion_pole_rotation_netcdf_cf_convention() to address netCDF datasets using a pole rotation method (#2835) * Emit better debug message when a grid isn't found (#2838) * Add support for GeodeticCRS using a Spherical planetocentric coordinate system (#2847) * PROJJSON: support additional properties allowed in id object (version, authority_citation, uri) for parity with WKT2:2019 (#2850) * Database layout modified to include "anchor" field to geodetic_datum and vertical_datum tables, consequently database layout version is increased to 1.2 (#2859) * proj_factors(): accept P to be a projected CRS (#2868) * Add IAU_2015 CRS definitions (#2876) * CRS::extractGeodeticCRS(): implement for DerivedProjectedCRS (#2877) * Added proj_trans_bounds() (#2882) * CMake: add a BUILD_APPS to be able to disable build of all applications (#2895) * CMake: generate invproj/invgeod binaries (symlinks on Unix, copy otherwise) (#2897) * CMake build: add generate_wkt1_parser and generate_wkt2_parser manual target, and logic to detect when they must be run (#2900) * Add fallback strategy for tinshift transform to use closest triangle for points not in any (#2907) * Database: update to EPSG v10.038 (#2910) * CMake: revise handling of symbol export and static builds (#2912) ### Bug fixes * Fix O(n^2) performance patterns where n is the number of steps of a pipeline (#2820) * Detect ESRI WKT better in certain circumstances (#2823) * Fix performance issue on pipeline instantiation of huge (broken) pipelines (#2824) * Make sure to re-order projection parameters according to their canonical order if needed (#2842) * Fix database access across fork() when SQLite3 doesn't use `pread[64]()` (#2845) * Fix error in implementation of Inverse ellipsoidal orthographic projection that cause convergence to sometimes fail (#2853) * Fix handling of edge-case coordinates in inverse ortho ellipsoidal oblique (#2855) * proj_normalize_for_visualization(): set input and output units when there are several alternative transformations (#2867) * CRS::identify(): fix ignoring CS order when identifying a geodetic CRS by a PROJ string with just the ellipsoid (#2881) * Fix CRS Equality with PROJ parameter order (#2887) * WKT concatenated operation parsing: fix when a axis order reversal conversion is the first or last operation (#2891) * WKT1 parser: recognize Lambert_Conformal_Conic as projection name for LCC 1SP or 2SP (#2893) * CMake: Always build gie if testing is requested (#2899) * Geographic 3D CRS: allow to export to WKT1:ESRI if only the GEOGCS is known (and thus extrapolating a VERTCS) (#2902) * lib_proj.cmake: add a PROJ::proj alias and add BUILD_INTERFACE include directories, so that proj can be used as a subdirectory of a larger project (#2913) ### Thanks to * Thomas Knudsen * Alan D. Snow * Johannes Schauer Marin Rodrigues * Howard Butler * Geoff Evans * Joris Van den Bossche * marcus-elia * Waheed Barghouthi * snowman2 * Ben Boeckel * Mike Taves * Javier Jimenez Shaw * Brendan Jurd * Kristian Evers * Even Rouault ## 8.1.1 ### Updates * EPSG Database updated to version 10.028 (#2773) ### Bug fixes * Include algorithm header file to avoid build errors on Alpine Linux (#2769) * CMake: fix installation of executables on iOS (#2766) * Associate extents to transformations of CRS's that include GEOIDMODEL (#2769) * Logging: avoid some overhead when logging is not enabled (#2775) * ortho: remove useless and invalid log trace (#2777) * CMake: remove external nlohmann_json from INTERFACE_LINK_LIBRARIES target (#2781) * reateOperations(): fix SourceTargetCRSExtentUse::NONE mode (#2783) * GeoTIFF grid reading: perf improvements (#2788) * Conversion::createUTM(): avoid integer overflow (#2796) * Inverse laea ellipsoidal: return PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN when appropriates (#2801) * Make sure that proj_crs_promote_to_3D returns a derived CRS (#2806) * createOperations(): fix missing deg<-->rad conversion when transforming with a CRS that has a fallback-to-PROJ4-string behaviour and is a BoundCRS of a GeographicCRS (#2808) * WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[] (#2812) * BoundCRS: accept importing/exporting in WKT2 and PROJJSON the scope/area/extent/id attributes (#2815) * ConcatenatedOperation::fixStepsDirection(): fix bad chaining of steps when inverse map projection is involved in non-final step (#2819) ### Thanks to * Brendan Jurd * Kristian Evers * Even Rouault ## 8.1.0 ### Updates * Database * Update to EPSG v10.027 (#2751) * Decrease DB size by using WITHOUT ROWID tables (#2730) (#2647) * Add a ANALYZE step during proj.db creation allowing for faster lookups (#2729) * Added a PROJ.VERSION metadata entry (#2646) * Added NGO48 (EPSG:4273) to ETRS89 (EPSG:4258) triangulation-based transformation (#2554) * Additions to the norwegian NKG2020 transformation (#2548) * ESRI projection database updated to version 12.8 (#2717) * API additions * Added proj_get_geoid_models_from_database() function that returns a list of geoid models available for a given CRS (#2681) * Added proj_get_celestial_body_list_from_database that returns a list of celestial bodies in the PROJ database (#2667) * Added proj_get_celestial_body_name() (#2662) * Various improvements * proj_trans/cs2cs: If two operations have the same accuracy, use the one that is contained within a larger one (#2750) * Share SQLite database handle among all contexts (#2738) * Add proj/internal/mutex.hpp as compat layer for mingw32 for std::mutex (#2736) * projsync: make it filter out files not intended for the current version (#2725) * Improvements related to DerivedVerticalCRS using Change Unit and Height/Depth reversal methods (#2696) * Update internal nlohmann/json to 3.9.1, and add a CMake option to be able to use external nlohmann/json (#2686) * createFromUserInput(): change name of CRS built from URN combined references to match the convention of EPSG projected CRS (#2677) * Parse compound id with two authorities, like ESRI:103668+EPSG:5703 (#2669) * Added projinfo option --list-crs (supports --area) (#2663) * Added support for hyperbolic Cassini-Soldner (#2637) * Added capability to get SQL statements to add custom CRS in the database (#2577) ### Bug fixes * Fix 'Please include winsock2.h before windows.h' warning with msys (#2692) * Minor changes to address lint in geodesic.c (#2752) * BoundCRS::identify(): avoid incompatible transformation for WKT1 / TOWGS84 export (#2747) * proj_create(): do not open proj.db if string is a PROJ string, even if proj_context_set_autoclose_database() has been set (#2735) * Fix export of transformation to PROJ string in a particular situation where CompoundCRS are involved (#2721) ### Thanks to * Howard Butler * Alan D. Snow * Roel van den Berg * Heidi Vanparys * Sveinung Himle * 積丹尼 Dan Jacobson * Nyall Dawson * Javier Jimenez Shaw * Charles Karney * Mike Taves * Kristian Evers * Even Rouault ## 8.0.1 ### Updates * Database: update to EPSG v10.018 (#2636) * Add transformations for CHGeo2004, Swiss geoid model (#2604) * Additions to the norwegian NKG2020 transformation (#2600) ### Bug fixes * pj_vlog(): fix buffer overflow in case of super lengthy error message (#2693) * Revert "proj_create_crs_to_crs_from_pj(): do not use PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION if area is specified" (#2679) * UTM: error out when value of +zone= is not an integer (#2672) * getCRSInfoList(): make result order deterministic (by increasing auth_name, code) (#2661) * createOperation(): make sure no to discard deprecated operations if the replacement uses an unknown grid (#2623) * Fix build on Solaris 11.4 (#2621) * Add mapping of ESRI Equal_Area projection method to EPSG (#2612) * Fix incorrect EPGS extent code for EPSG:7789>EPSG:4976 NKG transformation (#2599) * fix wrong capitalization of CHENyx06_ETRS.gsb (#2597) * createOperations(): improve handling of vertical transforms when when compound CRSs are used (#2592) * CRS::promoteTo3D(): propagate the extent from the 2D CRS (#2589) * createFromCRSCodesWithIntermediates(): improve performance when there is no match (#2583) * Fix proj_clone() to work on 'meta' coordinate operation PJ* objects that can be returned by proj_create_crs_to_crs() (#2582) * add PROJ_COMPUTE_VERSION, PROJ_VERSION_NUMBER, PROJ_AT_LEAST_VERSION macros (#2581) * Make proj_lp_dist() and proj_geod() work on a PJ* CRS object (#2570) * Fix gcc 11 -Wnonnull compilation warnings (#2559) * Fix use of uninitialized memory in gie tests (#2558) * createOperations(): fix incorrect height transformation between 3D promoted RGF93 and CH1903+ (#2555) ### Thanks to * Dan Jacobson * Sveinung Himle * Mike Taves * Javier Jimenez Shaw * Kristian Evers * Even Rouault ## 8.0.0 With the release of PROJ 8 the proj_api.h API is finally removed. See for more info on how to migrate from the old to the proj.h API. With the removal of proj_api.h it has been possible to simplify error codes and messages given by the software. The error codes are exposed in the API. Several improvements has been made to the command line utilities as well as tweaks in the underlying API. ### Updates * Public header file proj_api.h removed (#837) * Improved accuracy of the Mercator projection (#2397) * Copyright statement wording updated (#2417) * Allow cct to instantiate operations via object codes or names (#2419) * Allow @filename syntax in cct (#2420) * Added geocentric->topocentric conversion (+proj=topocentric) (#2444) * Update GeographicLib to version 1.51 (#2445) * Added option to allow export of Geographic/Projected 3D CRS in WKT1_GDAL (#2450) * Added --area and --bbox options in cs2cs to restrict candidate coordinate operations (#2466) * Added build time option to make PROJ_LIB env var tested last (#2476) * Added --authority switch in cs2cs to control where coordinate operations are looked for. C API function proj_create_crs_to_crs_from_pj() updated accordingly (#2477) * Error codes revised and exposed in the public API (#2487) * Added --accuracy options to projinfo. C API function proj_create_crs_to_crs_from_pj() updated accordingly (#2488) * Added proj_crs_is_derived() function to C API (#2496) * Enabled linking against static cURL on Windows (#2514) * Updated ESRI CRS database to 12.7 (10.8.1/2.6) (#2519) * Allow a WKT BoundCRS to use a PROJ string transformation (#2521) * Update to EPSG v10.015 (#2539) * Default log level set to PJ_LOG_ERROR (#2542) * CMake installs a pkg-config file proj.pc, where supported (#2547) ### Bug fixes * Do not restrict longitude to [-90;90] range in spherical transverse Mercator forward projection (#2471) * createOperations(): fix Compound to Geog3D/Projected3D CRS with non-metre ellipsoidal height (#2500) * Avoid error messages to be emitted log level is set to PJ_LOG_NONE (#2527) * Close database connection when autoclose set to True (#2532) ### Thanks to * Zac Miller * Juan Hernando * Thomas Knudsen * Sveinung Himle * Olli Raisa * Nomit Rawat * Modern Slave * J.H. van de Water * Guillaume Lostis * Martin Steinisch * Javier Jimenez Shaw * Mateusz Łoskot * Martijn Visser * Alan D. Snow * Mike Taves * Nyall Dawson * Charles Karney * Kristian Evers * Even Rouault ## 7.2.1 ### Updates * Add metadata with the version number of the database layout (#2474) * Split coordinateoperation.cpp and test_operation.cpp in several parts (#2484) * Update to EPSG v10.008 (#2490) * Added the NKG 2008 and 2020 transformations in proj.db (#2495) ### Bug fixes * Set CURL_ENABLED definition on projinfo build (#2405) * createBoundCRSToWGS84IfPossible(): make it return same result with a CRS built from EPSG code or WKT1 (#2412) * WKT2 parsing: several fixes related to map projection parameter units (#2428) * createOperation(): make it work properly when one of the CRS is a BoundCRS of a DerivedGeographicCRS (+proj=ob_tran +o_proj=lonlat +towgs84=....) (#2441) * WKT parsing: fix ingestion of WKT with a Geocentric CRS as the base of the projected CRS (#2443) * GeographicCRS::_isEquivalentTo(EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS): make it work when comparing easting,northing,up and northing,easting,up (#2446) * createOperation(): add a ballpark vertical transformation when dealing with GEOIDMODEL[] (#2449) * Use same arguments to printf format string for both radians and degrees in output by cct (#2453) * PRIMEM WKT handling: fixes on import for 'sexagesimal DMS' or from WKT1:GDAL/ESRI when GEOGCS UNIT != Degree; morph to ESRI the PRIMEM name on export (#2455) * createObjectsFromName(): in exact match, make looking for 'ETRS89 / UTM zone 32N' return only the exact match (#2462) * Inverse tmerc spherical: fix wrong sign of latitude when lat_0 is used (#2469) * Add option to allow export of Geographic/Projected 3D CRS in WKT1_GDAL (#2470) * Fix building proj.db with SQLite built with -DSQLITE_DQS=0 (#2480) * Include JSON Schema files in CMake builds (#2485) * createOperations(): fix inconsistent chaining exception when transforming from BoundCRS of projected CRS based on NTF Paris to BoundCRS of geog CRS NTF Paris (#2486) ### Thanks to * Zac Miller * Nomit Rawat * Guillaume Lostis * J.H. van de Water * Kristian Evers * Even Rouault ## 7.2.0 ### Updates * Command line tools: * Add multi-line PROJ string export capability, and use it by default in projinfo (unless --single-line is specified) (#2381) * Coordinate operations: * +proj=col_urban projection, implementing a EPSG projection method used by a number of projected CRS in Colombia (#2395) * +proj=tinshift for triangulation-based transformations (#2344) * Added ellipsoidal formulation of +proj=ortho (#2361) * Database * Update to EPSG 10.003 and make code base robust to dealing with WKT CRS with DatumEnsemble (#2370) * Added Finland tinshift operations (#2392) * Added transformation from JGD2011 Geographic 3D to JGD2011 height using GSIGEO2011 (#2393) * Improve CompoundCRS identification and name morphing in VerticalCRS with ESRI WKT1 (#2386) * Added OGC:CRS27 and OGC:CRS83 CRS entries for NAD27 and NAD83 in longitude, latitude order (#2350) * API * Added temporal, engineering, and parametric datum PJ_TYPE enumerations (#2274) * Various improvements to context handling (#2329, #2331) * proj_create_vertical_crs_ex(): add a ACCURACY option to provide an explicit accuracy, or derive it from the grid name if it is known (#2342) * proj_crs_create_bound_crs_to_WGS84(): make it work on verticalCRS/compoundCRS such as EPSG:4326+5773 and EPSG:4326+3855 (#2365) * promoteTo3D(): add a remark with the original CRS identifier (#2369) * Added proj_context_clone (#2383) ### Bug fixes * Avoid core dumps when copying contexts in certain scenarios (#2324) * proj_trans(): reset errno before attemptying a retry with a new coordinate operation (#2353) * PROJJSON schema corrected to allow prime meridians values with explicitly stating a unit (degrees assumed) (#2354) * Adjust createBoundCRSToWGS84IfPossible() and operation filtering (for POSGAR 2007 to WGS84 issues) (#2357) * createOperations(): several fixes affecting NAD83 -> NAD83(2011) (#2364) * WKT2:2019 import/export: handle DATUM (at top level object) with PRIMEM * WKT1_ESRI: fix import and export of CompoundCRS (#2389) ### Thanks to * Alexander Saprykin * Jeff McKenna * Nyall Dawson * Kai Pastor * Juan Hernando * Javier Jimenez Shaw * Howard Butler * Alan D. Snow * Charles Karney * Kristian Evers * Even Rouault ## 7.1.1 ### Updates * Added various Brazilian grids to the database #2277 * Added geoid file for Canary Islands to the database #2312 * Updated EPSG database to version 9.8.15 #2310 ### Bug fixes * WKT parser: do not raise warning when parsing a WKT2:2015 TIMECRS whose TIMEUNIT is at the CS level, and not inside #2281 * Parse '+proj=something_not_latlong +vunits=' without +geoidgrids as a Projected3D CRS and not a compound CRS with a unknown datum #2289 * C API: Avoid crashing due to missing SANITIZE_CTX() in entry points #2293 * CMake build: Check "target_clones" before use #2297 * PROJ string export of +proj=krovak +czech: make sure we export +czech… #2301 * Helmert 2D: do not require a useless +convention= parameter #2305 * Fix a few spelling errors ("vgridshit" vs. "vgridshift") #2307 * Fix ability to identify EPSG:2154 as a candidate for 'RGF93_Lambert_93' #2316 * WKT importer: tune for Oracle WKT and 'Lambert Conformal Conic' #2322 * Revert compiler generated Fused Multiply Addition optimized routines #2328 ### Thanks to * Jeff McKenna * Kai Pastor * Javier Jimenez Shaw * Kristian Evers * Even Rouault ## 7.1.0 ### Updates * New transformations: * Add a +proj=defmodel transformation for multi-component time-based deformation models (#2206) * New projections: * Add square conformal projections from libproject (#2148): * Adams Hemisphere in a Square * Adams World in a Square I * Adams World in a Square II * Guyou * Pierce Quincuncial * Adams Square II: map ESRI WKT to PROJ string, and implement iterative inverse method (#2157) * Added IGH Oceanic View projection (#2226) * Add wink2 inverse by generic inversion of forward method (#2243) * Database: * Update to EPSG 9.8.12, ESRI 10.8.1 and import scope and remarks for conversion (#2238) (#2267) * Map the Behrmann projection to cae when converting ESRI CRSes (#1986) * Support conversion of Flat_Polar_Quartic projection method (#1987) * Register 4 new Austrian height grids (see ) and handle 'Vertical Offset by Grid Interpolation (BEV AT)' method (#1989) * Add ESRI projection method mappings for Mercator_Variant_A, Mercator_Variant_B and Transverse_Cylindrical_Equal_Area and various grid mappings (#2020) (#2195) * Map ESRI Transverse_Mercator_Complex to Transverse Mercator (#2040) * Register grids for New Caledonia (see ) (#2051) (#2239) * Register NZGD2000 -> ITRF96 transformation for NZGD2000 database (#2248) * Register geoid file for UK added (see ) (#2250) * Register Slovakian geoid transformations with needed code changes (#2259) * Register Spanish SPED2ETV2 grid for ED50->ETRS89 (#2261) * API: * Add API function proj_get_units_from_database() (#2065) * Add API function proj_get_suggested_operation() (#2068) * Add API functions proj_degree_input() and proj_degree_output() (#2144) * Moved proj_context_get_url_endpoint & proj_context_get_user_writable_directory from proj_experimental.h to proj.h (#2162) * createFromUserInput(): allow compound CRS with the 2 parts given by names, e.g. 'WGS 84 + EGM96 height' (#2126) * createOperations(): when converting CompoundCRS<-->Geographic3DCrs, do not use discard change of ellipsoidal height if a Helmert transformation is involved (#2227) * proj_list_units() deprecated, superseded by proj_get_units_from_database() * proj_list_angular_units() deprecated, superseded by proj_get_units_from_database() * Optimizations: * tmerc/utm: add a +algo=auto/evenden_snyder/poder_engsager parameter (#2030) * Extended tmerc (Poder/Engsager): speed optimizations (#2036) * Approximate tmerc (Snyder): speed optimizations (#2039) * pj_phi2(): speed-up computation (and thus inverse ellipsoidal Mercator and LCC) (#2052) * Inverse cart: speed-up computation by 33% (#2145) * Extended tmerc: speed-up forward path by ~5% (#2147) * Various: * Follow PDAL's CMake RPATH strategy (#2009) * WKT import/export: add support for WKT1_ESRI VERTCS synta (#2024) * projinfo: add a --hide-ballpark option (#2127) * gie: implement a strict mode with ` ` (#2168) * Allow importing WKT1 COMPD_CS with a VERT_DATUM[Ellipsoid,2002] (#2229) * Add runtime checking that sqlite3 is >= 3.11 (#2235) ### Bug fixes * createOperations(): do not remove ballpark transformation if there are only grid based operations, even if they cover the whole area of use (#2155) * createFromProjString(): handle default parameters of '+krovak +type=crs', and handle +czech correctly (#2200) * ProjectedCRS::identify(): fix identification of EPSG:3059 (#2215) * Database: add a 'WGS84' alias for the EPSG:4326 CRS (#2218) * Fixes related to CompoundCRS and BoundCRS (#2222) * Avoid 2 warnings about missing database indices (#2223) * Make projinfo --3d --boundcrs-to-wgs84 work better (#2224) * Many fixes regarding BoundCRS, CompoundCRS, Geographic3D CRS with non-metre units (#2234) * Fix identification of (one of the) ESRI WKT formulations of EPSG:3035 (#2240) * Avoid using deprecated and removed Windows API function with Mingw32 (#2246) * normalizeForVisualization(): make it switch axis for EPSG:5482 (RSRGD2000 / RSPS2000) (#2256) * Fix access violation in proj_context_get_database_metadata (#2260) ### Thanks to * Martin Raspaud * Jeroen Ooms * Jeff McKenna * Colin Doig * Chris Mayo * Chatziargyriou Eleftheria * Bas Couwenberg * B R S Recht * 積丹尼 Dan Jacobson * Alan D. Snow * GitHub user @chrodger * Pedro Venancio * Olli Räisä * John Krasting * Andrei Marshalov * Javier Jimenez Shaw * Martin Dobias * Howard Butler * Nyall Dawson * Mike Taves * Kristian Evers * Even Rouault ## 7.0.1 ### Updates * Database: update to EPSG v9.8.9 #2141 ### Bug fixes * Make tests independent of proj-datumgrid (#1995) * Add missing projection property tables (#1996) * Avoid crash when running against SQLite3 binary built with -DSQLITE_OMIT_AUTOINIT (#1999) * createOperations(): fix wrong pipeline generation with CRS that has +nadgrids= and +pm= (#2002) * Fix bad copy&replace pattern on HEALPix and rHEALPix projection names (#2007) * createUnitOfMeasure(): use full double resolution for the conversion factor (#2014) * Update README with info on PROJ-data (#2015) * utm/ups: make sure to set errno to PJD_ERR_ELLIPSOID_USE_REQUIRED if es==0 (#2045) * data/Makefile.am: remove bashism (#2048) * ProjectedCRS::identify(): tune it to better work with ESRI WKT representation of EPSG:2193 (#2059) * Fix build with gcc 4.8.5 (#2066) * Autotools/pkg-conf: Define datarootdir (#2069) * cs2cs: don't require +to for '{source_crs} {target_crs} filename...' syntax (#2081) * CMake: fix bug with find_package(PROJ) with macOS (#2082) * ESRI WKT import / identification: special case for NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501 with Foot_US unit (#2088) * ESRI WKT import / identification: special case for NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501 with Foot_US unit (#2089) * EngineeringCRS: when exporting to WKT1_GDAL, output unit and axis (#2092) * Use jtsk03-jtsk horizontal grid from CDN (#2098) * CMake: prefer to use use PROJ_SOURCE_DIR and PROJ_BINARY_DIR (#2100) * Fix wrong grids file name in esri.sql (#2104) * Fix identification of projected CRS whose name is close but not strictly equal to a ESRI alias (#2106) * Fix working of Helmert transform between the horizontal part of 2 compoundCRS (#2111) * Database: fix registration of custom entries of grid_transformation_custom.sql for geoid grids (#2114) * ESRI_WKT ingestion: make sure to identify to non-deprecated EPSG entry when possible (#2119) * Make sure that importing a Projected 3D CRS from WKT:2019 keeps the base geographic CRS as 3D (#2125) * createOperations(): improve results of compoundCRS to compoundCRS case (#2131) * hgridshift/vgridshift: defer grid opening when grid has already been opened (#2132) * Resolve a few shadowed declaration warnings (#2142) * ProjectedCRS identification: deal with switched 1st/2nd std parallels for LCC_2SP(#2153) * Fix Robinson inverse projection (#2154) * createOperations(): do not remove ballpark transformation if there are only grid based operations, even if they cover the whole area of use (#2156) * createFromCoordinateReferenceSystemCodes(): 'optimization' to avoid using C++ exceptions (#2161) * Ingestion of WKT1_GDAL: correctly map 'Cylindrical_Equal_Area' (#2167) * Add limited support for non-conformant WKT1 LAS COMPD_CS[] (#2172) * PROJ4 string import: take into correctly non-metre unit when the string looks like the one for WGS 84 / Pseudo Mercator (#2177) * io.hpp: avoid dependency to proj_json_streaming_writer.hpp (#2184) * Fix support of WKT1_GDAL with netCDF rotated pole formulation (#2186) ### Thanks to * Mike Taves * Chris Mayo * Kristian Evers * Even Rouault ## 7.0.0 The major feature in PROJ 7 is significantly improved handling of gridded models. This was implemented in RFC4 (). The main features of the RFC4 work is that PROJ now implements a new grid format, Geodetic TIFF grids, for exchanging gridded transformation models. In addition to the new grid format, PROJ can now also access grids online using a data store in the cloud. The grids that was previously available via the proj-datumgrid packages are now available in two places: 1. As a single combined data archive including all available resource files 2. From the cloud via In Addition, provided with PROJ is a utility called projsync that can be used download grids from the data store in the cloud. The use of the new grid format and the data from the cloud requires that PROJ is build against libtiff and libcurl. Both are optional dependencies to PROJ but it is highly encouraged that the software is build against both. ATTENTION: PROJ 7 will be last major release version that includes the proj_api.h header. The functionality in proj_api.h is deprecated and only supported in maintenance mode. It is inferior to the functionality provided by functions in the proj.h header and all projects still relying on proj_api.h are encouraged to migrate to the new API in proj.h. See for more info on how to migrate from the old to the new API. ### Updates * Added new file access API to proj.h #866 * Updated the name of the most recent version of the WKT2 standard from WKT2_2018 to WKT2_2019 to reflect the proper name of the standard (#1585) * Improvements in transformations from/to WGS 84 (Gxxxx) realizations and vertical <--> geog transformations #1608 * Update to version 1.50 of the geodesic library (#1629) * Promote proj_assign_context to proj.h from proj_experimental.h (#1630) * Add rotation support to the HEALPix projection (#1638) * Add c function proj_crs_create_bound_vertical_crs() (#1689) * Use Win32 Unicode APIs and expect all strings to be UTF-8 (#1765) * Improved name aliases lookup (#1827) * CMake: Employ better use of CTest with the BUILD_TESTING option (#1870) * Grid correction: fix handling grids spanning antimeridian (#1882) * Remove legacy CMake target name "proj" #1883 * projinfo: add --searchpaths switch (#1892) * Add +proj=set operation to set component(s) of a coordinate to a fixed value (#1896) * Add EPSG records for 'Geocentric translation by Grid Interpolation (IGN)' (gr3df97a.txt) and map them to new +proj=xyzgridshift (#1897) * Remove 'null' grid file as it is now a special hardcoded case in grid code (#1898) * Add projsync utility (#1903) * Make PROJ the CMake project name #1910 * Use relative directory to locate PROJ resource files (#1921) ### Bug fixes * Horizontal grid shift: fix failures on points slightly outside a subgrid (#209) * Fix ASAN issue with SQLite3VFS class (#1902) * tests: force use of bash for proj_add_test_script_sh (#1905) ### Breaking changes * Reject NTV2 files where GS_TYPE != SECONDS #1294 * On Windows the name of the library is now fixed to ``proj.lib`` instead of encoding the version number in the library name (#1581) * Require C99 compiler (#1624) * Remove deprecated JNI bindings (#1825) * Remove -ld option from proj and cs2cs (#1844) * Increase CMake minimum version from 3.5 to 3.9 (#1907) ### Thanks to * Jeff McKenna * Calum Robinson * Anshul Singhvi * Bas Couwenberg * Mike Taves * Alan D. Snow * Charles Karney * Kristian Evers * Even Rouault ## 6.3.1 ### Updates * Update the EPSG database to version 9.8.6 * Database: add mapping for gg10_smv2.mnt and gg10_sbv2.mnt French grids * Database: add mapping for TOR27CSv1.GSB ### Bug fixes * Fix wrong use of derivingConversionRef() that caused issues with use of +init=epsg:XXXX by GDAL (affecting R spatial libraries) or in MapServer * fix exporting CoordinateSystem to PROJ JSON with ID * projinfo: use No. abbreviation instead of UTF-8 character (#1828) * CompoundCRS::identify(): avoid exception when horiz/vertical part is a BoundCRS * createOperations(): fix dealing with projected 3D CRS whose Z units != metre * WKT1_GDAL export: limit datum name massaging to names matching EPSG (#1835) * unitconvert with mjd time format: avoid potential integer overflow (ossfuzz 20072) * ProjectedCRS::identify(): fix wrong identification of some ESRI WKT linked to units * Database: add a geoid_like value for proj_method column of grid_alternatives, fix related entries and simplify/robustify logic to deal with EPSG 'Geographic3D to GravityRelatedHeight' methods * Fix ingestion of +proj=cea with +k_0 (#1881) * Fix performance issue, affecting PROJ.4 string generation of EPSG:7842 (#1913) * Fix identification of ESRI-style datum names starting with D_ but without alias (#1911) * cart: Avoid discontinuity at poles in the inverse case (#1906) * Various updates to make regression test suite pass with gcc on i386 (#1906) ### Thanks to * Alan D. Snow * GitHub user @russkel * Gerrit Holl * Anshul Singhvi * Raven Kopelman * Kristian Evers * Even Rouault ## 6.3.0 ### Updates * Database: tune accuracy of Canadian NTv1 file w.r.t NTv2 (#1812) * Modify verbosity level of some debug/trace messages (#1811) * projinfo: no longer call createBoundCRSToWGS84IfPossible() for WKT1:GDAL (#1810) * proj_trans: add retry logic to select other transformation if the best one fails. (#1809) * BoundCRS::identify(): improvements to discard CRS that aren't relevant (#1802) * Database: update to IGNF v3.1.0 (#1785) * Build: Only export symbols if building DLL (#1773) * Database: update ESRI entries with ArcGIS Desktop version 10.8.0 database (#1762) * createOperations(): chain operations whose middle CRSs are not identical but have the same datum (#1734) * import/export PROJJSON: support a interpolation_crs key to geoid_model (#1732) * Database: update to EPSG v9.8.4 (#1725) * Build: require SQLite 3.11 (#1721) * Add support for GEOIDMODEL (#1710) * Better filtering based on extent and performance improvements (#1709) ### Bug fixes * Horizontal grid shift: fix issue on iterative inverse computation when switching between (sub)grids (#1797) * createOperations(): make filtering out of 'uninteresting' operations less aggressive (#1788) * Make EPSG:102100 resolve to ESRI:102100 (#1786) * ob_tran: restore traditional handling of +to_meter with pj_transform() and proj utility (#1783) * CRS identification: use case insensitive comparison for authority name (#1780) * normalizeForVisualization() and other methods applying on a ProjectedCRS: do not mess the derivingConversion object of the original object (#1746) * createOperations(): fix transformation computation from/to a CRS with +geoidgrids and +vunits != m (#1731) * Fix proj_assign_context()/pj_set_ctx() with pipelines and alternative coord operations (#1726) * Database: add an auxiliary concatenated_operation_step table to allow arbitrary number of steps (#1696) * Fix errors running gie-based tests in Debug mode on Windows (#1688) ### Thanks to * Pedro Venancio * Owen Rudge * Nyall Dawson * Mateusz Łoskot * Markus Neteler * Juergen E. Fischer * Joaquim Luis * Jeff McKenna * Jakob Egger * Guillaume Lostis * GitHub user @yonarw * Asa Packer * Joe Mann * Stephan Hügel * Simon Schneegans * R. Schmunk * Alan D. Snow * Chris Crook * Howard Butler * Fabrice Fontaine * Kai Pastor * Martin Desruisseaux * Dalia Prizginiene * Mike Taves * Charles Karney * Kristian Evers * Even Rouault ## 6.2.1 ### Updates * Update the EPSG database to version 9.8.2 ### Bug fixes * Fixed erroneous spelling of "Potsdam" (#1573) * Calculate y-coordinate correctly in bertin1953 in all cases (#1579) * proj_create_crs_to_crs_from_pj(): make the PJ*arguments const PJ* (#1583) * PROJStringParser::createFromPROJString(): avoid potential infinite recursion (#1574) * Avoid core dump when setting ctx==NULL in functions proj_coordoperation_is_instantiable and proj_coordoperation_has_ballpark_transformation (#1590) * createOperations(): fix conversion from/to PROJ.4 CRS strings with non-ISO-kosher options and +towgs84/+nadgrids (#1602) * proj_trans_generic(): properly set coordinate time to HUGE_VAL when no value is passed to the function (#1604) * Fix support for +proj=ob_tran +o_proj=lonlat/latlong/latlon instead of only only allowing +o_proj=longlat (#1601) * Improve backwards compatibility of vertical transforms (#1613) * Improve emulation of deprecated +init style initialization (#1614) * cs2cs: autopromote CRS to 3D when there's a mix of 2D and 3D (#1563) * Avoid divisions by zero in odd situations (#1620) * Avoid compile error on Solaris (#1639) * proj_create_crs_to_crs(): fix when there are only transformations with ballpark steps (#1643) * PROJ string CRS ingester: recognize more unit-less parameters, and general handling of +key=string_value parameters (#1645) * Only call pkg-config in configure when necessary (#1652) * aeqd: for spherical forward path, go to higher precision ellipsoidal case when the point coordinates are super close to the origin (#1654) * proj_create_crs_to_crs(): remove elimination of Ballpark operations that caused transformation failures in some cases (#1665) * createOperations(): allow transforming from a compoundCRS of a bound verticalCRS to a 2D CRS (#1667) * Avoid segfaults in case of out-of-memory situations (#1679) * createOperations(): fix double vertical unit conversion from CompoundCRS to other CRS when the horizontal part of the projected CRS uses non-metre unit (#1683) * importFromWkt(): fix axis orientation for non-standard ESRI WKT (#1690) ### Thanks to * R. Schmunk * Jakob Egger * Alan D. Snow * Stephan Hügel * Kai Pastor * Kristian Evers * Even Rouault ## 6.2.0 ### Updates * Introduced PROJJSON, a JSON encoding of WKT2 (#1547) * Support CRS instantiation of OGC URN's (#1505) * Expose scope and remarks of database objects (#1537) * EPSG Database updated to version 9.7.0 (#1558) * Added C API function proj_grid_get_info_from_database() (#1494) * Added C API function proj_operation_factory_context_set_discard_superseded() (#1534) * Added C API function proj_context_set_autoclose_database() (#1566) * Added C API function proj_create_crs_to_crs_from_pj() (#1567) * Added C API function proj_cleanup() (#1569) ### Bug fixes * Fixed build failure on Solaris systems (#1554) ### Thanks to Version 6.2.0 is made possible by the following contributors: * GitHub user @edechaux * Michael D. Smith * Matt Littlemore * Kristian Evers * Even Rouault ## 6.1.1 ### Updates * Update EPSG registry to version 9.6.3 (1485) ### Bug fixes * Take the passed authority into account when identifying objects (#1466) * Avoid exception when transforming from NAD83 to projected CRS using NAD83(2011) (#1477) * Avoid off-by-one reading of name argument if name of resource file has length 1 (#1489) * Do not include PROJ_LIB in proj_info().searchpath when context search path is set (#1498) * Use correct delimiter for the current platform when parsing PROJ_LIB (#1497) * Do not confuse 'ID74' CRS with WKT2 ID[] node (#1506) * WKT1 importer: do case insensitive comparison for axis direction (#1509) * Avoid compile errors on GCC 4.9.3 (#1512) * Make sure that pipelines including +proj=ob_tran can be created (#1526) ### Thanks to Version 6.1.1 is made possible by the following contributors: * Alan D. Snow * Paul Menzel * Mateusz Łoskot * Bas Couwenberg * Peter Limkilde Svendsen * Mike Taves * Howard Butler * Nyall Dawson * Andrew Bell * Kristian Evers * Even Rouault ## 6.1.0 ### Updates * Include custom ellipsoid definitions from QGIS (#1337) * Add "-k ellipsoid" option to projinfo (#1338) * Make cs2cs support 4D coordinates (#1355) * WKT2 parser: update to OGC 18-010r6 (#1360 #1366) * Update internal version of googletest to v1.8.1 (#1361) * Database update: EPSG v9.6.2 (#1462), IGNF v3.0.3, ESRI 10.7.0 and add operation_version column (#1368) * Add proj_normalize_for_visualization() that attempts to apply axis ordering as used by most GIS applications and PROJ <6 (#1387) * Added noop operation (#1391) * Paths set by user take priority over PROJ_LIB for search paths (#1398) * Reduced database size (#1438) * add support for compoundCRS and concatenatedOperation named from their components (#1441) ### Bug fixes * Have gie return non-zero code when file can't be opened (#1312) * CMake cross-compilation fix (#1316) * Use 1st eccentricity instead of 2nd eccentricity in Molodensky (#1324) * Make sure to include grids when doing Geocentric to CompoundCRS with nadgrids+geoidgrids transformations (#1326) * Handle coordinates outside of bbox better (#1333) * Enable system error messages in command line automatically in builds (#1336) * Make sure to install projinfo man page with CMake (#1347) * Add data dir to pkg-config file proj.pc (#1348) * Fix GCC 9 warning about useless std::move() (#1352) * Grid related fixes (#1369) * Make sure that ISO19111 C++ code sets pj_errno on errors (#1405) * vgridshift: handle longitude wrap-around for grids with 360deg longitude extent (#1429) * proj/cs2cs: validate value of -f parameter to avoid potential crashes (#1434) * Many division by zero and similar bug fixes found by OSS Fuzz. ### Thanks to Version 6.1.0 is made possible by the following contributors: * Andrew Hardin * Sean Warren * Dan Baston * Howard Butler * Joris Van den Bossche * Elliott Sales de Andrade * Alan D. Snow * Nyall Dawson * Chris Mayo * Mike Taves * Kristian Evers * Even Rouault ## 6.0.0 PROJ 6 has undergone extensive changes to increase its functional scope from a cartographic projection engine with so-called "early-binding" geodetic datum transformation capabilities to a more complete library supporting coordinate transformations and coordinate reference systems. As a foundation for other enhancements, PROJ now includes a C++ implementation of the modelisation propopsed by the ISO-19111:2019 standard / OGC Abstract Specification Topic 2: "Referencing By Coordinates", for geodetic reference frames (datums), coordinate reference systems and coordinate operations. Construction and query of those geodetic objects is available through a new C++ API, and also accessible for the most part from bindings in the C API. Those geodetic objects can be imported and exported from and into the OGC Well-Known Text format (WKT) in its different variants: ESRI WKT, GDAL WKT 1, WKT2:2015 (ISO 19162:2015) and WKT2:2018 (ISO 19162:2018). Import and export of CRS objects from and into PROJ strings is also supported. This functionality was previously available in the GDAL software library (except WKT2 support which is a new feature), and is now an integral part of PROJ. A unified database of geodetic objects, coordinate reference systems and their metadata, and coordinate operations between those CRS is now available in a SQLite3 database file, proj.db. This includes definitions imported from the IOGP EPSG dataset (v9.6.0 release), the IGNF (French national mapping agency) geodetic registry and the ESRI projection engine database. PROJ is now the reference software in the "OSGeo C stack" for this CRS and coordinate operation database, whereas previously this functionality was spread over PROJ, GDAL and libgeotiff, and used CSV or other adhoc text-based formats. Late-binding coordinate operation capabilities, that takes metadata such as area of use and accuracy into account, has been added. This can avoid in a number of situations the past requirement of using WGS84 as a pivot system, which could cause unneeded accuracy loss, or was not doable at all sometimes when transformation to WGS84 was not available. Those late-binding capabilities are now used by the proj_create_crs_to_crs() function and the cs2cs utility. A new command line utility, projinfo, has been added to query information about a geodetic object of the database, import and export geodetic objects from/into WKT and PROJ strings, and display coordinate operations available between two CRSs. ### Updates * Removed projects.h as a public interface (#835) * Deprecated the proj_api.h interface. The header file is still available but will be removed with the next major version release of PROJ. It is now required to define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H before the interface can be used (#836) * Removed support for the nmake build system (#838) * Removed support for the proj_def.dat defaults file (#201) * C++11 required for building PROJ (#1203) * Added build dependency on SQLite 3.7 (#1175) * Added projinfo command line application (#1189) * Added many functions to proj.h for handling ISO19111 functionality (#1175) * Added C++ API exposing ISO19111 functionality (#1175) * Updated cs2cs to use late-binding features (#1182) * Removed the nad2bin application. Now available in the proj-datumgrid git repository (#1236) * Removed support for Chebyshev polynomials in proj (#1226) * Removed proj_geocentric_latitude from proj.h API (#1170) * Changed behaviour of proj: Now only allow initialization of projections (#1162) * Changed behaviour of tmerc: Now default to the Extended Transverse Mercator algorithm (etmerc). Old implementation available by adding +approx (#404) * Changed behaviour: Default ellipsoid now set to GRS80 (was WGS84) (#1210) * Allow multiple directories in PROJ_LIB environment variable (#1281) * Added Lambert Conic Conformal (2SP Michigan) projection (#1142) * Added Bertin1953 projection (#1133) * Added Tobler-Mercator projection (#1153) * Added Molodensky-Badekas transform (#1160) * Added push and pop coordinate operations (#1250) * Removed +t_obs parameter from helmert and deformation (#1264) * Added +dt parameter to deformation as replacement for removed +t_obs (#1264) ### Bug fixes * Read +towgs84 values correctly on locales not using dot as comma separator (#1136) * Fixed file offset for reading of shift values in NTv1 files (#1144) * Avoid problems with PTHREAD_MUTEX_RECURSIVE when using CMake (#1158) * Avoid raising errors when setting ellipsoid flattening to zero (#1191) * Fixed lower square calculations in rHealpix projection (#1206) * Allow Molodensky transform parameters to be zero (#1194) * Fixed wrong parameter in ITRF2000 init file (#1240) * Fixed use of grid paths including spaces (#1152) * Robinson: fix wrong values for forward path for latitudes >= 87.5 (#1172), and fix inaccurate inverse method. ### Thanks to Version 6.0.0 is made possible by the following contributors: * Aaron Puchert * Thomas Knudsen * Phil Elson * Mateusz Łoskot * Markus Neteler * Jürgen Fischer * Charles Karney * Bas Couwenberg * Karoline Skaar * Alan D. Snow * Howard Butler * Marco Bernasocchi * Ben Boeckel * Ivan Veselov * Philippe Rivière * Mike Taves * Elliott Sales de Andrade * Kai Pastor * Kristian Evers * Even Rouault ## 5.2.0 ### Updates * Added support for deg, rad and grad in unitconvert (#1054) * Assume +t_epoch as time input when not otherwise specified (#1065) * Added inverse Lagrange projection (#1058) * Added +multiplier option to vgridshift (#1072) * Added Equal Earth projection (#1085) * Added "require_grid" option to gie (#1088) * Replace +transpose option of Helmert transform with +convention. From now on the convention used should be explicitly written. An error will be returned when using the +transpose option (#1091) * Improved numerical precision of inverse spherical Mercator projection (#1105) * cct will now forward text after coordinate input to output stream (#1111) ### Bug fixes * Do not pivot over WGS84 when doing cs2cs-emulation with geocent (#1026) * Do not scan past the end of the read data in pj_ctx_fgets (#1042) * Make sure proj_errno_string() is available in DLL (#1050) * Respect +to_meter setting when doing cs2cs-emulation (#1053) * Fixed unit conversion factors for geod (#1075) * Fixed test failures related to GCC 8 (#1084) * Improved handling of +geoc flag (#1093) * Calculate correct projection factors for Webmercator (#1095) * cs2cs now always outputs degrees when transformed coordinates are in angular units (#1112) All bug fix numbers refer to issues or pull requests indexed at ### Thanks to Version 5.2.0 is made possible by the following contributors: * Søren Holm * Mateusz Łoskot * Jürnjakob Dugge * Greg Minshall * Aaron Puchert * Vedran Stojnović * Bojan Šavrič * Charles Karney * Mateusz Loskot * Howard Butler * Mike Toews * Kurt Schwehr * Even Rouault * Kristian Evers ## 5.1.0 ### Updates * Function proj_errno_string() added to proj.h API (#847) * Validate units between pipeline steps and ensure transformation sanity (#906) * Print help when calling cct and gie without arguments (#907) * CITATION file added to source distribution (#914) * Webmercator operation added (#925) * Enhanced numerical precision of forward spherical Mercator near the Equator (#928) * Added --skip-lines option to cct (#923) * Consistently return NaN values on NaN input (#949) * Removed unused src/org_proj4_Projections.h file (#956) * Java Native Interface bindings updated (#957, #969) * Horizontal and vertical gridshift operations extended to the temporal domain (#1015) ### Bug fixes * Handle nan float cast overflow in PJ_robin.c and nad_intr.c (#887) * Avoid overflow when Horner order is unreasonably large (#893) * Avoid unwanted NaN conversions in etmerc (#899) * Avoid memory failure in gie when not specifying x,y,z in gie files (#902) * Avoid memory failure when +sweep is initialized incorrectly in geos (#908) * Return HUGE_VAL on erroneous input in ortho (#912) * Handle commented lines correctly in cct (#933) * Avoid segmentation fault when transformation coordinates outside grid area in deformation (#934) * Avoid doing false easting/northing adjustments on cartesian coordinates (#936) * Thread-safe creation of proj mutex (#954) * Avoid errors when setting up geos with +lat_0!=0 (#986) * Reset errno when running proj in verbose mode (#988) * Do not interpolate node values at nodata value in vertical grid shifts (#1004) * Restrict Horner degrees to positive integer values to avoid memory allocation issues (#1005) All bug fix numbers refer to issues or pull requests indexed at ### Thanks to Version 5.1.0 is made possible by the following contributors: * Kristian Evers * Even Rouault * Kurt Schwehr * Mike Toews * Martin Desruisseaux * Charles Karney * Thomas Knudsen * Javier Goizueta * Bas Couwenberg * Adam Wulkiewicz * Aaron Puchert ## 5.0.1 ### Bug fixes All bug fix numbers refer to issues or pull requests indexed at * Handle ellipsoid change correctly in pipelines when +towgs84=0,0,0 is set #881 * Handle the case where nad_ctable2_init returns NULL #883 * Avoid shadowed declaration errors with old gcc #880 * Expand +datum properly +datum in pipelines #872 * Fail gracefully when incorrect headers are encountered in grid files #875 * Improve roundtrip stability in pipelines using +towgs84 #871 * Fixed typo in gie error codes #861 * Numerical stability fixes to the geodesic package #826 #843 * Make sure that transient errors are returned correctly #857 * Make sure that locally installed header files are not used when building PROJ #849 * Fix inconsistent parameter names in proj.h/proj_4D_api.c #842 * Make sure +vunits is applied #833 * Fix incorrect Web Mercator transformations #834 ### Thanks to Version 5.0.1 is made possible by the following contributors: * Mike Toews * Kurt Schwehr * Even Rouault * Charles Karney * Thomas Knudsen * Kristian Evers ## 5.0.0 This version of PROJ introduces some significant extensions and improvements to (primarily) the geodetic functionality of the system. The main driver for introducing the new features is the emergence of dynamic reference frames, the increasing use of high accuracy GNSS, and the related growing demand for accurate coordinate transformations. While older versions of PROJ included some geodetic functionality, the new framework lays the foundation for turning PROJ into a generic geospatial coordinate transformation engine. The core of the library is still the well established projection code. The new functionality is primarily exposed in a new programming interface and a new command line utility, "cct" (for "Coordinate Conversion and Transformation"). The old programming interface is still available and can - to some extent - use the new geodetic transformation features. The internal architecture has also seen many changes and much improvement. So far, these improvements respect the existing programming interface. But the process has revealed a need to simplify and reduce the code base, in order to support sustained active development. ```text !!! !!! Therefore we have scheduled regular releases over the coming years !!! which will gradually remove the old programming interface. !!! !!! This will cause breaking changes with the next two major version !!! releases, which will affect all projects that depend on PROJ !!! (cf. section "deprecations" below). !!! ``` The decision to break the existing API has not been easy, but has ultimately been deemed necessary to ensure the long term survival of the project. Not only by improving the maintainability immensely, but also by extending the potential user (and hence developer) community. The end goal is to deliver a generic coordinate transformation software package with a clean and concise code base appealing to both users and developers. ### Versioning and naming For the first time in more than 25 years the major version number of the software is changed. The decision to do this is based on the many new features and new API. While backwards compatibility remains - except in a few rare corner cases - the addition of a new and improved programming interface warrants a new major release. The new major version number unfortunately leaves the project in a bit of a conundrum regarding the name. For the majority of the life-time of the product it has been known as PROJ.4, but since we have now reached version 5 the name is no longer aligned with the version number. Hence we have decided to decouple the name from the version number and from this version and onwards the product will simply be called PROJ. In recognition of the history of the software we are keeping PROJ.4 as the *name of the organizing project*. The same project team also produces the datum-grid package. In summary: * The PROJ.4 project provides the product PROJ, which is now at version 5.0.0. * The foundational component of PROJ is the library libproj. * Other PROJ components include the application proj, which provides a command line interface to libproj. * The PROJ.4 project also distributes the datum-grid package, which at the time of writing is at version 1.6.0. ### Updates * Introduced new API in proj.h. * The new API is orthogonal to the existing proj_api.h API and the internally used projects.h API. * The new API adds the ability to transform spatiotemporal (4D) coordinates. * Functions in the new API use the "proj_" namespace. * Data types in the new API use the "PJ_" namespace, with a few historic exceptions such as XY, XYZ, LP and LPZ. * Introduced the concept of "transformation pipelines" that makes it possible to do complex geodetic transformations of spatiotemporal coordinates by daisy chaining simple coordinate operations. * Introduced cct, the Coordinate Conversion and Transformation application. * Introduced gie, the Geospatial Integrity Investigation Environment. * Selftest invoked by -C flag in proj has been removed * Ported approx. 1300 built-in selftests to gie format * Ported approx. 1000 tests from the gigs test framework * Added approx. 200 new tests * Adopted terminology from the OGC/ISO-19100 geospatial standards series. Key definitions are: * At the most generic level, a *coordinate operation* is a change of coordinates, based on a one-to-one relationship, from one coordinate reference system to another. * A *transformation* is a coordinate operation in which the two coordinate reference systems are based on different datums, e.g. a change from a global reference frame to a regional frame. * A *conversion* is a coordinate operation in which both coordinate reference systems are based on the same datum, e.g. change of units of coordinates. * A *projection* is a coordinate conversion from an ellipsoidal coordinate system to a plane. Although projections are simply conversions according to the standard, they are treated as separate entities in PROJ as they make up the vast majority of operations in the library. * New operations: * The pipeline operator (pipeline) * Transformations: * Helmert transform (helmert) * Horner real and complex polynomial evaluation (horner) * Horizontal gridshift (hgridshift) * Vertical gridshift (vgridshift) * Molodensky transform (molodensky) * Kinematic gridshift with deformation model (deformation) * Conversions: * Unit conversion (unitconvert) * Axis swap (axisswap) * Projections: * Central Conic projection (ccon) * Significant documentation updates, including * Overhaul of the structure of the documentation * A better introduction to the use of PROJ * A complete reference to the new proj.h API * a complete rewrite of the section on geodesic calculations * Figures for all projections * New "free format" option for operation definitions, which permits separating tokens by whitespace when specifying key/value- pairs, e.g. "proj = merc lat_0 = 45". * Added metadata to init-files that can be read with the proj_init_info() function in the new proj.h API. * Added ITRF2000, ITRF2008 and ITRF2014 init-files with ITRF transformation parameters, including plate motion model parameters. * Added ellipsoid parameters for GSK2011, PZ90 and "danish". The latter is similar to the already supported andrae ellipsoid, but has a slightly different semimajor axis. * Added Copenhagen prime meridian. * Updated EPSG database to version 9.2.0. * Geodesic library updated to version 1.49.2-c. * Support for analytical partial derivatives has been removed. * Improved performance in Winkel Tripel and Aitoff. * Introduced pj_has_inverse() function to proj_api.h. Checks if an operation has an inverse. Use this instead of checking whether P->inv exists, since that can no longer be relied on. * ABI version number updated to 13:0:0. * Removed support for Windows CE. * Removed the VB6 COM interface. ### Bug fixes All bug fix numbers refer to issues indexed at * Fixed incorrect convergence calculation in Lambert Conformal Conic. #16. * Handle ellipsoid parameters correctly when using +nadgrids=@null. #22. * Return correct latitude when using negative northings in Transverse Mercator (tmerc). #138. * Return correct result at origin in inverse Modified Stereographic of Alaska. #161. * Return correct result at origin in inverse Modified Stereographic of 48 U.S. #162. * Return correct result at origin in inverse Modified Stereographic of 50 U.S. #163. * Return correct result at origin in inverse Lee Oblated Stereographic. #164. * Return correct result at origin in inverse Miller Oblated Stereographic. #164. * Fixed scaling and wrap-around issues in Oblique Cylindrical Equal Area. #166. * Corrected a coefficient error in inverse Transverse Mercator. #174. * Respect -r flag when calling proj with -V. #184. * Remove multiplication by 2 at the equator error in Stereographic projection. #194. * Allow +alpha=0 and +gamma=0 when using Oblique Mercator. #195. * Return correct result of inverse Oblique Mercator when alpha is between 90 and 270. #331. * Avoid segmentation fault when accessing point outside grid. #369. * Avoid segmentation fault on NaN input in Robin inverse. #463. * Very verbose use of proj (-V) on Windows is fixed. #484. * Fixed memory leak in General Oblique Transformation. #497. * Equations for meridian convergence and partial derivatives have been corrected for non-conformal projections. #526. * Fixed scaling of cartesian coordinates in pj_transform(). #726. * Additional bug fixes courtesy of Google's OSS-Fuzz program: ### Deprecations * The projects.h header and the functions related to it is considered deprecated from version 5.0.0 and onwards. ```text !!! PROJECTS.H WILL BE REMOVED FROM THE LIBRARY !!! !!! WITH VERSION 6.0.0 !!! ``` * The nmake build system on Windows will not be supported from version 6.0.0 on onwards. Use CMake instead. ```text !!! NMAKE BUILD SYSTEM WILL BE REMOVED FROM THE LIBRARY !!! !!! WITH VERSION 6.0.0 !!! ``` * The proj_api.h header and the functions related to it is consided deprecated from version 5.0.0 and onwards. ```text !!! PROJ_API.H WILL BE REMOVED FROM THE LIBRARY !!! !!! WITH VERSION 7.0.0 !!! ``` ### Thanks to Version 5.0.0 is made possible by the following contributors: * Lukasz Komsta * Maxim Churilin * edechaux * dusanjovic * Zoltan Siki * Tom Fili * Nicolas David * Mike Toews * Micah Cochran * Luke Campbell * Ilya Oshchepkov * Adam Wulkiewicz * Jonas Tittmann * Mateusz Loskot * Etienne Jacques * Bas Couwenberg * Elliott Sales de Andrade * Charles Karney * Aaron Puchert * Julien Moquet * Charles Karney * Howard Butler * Even Rouault * Thomas Knudsen * Kristian Evers ## 4.9.3 * UTM now uses etmerc, following NGA recommendations. Tests adjusted for tiny changes in values. * new projections: Times, Natural Earth II, Compact Miller, Patterson Cylindrical, and inverse for Hammer and Eckert-Greifendorff. * runtime self tests are now opt-in instead of opt-out * math constants moved to projects.h * bugfixes * New (optional) runtime self tests added to proj ## 4.9.2 * proj_def.dat was missing from source distribution see for more detail * Update Geodesic library from GeographicLib * Remove setlocale() use in pj_init_ctx() * Renamed PVALUE in pj_param.c to prevent clash with Windows ## 4.9.1 * 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. * Implement inverse solution for Winkel Tripel from Drazan Tutic #250 * 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 * Tweak initialization ordering around setlocal which may have caused issues #237 * Support out-of-tree autoconf builds more completely #247 * Fix NaN handling by geod_inverse and geod_polygon_addedge #251 & #253 * Update config.sub and config.guess #257 * Adapt Charles Karney's CMake patches for smoother build #258 * Define default PROJ_LIB location for CMake compilation #261 * Fix Windows compilation on PJ_aitoff.c * Align CMake SOVERSION with autotools #263 * Regenerate nad/epsg with GDAL r28536 to avoid precision loss in TOWGS84 parameters, e.g. on Amersfoort / RD EPSG:4289 (#260) * Add CMake project-config.cmake scripts (#264 from Charles Karney) * Dial back test sensitivity #255 ## 4.9.0 * Implement CMake as an option for building PROJ.4 * Implement new virtual file api (projFileAPI) so that all access to grid shift and init files can be hooked. * Replace geodesic implementation with one from Charles Karney and add a supported public interface (geodesic.h). * Upgraded to EPSG 8.5. * Removed old (deprecated) Java bindings in favor of the new api introduced in 4.8.0. * Implement the calcofi (Cal Coop Ocean Fish Invest Lines/Stations) projection * Install projects.h again for applications that want access to internal structures and functions despite the inherent fragility. * Various bug fixes and cleanup. * Added the CalCOFI pseudo-projection, #135 ## 4.8.0 * Added the Natural Earth projection. * Added HEALPIX, rHEALPIX and Icosahedral Snyder Equal Area projections. * nad2bin now produces "CTable2" format grid shift files by default which are platform independent. * nad2nad removed, use cs2cs for datum shift operations. * projects.h no longer installed as a public include file. Please try to only use proj_api.h. * Add pj_get_spheroid_defn() accessor. * 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. * Upgrade to EPSG 7.9. Some changes in ideal datum selection. * JNI bindings reworked, org.proj4.Projections deprecated in favor of org.proj4.PJ. * Added preliminary vertical datum support. * Fix various multithreading issues, particular in datum grid handling code. * Added support for the +axis= option for alternate axis orientations as part of a coordinate system (used for TM South Orientated support). * +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 * Added in memory caching of init file search results for substantial acceleration in some application environments (like MapServer). * Regenerated nad/epsg init file with EPSG 7.1 database, including new support for Google Mercator (EPSG:3857). * Various thread safety improvements, including preliminary support for a mutex lock around some operations, like grid loading. ## 4.6.1 * Upgraded to EPSG 6.17 version for nad/epsg. Also corrected the precision problem introduced in the last version. * 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. * Fixed handling of extra text in cs2cs. * Renamed INSTALL to INSTALL.TXT. * The eqc projection has been generalized to include a latitude of origin. * Added the glabsgm (Gauss Laborde / Sphere Geometric Mean) projection, and gstmerc variation. * nad/IGNF init catalogue created. * added the ntf_r93.gsb datum shift file. * Add /Op in nmake.opt compile options to avoid VC7 optimization bug (#12) * Fix testvarious test script so it works properly when grid files available ## 4.6.0 * MAJOR: Rework pj_transform() to avoid applying ellipsoid to ellipsoid transformations as a datum shift when no datum info is available. * Avoid applying "change of ellipsoid" during datum shifting based on ellipsoids getting changed to spheres for spherical projections. * Upgrade to EPSG 6.13 * Added "900913" "Google Mercator" code in nad/esri.extra. * Avoid some static variable based multi-threading problems. * Improve error recovery if ctable style datum shift grid fails to load. * Support drive letters properly in PROJ_LIB paths for win32. * Fix occasional problem with DMS parsing. * Removed non-functional mpoly projection. * add lonlat, and latlon as aliases for longlat. ## 4.5.0 * Microsoft Visual Studio 8 compatibility changes. * Upgraded to EPSG 6.11.1 database. * Several bug fixes to pj_transform() to handle transient errors properly. * Fix Krovak projection (include +czech flag) * Added Roussilhe Stereographic projection from libproj4 (proj=rouss). * Added experimental +lon_wrap flag for alternate pj_transform() longitude wrapping behavior on output. ## 4.4.9 * Win32 build uses proj.dll by default now. * 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. * 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. * Added the proj=stereoa and proj=geos projections, incorporated from Gerald's libproj4. * A few other bug fixes. ## 4.4.8 * Updated epsg file to EPSG 6.5, added other.extra pseudo-EPSG WMS definitions * Made significant fixes to prime meridian support. * 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). * Added pj_get_release() function. * Ensure pj_transform() will try to transform all points in provided list if even some might transform properly. * Improved the accuracy of Geocentric_To_Geodetic() via an iterative solution. * Various other bug fixes. ## 4.4.7 * Added NTv2 (.gsb) grid shift file support. * 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). * Regenerated nad/epsg file with towgs84 parameters for non-greenwich prime meridians. * Updated nad/esri file with better generated form from Paul Ramsey. * Various bug fixes. ## 4.4.6 * Incorporated new lcca (Lambert Conformal Conic Alternate) projection from Gerald. * Updated 'espg' translation file for EPSG 6.2.2 with better support for prime meridians. * Added Prime Meridians via +pm command switch to cs2cs (and pj_transform). * Fixed bug with 7 parameter transforms. * Added 'esri' pseudo-epsg coordinate system file. * Cleanup so that PROJ.4 compiles clean as C++ code. * Added pj_get_def() to expand definitions of stuff like +init clauses. * Added a Krovak implementation (proj=krov). Note this may change again in the next release. proj-9.6.0/README.md000664 001754 001755 00000006531 14764566077 013705 0ustar00e012349e012349000000 000000 # PROJ [![Coveralls Status](https://coveralls.io/repos/github/OSGeo/PROJ/badge.svg?branch=master)](https://coveralls.io/github/OSGeo/PROJ?branch=master) [![Gitter](https://badges.gitter.im/OSGeo/proj.4.svg)](https://gitter.im/OSGeo/proj.4) [![Mailing List](https://img.shields.io/badge/PROJ-mailing%20list-4eb899.svg)](http://lists.osgeo.org/mailman/listinfo/proj) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5884394.svg)](https://doi.org/10.5281/zenodo.5884394) PROJ is a generic coordinate transformation software, that transforms coordinates from one coordinate reference system (CRS) to another. This includes cartographic projections as well as geodetic transformations. For more information on the PROJ project please see the web page at: The PROJ mailing list can be found at: See the NEWS.md file for changes between versions. The following command line utilities are included in the PROJ package: - `proj`: for cartographic projection of geodetic coordinates. - `cs2cs`: for transformation from one CRS to another CRS. - `geod`: for geodesic (great circle) computations. - `cct`: for generic Coordinate Conversions and Transformations. - `gie`: the Geospatial Integrity Investigation Environment. - `projinfo`: for geodetic object and coordinate operation queries. - `projsync`: for synchronizing PROJ datum and transformation support data. > More information on the utilities can be found on the [PROJ website](https://proj.org/apps). ## Installation Consult the [Installation](https://proj.org/install.html) page of the official documentation. For builds on the master branch, [install.rst](https://github.com/OSGeo/PROJ/blob/master/docs/source/install.rst) might be more up-to-date. ## Distribution files and format Sources are distributed in one or more files. The principle elements of the system are stored in a compressed tar file named `proj-x.y.z.tar.gz` where "x" will indicate the major release number, "y" indicates the minor release number, and "z" indicates the patch number of the release. In addition to the PROJ software package, distributions of datum conversion grid files and PROJ parameter files are also available. The grid package is distributed under the name `proj-data-x.y.zip`, where "x" is the major release version and "y" is the minor release version numbers. The resource packages can be downloaded from the [PROJ website](https://proj.org/download.html). More info on the contents of the proj-data package can be found at the [PROJ-data GitHub repository](https://github.com/OSGeo/PROJ-data). The resource file packages should be extracted to `PROJ_LIB` where PROJ will find them after installation. The default location of `PROJ_LIB` on UNIX-based systems is `/usr/local/share/proj` but it may be changed to a different directory. On Windows you have to define `PROJ_LIB` yourself. As an alternative to installing the data package on the local system, the resource files can be retrieved on-the-fly from the [PROJ CDN](https://cdn.proj.org/). A [network-enabled](https://proj.org/usage/network.html) PROJ build, will automatically fetch resource files that are not present locally from the CDN. ## Citing PROJ in publications See [CITATION](CITATION) proj-9.6.0/cmake/000775 001754 001755 00000000000 14764566152 013473 5ustar00e012349e012349000000 000000 proj-9.6.0/cmake/CMakeLists.txt000664 001754 001755 00000010414 14764566077 016241 0ustar00e012349e012349000000 000000 # The old CMake PROJECT-NAME was PROJ4. set (PROJECT_LEGACY_NAME PROJ4) string (TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LOWER) string (TOLOWER "${PROJECT_LEGACY_NAME}" PROJECT_LEGACY_LOWER) # Starting with version 7.0, we install config-style find package # files so that PROJ can be found with both # # find_package(PROJ) # find_package(PROJ4) # # Here are the details... The command # # find_package(PROJ) # # if successful, will define variables # # PROJ_FOUND # PROJ_VERSION # PROJ_LIBRARIES = PROJ::proj # PROJ_INCLUDE_DIRS # etc # # and will define targets # # PROJ::proj # PROJ4::proj # # Similarly # # find_package(PROJ4) # # if successful, will define variables # # PROJ4_FOUND # PROJ4_VERSION # PROJ4_LIBRARIES = PROJ4::proj # PROJ4_INCLUDE_DIRS # etc # # and will define targets # # PROJ::proj # PROJ4::proj # # Note that targets PROJ::proj and PROJ4::proj are provided in both # cases. However, no attempt is made to define both sets of variables # with the two find_package options. Doing so would just lead to user # confusion. # # Because pre-7.0 versions of PROJ do not support find_package (PROJ) # and do not define a target PROJ::proj # # find_package(PROJ4) # # (instead of PROJ) should be used in any development scenarios which # might involve (even indirectly) pre-7.0 versions of PROJ. # # At some future dates, find_package (PROJ4) will # # define PROJ4_LIBRARIES = PROJ::proj # give WARNING message suggesting migration to find_package(PROJ) # be disallowed via the version checking code # # At some more distant date, the PROJ4::proj target will be retired. # # # All this messiness is confined to # # cmake/CMakeLists.txt (this file) # cmake/project-config.cmake.in # cmake/project-config-version.cmake.in # Variables needed by ${PROJECT_NAME_LOWER}-config-version.cmake if (MSVC) # For checking the compatibility of MSVC_TOOLSET_VERSION; see # https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp # Assume major version number is obtained by dropping the last decimal # digit. math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10") else () set (MSVC_TOOLSET_VERSION 0) set (MSVC_TOOLSET_MAJOR 0) endif () # If this is a regular build (PROJECT_SOURCE_DIR == CMAKE_SOURCE_DIR), export legacy files by default # Otherwise, this is embedded in another project, only export PROJ target # cf https://github.com/OSGeo/gdal/issues/5646 string(COMPARE EQUAL "${PROJECT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}" DEFAULT_VAL) option(INSTALL_LEGACY_CMAKE_FILES "Install PROJ4 legacy target CMake files" ${DEFAULT_VAL}) set(PROJECT_LIST ${PROJECT_NAME}) if (INSTALL_LEGACY_CMAKE_FILES) set(PROJECT_LIST "${PROJECT_LIST}" "${PROJECT_LEGACY_NAME}") endif () foreach (PROJECT_VARIANT_NAME IN LISTS PROJECT_LIST) string (TOLOWER "${PROJECT_VARIANT_NAME}" PROJECT_VARIANT_LOWER) set (CMAKECONFIGSUBDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_VARIANT_LOWER}") # proj-config.cmake for the install tree. It's installed in # ${CMAKECONFIGSUBDIR} and @PROJECT_ROOT_DIR@ is the relative # path to the root from there. (Note that the whole install tree can # be relocated.) file (RELATIVE_PATH PROJECT_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKECONFIGSUBDIR} ${CMAKE_INSTALL_PREFIX}) configure_file (project-config.cmake.in project-${PROJECT_VARIANT_LOWER}-config.cmake @ONLY) configure_file (project-config-version.cmake.in project-${PROJECT_VARIANT_LOWER}-version.cmake @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/project-${PROJECT_VARIANT_LOWER}-config.cmake" DESTINATION "${CMAKECONFIGSUBDIR}" RENAME "${PROJECT_VARIANT_LOWER}-config.cmake") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/project-${PROJECT_VARIANT_LOWER}-version.cmake" DESTINATION "${CMAKECONFIGSUBDIR}" RENAME "${PROJECT_VARIANT_LOWER}-config-version.cmake") # Make information about the cmake targets (the library and the tools) # available. install(EXPORT targets NAMESPACE ${PROJECT_NAME}:: FILE ${PROJECT_NAME_LOWER}-targets.cmake DESTINATION "${CMAKECONFIGSUBDIR}") if (INSTALL_LEGACY_CMAKE_FILES) install(EXPORT targets NAMESPACE ${PROJECT_LEGACY_NAME}:: FILE ${PROJECT_LEGACY_LOWER}-targets.cmake DESTINATION "${CMAKECONFIGSUBDIR}") endif() endforeach () proj-9.6.0/cmake/Ccache.cmake000664 001754 001755 00000003616 14764566077 015657 0ustar00e012349e012349000000 000000 # # CMake module to support ccache (or clcache for MSVC) # # Copyright (c) 2021, Mike Taves # # Usage: # Add "include(Ccache)" to CMakeLists.txt and enable # using the option -D USE_CCACHE=ON option(USE_CCACHE "Use ccache (or clcache for MSVC) to compile C/C++ objects" OFF) if(NOT USE_CCACHE) # stop here and return to including file return() endif() # Search priority: # 1. ccache for many compilers except MSVC # 2. clcache for MSVC find_program(CCACHE_PROGRAM NAMES ccache clcache) if(CCACHE_PROGRAM) message(STATUS "Configuring ccache with ${CCACHE_PROGRAM}") if(CMAKE_GENERATOR STREQUAL "Xcode") # see https://crascit.com/2016/04/09/using-ccache-with-cmake/ set(C_LAUNCHER "${CCACHE_PROGRAM}") set(CXX_LAUNCHER "${CCACHE_PROGRAM}") set(CCACHE_LAUNCH_C ${CMAKE_BINARY_DIR}/ccache-c) set(CCACHE_LAUNCH_CXX ${CMAKE_BINARY_DIR}/ccache-cxx) file(WRITE "${CCACHE_LAUNCH_C}" "\ #!/bin/sh shift exec \"${C_LAUNCHER}\" \"${CMAKE_C_COMPILER}\" \"$@\" ") file(WRITE "${CCACHE_LAUNCH_CXX}" "\ #!/bin/sh shift exec \"${CXX_LAUNCHER}\" \"${CMAKE_CXX_COMPILER}\" \"$@\" ") # Note: file(CHMOD) introduced in CMake 3.19 execute_process( COMMAND chmod a+rx "${CCACHE_LAUNCH_C}" "${CCACHE_LAUNCH_CXX}" ) # Set Xcode project attributes to route compilation and linking # through the wrapper scripts set(CMAKE_XCODE_ATTRIBUTE_CC "${CCACHE_LAUNCH_C}") set(CMAKE_XCODE_ATTRIBUTE_CXX "${CCACHE_LAUNCH_CXX}") set(CMAKE_XCODE_ATTRIBUTE_LD "${CCACHE_LAUNCH_C}") set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CCACHE_LAUNCH_CXX}") else() # Most other generators (Unix Makefiles, Ninja, etc.) set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") endif() else() message(WARNING "Ccache was requested, but no program was not found") endif() proj-9.6.0/cmake/FileEmbed.cmake000664 001754 001755 00000005740 14764566077 016325 0ustar00e012349e012349000000 000000 # Derived from https://gitlab.com/jhamberg/cmake-examples/-/blob/master/cmake/FileEmbed.cmake # MIT licensed # Copyright (c) 2022 Jonathan Hamberg function(FileEmbedSetup) if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}file_embed) endif () if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c "") endif () add_library(file_embed ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c) target_include_directories(file_embed PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/file_embed) endfunction() function(FileEmbedAdd file) FileEmbedGenerate(${file} var) target_sources(file_embed PUBLIC ${var}) add_custom_command( OUTPUT ${var} COMMAND ${CMAKE_COMMAND} -DRUN_FILE_EMBED_GENERATE=1 "-DFILE_EMBED_GENERATE_PATH=${file}" -P ${PROJECT_SOURCE_DIR}/cmake/FileEmbed.cmake MAIN_DEPENDENCY ${file} ) endfunction() function(FileEmbedGenerate file generated_c) get_filename_component(base_filename ${file} NAME) set(output_filename "${base_filename}.c") string(MAKE_C_IDENTIFIER ${base_filename} c_name) file(READ ${file} content HEX) string(LENGTH "${content}" size) math(EXPR size_mult_16 "${size} - (${size} % 16)") string(SUBSTRING "${content}" 0 ${size_mult_16} content_mult_16) string(REGEX REPLACE "([A-Fa-f0-9][A-Fa-f0-9])\ ([A-Fa-f0-9][A-Fa-f0-9])\ ([A-Fa-f0-9][A-Fa-f0-9])\ ([A-Fa-f0-9][A-Fa-f0-9])\ ([A-Fa-f0-9][A-Fa-f0-9])\ ([A-Fa-f0-9][A-Fa-f0-9])\ ([A-Fa-f0-9][A-Fa-f0-9])\ ([A-Fa-f0-9][A-Fa-f0-9])" "0x\\1,0x\\2,0x\\3,0x\\4,0x\\5,0x\\6,0x\\7,0x\\8,\n" SEPARATED_HEX "${content_mult_16}") set(SEPARATED_HEX_REMAINDER "") if (NOT ${size_mult_16} EQUAL ${size}) string(SUBSTRING "${content}" ${size_mult_16} 16 content_remainder) string(REGEX REPLACE "([A-Fa-f0-9][A-Fa-f0-9])" "0x\\1," SEPARATED_HEX_REMAINDER "${content_remainder}") endif() set(output_c "${SEPARATED_HEX}${SEPARATED_HEX_REMAINDER}") set(output_c " #include \"${c_name}.h\" const uint8_t ${c_name}_data[] = { ${output_c} }\; const unsigned ${c_name}_size = sizeof(${c_name}_data)\; ") set(output_h " #ifndef ${c_name}_H #define ${c_name}_H #include extern const uint8_t ${c_name}_data[]\; extern const unsigned ${c_name}_size\; #endif // ${c_name}_H ") if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}file_embed) endif () file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.c ${output_c}) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.h ${output_h}) set(${generated_c} ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.c PARENT_SCOPE) endfunction() if (RUN_FILE_EMBED_GENERATE) FileEmbedGenerate(${FILE_EMBED_GENERATE_PATH} var) endif () proj-9.6.0/cmake/ProjConfig.cmake000664 001754 001755 00000004204 14764566077 016543 0ustar00e012349e012349000000 000000 ################################################################################ # ProjConfig.cmake - CMake build configuration of PROJ 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 # https://www.boost.org/LICENSE_1_0.txt) ################################################################################ include(CheckLibraryExists) include(CheckFunctionExists) # if C flags have -Werror, temporarily remove these while running some checks string(FIND "${CMAKE_C_FLAGS}" "-Werror" FIND_WERROR) if(FIND_WERROR GREATER_EQUAL 0) # we must be careful about not matching -Werror=something, so let's append # a space at the end of CMAKE_C_FLAGS and match -Werror with a trailing space string(REPLACE "-Werror " " " _tmp_CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ") set(_prev_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set(CMAKE_C_FLAGS "${_tmp_CMAKE_C_FLAGS}") endif() # check needed include file check_function_exists(localeconv HAVE_LOCALECONV) check_function_exists(strerror HAVE_STRERROR) if(NOT WIN32) check_library_exists(dl dladdr "" HAVE_LIBDL) check_library_exists(m exp "" HAVE_LIBM) endif() # restore CMAKE_C_FLAGS as before if(FIND_WERROR GREATER_EQUAL 0) set(CMAKE_C_FLAGS "${_prev_CMAKE_C_FLAGS}") endif() set(PACKAGE "proj") set(PACKAGE_BUGREPORT "https://github.com/OSGeo/PROJ/issues") set(PACKAGE_NAME "PROJ") set(PACKAGE_STRING "PROJ ${${PROJECT_NAME}_VERSION}") set(PACKAGE_TARNAME "proj") set(PACKAGE_URL "https://proj.org") set(PACKAGE_VERSION "${${PROJECT_NAME}_VERSION}") # check if a second proj_config.h exists (created by ./configure) # as this is within CMake's C_INCLUDES / CXX_INCLUDES set(AUTOCONF_PROJ_CONFIG_H "${PROJ_SOURCE_DIR}/src/proj_config.h") if(EXISTS ${AUTOCONF_PROJ_CONFIG_H}) message(WARNING "Autoconf's ${AUTOCONF_PROJ_CONFIG_H} may interfere with this " "CMake build. Run 'make distclean' in the source directory " "before CMake's build.") endif() configure_file(cmake/proj_config.cmake.in src/proj_config.h) proj-9.6.0/cmake/ProjInstallPath.cmake000664 001754 001755 00000001033 14764566077 017556 0ustar00e012349e012349000000 000000 #---------------------------------------------- # 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() if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX ${DEFAULT_PROJ_ROOT_DIR} CACHE PATH "Proj install prefix" FORCE) endif() proj-9.6.0/cmake/ProjMac.cmake000664 001754 001755 00000002007 14764566077 016035 0ustar00e012349e012349000000 000000 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() set(FRAMEWORKDIR "") set(BUNDLEDIR "") set(PROJ_INSTALL_NAME_DIR "") endif() 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) if(BUILD_FRAMEWORKS_AND_BUNDLE) set(CMAKE_INSTALL_BINDIR ${BUNDLEDIR}) endif() print_variable(BUNDLEDIR) print_variable(PROJ_INSTALL_NAME_DIR) print_variable(FRAMEWORKDIR) endif() proj-9.6.0/cmake/ProjTest.cmake000664 001754 001755 00000004355 14764566077 016264 0ustar00e012349e012349000000 000000 # # Add command-line interface tests # function(proj_test_set_properties TESTNAME) set(_env "PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES" "PROJ_DATA=${PROJ_BINARY_DIR}/data/for_tests") if(TIFF_ENABLED) set(_env ${_env} "TIFF_ENABLED=YES") else() set(_env ${_env} "TIFF_ENABLED=NO") endif() set_property(TEST ${TESTNAME} PROPERTY ENVIRONMENT ${_env}) endfunction() function(proj_add_test_script_sh SH_NAME EXE_PATH) set(testname ${SH_NAME}) add_test(NAME ${testname} WORKING_DIRECTORY ${PROJ_BINARY_DIR}/test/cli COMMAND bash ${PROJ_SOURCE_DIR}/test/cli/${SH_NAME} "${${EXE_PATH}}" ) proj_test_set_properties(${testname}) endfunction() function(proj_run_cli_test TESTFILE EXE_PATH) set(testname ${TESTFILE}) add_test(NAME ${testname} WORKING_DIRECTORY ${PROJ_BINARY_DIR}/test/cli COMMAND ${Python_EXECUTABLE} ${PROJ_SOURCE_DIR}/test/cli/run_cli_test.py --exe "${${EXE_PATH}}" ${PROJ_SOURCE_DIR}/test/cli/${TESTFILE} ) proj_test_set_properties(${testname}) endfunction() function(proj_add_gie_test TESTNAME TESTCASE) set(GIE_BIN $) set(TESTFILE ${PROJ_SOURCE_DIR}/test/${TESTCASE}) add_test(NAME ${TESTNAME} WORKING_DIRECTORY ${PROJ_SOURCE_DIR}/test COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GIE_BIN} ${TESTFILE} ) proj_test_set_properties(${TESTNAME}) endfunction() # Create user writable directory for tests add_custom_target(create_tmp_user_writable_dir ALL COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJ_BINARY_DIR}/tmp_user_writable_dir COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJ_BINARY_DIR}/tmp_user_writable_dir) function(proj_add_gie_network_dependent_test TESTNAME TESTCASE) set(GIE_BIN $) set(TESTFILE ${PROJ_SOURCE_DIR}/test/${TESTCASE}) add_test(NAME ${TESTNAME} WORKING_DIRECTORY ${PROJ_SOURCE_DIR}/test COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${GIE_BIN} ${TESTFILE} ) set_property(TEST ${TESTNAME} PROPERTY ENVIRONMENT "PROJ_USER_WRITABLE_DIRECTORY=${PROJ_BINARY_DIR}/tmp_user_writable_dir" "PROJ_NETWORK=ON" "PROJ_DATA=${PROJ_BINARY_DIR}/data/for_tests") endfunction() proj-9.6.0/cmake/ProjUtilities.cmake000664 001754 001755 00000006364 14764566077 017322 0ustar00e012349e012349000000 000000 ################################################################################ # ProjUtilities.cmake - part of CMake configuration of PROJ 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 # https://www.boost.org/LICENSE_1_0.txt ################################################################################ # Macros in this module: # # print_variable # proj_target_output_name # configure_proj_pc # ################################################################################ # # pretty-prints the value of a variable so that the # equals signs align # function(print_variable NAME) string(LENGTH "${NAME}" varlen) math(EXPR padding_len 30-${varlen}) if(${padding_len} GREATER 0) string(SUBSTRING " " 0 ${padding_len} varpadding) endif() message(STATUS "${NAME}${varpadding} = ${${NAME}}") endfunction() # # Configure a pkg-config file proj.pc # See also ProjInstallPath.cmake # function(set_variable_from_rel_or_absolute_path var root rel_or_abs_path) if(IS_ABSOLUTE "${rel_or_abs_path}") set(${var} "${rel_or_abs_path}" PARENT_SCOPE) else() set(${var} "${root}/${rel_or_abs_path}" PARENT_SCOPE) endif() endfunction() function(configure_proj_pc) set(prefix ${CMAKE_INSTALL_PREFIX}) set_variable_from_rel_or_absolute_path("libdir" "$\{prefix\}" "${CMAKE_INSTALL_LIBDIR}") set_variable_from_rel_or_absolute_path("includedir" "$\{prefix\}" "${CMAKE_INSTALL_INCLUDEDIR}") set_variable_from_rel_or_absolute_path("datarootdir" "$\{prefix\}" "${CMAKE_INSTALL_DATAROOTDIR}") set(datadir "$\{datarootdir\}") set(PACKAGE "proj") set(VERSION ${PROJ_VERSION}) # Build strings of dependencies (Libs.private, Requires.private) set(EXTRA_LIBS "${CMAKE_THREAD_LIBS_INIT}") set(EXTRA_REQUIRES "") option(USE_PKGCONFIG_REQUIRES "Use 'Requires' instead 'Libs' in proj.pc" ON) macro(add_module_or_libs MODULE) if(USE_PKGCONFIG_REQUIRES) list(APPEND EXTRA_REQUIRES "${MODULE}") else() list(APPEND EXTRA_LIBS "${ARGN}") endif() endmacro() add_module_or_libs(sqlite3 -lsqlite3) if(TIFF_ENABLED) add_module_or_libs(libtiff-4 -ltiff) endif() if(CURL_ENABLED) add_module_or_libs(libcurl -lcurl) endif() if(WIN32 AND NOT MINGW) list(APPEND EXTRA_LIBS -lole32 -lshell32) else() set(cxx_libs "${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}") list(REMOVE_ITEM cxx_libs ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} nonempty) foreach(lib IN LISTS cxx_libs) list(APPEND EXTRA_LIBS "-l${lib}") endforeach() endif() if(HAVE_LIBM AND NOT "-lm" IN_LIST EXTRA_LIBS) list(APPEND EXTRA_LIBS -lm) endif() if(HAVE_LIBDL) list(APPEND EXTRA_LIBS -ldl) endif() # Join lists with a space list(JOIN EXTRA_LIBS " " EXTRA_LIBS) list(JOIN EXTRA_REQUIRES " " EXTRA_REQUIRES) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/proj.pc.in ${CMAKE_CURRENT_BINARY_DIR}/proj.pc @ONLY) endfunction() proj-9.6.0/cmake/ProjVersion.cmake000664 001754 001755 00000002474 14764566077 016772 0ustar00e012349e012349000000 000000 ################################################################################ # ProjVersion.cmake - part of CMake configuration of PROJ 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 ################################################################################ # 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 # include(CMakeParseArguments) macro(proj_version) cmake_parse_arguments(THIS_VERSION "" "MAJOR;MINOR;PATCH" "" ${ARGN}) # Set version components set(${PROJECT_NAME}_VERSION_MAJOR ${THIS_VERSION_MAJOR}) set(${PROJECT_NAME}_VERSION_MINOR ${THIS_VERSION_MINOR}) set(${PROJECT_NAME}_VERSION_PATCH ${THIS_VERSION_PATCH}) # Set VERSION string set(${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.\ ${${PROJECT_NAME}_VERSION_MINOR}.\ ${${PROJECT_NAME}_VERSION_PATCH}") print_variable(${PROJECT_NAME}_VERSION) endmacro() proj-9.6.0/cmake/policies.cmake000664 001754 001755 00000000211 14764566077 016304 0ustar00e012349e012349000000 000000 if(CMAKE_MAJOR_VERSION GREATER 2) cmake_policy(SET CMP0042 NEW) # osx rpath cmake_policy(SET CMP0011 NEW) # policy setting endif() proj-9.6.0/cmake/proj_config.cmake.in000664 001754 001755 00000001607 14764566077 017413 0ustar00e012349e012349000000 000000 /* Define to 1 if you have the `dl' library (-ldl). */ #cmakedefine HAVE_LIBDL 1 /* Define to 1 if you have localeconv */ #cmakedefine HAVE_LOCALECONV 1 /* Define to 1 if you have the `strerror' function. */ #cmakedefine HAVE_STRERROR 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}" /* Version number of package */ #cmakedefine VERSION "${VERSION}" proj-9.6.0/cmake/project-config-version.cmake.in000664 001754 001755 00000004477 14764566077 021520 0ustar00e012349e012349000000 000000 # Version checking for @PROJECT_VARIANT_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@") # These variable definitions parallel those in @PROJECT_NAME@'s # cmake/CMakeLists.txt. if (MSVC) # For checking the compatibility of MSVC_TOOLSET_VERSION; see # https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp # Assume major version number is obtained by dropping the last decimal # digit. math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10") endif () if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_VARIANT_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_VARIANT_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 ( # toolset version must be at least as great as @PROJECT_NAME@'s MSVC_TOOLSET_VERSION GREATER_EQUAL @MSVC_TOOLSET_VERSION@ # and major versions must match AND MSVC_TOOLSET_MAJOR EQUAL @MSVC_TOOLSET_MAJOR@ )) # Reject if there's a mismatch in MSVC compiler versions set (REASON "MSVC_TOOLSET_VERSION = @MSVC_TOOLSET_VERSION@") 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 () proj-9.6.0/cmake/project-config.cmake.in000664 001754 001755 00000005575 14764566077 020035 0ustar00e012349e012349000000 000000 # Configure @PROJECT_NAME@ # # Set # @PROJECT_VARIANT_NAME@_FOUND = 1 # @PROJECT_VARIANT_NAME@_INCLUDE_DIRS = /usr/local/include # @PROJECT_VARIANT_NAME@_LIBRARIES = @PROJECT_VARIANT_NAME@::proj # @PROJECT_VARIANT_NAME@_LIBRARY_DIRS = /usr/local/lib # @PROJECT_VARIANT_NAME@_BINARY_DIRS = /usr/local/bin # @PROJECT_VARIANT_NAME@_VERSION = 4.9.1 (for example) if(@PROJECT_VARIANT_NAME@ STREQUAL "PROJ4") message(DEPRECATION "find_package(PROJ4) is deprecated and will be retired soon. Please use find_package(PROJ) instead.") endif() include(CMakeFindDependencyMacro) # We cannot have a find_dependency() call between cmake_policy(PUSH)/cmake_policy(POP) # because find_dependency() issues a return() on failure, which results in # imbalanced push/pop # Cf https://gitlab.kitware.com/cmake/cmake/-/issues/17612 cmake_policy(PUSH) cmake_policy(SET CMP0012 NEW) if("@ENABLE_TIFF@") set(PROJ_CONFIG_FIND_TIFF_DEP ON) endif() if("@CURL_ENABLED@") set(PROJ_CONFIG_FIND_CURL_DEP ON) endif() cmake_policy(POP) find_dependency(SQLite3) if(DEFINED PROJ_CONFIG_FIND_TIFF_DEP) find_dependency(TIFF) endif() if(DEFINED PROJ_CONFIG_FIND_CURL_DEP) # Chainload CURL usage requirements find_dependency(CURL) # Target CURL::libcurl only defined since CMake 3.12 if(NOT TARGET CURL::libcurl) add_library(CURL::libcurl INTERFACE IMPORTED) set_target_properties(CURL::libcurl PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "${CURL_LIBRARIES}" ) endif() endif() function(set_variable_from_rel_or_absolute_path var root rel_or_abs_path) if(IS_ABSOLUTE "${rel_or_abs_path}") set(${var} "${rel_or_abs_path}" PARENT_SCOPE) else() set(${var} "${root}/${rel_or_abs_path}" PARENT_SCOPE) endif() endfunction() # 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) # Use _ROOT as prefix here for the possibility of relocation after installation. set_variable_from_rel_or_absolute_path("@PROJECT_VARIANT_NAME@_INCLUDE_DIRS" "${_ROOT}" "@CMAKE_INSTALL_INCLUDEDIR@") set_variable_from_rel_or_absolute_path("@PROJECT_VARIANT_NAME@_LIBRARY_DIRS" "${_ROOT}" "@CMAKE_INSTALL_LIBDIR@") set_variable_from_rel_or_absolute_path("@PROJECT_VARIANT_NAME@_BINARY_DIRS" "${_ROOT}" "@CMAKE_INSTALL_BINDIR@") set (@PROJECT_VARIANT_NAME@_LIBRARIES @PROJECT_VARIANT_NAME@::proj) # Read in the exported definition of the library include ("${_DIR}/@PROJECT_NAME_LOWER@-targets.cmake") if (@INSTALL_LEGACY_CMAKE_FILES@) include ("${_DIR}/@PROJECT_LEGACY_LOWER@-targets.cmake") endif() unset (_ROOT) unset (_DIR) if ("@PROJECT_VARIANT_NAME@" STREQUAL "PROJ4") # For backward compatibility with old releases of libgeotiff set (@PROJECT_VARIANT_NAME@_INCLUDE_DIR ${@PROJECT_VARIANT_NAME@_INCLUDE_DIRS}) endif () proj-9.6.0/cmake/uninstall.cmake.in000664 001754 001755 00000005231 14764566077 017122 0ustar00e012349e012349000000 000000 # install_manifest.txt is created in the top build tree, not the project one if (NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_BINARY_DIR@/install_manifest.txt\"") endif() set(uninstall_file_list "@CMAKE_BINARY_DIR@/install_manifest.txt") if(EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt") list(APPEND uninstall_file_list "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt") endif() set(dir_list) foreach (manifest_file IN ITEMS ${uninstall_file_list}) file(READ "${manifest_file}" files) string(REGEX REPLACE "\n$" "" files "${files}") string(REGEX REPLACE "\n" ";" files "${files}") list(REVERSE files) foreach (file ${files}) message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") if (IS_DIRECTORY "$ENV{DESTDIR}${file}") list(APPEND dir_list "${file}") elseif (EXISTS "$ENV{DESTDIR}${file}") get_filename_component(dir "${file}" DIRECTORY) list(APPEND dir_list "${dir}") execute_process( COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) if(NOT ${rm_retval} EQUAL 0) message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") endif (NOT ${rm_retval} EQUAL 0) else () message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") endif () endforeach(file) endforeach() while(NOT "${dir_list}" STREQUAL "") list(REMOVE_DUPLICATES dir_list) set(new_dir_list) foreach (file IN ITEMS ${dir_list}) if (IS_DIRECTORY "$ENV{DESTDIR}${file}" AND "${file}" MATCHES "@CMAKE_INSTALL_PREFIX@[/\\].+") file(GLOB file_list "$ENV{DESTDIR}${file}/*") list(LENGTH file_list file_list_len) # Only remove empty directories if(file_list_len EQUAL 0) message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") execute_process( COMMAND @CMAKE_COMMAND@ -E remove_directory "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) if(${rm_retval} EQUAL 0) get_filename_component(upper_dir "${file}" DIRECTORY) list(APPEND new_dir_list "${upper_dir}") else() message(STATUS "Problem when removing directory \"$ENV{DESTDIR}${file}\"") endif() endif() endif() endforeach() set(dir_list "${new_dir_list}") endwhile() proj-9.6.0/data/000775 001754 001755 00000000000 14764566152 013324 5ustar00e012349e012349000000 000000 proj-9.6.0/data/CH000664 001754 001755 00000002111 14764566077 013542 0ustar00e012349e012349000000 000000 # This init file provides definitions for CH1903 and CH1903/LV03 # projections using the distortion grids developed by Swisstopo. # See: https://shop.swisstopo.admin.ch/en/products/geo_software/GIS_info # # You'll need to download the grids separately and put in a directory # scanned by libproj. # # 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 # +origin=Swisstopo +lastupdate=2012-02-27 # 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=CHENyx06_ETRS.gsb +no_defs # CH1903 <1903> +proj=longlat +ellps=bessel +nadgrids=CHENyx06_ETRS.gsb +no_defs <> proj-9.6.0/data/CMakeLists.txt000664 001754 001755 00000007316 14764566077 016101 0ustar00e012349e012349000000 000000 # # files containing dictionary of useful projection # set(PROJ_DB_CACHE_DIR "" CACHE PATH "Directory used to cache proj.db") if(NOT IS_DIRECTORY ${PROJ_DB_CACHE_DIR}) if(NOT "${PROJ_DB_CACHE_DIR}" STREQUAL "") message(WARNING "PROJ_DB_CACHE_DIR (${PROJ_DB_CACHE_DIR}) not set to a directory") set(PROJ_DB_CACHE_DIR "") endif() endif() set(PROJ_INI proj.ini ) # # gridshift file # file(GLOB GSB_FILES *.gsb) file(GLOB GTX_FILES *.gtx) set(GRIDSHIFT_FILES ${GSB_FILES} ${GTX_FILES}) file(GLOB SCHEMA_FILES *.json) file(GLOB GEOTIFF_FILES *.tif) set(ALL_SQL_IN "${CMAKE_CURRENT_BINARY_DIR}/all.sql.in") set(PROJ_DB "${CMAKE_CURRENT_BINARY_DIR}/proj.db") include(sql_filelist.cmake) set(PROJ_DB_SQL_EXPECTED_MD5 "7e93fb5bf8aa4a5849049f56dfa98bc4") add_custom_command( OUTPUT ${PROJ_DB} COMMAND ${CMAKE_COMMAND} -E remove -f ${PROJ_DB} COMMAND ${CMAKE_COMMAND} "-DALL_SQL_IN=${ALL_SQL_IN}" "-DEXE_SQLITE3=${EXE_SQLITE3}" "-DPROJ_DB=${PROJ_DB}" "-DPROJ_VERSION=${PROJ_VERSION}" "-DPROJ_DB_CACHE_DIR=${PROJ_DB_CACHE_DIR}" "-DPROJ_DB_SQL_EXPECTED_MD5=${PROJ_DB_SQL_EXPECTED_MD5}" "-DDATA_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}" -P "${CMAKE_CURRENT_SOURCE_DIR}/generate_proj_db.cmake" COMMAND ${CMAKE_COMMAND} -E copy ${PROJ_DB} ${CMAKE_CURRENT_BINARY_DIR}/for_tests DEPENDS ${SQL_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/generate_proj_db.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMENT "Generating proj.db" VERBATIM ) add_custom_target(generate_proj_db ALL DEPENDS ${PROJ_DB}) if(NOT "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") foreach(FILE ${PROJ_INI} ${PROJ_DICTIONARY} ${GRIDSHIFT_FILES}) configure_file(${FILE} ${FILE} COPYONLY) endforeach() endif() # Copy select resource files in a for_tests subdirectory so that we are not # influenced by the presence of other grids # Note: this is done at configure/cmake time, not build time. # So if you install new grids in the source data/ subdirectory, run cmake again set(DATA_FOR_TESTS GL27 nad27 nad83 ITRF2000) execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/for_tests) execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/for_tests/tests) foreach(FILE ${DATA_FOR_TESTS} ${PROJ_INI}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/for_tests/${FILE} COPYONLY) endforeach() file(GLOB DATA_TESTS tests/*) foreach(FILE ${DATA_TESTS}) get_filename_component(FILENAME ${FILE} NAME) configure_file(${FILE} ${CMAKE_CURRENT_BINARY_DIR}/for_tests/tests/${FILENAME} COPYONLY) endforeach() set(DATA_FOR_TESTS_FROM_TESTS_SUBDIR alaska BETA2007.gsb conus MD ntf_r93.gsb ntv1_can.dat) foreach(FILE ${DATA_FOR_TESTS_FROM_TESTS_SUBDIR}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/for_tests/${FILE} COPYONLY) endforeach() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/egm96_15_downsampled.gtx ${CMAKE_CURRENT_BINARY_DIR}/for_tests/egm96_15.gtx COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/ntv2_0_downsampled.gsb ${CMAKE_CURRENT_BINARY_DIR}/for_tests/ntv2_0.gsb COPYONLY) # test_cs2cs_datumfile has a special case execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/for_tests/dir with space") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/conus "${CMAKE_CURRENT_BINARY_DIR}/for_tests/dir with space/myconus" COPYONLY) # #install # set(ALL_DATA_FILE ${GRIDSHIFT_FILES} ${SCHEMA_FILES} ${GEOTIFF_FILES} ) if (NOT USE_ONLY_EMBEDDED_RESOURCE_FILES) list(APPEND ALL_DATA_FILE ${PROJ_INI} ${PROJ_DB} ${PROJ_DICTIONARY}) endif() install( FILES ${ALL_DATA_FILE} DESTINATION ${PROJ_DATA_PATH} ) proj-9.6.0/data/GL27000664 001754 001755 00000001330 14764566077 013725 0ustar00e012349e012349000000 000000 # SCCSID @(#)GL27 1.1 93/08/25 GIE REL # Great Lakes Grids +lastupdate=1993-08-25 # 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 <> proj-9.6.0/data/ITRF2000000664 001754 001755 00000004063 14764566077 014326 0ustar00e012349e012349000000 000000 # ITRF2000 params are in cm/year, PJ_helmert uses m/year +version=1.0.0 +origin=ftp://itrf.ensg.ign.fr/pub/itrf/ITRF.TP +lastupdate=2017-07-25 # ITRF2000 -> ITRF2005 is only defined the opposite way, so we flip the sign on all # parameters to get the opposite transformation. Parameters from http://itrf.ign.fr/ITRF_solutions/2005/tp_05-00.php +proj=helmert +x=-0.0001 +y=0.0008 +z=0.0058 +s=-0.0004 +dx=0.0002 +dy=-0.0001 +dz=0.0018 +ds=-0.00008 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0067 +y=0.0061 +z=-0.0185 +s=0.00155 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1997.0 +convention=position_vector +proj=helmert +x=0.0067 +y=0.0061 +z=-0.0185 +s=0.00155 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1997.0 +convention=position_vector +proj=helmert +x=0.0067 +y=0.0061 +z=-0.0185 +s=0.00155 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1997.0 +convention=position_vector +proj=helmert +x=0.0127 +y=0.0065 +z=-0.0209 +s=0.00195 +rx=-0.00039 +ry=0.00080 +rz=-0.00114 +dx=-0.0029 +dy=-0.0002 +dz=-0.0006 +ds=0.00001 +drx=-0.00011 +dry=-0.00019 +drz=0.00007 +t_epoch=1988.0 +convention=position_vector +proj=helmert +x=0.0147 +y=0.0135 +z=-0.0139 +s=0.00075 +rz=-0.00018 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1988.0 +convention=position_vector +proj=helmert +x=0.0267 +y=0.0275 +z=-0.0199 +s=0.00215 +rz=-0.00018 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1988.0 +convention=position_vector +proj=helmert +x=0.0247 +y=0.0235 +z=-0.0359 +s=0.00245 +rz=-0.00018 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1988.0 +convention=position_vector +proj=helmert +x=0.0297 +y=0.0475 +z=-0.0739 +s=0.00585 +rz=-0.00018 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1988.0 +convention=position_vector +proj=helmert +x=0.0247 +y=0.0115 +z=-0.0979 +s=0.00895 +rx=0.0001 +rz=-0.00018 +dy=-0.0006 +dz=-0.0014 +ds=0.00001 +drz=0.00002 +t_epoch=1988.0 +convention=position_vector proj-9.6.0/data/ITRF2008000664 001754 001755 00000013062 14764566077 014335 0ustar00e012349e012349000000 000000 # ITRF2008 params are in mm/year, PJ_helmert uses m/year +version=1.0.0 +origin=http://itrf.ign.fr/doc_ITRF/Transfo-ITRF2008_ITRFs.txt +lastupdate=2017-07-26 +proj=helmert +x=-0.002 +y=-0.0009 +z=-0.0047 +s=0.00094 +dx=0.0003 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=-0.0019 +y=-0.0017 +z=-0.0105 +s=0.00134 +dx=0.0001 +dy=0.0001 +dz=-0.0018 +ds=0.00008 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0048 +y=0.0026 +z=-0.0332 +s=0.00292 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0048 +y=0.0026 +z=-0.0332 +s=0.00292 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0048 +y=0.0026 +z=-0.0332 +s=0.00292 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=-0.024 +y=0.0024 +z=-0.00386 +s=0.00341 +rx=-0.00171 +ry=-0.00148 +rz=-0.0003 +dx=-0.0028 +dy=-0.0001 +dz=-0.0024 +ds=0.00009 +drx=-0.00011 +dry=-0.00019 +drz=0.00007 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0128 +y=0.0046 +z=-0.0412 +s=0.00221 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0248 +y=0.0186 +z=-0.0472 +s=0.00361 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0228 +y=0.0146 +z=-0.0632 +s=0.00391 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0278 +y=0.0386 +z=-0.1012 +s=0.00731 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector +proj=helmert +x=0.0228 +y=0.0026 +z=-0.1252 +s=0.01041 +rz=0.00006 +dx=0.0001 +dy=-0.0005 +dz=-0.0032 +ds=0.00009 +drz=0.00002 +t_epoch=2000.0 +convention=position_vector # ITRF2008 Plate Motion Model parameters # # As described in # # Altamimi, Z., L. Métivier, and X. Collilieux (2012), ITRF2008 plate motion model, # J. Geophys. Res., 117, B07402, doi:10.1029/2011JB008930. +proj=helmert +drx=-0.000190 +dry=-0.000442 +drz=0.000915 +convention=position_vector +proj=helmert +drx=-0.000252 +dry=-0.000302 +drz=0.000643 +convention=position_vector +proj=helmert +drx=0.001202 +dry=-0.000054 +drz=0.001485 +convention=position_vector +proj=helmert +drx=0.001504 +dry=0.001172 +drz=0.001228 +convention=position_vector +proj=helmert +drx=0.000049 +dry=-0.001088 +drz=0.000664 +convention=position_vector +proj=helmert +drx=-0.000083 +dry=-0.000534 +drz=0.000750 +convention=position_vector +proj=helmert +drx=0.001232 +dry=0.000303 +drz=0.001540 +convention=position_vector +proj=helmert +drx=-0.000330 +dry=-0.001551 +drz=0.001625 +convention=position_vector +proj=helmert +drx=0.000035 +dry=-0.000662 +drz=-0.0001 +convention=position_vector +proj=helmert +drx=0.000095 +dry=-0.000598 +drz=0.000723 +convention=position_vector +proj=helmert +drx=-0.000411 +dry=0.001036 +drz=-0.002166 +convention=position_vector +proj=helmert +drx=-0.000243 +dry=-0.000311 +drz=-0.000154 +convention=position_vector +proj=helmert +drx=-0.000080 +dry=-0.000745 +drz=0.000897 +convention=position_vector +proj=helmert +drx=0.000047 +dry=-0.001 +drz=0.000975 +convention=position_vector # Plate names suffixed by _T (for Translation) that includes the translation # rates +dx=0.00041 +dy=0.00022 +dz=0.00041 given by Table 2 of the ITRF2008 plate motion model # paper +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000190 +dry=-0.000442 +drz=0.000915 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000252 +dry=-0.000302 +drz=0.000643 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.001202 +dry=-0.000054 +drz=0.001485 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.001504 +dry=0.001172 +drz=0.001228 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000049 +dry=-0.001088 +drz=0.000664 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000083 +dry=-0.000534 +drz=0.000750 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.001232 +dry=0.000303 +drz=0.001540 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000330 +dry=-0.001551 +drz=0.001625 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000035 +dry=-0.000662 +drz=-0.0001 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000095 +dry=-0.000598 +drz=0.000723 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000411 +dry=0.001036 +drz=-0.002166 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000243 +dry=-0.000311 +drz=-0.000154 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000080 +dry=-0.000745 +drz=0.000897 +convention=position_vector +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000047 +dry=-0.001 +drz=0.000975 +convention=position_vector proj-9.6.0/data/ITRF2014000664 001754 001755 00000006642 14764566077 014340 0ustar00e012349e012349000000 000000 # ITRF2014 params are in mm/year, PJ_helmert uses m/year +version=1.0.0 +origin=http://itrf.ign.fr/doc_ITRF/Transfo-ITRF2014_ITRFs.txt +lastupdate=2017-07-26 +proj=helmert +x=0.0016 +y=0.0019 +z=0.0024 +s=-0.00002 +dz=-0.0001 +ds=0.00003 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0026 +y=0.001 +z=-0.0023 +s=0.00092 +dx=0.0003 +dz=-0.0001 +ds=0.00003 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0007 +y=0.0012 +z=-0.0261 +s=0.00212 +dx=0.0001 +dy=0.0001 +dz=-0.0019 +ds=0.00011 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=-0.0504 +y=0.0033 +z=-0.0602 +s=0.00429 +rx=-0.00281 +ry=-0.00338 +rz=0.0004 +dx=-0.0028 +dy=-0.0001 +dz=-0.0025 +ds=0.00012 +drx=-0.00011 +dry=-0.00019 +drz=0.00007 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0154 +y=0.0015 +z=-0.0708 +s=0.00309 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0274 +y=0.0155 +z=-0.0768 +s=0.00449 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0254 +y=0.0115 +z=-0.0928 +s=0.00479 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0304 +y=0.0355 +z=-0.1308 +s=0.00819 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector +proj=helmert +x=0.0254 +y=-0.0005 +z=-0.1548 +s=0.01129 +rx=0.0001 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector # ITRF2014 Plate Motion Model parameters # # As described in # # Z. Altamimi et al, 2017, ITRF2014 plate motion model, # doi: 10.1093/gji/ggx136 +proj=helmert +drx=-0.000248 +dry=-0.000324 +drz=0.000675 +convention=position_vector +proj=helmert +drx=0.001154 +dry=-0.000136 +drz=0.001444 +convention=position_vector +proj=helmert +drx=0.001510 +dry=0.001182 +drz=0.001215 +convention=position_vector +proj=helmert +drx=-0.000085 +dry=-0.000531 +drz=0.000770 +convention=position_vector +proj=helmert +drx=0.001154 +dry=-0.000005 +drz=0.001454 +convention=position_vector +proj=helmert +drx=-0.000333 +dry=-0.001544 +drz=0.001623 +convention=position_vector +proj=helmert +drx=0.000024 +dry=-0.000694 +drz=-0.000063 +convention=position_vector +proj=helmert +drx=0.000099 +dry=-0.000614 +drz=0.000733 +convention=position_vector +proj=helmert +drx=-0.000409 +dry=0.001047 +drz=-0.002169 +convention=position_vector +proj=helmert +drx=-0.000270 +dry=-0.000301 +drz=-0.000140 +convention=position_vector +proj=helmert +drx=-0.000121 +dry=-0.000794 +drz=0.000884 +convention=position_vector proj-9.6.0/data/ITRF2020000664 001754 001755 00000013117 14764566077 014330 0ustar00e012349e012349000000 000000 # ITRF2020 params are in mm/year, PJ_helmert uses m/year # Generated with generate_itrf2020.py from EPSG database +proj=helmert +x=-0.0014 +y=-0.0009 +z=0.0014 +s=-0.00042 +dy=-0.0001 +dz=0.0002 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0002 +y=0.001 +z=0.0033 +s=-0.00029 +dy=-0.0001 +dz=0.0001 +ds=3e-05 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0027 +y=0.0001 +z=-0.0014 +s=0.00065 +dx=0.0003 +dy=-0.0001 +dz=0.0001 +ds=3e-05 +t_epoch=2015 +convention=position_vector +proj=helmert +x=-0.0002 +y=0.0008 +z=-0.0342 +s=0.00225 +dx=0.0001 +dz=-0.0017 +ds=0.00011 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=-0.0658 +y=0.0019 +z=-0.0713 +rx=-0.00336 +ry=-0.00433 +rz=0.00075 +s=0.00447 +dx=-0.0028 +dy=-0.0002 +dz=-0.0023 +drx=-0.00011 +dry=-0.00019 +drz=7e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0145 +y=-0.0019 +z=-0.0859 +rz=0.00036 +s=0.00327 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0265 +y=0.0121 +z=-0.0919 +rz=0.00036 +s=0.00467 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0245 +y=0.0081 +z=-0.1079 +rz=0.00036 +s=0.00497 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0295 +y=0.0321 +z=-0.1459 +rz=0.00036 +s=0.00837 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector +proj=helmert +x=0.0245 +y=-0.0039 +z=-0.1699 +rx=0.0001 +rz=0.00036 +s=0.01147 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector # ITRF2020 Plate Motion Model parameters # # As described in https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2023GL106373 # (and also in https://itrf.ign.fr/docs/solutions/itrf2020/ITRF2020-PMM.dat, but with # different units) +proj=helmert +drx=-0.000131 +dry=-0.000551 +drz=0.000837 +convention=position_vector +proj=helmert +drx=-0.000269 +dry=-0.000312 +drz=0.000678 +convention=position_vector +proj=helmert +drx=0.001129 +dry=-0.000146 +drz=0.001438 +convention=position_vector +proj=helmert +drx=0.001487 +dry=0.001175 +drz=0.001223 +convention=position_vector +proj=helmert +drx=0.000207 +dry=-0.001422 +drz=0.000726 +convention=position_vector +proj=helmert +drx=-0.000085 +dry=-0.000519 +drz=0.000753 +convention=position_vector +proj=helmert +drx=0.001137 +dry=0.000013 +drz=0.001444 +convention=position_vector +proj=helmert +drx=-0.000327 +dry=-0.001561 +drz=0.001605 +convention=position_vector +proj=helmert +drx=0.000045 +dry=-0.000666 +drz=-0.000098 +convention=position_vector +proj=helmert +drx=0.000090 +dry=-0.000585 +drz=0.000717 +convention=position_vector +proj=helmert +drx=-0.000404 +dry=0.001021 +drz=-0.002154 +convention=position_vector +proj=helmert +drx=-0.000261 +dry=-0.000282 +drz=-0.000157 +convention=position_vector +proj=helmert +drx=-0.000081 +dry=-0.000719 +drz=0.000864 +convention=position_vector # Plate names suffixed by _T (for Translation) that includes the translation # rates +dx=0.00037 +dy=0.00035 +dz=0.00074 given by Table 2 of the ITRF2020 plate motion model # paper +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000131 +dry=-0.000551 +drz=0.000837 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000269 +dry=-0.000312 +drz=0.000678 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001129 +dry=-0.000146 +drz=0.001438 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001487 +dry=0.001175 +drz=0.001223 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000207 +dry=-0.001422 +drz=0.000726 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000085 +dry=-0.000519 +drz=0.000753 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001137 +dry=0.000013 +drz=0.001444 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000327 +dry=-0.001561 +drz=0.001605 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000045 +dry=-0.000666 +drz=-0.000098 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000090 +dry=-0.000585 +drz=0.000717 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000404 +dry=0.001021 +drz=-0.002154 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000261 +dry=-0.000282 +drz=-0.000157 +convention=position_vector +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000081 +dry=-0.000719 +drz=0.000864 +convention=position_vector proj-9.6.0/data/README000664 001754 001755 00000001037 14764566077 014213 0ustar00e012349e012349000000 000000 The files in this directory are support data for PROJ programs. File Contents: README --- This file 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 Additional data files are available in https://github.com/OSGeo/PROJ-data proj-9.6.0/data/deformation_model.schema.json000664 001754 001755 00000042407 14764566077 021162 0ustar00e012349e012349000000 000000 { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Schema for deformation models", "type": "object", "properties": { "file_type": { "type": "string", "enum": [ "deformation_model_master_file" ], "description": "File type. Always \"deformation_model_master_file\"" }, "format_version": { "type": "string", "enum": [ "1.0" ] }, "name": { "type": "string", "description": "A brief descriptive name of the deformation model" }, "version": { "type": "string", "description": "A string identifying the version of the deformation model. The format for specifying version will be defined by the agency responsible for the deformation model" }, "publication_date": { "$ref": "#/definitions/datetime", "description": "The date on which this version of the deformation model was published (or possibly the date on which it takes effect?)" }, "license": { "type": "string", "description": "License under which the model is published" }, "description": { "type": "string", "description": "A text description of the model" }, "authority": { "type": "object", "description": "Basic information about the agency responsible for the data set", "properties": { "name": { "type": "string", "description": "The name of the agency" }, "url": { "type": "string", "description": "The url of the agency website", "format": "uri" }, "address": { "type": "string", "description": "The postal address of the agency" }, "email": { "type": "string", "description": "An email contact address for the agency", "format": "email" } }, "required": [ "name" ], "additionalProperties": false }, "links": { "type": "array", "description": "Links to related information", "items": { "type": "object", "properties": { "href": { "type": "string", "description": "The URL holding the information", "format": "uri" }, "rel": { "type": "string", "description": "The relationship to the dataset. Proposed relationships are:\n- \"about\": a web page for human consumption describing the model\n- \"source\": the authoritative source data from which the deformation model is built.\n- \"metadata\": ISO 19115 XML metadata regarding the deformation model." }, "type": { "type": "string", "description": "MIME type" }, "title": { "type": "string", "description": "Description of the link" } }, "required": [ "href" ], "additionalProperties": false } }, "source_crs": { "$ref": "#/definitions/crs", "description": "The coordinate reference system to which the deformation model applies" }, "target_crs": { "$ref": "#/definitions/crs", "description": "For a time dependent coordinate transformation the coordinate reference system resulting from applying the deformation" }, "definition_crs": { "$ref": "#/definitions/crs", "description": "The coordinate reference system used to define the component spatial models. This proposal only supports using the same value for the source and definition coordinate reference system." }, "reference_epoch": { "$ref": "#/definitions/datetime", "description": "A nominal reference epoch of the deformation model. This is not necessarily used to calculate the deformation model - each component defines its own time function." }, "uncertainty_reference_epoch": { "$ref": "#/definitions/datetime", "description": "The uncertainties of the deformation model are calculated in terms of this epoch. This is described below in the Time functions section." }, "horizontal_offset_unit": { "type": "string", "enum": [ "metre", "degree" ] }, "vertical_offset_unit": { "type": "string", "enum": [ "metre" ] }, "horizontal_uncertainty_type": { "type": "string", "enum": [ "circular 95% confidence limit" ] }, "horizontal_uncertainty_unit": { "type": "string", "enum": [ "metre" ] }, "vertical_uncertainty_type": { "type": "string", "enum": [ "95% confidence limit" ] }, "vertical_uncertainty_unit": { "type": "string", "enum": [ "metre" ] }, "horizontal_offset_method": { "type": "string", "description": "Defines how the horizontal offsets are applied to geographic coordinates", "enum": [ "addition", "geocentric" ] }, "extent": { "$ref": "#/definitions/extent", "description": "Defines the region within which the deformation model is defined. It cannot be calculated outside this region. The region is specified by a type and value. This proposal only supports using a bounding box as an array of [west,south,east,north] coordinate values" }, "time_extent": { "type": "object", "description": "Defines the range of times for which the model is valid, specified by a first and a last value. The deformation model is undefined for dates outside this range.", "properties": { "first": { "$ref": "#/definitions/datetime" }, "last": { "$ref": "#/definitions/datetime" } }, "required": [ "first", "last" ], "additionalProperties": false }, "components": { "type": "array", "items": { "$ref": "#/definitions/component" } } }, "required": [ "file_type", "format_version", "source_crs", "target_crs", "definition_crs", "extent", "time_extent", "components" ], "additionalProperties": false, "definitions": { "component": { "type": "object", "definition": "A component describes an aspect of the deformation, such as glacial isostatic adjustment, secular deformation, earthquakes, etc.", "properties": { "description": { "type": "string", "description": "A text description of this component of the model" }, "extent": { "$ref": "#/definitions/extent", "description": "The region within the component is defined. Outside this region the component evaluates to 0. The region is specified by a type and value. This proposal only supports using a bounding box as an array of [west,south,east,north] coordinate values" }, "displacement_type": { "type": "string", "description": "The displacement parameters defined by the model. The \"none\" option allows for a component which defines uncertainty with different grids to those defining displacement", "enum": [ "none", "horizontal", "vertical", "3d" ] }, "uncertainty_type": { "type": "string", "description": "The uncertainty parameters defined by the model", "enum": [ "none", "horizontal", "vertical", "3d" ] }, "horizontal_uncertainty": { "type": "number", "description": "The horizontal uncertainty to use if it is not defined explicitly in the spatial model" }, "vertical_uncertainty": { "type": "number", "description": "The vertical uncertainty to use if it is not defined explicitly in the spatial model" }, "spatial_model": { "type": "object", "description": "Defines the spatial model", "properties": { "type": { "type": "string", "description": "Specifies the type of the spatial model data file. Initially it is proposed that only GeoTIFF is supported", "enum": [ "GeoTIFF" ] }, "interpolation_method": { "type": "string", "description": "Interpolation method", "enum": [ "bilinear", "geocentric_bilinear" ] }, "filename": { "type": "string", "description": "Specifies location of the spatial model GeoTIFF file relative to this JSON file" }, "md5_checksum": { "type": "string", "description": "A hex encoded MD5 checksum of the grid file that can be used to validate that it is the correct version of the file" } }, "required": [ "type", "interpolation_method", "filename" ], "additionalProperties": false }, "time_function": { "$ref": "#/definitions/time_function" } }, "required": [ "description", "extent", "displacement_type", "spatial_model", "time_function" ], "additionalProperties": false }, "crs": { "type": "string", "pattern": "^[a-zA-Z]+:[a-zA-Z0-9]+$" }, "datetime": { "type": "string", "format": "date-time", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" }, "extent": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "bbox" ] }, "parameters": { "type": "object", "properties": { "bbox": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "type": "number" } } } } }, "required": [ "type", "parameters" ], "additionalProperties": false }, "time_function": { "description": "Function describing a multiplicative factor to apply to the spatial_model depending on the time", "oneOf": [ { "$ref": "#/definitions/time_function_constant" }, { "$ref": "#/definitions/time_function_velocity" }, { "$ref": "#/definitions/time_function_step" }, { "$ref": "#/definitions/time_function_reverse_step" }, { "$ref": "#/definitions/time_function_piecewise" }, { "$ref": "#/definitions/time_function_exponential" } ] }, "time_function_constant": { "description": "The valuation of this function is 1 at any epoch", "type": "object", "properties": { "type": { "type": "string", "enum": [ "constant" ] }, "parameters": { "type": "object", "properties": { }, "additionalProperties": false } }, "required": [ "type" ], "additionalProperties": false }, "time_function_velocity": { "description": "The valuation of this function is 0 at reference_epoch, and proportional to the time difference to it at other times", "type": "object", "properties": { "type": { "type": "string", "enum": [ "velocity" ] }, "parameters": { "type": "object", "properties": { "reference_epoch": { "$ref": "#/definitions/datetime" } }, "required": [ "reference_epoch" ], "additionalProperties": false } }, "required": [ "type", "parameters" ], "additionalProperties": false }, "time_function_step": { "description": "The valuation of this function is 0 before step_epoch, and 1 starting from it", "type": "object", "properties": { "type": { "type": "string", "enum": [ "step" ] }, "parameters": { "type": "object", "properties": { "step_epoch": { "$ref": "#/definitions/datetime" } }, "required": [ "step_epoch" ], "additionalProperties": false } }, "required": [ "type", "parameters" ], "additionalProperties": false }, "time_function_reverse_step": { "description": "The valuation of this function is 1 before step_epoch, and 0 starting from it", "type": "object", "properties": { "type": { "type": "string", "enum": [ "reverse_step" ] }, "parameters": { "type": "object", "properties": { "step_epoch": { "$ref": "#/definitions/datetime" } }, "required": [ "step_epoch" ], "additionalProperties": false } }, "required": [ "type", "parameters" ], "additionalProperties": false }, "time_function_piecewise": { "description": "Piecewise time function", "type": "object", "properties": { "type": { "type": "string", "enum": [ "piecewise" ] }, "parameters": { "type": "object", "properties": { "before_first": { "type": "string", "description": "Defines the behaviour of the function before the first defined epoch", "enum": [ "zero", "constant", "linear" ] }, "after_last": { "type": "string", "description": "Defines the behaviour of the function after the last defined epoch", "enum": [ "zero", "constant", "linear" ] }, "model": { "type": "array", "description": "A sorted array data points each defined by two elements, \"epoch\" defines the date/time of the data point, and \"scale_factor\" is the corresponding function value. The array is sorted in order of increasing epoch. Note: where the time function includes a step it is represented by two consecutive data points with the same epoch. The first defines the scale factor that applies before the epoch and the second the scale factor that applies after the epoch", "items": { "type": "object", "properties": { "epoch": { "$ref": "#/definitions/datetime" }, "scale_factor": { "type": "number" } }, "required": [ "epoch", "scale_factor" ], "additionalProperties": false }, "minItems": 2 } }, "required": [ "before_first", "after_last", "model" ], "additionalProperties": false } }, "required": [ "type", "parameters" ], "additionalProperties": false }, "time_function_exponential": { "description": "The valuation of this function is an exponential function with a time-based relaxation constant", "type": "object", "properties": { "type": { "type": "string", "enum": [ "exponential" ] }, "parameters": { "type": "object", "properties": { "reference_epoch": { "$ref": "#/definitions/datetime", "description": "The date/time at which the exponential decay starts" }, "end_epoch": { "$ref": "#/definitions/datetime", "description": "The date/time at which the exponential decay ends (optional)" }, "relaxation_constant": { "type": "number", "description": "Relaxation constant in years" }, "before_scale_factor": { "type": "number", "description": "The scale factor that applies before the reference epoch" }, "initial_scale_factor": { "type": "number", "description": "The initial scale factor" }, "final_scale_factor": { "type": "number", "description": "The scale factor the exponential function approaches" } }, "required": [ "reference_epoch", "relaxation_constant", "before_scale_factor", "initial_scale_factor", "final_scale_factor" ], "additionalProperties": false } }, "required": [ "type", "parameters" ], "additionalProperties": false } } }proj-9.6.0/data/generate_proj_db.cmake000664 001754 001755 00000007002 14764566077 017624 0ustar00e012349e012349000000 000000 function(cat IN_FILE OUT_FILE) file(READ ${IN_FILE} CONTENTS) file(APPEND ${OUT_FILE} "${CONTENTS}") endfunction() # Generates a all.sql.in file from all the individual .sql files, taking # into account if extra validation checks must be done before inserting data # records function(generate_all_sql_in ALL_SQL_IN_FILENAME EXTRA_VALIDATION OUT_MD5) set(PROJ_DB_EXTRA_VALIDATION ${EXTRA_VALIDATION}) file(WRITE "${ALL_SQL_IN_FILENAME}" "") include(sql_filelist.cmake) foreach(SQL_FILE ${SQL_FILES}) cat(${SQL_FILE} "${ALL_SQL_IN_FILENAME}") endforeach() # Compute the MD5 before any records in the metadata table, to avoid # refreshing the MD5 if we bump PROJ_VERSION or PROJ_DATA.VERSION file(READ ${ALL_SQL_IN_FILENAME} CONTENTS) string(REGEX REPLACE "INSERT INTO \\\"metadata\\\"[^\n]*\n?" "" CONTENTS_WITHOUT_METADATA "${CONTENTS}") string(MD5 OUT_MD5_LOCAL "${CONTENTS_WITHOUT_METADATA}") set(${OUT_MD5} "${OUT_MD5_LOCAL}" PARENT_SCOPE) # Do ${PROJ_VERSION} substitution string(REPLACE "\${PROJ_VERSION}" "${PROJ_VERSION}" CONTENTS_MOD "${CONTENTS}") file(WRITE "${ALL_SQL_IN_FILENAME}" "${CONTENTS_MOD}") endfunction() generate_all_sql_in("${ALL_SQL_IN}" OFF PROJ_DB_SQL_MD5) file(WRITE "${DATA_BINARY_DIR}/PROJ_DB_SQL_MD5.h" "const char* PROJ_DB_SQL_MD5=\"${PROJ_DB_SQL_MD5}\";\n") if (NOT "${PROJ_DB_SQL_MD5}" STREQUAL "${PROJ_DB_SQL_EXPECTED_MD5}") message(WARNING "all.sql.in content has changed. Running extra validation checks when building proj.db...") set(ALL_SQL_IN_EXTRA_VALIDATION "${ALL_SQL_IN}.extra_validation") generate_all_sql_in("${ALL_SQL_IN_EXTRA_VALIDATION}" ON PROJ_DB_SQL_EXTRA_VALIDATION_MD5) set(PROJ_DB_EXTRA_VALIDATION_FILENAME "${PROJ_DB}.extra_validation") file(REMOVE "${PROJ_DB_EXTRA_VALIDATION_FILENAME}") execute_process(COMMAND "${EXE_SQLITE3}" "${PROJ_DB_EXTRA_VALIDATION_FILENAME}" INPUT_FILE "${ALL_SQL_IN_EXTRA_VALIDATION}" RESULT_VARIABLE STATUS) if(STATUS AND NOT STATUS EQUAL 0) message(FATAL_ERROR "Build of proj.db from ${ALL_SQL_IN_EXTRA_VALIDATION} failed") else() message(FATAL_ERROR "Update 'set(PROJ_DB_SQL_EXPECTED_MD5 ...)' line in data/CMakeLists.txt with ${PROJ_DB_SQL_MD5} value") endif() endif() set(generate_proj_db ON) if(IS_DIRECTORY ${PROJ_DB_CACHE_DIR}) set(USE_PROJ_DB_CACHE_DIR TRUE) set(PROJ_DB_SQL_MD5_FILE "${PROJ_DB_CACHE_DIR}/proj.db.sql.md5") if(EXISTS "${PROJ_DB_SQL_MD5_FILE}") file(STRINGS "${PROJ_DB_SQL_MD5_FILE}" CACHED_PROJ_DB_SQL_MD5 LIMIT_COUNT 1) endif() file(MD5 "${ALL_SQL_IN}" PROJ_DB_SQL_MD5) set(CACHED_PROJ_DB "${PROJ_DB_CACHE_DIR}/proj.db") if("${PROJ_DB_SQL_MD5}" STREQUAL "${CACHED_PROJ_DB_SQL_MD5}" AND EXISTS "${CACHED_PROJ_DB}") message(STATUS "Reusing cached proj.db from ${PROJ_DB_CACHE_DIR}") get_filename_component(PROJ_DB_DIR "${PROJ_DB}" DIRECTORY) file(COPY "${CACHED_PROJ_DB}" DESTINATION "${PROJ_DB_DIR}") file(TOUCH "${PROJ_DB}") set(generate_proj_db OFF) endif() endif() if (generate_proj_db) execute_process(COMMAND "${EXE_SQLITE3}" "${PROJ_DB}" INPUT_FILE "${ALL_SQL_IN}" RESULT_VARIABLE STATUS) if(STATUS AND NOT STATUS EQUAL 0) message(FATAL_ERROR "Build of proj.db failed") elseif(USE_PROJ_DB_CACHE_DIR) message(STATUS "Saving cache: ${CACHED_PROJ_DB}") file(COPY "${PROJ_DB}" DESTINATION "${PROJ_DB_CACHE_DIR}") file(WRITE "${PROJ_DB_SQL_MD5_FILE}" "${PROJ_DB_SQL_MD5}\n") endif() endif() proj-9.6.0/data/nad.lst000664 001754 001755 00000014361 14764566077 014625 0ustar00e012349e012349000000 000000 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 proj-9.6.0/data/nad27000664 001754 001755 00000046117 14764566077 014201 0ustar00e012349e012349000000 000000 # SCCSID @(#)nad27 4.1 92/12/20 GIE # proj +init files for: # # State Plane Coordinate Systems, # North American Datum 1927 +lastupdate=1992-12-20 # 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 <> proj-9.6.0/data/nad83000664 001754 001755 00000040321 14764566077 014172 0ustar00e012349e012349000000 000000 # SCCSID @(#)nad83 4.1 92/12/20 GIE # proj +init files for: # # State Plane Coordinate Systems, # North American Datum 1983 +lastupdate=1992-12-20 # 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 <> proj-9.6.0/data/other.extra000664 001754 001755 00000007513 14764566077 015526 0ustar00e012349e012349000000 000000 ## NAD83 / BC Albers (this has been superseded 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 <> proj-9.6.0/data/proj.ini000664 001754 001755 00000004603 14764566077 015010 0ustar00e012349e012349000000 000000 [general] ; Lines starting by ; are commented lines. ; ; Network capabilities disabled by default. ; Can be overridden with the PROJ_NETWORK=ON environment variable. ; Cf https://proj.org/en/latest/usage/network.html ; Valid values = on, off network = off ; Endpoint of the Content Delivery Network where remote resources might ; be accessed. Only used if network access is allowed (cf above "network" ; option) ; Can be overridden with the PROJ_NETWORK_ENDPOINT environment variable. cdn_endpoint = https://cdn.proj.org ; Whether to enable a cache of remote resources that are accessed, on the ; local file system ; Valid values = on, off cache_enabled = on ; Size of the cache in megabytes cache_size_MB = 300 ; Time-to-live delay in seconds before already accessed remote resources are ; accessed again to check if they have been updated. cache_ttl_sec = 86400 ; Can be set to on so that by default the lack of a known resource files needed ; for the best transformation PROJ would normally use causes an error, or off ; to accept missing resource files without errors or warnings. ; This default value itself is overridden by the PROJ_ONLY_BEST_DEFAULT environment ; variable if set, and then by the ONLY_BEST setting that can be ; passed to the proj_create_crs_to_crs() method, or with the --only-best ; option of the cs2cs program. ; (added in PROJ 9.2) ; Valid values = on, off only_best_default = off ; Filename of the Certificate Authority (CA) bundle. ; Can be overridden with the PROJ_CURL_CA_BUNDLE / CURL_CA_BUNDLE environment variable. ; (added in PROJ 9.0) ; ca_bundle_path = /path/to/cabundle.pem ; When this is set to on, the operating systems native CA store will be used for certificate verification ; If you set this option to on and also set ca_bundle_path then during verification those certificates are ; searched in addition to the native CA store. ; (added in PROJ 9.6) ; Valid values = on, off ;native_ca = on ; Transverse Mercator (and UTM) default algorithm: auto, evenden_snyder or poder_engsager ; * evenden_snyder is the fastest, but less accurate far from central meridian ; * poder_engsager is slower, but more accurate far from central meridian ; * default will auto-select between the two above depending on the coordinate ; to transform and will use evenden_snyder if the error in doing so is below ; 0.1 mm (for an ellipsoid of the size of Earth) tmerc_default_algo = poder_engsager proj-9.6.0/data/projjson.schema.json000664 001754 001755 00000113022 14764566077 017327 0ustar00e012349e012349000000 000000 { "$id": "https://proj.org/schemas/v0.7/projjson.schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "description": "Schema for PROJJSON (v0.7)", "$comment": "This document is copyright Even Rouault and PROJ contributors, 2019-2023, and subject to the MIT license. This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And if changing the value of $id, change PROJJSON_DEFAULT_VERSION accordingly in io.cpp", "oneOf": [ { "$ref": "#/definitions/crs" }, { "$ref": "#/definitions/datum" }, { "$ref": "#/definitions/datum_ensemble" }, { "$ref": "#/definitions/ellipsoid" }, { "$ref": "#/definitions/prime_meridian" }, { "$ref": "#/definitions/single_operation" }, { "$ref": "#/definitions/concatenated_operation" }, { "$ref": "#/definitions/coordinate_metadata" } ], "definitions": { "abridged_transformation": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["AbridgedTransformation"] }, "name": { "type": "string" }, "source_crs": { "$ref": "#/definitions/crs", "$comment": "Only present when the source_crs of the bound_crs does not match the source_crs of the AbridgedTransformation. No equivalent in WKT" }, "method": { "$ref": "#/definitions/method" }, "parameters": { "type": "array", "items": { "$ref": "#/definitions/parameter_value" } }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "method", "parameters" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "axis": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["Axis"] }, "name": { "type": "string" }, "abbreviation": { "type": "string" }, "direction": { "type": "string", "enum": [ "north", "northNorthEast", "northEast", "eastNorthEast", "east", "eastSouthEast", "southEast", "southSouthEast", "south", "southSouthWest", "southWest", "westSouthWest", "west", "westNorthWest", "northWest", "northNorthWest", "up", "down", "geocentricX", "geocentricY", "geocentricZ", "columnPositive", "columnNegative", "rowPositive", "rowNegative", "displayRight", "displayLeft", "displayUp", "displayDown", "forward", "aft", "port", "starboard", "clockwise", "counterClockwise", "towards", "awayFrom", "future", "past", "unspecified" ] }, "meridian": { "$ref": "#/definitions/meridian" }, "unit": { "$ref": "#/definitions/unit" }, "minimum_value": { "type": "number" }, "maximum_value": { "type": "number" }, "range_meaning": { "type": "string", "enum": [ "exact", "wraparound"] }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "abbreviation", "direction" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "bbox": { "type": "object", "properties": { "east_longitude": { "type": "number" }, "west_longitude": { "type": "number" }, "south_latitude": { "type": "number" }, "north_latitude": { "type": "number" } }, "required" : [ "east_longitude", "west_longitude", "south_latitude", "north_latitude" ], "additionalProperties": false }, "bound_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["BoundCRS"] }, "name": { "type": "string" }, "source_crs": { "$ref": "#/definitions/crs" }, "target_crs": { "$ref": "#/definitions/crs" }, "transformation": { "$ref": "#/definitions/abridged_transformation" }, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "source_crs", "target_crs", "transformation" ], "additionalProperties": false }, "compound_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["CompoundCRS"] }, "name": { "type": "string" }, "components": { "type": "array", "items": { "$ref": "#/definitions/crs" } }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "components" ], "additionalProperties": false }, "concatenated_operation": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["ConcatenatedOperation"] }, "name": { "type": "string" }, "source_crs": { "$ref": "#/definitions/crs" }, "target_crs": { "$ref": "#/definitions/crs" }, "steps": { "type": "array", "items": { "$ref": "#/definitions/single_operation" } }, "accuracy": { "type": "string" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "source_crs", "target_crs", "steps" ], "additionalProperties": false }, "conversion": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["Conversion"] }, "name": { "type": "string" }, "method": { "$ref": "#/definitions/method" }, "parameters": { "type": "array", "items": { "$ref": "#/definitions/parameter_value" } }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "method" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "coordinate_metadata": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["CoordinateMetadata"] }, "crs": { "$ref": "#/definitions/crs" }, "coordinateEpoch": { "type": "number" } }, "required" : [ "crs" ], "additionalProperties": false }, "coordinate_system": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["CoordinateSystem"] }, "name": { "type": "string" }, "subtype": { "type": "string", "enum": ["Cartesian", "spherical", "ellipsoidal", "vertical", "ordinal", "parametric", "affine", "TemporalDateTime", "TemporalCount", "TemporalMeasure"] }, "axis": { "type": "array", "items": { "$ref": "#/definitions/axis" } }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "subtype", "axis" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "crs": { "oneOf": [ { "$ref": "#/definitions/bound_crs" }, { "$ref": "#/definitions/compound_crs" }, { "$ref": "#/definitions/derived_engineering_crs" }, { "$ref": "#/definitions/derived_geodetic_crs" }, { "$ref": "#/definitions/derived_parametric_crs" }, { "$ref": "#/definitions/derived_projected_crs" }, { "$ref": "#/definitions/derived_temporal_crs" }, { "$ref": "#/definitions/derived_vertical_crs" }, { "$ref": "#/definitions/engineering_crs" }, { "$ref": "#/definitions/geodetic_crs" }, { "$ref": "#/definitions/parametric_crs" }, { "$ref": "#/definitions/projected_crs" }, { "$ref": "#/definitions/temporal_crs" }, { "$ref": "#/definitions/vertical_crs" } ] }, "datum": { "oneOf": [ { "$ref": "#/definitions/geodetic_reference_frame" }, { "$ref": "#/definitions/vertical_reference_frame" }, { "$ref": "#/definitions/dynamic_geodetic_reference_frame" }, { "$ref": "#/definitions/dynamic_vertical_reference_frame" }, { "$ref": "#/definitions/temporal_datum" }, { "$ref": "#/definitions/parametric_datum" }, { "$ref": "#/definitions/engineering_datum" } ] }, "datum_ensemble": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["DatumEnsemble"] }, "name": { "type": "string" }, "members": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false } }, "ellipsoid": { "$ref": "#/definitions/ellipsoid" }, "accuracy": { "type": "string" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "members", "accuracy" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "deformation_model": { "description": "Association to a PointMotionOperation", "type": "object", "properties": { "name": { "type": "string" }, "id": { "$ref": "#/definitions/id" } }, "required" : [ "name" ], "additionalProperties": false }, "derived_engineering_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DerivedEngineeringCRS"] }, "name": { "type": "string" }, "base_crs": { "$ref": "#/definitions/engineering_crs" }, "conversion": { "$ref": "#/definitions/conversion" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "base_crs", "conversion", "coordinate_system" ], "additionalProperties": false }, "derived_geodetic_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DerivedGeodeticCRS", "DerivedGeographicCRS"] }, "name": { "type": "string" }, "base_crs": { "$ref": "#/definitions/geodetic_crs" }, "conversion": { "$ref": "#/definitions/conversion" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "base_crs", "conversion", "coordinate_system" ], "additionalProperties": false }, "derived_parametric_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DerivedParametricCRS"] }, "name": { "type": "string" }, "base_crs": { "$ref": "#/definitions/parametric_crs" }, "conversion": { "$ref": "#/definitions/conversion" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "base_crs", "conversion", "coordinate_system" ], "additionalProperties": false }, "derived_projected_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DerivedProjectedCRS"] }, "name": { "type": "string" }, "base_crs": { "$ref": "#/definitions/projected_crs" }, "conversion": { "$ref": "#/definitions/conversion" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "base_crs", "conversion", "coordinate_system" ], "additionalProperties": false }, "derived_temporal_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DerivedTemporalCRS"] }, "name": { "type": "string" }, "base_crs": { "$ref": "#/definitions/temporal_crs" }, "conversion": { "$ref": "#/definitions/conversion" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "base_crs", "conversion", "coordinate_system" ], "additionalProperties": false }, "derived_vertical_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DerivedVerticalCRS"] }, "name": { "type": "string" }, "base_crs": { "$ref": "#/definitions/vertical_crs" }, "conversion": { "$ref": "#/definitions/conversion" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "base_crs", "conversion", "coordinate_system" ], "additionalProperties": false }, "dynamic_geodetic_reference_frame": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DynamicGeodeticReferenceFrame"] }, "name": {}, "anchor": {}, "anchor_epoch": {}, "ellipsoid": {}, "prime_meridian": {}, "frame_reference_epoch": { "type": "number" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "ellipsoid", "frame_reference_epoch" ], "additionalProperties": false }, "dynamic_vertical_reference_frame": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["DynamicVerticalReferenceFrame"] }, "name": {}, "anchor": {}, "anchor_epoch": {}, "frame_reference_epoch": { "type": "number" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "frame_reference_epoch" ], "additionalProperties": false }, "ellipsoid": { "type": "object", "oneOf":[ { "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["Ellipsoid"] }, "name": { "type": "string" }, "semi_major_axis": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" }, "semi_minor_axis": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "semi_major_axis", "semi_minor_axis" ], "additionalProperties": false }, { "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["Ellipsoid"] }, "name": { "type": "string" }, "semi_major_axis": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" }, "inverse_flattening": { "type": "number" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "semi_major_axis", "inverse_flattening" ], "additionalProperties": false }, { "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["Ellipsoid"] }, "name": { "type": "string" }, "radius": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "radius" ], "additionalProperties": false } ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ] }, "engineering_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["EngineeringCRS"] }, "name": { "type": "string" }, "datum": { "$ref": "#/definitions/engineering_datum" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "datum" ], "additionalProperties": false }, "engineering_datum": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["EngineeringDatum"] }, "name": { "type": "string" }, "anchor": { "type": "string" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name" ], "additionalProperties": false }, "geodetic_crs": { "type": "object", "properties": { "type": { "type": "string", "enum": ["GeodeticCRS", "GeographicCRS"] }, "name": { "type": "string" }, "datum": { "oneOf": [ { "$ref": "#/definitions/geodetic_reference_frame" }, { "$ref": "#/definitions/dynamic_geodetic_reference_frame" } ] }, "datum_ensemble": { "$ref": "#/definitions/datum_ensemble" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "deformation_models": { "type": "array", "items": { "$ref": "#/definitions/deformation_model" } }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name" ], "description": "One and only one of datum and datum_ensemble must be provided", "allOf": [ { "$ref": "#/definitions/object_usage" }, { "$ref": "#/definitions/one_and_only_one_of_datum_or_datum_ensemble" } ], "additionalProperties": false }, "geodetic_reference_frame": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["GeodeticReferenceFrame"] }, "name": { "type": "string" }, "anchor": { "type": "string" }, "anchor_epoch": { "type": "number" }, "ellipsoid": { "$ref": "#/definitions/ellipsoid" }, "prime_meridian": { "$ref": "#/definitions/prime_meridian" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "ellipsoid" ], "additionalProperties": false }, "geoid_model": { "type": "object", "properties": { "name": { "type": "string" }, "interpolation_crs": { "$ref": "#/definitions/crs" }, "id": { "$ref": "#/definitions/id" } }, "required" : [ "name" ], "additionalProperties": false }, "id": { "type": "object", "properties": { "authority": { "type": "string" }, "code": { "oneOf": [ { "type": "string" }, { "type": "integer" } ] }, "version": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "authority_citation": { "type": "string" }, "uri": { "type": "string" } }, "required" : [ "authority", "code" ], "additionalProperties": false }, "ids": { "type": "array", "items": { "$ref": "#/definitions/id" } }, "method": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["OperationMethod"]}, "name": { "type": "string" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "id_ids_mutually_exclusive": { "not": { "type": "object", "required": [ "id", "ids" ] } }, "one_and_only_one_of_datum_or_datum_ensemble": { "allOf": [ { "not": { "type": "object", "required": [ "datum", "datum_ensemble" ] } }, { "oneOf": [ { "type": "object", "required": ["datum"] }, { "type": "object", "required": ["datum_ensemble"] } ] } ] }, "meridian": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["Meridian"] }, "longitude": { "$ref": "#/definitions/value_in_degree_or_value_and_unit" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "longitude" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "object_usage": { "anyOf": [ { "type": "object", "properties": { "$schema" : { "type": "string" }, "scope": { "type": "string" }, "area": { "type": "string" }, "bbox": { "$ref": "#/definitions/bbox" }, "vertical_extent": { "$ref": "#/definitions/vertical_extent" }, "temporal_extent": { "$ref": "#/definitions/temporal_extent" }, "remarks": { "type": "string" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ] }, { "type": "object", "properties": { "$schema" : { "type": "string" }, "usages": { "$ref": "#/definitions/usages" }, "remarks": { "type": "string" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ] } ] }, "parameter_value": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["ParameterValue"] }, "name": { "type": "string" }, "value": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "unit": { "$ref": "#/definitions/unit" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name", "value" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "parametric_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["ParametricCRS"] }, "name": { "type": "string" }, "datum": { "$ref": "#/definitions/parametric_datum" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "datum" ], "additionalProperties": false }, "parametric_datum": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["ParametricDatum"] }, "name": { "type": "string" }, "anchor": { "type": "string" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name" ], "additionalProperties": false }, "point_motion_operation": { "$comment": "Not implemented in PROJ (at least as of PROJ 9.1)", "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["PointMotionOperation"] }, "name": { "type": "string" }, "source_crs": { "$ref": "#/definitions/crs" }, "method": { "$ref": "#/definitions/method" }, "parameters": { "type": "array", "items": { "$ref": "#/definitions/parameter_value" } }, "accuracy": { "type": "string" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "source_crs", "method", "parameters" ], "additionalProperties": false }, "prime_meridian": { "type": "object", "properties": { "$schema" : { "type": "string" }, "type": { "type": "string", "enum": ["PrimeMeridian"] }, "name": { "type": "string" }, "longitude": { "$ref": "#/definitions/value_in_degree_or_value_and_unit" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "name" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false }, "single_operation": { "oneOf": [ { "$ref": "#/definitions/conversion" }, { "$ref": "#/definitions/transformation" }, { "$ref": "#/definitions/point_motion_operation" } ] }, "projected_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["ProjectedCRS"] }, "name": { "type": "string" }, "base_crs": { "$ref": "#/definitions/geodetic_crs" }, "conversion": { "$ref": "#/definitions/conversion" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "base_crs", "conversion", "coordinate_system" ], "additionalProperties": false }, "temporal_crs": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["TemporalCRS"] }, "name": { "type": "string" }, "datum": { "$ref": "#/definitions/temporal_datum" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "datum" ], "additionalProperties": false }, "temporal_datum": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["TemporalDatum"] }, "name": { "type": "string" }, "calendar": { "type": "string" }, "time_origin": { "type": "string" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "calendar" ], "additionalProperties": false }, "temporal_extent": { "type": "object", "properties": { "start": { "type": "string" }, "end": { "type": "string" } }, "required" : [ "start", "end" ], "additionalProperties": false }, "transformation": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["Transformation"] }, "name": { "type": "string" }, "source_crs": { "$ref": "#/definitions/crs" }, "target_crs": { "$ref": "#/definitions/crs" }, "interpolation_crs": { "$ref": "#/definitions/crs" }, "method": { "$ref": "#/definitions/method" }, "parameters": { "type": "array", "items": { "$ref": "#/definitions/parameter_value" } }, "accuracy": { "type": "string" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name", "source_crs", "target_crs", "method", "parameters" ], "additionalProperties": false }, "unit": { "oneOf": [ { "type": "string", "enum": ["metre", "degree", "unity"] }, { "type": "object", "properties": { "type": { "type": "string", "enum": ["LinearUnit", "AngularUnit", "ScaleUnit", "TimeUnit", "ParametricUnit", "Unit"] }, "name": { "type": "string" }, "conversion_factor": { "type": "number" }, "id": { "$ref": "#/definitions/id" }, "ids": { "$ref": "#/definitions/ids" } }, "required" : [ "type", "name" ], "allOf": [ { "$ref": "#/definitions/id_ids_mutually_exclusive" } ], "additionalProperties": false } ] }, "usages": { "type": "array", "items": { "type": "object", "properties": { "scope": { "type": "string" }, "area": { "type": "string" }, "bbox": { "$ref": "#/definitions/bbox" }, "vertical_extent": { "$ref": "#/definitions/vertical_extent" }, "temporal_extent": { "$ref": "#/definitions/temporal_extent" } }, "additionalProperties": false } }, "value_and_unit": { "type": "object", "properties": { "value": { "type": "number" }, "unit": { "$ref": "#/definitions/unit" } }, "required" : [ "value", "unit" ], "additionalProperties": false }, "value_in_degree_or_value_and_unit": { "oneOf": [ { "type": "number" }, { "$ref": "#/definitions/value_and_unit" } ] }, "value_in_metre_or_value_and_unit": { "oneOf": [ { "type": "number" }, { "$ref": "#/definitions/value_and_unit" } ] }, "vertical_crs": { "type": "object", "properties": { "type": { "type": "string", "enum": ["VerticalCRS"] }, "name": { "type": "string" }, "datum": { "oneOf": [ { "$ref": "#/definitions/vertical_reference_frame" }, { "$ref": "#/definitions/dynamic_vertical_reference_frame" } ] }, "datum_ensemble": { "$ref": "#/definitions/datum_ensemble" }, "coordinate_system": { "$ref": "#/definitions/coordinate_system" }, "geoid_model": { "$ref": "#/definitions/geoid_model" }, "geoid_models": { "type": "array", "items": { "$ref": "#/definitions/geoid_model" } }, "deformation_models": { "type": "array", "items": { "$ref": "#/definitions/deformation_model" } }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name"], "description": "One and only one of datum and datum_ensemble must be provided", "allOf": [ { "$ref": "#/definitions/object_usage" }, { "$ref": "#/definitions/one_and_only_one_of_datum_or_datum_ensemble" }, { "not": { "type": "object", "required": [ "geoid_model", "geoid_models" ] } } ], "additionalProperties": false }, "vertical_extent": { "type": "object", "properties": { "minimum": { "type": "number" }, "maximum": { "type": "number" }, "unit": { "$ref": "#/definitions/unit" } }, "required" : [ "minimum", "maximum" ], "additionalProperties": false }, "vertical_reference_frame": { "type": "object", "allOf": [{ "$ref": "#/definitions/object_usage" }], "properties": { "type": { "type": "string", "enum": ["VerticalReferenceFrame"] }, "name": { "type": "string" }, "anchor": { "type": "string" }, "anchor_epoch": { "type": "number" }, "$schema" : {}, "scope": {}, "area": {}, "bbox": {}, "vertical_extent": {}, "temporal_extent": {}, "usages": {}, "remarks": {}, "id": {}, "ids": {} }, "required" : [ "name" ], "additionalProperties": false } } } proj-9.6.0/data/sql/000775 001754 001755 00000000000 14764566152 014123 5ustar00e012349e012349000000 000000 proj-9.6.0/data/sql/CRS.png000664 001754 001755 00000257574 14764566077 015312 0ustar00e012349e012349000000 000000 PNG  IHDRCH0p pHYs+ IDATxy\T̰#( [ZYYMR-.)ZiYڢe-. 3?|g=3fsι:$@DĪPStXPx I@ 5m.zVvZTP >/" uwweǧS֪S$  Yp3'"4PgLN8p-+WN~챮{PÑdi~~OrD/GXvv62,j(,l+DMFsƍ§6rsRPӐdT/CӦjc||j||CΨm62Mk쎉IxGG;f"&"Μ9=|ŋWD׷gizRS/:85m $6***!))=--S=v%_hS+jYل >}:CzW6AA~Ŷp,nZ6lc777/22ɸ+Wժe߸qfօ:tvu6kpRVD9Us禪uDR<0i˖CGmܸA>Tۏ<_^{iQqKP=L&SeFBM[5vliKDk۶}6"ңG-[fHddl&U>9򳘘$~}[g7hz{7_'{ظ@픔V0Xל9YDnm/_^S} -׮ʿ>h뵐.$ڵ}w̙?-z~᯾_;vSCL;r$Jۢ=wNNm՝;:iݺ~;VK.^ҿؖ- UkӦс_ڵ{|pژ`ЋȆ MߟvͿe6ayɞ?,ZT{{۰g~{N% :""b-*X F!O=cHllʽ?YYٽzXnnNjRll#[~_%,lc-8zWZ txLϞ#U޳gkWZ&iɒ =f4 Ӧ[*JLL?LSűw!!}}kHnn^~3q7*R}[7n\kVVkrƏ7iweRx$YU^_$N׿"-קꥶU^xΝ_j7lCtc ,,165=[ Edƌag,Yhj|cllׯҥ?R'N!1qŞ=s4ƫWFVv?lߩy6Xb6zO/޴铭[gԨQ=v-gҍ'ka;>_~ѣ2%O\piР6md۶sjo^aaFD|mgk~R)S'$\(P ҥ eD,VR|}k{,]~8䡇}DDBZ\l\s}:˺u{ƙ3_vvo(Qcв`}tܷzնmК5EdժO>5?@m5jN֢E ӿn]fe]SЇ,h4w<-Cm~H4>aLL*'EPh^,y )99ZYptUi˄ժe%ô.HӦ6*;~ ֪6֭,X{whVn-ml~4..E^QQ Oi̿eقdR*G?i6`зnX~:.%̑dT>[[kU577,SeIjq]NhU_l0a UP(>_߯+`HH"rZΑ#gvxL~~[ ~4"rQUR2ƍBAߦj_ ;@kذ*DFƾނu0r_`ooۤI};냼 #^t}&bܹ61::q.FcL@{''˗Ȼ.Pz4hեK3-_I4VVoӧϨu֫sNN"(dT>K'֮}}Z?Y,ۿ777-AUo[" ~:UfRr۳g /sp+WǧСԂ~֬ᎎv"ݻ]Z hKD ))*jѢ5,\8^[`?_|2u{Vvӧb=z6 ܔ؛܅t-%T;|hjѢ`z68O`ˏ8qűn]XآĒ  x.Td2?s╠zRzYN_]OmWZ% :"ߕ(I*M,,4*b,+--;$߶v+BnvA2HjsO>΍t;&|7(vСu-م$f0N$\׳@բB@@@@@@@`UAu=+ $ ℚTv`I>(م $Y $Y $Y $Y $Y $Y $Y $Y V$\׳`t&-\ M)(NfRd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2dt`H`HPuP)dbX),X,T5 Kn$ $ |@°,P2,X,TeXUvX>]4~JABM[* ẞӍd)jXI:(م Pdg;ʭZX[Wo[>iYLMx\4o~׭$YYTMF_ZZJ3ފaYX$Y^R常իS'%ퟴafH@ϙ3K8zl.rFﮮYE=k{r?+/P~71E1& DD<=]N Ue X$YWo?zlB^^{NMy̭[&z=z.M˥9С3NOtpSǵY3`?^}:ݫաCce?/"~nnN!P S,._j}I?]D Ϛ<;;WS|.%\/^ҿؖ- ۦM5&6Nt"ҩS]$ikKi]?oŅZyGX+RyxOpگX~ZaJJFhUvRל9Y۲k׉ÒF!VV)"6U\g&o*">.:P_ʝ@Q<'~Xk@jGӦ-t;7m*@D.<ri:u\\{n׷1M"ҼW>>E$;;w̘VvkmjRCCgL [~K/}YYٽzXnnNz^DbcydGXNNOǿLل>iۗ-۬ }v[6T,fȯU|SBϩ-Y2A%J{D,XVDzڵwС'>'"Ƒ#gߨRIUذa 3w<>~ɓ C^Ca7:o߾_o83.z]q;JDrs}ՙ_|!qҍgΜ?_qx ~[B*+(0q)ϝ*52:%3s3K WSsWu'YCeRBfŊxqZwzj6)8n"ҢEC񘨨-@m`шָq GGm)Q2qW ծز]"zd͘1L vUC|@//w}0u'ゃ!"7rgWο7f O?t茈xzYd(711IЬˇk""u6hbR%FΝw0WDR/_4i@-hk ݻ#rp|tujFx禊o;-";7mҤAy=#( b@(+(7RRnn[fwB…}No*1Dc|&85jԜ]B˥9pgXvt|~~m&A^yys+mB߯[xh+GU|}o?+o"wo~PP`[[("O?}uɓ&_/,lح[zcuU[v0a1Kn䓟=݀bj,:_9>t?A@Ӆh矯>|VKNTw>}1_z933KMk.HmdlJs /|n)h0=<\22.勈c6jTOD1 {ISR27x/^K//7m uذ"h4\fw{y)(0>ȸիwmqǎ/XyڅMS[ᕑk-m;|;iwhɡކz22Uht:aLkv7zx8{z/&ԋ99yVV[%\[ hKD ))*jѢT0u#n˗TӰaN\ٯJqYfvDkk1c~_&οݝC }~J[zݺzhyyFÆ=|≞%XP0& @ٔ<&Kqlb~~[@:&11-&&h4yyֶ-enz`ZZfB…VV }}kb:w7?Fcї/_kڴA7|4lm'**!!Ⴟggi؞="unZ\1Y*6YjL+#<=<=JPGݺMp.ʠd'oKӁbȸ|R֦Mfoc@UC)--s7ۯ_ҏ>+_FU)Ӧ\)M U:f(a5,Ŀz`v![TuP=zVvT9WcT3$Yp,qb9b# CF,#?H$Yr 뺻ik5DAPsd Yp3WݱT5dF!_ "nnNvw,4Uv2ܡ@Yd |5iӦQeZv}-**ADyCgILL{R#"oܸ:IMrrѣgϟOȸӉ{.*wR 'WNzuƤ$t;6t!!rsEM;6//ǎcYY\\jy{jYT*,?ۧϨBu:݀f]g„"Ҡב#8;;fg{ǏLjDNMDo1:|8Gǝ;\_rWsCzz֭Gbcz}PP=ZZ]E\|w߽=vlڵ 65:CX~~OKˌNȸnU\~~AXYggj}|j՛=ED 5A-M駯,\SDյ-Z`eӧ/N5GD?5dȴ#G::ns䠶_l<Ύgl'N|gmx@kdI0f~ZWʂ$ @q @}ׯwp9sV'"`O>yUEZݝfYD-{FRDܜȷ' IDATYL>-(l̈́ ;vKH`eeWϳkXjEM47_<%%Di:011m=Y[7ѣU^0jɢG NשSkrJHc׭ѻw:u\/7FرnYyF{|czGx{7n\С3/^YdCRR3zyK7j" ͒X8,eVCn !PF~~=z-u+33+!!M-pm2>tV@ [#>>5#Swo\Un~TuUٚ Z^dXjy {͙z߾+ 6SD|ƎkjתetԒڳ'BXz~͚iADyI+(09ر"r=mž4gV-KDW{"2|y澞=GC ODT7jc{o~jgg֦ 6XbO0Uvvo>ۃ=۷kr WjܸtyEܰaXa n$ cǎcO>UTVVVÇK{ЫƇ {ty"l&57JuGr[pٚ׮CAt%Ѩfee*"nnN.eGfko~ƸV*Z~K/}xqpQKpY+BpGEEj1QQ **8-[mzSjoV|=QrqqtqqԆyxhׯߧ}tܷ*mfnYj{$aC_={ԩɖ-DD喗ϼ]_7$ h48IXAA~r%mYm-v-gí[_pvmA x-Z~߾jj}tӋtٚ_|c fd\3g| c _~ࡇ$'gQ#fGD|o~ܼkEdҍ|`o)G-Y(HDĹn݆,AdɄg^^層%,>>U- /"F)o7tssRWsJdDE%ť?n{ tٚ0][ۂVy󻴍Z*'Y^^nڰ;ggG??3g΋H||eԒ%Pv߷/޼|kN{OE` ܼѣUH?!aHv*0apeobm*Ut>l6/#rjQQ /*ոqEƫOo޽7jÆ}Oy~OǂU}Y'E?@G-]fkEŘ N Җ*PDrsj뾫vG-kT_ifUYRO322v̘ԚqN5Gj99yO=ۃN}QD |#u_XkmcJK\dC#֭+~䍸9iٴiK-۴|_iiz ܐd|,Y2Aq{,[yܼ!CMDuk&O?{fmE}w wwgKMh2ztPJj5SSWnu'"j4mj]!9M4P]NhwD$--S RgIHʁRdR;w~ya!0W9}Rg羞9:i.tƌe/^o|qpoI||_뮺"r\r/99=Hڏ 4y۶#emϞUyѢLzw""E_} m,:m>Yq.]L[ԿƍXz8hɓg.UV-^~y…&&Lbgk|zLHeˡ&dO߫*lzx䅱 n-իS褃Oٽ;bg(">5%%#3󪣣]P (͝=fee]hhMM`?hc|ΜYb4|ZӦ ܜ=]YG-UA7bUjOɲn05mJNWc;ẞ݅*^:EW*aC }nWkߔ^WJPGݺlPӐd@9 9 @TOU!Xы\_=**玲dT)$Y@TCbQw!,I,I,I,I,I,Uew$\׳j.,AiKew fH@ ' fY#4$ jHB5 .e e e e e ezVv@E 5P:ݝkT$YPf%Y:]ewe`" ZMJD$ԴRL)q.P BM&Lʊ$ (d@!5nvaY>RxyyVvw*Qyy"Ұa]ww 5,PzɺguR/}ݗ;ĴByK]իwWJP]1ǰ|PI[bߓ~~OiBe.ͅ r嚈iӨ9@H ;xǬ { -<ܭ[ˆ }9s…K"ڰϑ#Q۷t={nҤV-%%Di:0))}=CuuDG'q,%%Ѯm۠۟'bLKtrr inggv%'g=zԌ+:x{wҬ~}/ݻ#Ϋr^^]'TI..!!rsE&I]˗Сq K[/֭eV%\[(YR"GA?7P׏7ؚ2dڑ#QN7p`sprrP[/[IDA++_=z+Vl6lLsMZ+%%#4tƪU;޾}aAA~ږcǢ_|#-~R7oE?3St1*W jWzzf.5xc߾c3Dd{{y\n$S,b,Aokk3yBmX=Gv?tŋW,ِ~ V[tcvvnZWF4mڒ_|ȼZJ䩇F)++w7TTh׾}pttRll}'{yB`ڷ/?g8ݗ_v-Xh4HTO>yMm]%:GV^."y<0-]8;;M}ыO]͟ۊHAq]%L@ DJ@uYӧܳgN? O͚!(^JJyU5jNv mibsznk~,Yaɒ E;oޟ][v8$&7++%0?i,ޢggkkj>Xt WޘcXß>Iu?rs)ߨZӦW*tC99U4oJDo%??OOOע}/2hN8p$c |˅ &L*g^t fJ@u]`V޵t˗FD3Vի"2azjG[g]oɂJvo/h~F) @ϟ "}v;'_߳V-{dow?nV"{^-`[݈EصăvRwP @iMNu׫WGGl惇G=/_5fcc=Tyد;iiKl}jܹW^رիwئM#??ϒ4h}7aZڵ 4y„oDJKӾv͸q_GDIZrsMG;H||QsN['+--._׊[E?%..%A1nH@daX(IG_LHP1, EŻ'(m)QJ Iu:^P.HPE1, eRe_0*"rA7TbV/R owʳx@7 z0r_9UP0& JR,>Sm)45g1,SeM6$;$ n77WeWF Ϊ(;uPu \TY\0& nN;;T(/ Bg݉ob0& U̕c}AUeTx@Q$YP*ZQV-݅Y]$ @RTi@FjQߵjm Qme1\ E5QjBcʂ$ @uslBzeSǵA/=v,Zm*ڪj^KDϳl $ @u3nܼe6С%"11I:T^bUb{Ug[WDF|O_UwϝK;;T U(/ D~ya3E$ ̙%ݝt;*wnA\\D١iS1>>5>>F9t3qm?8O׫/_=zlLLRzX("=zڲe\x-[:MF|-"99y..LE^/[NÆ>ږ ־'׮娇un6VdXjG/ +'5 IS.j6m&"jKJJٳ"bggӺu`bbڵ{23ZnԣGBťl~4))`{x87jTe;;:iiu(..EuW[:;X98Zmm~Ԫe`ۏ?]=4+]\gQDq}Ň̃Km>}JK>xCΨ!!׮ T "g.jȐiGDi[t:}觟 >K?y?/kk׼]=4V."Mo:Y=/ ?k\A_}CuQ͟)/>TU:[U={gj֭cPwa3ծ޽ۮ]j")\T %[CF?{KG `XbK(&Fc471k,D%XbK EŮRD@mwd ,u#~ׯܸU\\"Ann$v]TTr=6_|м  e-?|]BB:%ܹӷ(44I@M!hO5KJJh?8pyz:ݺMzį32^^bo]by>Zb|Yd„u{"oZ6 ֯?Ćmp=_^K+͟cQQqNN>~q,44U""tZ't/xnT*={,޽gU.wup(uk;:T,60a9R66_=N(n8U$QiiW+]k,!ի'D… G˿. t^ձ7ث%%_y/^+4tk֯\ن1QTTԐ׷BEgbΚXu;xܦ,:{oQIIi@@ߌӧ71yyիc#Ga#-T(8ʕ ^x I$3(?7$8x\lmm^qBլ?sr/Y2VWfHN>g7^%)f͚Qaag&...}vqq>=Т1QFKO{l}Qq2ƦbjgX&g|m)>Wy?9;vU2hvv\ɓglD4thEvf&$tҤwW vG,6sp9pTnR#jyvݷK+ۿKDԡĉ|~":udffƧNgQ~Va~:~'OmÆ)VV>>nwe~~QxM67[`i+,F [$ 7nbmm޷o{kksVl׋FsY"JHHdKx """4׵"VQe:T Uh۶*s*^ؔcǮ$&>/((Je܅XqnnD4běK_#Ҳ>WX~\Ӧ"PO\Ks"Jݮ8/߻t5ėIΝݺ׭ҥcgNDEӧ®yD_Wռ˳g/h۷)*d~7@c?:WV&A"{Xlv7~dV]z_&6>k5I^q>k@]#MZK-B__w6P6ѣUJܬ&uC\D=Q5k[Źܕdkk333fIV۶ .))H::".NsZKO 7.D"0a'+v`O{+G%PPPD v7/ڴs'{.}EYYD$ 4D"MMdVʛkԁ $~]}=~0ن J!C;hU*-qJ "qD"-))oٟ{yƍΝ%i6GDB@  QM{066fLL _סZt34TlLJ pZeK//3[X(Խb~W%Tݹ8h׸qڶٵ+ڵh[9LM a[mrqDdggW6RS3?`{^# wLMX쬂'9;&%=,**!8جYD"XlR*==!CѰa=_}CC#JJ 9K=v*v.˻{wKܟ@ u, `٘1͍r$)͜9A VW~p |jƩB`֬m^S__EK'O8sևfhu!nGd4/pܸ5V}Z\\2e&VEx.C&MlXu3۾K++wrիQSـB&^jDrMYq*>ɯG\͠VHxu Ur < sZ05Ӯ]3U @Ub=:211\|V+?Y6v gڪUӍF,a2,/iS_~YL!277xqܹAG^*((nsұ7Y=bݺ[URRI455ׯ~ c ,BwBZP=433|ڵds挲 \ f%ܛP|Л<=V r@ غu Hfg}=J 6Βk:tKu8q {ht5stћ23sN}ٳy[-}>K,HcbٱxccDzܾk9^yu U˫$|gnnGFLffBؔ˗gd422hϷ;k2֭Go?-0ԩ9D3Vh12iDDOa$'g:ĠlcbϟSV&ٳu6MOώ|YFvv@@Vݺq\ J}yy9+|3hPw>JeZ5eqҊ姙6iIIy#ruVUOO78x5=zdff&U\ΝsJҹs˟(p/h޼koohQjwIhF{icck׼ѣWtuuåKDzO]\l}}ݣ$)+ӟwQvKo/m[ի'-3jTٳ@,6/v<5: lm-Zᵱ;wT#ڵ.^ީg&&zzYY hOOU>3g]{`CbYNN>{ײCZ̳.a=m %D;azz:yy\.Dt~ܧ"=2g6yĉCCӁݶm_uرߏw׮^ -\|Y"?~ K>} Z]*=aN7qo;,cz>uꆿ, #9eIݻOaO#(++[E߹Lpa͇ttޱcmT*#JOwdg~} L֯t"ץvObt+}iY}afel`ΜQ[>d  }oԴ]u&~6ĉKbǎB-ӦL󓾾2={f\JY[WڻnݦN=Z98={ukۏG|2Pab@$_jIԃ Dd`5 yyysY'ףGl*W6?%%=̑H$VN  蛐\(;:ZOPZѤI}SQMt?j o-_ɵkXaeKq-7;;׷ϛBB"rt0B5z7{vӲe݋J,vYP:nkDbb{i`g`e j~~Q>_L4P%JKˢ͍č\LM͌OJevvNNֆuaAA|bbRiVM^;5?ի>uygcWP׮Ç! ccS:;Df~vH${u1r2Vy:tZxUTTرzkӷ̙'N\>n,v2UKvD6%Qb:~*\'@kזWO$"KKU h<ޡ +ĦՍ2hD8&&UZ#99U!=ZW: Pȿ/*oSʿU\\*,zXŤg&_ǭFIVǎq[lҥ|$55U=snWDG'ZQ RNh̄p9iһ+WN`u˼sn֟={6oԩE}f;lXϭ[gTݎ5k[0;ff rmn'Zjhsۏr ll,||ܼ-L&v-Mֲ+w{ʍT޽؈H@лw[NL8UeSuCe.ݏI/477jCeAUȣ޽QWHzOS۶xy켖-]z@A~~k\>7{˩" }jA/BR<o߉utD4DRDĵ$!"{{J e~5XNDBjKҀe,r |[,6w!THT,,L*M}qU,6r凍 q29z&Ml>|(| ~d?W~~ycu,Јȧ,+))=tT*ץUn¿eK7CCxKfl\UqwA&&#$˗yÆ-dk~$RX#eensX#ߡbٳX/62}TݻCgM6l"G BB.Vl]H俸dɓ7pOhm:tN gUds7ޢFY:jU:bkbb!CWE WV'HsCYy{;Z 0P(ފ[W]Ou 6m<ԩJz "0Úgk{^ZZ[}ݦMSH">yl❿zo$NiaTkW{~i`ЗܹX̸7ScKRLf~GV}Tuh,rvm%33'..C&SfS.{z1fjdzgk % !TЃJin𧫫3rd~:FD?fkk1zۆo?>r$byD4jT?օ wWÇI cٳu&6D4|{$Mw2,ځgd)LB~l[C||:v]osWBrww<[h% ; &gϞ}Ԩ~]0iĆT(۳5kN7Hb3H͝өcGo'O^߾54PrnyvAD%?(dLSTT}'~sX3+V0a@ 5k˘*es?!!Z}|C:[Z>yu)%._~URfijy *uk*v$HOº^>8xL&4h.EKH@|g/{0I*^o}lZI,6vm)øH(ro҉D#GV,Y2VvH8hP7vp[]}٣,`ʔa.l4kĉuzzs玚:uX7_/ѣ}v-8ѣw52RlnÇץRiFRQ^m&MR ۶cYn\mZ mzpsV՚$^S\ 23sz룏"K11-Z(j{vzuPŋf;(ӖVHѣWrh]o IV ~JeCtwww04oSiB{in=F))gW'!!7N^bb:kڵkƺ{_6&mݷ_V\m2==]eQm$u >L6f=T=1/@UMWWtDyy5Vn8Y&쿋>|rGV;wu0K^s- "۷=e3o^g z.eӽ{켬RbP(|?{QEyn~\XX֓ ƌ_~2Tur/}eg""ܡXYFC Pk ?D@P̜ٹ::"WW{'JJHLLOsry]#G.c= jEqm)U6lyvNNbF,yuRi]/ZD>CBh%ZV]hVUS81,i;34d_ri,HPz .Z4FGVB,4j \jB3,‰D$ OxP-1dB1@ #8{$YPP1WղiGU;ʟ8a4,6|.0 xNNM Ihx*hy,-˰VO>@ZBo5ϴ#d6@iWoղ2âڞ5$ 4"sjdlP츓Zzķ@m! xFu;tO_#T $ 4J, *!Ó@*PyeղחZ~QN^Ae\Ÿ pnd&A!xNSB 5T5ZRjIh*BY?:H@<\4Zo5*ddCxN.u[aM xa*8%RH@}\@ecL odBxNC/\mu$ Jws1S A!b .&ղau8֐dAL 2\UЂ[P! jIP&o߷p@!C 1To!UB1xNJ-V- ?n 3$Y2(!V8.>@!@YL ڢ ZtB =3ڇSaN}XxI4*@p\Ry8 F"v< )ֻz>-++ʬ]fmxT-##޽۲a}}]6PRRaRVVN^^a~~>[Ѻsۏr ll,||ܼBakɳ/^EӦ11)+Zaӳ##>{'Un>..vܺ<=,,L®=}߉̃}G(˹ܺ99bYϞ6uv@@_⨡ZV-`@#CU|ŸZRE.֭lk'wr”߉˼a?GavϏծ…Ůqo;qlԩ+Fs=6"Zn}w17nĤedddd[@D11;z+?rؕERk!+&& 88[ ټsPUiSǵk? {ҥ>trv=yFdܒWG99))uHΘ1u NFn0XnE74o,ڷ FDÇQ'T qP-KE*Hʥe J?/T~Vt„w&NTzQ-U~q;zsoYZb6p>XYw3~u[pe&&ON(+1fm8T7 J[(k LP^&jH͜,,L&Nj' 1;;jtv "@0n܀m=uuuv v-Z~V={xqLJzbؔU>>n[Wg"GUu?yIҀe,r |[,6բElYqyVŵ fbb6ۗL˖nz C RjɏC#)T˪ r\K1c8M.2{pl6gɊSQaa{OǏ_A|Yܹ'YUMIJzΆui6Dtԍϙqq522((("EG0AiiY}-  (O85Fk+K@r/ݸP"ٷ bY$|'ɶn{aïz8LbhߢAyRIm5!"fm. ܹ;v23s?ݫt-h gFoӽqȪe5β4PUnذ Do_xhhDIIqNN~-fm[($ +l&99C~cfmbyvv. t ^/ekk{}"i?jN4(?WaGPd[d' d B),lI-f[7ofll@D%%B0(諾};(L֦I$ϳYժU4k֤?/ѣ}v-'Lddd@Dyy,rt?~PVMqY@+ѣB |ho~zapVU@0Qv ^xQ9WR~~QLLT*mժ)`E9))/sutDNNuYǧ%'g8;۲!EG'dg癛;8,>H7CqMk( g~M5bu8F8UF - UaA .kkskkzA^N&f*ٻ7"tuu꥕zݶjS5P#8ՖHM{@s$KM]x/==ҏEF3_mШ 9xd zz*薪o5F<@̯uaio>]Uu;Yh RD_bh8ՓކYjwI@MUz[az3lҐ 4A B\4hh^z$ *UakJFsˍu'Hu$ @4<ĤoMyQG|؟PdVw\њ#@%O!UOC=X< BiP@!w*,Vʼ#"qC^EpF@ȭ*N5ղyr@@Pa7tFC Wp7-2,-K W IDAT4 AoUhS ctPuۣղMC=ƻ$k켪W)4 ܻOTW9fXZ h%YJR;*d4&(Fke5Vh~B%P6\ai\SdVQ! q CQ-Jiz,|#,T (I6;h1ލ,"dXh.$YU;*d44TRy%izF}Iک>pb2,>MPw쑻HN@KNjҿLU6]w dT),ϵ__Z@ Qh WkASjzĻ:YAު^B,-Ȱ/@k+o5*>ӮV*Y2vcBЉag~+Pgh*꽍Ad3ITN#h|l4Ωz|PPxZ@ 1lj[-Kk4,x^ hj Jjw5m# I4*BPjY*_h%$YH4d'f$ 4[~~Qttn׮H$<32^&${gX "22oҭ>PlhΰphTRj|@[![pv_&7--LBD0y"p|dv:1o^iqN_,((%"H nG%аAR$bHzBD۶}9iһ^e\=z%YJ PSy,u8d(ڵҲ5@* 5(^"$zH od۾8QN囬*..|0I7l'Uall32^l竣#R&/ر+YX %& B/&oV__}ًťqqWFwDd`0܂ȧOSJK%V]pwwPrw%'g++k#,,lmǏ_sZ4-\8z죉_t,tX"Ӧmf_le3w6eK T<T 9Ké}?=~Ձd@mdf 8päI6Trc~Æ7w6z5xJK˖,KDE}|A<ի|T־VGwߝ[ɕ.OuA.- ލMIy1t肓'۾eL^m.\(OgX;M::?M ͊KC ?|ǯѢEso%;w߅ܿGD+V]b/9:ZiժOADkXXl_\\JD:xqSʕDtF$/\8;l0eڴD?pWzѣW֬Fΰa=YM}CC#JJ ̌6[7ssc֚D"aYY" m-` ׵`}> W a jDFUA}k ݁266 [uۏsrb=[+TEfkkѴcdӈHQ<ݻO^#"''kggۖ-XӜ ҥ))/ttDMJ,6cDF>O-))2k׮޺n~|}]]Q߾<=*&==;2gy[uo#_׮Es5KK%ܻ-Zq l5MÍ|8իQׯG[[nwbizzWsr۷ٳuݷ@ Zڻw[p,ww?%YFFlW6Wn3g{x-TT]YU"ȑ+Ww!YYD;o8Y&lɓFZf--ڊKSswwXd[bY5krĺUqqlC33lɒ1iiY?& 6u,SSGW͟O ?zN˗_l7bs%Kv"ɂz7 ${n(8}kIU/Xӏ?EDcDt֣O>Ys^,7@ }Fl…\W6JD66[7=s#G.cs曉Ν6mgoÄBajﶶťdNZRI$IcdNWlK g9{)ܚget9 [ۻw[Oo۷=Imݻ-͛h}o:nܚb6rĈ>V @ *4P]*&J\;Šm;7hOaG -,L*gLLbF+##}oo5=;eRS3ӤRwqQ߻} "xifvZjQL-55M#MTʣ̫<(o3OPD[vӶ9avv|3s^R*jk>-jҤ ff>s灛sfzPKNN͛..͛w3gjooi{7_xa[`o͚nl<}˖}@D66=+Prt|G.Y$ֶ[E^{m&d۲8 '%kh_TYpKk'jrlkʕ=ܜ۶ ѽO\ͭCp_/%,vmOGۃ .8jrf2k.a@O/Mćb[g9z`C-Z'}ΰ0V&ChU,ջw{#RSZQαcw>QKv;[ٳ7ݻٽ{Gݹ9# d 6m:zu4iUd-Il\\moFB8&yURJCcǾ"Y[]]\/lM>/^͖[n9"ڽV$С5kQMH55^:clKDzeib667}| ii%ee䐟bc d;M9 1cUs4l? ׯ/)Q>~}WUNz|}T(e#I[hh}^`,"2e(C X$+11DRQv#3Nm P6Q``D_x0IPЦMoJLI;?<| c &2̍!~ t;mێqOs\…>;OGxx? LCn.SfΏьkޔcD4thMDtfbQ@7{41YRD$qXZòÁ يJv_O}|<Ο_=fL''"z򤐅F!6llРUNs.ɶndQP-͚5wڞ<)S =<\m% j'Ϧtۼ nbu_p=Zm6\]߹s(+4M_|1W}=R.aG.12Ȫ5YHGLAOQt #rC@W9x!aVOńwnʘ99Oݝk0nuw/%%%FQf;w97kKiѵkll͛VYbbZrrF@7`u%%=JLL=e9 D]t!D8I4ol#7"EeBNN;6r@@_cTOݺF2dHYK 1OƇ! O'O^ӜJS۴id9  -VcX[ (YkD0 DAjAq9f8D3A"J-?'~zުpX~/J@Oz2fy'I2Z3t$N @dXC3&md@ "A$ @T%ևDJ M/s ,@oS7"G @RXE  tt ,AT[A$Da$[8co6~+# # Qk'*Dj*AFU%nʎ[; `efD B[gU1,_$,\MA5TB),*!`* P8uC K N>Я# *ա< eU "Y_g0NZM,EaU PR@j> IDAT28 ܝ`ؑ&eH &, |n*&B@ eT,>uSSA D@pՙ g*kd77 0( ˂ꊒEX; HX D%İ.Wݳq"Y`izA(`** cn*Np"etVq#$3shh@Ig7C<'ٌ`slDRnBH :iɟ˂I!s]A䉊`!&*n!e$EuQÏ gdQxYm 눹I0V+kS5,B$ *n8WvB`nR閄ZgYHTo;m51cǴj Dd@5 t5pYiLX cX!y+DH'+TF;Y|HT]V^H<$R߭ ` ˊ :AI$BKߩBas` C@OR@j=o!ڄeEwHX0RȣgE<)|c$ aY >_.DK]V= TIܹ0?۝v 3>`! Qnzx(u,Ea XOEC"Y#N TF09; yF4 (`&80, Zt\KwO š D$A4W+ňhe$@ JӗJ^Hh+YHȉ㊻lbPfX"Y%+2DVqH9 a;; !`Id:=(."#PV—8P%DDEWӀ,;&F!!ep,eX "Y"!+ tR qb:KyE C0 2eMD0 L; v_ EIj !`d4h]x0 \ % BNf"Y|$+y0-QXp/݅ 88WZt_LBUI)b0,  t_\bWEL fքyPRӛ>"Y %&!Ĉ Յ` `eQA"-5xU$tb9hHMK0hUI D0"YVN&`$aBV$EuU;AtBD, X-scB +`]6JxBe>C$ BЉ0-XѝAtyZZV,C'2h0SJ*XYC$ Љ-7F(g?L('H 78! Pd:ZD hq833U e, `blo(Q$ S y1D H)J bXKU ¬ :̼JaV P8HЕ0>W.> %MA0 @Od]Ya=TA^Ce}"YՃapmm@Lp4 tr "SW7HЕ5c?T|e[-TO*!P5te̊UBE4'h2beY! C3 aPoCW,PCt@$ Rh<2)[z@jn$Y)C0 2dTZ@ :@Uu"OKɆjCd:ƫZƫS~Ŕ3A Bd<iх @ x%`щ,"X"Y 9<ЊnLAUqeǭ(Y f| {YCCx,uh+p^ݸO8'DFm4s Z`IzZ ЬǺ';{#"rp ohS=-++sro4)\6WC3yeZHHc(bXv81~" {wsiQvv>)ڵ=M}l"8:zɏ$6]kA$ ZAk dݴv<9|<"HKeڝ_~Tj"厎vNN= iY{Hf!n%+8Tt42ryxX;-WY+ ֭\\"ɶ58N`0D@lЭ0ܠTv<#"Z;%%J"jkwŶ9w.&>![.-U={-7iRݙ-gg8q-)\.oԨN-mDGe˭[7Ty=Z\t}zFKjݺ>%%Io?{űqzlm+WII<}FJJN.]<=47HHH=}FzzC֍ڵkldyu ЁWW0D@<ЭzCD˖}kǣz;B"y3EDy:ϖ_طo{R5ce˶piZfҋ/vb&&q:p`رXuQ.D$SSwx{{Qzzθqw>mC6mѨQ݇O5oܱīvӧM}jrqI9P%@N Dd"븅2Y8񈨰x̘EF}[{>ߝ:u " --UVűc-XD&uشE`"JI|G^.[o}XDTWS66 {hյksWW'"JM4hÇ\{dӦ,PȽw2"*((rvv޽Eݺ>Dt?JKfIKa|T/կ:* olA:[[+,?!†nD,_Pٵ&oڵ4mX\\:qg+@_}V?,$$^~,]:rOHu \.?p`3GG9s$T>Z^@̞?ܿsϵMH:q Q۶!lӧEDS MNر'N,ෆ Qaa-GWVʕ8o؝w޼1vv6Dr.bڞ11??,.޽QZZW_md߭]w6l'͚߹DVc.^]Mm.8&Hk& t!/.^K*{yyvEc3 /iܸs5 gÆz^:u ֺuz|@'"R(䚡]N''SQXX[yfb||Jp恦N:kۚkݟ@oooW^gҟ>-R˸bcŽ.]˖=<\M{K+=z}&G\"ݻOX]ڲKw\Դi teh0\?<)dI 5d[ `-IwcǮ&߸pooSVhzCM؂1''>-4skozGRVbAAVt ӝ͛l|DR% 8Ew<{ad8;;9s~:p༹#Y'$}!A 'p{-A}U9tŊkQ˧ѤI?o Dl*F.BjpъX1Id|}kud-dQ^hٲ͆ ϝ!"\yg&x{{(RbԬa%׭T7ϛQwB O=C<*T "Y 4~ ؏ z>o]{šlxuǏ/c.4R*U7|}k^-n&~3wpy)ljmִi`rr8p~"L!_WRY :vQ΋/vǏ_ծeLsG!VYM,`WACHj&tV^kut鶳?O%%J=]7OVVV޼yo{D4dHO6)66i5EDR/_3y^bݝBllRn+v9sSk#6{ՙ.Ħd?=dȜ"bѺunzLVQaa|/X>MN[={׬v޽DG0O L# 8 Vd߾\۷oRcwҩS3wwǏ hƌDPȕc ϟ?v5DpŋyzQ6 >A]WMDI>>l<)S6ݧ8szϞG~;Fs}Δ*3rdsvvJ&I`{yPG#J %| dOaQ B57ѣsaaA56~N{9A)Sn>y`"Rť66nZ@sm-فJJJryTԧzL&m:sɒ u\gooKD |׮*))UԮNu0 m߸q].EDF`0 `|MVK4 7%)İHB0ax;wE"ElZ˿n'[Qxz疕5kVJbcا?ѣng5jAYYB!o&!!!5))]VkG UAp!%@ "Ybś8ߝ`]Tr`uS‚ygo'"ѿc.lyzYYٰasf˗={ZzY(==w_zGGǚqapG߽'|Vha~o% cFϨInn˖mDtӧotFYޞ8qн{):M`{c9s]{n~~^DDDrȑ%=z%;3{S!]ϖٓYd2oM2)7{ڵk _R "#u"?i.[cի'ӟma-GuGIЂ"A7@PA"OEa;A+oT!e\ H1i@"ԩ Q=jڴX`套:O[9bDӧEi!!w$M}Z-ےFDF1uPqyxrNQYYٔ)/FDNN[0 }claذ,UvD͊5na& cQ˖ ? w3, IDAT5)..V>n&n WVZYБ#22r' p-5XD+ݾv{YY٣G9kYfL&߿+zA+S}`MHԡ5Xڿ1A `JDD+n%aUqAn$EDnuzk}&5kUx Otmێ޽۷o>R):۳mxx³ 7# D4~Q͚n#G_͗_n`2.U+tF[puuY6mQ.a/5kl4\YYپ}g>d?OV@P8(DC-zCYJ}=&>'R%aZqSGQI-GEeoۆy4i̕, ?p'QÆuXm/L&cADB-ZF-47ޫM9&+?ƍS_z3%'gL-[ŭgARnxhmT/_\DԧO>}ed9ss@vT[M,X  ,ICe "R8 &~aa1["Y7o&rQiժ-[9{K'>yR8ilRZ5M{mυqXtѣ؛\]&M|rI98ؽb'\ޮ]{֭;9MD2o&r#4Z~Z۹󄃃\.ݻMvvPaRR:d6OŅ͛sCY=??ϸ77bbso*_~9|iRV_tJdVyhC!!$ ,BU6c 7׷&{J??/6yԡsLDw޽4={͒eem~0Ynb'"3~T길6mq+>ի5H7P:l˅L&WkNN>}YsS{zxW o"𯿮kl{GG5k&i&ۃs lp%?fkkB"+ᶘ`Ͱamm<[[AЊQ.^DTRRQ c;[UZpy̲v*l ͫ g"@Y s[qeMCRs?;;%$.{_ǧ<|W9QXXs_T9:ڛpE11 <<\bzzNZZvN fЯP,B ʈd*˗X[IWRA!OHZ)CK&+mW",,T{_p_p_^g P~ԕ>=片R v3 dH'=U֖ ,ns>""vk0 _@uA@$ @Z2_~#LeaB9.dv$ ~,o HH@7会a,s3`+S͓<'͐%./IL,b 32rDDv!B @% @$ @T{:ϖsrըwҲJyx:;;pw81~" {wIkM:𐠖*g%?41P%x?Wė#(DD 9t21>>V^vrȘ1J7ɖ1%_x:u޽Roԯ_[u+…ج}ٟSVO?ѣ3f 7eNO7nݧ5QϪUׯ#[HKf6lXgʧMT͘vٲEE%J??5k&b'"Z~_>Zp…[C&gϮڹdyT*,Z5?汶oݪ,7Ǝ]eׯ'"#Ο?vH}ѠA3aV /_AA5OLn&g̭~\VҴ>\[vЗ^4..ƒhÆD$:thRXX|j|JJ/O?xpq^ ߮Y=''_R*nllR׮>a:898>)#sM,ܶmHaaif>('EI,@ɘ) *om],%}^^ޟqqjrӢIg3f XĆb͟)%%VX |));Z&"JVXr|Ϟyy޽Cǰ0\.?p`3GG9s$G-'>x%!akz>+_}5:!akB]0.ra^萒##cwA͛>{rt߶mVA}wn1֖O]֮r[gzy_t}tȒ#G>"9yLZqh\Y 4D@ĵ@YC$ @$8t[ׯAɓhmv<"ݺ8uSmYtsD||*(s˷e>_uMK:95 Zg<] 5 pw3J[ҥÏ ؼZ>s37`sGګʣk͓  aKT u,,ԯ[If -[6(@"Ò*.wv6xOF #VHX%n>_񩩵k'O._S?x^VVFD)#Fo,y`=(L3u'|HH$fO/@$ .4~L}":tJf1&!ANuقJ޻7R=J-ˈIzfΝCBAd":{fi׷ŋQZ*mm]'S~Dč 7֭UcHWݺ..,̷w?aT8;<<4<< ]7z7J_]?`ʛuЃ ׂZ/P@O`a' @fsl!..W-]onݟZuؔ 5 WQBB%6j5lXoĉ_}1)gXVvڼNZD]ؚsbb[[]7ғEbcN]R/_3y^ml>iM0Cd񯒒.%%Ӧw?fȐlyӦs?11m׮#GF.-Y⒕J}&u1eUt,Z+2ѾN@j:%ЂI͒xUQ2ٸ}:dȜmێi֭ʼnWrnDt>}&sOyzr!wqqT/4?ϖ?+X%%mڌq#As??/D"W -\e5l\.t+(..%6mqyu{;wW3~" {w3hŊ]|| l*׹6o؍DT1c])rOOR%޸a:1JQ C@ K4@kH!&Mw H|DGePR#X{=dډ͙Nz>vv!!˖}op:9ٳnZ=OvQ< ?eP6HWf]B޿ p<{6i2esؓwj:##Fѭ[ĉMF+==ݼkT]OOsVO0ő[)˹!uh"^="R9, * c@2?o#?Pn( @ 1Y`bh,oE{LZb>wг 6imWpNӧE^^~~^lT}&ed'+b OHHS<6& 3ׯg?+Wbݿnnmۆާ\.V!8د—W4066|ӭ b2.b(Yd!6E6^zAN4*I$ٻ8..}pzLŰKY`0Y@MsC$ @Hx>ӶFԭv\o\ l(k`Dp|vv;QÅ^PVfCBr9999DDdmQQɩSoN*)Q֮٥Kֳ/))QQn'O^зo/ $ ]cGܤvK-`dbTYzn|ݸ0v좳goi z|ҝߎzkxx 5lX9cmێѨQ/9/_35s/EDG\?~ ]?>"zFD9-޽۶ ٴiFFϝ;O͟?vȢ"b4hZ9mժ?QbbZNﳕdmxOWp_Ç?w:5M}(-`׮Qv (nw_̓GZ=@`>jz"66k0TZdknH cլFndjp˖˖m/Լycchذ^DtW٧%%۷͖ǎ} zwoQ]x{Ҳ;b|"",2r 0;:<<*))Q?t`Ĉ,ecpss&"ZO^ziZ~5 M(Pay` D%J&=7ښO?>7 9:o6@Nξw7чm0y'O ( YY{Ξ]Ţ"9yLZY9<}Z4ilw6{ss^ [sxZ]/ssXd[z=Kg  !>}L9*((:x[4i=4R~Ӧ68r{C&FV}JkAA~ ѲC&lebb[`h˖l/h׮lGV?:u7Dyӯ]o׷fڞl._h޽$$6j;yzVV[^}WW'L/q|?a|9ww>xF+-f M޺yvZvv\ m|d#TZ"GDЫWkmƍyQZ}3gn~s:WEd2YӦ4r,k66 G6˩᧴ Y@$ 0;ic66 ngJBL?[d73: s3'$%&] M5ATiF||jjmеk'\SHD~=4~ǎM?eQ嗻nv…X" ٳo>we"ZψGSop >Ē%ev_}&uG ҡC {Rh„o׭7&$SaAX*4Tf|@Lj=yjudMl}HH[XݿQ^^5۲eoam;9zt?#yb߾3ʡCRhҤ7[׮cU =''TIDvvǝ166k;4&~Nk~:fL=[WE>y \f .( MeP ?OOsVO0ő[)˹|}k;za„A'N,zlǖ oTc}}kQIIiFFJvuu4va 3lZ:w۴i1uy 4tɔ\kKHd27<A}:dh,+W|W֭  >|̙3?9s,Yک)_ YRmg|*)OԿQlla{0~  Mdj2gTTT.zX͸HtCO`O6.5`mV+hZTĞTvZFc':<:::;;{Μ9ݕ@/&x Opm?41 ta@LL; j"Y?ݝٳgB`B agYP4I|f)\C$KTN:}v"~:رݻD4hРݻmfΜy+WlْyW\\\vs=E@g0 đ -?I.*bݵZruײ^׎ekYޮ".MQ wvn! !$d2dfy<9U[CC>>>ºNx 5 YHU]!4IK# irw:gW;HSvݛ)H{`$ )f|+U ɇZ $+47!i0T x m,M  ?C}k׮]۷OMM͏?*xBRyOB! !cf:H&h߾+TR&}+l!`]IɊ7VaR,d´dw իׯ_P+;g!BHz l1JHM騺 4mڴK.Utn*//@ |@ hժU׮]YGvttteee6m222 }}}{!W^y&//ʪEm۶D"Ү]V^^ЪU+nDDīW bee%^L//>}())uVBBҥK%oT\ mR~69*ʯCݘ12HSa$fŷnݚ}TOOO>nnnDFF7nܸO>\.z+55mڴ OII۷o}jTx ߿?jԨo:tt钃`ԩiii6m6m>|l69244tuuy<,[l2aÆӧWVV7o駟=uDD7O|Vo߾qM8HAWWw׮] GA>NJŋ̙3$p۷opHqHzvSJJJ:ߥKj???GGs&$$Ӈ~f͚P}ʕYpuurJaaׯtuu 6xCȑ#O xͥeee[neX=z 422^FDDj*""2;;{Μ9$EJ&ܘyY+&T u` |C9C!k*!eR R:^Y||m֮] Ϟ=SZ#YHɒ#RPgĤLLL_xQTTr6mڲeˠ3f={222 Ѿ,ݻTgXWxwiԨeff&ـ6˗/OHHIIIp|1QEV#YAAApye˖ÇK???6HNN1cƐSNeX,ի'N** ufhhH$w}GѣGH$K.\.799Ν;TTTX(DJ+M-KF`|ps*|NQA+?Y_i߾= >N[nrx<^eeeEEEEEŭ['1R25eJ*S/^~+/++$KKz$+77bݛ+j*x'1KMN>*#icZ}JTҥKr0U'޽{W޻w/;;&///22W^Tzնm[:ڊy###WWה!nݺe˖VZ޿s8FMPعsg==G3vXY\ݔ3Y0Rh||<2 ޽KrZK,! IIIɡmmmEҨQ f͚u#G9rֶgϞ'N߿EP#X iWHz5ő.{7nܨ1%2yd0g*6*fT;H ?|fmmO5}9RSS###322LMM7nܩS'zc$&9FУ$q۷o߿O DHw"ׯ5޼ykcc$~E@Fķa2YDz>O.]tRݻ̙[gggY,#GrwwDCC˗/GGG޻wҥKgϞ]jիUT@G'1ӧmӦM+g6DiNg!>߿iӦ.Eų@5h}4|rÆ Ç߹ssIIɻw^|I}|W5keDDĤIKYr u떐0jԨ˗?|8;;ӦM[bşI?3g\r,kϞ= .;v۷k|`aaAU^^^`nn.^tǎ(W!3f@@:OR)vvv-[,///--UTݻ~, b3rRːɇ p#( *WQ?Ziq! ҫW/Q&H3O?s ú}ϟ?]vJuڵO>?=zM֬Yӿb )6G 5k֟} &899effyѣdԨQffftww aaa=z011QTL0a޼y,kǎ=:uj&Mjx۶mG7o^``yjjܹC@j "T#e~?H-NL>?S 'OxxxzÇʰD!C)˭[lllzE>EzxxXZZ޺u+66~Ȑ!$ mnnիWsrrڶm۵kWUUU]~Ç RgJOOqF^^ɓw|%_tz;w.=/Ն H8:00pÆ ='4xF͚ͩ5_UWWdG$Բf֦V~&N|m>('0Rm;99M8o۶ׯϟrW\ImӦ:*,,ӧ'MDGz`o7/^|a2j\n>},--܉޽{LXgԨQ۷oW`8qbɒ%dvN5iҤ{ֶǏ̙e˖͛7vvvƍMa< i*|P\7?~}J.8`?۷>=4f͚WVVA[n駟Ȼ=߿-[.\@ur|ǎ[\\LVΞ={׮]Z}C^ѩtRΝ Lϴvڙ3g2=zPr$Kr#NQ!-)R(?WvV^vڞ={#F4i iIj@J-Q{N8Q~~~NNN5|r @bb"ǏϟO-++wB7nܠl׮ȧuvv}HwAOp|arr@ Pleިu ճ2 w,:K*qO31{a`R%T6$HZ㻤cbbŋ.۴iӖ-[fggϘ1C}~Ç|>ݺu7ȞMGr 0ĉ~~~,+**)##cfee Pssskk_m~diiyԩCw҅cDzJ$ӵ!߅$ؿ>&߿'ۈ7B}MFF'L@rу ÇŋxQmEH1 MOҷy ̝;$WgτB!ӧO7;;[SF0J /((xy<^{{%Jxhs$ !̓-LTx_8F"' 1a`R%T6D333dȑ#5\._~e~~q֭MlSS>}$&աCzq$A="vrpp;`ƍePP?e˖ÇK2ȑ#RБ޿ϏfKJɢTTTAƛ._,SGD?~oN^#YEEE:::m۶P CY]5,--5jRh;SSSvډt͛wLJ]j :4@֝8ꏞTuAH~ EPxZ- 듁10JLp 4q>w\ʔG:t@MM34x`j+w1x<ǫ411i׮={$"Lѣ&NԌrL@bF-Yk }h9H42^|k֬A\u(B `}].]ڮ];HNNr劑Ç33}nܸ[li޼95L!BHR {:dǿRl|}‡R-@Z~ `Z٬Yŋ˖-{q߾};;wN__Lʤ[FBZ~zbDH>Jda !?M8&\8]U`5z}}̩ kœZɩ\.F{NOO铍MӦMkܠLL#"UBE!'u,Ɂ\K zEնs5 5lQ132 Hɰ[6Ğ%l@35DSTOգ gR IDAT!􏃬/lg]{Tᗨv+C2wi+CH0OB,ZԵOy a!P7K!-sM$˗ܴlr7wS>3@ǧB).>>,\\l$7)/ʨD롫6|xQYxג@K!4!-vN:?i=tAxZS|AFFYPo]p֬misv̛7b<78UUIy$%}i_d95/ggEd m;^< !8b9GACZ)D䖑2,oڴj#|z%XAL K%[ۑj| SP w1%S)G$رƍ3XuA!mˑC_/xl nY?^:\ )dzrܨT7縹Q tڷoᰩ-ss fuk+O>r 7wɇ>HK˾viiiEv^:HBcc?~Lmbprvqut޽5쳨4"]BB:Ƿkָ4 ^tqwUV,-M۴iAmIO5ǐf\̌JنTX?+333n홐~3N~HƮʿ~f?p`G=TT""޽RYYlӣG++S/_~OO'++޾~Ƞ_??''k%wNN,-M5mӦLŽxǫ.8,IBBK߾l6DG'ݻf˥ ZXXҺun|r*$O)[[swwǏc>62!df慆>.,,i+ 3"# ڶj߾bO=!J~ⷌ{dm&| 4Ir};h&B_i6-Iw1BZn𮪫 dxaذ$:x{,_ĉ˼͍txǎgX0h?&++oƌ!!"5۷o+sk%^: 3gǭ[/ƌYC/o3.^| lpr˖$TD9~wu||̙:td˖߬gf6P(g7x;:w?尰u:uӓ'ڵS[3flU&^=9;wWU@WWe>> ZB@n2s_~ٛG14 ~ XL6رcNpw_z/ߏW>m۟d ޹sO? ?CΞzŵ$SS!ҥ/\'N n=**aʔMeed=Ϟ]I}ƻoO Bu?ɓعsw%/7v D ԕOJB][Oߒzf8)ʣH*@CCA e!`K~;'pTĄ}̙ķ>}˦M+Y,VǎIÆ-bI%%={Χ&LJJ!nxN߻fmT4Ąds*~ھrQa,kk3lÆTa[w޽7" BPhddТ[^~mϟ. @jjܹ;I['11I7foǎziڴQ.-ut8ee˗ZXP^^O+6m cl޻7-Z%GqAA0<|ձT E',͘U(3эx*$8sfaÖO 3sY.)) 7 um?߭ۼ/_r edPČAP60a c@\"!R$܊>bi! ~/V#gOpVVKǟ1أGf=+'/7o'lIᰯ\٘{%=is7[889Yŝ(, LEad*ԩ>rijg/[>{weܿ_z쐒kO' ͽRXjdzGBGs쐨7nׯ`֛7^>Hϊw#:UVƎ y: Y\\sšc$+/_}է4( Bbj6zPɓnY]DG'3p`ǷoQQGsr.#]~(NOOƍ ۞I۷}FŧOqn?Kߧ00tAd3Ty*$m>0?;8X~}8#"NJ &|bc߽#>d^˗uNst. C]B|~-ާ+((YzÇ{6wT|HYHдӼUXS+?OI#A{%!&&IuC"'YnnҪB9: ׯ?#  <=.#YpDDxײ;YS:\A ܉ ;Xz Y}je%dͼy#]_wP;; *89Yٻً`\x,pO rp}}ݱc%"<-,,!7055pAAZl?۷ w^pѣ\uں:bII% =Il6?~6 lKvذ.~hHVrrf=47o wĈEz[R1jSm3#"=}סC32$$[j%Ś4_ǎן>cWߢ_TZ,lu @E|4ƮX!%7--;-->)K"ćbԇB|h8øqke / Ǜ-)r߾BCeh/oysBnJ2A~cc'11Ñڌ)KWVV+'ij3ThmV#j-Z 5h5xy9~m/_r]il))% mmͩׯк'YCtIIdA *Z166+ pӧJJwH6><`yfrG]]FdA__Y3W%|F..7nЪͥVG-zO<}Ҳy**n(wOc2@ZZuRgFZBa;"%4x/EP.]f7ݷ3gQuu\FFH{J\#EPFr'pc5~DT $gɈ}YBeBqćI\?"[.X͍gjf- 3DggԶLž@Lᰩ8SB'lhŵv] x.\fsn ?\-GqFFA*gll(Mȏ T:Q7 ī #V..TU,YO7,uZ8 mhoo)MH̆Tش)Zx3"Ԏƍ3Ȳ<i ׯ?L P`{{K i@td>ؐ?67%eI=0f11 dA)yz:QˏJ ҟ^=y޼PRRN P5~ut 3:wbbƧO5sR,+W6R*Ɍ ,d8HK>uƒ%$)3SS,WoNutr7 q+!?!]B!՗)oC:);"3"5UcJMYxj-u\%PPJ < 04'9 ޫWdm&zzՓ,޿6%%f{y9w֚7֭=| [ؿ_AA ibm5޽5y7?}X\\feeަ'>, 2Z?}Ҋv:uqJɷ[X\\fllشkN-?cc |߼_ NN..Yu`jʥZd"}eYYś7Ȼm6)-raAAvIsջw &tƬHŋ^XYiP 5wwwK{uU? R*22*..VH6R1OZ[ ҙ I }\XXҶlB%%aaORSnjI5~3N~(/G>vn%{';͍ϪTIx3diirw6u^KPG[w„u͛Oǎl6fLիŋ\9Ȁy̙[^œD")n݉t$ i5xp'Lz-Z}_PB 6m:=h?ѣsժ#<^Ue%oe[HOϹx \]ty;;ې'żyڵǨi)ffF$J{>_PY׿~$G=5rr ׯ?݈f}mWpww :uS'UG|)Jǎ`ʔ^Lr'&f?سқ7ju[hq;;P'rB[\&Nl…%AIqJ{Bwo=jTw6]VVp~V8lggd%I'm0ڵի1 [#p>>Oo/\7~:pwwTUq> $2\`֬maI6PI`37?fKJBQ&pٳ5/?$>ޯNYäqswRAHHD?tVG,! 9svg3f YXxoسҦMK"oyЭݻ;ӧt̜9rΜ$s|naÂyE֘oJŇ~'j ;6pSct;wLojjs*Mʕ~:7]%#9Ĥ)n҃.ɓx|j&w7~J2e5!=Ϟ])~\OΝиCh&:uwΜ#M?ǧAKӼ;4T}Oy6Eѥ}U0`bl&1#+ 5dHѣ{޽7d]0 {ӆ />7ٺiaauQ'N{b+SWݯ_\YRR^RR>qZd&8) 54޽/'OvuRx7vض'$ z̙.k:iӿÇԞ=瓕vv"Y NQYYehgjjD%'[q8쪪0vl 0"}}]|ɕ?Α#]X^^y3gVV<1v501r8l 0rdw'ѻw ;΢\xM c\7q'x?Ǝ]3iF33B[`bC,͗v 'Lԅf\;FGJ״i.]ZFD9sASV[Hb5#݅ӿڵmʟ8q<@9sU 7, *::77{۪*J32r?E\`׮nOXPP2gΎgԹveӦ^_|/_roJzQΜ%gcь[I$ŶiF99yyET9iFFΰaSReΝ=aBo*C0a]E71hВwL& 55{ܝUMҔIڸ֭mX)9OY?Tlܸ/_dX$\TDtBS'ĉekjcǜ_~V=~MV kWߙ3m8KVliOHaٳTV&M÷4n@^.Y2nuP8zt&ճgDZVV5"1n\} 1ZY>B<ҪU~]\\lXd3:w5~کTGF^\g kWǏ۞\99ihXғq:@QQ) cqf ݳg'YXf77{RWWgqWOM^atv LLÇH?(vK4ҥ$mP̆l'<ԔBn M6,8q,de!{~i,ir͏}ʕ̛'zEO?{v9&&uu#[751lbu5Vj{z:={v ?jIIxDn>GEGMI32r[RS3zÇw*֭;N ur;QXƤ7MK;?ߙW&ΤdҩS+=Km6rȋO134isT˿ϿcGTNϟPR vP^޹=&/>پr_^sg;i ^x&?~}sr.GD8WQ۾}vaa(ո񳃃ׇ32.zy/GKzУG5>oD!BJر!0Ⲍ \.NڲSNOO}W??H;<+Pko]'䰄Aq-Hl޼];w^OOx9II_uJ@]{{ԘvZ }PZZެkJSȐ*ott8Z6~-!ԨE 72EG'j.}Çrkk3GGkss`ə99&ލDF+8ATTbQQYu_xJ[BO9֒g[BB_]]5qކYݙgb0RINB; DOɇTeIhEU88|Kku !C:Kihy|9rY񴇇BysHOq5]ҬDLF^_퇒Sx֋R>_p3pt{p*+y&&Hǟ͛g.\8*}~디r@:uC  -- ,9H={u]زe א`#G:88XEXX "EF-QRRnn>lEFܰdX0`̘5dc|I҆gHzΜow ..#IҞѣ{vۻ{GFXIF4~DG'L&?޽cy׷~/HQC퇓X'N,0u``2Jfgd\ sml^K#Gvw . IDATpRA[^~bIyOɽΝʵ%X@sgݒO HjRwNY`Ywj!/{N(Hkql6B'a烫4֢Ƥeur Klmm&k<&5TSSo~tt85|IfI"(n5bXNW wwGy 6DF81\p!04?޽O;u&ykHR0G|'Am'i$%eչsq={.O%N#s*33F@"$EӦm>v우GqI K#Atڄ>>$ol5l…7 ƛA 5kܹ$b[=M&rG;TQ`KKk_OcJK:ښS SS#ive%pdd?}W",dfxUrC| jWw$ԩ_Y?|xd-OťDE%amyՎrdMԗdݿـén_":,S. +*xi@޿O;wv\ÇQdd:AxY&BFSoSWWѰ'ObAƤ`(U'F=ңfnVŇC.]:ϟ'PaСOQQuP>Ƒa_lzEQ7 /hJ Ֆut58 $aLd 9++돹ʴ}&=ѳQM5rQ #tT'apfC$M;!iwB ukv^9sf`)SS\jdE>UQIQzjgf܉d߽bn|_w{#%Uz\\J~~ў==„fۦM p8=z2uwwG;vlqUrrHmɒN$JNNkOhX9%9s[>z0vB<^‹lŊvv\JSR:w_^ݽر+9-9 Ց, BH0`䀃 hb:熀w @MjL^*T^iÆ͛lzʴT2 G~$Y܄ `کAAߋoᰏ[8<`߾KC')ݻ}%Y!HJlCcMeK=BUG0WB90jn)(S^Bi]BH`CT cr R jB)FB!dߘAt ڴSav5fBB!5s"Bp!bPCPlY!OB!?p!vQ0B}B̆pM;4DjDa,9,=!HB!T3 h'F5e1QTwϞZ[0  FB!eYS%vBH<@!9`,BHy0y|rƔƚ!*DLJzRd!BCųE$!+98#6b,YMBHFB!Ҷr4$hb!-!_DXqd| P0B1 6N[nY՟#0B#Y!ivj4ЀReB~x"dB!ԉxlBB THm:GH} &%Bd 'FB!&MF얅4P֓6Ļ!VuB!$&ҪoQ4VBaP 0BMAتD#O: BHFB!/lM}EYu>B2HB!-6!7 C]0)AU]AB!u%k2oMM-w FMZ@ZHuֶxB1R-d!BZDcʯڝ"v ]UW v8!Rc?dj{KRZ J/Bi<쓅Bi5%Gr+u99rS !f*/J$˾lRyǫwwKKS!4FB!&G`i#S kaa1@JJէo/ <8qb gB!Ԟ&<j\k9A>v… G<{vBFB!m42r5/|dHA!-,BHhC*IÒ)C$̼,++/!! }}=Wr۶MtrnnoSR2lsnuOW~/ }KV ;;Sq Yktޚ OFE%YYif@(&$dDG'fg빹RH,,&&ٳBcN>zo-Z@jjVDĻ/_r9i&έZy"ca$ !LK$,vrsmm- ?~<UU;v//>h}Aˤ/doe-YڶOS7oyY.+N=OVpޝIw˗ڸE}BOBpz-Z͛k`@@'33# #Y!)OxYJ$8VmP륯[6bMW6mڨK着gܚ7oY 0uӧo9z4X,_7o>6lk[ۊy„u_e@ṷ {̌**x<O[[啋hyYK9䥁^~~1P=ٹp:th/#2a$ !R»RT[R;Ӧ x'N\'7Þ<<}KXl6;,lS>`ժ#k팊:*ۂի'Ӿp޼,9xm4ȟDYYܹ;I̙|-=1l3`ĉ}7w#/Ξ _//{IP%#Ftcٟ>jK8@KKן7d9;;?$$P_ `$ !BHa0 Qz̛ŋ͚={;:Z@p k@"_-[I>{x8wxU&##C77{ U-i| l6sgΝ}]}sr N||Zaa)/+"oťqJJʯ]{F,5jTlEݻ{’-ܚ7wkmڴrT! #Y!ON=ƪN JVQoBjP{^'o_?ԩ/d!669 `N3D"YCtJIIdbQ+{/\Br9 MK&;ҥUۋa+V_FFNrrڵJ 3_?Sa FB!pYǏg>_C-ut8 9;HyFl>[!D;\? n_%-Zjs)MS,͵ht-KӰ2M0fEn&h * ;3x8 0s:s3ǢhPa:tjnCH/h0xul?$ɋXעEɓŐaP@JM z\nޡCuǃ*1-^k!={;zŋ=T7nN#G*ѱAg!iU9e+!֭z X^VBTaMzx^V(?n2lO5h:ws?G(Yl6ONӦX`2fY{E&L~!?Bh4)ώ1PV3f|(/3Mǎ6mС-&rcVnӦЎ^zre̛oB4i.+8u˗o60b@g^yc#n;Oȑ3:mK>Uv0' vْ2!DHH?zM=W9>UԽ{HZZdg?iS!Dyyѣg#/iS^:(Kn.\H=xTFFKzPPON<|8!++ӭmۀ~8';row 1_J-77`0[6U\ trt 3$$fRR.WƨQ^}e{n\y6$$pѢ3f|(x/~{_\\*ٳ%1thuB˗-4Ǯ]K+i?lA/M<5i҃BzgNN^iiOrrZPo^^AπbI8s&d2EDB(YW"#7DFnB ^%O㏇ʨQiÆHOB,]:嫯~r5}.0:zբEǎ˦w_hӦG}9@ѯ_5kfv[vLAqGu^oߔN0qb26K'O~~ᘲsĈrcƌQ !=;~'Th4#GZOO7h4=ܿ??V={tΣ99y/ކ ?&eVMMF6AT7޻7!㏇ k/,/R887{{{t$k ^^Or/\H {?\?8!b߾L+9N+WovWKBOy96{^_MfDP:;;",[񽰰;_8~Mz˗ !RSQNOGz !ppЅvtvvx1=11h4ef(U So"f QVFRSLr??}`s%$\v` 4YVf<{6ʕk+ADY1!bVVkzOGk4CBOjɳPIDATK1' uprrܳgY={ッfg疔.YgW뫏صkS||X ]ݮ]P\\=VR'XYf qq+|KJJ]GҲ.\|T!ī~ ۓ53{nV)7B[7…Ծ}'ܵk\5fڴrlܺ5)55'},:zc]PP u[c[[%c͚5zΜ199y+W89UC/_=g萝{Y?""WۙWbb,ؓ ͛]nt|m:ҥu-^]8% uxz(ٳ]xŋ !p#ׯ3hP!D^v:*OK{8ne6 !bbܨdm޼_n'%'% !BC;79|;+m̞Oo~UN`OVr;?(62$ȑ3rGv۷ɏx챻ih^^B_zʘ 7w]h= +._|P^$X<:77sV:ܹU嫙eet}5@(YPR===]dƒ.]TVl%޻viiťΎ?111Mn_k]t)VodiVV>…TyG9 vZX^ҿכC>9s>IMJJJ_sS||sBe4aM[kPPy[=IYK;+?[RRj;T~mPotCj?SV(`_m?K%f) ~w=u-Z4>aWSVrn׎DFoӬZs;Q{ĎK fvt;SqߏOZ2vʝU#sNN=v~M_'99#*j_ w9F='6lm2űGF^8g'BGG@}ٳW'%&m޼_Trے%7nܽiެ\͜NVVV%WϞ[h&:F/3fHtlcF4i➝k4-^q9ݻ .]:E%iPj悃}ti-|VVX~~e^;>Ǡ^2fY{B)o(3֮}̼rL^i~+C '6mѩSK; !/^?kVoTyyf9;;{TTY1!bVVkzOVZZsI ~~U';8ukc^j,]Po`/JN5!!V( Jfg󘘙.j#~Pw\]4kִY*n#h WW=UޟwBuaN*hBBW^KֵCnm?ͥON{smȻ"ֈ,3X% nڴUOZw<dz@hh`a,` (Y4R>wwz NۣG7ߜpm-O!L^K,`uC̲}vg:Y6uXd`+Di¬=@P%Jjk 0Hꪻ{4PYh(YPJjiY6k? fG@-@d@(Y=e=Jn 1 4k(M % /c!Q'[ĿD*QP:d kfma$sYEICdr>QPgY4Ae,6Ĵ, l% uH0s@@#fA]X, Tz, "Jf!B,2l|P2~p1y5B#1m"cJQPY5d,P/J1 FT.S#.P;JӲ`ud,,4b%J!c}dd"c}dj<dA1- FB c]d YWd,W,vv`Z-T!fnQ`M,24,GF+cZV-nq6dY524*,jEƆ, !Jl1 hX8i[BF~FKdP24r,1č,b*#c% u#34o  JlӲ XE"f5rd,@,4bFUv՗X搱Ud1-!cn f5d,@5(YPbVc@TW[Gj0-^Ei4d,%(YPb % 0 P#,L㜖e.^Q>3f2(YP%bCРXZd@Fd,d@I̲c7_`-,[#Yvu,,Ӳl PW(YvԞ>~MdNqR/2nQ 2Q`?e;X)./P]dLTݰ6Nd03ˊdz#c % @P 2P`X@}"f5$2aPn!uc+%(Y'JYj`BYvðnH"cTYd,,Gz =V I ? [)?]]M3Vw ko*hsņ 9K Xh#kP#,欵|*'[P% T] IUNnP //K)cYטP/-Ƭ:SG>*dγT.Kq xPEJ,fŒUE% z]@(YlƂd,nTde!.-46,˙Yڳn4@5=ɜ$cSX2}d7Ԑ=ɒr$d7q%Us<,dYª|! `(Y@ 2!Ai75N6@i4,XKxk *Jf!TOkd@ǎ5ʅ!!MzX{8 J`R\\*ؼyp\]ud@6*/ϧ{غusr599Cնnyyp2ߥo;>]!CziZ!'V8v킔;WM۴ 8qNj4;>M UrS))t-Z`<Ѵm[\RRڐ!;_ii:`ݺuqq0% 6h4-ZEd䆼6ѻee^hٲMre(מ>}F{ y5++WuJׯˎoƚK{Z{8e#qn!ĸqCtW'k4G.^|hFFNx11rÆWvɒBܹjՖ7\+۳g"11o٘7N}?11My}kO>̼2|_~?lVN99y/ކ ?&eVMMWo>;"'NLNB8uj/l2AM KP`sLy(}|&9J1qb5;䶻KY4/`̨Wx_ȼy:tOɧO'*{L&>X_~CQQkAAd*//_d}۶'B _|tb޾{ݔvSO>9Dyxbk}ɇ#FW2KAAѓOSN%  z?CN{^|d2 {ꩅrB{oЎΎ/'&+:Y-'(k))df\~N`"..^Xfݖ{/^/gsrrի2st!RSeVxaQQɪUnKKr…k˅˗Gˌinޚ_[!hz*Vkij֬C+<@g˖Ӿ<{1=sm99 xVVXf۞7'89UWxCVlVhhG.߽s֧F^=1P ,ؖ}rmݺכ77!G4`@7!ķ4kt޼qZw^BҲm~c<Sv.]:߻Wr'!r5k6&=h5kp3g~{@y~ÇBxcܙpQt2 ۷?$dg !ܣ{Λ7Nzx.Y2wf߿Ee=g~3f׿۷}vl[_1b~n}|={uP , ESf6PJX ݯ*%xxZ~JJ^]_+ #)+3*ۙW\OO7!hC[YF'ٜC맟>:NZ)%1''/"bʕ1ZdtJn>t|J:v reUj0GQnϧ!!BeVSqqvABg3sdh!ٳrr*%c/}J_˖~￯),>!aOC=RaPS,ؖ#ʙ>%%<0{G={֭O>9PKvpܸ%g$8رrRa}j0II'sԅm~1Co B5Xٷﷅ ^{?; ֢E3!D6垄ٹRCFaaرǏoo'S73^eH>:ᄔ{:b_sW9rXӶm`0\_ZFO*ޗ֭/]: !NN6lԗ_B.\8a֬(!Dt>ex!FY|jkN@OT֨V3fȦM{s|[^^7ȝAAh&NzwB[ɺ5jpL#زrcD!ĻPk33DFn 0 K S?Vӯ@0' 6={3i0x63gZ~NvAtmےG2th>xYY`9u:.׿1ߟN>`˹>>MCwya̘!ՊoҤ:wnvh6lt9kLѦMr-vZ~zVVX~~e^;}jHE4=7=,##Բ2mۀ˟'%''ghV|jx#F߸qgiE'O^hD!͙LWܜ۷RhΙL]qwwAfd={SYvΟOIIrpZz󋒓3rFwHH`? 4a-n#Wv}}в_˖~= 77޽;VsViNrvv Mj'BmiPWXء}&SBC;{>pu! J`\]5.5YNI&C.:P,% @:P,% @:8X{h4aPJ#|E:.:P,% @:P,% @:8X{h4aPMyyTG!?uѽ IENDB`proj-9.6.0/data/sql/README.md000664 001754 001755 00000006405 14764566077 015415 0ustar00e012349e012349000000 000000 # Directory data/sql ## Simplified UML diagram of database classes - [diagram.xmi](diagram.xmi): to be opened with Umbrello - CRS related tables: ![CRS related tables](CRS.png) - Transformation related tables: ![Transformation related tables](Transformations.png) ## Hand generated files - [proj_db_table_defs.sql](proj_db_table_defs.sql): Database structure: CREATE TABLE / CREATE VIEW / CREATE TRIGGER. - [metadata.sql](metadata.sql): key/value content of the metadata table. - [begin.sql](begin.sql): Technical prologue for all concatenated files. - [commit.sql](commit.sql): Epilogue for all concatenated files. Include consistency checks. - [customizations_early.sql](customizations_early.sql): Customizations to be applied before EPSG generated tables. - [customizations.sql](customizations.sql): Customizations to be applied after all geodetic registries. - [grid_alternatives.sql](grid_alternatives.sql): Link official EPSG grid names to PROJ ones. - [grid_transformation_custom.sql](grid_transformation_custom.sql): PROJ specific entries in grid_transformation table. - [other_transformation_custom.sql](other_transformation_custom.sql): PROJ specific entries in other_transformation table. ## Files generated from EPSG dataset by [build_db.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db.py) - [alias_name.sql](alias_name.sql) - [axis.sql](axis.sql) - [compound_crs.sql](compound_crs.sql) - [concatenated_operation.sql](concatenated_operation.sql) - [concatenated_operation_step.sql](concatenated_operation_step.sql) - [conversion.sql](conversion.sql) - [conversion_triggers.sql](conversion_triggers.sql) - [coordinate_system.sql](coordinate_system.sql) - [deprecation.sql](deprecation.sql) - [ellipsoid.sql](ellipsoid.sql) - [extent.sql](extent.sql) - [geodetic_crs.sql](geodetic_crs.sql) - [geodetic_datum_ensemble_member.sql](geodetic_datum_ensemble_member.sql) - [geodetic_datum.sql](geodetic_datum.sql) - [grid_alternatives_generated_noaa.sql](grid_alternatives_generated_noaa.sql) - [grid_transformation.sql](grid_transformation.sql) - [helmert_transformation.sql](helmert_transformation.sql) - [other_transformation.sql](other_transformation.sql) - [prime_meridian.sql](prime_meridian.sql) - [projected_crs.sql](projected_crs.sql) - [scope.sql](scope.sql) - [supersession.sql](supersession.sql) - [unit_of_measure.sql](unit_of_measure.sql) - [vertical_crs.sql](vertical_crs.sql) - [vertical_datum_ensemble_member.sql](vertical_datum_ensemble_member.sql) - [vertical_datum.sql](vertical_datum.sql) ## Other registries - [esri.sql](esri.sql): ESRI registry. Generated by [build_db_from_esri.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db_from_esri.py) - [ignf.sql](ignf.sql): IGN France registry. Generated by [build_db_create_ignf_from_xml.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db_create_ignf_from_xml.py) - [iau.sql](iau.sql): IAU 2015 registry. Generated by [build_db_from_iau.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db_from_iau.py) - [versioned_auth_name_mapping.sql](versioned_auth_name_mapping.sql): used for the IAU:2015 / IAU alias - [nkg.sql](nkg.sql): Nordic Geodetic Commission registry. Hand-written - [nkg_post_customizations.sql](nkg_post_customizations.sql): Registration of NKG in authority_to_authority_preference table proj-9.6.0/data/sql/Transformations.png000664 001754 001755 00000126020 14764566077 020031 0ustar00e012349e012349000000 000000 PNG  IHDR2{׎ pHYs+ IDATxgxU$F -^oBG4D@A}7TE"HoҤZBBqM H)ٙ3gLr9sFg0N-[#pPw 7i&_uMPL.zըDqwwXSv><<:>>`0Tn[((c.hdX&>twNr7`0ԣJmdٿQ `z ^^/5+_pÌRRDDә  F߾ׯ*"͚-m[ZxY_~beei# FF+U "*5iig΄ƍk?8zj{׮-llD$))5$ZLmU,..ȑjyZZ1|VMfTDG߾z5JDlmMؾH\\SOsR*|TUtrOMM?{իqqNר]rSǎ] KNNsss_Zz9_9~bBBS۶ }|xv Q":]~^ukPϞۏ׷~\SDFx& ] V UrӦGvS}^{y>>n{+3sy\\›o?zCF?ʕ=ǀu#GZ*MNONN_y晝:5f\ҶmK'j5ڵ}bc={Z>}:tЙAA!VssC{Ν "գGk5xر ˻[y uJ:N[:@~]~Cw.\/"I~Ì⋓L."/G|+55s1+W6m6P3}Cwry3nOT&373``0,Z4.|&**[kN Z2%%>qKl[d[WDXd2EE?5))UD\{tN׶mn܈̼;}̘ohnGGg]Mz?}3f7Xx:4>zt:]&5n z{{ -~GI+\Gι dg_BϚ{;˕s>ʕ+ΝdQϤ!##:W^=T'o/ZY С {РA56Xx_~fF|N:>}#G;P%ȴ|Y:u*GDĈHϞnL233ivW S=yIHH=zο^E[ްQI*vv6))i"2iҫ}tB0v삙3;:ڭX1jUf͆'%oɝ@7XΔo|4[PЂz|=_ρ߽3g^IMMi"s籅 7Z{߾"%~شbN>[{#:;?z|v>%%mĈ/֭URo56^uo]f|ر cbmGqL;J5 ۷ 7 7>$P6 Go9 ԩrpڵErw;th^zg-ÇnZlŠAV޳aÁgqq *?#۝;wUD/o{2lS効x⽔aþ6Z9{Oݼr%yᎎv6xS{wT U Z`g-<;;h\ kpwk׮#䛛YiCѷNN/оg֏|ɓ_}STز ] ٳhy[[U>4QအC{~}|_Wz+< oӦ>2n0?AMk(u?M݊2 .GFY[[zzz{[X?~11w.\Pn]'%\KNNsssYb322CB'9;{yyx{:ghsjrHeҪirLXX@2/Hd %CVs8KK ?J=zzٶ6"9r^ϻ,-ݝ[׽{KsӖ/߱}ЈLWWGƍko߾Q(xo9@<$sv8{͛E$8J{&5m9xlޓo܈]EڇL -t2gZer//.]mND*ǎ]v>?~O~>FD<ԇ*[YYjUK~~,EqN v@1ujTcEazn-gdd.]Gdd*r[[;w6ZXFVCoN5|UOII۸񠓓}Pl9[erkkۿl޼מ>?~Q-4jT\DUY崒Ou}L."vv6{w,sӧC7o>?q&`08qI-kBC#N[i˕sT ov/3K(zr@qv~myОy|9Νd|ѣqÒDW OOh7.Yժ́ LX( Q nnNyF޽v/JLLXe[7Ν v}A1r@q}G-X[[]RnnnVV%I77o>de'WmŇWW[?gίx##[ۻiX5;vI!!K"#LZd6sc]g,?~Z-}u7oX(6S ʉNA.ƽlٲ?,vUExnvӿ=^(^ל923Dd֬/xWW [3Ǐ/"7nDGGV4mZS-Zw_v͜Z?u []4Z+==?O,\Am}6E|l8aӓ>/͉f͊~#F|&H_v֖pכ5iRS[~6*\t)F ˗# ƍ7nb9&C,Ua! Q*W0X,t+tGF,dBQv:!P0Hu<2b9sFW9@XXG,d :@~\ @r EN7`0u+@qG,":F,dU6;Xlvvr@Q vP"8v܈ PtJ}9#"`2r@*X@`;xr@Q@C,d(}`X0b94J8vG@,Gѯ_ԭ@qYP"mٲ%wv횕w֭ \ti5jh߾)444..yCBB2226l>߼yA?~zNj׮=zԩS*Uj߾}C8p ))Zj;v~sgѣnnnUV 9x𠙙٠AÜ@ 49;;1~[ׯ__|y=H<--MmMOOz333ZjPP{߾}E$33ӸVZhǎ+"+WQU͛7`0\pArpWRRRVն*U:oyT*" 9r*Ka0_qr@#14.3~x;w=sN5jʍ7_|qS_媷… ʼ/w5gyL2xMJJʮ]iѢŨQDeɒ%M6޽{4hq'СCnjcǎS>T `qÆ #Fg׋/~ z`h߾_c]ҢE5kj0e`0lذxMVVֵkbcc5lssEk{l޼SO=5rHwwwqㆈTV͸6GG *?l*Wlڵk*Unaaa"{Oޕ߳=y_ҡo(eeeUP|LIIIIII+}DdԩYYYlV~Oy_Rzܹq=pر#ӮUZZڮ]/^m۶t Ñ#Gs !!!/駟 XbrȑtҒ%KϟuV/^xM9{j:J~_|ypp><<ȑ#iii6l?~HHt+V/gΜ(L6dy~ Ι3gΝ6mR}{Q ߼ysPPza_rr*pYsssKٳgƌgbxSRR5j$"Ν;>|{ڵk1cDI&?Co>v-^w{RP4?~\D/_~ϭ_p`ؼyڎ{o|bbuppP$ھy;[n9|?ӦMiz-I}{W\6͛7/%%W]&NWX+X~…]Ze˖5kVk׮7n0.pBD|*>0 ؗ_~x FGGkΝm577o߾Gƈ7nhѢ5۷o>}sҒV^]|yooﴴ4~~~'O4 򊈼wYpo8Sө٧oݺۻB !::[&=4O."O<ɓ'z}LLڵkVuvv?~ŋ^:{l4iRll^yի׬YWX...{|rvvviiiAAA{ g  JOOأ8pfgg9sfgΜIHH(s{0V55Xn0XϢEDdݺu=533֭[8qDXO0AD?S4y{{ܳ4^9tPNht3N\ryOonmmݼy< 8::iюҺum533Wޣs{(Ξ=;sLz{[lV8K.yc0=z?Z߳g^ׯq= O6{ڵkWJJʻᆱπ?֩S`0=w߭SΣX(FJߛbbb_z;~hڵ˻K. OtwwRKNN6.QRW IDATQQWok׮ {ђ#Gرス;u4pOP""#FPC˹g#+}3ϟ8qI&9:6p˗/^W^nժU!p9oee%"III+s||̷ߓaroggiӦ'Onܸq޽VZt'|FP""}iѢZXE0(:.GؾsMT."Pvm9uʓ'O4~}MC"G{YFԄ-[1cƄ g !DDl3SbbbZZZceeefffs>WPw*V("H>}>Sv=͗l5zk[y :tpww>Coo|NlРMRSSP*N10/Զoڴ;wرcڵ۵knݺӧ3""/0?VVV߿- fGGG1zyӦMnjW_lޫYfBB¥K-[6tW_}U~|رvvv~~~;w㸶s0`@v&NبQdee}۫O>...={Z`غu֭[tB&zr1c\zuݺu֭ .]?اO &wumygco߾666SN;wK/4nܸʕ+;88hefϞ;}ts177צoӦ͗_~9qeff0~嗭!C5SLcZj}w?ֆ>}gP%](lo ˗/GFFVRRJ\Ϟ={:t{*5^ܹX77ʕ+Nd0Ο?-wwի?p@^eggWjUoœ)r@1UlymXnfff=z۷ԩS 40m(ˌc9x%(Hpppݻw^Jm۶3L@Ao9*6)џ}EoΟ?ǼF?~@Y@o9eBgϞ]uVP![@[(֊Utj ({L8b9Xn0N(e #@a ;:@)F,dtBB,drPx2*b9)ʜL&X(yu"̹AJX( 5$@ JB drPd#4%b9+G'j29(zr@8LLX(U-]/;(XrLX0b9&C,d<Jb9(0%#J%b9O0&<X(ILI%pC2b9D*L&X( 60߳629(lr@ VLPңdrP4ҠyC L D{„kOS7(uM 0zE$8Jffz899e\."ժy99ٛEL H.cEdIu~}cbdeeu6,&ȑm6= =1Pn=/.+yVV̌Y@PDƍ*" V3u[e#j/F^3"D,Ng˽ԚWFuzqq ۶};^=v27oƆǤgWF9r^DjժU| nnNm6q7>thhD\\TRDž ?cfСqTT|LU "ҬNKӉ[Vu<=]sZJJgnfee{xhQ;G239ZFFVJڷohZN ':ŋ7ڴ>]gղ9-X7rlUG z٪;]Dzh~t33O?]G?>}ӧCm277:ܹoX5M]r񌋋/rݻ<5u޽v}?zssAkeedg?|̙I6.vg{V37NN~:^kn Сx{%<-={N6n<O| '^8pEdӦ?;\k-=<ʵm.;[O)˯YWeruzqssjҤfNMjQ+-kdغuk׮2:ujrҲԬYQ}"[/RC1cxX؊VM.!!YDukqʽ{^,"iu+Y3k<87fy2m?OP[[[֨}k[sW/.Ѫ؏?nVc͎9`:[ׯ!)i㼽D$55wV&O|[3棏~תUW ]ɓ7b @ ųǕkܖ-}|ܗ/tR /|AS O :nѢ+{H>M[""sgg{gg{ sUS-''mvw[8qI-7kuk=Z~/˕sVꈈ=<\k\ŽNOȊKPnݺQv5˖}$"vv6]߻ fff:4:x𬈔+XKt픔mۂ^~ 9t(7Mz'KN1:tVJ%b9qorfyի{ϝ*33kǏ<=]U&WWGz=DDn܈VsȉȘ1.v3ǚL@uoߏ7QʕH~*߯zs1yYd^oX쏝;Pwwn>Xf/ҍXx\66VZ9t\7Zzɋllƌ靟,X]^=sUc=QM7UeZ* ֭ɓj>|m\-{.U]@ ?ٲ?ܸAEc&i0(eaawc._7׭iN{oϜ ZVVagg&"&ڧO{i}|oU֯_UDr?^Ne|%44Z5\>Z߰aFYYwϫ]>Wf_xӣGϵ7m@Ĕo`ii1{5k> ҽ{'~h۶ѣ ~5,ZyV>K/uPǎ]^9."11w~y{۶w8hsvז>'"׮E GXZZHFFOw˖1AA!n|HDZ`<chhĬY+^Ѻُ=߯_G5~E__!P[(0=׶q/_],]SO:p XD>+Dφ̙o{*,+͛wtf{d*kӦ_Cg۷||sV/FDΞS h޼XX/Z4[2n X%77LW) S;YFEJ1z׳Kj\1}awy]xx;|8`О"2WlGr||b.M/;Tn&MjtwwPE-ovm&LޠAc_V"erydr:pßn%##3$Z||Gʕ7+U8~CC#j{BBSSݝ ޏ#Pq8dT C#E,tƱA !`2rLXXf0Nk֬hoo#"WD޾$"nnN*U0e rLXVVTQSZZFH5\u2…M Sˡ˫V޽'9r^DNG " %]llBff8:ک#JbbJÆCL׮]C5>v8֫8LLlP1ʜ/33NU+4Y]` ^^/m;0/^Q?~:Q&j]^=ׯJW9R(s7R'NC+޽PMM}[==p ̙0WW]gEpjԹsWccI^߿v17o>|N},WQwr騨x;;V֮]a+MpvoٲN͚FE_~Kcݺ_߷yNMT][Qۭ[;w3p`W''+ׯߺ};)==ݹe:j`r}Ne33TuMj׮``Gt)\MQR /طﴅyv }}=xIx񆈸8ԨᣭOII;{ZnԨE||Eĸr'.'/Ҿ}#S8s&,--CDׯjcc%"q7nDu+ڵ["hWV%,0ϼ;th~۶ r/cZ5k>^xq/2YY;?lKݝWYmZt=q@hlm׮z7x/Y2AU2zjMϞsWdɄki==]^]5gsxx۱c*0p`{ ]xq3t:/>1qԩ;vlg]ZV|޼kO{' U-,SS;0ǾʀOfda0y{^regU/P_mǏ>ԿuxO^7lXxZ߾}ߍZ?c()ǿWkxZsBW5Sɣ  3r(xgvokݡnnNf"RZ3k矟xrۨ3}U&;[KƏs'YD\\T%11w?Obڃ"{iS7mꗜֵ89٧7U;=FU{ >K*qs}5s[ݺ66V3 ^^n-Zر*ty\ww*U<'98kwh5gNWN*vv6"rL9sV_m| TS?kelذfddNXhSD̙?8֨/K6;;Q{`(PΜ 4hzFF117/Y2G"s? Pg Zٿ7cM'"7όr*Hŋ>t6mOsWwl ^laa Zz8箶s&.|/@谰j!55}Μbcם;Ӯ]s ܲ )22N ޸qzYD*UB7dH۷{nM0q{۴sUx] y_[{*"/֭o#֝;=zs˕sc|Ţ_׎'CDvʧO/]ܸCFpPyyaa+MuANQDN"ҴiMxJ*u|?Ŵ?YTvffVppZKII7xabݨ[Wݳ8xoVV68y򇠠|}vՂ{$$$ܹz Cz<[]mٲΚ5lkk+Ojȥn3vjO]_DnN qp5n״'yU"rԤu]+w+-j%lzzĘJYII.5={6>z`XDϝ>wǸi\6Z||6Z}#F|)"fҵQ궶KnWk90;[=^hZY[[UW<֫ǭExu*iGԒdjڽXۣ]VE$33kϞ""jUׯK .)8}z|s;ǟ#_gScEI~5[jnlސwC}Ν[nu뻯ӮU\\kEd̘+W$-/"|/?M @AҖ/] ע,w￿I xBi\bJPP_Q˯UDNtLb[rWxW5o٣k;?-55=!D`-͘1hyVV=4tT%W^{hyZ%[Z[nO{ڌ';Lnnn_ߪ~ull/7!==a{NMM?u*T{њ}7>>*۷i|BD23 tf-9ޖ.ݮܹ==S@AWW 0~y7c9NjW#"M^=iҏWD:ugҲG9puU;ӧ|fGzV>D37V7n{3cƲKysJ9gsVfE^p&Ukcz}jjsT IDAT-FFi Xjuֆٳъ]>gΪ ^SӀ̬EoV?~ըo6m:Κfs.mkr٥KZ[]gG?G>0?}:T%ɛ6[BB~'k>t4;IjjFVV#Ǐc6],3Jt z ;3jW3"l?vlO>ID֬ٻf^ӺuݝE[7ڳ礈L kŚ6[#||(">QrS57&O{$n5 MhRK ""ػ_yi"aÌ5|+ެ/6'R#7kVK&"3g0ޚ&N.F=?oo"7kֹ:';qGzժ^=VDhР2r(`s5iҫ..^=_5[D>/i]moo[w{"'0miժzakWQ@puGGz||~aLH;9yzzz8J2_Ib9Bt-&s9rT \("LaQKt g҉YZEL]V]*tȅ2K0qVmnF,a!7 m cOخ_:@a;f!.{nV'sO2yLȏI@@T0p0ĭ1`kEZE շV vS@bF5e*7Ay=@u vPw7@FzPNخ5~HnBo9@[CS14׵q85'!:@[PWp*Ta@ N{g#4BýQ=<sNB:Cq0\dQ_K J86mV *a; bx ny(} 4|@G:X 9'84tP>B:KW1{-0P#r/PVۻr0AG0WqSƺ@[: B*aF%PS3BWizI \%pt[ ca:e:SvCU%-zOoqGMБ0:TF &y-NCT#~Fp^?PCh/&ޠ~`8݀r QWDG )+p5;_.i :8@DA)ٮ)4[Yi9_DsBtM v'hiAd^V9c! 9]0S0@S[1.Y.÷S#!\@[GtptBo9:8ݰT 8> L!n:k ?r킎ta;(8g!V=9 &Pz@ƨsz\>!8jdd>9'8 &`rP\UgT \8~”oz }MZAd*8:t :@`;A_BsL Z  ߯!8m@Ǡ@](= Co9.@(KЉ?] @a7vA/Bdn8 BtU# ƺ6Bo9@(09\78N)0F]!H y}q]?hvV_)-< :@.h G2pj/Np @Co9@5x}v?%A p”o zm}P"s. @G:\S vvP&Bo9* Ь%:`(PzT 6 @0G10izkP4ߡpMptC L$M*̹ G::ƨ"G *IrCzP4Bzq-NL*I zpM^2P7\:@h g5 2F"~10B!Lvƺ õdP4A#p%H@[g#P9FF#@t ƨ:= B')t]p| rDu pQApz(#ہ#0#[~ ܄KE: p@ A p~ 9p:A c) *"$LT!A U}-xPzˁCPơ \9@[`8@o9hɜH@ʏSq{w:Cp@AS墷4S%75].뭎]ÄB9^JrP/Z9CXj1:$21^^.H[jl` @ee%%儐&M\,-4]"eg$%eB40j֬Q8jK"dd䥧SScwMNss !V :h8jdysSS !:P?+AZ>?GG\\jS3ζY[ݕUBy@WW&++ƌOf<~ÇR)"++RD2311f?u[ !5V>nn/q(+((LL{1McG'OhH`-} Bȴi5O3/zk u{^X|?ўY9h-}}A7n!>99HwdF~}M]嫛ٳ E|qK11){2eQKܿ"!d̘Gk8U ?~=m B .PUAoqA5?7q^0tիO͛g̟?#{ٚ5 !V. 肿~Fcr77/ZjD*0ztVB:vtYs=򩏰\4B}=X^XXPXIt6tqUEڵ nn5h`$@aaɽ{|>[ѴejiivT_F{ DE%ݹB I~ aaϞ.((޽>ϟ޽XoqqtP+´FE%EGa CI]]\]33 !&&-[zfg\$'`̘VVf99aa))YE<qvܹؔBBuFNoy!wo-S$=L,..2wvmӦ !$>>-==7++.ijji!cG&8OJx <33ԴA˖;lAXX<]];KvڲE O<ɶIcį_'~SPTTjnnҬ/ѩod i{0uwww<=Z*%?ݗ|>qc][6`^-+ c,\E{If=u{ֲS'ߦMJxeΡ23KM644hСK2stSRRAx\\jeϯSxdo0תt~؋1t05"ܫWuZUw 8Om/V>zUbEEcϞmd,|%Hv"T߿ߙKM=ò$mBȚ/IM=wQPǎ-:vx{l?ʳڰ?K66n嚜,YYyc ҭgBH.7nlrm4m١û_}L$ihhp"xqϯ' S?*- }KzG/9NeHnu Z썈CBȿK O8*ѣҗùs?c_5Xh!&5xͯ\e!nO{t7mPbِg1 Z-}[N&[={Ym׮K|4$,[V2b)^'}*"Xl%~s豟wj"cP]Qe!BuCR"tXwl>Kos/s##qqTYE=~|qCC?.)Rc"n)S7YӫWO 'eYVvU{ '2uSL1goTf~:ǟmSg(&tA+ޜ~vv:N77֭"}?)xdoHjF}BssPmk~E8CKǟÆug Gwӭۻ]mccqk;ujf_:-DM 7o~R-̦E{Z{ȑ+.BHLL 1cU|_3q:xY%{7tf?V(;gddb?$89tT$s~Ԩv)},k嵗3f̚2D"1!β}} `"pmN1.HV8@!Slz:fߧO6m ;7(])m|~^xӦ"@{{h+*bq |ꔔ,B@Hr׮#WH`Y#G>IcǮc$!d7nKK$XljڠE >}ڷkMw_~JbW'< z͚X]%\Yy@M/C6mh,_Ύѓ>s]ɓW{^ +W6?z+,ТE_B**ҁ ˛/_䗜tvz/y?; !ǟsgGX!{s?.632rnjpƶ[70&m3Kζqqݻf)ѣyv FK/VPPleeGv=33߽7nl{(\?Oϟ?:=lHccCBHeUz=~ƶH-[fDG466׳/_B~pK'Q(7D&M\>F' ްa*}Ν̕ HN>v5)d&?N5kD\L?L% Z]Qā%K\Ͽt?@-R|/e%HkSaú3eYC%%z ֭))G|[}.caԇo9>Dr_ذaC?fNɗpѢ/JJ>?`@~zd!!-[fdg/Y2>UMH8|L gevƍmϞ{d7?|<Rۺk@"{~۷Mդ,^h#P_=\ /^80<=_AR6H$YY?urxx<}\cWzo4uww<\\Wp _"!D _z0^)--c9oG\9ի<~}fL Ct-J0CCAϞm J!ζtT'}vt eB=1jiߨQa`)Lfjp rɄ99!!OZѣLa"#7*7Դux>߯$&fVL$XYYY1lU gݻUܹ;6ѺuGBFaQ%cA۳<: cx4ȴ Ȅm<<˘E5=z;w#;wi^S앏B98}Kvmitz jO7Ǚ;"MMH3&KD6Ҹqi9wgKqBBz6^oo0,5"g+eT)}?/KWΝ'NBk>e-[NBBBByAo>߫W[Zl ̼_~_zm|TsX.H;о,z7~_BlAOFrƶɓ7ѡznǼBV,Ϟ_~@D=zb|c:Ka5kԳ Yi{rmy˗>}+0.ϯ1|AAQ֥Kwd3 <C\~ZY) 8m):XjY#g Z@/7谐ѣסw9t϶m3a?!8x}@-[No`' \d2eڵk!500:~|eI62!߿ r.Go'S-![n ӗY-nkk9,߰?|L?_v@uw7gbrϰWwNnnBa1%%e4!:A>nz_ҥK:~ BȆ GiLnaaڡCҊ\&'Ŵi?20LL++EBa%M())Zn.Y]>-MHt)'hǤ4jdmmYn<ˣ{ #XZсC4s=2?9rUz/̽Qxy*9zg$bhą14yN"+"n}Vu˖SJzx^k\d>K,jz>u?~eFFʕt])Kzx8>QyU"ܽreQQGXfp`& E̓#d˾ӪʪoEiehhp%:X@=D*7O~W@-bcV:_J۟h ߿!C:6{ѣWIUa@{{n=dZ]{yj |D$(7e#0?'ml,NQ#G>xnzZDz~89_fW>A:8'AHa&Ė[@fm}\ϘJX|%0r󿕕5Rx:4c=uذ4oB0 ~ѭ[k&)B3Tee}vسgH$%tsҰܻqc3%44{?x_B:u=uj!L&)bIBaĉ0a1y˗755*| /yӻw&$ӄ ӯ_OAR7meHgli֬ѝ;/ YX\\F3d̽ ?<棏 i#\?ё̄'Oȼ*V2TԴU[Q3c̉MR骺7|TLLJRR}^R;vر!g+˅qq11)wb4kֈN9VxsB>)xYL"dJBS5i߳g[ˠ vvyܳg[&)[Ϟm_w۶S+VXx3MQ|R,{Iih枣 ܓ)6=-M"Ө ?p?O{Nj&de9r{4ӄs,[w8(daccԞ9qFP-6P= $&/ZϪΌ[FY6kֈ)v̘͛mp411ʕ;ʌP!f'zTPP,H~)'^|ՠ[^%UNWXX2iƨc&Ljkk9hD"ewƿ{^ uK0"-o? S\x=]^.444vf?Fti4vÇ)3g~INxH$.))6G/MKܶӷ2Z_RR?\xMTY]D%m$mj~E8io~ѫ j8W) Ct3efM2h_mfyKll,rs ˅ZM4+jA̼mxY3)~ڛ}y0,,Kl9sx7U{DD$BeeLVuƍn/!!=?OWHlԵ1il̘ݥa Ǽs\M&7O_!C,d^5 1Y$uo#1oTW+xYjbpz^#ӻ)B F#NN6 ~AvA/+rqÆY ?+壸z˥'N/)y >՘'=AzBƓ( DLϳ1] ^l=޾>2ߌ)sJ$E*s%!Y&=fݺ)Vz7^1G-\ũS&XG;zj;uGD''GvM?dH˗7I ;v Q㏻=zǧu7`@~IwuyP ߿w*f[9s>us&o/[.S|\~}ܢZ*ѣ gTGGUZX,.**+@FZ5$++ζ2:{{^JMnn;vٱC!+W~5q%NYUl᮱ck՘̞=RǼ6Z =<y hm%͜9g&hΩg$uo#IS R+riڴ˛ѩFF m~S~ĜI[j|Vg϶8Џ䳳 hL޺uExd7Urʗ[@3snƦ#ʘ##7Od[_z(so]گ_BH~~H3e7uzѣǻc0cƬ=v!dȞ{o:M1f:]L쑑bL/&L@]M1!dٲ&tݷSA]{4%43.p*:y电PQt_'@qrIK{;^NSН5k&/[6NS^<Ȥ >Qoo7+_ G0[ =D4_}ڴwG6?<)o.޳JHM͎O%NN6nn櫨FF&YYvC}OKNtww r332r J˷Y∈Ĭ|SSf۵DXܺuIh[>׸ CO#NM[$YBayyE͚5rZ|dgD";//ZMx]uPXl+sKʏJ2oC륥4ƼysN3\(XĤf;V'9==766E$;9x{I*9c6LgXElIIYw{- \1UEu, _J*--ruUR˖:;o}xKK?峼jcG߆ h̙?γ6_Pm0oX8;vޚ-2۷2A[xÆuoԴA捘C}ѣ4)bɥ|֤V+ò{i_!lvU&…zbB-e%4lаrXff :vQǚUo޶YLzWݙ5,MNQ{{+YlcbbOWav~gV4ʗTrTaI%^k]O!ֱ4r0E壈ٳWeEEkNqpqJ"Q,7n6fZBHddb>'m{)B=3y~vvVtwF~>5Q*W=]]̜)J;w^~y^^22&l}tUayǎ>wXxݻ/ uܴi:w(_~??x]4?j׮_EXN7oIQ0/f8,]\ؠ oxF [[mzyx8%$DbB6^۷Ϫ_zx88|6nֿG% cǖ޽PBHnnaWУ,j{iނ;OdҤ֯Z+2zk7Mtq9m-,L#"V:Dcr''CنjԴGvvq]"y9P!z2/z2OZZ<ܚKΜ-W]wByDa߼_bbFIIaӦnwOPݔw  mX>C{BBHIXOdտ (mX0w(ad;@mll 9Z 8PrP#av ,x S'q k^nBXGP%5pā.AlԽ5H49AXr< zmX(8 zmXp@`d; bBpa9psm@ 8]&l݃-L)Pp@]`v&tPp`divCpZ a9ކ3A vMrq\s&G ,a9)L\&lBX@F ,x93@AXP5 a9 j@!B%*{x<czsPJBpuN0a;rP+T9(a9 8!,P/a9@}P% @!,@39rpa9ad;@X]trCph: a96:a9:a9vm@!8^tsm@ 8.t&lt&l>G&~@pM{x<|)#Yz8a9~Ap)s@X0a;!,w@[P@pP@]xիEEEM4=zQ_~EPr2dȃ[nmnnrٓ'O:u+,{{{BHAAArr̓TQ.:w|۷o߽{7::CgΜ9|+6mڠA蟥˗/o޼yFFzJ ("P2hР1c9rDDoذ3%%E$wj-"x7)-`9@DE L:ٳϟ?;vݻkjO ,eh08?u!o߾%--mƌÇO߿߹s7oK IDAT CXʫѣG[n?~9s˗/zʕ N6MutyK.&l㏍O#FMMMT_߿/~Z"Jغuk>}U0qۈrpm={hs>bĈW^n֭[ 2/^ Bϟǧ>}:33sȐ!ҋ͘1c޼yEEE֭{1cWlٲt> """44M6SL}J֬YcggٳuB -[QZZZTTt̙#GB:tO4hPkܸ[oM|p7~GOJ$| v B5:I;4i"LCG:w,Vp,舰0tRG<|p=!ʪaÆ[ V^ݮ]'N@e˖gΜ޴itX޿ŋK.}:gggO:cǎ֭[nݺVד\ے+a8LiiiyyycDEEIɼLJ"\O_|, !@=JW|+fb RVXA ~t͛K$3gFDD(~|pPPPQQQ].Czenn~ɟ~J/}ƍ7h +'̒l,<8q>аSNC 1cWt9zfaar~˖-?7o3uT%Ǐ,<|pڴiAv9rߒ%KhuBBBppݻt=z_~С)))7oOuڵk_~܁o@X]655t/^xΝGYfٲeխ_?iҤyuذa;-Z0i9pQ@ :tP߾} 5kց $IWp+rҶm۶mB{~ߟUx0K1eaa1zѣGB֯_o}u"ao׮]ӧ͟?̙/_,--򒙮xW222]\\d0`/W\e14i㘘4www"t]VӧO>}|4:B&ٹuť(x0K|F!l)R*5u3;uԣG*cro=crG=:t xݻw1y](܇r1j(kkC6nX"\rʕ+#{[jeiio>SSSssc*'̒liӦM4M6NNN V"K19j!,;w03U"} t^og#,OHH-$[5lPb鹩لSScw|ty0"">nժ@%8].aEOA6]U޽/Oɓ=*踸ǩgm !eeyyE`RJ!Ęyza97n!>99HaӥˌB޽O2T ɫE08V#,=OV !;h,:z͚f zE,gdo\PP\RRN1112S:1tp.~UܸoJJv.z-+L/uДB? + !^^66z{7ׯC۶^G1{ꓒ}ؓ2""23򊌍<=Y<}J 'O^ǾL|+V>zUbEEcϞmC߲8];oX$11o͚5xcaa:`@'OM~&\HLHHE0u73k0x{%ccr˗϶m 0^$4ibkkR#ݚ7^3觔lwׯz{i<ܿ"!d̘Gk0EKrX1ҳg_Nls/j𲹹 !dР鹄{?qƵkO !Gׯҥs3? ޢg o#2O[7eսs">F_c !AA%99yڵgAOcuƶɓ78?0p^fߝ>}ƍ=~"߿>G]{xÄnZݽtRS88XJJ!ٵÆu/%&k7E"4,q !̎ 33YZ$p֊򜜂>XC45m?c6ȥbqܻ:i&USݽrqFƆ 썍"#32rJ6thZ:vژ1kcw[[Ǐ# gY(7o] @)**m ^ O00aѣ ^xӦA>ƆIIBw&P̼RS 6tҥL_H~~ݻ/3|~.]45}7DT~8kOkHJJ<K995ss/Dׯ_N)(**577iϗ%DE%EGaVGgSvusug uAAemS)99GGFܹB$w޺YFKŧdxٮs̘ꢢĬY#y !BaQQI..vݺ0+=ݗ66Y[˯}+ˀeڟbubGťVVζm4qt!*ꋨDv"ܬՓ gJ$7ޤtI''1cܸ֭%GO1]x@?cdafpz&%cG#֭aa?++oٓaذɈߙRHnǟضm&}6.4䊽}i t .mϘ6Sf ~xh~022YY?0U߯`.AciB?L[!]11퍍 ss/նlI9ujDrS d.m<)aJ_Ju_nt Kc["s~A2Q@ IG>ͬDqxƍ]?\MOut][9N7nl АO8lԩ0`ph;֯Y,$d _Hn޹Bt{W ڸ 9ߡC3 tXXD"y 鰐bhh0}Mh&XرcNnvŋ?HԩU24ҥ׶w̰ѣJ$7K377پ}}/ѭ[* Yjڴ|/RU@ſ<$mwaM'1` R뮈VQK-Z[JV-[ZZnxBU +BѪTADY$K Bg<뜜gޙ3ajb˿.^^GtnܸO˟}6ٹ;!dġ>{6^yyyV:u3##W"UtVBS%[}rGHL|DM,,:VVVGGߞ=գY޺u<ќ9cCq/ٳ>}u1Z 0S=zkwkjdǏ__h{))ل Γ'#wqqqq㏧h4UUUͨQˠp8ffƥre)~ѷ^e:OUYY0[Ӧlff8x0qɒ?vܩLT*lD\nhh`k+,dg'MZIjW\Ҟ{z~"H !B!:99r޳/_GFnRȑ˪U*AAgxފa*;wS \%7m#p~G>}9v쪘{=e>=wnp۷7Je={"=?~3{@ZcՄw]r65W3a52X`kFF.!D$2wr^\,~%Hjݷ-PQ8E-݃-d} bԯ/iJa5)NzMlITp ?2c_aa8 J[򄐅 '‘# !MjLyVV^P3Ŕj%4?|VyyX|[RR* ֬yO"PVvu5_j,.nW?OZyt-ܹbro99'sQVIXLLH|99{"TTTUBѣ nI+W$\FDHI9D{Ξp!QUU5+V9:,]W'?>up]maᙻw]]FQz`R0ӟ2e'K544s'KcmOEڸ4RM,`EeegѣH.l^_ը[꽏̙T?!VIt))C|Av+BL^q8^lrw4,׼MV_+V(j)Zݳ'rŊ]41[Ms_ 9rs8av{L3ZbFzX>gΘBHj1cVNy^FhhTKi`8qhxUBHHI7t:vz\¦(+HOquy3y3Ɩ狿갳gzS*}}@.++ԩ]N?zo'K͹04? IDAT谊(da 'DB_ǖ:^K_7kۮDHb"lBl ;3PpỴTtQ'p8cE*./.29 >D,.}`jڱBw?C633.+Bkvx՗ BC?t鶵@`ZS#k`W~ܸA )TC}իgS`z<Mt!O> Kl ۲%55HzjKrubx}-ѣgse2نյ~㔔쬬<:h\ڙ:u}2Q̨?IB6uVP3fcx23rr h9"b#LtHMp^xr噼uu+uB\`_kӼM )Oeno/p8-m\6E8h?фbI|Ȟ>}]-Pˍн­>!7~hk+429;w߱cي3OvМcGG먨l /氟C]#"6 ! j/˾&&Ϝ4t//]c XB Ͳ5ZHʯZe"߽Q=/=.Ʀ[R,**ҲΝfz Ӧׯߛ1c=vf|>W~Ǐs3L{{QyV6qڋnN[zoT-ԙ#HJ\o¹M;v-""DbdA믏iȑ˞Ki'T▔JyhP(O_f&SUXxL7YKrၴ?0-\S'}.P[70ĉ #._3fJ];gXQQ%FyFZ~"]1kbґ3dQQ[dڳfm }4iϞt)_9aÖ?k| Ȝ 58 "je\Lٺ5E\.W 0H4451q7!$##ojZL~4{5ݸq .ٱc-[Zٯ y3Uj)UU4=-<ٿ\o8 젗3nP7xyy4AZhۻ h!(.{`:cooedTz찰@'?.N.k6j2M}:.477ڵ3!d۷/)552FyCV Mr}B~RҞFs6+iD$/\8_D dBQ l>w/wqLn]'6xBQXXZS# GXh"ݦ噼#߈9b"ر6mZhDʕm,lao+%)j1l; k KJ%7nPTVj:3zse} =iLM; 4H6e1gؽٯrs \NݺuV⬬<\!0V*NK{P({6{ZYZs̸[7)ӵ޽{Wfx8;B "HOL^X+YZvqtV[ֿ]XX盼EKrx[/9WMurs Iq{'t6F-o)!>> K()(Jt@yƪ%""b4ٹ{ZV=;^}6Uvvڿ,$V 26n߯S odG۷t M=-< !D 0z鸱Eg Z6)ͫ Mm޾)EwoR lFh|/gPTF.$/$6>e|Tz KlosUڠg$I ۬/ 6Hb@_f6&h3 r6 ,h3 r6@D/Rס@+A_[6-h3 r6 ,h3 r6k~{ OXHq護Z RS8Jtt8+JpOueIENDB`proj-9.6.0/data/sql/alias_name.sql000664 001754 001755 00002770351 14764566077 016762 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5104','Huang Hai 1956','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6125','Samboja P2 exc T9','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6160','Quini-Huao','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6174','Sierra Leone Peninsular 1924','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6211','Genuk','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6218','Bogota','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6222','South Africa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6227','Levant','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83(1986)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6272','GD49','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6308','Rikets koordinatsystem 1938','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5100','MSL','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5101','ODN','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5102','NGVD29','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5103','NAVD88','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5104','Yellow Sea','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5105','Baltic','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5106','Caspian','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5107','NGF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5109','NAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5111','AHD','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5112','AHD (Tasmania)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5114','CVD28','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5115','Piraeus86','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5116','N60','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5117','RH70','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5118','NGF - Lallemand','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5119','NGF-IGN69','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5120','NGF-IGN78','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5122','JSLD69','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5123','PHD93','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5127','LN02','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5128','LHN95','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5129','EVRF2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6121','GGRS87','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6122','ATS77','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6123','KKJ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6124','RT90','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6126','LKS94 (ETRS89)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6130','Moznet','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6132','FD58','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6133','EST92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6134','PSD93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6140','NAD83(CSRS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6151','CHTRS95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83(HARN)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6154','ED50(ED77)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6156','S-JTSK','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6159','ELD79','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6163','YNGN96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6170','SIRGAS 1995','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6171','RGF93 v1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6172','POSGAR','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6202','AGD66','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6203','AGD84','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6204','Ain el Abd','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6215','BD50','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6230','ED50','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6231','ED87','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6237','HD72','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6238','ID74','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6242','JAD69','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6246','KOC','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6248','PSAD56','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6258','ETRS89','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6267','NAD27','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6272','NZGD49','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6275','NTF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6278','OSGB70','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6279','OS(SN)80','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6280','Padang','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6283','GDA94','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6291','SAD69','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6297','Tananarive','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6303','TC(1948)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6308','RT38','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6312','MGI','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6313','BD72','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6314','DHDN','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6318','NGN','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6319','KUDAMS','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6322','WGS 72','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6324','WGS 72BE','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6326','WGS 84','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6608','NAD27(76)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6609','CGQ77','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6901','ATF (Paris)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6902','NDG (Paris)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1161','DHHN12','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1161','Deutsches Haupthöhennetz 1912','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1162','LAS-2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1159','GSK-2011','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1159','GRS-2011','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','LUREF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6180','EST97','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6179','42/58','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6178','42/83','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1031','HR1901','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6818','Systém Jednotné trigonometrické sítě katastrální (Ferro)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6176','AAD98','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6167','NZGD2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5119','Nivellement general de la France','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5119','NGF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5120','IGN78','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5118','NGF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5120','Nivellement general de la France','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5118','Nivellement general de la France','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6143','Côte d''Ivoire (Ivory Coast)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6142','Côte d''Ivoire (Ivory Coast)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6189','SIRGAS-REGVEN','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6189','REGVEN','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6171','Réseau Géodésique Français 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6172','Posiciones Geodésicas Argentinas','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6190','POSGAR 98','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6190','Posiciones Geodésicas Argentinas 1998','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Observatario Flores','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Azores Occidental 1939','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6183','Graciosa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6183','Azores Central 1948','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6184','Sao Bras','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6184','Azores Oriental 1940','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6156','Systém Jednotné trigonometrické sítě katastrální','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6123','Kartastokoordinaattijärjestelmä (1966)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5133','AIOC95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6199','New Egyptian','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6229','Old Egyptian','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6612','JGD2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5137','Huang Hai 1985','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5135','HKPD','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6611','HK80','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5135','Ordnance Datum','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5136','Admiralty Chart Datum','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1164','ODN (Offshore)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6820','Segara (Jakarta)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','Segara','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','Samboja','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','P2 Exc','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','P2 Exc-T9','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6614','QND95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6620','12th Parallel traverse','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5131','Belfast','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5101','Newlyn','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6637','Perroud 1950','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6634','MHNC72','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6627','RGR92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6624','RGFG95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6623','CSG67','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6648','ITRF89','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6649','ITRF90','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6650','ITRF91','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6651','ITRF92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6652','ITRF93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6653','ITRF94','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6654','ITRF96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6655','ITRF97','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6656','ITRF2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6623','Guyane Francaise','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5151','NGNC69','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6638','St. Pierre et Miquelon 1950','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6647','ITRF88','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6645','RGNC91','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6640','RRAF91','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6659','ISN93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6300','TM75','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6300','1975 Mapping Adjustment','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5153','NGG1977','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5154','Martinique 1987','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5156','Reunion 1989','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5156','IGN89','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5155','IGN 1988','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5154','IGN87','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6661','LKS-92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6615','Madeira SE Base','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6665','Graciosa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6665','Azores Central 1995','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6665','Base SW','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6183','Base SW','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6664','Sao Bras','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6664','Azores Oriental 1995','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6615','Base SE','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6663','Base SE','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6663','Madeira SE Base 1995','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6615','Porto Santo','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6667','IKBD-92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6668','ED79','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6131','Indian (DMA Reduced)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1192','NAD83(CSRS)v1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1192','NAD83(CSRS96)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1195','NAD83(CSRS)v4','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6265','Rome 1940','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6806','Rome 1940 (Rome)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6673','CI1979','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5172','NG-L','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5174','NN1954','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5173','TNVCN99','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6173','ETRS89','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6281','Old Israeli Datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6281','OID','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1146','Abu Dhabi Vertical Datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6674','SIRGAS 2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6678','Lao 1997','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5182','DHHN85','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5183','SNN76','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5172','NG95','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5176','GHA','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5177','NVN99','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5178','RNGAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5180','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5181','DHHN92','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5185','EOMA 1980','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5186','PWD','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5187','WD','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5188','CD','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83 (High Precision Geodetic Network)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83(HPGN)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6625','Fort Desaix','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6622','Sainte Anne','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6626','Piton des Neiges','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5189','NGC','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5192','IGN 1955','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5191','IGN 1950','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5114','Canadian Vertical Datum of 1928','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5114','CGVD28','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6683','PRS92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6683','Modified Luzon Datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6686','MAGNA-SIRGAS','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1133','NAD83(CORS96)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5105','Baltic Sea','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6687','RGPF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6688','MHEFO 55','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6628','IGN 1952','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6692','MOP 1983','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6628','Tahiti','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6629','Tahaa','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5195','NGPF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6190','POSGAR','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6701','IGCB 1955','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6701','Bas Congo 1955','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Observatorio Meteorologico 1939','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Observatorio 1966','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6616','Selvagem Grande 1938','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6616','Marco Astro','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6703','Mhast 1951','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6705','Mhast','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6704','Mhast','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6259','Mhast','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6699','Le Pouce (Mauritius 94)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6699','Le Pouce (Mauritius PN 94)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6725','Johnston Atoll 1961','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6737','Korea 2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6740','PZ-90','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6739','HK63(67)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6738','HK63','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6690','IGN79 Tahiti','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6639','Uvea SHOM 1978','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6706','S-650 TL','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6741','FD54','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6742','GDM2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6745','RD/83','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6746','PD/83','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6747','GR96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6720','FGD 1986','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6720','Fiji 1986','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6752','Viti Levu 1916','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6748','Vanua Levu 1917','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6749','RGNC91-93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6749','RGNC','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6298','Timbalai 1968','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6298','Borneo Triangulation of 1968','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6298','BT68','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6245','Malaysia Revised Triangulation 1968','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6245','MRT68','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6714','Bellevue (IGN)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6730','Santo (DOS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6753','FD54a','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6754','LGD2006','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6755','DGN95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6755','Indonesian Geodetic Datum 1995','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6755','IGD95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6697','IGC 1962 6th Parallel South','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6756','VN-2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6896','ITRF2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6647','IERS Terrestrial Reference Frame 1988','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6648','IERS Terrestrial Reference Frame 1989','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6649','IERS Terrestrial Reference Frame 1990','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6650','IERS Terrestrial Reference Frame 1991','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6651','IERS Terrestrial Reference Frame 1992','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6652','IERS Terrestrial Reference Frame 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6653','IERS Terrestrial Reference Frame 1994','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5204','IGLD 1955','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5205','IGLD 1985','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1271','MML07-IRF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5206','DVR90(2000)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1140','SHD','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6758','JAD2001','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6760','WGS 66','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1034','SREF98','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5207','HVRS71','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6762','BDA2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5208','RH2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5209','RH00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6764','RSRGD2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5157','Auckland','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5158','Bluff','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5169','Chatham Island 1959','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5159','Dunedin','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5160','Gisborne','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5161','Lyttelton','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5162','Moturiki','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5163','Napier','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5164','Nelson','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5165','One Tree Point','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5170','Stewart Island','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5167','Taranaki','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5166','Tararu','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5168','Wellington','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6765','D96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6765','Slovenia 1996','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1024','HD1909','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1025','TWD67','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1026','TWD97','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6236','Hu Tzu Shan','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6316','Dealul Piscului 1933','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1107','Cais da Figueirinha - Angra do Heroísmo','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5202','Bora Bora 2001','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5124','Fahud HD','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5132','DNN','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5138','ODN Orkney','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6743','Karbala 1979 (Polservice)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5149','British Vertical Datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1029','IGRS','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6191','ALB86','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6127','Tete 1960','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6201','Blue Nile 1958','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1112','CGRS93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1113','RGTAAF07','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1113','Reseau Geodesique des TAAF 2007','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1147','ONGD14','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1031','D48','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6805','MGI (Ferro)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1033','RGRDC 2005','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5207','HVRD71','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6728','PN84','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1027','EGM2008','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1152','WGS 84 (G730)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1153','WGS 84 (G873)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5203','EGM84','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1154','WGS 84 (G1150)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5171','EGM96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1155','WGS 84 (G1674)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1273','AbInvA96_2020-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6903','Madrid','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1156','WGS 84 (G1762)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1157','PZ-90.02','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1158','PZ-90.11','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1275','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1276','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1277','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1160','Kyrg-06','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1286','PN68','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1278','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1279','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1165','ITRF2014','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6818','Systém Jednotnej trigonometrickej siete katastrálnej (Ferro)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1167','BGS2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1166','WGS 84 (Transit)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6710','ASTRO DOS 71/4','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1168','GDA2020','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1169','NZVD2016','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6710','St. Helena 1971','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1170','DHHN2016','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1170','Deutsches Haupthöhennetz 2016','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1171','POM96','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1172','POM08','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1174','SHGD2015','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1173','WGS 84 Tritan St. Helena','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1177','SHVD2015','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1180','ETRF91','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1178','ETRF89','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1280','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1179','ETRF90','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1181','ETRF92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1182','ETRF93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1183','ETRF94','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1184','ETRF96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1185','ETRF97','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1186','ETRF2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1176','MSL Tritan','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1175','MSL 1971','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1176','St. Helena Tritan 2011','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1281','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1193','NAD83(CSRS)v2','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1187','ISN2016','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1190','ISH2004','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1190','Landshæðarkerfi Islands 2004','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6156','Systém Jednotnej trigonometrickej siete katastrálnej','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1196','NAD83(CSRS)v5','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1194','NAD83(CSRS)v3','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1197','NAD83(CSRS)v6','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1198','NAD83(CSRS)v7','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1193','NAD83(CSRS98)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1199','GVR2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1200','GVR2016','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','Guam Geodetic Network 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1201','S-JTSK [JTSK03]','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1201','Systém Jednotnej trigonometrickej siete katastrálnej [JTSK03]','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5111','AHD71','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1208','Macao 2008','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1204','ETRF2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1206','ETRF2014','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5111','AHD-TAS83','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1211','NAD83(FBN)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1212','NAD83(HARN Corrected)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1213','N43','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1214','STRS00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1214','SRB_ETRS89','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5177','National Vertical Network 1999','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1215','SVS2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1036','RGM04','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1038','RGSPM06','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1216','SRB_VRS12','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6220','Camacupa','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1219','MVGC','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1218','MGD-2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1218','MTRF-2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1220','Rede Permanentes de Estaciones GNSS de Angola','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1220','RSAO13','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1220','REPANGOL','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1205','Zero Depth Point (ZDP)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1223','RGWF96','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1224','TWVD 2001','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1225','CR14','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1226','DACR52','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1230','SIRGAS-CON DGF02P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1227','SIRGAS-CON DGF00P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1227','SIRGAS Multi-Year Solution 2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1230','SIRGAS Multi-Year Solution 2002','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1239','SIRGAS-CON SIR13P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1239','SIRGAS Multi-Year Solution 2013','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1228','SIRGAS-CON DGF01P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1228','SIRGAS Multi-Year Solution 2001','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1231','SIRGAS-CON DGF04P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1231','SIRGAS Multi-Year Solution 2004','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1229','SIRGAS-CON DGF01P02','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1229','SIRGAS Multi-Year Solution 2001 extended','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1232','SIRGAS-CON DGF05P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1232','SIRGAS Multi-Year Solution 2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1240','SIRGAS-CON SIR14P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1240','SIRGAS Multi-Year Solution 2014','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1233','SIRGAS-CON DGF06P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1233','SIRGAS Multi-Year Solution 2006','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1234','SIRGAS-CON DGF07P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1234','SIRGAS Multi-Year Solution 2007','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1241','SIRGAS-CON SIR15P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1241','SIRGAS Multi-Year Solution 2015','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1235','SIRGAS-CON DGF08P01','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1039','NZVD2009','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1235','SIRGAS Multi-Year Solution 2008','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1236','SIRGAS-CON SIR09P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1236','SIRGAS Multi-Year Solution 2009','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1242','SIRGAS-CON SIR17P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1242','SIRGAS Multi-Year Solution 2017','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1237','SIRGAS-CON SIR10P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1237','SIRGAS Multi-Year Solution 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1238','SIRGAS-CON SIR11P01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1238','SIRGAS Multi-Year Solution 2011','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1035','REGCAN95','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1282','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6761','HTRS96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1047','RRAF91','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1251','KOSOVAREF12','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83(Original)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1221','NAD83(MARP00)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1249','NAD83(PACP00)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1064','SIRGAS-Chile 2002','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1251','KOSOVAREF01','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1251','KOSOVAREF01 (2012)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1252','SIRGAS-Chile 2013','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1256','CGVD2013a(2010)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1258','MMN','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1259','MMS','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1260','SRVN16','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6160','Quiñi-Huao','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1261','EVRF2000 Austria','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1262','SA LLD','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1264','HS2-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1263','ONGD17','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1269','KSA-VRF14','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1265','HS2-VRF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5207','Croatian Vertical Reference System 1971','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1255','NGNC08','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1268','KSA-GRF17','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1266','TPEN11-IRF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1283','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1284','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1285','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1243','SIRGAS-Chile 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1289','GBK19-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1291','ATRF2014','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1270','MSL NL','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1290','LAT NL','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1292','AVWS','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1080','Lowest Astronomic Tide','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1082','Highest Astronomic Tide','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1293','SRGI2013','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1293','Indonesian Geospatial Reference System 2013','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1293','Jaring Kontrol Geodesi (JKG)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1294','INAGeoid2020 v1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1042','Red Geodesica Nacional 1992','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1046','Morro do Papagaio','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1046','Island of Principe datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1044','Fortaleza','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1044','Island of Sao Tome datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1041','PTRA08','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6301','Tokyo 1918','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1048','Tokyo 1898','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1054','SLVD','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1053','SLD99','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1057','TUREF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1058','DRUKREF 03','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1056','GDBD2009','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6674','Sistema de Referencia Geocentrico para America del Sur 2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6818','S-JTSK (Ferro)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1059','FVR09','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1052','S-JTSK/05','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1052','Systém Jednotné trigonometrické sítě katastrální/05','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1055','S-JTSK/05 (Ferro)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1055','Systém Jednotné trigonometrické sítě katastrální/05 (Ferro)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1060','ISN2004','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1061','ITRF2008','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83 (High Accuracy Regional Network)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1069','Red Geodésica Básica Nacional de El Salvador','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1067','Sistema Geodésico Nacional','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6309','ROU-USAMS','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1065','CR05','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1063','MARGEN','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1066','MACARIO SOLIS','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1073','RGAF09','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1062','POSGAR 2007','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1062','POSGAR','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1062','Posiciones Geodésicas Argentinas 2007','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1072','Balboa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1072','Panamá-Colón 1911','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6225','Corrego Alegre','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1076','PNG94','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6674','SIRGAS2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5182','Deutsches Haupthöhennetz 1985','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5181','Deutsches Haupthöhennetz 1992','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1078','FEH10','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1079','FCSVR10','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1081','DB_REF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5113','Sea Level','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1084','HHWLT','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1082','HAT','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1085','ISLW','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1085','Indian Tidal Plane','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1083','LLWLT','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1080','LAT','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1090','MHHW','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1092','MHW','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1088','MHWS','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1088','Spring High Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1089','MLLW','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1086','MLLWS','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1091','MLW','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1087','MLWS','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1087','Spring Low Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1093','Low tide','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1094','High Tide','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1095','TGD2005','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1098','LCVD61','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1099','CBVD61','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1097','GCVD54','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6723','GCGD59','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6726','SIGD61','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6726','Little Cayman Geodetic Datum 1961','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1100','CIGD11','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1096','NN2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6723','Grand Cayman 1959','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5110','Oostende','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1116','NAD83(2011)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1117','NAD83(PA11)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1118','NAD83(MA11)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1042','Mexican Datum of 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1120','Red Geodesica Nacional 2008','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1119','NMVD03','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1122','GUVD63','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1126','GUVD04','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1125','ASVD02','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1121','Tutuila62','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1124','VIVD09','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1123','PRVD02','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1128','JGD2011','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1131','JGD2011 (vertical)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1130','JGD2000 (vertical)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1129','JSLD72','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1132','RDN2008','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1288','BI','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6258','European Terrestrial Reference System 1989','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6326','World Geodetic System 1984','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6670','IGM95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1295','LTF2004','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5215','EVRF2007','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1274','EVRF2019','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1287','EVRF2019mean','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1298','EH2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1299','LAS07','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1300','BGS2005','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1302','Pago Pago 2020','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1303','NVD 1992','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1301','CD Norway','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1199','Greenland Vertical Reference 2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1304','REDGEOMIN','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1297','EVRF2007-PL','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1305','ETRF2000-PL','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6277','OSGB36','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6277','OSGB 1936','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1051','Genoa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1308','EOS21-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6282','Pointe Noire','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6215','Belge 1950','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6313','Belge 1972','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6809','BD50 (Brussels)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1156','World Geodetic System 1984 (G1762'')','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1310','ECML14_NB-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6151','Swiss Terrestrial Reference Frame 1995 (CHTRF95)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1311','EWR2-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6171','Reseau Geodesique Francais 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1312','RGF93 v2','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1312','Réseau Géodésique Français 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1313','RGF93 v2b','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1313','Réseau Géodésique Français 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1309','WGS 84 (G2139)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1193','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1194','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1195','NAD83(CSRS) 2002','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1196','NAD83(CSRS) 2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1197','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1198','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1314','MRH21-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1315','MOLDOR11-IRF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5191','SHOM 1953','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','Luxembourg 1930','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','NTL','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','Nouvelle Triangulation du Luxembourg','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5172','Nivellement General du Luxembourg','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1316','GNTRANS2003','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1319','EBBWV14-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1317','HULLEE13-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1320','SCM22-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1321','FNL22-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1322','ITRF2020','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1323','SVD2006','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1127','CGVD2013(CGG2013)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1325','CGVD2013(CGG2013a) epoch 2002','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1325','CGVD2013a(2002)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1326','CGVD2013(CGG2013a) epoch 1997','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1326','CGVD2013a(1997)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1256','Canadian Geodetic Vertical Datum of 2013 (CGG2013a)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1256','CGVD2013(CGG2013a) epoch 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1324','MWC18-IRF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1328','INAGEOID2020 v2','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1327','SIRGAS-Chile 2021','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1253','SIRGAS-Chile 2016','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1329','MAGNA-SIRGAS 2018','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6694','POSGAR 94','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6694','POSGAR','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6694','Posiciones Geodésicas Argentinas 1994','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1331','CD UK & Ireland VORF08','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1330','MSL UK & Ireland VORF08','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1082','Approximate Highest Astronomical Tide','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1094','Approximate High Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1090','Approximate Mean Higher High Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1092','Approximate Mean High Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1088','Approximate Mean High Water Spring Tides','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1083','Approximate Lower Low Water Large Tide','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1093','Approximate Low Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1085','Approximate Indian Spring Low Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1084','Approximate Higher High Water Large Tide','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1089','Approximate Mean Lower Low Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1086','Approximate Mean Lower Low Water Spring Tides','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1091','Approximate Mean Low Water','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1087','Approximate Mean Low Water Spring Tides','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1080','Approximate Lowest Astronomical Tide','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5100','Approximate Mean Sea Level','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1336','CNH22-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1338','CWS13-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1340','GWPBS22-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1341','GWWAB22-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1342','GWWWA22-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1343','MALS09-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1345','SYC20-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1339','DIBA15-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1344','OxWo08-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1334','DoPw22-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1335','ShAb07-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1351','SMITB20-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1353','ETRS89/DREF91/2016','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1354','NGA 2022','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1355','RGSH2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6661','Latvia 1992','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1356','LKS-2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1357','RGNC15','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1346','S45B-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1347','GS-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1348','GSB-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1349','KK-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1350','Ostenfeld-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1332','S34J-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1337','S34S-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1360','NSIDC Authalic Sphere','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1362','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1363','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1364','REDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6737','KGD2002','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1049','Incheon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1049','KVD1964','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1101','Cais da Pontinha - Funchal','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1102','Cais da Vila - Porto Santo','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1361','ZH Portugal','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1361','Zero Hidrográfico Portugal','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1365','NAD83(CSRS)v8','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1365','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1366','COV23-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1367','BBT2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1367','Brenner basistunnel','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1367','Galleria di base del Brennero','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5206','Dansk Vertikal Reference 1990','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1371','DVR90 ensemble','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1368','DVR90(2002)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1369','DVR90(2013)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1370','DVR90(2023)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1378','GLLMSL(2022)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1372','DKMSL(2022)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1373','DKLAT(2022)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1375','DKLAT(2023)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1377','DKLAT','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1376','DKMSL','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1382','ETRF2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1383','WGS 84 (G2296)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1374','DKMSL(2023)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1386','WC05-IRF','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1385','ECML14-IRF','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1388','GLLAT(2023)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1387','GLMSL(2023)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1384','CGVD28(HTv2.0)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1081','DB_REF2003','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1081','DB_REF2016','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1390','BSCD2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1380','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1389','RGM23','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1389','Repère de référence Géodésique de Mayotte 2023','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1381','Saba','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1398','Bonaire','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1392','UZGD2024','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1394','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1395','Sint Eustatius','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1399','ITRF2020-u2023','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1402','LibRef21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21100','Genuk / NEIEZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2140','NAD83(CSRS98) / SCoPQ zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2141','NAD83(CSRS98) / SCoPQ zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2142','NAD83(CSRS98) / SCoPQ zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2143','NAD83(CSRS98) / SCoPQ zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2144','NAD83(CSRS98) / SCoPQ zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2145','NAD83(CSRS98) / SCoPQ zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2146','NAD83(CSRS98) / SCoPQ zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2147','NAD83(CSRS98) / SCoPQ zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2159','Sierra Leone 1924 / Peninsular Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2291','NAD83 / PEI Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3200','Final Datum 1958 / Iraq zone','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4132','Final Datum 1958 (Iran)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4140','NAD83(CSRS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4172','National Geodetic System [Argentina]','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4211','Genuk','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4218','Bogota','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4227','Levant','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4272','GD49','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4813','Genuk (Jakarta)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21100','Genuk (Jakarta) / NEIEZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21148','Genuk / UTM zone 48S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21150','Genuk / UTM zone 50S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22700','Levant / Levant Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22770','Levant / Syria Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22780','Levant / Levant Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25838','ETRF89 / UTM zone 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27258','GD49 / UTM zone 58','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27259','GD49 / UTM zone 59','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27260','GD49 / UTM zone 60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27291','GD49 / North Island Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27292','GD49 / South Island Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30791','Nord Sahara 1959 / Lambert Nord Voirol Unifie 1960','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30792','Nord Sahara 1959 / Lambert Sud Voirol Unifie 1960','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31170','Zanderij / Surinam Old','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31171','Zanderij / Surinam TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31300','Belge Lambert 72','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2000','Anguilla 1957 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2001','Antigua 1943 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2002','Dominica 1945 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2003','Grenada 1953 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2004','Montserrat 58 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2005','St Kitts 1955 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2006','St Lucia 1955 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2007','St Vincent 45 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2008','CGQ77 / SCoPQ zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2009','CGQ77 / SCoPQ zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2010','CGQ77 / SCoPQ zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2011','CGQ77 / SCoPQ zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2012','CGQ77 / SCoPQ zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2013','CGQ77 / SCoPQ zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2014','CGQ77 / SCoPQ zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2015','CGQ77 / SCoPQ zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2016','CGQ77 / SCoPQ zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2036','NAD83(CSRS) / NB Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2037','NAD83(CSRS) / UTM 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2038','NAD83(CSRS) / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2040','Locodjo 65 / UTM 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2041','Abidjan 87 / UTM 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2042','Locodjo 65 / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2043','Abidjan 87 / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2044','Hanoi 72 / Gauss zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2045','Hanoi 72 / Gauss zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2046','New S African CS zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2047','New S African CS zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2048','New S African CS zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2049','New S African CS zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2050','New S African CS zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2051','New S African CS zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2052','New S African CS zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2053','New S African CS zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2054','New S African CS zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2055','New S African CS zone 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2056','LV95','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2066','Mount Dillon / Tobago','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2067','Naparima 1955 / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2081','Chos Malal 1914 / Argentina zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2083','Hito XVIII 1963 / Argentina zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2084','Hito XVIII / UTM 19S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2089','Yemen NGN96 / UTM 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2090','Yemen NGN96 / UTM 39N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2091','S Yemen / Gauss zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2092','S Yemen / Gauss zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2097','Korean 1985 / Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2099','Qatar Plane CS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2136','Accra / Gold Coast Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2137','Accra / Ghana TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2157','IRENET95 / ITM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2200','ATS77 / NB Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2290','ATS77 / PEI Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2291','NAD83(CSRS) / PEI Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2294','ATS77 / MTM NS zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2295','ATS77 / MTM NS zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2393','KKJ / Finland zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2600','LKS94','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3561','Old Hawaiian / SP zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3562','Old Hawaiian / SP zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3563','Old Hawaiian / SP zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3564','Old Hawaiian / SP zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3565','Old Hawaiian / SP zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3991','Puerto Rico SPCS 27','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4134','PDO Survey Datum 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4215','Belge 1950','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4268','NAD Michigan','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4313','Belge 1972','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4609','CGQ77','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4809','Belge 1950 (Brussels)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5701','Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5702','National Geodetic Vertical Datum of 1929 height (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5703','North American Vertical Datum of 1988 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5709','Normaal Amsterdams Peil height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5712','Australian Height Datum (Tasmania) height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5713','Canadian Geodetic Vertical Datum of 1928 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5714','Mean Sea Level height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5715','Mean Sea Level depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5723','Japan Levelling Datum height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5724','PDO Height Datum 1993 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5728','Landesnivellement 1902 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5729','Landeshohennetz 1995 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7401','NTF / France II + Lalle','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7402','NTF / France II + IGN69','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7403','NTF / France III + IGN69','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7405','GB Nat Grid + ODN ht','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7407','NAD27 / TX_N + NGVD29 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20004','S-95 zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20005','S-95 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20006','S-95 zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20007','S-95 zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20008','S-95 zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20009','S-95 zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20010','S-95 zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20011','S-95 zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20012','S-95 zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20013','S-95 zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20014','S-95 zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20015','S-95 zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20016','S-95 zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20017','S-95 zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20018','S-95 zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20019','S-95 zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20020','S-95 zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20021','S-95 zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20022','S-95 zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20023','S-95 zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20024','S-95 zone 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20025','S-95 zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20026','S-95 zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20027','S-95 zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20028','S-95 zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20029','S-95 zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20030','S-95 zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20031','S-95 zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20032','S-95 zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20064','Pulkovo 1995 / Gauss 4N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20065','Pulkovo 1995 / Gauss 5N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20066','Pulkovo 1995 / Gauss 6N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20067','Pulkovo 1995 / Gauss 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20068','Pulkovo 1995 / Gauss 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20069','Pulkovo 1995 / Gauss 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20070','Pulkovo 1995 / Gauss 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20071','Pulkovo 1995 / Gauss 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20072','Pulkovo 1995 / Gauss 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20073','Pulkovo 1995 / Gauss 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20074','Pulkovo 1995 / Gauss 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20075','Pulkovo 1995 / Gauss 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20076','Pulkovo 1995 / Gauss 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20077','Pulkovo 1995 / Gauss 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20078','Pulkovo 1995 / Gauss 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20079','Pulkovo 1995 / Gauss 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20080','Pulkovo 1995 / Gauss 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20081','Pulkovo 1995 / Gauss 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20082','Pulkovo 1995 / Gauss 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20083','Pulkovo 1995 / Gauss 23N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20084','Pulkovo 1995 / Gauss 24N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20085','Pulkovo 1995 / Gauss 25N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20086','Pulkovo 1995 / Gauss 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20087','Pulkovo 1995 / Gauss 27N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20088','Pulkovo 1995 / Gauss 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20089','Pulkovo 1995 / Gauss 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20090','Pulkovo 1995 / Gauss 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20091','Pulkovo 1995 / Gauss 31N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20092','Pulkovo 1995 / Gauss 32N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20437','Ain el Abd / UTM 37N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20438','Ain el Abd / UTM 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20439','Ain el Abd / UTM 39N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20790','Lisbon / Portuguese Nat','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21100','Batavia / NEIEZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21291','Barbados 1938 / BWI Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21292','Barbados National Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21413','Beijing / GK zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21414','Beijing / GK zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21415','Beijing / GK zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21416','Beijing / GK zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21417','Beijing / GK zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21418','Beijing / GK zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21419','Beijing / GK zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21420','Beijing / GK zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21421','Beijing / GK zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21422','Beijing / GK zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21423','Beijing / GK zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21473','Beijing / Gauss 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21474','Beijing / Gauss 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21475','Beijing / Gauss 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21476','Beijing / Gauss 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21477','Beijing / Gauss 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21478','Beijing / Gauss 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21479','Beijing / Gauss 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21480','Beijing / Gauss 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21481','Beijing / Gauss 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21482','Beijing / Gauss 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21483','Beijing / Gauss 23N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21500','Belge Lambert 50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21780','LV03C','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21781','LV03','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21891','Bogota / Colombia 3W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21892','Bogota / Colombia Bogota','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21893','Bogota / Colombia 3E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21894','Bogota / Colombia 6E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22191','C Inchauspe / Argentina 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22192','C Inchauspe / Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22193','C Inchauspe / Argentina 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22194','C Inchauspe / Argentina 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22195','C Inchauspe / Argentina 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22196','C Inchauspe / Argentina 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22197','C Inchauspe / Argentina 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22275','South African CS zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22277','South African CS zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22279','South African CS zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22281','South African CS zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22283','South African CS zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22285','South African CS zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22287','South African CS zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22289','South African CS zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22291','South African CS zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22293','South African CS zone 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22300','Tunisia Mining Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22523','Corrego Alegre / UTM 23S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22524','Corrego Alegre / UTM 24S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22994','Egypt 1907 / Ext. Purple','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23946','Indian 1954 / UTM 46N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23947','Indian 1954 / UTM 47N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23948','Indian 1954 / UTM 48N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24047','Indian 1975 / UTM 47N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24048','Indian 1975 / UTM 48N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24100','Jamaica 1875 / Old Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24200','JAD69 / Jamaica Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24305','Kalianpur 37 / UTM 45N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24306','Kalianpur 37 / UTM 46N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24311','Kalianpur 62 / UTM 41N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24312','Kalianpur 62 / UTM 42N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24313','Kalianpur 62 / UTM 43N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24342','Kalianpur 75 / UTM 42N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24343','Kalianpur 75 / UTM 43N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24344','Kalianpur 75 / UTM 44N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24345','Kalianpur 75 / UTM 45N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24346','Kalianpur 75 / UTM 46N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24347','Kalianpur 75 / UTM 47N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24370','Kalianpur / India 0','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24371','Kalianpur / India I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24372','Kalianpur / India IIa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24373','Kalianpur / India IIIa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24374','Kalianpur / India IVa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24375','Kalianpur 37 / India IIb','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24376','Kalianpur 62 / India I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24377','Kalianpur 62 / India IIa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24378','Kalianpur 75 / India I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24379','Kalianpur 75 / India IIa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24380','Kalianpur 75 / India IIb','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24381','Kalianpur 75 / India IIIa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24382','Kalianpur / India IIb','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24383','Kalianpur 75 / India IVa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24892','PSAD56 / Peru central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25000','Leigon / Ghana Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25391','Luzon / Philippines I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25392','Luzon / Philippines II','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25393','Luzon / Philippines III','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25394','Luzon / Philippines IV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25395','Luzon / Philippines V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25700','Makassar / NEIEZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25932','Malongo 1987 / UTM 32S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26391','Minna / Nigeria West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26393','Minna / Nigeria East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26591','Monte Mario / Italy 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26592','Monte Mario / Italy 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26632','M''poraloko / UTM 32N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26692','M''poraloko / UTM 32S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26741','NAD27 / California I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26742','NAD27 / California II','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26743','NAD27 / California III','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26744','NAD27 / California IV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26745','NAD27 / California V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26746','NAD27 / California VI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26747','NAD27 / California VII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26786','NAD27 / Massachusetts','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26787','NAD27 / Massachusetts Is','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26792','NAD27 / Minnesota Cent.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26801','NAD27 / Michigan East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26802','NAD27 / Michigan Old Cen','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26803','NAD27 / Michigan West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26811','NAD27 / Michigan North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26812','NAD27 / Michigan Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26813','NAD27 / Michigan South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26941','NAD83 / California 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26942','NAD83 / California 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26943','NAD83 / California 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26944','NAD83 / California 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26945','NAD83 / California 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26946','NAD83 / California 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26986','NAD83 / Massachusetts','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26987','NAD83 / Massachusetts Is','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26992','NAD83 / Minnesota Cent.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27038','Nahrwan 1967 / UTM 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27039','Nahrwan 1967 / UTM 39N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27040','Nahrwan 1967 / UTM 40N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27120','Naparima 1972 / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27200','NZGD49 / NZ Map Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27391','NGO 1948 / I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27392','NGO 1948 / II','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27393','NGO 1948 / III','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27394','NGO 1948 / IV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27395','NGO 1948 / V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27396','NGO 1948 / VI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27397','NGO 1948 / VII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27398','NGO 1948 / VIII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27500','ATF / Nord de Guerre','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27581','NTF / France I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27582','NTF / France II','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27583','NTF / France III','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27584','NTF / France IV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27591','NTF / Nord France','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27592','NTF / Centre France','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27593','NTF / Sud France','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27594','NTF / Corse','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27700','British National Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28191','Palestine Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28192','Palestine Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28193','Israeli CS Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28232','Point Noire / UTM 32S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28404','S-42 zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28405','S-42 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28406','S-42 zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28407','S-42 zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28408','S-42 zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28409','S-42 zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28410','S-42 zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28411','S-42 zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28412','S-42 zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28413','S-42 zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28414','S-42 zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28415','S-42 zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28416','S-42 zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28417','S-42 zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28418','S-42 zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28419','S-42 zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28420','S-42 zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28421','S-42 zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28422','S-42 zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28423','S-42 zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28424','S-42 zone 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28425','S-42 zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28426','S-42 zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28427','S-42 zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28428','S-42 zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28429','S-42 zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28430','S-42 zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28431','S-42 zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28432','S-42 zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28462','Pulkovo / Gauss 2N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28463','Pulkovo / Gauss 3N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28464','Pulkovo / Gauss 4N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28465','Pulkovo / Gauss 5N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28466','Pulkovo / Gauss 6N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28467','Pulkovo / Gauss 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28468','Pulkovo / Gauss 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28469','Pulkovo / Gauss 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28470','Pulkovo / Gauss 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28471','Pulkovo / Gauss 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28472','Pulkovo / Gauss 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28473','Pulkovo / Gauss 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28474','Pulkovo / Gauss 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28475','Pulkovo / Gauss 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28476','Pulkovo / Gauss 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28477','Pulkovo / Gauss 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28478','Pulkovo / Gauss 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28479','Pulkovo / Gauss 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28480','Pulkovo / Gauss 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28481','Pulkovo / Gauss 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28482','Pulkovo / Gauss 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28483','Pulkovo / Gauss 23N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28484','Pulkovo / Gauss 24N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28485','Pulkovo / Gauss 25N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28486','Pulkovo / Gauss 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28487','Pulkovo / Gauss 27N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28488','Pulkovo / Gauss 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28489','Pulkovo / Gauss 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28490','Pulkovo / Gauss 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28491','Pulkovo / Gauss 31N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28492','Pulkovo / Gauss 32N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28600','Qatar National Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29220','Sapper Hill / UTM 20S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29221','Sapper Hill / UTM 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29333','Schwarzeck / UTM 33S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29371','SW African CS zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29373','SW African CS zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29375','SW African CS zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29377','SW African CS zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29379','SW African CS zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29381','SW African CS zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29383','SW African CS zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29385','SW African CS zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29700','Tananarive / Laborde','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29738','Tananarive / UTM 38S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29739','Tananarive / UTM 39S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29849','Timbalai 1948 / UTM 49N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29850','Timbalai 1948 / UTM 50N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29871','Timbalai / Borneo (ch)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29872','Timbalai / Borneo (ftSe)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29900','TM65 / Irish Nat Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30161','Tokyo / Japan zone I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30162','Tokyo / Japan zone II','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30163','Tokyo / Japan zone III','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30164','Tokyo / Japan zone IV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30165','Tokyo / Japan zone V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30166','Tokyo / Japan zone VI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30167','Tokyo / Japan zone VII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30168','Tokyo / Japan zone VIII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30169','Tokyo / Japan zone IX','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30170','Tokyo / Japan zone X','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30171','Tokyo / Japan zone XI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30172','Tokyo / Japan zone XII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30173','Tokyo / Japan zone XIII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30174','Tokyo / Japan zone XIV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30175','Tokyo / Japan zone XV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30176','Tokyo / Japan zone XVI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30177','Tokyo / Japan zone XVII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30178','Tokyo / Japan zone XVIII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30200','Trinidad 1903 / Cassini','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30491','Voirol75 / N Algeria old','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30492','Voirol75 / S Algeria old','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30729','Nord Sahara / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30730','Nord Sahara / UTM 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30731','Nord Sahara / UTM 31N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30732','Nord Sahara / UTM 32N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30791','Nord Sahara / N Algerie','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30792','Nord Sahara / S Algerie','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31265','MGI / Gauss zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31266','MGI / Gauss zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31267','MGI / Gauss zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31268','MGI / Gauss zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31291','MGI / Austria West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31292','MGI / Austria Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31293','MGI / Austria East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31370','BD72 / Lambert 72','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31461','DHDN / Gauss zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31462','DHDN / Gauss zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31463','DHDN / Gauss zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31464','DHDN / Gauss zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31465','DHDN / Gauss zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31600','Stereo 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31700','Stereo 70','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32013','NAD27 / New Mexico Cent.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32018','NAD27 / New York Long Is','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32020','NAD27 / North Dakota N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32021','NAD27 / North Dakota S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32028','NAD27 / Pennsylvania N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32029','NAD27 / Pennsylvania S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32031','NAD27 / South Carolina N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32033','NAD27 / South Carolina S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32034','NAD27 / South Dakota N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32035','NAD27 / South Dakota S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32038','NAD27 / Texas North Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32040','NAD27 / Texas South Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32050','NAD27 / West Virginia N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32051','NAD27 / West Virginia S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32053','NAD27 / Wisconsin Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32056','NAD27 / Wyoming E. Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32057','NAD27 / Wyoming W. Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32113','NAD83 / New Mexico Cent.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32118','NAD83 / New York Long Is','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32120','NAD83 / North Dakota N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32121','NAD83 / North Dakota S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32128','NAD83 / Pennsylvania N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32129','NAD83 / Pennsylvania S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32134','NAD83 / South Dakota N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32135','NAD83 / South Dakota S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32138','NAD83 / Texas North Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32140','NAD83 / Texas South Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32150','NAD83 / West Virginia N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32151','NAD83 / West Virginia S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32153','NAD83 / Wisconsin Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32156','NAD83 / Wyoming E. Cen.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32157','NAD83 / Wyoming W. Cen.','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5702','NGVD29 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6359','NGVD29 depth','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4143','Côte d''Ivoire','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4143','Port Bouet','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4142','Port Bouet','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4142','Côte d''Ivoire','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2164','Cote d''Ivoire / TM 5 NW','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2164','Port Bouet / TM 5 NW','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2165','Cote d''Ivoire / TM 5 NW','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2165','Port Bouet / TM 5 NW','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9367','ETRS89 / TPEN11 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9368','ETRS89 / TPEN11 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6696','JGD2000','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6697','JGD2011','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2393','KKJ / Basic Coordinate System zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2391','KKJ / Basic Coordinate System zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2392','KKJ / Basic Coordinate System zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2394','KKJ / Basic Coordinate System zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31467','DHDN / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31468','DHDN / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31469','DHDN / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6787','NAD83(2011) / OCRS_BKE (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6786','NAD83(2011) / OCRS_BKE (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4178','42/83','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31466','DHDN / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2166','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2167','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4181','NTL (1930)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6791','NAD83(2011) / OCRS_BKF (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8233','NAD83(CSRS98)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8881','Wiener Null','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','3906','HR1901','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6795','NAD83(2011) / OCRS_BRP (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6794','NAD83(2011) / OCRS_BRP (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6803','NAD83(2011) / OCRS_CGP (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31275','HDKS zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31276','HDKS zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31275','D48 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2169','Luxembourg 1930 / Gauss','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3396','DHDN / 3GK zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3397','DHDN / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3398','DHDN / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3399','DHDN / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31282','MGI (Ferro) / Austria C','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31283','MGI (Ferro) / Austria E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31281','MGI (Ferro) / Austria W','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4176','AAD98','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2193','NZGD2000 / NZTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6802','NAD83(2011) / OCRS_CGP (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4300','1975 Mapping Adjustment','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2196','System 2000 Jylland zoner','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2197','System 2000 Sjaelland zoner','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2198','System 2000 Bornholm zoner','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6807','NAD83(2011) / OCRS_CRE (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6810','NAD83(2011) / OCRS_CRW (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6811','NAD83(2011) / OCRS_CRW (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4190','National Geodetic System [Argentina]','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6806','NAD83(2011) / OCRS_CRE (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4183','Graciosa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4184','Sao Braz','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27561','NTF (Paris) / Nord France','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27562','NTF (Paris) / Cen France','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27563','NTF (Paris) / Sud France','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27564','NTF (Paris) / Corse','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27571','NTF (Paris) / France I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27572','NTF (Paris) / France II','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27573','NTF (Paris) / France III','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27574','NTF (Paris) / France IV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27572','NTF (Paris) / Lambert zone II etendu','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6815','NAD83(2011) / OCRS_CGC (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2168','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2206','ED50 / Turkey zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2207','ED50 / Turkey zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2208','ED50 / Turkey zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2209','ED50 / Turkey zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2210','ED50 / Turkey zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2211','ED50 / Turkey zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2212','ED50 / Turkey zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6814','NAD83(2011) / OCRS_CGC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2189','Graciosa / UTM zone 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2190','Sao Braz / UTM zone 26N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4207','Lisbon 1937','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4803','Lisbon 1937 (Lisbon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20791','Lisbon 1937 (Lisbon) / Portuguese Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20790','Lisbon 1937 (Lisbon)/Portuguese National Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6819','NAD83(2011) / OCRS_DFM (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6818','NAD83(2011) / OCRS_DFM (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2040','Port Bouet / UTM zone 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2040','Côte d''Ivoire / UTM zone 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2041','Port Bouet / UTM zone 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2041','Côte d''Ivoire / UTM zone 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2042','Port Bouet / UTM zone 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2042','Côte d''Ivoire / UTM zone 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2043','Port Bouet / UTM zone 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2043','Côte d''Ivoire / UTM zone 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6823','NAD83(2011) / OCRS_EUG (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6822','NAD83(2011) / OCRS_EUG (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6827','NAD83(2011) / OCRS_GPA (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2297','Qornoq 1927 / Greenland zone 1 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2307','Qornoq 1927 / Greenland zone 8 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32113','NAD83 / New Mexico Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26949','NAD83 / Arizona Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26929','NAD83 / Alabama East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26930','NAD83 / Alabama West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26931','NAD83 / Alaska zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26940','NAD83 / Alaska zone 10 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26932','NAD83 / Alaska zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26933','NAD83 / Alaska zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26934','NAD83 / Alaska zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26935','NAD83 / Alaska zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26936','NAD83 / Alaska zone 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26937','NAD83 / Alaska zone 7 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26938','NAD83 / Alaska zone 8 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26939','NAD83 / Alaska zone 9 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26948','NAD83 / Arizona East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26950','NAD83 / Arizona West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26951','NAD83 / Arkansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26952','NAD83 / Arkansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26941','NAD83 / California zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26942','NAD83 / California zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26943','NAD83 / California zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26944','NAD83 / California zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26945','NAD83 / California zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26946','NAD83 / California zone 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26954','NAD83 / Colorado Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26953','NAD83 / Colorado North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26955','NAD83 / Colorado South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26956','NAD83 / Connecticut (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26957','NAD83 / Delaware (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26958','NAD83 / Florida East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26960','NAD83 / Florida North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26959','NAD83 / Florida West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26966','NAD83 / Georgia East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26967','NAD83 / Georgia West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26961','NAD83 / Hawaii zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26962','NAD83 / Hawaii zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26963','NAD83 / Hawaii zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26964','NAD83 / Hawaii zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26965','NAD83 / Hawaii zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26969','NAD83 / Idaho Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26968','NAD83 / Idaho East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26970','NAD83 / Idaho West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26971','NAD83 / Illinois East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26972','NAD83 / Illinois West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26973','NAD83 / Indiana East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26974','NAD83 / Indiana West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26975','NAD83 / Iowa North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26976','NAD83 / Iowa South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26977','NAD83 / Kansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26978','NAD83 / Kansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2205','NAD83 / Kentucky North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26980','NAD83 / Kentucky South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26981','NAD83 / Louisiana North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26982','NAD83 / Louisiana South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26983','NAD83 / Maine East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26984','NAD83 / Maine West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26985','NAD83 / Maryland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26987','NAD83 / Massachusetts Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26986','NAD83 / Massachusetts Mainland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26989','NAD83 / Michigan Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26988','NAD83 / Michigan North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26990','NAD83 / Michigan South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26992','NAD83 / Minnesota Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26991','NAD83 / Minnesota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26993','NAD83 / Minnesota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26994','NAD83 / Mississippi East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26995','NAD83 / Mississippi West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26997','NAD83 / Missouri Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26996','NAD83 / Missouri East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26998','NAD83 / Missouri West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32100','NAD83 / Montana (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32104','NAD83 / Nebraska (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32108','NAD83 / Nevada Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32107','NAD83 / Nevada East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32109','NAD83 / Nevada West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32110','NAD83 / New Hampshire (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32111','NAD83 / New Jersey (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32112','NAD83 / New Mexico East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32114','NAD83 / New Mexico West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32116','NAD83 / New York Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32115','NAD83 / New York East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32118','NAD83 / New York Long Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32117','NAD83 / New York West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32119','NAD83 / North Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32120','NAD83 / North Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32121','NAD83 / North Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32122','NAD83 / Ohio North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32123','NAD83 / Ohio South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32124','NAD83 / Oklahoma North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32125','NAD83 / Oklahoma South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32126','NAD83 / Oregon North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32127','NAD83 / Oregon South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32128','NAD83 / Pennsylvania North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32129','NAD83 / Pennsylvania South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32130','NAD83 / Rhode Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32133','NAD83 / South Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32134','NAD83 / South Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32135','NAD83 / South Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32136','NAD83 / Tennessee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32139','NAD83 / Texas Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32137','NAD83 / Texas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32138','NAD83 / Texas North Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32141','NAD83 / Texas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32140','NAD83 / Texas South Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32143','NAD83 / Utah Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32142','NAD83 / Utah North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32144','NAD83 / Utah South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32145','NAD83 / Vermont (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32146','NAD83 / Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32147','NAD83 / Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32148','NAD83 / Washington North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32149','NAD83 / Washington South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32150','NAD83 / West Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32151','NAD83 / West Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32153','NAD83 / Wisconsin Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32152','NAD83 / Wisconsin North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32154','NAD83 / Wisconsin South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32155','NAD83 / Wyoming East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32156','NAD83 / Wyoming East Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32158','NAD83 / Wyoming West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32157','NAD83 / Wyoming West Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32161','NAD83 / Puerto Rico & Virgin Is. (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6826','NAD83(2011) / OCRS_GPA (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4282','Congo 1960 Pointe Noire','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28232','Congo 1960 Pointe Noire / UTM zone 32S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21149','Genuk / UTM zone 49S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2308','Genuk / TM 109 SE','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','Kronstadt 1977 height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4199','New Egyptian','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4229','Old Egyptian','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32064','NAD27 / UTM zone 14N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32065','NAD27 / UTM zone 15N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32066','NAD27 / UTM zone 16N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32067','NAD27 / UTM zone 17N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6831','NAD83(2011) / OCRS_GWS (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2319','ED50 / 3-degree Gauss-Kruger CM 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2320','ED50 / 3-degree Gauss-Kruger CM 30E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2321','ED50 / 3-degree Gauss-Kruger CM 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2322','ED50 / 3-degree Gauss-Kruger CM 36E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2323','ED50 / 3-degree Gauss-Kruger CM 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2324','ED50 / 3-degree Gauss-Kruger CM 42E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2325','ED50 / 3-degree Gauss-Kruger CM 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6830','NAD83(2011) / OCRS_GWS (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5736','Huang Hai 1956 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5738','Hong Kong Principal Datum height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2343','Xian 1980 / 6-degree Gauss-Kruger CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2344','Xian 1980 / 6-degree Gauss-Kruger CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2338','Xian 1980 / 6-degree Gauss-Kruger CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2342','Xian 1980 / 6-degree Gauss-Kruger CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2348','Xian 1980 / 6-degree Gauss-Kruger CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2339','Xian 1980 / 6-degree Gauss-Kruger CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2340','Xian 1980 / 6-degree Gauss-Kruger CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2341','Xian 1980 / 6-degree Gauss-Kruger CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2345','Xian 1980 / 6-degree Gauss-Kruger CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2346','Xian 1980 / 6-degree Gauss-Kruger CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2347','Xian 1980 / 6-degree Gauss-Kruger CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5737','Huang Hai 1985 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2326','HK 1980 Grid System','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4611','HK1980','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2327','Xian 1980 / 6-degree Gauss-Kruger zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2328','Xian 1980 / 6-degree Gauss-Kruger zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2329','Xian 1980 / 6-degree Gauss-Kruger zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2330','Xian 1980 / 6-degree Gauss-Kruger zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2331','Xian 1980 / 6-degree Gauss-Kruger zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2332','Xian 1980 / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2333','Xian 1980 / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2334','Xian 1980 / 6-degree Gauss-Kruger zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2335','Xian 1980 / 6-degree Gauss-Kruger zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2336','Xian 1980 / 6-degree Gauss-Kruger zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2337','Xian 1980 / 6-degree Gauss-Kruger zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21413','Beijing 1954 / 6-degree Gauss-Kruger zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21414','Beijing 1954 / 6-degree Gauss-Kruger zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21415','Beijing 1954 / 6-degree Gauss-Kruger zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21416','Beijing 1954 / 6-degree Gauss-Kruger zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21417','Beijing 1954 / 6-degree Gauss-Kruger zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21418','Beijing 1954 / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21419','Beijing 1954 / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21420','Beijing 1954 / 6-degree Gauss-Kruger zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21421','Beijing 1954 / 6-degree Gauss-Kruger zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21422','Beijing 1954 / 6-degree Gauss-Kruger zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21423','Beijing 1954 / 6-degree Gauss-Kruger zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21453','Beijing 1954 / 6-degree Gauss-Kruger CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21454','Beijing 1954 / 6-degree Gauss-Kruger CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21455','Beijing 1954 / 6-degree Gauss-Kruger CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21456','Beijing 1954 / 6-degree Gauss-Kruger CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21457','Beijing 1954 / 6-degree Gauss-Kruger CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21458','Beijing 1954 / 6-degree Gauss-Kruger CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21459','Beijing 1954 / 6-degree Gauss-Kruger CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21460','Beijing 1954 / 6-degree Gauss-Kruger CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21461','Beijing 1954 / 6-degree Gauss-Kruger CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21462','Beijing 1954 / 6-degree Gauss-Kruger CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21463','Beijing 1954 / 6-degree Gauss-Kruger CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2044','Hanoi 1972 / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2045','Hanoi 1972 / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2462','Albanian 1987 / 6-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2397','Pulkovo 1942(83) / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2398','Pulkovo 1942(83) / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2399','Pulkovo 1942(83) / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2395','S Yemen / G-K zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2396','S Yemen / G-K zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2396','South Yemen / 6-degree Gauss-Kruger zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2395','South Yemen / 6-degree Gauss-Kruger zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22191','Campo Inchauspe / Gauss-Kruger zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22192','Campo Inchauspe / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22193','Campo Inchauspe / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22194','Campo Inchauspe / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22195','Campo Inchauspe / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22196','Campo Inchauspe / Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22197','Campo Inchauspe / Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2081','Chos Malal 1914 / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2082','Pampa del Castillo / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2083','Hito XVIII 1963 / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20004','Pulkovo 1995 / 6-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20005','Pulkovo 1995 / 6-degree Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20006','Pulkovo 1995 / 6-degree Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20007','Pulkovo 1995 / 6-degree Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20008','Pulkovo 1995 / 6-degree Gauss-Kruger zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20009','Pulkovo 1995 / 6-degree Gauss-Kruger zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20010','Pulkovo 1995 / 6-degree Gauss-Kruger zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20011','Pulkovo 1995 / 6-degree Gauss-Kruger zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20012','Pulkovo 1995 / 6-degree Gauss-Kruger zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20013','Pulkovo 1995 / 6-degree Gauss-Kruger zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20014','Pulkovo 1995 / 6-degree Gauss-Kruger zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20015','Pulkovo 1995 / 6-degree Gauss-Kruger zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20016','Pulkovo 1995 / 6-degree Gauss-Kruger zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20017','Pulkovo 1995 / 6-degree Gauss-Kruger zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20018','Pulkovo 1995 / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20019','Pulkovo 1995 / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20020','Pulkovo 1995 / 6-degree Gauss-Kruger zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20021','Pulkovo 1995 / 6-degree Gauss-Kruger zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20022','Pulkovo 1995 / 6-degree Gauss-Kruger zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20023','Pulkovo 1995 / 6-degree Gauss-Kruger zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20024','Pulkovo 1995 / 6-degree Gauss-Kruger zone 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20025','Pulkovo 1995 / 6-degree Gauss-Kruger zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20026','Pulkovo 1995 / 6-degree Gauss-Kruger zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20027','Pulkovo 1995 / 6-degree Gauss-Kruger zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20028','Pulkovo 1995 / 6-degree Gauss-Kruger zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20029','Pulkovo 1995 / 6-degree Gauss-Kruger zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20030','Pulkovo 1995 / 6-degree Gauss-Kruger zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20031','Pulkovo 1995 / 6-degree Gauss-Kruger zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20032','Pulkovo 1995 / 6-degree Gauss-Kruger zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28402','Pulkovo 1942 / 6-degree Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28403','Pulkovo 1942 / 6-degree Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28404','Pulkovo 1942 / 6-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28405','Pulkovo 1942 / 6-degree Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28406','Pulkovo 1942 / 6-degree Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28407','Pulkovo 1942 / 6-degree Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28408','Pulkovo 1942 / 6-degree Gauss-Kruger zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28409','Pulkovo 1942 / 6-degree Gauss-Kruger zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28410','Pulkovo 1942 / 6-degree Gauss-Kruger zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28411','Pulkovo 1942 / 6-degree Gauss-Kruger zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28412','Pulkovo 1942 / 6-degree Gauss-Kruger zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28413','Pulkovo 1942 / 6-degree Gauss-Kruger zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28414','Pulkovo 1942 / 6-degree Gauss-Kruger zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28415','Pulkovo 1942 / 6-degree Gauss-Kruger zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28416','Pulkovo 1942 / 6-degree Gauss-Kruger zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28417','Pulkovo 1942 / 6-degree Gauss-Kruger zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28418','Pulkovo 1942 / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28419','Pulkovo 1942 / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28420','Pulkovo 1942 / 6-degree Gauss-Kruger zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28421','Pulkovo 1942 / 6-degree Gauss-Kruger zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28422','Pulkovo 1942 / 6-degree Gauss-Kruger zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28423','Pulkovo 1942 / 6-degree Gauss-Kruger zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28424','Pulkovo 1942 / 6-degree Gauss-Kruger zone 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28425','Pulkovo 1942 / 6-degree Gauss-Kruger zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28426','Pulkovo 1942 / 6-degree Gauss-Kruger zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28427','Pulkovo 1942 / 6-degree Gauss-Kruger zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28428','Pulkovo 1942 / 6-degree Gauss-Kruger zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28429','Pulkovo 1942 / 6-degree Gauss-Kruger zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28430','Pulkovo 1942 / 6-degree Gauss-Kruger zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28431','Pulkovo 1942 / 6-degree Gauss-Kruger zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28432','Pulkovo 1942 / 6-degree Gauss-Kruger zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2463','Pulkovo 1995 / 6-degree Gauss-Kruger CM 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2464','Pulkovo 1995 / 6-degree Gauss-Kruger CM 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2465','Pulkovo 1995 / 6-degree Gauss-Kruger CM 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2466','Pulkovo 1995 / 6-degree Gauss-Kruger CM 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2467','Pulkovo 1995 / 6-degree Gauss-Kruger CM 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2468','Pulkovo 1995 / 6-degree Gauss-Kruger CM 51E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2469','Pulkovo 1995 / 6-degree Gauss-Kruger CM 57E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2470','Pulkovo 1995 / 6-degree Gauss-Kruger CM 63E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2471','Pulkovo 1995 / 6-degree Gauss-Kruger CM 69E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2472','Pulkovo 1995 / 6-degree Gauss-Kruger CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2473','Pulkovo 1995 / 6-degree Gauss-Kruger CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2474','Pulkovo 1995 / 6-degree Gauss-Kruger CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2475','Pulkovo 1995 / 6-degree Gauss-Kruger CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2476','Pulkovo 1995 / 6-degree Gauss-Kruger CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2477','Pulkovo 1995 / 6-degree Gauss-Kruger CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2478','Pulkovo 1995 / 6-degree Gauss-Kruger CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2479','Pulkovo 1995 / 6-degree Gauss-Kruger CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2480','Pulkovo 1995 / 6-degree Gauss-Kruger CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2481','Pulkovo 1995 / 6-degree Gauss-Kruger CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2482','Pulkovo 1995 / 6-degree Gauss-Kruger CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2483','Pulkovo 1995 / 6-degree Gauss-Kruger CM 141E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2484','Pulkovo 1995 / 6-degree Gauss-Kruger CM 147E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2485','Pulkovo 1995 / 6-degree Gauss-Kruger CM 153E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2486','Pulkovo 1995 / 6-degree Gauss-Kruger CM 159E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2487','Pulkovo 1995 / 6-degree Gauss-Kruger CM 165E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2488','Pulkovo 1995 / 6-degree Gauss-Kruger CM 171E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2489','Pulkovo 1995 / 6-degree Gauss-Kruger CM 177E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2490','Pulkovo 1995 / 6-degree Gauss-Kruger CM 177W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2491','Pulkovo 1995 / 6-degree Gauss-Kruger CM 171W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2492','Pulkovo 1942 / 6-degree Gauss-Kruger CM 9E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2493','Pulkovo 1942 / 6-degree Gauss-Kruger CM 15E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2494','Pulkovo 1942 / 6-degree Gauss-Kruger CM 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2495','Pulkovo 1942 / 6-degree Gauss-Kruger CM 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2496','Pulkovo 1942 / 6-degree Gauss-Kruger CM 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2497','Pulkovo 1942 / 6-degree Gauss-Kruger CM 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2498','Pulkovo 1942 / 6-degree Gauss-Kruger CM 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2499','Pulkovo 1942 / 6-degree Gauss-Kruger CM 51E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2500','Pulkovo 1942 / 6-degree Gauss-Kruger CM 57E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2501','Pulkovo 1942 / 6-degree Gauss-Kruger CM 63E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2502','Pulkovo 1942 / 6-degree Gauss-Kruger CM 69E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2503','Pulkovo 1942 / 6-degree Gauss-Kruger CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2504','Pulkovo 1942 / 6-degree Gauss-Kruger CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2505','Pulkovo 1942 / 6-degree Gauss-Kruger CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2506','Pulkovo 1942 / 6-degree Gauss-Kruger CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2507','Pulkovo 1942 / 6-degree Gauss-Kruger CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2508','Pulkovo 1942 / 6-degree Gauss-Kruger CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2509','Pulkovo 1942 / 6-degree Gauss-Kruger CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2510','Pulkovo 1942 / 6-degree Gauss-Kruger CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2511','Pulkovo 1942 / 6-degree Gauss-Kruger CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2512','Pulkovo 1942 / 6-degree Gauss-Kruger CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2513','Pulkovo 1942 / 6-degree Gauss-Kruger CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2514','Pulkovo 1942 / 6-degree Gauss-Kruger CM 141E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2515','Pulkovo 1942 / 6-degree Gauss-Kruger CM 147E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2516','Pulkovo 1942 / 6-degree Gauss-Kruger CM 153E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2517','Pulkovo 1942 / 6-degree Gauss-Kruger CM 159E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2518','Pulkovo 1942 / 6-degree Gauss-Kruger CM 165E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2519','Pulkovo 1942 / 6-degree Gauss-Kruger CM 171E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2520','Pulkovo 1942 / 6-degree Gauss-Kruger CM 177E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2521','Pulkovo 1942 / 6-degree Gauss-Kruger CM 177W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2522','Pulkovo 1942 / 6-degree Gauss-Kruger CM 171W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6792','CORS96 / OCRS_BRP (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6801','CORS96 / OCRS_CGP (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6800','CORS96 / OCRS_CGP (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6805','CORS96 / OCRS_CRE (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6809','CORS96 / OCRS_CRW (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6804','CORS96 / OCRS_CRE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6808','CORS96 / OCRS_CRW (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6813','CORS96 / OCRS_CGC (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6812','CORS96 / OCRS_CGC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6817','CORS96 / OCRS_DFM (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6816','CORS96 / OCRS_DFM (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6821','CORS96 / OCRS_EUG (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6820','CORS96 / OCRS_EUG (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6825','CORS96 / OCRS_GPA (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6824','CORS96 / OCRS_GPA (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6829','CORS96 / OCRS_GWS (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6828','CORS96 / OCRS_GWS (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6832','CORS96 / OCRS_LDG (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6833','CORS96 / OCRS_LDG (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6835','NAD83(2011) / OCRS_LDG (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6837','CORS96 / OCRS_ONT (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6838','NAD83(2011) / OCRS_ONT (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4327','DGN-95 (geographic 3D)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4328','DGN-95 (geocentric)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6834','NAD83(2011) / OCRS_LDG (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6839','NAD83(2011) / OCRS_ONT (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4613','Samboja','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4613','P2 Exc-T9','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4613','P2 Exc','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6840','CORS96 / OCRS_ORC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2933','Samboja / UTM zone 50S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2933','P2 Exc-T9 / UTM zone 50S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2952','NAD83(CSRS) / SCoPQ zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2945','NAD83(CSRS) / SCoPQ zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2946','NAD83(CSRS) / SCoPQ zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2947','NAD83(CSRS) / SCoPQ zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2948','NAD83(CSRS) / SCoPQ zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2949','NAD83(CSRS) / SCoPQ zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2950','NAD83(CSRS) / SCoPQ zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2951','NAD83(CSRS) / SCoPQ zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22991','Egypt 1907 / Green Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26191','Merchich / Zone 1 Nord Maroc','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26192','Merchich / Zone 2 Sud Maroc','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26194','Merchich / Zone 3 Sahara Nord','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26195','Merchich / Zone 4 Sahara Sud','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4620','12th Parallel traverse','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5732','Belfast Lough height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6836','CORS96 / OCRS_ONT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6841','CORS96 / OCRS_ORC (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31281','Gebrauchsnetz M28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31282','Gebrauchsnetz M31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31283','Gebrauchsnetz M34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31288','Bundesmeldenetz M28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31289','Bundesmeldenetz M31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31290','Bundesmeldenetz M34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6842','NAD83(2011) / OCRS_ORC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6843','NAD83(2011) / OCRS_ORC (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6844','CORS96 / OCRS_PDT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6845','CORS96 / OCRS_PDT (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6846','NAD83(2011) / OCRS_PDT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6848','CORS96 / OCRS_PLG (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6849','CORS96 / OCRS_PLG (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6850','NAD83(2011) / OCRS_PLG (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6851','NAD83(2011) / OCRS_PLG (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6847','NAD83(2011) / OCRS_PDT (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6852','CORS96 / OCRS_PDX (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6853','CORS96 / OCRS_PDX (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6854','NAD83(2011) / OCRS_PDX (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7707','Newlyn (Offshore) height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6855','NAD83(2011) / OCRS_PDX (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6856','CORS96 / OCRS_SLE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6857','CORS96 / OCRS_SLE (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4346','ETRF89 (geocentric)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4346','EUREF89 (geocentric)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4638','St Pierre Miquelon 1950','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2984','RGNC 1991 / Lambert NC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6858','NAD83(2011) / OCRS_SLE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2985','Petrels 1972 / Terre Adelie Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2986','Perroud 1950 / Terre Adelie Stereo','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4634','MHNC72','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2982','MHNC72 / UTM zone 58S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4339','AAD98 (3D)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4340','AAD98 (geocentric)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4345','ETRF89 (3D)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4345','EUREF89 (3D)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4356','LKS94 (geocentric)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4126','LKS94','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4355','LKS94 (3D)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4365','National Geodetic System [Argentina] (3D)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4366','National Geodetic System [Argentina] (geocentric)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4820','Samboja (Jakarta)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6859','NAD83(2011) / OCRS_SLE (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6870','KRGJSH-2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6862','NAD83(2011) / OCRS_SAN (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6862','NAD83(2011) / Oregon Sweet Home-Sisters zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6863','NAD83(2011) / OCRS_SAN (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3019','RT90 7.5 gon V 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6798','NAD83(2011) / OCRS_BBU (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3020','RT90 5 gon V 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3021','RT90 2.5 gon V 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3022','RT90 0 gon 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3023','RT90 2.5 gon O 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3024','RT90 5 gon O 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6790','NAD83(2011) / OCRS_BKF (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6799','NAD83(2011) / OCRS_BBU (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6797','NAD83(CORS96) / Oregon Bend-Vale zone (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5758','IGN89 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6797','CORS96 / OCRS_BBU (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4183','Base SW','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4665','Base SW','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4665','Graciosa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2189','Base SW / UTM zone 26N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4664','Sao Braz','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3062','Sao Braz / UTM zone 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3063','Base SW / UTM zone 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3063','Graciosa / UTM zone 26N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4615','Porto Santo 1936','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4663','Base SE','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2942','Base SE / UTM zone 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3061','Base SE / UTM zone 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3028','RT38 0 gon 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3029','RT38 2.5 gon O 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3027','RT38 2.5 gon V 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3030','RT38 5 gon O 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3026','RT38 5 gon V 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3025','RT38 2.5 gon V 0:-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7793','RDN2008 / TM34 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4615','Base SE','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','LKS92 / TM Baltic93','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','LKS94 / TM Baltic93','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','EST97 / TM Baltic93','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3300','EST92','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3301','EST97','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3059','LKS92 / Latvia TM','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4131','Indian (DMA Reduced)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3176','Indian (DMA Reduced) / TM 106 NE','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3148','Indian (DMA Reduced) / UTM zone 48N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3149','Indian (DMA Reduced) / UTM zone 49N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4930','AAD98','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6863','NAD83(2011) / Oregon Sweet Home-Sisters zone (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6796','CORS96 / OCRS_BBU (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4950','LKS94 (ETRS89)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4931','AAD98','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8235','NAD83(CSRS98)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4951','LKS94 (ETRS89)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6861','NAD83(CORS96) / Oregon Sweet Home-Sisters zone (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6860','CORS96 / OCRS_SAN (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4265','Rome 1940','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4806','Rome 1940 (Rome)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3004','Rome 1940 / Italy zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3003','Rome 1940 / Italy zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3066','ED50 / Jordan Transverse Mercator','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2157','ETRS89 / ITM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6860','NAD83(CORS96) / Oregon Sweet Home-Sisters zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4173','ETRS89','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4269','NAD83(1986)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4170','SIRGAS','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4974','SIRGAS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32000','SIRGAS / UTM zone 25S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31999','SIRGAS / UTM zone 24S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31998','SIRGAS / UTM zone 23S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31997','SIRGAS / UTM zone 22S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31996','SIRGAS / UTM zone 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31995','SIRGAS / UTM zone 20S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31994','SIRGAS / UTM zone 19S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31993','SIRGAS / UTM zone 18S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31992','SIRGAS / UTM zone 17S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31991','SIRGAS / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31990','SIRGAS / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31989','SIRGAS / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31988','SIRGAS / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31987','SIRGAS / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31986','SIRGAS / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4975','SIRGAS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6861','CORS96 / OCRS_SAN (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3069','NAD27 / WTM 27','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5723','Japanese Standard Levelling Datum height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7005','Nahrwan 1934 / UTM 37N','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5787','Baltic 1980 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5782','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3072','Maine Coordinate System of 2000 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3073','Maine Coordinate System of 2000 Central Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3074','Maine Coordinate System of 2000 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2802','Maine Coordinate System of 1983 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2803','Maine Coordinate System of 1983 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26783','Maine Coordinate System of 1927 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26784','Maine Coordinate System of 1927 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26984','Maine Coordinate System of 1983 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26983','Maine Coordinate System of 1983 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3078','Michigan GeoRef','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3081','NAD83 / TSMS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3083','NAD83 / TX Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3083','Texas Centric Mapping System / Albers Equal Area','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3082','Texas Centric Mapping System / Lambert Conformal','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3082','TCMS/LC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3091','NAD83(HPGN) / Kentucky Single Zone (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3089','NAD83 / KY1Z (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3087','NAD83(HPGN) / Florida GDL Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3085','NAD83(HPGN) / Texas Centric Albers Equal Area','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3084','NAD83(HPGN) / Texas Centric Lambert Conformal','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3079','NAD83(HPGN) / Michigan Oblique Mercator','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3077','NAD83(HPGN) / Maine CS2000 West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3076','NAD83(HPGN) / Maine CS2000 Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3075','NAD83(HPGN) / Maine CS2000 East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3071','NAD83(HPGN) / Wisconsin Transverse Mercator','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3070','NAD83 / WTM 83','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3088','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3090','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3090','NAD83(HPGN) / Kentucky Single Zone','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD83(HPGN)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','NAD83(HPGN)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','NAD83(HPGN)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2195','NAD83(HPGN) / UTM zone 2S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2759','NAD83(HPGN) / Alabama East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2760','NAD83(HPGN) / Alabama West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2761','NAD83(HPGN) / Arizona East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2762','NAD83(HPGN) / Arizona Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2763','NAD83(HPGN) / Arizona West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2764','NAD83(HPGN) / Arkansas North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2765','NAD83(HPGN) / Arkansas South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2766','NAD83(HPGN) / California zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2767','NAD83(HPGN) / California zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2768','NAD83(HPGN) / California zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2769','NAD83(HPGN) / California zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2770','NAD83(HPGN) / California zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2771','NAD83(HPGN) / California zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2772','NAD83(HPGN) / Colorado North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2773','NAD83(HPGN) / Colorado Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2774','NAD83(HPGN) / Colorado South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2775','NAD83(HPGN) / Connecticut','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2776','NAD83(HPGN) / Delaware','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2777','NAD83(HPGN) / Florida East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2778','NAD83(HPGN) / Florida West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2779','NAD83(HPGN) / Florida North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2780','NAD83(HPGN) / Georgia East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2781','NAD83(HPGN) / Georgia West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2782','NAD83(HPGN) / Hawaii zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2783','NAD83(HPGN) / Hawaii zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2784','NAD83(HPGN) / Hawaii zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2785','NAD83(HPGN) / Hawaii zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2786','NAD83(HPGN) / Hawaii zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2787','NAD83(HPGN) / Idaho East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2788','NAD83(HPGN) / Idaho Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2789','NAD83(HPGN) / Idaho West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2790','NAD83(HPGN) / Illinois East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2791','NAD83(HPGN) / Illinois West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2792','NAD83(HPGN) / Indiana East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2793','NAD83(HPGN) / Indiana West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2794','NAD83(HPGN) / Iowa North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2795','NAD83(HPGN) / Iowa South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2796','NAD83(HPGN) / Kansas North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2797','NAD83(HPGN) / Kansas South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2798','NAD83(HPGN) / Kentucky North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2799','NAD83(HPGN) / Kentucky South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2800','NAD83(HPGN) / Louisiana North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2801','NAD83(HPGN) / Louisiana South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2802','NAD83(HPGN) / Maine East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2803','NAD83(HPGN) / Maine West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2804','NAD83(HPGN) / Maryland','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2805','NAD83(HPGN) / Massachusetts Mainland','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2806','NAD83(HPGN) / Massachusetts Island','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2807','NAD83(HPGN) / Michigan North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2808','NAD83(HPGN) / Michigan Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2809','NAD83(HPGN) / Michigan South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2810','NAD83(HPGN) / Minnesota North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2811','NAD83(HPGN) / Minnesota Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2812','NAD83(HPGN) / Minnesota South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2813','NAD83(HPGN) / Mississippi East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2814','NAD83(HPGN) / Mississippi West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2815','NAD83(HPGN) / Missouri East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2816','NAD83(HPGN) / Missouri Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2817','NAD83(HPGN) / Missouri West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2818','NAD83(HPGN) / Montana','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2819','NAD83(HPGN) / Nebraska','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2820','NAD83(HPGN) / Nevada East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2821','NAD83(HPGN) / Nevada Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2822','NAD83(HPGN) / Nevada West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2823','NAD83(HPGN) / New Hampshire','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2824','NAD83(HPGN) / New Jersey','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2825','NAD83(HPGN) / New Mexico East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2826','NAD83(HPGN) / New Mexico Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2827','NAD83(HPGN) / New Mexico West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2828','NAD83(HPGN) / New York East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2829','NAD83(HPGN) / New York Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2830','NAD83(HPGN) / New York West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2831','NAD83(HPGN) / New York Long Island','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2832','NAD83(HPGN) / North Dakota North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2833','NAD83(HPGN) / North Dakota South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2834','NAD83(HPGN) / Ohio North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2835','NAD83(HPGN) / Ohio South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2836','NAD83(HPGN) / Oklahoma North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2837','NAD83(HPGN) / Oklahoma South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2838','NAD83(HPGN) / Oregon North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2839','NAD83(HPGN) / Oregon South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2840','NAD83(HPGN) / Rhode Island','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2841','NAD83(HPGN) / South Dakota North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2842','NAD83(HPGN) / South Dakota South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2843','NAD83(HPGN) / Tennessee','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2844','NAD83(HPGN) / Texas North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2845','NAD83(HPGN) / Texas North Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2846','NAD83(HPGN) / Texas Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2847','NAD83(HPGN) / Texas South Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2848','NAD83(HPGN) / Texas South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2849','NAD83(HPGN) / Utah North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2850','NAD83(HPGN) / Utah Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2851','NAD83(HPGN) / Utah South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2852','NAD83(HPGN) / Vermont','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2853','NAD83(HPGN) / Virginia North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2854','NAD83(HPGN) / Virginia South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2855','NAD83(HPGN) / Washington North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2856','NAD83(HPGN) / Washington South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2857','NAD83(HPGN) / West Virginia North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2858','NAD83(HPGN) / West Virginia South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2859','NAD83(HPGN) / Wisconsin North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2860','NAD83(HPGN) / Wisconsin Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2861','NAD83(HPGN) / Wisconsin South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2862','NAD83(HPGN) / Wyoming East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2863','NAD83(HPGN) / Wyoming East Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2864','NAD83(HPGN) / Wyoming West Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2865','NAD83(HPGN) / Wyoming West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2866','NAD83(HPGN) / Puerto Rico and Virgin Is.','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2867','NAD83(HPGN) / Arizona East (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2868','NAD83(HPGN) / Arizona Central (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2869','NAD83(HPGN) / Arizona West (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2870','NAD83(HPGN) / California zone 1 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2871','NAD83(HPGN) / California zone 2 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2872','NAD83(HPGN) / California zone 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2873','NAD83(HPGN) / California zone 4 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2874','NAD83(HPGN) / California zone 5 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2875','NAD83(HPGN) / California zone 6 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2876','NAD83(HPGN) / Colorado North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2877','NAD83(HPGN) / Colorado Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2878','NAD83(HPGN) / Colorado South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2879','NAD83(HPGN) / Connecticut (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2880','NAD83(HPGN) / Delaware (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2881','NAD83(HPGN) / Florida East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2882','NAD83(HPGN) / Florida West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2883','NAD83(HPGN) / Florida North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2884','NAD83(HPGN) / Georgia East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2885','NAD83(HPGN) / Georgia West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2886','NAD83(HPGN) / Idaho East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2887','NAD83(HPGN) / Idaho Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2888','NAD83(HPGN) / Idaho West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2891','NAD83(HPGN) / Kentucky North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2892','NAD83(HPGN) / Kentucky South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2893','NAD83(HPGN) / Maryland (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2894','NAD83(HPGN) / Massachusetts Mainland (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2895','NAD83(HPGN) / Massachusetts Island (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2896','NAD83(HPGN) / Michigan North (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2897','NAD83(HPGN) / Michigan Central (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2898','NAD83(HPGN) / Michigan South (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2899','NAD83(HPGN) / Mississippi East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2900','NAD83(HPGN) / Mississippi West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2901','NAD83(HPGN) / Montana (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2902','NAD83(HPGN) / New Mexico East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2903','NAD83(HPGN) / New Mexico Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2904','NAD83(HPGN) / New Mexico West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2905','NAD83(HPGN) / New York East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2906','NAD83(HPGN) / New York Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2907','NAD83(HPGN) / New York West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2908','NAD83(HPGN) / New York Long Island (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2909','NAD83(HPGN) / North Dakota North (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2910','NAD83(HPGN) / North Dakota South (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2911','NAD83(HPGN) / Oklahoma North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2912','NAD83(HPGN) / Oklahoma South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2913','NAD83(HPGN) / Oregon North (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2914','NAD83(HPGN) / Oregon South (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2915','NAD83(HPGN) / Tennessee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2916','NAD83(HPGN) / Texas North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2917','NAD83(HPGN) / Texas North Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2918','NAD83(HPGN) / Texas Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2919','NAD83(HPGN) / Texas South Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2920','NAD83(HPGN) / Texas South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2921','NAD83(HPGN) / Utah North (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2922','NAD83(HPGN) / Utah Central (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2923','NAD83(HPGN) / Utah South (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2924','NAD83(HPGN) / Virginia North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2925','NAD83(HPGN) / Virginia South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2926','NAD83(HPGN) / Washington North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2927','NAD83(HPGN) / Washington South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2928','NAD83(HPGN) / Wisconsin North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2929','NAD83(HPGN) / Wisconsin Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2930','NAD83(HPGN) / Wisconsin South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2967','NAD83(HPGN) / Indiana East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2968','NAD83(HPGN) / Indiana West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2993','NAD83(HPGN) / LCC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2994','NAD83(HPGN) / Oregon GIC Lambert (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3088','NAD83 / Kentucky Single Zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6879','NAD83(2011) / Wisconsin Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3089','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3091','NAD83(HARN) / KY1Z (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4622','Sainte Anne','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4625','Fort Desaix','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4626','Piton des Neiges','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2970','Sainte Anne / UTM zn 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2973','Fort Desaix / UTM zn 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2990','Piton des Neiges / TM Reunion','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5757','IGN 1988 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5756','IGN 1987','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5758','IGN 1989 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5793','IGN 1950 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5794','IGN 1955 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5795','IGN 1951 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3106','Gulshan 303 / Bangladesh UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3108','ETRS89 / New Guernsey Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3109','ETRS89 / JTM','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5713','CVD28 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5713','Canadian Vertical Datum of 1928 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6879','NAD83(2011) / WI C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3110','Vicgrid','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4994','New Luzon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4683','New Luzon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4995','New Luzon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3125','New Luzon / Philippines zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3124','New Luzon / Philippines zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3123','New Luzon / Philippines zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3122','New Luzon / Philippines zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3121','New Luzon / Philippines zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21897','Bogota / Colombia Bogota','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21899','Bogota / Colombia 6E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21898','Bogota / Colombia 3E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21896','Bogota / Colombia 3W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6880','NAD83(2011) / NE (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3034','ETRS - LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3035','ETRS - LAEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3038','ETRS - TM26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3039','ETRS - TM27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3040','ETRS - TM28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3041','ETRS - TM29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3042','ETRS - TM30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3043','ETRS - TM31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3044','ETRS - TM32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','ETRS - TM33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3046','ETRS - TM34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3047','ETRS - TM35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3048','ETRS - TM36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3049','ETRS - TM37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3050','ETRS - TM38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3051','ETRS - TM39','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4936','ETRS89 / (X, Y, Z)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4937','ETRS89','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5730','EVRF_AMST / NH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6884','NAD83(CORS96) / Oregon North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2462','AL_ALB87 / TM_6','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5777','AL_DUR / NOH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5778','AT_TRIE / NOH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31281','AT_MGI / AT_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31282','AT_MGI / AT_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31283','AT_MGI / AT_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31370','(BE_BD72 / LAMB72 - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5786','BG_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31275','HR_HDKS / HR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31276','HR_HDKS / HR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2065','CZ_S-JTSK / KROVAK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2065','SK_S-JTSK / KROVAK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23032','(DK_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23033','(DK_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5733','DK_DK10 / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3301','EE_L-EST97 / EST_LAMB','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','EE_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','Baltic height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2393','FI_KKJ / FI_TM','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5717','FI_HELS / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2192','(FR_ED50 / EUROLAMB - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27562','(FR_NTF / FR_LAMB - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27564','(FR_NTF / FR_LAMB - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27561','(FR_NTF / FR_LAMB - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27563','(FR_NTF / FR_LAMB - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27572','(FR_NTF / FR_LAMB - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2154','(FR_RGF93 / LAMB93 - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5720','FR_MARS / NH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31466','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31467','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31468','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31469','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3398','DE_RD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3399','DE_RD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3396','DE_PD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3397','DE_PD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5785','DE_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5783','DE_AMST / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5784','DE_AMST / NOH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2399','DE_42/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2398','DE_42/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2397','DE_42/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','DE_ETRS89 / UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23030','(GI_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5701','GB_NEWL / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2100','(GR_GGRS87 / GR_TM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27700','(GB_OSGB36 / NATIONALGRID - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5787','HU_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5731','IE_MALH / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29902','(IE_IRELAND65 / IRELAND75_IRISHGRID - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29902','(NI_IRELAND65 / IRELAND75_IRISHGRID - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23033','(IT_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23032','(IT_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3003','(IT_ROMA40 / EAST_WEST - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3004','(IT_ROMA40 / EAST_WEST - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3059','LV_LKS-92 / LV_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2600','LT_LKS94 / LT_TM','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5774','LU_AMST / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2169','LU_LUREF / LU_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28992','(NL_RD / DUTCH_ST - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5709','NL_AMST / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3044','NO_ETRS89 / UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','NO_ETRS89 / UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3047','NO_ETRS89 / UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27391','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27392','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27393','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27394','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27395','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27396','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27397','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27398','NO_NGO1948 / NO_TM','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5776','NO_TREG / NOH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2180','PL_EUREF89 / 1992','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2179','PL_EUREF89 / 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2178','PL_EUREF89 / 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2177','PL_EUREF89 / 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2176','PL_EUREF89 / 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2171','PL_42/58 / 1965','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2172','PL_42/58 / 1965','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2173','PL_42/58 / 1965','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2174','PL_42/58 / 1965','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2175','PL_42/58 / 1965','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5780','PT_CASC / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2942','(PT_MAD / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27492','PT_D73 / TM_D73','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2190','(PT_AZO_ORIE / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6884','CORS96 / OR N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2189','(PT_AZO_CENT / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5779','SI_TRIE / NOH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2170','SI_D48 / SI_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2170','D48 / Slovenia Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23028','(ES_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23029','(ES_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23030','(ES_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23031','(ES_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5718','SE_AMST / NH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3021','SE_RT90 / SE_TM','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5728','CH_MARS / UNCOR','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5729','CH_MARS / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2056','(CH_CH1903+ / CH_PROJECTION+ - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21781','(CH_CH1903 / CH_PROJECTION - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5775','TR_ANT / OH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2319','TR_ED50 / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2320','TR_ED50 / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2321','TR_ED50 / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2322','TR_ED50 / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2323','TR_ED50 / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2324','TR_ED50 / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2325','TR_ED50 / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23035','(TR_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23036','(TR_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23037','(TR_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23038','(TR_ED50 / UTM - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5782','ES_ALIC / OH','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4692','MOP 1983','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4629','Tahaa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4628','Tahiti','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3306','MOP 1983 / UTM zone 5S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2977','Tahaa / UTM zone 5S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2976','Tahiti / UTM zone 6S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4688','MHEFO 55','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3303','MHEFO 55 / UTM zone 7S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3309','NAD27 / California (Teale) Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3310','NAD83 / California (Teale) Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3311','NAD83(HARN) / California (Teale) Albers','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4943','ETRS89','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4942','ETRS89','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4697','IGC 1962','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6886','NAD83(CORS96) / Oregon South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6886','CORS96 / OR S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3120','PL_42/58 / 1965','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3328','System GUGiK-80','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3329','System 1942/15 (3)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3330','System 1942/18 (3)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3331','System 1942/21 (3)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3332','System 1942/24 (3)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3333','System 1942/15 (6)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3334','System 1942/21 (6)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3335','System 1942/27 (6)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2172','System 1965 zone II','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2173','System 1965 zone III','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2174','System 1965 zone IV','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2175','System 1965 zone V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2176','PL-2000/15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2177','PL-2000/18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2178','PL-2000/21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2179','PL-2000/24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2180','PL-1992','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3120','System 1965 zone I','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3346','LKS94','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3346','LT_LKS94 / LT_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3346','Lietuvos Koordinaciu Sistema 1994','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4701','Bas Congo 1955','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3339','Bas Congo 1955 / Congo TM zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3340','Bas Congo 1955 / Congo TM zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3341','Bas Congo 1955 / Congo TM zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3342','Bas Congo 1955 / UTM zone 33S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3347','NAD83 / STC Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3348','NAD83(CSRS) / STC LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3348','NAD83 / STC Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6885','NAD83(CORS96) / OR N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6887','CORS96 / OR S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4616','Marco Astro','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4616','Selvagem Grande 1938','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2943','Selvagem Grande 1938 / UTM zone 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6799','NAD83(2011) / Oregon Bend-Vale zone (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4259','Mhast','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25932','Mhast / UTM zone 32S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4705','Mhast','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4704','Mhast','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3354','Mhast / UTM zone 32S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3353','Mhast / UTM zone 32S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4699','Le Pouce (Mauritius 94)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4699','Le Pouce (Mauritius PN 94)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3337','Le Pouce (Mauritius 94) / Mauritius Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3337','Le Pouce (Mauritius PN 94) / Mauritius Grid','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4700','Mauritanian Mining Cadastre 1999','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3367','Mauritanian Mining Cadastre 1999 / UTM zone 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3368','Mauritanian Mining Cadastre 1999 / UTM zone 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3369','Mauritanian Mining Cadastre 1999 / UTM zone 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6798','NAD83(2011) / Oregon Bend-Vale zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4725','Johnston Atoll 1961','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2987','St. Pierre et Miquelon 1950 / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4738','HK63','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4739','HK63(67)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7415','RDNAP','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4690','IGN79 Tahiti','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4639','Uvea SHOM 1978','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3355','S-650 TL / Red Belt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4706','S-650 TL','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2004','Montserrat 58 / British West Indies Grid','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4604','Montserrat 58','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3386','KKJ / Basic Coordinate System zone 0','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3387','KKJ / Basic Coordinate System zone 5','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4669','LKS94 (ETRS89)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32164','NAD83 / UTM zone 14N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32165','NAD83 / UTM zone 15N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32166','NAD83 / UTM zone 16N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32167','NAD83 / UTM zone 17N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32664','WGS 84 / UTM zone 14N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32665','WGS 84 / UTM zone 15N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32666','WGS 84 / UTM zone 16N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32667','WGS 84 / UTM zone 17N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4720','FGD 1986','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3143','FGD 1986 / Fiji Map Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3144','fk54','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3144','Faroe Cadastre 1954','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3145','fke','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3173','Faroe Cadastre 1989','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4752','Viti Levu 1916','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3140','Viti Levu 1916 / Viti Levu Grid','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4748','Vanua Levu 1917','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3139','Vanua Levu 1917 / Vanua Levu Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3400','NAD83 / 10TM AEP Forest','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3401','NAD83 / 10TM AEP Resource','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3403','NAD83 / 10TM AEP Resource','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3402','NAD83 / 10TM AEP Forest','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3854','ST74 0 gon 65:-1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3163','Lambert NC91','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4298','Timbalai 1968','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4298','BT68','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29849','BT68 / UTM zone 49N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29850','BT68 / UTM zone 50N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29849','Timbalai 1968 / UTM zone 49N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29850','Timbalai 1968 / UTM zone 50N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4245','MRT68','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24500','MRT68 / Singapore Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24547','MRT68 / UTM zone 47N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24548','MRT68 / UTM zone 48N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3169','RGNC / UTM zone 57S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3170','RGNC / UTM zone 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3171','RGNC / UTM zone 59S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4714','Bellevue (IGN)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4730','Santo (DOS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3143','Fiji 1986 / FMG','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3153','NAD83 / BC Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3173','fk89','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4753','FD54a','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3311','NAD83(HPGN) / California (Teale) Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3358','NAD83(HPGN) / North Carolina','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3359','NAD83(HPGN) / North Carolina (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3360','NAD83(HPGN) / South Carolina','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3361','NAD83(HPGN) / South Carolina (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3362','NAD83(HPGN) / Pennsylvania North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3363','NAD83(HPGN) / Pennsylvania North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3364','NAD83(HPGN) / Pennsylvania South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3365','NAD83(HPGN) / Pennsylvania South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3075','Maine Coordinate System of 2000 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3076','Maine Coordinate System of 2000 Central Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3077','Maine Coordinate System of 2000 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3079','Michigan GeoRef','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3085','TCMS/AEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3085','Texas Centric Mapping System / Albers Equal Area','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3084','Texas Centric Mapping System / Lambert Conformal','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3084','TCMS/ LC','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4755','IGD95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4898','IGD95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4897','IGD95','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23866','IGD95 / UTM zone 46N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23867','IGD95 / UTM zone 47N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23868','IGD95 / UTM zone 48N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23869','IGD95 / UTM zone 49N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23870','IGD95 / UTM zone 50N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23871','IGD95 / UTM zone 51N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23872','IGD95 / UTM zone 52N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23877','IGD95 / UTM zone 47S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23878','IGD95 / UTM zone 48S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23879','IGD95 / UTM zone 49S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23880','IGD95 / UTM zone 50S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23881','IGD95 / UTM zone 51S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23882','IGD95 / UTM zone 52S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23883','IGD95 / UTM zone 53S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23884','IGD95 / UTM zone 54S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3404','NAD83(HPGN) / North Carolina (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3414','SVY21 plane coordinate system','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3174','NAD83 / GLGIS Albers (basin)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3175','NAD83 / GLGIS Albers (basin+SLS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9373','ETRS89 / MML07 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3415','WGS 72BE / SCS Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3425','NAD83(HPGN) / Iowa North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3426','NAD83(HPGN) / Iowa South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3427','NAD83(HPGN) / Kansas North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3428','NAD83(HPGN) / Kansas South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3429','NAD83(HPGN) / Nevada East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3430','NAD83(HPGN) / Nevada Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3431','NAD83(HPGN) / Nevada West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3432','NAD83(HPGN) / New Jersey (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3441','NAD83(HPGN) / Arkansas North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3442','NAD83(HPGN) / Arkansas South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3443','NAD83(HPGN) / Illinois East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3444','NAD83(HPGN) / Illinois West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3445','NAD83(HPGN) / New Hampshire (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3446','NAD83(HPGN) / Rhode Island (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3447','ETRS89 / Lambert 2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4746','DHDN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3397','PD/83 / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4745','DHDN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3398','RD/83 / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3399','RD/83 / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29702','Tananarive / Laborde app','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3448','WGS 84 / Jamaica Metric Grid 2001','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32199','NAD83 / Louisiana Offshore (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3072','NAD83 / Maine CS2000 East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3074','NAD83 / Maine CS2000 West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2759','NAD83(HARN) / Alabama East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2760','NAD83(HARN) / Alabama West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2762','NAD83(HARN) / Arizona Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2761','NAD83(HARN) / Arizona East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2763','NAD83(HARN) / Arizona West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2764','NAD83(HARN) / Arkansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2765','NAD83(HARN) / Arkansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2766','NAD83(HARN) / California zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2767','NAD83(HARN) / California zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2768','NAD83(HARN) / California zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2769','NAD83(HARN) / California zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2770','NAD83(HARN) / California zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2771','NAD83(HARN) / California zone 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2773','NAD83(HARN) / Colorado Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2772','NAD83(HARN) / Colorado North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2774','NAD83(HARN) / Colorado South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2775','NAD83(HARN) / Connecticut (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2776','NAD83(HARN) / Delaware (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2777','NAD83(HARN) / Florida East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2779','NAD83(HARN) / Florida North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2778','NAD83(HARN) / Florida West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2780','NAD83(HARN) / Georgia East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2781','NAD83(HARN) / Georgia West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2782','NAD83(HARN) / Hawaii zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2783','NAD83(HARN) / Hawaii zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2784','NAD83(HARN) / Hawaii zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2785','NAD83(HARN) / Hawaii zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2786','NAD83(HARN) / Hawaii zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2788','NAD83(HARN) / Idaho Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2787','NAD83(HARN) / Idaho East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2789','NAD83(HARN) / Idaho West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2790','NAD83(HARN) / IL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2791','NAD83(HARN) / Illinois West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2792','NAD83(HARN) / Indiana East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2793','NAD83(HARN) / Indiana West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2794','NAD83(HARN) / Iowa North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2795','NAD83(HARN) / Iowa South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2796','NAD83(HARN) / Kansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2797','NAD83(HARN) / Kansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2798','NAD83(HARN) / Kentucky North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2799','NAD83(HARN) / Kentucky South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3090','NAD83(HARN) / Kentucky Single Zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2800','NAD83(HARN) / Louisiana North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3456','NAD83(HPGN) / Louisiana North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2801','NAD83(HARN) / Louisiana South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3457','NAD83(HPGN) / Louisiana South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3075','NAD83(HARN) / Maine CS2000 East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3077','NAD83(HARN) / Maine CS2000 West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6867','CORS96 / OR LCC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6868','CORS96 / OR GIC Lam (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8358','Bpv depth','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6785','CORS96 / OCRS_BKE (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6789','CORS96 / OCRS_BKF (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6784','CORS96 / OCRS_BKE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6788','CORS96 / OCRS_BKF (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6793','CORS96 / OCRS_BRP (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6915','SE Island / UTM zone 40N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2802','NAD83(HARN) / Maine East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2803','NAD83(HARN) / Maine West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2804','NAD83(HARN) / Maryland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2806','NAD83(HARN) / Massachusetts Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2805','NAD83(HARN) / Massachusetts Mainland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2808','NAD83(HARN) / Michigan Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2807','NAD83(HARN) / Michigan North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2809','NAD83(HARN) / Michigan South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2811','NAD83(HARN) / Minnesota Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2810','NAD83(HARN) / Minnesota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2812','NAD83(HARN) / Minnesota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2813','NAD83(HARN) / Mississippi East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2814','NAD83(HARN) / Mississippi West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2816','NAD83(HARN) / Missouri Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2815','NAD83(HARN) / Missouri East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2817','NAD83(HARN) / Missouri West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2818','NAD83(HARN) / Montana (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2819','NAD83(HARN) / Nebraska (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2821','NAD83(HARN) / Nevada Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2820','NAD83(HARN) / Nevada East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2822','NAD83(HARN) / Nevada West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2823','NAD83(HARN) / New Hampshire (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2824','NAD83(HARN) / New Jersey (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2826','NAD83(HARN) / New Mexico Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2825','NAD83(HARN) / New Mexico East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2827','NAD83(HARN) / New Mexico West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2829','NAD83(HARN) / New York Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2828','NAD83(HARN) / New York East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2831','NAD83(HARN) / New York Long Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2830','NAD83(HARN) / New York West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3358','NAD83(HARN) / North Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2832','NAD83(HARN) / North Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2833','NAD83(HARN) / North Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2834','NAD83(HARN) / Ohio North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2835','NAD83(HARN) / Ohio South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2836','NAD83(HARN) / Oklahoma North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2837','NAD83(HARN) / Oklahoma South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2838','NAD83(HARN) / Oregon North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2839','NAD83(HARN) / Oregon South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3362','NAD83(HARN) / Pennsylvania North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3364','NAD83(HARN) / Pennsylvania South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2840','NAD83(HARN) / Rhode Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3360','NAD83(HARN) / South Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2841','NAD83(HARN) / South Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3458','NAD83(HPGN) / South Dakota North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2842','NAD83(HARN) / South Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3459','NAD83(HPGN) / South Dakota South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2843','NAD83(HARN) / Tennessee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2846','NAD83(HARN) / Texas Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2844','NAD83(HARN) / Texas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2845','NAD83(HARN) / Texas North Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2848','NAD83(HARN) / Texas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2847','NAD83(HARN) / Texas South Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2850','NAD83(HARN) / Utah Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2849','NAD83(HARN) / Utah North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2851','NAD83(HARN) / Utah South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2852','NAD83(HARN) / Vermont (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2853','NAD83(HARN) / Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2854','NAD83(HARN) / Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2855','NAD83(HARN) / Washington North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2856','NAD83(HARN) / Washington South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2857','NAD83(HARN) / West Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2858','NAD83(HARN) / West Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2860','NAD83(HARN) / Wisconsin Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2859','NAD83(HARN) / Wisconsin North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2861','NAD83(HARN) / Wisconsin South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2862','NAD83(HARN) / Wyoming East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2863','NAD83(HARN) / Wyoming East Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2865','NAD83(HARN) / Wyoming West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2864','NAD83(HARN) / Wyoming West Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3568','NAD83(HPGN) / Utah North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3569','NAD83(HPGN) / Utah Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3570','NAD83(HPGN) / Utah South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3448','JAD2001 / Jamaica Metric Grid 2001','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9374','ETRS89 / MML07 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3038','ETRF89 / TM26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3039','ETRF89 / TM27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3050','ETRF89 / TM38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3051','ETRF89 / TM39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6922','NAD83 / Kansas LCC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6924','NAD83(2011) / Kansas LCC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3396','PD/83 / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3463','Maine Coordinate System of 2000 Central Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3463','NAD83 / Maine CS2000 Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3464','Maine Coordinate System of 2000 Central Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3464','NAD83(HARN) / Maine CS2000 Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3464','NAD83(HPGN) / Maine CS2000 Central','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22275','South African Coordinate System zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22277','South African Coordinate System zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22279','South African Coordinate System zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22281','South African Coordinate System zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22283','South African Coordinate System zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22285','South African Coordinate System zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22287','South African Coordinate System zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22289','South African Coordinate System zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22291','South African Coordinate System zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22293','South African Coordinate System zone 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29371','South West African Coord. System zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29373','South West African Coord. System zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29375','South West African Coord. System zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29377','South West African Coord. System zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29379','South West African Coord. System zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29381','South West African Coord. System zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29383','South West African Coord. System zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29385','South West African Coord. System zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3465','NAD83(NSRS2007) / Alabama East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3466','NAD83(NSRS2007) / Alabama West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3468','NAD83(NSRS2007) / Alaska zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3477','NAD83(NSRS2007) / Alaska zone 10 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3469','NAD83(NSRS2007) / Alaska zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3470','NAD83(NSRS2007) / Alaska zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3471','NAD83(NSRS2007) / Alaska zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3472','NAD83(NSRS2007) / Alaska zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3473','NAD83(NSRS2007) / Alaska zone 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3474','NAD83(NSRS2007) / Alaska zone 7 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3475','NAD83(NSRS2007) / Alaska zone 8 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3476','NAD83(NSRS2007) / Alaska zone 9 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3478','NAD83(NSRS2007) / Arizona Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3480','NAD83(NSRS2007) / Arizona East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3482','NAD83(NSRS2007) / Arizona West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3484','NAD83(NSRS2007) / Arkansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3486','NAD83(NSRS2007) / Arkansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3489','NAD83(NSRS2007) / California zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3491','NAD83(NSRS2007) / California zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3493','NAD83(NSRS2007) / California zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3495','NAD83(NSRS2007) / California zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3497','NAD83(NSRS2007) / California zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3499','NAD83(NSRS2007) / California zone 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3501','NAD83(NSRS2007) / Colorado Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3503','NAD83(NSRS2007) / Colorado North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3505','NAD83(NSRS2007) / Colorado South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3507','NAD83(NSRS2007) / Connecticut (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3509','NAD83(NSRS2007) / Delaware (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3511','NAD83(NSRS2007) / Florida East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3514','NAD83(NSRS2007) / Florida North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3516','NAD83(NSRS2007) / Florida West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3518','NAD83(NSRS2007) / Georgia East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3520','NAD83(NSRS2007) / Georgia West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3522','NAD83(NSRS2007) / Idaho Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3524','NAD83(NSRS2007) / Idaho East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3526','NAD83(NSRS2007) / Idaho West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3528','NAD83(NSRS2007) / Illinois East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3530','NAD83(NSRS2007) / Illinois West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3532','NAD83(NSRS2007) / Indiana East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3534','NAD83(NSRS2007) / Indiana West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3536','NAD83(NSRS2007) / Iowa North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3538','NAD83(NSRS2007) / Iowa South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3540','NAD83(NSRS2007) / Kansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3542','NAD83(NSRS2007) / Kansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3544','NAD83(NSRS2007) / Kentucky North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3546','NAD83(NSRS2007) / Kentucky Single Zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3548','NAD83(NSRS2007) / Kentucky South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3550','NAD83(NSRS2007) / Louisiana North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3552','NAD83(NSRS2007) / Louisiana South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3554','NAD83(NSRS2007) / Maine CS2000 Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3555','NAD83(NSRS2007) / Maine CS2000 East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3556','NAD83(NSRS2007) / Maine CS2000 West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3557','NAD83(NSRS2007) / Maine CS83 East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3558','NAD83(NSRS2007) / Maine West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3559','NAD83(NSRS2007) / Maryland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3583','NAD83(NSRS2007) / Massachusetts Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3585','NAD83(NSRS2007) / Massachusetts Mainland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3587','NAD83(NSRS2007) / Michigan Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3589','NAD83(NSRS2007) / Michigan North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3592','NAD83(NSRS2007) / Michigan South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3594','NAD83(NSRS2007) / Minnesota Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3595','NAD83(NSRS2007) / Minnesota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3596','NAD83(NSRS2007) / Minnesota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3597','NAD83(NSRS2007) / Mississippi East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3599','NAD83(NSRS2007) / Mississippi West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3601','NAD83(NSRS2007) / Missouri Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3602','NAD83(NSRS2007) / Missouri East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3603','NAD83(NSRS2007) / Missouri West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3604','NAD83(NSRS2007) / Montana (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3606','NAD83(NSRS2007) / Nebraska (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3607','NAD83(NSRS2007) / Nevada Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3609','NAD83(NSRS2007) / Nevada East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3611','NAD83(NSRS2007) / Nevada West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3613','NAD83(NSRS2007) / New Hampshire (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3615','NAD83(NSRS2007) / New Jersey (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3617','NAD83(NSRS2007) / New Mexico Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3619','NAD83(NSRS2007) / New Mexico East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3621','NAD83(NSRS2007) / New Mexico West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3623','NAD83(NSRS2007) / New York Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3625','NAD83(NSRS2007) / New York East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3627','NAD83(NSRS2007) / New York Long Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3629','NAD83(NSRS2007) / New York West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3631','NAD83(NSRS2007) / North Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3633','NAD83(NSRS2007) / North Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3635','NAD83(NSRS2007) / North Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3637','NAD83(NSRS2007) / Ohio North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3638','NAD83(NSRS2007) / Ohio South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3639','NAD83(NSRS2007) / Oklahoma North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3641','NAD83(NSRS2007) / Oklahoma South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3643','NAD83(2007) / Oregon LCC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3645','NAD83(NSRS2007) / Oregon North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3647','NAD83(NSRS2007) / Oregon South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3649','NAD83(NSRS2007) / Pennsylvania North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3651','NAD83(NSRS2007) / Pennsylvania South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3653','NAD83(NSRS2007) / Rhode Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3655','NAD83(NSRS2007) / South Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3657','NAD83(NSRS2007) / South Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3659','NAD83(NSRS2007) / South Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3661','NAD83(NSRS2007) / Tennessee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3663','NAD83(NSRS2007) / Texas Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3667','NAD83(NSRS2007) / Texas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3669','NAD83(NSRS2007) / Texas North Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3671','NAD83(NSRS2007) / Texas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3673','NAD83(NSRS2007) / Texas South Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3675','NAD83(NSRS2007) / Utah Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3678','NAD83(NSRS2007) / Utah North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3681','NAD83(NSRS2007) / Utah South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3684','NAD83(NSRS2007) / Vermont (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3685','NAD83(NSRS2007) / Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3687','NAD83(NSRS2007) / Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3689','NAD83(NSRS2007) / Washington North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3691','NAD83(NSRS2007) / Washington South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3695','NAD83(NSRS2007) / Wisconsin Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3697','NAD83(NSRS2007) / Wisconsin North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3699','NAD83(NSRS2007) / Wisconsin South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3702','NAD83(NSRS2007) / Wyoming East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3703','NAD83(NSRS2007) / Wyoming East Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3705','NAD83(NSRS2007) / Wyoming West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3704','NAD83(NSRS2007) / Wyoming West Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3693','NAD83(NSRS2007) / West Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3694','NAD83(NSRS2007) / West Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3727','Piton des Neiges / TM Reunion','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3740','NAD83(HPGN) / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3741','NAD83(HPGN) / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3742','NAD83(HPGN) / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3743','NAD83(HPGN) / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3744','NAD83(HPGN) / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3745','NAD83(HPGN) / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3746','NAD83(HPGN) / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3747','NAD83(HPGN) / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3748','NAD83(HPGN) / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3749','NAD83(HPGN) / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3750','NAD83(HPGN) / UTM zone 4N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3751','NAD83(HPGN) / UTM zone 5N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3760','NAD83(HPGN) / Hawaii zone 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3546','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3547','NAD83(NSRS) / KY1Z (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3547','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3447','BE_ETRS89 / LB05','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3765','HTRS96 / TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3766','HTRS96 / LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3770','BNG2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3769','Bermuda National Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26825','NAD83(HPGN) / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26826','NAD83(HPGN) / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26830','NAD83(HPGN) / Minnesota North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26831','NAD83(HPGN) / Minnesota Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26832','NAD83(HPGN) / Minnesota South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26833','NAD83(HPGN) / Nebraska (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26834','NAD83(HPGN) / West Virginia North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26835','NAD83(HPGN) / West Virginia South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26826','NAD83(HARN) / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26825','NAD83(HARN) / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26815','NAD83 / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26814','NAD83 / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3554','Maine Coordinate System of 2000 Central Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3555','Maine Coordinate System of 2000 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3556','Maine Coordinate System of 2000 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3557','Maine Coordinate System of 1983 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3558','Maine Coordinate System of 1983 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26837','NAD83(NSRS2007) / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26836','NAD83(NSRS2007) / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5612','Baltic depth','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8518','NAD83(2011) / KS RCS zone 1 Goodland','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5612','Kronstadt 1977 depth','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4274','D73','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4803','DLx','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3771','NAD27 / Alberta 3TM ref merid 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3772','NAD27 / Alberta 3TM ref merid 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3773','NAD27 / Alberta 3TM ref merid 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3774','NAD27 / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3775','NAD83 / Alberta 3TM ref merid 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3776','NAD83 / Alberta 3TM ref merid 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3777','NAD83 / Alberta 3TM ref merid 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3778','NAD83 / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3779','NAD83(CSRS) / Alberta 3TM ref merid 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3780','NAD83(CSRS) / Alberta 3TM ref merid 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3781','NAD83(CSRS) / Alberta 3TM ref merid 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3782','NAD83(CSRS) / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3787','D48 / GK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3788','NZGD2000 / AKTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3789','NZGD2000 / CATM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3790','NZGD2000 / AITM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3791','NZGD2000 / RITM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3793','NZGD2000 / CITM2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4673','CI1979','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4672','CI1971','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2193','NZGD2000 / New Zealand Transverse Mercator','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2105','NZGD2000 / Mount Eden Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2106','NZGD2000 / Bay of Plenty Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2107','NZGD2000 / Poverty Bay Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2108','NZGD2000 / Hawkes Bay Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2109','NZGD2000 / Taranaki Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2110','NZGD2000 / Turhirangi Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2111','NZGD2000 / Wanganui Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2112','NZGD2000 / Wairarapa Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2113','NZGD2000 / Wellington Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2114','NZGD2000 / Collingwood Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2115','NZGD2000 / Nelson Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2116','NZGD2000 / Karamea Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2117','NZGD2000 / Buller Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2118','NZGD2000 / Grey Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2119','NZGD2000 / Amuri Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2120','NZGD2000 / Marlborough Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2121','NZGD2000 / Hokitika Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2122','NZGD2000 / Okarito Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2123','NZGD2000 / Jacksons Bay Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2124','NZGD2000 / Mount Pleasant Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2125','NZGD2000 / Gawler Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2126','NZGD2000 / Timaru Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2127','NZGD2000 / Lindis Peak Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2128','NZGD2000 / Mount Nicholas Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2129','NZGD2000 / Mount York Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2130','NZGD2000 / Observation Point Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2131','NZGD2000 / North Taieri Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2132','NZGD2000 / Bluff Circuit 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2105','NZGD2000 / EDENTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2106','NZGD2000 / PLENTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2107','NZGD2000 / POVETM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2108','NZGD2000 / HAWKTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2109','NZGD2000 / TARATM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2110','NZGD2000 / TUHITM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2111','NZGD2000 / WANGTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2112','NZGD2000 / WAIRTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2113','NZGD2000 / WELLTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2114','NZGD2000 / COLLTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2115','NZGD2000 / NELSTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2116','NZGD2000 / KARATM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2117','NZGD2000 / BULLTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2118','NZGD2000 / GREYTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2119','NZGD2000 / AMURTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2120','NZGD2000 / MARLTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2121','NZGD2000 / HOKITM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2122','NZGD2000 / OKARTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2123','NZGD2000 / JACKTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2124','NZGD2000 / PLEATM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2125','NZGD2000 / GAWLTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2126','NZGD2000 / TIMATM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2127','NZGD2000 / LINDTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2128','NZGD2000 / NICHTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2129','NZGD2000 / YORKTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2130','NZGD2000 / OBSETM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2131','NZGD2000 / TAIETM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2132','NZGD2000 / BLUFTM2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2193','NZGD2000 / NZTM2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5759','Auckland height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5760','Bluff height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5761','Dunedin height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5762','Gisborne height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5763','Lyttelton height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5764','Moturiki height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5765','Napier height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5766','Nelson height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5767','One Tree Point height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5768','Tararu height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5769','Taranaki height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5770','Wellington height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5771','Chatham Island height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5772','Stewart Island height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5739','Hong Kong Chart Datum depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5788','PWD height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5740','Newlyn (Orkney Isles) height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4883','D96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4882','D96','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4765','D96','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3794','D96/TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26847','NAD83 / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26848','NAD83 / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26855','NAD83(HPGN) / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26855','NAD83(HARN) / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26856','NAD83(HARN) / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26856','NAD83(HPGN) / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26863','NAD83(NSRS2007) / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26864','NAD83(NSRS2007) / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26857','NAD83(HPGN) / Minnesota North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26858','NAD83(HPGN) / Minnesota Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26859','NAD83(HPGN) / Minnesota South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26860','NAD83(HPGN) / Nebraska (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26861','NAD83(HPGN) / West Virginia North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26862','NAD83(HPGN) / West Virginia South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3800','NAD27 / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3801','NAD83 / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3802','NAD83(CSRS) / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9378','727','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3812','ETRS89 / Lambert 2008','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3814','NAD83 / MSTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3815','NAD83(HARN) / MSTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3815','NAD83(HPGN) / Mississippi TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3816','NAD83(NSRS2007) / MSTM','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9378','IGb14 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3812','ETRS89 / LB08','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3447','ETRS89 / LB05','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31370','BD72 / LB72','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4236','Hu Tzu Shan','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4179','Pulkovo 1942(56)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4178','Uniform Astro-Geodetic Network (UAGN) 1983','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4179','Pulkovo 1942(57)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4178','S-42','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4179','Uniform Astro-Geodetic Network (UAGN) 1956','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4179','42/58','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4179','S-42','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4284','S-42','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4200','S-95','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3333','S-42 zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3334','S-42 zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3334','S-42 zone 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3335','S-42 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3335','S-42 zone 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3335','Pulkovo 1942(58) / 6-degree Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3334','Pulkovo 1942(58) / 6-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3333','Pulkovo 1942(58) / 6-degree Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3834','Pulkovo 1942(83) / 6-degree Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3834','S-42 zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3833','Pulkovo 1942(58) / 6-degree Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3833','S-42 zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3835','Pulkovo 1942(83) / 6-degree Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3835','S-42 zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3836','Pulkovo 1942(83) / 6-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3836','S-42 zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3844','Stereo 70','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3844','S-42 / Stereographic 1970','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3844','Dealul Piscului 1970/ Stereo 70','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4316','Dealul Piscului 1933','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31600','Dealul Piscului 1933/ Stereo 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31600','Stereo 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3848','SWEREF99 / RT90 0 gon 0:-15 emulation','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3849','SWEREF99 / RT90 2.5 gon O 0:-15 emulation','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3847','SWEREF99 / RT90 2.5 gon V 0:-15 emulation','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3850','SWEREF99 / RT90 5 gon O 0:-15 emulation','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3846','SWEREF99 / RT90 5 gon V 0:-15 emulation','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3845','SWEREF99 / RT90 7.5 gon V 0:-15 emulation','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21782','LV03C-G','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21781','LV03M','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2031','NAD27(CGQ77) / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2032','NAD27(CGQ77) / UTM 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2033','NAD27(CGQ77) / UTM 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2034','NAD27(CGQ77) / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2035','NAD27(CGQ77) / UTM 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2057','Rassadiran /Nakhl e Taqi','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2058','ED50(ED77) / UTM 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2059','ED50(ED77) / UTM 39N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2060','ED50(ED77) / UTM 40N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2061','ED50(ED77) / UTM 41N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2063','Dabola 1981 / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2064','Dabola 1981 / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2104','Lake / La Rosa Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2136','Accra / Ghana Nat. Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2138','CGQ77 / Quebec Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2159','Sierra Leone 24 / Colony','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2160','Sierra Leone 24 / WarOff','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2161','Sierra Leone 68 /UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2162','Sierra Leone 68 /UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2163','US National Atlas EA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2189','Azores Cen. 48 / UTM 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2190','Sao Braz 1940 / UTM 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2192','ED50 / France EuroLamb','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2195','NAD83(HARN) / UTM 2S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2215','Manoca 1962 / UTM 32N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2216','Qornoq 1927 / UTM 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2217','Qornoq 1927 / UTM 23N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2218','Scoresbysund / GRL 5 E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2221','Scoresbysund / GRL 6 E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2222','NAD83 / Arizona E (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2223','NAD83 / Arizona Cen (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2224','NAD83 / Arizona W (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2225','NAD83 / CA zone 1 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2226','NAD83 / CA zone 2 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2227','NAD83 / CA zone 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2228','NAD83 / CA zone 4 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2229','NAD83 / CA zone 5 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2230','NAD83 / CA zone 6 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2231','NAD83 / CO North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2232','NAD83 / CO Cen (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2233','NAD83 / CO South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2234','NAD83 / CT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2236','NAD83 / FL East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2237','NAD83 / FL West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2238','NAD83 / FL North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2239','NAD83 / Georgia E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2240','NAD83 / Georgia W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2241','NAD83 / Idaho E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2242','NAD83 / Idaho Cen (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2243','NAD83 / Idaho W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2246','NAD83 / KY North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2247','NAD83 / KY South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2249','NAD83 / MA Mainld (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2250','NAD83 / MA Island (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2251','NAD83 / Michigan N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2252','NAD83 / Michigan C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2253','NAD83 / Michigan S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2254','NAD83 / MS East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2255','NAD83 / MS West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2257','NAD83 / New Mex E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2258','NAD83 / New Mex C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2259','NAD83 / New Mex W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2260','NAD83 / NY East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2261','NAD83 / NY C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2262','NAD83 / NY W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2263','NAD83 / NY Island (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2264','NAD83 / NCarolina (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2265','NAD83 / N Dakota N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2266','NAD83 / N Dakota S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2267','NAD83 / OK North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2268','NAD83 / OK South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2269','NAD83 / Oregon N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2270','NAD83 / Oregon S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2271','NAD83 / PA North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2272','NAD83 / PA South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2273','NAD83 / S Carolina (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2275','NAD83 / Texas N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2276','NAD83 / Texas NC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2277','NAD83 / Texas C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2278','NAD83 / Texas SC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2279','NAD83 / Texas S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2281','NAD83 / Utah Cen. (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2283','NAD83 / VA North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2284','NAD83 / VA South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2285','NAD83 / WA North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2286','NAD83 / WA South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2287','NAD83 / WI North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2288','NAD83 / WI Cen. (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2289','NAD83 / WI South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2296','Ammassalik 58 / GRL 7 E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2298','Qornoq 1927 / GRL 2 east','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2299','Qornoq 1927 / GRL 2 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2301','Qornoq 1927 / GRL 3 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2303','Qornoq 1927 / GRL 4 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2304','Qornoq 1927 / GRL 5 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2305','Qornoq 1927 / GRL 6 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2306','Qornoq 1927 / GRL 7 west','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2307','Qornoq 1927 / GRL 8 east','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2314','Trinidad 03 Grid (ftCla)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2315','C Inchauspe / UTM 19S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2316','C Inchauspe / UTM 20S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2318','Ain el Abd / Aramco Lamb','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2327','Xian 1980 / G-K zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2328','Xian 1980 / G-K zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2329','Xian 1980 / G-K zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2330','Xian 1980 / G-K zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2331','Xian 1980 / G-K zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2332','Xian 1980 / G-K zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2334','Xian 1980 / G-K zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2335','Xian 1980 / G-K zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2336','Xian 1980 / G-K zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2337','Xian 1980 / G-K zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2338','Xian 1980 / G-K CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2339','Xian 1980 / G-K CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2340','Xian 1980 / G-K CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2341','Xian 1980 / G-K CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2342','Xian 1980 / G-K CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2343','Xian 1980 / G-K CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2344','Xian 1980 / G-K CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2345','Xian 1980 / G-K CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2346','Xian 1980 / G-K CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2347','Xian 1980 / G-K CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2348','Xian 1980 / G-K CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2349','Xian 1980 / 3GK zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2350','Xian 1980 / 3GK zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2351','Xian 1980 / 3GK zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2352','Xian 1980 / 3GK zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2353','Xian 1980 / 3GK zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2354','Xian 1980 / 3GK zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2355','Xian 1980 / 3GK zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2356','Xian 1980 / 3GK zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2357','Xian 1980 / 3GK zone 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2358','Xian 1980 / 3GK zone 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2359','Xian 1980 / 3GK zone 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2360','Xian 1980 / 3GK zone 36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2361','Xian 1980 / 3GK zone 37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2362','Xian 1980 / 3GK zone 38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2363','Xian 1980 / 3GK zone 39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2364','Xian 1980 / 3GK zone 40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2365','Xian 1980 / 3GK zone 41','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2366','Xian 1980 / 3GK zone 42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2367','Xian 1980 / 3GK zone 43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2368','Xian 1980 / 3GK zone 44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2369','Xian 1980 / 3GK zone 45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2370','Xian 1980 / 3GK CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2371','Xian 1980 / 3GK CM 78E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2372','Xian 1980 / 3GK CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2373','Xian 1980 / 3GK CM 84E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2374','Xian 1980 / 3GK CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2375','Xian 1980 / 3GK CM 90E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2376','Xian 1980 / 3GK CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2377','Xian 1980 / 3GK CM 96E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2378','Xian 1980 / 3GK CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2379','Xian 1980 / 3GK CM 102E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2380','Xian 1980 / 3GK CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2381','Xian 1980 / 3GK CM 108E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2382','Xian 1980 / 3GK CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2383','Xian 1980 / 3GK CM 114E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2384','Xian 1980 / 3GK CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2385','Xian 1980 / 3GK CM 120E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2386','Xian 1980 / 3GK CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2387','Xian 1980 / 3GK CM 126E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2388','Xian 1980 / 3GK CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2389','Xian 1980 / 3GK CM 132E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2390','Xian 1980 / 3GK CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2397','Pulkovo 42(83) / 3GK zn3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2398','Pulkovo 42(83) / 3GK zn4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2399','Pulkovo 42(83) / 3GK zn5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2401','Beijing 1954 / 3GK zn 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2402','Beijing 1954 / 3GK zn 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2403','Beijing 1954 / 3GK zn 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2404','Beijing 1954 / 3GK zn 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2405','Beijing 1954 / 3GK zn 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2406','Beijing 1954 / 3GK zn 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2407','Beijing 1954 / 3GK zn 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2408','Beijing 1954 / 3GK zn 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2409','Beijing 1954 / 3GK zn 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2410','Beijing 1954 / 3GK zn 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2411','Beijing 1954 / 3GK zn 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2412','Beijing 1954 / 3GK zn 36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2413','Beijing 1954 / 3GK zn 37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2414','Beijing 1954 / 3GK zn 38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2415','Beijing 1954 / 3GK zn 39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2416','Beijing 1954 / 3GK zn 40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2417','Beijing 1954 / 3GK zn 41','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2418','Beijing 1954 / 3GK zn 42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2419','Beijing 1954 / 3GK zn 43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2420','Beijing 1954 / 3GK zn 44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2421','Beijing 1954 / 3GK zn 45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2422','Beijing 1954 / 3GK 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2423','Beijing 1954 / 3GK 78E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2424','Beijing 1954 / 3GK 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2425','Beijing 1954 / 3GK 84E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2426','Beijing 1954 / 3GK 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2427','Beijing 1954 / 3GK 90E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2428','Beijing 1954 / 3GK 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2429','Beijing 1954 / 3GK 96E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2430','Beijing 1954 / 3GK 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2431','Beijing 1954 / 3GK 102E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2432','Beijing 1954 / 3GK 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2433','Beijing 1954 / 3GK 108E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2434','Beijing 1954 / 3GK 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2435','Beijing 1954 / 3GK 114E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2436','Beijing 1954 / 3GK 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2437','Beijing 1954 / 3GK 120E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2438','Beijing 1954 / 3GK 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2439','Beijing 1954 / 3GK 126E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2440','Beijing 1954 / 3GK 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2441','Beijing 1954 / 3GK 132E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2442','Beijing 1954 / 3GK 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2443','JGD2000 / Japan zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2444','JGD2000 / Japan zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2445','JGD2000 / Japan zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2446','JGD2000 / Japan zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2447','JGD2000 / Japan zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2448','JGD2000 / Japan zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2449','JGD2000 / Japan zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2450','JGD2000 / Japan zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2451','JGD2000 / Japan zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2452','JGD2000 / Japan zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2453','JGD2000 / Japan zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2454','JGD2000 / Japan zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2455','JGD2000 / Japan zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2456','JGD2000 / Japan zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2457','JGD2000 / Japan zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2458','JGD2000 / Japan zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2459','JGD2000 / Japan zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2460','JGD2000 / Japan zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2461','JGD2000 / Japan zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2462','Albanian 1987 / GK zn 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2463','Pulkovo 1995 / 6GK 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2464','Pulkovo 1995 / 6GK 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2465','Pulkovo 1995 / 6GK 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2466','Pulkovo 1995 / 6GK 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2467','Pulkovo 1995 / 6GK 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2468','Pulkovo 1995 / 6GK 51E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2469','Pulkovo 1995 / 6GK 57E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2470','Pulkovo 1995 / 6GK 63E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2471','Pulkovo 1995 / 6GK 69E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2472','Pulkovo 1995 / 6GK 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2473','Pulkovo 1995 / 6GK 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2474','Pulkovo 1995 / 6GK 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2475','Pulkovo 1995 / 6GK 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2476','Pulkovo 1995 / 6GK 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2477','Pulkovo 1995 / 6GK 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2478','Pulkovo 1995 / 6GK 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2479','Pulkovo 1995 / 6GK 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2480','Pulkovo 1995 / 6GK 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2481','Pulkovo 1995 / 6GK 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2482','Pulkovo 1995 / 6GK 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2483','Pulkovo 1995 / 6GK 141E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2484','Pulkovo 1995 / 6GK 147E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2485','Pulkovo 1995 / 6GK 153E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2486','Pulkovo 1995 / 6GK 159E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2487','Pulkovo 1995 / 6GK 165E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2488','Pulkovo 1995 / 6GK 171E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2489','Pulkovo 1995 / 6GK 177E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2490','Pulkovo 1995 / 6GK 177W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2491','Pulkovo 1995 / 6GK 171W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2494','Pulkovo 1942 / 6GK 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2495','Pulkovo 1942 / 6GK 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2496','Pulkovo 1942 / 6GK 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2497','Pulkovo 1942 / 6GK 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2498','Pulkovo 1942 / 6GK 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2499','Pulkovo 1942 / 6GK 51E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2500','Pulkovo 1942 / 6GK 57E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2501','Pulkovo 1942 / 6GK 63E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2502','Pulkovo 1942 / 6GK 69E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2503','Pulkovo 1942 / 6GK 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2504','Pulkovo 1942 / 6GK 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2505','Pulkovo 1942 / 6GK 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2506','Pulkovo 1942 / 6GK 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2507','Pulkovo 1942 / 6GK 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2508','Pulkovo 1942 / 6GK 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2509','Pulkovo 1942 / 6GK 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2510','Pulkovo 1942 / 6GK 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2511','Pulkovo 1942 / 6GK 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2512','Pulkovo 1942 / 6GK 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2513','Pulkovo 1942 / 6GK 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2514','Pulkovo 1942 / 6GK 141E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2515','Pulkovo 1942 / 6GK 147E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2516','Pulkovo 1942 / 6GK 153E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2517','Pulkovo 1942 / 6GK 159E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2518','Pulkovo 1942 / 6GK 165E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2519','Pulkovo 1942 / 6GK 171E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2520','Pulkovo 1942 / 6GK 177E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2521','Pulkovo 1942 / 6GK 177W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2522','Pulkovo 1942 / 6GK 171W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2523','Pulkovo 1942 / 3GK zn 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2524','Pulkovo 1942 / 3GK zn 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2525','Pulkovo 1942 / 3GK zn 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2526','Pulkovo 1942 / 3GK zn 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2527','Pulkovo 1942 / 3GK zn 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2528','Pulkovo 1942 / 3GK zn 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2529','Pulkovo 1942 / 3GK zn 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2530','Pulkovo 1942 / 3GK zn 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2531','Pulkovo 1942 / 3GK zn 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2532','Pulkovo 1942 / 3GK zn 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2533','Pulkovo 1942 / 3GK zn 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2534','Pulkovo 1942 / 3GK zn 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2535','Pulkovo 1942 / 3GK zn 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2536','Pulkovo 1942 / 3GK zn 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2537','Pulkovo 1942 / 3GK zn 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2538','Pulkovo 1942 / 3GK zn 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2539','Pulkovo 1942 / 3GK zn 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2540','Pulkovo 1942 / 3GK zn 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2541','Pulkovo 1942 / 3GK zn 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2542','Pulkovo 1942 / 3GK zn 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2543','Pulkovo 1942 / 3GK zn 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2544','Pulkovo 1942 / 3GK zn 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2545','Pulkovo 1942 / 3GK zn 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2546','Pulkovo 1942 / 3GK zn 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2547','Pulkovo 1942 / 3GK zn 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2548','Pulkovo 1942 / 3GK zn 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2549','Pulkovo 1942 / 3GK zn 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2551','Pulkovo 1942 / 3GK zn 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2552','Pulkovo 1942 / 3GK zn 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2553','Pulkovo 1942 / 3GK zn 36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2554','Pulkovo 1942 / 3GK zn 37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2555','Pulkovo 1942 / 3GK zn 38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2556','Pulkovo 1942 / 3GK zn 39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2557','Pulkovo 1942 / 3GK zn 40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2558','Pulkovo 1942 / 3GK zn 41','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2559','Pulkovo 1942 / 3GK zn 42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2560','Pulkovo 1942 / 3GK zn 43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2561','Pulkovo 1942 / 3GK zn 44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2562','Pulkovo 1942 / 3GK zn 45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2563','Pulkovo 1942 / 3GK zn 46','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2564','Pulkovo 1942 / 3GK zn 47','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2565','Pulkovo 1942 / 3GK zn 48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2566','Pulkovo 1942 / 3GK zn 49','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2567','Pulkovo 1942 / 3GK zn 50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2568','Pulkovo 1942 / 3GK zn 51','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2569','Pulkovo 1942 / 3GK zn 52','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2570','Pulkovo 1942 / 3GK zn 53','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2571','Pulkovo 1942 / 3GK zn 54','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2572','Pulkovo 1942 / 3GK zn 55','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2573','Pulkovo 1942 / 3GK zn 56','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2574','Pulkovo 1942 / 3GK zn 57','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2575','Pulkovo 1942 / 3GK zn 58','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2576','Pulkovo 1942 / 3GK zn 59','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3389','Pulkovo 1942 / 3GK zn 60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2578','Pulkovo 1942 / 3GK zn 61','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2579','Pulkovo 1942 / 3GK zn 62','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2580','Pulkovo 1942 / 3GK zn 63','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2581','Pulkovo 1942 / 3GK zn 64','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2582','Pulkovo 1942 / 3GK 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2583','Pulkovo 1942 / 3GK 24E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2584','Pulkovo 1942 / 3GK 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2585','Pulkovo 1942 / 3GK 30E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2586','Pulkovo 1942 / 3GK 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2587','Pulkovo 1942 / 3GK 36E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2588','Pulkovo 1942 / 3GK 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2589','Pulkovo 1942 / 3GK 42E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2590','Pulkovo 1942 / 3GK 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2591','Pulkovo 1942 / 3GK 48E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2592','Pulkovo 1942 / 3GK 51E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2593','Pulkovo 1942 / 3GK 54E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2594','Pulkovo 1942 / 3GK 57E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2595','Pulkovo 1942 / 3GK 60E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2596','Pulkovo 1942 / 3GK 63E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2597','Pulkovo 1942 / 3GK 66E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2598','Pulkovo 1942 / 3GK 69E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2599','Pulkovo 1942 / 3GK 72E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2601','Pulkovo 1942 / 3GK 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2602','Pulkovo 1942 / 3GK 78E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2603','Pulkovo 1942 / 3GK 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2604','Pulkovo 1942 / 3GK 84E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2605','Pulkovo 1942 / 3GK 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2606','Pulkovo 1942 / 3GK 90E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2607','Pulkovo 1942 / 3GK 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2608','Pulkovo 1942 / 3GK 96E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2609','Pulkovo 1942 / 3GK 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2610','Pulkovo 1942 / 3GK 102E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2611','Pulkovo 1942 / 3GK 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2612','Pulkovo 1942 / 3GK 108E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2613','Pulkovo 1942 / 3GK 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2614','Pulkovo 1942 / 3GK 114E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2615','Pulkovo 1942 / 3GK 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2616','Pulkovo 1942 / 3GK 120E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2617','Pulkovo 1942 / 3GK 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2618','Pulkovo 1942 / 3GK 126E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2619','Pulkovo 1942 / 3GK 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2620','Pulkovo 1942 / 3GK 132E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2621','Pulkovo 1942 / 3GK 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2622','Pulkovo 1942 / 3GK 138E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2623','Pulkovo 1942 / 3GK 141E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2624','Pulkovo 1942 / 3GK 144E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2625','Pulkovo 1942 / 3GK 147E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2626','Pulkovo 1942 / 3GK 150E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2627','Pulkovo 1942 / 3GK 153E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2628','Pulkovo 1942 / 3GK 156E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2629','Pulkovo 1942 / 3GK 159E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2630','Pulkovo 1942 / 3GK 162E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2631','Pulkovo 1942 / 3GK 165E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2632','Pulkovo 1942 / 3GK 168E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2633','Pulkovo 1942 / 3GK 171E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2634','Pulkovo 1942 / 3GK 174E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2635','Pulkovo 1942 / 3GK 177E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2636','Pulkovo 1942 / 3GK 180E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2637','Pulkovo 1942 / 3GK 177W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2638','Pulkovo 1942 / 3GK 174W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2639','Pulkovo 1942 / 3GK 171W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2640','Pulkovo 1942 / 3GK 168W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2641','Pulkovo 1995 / 3GK zn 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2642','Pulkovo 1995 / 3GK zn 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2643','Pulkovo 1995 / 3GK zn 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2644','Pulkovo 1995 / 3GK zn 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2645','Pulkovo 1995 / 3GK zn 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2646','Pulkovo 1995 / 3GK zn 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2647','Pulkovo 1995 / 3GK zn 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2648','Pulkovo 1995 / 3GK zn 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2649','Pulkovo 1995 / 3GK zn 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2650','Pulkovo 1995 / 3GK zn 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2651','Pulkovo 1995 / 3GK zn 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2652','Pulkovo 1995 / 3GK zn 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2653','Pulkovo 1995 / 3GK zn 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2654','Pulkovo 1995 / 3GK zn 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2655','Pulkovo 1995 / 3GK zn 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2656','Pulkovo 1995 / 3GK zn 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2657','Pulkovo 1995 / 3GK zn 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2658','Pulkovo 1995 / 3GK zn 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2659','Pulkovo 1995 / 3GK zn 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2660','Pulkovo 1995 / 3GK zn 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2661','Pulkovo 1995 / 3GK zn 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2662','Pulkovo 1995 / 3GK zn 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2663','Pulkovo 1995 / 3GK zn 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2664','Pulkovo 1995 / 3GK zn 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2665','Pulkovo 1995 / 3GK zn 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2666','Pulkovo 1995 / 3GK zn 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2667','Pulkovo 1995 / 3GK zn 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2668','Pulkovo 1995 / 3GK zn 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2669','Pulkovo 1995 / 3GK zn 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2670','Pulkovo 1995 / 3GK zn 36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2671','Pulkovo 1995 / 3GK zn 37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2672','Pulkovo 1995 / 3GK zn 38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2673','Pulkovo 1995 / 3GK zn 39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2674','Pulkovo 1995 / 3GK zn 40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2675','Pulkovo 1995 / 3GK zn 41','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2676','Pulkovo 1995 / 3GK zn 42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2677','Pulkovo 1995 / 3GK zn 43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2678','Pulkovo 1995 / 3GK zn 44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2679','Pulkovo 1995 / 3GK zn 45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2680','Pulkovo 1995 / 3GK zn 46','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2681','Pulkovo 1995 / 3GK zn 47','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2682','Pulkovo 1995 / 3GK zn 48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2683','Pulkovo 1995 / 3GK zn 49','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2684','Pulkovo 1995 / 3GK zn 50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2685','Pulkovo 1995 / 3GK zn 51','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2686','Pulkovo 1995 / 3GK zn 52','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2687','Pulkovo 1995 / 3GK zn 53','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2688','Pulkovo 1995 / 3GK zn 54','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2689','Pulkovo 1995 / 3GK zn 55','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2690','Pulkovo 1995 / 3GK zn 56','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2691','Pulkovo 1995 / 3GK zn 57','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2692','Pulkovo 1995 / 3GK zn 58','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2693','Pulkovo 1995 / 3GK zn 59','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3390','Pulkovo 1995 / 3GK zn 60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2695','Pulkovo 1995 / 3GK zn 61','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2696','Pulkovo 1995 / 3GK zn 62','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2697','Pulkovo 1995 / 3GK zn 63','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2698','Pulkovo 1995 / 3GK zn 64','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2699','Pulkovo 1995 / 3GK 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2700','Pulkovo 1995 / 3GK 24E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2701','Pulkovo 1995 / 3GK 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2702','Pulkovo 1995 / 3GK 30E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2703','Pulkovo 1995 / 3GK 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2704','Pulkovo 1995 / 3GK 36E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2705','Pulkovo 1995 / 3GK 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2706','Pulkovo 1995 / 3GK 42E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2707','Pulkovo 1995 / 3GK 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2708','Pulkovo 1995 / 3GK 48E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2709','Pulkovo 1995 / 3GK 51E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2710','Pulkovo 1995 / 3GK 54E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2711','Pulkovo 1995 / 3GK 57E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2712','Pulkovo 1995 / 3GK 60E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2713','Pulkovo 1995 / 3GK 63E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2714','Pulkovo 1995 / 3GK 66E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2715','Pulkovo 1995 / 3GK 69E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2716','Pulkovo 1995 / 3GK 72E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2717','Pulkovo 1995 / 3GK 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2718','Pulkovo 1995 / 3GK 78E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2719','Pulkovo 1995 / 3GK 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2720','Pulkovo 1995 / 3GK 84E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2721','Pulkovo 1995 / 3GK 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2722','Pulkovo 1995 / 3GK 90E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2723','Pulkovo 1995 / 3GK 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2724','Pulkovo 1995 / 3GK 96E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2725','Pulkovo 1995 / 3GK 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2726','Pulkovo 1995 / 3GK 102E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2727','Pulkovo 1995 / 3GK 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2728','Pulkovo 1995 / 3GK 108E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2729','Pulkovo 1995 / 3GK 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2730','Pulkovo 1995 / 3GK 114E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2731','Pulkovo 1995 / 3GK 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2732','Pulkovo 1995 / 3GK 120E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2733','Pulkovo 1995 / 3GK 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2734','Pulkovo 1995 / 3GK 126E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2735','Pulkovo 1995 / 3GK 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2738','Pulkovo 1995 / 3GK 132E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2739','Pulkovo 1995 / 3GK 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2740','Pulkovo 1995 / 3GK 138E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2741','Pulkovo 1995 / 3GK 141E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2742','Pulkovo 1995 / 3GK 144E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2743','Pulkovo 1995 / 3GK 147E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2744','Pulkovo 1995 / 3GK 150E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2745','Pulkovo 1995 / 3GK 153E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2746','Pulkovo 1995 / 3GK 156E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2747','Pulkovo 1995 / 3GK 159E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2748','Pulkovo 1995 / 3GK 162E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2749','Pulkovo 1995 / 3GK 165E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2750','Pulkovo 1995 / 3GK 168E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2751','Pulkovo 1995 / 3GK 171E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2752','Pulkovo 1995 / 3GK 174E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2753','Pulkovo 1995 / 3GK 177E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2754','Pulkovo 1995 / 3GK 180E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2755','Pulkovo 1995 / 3GK 177W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2756','Pulkovo 1995 / 3GK 174W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2757','Pulkovo 1995 / 3GK 171W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2758','Pulkovo 1995 / 3GK 168W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2759','NAD83(HARN) / AL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2760','NAD83(HARN) / AL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2761','NAD83(HARN) / AZ E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2762','NAD83(HARN) / AZ C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2763','NAD83(HARN) / AZ W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2764','NAD83(HARN) / AR N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2765','NAD83(HARN) / AR S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2766','NAD83(HARN) / CA 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2767','NAD83(HARN) / CA 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2768','NAD83(HARN) / CA 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2769','NAD83(HARN) / CA 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2770','NAD83(HARN) / CA 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2771','NAD83(HARN) / CA 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2772','NAD83(HARN) / CO N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2773','NAD83(HARN) / CO C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2774','NAD83(HARN) / CO S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2775','NAD83(HARN) / CT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2777','NAD83(HARN) / FL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2778','NAD83(HARN) / FL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2779','NAD83(HARN) / FL N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2780','NAD83(HARN) / GA E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2781','NAD83(HARN) / GA W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2782','NAD83(HARN) / HI 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2783','NAD83(HARN) / HI 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2784','NAD83(HARN) / HI 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2785','NAD83(HARN) / HI 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2786','NAD83(HARN) / HI 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2788','NAD83(HARN) / ID C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2791','NAD83(HARN) / IL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2792','NAD83(HARN) / IN E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2793','NAD83(HARN) / IN W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2796','NAD83(HARN) / KS N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2797','NAD83(HARN) / KS S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2798','NAD83(HARN) / KY N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2799','NAD83(HARN) / KY S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2800','NAD83(HARN) / LA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2801','NAD83(HARN) / LA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2805','NAD83(HARN) / MA md (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2806','NAD83(HARN) / MA Is (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2807','NAD83(HARN) / MI N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2808','NAD83(HARN) / MI C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2809','NAD83(HARN) / MI S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2810','NAD83(HARN) / MN N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2811','NAD83(HARN) / MN C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2812','NAD83(HARN) / MN S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2813','NAD83(HARN) / MS E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2814','NAD83(HARN) / MS W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2815','NAD83(HARN) / MO E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2816','NAD83(HARN) / MO C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2817','NAD83(HARN) / MO W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2820','NAD83(HARN) / NV E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2821','NAD83(HARN) / NV C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2822','NAD83(HARN) / NV W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2823','NAD83(HARN) / NH (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2825','NAD83(HARN) / NM E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2826','NAD83(HARN) / NM C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2827','NAD83(HARN) / NM W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2828','NAD83(HARN) / NY E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2829','NAD83(HARN) / NY C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2830','NAD83(HARN) / NY W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2831','NAD83(HARN) / NY LI (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2832','NAD83(HARN) / ND N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2833','NAD83(HARN) / ND S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2836','NAD83(HARN) / OK N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2837','NAD83(HARN) / OK S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2838','NAD83(HARN) / OR N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2839','NAD83(HARN) / OR S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2840','NAD83(HARN) / RI (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2841','NAD83(HARN) / SD N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2842','NAD83(HARN) / SD S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2844','NAD83(HARN) / TX N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2845','NAD83(HARN) / TX NC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2846','NAD83(HARN) / TX C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2847','NAD83(HARN) / TX SC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2848','NAD83(HARN) / TX S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2850','NAD83(HARN) / UT C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2853','NAD83(HARN) / VA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2854','NAD83(HARN) / VA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2855','NAD83(HARN) / WA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2856','NAD83(HARN) / WA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2857','NAD83(HARN) / WV N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2858','NAD83(HARN) / WV S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2859','NAD83(HARN) / WI N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2860','NAD83(HARN) / WI C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2861','NAD83(HARN) / WI S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2862','NAD83(HARN) / WY E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2863','NAD83(HARN) / WY EC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2864','NAD83(HARN) / WY WC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2865','NAD83(HARN) / WY W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2866','NAD83(HARN) / PR and VI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2867','NAD83(HARN) / AZ E (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2868','NAD83(HARN) / AZ C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2869','NAD83(HARN) / AZ W (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2870','NAD83(HARN) / CA 1 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2871','NAD83(HARN) / CA 2 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2872','NAD83(HARN) / CA 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2873','NAD83(HARN) / CA 4 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2874','NAD83(HARN) / CA 5 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2875','NAD83(HARN) / CA 6 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2876','NAD83(HARN) / CO N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2877','NAD83(HARN) / CO C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2878','NAD83(HARN) / CO S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2879','NAD83(HARN) / CT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2880','NAD83(HARN) / DE (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2881','NAD83(HARN) / FL E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2882','NAD83(HARN) / FL W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2883','NAD83(HARN) / FL N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2884','NAD83(HARN) / GA E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2885','NAD83(HARN) / GA W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2886','NAD83(HARN) / ID E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2887','NAD83(HARN) / ID C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2888','NAD83(HARN) / ID W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2967','NAD83(HARN) / IN E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2968','NAD83(HARN) / IN W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2891','NAD83(HARN) / KY N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2892','NAD83(HARN) / KY S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2893','NAD83(HARN) / MD (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2894','NAD83(HARN) / MA md (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2895','NAD83(HARN) / MA Is (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2896','NAD83(HARN) / MI N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2897','NAD83(HARN) / MI C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2898','NAD83(HARN) / MI S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2899','NAD83(HARN) / MS E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2900','NAD83(HARN) / MS W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2901','NAD83(HARN) / MT (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2902','NAD83(HARN) / NM E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2903','NAD83(HARN) / NM C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2904','NAD83(HARN) / NM W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2905','NAD83(HARN) / NY E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2906','NAD83(HARN) / NY C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2907','NAD83(HARN) / NY W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2908','NAD83(HARN) / NY LI (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2909','NAD83(HARN) / ND N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2910','NAD83(HARN) / ND S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2911','NAD83(HARN) / OK N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2912','NAD83(HARN) / OK S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2913','NAD83(HARN) / OR N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2914','NAD83(HARN) / OR S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2915','NAD83(HARN) / TN (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2916','NAD83(HARN) / TX N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2917','NAD83(HARN) / TX NC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2918','NAD83(HARN) / TX C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2919','NAD83(HARN) / TX SC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2920','NAD83(HARN) / TX S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2921','NAD83(HARN) / UT N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2922','NAD83(HARN) / UT C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2923','NAD83(HARN) / UT S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2924','NAD83(HARN) / VA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2925','NAD83(HARN) / VA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2926','NAD83(HARN) / WA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2927','NAD83(HARN) / WA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2928','NAD83(HARN) / WI N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2929','NAD83(HARN) / WI C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2930','NAD83(HARN) / WI S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2932','QND95 / Qatar Nat Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2935','Pulkovo 1942 / CS63 A1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2936','Pulkovo 1942 / CS63 A2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2937','Pulkovo 1942 / CS63 A3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2938','Pulkovo 1942 / CS63 A4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2939','Pulkovo 1942 / CS63 K2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2940','Pulkovo 1942 / CS63 K3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2941','Pulkovo 1942 / CS63 K4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2942','Porto Santo / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2943','Selvagem Gr. / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2944','NAD83(CSRS) / SCoPQ 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2952','NAD83(CSRS) / MTM zn 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2953','NAD83(CSRS) / NB Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2954','NAD83(CSRS) / PEI Stereo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2955','NAD83(CSRS) / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2956','NAD83(CSRS) / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2957','NAD83(CSRS) / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2958','NAD83(CSRS) / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2959','NAD83(CSRS) / UTM 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2960','NAD83(CSRS) / UTM 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2961','NAD83(CSRS) / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2962','NAD83(CSRS) / UTM 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2963','Lisbon 1890 / Bonne','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2965','NAD83 / Indiana E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2966','NAD83 / Indiana W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2969','Fort Marigot / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2978','IGN72 Nuku Hiva / UTM 7S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2980','Combani 1950 / UTM 38S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2981','IGN56 Lifou / UTM zn 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2985','Petrels 1972 / Adelie St','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2986','Perroud 1950 / Adelie St','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2987','St. Pierre Miq / UTM 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2992','NAD83 / OR GIC Lam (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2994','NAD83(HARN) / OR GIC Lam (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2995','IGN53 Mare / UTM zn 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2996','ST84 des Pins / UTM 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2997','ST71 Belep / UTM zn 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2998','NEA74 Noumea / UTM 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2999','Grand Comoros / UTM 38S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3031','WGS 84 / Antarctic PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3032','WGS 84 / Aus Antarc PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3033','WGS 84 / Aus Antarc LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3052','Reykjavik 1900 / Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3053','Hjorsey 1955 / Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3054','Hjorsey 1955 / UTM 26N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3055','Hjorsey 1955 / UTM 27N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3056','Hjorsey 1955 / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3058','Helle 1954 / Jan Mayen','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3060','IGN72 Gr Terre / UTM 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3071','NAD83(HARN) / WTM 83','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3072','NAD83 / Maine CS2000 E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3463','NAD83 / Maine CS2000 C','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3074','NAD83 / Maine CS2000 W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3075','NAD83(HARN) / ME 2000 E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3464','NAD83(HARN) / ME 2000 C','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3077','NAD83(HARN) / ME 2000 W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3086','NAD83 / FL GDL Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3087','NAD83(HARN) / FL GDL AEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3102','American Samoa 62 / LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3114','MAGNA-SIRGAS / Col FW','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3115','MAGNA-SIRGAS / Col W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3116','MAGNA-SIRGAS / Col Bog','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3117','MAGNA-SIRGAS / Col EC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3118','MAGNA-SIRGAS / Col E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3121','PRS92 / Philippines 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3122','PRS92 / Philippines 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3123','PRS92 / Philippines 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3124','PRS92 / Philippines 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3125','PRS92 / Philippines 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3139','Vanua Levu 1915 / Cass','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3140','Viti Levu 1912 / Cassini','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3146','Pulkovo 1942 / 3GK zn 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3147','Pulkovo 1942 / 3GK 18E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3148','Indian 1960 / UTM 48N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3149','Indian 1960 / UTM 49N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3150','Pulkovo 1995 / 3GK zn 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3151','Pulkovo 1995 / 3GK 18E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3154','NAD83(CSRS) / UTM 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3155','NAD83(CSRS) / UTM 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3156','NAD83(CSRS) / UTM 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3157','NAD83(CSRS) / UTM 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3158','NAD83(CSRS) / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3159','NAD83(CSRS) / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3160','NAD83(CSRS) / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3161','NAD83 / Ontario MNR LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3162','NAD83(CSRS) / ON MNR LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3164','ST87 Ouvea / UTM 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3165','NEA74 Noumea / LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3166','NEA74 Noumea / LCC2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3167','Kertau (RSO) / RSO (ch)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3168','Kertau (RSO) / RSO (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3172','IGN53 Mare / UTM 59S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3174','NAD83 / GL Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3175','NAD83 / GL+SLS Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3997','WGS 84 / DLTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3995','WGS 84 / Arctic PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3996','WGS 84 / IBCAO PS','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7410','PSD93 + PHD93','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5725','Fahud Height Datum height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3190','LGD2006 / Libya TM 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3191','LGD2006 / Libya TM 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3192','LGD2006 / Libya TM 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3193','LGD2006 / Libya TM 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3194','LGD2006 / Libya TM 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3195','LGD2006 / Libya TM 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3196','LGD2006 / Libya TM 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3197','LGD2006 / Libya TM 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3198','LGD2006 / Libya TM 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3204','WGS 84 / SCAR SP19-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3205','WGS 84 / SCAR SP21-22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6933','EASE-Grid 2.0 Global','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6931','EASE-Grid 2.0 North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6932','EASE-Grid 2.0 South','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6184','Cais da Figueirinha - Angra do Heroísmo height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3206','WGS 84 / SCAR SP23-24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3207','WGS 84 / SCAR SQ01-02','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3208','WGS 84 / SCAR SQ19-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3209','WGS 84 / SCAR SQ21-22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3210','WGS 84 / SCAR SQ37-38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3211','WGS 84 / SCAR SQ39-40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3212','WGS 84 / SCAR SQ41-42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3213','WGS 84 / SCAR SQ43-44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3214','WGS 84 / SCAR SQ45-46','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3215','WGS 84 / SCAR SQ47-48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3216','WGS 84 / SCAR SQ49-50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3217','WGS 84 / SCAR SQ51-52','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3218','WGS 84 / SCAR SQ53-54','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3219','WGS 84 / SCAR SQ55-56','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3220','WGS 84 / SCAR SQ57-58','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3221','WGS 84 / SCAR SR13-14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3222','WGS 84 / SCAR SR15-16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3223','WGS 84 / SCAR SR17-18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3224','WGS 84 / SCAR SR19-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3225','WGS 84 / SCAR SR27-28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3226','WGS 84 / SCAR SR29-30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3227','WGS 84 / SCAR SR31-32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3228','WGS 84 / SCAR SR33-34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3229','WGS 84 / SCAR SR35-36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3230','WGS 84 / SCAR SR37-38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3231','WGS 84 / SCAR SR39-40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3232','WGS 84 / SCAR SR41-42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3233','WGS 84 / SCAR SR43-44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3234','WGS 84 / SCAR SR45-46','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3235','WGS 84 / SCAR SR47-48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3236','WGS 84 / SCAR SR49-50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3237','WGS 84 / SCAR SR51-52','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3238','WGS 84 / SCAR SR53-54','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3239','WGS 84 / SCAR SR55-56','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3240','WGS 84 / SCAR SR57-58','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3241','WGS 84 / SCAR SR59-60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3242','WGS 84 / SCAR SS04-06','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3243','WGS 84 / SCAR SS07-09','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3244','WGS 84 / SCAR SS10-12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3245','WGS 84 / SCAR SS13-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3246','WGS 84 / SCAR SS16-18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3247','WGS 84 / SCAR SS19-21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3248','WGS 84 / SCAR SS25-27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3249','WGS 84 / SCAR SS28-30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3250','WGS 84 / SCAR SS31-33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3251','WGS 84 / SCAR SS34-36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3252','WGS 84 / SCAR SS37-39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3253','WGS 84 / SCAR SS40-42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3254','WGS 84 / SCAR SS43-45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3255','WGS 84 / SCAR SS46-48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3256','WGS 84 / SCAR SS49-51','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3257','WGS 84 / SCAR SS52-54','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3258','WGS 84 / SCAR SS55-57','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3259','WGS 84 / SCAR SS58-60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3260','WGS 84 / SCAR ST01-04','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3261','WGS 84 / SCAR ST05-08','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3262','WGS 84 / SCAR ST09-12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3263','WGS 84 / SCAR ST13-16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3264','WGS 84 / SCAR ST17-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3265','WGS 84 / SCAR ST21-24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3266','WGS 84 / SCAR ST25-28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3267','WGS 84 / SCAR ST29-32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3268','WGS 84 / SCAR ST33-36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3269','WGS 84 / SCAR ST37-40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3270','WGS 84 / SCAR ST41-44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3271','WGS 84 / SCAR ST45-48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3272','WGS 84 / SCAR ST49-52','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3273','WGS 84 / SCAR ST53-56','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3274','WGS 84 / SCAR ST57-60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3275','WGS 84 / SCAR SU01-05','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3276','WGS 84 / SCAR SU06-10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3277','WGS 84 / SCAR SU11-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3278','WGS 84 / SCAR SU16-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3279','WGS 84 / SCAR SU21-25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3280','WGS 84 / SCAR SU26-30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3281','WGS 84 / SCAR SU31-35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3282','WGS 84 / SCAR SU36-40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3283','WGS 84 / SCAR SU41-45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3284','WGS 84 / SCAR SU46-50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3285','WGS 84 / SCAR SU51-55','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3286','WGS 84 / SCAR SU56-60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3287','WGS 84 / SCAR SV01-10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3288','WGS 84 / SCAR SV11-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3289','WGS 84 / SCAR SV21-30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3290','WGS 84 / SCAR SV31-40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3291','WGS 84 / SCAR SV41-50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3292','WGS 84 / SCAR SV51-60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3293','WGS 84 / SCAR SW01-60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3294','WGS 84 / Transantarctic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3302','IGN63 Hiva Oa / UTM 7S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3303','Fatu Iva 72 / UTM 7S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3307','Nakhl-e Ghanem / UTM 39N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3309','NAD27 / CA Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3310','NAD83 / CA Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3311','NAD83(HARN) / CA Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3314','Katanga 1955 / Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3315','Katanga 1955 / TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3316','Kasai 1953 / Congo TM 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3317','Kasai 1953 / Congo TM 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3318','IGC 1962 / Congo TM 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3319','IGC 1962 / Congo TM 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3320','IGC 1962 / Congo TM 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3321','IGC 1962 / Congo TM 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3322','IGC 1962 / Congo TM 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3323','IGC 1962 / Congo TM 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3324','IGC 1962 / Congo TM 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3325','IGC 1962 / Congo TM 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3326','IGC 1962 / Congo TM 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3327','IGC 1962 / Congo TM 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3329','Pulkovo 42(58) / 3GK zn5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3840','Pulkovo 42(58) / 3GKzn10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3837','Pulkovo 42(58) / 3GK zn3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3838','Pulkovo 42(58) / 3GK zn4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3330','Pulkovo 42(58) / 3GK zn6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3331','Pulkovo 42(58) / 3GK zn7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3332','Pulkovo 42(58) / 3GK zn8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3839','Pulkovo 42(58) / 3GK zn9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3841','Pulkovo 42(83) / 3GK zn6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3833','Pulkovo 42(58) / GK zn 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3333','Pulkovo 42(58) / GK zn 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3334','Pulkovo 42(58) / GK zn 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3335','Pulkovo 42(58) / GK zn 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3842','Pulkovo 42(83) / 3GK zn7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3843','Pulkovo 42(83) / 3GK zn8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3834','Pulkovo 42(83) / GK zn 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3835','Pulkovo 42(83) / GK zn 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3836','Pulkovo 42(83) / GK zn 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3779','NAD83(CSRS) / AB 3TM 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3780','NAD83(CSRS) / AB 3TM 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3781','NAD83(CSRS) / AB 3TM 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3802','NAD83(CSRS) / AB 3TM 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26891','NAD83(CSRS) / MTM zn 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26892','NAD83(CSRS) / MTM zn 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26893','NAD83(CSRS) / MTM zn 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26894','NAD83(CSRS) / MTM zn 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26895','NAD83(CSRS) / MTM zn 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26896','NAD83(CSRS) / MTM zn 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26897','NAD83(CSRS) / MTM zn 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3799','NAD83(CSRS) / MTQ LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3581','NAD83(CSRS) / NWT LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3761','NAD83(CSRS) / UTM 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3579','NAD83(CSRS) / YT Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3441','NAD83(HARN) / AR N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3442','NAD83(HARN) / AR S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3760','NAD83(HARN) / HI 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3443','NAD83(HARN) / IL E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3444','NAD83(HARN) / IL W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3425','NAD83(HARN) / IA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3426','NAD83(HARN) / IA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3427','NAD83(HARN) / KS N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3428','NAD83(HARN) / KS S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3456','NAD83(HARN) / LA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3457','NAD83(HARN) / LA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26855','NAD83(HARN) / ME E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26856','NAD83(HARN) / ME W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3079','NAD83(HARN) / MI Georef','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26858','NAD83(HARN) / MN C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26857','NAD83(HARN) / MN N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26859','NAD83(HARN) / MN S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26860','NAD83(HARN) / NE (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3430','NAD83(HARN) / NV C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3429','NAD83(HARN) / NV E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3431','NAD83(HARN) / NV W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3445','NAD83(HARN) / NH (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3432','NAD83(HARN) / NJ (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3358','NAD83(HARN) / NC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3404','NAD83(HARN) / NC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3753','NAD83(HARN) / OH N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3754','NAD83(HARN) / OH S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3362','NAD83(HARN) / PA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3363','NAD83(HARN) / PA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3364','NAD83(HARN) / PA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3365','NAD83(HARN) / PA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3446','NAD83(HARN) / RI (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3360','NAD83(HARN) / SC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3361','NAD83(HARN) / SC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3458','NAD83(HARN) / SD N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3459','NAD83(HARN) / SD S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3569','NAD83(HARN) / UT C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3568','NAD83(HARN) / UT N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3570','NAD83(HARN) / UT S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3740','NAD83(HARN) / UTM 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3741','NAD83(HARN) / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3742','NAD83(HARN) / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3743','NAD83(HARN) / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3744','NAD83(HARN) / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3745','NAD83(HARN) / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3746','NAD83(HARN) / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3747','NAD83(HARN) / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3748','NAD83(HARN) / UTM 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3749','NAD83(HARN) / UTM 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3750','NAD83(HARN) / UTM 4N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3751','NAD83(HARN) / UTM 5N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26861','NAD83(HARN) / WV N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26862','NAD83(HARN) / WV S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3755','NAD83(HARN) / WY E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3756','NAD83(HARN) / WY EC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3758','NAD83(HARN) / WY W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3757','NAD83(HARN) / WY WC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3757','NAD83(HPGN) / Wyoming West Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3758','NAD83(HPGN) / Wyoming West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3756','NAD83(HPGN) / Wyoming East Central (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3755','NAD83(HPGN) / Wyoming East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3754','NAD83(HPGN) / Ohio South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3753','NAD83(HPGN) / Ohio North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3336','Kerguelen 62 / UTM 42S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3337','Le Pouce 34 / Mauritius','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3339','IGCB 1955 / Congo TM 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3340','IGCB 1955 / Congo TM 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3341','IGCB 1955 / Congo TM 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3343','Mauritania 99 / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3344','Mauritania 99 / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3345','Mauritania 99 / UTM 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3350','Pulkovo 1942 / CS63 C0','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3351','Pulkovo 1942 / CS63 C1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3352','Pulkovo 1942 / CS63 C2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3354','Mhast offshore / UTM 32S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3353','Mhast onshore / UTM 32S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3356','G Cayman 1959 / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3357','L Cayman 1961 / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3367','IGN Astro 1960 / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3368','IGN Astro 1960 / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3369','IGN Astro 1960 / UTM 30N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3376','GDM2000 / E Malaysia RSO','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3378','GDM2000 / Melaka Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3381','GDM2000 / Terengganu','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3383','GDM2000 / Kedah Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3388','Pulkovo 1942 / Caspian','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4974','278','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3396','PD/83 / 3GK zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3397','PD/83 / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3398','RD/83 / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3399','RD/83 / 3GK zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3403','NAD83(CSRS) / AB 10TM R','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3402','NAD83(CSRS) / AB 10TM F','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3401','NAD83 / AB 10TM Resource','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3400','NAD83 / AB 10TM Forest','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3407','Hong Kong 1963 Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3411','NSIDC Sea Ice PS North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3412','NSIDC Sea Ice PS South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3413','WGS 84 / NSIDC PS North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3417','NAD83 / Iowa N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3418','NAD83 / Iowa S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3419','NAD83 / Kansas N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3420','NAD83 / Kansas S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3421','NAD83 / Nevada E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3422','NAD83 / Nevada C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3423','NAD83 / Nevada W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3433','NAD83 / Arkansas N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3434','NAD83 / Arkansas S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3435','NAD83 / Illinois E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3436','NAD83 / Illinois W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3437','NAD83 / NH (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3438','NAD83 / RI (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3448','JAD2001 / JA Metric Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3451','NAD83 / Louisiana N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3452','NAD83 / Louisiana S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3453','NAD83 / LA Offshore (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3454','NAD83 / S Dakota N ftUS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3455','NAD83 / S Dakota S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3460','Fiji 1986 / Map Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3461','Dabola 1981 / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3462','Dabola 1981 / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3560','NAD83 / Utah North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3566','NAD83 / Utah Cen (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3567','NAD83 / Utah South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3571','WGS 84 / LAEA Bering Sea','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3572','WGS 84 / LAEA Alaska','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3573','WGS 84 / LAEA Canada','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3574','WGS 84 / LAEA Atlantic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3575','WGS 84 / LAEA Europe','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3576','WGS 84 / LAEA Russia','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3577','GDA94 / Aus Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3706','NAD83(NSRS) / UTM 59N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3707','NAD83(NSRS) / UTM 60N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3708','NAD83(NSRS) / UTM 1N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3709','NAD83(NSRS) / UTM 2N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3710','NAD83(NSRS) / UTM 3N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3711','NAD83(NSRS) / UTM 4N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3712','NAD83(NSRS) / UTM 5N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3713','NAD83(NSRS) / UTM 6N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3714','NAD83(NSRS) / UTM 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3715','NAD83(NSRS) / UTM 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3716','NAD83(NSRS) / UTM 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3717','NAD83(NSRS) / UTM 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3718','NAD83(NSRS) / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3719','NAD83(NSRS) / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3720','NAD83(NSRS) / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3721','NAD83(NSRS) / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3722','NAD83(NSRS) / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3723','NAD83(NSRS) / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3724','NAD83(NSRS) / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3725','NAD83(NSRS) / UTM 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3726','NAD83(NSRS) / UTM 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3734','NAD83 / Ohio N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3735','NAD83 / Ohio S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3736','NAD83 / Wyoming E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3737','NAD83 / Wyoming EC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3738','NAD83 / Wyoming WC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3739','NAD83 / Wyoming W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3759','NAD83 / Hawaii 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3762','WGS 84 / S Georgia LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3764','NZGD2000 / CI Circuit','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3771','NAD27 / Alberta 3TM 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3772','NAD27 / Alberta 3TM 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3773','NAD27 / Alberta 3TM 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3800','NAD27 / Alberta 3TM 112','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3775','NAD83 / Alberta 3TM 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3776','NAD83 / Alberta 3TM 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3777','NAD83 / Alberta 3TM 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3801','NAD83 / Alberta 3TM 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3783','Pitcairn 2006 / TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3784','Pitcairn 1967 / UTM 9S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3785','Popular Vis CRS / Merc','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3786','World Equidistant Cyl','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3829','Hu Tzu Shan / UTM 51N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3845','SWEREF99 / RT90 7.5 gon V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3846','SWEREF99 / RT90 5 gon V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3847','SWEREF99 / RT90 2.5 gon V','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3848','SWEREF99 / RT90 0 gon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3849','SWEREF99 / RT90 2.5 gon O','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3850','SWEREF99 / RT90 5 gon O','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3920','Puerto Rico / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5607','Bora Bora 2001 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5733','Dansk Normal Nul height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5736','YS56 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5737','YS85 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5753','Nivellement General de Nouvelle Caledonie','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5755','Nivellement General Guyanais 1977','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20436','Ain el Abd / UTM 36N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20440','Ain el Abd / UTM 40N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20791','DLx','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21453','Beijing 1954 / GK CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21454','Beijing 1954 / GK CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21455','Beijing 1954 / GK CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21456','Beijing 1954 / GK CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21457','Beijing 1954 / GK CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21458','Beijing 1954 / GK CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21459','Beijing 1954 / GK CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21460','Beijing 1954 / GK CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21461','Beijing 1954 / GK CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21462','Beijing 1954 / GK CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21463','Beijing 1954 / GK CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21818','Bogota 1975 / UTM 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22521','Corrego Alegre / UTM 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22522','Corrego Alegre / UTM 22S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22525','Corrego Alegre / UTM 25S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23830','DGN95 / Indonesia 46.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23831','DGN95 / Indonesia 47.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23832','DGN95 / Indonesia 47.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23833','DGN95 / Indonesia 48.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23834','DGN95 / Indonesia 48.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23835','DGN95 / Indonesia 49.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23836','DGN95 / Indonesia 49.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23837','DGN95 / Indonesia 50.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23838','DGN95 / Indonesia 50.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23839','DGN95 / Indonesia 51.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23840','DGN95 / Indonesia 51.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23841','DGN95 / Indonesia 52.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23842','DGN95 / Indonesia 52.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23843','DGN95 / Indonesia 53.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23844','DGN95 / Indonesia 53.2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','23845','DGN95 / Indonesia 54.1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26847','NAD83 / Maine E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26848','NAD83 / Maine W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26849','NAD83 / Minnesota N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26850','NAD83 / Minnesota C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26851','NAD83 / Minnesota S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26853','NAD83 / WV North (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26854','NAD83 / WV South (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27037','Nahrwan 1967 / UTM 37N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27205','NZGD49 / Mount Eden','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27206','NZGD49 / Bay of Plenty','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27207','NZGD49 / Poverty Bay','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27208','NZGD49 / Hawkes Bay','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27209','NZGD49 / Taranaki','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27210','NZGD49 / Tuhirangi','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27211','NZGD49 / Wanganui','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27212','NZGD49 / Wairarapa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27213','NZGD49 / Wellington','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27214','NZGD49 / Collingwood','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27220','NZGD49 / Marlborough','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27221','NZGD49 / Hokitika','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27223','NZGD49 / Jacksons Bay','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27224','NZGD49 / Mount Pleasant','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27227','NZGD49 / Lindis Peak','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27228','NZGD49 / Mount Nicholas','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27229','NZGD49 / Mount York','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27230','NZGD49 / Observation Pt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27231','NZGD49 / North Taieri','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27493','Datum 73 / Modified Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28404','Pulkovo 1942 / GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28405','Pulkovo 1942 / GK zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29901','OSNI 52 / Irish Nat Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30179','Tokyo / Japan zone XIX','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30493','Voirol79 / N Algeria old','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30494','Voirol79 / S Algeria old','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31251','MGI (Ferro) / Aut GK W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31252','MGI (Ferro) / Aut GK C','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31253','MGI (Ferro) / Aut GK E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31466','DHDN / 3GK zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31467','DHDN / 3GK zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31468','DHDN / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31469','DHDN / 3GK zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31528','Conakry 1905 / UTM 28N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31529','Conakry 1905 / UTM 29N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31965','SIRGAS 2000 / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31966','SIRGAS 2000 / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31967','SIRGAS 2000 / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31968','SIRGAS 2000 / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31969','SIRGAS 2000 / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31970','SIRGAS 2000 / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31971','SIRGAS 2000 / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31972','SIRGAS 2000 / UTM 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31973','SIRGAS 2000 / UTM 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31974','SIRGAS 2000 / UTM 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31975','SIRGAS 2000 / UTM 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31976','SIRGAS 2000 / UTM 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31977','SIRGAS 2000 / UTM 17S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31978','SIRGAS 2000 / UTM 18S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31979','SIRGAS 2000 / UTM 19S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31980','SIRGAS 2000 / UTM 20S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31981','SIRGAS 2000 / UTM 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31982','SIRGAS 2000 / UTM 22S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31983','SIRGAS 2000 / UTM 23S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31984','SIRGAS 2000 / UTM 24S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31985','SIRGAS 2000 / UTM 25S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32099','NAD27 / Louisiana Off','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32199','NAD83 / Louisiana Off m','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32600','WGS 84 / UTM system N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32700','WGS 84 / UTM system S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32663','WGS 84 / Equidistant Cyl','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3465','NAD83(NSRS) / AL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3466','NAD83(NSRS) / AL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3484','NAD83(NSRS) / AR N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3485','NAD83(NSRS) / AR N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3486','NAD83(NSRS) / AR S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3487','NAD83(NSRS) / AR S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3479','NAD83(NSRS) / AZ C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3478','NAD83(NSRS) / AZ C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3481','NAD83(NSRS) / AZ E (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3480','NAD83(NSRS) / AZ E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3483','NAD83(NSRS) / AZ W (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3482','NAD83(NSRS) / AZ W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3489','NAD83(NSRS) / CA 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3490','NAD83(NSRS) / CA 1 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3491','NAD83(NSRS) / CA 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3492','NAD83(NSRS) / CA 2 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3493','NAD83(NSRS) / CA 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3494','NAD83(NSRS) / CA 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3495','NAD83(NSRS) / CA 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3496','NAD83(NSRS) / CA 4 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3497','NAD83(NSRS) / CA 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3498','NAD83(NSRS) / CA 5 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3499','NAD83(NSRS) / CA 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3500','NAD83(NSRS) / CA 6 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3488','NAD83(NSRS) / CA Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3501','NAD83(NSRS) / CO C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3502','NAD83(NSRS) / CO C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3503','NAD83(NSRS) / CO N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3504','NAD83(NSRS) / CO N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3505','NAD83(NSRS) / CO S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3506','NAD83(NSRS) / CO S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3508','NAD83(NSRS) / CT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3507','NAD83(NSRS) / CT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3510','NAD83(NSRS) / DE (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3511','NAD83(NSRS) / FL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3512','NAD83(NSRS) / FL E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3513','NAD83(NSRS) / FL GDL AEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3514','NAD83(NSRS) / FL N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3515','NAD83(NSRS) / FL N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3516','NAD83(NSRS) / FL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3517','NAD83(NSRS) / FL W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3518','NAD83(NSRS) / GA E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3519','NAD83(NSRS) / GA E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3520','NAD83(NSRS) / GA W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3521','NAD83(NSRS) / GA W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3537','NAD83(NSRS) / IA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3539','NAD83(NSRS) / IA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3522','NAD83(NSRS) / ID C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3523','NAD83(NSRS) / ID C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3525','NAD83(NSRS) / ID E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3527','NAD83(NSRS) / ID W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3528','NAD83(NSRS) / IL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3529','NAD83(NSRS) / IL E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3530','NAD83(NSRS) / IL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3531','NAD83(NSRS) / IL W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3532','NAD83(NSRS) / IN E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3533','NAD83(NSRS) / IN E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3534','NAD83(NSRS) / IN W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3535','NAD83(NSRS) / IN W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3540','NAD83(NSRS) / KS N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3541','NAD83(NSRS) / KS N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3542','NAD83(NSRS) / KS S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3543','NAD83(NSRS) / KS S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3544','NAD83(NSRS) / KY N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3545','NAD83(NSRS) / KY N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3548','NAD83(NSRS) / KY S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3549','NAD83(NSRS) / KY S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3546','NAD83(NSRS) / KY1Z (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3550','NAD83(NSRS) / LA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3551','NAD83(NSRS) / LA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3552','NAD83(NSRS) / LA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3553','NAD83(NSRS) / LA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3583','NAD83(NSRS) / MA Is (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3584','NAD83(NSRS) / MA Is (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3585','NAD83(NSRS) / MA md (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3586','NAD83(NSRS) / MA md (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3582','NAD83(NSRS) / MD (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3554','NAD83(NSRS) / ME 2000 C','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3555','NAD83(NSRS) / ME 2000 E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3556','NAD83(NSRS) / ME 2000 W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3557','NAD83(NSRS) / ME83 E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26863','NAD83(NSRS) / ME E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3558','NAD83(NSRS) / ME83 W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26864','NAD83(NSRS) / ME W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3588','NAD83(NSRS) / MI C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3587','NAD83(NSRS) / MI C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3591','NAD83(NSRS) / MI Georef','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3590','NAD83(NSRS) / MI N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3589','NAD83(NSRS) / MI N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3593','NAD83(NSRS) / MI S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3592','NAD83(NSRS) / MI S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3594','NAD83(NSRS) / MN C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26866','NAD83(NSRS) / MN C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3595','NAD83(NSRS) / MN N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26865','NAD83(NSRS) / MN N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3596','NAD83(NSRS) / MN S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26867','NAD83(NSRS) / MN S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3601','NAD83(NSRS) / MO C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3602','NAD83(NSRS) / MO E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3603','NAD83(NSRS) / MO W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3597','NAD83(NSRS) / MS E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3598','NAD83(NSRS) / MS E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3599','NAD83(NSRS) / MS W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3600','NAD83(NSRS) / MS W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3816','NAD83(NSRS) / MSTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3605','NAD83(NSRS) / MT (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3632','NAD83(NSRS) / NC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3631','NAD83(NSRS) / NC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3634','NAD83(NSRS) / ND N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3633','NAD83(NSRS) / ND N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3636','NAD83(NSRS) / ND S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3635','NAD83(NSRS) / ND S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26868','NAD83(NSRS) / NE (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3606','NAD83(NSRS) / NE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3614','NAD83(NSRS) / NH (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3613','NAD83(NSRS) / NH (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3616','NAD83(NSRS) / NJ (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3617','NAD83(NSRS) / NM C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3618','NAD83(NSRS) / NM C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3619','NAD83(NSRS) / NM E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3620','NAD83(NSRS) / NM E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3621','NAD83(NSRS) / NM W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3622','NAD83(NSRS) / NM W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3607','NAD83(NSRS) / NV C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3608','NAD83(NSRS) / NV C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3609','NAD83(NSRS) / NV E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3610','NAD83(NSRS) / NV E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3611','NAD83(NSRS) / NV W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3612','NAD83(NSRS) / NV W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3623','NAD83(NSRS) / NY C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3624','NAD83(NSRS) / NY C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3625','NAD83(NSRS) / NY E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3626','NAD83(NSRS) / NY E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3627','NAD83(NSRS) / NY LI (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3628','NAD83(NSRS) / NY LI (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3629','NAD83(NSRS) / NY W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3630','NAD83(NSRS) / NY W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3728','NAD83(NSRS) / OH N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3729','NAD83(NSRS) / OH S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3639','NAD83(NSRS) / OK N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3640','NAD83(NSRS) / OK N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3641','NAD83(NSRS) / OK S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3642','NAD83(NSRS) / OK S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3646','NAD83(NSRS) / OR N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3645','NAD83(NSRS) / OR N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3648','NAD83(NSRS) / OR S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3647','NAD83(NSRS) / OR S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3644','NAD83(2007) / OR GIC Lam (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3649','NAD83(NSRS) / PA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3650','NAD83(NSRS) / PA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3651','NAD83(NSRS) / PA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3652','NAD83(NSRS) / PA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3654','NAD83(NSRS) / RI (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3653','NAD83(NSRS) / RI (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3656','NAD83(NSRS) / SC (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3655','NAD83(NSRS) / SC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3657','NAD83(NSRS) / SD N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3658','NAD83(NSRS) / SD N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3659','NAD83(NSRS) / SD S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3660','NAD83(NSRS) / SD S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3662','NAD83(NSRS) / TN (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3663','NAD83(NSRS) / TX C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3664','NAD83(NSRS) / TX C ftUS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3667','NAD83(NSRS) / TX N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3668','NAD83(NSRS) / TX N ftUS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3669','NAD83(NSRS) / TX NC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3670','NAD83(NSRS) / TX NC ftUS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3671','NAD83(NSRS) / TX S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3672','NAD83(NSRS) / TX S ftUS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3673','NAD83(NSRS) / TX SC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3674','NAD83(NSRS) / TX SC ftUS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3676','NAD83(NSRS) / UT C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3675','NAD83(NSRS) / UT C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3677','NAD83(NSRS) / UT C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3679','NAD83(NSRS) / UT N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3680','NAD83(NSRS) / UT N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3682','NAD83(NSRS) / UT S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3683','NAD83(NSRS) / UT S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3685','NAD83(NSRS) / VA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3686','NAD83(NSRS) / VA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3687','NAD83(NSRS) / VA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3688','NAD83(NSRS) / VA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3689','NAD83(NSRS) / WA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3690','NAD83(NSRS) / WA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3691','NAD83(NSRS) / WA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3692','NAD83(NSRS) / WA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3695','NAD83(NSRS) / WI C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3696','NAD83(NSRS) / WI C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3697','NAD83(NSRS) / WI N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3698','NAD83(NSRS) / WI N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3699','NAD83(NSRS) / WI S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3700','NAD83(NSRS) / WI S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3701','NAD83(NSRS) / WTM 83','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3693','NAD83(NSRS) / WV N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26869','NAD83(NSRS) / WV N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3694','NAD83(NSRS) / WV S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','26870','NAD83(NSRS) / WV S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3702','NAD83(NSRS) / WY E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3730','NAD83(NSRS) / WY E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3703','NAD83(NSRS) / WY EC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3731','NAD83(NSRS) / WY EC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3705','NAD83(NSRS) / WY W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3733','NAD83(NSRS) / WY W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3704','NAD83(NSRS) / WY WC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3732','NAD83(NSRS) / WY WC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3467','NAD83(NSRS) / AK Alb','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3468','NAD83(NSRS) / AK 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3469','NAD83(NSRS) / AK 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3470','NAD83(NSRS) / AK 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3471','NAD83(NSRS) / AK 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3472','NAD83(NSRS) / AK 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3473','NAD83(NSRS) / AK 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3474','NAD83(NSRS) / AK 7 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3475','NAD83(NSRS) / AK 8 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3476','NAD83(NSRS) / AK 9 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3477','NAD83(NSRS) / AK 10 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3509','NAD83(NSRS) / DE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3524','NAD83(NSRS) / ID E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3526','NAD83(NSRS) / ID W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3536','NAD83(NSRS) / IA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3538','NAD83(NSRS) / IA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3559','NAD83(NSRS) / MD (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3604','NAD83(NSRS) / MT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3615','NAD83(NSRS) / NJ (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3661','NAD83(NSRS) / TN (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3665','NAD83(NSRS) / TX Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3666','NAD83(NSRS) / TX LC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3678','NAD83(NSRS) / UT N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3681','NAD83(NSRS) / UT S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3684','NAD83(NSRS) / VT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2790','NAD83(HARN) / Illinois East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3084','NAD83(HARN) / TX LC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3083','TCMS/AEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3082','NAD83 / TX LC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3085','NAD83(HARN) / TX Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3091','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3090','NAD83(HARN) / KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3088','NAD83 / KY1Z (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9379','726','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3857','WGS 84 / Popular Visualisation Pseudo-Mercator','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9379','IGb14 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','3886','National Elevation Network height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3893','ED50 / Iraq Nat. Grid','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4743','Karbala 1979 (Polservice)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3391','Karbala 1979 (Polservice) / UTM zone 37N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3392','Karbala 1979 (Polservice) / UTM zone 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3393','Karbala 1979 (Polservice) / UTM zone 39N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4191','ALB86','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2462','ALB86 / GK zn 4','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4129','Observatario Campos Rodrigues 1907','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6984','IG05','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6962','ETRS89 / Albania LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6991','IG05/12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6870','ETRS89 / Albania TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2039','Israel / Israeli TM Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6796','NAD83(CORS96) / Oregon Bend-Vale zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4141','Israel','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2039','Israeli New Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6997','NAD83(2011) / CCSF-CS13 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5843','Abu Dhabi height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6996','NAD83(2011) / San Francisco CS13 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6996','NAD83(2011) / CCSF-CS13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7006','Nahrwan 1934 / UTM 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7007','Nahrwan 1934 / UTM 39N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4201','Blue Nile 1958','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20135','Blue Nile 1958 / UTM zone 35N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20136','Blue Nile 1958 / UTM zone 36N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20137','Blue Nile 1958 / UTM zone 37N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20138','Blue Nile 1958 / UTM zone 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6307','NAD83(CORS96) / PR and VI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6312','CGRS93 / Local Transverse Mercator (LTM)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4171','RGF93 v1 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4965','RGF93 v1 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7057','NAD83(2011) / IaRCS zone 1 Spencer','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7058','NAD83(2011) / IaRCS zone 2 Mason City','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7059','NAD83(2011) / IaRCS zone 3 Elkader','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5489','RGAF09 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7060','NAD83(2011) / IaRCS zone 4 Sioux City-Iowa Falls','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4624','RGFG95 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7061','NAD83(2011) / IaRCS zone 5 Waterloo','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4627','RGR92 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7062','NAD83(2011) / IaRCS zone 6 Council Bluffs','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4470','RGM04 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7063','NAD83(2011) / IaRCS zone 7 Carroll-Atlantic','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4463','RGSPM06 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7064','NAD83(2011) / IaRCS zone 8 Ames-Des Moines','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4466','RGSPM06 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7065','NAD83(2011) / IaRCS zone 9 Newton','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4469','RGM04 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7066','NAD83(2011) / IaRCS zone 10 Cedar Rapids','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4971','RGR92 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7067','NAD83(2011) / IaRCS zone 11 Dubuque-Davenport','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4967','RGFG95 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7068','NAD83(2011) / IaRCS zone 12 Red Oak-Ottumwa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5488','RGAF09 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7069','NAD83(2011) / IaRCS zone 13 Fairfield','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7073','RGTAAF07 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7070','NAD83(2011) / IaRCS zone 14 Burlington','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7072','RGTAAF07','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7109','NAD83(2011) / St Mary (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7114','NAD83(2011) / Ft Peck Sx (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7110','NAD83(2011) / Blackfeet (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7125','NAD83(2011) / Crow (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7111','NAD83(2011) / Milk R (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7115','NAD83(2011) / Crow (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7112','NAD83(2011) / Ft Belknap (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7278','InGCS 2011 11 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7113','NAD83(2011) / Ft Peck As (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7116','NAD83(2011) / Bobcat (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7126','NAD83(2011) / Bobcat (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7117','NAD83(2011) / Billings (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7118','NAD83(2011) / Wind R (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7127','NAD83(2011) / Billings (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7119','NAD83(2011) / St Mary (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7120','NAD83(2011) / Blackfeet (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7128','NAD83(2011) / Wind R (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7121','NAD83(2011) / Milk R (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7122','NAD83(2011) / Ft Belknap (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7123','NAD83(2011) / Ft Peck As (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7124','NAD83(2011) / Ft Peck Sx (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7279','InGCS 2011 12 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7267','InGCS 2011 06-32 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7142','Palestine Grid modified','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7267','NAD83(2011) / InGCS Boone (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7267','NAD83(2011) / InGCS Hendricks (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7259','InGCS 2011 02 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7323','InGCS 2011 39 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7131','NAD83(2011) / San Francisco CS13 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7131','NAD83(2011) / CCSF-CS13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7132','NAD83(2011) / CCSF-CS13 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3973','WGS 84 / NSIDC EA North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3974','WGS 84 / NSIDC EA South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3975','WGS 84 / NSIDC EA Global','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3976','WGS 84 / NSIDC PS South','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3979','NAD83(CSRS) / Canada LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3986','Katanga 1955 / TM zone A','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3987','Katanga 1955 / TM zone B','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7280','InGCS 2011 12 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7349','InGCS 2011 65 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7268','InGCS 2011 06-32 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7268','NAD83(2011) / InGCS Boone (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7268','NAD83(2011) / InGCS Hendricks (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7297','InGCS 2011 23-86 (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','3906','D48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7257','InGCS 2011 01 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7294','InGCS 2011 20-43-85 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7294','NAD83(2011) / InGCS Elkhart (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7281','InGCS 2011 13-47-59 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7260','InGCS 2011 02 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7269','InGCS 2011 07 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7281','NAD83(2011) / InGCS Crawford (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7270','InGCS 2011 07 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7258','InGCS 2011 01 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7281','NAD83(2011) / InGCS Lawrence (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7281','NAD83(2011) / InGCS Orange (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7294','NAD83(2011) / InGCS Kosciusko (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7294','NAD83(2011) / InGCS Wabash (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7261','InGCS 2011 03 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7271','InGCS 2011 08 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7262','InGCS 2011 03 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7295','InGCS 2011 21-24-81 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7263','InGCS 2011 04 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7272','InGCS 2011 08 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7264','InGCS 2011 04 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7295','NAD83(2011) / InGCS Fayette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7273','InGCS 2011 09 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7282','InGCS 2011 13-47-59 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7274','InGCS 2011 09 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7265','InGCS 2011 05-18 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7265','NAD83(2011) / InGCS Blackford (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7265','NAD83(2011) / InGCS Delaware (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7282','NAD83(2011) / InGCS Crawford (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7282','NAD83(2011) / InGCS Lawrence (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7282','NAD83(2011) / InGCS Orange (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7295','NAD83(2011) / InGCS Franklin (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7275','InGCS 2011 10-22-72 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7266','InGCS 2011 05-18 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7266','NAD83(2011) / InGCS Blackford (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7266','NAD83(2011) / InGCS Delaware (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7275','NAD83(2011) / InGCS Clark (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7275','NAD83(2011) / InGCS Floyd (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7275','NAD83(2011) / InGCS Scott (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7295','NAD83(2011) / InGCS Union (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7297','NAD83(2011) / InGCS Fountain (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3043','ETRS89 / UTM zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7283','InGCS 2011 14-28 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3043','DE_ETRS89 / UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7283','NAD83(2011) / InGCS Daviess (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3044','DE_ETRS89 / UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3044','ETRS89 / UTM zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7276','InGCS 2011 10-22-72 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7276','NAD83(2011) / InGCS Clark (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','ETRS89 / UTM zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7276','NAD83(2011) / InGCS Floyd (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7276','NAD83(2011) / InGCS Scott (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7283','NAD83(2011) / InGCS Greene (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7277','InGCS 2011 11 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7297','NAD83(2011) / InGCS Warren (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7309','InGCS 2011 31-88 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7309','NAD83(2011) / InGCS Harrison (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7284','InGCS 2011 14-28 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','DE_ETRS89 / UTM_BB','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','ETRS89 / UTM zone 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7284','NAD83(2011) / InGCS Daviess (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7284','NAD83(2011) / InGCS Greene (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7296','InGCS 2011 21-24-81 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7296','NAD83(2011) / InGCS Fayette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7296','NAD83(2011) / InGCS Franklin (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7296','NAD83(2011) / InGCS Union (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7285','InGCS 2011 15-58-78 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7285','NAD83(2011) / InGCS Dearborn (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7285','NAD83(2011) / InGCS Ohio (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7285','NAD83(2011) / InGCS Switzerland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7309','NAD83(2011) / InGCS Washington (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7298','InGCS 2011 23-86 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7298','NAD83(2011) / InGCS Fountain (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7298','NAD83(2011) / InGCS Warren (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7286','InGCS 2011 15-58-78 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7286','NAD83(2011) / InGCS Dearborn (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7286','NAD83(2011) / InGCS Ohio (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7286','NAD83(2011) / InGCS Switzerland (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7315','InGCS 2011 35-92 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7315','NAD83(2011) / InGCS Huntington (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7315','NAD83(2011) / InGCS Whitley (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7287','InGCS 2011 16-70 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7287','NAD83(2011) / InGCS Decatur (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7287','NAD83(2011) / InGCS Rush (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7310','InGCS 2011 31-88 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7299','InGCS 2011 25-50-71 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7299','NAD83(2011) / InGCS Fulton (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7288','InGCS 2011 16-70 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7288','NAD83(2011) / InGCS Decatur (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7288','NAD83(2011) / InGCS Rush (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7299','NAD83(2011) / InGCS Marshall (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7289','InGCS 2011 17 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7299','NAD83(2011) / InGCS St. Joseph (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7290','InGCS 2011 17 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7310','NAD83(2011) / InGCS Harrison (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7310','NAD83(2011) / InGCS Washington (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7324','InGCS 2011 39 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7291','InGCS 2011 19-51 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7291','NAD83(2011) / InGCS Dubois (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7291','NAD83(2011) / InGCS Martin (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7311','InGCS 2011 33 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7300','InGCS 2011 25-50-71 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7300','NAD83(2011) / InGCS Fulton (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7292','InGCS 2011 19-51 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7292','NAD83(2011) / InGCS Dubois (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7292','NAD83(2011) / InGCS Martin (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7300','NAD83(2011) / InGCS Marshall (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7300','NAD83(2011) / InGCS St. Joseph (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7359','InGCS 2011 76 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7301','InGCS 2011 26 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7293','InGCS 2011 20-43-85 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7293','NAD83(2011) / InGCS Elkhart (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7293','NAD83(2011) / InGCS Kosciusko (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7293','NAD83(2011) / InGCS Wabash (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7312','InGCS 2011 33 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7302','InGCS 2011 26 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7325','InGCS 2011 40 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7303','InGCS 2011 27 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3970','NAD83(NSRS) / VA LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7316','InGCS 2011 35-92 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3969','NAD83(HARN) / VA LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3969','NAD83(HPGN) / Virginia Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7304','InGCS 2011 27 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7316','NAD83(2011) / InGCS Huntington (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7313','InGCS 2011 34-52 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7313','NAD83(2011) / InGCS Howard (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7305','InGCS 2011 29-80 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7305','NAD83(2011) / InGCS Hamilton (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7305','NAD83(2011) / InGCS Tipton (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7313','NAD83(2011) / InGCS Miami (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7316','NAD83(2011) / InGCS Whitley (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7333','InGCS 2011 45-56 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7306','InGCS 2011 29-80 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7306','NAD83(2011) / InGCS Hamilton (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7306','NAD83(2011) / InGCS Tipton (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7317','InGCS 2011 36 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7314','InGCS 2011 34-52 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7314','NAD83(2011) / InGCS Howard (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7307','InGCS 2011 30-48 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7307','NAD83(2011) / InGCS Hancock (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7307','NAD83(2011) / InGCS Madison (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7314','NAD83(2011) / InGCS Miami (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7326','InGCS 2011 40 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7318','InGCS 2011 36 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7308','InGCS 2011 30-48 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7308','NAD83(2011) / InGCS Hancock (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7308','NAD83(2011) / InGCS Madison (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7333','NAD83(2011) / InGCS Lake (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7333','NAD83(2011) / InGCS Newton (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7339','InGCS 2011 54-67 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7319','InGCS 2011 37-64 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7319','NAD83(2011) / InGCS Jasper (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7319','NAD83(2011) / InGCS Porter (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7327','InGCS 2011 41-49 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7327','NAD83(2011) / InGCS Johnson (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7327','NAD83(2011) / InGCS Marion (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7320','InGCS 2011 37-64 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7320','NAD83(2011) / InGCS Jasper (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7320','NAD83(2011) / InGCS Porter (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7339','NAD83(2011) / InGCS Montgomery (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7321','InGCS 2011 38 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7339','NAD83(2011) / InGCS Putnam (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7322','InGCS 2011 38 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7334','InGCS 2011 45-56 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7328','InGCS 2011 41-49 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7328','NAD83(2011) / InGCS Johnson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7328','NAD83(2011) / InGCS Marion (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7334','NAD83(2011) / InGCS Lake (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7329','InGCS 2011 42 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7334','NAD83(2011) / InGCS Newton (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7330','InGCS 2011 42 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7343','InGCS 2011 61-83 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7343','NAD83(2011) / InGCS Parke (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7343','NAD83(2011) / InGCS Vermillion (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7331','InGCS 2011 44-57 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7331','NAD83(2011) / InGCS LaGrange (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7331','NAD83(2011) / InGCS Noble (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7340','InGCS 2011 54-67 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7335','InGCS 2011 46-66-75 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7335','NAD83(2011) / InGCS LaPorte (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7332','InGCS 2011 44-57 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7332','NAD83(2011) / InGCS LaGrange (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7332','NAD83(2011) / InGCS Noble (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7335','NAD83(2011) / InGCS Pulaski (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7335','NAD83(2011) / InGCS Starke (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7340','NAD83(2011) / InGCS Montgomery (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4049','RGRDC 2005 / Congo TM 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7340','NAD83(2011) / InGCS Putnam (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4048','RGRDC 2005 / Congo TM 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7350','InGCS 2011 65 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7341','InGCS 2011 60 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7336','InGCS 2011 46-66-75 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7336','NAD83(2011) / InGCS LaPorte (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7336','NAD83(2011) / InGCS Pulaski (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7336','NAD83(2011) / InGCS Starke (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7342','InGCS 2011 60 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7360','InGCS 2011 76 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7337','InGCS 2011 53-55 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7337','NAD83(2011) / InGCS Monroe (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7337','NAD83(2011) / InGCS Morgan (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7344','InGCS 2011 61-83 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7344','NAD83(2011) / InGCS Parke (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7344','NAD83(2011) / InGCS Vermillion (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7338','InGCS 2011 53-55 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7338','NAD83(2011) / InGCS Monroe (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7338','NAD83(2011) / InGCS Morgan (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6312','CGRS93 / Cyprus LTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7345','InGCS 2011 62 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7351','InGCS 2011 68-89 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7346','InGCS 2011 62 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7351','NAD83(2011) / InGCS Randolph (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7351','NAD83(2011) / InGCS Wayne (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7361','InGCS 2011 77 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7347','InGCS 2011 63-87 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7347','NAD83(2011) / InGCS Pike (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7347','NAD83(2011) / InGCS Warrick (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7362','InGCS 2011 77 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7352','InGCS 2011 68-89 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7348','InGCS 2011 63-87 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7348','NAD83(2011) / InGCS Pike (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7348','NAD83(2011) / InGCS Warrick (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7352','NAD83(2011) / InGCS Randolph (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7352','NAD83(2011) / InGCS Wayne (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7353','InGCS 2011 69 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7354','InGCS 2011 69 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7355','InGCS 2011 73 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7363','InGCS 2011 79-91 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7356','InGCS 2011 73 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7363','NAD83(2011) / InGCS Tippecanoe (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7357','InGCS 2011 74 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7363','NAD83(2011) / InGCS White (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7358','InGCS 2011 74 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7364','InGCS 2011 79-91 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7364','NAD83(2011) / InGCS Tippecanoe (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7364','NAD83(2011) / InGCS White (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4037','WGS 84 / UTM zone 35N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7365','InGCS 2011 82 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4038','WGS 84 / UTM zone 36N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7366','InGCS 2011 82 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7367','InGCS 2011 84 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7368','InGCS 2011 84 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7369','InGCS 2011 90 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7370','InGCS 2011 90 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7535','NAD83(2011) / WISCRS Outagamie (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7446','Cyprus vertical system','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7542','WISCRS Door (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7560','WISCRS Marinette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7531','WISCRS Bayfield (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7535','NAD83(2011) / WISCRS Winnebago (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7528','WISCRS Adams-Juneau (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7528','NAD83(2011) / WISCRS Adams (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7528','NAD83(2011) / WISCRS Juneau (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7532','WISCRS Brown (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7546','WISCRS Florence (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7533','WISCRS Buffalo (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7536','WISCRS Chippewa (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7529','WISCRS Ashland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7534','WISCRS Burnett (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7563','WISCRS Oconto (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7537','WISCRS Clark (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7547','WISCRS Forest (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7535','WISCRS Out-Cal-Win-FdL (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7530','WISCRS Barron (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7535','NAD83(2011) / WISCRS Calumet (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7535','NAD83(2011) / WISCRS Fond du Lac (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7561','WISCRS Menominee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7548','WISCRS Grant (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4728','Pico de las Nieves 1984','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7538','WISCRS Columbia (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5610','HR_HRVD71 / NOH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7580','WISCRS Walworth (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7562','WISCRS Monroe (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7564','WISCRS Oneida (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7539','WISCRS Crawford (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7549','WISCRS Green-Lafayette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7540','WISCRS Dane (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7549','NAD83(2011) / WISCRS Green (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7549','NAD83(2011) / WISCRS Lafayette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7589','WISCRS Barron (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7541','WISCRS Dodge-Jefferson (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7541','NAD83(2011) / WISCRS Dodge (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7541','NAD83(2011) / WISCRS Jefferson (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7565','WISCRS Pepin-Pierce (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7565','NAD83(2011) / WISCRS Pepin (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7550','WISCRS Green Lake-Marquette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7543','WISCRS Douglas (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7550','NAD83(2011) / WISCRS Green Lake (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7544','WISCRS Dunn (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7550','NAD83(2011) / WISCRS Marquette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7545','WISCRS Eau Claire (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7565','NAD83(2011) / WISCRS Pierce (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7551','WISCRS Iowa (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7581','WISCRS Washburn (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7552','WISCRS Iron (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7566','WISCRS Polk (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7553','WISCRS Jackson (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7603','WISCRS Dunn (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7567','WISCRS Portage (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7582','WISCRS Washington (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7568','WISCRS Price (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7590','WISCRS Bayfield (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7554','WISCRS Oz-Milw-Rac-Ken (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7554','NAD83(2011) / WISCRS Kenosha(m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7554','NAD83(2011) / WISCRS Milwaukee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7554','NAD83(2011) / WISCRS Ozaukee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7554','NAD83(2011) / WISCRS Racine (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7569','WISCRS Richland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7583','WISCRS Waukesha (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7570','WISCRS Rock (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7619','WISCRS Marinette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7571','WISCRS Rusk (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7555','WISCRS Kew-Manit-Sheb (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7555','NAD83(2011) / WISCRS Kewaunee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7555','NAD83(2011) / WISCRS Manitowoc (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7555','NAD83(2011) / WISCRS Sheboygan (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7584','WISCRS Waupaca (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7572','WISCRS Sauk (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7556','WISCRS La Crosse (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7591','WISCRS Brown (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7557','WISCRS Langlade (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7573','WISCRS Sawyer (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7558','WISCRS Lincoln (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7585','WISCRS Waushara (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7559','WISCRS Marathon (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7574','WISCRS Shawano (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7604','WISCRS Eau Claire (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7575','WISCRS St. Croix (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7586','WISCRS Wood (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7576','WISCRS Taylor (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7592','WISCRS Buffalo (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7577','WISCRS Trempealeau (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7632','WISCRS Sawyer (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7578','WISCRS Vernon (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7593','WISCRS Burnett (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7579','WISCRS Vilas (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7587','WISCRS Adams-Juneau (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7587','NAD83(2011) / WISCRS Adams (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7587','NAD83(2011) / WISCRS Juneau (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7605','WISCRS Florence (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7588','WISCRS Ashland (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7620','WISCRS Menominee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7606','WISCRS Forest (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7594','WISCRS Out-Cal-Win-FdL (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7594','NAD83(2011) / WISCRS Calumet (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7594','NAD83(2011) / WISCRS Fond du Lac (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7594','NAD83(2011) / WISCRS Outagamie (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7594','NAD83(2011) / WISCRS Winnebago (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7595','WISCRS Chippewa (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7607','WISCRS Grant (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7596','WISCRS Clark (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7621','WISCRS Monroe (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7633','WISCRS Shawano (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7622','WISCRS Oconto (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7597','WISCRS Columbia (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3152','ST74 0 gon 65:-1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7608','WISCRS Green-Lafayette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7608','NAD83(2011) / WISCRS Green (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7608','NAD83(2011) / WISCRS Lafayette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7598','WISCRS Crawford (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7599','WISCRS Dane (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7623','WISCRS Oneida (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7634','WISCRS St. Croix (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7609','WISCRS GreenLake-Marqt (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7600','WISCRS Dodge-Jefferson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7600','NAD83(2011) / WISCRS Dodge (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7600','NAD83(2011) / WISCRS Jefferson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7609','NAD83(2011) / WISCRS Green Lake (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7601','WISCRS Door (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7609','NAD83(2011) / WISCRS Marquette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7602','WISCRS Douglas (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7624','WISCRS Pepin-Pierce (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7610','WISCRS Iowa (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7624','NAD83(2011) / WISCRS Pepin (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7611','WISCRS Iron (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7624','NAD83(2011) / WISCRS Pierce (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7612','WISCRS Jackson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7625','WISCRS Polk (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7635','WISCRS Taylor (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7626','WISCRS Portage (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7613','WISCRS Oz-Milw-Rac-Ken (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7613','NAD83(2011) / WISCRS Kenosha (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7613','NAD83(2011) / WISCRS Milwaukee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7613','NAD83(2011) / WISCRS Ozaukee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7613','NAD83(2011) / WISCRS Racine (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7627','WISCRS Price (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7636','WISCRS Trempealeau (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7628','WISCRS Richland (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7629','WISCRS Rock (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7614','WISCRS Kew-Manit-Sheb (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7614','NAD83(2011) / WISCRS Kewaunee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7614','NAD83(2011) / WISCRS Manitowoc (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7614','NAD83(2011) / WISCRS Sheboygan (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7637','WISCRS Vernon (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7630','WISCRS Rusk (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7615','WISCRS La Crosse (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7616','WISCRS Langlade (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7631','WISCRS Sauk (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7617','WISCRS Lincoln (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7638','WISCRS Vilas (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7618','WISCRS Marathon (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7639','WISCRS Walworth (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9377','MAGNA-SIRGAS / CTM12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9387','ETRS89 / AbInvA96_2020 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9388','ETRS89 / AbInvA96_2020 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7640','WISCRS Washburn (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7641','WISCRS Washington (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7642','WISCRS Waukesha (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7643','WISCRS Waupaca (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7644','WISCRS Waushara (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7645','WISCRS Wood (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6316','Macedonia State Coordinate System zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3857','Web Mercator','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9391','BGS2005 / UTM zone 35 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5634','REGCAN95 - LCC','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9400','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9392','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7692','Kyrg06-68','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7693','Kyrg06-71','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7694','Kyrg06-74','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7695','Kyrg06-77','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7696','Kyrg06-80','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7700','LAS-2000 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5635','REGCAN95 - LAEA','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9401','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5754','Poolbeg height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7791','RDN2008 / UTM zone 32N (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7792','RDN2008 / TM33 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7792','RDN2008 / UTM zone 33N (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7791','RDN2008 / TM32 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7793','RDN2008 / UTM zone 34N (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7800','CS2005 zone 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7794','RDN2008 / Fuso Italia (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7795','RDN2008 / Fuso 12 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7799','CS2005 zone 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7799','Coordinate System 2005 zone 34','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7815','WGS 84 (Original)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7800','Coordinate System 2005 zone 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7803','BGS2005 / UTM zone 34N (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7816','WGS 84 (Original)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7804','BGS2005 / UTM zone 35 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7825','Pulkovo 1942 / CS63 X1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7831','Pulkovo 1942 / CS63 X7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7826','Pulkovo 1942 / CS63 X2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7827','Pulkovo 1942 / CS63 X3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7828','Pulkovo 1942 / CS63 X4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7829','Pulkovo 1942 / CS63 X5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7830','Pulkovo 1942 / CS63 X6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7845','GDA2020 / Geoscience Australia Lambert','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4710','ASTRO DOS 71/4','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4710','St. Helena 1971','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7837','DE_AMST_2016 / NH','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7879','WGS 84 Tritan St. Helena','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7878','St. Helena 1971 / UTM zone 30S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7880','WGS 84 Tritan St. Helena','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7881','WGS 84 Tritan St. Helena','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7882','WGS 84 Tritan St. Helena / SHLG(Tritan)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7899','GDA2020 / Vicgrid2020','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3111','GDA94 / Vicgrid94','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7908','388','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7909','355','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7909','ITRF2000 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7910','209','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7911','277','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7911','ITRF2008 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5332','242','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5332','ITRF2008 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4896','269','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4919','419','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4919','ITRF2000 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4918','349','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7887','SHGD2015 / UTM zone 30S','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9393','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7887','St. Helena Map Grid 2015','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7888','MSL 1971 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7889','MSL Tritan height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7877','St. Helena 1971 / SHLG71','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7954','St. Helena 1971 / UTM zone 30S + Jamestown 1971 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22196','C Inchauspe /Argentina 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22197','C Inchauspe /Argentina 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22195','C Inchauspe /Argentina 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22193','C Inchauspe /Argentina 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22194','C Inchauspe /Argentina 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22192','C Inchauspe /Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22191','C Inchauspe /Argentina 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2315','Campo Inchauspe /UTM 19S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2316','Campo Inchauspe /UTM 20S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7992','Malongo 1987 / UTM 33S','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7976','Hong Kong Principal Datum depth','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8042','S-SC','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8042','Stable Cadastre','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8043','Stable cadastre','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8043','S-SC','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8050','Mean Sea Level height (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8050','MSL height (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8051','Mean Sea Level depth (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8051','MSL depth (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8065','NAD83(2011) / PCCS east zone(ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8052','Mean Sea Level height (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8052','MSL height (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8066','NAD83(2011) / PCCS central zone(ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8053','Mean Sea Level depth (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8053','MSL depth (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8067','NAD83(2011) / PCCS west zone(ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8068','NAD83(2011) / PCCS Mt. Lemmon zone(ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8090','WISCRS Florence (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4974','SIRGAS95 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8091','WISCRS Florence (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8096','WISCRS Wood (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7789','425','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8095','WISCRS Wood (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8109','WISCRS Vilas (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8097','WISCRS Waushara (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8105','WISCRS Washburn (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8098','WISCRS Waushara (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8113','WISCRS Trempealeau (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8099','WISCRS Waupaca (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8106','WISCRS Washburn (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8100','WISCRS Waupaca (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8110','WISCRS Vilas (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8101','WISCRS Waukesha (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8107','WISCRS Walworth (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8102','WISCRS Waukesha (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8131','WISCRS Price (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8103','WISCRS Washington (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8108','WISCRS Walworth (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8104','WISCRS Washington (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8111','WISCRS Vernon (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8114','WISCRS Trempealeau (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8112','WISCRS Vernon (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8154','WISCRS Langlade (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8115','WISCRS Taylor (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8132','WISCRS Price (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8116','WISCRS Taylor (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8161','WISCRS Jackson (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8117','WISCRS St. Croix (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8133','WISCRS Portage (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8118','WISCRS St. Croix (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8155','WISCRS La Crosse (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8119','WISCRS Shawano (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8134','WISCRS Portage (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8120','WISCRS Shawano (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8165','WISCRS Iowa (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8121','WISCRS Sawyer (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8135','WISCRS Polk (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8122','WISCRS Sawyer (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8156','WISCRS La Crosse (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8123','WISCRS Sauk (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8136','WISCRS Polk (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8124','WISCRS Sauk (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8162','WISCRS Jackson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8125','WISCRS Rusk (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8092','WISCRS Eau Claire (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8126','WISCRS Rusk (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8163','WISCRS Iron (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8127','WISCRS Rock (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8137','WISCRS Pepin-Pierce (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8128','WISCRS Rock (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8137','NAD83(HARN) / WISCRS Pepin (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8129','WISCRS Richland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8137','NAD83(HARN) / WISCRS Pierce (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8130','WISCRS Richland (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8166','WISCRS Iowa (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8157','WISCRS Kew-Manit-Sheb (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8157','NAD83(HARN) / WISCRS Kewaunee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8138','WISCRS Pepin-Pierce (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8138','NAD83(HARN) / WISCRS Pepin (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8138','NAD83(HARN) / WISCRS Pierce (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8157','NAD83(HARN) / WISCRS Manitowoc (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8139','WISCRS Oneida (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8157','NAD83(HARN) / WISCRS Sheboygan (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8140','WISCRS Oneida (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8164','WISCRS Iron (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8141','WISCRS Oconto (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8170','WISCRS Green-Lafayette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8142','WISCRS Oconto (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8093','WISCRS Eau Claire (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8143','WISCRS Monroe (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8170','NAD83(HARN) / WISCRS Green (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8144','WISCRS Monroe (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8158','WISCRS Kew-Manit-Sheb (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8145','WISCRS Menominee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8158','NAD83(HARN) / WISCRS Kewaunee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8146','WISCRS Menominee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8158','NAD83(HARN) / WISCRS Manitowoc (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8147','WISCRS Marinette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8158','NAD83(HARN) / WISCRS Sheboygan (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8148','WISCRS Marinette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8167','WISCRS Green Lake-Marquette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8149','WISCRS Marathon (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8167','NAD83(HARN) / WISCRS Green Lake (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8150','WISCRS Marathon (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8167','NAD83(HARN) / WISCRS Marquette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8151','WISCRS Lincoln (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8179','WISCRS Dunn (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8152','WISCRS Lincoln (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8170','NAD83(HARN) / WISCRS Lafayette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8153','WISCRS Langlade (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8159','WISCRS Oz-Milw-Rac-Ken (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8159','NAD83(HARN) / WISCRS Kenosha(m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8159','NAD83(HARN) / WISCRS Milwaukee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8159','NAD83(HARN) / WISCRS Ozaukee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8159','NAD83(HARN) / WISCRS Racine (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8180','WISCRS Dunn (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8168','WISCRS GreenLake-Marqt (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8168','NAD83(HARN) / WISCRS Green Lake (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8168','NAD83(HARN) / WISCRS Marquette (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8228','North American Vertical Datum of 1988 height (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8160','WISCRS Oz-Milw-Rac-Ken (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8160','NAD83(HARN) / WISCRS Kenosha (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8160','NAD83(HARN) / WISCRS Milwaukee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8160','NAD83(HARN) / WISCRS Ozaukee (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8160','NAD83(HARN) / WISCRS Racine (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8181','WISCRS Douglas (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8200','WISCRS Columbia (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8169','WISCRS Green-Lafayette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8169','NAD83(HARN) / WISCRS Green (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8169','NAD83(HARN) / WISCRS Lafayette (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8182','WISCRS Douglas (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8203','WISCRS Chippewa (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','Guam Geodetic Network 1993','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8171','WISCRS Grant (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8184','WISCRS Door (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8172','WISCRS Grant (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8173','WISCRS Forest (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','GGN93','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8185','WISCRS Door (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8177','WISCRS Forest (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8204','WISCRS Chippewa (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8237','NAD83(CSRS98)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8187','WISCRS Dodge-Jefferson (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8187','NAD83(HARN) / WISCRS Dodge (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8187','NAD83(HARN) / WISCRS Jefferson (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8189','WISCRS Dodge-Jefferson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8189','NAD83(HARN) / WISCRS Dodge (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8189','NAD83(HARN) / WISCRS Jefferson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8205','WISCRS Out-Cal-Win-FdL (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8191','WISCRS Dane (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8205','NAD83(HARN) / WISCRS Calumet (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8193','WISCRS Dane (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8205','NAD83(HARN) / WISCRS Fond du Lac (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8196','WISCRS Crawford (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8205','NAD83(HARN) / WISCRS Outagamie (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8197','WISCRS Crawford (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8205','NAD83(HARN) / WISCRS Winnebago (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8198','WISCRS Columbia (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8313','NAD83(2011) / OCRS_CBU (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8201','WISCRS Clark (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8202','WISCRS Clark (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8206','WISCRS Out-Cal-Win-FdL (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8206','NAD83(HARN) / WISCRS Calumet (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8206','NAD83(HARN) / WISCRS Fond du Lac (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8206','NAD83(HARN) / WISCRS Outagamie (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8206','NAD83(HARN) / WISCRS Winnebago (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8311','NAD83(2011) / OCRS_BHA (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8207','WISCRS Burnett (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8323','NAD83(2011) / OCRS_MDI (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8208','WISCRS Burnett (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8314','NAD83(2011) / OCRS_CBU (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8209','WISCRS Buffalo (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8312','NAD83(2011) / OCRS_BHA (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8210','WISCRS Buffalo (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8333','NAD83(2011) / OCRS_PRU (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8212','WISCRS Brown (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8315','NAD83(2011) / OCRS_CRN (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8213','WISCRS Brown (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8324','NAD83(2011) / OCRS_MDI (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8214','WISCRS Bayfield (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8316','NAD83(2011) / OCRS_CRN (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8216','WISCRS Bayfield (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8337','NAD83(2011) / OCRS_RLA (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8218','WISCRS Barron (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8317','NAD83(2011) / OCRS_DPR (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8220','WISCRS Barron (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8325','NAD83(2011) / OCRS_MTC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8222','WISCRS Ashland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8318','NAD83(2011) / OCRS_DPR (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8224','WISCRS Ashland (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8334','NAD83(2011) / OCRS_PRU (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8319','NAD83(2011) / OCRS_DBU (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8326','NAD83(2011) / OCRS_MTC (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8225','WISCRS Adams-Juneau (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8225','NAD83(HARN) / WISCRS Adams (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8225','NAD83(HARN) / WISCRS Juneau (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8320','NAD83(2011) / OCRS_DBU (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8339','NAD83(2011) / OCRS_SKP (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8321','NAD83(2011) / OCRS_HLF (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8226','WISCRS Adams-Juneau (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8226','NAD83(HARN) / WISCRS Adams (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8226','NAD83(HARN) / WISCRS Juneau (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8327','NAD83(2011) / OCRS_NCE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8322','NAD83(2011) / OCRS_HLF (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8335','NAD83(2011) / OCRS_PCB (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8328','NAD83(2011) / OCRS_NCE (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8338','NAD83(2011) / OCRS_RLA (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8329','NAD83(2011) / OCRS_OCH (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8336','NAD83(2011) / OCRS_PCB (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8330','NAD83(2011) / OCRS_OCH (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','Guam Geodetic Network 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','GGN93','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8370','ETRS89 / Lambert 2008 + Oostende height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8331','NAD83(2011) / OCRS_OWY (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8340','NAD83(2011) / OCRS_SKP (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','Guam Geodetic Network 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','GGN93','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8332','NAD83(2011) / OCRS_OWY (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8353','S-JTSK [JTSK03] / Krovak EN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8341','NAD83(2011) / OCRS_UFX (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8342','NAD83(2011) / OCRS_UFX (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8343','NAD83(2011) / OCRS_WAL (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6130','GCVD54 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8344','NAD83(2011) / OCRS_WAL (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6131','LCVD61 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8345','NAD83(2011) / OCRS_WHI (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6132','CBVD61 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8346','NAD83(2011) / OCRS_WHI (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8347','NAD83(2011) / OCRS_WPA (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8348','NAD83(2011) / OCRS_WPA (ft)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8360','ETRS89 [ETRF2000] + Bpv','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4417','Pulkovo 42(83) / 3GK zn7','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8357','Bpv','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4434','Pulkovo 42(83) / 3GK zn8','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8351','S-JTSK (JTSK03)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8352','S-JTSK (JTSK03) / Krovak','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8357','SK_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8378','TVD','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8357','CZ_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8384','NCRS Las Vegas (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8353','S-JTSK (JTSK03) / Krovak East North','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD83','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5513','S-JTSK [JTSK] / Krovak','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8385','NCRS Las Vegas high (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8383','NCRS Las Vegas (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8387','NCRS Las Vegas high (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8433','Macao 1920 Grid System','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5514','S-JTSK [JTSK] / Krovak East North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4414','GGN93 / Guam Map Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4414','Guam Geodetic Network 1993 / Guam Map Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4414','NAD83 / Guam Map Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4414','NAD83(HPGN) / Guam Map Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8538','NAD83(2011) / KS RCS zone 18 Arkansas City','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8519','NAD83(2011) / KS RCS zone 2 Colby','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8520','NAD83(2011) / KS RCS zone 3 Oberlin','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8539','NAD83(2011) / KS RCS zone 19 Coffeyville','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8521','NAD83(2011) / KS RCS zone 4 Hays','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8441','Tananarive / Laborde Grid (Greenwich)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8522','NAD83(2011) / KS RCS zone 5 Great Bend','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8540','NAD83(2011) / KS RCS zone 20 Pittsburg','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8523','NAD83(2011) / KS RCS zone 6 Beloit','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7407','NAD27 / Texas North + NGVD29 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8524','NAD83(2011) / KS RCS zone 7 Salina','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8700','NAD83 / AZ_E + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8525','NAD83(2011) / KS RCS zone 8 Manhattan','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8701','NAD83 / AZ_C + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8526','NAD83(2011) / KS RCS zone 9 Emporia','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8702','NAD83 / AZ_W+ NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8527','NAD83(2011) / KS RCS zone 10 Atchison','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8528','NAD83(2011) / KS RCS zone 11 Kansas City','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8703','NAD83 / MI_N + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8529','NAD83(2011) / KS RCS zone 12 Ulysses','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8531','NAD83(2011) / KS RCS zone 13 Garden City','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8533','NAD83(2011) / KS RCS zone 14 Dodge City','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8704','NAD83 / MI_C + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8534','NAD83(2011) / KS RCS zone 15 Larned','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8705','NAD83 / MI_S+ NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8535','NAD83(2011) / KS RCS zone 16 Pratt','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8706','NAD83 / MT + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8536','NAD83(2011) / KS RCS zone 17 Wichita','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8707','NAD83 / ND_N + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8708','NAD83 / ND_S + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8449','NAD83(2002 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8709','NAD83 / OR_N + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8710','NAD83 / OR_S + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8711','NAD83 / SC + NAVD88 ht (ft)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8712','NAD83 / AR_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8713','NAD83 / AR_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8714','NAD83 / CA_1 + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8715','NAD83 / CA_2 + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8716','NAD83 / CA_3 + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8717','NAD83 / CA_4 + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8718','NAD83 / CA_5 + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8719','NAD83 / CA_6 + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8720','NAD83 / CO_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8721','NAD83 / CO_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8722','NAD83 / CO_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8723','NAD83 / CT + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8724','NAD83 / DE + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8725','NAD83 / FL_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8726','NAD83 / FL_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8727','NAD83 / FL_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8728','NAD83 / GA_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8729','NAD83 / GA_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8730','NAD83 / ID_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8731','NAD83 / ID_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8732','NAD83 / ID_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8733','NAD83 / IL_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8734','NAD83 / IL_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8735','NAD83 / IN_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8736','NAD83 / IN_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8737','NAD83 / IA_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8738','NAD83 / IA_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8739','NAD83 / KS_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8740','NAD83 / KS_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8741','NAD83 / KY_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8742','NAD83 / KY_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8743','NAD83 / LA_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8744','NAD83 / LA_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8745','NAD83 / ME_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8746','NAD83 / ME_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4437','NAD83(NSRS) / PR and VI','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8747','NAD83 / MD + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8748','NAD83 / MA_M + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8749','NAD83 / MA_I + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8750','NAD83 / MN_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8751','NAD83 / MN_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8752','NAD83 / MN_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8753','NAD83 / MS_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8754','NAD83 / MS_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8755','NAD83 / NE + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8756','NAD83 / NV_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8757','NAD83 / NV_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8758','NAD83 / NV_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8759','NAD83 / NH + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8760','NAD83 / NJ + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8761','NAD83 / NM_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8762','NAD83 / NM_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8763','NAD83 / NM_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8764','NAD83 / NY_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8765','NAD83 / NY_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8766','NAD83 / NY_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8767','NAD83 / NY_LI + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8768','NAD83 / NC + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8769','NAD83 / OH_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8770','NAD83 / OH_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8771','NAD83 / OK_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4455','NAD27 / Pennsylvania S','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8772','NAD83 / OK_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4456','NAD27 / New York Long Is','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8773','NAD83 / PA_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4457','NAD83 / S Dakota N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8774','NAD83 / PA_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8775','NAD83 / RI + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8776','NAD83 / SD_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8777','NAD83 / SD_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8778','NAD83 / TN + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8779','NAD83 / TX_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8780','NAD83 / TX_NC + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8781','NAD83 / TX_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8782','NAD83 / TX_SC + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8783','NAD83 / TX_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8784','NAD83 / UT_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8785','NAD83 / UT_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3112','GDA94 / GA LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3112','GDA94 / Geoscience LCC','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8786','NAD83 / UT_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8787','NAD83 / VT + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8788','NAD83 / VA_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8789','NAD83 / VA_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8790','NAD83 / WA_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8791','NAD83 / WA_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8792','NAD83 / WV_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8793','NAD83 / WV_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8794','NAD83 / WI_N + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8795','NAD83 / WI_C + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8796','NAD83 / WI_S + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8797','NAD83 / WY_E + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8798','NAD83 / WY_EC + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8799','NAD83 / WY_WC + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8800','NAD83 / WY_W + NAVD88 ht (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8801','NAD83 / AL_E + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8802','NAD83 / AL_W + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8803','NAD83 / AK_1 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8804','NAD83 / AK_2 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8805','NAD83 / AK_3 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8806','NAD83 / AK_4 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8807','NAD83 / AK_5 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8808','NAD83 / AK_6 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8809','NAD83 / AK_7 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8810','NAD83 / AK_8 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8811','NAD83 / AK_9 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8812','NAD83 / AK_10 + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8813','NAD83 / MO_E + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8814','NAD83 / MO_C + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8815','NAD83 / MO_W + NAVD88 ht (m)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7406','NAD27 + NGVD29 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6316','B&H GK zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8677','HDKS zone 5','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8675','N43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8677','D48 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8677','HR_HDKS / HR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8678','HDKS zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8678','HR_HDKS / HR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8677','B&H GK zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8686','SI_D48 / SI_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8686','D48 / Slovenia Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8687','D96/UTM','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5779','NVN99 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8678','B&H GK zone 6','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8544','NAD83(1997 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8545','NAD83(1997 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4474','Cadastre 1997 / UTM 38S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8541','NAD83(2002 AS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8541','NAD83(2002 GU)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8542','NAD83(2002 AS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8542','NAD83(2002 GU)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8542','NAD83(2002 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8449','NAD83(2002 AS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8449','NAD83(2002 GU)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8541','NAD83(2002 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8543','NAD83(1997 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','NAD83(1992 AK)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','NAD83(1993 HI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','NAD83(1993 AS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','NAD83(1993 GU)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4956','NAD83(1993 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','NAD83(1992 AK)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','NAD83(1993 HI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','NAD83(1993 AS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','NAD83(1993 GU)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','NAD83(1993 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD83(1992 AK)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD83(1993 HI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD83(1993 AS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD83(1993 GU)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD83(1993 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8683','STRS00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8684','STRS00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8685','STRS00','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8682','STRS00 / UTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22032','Camacupa / UTM zone 32S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4220','Camacupa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22091','Camacupa / TM 11.30 SE','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8694','Camacupa','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8698','REPANGOL','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22092','Camacupa / TM 12 SE','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22033','Camacupa / UTM zone 33S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8677','MGI 1901 / Gauss–Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8678','MGI 1901 / Gauss–Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8679','MGI 1901 / Gauss–Kruger zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6316','MGI 1901 / Gauss–Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8826','NAD83 / IDTM','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8860','NAD83(2002 PRVI)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8860','NAD83(2002 AS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8860','NAD83(2002 GU)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8697','REPANGOL','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8897','TVD','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8905','CR14','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8899','RGWF96 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8900','RGWF96 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8906','CR14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8908','CR14 / CRTM05','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7912','226','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8909','CR14 / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5358','SIRGAS-Chile realización 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8910','CR14 / UTM 17N','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','8912','CR14 / CRTM05 + DACR52 height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5358','SIRGAS-Chile epoch 2002.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8988','ITRF88 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8988','337','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7789','ITRF2014 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7912','ITRF2014 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4896','ITRF2005 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7908','ITRF97 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4918','ITRF97 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4917','275','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4917','ITRF96 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7907','233','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7907','ITRF96 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4916','352','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4916','ITRF94 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7906','264','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7906','ITRF94 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4915','263','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4915','ITRF93 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7905','227','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7905','ITRF93 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4914','261','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4914','ITRF92 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7904','286','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7904','ITRF92 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8989','ITRF89 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8989','401','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4913','258','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4913','ITRF91 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7903','241','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7903','ITRF91 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4912','301','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4912','ITRF90 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7902','282','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7902','ITRF90 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4911','387','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4911','ITRF89 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7901','361','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7901','ITRF89 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4910','439','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4910','ITRF88 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7900','400','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7900','ITRF88 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8227','370','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8227','IGS14 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6934','417','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6934','IGS08 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7910','ITRF2005 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','4458','Dunedin-Bluff height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4462','WGS 84 / ACRESLC','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9001','367','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4479','CGCS2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4480','CGCS2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9001','IGS97 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8990','ITRF90 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8990','254','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8997','ITRF2000 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8997','300','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8991','ITRF91 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8991','259','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9002','274','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9002','IGS97 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8992','ITRF92 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8992','326','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8998','ITRF2005 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8998','403','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8993','ITRF93 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4495','CGCS2000 / 6-degree Gauss-Kruger zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4495','CGCS2000 / G-K zone 17','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8993','450','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9003','440','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9003','IGS97 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8994','ITRF94 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4492','CGCS2000 / 6-degree Gauss-Kruger zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4492','CGCS2000 / G-K zone 14','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8994','434','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4493','CGCS2000 / 6-degree Gauss-Kruger zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4493','CGCS2000 / G-K zone 15','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8999','ITRF2008 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8999','392','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8995','ITRF96 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8995','389','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4496','CGCS2000 / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4496','CGCS2000 / G-K zone 18','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8996','ITRF97 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8996','268','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9000','ITRF2014 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9000','333','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9004','289','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9004','IGS00 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9007','309','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9007','IGb00 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4498','CGCS2000 / 6-degree Gauss-Kruger zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4498','CGCS2000 / G-K zone 20','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9005','459','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9005','IGS00 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9015','382','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4499','CGCS2000 / 6-degree Gauss-Kruger zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4499','CGCS2000 / G-K zone 21','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9015','IGb08 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9006','364','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9006','IGS00 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4500','CGCS2000 / 6-degree Gauss-Kruger zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4500','CGCS2000 / G-K zone 22','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9008','420','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9008','IGb00 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4501','CGCS2000 / 6-degree Gauss-Kruger zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4501','CGCS2000 / G-K zone 23','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9009','336','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9009','IGb00 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4502','CGCS2000 / 6-degree Gauss-Kruger CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4502','CGCS2000 / G-K CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9016','402','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9016','IGb08 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9010','310','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4503','CGCS2000 / 6-degree Gauss-Kruger CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4503','CGCS2000 / G-K CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9010','IGS05 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4504','CGCS2000 / 6-degree Gauss-Kruger CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4504','CGCS2000 / G-K CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9011','453','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9011','IGS05 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9017','297','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4505','CGCS2000 / 6-degree Gauss-Kruger CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4505','CGCS2000 / G-K CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9017','IGb08 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9012','441','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9012','IGS05 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4506','CGCS2000 / 6-degree Gauss-Kruger CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4506','CGCS2000 / G-K CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9013','205','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4507','CGCS2000 / 6-degree Gauss-Kruger CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4507','CGCS2000 / G-K CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9013','IGS08 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9018','299','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9018','IGS14 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4508','CGCS2000 / 6-degree Gauss-Kruger CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4508','CGCS2000 / G-K CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9014','424','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9014','IGS08 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3035','ETRS89 / LAEA Europe','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4509','CGCS2000 / 6-degree Gauss-Kruger CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4509','CGCS2000 / G-K CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3034','ETRS89 / LCC Europe','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9019','406','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9019','IGS14 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4510','CGCS2000 / 6-degree Gauss-Kruger CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4510','CGCS2000 / G-K CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4512','CGCS2000 / 6-degree Gauss-Kruger CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4512','CGCS2000 / G-K CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4490','CGCS2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3907','HDKS zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3908','HDKS zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3907','D48 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3907','HR_HDKS / HR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3908','HR_HDKS / HR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3911','SI_D48 / SI_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3911','D48 / Slovenia Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3912','D48/GK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3985','Katanga 1955 / Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4050','RGRDC 2005 / Congo TM 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4051','RGRDC 2005 / Congo TM 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4056','RGRDC 2005 / Congo TM 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4057','RGRDC 2005 / Congo TM 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4058','RGRDC 2005 / Congo TM 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4059','RGRDC 2005 / Congo TM 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4060','RGRDC 2005 / Congo TM 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4061','RGRDC 2005 / UTM 33S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4062','RGRDC 2005 / UTM 34S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4063','RGRDC 2005 / UTM 35S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4975','306','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4975','SIRGAS95 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4170','318','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4170','SIRGAS95 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4988','384','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4988','SIRGAS2000 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4989','313','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4989','SIRGAS2000 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4674','398','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4674','SIRGAS2000 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8972','322','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8972','SIRGAS-CON DGF00P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8916','454','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8916','SIRGAS-CON DGF00P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8915','376','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8915','SIRGAS-CON DGF00P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8973','422','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8973','SIRGAS-CON DGF01P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8918','363','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8918','SIRGAS-CON DGF01P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8917','411','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8917','SIRGAS-CON DGF01P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8974','321','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8974','SIRGAS-CON DGF01P02 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8920','348','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8920','SIRGAS-CON DGF01P02 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8919','332','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8919','SIRGAS-CON DGF01P02 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8975','418','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8975','SIRGAS-CON DGF02P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8922','346','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8922','SIRGAS-CON DGF02P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8921','283','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8921','SIRGAS-CON DGF02P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8976','366','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8976','SIRGAS-CON DGF04P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8924','212','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8924','SIRGAS-CON DGF04P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8923','345','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8923','SIRGAS-CON DGF04P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8977','290','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8977','SIRGAS-CON DGF05P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8926','220','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8926','SIRGAS-CON DGF05P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8925','373','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4541','CGCS2000 / 3GK CM 96E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8925','SIRGAS-CON DGF05P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4534','CGCS2000 / 3GK CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8978','223','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4535','CGCS2000 / 3GK CM 78E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8978','SIRGAS-CON DGF06P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4536','CGCS2000 / 3GK CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8928','250','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4537','CGCS2000 / 3GK CM 84E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8928','SIRGAS-CON DGF06P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8927','359','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8927','SIRGAS-CON DGF06P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4538','CGCS2000 / 3GK CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8979','296','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4539','CGCS2000 / 3GK CM 90E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8979','SIRGAS-CON DGF07P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4540','CGCS2000 / 3GK CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8930','271','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8930','SIRGAS-CON DGF07P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4542','CGCS2000 / 3GK CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8929','324','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8929','SIRGAS-CON DGF07P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4543','CGCS2000 / 3GK CM 102E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8980','276','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8980','SIRGAS-CON DGF08P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4544','CGCS2000 / 3GK CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8932','232','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8932','SIRGAS-CON DGF08P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4545','CGCS2000 / 3GK CM 108E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8931','442','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8931','SIRGAS-CON DGF08P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4546','CGCS2000 / 3GK CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8981','395','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8981','SIRGAS-CON SIR09P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4547','CGCS2000 / 3GK CM 114E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8934','451','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8934','SIRGAS-CON SIR09P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4548','CGCS2000 / 3GK CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8933','319','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8933','SIRGAS-CON SIR09P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4549','CGCS2000 / 3GK CM 120E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8982','456','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8982','SIRGAS-CON SIR10P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4550','CGCS2000 / 3GK CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8936','211','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8936','SIRGAS-CON SIR10P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4551','CGCS2000 / 3GK CM 126E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8935','427','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8935','SIRGAS-CON SIR10P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4552','CGCS2000 / 3GK CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8983','307','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8983','SIRGAS-CON SIR11P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4553','CGCS2000 / 3GK CM 132E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8938','303','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8938','SIRGAS-CON SIR11P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4554','CGCS2000 / 3GK CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8937','218','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8937','SIRGAS-CON SIR11P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8984','240','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8984','SIRGAS-CON SIR13P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8940','399','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8940','SIRGAS-CON SIR13P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8939','413','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8939','SIRGAS-CON SIR13P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8985','380','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8985','SIRGAS-CON SIR14P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8942','203','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8942','SIRGAS-CON SIR14P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8941','257','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8941','SIRGAS-CON SIR14P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8986','249','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8986','SIRGAS-CON SIR15P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8944','235','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8944','SIRGAS-CON SIR15P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8943','446','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8943','SIRGAS-CON SIR15P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8987','396','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8987','SIRGAS-CON SIR17P01 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8946','312','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8946','SIRGAS-CON SIR17P01 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8945','273','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8945','SIRGAS-CON SIR17P01 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4202','298','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4202','AGD66 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4203','350','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4203','AGD84 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7844','284','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7844','GDA2020 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7843','329','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7843','GDA2020 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7842','404','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7842','GDA2020 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4283','368','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4283','GDA94 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4939','288','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4939','GDA94 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4938','362','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4938','GDA94 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7663','216','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8888','WGS 84 (Original)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9053','374','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9053','WGS 84 (G730) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8888','426','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8888','WGS 84 TRANSIT - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9054','208','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9054','WGS 84 (G873) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9055','228','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9055','WGS 84 (G1150) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9056','237','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9056','WGS 84 (G1674) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9057','265','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4568','New Beijing / 6-degree Gauss-Kruger zone 13','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9057','WGS 84 (G1762) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4568','New Beijing / G-K zone 13','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7663','WGS 84 (G1674) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4569','New Beijing / 6-degree Gauss-Kruger zone 14','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7662','334','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4569','New Beijing / G-K zone 14','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7662','WGS 84 (G1674) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7816','342','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4570','New Beijing / 6-degree Gauss-Kruger zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4570','New Beijing / G-K zone 15','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7816','WGS 84 TRANSIT - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7815','272','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7815','WGS 84 TRANSIT - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7657','458','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7657','WGS 84 (G730) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4571','New Beijing / G-K zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4571','New Beijing / 6-degree Gauss-Kruger zone 16','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7656','314','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4572','New Beijing / 6-degree Gauss-Kruger zone 17','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7656','WGS 84 (G730) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4572','New Beijing / G-K zone 17','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7659','344','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7659','WGS 84 (G873) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4573','New Beijing / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4573','New Beijing / G-K zone 18','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7658','325','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7658','WGS 84 (G873) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4574','New Beijing / G-K zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4574','New Beijing / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7661','414','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7661','WGS 84 (G1150) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4575','New Beijing / G-K zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4575','New Beijing / 6-degree Gauss-Kruger zone 20','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7660','210','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4576','New Beijing / 6-degree Gauss-Kruger zone 21','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7660','WGS 84 (G1150) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4576','New Beijing / G-K zone 21','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7665','405','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4577','New Beijing / 6-degree Gauss-Kruger zone 22','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7665','WGS 84 (G1762) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4577','New Beijing / G-K zone 22','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7664','215','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7664','WGS 84 (G1762) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4578','New Beijing / G-K zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4578','New Beijing / 6-degree Gauss-Kruger zone 23','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','3855','436','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2333','Xian 1980 / G-K zone 19','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','3855','WGS 84 EGM2008 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4497','CGCS2000 / G-K zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4497','CGCS2000 / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5798','383','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5798','WGS 84 EGM84 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5773','444','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5773','WGS 84 EGM96 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8237','285','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4579','New Beijing / 6-degree Gauss-Kruger CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4579','New Beijing / G-K CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8237','NAD83(CSRS) v2 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8235','437','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8235','NAD83(CSRS) v2 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4580','New Beijing / 6-degree Gauss-Kruger CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4580','New Beijing / G-K CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8233','432','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8233','NAD83(CSRS) v2 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8231','331','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4581','New Beijing / 6-degree Gauss-Kruger CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4581','New Beijing / G-K CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8231','NAD83(CSRS96) v1 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8231','NAD83(CSRS)v1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8230','447','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4582','New Beijing / 6-degree Gauss-Kruger CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4582','New Beijing / G-K CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8230','NAD83(CSRS96) v1 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8230','NAD83(CSRS96)v1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8232','230','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4583','New Beijing / 6-degree Gauss-Kruger CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4583','New Beijing / G-K CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8232','NAD83(CSRS96) v1 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8232','NAD83(CSRS96)v1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8253','448','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4584','New Beijing / 6-degree Gauss-Kruger CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4584','New Beijing / G-K CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8253','NAD83(CSRS) v7 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8254','243','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8254','NAD83(CSRS) v7 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4585','New Beijing / 6-degree Gauss-Kruger CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4585','New Beijing / G-K CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8255','236','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8255','NAD83(CSRS) v7 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8250','372','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4586','New Beijing / 6-degree Gauss-Kruger CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4586','New Beijing / G-K CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8250','NAD83(CSRS) v6 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8251','327','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8251','NAD83(CSRS) v6 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4587','New Beijing / 6-degree Gauss-Kruger CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4587','New Beijing / G-K CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8252','292','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8252','NAD83(CSRS) v6 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8247','429','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4588','New Beijing / 6-degree Gauss-Kruger CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4588','New Beijing / G-K CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8247','NAD83(CSRS) v5 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8248','431','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8248','NAD83(CSRS) v5 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4589','New Beijing / 6-degree Gauss-Kruger CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4589','New Beijing / G-K CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8249','377','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8249','NAD83(CSRS) v5 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8242','245','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8242','NAD83(CSRS) v4 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8244','347','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8244','NAD83(CSRS) v4 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8246','340','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8246','NAD83(CSRS) v4 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8238','386','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8238','NAD83(CSRS) v3 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8239','375','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8239','NAD83(CSRS) v3 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8240','320','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8240','NAD83(CSRS) v3 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5713','323','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5713','CGVD28 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6647','423','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6647','CGVD2013(CGG2013) - OHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4122','225','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4122','ATS77 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9191','WGS 84 / New Zealand Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5899','VN-2000 / TM-3 Da Nang zone','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5621','409','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5621','EVRF2007 - NHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5730','238','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5730','EVRF2000 - NHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5621','EVRF2007_AMST / NH','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7928','433','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7928','ETRF97 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7929','330','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7929','ETRF97 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7926','356','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7926','ETRF96 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7927','421','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7927','ETRF96 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7924','206','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7924','ETRF94 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7925','407','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7925','ETRF94 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7922','244','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7922','ETRF93 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7923','358','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7923','ETRF93 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7920','221','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7920','ETRF92 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7921','369','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7921','ETRF92 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7918','213','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7918','ETRF91 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7919','371','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7919','ETRF91 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7916','435','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7916','ETRF90 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7917','353','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7917','ETRF90 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7914','308','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7914','ETRF89 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7915','217','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7915','ETRF89 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8397','378','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8397','ETRF2005 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8399','317','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8399','ETRF2005 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7930','260','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7930','ETRF2000 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7931','457','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7931','ETRF2000 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4612','394','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4612','JGD2000 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9059','247','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9059','ETRF89 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9061','343','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9061','ETRF91 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9060','224','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9060','ETRF90 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9062','410','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9062','ETRF92 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9068','279','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9068','ETRF2005 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9063','430','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9063','ETRF93 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9064','ETRF94 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9064','255','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4947','281','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4947','JGD2000 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9065','266','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9065','ETRF96 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4946','251','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4946','JGD2000 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9066','267','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9066','ETRF97 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6694','390','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6694','JGD2000 (vertical) - OHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9067','234','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9067','ETRF2000 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6695','428','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6695','JGD2011 (vertical) - OHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6666','229','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6666','JGD2011 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6667','365','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6667','JGD2011 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6668','416','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6668','JGD2011 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4272','443','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4272','NZGD1949 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4167','293','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4167','NZGD2000 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4959','287','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4959','NZGD2000 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4958','222','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4958','NZGD2000 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','4440','438','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','4440','NZVD2009 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7839','328','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','7839','NZVD2016 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6642','219','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6642','VIVD09 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6641','360','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6641','PRVD02 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6640','391','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6640','NMVD03 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5702','214','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5702','NGVD29 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5703','256','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5703','NAVD88 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4608','248','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4608','NAD27(MAY76) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4609','304','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4609','NAD27(CGQ77) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4267','246','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4267','NAD27 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4269','270','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4269','NAD 83 (1986) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4269','NAD83(Original)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6320','449','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6320','NAD 83 (PA11) Epoch 2010 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6321','445','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6321','NAD 83 (PA11) Epoch 2010 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6322','207','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6322','NAD 83 (PA11) Epoch 2010 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6323','379','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6323','NAD 83 (MA11) Epoch 2010 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6324','231','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6324','NAD 83 (MA11) Epoch 2010 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6325','393','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6325','NAD 83 (MA11) Epoch 2010 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8544','204','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8544','NAD 83 (HARN) CORRECTED - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8545','291','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8545','NAD 83 (HARN) CORRECTED - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','351','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6644','GUVD04 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4957','NAD 83 (HARN) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','341','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4152','NAD 83 (HARN) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8542','412','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8542','NAD 83 (FBN) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8860','262','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8860','NAD 83 (FBN) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6781','311','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6781','NAD 83 (CORS96) Epoch 1997.0 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6781','294','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6781','NAD 83 (CORS96) Epoch 2002.0 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6782','385','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6782','NAD 83 (CORS96) Epoch 1997.0 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6782','354','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6782','NAD 83 (CORS96) Epoch 2002.0 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6783','302','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6783','NAD 83 (CORS96) Epoch 1997.0 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6783','338','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6783','NAD 83 (CORS96) Epoch 2002.0 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6317','252','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6317','NAD 83 (2011) Epoch 2010 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6319','239','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6319','NAD 83 (2011) Epoch 2010 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6318','415','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6318','NAD 83 (2011) Epoch 2010 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4893','397','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4893','NAD 83 (2007) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4759','316','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4759','NAD 83 (2007) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6644','253','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6643','452','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6643','ASVD02 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9070','408','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9070','NAD 83 (MARP00) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9071','305','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9071','NAD 83 (MARP00) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9072','280','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9072','NAD 83 (MARP00) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9073','315','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9073','NAD 83 (PACP00) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9074','455','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9074','NAD 83 (PACP00) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9075','357','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9075','NAD 83 (PACP00) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4491','CGCS2000 / 6-degree Gauss-Kruger zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4491','CGCS2000 / G-K zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5897','VN-2000 / TM-3 105-00','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4511','CGCS2000 / 6-degree Gauss-Kruger CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4511','CGCS2000 / G-K CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5898','VN-2000 / TM-3 108-00','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4531','CGCS2000 / 3GK zone 43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4533','CGCS2000 / 3GK zone 45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4532','CGCS2000 / 3GK zone 44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4530','CGCS2000 / 3GK zone 42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4528','CGCS2000 / 3GK zone 40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4526','CGCS2000 / 3GK zone 38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4494','CGCS2000 / 6-degree Gauss-Kruger zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4494','CGCS2000 / G-K zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4527','CGCS2000 / 3GK zone 39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4525','CGCS2000 / 3GK zone 37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4524','CGCS2000 / 3GK zone 36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4523','CGCS2000 / 3GK zone 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4522','CGCS2000 / 3GK zone 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4521','CGCS2000 / 3GK zone 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4520','CGCS2000 / 3GK zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4519','CGCS2000 / 3GK zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4518','CGCS2000 / 3GK zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4517','CGCS2000 / 3GK zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4516','CGCS2000 / 3GK zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4515','CGCS2000 / 3GK zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4514','CGCS2000 / 3GK zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4513','CGCS2000 / 3GK zone 25','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5359','SIRGAS-Chile','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8947','SIRGAS-Chile epoch 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8947','SIRGAS-Chile realización 2','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8948','SIRGAS-Chile realización 2','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8948','SIRGAS-Chile epoch 2010.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8949','SIRGAS-Chile realización 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9141','KOSOVAREF01 / Transverse Mercator (TM)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8949','SIRGAS-Chile epoch 2010.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5359','SIRGAS-Chile realización 1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5359','SIRGAS-Chile 2002.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5360','SIRGAS-Chile realización 1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5360','SIRGAS-Chile epoch 2002.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5360','SIRGAS-Chile','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5358','SIRGAS-Chile','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9146','SIRGAS-Chile epoch 2013','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9146','SIRGAS-Chile realización 3','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9153','SIRGAS-Chile realización 4','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9153','SIRGAS-Chile epoch 2016.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9147','SIRGAS-Chile realización 3','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9147','SIRGAS-Chile epoch 2013.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9148','SIRGAS-Chile realización 3','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9148','SIRGAS-Chile epoch 2013.00','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4782','New Beijing / 3GK CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9151','SIRGAS-Chile epoch 2016','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4783','New Beijing / 3GK CM 78E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9151','SIRGAS-Chile realización 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4784','New Beijing / 3GK CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9152','SIRGAS-Chile realización 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4785','New Beijing / 3GK CM 84E','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9152','SIRGAS-Chile epoch 2016.00','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4786','New Beijing / 3GK CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4787','New Beijing / 3GK CM 90E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4788','New Beijing / 3GK CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4789','New Beijing / 3GK CM 96E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4790','New Beijing / 3GK CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4791','New Beijing / 3GK CM 102E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4792','New Beijing / 3GK CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4793','New Beijing / 3GK CM 108E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4794','New Beijing / 3GK CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4795','New Beijing / 3GK CM 114E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4796','New Beijing / 3GK CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4797','New Beijing / 3GK CM 120E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4798','New Beijing / 3GK CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4799','New Beijing / 3GK CM 126E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4800','New Beijing / 3GK CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4812','New Beijing / 3GK CM 132E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4822','New Beijing / 3GK CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9221','Hartebeesthoek94 / RSA BSU Albers 25E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9221','Hartebeesthoek94 / ZA BSU Albers 25E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4652','New Beijing / 3GK zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4653','New Beijing / 3GK zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9222','Hartebeesthoek94 / RSA BSU Albers 44E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4654','New Beijing / 3GK zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9222','Hartebeesthoek94 / ZA BSU Albers 44E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4655','New Beijing / 3GK zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4656','New Beijing / 3GK zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4766','New Beijing / 3GK zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4767','New Beijing / 3GK zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4768','New Beijing / 3GK zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4769','New Beijing / 3GK zone 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4770','New Beijing / 3GK zone 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4771','New Beijing / 3GK zone 35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4772','New Beijing / 3GK zone 36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4773','New Beijing / 3GK zone 37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4774','New Beijing / 3GK zone 38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4775','New Beijing / 3GK zone 39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4778','New Beijing / 3GK zone 42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4779','New Beijing / 3GK zone 43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4780','New Beijing / 3GK zone 44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4781','New Beijing / 3GK zone 45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4529','CGCS2000 / 3GK zone 41','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4160','Quini-Huao','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9249','Tapi Aike / Argentina zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9249','Tapi Aike / Gauss-Kruger zone 1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4160','Quiñi-Huao','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9250','Tapi Aike / Argentina zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9250','Tapi Aike / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2081','Quiñi-Huao / Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9252','MMN / Argentina zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9252','MMN / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2081','Quini-Huao / Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9254','MMS / Argentina zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9254','MMS / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9284','Pampa del Castillo / Gauss-Kruger zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','28992','Stelsel van de Rijksdriehoeksmeting','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9284','Pampa del Castillo / Argentina zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9285','Pampa del Castillo / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9285','Pampa del Castillo / Argentina zone 3','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4289','RD Bessel','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4776','New Beijing / 3GK zone 40','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9306','ETRS89 / HS2P1+14 Snake + HS2-VRF height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4777','New Beijing / 3GK zone 41','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9300','ETRS89 / HS2P1+14 Snake','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5753','NGNC height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9311','US National Atlas EA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9354','WGS 84 / IBCSO PS','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5709','Hoogte boven Normaal Amsterdams Peil','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9394','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31289','MGI (Ferro) / M31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31290','MGI (Ferro) / M34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31288','MGI (Ferro) / M28','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9402','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9395','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9396','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9403','Pico de las Nieves 1968','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9397','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4903','Madrid','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9398','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9399','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8690','SI_KOP / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5195','SI_TRIE / NOH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5195','MK_TRIE / NOH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4826','WGS 84 / Cape Verde New','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4479','732','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4480','733','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9450','ETRS89 + Belfast Lough height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4480','CGCS 2000 - LatLonEht','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4490','734','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4490','CGCS 2000 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5737','735','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5737','National Height Datum 1985 - NHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9456','ETRS89 / GBK19 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9457','ETRS89 / GBK19 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9473','GDA2020 / Aus Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4647','ETRS89 / UTM zone 32N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4824','Morro do Papagaio','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4824','Island of Principe datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4823','Fortaleza','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4823','Island of Sao Tome datum','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4481','Red Geodesica Nacional ITRF92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4482','Red Geodesica Nacional ITRF92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4483','Red Geodesica Nacional ITRF92','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3034','ETRS89 / LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3034','ETRS89-LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3038','ETRS89 / ETRS-TM26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3038','ETRS89-TM26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4411','NAD27 / UTM zone 11N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4412','NAD27 / UTM zone 12N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4413','NAD27 / UTM zone 13N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4419','NAD27 / UTM zone 19N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4401','NAD27 / UTM zone 1N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4402','NAD27 / UTM zone 2N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4403','NAD27 / UTM zone 3N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4404','NAD27 / UTM zone 4N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4405','NAD27 / UTM zone 5N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4407','NAD27 / UTM zone 7N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4408','NAD27 / UTM zone 8N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4409','NAD27 / UTM zone 9N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4430','NAD83 / UTM zone 10N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4431','NAD83 / UTM zone 11N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4432','NAD83 / UTM zone 12N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4433','NAD83 / UTM zone 13N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4438','NAD83 / UTM zone 18N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4439','NAD83 / UTM zone 19N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4421','NAD83 / UTM zone 1N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4422','NAD83 / UTM zone 2N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4423','NAD83 / UTM zone 3N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4424','NAD83 / UTM zone 4N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4425','NAD83 / UTM zone 5N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4426','NAD83 / UTM zone 6N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4427','NAD83 / UTM zone 7N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4428','NAD83 / UTM zone 8N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4429','NAD83 / UTM zone 9N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4410','NAD27 / UTM zone 10N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4418','NAD27 / UTM zone 18N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4406','NAD27 / UTM zone 6N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4399','NAD27 / UTM zone 59N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4217','NAD83 / UTM zone 59N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4420','NAD83 / UTM zone 60N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4400','NAD27 / UTM zone 60N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3035','ETRS89 / LAEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3035','ETRS89-LAEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3039','ETRS89 / ETRS-TM27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3039','ETRS89-TM27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3051','ETRS89 / ETRS-TM39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3051','ETRS89-TM39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3050','ETRS89 / ETRS-TM38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3050','ETRS89-TM38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3049','ETRS89 / TM37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3049','ETRS89-TM37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3048','ETRS89 / TM36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3048','ETRS89-TM36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3047','ETRS89 / TM35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3047','ETRS89-TM35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3046','ETRS89 / TM34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3046','ETRS89-TM34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','ETRS89 / TM33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3045','ETRS89-TM33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3044','ETRS89 / TM32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3044','ETRS89-TM32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3043','ETRS89 / TM31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3043','ETRS89-TM31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3042','ETRS89 / TM30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3042','ETRS89-TM30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3041','ETRS89 / TM29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3041','ETRS89-TM29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3040','ETRS89-TM28','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4936','ETRS89-XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4937','ETRS89-GRS80h','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4258','ETRS89-GRS80','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4839','ETRS89-LCC-DE(N-E)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4855','ETRF89 / NTM zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4855','EUREF89 / NTM zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4856','ETRF89 / NTM zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4856','EUREF89 / NTM zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4857','ETRF89 / NTM zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4857','EUREF89 / NTM zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4858','ETRF89 / NTM zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4858','EUREF89 / NTM zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4859','ETRF89 / NTM zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4859','EUREF89 / NTM zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4880','ETRF89 / NTM zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4880','EUREF89 / NTM zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4879','ETRF89 / NTM zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4879','EUREF89 / NTM zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4878','ETRF89 / NTM zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4878','EUREF89 / NTM zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4877','ETRF89 / NTM zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4877','EUREF89 / NTM zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4876','ETRF89 / NTM zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4876','EUREF89 / NTM zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4875','ETRF89 / NTM zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4875','EUREF89 / NTM zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4874','ETRF89 / NTM zone 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4874','EUREF89 / NTM zone 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4873','ETRF89 / NTM zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4873','EUREF89 / NTM zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4872','ETRF89 / NTM zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4872','EUREF89 / NTM zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4871','ETRF89 / NTM zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4871','EUREF89 / NTM zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4870','ETRF89 / NTM zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4870','EUREF89 / NTM zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4869','ETRF89 / NTM zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4869','EUREF89 / NTM zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4868','ETRF89 / NTM zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4868','EUREF89 / NTM zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4867','ETRF89 / NTM zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4867','EUREF89 / NTM zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4866','ETRF89 / NTM zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4866','EUREF89 / NTM zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4865','ETRF89 / NTM zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4865','EUREF89 / NTM zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4864','ETRF89 / NTM zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4864','EUREF89 / NTM zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4863','ETRF89 / NTM zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4863','EUREF89 / NTM zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4862','ETRF89 / NTM zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4862','EUREF89 / NTM zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4861','ETRF89 / NTM zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4861','EUREF89 / NTM zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4860','ETRF89 / NTM zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4860','EUREF89 / NTM zone 10','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4160','Chos Malal','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4254','Hito XVIII','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2082','Pampa Cas / Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2082','Pampa del Castillo / Argentina zone 2','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4161','Pampa Cas','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22181','POSGAR 94 / Gauss-Kruger zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22182','POSGAR 94 / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22183','POSGAR 94 / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22184','POSGAR 94 / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22185','POSGAR 94 / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22187','POSGAR 94 / Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22172','POSGAR 98 / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22171','POSGAR 98 / Gauss-Kruger zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22173','POSGAR 98 / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22174','POSGAR 98 / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22175','POSGAR 98 / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22176','POSGAR 98 / Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22177','POSGAR 98 / Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22186','POSGAR 94 / Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5017','BB DLx','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5018','DLx','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5018','Lisbon 1937 / Portuguese Grid New','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2083','Hito XVIII / Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2081','Chos Malal / Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2393','YKJ','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7405','OSGB 1936 / British National Grid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3067','ETRS-TM35FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3067','ETRS-TM35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3873','ETRS89 / GK19FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3873','ETRS-GK19FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3874','ETRS89 / GK20FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3874','ETRS-GK20FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3875','ETRS89 / GK21FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3875','ETRS-GK21FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3876','ETRS89 / GK22FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3876','ETRS-GK22FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3877','ETRS89 / GK23FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3877','ETRS-GK23FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3878','ETRS89 / GK24FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3878','ETRS-GK24FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3879','ETRS89 / GK25FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3879','ETRS-GK25FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3880','ETRS89 / GK26FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3880','ETRS-GK26FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3881','ETRS89 / GK27FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3881','ETRS-GK27FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3882','ETRS89 / GK28FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3882','ETRS-GK28FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3883','ETRS89 / GK29FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3883','ETRS-GK29FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3884','ETRS89 / GK30FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3884','ETRS-GK30FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3885','ETRS / GK31FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3885','ETRS89-GK31FIN','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','3903','ETRS-TM35FIN(N,E)/N2000','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','3901','YKJ/N60','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','3901','YKJ + N60 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','3900','N2000','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5717','N60','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5048','ETRS89 / TM35FIN(N,E)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5048','ETRS-TM35FIN(N,E)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','3902','ETRS89 / TM35FIN(N,E) + N60 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','3902','ETRS-TM35FIN(N,E)/N60','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5781','RO_CONST / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','LT_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5182','KGD2002 / Jeju','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5184','Korea 2000 / East Sea Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5185','Korea 2000 / West Belt 2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5186','Korea 2000 / Central Belt 2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5187','Korea 2000 / East Belt 2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5188','Korea 2000 / East Sea Belt 2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5168','Korean 1985 / Jeju Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5167','Korean 1985 / East Sea','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5174','Korean 1985 / Mod Cen','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5175','Korean 1985 / Mod Jeju','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5177','Korean 1985 / Mod E Sea','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4301','Tokyo 1918','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5173','Korean 1985 / Mod West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5176','Korean 1985 / Mod East','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5132','Tokyo 1898','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5169','Tokyo / Korea West Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5169','Tokyo 1892 / Korea West','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5169','Tokyo 1898 / Korea West Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5170','Tokyo / Korea Central Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5170','Tokyo 1892 / Korea Cen','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5170','Tokyo 1898 / Korea Central Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5171','Tokyo / Korea East Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5171','Tokyo 1892 / Korea East','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5171','Tokyo 1898 / Korea East Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5172','Tokyo / Korea East Sea Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5172','Tokyo 1892 / Korea E Sea','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5172','Tokyo 1898 / Korea East Sea Belt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5613','SE_AMST2000 / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5214','IT_GENO / OH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5195','HR_TRIE / NOH','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5243','ETRS89-LCC-DE(E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5254','TUREF / 3-degree Gauss-Kruger CM 30E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5254','TR_TUREF / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5256','TUREF / 3-degree Gauss-Kruger CM 36E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5256','TR_TUREF / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5257','TUREF / 3-degree Gauss-Kruger CM 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5257','TR_TUREF / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5258','TUREF / 3-degree Gauss-Kruger CM 42E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5258','TR_TUREF / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5259','TUREF / 3-degree Gauss-Kruger CM 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5259','TR_TUREF / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5269','TUREF / Turkey zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5270','TUREF / Turkey zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5271','TUREF / Turkey zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5272','TUREF / Turkey zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5273','TUREF / Turkey zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5274','TUREF / Turkey zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5275','TUREF / Turkey zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5255','TUREF / 3-degree Gauss-Kruger CM 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5255','TR_TUREF / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5253','TUREF / 3-degree Gauss-Kruger CM 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5253','TR_TUREF / TR_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5247','GDBD2009 / Brunei RSO','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4484','Mexico 1992 / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4484','Red Geodesica Nacional ITRF92 / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4485','Mexico 1992 / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4485','Red Geodesica Nacional ITRF92 / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4486','Mexico 1992 / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4486','Red Geodesica Nacional ITRF92 / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4487','Mexico 1992 / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4487','Red Geodesica Nacional ITRF92 / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4488','Mexico 1992 / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4488','Red Geodesica Nacional ITRF92 / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4489','Red Geodesica Nacional ITRF92 / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4489','Mexico 1992 / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5266','DRUKREF 03 / Bhutan NG','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5302','DRUKREF 03 / S Jong TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5309','DRUKREF 03 / Wangdue TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5300','DRUKREF 03 / P-Gatsh TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5306','DRUKREF 03 / T-Gang TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5316','ETRS89 / FOTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5224','S-JTSK/05 (F) / ModKrovak','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5225','S-JTSK/05 (F) / ModKrovakEN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5221','S-JTSK (F) / Krovak EN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5320','NAD83 / Teranet LC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5321','NAD83(CSRS) / Teranet LC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5330','Batavia (Jkt) / NEIEZ','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5331','Makassar (Jkt) / NEIEZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4248','La Canoa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31254','AT_MGI / Austria GK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31256','AT_MGI / Austria GK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31255','AT_MGI / Austria GK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3416','AT_ETRS89 / Austria Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5459','Ocotepeque / Guatemala S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5458','Ocotepeque / Guatemala N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5460','Ocotepeque / El Salvador','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5461','Ocotepeque / Nicaragua N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5462','Ocotepeque / Nicaragua S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5396','SIRGAS 2000 / UTM 26S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5466','Sibun Gorge / Colony Grd','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5469','Panama-Colon / Lambert','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5382','SIRGAS-ROU98 / UTM 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5383','SIRGAS-ROU98 / UTM 22S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4309','ROU-USAMS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5362','SIRGAS-Chile / UTM 18S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5361','SIRGAS-Chile / UTM 19S','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5341','Marco de Referencia Geodésico Nacional Oficial','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5342','Marco de Referencia Geodésico Nacional Oficial','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5340','Marco de Referencia Geodésico Nacional Oficial','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5349','POSGAR 07 / Argentina 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5349','POSGAR 2007 / Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5348','POSGAR 07 / Argentina 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5348','POSGAR 2007 / Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5347','POSGAR 07 / Argentina 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5347','POSGAR 2007 / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5346','POSGAR 07 / Argentina 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5346','POSGAR 2007 / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5345','POSGAR 07 / Argentina 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5345','POSGAR 2007 / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5344','POSGAR 2007 / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5344','POSGAR 07 / Argentina 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5343','POSGAR 07 / Argentina 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5343','POSGAR 2007 / Gauss-Kruger zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5456','Ocotepeque / Costa Rica N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5457','Ocotepeque / C R Sur','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5515','S-JTSK/05 / ModKrovak','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5516','S-JTSK/05 / ModKrovakEN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5514','S-JTSK / Krovak EN (G)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5518','CI1971 / CIMG','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32183','NAD83 / SCoPQ zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32184','NAD83 / SCoPQ zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32185','NAD83 / SCoPQ zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32186','NAD83 / SCoPQ zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32187','NAD83 / SCoPQ zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32188','NAD83 / SCoPQ zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32189','NAD83 / SCoPQ zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32190','NAD83 / SCoPQ zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5519','CI1979 / CIMG','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5520','DHDN / 3GK zone 1','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4646','IGN50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5523','WGS 84 / GTM 2011','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5223','WGS 84 / GTM','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4225','Corrego Alegre','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22524','Corrego Alegre / UTM zone 24S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22523','Corrego Alegre / UTM zone 23S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22522','Corrego Alegre / UTM zone 22S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22521','Corrego Alegre / UTM zone 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22525','Corrego Alegre / UTM zone 25S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5536','Corrego Aleg61 / UTM 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5537','Corrego Aleg61 / UTM 22S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5538','Corrego Aleg61 / UTM 23S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5539','Corrego Aleg61 / UTM 24S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5472','Panama-Colon / Polyconic','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4674','SIRGAS2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4988','SIRGAS2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4989','SIRGAS2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5396','SIRGAS2000 / UTM zone 26S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31985','SIRGAS2000 / UTM zone 25S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31984','SIRGAS2000 / UTM zone 24S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31983','SIRGAS2000 / UTM zone 23S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31982','SIRGAS2000 / UTM zone 22S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31981','SIRGAS2000 / UTM zone 21S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31980','SIRGAS2000 / UTM zone 20S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31979','SIRGAS2000 / UTM zone 19S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31978','SIRGAS2000 / UTM zone 18S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5559','Ocotepeque / Guatemala N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5589','Sibun Gorge / Colony Grd','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5566','UCS-2000 / 6-degree Gauss-Kruger CM 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5566','UCS-2000 / 6GK 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5567','UCS-2000 / 6-degree Gauss-Kruger CM 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5567','UCS-2000 / 6GK 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5568','UCS-2000 / 6-degree Gauss-Kruger CM 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5568','UCS-2000 / 6GK 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5569','UCS-2000 / 6-degree Gauss-Kruger CM 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5569','UCS-2000 / 6GK 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5583','UCS-2000 / 3GK 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5582','UCS-2000 / 3GK 36E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5581','UCS-2000 / 3GK 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5580','UCS-2000 / 3GK 30E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5578','UCS-2000 / 3GK 24E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5579','UCS-2000 / 3GK 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5570','UCS-2000 / 3GK zn 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5571','UCS-2000 / 3GK zn 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5572','UCS-2000 / 3GK zn 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5573','UCS-2000 / 3GK zn 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5574','UCS-2000 / 3GK zn 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5575','UCS-2000 / 3GK zn 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5576','UCS-2000 / 3GK zn 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5562','UCS-2000 / 6-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5562','UCS-2000 zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5563','UCS-2000 / 6-degree Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5563','UCS-2000 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5564','UCS-2000 / 6-degree Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5564','UCS-2000 zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5565','UCS-2000 / 6-degree Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5565','UCS-2000 zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5577','UCS-2000 / 3GK 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5588','NAD27 / NB Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5596','Fehmarnbelt Coordinate System','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5596','FCS','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5598','FCS + FCSVR10 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5624','NAD27 / Michigan Old Cen','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3040','ETRS89 / TM28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5646','NAD83 / VT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5654','NAD83(HPGN) / Vermont (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5654','NAD83(HARN) / VT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5655','NAD83(NSRS) / VT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5680','DHDN / 3GK zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5676','DHDN / Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5676','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5676','DHDN / 3GK zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5677','DHDN / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5677','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5677','DHDN / 3GK zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5678','DHDN / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5678','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5678','DHDN / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5679','DHDN / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5679','DE_DHDN / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5679','DHDN / 3GK zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5666','DHDN / 3GK zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5666','DE_PD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5666','PD/83 / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5666','PD/83 / 3GK zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5667','DHDN / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5667','DE_PD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5667','PD/83 / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5667','PD/83 / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5670','Pulkovo 42(58) / 3GK zn3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5671','Pulkovo 42(58) / 3GK zn4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5672','System 1942/15 (3)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5672','Pulkovo 42(58) / 3GK zn5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5631','Pulkovo 1942(58) / 6-degree Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5631','S-42 zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5631','Pulkovo 42(58) / GK zn 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5663','System 1942/15 (6)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5663','S-42 zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5663','Pulkovo 1942(58) / 6-degree Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5663','Pulkovo 42(58) / GK zn 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5673','Pulkovo 1942(83) / Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5673','DE_42/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5673','Pulkovo 42(83) / 3GK zn3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5674','Pulkovo 1942(83) / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5674','DE_42/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5674','Pulkovo 42(83) / 3GK zn4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5675','Pulkovo 1942(83) / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5675','DE_42/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5675','Pulkovo 42(83) / 3GK zn5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5664','Pulkovo 1942(83) / 6-degree Gauss-Kruger zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5664','S-42 zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5664','Pulkovo 42(83) / GK zn 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5665','Pulkovo 1942(83) / 6-degree Gauss-Kruger zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5665','S-42 zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5665','Pulkovo 42(83) / GK zn 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5668','DHDN / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5668','DE_RD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5668','RD/83 / Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5668','RD/83 / 3GK zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5669','DHDN / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5669','DE_RD/83 / GK_3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5669','RD/83 / Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5669','RD/83 / 3GK zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5825','AGD66 / ACT SGC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5683','DB_REF2003 / 3GK zone 3 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5682','DB_REF2003 / 3GK zone 2 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5684','DB_REF2003 / 3GK zone 4 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5685','DB_REF2003 / 3GK zone 5 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5836','Yemen NGN96 / UTM 37N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5837','Yemen NGN96 / UTM 40N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30791','Nord Sahara 1959 / Lambert Algerie Nord','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30791','Nord Sahara 1959 / LAN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30792','Nord Sahara 1959 / Lambert Algerie Sud','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30792','Nord Sahara 1959 / LAS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30791','Nord Sahara 1959 / Voirol Unifie Nord','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30792','Nord Sahara 1959 / Voirol Unifie Sud','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5659','Monte Mario / UTMRER','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5844','RGRDC 2005 / Congo TM 30','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5715','MSL depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5714','MSL height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5868','Mean High Water height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5869','Mean Higher High Water height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5870','Mean High Water Spring Tides height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5871','Higher High Water Large Tide height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5872','Highest Astronomical Tide height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5829','sea level height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5865','Mean Low Water Spring Tides depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5867','Mean Low Water depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5864','Mean Lower Low Water Spring Tides depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5866','Mean Lower Low Water depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5831','sea level depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5863','Indian Spring Low Water depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5863','Indian Tidal Plane depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5861','Lowest Astronomical Tide depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5862','Lower Low Water Large Tide depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5874','High Tide height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5873','Low Tide depth','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5649','ETRS89 / UTM zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5651','ETRS89 / UTM zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5652','ETRS89 / UTM zone 32N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5650','ETRS89 / UTM zone 33N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5653','ETRS89 / UTM zone 33N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5879','Cadastre 1997 / UTM 38S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5887','TGD2005 / TMG','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5890','JAXA Snow Depth PS North','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5932','WGS 84 / EPSG Arctic C2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5931','WGS 84 / EPSG Arctic C1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5933','WGS 84 / EPSG Arctic C3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5934','WGS 84 / EPSG Arctic C4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5935','WGS 84 / EPSG Arctic C5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5921','WGS 84 / EPSG Arctic A1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5922','WGS 84 / EPSG Arctic A2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5923','WGS 84 / EPSG Arctic A3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5924','WGS 84 / EPSG Arctic A4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5925','WGS 84 / EPSG Arctic A5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5926','WGS 84 / EPSG Arctic B1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5927','WGS 84 / EPSG Arctic B2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5928','WGS 84 / EPSG Arctic B3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5929','WGS 84 / EPSG Arctic B4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5936','WGS 84 / EPSG Alaska PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5937','WGS 84 / EPSG Canada PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5938','WGS 84 / EPSG Greenland PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5939','WGS 84 / EPSG Norway PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5940','WGS 84 / EPSG Russia PS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5930','WGS 84 / EPSG Arctic B5','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5973','ETRS89 / UTM zone 33 + NN2000 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5975','ETRS89 / UTM zone 35 + NN2000 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5974','ETRS89 / UTM zone 34 + NN2000 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5976','ETRS89 / UTM zone 36 + NN2000 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5972','ETRS89 / UTM zone 32 + NN2000 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5971','ETRS89 / UTM zone 31 + NN2000 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6050','GR96 / EPSG Arctic 1-25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6051','GR96 / EPSG Arctic 2-18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6052','GR96 / EPSG Arctic 2-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6053','GR96 / EPSG Arctic 3-29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6054','GR96 / EPSG Arctic 3-31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6055','GR96 / EPSG Arctic 3-33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6056','GR96 / EPSG Arctic 4-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6059','GR96 / EPSG Arctic 5-41','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6060','GR96 / EPSG Arctic 5-43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6061','GR96 / EPSG Arctic 5-45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6062','GR96 / EPSG Arctic 6-26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6063','GR96 / EPSG Arctic 6-28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6067','GR96 / EPSG Arctic 8-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6068','GR96 / EPSG Arctic 8-22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6070','ETRS89 / EPSG Arctic 3-11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6071','ETRS89 / EPSG Arctic 4-26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6073','ETRS89 / EPSG Arctic 5-11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6074','ETRS89 / EPSG Arctic 5-13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6075','WGS 84 / EPSG Arctic 2-24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6076','WGS 84 / EPSG Arctic 2-26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6077','WGS 84 / EPSG Arctic 3-13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6078','WGS 84 / EPSG Arctic 3-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6079','WGS 84 / EPSG Arctic 3-17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6069','ETRS89 / EPSG Arctic 2-22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6080','WGS 84 / EPSG Arctic 3-19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6087','WGS 84 / EPSG Arctic 5-15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6088','WGS 84 / EPSG Arctic 5-17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6089','WGS 84 / EPSG Arctic 5-19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6090','WGS 84 / EPSG Arctic 5-21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6091','WGS 84 / EPSG Arctic 5-23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6092','WGS 84 / EPSG Arctic 5-25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6093','WGS 84 / EPSG Arctic 5-27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6095','NAD83(NSRS2007) / EPSG Arctic 5-31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6096','NAD83(NSRS2007) / EPSG Arctic 6-14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6097','NAD83(NSRS2007) / EPSG Arctic 6-16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6098','NAD83(CSRS) / EPSG Arctic 1-23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6099','NAD83(CSRS) / EPSG Arctic 2-14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6100','NAD83(CSRS) / EPSG Arctic 2-16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6101','NAD83(CSRS) / EPSG Arctic 3-25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6102','NAD83(CSRS) / EPSG Arctic 3-27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6103','NAD83(CSRS) / EPSG Arctic 3-29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6105','NAD83(CSRS) / EPSG Arctic 4-16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6106','NAD83(CSRS) / EPSG Arctic 4-18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6107','NAD83(CSRS) / EPSG Arctic 5-33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6108','NAD83(CSRS) / EPSG Arctic 5-35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6109','NAD83(CSRS) / EPSG Arctic 5-37','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6110','NAD83(CSRS) / EPSG Arctic 5-39','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6111','NAD83(CSRS) / EPSG Arctic 6-18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6112','NAD83(CSRS) / EPSG Arctic 6-20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6113','NAD83(CSRS) / EPSG Arctic 6-22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6114','NAD83(CSRS) / EPSG Arctic 6-24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6115','WGS 84 / EPSG Arctic 1-27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6116','WGS 84 / EPSG Arctic 1-29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6117','WGS 84 / EPSG Arctic 1-31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6118','WGS 84 / EPSG Arctic 1-21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6119','WGS 84 / EPSG Arctic 2-28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6121','WGS 84 / EPSG Arctic 2-12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6120','WGS 84 / EPSG Arctic 2-10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6122','WGS 84 / EPSG Arctic 3-21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6123','WGS 84 / EPSG Arctic 3-23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6064','GR96 / EPSG Arctic 6-30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6065','GR96 / EPSG Arctic 7-11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6066','GR96 / EPSG Arctic 7-13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6128','GCNG59','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6129','SING61','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6086','WGS 84 / EPSG Arctic 4-40','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6085','WGS 84 / EPSG Arctic 4-38','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6084','WGS 84 / EPSG Arctic 4-36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6083','WGS 84 / EPSG Arctic 4-34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6082','WGS 84 / EPSG Arctic 4-32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6081','WGS 84 / EPSG Arctic 4-30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6124','WGS 84 / EPSG Arctic 4-12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6125','ETRS89 / EPSG Arctic 5-47','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6072','ETRS89 / EPSG Arctic 4-28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6104','NAD83(CSRS) / EPSG Arctic 4-14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6141','CING11','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4723','Grand Cayman 1959','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4726','Little Cayman 1961','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6171','ETRS89 / UTM zone 31 + NN54 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6172','ETRS89 / UTM zone 32 + NN54 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6173','ETRS89 / UTM zone 33 + NN54 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6174','ETRS89 / UTM zone 34 + NN54 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6175','ETRS89 / UTM zone 35 + NN54 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6176','ETRS89 / UTM zone 36 + NN54 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5710','BE_OOST / UNCOR','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5710','Oostende height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6057','GR96 / EPSG Arctic 4-22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6058','GR96 / EPSG Arctic 4-24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6094','NAD83(NSRS2007) / EPSG Arctic 5-29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6210','SIRGAS 2000 / UTM 23N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6211','SIRGAS 2000 / UTM 24N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6244','MAGNA-SIRGAS / Arauca','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6245','MAGNA-SIRGAS / Armenia','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6247','MAGNA-SIRGAS / Bogota DC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6248','MAGNA-SIRGAS / Bucaramanga','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6251','MAGNA-SIRGAS / Cucuta','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6250','MAGNA-SIRGAS / Cartagena','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6252','MAGNA-SIRGAS / Florencia','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6253','MAGNA-SIRGAS / Ibague','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6254','MAGNA-SIRGAS / Inirida','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6255','MAGNA-SIRGAS / Leticia','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6256','MAGNA-SIRGAS / Manizales','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6257','MAGNA-SIRGAS / Medellin','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6258','MAGNA-SIRGAS / Mitu','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6259','MAGNA-SIRGAS / Mocoa','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6260','MAGNA-SIRGAS / Monteria','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6261','MAGNA-SIRGAS / Neiva','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6262','MAGNA-SIRGAS / Pasto','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6263','MAGNA-SIRGAS / Pereira','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6264','MAGNA-SIRGAS / Popayan','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6265','MAGNA-SIRGAS / Puerto Carreno','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6266','MAGNA-SIRGAS / Quibdo','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6267','MAGNA-SIRGAS / Riohacha','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6268','MAGNA-SIRGAS / San Andres','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6269','MAGNA-SIRGAS / San Jose','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6270','MAGNA-SIRGAS / Santa Marta','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6271','MAGNA-SIRGAS / Sucre','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6272','MAGNA-SIRGAS / Tunja','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6273','MAGNA-SIRGAS / Valledupar','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6274','MAGNA-SIRGAS / Villavicencio','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6275','MAGNA-SIRGAS / Yopal','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6249','MAGNA-SIRGAS / Cali','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6246','MAGNA-SIRGAS / Barranquilla','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6204','MGI 1901 / Macedonia GK','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6204','MGI 1901 / Macedonia Gauss-Kruger','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6204','MSCS','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6316','MSCS zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6351','NAD83(2011) / EPSG Arctic 5-29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6352','NAD83(2011) / EPSG Arctic 5-31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6353','NAD83(2011) / EPSG Arctic 6-14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6354','NAD83(2011) / EPSG Arctic 6-16','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6357','North American Vertical Datum of 1988 depth (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6359','National Geodetic Vertical Datum of 1929 depth (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6360','North American Vertical Datum of 1988 height (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6358','North American Vertical Datum of 1988 depth (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4481','Mexican Datum of 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4482','Mexican Datum of 1993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4483','Mexican Datum of 1993','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4484','Mexican Datum of 1993 / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4485','Mexican Datum of 1993 / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4486','Mexican Datum of 1993 / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4487','Mexican Datum of 1993 / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4489','Mexican Datum of 1993 / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4488','Mexican Datum of 1993 / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6365','Red Geodesica Nacional ITRF2008','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6371','Red Geodesica Nacional ITRF2008 / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6371','Mexico 2008 / UTM 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6370','Mexico 2008 / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6370','Red Geodesica Nacional ITRF2008 / UTM 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6369','Mexico 2008 / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6369','Red Geodesica Nacional ITRF2008 / UTM 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6368','Mexico 2008 / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6368','Red Geodesica Nacional ITRF2008 / UTM 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6367','Mexico 2008 / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6367','Red Geodesica Nacional ITRF2008 / UTM 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6366','Mexico 2008 / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6366','Red Geodesica Nacional ITRF2008 / UTM 11N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6364','Red Geodesica Nacional ITRF2008','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6363','Red Geodesica Nacional ITRF2008','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6381','UCS-2000 / 3GK 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6382','UCS-2000 / 3GK 24E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6384','UCS-2000 / 3GK 30E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6383','UCS-2000 / 3GK 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6385','UCS-2000 / 3GK 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6386','UCS-2000 / 3GK 36E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6387','UCS-2000 / 3GK 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6362','Red Geodesica Nacional ITRF92 / CCL','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6372','Red Geodesica Nacional ITRF2008 / CCL','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6391','CING11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6395','NAD83(2011) / Alaska zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6395','NAD83(2011) / AK 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6355','NAD83(2011) / Alabama East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6355','NAD83(2011) / AL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6356','NAD83(2011) / Alabama West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6356','NAD83(2011) / AL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6393','NAD83(2011) / AK Alb','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6394','NAD83(2011) / Alaska zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6394','NAD83(2011) / AK 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6396','NAD83(2011) / Alaska zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6396','NAD83(2011) / AK 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6397','NAD83(2011) / Alaska zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6397','NAD83(2011) / AK 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6398','NAD83(2011) / Alaska zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6398','NAD83(2011) / AK 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6399','NAD83(2011) / Alaska zone 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6399','NAD83(2011) / AK 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6400','NAD83(2011) / Alaska zone 7 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6400','NAD83(2011) / AK 7 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6401','NAD83(2011) / Alaska zone 8 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6401','NAD83(2011) / AK 8 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6402','NAD83(2011) / Alaska zone 9 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6402','NAD83(2011) / AK 9 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6403','NAD83(2011) / Alaska zone 10 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6403','NAD83(2011) / AK 10 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6404','NAD83(2011) / Arizona Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6404','NAD83(2011) / AZ C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6405','NAD83(2011) / AZ C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6406','NAD83(2011) / Arizona East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6406','NAD83(2011) / AZ E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6407','NAD83(2011) / AZ E (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6408','NAD83(2011) / Arizona West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6408','NAD83(2011) / AZ W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6409','NAD83(2011) / AZ W (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6410','NAD83(2011) / Arkansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6410','NAD83(2011) / AR N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6411','NAD83(2011) / AR N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6412','NAD83(2011) / Arkansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6412','NAD83(2011) / AR S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6413','NAD83(2011) / AR S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6414','NAD83(2011) / CA Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6416','NAD83(2011) / CA 1 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6415','NAD83(2011) / California zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6415','NAD83(2011) / CA 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6417','NAD83(2011) / California zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6417','NAD83(2011) / CA 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6418','NAD83(2011) / CA 2 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6419','NAD83(2011) / California zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6419','NAD83(2011) / CA 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6420','NAD83(2011) / CA 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6421','NAD83(2011) / California zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6421','NAD83(2011) / CA 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6422','NAD83(2011) / CA 4 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6423','NAD83(2011) / California zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6423','NAD83(2011) / CA 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6424','NAD83(2011) / CA 5 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6425','NAD83(2011) / California zone 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6425','NAD83(2011) / CA 6 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6426','NAD83(2011) / CA 6 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6427','NAD83(2011) / Colorado Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6427','NAD83(2011) / CO C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6428','NAD83(2011) / CO C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6429','NAD83(2011) / Colorado North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6429','NAD83(2011) / CO N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6430','NAD83(2011) / CO N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6431','NAD83(2011) / Colorado South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6431','NAD83(2011) / CO S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6432','NAD83(2011) / CO S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6433','NAD83(2011) / Connecticut (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6433','NAD83(2011) / CT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6434','NAD83(2011) / CT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6435','NAD83(2011) / Delaware (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6435','NAD83(2011) / DE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6436','NAD83(2011) / DE (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6437','NAD83(2011) / Florida East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6437','NAD83(2011) / FL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6438','NAD83(2011) / FL E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6439','NAD83(2011) / FL GDL AEA','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6440','NAD83(2011) / Florida North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6440','NAD83(2011) / FL N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6441','NAD83(2011) / FL N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6442','NAD83(2011) / Florida West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6442','NAD83(2011) / FL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6443','NAD83(2011) / FL W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6444','NAD83(2011) / Georgia East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6444','NAD83(2011) / GA E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6445','NAD83(2011) / GA E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6446','NAD83(2011) / Georgia West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6446','NAD83(2011) / GA W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6447','NAD83(2011) / GA W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6448','NAD83(2011) / Idaho Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6448','NAD83(2011) / ID C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6449','NAD83(2011) / ID C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6450','NAD83(2011) / Idaho East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6450','NAD83(2011) / ID E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6451','NAD83(2011) / ID E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6452','NAD83(2011) / Idaho West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6452','NAD83(2011) / ID W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6453','NAD83(2011) / ID W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6454','NAD83(2011) / Illinois East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6454','NAD83(2011) / IL E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6455','NAD83(2011) / IL E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6456','NAD83(2011) / Illinois West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6456','NAD83(2011) / IL W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6457','NAD83(2011) / IL W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6458','NAD83(2011) / Indiana East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6458','NAD83(2011) / IN E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6459','NAD83(2011) / IN E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6460','NAD83(2011) / Indiana West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6460','NAD83(2011) / IN W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6461','NAD83(2011) / IN W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6462','NAD83(2011) / Iowa North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6462','NAD83(2011) / IA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6464','NAD83(2011) / Iowa South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6464','NAD83(2011) / IA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6466','NAD83(2011) / Kansas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6466','NAD83(2011) / KS N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6468','NAD83(2011) / Kansas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6468','NAD83(2011) / KS S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6470','NAD83(2011) / Kentucky North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6470','NAD83(2011) / KY N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6471','NAD83(2011) / KY N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6472','NAD83(2011) / Kentucky Single Zone (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6472','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6472','NAD83(2011) / KY1Z (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6473','NAD83(2011) / KY1Z (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6473','KY1Z','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6474','NAD83(2011) / Kentucky South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6474','NAD83(2011) / KY S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6475','NAD83(2011) / KY S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6476','NAD83(2011) / Louisiana North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6476','NAD83(2011) / LA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6477','NAD83(2011) / LA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6478','NAD83(2011) / Louisiana South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6478','NAD83(2011) / LA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6479','NAD83(2011) / LA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6480','NAD83(2011) / Maine CS2000 Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6480','Maine Coordinate System of 2000 Central Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6480','NAD83(2011) / ME 2000 C','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6481','NAD83(2011) / Maine CS2000 East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6481','Maine Coordinate System of 2000 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6481','NAD83(2011) / ME 2000 E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6482','NAD83(2011) / Maine CS2000 West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6482','Maine Coordinate System of 2000 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6482','NAD83(2011) / ME 2000 W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6483','NAD83(2011) / Maine CS83 East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6483','Maine Coordinate System of 1983 East Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6483','NAD83(2011) / ME83 E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6484','NAD83(2011) / Maine CS83 East (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6484','NAD83(2011) / ME E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6485','NAD83(2011) / Maine West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6485','Maine Coordinate System of 1983 West Zone','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6485','NAD83(2011) / ME83 W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6486','NAD83(2011) / Maine CS83 West (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6486','NAD83(2011) / ME W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6487','NAD83(2011) / Maryland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6487','NAD83(2011) / MD (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6488','NAD83(2011) / MD (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6489','NAD83(2011) / Massachusetts Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6489','NAD83(2011) / MA Is (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6490','NAD83(2011) / MA Is (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6491','NAD83(2011) / Massachusetts Mainland (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6491','NAD83(2011) / MA md (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6492','NAD83(2011) / MA md (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6493','NAD83(2011) / Michigan Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6493','NAD83(2011) / MI C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6494','NAD83(2011) / MI C (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6495','NAD83(2011) / Michigan North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6495','NAD83(2011) / MI N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6496','NAD83(2011) / MI N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6497','NAD83(2011) / MI Georef','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6498','NAD83(2011) / Michigan South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6498','NAD83(2011) / MI S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6499','NAD83(2011) / MI S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6500','NAD83(2011) / Minnesota Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6500','NAD83(2011) / MN C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6501','NAD83(2011) / MN C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6502','NAD83(2011) / Minnesota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6502','NAD83(2011) / MN N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6503','NAD83(2011) / MN N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6504','NAD83(2011) / Minnesota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6504','NAD83(2011) / MN S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6505','NAD83(2011) / MN S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6506','NAD83(2011) / Mississippi East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6506','NAD83(2011) / MS E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6507','NAD83(2011) / MS E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6508','NAD83(2011) / MSTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6509','NAD83(2011) / Mississippi West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6509','NAD83(2011) / MS W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6510','NAD83(2011) / MS W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6511','NAD83(2011) / Missouri Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6511','NAD83(2011) / MO C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6512','NAD83(2011) / Missouri East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6512','NAD83(2011) / MO E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6513','NAD83(2011) / Missouri West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6513','NAD83(2011) / MO W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6514','NAD83(2011) / Montana (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6514','NAD83(2011) / MT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6515','NAD83(2011) / MT (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6518','NAD83(2011) / Nevada Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6518','NAD83(2011) / NV C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6520','NAD83(2011) / Nevada East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6520','NAD83(2011) / NV E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6522','NAD83(2011) / Nevada West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6522','NAD83(2011) / NV W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6524','NAD83(2011) / New Hampshire (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6524','NAD83(2011) / NH (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6525','NAD83(2011) / NH (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6526','NAD83(2011) / New Jersey (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6526','NAD83(2011) / NJ (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6528','NAD83(2011) / New Mexico Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6528','NAD83(2011) / NM C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6529','NAD83(2011) / NM C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6530','NAD83(2011) / New Mexico East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6530','NAD83(2011) / NM E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6531','NAD83(2011) / NM E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6532','NAD83(2011) / New Mexico West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6532','NAD83(2011) / NM W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6533','NAD83(2011) / NM W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6534','NAD83(2011) / New York Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6534','NAD83(2011) / NY C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6535','NAD83(2011) / NY C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6536','NAD83(2011) / New York East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6536','NAD83(2011) / NY E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6537','NAD83(2011) / NY E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6538','NAD83(2011) / New York Long Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6538','NAD83(2011) / NY LI (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6539','NAD83(2011) / NY LI (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6540','NAD83(2011) / New York West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6540','NAD83(2011) / NY W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6541','NAD83(2011) / NY W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6542','NAD83(2011) / North Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6542','NAD83(2011) / NC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6543','NAD83(2011) / NC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6544','NAD83(2011) / North Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6544','NAD83(2011) / ND N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6545','NAD83(2011) / ND N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6546','NAD83(2011) / North Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6546','NAD83(2011) / ND S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6547','NAD83(2011) / ND S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6548','NAD83(2011) / Ohio North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6549','NAD83(2011) / OH N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6550','NAD83(2011) / Ohio South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6551','NAD83(2011) / OH S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6552','NAD83(2011) / Oklahoma North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6552','NAD83(2011) / OK N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6553','NAD83(2011) / OK N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6554','NAD83(2011) / Oklahoma South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6554','NAD83(2011) / OK S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6555','NAD83(2011) / OK S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6557','NAD83(2011) / OR GIC Lam (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6558','NAD83(2011) / Oregon North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6558','NAD83(2011) / OR N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6559','NAD83(2011) / OR N (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6560','NAD83(2011) / Oregon South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6560','NAD83(2011) / OR S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6561','NAD83(2011) / OR S (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6562','NAD83(2011) / Pennsylvania North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6562','NAD83(2011) / PA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6563','NAD83(2011) / PA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6564','NAD83(2011) / Pennsylvania South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6564','NAD83(2011) / PA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6565','NAD83(2011) / PA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6566','NAD83(2011) / PR and VI','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6567','NAD83(2011) / Rhode Island (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6567','NAD83(2011) / RI (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6568','NAD83(2011) / RI (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6569','NAD83(2011) / South Carolina (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6569','NAD83(2011) / SC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6570','NAD83(2011) / SC (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6571','NAD83(2011) / South Dakota North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6571','NAD83(2011) / SD N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6572','NAD83(2011) / SD N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6573','NAD83(2011) / South Dakota South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6573','NAD83(2011) / SD S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6574','NAD83(2011) / SD S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6575','NAD83(2011) / Tennessee (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6575','NAD83(2011) / TN (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6576','NAD83(2011) / TN (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6577','NAD83(2011) / Texas Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6577','NAD83(2011) / TX C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6578','NAD83(2011) / TX C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6579','NAD83(2011) / TX Albers','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6580','NAD83(2011) / TX LC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6581','NAD83(2011) / Texas North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6581','NAD83(2011) / TX N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6582','NAD83(2011) / TX N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6583','NAD83(2011) / Texas North Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6583','NAD83(2011) / TX NC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6584','NAD83(2011) / TX NC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6585','NAD83(2011) / Texas South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6585','NAD83(2011) / TX S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6586','NAD83(2011) / TX S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6587','NAD83(2011) / Texas South Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6587','NAD83(2011) / TX SC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6588','NAD83(2011) / TX SC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6589','NAD83(2011) / Vermont (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6589','NAD83(2011) / VT (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6590','NAD83(2011) / VT (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6591','NAD83(2011) / VA LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6592','NAD83(2011) / Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6592','NAD83(2011) / VA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6593','NAD83(2011) / VA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6594','NAD83(2011) / Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6594','NAD83(2011) / VA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6595','NAD83(2011) / VA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6596','NAD83(2011) / Washington North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6596','NAD83(2011) / WA N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6597','NAD83(2011) / WA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6598','NAD83(2011) / Washington South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6598','NAD83(2011) / WA S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6599','NAD83(2011) / WA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6600','NAD83(2011) / West Virginia North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6600','NAD83(2011) / WV N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6601','NAD83(2011) / WV N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6602','NAD83(2011) / West Virginia South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6602','NAD83(2011) / WV S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6603','NAD83(2011) / WV S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6604','NAD83(2011) / Wisconsin Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6604','NAD83(2011) / WI C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6605','NAD83(2011) / WI C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6606','NAD83(2011) / Wisconsin North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6606','NAD83(2011) / WI N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6607','NAD83(2011) / WI N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6608','NAD83(2011) / Wisconsin South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6608','NAD83(2011) / WI S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6609','NAD83(2011) / WI S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6610','NAD83(2011) / WTM 83','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6611','NAD83(2011) / Wyoming East (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6611','NAD83(2011) / WY E (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6612','NAD83(2011) / WY E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6613','NAD83(2011) / Wyoming East Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6613','NAD83(2011) / WY EC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6614','NAD83(2011) / WY EC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6615','NAD83(2011) / Wyoming West (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6615','NAD83(2011) / WY W (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6618','NAD83(2011) / WY WC (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6616','NAD83(2011) / WY W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6628','NAD83(PA11) / Hawaii zone 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6628','NAD83(PA11) / HI 1 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6629','NAD83(PA11) / Hawaii zone 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6629','NAD83(PA11) / HI 2 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6630','NAD83(PA11) / Hawaii zone 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6630','NAD83(PA11) / HI 3 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6631','NAD83(PA11) / Hawaii zone 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6631','NAD83(PA11) / HI 4 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6633','NAD83(PA11) / Hawaii zone 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6633','NAD83(PA11) / HI 3 (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6634','NAD83(PA11) / UTM 4N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6632','NAD83(PA11) / Hawaii zone 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6632','NAD83(PA11) / HI 5 (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6635','NAD83(PA11) / UTM 5N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6636','NAD83(PA11) / UTM 2S','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6640','Northern Marianas Vertical Datum of 2003 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6642','Virgin Islands Vertical Datum of 2009 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6643','American Samoa Vertical Datum of 2002 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6638','Tutuila Vertical Datum of 1962 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6644','Guam Vertical Datum of 2004 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6639','Guam Vertical Datum of 1963 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6641','Puerto Rico Vertical Datum of 2002 height (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6619','NAD83(2011) / Utah Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6619','NAD83(2011) / UT C (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6620','NAD83(2011) / Utah North (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6620','NAD83(2011) / UT N (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6621','NAD83(2011) / Utah South (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6621','NAD83(2011) / UT S (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6625','NAD83(2011) / UT C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6626','NAD83(2011) / UT N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6627','NAD83(2011) / UT S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6463','NAD83(2011) / IA N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6465','NAD83(2011) / IA S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6467','NAD83(2011) / KS N (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6469','NAD83(2011) / KS S (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6516','NAD83(2011) / Nebraska (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6516','NAD83(2011) / NE (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6517','NAD83(2011) / NE (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6519','NAD83(2011) / NV C (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6521','NAD83(2011) / NV E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6523','NAD83(2011) / NV W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6527','NAD83(2011) / NJ (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6617','NAD83(2011) / Wyoming West Central (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6617','NAD83(2011) / WY WC (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6646','Karbala 1979 (Polservice) / Iraq National Grid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6646','Karbala / Iraq Nat. Grid','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6647','CGVD2013 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6669','JGD2011 / Japan zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6670','JGD2011 / Japan zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6671','JGD2011 / Japan zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6672','JGD2011 / Japan zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6673','JGD2011 / Japan zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6674','JGD2011 / Japan zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6675','JGD2011 / Japan zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6676','JGD2011 / Japan zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6678','JGD2011 / Japan zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6679','JGD2011 / Japan zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6680','JGD2011 / Japan zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6681','JGD2011 / Japan zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6682','JGD2011 / Japan zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6687','JGD2011 / Japan zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6683','JGD2011 / Japan zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6684','JGD2011 / Japan zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6685','JGD2011 / Japan zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6686','JGD2011 / Japan zone 18','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5723','JSLD height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6677','JGD2011 / Japan zone 9','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6693','Japan Levelling Datum height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6693','Japanese Standard Levelling Datum height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6693','JSLD height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2062','Madrid (Madrid) / Spain LCC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2062','Madrid - LCC','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9380','725','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9380','IGb14 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','Australian Height Datum height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD71 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD-TAS83 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','339','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9502','CIGD11 + CBVD61 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9504','CIGD11 + LCVD61 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','Timbalai / Borneo (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','BT68 / RSO Borneo (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','Timbalai 1968 / RSO Borneo (m)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29874','BT68 / RSO Sarawak LSD (m)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6705','ETRF2000 epoca 2008.0','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6704','ETRF2000 epoca 2008.0','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6706','ETRF2000 epoca 2008.0','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6708','RDN2008 / TM33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6708','ETRF2000 epoca 2008.0 fuso 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6707','RDN2008 / TM32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6707','ETRF2000 epoca 2008.0 fuso 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6709','RDN2008 / TM34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6709','ETRF2000 epoca 2008.0 fuso 34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6875','RDN2008 / Fuso Italia (N-E)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6875','ETRF2000 epoca 2008.0 fuso Italia','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6876','RDN2008 / Fuso 12 (N-E)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6876','ETRF2000 epoca 2008.0 fuso 12','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9503','CIGD11 + GCVD54 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9498','CABA-P07','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9389','EVRF2019_AMST / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9390','EVRF2019mean_AMST / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9675','741','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9675','LT at Pago Pago - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3106','Gulshan 303 / Bangladesh Transverse Mercator','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3106','Gulshan 303 / BUTM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9678','Gulshan / Bangladesh TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9680','WGS 84 / Bangladesh Universal Transverse Mercator','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9680','WGS 84 / BUTM 2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9549','LTF2004(G) / LTF2004(C)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6893','WGS 84 / World Mercator + EGM2008 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7955','St. Helena Tritan / UTM zone 30S + Tritan 2011 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7956','SHMG2015 + SHVD2015 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2176','ETRS89 / Poland CS2000 zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2177','ETRS89 / Poland CS2000 zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2178','ETRS89 / Poland CS2000 zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2179','ETRS89 / Poland CS2000 zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2180','ETRS89 / Poland CS92','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9650','PL_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9650','Kronzstad 86','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9650','Kronstadt 1986 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9651','PL_AMST / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9651','PL-EVRF2007-NH','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9700','PL-ETRF2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9701','PL-ETRF2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8401','748','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8401','ETRF2014 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8403','747','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8403','ETRF2014 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9069','746','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9069','ETRF2014 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9672','CD Norway','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9656','PL-ETRF2000 + Kronzstad 86','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9657','PL-ETRF2000 + Kronzstad 86','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4277','OSGB 1936','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','27700','OSGB 1936 / British National Grid','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9702','PL-ETRF2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9713','NAD83(CSRS) / UTM 24N','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4265','Roma40','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4982','ETRF89 IT','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4983','ETRF89 IT','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4670','ETRF89 IT','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3065','ETRF89 IT / UTM zone 33N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3064','ETRF89 IT / UTM zone 32N','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5214','Genoa height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9741','ETRS89 / EOS21 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9742','ETRS89 / EOS21 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9716','ETRF89 IT / UTM zone 34N','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5608','770','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5608','IGLD (1955) - DHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5609','771','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5609','IGLD (1985) - DHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9390','766','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9390','EVRF2019mean - NHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9389','765','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9389','EVRF2019 - NHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9749','NAD83(2011) / AL W (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9748','NAD83(2011) / AL E (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20904','GSK-2011 / 6-degree Gauss-Kruger zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20906','GSK-2011 / 6-degree Gauss-Kruger zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20907','GSK-2011 / 6-degree Gauss-Kruger zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20905','GSK-2011 / 6-degree Gauss-Kruger zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20908','GSK-2011 / 6-degree Gauss-Kruger zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20909','GSK-2011 / 6-degree Gauss-Kruger zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20910','GSK-2011 / 6-degree Gauss-Kruger zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20911','GSK-2011 / 6-degree Gauss-Kruger zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20912','GSK-2011 / 6-degree Gauss-Kruger zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20913','GSK-2011 / 6-degree Gauss-Kruger zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20914','GSK-2011 / 6-degree Gauss-Kruger zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20915','GSK-2011 / 6-degree Gauss-Kruger zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20916','GSK-2011 / 6-degree Gauss-Kruger zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20917','GSK-2011 / 6-degree Gauss-Kruger zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20919','GSK-2011 / 6-degree Gauss-Kruger zone 19','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20920','GSK-2011 / 6-degree Gauss-Kruger zone 20','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20921','GSK-2011 / 6-degree Gauss-Kruger zone 21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20922','GSK-2011 / 6-degree Gauss-Kruger zone 22','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20923','GSK-2011 / 6-degree Gauss-Kruger zone 23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20924','GSK-2011 / 6-degree Gauss-Kruger zone 24','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20925','GSK-2011 / 6-degree Gauss-Kruger zone 25','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20926','GSK-2011 / 6-degree Gauss-Kruger zone 26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20927','GSK-2011 / 6-degree Gauss-Kruger zone 27','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20929','GSK-2011 / 6-degree Gauss-Kruger zone 29','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20930','GSK-2011 / 6-degree Gauss-Kruger zone 30','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20931','GSK-2011 / 6-degree Gauss-Kruger zone 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20932','GSK-2011 / 6-degree Gauss-Kruger zone 32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20928','GSK-2011 / 6-degree Gauss-Kruger zone 28','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21005','GSK-2011 / 6-degree Gauss-Kruger CM 27E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21006','GSK-2011 / 6-degree Gauss-Kruger CM 33E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21007','GSK-2011 / 6-degree Gauss-Kruger CM 39E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21008','GSK-2011 / 6-degree Gauss-Kruger CM 45E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21010','GSK-2011 / 6-degree Gauss-Kruger CM 57E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21011','GSK-2011 / 6-degree Gauss-Kruger CM 63E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21012','GSK-2011 / 6-degree Gauss-Kruger CM 69E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21013','GSK-2011 / 6-degree Gauss-Kruger CM 75E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21014','GSK-2011 / 6-degree Gauss-Kruger CM 81E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21015','GSK-2011 / 6-degree Gauss-Kruger CM 87E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21016','GSK-2011 / 6-degree Gauss-Kruger CM 93E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21017','GSK-2011 / 6-degree Gauss-Kruger CM 99E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21018','GSK-2011 / 6-degree Gauss-Kruger CM 105E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21019','GSK-2011 / 6-degree Gauss-Kruger CM 111E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21020','GSK-2011 / 6-degree Gauss-Kruger CM 117E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21021','GSK-2011 / 6-degree Gauss-Kruger CM 123E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21022','GSK-2011 / 6-degree Gauss-Kruger CM 129E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21023','GSK-2011 / 6-degree Gauss-Kruger CM 135E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21024','GSK-2011 / 6-degree Gauss-Kruger CM 141E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21025','GSK-2011 / 6-degree Gauss-Kruger CM 147E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21026','GSK-2011 / 6-degree Gauss-Kruger CM 153E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21027','GSK-2011 / 6-degree Gauss-Kruger CM 159E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21028','GSK-2011 / 6-degree Gauss-Kruger CM 165E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21029','GSK-2011 / 6-degree Gauss-Kruger CM 171E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21030','GSK-2011 / 6-degree Gauss-Kruger CM 177E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21031','GSK-2011 / 6-degree Gauss-Kruger CM 177W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21032','GSK-2011 / 6-degree Gauss-Kruger CM 171W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21004','GSK-2011 / 6-degree Gauss-Kruger CM 21E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21009','GSK-2011 / 6-degree Gauss-Kruger CM 51E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20918','GSK-2011 / 6-degree Gauss-Kruger zone 18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21500','Belge 1950 (Brussels) / Belge Lambert 50','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31300','Belge 1972 / Belge Lambert 72','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31370','Belge 1972 / Belgian Lambert 72','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6190','Belge 1972 / Belgian Lambert 72 + Ostend height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7664','WGS 84 (G1762'')','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7665','WGS 84 (G1762'')','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9057','WGS 84 (G1762'')','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9761','ETRS89 / ECML14_NB SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9762','ETRS89 / ECML14_NB SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9766','ETRS89 / EWR2 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9767','ETRS89 / EWR2 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4932','CHTRF95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4933','CHTRF95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4151','CHTRF95','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4964','RGF93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4965','RGF93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4171','RGF93','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7042','RGF93 (lon-lat)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7084','RGF93 (lon-lat)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9538','RGF93 + NGF-IGN69 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9539','RGF93 + NGF-IGN78 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2154','RGF93 / Lambert-93','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3942','RGF93 / CC42','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3943','RGF93 / CC43','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3944','RGF93 / CC44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3945','RGF93 / CC45','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3946','RGF93 / CC46','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3947','RGF93 / CC47','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3948','RGF93 / CC48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3949','RGF93 / CC49','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3950','RGF93 / CC50','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5698','RGF93 / Lambert-93 + NGF-IGN69 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','5699','RGF93 / Lambert-93 + NGF-IGN78 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9793','(FR_RGF93 / LAMB93 - see alias remarks)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9776','RGF93 v2 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9777','RGF93 v2 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9781','RGF93 v2b (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9782','RGF93 v2b (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8233','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8235','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8237','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8238','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8239','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8240','NAD83(CSRS) 1997','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8242','NAD83(CSRS) 2002','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8244','NAD83(CSRS) 2002','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8246','NAD83(CSRS) 2002','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8247','NAD83(CSRS) 2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8248','NAD83(CSRS) 2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8249','NAD83(CSRS) 2005','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8250','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8251','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8252','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8253','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8254','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8255','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9831','UA_UCS_2000 / LCS_01','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9832','UA_UCS_2000 / LCS_05','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9833','UA_UCS_2000 / LCS_07','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9834','UA_UCS_2000 / LCS_12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9836','UA_UCS_2000 / LCS_18','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9835','UA_UCS_2000 / LCS_14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9837','UA_UCS_2000 / LCS_21','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9838','UA_UCS_2000 / LCS_23','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9839','UA_UCS_2000 / LCS_26','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9840','UA_UCS_2000 / LCS_35','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9841','UA_UCS_2000 / LCS_44','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9851','UA_UCS_2000 / LCS_46','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9852','UA_UCS_2000 / LCS_48','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9853','UA_UCS_2000 / LCS_51','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9856','UA_UCS_2000 / LCS_59','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9854','UA_UCS_2000 / LCS_53','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9331','777','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9331','KSA-GRF17 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9332','778','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9332','KSA-GRF17 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9333','779','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9333','KSA-GRF17 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9335','780','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9335','KSA-VRF14 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9858','UA_UCS_2000 / LCS_63','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9857','UA_UCS_2000 / LCS_61','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9859','UA_UCS_2000 / LCS_65','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9865','UA_UCS_2000 / LCS_85','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9863','UA_UCS_2000 / LCS_74','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9862','UA_UCS_2000 / LCS_73','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9861','UA_UCS_2000 / LCS_71','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9821','UA_UCS_2000 / LCS_32','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9860','UA_UCS_2000 / LCS_68','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9855','UA_UCS_2000 / LCS_56','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9864','UA_UCS_2000 / LCS_80','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9869','ETRS89 / MRH21 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9870','ETRS89 / MRH21 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9880','ETRS89 / MOLDOR11 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9881','ETRS89 / MOLDOR11 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5774','NG-L height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5558','UA_UCS-2000 / XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5560','UA_UCS-2000 / Lat_Lon_h','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5562','UA_UCS-2000 / GK_6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5563','UA_UCS-2000 / GK_6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5564','UA_UCS-2000 / GK_6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5565','UA_UCS-2000 / GK_6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6381','UA_UCS-2000 / UA_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6382','UA_UCS-2000 / UA_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6383','UA_UCS-2000 / UA_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6384','UA_UCS-2000 / UA_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6385','UA_UCS-2000 / UA_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6386','UA_UCS-2000 / UA_TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6387','UA_UCS-2000 / UA_TM','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9307','785','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9307','ATRF2014 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9308','786','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9308','ATRF2014 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9309','787','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9309','ATRF2014 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9458','788','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9458','AVWS - NHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9753','796','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9753','WGS 84 (G2139) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9754','797','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9754','WGS 84 (G2139) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9755','798','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9755','WGS 84 (G2139) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','LV_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','UA_KRON / NH','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5793','SHOM 1953 height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4181','Luxembourg 1930','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2169','LUREF / Gauss Luxembourg','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9923','GNTRANS2003 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9932','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + GNTRANS2016 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9933','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + GNTRANS2016 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9934','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + GNTRANS2016 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9935','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + GNTRANS2016 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9928','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + GNTRANS2003 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9929','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + GNTRANS2003 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9930','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + GNTRANS2003 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9931','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + GNTRANS2003 height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5681','DB_REF2003','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5681','DB_REF2016','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5830','DB_REF2003','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5830','DB_REF2016','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5828','DB_REF2003','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5828','DB_REF2016','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9920','British National Grid + BI height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9922','IRENET95 / ITM + BI height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9943','ETRS89 / EBBWV14 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9944','ETRS89 / EBBWV14 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6190','BD72 / Belgian Lambert 72 + Oostende height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9907','ETRS89 + Oostende height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','32159','NAD83 / WyLam','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9967','ETRS89 / HULLEE13 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9968','ETRS89 / HULLEE13 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9972','ETRS89 / SCM22 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9973','ETRS89 / SCM22 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9977','ETRS89 / FNL22 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9978','ETRS89 / FNL22 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9945','MGI 1901 / Macedonia GK truncated','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9945','MGI 1901 / Macedonia Gauss-Kruger truncated','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9945','MSCS truncated','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8082','NAD83(CSRS)v6 / MTM Nova Scotia zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8082','NAD83(CSRS) 2010 / MTM NS zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8083','NAD83(CSRS)v6 / MTM Nova Scotia zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8083','NAD83(CSRS) 2010 / MTM NS zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22351','NAD83(CSRS) 1997 / MTM zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22352','NAD83(CSRS) 1997 / MTM zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22353','NAD83(CSRS) 1997 / MTM zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22354','NAD83(CSRS) 1997 / MTM zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22355','NAD83(CSRS) 1997 / MTM zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22356','NAD83(CSRS) 1997 / MTM zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22357','NAD83(CSRS) 1997 / MTM zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22651','NAD83(CSRS) 2010 / MTM zone 11','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22652','NAD83(CSRS) 2010 / MTM zone 12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22653','NAD83(CSRS) 2010 / MTM zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22654','NAD83(CSRS) 2010 / MTM zone 14','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22655','NAD83(CSRS) 2010 / MTM zone 15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22656','NAD83(CSRS) 2010 / MTM zone 16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22657','NAD83(CSRS) 2010 / MTM zone 17','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22462','NAD83(CSRS) 2002 / Alberta 3TM ref merid 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22463','NAD83(CSRS) 2002 / Alberta 3TM ref merid 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22464','NAD83(CSRS) 2002 / Alberta 3TM ref merid 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22465','NAD83(CSRS) 2002 / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22762','NAD83(CSRS) 2010 / Alberta 3TM ref merid 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22763','NAD83(CSRS) 2010 / Alberta 3TM ref merid 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22764','NAD83(CSRS) 2010 / Alberta 3TM ref merid 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22765','NAD83(CSRS) 2010 / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22641','NAD83(CSRS) 2010 / MTM zone 1','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22642','NAD83(CSRS) 2010 / MTM zone 2','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22643','NAD83(CSRS) 2010 / MTM zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22644','NAD83(CSRS) 2010 / MTM zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22645','NAD83(CSRS) 2010 / MTM zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22646','NAD83(CSRS) 2010 / MTM zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22739','NAD83(CSRS) 2010 / PEI Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22648','NAD83(CSRS) 2010 / MTM zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22649','NAD83(CSRS) 2010 / MTM zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22650','NAD83(CSRS) 2010 / MTM zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22307','NAD83(CSRS) 1997 / UTM zone 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22607','NAD83(CSRS) 2010 / UTM zone 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22707','NAD83(CSRS) 2010 / UTM zone 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22407','NAD83(CSRS) 2002 / UTM zone 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22409','NAD83(CSRS) 2002 / UTM zone 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22609','NAD83(CSRS) 2010 / UTM zone 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22709','NAD83(CSRS) 2010 / UTM zone 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22309','NAD83(CSRS) 1997 / UTM zone 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22311','NAD83(CSRS) 1997 / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22411','NAD83(CSRS) 2002 / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22611','NAD83(CSRS) 2010 / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22711','NAD83(CSRS) 2010 / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22312','NAD83(CSRS) 1997 / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22412','NAD83(CSRS) 2002 / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22712','NAD83(CSRS) 2010 / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22612','NAD83(CSRS) 2010 / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22313','NAD83(CSRS) 1997 / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22413','NAD83(CSRS) 2002 / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22613','NAD83(CSRS) 2010 / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22713','NAD83(CSRS) 2010 / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22314','NAD83(CSRS) 1997 / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22414','NAD83(CSRS) 2002 / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22614','NAD83(CSRS) 2010 / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22714','NAD83(CSRS) 2010 / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22315','NAD83(CSRS) 1997 / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22615','NAD83(CSRS) 2010 / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22715','NAD83(CSRS) 2010 / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22317','NAD83(CSRS) 1997 / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22417','NAD83(CSRS) 2002 / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22617','NAD83(CSRS) 2010 / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22717','NAD83(CSRS) 2010 / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22318','NAD83(CSRS) 1997 / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22418','NAD83(CSRS) 2002 / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22618','NAD83(CSRS) 2010 / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22718','NAD83(CSRS) 2010 / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22415','NAD83(CSRS) 2002 / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22316','NAD83(CSRS) 1997 / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22416','NAD83(CSRS) 2002 / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22616','NAD83(CSRS) 2010 / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22716','NAD83(CSRS) 2010 / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22308','NAD83(CSRS) 1997 / UTM zone 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22408','NAD83(CSRS) 2002 / UTM zone 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22608','NAD83(CSRS) 2010 / UTM zone 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22708','NAD83(CSRS) 2010 / UTM zone 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22310','NAD83(CSRS) 1997 / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22410','NAD83(CSRS) 2002 / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22610','NAD83(CSRS) 2010 / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22710','NAD83(CSRS) 2010 / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22319','NAD83(CSRS) 1997 / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22419','NAD83(CSRS) 2002 / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22619','NAD83(CSRS) 2010 / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22719','NAD83(CSRS) 2010 / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22320','NAD83(CSRS) 1997 / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22420','NAD83(CSRS) 2002 / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22620','NAD83(CSRS) 2010 / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22720','NAD83(CSRS) 2010 / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22321','NAD83(CSRS) 1997 / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22421','NAD83(CSRS) 2002 / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22621','NAD83(CSRS) 2010 / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22721','NAD83(CSRS) 2010 / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22322','NAD83(CSRS) 1997 / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22422','NAD83(CSRS) 2002 / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22622','NAD83(CSRS) 2010 / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22722','NAD83(CSRS) 2010 / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','20000','SVD2006Height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22219','NAD83(CSRS) 1997 / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22219','NAD83(CSRS98) / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22220','NAD83(CSRS) 1997 / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22220','NAD83(CSRS98) / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22221','NAD83(CSRS) 1997 / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22221','NAD83(CSRS98) / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22222','NAD83(CSRS) 1997 / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22222','NAD83(CSRS98) / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22213','NAD83(CSRS) 1997 / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22213','NAD83 / UTM extended zone 13','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22213','NAD83(CSRS98) / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22214','NAD83(CSRS) 1997 / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22214','NAD83(CSRS98) / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22215','NAD83(CSRS) 1997 / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22215','NAD83(CSRS98) / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22216','NAD83(CSRS) 1997 / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22216','NAD83(CSRS98) / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22217','NAD83(CSRS) 1997 / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22217','NAD83(CSRS98) / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22218','NAD83(CSRS) 1997 / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22218','NAD83(CSRS98) / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22207','NAD83(CSRS) 1997 / UTM zone 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22207','NAD83(CSRS98) / UTM zone 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22208','NAD83(CSRS) 1997 / UTM zone 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22208','NAD83(CSRS98) / UTM zone 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22209','NAD83(CSRS) 1997 / UTM zone 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22209','NAD83(CSRS98) / UTM zone 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22210','NAD83(CSRS) 1997 / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22210','NAD83(CSRS98) / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22211','NAD83(CSRS) 1997 / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22211','NAD83(CSRS98) / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22212','NAD83(CSRS) 1997 / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22212','NAD83(CSRS98) / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22262','NAD83(CSRS) 1997 / Alberta 3TM ref merid 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22262','NAD83(CSRS98) / Alberta 3TM ref merid 111','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22263','NAD83(CSRS) 1997 / Alberta 3TM ref merid 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22263','NAD83(CSRS98) / Alberta 3TM ref merid 114','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22264','NAD83(CSRS) 1997 / Alberta 3TM ref merid 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22264','NAD83(CSRS98) / Alberta 3TM ref merid 117','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22265','NAD83(CSRS) 1997 / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22265','NAD83(CSRS98) / Alberta 3TM ref merid 120','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22337','NAD83(CSRS)v3 / MTM Nova Scotia zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22337','NAD83(CSRS) 1997 / MTM NS zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22338','NAD83(CSRS)v3 / MTM Nova Scotia zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22338','NAD83(CSRS) 1997 / MTM NS zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22239','NAD83(CSRS) 1997 / PEI Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22239','NAD83(CSRS98) / PEI Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22240','NAD83(CSRS) 1997 / NB Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22240','NAD83(CSRS98) / NB Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22243','NAD83(CSRS) 1997 / MTM zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22243','NAD83(CSRS98) / SCoPQ zone 3','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22244','NAD83(CSRS) 1997 / MTM zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22244','NAD83(CSRS98) / SCoPQ zone 4','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22245','NAD83(CSRS) 1997 / MTM zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22245','NAD83(CSRS98) / SCoPQ zone 5','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22246','NAD83(CSRS) 1997 / MTM zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22246','NAD83(CSRS98) / SCoPQ zone 6','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22247','NAD83(CSRS) 1997 / MTM zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22247','NAD83(CSRS98) / SCoPQ zone 7','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22639','NAD83(CSRS) 2010 / PEI Stereographic','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22348','NAD83(CSRS) 1997 / MTM zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22349','NAD83(CSRS) 1997 / MTM zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22350','NAD83(CSRS) 1997 / MTM zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22248','NAD83(CSRS) 1997 / MTM zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22248','NAD83(CSRS98) / SCoPQ zone 8','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22249','NAD83(CSRS) 1997 / MTM zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22249','NAD83(CSRS98) / SCoPQ zone 9','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22250','NAD83(CSRS) 1997 / MTM zone 10','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22250','NAD83(CSRS98) / SCoPQ zone 10','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9715','NAD83(CSRS) / UTM zone 15N + CGVD2013a height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6649','NAD83(CSRS) + CGVD2013 height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9245','CGVD2013a height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9245','335','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9245','CGVD2013(CGG2013a) Epoch 2010 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','20037','NAD83(CSRS) 2002 + CGVD2013(CGG2013a) epoch 2002 height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9988','802','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9988','ITRF2020 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9989','803','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9989','ITRF2020 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9990','804','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9990','ITRF2020 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9245','CGVD2013(CGG2013a) height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9245','CGVD2013(CGG2013a) epoch 2010','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9544','NAD83(CSRS)v6 + CGVD2013(CGG2013a) height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','20034','CGVD2013(CGG2013a) epoch 2002','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','20035','CGVD2013(CGG2013a) epoch 1997','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','20038','NAD83(CSRS) 1997 + CGVD2013(CGG2013a) epoch 1997 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20002','ETRS89 / MWC18 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','20003','ETRS89 / MWC18 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5721','IGN78C','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9471','INAGeoid2020 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9529','SRGI2013 + INAGeoid2020 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9356','955','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9356','KSA-GRF17 / UTM zone 36N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9357','956','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9357','KSA-GRF17 / UTM zone 37N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9358','957','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9358','KSA-GRF17 / UTM zone 38N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9359','958','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9359','KSA-GRF17 / UTM zone 39N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9360','959','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9360','KSA-GRF17 / UTM zone 40N','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','20035','965','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','20035','CGVD2013(CGG2013a) epoch 1997 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','20034','966','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','20034','CGVD2013(CGG2013a) epoch 2002 - OHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','20039','SIRGAS-Chile epoch 2021','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','20039','SIRGAS-Chile realización 5','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','20040','SIRGAS-Chile realización 5','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','20040','SIRGAS-Chile epoch 2021.00','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','20041','SIRGAS-Chile realización 5','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','20041','SIRGAS-Chile epoch 2021.00','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20050','NAD83(2011) / Amtrak CS21 (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','20050','ACS21 (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5872','Approximate HAT height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5874','Approximate High Water height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5869','Approximate MHHW height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5868','Approximate MHW height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5870','Approximate MHWS height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5862','Approximate LLWLT depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5873','Approximate Low Water depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5863','Approximate ISLW depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5871','Approximate HHWLT height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5866','Approximate MLLW depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5864','Approximate MLLWS depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5867','Approximate MLW depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5865','Approximate MLWS depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5861','Approximate LAT depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5715','Approximate MSL depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8053','Approximate MSL depth (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5714','Approximate MSL height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8050','Approximate MSL height (ft)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8052','Approximate MSL height (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8051','Approximate MSL depth (ft)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10183','ETRS89 / DoPw22 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10188','ETRS89 / ShAb07 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10189','ETRS89 / ShAb07 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10184','ETRS89 / DoPw22 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10195','ETRS89 / CNH22 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4479','CGCS 2000 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10200','ETRS89 / CWS13 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10208','ETRS89 / DIBA15 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10213','ETRS89 / GWPBS22 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10223','ETRS89 / GWWWA22 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10228','ETRS89 / MALS09 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10236','ETRS89 / OxWo08 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10241','ETRS89 / SYC20 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10194','ETRS89 / CNH22 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10199','ETRS89 / CWS13 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10207','ETRS89 / DIBA15 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10207','DIDBAN15 Grid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10218','ETRS89 / GWWAB22 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10227','ETRS89 / MALS09 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10235','ETRS89 / OxWo08 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10240','ETRS89 / SYC20 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10212','ETRS89 / GWPBS22 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10217','ETRS89 / GWWAB22 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9377','MAGNA-SIRGAS 2018 / CTM12','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10222','ETRS89 / GWWWA22 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10246','D96/TM + SVS2010/Koper','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10245','D96 + SVS2010/Koper','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','11114','MAGNA-SIRGAS 2018 / Col FW','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','11115','MAGNA-SIRGAS 2018 / Col W','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','11117','MAGNA-SIRGAS 2018 / Col EC','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','11118','MAGNA-SIRGAS 2018 / Col E','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','11116','MAGNA-SIRGAS 2018 / Col Bog','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10275','ETRS89 / SMITB20 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10276','ETRS89 / SMITB20 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10280','ETRS89 / RBEPP12 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10281','ETRS89 / RBEPP12 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10284','ETRS89/DREF91/R16','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10286','ETRS89/DREF91/R16 / UTM 31(N-zE)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10287','ETRS89/DREF91/R16 / UTM 31(zE-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10288','ETRS89/DREF91/R16 / UTM 32(N-zE)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10289','ETRS89/DREF91/R16 / UTM 32(zE-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10290','ETRS89/DREF91/R16 / UTM 33(N-zE)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10291','ETRS89/DREF91/R16 / UTM 33(zE-N)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10298','REPANGOL','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4948','LKS92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4949','LKS92','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4661','LKS92','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3059','LKS-92 TM','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10306','LKS-2020 TM','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10176','980','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10176','IGS20 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10177','981','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10177','IGS20 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10178','982','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10178','IGS20 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10285','ETRS89/DREF91/R16 / 3GK zn3','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4749','RGNC91-93 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4907','RGNC91-93 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10309','RGNC15 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10310','RGNC15 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9351','NGNC height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9540','RGNC91-93 + NGNC height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10318','RGNC15 (lon-lat) + NGNC height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10314','Lambert NC15','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10315','RGNC / UTM zone 57S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10316','RGNC / UTM zone 58S','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10160','System 34 Jylland, østvendt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10250','System 34 Sjælland, østvendt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10254','System 45 Bornholm, østvendt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10262','Generalstabens System Bornholm, østvendt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10268','OS-IRF','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10258','Generalstabens System, østvendt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10266','Københavns Kommunes System, østvendt','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10352','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10353','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10354','REDNAP height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4926','Korea 2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4927','Korea 2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4737','Korea 2000','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5180','Korea 2000 / West Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5181','Korea 2000 / Central Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5182','Korea 2000 / Central Belt Jeju','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5183','Korea 2000 / East Belt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5179','Korea 2000 / Unified CS','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5193','Incheon height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6178','Cais da Pontinha - Funchal height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6179','Cais da Vila - Porto Santo height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10349','CD Portugal depth','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10412','993','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10412','NAD83(CSRS) v8 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10412','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10413','992','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10413','NAD83(CSRS) v8 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10413','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10414','994','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10414','NAD83(CSRS) v8 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10414','NAD83(CSRS) 2010','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22807','NAD83(CSRS) 2010 / UTM zone 7N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22808','NAD83(CSRS) 2010 / UTM zone 8N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22809','NAD83(CSRS) 2010 / UTM zone 9N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22810','NAD83(CSRS) 2010 / UTM zone 10N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22811','NAD83(CSRS) 2010 / UTM zone 11N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22812','NAD83(CSRS) 2010 / UTM zone 12N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22813','NAD83(CSRS) 2010 / UTM zone 13N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22814','NAD83(CSRS) 2010 / UTM zone 14N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22815','NAD83(CSRS) 2010 / UTM zone 15N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22816','NAD83(CSRS) 2010 / UTM zone 16N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22817','NAD83(CSRS) 2010 / UTM zone 17N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22818','NAD83(CSRS) 2010 / UTM zone 18N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22819','NAD83(CSRS) 2010 / UTM zone 19N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22820','NAD83(CSRS) 2010 / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22821','NAD83(CSRS) 2010 / UTM zone 21N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','22822','NAD83(CSRS) 2010 / UTM zone 22N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10471','ETRS89 / COV23 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10472','ETRS89 / COV23 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5799','DVR90 ensemble height','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4162','1011','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4162','Korean 1985 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4926','1008','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4926','KGD2002 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4927','1007','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4927','KGD2002 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4737','1009','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4737','KGD2002 - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5193','1010','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5193','KVD1964 - NOHt','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10731','ETRS89/DREF91/R16 / UTM 31','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10733','ETRS89/DREF91/R16 / UTM 33','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10516','NAD83(2011) / WISCRS Adjusted Jackson (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10732','ETRS89/DREF91/R16 / UTM 32','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10551','DKMSL ensemble depth','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10552','DKLAT ensemble depth','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7400','NTF (Paris) + NGF IGN69 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3844','Stereografic 1970','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10622','NAD83(2011) / SFO B18 grid (ftUS)','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10627','ETRS89 / ECML14 SnakeGrid + Newlyn height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10626','ETRS89 / ECML14 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10632','ETRS89 / WC05 SnakeGrid','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10659','ETRS89 + EOMA 1980 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10665','Porto Alegre Cartographic Reference System (SCR-POA)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4801','Bern 1898 (Bern)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21780','Bern 1898 (Bern) / LV03C','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10588','CGVD28(HT2)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5682','DB_REF2016 / 3GK zone 2 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5682','DB_REF2003 / 3-degree Gauss-Kruger zone 2 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5683','DB_REF2016 / 3GK zone 3 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5683','DB_REF2003 / 3-degree Gauss-Kruger zone 3 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5683','DB_REF2016 / 3-degree Gauss-Kruger zone 3 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5684','DB_REF2016 / 3GK zone 4 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5684','DB_REF2003 / 3-degree Gauss-Kruger zone 4 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5684','DB_REF2016 / 3-degree Gauss-Kruger zone 4 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5685','DB_REF2016 / 3GK zone 5 E-N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5685','DB_REF2003 / 3-degree Gauss-Kruger zone 5 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5685','DB_REF2016 / 3-degree Gauss-Kruger zone 5 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5682','DB_REF2016 / 3-degree Gauss-Kruger zone 2 (E-N)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10671','RGM23 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10670','RGM23 (lat-lon)','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10637','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10638','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10639','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10641','Saba / Saba TM 2020','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10645','Saba / Saba TM 2020 + Saba height','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5779','SVS2000/Trst ','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8690','SVS2010/Koper','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10686','D96 + SVS2000/Trst','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10687','D96/TM + SVS2000/Trst','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','3903','ETRS89 / TM35FIN(N,E) + N2000 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3126','ETRS89 / ETRS-GK19FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3127','ETRS89 / ETRS-GK20FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3128','ETRS89 / ETRS-GK21FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3129','ETRS89 / ETRS-GK22FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3130','ETRS89 / ETRS-GK23FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3131','ETRS89 / ETRS-GK24FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3132','ETRS89 / ETRS-GK25FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3133','ETRS89 / ETRS-GK26FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3134','ETRS89 / ETRS-GK27FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3135','ETRS89 / ETRS-GK28FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3136','ETRS89 / ETRS-GK29FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3137','ETRS89 / ETRS-GK30FIN','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3138','ETRS89 / ETRS-GK31FIN','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10688','EUREF-FIN-XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10689','EUREF-FIN-GRS80h','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10691','ETRS89 + N60 height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10692','ETRS89 + N2000 height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3067','EUREF-FIN / UTM zone 35N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3067','ETRS89 / TM35FIN(E,N)','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10699','ETRS-TM34','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10699','ETRS89 / UTM zone 34N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10702','ETRS-TM36','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10702','ETRS89 / UTM zone 36N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10759','Bonaire / Bonaire TM','EPSG'); INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10763','Bonaire KADpeil','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10690','EUREF-FIN-GRS80','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10774','ETRS-TM35FIN/N2000','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10737','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10738','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10739','BES2020','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10746','Sint Eustatius / Sint Eustatius TM 2020 + Sint Eustatius height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10745','Sint Eustatius / UTM zone 20N','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10744','Sint Eustatius / Sint Eustatius TM 2020','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10747','Sint Eustatius / UTM 20N + Sint Eustatius height','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10764','Bonaire DPnet + Bonaire KADpeil','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10764','Bonaire / Bonaire TM + Bonaire height','EPSG'); INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10773','SIRGAS 2000 / RPTM','EPSG'); INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10765','Bonaire 2004 + Bonaire KADpeil','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10604','1255','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10604','WGS 84 (G2296) - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10605','1256','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10605','WGS 84 (G2296) - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10606','1257','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10606','WGS 84 (G2296) - LatLon','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10569','1240','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10569','ETRF2020 - XYZ','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10570','1239','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10570','ETRF2020 - LatLonEHt','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10571','1238','EPSG'); INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10571','ETRF2020 - LatLonEHt','EPSG'); proj-9.6.0/data/sql/analyze_vacuum.sql000664 001754 001755 00000000022 14764566077 017667 0ustar00e012349e012349000000 000000 ANALYZE; VACUUM; proj-9.6.0/data/sql/axis.sql000664 001754 001755 00000072304 14764566077 015624 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "axis" VALUES('EPSG','32773','Easting','M','east','EPSG','1024',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32774','Northing','P','north','EPSG','1024',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1062','Easting','X','North along 130°W','EPSG','1025',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1063','Northing','Y','North along 140°E','EPSG','1025',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1065','Easting','E','South along 90°E','EPSG','1026',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1066','Northing','N','South along 180°E','EPSG','1026',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1056','Easting','E','North along 90°E','EPSG','1027',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1058','Northing','N','North along 0°E','EPSG','1027',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1073','Easting','E','east','EPSG','1028',1,'EPSG','9037'); INSERT INTO "axis" VALUES('EPSG','1074','Northing','N','north','EPSG','1028',2,'EPSG','9037'); INSERT INTO "axis" VALUES('EPSG','1078','Northing','N','north','EPSG','1029',1,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','1079','Easting','E','east','EPSG','1029',2,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','1101','Northing','Y','north','EPSG','1031',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1102','Westing','X','west','EPSG','1031',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1110','Plant East','x','east','EPSG','1032',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1111','Plant North','y','north','EPSG','1032',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1112','Gravity-related height','z','up','EPSG','1032',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1428','Bin grid I','I','J-axis plus 90 degrees','EPSG','1033',1,'EPSG','1024'); INSERT INTO "axis" VALUES('EPSG','1429','Bin grid J','J','See associated operation','EPSG','1033',2,'EPSG','1024'); INSERT INTO "axis" VALUES('EPSG','1431','Bin grid I','I','J-axis minus 90 degrees','EPSG','1034',1,'EPSG','1024'); INSERT INTO "axis" VALUES('EPSG','1432','Bin grid J','J','See associated operation','EPSG','1034',2,'EPSG','1024'); INSERT INTO "axis" VALUES('EPSG','1466','Easting','X','South along 180°E','EPSG','1035',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1467','Northing','Y','South along 90°W','EPSG','1035',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1471','Easting','X','South along 57°E','EPSG','1036',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1472','Northing','Y','South along 147°E','EPSG','1036',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1476','Easting','X','South along 108°E','EPSG','1037',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1477','Northing','Y','South along 162°W','EPSG','1037',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1481','Easting','X','South along 165°W','EPSG','1038',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1482','Northing','Y','South along 75°W','EPSG','1038',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1486','Easting','E','east','EPSG','1039',1,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','1487','Northing','N','north','EPSG','1039',2,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','32855','Forward','x','forward','EPSG','1040',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32856','Starboard','y','starboard','EPSG','1040',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32857','Platform Up','z','up','EPSG','1040',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32858','Forward','x','forward','EPSG','1041',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32859','Starboard','y','starboard','EPSG','1041',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32860','Platform Down','z','down','EPSG','1041',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32861','Starboard','x','starboard','EPSG','1042',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32862','Forward','y','forward','EPSG','1042',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32863','Platform Up','z','up','EPSG','1042',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1525','Northing','N','North along 180°E','EPSG','1044',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1526','Easting','E','North along 90°W','EPSG','1044',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32864','Starboard','x','starboard','EPSG','1045',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32865','Forward','y','forward','EPSG','1045',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32866','Platform Down','z','down','EPSG','1045',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32928','Northing','X','north','EPSG','1046',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32929','Easting','Y','east','EPSG','1046',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32930','Ellipsoidal height','h','up','EPSG','1046',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1042','Local northing','n','north','EPSG','1047',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1043','Local easting','e','east','EPSG','1047',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1049','Local northing','n','north','EPSG','1048',1,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','1050','Local easting','e','east','EPSG','1048',2,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','32933','Northing','N','north','EPSG','1053',1,'EPSG','9003'); INSERT INTO "axis" VALUES('EPSG','32934','Easting','E','east','EPSG','1053',2,'EPSG','9003'); INSERT INTO "axis" VALUES('EPSG','32935','Easting','x','east','EPSG','1054',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32936','Northing','y','north','EPSG','1054',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1','Easting','E','east','EPSG','4400',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','2','Northing','N','north','EPSG','4400',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','3','Easting','E','east','EPSG','4401',1,'EPSG','9062'); INSERT INTO "axis" VALUES('EPSG','4','Northing','N','north','EPSG','4401',2,'EPSG','9062'); INSERT INTO "axis" VALUES('EPSG','5','Easting','E','east','EPSG','4402',1,'EPSG','9042'); INSERT INTO "axis" VALUES('EPSG','6','Northing','N','north','EPSG','4402',2,'EPSG','9042'); INSERT INTO "axis" VALUES('EPSG','7','Easting','E','east','EPSG','4403',1,'EPSG','9005'); INSERT INTO "axis" VALUES('EPSG','8','Northing','N','north','EPSG','4403',2,'EPSG','9005'); INSERT INTO "axis" VALUES('EPSG','9','Easting','E','east','EPSG','4404',1,'EPSG','9094'); INSERT INTO "axis" VALUES('EPSG','10','Northing','N','north','EPSG','4404',2,'EPSG','9094'); INSERT INTO "axis" VALUES('EPSG','11','Easting','E','east','EPSG','4405',1,'EPSG','9041'); INSERT INTO "axis" VALUES('EPSG','12','Northing','N','north','EPSG','4405',2,'EPSG','9041'); INSERT INTO "axis" VALUES('EPSG','13','Easting','X','east','EPSG','4406',1,'EPSG','9036'); INSERT INTO "axis" VALUES('EPSG','14','Northing','Y','north','EPSG','4406',2,'EPSG','9036'); INSERT INTO "axis" VALUES('EPSG','15','Easting','E','east','EPSG','4407',1,'EPSG','9039'); INSERT INTO "axis" VALUES('EPSG','16','Northing','N','north','EPSG','4407',2,'EPSG','9039'); INSERT INTO "axis" VALUES('EPSG','17','Easting','E','east','EPSG','4408',1,'EPSG','9084'); INSERT INTO "axis" VALUES('EPSG','18','Northing','N','north','EPSG','4408',2,'EPSG','9084'); INSERT INTO "axis" VALUES('EPSG','19','Easting','E','east','EPSG','4409',1,'EPSG','9040'); INSERT INTO "axis" VALUES('EPSG','20','Northing','N','north','EPSG','4409',2,'EPSG','9040'); INSERT INTO "axis" VALUES('EPSG','181','Easting','E','east','EPSG','4410',1,'EPSG','9301'); INSERT INTO "axis" VALUES('EPSG','182','Northing','N','north','EPSG','4410',2,'EPSG','9301'); INSERT INTO "axis" VALUES('EPSG','32875','Easting','E','South along 90°E','EPSG','4460',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32876','Northing','N','South along 180°E','EPSG','4460',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','205','Topocentric East','U','east','EPSG','4461',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','206','Topocentric North','V','north','EPSG','4461',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','207','Topocentric height','W','up','EPSG','4461',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','193','Easting','X','South along 180°W','EPSG','4462',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','194','Northing','Y','South along 90°W','EPSG','4462',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','195','Easting','X','South along 100°E','EPSG','4463',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','196','Northing','Y','South along 170°W','EPSG','4463',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','197','Easting','X','South along 90°W','EPSG','4464',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','198','Northing','Y','South along 0°E','EPSG','4464',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','199','Easting','X','South along 50°E','EPSG','4465',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','200','Northing','Y','South along 140°E','EPSG','4465',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','201','Easting','X','South along 10°W','EPSG','4466',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','202','Northing','Y','South along 80°E','EPSG','4466',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','203','Easting','X','South along 60°W','EPSG','4467',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','204','Northing','Y','South along 30°E','EPSG','4467',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','191','Easting','X','South along 45°E','EPSG','4468',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','192','Northing','Y','South along 135°E','EPSG','4468',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','187','Easting','X','South along 90°E','EPSG','4469',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','188','Northing','Y','South along 180°E','EPSG','4469',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','185','Easting','X','North along 90°E','EPSG','4470',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','186','Northing','Y','North along 0°E','EPSG','4470',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','137','Easting','E','North along 75°W','EPSG','4471',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','138','Northing','N','North along 165°W','EPSG','4471',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','156','Easting','E','North along 60°W','EPSG','4472',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','139','Northing','N','North along 150°W','EPSG','4472',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','157','Easting','E','North along 45°W','EPSG','4473',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','140','Northing','N','North along 135°W','EPSG','4473',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','158','Easting','E','North along 15°W','EPSG','4474',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','141','Northing','N','North along 105°W','EPSG','4474',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','159','Easting','E','North along 0°E','EPSG','4475',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','142','Northing','N','North along 90°W','EPSG','4475',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','160','Easting','E','North along 15°E','EPSG','4476',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','143','Northing','N','North along 75°W','EPSG','4476',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','161','Easting','E','North along 45°E','EPSG','4477',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','144','Northing','N','North along 45°W','EPSG','4477',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','162','Easting','E','North along 60°E','EPSG','4478',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','145','Northing','N','North along 30°W','EPSG','4478',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','163','Easting','E','North along 75°E','EPSG','4479',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','146','Northing','N','North along 15°W','EPSG','4479',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','164','Easting','E','North along 105°E','EPSG','4480',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','147','Northing','N','North along 15°E','EPSG','4480',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','165','Easting','E','North along 120°E','EPSG','4481',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','148','Northing','N','North along 30°E','EPSG','4481',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','166','Easting','E','North along 135°E','EPSG','4482',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','149','Northing','N','North along 45°E','EPSG','4482',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','167','Easting','E','North along 165°E','EPSG','4483',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','150','Northing','N','North along 75°E','EPSG','4483',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','168','Easting','E','North along 180°E','EPSG','4484',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','151','Northing','N','North along 90°E','EPSG','4484',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','169','Easting','E','North along 165°W','EPSG','4485',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','152','Northing','N','North along 105°E','EPSG','4485',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','170','Easting','E','North along 135°W','EPSG','4486',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','153','Northing','N','North along 135°E','EPSG','4486',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','171','Easting','E','North along 120°W','EPSG','4487',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','154','Northing','N','North along 150°E','EPSG','4487',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','172','Easting','E','North along 105°W','EPSG','4488',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','155','Northing','N','North along 165°E','EPSG','4488',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','21','Easting','E','North along 160°E','EPSG','4489',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','22','Northing','N','North along 70°E','EPSG','4489',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','23','Easting','E','North along 90°E','EPSG','4490',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','24','Northing','N','North along 0°E','EPSG','4490',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','26','Westing','W','west','EPSG','4491',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','25','Northing','N','north','EPSG','4491',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','27','First local axis','X','North along 130°W','EPSG','4492',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','28','Second local axis','Y','North along 140°E','EPSG','4492',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','30','Northing','N','South along 180°E','EPSG','4493',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','29','Easting','E','South along 90°E','EPSG','4493',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32','Northing','N','North along 0°E','EPSG','4494',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','31','Easting','E','North along 90°E','EPSG','4494',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','33','Easting','X','east','EPSG','4495',1,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','34','Northing','Y','north','EPSG','4495',2,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','35','Easting','E(X)','east','EPSG','4496',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','36','Northing','N(Y)','north','EPSG','4496',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','37','Easting','X','east','EPSG','4497',1,'EPSG','9003'); INSERT INTO "axis" VALUES('EPSG','38','Northing','Y','north','EPSG','4497',2,'EPSG','9003'); INSERT INTO "axis" VALUES('EPSG','39','Easting','Y','east','EPSG','4498',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','40','Northing','X','north','EPSG','4498',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','41','Easting','X','east','EPSG','4499',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','42','Northing','Y','north','EPSG','4499',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','44','Northing','N','north','EPSG','4500',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','43','Easting','E','east','EPSG','4500',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','45','Northing','N','north','EPSG','4501',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','46','Westing','E','west','EPSG','4501',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','189','Northing','N','north','EPSG','4502',1,'EPSG','9005'); INSERT INTO "axis" VALUES('EPSG','190','Easting','E','east','EPSG','4502',2,'EPSG','9005'); INSERT INTO "axis" VALUES('EPSG','48','Northing','X','north','EPSG','4530',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','47','Easting','Y','east','EPSG','4530',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','50','Northing','x','north','EPSG','4531',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','49','Easting','y','east','EPSG','4531',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','52','Northing','Y','north','EPSG','4532',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','51','Easting','X','east','EPSG','4532',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','180','Northing','X','north','EPSG','4533',1,'EPSG','9098'); INSERT INTO "axis" VALUES('EPSG','179','Easting','Y','east','EPSG','4533',2,'EPSG','9098'); INSERT INTO "axis" VALUES('EPSG','183','Northing','none','north','EPSG','4534',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','184','Easting','none','east','EPSG','4534',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','115','Geocentric X','X','geocentricX','EPSG','6500',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','116','Geocentric Y','Y','geocentricY','EPSG','6500',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','117','Geocentric Z','Z','geocentricZ','EPSG','6500',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','119','Southing','X','south','EPSG','6501',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','118','Westing','Y','west','EPSG','6501',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','120','Westing','Y','west','EPSG','6502',1,'EPSG','9031'); INSERT INTO "axis" VALUES('EPSG','121','Southing','X','south','EPSG','6502',2,'EPSG','9031'); INSERT INTO "axis" VALUES('EPSG','122','Westing','Y','west','EPSG','6503',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','123','Southing','X','south','EPSG','6503',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32877','Plant North','n','northWest','EPSG','6504',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32878','Plant East','e','northEast','EPSG','6504',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32873','First local axis','n','northWest','EPSG','6505',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32874','Second local axis','e','northEast','EPSG','6505',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','128','First local axis','I','east-south-east','EPSG','6506',1,'EPSG','9205'); INSERT INTO "axis" VALUES('EPSG','129','Second local axis','J','north-north-east','EPSG','6506',2,'EPSG','9204'); INSERT INTO "axis" VALUES('EPSG','130','First local axis','X','north','EPSG','6507',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','131','Second local axis','Y','west','EPSG','6507',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','133','Bin grid J','J','north north east','EPSG','6508',1,'EPSG','9209'); INSERT INTO "axis" VALUES('EPSG','132','Bin grid I','I','east south east','EPSG','6508',2,'EPSG','9208'); INSERT INTO "axis" VALUES('EPSG','135','Southing','P','south','EPSG','6509',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','134','Westing','M','west','EPSG','6509',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32871','Plant East','x','northEast','EPSG','6510',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32872','Plant North','y','northWest','EPSG','6510',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','211','Plant East','x','east','EPSG','6512',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','212','Plant North','y','north','EPSG','6512',2,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','213','Local height','z','up','EPSG','6512',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','32890','Bin grid I','I','columnPositive','EPSG','32760',1,NULL,NULL); INSERT INTO "axis" VALUES('EPSG','32891','Bin grid J','J','rowPositive','EPSG','32760',2,NULL,NULL); INSERT INTO "axis" VALUES('EPSG','32894','Bin grid I','I','columnNegative','EPSG','32761',1,NULL,NULL); INSERT INTO "axis" VALUES('EPSG','32895','Bin grid J','J','rowPositive','EPSG','32761',2,NULL,NULL); INSERT INTO "axis" VALUES('EPSG','1082','Gravity-related height','H','up','EPSG','1030',1,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','1516','Depth','D','down','EPSG','1043',1,'EPSG','9003'); INSERT INTO "axis" VALUES('EPSG','1051','Local depth','d','down','EPSG','1049',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','1053','Local depth','d','down','EPSG','1050',1,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','53','Geodetic latitude','Lat','north','EPSG','6401',1,'EPSG','9108'); INSERT INTO "axis" VALUES('EPSG','54','Geodetic longitude','Long','east','EPSG','6401',2,'EPSG','9108'); INSERT INTO "axis" VALUES('EPSG','55','Ellipsoidal height','h','up','EPSG','6401',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','56','Geodetic latitude','Lat','north','EPSG','6402',1,'EPSG','9108'); INSERT INTO "axis" VALUES('EPSG','57','Geodetic longitude','Long','east','EPSG','6402',2,'EPSG','9108'); INSERT INTO "axis" VALUES('EPSG','58','Geodetic latitude','Lat','north','EPSG','6403',1,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','59','Geodetic longitude','Lon','east','EPSG','6403',2,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','32879','Spherical latitude','lat','north','EPSG','6404',1,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','32880','Spherical longitude','lon','east','EPSG','6404',2,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','32881','Geocentric radius','R','up','EPSG','6404',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','63','Geodetic latitude','Lat','north','EPSG','6405',1,'EPSG','9102'); INSERT INTO "axis" VALUES('EPSG','64','Geodetic longitude','Long','east','EPSG','6405',2,'EPSG','9102'); INSERT INTO "axis" VALUES('EPSG','65','Geodetic latitude','Lat','north','EPSG','6406',1,'EPSG','9116'); INSERT INTO "axis" VALUES('EPSG','66','Geodetic longitude','Long','east','EPSG','6406',2,'EPSG','9116'); INSERT INTO "axis" VALUES('EPSG','67','Geodetic latitude','Lat','north','EPSG','6407',1,'EPSG','9117'); INSERT INTO "axis" VALUES('EPSG','68','Geodetic longitude','Long','east','EPSG','6407',2,'EPSG','9117'); INSERT INTO "axis" VALUES('EPSG','69','Geodetic latitude','Lat','north','EPSG','6408',1,'EPSG','9115'); INSERT INTO "axis" VALUES('EPSG','70','Geodetic longitude','Long','east','EPSG','6408',2,'EPSG','9115'); INSERT INTO "axis" VALUES('EPSG','71','Geodetic latitude','Lat','north','EPSG','6409',1,'EPSG','9118'); INSERT INTO "axis" VALUES('EPSG','72','Geodetic longitude','Long','east','EPSG','6409',2,'EPSG','9118'); INSERT INTO "axis" VALUES('EPSG','73','Geodetic latitude','Lat','north','EPSG','6410',1,'EPSG','9119'); INSERT INTO "axis" VALUES('EPSG','74','Geodetic longitude','Long','east','EPSG','6410',2,'EPSG','9119'); INSERT INTO "axis" VALUES('EPSG','75','Geodetic latitude','Lat','north','EPSG','6411',1,'EPSG','9107'); INSERT INTO "axis" VALUES('EPSG','76','Geodetic longitude','Long','east','EPSG','6411',2,'EPSG','9107'); INSERT INTO "axis" VALUES('EPSG','77','Geodetic latitude','Lat','north','EPSG','6412',1,'EPSG','9120'); INSERT INTO "axis" VALUES('EPSG','78','Geodetic longitude','Long','east','EPSG','6412',2,'EPSG','9120'); INSERT INTO "axis" VALUES('EPSG','79','Geodetic latitude','Lat','north','EPSG','6413',1,'EPSG','9102'); INSERT INTO "axis" VALUES('EPSG','80','Geodetic longitude','Long','east','EPSG','6413',2,'EPSG','9102'); INSERT INTO "axis" VALUES('EPSG','81','Ellipsoidal height','h','up','EPSG','6413',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','82','Geodetic latitude','Lat','north','EPSG','6414',1,'EPSG','9116'); INSERT INTO "axis" VALUES('EPSG','83','Geodetic longitude','Long','east','EPSG','6414',2,'EPSG','9116'); INSERT INTO "axis" VALUES('EPSG','84','Ellipsoidal height','h','up','EPSG','6414',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','85','Geodetic latitude','Lat','north','EPSG','6415',1,'EPSG','9117'); INSERT INTO "axis" VALUES('EPSG','86','Geodetic longitude','Long','east','EPSG','6415',2,'EPSG','9117'); INSERT INTO "axis" VALUES('EPSG','87','Ellipsoidal height','h','up','EPSG','6415',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','88','Geodetic latitude','Lat','north','EPSG','6416',1,'EPSG','9115'); INSERT INTO "axis" VALUES('EPSG','89','Geodetic longitude','Long','east','EPSG','6416',2,'EPSG','9115'); INSERT INTO "axis" VALUES('EPSG','90','Ellipsoidal height','h','up','EPSG','6416',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','91','Geodetic latitude','Lat','north','EPSG','6417',1,'EPSG','9118'); INSERT INTO "axis" VALUES('EPSG','92','Geodetic longitude','Long','east','EPSG','6417',2,'EPSG','9118'); INSERT INTO "axis" VALUES('EPSG','93','Ellipsoidal height','h','up','EPSG','6417',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','94','Geodetic latitude','Lat','north','EPSG','6418',1,'EPSG','9119'); INSERT INTO "axis" VALUES('EPSG','95','Geodetic longitude','Long','east','EPSG','6418',2,'EPSG','9119'); INSERT INTO "axis" VALUES('EPSG','96','Ellipsoidal height','h','up','EPSG','6418',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','97','Geodetic latitude','Lat','north','EPSG','6419',1,'EPSG','9107'); INSERT INTO "axis" VALUES('EPSG','98','Geodetic longitude','Long','east','EPSG','6419',2,'EPSG','9107'); INSERT INTO "axis" VALUES('EPSG','99','Ellipsoidal height','h','up','EPSG','6419',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','100','Geodetic latitude','Lat','north','EPSG','6420',1,'EPSG','9120'); INSERT INTO "axis" VALUES('EPSG','101','Geodetic longitude','Long','east','EPSG','6420',2,'EPSG','9120'); INSERT INTO "axis" VALUES('EPSG','102','Ellipsoidal height','h','up','EPSG','6420',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','103','Geodetic latitude','Lat','north','EPSG','6421',1,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','104','Geodetic longitude','Lon','east','EPSG','6421',2,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','105','Ellipsoidal height','h','up','EPSG','6421',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','106','Geodetic latitude','Lat','north','EPSG','6422',1,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','107','Geodetic longitude','Lon','east','EPSG','6422',2,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','108','Geodetic latitude','Lat','north','EPSG','6423',1,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','109','Geodetic longitude','Lon','east','EPSG','6423',2,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','110','Ellipsoidal height','h','up','EPSG','6423',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','220','Geodetic longitude','Lon','east','EPSG','6424',1,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','221','Geodetic latitude','Lat','north','EPSG','6424',2,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','215','Geodetic longitude','Lon','east','EPSG','6425',1,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','216','Geodetic latitude','Lat','north','EPSG','6425',2,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','222','Geodetic longitude','Lon','east','EPSG','6426',1,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','223','Geodetic latitude','Lat','north','EPSG','6426',2,'EPSG','9122'); INSERT INTO "axis" VALUES('EPSG','224','Ellipsoidal height','h','up','EPSG','6426',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','217','Geodetic longitude','Lon','east','EPSG','6427',1,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','218','Geodetic latitude','Lat','north','EPSG','6427',2,'EPSG','9105'); INSERT INTO "axis" VALUES('EPSG','219','Ellipsoidal height','h','up','EPSG','6427',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','225','Geodetic latitude','Lat','north','EPSG','6428',1,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','226','Geodetic longitude','Lon','east','EPSG','6428',2,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','227','Geodetic longitude','Lon','east','EPSG','6429',1,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','228','Geodetic latitude','Lat','north','EPSG','6429',2,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','230','Geodetic latitude','Lat','north','EPSG','6430',1,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','231','Geodetic longitude','Lon','east','EPSG','6430',2,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','232','Ellipsoidal height','h','up','EPSG','6430',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','233','Geodetic longitude','Lon','east','EPSG','6431',1,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','234','Geodetic latitude','Lat','north','EPSG','6431',2,'EPSG','9101'); INSERT INTO "axis" VALUES('EPSG','235','Ellipsoidal height','h','up','EPSG','6431',3,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','214','Depth','D','down','EPSG','6495',1,'EPSG','9002'); INSERT INTO "axis" VALUES('EPSG','111','Gravity-related height','H','up','EPSG','6496',1,'EPSG','9095'); INSERT INTO "axis" VALUES('EPSG','112','Gravity-related height','H','up','EPSG','6497',1,'EPSG','9003'); INSERT INTO "axis" VALUES('EPSG','113','Depth','D','down','EPSG','6498',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','114','Gravity-related height','H','up','EPSG','6499',1,'EPSG','9001'); INSERT INTO "axis" VALUES('EPSG','177','Inline','I','Along receiver lines','EPSG','6511',1,'EPSG','9208'); INSERT INTO "axis" VALUES('EPSG','178','Crossline','J','Across receiver lines','EPSG','6511',2,'EPSG','9209'); proj-9.6.0/data/sql/begin.sql000664 001754 001755 00000000072 14764566077 015735 0ustar00e012349e012349000000 000000 PRAGMA page_size = 4096; PRAGMA foreign_keys = 1; BEGIN; proj-9.6.0/data/sql/commit.sql000664 001754 001755 00000002107 14764566077 016142 0ustar00e012349e012349000000 000000 COMMIT; CREATE INDEX geodetic_crs_datum_idx ON geodetic_crs(datum_auth_name, datum_code); CREATE INDEX geodetic_datum_ellipsoid_idx ON geodetic_datum(ellipsoid_auth_name, ellipsoid_code); CREATE INDEX supersession_idx ON supersession(superseded_table_name, superseded_auth_name, superseded_code); CREATE INDEX deprecation_idx ON deprecation(table_name, deprecated_auth_name, deprecated_code); CREATE INDEX helmert_transformation_idx ON helmert_transformation_table(source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code); CREATE INDEX grid_transformation_idx ON grid_transformation(source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code); CREATE INDEX other_transformation_idx ON other_transformation(source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code); CREATE INDEX concatenated_operation_idx ON concatenated_operation(source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code); -- We don't need to select by auth_name, code so nullify them to save space UPDATE usage SET auth_name = NULL, code = NULL; proj-9.6.0/data/sql/compound_crs.sql000664 001754 001755 00000313513 14764566077 017353 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "compound_crs" VALUES('EPSG','3901','KKJ / Finland Uniform Coordinate System + N60 height',NULL,'EPSG','2393','EPSG','5717',0); INSERT INTO "usage" VALUES('EPSG','2881','compound_crs','EPSG','3901','EPSG','3333','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','3902','EUREF-FIN / TM35FIN(N,E) + N60 height',NULL,'EPSG','5048','EPSG','5717',0); INSERT INTO "usage" VALUES('EPSG','2882','compound_crs','EPSG','3902','EPSG','3333','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','3903','EUREF-FIN / TM35FIN(N,E) + N2000 height',NULL,'EPSG','5048','EPSG','3900',0); INSERT INTO "usage" VALUES('EPSG','2883','compound_crs','EPSG','3903','EPSG','3333','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','4097','ETRS89 / DKTM1 + DVR90 height',NULL,'EPSG','4093','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','3001','compound_crs','EPSG','4097','EPSG','3631','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','4098','ETRS89 / DKTM2 + DVR90 height',NULL,'EPSG','4094','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','3002','compound_crs','EPSG','4098','EPSG','3632','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','4099','ETRS89 / DKTM3 + DVR90 height',NULL,'EPSG','4095','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','3003','compound_crs','EPSG','4099','EPSG','2532','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','4100','ETRS89 / DKTM4 + DVR90 height',NULL,'EPSG','4096','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','3004','compound_crs','EPSG','4100','EPSG','2533','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5318','ETRS89 / Faroe TM + FVR09 height',NULL,'EPSG','5316','EPSG','5317',0); INSERT INTO "usage" VALUES('EPSG','3925','compound_crs','EPSG','5318','EPSG','3248','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5498','NAD83 + NAVD88 height',NULL,'EPSG','4269','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','4003','compound_crs','EPSG','5498','EPSG','3664','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5499','NAD83(HARN) + NAVD88 height',NULL,'EPSG','4152','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','4004','compound_crs','EPSG','5499','EPSG','1323','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5500','NAD83(NSRS2007) + NAVD88 height',NULL,'EPSG','4759','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','4005','compound_crs','EPSG','5500','EPSG','1323','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5554','ETRS89 / UTM zone 31N + DHHN92 height',NULL,'EPSG','25831','EPSG','5783',0); INSERT INTO "usage" VALUES('EPSG','4032','compound_crs','EPSG','5554','EPSG','3901','EPSG','1190'); INSERT INTO "compound_crs" VALUES('EPSG','5555','ETRS89 / UTM zone 32N + DHHN92 height',NULL,'EPSG','25832','EPSG','5783',0); INSERT INTO "usage" VALUES('EPSG','4033','compound_crs','EPSG','5555','EPSG','3904','EPSG','1190'); INSERT INTO "compound_crs" VALUES('EPSG','5556','ETRS89 / UTM zone 33N + DHHN92 height',NULL,'EPSG','25833','EPSG','5783',0); INSERT INTO "usage" VALUES('EPSG','4034','compound_crs','EPSG','5556','EPSG','3879','EPSG','1190'); INSERT INTO "compound_crs" VALUES('EPSG','5598','FEH2010 / Fehmarnbelt TM + FCSVR10 height',NULL,'EPSG','5596','EPSG','5597',0); INSERT INTO "usage" VALUES('EPSG','4068','compound_crs','EPSG','5598','EPSG','3890','EPSG','1139'); INSERT INTO "compound_crs" VALUES('EPSG','5628','SWEREF99 + RH2000 height',NULL,'EPSG','4619','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4095','compound_crs','EPSG','5628','EPSG','3313','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5698','RGF93 v1 / Lambert-93 + NGF-IGN69 height',NULL,'EPSG','2154','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','4141','compound_crs','EPSG','5698','EPSG','1326','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5699','RGF93 v1 / Lambert-93 + NGF-IGN78 height',NULL,'EPSG','2154','EPSG','5721',0); INSERT INTO "usage" VALUES('EPSG','4142','compound_crs','EPSG','5699','EPSG','1327','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5707','NTF (Paris) / Lambert zone I + NGF-IGN69 height',NULL,'EPSG','27571','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','4150','compound_crs','EPSG','5707','EPSG','1731','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5708','NTF (Paris) / Lambert zone IV + NGF-IGN78 height',NULL,'EPSG','27574','EPSG','5721',0); INSERT INTO "usage" VALUES('EPSG','4151','compound_crs','EPSG','5708','EPSG','1327','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5832','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + DHHN92 height',NULL,'EPSG','5682','EPSG','5783',1); INSERT INTO "usage" VALUES('EPSG','4270','compound_crs','EPSG','5832','EPSG','1624','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','5833','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + DHHN92 height',NULL,'EPSG','5683','EPSG','5783',1); INSERT INTO "usage" VALUES('EPSG','4271','compound_crs','EPSG','5833','EPSG','3993','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','5834','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + DHHN92 height',NULL,'EPSG','5684','EPSG','5783',1); INSERT INTO "usage" VALUES('EPSG','4272','compound_crs','EPSG','5834','EPSG','3996','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','5835','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + DHHN92 height',NULL,'EPSG','5685','EPSG','5783',1); INSERT INTO "usage" VALUES('EPSG','4273','compound_crs','EPSG','5835','EPSG','3998','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','5845','SWEREF99 TM + RH2000 height',NULL,'EPSG','3006','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4280','compound_crs','EPSG','5845','EPSG','3313','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5846','SWEREF99 12 00 + RH2000 height',NULL,'EPSG','3007','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4281','compound_crs','EPSG','5846','EPSG','2833','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5847','SWEREF99 13 30 + RH2000 height',NULL,'EPSG','3008','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4282','compound_crs','EPSG','5847','EPSG','2834','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5848','SWEREF99 15 00 + RH2000 height',NULL,'EPSG','3009','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4283','compound_crs','EPSG','5848','EPSG','2835','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5849','SWEREF99 16 30 + RH2000 height',NULL,'EPSG','3010','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4284','compound_crs','EPSG','5849','EPSG','2836','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5850','SWEREF99 18 00 + RH2000 height',NULL,'EPSG','3011','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4285','compound_crs','EPSG','5850','EPSG','2837','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5851','SWEREF99 14 15 + RH2000 height',NULL,'EPSG','3012','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4286','compound_crs','EPSG','5851','EPSG','2838','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5852','SWEREF99 15 45 + RH2000 height',NULL,'EPSG','3013','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4287','compound_crs','EPSG','5852','EPSG','2839','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5853','SWEREF99 17 15 + RH2000 height',NULL,'EPSG','3014','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4288','compound_crs','EPSG','5853','EPSG','2840','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5854','SWEREF99 18 45 + RH2000 height',NULL,'EPSG','3015','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4289','compound_crs','EPSG','5854','EPSG','2841','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5855','SWEREF99 20 15 + RH2000 height',NULL,'EPSG','3016','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4290','compound_crs','EPSG','5855','EPSG','2842','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5856','SWEREF99 21 45 + RH2000 height',NULL,'EPSG','3017','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4291','compound_crs','EPSG','5856','EPSG','2843','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5857','SWEREF99 23 15 + RH2000 height',NULL,'EPSG','3018','EPSG','5613',0); INSERT INTO "usage" VALUES('EPSG','4292','compound_crs','EPSG','5857','EPSG','2844','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','5942','ETRS89 + NN2000 height',NULL,'EPSG','4258','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4346','compound_crs','EPSG','5942','EPSG','1352','EPSG','1027'); INSERT INTO "compound_crs" VALUES('EPSG','5945','ETRS89 / NTM zone 5 + NN2000 height',NULL,'EPSG','5105','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4347','compound_crs','EPSG','5945','EPSG','3636','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5946','ETRS89 / NTM zone 6 + NN2000 height',NULL,'EPSG','5106','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4348','compound_crs','EPSG','5946','EPSG','3639','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5947','ETRS89 / NTM zone 7 + NN2000 height',NULL,'EPSG','5107','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4349','compound_crs','EPSG','5947','EPSG','3647','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5948','ETRS89 / NTM zone 8 + NN2000 height',NULL,'EPSG','5108','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4350','compound_crs','EPSG','5948','EPSG','3648','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5949','ETRS89 / NTM zone 9 + NN2000 height',NULL,'EPSG','5109','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4351','compound_crs','EPSG','5949','EPSG','3649','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5950','ETRS89 / NTM zone 10 + NN2000 height',NULL,'EPSG','5110','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4352','compound_crs','EPSG','5950','EPSG','3650','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5951','ETRS89 / NTM zone 11 + NN2000 height',NULL,'EPSG','5111','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4353','compound_crs','EPSG','5951','EPSG','3651','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5952','ETRS89 / NTM zone 12 + NN2000 height',NULL,'EPSG','5112','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4354','compound_crs','EPSG','5952','EPSG','3653','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5953','ETRS89 / NTM zone 13 + NN2000 height',NULL,'EPSG','5113','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4355','compound_crs','EPSG','5953','EPSG','3654','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5954','ETRS89 / NTM zone 14 + NN2000 height',NULL,'EPSG','5114','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4356','compound_crs','EPSG','5954','EPSG','3655','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5955','ETRS89 / NTM zone 15 + NN2000 height',NULL,'EPSG','5115','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4357','compound_crs','EPSG','5955','EPSG','3656','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5956','ETRS89 / NTM zone 16 + NN2000 height',NULL,'EPSG','5116','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4358','compound_crs','EPSG','5956','EPSG','3657','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5957','ETRS89 / NTM zone 17 + NN2000 height',NULL,'EPSG','5117','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4359','compound_crs','EPSG','5957','EPSG','3658','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5958','ETRS89 / NTM zone 18 + NN2000 height',NULL,'EPSG','5118','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4360','compound_crs','EPSG','5958','EPSG','3660','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5959','ETRS89 / NTM zone 19 + NN2000 height',NULL,'EPSG','5119','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4361','compound_crs','EPSG','5959','EPSG','3661','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5960','ETRS89 / NTM zone 20 + NN2000 height',NULL,'EPSG','5120','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4362','compound_crs','EPSG','5960','EPSG','3662','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5961','ETRS89 / NTM zone 21 + NN2000 height',NULL,'EPSG','5121','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4363','compound_crs','EPSG','5961','EPSG','3663','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5962','ETRS89 / NTM zone 22 + NN2000 height',NULL,'EPSG','5122','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4364','compound_crs','EPSG','5962','EPSG','3665','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5963','ETRS89 / NTM zone 23 + NN2000 height',NULL,'EPSG','5123','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4365','compound_crs','EPSG','5963','EPSG','3667','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5964','ETRS89 / NTM zone 24 + NN2000 height',NULL,'EPSG','5124','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4366','compound_crs','EPSG','5964','EPSG','3668','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5965','ETRS89 / NTM zone 25 + NN2000 height',NULL,'EPSG','5125','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4367','compound_crs','EPSG','5965','EPSG','3669','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5966','ETRS89 / NTM zone 26 + NN2000 height',NULL,'EPSG','5126','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4368','compound_crs','EPSG','5966','EPSG','3671','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5967','ETRS89 / NTM zone 27 + NN2000 height',NULL,'EPSG','5127','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4369','compound_crs','EPSG','5967','EPSG','3672','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5968','ETRS89 / NTM zone 28 + NN2000 height',NULL,'EPSG','5128','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4370','compound_crs','EPSG','5968','EPSG','3673','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5969','ETRS89 / NTM zone 29 + NN2000 height',NULL,'EPSG','5129','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4371','compound_crs','EPSG','5969','EPSG','3674','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5970','ETRS89 / NTM zone 30 + NN2000 height',NULL,'EPSG','5130','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4372','compound_crs','EPSG','5970','EPSG','3676','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','5971','ETRS89 / UTM zone 31N + NN2000 height',NULL,'EPSG','25831','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4373','compound_crs','EPSG','5971','EPSG','3636','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','5972','ETRS89 / UTM zone 32N + NN2000 height',NULL,'EPSG','25832','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4374','compound_crs','EPSG','5972','EPSG','4066','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','5973','ETRS89 / UTM zone 33N + NN2000 height',NULL,'EPSG','25833','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4375','compound_crs','EPSG','5973','EPSG','4067','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','5974','ETRS89 / UTM zone 34N + NN2000 height',NULL,'EPSG','25834','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4376','compound_crs','EPSG','5974','EPSG','4068','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','5975','ETRS89 / UTM zone 35N + NN2000 height',NULL,'EPSG','25835','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4377','compound_crs','EPSG','5975','EPSG','4069','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','5976','ETRS89 / UTM zone 36N + NN2000 height',NULL,'EPSG','25836','EPSG','5941',0); INSERT INTO "usage" VALUES('EPSG','4378','compound_crs','EPSG','5976','EPSG','3676','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','6144','ETRS89 + NN54 height',NULL,'EPSG','4258','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4464','compound_crs','EPSG','6144','EPSG','1352','EPSG','1027'); INSERT INTO "compound_crs" VALUES('EPSG','6145','ETRS89 / NTM zone 5 + NN54 height',NULL,'EPSG','5105','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4465','compound_crs','EPSG','6145','EPSG','3636','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6146','ETRS89 / NTM zone 6 + NN54 height',NULL,'EPSG','5106','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4466','compound_crs','EPSG','6146','EPSG','3639','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6147','ETRS89 / NTM zone 7 + NN54 height',NULL,'EPSG','5107','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4467','compound_crs','EPSG','6147','EPSG','3647','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6148','ETRS89 / NTM zone 8 + NN54 height',NULL,'EPSG','5108','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4468','compound_crs','EPSG','6148','EPSG','3648','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6149','ETRS89 / NTM zone 9 + NN54 height',NULL,'EPSG','5109','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4469','compound_crs','EPSG','6149','EPSG','3649','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6150','ETRS89 / NTM zone 10 + NN54 height',NULL,'EPSG','5110','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4470','compound_crs','EPSG','6150','EPSG','3650','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6151','ETRS89 / NTM zone 11 + NN54 height',NULL,'EPSG','5111','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4471','compound_crs','EPSG','6151','EPSG','3651','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6152','ETRS89 / NTM zone 12 + NN54 height',NULL,'EPSG','5112','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4472','compound_crs','EPSG','6152','EPSG','3653','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6153','ETRS89 / NTM zone 13 + NN54 height',NULL,'EPSG','5113','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4473','compound_crs','EPSG','6153','EPSG','3654','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6154','ETRS89 / NTM zone 14 + NN54 height',NULL,'EPSG','5114','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4474','compound_crs','EPSG','6154','EPSG','3655','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6155','ETRS89 / NTM zone 15 + NN54 height',NULL,'EPSG','5115','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4475','compound_crs','EPSG','6155','EPSG','3656','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6156','ETRS89 / NTM zone 16 + NN54 height',NULL,'EPSG','5116','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4476','compound_crs','EPSG','6156','EPSG','3657','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6157','ETRS89 / NTM zone 17 + NN54 height',NULL,'EPSG','5117','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4477','compound_crs','EPSG','6157','EPSG','3658','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6158','ETRS89 / NTM zone 18 + NN54 height',NULL,'EPSG','5118','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4478','compound_crs','EPSG','6158','EPSG','3660','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6159','ETRS89 / NTM zone 19 + NN54 height',NULL,'EPSG','5119','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4479','compound_crs','EPSG','6159','EPSG','3661','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6160','ETRS89 / NTM zone 20 + NN54 height',NULL,'EPSG','5120','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4480','compound_crs','EPSG','6160','EPSG','3662','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6161','ETRS89 / NTM zone 21 + NN54 height',NULL,'EPSG','5121','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4481','compound_crs','EPSG','6161','EPSG','3663','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6162','ETRS89 / NTM zone 22 + NN54 height',NULL,'EPSG','5122','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4482','compound_crs','EPSG','6162','EPSG','3665','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6163','ETRS89 / NTM zone 23 + NN54 height',NULL,'EPSG','5123','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4483','compound_crs','EPSG','6163','EPSG','3667','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6164','ETRS89 / NTM zone 24 + NN54 height',NULL,'EPSG','5124','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4484','compound_crs','EPSG','6164','EPSG','3668','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6165','ETRS89 / NTM zone 25 + NN54 height',NULL,'EPSG','5125','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4485','compound_crs','EPSG','6165','EPSG','3669','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6166','ETRS89 / NTM zone 26 + NN54 height',NULL,'EPSG','5126','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4486','compound_crs','EPSG','6166','EPSG','3671','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6167','ETRS89 / NTM zone 27 + NN54 height',NULL,'EPSG','5127','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4487','compound_crs','EPSG','6167','EPSG','3672','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6168','ETRS89 / NTM zone 28 + NN54 height',NULL,'EPSG','5128','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4488','compound_crs','EPSG','6168','EPSG','3673','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6169','ETRS89 / NTM zone 29 + NN54 height',NULL,'EPSG','5129','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4489','compound_crs','EPSG','6169','EPSG','3674','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6170','ETRS89 / NTM zone 30 + NN54 height',NULL,'EPSG','5130','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4490','compound_crs','EPSG','6170','EPSG','3676','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','6171','ETRS89 / UTM zone 31N + NN54 height',NULL,'EPSG','25831','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4491','compound_crs','EPSG','6171','EPSG','3636','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','6172','ETRS89 / UTM zone 32N + NN54 height',NULL,'EPSG','25832','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4492','compound_crs','EPSG','6172','EPSG','4066','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','6173','ETRS89 / UTM zone 33N + NN54 height',NULL,'EPSG','25833','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4493','compound_crs','EPSG','6173','EPSG','4067','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','6174','ETRS89 / UTM zone 34N + NN54 height',NULL,'EPSG','25834','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4494','compound_crs','EPSG','6174','EPSG','4068','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','6175','ETRS89 / UTM zone 35N + NN54 height',NULL,'EPSG','25835','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4495','compound_crs','EPSG','6175','EPSG','4069','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','6176','ETRS89 / UTM zone 36N + NN54 height',NULL,'EPSG','25836','EPSG','5776',0); INSERT INTO "usage" VALUES('EPSG','4496','compound_crs','EPSG','6176','EPSG','3676','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','6190','BD72 / Belgian Lambert 72 + Ostend height',NULL,'EPSG','31370','EPSG','5710',0); INSERT INTO "usage" VALUES('EPSG','4507','compound_crs','EPSG','6190','EPSG','1347','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6349','NAD83(2011) + NAVD88 height',NULL,'EPSG','6318','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','4583','compound_crs','EPSG','6349','EPSG','3664','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6649','NAD83(CSRS) + CGVD2013(CGG2013) height',NULL,'EPSG','4617','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4868','compound_crs','EPSG','6649','EPSG','1061','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6650','NAD83(CSRS) / UTM zone 7N + CGVD2013 height',NULL,'EPSG','3154','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4869','compound_crs','EPSG','6650','EPSG','3409','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6651','NAD83(CSRS) / UTM zone 8N + CGVD2013 height',NULL,'EPSG','3155','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4870','compound_crs','EPSG','6651','EPSG','3410','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6652','NAD83(CSRS) / UTM zone 9N + CGVD2013 height',NULL,'EPSG','3156','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4871','compound_crs','EPSG','6652','EPSG','3411','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6653','NAD83(CSRS) / UTM zone 10N + CGVD2013 height',NULL,'EPSG','3157','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4872','compound_crs','EPSG','6653','EPSG','3412','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6654','NAD83(CSRS) / UTM zone 11N + CGVD2013 height',NULL,'EPSG','2955','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4873','compound_crs','EPSG','6654','EPSG','3528','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6655','NAD83(CSRS) / UTM zone 12N + CGVD2013 height',NULL,'EPSG','2956','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4874','compound_crs','EPSG','6655','EPSG','3527','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6656','NAD83(CSRS) / UTM zone 13N + CGVD2013 height',NULL,'EPSG','2957','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4875','compound_crs','EPSG','6656','EPSG','3526','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6657','NAD83(CSRS) / UTM zone 14N + CGVD2013 height',NULL,'EPSG','3158','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4876','compound_crs','EPSG','6657','EPSG','3413','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6658','NAD83(CSRS) / UTM zone 15N + CGVD2013 height',NULL,'EPSG','3159','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4877','compound_crs','EPSG','6658','EPSG','3414','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6659','NAD83(CSRS) / UTM zone 16N + CGVD2013 height',NULL,'EPSG','3160','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4878','compound_crs','EPSG','6659','EPSG','3415','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6660','NAD83(CSRS) / UTM zone 17N + CGVD2013 height',NULL,'EPSG','2958','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4879','compound_crs','EPSG','6660','EPSG','3416','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6661','NAD83(CSRS) / UTM zone 18N + CGVD2013 height',NULL,'EPSG','2959','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4880','compound_crs','EPSG','6661','EPSG','3417','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6662','NAD83(CSRS) / UTM zone 19N + CGVD2013 height',NULL,'EPSG','2960','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4881','compound_crs','EPSG','6662','EPSG','3524','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6663','NAD83(CSRS) / UTM zone 20N + CGVD2013 height',NULL,'EPSG','2961','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4882','compound_crs','EPSG','6663','EPSG','3525','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6664','NAD83(CSRS) / UTM zone 21N + CGVD2013 height',NULL,'EPSG','2962','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4883','compound_crs','EPSG','6664','EPSG','2151','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6665','NAD83(CSRS) / UTM zone 22N + CGVD2013 height',NULL,'EPSG','3761','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','4884','compound_crs','EPSG','6665','EPSG','2152','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6696','JGD2000 + JGD2000 (vertical) height',NULL,'EPSG','4612','EPSG','6694',0); INSERT INTO "usage" VALUES('EPSG','4915','compound_crs','EPSG','6696','EPSG','3263','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6697','JGD2011 + JGD2011 (vertical) height',NULL,'EPSG','6668','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','4916','compound_crs','EPSG','6697','EPSG','3263','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6700','Tokyo + JSLD72 height',NULL,'EPSG','4301','EPSG','6693',0); INSERT INTO "usage" VALUES('EPSG','4917','compound_crs','EPSG','6700','EPSG','4168','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','6871','WGS 84 / Pseudo-Mercator + EGM2008 geoid height',NULL,'EPSG','3857','EPSG','3855',1); INSERT INTO "usage" VALUES('EPSG','5023','compound_crs','EPSG','6871','EPSG','1262','EPSG','1229'); INSERT INTO "compound_crs" VALUES('EPSG','6893','WGS 84 / World Mercator + EGM2008 height',NULL,'EPSG','3395','EPSG','3855',0); INSERT INTO "usage" VALUES('EPSG','5036','compound_crs','EPSG','6893','EPSG','1262','EPSG','1229'); INSERT INTO "compound_crs" VALUES('EPSG','6917','SVY21 + SHD height',NULL,'EPSG','4757','EPSG','6916',0); INSERT INTO "usage" VALUES('EPSG','5040','compound_crs','EPSG','6917','EPSG','1210','EPSG','1144'); INSERT INTO "compound_crs" VALUES('EPSG','6927','SVY21 / Singapore TM + SHD height',NULL,'EPSG','3414','EPSG','6916',0); INSERT INTO "usage" VALUES('EPSG','5045','compound_crs','EPSG','6927','EPSG','1210','EPSG','1144'); INSERT INTO "compound_crs" VALUES('EPSG','7400','NTF (Paris) + NGF-IGN69 height',NULL,'EPSG','4807','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','5265','compound_crs','EPSG','7400','EPSG','1326','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7401','NTF (Paris) / France II + NGF Lallemand',NULL,'EPSG','27582','EPSG','5719',1); INSERT INTO "usage" VALUES('EPSG','5266','compound_crs','EPSG','7401','EPSG','1326','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7402','NTF (Paris) / France II + NGF IGN69',NULL,'EPSG','27582','EPSG','5720',1); INSERT INTO "usage" VALUES('EPSG','5267','compound_crs','EPSG','7402','EPSG','1326','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7403','NTF (Paris) / France III + NGF IGN69',NULL,'EPSG','27583','EPSG','5720',1); INSERT INTO "usage" VALUES('EPSG','5268','compound_crs','EPSG','7403','EPSG','1733','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7404','RT90 + RH70 height',NULL,'EPSG','4124','EPSG','5718',0); INSERT INTO "usage" VALUES('EPSG','5269','compound_crs','EPSG','7404','EPSG','3313','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7405','OSGB36 / British National Grid + ODN height',NULL,'EPSG','27700','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','5270','compound_crs','EPSG','7405','EPSG','2792','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7406','NAD27 + NGVD29 height (ftUS)',NULL,'EPSG','4267','EPSG','5702',0); INSERT INTO "usage" VALUES('EPSG','5271','compound_crs','EPSG','7406','EPSG','1323','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7407','NAD27 / Texas North + NGVD29 height (ftUS)',NULL,'EPSG','32037','EPSG','5702',0); INSERT INTO "usage" VALUES('EPSG','5272','compound_crs','EPSG','7407','EPSG','2253','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7408','RD/NAP',NULL,'EPSG','4289','EPSG','5709',1); INSERT INTO "usage" VALUES('EPSG','5273','compound_crs','EPSG','7408','EPSG','1275','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7409','ETRS89 + EVRF2000 height',NULL,'EPSG','4258','EPSG','5730',0); INSERT INTO "usage" VALUES('EPSG','5274','compound_crs','EPSG','7409','EPSG','1299','EPSG','1161'); INSERT INTO "compound_crs" VALUES('EPSG','7410','PSHD93',NULL,'EPSG','4134','EPSG','5724',0); INSERT INTO "usage" VALUES('EPSG','5275','compound_crs','EPSG','7410','EPSG','3288','EPSG','1136'); INSERT INTO "compound_crs" VALUES('EPSG','7411','NTF (Paris) / Lambert zone II + NGF Lallemand height',NULL,'EPSG','27572','EPSG','5719',0); INSERT INTO "usage" VALUES('EPSG','5276','compound_crs','EPSG','7411','EPSG','1326','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7412','NTF (Paris) / Lambert zone II + NGF IGN69',NULL,'EPSG','27572','EPSG','5719',1); INSERT INTO "usage" VALUES('EPSG','5277','compound_crs','EPSG','7412','EPSG','1326','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7413','NTF (Paris) / Lambert zone III + NGF IGN69',NULL,'EPSG','27573','EPSG','5719',1); INSERT INTO "usage" VALUES('EPSG','5278','compound_crs','EPSG','7413','EPSG','1733','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7414','Tokyo + JSLD69 height',NULL,'EPSG','4301','EPSG','5723',0); INSERT INTO "usage" VALUES('EPSG','5279','compound_crs','EPSG','7414','EPSG','4166','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7415','Amersfoort / RD New + NAP height',NULL,'EPSG','28992','EPSG','5709',0); INSERT INTO "usage" VALUES('EPSG','5280','compound_crs','EPSG','7415','EPSG','1275','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7416','ETRS89 / UTM zone 32N + DVR90 height',NULL,'EPSG','25832','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','5281','compound_crs','EPSG','7416','EPSG','3471','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7417','ETRS89 / UTM zone 33N + DVR90 height',NULL,'EPSG','25833','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','5282','compound_crs','EPSG','7417','EPSG','3472','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7418','ETRS89 / Kp2000 Jutland + DVR90 height',NULL,'EPSG','2196','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','5283','compound_crs','EPSG','7418','EPSG','2531','EPSG','1209'); INSERT INTO "compound_crs" VALUES('EPSG','7419','ETRS89 / Kp2000 Zealand + DVR90 height',NULL,'EPSG','2197','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','5284','compound_crs','EPSG','7419','EPSG','2532','EPSG','1209'); INSERT INTO "compound_crs" VALUES('EPSG','7420','ETRS89 / Kp2000 Bornholm + DVR90 height',NULL,'EPSG','2198','EPSG','5799',0); INSERT INTO "usage" VALUES('EPSG','5285','compound_crs','EPSG','7420','EPSG','2533','EPSG','1209'); INSERT INTO "compound_crs" VALUES('EPSG','7421','NTF (Paris) / Lambert zone II + NGF-IGN69 height',NULL,'EPSG','27572','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','5286','compound_crs','EPSG','7421','EPSG','1326','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7422','NTF (Paris) / Lambert zone III + NGF-IGN69 height',NULL,'EPSG','27573','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','5287','compound_crs','EPSG','7422','EPSG','1733','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','7423','ETRS89 + EVRF2007 height',NULL,'EPSG','4258','EPSG','5621',0); INSERT INTO "usage" VALUES('EPSG','5288','compound_crs','EPSG','7423','EPSG','3594','EPSG','1161'); INSERT INTO "compound_crs" VALUES('EPSG','7954','Astro DOS 71 / UTM zone 30S + Jamestown 1971 height',NULL,'EPSG','7878','EPSG','7888',0); INSERT INTO "usage" VALUES('EPSG','5565','compound_crs','EPSG','7954','EPSG','3183','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','7955','St. Helena Tritan / UTM zone 30S + Tritan 2011 height',NULL,'EPSG','7883','EPSG','7889',0); INSERT INTO "usage" VALUES('EPSG','5566','compound_crs','EPSG','7955','EPSG','3183','EPSG','1146'); INSERT INTO "compound_crs" VALUES('EPSG','7956','SHMG2015 + SHVD2015 height',NULL,'EPSG','7887','EPSG','7890',0); INSERT INTO "usage" VALUES('EPSG','5567','compound_crs','EPSG','7956','EPSG','3183','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','8349','GR96 + GVR2000 height',NULL,'EPSG','4747','EPSG','8266',0); INSERT INTO "usage" VALUES('EPSG','5798','compound_crs','EPSG','8349','EPSG','4461','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','8350','GR96 + GVR2016 height',NULL,'EPSG','4747','EPSG','8267',0); INSERT INTO "usage" VALUES('EPSG','5799','compound_crs','EPSG','8350','EPSG','4454','EPSG','1153'); INSERT INTO "compound_crs" VALUES('EPSG','8360','ETRS89 + Baltic 1957 height',NULL,'EPSG','4258','EPSG','8357',0); INSERT INTO "usage" VALUES('EPSG','5805','compound_crs','EPSG','8360','EPSG','1306','EPSG','1203'); INSERT INTO "compound_crs" VALUES('EPSG','8370','ETRS89 / Belgian Lambert 2008 + Ostend height',NULL,'EPSG','3812','EPSG','5710',0); INSERT INTO "usage" VALUES('EPSG','5806','compound_crs','EPSG','8370','EPSG','1347','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8700','NAD83 / Arizona East (ft) + NAVD88 height (ft)',NULL,'EPSG','2222','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5879','compound_crs','EPSG','8700','EPSG','2167','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8701','NAD83 / Arizona Central (ft) + NAVD88 height (ft)',NULL,'EPSG','2223','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5880','compound_crs','EPSG','8701','EPSG','2166','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8702','NAD83 / Arizona West (ft) + NAVD88 height (ft)',NULL,'EPSG','2224','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5881','compound_crs','EPSG','8702','EPSG','2168','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8703','NAD83 / Michigan North (ft) + NAVD88 height (ft)',NULL,'EPSG','2251','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5882','compound_crs','EPSG','8703','EPSG','1723','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8704','NAD83 / Michigan Central (ft) + NAVD88 height (ft)',NULL,'EPSG','2252','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5883','compound_crs','EPSG','8704','EPSG','1724','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8705','NAD83 / Michigan South (ft) + NAVD88 height (ft)',NULL,'EPSG','2253','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5884','compound_crs','EPSG','8705','EPSG','1725','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8706','NAD83 / Montana (ft) + NAVD88 height (ft)',NULL,'EPSG','2256','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5885','compound_crs','EPSG','8706','EPSG','1395','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8707','NAD83 / North Dakota North (ft) + NAVD88 height (ft)',NULL,'EPSG','2265','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5886','compound_crs','EPSG','8707','EPSG','2237','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8708','NAD83 / North Dakota South (ft) + NAVD88 height (ft)',NULL,'EPSG','2266','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5887','compound_crs','EPSG','8708','EPSG','2238','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8709','NAD83 / Oregon North (ft) + NAVD88 height (ft)',NULL,'EPSG','2269','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5888','compound_crs','EPSG','8709','EPSG','2243','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8710','NAD83 / Oregon South (ft) + NAVD88 height (ft)',NULL,'EPSG','2270','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5889','compound_crs','EPSG','8710','EPSG','2244','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8711','NAD83 / South Carolina (ft) + NAVD88 height (ft)',NULL,'EPSG','2273','EPSG','8228',0); INSERT INTO "usage" VALUES('EPSG','5890','compound_crs','EPSG','8711','EPSG','1409','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8712','NAD83 / Arkansas North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3433','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5891','compound_crs','EPSG','8712','EPSG','2169','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8713','NAD83 / Arkansas South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3434','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5892','compound_crs','EPSG','8713','EPSG','2170','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8714','NAD83 / California zone 1 (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2225','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5893','compound_crs','EPSG','8714','EPSG','2175','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8715','NAD83 / California zone 2 (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2226','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5894','compound_crs','EPSG','8715','EPSG','2176','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8716','NAD83 / California zone 3 (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2227','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5895','compound_crs','EPSG','8716','EPSG','2177','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8717','NAD83 / California zone 4 (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2228','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5896','compound_crs','EPSG','8717','EPSG','2178','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8718','NAD83 / California zone 5 (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2229','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5897','compound_crs','EPSG','8718','EPSG','2182','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8719','NAD83 / California zone 6 (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2230','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5898','compound_crs','EPSG','8719','EPSG','2180','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8720','NAD83 / Colorado North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2231','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5899','compound_crs','EPSG','8720','EPSG','2184','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8721','NAD83 / Colorado Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2232','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5900','compound_crs','EPSG','8721','EPSG','2183','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8722','NAD83 / Colorado South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2233','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5901','compound_crs','EPSG','8722','EPSG','2185','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8723','NAD83 / Connecticut (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2234','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5902','compound_crs','EPSG','8723','EPSG','1377','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8724','NAD83 / Delaware (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2235','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5903','compound_crs','EPSG','8724','EPSG','1378','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8725','NAD83 / Florida North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2238','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5904','compound_crs','EPSG','8725','EPSG','2187','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8726','NAD83 / Florida East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2236','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5905','compound_crs','EPSG','8726','EPSG','2186','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8727','NAD83 / Florida West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2237','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5906','compound_crs','EPSG','8727','EPSG','2188','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8728','NAD83 / Georgia East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2239','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5907','compound_crs','EPSG','8728','EPSG','2189','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8729','NAD83 / Georgia West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2240','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5908','compound_crs','EPSG','8729','EPSG','2190','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8730','NAD83 / Idaho East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2241','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5909','compound_crs','EPSG','8730','EPSG','2192','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8731','NAD83 / Idaho Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2242','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5910','compound_crs','EPSG','8731','EPSG','2191','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8732','NAD83 / Idaho West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2243','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5911','compound_crs','EPSG','8732','EPSG','2193','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8733','NAD83 / Illinois East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3435','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5912','compound_crs','EPSG','8733','EPSG','2194','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8734','NAD83 / Illinois West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3436','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5913','compound_crs','EPSG','8734','EPSG','2195','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8735','NAD83 / Indiana East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2965','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5914','compound_crs','EPSG','8735','EPSG','2196','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8736','NAD83 / Indiana West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2966','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5915','compound_crs','EPSG','8736','EPSG','2197','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8737','NAD83 / Iowa North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3417','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5916','compound_crs','EPSG','8737','EPSG','2198','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8738','NAD83 / Iowa South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3418','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5917','compound_crs','EPSG','8738','EPSG','2199','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8739','NAD83 / Kansas North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3419','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5918','compound_crs','EPSG','8739','EPSG','2200','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8740','NAD83 / Kansas South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3420','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5919','compound_crs','EPSG','8740','EPSG','2201','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8741','NAD83 / Kentucky North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2246','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5920','compound_crs','EPSG','8741','EPSG','2202','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8742','NAD83 / Kentucky South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2247','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5921','compound_crs','EPSG','8742','EPSG','2203','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8743','NAD83 / Louisiana North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3451','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5922','compound_crs','EPSG','8743','EPSG','2204','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8744','NAD83 / Louisiana South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3452','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5923','compound_crs','EPSG','8744','EPSG','2529','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8745','NAD83 / Maine East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26847','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5924','compound_crs','EPSG','8745','EPSG','2206','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8746','NAD83 / Maine West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26848','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5925','compound_crs','EPSG','8746','EPSG','2207','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8747','NAD83 / Maryland (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2248','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5926','compound_crs','EPSG','8747','EPSG','1389','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8748','NAD83 / Massachusetts Mainland (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2249','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5927','compound_crs','EPSG','8748','EPSG','2209','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8749','NAD83 / Massachusetts Island (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2250','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5928','compound_crs','EPSG','8749','EPSG','2208','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8750','NAD83 / Minnesota North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26849','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5929','compound_crs','EPSG','8750','EPSG','2214','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8751','NAD83 / Minnesota Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26850','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5930','compound_crs','EPSG','8751','EPSG','2213','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8752','NAD83 / Minnesota South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26851','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5931','compound_crs','EPSG','8752','EPSG','2215','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8753','NAD83 / Mississippi East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2254','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5932','compound_crs','EPSG','8753','EPSG','2216','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8754','NAD83 / Mississippi West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2255','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5933','compound_crs','EPSG','8754','EPSG','2217','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8755','NAD83 / Nebraska (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26852','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5934','compound_crs','EPSG','8755','EPSG','1396','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8756','NAD83 / Nevada East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3421','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5935','compound_crs','EPSG','8756','EPSG','2224','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8757','NAD83 / Nevada Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3422','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5936','compound_crs','EPSG','8757','EPSG','2223','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8758','NAD83 / Nevada West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3423','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5937','compound_crs','EPSG','8758','EPSG','2225','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8759','NAD83 / New Hampshire (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3437','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5938','compound_crs','EPSG','8759','EPSG','1398','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8760','NAD83 / New Jersey (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3424','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5939','compound_crs','EPSG','8760','EPSG','1399','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8761','NAD83 / New Mexico East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2257','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5940','compound_crs','EPSG','8761','EPSG','2228','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8762','NAD83 / New Mexico Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2258','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5941','compound_crs','EPSG','8762','EPSG','2231','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8763','NAD83 / New Mexico West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2259','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5942','compound_crs','EPSG','8763','EPSG','2232','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8764','NAD83 / New York East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2260','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5943','compound_crs','EPSG','8764','EPSG','2234','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8765','NAD83 / New York Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2261','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5944','compound_crs','EPSG','8765','EPSG','2233','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8766','NAD83 / New York West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2262','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5945','compound_crs','EPSG','8766','EPSG','2236','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8767','NAD83 / New York Long Island (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2263','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5946','compound_crs','EPSG','8767','EPSG','2235','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8768','NAD83 / North Carolina (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2264','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5947','compound_crs','EPSG','8768','EPSG','1402','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8769','NAD83 / Ohio North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3734','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5948','compound_crs','EPSG','8769','EPSG','2239','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8770','NAD83 / Ohio South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3735','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5949','compound_crs','EPSG','8770','EPSG','2240','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8771','NAD83 / Oklahoma North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2267','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5950','compound_crs','EPSG','8771','EPSG','2241','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8772','NAD83 / Oklahoma South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2268','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5951','compound_crs','EPSG','8772','EPSG','2242','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8773','NAD83 / Pennsylvania North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2271','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5952','compound_crs','EPSG','8773','EPSG','2245','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8774','NAD83 / Pennsylvania South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2272','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5953','compound_crs','EPSG','8774','EPSG','2246','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8775','NAD83 / Rhode Island (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3438','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5954','compound_crs','EPSG','8775','EPSG','1408','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8776','NAD83 / South Dakota North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','4457','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5955','compound_crs','EPSG','8776','EPSG','2249','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8777','NAD83 / South Dakota South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3455','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5956','compound_crs','EPSG','8777','EPSG','2250','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8778','NAD83 / Tennessee (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2274','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5957','compound_crs','EPSG','8778','EPSG','1411','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8779','NAD83 / Texas North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2275','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5958','compound_crs','EPSG','8779','EPSG','2253','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8780','NAD83 / Texas North Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2276','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5959','compound_crs','EPSG','8780','EPSG','2254','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8781','NAD83 / Texas Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2277','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5960','compound_crs','EPSG','8781','EPSG','2252','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8782','NAD83 / Texas South Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2278','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5961','compound_crs','EPSG','8782','EPSG','2527','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8783','NAD83 / Texas South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2279','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5962','compound_crs','EPSG','8783','EPSG','2528','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8784','NAD83 / Utah North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3560','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5963','compound_crs','EPSG','8784','EPSG','2258','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8785','NAD83 / Utah Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3566','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5964','compound_crs','EPSG','8785','EPSG','2257','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8786','NAD83 / Utah South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3567','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5965','compound_crs','EPSG','8786','EPSG','2259','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8787','NAD83 / Vermont (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','5646','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5966','compound_crs','EPSG','8787','EPSG','1414','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8788','NAD83 / Virginia North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2283','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5967','compound_crs','EPSG','8788','EPSG','2260','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8789','NAD83 / Virginia South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2284','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5968','compound_crs','EPSG','8789','EPSG','2261','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8790','NAD83 / Washington North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2285','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5969','compound_crs','EPSG','8790','EPSG','2273','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8791','NAD83 / Washington South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2286','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5970','compound_crs','EPSG','8791','EPSG','2274','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8792','NAD83 / West Virginia North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26853','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5971','compound_crs','EPSG','8792','EPSG','2264','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8793','NAD83 / West Virginia South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','26854','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5972','compound_crs','EPSG','8793','EPSG','2265','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8794','NAD83 / Wisconsin North (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2287','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5973','compound_crs','EPSG','8794','EPSG','2267','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8795','NAD83 / Wisconsin Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2288','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5974','compound_crs','EPSG','8795','EPSG','2266','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8796','NAD83 / Wisconsin South (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','2289','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5975','compound_crs','EPSG','8796','EPSG','2268','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8797','NAD83 / Wyoming East (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3736','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5976','compound_crs','EPSG','8797','EPSG','2269','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8798','NAD83 / Wyoming East Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3737','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5977','compound_crs','EPSG','8798','EPSG','2270','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8799','NAD83 / Wyoming West Central (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3738','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5978','compound_crs','EPSG','8799','EPSG','2272','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8800','NAD83 / Wyoming West (ftUS) + NAVD88 height (ftUS)',NULL,'EPSG','3739','EPSG','6360',0); INSERT INTO "usage" VALUES('EPSG','5979','compound_crs','EPSG','8800','EPSG','2271','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8801','NAD83 / Alabama East + NAVD88 height',NULL,'EPSG','26929','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5980','compound_crs','EPSG','8801','EPSG','2154','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8802','NAD83 / Alabama West + NAVD88 height',NULL,'EPSG','26930','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5981','compound_crs','EPSG','8802','EPSG','2155','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8803','NAD83 / Alaska zone 1 + NAVD88 height',NULL,'EPSG','26931','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5982','compound_crs','EPSG','8803','EPSG','2156','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8804','NAD83 / Alaska zone 2 + NAVD88 height',NULL,'EPSG','26932','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5983','compound_crs','EPSG','8804','EPSG','2158','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8805','NAD83 / Alaska zone 3 + NAVD88 height',NULL,'EPSG','26933','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5984','compound_crs','EPSG','8805','EPSG','2159','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8806','NAD83 / Alaska zone 4 + NAVD88 height',NULL,'EPSG','26934','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5985','compound_crs','EPSG','8806','EPSG','2160','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8807','NAD83 / Alaska zone 5 + NAVD88 height',NULL,'EPSG','26935','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5986','compound_crs','EPSG','8807','EPSG','2161','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8808','NAD83 / Alaska zone 6 + NAVD88 height',NULL,'EPSG','26936','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5987','compound_crs','EPSG','8808','EPSG','2162','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8809','NAD83 / Alaska zone 7 + NAVD88 height',NULL,'EPSG','26937','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5988','compound_crs','EPSG','8809','EPSG','2163','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8810','NAD83 / Alaska zone 8 + NAVD88 height',NULL,'EPSG','26938','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5989','compound_crs','EPSG','8810','EPSG','2164','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8811','NAD83 / Alaska zone 9 + NAVD88 height',NULL,'EPSG','26939','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5990','compound_crs','EPSG','8811','EPSG','2165','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8812','NAD83 / Alaska zone 10 + NAVD88 height',NULL,'EPSG','26940','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5991','compound_crs','EPSG','8812','EPSG','2157','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8813','NAD83 / Missouri East + NAVD88 height',NULL,'EPSG','26996','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5992','compound_crs','EPSG','8813','EPSG','2219','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8814','NAD83 / Missouri Central + NAVD88 height',NULL,'EPSG','26997','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5993','compound_crs','EPSG','8814','EPSG','2218','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8815','NAD83 / Missouri West + NAVD88 height',NULL,'EPSG','26998','EPSG','5703',0); INSERT INTO "usage" VALUES('EPSG','5994','compound_crs','EPSG','8815','EPSG','2220','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','8912','CR-SIRGAS / CRTM05 + DACR52 height',NULL,'EPSG','8908','EPSG','8911',0); INSERT INTO "usage" VALUES('EPSG','6028','compound_crs','EPSG','8912','EPSG','3232','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','9286','ETRS89 + NAP height',NULL,'EPSG','4258','EPSG','5709',0); INSERT INTO "usage" VALUES('EPSG','14121','compound_crs','EPSG','9286','EPSG','1172','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9289','ETRS89 + LAT NL depth',NULL,'EPSG','4258','EPSG','9287',0); INSERT INTO "usage" VALUES('EPSG','14124','compound_crs','EPSG','9289','EPSG','4742','EPSG','1198'); INSERT INTO "compound_crs" VALUES('EPSG','9290','ETRS89 + MSL NL depth',NULL,'EPSG','4258','EPSG','9288',0); INSERT INTO "usage" VALUES('EPSG','14125','compound_crs','EPSG','9290','EPSG','4742','EPSG','1265'); INSERT INTO "compound_crs" VALUES('EPSG','9306','HS2 Survey Grid + HS2-VRF height',NULL,'EPSG','9300','EPSG','9303',0); INSERT INTO "usage" VALUES('EPSG','14050','compound_crs','EPSG','9306','EPSG','4582','EPSG','1260'); INSERT INTO "compound_crs" VALUES('EPSG','9368','TPEN11 Grid + ODN height',NULL,'EPSG','9367','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','13976','compound_crs','EPSG','9368','EPSG','4583','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9374','MML07 Grid + ODN height',NULL,'EPSG','9373','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','13997','compound_crs','EPSG','9374','EPSG','4588','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9388','AbInvA96_2020 Grid + ODN height',NULL,'EPSG','9387','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','14030','compound_crs','EPSG','9388','EPSG','4589','EPSG','1196'); INSERT INTO "compound_crs" VALUES('EPSG','9422','ETRS89 + EVRF2019 height',NULL,'EPSG','4258','EPSG','9389',0); INSERT INTO "usage" VALUES('EPSG','14082','compound_crs','EPSG','9422','EPSG','4609','EPSG','1261'); INSERT INTO "compound_crs" VALUES('EPSG','9423','ETRS89 + EVRF2019 mean-tide height',NULL,'EPSG','4258','EPSG','9390',0); INSERT INTO "usage" VALUES('EPSG','14083','compound_crs','EPSG','9423','EPSG','4609','EPSG','1262'); INSERT INTO "compound_crs" VALUES('EPSG','9424','ETRS89 + ODN height',NULL,'EPSG','4258','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','14052','compound_crs','EPSG','9424','EPSG','2792','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9425','ETRS89 + ODN (Offshore) height',NULL,'EPSG','4258','EPSG','7707',0); INSERT INTO "usage" VALUES('EPSG','14053','compound_crs','EPSG','9425','EPSG','4391','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9426','ETRS89 + ODN Orkney height',NULL,'EPSG','4258','EPSG','5740',0); INSERT INTO "usage" VALUES('EPSG','14054','compound_crs','EPSG','9426','EPSG','2793','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9427','ETRS89 + Lerwick height',NULL,'EPSG','4258','EPSG','5742',0); INSERT INTO "usage" VALUES('EPSG','14055','compound_crs','EPSG','9427','EPSG','2795','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9428','ETRS89 + Stornoway height',NULL,'EPSG','4258','EPSG','5746',0); INSERT INTO "usage" VALUES('EPSG','14056','compound_crs','EPSG','9428','EPSG','2799','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9429','ETRS89 + Douglas height',NULL,'EPSG','4258','EPSG','5750',0); INSERT INTO "usage" VALUES('EPSG','14057','compound_crs','EPSG','9429','EPSG','2803','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9430','ETRS89 + St. Marys height',NULL,'EPSG','4258','EPSG','5749',0); INSERT INTO "usage" VALUES('EPSG','14058','compound_crs','EPSG','9430','EPSG','2802','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9449','ETRS89 + Malin Head height',NULL,'EPSG','4258','EPSG','5731',0); INSERT INTO "usage" VALUES('EPSG','14084','compound_crs','EPSG','9449','EPSG','1305','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9450','ETRS89 + Belfast height',NULL,'EPSG','4258','EPSG','5732',0); INSERT INTO "usage" VALUES('EPSG','14085','compound_crs','EPSG','9450','EPSG','2530','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9452','ETRS89 + BI height',NULL,'EPSG','4258','EPSG','9451',0); INSERT INTO "usage" VALUES('EPSG','14088','compound_crs','EPSG','9452','EPSG','4606','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9457','GBK19 Grid + ODN height',NULL,'EPSG','9456','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','14132','compound_crs','EPSG','9457','EPSG','4607','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9462','GDA2020 + AVWS height',NULL,'EPSG','7844','EPSG','9458',0); INSERT INTO "usage" VALUES('EPSG','14142','compound_crs','EPSG','9462','EPSG','4177','EPSG','1267'); INSERT INTO "compound_crs" VALUES('EPSG','9463','GDA2020 + AHD height',NULL,'EPSG','7844','EPSG','5711',0); INSERT INTO "usage" VALUES('EPSG','14143','compound_crs','EPSG','9463','EPSG','4493','EPSG','1263'); INSERT INTO "compound_crs" VALUES('EPSG','9464','GDA94 + AHD height',NULL,'EPSG','4283','EPSG','5711',0); INSERT INTO "usage" VALUES('EPSG','14144','compound_crs','EPSG','9464','EPSG','4493','EPSG','1263'); INSERT INTO "compound_crs" VALUES('EPSG','9500','ETRS89 + EVRF2000 Austria height',NULL,'EPSG','4258','EPSG','9274',0); INSERT INTO "usage" VALUES('EPSG','14431','compound_crs','EPSG','9500','EPSG','1037','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9501','MGI + EVRF2000 Austria height',NULL,'EPSG','4312','EPSG','9274',0); INSERT INTO "usage" VALUES('EPSG','14432','compound_crs','EPSG','9501','EPSG','1037','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9502','CIGD11 + CBVD61 height (ft)',NULL,'EPSG','6135','EPSG','6132',0); INSERT INTO "usage" VALUES('EPSG','14265','compound_crs','EPSG','9502','EPSG','3207','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9503','CIGD11 + GCVD54 height (ft)',NULL,'EPSG','6135','EPSG','6130',0); INSERT INTO "usage" VALUES('EPSG','14435','compound_crs','EPSG','9503','EPSG','3185','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','9504','CIGD11 + LCVD61 height (ft)',NULL,'EPSG','6135','EPSG','6131',0); INSERT INTO "usage" VALUES('EPSG','14267','compound_crs','EPSG','9504','EPSG','4121','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9505','ETRS89 + Alicante height',NULL,'EPSG','4258','EPSG','5782',0); INSERT INTO "usage" VALUES('EPSG','14270','compound_crs','EPSG','9505','EPSG','4188','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9506','ETRS89 + Ceuta 2 height',NULL,'EPSG','4258','EPSG','9402',0); INSERT INTO "usage" VALUES('EPSG','14273','compound_crs','EPSG','9506','EPSG','4590','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9507','ETRS89 + Ibiza height',NULL,'EPSG','4258','EPSG','9394',0); INSERT INTO "usage" VALUES('EPSG','14276','compound_crs','EPSG','9507','EPSG','4604','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9508','ETRS89 + Mallorca height',NULL,'EPSG','4258','EPSG','9392',0); INSERT INTO "usage" VALUES('EPSG','14440','compound_crs','EPSG','9508','EPSG','4602','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','9509','ETRS89 + Menorca height',NULL,'EPSG','4258','EPSG','9393',0); INSERT INTO "usage" VALUES('EPSG','14283','compound_crs','EPSG','9509','EPSG','4603','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9510','REGCAN95 + El Hierro height',NULL,'EPSG','4081','EPSG','9401',0); INSERT INTO "usage" VALUES('EPSG','14286','compound_crs','EPSG','9510','EPSG','4597','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9511','REGCAN95 + Fuerteventura height',NULL,'EPSG','4081','EPSG','9396',0); INSERT INTO "usage" VALUES('EPSG','14929','compound_crs','EPSG','9511','EPSG','4592','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9512','REGCAN95 + Gran Canaria height',NULL,'EPSG','4081','EPSG','9397',0); INSERT INTO "usage" VALUES('EPSG','14930','compound_crs','EPSG','9512','EPSG','4593','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9513','REGCAN95 + La Gomera height',NULL,'EPSG','4081','EPSG','9399',0); INSERT INTO "usage" VALUES('EPSG','14931','compound_crs','EPSG','9513','EPSG','4595','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9514','REGCAN95 + La Palma height',NULL,'EPSG','4081','EPSG','9400',0); INSERT INTO "usage" VALUES('EPSG','14302','compound_crs','EPSG','9514','EPSG','4596','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9515','REGCAN95 + Lanzarote height',NULL,'EPSG','4081','EPSG','9395',0); INSERT INTO "usage" VALUES('EPSG','14305','compound_crs','EPSG','9515','EPSG','4591','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9516','REGCAN95 + Tenerife height',NULL,'EPSG','4081','EPSG','9398',0); INSERT INTO "usage" VALUES('EPSG','14308','compound_crs','EPSG','9516','EPSG','4594','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9517','SHGD2015 + SHVD2015 height',NULL,'EPSG','7886','EPSG','7890',0); INSERT INTO "usage" VALUES('EPSG','14319','compound_crs','EPSG','9517','EPSG','3183','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9518','WGS 84 + EGM2008 height',NULL,'EPSG','4326','EPSG','3855',0); INSERT INTO "usage" VALUES('EPSG','14320','compound_crs','EPSG','9518','EPSG','1262','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9519','FEH2010 + FCSVR10 height',NULL,'EPSG','5593','EPSG','5597',0); INSERT INTO "usage" VALUES('EPSG','14325','compound_crs','EPSG','9519','EPSG','3890','EPSG','1139'); INSERT INTO "compound_crs" VALUES('EPSG','9520','KSA-GRF17 + KSA-VRF14 height',NULL,'EPSG','9333','EPSG','9335',0); INSERT INTO "usage" VALUES('EPSG','14336','compound_crs','EPSG','9520','EPSG','3303','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9521','POSGAR 2007 + SRVN16 height',NULL,'EPSG','5340','EPSG','9255',0); INSERT INTO "usage" VALUES('EPSG','14340','compound_crs','EPSG','9521','EPSG','4573','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9522','NAD83(2011) + PRVD02 height',NULL,'EPSG','6318','EPSG','6641',0); INSERT INTO "usage" VALUES('EPSG','14357','compound_crs','EPSG','9522','EPSG','3294','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9523','NAD83(2011) + VIVD09 height',NULL,'EPSG','6318','EPSG','6642',0); INSERT INTO "usage" VALUES('EPSG','14356','compound_crs','EPSG','9523','EPSG','3330','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9524','NAD83(MA11) + GUVD04 height',NULL,'EPSG','6325','EPSG','6644',0); INSERT INTO "usage" VALUES('EPSG','14364','compound_crs','EPSG','9524','EPSG','3255','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9525','NAD83(MA11) + NMVD03 height',NULL,'EPSG','6325','EPSG','6640',0); INSERT INTO "usage" VALUES('EPSG','14367','compound_crs','EPSG','9525','EPSG','4521','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9526','NAD83(PA11) + ASVD02 height',NULL,'EPSG','6322','EPSG','6643',0); INSERT INTO "usage" VALUES('EPSG','14462','compound_crs','EPSG','9526','EPSG','2288','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9527','NZGD2000 + NZVD2009 height',NULL,'EPSG','4167','EPSG','4440',0); INSERT INTO "usage" VALUES('EPSG','14377','compound_crs','EPSG','9527','EPSG','1175','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9528','NZGD2000 + NZVD2016 height',NULL,'EPSG','4167','EPSG','7839',0); INSERT INTO "usage" VALUES('EPSG','14380','compound_crs','EPSG','9528','EPSG','1175','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9529','SRGI2013 + INAGeoid2020 v1 height',NULL,'EPSG','9470','EPSG','9471',0); INSERT INTO "usage" VALUES('EPSG','14383','compound_crs','EPSG','9529','EPSG','1122','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9530','RGFG95 + NGG1977 height',NULL,'EPSG','4624','EPSG','5755',0); INSERT INTO "usage" VALUES('EPSG','14420','compound_crs','EPSG','9530','EPSG','3146','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9531','RGAF09 + Guadeloupe 1988 height',NULL,'EPSG','5489','EPSG','5757',0); INSERT INTO "usage" VALUES('EPSG','14936','compound_crs','EPSG','9531','EPSG','2892','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9532','RGAF09 + IGN 1988 LS height',NULL,'EPSG','5489','EPSG','5616',0); INSERT INTO "usage" VALUES('EPSG','14471','compound_crs','EPSG','9532','EPSG','2895','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9533','RGAF09 + IGN 1988 MG height',NULL,'EPSG','5489','EPSG','5617',0); INSERT INTO "usage" VALUES('EPSG','14473','compound_crs','EPSG','9533','EPSG','2894','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9534','RGAF09 + IGN 1988 SB height',NULL,'EPSG','5489','EPSG','5619',0); INSERT INTO "usage" VALUES('EPSG','14478','compound_crs','EPSG','9534','EPSG','2891','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9535','RGAF09 + IGN 1988 SM height',NULL,'EPSG','5489','EPSG','5620',0); INSERT INTO "usage" VALUES('EPSG','14481','compound_crs','EPSG','9535','EPSG','2890','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9536','RGAF09 + IGN 2008 LD height',NULL,'EPSG','5489','EPSG','9130',0); INSERT INTO "usage" VALUES('EPSG','14484','compound_crs','EPSG','9536','EPSG','2893','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9537','RGAF09 + Martinique 1987 height',NULL,'EPSG','5489','EPSG','5756',0); INSERT INTO "usage" VALUES('EPSG','14486','compound_crs','EPSG','9537','EPSG','3276','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9538','RGF93 v2 + NGF-IGN69 height',NULL,'EPSG','9777','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','14489','compound_crs','EPSG','9538','EPSG','1326','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9539','RGF93 v2 + NGF-IGN78 height',NULL,'EPSG','9777','EPSG','5721',0); INSERT INTO "usage" VALUES('EPSG','14490','compound_crs','EPSG','9539','EPSG','1327','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9540','RGNC91-93 + NGNC08 height',NULL,'EPSG','4749','EPSG','9351',0); INSERT INTO "usage" VALUES('EPSG','14495','compound_crs','EPSG','9540','EPSG','3430','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9541','RGSPM06 + Danger 1950 height',NULL,'EPSG','4463','EPSG','5792',0); INSERT INTO "usage" VALUES('EPSG','14498','compound_crs','EPSG','9541','EPSG','3299','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9542','RRAF 1991 + IGN 2008 LD height',NULL,'EPSG','4558','EPSG','9130',0); INSERT INTO "usage" VALUES('EPSG','14501','compound_crs','EPSG','9542','EPSG','2893','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9543','ITRF2005 + SA LLD height',NULL,'EPSG','8998','EPSG','9279',0); INSERT INTO "usage" VALUES('EPSG','14522','compound_crs','EPSG','9543','EPSG','3309','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9544','NAD83(CSRS)v6 + CGVD2013a(2010) height',NULL,'EPSG','8252','EPSG','9245',0); INSERT INTO "usage" VALUES('EPSG','14525','compound_crs','EPSG','9544','EPSG','1061','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9656','ETRF2000-PL + Baltic 1986 height',NULL,'EPSG','9702','EPSG','9650',0); INSERT INTO "usage" VALUES('EPSG','15108','compound_crs','EPSG','9656','EPSG','3293','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','9657','ETRF2000-PL + EVRF2007-PL height',NULL,'EPSG','9702','EPSG','9651',0); INSERT INTO "usage" VALUES('EPSG','15109','compound_crs','EPSG','9657','EPSG','3293','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','9705','WGS 84 + MSL height',NULL,'EPSG','4326','EPSG','5714',0); INSERT INTO "usage" VALUES('EPSG','15089','compound_crs','EPSG','9705','EPSG','1262','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9707','WGS 84 + EGM96 height',NULL,'EPSG','4326','EPSG','5773',0); INSERT INTO "usage" VALUES('EPSG','15091','compound_crs','EPSG','9707','EPSG','1262','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9711','NAD83(CSRS) / UTM zone 23N + CGVD2013 height',NULL,'EPSG','9709','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','15205','compound_crs','EPSG','9711','EPSG','2153','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','9714','NAD83(CSRS) / UTM zone 24N + CGVD2013 height',NULL,'EPSG','9713','EPSG','6647',0); INSERT INTO "usage" VALUES('EPSG','15197','compound_crs','EPSG','9714','EPSG','4617','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','9715','NAD83(CSRS) / UTM zone 15N + CGVD2013a(2010) height',NULL,'EPSG','3159','EPSG','9245',0); INSERT INTO "usage" VALUES('EPSG','15200','compound_crs','EPSG','9715','EPSG','3414','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','9723','ETRS89 + Genoa 1942 height',NULL,'EPSG','4258','EPSG','5214',0); INSERT INTO "usage" VALUES('EPSG','15255','compound_crs','EPSG','9723','EPSG','3736','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','9724','ETRS89 + Catania 1965 height',NULL,'EPSG','4258','EPSG','9721',0); INSERT INTO "usage" VALUES('EPSG','15324','compound_crs','EPSG','9724','EPSG','2340','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','9725','ETRS89 + Cagliari 1956 height',NULL,'EPSG','4258','EPSG','9722',0); INSERT INTO "usage" VALUES('EPSG','15257','compound_crs','EPSG','9725','EPSG','2339','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','9742','EOS21 Grid + ODN height',NULL,'EPSG','9741','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','15318','compound_crs','EPSG','9742','EPSG','4620','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9762','ECML14_NB Grid + ODN height',NULL,'EPSG','9761','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','16499','compound_crs','EPSG','9762','EPSG','4621','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9767','EWR2 Grid + ODN height',NULL,'EPSG','9766','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','16510','compound_crs','EPSG','9767','EPSG','4622','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9785','RGF93 v2b + NGF-IGN69 height',NULL,'EPSG','9782','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','16594','compound_crs','EPSG','9785','EPSG','1326','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9870','MRH21 Grid + ODN height',NULL,'EPSG','9869','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','16942','compound_crs','EPSG','9870','EPSG','4652','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9881','MOLDOR11 Grid + ODN height',NULL,'EPSG','9880','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','16985','compound_crs','EPSG','9881','EPSG','4655','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9883','ETRS89 + CD Norway depth',NULL,'EPSG','4258','EPSG','9672',0); INSERT INTO "usage" VALUES('EPSG','16974','compound_crs','EPSG','9883','EPSG','4656','EPSG','1198'); INSERT INTO "compound_crs" VALUES('EPSG','9897','LUREF / Luxembourg TM + NG95 height',NULL,'EPSG','2169','EPSG','5774',0); INSERT INTO "usage" VALUES('EPSG','17304','compound_crs','EPSG','9897','EPSG','1146','EPSG','1029'); INSERT INTO "compound_crs" VALUES('EPSG','9907','ETRS89 + Ostend height',NULL,'EPSG','4258','EPSG','5710',0); INSERT INTO "usage" VALUES('EPSG','17371','compound_crs','EPSG','9907','EPSG','1347','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9920','OSGB36 / British National Grid + BI height',NULL,'EPSG','27700','EPSG','9451',0); INSERT INTO "usage" VALUES('EPSG','17332','compound_crs','EPSG','9920','EPSG','4390','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9922','ETRS89 / ITM + BI height',NULL,'EPSG','2157','EPSG','9451',0); INSERT INTO "usage" VALUES('EPSG','17338','compound_crs','EPSG','9922','EPSG','1305','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9924','ETRS89 + DHHN2016 height',NULL,'EPSG','4258','EPSG','7837',0); INSERT INTO "usage" VALUES('EPSG','17168','compound_crs','EPSG','9924','EPSG','3339','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9928','DB_REF2003 zone 2',NULL,'EPSG','5682','EPSG','9923',0); INSERT INTO "usage" VALUES('EPSG','17297','compound_crs','EPSG','9928','EPSG','1624','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9929','DB_REF2003 zone 3',NULL,'EPSG','5683','EPSG','9923',0); INSERT INTO "usage" VALUES('EPSG','17298','compound_crs','EPSG','9929','EPSG','3993','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9930','DB_REF2003 zone 4',NULL,'EPSG','5684','EPSG','9923',0); INSERT INTO "usage" VALUES('EPSG','17299','compound_crs','EPSG','9930','EPSG','3996','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9931','DB_REF2003 zone 5',NULL,'EPSG','5685','EPSG','9923',0); INSERT INTO "usage" VALUES('EPSG','17300','compound_crs','EPSG','9931','EPSG','3998','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9932','DB_REF2016 zone 2',NULL,'EPSG','5682','EPSG','9927',0); INSERT INTO "usage" VALUES('EPSG','17293','compound_crs','EPSG','9932','EPSG','1624','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9933','DB_REF2016 zone 3',NULL,'EPSG','5683','EPSG','9927',0); INSERT INTO "usage" VALUES('EPSG','17294','compound_crs','EPSG','9933','EPSG','3993','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9934','DB_REF2016 zone 4',NULL,'EPSG','5684','EPSG','9927',0); INSERT INTO "usage" VALUES('EPSG','17295','compound_crs','EPSG','9934','EPSG','3996','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9935','DB_REF2016 zone 5',NULL,'EPSG','5685','EPSG','9927',0); INSERT INTO "usage" VALUES('EPSG','17296','compound_crs','EPSG','9935','EPSG','3998','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9944','EBBWV14 Grid + ODN height',NULL,'EPSG','9943','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','17350','compound_crs','EPSG','9944','EPSG','4661','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9948','ISN93 + ISH2004 height',NULL,'EPSG','4659','EPSG','8089',0); INSERT INTO "usage" VALUES('EPSG','17415','compound_crs','EPSG','9948','EPSG','4662','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9949','ISN2004 + ISH2004 height',NULL,'EPSG','5324','EPSG','8089',0); INSERT INTO "usage" VALUES('EPSG','17390','compound_crs','EPSG','9949','EPSG','4662','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9950','ISN2016 + ISH2004 height',NULL,'EPSG','8086','EPSG','8089',0); INSERT INTO "usage" VALUES('EPSG','17381','compound_crs','EPSG','9950','EPSG','4662','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','9951','ISN93 / Lambert 1993 + ISH2004 height',NULL,'EPSG','3057','EPSG','8089',0); INSERT INTO "usage" VALUES('EPSG','17382','compound_crs','EPSG','9951','EPSG','4662','EPSG','1056'); INSERT INTO "compound_crs" VALUES('EPSG','9952','ISN2004 / Lambert 2004 + ISH2004 height',NULL,'EPSG','5325','EPSG','8089',0); INSERT INTO "usage" VALUES('EPSG','17383','compound_crs','EPSG','9952','EPSG','4662','EPSG','1056'); INSERT INTO "compound_crs" VALUES('EPSG','9953','ISN2016 / Lambert 2016 + ISH2004 height',NULL,'EPSG','8088','EPSG','8089',0); INSERT INTO "usage" VALUES('EPSG','17384','compound_crs','EPSG','9953','EPSG','4662','EPSG','1056'); INSERT INTO "compound_crs" VALUES('EPSG','9968','HULLEE13 Grid + ODN height',NULL,'EPSG','9967','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','17430','compound_crs','EPSG','9968','EPSG','4663','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9973','SCM22 Grid + ODN height',NULL,'EPSG','9972','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','17442','compound_crs','EPSG','9973','EPSG','4665','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','9978','FNL22 Grid + ODN height',NULL,'EPSG','9977','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','17459','compound_crs','EPSG','9978','EPSG','4664','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10156','ETRS89 + MSL UK & Ireland VORF08 depth',NULL,'EPSG','4258','EPSG','10150',0); INSERT INTO "usage" VALUES('EPSG','18592','compound_crs','EPSG','10156','EPSG','4668','EPSG','1198'); INSERT INTO "compound_crs" VALUES('EPSG','10157','ETRS89 + CD UK & Ireland VORF08 depth',NULL,'EPSG','4258','EPSG','10151',0); INSERT INTO "usage" VALUES('EPSG','18586','compound_crs','EPSG','10157','EPSG','4668','EPSG','1198'); INSERT INTO "compound_crs" VALUES('EPSG','10162','JGD2011 / Japan Plane Rectangular CS I + JGD2011 (vertical) height',NULL,'EPSG','6669','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18594','compound_crs','EPSG','10162','EPSG','4670','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10163','JGD2011 / Japan Plane Rectangular CS II + JGD2011 (vertical) height',NULL,'EPSG','6670','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18595','compound_crs','EPSG','10163','EPSG','4671','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10164','JGD2011 / Japan Plane Rectangular CS III + JGD2011 (vertical) height',NULL,'EPSG','6671','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18596','compound_crs','EPSG','10164','EPSG','4672','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10165','JGD2011 / Japan Plane Rectangular CS IV + JGD2011 (vertical) height',NULL,'EPSG','6672','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18597','compound_crs','EPSG','10165','EPSG','1857','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10166','JGD2011 / Japan Plane Rectangular CS V + JGD2011 (vertical) height',NULL,'EPSG','6673','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18598','compound_crs','EPSG','10166','EPSG','1858','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10167','JGD2011 / Japan Plane Rectangular CS VI + JGD2011 (vertical) height',NULL,'EPSG','6674','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18600','compound_crs','EPSG','10167','EPSG','1859','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10168','JGD2011 / Japan Plane Rectangular CS VII + JGD2011 (vertical) height',NULL,'EPSG','6675','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18607','compound_crs','EPSG','10168','EPSG','1860','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10169','JGD2011 / Japan Plane Rectangular CS VIII + JGD2011 (vertical) height',NULL,'EPSG','6676','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18601','compound_crs','EPSG','10169','EPSG','4673','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10170','JGD2011 / Japan Plane Rectangular CS IX + JGD2011 (vertical) height',NULL,'EPSG','6677','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18602','compound_crs','EPSG','10170','EPSG','4674','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10171','JGD2011 / Japan Plane Rectangular CS X + JGD2011 (vertical) height',NULL,'EPSG','6678','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18603','compound_crs','EPSG','10171','EPSG','1863','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10172','JGD2011 / Japan Plane Rectangular CS XI + JGD2011 (vertical) height',NULL,'EPSG','6679','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18604','compound_crs','EPSG','10172','EPSG','4675','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10173','JGD2011 / Japan Plane Rectangular CS XII + JGD2011 (vertical) height',NULL,'EPSG','6680','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18605','compound_crs','EPSG','10173','EPSG','4676','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10174','JGD2011 / Japan Plane Rectangular CS XIII + JGD2011 (vertical) height',NULL,'EPSG','6681','EPSG','6695',0); INSERT INTO "usage" VALUES('EPSG','18606','compound_crs','EPSG','10174','EPSG','1866','EPSG','1092'); INSERT INTO "compound_crs" VALUES('EPSG','10184','DoPw22 Grid + ODN height',NULL,'EPSG','10183','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18669','compound_crs','EPSG','10184','EPSG','4686','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10189','ShAb07 Grid + ODN height',NULL,'EPSG','10188','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18668','compound_crs','EPSG','10189','EPSG','4687','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10195','CNH22 Grid + ODN height',NULL,'EPSG','10194','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18698','compound_crs','EPSG','10195','EPSG','4677','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10200','CWS13 Grid + ODN height',NULL,'EPSG','10199','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18707','compound_crs','EPSG','10200','EPSG','4678','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10208','DIBA15 Grid + ODN height',NULL,'EPSG','10207','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18713','compound_crs','EPSG','10208','EPSG','4681','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10213','GWPBS22 Grid + ODN height',NULL,'EPSG','10212','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18723','compound_crs','EPSG','10213','EPSG','4685','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10218','GWWAB22 Grid + ODN height',NULL,'EPSG','10217','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18778','compound_crs','EPSG','10218','EPSG','4684','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10223','GWWWA22 Grid + ODN height',NULL,'EPSG','10222','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18738','compound_crs','EPSG','10223','EPSG','4683','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10228','MALS09 Grid + ODN height',NULL,'EPSG','10227','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18745','compound_crs','EPSG','10228','EPSG','4682','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10236','OxWo08 Grid + ODN height',NULL,'EPSG','10235','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18755','compound_crs','EPSG','10236','EPSG','4680','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10241','SYC20 Grid + ODN height',NULL,'EPSG','10240','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18764','compound_crs','EPSG','10241','EPSG','4679','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10245','Slovenia 1996 + SVS2010 height',NULL,'EPSG','4765','EPSG','8690',0); INSERT INTO "usage" VALUES('EPSG','18847','compound_crs','EPSG','10245','EPSG','3307','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10246','Slovenia 1996 / Slovene National Grid + SVS2010 height',NULL,'EPSG','3794','EPSG','8690',0); INSERT INTO "usage" VALUES('EPSG','18846','compound_crs','EPSG','10246','EPSG','3307','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10276','SMITB20 Grid + ODN height',NULL,'EPSG','10275','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','19179','compound_crs','EPSG','10276','EPSG','4688','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10281','RBEPP12 Grid + ODN height',NULL,'EPSG','10280','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','19185','compound_crs','EPSG','10281','EPSG','4689','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10293','ETRS89/DREF91/2016 + DHHN2016 height',NULL,'EPSG','10284','EPSG','7837',0); INSERT INTO "usage" VALUES('EPSG','19275','compound_crs','EPSG','10293','EPSG','1103','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10318','RGNC15 (lon-lat) + NGNC08 height',NULL,'EPSG','10312','EPSG','9351',0); INSERT INTO "usage" VALUES('EPSG','19634','compound_crs','EPSG','10318','EPSG','3430','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10355','ETRS89 + Formentera height',NULL,'EPSG','4258','EPSG','10352',0); INSERT INTO "usage" VALUES('EPSG','19914','compound_crs','EPSG','10355','EPSG','4739','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10356','ETRS89 + Alboran height',NULL,'EPSG','4258','EPSG','10353',0); INSERT INTO "usage" VALUES('EPSG','19915','compound_crs','EPSG','10356','EPSG','4741','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10357','ETRS89 + Melilla height',NULL,'EPSG','4258','EPSG','10354',0); INSERT INTO "usage" VALUES('EPSG','19916','compound_crs','EPSG','10357','EPSG','4740','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10365','KGD2002 + KVD1964 height',NULL,'EPSG','4737','EPSG','5193',0); INSERT INTO "usage" VALUES('EPSG','20149','compound_crs','EPSG','10365','EPSG','3266','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10472','COV23 Grid + ODN height',NULL,'EPSG','10471','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','20315','compound_crs','EPSG','10472','EPSG','4743','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10486','ETRS89 + DVR90(2002) height',NULL,'EPSG','4258','EPSG','10483',0); INSERT INTO "usage" VALUES('EPSG','20411','compound_crs','EPSG','10486','EPSG','3237','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10487','ETRS89 + DVR90(2013) height',NULL,'EPSG','4258','EPSG','10484',0); INSERT INTO "usage" VALUES('EPSG','20415','compound_crs','EPSG','10487','EPSG','3237','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10488','ETRS89 + DVR90(2023) height',NULL,'EPSG','4258','EPSG','10485',0); INSERT INTO "usage" VALUES('EPSG','20414','compound_crs','EPSG','10488','EPSG','3237','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10497','RGF93 v2 / Lambert-93 + NGF-IGN69 height',NULL,'EPSG','9793','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','20475','compound_crs','EPSG','10497','EPSG','1326','EPSG','1178'); INSERT INTO "compound_crs" VALUES('EPSG','10498','RGF93 v2 / Lambert-93 + NGF-IGN78 height',NULL,'EPSG','9793','EPSG','5721',0); INSERT INTO "usage" VALUES('EPSG','20473','compound_crs','EPSG','10498','EPSG','1327','EPSG','1178'); INSERT INTO "compound_crs" VALUES('EPSG','10499','RGF93 v2b / Lambert-93 + NGF-IGN69 height',NULL,'EPSG','9794','EPSG','5720',0); INSERT INTO "usage" VALUES('EPSG','20472','compound_crs','EPSG','10499','EPSG','1326','EPSG','1178'); INSERT INTO "compound_crs" VALUES('EPSG','10500','RGF93 v2b / Lambert-93 + NGF-IGN78 height',NULL,'EPSG','9794','EPSG','5721',0); INSERT INTO "usage" VALUES('EPSG','20476','compound_crs','EPSG','10500','EPSG','1327','EPSG','1178'); INSERT INTO "compound_crs" VALUES('EPSG','10507','RGF93 v2b + NGF-IGN78 height',NULL,'EPSG','9782','EPSG','5721',0); INSERT INTO "usage" VALUES('EPSG','20491','compound_crs','EPSG','10507','EPSG','1327','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10545','ETRS89 + Cascais height',NULL,'EPSG','4258','EPSG','5780',0); INSERT INTO "usage" VALUES('EPSG','20908','compound_crs','EPSG','10545','EPSG','1294','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10553','ETRS89 + DKMSL(2022) depth',NULL,'EPSG','4258','EPSG','10547',0); INSERT INTO "usage" VALUES('EPSG','21026','compound_crs','EPSG','10553','EPSG','4756','EPSG','1272'); INSERT INTO "compound_crs" VALUES('EPSG','10554','ETRS89 + DKLAT(2022) depth',NULL,'EPSG','4258','EPSG','10548',0); INSERT INTO "usage" VALUES('EPSG','21027','compound_crs','EPSG','10554','EPSG','4756','EPSG','1272'); INSERT INTO "compound_crs" VALUES('EPSG','10555','ETRS89 + DKMSL(2023) depth',NULL,'EPSG','4258','EPSG','10549',0); INSERT INTO "usage" VALUES('EPSG','21028','compound_crs','EPSG','10555','EPSG','4756','EPSG','1272'); INSERT INTO "compound_crs" VALUES('EPSG','10556','ETRS89 + DKLAT(2023) depth',NULL,'EPSG','4258','EPSG','10550',0); INSERT INTO "usage" VALUES('EPSG','21029','compound_crs','EPSG','10556','EPSG','4756','EPSG','1272'); INSERT INTO "compound_crs" VALUES('EPSG','10627','ECML14 Grid + ODN height',NULL,'EPSG','10626','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','21376','compound_crs','EPSG','10627','EPSG','4774','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','10633','RGAF09 / UTM zone 20N + Martinique 1987 height',NULL,'EPSG','5490','EPSG','5756',0); INSERT INTO "usage" VALUES('EPSG','21399','compound_crs','EPSG','10633','EPSG','3276','EPSG','1178'); INSERT INTO "compound_crs" VALUES('EPSG','10643','Saba + Saba height',NULL,'EPSG','10636','EPSG','10642',0); INSERT INTO "usage" VALUES('EPSG','21757','compound_crs','EPSG','10643','EPSG','4757','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10644','BES2020 Saba + Saba height',NULL,'EPSG','10639','EPSG','10642',0); INSERT INTO "usage" VALUES('EPSG','21716','compound_crs','EPSG','10644','EPSG','4757','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10645','Saba DPnet + Saba height',NULL,'EPSG','10641','EPSG','10642',0); INSERT INTO "usage" VALUES('EPSG','21872','compound_crs','EPSG','10645','EPSG','4757','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','10651','GR96 + GLMSL(2023) depth',NULL,'EPSG','4747','EPSG','10649',0); INSERT INTO "usage" VALUES('EPSG','21455','compound_crs','EPSG','10651','EPSG','4776','EPSG','1272'); INSERT INTO "compound_crs" VALUES('EPSG','10652','GR96 + GLLAT(2023) depth',NULL,'EPSG','4747','EPSG','10650',0); INSERT INTO "usage" VALUES('EPSG','21452','compound_crs','EPSG','10652','EPSG','4776','EPSG','1272'); INSERT INTO "compound_crs" VALUES('EPSG','10659','ETRF2000 + EOMA 1980 height',NULL,'EPSG','9067','EPSG','5787',0); INSERT INTO "usage" VALUES('EPSG','21613','compound_crs','EPSG','10659','EPSG','1119','EPSG','1181'); INSERT INTO "compound_crs" VALUES('EPSG','10660','HD72 / EOV + EOMA 1980 height',NULL,'EPSG','23700','EPSG','5787',0); INSERT INTO "usage" VALUES('EPSG','21616','compound_crs','EPSG','10660','EPSG','1119','EPSG','1056'); INSERT INTO "compound_crs" VALUES('EPSG','10679','ETRS89 + BSCD2000 depth',NULL,'EPSG','4258','EPSG','10678',0); INSERT INTO "usage" VALUES('EPSG','21815','compound_crs','EPSG','10679','EPSG','4779','EPSG','1291'); INSERT INTO "compound_crs" VALUES('EPSG','10686','Slovenia 1996 + SVS2000 height',NULL,'EPSG','4765','EPSG','5779',0); INSERT INTO "usage" VALUES('EPSG','21887','compound_crs','EPSG','10686','EPSG','3307','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10687','Slovenia 1996 / Slovene National Grid + SVS2000 height',NULL,'EPSG','3794','EPSG','5779',0); INSERT INTO "usage" VALUES('EPSG','21888','compound_crs','EPSG','10687','EPSG','3307','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10691','EUREF-FIN + N60 height',NULL,'EPSG','10690','EPSG','5717',0); INSERT INTO "usage" VALUES('EPSG','21985','compound_crs','EPSG','10691','EPSG','3333','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10692','EUREF-FIN + N2000 height',NULL,'EPSG','10690','EPSG','3900',0); INSERT INTO "usage" VALUES('EPSG','21986','compound_crs','EPSG','10692','EPSG','3333','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10741','Sint Eustatius + Sint Eustatius height',NULL,'EPSG','10736','EPSG','10740',0); INSERT INTO "usage" VALUES('EPSG','22289','compound_crs','EPSG','10741','EPSG','4788','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10742','BES2020 Sint Eustatius + Sint Eustatius height',NULL,'EPSG','10739','EPSG','10740',0); INSERT INTO "usage" VALUES('EPSG','22290','compound_crs','EPSG','10742','EPSG','4788','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','10746','Sint Eustatius DPnet short + Sint Eustatius height',NULL,'EPSG','10744','EPSG','10740',0); INSERT INTO "usage" VALUES('EPSG','22310','compound_crs','EPSG','10746','EPSG','4788','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','10747','Sint Eustatius DPnet long + Sint Eustatius height',NULL,'EPSG','10745','EPSG','10740',0); INSERT INTO "usage" VALUES('EPSG','22378','compound_crs','EPSG','10747','EPSG','4788','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','10764','Bonaire DPnet + Bonaire height',NULL,'EPSG','10759','EPSG','10763',0); INSERT INTO "usage" VALUES('EPSG','22379','compound_crs','EPSG','10764','EPSG','3822','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','10765','Bonaire 2004 + Bonaire height',NULL,'EPSG','10762','EPSG','10763',0); INSERT INTO "usage" VALUES('EPSG','22177','compound_crs','EPSG','10765','EPSG','3822','EPSG','1270'); INSERT INTO "compound_crs" VALUES('EPSG','10774','EUREF-FIN / TM35FIN(E,N) + N2000 height',NULL,'EPSG','3067','EPSG','3900',0); INSERT INTO "usage" VALUES('EPSG','22245','compound_crs','EPSG','10774','EPSG','3333','EPSG','1142'); INSERT INTO "compound_crs" VALUES('EPSG','20001','ETRS89 + SVD2006 height',NULL,'EPSG','4258','EPSG','20000',0); INSERT INTO "usage" VALUES('EPSG','17956','compound_crs','EPSG','20001','EPSG','4058','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','20003','MWC18 Grid + ODN height',NULL,'EPSG','20002','EPSG','5701',0); INSERT INTO "usage" VALUES('EPSG','18337','compound_crs','EPSG','20003','EPSG','4666','EPSG','1141'); INSERT INTO "compound_crs" VALUES('EPSG','20037','NAD83(CSRS)v4 + CGVD2013a(2002) height',NULL,'EPSG','8246','EPSG','20034',0); INSERT INTO "usage" VALUES('EPSG','18294','compound_crs','EPSG','20037','EPSG','1061','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','20038','NAD83(CSRS)v3 + CGVD2013a(1997) height',NULL,'EPSG','8240','EPSG','20035',0); INSERT INTO "usage" VALUES('EPSG','18314','compound_crs','EPSG','20038','EPSG','1061','EPSG','1026'); INSERT INTO "compound_crs" VALUES('EPSG','20043','SRGI2013 + INAGeoid2020 v2 height',NULL,'EPSG','9470','EPSG','20036',0); INSERT INTO "usage" VALUES('EPSG','18441','compound_crs','EPSG','20043','EPSG','1122','EPSG','1026'); proj-9.6.0/data/sql/concatenated_operation.sql000664 001754 001755 00000261305 14764566077 021371 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "concatenated_operation" VALUES('EPSG','3896','MGI (Ferro) to WGS 84 (2)','','EPSG','4805','EPSG','4326',1.5,'BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','8965','concatenated_operation','EPSG','3896','EPSG','1037','EPSG','1042'); INSERT INTO "concatenated_operation" VALUES('EPSG','3966','MGI (Ferro) to WGS 84 (1)','Accuracy estimate is not available.','EPSG','4805','EPSG','4326',6.0,'DMA-balk',0); INSERT INTO "usage" VALUES('EPSG','9014','concatenated_operation','EPSG','3966','EPSG','2370','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','4435','Puerto Rico to NAD83(HARN) (1)','Accuracy 0.1m at 67% confidence level. May be taken as approximate transformation Puerto Rico to WGS 84 - see code 8583.','EPSG','4139','EPSG','4152',0.08,'NGS-PRVI',0); INSERT INTO "usage" VALUES('EPSG','9074','concatenated_operation','EPSG','4435','EPSG','3634','EPSG','1031'); INSERT INTO "concatenated_operation" VALUES('EPSG','4837','Amersfoort to ED50 (1)','Adopted by NAM in 2006, replacing polynomial tfms 1046, 6304, 1050 and 6306.','EPSG','4289','EPSG','4230',1.5,'NAM-Nld 2006',0); INSERT INTO "usage" VALUES('EPSG','9130','concatenated_operation','EPSG','4837','EPSG','1275','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','5190','Tokyo 1892 to KGD2002 (1)','','EPSG','5132','EPSG','4737',1.0,'OGP-Kor',0); INSERT INTO "usage" VALUES('EPSG','9275','concatenated_operation','EPSG','5190','EPSG','3266','EPSG','1050'); INSERT INTO "concatenated_operation" VALUES('EPSG','5192','Tokyo 1892 to WGS 84 (1)','','EPSG','5132','EPSG','4326',1.0,'OGP-Kor',0); INSERT INTO "usage" VALUES('EPSG','9277','concatenated_operation','EPSG','5192','EPSG','3266','EPSG','1050'); INSERT INTO "concatenated_operation" VALUES('EPSG','5230','S-JTSK (Ferro) to WGS 84 (2)','','EPSG','4818','EPSG','4326',1.0,'OGP-Svk',0); INSERT INTO "usage" VALUES('EPSG','9306','concatenated_operation','EPSG','5230','EPSG','1211','EPSG','1041'); INSERT INTO "concatenated_operation" VALUES('EPSG','5240','S-JTSK/05 (Ferro) to WGS 84 (1)','Replaces S-JTSK (Ferro) to WGS 84 (1) (CRS code 8642) in Czech Republic.','EPSG','5229','EPSG','4326',1.0,'OGP-Cze',0); INSERT INTO "usage" VALUES('EPSG','9312','concatenated_operation','EPSG','5240','EPSG','1079','EPSG','1041'); INSERT INTO "concatenated_operation" VALUES('EPSG','5242','S-JTSK (Ferro) to WGS 84 (3)','Parameter values from S-JTSK/05 to ETRS89 (1) (code 5226). For applications to an accuracy of 1m. Replaces S-JTSK (Ferro) to WGS 84 (1) (tfm code 8642).','EPSG','4818','EPSG','4326',1.0,'OGP-Cze R05',0); INSERT INTO "usage" VALUES('EPSG','9314','concatenated_operation','EPSG','5242','EPSG','1079','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','5838','Lisbon (Lisbon) to WGS 84 (2)','','EPSG','4803','EPSG','4326',2.0,'OGP-Prt 2009',0); INSERT INTO "usage" VALUES('EPSG','9511','concatenated_operation','EPSG','5838','EPSG','1294','EPSG','1042'); INSERT INTO "concatenated_operation" VALUES('EPSG','6714','Tokyo to JGD2011 (1)','See Tokyo to JGD2011 (2) (code 6740) for areas other than northern Honshu.','EPSG','4301','EPSG','6668',0.3,'OGP-Jpn N Honshu',0); INSERT INTO "usage" VALUES('EPSG','9742','concatenated_operation','EPSG','6714','EPSG','4170','EPSG','1142'); INSERT INTO "concatenated_operation" VALUES('EPSG','6739','NAD27 to NAD83(HARN) (22)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8622.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa SD',0); INSERT INTO "usage" VALUES('EPSG','9755','concatenated_operation','EPSG','6739','EPSG','1410','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','6874','Tananarive (Paris) to WGS 84 (2)','Used by OMV.','EPSG','4810','EPSG','4326',3.0,'OGP-Mdg',0); INSERT INTO "usage" VALUES('EPSG','9803','concatenated_operation','EPSG','6874','EPSG','3273','EPSG','1043'); INSERT INTO "concatenated_operation" VALUES('EPSG','7811','NTF (Paris) to RGF93 v1 (2)','Second step is an emulation (using the NTv2 method) of the geocentric interpolation method described in CT code 9337. Note that the grid file parameters are of opposite sign.','EPSG','4807','EPSG','4171',1.0,'IOGP-Fra NTv2',0); INSERT INTO "usage" VALUES('EPSG','10276','concatenated_operation','EPSG','7811','EPSG','3694','EPSG','1041'); INSERT INTO "concatenated_operation" VALUES('EPSG','7965','Poolbeg height (ft(Br36)) to Malin Head height (1)','','EPSG','5754','EPSG','5731',0.1,'EPSG-Ire',0); INSERT INTO "usage" VALUES('EPSG','10349','concatenated_operation','EPSG','7965','EPSG','1305','EPSG','1059'); INSERT INTO "concatenated_operation" VALUES('EPSG','7967','Poolbeg height (ft(Br36)) to Belfast height (1)','','EPSG','5754','EPSG','5732',0.1,'EPSG-Ire',0); INSERT INTO "usage" VALUES('EPSG','10351','concatenated_operation','EPSG','7967','EPSG','2530','EPSG','1059'); INSERT INTO "concatenated_operation" VALUES('EPSG','7973','NGVD29 height (ftUS) to NAVD88 height (1)','','EPSG','5702','EPSG','5703',0.02,'IOGP - US Conus W',0); INSERT INTO "usage" VALUES('EPSG','10356','concatenated_operation','EPSG','7973','EPSG','2950','EPSG','1099'); INSERT INTO "concatenated_operation" VALUES('EPSG','7974','NGVD29 height (ftUS) to NAVD88 height (2)','','EPSG','5702','EPSG','5703',0.02,'IOGP - US Conus C',0); INSERT INTO "usage" VALUES('EPSG','10357','concatenated_operation','EPSG','7974','EPSG','2949','EPSG','1099'); INSERT INTO "concatenated_operation" VALUES('EPSG','7975','NGVD29 height (ftUS) to NAVD88 height (3)','','EPSG','5702','EPSG','5703',0.02,'IOGP - US Conus E',0); INSERT INTO "usage" VALUES('EPSG','10358','concatenated_operation','EPSG','7975','EPSG','2948','EPSG','1099'); INSERT INTO "concatenated_operation" VALUES('EPSG','7983','HKPD height to HKCD depth (1)','','EPSG','5738','EPSG','5739',0.0,'IOGP-HK',0); INSERT INTO "usage" VALUES('EPSG','10364','concatenated_operation','EPSG','7983','EPSG','3335','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','7986','KOC CD height to KOC WD depth (1)','','EPSG','5790','EPSG','5789',0.1,'IOGP-Kwt',0); INSERT INTO "usage" VALUES('EPSG','10367','concatenated_operation','EPSG','7986','EPSG','3267','EPSG','1059'); INSERT INTO "concatenated_operation" VALUES('EPSG','7987','KOC CD height to KOC WD depth (ft) (1)','','EPSG','5790','EPSG','5614',0.1,'IOGP-Kwt',0); INSERT INTO "usage" VALUES('EPSG','10368','concatenated_operation','EPSG','7987','EPSG','3267','EPSG','1099'); INSERT INTO "concatenated_operation" VALUES('EPSG','8047','ED50 to WGS 84 (15)','Replaced by codes 8569 and 1612 in 1997 and 2001. The concatenation of transformations 1147 and 1146 gives the following position vector tfm: dX=-84.491 dY=-100.559 dZ=-114.209 metres rX= -2.4006 rY=-0.5367 rZ=-2.3742 microradians dS=+0.2947 ppm.','EPSG','4230','EPSG','4326',1.5,'NMA-Nor N65 1991',0); INSERT INTO "usage" VALUES('EPSG','10400','concatenated_operation','EPSG','8047','EPSG','2332','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8094','NTF (Paris) to WGS 84 (1)','','EPSG','4807','EPSG','4326',2.0,'EPSG-Fra',0); INSERT INTO "usage" VALUES('EPSG','10426','concatenated_operation','EPSG','8094','EPSG','3694','EPSG','1024'); INSERT INTO "concatenated_operation" VALUES('EPSG','8174','Bogota 1975 (Bogota) to WGS 84 (1)','Accuracy 6m, 5m and 6m in X, Y and Z axes.','EPSG','4802','EPSG','4326',10.0,'DMA-Col',0); INSERT INTO "usage" VALUES('EPSG','10427','concatenated_operation','EPSG','8174','EPSG','3229','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8175','Monte Mario (Rome) to WGS 84 (1)','Accuracy 25m in each axis.','EPSG','4806','EPSG','4326',44.0,'EPSG-Ita',0); INSERT INTO "usage" VALUES('EPSG','10428','concatenated_operation','EPSG','8175','EPSG','2339','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8176','Tananarive (Paris) to WGS 84 (1)','Accuracy not available.','EPSG','4810','EPSG','4326',999.0,'EPSG-Mdg',0); INSERT INTO "usage" VALUES('EPSG','10429','concatenated_operation','EPSG','8176','EPSG','3273','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8178','Batavia (Jakarta) to WGS 84 (1)','Accuracy 3m in each axis.','EPSG','4813','EPSG','4326',6.0,'EPSG-Idn Sumatra',0); INSERT INTO "usage" VALUES('EPSG','10430','concatenated_operation','EPSG','8178','EPSG','1285','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8183','HD72 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRF89 is equivalent to WGS 84.','EPSG','4237','EPSG','4326',NULL,'EPSG-Hun',1); INSERT INTO "usage" VALUES('EPSG','10431','concatenated_operation','EPSG','8183','EPSG','1119','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8186','NTF (Paris) to ED50 (1)','','EPSG','4807','EPSG','4230',2.0,'EPSG-Fra',0); INSERT INTO "usage" VALUES('EPSG','10432','concatenated_operation','EPSG','8186','EPSG','3694','EPSG','1024'); INSERT INTO "concatenated_operation" VALUES('EPSG','8188','NTF (Paris) to WGS 72 (1)','','EPSG','4807','EPSG','4322',2.0,'EPSG-Fra',0); INSERT INTO "usage" VALUES('EPSG','10433','concatenated_operation','EPSG','8188','EPSG','3694','EPSG','1024'); INSERT INTO "concatenated_operation" VALUES('EPSG','8190','AGD66 to WGS 84 (2)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. 0.1m accuracy.','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus 5m',1); INSERT INTO "usage" VALUES('EPSG','10434','concatenated_operation','EPSG','8190','EPSG','2575','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8192','AGD84 to WGS 84 (3)','Approximation assuming that GDA94 is equivalent to WGS 84.','EPSG','4203','EPSG','4326',NULL,'EPSG-Aus 5m',1); INSERT INTO "usage" VALUES('EPSG','10435','concatenated_operation','EPSG','8192','EPSG','2575','EPSG','1045'); INSERT INTO "concatenated_operation" VALUES('EPSG','8194','AGD84 to WGS 84 (4)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84.','EPSG','4203','EPSG','4326',NULL,'EPSG-Aus 1m',1); INSERT INTO "usage" VALUES('EPSG','10436','concatenated_operation','EPSG','8194','EPSG','2575','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8195','RT90 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRF89 is equivalent to WGS 84.','EPSG','4124','EPSG','4326',NULL,'EPSG-Swe',1); INSERT INTO "usage" VALUES('EPSG','10437','concatenated_operation','EPSG','8195','EPSG','1225','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8199','Pulkovo 1942 to WGS 84 (2)','Approximation at the +/- 1m level assuming that LKS94(ETRS89) is equivalent to WGS 84.','EPSG','4284','EPSG','4326',NULL,'EPSG-Ltu',1); INSERT INTO "usage" VALUES('EPSG','10438','concatenated_operation','EPSG','8199','EPSG','1145','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8211','Voirol 1875 (Paris) to WGS 84 (1)','','EPSG','4811','EPSG','4326',999.0,'EPSG-Dza N',0); INSERT INTO "usage" VALUES('EPSG','10439','concatenated_operation','EPSG','8211','EPSG','1365','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8215','Tete to WGS 84 (1)','Approximation at the +/- 1m level assuming that Moznet is equivalent to WGS 84.','EPSG','4127','EPSG','4326',NULL,'EPSG-Moz',1); INSERT INTO "usage" VALUES('EPSG','10440','concatenated_operation','EPSG','8215','EPSG','1167','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8217','Tete to WGS 84 (2)','Approximation at the +/- 1m level assuming that Moznet is equivalent to WGS 84.','EPSG','4127','EPSG','4326',NULL,'EPSG-Moz A',1); INSERT INTO "usage" VALUES('EPSG','10441','concatenated_operation','EPSG','8217','EPSG','2350','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8219','Tete to WGS 84 (3)','Approximation at the +/- 1m level assuming that Moznet is equivalent to WGS 84.','EPSG','4127','EPSG','4326',NULL,'EPSG-Moz B',1); INSERT INTO "usage" VALUES('EPSG','10442','concatenated_operation','EPSG','8219','EPSG','2351','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8221','Tete to WGS 84 (4)','Approximation at the +/- 1m level assuming that Moznet is equivalent to WGS 84.','EPSG','4127','EPSG','4326',NULL,'EPSG-Moz C',1); INSERT INTO "usage" VALUES('EPSG','10443','concatenated_operation','EPSG','8221','EPSG','2352','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8223','Tete to WGS 84 (5)','Approximation at the +/- 1m level assuming that Moznet is equivalent to WGS 84.','EPSG','4127','EPSG','4326',NULL,'EPSG-Moz D',1); INSERT INTO "usage" VALUES('EPSG','10444','concatenated_operation','EPSG','8223','EPSG','2353','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8234','DHDN to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRF89 is equivalent to WGS 84.','EPSG','4314','EPSG','4326',NULL,'EPSG-Deu W',1); INSERT INTO "usage" VALUES('EPSG','10446','concatenated_operation','EPSG','8234','EPSG','2326','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8236','Pulkovo 1942 to WGS 84 (11)','Approximation at the +/- 1m level assuming that ETRF89 is equivalent to WGS 84.','EPSG','4284','EPSG','4326',NULL,'EPSG-Deu E',1); INSERT INTO "usage" VALUES('EPSG','10447','concatenated_operation','EPSG','8236','EPSG','1343','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8243','NAD27 to WGS 84 (25)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84. Superseded by NAD27 to WGS 84 (27) (code 8404) in Quebec and NAD27 to WGS 84 (26) (code 8245) elsewhere in Canada.','EPSG','4267','EPSG','4326',NULL,'EPSG-Can old',1); INSERT INTO "usage" VALUES('EPSG','10449','concatenated_operation','EPSG','8243','EPSG','1061','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8245','NAD27 to WGS 84 (26)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84.','EPSG','4267','EPSG','4326',NULL,'EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','10450','concatenated_operation','EPSG','8245','EPSG','1061','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8263','MGI (Ferro) to WGS 84 (1)','Accuracy estimate is not available.','EPSG','4805','EPSG','4326',NULL,'DMA-balk',1); INSERT INTO "usage" VALUES('EPSG','10458','concatenated_operation','EPSG','8263','EPSG','2370','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8363','ETRS89 + Baltic 1957 height to ETRS89 + EVRF2007 height (1)','Recommended method for transforming coordinates between Baltic 1957 height and EVRF2007 height and vice-versa in Slovakia. Compound transformation using two separate quasigeoid models (DVRM05 and DMQSK2014E).','EPSG','8360','EPSG','7423',0.05,'UGKK-Svk',0); INSERT INTO "usage" VALUES('EPSG','10510','concatenated_operation','EPSG','8363','EPSG','1211','EPSG','1059'); INSERT INTO "concatenated_operation" VALUES('EPSG','8386','Old Hawaiian to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84.','EPSG','4135','EPSG','4326',NULL,'EPSG-Usa Hi',1); INSERT INTO "usage" VALUES('EPSG','10523','concatenated_operation','EPSG','8386','EPSG','1334','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8388','St. Lawrence Island to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84.','EPSG','4136','EPSG','4326',NULL,'EPSG-Usa AK StL',1); INSERT INTO "usage" VALUES('EPSG','10524','concatenated_operation','EPSG','8388','EPSG','1332','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8390','St. Paul Island to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84.','EPSG','4137','EPSG','4326',NULL,'EPSG-Usa AK StP',1); INSERT INTO "usage" VALUES('EPSG','10526','concatenated_operation','EPSG','8390','EPSG','1333','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8392','St. George Island to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84.','EPSG','4138','EPSG','4326',NULL,'EPSG-Usa AK StG',1); INSERT INTO "usage" VALUES('EPSG','10527','concatenated_operation','EPSG','8392','EPSG','1331','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8394','NAD27(CGQ77) to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84. Superseded by NAD27(CGQ77) to WGS 84 (2) (code 8564).','EPSG','4609','EPSG','4326',NULL,'EPSG-Can Qc NT1',1); INSERT INTO "usage" VALUES('EPSG','10529','concatenated_operation','EPSG','8394','EPSG','1368','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8396','AGD66 to WGS 84 (3)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. Superseded by AGD66 to WGS 84 (11) (code 8581).','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus ACT 1m',1); INSERT INTO "usage" VALUES('EPSG','10530','concatenated_operation','EPSG','8396','EPSG','2283','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8398','AGD66 to WGS 84 (4)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. Superseded by AGD66 to WGS 84 (9) (code 8576).','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus Tas 1m',1); INSERT INTO "usage" VALUES('EPSG','10531','concatenated_operation','EPSG','8398','EPSG','1282','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8400','AGD66 to WGS 84 (5)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84.','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus NSW Vic 1m',1); INSERT INTO "usage" VALUES('EPSG','10532','concatenated_operation','EPSG','8400','EPSG','2286','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8402','Puerto Rico to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84.','EPSG','4139','EPSG','4326',NULL,'EPSG-PRVI',1); INSERT INTO "usage" VALUES('EPSG','10533','concatenated_operation','EPSG','8402','EPSG','1335','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8404','NAD27 to WGS 84 (27)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84. Superseded by NAD27 to WGS 84 (31) (code 8565).','EPSG','4267','EPSG','4326',NULL,'EPSG-Can QC',1); INSERT INTO "usage" VALUES('EPSG','10534','concatenated_operation','EPSG','8404','EPSG','1368','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8406','NAD27(76) to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83 is equivalent to WGS 84.','EPSG','4608','EPSG','4326',NULL,'EPSG-Can On',1); INSERT INTO "usage" VALUES('EPSG','10536','concatenated_operation','EPSG','8406','EPSG','1367','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8408','AGD66 to WGS 84 (6)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. Superseded by AGD66 to WGS 84 (11) (code 8578).','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus Vic 0.1m',1); INSERT INTO "usage" VALUES('EPSG','10538','concatenated_operation','EPSG','8408','EPSG','2285','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8418','ATS77 to WGS 84 (1)','Approximation at the +/- 1m level assuming that NAD83(CSRS98) is equivalent to WGS 84.','EPSG','4122','EPSG','4326',NULL,'EPSG-Can NB',1); INSERT INTO "usage" VALUES('EPSG','10548','concatenated_operation','EPSG','8418','EPSG','1447','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8419','ATS77 to WGS 84 (2)','Approximation at the +/- 1m level assuming that NAD83(CSRS98) is equivalent to WGS 84.','EPSG','4122','EPSG','4326',NULL,'EPSG-Can PEI',1); INSERT INTO "usage" VALUES('EPSG','10549','concatenated_operation','EPSG','8419','EPSG','1533','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8420','NAD27 to WGS 84 (32)','','EPSG','4267','EPSG','4326',NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','10550','concatenated_operation','EPSG','8420','EPSG','2375','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8421','NAD83 to WGS 84 (7)','','EPSG','4269','EPSG','4326',NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','10551','concatenated_operation','EPSG','8421','EPSG','2375','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8422','NAD83 to WGS 84 (8)','The gridded difference file AB_CSRS.DAC in STEP 1 will need to be renamed to AB_CSRS.gsb to run in some software suites. Formats identical, but AB file is provincial fit only.','EPSG','4269','EPSG','4326',NULL,'Alb Env-Can AB',1); INSERT INTO "usage" VALUES('EPSG','10552','concatenated_operation','EPSG','8422','EPSG','2376','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8442','ETRS89 to S-JTSK (5)','Recommended method of a transformation from ETRS89 to S-JTSK in Slovakia. For reverse transformation see S-JTSK to ETRS89 (6) (code 8443). Both together replace S-JTSK to ETRS89 (4) (code 4827).','EPSG','4258','EPSG','4156',0.06,'UGKK-Sk JTSK03',0); INSERT INTO "usage" VALUES('EPSG','10562','concatenated_operation','EPSG','8442','EPSG','1211','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','8443','S-JTSK to ETRS89 (6)','Recommended method of a transformation from S-JTSK to ETRS89 in Slovakia. For reverse transformation see ETRS89 to S-JTSK (5) (code 8442). Both together replace S-JTSK to ETRS89 (4) (code 4827).','EPSG','4156','EPSG','4258',0.06,'UGKK-Sk JTSK03',0); INSERT INTO "usage" VALUES('EPSG','10563','concatenated_operation','EPSG','8443','EPSG','1211','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','8453','AGD66 to WGS 84 (7)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84.','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus Tas 0.1m',1); INSERT INTO "usage" VALUES('EPSG','10572','concatenated_operation','EPSG','8453','EPSG','1282','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8454','AGD66 to WGS 84 (8)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84.','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus NT 0.1m',1); INSERT INTO "usage" VALUES('EPSG','10573','concatenated_operation','EPSG','8454','EPSG','2284','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8457','CH1903+ to WGS 84 (1)','Approximation at the +/- 1m level assuming that CHTRF95 is equivalent to WGS 84.','EPSG','4150','EPSG','4326',NULL,'EPSG-CH',1); INSERT INTO "usage" VALUES('EPSG','10574','concatenated_operation','EPSG','8457','EPSG','1286','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8460','NAD27 to NAD83(HARN) (1)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8590.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa AL',0); INSERT INTO "usage" VALUES('EPSG','10577','concatenated_operation','EPSG','8460','EPSG','1372','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8461','NAD27 to NAD83(HARN) (2)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8591.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa AZ',0); INSERT INTO "usage" VALUES('EPSG','10578','concatenated_operation','EPSG','8461','EPSG','1373','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8462','NAD27 to NAD83(HARN) (3)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8593.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa CA n',0); INSERT INTO "usage" VALUES('EPSG','10579','concatenated_operation','EPSG','8462','EPSG','2297','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8463','NAD27 to NAD83(HARN) (4)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8594.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa CA s',0); INSERT INTO "usage" VALUES('EPSG','10580','concatenated_operation','EPSG','8463','EPSG','2298','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8464','NAD27 to NAD83(HARN) (5)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8595.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa CO',0); INSERT INTO "usage" VALUES('EPSG','10581','concatenated_operation','EPSG','8464','EPSG','1376','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8465','NAD27 to NAD83(HARN) (6)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8597.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa GA',0); INSERT INTO "usage" VALUES('EPSG','10582','concatenated_operation','EPSG','8465','EPSG','1380','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8466','NAD27 to NAD83(HARN) (7)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8596.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa FL',0); INSERT INTO "usage" VALUES('EPSG','10583','concatenated_operation','EPSG','8466','EPSG','1379','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8467','NAD27 to NAD83(HARN) (8)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8611.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa ID MT e',0); INSERT INTO "usage" VALUES('EPSG','10584','concatenated_operation','EPSG','8467','EPSG','2382','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8468','NAD27 to NAD83(HARN) (9)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8612.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa ID MT w',0); INSERT INTO "usage" VALUES('EPSG','10585','concatenated_operation','EPSG','8468','EPSG','2383','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8469','NAD27 to NAD83(HARN) (10)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8602.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa KY',0); INSERT INTO "usage" VALUES('EPSG','10586','concatenated_operation','EPSG','8469','EPSG','1386','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8470','NAD27 to NAD83(HARN) (11)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8603.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa LA',0); INSERT INTO "usage" VALUES('EPSG','10587','concatenated_operation','EPSG','8470','EPSG','1387','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8471','NAD27 to NAD83(HARN) (12)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8605.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa DE MD',0); INSERT INTO "usage" VALUES('EPSG','10588','concatenated_operation','EPSG','8471','EPSG','2377','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8472','NAD27 to NAD83(HARN) (13)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8604.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa ME',0); INSERT INTO "usage" VALUES('EPSG','10589','concatenated_operation','EPSG','8472','EPSG','1388','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8473','NAD27 to NAD83(HARN) (14)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8607.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa MI',0); INSERT INTO "usage" VALUES('EPSG','10590','concatenated_operation','EPSG','8473','EPSG','1391','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8474','NAD27 to NAD83(HARN) (15)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8609.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa MS',0); INSERT INTO "usage" VALUES('EPSG','10591','concatenated_operation','EPSG','8474','EPSG','1393','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8475','NAD27 to NAD83(HARN) (16)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8613.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa NE',0); INSERT INTO "usage" VALUES('EPSG','10592','concatenated_operation','EPSG','8475','EPSG','1396','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8476','NAD27 to NAD83(HARN) (17)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8606.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa NewEng',0); INSERT INTO "usage" VALUES('EPSG','10593','concatenated_operation','EPSG','8476','EPSG','2378','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8477','NAD27 to NAD83(HARN) (18)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8616.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa NM',0); INSERT INTO "usage" VALUES('EPSG','10594','concatenated_operation','EPSG','8477','EPSG','1400','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8478','NAD27 to NAD83(HARN) (19)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8617.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa NY',0); INSERT INTO "usage" VALUES('EPSG','10595','concatenated_operation','EPSG','8478','EPSG','1401','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8479','NAD27 to NAD83(HARN) (20)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8618.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa ND',0); INSERT INTO "usage" VALUES('EPSG','10596','concatenated_operation','EPSG','8479','EPSG','1403','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8480','NAD27 to NAD83(HARN) (21)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8620.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa OK',0); INSERT INTO "usage" VALUES('EPSG','10597','concatenated_operation','EPSG','8480','EPSG','1405','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8481','Puerto Rico to NAD83(HARN) (1)','May be taken as approximate transformation Puerto Rico to WGS 84 - see code 8583.','EPSG','4139','EPSG','4152',NULL,'NGS-PRVI',1); INSERT INTO "usage" VALUES('EPSG','10598','concatenated_operation','EPSG','8481','EPSG','1335','EPSG','1031'); INSERT INTO "concatenated_operation" VALUES('EPSG','8482','NAD27 to NAD83(HARN) (22)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8622.','EPSG','4267','EPSG','4152',NULL,'NGS-Usa SD',1); INSERT INTO "usage" VALUES('EPSG','10599','concatenated_operation','EPSG','8482','EPSG','1410','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8483','NAD27 to NAD83(HARN) (23)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8623.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa TN',0); INSERT INTO "usage" VALUES('EPSG','10600','concatenated_operation','EPSG','8483','EPSG','1411','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8484','NAD27 to NAD83(HARN) (24)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8624.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa TX e',0); INSERT INTO "usage" VALUES('EPSG','10601','concatenated_operation','EPSG','8484','EPSG','2379','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8485','NAD27 to NAD83(HARN) (25)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8625.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa TX w',0); INSERT INTO "usage" VALUES('EPSG','10602','concatenated_operation','EPSG','8485','EPSG','2380','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8486','NAD27 to NAD83(HARN) (26)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8627.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa VA',0); INSERT INTO "usage" VALUES('EPSG','10603','concatenated_operation','EPSG','8486','EPSG','1415','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8487','NAD27 to NAD83(HARN) (27)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8621.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa OR WA',0); INSERT INTO "usage" VALUES('EPSG','10604','concatenated_operation','EPSG','8487','EPSG','2381','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8488','NAD27 to NAD83(HARN) (28)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8629.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa WI',0); INSERT INTO "usage" VALUES('EPSG','10605','concatenated_operation','EPSG','8488','EPSG','1418','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8489','NAD27 to NAD83(HARN) (29)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8630.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa WY',0); INSERT INTO "usage" VALUES('EPSG','10606','concatenated_operation','EPSG','8489','EPSG','1419','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8496','NAD27 to WGS 84 (28)','','EPSG','4267','EPSG','4326',NULL,'NGS-Usa conus',1); INSERT INTO "usage" VALUES('EPSG','10613','concatenated_operation','EPSG','8496','EPSG','2374','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','8497','NAD27 to WGS 84 (29)','','EPSG','4267','EPSG','4326',NULL,'NGS-Usa AK',1); INSERT INTO "usage" VALUES('EPSG','10614','concatenated_operation','EPSG','8497','EPSG','2373','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','8508','Old Hawaiian to NAD83(HARN) (1)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs Old Hawaiian (code 4135), NAD83 (code 4269) and NAD83(HARN) have longitudes positive east. May be taken as approximate transformation Old Hawaiin to WGS 84 - see code 8582.','EPSG','4135','EPSG','4152',0.3,'NGS-Usa HI',0); INSERT INTO "usage" VALUES('EPSG','10625','concatenated_operation','EPSG','8508','EPSG','1334','EPSG','1041'); INSERT INTO "concatenated_operation" VALUES('EPSG','8509','NAD27 to NAD83(HARN) (30)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8599.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa IN',0); INSERT INTO "usage" VALUES('EPSG','10626','concatenated_operation','EPSG','8509','EPSG','1383','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8510','NAD27 to NAD83(HARN) (31)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8601.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa KS',0); INSERT INTO "usage" VALUES('EPSG','10627','concatenated_operation','EPSG','8510','EPSG','1385','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8511','NAD27 to NAD83(HARN) (32)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8614.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa NV',0); INSERT INTO "usage" VALUES('EPSG','10628','concatenated_operation','EPSG','8511','EPSG','1397','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8512','NAD27 to NAD83(HARN) (33)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8619.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa OH',0); INSERT INTO "usage" VALUES('EPSG','10629','concatenated_operation','EPSG','8512','EPSG','1404','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8513','NAD27 to NAD83(HARN) (34)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8626.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa UT',0); INSERT INTO "usage" VALUES('EPSG','10630','concatenated_operation','EPSG','8513','EPSG','1413','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8514','NAD27 to NAD83(HARN) (35)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8628.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa WV',0); INSERT INTO "usage" VALUES('EPSG','10631','concatenated_operation','EPSG','8514','EPSG','1417','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8517','Chos Malal 1914 to WGS 84 (1)','May be implemented using a single step geocentric translations of dx=+5.5m dY=+176.7m dZ=+141.4m.','EPSG','4160','EPSG','4326',11.0,'TOT-Arg Neu',0); INSERT INTO "usage" VALUES('EPSG','10634','concatenated_operation','EPSG','8517','EPSG','2325','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8530','South Yemen to WGS 84 (1)','May be implemented as a single transformation using geocentric translations transformation method with parameter values dX=-76m dY=-138m dZ=+67m.','EPSG','4164','EPSG','4326',NULL,'IGN-Yem South',1); INSERT INTO "usage" VALUES('EPSG','10635','concatenated_operation','EPSG','8530','EPSG','1340','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8532','Indian 1960 to WGS 84 (1)','May be implemented as a single transformation using position vector 7-parameter geocentric transformation method with parameter values dX=+199m dY=+931m dZ=+318.9m rX=rY=0 sec rZ=+0.814 sec dS=-0.38 ppm.','EPSG','4131','EPSG','4326',26.0,'PV-Vnm',0); INSERT INTO "usage" VALUES('EPSG','10636','concatenated_operation','EPSG','8532','EPSG','1495','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8537','Egypt 1907 to WGS 84 (2)','Used by Shell. May be implemented as a single transformation using position vector 7-parameter geocentric transformation method with parameter values dX=-121.8m dY=+98.1m dZ=-10.7m rX=rY=0 sec rZ=+0.554 sec dS=+0.2263 ppm.','EPSG','4229','EPSG','4326',6.0,'MCE-Egy',0); INSERT INTO "usage" VALUES('EPSG','10637','concatenated_operation','EPSG','8537','EPSG','1086','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8553','NAD27 to NAD83(HARN) (36)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8598.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa IL',0); INSERT INTO "usage" VALUES('EPSG','10645','concatenated_operation','EPSG','8553','EPSG','1382','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8554','NAD27 to NAD83(HARN) (37)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8615.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa NJ',0); INSERT INTO "usage" VALUES('EPSG','10646','concatenated_operation','EPSG','8554','EPSG','1399','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8560','AGD84 to WGS 84 (5)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. Superseded by AGD84 to WGS 84 (6) (code 8579).','EPSG','4203','EPSG','4326',NULL,'EPSG-Aus WA',1); INSERT INTO "usage" VALUES('EPSG','10652','concatenated_operation','EPSG','8560','EPSG','1280','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8562','Nord Sahara 1959 to WGS 84 (3)','Derived at IGN monument CFP19 using Transit. Can be implemented as a single 7-param Position Vector transformation with parameter values of dX=-156.5m dY=-87.2m dZ=+287.8m; rX=rY=0 rZ=+0.814sec; dS=-0.38ppm.','EPSG','4307','EPSG','4326',9.0,'CGG-Alg HM',0); INSERT INTO "usage" VALUES('EPSG','10654','concatenated_operation','EPSG','8562','EPSG','2393','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8563','NZGD49 to WGS 84 (3)','Assumes WGS 84 is coincident with NZGD2000. Accuracy about 1m.','EPSG','4272','EPSG','4326',NULL,'OSG-Nzl 1m',1); INSERT INTO "usage" VALUES('EPSG','10655','concatenated_operation','EPSG','8563','EPSG','1175','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8564','NAD27(CGQ77) to WGS 84 (2)','','EPSG','4609','EPSG','4326',NULL,'EPSG-Can Qc NT2',1); INSERT INTO "usage" VALUES('EPSG','10656','concatenated_operation','EPSG','8564','EPSG','1368','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8565','NAD27 to WGS 84 (31)','','EPSG','4267','EPSG','4326',NULL,'EPSG-Can Que',1); INSERT INTO "usage" VALUES('EPSG','10657','concatenated_operation','EPSG','8565','EPSG','1368','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8566','NAD83 to WGS 84 (6)','','EPSG','4269','EPSG','4326',NULL,'EPSG-Can Qc',1); INSERT INTO "usage" VALUES('EPSG','10658','concatenated_operation','EPSG','8566','EPSG','1368','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8568','Deir ez Zor to WGS 84 (1)','Can be implemented as a position vector tfm with param. values dX=-174.6 dY=-3.1 dZ=238.1m; rX=rY=0 rZ=0.814"; dS=-0.38 ppm.','EPSG','4227','EPSG','4326',6.0,'EPSG-Syr',0); INSERT INTO "usage" VALUES('EPSG','10660','concatenated_operation','EPSG','8568','EPSG','2329','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8569','ED50 to WGS 84 (21)','Included in Statens Kartverk programme wsktrans between 1997 (v3.1) and 2001 (v4.0). Replaced by ED50 to WGS 84 (23) (code 1612) in April 2001.','EPSG','4230','EPSG','4326',1.5,'EPSG-Nor N65 1997',0); INSERT INTO "usage" VALUES('EPSG','10661','concatenated_operation','EPSG','8569','EPSG','2332','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8571','Accra to WGS 84 (2)','Can be implemented as a position vector tfm dX=-171.16 dY=17.29 dZ=325.21m, rX=rY=0 rZ=0.814", dS=-0.38 ppm. See tfm code 15495. Found in use within oil industry erroneously concatenated as dX=-171.16 dY=17.29 dZ=327.81m, rX=rY0 rZ=0.554", dS=0.2263 ppm.','EPSG','4168','EPSG','4326',26.0,'EPSG-Gha',0); INSERT INTO "usage" VALUES('EPSG','10663','concatenated_operation','EPSG','8571','EPSG','1505','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8572','Amersfoort to WGS 84 (2)','Parameter values for step 1 from Amersfoort to ETRS89 (2) (code 1751). Step 2 assumes that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Supersedes Amersfoort to WGS 84 (1) (code 1112).','EPSG','4289','EPSG','4326',NULL,'EPSG-Nld',1); INSERT INTO "usage" VALUES('EPSG','10664','concatenated_operation','EPSG','8572','EPSG','1275','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8573','RGF93 to WGS 84 (1)','','EPSG','4171','EPSG','4326',NULL,'EPSG-Fra',1); INSERT INTO "usage" VALUES('EPSG','10665','concatenated_operation','EPSG','8573','EPSG','1096','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8574','American Samoa 1962 to WGS 84 (2)','Transformation actually to NAD83(HARN), but for many purposes NAD83(HARNS) can be considered to be coincident with WGS 84.','EPSG','4169','EPSG','4326',NULL,'EPSG-Asm',1); INSERT INTO "usage" VALUES('EPSG','10666','concatenated_operation','EPSG','8574','EPSG','2288','EPSG','1045'); INSERT INTO "concatenated_operation" VALUES('EPSG','8575','American Samoa 1962 to WGS 84 (3)','Transformation actually to NAD83(HARN), but for many purposes NAD83(HARNS) can be considered to be coincident with WGS 84.','EPSG','4169','EPSG','4326',NULL,'EPSG-Asm',1); INSERT INTO "usage" VALUES('EPSG','10667','concatenated_operation','EPSG','8575','EPSG','2289','EPSG','1045'); INSERT INTO "concatenated_operation" VALUES('EPSG','8576','AGD66 to WGS 84 (9)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. Supersedes AGD66 to WGS 84 (4) (code 8398).','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus Tas 1m',1); INSERT INTO "usage" VALUES('EPSG','10668','concatenated_operation','EPSG','8576','EPSG','1282','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8577','AGD66 to WGS 84 (10)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84.','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus NT',1); INSERT INTO "usage" VALUES('EPSG','10669','concatenated_operation','EPSG','8577','EPSG','2284','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8578','AGD66 to WGS 84 (11)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. Supersedes AGD66 to WGS 84 (3) (code 8396) and AGD66 to WGS 84 (6) (code 8408).','EPSG','4202','EPSG','4326',NULL,'EPSG-Aus',1); INSERT INTO "usage" VALUES('EPSG','10670','concatenated_operation','EPSG','8578','EPSG','2287','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8579','AGD84 to WGS 84 (6)','Approximation at the +/- 1m level assuming that GDA94 is equivalent to WGS 84. Supersedes AGD84 to WGS 84 (5) (code 8560).','EPSG','4203','EPSG','4326',NULL,'EPSG-Aus WA',1); INSERT INTO "usage" VALUES('EPSG','10671','concatenated_operation','EPSG','8579','EPSG','1280','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8580','IRENET95 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84.','EPSG','4173','EPSG','4326',NULL,'OSI-Ire',1); INSERT INTO "usage" VALUES('EPSG','10672','concatenated_operation','EPSG','8580','EPSG','1305','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8581','PSD93 to WGS 84 (2)','Replaced by PSD93 to WGS 84 (1) (code 1439) in 1997. Can be implemented as a position vector tfm with parameter values dX= -182.046 dY= -225.604 dZ=+173.384m rX= -0.616 rY= -1.655 rZ=+8.378" dS=16.8673ppm.','EPSG','4134','EPSG','4326',2.5,'PDO-Omn 93',0); INSERT INTO "usage" VALUES('EPSG','10673','concatenated_operation','EPSG','8581','EPSG','3288','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8582','Old Hawaiian to WGS 84 (2)','Transformation steps are from Old Hawaiian to NAD83(HARN) (1) (code 8508) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4135','EPSG','4326',1.5,'EPSG-Usa Hi',0); INSERT INTO "usage" VALUES('EPSG','10674','concatenated_operation','EPSG','8582','EPSG','1334','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8583','Puerto Rico to WGS 84 (2)','Transformation steps are from Puerto Rico to NAD83(HARN) (1) (code 4435) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4139','EPSG','4326',1.5,'EPSG-PRVI',0); INSERT INTO "usage" VALUES('EPSG','10675','concatenated_operation','EPSG','8583','EPSG','3634','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8584','NAD27 to NAD83(CSRS98) (3)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 8585.','EPSG','4267','EPSG','4140',NULL,'EPSG-Can AB',1); INSERT INTO "usage" VALUES('EPSG','10676','concatenated_operation','EPSG','8584','EPSG','2376','EPSG','1151'); INSERT INTO "concatenated_operation" VALUES('EPSG','8585','NAD27 to WGS 84 (36)','Steps based on concatenated transformation NAD27 to NAD83(CSRS)v4 (3) (code 9336) assuming that NAD83(CSRS)v4 is equivalent to WGS 84.','EPSG','4267','EPSG','4326',2.5,'EPSG-Can AB',0); INSERT INTO "usage" VALUES('EPSG','10677','concatenated_operation','EPSG','8585','EPSG','2376','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8586','NAD27 to NAD83(HARN) (38)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8592.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa AR',0); INSERT INTO "usage" VALUES('EPSG','10678','concatenated_operation','EPSG','8586','EPSG','1374','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8587','NAD27 to NAD83(HARN) (39)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8600.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa IA',0); INSERT INTO "usage" VALUES('EPSG','10679','concatenated_operation','EPSG','8587','EPSG','1384','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8588','NAD27 to NAD83(HARN) (40)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8608.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa MN',0); INSERT INTO "usage" VALUES('EPSG','10680','concatenated_operation','EPSG','8588','EPSG','1392','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8589','NAD27 to NAD83(HARN) (41)','May be taken as approximate transformation NAD27 to WGS 84 - see code 8610.','EPSG','4267','EPSG','4152',0.2,'NGS-Usa MO',0); INSERT INTO "usage" VALUES('EPSG','10681','concatenated_operation','EPSG','8589','EPSG','1394','EPSG','1032'); INSERT INTO "concatenated_operation" VALUES('EPSG','8590','NAD27 to WGS 84 (37)','Transformation steps are from NAD27 to NAD83(HARN) (1) (code 8460) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa AL',0); INSERT INTO "usage" VALUES('EPSG','10682','concatenated_operation','EPSG','8590','EPSG','1372','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8591','NAD27 to WGS 84 (38)','Transformation steps are from NAD27 to NAD83(HARN) (2) (code 8461) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa AZ',0); INSERT INTO "usage" VALUES('EPSG','10683','concatenated_operation','EPSG','8591','EPSG','1373','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8592','NAD27 to WGS 84 (39)','Transformation steps are from NAD27 to NAD83(HARN) (38) (code 8586) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa AR',0); INSERT INTO "usage" VALUES('EPSG','10684','concatenated_operation','EPSG','8592','EPSG','1374','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8593','NAD27 to WGS 84 (40)','Transformation steps are from NAD27 to NAD83(HARN) (3) (code 8462) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa CA n',0); INSERT INTO "usage" VALUES('EPSG','10685','concatenated_operation','EPSG','8593','EPSG','2297','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8594','NAD27 to WGS 84 (41)','Transformation steps are from NAD27 to NAD83(HARN) (4) (code 8463) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa CA s',0); INSERT INTO "usage" VALUES('EPSG','10686','concatenated_operation','EPSG','8594','EPSG','2298','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8595','NAD27 to WGS 84 (42)','Transformation steps are from NAD27 to NAD83(HARN) (5) (code 8464) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa CO',0); INSERT INTO "usage" VALUES('EPSG','10687','concatenated_operation','EPSG','8595','EPSG','1376','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8596','NAD27 to WGS 84 (43)','Transformation steps are from NAD27 to NAD83(HARN) (7) (code 8466) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa FL',0); INSERT INTO "usage" VALUES('EPSG','10688','concatenated_operation','EPSG','8596','EPSG','1379','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8597','NAD27 to WGS 84 (44)','Transformation steps are from NAD27 to NAD83(HARN) (6) (code 8465) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa GA',0); INSERT INTO "usage" VALUES('EPSG','10689','concatenated_operation','EPSG','8597','EPSG','1380','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8598','NAD27 to WGS 84 (45)','Transformation steps are from NAD27 to NAD83(HARN) (36) (code 8553) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa IL',0); INSERT INTO "usage" VALUES('EPSG','10690','concatenated_operation','EPSG','8598','EPSG','1382','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8599','NAD27 to WGS 84 (46)','Transformation steps are from NAD27 to NAD83(HARN) (30) (code 8509) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa IN',0); INSERT INTO "usage" VALUES('EPSG','10691','concatenated_operation','EPSG','8599','EPSG','1383','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8600','NAD27 to WGS 84 (47)','Transformation steps are from NAD27 to NAD83(HARN) (39) (code 8587) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa IA',0); INSERT INTO "usage" VALUES('EPSG','10692','concatenated_operation','EPSG','8600','EPSG','1384','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8601','NAD27 to WGS 84 (48)','Transformation steps are from NAD27 to NAD83(HARN) (31) (code 8510) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa KS',0); INSERT INTO "usage" VALUES('EPSG','10693','concatenated_operation','EPSG','8601','EPSG','1385','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8602','NAD27 to WGS 84 (49)','Transformation steps are from NAD27 to NAD83(HARN) (10) (code 8469) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa KY',0); INSERT INTO "usage" VALUES('EPSG','10694','concatenated_operation','EPSG','8602','EPSG','1386','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8603','NAD27 to WGS 84 (50)','Transformation steps are from NAD27 to NAD83(HARN) (11) (code 8470) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa LA',0); INSERT INTO "usage" VALUES('EPSG','10695','concatenated_operation','EPSG','8603','EPSG','1387','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8604','NAD27 to WGS 84 (51)','Transformation steps are from NAD27 to NAD83(HARN) (13) (code 8472) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa ME',0); INSERT INTO "usage" VALUES('EPSG','10696','concatenated_operation','EPSG','8604','EPSG','1388','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8605','NAD27 to WGS 84 (52)','Transformation steps are from NAD27 to NAD83(HARN) (12) (code 8471) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa DE MD',0); INSERT INTO "usage" VALUES('EPSG','10697','concatenated_operation','EPSG','8605','EPSG','2377','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8606','NAD27 to WGS 84 (53)','Transformation steps are from NAD27 to NAD83(HARN) (17) (code 8476) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa NewEng',0); INSERT INTO "usage" VALUES('EPSG','10698','concatenated_operation','EPSG','8606','EPSG','2378','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8607','NAD27 to WGS 84 (54)','Transformation steps are from NAD27 to NAD83(HARN) (14) (code 8473) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa MI',0); INSERT INTO "usage" VALUES('EPSG','10699','concatenated_operation','EPSG','8607','EPSG','1391','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8608','NAD27 to WGS 84 (55)','Transformation steps are from NAD27 to NAD83(HARN) (40) (code 8588) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa MN',0); INSERT INTO "usage" VALUES('EPSG','10700','concatenated_operation','EPSG','8608','EPSG','1392','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8609','NAD27 to WGS 84 (56)','Transformation steps are from NAD27 to NAD83(HARN) (15) (code 8474) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa MS',0); INSERT INTO "usage" VALUES('EPSG','10701','concatenated_operation','EPSG','8609','EPSG','1393','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8610','NAD27 to WGS 84 (57)','Transformation steps are from NAD27 to NAD83(HARN) (41) (code 8589) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa MO',0); INSERT INTO "usage" VALUES('EPSG','10702','concatenated_operation','EPSG','8610','EPSG','1394','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8611','NAD27 to WGS 84 (58)','Transformation steps are from NAD27 to NAD83(HARN) (8) (code 8467) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa ID MT e',0); INSERT INTO "usage" VALUES('EPSG','10703','concatenated_operation','EPSG','8611','EPSG','2382','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8612','NAD27 to WGS 84 (59)','Transformation steps are from NAD27 to NAD83(HARN) (9) (code 8468) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa ID MT w',0); INSERT INTO "usage" VALUES('EPSG','10704','concatenated_operation','EPSG','8612','EPSG','2383','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8613','NAD27 to WGS 84 (60)','Transformation steps are from NAD27 to NAD83(HARN) (16) (code 8475) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa NE',0); INSERT INTO "usage" VALUES('EPSG','10705','concatenated_operation','EPSG','8613','EPSG','1396','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8614','NAD27 to WGS 84 (61)','Transformation steps are from NAD27 to NAD83(HARN) (32) (code 8511) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa NV',0); INSERT INTO "usage" VALUES('EPSG','10706','concatenated_operation','EPSG','8614','EPSG','1397','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8615','NAD27 to WGS 84 (62)','Transformation steps are from NAD27 to NAD83(HARN) (37) (code 8554) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa NJ',0); INSERT INTO "usage" VALUES('EPSG','10707','concatenated_operation','EPSG','8615','EPSG','1399','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8616','NAD27 to WGS 84 (63)','Transformation steps are from NAD27 to NAD83(HARN) (18) (code 8477) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa NM',0); INSERT INTO "usage" VALUES('EPSG','10708','concatenated_operation','EPSG','8616','EPSG','1400','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8617','NAD27 to WGS 84 (64)','Transformation steps are from NAD27 to NAD83(HARN) (19) (code 8478) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa NY',0); INSERT INTO "usage" VALUES('EPSG','10709','concatenated_operation','EPSG','8617','EPSG','1401','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8618','NAD27 to WGS 84 (65)','Transformation steps are from NAD27 to NAD83(HARN) (20) (code 8479) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa ND',0); INSERT INTO "usage" VALUES('EPSG','10710','concatenated_operation','EPSG','8618','EPSG','1403','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8619','NAD27 to WGS 84 (66)','Transformation steps are from NAD27 to NAD83(HARN) (33) (code 8512) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa OH',0); INSERT INTO "usage" VALUES('EPSG','10711','concatenated_operation','EPSG','8619','EPSG','1404','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8620','NAD27 to WGS 84 (67)','Transformation steps are from NAD27 to NAD83(HARN) (21) (code 8480) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa OK',0); INSERT INTO "usage" VALUES('EPSG','10712','concatenated_operation','EPSG','8620','EPSG','1405','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8621','NAD27 to WGS 84 (68)','Transformation steps are from NAD27 to NAD83(HARN) (27) (code 8487) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa OR WA',0); INSERT INTO "usage" VALUES('EPSG','10713','concatenated_operation','EPSG','8621','EPSG','2381','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8622','NAD27 to WGS 84 (69)','Transformation steps are from NAD27 to NAD83(HARN) (22) (code 6739) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa SD',0); INSERT INTO "usage" VALUES('EPSG','10714','concatenated_operation','EPSG','8622','EPSG','1410','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8623','NAD27 to WGS 84 (70)','Transformation steps are from NAD27 to NAD83(HARN) (23) (code 8483) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa TN',0); INSERT INTO "usage" VALUES('EPSG','10715','concatenated_operation','EPSG','8623','EPSG','1411','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8624','NAD27 to WGS 84 (71)','Transformation steps are from NAD27 to NAD83(HARN) (24) (code 8484) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa TX e',0); INSERT INTO "usage" VALUES('EPSG','10716','concatenated_operation','EPSG','8624','EPSG','2379','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8625','NAD27 to WGS 84 (72)','Transformation steps are from NAD27 to NAD83(HARN) (25) (code 8485) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa TX w',0); INSERT INTO "usage" VALUES('EPSG','10717','concatenated_operation','EPSG','8625','EPSG','2380','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8626','NAD27 to WGS 84 (73)','Transformation steps are from NAD27 to NAD83(HARN) (34) (code 8513) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa UT',0); INSERT INTO "usage" VALUES('EPSG','10718','concatenated_operation','EPSG','8626','EPSG','1413','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8627','NAD27 to WGS 84 (74)','Transformation steps are from NAD27 to NAD83(HARN) (26) (code 8486) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa VA',0); INSERT INTO "usage" VALUES('EPSG','10719','concatenated_operation','EPSG','8627','EPSG','1415','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8628','NAD27 to WGS 84 (75)','Transformation steps are from NAD27 to NAD83(HARN) (35) (code 8514) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa WV',0); INSERT INTO "usage" VALUES('EPSG','10720','concatenated_operation','EPSG','8628','EPSG','1417','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8629','NAD27 to WGS 84 (76)','Transformation steps are from NAD27 to NAD83(HARN) (28) (code 8488) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa WI',0); INSERT INTO "usage" VALUES('EPSG','10721','concatenated_operation','EPSG','8629','EPSG','1418','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8630','NAD27 to WGS 84 (77)','Transformation steps are from NAD27 to NAD83(HARN) (29) (code 8489) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','4267','EPSG','4326',1.5,'EPSG-Usa WY',0); INSERT INTO "usage" VALUES('EPSG','10722','concatenated_operation','EPSG','8630','EPSG','1419','EPSG','1252'); INSERT INTO "concatenated_operation" VALUES('EPSG','8631','Garoua to WGS 84 (1)','','EPSG','4197','EPSG','4326',6.0,'EPSG-Cmr',0); INSERT INTO "usage" VALUES('EPSG','10723','concatenated_operation','EPSG','8631','EPSG','2590','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8632','Kousseri to WGS 84 (1)','','EPSG','4198','EPSG','4326',6.0,'EPSG-Cmr',0); INSERT INTO "usage" VALUES('EPSG','10724','concatenated_operation','EPSG','8632','EPSG','2591','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8633','Yoff to WGS 84 (1)','Derived via WGS72. Can be used as a single positon vector transformation with parameter vaues of dX = -37 m, dY = +157 m, dZ = +89.5 m, rX = rY = 0 sec, rZ = 0.554 sec, dS = 0.219 ppm','EPSG','4310','EPSG','4326',26.0,'EPSG-SEN',0); INSERT INTO "usage" VALUES('EPSG','10725','concatenated_operation','EPSG','8633','EPSG','1207','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8634','Beduaram to WGS 84 (1)','Derived via WGS72BE. Can be used as a single positon vector transformation with parameter vaues of dX = -101 m, dY = -111 m, dZ = +188.9 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm','EPSG','4213','EPSG','4326',16.0,'ELF-Ner SE',0); INSERT INTO "usage" VALUES('EPSG','10726','concatenated_operation','EPSG','8634','EPSG','2771','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8635','NAD27 to NAD83(CSRS) (3)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 8585.','EPSG','4267','EPSG','4617',2.5,'EPSG-Can AB',1); INSERT INTO "usage" VALUES('EPSG','10727','concatenated_operation','EPSG','8635','EPSG','2376','EPSG','1151'); INSERT INTO "concatenated_operation" VALUES('EPSG','8636','Carthage (Paris) to WGS 84 (1)','','EPSG','4816','EPSG','4326',14.0,'EPSG-Tun',0); INSERT INTO "usage" VALUES('EPSG','10728','concatenated_operation','EPSG','8636','EPSG','1618','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8637','Lisbon (Lisbon) to WGS 84 (1)','','EPSG','4803','EPSG','4326',NULL,'EPSG-Prt',1); INSERT INTO "usage" VALUES('EPSG','10729','concatenated_operation','EPSG','8637','EPSG','1294','EPSG','1042'); INSERT INTO "concatenated_operation" VALUES('EPSG','8638','Makassar (Jakarta) to WGS 84 (1)','','EPSG','4804','EPSG','4326',999.0,'EPSG - Idn Sul SW',0); INSERT INTO "usage" VALUES('EPSG','10730','concatenated_operation','EPSG','8638','EPSG','1316','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8639','NGO 1948 (Oslo) to WGS 84 (1)','','EPSG','4817','EPSG','4326',3.0,'EPSG-Nor',0); INSERT INTO "usage" VALUES('EPSG','10731','concatenated_operation','EPSG','8639','EPSG','1352','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8640','Nord Sahara 1959 (Paris) to WGS 84 (1)','','EPSG','4819','EPSG','4326',NULL,'EPSG-Dza',1); INSERT INTO "usage" VALUES('EPSG','10732','concatenated_operation','EPSG','8640','EPSG','1026','EPSG','1160'); INSERT INTO "concatenated_operation" VALUES('EPSG','8641','Segara (Jakarta) to WGS 84 (1)','','EPSG','4820','EPSG','4326',999.0,'EPSG-Idn Kal SW',0); INSERT INTO "usage" VALUES('EPSG','10733','concatenated_operation','EPSG','8641','EPSG','1360','EPSG','1153'); INSERT INTO "concatenated_operation" VALUES('EPSG','8642','S-JTSK (Ferro) to WGS 84 (1)','Replaced by S-JTSK (Ferro) to WGS 84 (3) (code 5242) in 2009.','EPSG','4818','EPSG','4326',1.0,'EPSG-Cze',0); INSERT INTO "usage" VALUES('EPSG','10734','concatenated_operation','EPSG','8642','EPSG','1079','EPSG','1041'); INSERT INTO "concatenated_operation" VALUES('EPSG','8643','Greek to WGS 84 (1)','','EPSG','4120','EPSG','4326',6.0,'EPSG-Grc',0); INSERT INTO "usage" VALUES('EPSG','10735','concatenated_operation','EPSG','8643','EPSG','3254','EPSG','1045'); INSERT INTO "concatenated_operation" VALUES('EPSG','8644','Greek (Athens) to WGS 84 (1)','','EPSG','4815','EPSG','4326',5.0,'EPSG-Grc',0); INSERT INTO "usage" VALUES('EPSG','10736','concatenated_operation','EPSG','8644','EPSG','3254','EPSG','1045'); INSERT INTO "concatenated_operation" VALUES('EPSG','8645','MGI (Ferro) to WGS 84 (2)','','EPSG','4805','EPSG','4326',NULL,'BEV-Aut',1); INSERT INTO "usage" VALUES('EPSG','10737','concatenated_operation','EPSG','8645','EPSG','1037','EPSG','1042'); INSERT INTO "concatenated_operation" VALUES('EPSG','8646','Manoca 1962 to WGS 84 (1)','Derived via WGS72BE. Can be used as a single positon vector transformation with parameter vaues of dX = -56.7 m, dY = -171.8 m, dZ = -40.6 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm','EPSG','4193','EPSG','4326',NULL,'OGP-Cmr',1); INSERT INTO "usage" VALUES('EPSG','10738','concatenated_operation','EPSG','8646','EPSG','2555','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8647','NAD27 to WGS 84 (78)','','EPSG','4267','EPSG','4326',3.0,'EPSG-Can E Off',0); INSERT INTO "usage" VALUES('EPSG','10739','concatenated_operation','EPSG','8647','EPSG','2831','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8648','Lisbon 1890 (Lisbon) to WGS 84 (1)','','EPSG','4904','EPSG','4326',5.0,'EPSG-Prt 5m',0); INSERT INTO "usage" VALUES('EPSG','10740','concatenated_operation','EPSG','8648','EPSG','1294','EPSG','1157'); INSERT INTO "concatenated_operation" VALUES('EPSG','8649','Lisbon 1890 (Lisbon) to WGS 84 (2)','','EPSG','4904','EPSG','4326',1.0,'EPSG-Prt 1m',0); INSERT INTO "usage" VALUES('EPSG','10741','concatenated_operation','EPSG','8649','EPSG','1294','EPSG','1158'); INSERT INTO "concatenated_operation" VALUES('EPSG','8650','Palestine 1923 to WGS 84 (2)','Accuracy: 1m to north and 10m to south of east-west line through Beersheba (31°15''N). Can be implemented as a geocentric translation tfm with param. Values dX = -229m, dY = -67m, dZ= +277m.','EPSG','4281','EPSG','4326',2.5,'SoI-Isr',0); INSERT INTO "usage" VALUES('EPSG','10742','concatenated_operation','EPSG','8650','EPSG','2603','EPSG','1153'); INSERT INTO "concatenated_operation" VALUES('EPSG','8651','Vientiane 1982 to WGS 84 (1)','Can be implemented as a geocentric translation tfm with param. values dX = 42.358m, dY = -124.688m, dZ= -37.366m.','EPSG','4676','EPSG','4326',6.0,'EPSG-Lao',0); INSERT INTO "usage" VALUES('EPSG','10743','concatenated_operation','EPSG','8651','EPSG','1138','EPSG','1045'); INSERT INTO "concatenated_operation" VALUES('EPSG','8652','Lao 1993 to WGS 84 (1)','Can be implemented as a geocentric translation tfm with param. values dX = 43.933m, dY = -129.593m, dZ= -39.331m.','EPSG','4677','EPSG','4326',6.0,'EPSG-Lao',0); INSERT INTO "usage" VALUES('EPSG','10744','concatenated_operation','EPSG','8652','EPSG','1138','EPSG','1045'); INSERT INTO "concatenated_operation" VALUES('EPSG','8655','Manoca 1962 to WGS 84 (2)','Derived via WGS 72BE. Can be implemented as a single positon vector transformation with parameter vaues of dX = -56.7 m, dY = -171.8 m, dZ = -38.7 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm.','EPSG','4193','EPSG','4326',6.0,'OGP-Cmr',0); INSERT INTO "usage" VALUES('EPSG','10747','concatenated_operation','EPSG','8655','EPSG','2555','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8656','Mhast (offshore) to WGS 84 (1)','Derived via WGS 72BE. Can be implemented as a single positon vector transformation with parameter vaues of dX = -255.0 m, dY = -29.0 m, dZ = -103.1 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm.','EPSG','4705','EPSG','4326',11.0,'OGP-Ago Cab',0); INSERT INTO "usage" VALUES('EPSG','10748','concatenated_operation','EPSG','8656','EPSG','3180','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8657','Egypt Gulf of Suez S-650 TL to WGS 84 (1)','Can be implemented as a single positon vector transformation with parameter vaues of dX = -123.0 m, dY = 98.0 m, dZ = 3.9 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm. Replaced by Egypt Gulf of Suez S-650 TL to WGS 84 (2) (tfm code 15846).','EPSG','4706','EPSG','4326',6.0,'OGP-Egy GoS',0); INSERT INTO "usage" VALUES('EPSG','10749','concatenated_operation','EPSG','8657','EPSG','2341','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8659','Kertau (RSO) to WGS 84 (1)','Step 1 is necessary to rescale the grid units before using step 2.','EPSG','4751','EPSG','4326',15.0,'OGP-Mys',0); INSERT INTO "usage" VALUES('EPSG','10751','concatenated_operation','EPSG','8659','EPSG','1309','EPSG','1164'); INSERT INTO "concatenated_operation" VALUES('EPSG','9091','ITRF97 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4918','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); INSERT INTO "usage" VALUES('EPSG','10905','concatenated_operation','EPSG','9091','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9092','ITRF2000 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4919','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); INSERT INTO "usage" VALUES('EPSG','10906','concatenated_operation','EPSG','9092','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9093','ITRF2005 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4896','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); INSERT INTO "usage" VALUES('EPSG','10907','concatenated_operation','EPSG','9093','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9094','ITRF2008 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. Replaced by concatenated operation ITRF2008 to NZGD2000 (2) (CT code 9095) which uses the 2013-08-01 model. See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); INSERT INTO "usage" VALUES('EPSG','10908','concatenated_operation','EPSG','9094','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9095','ITRF2008 to NZGD2000 (2)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (1) (CT code 9094). Replaced by concatenated op. ITRF2008 to NZGD2000 (3) (CT code 9096). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2013-08-01',0); INSERT INTO "usage" VALUES('EPSG','10909','concatenated_operation','EPSG','9095','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9096','ITRF2008 to NZGD2000 (3)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (2) (CT code 9095). Replaced by concatenated op. ITRF2008 to NZGD2000 (4) (CT code 9097). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2014-02-01',0); INSERT INTO "usage" VALUES('EPSG','10910','concatenated_operation','EPSG','9096','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9097','ITRF2008 to NZGD2000 (4)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (3) (CT code 9096). Replaced by concatenated op. ITRF2008 to NZGD2000 (5) (CT code 9098). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2015-01-01',0); INSERT INTO "usage" VALUES('EPSG','10911','concatenated_operation','EPSG','9097','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9098','ITRF2008 to NZGD2000 (5)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (4) (CT code 9097). Replaced by concatenated op. ITRF2008 to NZGD2000 (6) (CT code 9099). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2016-07-01',0); INSERT INTO "usage" VALUES('EPSG','10912','concatenated_operation','EPSG','9098','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9099','ITRF2008 to NZGD2000 (6)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (5) (CT code 9098). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2017-12-01',0); INSERT INTO "usage" VALUES('EPSG','10913','concatenated_operation','EPSG','9099','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9100','ITRF2014 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. Replaced by 2017-12-01 model (CT code 9101). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2016-07-01',0); INSERT INTO "usage" VALUES('EPSG','10914','concatenated_operation','EPSG','9100','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9101','ITRF2014 to NZGD2000 (2)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2014 to NZGD2000 (1) (CT code 9100). Replaced by concatenated op. ITRF2014 to NZGD2000 (3) (CT code 9102). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2017-12-01',0); INSERT INTO "usage" VALUES('EPSG','10915','concatenated_operation','EPSG','9101','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9102','ITRF2014 to NZGD2000 (3)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2014 to NZGD2000 (2) (CT code 9101). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2018-07-01',0); INSERT INTO "usage" VALUES('EPSG','10916','concatenated_operation','EPSG','9102','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9103','NAD27 to ITRF2014 (1)','For use with legacy data - see CT code 9104 for alternative for new areas. Note that steps 1 and 2 are documented in the geog2D domain, steps 3 and 4 in the geocentric domain. Steps 3 and 4 may be implemented in one operation using CT code 8970.','EPSG','4267','EPSG','7789',1.5,'IOGP-Usa GoM legacy',0); INSERT INTO "usage" VALUES('EPSG','10917','concatenated_operation','EPSG','9103','EPSG','3357','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','9104','NAD27 to ITRF2014 (2)','For use in new operations - see CT code 9103 for alternative for legacy data. Note that steps 1 to 5 are documented in the geog2D domain, steps 6 and 7 in the geocentric domain. Steps 6 and 7 may be implemented in one operation using CT code 8970.','EPSG','4267','EPSG','7789',0.2,'IOGP-Usa GoM non-legacy',0); INSERT INTO "usage" VALUES('EPSG','10918','concatenated_operation','EPSG','9104','EPSG','3357','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','9336','NAD27 to NAD83(CSRS)v4 (3)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 8585.','EPSG','4267','EPSG','8246',2.5,'EPSG-Can AB',0); INSERT INTO "usage" VALUES('EPSG','14011','concatenated_operation','EPSG','9336','EPSG','2376','EPSG','1151'); INSERT INTO "concatenated_operation" VALUES('EPSG','9337','NTF (Paris) to RGF93 v1 (1)','See transformation code 7811 for an alternative which uses the NTv2 method as an emulation of the geocentric interpolation in the second step.','EPSG','4807','EPSG','4171',1.0,'IOGP-Fra',0); INSERT INTO "usage" VALUES('EPSG','14012','concatenated_operation','EPSG','9337','EPSG','3694','EPSG','1041'); INSERT INTO "concatenated_operation" VALUES('EPSG','9499','ETRS89 to GHA height (2)','This concatenated operation gives the same result as the HoehenGrid-plus offset from ETRS89 to GHA height. HoehenGrid-plus is implemented in BEV-Transformator using MGI (CRS 4312) as the interpolation CRS for the grid','EPSG','4937','EPSG','5778',0.07,'BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','14958','concatenated_operation','EPSG','9499','EPSG','1037','EPSG','1133'); INSERT INTO "concatenated_operation" VALUES('EPSG','9683','ITRF2014 to GDA94 (2)','See ITRF2014 to GDA94 (1) (CT 9682) for conformal-only alternative (i.e. without distortion modelling).','EPSG','9000','EPSG','4283',0.06,'ICSM-Aus Conf+Dist',0); INSERT INTO "usage" VALUES('EPSG','14962','concatenated_operation','EPSG','9683','EPSG','2575','EPSG','1234'); INSERT INTO "concatenated_operation" VALUES('EPSG','9685','ATRF2014 to GDA94 (2)','See ATRF2014 to GDA94 (1) (CT 9684) for conformal-only alternative (i.e. without distortion modelling).','EPSG','9309','EPSG','4283',0.06,'ICSM-Aus Conf+Dist',0); INSERT INTO "usage" VALUES('EPSG','14963','concatenated_operation','EPSG','9685','EPSG','2575','EPSG','1234'); INSERT INTO "concatenated_operation" VALUES('EPSG','9687','GDA94 to WGS 84 (G1762) (2)','See GDA94 to WGS 84 (G1762) (1) (CT code 9686) for conformal-only alternative (i.e. without distortion modelling).','EPSG','4283','EPSG','9057',0.25,'ICSM-Aus Conf+Dist',0); INSERT INTO "usage" VALUES('EPSG','14964','concatenated_operation','EPSG','9687','EPSG','2575','EPSG','1234'); INSERT INTO "concatenated_operation" VALUES('EPSG','9731','ETRS89 to ETRS89 + Catania 1965 height (1)','','EPSG','4937','EPSG','9724',0.035,'IGM-Ita 2005 Sicily',1); INSERT INTO "usage" VALUES('EPSG','15285','concatenated_operation','EPSG','9731','EPSG','2340','EPSG','1270'); INSERT INTO "concatenated_operation" VALUES('EPSG','9750','ETRS89 to Catania 1965 height (1)','','EPSG','4937','EPSG','9721',0.035,'IGM-Ita 2005 Sicily',0); INSERT INTO "usage" VALUES('EPSG','15385','concatenated_operation','EPSG','9750','EPSG','2340','EPSG','1133'); INSERT INTO "concatenated_operation" VALUES('EPSG','10146','INAGeoid2020 v1 height to INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9471','EPSG','20036',0.2,'BIG-Idn 2022',1); INSERT INTO "usage" VALUES('EPSG','18452','concatenated_operation','EPSG','10146','EPSG','1122','EPSG','1178'); INSERT INTO "concatenated_operation" VALUES('EPSG','10392','Cascais height to ZH Portugal depth (1)','The Zero Hidrografico (CD Portugal) surface is defined to be 2.0m below the Cascais vertical reference surface off mainland Portugal and 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon (see CT 10393).','EPSG','5780','EPSG','10349',0.0,'IH-Por mainland',0); INSERT INTO "usage" VALUES('EPSG','20319','concatenated_operation','EPSG','10392','EPSG','4691','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10393','Cascais height to ZH Portugal depth (2)','The Zero Hidrografico surface is defined to be 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon and 2.0m below the Cascais vertical reference surface offshore mainland Portugal (see CT 10392).','EPSG','5780','EPSG','10349',0.0,'IH-Por Tagus',0); INSERT INTO "usage" VALUES('EPSG','20320','concatenated_operation','EPSG','10393','EPSG','4692','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10394','Cais da Pontinha height to ZH Portugal depth (1)','Offshore of Madeira, Desertas and Selvagens islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.4m below the Cais da Pontinha vertical reference surface.','EPSG','6178','EPSG','10349',0.0,'IH-Por Madeira',0); INSERT INTO "usage" VALUES('EPSG','20071','concatenated_operation','EPSG','10394','EPSG','4695','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10395','Cais da Vila height to ZH Portugal depth (1)','Offshore of Porto Santo island the Zero Hidrografico (CD Portugal) surface is defined to be 1.4m below the Cais da Vila vertical reference surface.','EPSG','6179','EPSG','10349',0.0,'IH-Por Porto Santo',0); INSERT INTO "usage" VALUES('EPSG','20105','concatenated_operation','EPSG','10395','EPSG','4696','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10396','Santa Cruz das Flores height to ZH Portugal depth (1)','Offshore of Flores and Corvo islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Santa Cruz das Flores vertical reference surface.','EPSG','6185','EPSG','10349',0.0,'IH-Por Flores',0); INSERT INTO "usage" VALUES('EPSG','20073','concatenated_operation','EPSG','10396','EPSG','4697','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10397','Horta height to ZH Portugal depth (1)','Offshore of Faial island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Horta vertical reference surface.','EPSG','6181','EPSG','10349',0.0,'IH-Por Faial',0); INSERT INTO "usage" VALUES('EPSG','20321','concatenated_operation','EPSG','10397','EPSG','4698','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10398','Cais da Madalena height to ZH Portugal depth (1)','Offshore of Pico island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Madalena vertical reference surface.','EPSG','6182','EPSG','10349',0.0,'IH-Por Pico',0); INSERT INTO "usage" VALUES('EPSG','20322','concatenated_operation','EPSG','10398','EPSG','4699','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10399','Cais das Velas height to ZH Portugal depth (1)','Offshore of S. Jorge island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais das Velas vertical reference surface.','EPSG','6180','EPSG','10349',0.0,'IH-Por S Jorge',0); INSERT INTO "usage" VALUES('EPSG','20081','concatenated_operation','EPSG','10399','EPSG','4700','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10400','Santa Cruz da Graciosa height to ZH Portugal depth (1)','Offshore of Graciosa island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Santa Cruz da Graciosa vertical reference surface.','EPSG','6183','EPSG','10349',0.0,'IH-Por Graciosa',0); INSERT INTO "usage" VALUES('EPSG','20106','concatenated_operation','EPSG','10400','EPSG','4734','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10409','Cais da Figueirinha height to ZH Portugal depth (1)','Offshore of Terceira island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Figueirinha vertical reference surface.','EPSG','6184','EPSG','10349',0.0,'IH-Por Terceira',0); INSERT INTO "usage" VALUES('EPSG','20077','concatenated_operation','EPSG','10409','EPSG','4735','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10410','Ponta Delgada height to ZH Portugal depth (1)','Offshore of S. Miguel island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Ponta Delgada vertical reference surface.','EPSG','6187','EPSG','10349',0.0,'IH-Por S Miguel',0); INSERT INTO "usage" VALUES('EPSG','20084','concatenated_operation','EPSG','10410','EPSG','4736','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10411','Cais da Vila do Porto height to ZH Portugal depth (1)','Offshore of Santa Maria and Formigas islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Vila do Porto vertical reference surface.','EPSG','6186','EPSG','10349',0.0,'IH-Por Santa Maria',0); INSERT INTO "usage" VALUES('EPSG','20102','concatenated_operation','EPSG','10411','EPSG','4737','EPSG','1198'); INSERT INTO "concatenated_operation" VALUES('EPSG','10495','ETRS89 + DVR90(2002) height to ETRS89 + DVR90(2013) height (1)','DVR90(2002) height and DVR90(2013) height may be considered to be equivalent for applications with accuracies of 5cm or worse. At this 5cm accuracy, data referenced to either CRS may be merged without transformation. ','EPSG','10486','EPSG','10487',0.06,'SDFI-Dnk 2013',0); INSERT INTO "usage" VALUES('EPSG','20518','concatenated_operation','EPSG','10495','EPSG','3237','EPSG','1079'); INSERT INTO "concatenated_operation" VALUES('EPSG','10496','ETRS89 + DVR90(2013) height to ETRS89 + DVR90(2023) height (1)','For applications with accuracies of 5cm or worse, DVR90(2013) height and DVR90(2023) height may be considered to be equivalent. At this 3cm accuracy, data referenced to either CRS may be merged without transformation. ','EPSG','10487','EPSG','10488',0.03,'SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','20516','concatenated_operation','EPSG','10496','EPSG','1080','EPSG','1273'); INSERT INTO "concatenated_operation" VALUES('EPSG','10616','SRGI2013 + INAGeoid2020 v1 height to SRGI2013 + INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9529','EPSG','20043',0.2,'BIG-Idn 2022',0); INSERT INTO "usage" VALUES('EPSG','21321','concatenated_operation','EPSG','10616','EPSG','1122','EPSG','1178'); INSERT INTO "concatenated_operation" VALUES('EPSG','10675','BES2020 Saba to Saba height (1)','This operation is not reversible because step 2 is not reversible. For a reversible alternative see BES2020 Saba to Saba + Saba height (1) (code 10755).','EPSG','10638','EPSG','10642',0.25,'NSGI-Bes Saba 2020',0); INSERT INTO "usage" VALUES('EPSG','21877','concatenated_operation','EPSG','10675','EPSG','4757','EPSG','1133'); INSERT INTO "concatenated_operation" VALUES('EPSG','10754','BES2020 Sint Eustatius to Sint Eustatius height (1)','This operation is not reversible because step 2 is not reversible. For a reversible alternative see BES2020 Sint Eustatius to Sint Eustatius + Sint Eustatius height (1) (code 10756).','EPSG','10738','EPSG','10740',0.25,'NSGI-Bes SEu 2020',0); INSERT INTO "usage" VALUES('EPSG','22322','concatenated_operation','EPSG','10754','EPSG','4788','EPSG','1133'); INSERT INTO "concatenated_operation" VALUES('EPSG','10755','BES2020 Saba to Saba + Saba height (1)','Reversible alternative to BES2020 Saba to Saba height (1) (code 10675).','EPSG','10638','EPSG','10643',0.25,'NSGI-Bes Saba 2020',0); INSERT INTO "usage" VALUES('EPSG','22323','concatenated_operation','EPSG','10755','EPSG','4757','EPSG','1270'); INSERT INTO "concatenated_operation" VALUES('EPSG','10756','BES2020 Sint Eustatius to Sint Eustatius + Sint Eustatius height (1)','Reversible alternative to BES2020 Sint Eustatius to Sint Eustatius height (1) (code 10754).','EPSG','10738','EPSG','10741',0.25,'NSGI-Bes SEu 2020',0); INSERT INTO "usage" VALUES('EPSG','22324','concatenated_operation','EPSG','10756','EPSG','4788','EPSG','1270'); INSERT INTO "concatenated_operation" VALUES('EPSG','10778','KKJ to EUREF-FIN (3)','Recommended transformation between KKJ and EUREF-FIN. Use this in preference to transformation KKJ to EUREF-FIN (2) (code 10098).','EPSG','4123','EPSG','10690',0.03,'NLS-FIN TINshift LatLon',0); INSERT INTO "usage" VALUES('EPSG','22361','concatenated_operation','EPSG','10778','EPSG','3333','EPSG','1273'); proj-9.6.0/data/sql/concatenated_operation_step.sql000664 001754 001755 00000126626 14764566077 022432 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',1,'EPSG','3895',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',2,'EPSG','1618',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',1,'EPSG','3913',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',2,'EPSG','3962',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',1,'EPSG','1461',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',2,'EPSG','1495',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',1,'EPSG','1672',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',2,'EPSG','1311',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',1,'EPSG','5134',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',2,'EPSG','5189',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',1,'EPSG','5134',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',2,'EPSG','5191',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',1,'EPSG','1884',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',2,'EPSG','4836',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',1,'EPSG','5238',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',2,'EPSG','5227',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',1,'EPSG','1884',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',2,'EPSG','5239',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',1,'EPSG','1756',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',2,'EPSG','1988',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',1,'EPSG','6712',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',2,'EPSG','6713',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',2,'EPSG','1496',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',1,'EPSG','1265',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',2,'EPSG','6873',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',1,'EPSG','1763',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',2,'EPSG','15958',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',1,'EPSG','7813',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',2,'EPSG','7964',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',1,'EPSG','7813',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',2,'EPSG','7966',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',1,'EPSG','7813',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',2,'EPSG','7969',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',1,'EPSG','7813',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',2,'EPSG','7970',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',1,'EPSG','7813',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',2,'EPSG','7971',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',2,'EPSG','7977',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',1,'EPSG','7980',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',2,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',1,'EPSG','7980',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',2,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',3,'EPSG','7813',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',1,'EPSG','1147',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',2,'EPSG','1146',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',1,'EPSG','1763',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',2,'EPSG','1193',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',1,'EPSG','1755',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',2,'EPSG','1125',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',1,'EPSG','1262',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',2,'EPSG','1169',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',1,'EPSG','1265',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',2,'EPSG','1227',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',1,'EPSG','1759',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',2,'EPSG','8452',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',1,'EPSG','1273',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',1,'EPSG','1763',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',2,'EPSG','1276',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',1,'EPSG','1763',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',2,'EPSG','1277',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',1,'EPSG','1278',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',1,'EPSG','1279',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',1,'EPSG','1280',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',1,'EPSG','1437',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',1,'EPSG','1274',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',2,'EPSG','1283',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',1,'EPSG','1266',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',2,'EPSG','1294',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',1,'EPSG','1297',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',2,'EPSG','1302',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',1,'EPSG','1298',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',2,'EPSG','1302',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',1,'EPSG','1299',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',2,'EPSG','1302',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',1,'EPSG','1300',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',2,'EPSG','1302',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',1,'EPSG','1301',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',2,'EPSG','1302',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',1,'EPSG','1309',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',1,'EPSG','1310',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',1,'EPSG','1312',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',1,'EPSG','1313',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',1,'EPSG','1757',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',2,'EPSG','1306',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',1,'EPSG','8361',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',2,'EPSG','8362',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',1,'EPSG','1454',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',1,'EPSG','1455',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',1,'EPSG','1456',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',1,'EPSG','1457',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',1,'EPSG','1451',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',1,'EPSG','1458',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',1,'EPSG','1459',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',1,'EPSG','1460',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',1,'EPSG','1461',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',1,'EPSG','1462',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',1,'EPSG','1463',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',1,'EPSG','1464',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',1,'EPSG','1472',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',2,'EPSG','1473',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',1,'EPSG','1599',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',2,'EPSG','1473',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',1,'EPSG','1600',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',2,'EPSG','1473',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',1,'EPSG','1601',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',2,'EPSG','1473',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',1,'EPSG','1602',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',2,'EPSG','1473',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',1,'EPSG','8365',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',2,'EPSG','8364',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',1,'EPSG','8364',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',2,'EPSG','8367',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',1,'EPSG','1506',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',1,'EPSG','1507',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',1,'EPSG','1509',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',2,'EPSG','1511',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',2,'EPSG','1474',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',2,'EPSG','1475',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',2,'EPSG','1476',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',2,'EPSG','1477',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',2,'EPSG','1478',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',2,'EPSG','1479',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',2,'EPSG','1480',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',2,'EPSG','1481',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',2,'EPSG','1482',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',2,'EPSG','1483',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',2,'EPSG','1484',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',2,'EPSG','1485',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',2,'EPSG','1486',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',2,'EPSG','1487',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',2,'EPSG','1488',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',2,'EPSG','1489',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',2,'EPSG','1490',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',2,'EPSG','1491',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',2,'EPSG','1492',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',2,'EPSG','1493',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',2,'EPSG','1494',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',2,'EPSG','1495',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',1,'EPSG','1747',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',2,'EPSG','1496',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',2,'EPSG','1497',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',2,'EPSG','1498',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',2,'EPSG','1499',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',2,'EPSG','1500',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',2,'EPSG','1501',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',2,'EPSG','1502',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',2,'EPSG','1503',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',2,'EPSG','1515',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',1,'EPSG','1243',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',2,'EPSG','1515',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',1,'EPSG','1454',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',2,'EPSG','1520',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',2,'EPSG','1521',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',2,'EPSG','1522',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',2,'EPSG','1523',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',2,'EPSG','1524',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',2,'EPSG','1525',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',2,'EPSG','1526',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',1,'EPSG','1528',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',2,'EPSG','1527',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',1,'EPSG','1539',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',2,'EPSG','1540',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',1,'EPSG','1541',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',1,'EPSG','1545',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',2,'EPSG','1237',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',2,'EPSG','1553',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',2,'EPSG','1554',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',1,'EPSG','1559',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',1,'EPSG','1560',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',1,'EPSG','1568',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',2,'EPSG','1565',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',1,'EPSG','1576',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',2,'EPSG','1473',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',1,'EPSG','1574',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',1,'EPSG','1572',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',2,'EPSG','1188',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',1,'EPSG','1584',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',1,'EPSG','1588',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',1,'EPSG','1570',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',1,'EPSG','1571',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',1,'EPSG','1591',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',1,'EPSG','1578',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',2,'EPSG','1580',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',1,'EPSG','1579',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',2,'EPSG','1580',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',1,'EPSG','1594',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',1,'EPSG','1595',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',1,'EPSG','1596',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',1,'EPSG','1593',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',2,'EPSG','1150',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',1,'EPSG','1611',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',2,'EPSG','1149',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',1,'EPSG','1616',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',2,'EPSG','1237',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',1,'EPSG','1454',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',2,'EPSG','1741',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',1,'EPSG','1461',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',2,'EPSG','1731',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',1,'EPSG','1313',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',2,'EPSG','1752',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',1,'EPSG','1313',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',2,'EPSG','1702',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',2,'EPSG','1704',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',2,'EPSG','1705',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',2,'EPSG','1706',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',2,'EPSG','1707',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',2,'EPSG','1717',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',2,'EPSG','1728',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',2,'EPSG','1708',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',2,'EPSG','1739',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',2,'EPSG','1750',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',2,'EPSG','1712',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',2,'EPSG','1714',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',2,'EPSG','1713',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',2,'EPSG','1748',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',2,'EPSG','1742',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',2,'EPSG','1709',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',2,'EPSG','1743',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',2,'EPSG','1718',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',2,'EPSG','1719',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',2,'EPSG','1721',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',2,'EPSG','1720',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',2,'EPSG','1725',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',2,'EPSG','1722',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',2,'EPSG','1710',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',2,'EPSG','1723',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',2,'EPSG','1711',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',2,'EPSG','1715',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',2,'EPSG','1716',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',2,'EPSG','1724',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',2,'EPSG','1744',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',2,'EPSG','1749',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',2,'EPSG','1726',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',2,'EPSG','1727',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',2,'EPSG','1729',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',2,'EPSG','1745',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',2,'EPSG','1730',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',2,'EPSG','1737',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',2,'EPSG','1732',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',2,'EPSG','1733',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',2,'EPSG','1734',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',2,'EPSG','1735',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',2,'EPSG','1746',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',2,'EPSG','1736',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',2,'EPSG','1747',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',2,'EPSG','1738',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',2,'EPSG','1740',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',1,'EPSG','1805',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',1,'EPSG','1806',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',1,'EPSG','1828',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',2,'EPSG','1238',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',1,'EPSG','1839',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',1,'EPSG','1313',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',2,'EPSG','1849',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',1,'EPSG','1881',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',2,'EPSG','1130',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',1,'EPSG','1756',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',2,'EPSG','1944',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',1,'EPSG','1260',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',2,'EPSG','1837',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',1,'EPSG','1762',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',2,'EPSG','1654',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',1,'EPSG','1882',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',2,'EPSG','1253',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',1,'EPSG','1883',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',2,'EPSG','1897',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',1,'EPSG','1884',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',2,'EPSG','1623',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',1,'EPSG','1891',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',2,'EPSG','1272',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',1,'EPSG','1761',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',2,'EPSG','1891',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',3,'EPSG','1272',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',1,'EPSG','1757',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',2,'EPSG','1618',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',1,'EPSG','1902',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',1,'EPSG','1313',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',2,'EPSG','1950',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',3,'EPSG','1946',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',1,'EPSG','1991',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',2,'EPSG','1986',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',1,'EPSG','1991',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',2,'EPSG','1990',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',1,'EPSG','1071',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',2,'EPSG','1073',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',1,'EPSG','1063',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',2,'EPSG','1065',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',1,'EPSG','1064',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',2,'EPSG','1065',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',1,'EPSG','1902',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',1,'EPSG','15790',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',1,'EPSG','15792',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',2,'EPSG','1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',1,'EPSG','15896',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',2,'EPSG','1158',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',1,'EPSG','9079',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',2,'EPSG','9084',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',1,'EPSG','9080',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',2,'EPSG','9084',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',1,'EPSG','9081',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',2,'EPSG','9084',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',1,'EPSG','9082',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',2,'EPSG','9084',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',1,'EPSG','9082',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',2,'EPSG','9085',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',1,'EPSG','9082',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',2,'EPSG','9086',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',1,'EPSG','9082',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',2,'EPSG','9087',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',1,'EPSG','9082',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',2,'EPSG','9088',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',1,'EPSG','9082',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',2,'EPSG','9089',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',1,'EPSG','9083',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',2,'EPSG','9088',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',1,'EPSG','9083',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',2,'EPSG','9089',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',1,'EPSG','9083',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',2,'EPSG','9090',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',1,'EPSG','1241',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',2,'EPSG','8971',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',3,'EPSG','7807',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',4,'EPSG','7790',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',1,'EPSG','8555',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',2,'EPSG','8556',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',3,'EPSG','8861',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',4,'EPSG','8862',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',5,'EPSG','8559',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',6,'EPSG','7807',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',7,'EPSG','7790',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',1,'EPSG','1313',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',2,'EPSG','9244',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',1,'EPSG','1763',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',2,'EPSG','9327',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',1,'EPSG','9276',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',2,'EPSG','9275',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',1,'EPSG','8049',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',2,'EPSG','8447',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',1,'EPSG','9459',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',2,'EPSG','8447',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',1,'EPSG','8447',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',2,'EPSG','8448',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',1,'EPSG','9729',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',2,'EPSG','9726',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',1,'EPSG','9727',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',2,'EPSG','9726',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',1,'EPSG','9629',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',2,'EPSG','10145',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',2,'EPSG','10380',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',2,'EPSG','10381',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',2,'EPSG','10382',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',2,'EPSG','10383',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',2,'EPSG','10384',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',2,'EPSG','10385',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',2,'EPSG','10386',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',2,'EPSG','10387',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',2,'EPSG','10388',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',2,'EPSG','10389',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',2,'EPSG','10390',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',1,'EPSG','7812',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',2,'EPSG','10391',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',1,'EPSG','10490',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',2,'EPSG','10492',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',1,'EPSG','10492',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',2,'EPSG','10494',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',1,'EPSG','9629',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',2,'EPSG','10145',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10675',1,'EPSG','10646',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10675',2,'EPSG','10657',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10754',1,'EPSG','10750',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10754',2,'EPSG','10752',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10755',1,'EPSG','10646',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10755',2,'EPSG','10658',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10756',1,'EPSG','10750',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10756',2,'EPSG','10753',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10778',1,'EPSG','18193',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10778',2,'EPSG','10703',NULL); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10778',3,'EPSG','16065',NULL); proj-9.6.0/data/sql/consistency_checks_triggers.sql000664 001754 001755 00000142226 14764566077 022450 0ustar00e012349e012349000000 000000 -- Insertion triggers that implement consistency checks across tables CREATE TRIGGER ellipsoid_insert_trigger BEFORE INSERT ON ellipsoid FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on ellipsoid violates constraint: uom should be of type ''length''') WHERE (SELECT type FROM unit_of_measure WHERE auth_name = NEW.uom_auth_name AND code = NEW.uom_code) != 'length'; END; CREATE TRIGGER usage_insert_trigger BEFORE INSERT ON usage FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on usage violates constraint: new entry refers to unexisting code') WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.object_table_name AND o.auth_name = NEW.object_auth_name AND o.code = NEW.object_code); SELECT RAISE(ABORT, 'insert on usage violates constraint: extent must not be deprecated when object is not deprecated') WHERE EXISTS ( SELECT 1 FROM extent JOIN object_view o WHERE NOT (o.table_name IN ('projected_crs', 'vertical_crs', 'vertical_datum', 'conversion') AND o.auth_name = 'ESRI') AND o.table_name = NEW.object_table_name AND o.auth_name = NEW.object_auth_name AND o.code = NEW.object_code AND extent.auth_name = NEW.extent_auth_name AND extent.code = NEW.extent_code AND extent.deprecated = 1 AND o.deprecated = 0); END; CREATE TRIGGER prime_meridian_insert_trigger BEFORE INSERT ON prime_meridian FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on prime_meridian violates constraint: uom should be of type ''angle''') WHERE (SELECT type FROM unit_of_measure WHERE auth_name = NEW.uom_auth_name AND code = NEW.uom_code) != 'angle'; END; CREATE TRIGGER geodetic_datum_insert_trigger BEFORE INSERT ON geodetic_datum FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on geodetic_datum violates constraint: ellipsoid must not be deprecated when geodetic_datum is not deprecated') WHERE EXISTS(SELECT 1 FROM ellipsoid WHERE ellipsoid.auth_name = NEW.ellipsoid_auth_name AND ellipsoid.code = NEW.ellipsoid_code AND ellipsoid.deprecated != 0) AND NEW.deprecated = 0; SELECT RAISE(ABORT, 'insert on geodetic_datum violates constraint: prime_meridian must not be deprecated when geodetic_datum is not deprecated') WHERE EXISTS(SELECT 1 FROM prime_meridian WHERE prime_meridian.auth_name = NEW.prime_meridian_auth_name AND prime_meridian.code = NEW.prime_meridian_code AND prime_meridian.deprecated != 0) AND NEW.deprecated = 0; SELECT RAISE(ABORT, 'frame_reference_epoch and ensemble_accuracy are mutually exclusive') WHERE NEW.frame_reference_epoch IS NOT NULL AND NEW.ensemble_accuracy IS NOT NULL; END; CREATE TRIGGER axis_insert_trigger BEFORE INSERT ON axis FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on axis violates constraint: coordinate_system_order should be <= coordinate_system.dimension') WHERE NEW.coordinate_system_order > (SELECT dimension FROM coordinate_system WHERE auth_name = NEW.coordinate_system_auth_name AND code = NEW.coordinate_system_code); SELECT RAISE(ABORT, 'insert on axis violates constraint: uom should be defined unless the coordinate system is ordinal') WHERE EXISTS(SELECT 1 FROM coordinate_system cs WHERE cs.type != 'ordinal' AND (NEW.uom_auth_name IS NULL OR NEW.uom_code IS NULL) AND cs.auth_name = NEW.coordinate_system_auth_name AND cs.code = NEW.coordinate_system_code); END; CREATE TRIGGER geodetic_crs_insert_trigger BEFORE INSERT ON geodetic_crs FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: (auth_name, code) must not already exist in crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code); SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: datum must not be deprecated when geodetic_crs is not deprecated') WHERE EXISTS(SELECT 1 FROM geodetic_datum datum WHERE datum.auth_name = NEW.datum_auth_name AND datum.code = NEW.datum_code AND datum.deprecated != 0) AND NEW.deprecated = 0 AND NEW.text_definition IS NOT NULL; SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.dimension must be 3 for type = ''geocentric''') WHERE NEW.type = 'geocentric' AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 3; SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.type must be ''Cartesian'' for type = ''geocentric''') WHERE NEW.type = 'geocentric' AND (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'Cartesian'; SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.type must be ''ellipsoidal'' for type = ''geographic 2D'' or ''geographic 3D''') WHERE NEW.type IN ('geographic 2D', 'geographic 3D') AND (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'ellipsoidal'; SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.dimension must be 2 for type = ''geographic 2D''') WHERE NEW.type = 'geographic 2D' AND NEW.deprecated != 1 AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 2; SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.dimension must be 3 for type = ''geographic 3D''') WHERE NEW.type = 'geographic 3D' AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 3; END; CREATE TRIGGER vertical_crs_insert_trigger BEFORE INSERT ON vertical_crs FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: (auth_name, code) must not already exist in crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code); SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0 AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF') AND NOT(NEW.auth_name = 'ESRI' and crs_view.table_name = 'geodetic_crs') -- some ESRI vertical CRS are an ellipsoidal height CRS derived from a geodetic CRS ); SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: datum must not be deprecated when vertical_crs is not deprecated') WHERE EXISTS(SELECT 1 FROM vertical_crs datum WHERE datum.auth_name = NEW.datum_auth_name AND datum.code = NEW.datum_code AND datum.deprecated != 0) AND NEW.deprecated = 0; SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: coordinate_system.type must be ''vertical''') WHERE (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'vertical'; SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: coordinate_system.dimension must be 1') WHERE (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 1; END; CREATE TRIGGER engineering_crs_insert_trigger BEFORE INSERT ON engineering_crs FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: (auth_name, code) must not already exist in crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code); SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0 ); SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: datum must not be deprecated when engineering_crs is not deprecated') WHERE EXISTS(SELECT 1 FROM engineering_crs datum WHERE datum.auth_name = NEW.datum_auth_name AND datum.code = NEW.datum_code AND datum.deprecated != 0) AND NEW.deprecated = 0; SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: coordinate_system.dimension must be 2 or 3') WHERE (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) NOT IN (2, 3); END; CREATE TRIGGER conversion_method_insert_trigger BEFORE INSERT ON conversion_method BEGIN SELECT RAISE(ABORT, 'insert on conversion violates constraint: method should be known') WHERE (NEW.auth_name || '_' || NEW.code || '_' || NEW.name) NOT IN ( 'EPSG_1024_Popular Visualisation Pseudo Mercator', 'EPSG_1026_Mercator (Spherical)', 'EPSG_1027_Lambert Azimuthal Equal Area (Spherical)', 'EPSG_1028_Equidistant Cylindrical', 'EPSG_1029_Equidistant Cylindrical (Spherical)', 'EPSG_1041_Krovak (North Orientated)', 'EPSG_1042_Krovak Modified', 'EPSG_1043_Krovak Modified (North Orientated)', 'EPSG_1051_Lambert Conic Conformal (2SP Michigan)', 'EPSG_1052_Colombia Urban', 'EPSG_1068_Height Depth Reversal', 'EPSG_1069_Change of Vertical Unit', 'EPSG_1104_Change of Vertical Unit', 'EPSG_1078_Equal Earth', 'EPSG_1102_Lambert Conic Conformal (1SP variant B)', 'EPSG_1111_Transverse Mercator 3D', 'EPSG_1119_Equidistant Conic', 'EPSG_1125_Azimuthal Equidistant', 'EPSG_1130_Local Orthographic', 'EPSG_9602_Geographic/geocentric conversions', 'EPSG_9659_Geographic3D to 2D conversion', 'EPSG_9801_Lambert Conic Conformal (1SP)', 'EPSG_9802_Lambert Conic Conformal (2SP)', 'EPSG_9803_Lambert Conic Conformal (2SP Belgium)', 'EPSG_9804_Mercator (variant A)', 'EPSG_9805_Mercator (variant B)', 'EPSG_9806_Cassini-Soldner', 'EPSG_9807_Transverse Mercator', 'EPSG_9808_Transverse Mercator (South Orientated)', 'EPSG_9809_Oblique Stereographic', 'EPSG_9810_Polar Stereographic (variant A)', 'EPSG_9811_New Zealand Map Grid', 'EPSG_9812_Hotine Oblique Mercator (variant A)', 'EPSG_9813_Laborde Oblique Mercator', 'EPSG_9815_Hotine Oblique Mercator (variant B)', 'EPSG_9816_Tunisia Mining Grid', 'EPSG_9817_Lambert Conic Near-Conformal', 'EPSG_9818_American Polyconic', 'EPSG_9819_Krovak', 'EPSG_9820_Lambert Azimuthal Equal Area', 'EPSG_9821_Lambert Azimuthal Equal Area (Spherical)', 'EPSG_9822_Albers Equal Area', 'EPSG_9823_Equidistant Cylindrical (Spherical)', 'EPSG_9824_Transverse Mercator Zoned Grid System', 'EPSG_9826_Lambert Conic Conformal (West Orientated)', 'EPSG_9828_Bonne (South Orientated)', 'EPSG_9829_Polar Stereographic (variant B)', 'EPSG_9830_Polar Stereographic (variant C)', 'EPSG_9831_Guam Projection', 'EPSG_9832_Modified Azimuthal Equidistant', 'EPSG_9833_Hyperbolic Cassini-Soldner', 'EPSG_9834_Lambert Cylindrical Equal Area (Spherical)', 'EPSG_9835_Lambert Cylindrical Equal Area', 'EPSG_9836_Geocentric/topocentric conversions', 'EPSG_9837_Geographic/topocentric conversions', 'EPSG_9838_Vertical Perspective', 'EPSG_9840_Orthographic', 'EPSG_9841_Mercator (1SP) (Spherical)', 'EPSG_9842_Equidistant Cylindrical', 'EPSG_9843_Axis Order Reversal (2D)', 'EPSG_9844_Axis Order Reversal (Geographic3D horizontal)', 'EPSG_9827_Bonne') AND NEW.auth_name != 'PROJ'; END; CREATE TRIGGER conversion_table_insert_trigger BEFORE INSERT ON conversion_table BEGIN SELECT RAISE(ABORT, 'insert on conversion_table violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code); END; CREATE TRIGGER projected_crs_insert_trigger BEFORE INSERT ON projected_crs FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: (auth_name, code) must not already exist in crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code); SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0 AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF') ); SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: geodetic_crs must not be deprecated when projected_crs is not deprecated') WHERE EXISTS(SELECT 1 FROM geodetic_crs WHERE geodetic_crs.auth_name = NEW.geodetic_crs_auth_name AND geodetic_crs.code = NEW.geodetic_crs_code AND geodetic_crs.deprecated != 0 AND geodetic_crs.name NOT LIKE 'Unknown datum%' AND geodetic_crs.name NOT LIKE 'Unspecified datum%') AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI' AND NEW.geodetic_crs_auth_name != 'ESRI'); SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: conversion must exist when text_definition is NULL') WHERE NOT EXISTS(SELECT 1 FROM conversion WHERE conversion.auth_name = NEW.conversion_auth_name AND conversion.code = NEW.conversion_code) AND NEW.text_definition IS NULL; SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: conversion must not be deprecated when projected_crs is not deprecated') WHERE EXISTS(SELECT 1 FROM conversion WHERE conversion.auth_name = NEW.conversion_auth_name AND conversion.code = NEW.conversion_code AND conversion.deprecated != 0) AND NEW.deprecated = 0; --SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: geodetic_crs must NOT be defined when text_definition is NOT NULL') -- WHERE (NOT(NEW.geodetic_crs_auth_name IS NULL OR NEW.geodetic_crs_code IS NULL)) AND NEW.text_definition IS NOT NULL; SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: coordinate_system.type must be ''cartesian''') WHERE (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'Cartesian'; SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: coordinate_system.dimension must be 2 or 3') -- EPSG:4461 is topocentric WHERE NOT(NEW.coordinate_system_auth_name = 'EPSG' AND NEW.coordinate_system_code = '4461') AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) NOT IN (2,3); END; CREATE TRIGGER compound_crs_insert_trigger BEFORE INSERT ON compound_crs FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: (auth_name, code) must not already exist in crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code); SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0 AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF') ); SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: horiz_crs(auth_name, code) not found') WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.horiz_crs_auth_name AND crs_view.code = NEW.horiz_crs_code); SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: horiz_crs must be equal to ''geographic 2D'', ''projected'' or ''engineering''') WHERE (SELECT type FROM crs_view WHERE crs_view.auth_name = NEW.horiz_crs_auth_name AND crs_view.code = NEW.horiz_crs_code) NOT IN ('geographic 2D', 'projected', 'engineering'); SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: vertical_crs must be equal to ''vertical''') WHERE (SELECT type FROM crs_view WHERE crs_view.auth_name = NEW.vertical_crs_auth_name AND crs_view.code = NEW.vertical_crs_code) NOT IN ('vertical'); SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: horiz_crs must not be deprecated when compound_crs is not deprecated') WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.horiz_crs_auth_name AND crs_view.code = NEW.horiz_crs_code AND crs_view.deprecated != 0) AND NEW.deprecated = 0; SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: vertical_crs must not be deprecated when compound_crs is not deprecated') WHERE EXISTS (SELECT 1 FROM vertical_crs WHERE vertical_crs.auth_name = NEW.vertical_crs_auth_name AND vertical_crs.code = NEW.vertical_crs_code AND vertical_crs.deprecated != 0) AND NEW.deprecated = 0; END; CREATE TRIGGER coordinate_metadata_insert_trigger BEFORE INSERT ON coordinate_metadata FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on coordinate_metadata violates constraint: (crs_auth_name, crs_code) must already exist in crs_view') WHERE NOT EXISTS ( SELECT 1 FROM crs_view WHERE NEW.crs_auth_name IS NOT NULL AND crs_view.auth_name = NEW.crs_auth_name AND crs_view.code = NEW.crs_code UNION ALL SELECT 1 WHERE NEW.crs_auth_name IS NULL); SELECT RAISE(ABORT, 'insert on coordinate_metadata violates constraint: (crs_auth_name, crs_code) and crs_text_definition are mutually exclusive') WHERE NEW.crs_auth_name IS NOT NULL AND NEW.crs_text_definition IS NOT NULL; SELECT RAISE(ABORT, 'insert on coordinate_metadata violates constraint: one of (crs_auth_name, crs_code) or crs_text_definition must be set') WHERE NEW.crs_auth_name IS NULL AND NEW.crs_text_definition IS NULL; END; CREATE TRIGGER helmert_transformation_insert_trigger BEFORE INSERT ON helmert_transformation_table FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code); SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0 AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF') ); SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: translation_uom.type must be ''length''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.translation_uom_auth_name AND unit_of_measure.code = NEW.translation_uom_code) != 'length'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rotation_uom.type must be ''angle''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rotation_uom_auth_name AND unit_of_measure.code = NEW.rotation_uom_code) != 'angle'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: scale_difference_uom.type must be ''scale''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.scale_difference_uom_auth_name AND unit_of_measure.code = NEW.scale_difference_uom_code) != 'scale'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rate_translation_uom.type must be ''length''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rate_translation_uom_auth_name AND unit_of_measure.code = NEW.rate_translation_uom_code) != 'length'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rate_rotation_uom.type must be ''angle''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rate_rotation_uom_auth_name AND unit_of_measure.code = NEW.rate_rotation_uom_code) != 'angle'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rate_scale_difference_uom.type must be ''scale''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rate_scale_difference_uom_auth_name AND unit_of_measure.code = NEW.rate_scale_difference_uom_code) != 'scale'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: epoch_uom.type must be ''time''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.epoch_uom_auth_name AND unit_of_measure.code = NEW.epoch_uom_code) != 'time'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: pivot_uom.type must be ''length''') WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.pivot_uom_auth_name AND unit_of_measure.code = NEW.pivot_uom_code) != 'length'; SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: source_crs must not be deprecated when helmert_transformation is not deprecated') WHERE EXISTS(SELECT 1 FROM geodetic_crs crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: target_crs must not be deprecated when helmert_transformation is not deprecated') WHERE EXISTS(SELECT 1 FROM geodetic_crs crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); -- check that source and target of the same nature SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: source CRS and target CRS must have same geodetic_crs.type') WHERE EXISTS (SELECT 1 FROM geodetic_crs crs1, geodetic_crs crs2 WHERE crs1.auth_name = NEW.source_crs_auth_name AND crs1.code = NEW.source_crs_code AND crs2.auth_name = NEW.target_crs_auth_name AND crs2.code = NEW.target_crs_code AND NEW.deprecated = 0 AND crs1.type != crs2.type); -- check that the method used by a Helmert transformation is consistent with the dimensionality of the CRS SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: the domain of the method of helmert_transformation should be consistent with the dimensionality of the CRS') WHERE NEW.deprecated = 0 AND EXISTS (SELECT 1 FROM geodetic_crs crs LEFT JOIN coordinate_operation_method m ON NEW.method_auth_name = m.auth_name AND NEW.method_code = m.code WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND ((m.name LIKE '%geog2D domain%' AND crs.type != 'geographic 2D') OR (m.name LIKE '%geog3D domain%' AND crs.type != 'geographic 3D') OR (m.name LIKE '%geocentric domain%' AND crs.type != 'geocentric'))); -- check that a time-dependent Helmert transformation has its source or target CRS being dynamic SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: a time-dependent Helmert transformations should have at least one of its source or target CRS dynamic') WHERE NEW.deprecated = 0 AND EXISTS (SELECT 1 FROM coordinate_operation_method m WHERE NEW.method_auth_name = m.auth_name AND NEW.method_code = m.code AND m.name LIKE 'Time-dependent%') AND EXISTS ( SELECT 1 FROM geodetic_crs crs JOIN geodetic_datum gd ON gd.auth_name = crs.datum_auth_name AND gd.code = crs.datum_code WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND gd.frame_reference_epoch IS NULL) AND EXISTS ( SELECT 1 FROM geodetic_crs crs JOIN geodetic_datum gd ON gd.auth_name = crs.datum_auth_name AND gd.code = crs.datum_code WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND gd.frame_reference_epoch IS NULL); END; CREATE TRIGGER grid_transformation_insert_trigger BEFORE INSERT ON grid_transformation FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0 AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF') AND NOT (NEW.description LIKE 'Reversible alternative to%' AND covwv.description NOT LIKE 'Reversible alternative to%') AND NEW.code NOT LIKE '%_WITH_NAD83CSRSV7_INTERPOLATION' ); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: source_crs(auth_name, code) not found') WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.source_crs_auth_name AND crs_view.code = NEW.source_crs_code); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: target_crs(auth_name, code) not found') WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: interpolation_crs(auth_name, code) not found') WHERE NEW.interpolation_crs_code IS NOT NULL AND NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.interpolation_crs_auth_name AND crs_view.code = NEW.interpolation_crs_code); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: interpolation_crs must be a GeodeticCRS on non-TIN shift based files') WHERE NEW.method_name NOT LIKE '%JSON%' AND NEW.interpolation_crs_code IS NOT NULL AND NOT EXISTS (SELECT 1 FROM geodetic_crs WHERE geodetic_crs.auth_name = NEW.interpolation_crs_auth_name AND geodetic_crs.code = NEW.interpolation_crs_code); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: source_crs must not be deprecated when grid_transformation is not deprecated') WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: target_crs must not be deprecated when grid_transformation is not deprecated') WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); -- check that grids with NTv2 method are properly registered SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with NTv2 must have its source_crs in geodetic_crs table with type = ''geographic 2D''') WHERE NEW.method_name = 'NTv2' AND NOT EXISTS (SELECT 1 FROM geodetic_crs crs WHERE NEW.source_crs_auth_name = crs.auth_name AND NEW.source_crs_code = crs.code AND crs.type = 'geographic 2D'); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with NTv2 has have its target_crs in geodetic_crs table with type = ''geographic 2D''') WHERE NEW.method_name = 'NTv2' AND NOT EXISTS (SELECT 1 FROM geodetic_crs crs WHERE NEW.target_crs_auth_name = crs.auth_name AND NEW.target_crs_code = crs.code AND crs.type = 'geographic 2D'); -- check that grids with Geographic3D to GravityRelatedHeight method are properly registered SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Geographic3D to GravityRelatedHeight must have its target_crs in vertical_crs table') WHERE NEW.deprecated = 0 AND NEW.method_name LIKE 'Geographic3D to GravityRelatedHeight%' AND NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE NEW.target_crs_auth_name = crs.auth_name AND NEW.target_crs_code = crs.code); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Geographic3D to GravityRelatedHeight or Geog3D to Geog2D+XXX must have its source_crs in geodetic_crs table with type = ''geographic 3D''') WHERE NEW.deprecated = 0 AND (NEW.method_name LIKE 'Geographic3D to %' OR NEW.method_name LIKE 'Geog3D to %') AND NOT EXISTS (SELECT 1 FROM geodetic_crs crs WHERE NEW.source_crs_auth_name = crs.auth_name AND NEW.source_crs_code = crs.code AND crs.type = 'geographic 3D'); -- check that transformations with Geog3D to Geog2D+GravityRelatedHeight/Depth family of methods are properly registered SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: a transformation Geog3D to Geog2D+GravityRelatedHeight/Depth must have a geog3D CRS as source') WHERE NEW.deprecated = 0 AND NEW.method_name LIKE 'Geog3D to Geog2D+%' AND NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE gcrs.auth_name = NEW.source_crs_auth_name AND gcrs.code = NEW.source_crs_code AND gcrs.type = 'geographic 3D'); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: a transformation Geog3D to Geog2D+GravityRelatedHeight/Depth must have a compound CRS with a geog2D CRS as target') WHERE NEW.deprecated = 0 AND NEW.method_name LIKE 'Geog3D to Geog2D+%' AND NOT EXISTS (SELECT 1 FROM compound_crs ccrs LEFT JOIN geodetic_crs gcrs ON gcrs.auth_name = horiz_crs_auth_name AND gcrs.code = horiz_crs_code WHERE ccrs.auth_name = NEW.target_crs_auth_name AND ccrs.code = NEW.target_crs_code AND gcrs.type = 'geographic 2D'); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: a transformation Geog3D to Geog2D+GravityRelatedHeight/Depth must use the same geodetic datum for the source and target CRS') WHERE NEW.deprecated = 0 AND NEW.method_name LIKE 'Geog3D to Geog2D+%' AND NOT EXISTS (SELECT 1 FROM compound_crs ccrs LEFT JOIN geodetic_crs target_gcrs ON target_gcrs.auth_name = horiz_crs_auth_name AND target_gcrs.code = horiz_crs_code LEFT JOIN geodetic_crs source_gcrs ON source_gcrs.auth_name = NEW.source_crs_auth_name AND source_gcrs.code = NEW.source_crs_code WHERE ccrs.auth_name = NEW.target_crs_auth_name AND ccrs.code = NEW.target_crs_code AND source_gcrs.name = target_gcrs.name); -- check that grids with 'Vertical Offset by Grid Interpolation' methods are properly registered SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Vertical Offset by Grid Interpolation must have its source_crs in vertical_crs table') WHERE NEW.method_name LIKE 'Vertical Offset by Grid Interpolation%' AND NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE NEW.source_crs_auth_name = crs.auth_name AND NEW.source_crs_code = crs.code); SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Vertical Offset by Grid Interpolation must have its target_crs in vertical_crs table') WHERE NEW.method_name LIKE 'Vertical Offset by Grid Interpolation%' AND NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE NEW.target_crs_auth_name = crs.auth_name AND NEW.target_crs_code = crs.code); END; CREATE TRIGGER grid_packages_insert_trigger BEFORE INSERT ON grid_packages FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on grid_packages violates constraint: open_license must be set when url is not NULL') WHERE NEW.open_license IS NULL AND NEW.url IS NOT NULL; SELECT RAISE(ABORT, 'insert on grid_packages violates constraint: direct_download must be set when url is not NULL') WHERE NEW.direct_download IS NULL AND NEW.url IS NOT NULL; END; CREATE TRIGGER grid_alternatives_insert_trigger BEFORE INSERT ON grid_alternatives FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on grid_alternatives violates constraint: original_grid_name must be referenced in grid_transformation.grid_name or in other_transformation.method_name') WHERE NEW.original_grid_name NOT LIKE 'NOT-YET-IN-GRID-TRANSFORMATION-%' AND NOT EXISTS ( SELECT 1 FROM grid_transformation WHERE grid_name = NEW.original_grid_name UNION ALL SELECT 1 FROM other_transformation WHERE method_auth_name = 'PROJ' AND method_name LIKE '%' || NEW.original_grid_name || '%'); END; CREATE TRIGGER other_transformation_insert_trigger BEFORE INSERT ON other_transformation FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code); SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0 AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF') ); SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: source_crs(auth_name, code) not found') WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.source_crs_auth_name AND crs_view.code = NEW.source_crs_code); SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: target_crs(auth_name, code) not found') WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code); SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: source_crs must not be deprecated when other_transformation is not deprecated') WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: target_crs must not be deprecated when other_transformation is not deprecated') WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); -- check that transformations operations between vertical CRS are from/into a vertical CRS SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: transformation operating on vertical CRS must have a source CRS being a vertical CRS') WHERE NEW.deprecated = 0 AND NEW.method_name IN ('Vertical Offset', 'Height Depth Reversal', 'Change of Vertical Unit') AND NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code); SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: transformation operating on vertical CRS must have a target CRS being a vertical CRS') WHERE NEW.deprecated = 0 AND NEW.method_name IN ('Vertical Offset', 'Height Depth Reversal', 'Change of Vertical Unit') AND NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code); -- check that 'Geographic2D with Height Offsets' transformations have a compound CRS with a geog2D as source SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: a transformation Geographic2D with Height Offsets must have a compound CRS with a geog2D as source') WHERE NEW.deprecated = 0 AND NEW.method_name = 'Geographic2D with Height Offsets' AND NOT EXISTS (SELECT 1 FROM compound_crs ccrs LEFT JOIN geodetic_crs gcrs ON gcrs.auth_name = horiz_crs_auth_name AND gcrs.code = horiz_crs_code WHERE ccrs.auth_name = NEW.source_crs_auth_name AND ccrs.code = NEW.source_crs_code AND gcrs.type = 'geographic 2D'); SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: a transformation Geographic2D with Height Offsets must have a geographic 3D CRS as target') WHERE NEW.deprecated = 0 AND NEW.method_name = 'Geographic2D with Height Offsets' AND NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE gcrs.auth_name = NEW.target_crs_auth_name AND gcrs.code = NEW.target_crs_code AND gcrs.type = 'geographic 3D'); END; CREATE TRIGGER concatenated_operation_insert_trigger BEFORE INSERT ON concatenated_operation FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code); SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view') WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0 AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF') ); SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: source_crs(auth_name, code) not found') WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.source_crs_auth_name AND crs_view.code = NEW.source_crs_code); SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: target_crs(auth_name, code) not found') WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code); SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: source_crs must not be deprecated when concatenated_operation is not deprecated') WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: target_crs must not be deprecated when concatenated_operation is not deprecated') WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI'); END; CREATE TRIGGER concatenated_operation_step_insert_trigger BEFORE INSERT ON concatenated_operation_step FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on concatenated_operation_step violates constraint: (step_auth_name, step_code) must already exist in coordinate_operation_with_conversion_view') WHERE NOT EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.step_auth_name AND covwv.code = NEW.step_code); SELECT RAISE(ABORT, 'insert on concatenated_operation_step violates constraint: step should not be a concatenated_operation') WHERE EXISTS(SELECT 1 FROM concatenated_operation WHERE auth_name = NEW.step_auth_name AND code = NEW.step_code); -- NOTE: it would be good to be able to do the same for the last step, but -- we don't know at INSERT time which one is going to be the last one... SELECT RAISE(ABORT, 'insert on concatenated_operation_step violates constraint: step 1 must be a conversion or its source_crs or target_crs must be the source_crs of the concatenated_operation') WHERE NEW.step_number = 1 -- skip deprecated concatenated operations, or some blocklisted EPSG operations AND NOT EXISTS ( SELECT 1 FROM concatenated_operation concat_op WHERE concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code AND concat_op.deprecated = 1) -- check if source_crs of step 1 is the source_crs of the concatenated_operation (by CRS code) AND NOT EXISTS ( SELECT 1 FROM coordinate_operation_view step_op LEFT JOIN concatenated_operation concat_op ON concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code WHERE concat_op.deprecated = 0 AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code AND concat_op.source_crs_auth_name = step_op.source_crs_auth_name AND concat_op.source_crs_code = step_op.source_crs_code) -- same as above, but check by CRS name, and only for geodetic CRS. -- For example the concatenated operation EPSG:9683 ("ITRF2014 to GDA94 (2)") -- has EPSG:9000 "ITRF2014" (geographic 2D) as source CRS -- but its first step is EPSG:8049 ("ITRF2014 to GDA2020 (1)") which has -- EPSG:7789 "ITRF2014" (geocentric) as source CRS ! AND NOT EXISTS ( SELECT 1 FROM coordinate_operation_view step_op LEFT JOIN concatenated_operation concat_op ON concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code LEFT JOIN geodetic_crs concat_op_source_crs ON concat_op_source_crs.auth_name = concat_op.source_crs_auth_name AND concat_op_source_crs.code = concat_op.source_crs_code LEFT JOIN geodetic_crs step_op_source_crs ON step_op_source_crs.auth_name = step_op.source_crs_auth_name AND step_op_source_crs.code = step_op.source_crs_code WHERE concat_op.deprecated = 0 AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code AND concat_op_source_crs.name = step_op_source_crs.name) -- case for EPSG:10146 "INAGeoid2020 v1 height to INAGeoid v2 height (1)" -- that has EPSG:9471 "INAGeoid2020 v1 height" as source CRS -- but its first step is EPSG:9629 "SRGI2013 to SRGI2013 + INAGeoid2020 v1 height (1)" -- that has EPSG:9529 "SRGI2013 + INAGeoid2020 v1 height" as target CRS AND NOT EXISTS ( SELECT 1 FROM coordinate_operation_view step_op LEFT JOIN concatenated_operation concat_op ON concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code LEFT JOIN vertical_crs concat_op_source_crs ON concat_op_source_crs.auth_name = concat_op.source_crs_auth_name AND concat_op_source_crs.code = concat_op.source_crs_code LEFT JOIN compound_crs step_op_target_crs ON step_op_target_crs.auth_name = step_op.target_crs_auth_name AND step_op_target_crs.code = step_op.target_crs_code WHERE concat_op.deprecated = 0 AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code AND step_op_target_crs.name LIKE '% + '|| concat_op_source_crs.name) -- or if source_crs of step 1 is the target_crs of the concatenated_operation AND NOT EXISTS ( SELECT 1 FROM coordinate_operation_view step_op LEFT JOIN concatenated_operation concat_op ON concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code WHERE concat_op.deprecated = 0 AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code AND concat_op.source_crs_auth_name = step_op.target_crs_auth_name AND concat_op.source_crs_code = step_op.target_crs_code) -- or if source_crs of step 1 is a conversion AND NOT EXISTS ( SELECT 1 FROM conversion_table step_op LEFT JOIN concatenated_operation concat_op ON concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code WHERE concat_op.deprecated = 0 AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code) ; END; CREATE TRIGGER geoid_model_insert_trigger BEFORE INSERT ON geoid_model FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on geoid_model violates constraint: (operation_auth_name, operation_code) must already exist in coordinate_operation_with_conversion_view') WHERE NOT EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.operation_auth_name AND covwv.code = NEW.operation_code); END; CREATE TRIGGER alias_name_insert_trigger BEFORE INSERT ON alias_name FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on alias_name violates constraint: new entry refers to unexisting code') WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.auth_name AND o.code = NEW.code); END; CREATE TRIGGER supersession_insert_trigger BEFORE INSERT ON supersession FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on supersession violates constraint: superseded entry refers to unexisting code') WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.superseded_table_name AND o.auth_name = NEW.superseded_auth_name AND o.code = NEW.superseded_code); SELECT RAISE(ABORT, 'insert on supersession violates constraint: replacement entry refers to unexisting code') WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.replacement_table_name AND o.auth_name = NEW.replacement_auth_name AND o.code = NEW.replacement_code); END; CREATE TRIGGER deprecation_insert_trigger BEFORE INSERT ON deprecation FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'insert on deprecation violates constraint: deprecated entry refers to unexisting code') WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.deprecated_auth_name AND o.code = NEW.deprecated_code); SELECT RAISE(ABORT, 'insert on deprecation violates constraint: replacement entry refers to unexisting code') WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.replacement_auth_name AND o.code = NEW.replacement_code); END; proj-9.6.0/data/sql/conversion.sql000664 001754 001755 00006624370 14764566077 017061 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "conversion" VALUES('EPSG','3811','Belgian Lambert 2008','Replaces Lambert 2005.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',50.4752134,'EPSG','9110','EPSG','8822','Longitude of false origin',4.2133177,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.1,'EPSG','9110','EPSG','8826','Easting at false origin',649328.0,'EPSG','9001','EPSG','8827','Northing at false origin',665262.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8939','conversion','EPSG','3811','EPSG','1347','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','3813','Mississippi Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9998335,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8940','conversion','EPSG','3813','EPSG','1393','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','3818','Taiwan 2-degree TM zone 119','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',119.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8942','conversion','EPSG','3818','EPSG','3563','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','3820','Taiwan 2-degree TM zone 121','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',121.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8943','conversion','EPSG','3820','EPSG','3562','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','3831','Pacific Disaster Center Mercator','','EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8945','conversion','EPSG','3831','EPSG','3172','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','3853','County ST74','In Stockholm commune, replaces ST74 (proj code 19876).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.0328332,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999506,'EPSG','9201','EPSG','8806','False easting',100182.7406,'EPSG','9001','EPSG','8807','False northing',-6500620.1207,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8946','conversion','EPSG','3853','EPSG','3608','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3856','Popular Visualisation Pseudo-Mercator','','EPSG','1024','Popular Visualisation Pseudo Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8947','conversion','EPSG','3856','EPSG','1262','EPSG','1098'); INSERT INTO "conversion" VALUES('EPSG','3860','Finland Gauss-Kruger zone 19','Replaces Finland ETRS-GK19 (proj code 18183).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',19500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8950','conversion','EPSG','3860','EPSG','3595','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3861','Finland Gauss-Kruger zone 20','Replaces Finland ETRS-GK20 (proj code 18184).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',20.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8951','conversion','EPSG','3861','EPSG','3596','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3862','Finland Gauss-Kruger zone 21','Replaces Finland ETRS-GK21 (proj code 18185).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',21500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8952','conversion','EPSG','3862','EPSG','3597','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3863','Finland Gauss-Kruger zone 22','Replaces Finland ETRS-GK22 (proj code 18186).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',22.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',22500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8953','conversion','EPSG','3863','EPSG','3598','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3864','Finland Gauss-Kruger zone 23','Replaces Finland ETRS-GK23 (proj code 18187).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',23500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8954','conversion','EPSG','3864','EPSG','3599','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3865','Finland Gauss-Kruger zone 24','Replaces Finland ETRS-GK24 (proj code 18188).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',24500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8955','conversion','EPSG','3865','EPSG','3600','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3866','Finland Gauss-Kruger zone 25','Replaces Finland ETRS-GK25 (proj code 18189).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',25500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8956','conversion','EPSG','3866','EPSG','3601','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3867','Finland Gauss-Kruger zone 26','Replaces Finland ETRS-GK26 (proj code 18190).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',26.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',26500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8957','conversion','EPSG','3867','EPSG','3602','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3868','Finland Gauss-Kruger zone 27','Replaces Finland ETRS-GK27 (proj code 18195).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',27500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8958','conversion','EPSG','3868','EPSG','3603','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3869','Finland Gauss-Kruger zone 28','Replaces Finland ETRS-GK28 (proj code 18196).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',28.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',28500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8959','conversion','EPSG','3869','EPSG','3604','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3870','Finland Gauss-Kruger zone 29','Replaces Finland ETRS-GK29 (proj code 18197).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',29.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',29500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8960','conversion','EPSG','3870','EPSG','3605','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3871','Finland Gauss-Kruger zone 30','Replaces Finland ETRS-GK30 (proj code 18198).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',30500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8961','conversion','EPSG','3871','EPSG','3606','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3872','Finland Gauss-Kruger zone 31','Replaces Finland ETRS-GK31 (proj code 18199).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',31500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8962','conversion','EPSG','3872','EPSG','3607','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','3897','US NSIDC Equal Area north projection','See information source for equations to define Equal-Area Scalable Earth Grid (EASE-Grid) overlay.','EPSG','1027','Lambert Azimuthal Equal Area (Spherical)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8966','conversion','EPSG','3897','EPSG','3475','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','3898','US NSIDC Equal Area south projection','See information source for equations to define Equal-Area Scalable Earth Grid (EASE-Grid) overlay.','EPSG','1027','Lambert Azimuthal Equal Area (Spherical)','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8967','conversion','EPSG','3898','EPSG','3474','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','3899','US National Atlas Equal Area','','EPSG','1027','Lambert Azimuthal Equal Area (Spherical)','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-100.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','8968','conversion','EPSG','3899','EPSG','1245','EPSG','1162'); INSERT INTO "conversion" VALUES('EPSG','3967','Virginia Lambert Conic Conformal','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9015','conversion','EPSG','3967','EPSG','1415','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','3977','Canada Atlas Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',49.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9018','conversion','EPSG','3977','EPSG','1061','EPSG','1046'); INSERT INTO "conversion" VALUES('EPSG','3980','Katanga Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',9.0,'EPSG','9102','EPSG','8822','Longitude of false origin',26.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-6.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-11.5,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9019','conversion','EPSG','3980','EPSG','3147','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','3981','Katanga Gauss zone A','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-9.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9020','conversion','EPSG','3981','EPSG','3612','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','3982','Katanga Gauss zone B','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-9.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',28.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9021','conversion','EPSG','3982','EPSG','3611','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','3983','Katanga Gauss zone C','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-9.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',26.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9022','conversion','EPSG','3983','EPSG','3610','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','3984','Katanga Gauss zone D','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-9.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9023','conversion','EPSG','3984','EPSG','3609','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','3999','Moldova Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',28.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9026','conversion','EPSG','3999','EPSG','1162','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','4085','World Equidistant Cylindrical','Origin at intersection of equator and prime meridian. See projection code 4086 for spherical development.','EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9039','conversion','EPSG','4085','EPSG','1262','EPSG','1192'); INSERT INTO "conversion" VALUES('EPSG','4086','World Equidistant Cylindrical (Sphere)','Origin at intersection of equator and prime meridian.','EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9040','conversion','EPSG','4086','EPSG','1262','EPSG','1192'); INSERT INTO "conversion" VALUES('EPSG','4089','DKTM1','Introduced in 2009.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9041','conversion','EPSG','4089','EPSG','3631','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4090','DKTM2','Introduced in 2009.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9042','conversion','EPSG','4090','EPSG','3632','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4091','DKTM3','Introduced in 2009.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',11.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9043','conversion','EPSG','4091','EPSG','2532','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4092','DKTM4','Introduced in 2009.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9044','conversion','EPSG','4092','EPSG','2533','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4101','BLM zone 1N (US survey foot)','US survey foot form of UTM zone 1N. Sometimes locally referred to as "UTM zone 1".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9045','conversion','EPSG','4101','EPSG','3374','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4102','BLM zone 2N (US survey foot)','US survey foot form of UTM zone 2N. Sometimes locally referred to as "UTM zone 2".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9046','conversion','EPSG','4102','EPSG','3375','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4103','BLM zone 3N (US survey foot)','US survey foot form of UTM zone 3N. Sometimes locally referred to as "UTM zone 3".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9047','conversion','EPSG','4103','EPSG','2133','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4104','BLM zone 4N (US survey foot)','US survey foot form of UTM zone 4N. Sometimes locally referred to as "UTM zone 4".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9048','conversion','EPSG','4104','EPSG','2134','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4105','BLM zone 5N (US survey foot)','US survey foot form of UTM zone 5N. Sometimes locally referred to as "UTM zone 5".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9049','conversion','EPSG','4105','EPSG','2135','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4106','BLM zone 6N (US survey foot)','US survey foot form of UTM zone 6N. Sometimes locally referred to as "UTM zone 6".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9050','conversion','EPSG','4106','EPSG','2136','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4107','BLM zone 7N (US survey foot)','US survey foot form of UTM zone 7N. Sometimes locally referred to as "UTM zone 7".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9051','conversion','EPSG','4107','EPSG','3494','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4108','BLM zone 8N (US survey foot)','US survey foot form of UTM zone 8N. Sometimes locally referred to as "UTM zone 8".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9052','conversion','EPSG','4108','EPSG','3495','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4109','BLM zone 9N (US survey foot)','US survey foot form of UTM zone 9N. Sometimes locally referred to as "UTM zone 9".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9053','conversion','EPSG','4109','EPSG','3496','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4110','BLM zone 10N (US survey foot)','US survey foot form of UTM zone 10N. Sometimes locally referred to as "UTM zone 10".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9054','conversion','EPSG','4110','EPSG','3497','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4111','BLM zone 11N (US survey foot)','US survey foot form of UTM zone 11N. Sometimes locally referred to as "UTM zone 11".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9055','conversion','EPSG','4111','EPSG','3498','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4112','BLM zone 12N (US survey foot)','US survey foot form of UTM zone 12N. Sometimes locally referred to as "UTM zone 12".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9056','conversion','EPSG','4112','EPSG','3499','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4113','BLM zone 13N (US survey foot)','US survey foot form of UTM zone 13N. Sometimes locally referred to as "UTM zone 13".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9057','conversion','EPSG','4113','EPSG','3500','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4114','Johor Cassini Grid','Origin is Gunung Blumut. Replaced by GDM2000 Johor grid (code 19893).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',2.02333,'EPSG','9110','EPSG','8802','Longitude of natural origin',103.334593,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9058','conversion','EPSG','4114','EPSG','3376','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4115','Sembilan and Melaka Cassini Grid','Origin is Gun Hill. Replaced by GDM2000 Sembilan and Melaka grid (code 19892).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',2.424422,'EPSG','9110','EPSG','8802','Longitude of natural origin',101.56282,'EPSG','9110','EPSG','8806','False easting',-242.005,'EPSG','9001','EPSG','8807','False northing',-948.547,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9059','conversion','EPSG','4115','EPSG','3377','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4116','Pahang Cassini Grid','Origin is Gunung Sinyum. Replaced by GDM2000 Pahang grid (code 19891).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',3.42395,'EPSG','9110','EPSG','8802','Longitude of natural origin',102.261024,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9060','conversion','EPSG','4116','EPSG','3378','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4117','Selangor Cassini Grid','Origin is Bukit Asa. Replaced by GDM2000 Selangor grid (code 19890).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',3.404924,'EPSG','9110','EPSG','8802','Longitude of natural origin',101.302968,'EPSG','9110','EPSG','8806','False easting',-21759.438,'EPSG','9001','EPSG','8807','False northing',55960.906,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9061','conversion','EPSG','4117','EPSG','3379','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4118','BLM zone 18N (US survey foot)','Sometimes locally referred to as "UTM zone 18".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9062','conversion','EPSG','4118','EPSG','3505','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4119','BLM zone 19N (US survey foot)','Sometimes locally referred to as "UTM zone 19".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9063','conversion','EPSG','4119','EPSG','3506','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4177','Terengganu Cassini Grid','Origin is Gunung Gajah Trom. Replaced by GDM2000 Terengganu grid (code 19889).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',4.564611,'EPSG','9110','EPSG','8802','Longitude of natural origin',102.534275,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9064','conversion','EPSG','4177','EPSG','3380','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4186','BLM zone 59N (US survey foot)','Sometimes locally referred to as "UTM zone 59".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9065','conversion','EPSG','4186','EPSG','3372','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4187','BLM zone 60N (US survey foot)','Sometimes locally referred to as "UTM zone 60".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9066','conversion','EPSG','4187','EPSG','3373','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4305','Pinang Cassini Grid','Origin is Fort Cornwallis. Replaced by GDM2000 Pinang grid (code 19888).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',5.251677,'EPSG','9110','EPSG','8802','Longitude of natural origin',100.204513,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9068','conversion','EPSG','4305','EPSG','3381','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4320','Kedah and Perlis Cassini Grid','Origin is Gunung Perak. Replaced by GDM2000 Kedah and Perlis grid (code 19887).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',5.575453,'EPSG','9110','EPSG','8802','Longitude of natural origin',100.381534,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9069','conversion','EPSG','4320','EPSG','3382','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4321','Perak Revised Cassini Grid','Origin is Gunung Hijau Larut. Replaces Perak Cassini grid. Replaced by GDM2000 Perak grid (code 19886).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',4.513377,'EPSG','9110','EPSG','8802','Longitude of natural origin',100.490036,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',133453.669,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9070','conversion','EPSG','4321','EPSG','3383','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4323','Kelantan Cassini Grid','Origin is Bukit Panau. Replaced by GDM2000 Kelantan grid (code 19885).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',5.533812,'EPSG','9110','EPSG','8802','Longitude of natural origin',102.103825,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9071','conversion','EPSG','4323','EPSG','3384','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','4325','Guam Map Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',13.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',144.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9072','conversion','EPSG','4325','EPSG','3255','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','4416','Katanga Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-9.0,'EPSG','9102','EPSG','8822','Longitude of false origin',26.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-6.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-11.5,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9073','conversion','EPSG','4416','EPSG','3147','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','4436','Pennsylvania CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.56,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9075','conversion','EPSG','4436','EPSG','2246','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','4454','New York CS27 Long Island zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.4,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9089','conversion','EPSG','4454','EPSG','2235','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','4460','Australian Centre for Remote Sensing Lambert Conformal Projection','Created by AUSLIG prior to incorporation into Geoscience Australia. See also GALCC (proj code 17362).','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-27.0,'EPSG','9102','EPSG','8822','Longitude of false origin',132.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-18.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-36.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9091','conversion','EPSG','4460','EPSG','2575','EPSG','1047'); INSERT INTO "conversion" VALUES('EPSG','4648','UTM zone 32N with prefix','Variant of UTM zone 32N (code 16032) with zone number prefixed to easting.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',32500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9115','conversion','EPSG','4648','EPSG','2861','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','4825','Cape Verde National','Adopted October 2004.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',15.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-24.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',15.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',16.4,'EPSG','9110','EPSG','8826','Easting at false origin',161587.83,'EPSG','9001','EPSG','8827','Northing at false origin',128511.202,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9119','conversion','EPSG','4825','EPSG','1062','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','4838','LCC Germany','Variant for Germany of LCC Europe (proj code 19985). Gauss-Kruger used for applications at scales larger than 1:500,000.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',51.0,'EPSG','9102','EPSG','8822','Longitude of false origin',10.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',53.4,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9131','conversion','EPSG','4838','EPSG','3339','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','4841','Norway TM zone 15','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',15.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9133','conversion','EPSG','4841','EPSG','3656','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4842','Norway TM zone 16','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9134','conversion','EPSG','4842','EPSG','3657','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4843','Norway TM zone 17','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',17.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9135','conversion','EPSG','4843','EPSG','3658','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4844','Norway TM zone 18','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9136','conversion','EPSG','4844','EPSG','3660','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4845','Norway TM zone 5','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',5.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9137','conversion','EPSG','4845','EPSG','3636','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4846','Norway TM zone 6','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9138','conversion','EPSG','4846','EPSG','3639','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4847','Norway TM zone 7','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',7.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9139','conversion','EPSG','4847','EPSG','3647','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4848','Norway TM zone 8','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',8.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9140','conversion','EPSG','4848','EPSG','3648','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4849','Norway TM zone 9','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',9.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9141','conversion','EPSG','4849','EPSG','3649','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4850','Norway TM zone 10','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9142','conversion','EPSG','4850','EPSG','3650','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4851','Norway TM zone 11','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',11.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9143','conversion','EPSG','4851','EPSG','3651','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4852','Norway TM zone 12','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',12.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9144','conversion','EPSG','4852','EPSG','3653','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4853','Norway TM zone 13','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9145','conversion','EPSG','4853','EPSG','3654','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4854','Norway TM zone 14','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',14.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9146','conversion','EPSG','4854','EPSG','3655','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','4881','Norway TM zone 19','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',19.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9147','conversion','EPSG','4881','EPSG','3661','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5000','Norway TM zone 20','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',20.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9149','conversion','EPSG','5000','EPSG','3662','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5001','Norway TM zone 21','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',21.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9150','conversion','EPSG','5001','EPSG','3663','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5002','Norway TM zone 22','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',22.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9151','conversion','EPSG','5002','EPSG','3665','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5003','Norway TM zone 23','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',23.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9152','conversion','EPSG','5003','EPSG','3667','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5004','Norway TM zone 24','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',24.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9153','conversion','EPSG','5004','EPSG','3668','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5005','Norway TM zone 25','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',25.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9154','conversion','EPSG','5005','EPSG','3669','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5006','Norway TM zone 26','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',26.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9155','conversion','EPSG','5006','EPSG','3671','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5007','Norway TM zone 27','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',27.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9156','conversion','EPSG','5007','EPSG','3672','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5008','Norway TM zone 28','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',28.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9157','conversion','EPSG','5008','EPSG','3673','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5009','Norway TM zone 29','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',29.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9158','conversion','EPSG','5009','EPSG','3674','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5010','Norway TM zone 30','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',30.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9159','conversion','EPSG','5010','EPSG','3676','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5019','Portugal Bonne New','Replaces original definition referenced to Lisbon meridian (proj code 19979).','EPSG','9828','Bonne (South Orientated)','EPSG','8801','Latitude of natural origin',39.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0754862,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9160','conversion','EPSG','5019','EPSG','1294','EPSG','1062'); INSERT INTO "conversion" VALUES('EPSG','5020','Portuguese Grid New','Replaces original definition referenced to Lisbon meridian (proj code 19969).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0754862,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9161','conversion','EPSG','5020','EPSG','1294','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5049','Korea East Sea Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',131.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9187','conversion','EPSG','5049','EPSG','3727','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5068','Conus Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',23.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.3,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9206','conversion','EPSG','5068','EPSG','1323','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','5100','Korea Unified Belt','Introduced in 2004.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9234','conversion','EPSG','5100','EPSG','1135','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','5101','Korea West Belt 2010','Introduced from 2010-01-01. Officially defined as extending between 124°E and 126°E.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',125.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9235','conversion','EPSG','5101','EPSG','1498','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5102','Korea Central Belt 2010','Introduced from 2010-01-01.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9236','conversion','EPSG','5102','EPSG','1497','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5103','Korea East Belt 2010','Introduced from 2010-01-01.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9237','conversion','EPSG','5103','EPSG','1496','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5104','Korea East Sea Belt 2010','Introduced from 2010-01-01. Officially defined as extending between 130°E and 132°E.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',131.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9238','conversion','EPSG','5104','EPSG','3720','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5131','Korea Central Belt Jeju','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',550000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9239','conversion','EPSG','5131','EPSG','3721','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5135','Norway TM zone 5','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',5.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9242','conversion','EPSG','5135','EPSG','3636','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5136','Norway TM zone 6','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9243','conversion','EPSG','5136','EPSG','3639','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5137','Norway TM zone 7','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',7.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9244','conversion','EPSG','5137','EPSG','3647','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5138','Norway TM zone 8','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',8.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9245','conversion','EPSG','5138','EPSG','3648','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5139','Norway TM zone 9','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',9.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9246','conversion','EPSG','5139','EPSG','3649','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5140','Norway TM zone 10','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9247','conversion','EPSG','5140','EPSG','3650','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5141','Norway TM zone 11','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',11.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9248','conversion','EPSG','5141','EPSG','3651','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5142','Norway TM zone 12','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',12.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9249','conversion','EPSG','5142','EPSG','3653','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5143','Norway TM zone 13','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9250','conversion','EPSG','5143','EPSG','3654','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5144','Norway TM zone 14','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',14.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9251','conversion','EPSG','5144','EPSG','3655','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5145','Norway TM zone 15','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',15.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9252','conversion','EPSG','5145','EPSG','3656','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5146','Norway TM zone 16','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9253','conversion','EPSG','5146','EPSG','3657','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5147','Norway TM zone 17','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',17.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9254','conversion','EPSG','5147','EPSG','3658','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5148','Norway TM zone 18','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9255','conversion','EPSG','5148','EPSG','3660','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5149','Norway TM zone 19','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',19.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9256','conversion','EPSG','5149','EPSG','3661','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5150','Norway TM zone 20','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',20.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9257','conversion','EPSG','5150','EPSG','3662','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5151','Norway TM zone 21','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',21.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9258','conversion','EPSG','5151','EPSG','3663','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5152','Norway TM zone 22','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',22.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9259','conversion','EPSG','5152','EPSG','3665','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5153','Norway TM zone 23','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',23.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9260','conversion','EPSG','5153','EPSG','3667','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5154','Norway TM zone 24','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',24.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9261','conversion','EPSG','5154','EPSG','3668','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5155','Norway TM zone 25','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',25.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9262','conversion','EPSG','5155','EPSG','3669','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5156','Norway TM zone 26','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',26.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9263','conversion','EPSG','5156','EPSG','3671','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5157','Norway TM zone 27','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',27.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9264','conversion','EPSG','5157','EPSG','3672','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5158','Norway TM zone 28','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',28.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9265','conversion','EPSG','5158','EPSG','3673','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5159','Norway TM zone 29','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',29.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9266','conversion','EPSG','5159','EPSG','3674','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5160','Norway TM zone 30','UTM used as official map projection. This is an official alternative for construction projects.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',30.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9267','conversion','EPSG','5160','EPSG','3676','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5161','Korea Modified West Belt','Introduced in 1998.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',125.0010405,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9268','conversion','EPSG','5161','EPSG','1498','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5162','Korea Modified Central Belt','Introduced in 1998.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.0010405,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9269','conversion','EPSG','5162','EPSG','1497','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5163','Korea Modified Central Belt Jeju','Introduced in 1998.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.0010405,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',550000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9270','conversion','EPSG','5163','EPSG','3721','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5164','Korea Modified East Belt','Introduced in 1998.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0010405,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9271','conversion','EPSG','5164','EPSG','1496','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5165','Korea Modified East Sea Belt','Introduced in 1998.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',131.0010405,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9272','conversion','EPSG','5165','EPSG','3720','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5218','Krovak East North','Longitude is referenced to the Ferro meridian. North-orientated alternative to south-orientated Krovak projection (code 19952) introduced for GIS purposes.','EPSG','1041','Krovak (North Orientated)','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',42.3,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.171730311,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9300','conversion','EPSG','5218','EPSG','1306','EPSG','1189'); INSERT INTO "conversion" VALUES('EPSG','5219','Modified Krovak','Longitude is referenced to the Ferro meridian.','EPSG','1042','Krovak Modified','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',42.3,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.1717303,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9301','conversion','EPSG','5219','EPSG','1079','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5220','Modified Krovak East North','Longitude is referenced to the Ferro meridian. Replaces Modified Krovak south-orientated projection (code 5219) for GIS purposes.','EPSG','1043','Krovak Modified (North Orientated)','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',42.3,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.1717303,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9302','conversion','EPSG','5220','EPSG','1079','EPSG','1189'); INSERT INTO "conversion" VALUES('EPSG','5222','Gabon Transverse Mercator','For topographic mapping and survey applications see projection code 5522.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9303','conversion','EPSG','5222','EPSG','3249','EPSG','1165'); INSERT INTO "conversion" VALUES('EPSG','5231','Sri Lanka Grid','Origin is Piturutalagala triangulation point. Used with Kandawala datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',7.0001729,'EPSG','9110','EPSG','8802','Longitude of natural origin',80.461816,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999238418,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9307','conversion','EPSG','5231','EPSG','3310','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5232','Sri Lanka Grid 1999','Origin is Piturutalagala triangulation point. Used with SLD99.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',7.00016975,'EPSG','9110','EPSG','8802','Longitude of natural origin',80.46181671,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999238418,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9308','conversion','EPSG','5232','EPSG','3310','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5265','Bhutan National Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9319','conversion','EPSG','5265','EPSG','1048','EPSG','1178'); INSERT INTO "conversion" VALUES('EPSG','5268','Bumthang TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.44,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9321','conversion','EPSG','5268','EPSG','3734','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5276','Chhukha TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',89.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9322','conversion','EPSG','5276','EPSG','3737','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5277','Dagana TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',89.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9323','conversion','EPSG','5277','EPSG','3738','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5278','Gasa TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.02,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9324','conversion','EPSG','5278','EPSG','3740','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5279','Ha TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9325','conversion','EPSG','5279','EPSG','3742','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5280','Lhuentse TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',91.08,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9326','conversion','EPSG','5280','EPSG','3743','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5281','Mongar TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',91.14,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9327','conversion','EPSG','5281','EPSG','3745','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5282','Paro TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',89.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9328','conversion','EPSG','5282','EPSG','3746','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5283','Pemagatshel TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',91.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9329','conversion','EPSG','5283','EPSG','3747','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5284','Tsirang TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9330','conversion','EPSG','5284','EPSG','3757','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5285','Samdrup Jongkhar TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',91.34,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9331','conversion','EPSG','5285','EPSG','3750','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5286','Samtse TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',89.04,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9332','conversion','EPSG','5286','EPSG','3751','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5287','Sarpang TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.16,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9333','conversion','EPSG','5287','EPSG','3752','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5288','Wangdue Phodrang TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.07,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9334','conversion','EPSG','5288','EPSG','3758','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5289','Trashigang TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',91.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9335','conversion','EPSG','5289','EPSG','3754','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5290','Trongsa TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9336','conversion','EPSG','5290','EPSG','3755','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5291','Zhemgang TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',90.52,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9337','conversion','EPSG','5291','EPSG','3761','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5312','Thimphu TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',89.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9338','conversion','EPSG','5312','EPSG','3753','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5313','Punakha TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',89.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9339','conversion','EPSG','5313','EPSG','3749','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5314','Yangtse TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',91.34,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',-2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9340','conversion','EPSG','5314','EPSG','3760','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5315','Faroe Transverse Mercator','Introduced in 2010.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-7.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',-6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9341','conversion','EPSG','5315','EPSG','1093','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','5319','Teranet Ontario Lambert','Used for Province of Ontario land registration system.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',54.3,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9342','conversion','EPSG','5319','EPSG','1367','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','5326','Iceland Lambert 2004','Replaces Iceland Lambert 1993 (code 19989). Used only with ISN2004 geogCRS.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-19.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',64.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',65.45,'EPSG','9110','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9343','conversion','EPSG','5326','EPSG','1120','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','5328','Netherlands East Indies Equatorial Zone (Jkt)','Longitude is referenced to the Jakarta meridian. Replaced by NEIEZ (code 19905).','EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.113221,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.997,'EPSG','9201','EPSG','8806','False easting',3900000.0,'EPSG','9001','EPSG','8807','False northing',900000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9345','conversion','EPSG','5328','EPSG','4020','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5366','Costa Rica TM 2005','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9353','conversion','EPSG','5366','EPSG','3849','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5390','Costa Rica Norte','Costa Rica recognises a ''common zone'' between 9°32''N and 9°56''N where either Costa Rica Norte or Costa Rica Sur Lambert zones may be used.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',10.28,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99995696,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',271820.522,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9362','conversion','EPSG','5390','EPSG','3869','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5394','Costa Rica Sur','Costa Rica recognises a ''common zone'' between 9°32''N and 9°56''N where either Costa Rica Norte or Costa Rica Sur Lambert zones may be used.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',9.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-83.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99995696,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',327987.436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9363','conversion','EPSG','5394','EPSG','3870','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5397','Honduras Norte','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',15.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99993273,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',296917.439,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9365','conversion','EPSG','5397','EPSG','3848','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5398','Honduras Sur','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',13.47,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999514,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',296215.903,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9366','conversion','EPSG','5398','EPSG','3850','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5399','El Salvador Lambert','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',13.47,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996704,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',295809.184,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9367','conversion','EPSG','5399','EPSG','3243','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5439','Nicaragua Norte','Typographical error in value for false northing in the information source has been corrected in this record.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',13.52,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99990314,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',359891.816,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9407','conversion','EPSG','5439','EPSG','3844','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5444','Nicaragua Sur','Typographical error in value for scale factor at natural origin in the information source has been corrected in this record.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',11.44,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99992228,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',288876.327,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9412','conversion','EPSG','5444','EPSG','3847','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5465','Belize Colony Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',17.0340471,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.3754687,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',217259.26,'EPSG','9005','EPSG','8807','False northing',445474.83,'EPSG','9005',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9423','conversion','EPSG','5465','EPSG','3219','EPSG','1209'); INSERT INTO "conversion" VALUES('EPSG','5468','Panama Lambert','Replaces Panama Polyconic projection from 1940s.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',8.25,'EPSG','9110','EPSG','8802','Longitude of natural origin',-80.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99989909,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',294865.303,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9424','conversion','EPSG','5468','EPSG','3290','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5471','Panama Polyconic','Replaced by Panama Lambert projection from 1940s.','EPSG','9818','American Polyconic','EPSG','8801','Latitude of natural origin',8.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9110','EPSG','8806','False easting',1000000.0,'EPSG','9037','EPSG','8807','False northing',1092972.1,'EPSG','9037',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9426','conversion','EPSG','5471','EPSG','3290','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5475','McMurdo Sound Lambert Conformal 2000','Replaces Darwin Glacier LC2000 (proj code 17966) from March 2011.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-78.0,'EPSG','9110','EPSG','8822','Longitude of false origin',163.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',7000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9429','conversion','EPSG','5475','EPSG','3853','EPSG','1236'); INSERT INTO "conversion" VALUES('EPSG','5476','Borchgrevink Coast Lambert Conformal 2000','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-74.3,'EPSG','9110','EPSG','8822','Longitude of false origin',165.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',5000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9430','conversion','EPSG','5476','EPSG','3854','EPSG','1236'); INSERT INTO "conversion" VALUES('EPSG','5477','Pennell Coast Lambert Conformal 2000','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-71.3,'EPSG','9110','EPSG','8822','Longitude of false origin',166.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-70.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-72.2,'EPSG','9110','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9431','conversion','EPSG','5477','EPSG','3855','EPSG','1236'); INSERT INTO "conversion" VALUES('EPSG','5478','Ross Sea Polar Stereographic 2000','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',180.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9432','conversion','EPSG','5478','EPSG','3856','EPSG','1236'); INSERT INTO "conversion" VALUES('EPSG','5509','Krovak (Greenwich)','Longitude is referenced to the Greenwich meridian. See projection code 19952 for original definition referenced to Ferro.','EPSG','9819','Krovak','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',24.5,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.171730311,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9452','conversion','EPSG','5509','EPSG','1306','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5510','Krovak East North (Greenwich)','Greenwich-based alternative to projection code 5218.','EPSG','1041','Krovak (North Orientated)','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',24.5,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.171730311,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9453','conversion','EPSG','5510','EPSG','1306','EPSG','1189'); INSERT INTO "conversion" VALUES('EPSG','5511','Modified Krovak (Greenwich)','Greenwich-based alternative to projection code 5219.','EPSG','1042','Krovak Modified','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',24.5,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.1717303,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9454','conversion','EPSG','5511','EPSG','1079','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5512','Modified Krovak East North (Greenwich)','Greenwich-based alternative to projection code 5220.','EPSG','1043','Krovak Modified (North Orientated)','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',24.5,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.1717303,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9455','conversion','EPSG','5512','EPSG','1079','EPSG','1189'); INSERT INTO "conversion" VALUES('EPSG','5517','Chatham Islands Map Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-176.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',650000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9456','conversion','EPSG','5517','EPSG','2889','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','5522','Gabon Transverse Mercator 2011','For forestry applications see projection code 5222.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',11.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9458','conversion','EPSG','5522','EPSG','1100','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5547','Papua New Guinea Map Grid 1994 zone 54','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9467','conversion','EPSG','5547','EPSG','3882','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5548','Papua New Guinea Map Grid 1994 zone 55','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9468','conversion','EPSG','5548','EPSG','3885','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5549','Papua New Guinea Map Grid 1994 zone 56','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9469','conversion','EPSG','5549','EPSG','3885','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','5587','New Brunswick Stereographic (NAD27)','In use until 1979.','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',46.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-66.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999912,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9002','EPSG','8807','False northing',1000000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9475','conversion','EPSG','5587','EPSG','1447','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5595','Fehmarnbelt TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',11.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9478','conversion','EPSG','5595','EPSG','3889','EPSG','1139'); INSERT INTO "conversion" VALUES('EPSG','5640','Petrobras Mercator','','EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',-2.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-43.0,'EPSG','9102','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9483','conversion','EPSG','5640','EPSG','3896','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','5642','Southern Permian Basin Atlas Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.0,'EPSG','9102','EPSG','8822','Longitude of false origin',10.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',52.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',54.2,'EPSG','9110','EPSG','8826','Easting at false origin',815000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9484','conversion','EPSG','5642','EPSG','3899','EPSG','1190'); INSERT INTO "conversion" VALUES('EPSG','5645','SPCS83 Vermont zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14430.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-72.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999964286,'EPSG','9201','EPSG','8806','False easting',1640416.6667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9485','conversion','EPSG','5645','EPSG','1414','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5647','UTM zone 31N with prefix','Variant of UTM zone 31N (code 16031) with zone number prefixed to easting.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',31500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9486','conversion','EPSG','5647','EPSG','2860','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5648','UTM zone 33N with prefix','Variant of UTM zone 33N (code 16033) with zone number prefixed to easting.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',33500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9487','conversion','EPSG','5648','EPSG','2862','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5658','TM Emilia-Romagna','When applied to Monte Mario datum, this projection emulates superseded CRS ED50 / UTMA in which FE=500000m and FN=-4000000m exactly. This projection''s FE and FN values include approximations for the transformation from Monte Mario to ED50.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500053.0,'EPSG','9001','EPSG','8807','False northing',-3999820.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9490','conversion','EPSG','5658','EPSG','4035','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','5824','ACT Standard Grid','Origin at AGD66 coordinates of Mt. Stromlo triangulation station. Scale factor includes reduction to average height of area covered.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-35.19038506,'EPSG','9110','EPSG','8802','Longitude of natural origin',149.003346139,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000086,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9508','conversion','EPSG','5824','EPSG','2283','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','5883','Tonga Map Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9518','conversion','EPSG','5883','EPSG','1234','EPSG','1181'); INSERT INTO "conversion" VALUES('EPSG','5889','JAXA Snow Depth Polar Stereographic North','','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',70.0,'EPSG','9102','EPSG','8833','Longitude of origin',90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9520','conversion','EPSG','5889','EPSG','1996','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','5892','Vietnam TM-3 zone 481','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',102.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9522','conversion','EPSG','5892','EPSG','4193','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','5893','Vietnam TM-3 zone 482','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9523','conversion','EPSG','5893','EPSG','4215','EPSG','1208'); INSERT INTO "usage" VALUES('EPSG','9524','conversion','EPSG','5893','EPSG','4547','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','5894','Vietnam TM-3 zone 491','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',108.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9525','conversion','EPSG','5894','EPSG','4217','EPSG','1208'); INSERT INTO "usage" VALUES('EPSG','9526','conversion','EPSG','5894','EPSG','4558','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','5895','Vietnam TM-3 107-45','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9527','conversion','EPSG','5895','EPSG','4218','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','5901','EPSG Alaska Polar Stereographic','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9529','conversion','EPSG','5901','EPSG','1996','EPSG','1071'); INSERT INTO "conversion" VALUES('EPSG','5902','EPSG Canada Polar Stereographic','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-100.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9530','conversion','EPSG','5902','EPSG','1996','EPSG','1072'); INSERT INTO "conversion" VALUES('EPSG','5903','EPSG Greenland Polar Stereographic','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9531','conversion','EPSG','5903','EPSG','1996','EPSG','1073'); INSERT INTO "conversion" VALUES('EPSG','5904','EPSG Norway Polar Stereographic','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9532','conversion','EPSG','5904','EPSG','1996','EPSG','1074'); INSERT INTO "conversion" VALUES('EPSG','5905','EPSG Russia Polar Stereographic','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9533','conversion','EPSG','5905','EPSG','1996','EPSG','1075'); INSERT INTO "conversion" VALUES('EPSG','5906','EPSG Arctic Regional LCC zone A1','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997505803.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',81.19020136,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',85.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9534','conversion','EPSG','5906','EPSG','4019','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5907','EPSG Arctic Regional LCC zone A2','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997505803.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',81.19020136,'EPSG','9110','EPSG','8822','Longitude of false origin',-39.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',85.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9535','conversion','EPSG','5907','EPSG','4027','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5908','EPSG Arctic Regional LCC zone A3','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997505803.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',81.19020136,'EPSG','9110','EPSG','8822','Longitude of false origin',33.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',85.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9536','conversion','EPSG','5908','EPSG','4028','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5909','EPSG Arctic Regional LCC zone A4','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997505803.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',81.19020136,'EPSG','9110','EPSG','8822','Longitude of false origin',105.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',85.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9537','conversion','EPSG','5909','EPSG','4029','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5910','EPSG Arctic Regional LCC zone A5','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997505803.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',81.19020136,'EPSG','9110','EPSG','8822','Longitude of false origin',177.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',85.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9538','conversion','EPSG','5910','EPSG','4031','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5911','EPSG Arctic Regional LCC zone B1','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997550978.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',73.09206671,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',69.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9539','conversion','EPSG','5911','EPSG','4032','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5912','EPSG Arctic Regional LCC zone B2','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997550978.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',73.09206671,'EPSG','9110','EPSG','8822','Longitude of false origin',-39.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',69.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9540','conversion','EPSG','5912','EPSG','4033','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5913','EPSG Arctic Regional LCC zone B3','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997550978.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',73.09206671,'EPSG','9110','EPSG','8822','Longitude of false origin',33.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',69.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9541','conversion','EPSG','5913','EPSG','4034','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5914','EPSG Arctic Regional LCC zone B4','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997550978.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',73.09206671,'EPSG','9110','EPSG','8822','Longitude of false origin',105.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',69.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9542','conversion','EPSG','5914','EPSG','4037','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5915','EPSG Arctic Regional LCC zone B5','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997550978.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',73.09206671,'EPSG','9110','EPSG','8822','Longitude of false origin',177.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',69.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9543','conversion','EPSG','5915','EPSG','4038','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5916','EPSG Arctic Regional LCC zone C1','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997560876.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.06045752,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',69.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',61.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9544','conversion','EPSG','5916','EPSG','4040','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5917','EPSG Arctic Regional LCC zone C2','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997560876.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.06045752,'EPSG','9110','EPSG','8822','Longitude of false origin',-39.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',69.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',61.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9545','conversion','EPSG','5917','EPSG','4041','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5918','EPSG Arctic Regional LCC zone C3','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997560876.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.06045752,'EPSG','9110','EPSG','8822','Longitude of false origin',33.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',69.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',61.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9546','conversion','EPSG','5918','EPSG','4042','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5919','EPSG Arctic Regional LCC zone C4','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997560876.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.06045752,'EPSG','9110','EPSG','8822','Longitude of false origin',105.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',69.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',61.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9547','conversion','EPSG','5919','EPSG','4043','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5920','EPSG Arctic Regional LCC zone C5','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.997560876.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.06045752,'EPSG','9110','EPSG','8822','Longitude of false origin',177.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',69.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',61.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9548','conversion','EPSG','5920','EPSG','4045','EPSG','1246'); INSERT INTO "conversion" VALUES('EPSG','5943','EPSG Arctic LCC zone 8-20','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995774379.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',62.00551048,'EPSG','9110','EPSG','8822','Longitude of false origin',-52.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',63.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',60.2,'EPSG','9110','EPSG','8826','Easting at false origin',20500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',8500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9549','conversion','EPSG','5943','EPSG','4123','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5944','EPSG Arctic LCC zone 8-22','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995774379.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',62.00551048,'EPSG','9110','EPSG','8822','Longitude of false origin',-37.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',63.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',60.2,'EPSG','9110','EPSG','8826','Easting at false origin',22500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',8500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9550','conversion','EPSG','5944','EPSG','4124','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5977','EPSG Arctic LCC zone 1-21','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995705769.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',85.2613626,'EPSG','9110','EPSG','8822','Longitude of false origin',-150.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',87.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',83.4,'EPSG','9110','EPSG','8826','Easting at false origin',21500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9551','conversion','EPSG','5977','EPSG','4044','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5978','EPSG Arctic LCC zone 1-23','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995705769.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',85.2613626,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',87.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',83.4,'EPSG','9110','EPSG','8826','Easting at false origin',23500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9552','conversion','EPSG','5978','EPSG','4047','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5979','EPSG Arctic LCC zone 1-25','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995705769.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',85.2613626,'EPSG','9110','EPSG','8822','Longitude of false origin',-30.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',87.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',83.4,'EPSG','9110','EPSG','8826','Easting at false origin',25500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9553','conversion','EPSG','5979','EPSG','4048','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5980','EPSG Arctic LCC zone 1-27','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995705769.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',85.2613626,'EPSG','9110','EPSG','8822','Longitude of false origin',30.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',87.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',83.4,'EPSG','9110','EPSG','8826','Easting at false origin',27500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9554','conversion','EPSG','5980','EPSG','4049','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5981','EPSG Arctic LCC zone 1-29','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995705769.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',85.2613626,'EPSG','9110','EPSG','8822','Longitude of false origin',90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',87.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',83.4,'EPSG','9110','EPSG','8826','Easting at false origin',29500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9555','conversion','EPSG','5981','EPSG','4050','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5982','EPSG Arctic LCC zone 1-31','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995705769.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',85.2613626,'EPSG','9110','EPSG','8822','Longitude of false origin',150.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',87.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',83.4,'EPSG','9110','EPSG','8826','Easting at false origin',31500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9556','conversion','EPSG','5982','EPSG','4051','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5983','EPSG Arctic LCC zone 2-10','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',166.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',10500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9557','conversion','EPSG','5983','EPSG','4057','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5984','EPSG Arctic LCC zone 2-12','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',-154.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',12500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9558','conversion','EPSG','5984','EPSG','4052','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5985','EPSG Arctic LCC zone 2-14','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',-115.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',14500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9559','conversion','EPSG','5985','EPSG','4030','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5986','EPSG Arctic LCC zone 2-16','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',-75.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',16500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9560','conversion','EPSG','5986','EPSG','4036','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5987','EPSG Arctic LCC zone 2-18','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',-52.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',18500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9561','conversion','EPSG','5987','EPSG','4039','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5988','EPSG Arctic LCC zone 2-20','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',-12.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',20500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9562','conversion','EPSG','5988','EPSG','4046','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5989','EPSG Arctic LCC zone 2-22','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',16.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',22500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9563','conversion','EPSG','5989','EPSG','4053','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5990','EPSG Arctic LCC zone 2-24','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',53.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',24500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9564','conversion','EPSG','5990','EPSG','4054','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5991','EPSG Arctic LCC zone 2-26','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',93.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',26500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9565','conversion','EPSG','5991','EPSG','4055','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5992','EPSG Arctic LCC zone 2-28','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995749475.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',82.03303296,'EPSG','9110','EPSG','8822','Longitude of false origin',133.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',83.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',80.2,'EPSG','9110','EPSG','8826','Easting at false origin',28500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9566','conversion','EPSG','5992','EPSG','4056','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5993','EPSG Arctic LCC zone 3-11','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',21.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',11500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9567','conversion','EPSG','5993','EPSG','4058','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5994','EPSG Arctic LCC zone 3-13','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',52.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',13500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9568','conversion','EPSG','5994','EPSG','4059','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5995','EPSG Arctic LCC zone 3-15','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',83.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',15500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9569','conversion','EPSG','5995','EPSG','4060','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5996','EPSG Arctic LCC zone 3-17','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',114.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',17500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9570','conversion','EPSG','5996','EPSG','4061','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5997','EPSG Arctic LCC zone 3-19','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',145.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',19500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9571','conversion','EPSG','5997','EPSG','4062','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5998','EPSG Arctic LCC zone 3-21','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',176.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',21500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9572','conversion','EPSG','5998','EPSG','4063','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','5999','EPSG Arctic LCC zone 3-23','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',-153.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',23500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9573','conversion','EPSG','5999','EPSG','4064','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6000','EPSG Arctic LCC zone 3-25','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',-129.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',25500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9574','conversion','EPSG','6000','EPSG','4065','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6001','EPSG Arctic LCC zone 3-27','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',27500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9575','conversion','EPSG','6001','EPSG','4070','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6002','EPSG Arctic LCC zone 3-29','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',-69.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',29500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9576','conversion','EPSG','6002','EPSG','4071','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6003','EPSG Arctic LCC zone 3-31','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',-39.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',31500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9577','conversion','EPSG','6003','EPSG','4074','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6004','EPSG Arctic LCC zone 3-33','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995760608.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',78.42264151,'EPSG','9110','EPSG','8822','Longitude of false origin',-10.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',80.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9110','EPSG','8826','Easting at false origin',33500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9578','conversion','EPSG','6004','EPSG','4075','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6005','EPSG Arctic LCC zone 4-12','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',-155.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',12500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9579','conversion','EPSG','6005','EPSG','4076','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6006','EPSG Arctic LCC zone 4-14','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',-129.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',14500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9580','conversion','EPSG','6006','EPSG','4077','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6007','EPSG Arctic LCC zone 4-16','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',-104.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',16500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9581','conversion','EPSG','6007','EPSG','4078','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6008','EPSG Arctic LCC zone 4-18','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',18500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9582','conversion','EPSG','6008','EPSG','4079','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6009','EPSG Arctic LCC zone 4-20','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',-64.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',20500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9583','conversion','EPSG','6009','EPSG','4080','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6010','EPSG Arctic LCC zone 4-22','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',-39.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',22500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9584','conversion','EPSG','6010','EPSG','4081','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6011','EPSG Arctic LCC zone 4-24','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',-14.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',24500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9585','conversion','EPSG','6011','EPSG','4082','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6012','EPSG Arctic LCC zone 4-26','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',10.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',26500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9586','conversion','EPSG','6012','EPSG','4083','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6013','EPSG Arctic LCC zone 4-28','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',34.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',28500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9587','conversion','EPSG','6013','EPSG','4084','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6014','EPSG Arctic LCC zone 4-30','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',58.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',30500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9588','conversion','EPSG','6014','EPSG','4085','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6015','EPSG Arctic LCC zone 4-32','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',82.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',32500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9589','conversion','EPSG','6015','EPSG','4086','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6016','EPSG Arctic LCC zone 4-34','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',106.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',34500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9590','conversion','EPSG','6016','EPSG','4087','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6017','EPSG Arctic LCC zone 4-36','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',130.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',36500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9591','conversion','EPSG','6017','EPSG','4088','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6018','EPSG Arctic LCC zone 4-38','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',154.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',38500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9592','conversion','EPSG','6018','EPSG','4089','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6019','EPSG Arctic LCC zone 4-40','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995765501.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',75.21518519,'EPSG','9110','EPSG','8822','Longitude of false origin',179.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',77.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',73.4,'EPSG','9110','EPSG','8826','Easting at false origin',40500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9593','conversion','EPSG','6019','EPSG','4090','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6020','EPSG Arctic LCC zone 5-11','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',14.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',11500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9594','conversion','EPSG','6020','EPSG','4091','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6021','EPSG Arctic LCC zone 5-13','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',34.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',13500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9595','conversion','EPSG','6021','EPSG','4092','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6022','EPSG Arctic LCC zone 5-15','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',54.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',15500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9596','conversion','EPSG','6022','EPSG','4093','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6023','EPSG Arctic LCC zone 5-17','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',74.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',17500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9597','conversion','EPSG','6023','EPSG','4094','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6024','EPSG Arctic LCC zone 5-19','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',95.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',19500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9598','conversion','EPSG','6024','EPSG','4095','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6025','EPSG Arctic LCC zone 5-21','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',116.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',21500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9599','conversion','EPSG','6025','EPSG','4096','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6026','EPSG Arctic LCC zone 5-23','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',137.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',23500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9600','conversion','EPSG','6026','EPSG','4097','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6027','EPSG Arctic LCC zone 5-25','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',158.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',25500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9601','conversion','EPSG','6027','EPSG','4098','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6028','EPSG Arctic LCC zone 5-27','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',179.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',27500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9602','conversion','EPSG','6028','EPSG','4099','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6029','EPSG Arctic LCC zone 5-29','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-163.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',29500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9603','conversion','EPSG','6029','EPSG','4100','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6030','EPSG Arctic LCC zone 5-31','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-147.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',31500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9604','conversion','EPSG','6030','EPSG','4101','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6031','EPSG Arctic LCC zone 5-33','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-131.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',33500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9605','conversion','EPSG','6031','EPSG','4102','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6032','EPSG Arctic LCC zone 5-35','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',35500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9606','conversion','EPSG','6032','EPSG','4103','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6033','EPSG Arctic LCC zone 5-37','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-91.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',37500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9607','conversion','EPSG','6033','EPSG','4104','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6034','EPSG Arctic LCC zone 5-39','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-71.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',39500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9608','conversion','EPSG','6034','EPSG','4105','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6035','EPSG Arctic LCC zone 5-41','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-62.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',41500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9609','conversion','EPSG','6035','EPSG','4106','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6036','EPSG Arctic LCC zone 5-43','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-42.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',43500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9610','conversion','EPSG','6036','EPSG','4107','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6037','EPSG Arctic LCC zone 5-45','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-22.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',45500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9611','conversion','EPSG','6037','EPSG','4108','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6038','EPSG Arctic LCC zone 5-47','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995768455.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',72.01300331,'EPSG','9110','EPSG','8822','Longitude of false origin',-5.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',73.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',70.2,'EPSG','9110','EPSG','8826','Easting at false origin',47500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9612','conversion','EPSG','6038','EPSG','4109','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6039','EPSG Arctic LCC zone 6-14','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-165.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',14500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9613','conversion','EPSG','6039','EPSG','4110','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6040','EPSG Arctic LCC zone 6-16','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-147.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',16500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9614','conversion','EPSG','6040','EPSG','4111','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6041','EPSG Arctic LCC zone 6-18','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-132.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',18500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9615','conversion','EPSG','6041','EPSG','4112','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6042','EPSG Arctic LCC zone 6-20','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-113.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',20500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9616','conversion','EPSG','6042','EPSG','4113','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6043','EPSG Arctic LCC zone 6-22','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',22500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9617','conversion','EPSG','6043','EPSG','4114','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6044','EPSG Arctic LCC zone 6-24','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-75.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',24500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9618','conversion','EPSG','6044','EPSG','4115','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6045','EPSG Arctic LCC zone 6-26','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-56.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',26500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9619','conversion','EPSG','6045','EPSG','4116','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6046','EPSG Arctic LCC zone 6-28','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-38.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',28500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9620','conversion','EPSG','6046','EPSG','4117','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6047','EPSG Arctic LCC zone 6-30','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995770671.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',68.4114912,'EPSG','9110','EPSG','8822','Longitude of false origin',-20.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',70.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',67.0,'EPSG','9110','EPSG','8826','Easting at false origin',30500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9621','conversion','EPSG','6047','EPSG','4118','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6048','EPSG Arctic LCC zone 7-11','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995772585.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.21037415,'EPSG','9110','EPSG','8822','Longitude of false origin',-51.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',67.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',63.4,'EPSG','9110','EPSG','8826','Easting at false origin',11500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',7500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9622','conversion','EPSG','6048','EPSG','4119','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6049','EPSG Arctic LCC zone 7-13','May be defined using LCC (1SP) method (EPSG method code 9801) with value of latitude for natural origin as latitude at false origin here and scale factor = 0.9995772585.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.21037415,'EPSG','9110','EPSG','8822','Longitude of false origin',-34.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',67.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',63.4,'EPSG','9110','EPSG','8826','Easting at false origin',13500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',7500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9623','conversion','EPSG','6049','EPSG','4120','EPSG','1148'); INSERT INTO "conversion" VALUES('EPSG','6126','Cayman Islands LCC (ft)','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',19.2,'EPSG','9110','EPSG','8822','Longitude of false origin',80.34,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',19.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',19.42,'EPSG','9110','EPSG','8826','Easting at false origin',2950000.0,'EPSG','9002','EPSG','8827','Northing at false origin',1900000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9624','conversion','EPSG','6126','EPSG','1063','EPSG','1027'); INSERT INTO "conversion" VALUES('EPSG','6127','Cayman Islands TM (ft)','Sometimes locally referred to as "UTM zone 17".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640419.9475,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9625','conversion','EPSG','6127','EPSG','1063','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','6197','Michigan CS27 North zone','','EPSG','1051','Lambert Conic Conformal (2SP Michigan)','EPSG','8821','Latitude of false origin',44.87,'EPSG','9110','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.05,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003','EPSG','1038','Ellipsoid scaling factor',1.0000382,'EPSG','9201',1); INSERT INTO "usage" VALUES('EPSG','9642','conversion','EPSG','6197','EPSG','1723','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6198','Michigan CS27 Central zone','','EPSG','1051','Lambert Conic Conformal (2SP Michigan)','EPSG','8821','Latitude of false origin',43.19,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.11,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.42,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003','EPSG','1038','Ellipsoid scaling factor',1.0000382,'EPSG','9201',0); INSERT INTO "usage" VALUES('EPSG','9643','conversion','EPSG','6198','EPSG','1724','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6199','Michigan CS27 South zone','','EPSG','1051','Lambert Conic Conformal (2SP Michigan)','EPSG','8821','Latitude of false origin',41.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.06,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',43.4,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003','EPSG','1038','Ellipsoid scaling factor',1.0000382,'EPSG','9201',0); INSERT INTO "usage" VALUES('EPSG','9644','conversion','EPSG','6199','EPSG','1725','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6203','Macedonia Gauss-Kruger','A version of this projection with FN reduced by 4000000 is sometimes used for cadastre - see projection code 9911.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17410','conversion','EPSG','6203','EPSG','1148','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6212','Arauca urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',7.051538301,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.452991476,'EPSG','9110','EPSG','8806','False easting',1035263.443,'EPSG','9001','EPSG','8807','False northing',1275526.621,'EPSG','9001','EPSG','1039','Projection plane origin height',100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9650','conversion','EPSG','6212','EPSG','4122','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6213','Armenia urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.315637,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.4024561,'EPSG','9110','EPSG','8806','False easting',1155824.666,'EPSG','9001','EPSG','8807','False northing',993087.465,'EPSG','9001','EPSG','1039','Projection plane origin height',1470.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9651','conversion','EPSG','6213','EPSG','4132','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6214','Barranquilla urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',10.55234591,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.50035928,'EPSG','9110','EPSG','8806','False easting',917264.406,'EPSG','9001','EPSG','8807','False northing',1699839.935,'EPSG','9001','EPSG','1039','Projection plane origin height',100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9652','conversion','EPSG','6214','EPSG','4134','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6215','Bogota urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.404975,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.084773,'EPSG','9110','EPSG','8806','False easting',92334.879,'EPSG','9001','EPSG','8807','False northing',109320.965,'EPSG','9001','EPSG','1039','Projection plane origin height',2550.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9653','conversion','EPSG','6215','EPSG','4135','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6216','Bucaramanga urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',7.044399371,'EPSG','9110','EPSG','8802','Longitude of natural origin',-73.11504356,'EPSG','9110','EPSG','8806','False easting',1097241.305,'EPSG','9001','EPSG','8807','False northing',1274642.278,'EPSG','9001','EPSG','1039','Projection plane origin height',931.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9654','conversion','EPSG','6216','EPSG','4136','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6217','Cali urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',3.263078,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.3114025,'EPSG','9110','EPSG','8806','False easting',1061900.18,'EPSG','9001','EPSG','8807','False northing',872364.63,'EPSG','9001','EPSG','1039','Projection plane origin height',1000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9655','conversion','EPSG','6217','EPSG','4137','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6218','Cartagena urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',10.2349371,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.3040345,'EPSG','9110','EPSG','8806','False easting',842981.41,'EPSG','9001','EPSG','8807','False northing',1641887.09,'EPSG','9001','EPSG','1039','Projection plane origin height',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9656','conversion','EPSG','6218','EPSG','4138','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6219','Cucuta urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',7.532017225,'EPSG','9110','EPSG','8802','Longitude of natural origin',-72.301033542,'EPSG','9110','EPSG','8806','False easting',842805.406,'EPSG','9001','EPSG','8807','False northing',1364404.57,'EPSG','9001','EPSG','1039','Projection plane origin height',308.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9657','conversion','EPSG','6219','EPSG','4139','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6220','Florencia urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.371564426,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.370882337,'EPSG','9110','EPSG','8806','False easting',1162300.348,'EPSG','9001','EPSG','8807','False northing',671068.716,'EPSG','9001','EPSG','1039','Projection plane origin height',300.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9658','conversion','EPSG','6220','EPSG','4140','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6221','Ibague urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.250988618,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.104773336,'EPSG','9110','EPSG','8806','False easting',877634.33,'EPSG','9001','EPSG','8807','False northing',980541.348,'EPSG','9001','EPSG','1039','Projection plane origin height',1100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9659','conversion','EPSG','6221','EPSG','4141','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6222','Inirida urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',3.504357746,'EPSG','9110','EPSG','8802','Longitude of natural origin',-67.541883552,'EPSG','9110','EPSG','8806','False easting',1019177.687,'EPSG','9001','EPSG','8807','False northing',491791.326,'EPSG','9001','EPSG','1039','Projection plane origin height',96.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9660','conversion','EPSG','6222','EPSG','4142','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6223','Leticia urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',-4.115166257,'EPSG','9110','EPSG','8802','Longitude of natural origin',-69.563411981,'EPSG','9110','EPSG','8806','False easting',25978.217,'EPSG','9001','EPSG','8807','False northing',27501.365,'EPSG','9001','EPSG','1039','Projection plane origin height',89.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9661','conversion','EPSG','6223','EPSG','4143','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6224','Manizales urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.0405354,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.3039941,'EPSG','9110','EPSG','8806','False easting',1173727.04,'EPSG','9001','EPSG','8807','False northing',1052391.13,'EPSG','9001','EPSG','1039','Projection plane origin height',2100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9662','conversion','EPSG','6224','EPSG','4144','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6225','Medellin urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',6.1345152,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.3353593,'EPSG','9110','EPSG','8806','False easting',835378.647,'EPSG','9001','EPSG','8807','False northing',1180816.875,'EPSG','9001','EPSG','1039','Projection plane origin height',1510.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9663','conversion','EPSG','6225','EPSG','4145','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6226','Mitu urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.145988972,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.140766196,'EPSG','9110','EPSG','8806','False easting',1093717.398,'EPSG','9001','EPSG','8807','False northing',629997.236,'EPSG','9001','EPSG','1039','Projection plane origin height',170.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9664','conversion','EPSG','6226','EPSG','4146','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6227','Mocoa urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.082408409,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.390367639,'EPSG','9110','EPSG','8806','False easting',1047467.388,'EPSG','9001','EPSG','8807','False northing',617828.474,'EPSG','9001','EPSG','1039','Projection plane origin height',655.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9665','conversion','EPSG','6227','EPSG','4147','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6228','Monteria urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',8.462310872,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.524639199,'EPSG','9110','EPSG','8806','False easting',1131814.934,'EPSG','9001','EPSG','8807','False northing',1462131.119,'EPSG','9001','EPSG','1039','Projection plane origin height',15.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9666','conversion','EPSG','6228','EPSG','4148','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6229','Neiva urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',2.56326942,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.17471722,'EPSG','9110','EPSG','8806','False easting',864476.923,'EPSG','9001','EPSG','8807','False northing',817199.827,'EPSG','9001','EPSG','1039','Projection plane origin height',430.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9667','conversion','EPSG','6229','EPSG','4149','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6230','Pasto urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.120356225,'EPSG','9110','EPSG','8802','Longitude of natural origin',-77.151125228,'EPSG','9110','EPSG','8806','False easting',980469.695,'EPSG','9001','EPSG','8807','False northing',624555.332,'EPSG','9001','EPSG','1039','Projection plane origin height',2530.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9668','conversion','EPSG','6230','EPSG','4150','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6231','Pereira urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.4848937,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.4138225,'EPSG','9110','EPSG','8806','False easting',1153492.012,'EPSG','9001','EPSG','8807','False northing',1024195.255,'EPSG','9001','EPSG','1039','Projection plane origin height',1500.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9669','conversion','EPSG','6231','EPSG','4151','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6232','Popayan urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',2.272217558,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.362192989,'EPSG','9110','EPSG','8806','False easting',1052430.525,'EPSG','9001','EPSG','8807','False northing',763366.548,'EPSG','9001','EPSG','1039','Projection plane origin height',1740.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9670','conversion','EPSG','6232','EPSG','4152','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6233','Puerto Carreno urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',6.105059709,'EPSG','9110','EPSG','8802','Longitude of natural origin',-67.300270089,'EPSG','9110','EPSG','8806','False easting',1063834.703,'EPSG','9001','EPSG','8807','False northing',1175257.481,'EPSG','9001','EPSG','1039','Projection plane origin height',51.58,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9671','conversion','EPSG','6233','EPSG','4153','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6234','Quibdo urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.413929158,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.390271389,'EPSG','9110','EPSG','8806','False easting',1047273.617,'EPSG','9001','EPSG','8807','False northing',1121443.09,'EPSG','9001','EPSG','1039','Projection plane origin height',44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9672','conversion','EPSG','6234','EPSG','4154','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6235','Riohacha urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',11.321288798,'EPSG','9110','EPSG','8802','Longitude of natural origin',-72.540996793,'EPSG','9110','EPSG','8806','False easting',1128154.73,'EPSG','9001','EPSG','8807','False northing',1767887.914,'EPSG','9001','EPSG','1039','Projection plane origin height',6.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9673','conversion','EPSG','6235','EPSG','4155','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6236','San Andres urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',12.312565957,'EPSG','9110','EPSG','8802','Longitude of natural origin',-81.434575342,'EPSG','9110','EPSG','8806','False easting',820439.298,'EPSG','9001','EPSG','8807','False northing',1877357.828,'EPSG','9001','EPSG','1039','Projection plane origin height',6.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9674','conversion','EPSG','6236','EPSG','4156','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6237','San Jose del Guaviare urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',2.335068419,'EPSG','9110','EPSG','8802','Longitude of natural origin',-72.382411997,'EPSG','9110','EPSG','8806','False easting',1159876.62,'EPSG','9001','EPSG','8807','False northing',775380.342,'EPSG','9001','EPSG','1039','Projection plane origin height',185.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9675','conversion','EPSG','6237','EPSG','4157','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6238','Santa Marta urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',11.1310715,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.1330019,'EPSG','9110','EPSG','8806','False easting',983892.409,'EPSG','9001','EPSG','8807','False northing',1732533.518,'EPSG','9001','EPSG','1039','Projection plane origin height',29.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9676','conversion','EPSG','6238','EPSG','4128','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6239','Sucre urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',8.483798132,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.432088057,'EPSG','9110','EPSG','8806','False easting',929043.607,'EPSG','9001','EPSG','8807','False northing',1466125.658,'EPSG','9001','EPSG','1039','Projection plane origin height',20.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9677','conversion','EPSG','6239','EPSG','4130','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6240','Tunja urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.320310106,'EPSG','9110','EPSG','8802','Longitude of natural origin',-73.210698004,'EPSG','9110','EPSG','8806','False easting',1080514.91,'EPSG','9001','EPSG','8807','False northing',1103772.028,'EPSG','9001','EPSG','1039','Projection plane origin height',2800.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9678','conversion','EPSG','6240','EPSG','4131','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6241','Valledupar urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',10.265014,'EPSG','9110','EPSG','8802','Longitude of natural origin',-73.1447657,'EPSG','9110','EPSG','8806','False easting',1090979.66,'EPSG','9001','EPSG','8807','False northing',1647208.93,'EPSG','9001','EPSG','1039','Projection plane origin height',200.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9679','conversion','EPSG','6241','EPSG','4158','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6242','Villavicencio urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.091935036,'EPSG','9110','EPSG','8802','Longitude of natural origin',-73.372814955,'EPSG','9110','EPSG','8806','False easting',1050678.757,'EPSG','9001','EPSG','8807','False northing',950952.124,'EPSG','9001','EPSG','1039','Projection plane origin height',427.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9680','conversion','EPSG','6242','EPSG','4159','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6243','Yopal urban grid','','EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.2114138,'EPSG','9110','EPSG','8802','Longitude of natural origin',-72.2512145,'EPSG','9110','EPSG','8806','False easting',851184.177,'EPSG','9001','EPSG','8807','False northing',1083954.137,'EPSG','9001','EPSG','1039','Projection plane origin height',300.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9681','conversion','EPSG','6243','EPSG','4160','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6308','Cyprus Transverse Mercator','Introduced in 1993. Replaces Cassini grid.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',-3500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9713','conversion','EPSG','6308','EPSG','3236','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','6361','Mexico LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',12.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-102.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',17.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',29.5,'EPSG','9102','EPSG','8826','Easting at false origin',2500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9719','conversion','EPSG','6361','EPSG','1160','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','6374','Ukraine TM zone 7','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9721','conversion','EPSG','6374','EPSG','3906','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6375','Ukraine TM zone 8','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9722','conversion','EPSG','6375','EPSG','3907','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6376','Ukraine TM zone 9','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9723','conversion','EPSG','6376','EPSG','3908','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6377','Ukraine TM zone 10','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9724','conversion','EPSG','6377','EPSG','3909','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6378','Ukraine TM zone 11','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9725','conversion','EPSG','6378','EPSG','3910','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6379','Ukraine TM zone 12','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9726','conversion','EPSG','6379','EPSG','3912','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6380','Ukraine TM zone 13','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9727','conversion','EPSG','6380','EPSG','3913','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6390','Cayman Islands LCC (ft)','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',19.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-80.34,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',19.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',19.42,'EPSG','9110','EPSG','8826','Easting at false origin',2950000.0,'EPSG','9002','EPSG','8827','Northing at false origin',1900000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9730','conversion','EPSG','6390','EPSG','1063','EPSG','1027'); INSERT INTO "conversion" VALUES('EPSG','6645','Quebec Albers Projection','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',44.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-68.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',60.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9732','conversion','EPSG','6645','EPSG','1368','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','6702','TM 60 SW','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-60.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9737','conversion','EPSG','6702','EPSG','4172','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','6716','Christmas Island Grid 1992','Replaces CIG85. Replaced by CIG94.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',105.373,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9743','conversion','EPSG','6716','EPSG','4169','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6717','Christmas Island Grid 1994','Replaces CIG85 and CIG92. Replaced by CIG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',105.373,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002514,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9744','conversion','EPSG','6717','EPSG','4169','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','6718','Cocos Island Grid 1992','Replaces CKIG65. Replaced by CKIG94.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',96.523,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',1400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9745','conversion','EPSG','6718','EPSG','1069','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6719','Cocos Island Grid 1994','Replaces CKIG92. Replaced by CKIG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',96.523,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999387,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9746','conversion','EPSG','6719','EPSG','1069','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','6725','Map Grid of Australia zone 41','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9748','conversion','EPSG','6725','EPSG','4173','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6726','Map Grid of Australia zone 42','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9749','conversion','EPSG','6726','EPSG','4181','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6727','Map Grid of Australia zone 43','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9750','conversion','EPSG','6727','EPSG','4184','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6728','Map Grid of Australia zone 44','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9751','conversion','EPSG','6728','EPSG','4185','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6729','Map Grid of Australia zone 46','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9752','conversion','EPSG','6729','EPSG','4189','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6730','Map Grid of Australia zone 47','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9753','conversion','EPSG','6730','EPSG','4190','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6731','Map Grid of Australia zone 59','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9754','conversion','EPSG','6731','EPSG','4179','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6741','Oregon Baker zone (meter)','See code 6742 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00016,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9757','conversion','EPSG','6741','EPSG','4180','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6742','Oregon Baker zone (international foot)','See code 6741 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00016,'EPSG','9201','EPSG','8806','False easting',131233.5958,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9758','conversion','EPSG','6742','EPSG','4180','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6743','Oregon Bend-Klamath Falls zone (meter)','See code 6744 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-121.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9759','conversion','EPSG','6743','EPSG','4192','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6744','Oregon Bend-Klamath Falls zone (international foot)','See code 6743 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-121.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',262467.1916,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9760','conversion','EPSG','6744','EPSG','4192','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6745','Oregon Bend-Redmond-Prineville zone (meter)','See code 6746 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-121.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',130000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9761','conversion','EPSG','6745','EPSG','4195','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6746','Oregon Bend-Redmond-Prineville zone (international foot)','See code 6745 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-121.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',262467.1916,'EPSG','9002','EPSG','8807','False northing',426509.1864,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9762','conversion','EPSG','6746','EPSG','4195','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6747','Oregon Bend-Burns zone (meter)','See code 6748 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',120000.0,'EPSG','9001','EPSG','8807','False northing',60000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9763','conversion','EPSG','6747','EPSG','4182','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6748','Oregon Bend-Burns zone (international foot)','See code 6747 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',393700.7874,'EPSG','9002','EPSG','8807','False northing',196850.3937,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9764','conversion','EPSG','6748','EPSG','4182','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6749','Oregon Canyonville-Grants Pass zone (meter)','See code 6750 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00007,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9765','conversion','EPSG','6749','EPSG','4199','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6750','Oregon Canyonville-Grants Pass zone (international foot)','See code 6749 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00007,'EPSG','9201','EPSG','8806','False easting',131233.5958,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9766','conversion','EPSG','6750','EPSG','4199','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6751','Oregon Columbia River East zone (meter)','See code 6752 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000008,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',30000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9767','conversion','EPSG','6751','EPSG','4200','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6752','Oregon Columbia River East zone (international foot)','See code 6751 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000008,'EPSG','9201','EPSG','8806','False easting',492125.9843,'EPSG','9002','EPSG','8807','False northing',98425.1969,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9768','conversion','EPSG','6752','EPSG','4200','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6753','Oregon Columbia River West zone (meter)','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=168300.419 m, Nc=185673.833 m. See code 6754 for equivalent non-metric definition.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.55,'EPSG','9110','EPSG','8812','Longitude of projection centre',-123.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',295.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',295.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',7000000.0,'EPSG','9001','EPSG','8807','False northing',-3000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9769','conversion','EPSG','6753','EPSG','4202','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6754','Oregon Columbia River West zone (international foot)','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=552166.730 ft, Nc=609166.118 ft. See code 6753 for equivalent metric definition.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.55,'EPSG','9110','EPSG','8812','Longitude of projection centre',-123.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',295.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',295.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',22965879.2651,'EPSG','9002','EPSG','8807','False northing',-9842519.685,'EPSG','9002',0); INSERT INTO "usage" VALUES('EPSG','9770','conversion','EPSG','6754','EPSG','4202','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6755','Oregon Cottage Grove-Canyonville zone (meter)','See code 6756 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9771','conversion','EPSG','6755','EPSG','4203','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6756','Oregon Cottage Grove-Canyonville zone (international foot)','See code 6755 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',164041.9948,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9772','conversion','EPSG','6756','EPSG','4203','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6757','Oregon Dufur-Madras zone (meter)','See code 6758 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-121.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00011,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9773','conversion','EPSG','6757','EPSG','4204','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6758','Oregon Dufur-Madras zone (international foot)','See code 6757 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-121.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00011,'EPSG','9201','EPSG','8806','False easting',262467.1916,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9774','conversion','EPSG','6758','EPSG','4204','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6759','Oregon Eugene zone (meter)','See code 6760 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9775','conversion','EPSG','6759','EPSG','4197','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6760','Oregon Eugene zone (international foot)','See code 6759 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',164041.9948,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9776','conversion','EPSG','6760','EPSG','4197','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6761','Oregon Grants Pass-Ashland zone (meter)','See code 6762 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000043,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9777','conversion','EPSG','6761','EPSG','4198','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6762','Oregon Grants Pass-Ashland zone (international foot)','See code 6761 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000043,'EPSG','9201','EPSG','8806','False easting',164041.9948,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9778','conversion','EPSG','6762','EPSG','4198','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6763','Oregon Gresham-Warm Springs zone (meter)','See code 6764 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00005,'EPSG','9201','EPSG','8806','False easting',10000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9779','conversion','EPSG','6763','EPSG','4201','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6764','Oregon Gresham-Warm Springs zone (international foot)','See code 6763 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00005,'EPSG','9201','EPSG','8806','False easting',32808.399,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9780','conversion','EPSG','6764','EPSG','4201','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6765','Oregon La Grande zone (meter)','See code 6766 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00013,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9781','conversion','EPSG','6765','EPSG','4206','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6766','Oregon La Grande zone (international foot)','See code 6765 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00013,'EPSG','9201','EPSG','8806','False easting',131233.5958,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9782','conversion','EPSG','6766','EPSG','4206','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6767','Oregon Ontario zone (meter)','See code 6768 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0001,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9783','conversion','EPSG','6767','EPSG','4207','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6768','Oregon Ontario zone (international foot)','See code 6767 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0001,'EPSG','9201','EPSG','8806','False easting',262467.1916,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9784','conversion','EPSG','6768','EPSG','4207','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6769','Oregon Coast zone (meter)','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=134743.332 m, Nc=369139.028 m. See code 6770 for equivalent non-metric definition.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',44.45,'EPSG','9110','EPSG','8812','Longitude of projection centre',-124.03,'EPSG','9110','EPSG','8813','Azimuth at projection centre',5.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',5.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',-300000.0,'EPSG','9001','EPSG','8807','False northing',-4600000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','9785','conversion','EPSG','6769','EPSG','4208','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6770','Oregon Coast zone (international foot)','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=442071.300 ft, Nc=1211086.049 ft. See code 6769 for equivalent metric definition.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',44.45,'EPSG','9110','EPSG','8812','Longitude of projection centre',-124.03,'EPSG','9110','EPSG','8813','Azimuth at projection centre',5.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',5.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',-984251.9685,'EPSG','9002','EPSG','8807','False northing',-15091863.5171,'EPSG','9002',0); INSERT INTO "usage" VALUES('EPSG','9786','conversion','EPSG','6770','EPSG','4208','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6771','Oregon Pendleton zone (meter)','See code 6772 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9787','conversion','EPSG','6771','EPSG','4209','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6772','Oregon Pendleton zone (international foot)','See code 6771 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',196850.3937,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9788','conversion','EPSG','6772','EPSG','4209','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6773','Oregon Pendleton-La Grande zone (meter)','See code 6774 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000175,'EPSG','9201','EPSG','8806','False easting',30000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9789','conversion','EPSG','6773','EPSG','4210','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6774','Oregon Pendleton-La Grande zone (international foot)','See code 6773 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000175,'EPSG','9201','EPSG','8806','False easting',98425.1969,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9790','conversion','EPSG','6774','EPSG','4210','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6775','Oregon Portland zone (meter)','See code 6776 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000002,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9791','conversion','EPSG','6775','EPSG','4211','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6776','Oregon Portland zone (international foot)','See code 6775 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000002,'EPSG','9201','EPSG','8806','False easting',328083.9895,'EPSG','9002','EPSG','8807','False northing',164041.9948,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9792','conversion','EPSG','6776','EPSG','4211','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6777','Oregon Salem zone (meter)','See code 6778 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00001,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9793','conversion','EPSG','6777','EPSG','4212','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6778','Oregon Salem zone (international foot)','See code 6777 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00001,'EPSG','9201','EPSG','8806','False easting',164041.9948,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9794','conversion','EPSG','6778','EPSG','4212','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6779','Oregon Santiam Pass zone (meter)','See code 6780 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000155,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9795','conversion','EPSG','6779','EPSG','4213','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6780','Oregon Santiam Pass zone (international foot)','See code 6779 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000155,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9796','conversion','EPSG','6780','EPSG','4213','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','6869','Albania TM 2010','Planimetric component of Albanian Geodetic Reference Framework (KRGJSH) 2010. Albania LCC 2010 projection (code 6961) used for mapping at scales of 1:500,000 and smaller.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',20.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9800','conversion','EPSG','6869','EPSG','3212','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','6877','Italy zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9985,'EPSG','9201','EPSG','8806','False easting',7000000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9804','conversion','EPSG','6877','EPSG','1127','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','6878','Italy zone 12','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9805','conversion','EPSG','6878','EPSG','1127','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6920','Kansas DOT Lambert (meter)','See code 6921 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.3,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9832','conversion','EPSG','6920','EPSG','1385','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','6921','Kansas DOT Lambert (US survey foot)','See code 6920 for equivalent metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.3,'EPSG','9110','EPSG','8826','Easting at false origin',1312333.3333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9833','conversion','EPSG','6921','EPSG','1385','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','6928','US NSIDC EASE-Grid 2.0 Global','','EPSG','9835','Lambert Cylindrical Equal Area','EPSG','8823','Latitude of 1st standard parallel',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9835','conversion','EPSG','6928','EPSG','3463','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','6929','US NSIDC EASE-Grid 2.0 North','','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9836','conversion','EPSG','6929','EPSG','3475','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','6930','US NSIDC EASE-Grid 2.0 South','','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9837','conversion','EPSG','6930','EPSG','3474','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','6952','Vietnam TM-3 zone 481','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',102.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9855','conversion','EPSG','6952','EPSG','4193','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6953','Vietnam TM-3 zone 482','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9856','conversion','EPSG','6953','EPSG','4215','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6954','Vietnam TM-3 zone 491','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',108.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9857','conversion','EPSG','6954','EPSG','4217','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6955','Vietnam TM-3 Da Nang zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9858','conversion','EPSG','6955','EPSG','4218','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','6961','Albania LCC 2010','Albania TM 2010 projection (code 6869) used for applications at scales larger than 1:500,000.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',20.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9860','conversion','EPSG','6961','EPSG','1025','EPSG','1107'); INSERT INTO "conversion" VALUES('EPSG','6965','Michigan CS27 North zone','','EPSG','1051','Lambert Conic Conformal (2SP Michigan)','EPSG','8821','Latitude of false origin',44.47,'EPSG','9110','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.05,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003','EPSG','1038','Ellipsoid scaling factor',1.0000382,'EPSG','9201',0); INSERT INTO "usage" VALUES('EPSG','9863','conversion','EPSG','6965','EPSG','1723','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6994','City and County of San Francisco CS13 (meters)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.45,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000007,'EPSG','9202','EPSG','8806','False easting',48000.0,'EPSG','9001','EPSG','8807','False northing',24000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9877','conversion','EPSG','6994','EPSG','4228','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','6995','City and County of San Francisco CS13 (US Survey feet)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.45,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000007,'EPSG','9202','EPSG','8806','False easting',157480.0,'EPSG','9003','EPSG','8807','False northing',78740.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','9878','conversion','EPSG','6995','EPSG','4228','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','7043','Iowa regional zone 1 Spencer','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-95.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000052,'EPSG','9201','EPSG','8806','False easting',11500000.0,'EPSG','9003','EPSG','8807','False northing',9600000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9912','conversion','EPSG','7043','EPSG','4164','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7044','Iowa regional zone 2 Mason City','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000043,'EPSG','9201','EPSG','8806','False easting',12500000.0,'EPSG','9003','EPSG','8807','False northing',9800000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9913','conversion','EPSG','7044','EPSG','4219','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7045','Iowa regional zone 3 Elkader','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.12,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000035,'EPSG','9201','EPSG','8806','False easting',13500000.0,'EPSG','9003','EPSG','8807','False northing',8300000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9914','conversion','EPSG','7045','EPSG','4230','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7046','Iowa regional zone 4 Sioux City-Iowa Falls','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.32,'EPSG','9110','EPSG','8802','Longitude of natural origin',-94.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',14500000.0,'EPSG','9003','EPSG','8807','False northing',8600000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9915','conversion','EPSG','7046','EPSG','4233','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7047','Iowa regional zone 5 Waterloo','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000032,'EPSG','9201','EPSG','8806','False easting',15500000.0,'EPSG','9003','EPSG','8807','False northing',8900000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9916','conversion','EPSG','7047','EPSG','4234','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7048','Iowa regional zone 6 Council Bluffs','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-95.44,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000039,'EPSG','9201','EPSG','8806','False easting',16500000.0,'EPSG','9003','EPSG','8807','False northing',6600000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9917','conversion','EPSG','7048','EPSG','4235','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7049','Iowa regional zone 7 Carroll-Atlantic','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-94.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',17500000.0,'EPSG','9003','EPSG','8807','False northing',6800000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9918','conversion','EPSG','7049','EPSG','4236','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7050','Iowa regional zone 8 Ames-Des Moines','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-93.43,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000033,'EPSG','9201','EPSG','8806','False easting',18500000.0,'EPSG','9003','EPSG','8807','False northing',7000000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9919','conversion','EPSG','7050','EPSG','4237','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7051','Iowa regional zone 9 Newton','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.49,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',19500000.0,'EPSG','9003','EPSG','8807','False northing',7200000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9920','conversion','EPSG','7051','EPSG','4239','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7052','Iowa regional zone 10 Cedar Rapids','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',41.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',20500000.0,'EPSG','9003','EPSG','8807','False northing',8000000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9921','conversion','EPSG','7052','EPSG','4240','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7053','Iowa regional zone 11 Dubuque-Davenport','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.32,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',21500000.0,'EPSG','9003','EPSG','8807','False northing',7600000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9922','conversion','EPSG','7053','EPSG','4241','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7054','Iowa regional zone 12 Red Oak-Ottumwa','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.55,'EPSG','9110','EPSG','8802','Longitude of natural origin',-93.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000037,'EPSG','9201','EPSG','8806','False easting',22500000.0,'EPSG','9003','EPSG','8807','False northing',6200000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9923','conversion','EPSG','7054','EPSG','4242','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7055','Iowa regional zone 13 Fairfield','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.55,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',23500000.0,'EPSG','9003','EPSG','8807','False northing',6400000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9924','conversion','EPSG','7055','EPSG','4243','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7056','Iowa regional zone 14 Burlington','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000018,'EPSG','9201','EPSG','8806','False easting',24500000.0,'EPSG','9003','EPSG','8807','False northing',6200000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9925','conversion','EPSG','7056','EPSG','4244','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','7089','Montana Blackfeet St Mary Valley (meter)','See code 7090 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',48.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00016,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9927','conversion','EPSG','7089','EPSG','4310','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7090','Montana Blackfeet St Mary Valley (international foot)','For authoritative metric definition see code 7089. Working unit is International feet (note: not US Survey feet).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',48.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00016,'EPSG','9201','EPSG','8806','False easting',492125.9843,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9928','conversion','EPSG','7090','EPSG','4310','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7091','Montana Blackfeet (meter)','See code 7092 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',48.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00019,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9929','conversion','EPSG','7091','EPSG','4311','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7092','Montana Blackfeet (international foot)','For authoritative metric definition see code 7091. Working unit is International feet (note: not US Survey feet).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',48.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00019,'EPSG','9201','EPSG','8806','False easting',328083.9895,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9930','conversion','EPSG','7092','EPSG','4311','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7093','Montana Milk River (meter)','See code 7094 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000145,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9931','conversion','EPSG','7093','EPSG','4312','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7094','Montana Milk River (international foot)','For authoritative metric definition see code 7093. Working unit is International feet (note: not US Survey feet).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000145,'EPSG','9201','EPSG','8806','False easting',492125.9843,'EPSG','9002','EPSG','8807','False northing',656167.979,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9932','conversion','EPSG','7094','EPSG','4312','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7095','Montana Fort Belknap (meter)','See code 7096 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',150000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9933','conversion','EPSG','7095','EPSG','4313','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7096','Montana Fort Belknap (international foot)','For authoritative metric definition see code 7095. Working unit is International feet (note: not US Survey feet).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',656167.979,'EPSG','9002','EPSG','8807','False northing',492125.9843,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9934','conversion','EPSG','7096','EPSG','4313','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7097','Montana Fort Peck Assiniboine (meter)','See code 7098 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-105.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9935','conversion','EPSG','7097','EPSG','4314','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7098','Montana Fort Peck Assiniboine (international foot)','For authoritative metric definition see code 7097. Working unit is International feet (note: not US Survey feet).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-105.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',656167.979,'EPSG','9002','EPSG','8807','False northing',328083.9895,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9936','conversion','EPSG','7098','EPSG','4314','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7099','Montana Fort Peck Sioux (meter)','See code 7100 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-105.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00009,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9937','conversion','EPSG','7099','EPSG','4315','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7100','Montana Fort Peck Sioux (international foot)','For authoritative metric definition see code 7099. Working unit is International feet (note: not US Survey feet).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',48.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-105.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00009,'EPSG','9201','EPSG','8806','False easting',328083.9895,'EPSG','9002','EPSG','8807','False northing',164041.9938,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9938','conversion','EPSG','7100','EPSG','4315','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7101','Montana Crow (meter)','See code 7102 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000148,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9939','conversion','EPSG','7101','EPSG','4316','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7102','Montana Crow (international foot)','For authoritative metric definition see code 7101. Working unit is International feet (note: not US Survey feet).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000148,'EPSG','9201','EPSG','8806','False easting',656167.979,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9940','conversion','EPSG','7102','EPSG','4316','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7103','Montana Bobcat (meter)','See code 7104 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-111.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000185,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9941','conversion','EPSG','7103','EPSG','4317','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7104','Montana Bobcat (international foot)','For authoritative metric definition see code 7103. Working unit is International feet (note: not US Survey feet).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-111.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000185,'EPSG','9201','EPSG','8806','False easting',328083.9895,'EPSG','9002','EPSG','8807','False northing',328083.9895,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9942','conversion','EPSG','7104','EPSG','4317','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7105','Montana Billings (meter)','See code 7106 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.47,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0001515,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9943','conversion','EPSG','7105','EPSG','4318','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7106','Montana Billings (international foot)','For authoritative metric definition see code 7105. Working unit is International feet (note: not US Survey feet).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.47,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0001515,'EPSG','9201','EPSG','8806','False easting',656167.979,'EPSG','9002','EPSG','8807','False northing',164041.9948,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9944','conversion','EPSG','7106','EPSG','4318','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7107','Wyoming Wind River (meter)','See code 7108 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00024,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9945','conversion','EPSG','7107','EPSG','4319','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7108','Wyoming Wind River (US survey foot)','For authoritative metric definition see code 7107. Working unit is US Survey feet.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00024,'EPSG','9201','EPSG','8806','False easting',328083.3333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9946','conversion','EPSG','7108','EPSG','4319','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7129','City and County of San Francisco CS13 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.45,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000007,'EPSG','9201','EPSG','8806','False easting',48000.0,'EPSG','9001','EPSG','8807','False northing',24000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9947','conversion','EPSG','7129','EPSG','4228','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','7130','City and County of San Francisco CS13 (US survey foot)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.45,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000007,'EPSG','9201','EPSG','8806','False easting',157480.0,'EPSG','9003','EPSG','8807','False northing',78740.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9948','conversion','EPSG','7130','EPSG','4228','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','7141','Palestine Grid modified','Modification of Palestine Grid (proj 18201) using TM rather than Cassini projection method. The difference in coordinates caused by change of method is under 2m within Israel but can be over 200m in eastern Jordan.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.4402749,'EPSG','9110','EPSG','8802','Longitude of natural origin',35.124349,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',170251.555,'EPSG','9001','EPSG','8807','False northing',126867.909,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9950','conversion','EPSG','7141','EPSG','1356','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','7143','InGCS Adams (m)','For equivalent non-metric definition see proj code 7144.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9951','conversion','EPSG','7143','EPSG','4289','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7144','InGCS Adams (ftUS)','See proj code 7143 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9952','conversion','EPSG','7144','EPSG','4289','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7145','InGCS Allen (m)','For equivalent non-metric definition see proj code 7146.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9953','conversion','EPSG','7145','EPSG','4285','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7146','InGCS Allen (ftUS)','See proj code 7145 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9954','conversion','EPSG','7146','EPSG','4285','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7147','InGCS Bartholomew (m)','For equivalent non-metric definition see proj code 7148.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9955','conversion','EPSG','7147','EPSG','4302','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7148','InGCS Bartholomew (ftUS)','See proj code 7147 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9956','conversion','EPSG','7148','EPSG','4302','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7149','InGCS Benton (m)','For equivalent non-metric definition see proj code 7150.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000029,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9957','conversion','EPSG','7149','EPSG','4256','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7150','InGCS Benton (ftUS)','See proj code 7149 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000029,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9958','conversion','EPSG','7150','EPSG','4256','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7151','InGCS Blackford-Delaware (m)','For equivalent non-metric definition see proj code 7152. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.03,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9959','conversion','EPSG','7151','EPSG','4291','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7152','InGCS Blackford-Delaware (ftUS)','See proj code 7151 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.03,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9960','conversion','EPSG','7152','EPSG','4291','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7153','InGCS Boone-Hendricks (m)','For equivalent non-metric definition see proj code 7154. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9961','conversion','EPSG','7153','EPSG','4263','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7154','InGCS Boone-Hendricks (ftUS)','See proj code 7153 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9962','conversion','EPSG','7154','EPSG','4263','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7155','InGCS Brown (m)','For equivalent non-metric definition see proj code 7156.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9963','conversion','EPSG','7155','EPSG','4301','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7156','InGCS Brown (ftUS)','See proj code 7155 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9964','conversion','EPSG','7156','EPSG','4301','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7157','InGCS Carroll (m)','For equivalent non-metric definition see proj code 7158.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9965','conversion','EPSG','7157','EPSG','4258','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7158','InGCS Carroll (ftUS)','See proj code 7157 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9966','conversion','EPSG','7158','EPSG','4258','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7159','InGCS Cass (m)','For equivalent non-metric definition see proj code 7160.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000028,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9967','conversion','EPSG','7159','EPSG','4286','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7160','InGCS Cass (ftUS)','See proj code 7159 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000028,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9968','conversion','EPSG','7160','EPSG','4286','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7161','InGCS Clark-Floyd-Scott (m)','For equivalent non-metric definition see proj code 7162. Defined by Indiana DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000021,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9969','conversion','EPSG','7161','EPSG','4308','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7162','InGCS Clark-Floyd-Scott (ftUS)','See proj code 7161 for authoritative metric definition. Defined by Indiana DOT as three separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000021,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9970','conversion','EPSG','7162','EPSG','4308','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7163','InGCS Clay (m)','For equivalent non-metric definition see proj code 7164.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9971','conversion','EPSG','7163','EPSG','4265','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7164','InGCS Clay (ftUS)','See proj code 7163 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9972','conversion','EPSG','7164','EPSG','4265','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7165','InGCS Clinton (m)','For equivalent non-metric definition see proj code 7166.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000032,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9973','conversion','EPSG','7165','EPSG','4260','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7166','InGCS Clinton (ftUS)','See proj code 7165 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000032,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9974','conversion','EPSG','7166','EPSG','4260','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7167','InGCS Crawford-Lawrence-Orange (m)','For equivalent non-metric definition see proj code 7168. Defined by Indiana DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9975','conversion','EPSG','7167','EPSG','4272','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7168','InGCS Crawford-Lawrence-Orange (ftUS)','See proj code 7167 for authoritative metric definition. Defined by Indiana DOT as three separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9976','conversion','EPSG','7168','EPSG','4272','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7169','InGCS Daviess-Greene (m)','For equivalent non-metric definition see proj code 7170. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.06,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000018,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9977','conversion','EPSG','7169','EPSG','4269','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7170','InGCS Daviess-Greene (ftUS)','See proj code 7169 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.06,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000018,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9978','conversion','EPSG','7170','EPSG','4269','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7171','InGCS Dearborn-Ohio-Switzerland (m)','For equivalent non-metric definition see proj code 7172. Defined by Indiana DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000029,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9979','conversion','EPSG','7171','EPSG','4306','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7172','InGCS Dearborn-Ohio-Switzerland (ftUS)','See proj code 7171 for authoritative metric definition. Defined by Indiana DOT as three separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000029,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9980','conversion','EPSG','7172','EPSG','4306','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7173','InGCS Decatur-Rush (m)','For equivalent non-metric definition see proj code 7174. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9981','conversion','EPSG','7173','EPSG','4299','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7174','InGCS Decatur-Rush (ftUS)','See proj code 7173 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9982','conversion','EPSG','7174','EPSG','4299','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7175','InGCS DeKalb (m)','For equivalent non-metric definition see proj code 7176.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9983','conversion','EPSG','7175','EPSG','4283','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7176','InGCS DeKalb (ftUS)','See proj code 7175 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9984','conversion','EPSG','7176','EPSG','4283','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7177','InGCS Dubois-Martin (m)','For equivalent non-metric definition see proj code 7178. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9985','conversion','EPSG','7177','EPSG','4271','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7178','InGCS Dubois-Martin (ftUS)','See proj code 7177 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9986','conversion','EPSG','7178','EPSG','4271','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7179','InGCS Elkhart-Kosciusko-Wabash (m)','For equivalent non-metric definition see proj code 7180. Defined by Indiana DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000033,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9987','conversion','EPSG','7179','EPSG','4280','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7180','InGCS Elkhart-Kosciusko-Wabash (ftUS)','See proj code 7179 for authoritative metric definition. Defined by Indiana DOT as three separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000033,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9988','conversion','EPSG','7180','EPSG','4280','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7181','InGCS Fayette-Franklin-Union (m)','For equivalent non-metric definition see proj code 7182. Defined by Indiana DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9989','conversion','EPSG','7181','EPSG','4300','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7182','InGCS Fayette-Franklin-Union (ftUS)','See proj code 7181 for authoritative metric definition. Defined by Indiana DOT as three separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9990','conversion','EPSG','7182','EPSG','4300','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7183','InGCS Fountain-Warren (m)','For equivalent non-metric definition see proj code 7184. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9991','conversion','EPSG','7183','EPSG','4259','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7184','InGCS Fountain-Warren (ftUS)','See proj code 7183 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9992','conversion','EPSG','7184','EPSG','4259','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7185','InGCS Fulton-Marshall-St. Joseph (m)','For equivalent non-metric definition see proj code 7186. Defined by Indiana DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9993','conversion','EPSG','7185','EPSG','4279','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7186','InGCS Fulton-Marshall-St. Joseph (ftUS)','See proj code 7185 for authoritative metric definition. Defined by Indiana DOT as three separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9994','conversion','EPSG','7186','EPSG','4279','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7187','InGCS Gibson (m)','For equivalent non-metric definition see proj code 7188.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000013,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9995','conversion','EPSG','7187','EPSG','4273','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7188','InGCS Gibson (ftUS)','See proj code 7187 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000013,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9996','conversion','EPSG','7188','EPSG','4273','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7189','InGCS Grant (m)','For equivalent non-metric definition see proj code 7190.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.42,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9997','conversion','EPSG','7189','EPSG','4290','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7190','InGCS Grant (ftUS)','See proj code 7189 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.42,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9998','conversion','EPSG','7190','EPSG','4290','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7191','InGCS Hamilton-Tipton (m)','For equivalent non-metric definition see proj code 7192. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','9999','conversion','EPSG','7191','EPSG','4293','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7192','InGCS Hamilton-Tipton (ftUS)','See proj code 7191 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10000','conversion','EPSG','7192','EPSG','4293','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7193','InGCS Hancock-Madison (m)','For equivalent non-metric definition see proj code 7194. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10001','conversion','EPSG','7193','EPSG','4294','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7194','InGCS Hancock-Madison (ftUS)','See proj code 7193 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000036,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10002','conversion','EPSG','7194','EPSG','4294','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7195','InGCS Harrison-Washington (m)','For equivalent non-metric definition see proj code 7196. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10003','conversion','EPSG','7195','EPSG','4307','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7196','InGCS Harrison-Washington (ftUS)','See proj code 7195 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10004','conversion','EPSG','7196','EPSG','4307','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7197','InGCS Henry (m)','For equivalent non-metric definition see proj code 7198.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000043,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10005','conversion','EPSG','7197','EPSG','4296','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7198','InGCS Henry (ftUS)','See proj code 7197 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000043,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10006','conversion','EPSG','7198','EPSG','4296','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7199','InGCS Howard-Miami (m)','For equivalent non-metric definition see proj code 7200. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10007','conversion','EPSG','7199','EPSG','4287','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7200','InGCS Howard-Miami (ftUS)','See proj code 7199 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10008','conversion','EPSG','7200','EPSG','4287','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7201','InGCS Huntington-Whitley (m)','For equivalent non-metric definition see proj code 7202. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10009','conversion','EPSG','7201','EPSG','4284','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7202','InGCS Huntington-Whitley (ftUS)','See proj code 7201 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10010','conversion','EPSG','7202','EPSG','4284','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7203','InGCS Jackson (m)','For equivalent non-metric definition see proj code 7204.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000022,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10011','conversion','EPSG','7203','EPSG','4303','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7204','InGCS Jackson (ftUS)','See proj code 7203 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000022,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10012','conversion','EPSG','7204','EPSG','4303','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7205','InGCS Jasper-Porter (m)','For equivalent non-metric definition see proj code 7206. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.06,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10013','conversion','EPSG','7205','EPSG','4254','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7206','InGCS Jasper-Porter (ftUS)','See proj code 7205 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.06,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10014','conversion','EPSG','7206','EPSG','4254','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7207','InGCS Jay (m)','For equivalent non-metric definition see proj code 7208.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10015','conversion','EPSG','7207','EPSG','4292','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7208','InGCS Jay (ftUS)','See proj code 7207 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10016','conversion','EPSG','7208','EPSG','4292','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7209','InGCS Jefferson (m)','For equivalent non-metric definition see proj code 7210.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000028,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10017','conversion','EPSG','7209','EPSG','4309','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7210','InGCS Jefferson (ftUS)','See proj code 7209 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000028,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10018','conversion','EPSG','7210','EPSG','4309','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7211','InGCS Jennings (m)','For equivalent non-metric definition see proj code 7212.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10019','conversion','EPSG','7211','EPSG','4304','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7212','InGCS Jennings (ftUS)','See proj code 7211 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10020','conversion','EPSG','7212','EPSG','4304','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7213','InGCS Johnson-Marion (m)','For equivalent non-metric definition see proj code 7214. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10021','conversion','EPSG','7213','EPSG','4297','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7214','InGCS Johnson-Marion (ftUS)','See proj code 7213 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10022','conversion','EPSG','7214','EPSG','4297','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7215','InGCS Knox (m)','For equivalent non-metric definition see proj code 7216.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10023','conversion','EPSG','7215','EPSG','4270','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7216','InGCS Knox (ftUS)','See proj code 7215 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10024','conversion','EPSG','7216','EPSG','4270','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7217','InGCS LaGrange-Noble (m)','For equivalent non-metric definition see proj code 7218. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000037,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10025','conversion','EPSG','7217','EPSG','4281','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7218','InGCS LaGrange-Noble (ftUS)','See proj code 7217 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000037,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10026','conversion','EPSG','7218','EPSG','4281','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7219','InGCS Lake-Newton (m)','For equivalent non-metric definition see proj code 7220. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10027','conversion','EPSG','7219','EPSG','4253','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7220','InGCS Lake-Newton (ftUS)','See proj code 7219 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10028','conversion','EPSG','7220','EPSG','4253','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7221','InGCS LaPorte-Pulaski-Starke (m)','For equivalent non-metric definition see proj code 7222. Defined by Indiana DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10029','conversion','EPSG','7221','EPSG','4255','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7222','InGCS LaPorte-Pulaski-Starke (ftUS)','See proj code 7221 for authoritative metric definition. Defined by Indiana DOT as three separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000027,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10030','conversion','EPSG','7222','EPSG','4255','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7223','InGCS Monroe-Morgan (m)','For equivalent non-metric definition see proj code 7224. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000028,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10031','conversion','EPSG','7223','EPSG','4267','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7224','InGCS Monroe-Morgan (ftUS)','See proj code 7223 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000028,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10032','conversion','EPSG','7224','EPSG','4267','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7225','InGCS Montgomery-Putnam (m)','For equivalent non-metric definition see proj code 7226. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10033','conversion','EPSG','7225','EPSG','4262','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7226','InGCS Montgomery-Putnam (ftUS)','See proj code 7225 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10034','conversion','EPSG','7226','EPSG','4262','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7227','InGCS Owen (m)','For equivalent non-metric definition see proj code 7228.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10035','conversion','EPSG','7227','EPSG','4266','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7228','InGCS Owen (ftUS)','See proj code 7227 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10036','conversion','EPSG','7228','EPSG','4266','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7229','InGCS Parke-Vermillion (m)','For equivalent non-metric definition see proj code 7230. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000022,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10037','conversion','EPSG','7229','EPSG','4261','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7230','InGCS Parke-Vermillion (ftUS)','See proj code 7229 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000022,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10038','conversion','EPSG','7230','EPSG','4261','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7231','InGCS Perry (m)','For equivalent non-metric definition see proj code 7232.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.42,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10039','conversion','EPSG','7231','EPSG','4278','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7232','InGCS Perry (ftUS)','See proj code 7231 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.42,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10040','conversion','EPSG','7232','EPSG','4278','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7233','InGCS Pike-Warrick (m)','For equivalent non-metric definition see proj code 7234. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.51,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10041','conversion','EPSG','7233','EPSG','4274','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7234','InGCS Pike-Warrick (ftUS)','See proj code 7233 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.51,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10042','conversion','EPSG','7234','EPSG','4274','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7235','InGCS Posey (m)','For equivalent non-metric definition see proj code 7236.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000013,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10043','conversion','EPSG','7235','EPSG','4275','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7236','InGCS Posey (ftUS)','See proj code 7235 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000013,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10044','conversion','EPSG','7236','EPSG','4275','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7237','InGCS Randolph-Wayne (m)','For equivalent non-metric definition see proj code 7238. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000044,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10045','conversion','EPSG','7237','EPSG','4295','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7238','InGCS Randolph-Wayne (ftUS)','See proj code 7237 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000044,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10046','conversion','EPSG','7238','EPSG','4295','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7239','InGCS Ripley (m)','For equivalent non-metric definition see proj code 7240.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10047','conversion','EPSG','7239','EPSG','4305','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7240','InGCS Ripley (ftUS)','See proj code 7239 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000038,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10048','conversion','EPSG','7240','EPSG','4305','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7241','InGCS Shelby (m)','For equivalent non-metric definition see proj code 7242.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10049','conversion','EPSG','7241','EPSG','4298','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7242','InGCS Shelby (ftUS)','See proj code 7241 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10050','conversion','EPSG','7242','EPSG','4298','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7243','InGCS Spencer (m)','For equivalent non-metric definition see proj code 7244.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000014,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10051','conversion','EPSG','7243','EPSG','4277','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7244','InGCS Spencer (ftUS)','See proj code 7243 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000014,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10052','conversion','EPSG','7244','EPSG','4277','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7245','InGCS Steuben (m)','For equivalent non-metric definition see proj code 7246.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000041,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10053','conversion','EPSG','7245','EPSG','4282','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7246','InGCS Steuben (ftUS)','See proj code 7245 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000041,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10054','conversion','EPSG','7246','EPSG','4282','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7247','InGCS Sullivan (m)','For equivalent non-metric definition see proj code 7248.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000017,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10055','conversion','EPSG','7247','EPSG','4268','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7248','InGCS Sullivan (ftUS)','See proj code 7247 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000017,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10056','conversion','EPSG','7248','EPSG','4268','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7249','InGCS Tippecanoe-White (m)','For equivalent non-metric definition see proj code 7250. Defined by Indiana DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10057','conversion','EPSG','7249','EPSG','4257','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7250','InGCS Tippecanoe-White (ftUS)','See proj code 7249 for authoritative metric definition. Defined by Indiana DOT as two separate zones (one for each county) each having identical defining parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-86.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10058','conversion','EPSG','7250','EPSG','4257','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7251','InGCS Vanderburgh (m)','For equivalent non-metric definition see proj code 7252.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10059','conversion','EPSG','7251','EPSG','4276','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7252','InGCS Vanderburgh (ftUS)','See proj code 7251 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10060','conversion','EPSG','7252','EPSG','4276','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7253','InGCS Vigo (m)','For equivalent non-metric definition see proj code 7254.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10061','conversion','EPSG','7253','EPSG','4264','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7254','InGCS Vigo (ftUS)','See proj code 7253 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10062','conversion','EPSG','7254','EPSG','4264','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7255','InGCS Wells (m)','For equivalent non-metric definition see proj code 7256.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',240000.0,'EPSG','9001','EPSG','8807','False northing',36000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10063','conversion','EPSG','7255','EPSG','4288','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7256','InGCS Wells (ftUS)','See proj code 7255 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',787400.0,'EPSG','9003','EPSG','8807','False northing',118110.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10064','conversion','EPSG','7256','EPSG','4288','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7378','WISCRS Ashland County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7379.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.4222,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.372,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000495683,'EPSG','9201','EPSG','8806','False easting',172821.9461,'EPSG','9001','EPSG','8807','False northing',0.0017,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10066','conversion','EPSG','7378','EPSG','4320','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7379','WISCRS Ashland County (ftUS)','See proj code 7378 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.4222,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.372,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000495683,'EPSG','9201','EPSG','8806','False easting',567000.001,'EPSG','9003','EPSG','8807','False northing',0.006,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10067','conversion','EPSG','7379','EPSG','4320','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7380','WISCRS Bayfield County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7381.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.4010734158,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.091,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000331195,'EPSG','9201','EPSG','8806','False easting',228600.4575,'EPSG','9001','EPSG','8807','False northing',148551.4837,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10068','conversion','EPSG','7380','EPSG','4321','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7381','WISCRS Bayfield County (ftUS)','See proj code 7380 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.4010734158,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.091,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000331195,'EPSG','9201','EPSG','8806','False easting',750000.001,'EPSG','9003','EPSG','8807','False northing',487372.659,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10069','conversion','EPSG','7381','EPSG','4321','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7382','WISCRS Burnett County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7383.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.5355373517,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.2728,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000383841,'EPSG','9201','EPSG','8806','False easting',64008.1276,'EPSG','9001','EPSG','8807','False northing',59445.9043,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10070','conversion','EPSG','7382','EPSG','4325','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7383','WISCRS Burnett County (ftUS)','See proj code 7382 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.5355373517,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.2728,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000383841,'EPSG','9201','EPSG','8806','False easting',209999.999,'EPSG','9003','EPSG','8807','False northing',195032.104,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10071','conversion','EPSG','7383','EPSG','4325','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7384','WISCRS Douglas County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7385.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.53,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.55,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000385418,'EPSG','9201','EPSG','8806','False easting',59131.3183,'EPSG','9001','EPSG','8807','False northing',0.0041,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10072','conversion','EPSG','7384','EPSG','4326','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7385','WISCRS Douglas County (ftUS)','See proj code 7384 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.53,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.55,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000385418,'EPSG','9201','EPSG','8806','False easting',194000.0,'EPSG','9003','EPSG','8807','False northing',0.013,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10073','conversion','EPSG','7385','EPSG','4326','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7386','WISCRS Florence County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7387.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.262,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.083,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000552095,'EPSG','9201','EPSG','8806','False easting',133502.6683,'EPSG','9001','EPSG','8807','False northing',0.0063,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10074','conversion','EPSG','7386','EPSG','4327','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7387','WISCRS Florence County (ftUS)','See proj code 7386 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.262,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.083,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000552095,'EPSG','9201','EPSG','8806','False easting',438000.004,'EPSG','9003','EPSG','8807','False northing',0.021,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10075','conversion','EPSG','7387','EPSG','4327','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7388','WISCRS Forest County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7389.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.002,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000673004,'EPSG','9201','EPSG','8806','False easting',275844.5533,'EPSG','9001','EPSG','8807','False northing',0.0157,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10076','conversion','EPSG','7388','EPSG','4328','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7389','WISCRS Forest County (ftUS)','See proj code 7388 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.002,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000673004,'EPSG','9201','EPSG','8806','False easting',905000.005,'EPSG','9003','EPSG','8807','False northing',0.052,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10077','conversion','EPSG','7389','EPSG','4328','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7390','WISCRS Iron County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7391.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.26,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.152,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000677153,'EPSG','9201','EPSG','8806','False easting',220980.4419,'EPSG','9001','EPSG','8807','False northing',0.0085,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10078','conversion','EPSG','7390','EPSG','4329','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7391','WISCRS Iron County (ftUS)','See proj code 7390 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.26,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.152,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000677153,'EPSG','9201','EPSG','8806','False easting',725000.0,'EPSG','9003','EPSG','8807','False northing',0.028,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10079','conversion','EPSG','7391','EPSG','4329','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7392','WISCRS Oneida County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7393.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.4215205573,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.324,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000686968,'EPSG','9201','EPSG','8806','False easting',70104.1401,'EPSG','9001','EPSG','8807','False northing',57588.0346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10080','conversion','EPSG','7392','EPSG','4330','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7393','WISCRS Oneida County (ftUS)','See proj code 7392 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.4215205573,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.324,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000686968,'EPSG','9201','EPSG','8806','False easting',230000.0,'EPSG','9003','EPSG','8807','False northing',188936.744,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10081','conversion','EPSG','7393','EPSG','4330','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7394','WISCRS Price County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7395.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.332,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.292,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000649554,'EPSG','9201','EPSG','8806','False easting',227990.8546,'EPSG','9001','EPSG','8807','False northing',0.0109,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10082','conversion','EPSG','7394','EPSG','4332','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7395','WISCRS Price County (ftUS)','See proj code 7394 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.332,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.292,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000649554,'EPSG','9201','EPSG','8806','False easting',747999.995,'EPSG','9003','EPSG','8807','False northing',0.036,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10083','conversion','EPSG','7395','EPSG','4332','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7396','WISCRS Sawyer County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7397.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.5400356873,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.07,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000573461,'EPSG','9201','EPSG','8806','False easting',216713.2336,'EPSG','9001','EPSG','8807','False northing',120734.1631,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10084','conversion','EPSG','7396','EPSG','4333','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7397','WISCRS Sawyer County (ftUS)','See proj code 7396 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.5400356873,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.07,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000573461,'EPSG','9201','EPSG','8806','False easting',711000.001,'EPSG','9003','EPSG','8807','False northing',396108.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10085','conversion','EPSG','7397','EPSG','4333','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7398','WISCRS Vilas County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7399.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.0440238726,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.292,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000730142,'EPSG','9201','EPSG','8806','False easting',134417.0689,'EPSG','9001','EPSG','8807','False northing',50337.1092,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10086','conversion','EPSG','7398','EPSG','4334','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7399','WISCRS Vilas County (ftUS)','See proj code 7398 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.0440238726,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.292,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000730142,'EPSG','9201','EPSG','8806','False easting',441000.0,'EPSG','9003','EPSG','8807','False northing',165147.666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10087','conversion','EPSG','7399','EPSG','4334','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7424','WISCRS Washburn County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7425.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.57403914,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.47,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000475376,'EPSG','9201','EPSG','8806','False easting',234086.8682,'EPSG','9001','EPSG','8807','False northing',188358.6058,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10088','conversion','EPSG','7424','EPSG','4335','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7425','WISCRS Washburn County (ftUS)','See proj code 7424 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.57403914,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.47,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000475376,'EPSG','9201','EPSG','8806','False easting',768000.0,'EPSG','9003','EPSG','8807','False northing',617973.193,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10089','conversion','EPSG','7425','EPSG','4335','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7426','WISCRS Barron County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7427.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.08,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000486665,'EPSG','9201','EPSG','8806','False easting',93150.0,'EPSG','9001','EPSG','8807','False northing',0.0029,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10090','conversion','EPSG','7426','EPSG','4331','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7427','WISCRS Barron County (ftUS)','See proj code 7426 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.08,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000486665,'EPSG','9201','EPSG','8806','False easting',305609.625,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10091','conversion','EPSG','7427','EPSG','4331','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7428','WISCRS Brown County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7429.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',31600.0,'EPSG','9001','EPSG','8807','False northing',4600.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10092','conversion','EPSG','7428','EPSG','4336','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7429','WISCRS Brown County (ftUS)','See proj code 7428 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',103674.333,'EPSG','9003','EPSG','8807','False northing',15091.833,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10093','conversion','EPSG','7429','EPSG','4336','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7430','WISCRS Buffalo County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7431.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.2853,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.475,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000382778,'EPSG','9201','EPSG','8806','False easting',175260.3502,'EPSG','9001','EPSG','8807','False northing',0.0048,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10094','conversion','EPSG','7430','EPSG','4337','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7431','WISCRS Buffalo County (ftUS)','See proj code 7430 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.2853,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.475,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000382778,'EPSG','9201','EPSG','8806','False easting',574999.999,'EPSG','9003','EPSG','8807','False northing',0.016,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10095','conversion','EPSG','7431','EPSG','4337','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7432','WISCRS Chippewa County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7433.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.5840284835,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.174,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000391127,'EPSG','9201','EPSG','8806','False easting',60045.72,'EPSG','9001','EPSG','8807','False northing',44091.4346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10096','conversion','EPSG','7432','EPSG','4338','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7433','WISCRS Chippewa County (ftUS)','See proj code 7432 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.5840284835,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.174,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000391127,'EPSG','9201','EPSG','8806','False easting',197000.0,'EPSG','9003','EPSG','8807','False northing',144656.648,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10097','conversion','EPSG','7433','EPSG','4338','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7434','WISCRS Clark County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7435.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.423,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000463003,'EPSG','9201','EPSG','8806','False easting',199949.1989,'EPSG','9001','EPSG','8807','False northing',0.0086,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10098','conversion','EPSG','7434','EPSG','4339','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7435','WISCRS Clark County (ftUS)','See proj code 7434 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.423,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000463003,'EPSG','9201','EPSG','8806','False easting',655999.997,'EPSG','9003','EPSG','8807','False northing',0.028,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10099','conversion','EPSG','7435','EPSG','4339','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7436','WISCRS Door County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7437.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.162,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000187521,'EPSG','9201','EPSG','8806','False easting',158801.1176,'EPSG','9001','EPSG','8807','False northing',0.0023,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10100','conversion','EPSG','7436','EPSG','4340','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7437','WISCRS Door County (ftUS)','See proj code 7436 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.162,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000187521,'EPSG','9201','EPSG','8806','False easting',521000.0,'EPSG','9003','EPSG','8807','False northing',0.008,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10101','conversion','EPSG','7437','EPSG','4340','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7438','WISCRS Dunn County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7439.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.243,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.534,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000410324,'EPSG','9201','EPSG','8806','False easting',51816.104,'EPSG','9001','EPSG','8807','False northing',0.003,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10102','conversion','EPSG','7438','EPSG','4341','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7439','WISCRS Dunn County (ftUS)','See proj code 7438 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.243,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.534,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000410324,'EPSG','9201','EPSG','8806','False easting',170000.001,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10103','conversion','EPSG','7439','EPSG','4341','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7440','WISCRS Eau Claire County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7441.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.5220212055,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.172,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000035079,'EPSG','9201','EPSG','8806','False easting',120091.4402,'EPSG','9001','EPSG','8807','False northing',91687.9239,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10104','conversion','EPSG','7440','EPSG','4342','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7441','WISCRS Eau Claire County (ftUS)','See proj code 7440 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.5220212055,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.172,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000035079,'EPSG','9201','EPSG','8806','False easting',394000.0,'EPSG','9003','EPSG','8807','False northing',300812.797,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10105','conversion','EPSG','7441','EPSG','4342','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7450','WISCRS Jackson County (m)','For equivalent non-metric definition see proj code 7451.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.151200646,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.503946747,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000353,'EPSG','9201','EPSG','8806','False easting',27000.0,'EPSG','9001','EPSG','8807','False northing',25000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10112','conversion','EPSG','7450','EPSG','4343','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7451','WISCRS Jackson County (ftUS)','See proj code 7450 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.151200646,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.503946747,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000353,'EPSG','9201','EPSG','8806','False easting',88582.5,'EPSG','9003','EPSG','8807','False northing',82020.833,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10113','conversion','EPSG','7451','EPSG','4343','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7452','WISCRS Langlade County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7453.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.0915253579,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.02,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000627024,'EPSG','9201','EPSG','8806','False easting',198425.197,'EPSG','9001','EPSG','8807','False northing',105279.7829,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10114','conversion','EPSG','7452','EPSG','4344','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7453','WISCRS Langlade County (ftUS)','See proj code 7452 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.0915253579,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.02,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000627024,'EPSG','9201','EPSG','8806','False easting',651000.0,'EPSG','9003','EPSG','8807','False northing',345405.421,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10115','conversion','EPSG','7453','EPSG','4344','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7454','WISCRS Lincoln County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7455.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.504,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.44,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000599003,'EPSG','9201','EPSG','8806','False easting',116129.0323,'EPSG','9001','EPSG','8807','False northing',0.0058,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10116','conversion','EPSG','7454','EPSG','4345','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7455','WISCRS Lincoln County (ftUS)','See proj code 7454 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.504,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.44,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000599003,'EPSG','9201','EPSG','8806','False easting',381000.0,'EPSG','9003','EPSG','8807','False northing',0.019,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10117','conversion','EPSG','7455','EPSG','4345','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7456','WISCRS Marathon County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7457.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.5403255925,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.4612,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000053289,'EPSG','9201','EPSG','8806','False easting',74676.1493,'EPSG','9001','EPSG','8807','False northing',55049.2669,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10118','conversion','EPSG','7456','EPSG','4346','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7457','WISCRS Marathon County (ftUS)','See proj code 7456 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.5403255925,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.4612,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000053289,'EPSG','9201','EPSG','8806','False easting',245000.0,'EPSG','9003','EPSG','8807','False northing',180607.47,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10119','conversion','EPSG','7457','EPSG','4346','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7458','WISCRS Marinette County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7459.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.413,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.424,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000234982,'EPSG','9201','EPSG','8806','False easting',238658.8794,'EPSG','9001','EPSG','8807','False northing',0.0032,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10120','conversion','EPSG','7458','EPSG','4347','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7459','WISCRS Marinette County (ftUS)','See proj code 7458 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.413,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.424,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000234982,'EPSG','9201','EPSG','8806','False easting',783000.007,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10121','conversion','EPSG','7459','EPSG','4347','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7460','WISCRS Menominee County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7461.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.43,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000362499,'EPSG','9201','EPSG','8806','False easting',105461.0121,'EPSG','9001','EPSG','8807','False northing',0.0029,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10122','conversion','EPSG','7460','EPSG','4348','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7461','WISCRS Menominee County (ftUS)','See proj code 7460 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.43,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000362499,'EPSG','9201','EPSG','8806','False easting',346000.004,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10123','conversion','EPSG','7461','EPSG','4348','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7462','WISCRS Oconto County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7463.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.235,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.543,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000236869,'EPSG','9201','EPSG','8806','False easting',182880.3676,'EPSG','9001','EPSG','8807','False northing',0.0033,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10124','conversion','EPSG','7462','EPSG','4349','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7463','WISCRS Oconto County (ftUS)','See proj code 7462 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.235,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.543,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000236869,'EPSG','9201','EPSG','8806','False easting',600000.006,'EPSG','9003','EPSG','8807','False northing',0.011,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10125','conversion','EPSG','7463','EPSG','4349','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7464','WISCRS Pepin and Pierce Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7465. Defined by Wisconsin DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.3810135939,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.134,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000362977,'EPSG','9201','EPSG','8806','False easting',167640.3354,'EPSG','9001','EPSG','8807','False northing',86033.0876,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10126','conversion','EPSG','7464','EPSG','4350','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7465','WISCRS Pepin and Pierce Counties (ftUS)','See proj code 7464 for authoritative metric definition. Replaces and emulates WCCS zone. Defined by Wisconsin DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.3810135939,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.134,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000362977,'EPSG','9201','EPSG','8806','False easting',550000.0,'EPSG','9003','EPSG','8807','False northing',282260.222,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10127','conversion','EPSG','7465','EPSG','4350','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7466','WISCRS Polk County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7467.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.394,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000433849,'EPSG','9201','EPSG','8806','False easting',141732.2823,'EPSG','9001','EPSG','8807','False northing',0.0059,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10128','conversion','EPSG','7466','EPSG','4351','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7467','WISCRS Polk County (ftUS)','See proj code 7466 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.394,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000433849,'EPSG','9201','EPSG','8806','False easting',464999.996,'EPSG','9003','EPSG','8807','False northing',0.019,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10129','conversion','EPSG','7467','EPSG','4351','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7468','WISCRS Portage County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7469.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.2500566311,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000039936,'EPSG','9201','EPSG','8806','False easting',56388.1128,'EPSG','9001','EPSG','8807','False northing',50022.1874,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10130','conversion','EPSG','7468','EPSG','4352','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7469','WISCRS Portage County (ftUS)','See proj code 7468 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.2500566311,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000039936,'EPSG','9201','EPSG','8806','False easting',185000.0,'EPSG','9003','EPSG','8807','False northing',164114.46,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10131','conversion','EPSG','7469','EPSG','4352','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7470','WISCRS Rusk County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7471.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.551,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.04,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000495976,'EPSG','9201','EPSG','8806','False easting',250546.1013,'EPSG','9001','EPSG','8807','False northing',0.0234,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10132','conversion','EPSG','7470','EPSG','4353','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7471','WISCRS Rusk County (ftUS)','See proj code 7470 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.551,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.04,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000495976,'EPSG','9201','EPSG','8806','False easting',822000.001,'EPSG','9003','EPSG','8807','False northing',0.077,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10133','conversion','EPSG','7471','EPSG','4353','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7472','WISCRS Shawano County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7473.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.021,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.362,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000032144,'EPSG','9201','EPSG','8806','False easting',262433.3253,'EPSG','9001','EPSG','8807','False northing',0.0096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10134','conversion','EPSG','7472','EPSG','4354','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7473','WISCRS Shawano County (ftUS)','See proj code 7472 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.021,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.362,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000032144,'EPSG','9201','EPSG','8806','False easting',861000.001,'EPSG','9003','EPSG','8807','False northing',0.031,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10135','conversion','EPSG','7473','EPSG','4354','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7474','WISCRS St. Croix County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7475.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.021,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000381803,'EPSG','9201','EPSG','8806','False easting',165506.7302,'EPSG','9001','EPSG','8807','False northing',0.0103,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10136','conversion','EPSG','7474','EPSG','4355','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7475','WISCRS St. Croix County (ftUS)','See proj code 7474 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.021,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000381803,'EPSG','9201','EPSG','8806','False easting',542999.997,'EPSG','9003','EPSG','8807','False northing',0.034,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10137','conversion','EPSG','7475','EPSG','4355','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7476','WISCRS Taylor County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7477.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.1040159509,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.29,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000597566,'EPSG','9201','EPSG','8806','False easting',187147.5744,'EPSG','9001','EPSG','8807','False northing',107746.7522,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10138','conversion','EPSG','7476','EPSG','4356','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7477','WISCRS Taylor County (ftUS)','See proj code 7476 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.1040159509,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.29,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000597566,'EPSG','9201','EPSG','8806','False easting',614000.0,'EPSG','9003','EPSG','8807','False northing',353499.136,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10139','conversion','EPSG','7477','EPSG','4356','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7478','WISCRS Trempealeau County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7479.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.094,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.22,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000361538,'EPSG','9201','EPSG','8806','False easting',256946.9138,'EPSG','9001','EPSG','8807','False northing',0.0041,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10140','conversion','EPSG','7478','EPSG','4357','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7479','WISCRS Trempealeau County (ftUS)','See proj code 7478 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.094,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.22,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000361538,'EPSG','9201','EPSG','8806','False easting',843000.0,'EPSG','9003','EPSG','8807','False northing',0.013,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10141','conversion','EPSG','7479','EPSG','4357','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7480','WISCRS Waupaca County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7481.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.2513,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.49,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000333645,'EPSG','9201','EPSG','8806','False easting',185013.9709,'EPSG','9001','EPSG','8807','False northing',0.007,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10142','conversion','EPSG','7480','EPSG','4358','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7481','WISCRS Waupaca County (ftUS)','See proj code 7480 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.2513,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.49,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000333645,'EPSG','9201','EPSG','8806','False easting',607000.003,'EPSG','9003','EPSG','8807','False northing',0.023,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10143','conversion','EPSG','7481','EPSG','4358','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7482','WISCRS Wood County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7483.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.214534369,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000421209,'EPSG','9201','EPSG','8806','False easting',208483.6173,'EPSG','9001','EPSG','8807','False northing',134589.754,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10144','conversion','EPSG','7482','EPSG','4359','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7483','WISCRS Wood County (ftUS)','See proj code 7482 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.214534369,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000421209,'EPSG','9201','EPSG','8806','False easting',684000.001,'EPSG','9003','EPSG','8807','False northing',441566.551,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10145','conversion','EPSG','7483','EPSG','4359','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7484','WISCRS Adams and Juneau Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7485. Defined by Wisconsin DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.22,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000365285,'EPSG','9201','EPSG','8806','False easting',147218.6942,'EPSG','9001','EPSG','8807','False northing',0.0037,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10146','conversion','EPSG','7484','EPSG','4360','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7485','WISCRS Adams and Juneau Counties (ftUS)','See proj code 7484 for authoritative metric definition. Replaces and emulates WCCS zone. Defined by Wisconsin DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.22,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000365285,'EPSG','9201','EPSG','8806','False easting',482999.999,'EPSG','9003','EPSG','8807','False northing',0.012,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10147','conversion','EPSG','7485','EPSG','4360','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7486','WISCRS Calumet, Fond du Lac, Outagamie and Winnebago Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7487. Defined by Wisconsin DOT as four separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.431,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000286569,'EPSG','9201','EPSG','8806','False easting',244754.8893,'EPSG','9001','EPSG','8807','False northing',0.0049,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10148','conversion','EPSG','7486','EPSG','4361','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7487','WISCRS Calumet, Fond du Lac, Outagamie and Winnebago Counties (ftUS)','See proj code 7486 for authoritative metric definition. Replaces and emulates WCCS zone. Defined by Wisconsin DOT as four separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.431,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000286569,'EPSG','9201','EPSG','8806','False easting',802999.999,'EPSG','9003','EPSG','8807','False northing',0.016,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10149','conversion','EPSG','7487','EPSG','4361','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7488','WISCRS Columbia County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7489.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.2745167925,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.234,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003498,'EPSG','9201','EPSG','8806','False easting',169164.3381,'EPSG','9001','EPSG','8807','False northing',111569.6134,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10150','conversion','EPSG','7488','EPSG','4362','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7489','WISCRS Columbia County (ftUS)','See proj code 7488 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.2745167925,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.234,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003498,'EPSG','9201','EPSG','8806','False easting',554999.999,'EPSG','9003','EPSG','8807','False northing',366041.307,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10151','conversion','EPSG','7489','EPSG','4362','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7490','WISCRS Crawford County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7491.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.1200200178,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.562,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000349151,'EPSG','9201','EPSG','8806','False easting',113690.6274,'EPSG','9001','EPSG','8807','False northing',53703.1201,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10152','conversion','EPSG','7490','EPSG','4363','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7491','WISCRS Crawford County (ftUS)','See proj code 7490 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.1200200178,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.562,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000349151,'EPSG','9201','EPSG','8806','False easting',373000.0,'EPSG','9003','EPSG','8807','False northing',176190.987,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10153','conversion','EPSG','7491','EPSG','4363','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7492','WISCRS Dane County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7493.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.0410257735,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.252,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000384786,'EPSG','9201','EPSG','8806','False easting',247193.2944,'EPSG','9001','EPSG','8807','False northing',146591.9896,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10154','conversion','EPSG','7492','EPSG','4364','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7493','WISCRS Dane County (ftUS)','See proj code 7492 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.0410257735,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.252,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000384786,'EPSG','9201','EPSG','8806','False easting',811000.0,'EPSG','9003','EPSG','8807','False northing',480943.886,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10155','conversion','EPSG','7493','EPSG','4364','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7494','WISCRS Dodge and Jefferson Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7495. Defined by Wisconsin DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.282,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.463,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000346418,'EPSG','9201','EPSG','8806','False easting',263347.7263,'EPSG','9001','EPSG','8807','False northing',0.0076,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10156','conversion','EPSG','7494','EPSG','4365','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7495','WISCRS Dodge and Jefferson Counties (ftUS)','See proj code 7494 for authoritative metric definition. Replaces and emulates WCCS zone. Defined by Wisconsin DOT as two separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.282,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.463,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000346418,'EPSG','9201','EPSG','8806','False easting',863999.999,'EPSG','9003','EPSG','8807','False northing',0.025,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10157','conversion','EPSG','7495','EPSG','4365','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7496','WISCRS Grant County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7497.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.244,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000349452,'EPSG','9201','EPSG','8806','False easting',242316.4841,'EPSG','9001','EPSG','8807','False northing',0.01,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10158','conversion','EPSG','7496','EPSG','4366','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7497','WISCRS Grant County (ftUS)','See proj code 7496 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.244,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000349452,'EPSG','9201','EPSG','8806','False easting',794999.998,'EPSG','9003','EPSG','8807','False northing',0.033,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10159','conversion','EPSG','7497','EPSG','4366','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7498','WISCRS Green and Lafayette Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7499.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.3815224197,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.502,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000390487,'EPSG','9201','EPSG','8806','False easting',170078.7403,'EPSG','9001','EPSG','8807','False northing',45830.2947,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10160','conversion','EPSG','7498','EPSG','4367','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7499','WISCRS Green and Lafayette Counties (ftUS)','See proj code 7498 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.3815224197,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.502,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000390487,'EPSG','9201','EPSG','8806','False easting',558000.0,'EPSG','9003','EPSG','8807','False northing',150361.559,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10161','conversion','EPSG','7499','EPSG','4367','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7500','WISCRS Green Lake and Marquette Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7501.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.4825200424,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.143,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000344057,'EPSG','9201','EPSG','8806','False easting',150876.3018,'EPSG','9001','EPSG','8807','False northing',79170.7795,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10162','conversion','EPSG','7500','EPSG','4368','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7501','WISCRS Green Lake and Marquette Counties (ftUS)','See proj code 7500 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.4825200424,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.143,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000344057,'EPSG','9201','EPSG','8806','False easting',495000.0,'EPSG','9003','EPSG','8807','False northing',259746.132,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10163','conversion','EPSG','7501','EPSG','4368','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7502','WISCRS Iowa County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7503.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.322,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.094,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000394961,'EPSG','9201','EPSG','8806','False easting',113081.0261,'EPSG','9001','EPSG','8807','False northing',0.0045,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10164','conversion','EPSG','7502','EPSG','4369','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7503','WISCRS Iowa County (ftUS)','See proj code 7502 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.322,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.094,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000394961,'EPSG','9201','EPSG','8806','False easting',371000.0,'EPSG','9003','EPSG','8807','False northing',0.015,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10165','conversion','EPSG','7503','EPSG','4369','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7504','WISCRS Kenosha, Milwaukee, Ozaukee and Racine Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7505. Defined by Wisconsin DOT as four separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.13,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.534,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000260649,'EPSG','9201','EPSG','8806','False easting',185928.3728,'EPSG','9001','EPSG','8807','False northing',0.0009,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10166','conversion','EPSG','7504','EPSG','4370','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7505','WISCRS Kenosha, Milwaukee, Ozaukee and Racine Counties (ftUS)','See proj code 7504 for authoritative metric definition. Replaces and emulates WCCS zone. Defined by Wisconsin DOT as four separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.13,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.534,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000260649,'EPSG','9201','EPSG','8806','False easting',610000.003,'EPSG','9003','EPSG','8807','False northing',0.003,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10167','conversion','EPSG','7505','EPSG','4370','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7506','WISCRS Kewaunee, Manitowoc and Sheboygan Counties (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7507. Defined by Wisconsin DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.16,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000233704,'EPSG','9201','EPSG','8806','False easting',79857.7614,'EPSG','9001','EPSG','8807','False northing',0.0012,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10168','conversion','EPSG','7506','EPSG','4371','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7507','WISCRS Kewaunee, Manitowoc and Sheboygan Counties (ftUS)','See proj code 7506 for authoritative metric definition. Replaces and emulates WCCS zone. Defined by Wisconsin DOT as three separate zones (one for each county) each having identical projection parameter values: see info source.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.16,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000233704,'EPSG','9201','EPSG','8806','False easting',262000.006,'EPSG','9003','EPSG','8807','False northing',0.004,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10169','conversion','EPSG','7507','EPSG','4371','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7508','WISCRS La Crosse County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7509.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.2704,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.19,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000319985,'EPSG','9201','EPSG','8806','False easting',130454.6598,'EPSG','9001','EPSG','8807','False northing',0.0033,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10170','conversion','EPSG','7508','EPSG','4372','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7509','WISCRS La Crosse County (ftUS)','See proj code 7508 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.2704,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.19,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000319985,'EPSG','9201','EPSG','8806','False easting',427999.996,'EPSG','9003','EPSG','8807','False northing',0.011,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10171','conversion','EPSG','7509','EPSG','4372','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7510','WISCRS Monroe County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7511.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.0000266143,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.383,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000434122,'EPSG','9201','EPSG','8806','False easting',204521.209,'EPSG','9001','EPSG','8807','False northing',121923.9861,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10172','conversion','EPSG','7510','EPSG','4373','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7511','WISCRS Monroe County (ftUS)','See proj code 7510 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.0000266143,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.383,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000434122,'EPSG','9201','EPSG','8806','False easting',671000.0,'EPSG','9003','EPSG','8807','False northing',400012.278,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10173','conversion','EPSG','7511','EPSG','4373','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7512','WISCRS Richland County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7513.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.1920326539,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.255,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000375653,'EPSG','9201','EPSG','8806','False easting',202387.6048,'EPSG','9001','EPSG','8807','False northing',134255.4253,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10174','conversion','EPSG','7512','EPSG','4374','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7513','WISCRS Richland County (ftUS)','See proj code 7512 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.1920326539,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.255,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000375653,'EPSG','9201','EPSG','8806','False easting',664000.0,'EPSG','9003','EPSG','8807','False northing',440469.675,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10175','conversion','EPSG','7513','EPSG','4374','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7514','WISCRS Rock County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7515.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.564,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.042,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000337311,'EPSG','9201','EPSG','8806','False easting',146304.2926,'EPSG','9001','EPSG','8807','False northing',0.0068,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10176','conversion','EPSG','7514','EPSG','4375','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7515','WISCRS Rock County (ftUS)','See proj code 7514 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.564,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.042,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000337311,'EPSG','9201','EPSG','8806','False easting',480000.0,'EPSG','9003','EPSG','8807','False northing',0.022,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10177','conversion','EPSG','7515','EPSG','4375','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7516','WISCRS Sauk County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7517.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.491,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000373868,'EPSG','9201','EPSG','8806','False easting',185623.5716,'EPSG','9001','EPSG','8807','False northing',0.0051,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10178','conversion','EPSG','7516','EPSG','4376','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7517','WISCRS Sauk County (ftUS)','See proj code 7516 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.491,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000373868,'EPSG','9201','EPSG','8806','False easting',609000.001,'EPSG','9003','EPSG','8807','False northing',0.017,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10179','conversion','EPSG','7517','EPSG','4376','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7518','WISCRS Vernon County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7519.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.3430118583,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.47,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000408158,'EPSG','9201','EPSG','8806','False easting',222504.4451,'EPSG','9001','EPSG','8807','False northing',47532.0602,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10180','conversion','EPSG','7518','EPSG','4377','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7519','WISCRS Vernon County (ftUS)','See proj code 7518 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.3430118583,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.47,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000408158,'EPSG','9201','EPSG','8806','False easting',730000.0,'EPSG','9003','EPSG','8807','False northing',155944.768,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10181','conversion','EPSG','7519','EPSG','4377','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7520','WISCRS Walworth County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7521.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.4010063549,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.323,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000367192,'EPSG','9201','EPSG','8806','False easting',232562.8651,'EPSG','9001','EPSG','8807','False northing',111088.2224,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10182','conversion','EPSG','7520','EPSG','4378','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7521','WISCRS Walworth County (ftUS)','See proj code 7520 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.4010063549,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.323,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000367192,'EPSG','9201','EPSG','8806','False easting',763000.0,'EPSG','9003','EPSG','8807','False northing',364461.943,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10183','conversion','EPSG','7521','EPSG','4378','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7522','WISCRS Washington County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7523.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5505,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.035,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003738,'EPSG','9201','EPSG','8806','False easting',120091.4415,'EPSG','9001','EPSG','8807','False northing',0.003,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10184','conversion','EPSG','7522','EPSG','4379','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7523','WISCRS Washington County (ftUS)','See proj code 7522 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5505,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.035,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003738,'EPSG','9201','EPSG','8806','False easting',394000.004,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10185','conversion','EPSG','7523','EPSG','4379','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7524','WISCRS Waukesha County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7525.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.341,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.133,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000346179,'EPSG','9201','EPSG','8806','False easting',208788.418,'EPSG','9001','EPSG','8807','False northing',0.0034,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10186','conversion','EPSG','7524','EPSG','4380','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7525','WISCRS Waukesha County (ftUS)','See proj code 7524 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.341,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.133,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000346179,'EPSG','9201','EPSG','8806','False easting',685000.001,'EPSG','9003','EPSG','8807','False northing',0.011,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10187','conversion','EPSG','7525','EPSG','4380','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7526','WISCRS Waushara County (m)','Replaces and emulates WCCS zone. For equivalent non-metric definition see proj code 7527.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.0650198565,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.143,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000392096,'EPSG','9201','EPSG','8806','False easting',120091.4402,'EPSG','9001','EPSG','8807','False northing',45069.7587,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10188','conversion','EPSG','7526','EPSG','4381','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7527','WISCRS Waushara County (ftUS)','See proj code 7526 for authoritative metric definition. Replaces and emulates WCCS zone.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.0650198565,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.143,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000392096,'EPSG','9201','EPSG','8806','False easting',394000.0,'EPSG','9003','EPSG','8807','False northing',147866.367,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10189','conversion','EPSG','7527','EPSG','4381','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','7687','Kyrgyzstan zone 1','Established by government resolution N235 of 2010-10-07.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',68.31,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10209','conversion','EPSG','7687','EPSG','4385','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','7688','Kyrgyzstan zone 2','Established by government resolution N235 of 2010-10-07.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',71.31,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10210','conversion','EPSG','7688','EPSG','4386','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','7689','Kyrgyzstan zone 3','Established by government resolution N235 of 2010-10-07.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',74.31,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10211','conversion','EPSG','7689','EPSG','4387','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','7690','Kyrgyzstan zone 4','Established by government resolution N235 of 2010-10-07.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',77.31,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10212','conversion','EPSG','7690','EPSG','4388','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','7691','Kyrgyzstan zone 5','Established by government resolution N235 of 2010-10-07.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',80.31,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',5300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10213','conversion','EPSG','7691','EPSG','4389','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','7722','Survey of India Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',24.0,'EPSG','9102','EPSG','8822','Longitude of false origin',80.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',12.2822638,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.1022096,'EPSG','9110','EPSG','8826','Easting at false origin',4000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10235','conversion','EPSG','7722','EPSG','1121','EPSG','1218'); INSERT INTO "conversion" VALUES('EPSG','7723','Andhra Pradesh NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',16.25543298,'EPSG','9102','EPSG','8822','Longitude of false origin',80.875,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',13.75,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',18.75,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10236','conversion','EPSG','7723','EPSG','4394','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7724','Arunachal Pradesh NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.00157897,'EPSG','9102','EPSG','8822','Longitude of false origin',94.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',27.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',29.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10237','conversion','EPSG','7724','EPSG','4395','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7725','Assam NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',26.00257703,'EPSG','9102','EPSG','8822','Longitude of false origin',92.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',24.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',27.2,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10238','conversion','EPSG','7725','EPSG','4396','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7726','Bihar NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.87725247,'EPSG','9102','EPSG','8822','Longitude of false origin',85.875,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',24.625,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',27.125,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10239','conversion','EPSG','7726','EPSG','4397','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7727','Delhi NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.62510126,'EPSG','9102','EPSG','8822','Longitude of false origin',77.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',28.223,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',28.523,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10240','conversion','EPSG','7727','EPSG','4422','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7728','Gujarat NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',22.37807121,'EPSG','9102','EPSG','8822','Longitude of false origin',71.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',20.473,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',23.573,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10241','conversion','EPSG','7728','EPSG','4400','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7729','Haryana NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.25226266,'EPSG','9102','EPSG','8822','Longitude of false origin',76.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',28.05,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',30.25,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10242','conversion','EPSG','7729','EPSG','4401','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7730','Himachal Pradesh NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.75183497,'EPSG','9102','EPSG','8822','Longitude of false origin',77.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',30.75,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',32.75,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10243','conversion','EPSG','7730','EPSG','4402','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7731','Jammu and Kashmir NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.75570874,'EPSG','9102','EPSG','8822','Longitude of false origin',76.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.05,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.25,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10244','conversion','EPSG','7731','EPSG','4403','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7732','Jharkhand NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',23.62652682,'EPSG','9102','EPSG','8822','Longitude of false origin',85.625,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',22.323,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',24.423,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10245','conversion','EPSG','7732','EPSG','4404','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7733','Madhya Pradesh NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',24.00529821,'EPSG','9102','EPSG','8822','Longitude of false origin',78.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',22.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',26.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10246','conversion','EPSG','7733','EPSG','4407','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7734','Maharashtra NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',18.88015774,'EPSG','9102','EPSG','8822','Longitude of false origin',76.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',16.373,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',21.073,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10247','conversion','EPSG','7734','EPSG','4408','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7735','Manipur NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',24.75060911,'EPSG','9102','EPSG','8822','Longitude of false origin',94.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',24.05,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',25.25,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10248','conversion','EPSG','7735','EPSG','4409','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7736','Meghalaya NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.62524747,'EPSG','9102','EPSG','8822','Longitude of false origin',91.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',25.123,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',26.023,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10249','conversion','EPSG','7736','EPSG','4410','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7737','Nagaland NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',26.12581974,'EPSG','9102','EPSG','8822','Longitude of false origin',94.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',25.223,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',26.523,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10250','conversion','EPSG','7737','EPSG','4412','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7738','Northeast India NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.63452135,'EPSG','9102','EPSG','8822','Longitude of false origin',93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',23.023,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',28.123,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10251','conversion','EPSG','7738','EPSG','4392','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7739','Orissa NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',20.25305174,'EPSG','9102','EPSG','8822','Longitude of false origin',84.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',18.35,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',21.55,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10252','conversion','EPSG','7739','EPSG','4413','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7740','Punjab NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.00178226,'EPSG','9102','EPSG','8822','Longitude of false origin',75.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',30.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',32.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10253','conversion','EPSG','7740','EPSG','4414','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7741','Rajasthan NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',26.88505546,'EPSG','9102','EPSG','8822','Longitude of false origin',73.875,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',24.173,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',29.273,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10254','conversion','EPSG','7741','EPSG','4415','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7742','Uttar Pradesh NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.13270823,'EPSG','9102','EPSG','8822','Longitude of false origin',80.875,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',24.523,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',29.223,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10255','conversion','EPSG','7742','EPSG','4419','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7743','Uttaranchal NSF LCC','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.0017132,'EPSG','9102','EPSG','8822','Longitude of false origin',79.375,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',31.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10256','conversion','EPSG','7743','EPSG','4420','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7744','Andaman and Nicobar NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',10.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999428,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10257','conversion','EPSG','7744','EPSG','4423','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7745','Chhattisgarh NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',82.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998332,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10258','conversion','EPSG','7745','EPSG','4398','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7746','Goa NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',15.375,'EPSG','9102','EPSG','8802','Longitude of natural origin',74.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999913,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10259','conversion','EPSG','7746','EPSG','4399','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7747','Karnataka NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',15.125,'EPSG','9102','EPSG','8802','Longitude of natural origin',76.375,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998012,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10260','conversion','EPSG','7747','EPSG','4405','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7748','Kerala NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',10.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',76.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999177,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10261','conversion','EPSG','7748','EPSG','4406','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7749','Lakshadweep NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',10.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',73.125,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999536,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10262','conversion','EPSG','7749','EPSG','4424','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7750','Mizoram NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',23.125,'EPSG','9102','EPSG','8802','Longitude of natural origin',92.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999821,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10263','conversion','EPSG','7750','EPSG','4411','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7751','Sikkim NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',27.625,'EPSG','9102','EPSG','8802','Longitude of natural origin',88.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999926,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10264','conversion','EPSG','7751','EPSG','4416','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7752','Tamil Nadu NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',10.875,'EPSG','9102','EPSG','8802','Longitude of natural origin',78.375,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997942,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10265','conversion','EPSG','7752','EPSG','4417','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7753','Tripura NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',23.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',91.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999822,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10266','conversion','EPSG','7753','EPSG','4418','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7754','West Bengal NSF TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.375,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.875,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998584,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10267','conversion','EPSG','7754','EPSG','4421','EPSG','1219'); INSERT INTO "conversion" VALUES('EPSG','7802','Cadastral Coordinate System 2005','Also given with equivalent definition having parameter values latitude of false origin = 42°N and FN = 4651640.214m. Note that at latitude 42°40''04.35246"N scale is minimum but not unity.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.400435246,'EPSG','9110','EPSG','8822','Longitude of false origin',25.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',43.2,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4725824.3591,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10270','conversion','EPSG','7802','EPSG','3224','EPSG','1061'); INSERT INTO "conversion" VALUES('EPSG','7812','Height <> Depth Conversion','This is a parameter-less conversion to reverse the positive direction of the axis of a vertical CRS. Source and target CRSs must both have the same unit of measure.','EPSG','1068','Height Depth Reversal',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10277','conversion','EPSG','7812','EPSG','1262','EPSG','1156'); INSERT INTO "conversion" VALUES('EPSG','7813','Vertical Axis Unit Conversion','Source and target CRSs both must have the same axis direction (both up or both down).','EPSG','1104','Change of Vertical Unit',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10278','conversion','EPSG','7813','EPSG','1262','EPSG','1101'); INSERT INTO "conversion" VALUES('EPSG','7818','CS63 zone X1','On the Krassowsky 1940 ellipsoid an alternative but equivalent definition uses latitude of natural origin = 0° and false northing = -9214.692m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',23.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10281','conversion','EPSG','7818','EPSG','4435','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','7819','CS63 zone X2','On the Krassowsky 1940 ellipsoid an alternative but equivalent definition uses latitude of natural origin = 0° and false northing = -9214.692m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',26.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10282','conversion','EPSG','7819','EPSG','4429','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','7820','CS63 zone X3','On the Krassowsky 1940 ellipsoid an alternative but equivalent definition uses latitude of natural origin = 0° and false northing = -9214.692m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',29.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10283','conversion','EPSG','7820','EPSG','4430','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','7821','CS63 zone X4','On the Krassowsky 1940 ellipsoid an alternative but equivalent definition uses latitude of natural origin = 0° and false northing = -9214.692m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',32.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10284','conversion','EPSG','7821','EPSG','4431','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','7822','CS63 zone X5','On the Krassowsky 1940 ellipsoid an alternative but equivalent definition uses latitude of natural origin = 0° and false northing = -9214.692m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',35.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',5300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10285','conversion','EPSG','7822','EPSG','4432','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','7823','CS63 zone X6','On the Krassowsky 1940 ellipsoid an alternative but equivalent definition uses latitude of natural origin = 0° and false northing = -9214.692m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',38.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',6300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10286','conversion','EPSG','7823','EPSG','4433','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','7824','CS63 zone X7','On the Krassowsky 1940 ellipsoid an alternative but equivalent definition uses latitude of natural origin = 0° and false northing = -9214.692m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',41.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',7300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10287','conversion','EPSG','7824','EPSG','4434','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','7875','St. Helena Local Grid 1971','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-15.58,'EPSG','9110','EPSG','8802','Longitude of natural origin',-5.43,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10309','conversion','EPSG','7875','EPSG','3183','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','7876','St. Helena Local Grid (Tritan)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-15.58,'EPSG','9110','EPSG','8802','Longitude of natural origin',-5.43,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',299483.737,'EPSG','9001','EPSG','8807','False northing',2000527.879,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10310','conversion','EPSG','7876','EPSG','3183','EPSG','1146'); INSERT INTO "conversion" VALUES('EPSG','7993','Albany Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',117.53,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000044,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',4100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10372','conversion','EPSG','7993','EPSG','4439','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','7994','Barrow Island Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000022,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',2700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10373','conversion','EPSG','7994','EPSG','4438','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','7995','Broome Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',122.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000298,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10374','conversion','EPSG','7995','EPSG','4441','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','7996','Busselton Coastal Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.26,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999592,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10375','conversion','EPSG','7996','EPSG','4437','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','7997','Carnarvon Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',113.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999796,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3050000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10376','conversion','EPSG','7997','EPSG','4442','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','7998','Christmas Island Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',105.373,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002514,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',1400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10377','conversion','EPSG','7998','EPSG','4169','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','7999','Cocos Island Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',96.523,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999387,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',1600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10378','conversion','EPSG','7999','EPSG','1069','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8000','Collie Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.56,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000019,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',4100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10379','conversion','EPSG','8000','EPSG','4443','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8001','Esperance Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',121.53,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000055,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',4050000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10380','conversion','EPSG','8001','EPSG','4445','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8002','Exmouth Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.04,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000236,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2750000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10381','conversion','EPSG','8002','EPSG','4448','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8003','Geraldton Coastal Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000628,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3450000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10382','conversion','EPSG','8003','EPSG','4449','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8004','Goldfields Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',121.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00004949,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',3800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10383','conversion','EPSG','8004','EPSG','4436','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8005','Jurien Coastal Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.59,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000314,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3650000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10384','conversion','EPSG','8005','EPSG','4440','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8006','Kalbarri Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.1855,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000014,'EPSG','9201','EPSG','8806','False easting',55000.0,'EPSG','9001','EPSG','8807','False northing',3700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10385','conversion','EPSG','8006','EPSG','4444','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8007','Karratha Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',116.56,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999989,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2550000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10386','conversion','EPSG','8007','EPSG','4451','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8008','Kununurra Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',128.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000165,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10387','conversion','EPSG','8008','EPSG','4452','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8009','Lancelin Coastal Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.22,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000157,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3750000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10388','conversion','EPSG','8009','EPSG','4453','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8010','Margaret River Coastal Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000055,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',4050000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10389','conversion','EPSG','8010','EPSG','4457','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8011','Perth Coastal Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.49,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999906,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3900000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10390','conversion','EPSG','8011','EPSG','4462','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8012','Port Hedland Grid 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',118.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000135,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10391','conversion','EPSG','8012','EPSG','4466','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','8033','TM Zone 20N (US survey foot)','US survey foot form of UTM zone 20N. Sometimes locally referred to as "UTM zone 20".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10392','conversion','EPSG','8033','EPSG','4467','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','8034','TM Zone 21N (US survey foot)','US survey foot form of UTM zone 21N. Sometimes locally referred to as "UTM zone 21".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10393','conversion','EPSG','8034','EPSG','4468','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','8040','Gusterberg Grid','Longitude is referenced to the Ferro meridian.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',48.021847,'EPSG','9110','EPSG','8802','Longitude of natural origin',31.481505,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10397','conversion','EPSG','8040','EPSG','4455','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','8041','St. Stephen Grid','Longitude is referenced to the Ferro meridian.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',48.123154,'EPSG','9110','EPSG','8802','Longitude of natural origin',34.022732,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10398','conversion','EPSG','8041','EPSG','4456','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','8061','Pima County zone 1 East (ft)','Grid unit is International feet (note: not US Survey feet).','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',32.15,'EPSG','9110','EPSG','8812','Longitude of projection centre',-111.24,'EPSG','9110','EPSG','8813','Azimuth at projection centre',45.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',45.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.00011,'EPSG','9201','EPSG','8816','Easting at projection centre',160000.0,'EPSG','9002','EPSG','8817','Northing at projection centre',800000.0,'EPSG','9002',0); INSERT INTO "usage" VALUES('EPSG','10408','conversion','EPSG','8061','EPSG','4472','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','8062','Pima County zone 2 Central (ft)','Grid unit is International feet (note: not US Survey feet).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00009,'EPSG','9201','EPSG','8806','False easting',1800000.0,'EPSG','9002','EPSG','8807','False northing',1000000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10409','conversion','EPSG','8062','EPSG','4460','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','8063','Pima County zone 3 West (ft)','Grid unit is International feet (note: not US Survey feet).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-113.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000055,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10410','conversion','EPSG','8063','EPSG','4450','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','8064','Pima County zone 4 Mt. Lemmon (ft)','Grid unit is International feet (note: not US Survey feet).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-110.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',30000.0,'EPSG','9002','EPSG','8807','False northing',-620000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10411','conversion','EPSG','8064','EPSG','4473','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','8080','MTM Nova Scotia 2010 zone 4','Introduced for use with NAD83(CSRS)v6.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-61.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',24500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10423','conversion','EPSG','8080','EPSG','1534','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','8081','MTM Nova Scotia 2010 zone 5','Introduced for use with NAD83(CSRS)v6.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-64.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',25500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10424','conversion','EPSG','8081','EPSG','1535','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','8087','Iceland Lambert 2016','Replaces Iceland Lambert 2004 (code 5326). Used only with ISN2016 geogCRS.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-19.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',64.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',65.45,'EPSG','9110','EPSG','8826','Easting at false origin',2700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10425','conversion','EPSG','8087','EPSG','1120','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','8273','Oregon Burns-Harper zone (meter)','See code 8274 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00014,'EPSG','9201','EPSG','8806','False easting',90000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10466','conversion','EPSG','8273','EPSG','4459','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8274','Oregon Burns-Harper zone (international foot)','See code 8273 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00014,'EPSG','9201','EPSG','8806','False easting',295275.5906,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10467','conversion','EPSG','8274','EPSG','4459','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8275','Oregon Canyon City-Burns zone (meter)','See code 8276 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00022,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10468','conversion','EPSG','8275','EPSG','4465','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8276','Oregon Canyon City-Burns zone (international foot)','See code 8275 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00022,'EPSG','9201','EPSG','8806','False easting',65616.7979,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10469','conversion','EPSG','8276','EPSG','4465','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8277','Oregon Coast Range North zone (meter)','See code 8278 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.35,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',30000.0,'EPSG','9001','EPSG','8807','False northing',20000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10470','conversion','EPSG','8277','EPSG','4471','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8278','Oregon Coast Range North zone (international foot)','See code 8277 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.35,'EPSG','9110','EPSG','8802','Longitude of natural origin',-123.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',98425.1969,'EPSG','9002','EPSG','8807','False northing',65616.7979,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10471','conversion','EPSG','8278','EPSG','4471','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8279','Oregon Dayville-Prairie City zone (meter)','See code 8280 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10472','conversion','EPSG','8279','EPSG','4474','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8280','Oregon Dayville-Prairie City zone (international foot)','See code 8279 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.38,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',65616.7979,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10473','conversion','EPSG','8280','EPSG','4474','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8281','Oregon Denio-Burns zone (meter)','See code 8282 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00019,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10474','conversion','EPSG','8281','EPSG','4475','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8282','Oregon Denio-Burns zone (international foot)','See code 8281 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00019,'EPSG','9201','EPSG','8806','False easting',262467.1916,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10475','conversion','EPSG','8282','EPSG','4475','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8283','Oregon Halfway zone (meter)','See code 8284 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000085,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',70000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10476','conversion','EPSG','8283','EPSG','4476','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8284','Oregon Halfway zone (international foot)','See code 8283 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000085,'EPSG','9201','EPSG','8806','False easting',131233.5958,'EPSG','9002','EPSG','8807','False northing',229658.7927,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10477','conversion','EPSG','8284','EPSG','4476','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8285','Oregon Medford-Diamond Lake zone (meter)','See code 8286 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00004,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',-60000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10478','conversion','EPSG','8285','EPSG','4477','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8286','Oregon Medford-Diamond Lake zone (international foot)','See code 8285 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00004,'EPSG','9201','EPSG','8806','False easting',196850.3937,'EPSG','9002','EPSG','8807','False northing',-196850.3937,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10479','conversion','EPSG','8286','EPSG','4477','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8287','Oregon Mitchell zone (meter)','See code 8288 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',47.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99927,'EPSG','9201','EPSG','8806','False easting',30000.0,'EPSG','9001','EPSG','8807','False northing',290000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10480','conversion','EPSG','8287','EPSG','4478','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8288','Oregon Mitchell zone (international foot)','See code 8287 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',47.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99927,'EPSG','9201','EPSG','8806','False easting',98425.1969,'EPSG','9002','EPSG','8807','False northing',951443.5696,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10481','conversion','EPSG','8288','EPSG','4478','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8289','Oregon North Central zone (meter)','See code 8290 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',140000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10482','conversion','EPSG','8289','EPSG','4479','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8290','Oregon North Central zone (international foot)','See code 8289 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',328083.9895,'EPSG','9002','EPSG','8807','False northing',459317.5853,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10483','conversion','EPSG','8290','EPSG','4479','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8291','Oregon Ochoco Summit zone (meter)','See code 8292 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00006,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',-80000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10484','conversion','EPSG','8291','EPSG','4481','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8292','Oregon Ochoco Summit zone (international foot)','See code 8291 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00006,'EPSG','9201','EPSG','8806','False easting',131233.5958,'EPSG','9002','EPSG','8807','False northing',-262467.1916,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10485','conversion','EPSG','8292','EPSG','4481','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8293','Oregon Owyhee zone (meter)','See code 8294 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00018,'EPSG','9201','EPSG','8806','False easting',70000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10486','conversion','EPSG','8293','EPSG','4482','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8294','Oregon Owyhee zone (international foot)','See code 8293 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00018,'EPSG','9201','EPSG','8806','False easting',229658.7927,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10487','conversion','EPSG','8294','EPSG','4482','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8295','Oregon Pilot Rock-Ukiah zone (meter)','See code 8296 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',130000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10488','conversion','EPSG','8295','EPSG','4483','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8296','Oregon Pilot Rock-Ukiah zone (international foot)','See code 8295 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',164041.9948,'EPSG','9002','EPSG','8807','False northing',426509.1864,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10489','conversion','EPSG','8296','EPSG','4483','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8297','Oregon Prairie City-Brogan zone (meter)','See code 8298 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00017,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10490','conversion','EPSG','8297','EPSG','4484','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8298','Oregon Prairie City-Brogan zone (international foot)','See code 8297 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00017,'EPSG','9201','EPSG','8806','False easting',196850.3937,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10491','conversion','EPSG','8298','EPSG','4484','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8299','Oregon Riley-Lakeview zone (meter)','See code 8300 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000215,'EPSG','9201','EPSG','8806','False easting',70000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10492','conversion','EPSG','8299','EPSG','4458','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8300','Oregon Riley-Lakeview zone (international foot)','See code 8299 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000215,'EPSG','9201','EPSG','8806','False easting',229658.7927,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10493','conversion','EPSG','8300','EPSG','4458','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8301','Oregon Siskiyou Pass zone (meter)','See code 8302 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00015,'EPSG','9201','EPSG','8806','False easting',10000.0,'EPSG','9001','EPSG','8807','False northing',60000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10494','conversion','EPSG','8301','EPSG','4463','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8302','Oregon Siskiyou Pass zone (international foot)','See code 8301 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00015,'EPSG','9201','EPSG','8806','False easting',32808.399,'EPSG','9002','EPSG','8807','False northing',196850.3937,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10495','conversion','EPSG','8302','EPSG','4463','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8303','Oregon Ukiah-Fox zone (meter)','See code 8304 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00014,'EPSG','9201','EPSG','8806','False easting',30000.0,'EPSG','9001','EPSG','8807','False northing',90000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10496','conversion','EPSG','8303','EPSG','4470','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8304','Oregon Ukiah-Fox zone (international foot)','See code 8303 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-119.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00014,'EPSG','9201','EPSG','8806','False easting',98425.1969,'EPSG','9002','EPSG','8807','False northing',295275.5906,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10497','conversion','EPSG','8304','EPSG','4470','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8305','Oregon Wallowa zone (meter)','See code 8306 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000195,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10498','conversion','EPSG','8305','EPSG','4480','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8306','Oregon Wallowa zone (international foot)','See code 8305 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-117.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000195,'EPSG','9201','EPSG','8806','False easting',196850.3937,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10499','conversion','EPSG','8306','EPSG','4480','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8307','Oregon Warner Highway zone (meter)','See code 8308 for equivalent non-metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000245,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',60000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10500','conversion','EPSG','8307','EPSG','4486','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8308','Oregon Warner Highway zone (international foot)','See code 8307 for equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-120.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000245,'EPSG','9201','EPSG','8806','False easting',131233.5958,'EPSG','9002','EPSG','8807','False northing',196850.3937,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10501','conversion','EPSG','8308','EPSG','4486','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8309','Oregon Willamette Pass zone (meter)','See code 8310 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000223,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10502','conversion','EPSG','8309','EPSG','4488','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8310','Oregon Willamette Pass zone (international foot)','See code 8309 for equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-122.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000223,'EPSG','9201','EPSG','8806','False easting',65616.7979,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10503','conversion','EPSG','8310','EPSG','4488','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8373','NCRS Las Vegas zone (m)','See proj code 8374 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.58,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0001,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10519','conversion','EPSG','8373','EPSG','4485','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8374','NCRS Las Vegas zone (ftUS)','See proj code 8373 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.58,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0001,'EPSG','9201','EPSG','8806','False easting',328083.3333,'EPSG','9003','EPSG','8807','False northing',656166.6667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10520','conversion','EPSG','8374','EPSG','4485','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8375','NCRS Las Vegas high elevation zone (m)','See proj code 8375 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.58,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000135,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10521','conversion','EPSG','8375','EPSG','4487','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8376','NCRS Las Vegas high elevation zone (ftUS)','See proj code 8375 for authoritative metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.58,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000135,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',1312333.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10522','conversion','EPSG','8376','EPSG','4487','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','8389','WEIPA94','Grid convergence uses opposite sign convention to UTM. The projection has reduced scale distortion compared to Map Grid of Australia zone 54 (code 17354).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999929,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10525','conversion','EPSG','8389','EPSG','4491','EPSG','1249'); INSERT INTO "conversion" VALUES('EPSG','8432','Macau Grid','Grid origin is Base W triangulation station.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',22.124463,'EPSG','9110','EPSG','8802','Longitude of natural origin',113.321129,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',20000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10555','conversion','EPSG','8432','EPSG','1147','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','8440','Laborde Grid (Greenwich)','See Laborde Grid (projection code 19861) for original definition in grads with respect to the Paris meridian. This is equivalent.','EPSG','9813','Laborde Oblique Mercator','EPSG','8811','Latitude of projection centre',-18.54,'EPSG','9110','EPSG','8812','Longitude of projection centre',46.2614025,'EPSG','9110','EPSG','8813','Azimuth at projection centre',18.54,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.9995,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10561','conversion','EPSG','8440','EPSG','1149','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','8458','Kansas regional zone 1 Goodland (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-101.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000156,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10575','conversion','EPSG','8458','EPSG','4495','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8459','Kansas regional zone 2 Colby (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-100.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000134,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10576','conversion','EPSG','8459','EPSG','4496','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8490','Kansas regional zone 3 Oberlin (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-100.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000116,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10607','conversion','EPSG','8490','EPSG','4497','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8491','Kansas regional zone 4 Hays (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-99.27,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000082,'EPSG','9201','EPSG','8806','False easting',4500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10608','conversion','EPSG','8491','EPSG','4494','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8492','Kansas regional zone 5 Great Bend (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-98.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000078,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10609','conversion','EPSG','8492','EPSG','4498','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8493','Kansas regional zone 6 Beliot (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-98.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000068,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10610','conversion','EPSG','8493','EPSG','4499','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8494','Kansas regional zone 7 Salina (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-97.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000049,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10611','conversion','EPSG','8494','EPSG','4500','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8495','Kansas regional zone 8 Manhattan (ftUS)','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-96.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000044,'EPSG','9201','EPSG','8806','False easting',8500000.0,'EPSG','9003','EPSG','8807','False northing',600000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10612','conversion','EPSG','8495','EPSG','4501','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8498','Kansas regional zone 9 Emporia (ftUS)','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',38.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-96.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00005,'EPSG','9201','EPSG','8806','False easting',9500000.0,'EPSG','9003','EPSG','8807','False northing',300000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10615','conversion','EPSG','8498','EPSG','4502','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8499','Kansas regional zone 10 Atchison (ftUS)','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.38,'EPSG','9110','EPSG','8802','Longitude of natural origin',-95.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00004,'EPSG','9201','EPSG','8806','False easting',10500000.0,'EPSG','9003','EPSG','8807','False northing',700000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10616','conversion','EPSG','8499','EPSG','4503','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8500','Kansas regional zone 11 Kansas City (ftUS)','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',-95.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000033,'EPSG','9201','EPSG','8806','False easting',11500000.0,'EPSG','9003','EPSG','8807','False northing',600000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10617','conversion','EPSG','8500','EPSG','4504','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8501','Kansas regional zone 12 Ulysses (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-101.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00014,'EPSG','9201','EPSG','8806','False easting',12500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10618','conversion','EPSG','8501','EPSG','4505','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8502','Kansas regional zone 13 Garden City (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-100.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000109,'EPSG','9201','EPSG','8806','False easting',13500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10619','conversion','EPSG','8502','EPSG','4506','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8503','Kansas regional zone 14 Dodge City (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-99.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000097,'EPSG','9201','EPSG','8806','False easting',14500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10620','conversion','EPSG','8503','EPSG','4507','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8504','Kansas regional zone 15 Larned (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-99.12,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000087,'EPSG','9201','EPSG','8806','False easting',15500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10621','conversion','EPSG','8504','EPSG','4508','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8505','Kansas regional zone 16 Pratt (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-98.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000069,'EPSG','9201','EPSG','8806','False easting',16500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10622','conversion','EPSG','8505','EPSG','4509','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8506','Kansas regional zone 17 Wichita (ftUS)','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.46,'EPSG','9110','EPSG','8802','Longitude of natural origin',-97.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000059,'EPSG','9201','EPSG','8806','False easting',17500000.0,'EPSG','9003','EPSG','8807','False northing',400000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10623','conversion','EPSG','8506','EPSG','4510','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8507','Kansas regional zone 18 Arkansas City (ftUS)','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.11,'EPSG','9110','EPSG','8802','Longitude of natural origin',-97.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000055,'EPSG','9201','EPSG','8806','False easting',18500000.0,'EPSG','9003','EPSG','8807','False northing',200000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10624','conversion','EPSG','8507','EPSG','4511','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8515','Kansas regional zone 19 Coffeyville (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-95.58,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000034,'EPSG','9201','EPSG','8806','False easting',19500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10632','conversion','EPSG','8515','EPSG','4512','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8516','Kansas regional zone 20 Pittsburg (ftUS)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-95.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',20500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10633','conversion','EPSG','8516','EPSG','4513','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','8825','Idaho Transverse Mercator','Replaces IDTM27.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10778','conversion','EPSG','8825','EPSG','1381','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','8854','Equal Earth Greenwich','','EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10800','conversion','EPSG','8854','EPSG','1262','EPSG','1225'); INSERT INTO "conversion" VALUES('EPSG','8855','Equal Earth Americas','','EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10801','conversion','EPSG','8855','EPSG','4520','EPSG','1223'); INSERT INTO "conversion" VALUES('EPSG','8856','Equal Earth Asia-Pacific','','EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10802','conversion','EPSG','8856','EPSG','4523','EPSG','1224'); INSERT INTO "conversion" VALUES('EPSG','9058','Vietnam TM-3 103-00','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',103.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10889','conversion','EPSG','9058','EPSG','4541','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9190','NIWA Albers','See NZCS2000 (projection code 17964) and Mercator 41 (projection code 19843) for spatial referencing and conformal mapping.','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',175.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-30.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-50.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10982','conversion','EPSG','9190','EPSG','3508','EPSG','1247'); INSERT INTO "conversion" VALUES('EPSG','9192','Vietnam TM-3 104-00','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',104.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10983','conversion','EPSG','9192','EPSG','4538','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9193','Vietnam TM-3 104-30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',104.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10984','conversion','EPSG','9193','EPSG','4545','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9194','Vietnam TM-3 104-45','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',104.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10985','conversion','EPSG','9194','EPSG','4546','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9195','Vietnam TM-3 105-30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',105.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10986','conversion','EPSG','9195','EPSG','4548','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9196','Vietnam TM-3 105-45','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',105.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10987','conversion','EPSG','9196','EPSG','4549','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9197','Vietnam TM-3 106-00','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',106.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10988','conversion','EPSG','9197','EPSG','4550','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9198','Vietnam TM-3 106-15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',106.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10989','conversion','EPSG','9198','EPSG','4552','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9199','Vietnam TM-3 106-30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',106.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10990','conversion','EPSG','9199','EPSG','4553','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9200','Vietnam TM-3 107-00','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10991','conversion','EPSG','9200','EPSG','4554','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9201','Vietnam TM-3 107-15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10992','conversion','EPSG','9201','EPSG','4556','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9202','Vietnam TM-3 107-30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10993','conversion','EPSG','9202','EPSG','4557','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9203','Vietnam TM-3 108-15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',108.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10994','conversion','EPSG','9203','EPSG','4559','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9204','Vietnam TM-3 108-30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',108.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10995','conversion','EPSG','9204','EPSG','4560','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','9219','South Africa Basic Survey Unit Albers 25E','Came into use from 2019-01-01. Use is extended northwards into neighbouring countries to include the river catchment areas of the Orange/Gariep and Limpopo rivers.','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-30.0,'EPSG','9102','EPSG','8822','Longitude of false origin',25.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-22.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-38.0,'EPSG','9102','EPSG','8826','Easting at false origin',1400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10996','conversion','EPSG','9219','EPSG','4567','EPSG','1106'); INSERT INTO "conversion" VALUES('EPSG','9220','South Africa Basic Survey Unit Albers 44E','Came into use from 2019-01-01.','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',44.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-34.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-50.0,'EPSG','9102','EPSG','8826','Easting at false origin',1200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','10997','conversion','EPSG','9220','EPSG','4568','EPSG','1106'); INSERT INTO "conversion" VALUES('EPSG','9268','Austria West','Greenwich equivalent of Austria West Zone (EPSG code 18041).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13898','conversion','EPSG','9268','EPSG','1706','EPSG','1258'); INSERT INTO "conversion" VALUES('EPSG','9269','Austria Central','Greenwich equivalent of Austria Central Zone (EPSG code 18042).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13899','conversion','EPSG','9269','EPSG','1707','EPSG','1258'); INSERT INTO "conversion" VALUES('EPSG','9270','Austria East','Greenwich equivalent of Austria East Zone (EPSG code 18043).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13900','conversion','EPSG','9270','EPSG','1708','EPSG','1258'); INSERT INTO "conversion" VALUES('EPSG','9301','HS2-TM','In conjunction with transformation HS2TN15 (code 9302) emulates the zero-distortion Snake projection HS2P1+14. Emulation derived at 350,000 locations, RMS position difference is 0.15 mm and max position difference is 0.6 mm; this is considered errorless.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.3,'EPSG','9102','EPSG','8802','Longitude of natural origin',-1.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',198873.0046,'EPSG','9001','EPSG','8807','False northing',375064.3871,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14059','conversion','EPSG','9301','EPSG','4582','EPSG','1260'); INSERT INTO "conversion" VALUES('EPSG','9353','IBCSO Polar Stereographic','Used for the International Bathymetric Chart of the Southern Ocean.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-65.0,'EPSG','9102','EPSG','8833','Longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13982','conversion','EPSG','9353','EPSG','4586','EPSG','1198'); INSERT INTO "conversion" VALUES('EPSG','9366','TPEN11-TM','In conjunction with transformation ETRS89 to TPEN11-IRF (1) (code 9365), emulates the TPEN11 Snake and TPEN11ext Snake projections.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',203252.175,'EPSG','9001','EPSG','8807','False northing',407512.765,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13985','conversion','EPSG','9366','EPSG','4583','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9370','MML07-TM','In conjunction with transformation ETRS89 to MML07-IRF (1) (code 9369), emulates the MML07 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-0.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',49350.157,'EPSG','9001','EPSG','8807','False northing',108398.212,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14003','conversion','EPSG','9370','EPSG','4588','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9376','Colombia Transverse Mercator','Adopted by resolution IGAC 471/May 14, 2020. Supports the Spatial Data Infrastructure for Land Administration (IDE-AT) and its GIS applications. Used to fulfill all the requirements of the activities required for the Multipurpose Cadastre.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-73.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9992,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14004','conversion','EPSG','9376','EPSG','1070','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','9385','AbInvA96_2020-TM','In conjunction with transformation ETRS89 to AbInvA96_2020-IRF (1) (code 9386), emulates the AbInvA96_2020 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',57.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-3.12,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',155828.702,'EPSG','9001','EPSG','8807','False northing',115225.707,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14062','conversion','EPSG','9385','EPSG','4589','EPSG','1196'); INSERT INTO "conversion" VALUES('EPSG','9455','GBK19-TM','In conjunction with transformation ETRS89 to GBK19-IRF (1) (code 9454), emulates the GBK19 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',55.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-4.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',93720.394,'EPSG','9001','EPSG','8807','False northing',113870.493,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14130','conversion','EPSG','9455','EPSG','4607','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9497','Gauss-Kruger CABA 2019','Projection created in 2017 for the purpose of modernizing the city''s cadastre and linking it to modern reference frames. Origin approximates the 1919 origin of the cross of the main tower of the San José de Flores church ("0 de Flores" plane grid).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-34.374536,'EPSG','9110','EPSG','8802','Longitude of natural origin',-58.274791,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',70000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14242','conversion','EPSG','9497','EPSG','4610','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','9548','Lyon Turin Ferroviaire 2004 (C)','May be emulated using LCC 1SP variant A with false northing of -39367.968 metres at natural origin of 44°22''45"N.','EPSG','1102','Lambert Conic Conformal (1SP variant B)','EPSG','8801','Latitude of natural origin',44.2245,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8821','Latitude of false origin',45.11,'EPSG','9110','EPSG','8822','Longitude of false origin',6.49,'EPSG','9110','EPSG','8826','Easting at false origin',150000.0,'EPSG','9001','EPSG','8827','Northing at false origin',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14927','conversion','EPSG','9548','EPSG','4613','EPSG','1271'); INSERT INTO "conversion" VALUES('EPSG','9673','US Forest Service region 6 Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',34.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.0,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14786','conversion','EPSG','9673','EPSG','2381','EPSG','1165'); INSERT INTO "conversion" VALUES('EPSG','9677','Bangladesh Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14878','conversion','EPSG','9677','EPSG','3217','EPSG','1274'); INSERT INTO "conversion" VALUES('EPSG','9738','EOS21-TM','In conjunction with transformation ETRS89 to EOS-IRF (1) (code 9740), emulates the EOS21 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',56.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',74996.927,'EPSG','9001','EPSG','8807','False northing',133508.35,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15339','conversion','EPSG','9738','EPSG','4620','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9746','SPCS83 Alabama East zone (US survey foot)','This map projection is not formally recognised by the NGS because there is no State legislation for NAD83 defining the foot to be used. See code 10131 for official metric definition. ftUS required by AL DOT and used by other professional practioners.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15382','conversion','EPSG','9746','EPSG','2154','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','9747','SPCS83 Alabama West zone (US survey foot)','This map projection is not formally recognised by the NGS because there is no State legislation for NAD83 defining the foot to be used. See code 10132 for official metric definition. ftUS required by AL DOT and used by other professional practioners.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',1968500.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15381','conversion','EPSG','9747','EPSG','2155','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','9760','ECML14_NB-TM','In conjunction with transformation ETRS89 to ECML14_NB-IRF (1) (code 9759), emulates the ECML14_NB Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',55.03,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',112242.8512,'EPSG','9001','EPSG','8807','False northing',402313.7432,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16497','conversion','EPSG','9760','EPSG','4621','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9765','EWR2-TM','In conjunction with transformation ETRS89 to EWR2-IRF (1) (code 9764), emulates the EWR2 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',51.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-0.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',192519.9715,'EPSG','9001','EPSG','8807','False northing',146942.6806,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16511','conversion','EPSG','9765','EPSG','4622','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9796','Local coordinate system of Kyiv','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',30.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16909','conversion','EPSG','9796','EPSG','4650','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9797','Local coordinate system of Crimea region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',34.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16876','conversion','EPSG','9797','EPSG','4648','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9798','Local coordinate system of Vinnytsia region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',28.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16877','conversion','EPSG','9798','EPSG','4643','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9799','Local coordinate system of Volyn region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',24.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16878','conversion','EPSG','9799','EPSG','4644','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9800','Local coordinate system of Dnipropetrovsk region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',35.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16879','conversion','EPSG','9800','EPSG','4627','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9801','Local coordinate system of Donetsk region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',37.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16880','conversion','EPSG','9801','EPSG','4628','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9802','Local coordinate system of Zhytomyr region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',28.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16881','conversion','EPSG','9802','EPSG','4647','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9803','Local coordinate system of Zakarpattia region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',23.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16882','conversion','EPSG','9803','EPSG','4645','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9804','Local coordinate system of Zaporizhzhia region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16883','conversion','EPSG','9804','EPSG','4646','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9805','Local coordinate system of Ivano-Frankivsk region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',24.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16884','conversion','EPSG','9805','EPSG','4629','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9806','Local coordinate system of Kirovohrad region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',32.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16885','conversion','EPSG','9806','EPSG','4634','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9807','Local coordinate system of Luhansk region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16886','conversion','EPSG','9807','EPSG','4635','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9808','Local coordinate system of Lviv region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16887','conversion','EPSG','9808','EPSG','4636','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9809','Local coordinate system of Mykolaiv region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',31.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16888','conversion','EPSG','9809','EPSG','4637','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9810','Local coordinate system of Odessa region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16889','conversion','EPSG','9810','EPSG','4638','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9811','Local coordinate system of Poltava region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',33.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16890','conversion','EPSG','9811','EPSG','4639','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9812','Local coordinate system of Rivne and Khmelnytsky regions','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16908','conversion','EPSG','9812','EPSG','4651','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9813','Local coordinate system of Sumy region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',34.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16895','conversion','EPSG','9813','EPSG','4641','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9814','Local coordinate system of Ternopil region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',25.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16896','conversion','EPSG','9814','EPSG','4642','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9815','Local coordinate system of Kharkiv region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',36.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16897','conversion','EPSG','9815','EPSG','4630','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9816','Local coordinate system of Kherson region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',33.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16898','conversion','EPSG','9816','EPSG','4631','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9817','Local coordinate system of Cherkasy region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',31.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16899','conversion','EPSG','9817','EPSG','4624','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9818','Local coordinate system of Chernivtsi region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',26.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16900','conversion','EPSG','9818','EPSG','4626','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9819','Local coordinate system of Chernihiv region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',32.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16901','conversion','EPSG','9819','EPSG','4625','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9820','Local coordinate system of Sevastopol city','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16902','conversion','EPSG','9820','EPSG','4649','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','9868','MRH21-TM','In conjunction with transformation ETRS89 to MHR21-IRF (1) (code 9867), emulates the MHR21 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',227286.9881,'EPSG','9001','EPSG','8807','False northing',265751.2874,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16937','conversion','EPSG','9868','EPSG','4652','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9872','Papua New Guinea Map Grid 1994 zone 57','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16917','conversion','EPSG','9872','EPSG','4653','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','9873','Papua New Guinea Map Grid 1994 zone 58','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16921','conversion','EPSG','9873','EPSG','4654','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','9879','MOLDOR11-TM','In conjunction with transformation ETRS89 to MOLDOR11-IRF (1) (code 9878), emulates the MOLDOR11 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',226574.2032,'EPSG','9001','EPSG','8807','False northing',390894.838,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16956','conversion','EPSG','9879','EPSG','4655','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9894','Luxembourg TM (3D)','','EPSG','1111','Transverse Mercator 3D','EPSG','8801','Latitude of natural origin',49.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17109','conversion','EPSG','9894','EPSG','1146','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','9911','Macedonia Gauss-Kruger truncated','Truncated version of Macedonia Gauss-Kruger, with 4000000m removed from northings.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17400','conversion','EPSG','9911','EPSG','1148','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','9942','EBBWV14-TM','In conjunction with transformation ETRS89 to EBBWV14-IRF (1) (code 9941), emulates the EBBWV14 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',51.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-3.06,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',106702.326,'EPSG','9001','EPSG','8807','False northing',119968.1395,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17347','conversion','EPSG','9942','EPSG','4661','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9946','Iceland Lambert Azimuthal Equal Area','','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',65.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-19.0,'EPSG','9102','EPSG','8806','False easting',1700000.0,'EPSG','9001','EPSG','8807','False northing',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17463','conversion','EPSG','9946','EPSG','1120','EPSG','1162'); INSERT INTO "conversion" VALUES('EPSG','9966','HULLEE13-TM','In conjunction with transformation ETRS89 to HULLEE13-IRF (1) (code 9965), emulates the HULLEE13 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-0.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',140859.7394,'EPSG','9001','EPSG','8807','False northing',247512.2812,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17427','conversion','EPSG','9966','EPSG','4663','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9971','SCM22-TM','In conjunction with transformation ETRS89 to SCM22-IRF (1) (code 9970), emulates the SCM22 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',56.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-3.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',108600.972,'EPSG','9001','EPSG','8807','False northing',239087.349,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17440','conversion','EPSG','9971','EPSG','4665','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9976','FNL22-TM','In conjunction with transformation ETRS89 to FNL22-IRF (1) (code 9975), emulates the FNL22 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-3.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',139618.9493,'EPSG','9001','EPSG','8807','False northing',183110.794,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17455','conversion','EPSG','9976','EPSG','4664','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','9981','MTM Nova Scotia 1997 zone 4','Introduced for use with NAD83(CSRS)v3.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-61.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',14500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17527','conversion','EPSG','9981','EPSG','1534','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','9982','MTM Nova Scotia 1997 zone 5','Introduced for use with NAD83(CSRS)v3.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-64.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',15500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17525','conversion','EPSG','9982','EPSG','1535','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10101','Alabama CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11101','conversion','EPSG','10101','EPSG','2154','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10102','Alabama CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11102','conversion','EPSG','10102','EPSG','2155','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10127','MWC18-TM','In conjunction with transformation ETRS89 to MWC18-IRF (1) (code 10108), emulates the MWC18 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',171975.9382,'EPSG','9001','EPSG','8807','False northing',116744.6938,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18333','conversion','EPSG','10127','EPSG','4666','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10131','SPCS83 Alabama East zone (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11103','conversion','EPSG','10131','EPSG','2154','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10132','SPCS83 Alabama West zone (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11104','conversion','EPSG','10132','EPSG','2155','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10147','Brisbane City Survey Grid 2020','Replaces Brisbane City Survey Grid 02 (code 17363) from 2022-07-01.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-28.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18476','conversion','EPSG','10147','EPSG','2990','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','10148','Amtrak North East Corridor Coordinate System 2021 (international foot)','If using Hotine Oblique Mercator (variant A) method (code 9812), FE = -16,589,516.268572...ft, FN = -9,803,584.307096...ft.','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',40.5,'EPSG','9110','EPSG','8812','Longitude of projection centre',-74.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',58.0,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',58.0,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99999,'EPSG','9201','EPSG','8816','Easting at projection centre',1500000.0,'EPSG','9002','EPSG','8817','Northing at projection centre',1500000.0,'EPSG','9002',0); INSERT INTO "usage" VALUES('EPSG','18487','conversion','EPSG','10148','EPSG','4669','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10159','S34-reconstruction','Created in 2022. In conjunction with transformation ETRS89 to S34J-IRF (1) for Jutland or ETRS89 to S34S-IRF (1) for Zealand (codes 10161 and 10251), defines the relationship of ETRS89 to the historic S34J and S34S CRSs using a modern parameterisation.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.37,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',-210327.0,'EPSG','9001','EPSG','8807','False northing',-6034310.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19660','conversion','EPSG','10159','EPSG','4575','EPSG','1203'); INSERT INTO "conversion" VALUES('EPSG','10182','DoPw22-TM','In conjunction with transformation ETRS89 to DoPw22-IRF (1) (code 10181), emulates the DoPw22 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.42,'EPSG','9110','EPSG','8802','Longitude of natural origin',-4.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',64859.6557,'EPSG','9001','EPSG','8807','False northing',122266.5277,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18659','conversion','EPSG','10182','EPSG','4686','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10187','ShAb07-TM','In conjunction with transformation ETRS89 to ShAb07-IRF (1) (code 10186), emulates the ShAb07 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',-3.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',56023.5377,'EPSG','9001','EPSG','8807','False northing',24567.6764,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18665','conversion','EPSG','10187','EPSG','4687','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10193','CNH22-LCC','In conjunction with transformation ETRS89 to CNH22-IRF (1) (code 10192), emulates the CNH22 Snake projection.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',53.15,'EPSG','9110','EPSG','8822','Longitude of false origin',-3.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',53.06,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',53.24,'EPSG','9110','EPSG','8826','Easting at false origin',212548.8756,'EPSG','9001','EPSG','8827','Northing at false origin',495230.9254,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18720','conversion','EPSG','10193','EPSG','4677','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10198','CWS13-TM','In conjunction with transformation ETRS89 to CWS13-IRF (1) (code 10197), emulates the CWS13 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',199668.0926,'EPSG','9001','EPSG','8807','False northing',89354.3229,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18704','conversion','EPSG','10198','EPSG','4678','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10201','Arizona Coordinate System East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-110.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11105','conversion','EPSG','10201','EPSG','2167','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10202','Arizona Coordinate System Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-111.55,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11106','conversion','EPSG','10202','EPSG','2166','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10203','Arizona Coordinate System West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-113.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11107','conversion','EPSG','10203','EPSG','2168','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10206','DIBA15-TM','In conjunction with transformation ETRS89 to DIBA15-IRF (1) (code 10205), emulates the DIBA15 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',51.51,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',511622.854,'EPSG','9001','EPSG','8807','False northing',324737.4633,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18770','conversion','EPSG','10206','EPSG','4681','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10211','GW22-LCC','In conjunction with transformation ETRS89 to GWPBS22-IRF (1) (code 10210) emulates the GWPBS22 Snake projection, with ETRS89 to GWWAB22-IRF (1) (code 10215) emulates GWWAB22 and with ETRS89 to GWWWA22-IRF (1) (code 10220) emulates the GWWWA22 Snake proj.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',51.39,'EPSG','9110','EPSG','8822','Longitude of false origin',-2.39,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',51.24,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.54,'EPSG','9110','EPSG','8826','Easting at false origin',168854.016,'EPSG','9001','EPSG','8827','Northing at false origin',193447.117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18794','conversion','EPSG','10211','EPSG','4690','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10226','MALS09-TM','In conjunction with transformation ETRS89 to MALS09-IRF (1) (code 10225), emulates the MALS09 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',175262.1809,'EPSG','9001','EPSG','8807','False northing',174688.2508,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18743','conversion','EPSG','10226','EPSG','4682','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10231','SPCS83 Arizona East zone (meter)','State law defines origin in International feet. FE = 700000ft. See code 15304 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-110.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11108','conversion','EPSG','10231','EPSG','2167','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10232','SPCS83 Arizona Central zone (meter)','State law defines origin in International feet. FE = 700000ft. See code 15305 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-111.55,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11109','conversion','EPSG','10232','EPSG','2166','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10233','SPCS83 Arizona West zone (meter)','State law defines origin in International feet. FE = 700000ft. See code 15306 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-113.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11110','conversion','EPSG','10233','EPSG','2168','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10234','OxWo08-TM','In conjunction with transformation ETRS89 to OxWo08-IRF (1) (code 10230), emulates the OxWo08 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',51.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.42,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',134791.6965,'EPSG','9001','EPSG','8807','False northing',121872.5056,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18761','conversion','EPSG','10234','EPSG','4680','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10239','SYC20-TM','In conjunction with transformation ETRS89 to SYC20-IRF (1) (code 10238), emulates the SYC20 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',110094.4312,'EPSG','9001','EPSG','8807','False northing',120623.8396,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18762','conversion','EPSG','10239','EPSG','4679','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10253','S45B-reconstruction','Created in 2022. In conjunction with transformation ETRS89 to S45B-IRF (1) (code 10255) defines the relationship of ETRS89 to the historic S45B CRS using a modern parameterisation.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',55.11171,'EPSG','9102','EPSG','8802','Longitude of natural origin',14.88927,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',-50000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19778','conversion','EPSG','10253','EPSG','2533','EPSG','1203'); INSERT INTO "conversion" VALUES('EPSG','10257','Generalstabens System LCC','Created in 2022. Together with transformation ETRS89 to GS-IRF (1) for Jutland and Zealand or ETRS89 to KK-IRF (1) for Copenhagen (codes 10259 and 10267), defines the relationship of ETRS89 to the historic GS and KK CRSs using a modern parameterisation.','EPSG','1102','Lambert Conic Conformal (1SP variant B)','EPSG','8801','Latitude of natural origin',56.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8821','Latitude of false origin',55.0,'EPSG','9102','EPSG','8822','Longitude of false origin',10.37775,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19706','conversion','EPSG','10257','EPSG','4575','EPSG','1203'); INSERT INTO "conversion" VALUES('EPSG','10261','GSB-reconstruction','Created in 2022. In conjunction with transformation ETRS89 to GSB-IRF (1) (code 10263) defines the relationship of ETRS89 to the historic Generalstaben projCRS using a modern parameterisation.','EPSG','1102','Lambert Conic Conformal (1SP variant B)','EPSG','8801','Latitude of natural origin',56.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8821','Latitude of false origin',55.0,'EPSG','9102','EPSG','8822','Longitude of false origin',14.92775,'EPSG','9102','EPSG','8826','Easting at false origin',-18831.46,'EPSG','9001','EPSG','8827','Northing at false origin',5614.621,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19777','conversion','EPSG','10261','EPSG','2533','EPSG','1203'); INSERT INTO "conversion" VALUES('EPSG','10269','Ostenfeld-reconstruction','Created in 2022. In conjunction with transformation ETRS89 to Ostenfeld-IRF (1) (code 10271) defines the relationship of ETRS89 to the historic Ostenfeld CRS of Prussia using a modern parameterisation.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.4685,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.233,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19694','conversion','EPSG','10269','EPSG','4694','EPSG','1203'); INSERT INTO "conversion" VALUES('EPSG','10274','SMITB20-TM','In conjunction with transformation ETRS89 to SMITB20-IRF (1) (code 10273), emulates the SMITB20 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',50.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-3.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',110693.666,'EPSG','9001','EPSG','8807','False northing',102089.2943,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19177','conversion','EPSG','10274','EPSG','4688','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10279','RBEPP12-LCC','In conjunction with transformation ETRS89 to RBEPP12-IRF (1) (code 10278), emulates the RBEPP12 Snake projection.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',50.51,'EPSG','9110','EPSG','8822','Longitude of false origin',-3.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',50.18,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.27,'EPSG','9110','EPSG','8826','Easting at false origin',372382.8292,'EPSG','9001','EPSG','8827','Northing at false origin',217764.7796,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19186','conversion','EPSG','10279','EPSG','4689','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10301','Arkansas CS27 North','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.14,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.56,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11111','conversion','EPSG','10301','EPSG','2169','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10302','Arkansas CS27 South','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.18,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11112','conversion','EPSG','10302','EPSG','2170','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10313','Lambert New Caledonia 2015','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-21.3,'EPSG','9110','EPSG','8822','Longitude of false origin',166.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-20.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-22.2,'EPSG','9110','EPSG','8826','Easting at false origin',2400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19602','conversion','EPSG','10313','EPSG','3430','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10325','Bosnia and Herzegovina Transverse Mercator','Replaces Balkans TM zones in Bosnia and Herzegovina.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19739','conversion','EPSG','10325','EPSG','1050','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','10331','SPCS83 Arkansas North zone (meter)','See code 15385 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.14,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.56,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11113','conversion','EPSG','10331','EPSG','2169','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10332','SPCS83 Arkansas South zone (meter)','See code 15386 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.18,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11114','conversion','EPSG','10332','EPSG','2170','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10401','California CS27 zone I','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.0,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11115','conversion','EPSG','10401','EPSG','2175','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10402','California CS27 zone II','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.2,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11116','conversion','EPSG','10402','EPSG','2176','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10403','California CS27 zone III','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.04,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11117','conversion','EPSG','10403','EPSG','2177','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10404','California CS27 zone IV','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-119.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.0,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11118','conversion','EPSG','10404','EPSG','2178','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10405','California CS27 zone V','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.28,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.02,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11119','conversion','EPSG','10405','EPSG','2179','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10406','California CS27 zone VI','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-116.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',33.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.47,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11120','conversion','EPSG','10406','EPSG','2180','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10407','California CS27 zone VII','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.08,'EPSG','9110','EPSG','8822','Longitude of false origin',-118.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.25,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.52,'EPSG','9110','EPSG','8826','Easting at false origin',4186692.58,'EPSG','9003','EPSG','8827','Northing at false origin',416926.74,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11121','conversion','EPSG','10407','EPSG','2181','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10408','California CS27 zone VII','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.08,'EPSG','9110','EPSG','8822','Longitude of false origin',-118.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.25,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.52,'EPSG','9110','EPSG','8826','Easting at false origin',4186692.58,'EPSG','9003','EPSG','8827','Northing at false origin',4160926.74,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11122','conversion','EPSG','10408','EPSG','2181','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10420','California Albers','Created at the Stephen P Teale Data Center.','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',-4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11123','conversion','EPSG','10420','EPSG','1375','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','10424','Albany Grid 1994','Replaced by ALB2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',117.53,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000044,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20290','conversion','EPSG','10424','EPSG','4439','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10425','Barrow Island Grid 1994','Replaced by BIO2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000022,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',2600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20256','conversion','EPSG','10425','EPSG','4438','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10426','Broome Grid 1994','Replaced by BRO2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',122.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000298,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20289','conversion','EPSG','10426','EPSG','4441','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10427','Busselton Coastal Grid 1994','Replaced by BCG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.26,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999592,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3900000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20288','conversion','EPSG','10427','EPSG','4437','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10428','Carnarvon Grid 1994','Replaced by CARN2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',113.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999796,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2950000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20287','conversion','EPSG','10428','EPSG','4442','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10429','Collie Grid 1994','Replaced by COL2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.56,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000019,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20286','conversion','EPSG','10429','EPSG','4443','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10430','Esperance Grid 1994','Replaced by ESP2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',121.53,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000055,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3950000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20285','conversion','EPSG','10430','EPSG','4445','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10431','SPCS83 California zone 1 (meter)','See code 15307 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.0,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11124','conversion','EPSG','10431','EPSG','2175','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10432','SPCS83 California zone 2 (meter)','See code 15308 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.2,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11125','conversion','EPSG','10432','EPSG','2176','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10433','SPCS83 California zone 3 (meter)','See code 15309 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.04,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11126','conversion','EPSG','10433','EPSG','2177','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10434','SPCS83 California zone 4 (meter)','See code 15310 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-119.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.0,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11127','conversion','EPSG','10434','EPSG','2178','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10435','SPCS83 California zone 5 (meter)','See code 15311 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.28,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.02,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11128','conversion','EPSG','10435','EPSG','2182','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10436','SPCS83 California zone 6 (meter)','See code 15312 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-116.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',33.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.47,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11129','conversion','EPSG','10436','EPSG','2180','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10437','Exmouth Grid 1994','Replaced by EXM2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.04,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000236,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2650000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20284','conversion','EPSG','10437','EPSG','4448','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10438','Geraldton Coastal Grid 1994','Replaced by GCG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000628,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3350000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20283','conversion','EPSG','10438','EPSG','4449','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10439','Goldfields Grid 1994','Replaced by GOLD2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',121.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00004949,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',3700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20282','conversion','EPSG','10439','EPSG','4436','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10440','Jurien Coastal Grid 1994','Replaced by JCG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.59,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000314,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3550000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20281','conversion','EPSG','10440','EPSG','4440','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10441','Kalbarri Grid 1994','Replaced by KALB2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.1855,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000014,'EPSG','9201','EPSG','8806','False easting',55000.0,'EPSG','9001','EPSG','8807','False northing',3600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20291','conversion','EPSG','10441','EPSG','4444','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10442','Karratha Grid 1994','Replaced by KAR2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',116.56,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999989,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2450000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20280','conversion','EPSG','10442','EPSG','4451','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10443','Kununurra Grid 1994','Replaced by KUN2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',128.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000165,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20279','conversion','EPSG','10443','EPSG','4452','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10444','Lancelin Coastal Grid 1994','Replaced by LCG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.22,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000157,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3650000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20278','conversion','EPSG','10444','EPSG','4453','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10445','Margaret River Coastal Grid 1994','Replaced by MRCG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000055,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3950000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20277','conversion','EPSG','10445','EPSG','4457','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10446','Perth Coastal Grid 1994','Replaced by PCG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',115.49,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999906,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20276','conversion','EPSG','10446','EPSG','4462','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10447','Port Hedland Grid 1994','Replaced by PHG2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',118.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000135,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',2400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20275','conversion','EPSG','10447','EPSG','4466','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','10470','COV23-TM','In conjunction with transformation ETRS89 to COV23-IRF (1) (code 10469), emulates the COV23 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',116887.9989,'EPSG','9001','EPSG','8807','False northing',102194.9369,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20314','conversion','EPSG','10470','EPSG','4743','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10476','Brenner Base Tunnel TM','Also defined with latitude of natural origin at equator and false northing = -5105739.717m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.58507947,'EPSG','9110','EPSG','8802','Longitude of natural origin',11.31425775,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000121,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20340','conversion','EPSG','10476','EPSG','4744','EPSG','1285'); INSERT INTO "conversion" VALUES('EPSG','10479','TWDB Groundwater Modeling (US survey foot)','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',31.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.0,'EPSG','9102','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',19685000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20353','conversion','EPSG','10479','EPSG','1412','EPSG','1286'); INSERT INTO "conversion" VALUES('EPSG','10501','Colorado CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.43,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.47,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11130','conversion','EPSG','10501','EPSG','2184','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10502','Colorado CS27 Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.45,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.27,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11131','conversion','EPSG','10502','EPSG','2183','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10503','Colorado CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.14,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11132','conversion','EPSG','10503','EPSG','2185','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10515','WISCRS Adjusted Jackson County (ftUS)','Modification of WISCRS Jackson County (ftUS) (code 7451), designed to enable positioning using the WISCORS network referenced to NAD83(2011) to be used for referencing to NAD83(HARN) by approximating the NAD83(2011) to NAD83(HARN) NADCON5 transformation.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.151200716,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.503946745,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000353,'EPSG','9201','EPSG','8806','False easting',88582.5,'EPSG','9003','EPSG','8807','False northing',82020.833,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20746','conversion','EPSG','10515','EPSG','4343','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','10531','SPCS83 Colorado North zone (meter)','See code 15313 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.43,'EPSG','9110','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11133','conversion','EPSG','10531','EPSG','2184','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10532','SPCS83 Colorado Central zone (meter)','See code 15314 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.45,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.27,'EPSG','9110','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11134','conversion','EPSG','10532','EPSG','2183','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10533','SPCS83 Colorado South zone (meter)','See code 15315 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.14,'EPSG','9110','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11135','conversion','EPSG','10533','EPSG','2185','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10591','GLANCE projection - Africa','Basis for the GLANCE continental tiling system for Africa, used for the GLANCE land cover product in archival process at https://lpdaac.usgs.gov/products/glance30v001/.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',5.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',20.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21201','conversion','EPSG','10591','EPSG','4745','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','10593','GLANCE projection - Asia','Basis for the GLANCE continental tiling system for Asia, used for the GLANCE land cover product in archival process at https://lpdaac.usgs.gov/products/glance30v001/.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',100.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21205','conversion','EPSG','10593','EPSG','4747','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','10595','GLANCE projection - Europe','Basis for the GLANCE continental tiling system for Europe, used for the GLANCE land cover product (https://lpdaac.usgs.gov/products/glance30v001/). For compatibility with EU INSPIRE regulations, Europe Equal Area 2001 (code 19986) should be preferred.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',55.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',20.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21318','conversion','EPSG','10595','EPSG','4748','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','10597','GLANCE projection - North America','Basis for the GLANCE continental tiling system for North America, used for the GLANCE land cover product in archival process at https://lpdaac.usgs.gov/products/glance30v001/.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',50.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-100.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21209','conversion','EPSG','10597','EPSG','4749','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','10599','GLANCE projection - Oceania','Basis for the GLANCE continental tiling system for Oceania, used for the GLANCE land cover product in archival process at https://lpdaac.usgs.gov/products/glance30v001/.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',-15.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21212','conversion','EPSG','10599','EPSG','4751','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','10600','Connecticut CS27','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-72.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.52,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.12,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11136','conversion','EPSG','10600','EPSG','1377','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10602','GLANCE projection - South America','Basis for the GLANCE continental tiling system for South America, used for the GLANCE land cover product in archival process at https://lpdaac.usgs.gov/products/glance30v001/.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',-15.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-60.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21214','conversion','EPSG','10602','EPSG','4750','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','10621','San Francisco International Airport B18 grid (ftUS)','','EPSG','1130','Local Orthographic','EPSG','8811','Latitude of projection centre',37.6289686531,'EPSG','9102','EPSG','8812','Longitude of projection centre',-122.3939412704,'EPSG','9102','EPSG','8813','Azimuth at projection centre',27.7928209333,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9999968,'EPSG','9201','EPSG','8816','Easting at projection centre',0.0,'EPSG','9003','EPSG','8817','Northing at projection centre',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21559','conversion','EPSG','10621','EPSG','4529','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','10625','ECML14-TM','In conjunction with transformation ETRS89 to ECML14-IRF (1) (code 10624), emulates the ECML14 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',108021.121,'EPSG','9001','EPSG','8807','False northing',263196.8721,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21388','conversion','EPSG','10625','EPSG','4774','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10630','SPCS83 Connecticut zone (meter)','See code 15316 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-72.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.52,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.12,'EPSG','9110','EPSG','8826','Easting at false origin',304800.6096,'EPSG','9001','EPSG','8827','Northing at false origin',152400.3048,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11137','conversion','EPSG','10630','EPSG','1377','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10631','WC05-TM','In conjunction with transformation ETRS89 to WC05-IRF (1) (code 10629), emulates the WC05 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',209900.2337,'EPSG','9001','EPSG','8807','False northing',401958.2494,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21391','conversion','EPSG','10631','EPSG','4775','EPSG','1141'); INSERT INTO "conversion" VALUES('EPSG','10640','Saba Transverse Mercator 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',29973.97,'EPSG','9001','EPSG','8807','False northing',-1947925.94,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21870','conversion','EPSG','10640','EPSG','4757','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','10664','Porto Alegre Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21622','conversion','EPSG','10664','EPSG','4777','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','10700','Delaware CS27','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11138','conversion','EPSG','10700','EPSG','1378','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10719','Uzbekistan coordinate reference system 2024 zone 40','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999984965,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22083','conversion','EPSG','10719','EPSG','4784','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','10720','Uzbekistan coordinate reference system 2024 zone 41','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999730738,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22199','conversion','EPSG','10720','EPSG','4785','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','10721','Uzbekistan coordinate reference system 2024 zone 42','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999962402,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22081','conversion','EPSG','10721','EPSG','4786','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','10722','Uzbekistan coordinate reference system 2024 zone 43','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999995546,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22080','conversion','EPSG','10722','EPSG','4787','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','10730','SPCS83 Delaware zone (meter)','See code 15317 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11139','conversion','EPSG','10730','EPSG','1378','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10743','Sint Eustatius Transverse Mercator 2020','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',578.55,'EPSG','9001','EPSG','8807','False northing',-1930396.26,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22291','conversion','EPSG','10743','EPSG','4788','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','10751','Agriculture Canada Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.75,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',55.75,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','22472','conversion','EPSG','10751','EPSG','4752','EPSG','1292'); INSERT INTO "conversion" VALUES('EPSG','10757','Bonaire Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',12.105037123,'EPSG','9110','EPSG','8802','Longitude of natural origin',-68.150648821,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',23209.56,'EPSG','9001','EPSG','8807','False northing',21423.99,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22167','conversion','EPSG','10757','EPSG','3822','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','10772','Ribeirao Preto Local TM','PBD-Projeção de Baixa Deformação (low distortion projection).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-21.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-47.47,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000092,'EPSG','9201','EPSG','8806','False easting',15000.0,'EPSG','9001','EPSG','8807','False northing',25000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22213','conversion','EPSG','10772','EPSG','4789','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10819','Agriculture Canada Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.75,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',55.75,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22544','conversion','EPSG','10819','EPSG','4752','EPSG','1292'); INSERT INTO "conversion" VALUES('EPSG','10901','Florida CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11140','conversion','EPSG','10901','EPSG','2186','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10902','Florida CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11141','conversion','EPSG','10902','EPSG','2188','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10903','Florida CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.45,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',29.35,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11142','conversion','EPSG','10903','EPSG','2187','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10931','SPCS83 Florida East zone (meter)','See code 15318 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11143','conversion','EPSG','10931','EPSG','2186','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10932','SPCS83 Florida West zone (meter)','See code 15319 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11144','conversion','EPSG','10932','EPSG','2188','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10933','SPCS83 Florida North zone (meter)','See code 15320 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.45,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',29.35,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11145','conversion','EPSG','10933','EPSG','2187','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','10934','Florida GDL Albers (meter)','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',24.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',24.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',31.3,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11146','conversion','EPSG','10934','EPSG','1379','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','11001','Georgia CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11147','conversion','EPSG','11001','EPSG','2189','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11002','Georgia CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11148','conversion','EPSG','11002','EPSG','2190','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11031','SPCS83 Georgia East zone (meter)','See code 15321 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11149','conversion','EPSG','11031','EPSG','2189','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11032','SPCS83 Georgia West zone (meter)','See code 15322 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11150','conversion','EPSG','11032','EPSG','2190','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11101','Idaho CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999947368,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11151','conversion','EPSG','11101','EPSG','2192','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11102','Idaho CS27 Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999947368,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11152','conversion','EPSG','11102','EPSG','2191','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11103','Idaho CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-115.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11153','conversion','EPSG','11103','EPSG','2193','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11131','SPCS83 Idaho East zone (meter)','See code 15323 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999947368,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11154','conversion','EPSG','11131','EPSG','2192','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11132','SPCS83 Idaho Central zone (meter)','See code 15324 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999947368,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11155','conversion','EPSG','11132','EPSG','2191','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11133','SPCS83 Idaho West zone (meter)','See code 15325 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-115.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11156','conversion','EPSG','11133','EPSG','2193','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11201','Illinois CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11157','conversion','EPSG','11201','EPSG','2194','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11202','Illinois CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11158','conversion','EPSG','11202','EPSG','2195','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11231','SPCS83 Illinois East zone (meter)','See code 15387 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11159','conversion','EPSG','11231','EPSG','2194','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11232','SPCS83 Illinois West zone (meter)','See code 15388 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11160','conversion','EPSG','11232','EPSG','2195','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11233','Illinois Coordinate System of 1983 Aurora zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°30''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00003,'EPSG','9201','EPSG','8806','False easting',3773000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19048','conversion','EPSG','11233','EPSG','4703','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11234','Illinois Coordinate System of 1983 Chicago zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 272°12''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',4757000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19049','conversion','EPSG','11234','EPSG','4704','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11235','Illinois Coordinate System of 1983 Moline zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°24''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',41.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',5741000.0,'EPSG','9003','EPSG','8807','False northing',755000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19050','conversion','EPSG','11235','EPSG','4705','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11236','Illinois Coordinate System of 1983 Sterling zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°57''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',41.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',6726000.0,'EPSG','9003','EPSG','8807','False northing',755000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19051','conversion','EPSG','11236','EPSG','4706','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11237','Illinois Coordinate System of 1983 Ottawa zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°57''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',41.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.03,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',7743000.0,'EPSG','9003','EPSG','8807','False northing',755000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19052','conversion','EPSG','11237','EPSG','4707','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11238','Illinois Coordinate System of 1983 Joliet zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 272°00''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000022,'EPSG','9201','EPSG','8806','False easting',8694000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19053','conversion','EPSG','11238','EPSG','4708','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11239','Illinois Coordinate System of 1983 Monmouth zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°09''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',9678000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19054','conversion','EPSG','11239','EPSG','4709','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11240','Illinois Coordinate System of 1983 Galesburg zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°54''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.06,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',230000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19187','conversion','EPSG','11240','EPSG','4710','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11241','Illinois Coordinate System of 1983 Peoria zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°21''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.24,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',1378000.0,'EPSG','9003','EPSG','8807','False northing',622000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19056','conversion','EPSG','11241','EPSG','4711','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11242','Illinois Coordinate System of 1983 Eureka zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°42''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.18,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',2756000.0,'EPSG','9003','EPSG','8807','False northing',427000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19057','conversion','EPSG','11242','EPSG','4712','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11243','Illinois Coordinate System of 1983 Bloomington zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°09''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.51,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',3773000.0,'EPSG','9003','EPSG','8807','False northing',1739000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19058','conversion','EPSG','11243','EPSG','4713','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11244','Illinois Coordinate System of 1983 Pontiac zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°27''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',4757000.0,'EPSG','9003','EPSG','8807','False northing',1739000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19059','conversion','EPSG','11244','EPSG','4714','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11245','Illinois Coordinate System of 1983 Watseka zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 272°03''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',5741000.0,'EPSG','9003','EPSG','8807','False northing',1739000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19188','conversion','EPSG','11245','EPSG','4715','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11246','Illinois Coordinate System of 1983 Quincy zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 268°45''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-91.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',6726000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19061','conversion','EPSG','11246','EPSG','4716','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11247','Illinois Coordinate System of 1983 Macomb zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°24''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',7710000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19062','conversion','EPSG','11247','EPSG','4717','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11248','Illinois Coordinate System of 1983 Lincoln zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°12''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000018,'EPSG','9201','EPSG','8806','False easting',8760000.0,'EPSG','9003','EPSG','8807','False northing',1739000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19063','conversion','EPSG','11248','EPSG','4718','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11249','Illinois Coordinate System of 1983 Decatur zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°12''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',9678000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19064','conversion','EPSG','11249','EPSG','4719','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11250','Illinois Coordinate System of 1983 Champaign zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 272°00''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000026,'EPSG','9201','EPSG','8806','False easting',328000.0,'EPSG','9003','EPSG','8807','False northing',2822000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19065','conversion','EPSG','11250','EPSG','4720','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11251','Illinois Coordinate System of 1983 Jacksonville zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°24''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.36,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',1247000.0,'EPSG','9003','EPSG','8807','False northing',2822000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19066','conversion','EPSG','11251','EPSG','4721','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11252','Illinois Coordinate System of 1983 Springfield zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°21''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.39,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000022,'EPSG','9201','EPSG','8806','False easting',2329000.0,'EPSG','9003','EPSG','8807','False northing',2887000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19067','conversion','EPSG','11252','EPSG','4722','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11253','Illinois Coordinate System of 1983 Charleston zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 272°00''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',3773000.0,'EPSG','9003','EPSG','8807','False northing',2756000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19068','conversion','EPSG','11253','EPSG','4723','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11254','Illinois Coordinate System of 1983 Jerseyville zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°30''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.51,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000019,'EPSG','9201','EPSG','8806','False easting',4757000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19069','conversion','EPSG','11254','EPSG','4724','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11255','Illinois Coordinate System of 1983 Carlinville zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 269°51''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',5741000.0,'EPSG','9003','EPSG','8807','False northing',2756000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19070','conversion','EPSG','11255','EPSG','4725','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11256','Illinois Coordinate System of 1983 Taylorville zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°36''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.09,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.24,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',6726000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19071','conversion','EPSG','11256','EPSG','4726','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11257','Illinois Coordinate System of 1983 Effingham zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°00''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',38.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000019,'EPSG','9201','EPSG','8806','False easting',7710000.0,'EPSG','9003','EPSG','8807','False northing',2756000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19072','conversion','EPSG','11257','EPSG','4727','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11258','Illinois Coordinate System of 1983 Robinson zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 272°00''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000017,'EPSG','9201','EPSG','8806','False easting',8694000.0,'EPSG','9003','EPSG','8807','False northing',2756000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19073','conversion','EPSG','11258','EPSG','4728','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11259','Illinois Coordinate System of 1983 Belleville zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°00''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000016,'EPSG','9201','EPSG','8806','False easting',9678000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19074','conversion','EPSG','11259','EPSG','4729','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11260','Illinois Coordinate System of 1983 Mount Vernon zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°51''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',38.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',328000.0,'EPSG','9003','EPSG','8807','False northing',3773000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19075','conversion','EPSG','11260','EPSG','4730','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11261','Illinois Coordinate System of 1983 Olney zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°51''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',38.33,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.09,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000013,'EPSG','9201','EPSG','8806','False easting',1247000.0,'EPSG','9003','EPSG','8807','False northing',3773000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19076','conversion','EPSG','11261','EPSG','4731','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11262','Illinois Coordinate System of 1983 Carbondale zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°03''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000012,'EPSG','9201','EPSG','8806','False easting',2395000.0,'EPSG','9003','EPSG','8807','False northing',3773000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19077','conversion','EPSG','11262','EPSG','4732','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11263','Illinois Coordinate System of 1983 Metropolis zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 271°06''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00001,'EPSG','9201','EPSG','8806','False easting',3642000.0,'EPSG','9003','EPSG','8807','False northing',3839000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19078','conversion','EPSG','11263','EPSG','4733','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11264','Illinois Coordinate System of 1983 Freeport zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°03''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.12,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000029,'EPSG','9201','EPSG','8806','False easting',1804000.0,'EPSG','9003','EPSG','8807','False northing',755000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19046','conversion','EPSG','11264','EPSG','4701','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11265','Illinois Coordinate System of 1983 Rockford zone (US survey foot)','Part of the ICS83 33-zone system. Longitude of origin also given by information source as 270°45''E. State law defines grid unit as US survey foot. No equivalent metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-89.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000029,'EPSG','9201','EPSG','8806','False easting',2822000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19047','conversion','EPSG','11265','EPSG','4702','EPSG','1266'); INSERT INTO "conversion" VALUES('EPSG','11301','Indiana CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11161','conversion','EPSG','11301','EPSG','2196','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11302','Indiana CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11162','conversion','EPSG','11302','EPSG','2197','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11331','SPCS83 Indiana East zone (meter)','See code 15372 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11163','conversion','EPSG','11331','EPSG','2196','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11332','SPCS83 Indiana West zone (meter)','See code 15373 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11164','conversion','EPSG','11332','EPSG','2197','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11401','Iowa CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.16,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.04,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11165','conversion','EPSG','11401','EPSG','2198','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11402','Iowa CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.37,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11166','conversion','EPSG','11402','EPSG','2199','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11431','SPCS83 Iowa North zone (meter)','See code 15377 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.16,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.04,'EPSG','9110','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11167','conversion','EPSG','11431','EPSG','2198','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11432','SPCS83 Iowa South zone (meter)','See code 15378 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.37,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11168','conversion','EPSG','11432','EPSG','2199','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11501','Kansas CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.43,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11169','conversion','EPSG','11501','EPSG','2200','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11502','Kansas CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.34,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.16,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11170','conversion','EPSG','11502','EPSG','2201','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11531','SPCS83 Kansas North zone (meter)','See code 15379 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.43,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11171','conversion','EPSG','11531','EPSG','2200','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11532','SPCS83 Kansas South zone (meter)','See code 15380 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.34,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.16,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11172','conversion','EPSG','11532','EPSG','2201','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11601','Kentucky CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.58,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11173','conversion','EPSG','11601','EPSG','2202','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11602','Kentucky CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-85.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.44,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.56,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11174','conversion','EPSG','11602','EPSG','2203','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11630','SPCS83 Kentucky Single Zone (meter)','See code 15375 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-85.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.05,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.4,'EPSG','9110','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11175','conversion','EPSG','11630','EPSG','1386','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','11631','Kentucky CS83 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.58,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11176','conversion','EPSG','11631','EPSG','2202','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11632','SPCS83 Kentucky South zone (meter)','See code 15329 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-85.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.56,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.44,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11177','conversion','EPSG','11632','EPSG','2203','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11701','Louisiana CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',31.1,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.4,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11178','conversion','EPSG','11701','EPSG','2204','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11702','Louisiana CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-91.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',29.18,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',30.42,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11179','conversion','EPSG','11702','EPSG','2205','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11703','Louisiana CS27 Offshore zone','This projection is NOT used for oil industry purposes - use Louisiana CS27 Offshore zone (proj 11702) on shelf and BLM (proj 15915-16) in deep water protraction areas.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-91.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',26.1,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11180','conversion','EPSG','11703','EPSG','1387','EPSG','1212'); INSERT INTO "conversion" VALUES('EPSG','11731','SPCS83 Louisiana North zone (meter)','See code 15391 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',32.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',31.1,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11181','conversion','EPSG','11731','EPSG','2204','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11732','SPCS83 Louisiana South zone (meter)','See code 15392 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-91.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.42,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',29.18,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11182','conversion','EPSG','11732','EPSG','2529','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11733','SPCS83 Louisiana Offshore zone (meter)','This projection is NOT used for oil industry purposes. See code 15393 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-91.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',26.1,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11183','conversion','EPSG','11733','EPSG','1387','EPSG','1212'); INSERT INTO "conversion" VALUES('EPSG','11801','Maine CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-68.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11184','conversion','EPSG','11801','EPSG','2206','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11802','Maine CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11185','conversion','EPSG','11802','EPSG','2207','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11831','SPCS83 Maine East zone (meter)','See code 11833 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-68.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11186','conversion','EPSG','11831','EPSG','2206','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11832','SPCS83 Maine West zone (meter)','See code 11834 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11187','conversion','EPSG','11832','EPSG','2207','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11833','SPCS83 Maine East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11831.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-68.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11188','conversion','EPSG','11833','EPSG','2206','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11834','SPCS83 Maine West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11832.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',2952750.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11189','conversion','EPSG','11834','EPSG','2207','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11851','Maine CS2000 East zone (meter)','In Maine Department of Transportation and other State agencies replaces CS27 and SPCS83 from 1/1/2001.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-67.523,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11190','conversion','EPSG','11851','EPSG','2960','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11852','Maine CS2000 Central zone','Supersedes CS27 and CS83 from 1/1/2001.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-69.073,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11191','conversion','EPSG','11852','EPSG','2959','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11853','Maine CS2000 West zone (meter)','In Maine Department of Transportation and other State agencies replaces CS27 and SPCS83 from 1/1/2001.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.223,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11192','conversion','EPSG','11853','EPSG','2958','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11854','Maine CS2000 Central zone (meter)','In Maine Department of Transportation and other State agencies replaces CS27 and SPCS83 from 1/1/2001.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-69.073,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11193','conversion','EPSG','11854','EPSG','2959','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11900','Maryland CS27','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.18,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.27,'EPSG','9110','EPSG','8826','Easting at false origin',800000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11194','conversion','EPSG','11900','EPSG','1389','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','11930','SPCS83 Maryland zone (meter)','See code 15330 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.27,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.18,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11195','conversion','EPSG','11930','EPSG','1389','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12001','Massachusetts CS27 Mainland zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-71.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.43,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.41,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11196','conversion','EPSG','12001','EPSG','2209','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12002','Massachusetts CS27 Island zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-70.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.17,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.29,'EPSG','9110','EPSG','8826','Easting at false origin',200000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11197','conversion','EPSG','12002','EPSG','2208','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12031','SPCS83 Massachusetts Mainland zone (meter)','See code 15331 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-71.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.41,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.43,'EPSG','9110','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',750000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11198','conversion','EPSG','12031','EPSG','2209','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12032','SPCS83 Massachusetts Island zone (meter)','See code 15332 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-70.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.17,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11199','conversion','EPSG','12032','EPSG','2208','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12101','Michigan State Plane East zone','Replaced by central and south zones.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-83.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999942857,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11200','conversion','EPSG','12101','EPSG','1720','EPSG','1215'); INSERT INTO "conversion" VALUES('EPSG','12102','Michigan State Plane Old Central zone','Replaced by central and south zones.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999909091,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11201','conversion','EPSG','12102','EPSG','1721','EPSG','1215'); INSERT INTO "conversion" VALUES('EPSG','12103','Michigan State Plane West zone','Replaced by North zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999909091,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11202','conversion','EPSG','12103','EPSG','3652','EPSG','1215'); INSERT INTO "conversion" VALUES('EPSG','12111','Michigan CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.47,'EPSG','9110','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.05,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11203','conversion','EPSG','12111','EPSG','1723','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12112','Michigan CS27 Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.19,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.11,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.42,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11204','conversion','EPSG','12112','EPSG','1724','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12113','Michigan CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.06,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',43.4,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11205','conversion','EPSG','12113','EPSG','1725','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12141','SPCS83 Michigan North zone (meter)','See code 15333 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.47,'EPSG','9110','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.05,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.29,'EPSG','9110','EPSG','8826','Easting at false origin',8000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11206','conversion','EPSG','12141','EPSG','1723','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12142','SPCS83 Michigan Central zone (meter)','See code 15334 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.19,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.22,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.42,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.11,'EPSG','9110','EPSG','8826','Easting at false origin',6000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11207','conversion','EPSG','12142','EPSG','1724','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12143','SPCS83 Michigan South zone (meter)','See code 15335 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.22,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.06,'EPSG','9110','EPSG','8826','Easting at false origin',4000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11208','conversion','EPSG','12143','EPSG','1725','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12150','Michigan Oblique Mercator (meter)','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=499840.252 m, Nc=528600.303 m.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.1833,'EPSG','9110','EPSG','8812','Longitude of projection centre',-86.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',337.25556,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',337.25556,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9996,'EPSG','9201','EPSG','8806','False easting',2546731.496,'EPSG','9001','EPSG','8807','False northing',-4354009.816,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','11209','conversion','EPSG','12150','EPSG','1391','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','12201','Minnesota CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.06,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',48.38,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11210','conversion','EPSG','12201','EPSG','2214','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12202','Minnesota CS27 Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-94.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.37,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.03,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11211','conversion','EPSG','12202','EPSG','2213','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12203','Minnesota CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.13,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11212','conversion','EPSG','12203','EPSG','2215','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12231','SPCS83 Minnesota North zone (meter)','See code 12234 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.06,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.38,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.02,'EPSG','9110','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11213','conversion','EPSG','12231','EPSG','2214','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12232','SPCS83 Minnesota Central zone (meter)','See code 12235 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-94.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.03,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.37,'EPSG','9110','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11214','conversion','EPSG','12232','EPSG','2213','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12233','SPCS83 Minnesota South zone (meter)','See code 12236 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.13,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',43.47,'EPSG','9110','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11215','conversion','EPSG','12233','EPSG','2215','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12234','SPCS83 Minnesota North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12231.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.06,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.38,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.02,'EPSG','9110','EPSG','8826','Easting at false origin',2624666.6667,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11216','conversion','EPSG','12234','EPSG','2214','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12235','SPCS83 Minnesota Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12232.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-94.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.03,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.37,'EPSG','9110','EPSG','8826','Easting at false origin',2624666.6667,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11217','conversion','EPSG','12235','EPSG','2213','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12236','SPCS83 Minnesota South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12233.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.13,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',43.47,'EPSG','9110','EPSG','8826','Easting at false origin',2624666.6667,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11218','conversion','EPSG','12236','EPSG','2215','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12301','Mississippi CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11219','conversion','EPSG','12301','EPSG','2216','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12302','Mississippi CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11220','conversion','EPSG','12302','EPSG','2217','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12331','SPCS83 Mississippi East zone (meter)','See code 15336 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11221','conversion','EPSG','12331','EPSG','2216','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12332','SPCS83 Mississippi West zone (meter)','See code 15337 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11222','conversion','EPSG','12332','EPSG','2217','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12401','Missouri CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11223','conversion','EPSG','12401','EPSG','2219','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12402','Missouri CS27 Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11224','conversion','EPSG','12402','EPSG','2218','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12403','Missouri CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-94.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11225','conversion','EPSG','12403','EPSG','2220','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12431','SPCS83 Missouri East zone (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11226','conversion','EPSG','12431','EPSG','2219','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12432','SPCS83 Missouri Central zone (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-92.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11227','conversion','EPSG','12432','EPSG','2218','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12433','SPCS83 Missouri West zone (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-94.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',850000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11228','conversion','EPSG','12433','EPSG','2220','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12501','Montana CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-109.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.43,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.51,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11229','conversion','EPSG','12501','EPSG','2211','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12502','Montana CS27 Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-109.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.27,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11230','conversion','EPSG','12502','EPSG','2210','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12503','Montana CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-109.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',46.24,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.52,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11231','conversion','EPSG','12503','EPSG','2212','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12530','SPCS83 Montana zone (meter)','See code 15338 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.15,'EPSG','9110','EPSG','8822','Longitude of false origin',-109.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.0,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11232','conversion','EPSG','12530','EPSG','1395','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12601','Nebraska CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.51,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.49,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11233','conversion','EPSG','12601','EPSG','2221','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12602','Nebraska CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-99.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.17,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.43,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11234','conversion','EPSG','12602','EPSG','2222','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12630','SPCS83 Nebraska zone (meter)','See code 15396 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.0,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11235','conversion','EPSG','12630','EPSG','1396','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12701','Nevada CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-115.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11236','conversion','EPSG','12701','EPSG','2224','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12702','Nevada CS27 Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-116.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11237','conversion','EPSG','12702','EPSG','2223','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12703','Nevada CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11238','conversion','EPSG','12703','EPSG','2225','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12731','SPCS83 Nevada East zone (meter)','See code 15381 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-115.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',8000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11239','conversion','EPSG','12731','EPSG','2224','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12732','SPCS83 Nevada Central zone (meter)','See code 15382 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-116.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11240','conversion','EPSG','12732','EPSG','2223','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12733','SPCS83 Nevada West zone (meter)','See code 15383 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11241','conversion','EPSG','12733','EPSG','2225','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12800','New Hampshire CS27','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11242','conversion','EPSG','12800','EPSG','1398','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12830','SPCS83 New Hampshire zone (meter)','See code 15389 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11243','conversion','EPSG','12830','EPSG','1398','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12900','New Jersey CS27','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11244','conversion','EPSG','12900','EPSG','1399','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','12930','SPCS83 New Jersey zone (meter)','See code 15384 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11245','conversion','EPSG','12930','EPSG','1399','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13001','New Mexico CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-104.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999909091,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11246','conversion','EPSG','13001','EPSG','2228','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13002','New Mexico CS27 Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-106.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11247','conversion','EPSG','13002','EPSG','2229','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13003','New Mexico CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999916667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11248','conversion','EPSG','13003','EPSG','2230','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13031','SPCS83 New Mexico East zone (meter)','See code 15339 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-104.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999909091,'EPSG','9201','EPSG','8806','False easting',165000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11249','conversion','EPSG','13031','EPSG','2228','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13032','SPCS83 New Mexico Central zone (meter)','See code 15340 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-106.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11250','conversion','EPSG','13032','EPSG','2231','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13033','SPCS83 New Mexico West zone (meter)','See code 15341 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999916667,'EPSG','9201','EPSG','8806','False easting',830000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11251','conversion','EPSG','13033','EPSG','2232','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13101','New York CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11252','conversion','EPSG','13101','EPSG','2234','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13102','New York CS27 Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11253','conversion','EPSG','13102','EPSG','2233','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13103','New York CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-78.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11254','conversion','EPSG','13103','EPSG','2236','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13104','New York CS27 Long Island zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.4,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11255','conversion','EPSG','13104','EPSG','2235','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13131','SPCS83 New York East zone (meter)','See code 15342 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11256','conversion','EPSG','13131','EPSG','2234','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13132','SPCS83 New York Central zone (meter)','See code 15343 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11257','conversion','EPSG','13132','EPSG','2233','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13133','SPCS83 New York West zone (meter)','See code 15344 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-78.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11258','conversion','EPSG','13133','EPSG','2236','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13134','SPCS83 New York Long Island zone (meter)','See code 15345 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.4,'EPSG','9110','EPSG','8826','Easting at false origin',300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11259','conversion','EPSG','13134','EPSG','2235','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13200','North Carolina CS27','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.45,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.1,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11260','conversion','EPSG','13200','EPSG','1402','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13230','SPCS83 North Carolina zone (meter)','See code 15346 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.45,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.1,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.2,'EPSG','9110','EPSG','8826','Easting at false origin',609601.22,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11261','conversion','EPSG','13230','EPSG','1402','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13301','North Dakota CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',48.44,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11262','conversion','EPSG','13301','EPSG','2237','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13302','North Dakota CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',46.11,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.29,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11263','conversion','EPSG','13302','EPSG','2238','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13331','SPCS83 North Dakota North zone (meter)','See code 15347 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.44,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.26,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11264','conversion','EPSG','13331','EPSG','2237','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13332','SPCS83 North Dakota South zone (meter)','See code 15348 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.11,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11265','conversion','EPSG','13332','EPSG','2238','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13401','Ohio CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-82.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.42,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11266','conversion','EPSG','13401','EPSG','2239','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13402','Ohio CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-82.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.44,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.02,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11267','conversion','EPSG','13402','EPSG','2240','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13431','SPCS83 Ohio North zone (meter)','See code 13433 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-82.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.42,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.26,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11268','conversion','EPSG','13431','EPSG','2239','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13432','SPCS83 Ohio South zone (meter)','See code 13434 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-82.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.44,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11269','conversion','EPSG','13432','EPSG','2240','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13433','SPCS83 Ohio North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13431.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-82.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.42,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.26,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11270','conversion','EPSG','13433','EPSG','2239','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13434','SPCS83 Ohio South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13432.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-82.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.44,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11271','conversion','EPSG','13434','EPSG','2240','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13501','Oklahoma CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.34,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.46,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11272','conversion','EPSG','13501','EPSG','2241','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13502','Oklahoma CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',33.56,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.14,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11273','conversion','EPSG','13502','EPSG','2242','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13531','SPCS83 Oklahoma North zone (meter)','See code 15349 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.34,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11274','conversion','EPSG','13531','EPSG','2241','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13532','SPCS83 Oklahoma South zone (meter)','See code 15350 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.14,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.56,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11275','conversion','EPSG','13532','EPSG','2242','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13601','Oregon CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11276','conversion','EPSG','13601','EPSG','2243','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13602','Oregon CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.0,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11277','conversion','EPSG','13602','EPSG','2244','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13631','SPCS83 Oregon North zone (meter)','See code 15351 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',46.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.2,'EPSG','9110','EPSG','8826','Easting at false origin',2500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11278','conversion','EPSG','13631','EPSG','2243','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13632','SPCS83 Oregon South zone (meter)','See code 15352 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.2,'EPSG','9110','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11279','conversion','EPSG','13632','EPSG','2244','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13633','Oregon Lambert (meter)','Initial metric definition of projection 15374. This projection is not used in metric form by state agencies. See proj code 15375 for equivalent non-metric definition recommended by Oregon Geographic Information Council (GIC).','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.45,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.3,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11280','conversion','EPSG','13633','EPSG','1406','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','13701','Pennsylvania CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.57,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11281','conversion','EPSG','13701','EPSG','2245','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13702','Pennsylvania CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.56,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.48,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11282','conversion','EPSG','13702','EPSG','2246','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13731','SPCS83 Pennsylvania North zone (meter)','See code 15353 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.57,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.53,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11283','conversion','EPSG','13731','EPSG','2245','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13732','SPCS83 Pennsylvania South zone (meter)','See code 15354 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.56,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11284','conversion','EPSG','13732','EPSG','2246','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13800','Rhode Island CS27','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999938,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11285','conversion','EPSG','13800','EPSG','1408','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13830','SPCS83 Rhode Island zone (meter)','See code 15390 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999375,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11286','conversion','EPSG','13830','EPSG','1408','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13901','South Carolina CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',33.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.58,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11287','conversion','EPSG','13901','EPSG','2247','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13902','South Carolina CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',32.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.4,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11288','conversion','EPSG','13902','EPSG','2248','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','13930','SPCS83 South Carolina zone (meter)','See code 15355 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.3,'EPSG','9110','EPSG','8826','Easting at false origin',609600.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11289','conversion','EPSG','13930','EPSG','1409','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14001','South Dakota CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.41,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11290','conversion','EPSG','14001','EPSG','2249','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14002','South Dakota CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.24,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11291','conversion','EPSG','14002','EPSG','2250','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14031','SPCS83 South Dakota North zone (meter)','See code 15394 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.41,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.25,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11292','conversion','EPSG','14031','EPSG','2249','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14032','SPCS83 South Dakota South zone (meter)','See code 15395 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.24,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.5,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11293','conversion','EPSG','14032','EPSG','2250','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14100','Tennessee CS27','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.25,'EPSG','9110','EPSG','8826','Easting at false origin',100000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11294','conversion','EPSG','14100','EPSG','1411','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14130','SPCS83 Tennessee zone (meter)','See code 15356 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.25,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.15,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11295','conversion','EPSG','14130','EPSG','1411','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14201','Texas CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-101.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.39,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.11,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11296','conversion','EPSG','14201','EPSG','2253','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14202','Texas CS27 North Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-97.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',32.08,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.58,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11297','conversion','EPSG','14202','EPSG','2254','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14203','Texas CS27 Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.07,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',31.53,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11298','conversion','EPSG','14203','EPSG','2252','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14204','Texas CS27 South Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',28.23,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',30.17,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11299','conversion','EPSG','14204','EPSG','2256','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14205','Texas CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',26.1,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',27.5,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11300','conversion','EPSG','14205','EPSG','2255','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14231','SPCS83 Texas North zone (meter)','See code 15357 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-101.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.11,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.39,'EPSG','9110','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11301','conversion','EPSG','14231','EPSG','2253','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14232','SPCS83 Texas North Central zone (meter)','See code 15358 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',33.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.08,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11302','conversion','EPSG','14232','EPSG','2254','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14233','SPCS83 Texas Central zone (meter)','See code 15359 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',31.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',30.07,'EPSG','9110','EPSG','8826','Easting at false origin',700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11303','conversion','EPSG','14233','EPSG','2252','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14234','SPCS83 Texas South Central zone (meter)','See code 15360 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.17,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',28.23,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11304','conversion','EPSG','14234','EPSG','2527','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14235','SPCS83 Texas South zone (meter)','See code 15361 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',26.1,'EPSG','9110','EPSG','8826','Easting at false origin',300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11305','conversion','EPSG','14235','EPSG','2528','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14251','Texas State Mapping System (meter)','Replaces Shackleford.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.25,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.55,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11306','conversion','EPSG','14251','EPSG','1412','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','14252','Shackleford','Replaced by TSMS. Care: survey data in Texas uses the US survey foot, not the International foot used by this projection.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.25,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.55,'EPSG','9110','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9002','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11307','conversion','EPSG','14252','EPSG','1412','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','14253','Texas Centric Lambert Conformal','Use TCMC/AEA for applications requiring true area measurement.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',18.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.0,'EPSG','9110','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11308','conversion','EPSG','14253','EPSG','1412','EPSG','1221'); INSERT INTO "conversion" VALUES('EPSG','14254','Texas Centric Albers Equal Area','Use TCMC/LC for applications requiring true shape preservation.','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',18.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.0,'EPSG','9110','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11309','conversion','EPSG','14254','EPSG','1412','EPSG','1222'); INSERT INTO "conversion" VALUES('EPSG','14301','Utah CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.43,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.47,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11310','conversion','EPSG','14301','EPSG','2258','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14302','Utah CS27 Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.01,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.39,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11311','conversion','EPSG','14302','EPSG','2257','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14303','Utah CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.13,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.21,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11312','conversion','EPSG','14303','EPSG','2259','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14331','SPCS83 Utah North zone (meter)','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.43,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11313','conversion','EPSG','14331','EPSG','2258','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14332','SPCS83 Utah Central zone (meter)','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.39,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.01,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11314','conversion','EPSG','14332','EPSG','2257','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14333','SPCS83 Utah South zone (meter)','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.21,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.13,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11315','conversion','EPSG','14333','EPSG','2259','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14400','Vermont CS27','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-72.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999964286,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11316','conversion','EPSG','14400','EPSG','1414','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14430','SPCS83 Vermont zone (meter)','See code 5645 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-72.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999964286,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11317','conversion','EPSG','14430','EPSG','1414','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14501','Virginia CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-78.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.12,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11318','conversion','EPSG','14501','EPSG','2260','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14502','Virginia CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-78.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.58,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11319','conversion','EPSG','14502','EPSG','2261','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14531','SPCS83 Virginia North zone (meter)','See code 15365 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-78.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.12,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.02,'EPSG','9110','EPSG','8826','Easting at false origin',3500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11320','conversion','EPSG','14531','EPSG','2260','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14532','SPCS83 Virginia South zone (meter)','See code 15366 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-78.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.46,'EPSG','9110','EPSG','8826','Easting at false origin',3500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11321','conversion','EPSG','14532','EPSG','2261','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14601','Washington CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',48.44,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11322','conversion','EPSG','14601','EPSG','2262','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14602','Washington CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.2,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11323','conversion','EPSG','14602','EPSG','2263','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14631','SPCS83 Washington North zone (meter)','See code 15367 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.44,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.3,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11324','conversion','EPSG','14631','EPSG','2273','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14632','SPCS83 Washington South zone (meter)','See code 15368 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11325','conversion','EPSG','14632','EPSG','2274','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14701','West Virginia CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.15,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11326','conversion','EPSG','14701','EPSG','2264','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14702','West Virginia CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.53,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11327','conversion','EPSG','14702','EPSG','2265','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14731','SPCS83 West Virginia North zone (meter)','See projection code 14735 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.0,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11328','conversion','EPSG','14731','EPSG','2264','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14732','SPCS83 West Virginia South zone (meter)','See projection code 14736 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.29,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11329','conversion','EPSG','14732','EPSG','2265','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14733','SPCS83 West Virginia North zone (US Survey feet)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14731.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.0,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11330','conversion','EPSG','14733','EPSG','2264','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14734','SPCS83 West Virginia South zone (US Survey feet)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14732.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.29,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11331','conversion','EPSG','14734','EPSG','2265','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14735','SPCS83 West Virginia North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14731.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.0,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11332','conversion','EPSG','14735','EPSG','2264','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14736','SPCS83 West Virginia South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14732.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.29,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11333','conversion','EPSG','14736','EPSG','2265','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14801','Wisconsin CS27 North zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.34,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.46,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11334','conversion','EPSG','14801','EPSG','2267','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14802','Wisconsin CS27 Central zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.3,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11335','conversion','EPSG','14802','EPSG','2266','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14803','Wisconsin CS27 South zone','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.44,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.04,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11336','conversion','EPSG','14803','EPSG','2268','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14811','Wisconsin Transverse Mercator 27','Designed to cover the state in a single zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11337','conversion','EPSG','14811','EPSG','1418','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','14831','SPCS83 Wisconsin North zone (meter)','See code 15369 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',46.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.34,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11338','conversion','EPSG','14831','EPSG','2267','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14832','SPCS83 Wisconsin Central zone (meter)','See code 15370 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.15,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11339','conversion','EPSG','14832','EPSG','2266','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14833','SPCS83 Wisconsin South zone (meter)','See code 15371 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.04,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.44,'EPSG','9110','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11340','conversion','EPSG','14833','EPSG','2268','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14841','Wisconsin Transverse Mercator 83','Designed to cover the state in a single zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',520000.0,'EPSG','9001','EPSG','8807','False northing',-4480000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11341','conversion','EPSG','14841','EPSG','1418','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','14901','Wyoming CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-105.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11342','conversion','EPSG','14901','EPSG','2269','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14902','Wyoming CS27 East Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11343','conversion','EPSG','14902','EPSG','2270','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14903','Wyoming CS27 West Central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11344','conversion','EPSG','14903','EPSG','2272','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14904','Wyoming CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-110.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11345','conversion','EPSG','14904','EPSG','2271','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14930','Wyoming Lambert','Source originally defining the projection is unclear - possibly the Wyoming GIS Center.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-107.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.0,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17408','conversion','EPSG','14930','EPSG','1419','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','14931','SPCS83 Wyoming East zone (meter)','See code 14935 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-105.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11346','conversion','EPSG','14931','EPSG','2269','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14932','SPCS83 Wyoming East Central zone (meter)','See code 14936 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11347','conversion','EPSG','14932','EPSG','2270','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14933','SPCS83 Wyoming West Central zone (meter)','See code 14937 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11348','conversion','EPSG','14933','EPSG','2272','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14934','SPCS83 Wyoming West zone (meter)','See code 14938 for equivalent non-metric definition.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-110.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11349','conversion','EPSG','14934','EPSG','2271','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14935','SPCS83 Wyoming East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14931.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-105.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',656166.6667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11350','conversion','EPSG','14935','EPSG','2269','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14936','SPCS83 Wyoming East Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14932.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1312333.3333,'EPSG','9003','EPSG','8807','False northing',328083.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11351','conversion','EPSG','14936','EPSG','2270','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14937','SPCS83 Wyoming West Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14933.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-108.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1968500.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11352','conversion','EPSG','14937','EPSG','2272','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','14938','SPCS83 Wyoming West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14934.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-110.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',2624666.6667,'EPSG','9003','EPSG','8807','False northing',328083.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11353','conversion','EPSG','14938','EPSG','2271','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15001','Alaska CS27 zone 1','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=2685642.82 ftUS, Nc=1887198.47 ftUS.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',57.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',-133.4,'EPSG','9110','EPSG','8813','Azimuth at projection centre',323.07483685,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',323.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.9999,'EPSG','9201','EPSG','8806','False easting',16404166.67,'EPSG','9003','EPSG','8807','False northing',-16404166.67,'EPSG','9003',0); INSERT INTO "usage" VALUES('EPSG','11354','conversion','EPSG','15001','EPSG','2156','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15002','Alaska CS27 zone 2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-142.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11355','conversion','EPSG','15002','EPSG','2158','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15003','Alaska CS27 zone 3','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-146.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11356','conversion','EPSG','15003','EPSG','2159','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15004','Alaska CS27 zone 4','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11357','conversion','EPSG','15004','EPSG','2160','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15005','Alaska CS27 zone 5','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-154.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11358','conversion','EPSG','15005','EPSG','2161','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15006','Alaska CS27 zone 6','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11359','conversion','EPSG','15006','EPSG','2162','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15007','Alaska CS27 zone 7','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-162.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11360','conversion','EPSG','15007','EPSG','2163','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15008','Alaska CS27 zone 8','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-166.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11361','conversion','EPSG','15008','EPSG','2164','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15009','Alaska CS27 zone 9','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-170.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11362','conversion','EPSG','15009','EPSG','2165','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15010','Alaska CS27 zone 10','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',51.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-176.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',53.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.5,'EPSG','9110','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11363','conversion','EPSG','15010','EPSG','2157','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15020','Alaska Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',50.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-154.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',55.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11364','conversion','EPSG','15020','EPSG','1330','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','15021','Alaska Albers (meter)','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',50.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-154.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',55.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11365','conversion','EPSG','15021','EPSG','1330','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','15031','SPCS83 Alaska zone 1 (meter)','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=818585.57 m, Nc=575219.25 m.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',57.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',-133.4,'EPSG','9110','EPSG','8813','Azimuth at projection centre',323.07483685,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',323.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.9999,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','11366','conversion','EPSG','15031','EPSG','2156','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15032','SPCS83 Alaska zone 2 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-142.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11367','conversion','EPSG','15032','EPSG','2158','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15033','SPCS83 Alaska zone 3 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-146.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11368','conversion','EPSG','15033','EPSG','2159','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15034','SPCS83 Alaska zone 4 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11369','conversion','EPSG','15034','EPSG','2160','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15035','SPCS83 Alaska zone 5 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-154.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11370','conversion','EPSG','15035','EPSG','2161','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15036','SPCS83 Alaska zone 6 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11371','conversion','EPSG','15036','EPSG','2162','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15037','SPCS83 Alaska zone 7 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-162.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11372','conversion','EPSG','15037','EPSG','2163','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15038','SPCS83 Alaska zone 8 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-166.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11373','conversion','EPSG','15038','EPSG','2164','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15039','SPCS83 Alaska zone 9 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-170.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11374','conversion','EPSG','15039','EPSG','2165','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15040','SPCS83 Alaska zone 10 (meter)','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',51.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-176.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',53.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.5,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11375','conversion','EPSG','15040','EPSG','2157','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15101','Hawaii CS27 zone 1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',18.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-155.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11376','conversion','EPSG','15101','EPSG','1546','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15102','Hawaii CS27 zone 2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',20.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-156.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11377','conversion','EPSG','15102','EPSG','1547','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15103','Hawaii CS27 zone 3','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11378','conversion','EPSG','15103','EPSG','1548','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15104','Hawaii CS27 zone 4','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-159.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11379','conversion','EPSG','15104','EPSG','1549','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15105','Hawaii CS27 zone 5','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-160.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11380','conversion','EPSG','15105','EPSG','1550','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15131','SPCS83 Hawaii zone 1 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',18.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-155.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11381','conversion','EPSG','15131','EPSG','1546','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15132','SPCS83 Hawaii zone 2 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',20.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-156.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11382','conversion','EPSG','15132','EPSG','1547','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15133','SPCS83 Hawaii zone 3 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11383','conversion','EPSG','15133','EPSG','1548','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15134','SPCS83 Hawaii zone 4 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-159.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11384','conversion','EPSG','15134','EPSG','1549','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15135','SPCS83 Hawaii zone 5 (meter)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-160.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11385','conversion','EPSG','15135','EPSG','1550','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15138','SPCS83 Hawaii zone 3 (US survey foot)','Used by City and County of Honolulu. Not recognised by Federal authorities because there is no State law defining grid unit. For equivalent metric Federal definition see code 15133.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',1640416.6667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11386','conversion','EPSG','15138','EPSG','1548','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15201','Puerto Rico CS27','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',17.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-66.26,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',18.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',18.02,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11387','conversion','EPSG','15201','EPSG','3294','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15202','St. Croix CS27','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',17.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-66.26,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',18.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',18.02,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11388','conversion','EPSG','15202','EPSG','3330','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15230','SPCS83 Puerto Rico & Virgin Islands zone (meter)','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',17.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-66.26,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',18.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',18.02,'EPSG','9110','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11389','conversion','EPSG','15230','EPSG','3634','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15297','SPCS83 Utah North zone (US survey foot)','State law defining grid unit as International feet (note: not US Survey feet) has been withdrawn. For equivalent metric Federal definition see code 14331. For equivalent International foot definition see code 15362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.43,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.6667,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11390','conversion','EPSG','15297','EPSG','2258','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15298','SPCS83 Utah Central zone (US survey foot)','State law defining grid unit as International feet (note: not US Survey feet) has been withdrawn. For equivalent metric Federal definition see code 14332. For equivalent International foot definition see code 15363.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.39,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.01,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.6667,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.6667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11391','conversion','EPSG','15298','EPSG','2257','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15299','SPCS83 Utah South zone (US survey foot)','State law defining grid unit as International feet (note: not US Survey feet) has been withdrawn. For equivalent metric Federal definition see code 14333. For equivalent International foot definition see code 15364.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.21,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.13,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.6667,'EPSG','9003','EPSG','8827','Northing at false origin',9842500.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11392','conversion','EPSG','15299','EPSG','2259','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15300','American Samoa Lambert','Per Snyder: Map Projections - a Working Manual: At origin x=500000 ft; y=o but radius to latitude of origin = -82000000 feet. US National Geodetic Survey confirms use of zero for False Northing.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',-14.16,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11393','conversion','EPSG','15300','EPSG','1027','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15301','American Samoa Lambert','Per Snyder: Map Projections - a Working Manual: At origin x=500000 ft; y=0 but radius to latitude of origin = -82000000 feet. Thus False Northing = 312234.65 ftUS. NGS confirms value of FN, which is encoded within their algorithms but not published.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',-14.16,'EPSG','9110','EPSG','8802','Longitude of natural origin',-170.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11394','conversion','EPSG','15301','EPSG','1027','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15302','Tennessee CS27','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.25,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11395','conversion','EPSG','15302','EPSG','1411','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15303','SPCS83 Kentucky North zone (meter)','See code 15328 for equivalent non-metric definition.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.58,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11396','conversion','EPSG','15303','EPSG','2202','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15304','SPCS83 Arizona East zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 10231.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-110.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11397','conversion','EPSG','15304','EPSG','2167','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15305','SPCS83 Arizona Central zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 10232.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-111.55,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11398','conversion','EPSG','15305','EPSG','2166','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15306','SPCS83 Arizona West zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 10233.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-113.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11399','conversion','EPSG','15306','EPSG','2168','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15307','SPCS83 California zone 1 (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10431.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.0,'EPSG','9110','EPSG','8826','Easting at false origin',6561666.667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11400','conversion','EPSG','15307','EPSG','2175','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15308','SPCS83 California zone 2 (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10432.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.2,'EPSG','9110','EPSG','8826','Easting at false origin',6561666.667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11401','conversion','EPSG','15308','EPSG','2176','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15309','SPCS83 California zone 3 (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10433.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.04,'EPSG','9110','EPSG','8826','Easting at false origin',6561666.667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11402','conversion','EPSG','15309','EPSG','2177','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15310','SPCS83 California zone 4 (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10434.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-119.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.0,'EPSG','9110','EPSG','8826','Easting at false origin',6561666.667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11403','conversion','EPSG','15310','EPSG','2178','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15311','SPCS83 California zone 5 (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10435.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.28,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.02,'EPSG','9110','EPSG','8826','Easting at false origin',6561666.667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11404','conversion','EPSG','15311','EPSG','2182','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15312','SPCS83 California zone 6 (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10436.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-116.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',33.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.47,'EPSG','9110','EPSG','8826','Easting at false origin',6561666.667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11405','conversion','EPSG','15312','EPSG','2180','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15313','SPCS83 Colorado North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10531.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.43,'EPSG','9110','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11406','conversion','EPSG','15313','EPSG','2184','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15314','SPCS83 Colorado Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10532.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.45,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.27,'EPSG','9110','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11407','conversion','EPSG','15314','EPSG','2183','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15315','SPCS83 Colorado South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10533.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-105.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.26,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.14,'EPSG','9110','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11408','conversion','EPSG','15315','EPSG','2185','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15316','SPCS83 Connecticut zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10630.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-72.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.52,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.12,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',500000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11409','conversion','EPSG','15316','EPSG','1377','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15317','SPCS83 Delaware zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10730.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-75.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11410','conversion','EPSG','15317','EPSG','1378','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15318','SPCS83 Florida East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10931.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11411','conversion','EPSG','15318','EPSG','2186','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15319','SPCS83 Florida West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10932.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11412','conversion','EPSG','15319','EPSG','2188','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15320','SPCS83 Florida North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10933.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.45,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',29.35,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11413','conversion','EPSG','15320','EPSG','2187','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15321','SPCS83 Georgia East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11031.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11414','conversion','EPSG','15321','EPSG','2189','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15322','SPCS83 Georgia West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11032.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-84.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',2296583.333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11415','conversion','EPSG','15322','EPSG','2190','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15323','SPCS83 Idaho East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11131.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-112.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999947368,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11416','conversion','EPSG','15323','EPSG','2192','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15324','SPCS83 Idaho Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11132.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999947368,'EPSG','9201','EPSG','8806','False easting',1640416.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11417','conversion','EPSG','15324','EPSG','2191','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15325','SPCS83 Idaho West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11133.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-115.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',2624666.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11418','conversion','EPSG','15325','EPSG','2193','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15326','SPCS83 Indiana East zone (US Survey feet)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11331.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',328083.333,'EPSG','9003','EPSG','8807','False northing',818125.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11419','conversion','EPSG','15326','EPSG','2196','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15327','SPCS83 Indiana West zone (US Survey feet)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11332.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',2952750.0,'EPSG','9003','EPSG','8807','False northing',818125.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11420','conversion','EPSG','15327','EPSG','2197','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15328','SPCS83 Kentucky North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 15303.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.15,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.58,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11421','conversion','EPSG','15328','EPSG','2202','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15329','SPCS83 Kentucky South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11632.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-85.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.56,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.44,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11422','conversion','EPSG','15329','EPSG','2203','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15330','SPCS83 Maryland zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11930.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.27,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.18,'EPSG','9110','EPSG','8826','Easting at false origin',1312333.333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11423','conversion','EPSG','15330','EPSG','1389','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15331','SPCS83 Massachusetts Mainland zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12031.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-71.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',42.41,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.43,'EPSG','9110','EPSG','8826','Easting at false origin',656166.667,'EPSG','9003','EPSG','8827','Northing at false origin',2460625.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11424','conversion','EPSG','15331','EPSG','2209','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15332','SPCS83 Massachusetts Island zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12032.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-70.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',41.17,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11425','conversion','EPSG','15332','EPSG','2208','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15333','SPCS83 Michigan North zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 12141.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.47,'EPSG','9110','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.05,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.29,'EPSG','9110','EPSG','8826','Easting at false origin',26246719.16,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11426','conversion','EPSG','15333','EPSG','1723','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15334','SPCS83 Michigan Central zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 12142.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.19,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.22,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.42,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.11,'EPSG','9110','EPSG','8826','Easting at false origin',19685039.37,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11427','conversion','EPSG','15334','EPSG','1724','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15335','SPCS83 Michigan South zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 12143.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-84.22,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.06,'EPSG','9110','EPSG','8826','Easting at false origin',13123359.58,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11428','conversion','EPSG','15335','EPSG','1725','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15336','SPCS83 Mississippi East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12331.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11429','conversion','EPSG','15336','EPSG','2216','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15337','SPCS83 Mississippi West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12332.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',2296583.333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11430','conversion','EPSG','15337','EPSG','2217','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15338','SPCS83 Montana zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 12530.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.15,'EPSG','9110','EPSG','8822','Longitude of false origin',-109.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.0,'EPSG','9110','EPSG','8826','Easting at false origin',1968503.937,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11431','conversion','EPSG','15338','EPSG','1395','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15339','SPCS83 New Mexico East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13031.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-104.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999909091,'EPSG','9201','EPSG','8806','False easting',541337.5,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11432','conversion','EPSG','15339','EPSG','2228','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15340','SPCS83 New Mexico Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13032.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-106.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11433','conversion','EPSG','15340','EPSG','2231','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15341','SPCS83 New Mexico West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13033.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-107.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999916667,'EPSG','9201','EPSG','8806','False easting',2723091.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11434','conversion','EPSG','15341','EPSG','2232','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15342','SPCS83 New York East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13131.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',492125.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11435','conversion','EPSG','15342','EPSG','2234','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15343','SPCS83 New York Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13132.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',820208.333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11436','conversion','EPSG','15343','EPSG','2233','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15344','SPCS83 New York West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13133.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-78.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1148291.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11437','conversion','EPSG','15344','EPSG','2236','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15345','SPCS83 New York Long Island zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13134.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.02,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.4,'EPSG','9110','EPSG','8826','Easting at false origin',984250.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11438','conversion','EPSG','15345','EPSG','2235','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15346','SPCS83 North Carolina zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13230.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.45,'EPSG','9110','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.1,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.2,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11439','conversion','EPSG','15346','EPSG','1402','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15347','SPCS83 North Dakota North zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 13331.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.44,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.26,'EPSG','9110','EPSG','8826','Easting at false origin',1968503.937,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11440','conversion','EPSG','15347','EPSG','2237','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15348','SPCS83 North Dakota South zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 13332.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.29,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.11,'EPSG','9110','EPSG','8826','Easting at false origin',1968503.937,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11441','conversion','EPSG','15348','EPSG','2238','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15349','SPCS83 Oklahoma North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13531.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.34,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11442','conversion','EPSG','15349','EPSG','2241','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15350','SPCS83 Oklahoma South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13532.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',35.14,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.56,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11443','conversion','EPSG','15350','EPSG','2242','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15351','SPCS83 Oregon North zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 13631.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',46.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.2,'EPSG','9110','EPSG','8826','Easting at false origin',8202099.738,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11444','conversion','EPSG','15351','EPSG','2243','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15352','SPCS83 Oregon South zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 13632.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.2,'EPSG','9110','EPSG','8826','Easting at false origin',4921259.843,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11445','conversion','EPSG','15352','EPSG','2244','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15353','SPCS83 Pennsylvania North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13731.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.57,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.53,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11446','conversion','EPSG','15353','EPSG','2245','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15354','SPCS83 Pennsylvania South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13732.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-77.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.56,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11447','conversion','EPSG','15354','EPSG','2246','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15355','SPCS83 South Carolina zone (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For equivalent metric Federal definition see code 13930.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.3,'EPSG','9110','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11448','conversion','EPSG','15355','EPSG','1409','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15356','SPCS83 Tennessee zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14130.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.25,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',35.15,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11449','conversion','EPSG','15356','EPSG','1411','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15357','SPCS83 Texas North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14231.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-101.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.11,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.39,'EPSG','9110','EPSG','8826','Easting at false origin',656166.667,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11450','conversion','EPSG','15357','EPSG','2253','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15358','SPCS83 Texas North Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14232.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',33.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',32.08,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11451','conversion','EPSG','15358','EPSG','2254','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15359','SPCS83 Texas Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14233.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',31.53,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',30.07,'EPSG','9110','EPSG','8826','Easting at false origin',2296583.333,'EPSG','9003','EPSG','8827','Northing at false origin',9842500.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11452','conversion','EPSG','15359','EPSG','2252','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15360','SPCS83 Texas South Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14234.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.17,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',28.23,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',13123333.333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11453','conversion','EPSG','15360','EPSG','2527','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15361','SPCS83 Texas South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14235.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',26.1,'EPSG','9110','EPSG','8826','Easting at false origin',984250.0,'EPSG','9003','EPSG','8827','Northing at false origin',16404166.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11454','conversion','EPSG','15361','EPSG','2528','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15362','SPCS83 Utah North zone (international foot)','State law defining grid unit as International feet (note: not US Survey feet) has been withdrawn. For equivalent metric Federal definition see code 14331. For equivalent US Survey foot definition see code 15297.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.43,'EPSG','9110','EPSG','8826','Easting at false origin',1640419.948,'EPSG','9002','EPSG','8827','Northing at false origin',3280839.895,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11455','conversion','EPSG','15362','EPSG','2258','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15363','SPCS83 Utah Central zone (international foot)','State law defining grid unit as International feet (note: not US Survey feet) has been withdrawn. For equivalent metric Federal definition see code 14332. For equivalent US Survey foot definition see code 15298.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',40.39,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',39.01,'EPSG','9110','EPSG','8826','Easting at false origin',1640419.948,'EPSG','9002','EPSG','8827','Northing at false origin',6561679.79,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11456','conversion','EPSG','15363','EPSG','2257','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15364','SPCS83 Utah South zone (international foot)','State law defining grid unit as International feet (note: not US Survey feet) has been withdrawn. For equivalent metric Federal definition see code 14333. For equivalent US Survey foot definition see code 15299.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-111.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.21,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.13,'EPSG','9110','EPSG','8826','Easting at false origin',1640419.948,'EPSG','9002','EPSG','8827','Northing at false origin',9842519.685,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11457','conversion','EPSG','15364','EPSG','2259','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15365','SPCS83 Virginia North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14531.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-78.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.12,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.02,'EPSG','9110','EPSG','8826','Easting at false origin',11482916.667,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11458','conversion','EPSG','15365','EPSG','2260','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15366','SPCS83 Virginia South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14532.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-78.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.58,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',36.46,'EPSG','9110','EPSG','8826','Easting at false origin',11482916.667,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11459','conversion','EPSG','15366','EPSG','2261','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15367','SPCS83 Washington North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14631.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',48.44,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',47.3,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11460','conversion','EPSG','15367','EPSG','2273','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15368','SPCS83 Washington South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14632.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',47.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11461','conversion','EPSG','15368','EPSG','2274','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15369','SPCS83 Wisconsin North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14831.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.1,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',46.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.34,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11462','conversion','EPSG','15369','EPSG','2267','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15370','SPCS83 Wisconsin Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14832.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.15,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11463','conversion','EPSG','15370','EPSG','2266','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15371','SPCS83 Wisconsin South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14833.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.04,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.44,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11464','conversion','EPSG','15371','EPSG','2268','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15372','SPCS83 Indiana East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11331.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',328083.333,'EPSG','9003','EPSG','8807','False northing',820208.333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11465','conversion','EPSG','15372','EPSG','2196','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15373','SPCS83 Indiana West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11332.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',2952750.0,'EPSG','9003','EPSG','8807','False northing',820208.333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11466','conversion','EPSG','15373','EPSG','2197','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15374','Oregon GIC Lambert (international foot)','State law defines grid unit as International feet (note: not US Survey feet). For original metric definition (not used by Oregon state agencies) see proj code 13633.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.45,'EPSG','9110','EPSG','8822','Longitude of false origin',-120.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',45.3,'EPSG','9110','EPSG','8826','Easting at false origin',1312335.958,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11467','conversion','EPSG','15374','EPSG','1406','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','15375','SPCS83 Kentucky Single Zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11630.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-85.45,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',37.05,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.4,'EPSG','9110','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11468','conversion','EPSG','15375','EPSG','1386','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','15376','American Samoa Lambert','Per Snyder: Map Projections - a Working Manual: At origin x=500000 ft; y=0 but radius to latitude of origin = -82000000 feet. US National Geodetic Survey confirms value for False Northing.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',-14.16,'EPSG','9110','EPSG','8802','Longitude of natural origin',-170.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',312234.65,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11469','conversion','EPSG','15376','EPSG','3109','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15377','SPCS83 Iowa North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11431.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.16,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.04,'EPSG','9110','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11470','conversion','EPSG','15377','EPSG','2198','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15378','SPCS83 Iowa South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11432.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-93.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',41.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.37,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.6667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11471','conversion','EPSG','15378','EPSG','2199','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15379','SPCS83 Kansas North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11531.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',39.47,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',38.43,'EPSG','9110','EPSG','8826','Easting at false origin',1312333.3333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11472','conversion','EPSG','15379','EPSG','2200','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15380','SPCS83 Kansas South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11532.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-98.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',38.34,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',37.16,'EPSG','9110','EPSG','8826','Easting at false origin',1312333.3333,'EPSG','9003','EPSG','8827','Northing at false origin',1312333.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11473','conversion','EPSG','15380','EPSG','2201','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15381','SPCS83 Nevada East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12731.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-115.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',656166.6667,'EPSG','9003','EPSG','8807','False northing',26246666.6667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11474','conversion','EPSG','15381','EPSG','2224','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15382','SPCS83 Nevada Central zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12732.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-116.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.6667,'EPSG','9003','EPSG','8807','False northing',19685000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11475','conversion','EPSG','15382','EPSG','2223','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15383','SPCS83 Nevada West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12733.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-118.35,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',2624666.6667,'EPSG','9003','EPSG','8807','False northing',13123333.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11476','conversion','EPSG','15383','EPSG','2225','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15384','SPCS83 New Jersey zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12930.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',492125.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11477','conversion','EPSG','15384','EPSG','1399','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15385','SPCS83 Arkansas North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10331.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',36.14,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',34.56,'EPSG','9110','EPSG','8826','Easting at false origin',1312333.3333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11478','conversion','EPSG','15385','EPSG','2169','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15386','SPCS83 Arkansas South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 10332.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.4,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',34.46,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',33.18,'EPSG','9110','EPSG','8826','Easting at false origin',1312333.3333,'EPSG','9003','EPSG','8827','Northing at false origin',1312333.3333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11479','conversion','EPSG','15386','EPSG','2170','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15387','SPCS83 Illinois East zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11231.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-88.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11480','conversion','EPSG','15387','EPSG','2194','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15388','SPCS83 Illinois West zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11232.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',2296583.3333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11481','conversion','EPSG','15388','EPSG','2195','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15389','SPCS83 New Hampshire zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12830.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999966667,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11482','conversion','EPSG','15389','EPSG','1398','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15390','SPCS83 Rhode Island zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 13830.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.05,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999375,'EPSG','9201','EPSG','8806','False easting',328083.3333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11483','conversion','EPSG','15390','EPSG','1408','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15391','SPCS83 Louisiana North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11731.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-92.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',32.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',31.1,'EPSG','9110','EPSG','8826','Easting at false origin',3280833.3333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11484','conversion','EPSG','15391','EPSG','2204','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15392','SPCS83 Louisiana South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11732.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-91.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',30.42,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',29.18,'EPSG','9110','EPSG','8826','Easting at false origin',3280833.3333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11485','conversion','EPSG','15392','EPSG','2529','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15393','SPCS83 Louisiana Offshore zone (US survey foot)','This projection is NOT used for oil industry purposes. State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 11733.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.3,'EPSG','9110','EPSG','8822','Longitude of false origin',-91.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',26.1,'EPSG','9110','EPSG','8826','Easting at false origin',3280833.3333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11486','conversion','EPSG','15393','EPSG','1387','EPSG','1212'); INSERT INTO "conversion" VALUES('EPSG','15394','SPCS83 South Dakota North zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14031.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.41,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.25,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11487','conversion','EPSG','15394','EPSG','2249','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15395','SPCS83 South Dakota South zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 14032.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.2,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',44.24,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',42.5,'EPSG','9110','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11488','conversion','EPSG','15395','EPSG','2250','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15396','SPCS83 Nebraska zone (US survey foot)','State law defines grid unit as US Survey feet. For equivalent metric Federal definition see code 12630.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.5,'EPSG','9110','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',40.0,'EPSG','9110','EPSG','8826','Easting at false origin',1640416.6667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11489','conversion','EPSG','15396','EPSG','1396','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','15397','Great Lakes Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',45.568977,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.455955,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.122774,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.01518,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11490','conversion','EPSG','15397','EPSG','3467','EPSG','1052'); INSERT INTO "conversion" VALUES('EPSG','15398','Great Lakes and St Lawrence Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',45.568977,'EPSG','9102','EPSG','8822','Longitude of false origin',-83.248627,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.122774,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.01518,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11491','conversion','EPSG','15398','EPSG','3468','EPSG','1052'); INSERT INTO "conversion" VALUES('EPSG','15399','Yap Islands','Origin is station YAP SECOR AMS 1965.','EPSG','9832','Modified Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',9.324815,'EPSG','9110','EPSG','8802','Longitude of natural origin',138.100748,'EPSG','9110','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',60000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11492','conversion','EPSG','15399','EPSG','3108','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','15400','Guam SPCS','','EPSG','9831','Guam Projection','EPSG','8801','Latitude of natural origin',13.282087887,'EPSG','9110','EPSG','8802','Longitude of natural origin',144.445550254,'EPSG','9110','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11493','conversion','EPSG','15400','EPSG','3255','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','15498','axis order change (2D)','This conversion allows the creation of a user-defined geographic 2D CRS with axis order longitude, latitude from an EPSG geographic 2D CRS.','EPSG','9843','Axis Order Reversal (2D)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11509','conversion','EPSG','15498','EPSG','1262','EPSG','1098'); INSERT INTO "conversion" VALUES('EPSG','15499','axis order change (geographic3D horizontal)','This conversion allows the creation of a user-defined geographic 3D CRS with axis order longitude, latitude, ellipsoid height from an EPSG geographic 3D CRS.','EPSG','9844','Axis Order Reversal (Geographic3D horizontal)',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11510','conversion','EPSG','15499','EPSG','1262','EPSG','1098'); INSERT INTO "conversion" VALUES('EPSG','15500','Australian Antarctic geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11511','conversion','EPSG','15500','EPSG','1278','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15501','Australian Antarctic geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11512','conversion','EPSG','15501','EPSG','1278','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15502','CHTRF95 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11513','conversion','EPSG','15502','EPSG','1286','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15503','CHTRF95 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11514','conversion','EPSG','15503','EPSG','1286','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15504','EST97 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11515','conversion','EPSG','15504','EPSG','1090','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15505','EST97 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11516','conversion','EPSG','15505','EPSG','1090','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15506','ETRS89 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11517','conversion','EPSG','15506','EPSG','1298','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15507','ETRS89 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11518','conversion','EPSG','15507','EPSG','1298','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15508','GDA94 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11519','conversion','EPSG','15508','EPSG','2575','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15509','GDA94 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11520','conversion','EPSG','15509','EPSG','2575','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15510','Hartebeesthoek94 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11521','conversion','EPSG','15510','EPSG','1215','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15511','Hartebeesthoek94 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11522','conversion','EPSG','15511','EPSG','1215','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15512','IRENET95 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11523','conversion','EPSG','15512','EPSG','1305','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15513','IRENET95 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11524','conversion','EPSG','15513','EPSG','1305','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15514','ISN93 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11525','conversion','EPSG','15514','EPSG','1120','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15515','ISN93 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11526','conversion','EPSG','15515','EPSG','1120','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15516','JGD2000 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11527','conversion','EPSG','15516','EPSG','1129','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15517','JGD2000 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11528','conversion','EPSG','15517','EPSG','1129','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15518','LKS92 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11529','conversion','EPSG','15518','EPSG','1139','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15519','LKS92 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11530','conversion','EPSG','15519','EPSG','1139','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15520','LKS94 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11531','conversion','EPSG','15520','EPSG','1145','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15521','LKS94 geocentric to geog3D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11532','conversion','EPSG','15521','EPSG','1145','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15522','Moznet geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11533','conversion','EPSG','15522','EPSG','1167','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15523','Moznet geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11534','conversion','EPSG','15523','EPSG','1167','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15524','NAD83(CSRS) geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11535','conversion','EPSG','15524','EPSG','1061','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15525','NAD83(CSRS) geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11536','conversion','EPSG','15525','EPSG','1061','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15526','NAD83(HARN) geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11537','conversion','EPSG','15526','EPSG','1337','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15527','NAD83(HARN) geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11538','conversion','EPSG','15527','EPSG','1337','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15528','NZGD2000 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11539','conversion','EPSG','15528','EPSG','1175','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15529','NZGD2000 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11540','conversion','EPSG','15529','EPSG','1175','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15530','POSGAR 98 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11541','conversion','EPSG','15530','EPSG','1033','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15531','POSGAR 98 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11542','conversion','EPSG','15531','EPSG','1033','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15532','REGVEN geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11543','conversion','EPSG','15532','EPSG','1251','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15533','REGVEN geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11544','conversion','EPSG','15533','EPSG','1251','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15534','RGF93 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11545','conversion','EPSG','15534','EPSG','1096','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15535','RGF93 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11546','conversion','EPSG','15535','EPSG','1096','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15536','RGFG95 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11547','conversion','EPSG','15536','EPSG','1097','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15537','RGFG95 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11548','conversion','EPSG','15537','EPSG','1097','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15538','RGNC91-93 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11549','conversion','EPSG','15538','EPSG','1174','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15539','RGNC91-93 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11550','conversion','EPSG','15539','EPSG','1174','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15540','RGR92 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11551','conversion','EPSG','15540','EPSG','1196','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15541','RGR92 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11552','conversion','EPSG','15541','EPSG','1196','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15542','RRAF 1991 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11553','conversion','EPSG','15542','EPSG','2824','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15543','RRAF 1991 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11554','conversion','EPSG','15543','EPSG','2824','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15544','SIRGAS geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11555','conversion','EPSG','15544','EPSG','3448','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15545','SIRGAS geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11556','conversion','EPSG','15545','EPSG','3448','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15546','SWEREF99 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11557','conversion','EPSG','15546','EPSG','1225','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15547','SWEREF99 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11558','conversion','EPSG','15547','EPSG','1225','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15548','WGS 84 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11559','conversion','EPSG','15548','EPSG','1262','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15549','WGS 84 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11560','conversion','EPSG','15549','EPSG','1262','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15550','Yemen NGN96 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11561','conversion','EPSG','15550','EPSG','1257','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15551','Yemen NGN96 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11562','conversion','EPSG','15551','EPSG','1257','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15552','IGM95 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11563','conversion','EPSG','15552','EPSG','1127','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15553','IGM95 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11564','conversion','EPSG','15553','EPSG','1127','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15554','WGS 72 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11565','conversion','EPSG','15554','EPSG','1262','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15555','WGS 72 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11566','conversion','EPSG','15555','EPSG','1262','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15556','WGS 72BE geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11567','conversion','EPSG','15556','EPSG','1262','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15557','WGS 72BE geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11568','conversion','EPSG','15557','EPSG','1262','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15558','SIRGAS 2000 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11569','conversion','EPSG','15558','EPSG','3418','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15559','SIRGAS 2000 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11570','conversion','EPSG','15559','EPSG','3418','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15560','Lao 1993 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11571','conversion','EPSG','15560','EPSG','1138','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15561','Lao 1993 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11572','conversion','EPSG','15561','EPSG','1138','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15562','Lao 1997 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11573','conversion','EPSG','15562','EPSG','1138','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15563','Lao 1997 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11574','conversion','EPSG','15563','EPSG','1138','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15564','PRS92 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11575','conversion','EPSG','15564','EPSG','1190','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15565','PRS92 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11576','conversion','EPSG','15565','EPSG','1190','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15566','MAGNA-SIRGAS geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11577','conversion','EPSG','15566','EPSG','1070','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15567','MAGNA-SIRGAS geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11578','conversion','EPSG','15567','EPSG','1070','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15568','RGPF geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11579','conversion','EPSG','15568','EPSG','1098','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15569','RGPF geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11580','conversion','EPSG','15569','EPSG','1098','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15570','POSGAR 94 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11581','conversion','EPSG','15570','EPSG','1033','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15571','POSGAR 94 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11582','conversion','EPSG','15571','EPSG','1033','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15572','Korean 2000 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11583','conversion','EPSG','15572','EPSG','1135','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15573','Korean 2000 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11584','conversion','EPSG','15573','EPSG','1135','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15574','Mauritania 1999 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11585','conversion','EPSG','15574','EPSG','1157','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15575','Mauritania 1999 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11586','conversion','EPSG','15575','EPSG','1157','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15576','PZ-90 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11587','conversion','EPSG','15576','EPSG','1262','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15577','PZ-90 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11588','conversion','EPSG','15577','EPSG','1262','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15578','GDM2000 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11589','conversion','EPSG','15578','EPSG','1151','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15579','GDM2000 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11590','conversion','EPSG','15579','EPSG','1151','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15580','GR96 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11591','conversion','EPSG','15580','EPSG','1107','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15581','GR96 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11592','conversion','EPSG','15581','EPSG','1107','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15582','LGD2006 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11593','conversion','EPSG','15582','EPSG','1143','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15583','LGD2006 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11594','conversion','EPSG','15583','EPSG','1143','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15584','DGN95 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11595','conversion','EPSG','15584','EPSG','1122','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15585','DGN95 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11596','conversion','EPSG','15585','EPSG','1122','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15586','JAD2001 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11597','conversion','EPSG','15586','EPSG','1128','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15587','JAD2001 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11598','conversion','EPSG','15587','EPSG','1128','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15588','NAD83(NSRS2007) geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11599','conversion','EPSG','15588','EPSG','1511','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15589','NAD83(NSRS2007) geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11600','conversion','EPSG','15589','EPSG','1511','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15590','WGS 66 geocentric to geog3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11601','conversion','EPSG','15590','EPSG','1262','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15591','WGS 66 geog3D to geog2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','11602','conversion','EPSG','15591','EPSG','1262','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15592','geocentric to geographic3D','','EPSG','9602','Geographic/geocentric conversions',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11603','conversion','EPSG','15592','EPSG','1262','EPSG','1154'); INSERT INTO "conversion" VALUES('EPSG','15593','geographic3D to geographic2D','See EPSG Guidance Note #7 or Coordinate Operation Method description for techniques for handling reverse conversion.','EPSG','9659','Geographic3D to 2D conversion',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11604','conversion','EPSG','15593','EPSG','1262','EPSG','1155'); INSERT INTO "conversion" VALUES('EPSG','15594','EPSG topocentric example A','Example only.','EPSG','9837','Geographic/topocentric conversions','EPSG','8834','Latitude of topocentric origin',55.0,'EPSG','9102','EPSG','8835','Longitude of topocentric origin',5.0,'EPSG','9102','EPSG','8836','Ellipsoidal height of topocentric origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11605','conversion','EPSG','15594','EPSG','1263','EPSG','1117'); INSERT INTO "conversion" VALUES('EPSG','15595','EPSG topocentric example B','Example only.','EPSG','9836','Geocentric/topocentric conversions','EPSG','8837','Geocentric X of topocentric origin',3771793.97,'EPSG','9001','EPSG','8838','Geocentric Y of topocentric origin',140253.34,'EPSG','9001','EPSG','8839','Geocentric Z of topocentric origin',5124304.35,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11606','conversion','EPSG','15595','EPSG','1263','EPSG','1118'); INSERT INTO "conversion" VALUES('EPSG','15914','BLM zone 14N (US survey foot)','US survey foot form of UTM zone 14N. Sometimes locally referred to as "UTM zone 14".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11925','conversion','EPSG','15914','EPSG','3637','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','15915','BLM zone 15N (US survey foot)','US survey foot form of UTM zone 15N. Sometimes locally referred to as "UTM zone 15".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11926','conversion','EPSG','15915','EPSG','3640','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','15916','BLM zone 16N (US survey foot)','US survey foot form of UTM zone 16N. Sometimes locally referred to as "UTM zone 16".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11927','conversion','EPSG','15916','EPSG','3641','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','15917','BLM zone 17N (US survey foot)','US survey foot form of UTM zone 17N. Sometimes locally referred to as "UTM zone 17".','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1640416.67,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','11928','conversion','EPSG','15917','EPSG','3642','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','16000','UTM grid system (northern hemisphere)','Use UTM zone xx N (codes 16001-16060) for use outwith zone boundary or when easting is not prefixed by zone number.','EPSG','9824','Transverse Mercator Zoned Grid System','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8830','Initial longitude',-180.0,'EPSG','9102','EPSG','8831','Zone width',6.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12010','conversion','EPSG','16000','EPSG','1998','EPSG','1163'); INSERT INTO "conversion" VALUES('EPSG','16001','UTM zone 1N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12011','conversion','EPSG','16001','EPSG','1873','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16002','UTM zone 2N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12012','conversion','EPSG','16002','EPSG','1875','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16003','UTM zone 3N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12013','conversion','EPSG','16003','EPSG','1877','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16004','UTM zone 4N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12014','conversion','EPSG','16004','EPSG','1879','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16005','UTM zone 5N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12015','conversion','EPSG','16005','EPSG','1881','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16006','UTM zone 6N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12016','conversion','EPSG','16006','EPSG','1883','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16007','UTM zone 7N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12017','conversion','EPSG','16007','EPSG','1885','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16008','UTM zone 8N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12018','conversion','EPSG','16008','EPSG','1887','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16009','UTM zone 9N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12019','conversion','EPSG','16009','EPSG','1889','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16010','UTM zone 10N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12020','conversion','EPSG','16010','EPSG','1891','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16011','UTM zone 11N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12021','conversion','EPSG','16011','EPSG','1893','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16012','UTM zone 12N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12022','conversion','EPSG','16012','EPSG','1895','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16013','UTM zone 13N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12023','conversion','EPSG','16013','EPSG','1897','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16014','UTM zone 14N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12024','conversion','EPSG','16014','EPSG','1899','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16015','UTM zone 15N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12025','conversion','EPSG','16015','EPSG','1901','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16016','UTM zone 16N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12026','conversion','EPSG','16016','EPSG','1903','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16017','UTM zone 17N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12027','conversion','EPSG','16017','EPSG','1905','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16018','UTM zone 18N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12028','conversion','EPSG','16018','EPSG','1907','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16019','UTM zone 19N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12029','conversion','EPSG','16019','EPSG','1909','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16020','UTM zone 20N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12030','conversion','EPSG','16020','EPSG','1911','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16021','UTM zone 21N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12031','conversion','EPSG','16021','EPSG','1913','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16022','UTM zone 22N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12032','conversion','EPSG','16022','EPSG','1915','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16023','UTM zone 23N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12033','conversion','EPSG','16023','EPSG','1917','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16024','UTM zone 24N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12034','conversion','EPSG','16024','EPSG','1919','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16025','UTM zone 25N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12035','conversion','EPSG','16025','EPSG','1921','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16026','UTM zone 26N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12036','conversion','EPSG','16026','EPSG','1923','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16027','UTM zone 27N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12037','conversion','EPSG','16027','EPSG','1925','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16028','UTM zone 28N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12038','conversion','EPSG','16028','EPSG','1927','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16029','UTM zone 29N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12039','conversion','EPSG','16029','EPSG','1929','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16030','UTM zone 30N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12040','conversion','EPSG','16030','EPSG','1931','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16031','UTM zone 31N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12041','conversion','EPSG','16031','EPSG','1933','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16032','UTM zone 32N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12042','conversion','EPSG','16032','EPSG','1935','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16033','UTM zone 33N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12043','conversion','EPSG','16033','EPSG','1937','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16034','UTM zone 34N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12044','conversion','EPSG','16034','EPSG','1939','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16035','UTM zone 35N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12045','conversion','EPSG','16035','EPSG','1941','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16036','UTM zone 36N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12046','conversion','EPSG','16036','EPSG','1943','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16037','UTM zone 37N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12047','conversion','EPSG','16037','EPSG','1945','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16038','UTM zone 38N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12048','conversion','EPSG','16038','EPSG','1947','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16039','UTM zone 39N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12049','conversion','EPSG','16039','EPSG','1949','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16040','UTM zone 40N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12050','conversion','EPSG','16040','EPSG','1951','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16041','UTM zone 41N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12051','conversion','EPSG','16041','EPSG','1953','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16042','UTM zone 42N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12052','conversion','EPSG','16042','EPSG','1955','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16043','UTM zone 43N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12053','conversion','EPSG','16043','EPSG','1957','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16044','UTM zone 44N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12054','conversion','EPSG','16044','EPSG','1959','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16045','UTM zone 45N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12055','conversion','EPSG','16045','EPSG','1961','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16046','UTM zone 46N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12056','conversion','EPSG','16046','EPSG','1963','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16047','UTM zone 47N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12057','conversion','EPSG','16047','EPSG','1965','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16048','UTM zone 48N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12058','conversion','EPSG','16048','EPSG','1967','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16049','UTM zone 49N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12059','conversion','EPSG','16049','EPSG','1969','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16050','UTM zone 50N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12060','conversion','EPSG','16050','EPSG','1971','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16051','UTM zone 51N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12061','conversion','EPSG','16051','EPSG','1973','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16052','UTM zone 52N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12062','conversion','EPSG','16052','EPSG','1975','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16053','UTM zone 53N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12063','conversion','EPSG','16053','EPSG','1977','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16054','UTM zone 54N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12064','conversion','EPSG','16054','EPSG','1979','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16055','UTM zone 55N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12065','conversion','EPSG','16055','EPSG','1981','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16056','UTM zone 56N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12066','conversion','EPSG','16056','EPSG','1983','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16057','UTM zone 57N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12067','conversion','EPSG','16057','EPSG','1985','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16058','UTM zone 58N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12068','conversion','EPSG','16058','EPSG','1987','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16059','UTM zone 59N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12069','conversion','EPSG','16059','EPSG','1989','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16060','UTM zone 60N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12070','conversion','EPSG','16060','EPSG','1991','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16061','Universal Polar Stereographic North','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12071','conversion','EPSG','16061','EPSG','1996','EPSG','1160'); INSERT INTO "conversion" VALUES('EPSG','16065','TM35FIN','Identical to UTM zone 35N (code 16035) except for area of use. TM35FIN is used in conjunction with EUREF-FIN for mapping all Finnish territory (from 19°E to 31.6°E) in a single zone.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12072','conversion','EPSG','16065','EPSG','1095','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16070','3-degree Gauss-Kruger zone 40','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 120E (code 16170). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',120.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',40500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12073','conversion','EPSG','16070','EPSG','2628','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16071','3-degree Gauss-Kruger zone 41','Also found with zone truncated from false easting: see Gauss-Kruger cm 123E (code 16321). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',41500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12074','conversion','EPSG','16071','EPSG','2629','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16072','3-degree Gauss-Kruger zone 42','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 126E (code 16172). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',126.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',42500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12075','conversion','EPSG','16072','EPSG','2630','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16073','3-degree Gauss-Kruger zone 43','Also found with zone truncated from false easting: see Gauss-Kruger cm 129E (code 16322). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',43500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12076','conversion','EPSG','16073','EPSG','2631','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16074','3-degree Gauss-Kruger zone 44','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 132E (code 16174). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',132.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',44500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12077','conversion','EPSG','16074','EPSG','2632','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16075','3-degree Gauss-Kruger zone 45','Also found with zone truncated from false easting: see Gauss-Kruger cm 135E (code 16323). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',45500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12078','conversion','EPSG','16075','EPSG','2633','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16076','3-degree Gauss-Kruger zone 46','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 138E (code 16176). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',138.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',46500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12079','conversion','EPSG','16076','EPSG','2634','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16077','3-degree Gauss-Kruger zone 47','Also found with zone truncated from false easting: see Gauss-Kruger cm 141E (code 16324). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',47500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12080','conversion','EPSG','16077','EPSG','2635','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16078','3-degree Gauss-Kruger zone 48','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 144E (code 16178). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',48500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12081','conversion','EPSG','16078','EPSG','2636','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16079','3-degree Gauss-Kruger zone 49','Also found with zone truncated from false easting: see Gauss-Kruger cm 147E (code 16325). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',49500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12082','conversion','EPSG','16079','EPSG','2637','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16080','3-degree Gauss-Kruger zone 50','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 150E (code 16180). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',50500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12083','conversion','EPSG','16080','EPSG','2638','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16081','3-degree Gauss-Kruger zone 51','Also found with zone truncated from false easting: see Gauss-Kruger cm 153E (code 16326). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',51500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12084','conversion','EPSG','16081','EPSG','2639','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16082','3-degree Gauss-Kruger zone 52','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 156E (code 16182). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',156.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',52500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12085','conversion','EPSG','16082','EPSG','2640','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16083','3-degree Gauss-Kruger zone 53','Also found with zone truncated from false easting: see Gauss-Kruger cm 159E (code 16327). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',53500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12086','conversion','EPSG','16083','EPSG','2641','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16084','3-degree Gauss-Kruger zone 54','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 162E (code 16184). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',162.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',54500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12087','conversion','EPSG','16084','EPSG','2642','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16085','3-degree Gauss-Kruger zone 55','Also found with zone truncated from false easting: see Gauss-Kruger cm 165E (code 16328). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',55500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12088','conversion','EPSG','16085','EPSG','2643','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16086','3-degree Gauss-Kruger zone 56','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 168E (code 16186). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',56500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12089','conversion','EPSG','16086','EPSG','2644','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16087','3-degree Gauss-Kruger zone 57','Also found with zone truncated from false easting: see Gauss-Kruger cm 171E (code 16329). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',57500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12090','conversion','EPSG','16087','EPSG','2645','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16088','3-degree Gauss-Kruger zone 58','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 174E (code 16188). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',58500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12091','conversion','EPSG','16088','EPSG','2646','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16089','3-degree Gauss-Kruger zone 59','Also found with zone truncated from false easting: see Gauss-Kruger cm 177E (code 16330). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',59500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12092','conversion','EPSG','16089','EPSG','2647','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16090','3-degree Gauss-Kruger zone 60','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 180 (code 16190). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',180.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',60000000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12093','conversion','EPSG','16090','EPSG','2648','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16091','3-degree Gauss-Kruger zone 61','Also found with zone truncated from false easting: see Gauss-Kruger cm 177W (code 16331). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',61500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12094','conversion','EPSG','16091','EPSG','2649','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16092','3-degree Gauss-Kruger zone 62','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 174W (code 16192). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',62500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12095','conversion','EPSG','16092','EPSG','2650','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16093','3-degree Gauss-Kruger zone 63','Also found with zone truncated from false easting: see Gauss-Kruger cm 171W (code 16332). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',63500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12096','conversion','EPSG','16093','EPSG','2651','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16094','3-degree Gauss-Kruger zone 64','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 168W (code 16194). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',64500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12097','conversion','EPSG','16094','EPSG','2652','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16099','3-degree Gauss-Kruger zone 60','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 180E (code 16190).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',180.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',60500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12098','conversion','EPSG','16099','EPSG','2648','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16100','UTM grid system (southern hemisphere)','Use UTM zone xx S (codes 16101-16160) for use outwith zone boundary or when easting is not prefixed by zone number.','EPSG','9824','Transverse Mercator Zoned Grid System','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8830','Initial longitude',-180.0,'EPSG','9102','EPSG','8831','Zone width',6.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12099','conversion','EPSG','16100','EPSG','1999','EPSG','1163'); INSERT INTO "conversion" VALUES('EPSG','16101','UTM zone 1S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12100','conversion','EPSG','16101','EPSG','1874','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16102','UTM zone 2S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12101','conversion','EPSG','16102','EPSG','1876','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16103','UTM zone 3S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12102','conversion','EPSG','16103','EPSG','1878','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16104','UTM zone 4S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12103','conversion','EPSG','16104','EPSG','1880','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16105','UTM zone 5S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12104','conversion','EPSG','16105','EPSG','1882','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16106','UTM zone 6S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12105','conversion','EPSG','16106','EPSG','1884','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16107','UTM zone 7S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12106','conversion','EPSG','16107','EPSG','1886','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16108','UTM zone 8S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12107','conversion','EPSG','16108','EPSG','1888','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16109','UTM zone 9S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12108','conversion','EPSG','16109','EPSG','1890','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16110','UTM zone 10S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12109','conversion','EPSG','16110','EPSG','1892','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16111','UTM zone 11S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12110','conversion','EPSG','16111','EPSG','1894','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16112','UTM zone 12S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12111','conversion','EPSG','16112','EPSG','1896','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16113','UTM zone 13S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12112','conversion','EPSG','16113','EPSG','1898','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16114','UTM zone 14S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12113','conversion','EPSG','16114','EPSG','1900','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16115','UTM zone 15S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12114','conversion','EPSG','16115','EPSG','1902','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16116','UTM zone 16S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12115','conversion','EPSG','16116','EPSG','1904','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16117','UTM zone 17S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12116','conversion','EPSG','16117','EPSG','1906','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16118','UTM zone 18S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12117','conversion','EPSG','16118','EPSG','1908','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16119','UTM zone 19S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12118','conversion','EPSG','16119','EPSG','1910','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16120','UTM zone 20S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12119','conversion','EPSG','16120','EPSG','1912','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16121','UTM zone 21S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12120','conversion','EPSG','16121','EPSG','1914','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16122','UTM zone 22S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12121','conversion','EPSG','16122','EPSG','1916','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16123','UTM zone 23S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12122','conversion','EPSG','16123','EPSG','1918','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16124','UTM zone 24S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12123','conversion','EPSG','16124','EPSG','1920','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16125','UTM zone 25S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12124','conversion','EPSG','16125','EPSG','1922','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16126','UTM zone 26S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12125','conversion','EPSG','16126','EPSG','1924','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16127','UTM zone 27S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12126','conversion','EPSG','16127','EPSG','1926','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16128','UTM zone 28S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12127','conversion','EPSG','16128','EPSG','1928','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16129','UTM zone 29S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12128','conversion','EPSG','16129','EPSG','1930','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16130','UTM zone 30S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12129','conversion','EPSG','16130','EPSG','1932','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16131','UTM zone 31S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12130','conversion','EPSG','16131','EPSG','1934','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16132','UTM zone 32S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12131','conversion','EPSG','16132','EPSG','1936','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16133','UTM zone 33S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12132','conversion','EPSG','16133','EPSG','1938','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16134','UTM zone 34S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12133','conversion','EPSG','16134','EPSG','1940','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16135','UTM zone 35S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12134','conversion','EPSG','16135','EPSG','1942','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16136','UTM zone 36S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12135','conversion','EPSG','16136','EPSG','1944','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16137','UTM zone 37S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12136','conversion','EPSG','16137','EPSG','1946','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16138','UTM zone 38S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12137','conversion','EPSG','16138','EPSG','1948','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16139','UTM zone 39S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12138','conversion','EPSG','16139','EPSG','1950','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16140','UTM zone 40S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12139','conversion','EPSG','16140','EPSG','1952','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16141','UTM zone 41S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12140','conversion','EPSG','16141','EPSG','1954','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16142','UTM zone 42S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12141','conversion','EPSG','16142','EPSG','1956','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16143','UTM zone 43S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12142','conversion','EPSG','16143','EPSG','1958','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16144','UTM zone 44S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12143','conversion','EPSG','16144','EPSG','1960','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16145','UTM zone 45S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12144','conversion','EPSG','16145','EPSG','1962','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16146','UTM zone 46S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12145','conversion','EPSG','16146','EPSG','1964','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16147','UTM zone 47S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12146','conversion','EPSG','16147','EPSG','1966','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16148','UTM zone 48S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12147','conversion','EPSG','16148','EPSG','1968','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16149','UTM zone 49S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12148','conversion','EPSG','16149','EPSG','1970','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16150','UTM zone 50S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12149','conversion','EPSG','16150','EPSG','1972','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16151','UTM zone 51S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12150','conversion','EPSG','16151','EPSG','1974','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16152','UTM zone 52S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12151','conversion','EPSG','16152','EPSG','1976','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16153','UTM zone 53S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12152','conversion','EPSG','16153','EPSG','1978','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16154','UTM zone 54S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12153','conversion','EPSG','16154','EPSG','1980','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16155','UTM zone 55S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12154','conversion','EPSG','16155','EPSG','1982','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16156','UTM zone 56S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12155','conversion','EPSG','16156','EPSG','1984','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16157','UTM zone 57S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12156','conversion','EPSG','16157','EPSG','1986','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16158','UTM zone 58S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12157','conversion','EPSG','16158','EPSG','1988','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16159','UTM zone 59S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12158','conversion','EPSG','16159','EPSG','1990','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16160','UTM zone 60S','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12159','conversion','EPSG','16160','EPSG','1992','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','16161','Universal Polar Stereographic South','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12160','conversion','EPSG','16161','EPSG','1997','EPSG','1160'); INSERT INTO "conversion" VALUES('EPSG','16170','3-degree Gauss-Kruger CM 120E','3-degree Gauss-Kruger zone 40N (code 16070) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',120.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12161','conversion','EPSG','16170','EPSG','2628','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16171','3-degree Gauss-Kruger CM 123E','3-degree Gauss-Kruger zone 41N (code 16071) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12162','conversion','EPSG','16171','EPSG','2629','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16172','3-degree Gauss-Kruger CM 126E','3-degree Gauss-Kruger zone 42N (code 16072) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',126.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12163','conversion','EPSG','16172','EPSG','2630','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16173','3-degree Gauss-Kruger CM 129E','3-degree Gauss-Kruger zone 43N (code 16073) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12164','conversion','EPSG','16173','EPSG','2631','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16174','3-degree Gauss-Kruger CM 132E','3-degree Gauss-Kruger zone 44N (code 16074) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',132.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12165','conversion','EPSG','16174','EPSG','2632','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16175','3-degree Gauss-Kruger CM 135E','3-degree Gauss-Kruger zone 45N (code 16075) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12166','conversion','EPSG','16175','EPSG','2633','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16176','3-degree Gauss-Kruger CM 138E','3-degree Gauss-Kruger zone 46N (code 16076) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',138.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12167','conversion','EPSG','16176','EPSG','2634','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16177','3-degree Gauss-Kruger CM 141E','3-degree Gauss-Kruger zone 47N (code 16077) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12168','conversion','EPSG','16177','EPSG','2635','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16178','3-degree Gauss-Kruger CM 144E','3-degree Gauss-Kruger zone 48N (code 16078) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12169','conversion','EPSG','16178','EPSG','2636','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16179','3-degree Gauss-Kruger CM 147E','3-degree Gauss-Kruger zone 49N (code 16079) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12170','conversion','EPSG','16179','EPSG','2637','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16180','3-degree Gauss-Kruger CM 150E','3-degree Gauss-Kruger zone 50N (code 16080) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12171','conversion','EPSG','16180','EPSG','2638','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16181','3-degree Gauss-Kruger CM 153E','3-degree Gauss-Kruger zone 51N (code 16081) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12172','conversion','EPSG','16181','EPSG','2639','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16182','3-degree Gauss-Kruger CM 156E','3-degree Gauss-Kruger zone 52N (code 16082) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',156.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12173','conversion','EPSG','16182','EPSG','2640','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16183','3-degree Gauss-Kruger CM 159E','3-degree Gauss-Kruger zone 53N (code 16083) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12174','conversion','EPSG','16183','EPSG','2641','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16184','3-degree Gauss-Kruger CM 162E','3-degree Gauss-Kruger zone 54N (code 16084) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',162.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12175','conversion','EPSG','16184','EPSG','2642','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16185','3-degree Gauss-Kruger CM 165E','3-degree Gauss-Kruger zone 55N (code 16085) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12176','conversion','EPSG','16185','EPSG','2643','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16186','3-degree Gauss-Kruger CM 168E','3-degree Gauss-Kruger zone 56N (code 16086) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12177','conversion','EPSG','16186','EPSG','2644','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16187','3-degree Gauss-Kruger CM 171E','3-degree Gauss-Kruger zone 57N (code 16087) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12178','conversion','EPSG','16187','EPSG','2645','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16188','3-degree Gauss-Kruger CM 174E','3-degree Gauss-Kruger zone 58N (code 16088) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12179','conversion','EPSG','16188','EPSG','2646','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16189','3-degree Gauss-Kruger CM 177E','3-degree Gauss-Kruger zone 59N (code 16089) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12180','conversion','EPSG','16189','EPSG','2647','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16190','3-degree Gauss-Kruger CM 180E','3-degree Gauss-Kruger zone 60N (code 16099) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',180.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12181','conversion','EPSG','16190','EPSG','2648','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16191','3-degree Gauss-Kruger CM 177W','3-degree Gauss-Kruger zone 61N (code 16091) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12182','conversion','EPSG','16191','EPSG','2649','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16192','3-degree Gauss-Kruger CM 174W','3-degree Gauss-Kruger zone 62N (code 16092) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12183','conversion','EPSG','16192','EPSG','2650','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16193','3-degree Gauss-Kruger CM 171W','3-degree Gauss-Kruger zone 63N (code 16093) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12184','conversion','EPSG','16193','EPSG','2651','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16194','3-degree Gauss-Kruger CM 168W','3-degree Gauss-Kruger zone 64N (code 16094) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12185','conversion','EPSG','16194','EPSG','2652','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16201','6-degree Gauss-Kruger zone 1','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 3E (code 16301). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12186','conversion','EPSG','16201','EPSG','1933','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16202','6-degree Gauss-Kruger zone 2','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 9E (code 16302).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12187','conversion','EPSG','16202','EPSG','2741','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16203','6-degree Gauss-Kruger zone 3','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 15E (code 16303).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12188','conversion','EPSG','16203','EPSG','2742','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16204','6-degree Gauss-Kruger zone 4','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 21E (code 16304).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12189','conversion','EPSG','16204','EPSG','2743','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16205','6-degree Gauss-Kruger zone 5','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 27E (code 16305).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12190','conversion','EPSG','16205','EPSG','2744','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16206','6-degree Gauss-Kruger zone 6','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 33E (code 16306).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12191','conversion','EPSG','16206','EPSG','2745','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16207','6-degree Gauss-Kruger zone 7','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 39E (code 16307).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12192','conversion','EPSG','16207','EPSG','2746','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16208','6-degree Gauss-Kruger zone 8','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 45E (code 16308).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',8500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12193','conversion','EPSG','16208','EPSG','1947','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16209','6-degree Gauss-Kruger zone 9','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 51E (code 16309).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',9500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12194','conversion','EPSG','16209','EPSG','1949','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16210','6-degree Gauss-Kruger zone 10','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 57E (code 16310).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',10500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12195','conversion','EPSG','16210','EPSG','1951','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16211','6-degree Gauss-Kruger zone 11','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 63E (code 16311).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',11500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12196','conversion','EPSG','16211','EPSG','1953','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16212','6-degree Gauss-Kruger zone 12','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 69E (code 16312).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',12500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12197','conversion','EPSG','16212','EPSG','1955','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16213','6-degree Gauss-Kruger zone 13','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 75E (code 16313).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',13500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12198','conversion','EPSG','16213','EPSG','1957','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16214','6-degree Gauss-Kruger zone 14','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 81E (code 16314).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',14500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12199','conversion','EPSG','16214','EPSG','1959','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16215','6-degree Gauss-Kruger zone 15','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 87E (code 16315).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',15500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12200','conversion','EPSG','16215','EPSG','1961','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16216','6-degree Gauss-Kruger zone 16','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 93E (code 16316).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',16500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12201','conversion','EPSG','16216','EPSG','1963','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16217','6-degree Gauss-Kruger zone 17','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 99E (code 16317).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',17500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12202','conversion','EPSG','16217','EPSG','1965','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16218','6-degree Gauss-Kruger zone 18','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 105E (code 16318).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',18500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12203','conversion','EPSG','16218','EPSG','1967','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16219','6-degree Gauss-Kruger zone 19','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 111E (code 16319).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',19500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12204','conversion','EPSG','16219','EPSG','1969','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16220','6-degree Gauss-Kruger zone 20','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 117E (code 16320).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12205','conversion','EPSG','16220','EPSG','1971','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16221','6-degree Gauss-Kruger zone 21','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 123E (code 16321).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',21500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12206','conversion','EPSG','16221','EPSG','1973','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16222','6-degree Gauss-Kruger zone 22','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 129E (code 16322).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',22500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12207','conversion','EPSG','16222','EPSG','1975','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16223','6-degree Gauss-Kruger zone 23','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 135E (code 16323).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',23500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12208','conversion','EPSG','16223','EPSG','1977','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16224','6-degree Gauss-Kruger zone 24','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 141E (code 16324).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',24500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12209','conversion','EPSG','16224','EPSG','1979','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16225','6-degree Gauss-Kruger zone 25','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 147E (code 16325).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',25500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12210','conversion','EPSG','16225','EPSG','1981','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16226','6-degree Gauss-Kruger zone 26','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 153E (code 16326).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',26500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12211','conversion','EPSG','16226','EPSG','1983','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16227','6-degree Gauss-Kruger zone 27','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 159E (code 16327).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',27500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12212','conversion','EPSG','16227','EPSG','1985','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16228','6-degree Gauss-Kruger zone 28','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 165E (code 16328).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',28500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12213','conversion','EPSG','16228','EPSG','1987','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16229','6-degree Gauss-Kruger zone 29','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 171E (code 16329).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',29500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12214','conversion','EPSG','16229','EPSG','1989','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16230','6-degree Gauss-Kruger zone 30','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 177E (code 16330).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',30500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12215','conversion','EPSG','16230','EPSG','1991','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16231','6-degree Gauss-Kruger zone 31','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 177W (code 16331).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',31500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12216','conversion','EPSG','16231','EPSG','1873','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16232','6-degree Gauss-Kruger zone 32','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger CM 171W (code 16332).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',32500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12217','conversion','EPSG','16232','EPSG','1875','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16233','6-degree Gauss-Kruger zone 33','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 165W (code 16333). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',33500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12218','conversion','EPSG','16233','EPSG','1877','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16234','6-degree Gauss-Kruger zone 34','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 159W (code 16334). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',34500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12219','conversion','EPSG','16234','EPSG','1879','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16235','6-degree Gauss-Kruger zone 35','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 153W (code 16335). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',35500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12220','conversion','EPSG','16235','EPSG','1881','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16236','6-degree Gauss-Kruger zone 36','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 147W (code 16336). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',36500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12221','conversion','EPSG','16236','EPSG','1883','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16237','6-degree Gauss-Kruger zone 37','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 141W (code 16337). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',37500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12222','conversion','EPSG','16237','EPSG','1885','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16238','6-degree Gauss-Kruger zone 38','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 135W (code 16338). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',38500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12223','conversion','EPSG','16238','EPSG','1887','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16239','6-degree Gauss-Kruger zone 39','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 129W (code 16339). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',39500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12224','conversion','EPSG','16239','EPSG','1889','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16240','6-degree Gauss-Kruger zone 40','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 123W (code 16340). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',40500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12225','conversion','EPSG','16240','EPSG','1891','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16241','6-degree Gauss-Kruger zone 41','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 117W (code 16341). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',41500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12226','conversion','EPSG','16241','EPSG','1893','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16242','6-degree Gauss-Kruger zone 42','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 111W (code 16342). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',42500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12227','conversion','EPSG','16242','EPSG','1895','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16243','6-degree Gauss-Kruger zone 43','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 105W (code 16343). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',43500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12228','conversion','EPSG','16243','EPSG','1897','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16244','6-degree Gauss-Kruger zone 44','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 99W (code 16344). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',44500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12229','conversion','EPSG','16244','EPSG','1899','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16245','6-degree Gauss-Kruger zone 45','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 93W (code 16345). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',45500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12230','conversion','EPSG','16245','EPSG','1901','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16246','6-degree Gauss-Kruger zone 46','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 87W (code 16346). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',46500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12231','conversion','EPSG','16246','EPSG','1903','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16247','6-degree Gauss-Kruger zone 47','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 81W (code 16347). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',47500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12232','conversion','EPSG','16247','EPSG','2732','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16248','6-degree Gauss-Kruger zone 48','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 75W (code 16348). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',48500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12233','conversion','EPSG','16248','EPSG','2733','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16249','6-degree Gauss-Kruger zone 49','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 69W (code 16349). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',49500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12234','conversion','EPSG','16249','EPSG','2734','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16250','6-degree Gauss-Kruger zone 50','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 63W (code 16350). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',50500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12235','conversion','EPSG','16250','EPSG','2735','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16251','6-degree Gauss-Kruger zone 51','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 57W (code 16351). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',51500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12236','conversion','EPSG','16251','EPSG','2736','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16252','6-degree Gauss-Kruger zone 52','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 51W (code 16352). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',52500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12237','conversion','EPSG','16252','EPSG','2737','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16253','6-degree Gauss-Kruger zone 53','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 45W (code 16353). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',53500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12238','conversion','EPSG','16253','EPSG','2738','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16254','6-degree Gauss-Kruger zone 54','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 39W (code 16354). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',54500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12239','conversion','EPSG','16254','EPSG','2739','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16255','6-degree Gauss-Kruger zone 55','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 33W (code 16355). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',55500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12240','conversion','EPSG','16255','EPSG','2740','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16256','6-degree Gauss-Kruger zone 56','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 27W (code 16356). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',56500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12241','conversion','EPSG','16256','EPSG','1923','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16257','6-degree Gauss-Kruger zone 57','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 21W (code 16357). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',57500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12242','conversion','EPSG','16257','EPSG','1925','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16258','6-degree Gauss-Kruger zone 58','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 15W (code 16358). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',58500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12243','conversion','EPSG','16258','EPSG','1927','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16259','6-degree Gauss-Kruger zone 59','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 9W (code 16359). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',59500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12244','conversion','EPSG','16259','EPSG','1929','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16260','6-degree Gauss-Kruger zone 60','Also found with zone truncated from false easting: see 6-degree Gauss-Kruger cm 3W (code 16360). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',60500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12245','conversion','EPSG','16260','EPSG','1931','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16261','3-degree Gauss-Kruger zone 1','Also found with zone truncated from false easting: see Gauss-Kruger CM 3E (code 16301).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12246','conversion','EPSG','16261','EPSG','2299','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16262','3-degree Gauss-Kruger zone 2','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 6E (code 16362).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',6.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12247','conversion','EPSG','16262','EPSG','2300','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16263','3-degree Gauss-Kruger zone 3','Also found with zone truncated from false easting: see Gauss-Kruger CM 9E (code 16302).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12248','conversion','EPSG','16263','EPSG','2301','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16264','3-degree Gauss-Kruger zone 4','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 12E (code 16364).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12249','conversion','EPSG','16264','EPSG','2302','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16265','3-degree Gauss-Kruger zone 5','Also found with zone truncated from false easting: see Gauss-Kruger CM 15E (code 16303).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12250','conversion','EPSG','16265','EPSG','2303','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16266','3-degree Gauss-Kruger zone 6','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 18E (code 16366).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12251','conversion','EPSG','16266','EPSG','2304','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16267','3-degree Gauss-Kruger zone 7','Also found with zone truncated from false easting: see Gauss-Kruger CM 21E (code 16304).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12252','conversion','EPSG','16267','EPSG','2305','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16268','3-degree Gauss-Kruger zone 8','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 24E (code 16368).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',8500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12253','conversion','EPSG','16268','EPSG','2306','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16269','3-degree Gauss-Kruger zone 9','Also found with zone truncated from false easting: see Gauss-Kruger CM 27E (code 16305).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',9500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12254','conversion','EPSG','16269','EPSG','2534','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16270','3-degree Gauss-Kruger zone 10','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 30E (code 16370).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',10500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12255','conversion','EPSG','16270','EPSG','2535','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16271','3-degree Gauss-Kruger zone 11','Also found with zone truncated from false easting: see Gauss-Kruger CM 33E (code 16306).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',11500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12256','conversion','EPSG','16271','EPSG','2536','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16272','3-degree Gauss-Kruger zone 12','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 36E (code 16372).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',12500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12257','conversion','EPSG','16272','EPSG','2537','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16273','3-degree Gauss-Kruger zone 13','Also found with zone truncated from false easting: see Gauss-Kruger CM 39E (code 16307).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',13500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12258','conversion','EPSG','16273','EPSG','2538','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16274','3-degree Gauss-Kruger zone 14','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger CM 42E (code 16374).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',42.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',14500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12259','conversion','EPSG','16274','EPSG','2539','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16275','3-degree Gauss-Kruger zone 15','Also found with zone truncated from false easting: see Gauss-Kruger CM 45E (code 16308).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',15500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12260','conversion','EPSG','16275','EPSG','2540','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16276','3-degree Gauss-Kruger zone 16','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 48E (code 16376). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',48.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',16500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12261','conversion','EPSG','16276','EPSG','2604','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16277','3-degree Gauss-Kruger zone 17','Also found with zone truncated from false easting: see Gauss-Kruger cm 51E (code 16309). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',17500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12262','conversion','EPSG','16277','EPSG','2605','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16278','3-degree Gauss-Kruger zone 18','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 54E (code 16378). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',54.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',18500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12263','conversion','EPSG','16278','EPSG','2606','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16279','3-degree Gauss-Kruger zone 19','Also found with zone truncated from false easting: see Gauss-Kruger cm 57E (code 16310). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',19500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12264','conversion','EPSG','16279','EPSG','2607','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16280','3-degree Gauss-Kruger zone 20','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 60E (code 16380). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',60.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12265','conversion','EPSG','16280','EPSG','2608','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16281','3-degree Gauss-Kruger zone 21','Also found with zone truncated from false easting: see Gauss-Kruger cm 63E (code 16311). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',21500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12266','conversion','EPSG','16281','EPSG','2609','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16282','3-degree Gauss-Kruger zone 22','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 66E (code 16382). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',66.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',22500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12267','conversion','EPSG','16282','EPSG','2610','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16283','3-degree Gauss-Kruger zone 23','Also found with zone truncated from false easting: see Gauss-Kruger cm 69E (code 16312). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',23500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12268','conversion','EPSG','16283','EPSG','2611','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16284','3-degree Gauss-Kruger zone 24','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 72E (code 16384). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',72.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',24500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12269','conversion','EPSG','16284','EPSG','2612','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16285','3-degree Gauss-Kruger zone 25','Also found with zone truncated from false easting: see Gauss-Kruger cm 75E (code 16313). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',25500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12270','conversion','EPSG','16285','EPSG','2613','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16286','3-degree Gauss-Kruger zone 26','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 78E (code 16386). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',78.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',26500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12271','conversion','EPSG','16286','EPSG','2614','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16287','3-degree Gauss-Kruger zone 27','Also found with zone truncated from false easting: see Gauss-Kruger cm 81E (code 16314). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',27500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12272','conversion','EPSG','16287','EPSG','2615','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16288','3-degree Gauss-Kruger zone 28','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 84E (code 16388). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',28500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12273','conversion','EPSG','16288','EPSG','2616','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16289','3-degree Gauss-Kruger zone 29','Also found with zone truncated from false easting: see Gauss-Kruger cm 87E (code 16315). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',29500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12274','conversion','EPSG','16289','EPSG','2617','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16290','3-degree Gauss-Kruger zone 30','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 90E (code 16390). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',30500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12275','conversion','EPSG','16290','EPSG','2618','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16291','3-degree Gauss-Kruger zone 31','Also found with zone truncated from false easting: see Gauss-Kruger cm 93E (code 16316). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',31500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12276','conversion','EPSG','16291','EPSG','2619','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16292','3-degree Gauss-Kruger zone 32','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 96E (code 16392). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',96.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',32500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12277','conversion','EPSG','16292','EPSG','2620','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16293','3-degree Gauss-Kruger zone 33','Also found with zone truncated from false easting: see Gauss-Kruger cm 99E (code 16317). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',33500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12278','conversion','EPSG','16293','EPSG','2621','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16294','3-degree Gauss-Kruger zone 34','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 102E (code 16394). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',102.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',34500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12279','conversion','EPSG','16294','EPSG','2622','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16295','3-degree Gauss-Kruger zone 35','Also found with zone truncated from false easting: see Gauss-Kruger cm 105E (code 16318). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',35500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12280','conversion','EPSG','16295','EPSG','2623','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16296','3-degree Gauss-Kruger zone 36','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 108E (code 16396). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',108.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',36500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12281','conversion','EPSG','16296','EPSG','2624','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16297','3-degree Gauss-Kruger zone 37','Also found with zone truncated from false easting: see Gauss-Kruger cm 111E (code 16319). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',37500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12282','conversion','EPSG','16297','EPSG','2625','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16298','3-degree Gauss-Kruger zone 38','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 114E (code 16398). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',38500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12283','conversion','EPSG','16298','EPSG','2626','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16299','3-degree Gauss-Kruger zone 39','Also found with zone truncated from false easting: see 3-degree Gauss-Kruger cm 117E (code 16320). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',39500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12284','conversion','EPSG','16299','EPSG','2627','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16301','Gauss-Kruger CM 3E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 1N (code 16201), or for a restricted longitude range 3-degree Gauss-Kruger zone 1N (code 16261). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12285','conversion','EPSG','16301','EPSG','1933','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16302','Gauss-Kruger CM 9E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 2N (code 16202).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12286','conversion','EPSG','16302','EPSG','1935','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16303','Gauss-Kruger CM 15E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 3N (code 16203).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12287','conversion','EPSG','16303','EPSG','1937','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16304','Gauss-Kruger CM 21E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 4N (code 16204).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12288','conversion','EPSG','16304','EPSG','1939','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16305','Gauss-Kruger CM 27E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 5N (code 16205).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12289','conversion','EPSG','16305','EPSG','1941','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16306','Gauss-Kruger CM 33E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 6N (code 16206).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12290','conversion','EPSG','16306','EPSG','1943','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16307','Gauss-Kruger CM 39E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 7N (code 16207).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12291','conversion','EPSG','16307','EPSG','1945','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16308','Gauss-Kruger CM 45E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 8N (code 16208).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12292','conversion','EPSG','16308','EPSG','1947','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16309','Gauss-Kruger CM 51E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 9N (code 16209).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12293','conversion','EPSG','16309','EPSG','1949','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16310','Gauss-Kruger CM 57E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 10N (code 16210).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12294','conversion','EPSG','16310','EPSG','1951','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16311','Gauss-Kruger CM 63E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 11N (code 16211).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12295','conversion','EPSG','16311','EPSG','1953','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16312','Gauss-Kruger CM 69E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 12N (code 16212).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12296','conversion','EPSG','16312','EPSG','1955','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16313','Gauss-Kruger CM 75E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 13N (code 16213).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12297','conversion','EPSG','16313','EPSG','1957','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16314','Gauss-Kruger CM 81E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 14N (code 16214).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12298','conversion','EPSG','16314','EPSG','1959','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16315','Gauss-Kruger CM 87E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 15N (code 16215).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12299','conversion','EPSG','16315','EPSG','1961','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16316','Gauss-Kruger CM 93E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 16N (code 16216).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12300','conversion','EPSG','16316','EPSG','1963','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16317','Gauss-Kruger CM 99E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 17N (code 16217).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12301','conversion','EPSG','16317','EPSG','1965','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16318','Gauss-Kruger CM 105E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 18N (code 16218).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12302','conversion','EPSG','16318','EPSG','1967','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16319','Gauss-Kruger CM 111E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 19N (code 16219).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12303','conversion','EPSG','16319','EPSG','1969','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16320','Gauss-Kruger CM 117E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 20N (code 16220).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12304','conversion','EPSG','16320','EPSG','1971','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16321','Gauss-Kruger CM 123E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 21N (code 16221).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12305','conversion','EPSG','16321','EPSG','1973','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16322','Gauss-Kruger CM 129E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 22N (code 16222).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12306','conversion','EPSG','16322','EPSG','1975','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16323','Gauss-Kruger CM 135E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 23N (code 16223).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12307','conversion','EPSG','16323','EPSG','1977','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16324','Gauss-Kruger CM 141E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 24N (code 16224).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12308','conversion','EPSG','16324','EPSG','1979','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16325','Gauss-Kruger CM 147E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 25N (code 16225).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12309','conversion','EPSG','16325','EPSG','1981','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16326','Gauss-Kruger CM 153E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 26N (code 16226).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12310','conversion','EPSG','16326','EPSG','1983','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16327','Gauss-Kruger CM 159E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 27N (code 16227).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12311','conversion','EPSG','16327','EPSG','1985','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16328','Gauss-Kruger CM 165E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 28N (code 16228).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12312','conversion','EPSG','16328','EPSG','1987','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16329','Gauss-Kruger CM 171E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 29N (code 16229).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12313','conversion','EPSG','16329','EPSG','1989','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16330','Gauss-Kruger CM 177E','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 30N (code 16230).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12314','conversion','EPSG','16330','EPSG','1991','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16331','Gauss-Kruger CM 177W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 31N (code 16231).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12315','conversion','EPSG','16331','EPSG','1873','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16332','Gauss-Kruger CM 171W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 32N (code 16232).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12316','conversion','EPSG','16332','EPSG','1875','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16333','Gauss-Kruger CM 165W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 33N (code 16233). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12317','conversion','EPSG','16333','EPSG','1877','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16334','Gauss-Kruger CM 159W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 34N (code 16234). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12318','conversion','EPSG','16334','EPSG','1879','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16335','Gauss-Kruger CM 153W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 35N (code 16235). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12319','conversion','EPSG','16335','EPSG','1881','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16336','Gauss-Kruger CM 147W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 36N (code 16236). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12320','conversion','EPSG','16336','EPSG','1883','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16337','Gauss-Kruger CM 141W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 37N (code 16237). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12321','conversion','EPSG','16337','EPSG','1885','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16338','Gauss-Kruger CM 135W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 38N (code 16238). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12322','conversion','EPSG','16338','EPSG','1887','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16339','Gauss-Kruger CM 129W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 39N (code 16239). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12323','conversion','EPSG','16339','EPSG','1889','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16340','Gauss-Kruger CM 123W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 40N (code 16240). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12324','conversion','EPSG','16340','EPSG','1891','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16341','Gauss-Kruger CM 117W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 41N (code 16241). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12325','conversion','EPSG','16341','EPSG','1893','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16342','Gauss-Kruger CM 111W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 42N (code 16242). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12326','conversion','EPSG','16342','EPSG','1895','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16343','Gauss-Kruger CM 105W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 43N (code 16243). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12327','conversion','EPSG','16343','EPSG','1897','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16344','Gauss-Kruger CM 99W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 44N (code 16244). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12328','conversion','EPSG','16344','EPSG','1899','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16345','Gauss-Kruger CM 93W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 45N (code 16245). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12329','conversion','EPSG','16345','EPSG','1901','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16346','Gauss-Kruger CM 87W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 46N (code 16246). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12330','conversion','EPSG','16346','EPSG','1903','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16347','Gauss-Kruger CM 81W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 47N (code 16247). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12331','conversion','EPSG','16347','EPSG','1905','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16348','Gauss-Kruger CM 75W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 48N (code 16248). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12332','conversion','EPSG','16348','EPSG','1907','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16349','Gauss-Kruger CM 69W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 49N (code 16249). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12333','conversion','EPSG','16349','EPSG','1909','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16350','Gauss-Kruger CM 63W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 50N (code 16250). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12334','conversion','EPSG','16350','EPSG','1911','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16351','Gauss-Kruger CM 57W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 51N (code 16251). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12335','conversion','EPSG','16351','EPSG','1913','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16352','Gauss-Kruger CM 51W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 52N (code 16252). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12336','conversion','EPSG','16352','EPSG','1915','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16353','Gauss-Kruger CM 45W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 53N (code 16253). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12337','conversion','EPSG','16353','EPSG','1917','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16354','Gauss-Kruger CM 39W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 54N (code 16254). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12338','conversion','EPSG','16354','EPSG','1919','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16355','Gauss-Kruger CM 33W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 55N (code 16255). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12339','conversion','EPSG','16355','EPSG','1921','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16356','Gauss-Kruger CM 27W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 56N (code 16256). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12340','conversion','EPSG','16356','EPSG','1923','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16357','Gauss-Kruger CM 21W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 57N (code 16257). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12341','conversion','EPSG','16357','EPSG','1925','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16358','Gauss-Kruger CM 15W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 58N (code 16258). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12342','conversion','EPSG','16358','EPSG','1927','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16359','Gauss-Kruger CM 9W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 59N (code 16259). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12343','conversion','EPSG','16359','EPSG','1929','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16360','Gauss-Kruger CM 3W','Usually used with zone prefix to FE - see 6-degree Gauss-Kruger zone 60N (code 16260). Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12344','conversion','EPSG','16360','EPSG','1931','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','16361','3-degree Gauss-Kruger CM 3E','3-degree Gauss-Kruger zone 1N (code 16261) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12345','conversion','EPSG','16361','EPSG','2299','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16362','3-degree Gauss-Kruger CM 6E','3-degree Gauss-Kruger zone 2N (code 16262) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',6.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12346','conversion','EPSG','16362','EPSG','2300','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16363','3-degree Gauss-Kruger CM 9E','3-degree Gauss-Kruger zone 3N (code 16263) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12347','conversion','EPSG','16363','EPSG','2301','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16364','3-degree Gauss-Kruger CM 12E','3-degree Gauss-Kruger zone 4N (code 16264) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12348','conversion','EPSG','16364','EPSG','2302','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16365','3-degree Gauss-Kruger CM 15E','3-degree Gauss-Kruger zone 5N (code 16265) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12349','conversion','EPSG','16365','EPSG','2303','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16366','3-degree Gauss-Kruger CM 18E','3-degree Gauss-Kruger zone 6N (code 16266) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12350','conversion','EPSG','16366','EPSG','2304','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16367','3-degree Gauss-Kruger CM 21E','3-degree Gauss-Kruger zone 7N (code 16267) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12351','conversion','EPSG','16367','EPSG','2305','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16368','3-degree Gauss-Kruger CM 24E','3-degree Gauss-Kruger zone 8N (code 16268) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12352','conversion','EPSG','16368','EPSG','2306','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16369','3-degree Gauss-Kruger CM 27E','3-degree Gauss-Kruger zone 9N (code 16269) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12353','conversion','EPSG','16369','EPSG','2534','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16370','3-degree Gauss-Kruger CM 30E','3-degree Gauss-Kruger zone 10N (code 16270) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12354','conversion','EPSG','16370','EPSG','2535','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16371','3-degree Gauss-Kruger CM 33E','3-degree Gauss-Kruger zone 11N (code 16271) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12355','conversion','EPSG','16371','EPSG','2536','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16372','3-degree Gauss-Kruger CM 36E','3-degree Gauss-Kruger zone 12N (code 16272) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12356','conversion','EPSG','16372','EPSG','2537','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16373','3-degree Gauss-Kruger CM 39E','3-degree Gauss-Kruger zone 13N (code 16273) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12357','conversion','EPSG','16373','EPSG','2538','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16374','3-degree Gauss-Kruger CM 42E','3-degree Gauss-Kruger zone 14N (code 16274) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',42.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12358','conversion','EPSG','16374','EPSG','2539','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16375','3-degree Gauss-Kruger CM 45E','3-degree Gauss-Kruger zone 15N (code 16275) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12359','conversion','EPSG','16375','EPSG','2540','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16376','3-degree Gauss-Kruger CM 48E','3-degree Gauss-Kruger zone 16N (code 16276) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',48.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12360','conversion','EPSG','16376','EPSG','2604','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16377','3-degree Gauss-Kruger CM 51E','3-degree Gauss-Kruger zone 17N (code 16277) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12361','conversion','EPSG','16377','EPSG','2605','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16378','3-degree Gauss-Kruger CM 54E','3-degree Gauss-Kruger zone 18N (code 16278) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',54.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12362','conversion','EPSG','16378','EPSG','2606','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16379','3-degree Gauss-Kruger CM 57E','3-degree Gauss-Kruger zone 19N (code 16279) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12363','conversion','EPSG','16379','EPSG','2607','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16380','3-degree Gauss-Kruger CM 60E','3-degree Gauss-Kruger zone 20N (code 16280) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',60.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12364','conversion','EPSG','16380','EPSG','2608','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16381','3-degree Gauss-Kruger CM 63E','3-degree Gauss-Kruger zone 21N (code 16281) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12365','conversion','EPSG','16381','EPSG','2609','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16382','3-degree Gauss-Kruger CM 66E','3-degree Gauss-Kruger zone 22N (code 16282) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',66.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12366','conversion','EPSG','16382','EPSG','2610','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16383','3-degree Gauss-Kruger CM 69E','3-degree Gauss-Kruger zone 23N (code 16283) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12367','conversion','EPSG','16383','EPSG','2611','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16384','3-degree Gauss-Kruger CM 72E','3-degree Gauss-Kruger zone 24N (code 16284) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',72.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12368','conversion','EPSG','16384','EPSG','2612','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16385','3-degree Gauss-Kruger CM 75E','3-degree Gauss-Kruger zone 25N (code 16285) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12369','conversion','EPSG','16385','EPSG','2613','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16386','3-degree Gauss-Kruger CM 78E','3-degree Gauss-Kruger zone 26N (code 16286) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',78.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12370','conversion','EPSG','16386','EPSG','2614','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16387','3-degree Gauss-Kruger CM 81E','3-degree Gauss-Kruger zone 27N (code 16287) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12371','conversion','EPSG','16387','EPSG','2615','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16388','3-degree Gauss-Kruger CM 84E','3-degree Gauss-Kruger zone 28N (code 16288) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12372','conversion','EPSG','16388','EPSG','2616','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16389','3-degree Gauss-Kruger CM 87E','3-degree Gauss-Kruger zone 29N (code 16289) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12373','conversion','EPSG','16389','EPSG','2617','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16390','3-degree Gauss-Kruger CM 90E','3-degree Gauss-Kruger zone 30N (code 16290) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12374','conversion','EPSG','16390','EPSG','2618','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16391','3-degree Gauss-Kruger CM 93E','3-degree Gauss-Kruger zone 31N (code 16291) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12375','conversion','EPSG','16391','EPSG','2619','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16392','3-degree Gauss-Kruger CM 96E','3-degree Gauss-Kruger zone 32N (code 16292) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',96.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12376','conversion','EPSG','16392','EPSG','2620','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16393','3-degree Gauss-Kruger CM 99E','3-degree Gauss-Kruger zone 33N (code 16293) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12377','conversion','EPSG','16393','EPSG','2621','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16394','3-degree Gauss-Kruger CM 102E','3-degree Gauss-Kruger zone 34N (code 16294) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',102.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12378','conversion','EPSG','16394','EPSG','2622','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16395','3-degree Gauss-Kruger CM 105E','3-degree Gauss-Kruger zone 35N (code 16295) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12379','conversion','EPSG','16395','EPSG','2623','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16396','3-degree Gauss-Kruger CM 108E','3-degree Gauss-Kruger zone 36N (code 16296) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',108.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12380','conversion','EPSG','16396','EPSG','2624','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16397','3-degree Gauss-Kruger CM 111E','3-degree Gauss-Kruger zone 37N (code 16297) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12381','conversion','EPSG','16397','EPSG','2625','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16398','3-degree Gauss-Kruger CM 114E','3-degree Gauss-Kruger zone 38N (code 16298) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12382','conversion','EPSG','16398','EPSG','2626','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16399','3-degree Gauss-Kruger CM 117E','3-degree Gauss-Kruger zone 39N (code 16299) without zone prefix to false easting value. Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12383','conversion','EPSG','16399','EPSG','2627','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16400','TM 0 N','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12384','conversion','EPSG','16400','EPSG','1629','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16405','TM 5 NE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',5.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12385','conversion','EPSG','16405','EPSG','1630','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16406','TM 6 NE','Used by ExxonMobil in Nigeria beyond the contintental shelf. Used by Total in French Mediterranean and with effect from March 2004 all areas offshore Nigeria.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',6.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12386','conversion','EPSG','16406','EPSG','3914','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16411','TM 11 NE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',11.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12387','conversion','EPSG','16411','EPSG','1489','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16412','TM 12 NE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12388','conversion','EPSG','16412','EPSG','1482','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16413','TM 13 NE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',13.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12389','conversion','EPSG','16413','EPSG','2771','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16430','TM 30 NE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12390','conversion','EPSG','16430','EPSG','2546','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16490','TM 90 NE','Not part of the global UTM grid system.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12391','conversion','EPSG','16490','EPSG','1041','EPSG','1136'); INSERT INTO "usage" VALUES('EPSG','14845','conversion','EPSG','16490','EPSG','3217','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','16506','TM 106 NE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',106.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12392','conversion','EPSG','16506','EPSG','1495','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16586','GK 106 NE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',106.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12393','conversion','EPSG','16586','EPSG','1494','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16611','TM 11.30 SE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',11.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12394','conversion','EPSG','16611','EPSG','1605','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16612','TM 12 SE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12395','conversion','EPSG','16612','EPSG','1604','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16636','TM 36 SE','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12396','conversion','EPSG','16636','EPSG','1726','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16709','TM 109 SE','Used by Arco and BP for ONWJ.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',109.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12397','conversion','EPSG','16709','EPSG','2577','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16716','TM 116 SE','Used by BP for Terang-Sirasun.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',116.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12398','conversion','EPSG','16716','EPSG','2588','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16732','TM 132 SE','Used for Tangguh developments.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',132.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12399','conversion','EPSG','16732','EPSG','2589','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','16907','GSK 3-degree Gauss-Kruger zone 7','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 21E (code 17107).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',7250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16011','conversion','EPSG','16907','EPSG','2305','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16908','GSK 3-degree Gauss-Kruger zone 8','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 24E (code 17108).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',8250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16015','conversion','EPSG','16908','EPSG','2748','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16909','GSK 3-degree Gauss-Kruger zone 9','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 27E (code 17109).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',9250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16016','conversion','EPSG','16909','EPSG','2749','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16910','GSK 3-degree Gauss-Kruger zone 10','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 30E (code 17110).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',10250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16017','conversion','EPSG','16910','EPSG','2535','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16911','GSK 3-degree Gauss-Kruger zone 11','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 33E (code 17111).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',11250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16018','conversion','EPSG','16911','EPSG','2751','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16912','GSK 3-degree Gauss-Kruger zone 12','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 36E (code 17112).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',12250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16019','conversion','EPSG','16912','EPSG','2752','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16913','GSK 3-degree Gauss-Kruger zone 13','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 39E (code 17113).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',13250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16020','conversion','EPSG','16913','EPSG','2753','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16914','GSK 3-degree Gauss-Kruger zone 14','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 42E (code 17114).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',42.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',14250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16021','conversion','EPSG','16914','EPSG','2754','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16915','GSK 3-degree Gauss-Kruger zone 15','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 45E (code 17115).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',15250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16022','conversion','EPSG','16915','EPSG','2755','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16916','GSK 3-degree Gauss-Kruger zone 16','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 48E (code 17116).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',48.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',16250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16023','conversion','EPSG','16916','EPSG','2756','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16917','GSK 3-degree Gauss-Kruger zone 17','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 51E (code 17117).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',17250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16024','conversion','EPSG','16917','EPSG','2757','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16918','GSK 3-degree Gauss-Kruger zone 18','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 54E (code 17118).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',54.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',18250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16025','conversion','EPSG','16918','EPSG','2758','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16919','GSK 3-degree Gauss-Kruger zone 19','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 57E (code 17119).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',19250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16026','conversion','EPSG','16919','EPSG','2759','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16920','GSK 3-degree Gauss-Kruger zone 20','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 60E (code 17120).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',60.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16027','conversion','EPSG','16920','EPSG','2760','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16921','GSK 3-degree Gauss-Kruger zone 21','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 63E (code 17121).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',21250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16028','conversion','EPSG','16921','EPSG','2609','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16922','GSK 3-degree Gauss-Kruger zone 22','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 66E (code 17122).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',66.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',22250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15917','conversion','EPSG','16922','EPSG','2762','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16923','GSK 3-degree Gauss-Kruger zone 23','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 69E (code 17123).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',23250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15916','conversion','EPSG','16923','EPSG','2763','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16924','GSK 3-degree Gauss-Kruger zone 24','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 72E (code 17124).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',72.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',24250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15915','conversion','EPSG','16924','EPSG','2764','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16925','GSK 3-degree Gauss-Kruger zone 25','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 75E (code 17125).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',25250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15914','conversion','EPSG','16925','EPSG','2765','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16926','GSK 3-degree Gauss-Kruger zone 26','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 78E (code 17126).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',78.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',26250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15913','conversion','EPSG','16926','EPSG','2766','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16927','GSK 3-degree Gauss-Kruger zone 27','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 81E (code 17127).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',27250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15912','conversion','EPSG','16927','EPSG','2767','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16928','GSK 3-degree Gauss-Kruger zone 28','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 84E (code 17128).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',28250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15911','conversion','EPSG','16928','EPSG','2768','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16929','GSK 3-degree Gauss-Kruger zone 29','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 87E (code 17129).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',29250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15910','conversion','EPSG','16929','EPSG','2769','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16930','GSK 3-degree Gauss-Kruger zone 30','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 90E (code 17130).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',30250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15909','conversion','EPSG','16930','EPSG','2676','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16931','GSK 3-degree Gauss-Kruger zone 31','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 93E (code 17131).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',31250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15908','conversion','EPSG','16931','EPSG','2677','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16932','GSK 3-degree Gauss-Kruger zone 32','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 96E (code 17132).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',96.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',32250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15907','conversion','EPSG','16932','EPSG','2678','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16933','GSK 3-degree Gauss-Kruger zone 33','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 99E (code 17133).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',33250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15925','conversion','EPSG','16933','EPSG','2679','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16934','GSK 3-degree Gauss-Kruger zone 34','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 102E (code 17134).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',102.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',34250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15926','conversion','EPSG','16934','EPSG','2680','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16935','GSK 3-degree Gauss-Kruger zone 35','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 105E (code 17135).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',35250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15927','conversion','EPSG','16935','EPSG','2681','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16936','GSK 3-degree Gauss-Kruger zone 36','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 108E (code 17136).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',108.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',36250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15928','conversion','EPSG','16936','EPSG','2682','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16937','GSK 3-degree Gauss-Kruger zone 37','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 111E (code 17137).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',37250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15938','conversion','EPSG','16937','EPSG','2683','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16938','GSK 3-degree Gauss-Kruger zone 38','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 114E (code 17138).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',38250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15939','conversion','EPSG','16938','EPSG','2684','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16939','GSK 3-degree Gauss-Kruger zone 39','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 117E (code 17139).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',39250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15940','conversion','EPSG','16939','EPSG','2685','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16940','GSK 3-degree Gauss-Kruger zone 40','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 120E (code 17140).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',120.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',40250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15941','conversion','EPSG','16940','EPSG','2686','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16941','GSK 3-degree Gauss-Kruger zone 41','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 123E (code 17141).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',41250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15942','conversion','EPSG','16941','EPSG','2687','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16942','GSK 3-degree Gauss-Kruger zone 42','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 126E (code 17142).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',126.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',42250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15943','conversion','EPSG','16942','EPSG','2688','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16943','GSK 3-degree Gauss-Kruger zone 43','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 129E (code 17143).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',43250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15944','conversion','EPSG','16943','EPSG','2689','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16944','GSK 3-degree Gauss-Kruger zone 44','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 132E (code 17144).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',132.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',44250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15945','conversion','EPSG','16944','EPSG','2690','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16945','GSK 3-degree Gauss-Kruger zone 45','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 135E (code 17145).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',45250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15946','conversion','EPSG','16945','EPSG','2691','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16946','GSK 3-degree Gauss-Kruger zone 46','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 138E (code 17146).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',138.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',46250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15947','conversion','EPSG','16946','EPSG','2692','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16947','GSK 3-degree Gauss-Kruger zone 47','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 141E (code 17147).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',47250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15948','conversion','EPSG','16947','EPSG','2693','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16948','GSK 3-degree Gauss-Kruger zone 48','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 144E (code 17148).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',48250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15949','conversion','EPSG','16948','EPSG','2694','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16949','GSK 3-degree Gauss-Kruger zone 49','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 147E (code 17149).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',49250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15950','conversion','EPSG','16949','EPSG','2695','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16950','GSK 3-degree Gauss-Kruger zone 50','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 150E (code 17150).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',50250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15951','conversion','EPSG','16950','EPSG','2696','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16951','GSK 3-degree Gauss-Kruger zone 51','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 153E (code 17151).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',51250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15983','conversion','EPSG','16951','EPSG','2697','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16952','GSK 3-degree Gauss-Kruger zone 52','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 156E (code 17152).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',156.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',52250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15984','conversion','EPSG','16952','EPSG','2698','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16953','GSK 3-degree Gauss-Kruger zone 53','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 159E (code 17153).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',53250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15985','conversion','EPSG','16953','EPSG','2699','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16954','GSK 3-degree Gauss-Kruger zone 54','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 162E (code 17154).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',162.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',54250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15986','conversion','EPSG','16954','EPSG','2700','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16955','GSK 3-degree Gauss-Kruger zone 55','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 165E (code 17155).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',55250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15987','conversion','EPSG','16955','EPSG','2701','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16956','GSK 3-degree Gauss-Kruger zone 56','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 168E (code 17156).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',56250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15988','conversion','EPSG','16956','EPSG','2702','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16957','GSK 3-degree Gauss-Kruger zone 57','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 171E (code 17157).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',57250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15989','conversion','EPSG','16957','EPSG','2703','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16958','GSK 3-degree Gauss-Kruger zone 58','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 174E (code 17158).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',58250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15990','conversion','EPSG','16958','EPSG','2704','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16959','GSK 3-degree Gauss-Kruger zone 59','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 177E (code 17159).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',59250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15994','conversion','EPSG','16959','EPSG','2705','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16960','GSK 3-degree Gauss-Kruger zone 60','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 180 (code 17160).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',180.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',60250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15991','conversion','EPSG','16960','EPSG','2706','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16961','GSK 3-degree Gauss-Kruger zone 61','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 177W (code 17161).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',61250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15992','conversion','EPSG','16961','EPSG','2707','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16962','GSK 3-degree Gauss-Kruger zone 62','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 174W (code 17162).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',62250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15993','conversion','EPSG','16962','EPSG','2708','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16963','GSK 3-degree Gauss-Kruger zone 63','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 171W (code 17163).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',63250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15995','conversion','EPSG','16963','EPSG','2709','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','16964','GSK 3-degree Gauss-Kruger zone 64','Also found with zone truncated from false easting: see GSK 3-degree Gauss-Kruger CM 168W (code 17164).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',64250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15996','conversion','EPSG','16964','EPSG','2710','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17001','TM 1 NW','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-1.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12400','conversion','EPSG','17001','EPSG','1505','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','17005','TM 5 NW','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-5.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12401','conversion','EPSG','17005','EPSG','2296','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','17054','TM 54 NW','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-54.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12402','conversion','EPSG','17054','EPSG','1727','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','17107','GSK 3-degree Gauss-Kruger CM 21E','GSK 3-degree Gauss-Kruger zone 7N (code 16907) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16012','conversion','EPSG','17107','EPSG','2305','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17108','GSK 3-degree Gauss-Kruger CM 24E','GSK 3-degree Gauss-Kruger zone 8N (code 16908) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16029','conversion','EPSG','17108','EPSG','2748','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17109','GSK 3-degree Gauss-Kruger CM 27E','GSK 3-degree Gauss-Kruger zone 9N (code 16909) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16030','conversion','EPSG','17109','EPSG','2749','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17110','GSK 3-degree Gauss-Kruger CM 30E','GSK 3-degree Gauss-Kruger zone 10N (code 16910) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16031','conversion','EPSG','17110','EPSG','2750','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17111','GSK 3-degree Gauss-Kruger CM 33E','GSK 3-degree Gauss-Kruger zone 11N (code 16911) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16032','conversion','EPSG','17111','EPSG','2751','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17112','GSK 3-degree Gauss-Kruger CM 36E','GSK 3-degree Gauss-Kruger zone 12N (code 16912) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16033','conversion','EPSG','17112','EPSG','2752','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17113','GSK 3-degree Gauss-Kruger CM 39E','GSK 3-degree Gauss-Kruger zone 13N (code 16913) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16034','conversion','EPSG','17113','EPSG','2753','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17114','GSK 3-degree Gauss-Kruger CM 42E','GSK 3-degree Gauss-Kruger zone 14N (code 16914) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',42.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16035','conversion','EPSG','17114','EPSG','2754','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17115','GSK 3-degree Gauss-Kruger CM 45E','GSK 3-degree Gauss-Kruger zone 15N (code 16915) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16036','conversion','EPSG','17115','EPSG','2755','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17116','GSK 3-degree Gauss-Kruger CM 48E','GSK 3-degree Gauss-Kruger zone 16N (code 16916) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',48.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16037','conversion','EPSG','17116','EPSG','2756','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17117','GSK 3-degree Gauss-Kruger CM 51E','GSK 3-degree Gauss-Kruger zone 17N (code 16917) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16040','conversion','EPSG','17117','EPSG','2757','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17118','GSK 3-degree Gauss-Kruger CM 54E','GSK 3-degree Gauss-Kruger zone 18N (code 16918) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',54.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16041','conversion','EPSG','17118','EPSG','2758','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17119','GSK 3-degree Gauss-Kruger CM 57E','GSK 3-degree Gauss-Kruger zone 19N (code 16919) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16039','conversion','EPSG','17119','EPSG','2759','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17120','GSK 3-degree Gauss-Kruger CM 60E','GSK 3-degree Gauss-Kruger zone 20N (code 16920) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',60.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16038','conversion','EPSG','17120','EPSG','2760','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17121','GSK 3-degree Gauss-Kruger CM 63E','GSK 3-degree Gauss-Kruger zone 21N (code 16921) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16042','conversion','EPSG','17121','EPSG','2761','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17122','GSK 3-degree Gauss-Kruger CM 66E','GSK 3-degree Gauss-Kruger zone 22N (code 16922) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',66.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15933','conversion','EPSG','17122','EPSG','2762','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17123','GSK 3-degree Gauss-Kruger CM 69E','GSK 3-degree Gauss-Kruger zone 23N (code 16923) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15937','conversion','EPSG','17123','EPSG','2763','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17124','GSK 3-degree Gauss-Kruger CM 72E','GSK 3-degree Gauss-Kruger zone 24N (code 16924) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',72.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15936','conversion','EPSG','17124','EPSG','2764','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17125','GSK 3-degree Gauss-Kruger CM 75E','GSK 3-degree Gauss-Kruger zone 25N (code 16925) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15935','conversion','EPSG','17125','EPSG','2765','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17126','GSK 3-degree Gauss-Kruger CM 78E','GSK 3-degree Gauss-Kruger zone 26N (code 16926) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',78.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15934','conversion','EPSG','17126','EPSG','2766','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17127','GSK 3-degree Gauss-Kruger CM 81E','GSK 3-degree Gauss-Kruger zone 27N (code 16927) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15932','conversion','EPSG','17127','EPSG','2767','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17128','GSK 3-degree Gauss-Kruger CM 84E','GSK 3-degree Gauss-Kruger zone 28N (code 16928) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15931','conversion','EPSG','17128','EPSG','2768','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17129','GSK 3-degree Gauss-Kruger CM 87E','GSK 3-degree Gauss-Kruger zone 29N (code 16929) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15930','conversion','EPSG','17129','EPSG','2769','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17130','GSK 3-degree Gauss-Kruger CM 90E','GSK 3-degree Gauss-Kruger zone 30N (code 16930) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15929','conversion','EPSG','17130','EPSG','2676','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17131','GSK 3-degree Gauss-Kruger CM 93E','GSK 3-degree Gauss-Kruger zone 31N (code 16931) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15923','conversion','EPSG','17131','EPSG','2677','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17132','GSK 3-degree Gauss-Kruger CM 96E','GSK 3-degree Gauss-Kruger zone 32N (code 16932) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',96.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15924','conversion','EPSG','17132','EPSG','2678','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17133','GSK 3-degree Gauss-Kruger CM 99E','GSK 3-degree Gauss-Kruger zone 33N (code 16933) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',99.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15921','conversion','EPSG','17133','EPSG','2679','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17134','GSK 3-degree Gauss-Kruger CM 102E','GSK 3-degree Gauss-Kruger zone 34N (code 16934) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',102.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15920','conversion','EPSG','17134','EPSG','2680','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17135','GSK 3-degree Gauss-Kruger CM 105E','GSK 3-degree Gauss-Kruger zone 35N (code 16935) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15919','conversion','EPSG','17135','EPSG','2681','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17136','GSK 3-degree Gauss-Kruger CM 108E','GSK 3-degree Gauss-Kruger zone 36N (code 16936) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',108.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15918','conversion','EPSG','17136','EPSG','2682','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17137','GSK 3-degree Gauss-Kruger CM 111E','GSK 3-degree Gauss-Kruger zone 37N (code 16937) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15953','conversion','EPSG','17137','EPSG','2683','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17138','GSK 3-degree Gauss-Kruger CM 114E','GSK 3-degree Gauss-Kruger zone 38N (code 16938) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15954','conversion','EPSG','17138','EPSG','2684','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17139','GSK 3-degree Gauss-Kruger CM 117E','GSK 3-degree Gauss-Kruger zone 39N (code 16939) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15955','conversion','EPSG','17139','EPSG','2685','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17140','GSK 3-degree Gauss-Kruger CM 120E','GSK 3-degree Gauss-Kruger zone 40N (code 16940) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',120.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15956','conversion','EPSG','17140','EPSG','2686','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17141','GSK 3-degree Gauss-Kruger CM 123E','GSK 3-degree Gauss-Kruger zone 41N (code 16941) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15957','conversion','EPSG','17141','EPSG','2687','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17142','GSK 3-degree Gauss-Kruger CM 126E','GSK 3-degree Gauss-Kruger zone 42N (code 16942) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',126.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15958','conversion','EPSG','17142','EPSG','2688','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17143','GSK 3-degree Gauss-Kruger CM 129E','GSK 3-degree Gauss-Kruger zone 43N (code 16943) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15959','conversion','EPSG','17143','EPSG','2689','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17144','GSK 3-degree Gauss-Kruger CM 132E','GSK 3-degree Gauss-Kruger zone 44N (code 16944) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',132.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15960','conversion','EPSG','17144','EPSG','2690','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17145','GSK 3-degree Gauss-Kruger CM 135E','GSK 3-degree Gauss-Kruger zone 45N (code 16945) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15961','conversion','EPSG','17145','EPSG','2691','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17146','GSK 3-degree Gauss-Kruger CM 138E','GSK 3-degree Gauss-Kruger zone 46N (code 16946) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',138.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15962','conversion','EPSG','17146','EPSG','2692','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17147','GSK 3-degree Gauss-Kruger CM 141E','GSK 3-degree Gauss-Kruger zone 47N (code 16947) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15963','conversion','EPSG','17147','EPSG','2693','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17148','GSK 3-degree Gauss-Kruger CM 144E','GSK 3-degree Gauss-Kruger zone 48N (code 16948) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15964','conversion','EPSG','17148','EPSG','2694','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17149','GSK 3-degree Gauss-Kruger CM 147E','GSK 3-degree Gauss-Kruger zone 49N (code 16949) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15965','conversion','EPSG','17149','EPSG','2695','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17150','GSK 3-degree Gauss-Kruger CM 150E','GSK 3-degree Gauss-Kruger zone 50N (code 16950) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15966','conversion','EPSG','17150','EPSG','2696','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17151','GSK 3-degree Gauss-Kruger CM 153E','GSK 3-degree Gauss-Kruger zone 51N (code 16951) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15997','conversion','EPSG','17151','EPSG','2697','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17152','GSK 3-degree Gauss-Kruger CM 156E','GSK 3-degree Gauss-Kruger zone 52N (code 16952) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',156.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15998','conversion','EPSG','17152','EPSG','2698','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17153','GSK 3-degree Gauss-Kruger CM 159E','GSK 3-degree Gauss-Kruger zone 53N (code 16953) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15999','conversion','EPSG','17153','EPSG','2699','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17154','GSK 3-degree Gauss-Kruger CM 162E','GSK 3-degree Gauss-Kruger zone 54N (code 16954) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',162.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16000','conversion','EPSG','17154','EPSG','2700','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17155','GSK 3-degree Gauss-Kruger CM 165E','GSK 3-degree Gauss-Kruger zone 55N (code 16955) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16001','conversion','EPSG','17155','EPSG','2701','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17156','GSK 3-degree Gauss-Kruger CM 168E','GSK 3-degree Gauss-Kruger zone 56N (code 16956) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16002','conversion','EPSG','17156','EPSG','2702','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17157','GSK 3-degree Gauss-Kruger CM 171E','GSK 3-degree Gauss-Kruger zone 57N (code 16957) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16003','conversion','EPSG','17157','EPSG','2703','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17158','GSK 3-degree Gauss-Kruger CM 174E','GSK 3-degree Gauss-Kruger zone 58N (code 16958) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16004','conversion','EPSG','17158','EPSG','2704','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17159','GSK 3-degree Gauss-Kruger CM 177E','GSK 3-degree Gauss-Kruger zone 59N (code 16959) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16005','conversion','EPSG','17159','EPSG','2705','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17160','GSK 3-degree Gauss-Kruger CM 180E','GSK 3-degree Gauss-Kruger zone 60N (code 16960) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',180.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16482','conversion','EPSG','17160','EPSG','2706','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17161','GSK 3-degree Gauss-Kruger CM 177W','GSK 3-degree Gauss-Kruger zone 61N (code 16961) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16007','conversion','EPSG','17161','EPSG','2707','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17162','GSK 3-degree Gauss-Kruger CM 174W','GSK 3-degree Gauss-Kruger zone 62N (code 16962) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-174.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16008','conversion','EPSG','17162','EPSG','2708','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17163','GSK 3-degree Gauss-Kruger CM 171W','GSK 3-degree Gauss-Kruger zone 63N (code 16963) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16009','conversion','EPSG','17163','EPSG','2709','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17164','GSK 3-degree Gauss-Kruger CM 168W','GSK 3-degree Gauss-Kruger zone 64N (code 16964) without zone prefix to false easting value.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-168.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16010','conversion','EPSG','17164','EPSG','2710','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17204','SCAR IMW SP19-20','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-60.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-63.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12403','conversion','EPSG','17204','EPSG','2991','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17205','SCAR IMW SP21-22','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-54.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-60.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-63.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12404','conversion','EPSG','17205','EPSG','2992','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17206','SCAR IMW SP23-24','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-42.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-60.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-63.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12405','conversion','EPSG','17206','EPSG','2993','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17207','SCAR IMW SQ01-02','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-174.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12406','conversion','EPSG','17207','EPSG','2994','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17208','SCAR IMW SQ19-20','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12407','conversion','EPSG','17208','EPSG','2995','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17209','SCAR IMW SQ21-22','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-54.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12408','conversion','EPSG','17209','EPSG','2996','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17210','SCAR IMW SQ37-38','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',42.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12409','conversion','EPSG','17210','EPSG','2997','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17211','SCAR IMW SQ39-40','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',54.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12410','conversion','EPSG','17211','EPSG','2998','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17212','SCAR IMW SQ41-42','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',66.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12411','conversion','EPSG','17212','EPSG','2999','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17213','SCAR IMW SQ43-44','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',78.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12412','conversion','EPSG','17213','EPSG','3000','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17214','SCAR IMW SQ45-46','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12413','conversion','EPSG','17214','EPSG','3001','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17215','SCAR IMW SQ47-48','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',102.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12414','conversion','EPSG','17215','EPSG','3002','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17216','SCAR IMW SQ49-50','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',114.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12415','conversion','EPSG','17216','EPSG','3003','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17217','SCAR IMW SQ51-52','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',126.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12416','conversion','EPSG','17217','EPSG','3004','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17218','SCAR IMW SQ53-54','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',138.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12417','conversion','EPSG','17218','EPSG','3005','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17219','SCAR IMW SQ55-56','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',150.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12418','conversion','EPSG','17219','EPSG','3006','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17220','SCAR IMW SQ57-58','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',162.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-64.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-67.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12419','conversion','EPSG','17220','EPSG','3007','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17221','SCAR IMW SR13-14','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-102.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12420','conversion','EPSG','17221','EPSG','3008','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17222','SCAR IMW SR15-16','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12421','conversion','EPSG','17222','EPSG','3009','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17223','SCAR IMW SR17-18','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12422','conversion','EPSG','17223','EPSG','3010','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17224','SCAR IMW SR19-20','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12423','conversion','EPSG','17224','EPSG','3011','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17225','SCAR IMW SR27-28','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-18.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12424','conversion','EPSG','17225','EPSG','3012','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17226','SCAR IMW SR29-30','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-6.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12425','conversion','EPSG','17226','EPSG','3013','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17227','SCAR IMW SR31-32','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',6.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12426','conversion','EPSG','17227','EPSG','3014','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17228','SCAR IMW SR33-34','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',18.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12427','conversion','EPSG','17228','EPSG','3015','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17229','SCAR IMW SR35-36','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',30.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12428','conversion','EPSG','17229','EPSG','3016','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17230','SCAR IMW SR37-38','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',42.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12429','conversion','EPSG','17230','EPSG','3017','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17231','SCAR IMW SR39-40','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',54.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12430','conversion','EPSG','17231','EPSG','3018','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17232','SCAR IMW SR41-42','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',66.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12431','conversion','EPSG','17232','EPSG','3019','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17233','SCAR IMW SR43-44','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',78.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12432','conversion','EPSG','17233','EPSG','3020','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17234','SCAR IMW SR45-46','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12433','conversion','EPSG','17234','EPSG','3021','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17235','SCAR IMW SR47-48','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',102.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12434','conversion','EPSG','17235','EPSG','3022','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17236','SCAR IMW SR49-50','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',114.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12435','conversion','EPSG','17236','EPSG','3023','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17237','SCAR IMW SR51-52','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',126.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12436','conversion','EPSG','17237','EPSG','3024','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17238','SCAR IMW SR53-54','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',138.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12437','conversion','EPSG','17238','EPSG','3025','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17239','SCAR IMW SR55-56','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',150.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12438','conversion','EPSG','17239','EPSG','3026','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17240','SCAR IMW SR57-58','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',162.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12439','conversion','EPSG','17240','EPSG','3027','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17241','SCAR IMW SR59-60','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',174.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-68.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-71.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12440','conversion','EPSG','17241','EPSG','3028','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17242','SCAR IMW SS04-06','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-153.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12441','conversion','EPSG','17242','EPSG','3029','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17243','SCAR IMW SS07-09','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-135.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12442','conversion','EPSG','17243','EPSG','3030','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17244','SCAR IMW SS10-12','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-117.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12443','conversion','EPSG','17244','EPSG','3031','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17245','SCAR IMW SS13-15','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12444','conversion','EPSG','17245','EPSG','3032','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17246','SCAR IMW SS16-18','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12445','conversion','EPSG','17246','EPSG','3033','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17247','SCAR IMW SS19-21','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-63.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12446','conversion','EPSG','17247','EPSG','3034','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17248','SCAR IMW SS25-27','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-27.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12447','conversion','EPSG','17248','EPSG','3035','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17249','SCAR IMW SS28-30','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-9.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12448','conversion','EPSG','17249','EPSG','3036','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17250','SCAR IMW SS31-33','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',9.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12449','conversion','EPSG','17250','EPSG','3037','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17251','SCAR IMW SS34-36','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',27.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12450','conversion','EPSG','17251','EPSG','3038','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17252','SCAR IMW SS37-39','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',45.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12451','conversion','EPSG','17252','EPSG','3039','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17253','SCAR IMW SS40-42','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',63.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12452','conversion','EPSG','17253','EPSG','3040','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17254','SCAR IMW SS43-45','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12453','conversion','EPSG','17254','EPSG','3041','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17255','SCAR IMW SS46-48','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',99.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12454','conversion','EPSG','17255','EPSG','3042','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17256','SCAR IMW SS49-51','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',117.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12455','conversion','EPSG','17256','EPSG','3043','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17257','SCAR IMW SS52-54','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',135.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12456','conversion','EPSG','17257','EPSG','3044','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17258','SCAR IMW SS55-57','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',153.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12457','conversion','EPSG','17258','EPSG','3045','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17259','SCAR IMW SS58-60','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',171.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-72.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-75.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12458','conversion','EPSG','17259','EPSG','3046','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17260','SCAR IMW ST01-04','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-168.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12459','conversion','EPSG','17260','EPSG','3047','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17261','SCAR IMW ST05-08','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-144.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12460','conversion','EPSG','17261','EPSG','3048','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17262','SCAR IMW ST09-12','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12461','conversion','EPSG','17262','EPSG','3049','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17263','SCAR IMW ST13-16','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12462','conversion','EPSG','17263','EPSG','3050','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17264','SCAR IMW ST17-20','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-72.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12463','conversion','EPSG','17264','EPSG','3051','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17265','SCAR IMW ST21-24','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-48.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12464','conversion','EPSG','17265','EPSG','3052','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17266','SCAR IMW ST25-28','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-24.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12465','conversion','EPSG','17266','EPSG','3053','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17267','SCAR IMW ST29-32','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',0.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12466','conversion','EPSG','17267','EPSG','3054','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17268','SCAR IMW ST33-36','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',24.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12467','conversion','EPSG','17268','EPSG','3055','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17269','SCAR IMW ST37-40','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',48.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12468','conversion','EPSG','17269','EPSG','3056','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17270','SCAR IMW ST41-44','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',72.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12469','conversion','EPSG','17270','EPSG','3057','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17271','SCAR IMW ST45-48','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12470','conversion','EPSG','17271','EPSG','3058','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17272','SCAR IMW ST49-52','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12471','conversion','EPSG','17272','EPSG','3059','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17273','SCAR IMW ST53-56','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',144.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12472','conversion','EPSG','17273','EPSG','3060','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17274','SCAR IMW ST57-60','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',168.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12473','conversion','EPSG','17274','EPSG','3061','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17275','SCAR IMW SU01-05','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-165.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12474','conversion','EPSG','17275','EPSG','3062','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17276','SCAR IMW SU06-10','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-135.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12475','conversion','EPSG','17276','EPSG','3063','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17277','SCAR IMW SU11-15','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-105.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12476','conversion','EPSG','17277','EPSG','3064','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17278','SCAR IMW SU16-20','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-75.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12477','conversion','EPSG','17278','EPSG','3065','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17279','SCAR IMW SU21-25','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-45.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12478','conversion','EPSG','17279','EPSG','3066','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17280','SCAR IMW SU26-30','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-15.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12479','conversion','EPSG','17280','EPSG','3067','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17281','SCAR IMW SU31-35','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',15.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12480','conversion','EPSG','17281','EPSG','3068','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17282','SCAR IMW SU36-40','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',45.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12481','conversion','EPSG','17282','EPSG','3069','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17283','SCAR IMW SU41-45','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',75.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12482','conversion','EPSG','17283','EPSG','3070','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17284','SCAR IMW SU46-50','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',105.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12483','conversion','EPSG','17284','EPSG','3071','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17285','SCAR IMW SU51-55','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',135.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12484','conversion','EPSG','17285','EPSG','3072','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17286','SCAR IMW SU56-60','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',165.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12485','conversion','EPSG','17286','EPSG','3073','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17287','SCAR IMW SV01-10','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12486','conversion','EPSG','17287','EPSG','3074','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17288','SCAR IMW SV11-20','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12487','conversion','EPSG','17288','EPSG','3075','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17289','SCAR IMW SV21-30','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',-30.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12488','conversion','EPSG','17289','EPSG','3076','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17290','SCAR IMW SV31-40','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',30.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12489','conversion','EPSG','17290','EPSG','3077','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17291','SCAR IMW SV41-50','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12490','conversion','EPSG','17291','EPSG','3078','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17292','SCAR IMW SV51-60','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12491','conversion','EPSG','17292','EPSG','3079','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17293','SCAR IMW SW01-60','After: Sievers, J. and H. Bennat (1989). "Reference systems of maps and geographic information systems of Antarctica." Antarctic Science 1(4): 351-362.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-80.1419,'EPSG','9110','EPSG','8833','Longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12492','conversion','EPSG','17293','EPSG','3080','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','17294','USGS Transantarctic Mountains','USGS mapping of Transantarctic mountains.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-78.0,'EPSG','9102','EPSG','8822','Longitude of false origin',162.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12493','conversion','EPSG','17294','EPSG','3081','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','17295','North Pole Lambert Azimuthal Equal Area (Bering Sea)','For studies of Bering Sea area.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',180.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12494','conversion','EPSG','17295','EPSG','3480','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','17296','North Pole Lambert Azimuthal Equal Area (Alaska)','For studies of Alaskan area.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12495','conversion','EPSG','17296','EPSG','3480','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','17297','North Pole Lambert Azimuthal Equal Area (Canada)','For studies of Canadian area.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-100.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12496','conversion','EPSG','17297','EPSG','3480','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','17298','North Pole Lambert Azimuthal Equal Area (Atlantic)','For studies of North Atlantic and Greenland area.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-40.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12497','conversion','EPSG','17298','EPSG','3480','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','17299','North Pole Lambert Azimuthal Equal Area (Europe)','For studies of north European area.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12498','conversion','EPSG','17299','EPSG','3480','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','17300','North Pole Lambert Azimuthal Equal Area (Russia)','For studies of Russian area.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12499','conversion','EPSG','17300','EPSG','3480','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','17321','SWEREF99 12 00','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12500','conversion','EPSG','17321','EPSG','2833','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17322','SWEREF99 13 30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12501','conversion','EPSG','17322','EPSG','2834','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17323','SWEREF99 15 00','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12502','conversion','EPSG','17323','EPSG','2835','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17324','SWEREF99 16 30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12503','conversion','EPSG','17324','EPSG','2836','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17325','SWEREF99 18 00','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12504','conversion','EPSG','17325','EPSG','2837','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17326','SWEREF99 14 15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',14.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12505','conversion','EPSG','17326','EPSG','2838','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17327','SWEREF99 15 45','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',15.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12506','conversion','EPSG','17327','EPSG','2839','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17328','SWEREF99 17 15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',17.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12507','conversion','EPSG','17328','EPSG','2840','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17329','SWEREF99 18 45','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12508','conversion','EPSG','17329','EPSG','2841','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17330','SWEREF99 20 15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',20.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12509','conversion','EPSG','17330','EPSG','2842','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17331','SWEREF99 21 45','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',21.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12510','conversion','EPSG','17331','EPSG','2843','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17332','SWEREF99 23 15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',23.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12511','conversion','EPSG','17332','EPSG','2844','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','17333','SWEREF99 TM','Projection parameters are identical to UTM zone 33N. Unlike UTM zone 33N, the SWREF99 TM is used throughout all Sweden.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12512','conversion','EPSG','17333','EPSG','1225','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','17334','Sweden zone 7.5 gon V','At the municipal level alternative projections are found defined with different sets of False Northing and Easting, based on 100 km grid squares. This is denoted by the last part of the name.  For example 61:-1 means FN = -6100000 and FE = 100000 m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',11.18298,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12513','conversion','EPSG','17334','EPSG','2845','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17335','Sweden zone 5 gon V','At the municipal level alternative projections are found defined with different sets of False Northing and Easting, based on 100 km grid squares. This is denoted by the last part of the name.  For example 61:-1 means FN = -6100000 and FE = 100000 m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.33298,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12514','conversion','EPSG','17335','EPSG','2846','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17336','Sweden zone 0 gon','At the municipal level alternative projections are found defined with different sets of False Northing and Easting, based on 100 km grid squares. This is denoted by the last part of the name.  For example 61:-1 means FN = -6100000 and FE = 100000 m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.03298,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12515','conversion','EPSG','17336','EPSG','2848','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17337','Sweden zone 2.5 gon O','At the municipal level alternative projections are found defined with different sets of False Northing and Easting, based on 100 km grid squares. This is denoted by the last part of the name.  For example 61:-1 means FN = -6100000 and FE = 100000 m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',20.18298,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12516','conversion','EPSG','17337','EPSG','2849','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17338','Sweden zone 5 gon O','At the municipal level alternative projections are found defined with different sets of False Northing and Easting, based on 100 km grid squares. This is denoted by the last part of the name.  For example 61:-1 means FN = -6100000 and FE = 100000 m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',22.33298,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12517','conversion','EPSG','17338','EPSG','2850','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17339','RT90 zone 7.5 gon V emulation','This projection embeds an approximation to 0.2m accuracy of the Sweref99 and WGS 84 to RT90 transformations (tfm codes 1895 and 1896).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',11.18225,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000006,'EPSG','9201','EPSG','8806','False easting',1500025.141,'EPSG','9001','EPSG','8807','False northing',-667.282,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12518','conversion','EPSG','17339','EPSG','2845','EPSG','1230'); INSERT INTO "conversion" VALUES('EPSG','17340','RT90 zone 5 gon V emulation','This projection embeds an approximation to 0.2m accuracy of the Sweref99 and WGS 84 to RT90 transformations (tfm codes 1895 and 1896).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.332256,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000058,'EPSG','9201','EPSG','8806','False easting',1500044.695,'EPSG','9001','EPSG','8807','False northing',-667.13,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12519','conversion','EPSG','17340','EPSG','2846','EPSG','1230'); INSERT INTO "conversion" VALUES('EPSG','17341','RT90 zone 2.5 gon V emulation','This projection embeds an approximation to 0.2m accuracy of the Sweref99 and WGS 84 to RT90 transformations (tfm codes 1895 and 1896).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',15.4822624306,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.00000561024,'EPSG','9201','EPSG','8806','False easting',1500064.274,'EPSG','9001','EPSG','8807','False northing',-667.711,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12520','conversion','EPSG','17341','EPSG','2847','EPSG','1230'); INSERT INTO "conversion" VALUES('EPSG','17342','RT90 zone 0 gon emulation','This projection embeds an approximation to 0.2m accuracy of the Sweref99 and WGS 84 to RT90 transformations (tfm codes 1895 and 1896).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.032268,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000054,'EPSG','9201','EPSG','8806','False easting',1500083.521,'EPSG','9001','EPSG','8807','False northing',-668.844,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12521','conversion','EPSG','17342','EPSG','2848','EPSG','1230'); INSERT INTO "conversion" VALUES('EPSG','17343','RT90 zone 2.5 gon O emulation','This projection embeds an approximation to 0.2m accuracy of the Sweref99 and WGS 84 to RT90 transformations (tfm codes 1895 and 1896).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',20.182274,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000052,'EPSG','9201','EPSG','8806','False easting',1500102.765,'EPSG','9001','EPSG','8807','False northing',-670.706,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12522','conversion','EPSG','17343','EPSG','2849','EPSG','1230'); INSERT INTO "conversion" VALUES('EPSG','17344','RT90 zone 5 gon O emulation','This projection embeds an approximation to 0.2m accuracy of the Sweref99 and WGS 84 to RT90 transformations (tfm codes 1895 and 1896).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',22.33228,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000049,'EPSG','9201','EPSG','8806','False easting',1500121.846,'EPSG','9001','EPSG','8807','False northing',-672.557,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12523','conversion','EPSG','17344','EPSG','2850','EPSG','1230'); INSERT INTO "conversion" VALUES('EPSG','17348','Map Grid of Australia zone 48','Grid convergence uses opposite sign convention to UTM. Note: From 2012-01 to 2014-02 (v7.9.4 to v8.3.3) this record status = deprecated as area falls outside EEZ. Reinstated as valid on ratification of limit of Australian continental shelf beyond EEZ.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12524','conversion','EPSG','17348','EPSG','4191','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17349','Map Grid of Australia zone 49','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12525','conversion','EPSG','17349','EPSG','4176','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17350','Map Grid of Australia zone 50','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12526','conversion','EPSG','17350','EPSG','4178','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17351','Map Grid of Australia zone 51','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12527','conversion','EPSG','17351','EPSG','1559','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17352','Map Grid of Australia zone 52','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12528','conversion','EPSG','17352','EPSG','1560','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17353','Map Grid of Australia zone 53','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12529','conversion','EPSG','17353','EPSG','1561','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17354','Map Grid of Australia zone 54','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12530','conversion','EPSG','17354','EPSG','1562','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17355','Map Grid of Australia zone 55','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12531','conversion','EPSG','17355','EPSG','1563','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17356','Map Grid of Australia zone 56','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12532','conversion','EPSG','17356','EPSG','1564','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17357','Map Grid of Australia zone 57','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12533','conversion','EPSG','17357','EPSG','4196','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17358','Map Grid of Australia zone 58','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12534','conversion','EPSG','17358','EPSG','4175','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17359','South Australia Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-32.0,'EPSG','9102','EPSG','8822','Longitude of false origin',135.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-28.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-36.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12535','conversion','EPSG','17359','EPSG','2986','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','17360','Vicgrid66','May also be used to display Victoria, New South Wales, Tasmania and South Australia as a single entity. Replaced by Vicgrid94 with effect from 2nd February 2000. Prior to 2000 this projection was known as VICGRID.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',145.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-38.0,'EPSG','9102','EPSG','8826','Easting at false origin',2500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12536','conversion','EPSG','17360','EPSG','2285','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','17361','Vicgrid','May also be used to display Victoria, New South Wales, Tasmania and South Australia as a single entity. Replaces Vicgrid66 with effect from 2nd February 2000.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',145.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-38.0,'EPSG','9102','EPSG','8826','Easting at false origin',2500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12537','conversion','EPSG','17361','EPSG','2285','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','17362','Geoscience Australia Standard National Scale Lambert Projection','Created by Australian Geological Survey Organisation prior to incorporation into Auslig. See also ACRESLC (proj code 4460).','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',134.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-18.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-36.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12538','conversion','EPSG','17362','EPSG','2575','EPSG','1236'); INSERT INTO "conversion" VALUES('EPSG','17363','Brisbane City Survey Grid 02','Replaced by BCGS2020 (code 10147) from 2022-07-01.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-28.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12539','conversion','EPSG','17363','EPSG','2990','EPSG','1029'); INSERT INTO "conversion" VALUES('EPSG','17364','New South Wales Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-33.25,'EPSG','9102','EPSG','8822','Longitude of false origin',147.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-30.75,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-35.75,'EPSG','9102','EPSG','8826','Easting at false origin',9300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12540','conversion','EPSG','17364','EPSG','3139','EPSG','1135'); INSERT INTO "conversion" VALUES('EPSG','17365','Australian Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',132.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-18.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-36.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12541','conversion','EPSG','17365','EPSG','2575','EPSG','1162'); INSERT INTO "conversion" VALUES('EPSG','17401','Katanga Lambert Conformal','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',26.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-6.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-11.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12542','conversion','EPSG','17401','EPSG','3147','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','17402','Katanga Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-9.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',26.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12543','conversion','EPSG','17402','EPSG','3147','EPSG','1054'); INSERT INTO "conversion" VALUES('EPSG','17412','Congo Transverse Mercator zone 12','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12544','conversion','EPSG','17412','EPSG','3937','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17414','Congo Transverse Mercator zone 14','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',14.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12545','conversion','EPSG','17414','EPSG','3151','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17416','Congo Transverse Mercator zone 16','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',16.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12546','conversion','EPSG','17416','EPSG','3152','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17418','Congo Transverse Mercator zone 18','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12547','conversion','EPSG','17418','EPSG','3153','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17420','Congo Transverse Mercator zone 20','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',20.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12548','conversion','EPSG','17420','EPSG','3154','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17422','Congo Transverse Mercator zone 22','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',22.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12549','conversion','EPSG','17422','EPSG','3155','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17424','Congo Transverse Mercator zone 24','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12550','conversion','EPSG','17424','EPSG','3156','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17426','Congo Transverse Mercator zone 26','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',26.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12551','conversion','EPSG','17426','EPSG','3157','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17428','Congo Transverse Mercator zone 28','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',28.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12552','conversion','EPSG','17428','EPSG','3158','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17430','Congo Transverse Mercator zone 30','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12553','conversion','EPSG','17430','EPSG','3159','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','17432','Indonesia TM-3 zone 46.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',94.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12554','conversion','EPSG','17432','EPSG','3976','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17433','Indonesia TM-3 zone 47.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',97.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12555','conversion','EPSG','17433','EPSG','3510','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17434','Indonesia TM-3 zone 47.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',100.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12556','conversion','EPSG','17434','EPSG','3511','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17435','Indonesia TM-3 zone 48.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',103.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12557','conversion','EPSG','17435','EPSG','3512','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17436','Indonesia TM-3 zone 48.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',106.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12558','conversion','EPSG','17436','EPSG','3513','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17437','Indonesia TM-3 zone 49.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',109.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12559','conversion','EPSG','17437','EPSG','3514','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17438','Indonesia TM-3 zone 49.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',112.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12560','conversion','EPSG','17438','EPSG','3515','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17439','Indonesia TM-3 zone 50.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',115.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12561','conversion','EPSG','17439','EPSG','3516','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17440','Indonesia TM-3 zone 50.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',118.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12562','conversion','EPSG','17440','EPSG','3517','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17441','Indonesia TM-3 zone 51.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',121.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12563','conversion','EPSG','17441','EPSG','3518','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17442','Indonesia TM-3 zone 51.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',124.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12564','conversion','EPSG','17442','EPSG','3519','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17443','Indonesia TM-3 zone 52.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12565','conversion','EPSG','17443','EPSG','3520','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17444','Indonesia TM-3 zone 52.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',130.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12566','conversion','EPSG','17444','EPSG','3521','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17445','Indonesia TM-3 zone 53.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',133.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12567','conversion','EPSG','17445','EPSG','3522','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17446','Indonesia TM-3 zone 53.2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',136.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12568','conversion','EPSG','17446','EPSG','3523','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17447','Indonesia TM-3 zone 54.1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',139.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',1500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12569','conversion','EPSG','17447','EPSG','3975','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17448','Australian Map Grid zone 48','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12570','conversion','EPSG','17448','EPSG','1556','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17449','Australian Map Grid zone 49','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12571','conversion','EPSG','17449','EPSG','1557','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17450','Australian Map Grid zone 50','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12572','conversion','EPSG','17450','EPSG','1558','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17451','Australian Map Grid zone 51','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12573','conversion','EPSG','17451','EPSG','1559','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17452','Australian Map Grid zone 52','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12574','conversion','EPSG','17452','EPSG','1560','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17453','Australian Map Grid zone 53','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12575','conversion','EPSG','17453','EPSG','1561','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17454','Australian Map Grid zone 54','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12576','conversion','EPSG','17454','EPSG','1567','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17455','Australian Map Grid zone 55','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12577','conversion','EPSG','17455','EPSG','1568','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17456','Australian Map Grid zone 56','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12578','conversion','EPSG','17456','EPSG','2291','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17457','Australian Map Grid zone 57','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12579','conversion','EPSG','17457','EPSG','1565','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17458','Australian Map Grid zone 58','Grid convergence uses opposite sign convention to UTM','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12580','conversion','EPSG','17458','EPSG','1566','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17515','South African Survey Grid zone 15','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12581','conversion','EPSG','17515','EPSG','1454','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17517','South African Survey Grid zone 17','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',17.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12582','conversion','EPSG','17517','EPSG','1455','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17519','South African Survey Grid zone 19','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12583','conversion','EPSG','17519','EPSG','1456','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17521','South African Survey Grid zone 21','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12584','conversion','EPSG','17521','EPSG','1457','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17523','South African Survey Grid zone 23','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12585','conversion','EPSG','17523','EPSG','1458','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17525','South African Survey Grid zone 25','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12586','conversion','EPSG','17525','EPSG','1459','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17527','South African Survey Grid zone 27','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12587','conversion','EPSG','17527','EPSG','1460','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17529','South African Survey Grid zone 29','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',29.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12588','conversion','EPSG','17529','EPSG','1461','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17531','South African Survey Grid zone 31','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12589','conversion','EPSG','17531','EPSG','1462','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17533','South African Survey Grid zone 33','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12590','conversion','EPSG','17533','EPSG','1463','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17611','South West African Survey Grid zone 11','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',11.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12591','conversion','EPSG','17611','EPSG','1838','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17613','South West African Survey Grid zone 13','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',13.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12592','conversion','EPSG','17613','EPSG','1839','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17615','South West African Survey Grid zone 15','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12593','conversion','EPSG','17615','EPSG','1840','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17617','South West African Survey Grid zone 17','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',17.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12594','conversion','EPSG','17617','EPSG','1841','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17619','South West African Survey Grid zone 19','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12595','conversion','EPSG','17619','EPSG','1842','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17621','South West African Survey Grid zone 21','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12596','conversion','EPSG','17621','EPSG','1843','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17623','South West African Survey Grid zone 23','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12597','conversion','EPSG','17623','EPSG','1844','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17625','South West African Survey Grid zone 25','Transformation method sometimes described as "Gauss conform".','EPSG','9808','Transverse Mercator (South Orientated)','EPSG','8801','Latitude of natural origin',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9031','EPSG','8807','False northing',0.0,'EPSG','9031',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12598','conversion','EPSG','17625','EPSG','1845','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17700','MTM Quebec zone 2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-55.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12599','conversion','EPSG','17700','EPSG','1420','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17701','MTM zone 1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-53.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12600','conversion','EPSG','17701','EPSG','2226','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17702','MTM zone 2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-56.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12601','conversion','EPSG','17702','EPSG','2227','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17703','MTM zone 3','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-58.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12602','conversion','EPSG','17703','EPSG','2290','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17704','MTM zone 4','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-61.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12603','conversion','EPSG','17704','EPSG','2276','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17705','MTM zone 5','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-64.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12604','conversion','EPSG','17705','EPSG','2277','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17706','MTM zone 6','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-67.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12605','conversion','EPSG','17706','EPSG','2278','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17707','MTM zone 7','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12606','conversion','EPSG','17707','EPSG','1425','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17708','MTM zone 8','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-73.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12607','conversion','EPSG','17708','EPSG','2279','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17709','MTM zone 9','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12608','conversion','EPSG','17709','EPSG','2280','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17710','MTM zone 10','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-79.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12609','conversion','EPSG','17710','EPSG','2281','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17711','MTM zone 11','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12610','conversion','EPSG','17711','EPSG','1432','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17712','MTM zone 12','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12611','conversion','EPSG','17712','EPSG','1433','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17713','MTM zone 13','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12612','conversion','EPSG','17713','EPSG','1434','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17714','MTM zone 14','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12613','conversion','EPSG','17714','EPSG','1435','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17715','MTM zone 15','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12614','conversion','EPSG','17715','EPSG','1436','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17716','MTM zone 16','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12615','conversion','EPSG','17716','EPSG','1437','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17717','MTM zone 17','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-96.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',304800.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12616','conversion','EPSG','17717','EPSG','1438','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17722','Alberta 3-degree TM reference meridian 111 W','If used for rural area control markers, area of use is amended to east of 112°W; however use of UTM encouraged in these areas.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12617','conversion','EPSG','17722','EPSG','3543','EPSG','1096'); INSERT INTO "conversion" VALUES('EPSG','17723','Alberta 3-degree TM reference meridian 114 W','If used for rural area control markers, area of use is amended to between 112° and 116°W; however use of UTM encouraged in these areas.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12618','conversion','EPSG','17723','EPSG','3542','EPSG','1096'); INSERT INTO "conversion" VALUES('EPSG','17724','Alberta 3-degree TM reference meridian 117 W','If used for rural area control markers, area of use is amended to between 116° and 118° W; however use of UTM encouraged in these areas.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12619','conversion','EPSG','17724','EPSG','3541','EPSG','1096'); INSERT INTO "conversion" VALUES('EPSG','17725','Alberta 3-degree TM reference meridian 120 W','If used for rural area control markers, area of use is amended to west of 118 deg W; however use of UTM encouraged in these areas.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-120.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9001','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12620','conversion','EPSG','17725','EPSG','3540','EPSG','1096'); INSERT INTO "conversion" VALUES('EPSG','17726','Alberta 3-degree TM reference meridian 120 W','If used for rural area control markers, area of use is amended to west of 118°W; however use of UTM encouraged in these areas.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-120.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12621','conversion','EPSG','17726','EPSG','3540','EPSG','1096'); INSERT INTO "conversion" VALUES('EPSG','17771','Equi7 projection - Africa','Basis for the Equi7 grid for Africa. Designed in 2014 to efficiently handle the archiving, processing, and displaying of high resolution raster data over land while preserving geometric accuracy. The projection is neither conformal nor equal-area.','EPSG','1125','Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',8.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.5,'EPSG','9102','EPSG','8806','False easting',5621452.02,'EPSG','9001','EPSG','8807','False northing',5990638.423,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20872','conversion','EPSG','17771','EPSG','4745','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','17772','Equi7 projection - Antarctica','Basis for the Equi7 grid for Antarctica. Designed in 2014 to efficiently handle the archiving, processing, and displaying of high resolution raster data over land while preserving geometric accuracy. The projection is neither conformal nor equal-area.','EPSG','1125','Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',3714266.977,'EPSG','9001','EPSG','8807','False northing',3402016.506,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20873','conversion','EPSG','17772','EPSG','4746','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','17773','Equi7 projection - Asia','Basis for the Equi7 grid for Asia. Designed in 2014 to efficiently handle the archiving, processing, and displaying of high resolution raster data over land while preserving geometric accuracy. The projection is neither conformal nor equal-area.','EPSG','1125','Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',47.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',94.0,'EPSG','9102','EPSG','8806','False easting',4340913.848,'EPSG','9001','EPSG','8807','False northing',4812712.923,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20874','conversion','EPSG','17773','EPSG','4747','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','17774','Equi7 projection - Europe','Basis for the Equi7 grid for Europe. Designed in 2014 to efficiently handle the archiving, processing, and displaying of high resolution raster data over land while preserving geometric accuracy. The projection is neither conformal nor equal-area.','EPSG','1125','Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',53.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8806','False easting',5837287.82,'EPSG','9001','EPSG','8807','False northing',2121415.696,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20875','conversion','EPSG','17774','EPSG','4748','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','17775','Equi7 projection - North America','Basis for the Equi7 grid for North America. Designed in 2014 to efficiently handle the archiving, processing, and displaying of high resolution raster data over land while preserving geometric accuracy. The projection is neither conformal nor equal-area.','EPSG','1125','Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-97.5,'EPSG','9102','EPSG','8806','False easting',8264722.177,'EPSG','9001','EPSG','8807','False northing',4867518.353,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20876','conversion','EPSG','17775','EPSG','4749','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','17776','Equi7 projection - Oceania','Basis for the Equi7 grid for Oceania. Designed in 2014 to efficiently handle the archiving, processing, and displaying of high resolution raster data over land while preserving geometric accuracy. The projection is neither conformal nor equal-area.','EPSG','1125','Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',-19.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',131.5,'EPSG','9102','EPSG','8806','False easting',6988408.536,'EPSG','9001','EPSG','8807','False northing',7654884.537,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20877','conversion','EPSG','17776','EPSG','4751','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','17777','Equi7 projection - South America','Basis for the Equi7 grid for South America. Designed in 2014 to efficiently handle the archiving, processing, and displaying of high resolution raster data over land while preserving geometric accuracy. The projection is neither conformal nor equal-area.','EPSG','1125','Azimuthal Equidistant','EPSG','8801','Latitude of natural origin',-14.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-60.5,'EPSG','9102','EPSG','8806','False easting',7257179.236,'EPSG','9001','EPSG','8807','False northing',5592024.446,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20878','conversion','EPSG','17777','EPSG','4750','EPSG','1287'); INSERT INTO "conversion" VALUES('EPSG','17794','MTM Nova Scotia zone 4','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-61.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',4500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12622','conversion','EPSG','17794','EPSG','1534','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17795','MTM Nova Scotia zone 5','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-64.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12623','conversion','EPSG','17795','EPSG','1535','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17801','Japan Plane Rectangular CS zone I','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',129.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12624','conversion','EPSG','17801','EPSG','1854','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17802','Japan Plane Rectangular CS zone II','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',131.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12625','conversion','EPSG','17802','EPSG','1855','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17803','Japan Plane Rectangular CS zone III','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',132.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12626','conversion','EPSG','17803','EPSG','1856','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17804','Japan Plane Rectangular CS zone IV','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',133.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12627','conversion','EPSG','17804','EPSG','1857','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17805','Japan Plane Rectangular CS zone V','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',134.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12628','conversion','EPSG','17805','EPSG','1858','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17806','Japan Plane Rectangular CS zone VI','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',136.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12629','conversion','EPSG','17806','EPSG','1859','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17807','Japan Plane Rectangular CS zone VII','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',137.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12630','conversion','EPSG','17807','EPSG','1860','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17808','Japan Plane Rectangular CS zone VIII','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',138.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12631','conversion','EPSG','17808','EPSG','1861','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17809','Japan Plane Rectangular CS zone IX','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',139.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12632','conversion','EPSG','17809','EPSG','1862','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17810','Japan Plane Rectangular CS zone X','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',140.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12633','conversion','EPSG','17810','EPSG','1863','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17811','Japan Plane Rectangular CS zone XI','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',140.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12634','conversion','EPSG','17811','EPSG','1864','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17812','Japan Plane Rectangular CS zone XII','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',142.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12635','conversion','EPSG','17812','EPSG','1865','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17813','Japan Plane Rectangular CS zone XIII','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',144.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12636','conversion','EPSG','17813','EPSG','1866','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17814','Japan Plane Rectangular CS zone XIV','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',142.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12637','conversion','EPSG','17814','EPSG','1867','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17815','Japan Plane Rectangular CS zone XV','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',127.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12638','conversion','EPSG','17815','EPSG','1868','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17816','Japan Plane Rectangular CS zone XVI','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',124.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12639','conversion','EPSG','17816','EPSG','1869','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17817','Japan Plane Rectangular CS zone XVII','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',131.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12640','conversion','EPSG','17817','EPSG','1870','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17818','Japan Plane Rectangular CS zone XVIII','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',20.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',136.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12641','conversion','EPSG','17818','EPSG','1871','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17819','Japan Plane Rectangular CS zone XIX','Original transformation by Gauss-Kruger formula.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',154.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12642','conversion','EPSG','17819','EPSG','1872','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','17901','Mount Eden Circuit','Replaced Imperial measure circuit in 1972. Replaced by Mount Eden 2000 (code 17931) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-36.5247515,'EPSG','9110','EPSG','8802','Longitude of natural origin',174.45516217,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12643','conversion','EPSG','17901','EPSG','3781','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17902','Bay of Plenty Circuit','Replaced Imperial measure circuit in 1972. Replaced by Bay of Plenty 2000 (code 17932) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-37.45404993,'EPSG','9110','EPSG','8802','Longitude of natural origin',176.27583101,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12644','conversion','EPSG','17902','EPSG','3779','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17903','Poverty Bay Circuit','Replaced Imperial measure circuit in 1972. Replaced by Poverty Bay 2000 (code 17933) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-38.372893,'EPSG','9110','EPSG','8802','Longitude of natural origin',177.53082906,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12645','conversion','EPSG','17903','EPSG','3780','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17904','Hawkes Bay Circuit','Replaced Imperial measure circuit in 1972. Replaced by Hawkes Bay 2000 (code 17934) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-39.39033455,'EPSG','9110','EPSG','8802','Longitude of natural origin',176.40252499,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12646','conversion','EPSG','17904','EPSG','3772','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17905','Taranaki Circuit','Replaced Imperial measure circuit in 1972. Replaced by Taranaki 2000 (code 17935) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-39.08087299,'EPSG','9110','EPSG','8802','Longitude of natural origin',174.13408423,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12647','conversion','EPSG','17905','EPSG','3777','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17906','Tuhirangi Circuit','Replaced Imperial measure circuit in 1972. Replaced by Tuhirangi 2000 (code 17936) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-39.30448934,'EPSG','9110','EPSG','8802','Longitude of natural origin',175.38241325,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12648','conversion','EPSG','17906','EPSG','3778','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17907','Wanganui Circuit','Replaced Imperial measure circuit in 1972. Replaced by Wanganui 2000 (code 17937) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-40.14310097,'EPSG','9110','EPSG','8802','Longitude of natural origin',175.29171586,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12649','conversion','EPSG','17907','EPSG','3776','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17908','Wairarapa Circuit','Replaced Imperial measure circuit in 1972. Replaced by Wairarapa 2000 (code 17938) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-40.55319175,'EPSG','9110','EPSG','8802','Longitude of natural origin',175.38504588,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12650','conversion','EPSG','17908','EPSG','3775','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17909','Wellington Circuit','Replaced Imperial measure circuit in 1972. Replaced by Wellington 2000 (code 17939) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.18047507,'EPSG','9110','EPSG','8802','Longitude of natural origin',174.46358432,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12651','conversion','EPSG','17909','EPSG','3774','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17910','Collingwood Circuit','Replaced Imperial measure circuit in 1972. Replaced by Collingwood 2000 (code 17940) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-40.42531326,'EPSG','9110','EPSG','8802','Longitude of natural origin',172.40193674,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12652','conversion','EPSG','17910','EPSG','3782','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17911','Nelson Circuit','Replaced Imperial measure circuit in 1972. Replaced by Nelson 2000 (code 17941) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.1628361,'EPSG','9110','EPSG','8802','Longitude of natural origin',173.17575405,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12653','conversion','EPSG','17911','EPSG','3784','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17912','Karamea Circuit','Replaced Imperial measure circuit in 1972. Replaced by Karamea 2000 (code 17942) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.17236815,'EPSG','9110','EPSG','8802','Longitude of natural origin',172.06325015,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12654','conversion','EPSG','17912','EPSG','3783','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17913','Buller Circuit','Replaced Imperial measure circuit in 1972. Replaced by Buller 2000 (code 17943) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.48388903,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.34525362,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12655','conversion','EPSG','17913','EPSG','3786','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17914','Grey Circuit','Replaced Imperial measure circuit in 1972. Replaced by Grey 2000 (code 17944) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-42.20012994,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.32591767,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12656','conversion','EPSG','17914','EPSG','3787','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17915','Amuri Circuit','Replaced Imperial measure circuit in 1972. Replaced by Amuri 2000 (code 17945) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-42.41208197,'EPSG','9110','EPSG','8802','Longitude of natural origin',173.00364802,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12657','conversion','EPSG','17915','EPSG','3788','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17916','Marlborough Circuit','Replaced Imperial measure circuit in 1972. Replaced by Marlborough 2000 (code 17946) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.3240152,'EPSG','9110','EPSG','8802','Longitude of natural origin',173.48074668,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12658','conversion','EPSG','17916','EPSG','3785','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17917','Hokitika Circuit','Replaced Imperial measure circuit in 1972. Replaced by Hokitika 2000 (code 17947) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-42.53107605,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.58479766,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12659','conversion','EPSG','17917','EPSG','3789','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17918','Okarito Circuit','Replaced Imperial measure circuit in 1972. Replaced by Okarito 2000 (code 17948) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.06364613,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.1539333,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12660','conversion','EPSG','17918','EPSG','3791','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17919','Jacksons Bay Circuit','Replaced Imperial measure circuit in 1972. Replaced by Jacksons Bay 2000 (code 17949) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.58400904,'EPSG','9110','EPSG','8802','Longitude of natural origin',168.36225612,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12661','conversion','EPSG','17919','EPSG','3794','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17920','Mount Pleasant Circuit','Replaced Imperial measure circuit in 1972. Replaced by Mount Pleasant 2000 (code 17950) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.35262953,'EPSG','9110','EPSG','8802','Longitude of natural origin',172.43378969,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12662','conversion','EPSG','17920','EPSG','3790','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17921','Gawler Circuit','Replaced Imperial measure circuit in 1972. Replaced by Gawler 2000 (code 17951) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.44553616,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.21386945,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12663','conversion','EPSG','17921','EPSG','3792','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17922','Timaru Circuit','Replaced Imperial measure circuit in 1972. Replaced by Timaru 2000 (code 17952) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.24079933,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.0326103,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12664','conversion','EPSG','17922','EPSG','3793','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17923','Lindis Peak Circuit','Replaced Imperial measure circuit in 1972. Replaced by Lindis Peak 2000 (code 17953) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.44069647,'EPSG','9110','EPSG','8802','Longitude of natural origin',169.28039183,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12665','conversion','EPSG','17923','EPSG','3795','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17924','Mount Nicholas Circuit','Replaced Imperial measure circuit in 1972. Replaced by Mount Nicholas 2000 (code 17954) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.07584493,'EPSG','9110','EPSG','8802','Longitude of natural origin',168.23551083,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12666','conversion','EPSG','17924','EPSG','3797','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17925','Mount York Circuit','Replaced Imperial measure circuit in 1972. Replaced by Mount York 2000 (code 17955) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.33494142,'EPSG','9110','EPSG','8802','Longitude of natural origin',167.44199024,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12667','conversion','EPSG','17925','EPSG','3799','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17926','Observation Point Circuit','Replaced Imperial measure circuit in 1972. Replaced by Observation Point 2000 (code 17956) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.48583078,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.37429426,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12668','conversion','EPSG','17926','EPSG','3796','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17927','North Taieri Circuit','Replaced Imperial measure circuit in 1972. Replaced by North Taieri 2000 (code 17957) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.51414481,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.16573208,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12669','conversion','EPSG','17927','EPSG','3798','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17928','Bluff Circuit','Replaced Imperial measure circuit in 1972. Replaced by Bluff 2000 (code 17958) from March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-46.36000346,'EPSG','9110','EPSG','8802','Longitude of natural origin',168.20343392,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300002.66,'EPSG','9001','EPSG','8807','False northing',699999.58,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12670','conversion','EPSG','17928','EPSG','3800','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17931','Mount Eden 2000','Replaces Mount Eden Circuit (code 17901) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-36.5247,'EPSG','9110','EPSG','8802','Longitude of natural origin',174.4551,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12671','conversion','EPSG','17931','EPSG','3781','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17932','Bay of Plenty 2000','Replaces Bay of Plenty Circuit (code 17902) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-37.454,'EPSG','9110','EPSG','8802','Longitude of natural origin',176.2758,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12672','conversion','EPSG','17932','EPSG','3779','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17933','Poverty Bay 2000','Replaces Poverty Bay Circuit (code 17903) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-38.3728,'EPSG','9110','EPSG','8802','Longitude of natural origin',177.5308,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12673','conversion','EPSG','17933','EPSG','3780','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17934','Hawkes Bay 2000','Replaces Hawkes Bay Circuit (code 17904) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-39.3903,'EPSG','9110','EPSG','8802','Longitude of natural origin',176.4025,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12674','conversion','EPSG','17934','EPSG','3772','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17935','Taranaki 2000','Replaces Taranaki Circuit (code 17905) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-39.0808,'EPSG','9110','EPSG','8802','Longitude of natural origin',174.134,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12675','conversion','EPSG','17935','EPSG','3777','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17936','Tuhirangi 2000','Replaces Tuhirangi Circuit (code 17906) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-39.3044,'EPSG','9110','EPSG','8802','Longitude of natural origin',175.3824,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12676','conversion','EPSG','17936','EPSG','3778','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17937','Wanganui 2000','Replaces Wanganui Circuit (code 17907) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-40.1431,'EPSG','9110','EPSG','8802','Longitude of natural origin',175.2917,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12677','conversion','EPSG','17937','EPSG','3776','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17938','Wairarapa 2000','Replaces Wairarapa Circuit (code 17908) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-40.5531,'EPSG','9110','EPSG','8802','Longitude of natural origin',175.385,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12678','conversion','EPSG','17938','EPSG','3775','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17939','Wellington 2000','Replaces Wellington Circuit (code 17909) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.1804,'EPSG','9110','EPSG','8802','Longitude of natural origin',174.4635,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12679','conversion','EPSG','17939','EPSG','3774','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17940','Collingwood 2000','Replaces Collingwood Circuit (code 17910) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-40.4253,'EPSG','9110','EPSG','8802','Longitude of natural origin',172.4019,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12680','conversion','EPSG','17940','EPSG','3782','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17941','Nelson 2000','Replaces Nelson Circuit (code 17911) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.1628,'EPSG','9110','EPSG','8802','Longitude of natural origin',173.1757,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12681','conversion','EPSG','17941','EPSG','3784','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17942','Karamea 2000','Replaces Karamea Circuit (code 17912) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.1723,'EPSG','9110','EPSG','8802','Longitude of natural origin',172.0632,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12682','conversion','EPSG','17942','EPSG','3783','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17943','Buller 2000','Replaces Buller Circuit (code 17913) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.4838,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.3452,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12683','conversion','EPSG','17943','EPSG','3786','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17944','Grey 2000','Replaces Grey Circuit (code 17914) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-42.2001,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.3259,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12684','conversion','EPSG','17944','EPSG','3787','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17945','Amuri 2000','Replaces Amuri Circuit (code 17915) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-42.412,'EPSG','9110','EPSG','8802','Longitude of natural origin',173.0036,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12685','conversion','EPSG','17945','EPSG','3788','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17946','Marlborough 2000','Replaces Marlborough Circuit (code 17916) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-41.324,'EPSG','9110','EPSG','8802','Longitude of natural origin',173.4807,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12686','conversion','EPSG','17946','EPSG','3785','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17947','Hokitika 2000','Replaces Hokitika Circuit (code 17917) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-42.531,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.5847,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12687','conversion','EPSG','17947','EPSG','3789','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17948','Okarito 2000','Replaces Okarito Circuit (code 17918) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.0636,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.1539,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12688','conversion','EPSG','17948','EPSG','3791','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17949','Jacksons Bay 2000','Replaces Jacksons Bay Circuit (code 17919) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.584,'EPSG','9110','EPSG','8802','Longitude of natural origin',168.3622,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12689','conversion','EPSG','17949','EPSG','3794','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17950','Mount Pleasant 2000','Replaces Mount Pleasant Circuit (code 17920) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.3526,'EPSG','9110','EPSG','8802','Longitude of natural origin',172.4337,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12690','conversion','EPSG','17950','EPSG','3790','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17951','Gawler 2000','Replaces Gawler Circuit (code 17921) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-43.4455,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.2138,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12691','conversion','EPSG','17951','EPSG','3792','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17952','Timaru 2000','Replaces Timaru Circuit (code 17922) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.2407,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.0326,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12692','conversion','EPSG','17952','EPSG','3793','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17953','Lindis Peak 2000','Replaces Lindis Peak Circuit (code 17923) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.4406,'EPSG','9110','EPSG','8802','Longitude of natural origin',169.2803,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12693','conversion','EPSG','17953','EPSG','3795','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17954','Mount Nicholas 2000','Replaces Mount Nicholas Circuit (code 17924) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.0758,'EPSG','9110','EPSG','8802','Longitude of natural origin',168.2355,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12694','conversion','EPSG','17954','EPSG','3797','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17955','Mount York 2000','Replaces Mount York Circuit (code 17925) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.3349,'EPSG','9110','EPSG','8802','Longitude of natural origin',167.4419,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12695','conversion','EPSG','17955','EPSG','3799','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17956','Observation Point 2000','Replaces Observation Point Circuit (code 17926) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.4858,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.3742,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12696','conversion','EPSG','17956','EPSG','3796','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17957','North Taieri 2000','Replaces North Taieri Circuit (code 17927) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-45.5141,'EPSG','9110','EPSG','8802','Longitude of natural origin',170.1657,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12697','conversion','EPSG','17957','EPSG','3798','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17958','Bluff 2000','Replaces Bluff Circuit (code 17928) after 1st March 2000.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-46.36,'EPSG','9110','EPSG','8802','Longitude of natural origin',168.2034,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12698','conversion','EPSG','17958','EPSG','3800','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17959','Chatham Island Circuit 2000','Officially discontinued 6 June 2006. Replaced by Chatham Islands Transverse Mercator 2000 (Code 17965).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-176.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12699','conversion','EPSG','17959','EPSG','2889','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','17960','Auckland Islands Transverse Mercator 2000','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',166.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12700','conversion','EPSG','17960','EPSG','3554','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17961','Campbell Island Transverse Mercator 2000','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',169.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12701','conversion','EPSG','17961','EPSG','3555','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17962','Antipodes Islands Transverse Mercator 2000','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',179.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12702','conversion','EPSG','17962','EPSG','3556','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17963','Raoul Island Transverse Mercator 2000','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-178.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12703','conversion','EPSG','17963','EPSG','3557','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17964','New Zealand Continental Shelf Lambert Conformal 2000','See NIWA Albers (projection code 9190) for oceanic data statistical analysis.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-41.0,'EPSG','9110','EPSG','8822','Longitude of false origin',173.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-37.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-44.3,'EPSG','9110','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',7000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12704','conversion','EPSG','17964','EPSG','3593','EPSG','1026'); INSERT INTO "conversion" VALUES('EPSG','17965','Chatham Islands Transverse Mercator 2000','Replaces Chatham Island Circuit 2000 (code 17959).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-176.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12705','conversion','EPSG','17965','EPSG','2889','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','17966','Darwin Glacier Lambert Conformal 2000','Replaced by McMurdo Sound Lambert Conformal 2000 (proj code 5475) from March 2011. LINZ S20007 withdrawn at this date.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-90.0,'EPSG','9110','EPSG','8822','Longitude of false origin',157.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-76.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-79.2,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12706','conversion','EPSG','17966','EPSG','3592','EPSG','1236'); INSERT INTO "conversion" VALUES('EPSG','18001','Austria Gauss-Kruger West Zone','Austria West Zone (EPSG proj code 18041) with truncated northing. Longitude is referenced to the Ferro meridian. See code 18004 for equivalent projection referenced to the Greenwich meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',28.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12707','conversion','EPSG','18001','EPSG','1706','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18002','Austria Gauss-Kruger Central Zone','Austria Central Zone (EPSG proj code 18042) with truncated northing. Longitude is referenced to the Ferro meridian. See code 18005 for equivalent projection referenced to the Greenwich meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12708','conversion','EPSG','18002','EPSG','1707','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18003','Austria Gauss-Kruger East Zone','Austria East Zone (EPSG proj code 18043) with truncated northing. Longitude is referenced to the Ferro meridian. See code 18006 for equivalent projection referenced to the Greenwich meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',34.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12709','conversion','EPSG','18003','EPSG','1708','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18004','Austria Gauss-Kruger West','Greenwich equivalent of Austria GK West zone (EPSG code 18001).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12710','conversion','EPSG','18004','EPSG','1706','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18005','Austria Gauss-Kruger Central','Greenwich equivalent of Austria GK Central zone (EPSG code 18002).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12711','conversion','EPSG','18005','EPSG','1707','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18006','Austria Gauss-Kruger East','Greenwich equivalent of Austria GK East zone (EPSG code 18003).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12712','conversion','EPSG','18006','EPSG','1708','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18007','Austria Gauss-Kruger M28','Proj code 18044 but with truncated northing.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12713','conversion','EPSG','18007','EPSG','1706','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18008','Austria Gauss-Kruger M31','Proj code 18045 but with truncated northing.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',450000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12714','conversion','EPSG','18008','EPSG','1707','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18009','Austria Gauss-Kruger M34','Proj code 18046 but with truncated northing.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',750000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12715','conversion','EPSG','18009','EPSG','1708','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18011','Nord Algerie (ancienne)','Used with Voirol 1875 datum - now replaced.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625544,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12716','conversion','EPSG','18011','EPSG','1728','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18012','Sud Algerie (ancienne)','Used with Voirol 1875 datum - now replaced.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12717','conversion','EPSG','18012','EPSG','1729','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18021','Nord Algerie','Use with Nord Sahara 1959 datum.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625544,'EPSG','9201','EPSG','8806','False easting',500135.0,'EPSG','9001','EPSG','8807','False northing',300090.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12718','conversion','EPSG','18021','EPSG','1728','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18022','Sud Algerie','Use with Nord Sahara 1959 datum. INCT uses this projection to the southern limit of Algeria but due to distance from origin OGP does not endorse this practice and south of 31°30''N recommends use of UTM.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500135.0,'EPSG','9001','EPSG','8807','False northing',300090.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12719','conversion','EPSG','18022','EPSG','1729','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18031','Argentina zone 1','Original transformation by Gauss-Kruger formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12720','conversion','EPSG','18031','EPSG','1608','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18032','Argentina zone 2','Original transformation by Gauss-Kruger formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12721','conversion','EPSG','18032','EPSG','1609','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18033','Argentina zone 3','Original transformation by Gauss-Kruger formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-66.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12722','conversion','EPSG','18033','EPSG','1610','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18034','Argentina zone 4','Original transformation by Gauss-Kruger formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12723','conversion','EPSG','18034','EPSG','1611','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18035','Argentina zone 5','Original transformation by Gauss-Kruger formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-60.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12724','conversion','EPSG','18035','EPSG','1612','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18036','Argentina zone 6','Original transformation by Gauss-Kruger formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12725','conversion','EPSG','18036','EPSG','1613','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18037','Argentina zone 7','Original transformation by Gauss-Kruger formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-54.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12726','conversion','EPSG','18037','EPSG','1614','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18041','Austria West Zone','Longitude is referenced to the Ferro meridian. See code 9268 for equivalent referenced to Greenwich meridian. Replaced by Austria zone M28 (EPSG code 18047) for large and medium scale topographic mapping and engineering survey.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',28.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12727','conversion','EPSG','18041','EPSG','1706','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','18042','Austria Central Zone','Longitude is referenced to the Ferro meridian. See code 9269 for equivalent referenced to Greenwich meridian. Replaced by Austria zone M31 (EPSG code 18048) for large and medium scale topographic mapping and engineering survey.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12728','conversion','EPSG','18042','EPSG','1707','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','18043','Austria East Zone','Longitude is referenced to the Ferro meridian. See code 9270 for equivalent referenced to Greenwich meridian. Replaced by Austria zone M34 (EPSG code 18049) for large and medium scale topographic mapping and engineering survey.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',34.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12729','conversion','EPSG','18043','EPSG','1708','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','18044','Austria M28','Greenwich equivalent of Austria zone M28 (EPSG code 18047).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12730','conversion','EPSG','18044','EPSG','1706','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18045','Austria M31','Greenwich equivalent of Austria zone M31 (EPSG code 18048).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',450000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12731','conversion','EPSG','18045','EPSG','1707','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18046','Austria M34','Greenwich equivalent of Austria zone M34 (EPSG code 18049).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',750000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12732','conversion','EPSG','18046','EPSG','1708','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18047','Austria zone M28','Longitude is referenced to the Ferro meridian. See code 18044 for equivalent referenced to Greenwich meridian. Replaces Austria West Zone (EPSG code 18041) for large and medium scale topographic mapping and engineering survey but not cadastral survey.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',28.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12733','conversion','EPSG','18047','EPSG','1706','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18048','Austria zone M31','Longitude is referenced to the Ferro meridian. See code 18045 for equivalent referenced to Greenwich meridian. Replaces Austria Central Zone (EPSG code 18042) for large and medium scale topographic mapping and engineering survey but not cadastral survey.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',450000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12734','conversion','EPSG','18048','EPSG','1707','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18049','Austria zone M34','Longitude is referenced to the Ferro meridian. See code 18046 for equivalent referenced to Greenwich meridian. Replaces Austria East Zone (EPSG code 18043) for large and medium scale topographic mapping and engineering survey but not cadastral survey.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',34.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',750000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12735','conversion','EPSG','18049','EPSG','1708','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18051','Colombia West zone','Original transformation by Gauss-Kruger formula. Zone name sometimes referred to as "3 west". Associated with Bogota datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.355657,'EPSG','9110','EPSG','8802','Longitude of natural origin',-77.04513,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12736','conversion','EPSG','18051','EPSG','1598','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18052','Colombia Bogota zone','Original transformation by Gauss-Kruger formula. Associated with Bogota datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.355657,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.04513,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12737','conversion','EPSG','18052','EPSG','1599','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18053','Colombia East Central zone','Original transformation by Gauss-Kruger formula. Zone name sometimes referred to as "3 east". Associated with Bogota datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.355657,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.04513,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12738','conversion','EPSG','18053','EPSG','1600','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18054','Colombia East zone','Original transformation by Gauss-Kruger formula. Zone name sometimes referred to as "6 east". Associated with Bogota datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.355657,'EPSG','9110','EPSG','8802','Longitude of natural origin',-68.04513,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12739','conversion','EPSG','18054','EPSG','1601','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18055','Colombia MAGNA Far West zone','Zone name sometimes referred to as "6 west". Associated with MAGNA-SIRGAS datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463215,'EPSG','9110','EPSG','8802','Longitude of natural origin',-80.04390285,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12740','conversion','EPSG','18055','EPSG','3091','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18056','Colombia MAGNA West zone','Zone name sometimes referred to as "3 west". Associated with MAGNA-SIRGAS datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463215,'EPSG','9110','EPSG','8802','Longitude of natural origin',-77.04390285,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12741','conversion','EPSG','18056','EPSG','3090','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18057','Colombia MAGNA Bogota zone','Associated with MAGNA-SIRGAS datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463215,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.04390285,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12742','conversion','EPSG','18057','EPSG','1599','EPSG','1208'); INSERT INTO "usage" VALUES('EPSG','13874','conversion','EPSG','18057','EPSG','3229','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18058','Colombia MAGNA East Central zone','Zone name sometimes referred to as "3 east". Associated with MAGNA-SIRGAS datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463215,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.04390285,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12743','conversion','EPSG','18058','EPSG','1600','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18059','Colombia MAGNA East zone','Zone name sometimes referred to as "6 east". Associated with MAGNA-SIRGAS datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463215,'EPSG','9110','EPSG','8802','Longitude of natural origin',-68.04390285,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12744','conversion','EPSG','18059','EPSG','1601','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18061','Cuba Norte','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',22.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99993602,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',280296.016,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12745','conversion','EPSG','18061','EPSG','1487','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18062','Cuba Sur','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',20.43,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99994848,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',229126.939,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12746','conversion','EPSG','18062','EPSG','1488','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18063','Cuba Norte','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',22.21,'EPSG','9110','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',23.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',21.42,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',280296.016,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12747','conversion','EPSG','18063','EPSG','1487','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18064','Cuba Sur','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',20.43,'EPSG','9110','EPSG','8822','Longitude of false origin',-76.5,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',21.18,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',20.08,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',229126.939,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12748','conversion','EPSG','18064','EPSG','1488','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18065','Colombia MAGNA 2018 Far West zone','Associated with MAGNA-SIRGAS 2018 reference frame.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463316,'EPSG','9110','EPSG','8802','Longitude of natural origin',-80.043902797,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18936','conversion','EPSG','18065','EPSG','3091','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18066','Colombia MAGNA 2018 West zone','Associated with MAGNA-SIRGAS 2018 reference frame.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463316,'EPSG','9110','EPSG','8802','Longitude of natural origin',-77.043902797,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18937','conversion','EPSG','18066','EPSG','3090','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18067','Colombia MAGNA 2018 Bogota zone','Associated with MAGNA-SIRGAS 2018 reference frame.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463316,'EPSG','9110','EPSG','8802','Longitude of natural origin',-74.043902797,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18938','conversion','EPSG','18067','EPSG','1599','EPSG','1208'); INSERT INTO "conversion" VALUES('EPSG','18068','Colombia MAGNA 2018 East Central zone','Associated with MAGNA-SIRGAS 2018 reference frame.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463316,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.043902797,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18939','conversion','EPSG','18068','EPSG','1600','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18069','Colombia MAGNA 2018 East zone','Associated with MAGNA-SIRGAS 2018 reference frame.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.35463316,'EPSG','9110','EPSG','8802','Longitude of natural origin',-68.043902797,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18940','conversion','EPSG','18069','EPSG','1601','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18071','Egypt Blue Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',35.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',1100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12749','conversion','EPSG','18071','EPSG','1642','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18072','Egypt Red Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',615000.0,'EPSG','9001','EPSG','8807','False northing',810000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12750','conversion','EPSG','18072','EPSG','1643','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18073','Egypt Purple Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12751','conversion','EPSG','18073','EPSG','1644','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18074','Egypt Extended Purple Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12752','conversion','EPSG','18074','EPSG','1645','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18081','Lambert zone I','Longitude is referenced to the Paris meridian. Introduced 1972. Replaces Lambert Nord France (code 18091).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',55.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999877341,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12753','conversion','EPSG','18081','EPSG','1731','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18082','Lambert zone II','Longitude is referenced to the Paris meridian. Introduced 1972. Replaces Lambert Centre France (code 18092).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99987742,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12754','conversion','EPSG','18082','EPSG','1734','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18083','Lambert zone III','Longitude is referenced to the Paris meridian. Introduced 1972. Replaces Lambert Sud France (code 18093).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999877499,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',3200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12755','conversion','EPSG','18083','EPSG','1733','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18084','Lambert zone IV','Longitude is referenced to the Paris meridian. Introduced 1972. Replaces Lambert Corse (code 18094).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.85,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99994471,'EPSG','9201','EPSG','8806','False easting',234.358,'EPSG','9001','EPSG','8807','False northing',4185861.369,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12756','conversion','EPSG','18084','EPSG','1327','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18085','Lambert-93','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.3,'EPSG','9110','EPSG','8822','Longitude of false origin',3.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',44.0,'EPSG','9110','EPSG','8826','Easting at false origin',700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12757','conversion','EPSG','18085','EPSG','1096','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18086','France EuroLambert','This is Lambert zone II (code 18082) parameters converted from grads/Paris to degrees/Greenwich for use with ED50.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.48,'EPSG','9110','EPSG','8802','Longitude of natural origin',2.2014025,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99987742,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12758','conversion','EPSG','18086','EPSG','1326','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','18091','Lambert Nord France','Longitude is referenced to the Paris meridian. Replaced in 1972 by Lambert zone I (code 18081).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',55.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999877341,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12759','conversion','EPSG','18091','EPSG','1731','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18092','Lambert Centre France','Longitude is referenced to the Paris meridian. Replaced in 1972 by Lambert zone II (code 18082).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99987742,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12760','conversion','EPSG','18092','EPSG','1734','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18093','Lambert Sud France','Longitude is referenced to the Paris meridian. Replaced in 1972 by Lambert zone III (code 18083).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999877499,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12761','conversion','EPSG','18093','EPSG','1733','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18094','Lambert Corse','Longitude is referenced to the Paris meridian. Replaced in 1972 by Lambert zone IV (code 18084).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.85,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99994471,'EPSG','9201','EPSG','8806','False easting',234.358,'EPSG','9001','EPSG','8807','False northing',185861.369,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12762','conversion','EPSG','18094','EPSG','1327','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18101','France Conic Conformal zone 1','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zone.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12763','conversion','EPSG','18101','EPSG','3545','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18102','France Conic Conformal zone 2','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zones.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12764','conversion','EPSG','18102','EPSG','3546','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18103','France Conic Conformal zone 3','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zones.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12765','conversion','EPSG','18103','EPSG','3547','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18104','France Conic Conformal zone 4','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zones.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12766','conversion','EPSG','18104','EPSG','3548','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18105','France Conic Conformal zone 5','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zones.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12767','conversion','EPSG','18105','EPSG','3549','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18106','France Conic Conformal zone 6','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zones.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12768','conversion','EPSG','18106','EPSG','3550','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18107','France Conic Conformal zone 7','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zones.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',7200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12769','conversion','EPSG','18107','EPSG','3551','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18108','France Conic Conformal zone 8','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zones.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',49.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',8200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12770','conversion','EPSG','18108','EPSG','3552','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18109','France Conic Conformal zone 9','Compliments Lambert-93. Scale factor ranges between -9 and +7 cm/km. Area of use overlaps adjacent zone.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',50.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',50.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',9200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12771','conversion','EPSG','18109','EPSG','3553','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18110','India zone 0','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',39.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',68.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99846154,'EPSG','9201','EPSG','8806','False easting',2355500.0,'EPSG','9084','EPSG','8807','False northing',2590000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12772','conversion','EPSG','18110','EPSG','1668','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18111','India zone I','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',32.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',68.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9084','EPSG','8807','False northing',1000000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12773','conversion','EPSG','18111','EPSG','1669','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18112','India zone IIa','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',74.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9084','EPSG','8807','False northing',1000000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12774','conversion','EPSG','18112','EPSG','1670','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18113','India zone IIb','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9084','EPSG','8807','False northing',1000000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12775','conversion','EPSG','18113','EPSG','1671','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18114','India zone IIIa','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',19.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',80.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9084','EPSG','8807','False northing',1000000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12776','conversion','EPSG','18114','EPSG','1672','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18115','India zone IIIb','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',19.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',100.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9084','EPSG','8807','False northing',1000000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12777','conversion','EPSG','18115','EPSG','2292','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18116','India zone IVa','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',12.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',80.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9084','EPSG','8807','False northing',1000000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12778','conversion','EPSG','18116','EPSG','1673','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18117','India zone IVb','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',12.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',100.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',3000000.0,'EPSG','9084','EPSG','8807','False northing',1000000.0,'EPSG','9084',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12779','conversion','EPSG','18117','EPSG','2293','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18121','Italy zone 1','Original transformation by Gauss-Boaga formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12780','conversion','EPSG','18121','EPSG','1718','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18122','Italy zone 2','Original transformation by Gauss-Boaga formula','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',2520000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12781','conversion','EPSG','18122','EPSG','1719','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18131','Nord Maroc','A projection with the same parameter values used the Lambert Conic Near-Conformal method (EPSG code 9817) prior to 1953.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',-6.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12782','conversion','EPSG','18131','EPSG','1703','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18132','Sud Maroc','A projection with the same parameter values used the Lambert Conic Near-Conformal method (EPSG code 9817) prior to 1953.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',-6.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999615596,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12783','conversion','EPSG','18132','EPSG','2787','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18133','Sahara','Created in 1977 to cover Sahara Marocain (ex Spanish Sahara)','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',29.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',-6.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1200000.0,'EPSG','9001','EPSG','8807','False northing',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12784','conversion','EPSG','18133','EPSG','1705','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18134','Sahara Nord','Created in 1977.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',29.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',-6.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999616304,'EPSG','9201','EPSG','8806','False easting',1200000.0,'EPSG','9001','EPSG','8807','False northing',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12785','conversion','EPSG','18134','EPSG','2788','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18135','Sahara Sud','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',25.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',-6.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999616437,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12786','conversion','EPSG','18135','EPSG','2789','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18141','New Zealand North Island National Grid','Replaced by New Zealand Map Grid (code 19917). Used for topographic mapping.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-39.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',175.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9040','EPSG','8807','False northing',400000.0,'EPSG','9040',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12787','conversion','EPSG','18141','EPSG','1500','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18142','New Zealand South Island National Grid','Replaced by New Zealand Map Grid (code 19917). Used for topographic mapping.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',171.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9040','EPSG','8807','False northing',500000.0,'EPSG','9040',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12788','conversion','EPSG','18142','EPSG','3344','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18151','Nigeria West Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',4.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99975,'EPSG','9201','EPSG','8806','False easting',230738.26,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12789','conversion','EPSG','18151','EPSG','1715','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18152','Nigeria Mid Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',8.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99975,'EPSG','9201','EPSG','8806','False easting',670553.98,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12790','conversion','EPSG','18152','EPSG','1714','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18153','Nigeria East Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',12.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99975,'EPSG','9201','EPSG','8806','False easting',1110369.7,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12791','conversion','EPSG','18153','EPSG','1713','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18161','Peru west zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-6.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-80.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99983008,'EPSG','9201','EPSG','8806','False easting',222000.0,'EPSG','9001','EPSG','8807','False northing',1426834.743,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12792','conversion','EPSG','18161','EPSG','1753','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18162','Peru central zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-9.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-76.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99932994,'EPSG','9201','EPSG','8806','False easting',720000.0,'EPSG','9001','EPSG','8807','False northing',1039979.159,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12793','conversion','EPSG','18162','EPSG','1752','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18163','Peru east zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-9.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-70.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99952992,'EPSG','9201','EPSG','8806','False easting',1324000.0,'EPSG','9001','EPSG','8807','False northing',1040084.558,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12794','conversion','EPSG','18163','EPSG','1751','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18171','Philippines zone I','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12795','conversion','EPSG','18171','EPSG','1698','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18172','Philippines zone II','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',119.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12796','conversion','EPSG','18172','EPSG','1699','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18173','Philippines zone III','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',121.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12797','conversion','EPSG','18173','EPSG','1700','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18174','Philippines zone IV','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',123.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12798','conversion','EPSG','18174','EPSG','1701','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18175','Philippines zone V','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',125.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12799','conversion','EPSG','18175','EPSG','1702','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18180','Finland zone 0','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12800','conversion','EPSG','18180','EPSG','3092','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18181','Nord Tunisie','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',11.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625544,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12801','conversion','EPSG','18181','EPSG','1619','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18182','Sud Tunisie','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',11.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12802','conversion','EPSG','18182','EPSG','1620','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18183','Finland ETRS-GK19','Replaced by GK19FIN (proj code 3860).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12803','conversion','EPSG','18183','EPSG','3092','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18184','Finland ETRS-GK20','Replaced by GK20FIN (proj code 3861).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',20.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12804','conversion','EPSG','18184','EPSG','3093','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18185','Finland ETRS-GK21','Replaced by GK21FIN (proj code 3862).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12805','conversion','EPSG','18185','EPSG','3094','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18186','Finland ETRS-GK22','Replaced by GK22FIN (proj code 3863).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',22.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12806','conversion','EPSG','18186','EPSG','3095','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18187','Finland ETRS-GK23','Replaced by GK23FIN (proj code 3864).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12807','conversion','EPSG','18187','EPSG','3096','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18188','Finland ETRS-GK24','Replaced by GK24FIN (proj code 3865).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12808','conversion','EPSG','18188','EPSG','3097','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18189','Finland ETRS-GK25','Replaced by GK25FIN (proj code 3866).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12809','conversion','EPSG','18189','EPSG','3098','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18190','Finland ETRS-GK26','Replaced by GK26FIN (proj code 3867).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',26.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12810','conversion','EPSG','18190','EPSG','3099','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18191','Finland zone 1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12811','conversion','EPSG','18191','EPSG','1536','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18192','Finland zone 2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12812','conversion','EPSG','18192','EPSG','1537','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18193','Finland Uniform Coordinate System','Used by Uniform Coordinate System over all country and also by zone 3 of Basic Coordinate System at larger scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12813','conversion','EPSG','18193','EPSG','1538','EPSG','1208'); INSERT INTO "usage" VALUES('EPSG','13875','conversion','EPSG','18193','EPSG','3333','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18194','Finland zone 4','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12814','conversion','EPSG','18194','EPSG','1539','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18195','Finland ETRS-GK27','Replaced by GK27FIN (proj code 3868).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12815','conversion','EPSG','18195','EPSG','3100','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18196','Finland ETRS-GK28','Replaced by GK28FIN (proj code 3869).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',28.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12816','conversion','EPSG','18196','EPSG','3101','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18197','Finland ETRS-GK29','Replaced by GK29FIN (proj code 3870).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',29.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12817','conversion','EPSG','18197','EPSG','3102','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18198','Finland ETRS-GK30','Replaced by GK30FIN (proj code 3871).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12818','conversion','EPSG','18198','EPSG','3103','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18199','Finland ETRS-GK31','Replaced by GK31FIN (proj code 3872).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12819','conversion','EPSG','18199','EPSG','3104','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18201','Palestine Grid','Replaced (i) in Israel by Israeli CS (proj code 18203) which adds 1 million to FN; (ii) for AMS by Palestine Belt (code18202) which adds 1 million to FN and changes method to TM. Also encountered as a TM projection without change to FN (see code 7141).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',31.4402749,'EPSG','9110','EPSG','8802','Longitude of natural origin',35.124349,'EPSG','9110','EPSG','8806','False easting',170251.555,'EPSG','9001','EPSG','8807','False northing',126867.909,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12820','conversion','EPSG','18201','EPSG','1356','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18202','Palestine Belt','Replaces Palestine Grid (code 18201). See also Israeli CS (proj code 18203) which has identical parameter values: the difference in coordinates between the Palestine Belt and the Israeli CS caused by their different methods is under 2m within Israel.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.4402749,'EPSG','9110','EPSG','8802','Longitude of natural origin',35.124349,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',170251.555,'EPSG','9001','EPSG','8807','False northing',1126867.909,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12821','conversion','EPSG','18202','EPSG','1356','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18203','Israeli CS','Based on proj 18201 but with 1 million added to FN. Note: Palestine Belt (proj code 18202) has identical parameter values: the difference in conversion between the Israeli CS and the Palestine Belt caused by their different methods is under 2m in Israel.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',31.4402749,'EPSG','9110','EPSG','8802','Longitude of natural origin',35.124349,'EPSG','9110','EPSG','8806','False easting',170251.555,'EPSG','9001','EPSG','8807','False northing',1126867.909,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12822','conversion','EPSG','18203','EPSG','2603','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18204','Israeli TM','Designed to approximate Israeli CRS grid in north-central Israel.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.4403817,'EPSG','9110','EPSG','8802','Longitude of natural origin',35.1216261,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0000067,'EPSG','9201','EPSG','8806','False easting',219529.584,'EPSG','9001','EPSG','8807','False northing',626907.39,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12823','conversion','EPSG','18204','EPSG','2603','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18205','Finland zone 5','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12824','conversion','EPSG','18205','EPSG','3385','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18211','Guatemala Norte','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',16.49,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99992226,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',292209.579,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12825','conversion','EPSG','18211','EPSG','2120','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18212','Guatemala Sur','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',14.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',-90.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99989906,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',325992.681,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12826','conversion','EPSG','18212','EPSG','2121','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18221','NGO zone I','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-4.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12827','conversion','EPSG','18221','EPSG','1741','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18222','NGO zone II','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12828','conversion','EPSG','18222','EPSG','1742','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18223','NGO zone III','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12829','conversion','EPSG','18223','EPSG','1743','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18224','NGO zone IV','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',2.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12830','conversion','EPSG','18224','EPSG','1744','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18225','NGO zone V','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12831','conversion','EPSG','18225','EPSG','1745','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18226','NGO zone VI','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12832','conversion','EPSG','18226','EPSG','1746','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18227','NGO zone VII','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',14.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12833','conversion','EPSG','18227','EPSG','1747','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18228','NGO zone VIII','Longitude is referenced to the Oslo meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12834','conversion','EPSG','18228','EPSG','1748','EPSG','1092'); INSERT INTO "conversion" VALUES('EPSG','18231','India zone I (1975 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',32.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',68.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743195.5,'EPSG','9001','EPSG','8807','False northing',914398.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12835','conversion','EPSG','18231','EPSG','1676','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18232','India zone IIa (1975 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',74.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743195.5,'EPSG','9001','EPSG','8807','False northing',914398.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12836','conversion','EPSG','18232','EPSG','1677','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18233','India zone IIIa (1975 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',19.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',80.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743195.5,'EPSG','9001','EPSG','8807','False northing',914398.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12837','conversion','EPSG','18233','EPSG','1672','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18234','India zone IVa (1975 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',12.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',80.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743195.5,'EPSG','9001','EPSG','8807','False northing',914398.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12838','conversion','EPSG','18234','EPSG','1673','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18235','India zone IIb (1975 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743195.5,'EPSG','9001','EPSG','8807','False northing',914398.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12839','conversion','EPSG','18235','EPSG','1678','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18236','India zone I (1962 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',32.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',68.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743196.4,'EPSG','9001','EPSG','8807','False northing',914398.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12840','conversion','EPSG','18236','EPSG','1685','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18237','India zone IIa (1962 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',74.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743196.4,'EPSG','9001','EPSG','8807','False northing',914398.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12841','conversion','EPSG','18237','EPSG','1686','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18238','India zone IIb (1937 metres)','BEWARE ! Different yard to metre conversion values have been used in different parts of south Asia. Some areas have changed conversion value with time.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99878641,'EPSG','9201','EPSG','8806','False easting',2743185.69,'EPSG','9001','EPSG','8807','False northing',914395.23,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12842','conversion','EPSG','18238','EPSG','3217','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18240','Libya zone 5','Replaced by Libya TM zone 5 (code 18310).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12843','conversion','EPSG','18240','EPSG','1470','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18241','Libya zone 6','Replaced by Libya TM zone 6 (code 18311).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',11.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12844','conversion','EPSG','18241','EPSG','1471','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18242','Libya zone 7','Replaced by Libya TM zone 7 (code 18312).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',13.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12845','conversion','EPSG','18242','EPSG','1472','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18243','Libya zone 8','Replaced by Libya TM zone 8 (code 18313).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12846','conversion','EPSG','18243','EPSG','1473','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18244','Libya zone 9','Replaced by Libya TM zone 9 (code 18314).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',17.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12847','conversion','EPSG','18244','EPSG','1474','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18245','Libya zone 10','Replaced by Libya TM zone 10 (code 18315).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12848','conversion','EPSG','18245','EPSG','1475','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18246','Libya zone 11','Replaced by Libya TM zone 11 (code 18316).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12849','conversion','EPSG','18246','EPSG','1476','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18247','Libya zone 12','Replaced by Libya TM zone 12 (code 18317).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12850','conversion','EPSG','18247','EPSG','1477','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18248','Libya zone 13','Replaced by Libya TM zone 13 (code 18318).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12851','conversion','EPSG','18248','EPSG','1478','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18251','Korea East Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12852','conversion','EPSG','18251','EPSG','3726','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18252','Korea Central Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12853','conversion','EPSG','18252','EPSG','3716','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18253','Korea West Belt','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',125.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12854','conversion','EPSG','18253','EPSG','3713','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18260','Maracaibo Grid (M1)','Grid coordinates are (0 0) at Maracaibo Cathedral.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',10.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.3620224,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-52684.972,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12855','conversion','EPSG','18260','EPSG','1319','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','18261','Maracaibo Grid','Grid coordinates are (200000 200000) at Maracaibo Cathedral.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',10.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.3620224,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',147315.028,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12856','conversion','EPSG','18261','EPSG','1319','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','18262','Maracaibo Grid (M3)','Grid coordinates are (500000 500000) at Maracaibo Cathedral.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',10.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.3620224,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',447315.028,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12857','conversion','EPSG','18262','EPSG','1319','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','18263','Maracaibo La Rosa Grid','Grid coordinates are (-17044E 29545N) at Maracaibo Cathedral.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',10.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',-71.3620224,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',-17044.0,'EPSG','9001','EPSG','8807','False northing',-23139.97,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12858','conversion','EPSG','18263','EPSG','1319','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','18275','Balkans zone 5','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12859','conversion','EPSG','18275','EPSG','1709','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18276','Balkans zone 6','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12860','conversion','EPSG','18276','EPSG','1710','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18277','Balkans zone 7','In Macedonia replaced by MSCS (map projection code 6203) from 2008 but from 2013 this projection used for AREC electronic cadastral database (E-kat) across whole country.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12861','conversion','EPSG','18277','EPSG','1711','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','17355','conversion','EPSG','18277','EPSG','1148','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','18278','Balkans zone 8','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',8500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12862','conversion','EPSG','18278','EPSG','1712','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','18280','Poland zone I','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',50.373,'EPSG','9110','EPSG','8802','Longitude of natural origin',21.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',4637000.0,'EPSG','9001','EPSG','8807','False northing',5467000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12863','conversion','EPSG','18280','EPSG','1515','EPSG','1102'); INSERT INTO "conversion" VALUES('EPSG','18281','Poland zone I','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',50.373,'EPSG','9110','EPSG','8802','Longitude of natural origin',21.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',4637000.0,'EPSG','9001','EPSG','8807','False northing',5647000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12864','conversion','EPSG','18281','EPSG','1515','EPSG','1102'); INSERT INTO "conversion" VALUES('EPSG','18282','Poland zone II','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',53.0007,'EPSG','9110','EPSG','8802','Longitude of natural origin',21.301,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',4603000.0,'EPSG','9001','EPSG','8807','False northing',5806000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12865','conversion','EPSG','18282','EPSG','1516','EPSG','1102'); INSERT INTO "conversion" VALUES('EPSG','18283','Poland zone III','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',53.35,'EPSG','9110','EPSG','8802','Longitude of natural origin',17.003,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',3501000.0,'EPSG','9001','EPSG','8807','False northing',5999000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12866','conversion','EPSG','18283','EPSG','1517','EPSG','1102'); INSERT INTO "conversion" VALUES('EPSG','18284','Poland zone IV','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',51.4015,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.402,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',3703000.0,'EPSG','9001','EPSG','8807','False northing',5627000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12867','conversion','EPSG','18284','EPSG','1518','EPSG','1102'); INSERT INTO "conversion" VALUES('EPSG','18285','Poland zone V','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.573,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999983,'EPSG','9201','EPSG','8806','False easting',237000.0,'EPSG','9001','EPSG','8807','False northing',-4700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12868','conversion','EPSG','18285','EPSG','1519','EPSG','1102'); INSERT INTO "conversion" VALUES('EPSG','18286','GUGiK-80','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',52.1,'EPSG','9110','EPSG','8802','Longitude of natural origin',19.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999714,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12869','conversion','EPSG','18286','EPSG','1192','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18300','Poland CS92','See Poland CS2000 zones (codes 18305-08) for cadastral survey and mapping at larger scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-5300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12870','conversion','EPSG','18300','EPSG','1192','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','18305','Poland CS2000 zone 5','See Poland CS92 (code 18300) for mapping at 1:10,000 and smaller scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12871','conversion','EPSG','18305','EPSG','1520','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18306','Poland CS2000 zone 6','See Poland CS92 (code 18300) for mapping at 1:10,000 and smaller scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12872','conversion','EPSG','18306','EPSG','1521','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18307','Poland CS2000 zone 7','See Poland CS92 (code 18300) for mapping at 1:10,000 and smaller scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12873','conversion','EPSG','18307','EPSG','1522','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18308','Poland CS2000 zone 8','See Poland CS92 (code 18300) for mapping at 1:10,000 and smaller scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',8500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12874','conversion','EPSG','18308','EPSG','1523','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18310','Libya TM zone 5','Replaces Libya zone 5 (code 18240).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12875','conversion','EPSG','18310','EPSG','1470','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18311','Libya TM zone 6','Replaces Libya zone 6 (code 18241).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',11.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12876','conversion','EPSG','18311','EPSG','1471','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18312','Libya TM zone 7','Replaces Libya zone 7 (code 18242).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',13.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12877','conversion','EPSG','18312','EPSG','1472','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18313','Libya TM zone 8','Replaces Libya zone 8 (code 18243).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12878','conversion','EPSG','18313','EPSG','1473','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18314','Libya TM zone 9','Replaces Libya zone 9 (code 18244).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',17.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12879','conversion','EPSG','18314','EPSG','1474','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18315','Libya TM zone 10','Replaces Libya zone 10 (code 18245).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12880','conversion','EPSG','18315','EPSG','1475','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18316','Libya TM zone 11','Replaces Libya zone 11 (code 18246).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12881','conversion','EPSG','18316','EPSG','1476','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18317','Libya TM zone 12','Replaces Libya zone 12 (code 18247).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12882','conversion','EPSG','18317','EPSG','1477','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18318','Libya TM zone 13','Replaces Libya zone 13 (code 18248).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12883','conversion','EPSG','18318','EPSG','1478','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18319','Libya TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',17.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9965,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12884','conversion','EPSG','18319','EPSG','1143','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18401','Kp2000 Jylland og Fyn','See UTM zone 32N (code 16032) for mapping at 1:10,000 and smaller scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',9.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12885','conversion','EPSG','18401','EPSG','2531','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18402','Kp2000 Sjaelland','See UTM zone 32N (code 16032) for mapping at 1:10,000 and smaller scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',12.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12886','conversion','EPSG','18402','EPSG','2532','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18403','Kp2000 Bornholm','See UTM zone 33N (code 16033) for mapping at 1:10,000 and smaller scales.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12887','conversion','EPSG','18403','EPSG','2533','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','18411','French West Africa Senegal zone','Replaced in 1950 by UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-13.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12888','conversion','EPSG','18411','EPSG','2548','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18412','French West Africa Ivory Coast zone','Replaced in 1950 by UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-6.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12889','conversion','EPSG','18412','EPSG','2549','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18413','French West Africa Dahomey zone','Replaced in 1950 by UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',0.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12890','conversion','EPSG','18413','EPSG','2550','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18414','French West Africa Niger zone','Replaced in 1950 by UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',7.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12891','conversion','EPSG','18414','EPSG','2551','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18415','French Equatorial Africa west zone','Replaced in 1950 by UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12892','conversion','EPSG','18415','EPSG','2552','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18416','French Equatorial Africa central zone','Replaced in 1950 by UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',17.4,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12893','conversion','EPSG','18416','EPSG','2553','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18417','French Equatorial Africa east zone','Replaced in 1950 by UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',24.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12894','conversion','EPSG','18417','EPSG','2554','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','18421','Greenland zone 1 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',82.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-40.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12895','conversion','EPSG','18421','EPSG','2556','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18422','Greenland zone 2 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',79.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-24.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12896','conversion','EPSG','18422','EPSG','2557','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18423','Greenland zone 3 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',76.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-20.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12897','conversion','EPSG','18423','EPSG','2558','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18424','Greenland zone 4 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',73.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-24.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12898','conversion','EPSG','18424','EPSG','2559','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18425','Greenland zone 5 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',70.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-24.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12899','conversion','EPSG','18425','EPSG','2560','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18426','Greenland zone 6 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',67.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-32.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12900','conversion','EPSG','18426','EPSG','2561','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18427','Greenland zone 7 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',64.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-40.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12901','conversion','EPSG','18427','EPSG','2562','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18428','Greenland zone 8 east','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',61.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-48.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12902','conversion','EPSG','18428','EPSG','2569','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18432','Greenland zone 2 west','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',79.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-64.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12903','conversion','EPSG','18432','EPSG','2563','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18433','Greenland zone 3 west','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',76.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-64.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12904','conversion','EPSG','18433','EPSG','2564','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18434','Greenland zone 4 west','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',73.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-52.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12905','conversion','EPSG','18434','EPSG','2565','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18435','Greenland zone 5 west','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',70.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-52.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12906','conversion','EPSG','18435','EPSG','2566','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18436','Greenland zone 6 west','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',67.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-52.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12907','conversion','EPSG','18436','EPSG','2567','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18437','Greenland zone 7 west','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',64.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-52.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12908','conversion','EPSG','18437','EPSG','2568','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','18441','CS63 zone A1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.07,'EPSG','9110','EPSG','8802','Longitude of natural origin',41.32,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12909','conversion','EPSG','18441','EPSG','2772','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18442','CS63 zone A2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.07,'EPSG','9110','EPSG','8802','Longitude of natural origin',44.32,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12910','conversion','EPSG','18442','EPSG','2773','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18443','CS63 zone A3','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.07,'EPSG','9110','EPSG','8802','Longitude of natural origin',47.32,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12911','conversion','EPSG','18443','EPSG','2774','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18444','CS63 zone A4','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.07,'EPSG','9110','EPSG','8802','Longitude of natural origin',50.32,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12912','conversion','EPSG','18444','EPSG','2775','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18446','CS63 zone K2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.08,'EPSG','9110','EPSG','8802','Longitude of natural origin',50.46,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12913','conversion','EPSG','18446','EPSG','2776','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18447','CS63 zone K3','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.08,'EPSG','9110','EPSG','8802','Longitude of natural origin',53.46,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12914','conversion','EPSG','18447','EPSG','2777','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18448','CS63 zone K4','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.08,'EPSG','9110','EPSG','8802','Longitude of natural origin',56.46,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12915','conversion','EPSG','18448','EPSG','2778','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18450','CS63 zone C0','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',21.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12916','conversion','EPSG','18450','EPSG','3173','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18451','CS63 zone C1','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',24.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12917','conversion','EPSG','18451','EPSG','3174','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','18452','CS63 zone C2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',27.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12918','conversion','EPSG','18452','EPSG','3175','EPSG','1207'); INSERT INTO "conversion" VALUES('EPSG','19838','Rectified Skew Orthomorphic Sarawak LSD (metre)','Used by the Sarawak Land and Survey Department. Conversion 19958 but using Hotine Oblique Mercator (variant A) and with FE increased by 2,000,000 m and FN by 5,000,000 m. If using variant B method (code 9815) FE = 2590476.871 m and FN = 5442857.653 m.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',115.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',53.18569537,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',53.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','14399','conversion','EPSG','19838','EPSG','4611','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19839','Dubai Local Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',55.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12919','conversion','EPSG','19839','EPSG','3531','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19840','IBCAO Polar Stereographic','Used for the International Bathymetric Chart of Arctic Ocean.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',75.0,'EPSG','9102','EPSG','8833','Longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12920','conversion','EPSG','19840','EPSG','1996','EPSG','1201'); INSERT INTO "conversion" VALUES('EPSG','19841','Swiss Oblique Mercator 1903C (Greenwich)','Greenwich-based equivalent of LV03C, proj code 19923.','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',46.570866,'EPSG','9110','EPSG','8812','Longitude of projection centre',7.26225,'EPSG','9110','EPSG','8813','Azimuth at projection centre',90.0,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',90.0,'EPSG','9110','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8816','Easting at projection centre',0.0,'EPSG','9001','EPSG','8817','Northing at projection centre',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','12921','conversion','EPSG','19841','EPSG','1144','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19842','Arctic Polar Stereographic','Mirror of Antarctic Polar Stereographic (proj code 19992).','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',71.0,'EPSG','9102','EPSG','8833','Longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12922','conversion','EPSG','19842','EPSG','1996','EPSG','1040'); INSERT INTO "conversion" VALUES('EPSG','19843','Mercator 41','For projects extending within the 12 nautical mile line or onshore, NIWA recommends using NZCS2000 (projection code 17964). For offshore statistical analysis see NIWA Albers (projection code 9190).','EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',-41.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',100.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12923','conversion','EPSG','19843','EPSG','3508','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19844','Ministry of Transport of Quebec Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-70.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',50.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9102','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12924','conversion','EPSG','19844','EPSG','1368','EPSG','1220'); INSERT INTO "conversion" VALUES('EPSG','19845','Slovene National Grid','Replaced Slovenia Grid soon after Slovenian independence.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12925','conversion','EPSG','19845','EPSG','1212','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19846','World Equidistant Cylindrical','Origin at intersection of equator and prime meridian. See projection code 19968 for spherical development.','EPSG','9842','Equidistant Cylindrical','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12926','conversion','EPSG','19846','EPSG','1262','EPSG','1192'); INSERT INTO "conversion" VALUES('EPSG','19847','Popular Visualisation Mercator','Uses spherical development. Compared to ellipsoidal development errors of up to 800 metres may arise.','EPSG','9841','Mercator (1SP) (Spherical)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12927','conversion','EPSG','19847','EPSG','1262','EPSG','1098'); INSERT INTO "conversion" VALUES('EPSG','19848','Pitcairn TM 2006','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-25.04067894,'EPSG','9110','EPSG','8802','Longitude of natural origin',-130.06466816,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',14200.0,'EPSG','9001','EPSG','8807','False northing',15500.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12928','conversion','EPSG','19848','EPSG','3208','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19849','Bermuda 2000 National Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-64.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',550000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12929','conversion','EPSG','19849','EPSG','1047','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19850','EPSG vertical perspective example','Example only.','EPSG','9838','Vertical Perspective','EPSG','8834','Latitude of topocentric origin',55.0,'EPSG','9102','EPSG','8835','Longitude of topocentric origin',5.0,'EPSG','9102','EPSG','8836','Ellipsoidal height of topocentric origin',200.0,'EPSG','9001','EPSG','8840','Viewpoint height',5900.0,'EPSG','9036',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12930','conversion','EPSG','19850','EPSG','1263','EPSG','1030'); INSERT INTO "conversion" VALUES('EPSG','19851','Croatia Transverse Mercator','Croatia LCC (code 19852) used for medium and small scale mapping..','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',16.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12931','conversion','EPSG','19851','EPSG','1076','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19852','Croatia Lambert Conformal Conic','Croatia TM (code 19851) used for cadastre, large scale topographic mapping and engineering survey.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',16.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',45.55,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',43.05,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12932','conversion','EPSG','19852','EPSG','1076','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19853','Portugual TM06','Applied to ETRS89.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.400573,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.075919,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12933','conversion','EPSG','19853','EPSG','1294','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19854','South Georgia Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-55.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-37.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-54.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-54.45,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12934','conversion','EPSG','19854','EPSG','3529','EPSG','1189'); INSERT INTO "conversion" VALUES('EPSG','19855','Mercator 41','','EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',-41.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',100.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12935','conversion','EPSG','19855','EPSG','3508','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19856','TM Reunion','Replaces Gauss Laborde Reunion.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-21.07,'EPSG','9110','EPSG','8802','Longitude of natural origin',55.32,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',160000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12936','conversion','EPSG','19856','EPSG','3337','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19857','Northwest Territories Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-112.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',62.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',70.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12937','conversion','EPSG','19857','EPSG','3481','EPSG','1238'); INSERT INTO "conversion" VALUES('EPSG','19858','Yukon Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',59.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-132.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',61.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',68.0,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12938','conversion','EPSG','19858','EPSG','2417','EPSG','1238'); INSERT INTO "conversion" VALUES('EPSG','19859','Fiji Map Grid','Replaces Viti Levu Grid and Vanua Levu Grid (codes 19878-79).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-17.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',178.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99985,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12939','conversion','EPSG','19859','EPSG','1094','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','19860','Jamaica Metric Grid 2001','Replaces Jamaica National Grid (proj code 19910).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',18.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-77.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',750000.0,'EPSG','9001','EPSG','8807','False northing',650000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12940','conversion','EPSG','19860','EPSG','3342','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19861','Laborde Grid','Longitude is referenced to the Paris meridian. See Laborde Grid (Greenwich) (projection code 8440) for equivalent in degrees referenced to Greenwich. Within a few hundred km of origin, may be approximated by Oblique Mercator method - see proj code 19911.','EPSG','9813','Laborde Oblique Mercator','EPSG','8811','Latitude of projection centre',-21.0,'EPSG','9105','EPSG','8812','Longitude of projection centre',49.0,'EPSG','9105','EPSG','8813','Azimuth at projection centre',21.0,'EPSG','9105','EPSG','8815','Scale factor at projection centre',0.9995,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12941','conversion','EPSG','19861','EPSG','1149','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19862','Belgian Lambert 2005','Introduced in 2005.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',50.4752134,'EPSG','9110','EPSG','8822','Longitude of false origin',4.2133177,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.1,'EPSG','9110','EPSG','8826','Easting at false origin',150328.0,'EPSG','9001','EPSG','8827','Northing at false origin',166262.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12942','conversion','EPSG','19862','EPSG','1347','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19863','South China Sea Lambert','Originally defined with FN=500000 at true origin. This is at 21° 00'' 37.0619"N. But operators assumed that it was at 21°N exactly. Thus by common practice Nf=500000 at 21°N exactly. The potential ambiguity is 1138m.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',21.0,'EPSG','9102','EPSG','8822','Longitude of false origin',114.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',18.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',24.0,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12943','conversion','EPSG','19863','EPSG','3470','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','19864','Singapore Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',1.22,'EPSG','9110','EPSG','8802','Longitude of natural origin',103.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',28001.642,'EPSG','9001','EPSG','8807','False northing',38744.572,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12944','conversion','EPSG','19864','EPSG','1210','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','19865','US NSIDC Sea Ice polar stereographic north','Used in polar research.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',70.0,'EPSG','9102','EPSG','8833','Longitude of origin',-45.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12945','conversion','EPSG','19865','EPSG','1996','EPSG','1110'); INSERT INTO "conversion" VALUES('EPSG','19866','US NSIDC Sea Ice polar stereographic south','Used in polar research.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-70.0,'EPSG','9102','EPSG','8833','Longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12946','conversion','EPSG','19866','EPSG','1997','EPSG','1110'); INSERT INTO "conversion" VALUES('EPSG','19867','US NSIDC Equal Area north projection','See information source for equations to define Equal-Area Scalable Earth Grid (EASE-Grid) overlay.','EPSG','9821','Lambert Azimuthal Equal Area (Spherical)','EPSG','8828','Spherical latitude of origin',90.0,'EPSG','9102','EPSG','8829','Spherical longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12947','conversion','EPSG','19867','EPSG','1996','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','19868','US NSIDC Equal Area south projection','See information source for equations to define Equal-Area Scalable Earth Grid (EASE-Grid) overlay.','EPSG','9821','Lambert Azimuthal Equal Area (Spherical)','EPSG','8828','Spherical latitude of origin',-90.0,'EPSG','9102','EPSG','8829','Spherical longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12948','conversion','EPSG','19868','EPSG','1997','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','19869','US NSIDC Equal Area global projection','See information source for equations to define Equal-Area Scalable Earth Grid (EASE-Grid) overlay.','EPSG','9834','Lambert Cylindrical Equal Area (Spherical)','EPSG','8823','Latitude of 1st standard parallel',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12949','conversion','EPSG','19869','EPSG','3463','EPSG','1195'); INSERT INTO "conversion" VALUES('EPSG','19870','Faroe Lambert','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',62.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12950','conversion','EPSG','19870','EPSG','3248','EPSG','1091'); INSERT INTO "conversion" VALUES('EPSG','19871','Rectified Skew Orthomorphic Malaya Grid (chain)','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=23505.515 chSe(T), Nc=21992.646 chSe(T).','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',102.15,'EPSG','9110','EPSG','8813','Azimuth at projection centre',323.01328458,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',323.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9301','EPSG','8807','False northing',0.0,'EPSG','9301',0); INSERT INTO "usage" VALUES('EPSG','12951','conversion','EPSG','19871','EPSG','1690','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19872','Rectified Skew Orthomorphic Malaya Grid (metre)','Uses metric conversion factor of 0.914398 metres per yard exactly. If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=472854.710m, Nc=442420.693m.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',102.15,'EPSG','9110','EPSG','8813','Azimuth at projection centre',323.01328458,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',323.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8806','False easting',804670.24,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','12952','conversion','EPSG','19872','EPSG','1690','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19873','Noumea Lambert','Applications unable to define parameter values in decimal seconds should use the Noumea Lambert 2 projection which gives the same conversion results.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-22.16108903,'EPSG','9110','EPSG','8822','Longitude of false origin',166.26327327,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-22.14408903,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-22.17408903,'EPSG','9110','EPSG','8826','Easting at false origin',0.66,'EPSG','9001','EPSG','8827','Northing at false origin',1.02,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12953','conversion','EPSG','19873','EPSG','2823','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19874','Noumea Lambert 2','Variant of Noumea Lambert (proj code 19873) defined for applications unable to define parameter values in decimal seconds. Gives same conversion results.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-22.1611,'EPSG','9110','EPSG','8822','Longitude of false origin',166.2633,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-22.1441,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-22.1741,'EPSG','9110','EPSG','8826','Easting at false origin',8.313,'EPSG','9001','EPSG','8827','Northing at false origin',-2.354,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12954','conversion','EPSG','19874','EPSG','2823','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19875','Ontario MNR Lambert','One of a number of similar projections used by Ontario MNR.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',53.5,'EPSG','9102','EPSG','8826','Easting at false origin',930000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6430000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12955','conversion','EPSG','19875','EPSG','1367','EPSG','1220'); INSERT INTO "conversion" VALUES('EPSG','19876','ST74','Replaced by County ST74 (proj code 3853).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',18.0328044,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999425,'EPSG','9201','EPSG','8806','False easting',100178.1808,'EPSG','9001','EPSG','8807','False northing',-6500614.7836,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12956','conversion','EPSG','19876','EPSG','3408','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19877','Faroe Lambert fk89','','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',62.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',700000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12957','conversion','EPSG','19877','EPSG','3248','EPSG','1028'); INSERT INTO "conversion" VALUES('EPSG','19878','Vanua Levu Grid','Original definition is in chains (1 chain = 100 links).','EPSG','9833','Hyperbolic Cassini-Soldner','EPSG','8801','Latitude of natural origin',-16.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',179.2,'EPSG','9110','EPSG','8806','False easting',1251331.8,'EPSG','9098','EPSG','8807','False northing',1662888.5,'EPSG','9098',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12958','conversion','EPSG','19878','EPSG','3401','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','19879','Viti Levu Grid','Original definition is in chains (1 chain = 100 links).','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',-18.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',178.0,'EPSG','9102','EPSG','8806','False easting',544000.0,'EPSG','9098','EPSG','8807','False northing',704000.0,'EPSG','9098',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12959','conversion','EPSG','19879','EPSG','3195','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','19880','Fiji Map Grid','Supersedes Viti Levu Grid and Vanua Levu Grid (codes 19878-79).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-17.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',178.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99985,'EPSG','9001','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12960','conversion','EPSG','19880','EPSG','1094','EPSG','1056'); INSERT INTO "conversion" VALUES('EPSG','19881','Alberta 10-degree TM (Forest)','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9992,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12961','conversion','EPSG','19881','EPSG','2376','EPSG','1220'); INSERT INTO "conversion" VALUES('EPSG','19882','Alberta 10-degree TM (Resource)','Has negative easting coordinates in western Alberta. For an alternative with positive coordinates see Alberta 10-degree TM (Forest) (code 19881).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9992,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12962','conversion','EPSG','19882','EPSG','2376','EPSG','1220'); INSERT INTO "conversion" VALUES('EPSG','19883','World Mercator','','EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12963','conversion','EPSG','19883','EPSG','3391','EPSG','1228'); INSERT INTO "conversion" VALUES('EPSG','19884','Caspian Sea Mercator','','EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',42.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12964','conversion','EPSG','19884','EPSG','1291','EPSG','1198'); INSERT INTO "conversion" VALUES('EPSG','19885','Kelantan Grid','Origin is station P243 at B. Polis Melor, Kota Bahuru. Offset from old grid origin: 13227.851m east, 8739.894m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',5.582115717,'EPSG','9110','EPSG','8802','Longitude of natural origin',102.174287001,'EPSG','9110','EPSG','8806','False easting',13227.851,'EPSG','9001','EPSG','8807','False northing',8739.894,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12965','conversion','EPSG','19885','EPSG','3384','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19886','Perak Grid','Origin is station TG26 at Gunung Larut Hiijau, Taiping. Offset from old grid origin is -1.769m east, 0.994m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',4.513262688,'EPSG','9110','EPSG','8802','Longitude of natural origin',100.485547811,'EPSG','9110','EPSG','8806','False easting',-1.769,'EPSG','9001','EPSG','8807','False northing',133454.779,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12966','conversion','EPSG','19886','EPSG','3383','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19887','Kedah and Perlis Grid','Origin is station TG35 at Gunung Perak, Kuala Muda.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',5.575282177,'EPSG','9110','EPSG','8802','Longitude of natural origin',100.3810936,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12967','conversion','EPSG','19887','EPSG','3382','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19888','Pinang Grid','Origin is station P314 at TLDM Georgetown. Offset from old grid origin is -23.414m east, 62.2832m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',5.251746315,'EPSG','9110','EPSG','8802','Longitude of natural origin',100.203975707,'EPSG','9110','EPSG','8806','False easting',-23.414,'EPSG','9001','EPSG','8807','False northing',62.283,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12968','conversion','EPSG','19888','EPSG','3381','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19889','Terengganu Grid','Origin is station P253 at Kg. Matang, Hulu Terenganu. Offset from old grid origin: 19594.245m east, 3371.895m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',4.583462672,'EPSG','9110','EPSG','8802','Longitude of natural origin',103.041299225,'EPSG','9110','EPSG','8806','False easting',19594.245,'EPSG','9001','EPSG','8807','False northing',3371.895,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12969','conversion','EPSG','19889','EPSG','3380','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19890','Selangor Grid','Origin is station 251D at Felda Soeharto, K. Kuba Baharu. Offset from old grid origin is -13076.704m east, 503.095m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',3.410473658,'EPSG','9110','EPSG','8802','Longitude of natural origin',101.232078849,'EPSG','9110','EPSG','8806','False easting',-34836.161,'EPSG','9001','EPSG','8807','False northing',56464.049,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12970','conversion','EPSG','19890','EPSG','3379','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19891','Pahang Grid','Origin is station GP31 at Sek. Ren. Keb. Kuala Mai, Jerantut. Offset from old grid origin is -7368.228m east, 6485.858m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',3.460979712,'EPSG','9110','EPSG','8802','Longitude of natural origin',102.220587634,'EPSG','9110','EPSG','8806','False easting',-7368.228,'EPSG','9001','EPSG','8807','False northing',6485.858,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12971','conversion','EPSG','19891','EPSG','3378','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19892','Sembilan and Melaka Grid','Origin is station GP10 at K. Perindustrian Senawang, Seremban. Offset from old grid origin: 3915.790m east, -3292.026m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',2.405645149,'EPSG','9110','EPSG','8802','Longitude of natural origin',101.582965815,'EPSG','9110','EPSG','8806','False easting',3673.785,'EPSG','9001','EPSG','8807','False northing',-4240.573,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12972','conversion','EPSG','19892','EPSG','3377','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19893','Johor Grid','Origin is station GP58 at Institut Haiwan, Kluang. Offset from old grid origin is -14810.562m east, 8758.320m north.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',2.071804708,'EPSG','9110','EPSG','8802','Longitude of natural origin',103.254057045,'EPSG','9110','EPSG','8806','False easting',-14810.562,'EPSG','9001','EPSG','8807','False northing',8758.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12973','conversion','EPSG','19893','EPSG','3376','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19894','Borneo RSO','Replaces RSO Borneo (proj codes 19956-58) for use with ITRF-based geodetic CRSs. If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=590521.147 m, Nc=442890.861 m.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',115.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',53.185691582,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',53.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','12974','conversion','EPSG','19894','EPSG','1362','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19895','Peninsular RSO','If using Hotine Oblique Mercator (variant B) method (code 9815), Ec=472830.426 m, Nc=442454.099 m.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',102.15,'EPSG','9110','EPSG','8813','Azimuth at projection centre',323.013286728,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',323.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8806','False easting',804671.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','12975','conversion','EPSG','19895','EPSG','3955','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19896','Hong Kong 1963 Grid','Replaced by HK1980 Grid.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',22.184368,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.10428,'EPSG','9110','EPSG','8806','False easting',132033.92,'EPSG','9005','EPSG','8807','False northing',62565.96,'EPSG','9005',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12976','conversion','EPSG','19896','EPSG','1118','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19897','Statistics Canada Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',63.390675,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.52,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',6200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12977','conversion','EPSG','19897','EPSG','1061','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','19898','Pacific Disaster Center Mercator','','EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12978','conversion','EPSG','19898','EPSG','3172','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','19899','Mauritius Grid','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',-20.114225,'EPSG','9110','EPSG','8802','Longitude of natural origin',57.311858,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12979','conversion','EPSG','19899','EPSG','3209','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19900','Bahrain State Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12980','conversion','EPSG','19900','EPSG','1040','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19901','Belge Lambert 50','Longitude is referenced to the Brussels meridian. If software cannot handle latitude of false origin of 90°N, use latitude of false origin = 50°30''00.0"N with northing at false origin = 131983.890 m.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',90.0,'EPSG','9110','EPSG','8822','Longitude of false origin',0.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.1,'EPSG','9110','EPSG','8826','Easting at false origin',150000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12981','conversion','EPSG','19901','EPSG','1347','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19902','Belge Lambert 72','Rotation from Belge Lambert 50 to Belge Lambert 72 is +29.2985sec. An equivalent using the conventional Lambert Conic Conformal (2SP) method (Belgian Lambert 72, code 19961) was introduced in 2000.','EPSG','9803','Lambert Conic Conformal (2SP Belgium)','EPSG','8821','Latitude of false origin',90.0,'EPSG','9110','EPSG','8822','Longitude of false origin',4.2124983,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.5,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',51.1,'EPSG','9110','EPSG','8826','Easting at false origin',150000.01256,'EPSG','9001','EPSG','8827','Northing at false origin',5400088.4378,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12982','conversion','EPSG','19902','EPSG','1347','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19903','Nord de Guerre','Longitude is referenced to the Paris meridian.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',55.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',6.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99950908,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12983','conversion','EPSG','19903','EPSG','1369','EPSG','1215'); INSERT INTO "conversion" VALUES('EPSG','19904','Ghana Metre Grid','Replaces Ghana National Grid (code 19959) from 1978. British foot (Sears 1922) used to convert projection defining parameters.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99975,'EPSG','9201','EPSG','8806','False easting',274319.51,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12984','conversion','EPSG','19904','EPSG','1104','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19905','Netherlands East Indies Equatorial Zone','','EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',110.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.997,'EPSG','9201','EPSG','8806','False easting',3900000.0,'EPSG','9001','EPSG','8807','False northing',900000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12985','conversion','EPSG','19905','EPSG','4020','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19906','Iraq zone','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',32.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9987864078,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',1166200.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12986','conversion','EPSG','19906','EPSG','2294','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19907','Iraq National Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.0134566,'EPSG','9110','EPSG','8802','Longitude of natural origin',46.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9994,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12987','conversion','EPSG','19907','EPSG','3625','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19908','Irish National Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000035,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','12988','conversion','EPSG','19908','EPSG','1305','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19909','Jamaica (Old Grid)','Replaced by Jamaica National Grid (proj code 19910).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',18.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-77.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',550000.0,'EPSG','9005','EPSG','8807','False northing',400000.0,'EPSG','9005',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12989','conversion','EPSG','19909','EPSG','3342','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19910','Jamaica National Grid','Replaces Jamaica (Old Grid) (proj code 19909). Replaced by Jamaica Metric Grid 2001 (proj code 19860).','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',18.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-77.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',150000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12990','conversion','EPSG','19910','EPSG','3342','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19911','Laborde Grid approximation','Longitude is referenced to the Paris meridian. The conversion method is a good approximation (better than 5cm) to original formula (see proj code 19861) within a few hundred km of origin, but farther away the approximation may be no better than 1m.','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',-21.0,'EPSG','9105','EPSG','8812','Longitude of projection centre',49.0,'EPSG','9105','EPSG','8813','Azimuth at projection centre',21.0,'EPSG','9105','EPSG','8814','Angle from Rectified to Skew Grid',21.0,'EPSG','9105','EPSG','8815','Scale factor at projection centre',0.9995,'EPSG','9201','EPSG','8816','Easting at projection centre',400000.0,'EPSG','9001','EPSG','8817','Northing at projection centre',800000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','12991','conversion','EPSG','19911','EPSG','1149','EPSG','1211'); INSERT INTO "conversion" VALUES('EPSG','19913','RD Old','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',52.0922178,'EPSG','9110','EPSG','8802','Longitude of natural origin',5.23155,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999079,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12992','conversion','EPSG','19913','EPSG','1275','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19914','RD New','','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',52.0922178,'EPSG','9110','EPSG','8802','Longitude of natural origin',5.23155,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999079,'EPSG','9201','EPSG','8806','False easting',155000.0,'EPSG','9001','EPSG','8807','False northing',463000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12993','conversion','EPSG','19914','EPSG','1275','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19915','Aden Zone','','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',15.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999365678,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12994','conversion','EPSG','19915','EPSG','3332','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19916','British National Grid','With the introduction of OSTN15, the area for the British National Grid has effectively been extended from Britain to cover the adjacent UK Continental Shelf.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996012717,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',-100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12995','conversion','EPSG','19916','EPSG','4390','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19917','New Zealand Map Grid','Replaces North and South Island National Grids (codes 18141-2). Used for topographic mapping.','EPSG','9811','New Zealand Map Grid','EPSG','8801','Latitude of natural origin',-41.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',173.0,'EPSG','9102','EPSG','8806','False easting',2510000.0,'EPSG','9001','EPSG','8807','False northing',6023150.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12996','conversion','EPSG','19917','EPSG','3973','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19919','Qatar National Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.27,'EPSG','9110','EPSG','8802','Longitude of natural origin',51.13,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12997','conversion','EPSG','19919','EPSG','1195','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19920','Singapore Grid','','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',1.1715528,'EPSG','9110','EPSG','8802','Longitude of natural origin',103.5110808,'EPSG','9110','EPSG','8806','False easting',30000.0,'EPSG','9001','EPSG','8807','False northing',30000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12998','conversion','EPSG','19920','EPSG','1210','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19921','Spain','Replaced by UTM. Longitude is referenced to the Madrid meridian.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9988085293,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','12999','conversion','EPSG','19921','EPSG','2366','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19922','Swiss Oblique Mercator 1903M','','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',46.570866,'EPSG','9110','EPSG','8812','Longitude of projection centre',7.26225,'EPSG','9110','EPSG','8813','Azimuth at projection centre',90.0,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',90.0,'EPSG','9110','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8816','Easting at projection centre',600000.0,'EPSG','9001','EPSG','8817','Northing at projection centre',200000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','13000','conversion','EPSG','19922','EPSG','1286','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19923','Swiss Oblique Mercator 1903C','In Switzerland, replaced by new grid LV03 (proj code 19922). Longitude is referenced to the Bern meridian. See proj code 19841 for Greenwich-based equivalent.','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',46.570866,'EPSG','9110','EPSG','8812','Longitude of projection centre',0.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',90.0,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',90.0,'EPSG','9110','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8816','Easting at projection centre',0.0,'EPSG','9001','EPSG','8817','Northing at projection centre',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','13001','conversion','EPSG','19923','EPSG','1286','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19924','Tobago Grid','','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',11.1507843,'EPSG','9110','EPSG','8802','Longitude of natural origin',-60.4109632,'EPSG','9110','EPSG','8806','False easting',187500.0,'EPSG','9039','EPSG','8807','False northing',180000.0,'EPSG','9039',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13002','conversion','EPSG','19924','EPSG','1322','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19925','Trinidad Grid','','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',10.263,'EPSG','9110','EPSG','8802','Longitude of natural origin',-61.2,'EPSG','9110','EPSG','8806','False easting',430000.0,'EPSG','9039','EPSG','8807','False northing',325000.0,'EPSG','9039',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13003','conversion','EPSG','19925','EPSG','1339','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19926','Stereo 70','Replaces Stereo 33 (code 19927).','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',46.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99975,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13004','conversion','EPSG','19926','EPSG','1197','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19927','Stereo 33','Replaced by Stereo 70 (code 19926)','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',45.54,'EPSG','9110','EPSG','8802','Longitude of natural origin',25.23328772,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13005','conversion','EPSG','19927','EPSG','1197','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19928','Kuwait TM','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',48.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13006','conversion','EPSG','19928','EPSG','1310','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19929','Sweden zone 2.5 gon V','At the municipal level alternative projections are found defined with different sets of False Northing and Easting, based on 100 km grid squares. This is denoted by the last part of the name.  For example 61:-1 means FN = -6100000 and FE = 100000 m.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',15.48298,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13007','conversion','EPSG','19929','EPSG','2847','EPSG','1055'); INSERT INTO "usage" VALUES('EPSG','13008','conversion','EPSG','19929','EPSG','3313','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19930','Greek Grid','Created for use with GGRS87.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13009','conversion','EPSG','19930','EPSG','3254','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19931','Egyseges Orszagos Vetuleti','EOV = Uniform National Projection','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',47.08398174,'EPSG','9110','EPSG','8812','Longitude of projection centre',19.02548584,'EPSG','9110','EPSG','8813','Azimuth at projection centre',90.0,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',90.0,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99993,'EPSG','9201','EPSG','8816','Easting at projection centre',650000.0,'EPSG','9001','EPSG','8817','Northing at projection centre',200000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','13010','conversion','EPSG','19931','EPSG','1119','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19933','Prince Edward Island Stereographic (ATS77)','In use from 1979. To be phased out in late 1990''s.','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',47.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999912,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13011','conversion','EPSG','19933','EPSG','1533','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19934','Lithuania 1994','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13012','conversion','EPSG','19934','EPSG','1145','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19935','Rectified Skew Orthomorphic Malaya Grid','If using Oblique Mercator method (code 9815), Ec=23505.515 chSe, Nc=21992.646 chSe.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',102.15,'EPSG','9110','EPSG','8813','Azimuth at projection centre',323.01328458,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',323.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9062','EPSG','8807','False northing',0.0,'EPSG','9062',1); INSERT INTO "usage" VALUES('EPSG','13013','conversion','EPSG','19935','EPSG','1690','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19936','Portuguese National Grid','Original transformation by Gauss-Kruger formula. Longitude is referenced to the Lisbon meridian.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',1.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13014','conversion','EPSG','19936','EPSG','1294','EPSG','1160'); INSERT INTO "conversion" VALUES('EPSG','19937','Tunisia Mining Grid','The origin of the grid is at 38.81973gN, 7.83445gE of Paris, near Djebel Kebar, at which the grid reference is 270582.','EPSG','9816','Tunisia Mining Grid','EPSG','8821','Latitude of false origin',36.5964,'EPSG','9105','EPSG','8822','Longitude of false origin',7.83445,'EPSG','9105','EPSG','8826','Easting at false origin',270.0,'EPSG','9036','EPSG','8827','Northing at false origin',360.0,'EPSG','9036',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13015','conversion','EPSG','19937','EPSG','1618','EPSG','1249'); INSERT INTO "conversion" VALUES('EPSG','19938','Estonian National Grid','Coordinates at the projection origin match those of TM Baltic 93.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',57.310319415,'EPSG','9110','EPSG','8822','Longitude of false origin',24.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',59.2,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',58.0,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6375000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13016','conversion','EPSG','19938','EPSG','1090','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19939','TM Baltic 93','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13017','conversion','EPSG','19939','EPSG','1646','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19940','Levant Zone','Replaced by projection using full Lambert formula (EPSG code 19948) from 1973.','EPSG','9817','Lambert Conic Near-Conformal','EPSG','8801','Latitude of natural origin',34.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',37.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996256,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13018','conversion','EPSG','19940','EPSG','1623','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19941','Brazil Polyconic','','EPSG','9818','American Polyconic','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-54.0,'EPSG','9102','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13019','conversion','EPSG','19941','EPSG','1053','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','19942','British West Indies Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-62.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13020','conversion','EPSG','19942','EPSG','2295','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19943','Barbados National Grid','Replaced British West Indies Grid (19942) after 1983.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',13.1035,'EPSG','9110','EPSG','8802','Longitude of natural origin',-59.3335,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999986,'EPSG','9201','EPSG','8806','False easting',30000.0,'EPSG','9001','EPSG','8807','False northing',75000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13021','conversion','EPSG','19943','EPSG','3218','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19944','Quebec Lambert Projection','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-68.3,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',60.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9110','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13022','conversion','EPSG','19944','EPSG','1368','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19945','New Brunswick Stereographic (ATS77)','In use from 1979. To be phased out in late 1990''s.','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',46.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-66.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999912,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13023','conversion','EPSG','19945','EPSG','1447','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19946','New Brunswick Stereographic (NAD83)','In use from 1999.','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',46.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-66.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999912,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',7500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13024','conversion','EPSG','19946','EPSG','1447','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19947','Austria Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.3,'EPSG','9110','EPSG','8822','Longitude of false origin',13.2,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',49.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13025','conversion','EPSG','19947','EPSG','1037','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19948','Syria Lambert','Replaced Levant zone using same parameters but truncated near-conformal method (code 19940) from 1973.','EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',34.39,'EPSG','9110','EPSG','8802','Longitude of natural origin',37.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996256,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13026','conversion','EPSG','19948','EPSG','1623','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19949','Levant Stereographic','Used prior to World War II for cadastral and large scale topographic mapping.','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',43.5,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.9995341,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13027','conversion','EPSG','19949','EPSG','1623','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19950','Swiss Oblique Mercator 1995','','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',46.570866,'EPSG','9110','EPSG','8812','Longitude of projection centre',7.26225,'EPSG','9110','EPSG','8813','Azimuth at projection centre',90.0,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',90.0,'EPSG','9110','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8816','Easting at projection centre',2600000.0,'EPSG','9001','EPSG','8817','Northing at projection centre',1200000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','13028','conversion','EPSG','19950','EPSG','1286','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19951','Nakhl e Taqi Oblique Mercator','Used only for terminal site.','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',27.31077837,'EPSG','9110','EPSG','8812','Longitude of projection centre',52.3612741,'EPSG','9110','EPSG','8813','Azimuth at projection centre',0.34179803,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',0.34179803,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.999895934,'EPSG','9201','EPSG','8816','Easting at projection centre',658377.437,'EPSG','9001','EPSG','8817','Northing at projection centre',3044969.194,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','13029','conversion','EPSG','19951','EPSG','1338','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19952','Krovak','Original definition. Longitude is referenced to the Ferro meridian. See projection code 5509 for alternative referenced to the Greenwich meridian and code 5218 for north-orientated alternative introduced for GIS purposes.','EPSG','9819','Krovak','EPSG','8811','Latitude of projection centre',49.3,'EPSG','9110','EPSG','8833','Longitude of origin',42.3,'EPSG','9110','EPSG','1036','Co-latitude of cone axis',30.171730311,'EPSG','9110','EPSG','8818','Latitude of pseudo standard parallel',78.3,'EPSG','9110','EPSG','8819','Scale factor on pseudo standard parallel',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','13030','conversion','EPSG','19952','EPSG','1306','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19953','Qatar Grid','','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',25.22565,'EPSG','9110','EPSG','8802','Longitude of natural origin',50.4541,'EPSG','9110','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13031','conversion','EPSG','19953','EPSG','1346','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19954','Suriname Old TM','Introduced in 1975. Replaced by Suriname TM in 1979.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-55.41,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13032','conversion','EPSG','19954','EPSG','1222','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19955','Suriname TM','Replaced Suriname Old TM in 1979 (scale factor changed).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-55.41,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13033','conversion','EPSG','19955','EPSG','1222','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19956','Rectified Skew Orthomorphic Borneo Grid (chain)','See 19957 and 19958 for feet and metres versions. If using Hotine Oblique Mercator (variant A) method (code 9812) FE = FN = 0 chSe. Being replaced by metric version (code 19958).','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',115.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',53.18569537,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',53.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8816','Easting at projection centre',29352.4763,'EPSG','9042','EPSG','8817','Northing at projection centre',22014.3572,'EPSG','9042',0); INSERT INTO "usage" VALUES('EPSG','13034','conversion','EPSG','19956','EPSG','1362','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19957','Rectified Skew Orthomorphic Borneo Grid (foot)','See 19956 and 19958 for chains and metres versions. If using Hotine Oblique Mercator (variant A) method (code 9812) FE = FN = 0 ftSe. Being replaced by metric version (code 19958).','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',115.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',53.18569537,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',53.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8816','Easting at projection centre',1937263.44,'EPSG','9041','EPSG','8817','Northing at projection centre',1452947.58,'EPSG','9041',0); INSERT INTO "usage" VALUES('EPSG','13035','conversion','EPSG','19957','EPSG','3977','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19958','Rectified Skew Orthomorphic Borneo Grid (metre)','See 19956 and 19957 for chains and feet versions. Uses Sear''s 1922 British yard-metre ratio as given by Bomford as 39.370147 inches per metre. If using Hotine Oblique Mercator (variant A) method (code 9812) FE = FN = 0 m.','EPSG','9815','Hotine Oblique Mercator (variant B)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',115.0,'EPSG','9110','EPSG','8813','Azimuth at projection centre',53.18569537,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',53.07483685,'EPSG','9110','EPSG','8815','Scale factor at projection centre',0.99984,'EPSG','9201','EPSG','8816','Easting at projection centre',590476.87,'EPSG','9001','EPSG','8817','Northing at projection centre',442857.65,'EPSG','9001',0); INSERT INTO "usage" VALUES('EPSG','13036','conversion','EPSG','19958','EPSG','1362','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19959','Ghana National Grid','Replaced by Ghana metric grid (code 19904).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99975,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9094','EPSG','8807','False northing',0.0,'EPSG','9094',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13037','conversion','EPSG','19959','EPSG','1104','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19960','Prince Edward Isl. Stereographic (NAD83)','False Easting and False Northing changed from values used with ATS77 (which were FE=700000m; FN=400000m) to these new values when used with NAD83 (CSRS). New values are FE=400000m; FN=800000m; adopted in 2000.','EPSG','9809','Oblique Stereographic','EPSG','8801','Latitude of natural origin',47.15,'EPSG','9110','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999912,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13038','conversion','EPSG','19960','EPSG','1533','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19961','Belgian Lambert 72','Introduced in 2000. Equivalent to Belge Lambert 72 (code 19902). If software cannot handle latitude of false origin of 90°N, use latitude of false origin = 50°47''57.704"N with northing at false origin = 165 372.956 m.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',90.0,'EPSG','9110','EPSG','8822','Longitude of false origin',4.2202952,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',51.100000204,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',49.500000204,'EPSG','9110','EPSG','8826','Easting at false origin',150000.013,'EPSG','9001','EPSG','8827','Northing at false origin',5400088.438,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13039','conversion','EPSG','19961','EPSG','1347','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19962','Irish Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99982,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',750000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13040','conversion','EPSG','19962','EPSG','1305','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19963','Sierra Leone New Colony Grid','Replaces the Sierra Leone Colony Grid. New grid is 422.3 ft west and 112.1 ft south of old grid.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',6.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-12.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9094','EPSG','8807','False northing',0.0,'EPSG','9094',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13041','conversion','EPSG','19963','EPSG','1342','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19964','New War Office Sierra Leone Grid','Replaces the War Office Sierra Leone Grid. New grid is 422.3 ft west and 112.1 ft south of old grid.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',6.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-12.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9094','EPSG','8807','False northing',600000.0,'EPSG','9094',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13042','conversion','EPSG','19964','EPSG','1342','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19965','US National Atlas Equal Area','','EPSG','9821','Lambert Azimuthal Equal Area (Spherical)','EPSG','8828','Spherical latitude of origin',45.0,'EPSG','9102','EPSG','8829','Spherical longitude of origin',-100.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13043','conversion','EPSG','19965','EPSG','1245','EPSG','1162'); INSERT INTO "conversion" VALUES('EPSG','19966','Luxembourg TM','Name changed as part of redefinition of system in 2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13044','conversion','EPSG','19966','EPSG','1146','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19967','Slovenia Grid','Replaced by Slovene National Grid (code 19845) soon after Slovenian independence.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13045','conversion','EPSG','19967','EPSG','1212','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19968','World Equidistant Cylindrical (Sphere)','Origin at intersection of equator and prime meridian.','EPSG','9823','Equidistant Cylindrical (Spherical)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13046','conversion','EPSG','19968','EPSG','1262','EPSG','1192'); INSERT INTO "conversion" VALUES('EPSG','19969','Portuguese Grid','Original transformation by Gauss-Kruger formula. Longitude is referenced to the Lisbon meridian. Replaced by definition using Greenwich meridian, proj code 5020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',1.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13047','conversion','EPSG','19969','EPSG','1294','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19971','New Zealand Transverse Mercator 2000','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',173.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1600000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13048','conversion','EPSG','19971','EPSG','3973','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19972','Irish Grid','Defined as part of the 1965 and 1975 mapping adustments in which the scale factor was introduced as a best fit to retain existing grid coordinates.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000035,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13049','conversion','EPSG','19972','EPSG','1305','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19973','Irish National Grid','Used only with the 1952 geodetic adjustment. Replaced by the 1975 Mapping Adjustment: see code 19972.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13050','conversion','EPSG','19973','EPSG','2530','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19974','Modified Portuguese Grid','Applied to Datum 73. Grid position at origin is coincident with the unmodified grid applied to Lisbon datum.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0754862,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',180.598,'EPSG','9001','EPSG','8807','False northing',-86.99,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13051','conversion','EPSG','19974','EPSG','1294','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19975','Trinidad Grid (Clarke''s foot)','Foot version of EPSG code 19925. Not an official system, but used by some US-based organisations including Amoco Trinidad.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',10.263,'EPSG','9110','EPSG','8802','Longitude of natural origin',-61.2,'EPSG','9110','EPSG','8806','False easting',283800.0,'EPSG','9005','EPSG','8807','False northing',214500.0,'EPSG','9005',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13052','conversion','EPSG','19975','EPSG','1339','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','19976','ICN Regional','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',6.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',9.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',3.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13053','conversion','EPSG','19976','EPSG','1251','EPSG','1242'); INSERT INTO "conversion" VALUES('EPSG','19977','Aramco Lambert','Used by Saudi Aramco when area of interest crosses UTM zone boundary. Adopted by partners for Core Venture 1 (South Ghawar) area.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.0522236,'EPSG','9110','EPSG','8822','Longitude of false origin',48.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',17.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13054','conversion','EPSG','19977','EPSG','3303','EPSG','1136'); INSERT INTO "conversion" VALUES('EPSG','19978','Hong Kong 1980 Grid','Grid origin is Partiridge Hill triangulation station (old trig "2").','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',22.184368,'EPSG','9110','EPSG','8802','Longitude of natural origin',114.10428,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',836694.05,'EPSG','9001','EPSG','8807','False northing',819069.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13055','conversion','EPSG','19978','EPSG','1118','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19979','Portugal Bonne','Longitude is referenced to the Lisbon meridian. Replaced by definition using Greenwich meridian, proj code 5019.','EPSG','9828','Bonne (South Orientated)','EPSG','8801','Latitude of natural origin',39.4,'EPSG','9110','EPSG','8802','Longitude of natural origin',1.0,'EPSG','9110','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13056','conversion','EPSG','19979','EPSG','1294','EPSG','1062'); INSERT INTO "conversion" VALUES('EPSG','19981','Lambert New Caledonia','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-21.3,'EPSG','9110','EPSG','8822','Longitude of false origin',166.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-20.4,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-22.2,'EPSG','9110','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13057','conversion','EPSG','19981','EPSG','3430','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19982','TM Reunion','Supersedes Gauss Laborde Reunion.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-21.07,'EPSG','9110','EPSG','8802','Longitude of natural origin',55.32,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',160000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13058','conversion','EPSG','19982','EPSG','1196','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19983','Terre Adelie Polar Stereographic','','EPSG','9830','Polar Stereographic (variant C)','EPSG','8832','Latitude of standard parallel',-67.0,'EPSG','9102','EPSG','8833','Longitude of origin',140.0,'EPSG','9102','EPSG','8826','Easting at false origin',300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13059','conversion','EPSG','19983','EPSG','2818','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','19984','British Columbia Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-126.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',50.0,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',58.3,'EPSG','9110','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13060','conversion','EPSG','19984','EPSG','2832','EPSG','1220'); INSERT INTO "conversion" VALUES('EPSG','19985','Europe Conformal 2001','TMzn used for applications at scales larger than 1:500,000. LAEA (code 19986) used for statistical mapping.','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',52.0,'EPSG','9102','EPSG','8822','Longitude of false origin',10.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',4000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13061','conversion','EPSG','19985','EPSG','2881','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','19986','Europe Equal Area 2001','LCC (code 19985) used for conformal mapping.','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.0,'EPSG','9102','EPSG','8806','False easting',4321000.0,'EPSG','9001','EPSG','8807','False northing',3210000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13062','conversion','EPSG','19986','EPSG','2881','EPSG','1162'); INSERT INTO "conversion" VALUES('EPSG','19987','Iceland Lambert 1900','Used only with Reykjavik geogCRS. Longitude of origin originally defined as 31°30'' west of Copenhagen.','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',65.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-19.011965,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13063','conversion','EPSG','19987','EPSG','3262','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','19988','Iceland Lambert 1955','Used only with Hjorsey geogCRS.','EPSG','9826','Lambert Conic Conformal (West Orientated)','EPSG','8801','Latitude of natural origin',65.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13064','conversion','EPSG','19988','EPSG','3262','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','19989','Iceland Lambert 1993','Used only with ISN93 geogCRS. Replaced by Iceland Lambert 2004 (code 5326).','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.0,'EPSG','9110','EPSG','8822','Longitude of false origin',-19.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',64.15,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',65.45,'EPSG','9110','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13065','conversion','EPSG','19989','EPSG','1120','EPSG','1241'); INSERT INTO "conversion" VALUES('EPSG','19990','Latvian Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13066','conversion','EPSG','19990','EPSG','1139','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19991','Jan Mayen Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',-7800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13067','conversion','EPSG','19991','EPSG','2869','EPSG','1153'); INSERT INTO "conversion" VALUES('EPSG','19992','Antarctic Polar Stereographic','Special studies may use a different projection using an alternative longitude of origin. See for example projection code 19993.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-71.0,'EPSG','9102','EPSG','8833','Longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13068','conversion','EPSG','19992','EPSG','1031','EPSG','1254'); INSERT INTO "conversion" VALUES('EPSG','19993','Australian Antarctic Polar Stereographic','','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',-71.0,'EPSG','9102','EPSG','8833','Longitude of origin',70.0,'EPSG','9102','EPSG','8806','False easting',6000000.0,'EPSG','9001','EPSG','8807','False northing',6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13069','conversion','EPSG','19993','EPSG','1278','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19994','Australian Antarctic Lambert','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-50.0,'EPSG','9110','EPSG','8822','Longitude of false origin',70.0,'EPSG','9110','EPSG','8823','Latitude of 1st standard parallel',-68.3,'EPSG','9110','EPSG','8824','Latitude of 2nd standard parallel',-74.3,'EPSG','9110','EPSG','8826','Easting at false origin',6000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13070','conversion','EPSG','19994','EPSG','2880','EPSG','1210'); INSERT INTO "conversion" VALUES('EPSG','19995','Jordan Transverse Mercator','Information has not been confirmed by National Mapping Agency.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',37.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13071','conversion','EPSG','19995','EPSG','1130','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19996','Soldner Berlin','Origin is trigonometrical station Müggelberg. Effective under city ordnance dated 5th November 1991.','EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',52.25071338,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.37379332,'EPSG','9110','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',10000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13072','conversion','EPSG','19996','EPSG','2898','EPSG','1055'); INSERT INTO "conversion" VALUES('EPSG','19997','Kuwait Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',48.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13073','conversion','EPSG','19997','EPSG','1310','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19998','Guernsey Grid','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.25,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',47000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13074','conversion','EPSG','19998','EPSG','2989','EPSG','1142'); INSERT INTO "conversion" VALUES('EPSG','19999','Jersey Transverse Mercator','Effective from 1st January 2005.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.225,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.135,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999999,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',70000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13075','conversion','EPSG','19999','EPSG','2988','EPSG','1142'); proj-9.6.0/data/sql/conversion_triggers.sql000664 001754 001755 00000372277 14764566077 020767 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! CREATE TRIGGER conversion_method_check_insert_trigger INSTEAD OF INSERT ON conversion BEGIN SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (2SP)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9802' AND (NEW.method_name != 'Lambert Conic Conformal (2SP)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8821' OR NEW.param1_name != 'Latitude of false origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8822' OR NEW.param2_name != 'Longitude of false origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8823' OR NEW.param3_name != 'Latitude of 1st standard parallel' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8824' OR NEW.param4_name != 'Latitude of 2nd standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8826' OR NEW.param5_name != 'Easting at false origin' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8827' OR NEW.param6_name != 'Northing at false origin' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Transverse Mercator') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9807' AND (NEW.method_name != 'Transverse Mercator' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Mercator (variant A)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9804' AND (NEW.method_name != 'Mercator (variant A)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Popular Visualisation Pseudo Mercator') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1024' AND (NEW.method_name != 'Popular Visualisation Pseudo Mercator' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Azimuthal Equal Area (Spherical)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1027' AND (NEW.method_name != 'Lambert Azimuthal Equal Area (Spherical)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Equidistant Cylindrical') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1028' AND (NEW.method_name != 'Equidistant Cylindrical' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8823' OR NEW.param1_name != 'Latitude of 1st standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Equidistant Cylindrical (Spherical)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1029' AND (NEW.method_name != 'Equidistant Cylindrical (Spherical)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8823' OR NEW.param1_name != 'Latitude of 1st standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Cassini-Soldner') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9806' AND (NEW.method_name != 'Cassini-Soldner' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Bonne (South Orientated)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9828' AND (NEW.method_name != 'Bonne (South Orientated)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Albers Equal Area') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9822' AND (NEW.method_name != 'Albers Equal Area' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8821' OR NEW.param1_name != 'Latitude of false origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8822' OR NEW.param2_name != 'Longitude of false origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8823' OR NEW.param3_name != 'Latitude of 1st standard parallel' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8824' OR NEW.param4_name != 'Latitude of 2nd standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8826' OR NEW.param5_name != 'Easting at false origin' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8827' OR NEW.param6_name != 'Northing at false origin' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Krovak (North Orientated)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1041' AND (NEW.method_name != 'Krovak (North Orientated)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8833' OR NEW.param2_name != 'Longitude of origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '1036' OR NEW.param3_name != 'Co-latitude of cone axis' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8818' OR NEW.param4_name != 'Latitude of pseudo standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8819' OR NEW.param5_name != 'Scale factor on pseudo standard parallel' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8806' OR NEW.param6_name != 'False easting' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8807' OR NEW.param7_name != 'False northing' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length'); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Krovak Modified') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1042' AND (NEW.method_name != 'Krovak Modified' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8833' OR NEW.param2_name != 'Longitude of origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '1036' OR NEW.param3_name != 'Co-latitude of cone axis' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8818' OR NEW.param4_name != 'Latitude of pseudo standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8819' OR NEW.param5_name != 'Scale factor on pseudo standard parallel' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8806' OR NEW.param6_name != 'False easting' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8807' OR NEW.param7_name != 'False northing' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length'); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Krovak Modified (North Orientated)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1043' AND (NEW.method_name != 'Krovak Modified (North Orientated)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8833' OR NEW.param2_name != 'Longitude of origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '1036' OR NEW.param3_name != 'Co-latitude of cone axis' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8818' OR NEW.param4_name != 'Latitude of pseudo standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8819' OR NEW.param5_name != 'Scale factor on pseudo standard parallel' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8806' OR NEW.param6_name != 'False easting' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8807' OR NEW.param7_name != 'False northing' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length'); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (1SP)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9801' AND (NEW.method_name != 'Lambert Conic Conformal (1SP)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for American Polyconic') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9818' AND (NEW.method_name != 'American Polyconic' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Polar Stereographic (variant A)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9810' AND (NEW.method_name != 'Polar Stereographic (variant A)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Krovak') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9819' AND (NEW.method_name != 'Krovak' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8833' OR NEW.param2_name != 'Longitude of origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '1036' OR NEW.param3_name != 'Co-latitude of cone axis' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8818' OR NEW.param4_name != 'Latitude of pseudo standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8819' OR NEW.param5_name != 'Scale factor on pseudo standard parallel' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8806' OR NEW.param6_name != 'False easting' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8807' OR NEW.param7_name != 'False northing' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length'); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Oblique Stereographic') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9809' AND (NEW.method_name != 'Oblique Stereographic' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Mercator (variant B)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9805' AND (NEW.method_name != 'Mercator (variant B)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8823' OR NEW.param1_name != 'Latitude of 1st standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Polar Stereographic (variant B)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9829' AND (NEW.method_name != 'Polar Stereographic (variant B)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8832' OR NEW.param1_name != 'Latitude of standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8833' OR NEW.param2_name != 'Longitude of origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (2SP Michigan)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1051' AND (NEW.method_name != 'Lambert Conic Conformal (2SP Michigan)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8821' OR NEW.param1_name != 'Latitude of false origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8822' OR NEW.param2_name != 'Longitude of false origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8823' OR NEW.param3_name != 'Latitude of 1st standard parallel' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8824' OR NEW.param4_name != 'Latitude of 2nd standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8826' OR NEW.param5_name != 'Easting at false origin' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8827' OR NEW.param6_name != 'Northing at false origin' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '1038' OR NEW.param7_name != 'Ellipsoid scaling factor' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'scale'); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Colombia Urban') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1052' AND (NEW.method_name != 'Colombia Urban' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '1039' OR NEW.param5_name != 'Projection plane origin height' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Hotine Oblique Mercator (variant A)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9812' AND (NEW.method_name != 'Hotine Oblique Mercator (variant A)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8814' OR NEW.param4_name != 'Angle from Rectified to Skew Grid' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8815' OR NEW.param5_name != 'Scale factor at projection centre' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8806' OR NEW.param6_name != 'False easting' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8807' OR NEW.param7_name != 'False northing' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length'); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Cylindrical Equal Area') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9835' AND (NEW.method_name != 'Lambert Cylindrical Equal Area' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8823' OR NEW.param1_name != 'Latitude of 1st standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Azimuthal Equal Area') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9820' AND (NEW.method_name != 'Lambert Azimuthal Equal Area' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Height Depth Reversal') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1068' AND (NEW.method_name != 'Height Depth Reversal' OR NEW.param1_auth_name IS NOT NULL OR NEW.param1_code IS NOT NULL OR NEW.param1_name IS NOT NULL OR NEW.param1_value IS NOT NULL OR NEW.param1_uom_auth_name IS NOT NULL OR NEW.param1_uom_code IS NOT NULL OR NEW.param2_auth_name IS NOT NULL OR NEW.param2_code IS NOT NULL OR NEW.param2_name IS NOT NULL OR NEW.param2_value IS NOT NULL OR NEW.param2_uom_auth_name IS NOT NULL OR NEW.param2_uom_code IS NOT NULL OR NEW.param3_auth_name IS NOT NULL OR NEW.param3_code IS NOT NULL OR NEW.param3_name IS NOT NULL OR NEW.param3_value IS NOT NULL OR NEW.param3_uom_auth_name IS NOT NULL OR NEW.param3_uom_code IS NOT NULL OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Change of Vertical Unit') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1104' AND (NEW.method_name != 'Change of Vertical Unit' OR NEW.param1_auth_name IS NOT NULL OR NEW.param1_code IS NOT NULL OR NEW.param1_name IS NOT NULL OR NEW.param1_value IS NOT NULL OR NEW.param1_uom_auth_name IS NOT NULL OR NEW.param1_uom_code IS NOT NULL OR NEW.param2_auth_name IS NOT NULL OR NEW.param2_code IS NOT NULL OR NEW.param2_name IS NOT NULL OR NEW.param2_value IS NOT NULL OR NEW.param2_uom_auth_name IS NOT NULL OR NEW.param2_uom_code IS NOT NULL OR NEW.param3_auth_name IS NOT NULL OR NEW.param3_code IS NOT NULL OR NEW.param3_name IS NOT NULL OR NEW.param3_value IS NOT NULL OR NEW.param3_uom_auth_name IS NOT NULL OR NEW.param3_uom_code IS NOT NULL OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Hotine Oblique Mercator (variant B)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9815' AND (NEW.method_name != 'Hotine Oblique Mercator (variant B)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8814' OR NEW.param4_name != 'Angle from Rectified to Skew Grid' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8815' OR NEW.param5_name != 'Scale factor at projection centre' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8816' OR NEW.param6_name != 'Easting at projection centre' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8817' OR NEW.param7_name != 'Northing at projection centre' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length'); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Laborde Oblique Mercator') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9813' AND (NEW.method_name != 'Laborde Oblique Mercator' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8815' OR NEW.param4_name != 'Scale factor at projection centre' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'scale' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8806' OR NEW.param5_name != 'False easting' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8807' OR NEW.param6_name != 'False northing' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Equal Earth') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1078' AND (NEW.method_name != 'Equal Earth' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8802' OR NEW.param1_name != 'Longitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8806' OR NEW.param2_name != 'False easting' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'length' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8807' OR NEW.param3_name != 'False northing' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (1SP variant B)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1102' AND (NEW.method_name != 'Lambert Conic Conformal (1SP variant B)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8805' OR NEW.param2_name != 'Scale factor at natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'scale' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8821' OR NEW.param3_name != 'Latitude of false origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8822' OR NEW.param4_name != 'Longitude of false origin' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8826' OR NEW.param5_name != 'Easting at false origin' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8827' OR NEW.param6_name != 'Northing at false origin' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Transverse Mercator 3D') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1111' AND (NEW.method_name != 'Transverse Mercator 3D' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Local Orthographic') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1130' AND (NEW.method_name != 'Local Orthographic' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8815' OR NEW.param4_name != 'Scale factor at projection centre' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'scale' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8816' OR NEW.param5_name != 'Easting at projection centre' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8817' OR NEW.param6_name != 'Northing at projection centre' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Modified Azimuthal Equidistant') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9832' AND (NEW.method_name != 'Modified Azimuthal Equidistant' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Guam Projection') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9831' AND (NEW.method_name != 'Guam Projection' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Axis Order Reversal (2D)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9843' AND (NEW.method_name != 'Axis Order Reversal (2D)' OR NEW.param1_auth_name IS NOT NULL OR NEW.param1_code IS NOT NULL OR NEW.param1_name IS NOT NULL OR NEW.param1_value IS NOT NULL OR NEW.param1_uom_auth_name IS NOT NULL OR NEW.param1_uom_code IS NOT NULL OR NEW.param2_auth_name IS NOT NULL OR NEW.param2_code IS NOT NULL OR NEW.param2_name IS NOT NULL OR NEW.param2_value IS NOT NULL OR NEW.param2_uom_auth_name IS NOT NULL OR NEW.param2_uom_code IS NOT NULL OR NEW.param3_auth_name IS NOT NULL OR NEW.param3_code IS NOT NULL OR NEW.param3_name IS NOT NULL OR NEW.param3_value IS NOT NULL OR NEW.param3_uom_auth_name IS NOT NULL OR NEW.param3_uom_code IS NOT NULL OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Axis Order Reversal (Geographic3D horizontal)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9844' AND (NEW.method_name != 'Axis Order Reversal (Geographic3D horizontal)' OR NEW.param1_auth_name IS NOT NULL OR NEW.param1_code IS NOT NULL OR NEW.param1_name IS NOT NULL OR NEW.param1_value IS NOT NULL OR NEW.param1_uom_auth_name IS NOT NULL OR NEW.param1_uom_code IS NOT NULL OR NEW.param2_auth_name IS NOT NULL OR NEW.param2_code IS NOT NULL OR NEW.param2_name IS NOT NULL OR NEW.param2_value IS NOT NULL OR NEW.param2_uom_auth_name IS NOT NULL OR NEW.param2_uom_code IS NOT NULL OR NEW.param3_auth_name IS NOT NULL OR NEW.param3_code IS NOT NULL OR NEW.param3_name IS NOT NULL OR NEW.param3_value IS NOT NULL OR NEW.param3_uom_auth_name IS NOT NULL OR NEW.param3_uom_code IS NOT NULL OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Geographic/geocentric conversions') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9602' AND (NEW.method_name != 'Geographic/geocentric conversions' OR NEW.param1_auth_name IS NOT NULL OR NEW.param1_code IS NOT NULL OR NEW.param1_name IS NOT NULL OR NEW.param1_value IS NOT NULL OR NEW.param1_uom_auth_name IS NOT NULL OR NEW.param1_uom_code IS NOT NULL OR NEW.param2_auth_name IS NOT NULL OR NEW.param2_code IS NOT NULL OR NEW.param2_name IS NOT NULL OR NEW.param2_value IS NOT NULL OR NEW.param2_uom_auth_name IS NOT NULL OR NEW.param2_uom_code IS NOT NULL OR NEW.param3_auth_name IS NOT NULL OR NEW.param3_code IS NOT NULL OR NEW.param3_name IS NOT NULL OR NEW.param3_value IS NOT NULL OR NEW.param3_uom_auth_name IS NOT NULL OR NEW.param3_uom_code IS NOT NULL OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Geographic3D to 2D conversion') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9659' AND (NEW.method_name != 'Geographic3D to 2D conversion' OR NEW.param1_auth_name IS NOT NULL OR NEW.param1_code IS NOT NULL OR NEW.param1_name IS NOT NULL OR NEW.param1_value IS NOT NULL OR NEW.param1_uom_auth_name IS NOT NULL OR NEW.param1_uom_code IS NOT NULL OR NEW.param2_auth_name IS NOT NULL OR NEW.param2_code IS NOT NULL OR NEW.param2_name IS NOT NULL OR NEW.param2_value IS NOT NULL OR NEW.param2_uom_auth_name IS NOT NULL OR NEW.param2_uom_code IS NOT NULL OR NEW.param3_auth_name IS NOT NULL OR NEW.param3_code IS NOT NULL OR NEW.param3_name IS NOT NULL OR NEW.param3_value IS NOT NULL OR NEW.param3_uom_auth_name IS NOT NULL OR NEW.param3_uom_code IS NOT NULL OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Geographic/topocentric conversions') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9837' AND (NEW.method_name != 'Geographic/topocentric conversions' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8834' OR NEW.param1_name != 'Latitude of topocentric origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8835' OR NEW.param2_name != 'Longitude of topocentric origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8836' OR NEW.param3_name != 'Ellipsoidal height of topocentric origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Geocentric/topocentric conversions') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9836' AND (NEW.method_name != 'Geocentric/topocentric conversions' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8837' OR NEW.param1_name != 'Geocentric X of topocentric origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'length' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8838' OR NEW.param2_name != 'Geocentric Y of topocentric origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'length' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8839' OR NEW.param3_name != 'Geocentric Z of topocentric origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Transverse Mercator Zoned Grid System') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9824' AND (NEW.method_name != 'Transverse Mercator Zoned Grid System' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8830' OR NEW.param2_name != 'Initial longitude' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8831' OR NEW.param3_name != 'Zone width' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8805' OR NEW.param4_name != 'Scale factor at natural origin' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'scale' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8806' OR NEW.param5_name != 'False easting' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8807' OR NEW.param6_name != 'False northing' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Transverse Mercator (South Orientated)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9808' AND (NEW.method_name != 'Transverse Mercator (South Orientated)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Azimuthal Equidistant') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1125' AND (NEW.method_name != 'Azimuthal Equidistant' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (West Orientated)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9826' AND (NEW.method_name != 'Lambert Conic Conformal (West Orientated)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Equidistant Cylindrical') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9842' AND (NEW.method_name != 'Equidistant Cylindrical' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8822' OR NEW.param2_name != 'Longitude of false origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Mercator (1SP) (Spherical)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9841' AND (NEW.method_name != 'Mercator (1SP) (Spherical)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Vertical Perspective') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9838' AND (NEW.method_name != 'Vertical Perspective' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8834' OR NEW.param1_name != 'Latitude of topocentric origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8835' OR NEW.param2_name != 'Longitude of topocentric origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8836' OR NEW.param3_name != 'Ellipsoidal height of topocentric origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8840' OR NEW.param4_name != 'Viewpoint height' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Azimuthal Equal Area (Spherical)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9821' AND (NEW.method_name != 'Lambert Azimuthal Equal Area (Spherical)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8828' OR NEW.param1_name != 'Spherical latitude of origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8829' OR NEW.param2_name != 'Spherical longitude of origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Cylindrical Equal Area (Spherical)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9834' AND (NEW.method_name != 'Lambert Cylindrical Equal Area (Spherical)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8823' OR NEW.param1_name != 'Latitude of 1st standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Hyperbolic Cassini-Soldner') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9833' AND (NEW.method_name != 'Hyperbolic Cassini-Soldner' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (2SP Belgium)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9803' AND (NEW.method_name != 'Lambert Conic Conformal (2SP Belgium)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8821' OR NEW.param1_name != 'Latitude of false origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8822' OR NEW.param2_name != 'Longitude of false origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8823' OR NEW.param3_name != 'Latitude of 1st standard parallel' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8824' OR NEW.param4_name != 'Latitude of 2nd standard parallel' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8826' OR NEW.param5_name != 'Easting at false origin' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8827' OR NEW.param6_name != 'Northing at false origin' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for New Zealand Map Grid') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9811' AND (NEW.method_name != 'New Zealand Map Grid' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Tunisia Mining Grid') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9816' AND (NEW.method_name != 'Tunisia Mining Grid' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8821' OR NEW.param1_name != 'Latitude of false origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8822' OR NEW.param2_name != 'Longitude of false origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8826' OR NEW.param3_name != 'Easting at false origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8827' OR NEW.param4_name != 'Northing at false origin' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Near-Conformal') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9817' AND (NEW.method_name != 'Lambert Conic Near-Conformal' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Equidistant Cylindrical (Spherical)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9823' AND (NEW.method_name != 'Equidistant Cylindrical (Spherical)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Polar Stereographic (variant C)') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9830' AND (NEW.method_name != 'Polar Stereographic (variant C)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8832' OR NEW.param1_name != 'Latitude of standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8833' OR NEW.param2_name != 'Longitude of origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8826' OR NEW.param3_name != 'Easting at false origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8827' OR NEW.param4_name != 'Northing at false origin' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); END; proj-9.6.0/data/sql/conversion_triggers_hand_written.sql000664 001754 001755 00000004341 14764566077 023515 0ustar00e012349e012349000000 000000 CREATE TRIGGER conversion_method_check_insert_trigger_orthographic INSTEAD OF INSERT ON conversion BEGIN SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Orthographic') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9840' AND (NEW.method_name != 'Orthographic' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL); END; proj-9.6.0/data/sql/coordinate_system.sql000664 001754 001755 00000022760 14764566077 020414 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "coordinate_system" VALUES('EPSG','1024','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1025','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1026','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1027','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1028','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1029','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1030','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','1031','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1032','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','1033','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1034','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1035','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1036','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1037','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1038','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1039','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1040','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','1041','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','1042','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','1043','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','1044','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1045','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','1046','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','1047','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1048','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1049','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','1050','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','1053','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','1054','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4400','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4401','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4402','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4403','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4404','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4405','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4406','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4407','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4408','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4409','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4410','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4460','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4461','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','4462','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4463','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4464','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4465','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4466','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4467','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4468','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4469','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4470','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4471','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4472','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4473','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4474','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4475','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4476','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4477','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4478','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4479','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4480','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4481','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4482','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4483','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4484','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4485','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4486','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4487','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4488','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4489','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4490','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4491','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4492','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4493','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4494','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4495','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4496','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4497','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4498','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4499','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4500','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4501','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4502','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4530','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4531','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4532','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4533','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','4534','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6401','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6402','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6403','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6404','spherical',3); INSERT INTO "coordinate_system" VALUES('EPSG','6405','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6406','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6407','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6408','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6409','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6410','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6411','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6412','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6413','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6414','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6415','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6416','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6417','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6418','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6419','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6420','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6421','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6422','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6423','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6424','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6425','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6426','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6427','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6428','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6429','ellipsoidal',2); INSERT INTO "coordinate_system" VALUES('EPSG','6430','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6431','ellipsoidal',3); INSERT INTO "coordinate_system" VALUES('EPSG','6495','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','6496','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','6497','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','6498','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','6499','vertical',1); INSERT INTO "coordinate_system" VALUES('EPSG','6500','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','6501','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6502','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6503','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6504','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6505','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6506','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6507','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6508','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6509','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6510','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6511','Cartesian',2); INSERT INTO "coordinate_system" VALUES('EPSG','6512','Cartesian',3); INSERT INTO "coordinate_system" VALUES('EPSG','32760','ordinal',2); INSERT INTO "coordinate_system" VALUES('EPSG','32761','ordinal',2); proj-9.6.0/data/sql/customizations.sql000664 001754 001755 00000064521 14764566077 017755 0ustar00e012349e012349000000 000000 -- This file is hand generated. -- grid_alternatives entries created from existing ones INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) SELECT grid_name, 'au_ga_AUSGeoid98.tif', 'AUSGeoid98.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/au_ga_AUSGeoid98.tif', 1, 1, NULL FROM grid_transformation WHERE grid_name LIKE '%DAT.htm' AND name LIKE 'GDA94 to AHD %height%'; -- OGC CRS84, CRS27 and CRS83 longitude/latitude ordered CRS INSERT INTO "geodetic_crs" VALUES('OGC','CRS84','WGS 84 (CRS84)',NULL,'geographic 2D','EPSG','6424','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'OGC_CRS84_USAGE', 'geodetic_crs', 'OGC', 'CRS84', 'EPSG','1262', -- extent 'EPSG','1024' -- unknown ); -- Defined in http://www.opengis.net/def/crs/OGC/0/CRS84h . Same as EPSG:4979 except axis order INSERT INTO "geodetic_crs" VALUES('OGC','CRS84h','WGS 84 longitude-latitude-height',NULL,'geographic 3D','EPSG','6426','EPSG','6326',NULL,0); INSERT INTO "scope" VALUES('PROJ','OGC_CRS84h','3D system frequently used in GIS, Web APIs and Web applications',0); INSERT INTO "usage" VALUES( 'PROJ', 'OGC_CRS84h_USAGE', 'geodetic_crs', 'OGC', 'CRS84h', 'EPSG','1262', -- extent ('World') 'PROJ','OGC_CRS84h' -- scope ); INSERT INTO "geodetic_crs" VALUES('OGC','CRS27','NAD27 (CRS27)',NULL,'geographic 2D','EPSG','6424','EPSG','6267',NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'OGC_CRS27_USAGE', 'geodetic_crs', 'OGC', 'CRS27', 'EPSG','1349', -- extent 'EPSG','1024' -- unknown ); INSERT INTO "geodetic_crs" VALUES('OGC','CRS83','NAD83 (CRS83)',NULL,'geographic 2D','EPSG','6424','EPSG','6269',NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'OGC_CRS83_USAGE', 'geodetic_crs', 'OGC', 'CRS83', 'EPSG','1350', -- extent 'EPSG','1024' -- unknown ); INSERT INTO "other_transformation" VALUES('PROJ','CRS84_TO_EPSG_4326','OGC:CRS84 to WGS 84',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS84','EPSG','4326',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'CRS84_TO_EPSG_4326_USAGE', 'other_transformation', 'PROJ', 'CRS84_TO_EPSG_4326', 'EPSG','1262', -- extent 'EPSG','1024' -- unknown ); INSERT INTO "other_transformation" VALUES('PROJ','CRS27_TO_EPSG_4267','OGC:CRS27 to NAD27',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS27','EPSG','4267',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'CRS27_TO_EPSG_4267_USAGE', 'other_transformation', 'PROJ', 'CRS27_TO_EPSG_4267', 'EPSG','1262', -- extent 'EPSG','1024' -- unknown ); INSERT INTO "other_transformation" VALUES('PROJ','CRS83_TO_EPSG_4269','OGC:CRS83 to NAD83',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS83','EPSG','4269',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'CRS83_TO_EPSG_4269_USAGE', 'other_transformation', 'PROJ', 'CRS83_TO_EPSG_4269', 'EPSG','1262', -- extent 'EPSG','1024' -- unknown ); -- alias of EPSG:3857 INSERT INTO "projected_crs" VALUES('EPSG','900913','Google Maps Global Mercator',NULL,'EPSG','4499','EPSG','4326','EPSG','3856',NULL,1); INSERT INTO "usage" VALUES( 'PROJ', '900913_USAGE', 'projected_crs', 'EPSG', '900913', 'EPSG','3544', -- extent 'EPSG','1098' ); -- ('EPSG','7001','ETRS89 to NAP height (1)') lacks an interpolationCRS with Amersfoort / EPSG:4289 -- See https://salsa.debian.org/debian-gis-team/proj-rdnap/blob/debian/2008-8/Use%20of%20RDTRANS2008%20and%20NAPTRANS2008.pdf -- "The naptrans2008 VDatum-grid is referenced to the Bessel-1841 ellipsoid" CREATE TABLE dummy(foo); CREATE TRIGGER check_grid_transformation_epsg_7001 BEFORE INSERT ON dummy FOR EACH ROW BEGIN SELECT RAISE(ABORT, 'grid_transformation EPSG:7001 entry is not ETRS89 to NAP height (1)') WHERE NOT EXISTS(SELECT 1 FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '7001' AND name = 'ETRS89 to NAP height (1)'); SELECT RAISE(ABORT, 'grid_transformation EPSG:7001 entry has already an interpolationCRS') WHERE EXISTS(SELECT 1 FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '7001' AND interpolation_crs_auth_name IS NOT NULL); END; INSERT INTO dummy DEFAULT VALUES; DROP TRIGGER check_grid_transformation_epsg_7001; DROP TABLE dummy; UPDATE grid_transformation SET interpolation_crs_auth_name = 'EPSG', interpolation_crs_code = '4289' WHERE auth_name = 'EPSG' AND code = '7001'; -- EPSG:1312 'NAD27 to NAD83 (3)' / NTv1_0.gsb has a accuracy of 1m whereas -- EPSG:1313 'NAD27 to NAD83 (4)' / NTv2_0.gsb has a accuracy of 1.5m -- so we will never select automatically NTv2_0.gsb. Worse the advertise -- accuracy of the NTv1 method UPDATE grid_transformation SET accuracy = 2.0 WHERE auth_name = 'EPSG' AND code = '1312'; -- Same for EPSG:1462 vs EPSG:1573 UPDATE grid_transformation SET accuracy = 2.0 WHERE auth_name = 'EPSG' AND code = '1462'; -- Create a PROJ copy of EPSG:9123 "NAD83(CSRS) to CGVD28 height (1)" by -- removing the deprecation flag. -- Having a transformation from/to CGVD28 using the "generic" NAD83(CSRS) is much -- more convenient for low accuracy cases like https://github.com/OSGeo/PROJ/issues/3328 INSERT INTO grid_transformation SELECT 'PROJ' AS auth_name, 'EPSG_9123' AS code, name, description || ' Imported from EPSG:9123 with deprecation flag removed by PROJ' AS description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, grid_param_auth_name, grid_param_code, grid_param_name, grid_name, grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_name, interpolation_crs_auth_name, interpolation_crs_code, operation_version, 0 AS deprecated FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '9123'; INSERT INTO usage SELECT 'PROJ' AS auth_name, 'USAGE_PROJ_EPSG_9123' AS code, object_table_name, 'PROJ' AS object_auth_name, 'EPSG_9123' AS object_code, extent_auth_name, extent_code, scope_auth_name, scope_code FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '9123'; -- Canadian transformations: duplicate EPSG:10518, 10519, 10520, 10116, 10117, 10118 with NAD83(CSRS)v7 as interpolation CRS INSERT INTO grid_transformation SELECT 'PROJ' AS auth_name, 'EPSG_10518_WITH_NAD83CSRSV7_INTERPOLATION' AS code, name, description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, grid_param_auth_name, grid_param_code, grid_param_name, grid_name, grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_name, 'EPSG' AS interpolation_crs_auth_name, 8255 AS interpolation_crs_code, operation_version, 0 AS deprecated FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10518'; INSERT INTO usage SELECT 'PROJ' AS auth_name, 'USAGE_PROJ_EPSG_1058_WITH_NAD83CSRSV7_INTERPOLATION' AS code, object_table_name, 'PROJ' AS object_auth_name, 'EPSG_10518_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code, extent_auth_name, extent_code, scope_auth_name, scope_code FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10518'; INSERT INTO grid_transformation SELECT 'PROJ' AS auth_name, 'EPSG_10519_WITH_NAD83CSRSV7_INTERPOLATION' AS code, name, description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, grid_param_auth_name, grid_param_code, grid_param_name, grid_name, grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_name, 'EPSG' AS interpolation_crs_auth_name, 8255 AS interpolation_crs_code, operation_version, 0 AS deprecated FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10519'; INSERT INTO usage SELECT 'PROJ' AS auth_name, 'USAGE_PROJ_EPSG_10519_WITH_NAD83CSRSV7_INTERPOLATION' AS code, object_table_name, 'PROJ' AS object_auth_name, 'EPSG_10519_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code, extent_auth_name, extent_code, scope_auth_name, scope_code FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10519'; INSERT INTO grid_transformation SELECT 'PROJ' AS auth_name, 'EPSG_10520_WITH_NAD83CSRSV7_INTERPOLATION' AS code, name, description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, grid_param_auth_name, grid_param_code, grid_param_name, grid_name, grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_name, 'EPSG' AS interpolation_crs_auth_name, 8255 AS interpolation_crs_code, operation_version, 0 AS deprecated FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10520'; INSERT INTO usage SELECT 'PROJ' AS auth_name, 'USAGE_PROJ_EPSG_10520_WITH_NAD83CSRSV7_INTERPOLATION' AS code, object_table_name, 'PROJ' AS object_auth_name, 'EPSG_10520_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code, extent_auth_name, extent_code, scope_auth_name, scope_code FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10520'; INSERT INTO grid_transformation SELECT 'PROJ' AS auth_name, 'EPSG_10116_WITH_NAD83CSRSV7_INTERPOLATION' AS code, name, description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, grid_param_auth_name, grid_param_code, grid_param_name, grid_name, grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_name, 'EPSG' AS interpolation_crs_auth_name, 8255 AS interpolation_crs_code, operation_version, 0 AS deprecated FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10116'; INSERT INTO usage SELECT 'PROJ' AS auth_name, 'USAGE_PROJ_EPSG_10116_WITH_NAD83CSRSV7_INTERPOLATION' AS code, object_table_name, 'PROJ' AS object_auth_name, 'EPSG_10116_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code, extent_auth_name, extent_code, scope_auth_name, scope_code FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10116'; INSERT INTO grid_transformation SELECT 'PROJ' AS auth_name, 'EPSG_10117_WITH_NAD83CSRSV7_INTERPOLATION' AS code, name, description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, grid_param_auth_name, grid_param_code, grid_param_name, grid_name, grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_name, 'EPSG' AS interpolation_crs_auth_name, 8255 AS interpolation_crs_code, operation_version, 0 AS deprecated FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10117'; INSERT INTO usage SELECT 'PROJ' AS auth_name, 'USAGE_PROJ_EPSG_10117_WITH_NAD83CSRSV7_INTERPOLATION' AS code, object_table_name, 'PROJ' AS object_auth_name, 'EPSG_10117_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code, extent_auth_name, extent_code, scope_auth_name, scope_code FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10117'; INSERT INTO grid_transformation SELECT 'PROJ' AS auth_name, 'EPSG_10118_WITH_NAD83CSRSV7_INTERPOLATION' AS code, name, description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, grid_param_auth_name, grid_param_code, grid_param_name, grid_name, grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_name, 'EPSG' AS interpolation_crs_auth_name, 8255 AS interpolation_crs_code, operation_version, 0 AS deprecated FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10118'; INSERT INTO usage SELECT 'PROJ' AS auth_name, 'USAGE_PROJ_EPSG_10118_WITH_NAD83CSRSV7_INTERPOLATION' AS code, object_table_name, 'PROJ' AS object_auth_name, 'EPSG_10118_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code, extent_auth_name, extent_code, scope_auth_name, scope_code FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10118'; -- Define the allowed authorities, and their precedence, when researching a -- coordinate operation INSERT INTO authority_to_authority_preference(source_auth_name, target_auth_name, allowed_authorities) VALUES ('any', 'EPSG', 'PROJ,EPSG,any' ); INSERT INTO authority_to_authority_preference(source_auth_name, target_auth_name, allowed_authorities) VALUES ('EPSG', 'EPSG', 'PROJ,EPSG' ); INSERT INTO authority_to_authority_preference(source_auth_name, target_auth_name, allowed_authorities) VALUES ('PROJ', 'EPSG', 'PROJ,EPSG' ); INSERT INTO authority_to_authority_preference(source_auth_name, target_auth_name, allowed_authorities) VALUES ('IGNF', 'EPSG', 'PROJ,IGNF,EPSG' ); INSERT INTO authority_to_authority_preference(source_auth_name, target_auth_name, allowed_authorities) VALUES ('ESRI', 'EPSG', 'PROJ,ESRI,EPSG' ); -- Custom ellipsoids (from proj -le) INSERT INTO "ellipsoid" VALUES('PROJ','ANDRAE','Andrae 1876 (Denmark, Iceland)',NULL,'PROJ','EARTH',6377104.43,'EPSG','9001',300.0,NULL,0); INSERT INTO "ellipsoid" VALUES('PROJ','CPM','Comité international des poids et mesures 1799',NULL,'PROJ','EARTH',6375738.7,'EPSG','9001',334.29,NULL,0); INSERT INTO "ellipsoid" VALUES('PROJ','DELMBR','Delambre 1810 (Belgium)',NULL,'PROJ','EARTH',6376428.0,'EPSG','9001',311.5,NULL,0); INSERT INTO "ellipsoid" VALUES('PROJ','KAULA','Kaula 1961',NULL,'PROJ','EARTH',6378163.0,'EPSG','9001',298.24,NULL,0); INSERT INTO "ellipsoid" VALUES('PROJ','LERCH','Lerch 1979',NULL,'PROJ','EARTH',6378139.0,'EPSG','9001',298.257,NULL,0); INSERT INTO "ellipsoid" VALUES('PROJ','MERIT','MERIT 1983',NULL,'PROJ','EARTH',6378137.0,'EPSG','9001',298.257,NULL,0); INSERT INTO "ellipsoid" VALUES('PROJ','MPRTS','Maupertius 1738',NULL,'PROJ','EARTH',6397300.0,'EPSG','9001',191.0,NULL,0); INSERT INTO "ellipsoid" VALUES('PROJ','NEW_INTL','New International 1967',NULL,'PROJ','EARTH',6378157.5,'EPSG','9001',NULL,6356772.2,0); INSERT INTO "ellipsoid" VALUES('PROJ','WGS60','WGS 60',NULL,'PROJ','EARTH',6378165.0,'EPSG','9001',298.3,NULL,0); -- Extra ellipsoids from IAU2000 dictionary (see https://github.com/USGS-Astrogeology/GDAL_scripts/blob/master/OGC_IAU2000_WKT_v2/naifcodes_radii_m_wAsteroids_IAU2000.csv) INSERT INTO "ellipsoid" VALUES('PROJ','EARTH2000','Earth2000',NULL,'PROJ','EARTH',6378140.0,'EPSG','9001',NULL,6356750.0,0); -- Coordinate system ENh for ProjectedCRS 3D. Should be removed once EPSG has such a coordinate system INSERT INTO "coordinate_system" VALUES('PROJ','ENh','Cartesian',3); INSERT INTO "axis" VALUES('PROJ','1','Easting','E','east','PROJ','ENh',1,'EPSG','9001'); INSERT INTO "axis" VALUES('PROJ','2','Northing','N','north','PROJ','ENh',2,'EPSG','9001'); INSERT INTO "axis" VALUES('PROJ','3','Ellipsoidal height','h','up','PROJ','ENh',2,'EPSG','9001'); ---- Geoid models ----- INSERT INTO "geoid_model" SELECT 'GEOID99', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE 'g1999%' AND deprecated = 0; INSERT INTO "geoid_model" SELECT 'GEOID03', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE 'geoid03%' AND deprecated = 0; INSERT INTO "geoid_model" SELECT 'GEOID06', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE 'geoid06%' AND deprecated = 0; INSERT INTO "geoid_model" SELECT 'GEOID09', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE 'geoid09%' AND deprecated = 0; -- Geoid12A and Geoid12B are identical INSERT INTO "geoid_model" SELECT 'GEOID12A', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE 'g2012b%' AND deprecated = 0; INSERT INTO "geoid_model" SELECT 'GEOID12B', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE 'g2012b%' AND deprecated = 0; INSERT INTO "geoid_model" SELECT 'GEOID18', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE 'g2018%' AND deprecated = 0; INSERT INTO "geoid_model" SELECT 'OSGM15', auth_name, code FROM grid_transformation WHERE auth_name = 'EPSG' AND grid_name LIKE '%OSGM15%' AND deprecated = 0; INSERT INTO "geoid_model" SELECT 'GGM10', auth_name, code FROM grid_transformation WHERE auth_name = 'PROJ' AND grid_name LIKE 'GGM10.txt' AND deprecated = 0; ---- PROJ historic +datum aliases ----- INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6326','WGS84','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6121','GGRS87','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6267','NAD27','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6314','potsdam','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6223','carthage','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6312','hermannskogel','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6299','ire65','PROJ'); INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6272','nzgd49','PROJ'); -- Given that we have installed above a WGS84 alias to the datum, add also one -- to the EPSG:4326 CRS, as this is a common use case (https://github.com/OSGeo/PROJ/issues/2216) INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4326','WGS84','PROJ'); ---- PROJ unit short names ----- -- Linear units UPDATE unit_of_measure SET proj_short_name = 'mm' WHERE auth_name = 'EPSG' AND code = '1025'; UPDATE unit_of_measure SET proj_short_name = 'cm' WHERE auth_name = 'EPSG' AND code = '1033'; UPDATE unit_of_measure SET proj_short_name = 'm' WHERE auth_name = 'EPSG' AND code = '9001'; UPDATE unit_of_measure SET proj_short_name = 'ft' WHERE auth_name = 'EPSG' AND code = '9002'; UPDATE unit_of_measure SET proj_short_name = 'us-ft' WHERE auth_name = 'EPSG' AND code = '9003'; UPDATE unit_of_measure SET proj_short_name = 'fath' WHERE auth_name = 'EPSG' AND code = '9014'; UPDATE unit_of_measure SET proj_short_name = 'kmi' WHERE auth_name = 'EPSG' AND code = '9030'; UPDATE unit_of_measure SET proj_short_name = 'us-ch' WHERE auth_name = 'EPSG' AND code = '9033'; UPDATE unit_of_measure SET proj_short_name = 'us-mi' WHERE auth_name = 'EPSG' AND code = '9035'; UPDATE unit_of_measure SET proj_short_name = 'km' WHERE auth_name = 'EPSG' AND code = '9036'; UPDATE unit_of_measure SET proj_short_name = 'ind-ft' WHERE auth_name = 'EPSG' AND code = '9081'; UPDATE unit_of_measure SET proj_short_name = 'ind-yd' WHERE auth_name = 'EPSG' AND code = '9085'; UPDATE unit_of_measure SET proj_short_name = 'mi' WHERE auth_name = 'EPSG' AND code = '9093'; UPDATE unit_of_measure SET proj_short_name = 'yd' WHERE auth_name = 'EPSG' AND code = '9096'; UPDATE unit_of_measure SET proj_short_name = 'ch' WHERE auth_name = 'EPSG' AND code = '9097'; UPDATE unit_of_measure SET proj_short_name = 'link' WHERE auth_name = 'EPSG' AND code = '9098'; -- Angular units UPDATE unit_of_measure SET proj_short_name = 'rad' WHERE auth_name = 'EPSG' AND code = '9101'; UPDATE unit_of_measure SET proj_short_name = 'deg' WHERE auth_name = 'EPSG' AND code = '9102'; UPDATE unit_of_measure SET proj_short_name = 'grad' WHERE auth_name = 'EPSG' AND code = '9105'; -- PROJ specific units INSERT INTO "unit_of_measure" VALUES('PROJ','DM','decimeter','length',0.01,'dm',0); INSERT INTO "unit_of_measure" VALUES('PROJ','IN','inch','length',0.0254,'in',0); INSERT INTO "unit_of_measure" VALUES('PROJ','US_IN','US survey inch','length',0.025400050800101,'us-in',0); INSERT INTO "unit_of_measure" VALUES('PROJ','US_YD','US survey yard','length',0.914401828803658,'us-yd',0); INSERT INTO "unit_of_measure" VALUES('PROJ','IND_CH','Indian chain','length',20.11669506,'ind-ch',0); -- Deal with grid_transformation using EPSG:1088 'Geog3D to Geog2D+GravityRelatedHeight (gtx)' method -- and similar ones -- We derive records using the more classic 'Geographic3D to GravityRelatedHeight' method -- We could probably do that at runtime too, but more simple and efficient to create records INSERT INTO "grid_transformation" SELECT 'PROJ' AS auth_name, gt.auth_name || '_' || gt.code || '_RESTRICTED_TO_VERTCRS' AS code, gcrs.name || ' to ' || vcrs.name || ' (from ' || gt.name || ')' AS name, NULL AS description, 'EPSG' AS method_auth_name, '9665' AS method_code, 'Geographic3D to GravityRelatedHeight (gtx)' AS method_name, gt.source_crs_auth_name, gt.source_crs_code, c.vertical_crs_auth_name AS target_crs_auth_name, c.vertical_crs_code AS target_crs_code, gt.accuracy, gt.grid_param_auth_name, gt.grid_param_code, gt.grid_param_name, gt.grid_name, gt.grid2_param_auth_name, gt.grid2_param_code, gt.grid2_param_name, gt.grid2_name, gt.interpolation_crs_auth_name, gt.interpolation_crs_code, gt.operation_version, gt.deprecated FROM grid_transformation gt JOIN compound_crs c ON gt.target_crs_code = c.code AND gt.target_crs_auth_name = c.auth_name JOIN geodetic_crs gcrs ON gt.source_crs_auth_name = gcrs.auth_name AND gt.source_crs_code = gcrs.code JOIN vertical_crs vcrs on vcrs.auth_name = c.vertical_crs_auth_name AND vcrs.code = c.vertical_crs_code WHERE method_auth_name = 'EPSG' AND method_name LIKE 'Geog3D to Geog2D+%' AND NOT EXISTS (SELECT 1 FROM grid_transformation gt2 WHERE gt2.method_name LIKE 'Geographic3D to%' AND gt2.source_crs_auth_name = gt.source_crs_auth_name AND gt2.source_crs_code = gt.source_crs_code AND gt2.target_crs_auth_name = vcrs.auth_name AND gt2.target_crs_code = vcrs.code AND gt2.grid_name = gt.grid_name) AND gt.deprecated = 0; INSERT INTO "usage" SELECT 'PROJ' AS auth_name, gt.auth_name || '_' || gt.code || '_RESTRICTED_TO_VERTCRS_USAGE' AS code, 'grid_transformation' AS object_table_name, 'PROJ' AS object_auth_name, gt.auth_name || '_' || gt.code || '_RESTRICTED_TO_VERTCRS' AS object_code, u.extent_auth_name, u.extent_code, u.scope_auth_name, u.scope_code FROM grid_transformation gt JOIN usage u ON u.object_auth_name = gt.auth_name AND u.object_code = gt.code AND u.object_table_name = 'grid_transformation' WHERE method_auth_name = 'EPSG' AND method_name LIKE 'Geog3D to Geog2D+%' AND EXISTS (SELECT 1 FROM grid_transformation gt2 WHERE gt2.auth_name = 'PROJ' AND gt2.code = gt.auth_name || '_' || gt.code || '_RESTRICTED_TO_VERTCRS'); -- Add records corresponding to EGM2008 grid for WGS 84 realizations INSERT INTO "grid_transformation" SELECT 'PROJ' AS auth_name, replace(replace(replace(gcrs.name, ' ', '_'), '(', ''), ')', '') || '_TO_EGM2008', gcrs.name || ' to EGM2008 height (from ' || gt.name || ')' AS name, gt.description, gt.method_auth_name, gt.method_code, gt.method_name, gcrs.auth_name, gcrs.code, gt.target_crs_auth_name, gt.target_crs_code, gt.accuracy, gt.grid_param_auth_name, gt.grid_param_code, gt.grid_param_name, gt.grid_name, gt.grid2_param_auth_name, gt.grid2_param_code, gt.grid2_param_name, gt.grid2_name, gt.interpolation_crs_auth_name, gt.interpolation_crs_code, gt.operation_version, gt.deprecated FROM grid_transformation gt, geodetic_crs gcrs WHERE gt.name = 'WGS 84 to EGM2008 height (1)' AND gcrs.auth_name = 'EPSG' AND gcrs.name LIKE 'WGS 84 (G%' AND gcrs.type='geographic 3D' and gcrs.deprecated=0; INSERT INTO "usage" SELECT 'PROJ' AS auth_name, 'USAGE_' || replace(replace(replace(gcrs.name, ' ', '_'), '(', ''), ')', '') || '_TO_EGM2008' AS code, 'grid_transformation' AS object_table_name, 'PROJ' AS object_auth_name, replace(replace(replace(gcrs.name, ' ', '_'), '(', ''), ')', '') || '_TO_EGM2008' AS object_code, u.extent_auth_name, u.extent_code, u.scope_auth_name, u.scope_code FROM grid_transformation gt, geodetic_crs gcrs JOIN usage u ON u.object_auth_name = gt.auth_name AND u.object_code = gt.code AND u.object_table_name = 'grid_transformation' WHERE gt.name = 'WGS 84 to EGM2008 height (1)' AND gcrs.auth_name = 'EPSG' AND gcrs.name LIKE 'WGS 84 (G%' AND gcrs.type='geographic 3D' and gcrs.deprecated=0; proj-9.6.0/data/sql/customizations_early.sql000664 001754 001755 00000000556 14764566077 021147 0ustar00e012349e012349000000 000000 -- This file is hand generated. INSERT INTO "extent" VALUES('PROJ','EXTENT_UNKNOWN','Not specified','Not specified.',-90.0,90.0,-180.0,180.0,0); INSERT INTO "scope" VALUES('PROJ','SCOPE_UNKNOWN','Not known.',0); INSERT INTO celestial_body VALUES('PROJ', 'EARTH', 'Earth', 6378137.0); INSERT INTO versioned_auth_name_mapping VALUES ('IAU_2015', 'IAU', '2015', 1); proj-9.6.0/data/sql/deprecation.sql000664 001754 001755 00000116434 14764566077 017160 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2156','EPSG','2195','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2291','EPSG','2292','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4035','EPSG','4047','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4226','EPSG','4142','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31462','EPSG','31466','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31463','EPSG','31467','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31464','EPSG','31468','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31465','EPSG','31469','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31265','EPSG','31275','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31266','EPSG','31276','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31267','EPSG','31277','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31268','EPSG','31278','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31278','EPSG','31279','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31291','EPSG','31281','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31292','EPSG','31282','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31293','EPSG','31283','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31294','EPSG','31284','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31295','EPSG','31285','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31296','EPSG','31286','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31297','EPSG','31287','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29900','EPSG','29902','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2155','EPSG','2194','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4226','EPSG','4143','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4172','EPSG','4190','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27581','EPSG','27571','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27582','EPSG','27572','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27583','EPSG','27573','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27584','EPSG','27574','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27591','EPSG','27561','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27592','EPSG','27562','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27593','EPSG','27563','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27594','EPSG','27564','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7401','EPSG','7411','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7402','EPSG','7412','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7403','EPSG','7413','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32036','EPSG','2204','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26979','EPSG','2205','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4228','EPSG','4192','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4260','EPSG','4193','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','22832','EPSG','2214','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4287','EPSG','4194','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32074','EPSG','32064','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32075','EPSG','32065','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32076','EPSG','32066','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32077','EPSG','32067','EPSG'); INSERT INTO "deprecation" VALUES('vertical_crs','EPSG','5704','EPSG','5736','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21473','EPSG','21453','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21474','EPSG','21454','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21475','EPSG','21455','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21476','EPSG','21456','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21477','EPSG','21457','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21478','EPSG','21458','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21479','EPSG','21459','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21480','EPSG','21460','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21481','EPSG','21461','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21482','EPSG','21462','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21483','EPSG','21463','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2199','EPSG','2462','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2166','EPSG','2397','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2167','EPSG','2398','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2168','EPSG','2399','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2091','EPSG','2395','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2092','EPSG','2396','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20092','EPSG','2491','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20091','EPSG','2490','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20090','EPSG','2489','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20089','EPSG','2488','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20088','EPSG','2487','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20087','EPSG','2486','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20086','EPSG','2485','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20085','EPSG','2484','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20084','EPSG','2483','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20083','EPSG','2482','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20082','EPSG','2481','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20081','EPSG','2480','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20080','EPSG','2479','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20079','EPSG','2478','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20078','EPSG','2477','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20077','EPSG','2476','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20076','EPSG','2475','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20075','EPSG','2474','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20074','EPSG','2473','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20073','EPSG','2472','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20072','EPSG','2471','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20071','EPSG','2470','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20070','EPSG','2469','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20069','EPSG','2468','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20068','EPSG','2467','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20067','EPSG','2466','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20066','EPSG','2465','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20065','EPSG','2464','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20064','EPSG','2463','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28462','EPSG','2492','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28463','EPSG','2493','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28464','EPSG','2494','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28465','EPSG','2495','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28466','EPSG','2496','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28467','EPSG','2497','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28468','EPSG','2498','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28469','EPSG','2499','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28470','EPSG','2500','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28471','EPSG','2501','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28472','EPSG','2502','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28473','EPSG','2503','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28474','EPSG','2504','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28475','EPSG','2505','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28476','EPSG','2506','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28477','EPSG','2507','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28478','EPSG','2508','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28479','EPSG','2509','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28480','EPSG','2510','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28481','EPSG','2511','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28482','EPSG','2512','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28483','EPSG','2513','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28484','EPSG','2514','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28485','EPSG','2515','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28486','EPSG','2516','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28487','EPSG','2517','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28488','EPSG','2518','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28489','EPSG','2519','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28490','EPSG','2520','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28491','EPSG','2521','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28492','EPSG','2522','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4294','EPSG','4613','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4125','EPSG','4613','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2550','EPSG','2933','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4185','EPSG','4615','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4185','EPSG','4616','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2191','EPSG','2942','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2191','EPSG','2943','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4140','EPSG','4617','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2147','EPSG','2952','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2140','EPSG','2945','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2141','EPSG','2946','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2142','EPSG','2947','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2143','EPSG','2948','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2144','EPSG','2949','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2145','EPSG','2950','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2146','EPSG','2951','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2036','EPSG','2953','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2292','EPSG','2954','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2139','EPSG','2944','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2153','EPSG','2955','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2152','EPSG','2956','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2151','EPSG','2957','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2150','EPSG','2958','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2149','EPSG','2959','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2037','EPSG','2960','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2038','EPSG','2961','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2148','EPSG','2962','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4234','EPSG','4197','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','23433','EPSG','2312','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4291','EPSG','4618','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29100','EPSG','29101','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29177','EPSG','29187','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29118','EPSG','29168','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29185','EPSG','29195','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29184','EPSG','29194','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29183','EPSG','29193','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29182','EPSG','29192','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29181','EPSG','29191','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29180','EPSG','29190','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29179','EPSG','29189','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29178','EPSG','29188','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29122','EPSG','29172','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29121','EPSG','29171','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29120','EPSG','29170','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29119','EPSG','29169','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26193','EPSG','26194','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2245','EPSG','2966','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2244','EPSG','2965','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2889','EPSG','2967','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2890','EPSG','2968','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4327','EPSG','4329','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4235','EPSG','4623','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21100','EPSG','3001','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','25700','EPSG','3002','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2934','EPSG','3000','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26591','EPSG','3003','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26592','EPSG','3004','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29635','EPSG','20135','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29636','EPSG','20136','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4296','EPSG','4201','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2400','EPSG','3021','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','30800','EPSG','3027','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4634','EPSG','4662','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2982','EPSG','3060','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4340','EPSG','4930','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4344','EPSG','4932','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4342','EPSG','4934','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4346','EPSG','4936','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4348','EPSG','4938','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4350','EPSG','4940','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4352','EPSG','4942','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4387','EPSG','4944','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4385','EPSG','4919','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4330','EPSG','4910','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4331','EPSG','4911','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4332','EPSG','4912','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4333','EPSG','4913','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4334','EPSG','4914','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4335','EPSG','4915','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4336','EPSG','4916','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4337','EPSG','4917','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4338','EPSG','4918','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4354','EPSG','4946','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4389','EPSG','4948','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4356','EPSG','4950','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4358','EPSG','4952','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4360','EPSG','4954','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4362','EPSG','4956','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4364','EPSG','4958','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4366','EPSG','4960','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4368','EPSG','4962','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4370','EPSG','4964','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4372','EPSG','4966','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4382','EPSG','4968','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4374','EPSG','4970','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4384','EPSG','4972','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4376','EPSG','4974','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4378','EPSG','4976','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4328','EPSG','4978','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4380','EPSG','4980','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4388','EPSG','4949','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4386','EPSG','4945','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4383','EPSG','4973','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4381','EPSG','4969','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4379','EPSG','4981','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4377','EPSG','4977','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4375','EPSG','4975','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4373','EPSG','4971','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4371','EPSG','4967','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4369','EPSG','4965','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4367','EPSG','4963','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4365','EPSG','4961','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4363','EPSG','4959','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4361','EPSG','4957','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4359','EPSG','4955','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4357','EPSG','4953','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4355','EPSG','4951','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4353','EPSG','4947','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4351','EPSG','4943','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4349','EPSG','4941','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4347','EPSG','4939','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4345','EPSG','4937','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4343','EPSG','4933','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4341','EPSG','4935','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4339','EPSG','4931','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4329','EPSG','4979','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4126','EPSG','4669','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4819','EPSG','4307','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31900','EPSG','31901','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2194','EPSG','3102','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4233','EPSG','4684','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4233','EPSG','4685','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21891','EPSG','21896','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21892','EPSG','21897','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21893','EPSG','21898','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21894','EPSG','21899','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2214','EPSG','3119','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26747','EPSG','26799','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4172','EPSG','4694','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4685','EPSG','4696','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2171','EPSG','3120','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2979','EPSG','3336','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4631','EPSG','4698','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2600','EPSG','3346','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26432','EPSG','3353','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26432','EPSG','3354','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4264','EPSG','4704','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4264','EPSG','4705','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7408','EPSG','7415','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4681','EPSG','4700','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4681','EPSG','4702','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3103','EPSG','3343','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3103','EPSG','3367','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3104','EPSG','3344','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3104','EPSG','3368','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3105','EPSG','3345','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3105','EPSG','3369','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5532','EPSG','5858','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2577','EPSG','3389','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2694','EPSG','3390','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3785','EPSG','3857','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4968','EPSG','4906','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4645','EPSG','4749','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4969','EPSG','4907','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2984','EPSG','3163','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4635','EPSG','4750','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2983','EPSG','3164','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','24571','EPSG','3167','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','24571','EPSG','3168','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4731','EPSG','4752','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3359','EPSG','3404','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3366','EPSG','3407','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29700','EPSG','29701','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29700','EPSG','29702','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3143','EPSG','3460','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2063','EPSG','3461','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2064','EPSG','3462','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3073','EPSG','3463','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3076','EPSG','3464','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2990','EPSG','3727','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4902','EPSG','4901','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7412','EPSG','7421','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7413','EPSG','7422','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27492','EPSG','27493','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32662','EPSG','32663','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32662','EPSG','3786','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2086','EPSG','3796','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2085','EPSG','3795','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26814','EPSG','26847','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26815','EPSG','26848','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26825','EPSG','26855','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26826','EPSG','26856','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26836','EPSG','26863','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26837','EPSG','26864','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26819','EPSG','26849','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26820','EPSG','26850','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26821','EPSG','26851','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26830','EPSG','26857','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26831','EPSG','26858','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26832','EPSG','26859','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26841','EPSG','26865','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26842','EPSG','26866','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26843','EPSG','26867','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26822','EPSG','26852','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26833','EPSG','26860','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26844','EPSG','26868','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26823','EPSG','26853','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26824','EPSG','26854','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26834','EPSG','26861','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26835','EPSG','26862','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26845','EPSG','26869','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26846','EPSG','26870','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3774','EPSG','3800','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3778','EPSG','3801','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3782','EPSG','3802','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3349','EPSG','3832','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3752','EPSG','3994','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28403','EPSG','3333','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28402','EPSG','3833','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31700','EPSG','3844','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4317','EPSG','4179','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31275','EPSG','3907','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31276','EPSG','3908','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31277','EPSG','3909','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31279','EPSG','3910','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3787','EPSG','3912','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2170','EPSG','3911','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3314','EPSG','3985','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3989','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3988','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3987','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3986','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32663','EPSG','4087','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3786','EPSG','4088','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3985','EPSG','4415','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3842','EPSG','4417','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3843','EPSG','4434','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32029','EPSG','4455','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32018','EPSG','4456','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3454','EPSG','4457','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4972','EPSG','4556','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4973','EPSG','4557','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4640','EPSG','4558','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2989','EPSG','4559','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4868','EPSG','5118','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4869','EPSG','5119','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4870','EPSG','5120','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4861','EPSG','5111','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4860','EPSG','5110','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4871','EPSG','5121','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4872','EPSG','5122','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4873','EPSG','5123','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4855','EPSG','5105','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4856','EPSG','5106','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4857','EPSG','5107','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4858','EPSG','5108','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4859','EPSG','5109','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4862','EPSG','5112','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4863','EPSG','5113','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4864','EPSG','5114','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4865','EPSG','5115','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4866','EPSG','5116','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4867','EPSG','5117','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4874','EPSG','5124','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4875','EPSG','5125','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4876','EPSG','5126','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4877','EPSG','5127','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4878','EPSG','5128','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4879','EPSG','5129','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4880','EPSG','5130','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32061','EPSG','5458','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32062','EPSG','5459','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5466','EPSG','5589','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5458','EPSG','5559','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26801','EPSG','5623','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26802','EPSG','5624','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26803','EPSG','5625','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2192','EPSG','2154','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5388','EPSG','5839','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4474','EPSG','5879','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3356','EPSG','6128','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3357','EPSG','6129','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26811','EPSG','6200','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26812','EPSG','6201','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26813','EPSG','6202','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4268','EPSG','4267','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5570','EPSG','6381','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5577','EPSG','6381','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5571','EPSG','6382','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5578','EPSG','6382','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5579','EPSG','6383','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5572','EPSG','6383','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5573','EPSG','6384','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5580','EPSG','6384','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5574','EPSG','6385','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5581','EPSG','6385','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5575','EPSG','6386','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5582','EPSG','6386','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5576','EPSG','6387','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5583','EPSG','6387','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6141','EPSG','6391','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6604','EPSG','6879','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6517','EPSG','6880','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','6871','EPSG','6893','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3975','EPSG','6933','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3973','EPSG','6931','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3974','EPSG','6932','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6200','EPSG','6966','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','7088','EPSG','7133','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6996','EPSG','7131','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6997','EPSG','7132','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27037','EPSG','7005','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3907','EPSG','8677','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6978','EPSG','7134','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6980','EPSG','7136','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6979','EPSG','7135','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6985','EPSG','7137','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6986','EPSG','7138','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6987','EPSG','7139','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3908','EPSG','8678','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3909','EPSG','6316','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27038','EPSG','7006','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6956','EPSG','5896','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6957','EPSG','5897','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6958','EPSG','5898','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6959','EPSG','5899','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3910','EPSG','8679','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7082','EPSG','8456','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7082','EPSG','8455','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3911','EPSG','8686','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','8449','EPSG','8860','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4280','EPSG','4211','EPSG'); INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4808','EPSG','4813','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2163','EPSG','9311','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4088','EPSG','4087','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7804','EPSG','9391','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5832','EPSG','9928','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5833','EPSG','9929','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5834','EPSG','9930','EPSG'); INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5835','EPSG','9931','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','10480','EPSG','10481','EPSG'); INSERT INTO "deprecation" VALUES('projected_crs','EPSG','10788','EPSG','10820','EPSG'); proj-9.6.0/data/sql/diagram.xmi000664 001754 001755 00000222665 14764566077 016271 0ustar00e012349e012349000000 000000 proj-9.6.0/data/sql/ellipsoid.sql000664 001754 001755 00000015723 14764566077 016646 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "ellipsoid" VALUES('EPSG','1024','CGCS2000',NULL,'PROJ','EARTH',6378137.0,'EPSG','9001',298.257222101,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','1025','GSK-2011',NULL,'PROJ','EARTH',6378136.5,'EPSG','9001',298.2564151,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','1026','Zach 1812',NULL,'PROJ','EARTH',6376045.0,'EPSG','9001',310.0,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7001','Airy 1830',NULL,'PROJ','EARTH',6377563.396,'EPSG','9001',299.3249646,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7002','Airy Modified 1849',NULL,'PROJ','EARTH',6377340.189,'EPSG','9001',299.3249646,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7003','Australian National Spheroid',NULL,'PROJ','EARTH',6378160.0,'EPSG','9001',298.25,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7004','Bessel 1841',NULL,'PROJ','EARTH',6377397.155,'EPSG','9001',299.1528128,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7005','Bessel Modified',NULL,'PROJ','EARTH',6377492.018,'EPSG','9001',299.1528128,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7006','Bessel Namibia',NULL,'PROJ','EARTH',6377483.865,'EPSG','9001',299.1528128,NULL,1); INSERT INTO "ellipsoid" VALUES('EPSG','7007','Clarke 1858',NULL,'PROJ','EARTH',20926348.0,'EPSG','9005',NULL,20855233.0,0); INSERT INTO "ellipsoid" VALUES('EPSG','7008','Clarke 1866',NULL,'PROJ','EARTH',6378206.4,'EPSG','9001',NULL,6356583.8,0); INSERT INTO "ellipsoid" VALUES('EPSG','7009','Clarke 1866 Michigan',NULL,'PROJ','EARTH',20926631.531,'EPSG','9003',NULL,20855688.674,1); INSERT INTO "ellipsoid" VALUES('EPSG','7010','Clarke 1880 (Benoit)',NULL,'PROJ','EARTH',6378300.789,'EPSG','9001',NULL,6356566.435,0); INSERT INTO "ellipsoid" VALUES('EPSG','7011','Clarke 1880 (IGN)',NULL,'PROJ','EARTH',6378249.2,'EPSG','9001',NULL,6356515.0,0); INSERT INTO "ellipsoid" VALUES('EPSG','7012','Clarke 1880 (RGS)',NULL,'PROJ','EARTH',6378249.145,'EPSG','9001',293.465,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7013','Clarke 1880 (Arc)',NULL,'PROJ','EARTH',6378249.145,'EPSG','9001',293.4663077,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7014','Clarke 1880 (SGA 1922)',NULL,'PROJ','EARTH',6378249.2,'EPSG','9001',293.46598,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7015','Everest 1830 (1937 Adjustment)',NULL,'PROJ','EARTH',6377276.345,'EPSG','9001',300.8017,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7016','Everest 1830 (1967 Definition)',NULL,'PROJ','EARTH',6377298.556,'EPSG','9001',300.8017,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7018','Everest 1830 Modified',NULL,'PROJ','EARTH',6377304.063,'EPSG','9001',300.8017,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7019','GRS 1980',NULL,'PROJ','EARTH',6378137.0,'EPSG','9001',298.257222101,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7020','Helmert 1906',NULL,'PROJ','EARTH',6378200.0,'EPSG','9001',298.3,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7021','Indonesian National Spheroid',NULL,'PROJ','EARTH',6378160.0,'EPSG','9001',298.247,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7022','International 1924',NULL,'PROJ','EARTH',6378388.0,'EPSG','9001',297.0,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7024','Krassowsky 1940',NULL,'PROJ','EARTH',6378245.0,'EPSG','9001',298.3,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7025','NWL 9D',NULL,'PROJ','EARTH',6378145.0,'EPSG','9001',298.25,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7027','Plessis 1817',NULL,'PROJ','EARTH',6376523.0,'EPSG','9001',308.64,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7028','Struve 1860',NULL,'PROJ','EARTH',6378298.3,'EPSG','9001',294.73,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7029','War Office',NULL,'PROJ','EARTH',6378300.0,'EPSG','9001',296.0,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7030','WGS 84',NULL,'PROJ','EARTH',6378137.0,'EPSG','9001',298.257223563,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7031','GEM 10C',NULL,'PROJ','EARTH',6378137.0,'EPSG','9001',298.257223563,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7032','OSU86F',NULL,'PROJ','EARTH',6378136.2,'EPSG','9001',298.257223563,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7033','OSU91A',NULL,'PROJ','EARTH',6378136.3,'EPSG','9001',298.257223563,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7034','Clarke 1880',NULL,'PROJ','EARTH',20926202.0,'EPSG','9005',NULL,20854895.0,0); INSERT INTO "ellipsoid" VALUES('EPSG','7035','Sphere',NULL,'PROJ','EARTH',6371000.0,'EPSG','9001',NULL,6371000.0,1); INSERT INTO "ellipsoid" VALUES('EPSG','7036','GRS 1967',NULL,'PROJ','EARTH',6378160.0,'EPSG','9001',298.247167427,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7041','Average Terrestrial System 1977',NULL,'PROJ','EARTH',6378135.0,'EPSG','9001',298.257,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7042','Everest (1830 Definition)',NULL,'PROJ','EARTH',20922931.8,'EPSG','9080',NULL,20853374.58,0); INSERT INTO "ellipsoid" VALUES('EPSG','7043','WGS 72',NULL,'PROJ','EARTH',6378135.0,'EPSG','9001',298.26,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7044','Everest 1830 (1962 Definition)',NULL,'PROJ','EARTH',6377301.243,'EPSG','9001',300.8017255,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7045','Everest 1830 (1975 Definition)',NULL,'PROJ','EARTH',6377299.151,'EPSG','9001',300.8017255,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7046','Bessel Namibia (GLM)',NULL,'PROJ','EARTH',6377397.155,'EPSG','9031',299.1528128,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7047','GRS 1980 Authalic Sphere',NULL,'PROJ','EARTH',6370997.0,'EPSG','9001',NULL,6370997.0,1); INSERT INTO "ellipsoid" VALUES('EPSG','7048','GRS 1980 Authalic Sphere',NULL,'PROJ','EARTH',6371007.0,'EPSG','9001',NULL,6371007.0,0); INSERT INTO "ellipsoid" VALUES('EPSG','7049','IAG 1975',NULL,'PROJ','EARTH',6378140.0,'EPSG','9001',298.257,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7050','GRS 1967 Modified',NULL,'PROJ','EARTH',6378160.0,'EPSG','9001',298.25,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7051','Danish 1876',NULL,'PROJ','EARTH',6377019.27,'EPSG','9001',300.0,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7052','Clarke 1866 Authalic Sphere',NULL,'PROJ','EARTH',6370997.0,'EPSG','9001',NULL,6370997.0,0); INSERT INTO "ellipsoid" VALUES('EPSG','7053','Hough 1960',NULL,'PROJ','EARTH',6378270.0,'EPSG','9001',297.0,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7054','PZ-90',NULL,'PROJ','EARTH',6378136.0,'EPSG','9001',298.257839303,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7055','Clarke 1880 (international foot)',NULL,'PROJ','EARTH',20926202.0,'EPSG','9002',NULL,20854895.0,0); INSERT INTO "ellipsoid" VALUES('EPSG','7056','Everest 1830 (RSO 1969)',NULL,'PROJ','EARTH',6377295.664,'EPSG','9001',300.8017,NULL,0); INSERT INTO "ellipsoid" VALUES('EPSG','7057','International 1924 Authalic Sphere',NULL,'PROJ','EARTH',6371228.0,'EPSG','9001',NULL,6371228.0,0); INSERT INTO "ellipsoid" VALUES('EPSG','7058','Hughes 1980',NULL,'PROJ','EARTH',6378273.0,'EPSG','9001',NULL,6356889.449,0); INSERT INTO "ellipsoid" VALUES('EPSG','7059','Popular Visualisation Sphere',NULL,'PROJ','EARTH',6378137.0,'EPSG','9001',NULL,6378137.0,1); proj-9.6.0/data/sql/engineering_crs.sql000664 001754 001755 00000006217 14764566077 020021 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "engineering_crs" VALUES('EPSG','5800','Astra Minas Grid',NULL,'EPSG','6507','EPSG','9300',0); INSERT INTO "usage" VALUES('EPSG','4243','engineering_crs','EPSG','5800','EPSG','1265','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5801','Barcelona Grid B1',NULL,'EPSG','4500','EPSG','9301',0); INSERT INTO "usage" VALUES('EPSG','4244','engineering_crs','EPSG','5801','EPSG','1266','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5802','Barcelona Grid B2',NULL,'EPSG','4500','EPSG','9301',0); INSERT INTO "usage" VALUES('EPSG','4245','engineering_crs','EPSG','5802','EPSG','1266','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5803','Maturin Grid',NULL,'EPSG','4500','EPSG','9302',0); INSERT INTO "usage" VALUES('EPSG','4246','engineering_crs','EPSG','5803','EPSG','1320','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5808','Maracaibo Cross Grid M4',NULL,'EPSG','4500','EPSG','9303',0); INSERT INTO "usage" VALUES('EPSG','4251','engineering_crs','EPSG','5808','EPSG','1319','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5809','Maracaibo Cross Grid M5',NULL,'EPSG','4500','EPSG','9303',0); INSERT INTO "usage" VALUES('EPSG','4252','engineering_crs','EPSG','5809','EPSG','1319','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5810','La Rosa Grid',NULL,'EPSG','4500','EPSG','9304',0); INSERT INTO "usage" VALUES('EPSG','4253','engineering_crs','EPSG','5810','EPSG','1311','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5811','Mene Grande',NULL,'EPSG','4500','EPSG','9305',0); INSERT INTO "usage" VALUES('EPSG','4254','engineering_crs','EPSG','5811','EPSG','1270','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5812','El Cubo',NULL,'EPSG','4500','EPSG','9306',0); INSERT INTO "usage" VALUES('EPSG','4255','engineering_crs','EPSG','5812','EPSG','1269','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5813','Dabajuro',NULL,'EPSG','4500','EPSG','9307',0); INSERT INTO "usage" VALUES('EPSG','4256','engineering_crs','EPSG','5813','EPSG','1268','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5814','Tucupita',NULL,'EPSG','4500','EPSG','9308',0); INSERT INTO "usage" VALUES('EPSG','4257','engineering_crs','EPSG','5814','EPSG','1370','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5815','Santa Maria de Ipire',NULL,'EPSG','4500','EPSG','9310',0); INSERT INTO "usage" VALUES('EPSG','4258','engineering_crs','EPSG','5815','EPSG','1371','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5816','Barinas west base',NULL,'EPSG','4500','EPSG','9311',0); INSERT INTO "usage" VALUES('EPSG','4259','engineering_crs','EPSG','5816','EPSG','1267','EPSG','1136'); INSERT INTO "engineering_crs" VALUES('EPSG','5817','Tombak LNG plant',NULL,'EPSG','6510','EPSG','9314',0); INSERT INTO "usage" VALUES('EPSG','4260','engineering_crs','EPSG','5817','EPSG','2362','EPSG','1029'); INSERT INTO "engineering_crs" VALUES('EPSG','6715','Christmas Island Grid 1985',NULL,'EPSG','4400','EPSG','1134',0); INSERT INTO "usage" VALUES('EPSG','4925','engineering_crs','EPSG','6715','EPSG','4169','EPSG','1056'); proj-9.6.0/data/sql/engineering_datum.sql000664 001754 001755 00000005340 14764566077 020340 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "engineering_datum" VALUES('EPSG','1134','Christmas Island Datum 1985','1985-01-01',NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13186','engineering_datum','EPSG','1134','EPSG','4169','EPSG','1056'); INSERT INTO "engineering_datum" VALUES('EPSG','9300','Astra Minas',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13850','engineering_datum','EPSG','9300','EPSG','1265','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9301','Barcelona',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13851','engineering_datum','EPSG','9301','EPSG','1266','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9302','Maturin',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13852','engineering_datum','EPSG','9302','EPSG','1320','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9303','Maracaibo Cross',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13853','engineering_datum','EPSG','9303','EPSG','1319','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9304','La Rosa',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13854','engineering_datum','EPSG','9304','EPSG','1311','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9305','Mene Grande',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13855','engineering_datum','EPSG','9305','EPSG','1270','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9306','El Cubo',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13856','engineering_datum','EPSG','9306','EPSG','1269','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9307','Dabajuro',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13857','engineering_datum','EPSG','9307','EPSG','1268','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9308','Tucupita',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13858','engineering_datum','EPSG','9308','EPSG','1370','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9309','El Mene',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13859','engineering_datum','EPSG','9309','EPSG','1270','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9310','Santa Maria de Ipire',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13860','engineering_datum','EPSG','9310','EPSG','1371','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9311','Barinas west base',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13861','engineering_datum','EPSG','9311','EPSG','1267','EPSG','1216'); INSERT INTO "engineering_datum" VALUES('EPSG','9314','Tombak LNG plant',NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13864','engineering_datum','EPSG','9314','EPSG','2362','EPSG','1029'); proj-9.6.0/data/sql/esri.sql000664 001754 001755 00014071232 14764566077 015626 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db_from_esri.py. DO NOT EDIT ! INSERT INTO "metadata" VALUES('ESRI.VERSION', 'ArcGIS Pro 3.4'); INSERT INTO "metadata" VALUES('ESRI.DATE', '2024-11-04'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','1025','Millimeter','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','1033','Centimeter','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9001','Meter','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9002','Foot','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9003','Foot_US','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9005','Foot_Clarke','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9014','Fathom','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9030','Nautical_Mile','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9031','Meter_German','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9033','Chain_US','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9034','Link_US','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9035','Mile_US','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9036','Kilometer','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9037','Yard_Clarke','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9038','Chain_Clarke','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9039','Link_Clarke','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9040','Yard_Sears','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9041','Foot_Sears','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9042','Chain_Sears','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9043','Link_Sears','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9050','Yard_Benoit_1895_A','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9051','Foot_Benoit_1895_A','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9052','Chain_Benoit_1895_A','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9053','Link_Benoit_1895_A','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9060','Yard_Benoit_1895_B','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9061','Foot_Benoit_1895_B','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9062','Chain_Benoit_1895_B','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9063','Link_Benoit_1895_B','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9070','Foot_1865','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9080','Foot_Indian','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9081','Foot_Indian_1937','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9082','Foot_Indian_1962','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9083','Foot_Indian_1975','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9084','Yard_Indian','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9085','Yard_Indian_1937','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9086','Yard_Indian_1962','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9087','Yard_Indian_1975','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9093','Statute_Mile','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9094','Foot_Gold_Coast','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9095','Foot_British_1936','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9096','Yard','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9097','Chain','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9098','Link','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9099','Yard_Sears_1922_Truncated','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9300','Foot_Sears_1922_Truncated','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9301','Chain_Sears_1922_Truncated','ESRI'); INSERT INTO alias_name VALUES('unit_of_measure','EPSG','9302','Link_Sears_1922_Truncated','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','1026','Zach_1812','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7001','Airy_1830','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7002','Airy_Modified','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7003','Australian','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7004','Bessel_1841','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7005','Bessel_Modified','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7006','Bessel_Namibia','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7007','Clarke_1858','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7008','Clarke_1866','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7009','Clarke_1866_Michigan','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7010','Clarke_1880_Benoit','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7011','Clarke_1880_IGN','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7012','Clarke_1880_RGS','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7013','Clarke_1880_Arc','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7014','Clarke_1880_SGA','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7015','Everest_Adjustment_1937','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7016','Everest_Definition_1967','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7018','Everest_1830_Modified','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7019','GRS_1980','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7020','Helmert_1906','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7021','Indonesian','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7022','International_1924','ESRI'); INSERT INTO ellipsoid VALUES('ESRI','7023','International_1967','International 1967','PROJ','EARTH',6378160.0,'EPSG','9001',298.25,NULL,0); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7024','Krasovsky_1940','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7025','NWL_9D','ESRI'); INSERT INTO ellipsoid VALUES('ESRI','7026','NWL_10D','NWL-10D == WGS 1972','PROJ','EARTH',6378135.0,'EPSG','9001',298.26,NULL,0); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7027','Plessis_1817','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7028','Struve_1860','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7029','War_Office','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7030','WGS_1984','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7031','GEM_10C','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7032','OSU_86F','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7033','OSU_91A','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7034','Clarke_1880','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7036','GRS_1967','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7041','ATS_1977','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7042','Everest_1830','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7043','WGS_1972','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7044','Everest_Definition_1962','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7045','Everest_Definition_1975','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7048','Sphere_GRS_1980_Authalic','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7049','Xian_1980','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7050','GRS_1967_Truncated','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7051','Danish_1876','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7052','Sphere_Clarke_1866_Authalic','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7053','Hough_1960','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7054','PZ_1990','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7055','Clarke_1880_Intl_Ft','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7056','Everest_Modified_1969','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7057','Sphere_International_1924_Authalic','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7058','Hughes_1980','ESRI'); INSERT INTO alias_name VALUES('ellipsoid','EPSG','7059','WGS_1984_Major_Auxiliary_Sphere','ESRI'); INSERT INTO ellipsoid VALUES('ESRI','107001','WGS_1966','WGS 1966','PROJ','EARTH',6378145.0,'EPSG','9001',298.25,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107002','Fischer_1960','Fischer 1960','PROJ','EARTH',6378166.0,'EPSG','9001',298.3,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107003','Fischer_1968','Fischer 1968','PROJ','EARTH',6378150.0,'EPSG','9001',298.3,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107004','Fischer_Modified','Fischer modified','PROJ','EARTH',6378155.0,'EPSG','9001',298.3,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107005','Hough_1960','Hough 1960','PROJ','EARTH',6378270.0,'EPSG','9001',297.0,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107006','Everest_Modified_1969','Everest modified 1969 - 107006, called Everest 1830 (RSO 1969) in EPSG','PROJ','EARTH',6377295.664,'EPSG','9001',300.8017,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107007','Walbeck','Walbeck','PROJ','EARTH',6376896.0,'EPSG','9001',302.78,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107008','Sphere_ARC_INFO','Authalic sphere (ARC/INFO)','PROJ','EARTH',6370997.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107009','Sphere_EMEP','EMEP Sphere of 6370000 m','PROJ','EARTH',6370000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107036','GRS_1967_Truncated','GRS 1967 Truncated - was 107036, called GRS67 Modified in EPSG','PROJ','EARTH',6378160.0,'EPSG','9001',298.25,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107037','WGS_1984_Major_Auxiliary_Sphere','Major auxiliary sphere based on WGS 1984','PROJ','EARTH',6378137.0,'EPSG','9001',0.0,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107038','CGCS2000','China Geodetic Coordinate System 2000','PROJ','EARTH',6378137.0,'EPSG','9001',298.257222101,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107047','Sphere_GRS_1980_Mean_Radius','Sphere with mean radius based on GRS80','PROJ','EARTH',6371008.7714,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107700','S_GRS_1980_Adj_MN_Anoka','GRS 1980 Adj. Minnesota Anoka','PROJ','EARTH',6378418.941,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107701','S_GRS_1980_Adj_MN_Becker','GRS 1980 Adj. Minnesota Becker','PROJ','EARTH',6378586.581,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107702','S_GRS_1980_Adj_MN_Beltrami_North','GRS 1980 Adj. Minnesota Beltrami North','PROJ','EARTH',6378505.809,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107703','S_GRS_1980_Adj_MN_Beltrami_South','GRS 1980 Adj. Minnesota Beltrami South','PROJ','EARTH',6378544.823,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107704','S_GRS_1980_Adj_MN_Benton','GRS 1980 Adj. Minnesota Benton','PROJ','EARTH',6378490.569,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107705','S_GRS_1980_Adj_MN_Big_Stone','GRS 1980 Adj. Minnesota Big Stone','PROJ','EARTH',6378470.757,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107706','S_GRS_1980_Adj_MN_Blue_Earth','GRS 1980 Adj. Minnesota Blue Earth','PROJ','EARTH',6378403.701,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107707','S_GRS_1980_Adj_MN_Brown','GRS 1980 Adj. Minnesota Brown','PROJ','EARTH',6378434.181,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107708','S_GRS_1980_Adj_MN_Carlton','GRS 1980 Adj. Minnesota Carlton','PROJ','EARTH',6378454.907,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107709','S_GRS_1980_Adj_MN_Carver','GRS 1980 Adj. Minnesota Carver','PROJ','EARTH',6378400.653,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107710','S_GRS_1980_Adj_MN_Cass_North','GRS 1980 Adj. Minnesota Cass North','PROJ','EARTH',6378567.378,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107711','S_GRS_1980_Adj_MN_Cass_South','GRS 1980 Adj. Minnesota Cass South','PROJ','EARTH',6378546.957,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107712','S_GRS_1980_Adj_MN_Chippewa','GRS 1980 Adj. Minnesota Chippewa','PROJ','EARTH',6378476.853,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107713','S_GRS_1980_Adj_MN_Chisago','GRS 1980 Adj. Minnesota Chisago','PROJ','EARTH',6378411.321,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107714','S_GRS_1980_Adj_MN_Cook_North','GRS 1980 Adj. Minnesota Cook North','PROJ','EARTH',6378647.541,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107715','S_GRS_1980_Adj_MN_Cook_South','GRS 1980 Adj. Minnesota Cook South','PROJ','EARTH',6378647.541,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107716','S_GRS_1980_Adj_MN_Cottonwood','GRS 1980 Adj. Minnesota Cottonwood','PROJ','EARTH',6378514.953,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107717','S_GRS_1980_Adj_MN_Crow_Wing','GRS 1980 Adj. Minnesota Crow Wing','PROJ','EARTH',6378546.957,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107718','S_GRS_1980_Adj_MN_Dakota','GRS 1980 Adj. Minnesota Dakota','PROJ','EARTH',6378421.989,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107719','S_GRS_1980_Adj_MN_Dodge','GRS 1980 Adj. Minnesota Dodge','PROJ','EARTH',6378481.425,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107720','S_GRS_1980_Adj_MN_Douglas','GRS 1980 Adj. Minnesota Douglas','PROJ','EARTH',6378518.001,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107721','S_GRS_1980_Adj_MN_Faribault','GRS 1980 Adj. Minnesota Faribault','PROJ','EARTH',6378521.049,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107722','S_GRS_1980_Adj_MN_Fillmore','GRS 1980 Adj. Minnesota Fillmore','PROJ','EARTH',6378464.661,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107723','S_GRS_1980_Adj_MN_Freeborn','GRS 1980 Adj. Minnesota Freeborn','PROJ','EARTH',6378521.049,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107724','S_GRS_1980_Adj_MN_Goodhue','GRS 1980 Adj. Minnesota Goodhue','PROJ','EARTH',6378434.181,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107725','S_GRS_1980_Adj_MN_Grant','GRS 1980 Adj. Minnesota Grant','PROJ','EARTH',6378518.001,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107726','S_GRS_1980_Adj_MN_Hennepin','GRS 1980 Adj. Minnesota Hennepin','PROJ','EARTH',6378418.941,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107727','S_GRS_1980_Adj_MN_Houston','GRS 1980 Adj. Minnesota Houston','PROJ','EARTH',6378436.619,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107728','S_GRS_1980_Adj_MN_Isanti','GRS 1980 Adj. Minnesota Isanti','PROJ','EARTH',6378411.321,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107729','S_GRS_1980_Adj_MN_Itasca_North','GRS 1980 Adj. Minnesota Itasca North','PROJ','EARTH',6378574.389,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107730','S_GRS_1980_Adj_MN_Itasca_South','GRS 1980 Adj. Minnesota Itasca South','PROJ','EARTH',6378574.389,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107731','S_GRS_1980_Adj_MN_Jackson','GRS 1980 Adj. Minnesota Jackson','PROJ','EARTH',6378521.049,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107732','S_GRS_1980_Adj_MN_Kanabec','GRS 1980 Adj. Minnesota Kanabec','PROJ','EARTH',6378472.281,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107733','S_GRS_1980_Adj_MN_Kandiyohi','GRS 1980 Adj. Minnesota Kandiyohi','PROJ','EARTH',6378498.189,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107734','S_GRS_1980_Adj_MN_Kittson','GRS 1980 Adj. Minnesota Kittson','PROJ','EARTH',6378449.421,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107735','S_GRS_1980_Adj_MN_Koochiching','GRS 1980 Adj. Minnesota Koochiching','PROJ','EARTH',6378525.621,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107736','S_GRS_1980_Adj_MN_Lac_Qui_Parle','GRS 1980 Adj. Minnesota Lac Qui Parle','PROJ','EARTH',6378476.853,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107737','S_GRS_1980_Adj_MN_Lake_of_the_Woods_North','GRS 1980 Adj. Minnesota Lake of the Woods North','PROJ','EARTH',6378466.185,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107738','S_GRS_1980_Adj_MN_Lake_of_the_Woods_South','GRS 1980 Adj. Minnesota Lake of the Woods South','PROJ','EARTH',6378496.665,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107739','S_GRS_1980_Adj_MN_Le_Sueur','GRS 1980 Adj. Minnesota Le Sueur','PROJ','EARTH',6378434.181,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107740','S_GRS_1980_Adj_MN_Lincoln','GRS 1980 Adj. Minnesota Lincoln','PROJ','EARTH',6378643.579,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107741','S_GRS_1980_Adj_MN_Lyon','GRS 1980 Adj. Minnesota Lyon','PROJ','EARTH',6378559.758,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107742','S_GRS_1980_Adj_MN_McLeod','GRS 1980 Adj. Minnesota McLeod','PROJ','EARTH',6378414.369,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107743','S_GRS_1980_Adj_MN_Mahnomen','GRS 1980 Adj. Minnesota Mahnomen','PROJ','EARTH',6378586.581,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107744','S_GRS_1980_Adj_MN_Marshall','GRS 1980 Adj. Minnesota Marshall','PROJ','EARTH',6378441.801,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107745','S_GRS_1980_Adj_MN_Martin','GRS 1980 Adj. Minnesota Martin','PROJ','EARTH',6378521.049,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107746','S_GRS_1980_Adj_MN_Meeker','GRS 1980 Adj. Minnesota Meeker','PROJ','EARTH',6378498.189,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107747','S_GRS_1980_Adj_MN_Morrison','GRS 1980 Adj. Minnesota Morrison','PROJ','EARTH',6378502.761,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107748','S_GRS_1980_Adj_MN_Mower','GRS 1980 Adj. Minnesota Mower','PROJ','EARTH',6378521.049,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107749','S_GRS_1980_Adj_MN_Murray','GRS 1980 Adj. Minnesota Murray','PROJ','EARTH',6378617.061,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107750','S_GRS_1980_Adj_MN_Nicollet','GRS 1980 Adj. Minnesota Nicollet','PROJ','EARTH',6378403.701,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107751','S_GRS_1980_Adj_MN_Nobles','GRS 1980 Adj. Minnesota Nobles','PROJ','EARTH',6378624.681,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107752','S_GRS_1980_Adj_MN_Norman','GRS 1980 Adj. Minnesota Norman','PROJ','EARTH',6378468.623,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107753','S_GRS_1980_Adj_MN_Olmsted','GRS 1980 Adj. Minnesota Olmsted','PROJ','EARTH',6378481.425,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107754','S_GRS_1980_Adj_MN_Ottertail','GRS 1980 Adj. Minnesota Ottertail','PROJ','EARTH',6378525.621,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107755','S_GRS_1980_Adj_MN_Pennington','GRS 1980 Adj. Minnesota Pennington','PROJ','EARTH',6378445.763,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107756','S_GRS_1980_Adj_MN_Pine','GRS 1980 Adj. Minnesota Pine','PROJ','EARTH',6378472.281,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107757','S_GRS_1980_Adj_MN_Pipestone','GRS 1980 Adj. Minnesota Pipestone','PROJ','EARTH',6378670.401,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107758','S_GRS_1980_Adj_MN_Polk','GRS 1980 Adj. Minnesota Polk','PROJ','EARTH',6378445.763,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107759','S_GRS_1980_Adj_MN_Pope','GRS 1980 Adj. Minnesota Pope','PROJ','EARTH',6378502.761,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107760','S_GRS_1980_Adj_MN_Ramsey','GRS 1980 Adj. Minnesota Ramsey','PROJ','EARTH',6378418.941,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107761','S_GRS_1980_Adj_MN_Red_Lake','GRS 1980 Adj. Minnesota Red Lake','PROJ','EARTH',6378445.763,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107762','S_GRS_1980_Adj_MN_Redwood','GRS 1980 Adj. Minnesota Redwood','PROJ','EARTH',6378438.753,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107763','S_GRS_1980_Adj_MN_Renville','GRS 1980 Adj. Minnesota Renville','PROJ','EARTH',6378414.369,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107764','S_GRS_1980_Adj_MN_Rice','GRS 1980 Adj. Minnesota Rice','PROJ','EARTH',6378434.181,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107765','S_GRS_1980_Adj_MN_Rock','GRS 1980 Adj. Minnesota Rock','PROJ','EARTH',6378624.681,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107766','S_GRS_1980_Adj_MN_Roseau','GRS 1980 Adj. Minnesota Roseau','PROJ','EARTH',6378449.421,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107767','S_GRS_1980_Adj_MN_St_Louis_North','GRS 1980 Adj. Minnesota St Louis North','PROJ','EARTH',6378543.909,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107768','S_GRS_1980_Adj_MN_St_Louis_Central','GRS 1980 Adj. Minnesota St Louis Central','PROJ','EARTH',6378605.783,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107769','S_GRS_1980_Adj_MN_St_Louis_South','GRS 1980 Adj. Minnesota St Louis South','PROJ','EARTH',6378540.861,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107770','S_GRS_1980_Adj_MN_Scott','GRS 1980 Adj. Minnesota Scott','PROJ','EARTH',6378421.989,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107771','S_GRS_1980_Adj_MN_Sherburne','GRS 1980 Adj. Minnesota Sherburne','PROJ','EARTH',6378443.325,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107772','S_GRS_1980_Adj_MN_Sibley','GRS 1980 Adj. Minnesota Sibley','PROJ','EARTH',6378414.369,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107773','S_GRS_1980_Adj_MN_Stearns','GRS 1980 Adj. Minnesota Stearns','PROJ','EARTH',6378502.761,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107774','S_GRS_1980_Adj_MN_Steele','GRS 1980 Adj. Minnesota Steele','PROJ','EARTH',6378481.425,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107775','S_GRS_1980_Adj_MN_Stevens','GRS 1980 Adj. Minnesota Stevens','PROJ','EARTH',6378502.761,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107776','S_GRS_1980_Adj_MN_Swift','GRS 1980 Adj. Minnesota Swift','PROJ','EARTH',6378470.757,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107777','S_GRS_1980_Adj_MN_Todd','GRS 1980 Adj. Minnesota Todd','PROJ','EARTH',6378548.481,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107778','S_GRS_1980_Adj_MN_Traverse','GRS 1980 Adj. Minnesota Traverse','PROJ','EARTH',6378463.746,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107779','S_GRS_1980_Adj_MN_Wabasha','GRS 1980 Adj. Minnesota Wabasha','PROJ','EARTH',6378426.561,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107780','S_GRS_1980_Adj_MN_Wadena','GRS 1980 Adj. Minnesota Wadena','PROJ','EARTH',6378546.957,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107781','S_GRS_1980_Adj_MN_Waseca','GRS 1980 Adj. Minnesota Waseca','PROJ','EARTH',6378481.425,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107782','S_GRS_1980_Adj_MN_Watonwan','GRS 1980 Adj. Minnesota Watonwan','PROJ','EARTH',6378514.953,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107783','S_GRS_1980_Adj_MN_Winona','GRS 1980 Adj. Minnesota Winona','PROJ','EARTH',6378453.688,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107784','S_GRS_1980_Adj_MN_Wright','GRS 1980 Adj. Minnesota Wright','PROJ','EARTH',6378443.325,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107785','S_GRS_1980_Adj_MN_Yellow_Medicine','GRS 1980 Adj. Minnesota Yellow Medicine','PROJ','EARTH',6378530.193,'EPSG','9001',298.2572221008827,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107786','S_GRS_1980_Adj_MN_St_Louis','GRS 1980 Adj. Minnesota St. Louis','PROJ','EARTH',6378523.0,'EPSG','9001',298.2752724,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107800','GRS_1980_Adj_WI_AL','GRS 1980 Adj. Wisconsin Ashland','PROJ','EARTH',6378471.92,'EPSG','9001',298.272883775229,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107801','GRS_1980_Adj_WI_BA','GRS 1980 Adj. Wisconsin Barron','PROJ','EARTH',6378472.931,'EPSG','9001',298.272931052052,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107802','GRS_1980_Adj_WI_BF','GRS 1980 Adj. Wisconsin Bayfield','PROJ','EARTH',6378411.351,'EPSG','9001',298.270051421254,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107803','GRS_1980_Adj_WI_BR','GRS 1980 Adj. Wisconsin Brown','PROJ','EARTH',6378137.0,'EPSG','9001',298.257222100225,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107804','GRS_1980_Adj_WI_BU','GRS 1980 Adj. Wisconsin Buffalo','PROJ','EARTH',6378380.991,'EPSG','9001',298.268631713702,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107805','GRS_1980_Adj_WI_BN','GRS 1980 Adj. Wisconsin Burnett','PROJ','EARTH',6378414.96,'EPSG','9001',298.270220186885,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107806','GRS_1980_Adj_WI_CP','GRS 1980 Adj. Wisconsin Chippewa','PROJ','EARTH',6378412.542,'EPSG','9001',298.270107115315,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107807','GRS_1980_Adj_WI_CK','GRS 1980 Adj. Wisconsin Clark','PROJ','EARTH',6378470.401,'EPSG','9001',298.272812743089,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107808','GRS_1980_Adj_WI_CO','GRS 1980 Adj. Wisconsin Columbia','PROJ','EARTH',6378376.331,'EPSG','9001',298.268413800752,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107809','GRS_1980_Adj_WI_CR','GRS 1980 Adj. Wisconsin Crawford','PROJ','EARTH',6378379.031,'EPSG','9001',298.268540059328,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107810','GRS_1980_Adj_WI_DN','GRS 1980 Adj. Wisconsin Dane','PROJ','EARTH',6378407.621,'EPSG','9001',298.269876997368,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107811','GRS_1980_Adj_WI_DR','GRS 1980 Adj. Wisconsin Door','PROJ','EARTH',6378313.92,'EPSG','9001',298.26549531037,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107812','GRS_1980_Adj_WI_DG','GRS 1980 Adj. Wisconsin Douglas','PROJ','EARTH',6378414.93,'EPSG','9001',298.270218784012,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107813','GRS_1980_Adj_WI_DU','GRS 1980 Adj. Wisconsin Dunn','PROJ','EARTH',6378413.021,'EPSG','9001',298.270129514522,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107814','GRS_1980_Adj_WI_EC','GRS 1980 Adj. Wisconsin EauClaire','PROJ','EARTH',6378380.381,'EPSG','9001',298.268603188617,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107815','GRS_1980_Adj_WI_FN','GRS 1980 Adj. Wisconsin Florence','PROJ','EARTH',6378530.851,'EPSG','9001',298.275639532334,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107816','GRS_1980_Adj_WI_FR','GRS 1980 Adj. Wisconsin Forest','PROJ','EARTH',6378591.521,'EPSG','9001',298.278476609315,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107817','GRS_1980_Adj_WI_GT','GRS 1980 Adj. Wisconsin Grant','PROJ','EARTH',6378378.881,'EPSG','9001',298.268533044963,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107818','GRS_1980_Adj_WI_IA','GRS 1980 Adj. Wisconsin Iowa','PROJ','EARTH',6378408.041,'EPSG','9001',298.269896637591,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107819','GRS_1980_Adj_WI_IR','GRS 1980 Adj. Wisconsin Iron','PROJ','EARTH',6378655.071,'EPSG','9001',298.281448362111,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107820','GRS_1980_Adj_WI_JA','GRS 1980 Adj. Wisconsin Jackson','PROJ','EARTH',6378409.151,'EPSG','9001',298.269948543895,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107821','GRS_1980_Adj_WI_LC','GRS 1980 Adj. Wisconsin LaCrosse','PROJ','EARTH',6378379.301,'EPSG','9001',298.268552685186,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107822','GRS_1980_Adj_WI_LG','GRS 1980 Adj. Wisconsin Langlade','PROJ','EARTH',6378560.121,'EPSG','9001',298.277008268831,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107823','GRS_1980_Adj_WI_LN','GRS 1980 Adj. Wisconsin Lincoln','PROJ','EARTH',6378531.821,'EPSG','9001',298.275684891897,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107824','GRS_1980_Adj_WI_MA','GRS 1980 Adj. Wisconsin Marathon','PROJ','EARTH',6378500.6,'EPSG','9001',298.274224921888,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107825','GRS_1980_Adj_WI_MN','GRS 1980 Adj. Wisconsin Marinette','PROJ','EARTH',6378376.041,'EPSG','9001',298.268400239645,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107826','GRS_1980_Adj_WI_ME','GRS 1980 Adj. Wisconsin Menominee','PROJ','EARTH',6378406.601,'EPSG','9001',298.269829299684,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107827','GRS_1980_Adj_WI_MR','GRS 1980 Adj. Wisconsin Monroe','PROJ','EARTH',6378438.991,'EPSG','9001',298.27134393498,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107828','GRS_1980_Adj_WI_OC','GRS 1980 Adj. Wisconsin Oconto','PROJ','EARTH',6378345.42,'EPSG','9001',298.266968327098,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107829','GRS_1980_Adj_WI_ON','GRS 1980 Adj. Wisconsin Oneida','PROJ','EARTH',6378593.86,'EPSG','9001',298.278585986653,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107830','GRS_1980_Adj_WI_PK','GRS 1980 Adj. Wisconsin Polk','PROJ','EARTH',6378413.671,'EPSG','9001',298.270159910105,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107831','GRS_1980_Adj_WI_PT','GRS 1980 Adj. Wisconsin Portage','PROJ','EARTH',6378344.377,'EPSG','9001',298.266919538913,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107832','GRS_1980_Adj_WI_PR','GRS 1980 Adj. Wisconsin Price','PROJ','EARTH',6378563.891,'EPSG','9001',298.277184563214,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107833','GRS_1980_Adj_WI_RC','GRS 1980 Adj. Wisconsin Richland','PROJ','EARTH',6378408.091,'EPSG','9001',298.269898975713,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107834','GRS_1980_Adj_WI_RK','GRS 1980 Adj. Wisconsin Rock','PROJ','EARTH',6378377.671,'EPSG','9001',298.268476462415,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107835','GRS_1980_Adj_WI_RS','GRS 1980 Adj. Wisconsin Rusk','PROJ','EARTH',6378472.751,'EPSG','9001',298.272922634813,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107836','GRS_1980_Adj_WI_SC','GRS 1980 Adj. Wisconsin StCroix','PROJ','EARTH',6378412.511,'EPSG','9001',298.270105665679,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107837','GRS_1980_Adj_WI_SK','GRS 1980 Adj. Wisconsin Sauk','PROJ','EARTH',6378407.281,'EPSG','9001',298.26986109814,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107838','GRS_1980_Adj_WI_SW','GRS 1980 Adj. Wisconsin Sawyer','PROJ','EARTH',6378534.451,'EPSG','9001',298.275807877103,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107839','GRS_1980_Adj_WI_SH','GRS 1980 Adj. Wisconsin Shawano','PROJ','EARTH',6378406.051,'EPSG','9001',298.269803580344,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107840','GRS_1980_Adj_WI_TA','GRS 1980 Adj. Wisconsin Taylor','PROJ','EARTH',6378532.921,'EPSG','9001',298.275736330576,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107841','GRS_1980_Adj_WI_TR','GRS 1980 Adj. Wisconsin Trempealeau','PROJ','EARTH',6378380.091,'EPSG','9001',298.26858962751,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107842','GRS_1980_Adj_WI_VR','GRS 1980 Adj. Wisconsin Vernon','PROJ','EARTH',6378408.941,'EPSG','9001',298.269938723784,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107843','GRS_1980_Adj_WI_VI','GRS 1980 Adj. Wisconsin Vilas','PROJ','EARTH',6378624.171,'EPSG','9001',298.280003402845,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107844','GRS_1980_Adj_WI_WW','GRS 1980 Adj. Wisconsin Walworth','PROJ','EARTH',6378377.411,'EPSG','9001',298.268464304182,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107845','GRS_1980_Adj_WI_WB','GRS 1980 Adj. Wisconsin Washburn','PROJ','EARTH',6378474.591,'EPSG','9001',298.273008677695,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107846','GRS_1980_Adj_WI_WA','GRS 1980 Adj. Wisconsin Washington','PROJ','EARTH',6378407.141,'EPSG','9001',298.269854551399,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107847','GRS_1980_Adj_WI_WK','GRS 1980 Adj. Wisconsin Waukesha','PROJ','EARTH',6378376.871,'EPSG','9001',298.268439052467,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107848','GRS_1980_Adj_WI_WP','GRS 1980 Adj. Wisconsin Waupaca','PROJ','EARTH',6378375.251,'EPSG','9001',298.268363297321,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107849','GRS_1980_Adj_WI_WS','GRS 1980 Adj. Wisconsin Waushara','PROJ','EARTH',6378405.971,'EPSG','9001',298.269799839349,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107850','GRS_1980_Adj_WI_WD','GRS 1980 Adj. Wisconsin Wood','PROJ','EARTH',6378437.651,'EPSG','9001',298.271281273316,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107851','GRS_1980_Adj_WI_AD_JN','GRS 1980 Adj. Wisconsin Adams and Juneau','PROJ','EARTH',6378376.271,'EPSG','9001',298.268410995005,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107852','GRS_1980_Adj_WI_GR_LF','GRS 1980 Adj. Wisconsin Green and Lafayette','PROJ','EARTH',6378408.481,'EPSG','9001',298.269917213063,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107853','GRS_1980_Adj_WI_GL_MQ','GRS 1980 Adj. Wisconsin Green Lake and Marquette','PROJ','EARTH',6378375.601,'EPSG','9001',298.268379664173,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107854','GRS_1980_Adj_WI_DD_JF','GRS 1980 Adj. Wisconsin Dodge and Jefferson','PROJ','EARTH',6378376.811,'EPSG','9001',298.268436246721,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107855','GRS_1980_Adj_WI_PP_PC','GRS 1980 Adj. Wisconsin Pepin and Pierce','PROJ','EARTH',6378381.271,'EPSG','9001',298.268644807185,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107856','GRS_1980_Adj_WI_CL_FL_OG_WN','GRS 1980 Adj. Wisconsin Calumet, Fond du Lac, Outagamie, and Winnebago','PROJ','EARTH',6378345.09,'EPSG','9001',298.266952895494,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107857','GRS_1980_Adj_WI_KN_MW_OZ_RA','GRS 1980 Adj. Wisconsin Kenosha, Milwaukee, Ozaukee, and Racine','PROJ','EARTH',6378315.7,'EPSG','9001',298.265578547505,NULL,1); INSERT INTO ellipsoid VALUES('ESRI','107858','GRS_1980_Adj_WI_KW_MT_SG','GRS 1980 Adj. Wisconsin Kewaunee, Manitowoc, and Sheboygan','PROJ','EARTH',6378285.86,'EPSG','9001',298.264183156421,NULL,1); INSERT INTO celestial_body VALUES('ESRI', 'Phobos', 'Phobos', 11080.0); INSERT INTO ellipsoid VALUES('ESRI','107861','Phobos_2015','Mars - Phobos IAU 2015','ESRI','Phobos',11080.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Callisto', 'Callisto', 2410300.0); INSERT INTO ellipsoid VALUES('ESRI','107862','Callisto_2015','Jupiter - Callisto IAU 2015','ESRI','Callisto',2410300.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Europa', 'Europa', 1560800.0); INSERT INTO ellipsoid VALUES('ESRI','107863','Europa_2015','Jupiter - Europa IAU 2015','ESRI','Europa',1560800.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Ganymede', 'Ganymede', 2631200.0); INSERT INTO ellipsoid VALUES('ESRI','107864','Ganymede_2015','Jupiter - Ganymede IAU 2015','ESRI','Ganymede',2631200.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Io', 'Io', 1821490.0); INSERT INTO ellipsoid VALUES('ESRI','107865','Io_2015','Jupiter - Io IAU 2015','ESRI','Io',1821490.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Metis', 'Metis', 21500.0); INSERT INTO ellipsoid VALUES('ESRI','107866','Metis_2015','Jupiter - Metis IAU 2015','ESRI','Metis',21500.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Aegaeon', 'Aegaeon', 330.0); INSERT INTO ellipsoid VALUES('ESRI','107867','Aegaeon_2015','Saturn - Aegaeon IAU 2015','ESRI','Aegaeon',330.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Anthe', 'Anthe', 500.0); INSERT INTO ellipsoid VALUES('ESRI','107868','Anthe_2015','Saturn - Anthe IAU 2015','ESRI','Anthe',500.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Mercury', 'Mercury', 2439700.0); INSERT INTO ellipsoid VALUES('ESRI','107900','Mercury_2000_IAU_IAG','Mercury','ESRI','Mercury',2439700.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Venus', 'Venus', 6051000.0); INSERT INTO ellipsoid VALUES('ESRI','107901','Venus_1985_IAU_IAG_COSPAR','Venus 1985','ESRI','Venus',6051000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107902','Venus_2000_IAU_IAG','Venus 2000','ESRI','Venus',6051800.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Moon', 'Moon', 1737400.0); INSERT INTO ellipsoid VALUES('ESRI','107903','Moon_2000_IAU_IAG','The Moon','ESRI','Moon',1737400.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Mars', 'Mars', 3393400.0); INSERT INTO ellipsoid VALUES('ESRI','107904','Mars_1979_IAU_IAG','Mars 1979','ESRI','Mars',3393400.0,'EPSG','9001',192.0430107526882,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107905','Mars_2000_IAU_IAG','Mars 2000','ESRI','Mars',3396190.0,'EPSG','9001',169.8944472236118,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Deimos', 'Deimos', 6200.0); INSERT INTO ellipsoid VALUES('ESRI','107906','Deimos_2000_IAU_IAG','Mars - Deimos','ESRI','Deimos',6200.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107907','Phobos_2000_IAU_IAG','Mars - Phobos','ESRI','Phobos',11100.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Jupiter', 'Jupiter', 71492000.0); INSERT INTO ellipsoid VALUES('ESRI','107908','Jupiter_2000_IAU_IAG','Jupiter','ESRI','Jupiter',71492000.0,'EPSG','9001',15.41440275981026,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Adrastea', 'Adrastea', 8200.0); INSERT INTO ellipsoid VALUES('ESRI','107909','Adrastea_2000_IAU_IAG','Jupiter - Adrastea','ESRI','Adrastea',8200.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Amalthea', 'Amalthea', 83500.0); INSERT INTO ellipsoid VALUES('ESRI','107910','Amalthea_2000_IAU_IAG','Jupiter - Amalthea','ESRI','Amalthea',83500.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Ananke', 'Ananke', 10000.0); INSERT INTO ellipsoid VALUES('ESRI','107911','Ananke_2000_IAU_IAG','Jupiter - Ananke','ESRI','Ananke',10000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107912','Callisto_2000_IAU_IAG','Jupiter - Callisto','ESRI','Callisto',2409300.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Carme', 'Carme', 15000.0); INSERT INTO ellipsoid VALUES('ESRI','107913','Carme_2000_IAU_IAG','Jupiter - Carme','ESRI','Carme',15000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Elara', 'Elara', 40000.0); INSERT INTO ellipsoid VALUES('ESRI','107914','Elara_2000_IAU_IAG','Jupiter - Elara','ESRI','Elara',40000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107915','Europa_2000_IAU_IAG','Jupiter - Europa','ESRI','Europa',1562090.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107916','Ganymede_2000_IAU_IAG','Jupiter - Ganymede','ESRI','Ganymede',2632345.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Himalia', 'Himalia', 85000.0); INSERT INTO ellipsoid VALUES('ESRI','107917','Himalia_2000_IAU_IAG','Jupiter - Himalia','ESRI','Himalia',85000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107918','Io_2000_IAU_IAG','Jupiter - Io','ESRI','Io',1821460.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Leda', 'Leda', 5000.0); INSERT INTO ellipsoid VALUES('ESRI','107919','Leda_2000_IAU_IAG','Jupiter - Leda','ESRI','Leda',5000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Lysithea', 'Lysithea', 12000.0); INSERT INTO ellipsoid VALUES('ESRI','107920','Lysithea_2000_IAU_IAG','Jupiter - Lysithea','ESRI','Lysithea',12000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107921','Metis_2000_IAU_IAG','Jupiter - Metis','ESRI','Metis',30000.0,'EPSG','9001',3.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Pasiphae', 'Pasiphae', 18000.0); INSERT INTO ellipsoid VALUES('ESRI','107922','Pasiphae_2000_IAU_IAG','Jupiter - Pasiphae','ESRI','Pasiphae',18000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Sinope', 'Sinope', 14000.0); INSERT INTO ellipsoid VALUES('ESRI','107923','Sinope_2000_IAU_IAG','Jupiter - Sinope','ESRI','Sinope',14000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Thebe', 'Thebe', 49300.0); INSERT INTO ellipsoid VALUES('ESRI','107924','Thebe_2000_IAU_IAG','Jupiter - Thebe','ESRI','Thebe',49300.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Saturn', 'Saturn', 60268000.0); INSERT INTO ellipsoid VALUES('ESRI','107925','Saturn_2000_IAU_IAG','Saturn','ESRI','Saturn',60268000.0,'EPSG','9001',10.2079945799458,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Atlas', 'Atlas', 16000.0); INSERT INTO ellipsoid VALUES('ESRI','107926','Atlas_2000_IAU_IAG','Saturn - Atlas','ESRI','Atlas',16000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Calypso', 'Calypso', 9500.0); INSERT INTO ellipsoid VALUES('ESRI','107927','Calypso_2000_IAU_IAG','Saturn - Calypso','ESRI','Calypso',9500.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Dione', 'Dione', 560000.0); INSERT INTO ellipsoid VALUES('ESRI','107928','Dione_2000_IAU_IAG','Saturn - Dione','ESRI','Dione',560000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Enceladus', 'Enceladus', 249400.0); INSERT INTO ellipsoid VALUES('ESRI','107929','Enceladus_2000_IAU_IAG','Saturn - Enceladus','ESRI','Enceladus',249400.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Epimetheus', 'Epimetheus', 59500.0); INSERT INTO ellipsoid VALUES('ESRI','107930','Epimetheus_2000_IAU_IAG','Saturn - Epimetheus','ESRI','Epimetheus',59500.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Helene', 'Helene', 16000.0); INSERT INTO ellipsoid VALUES('ESRI','107931','Helene_2000_IAU_IAG','Saturn - Helene','ESRI','Helene',16000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Hyperion', 'Hyperion', 133000.0); INSERT INTO ellipsoid VALUES('ESRI','107932','Hyperion_2000_IAU_IAG','Saturn - Hyperion','ESRI','Hyperion',133000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Iapetus', 'Iapetus', 718000.0); INSERT INTO ellipsoid VALUES('ESRI','107933','Iapetus_2000_IAU_IAG','Saturn - Iapetus','ESRI','Iapetus',718000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Janus', 'Janus', 88800.0); INSERT INTO ellipsoid VALUES('ESRI','107934','Janus_2000_IAU_IAG','Saturn - Janus','ESRI','Janus',88800.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Mimas', 'Mimas', 198630.0); INSERT INTO ellipsoid VALUES('ESRI','107935','Mimas_2000_IAU_IAG','Saturn - Mimas','ESRI','Mimas',198630.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Pan', 'Pan', 10000.0); INSERT INTO ellipsoid VALUES('ESRI','107936','Pan_2000_IAU_IAG','Saturn - Pan','ESRI','Pan',10000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Pandora', 'Pandora', 41900.0); INSERT INTO ellipsoid VALUES('ESRI','107937','Pandora_2000_IAU_IAG','Saturn - Pandora','ESRI','Pandora',41900.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Phoebe', 'Phoebe', 110000.0); INSERT INTO ellipsoid VALUES('ESRI','107938','Phoebe_2000_IAU_IAG','Saturn - Phoebe','ESRI','Phoebe',110000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Prometheus', 'Prometheus', 50100.0); INSERT INTO ellipsoid VALUES('ESRI','107939','Prometheus_2000_IAU_IAG','Saturn - Prometheus','ESRI','Prometheus',50100.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Rhea', 'Rhea', 764000.0); INSERT INTO ellipsoid VALUES('ESRI','107940','Rhea_2000_IAU_IAG','Saturn - Rhea','ESRI','Rhea',764000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Telesto', 'Telesto', 11000.0); INSERT INTO ellipsoid VALUES('ESRI','107941','Telesto_2000_IAU_IAG','Saturn - Telesto','ESRI','Telesto',11000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Tethys', 'Tethys', 529800.0); INSERT INTO ellipsoid VALUES('ESRI','107942','Tethys_2000_IAU_IAG','Saturn - Tethys','ESRI','Tethys',529800.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Titan', 'Titan', 2575000.0); INSERT INTO ellipsoid VALUES('ESRI','107943','Titan_2000_IAU_IAG','Saturn - Titan','ESRI','Titan',2575000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Uranus', 'Uranus', 25559000.0); INSERT INTO ellipsoid VALUES('ESRI','107944','Uranus_2000_IAU_IAG','Uranus','ESRI','Uranus',25559000.0,'EPSG','9001',43.61604095563141,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Ariel', 'Ariel', 578900.0); INSERT INTO ellipsoid VALUES('ESRI','107945','Ariel_2000_IAU_IAG','Uranus - Ariel','ESRI','Ariel',578900.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Belinda', 'Belinda', 33000.0); INSERT INTO ellipsoid VALUES('ESRI','107946','Belinda_2000_IAU_IAG','Uranus - Belinda','ESRI','Belinda',33000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Bianca', 'Bianca', 21000.0); INSERT INTO ellipsoid VALUES('ESRI','107947','Bianca_2000_IAU_IAG','Uranus - Bianca','ESRI','Bianca',21000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Cordelia', 'Cordelia', 13000.0); INSERT INTO ellipsoid VALUES('ESRI','107948','Cordelia_2000_IAU_IAG','Uranus - Cordelia','ESRI','Cordelia',13000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Cressida', 'Cressida', 31000.0); INSERT INTO ellipsoid VALUES('ESRI','107949','Cressida_2000_IAU_IAG','Uranus - Cressida','ESRI','Cressida',31000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Desdemona', 'Desdemona', 27000.0); INSERT INTO ellipsoid VALUES('ESRI','107950','Desdemona_2000_IAU_IAG','Uranus - Desdemona','ESRI','Desdemona',27000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Juliet', 'Juliet', 42000.0); INSERT INTO ellipsoid VALUES('ESRI','107951','Juliet_2000_IAU_IAG','Uranus - Juliet','ESRI','Juliet',42000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Miranda', 'Miranda', 235800.0); INSERT INTO ellipsoid VALUES('ESRI','107952','Miranda_2000_IAU_IAG','Uranus - Miranda','ESRI','Miranda',235800.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Oberon', 'Oberon', 761400.0); INSERT INTO ellipsoid VALUES('ESRI','107953','Oberon_2000_IAU_IAG','Uranus - Oberon','ESRI','Oberon',761400.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Ophelia', 'Ophelia', 15000.0); INSERT INTO ellipsoid VALUES('ESRI','107954','Ophelia_2000_IAU_IAG','Uranus - Ophelia','ESRI','Ophelia',15000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Portia', 'Portia', 54000.0); INSERT INTO ellipsoid VALUES('ESRI','107955','Portia_2000_IAU_IAG','Uranus - Portia','ESRI','Portia',54000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Puck', 'Puck', 77000.0); INSERT INTO ellipsoid VALUES('ESRI','107956','Puck_2000_IAU_IAG','Uranus - Puck','ESRI','Puck',77000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Rosalind', 'Rosalind', 27000.0); INSERT INTO ellipsoid VALUES('ESRI','107957','Rosalind_2000_IAU_IAG','Uranus - Rosalind','ESRI','Rosalind',27000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Titania', 'Titania', 788900.0); INSERT INTO ellipsoid VALUES('ESRI','107958','Titania_2000_IAU_IAG','Uranus - Titania','ESRI','Titania',788900.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Umbriel', 'Umbriel', 584700.0); INSERT INTO ellipsoid VALUES('ESRI','107959','Umbriel_2000_IAU_IAG','Uranus - Umbriel','ESRI','Umbriel',584700.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Neptune', 'Neptune', 24764000.0); INSERT INTO ellipsoid VALUES('ESRI','107960','Neptune_2000_IAU_IAG','Neptune','ESRI','Neptune',24764000.0,'EPSG','9001',58.54373522458629,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Despina', 'Despina', 74000.0); INSERT INTO ellipsoid VALUES('ESRI','107961','Despina_2000_IAU_IAG','Neptune - Despina','ESRI','Despina',74000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Galatea', 'Galatea', 79000.0); INSERT INTO ellipsoid VALUES('ESRI','107962','Galatea_2000_IAU_IAG','Neptune - Galatea','ESRI','Galatea',79000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Larissa', 'Larissa', 104000.0); INSERT INTO ellipsoid VALUES('ESRI','107963','Larissa_2000_IAU_IAG','Neptune - Larissa','ESRI','Larissa',104000.0,'EPSG','9001',6.933333333333334,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Naiad', 'Naiad', 29000.0); INSERT INTO ellipsoid VALUES('ESRI','107964','Naiad_2000_IAU_IAG','Neptune - Naiad','ESRI','Naiad',29000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Nereid', 'Nereid', 170000.0); INSERT INTO ellipsoid VALUES('ESRI','107965','Nereid_2000_IAU_IAG','Neptune - Nereid','ESRI','Nereid',170000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Proteus', 'Proteus', 208000.0); INSERT INTO ellipsoid VALUES('ESRI','107966','Proteus_2000_IAU_IAG','Neptune - Proteus','ESRI','Proteus',208000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Thalassa', 'Thalassa', 40000.0); INSERT INTO ellipsoid VALUES('ESRI','107967','Thalassa_2000_IAU_IAG','Neptune - Thalassa','ESRI','Thalassa',40000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Triton', 'Triton', 1352600.0); INSERT INTO ellipsoid VALUES('ESRI','107968','Triton_2000_IAU_IAG','Neptune - Triton','ESRI','Triton',1352600.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Pluto', 'Pluto', 1195000.0); INSERT INTO ellipsoid VALUES('ESRI','107969','Pluto_2000_IAU_IAG','Pluto','ESRI','Pluto',1195000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Charon', 'Charon', 593000.0); INSERT INTO ellipsoid VALUES('ESRI','107970','Charon_2000_IAU_IAG','Pluto - Charon','ESRI','Charon',593000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107971','Mars_2000_(Sphere)','Mars 2000 (Sphere)','ESRI','Mars',3396190.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', '1_Ceres', '1_Ceres', 470000.0); INSERT INTO ellipsoid VALUES('ESRI','107972','1_Ceres_2015','1 Ceres 2015','ESRI','1_Ceres',470000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', '4_Vesta', '4_Vesta', 255000.0); INSERT INTO ellipsoid VALUES('ESRI','107973','4_Vesta_2015','4 Vesta 2015','ESRI','4_Vesta',255000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107974','Mercury_2015','Mercury 2015','ESRI','Mercury',2439400.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Sun', 'Sun', 695700000.0); INSERT INTO ellipsoid VALUES('ESRI','107975','Sun_2015','Sun IAU 2015','ESRI','Sun',695700000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107976','Atlas_2015','Saturn - Atlas IAU 2015','ESRI','Atlas',15100.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107977','Calypso_2015','Saturn - Calypso IAU 2015','ESRI','Calypso',9600.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Daphnis', 'Daphnis', 3800.0); INSERT INTO ellipsoid VALUES('ESRI','107978','Daphnis_2015','Saturn - Daphnis IAU 2015','ESRI','Daphnis',3800.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107979','Dione_2015','Saturn - Dione IAU 2015','ESRI','Dione',561400.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107980','Enceladus_2015','Saturn - Enceladus IAU 2015','ESRI','Enceladus',252100.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107981','Epimetheus_2015','Saturn - Epimetheus IAU 2015','ESRI','Epimetheus',58200.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107982','Helene_2015','Saturn - Helene IAU 2015','ESRI','Helene',18000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107983','Hyperion_2015','Saturn - Hyperion IAU 2015','ESRI','Hyperion',135000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107984','Iapetus_2015','Saturn - Iapetus IAU 2015','ESRI','Iapetus',745700.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107985','Janus_2015','Saturn - Janus IAU 2015','ESRI','Janus',89200.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Methone', 'Methone', 1450.0); INSERT INTO ellipsoid VALUES('ESRI','107986','Methone_2015','Saturn - Methone IAU 2015','ESRI','Methone',1450.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107987','Mimas_2015','Saturn - Mimas IAU 2015','ESRI','Mimas',198200.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Pallene', 'Pallene', 2230.0); INSERT INTO ellipsoid VALUES('ESRI','107988','Pallene_2015','Saturn - Pallene IAU 2015','ESRI','Pallene',2230.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107989','Pan_2015','Saturn - Pan IAU 2015','ESRI','Pan',14000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107990','Pandora_2015','Saturn - Pandora IAU 2015','ESRI','Pandora',40600.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107991','Phoebe_2015','Saturn - Phoebe IAU 2015','ESRI','Phoebe',106500.0,'EPSG','9001',0.0,NULL,0); INSERT INTO celestial_body VALUES('ESRI', 'Polydeuces', 'Polydeuces', 1300.0); INSERT INTO ellipsoid VALUES('ESRI','107992','Polydeuces_2015','Saturn - Polydeuces IAU 2015','ESRI','Polydeuces',1300.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107993','Prometheus_2015','Saturn - Prometheus IAU 2015','ESRI','Prometheus',43100.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107994','Rhea_2015','Saturn - Rhea IAU 2015','ESRI','Rhea',763500.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107995','Telesto_2015','Saturn - Telesto IAU 2015','ESRI','Telesto',12400.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107996','Tethys_2015','Saturn - Tethys IAU 2015','ESRI','Tethys',531000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107997','Larissa_2015','Neptune - Larissa IAU 2015','ESRI','Larissa',96000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107998','Pluto_2015','Pluto IAU 2015','ESRI','Pluto',1188300.0,'EPSG','9001',0.0,NULL,0); INSERT INTO ellipsoid VALUES('ESRI','107999','Charon_2015','Pluto - Charon IAU 2015','ESRI','Charon',606000.0,'EPSG','9001',0.0,NULL,0); INSERT INTO alias_name VALUES('prime_meridian','EPSG','8914','Paris_RGS','ESRI'); INSERT INTO "prime_meridian" VALUES('ESRI','108900','Reference_Meridian',0.0,'EPSG','9110',0); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1024','D_Hungarian_Datum_1909','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1025','D_TWD_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1026','D_TWD_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1029','D_Iraqi_Geospatial_Reference_System','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1031','D_MGI_1901','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1032','D_MOLDREF99','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1033','D_Reseau_Geodesique_de_la_RDC_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1034','D_Serbian_Reference_Network_1998','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1035','D_Red_Geodesica_de_Canarias_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1036','D_Reseau_Geodesique_de_Mayotte_2004','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1037','D_Cadastre_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1038','D_Reseau_Geodesique_de_St_Pierre_et_Miquelon_2006','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1041','D_PTRA08','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1042','D_Mexican_Datum_of_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1043','D_China_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1044','D_Sao_Tome','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1045','D_New_Beijing','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1046','D_Principe','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1047','D_RRAF_1991','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1048','Tokyo_1892','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1052','D_S_JTSK_05','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1053','D_Sri_Lanka_Datum_1999','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1055','D_S_JTSK_05_Ferro','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1056','D_GDBD2009','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1057','D_Turkish_National_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1058','D_Bhutan_National_Geodetic_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1060','D_Islands_Network_2004','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1061','D_ITRF_2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1062','D_POSGAR_2007','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1063','D_Marco_Geodesico_Nacional','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1064','SIRGAS-Chile_realization_1_epoch_2002','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1065','D_Costa_Rica_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1066','D_SGNP_MARCARIO_SOLIS','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1067','D_Peru96','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1068','D_SIRGAS-ROU98','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1069','D_SIRGAS_ES2007.8','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1070','D_Ocotepeque_1935','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1071','D_Sibun_Gorge_1922','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1072','D_Panama-Colon-1911','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1073','Reseau_Geodesique_des_Antilles_Francaises_2009','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1074','D_Corrego_Alegre_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1075','D_South_American_Datum_1969_96','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1076','D_Papua_New_Guinea_Geodetic_Datum_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1077','D_Ukraine_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1078','D_Fehmarnbelt_Datum_2010','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1081','D_Deutsche_Bahn_Reference_System','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1095','D_Tonga_Geodetic_Datum_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1100','D_Cayman_Islands_Geodetic_Datum_2011','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1111','D_Nepal_Nagarkot','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1112','D_Cyprus_Geodetic_Reference_System_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1113','D_Reseau_Geodesique_des_Terres_Australes_et_Antarctiques_Francaises_2007','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1114','Israel_Geodetic_Datum_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1115','Israeli_Geodetic_Datum_2005(2012)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1116','D_NAD_1983_2011','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1117','D_NAD_1983_PA11','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1118','D_NAD_1983_MA11','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1120','D_Mexico_ITRF2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1128','D_JGD_2011','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1132','D_Rete_Dinamica_Nazionale_2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1133','D_NAD_1983_CORS96','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1135','D_Aden_1925','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1136','D_Bioko','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1137','D_Bekaa_Valley_1920','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1138','D_South_East_Island_1943','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1139','D_Gambia','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1142','IG05_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1143','Israel_Geodetic_Datum_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1144','IG05(2012)_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1145','Israeli_Geodetic_Datum_2005(2012)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1147','Oman_National_Geodetic_Datum_2014','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1152','World_Geodetic_System_1984_(G730)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1153','World_Geodetic_System_1984_(G873)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1154','World_Geodetic_System_1984_(G1150)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1155','World_Geodetic_System_1984_(G1674)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1156','World_Geodetic_System_1984_(G1762)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1157','Parametry_Zemli_1990.02','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1158','Parametry_Zemli_1990.11','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1159','Geodezicheskaya_Sistema_Koordinat_2011','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1160','D_Kyrgyz_Republic_2006','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1165','International_Terrestrial_Reference_Frame_2014','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1166','World_Geodetic_System_1984_(Transit)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1167','Bulgaria_Geodetic_System_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1168','GDA2020','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1173','St_Helena_Tritan','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1174','St_Helena_Geodetic_Datum_2015','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1178','D_ETRF_1989','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1179','European_Terrestrial_Reference_Frame_1990','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1180','European_Terrestrial_Reference_Frame_1991','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1181','European_Terrestrial_Reference_Frame_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1182','European_Terrestrial_Reference_Frame_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1183','European_Terrestrial_Reference_Frame_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1184','European_Terrestrial_Reference_Frame_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1185','European_Terrestrial_Reference_Frame_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1186','European_Terrestrial_Reference_Frame_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1187','Islands_Net_2016','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1188','Gusterberg_(Ferro)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1189','St._Stephen_(Ferro)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1192','North_American_Datum_of_1983_(CSRS96)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1193','North_American_Datum_of_1983_(CSRS)_version_2','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1194','North_American_Datum_of_1983_(CSRS)_version_3','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1195','North_American_Datum_of_1983_(CSRS)_version_4','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1196','North_American_Datum_of_1983_(CSRS)_version_5','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1197','North_American_Datum_of_1983_(CSRS)_version_6','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1198','North_American_Datum_of_1983_(CSRS)_version_7','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1201','S-JTSK_[JTSK03]','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1201','S_JTSK_JTSK03','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1204','European_Terrestrial_Reference_Frame_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1206','European_Terrestrial_Reference_Frame_2014','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1207','Macao_1920','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1208','D_MACAO_2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1209','Hong_Kong_Geodetic','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1211','NAD_1983_(Federal_Base_Network)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1212','NAD_1983_(High_Accuracy_Reference_Network-Corrected)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1214','Serbian_Spatial_Reference_System_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1217','Camacupa_2015','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1218','MOMRA_Terrestrial_Reference_Frame_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1220','Reference_System_de_Angola_2013','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1221','D_NAD_1983_MARP00','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1223','Reseau_Geodesique_de_Wallis_et_Futuna_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1227','SIRGAS_Continuously_Operating_Network_DGF00P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1228','SIRGAS_Continuously_Operating_Network_DGF01P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1229','SIRGAS_Continuously_Operating_Network_DGF01P02','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1230','SIRGAS_Continuously_Operating_Network_DGF02P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1231','SIRGAS_Continuously_Operating_Network_DGF04P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1232','SIRGAS_Continuously_Operating_Network_DGF05P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1233','SIRGAS_Continuously_Operating_Network_DGF06P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1234','SIRGAS_Continuously_Operating_Network_DGF07P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1235','SIRGAS_Continuously_Operating_Network_DGF08P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1236','SIRGAS_Continuously_Operating_Network_SIR09P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1237','SIRGAS_Continuously_Operating_Network_SIR10P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1238','SIRGAS_Continuously_Operating_Network_SIR11P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1239','SIRGAS_Continuously_Operating_Network_SIR13P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1240','SIRGAS_Continuously_Operating_Network_SIR14P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1241','SIRGAS_Continuously_Operating_Network_SIR15P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1242','SIRGAS_Continuously_Operating_Network_SIR17P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1243','SIRGAS-Chile_realization_2_epoch_2010','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1249','D_NAD_1983_PACP00','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1251','Kosovo_Reference_System_2001','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1252','SIRGAS-Chile_realization_3_epoch_2013','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1253','SIRGAS-Chile_realization_4_epoch_2016','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1254','SIRGAS-Chile_realization_1_epoch_2002','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1257','Tapi_Aike','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1258','Ministerio_de_Marina_Norte','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1259','Ministerio_de_Marina_Sur','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1263','Oman_National_Geodetic_Datum_2017','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1264','HS2_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1266','TPEN11_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1268','Kingdom_of_Saudi_Arabia_Geodetic_Reference_Frame_2017','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1271','MML07_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1273','AbInvA96_2020_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1286','Pico_de_las_Nieves_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1289','GBK19_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1291','Australian_Terrestrial_Reference_Frame_2014','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1293','Sistem_Referensi_Geospasial_Indonesia_2013','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1295','Lyon_Turin_Ferroviaire_2004','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1304','Red_Geodesica_Para_Mineria_en_Chile','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1305','ETRF2000_Poland','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1308','EOS21_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1309','WGS_1984_(G2139)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1310','ECML14_NB_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1311','EWR2_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1312','Reseau_Geodesique_Francais_1993_v2','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1313','Reseau_Geodesique_Francais_1993_v2b','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1314','MRH21_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1315','MOLDOR11_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1317','HULLEE13_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1319','EBBWV14_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1320','SCM22_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1321','FNL22_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1322','International_Terrestrial_Reference_Frame_2020','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1324','MWC18_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1327','SIRGAS-Chile_realization_5_epoch_2021','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1329','Marco_Geocentrico_Nacional_de_Referencia_2018','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1332','System_34_Jylland_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1334','DoPw22_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1335','ShAb07_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1336','CNH22_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1337','System_34_Sjaelland_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1338','CWS13_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1339','DIBA15_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1340','GWPBS22_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1341','GWWAB22_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1342','GWWWA22_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1343','MALS09_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1344','OxWo08_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1345','SYC20_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1346','System_45_Bornholm_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1347','Generalstabens_System_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1348','Generalstabens_System_Bornholm_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1349','Copenhagen_Commune_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1350','Ostenfeld_Intermediate_Datum','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1351','SMITB20_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1352','RBEPP12_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1353','ETRS89_DREF91_Realization_2016','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1355','Sonatrach_Reference_Frame_2020','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1356','Latvian_coordinate_system_2020','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1357','Reseau_Geodesique_de_Nouvelle_Caledonie_2015','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1359','D_Hughes_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1360','NSIDC_International_1924_Authalic_Sphere','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1365','North_American_Datum_of_1983_(CSRS)_version_8','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1366','COV23_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1367','Brenner_Base_Tunnel_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1382','European_Terrestrial_Reference_Frame_2020','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1383','World_Geodetic_System_1984_(G2296)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1385','ECML14_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1386','WC05_Intermediate_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6001','D_Airy_1830','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6002','D_Airy_Modified','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6003','D_Australian','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6004','D_Bessel_1841','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6005','D_Bessel_Modified','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6006','D_Bessel_Namibia','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6007','D_Clarke_1858','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6008','D_Clarke_1866','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6009','D_Clarke_1866_Michigan','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6010','D_Clarke_1880_Benoit','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6011','D_Clarke_1880_IGN','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6012','D_Clarke_1880_RGS','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6013','D_Clarke_1880_Arc','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6014','D_Clarke_1880_SGA','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6015','D_Everest_Adj_1937','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6016','D_Everest_Def_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6018','D_Everest_Modified','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6019','D_GRS_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6020','D_Helmert_1906','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6021','D_Indonesian','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6022','D_International_1924','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6024','D_Krasovsky_1940','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6025','D_NWL_9D','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6027','D_Plessis_1817','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6028','D_Struve_1860','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6029','D_War_Office','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6031','D_GEM_10C','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6032','D_OSU_86F','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6033','D_OSU_91A','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6034','D_Clarke_1880','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6035','D_Sphere','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6036','D_GRS_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6042','D_Everest_1830','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6044','D_Everest_Def_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6045','D_Everest_Def_1975','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6047','D_Sphere_GRS_1980_Authalic','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6052','D_Sphere_Clarke_1866_Authalic','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6053','D_Sphere_International_1924_Authalic','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6054','D_Hughes_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6055','D_WGS_1984_Major_Auxiliary_Sphere','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6120','D_Greek','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6121','D_GGRS_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6122','D_ATS_1977','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6123','D_KKJ','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6124','D_RT_1990','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6125','D_Samboja','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6126','D_Lithuania_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6127','D_Tete','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6128','D_Madzansua','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6129','D_Observatario','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6130','D_Moznet','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6131','D_Indian_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6132','D_FD_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6133','D_Estonia_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6134','D_PDO_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6135','D_Old_Hawaiian','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6136','D_St_Lawrence_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6137','D_St_Paul_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6138','D_St_George_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6139','D_Puerto_Rico','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6140','D_North_American_1983_CSRS','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6141','D_Israel','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6142','D_Locodjo_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6143','D_Abidjan_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6144','D_Kalianpur_1937','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6145','D_Kalianpur_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6146','D_Kalianpur_1975','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6147','D_Hanoi_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6148','D_Hartebeesthoek_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6149','D_CH1903','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6150','D_CH1903+','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6151','D_Swiss_TRF_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6152','D_North_American_1983_HARN','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6153','D_Rassadiran','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6154','D_European_1950_ED77','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6155','D_Dabola_1981','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6156','D_S_JTSK','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6157','D_Mount_Dillon','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6158','D_Naparima_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6159','D_European_Libyan_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6160','D_Chos_Malal_1914','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6161','D_Pampa_del_Castillo','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6162','D_Korean_Datum_1985','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6163','D_Yemen_NGN_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6164','D_South_Yemen','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6165','D_Bissau','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6166','D_Korean_Datum_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6167','D_NZGD_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6168','D_Accra','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6169','D_American_Samoa_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6170','D_SIRGAS','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6171','D_RGF_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6172','D_POSGAR','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6173','D_IRENET95','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6174','D_Sierra_Leone_1924','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6175','D_Sierra_Leone_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6176','D_Australian_Antarctic_1998','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6178','D_Pulkovo_1942_Adj_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6179','D_Pulkovo_1942_Adj_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6180','D_Estonia_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6181','D_Luxembourg_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6182','D_Azores_Occidental_Islands_1939','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6183','D_Azores_Central_Islands_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6184','D_Azores_Oriental_Islands_1940','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6185','D_Madeira_1936','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6188','D_OSNI_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6189','D_REGVEN','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6190','D_POSGAR_1998','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6191','D_Albanian_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6192','D_Douala_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6193','D_Manoca_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6194','D_Qornoq_1927','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6195','D_Scoresbysund_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6196','D_Ammassalik_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6197','D_Garoua','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6198','D_Kousseri','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6199','D_Egypt_1930','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6200','D_Pulkovo_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6201','D_Adindan','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6202','D_Australian_1966','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6203','D_Australian_1984','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6204','D_Ain_el_Abd_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6205','D_Afgooye','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6206','D_Agadez','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6207','D_Lisbon','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6208','D_Aratu','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6209','D_Arc_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6210','D_Arc_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6211','D_Batavia','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6212','D_Barbados_1938','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6213','D_Beduaram','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6214','D_Beijing_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6215','D_Belge_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6216','D_Bermuda_1957','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6218','D_Bogota','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6219','D_Bukit_Rimpah','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6220','D_Camacupa','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6221','D_Campo_Inchauspe','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6222','D_Cape','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6223','D_Carthage','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6224','D_Chua','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6225','D_Corrego_Alegre','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6226','D_Cote_d_Ivoire','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6227','D_Deir_ez_Zor','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6228','D_Douala','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6229','D_Egypt_1907','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6230','D_European_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6231','D_European_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6232','D_Fahud','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6233','D_Gandajika_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6234','D_Garoua','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6235','D_Guyane_Francaise','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6236','D_Hu_Tzu_Shan','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6237','D_Hungarian_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6238','D_Indonesian_1974','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6239','D_Indian_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6240','D_Indian_1975','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6241','D_Jamaica_1875','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6242','D_Jamaica_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6243','D_Kalianpur_1880','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6244','D_Kandawala','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6245','D_Kertau','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6246','D_Kuwait_Oil_Company','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6247','D_La_Canoa','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6248','D_Provisional_S_American_1956','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6249','D_Lake','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6250','D_Leigon','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6251','D_Liberia_1964','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6252','D_Lome','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6253','D_Luzon_1911','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6254','D_Hito_XVIII_1963','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6255','D_Herat_North','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6256','D_Mahe_1971','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6257','D_Makassar','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6258','D_ETRS_1989','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6259','D_Malongo_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6260','D_Manoca','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6261','D_Merchich','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6262','D_Massawa','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6263','D_Minna','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6264','D_Mhast','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6265','D_Monte_Mario','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6266','D_Mporaloko','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6267','D_North_American_1927','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6268','D_North_American_Michigan','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6269','D_North_American_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6270','D_Nahrwan_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6271','D_Naparima_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6272','D_New_Zealand_1949','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6273','D_NGO_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6274','D_Datum_73','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6275','D_NTF','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6276','D_NSWC_9Z_2','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6277','D_OSGB_1936','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6278','D_OSGB_1970_SN','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6279','D_OS_SN_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6280','D_Padang_1884','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6281','D_Palestine_1923','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6282','D_Pointe_Noire','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6283','D_GDA_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6284','D_Pulkovo_1942','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6285','D_Qatar','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6286','D_Qatar_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6287','D_Qornoq','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6288','D_Loma_Quintana','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6289','D_Amersfoort','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6291','D_South_American_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6292','D_Sapper_Hill_1943','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6293','D_Schwarzeck','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6294','D_Segora','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6295','D_Serindung','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6296','D_Sudan','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6297','D_Tananarive_1925','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6298','D_Timbalai_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6299','D_TM65','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6300','D_TM75','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6301','D_Tokyo','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6302','D_Trinidad_1903','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6303','D_Trucial_Coast_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6304','D_Voirol_1875','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6306','D_Bern_1938','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6307','D_Nord_Sahara_1959','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6308','D_Stockholm_1938','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6309','D_Yacare','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6310','D_Yoff','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6311','D_Zanderij','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6312','D_MGI','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6313','D_Belge_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6314','D_Deutsches_Hauptdreiecksnetz','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6315','D_Conakry_1905','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6316','D_Dealul_Piscului_1933','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6317','D_Dealul_Piscului_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6318','D_NGN','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6319','D_Kuwait_Utility','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6322','D_WGS_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6324','D_WGS_1972_BE','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6326','D_WGS_1984','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6600','D_Anguilla_1957','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6601','D_Antigua_1943','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6602','D_Dominica_1945','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6603','D_Grenada_1953','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6604','D_Montserrat_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6605','D_St_Kitts_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6606','D_St_Lucia_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6607','D_St_Vincent_1945','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6608','D_NAD_1927_Definition_1976','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6609','D_NAD_1927_CGQ77','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6610','D_Xian_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6611','D_Hong_Kong_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6612','D_JGD_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6613','D_Gunung_Segara','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6614','D_QND_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6615','D_Porto_Santo_1936','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6616','D_Selvagem_Grande_1938','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6618','D_South_American_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6619','D_SWEREF99','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6620','D_Point_58','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6621','D_Fort_Marigot','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6622','D_Sainte_Anne','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6623','D_CSG_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6624','D_RGFG_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6625','D_Fort_Desaix','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6626','D_Reunion_1947','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6627','D_RGR_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6628','D_Tahiti_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6629','D_Tahaa_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6630','D_IGN72_Nuku_Hiva','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6631','D_Kerguelen_Island_1949','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6632','D_Combani_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6633','D_IGN56_Lifou','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6634','D_IGN72_Grande_Terre','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6636','D_Petrels_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6637','D_Pointe_Geologie_Perroud_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6638','D_Saint_Pierre_et_Miquelon_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6639','D_MOP78','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6641','D_IGN53_Mare','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6642','D_ST84_Ile_des_Pins','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6643','D_ST71_Belep','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6644','D_NEA74_Noumea','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6645','D_RGNC_1991','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6646','D_Grand_Comoros','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6647','D_ITRF_1988','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6648','D_ITRF_1989','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6649','D_ITRF_1990','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6650','D_ITRF_1991','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6651','D_ITRF_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6652','D_ITRF_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6653','D_ITRF_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6654','D_ITRF_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6655','D_ITRF_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6656','D_ITRF_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6657','D_Reykjavik_1900','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6658','D_Hjorsey_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6659','D_Islands_Network_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6660','D_Helle_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6661','D_Latvia_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6663','D_Porto_Santo_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6664','D_Azores_Oriental_Islands_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6665','D_Azores_Central_Islands_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6666','D_Lisbon_1890','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6667','D_Iraq_Kuwait_Boundary_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6668','D_European_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6670','D_IGM_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6671','D_Voirol_1879','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6672','D_Chatham_Island_1971','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6673','D_Chatham_Islands_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6674','D_SIRGAS_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6675','D_Guam_1963','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6676','D_Vientiane_1982','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6677','D_Lao_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6678','D_Lao_National_Datum_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6679','D_Jouik_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6680','D_Nouakchott_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6682','D_Gulshan_303','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6683','D_Philippine_Reference_System_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6684','D_Gan_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6686','D_MAGNA','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6687','D_Reseau_Geodesique_de_la_Polynesie_Francaise','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6688','D_Fatu_Iva_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6689','D_IGN63_Hiva_Oa','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6690','D_Tahiti_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6691','D_Moorea_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6692','D_Maupiti_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6693','D_Nakhl-e_Ghanem','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6694','D_POSGAR_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6695','D_Katanga_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6696','D_Kasai_1953','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6697','D_IGC_1962_Arc_of_the_6th_Parallel_South','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6698','D_Kerguelen_Island_1949','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6699','D_Le_Pouce_1934','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6700','D_IGN_Astro_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6701','D_Institut_Geographique_du_Congo_Belge_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6702','D_Mauritania_1999','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6703','D_Mhast_1951','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6704','D_Mhast_Onshore','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6705','D_Mhast_Offshore','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6706','D_Egypt_Gulf_of_Suez_S-650_TL','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6707','D_Tern_Island_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6708','D_Anna_1_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6709','D_Beacon_E_1945','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6710','D_DOS_71_4','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6711','D_Astro_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6712','D_Ascension_Island_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6713','D_Ayabelle','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6714','D_Bellevue_IGN','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6715','D_Camp_Area','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6716','D_Canton_1966','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6717','D_Cape_Canaveral','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6718','D_Solomon_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6719','D_Easter_Island_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6720','D_Fiji_1986','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6721','D_Fiji_1956','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6722','D_ISTS_061_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6723','D_Grand_Cayman_1959','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6724','D_ISTS_073_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6725','D_Johnston_Island_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6726','D_Little_Cayman_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6727','D_Midway_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6728','D_Pico_de_Las_Nieves','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6729','D_Pitcairn_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6730','D_Santo_DOS_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6731','D_Viti_Levu_1916','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6732','D_Wake_Eniwetok_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6733','D_Wake_Island_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6734','D_Tristan_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6735','D_Kusaie_1951','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6736','D_Deception_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6737','D_Korea_Geodetic_Datum_2002','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6738','D_Hong_Kong_1963','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6739','D_Hong_Kong_1963_67','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6740','D_Parametrop_Zemp_1990','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6741','D_Faroe_Datum_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6742','D_GDM_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6743','D_Karbala_1979_Polservice','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6744','D_Nahrwan_1934','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6745','D_Rauenberg_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6746','D_Potsdam_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6747','D_Greenland_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6748','D_Vanua_Levu_1915','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6749','D_Reseau_Geodesique_de_Nouvelle_Caledonie_1991-93','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6750','D_ST87_Ouvea','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6751','D_Kertau_RSO','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6752','D_Viti_Levu_1912','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6753','D_fk89','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6754','D_Libyan_Geodetic_Datum_2006','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6755','D_Datum_Geodesi_Nasional_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6756','D_Vietnam_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6757','D_SVY21','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6758','D_Jamaica_2001','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6759','D_NAD_1983_NSRS2007','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6760','D_WGS_1966','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6761','D_Croatian_Terrestrial_Reference_System','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6762','D_Bermuda_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6763','D_Pitcairn_2006','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6764','D_Ross_Sea_Region_Geodetic_Datum_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6765','D_Slovenia_Geodetic_Datum_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6801','CH1903_(Bern)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6802','Bogota_1975_(Bogota)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6803','Lisbon_1937_(Lisbon)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6804','Makassar_(Jakarta)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6805','Militar-Geographische_Institut_(Ferro)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6806','Monte_Mario_(Rome)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6807','Nouvelle_Triangulation_Francaise_(Paris)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6809','Reseau_National_Belge_1950_(Brussels)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6810','Tananarive_1925_(Paris)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6811','Voirol_1875_(Paris)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6813','Batavia_(Jakarta)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6814','Stockholm_1938_(Stockholm)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6815','Greek_(Athens)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6816','Carthage_(Paris)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6817','NGO_1948_(Oslo)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6818','System_of_the_Unified_Trigonometrical_Cadastral_Network_(Ferro)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6820','Gunung_Segara_(Jakarta)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6821','Voirol_1879_(Paris)','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6896','D_ITRF_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6901','D_ATF','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6902','D_Nord_de_Guerre','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6903','D_Madrid_1870','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6904','Lisbon_1890_(Lisbon)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','3819','GCS_HD1909','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','3821','GCS_TWD_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','3823','TWD_1997_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','3824','GCS_TWD_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','3888','IGRS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','3889','GCS_IGRS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','3906','GCS_MGI_1901','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4001','GCS_Airy_1830','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4002','GCS_Airy_Modified','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4003','GCS_Australian','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4004','GCS_Bessel_1841','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4005','GCS_Bessel_Modified','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4006','GCS_Bessel_Namibia','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4007','GCS_Clarke_1858','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4008','GCS_Clarke_1866','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4009','GCS_Clarke_1866_Michigan','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4010','GCS_Clarke_1880_Benoit','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4011','GCS_Clarke_1880_IGN','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4012','GCS_Clarke_1880_RGS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4013','GCS_Clarke_1880_Arc','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4014','GCS_Clarke_1880_SGA','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4015','GCS_Everest_Adj_1937','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4016','GCS_Everest_def_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4017','MOLDREF99_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4018','GCS_Everest_Modified','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4019','GCS_GRS_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4020','GCS_Helmert_1906','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4021','GCS_Indonesian','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4022','GCS_International_1924','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4023','GCS_MOLDREF99','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4024','GCS_Krasovsky_1940','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4025','GCS_NWL_9D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4027','GCS_Plessis_1817','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4028','GCS_Struve_1860','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4029','GCS_War_Office','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4031','GCS_GEM_10C','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4032','GCS_OSU_86F','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4033','GCS_OSU_91A','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4034','GCS_Clarke_1880','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4035','GCS_Sphere','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4036','GCS_GRS_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4040','RGRDC_2005_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4042','GCS_Everest_1830','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4044','GCS_Everest_def_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4045','GCS_Everest_def_1975','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4046','GCS_RGRDC_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4047','GCS_Sphere_GRS_1980_Authalic','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4052','GCS_Sphere_Clarke_1866_Authalic','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4053','GCS_Sphere_International_1924_Authalic','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4054','GCS_Hughes_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4055','GCS_WGS_1984_Major_Auxiliary_Sphere','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4074','SREF98_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4075','GCS_SREF98','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4080','REGCAN95_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4081','GCS_REGCAN95','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4120','GCS_Greek','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4121','GCS_GGRS_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4122','GCS_ATS_1977','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4123','GCS_KKJ','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4124','GCS_RT_1990','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4125','GCS_Samboja','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4126','GCS_LKS_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4127','GCS_Tete','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4128','GCS_Madzansua','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4129','GCS_Observatario','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4130','GCS_Moznet','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4131','GCS_Indian_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4132','GCS_FD_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4133','GCS_Estonia_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4134','GCS_PDO_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4135','GCS_Old_Hawaiian','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4136','GCS_St_Lawrence_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4137','GCS_St_Paul_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4138','GCS_St_George_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4139','GCS_Puerto_Rico','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4140','GCS_North_American_1983_CSRS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4141','GCS_Israel','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4142','GCS_Locodjo_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4143','GCS_Abidjan_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4144','GCS_Kalianpur_1937','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4145','GCS_Kalianpur_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4146','GCS_Kalianpur_1975','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4147','GCS_Hanoi_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4148','GCS_Hartebeesthoek_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4149','GCS_CH1903','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4150','GCS_CH1903+','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4151','GCS_Swiss_TRF_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4152','GCS_North_American_1983_HARN','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4153','GCS_Rassadiran','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4154','GCS_European_1950_ED77','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4155','GCS_Dabola_1981','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4156','GCS_S_JTSK','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4157','GCS_Mount_Dillon','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4158','GCS_Naparima_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4159','GCS_European_Libyan_Datum_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4160','GCS_Chos_Malal_1914','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4161','GCS_Pampa_del_Castillo','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4162','GCS_Korean_Datum_1985','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4163','GCS_Yemen_NGN_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4164','GCS_South_Yemen','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4165','GCS_Bissau','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4166','GCS_Korean_Datum_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4167','GCS_NZGD_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4168','GCS_Accra','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4169','GCS_American_Samoa_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4170','GCS_SIRGAS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4171','GCS_RGF_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4172','GCS_POSGAR','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4173','GCS_IRENET95','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4174','GCS_Sierra_Leone_1924','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4175','GCS_Sierra_Leone_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4176','GCS_Australian_Antarctic_1998','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4178','GCS_Pulkovo_1942_Adj_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4179','GCS_Pulkovo_1942_Adj_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4180','GCS_Estonia_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4181','GCS_LUREF','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4182','GCS_Azores_Occidental_1939','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4183','GCS_Azores_Central_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4184','GCS_Azores_Oriental_1940','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4185','GCS_Madeira_1936','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4188','GCS_OSNI_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4189','GCS_REGVEN','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4190','GCS_POSGAR_1998','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4191','GCS_Albanian_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4192','GCS_Douala_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4193','GCS_Manoca_1962','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4194','GCS_Qornoq_1927','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4195','GCS_Scoresbysund_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4196','GCS_Ammassalik_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4197','GCS_Garoua','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4198','GCS_Kousseri','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4199','GCS_Egypt_1930','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4200','GCS_Pulkovo_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4201','GCS_Adindan','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4202','GCS_Australian_1966','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4203','GCS_Australian_1984','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4204','GCS_Ain_el_Abd_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4205','GCS_Afgooye','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4206','GCS_Agadez','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4207','GCS_Lisbon','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4208','GCS_Aratu','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4209','GCS_Arc_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4210','GCS_Arc_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4211','GCS_Batavia','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4212','GCS_Barbados_1938','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4213','GCS_Beduaram','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4214','GCS_Beijing_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4215','GCS_Belge_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4216','GCS_Bermuda_1957','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4218','GCS_Bogota','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4219','GCS_Bukit_Rimpah','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4220','GCS_Camacupa','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4221','GCS_Campo_Inchauspe','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4222','GCS_Cape','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4223','GCS_Carthage','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4224','GCS_Chua','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4225','GCS_Corrego_Alegre','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4226','GCS_Cote_d_Ivoire','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4227','GCS_Deir_ez_Zor','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4228','GCS_Douala','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4229','GCS_Egypt_1907','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4230','GCS_European_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4231','GCS_European_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4232','GCS_Fahud','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4233','GCS_Gandajika_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4234','GCS_Garoua','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4235','GCS_Guyane_Francaise','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4236','GCS_Hu_Tzu_Shan','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4237','GCS_Hungarian_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4238','GCS_Indonesian_1974','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4239','GCS_Indian_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4240','GCS_Indian_1975','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4241','GCS_Jamaica_1875','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4242','GCS_Jamaica_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4243','GCS_Kalianpur_1880','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4244','GCS_Kandawala','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4245','GCS_Kertau','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4246','GCS_Kuwait_Oil_Company','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4247','GCS_La_Canoa','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4248','GCS_Provisional_S_American_1956','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4249','GCS_Lake','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4250','GCS_Leigon','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4251','GCS_Liberia_1964','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4252','GCS_Lome','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4253','GCS_Luzon_1911','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4254','GCS_Hito_XVIII_1963','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4255','GCS_Herat_North','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4256','GCS_Mahe_1971','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4257','GCS_Makassar','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4258','GCS_ETRS_1989','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4259','GCS_Malongo_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4260','GCS_Manoca','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4261','GCS_Merchich','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4262','GCS_Massawa','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4263','GCS_Minna','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4264','GCS_Mhast','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4265','GCS_Monte_Mario','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4266','GCS_Mporaloko','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4267','GCS_North_American_1927','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4268','GCS_North_American_Michigan','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4269','GCS_North_American_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4270','GCS_Nahrwan_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4271','GCS_Naparima_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4272','GCS_New_Zealand_1949','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4273','GCS_NGO_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4274','GCS_Datum_73','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4275','GCS_NTF','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4276','GCS_NSWC_9Z_2','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4277','GCS_OSGB_1936','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4278','GCS_OSGB_1970_SN','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4279','GCS_OS_SN_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4280','GCS_Padang_1884','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4281','GCS_Palestine_1923','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4282','GCS_Pointe_Noire','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4283','GCS_GDA_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4284','GCS_Pulkovo_1942','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4285','GCS_Qatar_1974','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4286','GCS_Qatar_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4287','GCS_Qornoq','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4288','GCS_Loma_Quintana','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4289','GCS_Amersfoort','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4291','GCS_South_American_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4292','GCS_Sapper_Hill_1943','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4293','GCS_Schwarzeck','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4294','GCS_Segora','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4295','GCS_Serindung','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4296','GCS_Sudan','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4297','GCS_Tananarive_1925','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4298','GCS_Timbalai_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4299','GCS_TM65','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4300','GCS_TM75','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4301','GCS_Tokyo','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4302','GCS_Trinidad_1903','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4303','GCS_Trucial_Coast_1948','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4304','GCS_Voirol_1875','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106011','D_Voirol_Unifie_1960','Voirol Unifie 1960','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106011_USAGE','geodetic_datum','ESRI','106011','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','4305','GCS_Voirol_Unifie_1960',NULL,'geographic 2D','EPSG','6403','ESRI','106011',NULL,1); INSERT INTO "usage" VALUES('ESRI', '4305_USAGE','geodetic_crs','ESRI','4305','EPSG','1365','EPSG','1024'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4306','GCS_Bern_1938','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4307','GCS_Nord_Sahara_1959','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4308','GCS_RT38','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4309','GCS_Yacare','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4310','GCS_Yoff','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4311','GCS_Zanderij','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4312','GCS_MGI','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4313','GCS_Belge_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4314','GCS_Deutsches_Hauptdreiecksnetz','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4315','GCS_Conakry_1905','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4316','GCS_Dealul_Piscului_1933','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4317','GCS_Dealul_Piscului_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4318','GCS_NGN','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4319','GCS_KUDAMS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4322','GCS_WGS_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4324','GCS_WGS_1972_BE','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4326','GCS_WGS_1984','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4463','GCS_RGSPM_2006','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4466','RGSPM_2006_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4469','RGM_2004_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4470','GCS_RGM_2004','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4472','Cadastre_1997_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4475','GCS_Cadastre_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4480','China_Geodetic_Coordinate_System_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4482','Mexican_Datum_of_1993_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4483','GCS_Mexican_Datum_of_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4490','GCS_China_Geodetic_Coordinate_System_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4555','GCS_New_Beijing','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4557','RRAF_1991_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4558','GCS_RRAF_1991','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4600','GCS_Anguilla_1957','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4601','GCS_Antigua_1943','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4602','GCS_Dominica_1945','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4603','GCS_Grenada_1953','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4604','GCS_Montserrat_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4605','GCS_St_Kitts_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4606','GCS_St_Lucia_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4607','GCS_St_Vincent_1945','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4608','GCS_NAD_1927_Definition_1976','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4609','GCS_NAD_1927_CGQ77','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4610','GCS_Xian_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4611','GCS_Hong_Kong_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4612','GCS_JGD_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4613','GCS_Gunung_Segara','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4614','GCS_QND_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4615','GCS_Porto_Santo_1936','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4616','GCS_Selvagem_Grande_1938','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4617','GCS_North_American_1983_CSRS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4618','GCS_South_American_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4619','GCS_SWEREF99','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4620','GCS_Point_58','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4621','GCS_Fort_Marigot','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4622','GCS_Sainte_Anne','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4623','GCS_CSG_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4624','GCS_RGFG_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4625','GCS_Fort_Desaix','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4626','GCS_Reunion_1947','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4627','GCS_RGR_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4628','GCS_Tahiti_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4629','GCS_Tahaa_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4630','GCS_IGN72_Nuku_Hiva','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4631','GCS_Kerguelen_Island_1949','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4632','GCS_Combani_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4633','GCS_IGN56_Lifou','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4636','GCS_Petrels_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4637','GCS_Pointe_Geologie_Perroud_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4638','GCS_Saint_Pierre_et_Miquelon_1950','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4639','GCS_MOP78','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4641','GCS_IGN53_Mare','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4642','GCS_ST84_Ile_des_Pins','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4643','GCS_ST71_Belep','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4644','GCS_NEA74_Noumea','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4645','GCS_RGNC_1991','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4646','GCS_Grand_Comoros','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4657','GCS_Reykjavik_1900','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4658','GCS_Hjorsey_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4659','GCS_ISN_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4660','GCS_Helle_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4661','GCS_LKS_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4662','GCS_IGN72_Grande_Terre','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4663','GCS_Porto_Santo_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4664','GCS_Azores_Oriental_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4665','GCS_Azores_Central_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4666','GCS_Lisbon_1890','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4667','GCS_IKBD_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4668','GCS_European_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4669','GCS_LKS_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4670','GCS_IGM_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4671','GCS_Voirol_1879','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4672','GCS_Chatham_Island_1971','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4673','GCS_Chatham_Islands_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4674','GCS_SIRGAS_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4675','GCS_Guam_1963','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4676','GCS_Vientiane_1982','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4677','GCS_Lao_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4678','GCS_Lao_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4679','GCS_Jouik_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4680','GCS_Nouakchott_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4682','GCS_Gulshan_303','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4683','GCS_PRS_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4684','GCS_Gan_1970','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4686','GCS_MAGNA','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4687','GCS_RGPF','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4688','GCS_Fatu_Iva_1972','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4689','GCS_IGN63_Hiva_Oa','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4690','GCS_Tahiti_1979','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4691','GCS_Moorea_1987','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4692','GCS_Maupiti_1983','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4693','GCS_Nakhl-e_Ghanem','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4694','GCS_POSGAR_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4695','GCS_Katanga_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4696','GCS_Kasai_1953','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4697','GCS_IGC_1962_6th_Parallel_South','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4698','GCS_Kerguelen_Island_1949','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4699','GCS_Le_Pouce_1934','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4700','GCS_IGN_Astro_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4701','GCS_IGCB_1955','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4702','GCS_Mauritania_1999','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4703','GCS_Mhast_1951','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4704','GCS_Mhast_Onshore','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4705','GCS_Mhast_Offshore','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4706','GCS_Egypt_Gulf_of_Suez_S-650_TL','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4707','GCS_Tern_Island_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4708','GCS_Anna_1_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4709','GCS_Beacon_E_1945','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4710','GCS_DOS_71_4','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4711','GCS_Astro_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4712','GCS_Ascension_Island_1958','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4713','GCS_Ayabelle','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4714','GCS_Bellevue_IGN','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4715','GCS_Camp_Area','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4716','GCS_Canton_1966','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4717','GCS_Cape_Canaveral','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4718','GCS_Solomon_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4719','GCS_Easter_Island_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4720','GCS_Fiji_1986','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4721','GCS_Fiji_1956','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4722','GCS_ISTS_061_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4723','GCS_Grand_Cayman_1959','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4724','GCS_ISTS_073_1969','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4725','GCS_Johnston_Island_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4726','GCS_Little_Cayman_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4727','GCS_Midway_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4728','GCS_Pico_de_Las_Nieves','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4729','GCS_Pitcairn_1967','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4730','GCS_Santo_DOS_1965','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4731','GCS_Viti_Levu_1916','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4732','GCS_Wake_Eniwetok_1960','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4733','GCS_Wake_Island_1952','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4734','GCS_Tristan_1968','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4735','GCS_Kusaie_1951','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4736','GCS_Deception_Island','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4738','GCS_Hong_Kong_1963','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4739','GCS_Hong_Kong_1963_67','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4740','GCS_PZ_1990','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4741','GCS_FD_1954','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4742','GCS_GDM_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4743','GCS_Karbala_1979_Polservice','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4744','GCS_Nahrwan_1934','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4745','GCS_RD/83','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4746','GCS_PD/83','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4747','GCS_Greenland_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4748','GCS_Vanua_Levu_1915','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4749','GCS_RGNC_1991-93','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4750','GCS_ST87_Ouvea','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4751','GCS_Kertau_RSO','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4752','GCS_Viti_Levu_1912','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4753','GCS_fk89','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4754','GCS_LGD2006','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4755','GCS_DGN_1995','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4756','GCS_VN_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4757','GCS_SVY21','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4758','GCS_JAD_2001','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4759','GCS_NAD_1983_NSRS2007','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4760','GCS_WGS_1966','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4761','GCS_HTRS96','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4762','GCS_Bermuda_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4763','GCS_Pitcairn_2006','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4764','GCS_RSRGD2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4765','GCS_Slovenia_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4801','GCS_Bern_1898_Bern','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4802','GCS_Bogota_Bogota','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4803','GCS_Lisbon_Lisbon','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4804','GCS_Makassar_Jakarta','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4805','GCS_MGI_Ferro','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4806','GCS_Monte_Mario_Rome','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4807','GCS_NTF_Paris','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4808','GCS_Padang_1884_Jakarta','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4809','GCS_Belge_1950_Brussels','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4810','GCS_Tananarive_1925_Paris','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4811','GCS_Voirol_1875_Paris','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106011_Paris','D_Voirol_Unifie_1960','Voirol Unifie 1960','EPSG','7012','EPSG','8903',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106011_Paris_USAGE','geodetic_datum','ESRI','106011_Paris','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','4812','GCS_Voirol_Unifie_1960_Paris',NULL,'geographic 2D','EPSG','6403','ESRI','106011_Paris',NULL,1); INSERT INTO "usage" VALUES('ESRI', '4812_USAGE','geodetic_crs','ESRI','4812','EPSG','1365','EPSG','1024'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4813','GCS_Batavia_Jakarta','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4814','GCS_RT38_Stockholm','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4815','GCS_Greek_Athens','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4816','GCS_Carthage_Paris','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4817','GCS_NGO_1948_Oslo','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4818','GCS_S_JTSK_Ferro','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4819','GCS_Nord_Sahara_1959_Paris','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4820','GCS_Gunung_Segara_Jakarta','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4821','GCS_Voirol_1879_Paris','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4823','GCS_Sao_Tome','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4824','GCS_Principe','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4883','Slovenia_1996_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4885','RSRGD2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4887','Bermuda_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4889','HTRS96_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4891','WGS_1966_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4893','NAD_1983_NSRS2007_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4895','JAD_2001_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4898','DGN_1995_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4900','LGD2006_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4901','GCS_ATF_Paris','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4902','GCS_Nord_de_Guerre_Paris','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4903','GCS_Madrid_1870_Madrid','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4904','GCS_Lisbon_1890_Lisbon','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4907','RGNC_1991-93_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4909','Greenland_1996_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4921','GDM_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4923','PZ_1990_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4925','Mauritania_1999_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4927','KGD2002_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4929','POSGAR_1994_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4931','Australian_Antarctic_1998_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4933','Swiss_TRF_1995_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4935','Estonia_1997_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4937','ETRS_1989_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4939','GDA_1994_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4941','Hartebeesthoek_1994_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4943','IRENET95_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4945','ISN_1993_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4947','JGD_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4949','LKS_1992_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4951','LKS_1994_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4953','Moznet_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4955','North_American_1983_CSRS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4957','North_American_1983_HARN_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4959','NZGD_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4961','POSGAR_1998_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4963','REGVEN_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4965','RGF_1993_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4967','RGFG_1995_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4971','RGR_1992_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4975','SIRGAS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4977','SWEREF99_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4979','WGS_1984_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4981','Yemen_NGN_1996_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4983','IGM_1995_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4985','WGS_1972_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4987','WGS_1972_BE_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4989','SIRGAS_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4991','Lao_1993_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4993','Lao_1997_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4995','PRS_1992_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4997','MAGNA_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4999','RGPF_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5012','PTRA08_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5013','GCS_PTRA08','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5132','Tokyo_1892','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5228','GCS_S_JTSK/05','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5229','GCS_S_JTSK/05_Ferro','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5233','GCS_SLD99','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5245','GDBD2009_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5246','GCS_GDBD2009','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5251','TUREF_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5252','GCS_TUREF','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5263','DRUKREF_03_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5264','GCS_DRUKREF_03','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5323','ISN_2004_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5324','GCS_ISN_2004','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5340','GCS_POSGAR_2007','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5342','POSGAR_2007_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5353','MARGEN_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5354','GCS_MARGEN','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5359','SIRGAS-Chile_2002_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5360','GCS_SIRGAS-Chile_2002','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5364','CR05_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5365','GCS_CR05','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5370','MARCARIO_SOLIS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5371','GCS_MARCARIO_SOLIS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5372','Peru96_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5373','GCS_Peru96','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5380','SIRGAS-ROU98_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5381','GCS_SIRGAS-ROU98','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5392','SIRGAS_ES2007.8_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5393','GCS_SIRGAS_ES2007.8','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5451','GCS_Ocotepeque_1935','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5464','GCS_Sibun_Gorge_1922','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5467','GCS_Panama-Colon_1911','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5488','RGAF09_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5489','GCS_RGAF09','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5524','GCS_Corrego_Alegre_1961','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5527','GCS_SAD_1969_96','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5545','PNG94_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5546','GCS_PNG94','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5560','Ukraine_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5561','GCS_Ukraine_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5592','FEH2010_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5593','GCS_FEH2010','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5681','GCS_DB_REF','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5830','DB_REF_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5885','TGD2005_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5886','GCS_TGD2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6134','CIGD11_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6135','GCS_CIGD11','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6207','GCS_Nepal_Nagarkot','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6310','CGRS_1993_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6311','GCS_CGRS_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6318','GCS_NAD_1983_2011','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6319','NAD_1983_2011_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6321','NAD_1983_PA11_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6322','GCS_NAD_1983_PA11','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6324','NAD_1983_MA11_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6325','GCS_NAD_1983_MA11','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6364','Mexico_ITRF2008_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6365','GCS_Mexico_ITRF2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6667','JGD_2011_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6668','GCS_JGD_2011','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6705','RDN2008_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6706','GCS_RDN2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6782','NAD_1983_CORS96_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6783','GCS_NAD_1983_CORS96','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6881','GCS_Aden_1925','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6882','GCS_Bekaa_Valley_1920','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6883','GCS_Bioko','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6892','GCS_South_East_Island_1943','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6894','GCS_Gambia','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6982','IG05_Intermediate_CRS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6983','IG05_Intermediate_CRS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6987','IGD05(2012)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6989','IG05(2012)_Intermediate_CRS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','6990','IG05(2012)_Intermediate_CRS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7034','RGSPM06_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7035','RGSPM06_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7036','RGR92_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7037','RGR92_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7038','RGM04_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7039','RGM04_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7040','RGFG95_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7041','RGFG95_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7042','RGF93_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7072','RGTAAF07_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7073','GCS_RGTAAF07','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7084','RGF93_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7085','RGAF09_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7086','RGAF09_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7087','RGTAAF07_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7133','RGTAAF07_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7135','IGD05_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7138','IGD05(2012)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7139','IGD05(2012)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7372','ONGD14_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7657','WGS_1984_(G730)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7659','WGS_1984_(G873)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7661','WGS_1984_(G1150)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7663','WGS_1984_(G1674)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7665','WGS_1984_(G1762)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7678','PZ-90.02_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7680','PZ-90.11_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7682','GSK-2011_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7685','Kyrg-06_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7686','GCS_Kyrg-06','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7797','BGS2005_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7816','WGS_1984_(Transit)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7843','GDA2020_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7880','St_Helena_Tritan_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7881','St_Helena_Tritan','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7885','SHGD2015_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7900','ITRF_1988_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7901','ITRF_1989_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7902','ITRF_1990_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7903','ITRF_1991_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7904','ITRF_1992_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7905','ITRF_1993_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7906','ITRF_1994_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7907','ITRF_1996_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7908','ITRF_1997_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7909','ITRF_2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7910','ITRF_2005_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7911','ITRF_2008_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7912','ITRF2014_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7915','ETRF_1989_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7917','ETRF90_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7919','ETRF91_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7921','ETRF92_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7923','ETRF93_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7925','ETRF94_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7927','ETRF96_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7929','ETRF97_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','7931','ETRF2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8042','Gusterberg(Ferro)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8043','St._Stephen(Ferro)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8085','ISN2016_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8231','NAD83(CSRS96)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8235','NAD83(CSRS)v2_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8239','NAD83(CSRS)v3_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8244','NAD83(CSRS)v4_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8248','NAD83(CSRS)v5_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8251','NAD83(CSRS)v6_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8254','NAD83(CSRS)v7_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8351','S-JTSK_[JTSK03]','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8351','S_JTSK_JTSK03','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8399','ETRF2005_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8403','ETRF2014_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8426','Hong_Kong_Geodetic_CS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8427','Hong_Kong_Geodetic_CS','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8428','Macao_1920','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8430','MACAO_2008_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8431','GCS_MACAO_2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8449','NAD_1983_(FBN)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8542','NAD_1983_(FBN)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8544','NAD_1983_(HARN_Corrected)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8545','NAD_1983_(HARN_Corrected)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8684','SRB_ETRS89_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8694','Camacupa_2015','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8698','RSAO13_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8817','MTRF-2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8860','NAD_1983_(FBN)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8888','WGS_1984_(Transit)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8899','RGWF96_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8901','RGWF96_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8902','RGWF96_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8906','CR-SIRGAS_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8916','SIRGAS-CON_DGF00P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8918','SIRGAS-CON_DGF01P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8920','SIRGAS-CON_DGF01P02_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8922','SIRGAS-CON_DGF02P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8924','SIRGAS-CON_DGF04P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8926','SIRGAS-CON_DGF05P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8928','SIRGAS-CON_DGF06P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8930','SIRGAS-CON_DGF07P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8932','SIRGAS-CON_DGF08P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8934','SIRGAS-CON_SIR09P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8936','SIRGAS-CON_SIR10P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8938','SIRGAS-CON_SIR11P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8940','SIRGAS-CON_SIR13P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8942','SIRGAS-CON_SIR14P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8944','SIRGAS-CON_SIR15P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8946','SIRGAS-CON_SIR17P01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8948','SIRGAS-Chile_2010_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8949','SIRGAS-Chile_2010','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8972','SIRGAS-CON_DGF00P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8973','SIRGAS-CON_DGF01P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8974','SIRGAS-CON_DGF01P02','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8975','SIRGAS-CON_DGF02P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8976','SIRGAS-CON_DGF04P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8977','SIRGAS-CON_DGF05P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8978','SIRGAS-CON_DGF06P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8979','SIRGAS-CON_DGF07P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8980','SIRGAS-CON_DGF08P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8981','SIRGAS-CON_SIR09P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8982','SIRGAS-CON_SIR10P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8983','SIRGAS-CON_SIR11P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8984','SIRGAS-CON_SIR13P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8985','SIRGAS-CON_SIR14P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8986','SIRGAS-CON_SIR15P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8987','SIRGAS-CON_SIR17P01','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8988','GCS_ITRF_1988','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8989','GCS_ITRF_1989','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8990','GCS_ITRF_1990','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8991','GCS_ITRF_1991','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8992','GCS_ITRF_1992','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8993','GCS_ITRF_1993','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8994','GCS_ITRF_1994','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8995','GCS_ITRF_1996','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8996','GCS_ITRF_1997','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8997','GCS_ITRF_2000','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8998','GCS_ITRF_2005','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','8999','GCS_ITRF_2008','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9002','IGS97_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9005','IGS00_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9008','IGb00_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9011','IGS05_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9013','IGS08_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9014','GCS_IGS08','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9016','IGb08_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9018','IGS14_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9053','WGS_1984_(G730)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9054','WGS_1984_(G873)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9055','WGS_1984_(G1150)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9056','WGS_1984_(G1674)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9057','WGS_1984_(G1762)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9059','GCS_ETRF_1989','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9071','NAD_1983_MARP00_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9072','GCS_NAD_1983_MARP00','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9074','NAD_1983_PACP00_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9075','GCS_NAD_1983_PACP00','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9139','KOSOVAREF01_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9147','SIRGAS-Chile_2013_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9148','SIRGAS-Chile_2013','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9152','SIRGAS-Chile_2016_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9153','SIRGAS-Chile_2016','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9183','SIRGAS-Chile_2002_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9184','GCS_SIRGAS-Chile_2002','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9248','Tapi_Aike','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9267','MGI_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9293','ONGD17_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9308','ATRF2014_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9332','KSA-GRF17_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9379','IGb14_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9469','SRGI2013_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9546','LTF2004(G)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9695','REDGEOMIN_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9701','ETRF2000-PL_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9754','WGS_1984_(G2139)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9755','WGS_1984_(G2139)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9776','RGF93_v2_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9777','RGF93_v2','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9778','RGF93_v2_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9779','RGF93_v2_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9781','RGF93_v2b_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9782','RGF93_v2b','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9783','RGF93_v2b_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9784','RGF93_v2b_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9893','LUREF_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9989','ITRF2020_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10177','IGS20_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10283','ETRS89_DREF91_2016_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10284','ETRS89_DREF91_2016','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10298','RGSH2020_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10300','RGNC_1991-93_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10304','LKS-2020_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10307','RGNC_1991-93_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10309','RGNC15_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10311','RGNC15_(lon-lat)_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10312','RGNC15_(lon-lat)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10327','BH_ETRS89_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10345','GCS_Hughes_1980','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10346','NSIDC_Authalic_Sphere','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10413','NAD83(CSRS)v8_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10474','BBT2000_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10570','ETRF2020_(3D)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10605','WGS_1984_(G2296)_(3D)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','10606','WGS_1984_(G2296)','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','20040','SIRGAS-Chile_2021_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','20041','SIRGAS-Chile_2021','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','20045','MAGNA-SIRGAS_2018_3D','ESRI'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','20046','MAGNA-SIRGAS_2018','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106001','D_WGS_1966','WGS 1966','EPSG','7025','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106001_USAGE','geodetic_datum','ESRI','106001','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37001','GCS_WGS_1966',NULL,'geographic 2D','EPSG','6422','ESRI','106001',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37001_USAGE','geodetic_crs','ESRI','37001','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37001','EPSG','4760','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106002','D_Fischer_1960','Fischer 1960','ESRI','107002','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106002_USAGE','geodetic_datum','ESRI','106002','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37002','GCS_Fischer_1960',NULL,'geographic 2D','EPSG','6422','ESRI','106002',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37002_USAGE','geodetic_crs','ESRI','37002','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106003','D_Fischer_1968','Fischer 1968','ESRI','107003','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106003_USAGE','geodetic_datum','ESRI','106003','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37003','GCS_Fischer_1968',NULL,'geographic 2D','EPSG','6422','ESRI','106003',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37003_USAGE','geodetic_crs','ESRI','37003','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106004','D_Fischer_Modified','Fischer modified','ESRI','107004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106004_USAGE','geodetic_datum','ESRI','106004','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37004','GCS_Fischer_Modified',NULL,'geographic 2D','EPSG','6422','ESRI','106004',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37004_USAGE','geodetic_crs','ESRI','37004','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106005','D_Hough_1960','Hough 1960','EPSG','7053','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106005_USAGE','geodetic_datum','ESRI','106005','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37005','GCS_Hough_1960',NULL,'geographic 2D','EPSG','6422','ESRI','106005',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37005_USAGE','geodetic_crs','ESRI','37005','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106006','D_Everest_Modified_1969','Everest modified 1969','EPSG','7056','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106006_USAGE','geodetic_datum','ESRI','106006','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37006','GCS_Everest_Modified_1969',NULL,'geographic 2D','EPSG','6422','ESRI','106006',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37006_USAGE','geodetic_crs','ESRI','37006','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106007','D_Walbeck','Walbeck','ESRI','107007','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106007_USAGE','geodetic_datum','ESRI','106007','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37007','GCS_Walbeck',NULL,'geographic 2D','EPSG','6422','ESRI','106007',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37007_USAGE','geodetic_crs','ESRI','37007','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106008','D_Sphere_ARC_INFO','Authalic sphere (ARC/INFO)','ESRI','107008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106008_USAGE','geodetic_datum','ESRI','106008','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37008','GCS_Sphere_ARC_INFO',NULL,'geographic 2D','EPSG','6422','ESRI','106008',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37008_USAGE','geodetic_crs','ESRI','37008','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106201','D_European_1979','European 1979','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106201_USAGE','geodetic_datum','ESRI','106201','EPSG','1297','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37201','GCS_European_1979',NULL,'geographic 2D','EPSG','6422','ESRI','106201',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37201_USAGE','geodetic_crs','ESRI','37201','EPSG','1297','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37201','EPSG','4668','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106202','D_Everest_Bangladesh','Everest - Bangladesh','EPSG','7015','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106202_USAGE','geodetic_datum','ESRI','106202','EPSG','1041','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37202','GCS_Everest_Bangladesh',NULL,'geographic 2D','EPSG','6422','ESRI','106202',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37202_USAGE','geodetic_crs','ESRI','37202','EPSG','1041','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106203','D_Everest_India_Nepal','Everest - India and Nepal','EPSG','7044','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106203_USAGE','geodetic_datum','ESRI','106203','EPSG','1121','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37203','GCS_Everest_India_Nepal',NULL,'geographic 2D','EPSG','6422','ESRI','106203',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37203_USAGE','geodetic_crs','ESRI','37203','EPSG','1121','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106204','D_Hjorsey_1955','Hjorsey 1955','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106204_USAGE','geodetic_datum','ESRI','106204','EPSG','3262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37204','GCS_Hjorsey_1955',NULL,'geographic 2D','EPSG','6422','ESRI','106204',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37204_USAGE','geodetic_crs','ESRI','37204','EPSG','3262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37204','EPSG','4658','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106205','D_Hong_Kong_1963_67','Hong Kong 1963(67)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106205_USAGE','geodetic_datum','ESRI','106205','EPSG','1118','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37205','GCS_Hong_Kong_1963_67',NULL,'geographic 2D','EPSG','6422','ESRI','106205',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37205_USAGE','geodetic_crs','ESRI','37205','EPSG','1118','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37205','EPSG','4739','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106206','D_Oman','Oman','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106206_USAGE','geodetic_datum','ESRI','106206','EPSG','1183','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37206','GCS_Oman',NULL,'geographic 2D','EPSG','6422','ESRI','106206',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37206_USAGE','geodetic_crs','ESRI','37206','EPSG','1183','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106207','D_South_Asia_Singapore','South Asia Singapore','ESRI','107004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106207_USAGE','geodetic_datum','ESRI','106207','EPSG','1210','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37207','GCS_South_Asia_Singapore',NULL,'geographic 2D','EPSG','6422','ESRI','106207',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37207_USAGE','geodetic_crs','ESRI','37207','EPSG','1210','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106208','D_Ayabelle','Ayabelle Lighthouse','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106208_USAGE','geodetic_datum','ESRI','106208','EPSG','1081','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37208','GCS_Ayabelle',NULL,'geographic 2D','EPSG','6422','ESRI','106208',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37208_USAGE','geodetic_crs','ESRI','37208','EPSG','1081','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37208','EPSG','4713','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106211','D_Point_58','Point 58','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106211_USAGE','geodetic_datum','ESRI','106211','EPSG','2790','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37211','GCS_Point_58',NULL,'geographic 2D','EPSG','6422','ESRI','106211',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37211_USAGE','geodetic_crs','ESRI','37211','EPSG','2790','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37211','EPSG','4620','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106212','D_Beacon_E_1945','Astro Beacon E 1945 (Iwo Jima 1945)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106212_USAGE','geodetic_datum','ESRI','106212','EPSG','3200','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37212','GCS_Beacon_E_1945',NULL,'geographic 2D','EPSG','6422','ESRI','106212',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37212_USAGE','geodetic_crs','ESRI','37212','EPSG','3200','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37212','EPSG','4709','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106213','D_Tern_Island_1961','Tern Island Astro 1961','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106213_USAGE','geodetic_datum','ESRI','106213','EPSG','3181','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37213','GCS_Tern_Island_1961',NULL,'geographic 2D','EPSG','6422','ESRI','106213',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37213_USAGE','geodetic_crs','ESRI','37213','EPSG','3181','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37213','EPSG','4707','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106214','D_Astro_1952','Astronomical Station 1952 (Marcus Island 1952 )','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106214_USAGE','geodetic_datum','ESRI','106214','EPSG','1872','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37214','GCS_Astro_1952',NULL,'geographic 2D','EPSG','6422','ESRI','106214',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37214_USAGE','geodetic_crs','ESRI','37214','EPSG','1872','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37214','EPSG','4711','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106215','D_Bellevue_IGN','Bellevue IGN','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106215_USAGE','geodetic_datum','ESRI','106215','EPSG','3193','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37215','GCS_Bellevue_IGN',NULL,'geographic 2D','EPSG','6422','ESRI','106215',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37215_USAGE','geodetic_crs','ESRI','37215','EPSG','3193','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37215','EPSG','4714','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106216','D_Canton_1966','Canton Astro 1966 (Phoenix Islands 1966)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106216_USAGE','geodetic_datum','ESRI','106216','EPSG','3196','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37216','GCS_Canton_1966',NULL,'geographic 2D','EPSG','6422','ESRI','106216',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37216_USAGE','geodetic_crs','ESRI','37216','EPSG','3196','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37216','EPSG','4716','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106217','D_Chatham_Island_1971','Chatham Island Astro 1971','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106217_USAGE','geodetic_datum','ESRI','106217','EPSG','2889','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37217','GCS_Chatham_Island_1971',NULL,'geographic 2D','EPSG','6422','ESRI','106217',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37217_USAGE','geodetic_crs','ESRI','37217','EPSG','2889','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37217','EPSG','4672','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106218','D_DOS_1968','DOS 1968','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106218_USAGE','geodetic_datum','ESRI','106218','EPSG','3198','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37218','GCS_DOS_1968',NULL,'geographic 2D','EPSG','6422','ESRI','106218',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37218_USAGE','geodetic_crs','ESRI','37218','EPSG','3198','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106219','D_Easter_Island_1967','Easter Island 1967','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106219_USAGE','geodetic_datum','ESRI','106219','EPSG','3188','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37219','GCS_Easter_Island_1967',NULL,'geographic 2D','EPSG','6422','ESRI','106219',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37219_USAGE','geodetic_crs','ESRI','37219','EPSG','3188','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37219','EPSG','4719','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106220','D_Guam_1963','Guam 1963','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106220_USAGE','geodetic_datum','ESRI','106220','EPSG','4167','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37220','GCS_Guam_1963',NULL,'geographic 2D','EPSG','6422','ESRI','106220',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37220_USAGE','geodetic_crs','ESRI','37220','EPSG','4167','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37220','EPSG','4675','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106221','D_GUX_1','GUX 1 Astro','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106221_USAGE','geodetic_datum','ESRI','106221','EPSG','3197','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37221','GCS_GUX_1',NULL,'geographic 2D','EPSG','6422','ESRI','106221',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37221_USAGE','geodetic_crs','ESRI','37221','EPSG','3197','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106222','D_Johnston_Island_1961','Johnston Island 1961','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106222_USAGE','geodetic_datum','ESRI','106222','EPSG','3201','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37222','GCS_Johnston_Island_1961',NULL,'geographic 2D','EPSG','6422','ESRI','106222',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37222_USAGE','geodetic_crs','ESRI','37222','EPSG','3201','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37222','EPSG','4725','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','37223','GCS_Carthage',NULL,'geographic 2D','EPSG','6422','EPSG','6223',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37223_USAGE','geodetic_crs','ESRI','37223','EPSG','1236','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37223','EPSG','4223','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106224','D_Midway_1961','Midway Astro 1961','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106224_USAGE','geodetic_datum','ESRI','106224','EPSG','3202','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37224','GCS_Midway_1961',NULL,'geographic 2D','EPSG','6422','ESRI','106224',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37224_USAGE','geodetic_crs','ESRI','37224','EPSG','3202','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37224','EPSG','4727','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','37225','GCS_Carthage_Grad',NULL,'geographic 2D','EPSG','6403','EPSG','6223',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37225_USAGE','geodetic_crs','ESRI','37225','EPSG','1236','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106226','D_Pitcairn_1967','Pitcairn Astro 1967','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106226_USAGE','geodetic_datum','ESRI','106226','EPSG','3208','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37226','GCS_Pitcairn_1967',NULL,'geographic 2D','EPSG','6422','ESRI','106226',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37226_USAGE','geodetic_crs','ESRI','37226','EPSG','3208','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37226','EPSG','4729','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106227','D_Santo_DOS_1965','Santo DOS 1965','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106227_USAGE','geodetic_datum','ESRI','106227','EPSG','3194','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37227','GCS_Santo_DOS_1965',NULL,'geographic 2D','EPSG','6422','ESRI','106227',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37227_USAGE','geodetic_crs','ESRI','37227','EPSG','3194','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37227','EPSG','4730','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106228','D_Viti_Levu_1916','Viti Levu 1916','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106228_USAGE','geodetic_datum','ESRI','106228','EPSG','3195','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37228','GCS_Viti_Levu_1916',NULL,'geographic 2D','EPSG','6422','ESRI','106228',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37228_USAGE','geodetic_crs','ESRI','37228','EPSG','3195','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106229','D_Wake_Eniwetok_1960','Wake-Eniwetok 1960 (Marshall Islands 1960)','EPSG','7053','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106229_USAGE','geodetic_datum','ESRI','106229','EPSG','3191','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37229','GCS_Wake_Eniwetok_1960',NULL,'geographic 2D','EPSG','6422','ESRI','106229',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37229_USAGE','geodetic_crs','ESRI','37229','EPSG','3191','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37229','EPSG','4732','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106230','D_Wake_Island_1952','Wake Island Astro 1952','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106230_USAGE','geodetic_datum','ESRI','106230','EPSG','3190','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37230','GCS_Wake_Island_1952',NULL,'geographic 2D','EPSG','6422','ESRI','106230',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37230_USAGE','geodetic_crs','ESRI','37230','EPSG','3190','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37230','EPSG','4733','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106231','D_Anna_1_1965','Anna 1 Astro 1965 (Cocos Islands 1965)','EPSG','7003','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106231_USAGE','geodetic_datum','ESRI','106231','EPSG','1069','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37231','GCS_Anna_1_1965',NULL,'geographic 2D','EPSG','6422','ESRI','106231',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37231_USAGE','geodetic_crs','ESRI','37231','EPSG','1069','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37231','EPSG','4708','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106232','D_Gan_1970','Gan 1970','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106232_USAGE','geodetic_datum','ESRI','106232','EPSG','3274','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37232','GCS_Gan_1970',NULL,'geographic 2D','EPSG','6422','ESRI','106232',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37232_USAGE','geodetic_crs','ESRI','37232','EPSG','3274','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37232','EPSG','4684','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106233','D_ISTS_073_1969','ISTS 073 Astro 1969 (Diego Garcia 1969)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106233_USAGE','geodetic_datum','ESRI','106233','EPSG','3189','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37233','GCS_ISTS_073_1969',NULL,'geographic 2D','EPSG','6422','ESRI','106233',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37233_USAGE','geodetic_crs','ESRI','37233','EPSG','3189','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37233','EPSG','4724','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106234','D_Kerguelen_Island_1949','Kerguelen Island 1949','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106234_USAGE','geodetic_datum','ESRI','106234','EPSG','2816','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37234','GCS_Kerguelen_Island_1949',NULL,'geographic 2D','EPSG','6422','ESRI','106234',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37234_USAGE','geodetic_crs','ESRI','37234','EPSG','2816','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37234','EPSG','4698','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106235','D_Reunion_1947','Reunion 1947','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106235_USAGE','geodetic_datum','ESRI','106235','EPSG','3337','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37235','GCS_Reunion_1947',NULL,'geographic 2D','EPSG','6422','ESRI','106235',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37235_USAGE','geodetic_crs','ESRI','37235','EPSG','3337','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37235','EPSG','4626','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106237','D_Ascension_Island_1958','Ascension Island 1958','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106237_USAGE','geodetic_datum','ESRI','106237','EPSG','3182','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37237','GCS_Ascension_Island_1958',NULL,'geographic 2D','EPSG','6422','ESRI','106237',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37237_USAGE','geodetic_crs','ESRI','37237','EPSG','3182','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37237','EPSG','4712','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106238','D_DOS_71_4','Astro DOS 71/4 (St. Helena 1971)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106238_USAGE','geodetic_datum','ESRI','106238','EPSG','3183','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37238','GCS_DOS_71_4',NULL,'geographic 2D','EPSG','6422','ESRI','106238',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37238_USAGE','geodetic_crs','ESRI','37238','EPSG','3183','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37238','EPSG','4710','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106239','D_Cape_Canaveral','Cape Canaveral','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106239_USAGE','geodetic_datum','ESRI','106239','EPSG','3206','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37239','GCS_Cape_Canaveral',NULL,'geographic 2D','EPSG','6422','ESRI','106239',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37239_USAGE','geodetic_crs','ESRI','37239','EPSG','3206','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37239','EPSG','4717','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106240','D_Fort_Thomas_1955','Fort Thomas 1955','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106240_USAGE','geodetic_datum','ESRI','106240','EPSG','1200','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37240','GCS_Fort_Thomas_1955',NULL,'geographic 2D','EPSG','6422','ESRI','106240',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37240_USAGE','geodetic_crs','ESRI','37240','EPSG','1200','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106241','D_Graciosa_Base_SW_1948','Graciosa Base SW 1948','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106241_USAGE','geodetic_datum','ESRI','106241','EPSG','1301','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37241','GCS_Graciosa_Base_SW_1948',NULL,'geographic 2D','EPSG','6422','ESRI','106241',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37241_USAGE','geodetic_crs','ESRI','37241','EPSG','1301','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106242','D_ISTS_061_1968','ISTS 061 Astro 1968 (South Georgia 1968)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106242_USAGE','geodetic_datum','ESRI','106242','EPSG','3529','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37242','GCS_ISTS_061_1968',NULL,'geographic 2D','EPSG','6422','ESRI','106242',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37242_USAGE','geodetic_crs','ESRI','37242','EPSG','3529','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37242','EPSG','4722','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106243','D_LC5_1961','L.C. 5 Astro 1961','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106243_USAGE','geodetic_datum','ESRI','106243','EPSG','3186','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37243','GCS_LC5_1961',NULL,'geographic 2D','EPSG','6422','ESRI','106243',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37243_USAGE','geodetic_crs','ESRI','37243','EPSG','3186','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106245','D_Observatorio_Meteorologico_1939','Observ. Meteorologico 1939','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106245_USAGE','geodetic_datum','ESRI','106245','EPSG','1344','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37245','GCS_Observatorio_Meteorologico_1939',NULL,'geographic 2D','EPSG','6422','ESRI','106245',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37245_USAGE','geodetic_crs','ESRI','37245','EPSG','1344','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106246','D_Pico_de_Las_Nieves','Pico de Las Nieves','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106246_USAGE','geodetic_datum','ESRI','106246','EPSG','3873','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37246','GCS_Pico_de_Las_Nieves',NULL,'geographic 2D','EPSG','6422','ESRI','106246',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37246_USAGE','geodetic_crs','ESRI','37246','EPSG','3873','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37246','EPSG','4728','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106247','D_Porto_Santo_1936','Porto Santo 1936','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106247_USAGE','geodetic_datum','ESRI','106247','EPSG','1314','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37247','GCS_Porto_Santo_1936',NULL,'geographic 2D','EPSG','6422','ESRI','106247',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37247_USAGE','geodetic_crs','ESRI','37247','EPSG','1314','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37247','EPSG','4615','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106249','D_Sao_Braz','Sao Braz','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106249_USAGE','geodetic_datum','ESRI','106249','EPSG','1345','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37249','GCS_Sao_Braz',NULL,'geographic 2D','EPSG','6422','ESRI','106249',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37249_USAGE','geodetic_crs','ESRI','37249','EPSG','1345','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106250','D_Selvagem_Grande_1938','Selvagem Grande 1938','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106250_USAGE','geodetic_datum','ESRI','106250','EPSG','2779','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37250','GCS_Selvagem_Grande_1938',NULL,'geographic 2D','EPSG','6422','ESRI','106250',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37250_USAGE','geodetic_crs','ESRI','37250','EPSG','2779','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37250','EPSG','4616','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106251','D_Tristan_1968','Tristan Astro 1968','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106251_USAGE','geodetic_datum','ESRI','106251','EPSG','3184','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37251','GCS_Tristan_1968',NULL,'geographic 2D','EPSG','6422','ESRI','106251',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37251_USAGE','geodetic_crs','ESRI','37251','EPSG','3184','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37251','EPSG','4734','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106252','D_American_Samoa_1962','American Samoa 1962','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106252_USAGE','geodetic_datum','ESRI','106252','EPSG','3109','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37252','GCS_American_Samoa_1962',NULL,'geographic 2D','EPSG','6422','ESRI','106252',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37252_USAGE','geodetic_crs','ESRI','37252','EPSG','3109','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37252','EPSG','4169','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106253','D_Camp_Area','Camp Area Astro','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106253_USAGE','geodetic_datum','ESRI','106253','EPSG','3205','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37253','GCS_Camp_Area',NULL,'geographic 2D','EPSG','6422','ESRI','106253',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37253_USAGE','geodetic_crs','ESRI','37253','EPSG','3205','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37253','EPSG','4715','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106254','D_Deception_Island','Deception Island','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106254_USAGE','geodetic_datum','ESRI','106254','EPSG','3204','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37254','GCS_Deception_Island',NULL,'geographic 2D','EPSG','6422','ESRI','106254',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37254_USAGE','geodetic_crs','ESRI','37254','EPSG','3204','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37254','EPSG','4736','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106255','D_Gunung_Segara','Gunung Segara','EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106255_USAGE','geodetic_datum','ESRI','106255','EPSG','1360','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37255','GCS_Gunung_Segara',NULL,'geographic 2D','EPSG','6422','ESRI','106255',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37255_USAGE','geodetic_crs','ESRI','37255','EPSG','1360','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37255','EPSG','4613','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106257','D_S42_Hungary','S-42 Hungary','EPSG','7024','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106257_USAGE','geodetic_datum','ESRI','106257','EPSG','1119','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37257','GCS_S42_Hungary',NULL,'geographic 2D','EPSG','6422','ESRI','106257',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37257_USAGE','geodetic_crs','ESRI','37257','EPSG','1119','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106259','D_Kusaie_1951','Kusaie Astro 1951','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106259_USAGE','geodetic_datum','ESRI','106259','EPSG','3192','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37259','GCS_Kusaie_1951',NULL,'geographic 2D','EPSG','6422','ESRI','106259',NULL,1); INSERT INTO "usage" VALUES('ESRI', '37259_USAGE','geodetic_crs','ESRI','37259','EPSG','3192','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','37259','EPSG','4735','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106260','D_Alaskan_Islands','Alaskan Islands','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106260_USAGE','geodetic_datum','ESRI','106260','EPSG','1330','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','37260','GCS_Alaskan_Islands',NULL,'geographic 2D','EPSG','6422','ESRI','106260',NULL,0); INSERT INTO "usage" VALUES('ESRI', '37260_USAGE','geodetic_crs','ESRI','37260','EPSG','1330','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104000','GCS_Assumed_Geographic_1',NULL,'geographic 2D','EPSG','6422','EPSG','6267',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104000_USAGE','geodetic_crs','ESRI','104000','EPSG','1263','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106009','D_Kyrgyz_Republic_2006','Kyrgyz Republic 2006','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106009_USAGE','geodetic_datum','ESRI','106009','EPSG','1137','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104009','GCS_Kyrg-06',NULL,'geographic 2D','EPSG','6422','ESRI','106009',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104009_USAGE','geodetic_crs','ESRI','104009','EPSG','1137','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104009','EPSG','7686','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104010','GCS_IGS08',NULL,'geographic 2D','EPSG','6422','EPSG','1141',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104010_USAGE','geodetic_crs','ESRI','104010','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104010','EPSG','9014','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104011','WGS_1984_(G730)',NULL,'geographic 2D','EPSG','6422','EPSG','1152',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104011_USAGE','geodetic_crs','ESRI','104011','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104011','EPSG','9053','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104012','WGS_1984_(G873)',NULL,'geographic 2D','EPSG','6422','EPSG','1153',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104012_USAGE','geodetic_crs','ESRI','104012','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104012','EPSG','9054','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104013','WGS_1984_(G1150)',NULL,'geographic 2D','EPSG','6422','EPSG','1154',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104013_USAGE','geodetic_crs','ESRI','104013','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104013','EPSG','9055','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104014','WGS_1984_(G1674)',NULL,'geographic 2D','EPSG','6422','EPSG','1155',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104014_USAGE','geodetic_crs','ESRI','104014','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104014','EPSG','9056','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104015','WGS_1984_(G1762)',NULL,'geographic 2D','EPSG','6422','EPSG','1156',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104015_USAGE','geodetic_crs','ESRI','104015','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104015','EPSG','9057','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104016','WGS_1984_(Transit)',NULL,'geographic 2D','EPSG','6422','EPSG','1166',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104016_USAGE','geodetic_crs','ESRI','104016','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104016','EPSG','8888','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104017','PZ-90.02',NULL,'geographic 2D','EPSG','6422','EPSG','1157',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104017_USAGE','geodetic_crs','ESRI','104017','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104017','EPSG','9474','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104018','PZ-90.11',NULL,'geographic 2D','EPSG','6422','EPSG','1158',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104018_USAGE','geodetic_crs','ESRI','104018','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104018','EPSG','9475','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104019','ITRF2014',NULL,'geographic 2D','EPSG','6422','EPSG','1165',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104019_USAGE','geodetic_crs','ESRI','104019','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104019','EPSG','9000','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106020','D_JGD_2011','Japan Geodetic Datum 2011','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106020_USAGE','geodetic_datum','ESRI','106020','EPSG','1129','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104020','GCS_JGD_2011',NULL,'geographic 2D','EPSG','6422','ESRI','106020',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104020_USAGE','geodetic_crs','ESRI','104020','EPSG','1129','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104020','EPSG','6668','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104021','IGS14',NULL,'geographic 2D','EPSG','6422','EPSG','1191',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104021_USAGE','geodetic_crs','ESRI','104021','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104021','EPSG','9019','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106010','Georgia_Geodetic_Datum','Georgia Geodetic Datum - ITRF2008/IGS08','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106010_USAGE','geodetic_datum','ESRI','106010','EPSG','3251','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104022','GGD',NULL,'geographic 2D','EPSG','6422','ESRI','106010',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104022_USAGE','geodetic_crs','ESRI','104022','EPSG','3251','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','6023','D_International_1967','International 1967','ESRI','7023','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '6023_USAGE','geodetic_datum','ESRI','6023','EPSG','1263','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104023','GCS_International_1967',NULL,'geographic 2D','EPSG','6422','ESRI','6023',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104023_USAGE','geodetic_crs','ESRI','104023','EPSG','1263','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','1','USA - California and borders of NV, AZ, OR and MX','USA - California and borders of NV, AZ, OR and MX',32.25,42.53,-124.45,-113.6,0); INSERT INTO "geodetic_datum" VALUES('ESRI','106012','California_SRS_Epoch_2017.50_(NAD83)','California SRS Epoch 2017.5 (NAD83)','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106012_USAGE','geodetic_datum','ESRI','106012','ESRI','1','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104024','California_SRS_Epoch_2017.50_(NAD83)',NULL,'geographic 2D','EPSG','6422','ESRI','106012',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104024_USAGE','geodetic_crs','ESRI','104024','ESRI','1','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104025','GCS_Voirol_Unifie_1960_Paris',NULL,'geographic 2D','EPSG','6403','ESRI','106011',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104025_USAGE','geodetic_crs','ESRI','104025','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106011_Greenwich','D_Voirol_Unifie_1960','Voirol Unifie 1960','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106011_Greenwich_USAGE','geodetic_datum','ESRI','106011_Greenwich','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104026','GCS_Voirol_Unifie_1960',NULL,'geographic 2D','EPSG','6403','ESRI','106011_Greenwich',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104026_USAGE','geodetic_crs','ESRI','104026','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106027','Oman_National_Geodetic_Datum_2017','Oman National Geodetic Datum 2017','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106027_USAGE','geodetic_datum','ESRI','106027','EPSG','1183','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104027','ONGD17',NULL,'geographic 2D','EPSG','6422','ESRI','106027',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104027_USAGE','geodetic_crs','ESRI','104027','EPSG','1183','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104027','EPSG','9294','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106028','Geocentric_Datum_of_Mauritius_2008','Geocentric Datum of Mauritius 2008','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106028_USAGE','geodetic_datum','ESRI','106028','EPSG','1158','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104028','GDM2008',NULL,'geographic 2D','EPSG','6422','ESRI','106028',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104028_USAGE','geodetic_crs','ESRI','104028','EPSG','1158','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106047','D_Sphere_GRS_1980_Mean_Radius','GRS 1980 Mean Radius Sphere','ESRI','107047','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106047_USAGE','geodetic_datum','ESRI','106047','EPSG','1263','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104047','GCS_Sphere_GRS_1980_Mean_Radius',NULL,'geographic 2D','EPSG','6422','ESRI','106047',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104047_USAGE','geodetic_crs','ESRI','104047','EPSG','1263','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','2','UK - London','UK - London',51.2,51.8,-0.7,0.6,0); INSERT INTO "geodetic_datum" VALUES('ESRI','106050','D_Xrail84','Xrail84','EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106050_USAGE','geodetic_datum','ESRI','106050','ESRI','2','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104050','GCS_Xrail84',NULL,'geographic 2D','EPSG','6422','ESRI','106050',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104050_USAGE','geodetic_crs','ESRI','104050','ESRI','2','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106100','D_GDBD2009','GDBD2009','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106100_USAGE','geodetic_datum','ESRI','106100','EPSG','1055','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104100','GCS_GDBD2009',NULL,'geographic 2D','EPSG','6422','ESRI','106100',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104100_USAGE','geodetic_crs','ESRI','104100','EPSG','1055','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104100','EPSG','5246','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106101','D_Estonia_1937','Estonia 1937','EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106101_USAGE','geodetic_datum','ESRI','106101','EPSG','1090','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104101','GCS_Estonia_1937',NULL,'geographic 2D','EPSG','6422','ESRI','106101',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104101_USAGE','geodetic_crs','ESRI','104101','EPSG','1090','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106102','D_Hermannskogel','Hermannskogel','EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106102_USAGE','geodetic_datum','ESRI','106102','EPSG','1321','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104102','GCS_Hermannskogel',NULL,'geographic 2D','EPSG','6422','ESRI','106102',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104102_USAGE','geodetic_crs','ESRI','104102','EPSG','1321','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106103','D_Sierra_Leone_1960','Sierra Leone 1960','EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106103_USAGE','geodetic_datum','ESRI','106103','EPSG','1209','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104103','GCS_Sierra_Leone_1960',NULL,'geographic 2D','EPSG','6422','ESRI','106103',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104103_USAGE','geodetic_crs','ESRI','104103','EPSG','1209','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106261','D_Hong_Kong_1980','Hong Kong 1980','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106261_USAGE','geodetic_datum','ESRI','106261','EPSG','1118','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104104','GCS_Hong_Kong_1980',NULL,'geographic 2D','EPSG','6422','ESRI','106261',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104104_USAGE','geodetic_crs','ESRI','104104','EPSG','1118','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104104','EPSG','4611','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106262','D_Datum_Lisboa_Bessel','Datum Lisboa Bessel','EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106262_USAGE','geodetic_datum','ESRI','106262','EPSG','1193','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104105','GCS_Datum_Lisboa_Bessel',NULL,'geographic 2D','EPSG','6422','ESRI','106262',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104105_USAGE','geodetic_crs','ESRI','104105','EPSG','1193','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106263','D_Datum_Lisboa_Hayford','Datum Lisboa Hayford','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106263_USAGE','geodetic_datum','ESRI','106263','EPSG','1193','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104106','GCS_Datum_Lisboa_Hayford',NULL,'geographic 2D','EPSG','6422','ESRI','106263',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104106_USAGE','geodetic_crs','ESRI','104106','EPSG','1193','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106264','D_RGF_1993','Reseau Geodesique Francais 1993','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106264_USAGE','geodetic_datum','ESRI','106264','EPSG','1096','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104107','GCS_RGF_1993',NULL,'geographic 2D','EPSG','6422','ESRI','106264',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104107_USAGE','geodetic_crs','ESRI','104107','EPSG','1096','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104107','EPSG','4171','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106265','D_NZGD_2000','New Zealand Geodetic Datum 2000','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106265_USAGE','geodetic_datum','ESRI','106265','EPSG','1175','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104108','GCS_NZGD_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106265',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104108_USAGE','geodetic_crs','ESRI','104108','EPSG','1175','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104108','EPSG','4167','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106266','D_Pohnpei','Pohnpei - Fed. States Micronesia','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106266_USAGE','geodetic_datum','ESRI','106266','EPSG','1161','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104109','GCS_Pohnpei',NULL,'geographic 2D','EPSG','6422','ESRI','106266',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104109_USAGE','geodetic_crs','ESRI','104109','EPSG','1161','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106267','D_REGVEN','REGVEN','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106267_USAGE','geodetic_datum','ESRI','106267','EPSG','1251','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104110','GCS_REGVEN',NULL,'geographic 2D','EPSG','6422','ESRI','106267',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104110_USAGE','geodetic_crs','ESRI','104110','EPSG','1251','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104110','EPSG','4189','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106268','D_JGD_2000','Japan Geodetic Datum 2000','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106268_USAGE','geodetic_datum','ESRI','106268','EPSG','1129','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104111','GCS_JGD_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106268',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104111_USAGE','geodetic_crs','ESRI','104111','EPSG','1129','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104111','EPSG','4612','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106269','D_Bab_South','Bab South Astro - Bablethuap Is - Republic of Palau','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106269_USAGE','geodetic_datum','ESRI','106269','EPSG','1185','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104112','GCS_Bab_South',NULL,'geographic 2D','EPSG','6422','ESRI','106269',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104112_USAGE','geodetic_crs','ESRI','104112','EPSG','1185','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106270','D_Majuro','Majuro - Republic of Marshall Is.','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106270_USAGE','geodetic_datum','ESRI','106270','EPSG','1155','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104113','GCS_Majuro',NULL,'geographic 2D','EPSG','6422','ESRI','106270',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104113_USAGE','geodetic_crs','ESRI','104113','EPSG','1155','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106271','D_Bermuda_2000','Bermuda 2000','EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106271_USAGE','geodetic_datum','ESRI','106271','EPSG','1047','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104114','GCS_Bermuda_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106271',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104114_USAGE','geodetic_crs','ESRI','104114','EPSG','1047','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104114','EPSG','4762','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104115','GCS_ITRF_1988',NULL,'geographic 2D','EPSG','6422','EPSG','6647',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104115_USAGE','geodetic_crs','ESRI','104115','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104115','EPSG','8988','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104116','GCS_ITRF_1989',NULL,'geographic 2D','EPSG','6422','EPSG','6648',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104116_USAGE','geodetic_crs','ESRI','104116','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104116','EPSG','8989','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104117','GCS_ITRF_1990',NULL,'geographic 2D','EPSG','6422','EPSG','6649',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104117_USAGE','geodetic_crs','ESRI','104117','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104117','EPSG','8990','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104118','GCS_ITRF_1991',NULL,'geographic 2D','EPSG','6422','EPSG','6650',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104118_USAGE','geodetic_crs','ESRI','104118','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104118','EPSG','8991','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104119','GCS_ITRF_1992',NULL,'geographic 2D','EPSG','6422','EPSG','6651',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104119_USAGE','geodetic_crs','ESRI','104119','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104119','EPSG','8992','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104120','GCS_ITRF_1993',NULL,'geographic 2D','EPSG','6422','EPSG','6652',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104120_USAGE','geodetic_crs','ESRI','104120','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104120','EPSG','8993','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104121','GCS_ITRF_1994',NULL,'geographic 2D','EPSG','6422','EPSG','6653',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104121_USAGE','geodetic_crs','ESRI','104121','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104121','EPSG','8994','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104122','GCS_ITRF_1996',NULL,'geographic 2D','EPSG','6422','EPSG','6654',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104122_USAGE','geodetic_crs','ESRI','104122','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104122','EPSG','8995','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104123','GCS_ITRF_1997',NULL,'geographic 2D','EPSG','6422','EPSG','6655',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104123_USAGE','geodetic_crs','ESRI','104123','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104123','EPSG','8996','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104124','GCS_ITRF_2000',NULL,'geographic 2D','EPSG','6422','EPSG','6656',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104124_USAGE','geodetic_crs','ESRI','104124','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104124','EPSG','8997','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106273','D_Chatham_Islands_1979','Chatham Islands 1979','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106273_USAGE','geodetic_datum','ESRI','106273','EPSG','2889','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104125','GCS_Chatham_Islands_1979',NULL,'geographic 2D','EPSG','6422','ESRI','106273',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104125_USAGE','geodetic_crs','ESRI','104125','EPSG','2889','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104125','EPSG','4673','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106274','D_Observatorio_Meteorologico_1965','Observatorio Meteorologico 1965','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106274_USAGE','geodetic_datum','ESRI','106274','EPSG','1147','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104126','GCS_Observatorio_Meteorologico_1965',NULL,'geographic 2D','EPSG','6422','ESRI','106274',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104126_USAGE','geodetic_crs','ESRI','104126','EPSG','1147','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106275','D_Roma_1940','Roma 1940','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106275_USAGE','geodetic_datum','ESRI','106275','EPSG','3343','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104127','GCS_Roma_1940',NULL,'geographic 2D','EPSG','6422','ESRI','106275',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104127_USAGE','geodetic_crs','ESRI','104127','EPSG','3343','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','3','Europe','Europe',34.0,85.0,-30.0,50.0,0); INSERT INTO "geodetic_datum" VALUES('ESRI','106276','D_Sphere_EMEP','EMEP','ESRI','107009','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106276_USAGE','geodetic_datum','ESRI','106276','ESRI','3','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104128','GCS_Sphere_EMEP',NULL,'geographic 2D','EPSG','6422','ESRI','106276',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104128_USAGE','geodetic_crs','ESRI','104128','ESRI','3','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104129','GCS_EUREF_FIN',NULL,'geographic 2D','EPSG','6422','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104129_USAGE','geodetic_crs','ESRI','104129','EPSG','1095','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106277','D_Jordan','Jordan','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106277_USAGE','geodetic_datum','ESRI','106277','EPSG','1130','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104130','GCS_Jordan',NULL,'geographic 2D','EPSG','6422','ESRI','106277',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104130_USAGE','geodetic_crs','ESRI','104130','EPSG','1130','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106278','D_D48','D48 - Slovenia','EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106278_USAGE','geodetic_datum','ESRI','106278','EPSG','1212','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104131','GCS_D48',NULL,'geographic 2D','EPSG','6422','ESRI','106278',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104131_USAGE','geodetic_crs','ESRI','104131','EPSG','1212','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106279','D_Ocotepeque_1935','Ocotepeque 1935','EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106279_USAGE','geodetic_datum','ESRI','106279','EPSG','3876','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104132','GCS_Ocotepeque_1935',NULL,'geographic 2D','EPSG','6422','ESRI','106279',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104132_USAGE','geodetic_crs','ESRI','104132','EPSG','3876','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104132','EPSG','5451','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106280','D_Jamaica_2001','Jamaica 2001','EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106280_USAGE','geodetic_datum','ESRI','106280','EPSG','1128','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104133','GCS_JAD_2001',NULL,'geographic 2D','EPSG','6422','ESRI','106280',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104133_USAGE','geodetic_crs','ESRI','104133','EPSG','1128','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104133','EPSG','4758','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104134','GCS_MONREF_1997',NULL,'geographic 2D','EPSG','6422','EPSG','6656',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104134_USAGE','geodetic_crs','ESRI','104134','EPSG','1164','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104135','GCS_MSK_1942',NULL,'geographic 2D','EPSG','6422','EPSG','6284',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104135_USAGE','geodetic_crs','ESRI','104135','EPSG','1164','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106281','D_TWD_1967','Taiwan 1967','EPSG','7050','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106281_USAGE','geodetic_datum','ESRI','106281','EPSG','3315','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104136','GCS_TWD_1967',NULL,'geographic 2D','EPSG','6422','ESRI','106281',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104136_USAGE','geodetic_crs','ESRI','104136','EPSG','3315','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104136','EPSG','3821','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106282','D_TWD_1997','Taiwan 1997','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106282_USAGE','geodetic_datum','ESRI','106282','EPSG','1228','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104137','GCS_TWD_1997',NULL,'geographic 2D','EPSG','6422','ESRI','106282',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104137_USAGE','geodetic_crs','ESRI','104137','EPSG','1228','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104137','EPSG','3824','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106284','D_Old_Hawaiian_Intl_1924','Old Hawaiian on Intl_1924 spheroid (NGS)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106284_USAGE','geodetic_datum','ESRI','106284','EPSG','1334','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104138','GCS_Old_Hawaiian_Intl_1924',NULL,'geographic 2D','EPSG','6422','ESRI','106284',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104138_USAGE','geodetic_crs','ESRI','104138','EPSG','1334','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104139','GCS_Voirol_1875_Grad',NULL,'geographic 2D','EPSG','6403','EPSG','6304',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104139_USAGE','geodetic_crs','ESRI','104139','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104140','GCS_Voirol_1879_Grad',NULL,'geographic 2D','EPSG','6403','EPSG','6671',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104140_USAGE','geodetic_crs','ESRI','104140','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106225','D_Cyprus_Geodetic_Reference_System_1993','Cyprus GRS 1993','EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106225_USAGE','geodetic_datum','ESRI','106225','EPSG','3236','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104141','GCS_CGRS_1993',NULL,'geographic 2D','EPSG','6422','ESRI','106225',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104141_USAGE','geodetic_crs','ESRI','104141','EPSG','3236','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104141','EPSG','6311','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106236','D_PTRA08','Portugal - Autonomous Regions (Madeira and Azores Archipelagos)','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106236_USAGE','geodetic_datum','ESRI','106236','EPSG','3670','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104142','GCS_PTRA08',NULL,'geographic 2D','EPSG','6422','ESRI','106236',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104142_USAGE','geodetic_crs','ESRI','104142','EPSG','3670','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104142','EPSG','5013','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106244','D_Costa_Rica_2005','Costa Rica 2005','EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106244_USAGE','geodetic_datum','ESRI','106244','EPSG','1074','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104143','GCS_CR05',NULL,'geographic 2D','EPSG','6422','ESRI','106244',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104143_USAGE','geodetic_crs','ESRI','104143','EPSG','1074','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104143','EPSG','5365','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106144','D_Islands_Network_2004','Islands Network 2004','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106144_USAGE','geodetic_datum','ESRI','106144','EPSG','1120','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104144','GCS_ISN_2004',NULL,'geographic 2D','EPSG','6422','ESRI','106144',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104144_USAGE','geodetic_crs','ESRI','104144','EPSG','1120','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104144','EPSG','5324','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106285','D_NAD_1983_2011','NAD 1983 (2011)','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106285_USAGE','geodetic_datum','ESRI','106285','EPSG','1511','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104145','GCS_NAD_1983_2011',NULL,'geographic 2D','EPSG','6422','ESRI','106285',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104145_USAGE','geodetic_crs','ESRI','104145','EPSG','1511','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104145','EPSG','6318','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104179','ETRF90',NULL,'geographic 2D','EPSG','6422','EPSG','1179',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104179_USAGE','geodetic_crs','ESRI','104179','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104179','EPSG','9060','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104180','ETRF91',NULL,'geographic 2D','EPSG','6422','EPSG','1180',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104180_USAGE','geodetic_crs','ESRI','104180','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104180','EPSG','9061','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104181','ETRF92',NULL,'geographic 2D','EPSG','6422','EPSG','1181',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104181_USAGE','geodetic_crs','ESRI','104181','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104181','EPSG','9062','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104182','ETRF93',NULL,'geographic 2D','EPSG','6422','EPSG','1182',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104182_USAGE','geodetic_crs','ESRI','104182','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104182','EPSG','9063','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104183','ETRF94',NULL,'geographic 2D','EPSG','6422','EPSG','1183',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104183_USAGE','geodetic_crs','ESRI','104183','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104183','EPSG','9064','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104184','ETRF96',NULL,'geographic 2D','EPSG','6422','EPSG','1184',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104184_USAGE','geodetic_crs','ESRI','104184','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104184','EPSG','9065','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104185','ETRF97',NULL,'geographic 2D','EPSG','6422','EPSG','1185',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104185_USAGE','geodetic_crs','ESRI','104185','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104185','EPSG','9066','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104186','ETRF2000',NULL,'geographic 2D','EPSG','6422','EPSG','1186',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104186_USAGE','geodetic_crs','ESRI','104186','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104186','EPSG','9067','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106283','D_WGS_1984_Major_Auxiliary_Sphere','Major auxiliary sphere based on WGS 1984','EPSG','7059','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106283_USAGE','geodetic_datum','ESRI','106283','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104199','GCS_WGS_1984_Major_Auxiliary_Sphere',NULL,'geographic 2D','EPSG','6422','ESRI','106283',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104199_USAGE','geodetic_crs','ESRI','104199','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106223','D_NAD_1983_CORS96','NAD 1983 (CORS96)','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106223_USAGE','geodetic_datum','ESRI','106223','EPSG','1511','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104223','GCS_NAD_1983_CORS96',NULL,'geographic 2D','EPSG','6422','ESRI','106223',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104223_USAGE','geodetic_crs','ESRI','104223','EPSG','1511','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104223','EPSG','6783','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106248','D_MACAO_2008','Macao 2008 (ITRF 2005)','EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106248_USAGE','geodetic_datum','ESRI','106248','EPSG','1147','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104248','GCS_MACAO_2008',NULL,'geographic 2D','EPSG','6422','ESRI','106248',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104248_USAGE','geodetic_crs','ESRI','104248','EPSG','1147','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104248','EPSG','8431','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106256','D_Nepal_Nagarkot','Nepal Nagarkot','EPSG','7015','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106256_USAGE','geodetic_datum','ESRI','106256','EPSG','1171','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104256','GCS_Nepal_Nagarkot',NULL,'geographic 2D','EPSG','6422','ESRI','106256',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104256_USAGE','geodetic_crs','ESRI','104256','EPSG','1171','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104256','EPSG','6207','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104257','GCS_ITRF_2008',NULL,'geographic 2D','EPSG','6422','EPSG','1061',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104257_USAGE','geodetic_crs','ESRI','104257','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104257','EPSG','8999','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106258','D_ETRF_1989','European Terrestrial Ref. Frame 1989','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106258_USAGE','geodetic_datum','ESRI','106258','EPSG','1298','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104258','GCS_ETRF_1989',NULL,'geographic 2D','EPSG','6422','ESRI','106258',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104258_USAGE','geodetic_crs','ESRI','104258','EPSG','1298','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104258','EPSG','9059','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106209','D_NAD_1983_PACP00','NAD 1983 PACP00','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106209_USAGE','geodetic_datum','ESRI','106209','EPSG','4162','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104259','GCS_NAD_1983_PACP00',NULL,'geographic 2D','EPSG','6422','ESRI','106209',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104259_USAGE','geodetic_crs','ESRI','104259','EPSG','4162','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104259','EPSG','9075','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106210','D_NAD_1983_MARP00','NAD 1983 MARP00','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106210_USAGE','geodetic_datum','ESRI','106210','EPSG','4167','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104260','GCS_NAD_1983_MARP00',NULL,'geographic 2D','EPSG','6422','ESRI','106210',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104260_USAGE','geodetic_crs','ESRI','104260','EPSG','4167','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104260','EPSG','9072','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104261','GCS_Merchich',NULL,'geographic 2D','EPSG','6422','EPSG','6261',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104261_USAGE','geodetic_crs','ESRI','104261','EPSG','4581','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104261','EPSG','4261','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106286','D_NAD_1983_MA11','NAD 1983 (MA11) - Marianas Plate 2011','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106286_USAGE','geodetic_datum','ESRI','106286','EPSG','4167','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104286','GCS_NAD_1983_MA11',NULL,'geographic 2D','EPSG','6422','ESRI','106286',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104286_USAGE','geodetic_crs','ESRI','104286','EPSG','4167','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104286','EPSG','6325','ESRI'); INSERT INTO "extent" VALUES('ESRI','4','NAD83 PA11 - US interests Pacific plate','NAD83 PA11 - US interests Pacific plate',-17.56,31.8,151.3,-151.27,0); INSERT INTO "geodetic_datum" VALUES('ESRI','106287','D_NAD_1983_PA11','NAD 1983 (PA11) - Pacific Plate 2011','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106287_USAGE','geodetic_datum','ESRI','106287','ESRI','4','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104287','GCS_NAD_1983_PA11',NULL,'geographic 2D','EPSG','6422','ESRI','106287',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104287_USAGE','geodetic_crs','ESRI','104287','ESRI','4','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104287','EPSG','6322','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104304','GCS_Voirol_1875',NULL,'geographic 2D','EPSG','6422','EPSG','6304',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104304_USAGE','geodetic_crs','ESRI','104304','EPSG','1365','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104304','EPSG','4304','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104305','GCS_Voirol_Unifie_1960_Degree',NULL,'geographic 2D','EPSG','6422','ESRI','106011',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104305_USAGE','geodetic_crs','ESRI','104305','EPSG','1365','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104602','North_American_1983_3D',NULL,'geographic 3D','EPSG','6423','EPSG','6269',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104602_USAGE','geodetic_crs','ESRI','104602','EPSG','1350','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104613','EUREF_FIN_3D',NULL,'geographic 3D','EPSG','6423','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104613_USAGE','geodetic_crs','ESRI','104613','EPSG','1095','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104644','California_SRS_Epoch_2017.50_(NAD83)_3D',NULL,'geographic 3D','EPSG','6423','ESRI','106012',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104644_USAGE','geodetic_crs','ESRI','104644','ESRI','1','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104645','GGD_3D',NULL,'geographic 3D','EPSG','6423','ESRI','106010',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104645_USAGE','geodetic_crs','ESRI','104645','EPSG','3251','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106272','PANAMA08_2011','Panama - ITRF_2008 epoch 2011','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106272_USAGE','geodetic_datum','ESRI','106272','EPSG','1186','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104646','GCS_PANAMA08_2011',NULL,'geographic 2D','EPSG','6422','ESRI','106272',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104646_USAGE','geodetic_crs','ESRI','104646','EPSG','1186','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104647','ONGD17_3D',NULL,'geographic 3D','EPSG','6423','ESRI','106027',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104647_USAGE','geodetic_crs','ESRI','104647','EPSG','1183','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104647','EPSG','9293','ESRI'); INSERT INTO "geodetic_crs" VALUES('ESRI','104648','S-JTSK_[JTSK03]_3D',NULL,'geographic 3D','EPSG','6423','EPSG','1201',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104648_USAGE','geodetic_crs','ESRI','104648','EPSG','1211','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104653','MONREF_1997_3D',NULL,'geographic 3D','EPSG','6423','EPSG','6656',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104653_USAGE','geodetic_crs','ESRI','104653','EPSG','1164','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104664','Nepal_Nagarkot_3D',NULL,'geographic 3D','EPSG','6423','ESRI','106256',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104664_USAGE','geodetic_crs','ESRI','104664','EPSG','1171','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104693','SLD99_3D',NULL,'geographic 3D','EPSG','6423','EPSG','1053',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104693_USAGE','geodetic_crs','ESRI','104693','EPSG','3310','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104696','S_JTSK/05_3D',NULL,'geographic 3D','EPSG','6423','EPSG','1052',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104696_USAGE','geodetic_crs','ESRI','104696','EPSG','1079','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104697','S_JTSK/05_Ferro_3D',NULL,'geographic 3D','EPSG','6423','EPSG','1052',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104697_USAGE','geodetic_crs','ESRI','104697','EPSG','1079','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106700','D_NAD_1983_HARN_Adj_MN_Anoka','NAD 1983 HARN Adj. Minnesota Anoka','ESRI','107700','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106700_USAGE','geodetic_datum','ESRI','106700','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104700','GCS_NAD_1983_HARN_Adj_MN_Anoka',NULL,'geographic 2D','EPSG','6422','ESRI','106700',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104700_USAGE','geodetic_crs','ESRI','104700','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106701','D_NAD_1983_HARN_Adj_MN_Becker','NAD 1983 HARN Adj. Minnesota Becker','ESRI','107701','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106701_USAGE','geodetic_datum','ESRI','106701','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104701','GCS_NAD_1983_HARN_Adj_MN_Becker',NULL,'geographic 2D','EPSG','6422','ESRI','106701',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104701_USAGE','geodetic_crs','ESRI','104701','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106702','D_NAD_1983_HARN_Adj_MN_Beltrami_North','NAD 1983 HARN Adj. Minnesota Beltrami North','ESRI','107702','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106702_USAGE','geodetic_datum','ESRI','106702','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104702','GCS_NAD_1983_HARN_Adj_MN_Beltrami_North',NULL,'geographic 2D','EPSG','6422','ESRI','106702',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104702_USAGE','geodetic_crs','ESRI','104702','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106703','D_NAD_1983_HARN_Adj_MN_Beltrami_South','NAD 1983 HARN Adj. Minnesota Beltrami South','ESRI','107703','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106703_USAGE','geodetic_datum','ESRI','106703','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104703','GCS_NAD_1983_HARN_Adj_MN_Beltrami_South',NULL,'geographic 2D','EPSG','6422','ESRI','106703',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104703_USAGE','geodetic_crs','ESRI','104703','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106704','D_NAD_1983_HARN_Adj_MN_Benton','NAD 1983 HARN Adj. Minnesota Benton','ESRI','107704','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106704_USAGE','geodetic_datum','ESRI','106704','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104704','GCS_NAD_1983_HARN_Adj_MN_Benton',NULL,'geographic 2D','EPSG','6422','ESRI','106704',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104704_USAGE','geodetic_crs','ESRI','104704','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106705','D_NAD_1983_HARN_Adj_MN_Big_Stone','NAD 1983 HARN Adj. Minnesota Big Stone','ESRI','107705','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106705_USAGE','geodetic_datum','ESRI','106705','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104705','GCS_NAD_1983_HARN_Adj_MN_Big_Stone',NULL,'geographic 2D','EPSG','6422','ESRI','106705',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104705_USAGE','geodetic_crs','ESRI','104705','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106706','D_NAD_1983_HARN_Adj_MN_Blue_Earth','NAD 1983 HARN Adj. Minnesota Blue Earth','ESRI','107706','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106706_USAGE','geodetic_datum','ESRI','106706','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104706','GCS_NAD_1983_HARN_Adj_MN_Blue_Earth',NULL,'geographic 2D','EPSG','6422','ESRI','106706',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104706_USAGE','geodetic_crs','ESRI','104706','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106707','D_NAD_1983_HARN_Adj_MN_Brown','NAD 1983 HARN Adj. Minnesota Brown','ESRI','107707','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106707_USAGE','geodetic_datum','ESRI','106707','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104707','GCS_NAD_1983_HARN_Adj_MN_Brown',NULL,'geographic 2D','EPSG','6422','ESRI','106707',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104707_USAGE','geodetic_crs','ESRI','104707','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106708','D_NAD_1983_HARN_Adj_MN_Carlton','NAD 1983 HARN Adj. Minnesota Carlton','ESRI','107708','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106708_USAGE','geodetic_datum','ESRI','106708','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104708','GCS_NAD_1983_HARN_Adj_MN_Carlton',NULL,'geographic 2D','EPSG','6422','ESRI','106708',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104708_USAGE','geodetic_crs','ESRI','104708','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106709','D_NAD_1983_HARN_Adj_MN_Carver','NAD 1983 HARN Adj. Minnesota Carver','ESRI','107709','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106709_USAGE','geodetic_datum','ESRI','106709','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104709','GCS_NAD_1983_HARN_Adj_MN_Carver',NULL,'geographic 2D','EPSG','6422','ESRI','106709',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104709_USAGE','geodetic_crs','ESRI','104709','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106710','D_NAD_1983_HARN_Adj_MN_Cass_North','NAD 1983 HARN Adj. Minnesota Cass North','ESRI','107710','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106710_USAGE','geodetic_datum','ESRI','106710','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104710','GCS_NAD_1983_HARN_Adj_MN_Cass_North',NULL,'geographic 2D','EPSG','6422','ESRI','106710',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104710_USAGE','geodetic_crs','ESRI','104710','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106711','D_NAD_1983_HARN_Adj_MN_Cass_South','NAD 1983 HARN Adj. Minnesota Cass South','ESRI','107711','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106711_USAGE','geodetic_datum','ESRI','106711','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104711','GCS_NAD_1983_HARN_Adj_MN_Cass_South',NULL,'geographic 2D','EPSG','6422','ESRI','106711',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104711_USAGE','geodetic_crs','ESRI','104711','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106712','D_NAD_1983_HARN_Adj_MN_Chippewa','NAD 1983 HARN Adj. Minnesota Chippewa','ESRI','107712','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106712_USAGE','geodetic_datum','ESRI','106712','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104712','GCS_NAD_1983_HARN_Adj_MN_Chippewa',NULL,'geographic 2D','EPSG','6422','ESRI','106712',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104712_USAGE','geodetic_crs','ESRI','104712','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106713','D_NAD_1983_HARN_Adj_MN_Chisago','NAD 1983 HARN Adj. Minnesota Chisago','ESRI','107713','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106713_USAGE','geodetic_datum','ESRI','106713','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104713','GCS_NAD_1983_HARN_Adj_MN_Chisago',NULL,'geographic 2D','EPSG','6422','ESRI','106713',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104713_USAGE','geodetic_crs','ESRI','104713','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106714','D_NAD_1983_HARN_Adj_MN_Cook_North','NAD 1983 HARN Adj. Minnesota Cook North','ESRI','107714','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106714_USAGE','geodetic_datum','ESRI','106714','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104714','GCS_NAD_1983_HARN_Adj_MN_Cook_North',NULL,'geographic 2D','EPSG','6422','ESRI','106714',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104714_USAGE','geodetic_crs','ESRI','104714','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106715','D_NAD_1983_HARN_Adj_MN_Cook_South','NAD 1983 HARN Adj. Minnesota Cook South','ESRI','107715','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106715_USAGE','geodetic_datum','ESRI','106715','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104715','GCS_NAD_1983_HARN_Adj_MN_Cook_South',NULL,'geographic 2D','EPSG','6422','ESRI','106715',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104715_USAGE','geodetic_crs','ESRI','104715','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106716','D_NAD_1983_HARN_Adj_MN_Cottonwood','NAD 1983 HARN Adj. Minnesota Cottonwood','ESRI','107716','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106716_USAGE','geodetic_datum','ESRI','106716','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104716','GCS_NAD_1983_HARN_Adj_MN_Cottonwood',NULL,'geographic 2D','EPSG','6422','ESRI','106716',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104716_USAGE','geodetic_crs','ESRI','104716','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106717','D_NAD_1983_HARN_Adj_MN_Crow_Wing','NAD 1983 HARN Adj. Minnesota Crow Wing','ESRI','107717','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106717_USAGE','geodetic_datum','ESRI','106717','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104717','GCS_NAD_1983_HARN_Adj_MN_Crow_Wing',NULL,'geographic 2D','EPSG','6422','ESRI','106717',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104717_USAGE','geodetic_crs','ESRI','104717','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106718','D_NAD_1983_HARN_Adj_MN_Dakota','NAD 1983 HARN Adj. Minnesota Dakota','ESRI','107718','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106718_USAGE','geodetic_datum','ESRI','106718','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104718','GCS_NAD_1983_HARN_Adj_MN_Dakota',NULL,'geographic 2D','EPSG','6422','ESRI','106718',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104718_USAGE','geodetic_crs','ESRI','104718','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106719','D_NAD_1983_HARN_Adj_MN_Dodge','NAD 1983 HARN Adj. Minnesota Dodge','ESRI','107719','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106719_USAGE','geodetic_datum','ESRI','106719','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104719','GCS_NAD_1983_HARN_Adj_MN_Dodge',NULL,'geographic 2D','EPSG','6422','ESRI','106719',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104719_USAGE','geodetic_crs','ESRI','104719','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106720','D_NAD_1983_HARN_Adj_MN_Douglas','NAD 1983 HARN Adj. Minnesota Douglas','ESRI','107720','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106720_USAGE','geodetic_datum','ESRI','106720','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104720','GCS_NAD_1983_HARN_Adj_MN_Douglas',NULL,'geographic 2D','EPSG','6422','ESRI','106720',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104720_USAGE','geodetic_crs','ESRI','104720','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106721','D_NAD_1983_HARN_Adj_MN_Faribault','NAD 1983 HARN Adj. Minnesota Faribault','ESRI','107721','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106721_USAGE','geodetic_datum','ESRI','106721','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104721','GCS_NAD_1983_HARN_Adj_MN_Faribault',NULL,'geographic 2D','EPSG','6422','ESRI','106721',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104721_USAGE','geodetic_crs','ESRI','104721','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106722','D_NAD_1983_HARN_Adj_MN_Fillmore','NAD 1983 HARN Adj. Minnesota Fillmore','ESRI','107722','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106722_USAGE','geodetic_datum','ESRI','106722','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104722','GCS_NAD_1983_HARN_Adj_MN_Fillmore',NULL,'geographic 2D','EPSG','6422','ESRI','106722',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104722_USAGE','geodetic_crs','ESRI','104722','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106723','D_NAD_1983_HARN_Adj_MN_Freeborn','NAD 1983 HARN Adj. Minnesota Freeborn','ESRI','107723','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106723_USAGE','geodetic_datum','ESRI','106723','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104723','GCS_NAD_1983_HARN_Adj_MN_Freeborn',NULL,'geographic 2D','EPSG','6422','ESRI','106723',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104723_USAGE','geodetic_crs','ESRI','104723','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106724','D_NAD_1983_HARN_Adj_MN_Goodhue','NAD 1983 HARN Adj. Minnesota Goodhue','ESRI','107724','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106724_USAGE','geodetic_datum','ESRI','106724','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104724','GCS_NAD_1983_HARN_Adj_MN_Goodhue',NULL,'geographic 2D','EPSG','6422','ESRI','106724',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104724_USAGE','geodetic_crs','ESRI','104724','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106725','D_NAD_1983_HARN_Adj_MN_Grant','NAD 1983 HARN Adj. Minnesota Grant','ESRI','107725','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106725_USAGE','geodetic_datum','ESRI','106725','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104725','GCS_NAD_1983_HARN_Adj_MN_Grant',NULL,'geographic 2D','EPSG','6422','ESRI','106725',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104725_USAGE','geodetic_crs','ESRI','104725','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106726','D_NAD_1983_HARN_Adj_MN_Hennepin','NAD 1983 HARN Adj. Minnesota Hennepin','ESRI','107726','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106726_USAGE','geodetic_datum','ESRI','106726','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104726','GCS_NAD_1983_HARN_Adj_MN_Hennepin',NULL,'geographic 2D','EPSG','6422','ESRI','106726',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104726_USAGE','geodetic_crs','ESRI','104726','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106727','D_NAD_1983_HARN_Adj_MN_Houston','NAD 1983 HARN Adj. Minnesota Houston','ESRI','107727','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106727_USAGE','geodetic_datum','ESRI','106727','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104727','GCS_NAD_1983_HARN_Adj_MN_Houston',NULL,'geographic 2D','EPSG','6422','ESRI','106727',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104727_USAGE','geodetic_crs','ESRI','104727','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106728','D_NAD_1983_HARN_Adj_MN_Isanti','NAD 1983 HARN Adj. Minnesota Isanti','ESRI','107728','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106728_USAGE','geodetic_datum','ESRI','106728','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104728','GCS_NAD_1983_HARN_Adj_MN_Isanti',NULL,'geographic 2D','EPSG','6422','ESRI','106728',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104728_USAGE','geodetic_crs','ESRI','104728','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106729','D_NAD_1983_HARN_Adj_MN_Itasca_North','NAD 1983 HARN Adj. Minnesota Itasca North','ESRI','107729','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106729_USAGE','geodetic_datum','ESRI','106729','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104729','GCS_NAD_1983_HARN_Adj_MN_Itasca_North',NULL,'geographic 2D','EPSG','6422','ESRI','106729',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104729_USAGE','geodetic_crs','ESRI','104729','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106730','D_NAD_1983_HARN_Adj_MN_Itasca_South','NAD 1983 HARN Adj. Minnesota Itasca South','ESRI','107730','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106730_USAGE','geodetic_datum','ESRI','106730','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104730','GCS_NAD_1983_HARN_Adj_MN_Itasca_South',NULL,'geographic 2D','EPSG','6422','ESRI','106730',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104730_USAGE','geodetic_crs','ESRI','104730','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106731','D_NAD_1983_HARN_Adj_MN_Jackson','NAD 1983 HARN Adj. Minnesota Jackson','ESRI','107731','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106731_USAGE','geodetic_datum','ESRI','106731','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104731','GCS_NAD_1983_HARN_Adj_MN_Jackson',NULL,'geographic 2D','EPSG','6422','ESRI','106731',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104731_USAGE','geodetic_crs','ESRI','104731','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106732','D_NAD_1983_HARN_Adj_MN_Kanabec','NAD 1983 HARN Adj. Minnesota Kanabec','ESRI','107732','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106732_USAGE','geodetic_datum','ESRI','106732','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104732','GCS_NAD_1983_HARN_Adj_MN_Kanabec',NULL,'geographic 2D','EPSG','6422','ESRI','106732',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104732_USAGE','geodetic_crs','ESRI','104732','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106733','D_NAD_1983_HARN_Adj_MN_Kandiyohi','NAD 1983 HARN Adj. Minnesota Kandiyohi','ESRI','107733','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106733_USAGE','geodetic_datum','ESRI','106733','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104733','GCS_NAD_1983_HARN_Adj_MN_Kandiyohi',NULL,'geographic 2D','EPSG','6422','ESRI','106733',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104733_USAGE','geodetic_crs','ESRI','104733','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106734','D_NAD_1983_HARN_Adj_MN_Kittson','NAD 1983 HARN Adj. Minnesota Kittson','ESRI','107734','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106734_USAGE','geodetic_datum','ESRI','106734','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104734','GCS_NAD_1983_HARN_Adj_MN_Kittson',NULL,'geographic 2D','EPSG','6422','ESRI','106734',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104734_USAGE','geodetic_crs','ESRI','104734','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106735','D_NAD_1983_HARN_Adj_MN_Koochiching','NAD 1983 HARN Adj. Minnesota Koochiching','ESRI','107735','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106735_USAGE','geodetic_datum','ESRI','106735','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104735','GCS_NAD_1983_HARN_Adj_MN_Koochiching',NULL,'geographic 2D','EPSG','6422','ESRI','106735',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104735_USAGE','geodetic_crs','ESRI','104735','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106736','D_NAD_1983_HARN_Adj_MN_Lac_Qui_Parle','NAD 1983 HARN Adj. Minnesota Lac Qui Parle','ESRI','107736','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106736_USAGE','geodetic_datum','ESRI','106736','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104736','GCS_NAD_1983_HARN_Adj_MN_Lac_Qui_Parle',NULL,'geographic 2D','EPSG','6422','ESRI','106736',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104736_USAGE','geodetic_crs','ESRI','104736','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106737','D_NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_North','NAD 1983 HARN Adj. Minnesota Lake of the Woods North','ESRI','107737','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106737_USAGE','geodetic_datum','ESRI','106737','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104737','GCS_NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_North',NULL,'geographic 2D','EPSG','6422','ESRI','106737',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104737_USAGE','geodetic_crs','ESRI','104737','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106738','D_NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_South','NAD 1983 HARN Adj. Minnesota Lake of the Woods South','ESRI','107738','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106738_USAGE','geodetic_datum','ESRI','106738','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104738','GCS_NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_South',NULL,'geographic 2D','EPSG','6422','ESRI','106738',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104738_USAGE','geodetic_crs','ESRI','104738','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106739','D_NAD_1983_HARN_Adj_MN_Le_Sueur','NAD 1983 HARN Adj. Minnesota Le Sueur','ESRI','107739','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106739_USAGE','geodetic_datum','ESRI','106739','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104739','GCS_NAD_1983_HARN_Adj_MN_Le_Sueur',NULL,'geographic 2D','EPSG','6422','ESRI','106739',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104739_USAGE','geodetic_crs','ESRI','104739','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106740','D_NAD_1983_HARN_Adj_MN_Lincoln','NAD 1983 HARN Adj. Minnesota Lincoln','ESRI','107740','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106740_USAGE','geodetic_datum','ESRI','106740','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104740','GCS_NAD_1983_HARN_Adj_MN_Lincoln',NULL,'geographic 2D','EPSG','6422','ESRI','106740',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104740_USAGE','geodetic_crs','ESRI','104740','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106741','D_NAD_1983_HARN_Adj_MN_Lyon','NAD 1983 HARN Adj. Minnesota Lyon','ESRI','107741','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106741_USAGE','geodetic_datum','ESRI','106741','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104741','GCS_NAD_1983_HARN_Adj_MN_Lyon',NULL,'geographic 2D','EPSG','6422','ESRI','106741',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104741_USAGE','geodetic_crs','ESRI','104741','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106742','D_NAD_1983_HARN_Adj_MN_McLeod','NAD 1983 HARN Adj. Minnesota McLeod','ESRI','107742','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106742_USAGE','geodetic_datum','ESRI','106742','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104742','GCS_NAD_1983_HARN_Adj_MN_McLeod',NULL,'geographic 2D','EPSG','6422','ESRI','106742',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104742_USAGE','geodetic_crs','ESRI','104742','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106743','D_NAD_1983_HARN_Adj_MN_Mahnomen','NAD 1983 HARN Adj. Minnesota Mahnomen','ESRI','107743','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106743_USAGE','geodetic_datum','ESRI','106743','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104743','GCS_NAD_1983_HARN_Adj_MN_Mahnomen',NULL,'geographic 2D','EPSG','6422','ESRI','106743',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104743_USAGE','geodetic_crs','ESRI','104743','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106744','D_NAD_1983_HARN_Adj_MN_Marshall','NAD 1983 HARN Adj. Minnesota Marshall','ESRI','107744','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106744_USAGE','geodetic_datum','ESRI','106744','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104744','GCS_NAD_1983_HARN_Adj_MN_Marshall',NULL,'geographic 2D','EPSG','6422','ESRI','106744',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104744_USAGE','geodetic_crs','ESRI','104744','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106745','D_NAD_1983_HARN_Adj_MN_Martin','NAD 1983 HARN Adj. Minnesota Martin','ESRI','107745','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106745_USAGE','geodetic_datum','ESRI','106745','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104745','GCS_NAD_1983_HARN_Adj_MN_Martin',NULL,'geographic 2D','EPSG','6422','ESRI','106745',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104745_USAGE','geodetic_crs','ESRI','104745','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106746','D_NAD_1983_HARN_Adj_MN_Meeker','NAD 1983 HARN Adj. Minnesota Meeker','ESRI','107746','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106746_USAGE','geodetic_datum','ESRI','106746','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104746','GCS_NAD_1983_HARN_Adj_MN_Meeker',NULL,'geographic 2D','EPSG','6422','ESRI','106746',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104746_USAGE','geodetic_crs','ESRI','104746','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106747','D_NAD_1983_HARN_Adj_MN_Morrison','NAD 1983 HARN Adj. Minnesota Morrison','ESRI','107747','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106747_USAGE','geodetic_datum','ESRI','106747','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104747','GCS_NAD_1983_HARN_Adj_MN_Morrison',NULL,'geographic 2D','EPSG','6422','ESRI','106747',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104747_USAGE','geodetic_crs','ESRI','104747','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106748','D_NAD_1983_HARN_Adj_MN_Mower','NAD 1983 HARN Adj. Minnesota Mower','ESRI','107748','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106748_USAGE','geodetic_datum','ESRI','106748','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104748','GCS_NAD_1983_HARN_Adj_MN_Mower',NULL,'geographic 2D','EPSG','6422','ESRI','106748',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104748_USAGE','geodetic_crs','ESRI','104748','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106749','D_NAD_1983_HARN_Adj_MN_Murray','NAD 1983 HARN Adj. Minnesota Murray','ESRI','107749','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106749_USAGE','geodetic_datum','ESRI','106749','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104749','GCS_NAD_1983_HARN_Adj_MN_Murray',NULL,'geographic 2D','EPSG','6422','ESRI','106749',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104749_USAGE','geodetic_crs','ESRI','104749','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106750','D_NAD_1983_HARN_Adj_MN_Nicollet','NAD 1983 HARN Adj. Minnesota Nicollet','ESRI','107750','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106750_USAGE','geodetic_datum','ESRI','106750','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104750','GCS_NAD_1983_HARN_Adj_MN_Nicollet',NULL,'geographic 2D','EPSG','6422','ESRI','106750',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104750_USAGE','geodetic_crs','ESRI','104750','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106751','D_NAD_1983_HARN_Adj_MN_Nobles','NAD 1983 HARN Adj. Minnesota Nobles','ESRI','107751','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106751_USAGE','geodetic_datum','ESRI','106751','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104751','GCS_NAD_1983_HARN_Adj_MN_Nobles',NULL,'geographic 2D','EPSG','6422','ESRI','106751',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104751_USAGE','geodetic_crs','ESRI','104751','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106752','D_NAD_1983_HARN_Adj_MN_Norman','NAD 1983 HARN Adj. Minnesota Norman','ESRI','107752','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106752_USAGE','geodetic_datum','ESRI','106752','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104752','GCS_NAD_1983_HARN_Adj_MN_Norman',NULL,'geographic 2D','EPSG','6422','ESRI','106752',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104752_USAGE','geodetic_crs','ESRI','104752','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106753','D_NAD_1983_HARN_Adj_MN_Olmsted','NAD 1983 HARN Adj. Minnesota Olmsted','ESRI','107753','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106753_USAGE','geodetic_datum','ESRI','106753','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104753','GCS_NAD_1983_HARN_Adj_MN_Olmsted',NULL,'geographic 2D','EPSG','6422','ESRI','106753',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104753_USAGE','geodetic_crs','ESRI','104753','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106754','D_NAD_1983_HARN_Adj_MN_Ottertail','NAD 1983 HARN Adj. Minnesota Ottertail','ESRI','107754','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106754_USAGE','geodetic_datum','ESRI','106754','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104754','GCS_NAD_1983_HARN_Adj_MN_Ottertail',NULL,'geographic 2D','EPSG','6422','ESRI','106754',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104754_USAGE','geodetic_crs','ESRI','104754','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106755','D_NAD_1983_HARN_Adj_MN_Pennington','NAD 1983 HARN Adj. Minnesota Pennington','ESRI','107755','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106755_USAGE','geodetic_datum','ESRI','106755','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104755','GCS_NAD_1983_HARN_Adj_MN_Pennington',NULL,'geographic 2D','EPSG','6422','ESRI','106755',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104755_USAGE','geodetic_crs','ESRI','104755','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106756','D_NAD_1983_HARN_Adj_MN_Pine','NAD 1983 HARN Adj. Minnesota Pine','ESRI','107756','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106756_USAGE','geodetic_datum','ESRI','106756','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104756','GCS_NAD_1983_HARN_Adj_MN_Pine',NULL,'geographic 2D','EPSG','6422','ESRI','106756',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104756_USAGE','geodetic_crs','ESRI','104756','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106757','D_NAD_1983_HARN_Adj_MN_Pipestone','NAD 1983 HARN Adj. Minnesota Pipestone','ESRI','107757','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106757_USAGE','geodetic_datum','ESRI','106757','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104757','GCS_NAD_1983_HARN_Adj_MN_Pipestone',NULL,'geographic 2D','EPSG','6422','ESRI','106757',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104757_USAGE','geodetic_crs','ESRI','104757','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106758','D_NAD_1983_HARN_Adj_MN_Polk','NAD 1983 HARN Adj. Minnesota Polk','ESRI','107758','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106758_USAGE','geodetic_datum','ESRI','106758','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104758','GCS_NAD_1983_HARN_Adj_MN_Polk',NULL,'geographic 2D','EPSG','6422','ESRI','106758',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104758_USAGE','geodetic_crs','ESRI','104758','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106759','D_NAD_1983_HARN_Adj_MN_Pope','NAD 1983 HARN Adj. Minnesota Pope','ESRI','107759','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106759_USAGE','geodetic_datum','ESRI','106759','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104759','GCS_NAD_1983_HARN_Adj_MN_Pope',NULL,'geographic 2D','EPSG','6422','ESRI','106759',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104759_USAGE','geodetic_crs','ESRI','104759','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106760','D_NAD_1983_HARN_Adj_MN_Ramsey','NAD 1983 HARN Adj. Minnesota Ramsey','ESRI','107760','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106760_USAGE','geodetic_datum','ESRI','106760','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104760','GCS_NAD_1983_HARN_Adj_MN_Ramsey',NULL,'geographic 2D','EPSG','6422','ESRI','106760',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104760_USAGE','geodetic_crs','ESRI','104760','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106761','D_NAD_1983_HARN_Adj_MN_Red_Lake','NAD 1983 HARN Adj. Minnesota Red Lake','ESRI','107761','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106761_USAGE','geodetic_datum','ESRI','106761','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104761','GCS_NAD_1983_HARN_Adj_MN_Red_Lake',NULL,'geographic 2D','EPSG','6422','ESRI','106761',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104761_USAGE','geodetic_crs','ESRI','104761','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106762','D_NAD_1983_HARN_Adj_MN_Redwood','NAD 1983 HARN Adj. Minnesota Redwood','ESRI','107762','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106762_USAGE','geodetic_datum','ESRI','106762','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104762','GCS_NAD_1983_HARN_Adj_MN_Redwood',NULL,'geographic 2D','EPSG','6422','ESRI','106762',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104762_USAGE','geodetic_crs','ESRI','104762','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106763','D_NAD_1983_HARN_Adj_MN_Renville','NAD 1983 HARN Adj. Minnesota Renville','ESRI','107763','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106763_USAGE','geodetic_datum','ESRI','106763','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104763','GCS_NAD_1983_HARN_Adj_MN_Renville',NULL,'geographic 2D','EPSG','6422','ESRI','106763',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104763_USAGE','geodetic_crs','ESRI','104763','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106764','D_NAD_1983_HARN_Adj_MN_Rice','NAD 1983 HARN Adj. Minnesota Rice','ESRI','107764','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106764_USAGE','geodetic_datum','ESRI','106764','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104764','GCS_NAD_1983_HARN_Adj_MN_Rice',NULL,'geographic 2D','EPSG','6422','ESRI','106764',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104764_USAGE','geodetic_crs','ESRI','104764','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106765','D_NAD_1983_HARN_Adj_MN_Rock','NAD 1983 HARN Adj. Minnesota Rock','ESRI','107765','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106765_USAGE','geodetic_datum','ESRI','106765','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104765','GCS_NAD_1983_HARN_Adj_MN_Rock',NULL,'geographic 2D','EPSG','6422','ESRI','106765',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104765_USAGE','geodetic_crs','ESRI','104765','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106766','D_NAD_1983_HARN_Adj_MN_Roseau','NAD 1983 HARN Adj. Minnesota Roseau','ESRI','107766','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106766_USAGE','geodetic_datum','ESRI','106766','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104766','GCS_NAD_1983_HARN_Adj_MN_Roseau',NULL,'geographic 2D','EPSG','6422','ESRI','106766',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104766_USAGE','geodetic_crs','ESRI','104766','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106767','D_NAD_1983_HARN_Adj_MN_St_Louis_North','NAD 1983 HARN Adj. Minnesota St Louis North','ESRI','107767','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106767_USAGE','geodetic_datum','ESRI','106767','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104767','GCS_NAD_1983_HARN_Adj_MN_St_Louis_North',NULL,'geographic 2D','EPSG','6422','ESRI','106767',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104767_USAGE','geodetic_crs','ESRI','104767','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106768','D_NAD_1983_HARN_Adj_MN_St_Louis_Central','NAD 1983 HARN Adj. Minnesota St Louis Central','ESRI','107768','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106768_USAGE','geodetic_datum','ESRI','106768','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104768','GCS_NAD_1983_HARN_Adj_MN_St_Louis_Central',NULL,'geographic 2D','EPSG','6422','ESRI','106768',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104768_USAGE','geodetic_crs','ESRI','104768','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106769','D_NAD_1983_HARN_Adj_MN_St_Louis_South','NAD 1983 HARN Adj. Minnesota St Louis South','ESRI','107769','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106769_USAGE','geodetic_datum','ESRI','106769','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104769','GCS_NAD_1983_HARN_Adj_MN_St_Louis_South',NULL,'geographic 2D','EPSG','6422','ESRI','106769',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104769_USAGE','geodetic_crs','ESRI','104769','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106770','D_NAD_1983_HARN_Adj_MN_Scott','NAD 1983 HARN Adj. Minnesota Scott','ESRI','107770','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106770_USAGE','geodetic_datum','ESRI','106770','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104770','GCS_NAD_1983_HARN_Adj_MN_Scott',NULL,'geographic 2D','EPSG','6422','ESRI','106770',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104770_USAGE','geodetic_crs','ESRI','104770','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106771','D_NAD_1983_HARN_Adj_MN_Sherburne','NAD 1983 HARN Adj. Minnesota Sherburne','ESRI','107771','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106771_USAGE','geodetic_datum','ESRI','106771','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104771','GCS_NAD_1983_HARN_Adj_MN_Sherburne',NULL,'geographic 2D','EPSG','6422','ESRI','106771',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104771_USAGE','geodetic_crs','ESRI','104771','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106772','D_NAD_1983_HARN_Adj_MN_Sibley','NAD 1983 HARN Adj. Minnesota Sibley','ESRI','107772','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106772_USAGE','geodetic_datum','ESRI','106772','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104772','GCS_NAD_1983_HARN_Adj_MN_Sibley',NULL,'geographic 2D','EPSG','6422','ESRI','106772',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104772_USAGE','geodetic_crs','ESRI','104772','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106773','D_NAD_1983_HARN_Adj_MN_Stearns','NAD 1983 HARN Adj. Minnesota Stearns','ESRI','107773','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106773_USAGE','geodetic_datum','ESRI','106773','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104773','GCS_NAD_1983_HARN_Adj_MN_Stearns',NULL,'geographic 2D','EPSG','6422','ESRI','106773',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104773_USAGE','geodetic_crs','ESRI','104773','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106774','D_NAD_1983_HARN_Adj_MN_Steele','NAD 1983 HARN Adj. Minnesota Steele','ESRI','107774','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106774_USAGE','geodetic_datum','ESRI','106774','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104774','GCS_NAD_1983_HARN_Adj_MN_Steele',NULL,'geographic 2D','EPSG','6422','ESRI','106774',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104774_USAGE','geodetic_crs','ESRI','104774','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106775','D_NAD_1983_HARN_Adj_MN_Stevens','NAD 1983 HARN Adj. Minnesota Stevens','ESRI','107775','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106775_USAGE','geodetic_datum','ESRI','106775','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104775','GCS_NAD_1983_HARN_Adj_MN_Stevens',NULL,'geographic 2D','EPSG','6422','ESRI','106775',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104775_USAGE','geodetic_crs','ESRI','104775','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106776','D_NAD_1983_HARN_Adj_MN_Swift','NAD 1983 HARN Adj. Minnesota Swift','ESRI','107776','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106776_USAGE','geodetic_datum','ESRI','106776','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104776','GCS_NAD_1983_HARN_Adj_MN_Swift',NULL,'geographic 2D','EPSG','6422','ESRI','106776',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104776_USAGE','geodetic_crs','ESRI','104776','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106777','D_NAD_1983_HARN_Adj_MN_Todd','NAD 1983 HARN Adj. Minnesota Todd','ESRI','107777','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106777_USAGE','geodetic_datum','ESRI','106777','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104777','GCS_NAD_1983_HARN_Adj_MN_Todd',NULL,'geographic 2D','EPSG','6422','ESRI','106777',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104777_USAGE','geodetic_crs','ESRI','104777','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106778','D_NAD_1983_HARN_Adj_MN_Traverse','NAD 1983 HARN Adj. Minnesota Traverse','ESRI','107778','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106778_USAGE','geodetic_datum','ESRI','106778','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104778','GCS_NAD_1983_HARN_Adj_MN_Traverse',NULL,'geographic 2D','EPSG','6422','ESRI','106778',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104778_USAGE','geodetic_crs','ESRI','104778','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106779','D_NAD_1983_HARN_Adj_MN_Wabasha','NAD 1983 HARN Adj. Minnesota Wabasha','ESRI','107779','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106779_USAGE','geodetic_datum','ESRI','106779','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104779','GCS_NAD_1983_HARN_Adj_MN_Wabasha',NULL,'geographic 2D','EPSG','6422','ESRI','106779',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104779_USAGE','geodetic_crs','ESRI','104779','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106780','D_NAD_1983_HARN_Adj_MN_Wadena','NAD 1983 HARN Adj. Minnesota Wadena','ESRI','107780','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106780_USAGE','geodetic_datum','ESRI','106780','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104780','GCS_NAD_1983_HARN_Adj_MN_Wadena',NULL,'geographic 2D','EPSG','6422','ESRI','106780',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104780_USAGE','geodetic_crs','ESRI','104780','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106781','D_NAD_1983_HARN_Adj_MN_Waseca','NAD 1983 HARN Adj. Minnesota Waseca','ESRI','107781','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106781_USAGE','geodetic_datum','ESRI','106781','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104781','GCS_NAD_1983_HARN_Adj_MN_Waseca',NULL,'geographic 2D','EPSG','6422','ESRI','106781',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104781_USAGE','geodetic_crs','ESRI','104781','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106782','D_NAD_1983_HARN_Adj_MN_Watonwan','NAD 1983 HARN Adj. Minnesota Watonwan','ESRI','107782','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106782_USAGE','geodetic_datum','ESRI','106782','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104782','GCS_NAD_1983_HARN_Adj_MN_Watonwan',NULL,'geographic 2D','EPSG','6422','ESRI','106782',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104782_USAGE','geodetic_crs','ESRI','104782','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106783','D_NAD_1983_HARN_Adj_MN_Winona','NAD 1983 HARN Adj. Minnesota Winona','ESRI','107783','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106783_USAGE','geodetic_datum','ESRI','106783','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104783','GCS_NAD_1983_HARN_Adj_MN_Winona',NULL,'geographic 2D','EPSG','6422','ESRI','106783',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104783_USAGE','geodetic_crs','ESRI','104783','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106784','D_NAD_1983_HARN_Adj_MN_Wright','NAD 1983 HARN Adj. Minnesota Wright','ESRI','107784','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106784_USAGE','geodetic_datum','ESRI','106784','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104784','GCS_NAD_1983_HARN_Adj_MN_Wright',NULL,'geographic 2D','EPSG','6422','ESRI','106784',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104784_USAGE','geodetic_crs','ESRI','104784','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106785','D_NAD_1983_HARN_Adj_MN_Yellow_Medicine','NAD 1983 HARN Adj. Minnesota Yellow Medicine','ESRI','107785','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106785_USAGE','geodetic_datum','ESRI','106785','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104785','GCS_NAD_1983_HARN_Adj_MN_Yellow_Medicine',NULL,'geographic 2D','EPSG','6422','ESRI','106785',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104785_USAGE','geodetic_crs','ESRI','104785','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106786','D_NAD_1983_HARN_Adj_MN_St_Louis','NAD 1983 HARN Adj. Minnesota St Louis','ESRI','107786','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106786_USAGE','geodetic_datum','ESRI','106786','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104786','GCS_NAD_1983_HARN_Adj_MN_St_Louis',NULL,'geographic 2D','EPSG','6422','ESRI','106786',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104786_USAGE','geodetic_crs','ESRI','104786','EPSG','1392','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106851','D_NAD_1983_HARN_Adj_WI_AD_JN','NAD 1983 HARN Adj. Wisconsin Adams and Juneau','ESRI','107851','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106851_USAGE','geodetic_datum','ESRI','106851','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104800','GCS_NAD_1983_HARN_Adj_WI_Adams',NULL,'geographic 2D','EPSG','6422','ESRI','106851',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104800_USAGE','geodetic_crs','ESRI','104800','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106800','D_NAD_1983_HARN_Adj_WI_AL','NAD 1983 HARN Adj. Wisconsin Ashland','ESRI','107800','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106800_USAGE','geodetic_datum','ESRI','106800','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104801','GCS_NAD_1983_HARN_Adj_WI_Ashland',NULL,'geographic 2D','EPSG','6422','ESRI','106800',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104801_USAGE','geodetic_crs','ESRI','104801','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106801','D_NAD_1983_HARN_Adj_WI_BA','NAD 1983 HARN Adj. Wisconsin Barron','ESRI','107801','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106801_USAGE','geodetic_datum','ESRI','106801','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104802','GCS_NAD_1983_HARN_Adj_WI_Barron',NULL,'geographic 2D','EPSG','6422','ESRI','106801',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104802_USAGE','geodetic_crs','ESRI','104802','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106802','D_NAD_1983_HARN_Adj_WI_BF','NAD 1983 HARN Adj. Wisconsin Bayfield','ESRI','107802','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106802_USAGE','geodetic_datum','ESRI','106802','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104803','GCS_NAD_1983_HARN_Adj_WI_Bayfield',NULL,'geographic 2D','EPSG','6422','ESRI','106802',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104803_USAGE','geodetic_crs','ESRI','104803','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106803','D_NAD_1983_HARN_Adj_WI_BR','NAD 1983 HARN Adj. Wisconsin Brown','ESRI','107803','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106803_USAGE','geodetic_datum','ESRI','106803','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104804','GCS_NAD_1983_HARN_Adj_WI_Brown',NULL,'geographic 2D','EPSG','6422','ESRI','106803',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104804_USAGE','geodetic_crs','ESRI','104804','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106804','D_NAD_1983_HARN_Adj_WI_BU','NAD 1983 HARN Adj. Wisconsin Buffalo','ESRI','107804','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106804_USAGE','geodetic_datum','ESRI','106804','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104805','GCS_NAD_1983_HARN_Adj_WI_Buffalo',NULL,'geographic 2D','EPSG','6422','ESRI','106804',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104805_USAGE','geodetic_crs','ESRI','104805','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106805','D_NAD_1983_HARN_Adj_WI_BN','NAD 1983 HARN Adj. Wisconsin Burnett','ESRI','107805','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106805_USAGE','geodetic_datum','ESRI','106805','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104806','GCS_NAD_1983_HARN_Adj_WI_Burnett',NULL,'geographic 2D','EPSG','6422','ESRI','106805',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104806_USAGE','geodetic_crs','ESRI','104806','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106856','D_NAD_1983_HARN_Adj_WI_CL_FL_OG_WN','NAD 1983 HARN Adj. Wisconsin Calumet, Fond du Lac, Outagamie, and Winnebago','ESRI','107856','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106856_USAGE','geodetic_datum','ESRI','106856','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104807','GCS_NAD_1983_HARN_Adj_WI_Calumet',NULL,'geographic 2D','EPSG','6422','ESRI','106856',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104807_USAGE','geodetic_crs','ESRI','104807','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106806','D_NAD_1983_HARN_Adj_WI_CP','NAD 1983 HARN Adj. Wisconsin Chippewa','ESRI','107806','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106806_USAGE','geodetic_datum','ESRI','106806','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104808','GCS_NAD_1983_HARN_Adj_WI_Chippewa',NULL,'geographic 2D','EPSG','6422','ESRI','106806',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104808_USAGE','geodetic_crs','ESRI','104808','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106807','D_NAD_1983_HARN_Adj_WI_CK','NAD 1983 HARN Adj. Wisconsin Clark','ESRI','107807','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106807_USAGE','geodetic_datum','ESRI','106807','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104809','GCS_NAD_1983_HARN_Adj_WI_Clark',NULL,'geographic 2D','EPSG','6422','ESRI','106807',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104809_USAGE','geodetic_crs','ESRI','104809','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106808','D_NAD_1983_HARN_Adj_WI_CO','NAD 1983 HARN Adj. Wisconsin Columbia','ESRI','107808','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106808_USAGE','geodetic_datum','ESRI','106808','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104810','GCS_NAD_1983_HARN_Adj_WI_Columbia',NULL,'geographic 2D','EPSG','6422','ESRI','106808',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104810_USAGE','geodetic_crs','ESRI','104810','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106809','D_NAD_1983_HARN_Adj_WI_CR','NAD 1983 HARN Adj. Wisconsin Crawford','ESRI','107809','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106809_USAGE','geodetic_datum','ESRI','106809','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104811','GCS_NAD_1983_HARN_Adj_WI_Crawford',NULL,'geographic 2D','EPSG','6422','ESRI','106809',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104811_USAGE','geodetic_crs','ESRI','104811','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106810','D_NAD_1983_HARN_Adj_WI_DN','NAD 1983 HARN Adj. Wisconsin Dane','ESRI','107810','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106810_USAGE','geodetic_datum','ESRI','106810','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104812','GCS_NAD_1983_HARN_Adj_WI_Dane',NULL,'geographic 2D','EPSG','6422','ESRI','106810',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104812_USAGE','geodetic_crs','ESRI','104812','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106854','D_NAD_1983_HARN_Adj_WI_DD_JF','NAD 1983 HARN Adj. Wisconsin Dodge and Jefferson','ESRI','107854','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106854_USAGE','geodetic_datum','ESRI','106854','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104813','GCS_NAD_1983_HARN_Adj_WI_Dodge',NULL,'geographic 2D','EPSG','6422','ESRI','106854',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104813_USAGE','geodetic_crs','ESRI','104813','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106811','D_NAD_1983_HARN_Adj_WI_DR','NAD 1983 HARN Adj. Wisconsin Door','ESRI','107811','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106811_USAGE','geodetic_datum','ESRI','106811','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104814','GCS_NAD_1983_HARN_Adj_WI_Door',NULL,'geographic 2D','EPSG','6422','ESRI','106811',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104814_USAGE','geodetic_crs','ESRI','104814','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106812','D_NAD_1983_HARN_Adj_WI_DG','NAD 1983 HARN Adj. Wisconsin Douglas','ESRI','107812','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106812_USAGE','geodetic_datum','ESRI','106812','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104815','GCS_NAD_1983_HARN_Adj_WI_Douglas',NULL,'geographic 2D','EPSG','6422','ESRI','106812',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104815_USAGE','geodetic_crs','ESRI','104815','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106813','D_NAD_1983_HARN_Adj_WI_DU','NAD 1983 HARN Adj. Wisconsin Dunn','ESRI','107813','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106813_USAGE','geodetic_datum','ESRI','106813','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104816','GCS_NAD_1983_HARN_Adj_WI_Dunn',NULL,'geographic 2D','EPSG','6422','ESRI','106813',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104816_USAGE','geodetic_crs','ESRI','104816','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106814','D_NAD_1983_HARN_Adj_WI_EC','NAD 1983 HARN Adj. Wisconsin EauClaire','ESRI','107814','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106814_USAGE','geodetic_datum','ESRI','106814','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104817','GCS_NAD_1983_HARN_Adj_WI_EauClaire',NULL,'geographic 2D','EPSG','6422','ESRI','106814',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104817_USAGE','geodetic_crs','ESRI','104817','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106815','D_NAD_1983_HARN_Adj_WI_FN','NAD 1983 HARN Adj. Wisconsin Florence','ESRI','107815','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106815_USAGE','geodetic_datum','ESRI','106815','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104818','GCS_NAD_1983_HARN_Adj_WI_Florence',NULL,'geographic 2D','EPSG','6422','ESRI','106815',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104818_USAGE','geodetic_crs','ESRI','104818','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104819','GCS_NAD_1983_HARN_Adj_WI_FondduLac',NULL,'geographic 2D','EPSG','6422','ESRI','106856',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104819_USAGE','geodetic_crs','ESRI','104819','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106816','D_NAD_1983_HARN_Adj_WI_FR','NAD 1983 HARN Adj. Wisconsin Forest','ESRI','107816','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106816_USAGE','geodetic_datum','ESRI','106816','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104820','GCS_NAD_1983_HARN_Adj_WI_Forest',NULL,'geographic 2D','EPSG','6422','ESRI','106816',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104820_USAGE','geodetic_crs','ESRI','104820','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106817','D_NAD_1983_HARN_Adj_WI_GT','NAD 1983 HARN Adj. Wisconsin Grant','ESRI','107817','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106817_USAGE','geodetic_datum','ESRI','106817','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104821','GCS_NAD_1983_HARN_Adj_WI_Grant',NULL,'geographic 2D','EPSG','6422','ESRI','106817',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104821_USAGE','geodetic_crs','ESRI','104821','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106852','D_NAD_1983_HARN_Adj_WI_GR_LF','NAD 1983 HARN Adj. Wisconsin Green and Lafayette','ESRI','107852','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106852_USAGE','geodetic_datum','ESRI','106852','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104822','GCS_NAD_1983_HARN_Adj_WI_Green',NULL,'geographic 2D','EPSG','6422','ESRI','106852',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104822_USAGE','geodetic_crs','ESRI','104822','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106853','D_NAD_1983_HARN_Adj_WI_GL_MQ','NAD 1983 HARN Adj. Wisconsin Green Lake and Marquette','ESRI','107853','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106853_USAGE','geodetic_datum','ESRI','106853','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104823','GCS_NAD_1983_HARN_Adj_WI_GreenLake',NULL,'geographic 2D','EPSG','6422','ESRI','106853',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104823_USAGE','geodetic_crs','ESRI','104823','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106818','D_NAD_1983_HARN_Adj_WI_IA','NAD 1983 HARN Adj. Wisconsin Iowa','ESRI','107818','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106818_USAGE','geodetic_datum','ESRI','106818','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104824','GCS_NAD_1983_HARN_Adj_WI_Iowa',NULL,'geographic 2D','EPSG','6422','ESRI','106818',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104824_USAGE','geodetic_crs','ESRI','104824','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106819','D_NAD_1983_HARN_Adj_WI_IR','NAD 1983 HARN Adj. Wisconsin Iron','ESRI','107819','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106819_USAGE','geodetic_datum','ESRI','106819','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104825','GCS_NAD_1983_HARN_Adj_WI_Iron',NULL,'geographic 2D','EPSG','6422','ESRI','106819',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104825_USAGE','geodetic_crs','ESRI','104825','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106820','D_NAD_1983_HARN_Adj_WI_JA','NAD 1983 HARN Adj. Wisconsin Jackson','ESRI','107820','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106820_USAGE','geodetic_datum','ESRI','106820','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104826','GCS_NAD_1983_HARN_Adj_WI_Jackson',NULL,'geographic 2D','EPSG','6422','ESRI','106820',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104826_USAGE','geodetic_crs','ESRI','104826','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104827','GCS_NAD_1983_HARN_Adj_WI_Jefferson',NULL,'geographic 2D','EPSG','6422','ESRI','106854',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104827_USAGE','geodetic_crs','ESRI','104827','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104828','GCS_NAD_1983_HARN_Adj_WI_Juneau',NULL,'geographic 2D','EPSG','6422','ESRI','106851',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104828_USAGE','geodetic_crs','ESRI','104828','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106857','D_NAD_1983_HARN_Adj_WI_KN_MW_OZ_RA','NAD 1983 HARN Adj. Wisconsin Kenosha, Milwaukee, Ozaukee, and Racine','ESRI','107857','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106857_USAGE','geodetic_datum','ESRI','106857','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104829','GCS_NAD_1983_HARN_Adj_WI_Kenosha',NULL,'geographic 2D','EPSG','6422','ESRI','106857',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104829_USAGE','geodetic_crs','ESRI','104829','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106858','D_NAD_1983_HARN_Adj_WI_KW_MT_SG','NAD 1983 HARN Adj. Wisconsin Kewaunee, Manitowoc, and Sheboygan','ESRI','107858','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106858_USAGE','geodetic_datum','ESRI','106858','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104830','GCS_NAD_1983_HARN_Adj_WI_Kewaunee',NULL,'geographic 2D','EPSG','6422','ESRI','106858',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104830_USAGE','geodetic_crs','ESRI','104830','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106821','D_NAD_1983_HARN_Adj_WI_LC','NAD 1983 HARN Adj. Wisconsin LaCrosse','ESRI','107821','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106821_USAGE','geodetic_datum','ESRI','106821','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104831','GCS_NAD_1983_HARN_Adj_WI_LaCrosse',NULL,'geographic 2D','EPSG','6422','ESRI','106821',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104831_USAGE','geodetic_crs','ESRI','104831','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104832','GCS_NAD_1983_HARN_Adj_WI_Lafayette',NULL,'geographic 2D','EPSG','6422','ESRI','106852',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104832_USAGE','geodetic_crs','ESRI','104832','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106822','D_NAD_1983_HARN_Adj_WI_LG','NAD 1983 HARN Adj. Wisconsin Langlade','ESRI','107822','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106822_USAGE','geodetic_datum','ESRI','106822','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104833','GCS_NAD_1983_HARN_Adj_WI_Langlade',NULL,'geographic 2D','EPSG','6422','ESRI','106822',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104833_USAGE','geodetic_crs','ESRI','104833','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106823','D_NAD_1983_HARN_Adj_WI_LN','NAD 1983 HARN Adj. Wisconsin Lincoln','ESRI','107823','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106823_USAGE','geodetic_datum','ESRI','106823','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104834','GCS_NAD_1983_HARN_Adj_WI_Lincoln',NULL,'geographic 2D','EPSG','6422','ESRI','106823',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104834_USAGE','geodetic_crs','ESRI','104834','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104835','GCS_NAD_1983_HARN_Adj_WI_Manitowoc',NULL,'geographic 2D','EPSG','6422','ESRI','106858',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104835_USAGE','geodetic_crs','ESRI','104835','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106824','D_NAD_1983_HARN_Adj_WI_MA','NAD 1983 HARN Adj. Wisconsin Marathon','ESRI','107824','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106824_USAGE','geodetic_datum','ESRI','106824','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104836','GCS_NAD_1983_HARN_Adj_WI_Marathon',NULL,'geographic 2D','EPSG','6422','ESRI','106824',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104836_USAGE','geodetic_crs','ESRI','104836','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106825','D_NAD_1983_HARN_Adj_WI_MN','NAD 1983 HARN Adj. Wisconsin Marinette','ESRI','107825','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106825_USAGE','geodetic_datum','ESRI','106825','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104837','GCS_NAD_1983_HARN_Adj_WI_Marinette',NULL,'geographic 2D','EPSG','6422','ESRI','106825',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104837_USAGE','geodetic_crs','ESRI','104837','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104838','GCS_NAD_1983_HARN_Adj_WI_Marquette',NULL,'geographic 2D','EPSG','6422','ESRI','106853',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104838_USAGE','geodetic_crs','ESRI','104838','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106826','D_NAD_1983_HARN_Adj_WI_ME','NAD 1983 HARN Adj. Wisconsin Menominee','ESRI','107826','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106826_USAGE','geodetic_datum','ESRI','106826','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104839','GCS_NAD_1983_HARN_Adj_WI_Menominee',NULL,'geographic 2D','EPSG','6422','ESRI','106826',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104839_USAGE','geodetic_crs','ESRI','104839','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104840','GCS_NAD_1983_HARN_Adj_WI_Milwaukee',NULL,'geographic 2D','EPSG','6422','ESRI','106857',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104840_USAGE','geodetic_crs','ESRI','104840','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106827','D_NAD_1983_HARN_Adj_WI_MR','NAD 1983 HARN Adj. Wisconsin Monroe','ESRI','107827','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106827_USAGE','geodetic_datum','ESRI','106827','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104841','GCS_NAD_1983_HARN_Adj_WI_Monroe',NULL,'geographic 2D','EPSG','6422','ESRI','106827',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104841_USAGE','geodetic_crs','ESRI','104841','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106828','D_NAD_1983_HARN_Adj_WI_OC','NAD 1983 HARN Adj. Wisconsin Oconto','ESRI','107828','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106828_USAGE','geodetic_datum','ESRI','106828','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104842','GCS_NAD_1983_HARN_Adj_WI_Oconto',NULL,'geographic 2D','EPSG','6422','ESRI','106828',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104842_USAGE','geodetic_crs','ESRI','104842','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106829','D_NAD_1983_HARN_Adj_WI_ON','NAD 1983 HARN Adj. Wisconsin Oneida','ESRI','107829','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106829_USAGE','geodetic_datum','ESRI','106829','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104843','GCS_NAD_1983_HARN_Adj_WI_Oneida',NULL,'geographic 2D','EPSG','6422','ESRI','106829',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104843_USAGE','geodetic_crs','ESRI','104843','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104844','GCS_NAD_1983_HARN_Adj_WI_Outagamie',NULL,'geographic 2D','EPSG','6422','ESRI','106856',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104844_USAGE','geodetic_crs','ESRI','104844','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104845','GCS_NAD_1983_HARN_Adj_WI_Ozaukee',NULL,'geographic 2D','EPSG','6422','ESRI','106857',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104845_USAGE','geodetic_crs','ESRI','104845','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106855','D_NAD_1983_HARN_Adj_WI_PP_PC','NAD 1983 HARN Adj. Wisconsin Pepin and Pierce','ESRI','107855','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106855_USAGE','geodetic_datum','ESRI','106855','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104846','GCS_NAD_1983_HARN_Adj_WI_Pepin',NULL,'geographic 2D','EPSG','6422','ESRI','106855',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104846_USAGE','geodetic_crs','ESRI','104846','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104847','GCS_NAD_1983_HARN_Adj_WI_Pierce',NULL,'geographic 2D','EPSG','6422','ESRI','106855',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104847_USAGE','geodetic_crs','ESRI','104847','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106830','D_NAD_1983_HARN_Adj_WI_PK','NAD 1983 HARN Adj. Wisconsin Polk','ESRI','107830','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106830_USAGE','geodetic_datum','ESRI','106830','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104848','GCS_NAD_1983_HARN_Adj_WI_Polk',NULL,'geographic 2D','EPSG','6422','ESRI','106830',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104848_USAGE','geodetic_crs','ESRI','104848','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106831','D_NAD_1983_HARN_Adj_WI_PT','NAD 1983 HARN Adj. Wisconsin Portage','ESRI','107831','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106831_USAGE','geodetic_datum','ESRI','106831','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104849','GCS_NAD_1983_HARN_Adj_WI_Portage',NULL,'geographic 2D','EPSG','6422','ESRI','106831',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104849_USAGE','geodetic_crs','ESRI','104849','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106832','D_NAD_1983_HARN_Adj_WI_PR','NAD 1983 HARN Adj. Wisconsin Price','ESRI','107832','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106832_USAGE','geodetic_datum','ESRI','106832','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104850','GCS_NAD_1983_HARN_Adj_WI_Price',NULL,'geographic 2D','EPSG','6422','ESRI','106832',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104850_USAGE','geodetic_crs','ESRI','104850','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104851','GCS_NAD_1983_HARN_Adj_WI_Racine',NULL,'geographic 2D','EPSG','6422','ESRI','106857',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104851_USAGE','geodetic_crs','ESRI','104851','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106833','D_NAD_1983_HARN_Adj_WI_RC','NAD 1983 HARN Adj. Wisconsin Richland','ESRI','107833','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106833_USAGE','geodetic_datum','ESRI','106833','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104852','GCS_NAD_1983_HARN_Adj_WI_Richland',NULL,'geographic 2D','EPSG','6422','ESRI','106833',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104852_USAGE','geodetic_crs','ESRI','104852','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106834','D_NAD_1983_HARN_Adj_WI_RK','NAD 1983 HARN Adj. Wisconsin Rock','ESRI','107834','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106834_USAGE','geodetic_datum','ESRI','106834','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104853','GCS_NAD_1983_HARN_Adj_WI_Rock',NULL,'geographic 2D','EPSG','6422','ESRI','106834',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104853_USAGE','geodetic_crs','ESRI','104853','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106835','D_NAD_1983_HARN_Adj_WI_RS','NAD 1983 HARN Adj. Wisconsin Rusk','ESRI','107835','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106835_USAGE','geodetic_datum','ESRI','106835','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104854','GCS_NAD_1983_HARN_Adj_WI_Rusk',NULL,'geographic 2D','EPSG','6422','ESRI','106835',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104854_USAGE','geodetic_crs','ESRI','104854','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106836','D_NAD_1983_HARN_Adj_WI_SC','NAD 1983 HARN Adj. Wisconsin StCroix','ESRI','107836','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106836_USAGE','geodetic_datum','ESRI','106836','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104855','GCS_NAD_1983_HARN_Adj_WI_StCroix',NULL,'geographic 2D','EPSG','6422','ESRI','106836',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104855_USAGE','geodetic_crs','ESRI','104855','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106837','D_NAD_1983_HARN_Adj_WI_SK','NAD 1983 HARN Adj. Wisconsin Sauk','ESRI','107837','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106837_USAGE','geodetic_datum','ESRI','106837','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104856','GCS_NAD_1983_HARN_Adj_WI_Sauk',NULL,'geographic 2D','EPSG','6422','ESRI','106837',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104856_USAGE','geodetic_crs','ESRI','104856','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106838','D_NAD_1983_HARN_Adj_WI_SW','NAD 1983 HARN Adj. Wisconsin Sawyer','ESRI','107838','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106838_USAGE','geodetic_datum','ESRI','106838','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104857','GCS_NAD_1983_HARN_Adj_WI_Sawyer',NULL,'geographic 2D','EPSG','6422','ESRI','106838',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104857_USAGE','geodetic_crs','ESRI','104857','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106839','D_NAD_1983_HARN_Adj_WI_SH','NAD 1983 HARN Adj. Wisconsin Shawano','ESRI','107839','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106839_USAGE','geodetic_datum','ESRI','106839','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104858','GCS_NAD_1983_HARN_Adj_WI_Shawano',NULL,'geographic 2D','EPSG','6422','ESRI','106839',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104858_USAGE','geodetic_crs','ESRI','104858','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104859','GCS_NAD_1983_HARN_Adj_WI_Sheboygan',NULL,'geographic 2D','EPSG','6422','ESRI','106858',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104859_USAGE','geodetic_crs','ESRI','104859','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106840','D_NAD_1983_HARN_Adj_WI_TA','NAD 1983 HARN Adj. Wisconsin Taylor','ESRI','107840','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106840_USAGE','geodetic_datum','ESRI','106840','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104860','GCS_NAD_1983_HARN_Adj_WI_Taylor',NULL,'geographic 2D','EPSG','6422','ESRI','106840',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104860_USAGE','geodetic_crs','ESRI','104860','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106841','D_NAD_1983_HARN_Adj_WI_TR','NAD 1983 HARN Adj. Wisconsin Trempealeau','ESRI','107841','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106841_USAGE','geodetic_datum','ESRI','106841','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104861','GCS_NAD_1983_HARN_Adj_WI_Trempealeau',NULL,'geographic 2D','EPSG','6422','ESRI','106841',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104861_USAGE','geodetic_crs','ESRI','104861','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106842','D_NAD_1983_HARN_Adj_WI_VR','NAD 1983 HARN Adj. Wisconsin Vernon','ESRI','107842','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106842_USAGE','geodetic_datum','ESRI','106842','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104862','GCS_NAD_1983_HARN_Adj_WI_Vernon',NULL,'geographic 2D','EPSG','6422','ESRI','106842',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104862_USAGE','geodetic_crs','ESRI','104862','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106843','D_NAD_1983_HARN_Adj_WI_VI','NAD 1983 HARN Adj. Wisconsin Vilas','ESRI','107843','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106843_USAGE','geodetic_datum','ESRI','106843','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104863','GCS_NAD_1983_HARN_Adj_WI_Vilas',NULL,'geographic 2D','EPSG','6422','ESRI','106843',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104863_USAGE','geodetic_crs','ESRI','104863','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106844','D_NAD_1983_HARN_Adj_WI_WW','NAD 1983 HARN Adj. Wisconsin Walworth','ESRI','107844','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106844_USAGE','geodetic_datum','ESRI','106844','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104864','GCS_NAD_1983_HARN_Adj_WI_Walworth',NULL,'geographic 2D','EPSG','6422','ESRI','106844',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104864_USAGE','geodetic_crs','ESRI','104864','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106845','D_NAD_1983_HARN_Adj_WI_WB','NAD 1983 HARN Adj. Wisconsin Washburn','ESRI','107845','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106845_USAGE','geodetic_datum','ESRI','106845','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104865','GCS_NAD_1983_HARN_Adj_WI_Washburn',NULL,'geographic 2D','EPSG','6422','ESRI','106845',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104865_USAGE','geodetic_crs','ESRI','104865','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106846','D_NAD_1983_HARN_Adj_WI_WA','NAD 1983 HARN Adj. Wisconsin Washington','ESRI','107846','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106846_USAGE','geodetic_datum','ESRI','106846','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104866','GCS_NAD_1983_HARN_Adj_WI_Washington',NULL,'geographic 2D','EPSG','6422','ESRI','106846',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104866_USAGE','geodetic_crs','ESRI','104866','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106847','D_NAD_1983_HARN_Adj_WI_WK','NAD 1983 HARN Adj. Wisconsin Waukesha','ESRI','107847','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106847_USAGE','geodetic_datum','ESRI','106847','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104867','GCS_NAD_1983_HARN_Adj_WI_Waukesha',NULL,'geographic 2D','EPSG','6422','ESRI','106847',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104867_USAGE','geodetic_crs','ESRI','104867','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106848','D_NAD_1983_HARN_Adj_WI_WP','NAD 1983 HARN Adj. Wisconsin Waupaca','ESRI','107848','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106848_USAGE','geodetic_datum','ESRI','106848','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104868','GCS_NAD_1983_HARN_Adj_WI_Waupaca',NULL,'geographic 2D','EPSG','6422','ESRI','106848',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104868_USAGE','geodetic_crs','ESRI','104868','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106849','D_NAD_1983_HARN_Adj_WI_WS','NAD 1983 HARN Adj. Wisconsin Waushara','ESRI','107849','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106849_USAGE','geodetic_datum','ESRI','106849','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104869','GCS_NAD_1983_HARN_Adj_WI_Waushara',NULL,'geographic 2D','EPSG','6422','ESRI','106849',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104869_USAGE','geodetic_crs','ESRI','104869','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104870','GCS_NAD_1983_HARN_Adj_WI_Winnebago',NULL,'geographic 2D','EPSG','6422','ESRI','106856',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104870_USAGE','geodetic_crs','ESRI','104870','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106850','D_NAD_1983_HARN_Adj_WI_WD','NAD 1983 HARN Adj. Wisconsin Wood','ESRI','107850','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106850_USAGE','geodetic_datum','ESRI','106850','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104871','GCS_NAD_1983_HARN_Adj_WI_Wood',NULL,'geographic 2D','EPSG','6422','ESRI','106850',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104871_USAGE','geodetic_crs','ESRI','104871','EPSG','1418','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106861','Phobos_2015','Mars - Phobos IAU 2015','ESRI','107861','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106861_USAGE','geodetic_datum','ESRI','106861','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104872','Phobos_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106861',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104872_USAGE','geodetic_crs','ESRI','104872','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106862','Callisto_2015','Jupiter - Callisto IAU 2015','ESRI','107862','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106862_USAGE','geodetic_datum','ESRI','106862','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104873','Callisto_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106862',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104873_USAGE','geodetic_crs','ESRI','104873','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106863','Europa_2015','Jupiter - Europa IAU 2015','ESRI','107863','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106863_USAGE','geodetic_datum','ESRI','106863','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104874','Europa_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106863',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104874_USAGE','geodetic_crs','ESRI','104874','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106864','Ganymede_2015','Jupiter - Ganymede IAU 2015','ESRI','107864','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106864_USAGE','geodetic_datum','ESRI','106864','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104875','Ganymede_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106864',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104875_USAGE','geodetic_crs','ESRI','104875','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106865','Io_2015','Jupiter - Io IAU 2015','ESRI','107865','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106865_USAGE','geodetic_datum','ESRI','106865','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104876','Io_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106865',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104876_USAGE','geodetic_crs','ESRI','104876','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106866','Metis_2015','Jupiter - Metis IAU 2015','ESRI','107866','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106866_USAGE','geodetic_datum','ESRI','106866','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104877','Metis_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106866',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104877_USAGE','geodetic_crs','ESRI','104877','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106867','Aegaeon_2015','Saturn - Aegaeon IAU 2015','ESRI','107867','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106867_USAGE','geodetic_datum','ESRI','106867','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104878','Aegaeon_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106867',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104878_USAGE','geodetic_crs','ESRI','104878','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106868','Anthe_2015','Saturn - Anthe IAU 2015','ESRI','107868','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106868_USAGE','geodetic_datum','ESRI','106868','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104879','Anthe_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106868',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104879_USAGE','geodetic_crs','ESRI','104879','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104896','GCS_ITRF_2005',NULL,'geographic 2D','EPSG','6422','EPSG','6896',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104896_USAGE','geodetic_crs','ESRI','104896','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104896','EPSG','8998','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106890','Pandora_2015','Saturn - Pandora IAU 2015','ESRI','107990','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106890_USAGE','geodetic_datum','ESRI','106890','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104897','Pandora_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106890',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104897_USAGE','geodetic_crs','ESRI','104897','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106891','Phoebe_2015','Saturn - Phoebe IAU 2015','ESRI','107991','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106891_USAGE','geodetic_datum','ESRI','106891','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104898','Phoebe_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106891',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104898_USAGE','geodetic_crs','ESRI','104898','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106892','Polydeuces_2015','Saturn - Polydeuces IAU 2015','ESRI','107992','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106892_USAGE','geodetic_datum','ESRI','106892','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104899','Polydeuces_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106892',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104899_USAGE','geodetic_crs','ESRI','104899','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106900','D_Mercury_2000','Mercury','ESRI','107900','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106900_USAGE','geodetic_datum','ESRI','106900','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104900','GCS_Mercury_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106900',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104900_USAGE','geodetic_crs','ESRI','104900','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106901','D_Venus_1985','Venus 1985','ESRI','107901','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106901_USAGE','geodetic_datum','ESRI','106901','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104901','GCS_Venus_1985',NULL,'geographic 2D','EPSG','6422','ESRI','106901',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104901_USAGE','geodetic_crs','ESRI','104901','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106902','D_Venus_2000','Venus 2000','ESRI','107902','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106902_USAGE','geodetic_datum','ESRI','106902','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104902','GCS_Venus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106902',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104902_USAGE','geodetic_crs','ESRI','104902','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106903','D_Moon_2000','The Moon','ESRI','107903','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106903_USAGE','geodetic_datum','ESRI','106903','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104903','GCS_Moon_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106903',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104903_USAGE','geodetic_crs','ESRI','104903','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106904','D_Mars_1979','Mars 1979','ESRI','107904','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106904_USAGE','geodetic_datum','ESRI','106904','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104904','GCS_Mars_1979',NULL,'geographic 2D','EPSG','6422','ESRI','106904',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104904_USAGE','geodetic_crs','ESRI','104904','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106905','D_Mars_2000','Mars 2000','ESRI','107905','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106905_USAGE','geodetic_datum','ESRI','106905','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104905','GCS_Mars_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106905',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104905_USAGE','geodetic_crs','ESRI','104905','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106906','D_Deimos_2000','Mars - Deimos','ESRI','107906','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106906_USAGE','geodetic_datum','ESRI','106906','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104906','GCS_Deimos_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106906',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104906_USAGE','geodetic_crs','ESRI','104906','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106907','D_Phobos_2000','Mars - Phobos','ESRI','107907','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106907_USAGE','geodetic_datum','ESRI','106907','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104907','GCS_Phobos_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106907',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104907_USAGE','geodetic_crs','ESRI','104907','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106908','D_Jupiter_2000','Jupiter','ESRI','107908','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106908_USAGE','geodetic_datum','ESRI','106908','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104908','GCS_Jupiter_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106908',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104908_USAGE','geodetic_crs','ESRI','104908','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106909','D_Adrastea_2000','Jupiter - Adrastea','ESRI','107909','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106909_USAGE','geodetic_datum','ESRI','106909','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104909','GCS_Adrastea_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106909',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104909_USAGE','geodetic_crs','ESRI','104909','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106910','D_Amalthea_2000','Jupiter - Amalthea','ESRI','107910','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106910_USAGE','geodetic_datum','ESRI','106910','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104910','GCS_Amalthea_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106910',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104910_USAGE','geodetic_crs','ESRI','104910','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106911','D_Ananke_2000','Jupiter - Ananke','ESRI','107911','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106911_USAGE','geodetic_datum','ESRI','106911','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104911','GCS_Ananke_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106911',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104911_USAGE','geodetic_crs','ESRI','104911','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106912','D_Callisto_2000','Jupiter - Callisto','ESRI','107912','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106912_USAGE','geodetic_datum','ESRI','106912','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104912','GCS_Callisto_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106912',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104912_USAGE','geodetic_crs','ESRI','104912','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106913','D_Carme_2000','Jupiter - Carme','ESRI','107913','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106913_USAGE','geodetic_datum','ESRI','106913','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104913','GCS_Carme_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106913',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104913_USAGE','geodetic_crs','ESRI','104913','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106914','D_Elara_2000','Jupiter - Elara','ESRI','107914','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106914_USAGE','geodetic_datum','ESRI','106914','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104914','GCS_Elara_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106914',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104914_USAGE','geodetic_crs','ESRI','104914','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106915','D_Europa_2000','Jupiter - Europa','ESRI','107915','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106915_USAGE','geodetic_datum','ESRI','106915','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104915','GCS_Europa_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106915',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104915_USAGE','geodetic_crs','ESRI','104915','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106916','D_Ganymede_2000','Jupiter - Ganymede','ESRI','107916','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106916_USAGE','geodetic_datum','ESRI','106916','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104916','GCS_Ganymede_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106916',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104916_USAGE','geodetic_crs','ESRI','104916','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106917','D_Himalia_2000','Jupiter - Himalia','ESRI','107917','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106917_USAGE','geodetic_datum','ESRI','106917','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104917','GCS_Himalia_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106917',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104917_USAGE','geodetic_crs','ESRI','104917','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106918','D_Io_2000','Jupiter - Io','ESRI','107918','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106918_USAGE','geodetic_datum','ESRI','106918','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104918','GCS_Io_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106918',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104918_USAGE','geodetic_crs','ESRI','104918','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106919','D_Leda_2000','Jupiter - Leda','ESRI','107919','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106919_USAGE','geodetic_datum','ESRI','106919','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104919','GCS_Leda_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106919',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104919_USAGE','geodetic_crs','ESRI','104919','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106920','D_Lysithea_2000','Jupiter - Lysithea','ESRI','107920','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106920_USAGE','geodetic_datum','ESRI','106920','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104920','GCS_Lysithea_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106920',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104920_USAGE','geodetic_crs','ESRI','104920','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106921','D_Metis_2000','Jupiter - Metis','ESRI','107921','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106921_USAGE','geodetic_datum','ESRI','106921','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104921','GCS_Metis_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106921',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104921_USAGE','geodetic_crs','ESRI','104921','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106922','D_Pasiphae_2000','Jupiter - Pasiphae','ESRI','107922','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106922_USAGE','geodetic_datum','ESRI','106922','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104922','GCS_Pasiphae_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106922',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104922_USAGE','geodetic_crs','ESRI','104922','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106923','D_Sinope_2000','Jupiter - Sinope','ESRI','107923','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106923_USAGE','geodetic_datum','ESRI','106923','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104923','GCS_Sinope_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106923',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104923_USAGE','geodetic_crs','ESRI','104923','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106924','D_Thebe_2000','Jupiter - Thebe','ESRI','107924','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106924_USAGE','geodetic_datum','ESRI','106924','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104924','GCS_Thebe_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106924',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104924_USAGE','geodetic_crs','ESRI','104924','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106925','D_Saturn_2000','Saturn','ESRI','107925','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106925_USAGE','geodetic_datum','ESRI','106925','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104925','GCS_Saturn_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106925',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104925_USAGE','geodetic_crs','ESRI','104925','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106926','D_Atlas_2000','Saturn - Atlas','ESRI','107926','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106926_USAGE','geodetic_datum','ESRI','106926','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104926','GCS_Atlas_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106926',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104926_USAGE','geodetic_crs','ESRI','104926','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106927','D_Calypso_2000','Saturn - Calypso','ESRI','107927','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106927_USAGE','geodetic_datum','ESRI','106927','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104927','GCS_Calypso_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106927',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104927_USAGE','geodetic_crs','ESRI','104927','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106928','D_Dione_2000','Saturn - Dione','ESRI','107928','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106928_USAGE','geodetic_datum','ESRI','106928','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104928','GCS_Dione_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106928',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104928_USAGE','geodetic_crs','ESRI','104928','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106929','D_Enceladus_2000','Saturn - Enceladus','ESRI','107929','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106929_USAGE','geodetic_datum','ESRI','106929','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104929','GCS_Enceladus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106929',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104929_USAGE','geodetic_crs','ESRI','104929','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106930','D_Epimetheus_2000','Saturn - Epimetheus','ESRI','107930','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106930_USAGE','geodetic_datum','ESRI','106930','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104930','GCS_Epimetheus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106930',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104930_USAGE','geodetic_crs','ESRI','104930','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106931','D_Helene_2000','Saturn - Helene','ESRI','107931','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106931_USAGE','geodetic_datum','ESRI','106931','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104931','GCS_Helene_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106931',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104931_USAGE','geodetic_crs','ESRI','104931','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106932','D_Hyperion_2000','Saturn - Hyperion','ESRI','107932','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106932_USAGE','geodetic_datum','ESRI','106932','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104932','GCS_Hyperion_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106932',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104932_USAGE','geodetic_crs','ESRI','104932','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106933','D_Iapetus_2000','Saturn - Iapetus','ESRI','107933','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106933_USAGE','geodetic_datum','ESRI','106933','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104933','GCS_Iapetus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106933',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104933_USAGE','geodetic_crs','ESRI','104933','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106934','D_Janus_2000','Saturn - Janus','ESRI','107934','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106934_USAGE','geodetic_datum','ESRI','106934','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104934','GCS_Janus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106934',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104934_USAGE','geodetic_crs','ESRI','104934','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106935','D_Mimas_2000','Saturn - Mimas','ESRI','107935','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106935_USAGE','geodetic_datum','ESRI','106935','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104935','GCS_Mimas_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106935',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104935_USAGE','geodetic_crs','ESRI','104935','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106936','D_Pan_2000','Saturn - Pan','ESRI','107936','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106936_USAGE','geodetic_datum','ESRI','106936','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104936','GCS_Pan_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106936',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104936_USAGE','geodetic_crs','ESRI','104936','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106937','D_Pandora_2000','Saturn - Pandora','ESRI','107937','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106937_USAGE','geodetic_datum','ESRI','106937','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104937','GCS_Pandora_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106937',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104937_USAGE','geodetic_crs','ESRI','104937','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106938','D_Phoebe_2000','Saturn - Phoebe','ESRI','107938','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106938_USAGE','geodetic_datum','ESRI','106938','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104938','GCS_Phoebe_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106938',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104938_USAGE','geodetic_crs','ESRI','104938','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106939','D_Prometheus_2000','Saturn - Prometheus','ESRI','107939','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106939_USAGE','geodetic_datum','ESRI','106939','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104939','GCS_Prometheus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106939',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104939_USAGE','geodetic_crs','ESRI','104939','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106940','D_Rhea_2000','Saturn - Rhea','ESRI','107940','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106940_USAGE','geodetic_datum','ESRI','106940','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104940','GCS_Rhea_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106940',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104940_USAGE','geodetic_crs','ESRI','104940','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106941','D_Telesto_2000','Saturn - Telesto','ESRI','107941','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106941_USAGE','geodetic_datum','ESRI','106941','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104941','GCS_Telesto_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106941',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104941_USAGE','geodetic_crs','ESRI','104941','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106942','D_Tethys_2000','Saturn - Tethys','ESRI','107942','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106942_USAGE','geodetic_datum','ESRI','106942','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104942','GCS_Tethys_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106942',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104942_USAGE','geodetic_crs','ESRI','104942','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106943','D_Titan_2000','Saturn - Titan','ESRI','107943','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106943_USAGE','geodetic_datum','ESRI','106943','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104943','GCS_Titan_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106943',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104943_USAGE','geodetic_crs','ESRI','104943','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106944','D_Uranus_2000','Uranus','ESRI','107944','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106944_USAGE','geodetic_datum','ESRI','106944','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104944','GCS_Uranus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106944',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104944_USAGE','geodetic_crs','ESRI','104944','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106945','D_Ariel_2000','Uranus - Ariel','ESRI','107945','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106945_USAGE','geodetic_datum','ESRI','106945','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104945','GCS_Ariel_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106945',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104945_USAGE','geodetic_crs','ESRI','104945','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106946','D_Belinda_2000','Uranus - Belinda','ESRI','107946','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106946_USAGE','geodetic_datum','ESRI','106946','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104946','GCS_Belinda_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106946',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104946_USAGE','geodetic_crs','ESRI','104946','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106947','D_Bianca_2000','Uranus - Bianca','ESRI','107947','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106947_USAGE','geodetic_datum','ESRI','106947','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104947','GCS_Bianca_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106947',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104947_USAGE','geodetic_crs','ESRI','104947','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106948','D_Cordelia_2000','Uranus - Cordelia','ESRI','107948','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106948_USAGE','geodetic_datum','ESRI','106948','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104948','GCS_Cordelia_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106948',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104948_USAGE','geodetic_crs','ESRI','104948','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106949','D_Cressida_2000','Uranus - Cressida','ESRI','107949','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106949_USAGE','geodetic_datum','ESRI','106949','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104949','GCS_Cressida_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106949',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104949_USAGE','geodetic_crs','ESRI','104949','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106950','D_Desdemona_2000','Uranus - Desdemona','ESRI','107950','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106950_USAGE','geodetic_datum','ESRI','106950','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104950','GCS_Desdemona_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106950',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104950_USAGE','geodetic_crs','ESRI','104950','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106951','D_Juliet_2000','Uranus - Juliet','ESRI','107951','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106951_USAGE','geodetic_datum','ESRI','106951','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104951','GCS_Juliet_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106951',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104951_USAGE','geodetic_crs','ESRI','104951','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106952','D_Miranda_2000','Uranus - Miranda','ESRI','107952','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106952_USAGE','geodetic_datum','ESRI','106952','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104952','GCS_Miranda_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106952',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104952_USAGE','geodetic_crs','ESRI','104952','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106953','D_Oberon_2000','Uranus - Oberon','ESRI','107953','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106953_USAGE','geodetic_datum','ESRI','106953','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104953','GCS_Oberon_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106953',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104953_USAGE','geodetic_crs','ESRI','104953','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106954','D_Ophelia_2000','Uranus - Ophelia','ESRI','107954','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106954_USAGE','geodetic_datum','ESRI','106954','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104954','GCS_Ophelia_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106954',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104954_USAGE','geodetic_crs','ESRI','104954','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106955','D_Portia_2000','Uranus - Portia','ESRI','107955','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106955_USAGE','geodetic_datum','ESRI','106955','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104955','GCS_Portia_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106955',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104955_USAGE','geodetic_crs','ESRI','104955','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106956','D_Puck_2000','Uranus - Puck','ESRI','107956','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106956_USAGE','geodetic_datum','ESRI','106956','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104956','GCS_Puck_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106956',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104956_USAGE','geodetic_crs','ESRI','104956','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106957','D_Rosalind_2000','Uranus - Rosalind','ESRI','107957','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106957_USAGE','geodetic_datum','ESRI','106957','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104957','GCS_Rosalind_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106957',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104957_USAGE','geodetic_crs','ESRI','104957','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106958','D_Titania_2000','Uranus - Titania','ESRI','107958','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106958_USAGE','geodetic_datum','ESRI','106958','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104958','GCS_Titania_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106958',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104958_USAGE','geodetic_crs','ESRI','104958','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106959','D_Umbriel_2000','Uranus - Umbriel','ESRI','107959','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106959_USAGE','geodetic_datum','ESRI','106959','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104959','GCS_Umbriel_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106959',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104959_USAGE','geodetic_crs','ESRI','104959','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106960','D_Neptune_2000','Neptune','ESRI','107960','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106960_USAGE','geodetic_datum','ESRI','106960','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104960','GCS_Neptune_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106960',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104960_USAGE','geodetic_crs','ESRI','104960','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106961','D_Despina_2000','Neptune - Despina','ESRI','107961','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106961_USAGE','geodetic_datum','ESRI','106961','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104961','GCS_Despina_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106961',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104961_USAGE','geodetic_crs','ESRI','104961','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106962','D_Galatea_2000','Neptune - Galatea','ESRI','107962','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106962_USAGE','geodetic_datum','ESRI','106962','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104962','GCS_Galatea_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106962',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104962_USAGE','geodetic_crs','ESRI','104962','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106963','D_Larissa_2000','Neptune - Larissa','ESRI','107963','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106963_USAGE','geodetic_datum','ESRI','106963','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104963','GCS_Larissa_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106963',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104963_USAGE','geodetic_crs','ESRI','104963','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106964','D_Naiad_2000','Neptune - Naiad','ESRI','107964','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106964_USAGE','geodetic_datum','ESRI','106964','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104964','GCS_Naiad_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106964',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104964_USAGE','geodetic_crs','ESRI','104964','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106965','D_Nereid_2000','Neptune - Nereid','ESRI','107965','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106965_USAGE','geodetic_datum','ESRI','106965','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104965','GCS_Nereid_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106965',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104965_USAGE','geodetic_crs','ESRI','104965','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106966','D_Proteus_2000','Neptune - Proteus','ESRI','107966','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106966_USAGE','geodetic_datum','ESRI','106966','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104966','GCS_Proteus_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106966',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104966_USAGE','geodetic_crs','ESRI','104966','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106967','D_Thalassa_2000','Neptune - Thalassa','ESRI','107967','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106967_USAGE','geodetic_datum','ESRI','106967','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104967','GCS_Thalassa_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106967',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104967_USAGE','geodetic_crs','ESRI','104967','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106968','D_Triton_2000','Neptune - Triton','ESRI','107968','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106968_USAGE','geodetic_datum','ESRI','106968','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104968','GCS_Triton_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106968',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104968_USAGE','geodetic_crs','ESRI','104968','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106969','D_Pluto_2000','Pluto','ESRI','107969','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106969_USAGE','geodetic_datum','ESRI','106969','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104969','GCS_Pluto_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106969',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104969_USAGE','geodetic_crs','ESRI','104969','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106970','D_Charon_2000','Pluto - Charon','ESRI','107970','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106970_USAGE','geodetic_datum','ESRI','106970','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104970','GCS_Charon_2000',NULL,'geographic 2D','EPSG','6422','ESRI','106970',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104970_USAGE','geodetic_crs','ESRI','104970','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106971','Mars_2000_(Sphere)','Mars 2000 (Sphere)','ESRI','107971','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106971_USAGE','geodetic_datum','ESRI','106971','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104971','Mars_2000_(Sphere)',NULL,'geographic 2D','EPSG','6422','ESRI','106971',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104971_USAGE','geodetic_crs','ESRI','104971','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106972','1_Ceres_2015','1 Ceres 2015','ESRI','107972','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106972_USAGE','geodetic_datum','ESRI','106972','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104972','1_Ceres_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106972',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104972_USAGE','geodetic_crs','ESRI','104972','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106973','4_Vesta_2015','4 Vesta 2015','ESRI','107973','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106973_USAGE','geodetic_datum','ESRI','106973','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104973','4_Vesta_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106973',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104973_USAGE','geodetic_crs','ESRI','104973','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106974','Mercury_2015','Mercury 2015','ESRI','107974','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106974_USAGE','geodetic_datum','ESRI','106974','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104974','Mercury_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106974',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104974_USAGE','geodetic_crs','ESRI','104974','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106975','Sun_2015','Sun IAU 2015','ESRI','107975','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106975_USAGE','geodetic_datum','ESRI','106975','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104975','Sun_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106975',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104975_USAGE','geodetic_crs','ESRI','104975','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106976','Atlas_2015','Saturn - Atlas IAU 2015','ESRI','107976','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106976_USAGE','geodetic_datum','ESRI','106976','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104976','Atlas_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106976',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104976_USAGE','geodetic_crs','ESRI','104976','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106977','Calypso_2015','Saturn - Calypso IAU 2015','ESRI','107977','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106977_USAGE','geodetic_datum','ESRI','106977','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104977','Calypso_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106977',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104977_USAGE','geodetic_crs','ESRI','104977','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106978','Daphnis_2015','Saturn - Daphnis IAU 2015','ESRI','107978','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106978_USAGE','geodetic_datum','ESRI','106978','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104978','Daphnis_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106978',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104978_USAGE','geodetic_crs','ESRI','104978','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106979','Dione_2015','Saturn - Dione IAU 2015','ESRI','107979','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106979_USAGE','geodetic_datum','ESRI','106979','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104979','Dione_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106979',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104979_USAGE','geodetic_crs','ESRI','104979','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106880','Enceladus_2015','Saturn - Enceladus IAU 2015','ESRI','107980','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106880_USAGE','geodetic_datum','ESRI','106880','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104980','Enceladus_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106880',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104980_USAGE','geodetic_crs','ESRI','104980','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106881','Epimetheus_2015','Saturn - Epimetheus IAU 2015','ESRI','107981','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106881_USAGE','geodetic_datum','ESRI','106881','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104981','Epimetheus_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106881',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104981_USAGE','geodetic_crs','ESRI','104981','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106882','Helene_2015','Saturn - Helene IAU 2015','ESRI','107982','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106882_USAGE','geodetic_datum','ESRI','106882','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104982','Helene_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106882',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104982_USAGE','geodetic_crs','ESRI','104982','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106883','Hyperion_2015','Saturn - Hyperion IAU 2015','ESRI','107983','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106883_USAGE','geodetic_datum','ESRI','106883','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104983','Hyperion_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106883',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104983_USAGE','geodetic_crs','ESRI','104983','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106884','Iapetus_2015','Saturn - Iapetus IAU 2015','ESRI','107984','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106884_USAGE','geodetic_datum','ESRI','106884','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104984','Iapetus_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106884',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104984_USAGE','geodetic_crs','ESRI','104984','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106985','Janus_2015','Saturn - Janus IAU 2015','ESRI','107985','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106985_USAGE','geodetic_datum','ESRI','106985','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104985','Janus_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106985',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104985_USAGE','geodetic_crs','ESRI','104985','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106986','Methone_2015','Saturn - Methone IAU 2015','ESRI','107986','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106986_USAGE','geodetic_datum','ESRI','106986','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104986','Methone_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106986',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104986_USAGE','geodetic_crs','ESRI','104986','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106987','Mimas_2015','Saturn - Mimas IAU 2015','ESRI','107987','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106987_USAGE','geodetic_datum','ESRI','106987','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104987','Mimas_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106987',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104987_USAGE','geodetic_crs','ESRI','104987','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106988','Pallene_2015','Saturn - Pallene IAU 2015','ESRI','107988','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106988_USAGE','geodetic_datum','ESRI','106988','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104988','Pallene_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106988',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104988_USAGE','geodetic_crs','ESRI','104988','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106989','Pan_2015','Saturn - Pan IAU 2015','ESRI','107989','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106989_USAGE','geodetic_datum','ESRI','106989','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104989','Pan_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106989',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104989_USAGE','geodetic_crs','ESRI','104989','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106990','D_Hungarian_Datum_1909','Hungarian Datum 1909','EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106990_USAGE','geodetic_datum','ESRI','106990','EPSG','1119','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104990','GCS_HD1909',NULL,'geographic 2D','EPSG','6422','ESRI','106990',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104990_USAGE','geodetic_crs','ESRI','104990','EPSG','1119','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104990','EPSG','3819','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106991','D_Iraqi_Geospatial_Reference_System','Iraqi Geospatial Reference System','EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106991_USAGE','geodetic_datum','ESRI','106991','EPSG','1124','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104991','GCS_IGRS',NULL,'geographic 2D','EPSG','6422','ESRI','106991',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104991_USAGE','geodetic_crs','ESRI','104991','EPSG','1124','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104991','EPSG','3889','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106992','D_MGI_1901','MGI 1901','EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '106992_USAGE','geodetic_datum','ESRI','106992','EPSG','2370','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104992','GCS_MGI_1901',NULL,'geographic 2D','EPSG','6422','ESRI','106992',NULL,1); INSERT INTO "usage" VALUES('ESRI', '104992_USAGE','geodetic_crs','ESRI','104992','EPSG','2370','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','104992','EPSG','3906','ESRI'); INSERT INTO "geodetic_datum" VALUES('ESRI','106893','Prometheus_2015','Saturn - Prometheus IAU 2015','ESRI','107993','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106893_USAGE','geodetic_datum','ESRI','106893','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104993','Prometheus_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106893',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104993_USAGE','geodetic_crs','ESRI','104993','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106894','Rhea_2015','Saturn - Rhea IAU 2015','ESRI','107994','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106894_USAGE','geodetic_datum','ESRI','106894','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104994','Rhea_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106894',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104994_USAGE','geodetic_crs','ESRI','104994','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106895','Telesto_2015','Saturn - Telesto IAU 2015','ESRI','107995','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106895_USAGE','geodetic_datum','ESRI','106895','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104995','Telesto_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106895',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104995_USAGE','geodetic_crs','ESRI','104995','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106896','Tethys_2015','Saturn - Tethys IAU 2015','ESRI','107996','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106896_USAGE','geodetic_datum','ESRI','106896','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104996','Tethys_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106896',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104996_USAGE','geodetic_crs','ESRI','104996','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106897','Larissa_2015','Neptune - Larissa IAU 2015','ESRI','107997','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106897_USAGE','geodetic_datum','ESRI','106897','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104997','Larissa_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106897',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104997_USAGE','geodetic_crs','ESRI','104997','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106898','Pluto_2015','Pluto IAU 2015','ESRI','107998','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106898_USAGE','geodetic_datum','ESRI','106898','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104998','Pluto_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106898',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104998_USAGE','geodetic_crs','ESRI','104998','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_datum" VALUES('ESRI','106899','Charon_2015','Pluto - Charon IAU 2015','ESRI','107999','ESRI','108900',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '106899_USAGE','geodetic_datum','ESRI','106899','EPSG','1262','EPSG','1024'); INSERT INTO "geodetic_crs" VALUES('ESRI','104999','Charon_2015',NULL,'geographic 2D','EPSG','6422','ESRI','106899',NULL,0); INSERT INTO "usage" VALUES('ESRI', '104999_USAGE','geodetic_crs','ESRI','104999','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','4305','ESRI','104026','ESRI'); INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','4812','ESRI','104025','ESRI'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6314','D_Deutsche_Hauptdreiecksnetz','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','ESRI','106234','D_K0_1949','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6696','D_Kasai_1955','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6737','D_Korea_2000','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6181','D_Luxembourg_1930','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6140','D_North_American_1983_CSRS98','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','ESRI','106245','D_Observ_Meteorological_1939','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6683','D_Phillipine_Reference_System_1992','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','ESRI','106235','D_Piton_des_Neiges','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','ESRI','106235','D_Reunion','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1064','D_SIRGAS-Chile','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6629','D_Tahaa','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6628','D_Tahiti','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9308','ATRF2014_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9701','ETRF2000-PL_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4223','GCS_Carthage_Degree','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4314','GCS_Deutsche_Hauptdreiecksnetz','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4698','GCS_K0_1949','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4696','GCS_Kasai_1955','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4737','GCS_Korea_2000','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4181','GCS_Luxembourg_1930','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4617','GCS_North_American_1983_CSRS98','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','ESRI','37245','GCS_Observ_Meteorologico_1939','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4626','GCS_Piton_des_Neiges','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4626','GCS_Reunion','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5360','GCS_SIRGAS-Chile','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5359','GCS_SIRGAS-Chile_3D','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4629','GCS_Tahaa','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4628','GCS_Tahiti','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4304','GCS_Voirol_1875_Degree','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9379','IGb14_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9332','KSA-GRF17_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9546','LTF2004(G)_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9893','LUREF_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5342','POSGAR_3D','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9695','REDGEOMIN_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','20040','SIRGAS-Chile_2021_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9469','SRGI2013_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9754','WGS_1984_(G2139)_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9754','WGS_84_(G2139)_(3D)','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2000','Anguilla_1957_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2001','Antigua_1943_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2002','Dominica_1945_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2003','Grenada_1953_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2004','Montserrat_1958_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2005','St_Kitts_1955_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2006','St_Lucia_1955_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2007','St_Vincent_1945_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2008','NAD_1927_CGQ77_MTM_2_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2009','NAD_1927_CGQ77_MTM_3_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2010','NAD_1927_CGQ77_MTM_4_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2011','NAD_1927_CGQ77_MTM_5_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2012','NAD_1927_CGQ77_MTM_6_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2013','NAD_1927_CGQ77_MTM_7_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2014','NAD_1927_CGQ77_MTM_8_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2015','NAD_1927_CGQ77_MTM_9_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2016','NAD_1927_CGQ77_MTM_10_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2017','NAD_1927_DEF_1976_MTM_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2018','NAD_1927_DEF_1976_MTM_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2019','NAD_1927_DEF_1976_MTM_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2020','NAD_1927_DEF_1976_MTM_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2021','NAD_1927_DEF_1976_MTM_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2022','NAD_1927_DEF_1976_MTM_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2023','NAD_1927_DEF_1976_MTM_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2024','NAD_1927_DEF_1976_MTM_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2025','NAD_1927_DEF_1976_MTM_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2026','NAD_1927_DEF_1976_MTM_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2027','NAD_1927_DEF_1976_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2028','NAD_1927_DEF_1976_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2029','NAD_1927_DEF_1976_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2030','NAD_1927_DEF_1976_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2031','NAD_1927_CGQ77_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2032','NAD_1927_CGQ77_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2033','NAD_1927_CGQ77_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2034','NAD_1927_CGQ77_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2035','NAD_1927_CGQ77_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2036','NAD_1983_CSRS_New_Brunswick_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2037','NAD_1983_CSRS_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2038','NAD_1983_CSRS_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2039','Israel_TM_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2040','Locodjo_1965_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2041','Abidjan_1987_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2042','Locodjo_1965_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2043','Abidjan_1987_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2044','Hanoi_1972_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2045','Hanoi_1972_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2056','CH1903+_LV95','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2057','Rassadiran_Nakhl_e_Taqi','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2058','ED_1950_ED77_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2059','ED_1950_ED77_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2060','ED_1950_ED77_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2061','ED_1950_ED77_UTM_Zone_41N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2062','Madrid_1870_Madrid_Spain','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2063','Dabola_1981_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2064','Dabola_1981_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2065','S-JTSK_Ferro_Krovak','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2066','Mount_Dillon_Tobago_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2067','Naparima_1955_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2068','ELD_1979_Libya_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2069','ELD_1979_Libya_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2070','ELD_1979_Libya_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2071','ELD_1979_Libya_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2072','ELD_1979_Libya_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2073','ELD_1979_Libya_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2074','ELD_1979_Libya_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2075','ELD_1979_Libya_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2076','ELD_1979_Libya_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2077','ELD_1979_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2078','ELD_1979_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2079','ELD_1979_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2080','ELD_1979_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2081','Chos_Malal_1914_Argentina_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2082','Pampa_del_Castillo_Argentina_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2083','Hito_XVIII_1963_Argentina_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2084','Hito_XVIII_1963_UTM_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2085','NAD_1927_Cuba_Norte','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2086','NAD_1927_Cuba_Sur','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2087','ELD_1979_TM_12_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2088','Carthage_TM_11_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2089','Yemen_NGN_1996_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2090','Yemen_NGN_1996_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2091','South_Yemen_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2092','South_Yemen_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2093','Hanoi_1972_GK_106_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2094','WGS_1972_BE_TM_106_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2095','Bissau_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2096','Korean_1985_Korea_East_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2097','Korean_1985_Korea_Central_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2098','Korean_1985_Korea_West_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2099','Qatar_1948_Qatar_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2100','Greek_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2101','Lake_Maracaibo_Grid_M1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2102','Lake_Maracaibo_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2103','Lake_Maracaibo_Grid_M3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2104','Lake_Maracaibo_La_Rosa_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2105','NZGD_2000_Mount_Eden_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2106','NZGD_2000_Bay_of_Plenty_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2107','NZGD_2000_Poverty_Bay_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2108','NZGD_2000_Hawkes_Bay_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2109','NZGD_2000_Taranaki_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2110','NZGD_2000_Tuhirangi_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2111','NZGD_2000_Wanganui_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2112','NZGD_2000_Wairarapa_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2113','NZGD_2000_Wellington_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2114','NZGD_2000_Collingwood_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2115','NZGD_2000_Nelson_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2116','NZGD_2000_Karamea_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2117','NZGD_2000_Buller_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2118','NZGD_2000_Grey_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2119','NZGD_2000_Amuri_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2120','NZGD_2000_Marlborough_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2121','NZGD_2000_Hokitika_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2122','NZGD_2000_Okarito_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2123','NZGD_2000_Jacksons_Bay_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2124','NZGD_2000_Mount_Pleasant_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2125','NZGD_2000_Gawler_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2126','NZGD_2000_Timaru_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2127','NZGD_2000_Lindis_Peak_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2128','NZGD_2000_Mount_Nicholas_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2129','NZGD_2000_Mount_York_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2130','NZGD_2000_Observation_Point_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2131','NZGD_2000_North_Taieri_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2132','NZGD_2000_Bluff_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2133','NZGD_2000_UTM_Zone_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2134','NZGD_2000_UTM_Zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2135','NZGD_2000_UTM_Zone_60S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2136','Accra_Ghana_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2137','Accra_TM_1_NW','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2138','NAD_1927_CGQ77_Quebec_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2139','NAD_1983_CSRS_MTM_2_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2140','NAD_1983_CSRS_MTM_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2141','NAD_1983_CSRS_MTM_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2142','NAD_1983_CSRS_MTM_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2143','NAD_1983_CSRS_MTM_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2144','NAD_1983_CSRS_MTM_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2145','NAD_1983_CSRS_MTM_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2146','NAD_1983_CSRS_MTM_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2147','NAD_1983_CSRS_MTM_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2148','NAD_1983_CSRS_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2149','NAD_1983_CSRS_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2150','NAD_1983_CSRS_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2151','NAD_1983_CSRS_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2152','NAD_1983_CSRS_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2153','NAD_1983_CSRS_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2154','RGF_1993_Lambert_93','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2155','Samoa_1962_Samoa_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2157','IRENET95_Irish_Transverse_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2158','IRENET95_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2159','Sierra_Leone_1924_New_Colony_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2160','Sierra_Leone_1924_New_War_Office_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2161','Sierra_Leone_1968_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2162','Sierra_Leone_1968_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2163','US_National_Atlas_Equal_Area','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2164','Locodjo_1965_TM_5_NW','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2165','Abidjan_1987_TM_5_NW','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2166','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2167','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2168','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2169','LUREF_Luxembourg_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2170','MGI_Slovenia_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2172','Pulkovo_1942_Adj_1958_Poland_Zone_II','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2173','Pulkovo_1942_Adj_1958_Poland_Zone_III','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2174','Pulkovo_1942_Adj_1958_Poland_Zone_IV','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2175','Pulkovo_1942_Adj_1958_Poland_Zone_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2176','ETRF2000-PL_CS2000_15_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2177','ETRF2000-PL_CS2000_18_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2178','ETRF2000-PL_CS2000_21_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2179','ETRF2000-PL_CS2000_24_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2180','ETRF2000-PL_CS92','ESRI'); INSERT INTO "conversion" VALUES('ESRI','2181','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',9500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_2181_USAGE','conversion','ESRI','2181','EPSG','1524','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','2181','ED_1950_Turkey_9',NULL,'EPSG','4400','EPSG','4230','ESRI','2181',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_2181_USAGE','projected_crs','ESRI','2181','EPSG','1524','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','2182','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',10500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_2182_USAGE','conversion','ESRI','2182','EPSG','1525','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','2182','ED_1950_Turkey_10',NULL,'EPSG','4400','EPSG','4230','ESRI','2182',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_2182_USAGE','projected_crs','ESRI','2182','EPSG','1525','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','2183','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',11500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_2183_USAGE','conversion','ESRI','2183','EPSG','1526','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','2183','ED_1950_Turkey_11',NULL,'EPSG','4400','EPSG','4230','ESRI','2183',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_2183_USAGE','projected_crs','ESRI','2183','EPSG','1526','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','2184','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',12500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_2184_USAGE','conversion','ESRI','2184','EPSG','1527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','2184','ED_1950_Turkey_12',NULL,'EPSG','4400','EPSG','4230','ESRI','2184',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_2184_USAGE','projected_crs','ESRI','2184','EPSG','1527','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','2185','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',13500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_2185_USAGE','conversion','ESRI','2185','EPSG','1528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','2185','ED_1950_Turkey_13',NULL,'EPSG','4400','EPSG','4230','ESRI','2185',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_2185_USAGE','projected_crs','ESRI','2185','EPSG','1528','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','2186','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',42.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',14500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_2186_USAGE','conversion','ESRI','2186','EPSG','1529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','2186','ED_1950_Turkey_14',NULL,'EPSG','4400','EPSG','4230','ESRI','2186',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_2186_USAGE','projected_crs','ESRI','2186','EPSG','1529','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','2187','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',15500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_2187_USAGE','conversion','ESRI','2187','EPSG','1530','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','2187','ED_1950_Turkey_15',NULL,'EPSG','4400','EPSG','4230','ESRI','2187',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_2187_USAGE','projected_crs','ESRI','2187','EPSG','1530','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2188','Azores_Occidental_1939_UTM_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2189','Azores_Central_1948_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2190','Azores_Oriental_1940_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2191','Madeira_1936_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2192','ED_1950_France_EuroLambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2193','NZGD_2000_New_Zealand_Transverse_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2195','NAD_1983_HARN_UTM_Zone_2S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2196','ETRS_1989_Kp2000_Jutland','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2197','ETRS_1989_Kp2000_Zealand','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2198','ETRS_1989_Kp2000_Bornholm','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2200','ATS_1977_New_Brunswick_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2201','REGVEN_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2202','REGVEN_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2203','REGVEN_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2204','NAD_1927_StatePlane_Tennessee_FIPS_4100','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2205','NAD_1983_StatePlane_Kentucky_North_FIPS_1601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2206','ED_1950_3_Degree_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2207','ED_1950_3_Degree_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2208','ED_1950_3_Degree_GK_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2209','ED_1950_3_Degree_GK_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2210','ED_1950_3_Degree_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2211','ED_1950_3_Degree_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2212','ED_1950_3_Degree_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2213','ETRS_1989_TM_30_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2214','Douala_1948_AEF_West','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2215','Manoca_1962_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2216','Qornoq_1927_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2217','Qornoq_1927_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2219','ATS_1977_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2220','ATS_1977_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2222','NAD_1983_StatePlane_Arizona_East_FIPS_0201_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2223','NAD_1983_StatePlane_Arizona_Central_FIPS_0202_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2224','NAD_1983_StatePlane_Arizona_West_FIPS_0203_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2225','NAD_1983_StatePlane_California_I_FIPS_0401_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2226','NAD_1983_StatePlane_California_II_FIPS_0402_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2227','NAD_1983_StatePlane_California_III_FIPS_0403_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2228','NAD_1983_StatePlane_California_IV_FIPS_0404_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2229','NAD_1983_StatePlane_California_V_FIPS_0405_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2230','NAD_1983_StatePlane_California_VI_FIPS_0406_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2231','NAD_1983_StatePlane_Colorado_North_FIPS_0501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2232','NAD_1983_StatePlane_Colorado_Central_FIPS_0502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2233','NAD_1983_StatePlane_Colorado_South_FIPS_0503_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2234','NAD_1983_StatePlane_Connecticut_FIPS_0600_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2235','NAD_1983_StatePlane_Delaware_FIPS_0700_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2236','NAD_1983_StatePlane_Florida_East_FIPS_0901_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2237','NAD_1983_StatePlane_Florida_West_FIPS_0902_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2238','NAD_1983_StatePlane_Florida_North_FIPS_0903_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2239','NAD_1983_StatePlane_Georgia_East_FIPS_1001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2240','NAD_1983_StatePlane_Georgia_West_FIPS_1002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2241','NAD_1983_StatePlane_Idaho_East_FIPS_1101_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2242','NAD_1983_StatePlane_Idaho_Central_FIPS_1102_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2243','NAD_1983_StatePlane_Idaho_West_FIPS_1103_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2244','NAD_1983_StatePlane_Indiana_East_FIPS_1301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2245','NAD_1983_StatePlane_Indiana_West_FIPS_1302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2246','NAD_1983_StatePlane_Kentucky_North_FIPS_1601_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2247','NAD_1983_StatePlane_Kentucky_South_FIPS_1602_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2248','NAD_1983_StatePlane_Maryland_FIPS_1900_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2249','NAD_1983_StatePlane_Massachusetts_Mainland_FIPS_2001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2250','NAD_1983_StatePlane_Massachusetts_Island_FIPS_2002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2251','NAD_1983_StatePlane_Michigan_North_FIPS_2111_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2252','NAD_1983_StatePlane_Michigan_Central_FIPS_2112_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2253','NAD_1983_StatePlane_Michigan_South_FIPS_2113_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2254','NAD_1983_StatePlane_Mississippi_East_FIPS_2301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2255','NAD_1983_StatePlane_Mississippi_West_FIPS_2302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2256','NAD_1983_StatePlane_Montana_FIPS_2500_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2257','NAD_1983_StatePlane_New_Mexico_East_FIPS_3001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2258','NAD_1983_StatePlane_New_Mexico_Central_FIPS_3002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2259','NAD_1983_StatePlane_New_Mexico_West_FIPS_3003_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2260','NAD_1983_StatePlane_New_York_East_FIPS_3101_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2261','NAD_1983_StatePlane_New_York_Central_FIPS_3102_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2262','NAD_1983_StatePlane_New_York_West_FIPS_3103_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2263','NAD_1983_StatePlane_New_York_Long_Island_FIPS_3104_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2264','NAD_1983_StatePlane_North_Carolina_FIPS_3200_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2265','NAD_1983_StatePlane_North_Dakota_North_FIPS_3301_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2266','NAD_1983_StatePlane_North_Dakota_South_FIPS_3302_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2267','NAD_1983_StatePlane_Oklahoma_North_FIPS_3501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2268','NAD_1983_StatePlane_Oklahoma_South_FIPS_3502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2269','NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2270','NAD_1983_StatePlane_Oregon_South_FIPS_3602_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2271','NAD_1983_StatePlane_Pennsylvania_North_FIPS_3701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2272','NAD_1983_StatePlane_Pennsylvania_South_FIPS_3702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2273','NAD_1983_StatePlane_South_Carolina_FIPS_3900_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2274','NAD_1983_StatePlane_Tennessee_FIPS_4100_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2275','NAD_1983_StatePlane_Texas_North_FIPS_4201_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2276','NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2277','NAD_1983_StatePlane_Texas_Central_FIPS_4203_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2278','NAD_1983_StatePlane_Texas_South_Central_FIPS_4204_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2279','NAD_1983_StatePlane_Texas_South_FIPS_4205_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2280','NAD_1983_StatePlane_Utah_North_FIPS_4301_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2281','NAD_1983_StatePlane_Utah_Central_FIPS_4302_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2282','NAD_1983_StatePlane_Utah_South_FIPS_4303_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2283','NAD_1983_StatePlane_Virginia_North_FIPS_4501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2284','NAD_1983_StatePlane_Virginia_South_FIPS_4502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2285','NAD_1983_StatePlane_Washington_North_FIPS_4601_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2286','NAD_1983_StatePlane_Washington_South_FIPS_4602_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2287','NAD_1983_StatePlane_Wisconsin_North_FIPS_4801_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2288','NAD_1983_StatePlane_Wisconsin_Central_FIPS_4802_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2289','NAD_1983_StatePlane_Wisconsin_South_FIPS_4803_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2290','Prince_Edward_Island_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2291','NAD_1983_CSRS_Prince_Edward_Island','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2292','NAD_1983_CSRS_Prince_Edward_Island','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2294','ATS_1977_MTM_4_Nova_Scotia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2295','ATS_1977_MTM_5_Nova_Scotia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2308','Batavia_TM_109_SE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2309','WGS_1984_TM_116_SE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2310','WGS_1984_TM_132_SE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2311','WGS_1984_TM_6_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2312','Garoua_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2313','Kousseri_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2314','Trinidad_1903_Trinidad_Grid_Feet_Clarke','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2315','Campo_Inchauspe_UTM_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2316','Campo_Inchauspe_UTM_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2317','PSAD_1956_ICN_Regional','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2318','Ain_el_Abd_Aramco_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2319','ED_1950_TM27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2320','ED_1950_TM30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2321','ED_1950_TM33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2322','ED_1950_TM36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2323','ED_1950_TM39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2324','ED_1950_TM42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2325','ED_1950_TM45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2326','Hong_Kong_1980_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2327','Xian_1980_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2328','Xian_1980_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2329','Xian_1980_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2330','Xian_1980_GK_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2331','Xian_1980_GK_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2332','Xian_1980_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2333','Xian_1980_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2334','Xian_1980_GK_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2335','Xian_1980_GK_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2336','Xian_1980_GK_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2337','Xian_1980_GK_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2338','Xian_1980_GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2339','Xian_1980_GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2340','Xian_1980_GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2341','Xian_1980_GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2342','Xian_1980_GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2343','Xian_1980_GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2344','Xian_1980_GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2345','Xian_1980_GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2346','Xian_1980_GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2347','Xian_1980_GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2348','Xian_1980_GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2349','Xian_1980_3_Degree_GK_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2350','Xian_1980_3_Degree_GK_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2351','Xian_1980_3_Degree_GK_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2352','Xian_1980_3_Degree_GK_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2353','Xian_1980_3_Degree_GK_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2354','Xian_1980_3_Degree_GK_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2355','Xian_1980_3_Degree_GK_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2356','Xian_1980_3_Degree_GK_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2357','Xian_1980_3_Degree_GK_Zone_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2358','Xian_1980_3_Degree_GK_Zone_34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2359','Xian_1980_3_Degree_GK_Zone_35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2360','Xian_1980_3_Degree_GK_Zone_36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2361','Xian_1980_3_Degree_GK_Zone_37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2362','Xian_1980_3_Degree_GK_Zone_38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2363','Xian_1980_3_Degree_GK_Zone_39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2364','Xian_1980_3_Degree_GK_Zone_40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2365','Xian_1980_3_Degree_GK_Zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2366','Xian_1980_3_Degree_GK_Zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2367','Xian_1980_3_Degree_GK_Zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2368','Xian_1980_3_Degree_GK_Zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2369','Xian_1980_3_Degree_GK_Zone_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2370','Xian_1980_3_Degree_GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2371','Xian_1980_3_Degree_GK_CM_78E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2372','Xian_1980_3_Degree_GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2373','Xian_1980_3_Degree_GK_CM_84E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2374','Xian_1980_3_Degree_GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2375','Xian_1980_3_Degree_GK_CM_90E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2376','Xian_1980_3_Degree_GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2377','Xian_1980_3_Degree_GK_CM_96E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2378','Xian_1980_3_Degree_GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2379','Xian_1980_3_Degree_GK_CM_102E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2380','Xian_1980_3_Degree_GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2381','Xian_1980_3_Degree_GK_CM_108E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2382','Xian_1980_3_Degree_GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2383','Xian_1980_3_Degree_GK_CM_114E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2384','Xian_1980_3_Degree_GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2385','Xian_1980_3_Degree_GK_CM_120E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2386','Xian_1980_3_Degree_GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2387','Xian_1980_3_Degree_GK_CM_126E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2388','Xian_1980_3_Degree_GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2389','Xian_1980_3_Degree_GK_CM_132E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2390','Xian_1980_3_Degree_GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2391','Finland_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2392','Finland_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2393','Finland_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2394','Finland_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2395','South_Yemen_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2396','South_Yemen_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2397','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2398','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2399','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2400','RT90_25_gon_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2401','Beijing_1954_3_Degree_GK_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2402','Beijing_1954_3_Degree_GK_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2403','Beijing_1954_3_Degree_GK_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2404','Beijing_1954_3_Degree_GK_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2405','Beijing_1954_3_Degree_GK_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2406','Beijing_1954_3_Degree_GK_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2407','Beijing_1954_3_Degree_GK_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2408','Beijing_1954_3_Degree_GK_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2409','Beijing_1954_3_Degree_GK_Zone_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2410','Beijing_1954_3_Degree_GK_Zone_34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2411','Beijing_1954_3_Degree_GK_Zone_35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2412','Beijing_1954_3_Degree_GK_Zone_36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2413','Beijing_1954_3_Degree_GK_Zone_37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2414','Beijing_1954_3_Degree_GK_Zone_38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2415','Beijing_1954_3_Degree_GK_Zone_39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2416','Beijing_1954_3_Degree_GK_Zone_40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2417','Beijing_1954_3_Degree_GK_Zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2418','Beijing_1954_3_Degree_GK_Zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2419','Beijing_1954_3_Degree_GK_Zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2420','Beijing_1954_3_Degree_GK_Zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2421','Beijing_1954_3_Degree_GK_Zone_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2422','Beijing_1954_3_Degree_GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2423','Beijing_1954_3_Degree_GK_CM_78E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2424','Beijing_1954_3_Degree_GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2425','Beijing_1954_3_Degree_GK_CM_84E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2426','Beijing_1954_3_Degree_GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2427','Beijing_1954_3_Degree_GK_CM_90E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2428','Beijing_1954_3_Degree_GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2429','Beijing_1954_3_Degree_GK_CM_96E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2430','Beijing_1954_3_Degree_GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2431','Beijing_1954_3_Degree_GK_CM_102E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2432','Beijing_1954_3_Degree_GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2433','Beijing_1954_3_Degree_GK_CM_108E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2434','Beijing_1954_3_Degree_GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2435','Beijing_1954_3_Degree_GK_CM_114E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2436','Beijing_1954_3_Degree_GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2437','Beijing_1954_3_Degree_GK_CM_120E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2438','Beijing_1954_3_Degree_GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2439','Beijing_1954_3_Degree_GK_CM_126E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2440','Beijing_1954_3_Degree_GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2441','Beijing_1954_3_Degree_GK_CM_132E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2442','Beijing_1954_3_Degree_GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2443','JGD_2000_Japan_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2444','JGD_2000_Japan_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2445','JGD_2000_Japan_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2446','JGD_2000_Japan_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2447','JGD_2000_Japan_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2448','JGD_2000_Japan_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2449','JGD_2000_Japan_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2450','JGD_2000_Japan_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2451','JGD_2000_Japan_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2452','JGD_2000_Japan_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2453','JGD_2000_Japan_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2454','JGD_2000_Japan_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2455','JGD_2000_Japan_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2456','JGD_2000_Japan_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2457','JGD_2000_Japan_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2458','JGD_2000_Japan_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2459','JGD_2000_Japan_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2460','JGD_2000_Japan_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2461','JGD_2000_Japan_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2462','Albanian_1987_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2463','Pulkovo_1995_Gauss-Kruger_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2464','Pulkovo_1995_Gauss-Kruger_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2465','Pulkovo_1995_Gauss-Kruger_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2466','Pulkovo_1995_Gauss-Kruger_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2467','Pulkovo_1995_Gauss-Kruger_CM_45E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2468','Pulkovo_1995_Gauss-Kruger_CM_51E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2469','Pulkovo_1995_Gauss-Kruger_CM_57E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2470','Pulkovo_1995_Gauss-Kruger_CM_63E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2471','Pulkovo_1995_Gauss-Kruger_CM_69E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2472','Pulkovo_1995_Gauss-Kruger_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2473','Pulkovo_1995_Gauss-Kruger_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2474','Pulkovo_1995_Gauss-Kruger_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2475','Pulkovo_1995_Gauss-Kruger_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2476','Pulkovo_1995_Gauss-Kruger_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2477','Pulkovo_1995_Gauss-Kruger_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2478','Pulkovo_1995_Gauss-Kruger_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2479','Pulkovo_1995_Gauss-Kruger_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2480','Pulkovo_1995_Gauss-Kruger_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2481','Pulkovo_1995_Gauss-Kruger_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2482','Pulkovo_1995_Gauss-Kruger_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2483','Pulkovo_1995_Gauss-Kruger_CM_141E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2484','Pulkovo_1995_Gauss-Kruger_CM_147E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2485','Pulkovo_1995_Gauss-Kruger_CM_153E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2486','Pulkovo_1995_Gauss-Kruger_CM_159E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2487','Pulkovo_1995_Gauss-Kruger_CM_165E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2488','Pulkovo_1995_Gauss-Kruger_CM_171E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2489','Pulkovo_1995_Gauss-Kruger_CM_177E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2490','Pulkovo_1995_Gauss-Kruger_CM_177W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2491','Pulkovo_1995_Gauss-Kruger_CM_171W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2494','Pulkovo_1942_Gauss-Kruger_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2495','Pulkovo_1942_Gauss-Kruger_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2496','Pulkovo_1942_Gauss-Kruger_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2497','Pulkovo_1942_Gauss-Kruger_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2498','Pulkovo_1942_Gauss-Kruger_CM_45E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2499','Pulkovo_1942_Gauss-Kruger_CM_51E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2500','Pulkovo_1942_Gauss-Kruger_CM_57E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2501','Pulkovo_1942_Gauss-Kruger_CM_63E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2502','Pulkovo_1942_Gauss-Kruger_CM_69E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2503','Pulkovo_1942_Gauss-Kruger_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2504','Pulkovo_1942_Gauss-Kruger_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2505','Pulkovo_1942_Gauss-Kruger_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2506','Pulkovo_1942_Gauss-Kruger_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2507','Pulkovo_1942_Gauss-Kruger_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2508','Pulkovo_1942_Gauss-Kruger_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2509','Pulkovo_1942_Gauss-Kruger_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2510','Pulkovo_1942_Gauss-Kruger_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2511','Pulkovo_1942_Gauss-Kruger_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2512','Pulkovo_1942_Gauss-Kruger_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2513','Pulkovo_1942_Gauss-Kruger_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2514','Pulkovo_1942_Gauss-Kruger_CM_141E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2515','Pulkovo_1942_Gauss-Kruger_CM_147E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2516','Pulkovo_1942_Gauss-Kruger_CM_153E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2517','Pulkovo_1942_Gauss-Kruger_CM_159E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2518','Pulkovo_1942_Gauss-Kruger_CM_165E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2519','Pulkovo_1942_Gauss-Kruger_CM_171E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2520','Pulkovo_1942_Gauss-Kruger_CM_177E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2521','Pulkovo_1942_Gauss-Kruger_CM_177W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2522','Pulkovo_1942_Gauss-Kruger_CM_171W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2523','Pulkovo_1942_3_Degree_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2524','Pulkovo_1942_3_Degree_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2525','Pulkovo_1942_3_Degree_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2526','Pulkovo_1942_3_Degree_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2527','Pulkovo_1942_3_Degree_GK_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2528','Pulkovo_1942_3_Degree_GK_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2529','Pulkovo_1942_3_Degree_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2530','Pulkovo_1942_3_Degree_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2531','Pulkovo_1942_3_Degree_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2532','Pulkovo_1942_3_Degree_GK_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2533','Pulkovo_1942_3_Degree_GK_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2534','Pulkovo_1942_3_Degree_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2535','Pulkovo_1942_3_Degree_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2536','Pulkovo_1942_3_Degree_GK_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2537','Pulkovo_1942_3_Degree_GK_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2538','Pulkovo_1942_3_Degree_GK_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2539','Pulkovo_1942_3_Degree_GK_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2540','Pulkovo_1942_3_Degree_GK_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2541','Pulkovo_1942_3_Degree_GK_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2542','Pulkovo_1942_3_Degree_GK_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2543','Pulkovo_1942_3_Degree_GK_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2544','Pulkovo_1942_3_Degree_GK_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2545','Pulkovo_1942_3_Degree_GK_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2546','Pulkovo_1942_3_Degree_GK_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2547','Pulkovo_1942_3_Degree_GK_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2548','Pulkovo_1942_3_Degree_GK_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2549','Pulkovo_1942_3_Degree_GK_Zone_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2550','Samboja_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2551','Pulkovo_1942_3_Degree_GK_Zone_34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2552','Pulkovo_1942_3_Degree_GK_Zone_35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2553','Pulkovo_1942_3_Degree_GK_Zone_36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2554','Pulkovo_1942_3_Degree_GK_Zone_37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2555','Pulkovo_1942_3_Degree_GK_Zone_38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2556','Pulkovo_1942_3_Degree_GK_Zone_39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2557','Pulkovo_1942_3_Degree_GK_Zone_40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2558','Pulkovo_1942_3_Degree_GK_Zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2559','Pulkovo_1942_3_Degree_GK_Zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2560','Pulkovo_1942_3_Degree_GK_Zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2561','Pulkovo_1942_3_Degree_GK_Zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2562','Pulkovo_1942_3_Degree_GK_Zone_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2563','Pulkovo_1942_3_Degree_GK_Zone_46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2564','Pulkovo_1942_3_Degree_GK_Zone_47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2565','Pulkovo_1942_3_Degree_GK_Zone_48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2566','Pulkovo_1942_3_Degree_GK_Zone_49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2567','Pulkovo_1942_3_Degree_GK_Zone_50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2568','Pulkovo_1942_3_Degree_GK_Zone_51','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2569','Pulkovo_1942_3_Degree_GK_Zone_52','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2570','Pulkovo_1942_3_Degree_GK_Zone_53','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2571','Pulkovo_1942_3_Degree_GK_Zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2572','Pulkovo_1942_3_Degree_GK_Zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2573','Pulkovo_1942_3_Degree_GK_Zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2574','Pulkovo_1942_3_Degree_GK_Zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2575','Pulkovo_1942_3_Degree_GK_Zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2576','Pulkovo_1942_3_Degree_GK_Zone_59','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2577','Pulkovo_1942_3_Degree_GK_Zone_60','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2578','Pulkovo_1942_3_Degree_GK_Zone_61','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2579','Pulkovo_1942_3_Degree_GK_Zone_62','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2580','Pulkovo_1942_3_Degree_GK_Zone_63','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2581','Pulkovo_1942_3_Degree_GK_Zone_64','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2582','Pulkovo_1942_3_Degree_GK_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2583','Pulkovo_1942_3_Degree_GK_CM_24E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2584','Pulkovo_1942_3_Degree_GK_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2585','Pulkovo_1942_3_Degree_GK_CM_30E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2586','Pulkovo_1942_3_Degree_GK_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2587','Pulkovo_1942_3_Degree_GK_CM_36E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2588','Pulkovo_1942_3_Degree_GK_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2589','Pulkovo_1942_3_Degree_GK_CM_42E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2590','Pulkovo_1942_3_Degree_GK_CM_45E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2591','Pulkovo_1942_3_Degree_GK_CM_48E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2592','Pulkovo_1942_3_Degree_GK_CM_51E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2593','Pulkovo_1942_3_Degree_GK_CM_54E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2594','Pulkovo_1942_3_Degree_GK_CM_57E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2595','Pulkovo_1942_3_Degree_GK_CM_60E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2596','Pulkovo_1942_3_Degree_GK_CM_63E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2597','Pulkovo_1942_3_Degree_GK_CM_66E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2598','Pulkovo_1942_3_Degree_GK_CM_69E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2599','Pulkovo_1942_3_Degree_GK_CM_72E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2600','LKS_1994_Lithuania_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2601','Pulkovo_1942_3_Degree_GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2602','Pulkovo_1942_3_Degree_GK_CM_78E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2603','Pulkovo_1942_3_Degree_GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2604','Pulkovo_1942_3_Degree_GK_CM_84E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2605','Pulkovo_1942_3_Degree_GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2606','Pulkovo_1942_3_Degree_GK_CM_90E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2607','Pulkovo_1942_3_Degree_GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2608','Pulkovo_1942_3_Degree_GK_CM_96E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2609','Pulkovo_1942_3_Degree_GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2610','Pulkovo_1942_3_Degree_GK_CM_102E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2611','Pulkovo_1942_3_Degree_GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2612','Pulkovo_1942_3_Degree_GK_CM_108E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2613','Pulkovo_1942_3_Degree_GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2614','Pulkovo_1942_3_Degree_GK_CM_114E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2615','Pulkovo_1942_3_Degree_GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2616','Pulkovo_1942_3_Degree_GK_CM_120E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2617','Pulkovo_1942_3_Degree_GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2618','Pulkovo_1942_3_Degree_GK_CM_126E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2619','Pulkovo_1942_3_Degree_GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2620','Pulkovo_1942_3_Degree_GK_CM_132E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2621','Pulkovo_1942_3_Degree_GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2622','Pulkovo_1942_3_Degree_GK_CM_138E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2623','Pulkovo_1942_3_Degree_GK_CM_141E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2624','Pulkovo_1942_3_Degree_GK_CM_144E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2625','Pulkovo_1942_3_Degree_GK_CM_147E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2626','Pulkovo_1942_3_Degree_GK_CM_150E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2627','Pulkovo_1942_3_Degree_GK_CM_153E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2628','Pulkovo_1942_3_Degree_GK_CM_156E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2629','Pulkovo_1942_3_Degree_GK_CM_159E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2630','Pulkovo_1942_3_Degree_GK_CM_162E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2631','Pulkovo_1942_3_Degree_GK_CM_165E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2632','Pulkovo_1942_3_Degree_GK_CM_168E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2633','Pulkovo_1942_3_Degree_GK_CM_171E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2634','Pulkovo_1942_3_Degree_GK_CM_174E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2635','Pulkovo_1942_3_Degree_GK_CM_177E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2636','Pulkovo_1942_3_Degree_GK_CM_180E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2637','Pulkovo_1942_3_Degree_GK_CM_177W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2638','Pulkovo_1942_3_Degree_GK_CM_174W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2639','Pulkovo_1942_3_Degree_GK_CM_171W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2640','Pulkovo_1942_3_Degree_GK_CM_168W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2641','Pulkovo_1995_3_Degree_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2642','Pulkovo_1995_3_Degree_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2643','Pulkovo_1995_3_Degree_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2644','Pulkovo_1995_3_Degree_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2645','Pulkovo_1995_3_Degree_GK_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2646','Pulkovo_1995_3_Degree_GK_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2647','Pulkovo_1995_3_Degree_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2648','Pulkovo_1995_3_Degree_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2649','Pulkovo_1995_3_Degree_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2650','Pulkovo_1995_3_Degree_GK_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2651','Pulkovo_1995_3_Degree_GK_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2652','Pulkovo_1995_3_Degree_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2653','Pulkovo_1995_3_Degree_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2654','Pulkovo_1995_3_Degree_GK_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2655','Pulkovo_1995_3_Degree_GK_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2656','Pulkovo_1995_3_Degree_GK_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2657','Pulkovo_1995_3_Degree_GK_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2658','Pulkovo_1995_3_Degree_GK_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2659','Pulkovo_1995_3_Degree_GK_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2660','Pulkovo_1995_3_Degree_GK_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2661','Pulkovo_1995_3_Degree_GK_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2662','Pulkovo_1995_3_Degree_GK_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2663','Pulkovo_1995_3_Degree_GK_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2664','Pulkovo_1995_3_Degree_GK_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2665','Pulkovo_1995_3_Degree_GK_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2666','Pulkovo_1995_3_Degree_GK_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2667','Pulkovo_1995_3_Degree_GK_Zone_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2668','Pulkovo_1995_3_Degree_GK_Zone_34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2669','Pulkovo_1995_3_Degree_GK_Zone_35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2670','Pulkovo_1995_3_Degree_GK_Zone_36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2671','Pulkovo_1995_3_Degree_GK_Zone_37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2672','Pulkovo_1995_3_Degree_GK_Zone_38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2673','Pulkovo_1995_3_Degree_GK_Zone_39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2674','Pulkovo_1995_3_Degree_GK_Zone_40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2675','Pulkovo_1995_3_Degree_GK_Zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2676','Pulkovo_1995_3_Degree_GK_Zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2677','Pulkovo_1995_3_Degree_GK_Zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2678','Pulkovo_1995_3_Degree_GK_Zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2679','Pulkovo_1995_3_Degree_GK_Zone_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2680','Pulkovo_1995_3_Degree_GK_Zone_46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2681','Pulkovo_1995_3_Degree_GK_Zone_47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2682','Pulkovo_1995_3_Degree_GK_Zone_48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2683','Pulkovo_1995_3_Degree_GK_Zone_49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2684','Pulkovo_1995_3_Degree_GK_Zone_50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2685','Pulkovo_1995_3_Degree_GK_Zone_51','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2686','Pulkovo_1995_3_Degree_GK_Zone_52','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2687','Pulkovo_1995_3_Degree_GK_Zone_53','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2688','Pulkovo_1995_3_Degree_GK_Zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2689','Pulkovo_1995_3_Degree_GK_Zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2690','Pulkovo_1995_3_Degree_GK_Zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2691','Pulkovo_1995_3_Degree_GK_Zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2692','Pulkovo_1995_3_Degree_GK_Zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2693','Pulkovo_1995_3_Degree_GK_Zone_59','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2694','Pulkovo_1995_3_Degree_GK_Zone_60','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2695','Pulkovo_1995_3_Degree_GK_Zone_61','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2696','Pulkovo_1995_3_Degree_GK_Zone_62','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2697','Pulkovo_1995_3_Degree_GK_Zone_63','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2698','Pulkovo_1995_3_Degree_GK_Zone_64','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2699','Pulkovo_1995_3_Degree_GK_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2700','Pulkovo_1995_3_Degree_GK_CM_24E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2701','Pulkovo_1995_3_Degree_GK_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2702','Pulkovo_1995_3_Degree_GK_CM_30E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2703','Pulkovo_1995_3_Degree_GK_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2704','Pulkovo_1995_3_Degree_GK_CM_36E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2705','Pulkovo_1995_3_Degree_GK_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2706','Pulkovo_1995_3_Degree_GK_CM_42E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2707','Pulkovo_1995_3_Degree_GK_CM_45E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2708','Pulkovo_1995_3_Degree_GK_CM_48E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2709','Pulkovo_1995_3_Degree_GK_CM_51E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2710','Pulkovo_1995_3_Degree_GK_CM_54E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2711','Pulkovo_1995_3_Degree_GK_CM_57E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2712','Pulkovo_1995_3_Degree_GK_CM_60E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2713','Pulkovo_1995_3_Degree_GK_CM_63E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2714','Pulkovo_1995_3_Degree_GK_CM_66E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2715','Pulkovo_1995_3_Degree_GK_CM_69E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2716','Pulkovo_1995_3_Degree_GK_CM_72E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2717','Pulkovo_1995_3_Degree_GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2718','Pulkovo_1995_3_Degree_GK_CM_78E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2719','Pulkovo_1995_3_Degree_GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2720','Pulkovo_1995_3_Degree_GK_CM_84E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2721','Pulkovo_1995_3_Degree_GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2722','Pulkovo_1995_3_Degree_GK_CM_90E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2723','Pulkovo_1995_3_Degree_GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2724','Pulkovo_1995_3_Degree_GK_CM_96E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2725','Pulkovo_1995_3_Degree_GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2726','Pulkovo_1995_3_Degree_GK_CM_102E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2727','Pulkovo_1995_3_Degree_GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2728','Pulkovo_1995_3_Degree_GK_CM_108E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2729','Pulkovo_1995_3_Degree_GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2730','Pulkovo_1995_3_Degree_GK_CM_114E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2731','Pulkovo_1995_3_Degree_GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2732','Pulkovo_1995_3_Degree_GK_CM_120E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2733','Pulkovo_1995_3_Degree_GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2734','Pulkovo_1995_3_Degree_GK_CM_126E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2735','Pulkovo_1995_3_Degree_GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2736','Tete_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2737','Tete_UTM_Zone_37S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2738','Pulkovo_1995_3_Degree_GK_CM_132E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2739','Pulkovo_1995_3_Degree_GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2740','Pulkovo_1995_3_Degree_GK_CM_138E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2741','Pulkovo_1995_3_Degree_GK_CM_141E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2742','Pulkovo_1995_3_Degree_GK_CM_144E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2743','Pulkovo_1995_3_Degree_GK_CM_147E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2744','Pulkovo_1995_3_Degree_GK_CM_150E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2745','Pulkovo_1995_3_Degree_GK_CM_153E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2746','Pulkovo_1995_3_Degree_GK_CM_156E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2747','Pulkovo_1995_3_Degree_GK_CM_159E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2748','Pulkovo_1995_3_Degree_GK_CM_162E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2749','Pulkovo_1995_3_Degree_GK_CM_165E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2750','Pulkovo_1995_3_Degree_GK_CM_168E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2751','Pulkovo_1995_3_Degree_GK_CM_171E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2752','Pulkovo_1995_3_Degree_GK_CM_174E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2753','Pulkovo_1995_3_Degree_GK_CM_177E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2754','Pulkovo_1995_3_Degree_GK_CM_180E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2755','Pulkovo_1995_3_Degree_GK_CM_177W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2756','Pulkovo_1995_3_Degree_GK_CM_174W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2757','Pulkovo_1995_3_Degree_GK_CM_171W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2758','Pulkovo_1995_3_Degree_GK_CM_168W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2759','NAD_1983_HARN_StatePlane_Alabama_East_FIPS_0101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2760','NAD_1983_HARN_StatePlane_Alabama_West_FIPS_0102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2761','NAD_1983_HARN_StatePlane_Arizona_East_FIPS_0201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2762','NAD_1983_HARN_StatePlane_Arizona_Central_FIPS_0202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2763','NAD_1983_HARN_StatePlane_Arizona_West_FIPS_0203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2764','NAD_1983_HARN_StatePlane_Arkansas_North_FIPS_0301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2765','NAD_1983_HARN_StatePlane_Arkansas_South_FIPS_0302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2766','NAD_1983_HARN_StatePlane_California_I_FIPS_0401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2767','NAD_1983_HARN_StatePlane_California_II_FIPS_0402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2768','NAD_1983_HARN_StatePlane_California_III_FIPS_0403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2769','NAD_1983_HARN_StatePlane_California_IV_FIPS_0404','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2770','NAD_1983_HARN_StatePlane_California_V_FIPS_0405','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2771','NAD_1983_HARN_StatePlane_California_VI_FIPS_0406','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2772','NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2773','NAD_1983_HARN_StatePlane_Colorado_Central_FIPS_0502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2774','NAD_1983_HARN_StatePlane_Colorado_South_FIPS_0503','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2775','NAD_1983_HARN_StatePlane_Connecticut_FIPS_0600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2776','NAD_1983_HARN_StatePlane_Delaware_FIPS_0700','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2777','NAD_1983_HARN_StatePlane_Florida_East_FIPS_0901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2778','NAD_1983_HARN_StatePlane_Florida_West_FIPS_0902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2779','NAD_1983_HARN_StatePlane_Florida_North_FIPS_0903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2780','NAD_1983_HARN_StatePlane_Georgia_East_FIPS_1001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2781','NAD_1983_HARN_StatePlane_Georgia_West_FIPS_1002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2782','NAD_1983_HARN_StatePlane_Hawaii_1_FIPS_5101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2783','NAD_1983_HARN_StatePlane_Hawaii_2_FIPS_5102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2784','NAD_1983_HARN_StatePlane_Hawaii_3_FIPS_5103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2785','NAD_1983_HARN_StatePlane_Hawaii_4_FIPS_5104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2786','NAD_1983_HARN_StatePlane_Hawaii_5_FIPS_5105','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2787','NAD_1983_HARN_StatePlane_Idaho_East_FIPS_1101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2788','NAD_1983_HARN_StatePlane_Idaho_Central_FIPS_1102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2789','NAD_1983_HARN_StatePlane_Idaho_West_FIPS_1103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2790','NAD_1983_HARN_StatePlane_Illinois_East_FIPS_1201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2791','NAD_1983_HARN_StatePlane_Illinois_West_FIPS_1202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2792','NAD_1983_HARN_StatePlane_Indiana_East_FIPS_1301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2793','NAD_1983_HARN_StatePlane_Indiana_West_FIPS_1302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2794','NAD_1983_HARN_StatePlane_Iowa_North_FIPS_1401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2795','NAD_1983_HARN_StatePlane_Iowa_South_FIPS_1402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2796','NAD_1983_HARN_StatePlane_Kansas_North_FIPS_1501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2797','NAD_1983_HARN_StatePlane_Kansas_South_FIPS_1502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2798','NAD_1983_HARN_StatePlane_Kentucky_North_FIPS_1601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2799','NAD_1983_HARN_StatePlane_Kentucky_South_FIPS_1602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2800','NAD_1983_HARN_StatePlane_Louisiana_North_FIPS_1701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2801','NAD_1983_HARN_StatePlane_Louisiana_South_FIPS_1702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2802','NAD_1983_HARN_StatePlane_Maine_East_FIPS_1801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2803','NAD_1983_HARN_StatePlane_Maine_West_FIPS_1802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2804','NAD_1983_HARN_StatePlane_Maryland_FIPS_1900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2805','NAD_1983_HARN_StatePlane_Massachusetts_Mainland_FIPS_2001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2806','NAD_1983_HARN_StatePlane_Massachusetts_Island_FIPS_2002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2807','NAD_1983_HARN_StatePlane_Michigan_North_FIPS_2111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2808','NAD_1983_HARN_StatePlane_Michigan_Central_FIPS_2112','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2809','NAD_1983_HARN_StatePlane_Michigan_South_FIPS_2113','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2810','NAD_1983_HARN_StatePlane_Minnesota_North_FIPS_2201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2811','NAD_1983_HARN_StatePlane_Minnesota_Central_FIPS_2202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2812','NAD_1983_HARN_StatePlane_Minnesota_South_FIPS_2203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2813','NAD_1983_HARN_StatePlane_Mississippi_East_FIPS_2301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2814','NAD_1983_HARN_StatePlane_Mississippi_West_FIPS_2302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2815','NAD_1983_HARN_StatePlane_Missouri_East_FIPS_2401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2816','NAD_1983_HARN_StatePlane_Missouri_Central_FIPS_2402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2817','NAD_1983_HARN_StatePlane_Missouri_West_FIPS_2403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2818','NAD_1983_HARN_StatePlane_Montana_FIPS_2500','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2819','NAD_1983_HARN_StatePlane_Nebraska_FIPS_2600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2820','NAD_1983_HARN_StatePlane_Nevada_East_FIPS_2701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2821','NAD_1983_HARN_StatePlane_Nevada_Central_FIPS_2702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2822','NAD_1983_HARN_StatePlane_Nevada_West_FIPS_2703','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2823','NAD_1983_HARN_StatePlane_New_Hampshire_FIPS_2800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2824','NAD_1983_HARN_StatePlane_New_Jersey_FIPS_2900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2825','NAD_1983_HARN_StatePlane_New_Mexico_East_FIPS_3001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2826','NAD_1983_HARN_StatePlane_New_Mexico_Central_FIPS_3002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2827','NAD_1983_HARN_StatePlane_New_Mexico_West_FIPS_3003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2828','NAD_1983_HARN_StatePlane_New_York_East_FIPS_3101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2829','NAD_1983_HARN_StatePlane_New_York_Central_FIPS_3102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2830','NAD_1983_HARN_StatePlane_New_York_West_FIPS_3103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2831','NAD_1983_HARN_StatePlane_New_York_Long_Island_FIPS_3104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2832','NAD_1983_HARN_StatePlane_North_Dakota_North_FIPS_3301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2833','NAD_1983_HARN_StatePlane_North_Dakota_South_FIPS_3302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2834','NAD_1983_HARN_StatePlane_Ohio_North_FIPS_3401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2835','NAD_1983_HARN_StatePlane_Ohio_South_FIPS_3402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2836','NAD_1983_HARN_StatePlane_Oklahoma_North_FIPS_3501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2837','NAD_1983_HARN_StatePlane_Oklahoma_South_FIPS_3502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2838','NAD_1983_HARN_StatePlane_Oregon_North_FIPS_3601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2839','NAD_1983_HARN_StatePlane_Oregon_South_FIPS_3602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2840','NAD_1983_HARN_StatePlane_Rhode_Island_FIPS_3800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2841','NAD_1983_HARN_StatePlane_South_Dakota_North_FIPS_4001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2842','NAD_1983_HARN_StatePlane_South_Dakota_South_FIPS_4002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2843','NAD_1983_HARN_StatePlane_Tennessee_FIPS_4100','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2844','NAD_1983_HARN_StatePlane_Texas_North_FIPS_4201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2845','NAD_1983_HARN_StatePlane_Texas_North_Central_FIPS_4202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2846','NAD_1983_HARN_StatePlane_Texas_Central_FIPS_4203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2847','NAD_1983_HARN_StatePlane_Texas_South_Central_FIPS_4204','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2848','NAD_1983_HARN_StatePlane_Texas_South_FIPS_4205','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2849','NAD_1983_HARN_StatePlane_Utah_North_FIPS_4301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2850','NAD_1983_HARN_StatePlane_Utah_Central_FIPS_4302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2851','NAD_1983_HARN_StatePlane_Utah_South_FIPS_4303','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2852','NAD_1983_HARN_StatePlane_Vermont_FIPS_4400','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2853','NAD_1983_HARN_StatePlane_Virginia_North_FIPS_4501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2854','NAD_1983_HARN_StatePlane_Virginia_South_FIPS_4502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2855','NAD_1983_HARN_StatePlane_Washington_North_FIPS_4601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2856','NAD_1983_HARN_StatePlane_Washington_South_FIPS_4602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2857','NAD_1983_HARN_StatePlane_West_Virginia_North_FIPS_4701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2858','NAD_1983_HARN_StatePlane_West_Virginia_South_FIPS_4702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2859','NAD_1983_HARN_StatePlane_Wisconsin_North_FIPS_4801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2860','NAD_1983_HARN_StatePlane_Wisconsin_Central_FIPS_4802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2861','NAD_1983_HARN_StatePlane_Wisconsin_South_FIPS_4803','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2862','NAD_1983_HARN_StatePlane_Wyoming_East_FIPS_4901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2863','NAD_1983_HARN_StatePlane_Wyoming_East_Central_FIPS_4902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2864','NAD_1983_HARN_StatePlane_Wyoming_West_Central_FIPS_4903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2865','NAD_1983_HARN_StatePlane_Wyoming_West_FIPS_4904','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2866','NAD_1983_HARN_StatePlane_Puerto_Rico_Virgin_Islands_FIPS_5200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2867','NAD_1983_HARN_StatePlane_Arizona_East_FIPS_0201_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2868','NAD_1983_HARN_StatePlane_Arizona_Central_FIPS_0202_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2869','NAD_1983_HARN_StatePlane_Arizona_West_FIPS_0203_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2870','NAD_1983_HARN_StatePlane_California_I_FIPS_0401_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2871','NAD_1983_HARN_StatePlane_California_II_FIPS_0402_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2872','NAD_1983_HARN_StatePlane_California_III_FIPS_0403_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2873','NAD_1983_HARN_StatePlane_California_IV_FIPS_0404_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2874','NAD_1983_HARN_StatePlane_California_V_FIPS_0405_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2875','NAD_1983_HARN_StatePlane_California_VI_FIPS_0406_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2876','NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2877','NAD_1983_HARN_StatePlane_Colorado_Central_FIPS_0502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2878','NAD_1983_HARN_StatePlane_Colorado_South_FIPS_0503_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2879','NAD_1983_HARN_StatePlane_Connecticut_FIPS_0600_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2880','NAD_1983_HARN_StatePlane_Delaware_FIPS_0700_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2881','NAD_1983_HARN_StatePlane_Florida_East_FIPS_0901_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2882','NAD_1983_HARN_StatePlane_Florida_West_FIPS_0902_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2883','NAD_1983_HARN_StatePlane_Florida_North_FIPS_0903_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2884','NAD_1983_HARN_StatePlane_Georgia_East_FIPS_1001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2885','NAD_1983_HARN_StatePlane_Georgia_West_FIPS_1002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2886','NAD_1983_HARN_StatePlane_Idaho_East_FIPS_1101_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2887','NAD_1983_HARN_StatePlane_Idaho_Central_FIPS_1102_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2888','NAD_1983_HARN_StatePlane_Idaho_West_FIPS_1103_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2891','NAD_1983_HARN_StatePlane_Kentucky_North_FIPS_1601_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2892','NAD_1983_HARN_StatePlane_Kentucky_South_FIPS_1602_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2893','NAD_1983_HARN_StatePlane_Maryland_FIPS_1900_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2894','NAD_1983_HARN_StatePlane_Massachusetts_Mainland_FIPS_2001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2895','NAD_1983_HARN_StatePlane_Massachusetts_Island_FIPS_2002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2896','NAD_1983_HARN_StatePlane_Michigan_North_FIPS_2111_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2897','NAD_1983_HARN_StatePlane_Michigan_Central_FIPS_2112_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2898','NAD_1983_HARN_StatePlane_Michigan_South_FIPS_2113_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2899','NAD_1983_HARN_StatePlane_Mississippi_East_FIPS_2301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2900','NAD_1983_HARN_StatePlane_Mississippi_West_FIPS_2302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2901','NAD_1983_HARN_StatePlane_Montana_FIPS_2500_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2902','NAD_1983_HARN_StatePlane_New_Mexico_East_FIPS_3001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2903','NAD_1983_HARN_StatePlane_New_Mexico_Central_FIPS_3002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2904','NAD_1983_HARN_StatePlane_New_Mexico_West_FIPS_3003_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2905','NAD_1983_HARN_StatePlane_New_York_East_FIPS_3101_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2906','NAD_1983_HARN_StatePlane_New_York_Central_FIPS_3102_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2907','NAD_1983_HARN_StatePlane_New_York_West_FIPS_3103_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2908','NAD_1983_HARN_StatePlane_New_York_Long_Island_FIPS_3104_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2909','NAD_1983_HARN_StatePlane_North_Dakota_North_FIPS_3301_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2910','NAD_1983_HARN_StatePlane_North_Dakota_South_FIPS_3302_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2911','NAD_1983_HARN_StatePlane_Oklahoma_North_FIPS_3501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2912','NAD_1983_HARN_StatePlane_Oklahoma_South_FIPS_3502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2913','NAD_1983_HARN_StatePlane_Oregon_North_FIPS_3601_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2914','NAD_1983_HARN_StatePlane_Oregon_South_FIPS_3602_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2915','NAD_1983_HARN_StatePlane_Tennessee_FIPS_4100_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2916','NAD_1983_HARN_StatePlane_Texas_North_FIPS_4201_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2917','NAD_1983_HARN_StatePlane_Texas_North_Central_FIPS_4202_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2918','NAD_1983_HARN_StatePlane_Texas_Central_FIPS_4203_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2919','NAD_1983_HARN_StatePlane_Texas_South_Central_FIPS_4204_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2920','NAD_1983_HARN_StatePlane_Texas_South_FIPS_4205_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2921','NAD_1983_HARN_StatePlane_Utah_North_FIPS_4301_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2922','NAD_1983_HARN_StatePlane_Utah_Central_FIPS_4302_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2923','NAD_1983_HARN_StatePlane_Utah_South_FIPS_4303_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2924','NAD_1983_HARN_StatePlane_Virginia_North_FIPS_4501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2925','NAD_1983_HARN_StatePlane_Virginia_South_FIPS_4502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2926','NAD_1983_HARN_StatePlane_Washington_North_FIPS_4601_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2927','NAD_1983_HARN_StatePlane_Washington_South_FIPS_4602_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2928','NAD_1983_HARN_StatePlane_Wisconsin_North_FIPS_4801_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2929','NAD_1983_HARN_StatePlane_Wisconsin_Central_FIPS_4802_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2930','NAD_1983_HARN_StatePlane_Wisconsin_South_FIPS_4803_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2931','Beduaram_TM_13_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2932','QND_1995_Qatar_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2933','Gunung_Segara_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2934','Gunung_Segara_Jakarta_NEIEZ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2935','Pulkovo_1942_CS63_Zone_A1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2936','Pulkovo_1942_CS63_Zone_A2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2937','Pulkovo_1942_CS63_Zone_A3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2938','Pulkovo_1942_CS63_Zone_A4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2939','Pulkovo_1942_CS63_Zone_K2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2940','Pulkovo_1942_CS63_Zone_K3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2941','Pulkovo_1942_CS63_Zone_K4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2942','Porto_Santo_1936_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2943','Selvagem_Grande_1938_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2944','NAD_1983_CSRS_MTM_2_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2945','NAD_1983_CSRS_MTM_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2946','NAD_1983_CSRS_MTM_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2947','NAD_1983_CSRS_MTM_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2948','NAD_1983_CSRS_MTM_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2949','NAD_1983_CSRS_MTM_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2950','NAD_1983_CSRS_MTM_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2951','NAD_1983_CSRS_MTM_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2952','NAD_1983_CSRS_MTM_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2953','NAD_1983_CSRS_New_Brunswick_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2954','NAD_1983_CSRS_Prince_Edward_Island','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2955','NAD_1983_CSRS_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2956','NAD_1983_CSRS_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2957','NAD_1983_CSRS_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2958','NAD_1983_CSRS_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2959','NAD_1983_CSRS_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2960','NAD_1983_CSRS_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2961','NAD_1983_CSRS_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2962','NAD_1983_CSRS_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2964','NAD_1927_Alaska_Albers_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2965','NAD_1983_StatePlane_Indiana_East_FIPS_1301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2966','NAD_1983_StatePlane_Indiana_West_FIPS_1302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2967','NAD_1983_HARN_StatePlane_Indiana_East_FIPS_1301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2968','NAD_1983_HARN_StatePlane_Indiana_West_FIPS_1302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2969','Fort_Marigot_UTM_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2970','Sainte_Anne_UTM_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2971','CSG_1967_UTM_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2972','RGFG_1995_UTM_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2973','Fort_Desaix_UTM_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2975','RGR_1992_UTM_40S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2976','Tahiti_1952_UTM_6S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2977','Tahaa_1954_UTM_5S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2978','IGN72_Nuku_Hiva_UTM_7S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2979','Kerguelen_Island_1949_UTM_42S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2980','Combani_1950_UTM_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2981','IGN56_Lifou_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2982','IGN72_Grande_Terre_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2984','RGNC_1991_Lambert_New_Caledonia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2985','Petrels_1972_Terre_Adelie_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2986','Perroud_1950_Terre_Adelie_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2987','Saint_Pierre_et_Miquelon_1950_UTM_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2988','MOP78_UTM_1S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2991','NAD_1983_Oregon_Statewide_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2992','NAD_1983_Oregon_Statewide_Lambert_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2993','NAD_1983_HARN_Oregon_Statewide_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2994','NAD_1983_HARN_Oregon_Statewide_Lambert_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2995','IGN53_Mare_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2996','ST84_Ile_des_Pins_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2997','ST71_Belep_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2998','NEA74_Noumea_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2999','Grand_Comoros_UTM_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3000','Gunung_Segara_NEIEZ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3001','Batavia_NEIEZ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3002','Makassar_NEIEZ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3003','Monte_Mario_Italy_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3004','Monte_Mario_Italy_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3005','NAD_1983_BC_Environment_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3006','SWEREF99_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3007','SWEREF99_12_00','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3008','SWEREF99_13_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3009','SWEREF99_15_00','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3010','SWEREF99_16_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3011','SWEREF99_18_00','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3012','SWEREF99_14_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3013','SWEREF99_15_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3014','SWEREF99_17_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3015','SWEREF99_18_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3016','SWEREF99_20_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3017','SWEREF99_21_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3018','SWEREF99_23_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3019','RT90_75_gon_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3020','RT90_5_gon_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3021','RT90_25_gon_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3022','RT90_0_gon','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3023','RT90_25_gon_O','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3024','RT90_5_gon_O','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3025','RT38_75_gon_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3026','RT38_5_gon_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3027','RT38_25_gon_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3028','RT38_0_gon','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3029','RT38_25_gon_O','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3030','RT38_5_gon_O','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3031','WGS_1984_Antarctic_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3032','WGS_1984_Australian_Antarctic_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3033','WGS_1984_Australian_Antarctic_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3034','ETRS_1989_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3035','ETRS_1989_LAEA','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3036','Moznet_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3037','Moznet_UTM_Zone_37S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3038','ETRS_1989_ETRS-TM26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3039','ETRS_1989_ETRS-TM27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3040','ETRS_1989_ETRS-TM28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3041','ETRS_1989_ETRS-TM29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3042','ETRS_1989_ETRS-TM30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3043','ETRS_1989_ETRS-TM31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3044','ETRS_1989_ETRS-TM32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3045','ETRS_1989_ETRS-TM33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3046','ETRS_1989_ETRS-TM34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3047','ETRS_1989_ETRS-TM35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3048','ETRS_1989_ETRS-TM36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3049','ETRS_1989_ETRS-TM37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3050','ETRS_1989_ETRS-TM38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3051','ETRS_1989_ETRS-TM39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3054','Hjorsey_1955_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3055','Hjorsey_1955_UTM_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3056','Hjorsey_1955_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3057','ISN_1993_Lambert_1993','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3058','Helle_1954_Jan_Mayen_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3059','LKS_1992_Latvia_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3060','IGN72_Grande_Terre_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3061','Porto_Santo_1995_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3062','Azores_Oriental_1995_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3063','Azores_Central_1995_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3064','IGM_1995_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3065','IGM_1995_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3066','ED_1950_Jordan_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3067','EUREF_FIN_TM35FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3068','DHDN_Soldner_Berlin','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3069','NAD_1927_Wisconsin_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3070','NAD_1983_Wisconsin_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3071','NAD_1983_HARN_Wisconsin_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3072','NAD_1983_Maine_2000_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3073','NAD_1983_Maine_2000_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3074','NAD_1983_Maine_2000_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3075','NAD_1983_HARN_Maine_2000_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3076','NAD_1983_HARN_Maine_2000_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3077','NAD_1983_HARN_Maine_2000_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3078','NAD_1983_Michigan_GeoRef_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3079','NAD_1983_HARN_Michigan_GeoRef_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3080','NAD_1927_Texas_Statewide_Mapping_System','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3081','NAD_1983_Texas_Statewide_Mapping_System','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3082','NAD_1983_Texas_Centric_Mapping_System_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3083','NAD_1983_Texas_Centric_Mapping_System_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3084','NAD_1983_HARN_Texas_Centric_Mapping_System_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3085','NAD_1983_HARN_Texas_Centric_Mapping_System_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3086','NAD_1983_Florida_GDL_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3087','NAD_1983_HARN_Florida_GDL_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3088','NAD_1983_StatePlane_Kentucky_FIPS_1600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3089','NAD_1983_StatePlane_Kentucky_FIPS_1600_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3090','NAD_1983_HARN_StatePlane_Kentucky_FIPS_1600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3091','NAD_1983_HARN_StatePlane_Kentucky_FIPS_1600_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3092','Tokyo_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3093','Tokyo_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3094','Tokyo_UTM_Zone_53N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3095','Tokyo_UTM_Zone_54N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3096','Tokyo_UTM_Zone_55N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3097','JGD_2000_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3098','JGD_2000_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3099','JGD_2000_UTM_Zone_53N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3100','JGD_2000_UTM_Zone_54N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3101','JGD_2000_UTM_Zone_55N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3102','Samoa_1962_Samoa_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3106','Gulshan_303_Bangladesh_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3107','GDA_1994_South_Australia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3108','ETRS_1989_Guernsey_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3109','ETRS_1989_Jersey_Transverse_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3110','AGD_1966_VICGRID','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3111','GDA_1994_VICGRID94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3112','GDA_1994_Geoscience_Australia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3113','GDA_1994_BCSG02','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3114','MAGNA_Colombia_Oeste_Oeste','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3115','MAGNA_Colombia_Oeste','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3116','MAGNA_Colombia_Bogota','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3117','MAGNA_Colombia_Este','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3118','MAGNA_Colombia_Este_Este','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3119','Douala_1948_AEF_West','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3120','Pulkovo_1942_Adj_1958_Poland_Zone_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3121','PRS_1992_Philippines_Zone_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3122','PRS_1992_Philippines_Zone_II','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3123','PRS_1992_Philippines_Zone_III','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3124','PRS_1992_Philippines_Zone_IV','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3125','PRS_1992_Philippines_Zone_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3126','ETRS_1989_ETRS-GK19FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3127','ETRS_1989_ETRS-GK20FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3128','ETRS_1989_ETRS-GK21FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3129','ETRS_1989_ETRS-GK22FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3130','ETRS_1989_ETRS-GK23FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3131','ETRS_1989_ETRS-GK24FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3132','ETRS_1989_ETRS-GK25FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3133','ETRS_1989_ETRS-GK26FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3134','ETRS_1989_ETRS-GK27FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3135','ETRS_1989_ETRS-GK28FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3136','ETRS_1989_ETRS-GK29FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3137','ETRS_1989_ETRS-GK30FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3138','ETRS_1989_ETRS-GK31FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3141','Fiji_1956_UTM_Zone_60S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3142','Fiji_1956_UTM_Zone_1S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3146','Pulkovo_1942_3_Degree_GK_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3147','Pulkovo_1942_3_Degree_GK_CM_18E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3148','Indian_1960_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3149','Indian_1960_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3150','Pulkovo_1995_3_Degree_GK_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3151','Pulkovo_1995_3_Degree_GK_CM_18E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3153','NAD_1983_CSRS_BC_Environment_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3154','NAD_1983_CSRS_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3155','NAD_1983_CSRS_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3156','NAD_1983_CSRS_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3157','NAD_1983_CSRS_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3158','NAD_1983_CSRS_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3159','NAD_1983_CSRS_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3160','NAD_1983_CSRS_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3161','NAD_1983_Ontario_MNR_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3162','NAD_1983_CSRS_Ontario_MNR_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3163','RGNC_1991_93_Lambert_New_Caledonia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3164','ST87_Ouvea_UTM_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3165','NEA74_Noumea_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3166','NEA74_Noumea_Lambert_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3167','Kertau_RSO_RSO_Malaya_ChSears1922trunc','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3168','Kertau_RSO_RSO_Malaya','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3169','RGNC_1991-93_UTM_Zone_57S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3170','RGNC_1991-93_UTM_Zone_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3171','RGNC_1991-93_UTM_Zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3172','IGN53_Mare_UTM_Zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3174','NAD_1983_Great_Lakes_Basin_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3175','NAD_1983_Great_Lakes_and_St_Lawrence_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3176','Indian_1960_TM_106NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3177','LGD2006_Libya_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3178','Greenland_1996_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3179','Greenland_1996_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3180','Greenland_1996_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3181','Greenland_1996_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3182','Greenland_1996_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3183','Greenland_1996_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3184','Greenland_1996_UTM_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3185','Greenland_1996_UTM_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3186','Greenland_1996_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3187','Greenland_1996_UTM_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3188','Greenland_1996_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3189','Greenland_1996_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3190','LGD2006_Libya_TM_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3191','LGD2006_Libya_TM_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3192','LGD2006_Libya_TM_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3193','LGD2006_Libya_TM_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3194','LGD2006_Libya_TM_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3195','LGD2006_Libya_TM_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3196','LGD2006_Libya_TM_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3197','LGD2006_Libya_TM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3198','LGD2006_Libya_TM_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3199','LGD2006_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3200','FD_1958_Iraq','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3201','LGD2006_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3202','LGD2006_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3203','LGD2006_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3294','WGS_1984_USGS_Transantarctic_Mountains','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3295','Guam_1963_Yap_Islands','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3296','RGPF_UTM_Zone_5S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3297','RGPF_UTM_Zone_6S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3298','RGPF_UTM_Zone_7S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3299','RGPF_UTM_Zone_8S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3300','Estonian_Coordinate_System_of_1992','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3301','Estonia_1997_Estonia_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3302','IGN63_Hiva_Oa_UTM_Zone_7S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3303','Fatu_Iva_1972_UTM_Zone_7S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3304','Tahiti_1979_UTM_Zone_6S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3305','Moorea_1987_UTM_Zone_6S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3306','Maupiti_1983_UTM_Zone_5S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3307','Nakhl-e_Ghanem_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3308','GDA_1994_NSW_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3309','NAD_1927_California_Teale_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3310','NAD_1983_California_Teale_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3311','NAD_1983_HARN_California_Teale_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3312','CSG_1967_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3313','RGFG_1995_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3315','Katanga_1955_Katanga_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3316','Kasai_1953_Congo_TM_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3317','Kasai_1953_Congo_TM_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3318','IGC_1962_Congo_TM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3319','IGC_1962_Congo_TM_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3320','IGC_1962_Congo_TM_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3321','IGC_1962_Congo_TM_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3322','IGC_1962_Congo_TM_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3323','IGC_1962_Congo_TM_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3324','IGC_1962_Congo_TM_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3325','IGC_1962_Congo_TM_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3326','IGC_1962_Congo_TM_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3327','IGC_1962_Congo_TM_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3328','Pulkovo_1942_Adj_1958_GUGiK-80','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3329','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3330','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3331','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3332','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3333','Pulkovo_1942_Adj_1958_GK_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3334','Pulkovo_1942_Adj_1958_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3335','Pulkovo_1942_Adj_1958_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3336','Kerguelen_Island_1949_UTM_42S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3337','Le_Pouce_1934_Mauritius_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3338','NAD_1983_Alaska_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3339','IGCB_1955_Congo_TM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3340','IGCB_1955_Congo_TM_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3341','IGCB_1955_Congo_TM_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3342','IGCB_1955_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3343','Mauritania_1999_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3344','Mauritania_1999_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3345','Mauritania_1999_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3346','LKS_1994_Lithuania_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3347','NAD_1983_Statistics_Canada_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3348','NAD_1983_CSRS_Statistics_Canada_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3350','Pulkovo_1942_CS63_Zone_C0','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3351','Pulkovo_1942_CS63_Zone_C1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3352','Pulkovo_1942_CS63_Zone_C2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3353','Mhast_Onshore_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3354','Mhast_Offshore_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3355','Egypt_Gulf_of_Suez_S-650_TL_Red_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3356','Grand_Cayman_1959_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3357','Little_Cayman_1961_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3358','NAD_1983_HARN_StatePlane_North_Carolina_FIPS_3200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3359','NAD_1983_HARN_StatePlane_North_Carolina_FIPS_3200_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3360','NAD_1983_HARN_StatePlane_South_Carolina_FIPS_3900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3361','NAD_1983_HARN_StatePlane_South_Carolina_FIPS_3900_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3362','NAD_1983_HARN_StatePlane_Pennsylvania_North_FIPS_3701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3363','NAD_1983_HARN_StatePlane_Pennsylvania_North_FIPS_3701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3364','NAD_1983_HARN_StatePlane_Pennsylvania_South_FIPS_3702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3365','NAD_1983_HARN_StatePlane_Pennsylvania_South_FIPS_3702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3366','Hong_Kong_1963_Grid_System','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3367','IGN_Astro_1960_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3368','IGN_Astro_1960_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3369','IGN_Astro_1960_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3370','NAD_1927_UTM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3371','NAD_1927_UTM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3372','NAD_1983_UTM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3373','NAD_1983_UTM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3374','FD_1954_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3375','GDM_2000_MRSO_Peninsular_Malaysia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3376','GDM_2000_BRSO_East_Malaysia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3377','GDM_2000_State_Cassini_Johor','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3378','GDM_2000_State_Cassini_Negeri_Sembilan_and_Melaka','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3379','GDM_2000_State_Cassini_Pahang','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3380','GDM_2000_State_Cassini_Selangor','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3381','GDM_2000_State_Cassini_Terengganu','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3382','GDM_2000_State_Cassini_Pulau_Pinang_and_Seberang_Perai','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3383','GDM_2000_State_Cassini_Perlis','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3384','GDM_2000_State_Cassini_Perak','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3385','GDM_2000_State_Cassini_Kelantan','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3386','KKJ_Finland_Zone_0','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3387','KKJ_Finland_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3388','Pulkovo_1942_Caspian_Sea_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3389','Pulkovo_1942_3_Degree_GK_Zone_60','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3390','Pulkovo_1995_3_Degree_GK_Zone_60','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3391','Karbala_1979_Polservice_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3392','Karbala_1979_Polservice_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3393','Karbala_1979_Polservice_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3394','Nahrwan_1934_Iraq_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3395','WGS_1984_World_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3396','PD/83_GK_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3397','PD/83_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3398','RD/83_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3399','RD/83_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3400','NAD_1983_10TM_AEP_Forest','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3401','NAD_1983_10TM_AEP_Resource','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3402','NAD_1983_CSRS_10TM_AEP_Forest','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3403','NAD_1983_CSRS_10TM_AEP_Resource','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3404','NAD_1983_HARN_StatePlane_North_Carolina_FIPS_3200_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3405','VN_2000_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3406','VN_2000_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3407','Hong_Kong_1963_Grid_System','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3408','NSIDC_EASE_Grid_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3409','NSIDC_EASE_Grid_South','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3410','NSIDC_EASE_Grid_Global','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3411','NSIDC_Sea_Ice_Polar_Stereographic_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3412','NSIDC_Sea_Ice_Polar_Stereographic_South','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3413','WGS_1984_NSIDC_Sea_Ice_Polar_Stereographic_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3414','SVY21_Singapore_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3415','WGS_1972_BE_South_China_Sea_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3416','ETRS_1989_Austria_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3417','NAD_1983_StatePlane_Iowa_North_FIPS_1401_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3418','NAD_1983_StatePlane_Iowa_South_FIPS_1402_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3419','NAD_1983_StatePlane_Kansas_North_FIPS_1501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3420','NAD_1983_StatePlane_Kansas_South_FIPS_1502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3421','NAD_1983_StatePlane_Nevada_East_FIPS_2701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3422','NAD_1983_StatePlane_Nevada_Central_FIPS_2702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3423','NAD_1983_StatePlane_Nevada_West_FIPS_2703_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3424','NAD_1983_StatePlane_New_Jersey_FIPS_2900_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3425','NAD_1983_HARN_StatePlane_Iowa_North_FIPS_1401_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3426','NAD_1983_HARN_StatePlane_Iowa_South_FIPS_1402_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3427','NAD_1983_HARN_StatePlane_Kansas_North_FIPS_1501_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3428','NAD_1983_HARN_StatePlane_Kansas_South_FIPS_1502_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3429','NAD_1983_HARN_StatePlane_Nevada_East_FIPS_2701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3430','NAD_1983_HARN_StatePlane_Nevada_Central_FIPS_2702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3431','NAD_1983_HARN_StatePlane_Nevada_West_FIPS_2703_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3432','NAD_1983_HARN_StatePlane_New_Jersey_FIPS_2900_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3433','NAD_1983_StatePlane_Arkansas_North_FIPS_0301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3434','NAD_1983_StatePlane_Arkansas_South_FIPS_0302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3435','NAD_1983_StatePlane_Illinois_East_FIPS_1201_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3436','NAD_1983_StatePlane_Illinois_West_FIPS_1202_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3437','NAD_1983_StatePlane_New_Hampshire_FIPS_2800_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3438','NAD_1983_StatePlane_Rhode_Island_FIPS_3800_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3439','PDO_1993_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3440','PDO_1993_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3441','NAD_1983_HARN_StatePlane_Arkansas_North_FIPS_0301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3442','NAD_1983_HARN_StatePlane_Arkansas_South_FIPS_0302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3443','NAD_1983_HARN_StatePlane_Illinois_East_FIPS_1201_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3444','NAD_1983_HARN_StatePlane_Illinois_West_FIPS_1202_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3445','NAD_1983_HARN_StatePlane_New_Hampshire_FIPS_2800_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3446','NAD_1983_HARN_StatePlane_Rhode_Island_FIPS_3800_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3447','Belge_Lambert_2005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3448','JAD_2001_Jamaica_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3449','JAD_2001_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3450','JAD_2001_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3451','NAD_1983_StatePlane_Louisiana_North_FIPS_1701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3452','NAD_1983_StatePlane_Louisiana_South_FIPS_1702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3453','NAD_1983_StatePlane_Louisiana_Offshore_FIPS_1703_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3454','NAD_1983_StatePlane_South_Dakota_North_FIPS_4001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3455','NAD_1983_StatePlane_South_Dakota_South_FIPS_4002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3456','NAD_1983_HARN_StatePlane_Louisiana_North_FIPS_1701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3457','NAD_1983_HARN_StatePlane_Louisiana_South_FIPS_1702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3458','NAD_1983_HARN_StatePlane_South_Dakota_North_FIPS_4001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3459','NAD_1983_HARN_StatePlane_South_Dakota_South_FIPS_4002_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3460','Fiji_1986_Fiji_Map_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3461','Dabola_1981_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3462','Dabola_1981_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3463','NAD_1983_Maine_2000_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3464','NAD_1983_HARN_Maine_2000_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3465','NAD_1983_NSRS2007_StatePlane_Alabama_East_FIPS_0101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3466','NAD_1983_NSRS2007_StatePlane_Alabama_West_FIPS_0102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3467','NAD_1983_NSRS2007_Alaska_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3468','NAD_1983_NSRS2007_StatePlane_Alaska_1_FIPS_5001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3469','NAD_1983_NSRS2007_StatePlane_Alaska_2_FIPS_5002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3470','NAD_1983_NSRS2007_StatePlane_Alaska_3_FIPS_5003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3471','NAD_1983_NSRS2007_StatePlane_Alaska_4_FIPS_5004','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3472','NAD_1983_NSRS2007_StatePlane_Alaska_5_FIPS_5005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3473','NAD_1983_NSRS2007_StatePlane_Alaska_6_FIPS_5006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3474','NAD_1983_NSRS2007_StatePlane_Alaska_7_FIPS_5007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3475','NAD_1983_NSRS2007_StatePlane_Alaska_8_FIPS_5008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3476','NAD_1983_NSRS2007_StatePlane_Alaska_9_FIPS_5009','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3477','NAD_1983_NSRS2007_StatePlane_Alaska_10_FIPS_5010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3478','NAD_1983_NSRS2007_StatePlane_Arizona_Central_FIPS_0202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3479','NAD_1983_NSRS2007_StatePlane_Arizona_Central_FIPS_0202_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3480','NAD_1983_NSRS2007_StatePlane_Arizona_East_FIPS_0201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3481','NAD_1983_NSRS2007_StatePlane_Arizona_East_FIPS_0201_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3482','NAD_1983_NSRS2007_StatePlane_Arizona_West_FIPS_0203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3483','NAD_1983_NSRS2007_StatePlane_Arizona_West_FIPS_0203_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3484','NAD_1983_NSRS2007_StatePlane_Arkansas_North_FIPS_0301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3485','NAD_1983_NSRS2007_StatePlane_Arkansas_North_FIPS_0301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3486','NAD_1983_NSRS2007_StatePlane_Arkansas_South_FIPS_0302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3487','NAD_1983_NSRS2007_StatePlane_Arkansas_South_FIPS_0302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3488','NAD_1983_NSRS2007_California_Teale_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3489','NAD_1983_NSRS2007_StatePlane_California_I_FIPS_0401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3490','NAD_1983_NSRS2007_StatePlane_California_I_FIPS_0401_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3491','NAD_1983_NSRS2007_StatePlane_California_II_FIPS_0402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3492','NAD_1983_NSRS2007_StatePlane_California_II_FIPS_0402_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3493','NAD_1983_NSRS2007_StatePlane_California_III_FIPS_0403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3494','NAD_1983_NSRS2007_StatePlane_California_III_FIPS_0403_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3495','NAD_1983_NSRS2007_StatePlane_California_IV_FIPS_0404','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3496','NAD_1983_NSRS2007_StatePlane_California_IV_FIPS_0404_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3497','NAD_1983_NSRS2007_StatePlane_California_V_FIPS_0405','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3498','NAD_1983_NSRS2007_StatePlane_California_V_FIPS_0405_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3499','NAD_1983_NSRS2007_StatePlane_California_VI_FIPS_0406','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3500','NAD_1983_NSRS2007_StatePlane_California_VI_FIPS_0406_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3501','NAD_1983_NSRS2007_StatePlane_Colorado_Central_FIPS_0502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3502','NAD_1983_NSRS2007_StatePlane_Colorado_Central_FIPS_0502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3503','NAD_1983_NSRS2007_StatePlane_Colorado_North_FIPS_0501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3504','NAD_1983_NSRS2007_StatePlane_Colorado_North_FIPS_0501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3505','NAD_1983_NSRS2007_StatePlane_Colorado_South_FIPS_0503','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3506','NAD_1983_NSRS2007_StatePlane_Colorado_South_FIPS_0503_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3507','NAD_1983_NSRS2007_StatePlane_Connecticut_FIPS_0600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3508','NAD_1983_NSRS2007_StatePlane_Connecticut_FIPS_0600_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3509','NAD_1983_NSRS2007_StatePlane_Delaware_FIPS_0700','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3510','NAD_1983_NSRS2007_StatePlane_Delaware_FIPS_0700_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3511','NAD_1983_NSRS2007_StatePlane_Florida_East_FIPS_0901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3512','NAD_1983_NSRS2007_StatePlane_Florida_East_FIPS_0901_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3513','NAD_1983_NSRS2007_Florida_GDL_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3514','NAD_1983_NSRS2007_StatePlane_Florida_North_FIPS_0903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3515','NAD_1983_NSRS2007_StatePlane_Florida_North_FIPS_0903_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3516','NAD_1983_NSRS2007_StatePlane_Florida_West_FIPS_0902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3517','NAD_1983_NSRS2007_StatePlane_Florida_West_FIPS_0902_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3518','NAD_1983_NSRS2007_StatePlane_Georgia_East_FIPS_1001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3519','NAD_1983_NSRS2007_StatePlane_Georgia_East_FIPS_1001_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3520','NAD_1983_NSRS2007_StatePlane_Georgia_West_FIPS_1002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3521','NAD_1983_NSRS2007_StatePlane_Georgia_West_FIPS_1002_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3522','NAD_1983_NSRS2007_StatePlane_Idaho_Central_FIPS_1102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3523','NAD_1983_NSRS2007_StatePlane_Idaho_Central_FIPS_1102_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3524','NAD_1983_NSRS2007_StatePlane_Idaho_East_FIPS_1101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3525','NAD_1983_NSRS2007_StatePlane_Idaho_East_FIPS_1101_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3526','NAD_1983_NSRS2007_StatePlane_Idaho_West_FIPS_1103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3527','NAD_1983_NSRS2007_StatePlane_Idaho_West_FIPS_1103_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3528','NAD_1983_NSRS2007_StatePlane_Illinois_East_FIPS_1201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3529','NAD_1983_NSRS2007_StatePlane_Illinois_East_FIPS_1201_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3530','NAD_1983_NSRS2007_StatePlane_Illinois_West_FIPS_1202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3531','NAD_1983_NSRS2007_StatePlane_Illinois_West_FIPS_1202_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3532','NAD_1983_NSRS2007_StatePlane_Indiana_East_FIPS_1301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3533','NAD_1983_NSRS2007_StatePlane_Indiana_East_FIPS_1301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3534','NAD_1983_NSRS2007_StatePlane_Indiana_West_FIPS_1302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3535','NAD_1983_NSRS2007_StatePlane_Indiana_West_FIPS_1302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3536','NAD_1983_NSRS2007_StatePlane_Iowa_North_FIPS_1401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3537','NAD_1983_NSRS2007_StatePlane_Iowa_North_FIPS_1401_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3538','NAD_1983_NSRS2007_StatePlane_Iowa_South_FIPS_1402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3539','NAD_1983_NSRS2007_StatePlane_Iowa_South_FIPS_1402_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3540','NAD_1983_NSRS2007_StatePlane_Kansas_North_FIPS_1501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3541','NAD_1983_NSRS2007_StatePlane_Kansas_North_FIPS_1501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3542','NAD_1983_NSRS2007_StatePlane_Kansas_South_FIPS_1502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3543','NAD_1983_NSRS2007_StatePlane_Kansas_South_FIPS_1502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3544','NAD_1983_NSRS2007_StatePlane_Kentucky_North_FIPS_1601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3545','NAD_1983_NSRS2007_StatePlane_Kentucky_North_FIPS_1601_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3546','NAD_1983_NSRS2007_StatePlane_Kentucky_FIPS_1600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3547','NAD_1983_NSRS2007_StatePlane_Kentucky_FIPS_1600_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3548','NAD_1983_NSRS2007_StatePlane_Kentucky_South_FIPS_1602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3549','NAD_1983_NSRS2007_StatePlane_Kentucky_South_FIPS_1602_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3550','NAD_1983_NSRS2007_StatePlane_Louisiana_North_FIPS_1701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3551','NAD_1983_NSRS2007_StatePlane_Louisiana_North_FIPS_1701_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3552','NAD_1983_NSRS2007_StatePlane_Louisiana_South_FIPS_1702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3553','NAD_1983_NSRS2007_StatePlane_Louisiana_South_FIPS_1702_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3554','NAD_1983_NSRS2007_Maine_2000_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3555','NAD_1983_NSRS2007_Maine_2000_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3556','NAD_1983_NSRS2007_Maine_2000_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3557','NAD_1983_NSRS2007_StatePlane_Maine_East_FIPS_1801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3558','NAD_1983_NSRS2007_StatePlane_Maine_West_FIPS_1802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3559','NAD_1983_NSRS2007_StatePlane_Maryland_FIPS_1900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3560','NAD_1983_StatePlane_Utah_North_FIPS_4301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3561','Old_Hawaiian_StatePlane_Hawaii_1_FIPS_5101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3562','Old_Hawaiian_StatePlane_Hawaii_2_FIPS_5102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3563','Old_Hawaiian_StatePlane_Hawaii_3_FIPS_5103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3564','Old_Hawaiian_StatePlane_Hawaii_4_FIPS_5104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3565','Old_Hawaiian_StatePlane_Hawaii_5_FIPS_5105','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3566','NAD_1983_StatePlane_Utah_Central_FIPS_4302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3567','NAD_1983_StatePlane_Utah_South_FIPS_4303_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3568','NAD_1983_HARN_StatePlane_Utah_North_FIPS_4301_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3569','NAD_1983_HARN_StatePlane_Utah_Central_FIPS_4302_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3570','NAD_1983_HARN_StatePlane_Utah_South_FIPS_4303_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3571','WGS_1984_North_Pole_LAEA_Bering_Sea','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3572','WGS_1984_North_Pole_LAEA_Alaska','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3573','WGS_1984_North_Pole_LAEA_Canada','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3574','WGS_1984_North_Pole_LAEA_Atlantic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3575','WGS_1984_North_Pole_LAEA_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3576','WGS_1984_North_Pole_LAEA_Russia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3577','GDA_1994_Australia_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3578','NAD_1983_Yukon_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3579','NAD_1983_CSRS_Yukon_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3580','NAD_1983_Northwest_Territories_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3581','NAD_1983_CSRS_Northwest_Territories_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3582','NAD_1983_NSRS2007_StatePlane_Maryland_FIPS_1900_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3583','NAD_1983_NSRS2007_StatePlane_Massachusetts_Island_FIPS_2002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3584','NAD_1983_NSRS2007_StatePlane_Massachusetts_Isl_FIPS_2002_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3585','NAD_1983_NSRS2007_StatePlane_Massachusetts_Mainland_FIPS_2001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3586','NAD_1983_NSRS2007_StatePlane_Massachusetts_Mnld_FIPS_2001_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3587','NAD_1983_NSRS2007_StatePlane_Michigan_Central_FIPS_2112','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3588','NAD_1983_NSRS2007_StatePlane_Michigan_Central_FIPS_2112_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3589','NAD_1983_NSRS2007_StatePlane_Michigan_North_FIPS_2111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3590','NAD_1983_NSRS2007_StatePlane_Michigan_North_FIPS_2111_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3591','NAD_1983_NSRS2007_Michigan_GeoRef_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3592','NAD_1983_NSRS2007_StatePlane_Michigan_South_FIPS_2113','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3593','NAD_1983_NSRS2007_StatePlane_Michigan_South_FIPS_2113_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3594','NAD_1983_NSRS2007_StatePlane_Minnesota_Central_FIPS_2202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3595','NAD_1983_NSRS2007_StatePlane_Minnesota_North_FIPS_2201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3596','NAD_1983_NSRS2007_StatePlane_Minnesota_South_FIPS_2203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3597','NAD_1983_NSRS2007_StatePlane_Mississippi_East_FIPS_2301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3598','NAD_1983_NSRS2007_StatePlane_Mississippi_East_FIPS_2301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3599','NAD_1983_NSRS2007_StatePlane_Mississippi_West_FIPS_2302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3600','NAD_1983_NSRS2007_StatePlane_Mississippi_West_FIPS_2302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3601','NAD_1983_NSRS2007_StatePlane_Missouri_Central_FIPS_2402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3602','NAD_1983_NSRS2007_StatePlane_Missouri_East_FIPS_2401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3603','NAD_1983_NSRS2007_StatePlane_Missouri_West_FIPS_2403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3604','NAD_1983_NSRS2007_StatePlane_Montana_FIPS_2500','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3605','NAD_1983_NSRS2007_StatePlane_Montana_FIPS_2500_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3606','NAD_1983_NSRS2007_StatePlane_Nebraska_FIPS_2600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3607','NAD_1983_NSRS2007_StatePlane_Nevada_Central_FIPS_2702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3608','NAD_1983_NSRS2007_StatePlane_Nevada_Central_FIPS_2702_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3609','NAD_1983_NSRS2007_StatePlane_Nevada_East_FIPS_2701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3610','NAD_1983_NSRS2007_StatePlane_Nevada_East_FIPS_2701_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3611','NAD_1983_NSRS2007_StatePlane_Nevada_West_FIPS_2703','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3612','NAD_1983_NSRS2007_StatePlane_Nevada_West_FIPS_2703_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3613','NAD_1983_NSRS2007_StatePlane_New_Hampshire_FIPS_2800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3614','NAD_1983_NSRS2007_StatePlane_New_Hampshire_FIPS_2800_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3615','NAD_1983_NSRS2007_StatePlane_New_Jersey_FIPS_2900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3616','NAD_1983_NSRS2007_StatePlane_New_Jersey_FIPS_2900_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3617','NAD_1983_NSRS2007_StatePlane_New_Mexico_Central_FIPS_3002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3618','NAD_1983_NSRS2007_StatePlane_New_Mexico_Central_FIPS_3002_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3619','NAD_1983_NSRS2007_StatePlane_New_Mexico_East_FIPS_3001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3620','NAD_1983_NSRS2007_StatePlane_New_Mexico_East_FIPS_3001_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3621','NAD_1983_NSRS2007_StatePlane_New_Mexico_West_FIPS_3003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3622','NAD_1983_NSRS2007_StatePlane_New_Mexico_West_FIPS_3003_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3623','NAD_1983_NSRS2007_StatePlane_New_York_Central_FIPS_3102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3624','NAD_1983_NSRS2007_StatePlane_New_York_Central_FIPS_3102_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3625','NAD_1983_NSRS2007_StatePlane_New_York_East_FIPS_3101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3626','NAD_1983_NSRS2007_StatePlane_New_York_East_FIPS_3101_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3627','NAD_1983_NSRS2007_StatePlane_New_York_Long_Island_FIPS_3104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3628','NAD_1983_NSRS2007_StatePlane_New_York_Long_Isl_FIPS_3104_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3629','NAD_1983_NSRS2007_StatePlane_New_York_West_FIPS_3103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3630','NAD_1983_NSRS2007_StatePlane_New_York_West_FIPS_3103_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3631','NAD_1983_NSRS2007_StatePlane_North_Carolina_FIPS_3200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3632','NAD_1983_NSRS2007_StatePlane_North_Carolina_FIPS_3200_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3633','NAD_1983_NSRS2007_StatePlane_North_Dakota_North_FIPS_3301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3634','NAD_1983_NSRS2007_StatePlane_North_Dakota_North_FIPS_3301_FtI','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3635','NAD_1983_NSRS2007_StatePlane_North_Dakota_South_FIPS_3302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3636','NAD_1983_NSRS2007_StatePlane_North_Dakota_South_FIPS_3302_FtI','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3637','NAD_1983_NSRS2007_StatePlane_Ohio_North_FIPS_3401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3638','NAD_1983_NSRS2007_StatePlane_Ohio_South_FIPS_3402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3639','NAD_1983_NSRS2007_StatePlane_Oklahoma_North_FIPS_3501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3640','NAD_1983_NSRS2007_StatePlane_Oklahoma_North_FIPS_3501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3641','NAD_1983_NSRS2007_StatePlane_Oklahoma_South_FIPS_3502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3642','NAD_1983_NSRS2007_StatePlane_Oklahoma_South_FIPS_3502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3643','NAD_1983_NSRS2007_Oregon_Statewide_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3644','NAD_1983_NSRS2007_Oregon_Statewide_Lambert_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3645','NAD_1983_NSRS2007_StatePlane_Oregon_North_FIPS_3601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3646','NAD_1983_NSRS2007_StatePlane_Oregon_North_FIPS_3601_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3647','NAD_1983_NSRS2007_StatePlane_Oregon_South_FIPS_3602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3648','NAD_1983_NSRS2007_StatePlane_Oregon_South_FIPS_3602_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3649','NAD_1983_NSRS2007_StatePlane_Pennsylvania_North_FIPS_3701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3650','NAD_1983_NSRS2007_StatePlane_Pennsylvania_North_FIPS_3701_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3651','NAD_1983_NSRS2007_StatePlane_Pennsylvania_South_FIPS_3702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3652','NAD_1983_NSRS2007_StatePlane_Pennsylvania_South_FIPS_3702_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3653','NAD_1983_NSRS2007_StatePlane_Rhode_Island_FIPS_3800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3654','NAD_1983_NSRS2007_StatePlane_Rhode_Island_FIPS_3800_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3655','NAD_1983_NSRS2007_StatePlane_South_Carolina_FIPS_3900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3656','NAD_1983_NSRS2007_StatePlane_South_Carolina_FIPS_3900_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3657','NAD_1983_NSRS2007_StatePlane_South_Dakota_North_FIPS_4001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3658','NAD_1983_NSRS2007_StatePlane_South_Dakota_North_FIPS_4001_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3659','NAD_1983_NSRS2007_StatePlane_South_Dakota_South_FIPS_4002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3660','NAD_1983_NSRS2007_StatePlane_South_Dakota_South_FIPS_4002_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3661','NAD_1983_NSRS2007_StatePlane_Tennessee_FIPS_4100','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3662','NAD_1983_NSRS2007_StatePlane_Tennessee_FIPS_4100_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3663','NAD_1983_NSRS2007_StatePlane_Texas_Central_FIPS_4203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3664','NAD_1983_NSRS2007_StatePlane_Texas_Central_FIPS_4203_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3665','NAD_1983_NSRS2007_Texas_Centric_Mapping_System_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3666','NAD_1983_NSRS2007_Texas_Centric_Mapping_System_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3667','NAD_1983_NSRS2007_StatePlane_Texas_North_FIPS_4201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3668','NAD_1983_NSRS2007_StatePlane_Texas_North_FIPS_4201_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3669','NAD_1983_NSRS2007_StatePlane_Texas_North_Central_FIPS_4202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3670','NAD_1983_NSRS2007_StatePlane_Texas_North_Central_FIPS_4202_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3671','NAD_1983_NSRS2007_StatePlane_Texas_South_FIPS_4205','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3672','NAD_1983_NSRS2007_StatePlane_Texas_South_FIPS_4205_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3673','NAD_1983_NSRS2007_StatePlane_Texas_South_Central_FIPS_4204','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3674','NAD_1983_NSRS2007_StatePlane_Texas_South_Central_FIPS_4204_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3675','NAD_1983_NSRS2007_StatePlane_Utah_Central_FIPS_4302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3676','NAD_1983_NSRS2007_StatePlane_Utah_Central_FIPS_4302_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3677','NAD_1983_NSRS2007_StatePlane_Utah_Central_FIPS_4302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3678','NAD_1983_NSRS2007_StatePlane_Utah_North_FIPS_4301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3679','NAD_1983_NSRS2007_StatePlane_Utah_North_FIPS_4301_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3680','NAD_1983_NSRS2007_StatePlane_Utah_North_FIPS_4301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3681','NAD_1983_NSRS2007_StatePlane_Utah_South_FIPS_4303','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3682','NAD_1983_NSRS2007_StatePlane_Utah_South_FIPS_4303_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3683','NAD_1983_NSRS2007_StatePlane_Utah_South_FIPS_4303_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3684','NAD_1983_NSRS2007_StatePlane_Vermont_FIPS_4400','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3685','NAD_1983_NSRS2007_StatePlane_Virginia_North_FIPS_4501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3686','NAD_1983_NSRS2007_StatePlane_Virginia_North_FIPS_4501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3687','NAD_1983_NSRS2007_StatePlane_Virginia_South_FIPS_4502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3688','NAD_1983_NSRS2007_StatePlane_Virginia_South_FIPS_4502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3689','NAD_1983_NSRS2007_StatePlane_Washington_North_FIPS_4601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3690','NAD_1983_NSRS2007_StatePlane_Washington_North_FIPS_4601_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3691','NAD_1983_NSRS2007_StatePlane_Washington_South_FIPS_4602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3692','NAD_1983_NSRS2007_StatePlane_Washington_South_FIPS_4602_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3693','NAD_1983_NSRS2007_StatePlane_West_Virginia_North_FIPS_4701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3694','NAD_1983_NSRS2007_StatePlane_West_Virginia_South_FIPS_4702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3695','NAD_1983_NSRS2007_StatePlane_Wisconsin_Central_FIPS_4802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3696','NAD_1983_NSRS2007_StatePlane_Wisconsin_Central_FIPS_4802_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3697','NAD_1983_NSRS2007_StatePlane_Wisconsin_North_FIPS_4801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3698','NAD_1983_NSRS2007_StatePlane_Wisconsin_North_FIPS_4801_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3699','NAD_1983_NSRS2007_StatePlane_Wisconsin_South_FIPS_4803','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3700','NAD_1983_NSRS2007_StatePlane_Wisconsin_South_FIPS_4803_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3701','NAD_1983_NSRS2007_Wisconsin_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3702','NAD_1983_NSRS2007_StatePlane_Wyoming_East_FIPS_4901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3703','NAD_1983_NSRS2007_StatePlane_Wyoming_East_Central_FIPS_4902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3704','NAD_1983_NSRS2007_StatePlane_Wyoming_West_Central_FIPS_4903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3705','NAD_1983_NSRS2007_StatePlane_Wyoming_West_FIPS_4904','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3706','NAD_1983_NSRS2007_UTM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3707','NAD_1983_NSRS2007_UTM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3708','NAD_1983_NSRS2007_UTM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3709','NAD_1983_NSRS2007_UTM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3710','NAD_1983_NSRS2007_UTM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3711','NAD_1983_NSRS2007_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3712','NAD_1983_NSRS2007_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3713','NAD_1983_NSRS2007_UTM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3714','NAD_1983_NSRS2007_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3715','NAD_1983_NSRS2007_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3716','NAD_1983_NSRS2007_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3717','NAD_1983_NSRS2007_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3718','NAD_1983_NSRS2007_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3719','NAD_1983_NSRS2007_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3720','NAD_1983_NSRS2007_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3721','NAD_1983_NSRS2007_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3722','NAD_1983_NSRS2007_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3723','NAD_1983_NSRS2007_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3724','NAD_1983_NSRS2007_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3725','NAD_1983_NSRS2007_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3726','NAD_1983_NSRS2007_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3727','Reunion_1947_TM_Reunion','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3728','NAD_1983_NSRS2007_StatePlane_Ohio_North_FIPS_3401_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3729','NAD_1983_NSRS2007_StatePlane_Ohio_South_FIPS_3402_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3730','NAD_1983_NSRS2007_StatePlane_Wyoming_East_FIPS_4901_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3731','NAD_1983_NSRS2007_StatePlane_Wyoming_E_Central_FIPS_4902_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3732','NAD_1983_NSRS2007_StatePlane_Wyoming_W_Central_FIPS_4903_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3733','NAD_1983_NSRS2007_StatePlane_Wyoming_West_FIPS_4904_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3734','NAD_1983_StatePlane_Ohio_North_FIPS_3401_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3735','NAD_1983_StatePlane_Ohio_South_FIPS_3402_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3736','NAD_1983_StatePlane_Wyoming_East_FIPS_4901_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3737','NAD_1983_StatePlane_Wyoming_East_Central_FIPS_4902_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3738','NAD_1983_StatePlane_Wyoming_West_Central_FIPS_4903_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3739','NAD_1983_StatePlane_Wyoming_West_FIPS_4904_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3740','NAD_1983_HARN_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3741','NAD_1983_HARN_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3742','NAD_1983_HARN_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3743','NAD_1983_HARN_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3744','NAD_1983_HARN_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3745','NAD_1983_HARN_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3746','NAD_1983_HARN_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3747','NAD_1983_HARN_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3748','NAD_1983_HARN_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3749','NAD_1983_HARN_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3750','NAD_1983_HARN_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3751','NAD_1983_HARN_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3753','NAD_1983_HARN_StatePlane_Ohio_North_FIPS_3401_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3754','NAD_1983_HARN_StatePlane_Ohio_South_FIPS_3402_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3755','NAD_1983_HARN_StatePlane_Wyoming_East_FIPS_4901_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3756','NAD_1983_HARN_StatePlane_Wyoming_East_Central_FIPS_4902_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3757','NAD_1983_HARN_StatePlane_Wyoming_West_Central_FIPS_4903_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3758','NAD_1983_HARN_StatePlane_Wyoming_West_FIPS_4904_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3759','NAD_1983_StatePlane_Hawaii_3_FIPS_5103_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3760','NAD_1983_HARN_StatePlane_Hawaii_3_FIPS_5103_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3761','NAD_1983_CSRS_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3762','WGS_1984_South_Georgia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3763','ETRS_1989_Portugal_TM06','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3764','NZGD_2000_Chatham_Island_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3765','HTRS96_Croatia_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3766','HTRS96_Croatia_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3767','HTRS96_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3768','HTRS96_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3769','Bermuda_1957_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3770','Bermuda_2000_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3771','NAD_1927_3TM_111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3772','NAD_1927_3TM_114','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3773','NAD_1927_3TM_117','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3775','NAD_1983_3TM_111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3776','NAD_1983_3TM_114','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3777','NAD_1983_3TM_117','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3779','NAD_1983_CSRS_3TM_111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3780','NAD_1983_CSRS_3TM_114','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3781','NAD_1983_CSRS_3TM_117','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3783','Pitcairn_2006_Pitcairn_TM_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3784','Pitcairn_1967_UTM_Zone_9S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3785','WGS_1984_Web_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3788','NZGD_2000_Auckland_Islands_TM_2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3789','NZGD_2000_Campbell_Island_TM_2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3790','NZGD_2000_Antipodes_Islands_TM_2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3791','NZGD_2000_Raoul_Island_TM_2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3793','NZGD_2000_Chatham_Islands_TM_2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3794','Slovenia_1996_Slovene_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3797','NAD_1927_MTQ_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3798','NAD_1983_MTQ_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3799','NAD_1983_CSRS_MTQ_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3800','NAD_1927_3TM_120','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3801','NAD_1983_3TM_120','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3802','NAD_1983_CSRS_3TM_120','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3812','Belge_Lambert_2008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3814','NAD_1983_Mississippi_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3815','NAD_1983_HARN_Mississippi_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3816','NAD_1983_NSRS2007_Mississippi_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3825','TWD_1997_TM_Penghu','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3826','TWD_1997_TM_Taiwan','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3827','TWD_1967_TM_Penghu','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3828','TWD_1967_TM_Taiwan','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3829','Hu_Tzu_Shan_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3832','WGS_1984_PDC_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3833','Pulkovo_1942_Adj_1958_GK_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3834','Pulkovo_1942_Adj_1983_GK_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3835','Pulkovo_1942_Adj_1983_GK_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3836','Pulkovo_1942_Adj_1983_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3837','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3838','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3839','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3840','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3841','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3844','Pulkovo_1942_Adj_58_Stereo_70','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3845','SWEREF99_RT90_7.5_gon_V_emulation','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3846','SWEREF99_RT90_5_gon_V_emulation','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3847','SWEREF99_RT90_2.5_gon_V_emulation','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3848','SWEREF99_RT90_0_gon_emulation','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3849','SWEREF99_RT90_2.5_gon_O_emulation','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3850','SWEREF99_RT90_5_gon_O_emulation','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3851','NZGD_2000_NZ_Continental_Shelf_2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3852','RSRGD2000_DGLC2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3854','SWEREF99_County_ST74','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3857','WGS_1984_Web_Mercator_Auxiliary_Sphere','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3873','ETRS_1989_GK19FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3874','ETRS_1989_GK20FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3875','ETRS_1989_GK21FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3876','ETRS_1989_GK22FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3877','ETRS_1989_GK23FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3878','ETRS_1989_GK24FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3879','ETRS_1989_GK25FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3880','ETRS_1989_GK26FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3881','ETRS_1989_GK27FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3882','ETRS_1989_GK28FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3883','ETRS_1989_GK29FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3884','ETRS_1989_GK30FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3885','ETRS_1989_GK31FIN','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3890','IGRS_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3891','IGRS_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3892','IGRS_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3893','ED_1950_Iraq_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3907','MGI_1901_Balkans_5_NE_deprecated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3908','MGI_1901_Balkans_6_NE_deprecated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3909','MGI_1901_Balkans_7_NE_deprecated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3910','MGI_1901_Balkans_8_NE_deprecated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3911','MGI_1901_Slovenia_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3912','MGI_1901_Slovene_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3920','Puerto_Rico_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3942','RGF_1993_CC42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3943','RGF_1993_CC43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3944','RGF_1993_CC44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3945','RGF_1993_CC45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3946','RGF_1993_CC46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3947','RGF_1993_CC47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3948','RGF_1993_CC48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3949','RGF_1993_CC49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3950','RGF_1993_CC50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3968','NAD_1983_Virginia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3969','NAD_1983_HARN_Virginia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3970','NAD_1983_NSRS2007_Virginia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3973','WGS_1984_EASE_Grid_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3974','WGS_1984_EASE_Grid_South','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3975','WGS_1984_EASE_Grid_Global','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3976','WGS_1984_NSIDC_Sea_Ice_Polar_Stereographic_South','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3978','NAD_1983_Canada_Atlas_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3979','NAD_1983_CSRS_Canada_Atlas_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3986','Katanga_1955_Katanga_Gauss_Zone_A','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3987','Katanga_1955_Katanga_Gauss_Zone_B','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3988','Katanga_1955_Katanga_Gauss_Zone_C','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3989','Katanga_1955_Katanga_Gauss_Zone_D','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3991','Puerto_Rico_StatePlane_Puerto_Rico_FIPS_5201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3992','Puerto_Rico_StatePlane_Virgin_Islands_St_Croix_FIPS_5202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3994','WGS_1984_Mercator_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3995','WGS_1984_Arctic_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3996','WGS_1984_IBCAO_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3997','WGS_1984_Dubai_Local_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4026','MOLDREF99_Moldova_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4037','WGS_1984_TMzn35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4038','WGS_1984_TMzn36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4048','RGRDC_2005_Congo_TM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4049','RGRDC_2005_Congo_TM_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4050','RGRDC_2005_Congo_TM_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4051','RGRDC_2005_Congo_TM_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4056','RGRDC_2005_Congo_TM_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4057','RGRDC_2005_Congo_TM_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4058','RGRDC_2005_Congo_TM_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4059','RGRDC_2005_Congo_TM_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4060','RGRDC_2005_Congo_TM_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4061','RGRDC_2005_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4062','RGRDC_2005_UTM_Zone_34S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4063','RGRDC_2005_UTM_Zone_35S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4071','Chua_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4082','REGCAN95_UTM_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4083','REGCAN95_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4087','WGS_1984_World_Equidistant_Cylindrical','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4088','World_Equidistant_Cylindrical_(Sphere)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4093','ETRS_1989_DKTM1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4094','ETRS_1989_DKTM2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4095','ETRS_1989_DKTM3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4096','ETRS_1989_DKTM4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4217','NAD_1983_BLM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4390','Kertau_1968_Johor_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4391','Kertau_1968_Sembilan_and_Melaka_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4392','Kertau_1968_Pahang_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4393','Kertau_1968_Selangor_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4394','Kertau_1968_Terengganu_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4395','Kertau_1968_Pinang_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4396','Kertau_1968_Kedah_and_Perlis_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4397','Kertau_1968_Perak_Revised_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4398','Kertau_1968_Kelantan_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4399','NAD_1927_BLM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4400','NAD_1927_BLM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4401','NAD_1927_BLM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4402','NAD_1927_BLM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4403','NAD_1927_BLM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4404','NAD_1927_BLM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4405','NAD_1927_BLM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4406','NAD_1927_BLM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4407','NAD_1927_BLM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4408','NAD_1927_BLM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4409','NAD_1927_BLM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4410','NAD_1927_BLM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4411','NAD_1927_BLM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4412','NAD_1927_BLM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4413','NAD_1927_BLM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4414','NAD_1983_HARN_Guam_Map_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4415','Katanga_1955_Katanga_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4417','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4418','NAD_1927_BLM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4419','NAD_1927_BLM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4420','NAD_1983_BLM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4421','NAD_1983_BLM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4422','NAD_1983_BLM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4423','NAD_1983_BLM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4424','NAD_1983_BLM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4425','NAD_1983_BLM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4426','NAD_1983_BLM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4427','NAD_1983_BLM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4428','NAD_1983_BLM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4429','NAD_1983_BLM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4430','NAD_1983_BLM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4431','NAD_1983_BLM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4432','NAD_1983_BLM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4433','NAD_1983_BLM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4434','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4437','NAD_1983_NSRS2007_StatePlane_Puerto_Rico_Virgin_Isls_FIPS_5200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4438','NAD_1983_BLM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4439','NAD_1983_BLM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4455','NAD_1927_StatePlane_Pennsylvania_South_FIPS_3702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4456','NAD_1927_StatePlane_New_York_Long_Island_FIPS_3104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4457','NAD_1983_StatePlane_South_Dakota_North_FIPS_4001_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4462','WGS_1984_Australian_Centre_for_Remote_Sensing_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4467','RGSPM_2006_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4471','RGM_2004_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4474','Cadastre_1997_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4484','Mexican_Datum_1993_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4485','Mexican_Datum_1993_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4486','Mexican_Datum_1993_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4487','Mexican_Datum_1993_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4488','Mexican_Datum_1993_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4489','Mexican_Datum_1993_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4491','CGCS2000_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4492','CGCS2000_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4493','CGCS2000_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4494','CGCS2000_GK_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4495','CGCS2000_GK_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4496','CGCS2000_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4497','CGCS2000_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4498','CGCS2000_GK_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4499','CGCS2000_GK_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4500','CGCS2000_GK_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4501','CGCS2000_GK_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4502','CGCS2000_GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4503','CGCS2000_GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4504','CGCS2000_GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4505','CGCS2000_GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4506','CGCS2000_GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4507','CGCS2000_GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4508','CGCS2000_GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4509','CGCS2000_GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4510','CGCS2000_GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4511','CGCS2000_GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4512','CGCS2000_GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4513','CGCS2000_3_Degree_GK_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4514','CGCS2000_3_Degree_GK_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4515','CGCS2000_3_Degree_GK_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4516','CGCS2000_3_Degree_GK_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4517','CGCS2000_3_Degree_GK_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4518','CGCS2000_3_Degree_GK_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4519','CGCS2000_3_Degree_GK_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4520','CGCS2000_3_Degree_GK_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4521','CGCS2000_3_Degree_GK_Zone_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4522','CGCS2000_3_Degree_GK_Zone_34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4523','CGCS2000_3_Degree_GK_Zone_35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4524','CGCS2000_3_Degree_GK_Zone_36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4525','CGCS2000_3_Degree_GK_Zone_37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4526','CGCS2000_3_Degree_GK_Zone_38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4527','CGCS2000_3_Degree_GK_Zone_39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4528','CGCS2000_3_Degree_GK_Zone_40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4529','CGCS2000_3_Degree_GK_Zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4530','CGCS2000_3_Degree_GK_Zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4531','CGCS2000_3_Degree_GK_Zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4532','CGCS2000_3_Degree_GK_Zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4533','CGCS2000_3_Degree_GK_Zone_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4534','CGCS2000_3_Degree_GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4535','CGCS2000_3_Degree_GK_CM_78E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4536','CGCS2000_3_Degree_GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4537','CGCS2000_3_Degree_GK_CM_84E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4538','CGCS2000_3_Degree_GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4539','CGCS2000_3_Degree_GK_CM_90E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4540','CGCS2000_3_Degree_GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4541','CGCS2000_3_Degree_GK_CM_96E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4542','CGCS2000_3_Degree_GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4543','CGCS2000_3_Degree_GK_CM_102E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4544','CGCS2000_3_Degree_GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4545','CGCS2000_3_Degree_GK_CM_108E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4546','CGCS2000_3_Degree_GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4547','CGCS2000_3_Degree_GK_CM_114E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4548','CGCS2000_3_Degree_GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4549','CGCS2000_3_Degree_GK_CM_120E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4550','CGCS2000_3_Degree_GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4551','CGCS2000_3_Degree_GK_CM_126E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4552','CGCS2000_3_Degree_GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4553','CGCS2000_3_Degree_GK_CM_132E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4554','CGCS2000_3_Degree_GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4559','RRAF_1991_UTM_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4568','New_Beijing_Gauss_Kruger_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4569','New_Beijing_Gauss_Kruger_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4570','New_Beijing_Gauss_Kruger_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4571','New_Beijing_Gauss_Kruger_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4572','New_Beijing_Gauss_Kruger_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4573','New_Beijing_Gauss_Kruger_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4574','New_Beijing_Gauss_Kruger_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4575','New_Beijing_Gauss_Kruger_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4576','New_Beijing_Gauss_Kruger_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4577','New_Beijing_Gauss_Kruger_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4578','New_Beijing_Gauss_Kruger_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4579','New_Beijing_Gauss_Kruger_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4580','New_Beijing_Gauss_Kruger_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4581','New_Beijing_Gauss_Kruger_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4582','New_Beijing_Gauss_Kruger_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4583','New_Beijing_Gauss_Kruger_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4584','New_Beijing_Gauss_Kruger_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4585','New_Beijing_Gauss_Kruger_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4586','New_Beijing_Gauss_Kruger_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4587','New_Beijing_Gauss_Kruger_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4588','New_Beijing_Gauss_Kruger_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4589','New_Beijing_Gauss_Kruger_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4647','ETRS_1989_UTM_Zone_N32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4652','New_Beijing_3_Degree_Gauss_Kruger_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4653','New_Beijing_3_Degree_Gauss_Kruger_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4654','New_Beijing_3_Degree_Gauss_Kruger_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4655','New_Beijing_3_Degree_Gauss_Kruger_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4656','New_Beijing_3_Degree_Gauss_Kruger_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4766','New_Beijing_3_Degree_Gauss_Kruger_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4767','New_Beijing_3_Degree_Gauss_Kruger_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4768','New_Beijing_3_Degree_Gauss_Kruger_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4769','New_Beijing_3_Degree_Gauss_Kruger_Zone_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4770','New_Beijing_3_Degree_Gauss_Kruger_Zone_34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4771','New_Beijing_3_Degree_Gauss_Kruger_Zone_35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4772','New_Beijing_3_Degree_Gauss_Kruger_Zone_36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4773','New_Beijing_3_Degree_Gauss_Kruger_Zone_37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4774','New_Beijing_3_Degree_Gauss_Kruger_Zone_38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4775','New_Beijing_3_Degree_Gauss_Kruger_Zone_39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4776','New_Beijing_3_Degree_Gauss_Kruger_Zone_40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4777','New_Beijing_3_Degree_Gauss_Kruger_Zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4778','New_Beijing_3_Degree_Gauss_Kruger_Zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4779','New_Beijing_3_Degree_Gauss_Kruger_Zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4780','New_Beijing_3_Degree_Gauss_Kruger_Zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4781','New_Beijing_3_Degree_Gauss_Kruger_Zone_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4782','New_Beijing_3_Degree_Gauss_Kruger_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4783','New_Beijing_3_Degree_Gauss_Kruger_CM_78E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4784','New_Beijing_3_Degree_Gauss_Kruger_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4785','New_Beijing_3_Degree_Gauss_Kruger_CM_84E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4786','New_Beijing_3_Degree_Gauss_Kruger_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4787','New_Beijing_3_Degree_Gauss_Kruger_CM_90E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4788','New_Beijing_3_Degree_Gauss_Kruger_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4789','New_Beijing_3_Degree_Gauss_Kruger_CM_96E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4790','New_Beijing_3_Degree_Gauss_Kruger_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4791','New_Beijing_3_Degree_Gauss_Kruger_CM_102E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4792','New_Beijing_3_Degree_Gauss_Kruger_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4793','New_Beijing_3_Degree_Gauss_Kruger_CM_108E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4794','New_Beijing_3_Degree_Gauss_Kruger_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4795','New_Beijing_3_Degree_Gauss_Kruger_CM_114E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4796','New_Beijing_3_Degree_Gauss_Kruger_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4797','New_Beijing_3_Degree_Gauss_Kruger_CM_120E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4798','New_Beijing_3_Degree_Gauss_Kruger_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4799','New_Beijing_3_Degree_Gauss_Kruger_CM_126E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4800','New_Beijing_3_Degree_Gauss_Kruger_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4822','New_Beijing_3_Degree_Gauss_Kruger_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4826','WGS_1984_Cape_Verde_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','4839','ETRS_1989_LCC_Germany_N-E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5014','PTRA08_UTM_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5015','PTRA08_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5016','PTRA08_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5018','Lisbon_Portuguese_Grid_New','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5041','WGS_1984_UPS_North_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5042','WGS_1984_UPS_South_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5048','ETRS_1989_TM35FIN_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5069','NAD_1927_Contiguous_USA_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5070','NAD_1983_Contiguous_USA_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5071','NAD_1983_HARN_Contiguous_USA_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5072','NAD_1983_NSRS2007_Contiguous_USA_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5105','ETRS_1989_NTM_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5106','ETRS_1989_NTM_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5107','ETRS_1989_NTM_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5108','ETRS_1989_NTM_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5109','ETRS_1989_NTM_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5110','ETRS_1989_NTM_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5111','ETRS_1989_NTM_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5112','ETRS_1989_NTM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5113','ETRS_1989_NTM_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5114','ETRS_1989_NTM_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5115','ETRS_1989_NTM_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5116','ETRS_1989_NTM_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5117','ETRS_1989_NTM_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5118','ETRS_1989_NTM_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5119','ETRS_1989_NTM_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5120','ETRS_1989_NTM_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5121','ETRS_1989_NTM_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5122','ETRS_1989_NTM_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5123','ETRS_1989_NTM_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5124','ETRS_1989_NTM_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5125','ETRS_1989_NTM_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5126','ETRS_1989_NTM_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5127','ETRS_1989_NTM_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5128','ETRS_1989_NTM_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5129','ETRS_1989_NTM_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5130','ETRS_1989_NTM_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5167','Korean_1985_Korea_East_Sea_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5168','Korean_1985_Korea_Central_Belt_Jeju','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5169','Tokyo_1892_Korea_West_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5170','Tokyo_1892_Korea_Central_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5171','Tokyo_1892_Korea_East_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5172','Tokyo_1892_Korea_East_Sea_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5173','Korean_1985_Modified_Korea_West_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5174','Korean_1985_Modified_Korea_Central_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5175','Korean_1985_Modified_Korea_Central_Belt_Jeju','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5176','Korean_1985_Modified_Korea_East_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5177','Korean_1985_Modified_Korea_East_Sea_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5178','Korean_1985_Korea_Unified_Coordinate_System','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5179','KGD2002_Unified_Coordinate_System','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5180','KGD2002_West_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5181','KGD2002_Central_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5182','KGD2002_Central_Belt_Jeju','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5183','KGD2002_East_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5184','KGD2002_East_Sea_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5185','KGD2002_West_Belt_2010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5186','KGD2002_Central_Belt_2010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5187','KGD2002_East_Belt_2010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5188','KGD2002_East_Sea_Belt_2010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5221','S-JTSK_Ferro_Krovak_East_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5223','WGS_1984_UTM_Gabon_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5234','Kandawala_Sri_Lanka_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5235','SLD99_Sri_Lanka_Grid_1999','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5243','ETRS_1989_LCC_Germany_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5247','GDBD2009_GEORSO','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5253','TUREF_TM27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5254','TUREF_TM30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5255','TUREF_TM33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5256','TUREF_TM36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5257','TUREF_TM39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5258','TUREF_TM42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5259','TUREF_TM45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5266','DRUKREF_03_Bhutan_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5269','TUREF_3_Degree_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5270','TUREF_3_Degree_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5271','TUREF_3_Degree_GK_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5272','TUREF_3_Degree_GK_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5273','TUREF_3_Degree_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5274','TUREF_3_Degree_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5275','TUREF_3_Degree_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5292','DRUKREF_03_Bumthang_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5293','DRUKREF_03_Chhukha_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5294','DRUKREF_03_Dagana_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5295','DRUKREF_03_Gasa_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5296','DRUKREF_03_Ha_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5297','DRUKREF_03_Lhuentse_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5298','DRUKREF_03_Mongar_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5299','DRUKREF_03_Paro_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5300','DRUKREF_03_Pemagatshel_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5301','DRUKREF_03_Punakha_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5302','DRUKREF_03_Samdrup_Jongkhar_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5303','DRUKREF_03_Samtse_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5304','DRUKREF_03_Sarpang_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5305','DRUKREF_03_Thimphu_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5306','DRUKREF_03_Trashigang_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5307','DRUKREF_03_Trongsa_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5308','DRUKREF_03_Tsirang_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5309','DRUKREF_03_Wangdue_Phodrang_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5310','DRUKREF_03_Yangtse_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5311','DRUKREF_03_Zhemgang_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5316','ETRS_1989_FAROE_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5320','NAD_1983_Teranet_Ontario_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5321','NAD_1983_CSRS_Teranet_Ontario_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5325','ISN_2004_Lambert_2004','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5329','Gunung_Segara_Jakarta_NEIEZ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5330','Batavia_Jakarta_NEIEZ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5331','Makassar_Jakarta_NEIEZ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5337','Aratu_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5343','POSGAR_2007_Argentina_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5344','POSGAR_2007_Argentina_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5345','POSGAR_2007_Argentina_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5346','POSGAR_2007_Argentina_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5347','POSGAR_2007_Argentina_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5348','POSGAR_2007_Argentina_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5349','POSGAR_2007_Argentina_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5355','MARGEN_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5356','MARGEN_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5357','MARGEN_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5361','SIRGAS-Chile_2002_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5362','SIRGAS-Chile_2002_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5367','CRTM05','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5382','SIRGAS-ROU98_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5383','SIRGAS-ROU98_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5387','Peru96_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5388','Peru96_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5389','Peru96_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5396','SIRGAS_2000_UTM_Zone_26S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5456','Ocotepeque_1935_Costa_Rica_Norte','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5457','Ocotepeque_1935_Costa_Rica_Sur','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5459','Ocotepeque_1935_Guatemala_Sur','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5460','Ocotepeque_1935_El_Salvador_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5461','Ocotepeque_1935_Nicaragua_Norte','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5462','Ocotepeque_1935_Nicaragua_Sur','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5463','SAD_1969_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5469','Panama-Colon_1911_Panama_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5472','Panama-Colon_1911_Panama_Polyconic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5479','RSRGD2000_MSLC2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5480','RSRGD2000_BCLC2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5481','RSRGD2000_PCLC2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5482','RSRGD2000_RSPS2000','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5490','RGAF09_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5513','S-JTSK_Krovak','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5514','S-JTSK_Krovak_East_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5518','Chatham_Island_1971_Map_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5519','Chatham_Islands_1979_Map_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5520','DHDN_3_Degree_Gauss_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5523','WGS_1984_UTM_Gabon_TM_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5530','SAD_1969_96_Brazil_Polyconic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5531','SAD_1969_96_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5532','SAD_1969_96_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5533','SAD_1969_96_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5534','SAD_1969_96_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5535','SAD_1969_96_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5536','Corrego_Alegre_1961_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5537','Corrego_Alegre_1961_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5538','Corrego_Alegre_1961_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5539','Corrego_Alegre_1961_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5550','PNG94_PNGMG94_Zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5551','PNG94_PNGMG94_Zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5552','PNG94_PNGMG94_Zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5559','Ocotepeque_1935_Guatemala_Norte','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5562','Ukraine_2000_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5563','Ukraine_2000_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5564','Ukraine_2000_GK_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5565','Ukraine_2000_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5566','Ukraine_2000_GK_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5567','Ukraine_2000_GK_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5568','Ukraine_2000_GK_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5569','Ukraine_2000_GK_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5570','Ukraine_2000_3_Degree_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5571','Ukraine_2000_3_Degree_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5572','Ukraine_2000_3_Degree_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5573','Ukraine_2000_3_Degree_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5574','Ukraine_2000_3_Degree_GK_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5575','Ukraine_2000_3_Degree_GK_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5576','Ukraine_2000_3_Degree_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5577','Ukraine_2000_3_Degree_GK_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5578','Ukraine_2000_3_Degree_GK_CM_24E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5579','Ukraine_2000_3_Degree_GK_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5580','Ukraine_2000_3_Degree_GK_CM_30E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5581','Ukraine_2000_3_Degree_GK_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5582','Ukraine_2000_3_Degree_GK_CM_36E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5583','Ukraine_2000_3_Degree_GK_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5588','NAD_1927_New_Brunswick_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5589','Sibun_Gorge_1922_Colony_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5596','FEH2010_Fehmarnbelt_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5623','NAD_1927_StatePlane_Michigan_East_Old_FIPS_2101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5624','NAD_1927_StatePlane_Michigan_Central_Old_FIPS_2102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5625','NAD_1927_StatePlane_Michigan_West_Old_FIPS_2103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5627','ED_1950_TM_6_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5629','Moznet_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5631','Pulkovo_1942_Adj_1958_GK_Zone_2_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5632','PTRA08_LCC_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5633','PTRA08_LAEA_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5634','REGCAN95_LCC_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5635','REGCAN95_LAEA_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5636','TUREF_LAEA_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5637','TUREF_LCC_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5638','ISN_2004_LAEA_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5639','ISN_2004_LCC_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5641','SIRGAS_2000_Brazil_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5643','ED_1950_Southern_Permian_Basin_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5644','RGR_1992_UTM_39S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5646','NAD_1983_StatePlane_Vermont_FIPS_4400_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5649','ETRS_1989_UTM_Zone_31N_zE-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5650','ETRS_1989_UTM_Zone_33N_zE-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5651','ETRS_1989_UTM_Zone_31N_N-zE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5652','ETRS_1989_UTM_Zone_32N_N-zE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5653','ETRS_1989_UTM_Zone_33N_N-zE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5654','NAD_1983_HARN_StatePlane_Vermont_FIPS_4400_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5655','NAD_1983_NSRS2007_StatePlane_Vermont_FIPS_4400_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5659','Monte_Mario_TM_Emilia-Romagna','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5663','Pulkovo_1942_Adj_1958_GK_Zone_3_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5664','Pulkovo_1942_Adj_1983_GK_Zone_2_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5665','Pulkovo_1942_Adj_1983_GK_Zone_3_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5666','PD/83_3_Degree_GK_Zone_3_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5667','PD/83_3_Degree_GK_Zone_4_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5668','RD/83_3_Degree_GK_Zone_4_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5669','RD/83_3_Degree_GK_Zone_5_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5670','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_3_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5671','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_4_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5672','Pulkovo_1942_Adj_1958_3_Degree_GK_Zone_5_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5673','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_3_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5674','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_4_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5675','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_5_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5676','DHDN_3_Degree_GK_Zone_2_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5677','DHDN_3_Degree_GK_Zone_3_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5678','DHDN_3_Degree_GK_Zone_4_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5679','DHDN_3_Degree_GK_Zone_5_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5680','DHDN_3_Degree_GK_Zone_1_E-N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5682','DB_REF_3-Degree_GK_Zone_2_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5683','DB_REF_3-Degree_GK_Zone_3_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5684','DB_REF_3-Degree_GK_Zone_4_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5685','DB_REF_3-Degree_GK_Zone_5_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5700','NZGD_2000_UTM_Zone_1S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5825','AGD_1966_ACT_Standard_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5836','Yemen_NGN_1996_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5837','Yemen_NGN_1996_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5839','Peru96_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5842','WGS_1984_TM_12_SE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5844','RGRDC_2005_Congo_TM_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5858','SAD_1969_96_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5875','SAD_1969_96_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5876','SAD_1969_96_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5877','SAD_1969_96_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5879','Cadastre_1997_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5880','SIRGAS_2000_Brazil_Polyconic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5887','TGD2005_Tonga_Map_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5890','JAXA_Snow_Depth_Polar_Stereographic_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5896','VN_2000_TM-3_zone_481','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5897','VN_2000_TM-3_zone_482','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5898','VN_2000_TM-3_zone_491','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5899','VN_2000_TM-3_107-45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5921','WGS_1984_EPSG_Arctic_Regional_zone_A1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5922','WGS_1984_EPSG_Arctic_Regional_zone_A2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5923','WGS_1984_EPSG_Arctic_Regional_zone_A3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5924','WGS_1984_EPSG_Arctic_Regional_zone_A4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5925','WGS_1984_EPSG_Arctic_Regional_zone_A5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5926','WGS_1984_EPSG_Arctic_Regional_zone_B1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5927','WGS_1984_EPSG_Arctic_Regional_zone_B2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5928','WGS_1984_EPSG_Arctic_Regional_zone_B3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5929','WGS_1984_EPSG_Arctic_Regional_zone_B4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5930','WGS_1984_EPSG_Arctic_Regional_zone_B5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5931','WGS_1984_EPSG_Arctic_Regional_zone_C1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5932','WGS_1984_EPSG_Arctic_Regional_zone_C2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5933','WGS_1984_EPSG_Arctic_Regional_zone_C3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5934','WGS_1984_EPSG_Arctic_Regional_zone_C4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5935','WGS_1984_EPSG_Arctic_Regional_zone_C5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5936','WGS_1984_EPSG_Alaska_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5937','WGS_1984_EPSG_Canada_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5938','WGS_1984_EPSG_Greenland_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5939','WGS_1984_EPSG_Norway_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5940','WGS_1984_EPSG_Russia_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6050','GR96_EPSG_Arctic_zone_1-25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6051','GR96_EPSG_Arctic_zone_2-18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6052','GR96_EPSG_Arctic_zone_2-20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6053','GR96_EPSG_Arctic_zone_3-29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6054','GR96_EPSG_Arctic_zone_3-31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6055','GR96_EPSG_Arctic_zone_3-33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6056','GR96_EPSG_Arctic_zone_4-20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6057','GR96_EPSG_Arctic_zone_4-22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6058','GR96_EPSG_Arctic_zone_4-24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6059','GR96_EPSG_Arctic_zone_5-41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6060','GR96_EPSG_Arctic_zone_5-43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6061','GR96_EPSG_Arctic_zone_5-45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6062','GR96_EPSG_Arctic_zone_6-26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6063','GR96_EPSG_Arctic_zone_6-28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6064','GR96_EPSG_Arctic_zone_6-30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6065','GR96_EPSG_Arctic_zone_7-11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6066','GR96_EPSG_Arctic_zone_7-13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6067','GR96_EPSG_Arctic_zone_8-20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6068','GR96_EPSG_Arctic_zone_8-22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6069','ETRS_1989_EPSG_Arctic_zone_2-22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6070','ETRS_1989_EPSG_Arctic_zone_3-11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6071','ETRS_1989_EPSG_Arctic_zone_4-26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6072','ETRS_1989_EPSG_Arctic_zone_4-28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6073','ETRS_1989_EPSG_Arctic_zone_5-11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6074','ETRS_1989_EPSG_Arctic_zone_5-13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6075','WGS_1984_EPSG_Arctic_zone_2-24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6076','WGS_1984_EPSG_Arctic_zone_2-26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6077','WGS_1984_EPSG_Arctic_zone_3-13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6078','WGS_1984_EPSG_Arctic_zone_3-15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6079','WGS_1984_EPSG_Arctic_zone_3-17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6080','WGS_1984_EPSG_Arctic_zone_3-19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6081','WGS_1984_EPSG_Arctic_zone_4-30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6082','WGS_1984_EPSG_Arctic_zone_4-32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6083','WGS_1984_EPSG_Arctic_zone_4-34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6084','WGS_1984_EPSG_Arctic_zone_4-36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6085','WGS_1984_EPSG_Arctic_zone_4-38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6086','WGS_1984_EPSG_Arctic_zone_4-40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6087','WGS_1984_EPSG_Arctic_zone_5-15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6088','WGS_1984_EPSG_Arctic_zone_5-17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6089','WGS_1984_EPSG_Arctic_zone_5-19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6090','WGS_1984_EPSG_Arctic_zone_5-21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6091','WGS_1984_EPSG_Arctic_zone_5-23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6092','WGS_1984_EPSG_Arctic_zone_5-25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6093','WGS_1984_EPSG_Arctic_zone_5-27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6094','NAD_1983_NSRS2007_EPSG_Arctic_zone_5-29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6095','NAD_1983_NSRS2007_EPSG_Arctic_zone_5-31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6096','NAD_1983_NSRS2007_EPSG_Arctic_zone_6-14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6097','NAD_1983_NSRS2007_EPSG_Arctic_zone_6-16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6098','NAD_1983_CSRS_EPSG_Arctic_zone_1-23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6099','NAD_1983_CSRS_EPSG_Arctic_zone_2-14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6100','NAD_1983_CSRS_EPSG_Arctic_zone_2-16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6101','NAD_1983_CSRS_EPSG_Arctic_zone_3-25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6102','NAD_1983_CSRS_EPSG_Arctic_zone_3-27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6103','NAD_1983_CSRS_EPSG_Arctic_zone_3-29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6104','NAD_1983_CSRS_EPSG_Arctic_zone_4-14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6105','NAD_1983_CSRS_EPSG_Arctic_zone_4-16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6106','NAD_1983_CSRS_EPSG_Arctic_zone_4-18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6107','NAD_1983_CSRS_EPSG_Arctic_zone_5-33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6108','NAD_1983_CSRS_EPSG_Arctic_zone_5-35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6109','NAD_1983_CSRS_EPSG_Arctic_zone_5-37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6110','NAD_1983_CSRS_EPSG_Arctic_zone_5-39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6111','NAD_1983_CSRS_EPSG_Arctic_zone_6-18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6112','NAD_1983_CSRS_EPSG_Arctic_zone_6-20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6113','NAD_1983_CSRS_EPSG_Arctic_zone_6-22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6114','NAD_1983_CSRS_EPSG_Arctic_zone_6-24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6115','WGS_1984_EPSG_Arctic_zone_1-27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6116','WGS_1984_EPSG_Arctic_zone_1-29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6117','WGS_1984_EPSG_Arctic_zone_1-31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6118','WGS_1984_EPSG_Arctic_zone_1-21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6119','WGS_1984_EPSG_Arctic_zone_2-28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6120','WGS_1984_EPSG_Arctic_zone_2-10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6121','WGS_1984_EPSG_Arctic_zone_2-12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6122','WGS_1984_EPSG_Arctic_zone_3-21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6123','WGS_1984_EPSG_Arctic_zone_3-23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6124','WGS_1984_EPSG_Arctic_zone_4-12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6125','ETRS_1989_EPSG_Arctic_zone_5-47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6128','Grand_Cayman_National_Grid_1959','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6129','Sister_Islands_National_Grid_1961','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6141','Cayman_Islands_National_Grid_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6204','Macedonian_State_Coordinate_System','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6210','SIRGAS_2000_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6211','SIRGAS_2000_UTM_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6244','MAGNA_Arauca_2007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6245','MAGNA_Armenia_Quindio_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6246','MAGNA_Barranquilla_Atlantico_1997','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6247','MAGNA_Bogota_DC_2005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6248','MAGNA_Bucaramanga_Santander_2008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6249','MAGNA_Cali_Valle_del_Cauca_2009','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6250','MAGNA_Cartagena_Bolivar_2005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6251','MAGNA_Cucuta_Norte_de_Santander_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6252','MAGNA_Florencia_Caqueta_2007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6253','MAGNA_Ibague_Tolima_2007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6254','MAGNA_Inirida_Guainia_2008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6255','MAGNA_Leticia_Amazonas_1994','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6256','MAGNA_Manizales_Caldas_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6257','MAGNA_Medellin_Antioquia_2010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6258','MAGNA_Mitu_Vaupes_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6259','MAGNA_Mocoa_Putumayo_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6260','MAGNA_Monteria_Cordoba_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6261','MAGNA_Neiva_Huila_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6262','MAGNA_Pasto_Narino_2008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6263','MAGNA_Pereira_Risaralda_2007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6264','MAGNA_Popayan_Cauca_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6265','MAGNA_Puerto_Carreno_Vichada_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6266','MAGNA_Quibdo_Choco_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6267','MAGNA_Riohacha_La_Guajira_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6268','MAGNA_San_Andres_2007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6269','MAGNA_San_Jose_del_Guaviare_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6270','MAGNA_Santa_Marta_Magdalena_2007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6271','MAGNA_Sucre_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6272','MAGNA_Tunja_Boyaca_1997','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6273','MAGNA_Valledupar_Cesar_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6274','MAGNA_Villavicencio_Meta_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6275','MAGNA_Yopal_Casanare_2006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6307','NAD_1983_CORS96_SPCS_Puerto_Rico_and_Virgin_Islands','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6312','CGRS_1993_Cyprus_Local_Transverse_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6316','MGI_1901_Balkans_zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6328','NAD_1983_2011_UTM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6329','NAD_1983_2011_UTM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6330','NAD_1983_2011_UTM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6331','NAD_1983_2011_UTM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6332','NAD_1983_2011_UTM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6333','NAD_1983_2011_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6334','NAD_1983_2011_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6335','NAD_1983_2011_UTM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6336','NAD_1983_2011_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6337','NAD_1983_2011_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6338','NAD_1983_2011_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6339','NAD_1983_2011_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6340','NAD_1983_2011_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6341','NAD_1983_2011_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6342','NAD_1983_2011_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6343','NAD_1983_2011_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6344','NAD_1983_2011_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6345','NAD_1983_2011_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6346','NAD_1983_2011_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6347','NAD_1983_2011_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6348','NAD_1983_2011_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6350','NAD_1983_2011_Contiguous_USA_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6351','NAD_1983_2011_EPSG_Arctic_zone_5-29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6352','NAD_1983_2011_EPSG_Arctic_zone_5-31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6353','NAD_1983_2011_EPSG_Arctic_zone_6-14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6354','NAD_1983_2011_EPSG_Arctic_zone_6-16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6355','NAD_1983_2011_StatePlane_Alabama_East_FIPS_0101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6356','NAD_1983_2011_StatePlane_Alabama_West_FIPS_0102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6362','Mexico_ITRF92_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6366','Mexico_ITRF2008_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6367','Mexico_ITRF2008_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6368','Mexico_ITRF2008_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6369','Mexico_ITRF2008_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6370','Mexico_ITRF2008_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6371','Mexico_ITRF2008_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6372','Mexico_ITRF2008_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6381','Ukraine_2000_TM_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6382','Ukraine_2000_TM_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6383','Ukraine_2000_TM_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6384','Ukraine_2000_TM_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6385','Ukraine_2000_TM_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6386','Ukraine_2000_TM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6387','Ukraine_2000_TM_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6391','Cayman_Islands_National_Grid_2011','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6393','NAD_1983_2011_Alaska_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6394','NAD_1983_2011_StatePlane_Alaska_1_FIPS_5001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6395','NAD_1983_2011_StatePlane_Alaska_2_FIPS_5002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6396','NAD_1983_2011_StatePlane_Alaska_3_FIPS_5003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6397','NAD_1983_2011_StatePlane_Alaska_4_FIPS_5004','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6398','NAD_1983_2011_StatePlane_Alaska_5_FIPS_5005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6399','NAD_1983_2011_StatePlane_Alaska_6_FIPS_5006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6400','NAD_1983_2011_StatePlane_Alaska_7_FIPS_5007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6401','NAD_1983_2011_StatePlane_Alaska_8_FIPS_5008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6402','NAD_1983_2011_StatePlane_Alaska_9_FIPS_5009','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6403','NAD_1983_2011_StatePlane_Alaska_10_FIPS_5010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6404','NAD_1983_2011_StatePlane_Arizona_Central_FIPS_0202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6405','NAD_1983_2011_StatePlane_Arizona_Central_FIPS_0202_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6406','NAD_1983_2011_StatePlane_Arizona_East_FIPS_0201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6407','NAD_1983_2011_StatePlane_Arizona_East_FIPS_0201_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6408','NAD_1983_2011_StatePlane_Arizona_West_FIPS_0203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6409','NAD_1983_2011_StatePlane_Arizona_West_FIPS_0203_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6410','NAD_1983_2011_StatePlane_Arkansas_North_FIPS_0301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6411','NAD_1983_2011_StatePlane_Arkansas_North_FIPS_0301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6412','NAD_1983_2011_StatePlane_Arkansas_South_FIPS_0302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6413','NAD_1983_2011_StatePlane_Arkansas_South_FIPS_0302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6414','NAD_1983_2011_California_Teale_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6415','NAD_1983_2011_StatePlane_California_I_FIPS_0401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6416','NAD_1983_2011_StatePlane_California_I_FIPS_0401_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6417','NAD_1983_2011_StatePlane_California_II_FIPS_0402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6418','NAD_1983_2011_StatePlane_California_II_FIPS_0402_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6419','NAD_1983_2011_StatePlane_California_III_FIPS_0403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6420','NAD_1983_2011_StatePlane_California_III_FIPS_0403_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6421','NAD_1983_2011_StatePlane_California_IV_FIPS_0404','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6422','NAD_1983_2011_StatePlane_California_IV_FIPS_0404_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6423','NAD_1983_2011_StatePlane_California_V_FIPS_0405','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6424','NAD_1983_2011_StatePlane_California_V_FIPS_0405_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6425','NAD_1983_2011_StatePlane_California_VI_FIPS_0406','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6426','NAD_1983_2011_StatePlane_California_VI_FIPS_0406_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6427','NAD_1983_2011_StatePlane_Colorado_Central_FIPS_0502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6428','NAD_1983_2011_StatePlane_Colorado_Central_FIPS_0502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6429','NAD_1983_2011_StatePlane_Colorado_North_FIPS_0501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6430','NAD_1983_2011_StatePlane_Colorado_North_FIPS_0501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6431','NAD_1983_2011_StatePlane_Colorado_South_FIPS_0503','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6432','NAD_1983_2011_StatePlane_Colorado_South_FIPS_0503_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6433','NAD_1983_2011_StatePlane_Connecticut_FIPS_0600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6434','NAD_1983_2011_StatePlane_Connecticut_FIPS_0600_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6435','NAD_1983_2011_StatePlane_Delaware_FIPS_0700','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6436','NAD_1983_2011_StatePlane_Delaware_FIPS_0700_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6437','NAD_1983_2011_StatePlane_Florida_East_FIPS_0901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6438','NAD_1983_2011_StatePlane_Florida_East_FIPS_0901_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6439','NAD_1983_2011_Florida_GDL_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6440','NAD_1983_2011_StatePlane_Florida_North_FIPS_0903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6441','NAD_1983_2011_StatePlane_Florida_North_FIPS_0903_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6442','NAD_1983_2011_StatePlane_Florida_West_FIPS_0902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6443','NAD_1983_2011_StatePlane_Florida_West_FIPS_0902_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6444','NAD_1983_2011_StatePlane_Georgia_East_FIPS_1001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6445','NAD_1983_2011_StatePlane_Georgia_East_FIPS_1001_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6446','NAD_1983_2011_StatePlane_Georgia_West_FIPS_1002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6447','NAD_1983_2011_StatePlane_Georgia_West_FIPS_1002_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6448','NAD_1983_2011_StatePlane_Idaho_Central_FIPS_1102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6449','NAD_1983_2011_StatePlane_Idaho_Central_FIPS_1102_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6450','NAD_1983_2011_StatePlane_Idaho_East_FIPS_1101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6451','NAD_1983_2011_StatePlane_Idaho_East_FIPS_1101_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6452','NAD_1983_2011_StatePlane_Idaho_West_FIPS_1103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6453','NAD_1983_2011_StatePlane_Idaho_West_FIPS_1103_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6454','NAD_1983_2011_StatePlane_Illinois_East_FIPS_1201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6455','NAD_1983_2011_StatePlane_Illinois_East_FIPS_1201_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6456','NAD_1983_2011_StatePlane_Illinois_West_FIPS_1202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6457','NAD_1983_2011_StatePlane_Illinois_West_FIPS_1202_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6458','NAD_1983_2011_StatePlane_Indiana_East_FIPS_1301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6459','NAD_1983_2011_StatePlane_Indiana_East_FIPS_1301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6460','NAD_1983_2011_StatePlane_Indiana_West_FIPS_1302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6461','NAD_1983_2011_StatePlane_Indiana_West_FIPS_1302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6462','NAD_1983_2011_StatePlane_Iowa_North_FIPS_1401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6463','NAD_1983_2011_StatePlane_Iowa_North_FIPS_1401_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6464','NAD_1983_2011_StatePlane_Iowa_South_FIPS_1402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6465','NAD_1983_2011_StatePlane_Iowa_South_FIPS_1402_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6466','NAD_1983_2011_StatePlane_Kansas_North_FIPS_1501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6467','NAD_1983_2011_StatePlane_Kansas_North_FIPS_1501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6468','NAD_1983_2011_StatePlane_Kansas_South_FIPS_1502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6469','NAD_1983_2011_StatePlane_Kansas_South_FIPS_1502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6470','NAD_1983_2011_StatePlane_Kentucky_North_FIPS_1601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6471','NAD_1983_2011_StatePlane_Kentucky_North_FIPS_1601_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6472','NAD_1983_2011_StatePlane_Kentucky_FIPS_1600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6473','NAD_1983_2011_StatePlane_Kentucky_FIPS_1600_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6474','NAD_1983_2011_StatePlane_Kentucky_South_FIPS_1602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6475','NAD_1983_2011_StatePlane_Kentucky_South_FIPS_1602_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6476','NAD_1983_2011_StatePlane_Louisiana_North_FIPS_1701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6477','NAD_1983_2011_StatePlane_Louisiana_North_FIPS_1701_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6478','NAD_1983_2011_StatePlane_Louisiana_South_FIPS_1702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6479','NAD_1983_2011_StatePlane_Louisiana_South_FIPS_1702_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6480','NAD_1983_2011_Maine_2000_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6481','NAD_1983_2011_Maine_2000_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6482','NAD_1983_2011_Maine_2000_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6483','NAD_1983_2011_StatePlane_Maine_East_FIPS_1801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6484','NAD_1983_2011_StatePlane_Maine_East_FIPS_1801_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6485','NAD_1983_2011_StatePlane_Maine_West_FIPS_1802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6486','NAD_1983_2011_StatePlane_Maine_West_FIPS_1802_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6487','NAD_1983_2011_StatePlane_Maryland_FIPS_1900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6488','NAD_1983_2011_StatePlane_Maryland_FIPS_1900_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6489','NAD_1983_2011_StatePlane_Massachusetts_Island_FIPS_2002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6490','NAD_1983_2011_StatePlane_Massachusetts_Isl_FIPS_2002_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6491','NAD_1983_2011_StatePlane_Massachusetts_Mainland_FIPS_2001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6492','NAD_1983_2011_StatePlane_Massachusetts_Mnld_FIPS_2001_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6493','NAD_1983_2011_StatePlane_Michigan_Central_FIPS_2112','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6494','NAD_1983_2011_StatePlane_Michigan_Central_FIPS_2112_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6495','NAD_1983_2011_StatePlane_Michigan_North_FIPS_2111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6496','NAD_1983_2011_StatePlane_Michigan_North_FIPS_2111_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6497','NAD_1983_2011_Michigan_GeoRef_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6498','NAD_1983_2011_StatePlane_Michigan_South_FIPS_2113','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6499','NAD_1983_2011_StatePlane_Michigan_South_FIPS_2113_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6500','NAD_1983_2011_StatePlane_Minnesota_Central_FIPS_2202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6501','NAD_1983_2011_StatePlane_Minnesota_Central_FIPS_2202_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6502','NAD_1983_2011_StatePlane_Minnesota_North_FIPS_2201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6503','NAD_1983_2011_StatePlane_Minnesota_North_FIPS_2201_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6504','NAD_1983_2011_StatePlane_Minnesota_South_FIPS_2203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6505','NAD_1983_2011_StatePlane_Minnesota_South_FIPS_2203_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6506','NAD_1983_2011_StatePlane_Mississippi_East_FIPS_2301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6507','NAD_1983_2011_StatePlane_Mississippi_East_FIPS_2301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6508','NAD_1983_2011_Mississippi_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6509','NAD_1983_2011_StatePlane_Mississippi_West_FIPS_2302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6510','NAD_1983_2011_StatePlane_Mississippi_West_FIPS_2302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6511','NAD_1983_2011_StatePlane_Missouri_Central_FIPS_2402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6512','NAD_1983_2011_StatePlane_Missouri_East_FIPS_2401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6513','NAD_1983_2011_StatePlane_Missouri_West_FIPS_2403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6514','NAD_1983_2011_StatePlane_Montana_FIPS_2500','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6515','NAD_1983_2011_StatePlane_Montana_FIPS_2500_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6516','NAD_1983_2011_StatePlane_Nebraska_FIPS_2600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6518','NAD_1983_2011_StatePlane_Nevada_Central_FIPS_2702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6519','NAD_1983_2011_StatePlane_Nevada_Central_FIPS_2702_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6520','NAD_1983_2011_StatePlane_Nevada_East_FIPS_2701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6521','NAD_1983_2011_StatePlane_Nevada_East_FIPS_2701_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6522','NAD_1983_2011_StatePlane_Nevada_West_FIPS_2703','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6523','NAD_1983_2011_StatePlane_Nevada_West_FIPS_2703_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6524','NAD_1983_2011_StatePlane_New_Hampshire_FIPS_2800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6525','NAD_1983_2011_StatePlane_New_Hampshire_FIPS_2800_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6526','NAD_1983_2011_StatePlane_New_Jersey_FIPS_2900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6527','NAD_1983_2011_StatePlane_New_Jersey_FIPS_2900_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6528','NAD_1983_2011_StatePlane_New_Mexico_Central_FIPS_3002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6529','NAD_1983_2011_StatePlane_New_Mexico_Central_FIPS_3002_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6530','NAD_1983_2011_StatePlane_New_Mexico_East_FIPS_3001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6531','NAD_1983_2011_StatePlane_New_Mexico_East_FIPS_3001_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6532','NAD_1983_2011_StatePlane_New_Mexico_West_FIPS_3003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6533','NAD_1983_2011_StatePlane_New_Mexico_West_FIPS_3003_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6534','NAD_1983_2011_StatePlane_New_York_Central_FIPS_3102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6535','NAD_1983_2011_StatePlane_New_York_Central_FIPS_3102_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6536','NAD_1983_2011_StatePlane_New_York_East_FIPS_3101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6537','NAD_1983_2011_StatePlane_New_York_East_FIPS_3101_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6538','NAD_1983_2011_StatePlane_New_York_Long_Island_FIPS_3104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6539','NAD_1983_2011_StatePlane_New_York_Long_Isl_FIPS_3104_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6540','NAD_1983_2011_StatePlane_New_York_West_FIPS_3103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6541','NAD_1983_2011_StatePlane_New_York_West_FIPS_3103_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6542','NAD_1983_2011_StatePlane_North_Carolina_FIPS_3200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6543','NAD_1983_2011_StatePlane_North_Carolina_FIPS_3200_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6544','NAD_1983_2011_StatePlane_North_Dakota_North_FIPS_3301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6545','NAD_1983_2011_StatePlane_North_Dakota_North_FIPS_3301_FtI','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6546','NAD_1983_2011_StatePlane_North_Dakota_South_FIPS_3302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6547','NAD_1983_2011_StatePlane_North_Dakota_South_FIPS_3302_FtI','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6548','NAD_1983_2011_StatePlane_Ohio_North_FIPS_3401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6549','NAD_1983_2011_StatePlane_Ohio_North_FIPS_3401_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6550','NAD_1983_2011_StatePlane_Ohio_South_FIPS_3402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6551','NAD_1983_2011_StatePlane_Ohio_South_FIPS_3402_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6552','NAD_1983_2011_StatePlane_Oklahoma_North_FIPS_3501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6553','NAD_1983_2011_StatePlane_Oklahoma_North_FIPS_3501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6554','NAD_1983_2011_StatePlane_Oklahoma_South_FIPS_3502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6555','NAD_1983_2011_StatePlane_Oklahoma_South_FIPS_3502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6556','NAD_1983_2011_Oregon_Statewide_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6557','NAD_1983_2011_Oregon_Statewide_Lambert_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6558','NAD_1983_2011_StatePlane_Oregon_North_FIPS_3601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6559','NAD_1983_2011_StatePlane_Oregon_North_FIPS_3601_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6560','NAD_1983_2011_StatePlane_Oregon_South_FIPS_3602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6561','NAD_1983_2011_StatePlane_Oregon_South_FIPS_3602_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6562','NAD_1983_2011_StatePlane_Pennsylvania_North_FIPS_3701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6563','NAD_1983_2011_StatePlane_Pennsylvania_North_FIPS_3701_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6564','NAD_1983_2011_StatePlane_Pennsylvania_South_FIPS_3702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6565','NAD_1983_2011_StatePlane_Pennsylvania_South_FIPS_3702_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6566','NAD_1983_2011_StatePlane_Puerto_Rico_Virgin_Isls_FIPS_5200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6567','NAD_1983_2011_StatePlane_Rhode_Island_FIPS_3800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6568','NAD_1983_2011_StatePlane_Rhode_Island_FIPS_3800_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6569','NAD_1983_2011_StatePlane_South_Carolina_FIPS_3900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6570','NAD_1983_2011_StatePlane_South_Carolina_FIPS_3900_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6571','NAD_1983_2011_StatePlane_South_Dakota_North_FIPS_4001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6572','NAD_1983_2011_StatePlane_South_Dakota_North_FIPS_4001_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6573','NAD_1983_2011_StatePlane_South_Dakota_South_FIPS_4002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6574','NAD_1983_2011_StatePlane_South_Dakota_South_FIPS_4002_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6575','NAD_1983_2011_StatePlane_Tennessee_FIPS_4100','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6576','NAD_1983_2011_StatePlane_Tennessee_FIPS_4100_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6577','NAD_1983_2011_StatePlane_Texas_Central_FIPS_4203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6578','NAD_1983_2011_StatePlane_Texas_Central_FIPS_4203_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6579','NAD_1983_2011_Texas_Centric_Mapping_System_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6580','NAD_1983_2011_Texas_Centric_Mapping_System_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6581','NAD_1983_2011_StatePlane_Texas_North_FIPS_4201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6582','NAD_1983_2011_StatePlane_Texas_North_FIPS_4201_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6583','NAD_1983_2011_StatePlane_Texas_North_Central_FIPS_4202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6584','NAD_1983_2011_StatePlane_Texas_North_Central_FIPS_4202_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6585','NAD_1983_2011_StatePlane_Texas_South_FIPS_4205','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6586','NAD_1983_2011_StatePlane_Texas_South_FIPS_4205_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6587','NAD_1983_2011_StatePlane_Texas_South_Central_FIPS_4204','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6588','NAD_1983_2011_StatePlane_Texas_South_Central_FIPS_4204_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6589','NAD_1983_2011_StatePlane_Vermont_FIPS_4400','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6590','NAD_1983_2011_StatePlane_Vermont_FIPS_4400_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6591','NAD_1983_2011_Virginia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6592','NAD_1983_2011_StatePlane_Virginia_North_FIPS_4501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6593','NAD_1983_2011_StatePlane_Virginia_North_FIPS_4501_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6594','NAD_1983_2011_StatePlane_Virginia_South_FIPS_4502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6595','NAD_1983_2011_StatePlane_Virginia_South_FIPS_4502_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6596','NAD_1983_2011_StatePlane_Washington_North_FIPS_4601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6597','NAD_1983_2011_StatePlane_Washington_North_FIPS_4601_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6598','NAD_1983_2011_StatePlane_Washington_South_FIPS_4602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6599','NAD_1983_2011_StatePlane_Washington_South_FIPS_4602_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6600','NAD_1983_2011_StatePlane_West_Virginia_North_FIPS_4701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6601','NAD_1983_2011_StatePlane_West_Virginia_North_FIPS_4701_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6602','NAD_1983_2011_StatePlane_West_Virginia_South_FIPS_4702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6603','NAD_1983_2011_StatePlane_West_Virginia_South_FIPS_4702_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6605','NAD_1983_2011_StatePlane_Wisconsin_Central_FIPS_4802_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6606','NAD_1983_2011_StatePlane_Wisconsin_North_FIPS_4801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6607','NAD_1983_2011_StatePlane_Wisconsin_North_FIPS_4801_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6608','NAD_1983_2011_StatePlane_Wisconsin_South_FIPS_4803','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6609','NAD_1983_2011_StatePlane_Wisconsin_South_FIPS_4803_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6610','NAD_1983_2011_Wisconsin_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6611','NAD_1983_2011_StatePlane_Wyoming_East_FIPS_4901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6612','NAD_1983_2011_StatePlane_Wyoming_East_FIPS_4901_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6613','NAD_1983_2011_StatePlane_Wyoming_East_Central_FIPS_4902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6614','NAD_1983_2011_StatePlane_Wyoming_E_Central_FIPS_4902_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6615','NAD_1983_2011_StatePlane_Wyoming_West_FIPS_4904','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6616','NAD_1983_2011_StatePlane_Wyoming_West_FIPS_4904_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6617','NAD_1983_2011_StatePlane_Wyoming_West_Central_FIPS_4903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6618','NAD_1983_2011_StatePlane_Wyoming_W_Central_FIPS_4903_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6619','NAD_1983_2011_StatePlane_Utah_Central_FIPS_4302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6620','NAD_1983_2011_StatePlane_Utah_North_FIPS_4301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6621','NAD_1983_2011_StatePlane_Utah_South_FIPS_4303','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6622','NAD83(CSRS)v2_Quebec_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6623','NAD_1983_Quebec_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6624','NAD83(CSRS)v2_Quebec_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6625','NAD_1983_2011_StatePlane_Utah_Central_FIPS_4302_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6626','NAD_1983_2011_StatePlane_Utah_North_FIPS_4301_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6627','NAD_1983_2011_StatePlane_Utah_South_FIPS_4303_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6628','NAD_1983_PA11_StatePlane_Hawaii_1_FIPS_5101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6629','NAD_1983_PA11_StatePlane_Hawaii_2_FIPS_5102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6630','NAD_1983_PA11_StatePlane_Hawaii_3_FIPS_5103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6631','NAD_1983_PA11_StatePlane_Hawaii_4_FIPS_5104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6632','NAD_1983_PA11_StatePlane_Hawaii_5_FIPS_5105','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6633','NAD_1983_PA11_StatePlane_Hawaii_3_FIPS_5103_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6634','NAD_1983_PA11_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6635','NAD_1983_PA11_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6636','NAD_1983_PA11_UTM_Zone_2S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6637','NAD_1983_MA11_Guam_Map_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6646','Karbala_1979_Iraq_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6669','JGD_2011_Japan_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6670','JGD_2011_Japan_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6671','JGD_2011_Japan_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6672','JGD_2011_Japan_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6673','JGD_2011_Japan_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6674','JGD_2011_Japan_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6675','JGD_2011_Japan_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6676','JGD_2011_Japan_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6677','JGD_2011_Japan_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6678','JGD_2011_Japan_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6679','JGD_2011_Japan_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6680','JGD_2011_Japan_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6681','JGD_2011_Japan_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6682','JGD_2011_Japan_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6683','JGD_2011_Japan_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6684','JGD_2011_Japan_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6685','JGD_2011_Japan_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6686','JGD_2011_Japan_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6687','JGD_2011_Japan_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6688','JGD_2011_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6689','JGD_2011_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6690','JGD_2011_UTM_Zone_53N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6691','JGD_2011_UTM_Zone_54N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6692','JGD_2011_UTM_Zone_55N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6703','WGS_1984_TM_60_SW','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6707','RDN2008_TM32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6708','RDN2008_TM33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6709','RDN2008_TM34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6720','WGS_1984_CIG92','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6721','GDA_1994_CIG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6722','WGS_1984_CKIG92','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6723','GDA_1994_CKIG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6732','GDA_1994_MGA_zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6733','GDA_1994_MGA_zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6734','GDA_1994_MGA_zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6735','GDA_1994_MGA_zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6736','GDA_1994_MGA_Zone_46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6737','GDA_1994_MGA_Zone_47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6738','GDA_1994_MGA_Zone_59','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6784','OCRS_Baker_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6785','OCRS_Baker_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6786','OCRS_Baker_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6787','OCRS_Baker_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6788','OCRS_Bend-Klamath_Falls_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6789','OCRS_Bend-Klamath_Falls_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6790','OCRS_Bend-Klamath_Falls_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6791','OCRS_Bend-Klamath_Falls_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6792','OCRS_Bend-Redmond-Prineville_NAD_1983_CORS96_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6793','OCRS_Bend-Redmond-Prineville_NAD_1983_CORS96_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6794','OCRS_Bend-Redmond-Prineville_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6795','OCRS_Bend-Redmond-Prineville_NAD_1983_2011_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6796','OCRS_Bend-Burns_NAD_1983_CORS96_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6797','OCRS_Bend-Burns_NAD_1983_CORS96_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6798','OCRS_Bend-Burns_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6799','OCRS_Bend-Burns_NAD_1983_2011_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6800','OCRS_Canyonville-Grants_Pass_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6801','OCRS_Canyonville-Grants_Pass_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6802','OCRS_Canyonville-Grants_Pass_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6803','OCRS_Canyonville-Grants_Pass_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6804','OCRS_Columbia_River_East_NAD_1983_CORS96_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6805','OCRS_Columbia_River_East_NAD_1983_CORS96_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6806','OCRS_Columbia_River_East_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6807','OCRS_Columbia_River_East_NAD_1983_2011_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6808','OCRS_Columbia_River_West_NAD_1983_CORS96_OM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6809','OCRS_Columbia_River_West_NAD_1983_CORS96_OM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6810','OCRS_Columbia_River_West_NAD_1983_2011_OM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6811','OCRS_Columbia_River_West_NAD_1983_2011_OM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6812','OCRS_Cottage_Grove-Canyonville_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6813','OCRS_Cottage_Grove-Canyonville_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6814','OCRS_Cottage_Grove-Canyonville_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6815','OCRS_Cottage_Grove-Canyonville_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6816','OCRS_Dufur-Madras_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6817','OCRS_Dufur-Madras_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6818','OCRS_Dufur-Madras_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6819','OCRS_Dufur-Madras_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6820','OCRS_Eugene_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6821','OCRS_Eugene_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6822','OCRS_Eugene_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6823','OCRS_Eugene_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6824','OCRS_Grants_Pass-Ashland_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6825','OCRS_Grants_Pass-Ashland_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6826','OCRS_Grants_Pass-Ashland_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6827','OCRS_Grants_Pass-Ashland_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6828','OCRS_Gresham-Warm_Springs_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6829','OCRS_Gresham-Warm_Springs_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6830','OCRS_Gresham-Warm_Springs_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6831','OCRS_Gresham-Warm_Springs_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6832','OCRS_La_Grande_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6833','OCRS_La_Grande_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6834','OCRS_La_Grande_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6835','OCRS_La_Grande_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6836','OCRS_Ontario_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6837','OCRS_Ontario_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6838','OCRS_Ontario_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6839','OCRS_Ontario_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6840','OCRS_Oregon_Coast_NAD_1983_CORS96_OM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6841','OCRS_Oregon_Coast_NAD_1983_CORS96_OM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6842','OCRS_Oregon_Coast_NAD_1983_2011_OM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6843','OCRS_Oregon_Coast_NAD_1983_2011_OM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6844','OCRS_Pendleton_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6845','OCRS_Pendleton_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6846','OCRS_Pendleton_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6847','OCRS_Pendleton_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6848','OCRS_Pendleton-La_Grande_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6849','OCRS_Pendleton-La_Grande_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6850','OCRS_Pendleton-La_Grande_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6851','OCRS_Pendleton-La_Grande_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6852','OCRS_Portland_NAD_1983_CORS96_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6853','OCRS_Portland_NAD_1983_CORS96_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6854','OCRS_Portland_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6855','OCRS_Portland_NAD_1983_2011_LCC_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6856','OCRS_Salem_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6857','OCRS_Salem_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6858','OCRS_Salem_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6859','OCRS_Salem_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6860','OCRS_Santiam_Pass_NAD_1983_CORS96_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6861','OCRS_Santiam_Pass_NAD_1983_CORS96_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6862','OCRS_Santiam_Pass_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6863','OCRS_Santiam_Pass_NAD_1983_2011_TM_Feet_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6867','NAD_1983_CORS96_Oregon_Statewide_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6868','NAD_1983_CORS96_Oregon_Statewide_Lambert_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6870','ETRS_1989_Albania_2010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6875','RDN2008_Italy_zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6876','RDN2008_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6879','NAD_1983_2011_StatePlane_Wisconsin_Central_FIPS_4802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6880','NAD_1983_2011_StatePlane_Nebraska_FIPS_2600_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6884','NAD_1983_CORS96_StatePlane_Oregon_North_FIPS_3601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6885','NAD_1983_CORS96_StatePlane_Oregon_North_FIPS_3601_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6886','NAD_1983_CORS96_StatePlane_Oregon_South_FIPS_3602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6887','NAD_1983_CORS96_StatePlane_Oregon_South_FIPS_3602_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6915','South_East_Island_1943_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6922','NAD_1983_Kansas_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6923','NAD_1983_Kansas_LCC_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6924','NAD_1983_2011_Kansas_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6925','NAD_1983_2011_Kansas_LCC_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6931','WGS_1984_EASE-Grid_2.0_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6932','WGS_1984_EASE-Grid_2.0_South','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6933','WGS_1984_EASE-Grid_2.0_Global','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6962','ETRS_1989_Albania_LCC_2010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6984','Israeli_Grid_05','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6991','Israeli_Grid_05-12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7005','Nahrwan_1934_UTM_zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7006','Nahrwan_1934_UTM_zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7007','Nahrwan_1934_UTM_zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7057','NAD_1983_(2011)_IaRCS_zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7058','NAD_1983_(2011)_IaRCS_zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7059','NAD_1983_(2011)_IaRCS_zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7060','NAD_1983_(2011)_IaRCS_zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7061','NAD_1983_(2011)_IaRCS_zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7062','NAD_1983_(2011)_IaRCS_zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7063','NAD_1983_(2011)_IaRCS_zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7064','NAD_1983_(2011)_IaRCS_zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7065','NAD_1983_(2011)_IaRCS_zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7066','NAD_1983_(2011)_IaRCS_zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7067','NAD_1983_(2011)_IaRCS_zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7068','NAD_1983_(2011)_IaRCS_zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7069','NAD_1983_(2011)_IaRCS_zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7070','NAD_1983_(2011)_IaRCS_zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7074','RGTAAF07_UTM_zone_37S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7075','RGTAAF07_UTM_zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7076','RGTAAF07_UTM_zone_39S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7077','RGTAAF07_UTM_zone_40S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7078','RGTAAF07_UTM_zone_41S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7079','RGTAAF07_UTM_zone_42S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7080','RGTAAF07_UTM_zone_43S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7081','RGTAAF07_UTM_zone_44S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7082','RGTAAF07_Terre_Adelie_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7109','NAD_1983_2011_RMTCRS_St_Mary_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7110','NAD_1983_2011_RMTCRS_Blackfeet_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7111','NAD_1983_2011_RMTCRS_Milk_River_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7112','NAD_1983_2011_RMTCRS_Fort_Belknap_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7113','NAD_1983_2011_RMTCRS_Fort_Peck_Assiniboine_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7114','NAD_1983_2011_RMTCRS_Fort_Peck_Sioux_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7115','NAD_1983_2011_RMTCRS_Crow_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7116','NAD_1983_2011_RMTCRS_Bobcat_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7117','NAD_1983_2011_RMTCRS_Billings_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7118','NAD_1983_2011_RMTCRS_Wind_River_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7119','NAD_1983_2011_RMTCRS_St_Mary_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7120','NAD_1983_2011_RMTCRS_Blackfeet_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7121','NAD_1983_2011_RMTCRS_Milk_River_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7122','NAD_1983_2011_RMTCRS_Fort_Belknap_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7123','NAD_1983_2011_RMTCRS_Fort_Peck_Assiniboine_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7124','NAD_1983_2011_RMTCRS_Fort_Peck_Sioux_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7125','NAD_1983_2011_RMTCRS_Crow_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7126','NAD_1983_2011_RMTCRS_Bobcat_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7127','NAD_1983_2011_RMTCRS_Billings_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7128','NAD_1983_2011_RMTCRS_Wind_River_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7131','NAD_1983_2011_San_Francisco_CS13_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7132','NAD_1983_2011_San_Francisco_CS13_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7142','Palestine_1923_Palestine_Grid_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7257','NAD_1983_2011_InGCS_Adams_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7258','NAD_1983_2011_InGCS_Adams_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7259','NAD_1983_2011_InGCS_Allen_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7260','NAD_1983_2011_InGCS_Allen_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7261','NAD_1983_2011_InGCS_Bartholomew_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7262','NAD_1983_2011_InGCS_Bartholomew_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7263','NAD_1983_2011_InGCS_Benton_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7264','NAD_1983_2011_InGCS_Benton_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7265','NAD_1983_2011_InGCS_Blackford-Delaware_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7266','NAD_1983_2011_InGCS_Blackford-Delaware_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7267','NAD_1983_2011_InGCS_Boone-Hendricks_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7268','NAD_1983_2011_InGCS_Boone-Hendricks_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7269','NAD_1983_2011_InGCS_Brown_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7270','NAD_1983_2011_InGCS_Brown_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7271','NAD_1983_2011_InGCS_Carroll_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7272','NAD_1983_2011_InGCS_Carroll_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7273','NAD_1983_2011_InGCS_Cass_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7274','NAD_1983_2011_InGCS_Cass_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7275','NAD_1983_2011_InGCS_Clark-Floyd-Scott_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7276','NAD_1983_2011_InGCS_Clark-Floyd-Scott_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7277','NAD_1983_2011_InGCS_Clay_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7278','NAD_1983_2011_InGCS_Clay_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7279','NAD_1983_2011_InGCS_Clinton_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7280','NAD_1983_2011_InGCS_Clinton_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7281','NAD_1983_2011_InGCS_Crawford-Lawrence-Orange_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7282','NAD_1983_2011_InGCS_Crawford-Lawrence-Orange_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7283','NAD_1983_2011_InGCS_Daviess-Greene_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7284','NAD_1983_2011_InGCS_Daviess-Greene_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7285','NAD_1983_2011_InGCS_Dearborn-Ohio-Switzerland_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7286','NAD_1983_2011_InGCS_Dearborn-Ohio-Switzerland_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7287','NAD_1983_2011_InGCS_Decatur-Rush_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7288','NAD_1983_2011_InGCS_Decatur-Rush_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7289','NAD_1983_2011_InGCS_DeKalb_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7290','NAD_1983_2011_InGCS_DeKalb_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7291','NAD_1983_2011_InGCS_Dubois-Martin_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7292','NAD_1983_2011_InGCS_Dubois-Martin_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7293','NAD_1983_2011_InGCS_Elkhart-Kosciusko-Wabash_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7294','NAD_1983_2011_InGCS_Elkhart-Kosciusko-Wabash_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7295','NAD_1983_2011_InGCS_Fayette-Franklin-Union_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7296','NAD_1983_2011_InGCS_Fayette-Franklin-Union_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7297','NAD_1983_2011_InGCS_Fountain-Warren_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7298','NAD_1983_2011_InGCS_Fountain-Warren_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7299','NAD_1983_2011_InGCS_Fulton-Marshall-St_Joseph_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7300','NAD_1983_2011_InGCS_Fulton-Marshall-St_Joseph_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7301','NAD_1983_2011_InGCS_Gibson_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7302','NAD_1983_2011_InGCS_Gibson_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7303','NAD_1983_2011_InGCS_Grant_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7304','NAD_1983_2011_InGCS_Grant_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7305','NAD_1983_2011_InGCS_Hamilton-Tipton_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7306','NAD_1983_2011_InGCS_Hamilton-Tipton_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7307','NAD_1983_2011_InGCS_Hancock-Madison_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7308','NAD_1983_2011_InGCS_Hancock-Madison_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7309','NAD_1983_2011_InGCS_Harrison-Washington_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7310','NAD_1983_2011_InGCS_Harrison-Washington_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7311','NAD_1983_2011_InGCS_Henry_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7312','NAD_1983_2011_InGCS_Henry_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7313','NAD_1983_2011_InGCS_Howard-Miami_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7314','NAD_1983_2011_InGCS_Howard-Miami_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7315','NAD_1983_2011_InGCS_Huntington-Whitley_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7316','NAD_1983_2011_InGCS_Huntington-Whitley_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7317','NAD_1983_2011_InGCS_Jackson_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7318','NAD_1983_2011_InGCS_Jackson_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7319','NAD_1983_2011_InGCS_Jasper-Porter_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7320','NAD_1983_2011_InGCS_Jasper-Porter_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7321','NAD_1983_2011_InGCS_Jay_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7322','NAD_1983_2011_InGCS_Jay_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7323','NAD_1983_2011_InGCS_Jefferson_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7324','NAD_1983_2011_InGCS_Jefferson_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7325','NAD_1983_2011_InGCS_Jennings_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7326','NAD_1983_2011_InGCS_Jennings_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7327','NAD_1983_2011_InGCS_Johnson-Marion_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7328','NAD_1983_2011_InGCS_Johnson-Marion_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7329','NAD_1983_2011_InGCS_Knox_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7330','NAD_1983_2011_InGCS_Knox_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7331','NAD_1983_2011_InGCS_LaGrange-Noble_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7332','NAD_1983_2011_InGCS_LaGrange-Noble_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7333','NAD_1983_2011_InGCS_Lake-Newton_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7334','NAD_1983_2011_InGCS_Lake-Newton_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7335','NAD_1983_2011_InGCS_LaPorte-Pulaski-Starke_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7336','NAD_1983_2011_InGCS_LaPorte-Pulaski-Starke_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7337','NAD_1983_2011_InGCS_Monroe-Morgan_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7338','NAD_1983_2011_InGCS_Monroe-Morgan_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7339','NAD_1983_2011_InGCS_Montgomery-Putnam_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7340','NAD_1983_2011_InGCS_Montgomery-Putnam_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7341','NAD_1983_2011_InGCS_Owen_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7342','NAD_1983_2011_InGCS_Owen_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7343','NAD_1983_2011_InGCS_Parke-Vermillion_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7344','NAD_1983_2011_InGCS_Parke-Vermillion_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7345','NAD_1983_2011_InGCS_Perry_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7346','NAD_1983_2011_InGCS_Perry_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7347','NAD_1983_2011_InGCS_Pike-Warrick_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7348','NAD_1983_2011_InGCS_Pike-Warrick_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7349','NAD_1983_2011_InGCS_Posey_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7350','NAD_1983_2011_InGCS_Posey_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7351','NAD_1983_2011_InGCS_Randolph-Wayne_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7352','NAD_1983_2011_InGCS_Randolph-Wayne_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7353','NAD_1983_2011_InGCS_Ripley_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7354','NAD_1983_2011_InGCS_Ripley_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7355','NAD_1983_2011_InGCS_Shelby_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7356','NAD_1983_2011_InGCS_Shelby_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7357','NAD_1983_2011_InGCS_Spencer_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7358','NAD_1983_2011_InGCS_Spencer_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7359','NAD_1983_2011_InGCS_Steuben_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7360','NAD_1983_2011_InGCS_Steuben_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7361','NAD_1983_2011_InGCS_Sullivan_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7362','NAD_1983_2011_InGCS_Sullivan_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7363','NAD_1983_2011_InGCS_Tippecanoe-White_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7364','NAD_1983_2011_InGCS_Tippecanoe-White_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7365','NAD_1983_2011_InGCS_Vanderburgh_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7366','NAD_1983_2011_InGCS_Vanderburgh_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7367','NAD_1983_2011_InGCS_Vigo_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7368','NAD_1983_2011_InGCS_Vigo_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7369','NAD_1983_2011_InGCS_Wells_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7370','NAD_1983_2011_InGCS_Wells_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7374','ONGD14_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7375','ONGD14_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7376','ONGD14_UTM_Zone_41N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7528','NAD_1983_2011_WISCRS_Adams_and_Juneau_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7529','NAD_1983_2011_WISCRS_Ashland_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7530','NAD_1983_2011_WISCRS_Barron_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7531','NAD_1983_2011_WISCRS_Bayfield_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7532','NAD_1983_2011_WISCRS_Brown_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7533','NAD_1983_2011_WISCRS_Buffalo_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7534','NAD_1983_2011_WISCRS_Burnett_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7535','NAD_1983_2011_WISCRS_Calumet_Fond_du_Lac_Outagamie_Winnebago_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7536','NAD_1983_2011_WISCRS_Chippewa_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7537','NAD_1983_2011_WISCRS_Clark_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7538','NAD_1983_2011_WISCRS_Columbia_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7539','NAD_1983_2011_WISCRS_Crawford_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7540','NAD_1983_2011_WISCRS_Dane_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7541','NAD_1983_2011_WISCRS_Dodge_and_Jefferson_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7542','NAD_1983_2011_WISCRS_Door_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7543','NAD_1983_2011_WISCRS_Douglas_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7544','NAD_1983_2011_WISCRS_Dunn_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7545','NAD_1983_2011_WISCRS_EauClaire_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7546','NAD_1983_2011_WISCRS_Florence_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7547','NAD_1983_2011_WISCRS_Forest_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7548','NAD_1983_2011_WISCRS_Grant_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7549','NAD_1983_2011_WISCRS_Green_and_Lafayette_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7550','NAD_1983_2011_WISCRS_Green_Lake_and_Marquette_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7551','NAD_1983_2011_WISCRS_Iowa_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7552','NAD_1983_2011_WISCRS_Iron_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7553','NAD_1983_2011_WISCRS_Jackson_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7554','NAD_1983_2011_WISCRS_Kenosha_Milwaukee_Ozaukee_Racine_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7555','NAD_1983_2011_WISCRS_Kewaunee_Manitowoc_Sheboygan_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7556','NAD_1983_2011_WISCRS_La_Crosse_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7557','NAD_1983_2011_WISCRS_Langlade_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7558','NAD_1983_2011_WISCRS_Lincoln_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7559','NAD_1983_2011_WISCRS_Marathon_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7560','NAD_1983_2011_WISCRS_Marinette_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7561','NAD_1983_2011_WISCRS_Menominee_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7562','NAD_1983_2011_WISCRS_Monroe_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7563','NAD_1983_2011_WISCRS_Oconto_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7564','NAD_1983_2011_WISCRS_Oneida_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7565','NAD_1983_2011_WISCRS_Pepin_and_Pierce_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7566','NAD_1983_2011_WISCRS_Polk_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7567','NAD_1983_2011_WISCRS_Portage_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7568','NAD_1983_2011_WISCRS_Price_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7569','NAD_1983_2011_WISCRS_Richland_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7570','NAD_1983_2011_WISCRS_Rock_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7571','NAD_1983_2011_WISCRS_Rusk_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7572','NAD_1983_2011_WISCRS_Sauk_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7573','NAD_1983_2011_WISCRS_Sawyer_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7574','NAD_1983_2011_WISCRS_Shawano_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7575','NAD_1983_2011_WISCRS_St_Croix_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7576','NAD_1983_2011_WISCRS_Taylor_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7577','NAD_1983_2011_WISCRS_Trempealeau_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7578','NAD_1983_2011_WISCRS_Vernon_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7579','NAD_1983_2011_WISCRS_Vilas_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7580','NAD_1983_2011_WISCRS_Walworth_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7581','NAD_1983_2011_WISCRS_Washburn_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7582','NAD_1983_2011_WISCRS_Washington_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7583','NAD_1983_2011_WISCRS_Waukesha_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7584','NAD_1983_2011_WISCRS_Waupaca_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7585','NAD_1983_2011_WISCRS_Waushara_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7586','NAD_1983_2011_WISCRS_Wood_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7587','NAD_1983_2011_WISCRS_Adams_and_Juneau_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7588','NAD_1983_2011_WISCRS_Ashland_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7589','NAD_1983_2011_WISCRS_Barron_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7590','NAD_1983_2011_WISCRS_Bayfield_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7591','NAD_1983_2011_WISCRS_Brown_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7592','NAD_1983_2011_WISCRS_Buffalo_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7593','NAD_1983_2011_WISCRS_Burnett_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7594','NAD_1983_2011_WISCRS_Calumet_Fond_du_Lac_Outagamie_Winnebago_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7595','NAD_1983_2011_WISCRS_Chippewa_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7596','NAD_1983_2011_WISCRS_Clark_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7597','NAD_1983_2011_WISCRS_Columbia_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7598','NAD_1983_2011_WISCRS_Crawford_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7599','NAD_1983_2011_WISCRS_Dane_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7600','NAD_1983_2011_WISCRS_Dodge_and_Jefferson_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7601','NAD_1983_2011_WISCRS_Door_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7602','NAD_1983_2011_WISCRS_Douglas_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7603','NAD_1983_2011_WISCRS_Dunn_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7604','NAD_1983_2011_WISCRS_Eau_Claire_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7605','NAD_1983_2011_WISCRS_Florence_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7606','NAD_1983_2011_WISCRS_Forest_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7607','NAD_1983_2011_WISCRS_Grant_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7608','NAD_1983_2011_WISCRS_Green_and_Lafayette_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7609','NAD_1983_2011_WISCRS_Green_Lake_and_Marquette_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7610','NAD_1983_2011_WISCRS_Iowa_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7611','NAD_1983_2011_WISCRS_Iron_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7612','NAD_1983_2011_WISCRS_Jackson_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7613','NAD_1983_2011_WISCRS_Kenosha_Milwaukee_Ozaukee_Racine_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7614','NAD_1983_2011_WISCRS_Kewaunee_Manitowoc_Sheboygan_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7615','NAD_1983_2011_WISCRS_La_Crosse_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7616','NAD_1983_2011_WISCRS_Langlade_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7617','NAD_1983_2011_WISCRS_Lincoln_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7618','NAD_1983_2011_WISCRS_Marathon_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7619','NAD_1983_2011_WISCRS_Marinette_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7620','NAD_1983_2011_WISCRS_Menominee_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7621','NAD_1983_2011_WISCRS_Monroe_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7622','NAD_1983_2011_WISCRS_Oconto_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7623','NAD_1983_2011_WISCRS_Oneida_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7624','NAD_1983_2011_WISCRS_Pepin_and_Pierce_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7625','NAD_1983_2011_WISCRS_Polk_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7626','NAD_1983_2011_WISCRS_Portage_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7627','NAD_1983_2011_WISCRS_Price_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7628','NAD_1983_2011_WISCRS_Richland_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7629','NAD_1983_2011_WISCRS_Rock_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7630','NAD_1983_2011_WISCRS_Rusk_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7631','NAD_1983_2011_WISCRS_Sauk_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7632','NAD_1983_2011_WISCRS_Sawyer_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7633','NAD_1983_2011_WISCRS_Shawano_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7634','NAD_1983_2011_WISCRS_St_Croix_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7635','NAD_1983_2011_WISCRS_Taylor_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7636','NAD_1983_2011_WISCRS_Trempealeau_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7637','NAD_1983_2011_WISCRS_Vernon_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7638','NAD_1983_2011_WISCRS_Vilas_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7639','NAD_1983_2011_WISCRS_Walworth_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7640','NAD_1983_2011_WISCRS_Washburn_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7641','NAD_1983_2011_WISCRS_Washington_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7642','NAD_1983_2011_WISCRS_Waukesha_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7643','NAD_1983_2011_WISCRS_Waupaca_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7644','NAD_1983_2011_WISCRS_Waushara_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7645','NAD_1983_2011_WISCRS_Wood_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7692','Kyrg-06_TM_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7693','Kyrg-06_TM_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7694','Kyrg-06_TM_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7695','Kyrg-06_TM_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7696','Kyrg-06_TM_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7755','WGS_1984_India_NSF_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7756','WGS_1984_Andhra_Pradesh','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7757','WGS_1984_Arunachal_Pradesh','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7758','WGS_1984_Assam','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7759','WGS_1984_Bihar','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7760','WGS_1984_Delhi','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7761','WGS_1984_Gujarat','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7762','WGS_1984_Haryana','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7763','WGS_1984_Himachal_Pradesh','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7764','WGS_1984_Jammu_and_Kashmir','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7765','WGS_1984_Jharkhand','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7766','WGS_1984_Madhya_Pradesh','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7767','WGS_1984_Maharashtra','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7768','WGS_1984_Manipur','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7769','WGS_1984_Meghalaya','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7770','WGS_1984_Nagaland','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7771','WGS_1984_India_Northeast','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7772','WGS_1984_Orissa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7773','WGS_1984_Punjab','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7774','WGS_1984_Rajasthan','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7775','WGS_1984_Uttar_Pradesh','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7776','WGS_1984_Uttaranchal','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7777','WGS_1984_Andaman_and_Nicobar_Islands','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7778','WGS_1984_Chhattisgarh','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7779','WGS_1984_Goa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7780','WGS_1984_Karnataka','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7781','WGS_1984_Kerala','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7782','WGS_1984_Lakshadweep','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7783','WGS_1984_Mizoram','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7784','WGS_1984_Sikkim','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7785','WGS_1984_Tamil_Nadu','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7786','WGS_1984_Tripura','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7787','WGS_1984_West_Bengal','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7791','RDN2008_UTM_zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7792','RDN2008_UTM_zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7793','RDN2008_UTM_zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7794','RDN2008_Italy_zone_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7795','RDN2008_Zone_12_(E-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7799','BGS2005_UTM_zone_34N_(N-E)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7800','BGS2005_UTM_zone_35N_(N-E)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7801','BGS2005_CCS2005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7803','BGS2005_UTM_zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7804','BGS2005_UTM_zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7805','BGS2005_UTM_zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7825','Pulkovo_1942_CS63_zone_X1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7826','Pulkovo_1942_CS63_zone_X2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7827','Pulkovo_1942_CS63_zone_X3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7828','Pulkovo_1942_CS63_zone_X4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7829','Pulkovo_1942_CS63_zone_X5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7830','Pulkovo_1942_CS63_zone_X6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7831','Pulkovo_1942_CS63_zone_X7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7845','GDA2020_GA_LCC','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7846','GDA2020_MGA_Zone_46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7847','GDA2020_MGA_Zone_47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7848','GDA2020_MGA_Zone_48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7849','GDA2020_MGA_Zone_49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7850','GDA2020_MGA_Zone_50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7851','GDA2020_MGA_Zone_51','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7852','GDA2020_MGA_Zone_52','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7853','GDA2020_MGA_Zone_53','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7854','GDA2020_MGA_Zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7855','GDA2020_MGA_Zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7856','GDA2020_MGA_Zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7857','GDA2020_MGA_Zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7858','GDA2020_MGA_Zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7859','GDA2020_MGA_Zone_59','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7877','Astro_DOS_71_4_SHLG71','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7878','Astro_DOS_71_4_UTM_zone_30S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7882','St_Helena_Tritan_SHLG(Tritan)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7883','St_Helena_Tritan_UTM_zone_30S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7899','GDA2020_Vicgrid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7991','NAD27_MTM_zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','7992','Malongo_1987_UTM_zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8013','GDA2020_ALB2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8014','GDA2020_BIO2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8015','GDA2020_BRO2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8016','GDA2020_BCG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8017','GDA2020_CARN2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8018','GDA2020_CIG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8019','GDA2020_CKIG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8020','GDA2020_COL2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8021','GDA2020_ESP2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8022','GDA2020_EXM2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8023','GDA2020_GCG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8024','GDA2020_GOLD2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8025','GDA2020_JCG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8026','GDA2020_KALB2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8027','GDA2020_KAR2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8028','GDA2020_KUN2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8029','GDA2020_LCG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8030','GDA2020_MRCG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8031','GDA2020_PCG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8032','GDA2020_PHG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8035','WGS_1984_TM_Zone_20N_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8036','WGS_1984_TM_Zone_21N_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8058','GDA2020_NSW_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8059','GDA2020_South_Australia_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8065','NAD_1983_(2011)_PCCS_zone_1_(ft)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8066','NAD_1983_(2011)_PCCS_zone_2_(ft)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8067','NAD_1983_(2011)_PCCS_zone_3_(ft)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8068','NAD_1983_(2011)_PCCS_zone_4_(ft)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8082','NAD_1983_(CSRS)_v6_MTM_Nova_Scotia_zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8083','NAD_1983_(CSRS)_v6_MTM_Nova_Scotia_zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8088','ISN2016_Lambert_2016','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8090','NAD_1983_HARN_WISCRS_Florence_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8091','NAD_1983_HARN_WISCRS_Florence_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8092','NAD_1983_HARN_WISCRS_EauClaire_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8093','NAD_1983_HARN_WISCRS_EauClaire_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8095','NAD_1983_HARN_WISCRS_Wood_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8096','NAD_1983_HARN_WISCRS_Wood_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8097','NAD_1983_HARN_WISCRS_Waushara_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8098','NAD_1983_HARN_WISCRS_Waushara_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8099','NAD_1983_HARN_WISCRS_Waupaca_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8100','NAD_1983_HARN_WISCRS_Waupaca_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8101','NAD_1983_HARN_WISCRS_Waukesha_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8102','NAD_1983_HARN_WISCRS_Waukesha_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8103','NAD_1983_HARN_WISCRS_Washington_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8104','NAD_1983_HARN_WISCRS_Washington_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8105','NAD_1983_HARN_WISCRS_Washburn_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8106','NAD_1983_HARN_WISCRS_Washburn_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8107','NAD_1983_HARN_WISCRS_Walworth_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8108','NAD_1983_HARN_WISCRS_Walworth_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8109','NAD_1983_HARN_WISCRS_Vilas_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8110','NAD_1983_HARN_WISCRS_Vilas_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8111','NAD_1983_HARN_WISCRS_Vernon_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8112','NAD_1983_HARN_WISCRS_Vernon_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8113','NAD_1983_HARN_WISCRS_Trempealeau_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8114','NAD_1983_HARN_WISCRS_Trempealeau_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8115','NAD_1983_HARN_WISCRS_Taylor_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8116','NAD_1983_HARN_WISCRS_Taylor_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8117','NAD_1983_HARN_WISCRS_St_Croix_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8118','NAD_1983_HARN_WISCRS_St_Croix_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8119','NAD_1983_HARN_WISCRS_Shawano_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8120','NAD_1983_HARN_WISCRS_Shawano_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8121','NAD_1983_HARN_WISCRS_Sawyer_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8122','NAD_1983_HARN_WISCRS_Sawyer_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8123','NAD_1983_HARN_WISCRS_Sauk_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8124','NAD_1983_HARN_WISCRS_Sauk_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8125','NAD_1983_HARN_WISCRS_Rusk_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8126','NAD_1983_HARN_WISCRS_Rusk_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8127','NAD_1983_HARN_WISCRS_Rock_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8128','NAD_1983_HARN_WISCRS_Rock_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8129','NAD_1983_HARN_WISCRS_Richland_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8130','NAD_1983_HARN_WISCRS_Richland_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8131','NAD_1983_HARN_WISCRS_Price_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8132','NAD_1983_HARN_WISCRS_Price_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8133','NAD_1983_HARN_WISCRS_Portage_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8134','NAD_1983_HARN_WISCRS_Portage_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8135','NAD_1983_HARN_WISCRS_Polk_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8136','NAD_1983_HARN_WISCRS_Polk_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8137','NAD_1983_HARN_WISCRS_Pepin_and_Pierce_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8138','NAD_1983_HARN_WISCRS_Pepin_and_Pierce_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8139','NAD_1983_HARN_WISCRS_Oneida_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8140','NAD_1983_HARN_WISCRS_Oneida_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8141','NAD_1983_HARN_WISCRS_Oconto_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8142','NAD_1983_HARN_WISCRS_Oconto_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8143','NAD_1983_HARN_WISCRS_Monroe_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8144','NAD_1983_HARN_WISCRS_Monroe_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8145','NAD_1983_HARN_WISCRS_Menominee_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8146','NAD_1983_HARN_WISCRS_Menominee_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8147','NAD_1983_HARN_WISCRS_Marinette_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8148','NAD_1983_HARN_WISCRS_Marinette_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8149','NAD_1983_HARN_WISCRS_Marathon_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8150','NAD_1983_HARN_WISCRS_Marathon_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8151','NAD_1983_HARN_WISCRS_Lincoln_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8152','NAD_1983_HARN_WISCRS_Lincoln_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8153','NAD_1983_HARN_WISCRS_Langlade_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8154','NAD_1983_HARN_WISCRS_Langlade_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8155','NAD_1983_HARN_WISCRS_LaCrosse_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8156','NAD_1983_HARN_WISCRS_LaCrosse_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8157','NAD_1983_HARN_WISCRS_Kewaunee_Manitowoc_and_Sheboygan_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8158','NAD_1983_HARN_WISCRS_Kewaunee_Manitowoc_and_Sheboygan_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8159','NAD_1983_HARN_WISCRS_Kenosha_Milwaukee_Ozaukee_and_Racine_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8160','NAD_1983_HARN_WISCRS_Kenosha_Milwaukee_Ozaukee_and_Racine_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8161','NAD_1983_HARN_WISCRS_Jackson_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8162','NAD_1983_HARN_WISCRS_Jackson_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8163','NAD_1983_HARN_WISCRS_Iron_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8164','NAD_1983_HARN_WISCRS_Iron_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8165','NAD_1983_HARN_WISCRS_Iowa_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8166','NAD_1983_HARN_WISCRS_Iowa_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8167','NAD_1983_HARN_WISCRS_Green_Lake_and_Marquette_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8168','NAD_1983_HARN_WISCRS_Green_Lake_and_Marquette_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8169','NAD_1983_HARN_WISCRS_Green_and_Lafayette_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8170','NAD_1983_HARN_WISCRS_Green_and_Lafayette_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8171','NAD_1983_HARN_WISCRS_Grant_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8172','NAD_1983_HARN_WISCRS_Grant_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8173','NAD_1983_HARN_WISCRS_Forest_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8177','NAD_1983_HARN_WISCRS_Forest_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8179','NAD_1983_HARN_WISCRS_Dunn_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8180','NAD_1983_HARN_WISCRS_Dunn_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8181','NAD_1983_HARN_WISCRS_Douglas_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8182','NAD_1983_HARN_WISCRS_Douglas_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8184','NAD_1983_HARN_WISCRS_Door_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8185','NAD_1983_HARN_WISCRS_Door_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8187','NAD_1983_HARN_WISCRS_Dodge_and_Jefferson_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8189','NAD_1983_HARN_WISCRS_Dodge_and_Jefferson_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8191','NAD_1983_HARN_WISCRS_Dane_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8193','NAD_1983_HARN_WISCRS_Dane_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8196','NAD_1983_HARN_WISCRS_Crawford_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8197','NAD_1983_HARN_WISCRS_Crawford_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8198','NAD_1983_HARN_WISCRS_Columbia_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8200','NAD_1983_HARN_WISCRS_Columbia_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8201','NAD_1983_HARN_WISCRS_Clark_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8202','NAD_1983_HARN_WISCRS_Clark_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8203','NAD_1983_HARN_WISCRS_Chippewa_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8204','NAD_1983_HARN_WISCRS_Chippewa_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8205','NAD_1983_HARN_WISCRS_Calumet_Fond_du_Lac_Outagamie_and_Winnebago_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8206','NAD_1983_HARN_WISCRS_Calumet_Fond_du_Lac_Outagamie_and_Winnebago_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8207','NAD_1983_HARN_WISCRS_Burnett_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8208','NAD_1983_HARN_WISCRS_Burnett_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8209','NAD_1983_HARN_WISCRS_Buffalo_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8210','NAD_1983_HARN_WISCRS_Buffalo_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8212','NAD_1983_HARN_WISCRS_Brown_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8213','NAD_1983_HARN_WISCRS_Brown_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8214','NAD_1983_HARN_WISCRS_Bayfield_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8216','NAD_1983_HARN_WISCRS_Bayfield_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8218','NAD_1983_HARN_WISCRS_Barron_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8220','NAD_1983_HARN_WISCRS_Barron_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8222','NAD_1983_HARN_WISCRS_Ashland_County_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8224','NAD_1983_HARN_WISCRS_Ashland_County_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8225','NAD_1983_HARN_WISCRS_Adams_and_Juneau_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8226','NAD_1983_HARN_WISCRS_Adams_and_Juneau_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8311','OCRS_Burns-Harper_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8312','OCRS_Burns-Harper_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8313','OCRS_Canyon_City-Burns_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8314','OCRS_Canyon_City-Burns_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8315','OCRS_Coast_Range_North_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8316','OCRS_Coast_Range_North_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8317','OCRS_Dayville-Prairie_City_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8318','OCRS_Dayville-Prairie_City_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8319','OCRS_Denio-Burns_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8320','OCRS_Denio-Burns_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8321','OCRS_Halfway_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8322','OCRS_Halfway_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8323','OCRS_Medford-Diamond_Lake_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8324','OCRS_Medford-Diamond_Lake_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8325','OCRS_Mitchell_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8326','OCRS_Mitchell_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8327','OCRS_North_Central_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8328','OCRS_North_Central_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8329','OCRS_Ochoco_Summit_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8330','OCRS_Ochoco_Summit_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8331','OCRS_Owyhee_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8332','OCRS_Owyhee_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8333','OCRS_Pilot_Rock-Ukiah_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8334','OCRS_Pilot_Rock-Ukiah_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8335','OCRS_Prairie_City-Brogan_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8336','OCRS_Prairie_City-Brogan_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8337','OCRS_Riley-Lakeview_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8338','OCRS_Riley-Lakeview_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8339','OCRS_Siskiyou_Pass_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8340','OCRS_Siskiyou_Pass_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8341','OCRS_Ukiah-Fox_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8342','OCRS_Ukiah-Fox_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8343','OCRS_Wallowa_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8344','OCRS_Wallowa_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8345','OCRS_Warner_Highway_NAD_1983_2011_LCC_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8346','OCRS_Warner_Highway_NAD_1983_2011_LCC_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8347','OCRS_Willamette_Pass_NAD_1983_2011_TM_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8348','OCRS_Willamette_Pass_NAD_1983_2011_TM_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8352','S-JTSK_[JTSK03]_Krovak','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8352','S_JTSK_JTSK03_Krovak','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8353','S-JTSK_[JTSK03]_Krovak_East_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8353','S_JTSK_JTSK03_Krovak_East_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8379','NAD_1983_NCRS_Las_Vegas_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8380','NAD_1983_NCRS_Las_Vegas_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8381','NAD_1983_NCRS_Las_Vegas_high_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8382','NAD_1983_NCRS_Las_Vegas_high_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8383','NAD_1983_(2011)_NCRS_Las_Vegas_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8384','NAD_1983_(2011)_NCRS_Las_Vegas_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8385','NAD_1983_(2011)_NCRS_Las_Vegas_high_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8387','NAD_1983_(2011)_NCRS_Las_Vegas_high_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8391','GDA_1994_WEIPA94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8395','ETRS_1989_GK_CM_9E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8433','Macao_1920_Macao_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8441','Tananarive_1925_Laborde_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8455','RGTAAF07_UTM_Zone_53S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8456','RGTAAF07_UTM_Zone_54S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8518','NAD_1983_2011_KS_RCS_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8519','NAD_1983_2011_KS_RCS_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8520','NAD_1983_2011_KS_RCS_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8521','NAD_1983_2011_KS_RCS_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8522','NAD_1983_2011_KS_RCS_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8523','NAD_1983_2011_KS_RCS_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8524','NAD_1983_2011_KS_RCS_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8525','NAD_1983_2011_KS_RCS_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8526','NAD_1983_2011_KS_RCS_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8527','NAD_1983_2011_KS_RCS_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8528','NAD_1983_2011_KS_RCS_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8529','NAD_1983_2011_KS_RCS_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8531','NAD_1983_2011_KS_RCS_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8533','NAD_1983_2011_KS_RCS_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8534','NAD_1983_2011_KS_RCS_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8535','NAD_1983_2011_KS_RCS_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8536','NAD_1983_2011_KS_RCS_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8538','NAD_1983_2011_KS_RCS_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8539','NAD_1983_2011_KS_RCS_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8540','NAD_1983_2011_KS_RCS_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8677','MGI_1901_Balkans_zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8678','MGI_1901_Balkans_zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8679','MGI_1901_Balkans_zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8682','SRB_ETRS89_UTM_zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8686','MGI_1901_Slovenia_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8687','Slovenia_1996_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8692','NAD_1983_MA11_UTM_Zone_54N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8693','NAD_1983_MA11_UTM_Zone_55N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8826','NAD_1983_Idaho_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8836','MTRF-2000_UTM_zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8837','MTRF-2000_UTM_zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8838','MTRF-2000_UTM_zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8839','MTRF-2000_UTM_zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8840','MTRF-2000_UTM_zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8857','WGS_1984_Equal_Earth_Greenwich','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8858','WGS_1984_Equal_Earth_Americas','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8859','WGS_1984_Equal_Earth_Asia_Pacific','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8903','RGWF96_UTM_Zone_1S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8908','CR-SIRGAS_CRTM05','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8909','CR-SIRGAS_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8910','CR-SIRGAS_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8950','SIRGAS-Chile_2010_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8951','SIRGAS-Chile_2010_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9039','ISN2016_LAEA_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9040','ISN2016_LCC_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9141','KOSOVAREF01_Balkans_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9149','SIRGAS-Chile_2013_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9150','SIRGAS-Chile_2013_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9154','SIRGAS-Chile_2016_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9155','SIRGAS-Chile_2016_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9156','RSAO13_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9157','RSAO13_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9158','RSAO13_UTM_Zone_34S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9159','RSAO13_TM_12_SE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9191','WGS_1984_NIWA_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9205','VN-2000_TM-3_103-00','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9206','VN-2000_TM-3_104-00','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9207','VN-2000_TM-3_104-30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9208','VN-2000_TM-3_104-45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9209','VN-2000_TM-3_105-30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9210','VN-2000_TM-3_105-45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9211','VN-2000_TM-3_106-00','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9212','VN-2000_TM-3_106-15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9213','VN-2000_TM-3_106-30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9214','VN-2000_TM-3_107-00','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9215','VN-2000_TM-3_107-15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9216','VN-2000_TM-3_107-30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9217','VN-2000_TM-3_108-15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9218','VN-2000_TM-3_108-30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9221','Hartebeesthoek94_ZAF_BSU_Albers_25E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9222','Hartebeesthoek94_ZAF_BSU_Albers_44E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9249','Tapi_Aike_Argentina_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9250','Tapi_Aike_Argentina_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9252','MMN_Argentina_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9254','MMS_Argentina_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9265','POSGAR_2007_UTM_zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9271','MGI_Austria_West','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9272','MGI_Austria_Central','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9273','MGI_Austria_East','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9284','Pampa_del_Castillo_Argentina_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9285','Pampa_del_Castillo_Argentina_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9295','ONGD17_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9296','ONGD17_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9297','ONGD17_UTM_Zone_41N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9300','HS2_Survey_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9354','WGS_1984_IBCSO_Polar_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9356','KSA-GRF17_UTM_zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9357','KSA-GRF17_UTM_zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9358','KSA-GRF17_UTM_zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9359','KSA-GRF17_UTM_zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9360','KSA-GRF17_UTM_zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9367','TPEN11_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9373','MML07_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9377','MAGNA-SIRGAS_2018_Origen-Nacional','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9387','AbInvA96_2020_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9391','BGS2005_UTM_zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9404','PN68_UTM_zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9405','PN68_UTM_zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9406','PN84_UTM_zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9407','PN84_UTM_zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9456','GBK19_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9473','GDA2020_Australian_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9476','SRGI2013_UTM_zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9477','SRGI2013_UTM_zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9478','SRGI2013_UTM_zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9479','SRGI2013_UTM_zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9480','SRGI2013_UTM_zone_50N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9481','SRGI2013_UTM_zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9482','SRGI2013_UTM_zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9487','SRGI2013_UTM_zone_47S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9488','SRGI2013_UTM_zone_48S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9489','SRGI2013_UTM_zone_49S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9490','SRGI2013_UTM_zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9491','SRGI2013_UTM_zone_51S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9492','SRGI2013_UTM_zone_52S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9493','SRGI2013_UTM_zone_53S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9494','SRGI2013_UTM_zone_54S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9498','POSGAR_2007_CABA_2019','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9674','NAD_1983_USFS_R6_Albers','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9678','Gulshan_303_Bangladesh_Transverse_Mercator','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9680','WGS_84_TM_90_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9697','REDGEOMIN_UTM_zone_12S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9698','REDGEOMIN_UTM_zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9699','REDGEOMIN_UTM_zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9709','NAD_1983_CSRS_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9712','NAD_1983_UTM_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9713','NAD_1983_CSRS_UTM_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9716','IGM95_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9741','EOS21_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9748','NAD_1983_2011_StatePlane_Alabama_East_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9749','NAD_1983_2011_StatePlane_Alabama_West_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9761','ECML14_NB_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9766','EWR2_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9793','RGF93_v2_Lambert-93','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9794','RGF93_v2b_Lambert-93','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9821','UCS-2000_LCS-32_Kyiv_region','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9822','RGF93_v2_CC42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9823','RGF93_v2_CC43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9824','RGF93_v2_CC44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9825','RGF93_v2_CC45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9826','RGF93_v2_CC46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9827','RGF93_v2_CC47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9828','RGF93_v2_CC48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9829','RGF93_v2_CC49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9830','RGF93_v2_CC50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9831','UCS-2000_LCS-01_Crimea','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9832','UCS-2000_LCS-05_Vinnytsia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9833','UCS-2000_LCS-07_Volyn','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9834','UCS-2000_LCS-12_Dnipropetrovsk','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9835','UCS-2000_LCS-14_Donetsk','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9836','UCS-2000_LCS-18_Zhytomyr','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9837','UCS-2000_LCS-21_Zakarpattia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9838','UCS-2000_LCS-23_Zaporizhzhia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9839','UCS-2000_LCS-26_Ivano-Frankivsk','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9840','UCS-2000_LCS-35_Kirovohrad','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9841','UCS-2000_LCS-44_Luhansk','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9842','RGF93_v2b_CC42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9843','RGF93_v2b_CC43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9844','RGF93_v2b_CC44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9845','RGF93_v2b_CC45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9846','RGF93_v2b_CC46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9847','RGF93_v2b_CC47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9848','RGF93_v2b_CC48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9849','RGF93_v2b_CC49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9850','RGF93_v2b_CC50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9851','UCS-2000_LCS-46_Lviv','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9852','UCS-2000_LCS-48_Mykolaiv','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9853','UCS-2000_LCS-51_Odessa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9854','UCS-2000_LCS-53_Poltava','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9855','UCS-2000_LCS-56_Rivne','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9856','UCS-2000_LCS-59_Sumy','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9857','UCS-2000_LCS-61_Ternopil','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9858','UCS-2000_LCS-63_Kharkiv','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9859','UCS-2000_LCS-65_Kherson','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9860','UCS-2000_LCS-68_Khmelnytsky','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9861','UCS-2000_LCS-71_Cherkasy','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9862','UCS-2000_LCS-73_Chernivtsi','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9863','UCS-2000_LCS-74_Chernihiv','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9864','UCS-2000_LCS-80_Kyiv_city','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9865','UCS-2000_LCS-85_Sevastopol','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9869','MRH21_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9874','PNG94_PNGMG94_Zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9875','PNG94_PNGMG94_Zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9880','MOLDOR11_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9895','LUREF_Luxembourg_TM_3D','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9943','EBBWV14_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9945','Macedonia_State_Coordinate_System_truncated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9947','ISN2004_LAEA_Iceland','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9967','HULLEE13_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9972','SCM22_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','9977','FNL22_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10160','S34J_reconstruction_east-orientated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10183','DoPw22_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10188','ShAb07_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10194','CNH22_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10199','CWS13_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10207','DIBA15_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10212','GWPBS22_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10217','GWWAB22_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10222','GWWWA22_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10227','MALS09_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10235','OxWo08_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10240','SYC20_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10250','S34S_reconstruction_east-orientated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10254','S45B_reconstruction_east-orientated','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10270','Ostenfeld_reconstruction','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10275','SMITB20_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10280','RBEPP12_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10285','ETRS89_DREF91_2016_3-degree_Gauss-Kruger_zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10286','ETRS89_DREF91_2016_UTM_zone_31N_(N-zE)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10287','ETRS89_DREF91_2016_UTM_zone_31N_(zE-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10288','ETRS89_DREF91_2016_UTM_zone_32N_(N-zE)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10289','ETRS89_DREF91_2016_UTM_zone_32N_(zE-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10290','ETRS89_DREF91_2016_UTM_zone_33N_(N-zE)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10291','ETRS89_DREF91_2016_UTM_zone_33N_(zE-N)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10306','LKS-2020_Latvia_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10314','RGNC15_Lambert_New_Caledonia_2015','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10315','RGNC15_UTM_zone_57S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10316','RGNC15_UTM_zone_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10317','RGNC15_UTM_zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10329','BH_ETRS89_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10448','GDA_1994_ALB94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10449','GDA_1994_BIO94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10450','GDA_1994_BRO94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10451','GDA_1994_BCG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10452','GDA_1994_CARN94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10453','GDA_1994_COL94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10454','GDA_1994_ESP94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10455','GDA_1994_EXM94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10456','GDA_1994_GCG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10457','GDA_1994_GOLD94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10458','GDA_1994_JCG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10459','GDA_1994_KALB94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10460','GDA_1994_KAR94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10461','GDA_1994_KUN94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10462','GDA_1994_LCG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10463','GDA_1994_MRCG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10464','GDA_1994_PCG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10465','GDA_1994_PHG94','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10471','COV23_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10477','BBT2000_BBT-TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10481','NAD_1983_TWDB_GM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10516','NAD_1983_(2011)_Adjusted_Jackson_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10592','WGS_1984_GLANCE_Africa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10594','WGS_1984_GLANCE_Asia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10596','WGS_1984_GLANCE_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10598','WGS_1984_GLANCE_North_America','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10601','WGS_1984_GLANCE_Oceania','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10603','WGS_1984_GLANCE_South_America','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10626','ECML14_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10632','WC05_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10665','SIRGAS_2000_Porto_Alegre_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10731','ETRS89_DREF91_2016_UTM_zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10732','ETRS89_DREF91_2016_UTM_zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','10733','ETRS89_DREF91_2016_UTM_zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','11114','MAGNA-SIRGAS_2018_Colombia_Far_West_zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','11115','MAGNA-SIRGAS_2018_Colombia_West_zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','11116','MAGNA-SIRGAS_2018_Colombia_Bogota_zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','11117','MAGNA-SIRGAS_2018_Colombia_East_Central_zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','11118','MAGNA-SIRGAS_2018_Colombia_East_zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20002','MWC18_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20004','Pulkovo_1995_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20005','Pulkovo_1995_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20006','Pulkovo_1995_GK_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20007','Pulkovo_1995_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20008','Pulkovo_1995_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20009','Pulkovo_1995_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20010','Pulkovo_1995_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20011','Pulkovo_1995_GK_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20012','Pulkovo_1995_GK_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20013','Pulkovo_1995_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20014','Pulkovo_1995_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20015','Pulkovo_1995_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20016','Pulkovo_1995_GK_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20017','Pulkovo_1995_GK_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20018','Pulkovo_1995_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20019','Pulkovo_1995_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20020','Pulkovo_1995_GK_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20021','Pulkovo_1995_GK_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20022','Pulkovo_1995_GK_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20023','Pulkovo_1995_GK_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20024','Pulkovo_1995_GK_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20025','Pulkovo_1995_GK_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20026','Pulkovo_1995_GK_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20027','Pulkovo_1995_GK_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20028','Pulkovo_1995_GK_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20029','Pulkovo_1995_GK_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20030','Pulkovo_1995_GK_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20031','Pulkovo_1995_GK_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20032','Pulkovo_1995_GK_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20042','SIRGAS-Chile_2021_UTM_Zone_12S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20047','GDA2020_BCSG2020','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20048','SIRGAS-Chile_2021_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20049','SIRGAS-Chile_2021_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20050','NAD_1983_(2011)_Amtrak_NECCS21_(ft)','ESRI'); INSERT INTO "projected_crs" VALUES('ESRI','20062','Pulkovo_1995_GK_Zone_2N',NULL,'EPSG','4400','EPSG','4200','EPSG','16302',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_20062_USAGE','projected_crs','ESRI','20062','EPSG','1805','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','20063','Pulkovo_1995_GK_Zone_3N',NULL,'EPSG','4400','EPSG','4200','EPSG','16303',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_20063_USAGE','projected_crs','ESRI','20063','EPSG','1792','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20064','Pulkovo_1995_GK_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20065','Pulkovo_1995_GK_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20066','Pulkovo_1995_GK_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20067','Pulkovo_1995_GK_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20068','Pulkovo_1995_GK_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20069','Pulkovo_1995_GK_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20070','Pulkovo_1995_GK_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20071','Pulkovo_1995_GK_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20072','Pulkovo_1995_GK_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20073','Pulkovo_1995_GK_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20074','Pulkovo_1995_GK_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20075','Pulkovo_1995_GK_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20076','Pulkovo_1995_GK_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20077','Pulkovo_1995_GK_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20078','Pulkovo_1995_GK_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20079','Pulkovo_1995_GK_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20080','Pulkovo_1995_GK_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20081','Pulkovo_1995_GK_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20082','Pulkovo_1995_GK_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20083','Pulkovo_1995_GK_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20084','Pulkovo_1995_GK_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20085','Pulkovo_1995_GK_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20086','Pulkovo_1995_GK_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20087','Pulkovo_1995_GK_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20088','Pulkovo_1995_GK_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20089','Pulkovo_1995_GK_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20090','Pulkovo_1995_GK_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20091','Pulkovo_1995_GK_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20092','Pulkovo_1995_GK_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20135','Adindan_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20136','Adindan_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20137','Adindan_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20138','Adindan_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20248','AGD_1966_AMG_Zone_48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20249','AGD_1966_AMG_Zone_49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20250','AGD_1966_AMG_Zone_50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20251','AGD_1966_AMG_Zone_51','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20252','AGD_1966_AMG_Zone_52','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20253','AGD_1966_AMG_Zone_53','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20254','AGD_1966_AMG_Zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20255','AGD_1966_AMG_Zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20256','AGD_1966_AMG_Zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20257','AGD_1966_AMG_Zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20258','AGD_1966_AMG_Zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20348','AGD_1984_AMG_Zone_48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20349','AGD_1984_AMG_Zone_49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20350','AGD_1984_AMG_Zone_50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20351','AGD_1984_AMG_Zone_51','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20352','AGD_1984_AMG_Zone_52','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20353','AGD_1984_AMG_Zone_53','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20354','AGD_1984_AMG_Zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20355','AGD_1984_AMG_Zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20356','AGD_1984_AMG_Zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20357','AGD_1984_AMG_Zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20358','AGD_1984_AMG_Zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20436','Ain_el_Abd_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20437','Ain_el_Abd_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20438','Ain_el_Abd_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20439','Ain_el_Abd_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20440','Ain_el_Abd_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20499','Bahrain_State_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20538','Afgooye_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20539','Afgooye_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20790','Portuguese_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20791','Lisbon_Lisbon_Portuguese_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20822','Aratu_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20823','Aratu_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20824','Aratu_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20904','GSK-2011_Gauss-Kruger_zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20905','GSK-2011_Gauss-Kruger_zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20906','GSK-2011_Gauss-Kruger_zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20907','GSK-2011_Gauss-Kruger_zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20908','GSK-2011_Gauss-Kruger_zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20909','GSK-2011_Gauss-Kruger_zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20910','GSK-2011_Gauss-Kruger_zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20911','GSK-2011_Gauss-Kruger_zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20912','GSK-2011_Gauss-Kruger_zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20913','GSK-2011_Gauss-Kruger_zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20914','GSK-2011_Gauss-Kruger_zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20915','GSK-2011_Gauss-Kruger_zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20916','GSK-2011_Gauss-Kruger_zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20917','GSK-2011_Gauss-Kruger_zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20918','GSK-2011_Gauss-Kruger_zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20919','GSK-2011_Gauss-Kruger_zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20920','GSK-2011_Gauss-Kruger_zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20921','GSK-2011_Gauss-Kruger_zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20922','GSK-2011_Gauss-Kruger_zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20923','GSK-2011_Gauss-Kruger_zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20924','GSK-2011_Gauss-Kruger_zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20925','GSK-2011_Gauss-Kruger_zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20926','GSK-2011_Gauss-Kruger_zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20927','GSK-2011_Gauss-Kruger_zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20928','GSK-2011_Gauss-Kruger_zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20929','GSK-2011_Gauss-Kruger_zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20930','GSK-2011_Gauss-Kruger_zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20931','GSK-2011_Gauss-Kruger_zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20932','GSK-2011_Gauss-Kruger_zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20934','Arc_1950_UTM_Zone_34S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20935','Arc_1950_UTM_Zone_35S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','20936','Arc_1950_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21004','GSK-2011_Gauss-Kruger_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21005','GSK-2011_Gauss-Kruger_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21006','GSK-2011_Gauss-Kruger_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21007','GSK-2011_Gauss-Kruger_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21008','GSK-2011_Gauss-Kruger_CM_45E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21009','GSK-2011_Gauss-Kruger_CM_51E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21010','GSK-2011_Gauss-Kruger_CM_57E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21011','GSK-2011_Gauss-Kruger_CM_63E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21012','GSK-2011_Gauss-Kruger_CM_69E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21013','GSK-2011_Gauss-Kruger_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21014','GSK-2011_Gauss-Kruger_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21015','GSK-2011_Gauss-Kruger_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21016','GSK-2011_Gauss-Kruger_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21017','GSK-2011_Gauss-Kruger_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21018','GSK-2011_Gauss-Kruger_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21019','GSK-2011_Gauss-Kruger_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21020','GSK-2011_Gauss-Kruger_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21021','GSK-2011_Gauss-Kruger_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21022','GSK-2011_Gauss-Kruger_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21023','GSK-2011_Gauss-Kruger_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21024','GSK-2011_Gauss-Kruger_CM_141E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21025','GSK-2011_Gauss-Kruger_CM_147E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21026','GSK-2011_Gauss-Kruger_CM_153E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21027','GSK-2011_Gauss-Kruger_CM_159E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21028','GSK-2011_Gauss-Kruger_CM_165E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21029','GSK-2011_Gauss-Kruger_CM_171E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21030','GSK-2011_Gauss-Kruger_CM_177E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21031','GSK-2011_Gauss-Kruger_CM_177W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21032','GSK-2011_Gauss-Kruger_CM_171W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21035','Arc_1960_UTM_Zone_35S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21036','Arc_1960_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21037','Arc_1960_UTM_Zone_37S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21095','Arc_1960_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21096','Arc_1960_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21097','Arc_1960_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21148','Batavia_UTM_Zone_48S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21149','Batavia_UTM_Zone_49S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21150','Batavia_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21207','GSK-2011_GSK_3GK_zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21208','GSK-2011_GSK_3GK_zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21209','GSK-2011_GSK_3GK_zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21210','GSK-2011_GSK_3GK_zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21211','GSK-2011_GSK_3GK_zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21212','GSK-2011_GSK_3GK_zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21213','GSK-2011_GSK_3GK_zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21214','GSK-2011_GSK_3GK_zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21215','GSK-2011_GSK_3GK_zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21216','GSK-2011_GSK_3GK_zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21217','GSK-2011_GSK_3GK_zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21218','GSK-2011_GSK_3GK_zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21219','GSK-2011_GSK_3GK_zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21220','GSK-2011_GSK_3GK_zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21221','GSK-2011_GSK_3GK_zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21222','GSK-2011_GSK_3GK_zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21223','GSK-2011_GSK_3GK_zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21224','GSK-2011_GSK_3GK_zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21225','GSK-2011_GSK_3GK_zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21226','GSK-2011_GSK_3GK_zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21227','GSK-2011_GSK_3GK_zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21228','GSK-2011_GSK_3GK_zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21229','GSK-2011_GSK_3GK_zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21230','GSK-2011_GSK_3GK_zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21231','GSK-2011_GSK_3GK_zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21232','GSK-2011_GSK_3GK_zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21233','GSK-2011_GSK_3GK_zone_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21234','GSK-2011_GSK_3GK_zone_34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21235','GSK-2011_GSK_3GK_zone_35','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21236','GSK-2011_GSK_3GK_zone_36','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21237','GSK-2011_GSK_3GK_zone_37','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21238','GSK-2011_GSK_3GK_zone_38','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21239','GSK-2011_GSK_3GK_zone_39','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21240','GSK-2011_GSK_3GK_zone_40','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21241','GSK-2011_GSK_3GK_zone_41','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21242','GSK-2011_GSK_3GK_zone_42','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21243','GSK-2011_GSK_3GK_zone_43','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21244','GSK-2011_GSK_3GK_zone_44','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21245','GSK-2011_GSK_3GK_zone_45','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21246','GSK-2011_GSK_3GK_zone_46','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21247','GSK-2011_GSK_3GK_zone_47','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21248','GSK-2011_GSK_3GK_zone_48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21249','GSK-2011_GSK_3GK_zone_49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21250','GSK-2011_GSK_3GK_zone_50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21251','GSK-2011_GSK_3GK_zone_51','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21252','GSK-2011_GSK_3GK_zone_52','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21253','GSK-2011_GSK_3GK_zone_53','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21254','GSK-2011_GSK_3GK_zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21255','GSK-2011_GSK_3GK_zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21256','GSK-2011_GSK_3GK_zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21257','GSK-2011_GSK_3GK_zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21258','GSK-2011_GSK_3GK_zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21259','GSK-2011_GSK_3GK_zone_59','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21260','GSK-2011_GSK_3GK_zone_60','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21261','GSK-2011_GSK_3GK_zone_61','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21262','GSK-2011_GSK_3GK_zone_62','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21263','GSK-2011_GSK_3GK_zone_63','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21264','GSK-2011_GSK_3GK_zone_64','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21291','Barbados_1938_British_West_Indies_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21292','Barbados_1938_Barbados_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21307','GSK-2011_GSK_3GK_CM_21E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21308','GSK-2011_GSK_3GK_CM_24E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21309','GSK-2011_GSK_3GK_CM_27E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21310','GSK-2011_GSK_3GK_CM_30E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21311','GSK-2011_GSK_3GK_CM_33E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21312','GSK-2011_GSK_3GK_CM_36E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21313','GSK-2011_GSK_3GK_CM_39E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21314','GSK-2011_GSK_3GK_CM_42E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21315','GSK-2011_GSK_3GK_CM_45E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21316','GSK-2011_GSK_3GK_CM_48E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21317','GSK-2011_GSK_3GK_CM_51E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21318','GSK-2011_GSK_3GK_CM_54E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21319','GSK-2011_GSK_3GK_CM_57E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21320','GSK-2011_GSK_3GK_CM_60E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21321','GSK-2011_GSK_3GK_CM_63E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21322','GSK-2011_GSK_3GK_CM_66E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21323','GSK-2011_GSK_3GK_CM_69E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21324','GSK-2011_GSK_3GK_CM_72E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21325','GSK-2011_GSK_3GK_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21326','GSK-2011_GSK_3GK_CM_78E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21327','GSK-2011_GSK_3GK_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21328','GSK-2011_GSK_3GK_CM_84E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21329','GSK-2011_GSK_3GK_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21330','GSK-2011_GSK_3GK_CM_90E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21331','GSK-2011_GSK_3GK_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21332','GSK-2011_GSK_3GK_CM_96E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21333','GSK-2011_GSK_3GK_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21334','GSK-2011_GSK_3GK_CM_102E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21335','GSK-2011_GSK_3GK_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21336','GSK-2011_GSK_3GK_CM_108E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21337','GSK-2011_GSK_3GK_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21338','GSK-2011_GSK_3GK_CM_114E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21339','GSK-2011_GSK_3GK_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21340','GSK-2011_GSK_3GK_CM_120E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21341','GSK-2011_GSK_3GK_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21342','GSK-2011_GSK_3GK_CM_126E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21343','GSK-2011_GSK_3GK_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21344','GSK-2011_GSK_3GK_CM_132E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21345','GSK-2011_GSK_3GK_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21346','GSK-2011_GSK_3GK_CM_138E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21347','GSK-2011_GSK_3GK_CM_141E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21348','GSK-2011_GSK_3GK_CM_144E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21349','GSK-2011_GSK_3GK_CM_147E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21350','GSK-2011_GSK_3GK_CM_150E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21351','GSK-2011_GSK_3GK_CM_153E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21352','GSK-2011_GSK_3GK_CM_156E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21353','GSK-2011_GSK_3GK_CM_159E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21354','GSK-2011_GSK_3GK_CM_162E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21355','GSK-2011_GSK_3GK_CM_165E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21356','GSK-2011_GSK_3GK_CM_168E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21357','GSK-2011_GSK_3GK_CM_171E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21358','GSK-2011_GSK_3GK_CM_174E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21359','GSK-2011_GSK_3GK_CM_177E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21360','GSK-2011_GSK_3GK_CM_180E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21361','GSK-2011_GSK_3GK_CM_177W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21362','GSK-2011_GSK_3GK_CM_174W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21363','GSK-2011_GSK_3GK_CM_171W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21364','GSK-2011_GSK_3GK_CM_168W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21413','Beijing_1954_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21414','Beijing_1954_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21415','Beijing_1954_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21416','Beijing_1954_GK_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21417','Beijing_1954_GK_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21418','Beijing_1954_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21419','Beijing_1954_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21420','Beijing_1954_GK_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21421','Beijing_1954_GK_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21422','Beijing_1954_GK_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21423','Beijing_1954_GK_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21453','Beijing_1954_Gauss_Kruger_CM_75E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21454','Beijing_1954_Gauss_Kruger_CM_81E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21455','Beijing_1954_Gauss_Kruger_CM_87E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21456','Beijing_1954_Gauss_Kruger_CM_93E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21457','Beijing_1954_Gauss_Kruger_CM_99E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21458','Beijing_1954_Gauss_Kruger_CM_105E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21459','Beijing_1954_Gauss_Kruger_CM_111E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21460','Beijing_1954_Gauss_Kruger_CM_117E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21461','Beijing_1954_Gauss_Kruger_CM_123E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21462','Beijing_1954_Gauss_Kruger_CM_129E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21463','Beijing_1954_Gauss_Kruger_CM_135E','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21473','Beijing_1954_GK_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21474','Beijing_1954_GK_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21475','Beijing_1954_GK_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21476','Beijing_1954_GK_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21477','Beijing_1954_GK_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21478','Beijing_1954_GK_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21479','Beijing_1954_GK_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21480','Beijing_1954_GK_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21481','Beijing_1954_GK_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21482','Beijing_1954_GK_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21483','Beijing_1954_GK_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21500','Belge_Lambert_1950','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21780','Bern_1898_Bern_LV03C','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21781','CH1903_LV03','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21782','CH1903_LV03C-G','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21817','Bogota_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21818','Bogota_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21891','Colombia_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21892','Colombia_Bogota_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21893','Colombia_East_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21894','Colombia_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21896','Colombia_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21897','Colombia_Bogota_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21898','Colombia_East_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','21899','Colombia_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22032','Camacupa_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22033','Camacupa_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22091','Camacupa_TM_11_30_SE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22092','Camacupa_TM_12_SE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22171','POSGAR_1998_Argentina_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22172','POSGAR_1998_Argentina_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22173','POSGAR_1998_Argentina_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22174','POSGAR_1998_Argentina_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22175','POSGAR_1998_Argentina_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22176','POSGAR_1998_Argentina_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22177','POSGAR_1998_Argentina_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22181','POSGAR_1994_Argentina_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22182','POSGAR_1994_Argentina_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22183','POSGAR_1994_Argentina_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22184','POSGAR_1994_Argentina_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22185','POSGAR_1994_Argentina_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22186','POSGAR_1994_Argentina_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22187','POSGAR_1994_Argentina_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22191','Argentina_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22192','Argentina_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22193','Argentina_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22194','Argentina_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22195','Argentina_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22196','Argentina_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22197','Argentina_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22207','NAD83(CSRS)v2_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22208','NAD83(CSRS)v2_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22209','NAD83(CSRS)v2_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22210','NAD83(CSRS)v2_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22211','NAD83(CSRS)v2_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22212','NAD83(CSRS)v2_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22213','NAD83(CSRS)v2_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22214','NAD83(CSRS)v2_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22215','NAD83(CSRS)v2_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22216','NAD83(CSRS)v2_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22217','NAD83(CSRS)v2_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22218','NAD83(CSRS)v2_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22219','NAD83(CSRS)v2_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22220','NAD83(CSRS)v2_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22221','NAD83(CSRS)v2_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22222','NAD83(CSRS)v2_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22229','RGSH2020_UTM_zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22230','RGSH2020_UTM_zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22231','RGSH2020_UTM_zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22232','RGSH2020_UTM_zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22234','Cape_UTM_Zone_34S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22235','Cape_UTM_Zone_35S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22236','Cape_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22239','NAD83(CSRS)v2_PEI_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22240','NAD83(CSRS)v2_NB_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22243','NAD83(CSRS)v2_SCoPQ_zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22244','NAD83(CSRS)v2_SCoPQ_zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22245','NAD83(CSRS)v2_SCoPQ_zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22246','NAD83(CSRS)v2_SCoPQ_zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22247','NAD83(CSRS)v2_SCoPQ_zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22248','NAD83(CSRS)v2_SCoPQ_zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22249','NAD83(CSRS)v2_SCoPQ_zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22250','NAD83(CSRS)v2_SCoPQ_zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22262','NAD83(CSRS)v2_Alberta_3TM_ref_merid_111_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22263','NAD83(CSRS)v2_Alberta_3TM_ref_merid_114_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22264','NAD83(CSRS)v2_Alberta_3TM_ref_merid_117_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22265','NAD83(CSRS)v2_Alberta_3TM_ref_merid_120_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22307','NAD83(CSRS)v3_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22308','NAD83(CSRS)v3_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22309','NAD83(CSRS)v3_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22310','NAD83(CSRS)v3_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22311','NAD83(CSRS)v3_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22312','NAD83(CSRS)v3_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22313','NAD83(CSRS)v3_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22314','NAD83(CSRS)v3_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22315','NAD83(CSRS)v3_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22316','NAD83(CSRS)v3_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22317','NAD83(CSRS)v3_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22318','NAD83(CSRS)v3_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22319','NAD83(CSRS)v3_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22320','NAD83(CSRS)v3_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22321','NAD83(CSRS)v3_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22322','NAD83(CSRS)v3_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22332','Carthage_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22337','NAD83(CSRS)v3_MTM_NS_1997_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22338','NAD83(CSRS)v3_MTM_NS_1997_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22348','NAD83(CSRS)v3_MTM_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22349','NAD83(CSRS)v3_MTM_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22350','NAD83(CSRS)v3_MTM_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22351','NAD83(CSRS)v3_MTM_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22352','NAD83(CSRS)v3_MTM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22353','NAD83(CSRS)v3_MTM_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22354','NAD83(CSRS)v3_MTM_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22355','NAD83(CSRS)v3_MTM_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22356','NAD83(CSRS)v3_MTM_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22357','NAD83(CSRS)v3_MTM_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22391','Nord_Tunisie','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22392','Sud_Tunisie','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22407','NAD83(CSRS)v4_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22408','NAD83(CSRS)v4_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22409','NAD83(CSRS)v4_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22410','NAD83(CSRS)v4_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22411','NAD83(CSRS)v4_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22412','NAD83(CSRS)v4_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22413','NAD83(CSRS)v4_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22414','NAD83(CSRS)v4_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22415','NAD83(CSRS)v4_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22416','NAD83(CSRS)v4_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22417','NAD83(CSRS)v4_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22418','NAD83(CSRS)v4_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22419','NAD83(CSRS)v4_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22420','NAD83(CSRS)v4_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22421','NAD83(CSRS)v4_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22422','NAD83(CSRS)v4_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22462','NAD83(CSRS)v4_Alberta_3TM_ref_merid_111_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22463','NAD83(CSRS)v4_Alberta_3TM_ref_merid_114_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22464','NAD83(CSRS)v4_Alberta_3TM_ref_merid_117_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22465','NAD83(CSRS)v4_Alberta_3TM_ref_merid_120_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22521','Corrego_Alegre_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22522','Corrego_Alegre_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22523','Corrego_Alegre_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22524','Corrego_Alegre_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22525','Corrego_Alegre_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22607','NAD83(CSRS)v6_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22608','NAD83(CSRS)v6_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22609','NAD83(CSRS)v6_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22610','NAD83(CSRS)v6_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22611','NAD83(CSRS)v6_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22612','NAD83(CSRS)v6_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22613','NAD83(CSRS)v6_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22614','NAD83(CSRS)v6_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22615','NAD_1983_(CSRS)_v6_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22616','NAD_1983_(CSRS)_v6_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22617','NAD_1983_(CSRS)_v6_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22618','NAD_1983_(CSRS)_v6_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22619','NAD_1983_(CSRS)_v6_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22620','NAD_1983_(CSRS)_v6_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22621','NAD_1983_(CSRS)_v6_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22622','NAD83(CSRS)v6_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22639','NAD83(CSRS)v6_PEI_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22641','NAD83(CSRS)v6_MTM_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22642','NAD83(CSRS)v6_MTM_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22643','NAD83(CSRS)v6_MTM_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22644','NAD83(CSRS)v6_MTM_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22645','NAD83(CSRS)v6_MTM_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22646','NAD83(CSRS)v6_MTM_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22648','NAD83(CSRS)v6_MTM_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22649','NAD83(CSRS)v6_MTM_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22650','NAD83(CSRS)v6_MTM_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22651','NAD83(CSRS)v6_MTM_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22652','NAD83(CSRS)v6_MTM_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22653','NAD83(CSRS)v6_MTM_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22654','NAD83(CSRS)v6_MTM_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22655','NAD83(CSRS)v6_MTM_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22656','NAD83(CSRS)v6_MTM_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22657','NAD83(CSRS)v6_MTM_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22700','Deir_ez_Zor_Levant_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22707','NAD83(CSRS)v7_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22708','NAD83(CSRS)v7_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22709','NAD83(CSRS)v7_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22710','NAD83(CSRS)v7_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22711','NAD83(CSRS)v7_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22712','NAD83(CSRS)v7_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22713','NAD83(CSRS)v7_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22714','NAD83(CSRS)v7_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22715','NAD83(CSRS)v7_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22716','NAD83(CSRS)v7_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22717','NAD83(CSRS)v7_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22718','NAD83(CSRS)v7_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22719','NAD83(CSRS)v7_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22720','NAD83(CSRS)v7_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22721','NAD83(CSRS)v7_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22722','NAD83(CSRS)v7_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22739','NAD83(CSRS)v7_PEI_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22762','NAD83(CSRS)v7_Alberta_3TM_ref_merid_111_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22763','NAD83(CSRS)v7_Alberta_3TM_ref_merid_114_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22764','NAD83(CSRS)v7_Alberta_3TM_ref_merid_117_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22765','NAD83(CSRS)v7_Alberta_3TM_ref_merid_120_W','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22770','Deir_ez_Zor_Syria_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22780','Deir_ez_Zor_Levant_Stereographic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22807','NAD83(CSRS)v8_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22808','NAD83(CSRS)v8_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22809','NAD83(CSRS)v8_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22810','NAD83(CSRS)v8_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22811','NAD83(CSRS)v8_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22812','NAD83(CSRS)v8_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22813','NAD83(CSRS)v8_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22814','NAD83(CSRS)v8_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22815','NAD83(CSRS)v8_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22816','NAD83(CSRS)v8_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22817','NAD83(CSRS)v8_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22818','NAD83(CSRS)v8_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22819','NAD83(CSRS)v8_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22820','NAD83(CSRS)v8_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22821','NAD83(CSRS)v8_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22822','NAD83(CSRS)v8_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22832','Douala_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22991','Egypt_Blue_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22992','Egypt_Red_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22993','Egypt_Purple_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','22994','Egypt_Extended_Purple_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23028','ED_1950_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23029','ED_1950_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23030','ED_1950_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23031','ED_1950_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23032','ED_1950_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23033','ED_1950_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23034','ED_1950_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23035','ED_1950_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23036','ED_1950_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23037','ED_1950_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23038','ED_1950_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23090','ED_1950_TM_0_N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23095','ED_1950_TM_5_NE','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23239','Fahud_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23240','Fahud_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23301','NAD_1983_(2011)_ICS_Freeport_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23302','NAD_1983_(2011)_ICS_Rockford_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23303','NAD_1983_(2011)_ICS_Aurora_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23304','NAD_1983_(2011)_ICS_Chicago_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23305','NAD_1983_(2011)_ICS_Moline_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23306','NAD_1983_(2011)_ICS_Sterling_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23307','NAD_1983_(2011)_ICS_Ottawa_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23308','NAD_1983_(2011)_ICS_Joliet_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23309','NAD_1983_(2011)_ICS_Monmouth_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23310','NAD_1983_(2011)_ICS_Galesburg_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23311','NAD_1983_(2011)_ICS_Peoria_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23312','NAD_1983_(2011)_ICS_Eureka_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23313','NAD_1983_(2011)_ICS_Bloomington_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23314','NAD_1983_(2011)_ICS_Pontiac_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23315','NAD_1983_(2011)_ICS_Watseka_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23316','NAD_1983_(2011)_ICS_Quincy_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23317','NAD_1983_(2011)_ICS_Macomb_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23318','NAD_1983_(2011)_ICS_Lincoln_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23319','NAD_1983_(2011)_ICS_Decatur_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23320','NAD_1983_(2011)_ICS_Champaign_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23321','NAD_1983_(2011)_ICS_Jacksonville_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23322','NAD_1983_(2011)_ICS_Springfield_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23323','NAD_1983_(2011)_ICS_Charleston_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23324','NAD_1983_(2011)_ICS_Jerseyville_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23325','NAD_1983_(2011)_ICS_Carlinville_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23326','NAD_1983_(2011)_ICS_Taylorville_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23327','NAD_1983_(2011)_ICS_Effingham_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23328','NAD_1983_(2011)_ICS_Robinson_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23329','NAD_1983_(2011)_ICS_Belleville_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23330','NAD_1983_(2011)_ICS_Mount_Vernon_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23331','NAD_1983_(2011)_ICS_Olney_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23332','NAD_1983_(2011)_ICS_Carbondale_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23333','NAD_1983_(2011)_ICS_Metropolis_(US_Feet)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23433','Garoua_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23700','Hungarian_1972_Egyseges_Orszagos_Vetuleti','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23830','DGN_1995_Indonesia_TM-3_Zone_46.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23831','DGN_1995_Indonesia_TM-3_Zone_47.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23832','DGN_1995_Indonesia_TM-3_Zone_47.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23833','DGN_1995_Indonesia_TM-3_Zone_48.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23834','DGN_1995_Indonesia_TM-3_Zone_48.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23835','DGN_1995_Indonesia_TM-3_Zone_49.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23836','DGN_1995_Indonesia_TM-3_Zone_49.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23837','DGN_1995_Indonesia_TM-3_Zone_50.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23838','DGN_1995_Indonesia_TM-3_Zone_50.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23839','DGN_1995_Indonesia_TM-3_Zone_51.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23840','DGN_1995_Indonesia_TM-3_Zone_51.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23841','DGN_1995_Indonesia_TM-3_Zone_52.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23842','DGN_1995_Indonesia_TM-3_Zone_52.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23843','DGN_1995_Indonesia_TM-3_Zone_53.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23844','DGN_1995_Indonesia_TM-3_Zone_53.2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23845','DGN_1995_Indonesia_TM-3_Zone_54.1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23846','Indonesian_1974_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23847','Indonesian_1974_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23848','Indonesian_1974_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23849','Indonesian_1974_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23850','Indonesian_1974_UTM_Zone_50N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23851','Indonesian_1974_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23852','Indonesian_1974_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23853','Indonesian_1974_UTM_Zone_53N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23866','DGN_1995_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23867','DGN_1995_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23868','DGN_1995_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23869','DGN_1995_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23870','DGN_1995_UTM_Zone_50N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23871','DGN_1995_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23872','DGN_1995_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23877','DGN_1995_UTM_Zone_47S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23878','DGN_1995_UTM_Zone_48S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23879','DGN_1995_UTM_Zone_49S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23880','DGN_1995_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23881','DGN_1995_UTM_Zone_51S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23882','DGN_1995_UTM_Zone_52S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23883','DGN_1995_UTM_Zone_53S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23884','DGN_1995_UTM_Zone_54S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23886','Indonesian_1974_UTM_Zone_46S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23887','Indonesian_1974_UTM_Zone_47S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23888','Indonesian_1974_UTM_Zone_48S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23889','Indonesian_1974_UTM_Zone_49S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23890','Indonesian_1974_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23891','Indonesian_1974_UTM_Zone_51S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23892','Indonesian_1974_UTM_Zone_52S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23893','Indonesian_1974_UTM_Zone_53S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23894','Indonesian_1974_UTM_Zone_54S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23946','Indian_1954_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23947','Indian_1954_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','23948','Indian_1954_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24047','Indian_1975_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24048','Indian_1975_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24100','Jamaica_1875_Old_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24200','Jamaica_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24305','Kalianpur_1937_UTM_Zone_45N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24306','Kalianpur_1937_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24311','Kalianpur_1962_UTM_Zone_41N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24312','Kalianpur_1962_UTM_Zone_42N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24313','Kalianpur_1962_UTM_Zone_43N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24342','Kalianpur_1975_UTM_Zone_42N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24343','Kalianpur_1975_UTM_Zone_43N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24344','Kalianpur_1975_UTM_Zone_44N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24345','Kalianpur_1975_UTM_Zone_45N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24346','Kalianpur_1975_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24347','Kalianpur_1975_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24370','Kalianpur_1880_India_Zone_0','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24371','Kalianpur_1880_India_Zone_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24372','Kalianpur_1880_India_Zone_IIa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24373','Kalianpur_1880_India_Zone_III','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24374','Kalianpur_1880_India_Zone_IV','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24375','Kalianpur_1937_India_Zone_IIb','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24376','Kalianpur_1962_India_Zone_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24377','Kalianpur_1962_India_Zone_IIa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24378','Kalianpur_1975_India_Zone_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24379','Kalianpur_1975_India_Zone_IIa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24380','Kalianpur_1975_India_Zone_IIb','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24381','Kalianpur_1975_India_Zone_III','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24382','Kalianpur_1880_India_Zone_IIb','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24383','Kalianpur_1975_India_Zone_IV','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24500','Kertau_Singapore_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24547','Kertau_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24548','Kertau_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24571','Kertau_RSO_Malaya_Chains','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24600','KOC_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24718','La_Canoa_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24719','La_Canoa_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24720','La_Canoa_UTM_Zone_20N','ESRI'); INSERT INTO "extent" VALUES('ESRI','5','Venezuela - east of 60~W, N hemisphere','Venezuela - east of 60~W, N hemisphere',7.6,10.0,-61.0,-58.0,0); INSERT INTO "projected_crs" VALUES('ESRI','24721','La_Canoa_UTM_Zone_21N',NULL,'EPSG','4400','EPSG','4247','EPSG','16021',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_24721_USAGE','projected_crs','ESRI','24721','ESRI','5','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24817','PSAD_1956_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24818','PSAD_1956_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24819','PSAD_1956_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24820','PSAD_1956_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24821','PSAD_1956_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24877','PSAD_1956_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24878','PSAD_1956_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24879','PSAD_1956_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24880','PSAD_1956_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24881','PSAD_1956_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24882','PSAD_1956_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24891','Peru_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24892','Peru_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','24893','Peru_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25000','Ghana_Metre_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25231','Lome_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25391','Philippines_Zone_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25392','Philippines_Zone_II','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25393','Philippines_Zone_III','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25394','Philippines_Zone_IV','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25395','Philippines_Zone_V','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25828','ETRS_1989_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25829','ETRS_1989_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25830','ETRS_1989_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25831','ETRS_1989_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25832','ETRS_1989_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25833','ETRS_1989_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25834','ETRS_1989_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25835','ETRS_1989_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25836','ETRS_1989_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25837','ETRS_1989_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25838','ETRS_1989_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25884','ETRS_1989_TM_Baltic_1993','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','25932','Malongo_1987_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26191','Nord_Maroc','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26192','Sud_Maroc','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26193','Sahara','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26194','Merchich_Sahara_Nord','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26195','Merchich_Sahara_Sud','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26237','Massawa_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26331','Minna_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26332','Minna_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26391','Nigeria_West_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26392','Nigeria_Mid_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26393','Nigeria_East_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26432','Mhast_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26591','Monte_Mario_Rome_Italy_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26592','Monte_Mario_Rome_Italy_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26632','Mporaloko_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26692','Mporaloko_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26701','NAD_1927_UTM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26702','NAD_1927_UTM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26703','NAD_1927_UTM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26704','NAD_1927_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26705','NAD_1927_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26706','NAD_1927_UTM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26707','NAD_1927_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26708','NAD_1927_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26709','NAD_1927_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26710','NAD_1927_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26711','NAD_1927_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26712','NAD_1927_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26713','NAD_1927_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26714','NAD_1927_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26715','NAD_1927_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26716','NAD_1927_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26717','NAD_1927_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26718','NAD_1927_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26719','NAD_1927_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26720','NAD_1927_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26721','NAD_1927_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26722','NAD_1927_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26729','NAD_1927_StatePlane_Alabama_East_FIPS_0101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26730','NAD_1927_StatePlane_Alabama_West_FIPS_0102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26731','NAD_1927_StatePlane_Alaska_1_FIPS_5001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26732','NAD_1927_StatePlane_Alaska_2_FIPS_5002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26733','NAD_1927_StatePlane_Alaska_3_FIPS_5003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26734','NAD_1927_StatePlane_Alaska_4_FIPS_5004','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26735','NAD_1927_StatePlane_Alaska_5_FIPS_5005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26736','NAD_1927_StatePlane_Alaska_6_FIPS_5006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26737','NAD_1927_StatePlane_Alaska_7_FIPS_5007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26738','NAD_1927_StatePlane_Alaska_8_FIPS_5008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26739','NAD_1927_StatePlane_Alaska_9_FIPS_5009','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26740','NAD_1927_StatePlane_Alaska_10_FIPS_5010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26741','NAD_1927_StatePlane_California_I_FIPS_0401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26742','NAD_1927_StatePlane_California_II_FIPS_0402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26743','NAD_1927_StatePlane_California_III_FIPS_0403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26744','NAD_1927_StatePlane_California_IV_FIPS_0404','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26745','NAD_1927_StatePlane_California_V_FIPS_0405','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26746','NAD_1927_StatePlane_California_VI_FIPS_0406','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26747','NAD_1927_StatePlane_California_VII_FIPS_0407','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26748','NAD_1927_StatePlane_Arizona_East_FIPS_0201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26749','NAD_1927_StatePlane_Arizona_Central_FIPS_0202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26750','NAD_1927_StatePlane_Arizona_West_FIPS_0203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26751','NAD_1927_StatePlane_Arkansas_North_FIPS_0301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26752','NAD_1927_StatePlane_Arkansas_South_FIPS_0302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26753','NAD_1927_StatePlane_Colorado_North_FIPS_0501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26754','NAD_1927_StatePlane_Colorado_Central_FIPS_0502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26755','NAD_1927_StatePlane_Colorado_South_FIPS_0503','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26756','NAD_1927_StatePlane_Connecticut_FIPS_0600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26757','NAD_1927_StatePlane_Delaware_FIPS_0700','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26758','NAD_1927_StatePlane_Florida_East_FIPS_0901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26759','NAD_1927_StatePlane_Florida_West_FIPS_0902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26760','NAD_1927_StatePlane_Florida_North_FIPS_0903','ESRI'); INSERT INTO "conversion" VALUES('ESRI','26761','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',18.83333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-155.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_26761_USAGE','conversion','ESRI','26761','EPSG','1546','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26761','NAD_1927_StatePlane_Hawaii_1_FIPS_5101',NULL,'EPSG','4497','EPSG','4267','ESRI','26761',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26761_USAGE','projected_crs','ESRI','26761','EPSG','1546','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','26762','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',20.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-156.6666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_26762_USAGE','conversion','ESRI','26762','EPSG','1547','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26762','NAD_1927_StatePlane_Hawaii_2_FIPS_5102',NULL,'EPSG','4497','EPSG','4267','ESRI','26762',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26762_USAGE','projected_crs','ESRI','26762','EPSG','1547','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','26763','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.16666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_26763_USAGE','conversion','ESRI','26763','EPSG','1548','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26763','NAD_1927_StatePlane_Hawaii_3_FIPS_5103',NULL,'EPSG','4497','EPSG','4267','ESRI','26763',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26763_USAGE','projected_crs','ESRI','26763','EPSG','1548','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','26764','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.83333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_26764_USAGE','conversion','ESRI','26764','EPSG','1549','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26764','NAD_1927_StatePlane_Hawaii_4_FIPS_5104',NULL,'EPSG','4497','EPSG','4267','ESRI','26764',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26764_USAGE','projected_crs','ESRI','26764','EPSG','1549','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','26765','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.66666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-160.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_26765_USAGE','conversion','ESRI','26765','EPSG','1550','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26765','NAD_1927_StatePlane_Hawaii_5_FIPS_5105',NULL,'EPSG','4497','EPSG','4267','ESRI','26765',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26765_USAGE','projected_crs','ESRI','26765','EPSG','1550','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26766','NAD_1927_StatePlane_Georgia_East_FIPS_1001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26767','NAD_1927_StatePlane_Georgia_West_FIPS_1002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26768','NAD_1927_StatePlane_Idaho_East_FIPS_1101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26769','NAD_1927_StatePlane_Idaho_Central_FIPS_1102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26770','NAD_1927_StatePlane_Idaho_West_FIPS_1103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26771','NAD_1927_StatePlane_Illinois_East_FIPS_1201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26772','NAD_1927_StatePlane_Illinois_West_FIPS_1202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26773','NAD_1927_StatePlane_Indiana_East_FIPS_1301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26774','NAD_1927_StatePlane_Indiana_West_FIPS_1302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26775','NAD_1927_StatePlane_Iowa_North_FIPS_1401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26776','NAD_1927_StatePlane_Iowa_South_FIPS_1402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26777','NAD_1927_StatePlane_Kansas_North_FIPS_1501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26778','NAD_1927_StatePlane_Kansas_South_FIPS_1502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26779','NAD_1927_StatePlane_Kentucky_North_FIPS_1601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26780','NAD_1927_StatePlane_Kentucky_South_FIPS_1602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26781','NAD_1927_StatePlane_Louisiana_North_FIPS_1701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26782','NAD_1927_StatePlane_Louisiana_South_FIPS_1702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26783','NAD_1927_StatePlane_Maine_East_FIPS_1801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26784','NAD_1927_StatePlane_Maine_West_FIPS_1802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26785','NAD_1927_StatePlane_Maryland_FIPS_1900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26786','NAD_1927_StatePlane_Massachusetts_Mainland_FIPS_2001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26787','NAD_1927_StatePlane_Massachusetts_Island_FIPS_2002','ESRI'); INSERT INTO "conversion" VALUES('ESRI','26788','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.78333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_26788_USAGE','conversion','ESRI','26788','EPSG','1723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26788','NAD_1927_StatePlane_Michigan_North_FIPS_2111',NULL,'EPSG','4497','EPSG','4267','ESRI','26788',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26788_USAGE','projected_crs','ESRI','26788','EPSG','1723','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','26789','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.31666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.33333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_26789_USAGE','conversion','ESRI','26789','EPSG','1724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26789','NAD_1927_StatePlane_Michigan_Central_FIPS_2112',NULL,'EPSG','4497','EPSG','4267','ESRI','26789',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26789_USAGE','projected_crs','ESRI','26789','EPSG','1724','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','26790','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.33333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.1,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_26790_USAGE','conversion','ESRI','26790','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','26790','NAD_1927_StatePlane_Michigan_South_FIPS_2113',NULL,'EPSG','4497','EPSG','4267','ESRI','26790',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_26790_USAGE','projected_crs','ESRI','26790','EPSG','1725','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26791','NAD_1927_StatePlane_Minnesota_North_FIPS_2201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26792','NAD_1927_StatePlane_Minnesota_Central_FIPS_2202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26793','NAD_1927_StatePlane_Minnesota_South_FIPS_2203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26794','NAD_1927_StatePlane_Mississippi_East_FIPS_2301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26795','NAD_1927_StatePlane_Mississippi_West_FIPS_2302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26796','NAD_1927_StatePlane_Missouri_East_FIPS_2401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26797','NAD_1927_StatePlane_Missouri_Central_FIPS_2402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26798','NAD_1927_StatePlane_Missouri_West_FIPS_2403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26799','NAD_1927_StatePlane_California_VII_FIPS_0407','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26801','NAD_Michigan_StatePlane_Michigan_East_Old_FIPS_2101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26802','NAD_Michigan_StatePlane_Michigan_Central_Old_FIPS_2102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26803','NAD_Michigan_StatePlane_Michigan_West_Old_FIPS_2103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26811','NAD_Michigan_StatePlane_Michigan_North_FIPS_2111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26812','NAD_Michigan_StatePlane_Michigan_Central_FIPS_2112','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26813','NAD_Michigan_StatePlane_Michigan_South_FIPS_2113','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26847','NAD_1983_StatePlane_Maine_East_FIPS_1801_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26848','NAD_1983_StatePlane_Maine_West_FIPS_1802_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26849','NAD_1983_StatePlane_Minnesota_North_FIPS_2201_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26850','NAD_1983_StatePlane_Minnesota_Central_FIPS_2202_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26851','NAD_1983_StatePlane_Minnesota_South_FIPS_2203_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26852','NAD_1983_StatePlane_Nebraska_FIPS_2600_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26853','NAD_1983_StatePlane_West_Virginia_North_FIPS_4701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26854','NAD_1983_StatePlane_West_Virginia_South_FIPS_4702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26855','NAD_1983_HARN_StatePlane_Maine_East_FIPS_1801_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26856','NAD_1983_HARN_StatePlane_Maine_West_FIPS_1802_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26857','NAD_1983_HARN_StatePlane_Minnesota_North_FIPS_2201_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26858','NAD_1983_HARN_StatePlane_Minnesota_Central_FIPS_2202_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26859','NAD_1983_HARN_StatePlane_Minnesota_South_FIPS_2203_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26860','NAD_1983_HARN_StatePlane_Nebraska_FIPS_2600_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26861','NAD_1983_HARN_StatePlane_West_Virginia_North_FIPS_4701_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26862','NAD_1983_HARN_StatePlane_West_Virginia_South_FIPS_4702_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26863','NAD_1983_NSRS2007_StatePlane_Maine_East_FIPS_1801_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26864','NAD_1983_NSRS2007_StatePlane_Maine_West_FIPS_1802_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26865','NAD_1983_NSRS2007_StatePlane_Minnesota_North_FIPS_2201_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26866','NAD_1983_NSRS2007_StatePlane_Minnesota_Central_FIPS_2202_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26867','NAD_1983_NSRS2007_StatePlane_Minnesota_South_FIPS_2203_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26868','NAD_1983_NSRS2007_StatePlane_Nebraska_FIPS_2600_Ft_US','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26869','NAD_1983_NSRS2007_StatePlane_West_Virginia_North_FIPS_4701_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26870','NAD_1983_NSRS2007_StatePlane_West_Virginia_South_FIPS_4702_FtUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26891','NAD_1983_CSRS_MTM_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26892','NAD_1983_CSRS_MTM_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26893','NAD_1983_CSRS_MTM_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26894','NAD_1983_CSRS_MTM_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26895','NAD_1983_CSRS_MTM_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26896','NAD_1983_CSRS_MTM_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26897','NAD_1983_CSRS_MTM_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26898','NAD_1983_CSRS_MTM_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26899','NAD_1983_CSRS_MTM_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26901','NAD_1983_UTM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26902','NAD_1983_UTM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26903','NAD_1983_UTM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26904','NAD_1983_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26905','NAD_1983_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26906','NAD_1983_UTM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26907','NAD_1983_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26908','NAD_1983_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26909','NAD_1983_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26910','NAD_1983_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26911','NAD_1983_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26912','NAD_1983_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26913','NAD_1983_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26914','NAD_1983_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26915','NAD_1983_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26916','NAD_1983_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26917','NAD_1983_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26918','NAD_1983_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26919','NAD_1983_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26920','NAD_1983_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26921','NAD_1983_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26922','NAD_1983_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26923','NAD_1983_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26929','NAD_1983_StatePlane_Alabama_East_FIPS_0101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26930','NAD_1983_StatePlane_Alabama_West_FIPS_0102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26931','NAD_1983_StatePlane_Alaska_1_FIPS_5001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26932','NAD_1983_StatePlane_Alaska_2_FIPS_5002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26933','NAD_1983_StatePlane_Alaska_3_FIPS_5003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26934','NAD_1983_StatePlane_Alaska_4_FIPS_5004','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26935','NAD_1983_StatePlane_Alaska_5_FIPS_5005','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26936','NAD_1983_StatePlane_Alaska_6_FIPS_5006','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26937','NAD_1983_StatePlane_Alaska_7_FIPS_5007','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26938','NAD_1983_StatePlane_Alaska_8_FIPS_5008','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26939','NAD_1983_StatePlane_Alaska_9_FIPS_5009','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26940','NAD_1983_StatePlane_Alaska_10_FIPS_5010','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26941','NAD_1983_StatePlane_California_I_FIPS_0401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26942','NAD_1983_StatePlane_California_II_FIPS_0402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26943','NAD_1983_StatePlane_California_III_FIPS_0403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26944','NAD_1983_StatePlane_California_IV_FIPS_0404','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26945','NAD_1983_StatePlane_California_V_FIPS_0405','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26946','NAD_1983_StatePlane_California_VI_FIPS_0406','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26948','NAD_1983_StatePlane_Arizona_East_FIPS_0201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26949','NAD_1983_StatePlane_Arizona_Central_FIPS_0202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26950','NAD_1983_StatePlane_Arizona_West_FIPS_0203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26951','NAD_1983_StatePlane_Arkansas_North_FIPS_0301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26952','NAD_1983_StatePlane_Arkansas_South_FIPS_0302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26953','NAD_1983_StatePlane_Colorado_North_FIPS_0501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26954','NAD_1983_StatePlane_Colorado_Central_FIPS_0502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26955','NAD_1983_StatePlane_Colorado_South_FIPS_0503','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26956','NAD_1983_StatePlane_Connecticut_FIPS_0600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26957','NAD_1983_StatePlane_Delaware_FIPS_0700','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26958','NAD_1983_StatePlane_Florida_East_FIPS_0901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26959','NAD_1983_StatePlane_Florida_West_FIPS_0902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26960','NAD_1983_StatePlane_Florida_North_FIPS_0903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26961','NAD_1983_StatePlane_Hawaii_1_FIPS_5101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26962','NAD_1983_StatePlane_Hawaii_2_FIPS_5102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26963','NAD_1983_StatePlane_Hawaii_3_FIPS_5103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26964','NAD_1983_StatePlane_Hawaii_4_FIPS_5104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26965','NAD_1983_StatePlane_Hawaii_5_FIPS_5105','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26966','NAD_1983_StatePlane_Georgia_East_FIPS_1001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26967','NAD_1983_StatePlane_Georgia_West_FIPS_1002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26968','NAD_1983_StatePlane_Idaho_East_FIPS_1101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26969','NAD_1983_StatePlane_Idaho_Central_FIPS_1102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26970','NAD_1983_StatePlane_Idaho_West_FIPS_1103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26971','NAD_1983_StatePlane_Illinois_East_FIPS_1201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26972','NAD_1983_StatePlane_Illinois_West_FIPS_1202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26973','NAD_1983_StatePlane_Indiana_East_FIPS_1301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26974','NAD_1983_StatePlane_Indiana_West_FIPS_1302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26975','NAD_1983_StatePlane_Iowa_North_FIPS_1401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26976','NAD_1983_StatePlane_Iowa_South_FIPS_1402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26977','NAD_1983_StatePlane_Kansas_North_FIPS_1501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26978','NAD_1983_StatePlane_Kansas_South_FIPS_1502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26979','NAD_1983_StatePlane_Kentucky_North_FIPS_1601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26980','NAD_1983_StatePlane_Kentucky_South_FIPS_1602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26981','NAD_1983_StatePlane_Louisiana_North_FIPS_1701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26982','NAD_1983_StatePlane_Louisiana_South_FIPS_1702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26983','NAD_1983_StatePlane_Maine_East_FIPS_1801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26984','NAD_1983_StatePlane_Maine_West_FIPS_1802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26985','NAD_1983_StatePlane_Maryland_FIPS_1900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26986','NAD_1983_StatePlane_Massachusetts_Mainland_FIPS_2001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26987','NAD_1983_StatePlane_Massachusetts_Island_FIPS_2002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26988','NAD_1983_StatePlane_Michigan_North_FIPS_2111','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26989','NAD_1983_StatePlane_Michigan_Central_FIPS_2112','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26990','NAD_1983_StatePlane_Michigan_South_FIPS_2113','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26991','NAD_1983_StatePlane_Minnesota_North_FIPS_2201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26992','NAD_1983_StatePlane_Minnesota_Central_FIPS_2202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26993','NAD_1983_StatePlane_Minnesota_South_FIPS_2203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26994','NAD_1983_StatePlane_Mississippi_East_FIPS_2301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26995','NAD_1983_StatePlane_Mississippi_West_FIPS_2302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26996','NAD_1983_StatePlane_Missouri_East_FIPS_2401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26997','NAD_1983_StatePlane_Missouri_Central_FIPS_2402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','26998','NAD_1983_StatePlane_Missouri_West_FIPS_2403','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27037','Nahrwan_1967_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27038','Nahrwan_1967_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27039','Nahrwan_1967_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27040','Nahrwan_1967_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27120','Naparima_1972_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27200','GD_1949_New_Zealand_Map_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27205','NZGD_1949_Mount_Eden_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27206','NZGD_1949_Bay_of_Plenty_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27207','NZGD_1949_Poverty_Bay_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27208','NZGD_1949_Hawkes_Bay_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27209','NZGD_1949_Taranaki_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27210','NZGD_1949_Tuhirangi_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27211','NZGD_1949_Wanganui_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27212','NZGD_1949_Wairarapa_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27213','NZGD_1949_Wellington_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27214','NZGD_1949_Collingwood_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27215','NZGD_1949_Nelson_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27216','NZGD_1949_Karamea_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27217','NZGD_1949_Buller_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27218','NZGD_1949_Grey_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27219','NZGD_1949_Amuri_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27220','NZGD_1949_Marlborough_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27221','NZGD_1949_Hokitika_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27222','NZGD_1949_Okarito_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27223','NZGD_1949_Jacksons_Bay_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27224','NZGD_1949_Mount_Pleasant_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27225','NZGD_1949_Gawler_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27226','NZGD_1949_Timaru_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27227','NZGD_1949_Lindis_Peak_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27228','NZGD_1949_Mount_Nicholas_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27229','NZGD_1949_Mount_York_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27230','NZGD_1949_Observation_Point_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27231','NZGD_1949_North_Taieri_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27232','NZGD_1949_Bluff_Circuit','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27258','NZGD_1949_UTM_Zone_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27259','NZGD_1949_UTM_Zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27260','NZGD_1949_UTM_Zone_60S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27291','New_Zealand_North_Island','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27292','New_Zealand_South_Island','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27391','NGO_1948_Oslo_Norway_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27392','NGO_1948_Oslo_Norway_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27393','NGO_1948_Oslo_Norway_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27394','NGO_1948_Oslo_Norway_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27395','NGO_1948_Oslo_Norway_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27396','NGO_1948_Oslo_Norway_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27397','NGO_1948_Oslo_Norway_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27398','NGO_1948_Oslo_Norway_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27429','Datum_73_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27492','Datum_73_Modified_Portuguese_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27493','Datum_73_Modified_Portuguese_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27500','Nord_de_Guerre','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27561','NTF_Paris_Lambert_Nord_France','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27562','NTF_Paris_Lambert_Centre_France','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27563','NTF_Paris_Lambert_Sud_France','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27564','NTF_Paris_Lambert_Corse','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27571','NTF_Paris_Lambert_Zone_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27572','NTF_Paris_Lambert_Zone_II','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27573','NTF_Paris_Lambert_Zone_III','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27574','NTF_Paris_Lambert_Zone_IV','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27581','NTF_Paris_France_I','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27582','NTF_Paris_France_II','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27583','NTF_Paris_France_III','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27584','NTF_Paris_France_IV','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27591','NTF_Paris_Nord_France','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27592','NTF_Paris_Centre_France','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27593','NTF_Paris_Sud_France','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27594','NTF_Paris_Corse','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27700','British_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27701','WGS_1984_Equi7_Africa','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27702','WGS_1984_Equi7_Antarctica','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27703','WGS_1984_Equi7_Asia','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27704','WGS_1984_Equi7_Europe','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27705','WGS_1984_Equi7_North_America','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27706','WGS_1984_Equi7_Oceania','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','27707','WGS_1984_Equi7_South_America','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28191','Palestine_1923_Palestine_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28192','Palestine_1923_Palestine_Belt','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28193','Palestine_1923_Israel_CS_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28232','Pointe_Noire_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28348','GDA_1994_MGA_Zone_48','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28349','GDA_1994_MGA_Zone_49','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28350','GDA_1994_MGA_Zone_50','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28351','GDA_1994_MGA_Zone_51','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28352','GDA_1994_MGA_Zone_52','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28353','GDA_1994_MGA_Zone_53','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28354','GDA_1994_MGA_Zone_54','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28355','GDA_1994_MGA_Zone_55','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28356','GDA_1994_MGA_Zone_56','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28357','GDA_1994_MGA_Zone_57','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28358','GDA_1994_MGA_Zone_58','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28402','Pulkovo_1942_GK_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28403','Pulkovo_1942_GK_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28404','Pulkovo_1942_GK_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28405','Pulkovo_1942_GK_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28406','Pulkovo_1942_GK_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28407','Pulkovo_1942_GK_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28408','Pulkovo_1942_GK_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28409','Pulkovo_1942_GK_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28410','Pulkovo_1942_GK_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28411','Pulkovo_1942_GK_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28412','Pulkovo_1942_GK_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28413','Pulkovo_1942_GK_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28414','Pulkovo_1942_GK_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28415','Pulkovo_1942_GK_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28416','Pulkovo_1942_GK_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28417','Pulkovo_1942_GK_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28418','Pulkovo_1942_GK_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28419','Pulkovo_1942_GK_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28420','Pulkovo_1942_GK_Zone_20','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28421','Pulkovo_1942_GK_Zone_21','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28422','Pulkovo_1942_GK_Zone_22','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28423','Pulkovo_1942_GK_Zone_23','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28424','Pulkovo_1942_GK_Zone_24','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28425','Pulkovo_1942_GK_Zone_25','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28426','Pulkovo_1942_GK_Zone_26','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28427','Pulkovo_1942_GK_Zone_27','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28428','Pulkovo_1942_GK_Zone_28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28429','Pulkovo_1942_GK_Zone_29','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28430','Pulkovo_1942_GK_Zone_30','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28431','Pulkovo_1942_GK_Zone_31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28432','Pulkovo_1942_GK_Zone_32','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28462','Pulkovo_1942_GK_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28463','Pulkovo_1942_GK_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28464','Pulkovo_1942_GK_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28465','Pulkovo_1942_GK_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28466','Pulkovo_1942_GK_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28467','Pulkovo_1942_GK_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28468','Pulkovo_1942_GK_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28469','Pulkovo_1942_GK_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28470','Pulkovo_1942_GK_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28471','Pulkovo_1942_GK_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28472','Pulkovo_1942_GK_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28473','Pulkovo_1942_GK_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28474','Pulkovo_1942_GK_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28475','Pulkovo_1942_GK_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28476','Pulkovo_1942_GK_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28477','Pulkovo_1942_GK_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28478','Pulkovo_1942_GK_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28479','Pulkovo_1942_GK_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28480','Pulkovo_1942_GK_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28481','Pulkovo_1942_GK_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28482','Pulkovo_1942_GK_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28483','Pulkovo_1942_GK_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28484','Pulkovo_1942_GK_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28485','Pulkovo_1942_GK_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28486','Pulkovo_1942_GK_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28487','Pulkovo_1942_GK_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28488','Pulkovo_1942_GK_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28489','Pulkovo_1942_GK_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28490','Pulkovo_1942_GK_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28491','Pulkovo_1942_GK_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28492','Pulkovo_1942_GK_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28600','Qatar_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28991','RD_Old','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','28992','RD_New','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29100','SAD_1969_Brazil_Polyconic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29101','SAD_1969_Brazil_Polyconic','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29118','SAD_1969_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29119','SAD_1969_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29120','SAD_1969_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29121','SAD_1969_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29122','SAD_1969_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29168','SAD_1969_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29169','SAD_1969_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29170','SAD_1969_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29171','SAD_1969_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29172','SAD_1969_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29177','SAD_1969_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29178','SAD_1969_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29179','SAD_1969_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29180','SAD_1969_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29181','SAD_1969_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29182','SAD_1969_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29183','SAD_1969_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29184','SAD_1969_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29185','SAD_1969_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29187','SAD_1969_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29188','SAD_1969_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29189','SAD_1969_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29190','SAD_1969_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29191','SAD_1969_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29192','SAD_1969_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29193','SAD_1969_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29194','SAD_1969_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29195','SAD_1969_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29220','Sapper_Hill_1943_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29221','Sapper_Hill_1943_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29333','Schwarzeck_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29635','Sudan_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29636','Sudan_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29701','Tananarive_1925_Paris_Laborde_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29738','Tananarive_1925_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29739','Tananarive_1925_UTM_Zone_39S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29849','Timbalai_1948_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29850','Timbalai_1948_UTM_Zone_50N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29871','Timbalai_1948_RSO_Borneo_Chains','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29872','Timbalai_1948_RSO_Borneo_Feet','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29873','Timbalai_1948_RSO_Borneo_Meters','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29874','Timbalai_1948_RSO_Sarawak_LSD_(m)','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29900','TM65_Irish_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29901','OSNI_1952_Irish_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29902','TM65_Irish_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29903','TM75_Irish_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30161','Japan_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30162','Japan_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30163','Japan_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30164','Japan_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30165','Japan_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30166','Japan_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30167','Japan_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30168','Japan_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30169','Japan_Zone_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30170','Japan_Zone_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30171','Japan_Zone_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30172','Japan_Zone_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30173','Japan_Zone_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30174','Japan_Zone_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30175','Japan_Zone_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30176','Japan_Zone_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30177','Japan_Zone_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30178','Japan_Zone_18','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30179','Japan_Zone_19','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30200','Trinidad_1903_Trinidad_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30339','TC_1948_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30340','TC_1948_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30491','Nord_Algerie_Ancienne','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30492','Sud_Algerie_Ancienne','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30493','Voirol_1879_Nord_Algerie_Ancienne','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30494','Voirol_1879_Sud_Algerie_Ancienne','ESRI'); INSERT INTO "conversion" VALUES('ESRI','30591','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625544,'EPSG','9201','EPSG','8806','False easting',500135.0,'EPSG','9001','EPSG','8807','False northing',300090.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_30591_USAGE','conversion','ESRI','30591','EPSG','1728','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','30591','Nord_Algerie',NULL,'EPSG','4400','ESRI','4305','ESRI','30591',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_30591_USAGE','projected_crs','ESRI','30591','EPSG','1728','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','30592','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500135.0,'EPSG','9001','EPSG','8807','False northing',300090.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_30592_USAGE','conversion','ESRI','30592','EPSG','1729','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','30592','Sud_Algerie',NULL,'EPSG','4400','ESRI','4305','ESRI','30592',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_30592_USAGE','projected_crs','ESRI','30592','EPSG','1729','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30729','Nord_Sahara_1959_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30730','Nord_Sahara_1959_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30731','Nord_Sahara_1959_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30732','Nord_Sahara_1959_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30791','Nord_Sahara_1959_Voirol_Unifie_Nord','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30792','Nord_Sahara_1959_Voirol_Unifie_Sud','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','30800','Swedish_National_Grid','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31028','Yoff_1972_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31121','Zanderij_1972_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31154','Zanderij_TM_54_NW','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31170','Zanderij_Suriname_Old_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31171','Zanderij_Suriname_TM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31251','MGI_Ferro_Austria_GK_West','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31252','MGI_Ferro_Austria_GK_Central','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31253','MGI_Ferro_Austria_GK_East','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31254','MGI_Austria_GK_West','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31255','MGI_Austria_GK_Central','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31256','MGI_Austria_GK_East','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31257','MGI_Austria_GK_M28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31258','MGI_Austria_GK_M31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31259','MGI_Austria_GK_M34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31265','MGI_3_Degree_Gauss_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31266','MGI_3_Degree_Gauss_Zone_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31267','MGI_3_Degree_Gauss_Zone_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31268','MGI_3_Degree_Gauss_Zone_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31275','MGI_Balkans_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31276','MGI_Balkans_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31277','MGI_Balkans_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31278','MGI_Balkans_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31279','MGI_Balkans_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31281','Austria_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31282','Austria_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31283','Austria_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31284','MGI_M28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31285','MGI_M31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31286','MGI_M34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31287','MGI_Austria_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31288','MGI_Ferro_M28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31289','MGI_Ferro_M31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31290','MGI_Ferro_M34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31291','Austria_West_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31292','Austria_Central_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31293','Austria_East_Zone','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31294','MGI_M28','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31295','MGI_M31','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31296','MGI_M34','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31297','MGI_Austria_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31370','Belge_Lambert_1972','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31461','DHDN_3_Degree_Gauss_Zone_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31462','DHDN_3_Degree_Gauss_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31463','DHDN_3_Degree_Gauss_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31464','DHDN_3_Degree_Gauss_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31465','DHDN_3_Degree_Gauss_Zone_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31466','DHDN_3_Degree_Gauss_Zone_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31467','DHDN_3_Degree_Gauss_Zone_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31468','DHDN_3_Degree_Gauss_Zone_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31469','DHDN_3_Degree_Gauss_Zone_5','ESRI'); INSERT INTO "projected_crs" VALUES('ESRI','31491','Germany_Zone_1',NULL,'EPSG','4400','EPSG','4314','EPSG','16201',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31491_USAGE','projected_crs','ESRI','31491','EPSG','3892','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31492','Germany_Zone_2',NULL,'EPSG','4400','EPSG','4314','EPSG','16262',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31492_USAGE','projected_crs','ESRI','31492','EPSG','1624','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31493','Germany_Zone_3',NULL,'EPSG','4400','EPSG','4314','EPSG','16263',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31493_USAGE','projected_crs','ESRI','31493','EPSG','1625','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31494','Germany_Zone_4',NULL,'EPSG','4400','EPSG','4314','EPSG','16264',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31494_USAGE','projected_crs','ESRI','31494','EPSG','1626','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31495','Germany_Zone_5',NULL,'EPSG','4400','EPSG','4314','EPSG','16265',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31495_USAGE','projected_crs','ESRI','31495','EPSG','1627','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31528','Conakry_1905_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31529','Conakry_1905_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31600','Stereo_33','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31700','Stereo_70','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31838','NGN_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31839','NGN_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31901','KUDAMS_KTM','ESRI'); INSERT INTO "projected_crs" VALUES('ESRI','31917','SIRGAS_UTM_Zone_17N',NULL,'EPSG','4400','EPSG','4170','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31917_USAGE','projected_crs','ESRI','31917','EPSG','1823','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31918','SIRGAS_UTM_Zone_18N',NULL,'EPSG','4400','EPSG','4170','EPSG','16018',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31918_USAGE','projected_crs','ESRI','31918','EPSG','1825','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31919','SIRGAS_UTM_Zone_19N',NULL,'EPSG','4400','EPSG','4170','EPSG','16019',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31919_USAGE','projected_crs','ESRI','31919','EPSG','1827','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31920','SIRGAS_UTM_Zone_20N',NULL,'EPSG','4400','EPSG','4170','EPSG','16020',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31920_USAGE','projected_crs','ESRI','31920','EPSG','1829','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31921','SIRGAS_UTM_Zone_21N',NULL,'EPSG','4400','EPSG','4170','EPSG','16021',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31921_USAGE','projected_crs','ESRI','31921','EPSG','1831','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','31922','SIRGAS_UTM_Zone_22N',NULL,'EPSG','4400','EPSG','4170','EPSG','16022',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_31922_USAGE','projected_crs','ESRI','31922','EPSG','1833','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31965','SIRGAS_2000_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31966','SIRGAS_2000_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31967','SIRGAS_2000_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31968','SIRGAS_2000_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31969','SIRGAS_2000_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31970','SIRGAS_2000_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31971','SIRGAS_2000_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31972','SIRGAS_2000_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31973','SIRGAS_2000_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31974','SIRGAS_2000_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31975','SIRGAS_2000_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31976','SIRGAS_2000_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31977','SIRGAS_2000_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31978','SIRGAS_2000_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31979','SIRGAS_2000_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31980','SIRGAS_2000_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31981','SIRGAS_2000_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31982','SIRGAS_2000_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31983','SIRGAS_2000_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31984','SIRGAS_2000_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31985','SIRGAS_2000_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31986','SIRGAS_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31987','SIRGAS_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31988','SIRGAS_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31989','SIRGAS_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31990','SIRGAS_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31991','SIRGAS_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31992','SIRGAS_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31993','SIRGAS_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31994','SIRGAS_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31995','SIRGAS_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31996','SIRGAS_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31997','SIRGAS_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31998','SIRGAS_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','31999','SIRGAS_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32000','SIRGAS_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32001','NAD_1927_StatePlane_Montana_North_FIPS_2501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32002','NAD_1927_StatePlane_Montana_Central_FIPS_2502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32003','NAD_1927_StatePlane_Montana_South_FIPS_2503','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32005','NAD_1927_StatePlane_Nebraska_North_FIPS_2601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32006','NAD_1927_StatePlane_Nebraska_South_FIPS_2602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32007','NAD_1927_StatePlane_Nevada_East_FIPS_2701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32008','NAD_1927_StatePlane_Nevada_Central_FIPS_2702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32009','NAD_1927_StatePlane_Nevada_West_FIPS_2703','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32010','NAD_1927_StatePlane_New_Hampshire_FIPS_2800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32011','NAD_1927_StatePlane_New_Jersey_FIPS_2900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32012','NAD_1927_StatePlane_New_Mexico_East_FIPS_3001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32013','NAD_1927_StatePlane_New_Mexico_Central_FIPS_3002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32014','NAD_1927_StatePlane_New_Mexico_West_FIPS_3003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32015','NAD_1927_StatePlane_New_York_East_FIPS_3101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32016','NAD_1927_StatePlane_New_York_Central_FIPS_3102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32017','NAD_1927_StatePlane_New_York_West_FIPS_3103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32018','NAD_1927_StatePlane_New_York_Long_Island_FIPS_3104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32019','NAD_1927_StatePlane_North_Carolina_FIPS_3200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32020','NAD_1927_StatePlane_North_Dakota_North_FIPS_3301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32021','NAD_1927_StatePlane_North_Dakota_South_FIPS_3302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32022','NAD_1927_StatePlane_Ohio_North_FIPS_3401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32023','NAD_1927_StatePlane_Ohio_South_FIPS_3402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32024','NAD_1927_StatePlane_Oklahoma_North_FIPS_3501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32025','NAD_1927_StatePlane_Oklahoma_South_FIPS_3502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32026','NAD_1927_StatePlane_Oregon_North_FIPS_3601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32027','NAD_1927_StatePlane_Oregon_South_FIPS_3602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32028','NAD_1927_StatePlane_Pennsylvania_North_FIPS_3701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32029','NAD_1927_StatePlane_Pennsylvania_South_FIPS_3702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32030','NAD_1927_StatePlane_Rhode_Island_FIPS_3800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32031','NAD_1927_StatePlane_South_Carolina_North_FIPS_3901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32033','NAD_1927_StatePlane_South_Carolina_South_FIPS_3902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32034','NAD_1927_StatePlane_South_Dakota_North_FIPS_4001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32035','NAD_1927_StatePlane_South_Dakota_South_FIPS_4002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32036','NAD_1927_StatePlane_Tennessee_FIPS_4100','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32037','NAD_1927_StatePlane_Texas_North_FIPS_4201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32038','NAD_1927_StatePlane_Texas_North_Central_FIPS_4202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32039','NAD_1927_StatePlane_Texas_Central_FIPS_4203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32040','NAD_1927_StatePlane_Texas_South_Central_FIPS_4204','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32041','NAD_1927_StatePlane_Texas_South_FIPS_4205','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32042','NAD_1927_StatePlane_Utah_North_FIPS_4301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32043','NAD_1927_StatePlane_Utah_Central_FIPS_4302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32044','NAD_1927_StatePlane_Utah_South_FIPS_4303','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32045','NAD_1927_StatePlane_Vermont_FIPS_4400','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32046','NAD_1927_StatePlane_Virginia_North_FIPS_4501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32047','NAD_1927_StatePlane_Virginia_South_FIPS_4502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32048','NAD_1927_StatePlane_Washington_North_FIPS_4601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32049','NAD_1927_StatePlane_Washington_South_FIPS_4602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32050','NAD_1927_StatePlane_West_Virginia_North_FIPS_4701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32051','NAD_1927_StatePlane_West_Virginia_South_FIPS_4702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32052','NAD_1927_StatePlane_Wisconsin_North_FIPS_4801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32053','NAD_1927_StatePlane_Wisconsin_Central_FIPS_4802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32054','NAD_1927_StatePlane_Wisconsin_South_FIPS_4803','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32055','NAD_1927_StatePlane_Wyoming_East_FIPS_4901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32056','NAD_1927_StatePlane_Wyoming_East_Central_FIPS_4902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32057','NAD_1927_StatePlane_Wyoming_West_Central_FIPS_4903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32058','NAD_1927_StatePlane_Wyoming_West_FIPS_4904','ESRI'); INSERT INTO "conversion" VALUES('ESRI','32059','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',17.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.43333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',18.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',18.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_32059_USAGE','conversion','ESRI','32059','EPSG','1194','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','32059','NAD_1927_StatePlane_Puerto_Rico_FIPS_5201',NULL,'EPSG','4497','EPSG','4267','ESRI','32059',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_32059_USAGE','projected_crs','ESRI','32059','EPSG','1194','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','32060','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',17.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.43333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',18.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',18.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_32060_USAGE','conversion','ESRI','32060','EPSG','1254','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','32060','NAD_1927_StatePlane_Virgin_Islands_St_Croix_FIPS_5202',NULL,'EPSG','4497','EPSG','4267','ESRI','32060',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_32060_USAGE','projected_crs','ESRI','32060','EPSG','1254','EPSG','1024'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32061','NAD_1927_Guatemala_Norte','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32062','NAD_1927_Guatemala_Sur','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32064','NAD_1927_BLM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32065','NAD_1927_BLM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32066','NAD_1927_BLM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32067','NAD_1927_BLM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32074','NAD_1927_BLM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32075','NAD_1927_BLM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32076','NAD_1927_BLM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32077','NAD_1927_BLM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32081','NAD_1927_MTM_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32082','NAD_1927_MTM_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32083','NAD_1927_MTM_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32084','NAD_1927_MTM_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32085','NAD_1927_MTM_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32086','NAD_1927_MTM_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32098','NAD_1927_Quebec_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32099','NAD_1927_StatePlane_Louisiana_Offshore_FIPS_1703','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32100','NAD_1983_StatePlane_Montana_FIPS_2500','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32104','NAD_1983_StatePlane_Nebraska_FIPS_2600','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32107','NAD_1983_StatePlane_Nevada_East_FIPS_2701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32108','NAD_1983_StatePlane_Nevada_Central_FIPS_2702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32109','NAD_1983_StatePlane_Nevada_West_FIPS_2703','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32110','NAD_1983_StatePlane_New_Hampshire_FIPS_2800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32111','NAD_1983_StatePlane_New_Jersey_FIPS_2900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32112','NAD_1983_StatePlane_New_Mexico_East_FIPS_3001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32113','NAD_1983_StatePlane_New_Mexico_Central_FIPS_3002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32114','NAD_1983_StatePlane_New_Mexico_West_FIPS_3003','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32115','NAD_1983_StatePlane_New_York_East_FIPS_3101','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32116','NAD_1983_StatePlane_New_York_Central_FIPS_3102','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32117','NAD_1983_StatePlane_New_York_West_FIPS_3103','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32118','NAD_1983_StatePlane_New_York_Long_Island_FIPS_3104','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32119','NAD_1983_StatePlane_North_Carolina_FIPS_3200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32120','NAD_1983_StatePlane_North_Dakota_North_FIPS_3301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32121','NAD_1983_StatePlane_North_Dakota_South_FIPS_3302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32122','NAD_1983_StatePlane_Ohio_North_FIPS_3401','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32123','NAD_1983_StatePlane_Ohio_South_FIPS_3402','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32124','NAD_1983_StatePlane_Oklahoma_North_FIPS_3501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32125','NAD_1983_StatePlane_Oklahoma_South_FIPS_3502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32126','NAD_1983_StatePlane_Oregon_North_FIPS_3601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32127','NAD_1983_StatePlane_Oregon_South_FIPS_3602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32128','NAD_1983_StatePlane_Pennsylvania_North_FIPS_3701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32129','NAD_1983_StatePlane_Pennsylvania_South_FIPS_3702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32130','NAD_1983_StatePlane_Rhode_Island_FIPS_3800','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32133','NAD_1983_StatePlane_South_Carolina_FIPS_3900','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32134','NAD_1983_StatePlane_South_Dakota_North_FIPS_4001','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32135','NAD_1983_StatePlane_South_Dakota_South_FIPS_4002','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32136','NAD_1983_StatePlane_Tennessee_FIPS_4100','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32137','NAD_1983_StatePlane_Texas_North_FIPS_4201','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32138','NAD_1983_StatePlane_Texas_North_Central_FIPS_4202','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32139','NAD_1983_StatePlane_Texas_Central_FIPS_4203','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32140','NAD_1983_StatePlane_Texas_South_Central_FIPS_4204','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32141','NAD_1983_StatePlane_Texas_South_FIPS_4205','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32142','NAD_1983_StatePlane_Utah_North_FIPS_4301','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32143','NAD_1983_StatePlane_Utah_Central_FIPS_4302','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32144','NAD_1983_StatePlane_Utah_South_FIPS_4303','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32145','NAD_1983_StatePlane_Vermont_FIPS_4400','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32146','NAD_1983_StatePlane_Virginia_North_FIPS_4501','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32147','NAD_1983_StatePlane_Virginia_South_FIPS_4502','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32148','NAD_1983_StatePlane_Washington_North_FIPS_4601','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32149','NAD_1983_StatePlane_Washington_South_FIPS_4602','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32150','NAD_1983_StatePlane_West_Virginia_North_FIPS_4701','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32151','NAD_1983_StatePlane_West_Virginia_South_FIPS_4702','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32152','NAD_1983_StatePlane_Wisconsin_North_FIPS_4801','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32153','NAD_1983_StatePlane_Wisconsin_Central_FIPS_4802','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32154','NAD_1983_StatePlane_Wisconsin_South_FIPS_4803','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32155','NAD_1983_StatePlane_Wyoming_East_FIPS_4901','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32156','NAD_1983_StatePlane_Wyoming_East_Central_FIPS_4902','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32157','NAD_1983_StatePlane_Wyoming_West_Central_FIPS_4903','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32158','NAD_1983_StatePlane_Wyoming_West_FIPS_4904','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32159','NAD_1983_WyLAM','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32161','NAD_1983_StatePlane_Puerto_Rico_Virgin_Islands_FIPS_5200','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32164','NAD_1983_BLM_Zone_14N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32165','NAD_1983_BLM_Zone_15N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32166','NAD_1983_BLM_Zone_16N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32167','NAD_1983_BLM_Zone_17N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32180','NAD_1983_MTM_2_SCoPQ','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32181','NAD_1983_MTM_1','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32182','NAD_1983_MTM_2','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32183','NAD_1983_MTM_3','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32184','NAD_1983_MTM_4','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32185','NAD_1983_MTM_5','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32186','NAD_1983_MTM_6','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32187','NAD_1983_MTM_7','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32188','NAD_1983_MTM_8','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32189','NAD_1983_MTM_9','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32190','NAD_1983_MTM_10','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32191','NAD_1983_MTM_11','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32192','NAD_1983_MTM_12','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32193','NAD_1983_MTM_13','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32194','NAD_1983_MTM_14','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32195','NAD_1983_MTM_15','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32196','NAD_1983_MTM_16','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32197','NAD_1983_MTM_17','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32198','NAD_1983_Quebec_Lambert','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32199','NAD_1983_StatePlane_Louisiana_Offshore_FIPS_1703','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32201','WGS_1972_UTM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32202','WGS_1972_UTM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32203','WGS_1972_UTM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32204','WGS_1972_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32205','WGS_1972_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32206','WGS_1972_UTM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32207','WGS_1972_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32208','WGS_1972_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32209','WGS_1972_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32210','WGS_1972_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32211','WGS_1972_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32212','WGS_1972_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32213','WGS_1972_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32214','WGS_1972_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32215','WGS_1972_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32216','WGS_1972_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32217','WGS_1972_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32218','WGS_1972_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32219','WGS_1972_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32220','WGS_1972_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32221','WGS_1972_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32222','WGS_1972_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32223','WGS_1972_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32224','WGS_1972_UTM_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32225','WGS_1972_UTM_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32226','WGS_1972_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32227','WGS_1972_UTM_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32228','WGS_1972_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32229','WGS_1972_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32230','WGS_1972_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32231','WGS_1972_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32232','WGS_1972_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32233','WGS_1972_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32234','WGS_1972_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32235','WGS_1972_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32236','WGS_1972_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32237','WGS_1972_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32238','WGS_1972_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32239','WGS_1972_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32240','WGS_1972_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32241','WGS_1972_UTM_Zone_41N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32242','WGS_1972_UTM_Zone_42N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32243','WGS_1972_UTM_Zone_43N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32244','WGS_1972_UTM_Zone_44N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32245','WGS_1972_UTM_Zone_45N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32246','WGS_1972_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32247','WGS_1972_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32248','WGS_1972_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32249','WGS_1972_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32250','WGS_1972_UTM_Zone_50N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32251','WGS_1972_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32252','WGS_1972_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32253','WGS_1972_UTM_Zone_53N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32254','WGS_1972_UTM_Zone_54N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32255','WGS_1972_UTM_Zone_55N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32256','WGS_1972_UTM_Zone_56N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32257','WGS_1972_UTM_Zone_57N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32258','WGS_1972_UTM_Zone_58N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32259','WGS_1972_UTM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32260','WGS_1972_UTM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32301','WGS_1972_UTM_Zone_1S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32302','WGS_1972_UTM_Zone_2S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32303','WGS_1972_UTM_Zone_3S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32304','WGS_1972_UTM_Zone_4S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32305','WGS_1972_UTM_Zone_5S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32306','WGS_1972_UTM_Zone_6S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32307','WGS_1972_UTM_Zone_7S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32308','WGS_1972_UTM_Zone_8S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32309','WGS_1972_UTM_Zone_9S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32310','WGS_1972_UTM_Zone_10S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32311','WGS_1972_UTM_Zone_11S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32312','WGS_1972_UTM_Zone_12S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32313','WGS_1972_UTM_Zone_13S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32314','WGS_1972_UTM_Zone_14S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32315','WGS_1972_UTM_Zone_15S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32316','WGS_1972_UTM_Zone_16S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32317','WGS_1972_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32318','WGS_1972_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32319','WGS_1972_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32320','WGS_1972_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32321','WGS_1972_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32322','WGS_1972_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32323','WGS_1972_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32324','WGS_1972_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32325','WGS_1972_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32326','WGS_1972_UTM_Zone_26S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32327','WGS_1972_UTM_Zone_27S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32328','WGS_1972_UTM_Zone_28S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32329','WGS_1972_UTM_Zone_29S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32330','WGS_1972_UTM_Zone_30S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32331','WGS_1972_UTM_Zone_31S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32332','WGS_1972_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32333','WGS_1972_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32334','WGS_1972_UTM_Zone_34S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32335','WGS_1972_UTM_Zone_35S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32336','WGS_1972_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32337','WGS_1972_UTM_Zone_37S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32338','WGS_1972_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32339','WGS_1972_UTM_Zone_39S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32340','WGS_1972_UTM_Zone_40S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32341','WGS_1972_UTM_Zone_41S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32342','WGS_1972_UTM_Zone_42S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32343','WGS_1972_UTM_Zone_43S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32344','WGS_1972_UTM_Zone_44S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32345','WGS_1972_UTM_Zone_45S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32346','WGS_1972_UTM_Zone_46S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32347','WGS_1972_UTM_Zone_47S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32348','WGS_1972_UTM_Zone_48S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32349','WGS_1972_UTM_Zone_49S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32350','WGS_1972_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32351','WGS_1972_UTM_Zone_51S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32352','WGS_1972_UTM_Zone_52S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32353','WGS_1972_UTM_Zone_53S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32354','WGS_1972_UTM_Zone_54S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32355','WGS_1972_UTM_Zone_55S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32356','WGS_1972_UTM_Zone_56S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32357','WGS_1972_UTM_Zone_57S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32358','WGS_1972_UTM_Zone_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32359','WGS_1972_UTM_Zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32360','WGS_1972_UTM_Zone_60S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32401','WGS_1972_BE_UTM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32402','WGS_1972_BE_UTM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32403','WGS_1972_BE_UTM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32404','WGS_1972_BE_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32405','WGS_1972_BE_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32406','WGS_1972_BE_UTM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32407','WGS_1972_BE_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32408','WGS_1972_BE_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32409','WGS_1972_BE_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32410','WGS_1972_BE_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32411','WGS_1972_BE_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32412','WGS_1972_BE_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32413','WGS_1972_BE_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32414','WGS_1972_BE_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32415','WGS_1972_BE_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32416','WGS_1972_BE_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32417','WGS_1972_BE_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32418','WGS_1972_BE_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32419','WGS_1972_BE_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32420','WGS_1972_BE_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32421','WGS_1972_BE_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32422','WGS_1972_BE_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32423','WGS_1972_BE_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32424','WGS_1972_BE_UTM_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32425','WGS_1972_BE_UTM_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32426','WGS_1972_BE_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32427','WGS_1972_BE_UTM_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32428','WGS_1972_BE_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32429','WGS_1972_BE_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32430','WGS_1972_BE_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32431','WGS_1972_BE_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32432','WGS_1972_BE_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32433','WGS_1972_BE_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32434','WGS_1972_BE_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32435','WGS_1972_BE_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32436','WGS_1972_BE_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32437','WGS_1972_BE_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32438','WGS_1972_BE_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32439','WGS_1972_BE_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32440','WGS_1972_BE_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32441','WGS_1972_BE_UTM_Zone_41N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32442','WGS_1972_BE_UTM_Zone_42N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32443','WGS_1972_BE_UTM_Zone_43N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32444','WGS_1972_BE_UTM_Zone_44N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32445','WGS_1972_BE_UTM_Zone_45N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32446','WGS_1972_BE_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32447','WGS_1972_BE_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32448','WGS_1972_BE_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32449','WGS_1972_BE_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32450','WGS_1972_BE_UTM_Zone_50N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32451','WGS_1972_BE_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32452','WGS_1972_BE_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32453','WGS_1972_BE_UTM_Zone_53N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32454','WGS_1972_BE_UTM_Zone_54N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32455','WGS_1972_BE_UTM_Zone_55N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32456','WGS_1972_BE_UTM_Zone_56N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32457','WGS_1972_BE_UTM_Zone_57N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32458','WGS_1972_BE_UTM_Zone_58N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32459','WGS_1972_BE_UTM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32460','WGS_1972_BE_UTM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32501','WGS_1972_BE_UTM_Zone_1S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32502','WGS_1972_BE_UTM_Zone_2S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32503','WGS_1972_BE_UTM_Zone_3S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32504','WGS_1972_BE_UTM_Zone_4S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32505','WGS_1972_BE_UTM_Zone_5S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32506','WGS_1972_BE_UTM_Zone_6S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32507','WGS_1972_BE_UTM_Zone_7S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32508','WGS_1972_BE_UTM_Zone_8S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32509','WGS_1972_BE_UTM_Zone_9S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32510','WGS_1972_BE_UTM_Zone_10S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32511','WGS_1972_BE_UTM_Zone_11S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32512','WGS_1972_BE_UTM_Zone_12S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32513','WGS_1972_BE_UTM_Zone_13S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32514','WGS_1972_BE_UTM_Zone_14S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32515','WGS_1972_BE_UTM_Zone_15S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32516','WGS_1972_BE_UTM_Zone_16S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32517','WGS_1972_BE_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32518','WGS_1972_BE_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32519','WGS_1972_BE_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32520','WGS_1972_BE_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32521','WGS_1972_BE_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32522','WGS_1972_BE_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32523','WGS_1972_BE_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32524','WGS_1972_BE_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32525','WGS_1972_BE_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32526','WGS_1972_BE_UTM_Zone_26S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32527','WGS_1972_BE_UTM_Zone_27S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32528','WGS_1972_BE_UTM_Zone_28S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32529','WGS_1972_BE_UTM_Zone_29S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32530','WGS_1972_BE_UTM_Zone_30S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32531','WGS_1972_BE_UTM_Zone_31S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32532','WGS_1972_BE_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32533','WGS_1972_BE_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32534','WGS_1972_BE_UTM_Zone_34S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32535','WGS_1972_BE_UTM_Zone_35S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32536','WGS_1972_BE_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32537','WGS_1972_BE_UTM_Zone_37S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32538','WGS_1972_BE_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32539','WGS_1972_BE_UTM_Zone_39S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32540','WGS_1972_BE_UTM_Zone_40S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32541','WGS_1972_BE_UTM_Zone_41S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32542','WGS_1972_BE_UTM_Zone_42S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32543','WGS_1972_BE_UTM_Zone_43S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32544','WGS_1972_BE_UTM_Zone_44S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32545','WGS_1972_BE_UTM_Zone_45S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32546','WGS_1972_BE_UTM_Zone_46S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32547','WGS_1972_BE_UTM_Zone_47S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32548','WGS_1972_BE_UTM_Zone_48S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32549','WGS_1972_BE_UTM_Zone_49S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32550','WGS_1972_BE_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32551','WGS_1972_BE_UTM_Zone_51S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32552','WGS_1972_BE_UTM_Zone_52S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32553','WGS_1972_BE_UTM_Zone_53S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32554','WGS_1972_BE_UTM_Zone_54S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32555','WGS_1972_BE_UTM_Zone_55S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32556','WGS_1972_BE_UTM_Zone_56S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32557','WGS_1972_BE_UTM_Zone_57S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32558','WGS_1972_BE_UTM_Zone_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32559','WGS_1972_BE_UTM_Zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32560','WGS_1972_BE_UTM_Zone_60S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32601','WGS_1984_UTM_Zone_1N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32602','WGS_1984_UTM_Zone_2N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32603','WGS_1984_UTM_Zone_3N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32604','WGS_1984_UTM_Zone_4N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32605','WGS_1984_UTM_Zone_5N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32606','WGS_1984_UTM_Zone_6N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32607','WGS_1984_UTM_Zone_7N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32608','WGS_1984_UTM_Zone_8N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32609','WGS_1984_UTM_Zone_9N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32610','WGS_1984_UTM_Zone_10N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32611','WGS_1984_UTM_Zone_11N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32612','WGS_1984_UTM_Zone_12N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32613','WGS_1984_UTM_Zone_13N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32614','WGS_1984_UTM_Zone_14N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32615','WGS_1984_UTM_Zone_15N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32616','WGS_1984_UTM_Zone_16N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32617','WGS_1984_UTM_Zone_17N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32618','WGS_1984_UTM_Zone_18N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32619','WGS_1984_UTM_Zone_19N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32620','WGS_1984_UTM_Zone_20N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32621','WGS_1984_UTM_Zone_21N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32622','WGS_1984_UTM_Zone_22N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32623','WGS_1984_UTM_Zone_23N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32624','WGS_1984_UTM_Zone_24N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32625','WGS_1984_UTM_Zone_25N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32626','WGS_1984_UTM_Zone_26N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32627','WGS_1984_UTM_Zone_27N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32628','WGS_1984_UTM_Zone_28N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32629','WGS_1984_UTM_Zone_29N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32630','WGS_1984_UTM_Zone_30N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32631','WGS_1984_UTM_Zone_31N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32632','WGS_1984_UTM_Zone_32N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32633','WGS_1984_UTM_Zone_33N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32634','WGS_1984_UTM_Zone_34N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32635','WGS_1984_UTM_Zone_35N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32636','WGS_1984_UTM_Zone_36N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32637','WGS_1984_UTM_Zone_37N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32638','WGS_1984_UTM_Zone_38N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32639','WGS_1984_UTM_Zone_39N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32640','WGS_1984_UTM_Zone_40N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32641','WGS_1984_UTM_Zone_41N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32642','WGS_1984_UTM_Zone_42N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32643','WGS_1984_UTM_Zone_43N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32644','WGS_1984_UTM_Zone_44N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32645','WGS_1984_UTM_Zone_45N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32646','WGS_1984_UTM_Zone_46N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32647','WGS_1984_UTM_Zone_47N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32648','WGS_1984_UTM_Zone_48N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32649','WGS_1984_UTM_Zone_49N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32650','WGS_1984_UTM_Zone_50N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32651','WGS_1984_UTM_Zone_51N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32652','WGS_1984_UTM_Zone_52N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32653','WGS_1984_UTM_Zone_53N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32654','WGS_1984_UTM_Zone_54N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32655','WGS_1984_UTM_Zone_55N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32656','WGS_1984_UTM_Zone_56N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32657','WGS_1984_UTM_Zone_57N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32658','WGS_1984_UTM_Zone_58N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32659','WGS_1984_UTM_Zone_59N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32660','WGS_1984_UTM_Zone_60N','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32661','UPS_North','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32662','WGS_1984_Plate_Carree','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32664','WGS_1984_BLM_Zone_14N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32665','WGS_1984_BLM_Zone_15N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32666','WGS_1984_BLM_Zone_16N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32667','WGS_1984_BLM_Zone_17N_ftUS','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32701','WGS_1984_UTM_Zone_1S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32702','WGS_1984_UTM_Zone_2S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32703','WGS_1984_UTM_Zone_3S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32704','WGS_1984_UTM_Zone_4S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32705','WGS_1984_UTM_Zone_5S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32706','WGS_1984_UTM_Zone_6S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32707','WGS_1984_UTM_Zone_7S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32708','WGS_1984_UTM_Zone_8S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32709','WGS_1984_UTM_Zone_9S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32710','WGS_1984_UTM_Zone_10S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32711','WGS_1984_UTM_Zone_11S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32712','WGS_1984_UTM_Zone_12S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32713','WGS_1984_UTM_Zone_13S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32714','WGS_1984_UTM_Zone_14S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32715','WGS_1984_UTM_Zone_15S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32716','WGS_1984_UTM_Zone_16S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32717','WGS_1984_UTM_Zone_17S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32718','WGS_1984_UTM_Zone_18S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32719','WGS_1984_UTM_Zone_19S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32720','WGS_1984_UTM_Zone_20S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32721','WGS_1984_UTM_Zone_21S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32722','WGS_1984_UTM_Zone_22S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32723','WGS_1984_UTM_Zone_23S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32724','WGS_1984_UTM_Zone_24S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32725','WGS_1984_UTM_Zone_25S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32726','WGS_1984_UTM_Zone_26S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32727','WGS_1984_UTM_Zone_27S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32728','WGS_1984_UTM_Zone_28S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32729','WGS_1984_UTM_Zone_29S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32730','WGS_1984_UTM_Zone_30S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32731','WGS_1984_UTM_Zone_31S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32732','WGS_1984_UTM_Zone_32S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32733','WGS_1984_UTM_Zone_33S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32734','WGS_1984_UTM_Zone_34S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32735','WGS_1984_UTM_Zone_35S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32736','WGS_1984_UTM_Zone_36S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32737','WGS_1984_UTM_Zone_37S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32738','WGS_1984_UTM_Zone_38S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32739','WGS_1984_UTM_Zone_39S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32740','WGS_1984_UTM_Zone_40S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32741','WGS_1984_UTM_Zone_41S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32742','WGS_1984_UTM_Zone_42S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32743','WGS_1984_UTM_Zone_43S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32744','WGS_1984_UTM_Zone_44S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32745','WGS_1984_UTM_Zone_45S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32746','WGS_1984_UTM_Zone_46S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32747','WGS_1984_UTM_Zone_47S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32748','WGS_1984_UTM_Zone_48S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32749','WGS_1984_UTM_Zone_49S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32750','WGS_1984_UTM_Zone_50S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32751','WGS_1984_UTM_Zone_51S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32752','WGS_1984_UTM_Zone_52S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32753','WGS_1984_UTM_Zone_53S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32754','WGS_1984_UTM_Zone_54S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32755','WGS_1984_UTM_Zone_55S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32756','WGS_1984_UTM_Zone_56S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32757','WGS_1984_UTM_Zone_57S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32758','WGS_1984_UTM_Zone_58S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32759','WGS_1984_UTM_Zone_59S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32760','WGS_1984_UTM_Zone_60S','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32761','UPS_South','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32766','WGS_1984_TM_36_SE','ESRI'); INSERT INTO "projected_crs" VALUES('ESRI','53001','Sphere_Plate_Carree',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Plate_Carree",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Plate_Carree"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53001_USAGE','projected_crs','ESRI','53001','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','53002','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',60.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_53002_USAGE','conversion','ESRI','53002','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53002','Sphere_Equidistant_Cylindrical',NULL,'EPSG','4400','EPSG','4035','ESRI','53002',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53002_USAGE','projected_crs','ESRI','53002','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53003','Sphere_Miller_Cylindrical',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Miller_Cylindrical",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Miller_Cylindrical"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53003_USAGE','projected_crs','ESRI','53003','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','53004','unnamed',NULL,'EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_53004_USAGE','conversion','ESRI','53004','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53004','Sphere_Mercator',NULL,'EPSG','4400','EPSG','4035','ESRI','53004',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53004_USAGE','projected_crs','ESRI','53004','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53008','Sphere_Sinusoidal',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Sinusoidal",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Sinusoidal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53008_USAGE','projected_crs','ESRI','53008','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53009','Sphere_Mollweide',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Mollweide",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mollweide"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53009_USAGE','projected_crs','ESRI','53009','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53010','Sphere_Eckert_VI',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Eckert_VI",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_VI"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53010_USAGE','projected_crs','ESRI','53010','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53011','Sphere_Eckert_V',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Eckert_V",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_V"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53011_USAGE','projected_crs','ESRI','53011','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53012','Sphere_Eckert_IV',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Eckert_IV",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_IV"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53012_USAGE','projected_crs','ESRI','53012','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53013','Sphere_Eckert_III',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Eckert_III",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_III"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53013_USAGE','projected_crs','ESRI','53013','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53014','Sphere_Eckert_II',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Eckert_II",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53014_USAGE','projected_crs','ESRI','53014','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53015','Sphere_Eckert_I',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Eckert_I",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_I"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53015_USAGE','projected_crs','ESRI','53015','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53016','Sphere_Gall_Stereographic',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Gall_Stereographic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gall_Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53016_USAGE','projected_crs','ESRI','53016','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53017','Sphere_Behrmann',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Behrmann",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Behrmann"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53017_USAGE','projected_crs','ESRI','53017','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53018','Sphere_Winkel_I',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Winkel_I",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_I"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.45977625218981],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53018_USAGE','projected_crs','ESRI','53018','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53019','Sphere_Winkel_II',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Winkel_II",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.45977625218981],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53019_USAGE','projected_crs','ESRI','53019','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','53021','unnamed',NULL,'EPSG','9818','American Polyconic','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_53021_USAGE','conversion','ESRI','53021','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53021','Sphere_Polyconic',NULL,'EPSG','4400','EPSG','4035','ESRI','53021',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53021_USAGE','projected_crs','ESRI','53021','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53022','Sphere_Quartic_Authalic',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Quartic_Authalic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Quartic_Authalic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53022_USAGE','projected_crs','ESRI','53022','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53023','Sphere_Loximuthal',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Loximuthal",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Loximuthal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Central_Parallel",40.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53023_USAGE','projected_crs','ESRI','53023','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53024','Sphere_Bonne',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Bonne",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Bonne"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",60.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53024_USAGE','projected_crs','ESRI','53024','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53025','Sphere_Hotine',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Hotine",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Hotine_Oblique_Mercator_Two_Point_Natural_Origin"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Latitude_Of_1st_Point",0.0],PARAMETER["Latitude_Of_2nd_Point",60.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Longitude_Of_1st_Point",0.0],PARAMETER["Longitude_Of_2nd_Point",60.0],PARAMETER["Latitude_Of_Center",40.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53025_USAGE','projected_crs','ESRI','53025','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53026','Sphere_Stereographic',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Stereographic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53026_USAGE','projected_crs','ESRI','53026','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53027','Sphere_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Equidistant_Conic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",60.0],PARAMETER["Standard_Parallel_2",60.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53027_USAGE','projected_crs','ESRI','53027','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','53028','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_53028_USAGE','conversion','ESRI','53028','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53028','Sphere_Cassini',NULL,'EPSG','4400','EPSG','4035','ESRI','53028',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53028_USAGE','projected_crs','ESRI','53028','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53029','Sphere_Van_der_Grinten_I',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Van_der_Grinten_I",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Van_der_Grinten_I"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53029_USAGE','projected_crs','ESRI','53029','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53030','Sphere_Robinson',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Robinson",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Robinson"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53030_USAGE','projected_crs','ESRI','53030','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53031','Sphere_Two_Point_Equidistant',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Two_Point_Equidistant",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Two_Point_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Latitude_Of_1st_Point",0.0],PARAMETER["Latitude_Of_2nd_Point",60.0],PARAMETER["Longitude_Of_1st_Point",0.0],PARAMETER["Longitude_Of_2nd_Point",60.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53031_USAGE','projected_crs','ESRI','53031','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53032','Sphere_Azimuthal_Equidistant',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Azimuthal_Equidistant",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53032_USAGE','projected_crs','ESRI','53032','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53034','Sphere_Cylindrical_Equal_Area',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Cylindrical_Equal_Area",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53034_USAGE','projected_crs','ESRI','53034','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','53035','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_53035_USAGE','conversion','ESRI','53035','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53035','Sphere_Equal_Earth_Greenwich',NULL,'EPSG','4400','ESRI','104047','ESRI','53035',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53035_USAGE','projected_crs','ESRI','53035','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','53036','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_53036_USAGE','conversion','ESRI','53036','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53036','Sphere_Equal_Earth_Americas',NULL,'EPSG','4400','ESRI','104047','ESRI','53036',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53036_USAGE','projected_crs','ESRI','53036','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','53037','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_53037_USAGE','conversion','ESRI','53037','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53037','Sphere_Equal_Earth_Asia_Pacific',NULL,'EPSG','4400','ESRI','104047','ESRI','53037',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53037_USAGE','projected_crs','ESRI','53037','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53042','Sphere_Winkel_Tripel_NGS',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Winkel_Tripel_NGS",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_Tripel"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.467],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53042_USAGE','projected_crs','ESRI','53042','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53043','Sphere_Aitoff',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Aitoff",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Aitoff"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53043_USAGE','projected_crs','ESRI','53043','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53044','Sphere_Hammer_Aitoff',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Hammer_Aitoff",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Hammer_Aitoff"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53044_USAGE','projected_crs','ESRI','53044','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53045','Sphere_Flat_Polar_Quartic',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Flat_Polar_Quartic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Flat_Polar_Quartic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53045_USAGE','projected_crs','ESRI','53045','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53046','Sphere_Craster_Parabolic',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Craster_Parabolic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Craster_Parabolic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53046_USAGE','projected_crs','ESRI','53046','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53048','Sphere_Times',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Times",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Times"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53048_USAGE','projected_crs','ESRI','53048','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53049','Sphere_Vertical_Perspective',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["Sphere_Vertical_Perspective",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Vertical_Near_Side_Perspective"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",0.0],PARAMETER["Latitude_Of_Center",0.0],PARAMETER["Height",35800000.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53049_USAGE','projected_crs','ESRI','53049','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53074','Sphere_Wagner_IV',NULL,NULL,NULL,'EPSG','4047',NULL,NULL,'PROJCS["Sphere_Wagner_IV",GEOGCS["GCS_Sphere_GRS_1980_Authalic",DATUM["D_Sphere_GRS_1980_Authalic",SPHEROID["Sphere_GRS_1980_Authalic",6371007.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Wagner_IV"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53074_USAGE','projected_crs','ESRI','53074','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53075','Sphere_Wagner_V',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Wagner_V",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Wagner_V"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53075_USAGE','projected_crs','ESRI','53075','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53076','Sphere_Wagner_VII',NULL,NULL,NULL,'EPSG','4047',NULL,NULL,'PROJCS["Sphere_Wagner_VII",GEOGCS["GCS_Sphere_GRS_1980_Authalic",DATUM["D_Sphere_GRS_1980_Authalic",SPHEROID["Sphere_GRS_1980_Authalic",6371007.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Wagner_VII"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53076_USAGE','projected_crs','ESRI','53076','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53077','Sphere_Natural_Earth',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Natural_Earth",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Natural_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53077_USAGE','projected_crs','ESRI','53077','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53078','Sphere_Natural_Earth_II',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Natural_Earth_II",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Natural_Earth_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53078_USAGE','projected_crs','ESRI','53078','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53079','Sphere_Patterson',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Patterson",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Patterson"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53079_USAGE','projected_crs','ESRI','53079','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','53080','Sphere_Compact_Miller',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Compact_Miller",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Compact_Miller"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_53080_USAGE','projected_crs','ESRI','53080','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54001','World_Plate_Carree',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Plate_Carree",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Plate_Carree"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54001_USAGE','projected_crs','ESRI','54001','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54002','World_Equidistant_Cylindrical',NULL,'EPSG','4400','EPSG','4326','ESRI','53002',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54002_USAGE','projected_crs','ESRI','54002','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54003','World_Miller_Cylindrical',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Miller_Cylindrical",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Miller_Cylindrical"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54003_USAGE','projected_crs','ESRI','54003','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54004','World_Mercator',NULL,'EPSG','4400','EPSG','4326','ESRI','53004',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54004_USAGE','projected_crs','ESRI','54004','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54008','World_Sinusoidal',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Sinusoidal",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Sinusoidal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54008_USAGE','projected_crs','ESRI','54008','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54009','World_Mollweide',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Mollweide",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mollweide"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54009_USAGE','projected_crs','ESRI','54009','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54010','World_Eckert_VI',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Eckert_VI",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_VI"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54010_USAGE','projected_crs','ESRI','54010','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54011','World_Eckert_V',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Eckert_V",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_V"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54011_USAGE','projected_crs','ESRI','54011','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54012','World_Eckert_IV',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Eckert_IV",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_IV"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54012_USAGE','projected_crs','ESRI','54012','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54013','World_Eckert_III',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Eckert_III",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_III"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54013_USAGE','projected_crs','ESRI','54013','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54014','World_Eckert_II',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Eckert_II",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54014_USAGE','projected_crs','ESRI','54014','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54015','World_Eckert_I',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Eckert_I",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Eckert_I"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54015_USAGE','projected_crs','ESRI','54015','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54016','World_Gall_Stereographic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Gall_Stereographic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gall_Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54016_USAGE','projected_crs','ESRI','54016','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54017','World_Behrmann',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Behrmann",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Behrmann"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54017_USAGE','projected_crs','ESRI','54017','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54018','World_Winkel_I',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Winkel_I",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_I"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.45977625218981],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54018_USAGE','projected_crs','ESRI','54018','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54019','World_Winkel_II',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Winkel_II",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.45977625218981],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54019_USAGE','projected_crs','ESRI','54019','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54021','World_Polyconic',NULL,'EPSG','4400','EPSG','4326','ESRI','53021',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54021_USAGE','projected_crs','ESRI','54021','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54022','World_Quartic_Authalic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Quartic_Authalic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Quartic_Authalic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54022_USAGE','projected_crs','ESRI','54022','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54023','World_Loximuthal',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Loximuthal",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Loximuthal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Central_Parallel",40.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54023_USAGE','projected_crs','ESRI','54023','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54024','World_Bonne',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Bonne",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Bonne"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",60.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54024_USAGE','projected_crs','ESRI','54024','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54025','World_Hotine',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Hotine",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Hotine_Oblique_Mercator_Two_Point_Natural_Origin"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Latitude_Of_1st_Point",0.0],PARAMETER["Latitude_Of_2nd_Point",60.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Longitude_Of_1st_Point",0.0],PARAMETER["Longitude_Of_2nd_Point",60.0],PARAMETER["Latitude_Of_Center",40.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54025_USAGE','projected_crs','ESRI','54025','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54026','World_Stereographic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Stereographic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54026_USAGE','projected_crs','ESRI','54026','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54027','World_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Equidistant_Conic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",60.0],PARAMETER["Standard_Parallel_2",60.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54027_USAGE','projected_crs','ESRI','54027','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54028','World_Cassini',NULL,'EPSG','4400','EPSG','4326','ESRI','53028',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54028_USAGE','projected_crs','ESRI','54028','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54029','World_Van_der_Grinten_I',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Van_der_Grinten_I",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Van_der_Grinten_I"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54029_USAGE','projected_crs','ESRI','54029','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54030','World_Robinson',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Robinson",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Robinson"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54030_USAGE','projected_crs','ESRI','54030','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54031','World_Two_Point_Equidistant',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Two_Point_Equidistant",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Two_Point_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Latitude_Of_1st_Point",0.0],PARAMETER["Latitude_Of_2nd_Point",60.0],PARAMETER["Longitude_Of_1st_Point",0.0],PARAMETER["Longitude_Of_2nd_Point",60.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54031_USAGE','projected_crs','ESRI','54031','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54032','World_Azimuthal_Equidistant',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Azimuthal_Equidistant",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54032_USAGE','projected_crs','ESRI','54032','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54034','World_Cylindrical_Equal_Area',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Cylindrical_Equal_Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54034_USAGE','projected_crs','ESRI','54034','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','54035','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_54035_USAGE','conversion','ESRI','54035','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54035','WGS_1984_Equal_Earth_Greenwich',NULL,'EPSG','4400','EPSG','4326','ESRI','54035',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54035_USAGE','projected_crs','ESRI','54035','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','54036','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_54036_USAGE','conversion','ESRI','54036','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54036','WGS_1984_Equal_Earth_Americas',NULL,'EPSG','4400','EPSG','4326','ESRI','54036',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54036_USAGE','projected_crs','ESRI','54036','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','54037','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_54037_USAGE','conversion','ESRI','54037','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54037','WGS_1984_Equal_Earth_Asia_Pacific',NULL,'EPSG','4400','EPSG','4326','ESRI','54037',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54037_USAGE','projected_crs','ESRI','54037','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54042','World_Winkel_Tripel_NGS',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Winkel_Tripel_NGS",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_Tripel"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.467],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54042_USAGE','projected_crs','ESRI','54042','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54043','World_Aitoff',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Aitoff",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Aitoff"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54043_USAGE','projected_crs','ESRI','54043','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54044','World_Hammer_Aitoff',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Hammer_Aitoff",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Hammer_Aitoff"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54044_USAGE','projected_crs','ESRI','54044','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54045','World_Flat_Polar_Quartic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Flat_Polar_Quartic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Flat_Polar_Quartic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54045_USAGE','projected_crs','ESRI','54045','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54046','World_Craster_Parabolic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Craster_Parabolic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Craster_Parabolic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54046_USAGE','projected_crs','ESRI','54046','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54048','World_Times',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Times",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Times"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54048_USAGE','projected_crs','ESRI','54048','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54049','World_Vertical_Perspective',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Vertical_Perspective",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Vertical_Near_Side_Perspective"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",0.0],PARAMETER["Latitude_Of_Center",0.0],PARAMETER["Height",35800000.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54049_USAGE','projected_crs','ESRI','54049','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54050','World_Fuller',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Fuller",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Fuller"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Option",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54050_USAGE','projected_crs','ESRI','54050','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54051','World_Cube',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Cube",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Cube"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Option",1.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54051_USAGE','projected_crs','ESRI','54051','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54052','World_Goode_Homolosine_Land',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Goode_Homolosine_Land",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Goode_Homolosine"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Option",1.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54052_USAGE','projected_crs','ESRI','54052','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54053','World_Goode_Homolosine_Ocean',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Goode_Homolosine_Ocean",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Goode_Homolosine"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-160.0],PARAMETER["Option",2.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54053_USAGE','projected_crs','ESRI','54053','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54074','World_Wagner_IV',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Wagner_IV",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Wagner_IV"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54074_USAGE','projected_crs','ESRI','54074','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54075','World_Wagner_V',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Wagner_V",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Wagner_V"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54075_USAGE','projected_crs','ESRI','54075','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54076','World_Wagner_VII',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Wagner_VII",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Wagner_VII"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54076_USAGE','projected_crs','ESRI','54076','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54077','World_Natural_Earth',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Natural_Earth",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Natural_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54077_USAGE','projected_crs','ESRI','54077','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54078','World_Natural_Earth_II',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Natural_Earth_II",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Natural_Earth_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54078_USAGE','projected_crs','ESRI','54078','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54079','World_Patterson',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Patterson",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Patterson"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54079_USAGE','projected_crs','ESRI','54079','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54080','World_Compact_Miller',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Compact_Miller",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Compact_Miller"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54080_USAGE','projected_crs','ESRI','54080','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54090','WGS_1984_Peirce_quincuncial_North_Pole_square',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Peirce_quincuncial_North_Pole_square",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Peirce_Quincuncial"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",90.0],PARAMETER["Option",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54090_USAGE','projected_crs','ESRI','54090','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54091','WGS_1984_Peirce_quincuncial_North_Pole_diamond',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Peirce_quincuncial_North_Pole_diamond",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Peirce_Quincuncial"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",90.0],PARAMETER["Option",1.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54091_USAGE','projected_crs','ESRI','54091','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54098','WGS_1984_Adams_Square_II',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Adams_Square_II",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Adams_Square_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Azimuth",0.0],PARAMETER["Longitude_Of_Center",0.0],PARAMETER["Latitude_Of_Center",0.0],PARAMETER["XY_Plane_Rotation",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54098_USAGE','projected_crs','ESRI','54098','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54099','WGS_1984_Spilhaus_Ocean_Map_in_Square',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Spilhaus_Ocean_Map_in_Square",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Adams_Square_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Azimuth",40.17823482],PARAMETER["Longitude_Of_Center",66.94970198],PARAMETER["Latitude_Of_Center",-49.56371678],PARAMETER["XY_Plane_Rotation",45.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54099_USAGE','projected_crs','ESRI','54099','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54100','WGS_1984_Tobler_Cylindrical_I',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Tobler_Cylindrical_I",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Tobler_Cylindrical_I"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54100_USAGE','projected_crs','ESRI','54100','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','54101','WGS_1984_Tobler_Cylindrical_II',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Tobler_Cylindrical_II",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Tobler_Cylindrical_II"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_54101_USAGE','projected_crs','ESRI','54101','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','65061','unnamed',NULL,'EPSG','9818','American Polyconic','EPSG','8801','Latitude of natural origin',13.47246635277778,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.7487507055556,'EPSG','9102','EPSG','8806','False easting',164041.6666666667,'EPSG','9003','EPSG','8807','False northing',164041.6666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_65061_USAGE','conversion','ESRI','65061','EPSG','1110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','65061','NAD_1927_StatePlane_Guam_FIPS_5400',NULL,'EPSG','4497','EPSG','4267','ESRI','65061',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_65061_USAGE','projected_crs','ESRI','65061','EPSG','1110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','65062','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',-14.26666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-170.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',312234.65,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_65062_USAGE','conversion','ESRI','65062','EPSG','1027','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','65062','American_Samoa_1962_StatePlane_American_Samoa_FIPS_5300',NULL,'EPSG','4497','EPSG','4169','ESRI','65062',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_65062_USAGE','projected_crs','ESRI','65062','EPSG','1027','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','65161','unnamed',NULL,'EPSG','9818','American Polyconic','EPSG','8801','Latitude of natural origin',13.47246635277778,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.7487507055556,'EPSG','9102','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_65161_USAGE','conversion','ESRI','65161','EPSG','1110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','65161','NAD_1983_StatePlane_Guam_FIPS_5400',NULL,'EPSG','4400','EPSG','4269','ESRI','65161',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_65161_USAGE','projected_crs','ESRI','65161','EPSG','1110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','65163','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.08333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_65163_USAGE','conversion','ESRI','65163','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','65163','NAD_1983_StatePlane_Kentucky_FIPS_1600',NULL,'EPSG','4400','EPSG','4269','ESRI','65163',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_65163_USAGE','projected_crs','ESRI','65163','EPSG','1386','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102001','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',50.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',70.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102001_USAGE','conversion','ESRI','102001','EPSG','1061','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102001','Canada_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4269','ESRI','102001',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102001_USAGE','projected_crs','ESRI','102001','EPSG','1061','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102002','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',50.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',70.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102002_USAGE','conversion','ESRI','102002','EPSG','1061','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102002','Canada_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4269','ESRI','102002',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102002_USAGE','projected_crs','ESRI','102002','EPSG','1061','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102003','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',37.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102003_USAGE','conversion','ESRI','102003','EPSG','1323','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102003','USA_Contiguous_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4269','ESRI','102003',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102003_USAGE','projected_crs','ESRI','102003','EPSG','1323','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102004','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102004_USAGE','conversion','ESRI','102004','EPSG','1323','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102004','USA_Contiguous_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4269','ESRI','102004',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102004_USAGE','projected_crs','ESRI','102004','EPSG','1323','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102005','USA_Contiguous_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4269',NULL,NULL,'PROJCS["USA_Contiguous_Equidistant_Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-96.0],PARAMETER["Standard_Parallel_1",33.0],PARAMETER["Standard_Parallel_2",45.0],PARAMETER["Latitude_Of_Origin",39.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102005_USAGE','projected_crs','ESRI','102005','EPSG','1323','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102006','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',50.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-154.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',55.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102006_USAGE','conversion','ESRI','102006','EPSG','1330','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102006','NAD_1983_Alaska_Albers',NULL,'EPSG','4400','EPSG','4269','ESRI','102006',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102006_USAGE','projected_crs','ESRI','102006','EPSG','1330','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102007','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',13.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-157.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',8.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',18.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102007_USAGE','conversion','ESRI','102007','EPSG','1334','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102007','Hawaii_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4269','ESRI','102007',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102007_USAGE','projected_crs','ESRI','102007','EPSG','1334','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102008','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',20.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',60.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102008_USAGE','conversion','ESRI','102008','EPSG','1325','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102008','North_America_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4269','ESRI','102008',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102008_USAGE','projected_crs','ESRI','102008','EPSG','1325','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102009','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',20.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',60.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102009_USAGE','conversion','ESRI','102009','EPSG','1325','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102009','North_America_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4269','ESRI','102009',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102009_USAGE','projected_crs','ESRI','102009','EPSG','1325','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102010','North_America_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4269',NULL,NULL,'PROJCS["North_America_Equidistant_Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-96.0],PARAMETER["Standard_Parallel_1",20.0],PARAMETER["Standard_Parallel_2",60.0],PARAMETER["Latitude_Of_Origin",40.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102010_USAGE','projected_crs','ESRI','102010','EPSG','1325','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','6','Africa','Africa',-35.0,39.0,-25.0,55.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102011','Africa_Sinusoidal',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["Africa_Sinusoidal",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Sinusoidal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",15.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102011_USAGE','projected_crs','ESRI','102011','ESRI','6','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','7','Asia','Asia',-10.0,85.0,25.0,-175.0,0); INSERT INTO "conversion" VALUES('ESRI','102012','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',105.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',30.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',62.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102012_USAGE','conversion','ESRI','102012','ESRI','7','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102012','Asia_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4326','ESRI','102012',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102012_USAGE','projected_crs','ESRI','102012','ESRI','7','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102013','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',30.0,'EPSG','9102','EPSG','8822','Longitude of false origin',10.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',62.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102013_USAGE','conversion','ESRI','102013','ESRI','3','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102013','Europe_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4230','ESRI','102013',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102013_USAGE','projected_crs','ESRI','102013','ESRI','3','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102014','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.0,'EPSG','9102','EPSG','8822','Longitude of false origin',10.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',62.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102014_USAGE','conversion','ESRI','102014','ESRI','3','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102014','Europe_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4230','ESRI','102014',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102014_USAGE','projected_crs','ESRI','102014','ESRI','3','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102015','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-32.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-60.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-5.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-42.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102015_USAGE','conversion','ESRI','102015','EPSG','1358','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102015','South_America_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4618','ESRI','102015',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102015_USAGE','projected_crs','ESRI','102015','EPSG','1358','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102016','North_Pole_Azimuthal_Equidistant',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["North_Pole_Azimuthal_Equidistant",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102016_USAGE','projected_crs','ESRI','102016','EPSG','3475','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102017','North_Pole_Lambert_Azimuthal_Equal_Area',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["North_Pole_Lambert_Azimuthal_Equal_Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102017_USAGE','projected_crs','ESRI','102017','EPSG','3475','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102018','North_Pole_Stereographic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["North_Pole_Stereographic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102018_USAGE','projected_crs','ESRI','102018','EPSG','3475','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102019','South_Pole_Azimuthal_Equidistant',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["South_Pole_Azimuthal_Equidistant",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102019_USAGE','projected_crs','ESRI','102019','EPSG','3474','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102020','South_Pole_Lambert_Azimuthal_Equal_Area',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["South_Pole_Lambert_Azimuthal_Equal_Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102020_USAGE','projected_crs','ESRI','102020','EPSG','3474','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102021','South_Pole_Stereographic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["South_Pole_Stereographic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102021_USAGE','projected_crs','ESRI','102021','EPSG','3474','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102022','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',25.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',20.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-23.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102022_USAGE','conversion','ESRI','102022','ESRI','6','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102022','Africa_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4326','ESRI','102022',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102022_USAGE','projected_crs','ESRI','102022','ESRI','6','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102023','Africa_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["Africa_Equidistant_Conic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",25.0],PARAMETER["Standard_Parallel_1",20.0],PARAMETER["Standard_Parallel_2",-23.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102023_USAGE','projected_crs','ESRI','102023','ESRI','6','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102024','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',25.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',20.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-23.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102024_USAGE','conversion','ESRI','102024','ESRI','6','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102024','Africa_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4326','ESRI','102024',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102024_USAGE','projected_crs','ESRI','102024','ESRI','6','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','8','Asia - North','Asia - North',10.0,85.0,25.0,-175.0,0); INSERT INTO "conversion" VALUES('ESRI','102025','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',30.0,'EPSG','9102','EPSG','8822','Longitude of false origin',95.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',15.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102025_USAGE','conversion','ESRI','102025','ESRI','8','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102025','Asia_North_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4326','ESRI','102025',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102025_USAGE','projected_crs','ESRI','102025','ESRI','8','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102026','Asia_North_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["Asia_North_Equidistant_Conic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",95.0],PARAMETER["Standard_Parallel_1",15.0],PARAMETER["Standard_Parallel_2",65.0],PARAMETER["Latitude_Of_Origin",30.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102026_USAGE','projected_crs','ESRI','102026','ESRI','8','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102027','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.0,'EPSG','9102','EPSG','8822','Longitude of false origin',95.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',15.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102027_USAGE','conversion','ESRI','102027','ESRI','8','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102027','Asia_North_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4326','ESRI','102027',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102027_USAGE','projected_crs','ESRI','102027','ESRI','8','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','9','Asia - South','Asia - South',-10.0,30.0,25.0,165.0,0); INSERT INTO "conversion" VALUES('ESRI','102028','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-15.0,'EPSG','9102','EPSG','8822','Longitude of false origin',125.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',7.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-32.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102028_USAGE','conversion','ESRI','102028','ESRI','9','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102028','Asia_South_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4326','ESRI','102028',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102028_USAGE','projected_crs','ESRI','102028','ESRI','9','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102029','Asia_South_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["Asia_South_Equidistant_Conic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",125.0],PARAMETER["Standard_Parallel_1",7.0],PARAMETER["Standard_Parallel_2",-32.0],PARAMETER["Latitude_Of_Origin",-15.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102029_USAGE','projected_crs','ESRI','102029','ESRI','9','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102030','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-15.0,'EPSG','9102','EPSG','8822','Longitude of false origin',125.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',7.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-32.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102030_USAGE','conversion','ESRI','102030','ESRI','9','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102030','Asia_South_Lambert_Conformal_Conic',NULL,'EPSG','4400','EPSG','4326','ESRI','102030',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102030_USAGE','projected_crs','ESRI','102030','ESRI','9','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102031','Europe_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4230',NULL,NULL,'PROJCS["Europe_Equidistant_Conic",GEOGCS["GCS_European_1950",DATUM["D_European_1950",SPHEROID["International_1924",6378388.0,297.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",10.0],PARAMETER["Standard_Parallel_1",43.0],PARAMETER["Standard_Parallel_2",62.0],PARAMETER["Latitude_Of_Origin",30.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102031_USAGE','projected_crs','ESRI','102031','ESRI','3','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102032','South_America_Equidistant_Conic',NULL,NULL,NULL,'EPSG','4618',NULL,NULL,'PROJCS["South_America_Equidistant_Conic",GEOGCS["GCS_South_American_1969",DATUM["D_South_American_1969",SPHEROID["GRS_1967_Truncated",6378160.0,298.25]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-60.0],PARAMETER["Standard_Parallel_1",-5.0],PARAMETER["Standard_Parallel_2",-42.0],PARAMETER["Latitude_Of_Origin",-32.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102032_USAGE','projected_crs','ESRI','102032','EPSG','1358','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102033','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-32.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-60.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-5.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-42.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102033_USAGE','conversion','ESRI','102033','EPSG','1358','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102033','South_America_Albers_Equal_Area_Conic',NULL,'EPSG','4400','EPSG','4618','ESRI','102033',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102033_USAGE','projected_crs','ESRI','102033','EPSG','1358','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102034','North_Pole_Gnomonic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["North_Pole_Gnomonic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gnomonic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",0.0],PARAMETER["Latitude_Of_Center",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102034_USAGE','projected_crs','ESRI','102034','EPSG','3475','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102035','North_Pole_Orthographic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["North_Pole_Orthographic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Orthographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",0.0],PARAMETER["Latitude_Of_Center",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102035_USAGE','projected_crs','ESRI','102035','EPSG','3475','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102036','South_Pole_Gnomonic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["South_Pole_Gnomonic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gnomonic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",0.0],PARAMETER["Latitude_Of_Center",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102036_USAGE','projected_crs','ESRI','102036','EPSG','3474','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102037','South_Pole_Orthographic',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["South_Pole_Orthographic",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Orthographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",0.0],PARAMETER["Latitude_Of_Center",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102037_USAGE','projected_crs','ESRI','102037','EPSG','3474','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102038','The_World_From_Space',NULL,NULL,NULL,'ESRI','37008',NULL,NULL,'PROJCS["The_World_From_Space",GEOGCS["GCS_Sphere_ARC_INFO",DATUM["D_Sphere_ARC_INFO",SPHEROID["Sphere_ARC_INFO",6370997.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Orthographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",-72.5333333334],PARAMETER["Latitude_Of_Center",42.5333333333],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102038_USAGE','projected_crs','ESRI','102038','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102039','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',23.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102039_USAGE','conversion','ESRI','102039','EPSG','1323','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102039','USA_Contiguous_Albers_Equal_Area_Conic_USGS_version',NULL,'EPSG','4400','EPSG','4269','ESRI','102039',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102039_USAGE','projected_crs','ESRI','102039','EPSG','1323','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102040','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102040_USAGE','conversion','ESRI','102040','EPSG','3266','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102040','Korean_1985_Korea_Unified_Coordinate_System',NULL,'EPSG','4400','EPSG','4162','ESRI','102040',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102040_USAGE','projected_crs','ESRI','102040','EPSG','3266','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','10','USA - Washington - Bellevue','USA - Washington - Bellevue',47.5,47.69,-122.26,-122.06,0); INSERT INTO "conversion" VALUES('ESRI','102041','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.8333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.896666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.24,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102041_USAGE','conversion','ESRI','102041','ESRI','10','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102041','COB_NAD83_2007',NULL,'EPSG','4497','EPSG','4152','ESRI','102041',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102041_USAGE','projected_crs','ESRI','102041','ESRI','10','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','11','USA - USFS - Eastern Region','USA - USFS - Eastern Region',35.9,49.5,-97.3,-66.8,0); INSERT INTO "conversion" VALUES('ESRI','102042','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',35.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.25,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102042_USAGE','conversion','ESRI','102042','ESRI','11','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102042','NAD_1983_USFS_R9_Albers',NULL,'EPSG','4400','EPSG','4269','ESRI','102042',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102042_USAGE','projected_crs','ESRI','102042','ESRI','11','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102043','NAD_1983_CORS96_UTM_Zone_20N',NULL,'EPSG','4400','EPSG','6783','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102043_USAGE','projected_crs','ESRI','102043','EPSG','2251','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102044','NAD_1983_NSRS2007_UTM_Zone_20N',NULL,'EPSG','4400','EPSG','4759','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102044_USAGE','projected_crs','ESRI','102044','EPSG','2251','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102045','NAD_1983_2011_UTM_Zone_20N',NULL,'EPSG','4400','EPSG','6318','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102045_USAGE','projected_crs','ESRI','102045','EPSG','2251','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102046','NAD_1983_2011_UTM_Zone_59N',NULL,'EPSG','4400','EPSG','6318','EPSG','16059',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102046_USAGE','projected_crs','ESRI','102046','EPSG','3372','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102047','NAD_1983_2011_UTM_Zone_60N',NULL,'EPSG','4400','EPSG','6318','EPSG','16060',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102047_USAGE','projected_crs','ESRI','102047','EPSG','3373','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102048','NAD_1983_2011_UTM_Zone_1N',NULL,'EPSG','4400','EPSG','6318','EPSG','16001',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102048_USAGE','projected_crs','ESRI','102048','EPSG','3374','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102049','NAD_1983_2011_UTM_Zone_2N',NULL,'EPSG','4400','EPSG','6318','EPSG','16002',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102049_USAGE','projected_crs','ESRI','102049','EPSG','3375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102050','NAD_1983_2011_UTM_Zone_3N',NULL,'EPSG','4400','EPSG','6318','EPSG','16003',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102050_USAGE','projected_crs','ESRI','102050','EPSG','2133','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102051','NAD_1983_2011_UTM_Zone_4N',NULL,'EPSG','4400','EPSG','6318','EPSG','16004',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102051_USAGE','projected_crs','ESRI','102051','EPSG','2134','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102052','NAD_1983_2011_UTM_Zone_5N',NULL,'EPSG','4400','EPSG','6318','EPSG','16005',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102052_USAGE','projected_crs','ESRI','102052','EPSG','2135','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102053','NAD_1983_2011_UTM_Zone_6N',NULL,'EPSG','4400','EPSG','6318','EPSG','16006',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102053_USAGE','projected_crs','ESRI','102053','EPSG','2136','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102054','NAD_1983_2011_UTM_Zone_7N',NULL,'EPSG','4400','EPSG','6318','EPSG','16007',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102054_USAGE','projected_crs','ESRI','102054','EPSG','3494','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102055','NAD_1983_2011_UTM_Zone_8N',NULL,'EPSG','4400','EPSG','6318','EPSG','16008',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102055_USAGE','projected_crs','ESRI','102055','EPSG','3495','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102056','NAD_1983_2011_UTM_Zone_9N',NULL,'EPSG','4400','EPSG','6318','EPSG','16009',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102056_USAGE','projected_crs','ESRI','102056','EPSG','3496','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102057','NAD_1983_2011_UTM_Zone_10N',NULL,'EPSG','4400','EPSG','6318','EPSG','16010',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102057_USAGE','projected_crs','ESRI','102057','EPSG','3497','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102058','NAD_1983_2011_UTM_Zone_11N',NULL,'EPSG','4400','EPSG','6318','EPSG','16011',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102058_USAGE','projected_crs','ESRI','102058','EPSG','3498','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102059','NAD_1983_2011_UTM_Zone_12N',NULL,'EPSG','4400','EPSG','6318','EPSG','16012',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102059_USAGE','projected_crs','ESRI','102059','EPSG','3499','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102060','D48_Slovenia_TM',NULL,'EPSG','4400','ESRI','104131','EPSG','19845',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102060_USAGE','projected_crs','ESRI','102060','EPSG','1212','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102061','Everest_Modified_1969_RSO_Malaya_Meters',NULL,NULL,NULL,'ESRI','37006',NULL,NULL,'PROJCS["Everest_Modified_1969_RSO_Malaya_Meters",GEOGCS["GCS_Everest_Modified_1969",DATUM["D_Everest_Modified_1969",SPHEROID["Everest_Modified_1969",6377295.664,300.8017]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Rectified_Skew_Orthomorphic_Natural_Origin"],PARAMETER["False_Easting",804670.24],PARAMETER["False_Northing",0.0],PARAMETER["Scale_Factor",0.99984],PARAMETER["Azimuth",-36.97420943711801],PARAMETER["Longitude_Of_Center",102.25],PARAMETER["Latitude_Of_Center",4.0],PARAMETER["XY_Plane_Rotation",-36.86989764584402],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102061_USAGE','projected_crs','ESRI','102061','EPSG','1690','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102062','Kertau_RSO_Malaya_Meters',NULL,NULL,NULL,'EPSG','4245',NULL,NULL,'PROJCS["Kertau_RSO_Malaya_Meters",GEOGCS["GCS_Kertau",DATUM["D_Kertau",SPHEROID["Everest_1830_Modified",6377304.063,300.8017]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Rectified_Skew_Orthomorphic_Natural_Origin"],PARAMETER["False_Easting",804671.299775],PARAMETER["False_Northing",0.0],PARAMETER["Scale_Factor",0.99984],PARAMETER["Azimuth",-36.97420943711801],PARAMETER["Longitude_Of_Center",102.25],PARAMETER["Latitude_Of_Center",4.0],PARAMETER["XY_Plane_Rotation",-36.86989764584402],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102062_USAGE','projected_crs','ESRI','102062','EPSG','1690','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102063','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',7.000480277777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',80.77171111111112,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',160933.56048,'EPSG','9001','EPSG','8807','False northing',160933.56048,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102063_USAGE','conversion','ESRI','102063','EPSG','3310','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102063','Kandawala_Ceylon_Belt_Meters',NULL,'EPSG','4400','EPSG','4244','ESRI','102063',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102063_USAGE','projected_crs','ESRI','102063','EPSG','3310','EPSG','1024'); INSERT INTO "coordinate_system" VALUES('ESRI','Yard_Indian_1937','Cartesian',2); INSERT INTO "axis" VALUES('ESRI','1','Easting','E','east','ESRI','Yard_Indian_1937',1,'EPSG','9085'); INSERT INTO "axis" VALUES('ESRI','2','Northing','N','north','ESRI','Yard_Indian_1937',2,'EPSG','9085'); INSERT INTO "conversion" VALUES('ESRI','102064','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',7.000480277777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',80.77171111111112,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',176000.0,'EPSG','9085','EPSG','8807','False northing',176000.0,'EPSG','9085',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102064_USAGE','conversion','ESRI','102064','EPSG','3310','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102064','Kandawala_Ceylon_Belt_Indian_Yards_1937',NULL,'ESRI','Yard_Indian_1937','EPSG','4244','ESRI','102064',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102064_USAGE','projected_crs','ESRI','102064','EPSG','3310','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102065','S-JTSK_Krovak',NULL,NULL,NULL,'EPSG','4156',NULL,NULL,'PROJCS["S-JTSK_Krovak",GEOGCS["GCS_S_JTSK",DATUM["D_S_JTSK",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Krovak"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Pseudo_Standard_Parallel_1",78.5],PARAMETER["Scale_Factor",0.9999],PARAMETER["Azimuth",30.28813975277778],PARAMETER["Longitude_Of_Center",24.83333333333333],PARAMETER["Latitude_Of_Center",49.5],PARAMETER["X_Scale",1.0],PARAMETER["Y_Scale",1.0],PARAMETER["XY_Plane_Rotation",0.0],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102065_USAGE','projected_crs','ESRI','102065','EPSG','1306','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102066','S-JTSK_Ferro_Krovak_East_North',NULL,NULL,NULL,'EPSG','4818',NULL,NULL,'PROJCS["S-JTSK_Ferro_Krovak_East_North",GEOGCS["GCS_S_JTSK_Ferro",DATUM["D_S_JTSK",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Ferro",-17.66666666666667],UNIT["Degree",0.0174532925199433]],PROJECTION["Krovak"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Pseudo_Standard_Parallel_1",78.5],PARAMETER["Scale_Factor",0.9999],PARAMETER["Azimuth",30.28813975277778],PARAMETER["Longitude_Of_Center",42.5],PARAMETER["Latitude_Of_Center",49.5],PARAMETER["X_Scale",-1.0],PARAMETER["Y_Scale",1.0],PARAMETER["XY_Plane_Rotation",90.0],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102066_USAGE','projected_crs','ESRI','102066','EPSG','1306','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102067','S-JTSK_Krovak_East_North',NULL,NULL,NULL,'EPSG','4156',NULL,NULL,'PROJCS["S-JTSK_Krovak_East_North",GEOGCS["GCS_S_JTSK",DATUM["D_S_JTSK",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Krovak"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Pseudo_Standard_Parallel_1",78.5],PARAMETER["Scale_Factor",0.9999],PARAMETER["Azimuth",30.28813975277778],PARAMETER["Longitude_Of_Center",24.83333333333333],PARAMETER["Latitude_Of_Center",49.5],PARAMETER["X_Scale",-1.0],PARAMETER["Y_Scale",1.0],PARAMETER["XY_Plane_Rotation",90.0],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102067_USAGE','projected_crs','ESRI','102067','EPSG','1306','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102068','EMEP_50_Kilometer_Grid',NULL,NULL,NULL,'ESRI','104128',NULL,NULL,'PROJCS["EMEP_50_Kilometer_Grid",GEOGCS["GCS_Sphere_EMEP",DATUM["D_Sphere_EMEP",SPHEROID["Sphere_EMEP",6370000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic_North_Pole"],PARAMETER["False_Easting",8.0],PARAMETER["False_Northing",110.0],PARAMETER["Central_Meridian",-32.0],PARAMETER["Standard_Parallel_1",60.0],UNIT["50_Kilometers",50000.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102068_USAGE','projected_crs','ESRI','102068','ESRI','3','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102069','EMEP_150_Kilometer_Grid',NULL,NULL,NULL,'ESRI','104128',NULL,NULL,'PROJCS["EMEP_150_Kilometer_Grid",GEOGCS["GCS_Sphere_EMEP",DATUM["D_Sphere_EMEP",SPHEROID["Sphere_EMEP",6370000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic_North_Pole"],PARAMETER["False_Easting",3.0],PARAMETER["False_Northing",37.0],PARAMETER["Central_Meridian",-32.0],PARAMETER["Standard_Parallel_1",60.0],UNIT["150_Kilometers",150000.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102069_USAGE','projected_crs','ESRI','102069','ESRI','3','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102070','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.416666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',47000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102070_USAGE','conversion','ESRI','102070','EPSG','2989','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102070','Guernsey_Grid',NULL,'EPSG','4400','EPSG','4326','ESRI','102070',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102070_USAGE','projected_crs','ESRI','102070','EPSG','2989','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102071','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',149.0092948333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000086,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',4510193.4939,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102071_USAGE','conversion','ESRI','102071','EPSG','2283','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102071','AGD_1966_ACT_Grid_AGC_Zone',NULL,'EPSG','4400','EPSG','4202','ESRI','102071',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102071_USAGE','projected_crs','ESRI','102071','EPSG','2283','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','12','Australia - New South Wales - 140~E to 142~E (ISG 54/2)','Australia - New South Wales - 140~E to 142~E (ISG 54/2)',-46.63,-28.15,140.0,142.0,0); INSERT INTO "conversion" VALUES('ESRI','102072','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102072_USAGE','conversion','ESRI','102072','ESRI','12','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102072','AGD_1966_ISG_54_2',NULL,'EPSG','4400','EPSG','4202','ESRI','102072',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102072_USAGE','projected_crs','ESRI','102072','ESRI','12','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','13','Australia - New South Wales - 142~E to 144~E (ISG 54/3)','Australia - New South Wales - 142~E to 144~E (ISG 54/3)',-46.63,-28.15,142.0,144.0,0); INSERT INTO "conversion" VALUES('ESRI','102073','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',143.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102073_USAGE','conversion','ESRI','102073','ESRI','13','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102073','AGD_1966_ISG_54_3',NULL,'EPSG','4400','EPSG','4202','ESRI','102073',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102073_USAGE','projected_crs','ESRI','102073','ESRI','13','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','14','Australia - New South Wales - 144~E to 146~E (ISG 55/1)','Australia - New South Wales - 144~E to 146~E (ISG 55/1)',-47.2,-28.15,144.0,146.0,0); INSERT INTO "conversion" VALUES('ESRI','102074','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',145.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102074_USAGE','conversion','ESRI','102074','ESRI','14','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102074','AGD_1966_ISG_55_1',NULL,'EPSG','4400','EPSG','4202','ESRI','102074',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102074_USAGE','projected_crs','ESRI','102074','ESRI','14','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','15','Australia - New South Wales - 146~E to 148~E (ISG 55/2)','Australia - New South Wales - 146~E to 148~E (ISG 55/2)',-47.2,-28.15,146.0,148.0,0); INSERT INTO "conversion" VALUES('ESRI','102075','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102075_USAGE','conversion','ESRI','102075','ESRI','15','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102075','AGD_1966_ISG_55_2',NULL,'EPSG','4400','EPSG','4202','ESRI','102075',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102075_USAGE','projected_crs','ESRI','102075','ESRI','15','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','16','Australia - New South Wales - 148~E to 150~E (ISG 55/3)','Australia - New South Wales - 148~E to 150~E (ISG 55/3)',-47.2,-28.15,148.0,150.0,0); INSERT INTO "conversion" VALUES('ESRI','102076','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',149.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102076_USAGE','conversion','ESRI','102076','ESRI','16','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102076','AGD_1966_ISG_55_3',NULL,'EPSG','4400','EPSG','4202','ESRI','102076',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102076_USAGE','projected_crs','ESRI','102076','ESRI','16','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','17','Australia - New South Wales - 150~E to 152~E (ISG 56/1)','Australia - New South Wales - 150~E to 152~E (ISG 56/1)',-46.44,-28.15,150.0,152.0,0); INSERT INTO "conversion" VALUES('ESRI','102077','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',151.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102077_USAGE','conversion','ESRI','102077','ESRI','17','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102077','AGD_1966_ISG_56_1',NULL,'EPSG','4400','EPSG','4202','ESRI','102077',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102077_USAGE','projected_crs','ESRI','102077','ESRI','17','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','18','Australia - New South Wales - 152~E to 154~E (ISG 56/2)','Australia - New South Wales - 152~E to 154~E (ISG 56/2)',-46.44,-28.15,152.0,154.0,0); INSERT INTO "conversion" VALUES('ESRI','102078','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102078_USAGE','conversion','ESRI','102078','ESRI','18','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102078','AGD_1966_ISG_56_2',NULL,'EPSG','4400','EPSG','4202','ESRI','102078',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102078_USAGE','projected_crs','ESRI','102078','ESRI','18','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','19','Australia - New South Wales - 154~E to 156~E (ISG 56/3)','Australia - New South Wales - 154~E to 156~E (ISG 56/3)',-46.44,-28.15,154.0,156.0,0); INSERT INTO "conversion" VALUES('ESRI','102079','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',155.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102079_USAGE','conversion','ESRI','102079','ESRI','19','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102079','AGD_1966_ISG_56_3',NULL,'EPSG','4400','EPSG','4202','ESRI','102079',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102079_USAGE','projected_crs','ESRI','102079','ESRI','19','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102080','KGD2002_Unified_Coordinate_System',NULL,'EPSG','4400','EPSG','4737','ESRI','102040',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102080_USAGE','projected_crs','ESRI','102080','EPSG','1135','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102081','KGD2002_West_Belt_2010',NULL,'EPSG','4400','EPSG','4737','EPSG','5101',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102081_USAGE','projected_crs','ESRI','102081','EPSG','1498','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102082','KGD2002_Central_Belt_2010',NULL,'EPSG','4400','EPSG','4737','EPSG','5102',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102082_USAGE','projected_crs','ESRI','102082','EPSG','1497','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102083','KGD2002_East_Belt_2010',NULL,'EPSG','4400','EPSG','4737','EPSG','5103',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102083_USAGE','projected_crs','ESRI','102083','EPSG','1496','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102084','KGD2002_East_Sea_Belt_2010',NULL,'EPSG','4400','EPSG','4737','EPSG','5104',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102084_USAGE','projected_crs','ESRI','102084','EPSG','3720','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102085','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',125.0028902777778,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102085_USAGE','conversion','ESRI','102085','EPSG','1498','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102085','Korean_1985_Modified_Korea_West_Belt',NULL,'EPSG','4400','EPSG','4162','ESRI','102085',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102085_USAGE','projected_crs','ESRI','102085','EPSG','1498','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102086','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.0028902777778,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102086_USAGE','conversion','ESRI','102086','EPSG','3730','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102086','Korean_1985_Modified_Korea_Central_Belt',NULL,'EPSG','4400','EPSG','4162','ESRI','102086',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102086_USAGE','projected_crs','ESRI','102086','EPSG','3730','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102087','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.0028902777778,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',550000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102087_USAGE','conversion','ESRI','102087','EPSG','3721','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102087','Korean_1985_Modified_Korea_Central_Belt_Jeju',NULL,'EPSG','4400','EPSG','4162','ESRI','102087',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102087_USAGE','projected_crs','ESRI','102087','EPSG','3721','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102088','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.0028902777778,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102088_USAGE','conversion','ESRI','102088','EPSG','1496','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102088','Korean_1985_Modified_Korea_East_Belt',NULL,'EPSG','4400','EPSG','4162','ESRI','102088',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102088_USAGE','projected_crs','ESRI','102088','EPSG','1496','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102089','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',131.0028902777778,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102089_USAGE','conversion','ESRI','102089','EPSG','3720','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102089','Korean_1985_Modified_Korea_East_Sea_Belt',NULL,'EPSG','4400','EPSG','4162','ESRI','102089',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102089_USAGE','projected_crs','ESRI','102089','EPSG','3720','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102090','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-64.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',550000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102090_USAGE','conversion','ESRI','102090','EPSG','1047','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102090','Bermuda_2000_National_Grid',NULL,'EPSG','4400','EPSG','4762','ESRI','102090',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102090_USAGE','projected_crs','ESRI','102090','EPSG','1047','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102091','Monte_Mario_Italy_1',NULL,'EPSG','4400','EPSG','4265','EPSG','18121',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102091_USAGE','projected_crs','ESRI','102091','EPSG','1718','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102092','Monte_Mario_Italy_2',NULL,'EPSG','4400','EPSG','4265','EPSG','18122',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102092_USAGE','projected_crs','ESRI','102092','EPSG','1719','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102093','Roma_1940_Gauss_Boaga_Est',NULL,'EPSG','4400','ESRI','104127','EPSG','18122',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102093_USAGE','projected_crs','ESRI','102093','EPSG','1719','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102094','Roma_1940_Gauss_Boaga_Ovest',NULL,'EPSG','4400','ESRI','104127','EPSG','18121',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102094_USAGE','projected_crs','ESRI','102094','EPSG','1718','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102095','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',18.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-77.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',750000.0,'EPSG','9001','EPSG','8807','False northing',650000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102095_USAGE','conversion','ESRI','102095','EPSG','3342','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102095','JAD_2001_Jamaica_Grid',NULL,'EPSG','4400','EPSG','4758','ESRI','102095',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102095_USAGE','projected_crs','ESRI','102095','EPSG','3342','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102096','Bab_South_Palau_Azimuthal_Equidistant',NULL,NULL,NULL,'ESRI','104112',NULL,NULL,'PROJCS["Bab_South_Palau_Azimuthal_Equidistant",GEOGCS["GCS_Bab_South",DATUM["D_Bab_South",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",50000.0],PARAMETER["False_Northing",150000.0],PARAMETER["Central_Meridian",134.4504448611111],PARAMETER["Latitude_Of_Origin",7.35122211111111],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102096_USAGE','projected_crs','ESRI','102096','EPSG','1185','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102097','ETRS_1989_UTM_Zone_26N',NULL,'EPSG','4400','EPSG','4258','EPSG','16026',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102097_USAGE','projected_crs','ESRI','102097','EPSG','2855','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102098','ETRS_1989_UTM_Zone_27N',NULL,'EPSG','4400','EPSG','4258','EPSG','16027',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102098_USAGE','projected_crs','ESRI','102098','EPSG','2856','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102099','ETRS_1989_UTM_Zone_39N',NULL,'EPSG','4400','EPSG','4258','EPSG','16039',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102099_USAGE','projected_crs','ESRI','102099','EPSG','2868','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102100','WGS_1984_Web_Mercator_Auxiliary_Sphere',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102100_USAGE','projected_crs','ESRI','102100','EPSG','3544','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102101','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',6.05625,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102101_USAGE','conversion','ESRI','102101','EPSG','1741','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102101','NGO_1948_Norway_Zone_1',NULL,'EPSG','4400','EPSG','4273','ESRI','102101',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102101_USAGE','projected_crs','ESRI','102101','EPSG','1741','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102102','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',8.389583333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102102_USAGE','conversion','ESRI','102102','EPSG','1742','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102102','NGO_1948_Norway_Zone_2',NULL,'EPSG','4400','EPSG','4273','ESRI','102102',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102102_USAGE','projected_crs','ESRI','102102','EPSG','1742','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102103','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.72291666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102103_USAGE','conversion','ESRI','102103','EPSG','1743','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102103','NGO_1948_Norway_Zone_3',NULL,'EPSG','4400','EPSG','4273','ESRI','102103',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102103_USAGE','projected_crs','ESRI','102103','EPSG','1743','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102104','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',13.22291666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102104_USAGE','conversion','ESRI','102104','EPSG','1744','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102104','NGO_1948_Norway_Zone_4',NULL,'EPSG','4400','EPSG','4273','ESRI','102104',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102104_USAGE','projected_crs','ESRI','102104','EPSG','1744','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102105','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',16.88958333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102105_USAGE','conversion','ESRI','102105','EPSG','1745','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102105','NGO_1948_Norway_Zone_5',NULL,'EPSG','4400','EPSG','4273','ESRI','102105',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102105_USAGE','projected_crs','ESRI','102105','EPSG','1745','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102106','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',20.88958333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102106_USAGE','conversion','ESRI','102106','EPSG','1746','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102106','NGO_1948_Norway_Zone_6',NULL,'EPSG','4400','EPSG','4273','ESRI','102106',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102106_USAGE','projected_crs','ESRI','102106','EPSG','1746','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102107','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.88958333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102107_USAGE','conversion','ESRI','102107','EPSG','1747','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102107','NGO_1948_Norway_Zone_7',NULL,'EPSG','4400','EPSG','4273','ESRI','102107',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102107_USAGE','projected_crs','ESRI','102107','EPSG','1747','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102108','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',29.05625,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102108_USAGE','conversion','ESRI','102108','EPSG','1748','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102108','NGO_1948_Norway_Zone_8',NULL,'EPSG','4400','EPSG','4273','ESRI','102108',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102108_USAGE','projected_crs','ESRI','102108','EPSG','1748','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102109','ETRS_1989_Slovenia_TM',NULL,'EPSG','4400','EPSG','4258','EPSG','19845',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102109_USAGE','projected_crs','ESRI','102109','EPSG','1212','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102110','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.5,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102110_USAGE','conversion','ESRI','102110','EPSG','1096','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102110','RGF_1993_Lambert_93',NULL,'EPSG','4400','EPSG','4171','ESRI','102110',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102110_USAGE','projected_crs','ESRI','102110','EPSG','1096','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102111','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-176.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',650000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102111_USAGE','conversion','ESRI','102111','EPSG','2889','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102111','Chatham_Islands_1979_Map_Grid',NULL,'EPSG','4400','EPSG','4673','ESRI','102111',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102111_USAGE','projected_crs','ESRI','102111','EPSG','2889','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102112','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-44.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-176.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102112_USAGE','conversion','ESRI','102112','EPSG','2889','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102112','NZGD_2000_Chatham_Island_Circuit',NULL,'EPSG','4400','EPSG','4167','ESRI','102112',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102112_USAGE','projected_crs','ESRI','102112','EPSG','2889','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102113','WGS_1984_Web_Mercator',NULL,NULL,NULL,'EPSG','4055',NULL,NULL,'PROJCS["WGS_1984_Web_Mercator",GEOGCS["GCS_WGS_1984_Major_Auxiliary_Sphere",DATUM["D_WGS_1984_Major_Auxiliary_Sphere",SPHEROID["WGS_1984_Major_Auxiliary_Sphere",6378137.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102113_USAGE','projected_crs','ESRI','102113','EPSG','3544','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102114','Old_Hawaiian_UTM_Zone_4N',NULL,'EPSG','4400','EPSG','4135','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102114_USAGE','projected_crs','ESRI','102114','EPSG','3488','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102115','Old_Hawaiian_UTM_Zone_5N',NULL,'EPSG','4400','EPSG','4135','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102115_USAGE','projected_crs','ESRI','102115','EPSG','3491','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102116','American_Samoa_1962_UTM_Zone_2S',NULL,'EPSG','4400','EPSG','4169','EPSG','16102',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102116_USAGE','projected_crs','ESRI','102116','EPSG','1027','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102117','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',50.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-154.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',55.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102117_USAGE','conversion','ESRI','102117','EPSG','1330','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102117','NAD_1927_Alaska_Albers_Meters',NULL,'EPSG','4400','EPSG','4267','ESRI','102117',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102117_USAGE','projected_crs','ESRI','102117','EPSG','1330','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102118','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',23.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-83.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102118_USAGE','conversion','ESRI','102118','EPSG','1380','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102118','NAD_1927_Georgia_Statewide_Albers',NULL,'EPSG','4497','EPSG','4267','ESRI','102118',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102118_USAGE','projected_crs','ESRI','102118','EPSG','1380','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102119','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.16666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',27.41666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',3000000.0,'EPSG','9002','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102119_USAGE','conversion','ESRI','102119','EPSG','1412','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102119','NAD_1927_Texas_Statewide_Mapping_System',NULL,'EPSG','4495','EPSG','4267','ESRI','102119',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102119_USAGE','projected_crs','ESRI','102119','EPSG','1412','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102120','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.30916666666666,'EPSG','9102','EPSG','8812','Longitude of projection centre',-86.0,'EPSG','9102','EPSG','8813','Azimuth at projection centre',337.25556,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',337.25556,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9996,'EPSG','9201','EPSG','8806','False easting',8355401.583,'EPSG','9003','EPSG','8807','False northing',-14284780.538,'EPSG','9003',0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102120_USAGE','conversion','ESRI','102120','EPSG','1391','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102120','NAD_1927_Michigan_GeoRef_Feet_US',NULL,'EPSG','4497','EPSG','4267','ESRI','102120',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102120_USAGE','projected_crs','ESRI','102120','EPSG','1391','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102121','NAD_1983_Michigan_GeoRef_Feet_US',NULL,'EPSG','4497','EPSG','4269','ESRI','102120',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102121_USAGE','projected_crs','ESRI','102121','EPSG','1391','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102122','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.30916666666666,'EPSG','9102','EPSG','8812','Longitude of projection centre',-86.0,'EPSG','9102','EPSG','8813','Azimuth at projection centre',337.25556,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',337.25556,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9996,'EPSG','9201','EPSG','8806','False easting',2546731.496,'EPSG','9001','EPSG','8807','False northing',-4354009.816,'EPSG','9001',0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102122_USAGE','conversion','ESRI','102122','EPSG','1391','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102122','NAD_1927_Michigan_GeoRef_Meters',NULL,'EPSG','4400','EPSG','4267','ESRI','102122',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102122_USAGE','projected_crs','ESRI','102122','EPSG','1391','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102123','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.30916666666666,'EPSG','9102','EPSG','8812','Longitude of projection centre',-86.0,'EPSG','9102','EPSG','8813','Azimuth at projection centre',337.25556,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',337.25556,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9996,'EPSG','9201','EPSG','8806','False easting',2546731.496,'EPSG','9001','EPSG','8807','False northing',-4354009.816,'EPSG','9001',1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102123_USAGE','conversion','ESRI','102123','EPSG','1391','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102123','NAD_1983_Michigan_GeoRef_Meters',NULL,'EPSG','4400','EPSG','4269','ESRI','102123',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102123_USAGE','projected_crs','ESRI','102123','EPSG','1391','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102124','NAD_1927_UTM_Zone_1N',NULL,'EPSG','4400','EPSG','4267','EPSG','16001',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102124_USAGE','projected_crs','ESRI','102124','EPSG','3374','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102125','NAD_1927_UTM_Zone_2N',NULL,'EPSG','4400','EPSG','4267','EPSG','16002',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102125_USAGE','projected_crs','ESRI','102125','EPSG','3375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102126','NAD_1927_UTM_Zone_59N',NULL,'EPSG','4400','EPSG','4267','EPSG','16059',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102126_USAGE','projected_crs','ESRI','102126','EPSG','3372','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102127','NAD_1927_UTM_Zone_60N',NULL,'EPSG','4400','EPSG','4267','EPSG','16060',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102127_USAGE','projected_crs','ESRI','102127','EPSG','3373','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102128','NAD_1983_UTM_Zone_1N',NULL,'EPSG','4400','EPSG','4269','EPSG','16001',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102128_USAGE','projected_crs','ESRI','102128','EPSG','3374','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102129','NAD_1983_UTM_Zone_2N',NULL,'EPSG','4400','EPSG','4269','EPSG','16002',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102129_USAGE','projected_crs','ESRI','102129','EPSG','3375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102130','NAD_1983_UTM_Zone_59N',NULL,'EPSG','4400','EPSG','4269','EPSG','16059',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102130_USAGE','projected_crs','ESRI','102130','EPSG','3372','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102131','NAD_1983_UTM_Zone_60N',NULL,'EPSG','4400','EPSG','4269','EPSG','16060',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102131_USAGE','projected_crs','ESRI','102131','EPSG','3373','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','20','Norway - onshore - 4.68~E to 12~E','Norway - onshore - 4.68~E to 12~E',57.93,65.76,4.68,12.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102132','NGO_1948_UTM_Zone_32N',NULL,'EPSG','4400','EPSG','4273','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102132_USAGE','projected_crs','ESRI','102132','ESRI','20','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102133','NGO_1948_UTM_Zone_33N',NULL,'EPSG','4400','EPSG','4273','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102133_USAGE','projected_crs','ESRI','102133','EPSG','4067','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102134','NGO_1948_UTM_Zone_34N',NULL,'EPSG','4400','EPSG','4273','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102134_USAGE','projected_crs','ESRI','102134','EPSG','4068','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102135','NGO_1948_UTM_Zone_35N',NULL,'EPSG','4400','EPSG','4273','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102135_USAGE','projected_crs','ESRI','102135','EPSG','4069','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','21','Norway - Baerum Kommune','Norway - Baerum Kommune',59.8254,60.0366,10.3371,10.6725,0); INSERT INTO "conversion" VALUES('ESRI','102136','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.72291666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',19999.32,'EPSG','9001','EPSG','8807','False northing',-202977.79,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102136_USAGE','conversion','ESRI','102136','ESRI','21','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102136','NGO_1948_Baerum_Kommune',NULL,'EPSG','4400','EPSG','4273','ESRI','102136',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102136_USAGE','projected_crs','ESRI','102136','ESRI','21','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','22','Norway - Bergenhalvoen Kommune','Norway - Bergenhalvoen Kommune',60.1651,60.5437,5.1374,5.6993,0); INSERT INTO "conversion" VALUES('ESRI','102137','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',6.05625,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',-200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102137_USAGE','conversion','ESRI','102137','ESRI','22','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102137','NGO_1948_Bergenhalvoen',NULL,'EPSG','4400','EPSG','4273','ESRI','102137',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102137_USAGE','projected_crs','ESRI','102137','ESRI','22','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','23','Norway - Oslo Kommune','Norway - Oslo Kommune',59.81,60.14,10.48,10.97,0); INSERT INTO "conversion" VALUES('ESRI','102138','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.72291666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-212979.18,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102138_USAGE','conversion','ESRI','102138','ESRI','23','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102138','NGO_1948_Oslo_Kommune',NULL,'EPSG','4400','EPSG','4273','ESRI','102138',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102138_USAGE','projected_crs','ESRI','102138','ESRI','23','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102139','EUREF_FIN_TM35FIN',NULL,'EPSG','4400','ESRI','104129','EPSG','16035',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102139_USAGE','projected_crs','ESRI','102139','EPSG','1095','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102140','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',22.31213333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',114.1785555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',836694.05,'EPSG','9001','EPSG','8807','False northing',819069.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102140_USAGE','conversion','ESRI','102140','EPSG','1118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102140','Hong_Kong_1980_Grid',NULL,'EPSG','4400','EPSG','4611','ESRI','102140',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102140_USAGE','projected_crs','ESRI','102140','EPSG','1118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102141','Hong_Kong_1980_UTM_Zone_49N',NULL,'EPSG','4400','EPSG','4611','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102141_USAGE','projected_crs','ESRI','102141','EPSG','1118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102142','Hong_Kong_1980_UTM_Zone_50N',NULL,'EPSG','4400','EPSG','4611','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102142_USAGE','projected_crs','ESRI','102142','EPSG','1118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102143','QND_1995_UTM_39N',NULL,'EPSG','4400','EPSG','4614','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102143_USAGE','projected_crs','ESRI','102143','EPSG','1195','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','24','Africa - Morocco and Western Sahara - UTM 28N - 18~W to 12~W','Africa - Morocco and Western Sahara - UTM 28N - 18~W to 12~W',20.71,35.97,-18.0,-12.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102144','Merchich_UTM_Zone_28N',NULL,'EPSG','4400','EPSG','4261','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102144_USAGE','projected_crs','ESRI','102144','ESRI','24','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102145','JGD_2000_UTM_Zone_51N',NULL,'EPSG','4400','EPSG','4612','EPSG','16051',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102145_USAGE','projected_crs','ESRI','102145','EPSG','3959','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102146','JGD_2000_UTM_Zone_52N',NULL,'EPSG','4400','EPSG','4612','EPSG','16052',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102146_USAGE','projected_crs','ESRI','102146','EPSG','3960','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102147','JGD_2000_UTM_Zone_53N',NULL,'EPSG','4400','EPSG','4612','EPSG','16053',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102147_USAGE','projected_crs','ESRI','102147','EPSG','3961','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102148','JGD_2000_UTM_Zone_54N',NULL,'EPSG','4400','EPSG','4612','EPSG','16054',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102148_USAGE','projected_crs','ESRI','102148','EPSG','3962','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102149','JGD_2000_UTM_Zone_55N',NULL,'EPSG','4400','EPSG','4612','EPSG','16055',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102149_USAGE','projected_crs','ESRI','102149','EPSG','3963','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','25','Japan - 150~E to 156~E','Japan - 150~E to 156~E',17.09,46.05,150.0,156.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102150','JGD_2000_UTM_Zone_56N',NULL,'EPSG','4400','EPSG','4612','EPSG','16056',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102150_USAGE','projected_crs','ESRI','102150','ESRI','25','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102151','Tokyo_UTM_Zone_51N',NULL,'EPSG','4400','EPSG','4301','EPSG','16051',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102151_USAGE','projected_crs','ESRI','102151','EPSG','2951','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102152','Tokyo_UTM_Zone_52N',NULL,'EPSG','4400','EPSG','4301','EPSG','16052',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102152_USAGE','projected_crs','ESRI','102152','EPSG','2952','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102153','Tokyo_UTM_Zone_53N',NULL,'EPSG','4400','EPSG','4301','EPSG','16053',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102153_USAGE','projected_crs','ESRI','102153','EPSG','2953','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102154','Tokyo_UTM_Zone_54N',NULL,'EPSG','4400','EPSG','4301','EPSG','16054',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102154_USAGE','projected_crs','ESRI','102154','EPSG','2954','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102155','Tokyo_UTM_Zone_55N',NULL,'EPSG','4400','EPSG','4301','EPSG','16055',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102155_USAGE','projected_crs','ESRI','102155','EPSG','2955','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102156','Tokyo_UTM_Zone_56N',NULL,'EPSG','4400','EPSG','4301','EPSG','16056',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102156_USAGE','projected_crs','ESRI','102156','ESRI','25','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102157','ETRS_1989_Kosovo_Grid (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102157_USAGE','conversion','ESRI','102157','EPSG','3534','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102157','ETRS_1989_Kosovo_Grid',NULL,'EPSG','4400','EPSG','4258','ESRI','102157',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102157_USAGE','projected_crs','ESRI','102157','EPSG','3534','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102158','Jordan_JTM',NULL,'EPSG','4400','ESRI','104130','EPSG','19995',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102158_USAGE','projected_crs','ESRI','102158','EPSG','1130','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102159','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',22.21239722222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',113.5364694444444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',20000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102159_USAGE','conversion','ESRI','102159','EPSG','1147','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102159','Observatorio_Meteorologico_1965_Macau_Grid',NULL,'EPSG','4400','ESRI','104126','ESRI','102159',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102159_USAGE','projected_crs','ESRI','102159','EPSG','1147','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102160','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-8.131906111111112,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200180.598,'EPSG','9001','EPSG','8807','False northing',299913.01,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102160_USAGE','conversion','ESRI','102160','EPSG','1294','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102160','Datum_73_Hayford_Gauss_IGeoE',NULL,'EPSG','4400','EPSG','4274','ESRI','102160',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102160_USAGE','projected_crs','ESRI','102160','EPSG','1294','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102161','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-8.131906111111112,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',180.598,'EPSG','9001','EPSG','8807','False northing',-86.99,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102161_USAGE','conversion','ESRI','102161','EPSG','1294','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102161','Datum_73_Hayford_Gauss_IPCC',NULL,'EPSG','4400','EPSG','4274','ESRI','102161',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102161_USAGE','projected_crs','ESRI','102161','EPSG','1294','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102162','Graciosa_Base_SW_1948_UTM_Zone_26N',NULL,'EPSG','4400','ESRI','37241','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102162_USAGE','projected_crs','ESRI','102162','EPSG','1301','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102163','Lisboa_Bessel_Bonne',NULL,NULL,NULL,'ESRI','104105',NULL,NULL,'PROJCS["Lisboa_Bessel_Bonne",GEOGCS["GCS_Datum_Lisboa_Bessel",DATUM["D_Datum_Lisboa_Bessel",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Bonne"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-8.131906111111112],PARAMETER["Standard_Parallel_1",39.66666666666666],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102163_USAGE','projected_crs','ESRI','102163','EPSG','1193','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102164','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-8.131906111111112,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102164_USAGE','conversion','ESRI','102164','EPSG','1193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102164','Lisboa_Hayford_Gauss_IGeoE',NULL,'EPSG','4400','ESRI','104106','ESRI','102164',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102164_USAGE','projected_crs','ESRI','102164','EPSG','1193','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102165','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',39.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-8.131906111111112,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102165_USAGE','conversion','ESRI','102165','EPSG','1193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102165','Lisboa_Hayford_Gauss_IPCC',NULL,'EPSG','4400','ESRI','104106','ESRI','102165',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102165_USAGE','projected_crs','ESRI','102165','EPSG','1193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102166','Observatorio_Meteorologico_1939_UTM_Zone_25N',NULL,'EPSG','4400','ESRI','37245','EPSG','16025',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102166_USAGE','projected_crs','ESRI','102166','EPSG','1344','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102167','Porto_Santo_1936_UTM_Zone_28N',NULL,'EPSG','4400','EPSG','4615','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102167_USAGE','projected_crs','ESRI','102167','EPSG','1314','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102168','Sao_Braz_UTM_Zone_26N',NULL,'EPSG','4400','ESRI','37249','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102168_USAGE','projected_crs','ESRI','102168','EPSG','1345','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102169','Selvagem_Grande_1938_UTM_Zone_28N',NULL,'EPSG','4400','EPSG','4616','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102169_USAGE','projected_crs','ESRI','102169','EPSG','2779','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102170','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',145.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-38.0,'EPSG','9102','EPSG','8826','Easting at false origin',2500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102170_USAGE','conversion','ESRI','102170','EPSG','2285','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102170','AGD_1966_VICGRID',NULL,'EPSG','4400','EPSG','4202','ESRI','102170',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102170_USAGE','projected_crs','ESRI','102170','EPSG','2285','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102171','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',145.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-38.0,'EPSG','9102','EPSG','8826','Easting at false origin',2500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102171_USAGE','conversion','ESRI','102171','EPSG','2285','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102171','GDA_1994_VICGRID94',NULL,'EPSG','4400','EPSG','4283','ESRI','102171',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102171_USAGE','projected_crs','ESRI','102171','EPSG','2285','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102172','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-32.0,'EPSG','9102','EPSG','8822','Longitude of false origin',135.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-28.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-36.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102172_USAGE','conversion','ESRI','102172','EPSG','2986','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102172','GDA_1994_South_Australia_Lambert',NULL,'EPSG','4400','EPSG','4283','ESRI','102172',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102172_USAGE','projected_crs','ESRI','102172','EPSG','2986','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102173','ETRS_1989_UWPP_1992 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-5300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102173_USAGE','conversion','ESRI','102173','EPSG','1192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102173','ETRS_1989_UWPP_1992',NULL,'EPSG','4400','EPSG','4258','ESRI','102173',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102173_USAGE','projected_crs','ESRI','102173','EPSG','1192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102174','ETRS_1989_UWPP_2000_PAS_5 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102174_USAGE','conversion','ESRI','102174','EPSG','1520','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102174','ETRS_1989_UWPP_2000_PAS_5',NULL,'EPSG','4400','EPSG','4258','ESRI','102174',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102174_USAGE','projected_crs','ESRI','102174','EPSG','1520','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102175','ETRS_1989_UWPP_2000_PAS_6 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102175_USAGE','conversion','ESRI','102175','EPSG','1521','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102175','ETRS_1989_UWPP_2000_PAS_6',NULL,'EPSG','4400','EPSG','4258','ESRI','102175',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102175_USAGE','projected_crs','ESRI','102175','EPSG','1521','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102176','ETRS_1989_UWPP_2000_PAS_7 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102176_USAGE','conversion','ESRI','102176','EPSG','1522','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102176','ETRS_1989_UWPP_2000_PAS_7',NULL,'EPSG','4400','EPSG','4258','ESRI','102176',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102176_USAGE','projected_crs','ESRI','102176','EPSG','1522','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102177','ETRS_1989_UWPP_2000_PAS_8 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',8500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102177_USAGE','conversion','ESRI','102177','EPSG','1523','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102177','ETRS_1989_UWPP_2000_PAS_8',NULL,'EPSG','4400','EPSG','4258','ESRI','102177',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102177_USAGE','projected_crs','ESRI','102177','EPSG','1523','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102178','NAD_1927_10TM_AEP_Forest',NULL,'EPSG','4400','EPSG','4267','EPSG','19881',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102178_USAGE','projected_crs','ESRI','102178','EPSG','2376','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102179','NAD_1927_10TM_AEP_Resource',NULL,'EPSG','4400','EPSG','4267','EPSG','19882',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102179_USAGE','projected_crs','ESRI','102179','EPSG','2376','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102180','NAD_1927_3TM_111',NULL,'EPSG','4400','EPSG','4267','EPSG','17722',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102180_USAGE','projected_crs','ESRI','102180','EPSG','3543','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102181','NAD_1927_3TM_114',NULL,'EPSG','4400','EPSG','4267','EPSG','17723',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102181_USAGE','projected_crs','ESRI','102181','EPSG','3542','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102182','NAD_1927_3TM_117',NULL,'EPSG','4400','EPSG','4267','EPSG','17724',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102182_USAGE','projected_crs','ESRI','102182','EPSG','3541','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102183','NAD_1927_3TM_120',NULL,'EPSG','4400','EPSG','4267','EPSG','17726',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102183_USAGE','projected_crs','ESRI','102183','EPSG','3540','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102184','NAD_1983_10TM_AEP_Forest',NULL,'EPSG','4400','EPSG','4269','EPSG','19881',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102184_USAGE','projected_crs','ESRI','102184','EPSG','2376','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102185','NAD_1983_10TM_AEP_Resource',NULL,'EPSG','4400','EPSG','4269','EPSG','19882',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102185_USAGE','projected_crs','ESRI','102185','EPSG','2376','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102186','NAD_1983_3TM_111',NULL,'EPSG','4400','EPSG','4269','EPSG','17722',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102186_USAGE','projected_crs','ESRI','102186','EPSG','3543','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102187','NAD_1983_3TM_114',NULL,'EPSG','4400','EPSG','4269','EPSG','17723',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102187_USAGE','projected_crs','ESRI','102187','EPSG','3542','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102188','NAD_1983_3TM_117',NULL,'EPSG','4400','EPSG','4269','EPSG','17724',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102188_USAGE','projected_crs','ESRI','102188','EPSG','3541','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102189','NAD_1983_3TM_120',NULL,'EPSG','4400','EPSG','4269','EPSG','17726',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102189_USAGE','projected_crs','ESRI','102189','EPSG','3540','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102190','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-126.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',50.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',58.5,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102190_USAGE','conversion','ESRI','102190','EPSG','2832','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102190','NAD_1983_BC_Environment_Albers',NULL,'EPSG','4400','EPSG','4269','ESRI','102190',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102190_USAGE','projected_crs','ESRI','102190','EPSG','2832','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102191','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',37.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-5.4,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102191_USAGE','conversion','ESRI','102191','EPSG','1703','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102191','Nord_Maroc',NULL,'EPSG','4400','EPSG','4261','ESRI','102191',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102191_USAGE','projected_crs','ESRI','102191','EPSG','1703','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102192','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-5.4,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999615596,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102192_USAGE','conversion','ESRI','102192','EPSG','2787','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102192','Sud_Maroc',NULL,'EPSG','4400','EPSG','4261','ESRI','102192',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102192_USAGE','projected_crs','ESRI','102192','EPSG','2787','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102193','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',26.1,'EPSG','9102','EPSG','8802','Longitude of natural origin',-5.4,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1200000.0,'EPSG','9001','EPSG','8807','False northing',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102193_USAGE','conversion','ESRI','102193','EPSG','1705','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102193','Sahara_Degree',NULL,'EPSG','4400','EPSG','4261','ESRI','102193',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102193_USAGE','projected_crs','ESRI','102193','EPSG','1705','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102194','UWPP_1992 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',-5300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102194_USAGE','conversion','ESRI','102194','EPSG','1192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102194','UWPP_1992',NULL,'EPSG','4400','EPSG','9059','ESRI','102194',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102194_USAGE','projected_crs','ESRI','102194','EPSG','1192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102195','UWPP_2000_PAS_5 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',5500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102195_USAGE','conversion','ESRI','102195','EPSG','1520','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102195','UWPP_2000_PAS_5',NULL,'EPSG','4400','EPSG','9059','ESRI','102195',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102195_USAGE','projected_crs','ESRI','102195','EPSG','1520','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102196','UWPP_2000_PAS_6 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',18.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',6500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102196_USAGE','conversion','ESRI','102196','EPSG','1521','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102196','UWPP_2000_PAS_6',NULL,'EPSG','4400','EPSG','9059','ESRI','102196',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102196_USAGE','projected_crs','ESRI','102196','EPSG','1521','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102197','UWPP_2000_PAS_7 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',7500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102197_USAGE','conversion','ESRI','102197','EPSG','1522','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102197','UWPP_2000_PAS_7',NULL,'EPSG','4400','EPSG','9059','ESRI','102197',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102197_USAGE','projected_crs','ESRI','102197','EPSG','1522','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102198','UWPP_2000_PAS_8 (Gauss Kruger)',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',24.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999923,'EPSG','9201','EPSG','8806','False easting',8500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102198_USAGE','conversion','ESRI','102198','EPSG','1523','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102198','UWPP_2000_PAS_8',NULL,'EPSG','4400','EPSG','9059','ESRI','102198',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102198_USAGE','projected_crs','ESRI','102198','EPSG','1523','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102199','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',50.797815,'EPSG','9102','EPSG','8822','Longitude of false origin',4.359215833333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',51.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',649328.0,'EPSG','9001','EPSG','8827','Northing at false origin',665262.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102199_USAGE','conversion','ESRI','102199','EPSG','1347','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102199','Belge_Lambert_2008',NULL,'EPSG','4400','EPSG','4258','ESRI','102199',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102199_USAGE','projected_crs','ESRI','102199','EPSG','1347','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102200','NAD_1983_HARN_UTM_Zone_2S',NULL,'EPSG','4400','EPSG','4152','EPSG','16102',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102200_USAGE','projected_crs','ESRI','102200','EPSG','3110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102201','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',13.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102201_USAGE','conversion','ESRI','102201','EPSG','3255','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102201','NAD_1983_HARN_Guam_Map_Grid',NULL,'EPSG','4400','EPSG','4152','ESRI','102201',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102201_USAGE','projected_crs','ESRI','102201','EPSG','3255','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102202','NAD_1983_HARN_UTM_Zone_4N',NULL,'EPSG','4400','EPSG','4152','EPSG','16004',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102202_USAGE','projected_crs','ESRI','102202','EPSG','3488','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102203','NAD_1983_HARN_UTM_Zone_5N',NULL,'EPSG','4400','EPSG','4152','EPSG','16005',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102203_USAGE','projected_crs','ESRI','102203','EPSG','3491','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102204','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',24.0,'EPSG','9102','EPSG','8822','Longitude of false origin',45.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',21.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',27.0,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102204_USAGE','conversion','ESRI','102204','EPSG','3303','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102204','Ain_el_Abd_1970_Aramco_Lambert_2',NULL,'EPSG','4400','EPSG','4204','ESRI','102204',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102204_USAGE','projected_crs','ESRI','102204','EPSG','3303','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102205','NAD_1983_HARN_UTM_Zone_11N',NULL,'EPSG','4400','EPSG','4152','EPSG','16011',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102205_USAGE','projected_crs','ESRI','102205','EPSG','3852','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102206','NAD_1983_HARN_UTM_Zone_12N',NULL,'EPSG','4400','EPSG','4152','EPSG','16012',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102206_USAGE','projected_crs','ESRI','102206','EPSG','3499','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102207','NAD_1983_HARN_UTM_Zone_13N',NULL,'EPSG','4400','EPSG','4152','EPSG','16013',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102207_USAGE','projected_crs','ESRI','102207','EPSG','3500','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102208','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-67.875,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102208_USAGE','conversion','ESRI','102208','EPSG','2960','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102208','NAD_1983_HARN_Maine_2000_East_Zone',NULL,'EPSG','4400','EPSG','4152','ESRI','102208',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102208_USAGE','projected_crs','ESRI','102208','EPSG','2960','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102209','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.125,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102209_USAGE','conversion','ESRI','102209','EPSG','2959','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102209','NAD_1983_HARN_Maine_2000_Central_Zone',NULL,'EPSG','4400','EPSG','4152','ESRI','102209',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102209_USAGE','projected_crs','ESRI','102209','EPSG','2959','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102210','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.375,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102210_USAGE','conversion','ESRI','102210','EPSG','2958','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102210','NAD_1983_HARN_Maine_2000_West_Zone',NULL,'EPSG','4400','EPSG','4152','ESRI','102210',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102210_USAGE','projected_crs','ESRI','102210','EPSG','2958','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102211','NAD_1983_HARN_UTM_Zone_18N',NULL,'EPSG','4400','EPSG','4152','EPSG','16018',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102211_USAGE','projected_crs','ESRI','102211','EPSG','3868','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102212','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-107.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.0,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102212_USAGE','conversion','ESRI','102212','EPSG','1419','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102212','NAD_1983_WyLAM',NULL,'EPSG','4400','EPSG','4269','ESRI','102212',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102212_USAGE','projected_crs','ESRI','102212','EPSG','1419','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102213','NAD_1983_UTM_Zone_58N',NULL,'EPSG','4400','EPSG','4269','EPSG','16058',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102213_USAGE','projected_crs','ESRI','102213','EPSG','2116','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102214','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',15.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-24.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',15.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',16.66666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',161587.83,'EPSG','9001','EPSG','8827','Northing at false origin',128511.202,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102214_USAGE','conversion','ESRI','102214','EPSG','1062','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102214','WGS_1984_Cape_Verde_Grid',NULL,'EPSG','4400','EPSG','4326','ESRI','102214',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102214_USAGE','projected_crs','ESRI','102214','EPSG','1062','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102215','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',77.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',-8000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102215_USAGE','conversion','ESRI','102215','EPSG','1061','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102215','WGS_1984_Canada_Atlas_LCC',NULL,'EPSG','4400','EPSG','4326','ESRI','102215',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102215_USAGE','projected_crs','ESRI','102215','EPSG','1061','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','26','Australia - Perth Coast','Australia - Perth Coast',-33.41666666666666,-31.33333333333333,115.4416666666667,116.0833333333333,0); INSERT INTO "conversion" VALUES('ESRI','102216','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',115.8166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999906,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',3800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102216_USAGE','conversion','ESRI','102216','ESRI','26','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102216','GDA_1994_Perth_Coastal_Grid_1994',NULL,'EPSG','4400','EPSG','4283','ESRI','102216',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102216_USAGE','projected_crs','ESRI','102216','ESRI','26','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102217','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1706033.333333333,'EPSG','9003','EPSG','8807','False northing',-14698133.33333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102217_USAGE','conversion','ESRI','102217','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102217','NAD_1983_NSRS2007_Wisconsin_TM_US_Ft',NULL,'EPSG','4497','EPSG','4759','ESRI','102217',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102217_USAGE','projected_crs','ESRI','102217','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102218','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',34.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.0,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102218_USAGE','conversion','ESRI','102218','EPSG','2381','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102218','NAD_1983_USFS_R6_Albers',NULL,'EPSG','4400','EPSG','4269','ESRI','102218',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102218_USAGE','projected_crs','ESRI','102218','EPSG','2381','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102219','NAD_1983_Wisconsin_TM_US_Ft',NULL,'EPSG','4497','EPSG','4269','ESRI','102217',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102219_USAGE','projected_crs','ESRI','102219','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102220','NAD_1983_HARN_Wisconsin_TM_US_Ft',NULL,'EPSG','4497','EPSG','4152','ESRI','102217',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102220_USAGE','projected_crs','ESRI','102220','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102221','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',10.46666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.33333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',9.933333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',11.0,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',271820.522,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102221_USAGE','conversion','ESRI','102221','EPSG','3869','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102221','Ocotepeque_1935_Costa_Rica_Lambert_Norte',NULL,'EPSG','4400','EPSG','5451','ESRI','102221',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102221_USAGE','projected_crs','ESRI','102221','EPSG','3869','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102222','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',9.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-83.66666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',8.466666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',9.533333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',327987.436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102222_USAGE','conversion','ESRI','102222','EPSG','3870','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102222','Ocotepeque_1935_Costa_Rica_Lambert_Sur',NULL,'EPSG','4400','EPSG','5451','ESRI','102222',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102222_USAGE','projected_crs','ESRI','102222','EPSG','3870','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102223','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102223_USAGE','conversion','ESRI','102223','EPSG','1074','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102223','WGS_1984_Costa_Rica_TM_90',NULL,'EPSG','4400','EPSG','4326','ESRI','102223',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102223_USAGE','projected_crs','ESRI','102223','EPSG','1074','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','27','Mongolia - west of 96~E','Mongolia - west of 96~E',43.01,50.89,87.76,96.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102224','MONREF_1997_UTM_Zone_46N',NULL,'EPSG','4400','ESRI','104134','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102224_USAGE','projected_crs','ESRI','102224','ESRI','27','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','28','Mongolia - between 96~E and 102~E','Mongolia - between 96~E and 102~E',42.14,52.15,96.0,102.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102225','MONREF_1997_UTM_Zone_47N',NULL,'EPSG','4400','ESRI','104134','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102225_USAGE','projected_crs','ESRI','102225','ESRI','28','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','29','Mongolia - between 102~E and 108~E','Mongolia - between 102~E and 108~E',41.58,51.42,102.0,108.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102226','MONREF_1997_UTM_Zone_48N',NULL,'EPSG','4400','ESRI','104134','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102226_USAGE','projected_crs','ESRI','102226','ESRI','29','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','30','Mongolia - between 108~E and 114~E','Mongolia - between 108~E and 114~E',42.35,50.23,108.0,114.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102227','MONREF_1997_UTM_Zone_49N',NULL,'EPSG','4400','ESRI','104134','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102227_USAGE','projected_crs','ESRI','102227','ESRI','30','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','31','Mongolia - east of 114~E','Mongolia - east of 114~E',44.9,50.32,114.0,119.94,0); INSERT INTO "projected_crs" VALUES('ESRI','102228','MONREF_1997_UTM_Zone_50N',NULL,'EPSG','4400','ESRI','104134','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102228_USAGE','projected_crs','ESRI','102228','ESRI','31','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102229','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-85.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102229_USAGE','conversion','ESRI','102229','EPSG','2154','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102229','NAD_1983_HARN_StatePlane_Alabama_East_FIPS_0101',NULL,'EPSG','4400','EPSG','4152','ESRI','102229',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102229_USAGE','projected_crs','ESRI','102229','EPSG','2154','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102230','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102230_USAGE','conversion','ESRI','102230','EPSG','2155','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102230','NAD_1983_HARN_StatePlane_Alabama_West_FIPS_0102',NULL,'EPSG','4400','EPSG','4152','ESRI','102230',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102230_USAGE','projected_crs','ESRI','102230','EPSG','2155','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102231','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.599047222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-80.08091666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1000000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102231_USAGE','conversion','ESRI','102231','EPSG','3091','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102231','Colombia_West_West_Zone',NULL,'EPSG','4400','EPSG','4218','ESRI','102231',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102231_USAGE','projected_crs','ESRI','102231','EPSG','3091','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102232','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.683333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.15,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000399787532524,'EPSG','9201','EPSG','8806','False easting',92334.879,'EPSG','9001','EPSG','8807','False northing',109320.965,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102232_USAGE','conversion','ESRI','102232','EPSG','3089','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102232','Bogota_Ciudad_Bogota',NULL,'EPSG','4400','EPSG','4218','ESRI','102232',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102232_USAGE','projected_crs','ESRI','102232','EPSG','3089','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102233','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',4.680486111111112,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.14659166666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000399803265436,'EPSG','9201','EPSG','8806','False easting',92334.879,'EPSG','9001','EPSG','8807','False northing',109320.965,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102233_USAGE','conversion','ESRI','102233','EPSG','3089','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102233','MAGNA_Ciudad_Bogota',NULL,'EPSG','4400','EPSG','4686','ESRI','102233',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102233_USAGE','projected_crs','ESRI','102233','EPSG','3089','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102234','NAD_1983_CSRS_UTM_Zone_14N',NULL,'EPSG','4400','EPSG','4617','EPSG','16014',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102234_USAGE','projected_crs','ESRI','102234','EPSG','3413','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102235','NAD_1983_CSRS_UTM_Zone_15N',NULL,'EPSG','4400','EPSG','4617','EPSG','16015',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102235_USAGE','projected_crs','ESRI','102235','EPSG','3414','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102236','NAD_1983_CSRS_UTM_Zone_16N',NULL,'EPSG','4400','EPSG','4617','EPSG','16016',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102236_USAGE','projected_crs','ESRI','102236','EPSG','3415','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102237','Pohnpei_Az_Eq_1971',NULL,NULL,NULL,'ESRI','104109',NULL,NULL,'PROJCS["Pohnpei_Az_Eq_1971",GEOGCS["GCS_Pohnpei",DATUM["D_Pohnpei",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",80122.82],PARAMETER["False_Northing",80747.24],PARAMETER["Central_Meridian",158.2092992222222],PARAMETER["Latitude_Of_Origin",6.965075694444445],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102237_USAGE','projected_crs','ESRI','102237','EPSG','1161','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102238','Saipan_Az_Eq_1969',NULL,NULL,NULL,'EPSG','4675',NULL,NULL,'PROJCS["Saipan_Az_Eq_1969",GEOGCS["GCS_Guam_1963",DATUM["D_Guam_1963",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",50000.0],PARAMETER["False_Northing",50000.0],PARAMETER["Central_Meridian",145.7112869444444],PARAMETER["Latitude_Of_Origin",15.16755722222222],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102238_USAGE','projected_crs','ESRI','102238','EPSG','1181','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102239','Guam_Geodetic_Triangulation_Network_1963',NULL,NULL,NULL,'EPSG','4675',NULL,NULL,'PROJCS["Guam_Geodetic_Triangulation_Network_1963",GEOGCS["GCS_Guam_1963",DATUM["D_Guam_1963",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",50000.0],PARAMETER["False_Northing",50000.0],PARAMETER["Central_Meridian",144.7487507055556],PARAMETER["Latitude_Of_Origin",13.47246635277778],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102239_USAGE','projected_crs','ESRI','102239','EPSG','1110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102240','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',13.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102240_USAGE','conversion','ESRI','102240','EPSG','1110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102240','Guam_Geodetic_Network_1993',NULL,'EPSG','4400','EPSG','4152','ESRI','102240',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102240_USAGE','projected_crs','ESRI','102240','EPSG','1110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102241','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102241_USAGE','conversion','ESRI','102241','EPSG','2175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102241','NAD_1983_HARN_StatePlane_California_I_FIPS_0401',NULL,'EPSG','4400','EPSG','4152','ESRI','102241',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102241_USAGE','projected_crs','ESRI','102241','EPSG','2175','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102242','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102242_USAGE','conversion','ESRI','102242','EPSG','2176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102242','NAD_1983_HARN_StatePlane_California_II_FIPS_0402',NULL,'EPSG','4400','EPSG','4152','ESRI','102242',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102242_USAGE','projected_crs','ESRI','102242','EPSG','2176','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102243','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102243_USAGE','conversion','ESRI','102243','EPSG','2177','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102243','NAD_1983_HARN_StatePlane_California_III_FIPS_0403',NULL,'EPSG','4400','EPSG','4152','ESRI','102243',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102243_USAGE','projected_crs','ESRI','102243','EPSG','2177','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102244','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-119.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.25,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102244_USAGE','conversion','ESRI','102244','EPSG','2178','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102244','NAD_1983_HARN_StatePlane_California_IV_FIPS_0404',NULL,'EPSG','4400','EPSG','4152','ESRI','102244',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102244_USAGE','projected_crs','ESRI','102244','EPSG','2178','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102245','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102245_USAGE','conversion','ESRI','102245','EPSG','2182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102245','NAD_1983_HARN_StatePlane_California_V_FIPS_0405',NULL,'EPSG','4400','EPSG','4152','ESRI','102245',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102245_USAGE','projected_crs','ESRI','102245','EPSG','2182','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102246','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-116.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102246_USAGE','conversion','ESRI','102246','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102246','NAD_1983_HARN_StatePlane_California_VI_FIPS_0406',NULL,'EPSG','4400','EPSG','4152','ESRI','102246',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102246_USAGE','projected_crs','ESRI','102246','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102247','NAD_1983_CORS96_Alaska_Albers',NULL,'EPSG','4400','EPSG','6783','ESRI','102117',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102247_USAGE','projected_crs','ESRI','102247','EPSG','1330','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102248','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102248_USAGE','conversion','ESRI','102248','EPSG','2167','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102248','NAD_1983_HARN_StatePlane_Arizona_East_FIPS_0201',NULL,'EPSG','4400','EPSG','4152','ESRI','102248',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102248_USAGE','projected_crs','ESRI','102248','EPSG','2167','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102249','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.9166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102249_USAGE','conversion','ESRI','102249','EPSG','2166','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102249','NAD_1983_HARN_StatePlane_Arizona_Central_FIPS_0202',NULL,'EPSG','4400','EPSG','4152','ESRI','102249',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102249_USAGE','projected_crs','ESRI','102249','EPSG','2166','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102250','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-113.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102250_USAGE','conversion','ESRI','102250','EPSG','2168','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102250','NAD_1983_HARN_StatePlane_Arizona_West_FIPS_0203',NULL,'EPSG','4400','EPSG','4152','ESRI','102250',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102250_USAGE','projected_crs','ESRI','102250','EPSG','2168','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102251','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102251_USAGE','conversion','ESRI','102251','EPSG','2169','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102251','NAD_1983_HARN_StatePlane_Arkansas_North_FIPS_0301',NULL,'EPSG','4400','EPSG','4152','ESRI','102251',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102251_USAGE','projected_crs','ESRI','102251','EPSG','2169','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102252','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102252_USAGE','conversion','ESRI','102252','EPSG','2170','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102252','NAD_1983_HARN_StatePlane_Arkansas_South_FIPS_0302',NULL,'EPSG','4400','EPSG','4152','ESRI','102252',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102252_USAGE','projected_crs','ESRI','102252','EPSG','2170','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102253','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102253_USAGE','conversion','ESRI','102253','EPSG','2184','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102253','NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501',NULL,'EPSG','4400','EPSG','4152','ESRI','102253',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102253_USAGE','projected_crs','ESRI','102253','EPSG','2184','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102254','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.45,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.75,'EPSG','9102','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102254_USAGE','conversion','ESRI','102254','EPSG','2183','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102254','NAD_1983_HARN_StatePlane_Colorado_Central_FIPS_0502',NULL,'EPSG','4400','EPSG','4152','ESRI','102254',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102254_USAGE','projected_crs','ESRI','102254','EPSG','2183','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102255','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.23333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102255_USAGE','conversion','ESRI','102255','EPSG','2185','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102255','NAD_1983_HARN_StatePlane_Colorado_South_FIPS_0503',NULL,'EPSG','4400','EPSG','4152','ESRI','102255',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102255_USAGE','projected_crs','ESRI','102255','EPSG','2185','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102256','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-72.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.86666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',304800.6096,'EPSG','9001','EPSG','8827','Northing at false origin',152400.3048,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102256_USAGE','conversion','ESRI','102256','EPSG','1377','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102256','NAD_1983_HARN_StatePlane_Connecticut_FIPS_0600',NULL,'EPSG','4400','EPSG','4152','ESRI','102256',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102256_USAGE','projected_crs','ESRI','102256','EPSG','1377','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102257','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102257_USAGE','conversion','ESRI','102257','EPSG','1378','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102257','NAD_1983_HARN_StatePlane_Delaware_FIPS_0700',NULL,'EPSG','4400','EPSG','4152','ESRI','102257',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102257_USAGE','projected_crs','ESRI','102257','EPSG','1378','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102258','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102258_USAGE','conversion','ESRI','102258','EPSG','2186','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102258','NAD_1983_HARN_StatePlane_Florida_East_FIPS_0901',NULL,'EPSG','4400','EPSG','4152','ESRI','102258',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102258_USAGE','projected_crs','ESRI','102258','EPSG','2186','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102259','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102259_USAGE','conversion','ESRI','102259','EPSG','2188','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102259','NAD_1983_HARN_StatePlane_Florida_West_FIPS_0902',NULL,'EPSG','4400','EPSG','4152','ESRI','102259',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102259_USAGE','projected_crs','ESRI','102259','EPSG','2188','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102260','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.58333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.75,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102260_USAGE','conversion','ESRI','102260','EPSG','2187','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102260','NAD_1983_HARN_StatePlane_Florida_North_FIPS_0903',NULL,'EPSG','4400','EPSG','4152','ESRI','102260',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102260_USAGE','projected_crs','ESRI','102260','EPSG','2187','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102261','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',18.83333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-155.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102261_USAGE','conversion','ESRI','102261','EPSG','1546','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102261','NAD_1983_HARN_StatePlane_Hawaii_1_FIPS_5101',NULL,'EPSG','4400','EPSG','4152','ESRI','102261',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102261_USAGE','projected_crs','ESRI','102261','EPSG','1546','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102262','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',20.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-156.6666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102262_USAGE','conversion','ESRI','102262','EPSG','1547','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102262','NAD_1983_HARN_StatePlane_Hawaii_2_FIPS_5102',NULL,'EPSG','4400','EPSG','4152','ESRI','102262',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102262_USAGE','projected_crs','ESRI','102262','EPSG','1547','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102263','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.16666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102263_USAGE','conversion','ESRI','102263','EPSG','1548','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102263','NAD_1983_HARN_StatePlane_Hawaii_3_FIPS_5103',NULL,'EPSG','4400','EPSG','4152','ESRI','102263',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102263_USAGE','projected_crs','ESRI','102263','EPSG','1548','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102264','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.83333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102264_USAGE','conversion','ESRI','102264','EPSG','1549','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102264','NAD_1983_HARN_StatePlane_Hawaii_4_FIPS_5104',NULL,'EPSG','4400','EPSG','4152','ESRI','102264',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102264_USAGE','projected_crs','ESRI','102264','EPSG','1549','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102265','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.66666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-160.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102265_USAGE','conversion','ESRI','102265','EPSG','1550','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102265','NAD_1983_HARN_StatePlane_Hawaii_5_FIPS_5105',NULL,'EPSG','4400','EPSG','4152','ESRI','102265',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102265_USAGE','projected_crs','ESRI','102265','EPSG','1550','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102266','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102266_USAGE','conversion','ESRI','102266','EPSG','2189','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102266','NAD_1983_HARN_StatePlane_Georgia_East_FIPS_1001',NULL,'EPSG','4400','EPSG','4152','ESRI','102266',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102266_USAGE','projected_crs','ESRI','102266','EPSG','2189','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102267','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-84.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102267_USAGE','conversion','ESRI','102267','EPSG','2190','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102267','NAD_1983_HARN_StatePlane_Georgia_West_FIPS_1002',NULL,'EPSG','4400','EPSG','4152','ESRI','102267',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102267_USAGE','projected_crs','ESRI','102267','EPSG','2190','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102268','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-112.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102268_USAGE','conversion','ESRI','102268','EPSG','2192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102268','NAD_1983_HARN_StatePlane_Idaho_East_FIPS_1101',NULL,'EPSG','4400','EPSG','4152','ESRI','102268',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102268_USAGE','projected_crs','ESRI','102268','EPSG','2192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102269','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102269_USAGE','conversion','ESRI','102269','EPSG','2191','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102269','NAD_1983_HARN_StatePlane_Idaho_Central_FIPS_1102',NULL,'EPSG','4400','EPSG','4152','ESRI','102269',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102269_USAGE','projected_crs','ESRI','102269','EPSG','2191','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102270','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102270_USAGE','conversion','ESRI','102270','EPSG','2193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102270','NAD_1983_HARN_StatePlane_Idaho_West_FIPS_1103',NULL,'EPSG','4400','EPSG','4152','ESRI','102270',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102270_USAGE','projected_crs','ESRI','102270','EPSG','2193','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102271','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102271_USAGE','conversion','ESRI','102271','EPSG','2194','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102271','NAD_1983_HARN_StatePlane_Illinois_East_FIPS_1201',NULL,'EPSG','4400','EPSG','4152','ESRI','102271',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102271_USAGE','projected_crs','ESRI','102271','EPSG','2194','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102272','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102272_USAGE','conversion','ESRI','102272','EPSG','2195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102272','NAD_1983_HARN_StatePlane_Illinois_West_FIPS_1202',NULL,'EPSG','4400','EPSG','4152','ESRI','102272',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102272_USAGE','projected_crs','ESRI','102272','EPSG','2195','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102273','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-85.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102273_USAGE','conversion','ESRI','102273','EPSG','2196','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102273','NAD_1983_HARN_StatePlane_Indiana_East_FIPS_1301',NULL,'EPSG','4400','EPSG','4152','ESRI','102273',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102273_USAGE','projected_crs','ESRI','102273','EPSG','2196','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102274','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.08333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102274_USAGE','conversion','ESRI','102274','EPSG','2197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102274','NAD_1983_HARN_StatePlane_Indiana_West_FIPS_1302',NULL,'EPSG','4400','EPSG','4152','ESRI','102274',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102274_USAGE','projected_crs','ESRI','102274','EPSG','2197','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102275','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.26666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102275_USAGE','conversion','ESRI','102275','EPSG','2198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102275','NAD_1983_HARN_StatePlane_Iowa_North_FIPS_1401',NULL,'EPSG','4400','EPSG','4152','ESRI','102275',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102275_USAGE','projected_crs','ESRI','102275','EPSG','2198','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102276','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102276_USAGE','conversion','ESRI','102276','EPSG','2199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102276','NAD_1983_HARN_StatePlane_Iowa_South_FIPS_1402',NULL,'EPSG','4400','EPSG','4152','ESRI','102276',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102276_USAGE','projected_crs','ESRI','102276','EPSG','2199','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102277','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102277_USAGE','conversion','ESRI','102277','EPSG','2200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102277','NAD_1983_HARN_StatePlane_Kansas_North_FIPS_1501',NULL,'EPSG','4400','EPSG','4152','ESRI','102277',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102277_USAGE','projected_crs','ESRI','102277','EPSG','2200','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102278','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.56666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102278_USAGE','conversion','ESRI','102278','EPSG','2201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102278','NAD_1983_HARN_StatePlane_Kansas_South_FIPS_1502',NULL,'EPSG','4400','EPSG','4152','ESRI','102278',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102278_USAGE','projected_crs','ESRI','102278','EPSG','2201','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102279','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.96666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102279_USAGE','conversion','ESRI','102279','EPSG','2202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102279','NAD_1983_HARN_StatePlane_Kentucky_North_FIPS_1601',NULL,'EPSG','4400','EPSG','4152','ESRI','102279',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102279_USAGE','projected_crs','ESRI','102279','EPSG','2202','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102280','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.93333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102280_USAGE','conversion','ESRI','102280','EPSG','2203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102280','NAD_1983_HARN_StatePlane_Kentucky_South_FIPS_1602',NULL,'EPSG','4400','EPSG','4152','ESRI','102280',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102280_USAGE','projected_crs','ESRI','102280','EPSG','2203','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102281','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',31.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',32.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102281_USAGE','conversion','ESRI','102281','EPSG','2204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102281','NAD_1983_HARN_StatePlane_Louisiana_North_FIPS_1701',NULL,'EPSG','4400','EPSG','4152','ESRI','102281',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102281_USAGE','projected_crs','ESRI','102281','EPSG','2204','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102282','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.33333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.7,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102282_USAGE','conversion','ESRI','102282','EPSG','2529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102282','NAD_1983_HARN_StatePlane_Louisiana_South_FIPS_1702',NULL,'EPSG','4400','EPSG','4152','ESRI','102282',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102282_USAGE','projected_crs','ESRI','102282','EPSG','2529','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102283','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-68.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102283_USAGE','conversion','ESRI','102283','EPSG','2206','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102283','NAD_1983_HARN_StatePlane_Maine_East_FIPS_1801',NULL,'EPSG','4400','EPSG','4152','ESRI','102283',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102283_USAGE','projected_crs','ESRI','102283','EPSG','2206','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102284','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102284_USAGE','conversion','ESRI','102284','EPSG','2207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102284','NAD_1983_HARN_StatePlane_Maine_West_FIPS_1802',NULL,'EPSG','4400','EPSG','4152','ESRI','102284',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102284_USAGE','projected_crs','ESRI','102284','EPSG','2207','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102285','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.45,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102285_USAGE','conversion','ESRI','102285','EPSG','1389','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102285','NAD_1983_HARN_StatePlane_Maryland_FIPS_1900',NULL,'EPSG','4400','EPSG','4152','ESRI','102285',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102285_USAGE','projected_crs','ESRI','102285','EPSG','1389','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102286','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-71.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',750000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102286_USAGE','conversion','ESRI','102286','EPSG','2209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102286','NAD_1983_HARN_StatePlane_Massachusetts_Mainland_FIPS_2001',NULL,'EPSG','4400','EPSG','4152','ESRI','102286',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102286_USAGE','projected_crs','ESRI','102286','EPSG','2209','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102287','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-70.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.28333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102287_USAGE','conversion','ESRI','102287','EPSG','2208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102287','NAD_1983_HARN_StatePlane_Massachusetts_Island_FIPS_2002',NULL,'EPSG','4400','EPSG','4152','ESRI','102287',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102287_USAGE','projected_crs','ESRI','102287','EPSG','2208','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102288','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.78333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',8000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102288_USAGE','conversion','ESRI','102288','EPSG','1723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102288','NAD_1983_HARN_StatePlane_Michigan_North_FIPS_2111',NULL,'EPSG','4400','EPSG','4152','ESRI','102288',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102288_USAGE','projected_crs','ESRI','102288','EPSG','1723','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102289','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.31666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',6000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102289_USAGE','conversion','ESRI','102289','EPSG','1724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102289','NAD_1983_HARN_StatePlane_Michigan_Central_FIPS_2112',NULL,'EPSG','4400','EPSG','4152','ESRI','102289',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102289_USAGE','projected_crs','ESRI','102289','EPSG','1724','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102290','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.1,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',4000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102290_USAGE','conversion','ESRI','102290','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102290','NAD_1983_HARN_StatePlane_Michigan_South_FIPS_2113',NULL,'EPSG','4400','EPSG','4152','ESRI','102290',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102290_USAGE','projected_crs','ESRI','102290','EPSG','1725','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102291','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.1,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.63333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102291_USAGE','conversion','ESRI','102291','EPSG','2214','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102291','NAD_1983_HARN_StatePlane_Minnesota_North_FIPS_2201',NULL,'EPSG','4400','EPSG','4152','ESRI','102291',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102291_USAGE','projected_crs','ESRI','102291','EPSG','2214','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102292','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.05,'EPSG','9102','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102292_USAGE','conversion','ESRI','102292','EPSG','2213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102292','NAD_1983_HARN_StatePlane_Minnesota_Central_FIPS_2202',NULL,'EPSG','4400','EPSG','4152','ESRI','102292',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102292_USAGE','projected_crs','ESRI','102292','EPSG','2213','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102293','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.21666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102293_USAGE','conversion','ESRI','102293','EPSG','2215','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102293','NAD_1983_HARN_StatePlane_Minnesota_South_FIPS_2203',NULL,'EPSG','4400','EPSG','4152','ESRI','102293',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102293_USAGE','projected_crs','ESRI','102293','EPSG','2215','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102294','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102294_USAGE','conversion','ESRI','102294','EPSG','2216','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102294','NAD_1983_HARN_StatePlane_Mississippi_East_FIPS_2301',NULL,'EPSG','4400','EPSG','4152','ESRI','102294',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102294_USAGE','projected_crs','ESRI','102294','EPSG','2216','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102295','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102295_USAGE','conversion','ESRI','102295','EPSG','2217','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102295','NAD_1983_HARN_StatePlane_Mississippi_West_FIPS_2302',NULL,'EPSG','4400','EPSG','4152','ESRI','102295',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102295_USAGE','projected_crs','ESRI','102295','EPSG','2217','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102296','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102296_USAGE','conversion','ESRI','102296','EPSG','2219','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102296','NAD_1983_HARN_StatePlane_Missouri_East_FIPS_2401',NULL,'EPSG','4400','EPSG','4152','ESRI','102296',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102296_USAGE','projected_crs','ESRI','102296','EPSG','2219','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102297','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102297_USAGE','conversion','ESRI','102297','EPSG','2218','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102297','NAD_1983_HARN_StatePlane_Missouri_Central_FIPS_2402',NULL,'EPSG','4400','EPSG','4152','ESRI','102297',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102297_USAGE','projected_crs','ESRI','102297','EPSG','2218','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102298','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.16666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-94.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',850000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102298_USAGE','conversion','ESRI','102298','EPSG','2220','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102298','NAD_1983_HARN_StatePlane_Missouri_West_FIPS_2403',NULL,'EPSG','4400','EPSG','4152','ESRI','102298',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102298_USAGE','projected_crs','ESRI','102298','EPSG','2220','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102299','Berghaus_Star_AAG',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["Berghaus_Star_AAG",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Berghaus_Star"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-52.0],PARAMETER["Latitude_Of_Origin",90.0],PARAMETER["XY_Plane_Rotation",36.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102299_USAGE','projected_crs','ESRI','102299','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102300','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-109.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102300_USAGE','conversion','ESRI','102300','EPSG','1395','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102300','NAD_1983_HARN_StatePlane_Montana_FIPS_2500',NULL,'EPSG','4400','EPSG','4152','ESRI','102300',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102300_USAGE','projected_crs','ESRI','102300','EPSG','1395','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102304','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.0,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102304_USAGE','conversion','ESRI','102304','EPSG','1396','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102304','NAD_1983_HARN_StatePlane_Nebraska_FIPS_2600',NULL,'EPSG','4400','EPSG','4152','ESRI','102304',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102304_USAGE','projected_crs','ESRI','102304','EPSG','1396','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102305','CRTM05',NULL,'EPSG','4400','EPSG','5365','EPSG','5366',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102305_USAGE','projected_crs','ESRI','102305','EPSG','3849','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102306','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',84.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102306_USAGE','conversion','ESRI','102306','EPSG','1171','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102306','Nepal_Nagarkot_TM',NULL,'EPSG','4400','EPSG','6207','ESRI','102306',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102306_USAGE','projected_crs','ESRI','102306','EPSG','1171','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102307','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',8000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102307_USAGE','conversion','ESRI','102307','EPSG','2224','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102307','NAD_1983_HARN_StatePlane_Nevada_East_FIPS_2701',NULL,'EPSG','4400','EPSG','4152','ESRI','102307',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102307_USAGE','projected_crs','ESRI','102307','EPSG','2224','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102308','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-116.6666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102308_USAGE','conversion','ESRI','102308','EPSG','2223','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102308','NAD_1983_HARN_StatePlane_Nevada_Central_FIPS_2702',NULL,'EPSG','4400','EPSG','4152','ESRI','102308',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102308_USAGE','projected_crs','ESRI','102308','EPSG','2223','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102309','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102309_USAGE','conversion','ESRI','102309','EPSG','2225','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102309','NAD_1983_HARN_StatePlane_Nevada_West_FIPS_2703',NULL,'EPSG','4400','EPSG','4152','ESRI','102309',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102309_USAGE','projected_crs','ESRI','102309','EPSG','2225','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102310','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102310_USAGE','conversion','ESRI','102310','EPSG','1398','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102310','NAD_1983_HARN_StatePlane_New_Hampshire_FIPS_2800',NULL,'EPSG','4400','EPSG','4152','ESRI','102310',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102310_USAGE','projected_crs','ESRI','102310','EPSG','1398','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102311','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102311_USAGE','conversion','ESRI','102311','EPSG','1399','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102311','NAD_1983_HARN_StatePlane_New_Jersey_FIPS_2900',NULL,'EPSG','4400','EPSG','4152','ESRI','102311',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102311_USAGE','projected_crs','ESRI','102311','EPSG','1399','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102312','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-104.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999090909090909,'EPSG','9201','EPSG','8806','False easting',165000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102312_USAGE','conversion','ESRI','102312','EPSG','2228','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102312','NAD_1983_HARN_StatePlane_New_Mexico_East_FIPS_3001',NULL,'EPSG','4400','EPSG','4152','ESRI','102312',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102312_USAGE','projected_crs','ESRI','102312','EPSG','2228','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102313','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-106.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102313_USAGE','conversion','ESRI','102313','EPSG','2231','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102313','NAD_1983_HARN_StatePlane_New_Mexico_Central_FIPS_3002',NULL,'EPSG','4400','EPSG','4152','ESRI','102313',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102313_USAGE','projected_crs','ESRI','102313','EPSG','2231','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102314','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999166666666667,'EPSG','9201','EPSG','8806','False easting',830000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102314_USAGE','conversion','ESRI','102314','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102314','NAD_1983_HARN_StatePlane_New_Mexico_West_FIPS_3003',NULL,'EPSG','4400','EPSG','4152','ESRI','102314',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102314_USAGE','projected_crs','ESRI','102314','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102315','NAD_1983_HARN_StatePlane_New_York_East_FIPS_3101',NULL,'EPSG','4400','EPSG','4152','ESRI','102311',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102315_USAGE','projected_crs','ESRI','102315','EPSG','2234','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102316','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102316_USAGE','conversion','ESRI','102316','EPSG','2233','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102316','NAD_1983_HARN_StatePlane_New_York_Central_FIPS_3102',NULL,'EPSG','4400','EPSG','4152','ESRI','102316',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102316_USAGE','projected_crs','ESRI','102316','EPSG','2233','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102317','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-78.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102317_USAGE','conversion','ESRI','102317','EPSG','2236','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102317','NAD_1983_HARN_StatePlane_New_York_West_FIPS_3103',NULL,'EPSG','4400','EPSG','4152','ESRI','102317',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102317_USAGE','projected_crs','ESRI','102317','EPSG','2236','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102318','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102318_USAGE','conversion','ESRI','102318','EPSG','2235','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102318','NAD_1983_HARN_StatePlane_New_York_Long_Island_FIPS_3104',NULL,'EPSG','4400','EPSG','4152','ESRI','102318',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102318_USAGE','projected_crs','ESRI','102318','EPSG','2235','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102319','CGRS_1993_LTM',NULL,'EPSG','4400','EPSG','6311','EPSG','6308',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102319_USAGE','projected_crs','ESRI','102319','EPSG','3236','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102320','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102320_USAGE','conversion','ESRI','102320','EPSG','2237','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102320','NAD_1983_HARN_StatePlane_North_Dakota_North_FIPS_3301',NULL,'EPSG','4400','EPSG','4152','ESRI','102320',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102320_USAGE','projected_crs','ESRI','102320','EPSG','2237','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102321','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102321_USAGE','conversion','ESRI','102321','EPSG','2238','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102321','NAD_1983_HARN_StatePlane_North_Dakota_South_FIPS_3302',NULL,'EPSG','4400','EPSG','4152','ESRI','102321',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102321_USAGE','projected_crs','ESRI','102321','EPSG','2238','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102322','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.7,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102322_USAGE','conversion','ESRI','102322','EPSG','2239','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102322','NAD_1983_HARN_StatePlane_Ohio_North_FIPS_3401',NULL,'EPSG','4400','EPSG','4152','ESRI','102322',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102322_USAGE','projected_crs','ESRI','102322','EPSG','2239','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102323','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102323_USAGE','conversion','ESRI','102323','EPSG','2240','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102323','NAD_1983_HARN_StatePlane_Ohio_South_FIPS_3402',NULL,'EPSG','4400','EPSG','4152','ESRI','102323',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102323_USAGE','projected_crs','ESRI','102323','EPSG','2240','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102324','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102324_USAGE','conversion','ESRI','102324','EPSG','2241','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102324','NAD_1983_HARN_StatePlane_Oklahoma_North_FIPS_3501',NULL,'EPSG','4400','EPSG','4152','ESRI','102324',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102324_USAGE','projected_crs','ESRI','102324','EPSG','2241','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102325','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102325_USAGE','conversion','ESRI','102325','EPSG','2242','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102325','NAD_1983_HARN_StatePlane_Oklahoma_South_FIPS_3502',NULL,'EPSG','4400','EPSG','4152','ESRI','102325',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102325_USAGE','projected_crs','ESRI','102325','EPSG','2242','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102326','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9102','EPSG','8826','Easting at false origin',2500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102326_USAGE','conversion','ESRI','102326','EPSG','2243','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102326','NAD_1983_HARN_StatePlane_Oregon_North_FIPS_3601',NULL,'EPSG','4400','EPSG','4152','ESRI','102326',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102326_USAGE','projected_crs','ESRI','102326','EPSG','2243','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102327','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.0,'EPSG','9102','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102327_USAGE','conversion','ESRI','102327','EPSG','2244','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102327','NAD_1983_HARN_StatePlane_Oregon_South_FIPS_3602',NULL,'EPSG','4400','EPSG','4152','ESRI','102327',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102327_USAGE','projected_crs','ESRI','102327','EPSG','2244','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','32','Germany - west of 12~E','Germany - west of 12~E',47.27,55.9,5.5,12.0,0); INSERT INTO "conversion" VALUES('ESRI','102328','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102328_USAGE','conversion','ESRI','102328','ESRI','32','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102328','ETRS_1989_UTM_Zone_32N_7stellen',NULL,'EPSG','4400','EPSG','4258','ESRI','102328',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102328_USAGE','projected_crs','ESRI','102328','ESRI','32','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102329','ETRS_1989_UTM_Zone_32N_8stellen',NULL,'EPSG','4400','EPSG','4258','EPSG','4648',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102329_USAGE','projected_crs','ESRI','102329','EPSG','2862','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102330','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999375,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102330_USAGE','conversion','ESRI','102330','EPSG','1408','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102330','NAD_1983_HARN_StatePlane_Rhode_Island_FIPS_3800',NULL,'EPSG','4400','EPSG','4152','ESRI','102330',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102330_USAGE','projected_crs','ESRI','102330','EPSG','1408','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102331','PTRA08_UTM_Zone_25N',NULL,'EPSG','4400','EPSG','5013','EPSG','16025',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102331_USAGE','projected_crs','ESRI','102331','EPSG','3682','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102332','PTRA08_UTM_Zone_26N',NULL,'EPSG','4400','EPSG','5013','EPSG','16026',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102332_USAGE','projected_crs','ESRI','102332','EPSG','3677','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102333','PTRA08_UTM_Zone_28N',NULL,'EPSG','4400','EPSG','5013','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102333_USAGE','projected_crs','ESRI','102333','EPSG','3678','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102334','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.41666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102334_USAGE','conversion','ESRI','102334','EPSG','2249','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102334','NAD_1983_HARN_StatePlane_South_Dakota_North_FIPS_4001',NULL,'EPSG','4400','EPSG','4152','ESRI','102334',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102334_USAGE','projected_crs','ESRI','102334','EPSG','2249','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102335','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.4,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102335_USAGE','conversion','ESRI','102335','EPSG','2250','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102335','NAD_1983_HARN_StatePlane_South_Dakota_South_FIPS_4002',NULL,'EPSG','4400','EPSG','4152','ESRI','102335',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102335_USAGE','projected_crs','ESRI','102335','EPSG','2250','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102336','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102336_USAGE','conversion','ESRI','102336','EPSG','1411','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102336','NAD_1983_HARN_StatePlane_Tennessee_FIPS_4100',NULL,'EPSG','4400','EPSG','4152','ESRI','102336',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102336_USAGE','projected_crs','ESRI','102336','EPSG','1411','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102337','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-101.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.65,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.18333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102337_USAGE','conversion','ESRI','102337','EPSG','2253','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102337','NAD_1983_HARN_StatePlane_Texas_North_FIPS_4201',NULL,'EPSG','4400','EPSG','4152','ESRI','102337',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102337_USAGE','projected_crs','ESRI','102337','EPSG','2253','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102338','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.13333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102338_USAGE','conversion','ESRI','102338','EPSG','2254','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102338','NAD_1983_HARN_StatePlane_Texas_North_Central_FIPS_4202',NULL,'EPSG','4400','EPSG','4152','ESRI','102338',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102338_USAGE','projected_crs','ESRI','102338','EPSG','2254','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102339','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',30.11666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',31.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102339_USAGE','conversion','ESRI','102339','EPSG','2252','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102339','NAD_1983_HARN_StatePlane_Texas_Central_FIPS_4203',NULL,'EPSG','4400','EPSG','4152','ESRI','102339',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102339_USAGE','projected_crs','ESRI','102339','EPSG','2252','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102340','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',28.38333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.28333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102340_USAGE','conversion','ESRI','102340','EPSG','2527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102340','NAD_1983_HARN_StatePlane_Texas_South_Central_FIPS_4204',NULL,'EPSG','4400','EPSG','4152','ESRI','102340',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102340_USAGE','projected_crs','ESRI','102340','EPSG','2527','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102341','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',26.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',27.83333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102341_USAGE','conversion','ESRI','102341','EPSG','2528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102341','NAD_1983_HARN_StatePlane_Texas_South_FIPS_4205',NULL,'EPSG','4400','EPSG','4152','ESRI','102341',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102341_USAGE','projected_crs','ESRI','102341','EPSG','2528','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102342','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102342_USAGE','conversion','ESRI','102342','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102342','NAD_1983_HARN_StatePlane_Utah_North_FIPS_4301',NULL,'EPSG','4400','EPSG','4152','ESRI','102342',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102342_USAGE','projected_crs','ESRI','102342','EPSG','2258','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102343','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.01666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.65,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102343_USAGE','conversion','ESRI','102343','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102343','NAD_1983_HARN_StatePlane_Utah_Central_FIPS_4302',NULL,'EPSG','4400','EPSG','4152','ESRI','102343',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102343_USAGE','projected_crs','ESRI','102343','EPSG','2257','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102344','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.21666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.35,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102344_USAGE','conversion','ESRI','102344','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102344','NAD_1983_HARN_StatePlane_Utah_South_FIPS_4303',NULL,'EPSG','4400','EPSG','4152','ESRI','102344',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102344_USAGE','projected_crs','ESRI','102344','EPSG','2259','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102345','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999642857142857,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102345_USAGE','conversion','ESRI','102345','EPSG','1414','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102345','NAD_1983_HARN_StatePlane_Vermont_FIPS_4400',NULL,'EPSG','4400','EPSG','4152','ESRI','102345',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102345_USAGE','projected_crs','ESRI','102345','EPSG','1414','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102346','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.2,'EPSG','9102','EPSG','8826','Easting at false origin',3500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102346_USAGE','conversion','ESRI','102346','EPSG','2260','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102346','NAD_1983_HARN_StatePlane_Virginia_North_FIPS_4501',NULL,'EPSG','4400','EPSG','4152','ESRI','102346',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102346_USAGE','projected_crs','ESRI','102346','EPSG','2260','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102347','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.76666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',3500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102347_USAGE','conversion','ESRI','102347','EPSG','2261','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102347','NAD_1983_HARN_StatePlane_Virginia_South_FIPS_4502',NULL,'EPSG','4400','EPSG','4152','ESRI','102347',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102347_USAGE','projected_crs','ESRI','102347','EPSG','2261','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102348','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.8333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102348_USAGE','conversion','ESRI','102348','EPSG','2273','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102348','NAD_1983_HARN_StatePlane_Washington_North_FIPS_4601',NULL,'EPSG','4400','EPSG','4152','ESRI','102348',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102348_USAGE','projected_crs','ESRI','102348','EPSG','2273','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102349','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102349_USAGE','conversion','ESRI','102349','EPSG','2274','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102349','NAD_1983_HARN_StatePlane_Washington_South_FIPS_4602',NULL,'EPSG','4400','EPSG','4152','ESRI','102349',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102349_USAGE','projected_crs','ESRI','102349','EPSG','2274','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102350','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.25,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102350_USAGE','conversion','ESRI','102350','EPSG','2264','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102350','NAD_1983_HARN_StatePlane_West_Virginia_North_FIPS_4701',NULL,'EPSG','4400','EPSG','4152','ESRI','102350',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102350_USAGE','projected_crs','ESRI','102350','EPSG','2264','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102351','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102351_USAGE','conversion','ESRI','102351','EPSG','2265','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102351','NAD_1983_HARN_StatePlane_West_Virginia_South_FIPS_4702',NULL,'EPSG','4400','EPSG','4152','ESRI','102351',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102351_USAGE','projected_crs','ESRI','102351','EPSG','2265','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102352','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102352_USAGE','conversion','ESRI','102352','EPSG','2267','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102352','NAD_1983_HARN_StatePlane_Wisconsin_North_FIPS_4801',NULL,'EPSG','4400','EPSG','4152','ESRI','102352',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102352_USAGE','projected_crs','ESRI','102352','EPSG','2267','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102353','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102353_USAGE','conversion','ESRI','102353','EPSG','2266','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102353','NAD_1983_HARN_StatePlane_Wisconsin_Central_FIPS_4802',NULL,'EPSG','4400','EPSG','4152','ESRI','102353',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102353_USAGE','projected_crs','ESRI','102353','EPSG','2266','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102354','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.06666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102354_USAGE','conversion','ESRI','102354','EPSG','2268','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102354','NAD_1983_HARN_StatePlane_Wisconsin_South_FIPS_4803',NULL,'EPSG','4400','EPSG','4152','ESRI','102354',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102354_USAGE','projected_crs','ESRI','102354','EPSG','2268','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102355','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102355_USAGE','conversion','ESRI','102355','EPSG','2269','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102355','NAD_1983_HARN_StatePlane_Wyoming_East_FIPS_4901',NULL,'EPSG','4400','EPSG','4152','ESRI','102355',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102355_USAGE','projected_crs','ESRI','102355','EPSG','2269','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102356','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102356_USAGE','conversion','ESRI','102356','EPSG','2270','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102356','NAD_1983_HARN_StatePlane_Wyoming_East_Central_FIPS_4902',NULL,'EPSG','4400','EPSG','4152','ESRI','102356',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102356_USAGE','projected_crs','ESRI','102356','EPSG','2270','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102357','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-108.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102357_USAGE','conversion','ESRI','102357','EPSG','2272','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102357','NAD_1983_HARN_StatePlane_Wyoming_West_Central_FIPS_4903',NULL,'EPSG','4400','EPSG','4152','ESRI','102357',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102357_USAGE','projected_crs','ESRI','102357','EPSG','2272','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102358','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.0833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102358_USAGE','conversion','ESRI','102358','EPSG','2271','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102358','NAD_1983_HARN_StatePlane_Wyoming_West_FIPS_4904',NULL,'EPSG','4400','EPSG','4152','ESRI','102358',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102358_USAGE','projected_crs','ESRI','102358','EPSG','2271','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102359','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',3500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102359_USAGE','conversion','ESRI','102359','ESRI','32','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102359','ETRS_1989_UTM_Zone_33N_7stellen',NULL,'EPSG','4400','EPSG','4258','ESRI','102359',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102359_USAGE','projected_crs','ESRI','102359','ESRI','32','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102360','ETRS_1989_UTM_Zone_33N_8stellen',NULL,'EPSG','4400','EPSG','4258','EPSG','5648',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102360_USAGE','projected_crs','ESRI','102360','EPSG','2862','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102361','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',17.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.43333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',18.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',18.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102361_USAGE','conversion','ESRI','102361','EPSG','3634','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102361','NAD_1983_HARN_StatePlane_Puerto_Rico_Virgin_Islands_FIPS_5200',NULL,'EPSG','4400','EPSG','4152','ESRI','102361',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102361_USAGE','projected_crs','ESRI','102361','EPSG','3634','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102362','ETRS_1989_UTM_Zone_N32',NULL,'EPSG','4400','EPSG','4258','EPSG','4648',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102362_USAGE','projected_crs','ESRI','102362','EPSG','2861','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102363','NAD_1983_HARN_StatePlane_Kentucky_FIPS_1600',NULL,'EPSG','4400','EPSG','4152','ESRI','65163',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102363_USAGE','projected_crs','ESRI','102363','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102364','NAD_1983_CORS96_UTM_Zone_59N',NULL,'EPSG','4400','EPSG','6783','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102364_USAGE','projected_crs','ESRI','102364','EPSG','3372','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102365','NAD_1983_CORS96_UTM_Zone_60N',NULL,'EPSG','4400','EPSG','6783','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102365_USAGE','projected_crs','ESRI','102365','EPSG','3373','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102366','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',57.0,'EPSG','9102','EPSG','8812','Longitude of projection centre',-133.6666666666667,'EPSG','9102','EPSG','8813','Azimuth at projection centre',-36.86989764583333,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',-36.86989764583333,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9999,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102366_USAGE','conversion','ESRI','102366','EPSG','2156','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102366','NAD_1983_CORS96_StatePlane_Alaska_1_FIPS_5001',NULL,'EPSG','4400','EPSG','6783','ESRI','102366',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102366_USAGE','projected_crs','ESRI','102366','EPSG','2156','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102367','NAD_1983_CORS96_StatePlane_Alaska_2_FIPS_5002',NULL,'EPSG','4400','EPSG','6783','EPSG','15032',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102367_USAGE','projected_crs','ESRI','102367','EPSG','2158','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102368','NAD_1983_CORS96_StatePlane_Alaska_3_FIPS_5003',NULL,'EPSG','4400','EPSG','6783','EPSG','15033',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102368_USAGE','projected_crs','ESRI','102368','EPSG','2159','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102369','NAD_1983_CORS96_StatePlane_Alaska_4_FIPS_5004',NULL,'EPSG','4400','EPSG','6783','EPSG','15034',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102369_USAGE','projected_crs','ESRI','102369','EPSG','2160','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102370','NAD_1983_CORS96_StatePlane_Alaska_5_FIPS_5005',NULL,'EPSG','4400','EPSG','6783','EPSG','15035',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102370_USAGE','projected_crs','ESRI','102370','EPSG','2161','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102371','NAD_1983_CORS96_StatePlane_Alaska_6_FIPS_5006',NULL,'EPSG','4400','EPSG','6783','EPSG','15036',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102371_USAGE','projected_crs','ESRI','102371','EPSG','2162','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102372','NAD_1983_CORS96_StatePlane_Alaska_7_FIPS_5007',NULL,'EPSG','4400','EPSG','6783','EPSG','15037',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102372_USAGE','projected_crs','ESRI','102372','EPSG','2163','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102373','NAD_1983_CORS96_StatePlane_Alaska_8_FIPS_5008',NULL,'EPSG','4400','EPSG','6783','EPSG','15038',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102373_USAGE','projected_crs','ESRI','102373','EPSG','2164','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102374','NAD_1983_CORS96_StatePlane_Alaska_9_FIPS_5009',NULL,'EPSG','4400','EPSG','6783','EPSG','15039',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102374_USAGE','projected_crs','ESRI','102374','EPSG','2165','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102375','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',51.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-176.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',51.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',53.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102375_USAGE','conversion','ESRI','102375','EPSG','2157','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102375','NAD_1983_CORS96_StatePlane_Alaska_10_FIPS_5010',NULL,'EPSG','4400','EPSG','6783','ESRI','102375',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102375_USAGE','projected_crs','ESRI','102375','EPSG','2157','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102376','NAD_1983_CORS96_StatePlane_Oregon_North_FIPS_3601',NULL,'EPSG','4400','EPSG','6783','ESRI','102326',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102376_USAGE','projected_crs','ESRI','102376','EPSG','2243','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102377','NAD_1983_CORS96_StatePlane_Oregon_South_FIPS_3602',NULL,'EPSG','4400','EPSG','6783','ESRI','102327',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102377_USAGE','projected_crs','ESRI','102377','EPSG','2244','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102378','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9102','EPSG','8826','Easting at false origin',8202099.737532808,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102378_USAGE','conversion','ESRI','102378','EPSG','2243','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102378','NAD_1983_CORS96_StatePlane_Oregon_North_FIPS_3601_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102378',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102378_USAGE','projected_crs','ESRI','102378','EPSG','2243','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102379','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.0,'EPSG','9102','EPSG','8826','Easting at false origin',4921259.842519685,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102379_USAGE','conversion','ESRI','102379','EPSG','2244','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102379','NAD_1983_CORS96_StatePlane_Oregon_South_FIPS_3602_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102379',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102379_USAGE','projected_crs','ESRI','102379','EPSG','2244','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102380','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102380_USAGE','conversion','ESRI','102380','EPSG','1406','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102380','NAD_1983_CORS96_Oregon_Statewide_Lambert',NULL,'EPSG','4400','EPSG','6783','ESRI','102380',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102380_USAGE','projected_crs','ESRI','102380','EPSG','1406','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102381','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',1312335.958005249,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102381_USAGE','conversion','ESRI','102381','EPSG','1406','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102381','NAD_1983_CORS96_Oregon_Statewide_Lambert_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102381',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102381_USAGE','projected_crs','ESRI','102381','EPSG','1406','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102382','NAD_1983_2011_UTM_Zone_13N',NULL,'EPSG','4400','EPSG','6318','EPSG','16013',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102382_USAGE','projected_crs','ESRI','102382','EPSG','3500','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102383','NAD_1983_2011_UTM_Zone_14N',NULL,'EPSG','4400','EPSG','6318','EPSG','16014',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102383_USAGE','projected_crs','ESRI','102383','EPSG','3501','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102384','NAD_1983_2011_UTM_Zone_15N',NULL,'EPSG','4400','EPSG','6318','EPSG','16015',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102384_USAGE','projected_crs','ESRI','102384','EPSG','3502','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102385','NAD_1983_2011_UTM_Zone_16N',NULL,'EPSG','4400','EPSG','6318','EPSG','16016',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102385_USAGE','projected_crs','ESRI','102385','EPSG','3503','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102386','NAD_1983_2011_UTM_Zone_17N',NULL,'EPSG','4400','EPSG','6318','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102386_USAGE','projected_crs','ESRI','102386','EPSG','3504','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102387','NAD_1983_2011_UTM_Zone_18N',NULL,'EPSG','4400','EPSG','6318','EPSG','16018',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102387_USAGE','projected_crs','ESRI','102387','EPSG','3505','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102388','NAD_1983_2011_UTM_Zone_19N',NULL,'EPSG','4400','EPSG','6318','EPSG','16019',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102388_USAGE','projected_crs','ESRI','102388','EPSG','3506','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','33','USA - North Dakota - Fargo','USA - North Dakota - Fargo',46.7,47.0,-96.93,-96.75,0); INSERT INTO "projected_crs" VALUES('ESRI','102389','NAD_1983_Fargo_Ground_Coordinate_System',NULL,NULL,NULL,'EPSG','4269',NULL,NULL,'PROJCS["NAD_1983_Fargo_Ground_Coordinate_System",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Rectified_Skew_Orthomorphic_Natural_Origin"],PARAMETER["False_Easting",2869344.93],PARAMETER["False_Northing",-16657672.6488],PARAMETER["Scale_Factor",1.000038773618],PARAMETER["Azimuth",2.63389226],PARAMETER["Longitude_Of_Center",-96.88886388888889],PARAMETER["Latitude_Of_Center",46.99163611111111],PARAMETER["XY_Plane_Rotation",0.0],UNIT["Foot_US",0.3048006096012192]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102389_USAGE','projected_crs','ESRI','102389','ESRI','33','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102390','NAD_1983_HARN_Fargo_Ground_Coordinate_System',NULL,NULL,NULL,'EPSG','4152',NULL,NULL,'PROJCS["NAD_1983_HARN_Fargo_Ground_Coordinate_System",GEOGCS["GCS_North_American_1983_HARN",DATUM["D_North_American_1983_HARN",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Rectified_Skew_Orthomorphic_Natural_Origin"],PARAMETER["False_Easting",2869344.93],PARAMETER["False_Northing",-16657672.6488],PARAMETER["Scale_Factor",1.000038773618],PARAMETER["Azimuth",2.63389226],PARAMETER["Longitude_Of_Center",-96.88886388888889],PARAMETER["Latitude_Of_Center",46.99163611111111],PARAMETER["XY_Plane_Rotation",0.0],UNIT["Foot_US",0.3048006096012192]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102390_USAGE','projected_crs','ESRI','102390','ESRI','33','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102391','NAD_1983_2011_Fargo_Ground_Coordinate_System',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_2011_Fargo_Ground_Coordinate_System",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Rectified_Skew_Orthomorphic_Natural_Origin"],PARAMETER["False_Easting",2869344.93],PARAMETER["False_Northing",-16657672.6488],PARAMETER["Scale_Factor",1.000038773618],PARAMETER["Azimuth",2.63389226],PARAMETER["Longitude_Of_Center",-96.88886388888889],PARAMETER["Latitude_Of_Center",46.99163611111111],PARAMETER["XY_Plane_Rotation",0.0],UNIT["Foot_US",0.3048006096012192]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102391_USAGE','projected_crs','ESRI','102391','ESRI','33','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102392','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102392_USAGE','conversion','ESRI','102392','EPSG','2160','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102392','NAD_1983_2011_StatePlane_Alaska_4_FIPS_5004_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102392',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102392_USAGE','projected_crs','ESRI','102392','EPSG','2160','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102393','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-154.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102393_USAGE','conversion','ESRI','102393','EPSG','2161','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102393','NAD_1983_2011_StatePlane_Alaska_5_FIPS_5005_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102393',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102393_USAGE','projected_crs','ESRI','102393','EPSG','2161','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102394','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102394_USAGE','conversion','ESRI','102394','EPSG','2162','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102394','NAD_1983_2011_StatePlane_Alaska_6_FIPS_5006_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102394',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102394_USAGE','projected_crs','ESRI','102394','EPSG','2162','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102395','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-162.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102395_USAGE','conversion','ESRI','102395','EPSG','2163','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102395','NAD_1983_2011_StatePlane_Alaska_7_FIPS_5007_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102395',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102395_USAGE','projected_crs','ESRI','102395','EPSG','2163','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102396','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-166.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102396_USAGE','conversion','ESRI','102396','EPSG','2164','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102396','NAD_1983_2011_StatePlane_Alaska_8_FIPS_5008_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102396',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102396_USAGE','projected_crs','ESRI','102396','EPSG','2164','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102397','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-170.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102397_USAGE','conversion','ESRI','102397','EPSG','2165','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102397','NAD_1983_2011_StatePlane_Alaska_9_FIPS_5009_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102397',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102397_USAGE','projected_crs','ESRI','102397','EPSG','2165','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102398','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',51.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-176.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',51.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',53.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',3280833.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102398_USAGE','conversion','ESRI','102398','EPSG','2157','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102398','NAD_1983_2011_StatePlane_Alaska_10_FIPS_5010_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102398',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102398_USAGE','projected_crs','ESRI','102398','EPSG','2157','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','34','USA - Montana, North Dakota, and South Dakota','USA - Montana, North Dakota, and South Dakota',44.3,49.1,-116.1,-96.3,0); INSERT INTO "conversion" VALUES('ESRI','102399','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',42.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-106.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102399_USAGE','conversion','ESRI','102399','ESRI','34','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102399','NAD_1983_Albers_BLM_MT_ND_SD',NULL,'EPSG','4400','EPSG','4269','ESRI','102399',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102399_USAGE','projected_crs','ESRI','102399','ESRI','34','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102400','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',51.1666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-0.158333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999999,'EPSG','9201','EPSG','8806','False easting',78250.0,'EPSG','9001','EPSG','8807','False northing',-2800.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102400_USAGE','conversion','ESRI','102400','ESRI','2','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102400','London_Survey_Grid',NULL,'EPSG','4400','ESRI','104050','ESRI','102400',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102400_USAGE','projected_crs','ESRI','102400','ESRI','2','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102401','NAD_1983_CORS96_UTM_Zone_1N',NULL,'EPSG','4400','EPSG','6783','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102401_USAGE','projected_crs','ESRI','102401','EPSG','3374','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102402','NAD_1983_CORS96_UTM_Zone_2N',NULL,'EPSG','4400','EPSG','6783','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102402_USAGE','projected_crs','ESRI','102402','EPSG','3375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102403','NAD_1983_CORS96_UTM_Zone_3N',NULL,'EPSG','4400','EPSG','6783','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102403_USAGE','projected_crs','ESRI','102403','EPSG','2133','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102404','NAD_1983_CORS96_UTM_Zone_4N',NULL,'EPSG','4400','EPSG','6783','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102404_USAGE','projected_crs','ESRI','102404','EPSG','2133','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102405','NAD_1983_CORS96_UTM_Zone_5N',NULL,'EPSG','4400','EPSG','6783','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102405_USAGE','projected_crs','ESRI','102405','EPSG','2135','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102406','NAD_1983_CORS96_UTM_Zone_6N',NULL,'EPSG','4400','EPSG','6783','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102406_USAGE','projected_crs','ESRI','102406','EPSG','2136','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102407','NAD_1983_CORS96_UTM_Zone_7N',NULL,'EPSG','4400','EPSG','6783','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102407_USAGE','projected_crs','ESRI','102407','EPSG','3494','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102408','NAD_1983_CORS96_UTM_Zone_8N',NULL,'EPSG','4400','EPSG','6783','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102408_USAGE','projected_crs','ESRI','102408','EPSG','3495','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102409','NAD_1983_CORS96_UTM_Zone_9N',NULL,'EPSG','4400','EPSG','6783','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102409_USAGE','projected_crs','ESRI','102409','EPSG','3496','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102410','NAD_1983_CORS96_UTM_Zone_10N',NULL,'EPSG','4400','EPSG','6783','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102410_USAGE','projected_crs','ESRI','102410','EPSG','3497','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102411','NAD_1983_CORS96_UTM_Zone_11N',NULL,'EPSG','4400','EPSG','6783','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102411_USAGE','projected_crs','ESRI','102411','EPSG','3498','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102412','NAD_1983_CORS96_UTM_Zone_12N',NULL,'EPSG','4400','EPSG','6783','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102412_USAGE','projected_crs','ESRI','102412','EPSG','3499','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102413','NAD_1983_CORS96_UTM_Zone_13N',NULL,'EPSG','4400','EPSG','6783','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102413_USAGE','projected_crs','ESRI','102413','EPSG','3500','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102414','NAD_1983_CORS96_UTM_Zone_14N',NULL,'EPSG','4400','EPSG','6783','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102414_USAGE','projected_crs','ESRI','102414','EPSG','3501','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102415','NAD_1983_CORS96_UTM_Zone_15N',NULL,'EPSG','4400','EPSG','6783','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102415_USAGE','projected_crs','ESRI','102415','EPSG','3502','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102416','NAD_1983_CORS96_UTM_Zone_16N',NULL,'EPSG','4400','EPSG','6783','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102416_USAGE','projected_crs','ESRI','102416','EPSG','3503','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102417','NAD_1983_CORS96_UTM_Zone_17N',NULL,'EPSG','4400','EPSG','6783','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102417_USAGE','projected_crs','ESRI','102417','EPSG','3504','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102418','NAD_1983_CORS96_UTM_Zone_18N',NULL,'EPSG','4400','EPSG','6783','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102418_USAGE','projected_crs','ESRI','102418','EPSG','3505','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102419','NAD_1983_CORS96_UTM_Zone_19N',NULL,'EPSG','4400','EPSG','6783','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102419_USAGE','projected_crs','ESRI','102419','EPSG','3506','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102420','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',65.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-19.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',64.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102420_USAGE','conversion','ESRI','102420','EPSG','1120','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102420','ISN_2004_Lambert_2004',NULL,'EPSG','4400','EPSG','5324','ESRI','102420',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102420_USAGE','projected_crs','ESRI','102420','EPSG','1120','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','35','ARC System - Zone 1','ARC System - Zone 1',0.0,32.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102421','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',22.94791772,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102421_USAGE','conversion','ESRI','102421','ESRI','35','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102421','WGS_1984_ARC_System_Zone_01',NULL,'EPSG','4400','EPSG','4326','ESRI','102421',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102421_USAGE','projected_crs','ESRI','102421','ESRI','35','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','36','ARC System - Zone 2','ARC System - Zone 2',32.0,48.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102422','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',41.12682127,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102422_USAGE','conversion','ESRI','102422','ESRI','36','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102422','WGS_1984_ARC_System_Zone_02',NULL,'EPSG','4400','EPSG','4326','ESRI','102422',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102422_USAGE','projected_crs','ESRI','102422','ESRI','36','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','37','ARC System - Zone 3','ARC System - Zone 3',48.0,56.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102423','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',52.28859923,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102423_USAGE','conversion','ESRI','102423','ESRI','37','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102423','WGS_1984_ARC_System_Zone_03',NULL,'EPSG','4400','EPSG','4326','ESRI','102423',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102423_USAGE','projected_crs','ESRI','102423','ESRI','37','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','38','ARC System - Zone 4','ARC System - Zone 4',56.0,64.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102424','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',60.32378942,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102424_USAGE','conversion','ESRI','102424','ESRI','38','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102424','WGS_1984_ARC_System_Zone_04',NULL,'EPSG','4400','EPSG','4326','ESRI','102424',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102424_USAGE','projected_crs','ESRI','102424','ESRI','38','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','39','ARC System - Zone 5','ARC System - Zone 5',64.0,68.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102425','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',66.09421768,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102425_USAGE','conversion','ESRI','102425','ESRI','39','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102425','WGS_1984_ARC_System_Zone_05',NULL,'EPSG','4400','EPSG','4326','ESRI','102425',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102425_USAGE','projected_crs','ESRI','102425','ESRI','39','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','40','ARC System - Zone 6','ARC System - Zone 6',68.0,72.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102426','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',70.10896259,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102426_USAGE','conversion','ESRI','102426','ESRI','40','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102426','WGS_1984_ARC_System_Zone_06',NULL,'EPSG','4400','EPSG','4326','ESRI','102426',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102426_USAGE','projected_crs','ESRI','102426','ESRI','40','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','41','ARC System - Zone 7','ARC System - Zone 7',72.0,76.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102427','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',74.13230145,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102427_USAGE','conversion','ESRI','102427','ESRI','41','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102427','WGS_1984_ARC_System_Zone_07',NULL,'EPSG','4400','EPSG','4326','ESRI','102427',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102427_USAGE','projected_crs','ESRI','102427','ESRI','41','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','42','ARC System - Zone 8','ARC System - Zone 8',76.0,80.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102428','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',78.1728375,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102428_USAGE','conversion','ESRI','102428','ESRI','42','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102428','WGS_1984_ARC_System_Zone_08',NULL,'EPSG','4400','EPSG','4326','ESRI','102428',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102428_USAGE','projected_crs','ESRI','102428','ESRI','42','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','43','ARC System - Zone 9','ARC System - Zone 9',80.0,90.0,-180.0,180.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102429','WGS_1984_ARC_System_Zone_09',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_ARC_System_Zone_09",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102429_USAGE','projected_crs','ESRI','102429','ESRI','43','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','44','ARC System - Zone 10','ARC System - Zone 10',-32.0,0.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102430','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-22.94791772,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102430_USAGE','conversion','ESRI','102430','ESRI','44','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102430','WGS_1984_ARC_System_Zone_10',NULL,'EPSG','4400','EPSG','4326','ESRI','102430',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102430_USAGE','projected_crs','ESRI','102430','ESRI','44','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','45','ARC System - Zone 11','ARC System - Zone 11',-48.0,-32.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102431','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-41.12682127,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102431_USAGE','conversion','ESRI','102431','ESRI','45','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102431','WGS_1984_ARC_System_Zone_11',NULL,'EPSG','4400','EPSG','4326','ESRI','102431',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102431_USAGE','projected_crs','ESRI','102431','ESRI','45','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','46','ARC System - Zone 12','ARC System - Zone 12',-56.0,-48.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102432','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-52.28859923,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102432_USAGE','conversion','ESRI','102432','ESRI','46','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102432','WGS_1984_ARC_System_Zone_12',NULL,'EPSG','4400','EPSG','4326','ESRI','102432',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102432_USAGE','projected_crs','ESRI','102432','ESRI','46','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','47','ARC System - Zone 13','ARC System - Zone 13',-64.0,-56.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102433','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-60.32378942,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102433_USAGE','conversion','ESRI','102433','ESRI','47','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102433','WGS_1984_ARC_System_Zone_13',NULL,'EPSG','4400','EPSG','4326','ESRI','102433',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102433_USAGE','projected_crs','ESRI','102433','ESRI','47','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','48','ARC System - Zone 14','ARC System - Zone 14',-68.0,-64.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102434','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-66.09421768,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102434_USAGE','conversion','ESRI','102434','ESRI','48','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102434','WGS_1984_ARC_System_Zone_14',NULL,'EPSG','4400','EPSG','4326','ESRI','102434',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102434_USAGE','projected_crs','ESRI','102434','ESRI','48','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','49','ARC System - Zone 15','ARC System - Zone 15',-72.0,-68.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102435','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-70.10896259,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102435_USAGE','conversion','ESRI','102435','ESRI','49','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102435','WGS_1984_ARC_System_Zone_15',NULL,'EPSG','4400','EPSG','4326','ESRI','102435',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102435_USAGE','projected_crs','ESRI','102435','ESRI','49','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','50','ARC System - Zone 16','ARC System - Zone 16',-76.0,-72.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102436','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-74.13230145,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102436_USAGE','conversion','ESRI','102436','ESRI','50','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102436','WGS_1984_ARC_System_Zone_16',NULL,'EPSG','4400','EPSG','4326','ESRI','102436',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102436_USAGE','projected_crs','ESRI','102436','ESRI','50','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','51','ARC System - Zone 17','ARC System - Zone 17',-80.0,-76.0,-180.0,180.0,0); INSERT INTO "conversion" VALUES('ESRI','102437','unnamed',NULL,'EPSG','1029','Equidistant Cylindrical (Spherical)','EPSG','8823','Latitude of 1st standard parallel',-78.1728375,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102437_USAGE','conversion','ESRI','102437','ESRI','51','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102437','WGS_1984_ARC_System_Zone_17',NULL,'EPSG','4400','EPSG','4326','ESRI','102437',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102437_USAGE','projected_crs','ESRI','102437','ESRI','51','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','52','ARC System - Zone 18','ARC System - Zone 18',-90.0,-80.0,-180.0,180.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102438','WGS_1984_ARC_System_Zone_18',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_ARC_System_Zone_18",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Azimuthal_Equidistant"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102438_USAGE','projected_crs','ESRI','102438','ESRI','52','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102439','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-27.0,'EPSG','9102','EPSG','8822','Longitude of false origin',132.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-18.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-36.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102439_USAGE','conversion','ESRI','102439','EPSG','2575','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102439','WGS_1984_Australian_Centre_for_Remote_Sensing_Lambert',NULL,'EPSG','4400','EPSG','4326','ESRI','102439',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102439_USAGE','projected_crs','ESRI','102439','EPSG','2575','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102440','LKS_1992_Latvia_TM_0',NULL,'EPSG','4400','EPSG','4661','EPSG','19930',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102440_USAGE','projected_crs','ESRI','102440','EPSG','1139','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102441','TWD_1967_TM_Taiwan',NULL,'EPSG','4400','EPSG','3821','EPSG','3820',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102441_USAGE','projected_crs','ESRI','102441','EPSG','3982','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102442','TWD_1967_TM_Penghu',NULL,'EPSG','4400','EPSG','3821','EPSG','3818',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102442_USAGE','projected_crs','ESRI','102442','EPSG','3591','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102443','TWD_1997_TM_Taiwan',NULL,'EPSG','4400','EPSG','3824','EPSG','3820',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102443_USAGE','projected_crs','ESRI','102443','EPSG','3562','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102444','TWD_1997_TM_Penghu',NULL,'EPSG','4400','EPSG','3824','EPSG','3818',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102444_USAGE','projected_crs','ESRI','102444','EPSG','3563','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102445','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',57.0,'EPSG','9102','EPSG','8812','Longitude of projection centre',-133.6666666666667,'EPSG','9102','EPSG','8813','Azimuth at projection centre',-36.86989764583333,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',-36.86989764583333,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9999,'EPSG','9201','EPSG','8806','False easting',16404166.66666666,'EPSG','9003','EPSG','8807','False northing',-16404166.66666666,'EPSG','9003',0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102445_USAGE','conversion','ESRI','102445','EPSG','2156','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102445','NAD_1983_2011_StatePlane_Alaska_1_FIPS_5001_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102445',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102445_USAGE','projected_crs','ESRI','102445','EPSG','2156','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102446','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-142.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102446_USAGE','conversion','ESRI','102446','EPSG','2158','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102446','NAD_1983_2011_StatePlane_Alaska_2_FIPS_5002_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102446',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102446_USAGE','projected_crs','ESRI','102446','EPSG','2158','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102447','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',54.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-146.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102447_USAGE','conversion','ESRI','102447','EPSG','2159','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102447','NAD_1983_2011_StatePlane_Alaska_3_FIPS_5003_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','102447',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102447_USAGE','projected_crs','ESRI','102447','EPSG','2159','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','53','Macao','Macao',22.1,22.22,113.52,113.6,0); INSERT INTO "projected_crs" VALUES('ESRI','102448','Macao_2008_Macao_Grid',NULL,'EPSG','4400','EPSG','8431','ESRI','102159',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102448_USAGE','projected_crs','ESRI','102448','ESRI','53','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102449','NAD_1983_MA11_UTM_Zone_55N',NULL,'EPSG','4400','EPSG','6325','EPSG','16055',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102449_USAGE','projected_crs','ESRI','102449','EPSG','4518','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102450','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',19999.32,'EPSG','9001','EPSG','8807','False northing',-202977.79,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102450_USAGE','conversion','ESRI','102450','ESRI','21','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102450','NGO_1948_Oslo_Baerum_Kommune',NULL,'EPSG','4400','EPSG','4817','ESRI','102450',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102450_USAGE','projected_crs','ESRI','102450','ESRI','21','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102451','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-4.666666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',-200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102451_USAGE','conversion','ESRI','102451','ESRI','22','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102451','NGO_1948_Oslo_Bergenhalvoen',NULL,'EPSG','4400','EPSG','4817','ESRI','102451',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102451_USAGE','projected_crs','ESRI','102451','ESRI','22','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102452','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',58.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',-212979.18,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102452_USAGE','conversion','ESRI','102452','ESRI','23','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102452','NGO_1948_Oslo_Oslo_Kommune',NULL,'EPSG','4400','EPSG','4817','ESRI','102452',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102452_USAGE','projected_crs','ESRI','102452','ESRI','23','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','54','Philippines - West of 120~E, N hemisphere','Philippines - West of 120~E, N hemisphere',3.0,22.18,114.0,120.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102453','Luzon_1911_UTM_Zone_50N',NULL,'EPSG','4400','EPSG','4253','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102453_USAGE','projected_crs','ESRI','102453','ESRI','54','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','55','Philippines - 120~E to 126~E, N hemisphere','Philippines - 120~E to 126~E, N hemisphere',3.0,22.18,120.0,126.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102454','Luzon_1911_UTM_Zone_51N',NULL,'EPSG','4400','EPSG','4253','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102454_USAGE','projected_crs','ESRI','102454','ESRI','55','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','56','Philippines - East of 126~E, N hemisphere','Philippines - East of 126~E, N hemisphere',3.0,22.18,126.0,132.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102455','Luzon_1911_UTM_Zone_52N',NULL,'EPSG','4400','EPSG','4253','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102455_USAGE','projected_crs','ESRI','102455','ESRI','56','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102456','PRS_1992_UTM_Zone_50N',NULL,'EPSG','4400','EPSG','4683','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102456_USAGE','projected_crs','ESRI','102456','ESRI','54','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102457','PRS_1992_UTM_Zone_51N',NULL,'EPSG','4400','EPSG','4683','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102457_USAGE','projected_crs','ESRI','102457','ESRI','55','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102458','PRS_1992_UTM_Zone_52N',NULL,'EPSG','4400','EPSG','4683','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102458_USAGE','projected_crs','ESRI','102458','ESRI','56','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','57','Idaho - Ada County','Idaho - Ada County',43.0,43.85,-116.6,-115.94,0); INSERT INTO "conversion" VALUES('ESRI','102459','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00011328,'EPSG','9201','EPSG','8806','False easting',2625138.996430666,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102459_USAGE','conversion','ESRI','102459','ESRI','57','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102459','NAD_1983_Idaho-Ada_County',NULL,'EPSG','4497','EPSG','4269','ESRI','102459',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102459_USAGE','projected_crs','ESRI','102459','ESRI','57','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','58','HJAIA - Hartsfield-Jackson Atlanta Intl Airport','HJAIA - Hartsfield-Jackson Atlanta Intl Airport',33.590879,33.68427937,-84.502368,-84.351204,0); INSERT INTO "conversion" VALUES('ESRI','102460','unnamed',NULL,'EPSG','1130','Local Orthographic','EPSG','8811','Latitude of projection centre',33.6340844042,'EPSG','9102','EPSG','8812','Longitude of projection centre',-84.4306922136,'EPSG','9102','EPSG','8813','Azimuth at projection centre',-0.01935,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.000047,'EPSG','9201','EPSG','8816','Easting at projection centre',11233.741,'EPSG','9003','EPSG','8817','Northing at projection centre',3076.34,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102460_USAGE','conversion','ESRI','102460','ESRI','58','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102460','HJAIA_AirportGrid_2Mar10',NULL,'EPSG','4497','EPSG','4269','ESRI','102460',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102460_USAGE','projected_crs','ESRI','102460','ESRI','58','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102461','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',18.83333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-155.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102461_USAGE','conversion','ESRI','102461','EPSG','1546','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102461','NAD_1983_HARN_StatePlane_Hawaii_1_FIPS_5101_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102461',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102461_USAGE','projected_crs','ESRI','102461','EPSG','1546','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102462','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',20.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-156.6666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102462_USAGE','conversion','ESRI','102462','EPSG','1547','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102462','NAD_1983_HARN_StatePlane_Hawaii_2_FIPS_5102_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102462',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102462_USAGE','projected_crs','ESRI','102462','EPSG','1547','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102463','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.16666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-158.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102463_USAGE','conversion','ESRI','102463','EPSG','1548','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102463','NAD_1983_HARN_StatePlane_Hawaii_3_FIPS_5103_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102463',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102463_USAGE','projected_crs','ESRI','102463','EPSG','1548','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102464','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.83333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-159.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102464_USAGE','conversion','ESRI','102464','EPSG','1549','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102464','NAD_1983_HARN_StatePlane_Hawaii_4_FIPS_5104_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102464',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102464_USAGE','projected_crs','ESRI','102464','EPSG','1549','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102465','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',21.66666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-160.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102465_USAGE','conversion','ESRI','102465','EPSG','1550','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102465','NAD_1983_HARN_StatePlane_Hawaii_5_FIPS_5105_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102465',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102465_USAGE','projected_crs','ESRI','102465','EPSG','1550','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102466','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.1,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.63333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2624666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102466_USAGE','conversion','ESRI','102466','EPSG','2214','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102466','NAD_1983_HARN_StatePlane_Minnesota_North_FIPS_2201_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102466',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102466_USAGE','projected_crs','ESRI','102466','EPSG','2214','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102467','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.05,'EPSG','9102','EPSG','8826','Easting at false origin',2624666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102467_USAGE','conversion','ESRI','102467','EPSG','2213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102467','NAD_1983_HARN_StatePlane_Minnesota_Central_FIPS_2202_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102467',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102467_USAGE','projected_crs','ESRI','102467','EPSG','2213','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102468','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.21666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',2624666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102468_USAGE','conversion','ESRI','102468','EPSG','2215','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102468','NAD_1983_HARN_StatePlane_Minnesota_South_FIPS_2203_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','102468',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102468_USAGE','projected_crs','ESRI','102468','EPSG','2215','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102469','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998335,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102469_USAGE','conversion','ESRI','102469','EPSG','1393','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102469','NAD_1983_HARN_Mississippi_TM',NULL,'EPSG','4400','EPSG','4152','ESRI','102469',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102469_USAGE','projected_crs','ESRI','102469','EPSG','1393','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102470','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102470_USAGE','conversion','ESRI','102470','EPSG','1454','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102470','Cape_Lo15',NULL,'EPSG','4400','EPSG','4222','ESRI','102470',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102470_USAGE','projected_crs','ESRI','102470','EPSG','1454','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102471','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',17.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102471_USAGE','conversion','ESRI','102471','EPSG','1455','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102471','Cape_Lo17',NULL,'EPSG','4400','EPSG','4222','ESRI','102471',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102471_USAGE','projected_crs','ESRI','102471','EPSG','1455','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102472','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102472_USAGE','conversion','ESRI','102472','EPSG','1456','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102472','Cape_Lo19',NULL,'EPSG','4400','EPSG','4222','ESRI','102472',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102472_USAGE','projected_crs','ESRI','102472','EPSG','1456','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102473','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102473_USAGE','conversion','ESRI','102473','EPSG','1457','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102473','Cape_Lo21',NULL,'EPSG','4400','EPSG','4222','ESRI','102473',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102473_USAGE','projected_crs','ESRI','102473','EPSG','1457','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102474','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102474_USAGE','conversion','ESRI','102474','EPSG','1458','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102474','Cape_Lo23',NULL,'EPSG','4400','EPSG','4222','ESRI','102474',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102474_USAGE','projected_crs','ESRI','102474','EPSG','1458','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102475','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102475_USAGE','conversion','ESRI','102475','EPSG','1459','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102475','Cape_Lo25',NULL,'EPSG','4400','EPSG','4222','ESRI','102475',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102475_USAGE','projected_crs','ESRI','102475','EPSG','1459','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102476','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102476_USAGE','conversion','ESRI','102476','EPSG','1460','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102476','Cape_Lo27',NULL,'EPSG','4400','EPSG','4222','ESRI','102476',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102476_USAGE','projected_crs','ESRI','102476','EPSG','1460','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102477','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',29.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102477_USAGE','conversion','ESRI','102477','EPSG','1461','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102477','Cape_Lo29',NULL,'EPSG','4400','EPSG','4222','ESRI','102477',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102477_USAGE','projected_crs','ESRI','102477','EPSG','1461','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102478','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',31.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102478_USAGE','conversion','ESRI','102478','EPSG','1462','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102478','Cape_Lo31',NULL,'EPSG','4400','EPSG','4222','ESRI','102478',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102478_USAGE','projected_crs','ESRI','102478','EPSG','1462','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102479','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',-1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102479_USAGE','conversion','ESRI','102479','EPSG','1463','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102479','Cape_Lo33',NULL,'EPSG','4400','EPSG','4222','ESRI','102479',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102479_USAGE','projected_crs','ESRI','102479','EPSG','1463','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102480','Hartebeesthoek94_Lo15',NULL,'EPSG','4400','EPSG','4148','ESRI','102470',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102480_USAGE','projected_crs','ESRI','102480','EPSG','1454','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102481','Hartebeesthoek94_Lo17',NULL,'EPSG','4400','EPSG','4148','ESRI','102471',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102481_USAGE','projected_crs','ESRI','102481','EPSG','1455','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102482','Hartebeesthoek94_Lo19',NULL,'EPSG','4400','EPSG','4148','ESRI','102472',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102482_USAGE','projected_crs','ESRI','102482','EPSG','1456','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102483','Hartebeesthoek94_Lo21',NULL,'EPSG','4400','EPSG','4148','ESRI','102473',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102483_USAGE','projected_crs','ESRI','102483','EPSG','1457','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102484','Hartebeesthoek94_Lo23',NULL,'EPSG','4400','EPSG','4148','ESRI','102474',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102484_USAGE','projected_crs','ESRI','102484','EPSG','1458','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102485','Hartebeesthoek94_Lo25',NULL,'EPSG','4400','EPSG','4148','ESRI','102475',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102485_USAGE','projected_crs','ESRI','102485','EPSG','1459','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102486','Hartebeesthoek94_Lo27',NULL,'EPSG','4400','EPSG','4148','ESRI','102476',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102486_USAGE','projected_crs','ESRI','102486','EPSG','1460','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102487','Hartebeesthoek94_Lo29',NULL,'EPSG','4400','EPSG','4148','ESRI','102477',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102487_USAGE','projected_crs','ESRI','102487','EPSG','1461','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102488','Hartebeesthoek94_Lo31',NULL,'EPSG','4400','EPSG','4148','ESRI','102478',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102488_USAGE','projected_crs','ESRI','102488','EPSG','1462','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102489','Hartebeesthoek94_Lo33',NULL,'EPSG','4400','EPSG','4148','ESRI','102479',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102489_USAGE','projected_crs','ESRI','102489','EPSG','1463','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102490','GDBD2009_GEORSO',NULL,NULL,NULL,'EPSG','5246',NULL,NULL,'PROJCS["GDBD2009_GEORSO",GEOGCS["GCS_GDBD2009",DATUM["D_GDBD2009",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Rectified_Skew_Orthomorphic_Natural_Origin"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Scale_Factor",0.99984],PARAMETER["Azimuth",53.31580995],PARAMETER["Longitude_Of_Center",115.0],PARAMETER["Latitude_Of_Center",4.0],PARAMETER["XY_Plane_Rotation",53.13010235415598],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102490_USAGE','projected_crs','ESRI','102490','EPSG','1055','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102491','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.7,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999625544,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102491_USAGE','conversion','ESRI','102491','EPSG','1728','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102491','Nord_Algerie_Ancienne_Degree',NULL,'EPSG','4400','EPSG','4304','ESRI','102491',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102491_USAGE','projected_crs','ESRI','102491','EPSG','1728','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102492','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',33.3,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.7,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102492_USAGE','conversion','ESRI','102492','EPSG','4519','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102492','Sud_Algerie_Ancienne_Degree',NULL,'EPSG','4400','EPSG','4304','ESRI','102492',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102492_USAGE','projected_crs','ESRI','102492','EPSG','4519','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102493','NAD_1983_PA11_UTM_Zone_4N',NULL,'EPSG','4400','EPSG','6322','EPSG','16004',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102493_USAGE','projected_crs','ESRI','102493','EPSG','3488','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102494','NAD_1983_PA11_UTM_Zone_5N',NULL,'EPSG','4400','EPSG','6322','EPSG','16005',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102494_USAGE','projected_crs','ESRI','102494','EPSG','3491','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102495','NAD_1983_MA11_Guam_Map_Grid',NULL,'EPSG','4400','EPSG','6325','ESRI','102201',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102495_USAGE','projected_crs','ESRI','102495','EPSG','3255','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102496','NAD_1983_PA11_UTM_Zone_2S',NULL,'EPSG','4400','EPSG','6322','EPSG','16102',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102496_USAGE','projected_crs','ESRI','102496','EPSG','3110','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','59','GOES-16 East Full disk','GOES-16 East Full disk',-81.3282,81.3282,-156.2995,6.2995,0); INSERT INTO "projected_crs" VALUES('ESRI','102497','GOES-16_East_ABI_Fixed_Grid_ITRF2000_incorrect_GCS',NULL,NULL,NULL,'EPSG','8997',NULL,NULL,'PROJCS["GOES-16_East_ABI_Fixed_Grid_ITRF2000_incorrect_GCS",GEOGCS["GCS_ITRF_2000",DATUM["D_ITRF_2000",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Geostationary_Satellite"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",-75.0],PARAMETER["Height",35786023.0],PARAMETER["Option",0.0],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102497_USAGE','projected_crs','ESRI','102497','ESRI','59','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102498','GOES-16_East_ABI_Fixed_Grid_ITRF2008',NULL,NULL,NULL,'EPSG','8999',NULL,NULL,'PROJCS["GOES-16_East_ABI_Fixed_Grid_ITRF2008",GEOGCS["GCS_ITRF_2008",DATUM["D_ITRF_2008",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Geostationary_Satellite"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Longitude_Of_Center",-75.0],PARAMETER["Height",35786023.0],PARAMETER["Option",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102498_USAGE','projected_crs','ESRI','102498','ESRI','59','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102499','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',90.0,'EPSG','9102','EPSG','8822','Longitude of false origin',4.367486666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.8333339,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',51.16666723333333,'EPSG','9102','EPSG','8826','Easting at false origin',150000.01256,'EPSG','9001','EPSG','8827','Northing at false origin',5400088.4378,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102499_USAGE','conversion','ESRI','102499','EPSG','1347','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102499','Belge_Lambert_1972_bad_FE_FN',NULL,'EPSG','4400','EPSG','4313','ESRI','102499',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102499_USAGE','projected_crs','ESRI','102499','EPSG','1347','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102500','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00016,'EPSG','9201','EPSG','8806','False easting',131233.5958005249,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102500_USAGE','conversion','ESRI','102500','EPSG','4180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102500','OCRS_Baker_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102500',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102500_USAGE','projected_crs','ESRI','102500','EPSG','4180','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102501','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-119.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',393700.7874015748,'EPSG','9002','EPSG','8807','False northing',196850.3937007874,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102501_USAGE','conversion','ESRI','102501','EPSG','4182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102501','OCRS_Bend-Burns_NAD_1983_CORS96_LCC_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102501',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102501_USAGE','projected_crs','ESRI','102501','EPSG','4182','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102502','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-121.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',262467.1916010499,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102502_USAGE','conversion','ESRI','102502','EPSG','4192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102502','OCRS_Bend-Klamath_Falls_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102502',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102502_USAGE','projected_crs','ESRI','102502','EPSG','4192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102503','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-121.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',262467.1916010499,'EPSG','9002','EPSG','8807','False northing',426509.186351706,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102503_USAGE','conversion','ESRI','102503','EPSG','4195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102503','OCRS_Bend-Redmond-Prineville_NAD_1983_CORS96_LCC_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102503',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102503_USAGE','projected_crs','ESRI','102503','EPSG','4195','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102504','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00007,'EPSG','9201','EPSG','8806','False easting',131233.5958005249,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102504_USAGE','conversion','ESRI','102504','EPSG','4199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102504','OCRS_Canyonville-Grants_Pass_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102504',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102504_USAGE','projected_crs','ESRI','102504','EPSG','4199','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102505','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-120.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000008,'EPSG','9201','EPSG','8806','False easting',492125.9842519685,'EPSG','9002','EPSG','8807','False northing',98425.1968503937,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102505_USAGE','conversion','ESRI','102505','EPSG','4200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102505','OCRS_Columbia_River_East_NAD_1983_CORS96_LCC_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102505',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102505_USAGE','projected_crs','ESRI','102505','EPSG','4200','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102506','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.91666666666666,'EPSG','9102','EPSG','8812','Longitude of projection centre',-123.0,'EPSG','9102','EPSG','8813','Azimuth at projection centre',-65.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',-65.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',22965879.26509186,'EPSG','9002','EPSG','8807','False northing',-9842519.685039369,'EPSG','9002',1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102506_USAGE','conversion','ESRI','102506','EPSG','4202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102506','OCRS_Columbia_River_West_NAD_1983_CORS96_OM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102506',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102506_USAGE','projected_crs','ESRI','102506','EPSG','4202','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102507','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',164041.9947506562,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102507_USAGE','conversion','ESRI','102507','EPSG','4203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102507','OCRS_Cottage_Grove-Canyonville_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102507',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102507_USAGE','projected_crs','ESRI','102507','EPSG','4203','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102508','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-121.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00011,'EPSG','9201','EPSG','8806','False easting',262467.1916010499,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102508_USAGE','conversion','ESRI','102508','EPSG','4204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102508','OCRS_Dufur-Madras_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102508',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102508_USAGE','projected_crs','ESRI','102508','EPSG','4204','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102509','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',164041.9947506562,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102509_USAGE','conversion','ESRI','102509','EPSG','4197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102509','OCRS_Eugene_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102509',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102509_USAGE','projected_crs','ESRI','102509','EPSG','4197','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102510','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000043,'EPSG','9201','EPSG','8806','False easting',164041.9947506562,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102510_USAGE','conversion','ESRI','102510','EPSG','4198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102510','OCRS_Grants_Pass-Ashland_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102510',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102510_USAGE','projected_crs','ESRI','102510','EPSG','4198','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102511','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00005,'EPSG','9201','EPSG','8806','False easting',32808.39895013123,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102511_USAGE','conversion','ESRI','102511','EPSG','4201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102511','OCRS_Gresham-Warm_Springs_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102511',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102511_USAGE','projected_crs','ESRI','102511','EPSG','4201','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102512','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00013,'EPSG','9201','EPSG','8806','False easting',131233.5958005249,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102512_USAGE','conversion','ESRI','102512','EPSG','4206','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102512','OCRS_La_Grande_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102512',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102512_USAGE','projected_crs','ESRI','102512','EPSG','4206','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102513','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0001,'EPSG','9201','EPSG','8806','False easting',262467.1916010499,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102513_USAGE','conversion','ESRI','102513','EPSG','4207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102513','OCRS_Ontario_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102513',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102513_USAGE','projected_crs','ESRI','102513','EPSG','4207','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102514','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',44.75,'EPSG','9102','EPSG','8812','Longitude of projection centre',-124.05,'EPSG','9102','EPSG','8813','Azimuth at projection centre',5.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',5.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',-984251.968503937,'EPSG','9002','EPSG','8807','False northing',-15091863.51706037,'EPSG','9002',1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102514_USAGE','conversion','ESRI','102514','EPSG','4208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102514','OCRS_Oregon_Coast_NAD_1983_CORS96_OM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102514',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102514_USAGE','projected_crs','ESRI','102514','EPSG','4208','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102515','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000175,'EPSG','9201','EPSG','8806','False easting',98425.1968503937,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102515_USAGE','conversion','ESRI','102515','EPSG','4210','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102515','OCRS_Pendleton-La_Grande_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102515',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102515_USAGE','projected_crs','ESRI','102515','EPSG','4210','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102516','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-119.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',196850.3937007874,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102516_USAGE','conversion','ESRI','102516','EPSG','4209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102516','OCRS_Pendleton_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102516',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102516_USAGE','projected_crs','ESRI','102516','EPSG','4209','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102517','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000002,'EPSG','9201','EPSG','8806','False easting',328083.9895013123,'EPSG','9002','EPSG','8807','False northing',164041.9947506562,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102517_USAGE','conversion','ESRI','102517','EPSG','4211','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102517','OCRS_Portland_NAD_1983_CORS96_LCC_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102517',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102517_USAGE','projected_crs','ESRI','102517','EPSG','4211','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102518','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.33333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.0833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00001,'EPSG','9201','EPSG','8806','False easting',164041.9947506562,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102518_USAGE','conversion','ESRI','102518','EPSG','4212','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102518','OCRS_Salem_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102518',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102518_USAGE','projected_crs','ESRI','102518','EPSG','4212','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102519','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000155,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102519_USAGE','conversion','ESRI','102519','EPSG','4213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102519','OCRS_Santiam_Pass_NAD_1983_CORS96_TM_Feet_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','102519',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102519_USAGE','projected_crs','ESRI','102519','EPSG','4213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102520','NAD_1983_PA11_StatePlane_Hawaii_1_FIPS_5101',NULL,'EPSG','4400','EPSG','6322','ESRI','102261',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102520_USAGE','projected_crs','ESRI','102520','EPSG','1546','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102521','NAD_1983_PA11_StatePlane_Hawaii_2_FIPS_5102',NULL,'EPSG','4400','EPSG','6322','ESRI','102262',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102521_USAGE','projected_crs','ESRI','102521','EPSG','1547','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102522','NAD_1983_PA11_StatePlane_Hawaii_3_FIPS_5103',NULL,'EPSG','4400','EPSG','6322','ESRI','102263',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102522_USAGE','projected_crs','ESRI','102522','EPSG','1548','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102523','NAD_1983_PA11_StatePlane_Hawaii_4_FIPS_5104',NULL,'EPSG','4400','EPSG','6322','ESRI','102264',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102523_USAGE','projected_crs','ESRI','102523','EPSG','1549','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102524','NAD_1983_PA11_StatePlane_Hawaii_5_FIPS_5105',NULL,'EPSG','4400','EPSG','6322','ESRI','102265',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102524_USAGE','projected_crs','ESRI','102524','EPSG','1550','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102525','NAD_1983_PA11_StatePlane_Hawaii_1_FIPS_5101_Feet',NULL,'EPSG','4497','EPSG','6322','ESRI','102461',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102525_USAGE','projected_crs','ESRI','102525','EPSG','1546','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102526','NAD_1983_PA11_StatePlane_Hawaii_2_FIPS_5102_Feet',NULL,'EPSG','4497','EPSG','6322','ESRI','102462',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102526_USAGE','projected_crs','ESRI','102526','EPSG','1547','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102527','NAD_1983_PA11_StatePlane_Hawaii_3_FIPS_5103_Feet',NULL,'EPSG','4497','EPSG','6322','ESRI','102463',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102527_USAGE','projected_crs','ESRI','102527','EPSG','1548','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102528','NAD_1983_PA11_StatePlane_Hawaii_4_FIPS_5104_Feet',NULL,'EPSG','4497','EPSG','6322','ESRI','102464',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102528_USAGE','projected_crs','ESRI','102528','EPSG','1549','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102529','NAD_1983_PA11_StatePlane_Hawaii_5_FIPS_5105_Feet',NULL,'EPSG','4497','EPSG','6322','ESRI','102465',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102529_USAGE','projected_crs','ESRI','102529','EPSG','1550','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102530','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00016,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102530_USAGE','conversion','ESRI','102530','EPSG','4180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102530','OCRS_Baker_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102530',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102530_USAGE','projected_crs','ESRI','102530','EPSG','4180','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102531','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-119.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',120000.0,'EPSG','9001','EPSG','8807','False northing',60000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102531_USAGE','conversion','ESRI','102531','EPSG','4182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102531','OCRS_Bend-Burns_NAD_1983_CORS96_LCC_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102531',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102531_USAGE','projected_crs','ESRI','102531','EPSG','4182','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102532','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-121.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0002,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102532_USAGE','conversion','ESRI','102532','EPSG','4192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102532','OCRS_Bend-Klamath_Falls_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102532',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102532_USAGE','projected_crs','ESRI','102532','EPSG','4192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102533','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-121.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00012,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',130000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102533_USAGE','conversion','ESRI','102533','EPSG','4195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102533','OCRS_Bend-Redmond-Prineville_NAD_1983_CORS96_LCC_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102533',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102533_USAGE','projected_crs','ESRI','102533','EPSG','4195','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102534','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00007,'EPSG','9201','EPSG','8806','False easting',40000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102534_USAGE','conversion','ESRI','102534','EPSG','4199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102534','OCRS_Canyonville-Grants_Pass_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102534',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102534_USAGE','projected_crs','ESRI','102534','EPSG','4199','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102535','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-120.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000008,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',30000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102535_USAGE','conversion','ESRI','102535','EPSG','4200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102535','OCRS_Columbia_River_East_NAD_1983_CORS96_LCC_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102535',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102535_USAGE','projected_crs','ESRI','102535','EPSG','4200','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102536','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',45.91666666666666,'EPSG','9102','EPSG','8812','Longitude of projection centre',-123.0,'EPSG','9102','EPSG','8813','Azimuth at projection centre',-65.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',-65.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',7000000.0,'EPSG','9001','EPSG','8807','False northing',-3000000.0,'EPSG','9001',1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102536_USAGE','conversion','ESRI','102536','EPSG','4202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102536','OCRS_Columbia_River_West_NAD_1983_CORS96_OM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102536',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102536_USAGE','projected_crs','ESRI','102536','EPSG','4202','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102537','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102537_USAGE','conversion','ESRI','102537','EPSG','4203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102537','OCRS_Cottage_Grove-Canyonville_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102537',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102537_USAGE','projected_crs','ESRI','102537','EPSG','4203','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102538','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-121.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00011,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102538_USAGE','conversion','ESRI','102538','EPSG','4204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102538','OCRS_Dufur-Madras_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102538',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102538_USAGE','projected_crs','ESRI','102538','EPSG','4204','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102539','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000015,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102539_USAGE','conversion','ESRI','102539','EPSG','4197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102539','OCRS_Eugene_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102539',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102539_USAGE','projected_crs','ESRI','102539','EPSG','4197','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102540','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000043,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102540_USAGE','conversion','ESRI','102540','EPSG','4198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102540','OCRS_Grants_Pass-Ashland_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102540',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102540_USAGE','projected_crs','ESRI','102540','EPSG','4198','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102541','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00005,'EPSG','9201','EPSG','8806','False easting',10000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102541_USAGE','conversion','ESRI','102541','EPSG','4201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102541','OCRS_Gresham-Warm_Springs_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102541',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102541_USAGE','projected_crs','ESRI','102541','EPSG','4201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102542','OCRS_La_Grande_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','EPSG','6765',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102542_USAGE','projected_crs','ESRI','102542','EPSG','4206','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102543','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-117.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0001,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102543_USAGE','conversion','ESRI','102543','EPSG','4207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102543','OCRS_Ontario_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102543',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102543_USAGE','projected_crs','ESRI','102543','EPSG','4207','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102544','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',44.75,'EPSG','9102','EPSG','8812','Longitude of projection centre',-124.05,'EPSG','9102','EPSG','8813','Azimuth at projection centre',5.0,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',5.0,'EPSG','9102','EPSG','8815','Scale factor at projection centre',1.0,'EPSG','9201','EPSG','8806','False easting',-300000.0,'EPSG','9001','EPSG','8807','False northing',-4600000.0,'EPSG','9001',1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102544_USAGE','conversion','ESRI','102544','EPSG','4208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102544','OCRS_Oregon_Coast_NAD_1983_CORS96_OM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102544',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102544_USAGE','projected_crs','ESRI','102544','EPSG','4208','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102545','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000175,'EPSG','9201','EPSG','8806','False easting',30000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102545_USAGE','conversion','ESRI','102545','EPSG','4210','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102545','OCRS_Pendleton-La_Grande_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102545',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102545_USAGE','projected_crs','ESRI','102545','EPSG','4210','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102546','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-119.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000045,'EPSG','9201','EPSG','8806','False easting',60000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102546_USAGE','conversion','ESRI','102546','EPSG','4209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102546','OCRS_Pendleton_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102546',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102546_USAGE','projected_crs','ESRI','102546','EPSG','4209','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102547','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000002,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102547_USAGE','conversion','ESRI','102547','EPSG','4211','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102547','OCRS_Portland_NAD_1983_CORS96_LCC_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102547',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102547_USAGE','projected_crs','ESRI','102547','EPSG','4211','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102548','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.33333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-123.0833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00001,'EPSG','9201','EPSG','8806','False easting',50000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102548_USAGE','conversion','ESRI','102548','EPSG','4212','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102548','OCRS_Salem_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102548',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102548_USAGE','projected_crs','ESRI','102548','EPSG','4212','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102549','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-122.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000155,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102549_USAGE','conversion','ESRI','102549','EPSG','4213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102549','OCRS_Santiam_Pass_NAD_1983_CORS96_TM_Meters',NULL,'EPSG','4400','EPSG','6783','ESRI','102549',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102549_USAGE','projected_crs','ESRI','102549','EPSG','4213','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102550','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',9500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102550_USAGE','conversion','ESRI','102550','EPSG','1524','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102550','ED_1950_Turkey_9',NULL,'EPSG','4400','EPSG','4230','ESRI','102550',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102550_USAGE','projected_crs','ESRI','102550','EPSG','1524','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102551','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',30.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',10500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102551_USAGE','conversion','ESRI','102551','EPSG','1525','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102551','ED_1950_Turkey_10',NULL,'EPSG','4400','EPSG','4230','ESRI','102551',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102551_USAGE','projected_crs','ESRI','102551','EPSG','1525','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102552','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',11500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102552_USAGE','conversion','ESRI','102552','EPSG','1526','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102552','ED_1950_Turkey_11',NULL,'EPSG','4400','EPSG','4230','ESRI','102552',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102552_USAGE','projected_crs','ESRI','102552','EPSG','1526','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102553','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',36.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',12500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102553_USAGE','conversion','ESRI','102553','EPSG','1527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102553','ED_1950_Turkey_12',NULL,'EPSG','4400','EPSG','4230','ESRI','102553',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102553_USAGE','projected_crs','ESRI','102553','EPSG','1527','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102554','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',13500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102554_USAGE','conversion','ESRI','102554','EPSG','1528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102554','ED_1950_Turkey_13',NULL,'EPSG','4400','EPSG','4230','ESRI','102554',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102554_USAGE','projected_crs','ESRI','102554','EPSG','1528','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102555','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',42.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',14500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102555_USAGE','conversion','ESRI','102555','EPSG','1529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102555','ED_1950_Turkey_14',NULL,'EPSG','4400','EPSG','4230','ESRI','102555',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102555_USAGE','projected_crs','ESRI','102555','EPSG','1529','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102556','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',15500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102556_USAGE','conversion','ESRI','102556','EPSG','1530','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102556','ED_1950_Turkey_15',NULL,'EPSG','4400','EPSG','4230','ESRI','102556',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102556_USAGE','projected_crs','ESRI','102556','EPSG','1530','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102557','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',68.51666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',1300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102557_USAGE','conversion','ESRI','102557','EPSG','4385','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102557','Kyrg-06_TM_Zone_1',NULL,'EPSG','4400','EPSG','7686','ESRI','102557',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102557_USAGE','projected_crs','ESRI','102557','EPSG','4385','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102558','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',71.51666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102558_USAGE','conversion','ESRI','102558','EPSG','4386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102558','Kyrg-06_TM_Zone_2',NULL,'EPSG','4400','EPSG','7686','ESRI','102558',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102558_USAGE','projected_crs','ESRI','102558','EPSG','4386','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102559','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',74.51666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',3300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102559_USAGE','conversion','ESRI','102559','EPSG','4387','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102559','Kyrg-06_TM_Zone_3',NULL,'EPSG','4400','EPSG','7686','ESRI','102559',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102559_USAGE','projected_crs','ESRI','102559','EPSG','4387','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102560','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',77.51666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',4300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102560_USAGE','conversion','ESRI','102560','EPSG','4388','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102560','Kyrg-06_TM_Zone_4',NULL,'EPSG','4400','EPSG','7686','ESRI','102560',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102560_USAGE','projected_crs','ESRI','102560','EPSG','4388','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102561','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',80.51666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',5300000.0,'EPSG','9001','EPSG','8807','False northing',14743.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102561_USAGE','conversion','ESRI','102561','EPSG','4389','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102561','Kyrg-06_TM_Zone_5',NULL,'EPSG','4400','EPSG','7686','ESRI','102561',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102561_USAGE','projected_crs','ESRI','102561','EPSG','4389','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102562','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',19.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102562_USAGE','conversion','ESRI','102562','EPSG','1456','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102562','Hartebeesthoek94_Lo19_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','102562',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102562_USAGE','projected_crs','ESRI','102562','EPSG','1456','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102563','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102563_USAGE','conversion','ESRI','102563','EPSG','1457','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102563','Hartebeesthoek94_Lo21_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','102563',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102563_USAGE','projected_crs','ESRI','102563','EPSG','1457','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102564','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',23.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102564_USAGE','conversion','ESRI','102564','EPSG','1458','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102564','Hartebeesthoek94_Lo23_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','102564',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102564_USAGE','projected_crs','ESRI','102564','EPSG','1458','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102565','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',25.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102565_USAGE','conversion','ESRI','102565','EPSG','1459','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102565','Hartebeesthoek94_Lo25_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','102565',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102565_USAGE','projected_crs','ESRI','102565','EPSG','1459','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102566','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102566_USAGE','conversion','ESRI','102566','EPSG','1460','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102566','Hartebeesthoek94_Lo27_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','102566',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102566_USAGE','projected_crs','ESRI','102566','EPSG','1460','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102567','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',29.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102567_USAGE','conversion','ESRI','102567','EPSG','1461','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102567','Hartebeesthoek94_Lo29_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','102567',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102567_USAGE','projected_crs','ESRI','102567','EPSG','1461','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102568','Hartebeesthoek94_Lo31_(E-N)',NULL,'EPSG','4400','EPSG','4148','EPSG','18042',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102568_USAGE','projected_crs','ESRI','102568','EPSG','1462','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102569','New_Beijing_3_Degree_Gauss_Kruger_CM_132E',NULL,'EPSG','4400','EPSG','4555','EPSG','16174',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102569_USAGE','projected_crs','ESRI','102569','EPSG','2730','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102570','WGS_1984_Complex_UTM_Zone_20N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_20N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-63.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102570_USAGE','projected_crs','ESRI','102570','EPSG','1911','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102571','WGS_1984_Complex_UTM_Zone_21N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_21N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-57.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102571_USAGE','projected_crs','ESRI','102571','EPSG','1913','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102572','WGS_1984_Complex_UTM_Zone_22N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_22N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-51.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102572_USAGE','projected_crs','ESRI','102572','EPSG','1915','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102573','WGS_1984_Complex_UTM_Zone_23N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_23N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-45.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102573_USAGE','projected_crs','ESRI','102573','EPSG','1917','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102574','WGS_1984_Complex_UTM_Zone_24N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_24N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-39.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102574_USAGE','projected_crs','ESRI','102574','EPSG','1919','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102575','WGS_1984_Complex_UTM_Zone_25N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_25N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-33.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102575_USAGE','projected_crs','ESRI','102575','EPSG','1921','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102576','WGS_1984_Complex_UTM_Zone_26N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_26N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-27.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102576_USAGE','projected_crs','ESRI','102576','EPSG','1923','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102577','WGS_1984_Complex_UTM_Zone_27N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_27N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-21.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102577_USAGE','projected_crs','ESRI','102577','EPSG','1925','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102578','WGS_1984_Complex_UTM_Zone_28N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_28N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-15.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102578_USAGE','projected_crs','ESRI','102578','EPSG','1927','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102579','WGS_1984_Complex_UTM_Zone_29N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_29N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-9.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102579_USAGE','projected_crs','ESRI','102579','EPSG','1929','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102580','WGS_1984_Complex_UTM_Zone_30N',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Complex_UTM_Zone_30N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator_Complex"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-3.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102580_USAGE','projected_crs','ESRI','102580','EPSG','1931','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102581','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',49.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.337229166666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999877341,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102581_USAGE','conversion','ESRI','102581','EPSG','1731','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102581','NTF_France_I_degrees',NULL,'EPSG','4400','EPSG','4275','ESRI','102581',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102581_USAGE','projected_crs','ESRI','102581','EPSG','1731','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102582','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.8,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.337229166666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99987742,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102582_USAGE','conversion','ESRI','102582','EPSG','1734','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102582','NTF_France_II_degrees',NULL,'EPSG','4400','EPSG','4275','ESRI','102582',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102582_USAGE','projected_crs','ESRI','102582','EPSG','1734','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102583','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.1,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.337229166666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999877499,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',3200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102583_USAGE','conversion','ESRI','102583','EPSG','1733','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102583','NTF_France_III_degrees',NULL,'EPSG','4400','EPSG','4275','ESRI','102583',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102583_USAGE','projected_crs','ESRI','102583','EPSG','1733','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102584','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.165,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.337229166666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994471,'EPSG','9201','EPSG','8806','False easting',234.358,'EPSG','9001','EPSG','8807','False northing',4185861.369,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102584_USAGE','conversion','ESRI','102584','EPSG','1327','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102584','NTF_France_IV_degrees',NULL,'EPSG','4400','EPSG','4275','ESRI','102584',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102584_USAGE','projected_crs','ESRI','102584','EPSG','1327','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102585','NTF_Lambert_Zone_I',NULL,'EPSG','4400','EPSG','4275','ESRI','102581',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102585_USAGE','projected_crs','ESRI','102585','EPSG','1731','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102586','NTF_Lambert_Zone_II',NULL,'EPSG','4400','EPSG','4275','ESRI','102582',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102586_USAGE','projected_crs','ESRI','102586','EPSG','1734','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102587','NTF_Lambert_Zone_III',NULL,'EPSG','4400','EPSG','4275','ESRI','102583',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102587_USAGE','projected_crs','ESRI','102587','EPSG','1733','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102588','NTF_Lambert_Zone_IV',NULL,'EPSG','4400','EPSG','4275','ESRI','102584',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102588_USAGE','projected_crs','ESRI','102588','EPSG','1327','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','60','USA - Contiguous US','USA - Contiguous US',20.0,50.0,-125.0,-65.0,0); INSERT INTO "conversion" VALUES('ESRI','102589','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',25.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',31.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102589_USAGE','conversion','ESRI','102589','ESRI','60','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102589','Panhandle_Energy_Albers',NULL,'EPSG','4497','EPSG','4269','ESRI','102589',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102589_USAGE','projected_crs','ESRI','102589','ESRI','60','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102590','Tananarive_1925_Laborde_Grid',NULL,NULL,NULL,'EPSG','4297',NULL,NULL,'PROJCS["Tananarive_1925_Laborde_Grid",GEOGCS["GCS_Tananarive_1925",DATUM["D_Tananarive_1925",SPHEROID["International_1924",6378388.0,297.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Laborde_Oblique_Mercator"],PARAMETER["False_Easting",400000.0],PARAMETER["False_Northing",800000.0],PARAMETER["Scale_Factor",0.9995],PARAMETER["Azimuth",18.9],PARAMETER["Longitude_Of_Center",46.43722916666667],PARAMETER["Latitude_Of_Center",-18.9],UNIT["Meter",1.0]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102590_USAGE','projected_crs','ESRI','102590','EPSG','3273','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102591','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.7,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999625544,'EPSG','9201','EPSG','8806','False easting',500135.0,'EPSG','9001','EPSG','8807','False northing',300090.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102591_USAGE','conversion','ESRI','102591','EPSG','1026','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102591','Nord_Algerie_Degree',NULL,'EPSG','4400','ESRI','104305','ESRI','102591',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102591_USAGE','projected_crs','ESRI','102591','EPSG','1026','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102592','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',33.3,'EPSG','9102','EPSG','8802','Longitude of natural origin',2.7,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999625769,'EPSG','9201','EPSG','8806','False easting',500135.0,'EPSG','9001','EPSG','8807','False northing',300090.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102592_USAGE','conversion','ESRI','102592','EPSG','1026','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102592','Sud_Algerie_Degree',NULL,'EPSG','4400','ESRI','104305','ESRI','102592',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102592_USAGE','projected_crs','ESRI','102592','EPSG','1026','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102593','JGD_2011_UTM_Zone_51N',NULL,'EPSG','4400','EPSG','6668','EPSG','16051',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102593_USAGE','projected_crs','ESRI','102593','EPSG','3959','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102594','JGD_2011_UTM_Zone_52N',NULL,'EPSG','4400','EPSG','6668','EPSG','16052',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102594_USAGE','projected_crs','ESRI','102594','EPSG','3960','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102595','JGD_2011_UTM_Zone_53N',NULL,'EPSG','4400','EPSG','6668','EPSG','16053',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102595_USAGE','projected_crs','ESRI','102595','EPSG','3961','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102596','JGD_2011_UTM_Zone_54N',NULL,'EPSG','4400','EPSG','6668','EPSG','16054',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102596_USAGE','projected_crs','ESRI','102596','EPSG','3962','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102597','JGD_2011_UTM_Zone_55N',NULL,'EPSG','4400','EPSG','6668','EPSG','16055',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102597_USAGE','projected_crs','ESRI','102597','EPSG','3963','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102598','JGD_2011_UTM_Zone_56N',NULL,'EPSG','4400','EPSG','6668','EPSG','16056',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102598_USAGE','projected_crs','ESRI','102598','ESRI','25','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102599','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9003','EPSG','8827','Northing at false origin',-4000000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102599_USAGE','conversion','ESRI','102599','EPSG','1375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102599','WGS_1984_California_Teale_Albers_FtUS',NULL,'EPSG','4497','EPSG','4326','ESRI','102599',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102599_USAGE','projected_crs','ESRI','102599','EPSG','1375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102600','NAD_1983_California_Teale_Albers_FtUS',NULL,'EPSG','4497','EPSG','4269','ESRI','102599',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102600_USAGE','projected_crs','ESRI','102600','EPSG','1375','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102601','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',18.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.0,'EPSG','9102','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102601_USAGE','conversion','ESRI','102601','EPSG','1412','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102601','NAD_1983_Texas_Centric_Mapping_System_Albers',NULL,'EPSG','4400','EPSG','4269','ESRI','102601',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102601_USAGE','projected_crs','ESRI','102601','EPSG','1412','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102602','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',18.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',27.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.0,'EPSG','9102','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102602_USAGE','conversion','ESRI','102602','EPSG','1412','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102602','NAD_1983_Texas_Centric_Mapping_System_Lambert',NULL,'EPSG','4400','EPSG','4269','ESRI','102602',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102602_USAGE','projected_crs','ESRI','102602','EPSG','1412','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102603','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.16666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',27.41666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102603_USAGE','conversion','ESRI','102603','EPSG','1412','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102603','NAD_1983_Texas_Statewide_Mapping_System',NULL,'EPSG','4400','EPSG','4269','ESRI','102603',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102603_USAGE','projected_crs','ESRI','102603','EPSG','1412','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102604','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-83.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',31.41666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.28333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102604_USAGE','conversion','ESRI','102604','EPSG','1380','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102604','NAD_1983_Georgia_Statewide_Lambert',NULL,'EPSG','4497','EPSG','4269','ESRI','102604',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102604_USAGE','projected_crs','ESRI','102604','EPSG','1380','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102605','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102605_USAGE','conversion','ESRI','102605','EPSG','1381','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102605','NAD_1983_Idaho_TM',NULL,'EPSG','4400','EPSG','4269','ESRI','102605',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102605_USAGE','projected_crs','ESRI','102605','EPSG','1381','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102606','NAD_1983_Maine_2000_East_Zone',NULL,'EPSG','4400','EPSG','4269','ESRI','102208',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102606_USAGE','projected_crs','ESRI','102606','EPSG','2960','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102607','NAD_1983_Maine_2000_Central_Zone',NULL,'EPSG','4400','EPSG','4269','ESRI','102209',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102607_USAGE','projected_crs','ESRI','102607','EPSG','2959','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102608','NAD_1983_Maine_2000_West_Zone',NULL,'EPSG','4400','EPSG','4269','ESRI','102210',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102608_USAGE','projected_crs','ESRI','102608','EPSG','2958','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102609','NAD_1983_Mississippi_TM',NULL,'EPSG','4400','EPSG','4269','ESRI','102469',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102609_USAGE','projected_crs','ESRI','102609','EPSG','1393','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102610','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',129.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102610_USAGE','conversion','ESRI','102610','EPSG','1854','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102610','JGD_2011_Japan_Zone_1',NULL,'EPSG','4400','EPSG','6668','ESRI','102610',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102610_USAGE','projected_crs','ESRI','102610','EPSG','1854','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102611','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',131.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102611_USAGE','conversion','ESRI','102611','EPSG','1855','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102611','JGD_2011_Japan_Zone_2',NULL,'EPSG','4400','EPSG','6668','ESRI','102611',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102611_USAGE','projected_crs','ESRI','102611','EPSG','1855','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102612','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',132.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102612_USAGE','conversion','ESRI','102612','EPSG','1856','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102612','JGD_2011_Japan_Zone_3',NULL,'EPSG','4400','EPSG','6668','ESRI','102612',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102612_USAGE','projected_crs','ESRI','102612','EPSG','1856','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102613','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',133.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102613_USAGE','conversion','ESRI','102613','EPSG','1857','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102613','JGD_2011_Japan_Zone_4',NULL,'EPSG','4400','EPSG','6668','ESRI','102613',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102613_USAGE','projected_crs','ESRI','102613','EPSG','1857','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102614','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',134.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102614_USAGE','conversion','ESRI','102614','EPSG','1858','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102614','JGD_2011_Japan_Zone_5',NULL,'EPSG','4400','EPSG','6668','ESRI','102614',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102614_USAGE','projected_crs','ESRI','102614','EPSG','1858','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102615','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',136.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102615_USAGE','conversion','ESRI','102615','EPSG','1859','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102615','JGD_2011_Japan_Zone_6',NULL,'EPSG','4400','EPSG','6668','ESRI','102615',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102615_USAGE','projected_crs','ESRI','102615','EPSG','1859','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102616','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',137.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102616_USAGE','conversion','ESRI','102616','EPSG','1860','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102616','JGD_2011_Japan_Zone_7',NULL,'EPSG','4400','EPSG','6668','ESRI','102616',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102616_USAGE','projected_crs','ESRI','102616','EPSG','1860','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102617','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',138.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102617_USAGE','conversion','ESRI','102617','EPSG','1861','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102617','JGD_2011_Japan_Zone_8',NULL,'EPSG','4400','EPSG','6668','ESRI','102617',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102617_USAGE','projected_crs','ESRI','102617','EPSG','1861','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102618','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',139.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102618_USAGE','conversion','ESRI','102618','EPSG','1862','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102618','JGD_2011_Japan_Zone_9',NULL,'EPSG','4400','EPSG','6668','ESRI','102618',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102618_USAGE','projected_crs','ESRI','102618','EPSG','1862','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102619','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',140.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102619_USAGE','conversion','ESRI','102619','EPSG','1863','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102619','JGD_2011_Japan_Zone_10',NULL,'EPSG','4400','EPSG','6668','ESRI','102619',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102619_USAGE','projected_crs','ESRI','102619','EPSG','1863','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102620','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',140.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102620_USAGE','conversion','ESRI','102620','EPSG','1864','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102620','JGD_2011_Japan_Zone_11',NULL,'EPSG','4400','EPSG','6668','ESRI','102620',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102620_USAGE','projected_crs','ESRI','102620','EPSG','1864','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102621','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',142.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102621_USAGE','conversion','ESRI','102621','EPSG','1865','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102621','JGD_2011_Japan_Zone_12',NULL,'EPSG','4400','EPSG','6668','ESRI','102621',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102621_USAGE','projected_crs','ESRI','102621','EPSG','1865','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102622','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102622_USAGE','conversion','ESRI','102622','EPSG','1866','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102622','JGD_2011_Japan_Zone_13',NULL,'EPSG','4400','EPSG','6668','ESRI','102622',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102622_USAGE','projected_crs','ESRI','102622','EPSG','1866','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102623','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',142.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102623_USAGE','conversion','ESRI','102623','EPSG','1867','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102623','JGD_2011_Japan_Zone_14',NULL,'EPSG','4400','EPSG','6668','ESRI','102623',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102623_USAGE','projected_crs','ESRI','102623','EPSG','1867','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102624','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',127.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102624_USAGE','conversion','ESRI','102624','EPSG','1868','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102624','JGD_2011_Japan_Zone_15',NULL,'EPSG','4400','EPSG','6668','ESRI','102624',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102624_USAGE','projected_crs','ESRI','102624','EPSG','1868','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102625','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',124.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102625_USAGE','conversion','ESRI','102625','EPSG','1869','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102625','JGD_2011_Japan_Zone_16',NULL,'EPSG','4400','EPSG','6668','ESRI','102625',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102625_USAGE','projected_crs','ESRI','102625','EPSG','1869','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102626','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',131.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102626_USAGE','conversion','ESRI','102626','EPSG','1870','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102626','JGD_2011_Japan_Zone_17',NULL,'EPSG','4400','EPSG','6668','ESRI','102626',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102626_USAGE','projected_crs','ESRI','102626','EPSG','1870','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102627','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',20.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',136.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102627_USAGE','conversion','ESRI','102627','EPSG','1871','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102627','JGD_2011_Japan_Zone_18',NULL,'EPSG','4400','EPSG','6668','ESRI','102627',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102627_USAGE','projected_crs','ESRI','102627','EPSG','1871','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102628','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',26.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',154.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102628_USAGE','conversion','ESRI','102628','EPSG','1872','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102628','JGD_2011_Japan_Zone_19',NULL,'EPSG','4400','EPSG','6668','ESRI','102628',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102628_USAGE','projected_crs','ESRI','102628','EPSG','1872','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102629','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-85.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102629_USAGE','conversion','ESRI','102629','EPSG','2154','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102629','NAD_1983_StatePlane_Alabama_East_FIPS_0101_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102629',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102629_USAGE','projected_crs','ESRI','102629','EPSG','2154','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102630','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',1968500.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102630_USAGE','conversion','ESRI','102630','EPSG','2155','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102630','NAD_1983_StatePlane_Alabama_West_FIPS_0102_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102630',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102630_USAGE','projected_crs','ESRI','102630','EPSG','2155','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102631','NAD_1983_StatePlane_Alaska_1_FIPS_5001_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102445',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102631_USAGE','projected_crs','ESRI','102631','EPSG','2156','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102632','NAD_1983_StatePlane_Alaska_2_FIPS_5002_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102446',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102632_USAGE','projected_crs','ESRI','102632','EPSG','2158','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102633','NAD_1983_StatePlane_Alaska_3_FIPS_5003_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102447',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102633_USAGE','projected_crs','ESRI','102633','EPSG','2159','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102634','NAD_1983_StatePlane_Alaska_4_FIPS_5004_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102392',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102634_USAGE','projected_crs','ESRI','102634','EPSG','2160','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102635','NAD_1983_StatePlane_Alaska_5_FIPS_5005_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102393',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102635_USAGE','projected_crs','ESRI','102635','EPSG','2161','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102636','NAD_1983_StatePlane_Alaska_6_FIPS_5006_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102394',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102636_USAGE','projected_crs','ESRI','102636','EPSG','2162','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102637','NAD_1983_StatePlane_Alaska_7_FIPS_5007_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102395',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102637_USAGE','projected_crs','ESRI','102637','EPSG','2163','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102638','NAD_1983_StatePlane_Alaska_8_FIPS_5008_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102396',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102638_USAGE','projected_crs','ESRI','102638','EPSG','2164','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102639','NAD_1983_StatePlane_Alaska_9_FIPS_5009_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102397',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102639_USAGE','projected_crs','ESRI','102639','EPSG','2165','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102640','NAD_1983_StatePlane_Alaska_10_FIPS_5010_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102398',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102640_USAGE','projected_crs','ESRI','102640','EPSG','2157','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102641','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102641_USAGE','conversion','ESRI','102641','EPSG','2175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102641','NAD_1983_StatePlane_California_I_FIPS_0401_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102641',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102641_USAGE','projected_crs','ESRI','102641','EPSG','2175','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102642','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102642_USAGE','conversion','ESRI','102642','EPSG','2176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102642','NAD_1983_StatePlane_California_II_FIPS_0402_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102642',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102642_USAGE','projected_crs','ESRI','102642','EPSG','2176','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102643','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102643_USAGE','conversion','ESRI','102643','EPSG','2177','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102643','NAD_1983_StatePlane_California_III_FIPS_0403_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102643',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102643_USAGE','projected_crs','ESRI','102643','EPSG','2177','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102644','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-119.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.25,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102644_USAGE','conversion','ESRI','102644','EPSG','2178','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102644','NAD_1983_StatePlane_California_IV_FIPS_0404_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102644',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102644_USAGE','projected_crs','ESRI','102644','EPSG','2178','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102645','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102645_USAGE','conversion','ESRI','102645','EPSG','2182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102645','NAD_1983_StatePlane_California_V_FIPS_0405_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102645',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102645_USAGE','projected_crs','ESRI','102645','EPSG','2182','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102646','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-116.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102646_USAGE','conversion','ESRI','102646','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102646','NAD_1983_StatePlane_California_VI_FIPS_0406_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102646',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102646_USAGE','projected_crs','ESRI','102646','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102647','NAD_1983_NSRS2007_StatePlane_Puerto_Rico_Virgin_Isls_FIPS_5200',NULL,'EPSG','4400','EPSG','4759','ESRI','102361',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102647_USAGE','projected_crs','ESRI','102647','EPSG','3634','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102648','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',699998.6,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102648_USAGE','conversion','ESRI','102648','EPSG','2167','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102648','NAD_1983_StatePlane_Arizona_East_FIPS_0201_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102648',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102648_USAGE','projected_crs','ESRI','102648','EPSG','2167','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102649','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.9166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',699998.6,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102649_USAGE','conversion','ESRI','102649','EPSG','2166','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102649','NAD_1983_StatePlane_Arizona_Central_FIPS_0202_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102649',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102649_USAGE','projected_crs','ESRI','102649','EPSG','2166','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102650','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-113.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',699998.6,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102650_USAGE','conversion','ESRI','102650','EPSG','2168','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102650','NAD_1983_StatePlane_Arizona_West_FIPS_0203_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102650',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102650_USAGE','projected_crs','ESRI','102650','EPSG','2168','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102651','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102651_USAGE','conversion','ESRI','102651','EPSG','2169','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102651','NAD_1983_StatePlane_Arkansas_North_FIPS_0301_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102651',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102651_USAGE','projected_crs','ESRI','102651','EPSG','2169','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102652','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',1312333.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102652_USAGE','conversion','ESRI','102652','EPSG','2170','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102652','NAD_1983_StatePlane_Arkansas_South_FIPS_0302_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102652',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102652_USAGE','projected_crs','ESRI','102652','EPSG','2170','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102653','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',3000000.000316083,'EPSG','9003','EPSG','8827','Northing at false origin',999999.999996,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102653_USAGE','conversion','ESRI','102653','EPSG','2184','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102653','NAD_1983_StatePlane_Colorado_North_FIPS_0501_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102653',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102653_USAGE','projected_crs','ESRI','102653','EPSG','2184','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102654','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.45,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.75,'EPSG','9102','EPSG','8826','Easting at false origin',3000000.000316083,'EPSG','9003','EPSG','8827','Northing at false origin',999999.999996,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102654_USAGE','conversion','ESRI','102654','EPSG','2183','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102654','NAD_1983_StatePlane_Colorado_Central_FIPS_0502_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102654',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102654_USAGE','projected_crs','ESRI','102654','EPSG','2183','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102655','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.23333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',3000000.000316083,'EPSG','9003','EPSG','8827','Northing at false origin',999999.999996,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102655_USAGE','conversion','ESRI','102655','EPSG','2185','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102655','NAD_1983_StatePlane_Colorado_South_FIPS_0503_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102655',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102655_USAGE','projected_crs','ESRI','102655','EPSG','2185','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102656','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-72.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.86666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',999999.999996,'EPSG','9003','EPSG','8827','Northing at false origin',499999.999998,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102656_USAGE','conversion','ESRI','102656','EPSG','1377','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102656','NAD_1983_StatePlane_Connecticut_FIPS_0600_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102656',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102656_USAGE','projected_crs','ESRI','102656','EPSG','1377','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102657','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102657_USAGE','conversion','ESRI','102657','EPSG','1378','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102657','NAD_1983_StatePlane_Delaware_FIPS_0700_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102657',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102657_USAGE','projected_crs','ESRI','102657','EPSG','1378','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102658','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102658_USAGE','conversion','ESRI','102658','EPSG','2186','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102658','NAD_1983_StatePlane_Florida_East_FIPS_0901_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102658',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102658_USAGE','projected_crs','ESRI','102658','EPSG','2186','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102659','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102659_USAGE','conversion','ESRI','102659','EPSG','2188','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102659','NAD_1983_StatePlane_Florida_West_FIPS_0902_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102659',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102659_USAGE','projected_crs','ESRI','102659','EPSG','2188','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102660','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.58333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.75,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102660_USAGE','conversion','ESRI','102660','EPSG','2187','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102660','NAD_1983_StatePlane_Florida_North_FIPS_0903_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102660',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102660_USAGE','projected_crs','ESRI','102660','EPSG','2187','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102661','NAD_1983_StatePlane_Hawaii_1_FIPS_5101_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102461',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102661_USAGE','projected_crs','ESRI','102661','EPSG','1546','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102662','NAD_1983_StatePlane_Hawaii_2_FIPS_5102_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102462',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102662_USAGE','projected_crs','ESRI','102662','EPSG','1547','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102663','NAD_1983_StatePlane_Hawaii_3_FIPS_5103_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102463',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102663_USAGE','projected_crs','ESRI','102663','EPSG','1548','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102664','NAD_1983_StatePlane_Hawaii_4_FIPS_5104_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102464',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102664_USAGE','projected_crs','ESRI','102664','EPSG','1549','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102665','NAD_1983_StatePlane_Hawaii_5_FIPS_5105_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102465',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102665_USAGE','projected_crs','ESRI','102665','EPSG','1550','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102666','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102666_USAGE','conversion','ESRI','102666','EPSG','2189','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102666','NAD_1983_StatePlane_Georgia_East_FIPS_1001_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102666',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102666_USAGE','projected_crs','ESRI','102666','EPSG','2189','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102667','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-84.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',2296583.333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102667_USAGE','conversion','ESRI','102667','EPSG','2190','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102667','NAD_1983_StatePlane_Georgia_West_FIPS_1002_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102667',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102667_USAGE','projected_crs','ESRI','102667','EPSG','2190','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102668','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-112.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102668_USAGE','conversion','ESRI','102668','EPSG','2192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102668','NAD_1983_StatePlane_Idaho_East_FIPS_1101_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102668',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102668_USAGE','projected_crs','ESRI','102668','EPSG','2192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102669','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102669_USAGE','conversion','ESRI','102669','EPSG','2191','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102669','NAD_1983_StatePlane_Idaho_Central_FIPS_1102_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102669',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102669_USAGE','projected_crs','ESRI','102669','EPSG','2191','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102670','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',2624666.666666666,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102670_USAGE','conversion','ESRI','102670','EPSG','2193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102670','NAD_1983_StatePlane_Idaho_West_FIPS_1103_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102670',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102670_USAGE','projected_crs','ESRI','102670','EPSG','2193','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102671','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102671_USAGE','conversion','ESRI','102671','EPSG','2194','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102671','NAD_1983_StatePlane_Illinois_East_FIPS_1201_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102671',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102671_USAGE','projected_crs','ESRI','102671','EPSG','2194','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102672','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',2296583.333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102672_USAGE','conversion','ESRI','102672','EPSG','2195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102672','NAD_1983_StatePlane_Illinois_West_FIPS_1202_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102672',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102672_USAGE','projected_crs','ESRI','102672','EPSG','2195','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102673','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-85.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',328083.3333333333,'EPSG','9003','EPSG','8807','False northing',820208.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102673_USAGE','conversion','ESRI','102673','EPSG','2196','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102673','NAD_1983_StatePlane_Indiana_East_FIPS_1301_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102673',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102673_USAGE','projected_crs','ESRI','102673','EPSG','2196','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102674','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.08333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',2952750.0,'EPSG','9003','EPSG','8807','False northing',820208.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102674_USAGE','conversion','ESRI','102674','EPSG','2197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102674','NAD_1983_StatePlane_Indiana_West_FIPS_1302_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102674',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102674_USAGE','projected_crs','ESRI','102674','EPSG','2197','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102675','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.26666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102675_USAGE','conversion','ESRI','102675','EPSG','2198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102675','NAD_1983_StatePlane_Iowa_North_FIPS_1401_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102675',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102675_USAGE','projected_crs','ESRI','102675','EPSG','2198','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102676','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102676_USAGE','conversion','ESRI','102676','EPSG','2199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102676','NAD_1983_StatePlane_Iowa_South_FIPS_1402_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102676',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102676_USAGE','projected_crs','ESRI','102676','EPSG','2199','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102677','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102677_USAGE','conversion','ESRI','102677','EPSG','2200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102677','NAD_1983_StatePlane_Kansas_North_FIPS_1501_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102677',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102677_USAGE','projected_crs','ESRI','102677','EPSG','2200','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102678','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.56666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',1312333.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102678_USAGE','conversion','ESRI','102678','EPSG','2201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102678','NAD_1983_StatePlane_Kansas_South_FIPS_1502_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102678',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102678_USAGE','projected_crs','ESRI','102678','EPSG','2201','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102679','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.96666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102679_USAGE','conversion','ESRI','102679','EPSG','2202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102679','NAD_1983_StatePlane_Kentucky_North_FIPS_1601_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102679',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102679_USAGE','projected_crs','ESRI','102679','EPSG','2202','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102680','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.93333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102680_USAGE','conversion','ESRI','102680','EPSG','2203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102680','NAD_1983_StatePlane_Kentucky_South_FIPS_1602_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102680',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102680_USAGE','projected_crs','ESRI','102680','EPSG','2203','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102681','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',31.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',32.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',3280833.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102681_USAGE','conversion','ESRI','102681','EPSG','2204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102681','NAD_1983_StatePlane_Louisiana_North_FIPS_1701_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102681',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102681_USAGE','projected_crs','ESRI','102681','EPSG','2204','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102682','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.33333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.7,'EPSG','9102','EPSG','8826','Easting at false origin',3280833.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102682_USAGE','conversion','ESRI','102682','EPSG','2529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102682','NAD_1983_StatePlane_Louisiana_South_FIPS_1702_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102682',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102682_USAGE','projected_crs','ESRI','102682','EPSG','2529','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102683','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-68.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102683_USAGE','conversion','ESRI','102683','EPSG','2206','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102683','NAD_1983_StatePlane_Maine_East_FIPS_1801_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102683',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102683_USAGE','projected_crs','ESRI','102683','EPSG','2206','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102684','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',2952750.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102684_USAGE','conversion','ESRI','102684','EPSG','2207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102684','NAD_1983_StatePlane_Maine_West_FIPS_1802_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102684',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102684_USAGE','projected_crs','ESRI','102684','EPSG','2207','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102685','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.45,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102685_USAGE','conversion','ESRI','102685','EPSG','1389','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102685','NAD_1983_StatePlane_Maryland_FIPS_1900_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102685',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102685_USAGE','projected_crs','ESRI','102685','EPSG','1389','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102686','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-71.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',656166.6666666665,'EPSG','9003','EPSG','8827','Northing at false origin',2460625.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102686_USAGE','conversion','ESRI','102686','EPSG','2209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102686','NAD_1983_StatePlane_Massachusetts_Mainland_FIPS_2001_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102686',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102686_USAGE','projected_crs','ESRI','102686','EPSG','2209','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102687','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-70.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.28333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102687_USAGE','conversion','ESRI','102687','EPSG','2208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102687','NAD_1983_StatePlane_Massachusetts_Island_FIPS_2002_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102687',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102687_USAGE','projected_crs','ESRI','102687','EPSG','2208','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102688','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.78333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',26246666.66666666,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102688_USAGE','conversion','ESRI','102688','EPSG','1723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102688','NAD_1983_StatePlane_Michigan_North_FIPS_2111_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102688',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102688_USAGE','projected_crs','ESRI','102688','EPSG','1723','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102689','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.31666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',19685000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102689_USAGE','conversion','ESRI','102689','EPSG','1724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102689','NAD_1983_StatePlane_Michigan_Central_FIPS_2112_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102689',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102689_USAGE','projected_crs','ESRI','102689','EPSG','1724','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102690','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.1,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',13123333.33333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102690_USAGE','conversion','ESRI','102690','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102690','NAD_1983_StatePlane_Michigan_South_FIPS_2113_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102690',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102690_USAGE','projected_crs','ESRI','102690','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102691','NAD_1983_StatePlane_Minnesota_North_FIPS_2201_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102466',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102691_USAGE','projected_crs','ESRI','102691','EPSG','2214','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102692','NAD_1983_StatePlane_Minnesota_Central_FIPS_2202_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102467',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102692_USAGE','projected_crs','ESRI','102692','EPSG','2213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102693','NAD_1983_StatePlane_Minnesota_South_FIPS_2203_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102468',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102693_USAGE','projected_crs','ESRI','102693','EPSG','2215','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102694','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102694_USAGE','conversion','ESRI','102694','EPSG','2216','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102694','NAD_1983_StatePlane_Mississippi_East_FIPS_2301_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102694',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102694_USAGE','projected_crs','ESRI','102694','EPSG','2216','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102695','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',2296583.333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102695_USAGE','conversion','ESRI','102695','EPSG','2217','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102695','NAD_1983_StatePlane_Mississippi_West_FIPS_2302_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102695',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102695_USAGE','projected_crs','ESRI','102695','EPSG','2217','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102696','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',820208.3333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102696_USAGE','conversion','ESRI','102696','EPSG','2219','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102696','NAD_1983_StatePlane_Missouri_East_FIPS_2401_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102696',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102696_USAGE','projected_crs','ESRI','102696','EPSG','2219','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102697','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102697_USAGE','conversion','ESRI','102697','EPSG','2218','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102697','NAD_1983_StatePlane_Missouri_Central_FIPS_2402_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102697',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102697_USAGE','projected_crs','ESRI','102697','EPSG','2218','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102698','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.16666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-94.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',2788708.333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102698_USAGE','conversion','ESRI','102698','EPSG','2220','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102698','NAD_1983_StatePlane_Missouri_West_FIPS_2403_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102698',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102698_USAGE','projected_crs','ESRI','102698','EPSG','2220','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102699','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',408000.0,'EPSG','9003','EPSG','8827','Northing at false origin',-266000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102699_USAGE','conversion','ESRI','102699','EPSG','2179','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102699','NAD_1927_StatePlane_California_V_Ventura',NULL,'EPSG','4497','EPSG','4267','ESRI','102699',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102699_USAGE','projected_crs','ESRI','102699','EPSG','2179','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102700','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-109.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102700_USAGE','conversion','ESRI','102700','EPSG','1395','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102700','NAD_1983_StatePlane_Montana_FIPS_2500_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102700',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102700_USAGE','projected_crs','ESRI','102700','EPSG','1395','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102701','NAD_1983_PACP00_UTM_Zone_4N',NULL,'EPSG','4400','EPSG','9075','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102701_USAGE','projected_crs','ESRI','102701','EPSG','3488','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102702','NAD_1983_PACP00_UTM_Zone_5N',NULL,'EPSG','4400','EPSG','9075','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102702_USAGE','projected_crs','ESRI','102702','EPSG','3491','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102703','NAD_1983_PACP00_UTM_Zone_2S',NULL,'EPSG','4400','EPSG','9075','EPSG','16102',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102703_USAGE','projected_crs','ESRI','102703','EPSG','3110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102704','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.0,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102704_USAGE','conversion','ESRI','102704','EPSG','1396','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102704','NAD_1983_StatePlane_Nebraska_FIPS_2600_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102704',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102704_USAGE','projected_crs','ESRI','102704','EPSG','1396','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','61','US - Nebraska - Lancaster County','US - Nebraska - Lancaster County',40.5,41.07,-96.93,-96.43,0); INSERT INTO "conversion" VALUES('ESRI','102705','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-96.68805555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000054615,'EPSG','9201','EPSG','8806','False easting',164041.6666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102705_USAGE','conversion','ESRI','102705','ESRI','61','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102705','NAD_1983_Nebraska_Lancaster_County_FtUS',NULL,'EPSG','4497','EPSG','4269','ESRI','102705',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102705_USAGE','projected_crs','ESRI','102705','ESRI','61','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102706','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.73409694444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',35.21208055555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',170251.555,'EPSG','9001','EPSG','8807','False northing',126867.909,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102706_USAGE','conversion','ESRI','102706','EPSG','1356','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102706','Palestine_1923_Palestine_Grid_TM',NULL,'EPSG','4400','EPSG','4281','ESRI','102706',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102706_USAGE','projected_crs','ESRI','102706','EPSG','1356','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102707','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',26246666.66666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102707_USAGE','conversion','ESRI','102707','EPSG','2224','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102707','NAD_1983_StatePlane_Nevada_East_FIPS_2701_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102707',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102707_USAGE','projected_crs','ESRI','102707','EPSG','2224','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102708','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-116.6666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',19685000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102708_USAGE','conversion','ESRI','102708','EPSG','2223','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102708','NAD_1983_StatePlane_Nevada_Central_FIPS_2702_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102708',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102708_USAGE','projected_crs','ESRI','102708','EPSG','2223','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102709','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',2624666.666666666,'EPSG','9003','EPSG','8807','False northing',13123333.33333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102709_USAGE','conversion','ESRI','102709','EPSG','2225','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102709','NAD_1983_StatePlane_Nevada_West_FIPS_2703_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102709',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102709_USAGE','projected_crs','ESRI','102709','EPSG','2225','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102710','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102710_USAGE','conversion','ESRI','102710','EPSG','1398','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102710','NAD_1983_StatePlane_New_Hampshire_FIPS_2800_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102710',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102710_USAGE','projected_crs','ESRI','102710','EPSG','1398','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102711','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',492125.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102711_USAGE','conversion','ESRI','102711','EPSG','1399','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102711','NAD_1983_StatePlane_New_Jersey_FIPS_2900_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102711',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102711_USAGE','projected_crs','ESRI','102711','EPSG','1399','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102712','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-104.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999090909090909,'EPSG','9201','EPSG','8806','False easting',541337.5,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102712_USAGE','conversion','ESRI','102712','EPSG','2228','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102712','NAD_1983_StatePlane_New_Mexico_East_FIPS_3001_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102712',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102712_USAGE','projected_crs','ESRI','102712','EPSG','2228','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102713','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-106.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102713_USAGE','conversion','ESRI','102713','EPSG','2231','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102713','NAD_1983_StatePlane_New_Mexico_Central_FIPS_3002_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102713',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102713_USAGE','projected_crs','ESRI','102713','EPSG','2231','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102714','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999166666666667,'EPSG','9201','EPSG','8806','False easting',2723091.666666666,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102714_USAGE','conversion','ESRI','102714','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102714','NAD_1983_StatePlane_New_Mexico_West_FIPS_3003_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102714',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102714_USAGE','projected_crs','ESRI','102714','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102715','NAD_1983_StatePlane_New_York_East_FIPS_3101_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102711',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102715_USAGE','projected_crs','ESRI','102715','EPSG','2234','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102716','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',820208.3333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102716_USAGE','conversion','ESRI','102716','EPSG','2233','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102716','NAD_1983_StatePlane_New_York_Central_FIPS_3102_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102716',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102716_USAGE','projected_crs','ESRI','102716','EPSG','2233','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102717','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-78.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1148291.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102717_USAGE','conversion','ESRI','102717','EPSG','2236','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102717','NAD_1983_StatePlane_New_York_West_FIPS_3103_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102717',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102717_USAGE','projected_crs','ESRI','102717','EPSG','2236','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102718','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',984250.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102718_USAGE','conversion','ESRI','102718','EPSG','2235','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102718','NAD_1983_StatePlane_New_York_Long_Island_FIPS_3104_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102718',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102718_USAGE','projected_crs','ESRI','102718','EPSG','2235','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102719','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.002616666,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102719_USAGE','conversion','ESRI','102719','EPSG','1402','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102719','NAD_1983_StatePlane_North_Carolina_FIPS_3200_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102719',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102719_USAGE','projected_crs','ESRI','102719','EPSG','1402','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102720','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102720_USAGE','conversion','ESRI','102720','EPSG','2237','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102720','NAD_1983_StatePlane_North_Dakota_North_FIPS_3301_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102720',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102720_USAGE','projected_crs','ESRI','102720','EPSG','2237','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102721','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102721_USAGE','conversion','ESRI','102721','EPSG','2238','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102721','NAD_1983_StatePlane_North_Dakota_South_FIPS_3302_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102721',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102721_USAGE','projected_crs','ESRI','102721','EPSG','2238','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102722','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.7,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102722_USAGE','conversion','ESRI','102722','EPSG','2239','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102722','NAD_1983_StatePlane_Ohio_North_FIPS_3401_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102722',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102722_USAGE','projected_crs','ESRI','102722','EPSG','2239','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102723','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102723_USAGE','conversion','ESRI','102723','EPSG','2240','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102723','NAD_1983_StatePlane_Ohio_South_FIPS_3402_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102723',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102723_USAGE','projected_crs','ESRI','102723','EPSG','2240','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102724','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102724_USAGE','conversion','ESRI','102724','EPSG','2241','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102724','NAD_1983_StatePlane_Oklahoma_North_FIPS_3501_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102724',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102724_USAGE','projected_crs','ESRI','102724','EPSG','2241','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102725','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102725_USAGE','conversion','ESRI','102725','EPSG','2242','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102725','NAD_1983_StatePlane_Oklahoma_South_FIPS_3502_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102725',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102725_USAGE','projected_crs','ESRI','102725','EPSG','2242','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102726','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.0,'EPSG','9102','EPSG','8826','Easting at false origin',8202083.333333332,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102726_USAGE','conversion','ESRI','102726','EPSG','2243','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102726','NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102726',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102726_USAGE','projected_crs','ESRI','102726','EPSG','2243','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102727','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.0,'EPSG','9102','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102727_USAGE','conversion','ESRI','102727','EPSG','2244','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102727','NAD_1983_StatePlane_Oregon_South_FIPS_3602_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102727',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102727_USAGE','projected_crs','ESRI','102727','EPSG','2244','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102728','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.95,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102728_USAGE','conversion','ESRI','102728','EPSG','2245','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102728','NAD_1983_StatePlane_Pennsylvania_North_FIPS_3701_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102728',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102728_USAGE','projected_crs','ESRI','102728','EPSG','2245','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102729','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102729_USAGE','conversion','ESRI','102729','EPSG','2246','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102729','NAD_1983_StatePlane_Pennsylvania_South_FIPS_3702_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102729',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102729_USAGE','projected_crs','ESRI','102729','EPSG','2246','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102730','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999375,'EPSG','9201','EPSG','8806','False easting',328083.3333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102730_USAGE','conversion','ESRI','102730','EPSG','1408','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102730','NAD_1983_StatePlane_Rhode_Island_FIPS_3800_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102730',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102730_USAGE','projected_crs','ESRI','102730','EPSG','1408','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','62','Panama - UTM Zone 17N','Panama - UTM Zone 17N',5.0,12.51,-84.32,-77.99,0); INSERT INTO "projected_crs" VALUES('ESRI','102731','PANAMA_ITRF08_UTM_17N',NULL,'EPSG','4400','ESRI','104646','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102731_USAGE','projected_crs','ESRI','102731','ESRI','62','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','63','Panama - UTM Zone 18N','Panama - UTM Zone 18N',5.0,12.51,-78.0,-77.04,0); INSERT INTO "projected_crs" VALUES('ESRI','102732','PANAMA_ITRF08_UTM_18N',NULL,'EPSG','4400','ESRI','104646','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102732_USAGE','projected_crs','ESRI','102732','ESRI','63','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102733','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',1999996.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102733_USAGE','conversion','ESRI','102733','EPSG','1409','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102733','NAD_1983_StatePlane_South_Carolina_FIPS_3900_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102733',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102733_USAGE','projected_crs','ESRI','102733','EPSG','1409','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102734','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.41666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102734_USAGE','conversion','ESRI','102734','EPSG','2249','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102734','NAD_1983_StatePlane_South_Dakota_North_FIPS_4001_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102734',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102734_USAGE','projected_crs','ESRI','102734','EPSG','2249','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102735','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.4,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102735_USAGE','conversion','ESRI','102735','EPSG','2250','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102735','NAD_1983_StatePlane_South_Dakota_South_FIPS_4002_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102735',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102735_USAGE','projected_crs','ESRI','102735','EPSG','2250','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102736','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102736_USAGE','conversion','ESRI','102736','EPSG','1411','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102736','NAD_1983_StatePlane_Tennessee_FIPS_4100_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102736',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102736_USAGE','projected_crs','ESRI','102736','EPSG','1411','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102737','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-101.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.65,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.18333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',656166.6666666665,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102737_USAGE','conversion','ESRI','102737','EPSG','2253','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102737','NAD_1983_StatePlane_Texas_North_FIPS_4201_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102737',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102737_USAGE','projected_crs','ESRI','102737','EPSG','2253','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102738','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.13333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.666666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102738_USAGE','conversion','ESRI','102738','EPSG','2254','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102738','NAD_1983_StatePlane_Texas_North_Central_FIPS_4202_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102738',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102738_USAGE','projected_crs','ESRI','102738','EPSG','2254','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102739','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',30.11666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',31.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2296583.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',9842500.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102739_USAGE','conversion','ESRI','102739','EPSG','2252','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102739','NAD_1983_StatePlane_Texas_Central_FIPS_4203_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102739',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102739_USAGE','projected_crs','ESRI','102739','EPSG','2252','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102740','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',28.38333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.28333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',13123333.33333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102740_USAGE','conversion','ESRI','102740','EPSG','2527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102740','NAD_1983_StatePlane_Texas_South_Central_FIPS_4204_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102740',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102740_USAGE','projected_crs','ESRI','102740','EPSG','2527','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102741','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',26.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',27.83333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',984250.0,'EPSG','9003','EPSG','8827','Northing at false origin',16404166.66666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102741_USAGE','conversion','ESRI','102741','EPSG','2528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102741','NAD_1983_StatePlane_Texas_South_FIPS_4205_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102741',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102741_USAGE','projected_crs','ESRI','102741','EPSG','2528','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102742','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102742_USAGE','conversion','ESRI','102742','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102742','NAD_1983_StatePlane_Utah_North_FIPS_4301_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102742',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102742_USAGE','projected_crs','ESRI','102742','EPSG','2258','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102743','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.01666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.65,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.666666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102743_USAGE','conversion','ESRI','102743','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102743','NAD_1983_StatePlane_Utah_Central_FIPS_4302_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102743',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102743_USAGE','projected_crs','ESRI','102743','EPSG','2257','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102744','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.21666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.35,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',9842500.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102744_USAGE','conversion','ESRI','102744','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102744','NAD_1983_StatePlane_Utah_South_FIPS_4303_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102744',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102744_USAGE','projected_crs','ESRI','102744','EPSG','2259','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102745','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999642857142857,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102745_USAGE','conversion','ESRI','102745','EPSG','1414','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102745','NAD_1983_StatePlane_Vermont_FIPS_4400_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102745',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102745_USAGE','projected_crs','ESRI','102745','EPSG','1414','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102746','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.2,'EPSG','9102','EPSG','8826','Easting at false origin',11482916.66666666,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.666666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102746_USAGE','conversion','ESRI','102746','EPSG','2260','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102746','NAD_1983_StatePlane_Virginia_North_FIPS_4501_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102746',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102746_USAGE','projected_crs','ESRI','102746','EPSG','2260','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102747','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.76666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',11482916.66666666,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102747_USAGE','conversion','ESRI','102747','EPSG','2261','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102747','NAD_1983_StatePlane_Virginia_South_FIPS_4502_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102747',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102747_USAGE','projected_crs','ESRI','102747','EPSG','2261','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102748','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.8333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102748_USAGE','conversion','ESRI','102748','EPSG','2273','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102748','NAD_1983_StatePlane_Washington_North_FIPS_4601_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102748',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102748_USAGE','projected_crs','ESRI','102748','EPSG','2273','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102749','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102749_USAGE','conversion','ESRI','102749','EPSG','2274','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102749','NAD_1983_StatePlane_Washington_South_FIPS_4602_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102749',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102749_USAGE','projected_crs','ESRI','102749','EPSG','2274','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102750','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.25,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102750_USAGE','conversion','ESRI','102750','EPSG','2264','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102750','NAD_1983_StatePlane_West_Virginia_North_FIPS_4701_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102750',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102750_USAGE','projected_crs','ESRI','102750','EPSG','2264','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102751','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102751_USAGE','conversion','ESRI','102751','EPSG','2265','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102751','NAD_1983_StatePlane_West_Virginia_South_FIPS_4702_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102751',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102751_USAGE','projected_crs','ESRI','102751','EPSG','2265','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102752','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102752_USAGE','conversion','ESRI','102752','EPSG','2267','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102752','NAD_1983_StatePlane_Wisconsin_North_FIPS_4801_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102752',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102752_USAGE','projected_crs','ESRI','102752','EPSG','2267','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102753','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102753_USAGE','conversion','ESRI','102753','EPSG','2266','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102753','NAD_1983_StatePlane_Wisconsin_Central_FIPS_4802_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102753',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102753_USAGE','projected_crs','ESRI','102753','EPSG','2266','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102754','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.06666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102754_USAGE','conversion','ESRI','102754','EPSG','2268','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102754','NAD_1983_StatePlane_Wisconsin_South_FIPS_4803_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102754',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102754_USAGE','projected_crs','ESRI','102754','EPSG','2268','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102755','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102755_USAGE','conversion','ESRI','102755','EPSG','2269','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102755','NAD_1983_StatePlane_Wyoming_East_FIPS_4901_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102755',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102755_USAGE','projected_crs','ESRI','102755','EPSG','2269','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102756','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1312333.333333333,'EPSG','9003','EPSG','8807','False northing',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102756_USAGE','conversion','ESRI','102756','EPSG','2270','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102756','NAD_1983_StatePlane_Wyoming_East_Central_FIPS_4902_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102756',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102756_USAGE','projected_crs','ESRI','102756','EPSG','2270','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102757','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-108.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1968500.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102757_USAGE','conversion','ESRI','102757','EPSG','2272','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102757','NAD_1983_StatePlane_Wyoming_West_Central_FIPS_4903_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102757',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102757_USAGE','projected_crs','ESRI','102757','EPSG','2272','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102758','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.0833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',2624666.666666666,'EPSG','9003','EPSG','8807','False northing',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102758_USAGE','conversion','ESRI','102758','EPSG','2271','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102758','NAD_1983_StatePlane_Wyoming_West_FIPS_4904_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102758',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102758_USAGE','projected_crs','ESRI','102758','EPSG','2271','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102759','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9002','EPSG','8827','Northing at false origin',-4000000.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102759_USAGE','conversion','ESRI','102759','EPSG','1375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102759','WGS_1984_California_Teale_Albers_Ft_Intl',NULL,'EPSG','4495','EPSG','4326','ESRI','102759',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102759_USAGE','projected_crs','ESRI','102759','EPSG','1375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102760','NAD_1983_California_Teale_Albers_Ft_Intl',NULL,'EPSG','4495','EPSG','4269','ESRI','102759',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102760_USAGE','projected_crs','ESRI','102760','EPSG','1375','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102761','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',17.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-66.43333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',18.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',18.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',656166.6666666665,'EPSG','9003','EPSG','8827','Northing at false origin',656166.6666666665,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102761_USAGE','conversion','ESRI','102761','EPSG','2251','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102761','NAD_1983_StatePlane_Puerto_Rico_Virgin_Islands_FIPS_5200_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102761',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102761_USAGE','projected_crs','ESRI','102761','EPSG','2251','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102762','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-9.0,'EPSG','9102','EPSG','8822','Longitude of false origin',26.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-6.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-11.5,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102762_USAGE','conversion','ESRI','102762','EPSG','3147','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102762','Katanga_1955_Katanga_Lambert',NULL,'EPSG','4400','EPSG','4695','ESRI','102762',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102762_USAGE','projected_crs','ESRI','102762','EPSG','3147','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102763','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.08333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102763_USAGE','conversion','ESRI','102763','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102763','NAD_1983_StatePlane_Kentucky_FIPS_1600_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102763',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102763_USAGE','projected_crs','ESRI','102763','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102764','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_7',NULL,'EPSG','4400','EPSG','4178','EPSG','16267',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102764_USAGE','projected_crs','ESRI','102764','EPSG','3584','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102765','Pulkovo_1942_Adj_1983_3_Degree_GK_Zone_8',NULL,'EPSG','4400','EPSG','4178','EPSG','16268',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102765_USAGE','projected_crs','ESRI','102765','EPSG','3586','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102766','unnamed',NULL,'EPSG','9818','American Polyconic','EPSG','8801','Latitude of natural origin',13.47246635277778,'EPSG','9102','EPSG','8802','Longitude of natural origin',144.7487507055556,'EPSG','9102','EPSG','8806','False easting',164041.6666666666,'EPSG','9003','EPSG','8807','False northing',164041.6666666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102766_USAGE','conversion','ESRI','102766','EPSG','1110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102766','NAD_1983_StatePlane_Guam_FIPS_5400_Feet',NULL,'EPSG','4497','EPSG','4269','ESRI','102766',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102766_USAGE','projected_crs','ESRI','102766','EPSG','1110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102767','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',-4.197684047222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.94281105833333,'EPSG','9102','EPSG','8806','False easting',25978.217,'EPSG','9001','EPSG','8807','False northing',27501.365,'EPSG','9001','EPSG','1039','Projection plane origin height',89.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102767_USAGE','conversion','ESRI','102767','EPSG','4143','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102767','MAGNA_Leticia_Amazonas_1994',NULL,'EPSG','4400','EPSG','4686','ESRI','102767',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102767_USAGE','projected_crs','ESRI','102767','EPSG','4143','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','64','Colombia - Medellin - Antioquia','Colombia - Medellin - Antioquia',5.716666666666667,6.733333333333333,-76.06666666666666,-75.05,0); INSERT INTO "conversion" VALUES('ESRI','102768','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',6.229208888888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.56488694444444,'EPSG','9102','EPSG','8806','False easting',835378.647,'EPSG','9001','EPSG','8807','False northing',1180816.875,'EPSG','9001','EPSG','1039','Projection plane origin height',1510.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102768_USAGE','conversion','ESRI','102768','ESRI','64','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102768','MAGNA_Medellin_Antioquia_2010',NULL,'EPSG','4400','EPSG','4686','ESRI','102768',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102768_USAGE','projected_crs','ESRI','102768','ESRI','64','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','65','Colombia - Arauca - Arauca','Colombia - Arauca - Arauca',6.583333333333333,7.6,-71.26666666666667,-70.25,0); INSERT INTO "conversion" VALUES('ESRI','102769','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',7.087606391666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.75830965555555,'EPSG','9102','EPSG','8806','False easting',1035263.443,'EPSG','9001','EPSG','8807','False northing',1275526.621,'EPSG','9001','EPSG','1039','Projection plane origin height',100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102769_USAGE','conversion','ESRI','102769','ESRI','65','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102769','MAGNA_Arauca_2007',NULL,'EPSG','4400','EPSG','4686','ESRI','102769',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102769_USAGE','projected_crs','ESRI','102769','ESRI','65','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','66','Colombia - Barranquilla - Atlantico','Colombia - Barranquilla - Atlantico',10.41666666666667,11.43333333333333,-75.35,-74.33333333333333,0); INSERT INTO "conversion" VALUES('ESRI','102770','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',10.92318308333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.83433133333332,'EPSG','9102','EPSG','8806','False easting',917264.406,'EPSG','9001','EPSG','8807','False northing',1699839.935,'EPSG','9001','EPSG','1039','Projection plane origin height',100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102770_USAGE','conversion','ESRI','102770','ESRI','66','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102770','MAGNA_Barranquilla_Atlantico_1997',NULL,'EPSG','4400','EPSG','4686','ESRI','102770',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102770_USAGE','projected_crs','ESRI','102770','ESRI','66','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','67','Colombia - Bogota D.C. - Bogota D.C.','Colombia - Bogota D.C. - Bogota D.C.',4.166666666666667,5.183333333333334,-74.65,-73.63333333333334,0); INSERT INTO "conversion" VALUES('ESRI','102771','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.680486111111112,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.14659166666668,'EPSG','9102','EPSG','8806','False easting',92334.879,'EPSG','9001','EPSG','8807','False northing',109320.965,'EPSG','9001','EPSG','1039','Projection plane origin height',2550.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102771_USAGE','conversion','ESRI','102771','ESRI','67','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102771','MAGNA_Bogota_DC_2005',NULL,'EPSG','4400','EPSG','4686','ESRI','102771',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102771_USAGE','projected_crs','ESRI','102771','ESRI','67','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','68','Colombia - Cartagena_Bolivar','Colombia - Cartagena_Bolivar',9.883333333333333,10.9,-76.01666666666667,-75.0,0); INSERT INTO "conversion" VALUES('ESRI','102772','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',10.3970475,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.51120694444444,'EPSG','9102','EPSG','8806','False easting',842981.41,'EPSG','9001','EPSG','8807','False northing',1641887.09,'EPSG','9001','EPSG','1039','Projection plane origin height',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102772_USAGE','conversion','ESRI','102772','ESRI','68','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102772','MAGNA_Cartagena_Bolivar_2005',NULL,'EPSG','4400','EPSG','4686','ESRI','102772',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102772_USAGE','projected_crs','ESRI','102772','ESRI','68','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','69','Colombia - Tunja - Boyaca','Colombia - Tunja - Boyaca',5.033333333333333,6.05,-73.86666666666666,-72.85,0); INSERT INTO "conversion" VALUES('ESRI','102773','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.534194738888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-73.3519389,'EPSG','9102','EPSG','8806','False easting',1080514.91,'EPSG','9001','EPSG','8807','False northing',1103772.028,'EPSG','9001','EPSG','1039','Projection plane origin height',2800.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102773_USAGE','conversion','ESRI','102773','ESRI','69','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102773','MAGNA_Tunja_Boyaca_1997',NULL,'EPSG','4400','EPSG','4686','ESRI','102773',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102773_USAGE','projected_crs','ESRI','102773','ESRI','69','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','70','Colombia - Manizales - Caldas','Colombia - Manizales - Caldas',4.566666666666666,5.583333333333333,-76.01666666666667,-75.0,0); INSERT INTO "conversion" VALUES('ESRI','102774','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.068153888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.51109472222223,'EPSG','9102','EPSG','8806','False easting',1173727.04,'EPSG','9001','EPSG','8807','False northing',1052391.13,'EPSG','9001','EPSG','1039','Projection plane origin height',2100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102774_USAGE','conversion','ESRI','102774','ESRI','70','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102774','MAGNA_Manizales_Caldas_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102774',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102774_USAGE','projected_crs','ESRI','102774','ESRI','70','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','71','Colombia - Florencia - Caqueta','Colombia - Florencia - Caqueta',1.116666666666667,2.133333333333333,-76.13333333333334,-75.11666666666666,0); INSERT INTO "conversion" VALUES('ESRI','102775','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.621012294444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.61911760277778,'EPSG','9102','EPSG','8806','False easting',1162300.348,'EPSG','9001','EPSG','8807','False northing',671068.716,'EPSG','9001','EPSG','1039','Projection plane origin height',300.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102775_USAGE','conversion','ESRI','102775','ESRI','71','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102775','MAGNA_Florencia_Caqueta_2007',NULL,'EPSG','4400','EPSG','4686','ESRI','102775',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102775_USAGE','projected_crs','ESRI','102775','ESRI','71','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','72','Colombia - Yopal - Casanare','Colombia - Yopal - Casanare',4.85,5.866666666666667,-72.93333333333334,-71.91666666666667,0); INSERT INTO "conversion" VALUES('ESRI','102776','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.353927222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.42004027777779,'EPSG','9102','EPSG','8806','False easting',851184.177,'EPSG','9001','EPSG','8807','False northing',1083954.137,'EPSG','9001','EPSG','1039','Projection plane origin height',300.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102776_USAGE','conversion','ESRI','102776','ESRI','72','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102776','MAGNA_Yopal_Casanare_2006',NULL,'EPSG','4400','EPSG','4686','ESRI','102776',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102776_USAGE','projected_crs','ESRI','102776','ESRI','72','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','73','Colombia - Popayan - Cauca','Colombia - Popayan - Cauca',2.95,2.966666666666667,-77.11666666666666,-76.1,0); INSERT INTO "conversion" VALUES('ESRI','102777','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',2.456159883333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.6060916361111,'EPSG','9102','EPSG','8806','False easting',1052430.525,'EPSG','9001','EPSG','8807','False northing',763366.548,'EPSG','9001','EPSG','1039','Projection plane origin height',1740.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102777_USAGE','conversion','ESRI','102777','ESRI','73','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102777','MAGNA_Popayan_Cauca_2006',NULL,'EPSG','4400','EPSG','4686','ESRI','102777',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102777_USAGE','projected_crs','ESRI','102777','ESRI','73','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','74','Colombia - Valledupar - Cesar','Colombia - Valledupar - Cesar',9.933333333333334,10.95,-73.58333333333333,-73.56666666666666,0); INSERT INTO "conversion" VALUES('ESRI','102778','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',10.44726111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-73.2465713888889,'EPSG','9102','EPSG','8806','False easting',1090979.66,'EPSG','9001','EPSG','8807','False northing',1647208.93,'EPSG','9001','EPSG','1039','Projection plane origin height',200.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102778_USAGE','conversion','ESRI','102778','ESRI','74','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102778','MAGNA_Valledupar_Cesar_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102778',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102778_USAGE','projected_crs','ESRI','102778','ESRI','74','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','75','Colombia - Quibdo - Choco','Colombia - Quibdo - Choco',5.183333333333334,6.2,-77.16666666666667,-76.15,0); INSERT INTO "conversion" VALUES('ESRI','102779','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',5.694247661111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.65075385833335,'EPSG','9102','EPSG','8806','False easting',1047273.617,'EPSG','9001','EPSG','8807','False northing',1121443.09,'EPSG','9001','EPSG','1039','Projection plane origin height',44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102779_USAGE','conversion','ESRI','102779','ESRI','75','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102779','MAGNA_Quibdo_Choco_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102779',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102779_USAGE','projected_crs','ESRI','102779','ESRI','75','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','76','Colombia - Monteria - Cordoba','Colombia - Monteria - Cordoba',8.266666666666667,9.283333333333333,-76.38333333333334,-75.36666666666666,0); INSERT INTO "conversion" VALUES('ESRI','102780','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',8.773085755555556,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.87955333055555,'EPSG','9102','EPSG','8806','False easting',1131814.934,'EPSG','9001','EPSG','8807','False northing',1462131.119,'EPSG','9001','EPSG','1039','Projection plane origin height',15.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102780_USAGE','conversion','ESRI','102780','ESRI','76','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102780','MAGNA_Monteria_Cordoba_2006',NULL,'EPSG','4400','EPSG','4686','ESRI','102780',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102780_USAGE','projected_crs','ESRI','102780','ESRI','76','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','77','Colombia - Inirida - Guainia','Colombia - Inirida - Guainia',3.333333333333333,4.35,-68.41666666666667,-67.4,0); INSERT INTO "conversion" VALUES('ESRI','102781','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',3.845438183333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-67.90523208888889,'EPSG','9102','EPSG','8806','False easting',1019177.687,'EPSG','9001','EPSG','8807','False northing',491791.326,'EPSG','9001','EPSG','1039','Projection plane origin height',96.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102781_USAGE','conversion','ESRI','102781','ESRI','77','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102781','MAGNA_Inirida_Guainia_2008',NULL,'EPSG','4400','EPSG','4686','ESRI','102781',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102781_USAGE','projected_crs','ESRI','102781','ESRI','77','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','78','Colombia - San Jose del Guaviare - Guaviare','Colombia - San Jose del Guaviare - Guaviare',2.05,3.066666666666667,-73.15,-72.13333333333334,0); INSERT INTO "conversion" VALUES('ESRI','102782','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',2.564078941666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.640033325,'EPSG','9102','EPSG','8806','False easting',1159876.62,'EPSG','9001','EPSG','8807','False northing',775380.342,'EPSG','9001','EPSG','1039','Projection plane origin height',185.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102782_USAGE','conversion','ESRI','102782','ESRI','78','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102782','MAGNA_San_Jose_del_Guaviare_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102782',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102782_USAGE','projected_crs','ESRI','102782','ESRI','78','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','79','Colombia - Neiva - Huila','Colombia - Neiva - Huila',2.433333333333334,3.45,-75.8,-74.78333333333333,0); INSERT INTO "conversion" VALUES('ESRI','102783','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',2.942415055555556,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.29643672222223,'EPSG','9102','EPSG','8806','False easting',864476.923,'EPSG','9001','EPSG','8807','False northing',817199.827,'EPSG','9001','EPSG','1039','Projection plane origin height',430.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102783_USAGE','conversion','ESRI','102783','ESRI','79','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102783','MAGNA_Neiva_Huila_2006',NULL,'EPSG','4400','EPSG','4686','ESRI','102783',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102783_USAGE','projected_crs','ESRI','102783','ESRI','79','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','80','Colombia - Riohacha - La Guajira','Colombia - Riohacha - La Guajira',11.03333333333333,12.05,-73.41666666666667,-72.4,0); INSERT INTO "conversion" VALUES('ESRI','102784','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',11.53691332777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.90276886944444,'EPSG','9102','EPSG','8806','False easting',1128154.73,'EPSG','9001','EPSG','8807','False northing',1767887.914,'EPSG','9001','EPSG','1039','Projection plane origin height',6.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102784_USAGE','conversion','ESRI','102784','ESRI','80','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102784','MAGNA_Riohacha_La_Guajira_2006',NULL,'EPSG','4400','EPSG','4686','ESRI','102784',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102784_USAGE','projected_crs','ESRI','102784','ESRI','80','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','81','Colombia - Santa Marta - Magdalena','Colombia - Santa Marta - Magdalena',10.71666666666667,11.73333333333333,-74.73333333333333,-73.71666666666667,0); INSERT INTO "conversion" VALUES('ESRI','102785','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',11.21964305555556,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.22500527777778,'EPSG','9102','EPSG','8806','False easting',983892.409,'EPSG','9001','EPSG','8807','False northing',1732533.518,'EPSG','9001','EPSG','1039','Projection plane origin height',29.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102785_USAGE','conversion','ESRI','102785','ESRI','81','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102785','MAGNA_Santa_Marta_Magdalena_2007',NULL,'EPSG','4400','EPSG','4686','ESRI','102785',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102785_USAGE','projected_crs','ESRI','102785','ESRI','81','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','82','Colombia - Villavicencio - Meta','Colombia - Villavicencio - Meta',3.65,4.666666666666667,-74.13333333333334,-73.11666666666666,0); INSERT INTO "conversion" VALUES('ESRI','102786','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.1553751,'EPSG','9102','EPSG','8802','Longitude of natural origin',-73.62448598611111,'EPSG','9102','EPSG','8806','False easting',1050678.757,'EPSG','9001','EPSG','8807','False northing',950952.124,'EPSG','9001','EPSG','1039','Projection plane origin height',427.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102786_USAGE','conversion','ESRI','102786','ESRI','82','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102786','MAGNA_Villavicencio_Meta_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102786',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102786_USAGE','projected_crs','ESRI','102786','ESRI','82','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','83','Colombia - Pasto - Narino','Colombia - Pasto - Narino',0.7,1.716666666666667,-77.76666666666667,-76.75,0); INSERT INTO "conversion" VALUES('ESRI','102787','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.200989513888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-77.25312563333334,'EPSG','9102','EPSG','8806','False easting',980469.695,'EPSG','9001','EPSG','8807','False northing',624555.332,'EPSG','9001','EPSG','1039','Projection plane origin height',2530.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102787_USAGE','conversion','ESRI','102787','ESRI','83','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102787','MAGNA_Pasto_Narino_2008',NULL,'EPSG','4400','EPSG','4686','ESRI','102787',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102787_USAGE','projected_crs','ESRI','102787','ESRI','83','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','84','Colombia - Cucuta - Norte de Santander','Colombia - Cucuta - Norte de Santander',7.383333333333334,8.4,-73.01666666666667,-72.0,0); INSERT INTO "conversion" VALUES('ESRI','102788','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',7.888936736111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.50287095,'EPSG','9102','EPSG','8806','False easting',842805.406,'EPSG','9001','EPSG','8807','False northing',1364404.57,'EPSG','9001','EPSG','1039','Projection plane origin height',308.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102788_USAGE','conversion','ESRI','102788','ESRI','84','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102788','MAGNA_Cucuta_Norte_de_Santander_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102788',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102788_USAGE','projected_crs','ESRI','102788','ESRI','84','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','85','Colombia - Mocoa - Putumayo','Colombia - Mocoa - Putumayo',0.6333333333333333,1.65,-77.16666666666667,-76.15,0); INSERT INTO "conversion" VALUES('ESRI','102789','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.140023358333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.65102121944444,'EPSG','9102','EPSG','8806','False easting',1047467.388,'EPSG','9001','EPSG','8807','False northing',617828.474,'EPSG','9001','EPSG','1039','Projection plane origin height',655.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102789_USAGE','conversion','ESRI','102789','ESRI','85','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102789','MAGNA_Mocoa_Putumayo_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102789',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102789_USAGE','projected_crs','ESRI','102789','ESRI','85','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','86','Colombia - Armenia - Quindio','Colombia - Armenia - Quindio',4.016666666666667,5.033333333333333,-76.18333333333334,-75.16666666666667,0); INSERT INTO "conversion" VALUES('ESRI','102790','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.532325,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.67348916666667,'EPSG','9102','EPSG','8806','False easting',1155824.666,'EPSG','9001','EPSG','8807','False northing',993087.465,'EPSG','9001','EPSG','1039','Projection plane origin height',1470.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102790_USAGE','conversion','ESRI','102790','ESRI','86','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102790','MAGNA_Armenia_Quindio_2006',NULL,'EPSG','4400','EPSG','4686','ESRI','102790',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102790_USAGE','projected_crs','ESRI','102790','ESRI','86','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','87','Colombia - Pereira - Risaralda','Colombia - Pereira - Risaralda',4.3,5.316666666666666,-76.2,-75.18333333333334,0); INSERT INTO "conversion" VALUES('ESRI','102791','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.813593611111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.69395138888889,'EPSG','9102','EPSG','8806','False easting',1153492.012,'EPSG','9001','EPSG','8807','False northing',1024195.255,'EPSG','9001','EPSG','1039','Projection plane origin height',1500.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102791_USAGE','conversion','ESRI','102791','ESRI','87','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102791','MAGNA_Pereira_Risaralda_2007',NULL,'EPSG','4400','EPSG','4686','ESRI','102791',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102791_USAGE','projected_crs','ESRI','102791','ESRI','87','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','88','Colombia - San_Andres - San_Andres','Colombia - San_Andres - San_Andres',12.01666666666667,13.03333333333333,-82.23333333333333,-81.21666666666667,0); INSERT INTO "conversion" VALUES('ESRI','102792','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',12.523794325,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.72937595,'EPSG','9102','EPSG','8806','False easting',820439.298,'EPSG','9001','EPSG','8807','False northing',1877357.828,'EPSG','9001','EPSG','1039','Projection plane origin height',6.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102792_USAGE','conversion','ESRI','102792','ESRI','88','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102792','MAGNA_San_Andres_2007',NULL,'EPSG','4400','EPSG','4686','ESRI','102792',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102792_USAGE','projected_crs','ESRI','102792','ESRI','88','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','89','Colombia - Bucaramanga - Santander','Colombia - Bucaramanga - Santander',6.566666666666666,7.583333333333333,-73.7,-72.68333333333334,0); INSERT INTO "conversion" VALUES('ESRI','102793','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',7.078887141666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-73.19734322222223,'EPSG','9102','EPSG','8806','False easting',1097241.305,'EPSG','9001','EPSG','8807','False northing',1274642.278,'EPSG','9001','EPSG','1039','Projection plane origin height',931.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102793_USAGE','conversion','ESRI','102793','ESRI','89','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102793','MAGNA_Bucaramanga_Santander_2008',NULL,'EPSG','4400','EPSG','4686','ESRI','102793',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102793_USAGE','projected_crs','ESRI','102793','ESRI','89','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','90','Colombia - Sucre - Sucre','Colombia - Sucre - Sucre',8.3,9.316666666666666,-75.23333333333333,-74.21666666666667,0); INSERT INTO "conversion" VALUES('ESRI','102794','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',8.810550366666668,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.722466825,'EPSG','9102','EPSG','8806','False easting',929043.607,'EPSG','9001','EPSG','8807','False northing',1466125.658,'EPSG','9001','EPSG','1039','Projection plane origin height',20.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102794_USAGE','conversion','ESRI','102794','ESRI','90','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102794','MAGNA_Sucre_2006',NULL,'EPSG','4400','EPSG','4686','ESRI','102794',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102794_USAGE','projected_crs','ESRI','102794','ESRI','90','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','91','Colombia - Ibague - Tolima','Colombia - Ibague - Tolima',3.916666666666667,4.933333333333334,-75.68333333333334,-74.66666666666667,0); INSERT INTO "conversion" VALUES('ESRI','102795','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',4.419412827777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.17992593333334,'EPSG','9102','EPSG','8806','False easting',877634.33,'EPSG','9001','EPSG','8807','False northing',980541.348,'EPSG','9001','EPSG','1039','Projection plane origin height',1100.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102795_USAGE','conversion','ESRI','102795','ESRI','91','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102795','MAGNA_Ibague_Tolima_2007',NULL,'EPSG','4400','EPSG','4686','ESRI','102795',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102795_USAGE','projected_crs','ESRI','102795','ESRI','91','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','92','Colombia - Cali - Valle del Cauca','Colombia - Cali - Valle del Cauca',2.933333333333334,3.95,-77.03333333333333,-76.01666666666667,0); INSERT INTO "conversion" VALUES('ESRI','102796','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',3.441883333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.5205625,'EPSG','9102','EPSG','8806','False easting',1061900.18,'EPSG','9001','EPSG','8807','False northing',872364.63,'EPSG','9001','EPSG','1039','Projection plane origin height',1000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102796_USAGE','conversion','ESRI','102796','ESRI','92','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102796','MAGNA_Cali_Valle_del_Cauca_2009',NULL,'EPSG','4400','EPSG','4686','ESRI','102796',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102796_USAGE','projected_crs','ESRI','102796','ESRI','92','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','93','Colombia - Mitu - Vaupes','Colombia - Mitu - Vaupes',0.7333333333333333,1.75,-70.75,-69.73333333333333,0); INSERT INTO "conversion" VALUES('ESRI','102797','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',1.249969366666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.23546165555555,'EPSG','9102','EPSG','8806','False easting',1093717.398,'EPSG','9001','EPSG','8807','False northing',629997.236,'EPSG','9001','EPSG','1039','Projection plane origin height',170.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102797_USAGE','conversion','ESRI','102797','ESRI','93','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102797','MAGNA_Mitu_Vaupes_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102797',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102797_USAGE','projected_crs','ESRI','102797','ESRI','93','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','94','Colombia - Puerto - Carreno - Vichada','Colombia - Puerto - Carreno - Vichada',5.666666666666667,6.683333333333334,-68.01666666666667,-67.0,0); INSERT INTO "conversion" VALUES('ESRI','102798','unnamed',NULL,'EPSG','1052','Colombia Urban','EPSG','8801','Latitude of natural origin',6.18072141388889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-67.50075024722223,'EPSG','9102','EPSG','8806','False easting',1063834.703,'EPSG','9001','EPSG','8807','False northing',1175257.481,'EPSG','9001','EPSG','1039','Projection plane origin height',51.58,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102798_USAGE','conversion','ESRI','102798','ESRI','94','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102798','MAGNA_Puerto_Carreno_Vichada_2011',NULL,'EPSG','4400','EPSG','4686','ESRI','102798',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102798_USAGE','projected_crs','ESRI','102798','ESRI','94','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','95','UK - Highways England - A1','UK - Highways England - A1',50.1068,50.4249,-5.5482,-5.3991,0); INSERT INTO "conversion" VALUES('ESRI','102799','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99926,'EPSG','9201','EPSG','8806','False easting',261910.5587,'EPSG','9001','EPSG','8807','False northing',70975.76209,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102799_USAGE','conversion','ESRI','102799','ESRI','95','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102799','OSGB36_Highways_England_A1H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102799',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102799_USAGE','projected_crs','ESRI','102799','ESRI','95','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','96','UK - Highways England - A2','UK - Highways England - A2',50.1106,50.4286,-5.4217,-5.2734,0); INSERT INTO "conversion" VALUES('ESRI','102800','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999314,'EPSG','9201','EPSG','8806','False easting',252927.2844,'EPSG','9001','EPSG','8807','False northing',70979.59363,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102800_USAGE','conversion','ESRI','102800','ESRI','96','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102800','OSGB36_Highways_England_A2H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102800',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102800_USAGE','projected_crs','ESRI','102800','ESRI','96','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','97','UK - Highways England - A3','UK - Highways England - A3',50.1142,50.4321,-5.2952,-5.1477,0); INSERT INTO "conversion" VALUES('ESRI','102801','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999365,'EPSG','9201','EPSG','8806','False easting',243942.3084,'EPSG','9001','EPSG','8807','False northing',70983.21269,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102801_USAGE','conversion','ESRI','102801','ESRI','97','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102801','OSGB36_Highways_England_A3H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102801',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102801_USAGE','projected_crs','ESRI','102801','ESRI','97','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102802','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99939,'EPSG','9201','EPSG','8806','False easting',243948.4072,'EPSG','9001','EPSG','8807','False northing',70984.98734,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102802_USAGE','conversion','ESRI','102802','ESRI','97','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102802','OSGB36_Highways_England_A3H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102802',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102802_USAGE','projected_crs','ESRI','102802','ESRI','97','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','98','UK - Highways England - A4','UK - Highways England - A4',50.2075,50.5253,-5.1747,-5.0277,0); INSERT INTO "conversion" VALUES('ESRI','102803','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999415,'EPSG','9201','EPSG','8806','False easting',234956.1813,'EPSG','9001','EPSG','8807','False northing',70986.76115,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102803_USAGE','conversion','ESRI','102803','ESRI','98','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102803','OSGB36_Highways_England_A4H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102803',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102803_USAGE','projected_crs','ESRI','102803','ESRI','98','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','99','UK - Highways England - A5','UK - Highways England - A5',50.2109,50.5289,-5.0479,-4.8877,0); INSERT INTO "conversion" VALUES('ESRI','102804','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999465,'EPSG','9201','EPSG','8806','False easting',225969.1556,'EPSG','9001','EPSG','8807','False northing',70990.30995,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102804_USAGE','conversion','ESRI','102804','ESRI','99','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102804','OSGB36_Highways_England_A5H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102804',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102804_USAGE','projected_crs','ESRI','102804','ESRI','99','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102805','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99949,'EPSG','9201','EPSG','8806','False easting',225974.8051,'EPSG','9001','EPSG','8807','False northing',70992.08478,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102805_USAGE','conversion','ESRI','102805','ESRI','99','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102805','OSGB36_Highways_England_A5H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102805',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102805_USAGE','projected_crs','ESRI','102805','ESRI','99','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','100','UK - Highways England - A6','UK - Highways England - A6',50.2144,50.5323,-4.907,-4.7477,0); INSERT INTO "conversion" VALUES('ESRI','102806','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999516,'EPSG','9201','EPSG','8806','False easting',215981.5338,'EPSG','9001','EPSG','8807','False northing',70993.93011,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102806_USAGE','conversion','ESRI','102806','ESRI','100','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102806','OSGB36_Highways_England_A6H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102806',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102806_USAGE','projected_crs','ESRI','102806','ESRI','100','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102807','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999541,'EPSG','9201','EPSG','8806','False easting',215986.9336,'EPSG','9001','EPSG','8807','False northing',70995.70502,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102807_USAGE','conversion','ESRI','102807','ESRI','100','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102807','OSGB36_Highways_England_A6H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102807',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102807_USAGE','projected_crs','ESRI','102807','ESRI','100','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','101','UK - Highways England - A7','UK - Highways England - A7',50.3975,50.5356,-4.766,-4.6175,0); INSERT INTO "conversion" VALUES('ESRI','102808','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999564,'EPSG','9201','EPSG','8806','False easting',205992.2754,'EPSG','9001','EPSG','8807','False northing',70997.33764,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102808_USAGE','conversion','ESRI','102808','ESRI','101','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102808','OSGB36_Highways_England_A7H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102808',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102808_USAGE','projected_crs','ESRI','102808','ESRI','101','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102809','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999589,'EPSG','9201','EPSG','8806','False easting',205997.4254,'EPSG','9001','EPSG','8807','False northing',70999.11264,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102809_USAGE','conversion','ESRI','102809','ESRI','101','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102809','OSGB36_Highways_England_A7H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102809',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102809_USAGE','projected_crs','ESRI','102809','ESRI','101','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','102','UK - Highways England - A8','UK - Highways England - A8',50.221,50.7996,-4.6397,-4.4536,0); INSERT INTO "conversion" VALUES('ESRI','102810','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999613,'EPSG','9201','EPSG','8806','False easting',196002.254,'EPSG','9001','EPSG','8807','False northing',71000.81651,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102810_USAGE','conversion','ESRI','102810','ESRI','102','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102810','OSGB36_Highways_England_A8H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102810',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102810_USAGE','projected_crs','ESRI','102810','ESRI','102','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102811','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999638,'EPSG','9201','EPSG','8806','False easting',196007.1543,'EPSG','9001','EPSG','8807','False northing',71002.5916,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102811_USAGE','conversion','ESRI','102811','ESRI','102','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102811','OSGB36_Highways_England_A8H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102811',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102811_USAGE','projected_crs','ESRI','102811','ESRI','102','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','103','UK - Highways England - A9','UK - Highways England - A9',50.2244,50.8031,-4.4837,-4.2855,0); INSERT INTO "conversion" VALUES('ESRI','102812','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999662,'EPSG','9201','EPSG','8806','False easting',185011.1931,'EPSG','9001','EPSG','8807','False northing',71004.29572,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102812_USAGE','conversion','ESRI','102812','ESRI','103','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102812','OSGB36_Highways_England_A9H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102812',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102812_USAGE','projected_crs','ESRI','102812','ESRI','103','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102813','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999687,'EPSG','9201','EPSG','8806','False easting',185015.8185,'EPSG','9001','EPSG','8807','False northing',71006.07089,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102813_USAGE','conversion','ESRI','102813','ESRI','103','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102813','OSGB36_Highways_England_A9H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102813',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102813_USAGE','projected_crs','ESRI','102813','ESRI','103','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','104','UK - Highways England - A10','UK - Highways England - A10',50.2278,50.8069,-4.3136,-4.0893,0); INSERT INTO "conversion" VALUES('ESRI','102814','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999713,'EPSG','9201','EPSG','8806','False easting',173019.2914,'EPSG','9001','EPSG','8807','False northing',71007.91729,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102814_USAGE','conversion','ESRI','102814','ESRI','104','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102814','OSGB36_Highways_England_A10H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102814',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102814_USAGE','projected_crs','ESRI','102814','ESRI','104','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102815','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999738,'EPSG','9201','EPSG','8806','False easting',173023.6171,'EPSG','9001','EPSG','8807','False northing',71009.69256,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102815_USAGE','conversion','ESRI','102815','ESRI','104','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102815','OSGB36_Highways_England_A10H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102815',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102815_USAGE','projected_crs','ESRI','102815','ESRI','104','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','105','UK - Highways England - A11','UK - Highways England - A11',50.2315,50.8105,-4.115,-3.8791,0); INSERT INTO "conversion" VALUES('ESRI','102816','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999767,'EPSG','9201','EPSG','8806','False easting',159026.3186,'EPSG','9001','EPSG','8807','False northing',71011.75231,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102816_USAGE','conversion','ESRI','102816','ESRI','105','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102816','OSGB36_Highways_England_A11H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102816',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102816_USAGE','projected_crs','ESRI','102816','ESRI','105','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102817','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999792,'EPSG','9201','EPSG','8806','False easting',159030.2944,'EPSG','9001','EPSG','8807','False northing',71013.52767,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102817_USAGE','conversion','ESRI','102817','ESRI','105','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102817','OSGB36_Highways_England_A11H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102817',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102817_USAGE','projected_crs','ESRI','102817','ESRI','105','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102818','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999817,'EPSG','9201','EPSG','8806','False easting',159034.2704,'EPSG','9001','EPSG','8807','False northing',71015.30312,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102818_USAGE','conversion','ESRI','102818','ESRI','105','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102818','OSGB36_Highways_England_A11H3',NULL,'EPSG','4400','EPSG','4277','ESRI','102818',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102818_USAGE','projected_crs','ESRI','102818','ESRI','105','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','106','UK - Highways England - A12','UK - Highways England - A12',50.2351,50.814,-3.9022,-3.6549,0); INSERT INTO "conversion" VALUES('ESRI','102819','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999817,'EPSG','9201','EPSG','8806','False easting',144031.0383,'EPSG','9001','EPSG','8807','False northing',71015.30362,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102819_USAGE','conversion','ESRI','102819','ESRI','106','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102819','OSGB36_Highways_England_A12H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102819',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102819_USAGE','projected_crs','ESRI','102819','ESRI','106','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102820','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999842,'EPSG','9201','EPSG','8806','False easting',144034.6392,'EPSG','9001','EPSG','8807','False northing',71017.07907,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102820_USAGE','conversion','ESRI','102820','ESRI','106','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102820','OSGB36_Highways_England_A12H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102820',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102820_USAGE','projected_crs','ESRI','102820','ESRI','106','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102821','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999867,'EPSG','9201','EPSG','8806','False easting',144038.2403,'EPSG','9001','EPSG','8807','False northing',71018.8546,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102821_USAGE','conversion','ESRI','102821','ESRI','106','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102821','OSGB36_Highways_England_A12H3',NULL,'EPSG','4400','EPSG','4277','ESRI','102821',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102821_USAGE','projected_crs','ESRI','102821','ESRI','106','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','107','UK - Highways England - A13','UK - Highways England - A13',50.4183,50.8981,-3.6781,-3.4219,0); INSERT INTO "conversion" VALUES('ESRI','102822','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999865,'EPSG','9201','EPSG','8806','False easting',128033.7365,'EPSG','9001','EPSG','8807','False northing',71018.71321,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102822_USAGE','conversion','ESRI','102822','ESRI','107','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102822','OSGB36_Highways_England_A13H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102822',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102822_USAGE','projected_crs','ESRI','102822','ESRI','107','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102823','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99989,'EPSG','9201','EPSG','8806','False easting',128036.9375,'EPSG','9001','EPSG','8807','False northing',71020.48874,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102823_USAGE','conversion','ESRI','102823','ESRI','107','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102823','OSGB36_Highways_England_A13H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102823',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102823_USAGE','projected_crs','ESRI','102823','ESRI','107','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','108','UK - Highways England - A14','UK - Highways England - A14',50.585,51.1984,-4.4468,-3.1023,0); INSERT INTO "conversion" VALUES('ESRI','102824','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999914,'EPSG','9201','EPSG','8806','False easting',111034.6979,'EPSG','9001','EPSG','8807','False northing',71022.19417,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102824_USAGE','conversion','ESRI','102824','ESRI','108','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102824','OSGB36_Highways_England_A14H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102824',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102824_USAGE','projected_crs','ESRI','102824','ESRI','108','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102825','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999939,'EPSG','9201','EPSG','8806','False easting',111037.4739,'EPSG','9001','EPSG','8807','False northing',71023.96979,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102825_USAGE','conversion','ESRI','102825','ESRI','108','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102825','OSGB36_Highways_England_A14H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102825',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102825_USAGE','projected_crs','ESRI','102825','ESRI','108','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','109','UK - Highways England - A15','UK - Highways England - A15',50.6049,52.0473,-3.1375,-2.6218,0); INSERT INTO "conversion" VALUES('ESRI','102826','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999967,'EPSG','9201','EPSG','8806','False easting',88032.17537,'EPSG','9001','EPSG','8807','False northing',71025.95967,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102826_USAGE','conversion','ESRI','102826','ESRI','109','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102826','OSGB36_Highways_England_A15H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102826',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102826_USAGE','projected_crs','ESRI','102826','ESRI','109','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102827','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999992,'EPSG','9201','EPSG','8806','False easting',88034.37626,'EPSG','9001','EPSG','8807','False northing',71027.73539,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102827_USAGE','conversion','ESRI','102827','ESRI','109','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102827','OSGB36_Highways_England_A15H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102827',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102827_USAGE','projected_crs','ESRI','102827','ESRI','109','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','110','UK - Highways England - A16','UK - Highways England - A16',50.6084,52.048,-2.6417,-1.5041,0); INSERT INTO "conversion" VALUES('ESRI','102828','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000012,'EPSG','9201','EPSG','8806','False easting',54022.17583,'EPSG','9001','EPSG','8807','False northing',71029.15712,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102828_USAGE','conversion','ESRI','102828','ESRI','110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102828','OSGB36_Highways_England_A16H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102828',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102828_USAGE','projected_crs','ESRI','102828','ESRI','110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102829','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000037,'EPSG','9201','EPSG','8806','False easting',54023.52644,'EPSG','9001','EPSG','8807','False northing',71030.93291,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102829_USAGE','conversion','ESRI','102829','ESRI','110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102829','OSGB36_Highways_England_A16H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102829',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102829_USAGE','projected_crs','ESRI','102829','ESRI','110','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','111','UK - Highways England - A17','UK - Highways England - A17',50.777,52.048,-1.5177,-1.0083,0); INSERT INTO "conversion" VALUES('ESRI','102830','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999981,'EPSG','9201','EPSG','8806','False easting',-24009.11135,'EPSG','9001','EPSG','8807','False northing',71026.9544,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102830_USAGE','conversion','ESRI','102830','ESRI','111','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102830','OSGB36_Highways_England_A17H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102830',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102830_USAGE','projected_crs','ESRI','102830','ESRI','111','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102831','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000006,'EPSG','9201','EPSG','8806','False easting',-24009.7116,'EPSG','9001','EPSG','8807','False northing',71028.73014,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102831_USAGE','conversion','ESRI','102831','ESRI','111','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102831','OSGB36_Highways_England_A17H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102831',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102831_USAGE','projected_crs','ESRI','102831','ESRI','111','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','112','UK - Highways England - A18','UK - Highways England - A18',50.7727,52.0448,-1.0355,-0.571,0); INSERT INTO "conversion" VALUES('ESRI','102832','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999928,'EPSG','9201','EPSG','8806','False easting',-58018.94296,'EPSG','9001','EPSG','8807','False northing',71023.18879,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102832_USAGE','conversion','ESRI','102832','ESRI','112','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102832','OSGB36_Highways_England_A18H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102832',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102832_USAGE','projected_crs','ESRI','102832','ESRI','112','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102833','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999953,'EPSG','9201','EPSG','8806','False easting',-58020.39349,'EPSG','9001','EPSG','8807','False northing',71024.96444,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102833_USAGE','conversion','ESRI','102833','ESRI','112','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102833','OSGB36_Highways_England_A18H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102833',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102833_USAGE','projected_crs','ESRI','102833','ESRI','112','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','113','UK - Highways England - A19','UK - Highways England - A19',50.7696,52.0404,-0.6101,-0.3232,0); INSERT INTO "conversion" VALUES('ESRI','102834','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999874,'EPSG','9201','EPSG','8806','False easting',-88023.98625,'EPSG','9001','EPSG','8807','False northing',71019.35254,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102834_USAGE','conversion','ESRI','102834','ESRI','113','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102834','OSGB36_Highways_England_A19H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102834',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102834_USAGE','projected_crs','ESRI','102834','ESRI','113','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102835','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999899,'EPSG','9201','EPSG','8806','False easting',-88026.18693,'EPSG','9001','EPSG','8807','False northing',71021.12809,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102835_USAGE','conversion','ESRI','102835','ESRI','113','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102835','OSGB36_Highways_England_A19H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102835',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102835_USAGE','projected_crs','ESRI','102835','ESRI','113','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','114','UK - Highways England - A20','UK - Highways England - A20',50.7659,52.0371,-0.369,-0.0755,0); INSERT INTO "conversion" VALUES('ESRI','102836','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999826,'EPSG','9201','EPSG','8806','False easting',-105023.5775,'EPSG','9001','EPSG','8807','False northing',71015.94289,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102836_USAGE','conversion','ESRI','102836','ESRI','114','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102836','OSGB36_Highways_England_A20H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102836',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102836_USAGE','projected_crs','ESRI','102836','ESRI','114','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102837','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999851,'EPSG','9201','EPSG','8806','False easting',-105026.2032,'EPSG','9001','EPSG','8807','False northing',71017.71836,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102837_USAGE','conversion','ESRI','102837','ESRI','114','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102837','OSGB36_Highways_England_A20H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102837',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102837_USAGE','projected_crs','ESRI','102837','ESRI','114','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','115','UK - Highways England - A21','UK - Highways England - A21',50.7618,52.0333,-0.128,0.1722,0); INSERT INTO "conversion" VALUES('ESRI','102838','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999771,'EPSG','9201','EPSG','8806','False easting',-122020.6823,'EPSG','9001','EPSG','8807','False northing',71012.0364,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102838_USAGE','conversion','ESRI','102838','ESRI','115','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102838','OSGB36_Highways_England_A21H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102838',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102838_USAGE','projected_crs','ESRI','102838','ESRI','115','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102839','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999796,'EPSG','9201','EPSG','8806','False easting',-122023.7329,'EPSG','9001','EPSG','8807','False northing',71013.81177,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102839_USAGE','conversion','ESRI','102839','ESRI','115','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102839','OSGB36_Highways_England_A21H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102839',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102839_USAGE','projected_crs','ESRI','102839','ESRI','115','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','116','UK - Highways England - A22','UK - Highways England - A22',50.7572,52.029,0.1129,0.4198,0); INSERT INTO "conversion" VALUES('ESRI','102840','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999708,'EPSG','9201','EPSG','8806','False easting',-139014.8049,'EPSG','9001','EPSG','8807','False northing',71007.56222,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102840_USAGE','conversion','ESRI','102840','ESRI','116','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102840','OSGB36_Highways_England_A22H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102840',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102840_USAGE','projected_crs','ESRI','102840','ESRI','116','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102841','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999733,'EPSG','9201','EPSG','8806','False easting',-139018.2804,'EPSG','9001','EPSG','8807','False northing',71009.33748,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102841_USAGE','conversion','ESRI','102841','ESRI','116','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102841','OSGB36_Highways_England_A22H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102841',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102841_USAGE','projected_crs','ESRI','102841','ESRI','116','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','117','UK - Highways England - A23','UK - Highways England - A23',50.7546,52.0242,0.3537,0.5509,0); INSERT INTO "conversion" VALUES('ESRI','102842','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999656,'EPSG','9201','EPSG','8806','False easting',-156008.5024,'EPSG','9001','EPSG','8807','False northing',71003.86967,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102842_USAGE','conversion','ESRI','102842','ESRI','117','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102842','OSGB36_Highways_England_A23H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102842',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102842_USAGE','projected_crs','ESRI','102842','ESRI','117','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102843','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999681,'EPSG','9201','EPSG','8806','False easting',-156012.4027,'EPSG','9001','EPSG','8807','False northing',71005.64484,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102843_USAGE','conversion','ESRI','102843','ESRI','117','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102843','OSGB36_Highways_England_A23H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102843',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102843_USAGE','projected_crs','ESRI','102843','ESRI','117','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','118','UK - Highways England - A24','UK - Highways England - A24',50.7511,52.0214,0.4812,0.711,0); INSERT INTO "conversion" VALUES('ESRI','102844','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999613,'EPSG','9201','EPSG','8806','False easting',-165001.8975,'EPSG','9001','EPSG','8807','False northing',71000.81651,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102844_USAGE','conversion','ESRI','102844','ESRI','118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102844','OSGB36_Highways_England_A24H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102844',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102844_USAGE','projected_crs','ESRI','102844','ESRI','118','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102845','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999638,'EPSG','9201','EPSG','8806','False easting',-165006.0227,'EPSG','9001','EPSG','8807','False northing',71002.5916,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102845_USAGE','conversion','ESRI','102845','ESRI','118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102845','OSGB36_Highways_England_A24H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102845',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102845_USAGE','projected_crs','ESRI','102845','ESRI','118','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','119','UK - Highways England - A25','UK - Highways England - A25',50.7478,52.0178,0.637,0.8566,0); INSERT INTO "conversion" VALUES('ESRI','102846','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999565,'EPSG','9201','EPSG','8806','False easting',-175993.5763,'EPSG','9001','EPSG','8807','False northing',70997.40864,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102846_USAGE','conversion','ESRI','102846','ESRI','119','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102846','OSGB36_Highways_England_A25H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102846',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102846_USAGE','projected_crs','ESRI','102846','ESRI','119','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102847','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99959,'EPSG','9201','EPSG','8806','False easting',-175997.9763,'EPSG','9001','EPSG','8807','False northing',70999.18364,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102847_USAGE','conversion','ESRI','102847','ESRI','119','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102847','OSGB36_Highways_England_A25H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102847',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102847_USAGE','projected_crs','ESRI','102847','ESRI','119','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','120','UK - Highways England - A26','UK - Highways England - A26',50.7444,52.0144,0.7786,1.0021,0); INSERT INTO "conversion" VALUES('ESRI','102848','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999517,'EPSG','9201','EPSG','8806','False easting',-185984.2846,'EPSG','9001','EPSG','8807','False northing',70994.00109,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102848_USAGE','conversion','ESRI','102848','ESRI','120','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102848','OSGB36_Highways_England_A26H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102848',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102848_USAGE','projected_crs','ESRI','102848','ESRI','120','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102849','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999542,'EPSG','9201','EPSG','8806','False easting',-185988.9343,'EPSG','9001','EPSG','8807','False northing',70995.77601,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102849_USAGE','conversion','ESRI','102849','ESRI','120','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102849','OSGB36_Highways_England_A26H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102849',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102849_USAGE','projected_crs','ESRI','102849','ESRI','120','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','121','UK - Highways England - A27','UK - Highways England - A27',50.9293,52.0108,0.932,1.1476,0); INSERT INTO "conversion" VALUES('ESRI','102850','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999467,'EPSG','9201','EPSG','8806','False easting',-195973.6419,'EPSG','9001','EPSG','8807','False northing',70990.45191,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102850_USAGE','conversion','ESRI','102850','ESRI','121','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102850','OSGB36_Highways_England_A27H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102850',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102850_USAGE','projected_crs','ESRI','102850','ESRI','121','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102851','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999492,'EPSG','9201','EPSG','8806','False easting',-195978.5414,'EPSG','9001','EPSG','8807','False northing',70992.22674,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102851_USAGE','conversion','ESRI','102851','ESRI','121','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102851','OSGB36_Highways_England_A27H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102851',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102851_USAGE','projected_crs','ESRI','102851','ESRI','121','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','122','UK - Highways England - A28','UK - Highways England - A28',50.9259,52.007,1.0741,1.2785,0); INSERT INTO "conversion" VALUES('ESRI','102852','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999416,'EPSG','9201','EPSG','8806','False easting',-205961.7946,'EPSG','9001','EPSG','8807','False northing',70986.83212,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102852_USAGE','conversion','ESRI','102852','ESRI','122','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102852','OSGB36_Highways_England_A28H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102852',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102852_USAGE','projected_crs','ESRI','102852','ESRI','122','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102853','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999441,'EPSG','9201','EPSG','8806','False easting',-205966.9438,'EPSG','9001','EPSG','8807','False northing',70988.60686,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102853_USAGE','conversion','ESRI','102853','ESRI','122','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102853','OSGB36_Highways_England_A28H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102853',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102853_USAGE','projected_crs','ESRI','102853','ESRI','122','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','123','UK - Highways England - A29','UK - Highways England - A29',50.9223,52.0034,1.202,1.4094,0); INSERT INTO "conversion" VALUES('ESRI','102854','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999366,'EPSG','9201','EPSG','8806','False easting',-214949.3801,'EPSG','9001','EPSG','8807','False northing',70983.28366,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102854_USAGE','conversion','ESRI','102854','ESRI','123','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102854','OSGB36_Highways_England_A29H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102854',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102854_USAGE','projected_crs','ESRI','102854','ESRI','123','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','124','UK - Highways England - A30','UK - Highways England - A30',50.9186,51.9997,1.3299,1.5403,0); INSERT INTO "conversion" VALUES('ESRI','102855','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999314,'EPSG','9201','EPSG','8806','False easting',-223935.6193,'EPSG','9001','EPSG','8807','False northing',70979.59363,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102855_USAGE','conversion','ESRI','102855','ESRI','124','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102855','OSGB36_Highways_England_A30H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102855',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102855_USAGE','projected_crs','ESRI','102855','ESRI','124','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','125','UK - Highways England - B15','UK - Highways England - B15',52.0434,53.9351,-3.1882,-2.6416,0); INSERT INTO "conversion" VALUES('ESRI','102856','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999967,'EPSG','9201','EPSG','8806','False easting',88032.17537,'EPSG','9001','EPSG','8807','False northing',111040.5848,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102856_USAGE','conversion','ESRI','102856','ESRI','125','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102856','OSGB36_Highways_England_B15H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102856',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102856_USAGE','projected_crs','ESRI','102856','ESRI','125','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102857','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999992,'EPSG','9201','EPSG','8806','False easting',88034.37626,'EPSG','9001','EPSG','8807','False northing',111043.361,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102857_USAGE','conversion','ESRI','102857','ESRI','125','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102857','OSGB36_Highways_England_B15H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102857',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102857_USAGE','projected_crs','ESRI','102857','ESRI','125','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102858','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000017,'EPSG','9201','EPSG','8806','False easting',88036.57726,'EPSG','9001','EPSG','8807','False northing',111046.1372,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102858_USAGE','conversion','ESRI','102858','ESRI','125','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102858','OSGB36_Highways_England_B15H3',NULL,'EPSG','4400','EPSG','4277','ESRI','102858',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102858_USAGE','projected_crs','ESRI','102858','ESRI','125','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','126','UK - Highways England - B16','UK - Highways England - B16',52.0472,53.9359,-2.6703,-1.482,0); INSERT INTO "conversion" VALUES('ESRI','102859','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000012,'EPSG','9201','EPSG','8806','False easting',54022.17583,'EPSG','9001','EPSG','8807','False northing',111045.5837,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102859_USAGE','conversion','ESRI','102859','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102859','OSGB36_Highways_England_B16H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102859',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102859_USAGE','projected_crs','ESRI','102859','ESRI','126','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102860','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000037,'EPSG','9201','EPSG','8806','False easting',54023.52644,'EPSG','9001','EPSG','8807','False northing',111048.3599,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102860_USAGE','conversion','ESRI','102860','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102860','OSGB36_Highways_England_B16H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102860',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102860_USAGE','projected_crs','ESRI','102860','ESRI','126','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102861','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000062,'EPSG','9201','EPSG','8806','False easting',54024.87711,'EPSG','9001','EPSG','8807','False northing',111051.1363,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102861_USAGE','conversion','ESRI','102861','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102861','OSGB36_Highways_England_B16H3',NULL,'EPSG','4400','EPSG','4277','ESRI','102861',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102861_USAGE','projected_crs','ESRI','102861','ESRI','126','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102862','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000087,'EPSG','9201','EPSG','8806','False easting',54026.22785,'EPSG','9001','EPSG','8807','False northing',111053.9128,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102862_USAGE','conversion','ESRI','102862','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102862','OSGB36_Highways_England_B16H4',NULL,'EPSG','4400','EPSG','4277','ESRI','102862',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102862_USAGE','projected_crs','ESRI','102862','ESRI','126','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','127','UK - Highways England - B17','UK - Highways England - B17',52.0447,53.9359,-1.5042,-0.9641,0); INSERT INTO "conversion" VALUES('ESRI','102863','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999981,'EPSG','9201','EPSG','8806','False easting',-24009.11135,'EPSG','9001','EPSG','8807','False northing',111042.14,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102863_USAGE','conversion','ESRI','102863','ESRI','127','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102863','OSGB36_Highways_England_B17H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102863',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102863_USAGE','projected_crs','ESRI','102863','ESRI','127','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102864','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000006,'EPSG','9201','EPSG','8806','False easting',-24009.7116,'EPSG','9001','EPSG','8807','False northing',111044.9161,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102864_USAGE','conversion','ESRI','102864','ESRI','127','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102864','OSGB36_Highways_England_B17H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102864',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102864_USAGE','projected_crs','ESRI','102864','ESRI','127','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','128','UK - Highways England - B18','UK - Highways England - B18',52.0403,53.9325,-1.0084,-0.5073,0); INSERT INTO "conversion" VALUES('ESRI','102865','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999928,'EPSG','9201','EPSG','8806','False easting',-58018.94296,'EPSG','9001','EPSG','8807','False northing',111036.2529,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102865_USAGE','conversion','ESRI','102865','ESRI','128','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102865','OSGB36_Highways_England_B18H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102865',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102865_USAGE','projected_crs','ESRI','102865','ESRI','128','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102866','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999953,'EPSG','9201','EPSG','8806','False easting',-58020.39349,'EPSG','9001','EPSG','8807','False northing',111039.0289,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102866_USAGE','conversion','ESRI','102866','ESRI','128','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102866','OSGB36_Highways_England_B18H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102866',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102866_USAGE','projected_crs','ESRI','102866','ESRI','128','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','129','UK - Highways England - B19','UK - Highways England - B19',52.037,53.9277,-0.5711,-0.2485,0); INSERT INTO "conversion" VALUES('ESRI','102867','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999874,'EPSG','9201','EPSG','8806','False easting',-88023.98625,'EPSG','9001','EPSG','8807','False northing',111030.2554,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102867_USAGE','conversion','ESRI','102867','ESRI','129','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102867','OSGB36_Highways_England_B19H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102867',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102867_USAGE','projected_crs','ESRI','102867','ESRI','129','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','130','UK - Highways England - B20','UK - Highways England - B20',52.0332,53.9242,-0.3233,0.0103,0); INSERT INTO "conversion" VALUES('ESRI','102868','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999826,'EPSG','9201','EPSG','8806','False easting',-105023.5775,'EPSG','9001','EPSG','8807','False northing',111024.9248,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102868_USAGE','conversion','ESRI','102868','ESRI','130','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102868','OSGB36_Highways_England_B20H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102868',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102868_USAGE','projected_crs','ESRI','102868','ESRI','130','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','131','UK - Highways England - B21','UK - Highways England - B21',52.0289,52.8061,-0.0756,0.2105,0); INSERT INTO "conversion" VALUES('ESRI','102869','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999771,'EPSG','9201','EPSG','8806','False easting',-122020.6823,'EPSG','9001','EPSG','8807','False northing',111018.8175,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102869_USAGE','conversion','ESRI','102869','ESRI','131','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102869','OSGB36_Highways_England_B21H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102869',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102869_USAGE','projected_crs','ESRI','102869','ESRI','131','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','132','UK - Highways England - B22','UK - Highways England - B22',52.0241,52.8017,0.1721,0.4625,0); INSERT INTO "conversion" VALUES('ESRI','102870','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999709,'EPSG','9201','EPSG','8806','False easting',-139014.9439,'EPSG','9001','EPSG','8807','False northing',111011.9337,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102870_USAGE','conversion','ESRI','102870','ESRI','132','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102870','OSGB36_Highways_England_B22H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102870',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102870_USAGE','projected_crs','ESRI','102870','ESRI','132','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','133','UK - Highways England - B23','UK - Highways England - B23',52.0213,52.7967,0.4197,0.5958,0); INSERT INTO "conversion" VALUES('ESRI','102871','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999656,'EPSG','9201','EPSG','8806','False easting',-156008.5024,'EPSG','9001','EPSG','8807','False northing',111006.0498,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102871_USAGE','conversion','ESRI','102871','ESRI','133','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102871','OSGB36_Highways_England_B23H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102871',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102871_USAGE','projected_crs','ESRI','102871','ESRI','133','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','134','UK - Highways England - B24','UK - Highways England - B24',52.0177,52.7939,0.5508,0.7588,0); INSERT INTO "conversion" VALUES('ESRI','102872','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999614,'EPSG','9201','EPSG','8806','False easting',-165002.0625,'EPSG','9001','EPSG','8807','False northing',111001.3875,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102872_USAGE','conversion','ESRI','102872','ESRI','134','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102872','OSGB36_Highways_England_B24H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102872',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102872_USAGE','projected_crs','ESRI','102872','ESRI','134','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','135','UK - Highways England - B25','UK - Highways England - B25',52.0143,52.7902,0.7109,0.9069,0); INSERT INTO "conversion" VALUES('ESRI','102873','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999565,'EPSG','9201','EPSG','8806','False easting',-175993.5763,'EPSG','9001','EPSG','8807','False northing',110995.9487,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102873_USAGE','conversion','ESRI','102873','ESRI','135','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102873','OSGB36_Highways_England_B25H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102873',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102873_USAGE','projected_crs','ESRI','102873','ESRI','135','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','136','UK - Highways England - B26','UK - Highways England - B26',52.0107,52.7866,0.8565,1.055,0); INSERT INTO "conversion" VALUES('ESRI','102874','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999517,'EPSG','9201','EPSG','8806','False easting',-185984.2846,'EPSG','9001','EPSG','8807','False northing',110990.6214,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102874_USAGE','conversion','ESRI','102874','ESRI','136','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102874','OSGB36_Highways_England_B26H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102874',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102874_USAGE','projected_crs','ESRI','102874','ESRI','136','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','137','UK - Highways England - B27','UK - Highways England - B27',52.0069,52.7829,1.002,1.2031,0); INSERT INTO "conversion" VALUES('ESRI','102875','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999467,'EPSG','9201','EPSG','8806','False easting',-195973.6419,'EPSG','9001','EPSG','8807','False northing',110985.0727,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102875_USAGE','conversion','ESRI','102875','ESRI','137','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102875','OSGB36_Highways_England_B27H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102875',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102875_USAGE','projected_crs','ESRI','102875','ESRI','137','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','138','UK - Highways England - B28','UK - Highways England - B28',52.0033,52.779,1.1475,1.3363,0); INSERT INTO "conversion" VALUES('ESRI','102876','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999416,'EPSG','9201','EPSG','8806','False easting',-205961.7946,'EPSG','9001','EPSG','8807','False northing',110979.4136,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102876_USAGE','conversion','ESRI','102876','ESRI','138','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102876','OSGB36_Highways_England_B28H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102876',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102876_USAGE','projected_crs','ESRI','102876','ESRI','138','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','139','UK - Highways England - B29','UK - Highways England - B29',51.9996,52.7753,1.2784,1.4695,0); INSERT INTO "conversion" VALUES('ESRI','102877','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999367,'EPSG','9201','EPSG','8806','False easting',-214949.595,'EPSG','9001','EPSG','8807','False northing',110973.9769,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102877_USAGE','conversion','ESRI','102877','ESRI','139','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102877','OSGB36_Highways_England_B29H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102877',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102877_USAGE','projected_crs','ESRI','102877','ESRI','139','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','140','UK - Highways England - B30','UK - Highways England - B30',51.9957,52.7715,1.4093,1.6026,0); INSERT INTO "conversion" VALUES('ESRI','102878','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999315,'EPSG','9201','EPSG','8806','False easting',-223935.8432,'EPSG','9001','EPSG','8807','False northing',110968.208,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102878_USAGE','conversion','ESRI','102878','ESRI','140','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102878','OSGB36_Highways_England_B30H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102878',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102878_USAGE','projected_crs','ESRI','102878','ESRI','140','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','141','UK - Highways England - B31','UK - Highways England - B31',52.3416,52.7675,1.5681,1.7357,0); INSERT INTO "conversion" VALUES('ESRI','102879','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999261,'EPSG','9201','EPSG','8806','False easting',-232920.6915,'EPSG','9001','EPSG','8807','False northing',110962.2179,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102879_USAGE','conversion','ESRI','102879','ESRI','141','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102879','OSGB36_Highways_England_B31H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102879',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102879_USAGE','projected_crs','ESRI','102879','ESRI','141','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','142','UK - Highways England - B32','UK - Highways England - B32',52.3374,52.7634,1.6999,1.8688,0); INSERT INTO "conversion" VALUES('ESRI','102880','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999206,'EPSG','9201','EPSG','8806','False easting',-241904.3281,'EPSG','9001','EPSG','8807','False northing',110956.1174,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102880_USAGE','conversion','ESRI','102880','ESRI','142','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102880','OSGB36_Highways_England_B32H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102880',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102880_USAGE','projected_crs','ESRI','102880','ESRI','142','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','143','UK - Highways England - C13','UK - Highways England - C13',54.3636,54.7717,-3.8344,-3.5547,0); INSERT INTO "conversion" VALUES('ESRI','102881','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999866,'EPSG','9201','EPSG','8806','False easting',128033.8646,'EPSG','9001','EPSG','8807','False northing',126033.3354,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102881_USAGE','conversion','ESRI','102881','ESRI','143','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102881','OSGB36_Highways_England_C13H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102881',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102881_USAGE','projected_crs','ESRI','102881','ESRI','143','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','144','UK - Highways England - C14','UK - Highways England - C14',54.0079,54.7758,-3.5703,-3.1904,0); INSERT INTO "conversion" VALUES('ESRI','102882','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999914,'EPSG','9201','EPSG','8806','False easting',111034.6979,'EPSG','9001','EPSG','8807','False northing',126039.3868,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102882_USAGE','conversion','ESRI','102882','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102882','OSGB36_Highways_England_C14H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102882',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102882_USAGE','projected_crs','ESRI','102882','ESRI','144','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102883','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999939,'EPSG','9201','EPSG','8806','False easting',111037.4739,'EPSG','9001','EPSG','8807','False northing',126042.5379,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102883_USAGE','conversion','ESRI','102883','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102883','OSGB36_Highways_England_C14H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102883',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102883_USAGE','projected_crs','ESRI','102883','ESRI','144','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102884','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999964,'EPSG','9201','EPSG','8806','False easting',111040.25,'EPSG','9001','EPSG','8807','False northing',126045.6892,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102884_USAGE','conversion','ESRI','102884','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102884','OSGB36_Highways_England_C14H3',NULL,'EPSG','4400','EPSG','4277','ESRI','102884',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102884_USAGE','projected_crs','ESRI','102884','ESRI','144','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102885','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999989,'EPSG','9201','EPSG','8806','False easting',111043.0263,'EPSG','9001','EPSG','8807','False northing',126048.8406,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102885_USAGE','conversion','ESRI','102885','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102885','OSGB36_Highways_England_C14H4',NULL,'EPSG','4400','EPSG','4277','ESRI','102885',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102885_USAGE','projected_crs','ESRI','102885','ESRI','144','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','145','UK - Highways England - C15','UK - Highways England - C15',53.931,55.1394,-3.2237,-2.6702,0); INSERT INTO "conversion" VALUES('ESRI','102886','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999967,'EPSG','9201','EPSG','8806','False easting',88032.17537,'EPSG','9001','EPSG','8807','False northing',126046.0693,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102886_USAGE','conversion','ESRI','102886','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102886','OSGB36_Highways_England_C15H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102886',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102886_USAGE','projected_crs','ESRI','102886','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102887','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999992,'EPSG','9201','EPSG','8806','False easting',88034.37626,'EPSG','9001','EPSG','8807','False northing',126049.2206,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102887_USAGE','conversion','ESRI','102887','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102887','OSGB36_Highways_England_C15H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102887',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102887_USAGE','projected_crs','ESRI','102887','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102888','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000017,'EPSG','9201','EPSG','8806','False easting',88036.57726,'EPSG','9001','EPSG','8807','False northing',126052.372,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102888_USAGE','conversion','ESRI','102888','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102888','OSGB36_Highways_England_C15H3',NULL,'EPSG','4400','EPSG','4277','ESRI','102888',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102888_USAGE','projected_crs','ESRI','102888','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102889','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000042,'EPSG','9201','EPSG','8806','False easting',88038.77836,'EPSG','9001','EPSG','8807','False northing',126055.5236,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102889_USAGE','conversion','ESRI','102889','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102889','OSGB36_Highways_England_C15H4',NULL,'EPSG','4400','EPSG','4277','ESRI','102889',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102889_USAGE','projected_crs','ESRI','102889','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102890','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000067,'EPSG','9201','EPSG','8806','False easting',88040.97958,'EPSG','9001','EPSG','8807','False northing',126058.6753,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102890_USAGE','conversion','ESRI','102890','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102890','OSGB36_Highways_England_C15H5',NULL,'EPSG','4400','EPSG','4277','ESRI','102890',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102890_USAGE','projected_crs','ESRI','102890','ESRI','145','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','146','UK - Highways England - C16','UK - Highways England - C16',53.935,55.8321,-2.7026,-1.4571,0); INSERT INTO "conversion" VALUES('ESRI','102891','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000012,'EPSG','9201','EPSG','8806','False easting',54022.17583,'EPSG','9001','EPSG','8807','False northing',126051.7436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102891_USAGE','conversion','ESRI','102891','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102891','OSGB36_Highways_England_C16H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102891',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102891_USAGE','projected_crs','ESRI','102891','ESRI','146','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102892','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000037,'EPSG','9201','EPSG','8806','False easting',54023.52644,'EPSG','9001','EPSG','8807','False northing',126054.895,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102892_USAGE','conversion','ESRI','102892','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102892','OSGB36_Highways_England_C16H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102892',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102892_USAGE','projected_crs','ESRI','102892','ESRI','146','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102893','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000062,'EPSG','9201','EPSG','8806','False easting',54024.87711,'EPSG','9001','EPSG','8807','False northing',126058.0466,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102893_USAGE','conversion','ESRI','102893','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102893','OSGB36_Highways_England_C16H3',NULL,'EPSG','4400','EPSG','4277','ESRI','102893',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102893_USAGE','projected_crs','ESRI','102893','ESRI','146','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102894','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000087,'EPSG','9201','EPSG','8806','False easting',54026.22785,'EPSG','9001','EPSG','8807','False northing',126061.1983,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102894_USAGE','conversion','ESRI','102894','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102894','OSGB36_Highways_England_C16H4',NULL,'EPSG','4400','EPSG','4277','ESRI','102894',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102894_USAGE','projected_crs','ESRI','102894','ESRI','146','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','147','UK - Highways England - C17','UK - Highways England - C17',53.9324,55.5176,-1.4821,-0.923,0); INSERT INTO "conversion" VALUES('ESRI','102895','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999981,'EPSG','9201','EPSG','8806','False easting',-24009.11135,'EPSG','9001','EPSG','8807','False northing',126047.8346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102895_USAGE','conversion','ESRI','102895','ESRI','147','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102895','OSGB36_Highways_England_C17H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102895',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102895_USAGE','projected_crs','ESRI','102895','ESRI','147','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102896','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000006,'EPSG','9201','EPSG','8806','False easting',-24009.7116,'EPSG','9001','EPSG','8807','False northing',126050.9859,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102896_USAGE','conversion','ESRI','102896','ESRI','147','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102896','OSGB36_Highways_England_C17H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102896',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102896_USAGE','projected_crs','ESRI','102896','ESRI','147','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','148','UK - Highways England - C18','UK - Highways England - C18',53.9276,54.3908,-0.9642,-0.4907,0); INSERT INTO "conversion" VALUES('ESRI','102897','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999928,'EPSG','9201','EPSG','8806','False easting',-58018.94296,'EPSG','9001','EPSG','8807','False northing',126041.1519,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102897_USAGE','conversion','ESRI','102897','ESRI','148','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102897','OSGB36_Highways_England_C18H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102897',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102897_USAGE','projected_crs','ESRI','102897','ESRI','148','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102898','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999953,'EPSG','9201','EPSG','8806','False easting',-58020.39349,'EPSG','9001','EPSG','8807','False northing',126044.3031,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102898_USAGE','conversion','ESRI','102898','ESRI','148','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102898','OSGB36_Highways_England_C18H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102898',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102898_USAGE','projected_crs','ESRI','102898','ESRI','148','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','149','UK - Highways England - C19','UK - Highways England - C19',53.9241,54.3859,-0.5074,-0.229,0); INSERT INTO "conversion" VALUES('ESRI','102899','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999874,'EPSG','9201','EPSG','8806','False easting',-88023.98625,'EPSG','9001','EPSG','8807','False northing',126034.3439,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102899_USAGE','conversion','ESRI','102899','ESRI','149','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102899','OSGB36_Highways_England_C19H1',NULL,'EPSG','4400','EPSG','4277','ESRI','102899',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102899_USAGE','projected_crs','ESRI','102899','ESRI','149','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102900','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999899,'EPSG','9201','EPSG','8806','False easting',-88026.18693,'EPSG','9001','EPSG','8807','False northing',126037.4949,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102900_USAGE','conversion','ESRI','102900','ESRI','149','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102900','OSGB36_Highways_England_C19H2',NULL,'EPSG','4400','EPSG','4277','ESRI','102900',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102900_USAGE','projected_crs','ESRI','102900','ESRI','149','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102901','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00003,'EPSG','9201','EPSG','8806','False easting',3773000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102901_USAGE','conversion','ESRI','102901','EPSG','4703','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102901','NAD_1983_(2011)_ICS_Aurora_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102901',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102901_USAGE','projected_crs','ESRI','102901','EPSG','4703','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102902','NAD_1983_(2011)_ICS_Freeport_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Freeport_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",1804000.0],PARAMETER["False_Northing",755000.0],PARAMETER["Central_Meridian",-89.95],PARAMETER["Scale_Factor",1.000029],PARAMETER["Latitude_Of_Origin",42.2],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102902_USAGE','projected_crs','ESRI','102902','EPSG','4701','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102903','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.8,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',4757000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102903_USAGE','conversion','ESRI','102903','EPSG','4704','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102903','NAD_1983_(2011)_ICS_Chicago_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102903',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102903_USAGE','projected_crs','ESRI','102903','EPSG','4704','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102904','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000029,'EPSG','9201','EPSG','8806','False easting',2822000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102904_USAGE','conversion','ESRI','102904','EPSG','4702','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102904','NAD_1983_(2011)_ICS_Rockford_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102904',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102904_USAGE','projected_crs','ESRI','102904','EPSG','4702','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102905','NAD_1983_(2011)_ICS_Moline_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Moline_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",5741000.0],PARAMETER["False_Northing",755000.0],PARAMETER["Central_Meridian",-90.6],PARAMETER["Scale_Factor",1.000024],PARAMETER["Latitude_Of_Origin",41.55],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102905_USAGE','projected_crs','ESRI','102905','EPSG','4705','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102906','NAD_1983_(2011)_ICS_Ottawa_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Ottawa_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",7743000.0],PARAMETER["False_Northing",755000.0],PARAMETER["Central_Meridian",-89.05],PARAMETER["Scale_Factor",1.000023],PARAMETER["Latitude_Of_Origin",41.3],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102906_USAGE','projected_crs','ESRI','102906','EPSG','4707','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102907','NAD_1983_(2011)_ICS_Sterling_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Sterling_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",6726000.0],PARAMETER["False_Northing",755000.0],PARAMETER["Central_Meridian",-90.05],PARAMETER["Scale_Factor",1.00002],PARAMETER["Latitude_Of_Origin",41.55],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102907_USAGE','projected_crs','ESRI','102907','EPSG','4706','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102908','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.55,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000022,'EPSG','9201','EPSG','8806','False easting',8694000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102908_USAGE','conversion','ESRI','102908','EPSG','4708','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102908','NAD_1983_(2011)_ICS_Joliet_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102908',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102908_USAGE','projected_crs','ESRI','102908','EPSG','4708','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102909','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.45,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.3,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000025,'EPSG','9201','EPSG','8806','False easting',2756000.0,'EPSG','9003','EPSG','8807','False northing',427000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102909_USAGE','conversion','ESRI','102909','EPSG','4712','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102909','NAD_1983_(2011)_ICS_Eureka_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102909',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102909_USAGE','projected_crs','ESRI','102909','EPSG','4712','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102910','NAD_1983_(2011)_ICS_Pontiac_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Pontiac_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",4757000.0],PARAMETER["False_Northing",1739000.0],PARAMETER["Central_Meridian",-88.55],PARAMETER["Scale_Factor",1.000025],PARAMETER["Latitude_Of_Origin",40.9],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102910_USAGE','projected_crs','ESRI','102910','EPSG','4714','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102911','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.2,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.85,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',9678000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102911_USAGE','conversion','ESRI','102911','EPSG','4709','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102911','NAD_1983_(2011)_ICS_Monmouth_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102911',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102911_USAGE','projected_crs','ESRI','102911','EPSG','4709','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102912','NAD_1983_(2011)_ICS_Watseka_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Watseka_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",5741000.0],PARAMETER["False_Northing",1739000.0],PARAMETER["Central_Meridian",-87.95],PARAMETER["Scale_Factor",1.000024],PARAMETER["Latitude_Of_Origin",40.75],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102912_USAGE','projected_crs','ESRI','102912','EPSG','4715','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102913','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.4,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.65,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',1378000.0,'EPSG','9003','EPSG','8807','False northing',622000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102913_USAGE','conversion','ESRI','102913','EPSG','4711','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102913','NAD_1983_(2011)_ICS_Peoria_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102913',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102913_USAGE','projected_crs','ESRI','102913','EPSG','4711','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102914','NAD_1983_(2011)_ICS_Bloomington_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Bloomington_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",3773000.0],PARAMETER["False_Northing",1739000.0],PARAMETER["Central_Meridian",-88.85],PARAMETER["Scale_Factor",1.000031],PARAMETER["Latitude_Of_Origin",40.5],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102914_USAGE','projected_crs','ESRI','102914','EPSG','4713','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102915','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.25,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.1,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',230000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102915_USAGE','conversion','ESRI','102915','EPSG','4710','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102915','NAD_1983_(2011)_ICS_Galesburg_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102915',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102915_USAGE','projected_crs','ESRI','102915','EPSG','4710','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102916','NAD_1983_(2011)_ICS_Champaign_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Champaign_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",328000.0],PARAMETER["False_Northing",2822000.0],PARAMETER["Central_Meridian",-88.0],PARAMETER["Scale_Factor",1.000026],PARAMETER["Latitude_Of_Origin",40.15],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102916_USAGE','projected_crs','ESRI','102916','EPSG','4720','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102917','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.3,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.8,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',9678000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102917_USAGE','conversion','ESRI','102917','EPSG','4719','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102917','NAD_1983_(2011)_ICS_Decatur_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102917',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102917_USAGE','projected_crs','ESRI','102917','EPSG','4719','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102918','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',6726000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102918_USAGE','conversion','ESRI','102918','EPSG','4716','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102918','NAD_1983_(2011)_ICS_Quincy_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102918',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102918_USAGE','projected_crs','ESRI','102918','EPSG','4716','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102919','NAD_1983_(2011)_ICS_Lincoln_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Lincoln_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",8760000.0],PARAMETER["False_Northing",1739000.0],PARAMETER["Central_Meridian",-89.8],PARAMETER["Scale_Factor",1.000018],PARAMETER["Latitude_Of_Origin",40.15],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102919_USAGE','projected_crs','ESRI','102919','EPSG','4718','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102920','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.8,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.6,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000024,'EPSG','9201','EPSG','8806','False easting',7710000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102920_USAGE','conversion','ESRI','102920','EPSG','4717','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102920','NAD_1983_(2011)_ICS_Macomb_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102920',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102920_USAGE','projected_crs','ESRI','102920','EPSG','4717','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102921','NAD_1983_(2011)_ICS_Springfield_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Springfield_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",2329000.0],PARAMETER["False_Northing",2887000.0],PARAMETER["Central_Meridian",-89.65],PARAMETER["Scale_Factor",1.000022],PARAMETER["Latitude_Of_Origin",39.75],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102921_USAGE','projected_crs','ESRI','102921','EPSG','4722','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102922','NAD_1983_(2011)_ICS_Jacksonville_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Jacksonville_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",1247000.0],PARAMETER["False_Northing",2822000.0],PARAMETER["Central_Meridian",-90.6],PARAMETER["Scale_Factor",1.000023],PARAMETER["Latitude_Of_Origin",39.65],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102922_USAGE','projected_crs','ESRI','102922','EPSG','4721','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102923','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',33.15,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.4,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000023,'EPSG','9201','EPSG','8806','False easting',6726000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102923_USAGE','conversion','ESRI','102923','EPSG','4726','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102923','NAD_1983_(2011)_ICS_Taylorville_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102923',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102923_USAGE','projected_crs','ESRI','102923','EPSG','4726','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102924','NAD_1983_(2011)_ICS_Charleston_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Charleston_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",3773000.0],PARAMETER["False_Northing",2756000.0],PARAMETER["Central_Meridian",-88.0],PARAMETER["Scale_Factor",1.000024],PARAMETER["Latitude_Of_Origin",39.65],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102924_USAGE','projected_crs','ESRI','102924','EPSG','4723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102925','NAD_1983_(2011)_ICS_Carlinville_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Carlinville_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",5741000.0],PARAMETER["False_Northing",2756000.0],PARAMETER["Central_Meridian",-90.15],PARAMETER["Scale_Factor",1.00002],PARAMETER["Latitude_Of_Origin",39.3],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102925_USAGE','projected_crs','ESRI','102925','EPSG','4725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102926','NAD_1983_(2011)_ICS_Robinson_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Robinson_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",8694000.0],PARAMETER["False_Northing",2756000.0],PARAMETER["Central_Meridian",-88.0],PARAMETER["Scale_Factor",1.000017],PARAMETER["Latitude_Of_Origin",39.1],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102926_USAGE','projected_crs','ESRI','102926','EPSG','4728','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102927','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.85,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000019,'EPSG','9201','EPSG','8806','False easting',4757000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102927_USAGE','conversion','ESRI','102927','EPSG','4724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102927','NAD_1983_(2011)_ICS_Jerseyville_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102927',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102927_USAGE','projected_crs','ESRI','102927','EPSG','4724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102928','NAD_1983_(2011)_ICS_Effingham_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Effingham_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",7710000.0],PARAMETER["False_Northing",2756000.0],PARAMETER["Central_Meridian",-89.0],PARAMETER["Scale_Factor",1.000019],PARAMETER["Latitude_Of_Origin",38.95],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102928_USAGE','projected_crs','ESRI','102928','EPSG','4727','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102929','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',32.35,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000016,'EPSG','9201','EPSG','8806','False easting',9678000.0,'EPSG','9003','EPSG','8807','False northing',492000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102929_USAGE','conversion','ESRI','102929','EPSG','4729','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102929','NAD_1983_(2011)_ICS_Belleville_(US_Feet)',NULL,'EPSG','4497','EPSG','6318','ESRI','102929',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102929_USAGE','projected_crs','ESRI','102929','EPSG','4729','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102930','NAD_1983_(2011)_ICS_Olney_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Olney_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",1247000.0],PARAMETER["False_Northing",3773000.0],PARAMETER["Central_Meridian",-88.15],PARAMETER["Scale_Factor",1.000013],PARAMETER["Latitude_Of_Origin",38.55],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102930_USAGE','projected_crs','ESRI','102930','EPSG','4731','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102931','NAD_1983_(2011)_ICS_Mount_Vernon_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Mount_Vernon_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",328000.0],PARAMETER["False_Northing",3773000.0],PARAMETER["Central_Meridian",-89.15],PARAMETER["Scale_Factor",1.000015],PARAMETER["Latitude_Of_Origin",38.45],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102931_USAGE','projected_crs','ESRI','102931','EPSG','4730','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102932','NAD_1983_(2011)_ICS_Carbondale_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Carbondale_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",2395000.0],PARAMETER["False_Northing",3773000.0],PARAMETER["Central_Meridian",-88.95],PARAMETER["Scale_Factor",1.000012],PARAMETER["Latitude_Of_Origin",37.9],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102932_USAGE','projected_crs','ESRI','102932','EPSG','4732','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102933','NAD_1983_(2011)_ICS_Metropolis_(US_Feet)',NULL,NULL,NULL,'EPSG','6318',NULL,NULL,'PROJCS["NAD_1983_(2011)_ICS_Metropolis_(US_Feet)",GEOGCS["GCS_NAD_1983_2011",DATUM["D_NAD_1983_2011",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_1SP"],PARAMETER["False_Easting",3642000.0],PARAMETER["False_Northing",3839000.0],PARAMETER["Central_Meridian",-88.9],PARAMETER["Scale_Factor",1.00001],PARAMETER["Latitude_Of_Origin",37.2],UNIT["Foot_US",0.3048006096012192]]',1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102933_USAGE','projected_crs','ESRI','102933','EPSG','4733','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','150','Bangladesh - Dinajpur','Bangladesh - Dinajpur',25.2166,26.6334,88.0833,89.3,0); INSERT INTO "coordinate_system" VALUES('ESRI','Chain','Cartesian',2); INSERT INTO "axis" VALUES('ESRI','3','Easting','E','east','ESRI','Chain',1,'EPSG','9097'); INSERT INTO "axis" VALUES('ESRI','4','Northing','N','north','ESRI','Chain',2,'EPSG','9097'); INSERT INTO "conversion" VALUES('ESRI','102934','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',25.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',88.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102934_USAGE','conversion','ESRI','102934','ESRI','150','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102934','Cassini_Bangladesh_Zone_01_Dinajpur',NULL,'ESRI','Chain','EPSG','4042','ESRI','102934',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102934_USAGE','projected_crs','ESRI','102934','ESRI','150','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','151','Bangladesh - Rangpur','Bangladesh - Rangpur',25.0333,26.45,88.9,89.8834,0); INSERT INTO "conversion" VALUES('ESRI','102935','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',25.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',89.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102935_USAGE','conversion','ESRI','102935','ESRI','151','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102935','Cassini_Bangladesh_Zone_02_Rangpur',NULL,'ESRI','Chain','EPSG','4042','ESRI','102935',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102935_USAGE','projected_crs','ESRI','102935','ESRI','151','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','152','Bangladesh - Rajshahi','Bangladesh - Rajshahi',24.1,25.2,88.0,89.3334,0); INSERT INTO "conversion" VALUES('ESRI','102936','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',24.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',88.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102936_USAGE','conversion','ESRI','102936','ESRI','152','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102936','Cassini_Bangladesh_Zone_03_Rajshahi',NULL,'ESRI','Chain','EPSG','4042','ESRI','102936',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102936_USAGE','projected_crs','ESRI','102936','ESRI','152','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','153','Bangladesh - Bogura','Bangladesh - Bogura',24.5333,25.2667,88.9166,89.75,0); INSERT INTO "conversion" VALUES('ESRI','102937','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',24.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',89.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102937_USAGE','conversion','ESRI','102937','ESRI','153','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102937','Cassini_Bangladesh_Zone_04_Bogura',NULL,'ESRI','Chain','EPSG','4042','ESRI','102937',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102937_USAGE','projected_crs','ESRI','102937','ESRI','153','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','154','Bangladesh - Pabna','Bangladesh - Pabna',23.8,24.7667,88.9833,89.8167,0); INSERT INTO "projected_crs" VALUES('ESRI','102938','Cassini_Bangladesh_Zone_05_Pabna',NULL,'ESRI','Chain','EPSG','4042','ESRI','102937',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102938_USAGE','projected_crs','ESRI','102938','ESRI','154','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','155','Bangladesh - Mymensingh','Bangladesh - Mymensingh',23.95,24.4334,89.6333,91.25,0); INSERT INTO "conversion" VALUES('ESRI','102939','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',24.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102939_USAGE','conversion','ESRI','102939','ESRI','155','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102939','Cassini_Bangladesh_Zone_06_Mymensingh',NULL,'ESRI','Chain','EPSG','4042','ESRI','102939',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102939_USAGE','projected_crs','ESRI','102939','ESRI','155','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','156','Bangladesh - Dhaka','Bangladesh - Dhaka',23.3666,24.3334,89.6833,90.9834,0); INSERT INTO "projected_crs" VALUES('ESRI','102940','Cassini_Bangladesh_Zone_07_Dhaka',NULL,'ESRI','Chain','EPSG','4042','ESRI','102939',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102940_USAGE','projected_crs','ESRI','102940','ESRI','156','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','157','Bangladesh - Faridpur','Bangladesh - Faridpur',22.8333,23.9,89.2833,89.5834,0); INSERT INTO "conversion" VALUES('ESRI','102941','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',23.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102941_USAGE','conversion','ESRI','102941','ESRI','157','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102941','Cassini_Bangladesh_Zone_08_Faridpur',NULL,'ESRI','Chain','EPSG','4042','ESRI','102941',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102941_USAGE','projected_crs','ESRI','102941','ESRI','157','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','158','Bangladesh - Sylhet','Bangladesh - Sylhet',23.9666,25.2,90.9166,92.4834,0); INSERT INTO "conversion" VALUES('ESRI','102942','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',24.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',92.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102942_USAGE','conversion','ESRI','102942','ESRI','158','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102942','Cassini_Bangladesh_Zone_09_Sylhet',NULL,'ESRI','Chain','EPSG','4042','ESRI','102942',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102942_USAGE','projected_crs','ESRI','102942','ESRI','158','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','159','Bangladesh - Kushtia','Bangladesh - Kushtia',23.3666,24.2167,88.55,89.35,0); INSERT INTO "conversion" VALUES('ESRI','102943','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',23.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',89.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102943_USAGE','conversion','ESRI','102943','ESRI','159','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102943','Cassini_Bangladesh_Zone_10_Kushtia',NULL,'ESRI','Chain','EPSG','4042','ESRI','102943',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102943_USAGE','projected_crs','ESRI','102943','ESRI','159','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','160','Bangladesh - Joshore','Bangladesh - Joshore',22.7833,23.7667,88.6833,89.8,0); INSERT INTO "projected_crs" VALUES('ESRI','102944','Cassini_Bangladesh_Zone_11_Joshore',NULL,'ESRI','Chain','EPSG','4042','ESRI','102943',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102944_USAGE','projected_crs','ESRI','102944','ESRI','160','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','161','Bangladesh - Khulna','Bangladesh - Khulna',21.6333,23.0,88.8833,89.95,0); INSERT INTO "conversion" VALUES('ESRI','102945','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',22.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',89.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102945_USAGE','conversion','ESRI','102945','ESRI','161','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102945','Cassini_Bangladesh_Zone_12_Khulna',NULL,'ESRI','Chain','EPSG','4042','ESRI','102945',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102945_USAGE','projected_crs','ESRI','102945','ESRI','161','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','162','Bangladesh - Barishal','Bangladesh - Barishal',21.7833,23.0667,89.85,91.0334,0); INSERT INTO "conversion" VALUES('ESRI','102946','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',22.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',90.5,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102946_USAGE','conversion','ESRI','102946','ESRI','162','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102946','Cassini_Bangladesh_Zone_13_Barishal',NULL,'ESRI','Chain','EPSG','4042','ESRI','102946',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102946_USAGE','projected_crs','ESRI','102946','ESRI','162','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','163','Bangladesh - Cumilla','Bangladesh - Cumilla',22.9666,24.2667,90.5166,91.3667,0); INSERT INTO "conversion" VALUES('ESRI','102947','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',23.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',91.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102947_USAGE','conversion','ESRI','102947','ESRI','163','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102947','Cassini_Bangladesh_Zone_14_Cumilla',NULL,'ESRI','Chain','EPSG','4042','ESRI','102947',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102947_USAGE','projected_crs','ESRI','102947','ESRI','163','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','164','Bangladesh - Noakhali','Bangladesh - Noakhali',22.0166,23.2834,90.65,91.5667,0); INSERT INTO "projected_crs" VALUES('ESRI','102948','Cassini_Bangladesh_Zone_15_Noakhali',NULL,'ESRI','Chain','EPSG','4042','ESRI','102947',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102948_USAGE','projected_crs','ESRI','102948','ESRI','164','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','165','Bangladesh - Chottogram','Bangladesh - Chottogram',20.5833,22.9834,91.3,92.3667,0); INSERT INTO "conversion" VALUES('ESRI','102949','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',92.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102949_USAGE','conversion','ESRI','102949','ESRI','165','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102949','Cassini_Bangladesh_Zone_16_Chottogram',NULL,'ESRI','Chain','EPSG','4042','ESRI','102949',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102949_USAGE','projected_crs','ESRI','102949','ESRI','165','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','166','Bangladesh - CHT','Bangladesh - CHT',21.1833,23.7334,91.7,92.6667,0); INSERT INTO "conversion" VALUES('ESRI','102950','unnamed',NULL,'EPSG','9806','Cassini-Soldner','EPSG','8801','Latitude of natural origin',22.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',92.25,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9097','EPSG','8807','False northing',0.0,'EPSG','9097',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102950_USAGE','conversion','ESRI','102950','ESRI','166','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102950','Cassini_Bangladesh_Zone_17_CHT',NULL,'ESRI','Chain','EPSG','4042','ESRI','102950',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102950_USAGE','projected_crs','ESRI','102950','ESRI','166','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102951','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',26.0,'EPSG','9102','EPSG','8822','Longitude of false origin',90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',23.15,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',28.8,'EPSG','9102','EPSG','8826','Easting at false origin',2743183.6991,'EPSG','9001','EPSG','8827','Northing at false origin',914395.233,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102951_USAGE','conversion','ESRI','102951','EPSG','1041','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102951','LCC_Bangladesh',NULL,'EPSG','4400','EPSG','4326','ESRI','102951',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102951_USAGE','projected_crs','ESRI','102951','EPSG','1041','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102952','LCC_Gulshan',NULL,'EPSG','4400','EPSG','4682','ESRI','102951',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102952_USAGE','projected_crs','ESRI','102952','EPSG','1041','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102953','UTM_Bangladesh_(BTM)',NULL,'EPSG','4400','EPSG','4682','EPSG','9677',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102953_USAGE','projected_crs','ESRI','102953','EPSG','1041','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102954','BUTM2010',NULL,'EPSG','4400','EPSG','4326','EPSG','16490',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102954_USAGE','projected_crs','ESRI','102954','EPSG','1041','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102955','UTM_Gulshan',NULL,'EPSG','4400','EPSG','4682','EPSG','16490',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102955_USAGE','projected_crs','ESRI','102955','EPSG','1041','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','167','Republic of Palau - Babeldaob','Republic of Palau - Babeldaob',6.87,7.7,134.1,134.65,0); INSERT INTO "projected_crs" VALUES('ESRI','102956','NAD_1983_(MA11)_UTM_Zone_53N',NULL,'EPSG','4400','EPSG','6325','EPSG','16053',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102956_USAGE','projected_crs','ESRI','102956','ESRI','167','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','168','Federated States of Micronesia - UTM 56N','Federated States of Micronesia - UTM 56N',6.9,7.8,151.3,152.15,0); INSERT INTO "projected_crs" VALUES('ESRI','102957','NAD_1983_(PA11)_UTM_Zone_56N',NULL,'EPSG','4400','EPSG','6322','EPSG','16056',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102957_USAGE','projected_crs','ESRI','102957','ESRI','168','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','169','Federated States of Micronesia - UTM 57N and east','Federated States of Micronesia - UTM 57N and east',5.25,7.02,157.92,163.07,0); INSERT INTO "projected_crs" VALUES('ESRI','102958','NAD_1983_(PA11)_UTM_Zone_57N',NULL,'EPSG','4400','EPSG','6322','EPSG','16057',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102958_USAGE','projected_crs','ESRI','102958','ESRI','169','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','170','Republic of Marshall Islands - UTM 58N','Republic of Marshall Islands - UTM 58N',8.0,11.64,162.0,168.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102959','NAD_1983_(PA11)_UTM_Zone_58N',NULL,'EPSG','4400','EPSG','6322','EPSG','16058',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102959_USAGE','projected_crs','ESRI','102959','ESRI','170','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','171','Republic of Marshall Islands - UTM 59N','Republic of Marshall Islands - UTM 59N',5.8,10.0,168.0,173.0,0); INSERT INTO "projected_crs" VALUES('ESRI','102960','NAD_1983_(PA11)_UTM_Zone_59N',NULL,'EPSG','4400','EPSG','6322','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102960_USAGE','projected_crs','ESRI','102960','ESRI','171','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','172','Australia - Lord Howe Island - 158~E to 160~E (ISG 57/2)','Australia - Lord Howe Island - 158~E to 160~E (ISG 57/2)',-47.2,-28.15,158.0,160.0,0); INSERT INTO "conversion" VALUES('ESRI','102961','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99994,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_102961_USAGE','conversion','ESRI','102961','ESRI','172','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102961','AGD_1966_ISG_57_2',NULL,'EPSG','4400','EPSG','4202','ESRI','102961',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102961_USAGE','projected_crs','ESRI','102961','ESRI','172','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102962','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',0.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',-4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102962_USAGE','conversion','ESRI','102962','EPSG','1375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102962','NAD_1983_2011_California_Teale_Albers',NULL,'EPSG','4400','EPSG','6318','ESRI','102962',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102962_USAGE','projected_crs','ESRI','102962','EPSG','1375','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102963','NAD_1983_2011_Mississippi_TM',NULL,'EPSG','4400','EPSG','6318','ESRI','102469',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102963_USAGE','projected_crs','ESRI','102963','EPSG','1393','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102965','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',23.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102965_USAGE','conversion','ESRI','102965','EPSG','1323','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102965','NAD_1983_2011_Contiguous_USA_Albers',NULL,'EPSG','4400','EPSG','6318','ESRI','102965',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102965_USAGE','projected_crs','ESRI','102965','EPSG','1323','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102966','NAD_1983_2011_Alaska_Albers',NULL,'EPSG','4400','EPSG','6318','ESRI','102006',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102966_USAGE','projected_crs','ESRI','102966','EPSG','1330','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102967','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',24.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',24.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',31.5,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102967_USAGE','conversion','ESRI','102967','EPSG','1379','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102967','NAD_1983_2011_Florida_GDL_Albers',NULL,'EPSG','4400','EPSG','6318','ESRI','102967',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102967_USAGE','projected_crs','ESRI','102967','EPSG','1379','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102968','NAD_1983_2011_Michigan_GeoRef_Meters',NULL,'EPSG','4400','EPSG','6318','ESRI','102123',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102968_USAGE','projected_crs','ESRI','102968','EPSG','1391','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102969','NAD_1983_2011_Oregon_Statewide_Lambert',NULL,'EPSG','4400','EPSG','6318','ESRI','102380',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102969_USAGE','projected_crs','ESRI','102969','EPSG','1406','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102970','NAD_1983_2011_Oregon_Statewide_Lambert_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','102381',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102970_USAGE','projected_crs','ESRI','102970','EPSG','1406','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102971','NAD_1983_2011_Texas_Centric_Mapping_System_Albers',NULL,'EPSG','4400','EPSG','6318','ESRI','102601',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102971_USAGE','projected_crs','ESRI','102971','EPSG','1412','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102972','NAD_1983_2011_Texas_Centric_Mapping_System_Lambert',NULL,'EPSG','4400','EPSG','6318','ESRI','102602',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102972_USAGE','projected_crs','ESRI','102972','EPSG','1412','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102973','NAD_1983_2011_Wisconsin_TM',NULL,'EPSG','4400','EPSG','6318','EPSG','14841',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102973_USAGE','projected_crs','ESRI','102973','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102974','NAD_1983_2011_Wisconsin_TM_US_Ft',NULL,'EPSG','4497','EPSG','6318','ESRI','102217',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102974_USAGE','projected_crs','ESRI','102974','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102975','NAD_1983_2011_StatePlane_Alabama_East_FIPS_0101',NULL,'EPSG','4400','EPSG','6318','ESRI','102229',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102975_USAGE','projected_crs','ESRI','102975','EPSG','2154','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102976','NAD_1983_2011_StatePlane_Alabama_West_FIPS_0102',NULL,'EPSG','4400','EPSG','6318','ESRI','102230',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102976_USAGE','projected_crs','ESRI','102976','EPSG','2155','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102977','unnamed',NULL,'EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',57.0,'EPSG','9102','EPSG','8812','Longitude of projection centre',-133.6666666666667,'EPSG','9102','EPSG','8813','Azimuth at projection centre',-36.86989764583333,'EPSG','9102','EPSG','8814','Angle from Rectified to Skew Grid',-36.86989764583333,'EPSG','9102','EPSG','8815','Scale factor at projection centre',0.9999,'EPSG','9201','EPSG','8806','False easting',5000000.0,'EPSG','9001','EPSG','8807','False northing',-5000000.0,'EPSG','9001',1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102977_USAGE','conversion','ESRI','102977','EPSG','2156','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102977','NAD_1983_2011_StatePlane_Alaska_1_FIPS_5001',NULL,'EPSG','4400','EPSG','6318','ESRI','102977',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102977_USAGE','projected_crs','ESRI','102977','EPSG','2156','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102978','NAD_1983_2011_StatePlane_Alaska_2_FIPS_5002',NULL,'EPSG','4400','EPSG','6318','EPSG','15032',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102978_USAGE','projected_crs','ESRI','102978','EPSG','2158','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102979','NAD_1983_2011_StatePlane_Alaska_3_FIPS_5003',NULL,'EPSG','4400','EPSG','6318','EPSG','15033',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102979_USAGE','projected_crs','ESRI','102979','EPSG','2159','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102980','NAD_1983_2011_StatePlane_Alaska_4_FIPS_5004',NULL,'EPSG','4400','EPSG','6318','EPSG','15034',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102980_USAGE','projected_crs','ESRI','102980','EPSG','2160','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102981','NAD_1983_2011_StatePlane_Alaska_5_FIPS_5005',NULL,'EPSG','4400','EPSG','6318','EPSG','15035',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102981_USAGE','projected_crs','ESRI','102981','EPSG','2161','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102982','NAD_1983_2011_StatePlane_Alaska_6_FIPS_5006',NULL,'EPSG','4400','EPSG','6318','EPSG','15036',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102982_USAGE','projected_crs','ESRI','102982','EPSG','2162','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102983','NAD_1983_2011_StatePlane_Alaska_7_FIPS_5007',NULL,'EPSG','4400','EPSG','6318','EPSG','15037',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102983_USAGE','projected_crs','ESRI','102983','EPSG','2163','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102984','NAD_1983_2011_StatePlane_Alaska_8_FIPS_5008',NULL,'EPSG','4400','EPSG','6318','EPSG','15038',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102984_USAGE','projected_crs','ESRI','102984','EPSG','2164','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102985','NAD_1983_2011_StatePlane_Alaska_9_FIPS_5009',NULL,'EPSG','4400','EPSG','6318','EPSG','15039',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102985_USAGE','projected_crs','ESRI','102985','EPSG','2165','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102986','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',51.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-176.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',51.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',53.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102986_USAGE','conversion','ESRI','102986','EPSG','2157','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102986','NAD_1983_2011_StatePlane_Alaska_10_FIPS_5010',NULL,'EPSG','4400','EPSG','6318','ESRI','102986',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102986_USAGE','projected_crs','ESRI','102986','EPSG','2157','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102987','NAD_1983_2011_StatePlane_Arizona_East_FIPS_0201',NULL,'EPSG','4400','EPSG','6318','ESRI','102248',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102987_USAGE','projected_crs','ESRI','102987','EPSG','2167','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102988','NAD_1983_2011_StatePlane_Arizona_Central_FIPS_0202',NULL,'EPSG','4400','EPSG','6318','ESRI','102249',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102988_USAGE','projected_crs','ESRI','102988','EPSG','2166','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102989','NAD_1983_2011_StatePlane_Arizona_West_FIPS_0203',NULL,'EPSG','4400','EPSG','6318','ESRI','102250',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102989_USAGE','projected_crs','ESRI','102989','EPSG','2168','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102990','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102990_USAGE','conversion','ESRI','102990','EPSG','2167','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102990','NAD_1983_2011_StatePlane_Arizona_East_FIPS_0201_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','102990',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102990_USAGE','projected_crs','ESRI','102990','EPSG','2167','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102991','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.9166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102991_USAGE','conversion','ESRI','102991','EPSG','2166','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102991','NAD_1983_2011_StatePlane_Arizona_Central_FIPS_0202_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','102991',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102991_USAGE','projected_crs','ESRI','102991','EPSG','2166','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','102992','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-113.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_102992_USAGE','conversion','ESRI','102992','EPSG','2168','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102992','NAD_1983_2011_StatePlane_Arizona_West_FIPS_0203_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','102992',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102992_USAGE','projected_crs','ESRI','102992','EPSG','2168','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102993','NAD_1983_2011_StatePlane_Arkansas_North_FIPS_0301',NULL,'EPSG','4400','EPSG','6318','ESRI','102251',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102993_USAGE','projected_crs','ESRI','102993','EPSG','2169','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102994','NAD_1983_2011_StatePlane_Arkansas_South_FIPS_0302',NULL,'EPSG','4400','EPSG','6318','ESRI','102252',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102994_USAGE','projected_crs','ESRI','102994','EPSG','2170','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102995','NAD_1983_2011_StatePlane_Arkansas_North_FIPS_0301_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102651',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102995_USAGE','projected_crs','ESRI','102995','EPSG','2169','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102996','NAD_1983_2011_StatePlane_Arkansas_South_FIPS_0302_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102652',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102996_USAGE','projected_crs','ESRI','102996','EPSG','2170','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102997','NAD_1983_2011_StatePlane_California_I_FIPS_0401',NULL,'EPSG','4400','EPSG','6318','ESRI','102241',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102997_USAGE','projected_crs','ESRI','102997','EPSG','2175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102998','NAD_1983_2011_StatePlane_California_II_FIPS_0402',NULL,'EPSG','4400','EPSG','6318','ESRI','102242',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102998_USAGE','projected_crs','ESRI','102998','EPSG','2176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','102999','NAD_1983_2011_StatePlane_California_III_FIPS_0403',NULL,'EPSG','4400','EPSG','6318','ESRI','102243',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_102999_USAGE','projected_crs','ESRI','102999','EPSG','2177','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103000','NAD_1983_2011_StatePlane_California_IV_FIPS_0404',NULL,'EPSG','4400','EPSG','6318','ESRI','102244',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103000_USAGE','projected_crs','ESRI','103000','EPSG','2178','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103001','NAD_1983_2011_StatePlane_California_V_FIPS_0405',NULL,'EPSG','4400','EPSG','6318','ESRI','102245',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103001_USAGE','projected_crs','ESRI','103001','EPSG','2182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103002','NAD_1983_2011_StatePlane_California_VI_FIPS_0406',NULL,'EPSG','4400','EPSG','6318','ESRI','102246',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103002_USAGE','projected_crs','ESRI','103002','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103003','NAD_1983_2011_StatePlane_California_I_FIPS_0401_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102641',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103003_USAGE','projected_crs','ESRI','103003','EPSG','2175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103004','NAD_1983_2011_StatePlane_California_II_FIPS_0402_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102642',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103004_USAGE','projected_crs','ESRI','103004','EPSG','2176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103005','NAD_1983_2011_StatePlane_California_III_FIPS_0403_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102643',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103005_USAGE','projected_crs','ESRI','103005','EPSG','2177','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103006','NAD_1983_2011_StatePlane_California_IV_FIPS_0404_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102644',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103006_USAGE','projected_crs','ESRI','103006','EPSG','2178','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103007','NAD_1983_2011_StatePlane_California_V_FIPS_0405_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102645',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103007_USAGE','projected_crs','ESRI','103007','EPSG','2182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103008','NAD_1983_2011_StatePlane_California_VI_FIPS_0406_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102646',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103008_USAGE','projected_crs','ESRI','103008','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103009','NAD_1983_2011_StatePlane_Colorado_North_FIPS_0501',NULL,'EPSG','4400','EPSG','6318','ESRI','102253',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103009_USAGE','projected_crs','ESRI','103009','EPSG','2184','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103010','NAD_1983_2011_StatePlane_Colorado_Central_FIPS_0502',NULL,'EPSG','4400','EPSG','6318','ESRI','102254',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103010_USAGE','projected_crs','ESRI','103010','EPSG','2183','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103011','NAD_1983_2011_StatePlane_Colorado_South_FIPS_0503',NULL,'EPSG','4400','EPSG','6318','ESRI','102255',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103011_USAGE','projected_crs','ESRI','103011','EPSG','2185','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103012','NAD_1983_2011_StatePlane_Colorado_North_FIPS_0501_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102653',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103012_USAGE','projected_crs','ESRI','103012','EPSG','2184','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103013','NAD_1983_2011_StatePlane_Colorado_Central_FIPS_0502_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102654',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103013_USAGE','projected_crs','ESRI','103013','EPSG','2183','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103014','NAD_1983_2011_StatePlane_Colorado_South_FIPS_0503_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102655',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103014_USAGE','projected_crs','ESRI','103014','EPSG','2185','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103015','NAD_1983_2011_StatePlane_Connecticut_FIPS_0600',NULL,'EPSG','4400','EPSG','6318','ESRI','102256',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103015_USAGE','projected_crs','ESRI','103015','EPSG','1377','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103016','NAD_1983_2011_StatePlane_Connecticut_FIPS_0600_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102656',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103016_USAGE','projected_crs','ESRI','103016','EPSG','1377','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103017','NAD_1983_2011_StatePlane_Delaware_FIPS_0700',NULL,'EPSG','4400','EPSG','6318','ESRI','102257',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103017_USAGE','projected_crs','ESRI','103017','EPSG','1378','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103018','NAD_1983_2011_StatePlane_Delaware_FIPS_0700_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102657',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103018_USAGE','projected_crs','ESRI','103018','EPSG','1378','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103019','NAD_1983_2011_StatePlane_Florida_East_FIPS_0901',NULL,'EPSG','4400','EPSG','6318','ESRI','102258',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103019_USAGE','projected_crs','ESRI','103019','EPSG','2186','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103020','NAD_1983_2011_StatePlane_Florida_West_FIPS_0902',NULL,'EPSG','4400','EPSG','6318','ESRI','102259',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103020_USAGE','projected_crs','ESRI','103020','EPSG','2188','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103021','NAD_1983_2011_StatePlane_Florida_North_FIPS_0903',NULL,'EPSG','4400','EPSG','6318','ESRI','102260',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103021_USAGE','projected_crs','ESRI','103021','EPSG','2187','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103022','NAD_1983_2011_StatePlane_Florida_East_FIPS_0901_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102658',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103022_USAGE','projected_crs','ESRI','103022','EPSG','2186','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103023','NAD_1983_2011_StatePlane_Florida_West_FIPS_0902_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102659',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103023_USAGE','projected_crs','ESRI','103023','EPSG','2188','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103024','NAD_1983_2011_StatePlane_Florida_North_FIPS_0903_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102660',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103024_USAGE','projected_crs','ESRI','103024','EPSG','2187','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103025','NAD_1983_2011_StatePlane_Georgia_East_FIPS_1001',NULL,'EPSG','4400','EPSG','6318','ESRI','102266',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103025_USAGE','projected_crs','ESRI','103025','EPSG','2189','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103026','NAD_1983_2011_StatePlane_Georgia_West_FIPS_1002',NULL,'EPSG','4400','EPSG','6318','ESRI','102267',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103026_USAGE','projected_crs','ESRI','103026','EPSG','2190','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103027','NAD_1983_2011_StatePlane_Georgia_East_FIPS_1001_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102666',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103027_USAGE','projected_crs','ESRI','103027','EPSG','2189','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103028','NAD_1983_2011_StatePlane_Georgia_West_FIPS_1002_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102667',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103028_USAGE','projected_crs','ESRI','103028','EPSG','2190','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103029','NAD_1983_2011_StatePlane_Idaho_East_FIPS_1101',NULL,'EPSG','4400','EPSG','6318','ESRI','102268',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103029_USAGE','projected_crs','ESRI','103029','EPSG','2192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103030','NAD_1983_2011_StatePlane_Idaho_Central_FIPS_1102',NULL,'EPSG','4400','EPSG','6318','ESRI','102269',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103030_USAGE','projected_crs','ESRI','103030','EPSG','2191','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103031','NAD_1983_2011_StatePlane_Idaho_West_FIPS_1103',NULL,'EPSG','4400','EPSG','6318','ESRI','102270',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103031_USAGE','projected_crs','ESRI','103031','EPSG','2193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103032','NAD_1983_2011_StatePlane_Idaho_East_FIPS_1101_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102668',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103032_USAGE','projected_crs','ESRI','103032','EPSG','2192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103033','NAD_1983_2011_StatePlane_Idaho_Central_FIPS_1102_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102669',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103033_USAGE','projected_crs','ESRI','103033','EPSG','2191','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103034','NAD_1983_2011_StatePlane_Idaho_West_FIPS_1103_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102670',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103034_USAGE','projected_crs','ESRI','103034','EPSG','2193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103035','NAD_1983_2011_StatePlane_Illinois_East_FIPS_1201',NULL,'EPSG','4400','EPSG','6318','ESRI','102271',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103035_USAGE','projected_crs','ESRI','103035','EPSG','2194','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103036','NAD_1983_2011_StatePlane_Illinois_West_FIPS_1202',NULL,'EPSG','4400','EPSG','6318','ESRI','102272',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103036_USAGE','projected_crs','ESRI','103036','EPSG','2195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103037','NAD_1983_2011_StatePlane_Illinois_East_FIPS_1201_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102671',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103037_USAGE','projected_crs','ESRI','103037','EPSG','2194','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103038','NAD_1983_2011_StatePlane_Illinois_West_FIPS_1202_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102672',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103038_USAGE','projected_crs','ESRI','103038','EPSG','2195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103039','NAD_1983_2011_StatePlane_Indiana_East_FIPS_1301',NULL,'EPSG','4400','EPSG','6318','ESRI','102273',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103039_USAGE','projected_crs','ESRI','103039','EPSG','2196','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103040','NAD_1983_2011_StatePlane_Indiana_West_FIPS_1302',NULL,'EPSG','4400','EPSG','6318','ESRI','102274',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103040_USAGE','projected_crs','ESRI','103040','EPSG','2197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103041','NAD_1983_2011_StatePlane_Indiana_East_FIPS_1301_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102673',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103041_USAGE','projected_crs','ESRI','103041','EPSG','2196','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103042','NAD_1983_2011_StatePlane_Indiana_West_FIPS_1302_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102674',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103042_USAGE','projected_crs','ESRI','103042','EPSG','2197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103043','NAD_1983_2011_StatePlane_Iowa_North_FIPS_1401',NULL,'EPSG','4400','EPSG','6318','ESRI','102275',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103043_USAGE','projected_crs','ESRI','103043','EPSG','2198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103044','NAD_1983_2011_StatePlane_Iowa_South_FIPS_1402',NULL,'EPSG','4400','EPSG','6318','ESRI','102276',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103044_USAGE','projected_crs','ESRI','103044','EPSG','2199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103045','NAD_1983_2011_StatePlane_Iowa_North_FIPS_1401_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102675',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103045_USAGE','projected_crs','ESRI','103045','EPSG','2198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103046','NAD_1983_2011_StatePlane_Iowa_South_FIPS_1402_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102676',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103046_USAGE','projected_crs','ESRI','103046','EPSG','2199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103047','NAD_1983_2011_StatePlane_Kansas_North_FIPS_1501',NULL,'EPSG','4400','EPSG','6318','ESRI','102277',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103047_USAGE','projected_crs','ESRI','103047','EPSG','2200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103048','NAD_1983_2011_StatePlane_Kansas_South_FIPS_1502',NULL,'EPSG','4400','EPSG','6318','ESRI','102278',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103048_USAGE','projected_crs','ESRI','103048','EPSG','2201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103049','NAD_1983_2011_StatePlane_Kansas_North_FIPS_1501_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102677',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103049_USAGE','projected_crs','ESRI','103049','EPSG','2200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103050','NAD_1983_2011_StatePlane_Kansas_South_FIPS_1502_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102678',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103050_USAGE','projected_crs','ESRI','103050','EPSG','2201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103051','NAD_1983_2011_StatePlane_Kentucky_North_FIPS_1601',NULL,'EPSG','4400','EPSG','6318','ESRI','102279',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103051_USAGE','projected_crs','ESRI','103051','EPSG','2202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103052','NAD_1983_2011_StatePlane_Kentucky_North_FIPS_1601_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102679',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103052_USAGE','projected_crs','ESRI','103052','EPSG','2202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103053','NAD_1983_2011_StatePlane_Kentucky_FIPS_1600',NULL,'EPSG','4400','EPSG','6318','ESRI','65163',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103053_USAGE','projected_crs','ESRI','103053','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103054','NAD_1983_2011_StatePlane_Kentucky_FIPS_1600_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102763',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103054_USAGE','projected_crs','ESRI','103054','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103055','NAD_1983_2011_StatePlane_Kentucky_South_FIPS_1602',NULL,'EPSG','4400','EPSG','6318','ESRI','102280',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103055_USAGE','projected_crs','ESRI','103055','EPSG','2203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103056','NAD_1983_2011_StatePlane_Kentucky_South_FIPS_1602_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102680',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103056_USAGE','projected_crs','ESRI','103056','EPSG','2203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103057','NAD_1983_2011_StatePlane_Louisiana_North_FIPS_1701',NULL,'EPSG','4400','EPSG','6318','ESRI','102281',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103057_USAGE','projected_crs','ESRI','103057','EPSG','2204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103058','NAD_1983_2011_StatePlane_Louisiana_South_FIPS_1702',NULL,'EPSG','4400','EPSG','6318','ESRI','102282',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103058_USAGE','projected_crs','ESRI','103058','EPSG','2529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103059','NAD_1983_2011_StatePlane_Louisiana_North_FIPS_1701_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102681',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103059_USAGE','projected_crs','ESRI','103059','EPSG','2204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103060','NAD_1983_2011_StatePlane_Louisiana_South_FIPS_1702_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102682',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103060_USAGE','projected_crs','ESRI','103060','EPSG','2529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103061','NAD_1983_2011_StatePlane_Maine_East_FIPS_1801',NULL,'EPSG','4400','EPSG','6318','ESRI','102283',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103061_USAGE','projected_crs','ESRI','103061','EPSG','2206','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103062','NAD_1983_2011_StatePlane_Maine_West_FIPS_1802',NULL,'EPSG','4400','EPSG','6318','ESRI','102284',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103062_USAGE','projected_crs','ESRI','103062','EPSG','2207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103063','NAD_1983_2011_StatePlane_Maine_East_FIPS_1801_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102683',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103063_USAGE','projected_crs','ESRI','103063','EPSG','2206','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103064','NAD_1983_2011_StatePlane_Maine_West_FIPS_1802_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102684',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103064_USAGE','projected_crs','ESRI','103064','EPSG','2207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103065','NAD_1983_2011_Maine_2000_East_Zone',NULL,'EPSG','4400','EPSG','6318','ESRI','102208',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103065_USAGE','projected_crs','ESRI','103065','EPSG','2960','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103066','NAD_1983_2011_Maine_2000_Central_Zone',NULL,'EPSG','4400','EPSG','6318','ESRI','102209',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103066_USAGE','projected_crs','ESRI','103066','EPSG','2959','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103067','NAD_1983_2011_Maine_2000_West_Zone',NULL,'EPSG','4400','EPSG','6318','ESRI','102210',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103067_USAGE','projected_crs','ESRI','103067','EPSG','2958','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103068','NAD_1983_2011_StatePlane_Maryland_FIPS_1900',NULL,'EPSG','4400','EPSG','6318','ESRI','102285',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103068_USAGE','projected_crs','ESRI','103068','EPSG','1389','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103069','NAD_1983_2011_StatePlane_Maryland_FIPS_1900_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102685',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103069_USAGE','projected_crs','ESRI','103069','EPSG','1389','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103070','NAD_1983_2011_StatePlane_Massachusetts_Mainland_FIPS_2001',NULL,'EPSG','4400','EPSG','6318','ESRI','102286',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103070_USAGE','projected_crs','ESRI','103070','EPSG','2209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103071','NAD_1983_2011_StatePlane_Massachusetts_Island_FIPS_2002',NULL,'EPSG','4400','EPSG','6318','ESRI','102287',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103071_USAGE','projected_crs','ESRI','103071','EPSG','2208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103072','NAD_1983_2011_StatePlane_Massachusetts_Mnld_FIPS_2001_FtUS',NULL,'EPSG','4497','EPSG','6318','ESRI','102686',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103072_USAGE','projected_crs','ESRI','103072','EPSG','2209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103073','NAD_1983_2011_StatePlane_Massachusetts_Isl_FIPS_2002_FtUS',NULL,'EPSG','4497','EPSG','6318','ESRI','102687',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103073_USAGE','projected_crs','ESRI','103073','EPSG','2208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103074','NAD_1983_2011_StatePlane_Michigan_North_FIPS_2111',NULL,'EPSG','4400','EPSG','6318','ESRI','102288',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103074_USAGE','projected_crs','ESRI','103074','EPSG','1723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103075','NAD_1983_2011_StatePlane_Michigan_Central_FIPS_2112',NULL,'EPSG','4400','EPSG','6318','ESRI','102289',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103075_USAGE','projected_crs','ESRI','103075','EPSG','1724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103076','NAD_1983_2011_StatePlane_Michigan_South_FIPS_2113',NULL,'EPSG','4400','EPSG','6318','ESRI','102290',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103076_USAGE','projected_crs','ESRI','103076','EPSG','1725','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103077','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.78333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',26246719.16010498,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103077_USAGE','conversion','ESRI','103077','EPSG','1723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103077','NAD_1983_2011_StatePlane_Michigan_North_FIPS_2111_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103077',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103077_USAGE','projected_crs','ESRI','103077','EPSG','1723','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103078','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.31666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',19685039.37007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103078_USAGE','conversion','ESRI','103078','EPSG','1724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103078','NAD_1983_2011_StatePlane_Michigan_Central_FIPS_2112_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103078',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103078_USAGE','projected_crs','ESRI','103078','EPSG','1724','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103079','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.1,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',13123359.58005249,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103079_USAGE','conversion','ESRI','103079','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103079','NAD_1983_2011_StatePlane_Michigan_South_FIPS_2113_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103079',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103079_USAGE','projected_crs','ESRI','103079','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103080','NAD_1983_2011_StatePlane_Minnesota_North_FIPS_2201',NULL,'EPSG','4400','EPSG','6318','ESRI','102291',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103080_USAGE','projected_crs','ESRI','103080','EPSG','2214','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103081','NAD_1983_2011_StatePlane_Minnesota_Central_FIPS_2202',NULL,'EPSG','4400','EPSG','6318','ESRI','102292',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103081_USAGE','projected_crs','ESRI','103081','EPSG','2213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103082','NAD_1983_2011_StatePlane_Minnesota_South_FIPS_2203',NULL,'EPSG','4400','EPSG','6318','ESRI','102293',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103082_USAGE','projected_crs','ESRI','103082','EPSG','2215','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103083','NAD_1983_2011_StatePlane_Minnesota_North_FIPS_2201_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102466',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103083_USAGE','projected_crs','ESRI','103083','EPSG','2214','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103084','NAD_1983_2011_StatePlane_Minnesota_Central_FIPS_2202_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102467',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103084_USAGE','projected_crs','ESRI','103084','EPSG','2213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103085','NAD_1983_2011_StatePlane_Minnesota_South_FIPS_2203_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102468',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103085_USAGE','projected_crs','ESRI','103085','EPSG','2215','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103086','NAD_1983_2011_StatePlane_Mississippi_East_FIPS_2301',NULL,'EPSG','4400','EPSG','6318','ESRI','102294',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103086_USAGE','projected_crs','ESRI','103086','EPSG','2216','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103087','NAD_1983_2011_StatePlane_Mississippi_West_FIPS_2302',NULL,'EPSG','4400','EPSG','6318','ESRI','102295',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103087_USAGE','projected_crs','ESRI','103087','EPSG','2217','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103088','NAD_1983_2011_StatePlane_Mississippi_East_FIPS_2301_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102694',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103088_USAGE','projected_crs','ESRI','103088','EPSG','2216','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103089','NAD_1983_2011_StatePlane_Mississippi_West_FIPS_2302_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102695',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103089_USAGE','projected_crs','ESRI','103089','EPSG','2217','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103090','NAD_1983_2011_StatePlane_Missouri_East_FIPS_2401',NULL,'EPSG','4400','EPSG','6318','ESRI','102296',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103090_USAGE','projected_crs','ESRI','103090','EPSG','2219','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103091','NAD_1983_2011_StatePlane_Missouri_Central_FIPS_2402',NULL,'EPSG','4400','EPSG','6318','ESRI','102297',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103091_USAGE','projected_crs','ESRI','103091','EPSG','2218','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103092','NAD_1983_2011_StatePlane_Missouri_West_FIPS_2403',NULL,'EPSG','4400','EPSG','6318','ESRI','102298',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103092_USAGE','projected_crs','ESRI','103092','EPSG','2220','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103093','NAD_1983_2011_StatePlane_Montana_FIPS_2500',NULL,'EPSG','4400','EPSG','6318','ESRI','102300',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103093_USAGE','projected_crs','ESRI','103093','EPSG','1395','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103094','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-109.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',1968503.937007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103094_USAGE','conversion','ESRI','103094','EPSG','1395','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103094','NAD_1983_2011_StatePlane_Montana_FIPS_2500_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103094',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103094_USAGE','projected_crs','ESRI','103094','EPSG','1395','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103095','NAD_1983_2011_StatePlane_Nebraska_FIPS_2600',NULL,'EPSG','4400','EPSG','6318','ESRI','102304',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103095_USAGE','projected_crs','ESRI','103095','EPSG','1396','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103096','NAD_1983_2011_StatePlane_Nebraska_FIPS_2600_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102704',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103096_USAGE','projected_crs','ESRI','103096','EPSG','1396','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103097','NAD_1983_2011_StatePlane_Nevada_East_FIPS_2701',NULL,'EPSG','4400','EPSG','6318','ESRI','102307',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103097_USAGE','projected_crs','ESRI','103097','EPSG','2224','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103098','NAD_1983_2011_StatePlane_Nevada_Central_FIPS_2702',NULL,'EPSG','4400','EPSG','6318','ESRI','102308',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103098_USAGE','projected_crs','ESRI','103098','EPSG','2223','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103099','NAD_1983_2011_StatePlane_Nevada_West_FIPS_2703',NULL,'EPSG','4400','EPSG','6318','ESRI','102309',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103099_USAGE','projected_crs','ESRI','103099','EPSG','2225','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103100','NAD_1983_2011_StatePlane_Nevada_East_FIPS_2701_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102707',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103100_USAGE','projected_crs','ESRI','103100','EPSG','2224','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103101','NAD_1983_2011_StatePlane_Nevada_Central_FIPS_2702_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102708',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103101_USAGE','projected_crs','ESRI','103101','EPSG','2223','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103102','NAD_1983_2011_StatePlane_Nevada_West_FIPS_2703_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102709',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103102_USAGE','projected_crs','ESRI','103102','EPSG','2225','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103103','NAD_1983_2011_StatePlane_New_Hampshire_FIPS_2800',NULL,'EPSG','4400','EPSG','6318','ESRI','102310',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103103_USAGE','projected_crs','ESRI','103103','EPSG','1398','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103104','NAD_1983_2011_StatePlane_New_Hampshire_FIPS_2800_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102710',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103104_USAGE','projected_crs','ESRI','103104','EPSG','1398','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103105','NAD_1983_2011_StatePlane_New_Jersey_FIPS_2900',NULL,'EPSG','4400','EPSG','6318','ESRI','102311',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103105_USAGE','projected_crs','ESRI','103105','EPSG','1399','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103106','NAD_1983_2011_StatePlane_New_Jersey_FIPS_2900_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102711',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103106_USAGE','projected_crs','ESRI','103106','EPSG','1399','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103107','NAD_1983_2011_StatePlane_New_Mexico_East_FIPS_3001',NULL,'EPSG','4400','EPSG','6318','ESRI','102312',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103107_USAGE','projected_crs','ESRI','103107','EPSG','2228','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103108','NAD_1983_2011_StatePlane_New_Mexico_Central_FIPS_3002',NULL,'EPSG','4400','EPSG','6318','ESRI','102313',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103108_USAGE','projected_crs','ESRI','103108','EPSG','2231','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103109','NAD_1983_2011_StatePlane_New_Mexico_West_FIPS_3003',NULL,'EPSG','4400','EPSG','6318','ESRI','102314',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103109_USAGE','projected_crs','ESRI','103109','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103110','NAD_1983_2011_StatePlane_New_Mexico_East_FIPS_3001_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102712',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103110_USAGE','projected_crs','ESRI','103110','EPSG','2228','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103111','NAD_1983_2011_StatePlane_New_Mexico_Central_FIPS_3002_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102713',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103111_USAGE','projected_crs','ESRI','103111','EPSG','2231','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103112','NAD_1983_2011_StatePlane_New_Mexico_West_FIPS_3003_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102714',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103112_USAGE','projected_crs','ESRI','103112','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103113','NAD_1983_2011_StatePlane_New_York_East_FIPS_3101',NULL,'EPSG','4400','EPSG','6318','ESRI','102311',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103113_USAGE','projected_crs','ESRI','103113','EPSG','2234','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103114','NAD_1983_2011_StatePlane_New_York_Central_FIPS_3102',NULL,'EPSG','4400','EPSG','6318','ESRI','102316',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103114_USAGE','projected_crs','ESRI','103114','EPSG','2233','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103115','NAD_1983_2011_StatePlane_New_York_West_FIPS_3103',NULL,'EPSG','4400','EPSG','6318','ESRI','102317',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103115_USAGE','projected_crs','ESRI','103115','EPSG','2236','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103116','NAD_1983_2011_StatePlane_New_York_Long_Island_FIPS_3104',NULL,'EPSG','4400','EPSG','6318','ESRI','102318',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103116_USAGE','projected_crs','ESRI','103116','EPSG','2235','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103117','NAD_1983_2011_StatePlane_New_York_East_FIPS_3101_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102711',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103117_USAGE','projected_crs','ESRI','103117','EPSG','2234','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103118','NAD_1983_2011_StatePlane_New_York_Central_FIPS_3102_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102716',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103118_USAGE','projected_crs','ESRI','103118','EPSG','2233','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103119','NAD_1983_2011_StatePlane_New_York_West_FIPS_3103_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102717',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103119_USAGE','projected_crs','ESRI','103119','EPSG','2236','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103120','NAD_1983_2011_StatePlane_New_York_Long_Isl_FIPS_3104_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102718',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103120_USAGE','projected_crs','ESRI','103120','EPSG','2235','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103121','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',609601.2192024384,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103121_USAGE','conversion','ESRI','103121','EPSG','1402','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103121','NAD_1983_2011_StatePlane_North_Carolina_FIPS_3200',NULL,'EPSG','4400','EPSG','6318','ESRI','103121',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103121_USAGE','projected_crs','ESRI','103121','EPSG','1402','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103122','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103122_USAGE','conversion','ESRI','103122','EPSG','1402','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103122','NAD_1983_2011_StatePlane_North_Carolina_FIPS_3200_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','103122',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103122_USAGE','projected_crs','ESRI','103122','EPSG','1402','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103123','NAD_1983_2011_StatePlane_North_Dakota_North_FIPS_3301',NULL,'EPSG','4400','EPSG','6318','ESRI','102320',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103123_USAGE','projected_crs','ESRI','103123','EPSG','2237','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103124','NAD_1983_2011_StatePlane_North_Dakota_South_FIPS_3302',NULL,'EPSG','4400','EPSG','6318','ESRI','102321',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103124_USAGE','projected_crs','ESRI','103124','EPSG','2238','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103125','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968503.937007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103125_USAGE','conversion','ESRI','103125','EPSG','2237','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103125','NAD_1983_2011_StatePlane_North_Dakota_North_FIPS_3301_FtI',NULL,'EPSG','4495','EPSG','6318','ESRI','103125',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103125_USAGE','projected_crs','ESRI','103125','EPSG','2237','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103126','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968503.937007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103126_USAGE','conversion','ESRI','103126','EPSG','2238','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103126','NAD_1983_2011_StatePlane_North_Dakota_South_FIPS_3302_FtI',NULL,'EPSG','4495','EPSG','6318','ESRI','103126',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103126_USAGE','projected_crs','ESRI','103126','EPSG','2238','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103127','NAD_1983_2011_StatePlane_Ohio_North_FIPS_3401',NULL,'EPSG','4400','EPSG','6318','ESRI','102322',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103127_USAGE','projected_crs','ESRI','103127','EPSG','2239','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103128','NAD_1983_2011_StatePlane_Ohio_South_FIPS_3402',NULL,'EPSG','4400','EPSG','6318','ESRI','102323',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103128_USAGE','projected_crs','ESRI','103128','EPSG','2240','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103129','NAD_1983_2011_StatePlane_Ohio_North_FIPS_3401_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102722',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103129_USAGE','projected_crs','ESRI','103129','EPSG','2239','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103130','NAD_1983_2011_StatePlane_Ohio_South_FIPS_3402_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102723',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103130_USAGE','projected_crs','ESRI','103130','EPSG','2240','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103131','NAD_1983_2011_StatePlane_Oklahoma_North_FIPS_3501',NULL,'EPSG','4400','EPSG','6318','ESRI','102324',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103131_USAGE','projected_crs','ESRI','103131','EPSG','2241','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103132','NAD_1983_2011_StatePlane_Oklahoma_South_FIPS_3502',NULL,'EPSG','4400','EPSG','6318','ESRI','102325',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103132_USAGE','projected_crs','ESRI','103132','EPSG','2242','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103133','NAD_1983_2011_StatePlane_Oklahoma_North_FIPS_3501_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102724',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103133_USAGE','projected_crs','ESRI','103133','EPSG','2241','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103134','NAD_1983_2011_StatePlane_Oklahoma_South_FIPS_3502_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102725',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103134_USAGE','projected_crs','ESRI','103134','EPSG','2242','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103135','NAD_1983_2011_StatePlane_Oregon_North_FIPS_3601',NULL,'EPSG','4400','EPSG','6318','ESRI','102326',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103135_USAGE','projected_crs','ESRI','103135','EPSG','2243','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103136','NAD_1983_2011_StatePlane_Oregon_South_FIPS_3602',NULL,'EPSG','4400','EPSG','6318','ESRI','102327',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103136_USAGE','projected_crs','ESRI','103136','EPSG','2244','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103137','NAD_1983_2011_StatePlane_Oregon_North_FIPS_3601_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','102378',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103137_USAGE','projected_crs','ESRI','103137','EPSG','2243','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103138','NAD_1983_2011_StatePlane_Oregon_South_FIPS_3602_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','102379',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103138_USAGE','projected_crs','ESRI','103138','EPSG','2244','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103139','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.95,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103139_USAGE','conversion','ESRI','103139','EPSG','2245','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103139','NAD_1983_2011_StatePlane_Pennsylvania_North_FIPS_3701',NULL,'EPSG','4400','EPSG','6318','ESRI','103139',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103139_USAGE','projected_crs','ESRI','103139','EPSG','2245','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103140','NAD_1983_2011_StatePlane_Pennsylvania_North_FIPS_3701_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102728',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103140_USAGE','projected_crs','ESRI','103140','EPSG','2245','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103141','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103141_USAGE','conversion','ESRI','103141','EPSG','2246','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103141','NAD_1983_2011_StatePlane_Pennsylvania_South_FIPS_3702',NULL,'EPSG','4400','EPSG','6318','ESRI','103141',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103141_USAGE','projected_crs','ESRI','103141','EPSG','2246','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103142','NAD_1983_2011_StatePlane_Pennsylvania_South_FIPS_3702_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102729',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103142_USAGE','projected_crs','ESRI','103142','EPSG','2246','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103143','NAD_1983_2011_StatePlane_Rhode_Island_FIPS_3800',NULL,'EPSG','4400','EPSG','6318','ESRI','102330',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103143_USAGE','projected_crs','ESRI','103143','EPSG','1408','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103144','NAD_1983_2011_StatePlane_Rhode_Island_FIPS_3800_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102730',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103144_USAGE','projected_crs','ESRI','103144','EPSG','1408','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103145','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',609600.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103145_USAGE','conversion','ESRI','103145','EPSG','1409','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103145','NAD_1983_2011_StatePlane_South_Carolina_FIPS_3900',NULL,'EPSG','4400','EPSG','6318','ESRI','103145',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103145_USAGE','projected_crs','ESRI','103145','EPSG','1409','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103146','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103146_USAGE','conversion','ESRI','103146','EPSG','1409','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103146','NAD_1983_2011_StatePlane_South_Carolina_FIPS_3900_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103146',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103146_USAGE','projected_crs','ESRI','103146','EPSG','1409','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103147','NAD_1983_2011_StatePlane_South_Dakota_North_FIPS_4001',NULL,'EPSG','4400','EPSG','6318','ESRI','102334',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103147_USAGE','projected_crs','ESRI','103147','EPSG','2249','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103148','NAD_1983_2011_StatePlane_South_Dakota_South_FIPS_4002',NULL,'EPSG','4400','EPSG','6318','ESRI','102335',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103148_USAGE','projected_crs','ESRI','103148','EPSG','2250','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103149','NAD_1983_2011_StatePlane_South_Dakota_North_FIPS_4001_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102734',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103149_USAGE','projected_crs','ESRI','103149','EPSG','2249','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103150','NAD_1983_2011_StatePlane_South_Dakota_South_FIPS_4002_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102735',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103150_USAGE','projected_crs','ESRI','103150','EPSG','2250','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103151','NAD_1983_2011_StatePlane_Tennessee_FIPS_4100',NULL,'EPSG','4400','EPSG','6318','ESRI','102336',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103151_USAGE','projected_crs','ESRI','103151','EPSG','1411','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103152','NAD_1983_2011_StatePlane_Tennessee_FIPS_4100_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102736',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103152_USAGE','projected_crs','ESRI','103152','EPSG','1411','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103153','NAD_1983_2011_StatePlane_Texas_North_FIPS_4201',NULL,'EPSG','4400','EPSG','6318','ESRI','102337',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103153_USAGE','projected_crs','ESRI','103153','EPSG','2253','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103154','NAD_1983_2011_StatePlane_Texas_North_Central_FIPS_4202',NULL,'EPSG','4400','EPSG','6318','ESRI','102338',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103154_USAGE','projected_crs','ESRI','103154','EPSG','2254','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103155','NAD_1983_2011_StatePlane_Texas_Central_FIPS_4203',NULL,'EPSG','4400','EPSG','6318','ESRI','102339',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103155_USAGE','projected_crs','ESRI','103155','EPSG','2252','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103156','NAD_1983_2011_StatePlane_Texas_South_Central_FIPS_4204',NULL,'EPSG','4400','EPSG','6318','ESRI','102340',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103156_USAGE','projected_crs','ESRI','103156','EPSG','2527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103157','NAD_1983_2011_StatePlane_Texas_South_FIPS_4205',NULL,'EPSG','4400','EPSG','6318','ESRI','102341',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103157_USAGE','projected_crs','ESRI','103157','EPSG','2528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103158','NAD_1983_2011_StatePlane_Texas_North_FIPS_4201_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102737',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103158_USAGE','projected_crs','ESRI','103158','EPSG','2253','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103159','NAD_1983_2011_StatePlane_Texas_North_Central_FIPS_4202_FtUS',NULL,'EPSG','4497','EPSG','6318','ESRI','102738',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103159_USAGE','projected_crs','ESRI','103159','EPSG','2254','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103160','NAD_1983_2011_StatePlane_Texas_Central_FIPS_4203_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102739',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103160_USAGE','projected_crs','ESRI','103160','EPSG','2252','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103161','NAD_1983_2011_StatePlane_Texas_South_Central_FIPS_4204_FtUS',NULL,'EPSG','4497','EPSG','6318','ESRI','102740',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103161_USAGE','projected_crs','ESRI','103161','EPSG','2527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103162','NAD_1983_2011_StatePlane_Texas_South_FIPS_4205_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102741',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103162_USAGE','projected_crs','ESRI','103162','EPSG','2528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103163','NAD_1983_2011_StatePlane_Utah_North_FIPS_4301',NULL,'EPSG','4400','EPSG','6318','ESRI','102342',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103163_USAGE','projected_crs','ESRI','103163','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103164','NAD_1983_2011_StatePlane_Utah_Central_FIPS_4302',NULL,'EPSG','4400','EPSG','6318','ESRI','102343',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103164_USAGE','projected_crs','ESRI','103164','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103165','NAD_1983_2011_StatePlane_Utah_South_FIPS_4303',NULL,'EPSG','4400','EPSG','6318','ESRI','102344',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103165_USAGE','projected_crs','ESRI','103165','EPSG','2259','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103166','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640419.947506561,'EPSG','9002','EPSG','8827','Northing at false origin',3280839.895013123,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103166_USAGE','conversion','ESRI','103166','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103166','NAD_1983_2011_StatePlane_Utah_North_FIPS_4301_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103166',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103166_USAGE','projected_crs','ESRI','103166','EPSG','2258','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103167','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.01666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.65,'EPSG','9102','EPSG','8826','Easting at false origin',1640419.947506561,'EPSG','9002','EPSG','8827','Northing at false origin',6561679.790026246,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103167_USAGE','conversion','ESRI','103167','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103167','NAD_1983_2011_StatePlane_Utah_Central_FIPS_4302_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103167',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103167_USAGE','projected_crs','ESRI','103167','EPSG','2257','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103168','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.21666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.35,'EPSG','9102','EPSG','8826','Easting at false origin',1640419.947506561,'EPSG','9002','EPSG','8827','Northing at false origin',9842519.685039369,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103168_USAGE','conversion','ESRI','103168','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103168','NAD_1983_2011_StatePlane_Utah_South_FIPS_4303_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103168',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103168_USAGE','projected_crs','ESRI','103168','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103169','NAD_1983_2011_StatePlane_Utah_North_FIPS_4301_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102742',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103169_USAGE','projected_crs','ESRI','103169','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103170','NAD_1983_2011_StatePlane_Utah_Central_FIPS_4302_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102743',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103170_USAGE','projected_crs','ESRI','103170','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103171','NAD_1983_2011_StatePlane_Utah_South_FIPS_4303_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102744',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103171_USAGE','projected_crs','ESRI','103171','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103172','NAD_1983_2011_StatePlane_Vermont_FIPS_4400',NULL,'EPSG','4400','EPSG','6318','ESRI','102345',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103172_USAGE','projected_crs','ESRI','103172','EPSG','1414','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103173','NAD_1983_2011_StatePlane_Vermont_FIPS_4400_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102745',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103173_USAGE','projected_crs','ESRI','103173','EPSG','1414','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103174','NAD_1983_2011_StatePlane_Virginia_North_FIPS_4501',NULL,'EPSG','4400','EPSG','6318','ESRI','102346',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103174_USAGE','projected_crs','ESRI','103174','EPSG','2260','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103175','NAD_1983_2011_StatePlane_Virginia_South_FIPS_4502',NULL,'EPSG','4400','EPSG','6318','ESRI','102347',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103175_USAGE','projected_crs','ESRI','103175','EPSG','2261','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103176','NAD_1983_2011_StatePlane_Virginia_North_FIPS_4501_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102746',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103176_USAGE','projected_crs','ESRI','103176','EPSG','2260','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103177','NAD_1983_2011_StatePlane_Virginia_South_FIPS_4502_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102747',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103177_USAGE','projected_crs','ESRI','103177','EPSG','2261','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103178','NAD_1983_2011_StatePlane_Washington_North_FIPS_4601',NULL,'EPSG','4400','EPSG','6318','ESRI','102348',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103178_USAGE','projected_crs','ESRI','103178','EPSG','2273','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103179','NAD_1983_2011_StatePlane_Washington_South_FIPS_4602',NULL,'EPSG','4400','EPSG','6318','ESRI','102349',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103179_USAGE','projected_crs','ESRI','103179','EPSG','2274','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103180','NAD_1983_2011_StatePlane_Washington_North_FIPS_4601_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102748',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103180_USAGE','projected_crs','ESRI','103180','EPSG','2273','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103181','NAD_1983_2011_StatePlane_Washington_South_FIPS_4602_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102749',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103181_USAGE','projected_crs','ESRI','103181','EPSG','2274','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103182','NAD_1983_2011_StatePlane_West_Virginia_North_FIPS_4701',NULL,'EPSG','4400','EPSG','6318','ESRI','102350',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103182_USAGE','projected_crs','ESRI','103182','EPSG','2264','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103183','NAD_1983_2011_StatePlane_West_Virginia_South_FIPS_4702',NULL,'EPSG','4400','EPSG','6318','ESRI','102351',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103183_USAGE','projected_crs','ESRI','103183','EPSG','2265','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103184','NAD_1983_2011_StatePlane_West_Virginia_North_FIPS_4701_FtUS',NULL,'EPSG','4497','EPSG','6318','ESRI','102750',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103184_USAGE','projected_crs','ESRI','103184','EPSG','2264','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103185','NAD_1983_2011_StatePlane_West_Virginia_South_FIPS_4702_FtUS',NULL,'EPSG','4497','EPSG','6318','ESRI','102751',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103185_USAGE','projected_crs','ESRI','103185','EPSG','2265','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103186','NAD_1983_2011_StatePlane_Wisconsin_North_FIPS_4801',NULL,'EPSG','4400','EPSG','6318','ESRI','102352',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103186_USAGE','projected_crs','ESRI','103186','EPSG','2267','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103187','NAD_1983_2011_StatePlane_Wisconsin_Central_FIPS_4802',NULL,'EPSG','4400','EPSG','6318','ESRI','102353',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103187_USAGE','projected_crs','ESRI','103187','EPSG','2266','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103188','NAD_1983_2011_StatePlane_Wisconsin_South_FIPS_4803',NULL,'EPSG','4400','EPSG','6318','ESRI','102354',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103188_USAGE','projected_crs','ESRI','103188','EPSG','2268','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103189','NAD_1983_2011_StatePlane_Wisconsin_North_FIPS_4801_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102752',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103189_USAGE','projected_crs','ESRI','103189','EPSG','2267','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103190','NAD_1983_2011_StatePlane_Wisconsin_Central_FIPS_4802_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102753',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103190_USAGE','projected_crs','ESRI','103190','EPSG','2266','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103191','NAD_1983_2011_StatePlane_Wisconsin_South_FIPS_4803_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102754',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103191_USAGE','projected_crs','ESRI','103191','EPSG','2268','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103192','NAD_1983_2011_StatePlane_Wyoming_East_FIPS_4901',NULL,'EPSG','4400','EPSG','6318','ESRI','102355',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103192_USAGE','projected_crs','ESRI','103192','EPSG','2269','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103193','NAD_1983_2011_StatePlane_Wyoming_East_Central_FIPS_4902',NULL,'EPSG','4400','EPSG','6318','ESRI','102356',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103193_USAGE','projected_crs','ESRI','103193','EPSG','2270','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103194','NAD_1983_2011_StatePlane_Wyoming_West_Central_FIPS_4903',NULL,'EPSG','4400','EPSG','6318','ESRI','102357',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103194_USAGE','projected_crs','ESRI','103194','EPSG','2272','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103195','NAD_1983_2011_StatePlane_Wyoming_West_FIPS_4904',NULL,'EPSG','4400','EPSG','6318','ESRI','102358',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103195_USAGE','projected_crs','ESRI','103195','EPSG','2271','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103196','NAD_1983_2011_StatePlane_Wyoming_East_FIPS_4901_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102755',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103196_USAGE','projected_crs','ESRI','103196','EPSG','2269','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103197','NAD_1983_2011_StatePlane_Wyoming_E_Central_FIPS_4902_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102756',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103197_USAGE','projected_crs','ESRI','103197','EPSG','2270','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103198','NAD_1983_2011_StatePlane_Wyoming_W_Central_FIPS_4903_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102757',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103198_USAGE','projected_crs','ESRI','103198','EPSG','2272','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103199','NAD_1983_2011_StatePlane_Wyoming_West_FIPS_4904_Ft_US',NULL,'EPSG','4497','EPSG','6318','ESRI','102758',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103199_USAGE','projected_crs','ESRI','103199','EPSG','2271','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103200','NAD_1983_2011_StatePlane_Puerto_Rico_Virgin_Isls_FIPS_5200',NULL,'EPSG','4400','EPSG','6318','ESRI','102361',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103200_USAGE','projected_crs','ESRI','103200','EPSG','3634','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103201','RGRDC_2005_Congo_TM_Zone_12',NULL,'EPSG','4400','EPSG','4046','EPSG','17412',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103201_USAGE','projected_crs','ESRI','103201','EPSG','3937','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103202','RGRDC_2005_Congo_TM_Zone_14',NULL,'EPSG','4400','EPSG','4046','EPSG','17414',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103202_USAGE','projected_crs','ESRI','103202','EPSG','3151','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103203','RGRDC_2005_Congo_TM_Zone_16',NULL,'EPSG','4400','EPSG','4046','EPSG','17416',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103203_USAGE','projected_crs','ESRI','103203','EPSG','3617','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103204','RGRDC_2005_Congo_TM_Zone_18',NULL,'EPSG','4400','EPSG','4046','EPSG','17418',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103204_USAGE','projected_crs','ESRI','103204','EPSG','3618','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103205','RGRDC_2005_Congo_TM_Zone_20',NULL,'EPSG','4400','EPSG','4046','EPSG','17420',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103205_USAGE','projected_crs','ESRI','103205','EPSG','3620','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103206','RGRDC_2005_Congo_TM_Zone_22',NULL,'EPSG','4400','EPSG','4046','EPSG','17422',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103206_USAGE','projected_crs','ESRI','103206','EPSG','3621','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103207','RGRDC_2005_Congo_TM_Zone_24',NULL,'EPSG','4400','EPSG','4046','EPSG','17424',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103207_USAGE','projected_crs','ESRI','103207','EPSG','3622','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103208','RGRDC_2005_Congo_TM_Zone_26',NULL,'EPSG','4400','EPSG','4046','EPSG','17426',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103208_USAGE','projected_crs','ESRI','103208','EPSG','3623','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103209','RGRDC_2005_Congo_TM_Zone_28',NULL,'EPSG','4400','EPSG','4046','EPSG','17428',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103209_USAGE','projected_crs','ESRI','103209','EPSG','3624','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103210','RGRDC_2005_UTM_Zone_33S',NULL,'EPSG','4400','EPSG','4046','EPSG','16133',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103210_USAGE','projected_crs','ESRI','103210','EPSG','3626','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103211','RGRDC_2005_UTM_Zone_34S',NULL,'EPSG','4400','EPSG','4046','EPSG','16134',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103211_USAGE','projected_crs','ESRI','103211','EPSG','3627','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103212','RGRDC_2005_UTM_Zone_35S',NULL,'EPSG','4400','EPSG','4046','EPSG','16135',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103212_USAGE','projected_crs','ESRI','103212','EPSG','3628','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103213','Chua_UTM_Zone_23S',NULL,'EPSG','4400','EPSG','4224','EPSG','16123',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103213_USAGE','projected_crs','ESRI','103213','EPSG','3619','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103214','REGCAN95_UTM_Zone_27N',NULL,'EPSG','4400','EPSG','4081','EPSG','16027',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103214_USAGE','projected_crs','ESRI','103214','EPSG','3629','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103215','REGCAN95_UTM_Zone_28N',NULL,'EPSG','4400','EPSG','4081','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103215_USAGE','projected_crs','ESRI','103215','EPSG','3630','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103216','ETRS_1989_DKTM1',NULL,'EPSG','4400','EPSG','4258','EPSG','4089',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103216_USAGE','projected_crs','ESRI','103216','EPSG','3631','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103217','ETRS_1989_DKTM2',NULL,'EPSG','4400','EPSG','4258','EPSG','4090',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103217_USAGE','projected_crs','ESRI','103217','EPSG','3632','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103218','ETRS_1989_DKTM3',NULL,'EPSG','4400','EPSG','4258','EPSG','4091',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103218_USAGE','projected_crs','ESRI','103218','EPSG','2532','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103219','ETRS_1989_DKTM4',NULL,'EPSG','4400','EPSG','4258','EPSG','4092',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103219_USAGE','projected_crs','ESRI','103219','EPSG','2533','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103220','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-85.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103220_USAGE','conversion','ESRI','103220','EPSG','2154','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103220','NAD_1983_CORS96_StatePlane_Alabama_East_FIPS_0101',NULL,'EPSG','4400','EPSG','6783','ESRI','103220',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103220_USAGE','projected_crs','ESRI','103220','EPSG','2154','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103221','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103221_USAGE','conversion','ESRI','103221','EPSG','2155','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103221','NAD_1983_CORS96_StatePlane_Alabama_West_FIPS_0102',NULL,'EPSG','4400','EPSG','6783','ESRI','103221',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103221_USAGE','projected_crs','ESRI','103221','EPSG','2155','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103222','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103222_USAGE','conversion','ESRI','103222','EPSG','2167','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103222','NAD_1983_CORS96_StatePlane_Arizona_East_FIPS_0201',NULL,'EPSG','4400','EPSG','6783','ESRI','103222',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103222_USAGE','projected_crs','ESRI','103222','EPSG','2167','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103223','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.9166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103223_USAGE','conversion','ESRI','103223','EPSG','2166','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103223','NAD_1983_CORS96_StatePlane_Arizona_Central_FIPS_0202',NULL,'EPSG','4400','EPSG','6783','ESRI','103223',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103223_USAGE','projected_crs','ESRI','103223','EPSG','2166','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103224','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-113.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',213360.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103224_USAGE','conversion','ESRI','103224','EPSG','2168','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103224','NAD_1983_CORS96_StatePlane_Arizona_West_FIPS_0203',NULL,'EPSG','4400','EPSG','6783','ESRI','103224',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103224_USAGE','projected_crs','ESRI','103224','EPSG','2168','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103225','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103225_USAGE','conversion','ESRI','103225','EPSG','2167','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103225','NAD_1983_CORS96_StatePlane_Arizona_East_FIPS_0201_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103225',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103225_USAGE','projected_crs','ESRI','103225','EPSG','2167','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103226','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.9166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103226_USAGE','conversion','ESRI','103226','EPSG','2166','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103226','NAD_1983_CORS96_StatePlane_Arizona_Central_FIPS_0202_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103226',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103226_USAGE','projected_crs','ESRI','103226','EPSG','2166','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103227','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-113.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9002','EPSG','8807','False northing',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103227_USAGE','conversion','ESRI','103227','EPSG','2168','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103227','NAD_1983_CORS96_StatePlane_Arizona_West_FIPS_0203_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103227',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103227_USAGE','projected_crs','ESRI','103227','EPSG','2168','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103228','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103228_USAGE','conversion','ESRI','103228','EPSG','2169','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103228','NAD_1983_CORS96_StatePlane_Arkansas_North_FIPS_0301',NULL,'EPSG','4400','EPSG','6783','ESRI','103228',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103228_USAGE','projected_crs','ESRI','103228','EPSG','2169','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103229','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103229_USAGE','conversion','ESRI','103229','EPSG','2170','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103229','NAD_1983_CORS96_StatePlane_Arkansas_South_FIPS_0302',NULL,'EPSG','4400','EPSG','6783','ESRI','103229',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103229_USAGE','projected_crs','ESRI','103229','EPSG','2170','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103230','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103230_USAGE','conversion','ESRI','103230','EPSG','2169','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103230','NAD_1983_CORS96_StatePlane_Arkansas_North_FIPS_0301_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103230',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103230_USAGE','projected_crs','ESRI','103230','EPSG','2169','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103231','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',1312333.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103231_USAGE','conversion','ESRI','103231','EPSG','2170','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103231','NAD_1983_CORS96_StatePlane_Arkansas_South_FIPS_0302_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103231',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103231_USAGE','projected_crs','ESRI','103231','EPSG','2170','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103232','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103232_USAGE','conversion','ESRI','103232','EPSG','2175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103232','NAD_1983_CORS96_StatePlane_California_I_FIPS_0401',NULL,'EPSG','4400','EPSG','6783','ESRI','103232',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103232_USAGE','projected_crs','ESRI','103232','EPSG','2175','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103233','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103233_USAGE','conversion','ESRI','103233','EPSG','2176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103233','NAD_1983_CORS96_StatePlane_California_II_FIPS_0402',NULL,'EPSG','4400','EPSG','6783','ESRI','103233',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103233_USAGE','projected_crs','ESRI','103233','EPSG','2176','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103234','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103234_USAGE','conversion','ESRI','103234','EPSG','2177','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103234','NAD_1983_CORS96_StatePlane_California_III_FIPS_0403',NULL,'EPSG','4400','EPSG','6783','ESRI','103234',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103234_USAGE','projected_crs','ESRI','103234','EPSG','2177','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103235','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-119.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.25,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103235_USAGE','conversion','ESRI','103235','EPSG','2178','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103235','NAD_1983_CORS96_StatePlane_California_IV_FIPS_0404',NULL,'EPSG','4400','EPSG','6783','ESRI','103235',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103235_USAGE','projected_crs','ESRI','103235','EPSG','2178','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103236','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103236_USAGE','conversion','ESRI','103236','EPSG','2182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103236','NAD_1983_CORS96_StatePlane_California_V_FIPS_0405',NULL,'EPSG','4400','EPSG','6783','ESRI','103236',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103236_USAGE','projected_crs','ESRI','103236','EPSG','2182','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103237','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-116.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103237_USAGE','conversion','ESRI','103237','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103237','NAD_1983_CORS96_StatePlane_California_VI_FIPS_0406',NULL,'EPSG','4400','EPSG','6783','ESRI','103237',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103237_USAGE','projected_crs','ESRI','103237','EPSG','2180','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103238','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103238_USAGE','conversion','ESRI','103238','EPSG','2175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103238','NAD_1983_CORS96_StatePlane_California_I_FIPS_0401_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103238',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103238_USAGE','projected_crs','ESRI','103238','EPSG','2175','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103239','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-122.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103239_USAGE','conversion','ESRI','103239','EPSG','2176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103239','NAD_1983_CORS96_StatePlane_California_II_FIPS_0402_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103239',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103239_USAGE','projected_crs','ESRI','103239','EPSG','2176','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103240','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103240_USAGE','conversion','ESRI','103240','EPSG','2177','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103240','NAD_1983_CORS96_StatePlane_California_III_FIPS_0403_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103240',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103240_USAGE','projected_crs','ESRI','103240','EPSG','2177','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103241','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-119.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.25,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103241_USAGE','conversion','ESRI','103241','EPSG','2178','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103241','NAD_1983_CORS96_StatePlane_California_IV_FIPS_0404_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103241',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103241_USAGE','projected_crs','ESRI','103241','EPSG','2178','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103242','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-118.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103242_USAGE','conversion','ESRI','103242','EPSG','2182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103242','NAD_1983_CORS96_StatePlane_California_V_FIPS_0405_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103242',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103242_USAGE','projected_crs','ESRI','103242','EPSG','2182','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103243','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',32.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-116.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',6561666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103243_USAGE','conversion','ESRI','103243','EPSG','2180','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103243','NAD_1983_CORS96_StatePlane_California_VI_FIPS_0406_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103243',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103243_USAGE','projected_crs','ESRI','103243','EPSG','2180','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103244','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103244_USAGE','conversion','ESRI','103244','EPSG','2184','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103244','NAD_1983_CORS96_StatePlane_Colorado_North_FIPS_0501',NULL,'EPSG','4400','EPSG','6783','ESRI','103244',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103244_USAGE','projected_crs','ESRI','103244','EPSG','2184','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103245','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.45,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.75,'EPSG','9102','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103245_USAGE','conversion','ESRI','103245','EPSG','2183','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103245','NAD_1983_CORS96_StatePlane_Colorado_Central_FIPS_0502',NULL,'EPSG','4400','EPSG','6783','ESRI','103245',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103245_USAGE','projected_crs','ESRI','103245','EPSG','2183','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103246','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.23333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',914401.8289,'EPSG','9001','EPSG','8827','Northing at false origin',304800.6096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103246_USAGE','conversion','ESRI','103246','EPSG','2185','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103246','NAD_1983_CORS96_StatePlane_Colorado_South_FIPS_0503',NULL,'EPSG','4400','EPSG','6783','ESRI','103246',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103246_USAGE','projected_crs','ESRI','103246','EPSG','2185','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103247','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',3000000.000316083,'EPSG','9003','EPSG','8827','Northing at false origin',999999.999996,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103247_USAGE','conversion','ESRI','103247','EPSG','2184','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103247','NAD_1983_CORS96_StatePlane_Colorado_North_FIPS_0501_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103247',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103247_USAGE','projected_crs','ESRI','103247','EPSG','2184','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103248','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.45,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.75,'EPSG','9102','EPSG','8826','Easting at false origin',3000000.000316083,'EPSG','9003','EPSG','8827','Northing at false origin',999999.999996,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103248_USAGE','conversion','ESRI','103248','EPSG','2183','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103248','NAD_1983_CORS96_StatePlane_Colorado_Central_FIPS_0502_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103248',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103248_USAGE','projected_crs','ESRI','103248','EPSG','2183','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103249','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-105.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.23333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.43333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',3000000.000316083,'EPSG','9003','EPSG','8827','Northing at false origin',999999.999996,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103249_USAGE','conversion','ESRI','103249','EPSG','2185','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103249','NAD_1983_CORS96_StatePlane_Colorado_South_FIPS_0503_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103249',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103249_USAGE','projected_crs','ESRI','103249','EPSG','2185','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103250','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-72.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.86666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',304800.6096,'EPSG','9001','EPSG','8827','Northing at false origin',152400.3048,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103250_USAGE','conversion','ESRI','103250','EPSG','1377','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103250','NAD_1983_CORS96_StatePlane_Connecticut_FIPS_0600',NULL,'EPSG','4400','EPSG','6783','ESRI','103250',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103250_USAGE','projected_crs','ESRI','103250','EPSG','1377','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103251','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-72.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.86666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',999999.999996,'EPSG','9003','EPSG','8827','Northing at false origin',499999.999998,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103251_USAGE','conversion','ESRI','103251','EPSG','1377','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103251','NAD_1983_CORS96_StatePlane_Connecticut_FIPS_0600_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103251',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103251_USAGE','projected_crs','ESRI','103251','EPSG','1377','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103252','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103252_USAGE','conversion','ESRI','103252','EPSG','1378','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103252','NAD_1983_CORS96_StatePlane_Delaware_FIPS_0700',NULL,'EPSG','4400','EPSG','6783','ESRI','103252',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103252_USAGE','projected_crs','ESRI','103252','EPSG','1378','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103253','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-75.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103253_USAGE','conversion','ESRI','103253','EPSG','1378','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103253','NAD_1983_CORS96_StatePlane_Delaware_FIPS_0700_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103253',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103253_USAGE','projected_crs','ESRI','103253','EPSG','1378','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103254','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103254_USAGE','conversion','ESRI','103254','EPSG','2186','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103254','NAD_1983_CORS96_StatePlane_Florida_East_FIPS_0901',NULL,'EPSG','4400','EPSG','6783','ESRI','103254',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103254_USAGE','projected_crs','ESRI','103254','EPSG','2186','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103255','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103255_USAGE','conversion','ESRI','103255','EPSG','2188','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103255','NAD_1983_CORS96_StatePlane_Florida_West_FIPS_0902',NULL,'EPSG','4400','EPSG','6783','ESRI','103255',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103255_USAGE','projected_crs','ESRI','103255','EPSG','2188','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103256','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.58333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.75,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103256_USAGE','conversion','ESRI','103256','EPSG','2187','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103256','NAD_1983_CORS96_StatePlane_Florida_North_FIPS_0903',NULL,'EPSG','4400','EPSG','6783','ESRI','103256',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103256_USAGE','projected_crs','ESRI','103256','EPSG','2187','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103257','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103257_USAGE','conversion','ESRI','103257','EPSG','2186','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103257','NAD_1983_CORS96_StatePlane_Florida_East_FIPS_0901_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103257',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103257_USAGE','projected_crs','ESRI','103257','EPSG','2186','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103258','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.33333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103258_USAGE','conversion','ESRI','103258','EPSG','2188','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103258','NAD_1983_CORS96_StatePlane_Florida_West_FIPS_0902_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103258',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103258_USAGE','projected_crs','ESRI','103258','EPSG','2188','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103259','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.58333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.75,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103259_USAGE','conversion','ESRI','103259','EPSG','2187','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103259','NAD_1983_CORS96_StatePlane_Florida_North_FIPS_0903_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103259',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103259_USAGE','projected_crs','ESRI','103259','EPSG','2187','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103260','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103260_USAGE','conversion','ESRI','103260','EPSG','2189','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103260','NAD_1983_CORS96_StatePlane_Georgia_East_FIPS_1001',NULL,'EPSG','4400','EPSG','6783','ESRI','103260',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103260_USAGE','projected_crs','ESRI','103260','EPSG','2189','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103261','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-84.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103261_USAGE','conversion','ESRI','103261','EPSG','2190','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103261','NAD_1983_CORS96_StatePlane_Georgia_West_FIPS_1002',NULL,'EPSG','4400','EPSG','6783','ESRI','103261',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103261_USAGE','projected_crs','ESRI','103261','EPSG','2190','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103262','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-82.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103262_USAGE','conversion','ESRI','103262','EPSG','2189','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103262','NAD_1983_CORS96_StatePlane_Georgia_East_FIPS_1001_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103262',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103262_USAGE','projected_crs','ESRI','103262','EPSG','2189','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103263','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-84.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',2296583.333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103263_USAGE','conversion','ESRI','103263','EPSG','2190','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103263','NAD_1983_CORS96_StatePlane_Georgia_West_FIPS_1002_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103263',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103263_USAGE','projected_crs','ESRI','103263','EPSG','2190','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103264','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-112.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103264_USAGE','conversion','ESRI','103264','EPSG','2192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103264','NAD_1983_CORS96_StatePlane_Idaho_East_FIPS_1101',NULL,'EPSG','4400','EPSG','6783','ESRI','103264',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103264_USAGE','projected_crs','ESRI','103264','EPSG','2192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103265','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103265_USAGE','conversion','ESRI','103265','EPSG','2191','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103265','NAD_1983_CORS96_StatePlane_Idaho_Central_FIPS_1102',NULL,'EPSG','4400','EPSG','6783','ESRI','103265',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103265_USAGE','projected_crs','ESRI','103265','EPSG','2191','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103266','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103266_USAGE','conversion','ESRI','103266','EPSG','2193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103266','NAD_1983_CORS96_StatePlane_Idaho_West_FIPS_1103',NULL,'EPSG','4400','EPSG','6783','ESRI','103266',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103266_USAGE','projected_crs','ESRI','103266','EPSG','2193','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103267','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-112.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103267_USAGE','conversion','ESRI','103267','EPSG','2192','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103267','NAD_1983_CORS96_StatePlane_Idaho_East_FIPS_1101_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103267',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103267_USAGE','projected_crs','ESRI','103267','EPSG','2192','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103268','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999473684210526,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103268_USAGE','conversion','ESRI','103268','EPSG','2191','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103268','NAD_1983_CORS96_StatePlane_Idaho_Central_FIPS_1102_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103268',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103268_USAGE','projected_crs','ESRI','103268','EPSG','2191','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103269','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',2624666.666666666,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103269_USAGE','conversion','ESRI','103269','EPSG','2193','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103269','NAD_1983_CORS96_StatePlane_Idaho_West_FIPS_1103_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103269',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103269_USAGE','projected_crs','ESRI','103269','EPSG','2193','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103270','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103270_USAGE','conversion','ESRI','103270','EPSG','2194','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103270','NAD_1983_CORS96_StatePlane_Illinois_East_FIPS_1201',NULL,'EPSG','4400','EPSG','6783','ESRI','103270',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103270_USAGE','projected_crs','ESRI','103270','EPSG','2194','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103271','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103271_USAGE','conversion','ESRI','103271','EPSG','2195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103271','NAD_1983_CORS96_StatePlane_Illinois_West_FIPS_1202',NULL,'EPSG','4400','EPSG','6783','ESRI','103271',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103271_USAGE','projected_crs','ESRI','103271','EPSG','2195','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103272','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999975,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103272_USAGE','conversion','ESRI','103272','EPSG','2194','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103272','NAD_1983_CORS96_StatePlane_Illinois_East_FIPS_1201_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103272',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103272_USAGE','projected_crs','ESRI','103272','EPSG','2194','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103273','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',2296583.333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103273_USAGE','conversion','ESRI','103273','EPSG','2195','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103273','NAD_1983_CORS96_StatePlane_Illinois_West_FIPS_1202_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103273',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103273_USAGE','projected_crs','ESRI','103273','EPSG','2195','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103274','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-85.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103274_USAGE','conversion','ESRI','103274','EPSG','2196','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103274','NAD_1983_CORS96_StatePlane_Indiana_East_FIPS_1301',NULL,'EPSG','4400','EPSG','6783','ESRI','103274',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103274_USAGE','projected_crs','ESRI','103274','EPSG','2196','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103275','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.08333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103275_USAGE','conversion','ESRI','103275','EPSG','2197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103275','NAD_1983_CORS96_StatePlane_Indiana_West_FIPS_1302',NULL,'EPSG','4400','EPSG','6783','ESRI','103275',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103275_USAGE','projected_crs','ESRI','103275','EPSG','2197','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103276','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-85.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',328083.3333333333,'EPSG','9003','EPSG','8807','False northing',820208.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103276_USAGE','conversion','ESRI','103276','EPSG','2196','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103276','NAD_1983_CORS96_StatePlane_Indiana_East_FIPS_1301_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103276',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103276_USAGE','projected_crs','ESRI','103276','EPSG','2196','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103277','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',37.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.08333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',2952750.0,'EPSG','9003','EPSG','8807','False northing',820208.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103277_USAGE','conversion','ESRI','103277','EPSG','2197','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103277','NAD_1983_CORS96_StatePlane_Indiana_West_FIPS_1302_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103277',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103277_USAGE','projected_crs','ESRI','103277','EPSG','2197','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103278','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.26666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103278_USAGE','conversion','ESRI','103278','EPSG','2198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103278','NAD_1983_CORS96_StatePlane_Iowa_North_FIPS_1401',NULL,'EPSG','4400','EPSG','6783','ESRI','103278',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103278_USAGE','projected_crs','ESRI','103278','EPSG','2198','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103279','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103279_USAGE','conversion','ESRI','103279','EPSG','2199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103279','NAD_1983_CORS96_StatePlane_Iowa_South_FIPS_1402',NULL,'EPSG','4400','EPSG','6783','ESRI','103279',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103279_USAGE','projected_crs','ESRI','103279','EPSG','2199','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103280','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.26666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103280_USAGE','conversion','ESRI','103280','EPSG','2198','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103280','NAD_1983_CORS96_StatePlane_Iowa_North_FIPS_1401_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103280',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103280_USAGE','projected_crs','ESRI','103280','EPSG','2198','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103281','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103281_USAGE','conversion','ESRI','103281','EPSG','2199','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103281','NAD_1983_CORS96_StatePlane_Iowa_South_FIPS_1402_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103281',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103281_USAGE','projected_crs','ESRI','103281','EPSG','2199','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103282','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103282_USAGE','conversion','ESRI','103282','EPSG','2200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103282','NAD_1983_CORS96_StatePlane_Kansas_North_FIPS_1501',NULL,'EPSG','4400','EPSG','6783','ESRI','103282',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103282_USAGE','projected_crs','ESRI','103282','EPSG','2200','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103283','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.56666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',400000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103283_USAGE','conversion','ESRI','103283','EPSG','2201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103283','NAD_1983_CORS96_StatePlane_Kansas_South_FIPS_1502',NULL,'EPSG','4400','EPSG','6783','ESRI','103283',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103283_USAGE','projected_crs','ESRI','103283','EPSG','2201','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103284','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103284_USAGE','conversion','ESRI','103284','EPSG','2200','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103284','NAD_1983_CORS96_StatePlane_Kansas_North_FIPS_1501_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103284',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103284_USAGE','projected_crs','ESRI','103284','EPSG','2200','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103285','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.56666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',1312333.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103285_USAGE','conversion','ESRI','103285','EPSG','2201','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103285','NAD_1983_CORS96_StatePlane_Kansas_South_FIPS_1502_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103285',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103285_USAGE','projected_crs','ESRI','103285','EPSG','2201','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103286','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.96666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103286_USAGE','conversion','ESRI','103286','EPSG','2202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103286','NAD_1983_CORS96_StatePlane_Kentucky_North_FIPS_1601',NULL,'EPSG','4400','EPSG','6783','ESRI','103286',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103286_USAGE','projected_crs','ESRI','103286','EPSG','2202','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103287','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.96666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103287_USAGE','conversion','ESRI','103287','EPSG','2202','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103287','NAD_1983_CORS96_StatePlane_Kentucky_North_FIPS_1601_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103287',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103287_USAGE','projected_crs','ESRI','103287','EPSG','2202','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103288','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.08333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',1500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103288_USAGE','conversion','ESRI','103288','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103288','NAD_1983_CORS96_StatePlane_Kentucky_FIPS_1600',NULL,'EPSG','4400','EPSG','6783','ESRI','103288',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103288_USAGE','projected_crs','ESRI','103288','EPSG','1386','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103289','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.08333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',4921250.0,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103289_USAGE','conversion','ESRI','103289','EPSG','1386','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103289','NAD_1983_CORS96_StatePlane_Kentucky_FIPS_1600_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103289',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103289_USAGE','projected_crs','ESRI','103289','EPSG','1386','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103290','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.93333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103290_USAGE','conversion','ESRI','103290','EPSG','2203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103290','NAD_1983_CORS96_StatePlane_Kentucky_South_FIPS_1602',NULL,'EPSG','4400','EPSG','6783','ESRI','103290',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103290_USAGE','projected_crs','ESRI','103290','EPSG','2203','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103291','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-85.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.93333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',1640416.666666667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103291_USAGE','conversion','ESRI','103291','EPSG','2203','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103291','NAD_1983_CORS96_StatePlane_Kentucky_South_FIPS_1602_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103291',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103291_USAGE','projected_crs','ESRI','103291','EPSG','2203','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103292','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',31.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',32.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103292_USAGE','conversion','ESRI','103292','EPSG','2204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103292','NAD_1983_CORS96_StatePlane_Louisiana_North_FIPS_1701',NULL,'EPSG','4400','EPSG','6783','ESRI','103292',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103292_USAGE','projected_crs','ESRI','103292','EPSG','2204','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103293','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.33333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.7,'EPSG','9102','EPSG','8826','Easting at false origin',1000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103293_USAGE','conversion','ESRI','103293','EPSG','2529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103293','NAD_1983_CORS96_StatePlane_Louisiana_South_FIPS_1702',NULL,'EPSG','4400','EPSG','6783','ESRI','103293',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103293_USAGE','projected_crs','ESRI','103293','EPSG','2529','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103294','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',30.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',31.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',32.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',3280833.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103294_USAGE','conversion','ESRI','103294','EPSG','2204','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103294','NAD_1983_CORS96_StatePlane_Louisiana_North_FIPS_1701_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103294',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103294_USAGE','projected_crs','ESRI','103294','EPSG','2204','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103295','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',28.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.33333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',29.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.7,'EPSG','9102','EPSG','8826','Easting at false origin',3280833.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103295_USAGE','conversion','ESRI','103295','EPSG','2529','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103295','NAD_1983_CORS96_StatePlane_Louisiana_South_FIPS_1702_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103295',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103295_USAGE','projected_crs','ESRI','103295','EPSG','2529','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103296','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-68.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103296_USAGE','conversion','ESRI','103296','EPSG','2206','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103296','NAD_1983_CORS96_StatePlane_Maine_East_FIPS_1801',NULL,'EPSG','4400','EPSG','6783','ESRI','103296',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103296_USAGE','projected_crs','ESRI','103296','EPSG','2206','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103297','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',900000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103297_USAGE','conversion','ESRI','103297','EPSG','2207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103297','NAD_1983_CORS96_StatePlane_Maine_West_FIPS_1802',NULL,'EPSG','4400','EPSG','6783','ESRI','103297',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103297_USAGE','projected_crs','ESRI','103297','EPSG','2207','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103298','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.66666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-68.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103298_USAGE','conversion','ESRI','103298','EPSG','2206','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103298','NAD_1983_CORS96_StatePlane_Maine_East_FIPS_1801_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103298',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103298_USAGE','projected_crs','ESRI','103298','EPSG','2206','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103299','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.16666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',2952750.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103299_USAGE','conversion','ESRI','103299','EPSG','2207','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103299','NAD_1983_CORS96_StatePlane_Maine_West_FIPS_1802_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103299',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103299_USAGE','projected_crs','ESRI','103299','EPSG','2207','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103300','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.36666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000365285,'EPSG','9201','EPSG','8806','False easting',147218.6942,'EPSG','9001','EPSG','8807','False northing',0.0037,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103300_USAGE','conversion','ESRI','103300','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103300','NAD_1983_HARN_WISCRS_Adams_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103300',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103300_USAGE','projected_crs','ESRI','103300','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103301','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.70611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.62222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000495683,'EPSG','9201','EPSG','8806','False easting',172821.9461,'EPSG','9001','EPSG','8807','False northing',0.0017,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103301_USAGE','conversion','ESRI','103301','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103301','NAD_1983_HARN_WISCRS_Ashland_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103301',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103301_USAGE','projected_crs','ESRI','103301','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103302','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.13333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.85,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000486665,'EPSG','9201','EPSG','8806','False easting',93150.0,'EPSG','9001','EPSG','8807','False northing',0.0029,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103302_USAGE','conversion','ESRI','103302','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103302','NAD_1983_HARN_WISCRS_Barron_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103302',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103302_USAGE','projected_crs','ESRI','103302','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103303','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.66964837722222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.15277777777779,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000331195,'EPSG','9201','EPSG','8806','False easting',228600.4575,'EPSG','9001','EPSG','8807','False northing',148551.4837,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103303_USAGE','conversion','ESRI','103303','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103303','NAD_1983_HARN_WISCRS_Bayfield_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103303',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103303_USAGE','projected_crs','ESRI','103303','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103304','NAD_1983_HARN_WISCRS_Brown_County_Meters',NULL,'EPSG','4400','EPSG','4152','EPSG','7428',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103304_USAGE','projected_crs','ESRI','103304','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103305','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.48138888888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.79722222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000382778,'EPSG','9201','EPSG','8806','False easting',175260.3502,'EPSG','9001','EPSG','8807','False northing',0.0048,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103305_USAGE','conversion','ESRI','103305','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103305','NAD_1983_HARN_WISCRS_Buffalo_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103305',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103305_USAGE','projected_crs','ESRI','103305','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103306','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.89871486583333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.45777777777778,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000383841,'EPSG','9201','EPSG','8806','False easting',64008.1276,'EPSG','9001','EPSG','8807','False northing',59445.9043,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103306_USAGE','conversion','ESRI','103306','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103306','NAD_1983_HARN_WISCRS_Burnett_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103306',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103306_USAGE','projected_crs','ESRI','103306','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103307','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.71944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000286569,'EPSG','9201','EPSG','8806','False easting',244754.8893,'EPSG','9001','EPSG','8807','False northing',0.0049,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103307_USAGE','conversion','ESRI','103307','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103307','NAD_1983_HARN_WISCRS_Calumet_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103307',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103307_USAGE','projected_crs','ESRI','103307','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103308','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.97785689861112,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.29444444444444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000391127,'EPSG','9201','EPSG','8806','False easting',60045.72,'EPSG','9001','EPSG','8807','False northing',44091.4346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103308_USAGE','conversion','ESRI','103308','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103308','NAD_1983_HARN_WISCRS_Chippewa_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103308',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103308_USAGE','projected_crs','ESRI','103308','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103309','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.6,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.70833333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000463003,'EPSG','9201','EPSG','8806','False easting',199949.1989,'EPSG','9001','EPSG','8807','False northing',0.0086,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103309_USAGE','conversion','ESRI','103309','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103309','NAD_1983_HARN_WISCRS_Clark_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103309',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103309_USAGE','projected_crs','ESRI','103309','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103310','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.46254664583333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.39444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00003498,'EPSG','9201','EPSG','8806','False easting',169164.3381,'EPSG','9001','EPSG','8807','False northing',111569.6134,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103310_USAGE','conversion','ESRI','103310','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103310','NAD_1983_HARN_WISCRS_Columbia_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103310',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103310_USAGE','projected_crs','ESRI','103310','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103311','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.200055605,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.9388888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000349151,'EPSG','9201','EPSG','8806','False easting',113690.6274,'EPSG','9001','EPSG','8807','False northing',53703.1201,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103311_USAGE','conversion','ESRI','103311','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103311','NAD_1983_HARN_WISCRS_Crawford_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103311',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103311_USAGE','projected_crs','ESRI','103311','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103312','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.0695160375,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.42222222222223,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000384786,'EPSG','9201','EPSG','8806','False easting',247193.2944,'EPSG','9001','EPSG','8807','False northing',146591.9896,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103312_USAGE','conversion','ESRI','103312','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103312','NAD_1983_HARN_WISCRS_Dane_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103312',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103312_USAGE','projected_crs','ESRI','103312','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103313','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.47222222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.775,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000346418,'EPSG','9201','EPSG','8806','False easting',263347.7263,'EPSG','9001','EPSG','8807','False northing',0.0076,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103313_USAGE','conversion','ESRI','103313','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103313','NAD_1983_HARN_WISCRS_Dodge_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103313',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103313_USAGE','projected_crs','ESRI','103313','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103314','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.4,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.27222222222223,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000187521,'EPSG','9201','EPSG','8806','False easting',158801.1176,'EPSG','9001','EPSG','8807','False northing',0.0023,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103314_USAGE','conversion','ESRI','103314','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103314','NAD_1983_HARN_WISCRS_Door_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103314',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103314_USAGE','projected_crs','ESRI','103314','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103315','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.88333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.91666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000385418,'EPSG','9201','EPSG','8806','False easting',59131.3183,'EPSG','9001','EPSG','8807','False northing',0.0041,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103315_USAGE','conversion','ESRI','103315','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103315','NAD_1983_HARN_WISCRS_Douglas_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103315',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103315_USAGE','projected_crs','ESRI','103315','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103316','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.40833333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000410324,'EPSG','9201','EPSG','8806','False easting',51816.104,'EPSG','9001','EPSG','8807','False northing',0.003,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103316_USAGE','conversion','ESRI','103316','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103316','NAD_1983_HARN_WISCRS_Dunn_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103316',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103316_USAGE','projected_crs','ESRI','103316','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103317','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.87228112638889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.28888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000035079,'EPSG','9201','EPSG','8806','False easting',120091.4402,'EPSG','9001','EPSG','8807','False northing',91687.9239,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103317_USAGE','conversion','ESRI','103317','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103317','NAD_1983_HARN_WISCRS_EauClaire_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103317',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103317_USAGE','projected_crs','ESRI','103317','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103318','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.14166666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000552095,'EPSG','9201','EPSG','8806','False easting',133502.6683,'EPSG','9001','EPSG','8807','False northing',0.0063,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103318_USAGE','conversion','ESRI','103318','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103318','NAD_1983_HARN_WISCRS_Florence_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103318',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103318_USAGE','projected_crs','ESRI','103318','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103319','NAD_1983_HARN_WISCRS_Fond_du_Lac_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103307',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103319_USAGE','projected_crs','ESRI','103319','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103320','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.00555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000673004,'EPSG','9201','EPSG','8806','False easting',275844.5533,'EPSG','9001','EPSG','8807','False northing',0.0157,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103320_USAGE','conversion','ESRI','103320','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103320','NAD_1983_HARN_WISCRS_Forest_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103320',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103320_USAGE','projected_crs','ESRI','103320','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103321','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.41111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.8,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000349452,'EPSG','9201','EPSG','8806','False easting',242316.4841,'EPSG','9001','EPSG','8807','False northing',0.01,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103321_USAGE','conversion','ESRI','103321','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103321','NAD_1983_HARN_WISCRS_Grant_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103321',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103321_USAGE','projected_crs','ESRI','103321','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103322','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.63756227694444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.83888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000390487,'EPSG','9201','EPSG','8806','False easting',170078.7403,'EPSG','9001','EPSG','8807','False northing',45830.2947,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103322_USAGE','conversion','ESRI','103322','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103322','NAD_1983_HARN_WISCRS_Green_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103322',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103322_USAGE','projected_crs','ESRI','103322','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103323','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.80700011777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.24166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000344057,'EPSG','9201','EPSG','8806','False easting',150876.3018,'EPSG','9001','EPSG','8807','False northing',79170.7795,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103323_USAGE','conversion','ESRI','103323','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103323','NAD_1983_HARN_WISCRS_GreenLake_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103323',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103323_USAGE','projected_crs','ESRI','103323','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103324','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.53888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000394961,'EPSG','9201','EPSG','8806','False easting',113081.0261,'EPSG','9001','EPSG','8807','False northing',0.0045,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103324_USAGE','conversion','ESRI','103324','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103324','NAD_1983_HARN_WISCRS_Iowa_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103324',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103324_USAGE','projected_crs','ESRI','103324','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103325','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.25555555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000677153,'EPSG','9201','EPSG','8806','False easting',220980.4419,'EPSG','9001','EPSG','8807','False northing',0.0085,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103325_USAGE','conversion','ESRI','103325','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103325','NAD_1983_HARN_WISCRS_Iron_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103325',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103325_USAGE','projected_crs','ESRI','103325','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103326','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.25333512777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.84429651944444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000353,'EPSG','9201','EPSG','8806','False easting',27000.0,'EPSG','9001','EPSG','8807','False northing',25000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103326_USAGE','conversion','ESRI','103326','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103326','NAD_1983_HARN_WISCRS_Jackson_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103326',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103326_USAGE','projected_crs','ESRI','103326','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103327','NAD_1983_HARN_WISCRS_Jefferson_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103313',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103327_USAGE','projected_crs','ESRI','103327','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103328','NAD_1983_HARN_WISCRS_Juneau_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103300',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103328_USAGE','projected_crs','ESRI','103328','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103329','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.21666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000260649,'EPSG','9201','EPSG','8806','False easting',185928.3728,'EPSG','9001','EPSG','8807','False northing',0.0009,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103329_USAGE','conversion','ESRI','103329','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103329','NAD_1983_HARN_WISCRS_Kenosha_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103329',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103329_USAGE','projected_crs','ESRI','103329','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103330','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.26666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.55,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000233704,'EPSG','9201','EPSG','8806','False easting',79857.7614,'EPSG','9001','EPSG','8807','False northing',0.0012,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103330_USAGE','conversion','ESRI','103330','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103330','NAD_1983_HARN_WISCRS_Kewaunee_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103330',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103330_USAGE','projected_crs','ESRI','103330','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103331','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.45111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.31666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000319985,'EPSG','9201','EPSG','8806','False easting',130454.6598,'EPSG','9001','EPSG','8807','False northing',0.0033,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103331_USAGE','conversion','ESRI','103331','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103331','NAD_1983_HARN_WISCRS_LaCrosse_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103331',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103331_USAGE','projected_crs','ESRI','103331','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103332','NAD_1983_HARN_WISCRS_Lafayette_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103322',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103332_USAGE','projected_crs','ESRI','103332','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103333','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.15423710527778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.03333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000627024,'EPSG','9201','EPSG','8806','False easting',198425.197,'EPSG','9001','EPSG','8807','False northing',105279.7829,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103333_USAGE','conversion','ESRI','103333','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103333','NAD_1983_HARN_WISCRS_Langlade_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103333',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103333_USAGE','projected_crs','ESRI','103333','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103334','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.84444444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.73333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000599003,'EPSG','9201','EPSG','8806','False easting',116129.0323,'EPSG','9001','EPSG','8807','False northing',0.0058,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103334_USAGE','conversion','ESRI','103334','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103334','NAD_1983_HARN_WISCRS_Lincoln_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103334',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103334_USAGE','projected_crs','ESRI','103334','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103335','NAD_1983_HARN_WISCRS_Manitowoc_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103330',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103335_USAGE','projected_crs','ESRI','103335','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103336','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.90090442361111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.77,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000053289,'EPSG','9201','EPSG','8806','False easting',74676.1493,'EPSG','9001','EPSG','8807','False northing',55049.2669,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103336_USAGE','conversion','ESRI','103336','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103336','NAD_1983_HARN_WISCRS_Marathon_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103336',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103336_USAGE','projected_crs','ESRI','103336','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103337','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.69166666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.71111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000234982,'EPSG','9201','EPSG','8806','False easting',238658.8794,'EPSG','9001','EPSG','8807','False northing',0.0032,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103337_USAGE','conversion','ESRI','103337','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103337','NAD_1983_HARN_WISCRS_Marinette_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103337',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103337_USAGE','projected_crs','ESRI','103337','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103338','NAD_1983_HARN_WISCRS_Marquette_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103323',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103338_USAGE','projected_crs','ESRI','103338','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103339','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.71666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000362499,'EPSG','9201','EPSG','8806','False easting',105461.0121,'EPSG','9001','EPSG','8807','False northing',0.0029,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103339_USAGE','conversion','ESRI','103339','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103339','NAD_1983_HARN_WISCRS_Menominee_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103339',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103339_USAGE','projected_crs','ESRI','103339','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103340','NAD_1983_HARN_WISCRS_Milwaukee_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103329',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103340_USAGE','projected_crs','ESRI','103340','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103341','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.00007392861111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.64166666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000434122,'EPSG','9201','EPSG','8806','False easting',204521.209,'EPSG','9001','EPSG','8807','False northing',121923.9861,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103341_USAGE','conversion','ESRI','103341','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103341','NAD_1983_HARN_WISCRS_Monroe_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103341',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103341_USAGE','projected_crs','ESRI','103341','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103342','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.39722222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.90833333333335,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000236869,'EPSG','9201','EPSG','8806','False easting',182880.3676,'EPSG','9001','EPSG','8807','False northing',0.0033,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103342_USAGE','conversion','ESRI','103342','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103342','NAD_1983_HARN_WISCRS_Oconto_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103342',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103342_USAGE','projected_crs','ESRI','103342','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103343','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.70422377027778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.54444444444444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000686968,'EPSG','9201','EPSG','8806','False easting',70104.1401,'EPSG','9001','EPSG','8807','False northing',57588.0346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103343_USAGE','conversion','ESRI','103343','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103343','NAD_1983_HARN_WISCRS_Oneida_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103343',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103343_USAGE','projected_crs','ESRI','103343','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103344','NAD_1983_HARN_WISCRS_Outagamie_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103307',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103344_USAGE','projected_crs','ESRI','103344','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103345','NAD_1983_HARN_WISCRS_Ozaukee_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103329',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103345_USAGE','projected_crs','ESRI','103345','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103346','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.63614887194444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.22777777777777,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000362977,'EPSG','9201','EPSG','8806','False easting',167640.3354,'EPSG','9001','EPSG','8807','False northing',86033.0876,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103346_USAGE','conversion','ESRI','103346','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103346','NAD_1983_HARN_WISCRS_Pepin_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103346',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103346_USAGE','projected_crs','ESRI','103346','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103347','NAD_1983_HARN_WISCRS_Pierce_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103346',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103347_USAGE','projected_crs','ESRI','103347','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103348','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.66111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000433849,'EPSG','9201','EPSG','8806','False easting',141732.2823,'EPSG','9001','EPSG','8807','False northing',0.0059,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103348_USAGE','conversion','ESRI','103348','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103348','NAD_1983_HARN_WISCRS_Polk_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103348',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103348_USAGE','projected_crs','ESRI','103348','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103349','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.41682397527777,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000039936,'EPSG','9201','EPSG','8806','False easting',56388.1128,'EPSG','9001','EPSG','8807','False northing',50022.1874,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103349_USAGE','conversion','ESRI','103349','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103349','NAD_1983_HARN_WISCRS_Portage_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103349',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103349_USAGE','projected_crs','ESRI','103349','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103350','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.55555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.48888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000649554,'EPSG','9201','EPSG','8806','False easting',227990.8546,'EPSG','9001','EPSG','8807','False northing',0.0109,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103350_USAGE','conversion','ESRI','103350','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103350','NAD_1983_HARN_WISCRS_Price_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103350',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103350_USAGE','projected_crs','ESRI','103350','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103351','NAD_1983_HARN_WISCRS_Racine_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103329',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103351_USAGE','projected_crs','ESRI','103351','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103352','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.3223129275,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.43055555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000375653,'EPSG','9201','EPSG','8806','False easting',202387.6048,'EPSG','9001','EPSG','8807','False northing',134255.4253,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103352_USAGE','conversion','ESRI','103352','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103352','NAD_1983_HARN_WISCRS_Richland_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103352',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103352_USAGE','projected_crs','ESRI','103352','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103353','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.94444444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.07222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000337311,'EPSG','9201','EPSG','8806','False easting',146304.2926,'EPSG','9001','EPSG','8807','False northing',0.0068,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103353_USAGE','conversion','ESRI','103353','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103353','NAD_1983_HARN_WISCRS_Rock_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103353',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103353_USAGE','projected_crs','ESRI','103353','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103354','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.91944444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.06666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000495976,'EPSG','9201','EPSG','8806','False easting',250546.1013,'EPSG','9001','EPSG','8807','False northing',0.0234,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103354_USAGE','conversion','ESRI','103354','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103354','NAD_1983_HARN_WISCRS_Rusk_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103354',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103354_USAGE','projected_crs','ESRI','103354','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103355','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.81944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.9,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000373868,'EPSG','9201','EPSG','8806','False easting',185623.5716,'EPSG','9001','EPSG','8807','False northing',0.0051,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103355_USAGE','conversion','ESRI','103355','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103355','NAD_1983_HARN_WISCRS_Sauk_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103355',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103355_USAGE','projected_crs','ESRI','103355','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103356','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.90009913138888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.11666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000573461,'EPSG','9201','EPSG','8806','False easting',216713.2336,'EPSG','9001','EPSG','8807','False northing',120734.1631,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103356_USAGE','conversion','ESRI','103356','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103356','NAD_1983_HARN_WISCRS_Sawyer_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103356',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103356_USAGE','projected_crs','ESRI','103356','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103357','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.60555555555555,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000032144,'EPSG','9201','EPSG','8806','False easting',262433.3253,'EPSG','9001','EPSG','8807','False northing',0.0096,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103357_USAGE','conversion','ESRI','103357','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103357','NAD_1983_HARN_WISCRS_Shawano_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103357',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103357_USAGE','projected_crs','ESRI','103357','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103358','NAD_1983_HARN_WISCRS_Sheboygan_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103330',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103358_USAGE','projected_crs','ESRI','103358','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103359','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000381803,'EPSG','9201','EPSG','8806','False easting',165506.7302,'EPSG','9001','EPSG','8807','False northing',0.0103,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103359_USAGE','conversion','ESRI','103359','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103359','NAD_1983_HARN_WISCRS_St_Croix_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103359',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103359_USAGE','projected_crs','ESRI','103359','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103360','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.17782208583333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.48333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000597566,'EPSG','9201','EPSG','8806','False easting',187147.5744,'EPSG','9001','EPSG','8807','False northing',107746.7522,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103360_USAGE','conversion','ESRI','103360','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103360','NAD_1983_HARN_WISCRS_Taylor_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103360',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103360_USAGE','projected_crs','ESRI','103360','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103361','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.16111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.36666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000361538,'EPSG','9201','EPSG','8806','False easting',256946.9138,'EPSG','9001','EPSG','8807','False northing',0.0041,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103361_USAGE','conversion','ESRI','103361','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103361','NAD_1983_HARN_WISCRS_Trempealeau_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103361',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103361_USAGE','projected_crs','ESRI','103361','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103362','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.57503293972223,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.78333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000408158,'EPSG','9201','EPSG','8806','False easting',222504.4451,'EPSG','9001','EPSG','8807','False northing',47532.0602,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103362_USAGE','conversion','ESRI','103362','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103362','NAD_1983_HARN_WISCRS_Vernon_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103362',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103362_USAGE','projected_crs','ESRI','103362','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103363','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.07784409055556,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.48888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000730142,'EPSG','9201','EPSG','8806','False easting',134417.0689,'EPSG','9001','EPSG','8807','False northing',50337.1092,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103363_USAGE','conversion','ESRI','103363','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103363','NAD_1983_HARN_WISCRS_Vilas_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103363',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103363_USAGE','projected_crs','ESRI','103363','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103364','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.66946209694444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.54166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000367192,'EPSG','9201','EPSG','8806','False easting',232562.8651,'EPSG','9001','EPSG','8807','False northing',111088.2224,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103364_USAGE','conversion','ESRI','103364','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103364','NAD_1983_HARN_WISCRS_Walworth_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103364',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103364_USAGE','projected_crs','ESRI','103364','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103365','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.96121983333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.78333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000475376,'EPSG','9201','EPSG','8806','False easting',234086.8682,'EPSG','9001','EPSG','8807','False northing',188358.6058,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103365_USAGE','conversion','ESRI','103365','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103365','NAD_1983_HARN_WISCRS_Washburn_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103365',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103365_USAGE','projected_crs','ESRI','103365','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103366','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.91805555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.06388888888888,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00003738,'EPSG','9201','EPSG','8806','False easting',120091.4415,'EPSG','9001','EPSG','8807','False northing',0.003,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103366_USAGE','conversion','ESRI','103366','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103366','NAD_1983_HARN_WISCRS_Washington_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103366',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103366_USAGE','projected_crs','ESRI','103366','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103367','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.56944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.225,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000346179,'EPSG','9201','EPSG','8806','False easting',208788.418,'EPSG','9001','EPSG','8807','False northing',0.0034,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103367_USAGE','conversion','ESRI','103367','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103367','NAD_1983_HARN_WISCRS_Waukesha_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103367',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103367_USAGE','projected_crs','ESRI','103367','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103368','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.42027777777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.81666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000333645,'EPSG','9201','EPSG','8806','False easting',185013.9709,'EPSG','9001','EPSG','8807','False northing',0.007,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103368_USAGE','conversion','ESRI','103368','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103368','NAD_1983_HARN_WISCRS_Waupaca_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103368',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103368_USAGE','projected_crs','ESRI','103368','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103369','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.11394404583334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.24166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000392096,'EPSG','9201','EPSG','8806','False easting',120091.4402,'EPSG','9001','EPSG','8807','False northing',45069.7587,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103369_USAGE','conversion','ESRI','103369','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103369','NAD_1983_HARN_WISCRS_Waushara_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103369',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103369_USAGE','projected_crs','ESRI','103369','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103370','NAD_1983_HARN_WISCRS_Winnebago_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103307',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103370_USAGE','projected_crs','ESRI','103370','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103371','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.36259546944444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000421209,'EPSG','9201','EPSG','8806','False easting',208483.6173,'EPSG','9001','EPSG','8807','False northing',134589.754,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103371_USAGE','conversion','ESRI','103371','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103371','NAD_1983_HARN_WISCRS_Wood_County_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103371',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103371_USAGE','projected_crs','ESRI','103371','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103372','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-67.875,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103372_USAGE','conversion','ESRI','103372','EPSG','2960','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103372','NAD_1983_CORS96_Maine_2000_East_Zone',NULL,'EPSG','4400','EPSG','6783','ESRI','103372',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103372_USAGE','projected_crs','ESRI','103372','EPSG','2960','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103373','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-69.125,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103373_USAGE','conversion','ESRI','103373','EPSG','2959','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103373','NAD_1983_CORS96_Maine_2000_Central_Zone',NULL,'EPSG','4400','EPSG','6783','ESRI','103373',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103373_USAGE','projected_crs','ESRI','103373','EPSG','2959','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103374','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-70.375,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103374_USAGE','conversion','ESRI','103374','EPSG','2958','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103374','NAD_1983_CORS96_Maine_2000_West_Zone',NULL,'EPSG','4400','EPSG','6783','ESRI','103374',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103374_USAGE','projected_crs','ESRI','103374','EPSG','2958','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103375','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.45,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103375_USAGE','conversion','ESRI','103375','EPSG','1389','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103375','NAD_1983_CORS96_StatePlane_Maryland_FIPS_1900',NULL,'EPSG','4400','EPSG','6783','ESRI','103375',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103375_USAGE','projected_crs','ESRI','103375','EPSG','1389','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103376','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.45,'EPSG','9102','EPSG','8826','Easting at false origin',1312333.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103376_USAGE','conversion','ESRI','103376','EPSG','1389','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103376','NAD_1983_CORS96_StatePlane_Maryland_FIPS_1900_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103376',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103376_USAGE','projected_crs','ESRI','103376','EPSG','1389','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103377','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-71.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',750000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103377_USAGE','conversion','ESRI','103377','EPSG','2209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103377','NAD_1983_CORS96_StatePlane_Massachusetts_Mainland_FIPS_2001',NULL,'EPSG','4400','EPSG','6783','ESRI','103377',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103377_USAGE','projected_crs','ESRI','103377','EPSG','2209','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103378','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-70.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.28333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103378_USAGE','conversion','ESRI','103378','EPSG','2208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103378','NAD_1983_CORS96_StatePlane_Massachusetts_Island_FIPS_2002',NULL,'EPSG','4400','EPSG','6783','ESRI','103378',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103378_USAGE','projected_crs','ESRI','103378','EPSG','2208','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103379','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-71.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',656166.6666666665,'EPSG','9003','EPSG','8827','Northing at false origin',2460625.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103379_USAGE','conversion','ESRI','103379','EPSG','2209','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103379','NAD_1983_CORS96_StatePlane_Massachusetts_Mnld_FIPS_2001_FtUS',NULL,'EPSG','4497','EPSG','6783','ESRI','103379',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103379_USAGE','projected_crs','ESRI','103379','EPSG','2209','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103380','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-70.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.28333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103380_USAGE','conversion','ESRI','103380','EPSG','2208','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103380','NAD_1983_CORS96_StatePlane_Massachusetts_Isl_FIPS_2002_FtUS',NULL,'EPSG','4497','EPSG','6783','ESRI','103380',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103380_USAGE','projected_crs','ESRI','103380','EPSG','2208','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103381','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.78333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',8000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103381_USAGE','conversion','ESRI','103381','EPSG','1723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103381','NAD_1983_CORS96_StatePlane_Michigan_North_FIPS_2111',NULL,'EPSG','4400','EPSG','6783','ESRI','103381',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103381_USAGE','projected_crs','ESRI','103381','EPSG','1723','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103382','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.31666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',6000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103382_USAGE','conversion','ESRI','103382','EPSG','1724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103382','NAD_1983_CORS96_StatePlane_Michigan_Central_FIPS_2112',NULL,'EPSG','4400','EPSG','6783','ESRI','103382',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103382_USAGE','projected_crs','ESRI','103382','EPSG','1724','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103383','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.1,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',4000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103383_USAGE','conversion','ESRI','103383','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103383','NAD_1983_CORS96_StatePlane_Michigan_South_FIPS_2113',NULL,'EPSG','4400','EPSG','6783','ESRI','103383',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103383_USAGE','projected_crs','ESRI','103383','EPSG','1725','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103384','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.78333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-87.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',26246719.16010498,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103384_USAGE','conversion','ESRI','103384','EPSG','1723','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103384','NAD_1983_CORS96_StatePlane_Michigan_North_FIPS_2111_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103384',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103384_USAGE','projected_crs','ESRI','103384','EPSG','1723','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103385','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.31666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',19685039.37007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103385_USAGE','conversion','ESRI','103385','EPSG','1724','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103385','NAD_1983_CORS96_StatePlane_Michigan_Central_FIPS_2112_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103385',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103385_USAGE','projected_crs','ESRI','103385','EPSG','1724','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103386','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-84.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.1,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',13123359.58005249,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103386_USAGE','conversion','ESRI','103386','EPSG','1725','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103386','NAD_1983_CORS96_StatePlane_Michigan_South_FIPS_2113_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103386',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103386_USAGE','projected_crs','ESRI','103386','EPSG','1725','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103387','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.1,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.63333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103387_USAGE','conversion','ESRI','103387','EPSG','2214','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103387','NAD_1983_CORS96_StatePlane_Minnesota_North_FIPS_2201',NULL,'EPSG','4400','EPSG','6783','ESRI','103387',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103387_USAGE','projected_crs','ESRI','103387','EPSG','2214','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103388','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.05,'EPSG','9102','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103388_USAGE','conversion','ESRI','103388','EPSG','2213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103388','NAD_1983_CORS96_StatePlane_Minnesota_Central_FIPS_2202',NULL,'EPSG','4400','EPSG','6783','ESRI','103388',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103388_USAGE','projected_crs','ESRI','103388','EPSG','2213','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103389','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.21666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',800000.0,'EPSG','9001','EPSG','8827','Northing at false origin',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103389_USAGE','conversion','ESRI','103389','EPSG','2215','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103389','NAD_1983_CORS96_StatePlane_Minnesota_South_FIPS_2203',NULL,'EPSG','4400','EPSG','6783','ESRI','103389',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103389_USAGE','projected_crs','ESRI','103389','EPSG','2215','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103390','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.1,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.63333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2624666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103390_USAGE','conversion','ESRI','103390','EPSG','2214','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103390','NAD_1983_CORS96_StatePlane_Minnesota_North_FIPS_2201_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103390',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103390_USAGE','projected_crs','ESRI','103390','EPSG','2214','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103391','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.61666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.05,'EPSG','9102','EPSG','8826','Easting at false origin',2624666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103391_USAGE','conversion','ESRI','103391','EPSG','2213','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103391','NAD_1983_CORS96_StatePlane_Minnesota_Central_FIPS_2202_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103391',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103391_USAGE','projected_crs','ESRI','103391','EPSG','2213','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103392','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.21666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',2624666.666666666,'EPSG','9003','EPSG','8827','Northing at false origin',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103392_USAGE','conversion','ESRI','103392','EPSG','2215','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103392','NAD_1983_CORS96_StatePlane_Minnesota_South_FIPS_2203_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103392',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103392_USAGE','projected_crs','ESRI','103392','EPSG','2215','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103393','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103393_USAGE','conversion','ESRI','103393','EPSG','2216','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103393','NAD_1983_CORS96_StatePlane_Mississippi_East_FIPS_2301',NULL,'EPSG','4400','EPSG','6783','ESRI','103393',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103393_USAGE','projected_crs','ESRI','103393','EPSG','2216','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103394','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',700000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103394_USAGE','conversion','ESRI','103394','EPSG','2217','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103394','NAD_1983_CORS96_StatePlane_Mississippi_West_FIPS_2302',NULL,'EPSG','4400','EPSG','6783','ESRI','103394',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103394_USAGE','projected_crs','ESRI','103394','EPSG','2217','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103395','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103395_USAGE','conversion','ESRI','103395','EPSG','2216','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103395','NAD_1983_CORS96_StatePlane_Mississippi_East_FIPS_2301_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103395',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103395_USAGE','projected_crs','ESRI','103395','EPSG','2216','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103396','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',29.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.33333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99995,'EPSG','9201','EPSG','8806','False easting',2296583.333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103396_USAGE','conversion','ESRI','103396','EPSG','2217','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103396','NAD_1983_CORS96_StatePlane_Mississippi_West_FIPS_2302_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103396',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103396_USAGE','projected_crs','ESRI','103396','EPSG','2217','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103397','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103397_USAGE','conversion','ESRI','103397','EPSG','2219','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103397','NAD_1983_CORS96_StatePlane_Missouri_East_FIPS_2401',NULL,'EPSG','4400','EPSG','6783','ESRI','103397',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103397_USAGE','projected_crs','ESRI','103397','EPSG','2219','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103398','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',35.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999333333333333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103398_USAGE','conversion','ESRI','103398','EPSG','2218','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103398','NAD_1983_CORS96_StatePlane_Missouri_Central_FIPS_2402',NULL,'EPSG','4400','EPSG','6783','ESRI','103398',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103398_USAGE','projected_crs','ESRI','103398','EPSG','2218','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103399','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.16666666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-94.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999411764705882,'EPSG','9201','EPSG','8806','False easting',850000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103399_USAGE','conversion','ESRI','103399','EPSG','2220','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103399','NAD_1983_CORS96_StatePlane_Missouri_West_FIPS_2403',NULL,'EPSG','4400','EPSG','6783','ESRI','103399',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103399_USAGE','projected_crs','ESRI','103399','EPSG','2220','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103400','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.36666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000365285,'EPSG','9201','EPSG','8806','False easting',482999.999,'EPSG','9003','EPSG','8807','False northing',0.012,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103400_USAGE','conversion','ESRI','103400','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103400','NAD_1983_HARN_WISCRS_Adams_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103400',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103400_USAGE','projected_crs','ESRI','103400','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103401','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.70611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.62222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000495683,'EPSG','9201','EPSG','8806','False easting',567000.001,'EPSG','9003','EPSG','8807','False northing',0.006,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103401_USAGE','conversion','ESRI','103401','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103401','NAD_1983_HARN_WISCRS_Ashland_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103401',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103401_USAGE','projected_crs','ESRI','103401','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103402','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.13333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.85,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000486665,'EPSG','9201','EPSG','8806','False easting',305609.625,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103402_USAGE','conversion','ESRI','103402','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103402','NAD_1983_HARN_WISCRS_Barron_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103402',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103402_USAGE','projected_crs','ESRI','103402','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103403','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.66964837722222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.15277777777779,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000331195,'EPSG','9201','EPSG','8806','False easting',750000.001,'EPSG','9003','EPSG','8807','False northing',487372.659,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103403_USAGE','conversion','ESRI','103403','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103403','NAD_1983_HARN_WISCRS_Bayfield_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103403',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103403_USAGE','projected_crs','ESRI','103403','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103404','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',103674.333,'EPSG','9003','EPSG','8807','False northing',15091.833,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103404_USAGE','conversion','ESRI','103404','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103404','NAD_1983_HARN_WISCRS_Brown_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103404',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103404_USAGE','projected_crs','ESRI','103404','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103405','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.48138888888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.79722222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000382778,'EPSG','9201','EPSG','8806','False easting',574999.999,'EPSG','9003','EPSG','8807','False northing',0.016,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103405_USAGE','conversion','ESRI','103405','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103405','NAD_1983_HARN_WISCRS_Buffalo_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103405',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103405_USAGE','projected_crs','ESRI','103405','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103406','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.89871486583333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.45777777777778,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000383841,'EPSG','9201','EPSG','8806','False easting',209999.999,'EPSG','9003','EPSG','8807','False northing',195032.104,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103406_USAGE','conversion','ESRI','103406','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103406','NAD_1983_HARN_WISCRS_Burnett_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103406',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103406_USAGE','projected_crs','ESRI','103406','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103407','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.71944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000286569,'EPSG','9201','EPSG','8806','False easting',802999.999,'EPSG','9003','EPSG','8807','False northing',0.016,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103407_USAGE','conversion','ESRI','103407','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103407','NAD_1983_HARN_WISCRS_Calumet_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103407',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103407_USAGE','projected_crs','ESRI','103407','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103408','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.97785689861112,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.29444444444444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000391127,'EPSG','9201','EPSG','8806','False easting',197000.0,'EPSG','9003','EPSG','8807','False northing',144656.648,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103408_USAGE','conversion','ESRI','103408','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103408','NAD_1983_HARN_WISCRS_Chippewa_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103408',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103408_USAGE','projected_crs','ESRI','103408','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103409','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.6,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.70833333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000463003,'EPSG','9201','EPSG','8806','False easting',655999.997,'EPSG','9003','EPSG','8807','False northing',0.028,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103409_USAGE','conversion','ESRI','103409','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103409','NAD_1983_HARN_WISCRS_Clark_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103409',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103409_USAGE','projected_crs','ESRI','103409','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103410','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.46254664583333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.39444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00003498,'EPSG','9201','EPSG','8806','False easting',554999.999,'EPSG','9003','EPSG','8807','False northing',366041.307,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103410_USAGE','conversion','ESRI','103410','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103410','NAD_1983_HARN_WISCRS_Columbia_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103410',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103410_USAGE','projected_crs','ESRI','103410','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103411','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.200055605,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.9388888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000349151,'EPSG','9201','EPSG','8806','False easting',373000.0,'EPSG','9003','EPSG','8807','False northing',176190.987,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103411_USAGE','conversion','ESRI','103411','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103411','NAD_1983_HARN_WISCRS_Crawford_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103411',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103411_USAGE','projected_crs','ESRI','103411','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103412','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.0695160375,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.42222222222223,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000384786,'EPSG','9201','EPSG','8806','False easting',811000.0,'EPSG','9003','EPSG','8807','False northing',480943.886,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103412_USAGE','conversion','ESRI','103412','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103412','NAD_1983_HARN_WISCRS_Dane_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103412',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103412_USAGE','projected_crs','ESRI','103412','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103413','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.47222222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.775,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000346418,'EPSG','9201','EPSG','8806','False easting',863999.999,'EPSG','9003','EPSG','8807','False northing',0.025,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103413_USAGE','conversion','ESRI','103413','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103413','NAD_1983_HARN_WISCRS_Dodge_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103413',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103413_USAGE','projected_crs','ESRI','103413','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103414','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.4,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.27222222222223,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000187521,'EPSG','9201','EPSG','8806','False easting',521000.0,'EPSG','9003','EPSG','8807','False northing',0.008,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103414_USAGE','conversion','ESRI','103414','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103414','NAD_1983_HARN_WISCRS_Door_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103414',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103414_USAGE','projected_crs','ESRI','103414','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103415','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.88333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.91666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000385418,'EPSG','9201','EPSG','8806','False easting',194000.0,'EPSG','9003','EPSG','8807','False northing',0.013,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103415_USAGE','conversion','ESRI','103415','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103415','NAD_1983_HARN_WISCRS_Douglas_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103415',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103415_USAGE','projected_crs','ESRI','103415','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103416','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.40833333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000410324,'EPSG','9201','EPSG','8806','False easting',170000.001,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103416_USAGE','conversion','ESRI','103416','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103416','NAD_1983_HARN_WISCRS_Dunn_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103416',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103416_USAGE','projected_crs','ESRI','103416','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103417','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.87228112638889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.28888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000035079,'EPSG','9201','EPSG','8806','False easting',394000.0,'EPSG','9003','EPSG','8807','False northing',300812.797,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103417_USAGE','conversion','ESRI','103417','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103417','NAD_1983_HARN_WISCRS_EauClaire_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103417',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103417_USAGE','projected_crs','ESRI','103417','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103418','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.14166666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000552095,'EPSG','9201','EPSG','8806','False easting',438000.004,'EPSG','9003','EPSG','8807','False northing',0.021,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103418_USAGE','conversion','ESRI','103418','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103418','NAD_1983_HARN_WISCRS_Florence_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103418',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103418_USAGE','projected_crs','ESRI','103418','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103419','NAD_1983_HARN_WISCRS_Fond_du_Lac_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103407',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103419_USAGE','projected_crs','ESRI','103419','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103420','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.00555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000673004,'EPSG','9201','EPSG','8806','False easting',905000.005,'EPSG','9003','EPSG','8807','False northing',0.052,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103420_USAGE','conversion','ESRI','103420','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103420','NAD_1983_HARN_WISCRS_Forest_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103420',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103420_USAGE','projected_crs','ESRI','103420','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103421','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.41111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.8,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000349452,'EPSG','9201','EPSG','8806','False easting',794999.998,'EPSG','9003','EPSG','8807','False northing',0.033,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103421_USAGE','conversion','ESRI','103421','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103421','NAD_1983_HARN_WISCRS_Grant_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103421',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103421_USAGE','projected_crs','ESRI','103421','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103422','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.63756227694444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.83888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000390487,'EPSG','9201','EPSG','8806','False easting',558000.0,'EPSG','9003','EPSG','8807','False northing',150361.559,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103422_USAGE','conversion','ESRI','103422','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103422','NAD_1983_HARN_WISCRS_Green_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103422',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103422_USAGE','projected_crs','ESRI','103422','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103423','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.80700011777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.24166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000344057,'EPSG','9201','EPSG','8806','False easting',495000.0,'EPSG','9003','EPSG','8807','False northing',259746.132,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103423_USAGE','conversion','ESRI','103423','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103423','NAD_1983_HARN_WISCRS_GreenLake_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103423',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103423_USAGE','projected_crs','ESRI','103423','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103424','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.53888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000394961,'EPSG','9201','EPSG','8806','False easting',371000.0,'EPSG','9003','EPSG','8807','False northing',0.015,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103424_USAGE','conversion','ESRI','103424','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103424','NAD_1983_HARN_WISCRS_Iowa_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103424',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103424_USAGE','projected_crs','ESRI','103424','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103425','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.25555555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000677153,'EPSG','9201','EPSG','8806','False easting',725000.0,'EPSG','9003','EPSG','8807','False northing',0.028,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103425_USAGE','conversion','ESRI','103425','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103425','NAD_1983_HARN_WISCRS_Iron_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103425',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103425_USAGE','projected_crs','ESRI','103425','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103426','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.25333512777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.84429651944444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000353,'EPSG','9201','EPSG','8806','False easting',88582.5,'EPSG','9003','EPSG','8807','False northing',82020.833,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103426_USAGE','conversion','ESRI','103426','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103426','NAD_1983_HARN_WISCRS_Jackson_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103426',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103426_USAGE','projected_crs','ESRI','103426','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103427','NAD_1983_HARN_WISCRS_Jefferson_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103413',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103427_USAGE','projected_crs','ESRI','103427','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103428','NAD_1983_HARN_WISCRS_Juneau_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103400',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103428_USAGE','projected_crs','ESRI','103428','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103429','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.21666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000260649,'EPSG','9201','EPSG','8806','False easting',610000.003,'EPSG','9003','EPSG','8807','False northing',0.003,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103429_USAGE','conversion','ESRI','103429','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103429','NAD_1983_HARN_WISCRS_Kenosha_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103429',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103429_USAGE','projected_crs','ESRI','103429','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103430','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.26666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.55,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000233704,'EPSG','9201','EPSG','8806','False easting',262000.006,'EPSG','9003','EPSG','8807','False northing',0.004,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103430_USAGE','conversion','ESRI','103430','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103430','NAD_1983_HARN_WISCRS_Kewaunee_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103430',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103430_USAGE','projected_crs','ESRI','103430','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103431','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.45111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.31666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000319985,'EPSG','9201','EPSG','8806','False easting',427999.996,'EPSG','9003','EPSG','8807','False northing',0.011,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103431_USAGE','conversion','ESRI','103431','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103431','NAD_1983_HARN_WISCRS_LaCrosse_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103431',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103431_USAGE','projected_crs','ESRI','103431','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103432','NAD_1983_HARN_WISCRS_Lafayette_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103422',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103432_USAGE','projected_crs','ESRI','103432','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103433','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.15423710527778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.03333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000627024,'EPSG','9201','EPSG','8806','False easting',651000.0,'EPSG','9003','EPSG','8807','False northing',345405.421,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103433_USAGE','conversion','ESRI','103433','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103433','NAD_1983_HARN_WISCRS_Langlade_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103433',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103433_USAGE','projected_crs','ESRI','103433','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103434','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.84444444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.73333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000599003,'EPSG','9201','EPSG','8806','False easting',381000.0,'EPSG','9003','EPSG','8807','False northing',0.019,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103434_USAGE','conversion','ESRI','103434','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103434','NAD_1983_HARN_WISCRS_Lincoln_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103434',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103434_USAGE','projected_crs','ESRI','103434','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103435','NAD_1983_HARN_WISCRS_Manitowoc_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103430',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103435_USAGE','projected_crs','ESRI','103435','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103436','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.90090442361111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.77,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000053289,'EPSG','9201','EPSG','8806','False easting',245000.0,'EPSG','9003','EPSG','8807','False northing',180607.47,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103436_USAGE','conversion','ESRI','103436','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103436','NAD_1983_HARN_WISCRS_Marathon_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103436',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103436_USAGE','projected_crs','ESRI','103436','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103437','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.69166666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.71111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000234982,'EPSG','9201','EPSG','8806','False easting',783000.007,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103437_USAGE','conversion','ESRI','103437','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103437','NAD_1983_HARN_WISCRS_Marinette_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103437',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103437_USAGE','projected_crs','ESRI','103437','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103438','NAD_1983_HARN_WISCRS_Marquette_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103423',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103438_USAGE','projected_crs','ESRI','103438','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103439','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.71666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000362499,'EPSG','9201','EPSG','8806','False easting',346000.004,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103439_USAGE','conversion','ESRI','103439','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103439','NAD_1983_HARN_WISCRS_Menominee_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103439',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103439_USAGE','projected_crs','ESRI','103439','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103440','NAD_1983_HARN_WISCRS_Milwaukee_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103429',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103440_USAGE','projected_crs','ESRI','103440','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103441','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.00007392861111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.64166666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000434122,'EPSG','9201','EPSG','8806','False easting',671000.0,'EPSG','9003','EPSG','8807','False northing',400012.278,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103441_USAGE','conversion','ESRI','103441','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103441','NAD_1983_HARN_WISCRS_Monroe_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103441',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103441_USAGE','projected_crs','ESRI','103441','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103442','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.39722222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.90833333333335,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000236869,'EPSG','9201','EPSG','8806','False easting',600000.006,'EPSG','9003','EPSG','8807','False northing',0.011,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103442_USAGE','conversion','ESRI','103442','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103442','NAD_1983_HARN_WISCRS_Oconto_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103442',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103442_USAGE','projected_crs','ESRI','103442','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103443','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.70422377027778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.54444444444444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000686968,'EPSG','9201','EPSG','8806','False easting',230000.0,'EPSG','9003','EPSG','8807','False northing',188936.744,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103443_USAGE','conversion','ESRI','103443','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103443','NAD_1983_HARN_WISCRS_Oneida_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103443',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103443_USAGE','projected_crs','ESRI','103443','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103444','NAD_1983_HARN_WISCRS_Outagamie_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103407',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103444_USAGE','projected_crs','ESRI','103444','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103445','NAD_1983_HARN_WISCRS_Ozaukee_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103429',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103445_USAGE','projected_crs','ESRI','103445','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103446','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.63614887194444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.22777777777777,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000362977,'EPSG','9201','EPSG','8806','False easting',550000.0,'EPSG','9003','EPSG','8807','False northing',282260.222,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103446_USAGE','conversion','ESRI','103446','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103446','NAD_1983_HARN_WISCRS_Pepin_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103446',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103446_USAGE','projected_crs','ESRI','103446','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103447','NAD_1983_HARN_WISCRS_Pierce_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103446',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103447_USAGE','projected_crs','ESRI','103447','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103448','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.66111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000433849,'EPSG','9201','EPSG','8806','False easting',464999.996,'EPSG','9003','EPSG','8807','False northing',0.019,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103448_USAGE','conversion','ESRI','103448','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103448','NAD_1983_HARN_WISCRS_Polk_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103448',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103448_USAGE','projected_crs','ESRI','103448','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103449','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.41682397527777,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000039936,'EPSG','9201','EPSG','8806','False easting',185000.0,'EPSG','9003','EPSG','8807','False northing',164114.46,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103449_USAGE','conversion','ESRI','103449','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103449','NAD_1983_HARN_WISCRS_Portage_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103449',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103449_USAGE','projected_crs','ESRI','103449','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103450','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.55555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.48888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000649554,'EPSG','9201','EPSG','8806','False easting',747999.995,'EPSG','9003','EPSG','8807','False northing',0.036,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103450_USAGE','conversion','ESRI','103450','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103450','NAD_1983_HARN_WISCRS_Price_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103450',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103450_USAGE','projected_crs','ESRI','103450','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103451','NAD_1983_HARN_WISCRS_Racine_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103429',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103451_USAGE','projected_crs','ESRI','103451','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103452','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.3223129275,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.43055555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000375653,'EPSG','9201','EPSG','8806','False easting',664000.0,'EPSG','9003','EPSG','8807','False northing',440469.675,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103452_USAGE','conversion','ESRI','103452','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103452','NAD_1983_HARN_WISCRS_Richland_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103452',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103452_USAGE','projected_crs','ESRI','103452','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103453','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.94444444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.07222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000337311,'EPSG','9201','EPSG','8806','False easting',480000.0,'EPSG','9003','EPSG','8807','False northing',0.022,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103453_USAGE','conversion','ESRI','103453','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103453','NAD_1983_HARN_WISCRS_Rock_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103453',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103453_USAGE','projected_crs','ESRI','103453','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103454','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.91944444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.06666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000495976,'EPSG','9201','EPSG','8806','False easting',822000.001,'EPSG','9003','EPSG','8807','False northing',0.077,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103454_USAGE','conversion','ESRI','103454','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103454','NAD_1983_HARN_WISCRS_Rusk_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103454',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103454_USAGE','projected_crs','ESRI','103454','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103455','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.81944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.9,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000373868,'EPSG','9201','EPSG','8806','False easting',609000.001,'EPSG','9003','EPSG','8807','False northing',0.017,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103455_USAGE','conversion','ESRI','103455','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103455','NAD_1983_HARN_WISCRS_Sauk_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103455',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103455_USAGE','projected_crs','ESRI','103455','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103456','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.90009913138888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.11666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000573461,'EPSG','9201','EPSG','8806','False easting',711000.001,'EPSG','9003','EPSG','8807','False northing',396108.667,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103456_USAGE','conversion','ESRI','103456','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103456','NAD_1983_HARN_WISCRS_Sawyer_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103456',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103456_USAGE','projected_crs','ESRI','103456','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103457','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.60555555555555,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000032144,'EPSG','9201','EPSG','8806','False easting',861000.001,'EPSG','9003','EPSG','8807','False northing',0.031,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103457_USAGE','conversion','ESRI','103457','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103457','NAD_1983_HARN_WISCRS_Shawano_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103457',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103457_USAGE','projected_crs','ESRI','103457','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103458','NAD_1983_HARN_WISCRS_Sheboygan_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103430',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103458_USAGE','projected_crs','ESRI','103458','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103459','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000381803,'EPSG','9201','EPSG','8806','False easting',542999.997,'EPSG','9003','EPSG','8807','False northing',0.034,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103459_USAGE','conversion','ESRI','103459','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103459','NAD_1983_HARN_WISCRS_St_Croix_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103459',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103459_USAGE','projected_crs','ESRI','103459','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103460','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.17782208583333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.48333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000597566,'EPSG','9201','EPSG','8806','False easting',614000.0,'EPSG','9003','EPSG','8807','False northing',353499.136,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103460_USAGE','conversion','ESRI','103460','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103460','NAD_1983_HARN_WISCRS_Taylor_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103460',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103460_USAGE','projected_crs','ESRI','103460','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103461','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.16111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.36666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000361538,'EPSG','9201','EPSG','8806','False easting',843000.0,'EPSG','9003','EPSG','8807','False northing',0.013,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103461_USAGE','conversion','ESRI','103461','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103461','NAD_1983_HARN_WISCRS_Trempealeau_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103461',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103461_USAGE','projected_crs','ESRI','103461','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103462','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',43.57503293972223,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.78333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000408158,'EPSG','9201','EPSG','8806','False easting',730000.0,'EPSG','9003','EPSG','8807','False northing',155944.768,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103462_USAGE','conversion','ESRI','103462','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103462','NAD_1983_HARN_WISCRS_Vernon_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103462',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103462_USAGE','projected_crs','ESRI','103462','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103463','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.07784409055556,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.48888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000730142,'EPSG','9201','EPSG','8806','False easting',441000.0,'EPSG','9003','EPSG','8807','False northing',165147.666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103463_USAGE','conversion','ESRI','103463','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103463','NAD_1983_HARN_WISCRS_Vilas_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103463',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103463_USAGE','projected_crs','ESRI','103463','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103464','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',42.66946209694444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.54166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000367192,'EPSG','9201','EPSG','8806','False easting',763000.0,'EPSG','9003','EPSG','8807','False northing',364461.943,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103464_USAGE','conversion','ESRI','103464','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103464','NAD_1983_HARN_WISCRS_Walworth_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103464',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103464_USAGE','projected_crs','ESRI','103464','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103465','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',45.96121983333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.78333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000475376,'EPSG','9201','EPSG','8806','False easting',768000.0,'EPSG','9003','EPSG','8807','False northing',617973.193,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103465_USAGE','conversion','ESRI','103465','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103465','NAD_1983_HARN_WISCRS_Washburn_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103465',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103465_USAGE','projected_crs','ESRI','103465','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103466','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.91805555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.06388888888888,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00003738,'EPSG','9201','EPSG','8806','False easting',394000.004,'EPSG','9003','EPSG','8807','False northing',0.01,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103466_USAGE','conversion','ESRI','103466','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103466','NAD_1983_HARN_WISCRS_Washington_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103466',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103466_USAGE','projected_crs','ESRI','103466','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103467','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.56944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.225,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000346179,'EPSG','9201','EPSG','8806','False easting',685000.001,'EPSG','9003','EPSG','8807','False northing',0.011,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103467_USAGE','conversion','ESRI','103467','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103467','NAD_1983_HARN_WISCRS_Waukesha_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103467',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103467_USAGE','projected_crs','ESRI','103467','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103468','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.42027777777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.81666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000333645,'EPSG','9201','EPSG','8806','False easting',607000.003,'EPSG','9003','EPSG','8807','False northing',0.023,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103468_USAGE','conversion','ESRI','103468','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103468','NAD_1983_HARN_WISCRS_Waupaca_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103468',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103468_USAGE','projected_crs','ESRI','103468','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103469','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.11394404583334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.24166666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000392096,'EPSG','9201','EPSG','8806','False easting',394000.0,'EPSG','9003','EPSG','8807','False northing',147866.367,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103469_USAGE','conversion','ESRI','103469','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103469','NAD_1983_HARN_WISCRS_Waushara_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103469',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103469_USAGE','projected_crs','ESRI','103469','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103470','NAD_1983_HARN_WISCRS_Winnebago_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103407',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103470_USAGE','projected_crs','ESRI','103470','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103471','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',44.36259546944444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000421209,'EPSG','9201','EPSG','8806','False easting',684000.001,'EPSG','9003','EPSG','8807','False northing',441566.551,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103471_USAGE','conversion','ESRI','103471','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103471','NAD_1983_HARN_WISCRS_Wood_County_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103471',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103471_USAGE','projected_crs','ESRI','103471','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103472','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-109.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103472_USAGE','conversion','ESRI','103472','EPSG','1395','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103472','NAD_1983_CORS96_StatePlane_Montana_FIPS_2500',NULL,'EPSG','4400','EPSG','6783','ESRI','103472',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103472_USAGE','projected_crs','ESRI','103472','EPSG','1395','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103473','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-109.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',1968503.937007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103473_USAGE','conversion','ESRI','103473','EPSG','1395','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103473','NAD_1983_CORS96_StatePlane_Montana_FIPS_2500_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103473',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103473_USAGE','projected_crs','ESRI','103473','EPSG','1395','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103474','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.0,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103474_USAGE','conversion','ESRI','103474','EPSG','1396','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103474','NAD_1983_CORS96_StatePlane_Nebraska_FIPS_2600',NULL,'EPSG','4400','EPSG','6783','ESRI','103474',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103474_USAGE','projected_crs','ESRI','103474','EPSG','1396','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103475','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.0,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103475_USAGE','conversion','ESRI','103475','EPSG','1396','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103475','NAD_1983_CORS96_StatePlane_Nebraska_FIPS_2600_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103475',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103475_USAGE','projected_crs','ESRI','103475','EPSG','1396','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103476','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',8000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103476_USAGE','conversion','ESRI','103476','EPSG','2224','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103476','NAD_1983_CORS96_StatePlane_Nevada_East_FIPS_2701',NULL,'EPSG','4400','EPSG','6783','ESRI','103476',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103476_USAGE','projected_crs','ESRI','103476','EPSG','2224','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103477','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-116.6666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',6000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103477_USAGE','conversion','ESRI','103477','EPSG','2223','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103477','NAD_1983_CORS96_StatePlane_Nevada_Central_FIPS_2702',NULL,'EPSG','4400','EPSG','6783','ESRI','103477',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103477_USAGE','projected_crs','ESRI','103477','EPSG','2223','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103478','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103478_USAGE','conversion','ESRI','103478','EPSG','2225','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103478','NAD_1983_CORS96_StatePlane_Nevada_West_FIPS_2703',NULL,'EPSG','4400','EPSG','6783','ESRI','103478',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103478_USAGE','projected_crs','ESRI','103478','EPSG','2225','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103479','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-115.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',26246666.66666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103479_USAGE','conversion','ESRI','103479','EPSG','2224','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103479','NAD_1983_CORS96_StatePlane_Nevada_East_FIPS_2701_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103479',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103479_USAGE','projected_crs','ESRI','103479','EPSG','2224','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103480','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-116.6666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',19685000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103480_USAGE','conversion','ESRI','103480','EPSG','2223','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103480','NAD_1983_CORS96_StatePlane_Nevada_Central_FIPS_2702_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103480',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103480_USAGE','projected_crs','ESRI','103480','EPSG','2223','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103481','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',34.75,'EPSG','9102','EPSG','8802','Longitude of natural origin',-118.5833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',2624666.666666666,'EPSG','9003','EPSG','8807','False northing',13123333.33333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103481_USAGE','conversion','ESRI','103481','EPSG','2225','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103481','NAD_1983_CORS96_StatePlane_Nevada_West_FIPS_2703_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103481',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103481_USAGE','projected_crs','ESRI','103481','EPSG','2225','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103482','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103482_USAGE','conversion','ESRI','103482','EPSG','1398','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103482','NAD_1983_CORS96_StatePlane_New_Hampshire_FIPS_2800',NULL,'EPSG','4400','EPSG','6783','ESRI','103482',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103482_USAGE','projected_crs','ESRI','103482','EPSG','1398','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103483','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.66666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999666666666667,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103483_USAGE','conversion','ESRI','103483','EPSG','1398','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103483','NAD_1983_CORS96_StatePlane_New_Hampshire_FIPS_2800_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103483',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103483_USAGE','projected_crs','ESRI','103483','EPSG','1398','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103484','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',150000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103484_USAGE','conversion','ESRI','103484','EPSG','1399','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103484','NAD_1983_CORS96_StatePlane_New_Jersey_FIPS_2900',NULL,'EPSG','4400','EPSG','6783','ESRI','103484',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103484_USAGE','projected_crs','ESRI','103484','EPSG','1399','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103485','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',38.83333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-74.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',492125.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103485_USAGE','conversion','ESRI','103485','EPSG','1399','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103485','NAD_1983_CORS96_StatePlane_New_Jersey_FIPS_2900_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103485',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103485_USAGE','projected_crs','ESRI','103485','EPSG','1399','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103486','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-104.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999090909090909,'EPSG','9201','EPSG','8806','False easting',165000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103486_USAGE','conversion','ESRI','103486','EPSG','2228','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103486','NAD_1983_CORS96_StatePlane_New_Mexico_East_FIPS_3001',NULL,'EPSG','4400','EPSG','6783','ESRI','103486',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103486_USAGE','projected_crs','ESRI','103486','EPSG','2228','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103487','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-106.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103487_USAGE','conversion','ESRI','103487','EPSG','2231','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103487','NAD_1983_CORS96_StatePlane_New_Mexico_Central_FIPS_3002',NULL,'EPSG','4400','EPSG','6783','ESRI','103487',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103487_USAGE','projected_crs','ESRI','103487','EPSG','2231','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103488','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999166666666667,'EPSG','9201','EPSG','8806','False easting',830000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103488_USAGE','conversion','ESRI','103488','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103488','NAD_1983_CORS96_StatePlane_New_Mexico_West_FIPS_3003',NULL,'EPSG','4400','EPSG','6783','ESRI','103488',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103488_USAGE','projected_crs','ESRI','103488','EPSG','2232','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103489','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-104.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999090909090909,'EPSG','9201','EPSG','8806','False easting',541337.5,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103489_USAGE','conversion','ESRI','103489','EPSG','2228','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103489','NAD_1983_CORS96_StatePlane_New_Mexico_East_FIPS_3001_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103489',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103489_USAGE','projected_crs','ESRI','103489','EPSG','2228','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103490','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-106.25,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',1640416.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103490_USAGE','conversion','ESRI','103490','EPSG','2231','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103490','NAD_1983_CORS96_StatePlane_New_Mexico_Central_FIPS_3002_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103490',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103490_USAGE','projected_crs','ESRI','103490','EPSG','2231','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103491','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.8333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999166666666667,'EPSG','9201','EPSG','8806','False easting',2723091.666666666,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103491_USAGE','conversion','ESRI','103491','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103491','NAD_1983_CORS96_StatePlane_New_Mexico_West_FIPS_3003_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103491',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103491_USAGE','projected_crs','ESRI','103491','EPSG','2232','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103492','NAD_1983_CORS96_StatePlane_New_York_East_FIPS_3101',NULL,'EPSG','4400','EPSG','6783','ESRI','103484',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103492_USAGE','projected_crs','ESRI','103492','EPSG','2234','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103493','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103493_USAGE','conversion','ESRI','103493','EPSG','2233','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103493','NAD_1983_CORS96_StatePlane_New_York_Central_FIPS_3102',NULL,'EPSG','4400','EPSG','6783','ESRI','103493',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103493_USAGE','projected_crs','ESRI','103493','EPSG','2233','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103494','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-78.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',350000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103494_USAGE','conversion','ESRI','103494','EPSG','2236','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103494','NAD_1983_CORS96_StatePlane_New_York_West_FIPS_3103',NULL,'EPSG','4400','EPSG','6783','ESRI','103494',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103494_USAGE','projected_crs','ESRI','103494','EPSG','2236','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103495','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103495_USAGE','conversion','ESRI','103495','EPSG','2235','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103495','NAD_1983_CORS96_StatePlane_New_York_Long_Island_FIPS_3104',NULL,'EPSG','4400','EPSG','6783','ESRI','103495',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103495_USAGE','projected_crs','ESRI','103495','EPSG','2235','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103496','NAD_1983_CORS96_StatePlane_New_York_East_FIPS_3101_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103485',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103496_USAGE','projected_crs','ESRI','103496','EPSG','2234','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103497','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-76.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',820208.3333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103497_USAGE','conversion','ESRI','103497','EPSG','2233','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103497','NAD_1983_CORS96_StatePlane_New_York_Central_FIPS_3102_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103497',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103497_USAGE','projected_crs','ESRI','103497','EPSG','2233','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103498','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-78.58333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1148291.666666667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103498_USAGE','conversion','ESRI','103498','EPSG','2236','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103498','NAD_1983_CORS96_StatePlane_New_York_West_FIPS_3103_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103498',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103498_USAGE','projected_crs','ESRI','103498','EPSG','2236','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103499','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-74.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',984250.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103499_USAGE','conversion','ESRI','103499','EPSG','2235','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103499','NAD_1983_CORS96_StatePlane_New_York_Long_Isl_FIPS_3104_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103499',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103499_USAGE','projected_crs','ESRI','103499','EPSG','2235','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103500','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',609601.2192024384,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103500_USAGE','conversion','ESRI','103500','EPSG','1402','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103500','NAD_1983_CORS96_StatePlane_North_Carolina_FIPS_3200',NULL,'EPSG','4400','EPSG','6783','ESRI','103500',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103500_USAGE','projected_crs','ESRI','103500','EPSG','1402','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103501','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103501_USAGE','conversion','ESRI','103501','EPSG','1402','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103501','NAD_1983_CORS96_StatePlane_North_Carolina_FIPS_3200_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103501',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103501_USAGE','projected_crs','ESRI','103501','EPSG','1402','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103502','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103502_USAGE','conversion','ESRI','103502','EPSG','2237','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103502','NAD_1983_CORS96_StatePlane_North_Dakota_North_FIPS_3301',NULL,'EPSG','4400','EPSG','6783','ESRI','103502',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103502_USAGE','projected_crs','ESRI','103502','EPSG','2237','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103503','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103503_USAGE','conversion','ESRI','103503','EPSG','2238','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103503','NAD_1983_CORS96_StatePlane_North_Dakota_South_FIPS_3302',NULL,'EPSG','4400','EPSG','6783','ESRI','103503',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103503_USAGE','projected_crs','ESRI','103503','EPSG','2238','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103504','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968503.937007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103504_USAGE','conversion','ESRI','103504','EPSG','2237','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103504','NAD_1983_CORS96_StatePlane_North_Dakota_North_FIPS_3301_FtI',NULL,'EPSG','4495','EPSG','6783','ESRI','103504',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103504_USAGE','projected_crs','ESRI','103504','EPSG','2237','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103505','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968503.937007874,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103505_USAGE','conversion','ESRI','103505','EPSG','2238','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103505','NAD_1983_CORS96_StatePlane_North_Dakota_South_FIPS_3302_FtI',NULL,'EPSG','4495','EPSG','6783','ESRI','103505',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103505_USAGE','projected_crs','ESRI','103505','EPSG','2238','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103506','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.7,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103506_USAGE','conversion','ESRI','103506','EPSG','2239','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103506','NAD_1983_CORS96_StatePlane_Ohio_North_FIPS_3401',NULL,'EPSG','4400','EPSG','6783','ESRI','103506',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103506_USAGE','projected_crs','ESRI','103506','EPSG','2239','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103507','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103507_USAGE','conversion','ESRI','103507','EPSG','2240','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103507','NAD_1983_CORS96_StatePlane_Ohio_South_FIPS_3402',NULL,'EPSG','4400','EPSG','6783','ESRI','103507',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103507_USAGE','projected_crs','ESRI','103507','EPSG','2240','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103508','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.43333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.7,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103508_USAGE','conversion','ESRI','103508','EPSG','2239','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103508','NAD_1983_CORS96_StatePlane_Ohio_North_FIPS_3401_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103508',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103508_USAGE','projected_crs','ESRI','103508','EPSG','2239','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103509','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-82.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.03333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103509_USAGE','conversion','ESRI','103509','EPSG','2240','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103509','NAD_1983_CORS96_StatePlane_Ohio_South_FIPS_3402_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103509',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103509_USAGE','projected_crs','ESRI','103509','EPSG','2240','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103510','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103510_USAGE','conversion','ESRI','103510','EPSG','2241','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103510','NAD_1983_CORS96_StatePlane_Oklahoma_North_FIPS_3501',NULL,'EPSG','4400','EPSG','6783','ESRI','103510',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103510_USAGE','projected_crs','ESRI','103510','EPSG','2241','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103511','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103511_USAGE','conversion','ESRI','103511','EPSG','2242','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103511','NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502',NULL,'EPSG','4400','EPSG','6783','ESRI','103511',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103511_USAGE','projected_crs','ESRI','103511','EPSG','2242','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103512','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',35.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103512_USAGE','conversion','ESRI','103512','EPSG','2241','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103512','NAD_1983_CORS96_StatePlane_Oklahoma_North_FIPS_3501_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103512',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103512_USAGE','projected_crs','ESRI','103512','EPSG','2241','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103513','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',33.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',33.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',35.23333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103513_USAGE','conversion','ESRI','103513','EPSG','2242','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103513','NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103513',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103513_USAGE','projected_crs','ESRI','103513','EPSG','2242','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103514','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.95,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103514_USAGE','conversion','ESRI','103514','EPSG','2245','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103514','NAD_1983_CORS96_StatePlane_Pennsylvania_North_FIPS_3701',NULL,'EPSG','4400','EPSG','6783','ESRI','103514',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103514_USAGE','projected_crs','ESRI','103514','EPSG','2245','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103515','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.95,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103515_USAGE','conversion','ESRI','103515','EPSG','2245','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103515','NAD_1983_CORS96_StatePlane_Pennsylvania_North_FIPS_3701_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103515',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103515_USAGE','projected_crs','ESRI','103515','EPSG','2245','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103516','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103516_USAGE','conversion','ESRI','103516','EPSG','2246','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103516','NAD_1983_CORS96_StatePlane_Pennsylvania_South_FIPS_3702',NULL,'EPSG','4400','EPSG','6783','ESRI','103516',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103516_USAGE','projected_crs','ESRI','103516','EPSG','2246','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103517','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',39.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-77.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103517_USAGE','conversion','ESRI','103517','EPSG','2246','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103517','NAD_1983_CORS96_StatePlane_Pennsylvania_South_FIPS_3702_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103517',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103517_USAGE','projected_crs','ESRI','103517','EPSG','2246','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103518','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999375,'EPSG','9201','EPSG','8806','False easting',100000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103518_USAGE','conversion','ESRI','103518','EPSG','1408','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103518','NAD_1983_CORS96_StatePlane_Rhode_Island_FIPS_3800',NULL,'EPSG','4400','EPSG','6783','ESRI','103518',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103518_USAGE','projected_crs','ESRI','103518','EPSG','1408','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103519','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.08333333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-71.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999375,'EPSG','9201','EPSG','8806','False easting',328083.3333333333,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103519_USAGE','conversion','ESRI','103519','EPSG','1408','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103519','NAD_1983_CORS96_StatePlane_Rhode_Island_FIPS_3800_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103519',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103519_USAGE','projected_crs','ESRI','103519','EPSG','1408','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103520','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',609600.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103520_USAGE','conversion','ESRI','103520','EPSG','1409','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103520','NAD_1983_CORS96_StatePlane_South_Carolina_FIPS_3900',NULL,'EPSG','4400','EPSG','6783','ESRI','103520',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103520_USAGE','projected_crs','ESRI','103520','EPSG','1409','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103521','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',34.83333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',2000000.0,'EPSG','9002','EPSG','8827','Northing at false origin',0.0,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103521_USAGE','conversion','ESRI','103521','EPSG','1409','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103521','NAD_1983_CORS96_StatePlane_South_Carolina_FIPS_3900_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103521',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103521_USAGE','projected_crs','ESRI','103521','EPSG','1409','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103522','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.41666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103522_USAGE','conversion','ESRI','103522','EPSG','2249','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103522','NAD_1983_CORS96_StatePlane_South_Dakota_North_FIPS_4001',NULL,'EPSG','4400','EPSG','6783','ESRI','103522',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103522_USAGE','projected_crs','ESRI','103522','EPSG','2249','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103523','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.4,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103523_USAGE','conversion','ESRI','103523','EPSG','2250','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103523','NAD_1983_CORS96_StatePlane_South_Dakota_South_FIPS_4002',NULL,'EPSG','4400','EPSG','6783','ESRI','103523',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103523_USAGE','projected_crs','ESRI','103523','EPSG','2250','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103524','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.41666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103524_USAGE','conversion','ESRI','103524','EPSG','2249','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103524','NAD_1983_CORS96_StatePlane_South_Dakota_North_FIPS_4001_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103524',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103524_USAGE','projected_crs','ESRI','103524','EPSG','2249','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103525','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.4,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103525_USAGE','conversion','ESRI','103525','EPSG','2250','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103525','NAD_1983_CORS96_StatePlane_South_Dakota_South_FIPS_4002_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103525',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103525_USAGE','projected_crs','ESRI','103525','EPSG','2250','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103526','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103526_USAGE','conversion','ESRI','103526','EPSG','1411','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103526','NAD_1983_CORS96_StatePlane_Tennessee_FIPS_4100',NULL,'EPSG','4400','EPSG','6783','ESRI','103526',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103526_USAGE','projected_crs','ESRI','103526','EPSG','1411','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103527','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-86.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103527_USAGE','conversion','ESRI','103527','EPSG','1411','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103527','NAD_1983_CORS96_StatePlane_Tennessee_FIPS_4100_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103527',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103527_USAGE','projected_crs','ESRI','103527','EPSG','1411','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103528','ETRF_1989_UTM_Zone_28N',NULL,'EPSG','4400','EPSG','9059','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103528_USAGE','projected_crs','ESRI','103528','EPSG','2122','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103529','ETRF_1989_UTM_Zone_29N',NULL,'EPSG','4400','EPSG','9059','EPSG','16029',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103529_USAGE','projected_crs','ESRI','103529','EPSG','2123','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103530','ETRF_1989_UTM_Zone_30N',NULL,'EPSG','4400','EPSG','9059','EPSG','16030',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103530_USAGE','projected_crs','ESRI','103530','EPSG','2124','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103531','ETRF_1989_UTM_Zone_31N',NULL,'EPSG','4400','EPSG','9059','EPSG','16031',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103531_USAGE','projected_crs','ESRI','103531','EPSG','2125','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103532','ETRF_1989_UTM_Zone_32N',NULL,'EPSG','4400','EPSG','9059','EPSG','16032',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103532_USAGE','projected_crs','ESRI','103532','EPSG','2126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103533','ETRF_1989_UTM_Zone_33N',NULL,'EPSG','4400','EPSG','9059','EPSG','16033',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103533_USAGE','projected_crs','ESRI','103533','EPSG','2127','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103534','ETRF_1989_UTM_Zone_34N',NULL,'EPSG','4400','EPSG','9059','EPSG','16034',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103534_USAGE','projected_crs','ESRI','103534','EPSG','2128','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103535','ETRF_1989_UTM_Zone_35N',NULL,'EPSG','4400','EPSG','9059','EPSG','16035',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103535_USAGE','projected_crs','ESRI','103535','EPSG','2129','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103536','ETRF_1989_UTM_Zone_36N',NULL,'EPSG','4400','EPSG','9059','EPSG','16036',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103536_USAGE','projected_crs','ESRI','103536','EPSG','2130','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103537','ETRF_1989_UTM_Zone_37N',NULL,'EPSG','4400','EPSG','9059','EPSG','16037',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103537_USAGE','projected_crs','ESRI','103537','EPSG','2131','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103538','ETRF_1989_UTM_Zone_38N',NULL,'EPSG','4400','EPSG','9059','EPSG','16038',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103538_USAGE','projected_crs','ESRI','103538','EPSG','2132','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103539','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-101.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.65,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.18333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103539_USAGE','conversion','ESRI','103539','EPSG','2253','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103539','NAD_1983_CORS96_StatePlane_Texas_North_FIPS_4201',NULL,'EPSG','4400','EPSG','6783','ESRI','103539',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103539_USAGE','projected_crs','ESRI','103539','EPSG','2253','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103540','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.13333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103540_USAGE','conversion','ESRI','103540','EPSG','2254','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103540','NAD_1983_CORS96_StatePlane_Texas_North_Central_FIPS_4202',NULL,'EPSG','4400','EPSG','6783','ESRI','103540',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103540_USAGE','projected_crs','ESRI','103540','EPSG','2254','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103541','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',30.11666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',31.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103541_USAGE','conversion','ESRI','103541','EPSG','2252','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103541','NAD_1983_CORS96_StatePlane_Texas_Central_FIPS_4203',NULL,'EPSG','4400','EPSG','6783','ESRI','103541',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103541_USAGE','projected_crs','ESRI','103541','EPSG','2252','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103542','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',28.38333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.28333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103542_USAGE','conversion','ESRI','103542','EPSG','2527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103542','NAD_1983_CORS96_StatePlane_Texas_South_Central_FIPS_4204',NULL,'EPSG','4400','EPSG','6783','ESRI','103542',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103542_USAGE','projected_crs','ESRI','103542','EPSG','2527','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103543','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',26.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',27.83333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',300000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103543_USAGE','conversion','ESRI','103543','EPSG','2528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103543','NAD_1983_CORS96_StatePlane_Texas_South_FIPS_4205',NULL,'EPSG','4400','EPSG','6783','ESRI','103543',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103543_USAGE','projected_crs','ESRI','103543','EPSG','2528','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103544','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',34.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-101.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',34.65,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',36.18333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',656166.6666666665,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103544_USAGE','conversion','ESRI','103544','EPSG','2253','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103544','NAD_1983_CORS96_StatePlane_Texas_North_FIPS_4201_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103544',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103544_USAGE','projected_crs','ESRI','103544','EPSG','2253','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103545','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',31.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',32.13333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',33.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.666666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103545_USAGE','conversion','ESRI','103545','EPSG','2254','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103545','NAD_1983_CORS96_StatePlane_Texas_North_Central_FIPS_4202_FtUS',NULL,'EPSG','4497','EPSG','6783','ESRI','103545',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103545_USAGE','projected_crs','ESRI','103545','EPSG','2254','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103546','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',29.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-100.3333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',30.11666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',31.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',2296583.333333333,'EPSG','9003','EPSG','8827','Northing at false origin',9842500.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103546_USAGE','conversion','ESRI','103546','EPSG','2252','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103546','NAD_1983_CORS96_StatePlane_Texas_Central_FIPS_4203_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103546',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103546_USAGE','projected_crs','ESRI','103546','EPSG','2252','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103547','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',27.83333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-99.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',28.38333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',30.28333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',13123333.33333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103547_USAGE','conversion','ESRI','103547','EPSG','2527','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103547','NAD_1983_CORS96_StatePlane_Texas_South_Central_FIPS_4204_FtUS',NULL,'EPSG','4497','EPSG','6783','ESRI','103547',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103547_USAGE','projected_crs','ESRI','103547','EPSG','2527','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103548','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',25.66666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-98.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',26.16666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',27.83333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',984250.0,'EPSG','9003','EPSG','8827','Northing at false origin',16404166.66666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103548_USAGE','conversion','ESRI','103548','EPSG','2528','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103548','NAD_1983_CORS96_StatePlane_Texas_South_FIPS_4205_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103548',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103548_USAGE','projected_crs','ESRI','103548','EPSG','2528','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103549','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103549_USAGE','conversion','ESRI','103549','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103549','NAD_1983_CORS96_StatePlane_Utah_North_FIPS_4301',NULL,'EPSG','4400','EPSG','6783','ESRI','103549',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103549_USAGE','projected_crs','ESRI','103549','EPSG','2258','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103550','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.01666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.65,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103550_USAGE','conversion','ESRI','103550','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103550','NAD_1983_CORS96_StatePlane_Utah_Central_FIPS_4302',NULL,'EPSG','4400','EPSG','6783','ESRI','103550',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103550_USAGE','projected_crs','ESRI','103550','EPSG','2257','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103551','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.21666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.35,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103551_USAGE','conversion','ESRI','103551','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103551','NAD_1983_CORS96_StatePlane_Utah_South_FIPS_4303',NULL,'EPSG','4400','EPSG','6783','ESRI','103551',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103551_USAGE','projected_crs','ESRI','103551','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103552','NAD_1983_CORS96_StatePlane_Utah_North_FIPS_4301_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103166',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103552_USAGE','projected_crs','ESRI','103552','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103553','NAD_1983_CORS96_StatePlane_Utah_Central_FIPS_4302_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103167',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103553_USAGE','projected_crs','ESRI','103553','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103554','NAD_1983_CORS96_StatePlane_Utah_South_FIPS_4303_Ft_Intl',NULL,'EPSG','4495','EPSG','6783','ESRI','103168',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103554_USAGE','projected_crs','ESRI','103554','EPSG','2259','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103555','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',40.71666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',41.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103555_USAGE','conversion','ESRI','103555','EPSG','2258','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103555','NAD_1983_CORS96_StatePlane_Utah_North_FIPS_4301_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103555',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103555_USAGE','projected_crs','ESRI','103555','EPSG','2258','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103556','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.01666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.65,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.666666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103556_USAGE','conversion','ESRI','103556','EPSG','2257','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103556','NAD_1983_CORS96_StatePlane_Utah_Central_FIPS_4302_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103556',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103556_USAGE','projected_crs','ESRI','103556','EPSG','2257','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103557','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-111.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.21666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.35,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',9842500.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103557_USAGE','conversion','ESRI','103557','EPSG','2259','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103557','NAD_1983_CORS96_StatePlane_Utah_South_FIPS_4303_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103557',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103557_USAGE','projected_crs','ESRI','103557','EPSG','2259','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103558','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-72.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999642857142857,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103558_USAGE','conversion','ESRI','103558','EPSG','1414','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103558','NAD_1983_CORS96_StatePlane_Vermont_FIPS_4400',NULL,'EPSG','4400','EPSG','6783','ESRI','103558',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103558_USAGE','projected_crs','ESRI','103558','EPSG','1414','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103559','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.2,'EPSG','9102','EPSG','8826','Easting at false origin',3500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103559_USAGE','conversion','ESRI','103559','EPSG','2260','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103559','NAD_1983_CORS96_StatePlane_Virginia_North_FIPS_4501',NULL,'EPSG','4400','EPSG','6783','ESRI','103559',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103559_USAGE','projected_crs','ESRI','103559','EPSG','2260','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103560','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.76666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',3500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103560_USAGE','conversion','ESRI','103560','EPSG','2261','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103560','NAD_1983_CORS96_StatePlane_Virginia_South_FIPS_4502',NULL,'EPSG','4400','EPSG','6783','ESRI','103560',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103560_USAGE','projected_crs','ESRI','103560','EPSG','2261','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103561','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.66666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',38.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',39.2,'EPSG','9102','EPSG','8826','Easting at false origin',11482916.66666666,'EPSG','9003','EPSG','8827','Northing at false origin',6561666.666666666,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103561_USAGE','conversion','ESRI','103561','EPSG','2260','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103561','NAD_1983_CORS96_StatePlane_Virginia_North_FIPS_4501_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103561',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103561_USAGE','projected_crs','ESRI','103561','EPSG','2260','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103562','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',36.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-78.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',36.76666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',37.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',11482916.66666666,'EPSG','9003','EPSG','8827','Northing at false origin',3280833.333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103562_USAGE','conversion','ESRI','103562','EPSG','2261','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103562','NAD_1983_CORS96_StatePlane_Virginia_South_FIPS_4502_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103562',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103562_USAGE','projected_crs','ESRI','103562','EPSG','2261','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103563','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.8333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103563_USAGE','conversion','ESRI','103563','EPSG','2273','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103563','NAD_1983_CORS96_StatePlane_Washington_North_FIPS_4601',NULL,'EPSG','4400','EPSG','6783','ESRI','103563',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103563_USAGE','projected_crs','ESRI','103563','EPSG','2273','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103564','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103564_USAGE','conversion','ESRI','103564','EPSG','2274','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103564','NAD_1983_CORS96_StatePlane_Washington_South_FIPS_4602',NULL,'EPSG','4400','EPSG','6783','ESRI','103564',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103564_USAGE','projected_crs','ESRI','103564','EPSG','2274','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103565','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.8333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103565_USAGE','conversion','ESRI','103565','EPSG','2273','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103565','NAD_1983_CORS96_StatePlane_Washington_North_FIPS_4601_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103565',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103565_USAGE','projected_crs','ESRI','103565','EPSG','2273','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103566','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',1640416.666666667,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103566_USAGE','conversion','ESRI','103566','EPSG','2274','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103566','NAD_1983_CORS96_StatePlane_Washington_South_FIPS_4602_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103566',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103566_USAGE','projected_crs','ESRI','103566','EPSG','2274','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103567','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.25,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103567_USAGE','conversion','ESRI','103567','EPSG','2264','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103567','NAD_1983_CORS96_StatePlane_West_Virginia_North_FIPS_4701',NULL,'EPSG','4400','EPSG','6783','ESRI','103567',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103567_USAGE','projected_crs','ESRI','103567','EPSG','2264','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103568','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103568_USAGE','conversion','ESRI','103568','EPSG','2265','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103568','NAD_1983_CORS96_StatePlane_West_Virginia_South_FIPS_4702',NULL,'EPSG','4400','EPSG','6783','ESRI','103568',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103568_USAGE','projected_crs','ESRI','103568','EPSG','2265','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103569','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',38.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-79.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',39.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',40.25,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103569_USAGE','conversion','ESRI','103569','EPSG','2264','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103569','NAD_1983_CORS96_StatePlane_West_Virginia_North_FIPS_4701_FtUS',NULL,'EPSG','4497','EPSG','6783','ESRI','103569',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103569_USAGE','projected_crs','ESRI','103569','EPSG','2264','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103570','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',37.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-81.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',37.48333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',38.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103570_USAGE','conversion','ESRI','103570','EPSG','2265','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103570','NAD_1983_CORS96_StatePlane_West_Virginia_South_FIPS_4702_FtUS',NULL,'EPSG','4497','EPSG','6783','ESRI','103570',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103570_USAGE','projected_crs','ESRI','103570','EPSG','2265','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103571','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103571_USAGE','conversion','ESRI','103571','EPSG','2267','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103571','NAD_1983_CORS96_StatePlane_Wisconsin_North_FIPS_4801',NULL,'EPSG','4400','EPSG','6783','ESRI','103571',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103571_USAGE','projected_crs','ESRI','103571','EPSG','2267','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103572','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103572_USAGE','conversion','ESRI','103572','EPSG','2266','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103572','NAD_1983_CORS96_StatePlane_Wisconsin_Central_FIPS_4802',NULL,'EPSG','4400','EPSG','6783','ESRI','103572',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103572_USAGE','projected_crs','ESRI','103572','EPSG','2266','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103573','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.06666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103573_USAGE','conversion','ESRI','103573','EPSG','2268','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103573','NAD_1983_CORS96_StatePlane_Wisconsin_South_FIPS_4803',NULL,'EPSG','4400','EPSG','6783','ESRI','103573',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103573_USAGE','projected_crs','ESRI','103573','EPSG','2268','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103574','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.16666666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.76666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103574_USAGE','conversion','ESRI','103574','EPSG','2267','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103574','NAD_1983_CORS96_StatePlane_Wisconsin_North_FIPS_4801_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103574',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103574_USAGE','projected_crs','ESRI','103574','EPSG','2267','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103575','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.5,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103575_USAGE','conversion','ESRI','103575','EPSG','2266','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103575','NAD_1983_CORS96_StatePlane_Wisconsin_Central_FIPS_4802_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103575',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103575_USAGE','projected_crs','ESRI','103575','EPSG','2266','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103576','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.73333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.06666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',1968500.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103576_USAGE','conversion','ESRI','103576','EPSG','2268','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103576','NAD_1983_CORS96_StatePlane_Wisconsin_South_FIPS_4803_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103576',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103576_USAGE','projected_crs','ESRI','103576','EPSG','2268','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103577','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103577_USAGE','conversion','ESRI','103577','EPSG','2269','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103577','NAD_1983_CORS96_StatePlane_Wyoming_East_FIPS_4901',NULL,'EPSG','4400','EPSG','6783','ESRI','103577',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103577_USAGE','projected_crs','ESRI','103577','EPSG','2269','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103578','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',400000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103578_USAGE','conversion','ESRI','103578','EPSG','2270','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103578','NAD_1983_CORS96_StatePlane_Wyoming_East_Central_FIPS_4902',NULL,'EPSG','4400','EPSG','6783','ESRI','103578',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103578_USAGE','projected_crs','ESRI','103578','EPSG','2270','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103579','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-108.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103579_USAGE','conversion','ESRI','103579','EPSG','2272','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103579','NAD_1983_CORS96_StatePlane_Wyoming_West_Central_FIPS_4903',NULL,'EPSG','4400','EPSG','6783','ESRI','103579',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103579_USAGE','projected_crs','ESRI','103579','EPSG','2272','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103580','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.0833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',800000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103580_USAGE','conversion','ESRI','103580','EPSG','2271','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103580','NAD_1983_CORS96_StatePlane_Wyoming_West_FIPS_4904',NULL,'EPSG','4400','EPSG','6783','ESRI','103580',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103580_USAGE','projected_crs','ESRI','103580','EPSG','2271','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103581','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-105.1666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',656166.6666666665,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103581_USAGE','conversion','ESRI','103581','EPSG','2269','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103581','NAD_1983_CORS96_StatePlane_Wyoming_East_FIPS_4901_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103581',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103581_USAGE','projected_crs','ESRI','103581','EPSG','2269','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103582','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-107.3333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1312333.333333333,'EPSG','9003','EPSG','8807','False northing',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103582_USAGE','conversion','ESRI','103582','EPSG','2270','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103582','NAD_1983_CORS96_StatePlane_Wyoming_E_Central_FIPS_4902_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103582',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103582_USAGE','projected_crs','ESRI','103582','EPSG','2270','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103583','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-108.75,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',1968500.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103583_USAGE','conversion','ESRI','103583','EPSG','2272','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103583','NAD_1983_CORS96_StatePlane_Wyoming_W_Central_FIPS_4903_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103583',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103583_USAGE','projected_crs','ESRI','103583','EPSG','2272','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103584','ETRF_1989_TM_Baltic_1993',NULL,'EPSG','4400','EPSG','9059','EPSG','19930',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103584_USAGE','projected_crs','ESRI','103584','EPSG','1646','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103585','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',40.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',-110.0833333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999375,'EPSG','9201','EPSG','8806','False easting',2624666.666666666,'EPSG','9003','EPSG','8807','False northing',328083.3333333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103585_USAGE','conversion','ESRI','103585','EPSG','2271','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103585','NAD_1983_CORS96_StatePlane_Wyoming_West_FIPS_4904_Ft_US',NULL,'EPSG','4497','EPSG','6783','ESRI','103585',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103585_USAGE','projected_crs','ESRI','103585','EPSG','2271','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','173','Navajo Nation','Navajo Nation',32.8,37.75,-114.04,-106.17,0); INSERT INTO "conversion" VALUES('ESRI','103586','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-109.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00023,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103586_USAGE','conversion','ESRI','103586','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103586','NAD_1983_HARN_Navajo_Nation_Coordinate_System_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103586',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103586_USAGE','projected_crs','ESRI','103586','ESRI','173','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103587','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-109.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00023,'EPSG','9201','EPSG','8806','False easting',984250.0,'EPSG','9003','EPSG','8807','False northing',1968500.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103587_USAGE','conversion','ESRI','103587','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103587','NAD_1983_HARN_Navajo_Nation_Coordinate_System_US_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103587',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103587_USAGE','projected_crs','ESRI','103587','ESRI','173','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103588','unnamed',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',36.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-109.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00023,'EPSG','9201','EPSG','8806','False easting',984251.968503937,'EPSG','9002','EPSG','8807','False northing',1968503.937007874,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103588_USAGE','conversion','ESRI','103588','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103588','NAD_1983_HARN_Navajo_Nation_Coordinate_System_Intl_Feet',NULL,'EPSG','4495','EPSG','4152','ESRI','103588',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103588_USAGE','projected_crs','ESRI','103588','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103589','NAD_1983_NSRS2007_Navajo_Nation_Coordinate_System_Meters',NULL,'EPSG','4400','EPSG','4759','ESRI','103586',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103589_USAGE','projected_crs','ESRI','103589','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103590','NAD_1983_NSRS2007_Navajo_Nation_Coordinate_System_US_Feet',NULL,'EPSG','4497','EPSG','4759','ESRI','103587',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103590_USAGE','projected_crs','ESRI','103590','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103591','NAD_1983_NSRS2007_Navajo_Nation_Coordinate_System_Intl_Feet',NULL,'EPSG','4495','EPSG','4759','ESRI','103588',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103591_USAGE','projected_crs','ESRI','103591','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103592','NAD_1983_(2011)_Navajo_Nation_Coordinate_System_Meters',NULL,'EPSG','4400','EPSG','6318','ESRI','103586',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103592_USAGE','projected_crs','ESRI','103592','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103593','NAD_1983_(2011)_Navajo_Nation_Coordinate_System_US_Feet',NULL,'EPSG','4497','EPSG','6318','ESRI','103587',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103593_USAGE','projected_crs','ESRI','103593','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103594','NAD_1983_(2011)_Navajo_Nation_Coordinate_System_Intl_Feet',NULL,'EPSG','4495','EPSG','6318','ESRI','103588',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103594_USAGE','projected_crs','ESRI','103594','ESRI','173','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103595','ONGD17_UTM_Zone_39N',NULL,'EPSG','4400','EPSG','9294','EPSG','16039',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103595_USAGE','projected_crs','ESRI','103595','EPSG','4322','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103596','ONGD17_UTM_Zone_40N',NULL,'EPSG','4400','EPSG','9294','EPSG','16040',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103596_USAGE','projected_crs','ESRI','103596','EPSG','4323','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103597','ONGD17_UTM_Zone_41N',NULL,'EPSG','4400','EPSG','9294','EPSG','16041',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103597_USAGE','projected_crs','ESRI','103597','EPSG','4324','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103598','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103598_USAGE','conversion','ESRI','103598','EPSG','1111','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103598','GTM',NULL,'EPSG','4400','EPSG','4326','ESRI','103598',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103598_USAGE','projected_crs','ESRI','103598','EPSG','1111','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103599','MAGNA-SIRGAS_CMT12',NULL,'EPSG','4400','EPSG','4686','EPSG','9376',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103599_USAGE','projected_crs','ESRI','103599','EPSG','1070','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103600','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.15416666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.4325,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000059152669,'EPSG','9201','EPSG','8806','False easting',152409.319685395,'EPSG','9001','EPSG','8807','False northing',30481.86393707899,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103600_USAGE','conversion','ESRI','103600','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103600','NAD_1983_HARN_Adj_MN_Aitkin_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103600',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103600_USAGE','projected_crs','ESRI','103600','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103601','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.63,'EPSG','9102','EPSG','8802','Longitude of natural origin',-96.7,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000045317862,'EPSG','9201','EPSG','8806','False easting',152407.2112565913,'EPSG','9001','EPSG','8807','False northing',30481.44225131827,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103601_USAGE','conversion','ESRI','103601','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103601','NAD_1983_HARN_Adj_MN_Clay_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103601',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103601_USAGE','projected_crs','ESRI','103601','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103602','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',47.15166666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-95.37583333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000072505661,'EPSG','9201','EPSG','8806','False easting',152411.3546854458,'EPSG','9001','EPSG','8807','False northing',30482.27093708916,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103602_USAGE','conversion','ESRI','103602','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103602','NAD_1983_HARN_Adj_MN_Clearwater_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103602',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103602_USAGE','projected_crs','ESRI','103602','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103603','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.80361111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-94.92055555555557,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000071553661,'EPSG','9201','EPSG','8806','False easting',152411.2096003556,'EPSG','9001','EPSG','8807','False northing',30482.24192007113,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103603_USAGE','conversion','ESRI','103603','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103603','NAD_1983_HARN_Adj_MN_Hubbard_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103603',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103603_USAGE','projected_crs','ESRI','103603','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103604','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',47.06666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.40916666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000075844621,'EPSG','9201','EPSG','8806','False easting',152411.8635439675,'EPSG','9001','EPSG','8807','False northing',30482.3727087935,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103604_USAGE','conversion','ESRI','103604','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103604','NAD_1983_HARN_Adj_MN_Lake_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103604',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103604_USAGE','projected_crs','ESRI','103604','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103605','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.55888888888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.62055555555555,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000054146138,'EPSG','9201','EPSG','8806','False easting',152408.5566885446,'EPSG','9001','EPSG','8807','False northing',30481.71133770892,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103605_USAGE','conversion','ESRI','103605','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103605','NAD_1983_HARN_Adj_MN_Mille_Lacs_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103605',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103605_USAGE','projected_crs','ESRI','103605','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103606','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.74583333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000039836799,'EPSG','9201','EPSG','8806','False easting',152406.3759409195,'EPSG','9001','EPSG','8807','False northing',30481.2751881839,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103606_USAGE','conversion','ESRI','103606','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103606','NAD_1983_HARN_Adj_MN_Washington_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103606',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103606_USAGE','projected_crs','ESRI','103606','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103607','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.02166666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-96.52444444444444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000048901066,'EPSG','9201','EPSG','8806','False easting',152407.7573379731,'EPSG','9001','EPSG','8807','False northing',30481.55146759462,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103607_USAGE','conversion','ESRI','103607','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103607','NAD_1983_HARN_Adj_MN_Wilkin_Meters',NULL,'EPSG','4400','EPSG','4152','ESRI','103607',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103607_USAGE','projected_crs','ESRI','103607','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103608','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.03527777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.36666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103608_USAGE','conversion','ESRI','103608','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103608','NAD_1983_HARN_Adj_MN_Anoka_Meters',NULL,'EPSG','4400','ESRI','104700','ESRI','103608',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103608_USAGE','projected_crs','ESRI','103608','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103609','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.71777777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.68333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103609_USAGE','conversion','ESRI','103609','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103609','NAD_1983_HARN_Adj_MN_Becker_Meters',NULL,'EPSG','4400','ESRI','104701','ESRI','103609',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103609_USAGE','projected_crs','ESRI','103609','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103610','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.02,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.01666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.11666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103610_USAGE','conversion','ESRI','103610','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103610','NAD_1983_HARN_Adj_MN_Beltrami_North_Meters',NULL,'EPSG','4400','ESRI','104702','ESRI','103610',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103610_USAGE','projected_crs','ESRI','103610','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103611','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.4125,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.85,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103611_USAGE','conversion','ESRI','103611','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103611','NAD_1983_HARN_Adj_MN_Beltrami_South_Meters',NULL,'EPSG','4400','ESRI','104703','ESRI','103611',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103611_USAGE','projected_crs','ESRI','103611','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103612','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.55916666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.05,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.58333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103612_USAGE','conversion','ESRI','103612','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103612','NAD_1983_HARN_Adj_MN_Benton_Meters',NULL,'EPSG','4400','ESRI','104704','ESRI','103612',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103612_USAGE','projected_crs','ESRI','103612','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103613','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.15222222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.05,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.21666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.53333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103613_USAGE','conversion','ESRI','103613','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103613','NAD_1983_HARN_Adj_MN_Big_Stone_Meters',NULL,'EPSG','4400','ESRI','104705','ESRI','103613',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103613_USAGE','projected_crs','ESRI','103613','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103614','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.36666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103614_USAGE','conversion','ESRI','103614','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103614','NAD_1983_HARN_Adj_MN_Blue_Earth_Meters',NULL,'EPSG','4400','ESRI','104706','ESRI','103614',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103614_USAGE','projected_crs','ESRI','103614','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103615','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.10805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.73333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.16666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103615_USAGE','conversion','ESRI','103615','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103615','NAD_1983_HARN_Adj_MN_Brown_Meters',NULL,'EPSG','4400','ESRI','104707','ESRI','103615',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103615_USAGE','projected_crs','ESRI','103615','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103616','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.41722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.68333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.46666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103616_USAGE','conversion','ESRI','103616','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103616','NAD_1983_HARN_Adj_MN_Carlton_Meters',NULL,'EPSG','4400','ESRI','104708','ESRI','103616',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103616_USAGE','projected_crs','ESRI','103616','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103617','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.63972222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.76666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.68333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.9,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103617_USAGE','conversion','ESRI','103617','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103617','NAD_1983_HARN_Adj_MN_Carver_Meters',NULL,'EPSG','4400','ESRI','104709','ESRI','103617',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103617_USAGE','projected_crs','ESRI','103617','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103618','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.80361111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.21666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.91666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.31666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103618_USAGE','conversion','ESRI','103618','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103618','NAD_1983_HARN_Adj_MN_Cass_North_Meters',NULL,'EPSG','4400','ESRI','104710','ESRI','103618',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103618_USAGE','projected_crs','ESRI','103618','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103619','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.15638888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.46666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103619_USAGE','conversion','ESRI','103619','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103619','NAD_1983_HARN_Adj_MN_Cass_South_Meters',NULL,'EPSG','4400','ESRI','104711','ESRI','103619',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103619_USAGE','projected_crs','ESRI','103619','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103620','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.75277777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.85,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.2,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103620_USAGE','conversion','ESRI','103620','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103620','NAD_1983_HARN_Adj_MN_Chippewa_Meters',NULL,'EPSG','4400','ESRI','104712','ESRI','103620',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103620_USAGE','projected_crs','ESRI','103620','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103621','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.29638888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.08333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103621_USAGE','conversion','ESRI','103621','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103621','NAD_1983_HARN_Adj_MN_Chisago_Meters',NULL,'EPSG','4400','ESRI','104713','ESRI','103621',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103621_USAGE','projected_crs','ESRI','103621','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103622','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.88333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103622_USAGE','conversion','ESRI','103622','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103622','NAD_1983_HARN_Adj_MN_Cook_North_Meters',NULL,'EPSG','4400','ESRI','104714','ESRI','103622',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103622_USAGE','projected_crs','ESRI','103622','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103623','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.43888888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.55,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.81666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103623_USAGE','conversion','ESRI','103623','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103623','NAD_1983_HARN_Adj_MN_Cook_South_Meters',NULL,'EPSG','4400','ESRI','104715','ESRI','103623',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103623_USAGE','projected_crs','ESRI','103623','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103624','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.91666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.9,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103624_USAGE','conversion','ESRI','103624','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103624','NAD_1983_HARN_Adj_MN_Cottonwood_Meters',NULL,'EPSG','4400','ESRI','104716','ESRI','103624',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103624_USAGE','projected_crs','ESRI','103624','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103625','NAD_1983_HARN_Adj_MN_Crow_Wing_Meters',NULL,'EPSG','4400','ESRI','104717','ESRI','103619',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103625_USAGE','projected_crs','ESRI','103625','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103626','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.47194444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.31666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.51666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103626_USAGE','conversion','ESRI','103626','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103626','NAD_1983_HARN_Adj_MN_Dakota_Meters',NULL,'EPSG','4400','ESRI','104718','ESRI','103626',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103626_USAGE','projected_crs','ESRI','103626','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103627','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.91666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103627_USAGE','conversion','ESRI','103627','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103627','NAD_1983_HARN_Adj_MN_Dodge_Meters',NULL,'EPSG','4400','ESRI','104719','ESRI','103627',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103627_USAGE','projected_crs','ESRI','103627','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103628','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.75888888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.05,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.8,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.05,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103628_USAGE','conversion','ESRI','103628','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103628','NAD_1983_HARN_Adj_MN_Douglas_Meters',NULL,'EPSG','4400','ESRI','104720','ESRI','103628',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103628_USAGE','projected_crs','ESRI','103628','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103629','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.95,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103629_USAGE','conversion','ESRI','103629','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103629','NAD_1983_HARN_Adj_MN_Faribault_Meters',NULL,'EPSG','4400','ESRI','104721','ESRI','103629',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103629_USAGE','projected_crs','ESRI','103629','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103630','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.08333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.55,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103630_USAGE','conversion','ESRI','103630','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103630','NAD_1983_HARN_Adj_MN_Fillmore_Meters',NULL,'EPSG','4400','ESRI','104722','ESRI','103630',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103630_USAGE','projected_crs','ESRI','103630','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103631','NAD_1983_HARN_Adj_MN_Freeborn_Meters',NULL,'EPSG','4400','ESRI','104723','ESRI','103629',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103631_USAGE','projected_crs','ESRI','103631','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103632','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19472222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.13333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103632_USAGE','conversion','ESRI','103632','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103632','NAD_1983_HARN_Adj_MN_Goodhue_Meters',NULL,'EPSG','4400','ESRI','104724','ESRI','103632',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103632_USAGE','projected_crs','ESRI','103632','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103633','NAD_1983_HARN_Adj_MN_Grant_Meters',NULL,'EPSG','4400','ESRI','104725','ESRI','103628',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103633_USAGE','projected_crs','ESRI','103633','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103634','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.79111111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.38333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103634_USAGE','conversion','ESRI','103634','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103634','NAD_1983_HARN_Adj_MN_Hennepin_Meters',NULL,'EPSG','4400','ESRI','104726','ESRI','103634',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103634_USAGE','projected_crs','ESRI','103634','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103635','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.46666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103635_USAGE','conversion','ESRI','103635','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103635','NAD_1983_HARN_Adj_MN_Houston_Meters',NULL,'EPSG','4400','ESRI','104727','ESRI','103635',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103635_USAGE','projected_crs','ESRI','103635','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103636','NAD_1983_HARN_Adj_MN_Isanti_Meters',NULL,'EPSG','4400','ESRI','104728','ESRI','103621',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103636_USAGE','projected_crs','ESRI','103636','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103637','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.73333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.81666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103637_USAGE','conversion','ESRI','103637','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103637','NAD_1983_HARN_Adj_MN_Itasca_North_Meters',NULL,'EPSG','4400','ESRI','104729','ESRI','103637',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103637_USAGE','projected_crs','ESRI','103637','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103638','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.02638888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.73333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.08333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103638_USAGE','conversion','ESRI','103638','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103638','NAD_1983_HARN_Adj_MN_Itasca_South_Meters',NULL,'EPSG','4400','ESRI','104730','ESRI','103638',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103638_USAGE','projected_crs','ESRI','103638','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103639','NAD_1983_HARN_Adj_MN_Jackson_Meters',NULL,'EPSG','4400','ESRI','104731','ESRI','103629',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103639_USAGE','projected_crs','ESRI','103639','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103640','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.73,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.9,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.81666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103640_USAGE','conversion','ESRI','103640','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103640','NAD_1983_HARN_Adj_MN_Kanabec_Meters',NULL,'EPSG','4400','ESRI','104732','ESRI','103640',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103640_USAGE','projected_crs','ESRI','103640','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103641','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.89138888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.96666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103641_USAGE','conversion','ESRI','103641','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103641','NAD_1983_HARN_Adj_MN_Kandiyohi_Meters',NULL,'EPSG','4400','ESRI','104733','ESRI','103641',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103641_USAGE','projected_crs','ESRI','103641','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103642','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.54388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.15,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.6,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.93333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103642_USAGE','conversion','ESRI','103642','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103642','NAD_1983_HARN_Adj_MN_Kittson_Meters',NULL,'EPSG','4400','ESRI','104734','ESRI','103642',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103642_USAGE','projected_crs','ESRI','103642','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103643','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.84583333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.61666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103643_USAGE','conversion','ESRI','103643','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103643','NAD_1983_HARN_Adj_MN_Koochiching_Meters',NULL,'EPSG','4400','ESRI','104735','ESRI','103643',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103643_USAGE','projected_crs','ESRI','103643','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103644','NAD_1983_HARN_Adj_MN_Lac_Qui_Parle_Meters',NULL,'EPSG','4400','ESRI','104736','ESRI','103620',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103644_USAGE','projected_crs','ESRI','103644','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103645','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',49.15,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.98333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103645_USAGE','conversion','ESRI','103645','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103645','NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_North_Meters',NULL,'EPSG','4400','ESRI','104737','ESRI','103645',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103645_USAGE','projected_crs','ESRI','103645','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103646','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.36611111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.88333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.45,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103646_USAGE','conversion','ESRI','103646','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103646','NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_South_Meters',NULL,'EPSG','4400','ESRI','104738','ESRI','103646',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103646_USAGE','projected_crs','ESRI','103646','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103647','NAD_1983_HARN_Adj_MN_Le_Sueur_Meters',NULL,'EPSG','4400','ESRI','104739','ESRI','103632',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103647_USAGE','projected_crs','ESRI','103647','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103648','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.28333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.61666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103648_USAGE','conversion','ESRI','103648','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103648','NAD_1983_HARN_Adj_MN_Lincoln_Meters',NULL,'EPSG','4400','ESRI','104740','ESRI','103648',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103648_USAGE','projected_crs','ESRI','103648','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103649','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19555555555555,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.85,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.58333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103649_USAGE','conversion','ESRI','103649','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103649','NAD_1983_HARN_Adj_MN_Lyon_Meters',NULL,'EPSG','4400','ESRI','104741','ESRI','103649',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103649_USAGE','projected_crs','ESRI','103649','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103650','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.45611111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.63333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.53333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103650_USAGE','conversion','ESRI','103650','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103650','NAD_1983_HARN_Adj_MN_McLeod_Meters',NULL,'EPSG','4400','ESRI','104742','ESRI','103650',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103650_USAGE','projected_crs','ESRI','103650','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103651','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.15166666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.81666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.45,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103651_USAGE','conversion','ESRI','103651','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103651','NAD_1983_HARN_Adj_MN_Mahnomen_Meters',NULL,'EPSG','4400','ESRI','104743','ESRI','103651',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103651_USAGE','projected_crs','ESRI','103651','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103652','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.17305555555555,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.38333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.23333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103652_USAGE','conversion','ESRI','103652','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103652','NAD_1983_HARN_Adj_MN_Marshall_Meters',NULL,'EPSG','4400','ESRI','104744','ESRI','103652',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103652_USAGE','projected_crs','ESRI','103652','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103653','NAD_1983_HARN_Adj_MN_Martin_Meters',NULL,'EPSG','4400','ESRI','104745','ESRI','103629',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103653_USAGE','projected_crs','ESRI','103653','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103654','NAD_1983_HARN_Adj_MN_Meeker_Meters',NULL,'EPSG','4400','ESRI','104746','ESRI','103641',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103654_USAGE','projected_crs','ESRI','103654','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103655','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.77388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.2,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.85,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.26666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103655_USAGE','conversion','ESRI','103655','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103655','NAD_1983_HARN_Adj_MN_Morrison_Meters',NULL,'EPSG','4400','ESRI','104747','ESRI','103655',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103655_USAGE','projected_crs','ESRI','103655','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103656','NAD_1983_HARN_Adj_MN_Mower_Meters',NULL,'EPSG','4400','ESRI','104748','ESRI','103629',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103656_USAGE','projected_crs','ESRI','103656','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103657','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.76666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.91666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103657_USAGE','conversion','ESRI','103657','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103657','NAD_1983_HARN_Adj_MN_Murray_Meters',NULL,'EPSG','4400','ESRI','104749','ESRI','103657',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103657_USAGE','projected_crs','ESRI','103657','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103658','NAD_1983_HARN_Adj_MN_Nicollet_Meters',NULL,'EPSG','4400','ESRI','104750','ESRI','103614',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103658_USAGE','projected_crs','ESRI','103658','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103659','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.95,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103659_USAGE','conversion','ESRI','103659','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103659','NAD_1983_HARN_Adj_MN_Nobles_Meters',NULL,'EPSG','4400','ESRI','104751','ESRI','103659',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103659_USAGE','projected_crs','ESRI','103659','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103660','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.15055555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.45,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103660_USAGE','conversion','ESRI','103660','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103660','NAD_1983_HARN_Adj_MN_Norman_Meters',NULL,'EPSG','4400','ESRI','104752','ESRI','103660',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103660_USAGE','projected_crs','ESRI','103660','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103661','NAD_1983_HARN_Adj_MN_Olmsted_Meters',NULL,'EPSG','4400','ESRI','104753','ESRI','103627',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103661_USAGE','projected_crs','ESRI','103661','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103662','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.10638888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.71666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.65,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103662_USAGE','conversion','ESRI','103662','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103662','NAD_1983_HARN_Adj_MN_Ottertail_Meters',NULL,'EPSG','4400','ESRI','104754','ESRI','103662',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103662_USAGE','projected_crs','ESRI','103662','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103663','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.49888888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.6,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103663_USAGE','conversion','ESRI','103663','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103663','NAD_1983_HARN_Adj_MN_Pennington_Meters',NULL,'EPSG','4400','ESRI','104755','ESRI','103663',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103663_USAGE','projected_crs','ESRI','103663','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103664','NAD_1983_HARN_Adj_MN_Pine_Meters',NULL,'EPSG','4400','ESRI','104756','ESRI','103640',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103664_USAGE','projected_crs','ESRI','103664','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103665','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84916666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.15,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103665_USAGE','conversion','ESRI','103665','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103665','NAD_1983_HARN_Adj_MN_Pipestone_Meters',NULL,'EPSG','4400','ESRI','104757','ESRI','103665',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103665_USAGE','projected_crs','ESRI','103665','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103666','NAD_1983_HARN_Adj_MN_Polk_Meters',NULL,'EPSG','4400','ESRI','104758','ESRI','103663',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103666_USAGE','projected_crs','ESRI','103666','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103667','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.28277777777777,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.15,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.35,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103667_USAGE','conversion','ESRI','103667','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103667','NAD_1983_HARN_Adj_MN_Pope_Meters',NULL,'EPSG','4400','ESRI','104759','ESRI','103667',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103667_USAGE','projected_crs','ESRI','103667','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103668','NAD_1983_HARN_Adj_MN_Ramsey_Meters',NULL,'EPSG','4400','ESRI','104760','ESRI','103634',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103668_USAGE','projected_crs','ESRI','103668','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103669','NAD_1983_HARN_Adj_MN_Red_Lake_Meters',NULL,'EPSG','4400','ESRI','104761','ESRI','103663',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103669_USAGE','projected_crs','ESRI','103669','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103670','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19472222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.23333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.56666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103670_USAGE','conversion','ESRI','103670','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103670','NAD_1983_HARN_Adj_MN_Redwood_Meters',NULL,'EPSG','4400','ESRI','104762','ESRI','103670',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103670_USAGE','projected_crs','ESRI','103670','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103671','NAD_1983_HARN_Adj_MN_Renville_Meters',NULL,'EPSG','4400','ESRI','104763','ESRI','103650',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103671_USAGE','projected_crs','ESRI','103671','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103672','NAD_1983_HARN_Adj_MN_Rice_Meters',NULL,'EPSG','4400','ESRI','104764','ESRI','103632',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103672_USAGE','projected_crs','ESRI','103672','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103673','NAD_1983_HARN_Adj_MN_Rock_Meters',NULL,'EPSG','4400','ESRI','104765','ESRI','103659',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103673_USAGE','projected_crs','ESRI','103673','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103674','NAD_1983_HARN_Adj_MN_Roseau_Meters',NULL,'EPSG','4400','ESRI','104766','ESRI','103642',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103674_USAGE','projected_crs','ESRI','103674','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103675','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.98333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.53333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103675_USAGE','conversion','ESRI','103675','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103675','NAD_1983_HARN_Adj_MN_St_Louis_North_Meters',NULL,'EPSG','4400','ESRI','104767','ESRI','103675',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103675_USAGE','projected_crs','ESRI','103675','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103676','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.75,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103676_USAGE','conversion','ESRI','103676','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103676','NAD_1983_HARN_Adj_MN_St_Louis_Central_Meters',NULL,'EPSG','4400','ESRI','104768','ESRI','103676',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103676_USAGE','projected_crs','ESRI','103676','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103677','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.65,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103677_USAGE','conversion','ESRI','103677','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103677','NAD_1983_HARN_Adj_MN_St_Louis_South_Meters',NULL,'EPSG','4400','ESRI','104769','ESRI','103677',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103677_USAGE','projected_crs','ESRI','103677','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103678','NAD_1983_HARN_Adj_MN_Scott_Meters',NULL,'EPSG','4400','ESRI','104770','ESRI','103626',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103678_USAGE','projected_crs','ESRI','103678','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103679','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.9775,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.88333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103679_USAGE','conversion','ESRI','103679','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103679','NAD_1983_HARN_Adj_MN_Sherburne_Meters',NULL,'EPSG','4400','ESRI','104771','ESRI','103679',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103679_USAGE','projected_crs','ESRI','103679','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103680','NAD_1983_HARN_Adj_MN_Sibley_Meters',NULL,'EPSG','4400','ESRI','104772','ESRI','103650',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103680_USAGE','projected_crs','ESRI','103680','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103681','NAD_1983_HARN_Adj_MN_Stearns_Meters',NULL,'EPSG','4400','ESRI','104773','ESRI','103667',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103681_USAGE','projected_crs','ESRI','103681','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103682','NAD_1983_HARN_Adj_MN_Steele_Meters',NULL,'EPSG','4400','ESRI','104774','ESRI','103627',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103682_USAGE','projected_crs','ESRI','103682','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103683','NAD_1983_HARN_Adj_MN_Stevens_Meters',NULL,'EPSG','4400','ESRI','104775','ESRI','103667',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103683_USAGE','projected_crs','ESRI','103683','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103684','NAD_1983_HARN_Adj_MN_Swift_Meters',NULL,'EPSG','4400','ESRI','104776','ESRI','103613',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103684_USAGE','projected_crs','ESRI','103684','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103685','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.77333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.9,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.86666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.28333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103685_USAGE','conversion','ESRI','103685','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103685','NAD_1983_HARN_Adj_MN_Todd_Meters',NULL,'EPSG','4400','ESRI','104777','ESRI','103685',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103685_USAGE','projected_crs','ESRI','103685','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103686','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.58555555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.55,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.63333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103686_USAGE','conversion','ESRI','103686','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103686','NAD_1983_HARN_Adj_MN_Traverse_Meters',NULL,'EPSG','4400','ESRI','104778','ESRI','103686',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103686_USAGE','projected_crs','ESRI','103686','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103687','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.10694444444444,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.15,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103687_USAGE','conversion','ESRI','103687','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103687','NAD_1983_HARN_Adj_MN_Wabasha_Meters',NULL,'EPSG','4400','ESRI','104779','ESRI','103687',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103687_USAGE','projected_crs','ESRI','103687','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103688','NAD_1983_HARN_Adj_MN_Wadena_Meters',NULL,'EPSG','4400','ESRI','104780','ESRI','103619',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103688_USAGE','projected_crs','ESRI','103688','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103689','NAD_1983_HARN_Adj_MN_Waseca_Meters',NULL,'EPSG','4400','ESRI','104781','ESRI','103627',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103689_USAGE','projected_crs','ESRI','103689','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103690','NAD_1983_HARN_Adj_MN_Watonwan_Meters',NULL,'EPSG','4400','ESRI','104782','ESRI','103624',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103690_USAGE','projected_crs','ESRI','103690','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103691','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.61666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.9,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103691_USAGE','conversion','ESRI','103691','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103691','NAD_1983_HARN_Adj_MN_Winona_Meters',NULL,'EPSG','4400','ESRI','104783','ESRI','103691',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103691_USAGE','projected_crs','ESRI','103691','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103692','NAD_1983_HARN_Adj_MN_Wright_Meters',NULL,'EPSG','4400','ESRI','104784','ESRI','103679',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103692_USAGE','projected_crs','ESRI','103692','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103693','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.54166666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.9,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.95,'EPSG','9102','EPSG','8826','Easting at false origin',152400.3048006096,'EPSG','9001','EPSG','8827','Northing at false origin',30480.06096012193,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103693_USAGE','conversion','ESRI','103693','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103693','NAD_1983_HARN_Adj_MN_Yellow_Medicine_Meters',NULL,'EPSG','4400','ESRI','104785','ESRI','103693',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103693_USAGE','projected_crs','ESRI','103693','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103694','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.61666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.45,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998529,'EPSG','9201','EPSG','8806','False easting',1450000.0,'EPSG','9001','EPSG','8807','False northing',1000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103694_USAGE','conversion','ESRI','103694','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103694','NAD_1983_HARN_Adj_MN_St_Louis_CS96_Meters',NULL,'EPSG','4400','ESRI','104786','ESRI','103694',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103694_USAGE','projected_crs','ESRI','103694','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103695','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.61666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.45,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99998529,'EPSG','9201','EPSG','8806','False easting',4757208.333333,'EPSG','9003','EPSG','8807','False northing',3280833.333333,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103695_USAGE','conversion','ESRI','103695','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103695','NAD_1983_HARN_Adj_MN_St_Louis_CS96_Feet',NULL,'EPSG','4497','ESRI','104786','ESRI','103695',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103695_USAGE','projected_crs','ESRI','103695','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103696','NAD_1983_(CSRS)_v6_UTM_Zone_19N',NULL,'EPSG','4400','EPSG','8252','EPSG','16019',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103696_USAGE','projected_crs','ESRI','103696','EPSG','3524','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103697','NAD_1983_(CSRS)_v6_UTM_Zone_20N',NULL,'EPSG','4400','EPSG','8252','EPSG','16020',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103697_USAGE','projected_crs','ESRI','103697','EPSG','3525','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103698','NAD_1983_(CSRS)_v6_UTM_Zone_21N',NULL,'EPSG','4400','EPSG','8252','EPSG','16021',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103698_USAGE','projected_crs','ESRI','103698','EPSG','2151','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103699','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',31.73439361111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',35.20451694444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000067,'EPSG','9201','EPSG','8806','False easting',169529.584,'EPSG','9001','EPSG','8807','False northing',126907.39,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103699_USAGE','conversion','ESRI','103699','EPSG','2602','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103699','Palestine_Grid_1923_Modified_TM',NULL,'EPSG','4400','EPSG','4141','ESRI','103699',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103699_USAGE','projected_crs','ESRI','103699','EPSG','2602','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103700','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.15416666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.4325,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000059152669,'EPSG','9201','EPSG','8806','False easting',500029.5763345,'EPSG','9003','EPSG','8807','False northing',100005.9152669,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103700_USAGE','conversion','ESRI','103700','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103700','NAD_1983_HARN_Adj_MN_Aitkin_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103700',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103700_USAGE','projected_crs','ESRI','103700','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103701','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.63,'EPSG','9102','EPSG','8802','Longitude of natural origin',-96.7,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000045317862,'EPSG','9201','EPSG','8806','False easting',500022.658931,'EPSG','9003','EPSG','8807','False northing',100004.5317862,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103701_USAGE','conversion','ESRI','103701','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103701','NAD_1983_HARN_Adj_MN_Clay_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103701',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103701_USAGE','projected_crs','ESRI','103701','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103702','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',47.15166666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-95.37583333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000072505661,'EPSG','9201','EPSG','8806','False easting',500036.2528305,'EPSG','9003','EPSG','8807','False northing',100007.2505661,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103702_USAGE','conversion','ESRI','103702','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103702','NAD_1983_HARN_Adj_MN_Clearwater_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103702',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103702_USAGE','projected_crs','ESRI','103702','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103703','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.80361111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-94.92055555555557,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000071553661,'EPSG','9201','EPSG','8806','False easting',500035.7768305,'EPSG','9003','EPSG','8807','False northing',100007.1553661,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103703_USAGE','conversion','ESRI','103703','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103703','NAD_1983_HARN_Adj_MN_Hubbard_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103703',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103703_USAGE','projected_crs','ESRI','103703','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103704','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',47.06666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.40916666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000075844621,'EPSG','9201','EPSG','8806','False easting',500037.9223105,'EPSG','9003','EPSG','8807','False northing',100007.5844621,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103704_USAGE','conversion','ESRI','103704','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103704','NAD_1983_HARN_Adj_MN_Lake_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103704',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103704_USAGE','projected_crs','ESRI','103704','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103705','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.55888888888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-93.62055555555555,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000054146138,'EPSG','9201','EPSG','8806','False easting',500027.073069,'EPSG','9003','EPSG','8807','False northing',100005.4146138,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103705_USAGE','conversion','ESRI','103705','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103705','NAD_1983_HARN_Adj_MN_Mille_Lacs_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103705',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103705_USAGE','projected_crs','ESRI','103705','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103706','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.74583333333334,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.83333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000039836799,'EPSG','9201','EPSG','8806','False easting',500019.9183995,'EPSG','9003','EPSG','8807','False northing',100003.9836799,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103706_USAGE','conversion','ESRI','103706','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103706','NAD_1983_HARN_Adj_MN_Washington_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103706',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103706_USAGE','projected_crs','ESRI','103706','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103707','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',46.02166666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-96.52444444444444,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000048901066,'EPSG','9201','EPSG','8806','False easting',500024.450533,'EPSG','9003','EPSG','8807','False northing',100004.8901066,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103707_USAGE','conversion','ESRI','103707','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103707','NAD_1983_HARN_Adj_MN_Wilkin_Feet',NULL,'EPSG','4497','EPSG','4152','ESRI','103707',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103707_USAGE','projected_crs','ESRI','103707','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103708','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.03527777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.06666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.36666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103708_USAGE','conversion','ESRI','103708','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103708','NAD_1983_HARN_Adj_MN_Anoka_Feet',NULL,'EPSG','4497','ESRI','104700','ESRI','103708',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103708_USAGE','projected_crs','ESRI','103708','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103709','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.71777777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.68333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103709_USAGE','conversion','ESRI','103709','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103709','NAD_1983_HARN_Adj_MN_Becker_Feet',NULL,'EPSG','4497','ESRI','104701','ESRI','103709',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103709_USAGE','projected_crs','ESRI','103709','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103710','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.02,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.01666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.11666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103710_USAGE','conversion','ESRI','103710','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103710','NAD_1983_HARN_Adj_MN_Beltrami_North_Feet',NULL,'EPSG','4497','ESRI','104702','ESRI','103710',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103710_USAGE','projected_crs','ESRI','103710','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103711','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.4125,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.85,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.5,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103711_USAGE','conversion','ESRI','103711','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103711','NAD_1983_HARN_Adj_MN_Beltrami_South_Feet',NULL,'EPSG','4497','ESRI','104703','ESRI','103711',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103711_USAGE','projected_crs','ESRI','103711','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103712','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.55916666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.05,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.58333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.78333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103712_USAGE','conversion','ESRI','103712','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103712','NAD_1983_HARN_Adj_MN_Benton_Feet',NULL,'EPSG','4497','ESRI','104704','ESRI','103712',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103712_USAGE','projected_crs','ESRI','103712','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103713','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.15222222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.05,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.21666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.53333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103713_USAGE','conversion','ESRI','103713','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103713','NAD_1983_HARN_Adj_MN_Big_Stone_Feet',NULL,'EPSG','4497','ESRI','104705','ESRI','103713',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103713_USAGE','projected_crs','ESRI','103713','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103714','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.36666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103714_USAGE','conversion','ESRI','103714','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103714','NAD_1983_HARN_Adj_MN_Blue_Earth_Feet',NULL,'EPSG','4497','ESRI','104706','ESRI','103714',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103714_USAGE','projected_crs','ESRI','103714','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103715','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.10805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.73333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.16666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103715_USAGE','conversion','ESRI','103715','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103715','NAD_1983_HARN_Adj_MN_Brown_Feet',NULL,'EPSG','4497','ESRI','104707','ESRI','103715',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103715_USAGE','projected_crs','ESRI','103715','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103716','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.41722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.68333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.46666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103716_USAGE','conversion','ESRI','103716','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103716','NAD_1983_HARN_Adj_MN_Carlton_Feet',NULL,'EPSG','4497','ESRI','104708','ESRI','103716',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103716_USAGE','projected_crs','ESRI','103716','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103717','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.63972222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.76666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.68333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.9,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103717_USAGE','conversion','ESRI','103717','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103717','NAD_1983_HARN_Adj_MN_Carver_Feet',NULL,'EPSG','4497','ESRI','104709','ESRI','103717',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103717_USAGE','projected_crs','ESRI','103717','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103718','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.80361111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.21666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.91666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.31666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103718_USAGE','conversion','ESRI','103718','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103718','NAD_1983_HARN_Adj_MN_Cass_North_Feet',NULL,'EPSG','4497','ESRI','104710','ESRI','103718',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103718_USAGE','projected_crs','ESRI','103718','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103719','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.15638888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.46666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.73333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103719_USAGE','conversion','ESRI','103719','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103719','NAD_1983_HARN_Adj_MN_Cass_South_Feet',NULL,'EPSG','4497','ESRI','104711','ESRI','103719',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103719_USAGE','projected_crs','ESRI','103719','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103720','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.75277777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.85,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.83333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.2,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103720_USAGE','conversion','ESRI','103720','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103720','NAD_1983_HARN_Adj_MN_Chippewa_Feet',NULL,'EPSG','4497','ESRI','104712','ESRI','103720',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103720_USAGE','projected_crs','ESRI','103720','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103721','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.29638888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.08333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103721_USAGE','conversion','ESRI','103721','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103721','NAD_1983_HARN_Adj_MN_Chisago_Feet',NULL,'EPSG','4497','ESRI','104713','ESRI','103721',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103721_USAGE','projected_crs','ESRI','103721','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103722','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.88333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.93333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103722_USAGE','conversion','ESRI','103722','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103722','NAD_1983_HARN_Adj_MN_Cook_North_Feet',NULL,'EPSG','4497','ESRI','104714','ESRI','103722',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103722_USAGE','projected_crs','ESRI','103722','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103723','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.43888888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.55,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.81666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103723_USAGE','conversion','ESRI','103723','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103723','NAD_1983_HARN_Adj_MN_Cook_South_Feet',NULL,'EPSG','4497','ESRI','104715','ESRI','103723',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103723_USAGE','projected_crs','ESRI','103723','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103724','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.91666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.9,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103724_USAGE','conversion','ESRI','103724','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103724','NAD_1983_HARN_Adj_MN_Cottonwood_Feet',NULL,'EPSG','4497','ESRI','104716','ESRI','103724',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103724_USAGE','projected_crs','ESRI','103724','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103725','NAD_1983_HARN_Adj_MN_Crow_Wing_Feet',NULL,'EPSG','4497','ESRI','104717','ESRI','103719',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103725_USAGE','projected_crs','ESRI','103725','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103726','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.47194444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.31666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.51666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103726_USAGE','conversion','ESRI','103726','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103726','NAD_1983_HARN_Adj_MN_Dakota_Feet',NULL,'EPSG','4497','ESRI','104718','ESRI','103726',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103726_USAGE','projected_crs','ESRI','103726','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103727','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.83388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.91666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103727_USAGE','conversion','ESRI','103727','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103727','NAD_1983_HARN_Adj_MN_Dodge_Feet',NULL,'EPSG','4497','ESRI','104719','ESRI','103727',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103727_USAGE','projected_crs','ESRI','103727','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103728','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.75888888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.05,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.8,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.05,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103728_USAGE','conversion','ESRI','103728','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103728','NAD_1983_HARN_Adj_MN_Douglas_Feet',NULL,'EPSG','4497','ESRI','104720','ESRI','103728',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103728_USAGE','projected_crs','ESRI','103728','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103729','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.95,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103729_USAGE','conversion','ESRI','103729','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103729','NAD_1983_HARN_Adj_MN_Faribault_Feet',NULL,'EPSG','4497','ESRI','104721','ESRI','103729',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103729_USAGE','projected_crs','ESRI','103729','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103730','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.08333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.55,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103730_USAGE','conversion','ESRI','103730','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103730','NAD_1983_HARN_Adj_MN_Fillmore_Feet',NULL,'EPSG','4497','ESRI','104722','ESRI','103730',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103730_USAGE','projected_crs','ESRI','103730','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103731','NAD_1983_HARN_Adj_MN_Freeborn_Feet',NULL,'EPSG','4497','ESRI','104723','ESRI','103729',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103731_USAGE','projected_crs','ESRI','103731','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103732','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19472222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.13333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.3,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.66666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103732_USAGE','conversion','ESRI','103732','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103732','NAD_1983_HARN_Adj_MN_Goodhue_Feet',NULL,'EPSG','4497','ESRI','104724','ESRI','103732',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103732_USAGE','projected_crs','ESRI','103732','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103733','NAD_1983_HARN_Adj_MN_Grant_Feet',NULL,'EPSG','4497','ESRI','104725','ESRI','103728',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103733_USAGE','projected_crs','ESRI','103733','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103734','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.79111111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.38333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103734_USAGE','conversion','ESRI','103734','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103734','NAD_1983_HARN_Adj_MN_Hennepin_Feet',NULL,'EPSG','4497','ESRI','104726','ESRI','103734',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103734_USAGE','projected_crs','ESRI','103734','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103735','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.46666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103735_USAGE','conversion','ESRI','103735','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103735','NAD_1983_HARN_Adj_MN_Houston_Feet',NULL,'EPSG','4497','ESRI','104727','ESRI','103735',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103735_USAGE','projected_crs','ESRI','103735','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103736','NAD_1983_HARN_Adj_MN_Isanti_Feet',NULL,'EPSG','4497','ESRI','104728','ESRI','103721',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103736_USAGE','projected_crs','ESRI','103736','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103737','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.73333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.81666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103737_USAGE','conversion','ESRI','103737','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103737','NAD_1983_HARN_Adj_MN_Itasca_North_Feet',NULL,'EPSG','4497','ESRI','104729','ESRI','103737',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103737_USAGE','projected_crs','ESRI','103737','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103738','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.02638888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.73333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.08333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103738_USAGE','conversion','ESRI','103738','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103738','NAD_1983_HARN_Adj_MN_Itasca_South_Feet',NULL,'EPSG','4497','ESRI','104730','ESRI','103738',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103738_USAGE','projected_crs','ESRI','103738','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103739','NAD_1983_HARN_Adj_MN_Jackson_Feet',NULL,'EPSG','4497','ESRI','104731','ESRI','103729',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103739_USAGE','projected_crs','ESRI','103739','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103740','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.73,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.9,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.81666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103740_USAGE','conversion','ESRI','103740','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103740','NAD_1983_HARN_Adj_MN_Kanabec_Feet',NULL,'EPSG','4497','ESRI','104732','ESRI','103740',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103740_USAGE','projected_crs','ESRI','103740','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103741','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.89138888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.96666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103741_USAGE','conversion','ESRI','103741','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103741','NAD_1983_HARN_Adj_MN_Kandiyohi_Feet',NULL,'EPSG','4497','ESRI','104733','ESRI','103741',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103741_USAGE','projected_crs','ESRI','103741','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103742','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.54388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.15,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.6,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.93333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103742_USAGE','conversion','ESRI','103742','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103742','NAD_1983_HARN_Adj_MN_Kittson_Feet',NULL,'EPSG','4497','ESRI','104734','ESRI','103742',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103742_USAGE','projected_crs','ESRI','103742','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103743','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.84583333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.75,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.61666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103743_USAGE','conversion','ESRI','103743','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103743','NAD_1983_HARN_Adj_MN_Koochiching_Feet',NULL,'EPSG','4497','ESRI','104735','ESRI','103743',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103743_USAGE','projected_crs','ESRI','103743','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103744','NAD_1983_HARN_Adj_MN_Lac_Qui_Parle_Feet',NULL,'EPSG','4497','ESRI','104736','ESRI','103720',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103744_USAGE','projected_crs','ESRI','103744','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103745','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',49.15,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.98333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.33333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103745_USAGE','conversion','ESRI','103745','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103745','NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_North_Feet',NULL,'EPSG','4497','ESRI','104737','ESRI','103745',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103745_USAGE','projected_crs','ESRI','103745','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103746','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.36611111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.88333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.45,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.88333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103746_USAGE','conversion','ESRI','103746','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103746','NAD_1983_HARN_Adj_MN_Lake_of_the_Woods_South_Feet',NULL,'EPSG','4497','ESRI','104738','ESRI','103746',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103746_USAGE','projected_crs','ESRI','103746','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103747','NAD_1983_HARN_Adj_MN_Le_Sueur_Feet',NULL,'EPSG','4497','ESRI','104739','ESRI','103732',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103747_USAGE','projected_crs','ESRI','103747','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103748','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.28333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.61666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103748_USAGE','conversion','ESRI','103748','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103748','NAD_1983_HARN_Adj_MN_Lincoln_Feet',NULL,'EPSG','4497','ESRI','104740','ESRI','103748',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103748_USAGE','projected_crs','ESRI','103748','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103749','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19555555555555,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.85,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.58333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103749_USAGE','conversion','ESRI','103749','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103749','NAD_1983_HARN_Adj_MN_Lyon_Feet',NULL,'EPSG','4497','ESRI','104741','ESRI','103749',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103749_USAGE','projected_crs','ESRI','103749','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103750','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.45611111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.63333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.53333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.91666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103750_USAGE','conversion','ESRI','103750','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103750','NAD_1983_HARN_Adj_MN_McLeod_Feet',NULL,'EPSG','4497','ESRI','104742','ESRI','103750',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103750_USAGE','projected_crs','ESRI','103750','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103751','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.15166666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.81666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.45,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103751_USAGE','conversion','ESRI','103751','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103751','NAD_1983_HARN_Adj_MN_Mahnomen_Feet',NULL,'EPSG','4497','ESRI','104743','ESRI','103751',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103751_USAGE','projected_crs','ESRI','103751','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103752','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.17305555555555,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.38333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.23333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.48333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103752_USAGE','conversion','ESRI','103752','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103752','NAD_1983_HARN_Adj_MN_Marshall_Feet',NULL,'EPSG','4497','ESRI','104744','ESRI','103752',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103752_USAGE','projected_crs','ESRI','103752','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103753','NAD_1983_HARN_Adj_MN_Martin_Feet',NULL,'EPSG','4497','ESRI','104745','ESRI','103729',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103753_USAGE','projected_crs','ESRI','103753','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103754','NAD_1983_HARN_Adj_MN_Meeker_Feet',NULL,'EPSG','4497','ESRI','104746','ESRI','103741',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103754_USAGE','projected_crs','ESRI','103754','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103755','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.77388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.2,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.85,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.26666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103755_USAGE','conversion','ESRI','103755','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103755','NAD_1983_HARN_Adj_MN_Morrison_Feet',NULL,'EPSG','4497','ESRI','104747','ESRI','103755',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103755_USAGE','projected_crs','ESRI','103755','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103756','NAD_1983_HARN_Adj_MN_Mower_Feet',NULL,'EPSG','4497','ESRI','104748','ESRI','103729',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103756_USAGE','projected_crs','ESRI','103756','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103757','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84805555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.76666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.91666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.16666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103757_USAGE','conversion','ESRI','103757','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103757','NAD_1983_HARN_Adj_MN_Murray_Feet',NULL,'EPSG','4497','ESRI','104749','ESRI','103757',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103757_USAGE','projected_crs','ESRI','103757','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103758','NAD_1983_HARN_Adj_MN_Nicollet_Feet',NULL,'EPSG','4497','ESRI','104750','ESRI','103714',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103758_USAGE','projected_crs','ESRI','103758','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103759','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.5,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.95,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.8,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103759_USAGE','conversion','ESRI','103759','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103759','NAD_1983_HARN_Adj_MN_Nobles_Feet',NULL,'EPSG','4497','ESRI','104751','ESRI','103759',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103759_USAGE','projected_crs','ESRI','103759','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103760','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.15055555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.2,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.45,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103760_USAGE','conversion','ESRI','103760','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103760','NAD_1983_HARN_Adj_MN_Norman_Feet',NULL,'EPSG','4497','ESRI','104752','ESRI','103760',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103760_USAGE','projected_crs','ESRI','103760','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103761','NAD_1983_HARN_Adj_MN_Olmsted_Feet',NULL,'EPSG','4497','ESRI','104753','ESRI','103727',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103761_USAGE','projected_crs','ESRI','103761','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103762','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.10638888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.71666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.65,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103762_USAGE','conversion','ESRI','103762','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103762','NAD_1983_HARN_Adj_MN_Ottertail_Feet',NULL,'EPSG','4497','ESRI','104754','ESRI','103762',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103762_USAGE','projected_crs','ESRI','103762','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103763','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.49888888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.36666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.6,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103763_USAGE','conversion','ESRI','103763','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103763','NAD_1983_HARN_Adj_MN_Pennington_Feet',NULL,'EPSG','4497','ESRI','104755','ESRI','103763',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103763_USAGE','projected_crs','ESRI','103763','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103764','NAD_1983_HARN_Adj_MN_Pine_Feet',NULL,'EPSG','4497','ESRI','104756','ESRI','103740',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103764_USAGE','projected_crs','ESRI','103764','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103765','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84916666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.25,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.88333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.15,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103765_USAGE','conversion','ESRI','103765','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103765','NAD_1983_HARN_Adj_MN_Pipestone_Feet',NULL,'EPSG','4497','ESRI','104757','ESRI','103765',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103765_USAGE','projected_crs','ESRI','103765','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103766','NAD_1983_HARN_Adj_MN_Polk_Feet',NULL,'EPSG','4497','ESRI','104758','ESRI','103763',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103766_USAGE','projected_crs','ESRI','103766','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103767','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.28277777777777,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.15,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.35,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.7,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103767_USAGE','conversion','ESRI','103767','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103767','NAD_1983_HARN_Adj_MN_Pope_Feet',NULL,'EPSG','4497','ESRI','104759','ESRI','103767',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103767_USAGE','projected_crs','ESRI','103767','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103768','NAD_1983_HARN_Adj_MN_Ramsey_Feet',NULL,'EPSG','4497','ESRI','104760','ESRI','103734',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103768_USAGE','projected_crs','ESRI','103768','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103769','NAD_1983_HARN_Adj_MN_Red_Lake_Feet',NULL,'EPSG','4497','ESRI','104761','ESRI','103763',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103769_USAGE','projected_crs','ESRI','103769','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103770','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.19472222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.23333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.26666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.56666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103770_USAGE','conversion','ESRI','103770','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103770','NAD_1983_HARN_Adj_MN_Redwood_Feet',NULL,'EPSG','4497','ESRI','104762','ESRI','103770',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103770_USAGE','projected_crs','ESRI','103770','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103771','NAD_1983_HARN_Adj_MN_Renville_Feet',NULL,'EPSG','4497','ESRI','104763','ESRI','103750',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103771_USAGE','projected_crs','ESRI','103771','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103772','NAD_1983_HARN_Adj_MN_Rice_Feet',NULL,'EPSG','4497','ESRI','104764','ESRI','103732',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103772_USAGE','projected_crs','ESRI','103772','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103773','NAD_1983_HARN_Adj_MN_Rock_Feet',NULL,'EPSG','4497','ESRI','104765','ESRI','103759',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103773_USAGE','projected_crs','ESRI','103773','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103774','NAD_1983_HARN_Adj_MN_Roseau_Feet',NULL,'EPSG','4497','ESRI','104766','ESRI','103742',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103774_USAGE','projected_crs','ESRI','103774','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103775','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.83333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.98333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.53333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103775_USAGE','conversion','ESRI','103775','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103775','NAD_1983_HARN_Adj_MN_St_Louis_North_Feet',NULL,'EPSG','4497','ESRI','104767','ESRI','103775',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103775_USAGE','projected_crs','ESRI','103775','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103776','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.25,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.75,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103776_USAGE','conversion','ESRI','103776','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103776','NAD_1983_HARN_Adj_MN_St_Louis_Central_Feet',NULL,'EPSG','4497','ESRI','104768','ESRI','103776',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103776_USAGE','projected_crs','ESRI','103776','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103777','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.65,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.78333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103777_USAGE','conversion','ESRI','103777','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103777','NAD_1983_HARN_Adj_MN_St_Louis_South_Feet',NULL,'EPSG','4497','ESRI','104769','ESRI','103777',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103777_USAGE','projected_crs','ESRI','103777','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103778','NAD_1983_HARN_Adj_MN_Scott_Feet',NULL,'EPSG','4497','ESRI','104770','ESRI','103726',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103778_USAGE','projected_crs','ESRI','103778','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103779','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.9775,'EPSG','9102','EPSG','8822','Longitude of false origin',-93.88333333333334,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.03333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.46666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103779_USAGE','conversion','ESRI','103779','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103779','NAD_1983_HARN_Adj_MN_Sherburne_Feet',NULL,'EPSG','4497','ESRI','104771','ESRI','103779',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103779_USAGE','projected_crs','ESRI','103779','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103780','NAD_1983_HARN_Adj_MN_Sibley_Feet',NULL,'EPSG','4497','ESRI','104772','ESRI','103750',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103780_USAGE','projected_crs','ESRI','103780','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103781','NAD_1983_HARN_Adj_MN_Stearns_Feet',NULL,'EPSG','4497','ESRI','104773','ESRI','103767',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103781_USAGE','projected_crs','ESRI','103781','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103782','NAD_1983_HARN_Adj_MN_Steele_Feet',NULL,'EPSG','4497','ESRI','104774','ESRI','103727',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103782_USAGE','projected_crs','ESRI','103782','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103783','NAD_1983_HARN_Adj_MN_Stevens_Feet',NULL,'EPSG','4497','ESRI','104775','ESRI','103767',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103783_USAGE','projected_crs','ESRI','103783','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103784','NAD_1983_HARN_Adj_MN_Swift_Feet',NULL,'EPSG','4497','ESRI','104776','ESRI','103713',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103784_USAGE','projected_crs','ESRI','103784','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103785','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.77333333333333,'EPSG','9102','EPSG','8822','Longitude of false origin',-94.9,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.86666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.28333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103785_USAGE','conversion','ESRI','103785','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103785','NAD_1983_HARN_Adj_MN_Todd_Feet',NULL,'EPSG','4497','ESRI','104777','ESRI','103785',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103785_USAGE','projected_crs','ESRI','103785','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103786','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.58555555555556,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.55,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.63333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.96666666666667,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103786_USAGE','conversion','ESRI','103786','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103786','NAD_1983_HARN_Adj_MN_Traverse_Feet',NULL,'EPSG','4497','ESRI','104778','ESRI','103786',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103786_USAGE','projected_crs','ESRI','103786','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103787','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.10694444444444,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.26666666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.15,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.41666666666666,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103787_USAGE','conversion','ESRI','103787','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103787','NAD_1983_HARN_Adj_MN_Wabasha_Feet',NULL,'EPSG','4497','ESRI','104779','ESRI','103787',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103787_USAGE','projected_crs','ESRI','103787','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103788','NAD_1983_HARN_Adj_MN_Wadena_Feet',NULL,'EPSG','4497','ESRI','104780','ESRI','103719',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103788_USAGE','projected_crs','ESRI','103788','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103789','NAD_1983_HARN_Adj_MN_Waseca_Feet',NULL,'EPSG','4497','ESRI','104781','ESRI','103727',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103789_USAGE','projected_crs','ESRI','103789','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103790','NAD_1983_HARN_Adj_MN_Watonwan_Feet',NULL,'EPSG','4497','ESRI','104782','ESRI','103724',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103790_USAGE','projected_crs','ESRI','103790','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103791','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.84722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.61666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.9,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.13333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103791_USAGE','conversion','ESRI','103791','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103791','NAD_1983_HARN_Adj_MN_Winona_Feet',NULL,'EPSG','4497','ESRI','104783','ESRI','103791',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103791_USAGE','projected_crs','ESRI','103791','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103792','NAD_1983_HARN_Adj_MN_Wright_Feet',NULL,'EPSG','4497','ESRI','104784','ESRI','103779',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103792_USAGE','projected_crs','ESRI','103792','EPSG','1392','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103793','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.54166666666666,'EPSG','9102','EPSG','8822','Longitude of false origin',-95.9,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.95,'EPSG','9102','EPSG','8826','Easting at false origin',500000.0,'EPSG','9003','EPSG','8827','Northing at false origin',100000.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103793_USAGE','conversion','ESRI','103793','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103793','NAD_1983_HARN_Adj_MN_Yellow_Medicine_Feet',NULL,'EPSG','4497','ESRI','104785','ESRI','103793',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103793_USAGE','projected_crs','ESRI','103793','EPSG','1392','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103794','Mexican_Datum_1993_UTM_Zone_11N',NULL,'EPSG','4400','EPSG','4483','EPSG','16011',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103794_USAGE','projected_crs','ESRI','103794','EPSG','3423','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103795','Mexican_Datum_1993_UTM_Zone_12N',NULL,'EPSG','4400','EPSG','4483','EPSG','16012',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103795_USAGE','projected_crs','ESRI','103795','EPSG','3424','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103796','Mexican_Datum_1993_UTM_Zone_13N',NULL,'EPSG','4400','EPSG','4483','EPSG','16013',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103796_USAGE','projected_crs','ESRI','103796','EPSG','3425','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103797','Mexican_Datum_1993_UTM_Zone_14N',NULL,'EPSG','4400','EPSG','4483','EPSG','16014',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103797_USAGE','projected_crs','ESRI','103797','EPSG','3426','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103798','Mexican_Datum_1993_UTM_Zone_15N',NULL,'EPSG','4400','EPSG','4483','EPSG','16015',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103798_USAGE','projected_crs','ESRI','103798','EPSG','3633','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103799','Mexican_Datum_1993_UTM_Zone_16N',NULL,'EPSG','4400','EPSG','4483','EPSG','16016',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103799_USAGE','projected_crs','ESRI','103799','EPSG','3635','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103800','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.36666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999999,'EPSG','9201','EPSG','8806','False easting',147218.6944373889,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103800_USAGE','conversion','ESRI','103800','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103800','NAD_1983_HARN_Adj_WI_Adams_Meters',NULL,'EPSG','4400','ESRI','104800','ESRI','103800',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103800_USAGE','projected_crs','ESRI','103800','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103801','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.70611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.62222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',172821.9456438913,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103801_USAGE','conversion','ESRI','103801','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103801','NAD_1983_HARN_Adj_WI_Ashland_Meters',NULL,'EPSG','4400','ESRI','104801','ESRI','103801',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103801_USAGE','projected_crs','ESRI','103801','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103802','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.13333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.85,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',93150.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103802_USAGE','conversion','ESRI','103802','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103802','NAD_1983_HARN_Adj_WI_Barron_Meters',NULL,'EPSG','4400','ESRI','104802','ESRI','103802',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103802_USAGE','projected_crs','ESRI','103802','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103803','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',31599.99998984,'EPSG','9001','EPSG','8807','False northing',4599.98983997968,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103803_USAGE','conversion','ESRI','103803','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103803','NAD_1983_HARN_Adj_WI_Brown_Meters',NULL,'EPSG','4400','ESRI','104804','ESRI','103803',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103803_USAGE','projected_crs','ESRI','103803','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103804','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.48138888888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.79722222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',175260.3505207011,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103804_USAGE','conversion','ESRI','103804','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103804','NAD_1983_HARN_Adj_WI_Buffalo_Meters',NULL,'EPSG','4400','ESRI','104805','ESRI','103804',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103804_USAGE','projected_crs','ESRI','103804','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103805','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.71944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',244754.8895097791,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103805_USAGE','conversion','ESRI','103805','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103805','NAD_1983_HARN_Adj_WI_Calumet_Meters',NULL,'EPSG','4400','ESRI','104807','ESRI','103805',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103805_USAGE','projected_crs','ESRI','103805','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103806','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.6,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.70833333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999994,'EPSG','9201','EPSG','8806','False easting',199949.1998984,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103806_USAGE','conversion','ESRI','103806','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103806','NAD_1983_HARN_Adj_WI_Clark_Meters',NULL,'EPSG','4400','ESRI','104809','ESRI','103806',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103806_USAGE','projected_crs','ESRI','103806','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103807','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.47222222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.775,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',263347.7266954534,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103807_USAGE','conversion','ESRI','103807','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103807','NAD_1983_HARN_Adj_WI_Dodge_Meters',NULL,'EPSG','4400','ESRI','104813','ESRI','103807',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103807_USAGE','projected_crs','ESRI','103807','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103808','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.4,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.27222222222223,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999991,'EPSG','9201','EPSG','8806','False easting',158801.1176022352,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103808_USAGE','conversion','ESRI','103808','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103808','NAD_1983_HARN_Adj_WI_Door_Meters',NULL,'EPSG','4400','ESRI','104814','ESRI','103808',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103808_USAGE','projected_crs','ESRI','103808','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103809','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.88333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.91666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',59131.31826263653,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103809_USAGE','conversion','ESRI','103809','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103809','NAD_1983_HARN_Adj_WI_Douglas_Meters',NULL,'EPSG','4400','ESRI','104815','ESRI','103809',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103809_USAGE','projected_crs','ESRI','103809','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103810','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.40833333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',51816.10363220727,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103810_USAGE','conversion','ESRI','103810','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103810','NAD_1983_HARN_Adj_WI_Dunn_Meters',NULL,'EPSG','4400','ESRI','104816','ESRI','103810',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103810_USAGE','projected_crs','ESRI','103810','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103811','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.14166666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999993,'EPSG','9201','EPSG','8806','False easting',133502.667005334,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103811_USAGE','conversion','ESRI','103811','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103811','NAD_1983_HARN_Adj_WI_Florence_Meters',NULL,'EPSG','4400','ESRI','104818','ESRI','103811',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103811_USAGE','projected_crs','ESRI','103811','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103812','NAD_1983_HARN_Adj_WI_Fond_du_Lac_Meters',NULL,'EPSG','4400','ESRI','104819','ESRI','103805',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103812_USAGE','projected_crs','ESRI','103812','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103813','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.00555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',275844.5516891034,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103813_USAGE','conversion','ESRI','103813','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103813','NAD_1983_HARN_Adj_WI_Forest_Meters',NULL,'EPSG','4400','ESRI','104820','ESRI','103813',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103813_USAGE','projected_crs','ESRI','103813','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103814','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.41111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.8,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',242316.4846329693,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103814_USAGE','conversion','ESRI','103814','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103814','NAD_1983_HARN_Adj_WI_Grant_Meters',NULL,'EPSG','4400','ESRI','104821','ESRI','103814',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103814_USAGE','projected_crs','ESRI','103814','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103815','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.53888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',113081.0261620523,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103815_USAGE','conversion','ESRI','103815','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103815','NAD_1983_HARN_Adj_WI_Iowa_Meters',NULL,'EPSG','4400','ESRI','104824','ESRI','103815',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103815_USAGE','projected_crs','ESRI','103815','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103816','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.25555555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',220980.4419608839,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103816_USAGE','conversion','ESRI','103816','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103816','NAD_1983_HARN_Adj_WI_Iron_Meters',NULL,'EPSG','4400','ESRI','104825','ESRI','103816',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103816_USAGE','projected_crs','ESRI','103816','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103817','NAD_1983_HARN_Adj_WI_Jefferson_Meters',NULL,'EPSG','4400','ESRI','104827','ESRI','103807',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103817_USAGE','projected_crs','ESRI','103817','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103818','NAD_1983_HARN_Adj_WI_Juneau_Meters',NULL,'EPSG','4400','ESRI','104828','ESRI','103800',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103818_USAGE','projected_crs','ESRI','103818','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103819','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.21666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',185928.3718567437,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103819_USAGE','conversion','ESRI','103819','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103819','NAD_1983_HARN_Adj_WI_Kenosha_Meters',NULL,'EPSG','4400','ESRI','104829','ESRI','103819',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103819_USAGE','projected_crs','ESRI','103819','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103820','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.26666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.55,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',79857.75971551944,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103820_USAGE','conversion','ESRI','103820','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103820','NAD_1983_HARN_Adj_WI_Kewaunee_Meters',NULL,'EPSG','4400','ESRI','104830','ESRI','103820',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103820_USAGE','projected_crs','ESRI','103820','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103821','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.45111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.31666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999994,'EPSG','9201','EPSG','8806','False easting',130454.6609093218,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103821_USAGE','conversion','ESRI','103821','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103821','NAD_1983_HARN_Adj_WI_LaCrosse_Meters',NULL,'EPSG','4400','ESRI','104831','ESRI','103821',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103821_USAGE','projected_crs','ESRI','103821','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103822','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.84444444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.73333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',116129.0322580645,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103822_USAGE','conversion','ESRI','103822','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103822','NAD_1983_HARN_Adj_WI_Lincoln_Meters',NULL,'EPSG','4400','ESRI','104834','ESRI','103822',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103822_USAGE','projected_crs','ESRI','103822','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103823','NAD_1983_HARN_Adj_WI_Manitowoc_Meters',NULL,'EPSG','4400','ESRI','104835','ESRI','103820',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103823_USAGE','projected_crs','ESRI','103823','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103824','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.69166666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.71111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999986,'EPSG','9201','EPSG','8806','False easting',238658.8773177547,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103824_USAGE','conversion','ESRI','103824','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103824','NAD_1983_HARN_Adj_WI_Marinette_Meters',NULL,'EPSG','4400','ESRI','104837','ESRI','103824',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103824_USAGE','projected_crs','ESRI','103824','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103825','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.71666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999994,'EPSG','9201','EPSG','8806','False easting',105461.0109220219,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103825_USAGE','conversion','ESRI','103825','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103825','NAD_1983_HARN_Adj_WI_Menominee_Meters',NULL,'EPSG','4400','ESRI','104839','ESRI','103825',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103825_USAGE','projected_crs','ESRI','103825','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103826','NAD_1983_HARN_Adj_WI_Milwaukee_Meters',NULL,'EPSG','4400','ESRI','104840','ESRI','103819',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103826_USAGE','projected_crs','ESRI','103826','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103827','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.39722222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.90833333333335,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999991,'EPSG','9201','EPSG','8806','False easting',182880.3657607315,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103827_USAGE','conversion','ESRI','103827','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103827','NAD_1983_HARN_Adj_WI_Oconto_Meters',NULL,'EPSG','4400','ESRI','104842','ESRI','103827',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103827_USAGE','projected_crs','ESRI','103827','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103828','NAD_1983_HARN_Adj_WI_Outagamie_Meters',NULL,'EPSG','4400','ESRI','104844','ESRI','103805',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103828_USAGE','projected_crs','ESRI','103828','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103829','NAD_1983_HARN_Adj_WI_Ozaukee_Meters',NULL,'EPSG','4400','ESRI','104845','ESRI','103819',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103829_USAGE','projected_crs','ESRI','103829','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103830','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.66111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',141732.283464567,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103830_USAGE','conversion','ESRI','103830','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103830','NAD_1983_HARN_Adj_WI_Polk_Meters',NULL,'EPSG','4400','ESRI','104848','ESRI','103830',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103830_USAGE','projected_crs','ESRI','103830','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103831','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.55555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.48888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',227990.855981712,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103831_USAGE','conversion','ESRI','103831','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103831','NAD_1983_HARN_Adj_WI_Price_Meters',NULL,'EPSG','4400','ESRI','104850','ESRI','103831',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103831_USAGE','projected_crs','ESRI','103831','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103832','NAD_1983_HARN_Adj_WI_Racine_Meters',NULL,'EPSG','4400','ESRI','104851','ESRI','103819',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103832_USAGE','projected_crs','ESRI','103832','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103833','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.94444444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.07222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',146304.2926085852,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103833_USAGE','conversion','ESRI','103833','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103833','NAD_1983_HARN_Adj_WI_Rock_Meters',NULL,'EPSG','4400','ESRI','104853','ESRI','103833',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103833_USAGE','projected_crs','ESRI','103833','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103834','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.91944444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.06666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',250546.1010922022,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103834_USAGE','conversion','ESRI','103834','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103834','NAD_1983_HARN_Adj_WI_Rusk_Meters',NULL,'EPSG','4400','ESRI','104854','ESRI','103834',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103834_USAGE','projected_crs','ESRI','103834','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103835','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',165506.731013462,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103835_USAGE','conversion','ESRI','103835','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103835','NAD_1983_HARN_Adj_WI_St_Croix_Meters',NULL,'EPSG','4400','ESRI','104855','ESRI','103835',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103835_USAGE','projected_crs','ESRI','103835','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103836','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.81944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.9,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',185623.5712471425,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103836_USAGE','conversion','ESRI','103836','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103836','NAD_1983_HARN_Adj_WI_Sauk_Meters',NULL,'EPSG','4400','ESRI','104856','ESRI','103836',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103836_USAGE','projected_crs','ESRI','103836','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103837','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.60555555555555,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',262433.3248666498,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103837_USAGE','conversion','ESRI','103837','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103837','NAD_1983_HARN_Adj_WI_Shawano_Meters',NULL,'EPSG','4400','ESRI','104858','ESRI','103837',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103837_USAGE','projected_crs','ESRI','103837','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103838','NAD_1983_HARN_Adj_WI_Sheboygan_Meters',NULL,'EPSG','4400','ESRI','104859','ESRI','103820',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103838_USAGE','projected_crs','ESRI','103838','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103839','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.16111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.36666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',256946.9138938278,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103839_USAGE','conversion','ESRI','103839','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103839','NAD_1983_HARN_Adj_WI_Trempealeau_Meters',NULL,'EPSG','4400','ESRI','104861','ESRI','103839',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103839_USAGE','projected_crs','ESRI','103839','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103840','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.91805555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.06388888888888,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',120091.4401828804,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103840_USAGE','conversion','ESRI','103840','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103840','NAD_1983_HARN_Adj_WI_Washington_Meters',NULL,'EPSG','4400','ESRI','104866','ESRI','103840',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103840_USAGE','projected_crs','ESRI','103840','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103841','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.56944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.225,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',208788.4175768352,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103841_USAGE','conversion','ESRI','103841','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103841','NAD_1983_HARN_Adj_WI_Waukesha_Meters',NULL,'EPSG','4400','ESRI','104867','ESRI','103841',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103841_USAGE','projected_crs','ESRI','103841','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103842','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.42027777777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.81666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',185013.9700279401,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103842_USAGE','conversion','ESRI','103842','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103842','NAD_1983_HARN_Adj_WI_Waupaca_Meters',NULL,'EPSG','4400','ESRI','104868','ESRI','103842',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103842_USAGE','projected_crs','ESRI','103842','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103843','NAD_1983_HARN_Adj_WI_Winnebago_Meters',NULL,'EPSG','4400','ESRI','104870','ESRI','103805',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103843_USAGE','projected_crs','ESRI','103843','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103844','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.15277777777779,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.41388888888888,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.925,'EPSG','9102','EPSG','8826','Easting at false origin',228600.4572009144,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103844_USAGE','conversion','ESRI','103844','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103844','NAD_1983_HARN_Adj_WI_Bayfield_Meters',NULL,'EPSG','4400','ESRI','104803','ESRI','103844',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103844_USAGE','projected_crs','ESRI','103844','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103845','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.36388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45777777777778,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.71388888888889,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',64008.12801625604,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103845_USAGE','conversion','ESRI','103845','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103845','NAD_1983_HARN_Adj_WI_Burnett_Meters',NULL,'EPSG','4400','ESRI','104806','ESRI','103845',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103845_USAGE','projected_crs','ESRI','103845','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103846','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.58111111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.29444444444444,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.81388888888888,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.14166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',60045.72009144019,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103846_USAGE','conversion','ESRI','103846','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103846','NAD_1983_HARN_Adj_WI_Chippewa_Meters',NULL,'EPSG','4400','ESRI','104808','ESRI','103846',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103846_USAGE','projected_crs','ESRI','103846','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103847','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.45833333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.39444444444445,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.59166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',169164.3383286767,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103847_USAGE','conversion','ESRI','103847','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103847','NAD_1983_HARN_Adj_WI_Columbia_Meters',NULL,'EPSG','4400','ESRI','104810','ESRI','103847',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103847_USAGE','projected_crs','ESRI','103847','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103848','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.71666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.9388888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.05833333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.34166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',113690.6273812548,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103848_USAGE','conversion','ESRI','103848','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103848','NAD_1983_HARN_Adj_WI_Crawford_Meters',NULL,'EPSG','4400','ESRI','104811','ESRI','103848',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103848_USAGE','projected_crs','ESRI','103848','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103849','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.42222222222223,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.90833333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.23055555555555,'EPSG','9102','EPSG','8826','Easting at false origin',247193.2943865888,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103849_USAGE','conversion','ESRI','103849','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103849','NAD_1983_HARN_Adj_WI_Dane_Meters',NULL,'EPSG','4400','ESRI','104812','ESRI','103849',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103849_USAGE','projected_crs','ESRI','103849','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103850','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.04722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.28888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.73055555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.01388888888889,'EPSG','9102','EPSG','8826','Easting at false origin',120091.4401828804,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103850_USAGE','conversion','ESRI','103850','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103850','NAD_1983_HARN_Adj_WI_EauClaire_Meters',NULL,'EPSG','4400','ESRI','104817','ESRI','103850',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103850_USAGE','projected_crs','ESRI','103850','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103851','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.225,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.83888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.48611111111111,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.78888888888888,'EPSG','9102','EPSG','8826','Easting at false origin',170078.7401574803,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103851_USAGE','conversion','ESRI','103851','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103851','NAD_1983_HARN_Adj_WI_Green_Meters',NULL,'EPSG','4400','ESRI','104822','ESRI','103851',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103851_USAGE','projected_crs','ESRI','103851','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103852','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.09444444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.24166666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.94722222222222,'EPSG','9102','EPSG','8826','Easting at false origin',150876.3017526035,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103852_USAGE','conversion','ESRI','103852','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103852','NAD_1983_HARN_Adj_WI_GreenLake_Meters',NULL,'EPSG','4400','ESRI','104823','ESRI','103852',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103852_USAGE','projected_crs','ESRI','103852','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103853','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.79444444444444,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.73888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.16388888888888,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.41944444444444,'EPSG','9102','EPSG','8826','Easting at false origin',125882.6517653035,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103853_USAGE','conversion','ESRI','103853','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103853','NAD_1983_HARN_Adj_WI_Jackson_Meters',NULL,'EPSG','4400','ESRI','104826','ESRI','103853',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103853_USAGE','projected_crs','ESRI','103853','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103854','NAD_1983_HARN_Adj_WI_Lafayette_Meters',NULL,'EPSG','4400','ESRI','104832','ESRI','103851',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103854_USAGE','projected_crs','ESRI','103854','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103855','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.20694444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.03333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.30833333333333,'EPSG','9102','EPSG','8826','Easting at false origin',198425.1968503937,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103855_USAGE','conversion','ESRI','103855','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103855','NAD_1983_HARN_Adj_WI_Langlade_Meters',NULL,'EPSG','4400','ESRI','104833','ESRI','103855',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103855_USAGE','projected_crs','ESRI','103855','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103856','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.40555555555555,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.77,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.74527777777778,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.05638888888888,'EPSG','9102','EPSG','8826','Easting at false origin',74676.14935229871,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103856_USAGE','conversion','ESRI','103856','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103856','NAD_1983_HARN_Adj_WI_Marathon_Meters',NULL,'EPSG','4400','ESRI','104836','ESRI','103856',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103856_USAGE','projected_crs','ESRI','103856','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103857','NAD_1983_HARN_Adj_WI_Marquette_Meters',NULL,'EPSG','4400','ESRI','104838','ESRI','103852',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103857_USAGE','projected_crs','ESRI','103857','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103858','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.90277777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.64166666666668,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.83888888888889,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.16111111111111,'EPSG','9102','EPSG','8826','Easting at false origin',204521.2090424181,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103858_USAGE','conversion','ESRI','103858','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103858','NAD_1983_HARN_Adj_WI_Monroe_Meters',NULL,'EPSG','4400','ESRI','104841','ESRI','103858',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103858_USAGE','projected_crs','ESRI','103858','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103859','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.18611111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.54444444444444,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.84166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',70104.14020828043,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103859_USAGE','conversion','ESRI','103859','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103859','NAD_1983_HARN_Adj_WI_Oneida_Meters',NULL,'EPSG','4400','ESRI','104843','ESRI','103859',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103859_USAGE','projected_crs','ESRI','103859','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103860','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.86194444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.22777777777777,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.52222222222222,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.75,'EPSG','9102','EPSG','8826','Easting at false origin',167640.3352806706,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103860_USAGE','conversion','ESRI','103860','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103860','NAD_1983_HARN_Adj_WI_Pepin_Meters',NULL,'EPSG','4400','ESRI','104846','ESRI','103860',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103860_USAGE','projected_crs','ESRI','103860','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103861','NAD_1983_HARN_Adj_WI_Pierce_Meters',NULL,'EPSG','4400','ESRI','104847','ESRI','103860',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103861_USAGE','projected_crs','ESRI','103861','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103862','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.96666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.65,'EPSG','9102','EPSG','8826','Easting at false origin',56388.11277622556,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103862_USAGE','conversion','ESRI','103862','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103862','NAD_1983_HARN_Adj_WI_Portage_Meters',NULL,'EPSG','4400','ESRI','104849','ESRI','103862',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103862_USAGE','projected_crs','ESRI','103862','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103863','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.11388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.43055555555556,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.14166666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.50277777777778,'EPSG','9102','EPSG','8826','Easting at false origin',202387.6047752096,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103863_USAGE','conversion','ESRI','103863','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103863','NAD_1983_HARN_Adj_WI_Richland_Meters',NULL,'EPSG','4400','ESRI','104852','ESRI','103863',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103863_USAGE','projected_crs','ESRI','103863','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103864','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.81388888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.11666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.71944444444445,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.08055555555556,'EPSG','9102','EPSG','8826','Easting at false origin',216713.2334264669,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103864_USAGE','conversion','ESRI','103864','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103864','NAD_1983_HARN_Adj_WI_Sawyer_Meters',NULL,'EPSG','4400','ESRI','104857','ESRI','103864',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103864_USAGE','projected_crs','ESRI','103864','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103865','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.20833333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.48333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.05555555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.3,'EPSG','9102','EPSG','8826','Easting at false origin',187147.5742951486,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103865_USAGE','conversion','ESRI','103865','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103865','NAD_1983_HARN_Adj_WI_Taylor_Meters',NULL,'EPSG','4400','ESRI','104860','ESRI','103865',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103865_USAGE','projected_crs','ESRI','103865','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103866','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.14722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.78333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.46666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',222504.44500889,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103866_USAGE','conversion','ESRI','103866','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103866','NAD_1983_HARN_Adj_WI_Vernon_Meters',NULL,'EPSG','4400','ESRI','104862','ESRI','103866',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103866_USAGE','projected_crs','ESRI','103866','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103867','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.625,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.48888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.93055555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.225,'EPSG','9102','EPSG','8826','Easting at false origin',134417.0688341377,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103867_USAGE','conversion','ESRI','103867','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103867','NAD_1983_HARN_Adj_WI_Vilas_Meters',NULL,'EPSG','4400','ESRI','104863','ESRI','103867',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103867_USAGE','projected_crs','ESRI','103867','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103868','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.66944444444444,'EPSG','9102','EPSG','8822','Longitude of false origin',-88.54166666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.58888888888889,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.75,'EPSG','9102','EPSG','8826','Easting at false origin',232562.8651257303,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103868_USAGE','conversion','ESRI','103868','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103868','NAD_1983_HARN_Adj_WI_Walworth_Meters',NULL,'EPSG','4400','ESRI','104864','ESRI','103868',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103868_USAGE','projected_crs','ESRI','103868','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103869','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.26666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.78333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.77222222222222,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.15,'EPSG','9102','EPSG','8826','Easting at false origin',234086.8681737364,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103869_USAGE','conversion','ESRI','103869','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103869','NAD_1983_HARN_Adj_WI_Washburn_Meters',NULL,'EPSG','4400','ESRI','104865','ESRI','103869',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103869_USAGE','projected_crs','ESRI','103869','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103870','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.70833333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.24166666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.975,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.25277777777778,'EPSG','9102','EPSG','8826','Easting at false origin',120091.4401828804,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103870_USAGE','conversion','ESRI','103870','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103870','NAD_1983_HARN_Adj_WI_Waushara_Meters',NULL,'EPSG','4400','ESRI','104869','ESRI','103870',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103870_USAGE','projected_crs','ESRI','103870','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103871','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.15138888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18055555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.54444444444444,'EPSG','9102','EPSG','8826','Easting at false origin',208483.616967234,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103871_USAGE','conversion','ESRI','103871','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103871','NAD_1983_HARN_Adj_WI_Wood_Meters',NULL,'EPSG','4400','ESRI','104871','ESRI','103871',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103871_USAGE','projected_crs','ESRI','103871','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103872','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-20.2755163,'EPSG','9102','EPSG','8822','Longitude of false origin',57.56455662222222,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-20.06111111111111,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-20.44444444444445,'EPSG','9102','EPSG','8826','Easting at false origin',250000.0,'EPSG','9001','EPSG','8827','Northing at false origin',350000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103872_USAGE','conversion','ESRI','103872','EPSG','1158','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103872','GDM2008_LGM2012',NULL,'EPSG','4400','ESRI','104028','ESRI','103872',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103872_USAGE','projected_crs','ESRI','103872','EPSG','1158','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103873','NAD_1983_(CSRS)_v6_UTM_Zone_15N',NULL,'EPSG','4400','EPSG','8252','EPSG','16015',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103873_USAGE','projected_crs','ESRI','103873','EPSG','3414','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103874','NAD_1983_(CSRS)_v6_UTM_Zone_16N',NULL,'EPSG','4400','EPSG','8252','EPSG','16016',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103874_USAGE','projected_crs','ESRI','103874','EPSG','3415','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103875','NAD_1983_(CSRS)_v6_UTM_Zone_17N',NULL,'EPSG','4400','EPSG','8252','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103875_USAGE','projected_crs','ESRI','103875','EPSG','3416','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103876','NAD_1983_(CSRS)_v6_UTM_Zone_18N',NULL,'EPSG','4400','EPSG','8252','EPSG','16018',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103876_USAGE','projected_crs','ESRI','103876','EPSG','3417','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103877','Moon_2000_North_Pole_Stereographic',NULL,NULL,NULL,'ESRI','104903',NULL,NULL,'PROJCS["Moon_2000_North_Pole_Stereographic",GEOGCS["GCS_Moon_2000",DATUM["D_Moon_2000",SPHEROID["Moon_2000_IAU_IAG",1737400.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103877_USAGE','projected_crs','ESRI','103877','EPSG','1996','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103878','Moon_2000_South_Pole_Stereographic',NULL,NULL,NULL,'ESRI','104903',NULL,NULL,'PROJCS["Moon_2000_South_Pole_Stereographic",GEOGCS["GCS_Moon_2000",DATUM["D_Moon_2000",SPHEROID["Moon_2000_IAU_IAG",1737400.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103878_USAGE','projected_crs','ESRI','103878','EPSG','1997','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','174','Moon - Far Side','Moon - Far Side',-90.0,90.0,90.0,-90.0,0); INSERT INTO "projected_crs" VALUES('ESRI','103879','Moon_2000_Far_Side_Lambert_Azimuthal_Equal_Area',NULL,NULL,NULL,'ESRI','104903',NULL,NULL,'PROJCS["Moon_2000_Far_Side_Lambert_Azimuthal_Equal_Area",GEOGCS["GCS_Moon_2000",DATUM["D_Moon_2000",SPHEROID["Moon_2000_IAU_IAG",1737400.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",180.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103879_USAGE','projected_crs','ESRI','103879','ESRI','174','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','175','Moon - Near Side','Moon - Near Side',-90.0,90.0,-90.0,90.0,0); INSERT INTO "projected_crs" VALUES('ESRI','103880','Moon_2000_Near_Side_Lambert_Azimuthal_Equal_Area',NULL,NULL,NULL,'ESRI','104903',NULL,NULL,'PROJCS["Moon_2000_Near_Side_Lambert_Azimuthal_Equal_Area",GEOGCS["GCS_Moon_2000",DATUM["D_Moon_2000",SPHEROID["Moon_2000_IAU_IAG",1737400.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103880_USAGE','projected_crs','ESRI','103880','ESRI','175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103881','Moon_2000_Equidistant_Cylindrical',NULL,NULL,NULL,'ESRI','104903',NULL,NULL,'PROJCS["Moon_2000_Equidistant_Cylindrical",GEOGCS["GCS_Moon_2000",DATUM["D_Moon_2000",SPHEROID["Moon_2000_IAU_IAG",1737400.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Cylindrical_Ellipsoidal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103881_USAGE','projected_crs','ESRI','103881','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103882','Moon_2000_Sinusoidal',NULL,NULL,NULL,'ESRI','104903',NULL,NULL,'PROJCS["Moon_2000_Sinusoidal",GEOGCS["GCS_Moon_2000",DATUM["D_Moon_2000",SPHEROID["Moon_2000_IAU_IAG",1737400.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Sinusoidal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103882_USAGE','projected_crs','ESRI','103882','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103883','Mars_2000_North_Pole_Stereographic_sphere',NULL,NULL,NULL,'ESRI','104971',NULL,NULL,'PROJCS["Mars_2000_North_Pole_Stereographic_sphere",GEOGCS["Mars_2000_(Sphere)",DATUM["Mars_2000_(Sphere)",SPHEROID["Mars_2000_(Sphere)",3396190.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103883_USAGE','projected_crs','ESRI','103883','EPSG','1996','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103884','Mars_2000_South_Pole_Stereographic_sphere',NULL,NULL,NULL,'ESRI','104971',NULL,NULL,'PROJCS["Mars_2000_South_Pole_Stereographic_sphere",GEOGCS["Mars_2000_(Sphere)",DATUM["Mars_2000_(Sphere)",SPHEROID["Mars_2000_(Sphere)",3396190.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Stereographic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",-90.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103884_USAGE','projected_crs','ESRI','103884','EPSG','1997','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103885','Mars_2000_Equidistant_Cylindrical_sphere',NULL,NULL,NULL,'ESRI','104971',NULL,NULL,'PROJCS["Mars_2000_Equidistant_Cylindrical_sphere",GEOGCS["Mars_2000_(Sphere)",DATUM["Mars_2000_(Sphere)",SPHEROID["Mars_2000_(Sphere)",3396190.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equidistant_Cylindrical_Ellipsoidal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103885_USAGE','projected_crs','ESRI','103885','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103886','Mars_2000_Sinusoidal_sphere',NULL,NULL,NULL,'ESRI','104971',NULL,NULL,'PROJCS["Mars_2000_Sinusoidal_sphere",GEOGCS["Mars_2000_(Sphere)",DATUM["Mars_2000_(Sphere)",SPHEROID["Mars_2000_(Sphere)",3396190.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Sinusoidal"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103886_USAGE','projected_crs','ESRI','103886','EPSG','1262','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103887','Mars_2000_Winkel_Tripel_sphere',NULL,NULL,NULL,'ESRI','104971',NULL,NULL,'PROJCS["Mars_2000_Winkel_Tripel_sphere",GEOGCS["Mars_2000_(Sphere)",DATUM["Mars_2000_(Sphere)",SPHEROID["Mars_2000_(Sphere)",3396190.0,0.0]],PRIMEM["Reference_Meridian",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_Tripel"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.46666666666667],UNIT["Meter",1.0]]',0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103887_USAGE','projected_crs','ESRI','103887','EPSG','1262','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103888','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103888_USAGE','conversion','ESRI','103888','EPSG','1454','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103888','Hartebeesthoek94_Lo15_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','103888',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103888_USAGE','projected_crs','ESRI','103888','EPSG','1454','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103889','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',17.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103889_USAGE','conversion','ESRI','103889','EPSG','1455','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103889','Hartebeesthoek94_Lo17_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','103889',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103889_USAGE','projected_crs','ESRI','103889','EPSG','1455','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103890','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103890_USAGE','conversion','ESRI','103890','EPSG','1463','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103890','Hartebeesthoek94_Lo33_(E-N)',NULL,'EPSG','4400','EPSG','4148','ESRI','103890',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103890_USAGE','projected_crs','ESRI','103890','EPSG','1463','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103891','California_SRS_Epoch_2017.50_(NAD83)_StatePlane_CA_I_US_Feet',NULL,'EPSG','4497','ESRI','104024','ESRI','103238',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103891_USAGE','projected_crs','ESRI','103891','EPSG','2175','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103892','California_SRS_Epoch_2017.50_(NAD83)_StatePlane_CA_II_US_Feet',NULL,'EPSG','4497','ESRI','104024','ESRI','103239',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103892_USAGE','projected_crs','ESRI','103892','EPSG','2176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103893','California_SRS_Epoch_2017.50_(NAD83)_StatePlane_CA_III_US_Feet',NULL,'EPSG','4497','ESRI','104024','ESRI','103240',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103893_USAGE','projected_crs','ESRI','103893','EPSG','2177','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103894','California_SRS_Epoch_2017.50_(NAD83)_StatePlane_CA_IV_US_Feet',NULL,'EPSG','4497','ESRI','104024','ESRI','103241',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103894_USAGE','projected_crs','ESRI','103894','EPSG','2178','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103895','California_SRS_Epoch_2017.50_(NAD83)_StatePlane_CA_V_US_Feet',NULL,'EPSG','4497','ESRI','104024','ESRI','103242',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103895_USAGE','projected_crs','ESRI','103895','EPSG','2182','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103896','California_SRS_Epoch_2017.50_(NAD83)_StatePlane_CA_VI_US_Feet',NULL,'EPSG','4497','ESRI','104024','ESRI','103243',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103896_USAGE','projected_crs','ESRI','103896','EPSG','2180','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','176','Nebraska - Douglas-Sarpy County','Nebraska - Douglas-Sarpy County',40.97867215,41.42005883,-96.49199812,-95.82241321,0); INSERT INTO "conversion" VALUES('ESRI','103897','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.18333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-96.05,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0000482,'EPSG','9201','EPSG','8806','False easting',131233.5958005249,'EPSG','9002','EPSG','8807','False northing',82020.99737532808,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103897_USAGE','conversion','ESRI','103897','ESRI','176','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103897','NAD_1983_2011_Nebraska_LDP_Douglas-Sarpy_County_Ft_Intl',NULL,'EPSG','4495','EPSG','6318','ESRI','103897',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103897_USAGE','projected_crs','ESRI','103897','ESRI','176','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103900','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.36666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999999,'EPSG','9201','EPSG','8806','False easting',483000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103900_USAGE','conversion','ESRI','103900','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103900','NAD_1983_HARN_Adj_WI_Adams_Feet',NULL,'EPSG','4497','ESRI','104800','ESRI','103900',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103900_USAGE','projected_crs','ESRI','103900','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103901','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.70611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.62222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',567000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103901_USAGE','conversion','ESRI','103901','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103901','NAD_1983_HARN_Adj_WI_Ashland_Feet',NULL,'EPSG','4497','ESRI','104801','ESRI','103901',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103901_USAGE','projected_crs','ESRI','103901','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103902','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.13333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.85,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',305609.625,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103902_USAGE','conversion','ESRI','103902','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103902','NAD_1983_HARN_Adj_WI_Barron_Feet',NULL,'EPSG','4497','ESRI','104802','ESRI','103902',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103902_USAGE','projected_crs','ESRI','103902','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103903','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.00002,'EPSG','9201','EPSG','8806','False easting',103674.3333,'EPSG','9003','EPSG','8807','False northing',15091.8,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103903_USAGE','conversion','ESRI','103903','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103903','NAD_1983_HARN_Adj_WI_Brown_Feet',NULL,'EPSG','4497','ESRI','104804','ESRI','103903',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103903_USAGE','projected_crs','ESRI','103903','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103904','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.48138888888889,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.79722222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',575000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103904_USAGE','conversion','ESRI','103904','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103904','NAD_1983_HARN_Adj_WI_Buffalo_Feet',NULL,'EPSG','4497','ESRI','104805','ESRI','103904',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103904_USAGE','projected_crs','ESRI','103904','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103905','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.71944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.5,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',803000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103905_USAGE','conversion','ESRI','103905','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103905','NAD_1983_HARN_Adj_WI_Calumet_Feet',NULL,'EPSG','4497','ESRI','104807','ESRI','103905',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103905_USAGE','projected_crs','ESRI','103905','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103906','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.6,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.70833333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999994,'EPSG','9201','EPSG','8806','False easting',656000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103906_USAGE','conversion','ESRI','103906','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103906','NAD_1983_HARN_Adj_WI_Clark_Feet',NULL,'EPSG','4497','ESRI','104809','ESRI','103906',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103906_USAGE','projected_crs','ESRI','103906','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103907','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.47222222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.775,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',864000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103907_USAGE','conversion','ESRI','103907','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103907','NAD_1983_HARN_Adj_WI_Dodge_Feet',NULL,'EPSG','4497','ESRI','104813','ESRI','103907',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103907_USAGE','projected_crs','ESRI','103907','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103908','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.4,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.27222222222223,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999991,'EPSG','9201','EPSG','8806','False easting',521000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103908_USAGE','conversion','ESRI','103908','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103908','NAD_1983_HARN_Adj_WI_Door_Feet',NULL,'EPSG','4497','ESRI','104814','ESRI','103908',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103908_USAGE','projected_crs','ESRI','103908','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103909','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.88333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.91666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',194000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103909_USAGE','conversion','ESRI','103909','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103909','NAD_1983_HARN_Adj_WI_Douglas_Feet',NULL,'EPSG','4497','ESRI','104815','ESRI','103909',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103909_USAGE','projected_crs','ESRI','103909','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103910','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.40833333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',170000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103910_USAGE','conversion','ESRI','103910','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103910','NAD_1983_HARN_Adj_WI_Dunn_Feet',NULL,'EPSG','4497','ESRI','104816','ESRI','103910',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103910_USAGE','projected_crs','ESRI','103910','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103911','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.14166666666668,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999993,'EPSG','9201','EPSG','8806','False easting',438000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103911_USAGE','conversion','ESRI','103911','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103911','NAD_1983_HARN_Adj_WI_Florence_Feet',NULL,'EPSG','4497','ESRI','104818','ESRI','103911',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103911_USAGE','projected_crs','ESRI','103911','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103912','NAD_1983_HARN_Adj_WI_Fond_du_Lac_Feet',NULL,'EPSG','4497','ESRI','104819','ESRI','103905',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103912_USAGE','projected_crs','ESRI','103912','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103913','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.00555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',905000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103913_USAGE','conversion','ESRI','103913','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103913','NAD_1983_HARN_Adj_WI_Forest_Feet',NULL,'EPSG','4497','ESRI','104820','ESRI','103913',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103913_USAGE','projected_crs','ESRI','103913','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103914','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.41111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.8,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',795000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103914_USAGE','conversion','ESRI','103914','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103914','NAD_1983_HARN_Adj_WI_Grant_Feet',NULL,'EPSG','4497','ESRI','104821','ESRI','103914',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103914_USAGE','projected_crs','ESRI','103914','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103915','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.53888888888888,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.16111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',371000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103915_USAGE','conversion','ESRI','103915','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103915','NAD_1983_HARN_Adj_WI_Iowa_Feet',NULL,'EPSG','4497','ESRI','104824','ESRI','103915',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103915_USAGE','projected_crs','ESRI','103915','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103916','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',45.43333333333333,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.25555555555556,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',725000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103916_USAGE','conversion','ESRI','103916','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103916','NAD_1983_HARN_Adj_WI_Iron_Feet',NULL,'EPSG','4497','ESRI','104825','ESRI','103916',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103916_USAGE','projected_crs','ESRI','103916','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103917','NAD_1983_HARN_Adj_WI_Jefferson_Feet',NULL,'EPSG','4497','ESRI','104827','ESRI','103907',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103917_USAGE','projected_crs','ESRI','103917','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103918','NAD_1983_HARN_Adj_WI_Juneau_Feet',NULL,'EPSG','4497','ESRI','104828','ESRI','103900',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103918_USAGE','projected_crs','ESRI','103918','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103919','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.21666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.89444444444445,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',610000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103919_USAGE','conversion','ESRI','103919','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103919','NAD_1983_HARN_Adj_WI_Kenosha_Feet',NULL,'EPSG','4497','ESRI','104829','ESRI','103919',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103919_USAGE','projected_crs','ESRI','103919','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103920','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.26666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.55,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',262000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103920_USAGE','conversion','ESRI','103920','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103920','NAD_1983_HARN_Adj_WI_Kewaunee_Feet',NULL,'EPSG','4497','ESRI','104830','ESRI','103920',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103920_USAGE','projected_crs','ESRI','103920','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103921','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.45111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.31666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999994,'EPSG','9201','EPSG','8806','False easting',428000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103921_USAGE','conversion','ESRI','103921','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103921','NAD_1983_HARN_Adj_WI_LaCrosse_Feet',NULL,'EPSG','4497','ESRI','104831','ESRI','103921',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103921_USAGE','projected_crs','ESRI','103921','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103922','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.84444444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.73333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',381000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103922_USAGE','conversion','ESRI','103922','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103922','NAD_1983_HARN_Adj_WI_Lincoln_Feet',NULL,'EPSG','4497','ESRI','104834','ESRI','103922',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103922_USAGE','projected_crs','ESRI','103922','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103923','NAD_1983_HARN_Adj_WI_Manitowoc_Feet',NULL,'EPSG','4497','ESRI','104835','ESRI','103920',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103923_USAGE','projected_crs','ESRI','103923','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103924','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.69166666666666,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.71111111111111,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999986,'EPSG','9201','EPSG','8806','False easting',783000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103924_USAGE','conversion','ESRI','103924','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103924','NAD_1983_HARN_Adj_WI_Marinette_Feet',NULL,'EPSG','4497','ESRI','104837','ESRI','103924',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103924_USAGE','projected_crs','ESRI','103924','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103925','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.71666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.41666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999994,'EPSG','9201','EPSG','8806','False easting',346000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103925_USAGE','conversion','ESRI','103925','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103925','NAD_1983_HARN_Adj_WI_Menominee_Feet',NULL,'EPSG','4497','ESRI','104839','ESRI','103925',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103925_USAGE','projected_crs','ESRI','103925','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103926','NAD_1983_HARN_Adj_WI_Milwaukee_Feet',NULL,'EPSG','4497','ESRI','104840','ESRI','103919',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103926_USAGE','projected_crs','ESRI','103926','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103927','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.39722222222222,'EPSG','9102','EPSG','8802','Longitude of natural origin',-87.90833333333335,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999991,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103927_USAGE','conversion','ESRI','103927','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103927','NAD_1983_HARN_Adj_WI_Oconto_Feet',NULL,'EPSG','4497','ESRI','104842','ESRI','103927',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103927_USAGE','projected_crs','ESRI','103927','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103928','NAD_1983_HARN_Adj_WI_Outagamie_Feet',NULL,'EPSG','4497','ESRI','104844','ESRI','103905',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103928_USAGE','projected_crs','ESRI','103928','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103929','NAD_1983_HARN_Adj_WI_Ozaukee_Feet',NULL,'EPSG','4497','ESRI','104845','ESRI','103919',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103929_USAGE','projected_crs','ESRI','103929','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103930','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.66111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',465000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103930_USAGE','conversion','ESRI','103930','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103930','NAD_1983_HARN_Adj_WI_Polk_Feet',NULL,'EPSG','4497','ESRI','104848','ESRI','103930',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103930_USAGE','projected_crs','ESRI','103930','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103931','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.55555555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-90.48888888888889,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',748000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103931_USAGE','conversion','ESRI','103931','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103931','NAD_1983_HARN_Adj_WI_Price_Feet',NULL,'EPSG','4497','ESRI','104850','ESRI','103931',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103931_USAGE','projected_crs','ESRI','103931','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103932','NAD_1983_HARN_Adj_WI_Racine_Feet',NULL,'EPSG','4497','ESRI','104851','ESRI','103919',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103932_USAGE','projected_crs','ESRI','103932','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103933','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',41.94444444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.07222222222222,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',480000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103933_USAGE','conversion','ESRI','103933','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103933','NAD_1983_HARN_Adj_WI_Rock_Feet',NULL,'EPSG','4497','ESRI','104853','ESRI','103933',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103933_USAGE','projected_crs','ESRI','103933','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103934','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.91944444444444,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.06666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',822000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103934_USAGE','conversion','ESRI','103934','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103934','NAD_1983_HARN_Adj_WI_Rusk_Feet',NULL,'EPSG','4497','ESRI','104854','ESRI','103934',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103934_USAGE','projected_crs','ESRI','103934','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103935','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-92.63333333333334,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',543000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103935_USAGE','conversion','ESRI','103935','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103935','NAD_1983_HARN_Adj_WI_St_Croix_Feet',NULL,'EPSG','4497','ESRI','104855','ESRI','103935',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103935_USAGE','projected_crs','ESRI','103935','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103936','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.81944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-89.9,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',609000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103936_USAGE','conversion','ESRI','103936','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103936','NAD_1983_HARN_Adj_WI_Sauk_Feet',NULL,'EPSG','4497','ESRI','104856','ESRI','103936',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103936_USAGE','projected_crs','ESRI','103936','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103937','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',44.03611111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.60555555555555,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99999,'EPSG','9201','EPSG','8806','False easting',861000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103937_USAGE','conversion','ESRI','103937','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103937','NAD_1983_HARN_Adj_WI_Shawano_Feet',NULL,'EPSG','4497','ESRI','104858','ESRI','103937',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103937_USAGE','projected_crs','ESRI','103937','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103938','NAD_1983_HARN_Adj_WI_Sheboygan_Feet',NULL,'EPSG','4497','ESRI','104859','ESRI','103920',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103938_USAGE','projected_crs','ESRI','103938','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103939','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.16111111111111,'EPSG','9102','EPSG','8802','Longitude of natural origin',-91.36666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999998,'EPSG','9201','EPSG','8806','False easting',843000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103939_USAGE','conversion','ESRI','103939','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103939','NAD_1983_HARN_Adj_WI_Trempealeau_Feet',NULL,'EPSG','4497','ESRI','104861','ESRI','103939',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103939_USAGE','projected_crs','ESRI','103939','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103940','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.91805555555555,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.06388888888888,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999995,'EPSG','9201','EPSG','8806','False easting',394000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103940_USAGE','conversion','ESRI','103940','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103940','NAD_1983_HARN_Adj_WI_Washington_Feet',NULL,'EPSG','4497','ESRI','104866','ESRI','103940',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103940_USAGE','projected_crs','ESRI','103940','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103941','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.56944444444445,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.225,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999997,'EPSG','9201','EPSG','8806','False easting',685000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103941_USAGE','conversion','ESRI','103941','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103941','NAD_1983_HARN_Adj_WI_Waukesha_Feet',NULL,'EPSG','4497','ESRI','104867','ESRI','103941',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103941_USAGE','projected_crs','ESRI','103941','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103942','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',43.42027777777778,'EPSG','9102','EPSG','8802','Longitude of natural origin',-88.81666666666666,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999996,'EPSG','9201','EPSG','8806','False easting',607000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103942_USAGE','conversion','ESRI','103942','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103942','NAD_1983_HARN_Adj_WI_Waupaca_Feet',NULL,'EPSG','4497','ESRI','104868','ESRI','103942',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103942_USAGE','projected_crs','ESRI','103942','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103943','NAD_1983_HARN_Adj_WI_Winnebago_Feet',NULL,'EPSG','4497','ESRI','104870','ESRI','103905',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103943_USAGE','projected_crs','ESRI','103943','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103944','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.33333333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.15277777777779,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.41388888888888,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.925,'EPSG','9102','EPSG','8826','Easting at false origin',750000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103944_USAGE','conversion','ESRI','103944','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103944','NAD_1983_HARN_Adj_WI_Bayfield_Feet',NULL,'EPSG','4497','ESRI','104803','ESRI','103944',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103944_USAGE','projected_crs','ESRI','103944','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103945','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.36388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.45777777777778,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.71388888888889,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.08333333333334,'EPSG','9102','EPSG','8826','Easting at false origin',210000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103945_USAGE','conversion','ESRI','103945','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103945','NAD_1983_HARN_Adj_WI_Burnett_Feet',NULL,'EPSG','4497','ESRI','104806','ESRI','103945',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103945_USAGE','projected_crs','ESRI','103945','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103946','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.58111111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.29444444444444,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.81388888888888,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.14166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',197000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103946_USAGE','conversion','ESRI','103946','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103946','NAD_1983_HARN_Adj_WI_Chippewa_Feet',NULL,'EPSG','4497','ESRI','104808','ESRI','103946',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103946_USAGE','projected_crs','ESRI','103946','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103947','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.45833333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.39444444444445,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.33333333333334,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.59166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',555000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103947_USAGE','conversion','ESRI','103947','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103947','NAD_1983_HARN_Adj_WI_Columbia_Feet',NULL,'EPSG','4497','ESRI','104810','ESRI','103947',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103947_USAGE','projected_crs','ESRI','103947','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103948','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.71666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.9388888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.05833333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.34166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',373000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103948_USAGE','conversion','ESRI','103948','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103948','NAD_1983_HARN_Adj_WI_Crawford_Feet',NULL,'EPSG','4497','ESRI','104811','ESRI','103948',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103948_USAGE','projected_crs','ESRI','103948','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103949','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.75,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.42222222222223,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.90833333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.23055555555555,'EPSG','9102','EPSG','8826','Easting at false origin',811000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103949_USAGE','conversion','ESRI','103949','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103949','NAD_1983_HARN_Adj_WI_Dane_Feet',NULL,'EPSG','4497','ESRI','104812','ESRI','103949',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103949_USAGE','projected_crs','ESRI','103949','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103950','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.04722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.28888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.73055555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.01388888888889,'EPSG','9102','EPSG','8826','Easting at false origin',394000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103950_USAGE','conversion','ESRI','103950','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103950','NAD_1983_HARN_Adj_WI_EauClaire_Feet',NULL,'EPSG','4497','ESRI','104817','ESRI','103950',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103950_USAGE','projected_crs','ESRI','103950','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103951','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.225,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.83888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.48611111111111,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.78888888888888,'EPSG','9102','EPSG','8826','Easting at false origin',558000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103951_USAGE','conversion','ESRI','103951','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103951','NAD_1983_HARN_Adj_WI_Green_Feet',NULL,'EPSG','4497','ESRI','104822','ESRI','103951',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103951_USAGE','projected_crs','ESRI','103951','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103952','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.09444444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.24166666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.66666666666666,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.94722222222222,'EPSG','9102','EPSG','8826','Easting at false origin',495000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103952_USAGE','conversion','ESRI','103952','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103952','NAD_1983_HARN_Adj_WI_GreenLake_Feet',NULL,'EPSG','4497','ESRI','104823','ESRI','103952',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103952_USAGE','projected_crs','ESRI','103952','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103953','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.79444444444444,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.73888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.16388888888888,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.41944444444444,'EPSG','9102','EPSG','8826','Easting at false origin',413000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103953_USAGE','conversion','ESRI','103953','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103953','NAD_1983_HARN_Adj_WI_Jackson_Feet',NULL,'EPSG','4497','ESRI','104826','ESRI','103953',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103953_USAGE','projected_crs','ESRI','103953','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103954','NAD_1983_HARN_Adj_WI_Lafayette_Feet',NULL,'EPSG','4497','ESRI','104832','ESRI','103951',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103954_USAGE','projected_crs','ESRI','103954','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103955','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.20694444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.03333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.30833333333333,'EPSG','9102','EPSG','8826','Easting at false origin',651000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103955_USAGE','conversion','ESRI','103955','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103955','NAD_1983_HARN_Adj_WI_Langlade_Feet',NULL,'EPSG','4497','ESRI','104833','ESRI','103955',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103955_USAGE','projected_crs','ESRI','103955','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103956','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.40555555555555,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.77,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.74527777777778,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.05638888888888,'EPSG','9102','EPSG','8826','Easting at false origin',245000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103956_USAGE','conversion','ESRI','103956','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103956','NAD_1983_HARN_Adj_WI_Marathon_Feet',NULL,'EPSG','4497','ESRI','104836','ESRI','103956',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103956_USAGE','projected_crs','ESRI','103956','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103957','NAD_1983_HARN_Adj_WI_Marquette_Feet',NULL,'EPSG','4497','ESRI','104838','ESRI','103952',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103957_USAGE','projected_crs','ESRI','103957','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103958','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.90277777777778,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.64166666666668,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.83888888888889,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.16111111111111,'EPSG','9102','EPSG','8826','Easting at false origin',671000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103958_USAGE','conversion','ESRI','103958','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103958','NAD_1983_HARN_Adj_WI_Monroe_Feet',NULL,'EPSG','4497','ESRI','104841','ESRI','103958',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103958_USAGE','projected_crs','ESRI','103958','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103959','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.18611111111111,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.54444444444444,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.56666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.84166666666667,'EPSG','9102','EPSG','8826','Easting at false origin',230000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103959_USAGE','conversion','ESRI','103959','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103959','NAD_1983_HARN_Adj_WI_Oneida_Feet',NULL,'EPSG','4497','ESRI','104843','ESRI','103959',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103959_USAGE','projected_crs','ESRI','103959','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103960','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.86194444444445,'EPSG','9102','EPSG','8822','Longitude of false origin',-92.22777777777777,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.52222222222222,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.75,'EPSG','9102','EPSG','8826','Easting at false origin',550000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103960_USAGE','conversion','ESRI','103960','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103960','NAD_1983_HARN_Adj_WI_Pepin_Feet',NULL,'EPSG','4497','ESRI','104846','ESRI','103960',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103960_USAGE','projected_crs','ESRI','103960','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103961','NAD_1983_HARN_Adj_WI_Pierce_Feet',NULL,'EPSG','4497','ESRI','104847','ESRI','103960',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103961_USAGE','projected_crs','ESRI','103961','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103962','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.96666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18333333333333,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.65,'EPSG','9102','EPSG','8826','Easting at false origin',185000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103962_USAGE','conversion','ESRI','103962','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103962','NAD_1983_HARN_Adj_WI_Portage_Feet',NULL,'EPSG','4497','ESRI','104849','ESRI','103962',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103962_USAGE','projected_crs','ESRI','103962','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103963','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.11388888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.43055555555556,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.14166666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.50277777777778,'EPSG','9102','EPSG','8826','Easting at false origin',664000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103963_USAGE','conversion','ESRI','103963','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103963','NAD_1983_HARN_Adj_WI_Richland_Feet',NULL,'EPSG','4497','ESRI','104852','ESRI','103963',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103963_USAGE','projected_crs','ESRI','103963','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103964','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.81388888888888,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.11666666666666,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.71944444444445,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.08055555555556,'EPSG','9102','EPSG','8826','Easting at false origin',711000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103964_USAGE','conversion','ESRI','103964','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103964','NAD_1983_HARN_Adj_WI_Sawyer_Feet',NULL,'EPSG','4497','ESRI','104857','ESRI','103964',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103964_USAGE','projected_crs','ESRI','103964','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103965','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.20833333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.48333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.05555555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.3,'EPSG','9102','EPSG','8826','Easting at false origin',614000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103965_USAGE','conversion','ESRI','103965','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103965','NAD_1983_HARN_Adj_WI_Taylor_Feet',NULL,'EPSG','4497','ESRI','104860','ESRI','103965',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103965_USAGE','projected_crs','ESRI','103965','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103966','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.14722222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.78333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.46666666666667,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.68333333333333,'EPSG','9102','EPSG','8826','Easting at false origin',730000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103966_USAGE','conversion','ESRI','103966','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103966','NAD_1983_HARN_Adj_WI_Vernon_Feet',NULL,'EPSG','4497','ESRI','104862','ESRI','103966',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103966_USAGE','projected_crs','ESRI','103966','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103967','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.625,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.48888888888889,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.93055555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.225,'EPSG','9102','EPSG','8826','Easting at false origin',441000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103967_USAGE','conversion','ESRI','103967','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103967','NAD_1983_HARN_Adj_WI_Vilas_Feet',NULL,'EPSG','4497','ESRI','104863','ESRI','103967',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103967_USAGE','projected_crs','ESRI','103967','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103968','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',41.66944444444444,'EPSG','9102','EPSG','8822','Longitude of false origin',-88.54166666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.58888888888889,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.75,'EPSG','9102','EPSG','8826','Easting at false origin',763000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103968_USAGE','conversion','ESRI','103968','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103968','NAD_1983_HARN_Adj_WI_Walworth_Feet',NULL,'EPSG','4497','ESRI','104864','ESRI','103968',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103968_USAGE','projected_crs','ESRI','103968','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103969','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.26666666666667,'EPSG','9102','EPSG','8822','Longitude of false origin',-91.78333333333333,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.77222222222222,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.15,'EPSG','9102','EPSG','8826','Easting at false origin',768000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103969_USAGE','conversion','ESRI','103969','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103969','NAD_1983_HARN_Adj_WI_Washburn_Feet',NULL,'EPSG','4497','ESRI','104865','ESRI','103969',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103969_USAGE','projected_crs','ESRI','103969','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103970','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.70833333333334,'EPSG','9102','EPSG','8822','Longitude of false origin',-89.24166666666667,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.975,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.25277777777778,'EPSG','9102','EPSG','8826','Easting at false origin',394000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103970_USAGE','conversion','ESRI','103970','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103970','NAD_1983_HARN_Adj_WI_Waushara_Feet',NULL,'EPSG','4497','ESRI','104869','ESRI','103970',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103970_USAGE','projected_crs','ESRI','103970','EPSG','1418','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103971','unnamed',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.15138888888889,'EPSG','9102','EPSG','8822','Longitude of false origin',-90.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.18055555555555,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.54444444444444,'EPSG','9102','EPSG','8826','Easting at false origin',684000.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'CONV_103971_USAGE','conversion','ESRI','103971','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103971','NAD_1983_HARN_Adj_WI_Wood_Feet',NULL,'EPSG','4497','ESRI','104871','ESRI','103971',NULL,1); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103971_USAGE','projected_crs','ESRI','103971','EPSG','1418','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103972','Germany_Zone_1',NULL,'EPSG','4400','EPSG','4314','EPSG','16201',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103972_USAGE','projected_crs','ESRI','103972','EPSG','3892','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103973','Germany_Zone_2',NULL,'EPSG','4400','EPSG','4314','EPSG','16262',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103973_USAGE','projected_crs','ESRI','103973','EPSG','1624','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103974','Germany_Zone_3',NULL,'EPSG','4400','EPSG','4314','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103974_USAGE','projected_crs','ESRI','103974','EPSG','1625','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103975','Germany_Zone_4',NULL,'EPSG','4400','EPSG','4314','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103975_USAGE','projected_crs','ESRI','103975','EPSG','1626','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103976','Germany_Zone_5',NULL,'EPSG','4400','EPSG','4314','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103976_USAGE','projected_crs','ESRI','103976','EPSG','1627','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103977','WGS_1984_UTM_GTM_2010',NULL,'EPSG','4400','EPSG','4326','EPSG','5222',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103977_USAGE','projected_crs','ESRI','103977','EPSG','3249','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103978','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-107.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9003','EPSG','8827','Northing at false origin',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103978_USAGE','conversion','ESRI','103978','EPSG','1419','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103978','NAD_1983_WYDOT_Albers_(ftUS)',NULL,'EPSG','4497','EPSG','4269','ESRI','103978',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103978_USAGE','projected_crs','ESRI','103978','EPSG','1419','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','103979','unnamed',NULL,'EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-107.5,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_103979_USAGE','conversion','ESRI','103979','EPSG','1419','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103979','NAD_1983_WYDOT_Albers_(m)',NULL,'EPSG','4400','EPSG','4269','ESRI','103979',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103979_USAGE','projected_crs','ESRI','103979','EPSG','1419','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103980','NAD_1983_2011_WYDOT_Albers_(ftUS)',NULL,'EPSG','4497','EPSG','6318','ESRI','103978',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103980_USAGE','projected_crs','ESRI','103980','EPSG','1419','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','103981','NAD_1983_2011_WYDOT_Albers_(m)',NULL,'EPSG','4400','EPSG','6318','ESRI','103979',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_103981_USAGE','projected_crs','ESRI','103981','EPSG','1419','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112000','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9992600288218829,'EPSG','9201','EPSG','8806','False easting',261910.5587031571,'EPSG','9001','EPSG','8807','False northing',70975.76209131356,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112000_USAGE','conversion','ESRI','112000','ESRI','95','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112000','OSGB36_National_Highways_A01H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112000',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112000_USAGE','projected_crs','ESRI','112000','ESRI','95','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112001','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993139726802819,'EPSG','9201','EPSG','8806','False easting',252927.2843542255,'EPSG','9001','EPSG','8807','False northing',70979.593633004,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112001_USAGE','conversion','ESRI','112001','ESRI','96','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112001','OSGB36_National_Highways_A02H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112001',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112001_USAGE','projected_crs','ESRI','112001','ESRI','96','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112002','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993649250057596,'EPSG','9201','EPSG','8806','False easting',243942.3084033331,'EPSG','9001','EPSG','8807','False northing',70983.2126911338,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112002_USAGE','conversion','ESRI','112002','ESRI','97','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112002','OSGB36_National_Highways_A03H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112002',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112002_USAGE','projected_crs','ESRI','112002','ESRI','97','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112003','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993899100658244,'EPSG','9201','EPSG','8806','False easting',243948.4071897476,'EPSG','9001','EPSG','8807','False northing',70984.98733800034,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112003_USAGE','conversion','ESRI','112003','ESRI','97','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112003','OSGB36_National_Highways_A03H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112003',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112003_USAGE','projected_crs','ESRI','112003','ESRI','97','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112004','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999414883310307,'EPSG','9201','EPSG','8806','False easting',234956.1812566491,'EPSG','9001','EPSG','8807','False northing',70986.7611456259,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112004_USAGE','conversion','ESRI','112004','ESRI','98','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112004','OSGB36_National_Highways_A04H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112004',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112004_USAGE','projected_crs','ESRI','112004','ESRI','98','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112005','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994648466099409,'EPSG','9201','EPSG','8806','False easting',225969.1556311239,'EPSG','9001','EPSG','8807','False northing',70990.3099549106,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112005_USAGE','conversion','ESRI','112005','ESRI','99','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112005','OSGB36_National_Highways_A05H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112005',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112005_USAGE','projected_crs','ESRI','112005','ESRI','99','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112006','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994898341681397,'EPSG','9201','EPSG','8806','False easting',225974.8050718687,'EPSG','9001','EPSG','8807','False northing',70992.08477921539,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112006_USAGE','conversion','ESRI','112006','ESRI','99','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112006','OSGB36_National_Highways_A05H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112006',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112006_USAGE','projected_crs','ESRI','112006','ESRI','99','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112007','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995158143222824,'EPSG','9201','EPSG','8806','False easting',215981.5338434338,'EPSG','9001','EPSG','8807','False northing',70993.93010594351,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112007_USAGE','conversion','ESRI','112007','ESRI','100','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112007','OSGB36_National_Highways_A06H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112007',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112007_USAGE','projected_crs','ESRI','112007','ESRI','100','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112008','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995408031547217,'EPSG','9201','EPSG','8806','False easting',215986.9335842702,'EPSG','9001','EPSG','8807','False northing',70995.70502075547,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112008_USAGE','conversion','ESRI','112008','ESRI','100','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112008','OSGB36_National_Highways_A06H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112008',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112008_USAGE','projected_crs','ESRI','112008','ESRI','100','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112009','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995637886826517,'EPSG','9201','EPSG','8806','False easting',205992.275418417,'EPSG','9001','EPSG','8807','False northing',70997.33764421167,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112009_USAGE','conversion','ESRI','112009','ESRI','101','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112009','OSGB36_National_Highways_A07H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112009',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112009_USAGE','projected_crs','ESRI','112009','ESRI','101','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112010','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999588778714495,'EPSG','9201','EPSG','8806','False easting',205997.4254184274,'EPSG','9001','EPSG','8807','False northing',70999.11264421527,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112010_USAGE','conversion','ESRI','112010','ESRI','101','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112010','OSGB36_National_Highways_A07H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112010',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112010_USAGE','projected_crs','ESRI','112010','ESRI','101','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112011','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996127672593187,'EPSG','9201','EPSG','8806','False easting',196002.2540283714,'EPSG','9001','EPSG','8807','False northing',71000.81651027738,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112011_USAGE','conversion','ESRI','112011','ESRI','102','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112011','OSGB36_National_Highways_A08H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112011',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112011_USAGE','projected_crs','ESRI','112011','ESRI','102','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112012','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996377585156724,'EPSG','9201','EPSG','8806','False easting',196007.1542684811,'EPSG','9001','EPSG','8807','False northing',71002.5915972559,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112012_USAGE','conversion','ESRI','112012','ESRI','102','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112012','OSGB36_National_Highways_A08H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112012',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112012_USAGE','projected_crs','ESRI','112012','ESRI','102','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112013','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996617506361164,'EPSG','9201','EPSG','8806','False easting',185011.1930661738,'EPSG','9001','EPSG','8807','False northing',71004.29571728832,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112013_USAGE','conversion','ESRI','112013','ESRI','103','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112013','OSGB36_National_Highways_A09H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112013',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112013_USAGE','projected_crs','ESRI','112013','ESRI','103','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112014','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996867431171,'EPSG','9201','EPSG','8806','False easting',185015.8185194549,'EPSG','9001','EPSG','8807','False northing',71006.07089125027,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112014_USAGE','conversion','ESRI','112014','ESRI','103','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112014','OSGB36_National_Highways_A09H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112014',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112014_USAGE','projected_crs','ESRI','112014','ESRI','103','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112015','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997127384331908,'EPSG','9201','EPSG','8806','False easting',173019.2914368838,'EPSG','9001','EPSG','8807','False northing',71007.91729490607,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112015_USAGE','conversion','ESRI','112015','ESRI','104','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112015','OSGB36_National_Highways_A10H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112015',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112015_USAGE','projected_crs','ESRI','112015','ESRI','104','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112016','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997377321889175,'EPSG','9201','EPSG','8806','False easting',173023.6170813814,'EPSG','9001','EPSG','8807','False northing',71009.69255941088,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112016_USAGE','conversion','ESRI','112016','ESRI','104','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112016','OSGB36_National_Highways_A10H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112016',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112016_USAGE','projected_crs','ESRI','112016','ESRI','104','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112017','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997667311819567,'EPSG','9201','EPSG','8806','False easting',159026.3185515824,'EPSG','9001','EPSG','8807','False northing',71011.75230919718,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112017_USAGE','conversion','ESRI','112017','ESRI','105','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112017','OSGB36_National_Highways_A11H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112017',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112017_USAGE','projected_crs','ESRI','112017','ESRI','105','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112018','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997917262875528,'EPSG','9201','EPSG','8806','False easting',159030.294358639,'EPSG','9001','EPSG','8807','False northing',71013.52766958093,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112018_USAGE','conversion','ESRI','112018','ESRI','105','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112018','OSGB36_National_Highways_A11H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112018',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112018_USAGE','projected_crs','ESRI','112018','ESRI','105','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112019','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999816722642982,'EPSG','9201','EPSG','8806','False easting',159034.2703644983,'EPSG','9001','EPSG','8807','False northing',71015.30311873824,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112019_USAGE','conversion','ESRI','112019','ESRI','105','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112019','OSGB36_National_Highways_A11H3',NULL,'EPSG','4400','EPSG','4277','ESRI','112019',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112019_USAGE','projected_crs','ESRI','112019','ESRI','105','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112020','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998167296682084,'EPSG','9201','EPSG','8806','False easting',144031.0383232799,'EPSG','9001','EPSG','8807','False northing',71015.30361772828,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112020_USAGE','conversion','ESRI','112020','ESRI','106','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112020','OSGB36_National_Highways_A12H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112020',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112020_USAGE','projected_crs','ESRI','112020','ESRI','106','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112021','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998417260238136,'EPSG','9201','EPSG','8806','False easting',144034.6392342722,'EPSG','9001','EPSG','8807','False northing',71017.07906689808,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112021_USAGE','conversion','ESRI','112021','ESRI','106','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112021','OSGB36_National_Highways_A12H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112021',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112021_USAGE','projected_crs','ESRI','112021','ESRI','106','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112022','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998667236293144,'EPSG','9201','EPSG','8806','False easting',144038.2403253212,'EPSG','9001','EPSG','8807','False northing',71018.85460484587,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112022_USAGE','conversion','ESRI','112022','ESRI','106','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112022','OSGB36_National_Highways_A12H3',NULL,'EPSG','4400','EPSG','4277','ESRI','112022',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112022_USAGE','projected_crs','ESRI','112022','ESRI','106','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112023','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998647329200487,'EPSG','9201','EPSG','8806','False easting',128033.7364878587,'EPSG','9001','EPSG','8807','False northing',71018.71320810913,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112023_USAGE','conversion','ESRI','112023','ESRI','107','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112023','OSGB36_National_Highways_A13H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112023',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112023_USAGE','projected_crs','ESRI','112023','ESRI','107','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112024','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998897304757802,'EPSG','9201','EPSG','8806','False easting',128036.937451307,'EPSG','9001','EPSG','8807','False northing',71020.48874252186,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112024_USAGE','conversion','ESRI','112024','ESRI','107','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112024','OSGB36_National_Highways_A13H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112024',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112024_USAGE','projected_crs','ESRI','112024','ESRI','107','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112025','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999137409943842,'EPSG','9201','EPSG','8806','False easting',111034.697926722,'EPSG','9001','EPSG','8807','False northing',71022.19416934469,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112025_USAGE','conversion','ESRI','112025','ESRI','108','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112025','OSGB36_National_Highways_A14H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112025',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112025_USAGE','projected_crs','ESRI','112025','ESRI','108','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112026','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999387397753633,'EPSG','9201','EPSG','8806','False easting',111037.4738982691,'EPSG','9001','EPSG','8807','False northing',71023.96979078473,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112026_USAGE','conversion','ESRI','112026','ESRI','108','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112026','OSGB36_National_Highways_A14H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112026',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112026_USAGE','projected_crs','ESRI','112026','ESRI','108','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112027','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999667551366491,'EPSG','9201','EPSG','8806','False easting',88032.17537165637,'EPSG','9001','EPSG','8807','False northing',71025.95967485911,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112027_USAGE','conversion','ESRI','112027','ESRI','109','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112027','OSGB36_National_Highways_A15H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112027',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112027_USAGE','projected_crs','ESRI','112027','ESRI','109','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112028','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999917552430316,'EPSG','9201','EPSG','8806','False easting',88034.37625857393,'EPSG','9001','EPSG','8807','False northing',71027.73539044033,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112028_USAGE','conversion','ESRI','112028','ESRI','109','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112028','OSGB36_National_Highways_A15H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112028',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112028_USAGE','projected_crs','ESRI','112028','ESRI','109','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112029','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000011771557166,'EPSG','9201','EPSG','8806','False easting',54022.17583441971,'EPSG','9001','EPSG','8807','False northing',71029.1571156259,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112029_USAGE','conversion','ESRI','112029','ESRI','110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112029','OSGB36_National_Highways_A16H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112029',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112029_USAGE','projected_crs','ESRI','112029','ESRI','110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112030','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000036772789,'EPSG','9201','EPSG','8806','False easting',54023.52643946325,'EPSG','9001','EPSG','8807','False northing',71030.93291114613,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112030_USAGE','conversion','ESRI','112030','ESRI','110','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112030','OSGB36_National_Highways_A16H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112030',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112030_USAGE','projected_crs','ESRI','112030','ESRI','110','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112031','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999807598109365,'EPSG','9201','EPSG','8806','False easting',-24009.11134761462,'EPSG','9001','EPSG','8807','False northing',71026.9544033599,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112031_USAGE','conversion','ESRI','112031','ESRI','111','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112031','OSGB36_National_Highways_A17H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112031',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112031_USAGE','projected_crs','ESRI','112031','ESRI','111','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112032','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000005760267449,'EPSG','9201','EPSG','8806','False easting',-24009.7115979077,'EPSG','9001','EPSG','8807','False northing',71028.73014381027,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112032_USAGE','conversion','ESRI','112032','ESRI','111','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112032','OSGB36_National_Highways_A17H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112032',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112032_USAGE','projected_crs','ESRI','112032','ESRI','111','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112033','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999277441837596,'EPSG','9201','EPSG','8806','False easting',-58018.94295715116,'EPSG','9001','EPSG','8807','False northing',71023.1887923747,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112033_USAGE','conversion','ESRI','112033','ESRI','112','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112033','OSGB36_National_Highways_A18H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112033',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112033_USAGE','projected_crs','ESRI','112033','ESRI','112','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112034','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999527433148317,'EPSG','9201','EPSG','8806','False easting',-58020.39348511989,'EPSG','9001','EPSG','8807','False northing',71024.96443868124,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112034_USAGE','conversion','ESRI','112034','ESRI','112','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112034','OSGB36_National_Highways_A18H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112034',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112034_USAGE','projected_crs','ESRI','112034','ESRI','112','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112035','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999873734042937,'EPSG','9201','EPSG','8806','False easting',-88023.98625017522,'EPSG','9001','EPSG','8807','False northing',71019.352542755,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112035_USAGE','conversion','ESRI','112035','ESRI','113','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112035','OSGB36_National_Highways_A19H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112035',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112035_USAGE','projected_crs','ESRI','112035','ESRI','113','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112036','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998987318237049,'EPSG','9201','EPSG','8806','False easting',-88026.18693235706,'EPSG','9001','EPSG','8807','False northing',71021.12809315171,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112036_USAGE','conversion','ESRI','112036','ESRI','113','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112036','OSGB36_National_Highways_A19H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112036',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112036_USAGE','projected_crs','ESRI','112036','ESRI','113','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112037','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998257299268304,'EPSG','9201','EPSG','8806','False easting',-105023.5775148396,'EPSG','9001','EPSG','8807','False northing',71015.94289098677,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112037_USAGE','conversion','ESRI','112037','ESRI','114','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112037','OSGB36_National_Highways_A20H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112037',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112037_USAGE','projected_crs','ESRI','112037','ESRI','114','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112038','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998507265074503,'EPSG','9201','EPSG','8806','False easting',-105026.2032027408,'EPSG','9001','EPSG','8807','False northing',71017.718356139,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112038_USAGE','conversion','ESRI','112038','ESRI','114','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112038','OSGB36_National_Highways_A20H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112038',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112038_USAGE','projected_crs','ESRI','112038','ESRI','114','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112039','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997707308768334,'EPSG','9201','EPSG','8806','False easting',-122020.6822661785,'EPSG','9001','EPSG','8807','False northing',71012.03640080881,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112039_USAGE','conversion','ESRI','112039','ESRI','115','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112039','OSGB36_National_Highways_A21H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112039',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112039_USAGE','projected_crs','ESRI','112039','ESRI','115','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112040','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997957260824256,'EPSG','9201','EPSG','8806','False easting',-122023.7328976339,'EPSG','9001','EPSG','8807','False northing',71013.81176829511,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112040_USAGE','conversion','ESRI','112040','ESRI','115','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112040','OSGB36_National_Highways_A21H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112040',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112040_USAGE','projected_crs','ESRI','112040','ESRI','115','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112041','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997077393995895,'EPSG','9201','EPSG','8806','False easting',-139014.8049133809,'EPSG','9001','EPSG','8807','False northing',71007.56222194275,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112041_USAGE','conversion','ESRI','112041','ESRI','116','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112041','OSGB36_National_Highways_A22H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112041',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112041_USAGE','projected_crs','ESRI','112041','ESRI','116','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112042','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997327330303357,'EPSG','9201','EPSG','8806','False easting',-139018.280413835,'EPSG','9001','EPSG','8807','False northing',71009.3374775704,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112042_USAGE','conversion','ESRI','112042','ESRI','116','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112042','OSGB36_National_Highways_A22H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112042',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112042_USAGE','projected_crs','ESRI','112042','ESRI','116','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112043','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996557524136872,'EPSG','9201','EPSG','8806','False easting',-156008.5023814753,'EPSG','9001','EPSG','8807','False northing',71003.86967362018,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112043_USAGE','conversion','ESRI','112043','ESRI','117','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112043','OSGB36_National_Highways_A23H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112043',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112043_USAGE','projected_crs','ESRI','112043','ESRI','117','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112044','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.99968074474471,'EPSG','9201','EPSG','8806','False easting',-156012.4027402983,'EPSG','9001','EPSG','8807','False northing',71005.64483693065,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112044_USAGE','conversion','ESRI','112044','ESRI','117','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112044','OSGB36_National_Highways_A23H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112044',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112044_USAGE','projected_crs','ESRI','112044','ESRI','117','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112045','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996127672593187,'EPSG','9201','EPSG','8806','False easting',-165001.8975238841,'EPSG','9001','EPSG','8807','False northing',71000.81651027738,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112045_USAGE','conversion','ESRI','112045','ESRI','118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112045','OSGB36_National_Highways_A24H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112045',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112045_USAGE','projected_crs','ESRI','112045','ESRI','118','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112046','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996377585156724,'EPSG','9201','EPSG','8806','False easting',-165006.0227260173,'EPSG','9001','EPSG','8807','False northing',71002.5915972559,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112046_USAGE','conversion','ESRI','112046','ESRI','118','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112046','OSGB36_National_Highways_A24H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112046',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112046_USAGE','projected_crs','ESRI','112046','ESRI','118','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112047','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995647881974643,'EPSG','9201','EPSG','8806','False easting',-175993.5763422596,'EPSG','9001','EPSG','8807','False northing',70997.40863807063,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112047_USAGE','conversion','ESRI','112047','ESRI','119','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112047','OSGB36_National_Highways_A25H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112047',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112047_USAGE','projected_crs','ESRI','112047','ESRI','119','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112048','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995897782542964,'EPSG','9201','EPSG','8806','False easting',-175997.9763466683,'EPSG','9001','EPSG','8807','False northing',70999.18363984914,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112048_USAGE','conversion','ESRI','112048','ESRI','119','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112048','OSGB36_National_Highways_A25H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112048',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112048_USAGE','projected_crs','ESRI','112048','ESRI','119','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112049','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995168137411531,'EPSG','9201','EPSG','8806','False easting',-185984.2845534612,'EPSG','9001','EPSG','8807','False northing',70994.00109298788,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112049_USAGE','conversion','ESRI','112049','ESRI','120','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112049','OSGB36_National_Highways_A26H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112049',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112049_USAGE','projected_crs','ESRI','112049','ESRI','120','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112050','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995418025985787,'EPSG','9201','EPSG','8806','False easting',-185988.9343349418,'EPSG','9001','EPSG','8807','False northing',70995.77600957456,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112050_USAGE','conversion','ESRI','112050','ESRI','120','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112050','OSGB36_National_Highways_A26H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112050',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112050_USAGE','projected_crs','ESRI','112050','ESRI','120','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112051','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994668452458347,'EPSG','9201','EPSG','8806','False easting',-195973.6419052653,'EPSG','9001','EPSG','8807','False northing',70990.45191466244,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112051_USAGE','conversion','ESRI','112051','ESRI','121','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112051','OSGB36_National_Highways_A27H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112051',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112051_USAGE','projected_crs','ESRI','112051','ESRI','121','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112052','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994918328540012,'EPSG','9201','EPSG','8806','False easting',-195978.5414300451,'EPSG','9001','EPSG','8807','False northing',70992.22674251634,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112052_USAGE','conversion','ESRI','112052','ESRI','121','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112052','OSGB36_National_Highways_A27H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112052',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112052_USAGE','projected_crs','ESRI','112052','ESRI','121','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112053','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994158825273456,'EPSG','9201','EPSG','8806','False easting',-205961.7945968577,'EPSG','9001','EPSG','8807','False northing',70986.83211833447,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112053_USAGE','conversion','ESRI','112053','ESRI','122','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112053','OSGB36_National_Highways_A28H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112053',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112053_USAGE','projected_crs','ESRI','112053','ESRI','122','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112054','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994408688613964,'EPSG','9201','EPSG','8806','False easting',-205966.9438348191,'EPSG','9001','EPSG','8807','False northing',70988.6068556901,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112054_USAGE','conversion','ESRI','112054','ESRI','122','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112054','OSGB36_National_Highways_A28H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112054',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112054_USAGE','projected_crs','ESRI','112054','ESRI','122','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112055','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993659241229034,'EPSG','9201','EPSG','8806','False easting',-214949.3800873325,'EPSG','9001','EPSG','8807','False northing',70983.28365674701,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112055_USAGE','conversion','ESRI','112055','ESRI','123','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112055','OSGB36_National_Highways_A29H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112055',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112055_USAGE','projected_crs','ESRI','112055','ESRI','123','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112056','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993139726802819,'EPSG','9201','EPSG','8806','False easting',-223935.6193491957,'EPSG','9001','EPSG','8807','False northing',70979.593633004,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112056_USAGE','conversion','ESRI','112056','ESRI','124','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112056','OSGB36_National_Highways_A30H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112056',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112056_USAGE','projected_crs','ESRI','112056','ESRI','124','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112057','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999667551366491,'EPSG','9201','EPSG','8806','False easting',88032.17537165637,'EPSG','9001','EPSG','8807','False northing',111040.5848437938,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112057_USAGE','conversion','ESRI','112057','ESRI','125','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112057','OSGB36_National_Highways_B15H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112057',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112057_USAGE','projected_crs','ESRI','112057','ESRI','125','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112058','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999917552430316,'EPSG','9201','EPSG','8806','False easting',88034.37625857393,'EPSG','9001','EPSG','8807','False northing',111043.3609625194,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112058_USAGE','conversion','ESRI','112058','ESRI','125','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112058','OSGB36_National_Highways_B15H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112058',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112058_USAGE','projected_crs','ESRI','112058','ESRI','125','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112059','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000016756599497,'EPSG','9201','EPSG','8806','False easting',88036.5772555427,'EPSG','9001','EPSG','8807','False northing',111046.1372200595,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112059_USAGE','conversion','ESRI','112059','ESRI','125','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112059','OSGB36_National_Highways_B15H3',NULL,'EPSG','4400','EPSG','4277','ESRI','112059',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112059_USAGE','projected_crs','ESRI','112059','ESRI','125','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112060','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000011771557166,'EPSG','9201','EPSG','8806','False easting',54022.17583441971,'EPSG','9001','EPSG','8807','False northing',111045.5836596405,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112060_USAGE','conversion','ESRI','112060','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112060','OSGB36_National_Highways_B16H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112060',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112060_USAGE','projected_crs','ESRI','112060','ESRI','126','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112061','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000036772789,'EPSG','9201','EPSG','8806','False easting',54023.52643946325,'EPSG','9001','EPSG','8807','False northing',111048.3599033411,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112061_USAGE','conversion','ESRI','112061','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112061','OSGB36_National_Highways_B16H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112061',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112061_USAGE','projected_crs','ESRI','112061','ESRI','126','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112062','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000061775270976,'EPSG','9201','EPSG','8806','False easting',54024.87711204128,'EPSG','9001','EPSG','8807','False northing',111051.1362858626,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112062_USAGE','conversion','ESRI','112062','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112062','OSGB36_National_Highways_B16H3',NULL,'EPSG','4400','EPSG','4277','ESRI','112062',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112062_USAGE','projected_crs','ESRI','112062','ESRI','126','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112063','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000086779003184,'EPSG','9201','EPSG','8806','False easting',54026.22785215884,'EPSG','9001','EPSG','8807','False northing',111053.9128072154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112063_USAGE','conversion','ESRI','112063','ESRI','126','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112063','OSGB36_National_Highways_B16H4',NULL,'EPSG','4400','EPSG','4277','ESRI','112063',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112063_USAGE','projected_crs','ESRI','112063','ESRI','126','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112064','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999807598109365,'EPSG','9201','EPSG','8806','False easting',-24009.11134761462,'EPSG','9001','EPSG','8807','False northing',111042.1399827176,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112064_USAGE','conversion','ESRI','112064','ESRI','127','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112064','OSGB36_National_Highways_B17H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112064',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112064_USAGE','projected_crs','ESRI','112064','ESRI','127','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112065','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000005760267449,'EPSG','9201','EPSG','8806','False easting',-24009.7115979077,'EPSG','9001','EPSG','8807','False northing',111044.9161403231,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112065_USAGE','conversion','ESRI','112065','ESRI','127','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112065','OSGB36_National_Highways_B17H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112065',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112065_USAGE','projected_crs','ESRI','112065','ESRI','127','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112066','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999277441837596,'EPSG','9201','EPSG','8806','False easting',-58018.94295715116,'EPSG','9001','EPSG','8807','False northing',111036.2529007548,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112066_USAGE','conversion','ESRI','112066','ESRI','128','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112066','OSGB36_National_Highways_B18H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112066',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112066_USAGE','projected_crs','ESRI','112066','ESRI','128','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112067','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999527433148317,'EPSG','9201','EPSG','8806','False easting',-58020.39348511989,'EPSG','9001','EPSG','8807','False northing',111039.0289111777,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112067_USAGE','conversion','ESRI','112067','ESRI','128','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112067','OSGB36_National_Highways_B18H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112067',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112067_USAGE','projected_crs','ESRI','112067','ESRI','128','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112068','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999873734042937,'EPSG','9201','EPSG','8806','False easting',-88023.98625017522,'EPSG','9001','EPSG','8807','False northing',111030.2553837437,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112068_USAGE','conversion','ESRI','112068','ESRI','129','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112068','OSGB36_National_Highways_B19H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112068',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112068_USAGE','projected_crs','ESRI','112068','ESRI','129','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112069','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998257299268304,'EPSG','9201','EPSG','8806','False easting',-105023.5775148396,'EPSG','9001','EPSG','8807','False northing',111024.9248014019,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112069_USAGE','conversion','ESRI','112069','ESRI','130','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112069','OSGB36_National_Highways_B20H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112069',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112069_USAGE','projected_crs','ESRI','112069','ESRI','130','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112070','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997707308768334,'EPSG','9201','EPSG','8806','False easting',-122020.6822661785,'EPSG','9001','EPSG','8807','False northing',111018.817471687,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112070_USAGE','conversion','ESRI','112070','ESRI','131','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112070','OSGB36_National_Highways_B21H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112070',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112070_USAGE','projected_crs','ESRI','112070','ESRI','131','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112071','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9997087392023101,'EPSG','9201','EPSG','8806','False easting',-139014.9439413935,'EPSG','9001','EPSG','8807','False northing',111011.9336510408,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112071_USAGE','conversion','ESRI','112071','ESRI','132','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112071','OSGB36_National_Highways_B22H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112071',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112071_USAGE','projected_crs','ESRI','112071','ESRI','132','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112072','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996557524136872,'EPSG','9201','EPSG','8806','False easting',-156008.5023814753,'EPSG','9001','EPSG','8807','False northing',111006.0497714344,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112072_USAGE','conversion','ESRI','112072','ESRI','133','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112072','OSGB36_National_Highways_B23H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112072',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112072_USAGE','projected_crs','ESRI','112072','ESRI','133','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112073','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996137668720859,'EPSG','9201','EPSG','8806','False easting',-165002.0625257816,'EPSG','9001','EPSG','8807','False northing',111001.387517344,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112073_USAGE','conversion','ESRI','112073','ESRI','134','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112073','OSGB36_National_Highways_B24H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112073',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112073_USAGE','projected_crs','ESRI','112073','ESRI','134','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112074','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995647881974643,'EPSG','9201','EPSG','8806','False easting',-175993.5763422596,'EPSG','9001','EPSG','8807','False northing',110995.9487158569,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112074_USAGE','conversion','ESRI','112074','ESRI','135','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112074','OSGB36_National_Highways_B25H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112074',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112074_USAGE','projected_crs','ESRI','112074','ESRI','135','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112075','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9995168137411531,'EPSG','9201','EPSG','8806','False easting',-185984.2845534612,'EPSG','9001','EPSG','8807','False northing',110990.6214270655,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112075_USAGE','conversion','ESRI','112075','ESRI','136','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112075','OSGB36_National_Highways_B26H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112075',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112075_USAGE','projected_crs','ESRI','112075','ESRI','136','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112076','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994668452458347,'EPSG','9201','EPSG','8806','False easting',-195973.6419052653,'EPSG','9001','EPSG','8807','False northing',110985.0727116554,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112076_USAGE','conversion','ESRI','112076','ESRI','137','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112076','OSGB36_National_Highways_B27H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112076',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112076_USAGE','projected_crs','ESRI','112076','ESRI','137','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112077','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9994158825273456,'EPSG','9201','EPSG','8806','False easting',-205961.7945968577,'EPSG','9001','EPSG','8807','False northing',110979.4135934525,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112077_USAGE','conversion','ESRI','112077','ESRI','138','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112077','OSGB36_National_Highways_B28H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112077',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112077_USAGE','projected_crs','ESRI','112077','ESRI','138','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112078','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999366923242045,'EPSG','9201','EPSG','8806','False easting',-214949.5949836332,'EPSG','9001','EPSG','8807','False northing',110973.9769450385,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112078_USAGE','conversion','ESRI','112078','ESRI','139','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112078','OSGB36_National_Highways_B29H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112078',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112078_USAGE','projected_crs','ESRI','112078','ESRI','139','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112079','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9993149716955489,'EPSG','9201','EPSG','8806','False easting',-223935.8432178783,'EPSG','9001','EPSG','8807','False northing',110968.2080231451,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112079_USAGE','conversion','ESRI','112079','ESRI','140','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112079','OSGB36_National_Highways_B30H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112079',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112079_USAGE','projected_crs','ESRI','112079','ESRI','140','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112080','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9992610277292974,'EPSG','9201','EPSG','8806','False easting',-232920.6915322958,'EPSG','9001','EPSG','8807','False northing',110962.2178544413,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112080_USAGE','conversion','ESRI','112080','ESRI','141','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112080','OSGB36_National_Highways_B31H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112080',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112080_USAGE','projected_crs','ESRI','112080','ESRI','141','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112081','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9992060907870448,'EPSG','9201','EPSG','8806','False easting',-241904.3280719596,'EPSG','9001','EPSG','8807','False northing',110956.117421436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112081_USAGE','conversion','ESRI','112081','ESRI','142','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112081','OSGB36_National_Highways_B32H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112081',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112081_USAGE','projected_crs','ESRI','112081','ESRI','142','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112082','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998657330368111,'EPSG','9201','EPSG','8806','False easting',128033.8645538678,'EPSG','9001','EPSG','8807','False northing',126033.3354202136,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112082_USAGE','conversion','ESRI','112082','ESRI','143','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112082','OSGB36_National_Highways_C13H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112082',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112082_USAGE','projected_crs','ESRI','112082','ESRI','143','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112083','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999137409943842,'EPSG','9201','EPSG','8806','False easting',111034.697926722,'EPSG','9001','EPSG','8807','False northing',126039.3868357385,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112083_USAGE','conversion','ESRI','112083','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112083','OSGB36_National_Highways_C14H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112083',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112083_USAGE','projected_crs','ESRI','112083','ESRI','144','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112084','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999387397753633,'EPSG','9201','EPSG','8806','False easting',111037.4738982691,'EPSG','9001','EPSG','8807','False northing',126042.5379385757,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112084_USAGE','conversion','ESRI','112084','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112084','OSGB36_National_Highways_C14H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112084',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112084_USAGE','projected_crs','ESRI','112084','ESRI','144','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112085','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999637398063597,'EPSG','9201','EPSG','8806','False easting',111040.2500086234,'EPSG','9001','EPSG','8807','False northing',126045.689198978,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112085_USAGE','conversion','ESRI','112085','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112085','OSGB36_National_Highways_C14H3',NULL,'EPSG','4400','EPSG','4277','ESRI','112085',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112085_USAGE','projected_crs','ESRI','112085','ESRI','144','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112086','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999887410874669,'EPSG','9201','EPSG','8806','False easting',111043.0262577955,'EPSG','9001','EPSG','8807','False northing',126048.840616957,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112086_USAGE','conversion','ESRI','112086','ESRI','144','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112086','OSGB36_National_Highways_C14H4',NULL,'EPSG','4400','EPSG','4277','ESRI','112086',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112086_USAGE','projected_crs','ESRI','112086','ESRI','144','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112087','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999667551366491,'EPSG','9201','EPSG','8806','False easting',88032.17537165637,'EPSG','9001','EPSG','8807','False northing',126046.0692821443,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112087_USAGE','conversion','ESRI','112087','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112087','OSGB36_National_Highways_C15H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112087',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112087_USAGE','projected_crs','ESRI','112087','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112088','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999917552430316,'EPSG','9201','EPSG','8806','False easting',88034.37625857393,'EPSG','9001','EPSG','8807','False northing',126049.220552049,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112088_USAGE','conversion','ESRI','112088','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112088','OSGB36_National_Highways_C15H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112088',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112088_USAGE','projected_crs','ESRI','112088','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112089','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000016756599497,'EPSG','9201','EPSG','8806','False easting',88036.5772555427,'EPSG','9001','EPSG','8807','False northing',126052.371979527,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112089_USAGE','conversion','ESRI','112089','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112089','OSGB36_National_Highways_C15H3',NULL,'EPSG','4400','EPSG','4277','ESRI','112089',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112089_USAGE','projected_crs','ESRI','112089','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112090','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000041759206141,'EPSG','9201','EPSG','8806','False easting',88038.77836257096,'EPSG','9001','EPSG','8807','False northing',126055.5235645902,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112090_USAGE','conversion','ESRI','112090','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112090','OSGB36_National_Highways_C15H4',NULL,'EPSG','4400','EPSG','4277','ESRI','112090',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112090_USAGE','projected_crs','ESRI','112090','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112091','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000066763063055,'EPSG','9201','EPSG','8806','False easting',88040.97957966694,'EPSG','9001','EPSG','8807','False northing',126058.6753072504,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112091_USAGE','conversion','ESRI','112091','ESRI','145','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112091','OSGB36_National_Highways_C15H5',NULL,'EPSG','4400','EPSG','4277','ESRI','112091',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112091_USAGE','projected_crs','ESRI','112091','ESRI','145','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112092','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000011771557166,'EPSG','9201','EPSG','8806','False easting',54022.17583441971,'EPSG','9001','EPSG','8807','False northing',126051.743613646,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112092_USAGE','conversion','ESRI','112092','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112092','OSGB36_National_Highways_C16H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112092',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112092_USAGE','projected_crs','ESRI','112092','ESRI','146','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112093','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000036772789,'EPSG','9201','EPSG','8806','False easting',54023.52643946325,'EPSG','9001','EPSG','8807','False northing',126054.8950254143,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112093_USAGE','conversion','ESRI','112093','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112093','OSGB36_National_Highways_C16H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112093',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112093_USAGE','projected_crs','ESRI','112093','ESRI','146','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112094','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000061775270976,'EPSG','9201','EPSG','8806','False easting',54024.87711204128,'EPSG','9001','EPSG','8807','False northing',126058.046594763,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112094_USAGE','conversion','ESRI','112094','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112094','OSGB36_National_Highways_C16H3',NULL,'EPSG','4400','EPSG','4277','ESRI','112094',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112094_USAGE','projected_crs','ESRI','112094','ESRI','146','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112095','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000086779003184,'EPSG','9201','EPSG','8806','False easting',54026.22785215884,'EPSG','9001','EPSG','8807','False northing',126061.198321704,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112095_USAGE','conversion','ESRI','112095','ESRI','146','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112095','OSGB36_National_Highways_C16H4',NULL,'EPSG','4400','EPSG','4277','ESRI','112095',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112095_USAGE','projected_crs','ESRI','112095','ESRI','146','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112096','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999807598109365,'EPSG','9201','EPSG','8806','False easting',-24009.11134761462,'EPSG','9001','EPSG','8807','False northing',126047.8345749767,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112096_USAGE','conversion','ESRI','112096','ESRI','147','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112096','OSGB36_National_Highways_C17H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112096',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112096_USAGE','projected_crs','ESRI','112096','ESRI','147','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112097','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.000005760267449,'EPSG','9201','EPSG','8806','False easting',-24009.7115979077,'EPSG','9001','EPSG','8807','False northing',126050.9858890154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112097_USAGE','conversion','ESRI','112097','ESRI','147','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112097','OSGB36_National_Highways_C17H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112097',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112097_USAGE','projected_crs','ESRI','112097','ESRI','147','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112098','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999277441837596,'EPSG','9201','EPSG','8806','False easting',-58018.94295715116,'EPSG','9001','EPSG','8807','False northing',126041.1519413973,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112098_USAGE','conversion','ESRI','112098','ESRI','148','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112098','OSGB36_National_Highways_C18H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112098',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112098_USAGE','projected_crs','ESRI','112098','ESRI','148','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112099','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999527433148317,'EPSG','9201','EPSG','8806','False easting',-58020.39348511989,'EPSG','9001','EPSG','8807','False northing',126044.3030883639,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112099_USAGE','conversion','ESRI','112099','ESRI','148','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112099','OSGB36_National_Highways_C18H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112099',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112099_USAGE','projected_crs','ESRI','112099','ESRI','148','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112100','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.999873734042937,'EPSG','9201','EPSG','8806','False easting',-88023.98625017522,'EPSG','9001','EPSG','8807','False northing',126034.3439491145,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112100_USAGE','conversion','ESRI','112100','ESRI','149','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112100','OSGB36_National_Highways_C19H1',NULL,'EPSG','4400','EPSG','4277','ESRI','112100',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112100_USAGE','projected_crs','ESRI','112100','ESRI','149','EPSG','1024'); INSERT INTO "conversion" VALUES('ESRI','112101','unnamed',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-2.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9998987318237049,'EPSG','9201','EPSG','8806','False easting',-88026.18693235706,'EPSG','9001','EPSG','8807','False northing',126037.4949258749,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'CONV_112101_USAGE','conversion','ESRI','112101','ESRI','149','EPSG','1024'); INSERT INTO "projected_crs" VALUES('ESRI','112101','OSGB36_National_Highways_C19H2',NULL,'EPSG','4400','EPSG','4277','ESRI','112101',NULL,0); INSERT INTO "usage" VALUES('ESRI', 'PCRS_112101_USAGE','projected_crs','ESRI','112101','ESRI','149','EPSG','1024'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','2181','ESRI','102550','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','2182','ESRI','102551','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','2183','ESRI','102552','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','2184','ESRI','102553','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','2185','ESRI','102554','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','2186','ESRI','102555','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','2187','ESRI','102556','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31491','ESRI','103972','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31492','ESRI','103973','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31493','ESRI','103974','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31494','ESRI','103975','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31495','ESRI','103976','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31917','EPSG','31986','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31918','EPSG','31987','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31919','EPSG','31988','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31920','EPSG','31989','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31921','EPSG','31990','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','31922','EPSG','31991','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','54035','EPSG','8857','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','54036','EPSG','8858','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','54037','EPSG','8859','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','65163','EPSG','3088','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102006','EPSG','3338','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102040','EPSG','5178','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102046','EPSG','6328','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102047','EPSG','6329','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102048','EPSG','6330','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102049','EPSG','6331','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102050','EPSG','6332','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102051','EPSG','6333','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102052','EPSG','6334','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102053','EPSG','6335','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102054','EPSG','6336','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102055','EPSG','6337','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102056','EPSG','6338','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102057','EPSG','6339','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102058','EPSG','6340','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102059','EPSG','6341','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102065','EPSG','5513','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102066','EPSG','5221','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102067','EPSG','5514','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102080','EPSG','5179','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102081','EPSG','5185','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102082','EPSG','5186','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102083','EPSG','5187','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102084','EPSG','5188','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102085','EPSG','5173','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102086','EPSG','5174','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102087','EPSG','5175','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102088','EPSG','5176','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102089','EPSG','5177','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102090','EPSG','3770','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102091','EPSG','3003','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102092','EPSG','3004','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102095','EPSG','3448','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102100','EPSG','3857','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102110','EPSG','2154','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102111','EPSG','5519','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102112','EPSG','3764','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102119','EPSG','3080','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102123','EPSG','3078','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102124','EPSG','26701','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102125','EPSG','26702','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102126','EPSG','3370','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102127','EPSG','3371','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102128','EPSG','26901','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102129','EPSG','26902','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102130','EPSG','3372','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102131','EPSG','3373','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102139','EPSG','3067','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102140','EPSG','2326','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102145','EPSG','3097','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102146','EPSG','3098','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102147','EPSG','3099','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102148','EPSG','3100','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102149','EPSG','3101','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102151','EPSG','3092','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102152','EPSG','3093','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102153','EPSG','3094','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102154','EPSG','3095','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102155','EPSG','3096','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102167','EPSG','2942','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102169','EPSG','2943','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102170','EPSG','3110','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102171','EPSG','3111','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102172','EPSG','3107','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102180','EPSG','3771','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102181','EPSG','3772','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102182','EPSG','3773','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102183','EPSG','3800','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102184','EPSG','3400','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102185','EPSG','3401','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102186','EPSG','3775','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102187','EPSG','3776','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102188','EPSG','3777','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102189','EPSG','3801','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102190','EPSG','3005','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102191','EPSG','26191','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102192','EPSG','26192','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102199','EPSG','3812','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102200','EPSG','2195','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102201','EPSG','4414','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102202','EPSG','3750','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102203','EPSG','3751','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102205','EPSG','3741','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102206','EPSG','3742','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102207','EPSG','3743','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102208','EPSG','3075','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102209','EPSG','3464','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102210','EPSG','3077','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102211','EPSG','3748','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102212','EPSG','32159','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102214','EPSG','4826','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102218','EPSG','9674','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102229','EPSG','2759','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102230','EPSG','2760','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102234','EPSG','3158','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102235','EPSG','3159','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102236','EPSG','3160','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102241','EPSG','2766','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102242','EPSG','2767','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102243','EPSG','2768','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102244','EPSG','2769','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102245','EPSG','2770','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102246','EPSG','2771','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102248','EPSG','2761','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102249','EPSG','2762','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102250','EPSG','2763','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102251','EPSG','2764','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102252','EPSG','2765','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102253','EPSG','2772','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102254','EPSG','2773','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102255','EPSG','2774','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102256','EPSG','2775','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102257','EPSG','2776','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102258','EPSG','2777','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102259','EPSG','2778','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102260','EPSG','2779','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102261','EPSG','2782','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102262','EPSG','2783','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102263','EPSG','2784','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102264','EPSG','2785','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102265','EPSG','2786','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102266','EPSG','2780','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102267','EPSG','2781','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102268','EPSG','2787','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102269','EPSG','2788','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102270','EPSG','2789','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102271','EPSG','2790','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102272','EPSG','2791','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102273','EPSG','2792','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102274','EPSG','2793','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102275','EPSG','2794','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102276','EPSG','2795','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102277','EPSG','2796','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102278','EPSG','2797','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102279','EPSG','2798','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102280','EPSG','2799','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102281','EPSG','2800','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102282','EPSG','2801','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102283','EPSG','2802','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102284','EPSG','2803','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102285','EPSG','2804','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102286','EPSG','2805','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102287','EPSG','2806','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102288','EPSG','2807','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102289','EPSG','2808','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102290','EPSG','2809','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102291','EPSG','2810','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102292','EPSG','2811','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102293','EPSG','2812','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102294','EPSG','2813','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102295','EPSG','2814','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102296','EPSG','2815','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102297','EPSG','2816','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102298','EPSG','2817','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102300','EPSG','2818','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102304','EPSG','2819','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102305','EPSG','5367','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102307','EPSG','2820','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102308','EPSG','2821','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102309','EPSG','2822','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102310','EPSG','2823','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102311','EPSG','2824','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102312','EPSG','2825','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102313','EPSG','2826','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102314','EPSG','2827','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102315','EPSG','2828','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102316','EPSG','2829','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102317','EPSG','2830','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102318','EPSG','2831','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102320','EPSG','2832','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102321','EPSG','2833','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102322','EPSG','2834','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102323','EPSG','2835','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102324','EPSG','2836','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102325','EPSG','2837','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102326','EPSG','2838','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102327','EPSG','2839','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102330','EPSG','2840','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102331','EPSG','5014','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102332','EPSG','5015','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102333','EPSG','5016','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102334','EPSG','2841','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102335','EPSG','2842','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102336','EPSG','2843','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102337','EPSG','2844','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102338','EPSG','2845','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102339','EPSG','2846','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102340','EPSG','2847','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102341','EPSG','2848','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102342','EPSG','2849','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102343','EPSG','2850','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102344','EPSG','2851','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102345','EPSG','2852','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102346','EPSG','2853','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102347','EPSG','2854','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102348','EPSG','2855','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102349','EPSG','2856','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102350','EPSG','2857','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102351','EPSG','2858','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102352','EPSG','2859','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102353','EPSG','2860','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102354','EPSG','2861','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102355','EPSG','2862','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102356','EPSG','2863','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102357','EPSG','2864','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102358','EPSG','2865','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102361','EPSG','2866','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102362','EPSG','4647','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102363','EPSG','3090','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102376','EPSG','6884','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102377','EPSG','6886','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102378','EPSG','6885','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102379','EPSG','6887','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102380','EPSG','6867','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102381','EPSG','6868','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102382','EPSG','6342','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102383','EPSG','6343','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102384','EPSG','6344','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102385','EPSG','6345','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102386','EPSG','6346','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102387','EPSG','6347','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102388','EPSG','6348','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102420','EPSG','5325','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102439','EPSG','4462','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102441','EPSG','3828','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102442','EPSG','3827','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102443','EPSG','3826','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102444','EPSG','3825','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102449','EPSG','8693','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102463','EPSG','3760','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102466','EPSG','26857','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102467','EPSG','26858','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102468','EPSG','26859','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102469','EPSG','3815','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102490','EPSG','5247','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102493','EPSG','6634','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102494','EPSG','6635','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102495','EPSG','6637','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102496','EPSG','6636','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102500','EPSG','6785','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102501','EPSG','6797','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102502','EPSG','6789','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102503','EPSG','6793','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102504','EPSG','6801','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102505','EPSG','6805','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102506','EPSG','6809','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102507','EPSG','6813','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102508','EPSG','6817','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102509','EPSG','6821','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102510','EPSG','6825','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102511','EPSG','6829','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102512','EPSG','6833','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102513','EPSG','6837','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102514','EPSG','6841','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102515','EPSG','6849','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102516','EPSG','6845','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102517','EPSG','6853','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102518','EPSG','6857','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102519','EPSG','6861','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102520','EPSG','6628','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102521','EPSG','6629','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102522','EPSG','6630','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102523','EPSG','6631','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102524','EPSG','6632','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102527','EPSG','6633','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102530','EPSG','6784','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102531','EPSG','6796','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102532','EPSG','6788','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102533','EPSG','6792','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102534','EPSG','6800','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102535','EPSG','6804','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102536','EPSG','6808','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102537','EPSG','6812','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102538','EPSG','6816','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102539','EPSG','6820','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102540','EPSG','6824','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102541','EPSG','6828','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102542','EPSG','6832','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102543','EPSG','6836','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102544','EPSG','6840','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102545','EPSG','6848','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102546','EPSG','6844','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102547','EPSG','6852','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102548','EPSG','6856','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102549','EPSG','6860','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102557','EPSG','7692','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102558','EPSG','7693','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102559','EPSG','7694','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102560','EPSG','7695','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102561','EPSG','7696','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102590','EPSG','8441','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102593','EPSG','6688','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102594','EPSG','6689','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102595','EPSG','6690','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102596','EPSG','6691','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102597','EPSG','6692','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102601','EPSG','3083','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102602','EPSG','3082','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102603','EPSG','3081','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102605','EPSG','8826','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102606','EPSG','3072','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102607','EPSG','3463','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102608','EPSG','3074','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102609','EPSG','3814','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102610','EPSG','6669','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102611','EPSG','6670','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102612','EPSG','6671','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102613','EPSG','6672','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102614','EPSG','6673','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102615','EPSG','6674','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102616','EPSG','6675','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102617','EPSG','6676','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102618','EPSG','6677','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102619','EPSG','6678','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102620','EPSG','6679','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102621','EPSG','6680','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102622','EPSG','6681','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102623','EPSG','6682','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102624','EPSG','6683','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102625','EPSG','6684','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102626','EPSG','6685','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102627','EPSG','6686','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102628','EPSG','6687','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102641','EPSG','2225','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102642','EPSG','2226','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102643','EPSG','2227','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102644','EPSG','2228','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102645','EPSG','2229','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102646','EPSG','2230','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102647','EPSG','4437','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102651','EPSG','3433','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102652','EPSG','3434','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102653','EPSG','2231','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102654','EPSG','2232','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102655','EPSG','2233','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102656','EPSG','2234','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102657','EPSG','2235','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102658','EPSG','2236','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102659','EPSG','2237','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102660','EPSG','2238','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102663','EPSG','3759','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102666','EPSG','2239','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102667','EPSG','2240','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102668','EPSG','2241','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102669','EPSG','2242','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102670','EPSG','2243','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102671','EPSG','3435','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102672','EPSG','3436','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102673','EPSG','2965','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102674','EPSG','2966','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102675','EPSG','3417','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102676','EPSG','3418','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102677','EPSG','3419','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102678','EPSG','3420','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102679','EPSG','2246','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102680','EPSG','2247','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102681','EPSG','3451','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102682','EPSG','3452','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102683','EPSG','26847','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102684','EPSG','26848','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102685','EPSG','2248','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102686','EPSG','2249','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102687','EPSG','2250','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102691','EPSG','26849','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102692','EPSG','26850','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102693','EPSG','26851','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102694','EPSG','2254','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102695','EPSG','2255','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102704','EPSG','26852','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102706','EPSG','7142','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102707','EPSG','3421','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102708','EPSG','3422','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102709','EPSG','3423','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102710','EPSG','3437','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102711','EPSG','3424','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102712','EPSG','2257','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102713','EPSG','2258','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102714','EPSG','2259','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102715','EPSG','2260','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102716','EPSG','2261','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102717','EPSG','2262','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102718','EPSG','2263','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102719','EPSG','2264','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102722','EPSG','3734','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102723','EPSG','3735','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102724','EPSG','2267','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102725','EPSG','2268','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102728','EPSG','2271','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102729','EPSG','2272','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102730','EPSG','3438','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102734','EPSG','4457','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102735','EPSG','3455','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102736','EPSG','2274','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102737','EPSG','2275','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102738','EPSG','2276','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102739','EPSG','2277','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102740','EPSG','2278','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102741','EPSG','2279','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102742','EPSG','3560','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102743','EPSG','3566','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102744','EPSG','3567','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102745','EPSG','5646','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102746','EPSG','2283','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102747','EPSG','2284','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102748','EPSG','2285','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102749','EPSG','2286','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102750','EPSG','26853','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102751','EPSG','26854','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102752','EPSG','2287','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102753','EPSG','2288','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102754','EPSG','2289','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102755','EPSG','3736','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102756','EPSG','3737','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102757','EPSG','3738','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102758','EPSG','3739','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102762','EPSG','4415','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102763','EPSG','3089','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102764','EPSG','4417','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102765','EPSG','4434','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102767','EPSG','6255','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102768','EPSG','6257','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102769','EPSG','6244','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102770','EPSG','6246','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102771','EPSG','6247','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102772','EPSG','6250','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102773','EPSG','6272','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102774','EPSG','6256','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102775','EPSG','6252','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102776','EPSG','6275','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102777','EPSG','6264','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102778','EPSG','6273','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102779','EPSG','6266','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102780','EPSG','6260','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102781','EPSG','6254','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102782','EPSG','6269','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102783','EPSG','6261','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102784','EPSG','6267','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102785','EPSG','6270','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102786','EPSG','6274','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102787','EPSG','6262','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102788','EPSG','6251','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102789','EPSG','6259','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102790','EPSG','6245','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102791','EPSG','6263','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102792','EPSG','6268','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102793','EPSG','6248','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102794','EPSG','6271','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102795','EPSG','6253','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102796','EPSG','6249','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102797','EPSG','6258','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102798','EPSG','6265','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102901','EPSG','23303','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102902','EPSG','23301','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102903','EPSG','23304','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102904','EPSG','23302','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102905','EPSG','23305','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102906','EPSG','23307','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102907','EPSG','23306','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102908','EPSG','23308','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102909','EPSG','23312','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102910','EPSG','23314','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102911','EPSG','23309','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102912','EPSG','23315','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102913','EPSG','23311','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102914','EPSG','23313','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102915','EPSG','23310','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102916','EPSG','23320','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102917','EPSG','23319','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102918','EPSG','23316','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102919','EPSG','23318','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102920','EPSG','23317','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102921','EPSG','23322','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102922','EPSG','23321','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102923','EPSG','23326','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102924','EPSG','23323','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102925','EPSG','23325','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102926','EPSG','23328','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102927','EPSG','23324','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102928','EPSG','23327','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102929','EPSG','23329','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102930','EPSG','23331','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102931','EPSG','23330','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102932','EPSG','23332','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102933','EPSG','23333','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102962','EPSG','6414','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102963','EPSG','6508','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102965','EPSG','6350','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102966','EPSG','6393','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102967','EPSG','6439','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102968','EPSG','6497','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102969','EPSG','6556','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102970','EPSG','6557','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102971','EPSG','6579','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102972','EPSG','6580','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102973','EPSG','6610','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102975','EPSG','6355','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102976','EPSG','6356','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102977','EPSG','6394','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102978','EPSG','6395','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102979','EPSG','6396','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102980','EPSG','6397','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102981','EPSG','6398','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102982','EPSG','6399','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102983','EPSG','6400','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102984','EPSG','6401','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102985','EPSG','6402','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102986','EPSG','6403','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102987','EPSG','6406','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102988','EPSG','6404','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102989','EPSG','6408','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102990','EPSG','6407','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102991','EPSG','6405','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102992','EPSG','6409','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102993','EPSG','6410','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102994','EPSG','6412','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102995','EPSG','6411','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102996','EPSG','6413','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102997','EPSG','6415','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102998','EPSG','6417','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','102999','EPSG','6419','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103000','EPSG','6421','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103001','EPSG','6423','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103002','EPSG','6425','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103003','EPSG','6416','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103004','EPSG','6418','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103005','EPSG','6420','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103006','EPSG','6422','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103007','EPSG','6424','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103008','EPSG','6426','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103009','EPSG','6429','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103010','EPSG','6427','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103011','EPSG','6431','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103012','EPSG','6430','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103013','EPSG','6428','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103014','EPSG','6432','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103015','EPSG','6433','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103016','EPSG','6434','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103017','EPSG','6435','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103018','EPSG','6436','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103019','EPSG','6437','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103020','EPSG','6442','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103021','EPSG','6440','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103022','EPSG','6438','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103023','EPSG','6443','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103024','EPSG','6441','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103025','EPSG','6444','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103026','EPSG','6446','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103027','EPSG','6445','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103028','EPSG','6447','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103029','EPSG','6450','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103030','EPSG','6448','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103031','EPSG','6452','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103032','EPSG','6451','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103033','EPSG','6449','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103034','EPSG','6453','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103035','EPSG','6454','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103036','EPSG','6456','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103037','EPSG','6455','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103038','EPSG','6457','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103039','EPSG','6458','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103040','EPSG','6460','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103041','EPSG','6459','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103042','EPSG','6461','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103043','EPSG','6462','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103044','EPSG','6464','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103045','EPSG','6463','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103046','EPSG','6465','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103047','EPSG','6466','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103048','EPSG','6468','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103049','EPSG','6467','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103050','EPSG','6469','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103051','EPSG','6470','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103052','EPSG','6471','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103053','EPSG','6472','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103054','EPSG','6473','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103055','EPSG','6474','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103056','EPSG','6475','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103057','EPSG','6476','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103058','EPSG','6478','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103059','EPSG','6477','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103060','EPSG','6479','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103061','EPSG','6483','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103062','EPSG','6485','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103063','EPSG','6484','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103064','EPSG','6486','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103065','EPSG','6481','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103066','EPSG','6480','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103067','EPSG','6482','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103068','EPSG','6487','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103069','EPSG','6488','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103070','EPSG','6491','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103071','EPSG','6489','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103072','EPSG','6492','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103073','EPSG','6490','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103074','EPSG','6495','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103075','EPSG','6493','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103076','EPSG','6498','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103077','EPSG','6496','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103078','EPSG','6494','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103079','EPSG','6499','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103080','EPSG','6502','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103081','EPSG','6500','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103082','EPSG','6504','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103083','EPSG','6503','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103084','EPSG','6501','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103085','EPSG','6505','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103086','EPSG','6506','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103087','EPSG','6509','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103088','EPSG','6507','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103089','EPSG','6510','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103090','EPSG','6512','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103091','EPSG','6511','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103092','EPSG','6513','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103093','EPSG','6514','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103094','EPSG','6515','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103095','EPSG','6516','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103096','EPSG','6880','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103097','EPSG','6520','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103098','EPSG','6518','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103099','EPSG','6522','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103100','EPSG','6521','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103101','EPSG','6519','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103102','EPSG','6523','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103103','EPSG','6524','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103104','EPSG','6525','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103105','EPSG','6526','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103106','EPSG','6527','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103107','EPSG','6530','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103108','EPSG','6528','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103109','EPSG','6532','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103110','EPSG','6531','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103111','EPSG','6529','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103112','EPSG','6533','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103113','EPSG','6536','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103114','EPSG','6534','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103115','EPSG','6540','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103116','EPSG','6538','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103117','EPSG','6537','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103118','EPSG','6535','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103119','EPSG','6541','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103120','EPSG','6539','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103121','EPSG','6542','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103122','EPSG','6543','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103123','EPSG','6544','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103124','EPSG','6546','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103125','EPSG','6545','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103126','EPSG','6547','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103127','EPSG','6548','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103128','EPSG','6550','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103129','EPSG','6549','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103130','EPSG','6551','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103131','EPSG','6552','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103132','EPSG','6554','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103133','EPSG','6553','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103134','EPSG','6555','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103135','EPSG','6558','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103136','EPSG','6560','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103137','EPSG','6559','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103138','EPSG','6561','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103139','EPSG','6562','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103140','EPSG','6563','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103141','EPSG','6564','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103142','EPSG','6565','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103143','EPSG','6567','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103144','EPSG','6568','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103145','EPSG','6569','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103146','EPSG','6570','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103147','EPSG','6571','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103148','EPSG','6573','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103149','EPSG','6572','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103150','EPSG','6574','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103151','EPSG','6575','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103152','EPSG','6576','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103153','EPSG','6581','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103154','EPSG','6583','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103155','EPSG','6577','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103156','EPSG','6587','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103157','EPSG','6585','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103158','EPSG','6582','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103159','EPSG','6584','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103160','EPSG','6578','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103161','EPSG','6588','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103162','EPSG','6586','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103163','EPSG','6620','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103164','EPSG','6619','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103165','EPSG','6621','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103169','EPSG','6626','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103170','EPSG','6625','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103171','EPSG','6627','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103172','EPSG','6589','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103173','EPSG','6590','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103174','EPSG','6592','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103175','EPSG','6594','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103176','EPSG','6593','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103177','EPSG','6595','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103178','EPSG','6596','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103179','EPSG','6598','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103180','EPSG','6597','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103181','EPSG','6599','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103182','EPSG','6600','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103183','EPSG','6602','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103184','EPSG','6601','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103185','EPSG','6603','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103186','EPSG','6606','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103187','EPSG','6879','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103188','EPSG','6608','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103189','EPSG','6607','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103190','EPSG','6605','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103191','EPSG','6609','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103192','EPSG','6611','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103193','EPSG','6613','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103194','EPSG','6617','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103195','EPSG','6615','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103196','EPSG','6612','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103197','EPSG','6614','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103198','EPSG','6618','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103199','EPSG','6616','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103200','EPSG','6566','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103201','EPSG','4048','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103202','EPSG','4049','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103203','EPSG','4050','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103204','EPSG','4051','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103205','EPSG','4056','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103206','EPSG','4057','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103207','EPSG','4058','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103208','EPSG','4059','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103209','EPSG','4060','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103210','EPSG','4061','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103211','EPSG','4062','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103212','EPSG','4063','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103213','EPSG','4071','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103214','EPSG','4082','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103215','EPSG','4083','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103216','EPSG','4093','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103217','EPSG','4094','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103218','EPSG','4095','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103219','EPSG','4096','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103301','EPSG','8222','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103302','EPSG','8218','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103303','EPSG','8214','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103304','EPSG','8212','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103305','EPSG','8209','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103306','EPSG','8207','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103308','EPSG','8203','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103309','EPSG','8201','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103310','EPSG','8198','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103311','EPSG','8196','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103312','EPSG','8191','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103314','EPSG','8184','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103315','EPSG','8181','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103316','EPSG','8179','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103317','EPSG','8092','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103318','EPSG','8090','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103320','EPSG','8173','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103321','EPSG','8171','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103324','EPSG','8165','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103325','EPSG','8163','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103326','EPSG','8161','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103331','EPSG','8155','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103333','EPSG','8153','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103334','EPSG','8151','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103336','EPSG','8149','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103337','EPSG','8147','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103339','EPSG','8145','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103341','EPSG','8143','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103342','EPSG','8141','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103343','EPSG','8139','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103348','EPSG','8135','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103349','EPSG','8133','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103350','EPSG','8131','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103352','EPSG','8129','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103353','EPSG','8127','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103354','EPSG','8125','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103355','EPSG','8123','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103356','EPSG','8121','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103357','EPSG','8119','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103359','EPSG','8117','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103360','EPSG','8115','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103361','EPSG','8113','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103362','EPSG','8111','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103363','EPSG','8109','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103364','EPSG','8107','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103365','EPSG','8105','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103366','EPSG','8103','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103367','EPSG','8101','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103368','EPSG','8099','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103369','EPSG','8097','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103371','EPSG','8095','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103401','EPSG','8224','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103402','EPSG','8220','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103403','EPSG','8216','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103404','EPSG','8213','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103405','EPSG','8210','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103406','EPSG','8208','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103408','EPSG','8204','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103409','EPSG','8202','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103410','EPSG','8200','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103411','EPSG','8197','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103412','EPSG','8193','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103414','EPSG','8185','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103415','EPSG','8182','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103416','EPSG','8180','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103417','EPSG','8093','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103418','EPSG','8091','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103420','EPSG','8177','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103421','EPSG','8172','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103424','EPSG','8166','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103425','EPSG','8164','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103426','EPSG','8162','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103431','EPSG','8156','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103433','EPSG','8154','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103434','EPSG','8152','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103436','EPSG','8150','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103437','EPSG','8148','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103439','EPSG','8146','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103441','EPSG','8144','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103442','EPSG','8142','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103443','EPSG','8140','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103448','EPSG','8136','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103449','EPSG','8134','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103450','EPSG','8132','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103452','EPSG','8130','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103453','EPSG','8128','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103454','EPSG','8126','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103455','EPSG','8124','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103456','EPSG','8122','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103457','EPSG','8120','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103459','EPSG','8118','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103460','EPSG','8116','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103461','EPSG','8114','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103462','EPSG','8112','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103463','EPSG','8110','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103464','EPSG','8108','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103465','EPSG','8106','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103466','EPSG','8104','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103467','EPSG','8102','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103468','EPSG','8100','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103469','EPSG','8098','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103471','EPSG','8096','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103595','EPSG','9295','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103596','EPSG','9296','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103597','EPSG','9297','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103696','EPSG','22619','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103697','EPSG','22620','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103698','EPSG','22621','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103794','EPSG','4484','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103795','EPSG','4485','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103796','EPSG','4486','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103797','EPSG','4487','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103798','EPSG','4488','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103799','EPSG','4489','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103873','EPSG','22615','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103874','EPSG','22616','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103875','EPSG','22617','ESRI'); INSERT INTO "deprecation" VALUES('projected_crs','ESRI','103876','EPSG','22618','ESRI'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3461','Dabola_UTM_Zone_28N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3462','Dabola_UTM_Zone_29N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3119','Douala_1948_AOF_West','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3378','GDM_2000_State_Cassini_Negeri_Sembilan_&_Melaka','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3382','GDM_2000_State_Cassini_Pulau_Pinang_&_Seberang_Perai','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','29902','Irish_National_Grid','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3336','K0_1949_UTM_42S','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5181','Korea_2000_Korea_Central_Belt','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102082','Korea_2000_Korea_Central_Belt_2010','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5182','Korea_2000_Korea_Central_Belt_Jeju','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5183','Korea_2000_Korea_East_Belt','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102083','Korea_2000_Korea_East_Belt_2010','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5184','Korea_2000_Korea_East_Sea_Belt','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102084','Korea_2000_Korea_East_Sea_Belt_2010','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102080','Korea_2000_Korea_Unified_Coordinate_System','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5180','Korea_2000_Korea_West_Belt','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102081','Korea_2000_Korea_West_Belt_2010','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3346','Lietuvos_Koordinaciu_Sistema','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2169','Luxembourg_1930_Gauss','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8677','MGI_1901_Balkans_5','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8678','MGI_1901_Balkans_6','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','6316','MGI_1901_Balkans_7','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','8679','MGI_1901_Balkans_8','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','32045','NAD_1927_StatePlane_Vermont_FIPS_3400','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2952','NAD_1983_CRS98_MTM_10','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2945','NAD_1983_CRS98_MTM_3','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2946','NAD_1983_CRS98_MTM_4','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2947','NAD_1983_CRS98_MTM_5','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2948','NAD_1983_CRS98_MTM_6','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2949','NAD_1983_CRS98_MTM_7','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2950','NAD_1983_CRS98_MTM_8','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2951','NAD_1983_CRS98_MTM_9','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2944','NAD_1983_CSRS98_MTM_2_SCoPQ','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2953','NAD_1983_CSRS98_New_Brunswick_Stereographic','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2954','NAD_1983_CSRS98_Prince_Edward_Island','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2955','NAD_1983_CSRS98_UTM_Zone_11N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2956','NAD_1983_CSRS98_UTM_Zone_12N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2957','NAD_1983_CSRS98_UTM_Zone_13N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102234','NAD_1983_CSRS98_UTM_Zone_14N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102235','NAD_1983_CSRS98_UTM_Zone_15N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102236','NAD_1983_CSRS98_UTM_Zone_16N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2958','NAD_1983_CSRS98_UTM_Zone_17N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2959','NAD_1983_CSRS98_UTM_Zone_18N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2960','NAD_1983_CSRS98_UTM_Zone_19N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2961','NAD_1983_CSRS98_UTM_Zone_20N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2962','NAD_1983_CSRS98_UTM_Zone_21N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','ESRI','102166','Observ_Meteorologico_1939_UTM_Zone_25N','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3727','Piton_des_Neiges_TM_Reunion','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3350','Pulkovo_1942_CS63_Zone_K0','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','3351','Pulkovo_1942_CS63_Zone_K1','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5362','SIRGAS-Chile_UTM_Zone_18S','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','5361','SIRGAS-Chile_UTM_Zone_19S','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2977','Tahaa_UTM_5S','ESRI_OLD'); INSERT INTO alias_name VALUES('projected_crs','EPSG','2976','Tahiti_UTM_6S','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1027','EGM2008_Geoid','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1028','Fao_1979','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1039','New_Zealand_Vertical_Datum_2009','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1040','Dunedin_Bluff_1960','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1049','Korean_Vertical_Datum_1964','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1051','Genoa','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1054','Sri_Lanka_Vertical_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1059','Faroe_Islands_Vertical_Reference_2009','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1079','Fehmarnbelt_Vertical_Reference_2010','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1080','Lowest_Astronomic_Tide','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1082','Highest_Astronomic_Tide','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1083','Lower_Low_Water_Large_Tide','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1084','Higher_High_Water_Large_Tide','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1085','Indian_Spring_Low_Water','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1086','Mean_Lower_Low_Water_Spring_Tides','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1087','Mean_Low_Water_Spring_Tides','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1088','Mean_High_Water_Spring_Tides','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1089','Mean_Lower_Low_Water','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1090','Mean_Higher_High_Water','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1091','Mean_Low_Water','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1092','Mean_High_Water','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1093','Low_Water','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1094','High_Water','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1096','Norway_Normal_Null_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1097','Grand_Cayman_Vertical_Datum_1954','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1098','Little_Cayman_Vertical_Datum_1961','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1099','Cayman_Brac_Vertical_Datum_1961','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1101','Cais_da_Pontinha-Funchal','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1102','Cais_da_Vila-Porto_Santo','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1103','Cais_das_Velas','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1105','Cais_da_Madalena','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1106','Santa_Cruz_da_Graciosa','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1107','Cais_da_Figueirinha-Angra_do_Heroismo','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1108','Santa_Cruz_das_Flores','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1109','Cais_da_Vila_do_Porto','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1110','Ponta_Delgada','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1119','Northern_Marianas_Vertical_Datum_of_2003','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1121','Tutuila_Vertical_Datum_of_1962','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1122','Guam_Vertical_Datum_of_1963','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1123','Puerto_Rico_Vertical_Datum_of_2002','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1124','Virgin_Islands_Vertical_Datum_of_2009','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1125','American_Samoa_Vertical_Datum_of_2002','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1126','Guam_Vertical_Datum_of_2004','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1127','Canadian_Geodetic_Vertical_Datum_of_2013','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1129','Japanese_Standard_Levelling_Datum_1972','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1130','Japanese_Geodetic_Datum_2000_vertical','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1131','Japanese_Geodetic_Datum_2011_vertical','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1140','Singapore_Height_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1146','Ras_Ghumays','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1148','Famagusta_1960','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1149','Papua_New_Guinea_2008','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1150','Kumul_34','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1161','Deutsches_Haupthoehennetz_1912','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1162','Latvian_Height_System_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1164','Ordnance_Datum_Newlyn_(Offshore)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1169','New_Zealand_Vertical_Datum_2016','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1170','Deutsches_Haupthoehennetz_2016','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1171','Port_Moresby_1996','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1172','Port_Moresby_2008','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1175','Jamestown_1971','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1176','St_Helena_Tritan_Vertical_Datum_2011','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1177','St_Helena_Vertical_Datum_2015','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1190','Landshaedarkerfi_Islands_2004','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1199','Greenland_Vertical_Reference_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1200','Greenland_Vertical_Reference_2016','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1202','Baltic_1957','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1205','EPSG_example_wellbore_vertical_datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1210','Macao_Height_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1213','Helsinki_1943','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1215','Slovenian_Vertical_System_2010','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1216','Serbian_Vertical_Reference_System_2012','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1219','MOMRA_Vertical_Geodetic_Control','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1224','Taiwan_Vertical_Datum_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1226','Datum_Altimetrico_de_Costa_Rica_1952','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1250','IGN_2008_LD','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1255','Nivellement_General_de_Nouvelle_Caledonie_2008','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1256','Canadian_Geodetic_Vertical_Datum_of_2013_CGG2013a','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1260','Sistema_de_Referencia_Vertical_Nacional_2016','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1261','European_Vertical_Reference_Frame_2000_Austria','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1262','South_Africa_Land_Levelling_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1265','HS2_Vertical_Reference_Frame','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1267','Wiener_Null','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1269','Kingdom_of_Saudi_Arabia_Vertical_Reference_Frame_Jeddah_2014','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1270','Mean_Sea_Level_Netherlands','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1274','European_Vertical_Reference_Frame_2019','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1280','Gran_Canaria','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1282','La_Gomera','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1283','La_Palma','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1284','El_Hierro','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1285','Ceuta_2','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1287','European_Vertical_Reference_Frame_2019_mean_tide','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1288','British_Isles_height_ensemble','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1290','Lowest_Astronomical_Tide_Netherlands','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1292','Australian_Vertical_Working_Surface','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1294','Indonesian_Geoid_2020','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1296','Baltic_1986','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1297','European_Vertical_Reference_Frame_2007_Poland','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1298','Estonian_Height_System_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1299','Lithuanian_Height_System_2007','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1300','Bulgarian_Height_System_2005','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1301','Norwegian_Chart_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1302','Local_Tidal_Datum_at_Pago_Pago_2020','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1303','National_Vertical_Datum_1992','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1306','Catania_1965','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1307','Cagliari_1956','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1323','Svalbard_vertical_datum_2006','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1325','Canadian_Geodetic_Vertical_Datum_of_2013_(CGG2013a)_epoch_2002','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1326','Canadian_Geodetic_Vertical_Datum_of_2013_(CGG2013a)_epoch_1997','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1328','Indonesian_Geoid_2020_version_2','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1330','Mean_Sea_Level_UK_Ireland_VORF08','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1331','Chart_Datum_UK_Ireland_VORF08','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1354','Nivellement_General_de_l_Algerie_2022','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1361','Chart_Datum_Portugal','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1368','Dansk_Vertikal_Reference_1990_(2002)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1369','Dansk_Vertikal_Reference_1990_(2013)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1370','Dansk_Vertikal_Reference_1990_(2023)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1371','Dansk_Vertikal_Reference_1990_ensemble','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1372','Denmark_Mean_Sea_Level_(2022)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1373','Denmark_Lowest_Astronomical_Tide_(2022)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1374','Denmark_Mean_Sea_Level_(2023)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1375','Denmark_Lowest_Astronomical_Tide_(2023)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1376','Denmark_Mean_Sea_Level','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1377','Denmark_Lowest_Astronomical_Tide','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1378','Greenland_Local_Mean_Sea_Level_(2022)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1387','Greenland_Mean_Sea_Level_(2023)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1388','Greenland_Lowest_Astronomic_Tide_(2023)','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5100','Mean_Sea_Level','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5101','Ordnance_Datum_Newlyn','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5102','National_Geodetic_Vertical_Datum_1929','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5103','North_American_Vertical_Datum_1988','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5104','Yellow_Sea_1956','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5105','Baltic_Sea','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5106','Caspian_Sea','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5109','Normaal_Amsterdams_Peil','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5110','Oostende','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5111','Australian_Height_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5112','Australian_Height_Datum_Tasmania','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5113','Sea_Level','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5114','Canadian_Geodetic_Vertical_Datum_of_1928','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5115','Piraeus_Harbour_1986','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5116','Helsinki_1960','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5117','Rikets_Hojdsystem_1970','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5118','Nivellement_General_de_la_France_Lallemand','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5119','Nivellement_General_de_la_France_IGN69','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5120','Nivellement_General_de_la_France_IGN78','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5122','Japanese_Standard_Levelling_Datum_1969','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5123','PDO_Height_Datum_1993','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5124','Fahud_Height_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5125','Ha_Tien_1960','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5126','Hon_Dau_1992','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5127','Landesnivellement_1902','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5128','Landeshohennetz_1995','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5129','European_Vertical_Reference_Frame_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5130','Malin_Head','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5131','Belfast','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5132','Dansk_Normal_Nul','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5133','AIOC_1995','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5134','Black_Sea','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5135','Hong_Kong_Principal_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5136','Hong_Kong_Chart_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5137','Yellow_Sea_1985','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5138','Ordnance_Datum_Newlyn_Orkney_Isles','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5139','Fair_Isle','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5142','Sule_Skerry','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5143','North_Rona','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5145','St_Kilda','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5146','Flannan_Isles','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5147','St_Marys','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5150','Bandar_Abbas','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5151','Nivellement_General_de_Nouvelle_Caledonie','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5153','Nivellement_General_Guyanais_1977','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5154','IGN_1987','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5155','IGN_1988','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5156','IGN_1989','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5157','Auckland','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5158','Bluff','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5159','Dunedin','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5160','Gisborne','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5161','Lyttelton','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5162','Moturiki','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5163','Napier','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5164','Nelson','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5165','One_Tree_Point','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5166','Tararu','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5167','Taranaki','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5168','Wellington','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5169','Chatham_Island','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5170','Stewart_Island','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5171','EGM96_Geoid','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5172','Nivellement_General_du_Luxembourg','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5174','Norway_Normal_Null_1954','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5176','Gebrauchshohen_Adria','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5177','Slovenian_Vertical_System_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5181','Deutsches_Haupthoehennetz_1992','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5182','Deutsches_Haupthoehennetz_1985','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5183','SNN76','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5184','Baltic_1982','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5185','Baltic_1980','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5186','Kuwait_PWD','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5187','KOC_Well_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5188','KOC_Construction_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5189','Nivellement_General_de_la_Corse_1948','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5190','Danger_1950','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5191','Mayotte_1950','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5192','Martinique_1955','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5193','Guadeloupe_1951','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5194','Lagos_1955','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5195','Nivellement_General_de_Polynesie_Francaise','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5196','IGN_1966','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5197','Moorea_SAU_1981','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5198','Raiatea_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5199','Maupiti_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5200','Huahine_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5201','Tahaa_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5202','Bora_Bora_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5203','EGM84_Geoid','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5204','International_Great_Lakes_Datum_1955','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5205','International_Great_Lakes_Datum_1985','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5206','Dansk_Vertikal_Reference_1990','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5207','Croatian_Vertical_Reference_System_1971','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5208','Rikets_Hojdsystem_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5209','Rikets_Hojdsystem_1900','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5210','IGN_1988_LS','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5211','IGN_1988_MG','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5212','IGN_1992_LD','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5213','IGN_1988_SB','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5214','IGN_1988_SM','ESRI'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5215','European_Vertical_Reference_Frame_2007','ESRI'); -- vertical coordinate system for ellipsoidal height. Not really ISO 19111 valid... INSERT INTO "coordinate_system" VALUES('ESRI','ELLPS_HEIGHT_METRE','vertical',1); INSERT INTO "axis" VALUES('ESRI','ELLPS_HEIGHT_METRE','Ellipsoidal height','h','up','ESRI','ELLPS_HEIGHT_METRE',1,'EPSG','9001'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','3855','EGM2008_Geoid','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','3886','Fao_1979','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','3900','N2000_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','4440','NZVD2009_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','4458','Dunedin_Bluff_1960_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5193','KVD1964_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5195','Trieste_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5214','Genoa_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5237','SLVD_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5317','FVR09_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5336','Black_Sea_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5597','FCSVR10_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5600','NGPF','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5601','IGN_1966','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5602','Moorea_SAU_1981','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5603','Raiatea_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5604','Maupiti_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5605','Huahine_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5606','Tahaa_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5607','Bora_Bora_SAU_2001','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5608','IGLD_1955','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5609','IGLD_1985','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5610','HVRS_1971','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5611','Caspian_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5612','Baltic_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5613','RH2000','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5614','KOC_WD_depth_ft','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5615','RH1900','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5616','IGN_1988_LS','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5617','IGN_1988_MG','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5618','IGN_1992_LD','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5619','IGN_1988_SB','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5620','IGN_1988_SM','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5621','EVRF_2007','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5701','Newlyn','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5702','NGVD_1929','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5703','NAVD_1988','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5704','Yellow_Sea_1956','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5705','Baltic','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5706','Caspian','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5709','NAP','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5710','Oostende','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5711','AHD','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5712','AHD_Tasmania','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5713','CGVD_1928','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5714','MSL_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5715','MSL_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5716','Piraeus','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5717','N60','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5718','RH70','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5719','NGF_Lallemand','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5720','NGF_IGN69','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5721','NGF_IGN78','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5722','Maputo','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5723','Japanese_Standard_Levelling_Datum_1969','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5724','PDO_Height_Datum_1993','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5725','Fahud_Height_Datum_1993','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5726','Ha_Tien_1960','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5727','Hon_Dau_1992','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5728','LN_1902','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5729','LHN95','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5730','EVRS_2000','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5731','Malin_Head','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5732','Belfast','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5733','Dansk_Normal_Nul','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5734','AIOC95_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5735','Black_Sea','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5736','Yellow_Sea_1956','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5737','Yellow_Sea_1985','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5738','Hong_Kong_Principal_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5739','Hong_Kong_Chart_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5740','Newlyn_Orkney_Isles','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5741','Fair_Isle','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5742','Lerwick','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5743','Foula','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5744','Sule_Skerry','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5745','North_Rona','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5746','Stornoway','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5747','St_Kilda','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5748','Flannan_Isles','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5749','St_Marys','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5750','Douglas','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5751','Fao','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5752','Bandar_Abbas','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5753','NGNC','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5754','Poolbeg','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5755','NGG_1977','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5756','IGN_1987','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5757','IGN_1988','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5758','IGN_1989','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5759','Auckland','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5760','Bluff','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5761','Dunedin','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5762','Gisborne','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5763','Lyttelton','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5764','Moturiki','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5765','Napier','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5766','Nelson','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5767','One_Tree_Point','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5768','Tararu','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5769','Taranaki','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5770','Wellington','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5771','Chatham_Island','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5772','Stewart_Island','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5773','EGM96_Geoid','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5774','NG95_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5775','Antalya','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5776','NN54','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5777','Durres','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5778','GHA','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5779','SVS2000','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5780','Cascais','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5781','Constanta','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5782','Alicante','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5783','DHHN92','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5784','DHHN85','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5785','SNN76','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5786','Baltic_1982','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5787','EOMA_1980','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5788','Kuwait_PWD','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5789','KOC_Well_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5790','KOC_Construction_Datum','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5791','NGC_1948','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5792','Danger_1950','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5793','Mayotte_1950','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5794','Martinique_1955','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5795','Guadeloupe_1951','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5796','Lagos_1955','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5797','AIOC95_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5798','EGM84_Geoid','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5799','DVR90','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5829','Instantaneous_Water_Level_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5831','Instantaneous_Water_Level_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5843','Ras_Ghumays_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5861','LAT_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5862','LLWLT_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5863','ISLW_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5864','MLLWS_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5865','MLWS_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5866','MLLW_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5867','MLW_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5868','MHW_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5869','MHHW_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5870','MHWS_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5871','HHWLT_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5872','HAT_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5873','Low_Water_Depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5874','High_Water_Height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5941','NN2000_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6130','GCVD54_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6131','LCVD61_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6132','CBVD61_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6178','Cais_da_Pontinha-Funchal_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6179','Cais_da_Vila-Porto_Santo_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6180','Cais_das_Velas_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6181','Horta_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6182','Cais_da_Madalena_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6183','Santa_Cruz_da_Graciosa_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6184','Cais_da_Figueirinha-Angra_do_Heroismo_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6185','Santa_Cruz_das_Flores_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6186','Cais_da_Vila_do_Porto_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6187','Ponta_Delgada_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6357','NAVD88_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6358','NAVD88_depth_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6359','NGVD29_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6360','NAVD88_height_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6638','Tutuila_1962_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6639','Guam_1963_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6640','NMVD03_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6641','PRVD02_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6642','VIVD09_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6643','ASVD02_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6644','GUVD04_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6647','CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6693','JSLD72_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6694','JGD2000_vertical_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6695','JGD2011_vertical_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','6916','SHD_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7446','Famagusta_1960_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7447','PNG08_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7651','Kumul_34_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7652','Kiunga_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7699','DHHN12_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7700','Latvia_2000_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7707','ODN_(Offshore)_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7832','POM96_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7837','DHHN2016_(height)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7839','NZVD2016_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7841','POM08_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7888','Jamestown_1971_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7889','St_Helena_Tritan_2011_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7890','SHVD2015_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7962','Poolbeg_height_(m)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7968','NGVD_1929_height_(m)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7976','HKPD_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','7979','KOC_WD_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8050','MSL_height_(ftIntl)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8051','MSL_depth_(ftIntl)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8052','MSL_height_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8053','MSL_depth_(ftUS)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8089','ISH2004_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8228','NAVD88_height_(ftIntl)','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8266','GVR2000_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8267','GVR2016_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8357','Baltic_1957_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8358','Baltic_1957_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8434','Macao_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8675','N43_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8690','SVS2010','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8691','SRB_VRS12_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8841','MVGC_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8881','Vienna_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8904','TWVD_2001_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','8911','DACR52_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9130','IGN_2008_LD_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9245','CGVD2013_CGG2013a_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9255','SRVN16_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9274','EVRF2000_Austria_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9279','SA_LLD_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9287','LAT_NL_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9288','MSL_NL_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9303','HS2-VRF_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9335','KSA-VRF14_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9351','NGNC08_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9389','EVRF_2019','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9390','EVRF_2019_mean-tide','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9392','Mallorca_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9393','Menorca_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9394','Ibiza_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9395','Lanzarote_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9396','Fuerteventura_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9397','Gran_Canaria_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9398','Tenerife_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9399','La_Gomera_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9400','La_Palma_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9401','El_Hierro_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9402','Ceuta_2_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9451','BI_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9458','AVWS_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9471','INAGeoid2020_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9650','Baltic_1986_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9651','EVRF_2007_PL_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9663','EH2000_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9666','LAS07_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9669','BGS2005_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9672','CD_Norway_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9675','Pago_Pago_2020_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9681','NVD_1992_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9721','Catania_1965_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9722','Cagliari_1956_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9923','GNTRANS_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','9927','GNTRANS2016_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10150','MSL_UK_Ireland_VORF08_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10151','CD_UK_Ireland_VORF08_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10190','NGA_2022_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10349','ZH_Portugal_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10352','Formentera_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10353','Alboran_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10354','Melilla_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10482','DVR90(2000)_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10483','DVR90(2002)_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10484','DVR90(2013)_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10485','DVR90(2023)_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10547','DKMSL(2022)_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10548','DKLAT(2022)_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10549','DKMSL(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10550','DKLAT(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10551','DKMSL_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10552','DKLAT_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10565','GLLMSL(2022)_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10649','GLMSL(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','10650','GLLAT(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','20000','SVD2006_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','20034','CGVD2013a(2002)_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','20035','CGVD2013a(1997)_height','ESRI'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','20036','INAGeoid2020_v2_height','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1367','Brenner_Base_Tunnel_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1367_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1367','EPSG','4744','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105602','BBT2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1367',0); INSERT INTO "usage" VALUES('ESRI', '105602_USAGE','vertical_crs','ESRI','105602','EPSG','4744','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','105103','Red_Espanola_de_Nivelacion_de_Alta_Precision',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '105103_USAGE','vertical_datum','ESRI','105103','EPSG','3429','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105603','REDNAP_height',NULL,'EPSG','6499','ESRI','105103',0); INSERT INTO "usage" VALUES('ESRI', '105603_USAGE','vertical_crs','ESRI','105603','EPSG','3429','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','105100','WGS_1984_Geoid',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '105100_USAGE','vertical_datum','ESRI','105100','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105700','WGS_1984_Geoid',NULL,'EPSG','6499','ESRI','105100',0); INSERT INTO "usage" VALUES('ESRI', '105700_USAGE','vertical_crs','ESRI','105700','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105701','DVR90',NULL,'EPSG','6499','EPSG','1371',1); INSERT INTO "usage" VALUES('ESRI', '105701_USAGE','vertical_crs','ESRI','105701','EPSG','3237','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105701','EPSG','5799','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105102','Rikets_Hojdsystem_2000',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '105102_USAGE','vertical_datum','ESRI','105102','EPSG','3313','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105702','RH2000',NULL,'EPSG','6499','ESRI','105102',1); INSERT INTO "usage" VALUES('ESRI', '105702_USAGE','vertical_crs','ESRI','105702','EPSG','3313','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105702','EPSG','5613','ESRI'); INSERT INTO "vertical_crs" VALUES('ESRI','105703','NAVD88_height_(ftUS)',NULL,'EPSG','6497','EPSG','5103',1); INSERT INTO "usage" VALUES('ESRI', '105703_USAGE','vertical_crs','ESRI','105703','EPSG','3664','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105703','EPSG','6360','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105104','Lithuanian_Height_System_2007',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '105104_USAGE','vertical_datum','ESRI','105104','EPSG','3272','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105704','LAS07_height',NULL,'EPSG','6499','ESRI','105104',1); INSERT INTO "usage" VALUES('ESRI', '105704_USAGE','vertical_crs','ESRI','105704','EPSG','3272','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105704','EPSG','9666','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105290','EGM2008_Geoid',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '105290_USAGE','vertical_datum','ESRI','105290','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105790','EGM2008_Geoid',NULL,'EPSG','6499','ESRI','105290',1); INSERT INTO "usage" VALUES('ESRI', '105790_USAGE','vertical_crs','ESRI','105790','EPSG','1262','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105790','EPSG','3855','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105291','Fao_1979',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '105291_USAGE','vertical_datum','ESRI','105291','EPSG','3625','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105791','Fao_1979',NULL,'EPSG','6499','ESRI','105291',1); INSERT INTO "usage" VALUES('ESRI', '105791_USAGE','vertical_crs','ESRI','105791','EPSG','3625','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105791','EPSG','3886','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105292','New_Zealand_Vertical_Datum_2009',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '105292_USAGE','vertical_datum','ESRI','105292','EPSG','1175','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105792','NZVD2009_height',NULL,'EPSG','6499','ESRI','105292',1); INSERT INTO "usage" VALUES('ESRI', '105792_USAGE','vertical_crs','ESRI','105792','EPSG','1175','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105792','EPSG','4440','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105293','N2000',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '105293_USAGE','vertical_datum','ESRI','105293','EPSG','3333','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105793','N2000_height',NULL,'EPSG','6499','ESRI','105293',1); INSERT INTO "usage" VALUES('ESRI', '105793_USAGE','vertical_crs','ESRI','105793','EPSG','3333','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105793','EPSG','3900','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105294','Dunedin_Bluff_1960',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', '105294_USAGE','vertical_datum','ESRI','105294','EPSG','3806','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105794','Dunedin_Bluff_1960_height',NULL,'EPSG','6499','ESRI','105294',1); INSERT INTO "usage" VALUES('ESRI', '105794_USAGE','vertical_crs','ESRI','105794','EPSG','3806','EPSG','1024'); INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','105794','EPSG','4458','ESRI'); INSERT INTO "vertical_datum" VALUES('ESRI','105105','Mean_Sea_Level_Hawaii',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '105105_USAGE','vertical_datum','ESRI','105105','EPSG','1334','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105795','MSL_Hawaii_height_(m)',NULL,'EPSG','6499','ESRI','105105',0); INSERT INTO "usage" VALUES('ESRI', '105795_USAGE','vertical_crs','ESRI','105795','EPSG','1334','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105796','MSL_Hawaii_height_(ftUS)',NULL,'EPSG','6497','ESRI','105105',0); INSERT INTO "usage" VALUES('ESRI', '105796_USAGE','vertical_crs','ESRI','105796','EPSG','1334','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105797','EGM96_Geoid_(ftIntl)',NULL,'EPSG','1030','EPSG','5171',0); INSERT INTO "usage" VALUES('ESRI', '105797_USAGE','vertical_crs','ESRI','105797','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','105798','EGM96_Geoid_(ftUS)',NULL,'EPSG','6497','EPSG','5171',0); INSERT INTO "usage" VALUES('ESRI', '105798_USAGE','vertical_crs','ESRI','105798','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6326','D_WGS_1984',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6326_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6326','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115700','WGS_1984',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6326',0); INSERT INTO "usage" VALUES('ESRI', '115700_USAGE','vertical_crs','ESRI','115700','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6258','D_ETRS_1989',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6258_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6258','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115701','ETRS_1989',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6258',0); INSERT INTO "usage" VALUES('ESRI', '115701_USAGE','vertical_crs','ESRI','115701','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6269','D_North_American_1983',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6269_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6269','EPSG','1350','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115702','NAD_1983',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6269',0); INSERT INTO "usage" VALUES('ESRI', '115702_USAGE','vertical_crs','ESRI','115702','EPSG','1350','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6176','D_Australian_Antarctic_1998',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6176_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6176','EPSG','1278','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115703','Australian_Antarctic_1998',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6176',0); INSERT INTO "usage" VALUES('ESRI', '115703_USAGE','vertical_crs','ESRI','115703','EPSG','1278','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106999','D_Cadastre_1997',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106999_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106999','EPSG','3340','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115704','Cadastre_1997',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106999',0); INSERT INTO "usage" VALUES('ESRI', '115704_USAGE','vertical_crs','ESRI','115704','EPSG','3340','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106980','D_China_2000',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106980_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106980','EPSG','1067','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115705','China_Geodetic_Coordinate_System_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106980',0); INSERT INTO "usage" VALUES('ESRI', '115705_USAGE','vertical_crs','ESRI','115705','EPSG','1067','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6151','D_Swiss_TRF_1995',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6151_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6151','EPSG','1286','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115706','Swiss_TRF_1995',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6151',0); INSERT INTO "usage" VALUES('ESRI', '115706_USAGE','vertical_crs','ESRI','115706','EPSG','1286','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1100','D_Cayman_Islands_Geodetic_Datum_2011',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1100_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1100','EPSG','1063','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115707','CIGD11',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1100',0); INSERT INTO "usage" VALUES('ESRI', '115707_USAGE','vertical_crs','ESRI','115707','EPSG','1063','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106244','D_Costa_Rica_2005',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106244_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106244','EPSG','1074','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115708','CR05',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106244',0); INSERT INTO "usage" VALUES('ESRI', '115708_USAGE','vertical_crs','ESRI','115708','EPSG','1074','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1081','D_Deutsche_Bahn_Reference_System',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1081_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1081','EPSG','3339','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115709','DB_REF',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1081',0); INSERT INTO "usage" VALUES('ESRI', '115709_USAGE','vertical_crs','ESRI','115709','EPSG','3339','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6755','D_Datum_Geodesi_Nasional_1995',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6755_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6755','EPSG','1122','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115710','DGN_1995',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6755',0); INSERT INTO "usage" VALUES('ESRI', '115710_USAGE','vertical_crs','ESRI','115710','EPSG','1122','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1058','D_Bhutan_National_Geodetic_Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1058_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1058','EPSG','1048','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115711','DRUKREF_03',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1058',0); INSERT INTO "usage" VALUES('ESRI', '115711_USAGE','vertical_crs','ESRI','115711','EPSG','1048','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6180','D_Estonia_1997',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6180_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6180','EPSG','1090','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115712','Estonia_1997',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6180',0); INSERT INTO "usage" VALUES('ESRI', '115712_USAGE','vertical_crs','ESRI','115712','EPSG','1090','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115713','EUREF_FIN',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6258',0); INSERT INTO "usage" VALUES('ESRI', '115713_USAGE','vertical_crs','ESRI','115713','EPSG','1095','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1078','D_Fehmarnbelt_Datum_2010',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1078_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1078','EPSG','3889','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115714','FEH2010',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1078',0); INSERT INTO "usage" VALUES('ESRI', '115714_USAGE','vertical_crs','ESRI','115714','EPSG','3889','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6283','D_GDA_1994',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6283_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6283','EPSG','4177','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115715','GDA_1994',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6283',0); INSERT INTO "usage" VALUES('ESRI', '115715_USAGE','vertical_crs','ESRI','115715','EPSG','4177','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106100','D_GDBD2009',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106100_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106100','EPSG','1055','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115716','GDBD2009',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106100',0); INSERT INTO "usage" VALUES('ESRI', '115716_USAGE','vertical_crs','ESRI','115716','EPSG','1055','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6742','D_GDM_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6742_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6742','EPSG','1151','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115717','GDM_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6742',0); INSERT INTO "usage" VALUES('ESRI', '115717_USAGE','vertical_crs','ESRI','115717','EPSG','1151','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6747','D_Greenland_1996',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6747_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6747','EPSG','1107','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115718','Greenland_1996',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6747',0); INSERT INTO "usage" VALUES('ESRI', '115718_USAGE','vertical_crs','ESRI','115718','EPSG','1107','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6148','D_Hartebeesthoek_1994',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6148_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6148','EPSG','4540','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115719','Hartebeesthoek_1994',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6148',0); INSERT INTO "usage" VALUES('ESRI', '115719_USAGE','vertical_crs','ESRI','115719','EPSG','4540','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1114','Israel_Geodetic_Datum_2005',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1114_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1114','EPSG','1126','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115720','IGD05',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1114',0); INSERT INTO "usage" VALUES('ESRI', '115720_USAGE','vertical_crs','ESRI','115720','EPSG','1126','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1142','IG05_Intermediate_Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1142_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1142','EPSG','2603','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115721','IG05_Intermediate_CRS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1142',0); INSERT INTO "usage" VALUES('ESRI', '115721_USAGE','vertical_crs','ESRI','115721','EPSG','2603','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1115','Israeli_Geodetic_Datum_2005(2012)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1115_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1115','EPSG','1126','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115722','IGD05(2012)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1115',0); INSERT INTO "usage" VALUES('ESRI', '115722_USAGE','vertical_crs','ESRI','115722','EPSG','1126','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1144','IG05(2012)_Intermediate_Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1144_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1144','EPSG','2603','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115723','IG05(2012)_Intermediate_CRS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1144',0); INSERT INTO "usage" VALUES('ESRI', '115723_USAGE','vertical_crs','ESRI','115723','EPSG','2603','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6670','D_IGM_1995',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6670_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6670','EPSG','3343','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115724','IGM_1995',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6670',0); INSERT INTO "usage" VALUES('ESRI', '115724_USAGE','vertical_crs','ESRI','115724','EPSG','3343','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106991','D_Iraqi_Geospatial_Reference_System',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106991_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106991','EPSG','1124','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115725','IGRS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106991',0); INSERT INTO "usage" VALUES('ESRI', '115725_USAGE','vertical_crs','ESRI','115725','EPSG','1124','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6173','D_IRENET95',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6173_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6173','EPSG','1305','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115726','IRENET95',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6173',0); INSERT INTO "usage" VALUES('ESRI', '115726_USAGE','vertical_crs','ESRI','115726','EPSG','1305','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6659','D_Islands_Network_1993',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6659_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6659','EPSG','1120','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115727','ISN_1993',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6659',0); INSERT INTO "usage" VALUES('ESRI', '115727_USAGE','vertical_crs','ESRI','115727','EPSG','1120','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106144','D_Islands_Network_2004',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106144_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106144','EPSG','1120','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115728','ISN_2004',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106144',0); INSERT INTO "usage" VALUES('ESRI', '115728_USAGE','vertical_crs','ESRI','115728','EPSG','1120','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6647','D_ITRF_1988',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6647_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6647','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115729','ITRF_1988',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6647',0); INSERT INTO "usage" VALUES('ESRI', '115729_USAGE','vertical_crs','ESRI','115729','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6648','D_ITRF_1989',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6648_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6648','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115730','ITRF_1989',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6648',0); INSERT INTO "usage" VALUES('ESRI', '115730_USAGE','vertical_crs','ESRI','115730','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6649','D_ITRF_1990',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6649_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6649','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115731','ITRF_1990',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6649',0); INSERT INTO "usage" VALUES('ESRI', '115731_USAGE','vertical_crs','ESRI','115731','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6650','D_ITRF_1991',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6650_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6650','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115732','ITRF_1991',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6650',0); INSERT INTO "usage" VALUES('ESRI', '115732_USAGE','vertical_crs','ESRI','115732','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6651','D_ITRF_1992',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6651_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6651','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115733','ITRF_1992',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6651',0); INSERT INTO "usage" VALUES('ESRI', '115733_USAGE','vertical_crs','ESRI','115733','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6652','D_ITRF_1993',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6652_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6652','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115734','ITRF_1993',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6652',0); INSERT INTO "usage" VALUES('ESRI', '115734_USAGE','vertical_crs','ESRI','115734','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6654','D_ITRF_1996',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6654_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6654','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115735','ITRF_1996',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6654',0); INSERT INTO "usage" VALUES('ESRI', '115735_USAGE','vertical_crs','ESRI','115735','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6655','D_ITRF_1997',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6655_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6655','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115736','ITRF_1997',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6655',0); INSERT INTO "usage" VALUES('ESRI', '115736_USAGE','vertical_crs','ESRI','115736','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6656','D_ITRF_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6656_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6656','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115737','ITRF_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6656',0); INSERT INTO "usage" VALUES('ESRI', '115737_USAGE','vertical_crs','ESRI','115737','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6896','D_ITRF_2005',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6896_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6896','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115738','ITRF_2005',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6896',0); INSERT INTO "usage" VALUES('ESRI', '115738_USAGE','vertical_crs','ESRI','115738','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106280','D_Jamaica_2001',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106280_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106280','EPSG','1128','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115739','JAD_2001',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106280',0); INSERT INTO "usage" VALUES('ESRI', '115739_USAGE','vertical_crs','ESRI','115739','EPSG','1128','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106268','D_JGD_2000',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106268_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106268','EPSG','1129','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115740','JGD_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106268',0); INSERT INTO "usage" VALUES('ESRI', '115740_USAGE','vertical_crs','ESRI','115740','EPSG','1129','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106020','D_JGD_2011',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106020_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106020','EPSG','1129','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115741','JGD_2011',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106020',0); INSERT INTO "usage" VALUES('ESRI', '115741_USAGE','vertical_crs','ESRI','115741','EPSG','1129','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6737','D_Korea_Geodetic_Datum_2002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6737_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6737','EPSG','1135','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115742','KGD2002',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6737',0); INSERT INTO "usage" VALUES('ESRI', '115742_USAGE','vertical_crs','ESRI','115742','EPSG','1135','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6678','D_Lao_National_Datum_1997',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6678_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6678','EPSG','1138','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115743','Lao_1997',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6678',0); INSERT INTO "usage" VALUES('ESRI', '115743_USAGE','vertical_crs','ESRI','115743','EPSG','1138','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6754','D_Libyan_Geodetic_Datum_2006',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6754_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6754','EPSG','1143','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115744','LGD2006',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6754',0); INSERT INTO "usage" VALUES('ESRI', '115744_USAGE','vertical_crs','ESRI','115744','EPSG','1143','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6661','D_Latvia_1992',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6661_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6661','EPSG','1139','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115745','LKS_1992',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6661',0); INSERT INTO "usage" VALUES('ESRI', '115745_USAGE','vertical_crs','ESRI','115745','EPSG','1139','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6126','D_Lithuania_1994',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6126_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6126','EPSG','1145','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115746','LKS_1994',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6126',0); INSERT INTO "usage" VALUES('ESRI', '115746_USAGE','vertical_crs','ESRI','115746','EPSG','1145','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106248','D_MACAO_2008',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106248_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106248','EPSG','1147','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115747','MACAO_2008',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106248',0); INSERT INTO "usage" VALUES('ESRI', '115747_USAGE','vertical_crs','ESRI','115747','EPSG','1147','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6686','D_MAGNA',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6686_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6686','EPSG','1070','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115748','MAGNA',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6686',0); INSERT INTO "usage" VALUES('ESRI', '115748_USAGE','vertical_crs','ESRI','115748','EPSG','1070','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1066','D_SGNP_MARCARIO_SOLIS',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1066_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1066','EPSG','1186','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115749','MARCARIO_SOLIS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1066',0); INSERT INTO "usage" VALUES('ESRI', '115749_USAGE','vertical_crs','ESRI','115749','EPSG','1186','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1063','D_Marco_Geodesico_Nacional',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1063_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1063','EPSG','1049','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115750','MARGEN',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1063',0); INSERT INTO "usage" VALUES('ESRI', '115750_USAGE','vertical_crs','ESRI','115750','EPSG','1049','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1120','D_Mexico_ITRF2008',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1120_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1120','EPSG','1160','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115751','Mexico_ITRF2008',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1120',0); INSERT INTO "usage" VALUES('ESRI', '115751_USAGE','vertical_crs','ESRI','115751','EPSG','1160','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106993','D_MOLDREF99',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106993_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106993','EPSG','1162','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115752','MOLDREF99',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106993',0); INSERT INTO "usage" VALUES('ESRI', '115752_USAGE','vertical_crs','ESRI','115752','EPSG','1162','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115753','MONREF_1997',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6656',0); INSERT INTO "usage" VALUES('ESRI', '115753_USAGE','vertical_crs','ESRI','115753','EPSG','1164','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6130','D_Moznet',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6130_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6130','EPSG','1167','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115754','Moznet',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6130',0); INSERT INTO "usage" VALUES('ESRI', '115754_USAGE','vertical_crs','ESRI','115754','EPSG','1167','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106285','D_NAD_1983_2011',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106285_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106285','EPSG','1511','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115755','NAD_1983_2011',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106285',0); INSERT INTO "usage" VALUES('ESRI', '115755_USAGE','vertical_crs','ESRI','115755','EPSG','1511','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106223','D_NAD_1983_CORS96',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106223_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106223','EPSG','1511','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115756','NAD_1983_CORS96',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106223',0); INSERT INTO "usage" VALUES('ESRI', '115756_USAGE','vertical_crs','ESRI','115756','EPSG','1511','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6140','D_North_American_1983_CSRS',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6140_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6140','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115757','North_American_1983_CSRS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6140',0); INSERT INTO "usage" VALUES('ESRI', '115757_USAGE','vertical_crs','ESRI','115757','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6152','D_North_American_1983_HARN',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6152_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6152','EPSG','1337','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115758','North_American_1983_HARN',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6152',0); INSERT INTO "usage" VALUES('ESRI', '115758_USAGE','vertical_crs','ESRI','115758','EPSG','1337','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106286','D_NAD_1983_MA11',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106286_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106286','EPSG','4167','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115759','NAD_1983_MA11',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106286',0); INSERT INTO "usage" VALUES('ESRI', '115759_USAGE','vertical_crs','ESRI','115759','EPSG','4167','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106210','D_NAD_1983_MARP00',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106210_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106210','EPSG','4167','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115760','NAD_1983_MARP00',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106210',0); INSERT INTO "usage" VALUES('ESRI', '115760_USAGE','vertical_crs','ESRI','115760','EPSG','4167','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6759','D_NAD_1983_NSRS2007',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6759_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6759','EPSG','1511','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115761','NAD_1983_NSRS2007',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6759',0); INSERT INTO "usage" VALUES('ESRI', '115761_USAGE','vertical_crs','ESRI','115761','EPSG','1511','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106287','D_NAD_1983_PA11',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106287_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106287','ESRI','4','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115762','NAD_1983_PA11',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106287',0); INSERT INTO "usage" VALUES('ESRI', '115762_USAGE','vertical_crs','ESRI','115762','ESRI','4','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106209','D_NAD_1983_PACP00',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106209_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106209','EPSG','4162','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115763','NAD_1983_PACP00',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106209',0); INSERT INTO "usage" VALUES('ESRI', '115763_USAGE','vertical_crs','ESRI','115763','EPSG','4162','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106256','D_Nepal_Nagarkot',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106256_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106256','EPSG','1171','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115764','Nepal_Nagarkot',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106256',0); INSERT INTO "usage" VALUES('ESRI', '115764_USAGE','vertical_crs','ESRI','115764','EPSG','1171','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106265','D_NZGD_2000',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106265_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106265','EPSG','1175','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115765','NZGD_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106265',0); INSERT INTO "usage" VALUES('ESRI', '115765_USAGE','vertical_crs','ESRI','115765','EPSG','1175','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1067','D_Peru96',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1067_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1067','EPSG','1189','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115766','Peru96',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1067',0); INSERT INTO "usage" VALUES('ESRI', '115766_USAGE','vertical_crs','ESRI','115766','EPSG','1189','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1076','D_Papua_New_Guinea_Geodetic_Datum_1994',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1076_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1076','EPSG','1187','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115767','PNG94',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1076',0); INSERT INTO "usage" VALUES('ESRI', '115767_USAGE','vertical_crs','ESRI','115767','EPSG','1187','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6172','D_POSGAR',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6172_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6172','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115768','POSGAR',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6172',0); INSERT INTO "usage" VALUES('ESRI', '115768_USAGE','vertical_crs','ESRI','115768','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6694','D_POSGAR_1994',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6694_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6694','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115769','POSGAR_1994',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6694',0); INSERT INTO "usage" VALUES('ESRI', '115769_USAGE','vertical_crs','ESRI','115769','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6190','D_POSGAR_1998',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6190_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6190','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115770','POSGAR_1998',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6190',0); INSERT INTO "usage" VALUES('ESRI', '115770_USAGE','vertical_crs','ESRI','115770','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6683','D_Philippine_Reference_System_1992',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6683_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6683','EPSG','1190','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115771','PRS_1992',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6683',0); INSERT INTO "usage" VALUES('ESRI', '115771_USAGE','vertical_crs','ESRI','115771','EPSG','1190','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106236','D_PTRA08',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106236_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106236','EPSG','3670','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115772','PTRA08',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106236',0); INSERT INTO "usage" VALUES('ESRI', '115772_USAGE','vertical_crs','ESRI','115772','EPSG','3670','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6740','D_Parametrop_Zemp_1990',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6740_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6740','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115773','PZ_1990',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6740',0); INSERT INTO "usage" VALUES('ESRI', '115773_USAGE','vertical_crs','ESRI','115773','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1132','D_Rete_Dinamica_Nazionale_2008',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1132_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1132','EPSG','3343','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115774','RDN2008',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1132',0); INSERT INTO "usage" VALUES('ESRI', '115774_USAGE','vertical_crs','ESRI','115774','EPSG','3343','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106996','D_Red_Geodesica_de_Canarias_1995',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106996_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106996','EPSG','3199','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115775','REGCAN95',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106996',0); INSERT INTO "usage" VALUES('ESRI', '115775_USAGE','vertical_crs','ESRI','115775','EPSG','3199','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106267','D_REGVEN',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106267_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106267','EPSG','1251','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115776','REGVEN',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106267',0); INSERT INTO "usage" VALUES('ESRI', '115776_USAGE','vertical_crs','ESRI','115776','EPSG','1251','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1073','Reseau_Geodesique_des_Antilles_Francaises_2009',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1073_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1073','EPSG','2824','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115777','RGAF09',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1073',0); INSERT INTO "usage" VALUES('ESRI', '115777_USAGE','vertical_crs','ESRI','115777','EPSG','2824','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106264','D_RGF_1993',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106264_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106264','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115778','RGF_1993',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106264',0); INSERT INTO "usage" VALUES('ESRI', '115778_USAGE','vertical_crs','ESRI','115778','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6624','D_RGFG_1995',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6624_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6624','EPSG','1097','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115779','RGFG_1995',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6624',0); INSERT INTO "usage" VALUES('ESRI', '115779_USAGE','vertical_crs','ESRI','115779','EPSG','1097','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106998','D_Reseau_Geodesique_de_Mayotte_2004',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106998_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106998','EPSG','1159','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115780','RGM_2004',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106998',0); INSERT INTO "usage" VALUES('ESRI', '115780_USAGE','vertical_crs','ESRI','115780','EPSG','1159','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6645','D_RGNC_1991',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6645_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6645','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115781','RGNC_1991',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6645',0); INSERT INTO "usage" VALUES('ESRI', '115781_USAGE','vertical_crs','ESRI','115781','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6749','D_Reseau_Geodesique_de_Nouvelle_Caledonie_1991-93',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6749_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6749','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115782','RGNC_1991-93',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6749',0); INSERT INTO "usage" VALUES('ESRI', '115782_USAGE','vertical_crs','ESRI','115782','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6687','D_Reseau_Geodesique_de_la_Polynesie_Francaise',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6687_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6687','EPSG','1098','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115783','RGPF',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6687',0); INSERT INTO "usage" VALUES('ESRI', '115783_USAGE','vertical_crs','ESRI','115783','EPSG','1098','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6627','D_RGR_1992',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6627_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6627','EPSG','1196','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115784','RGR_1992',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6627',0); INSERT INTO "usage" VALUES('ESRI', '115784_USAGE','vertical_crs','ESRI','115784','EPSG','1196','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106994','D_Reseau_Geodesique_de_la_RDC_2005',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106994_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106994','EPSG','3613','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115785','RGRDC_2005',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106994',0); INSERT INTO "usage" VALUES('ESRI', '115785_USAGE','vertical_crs','ESRI','115785','EPSG','3613','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106997','D_Reseau_Geodesique_de_St_Pierre_et_Miquelon_2006',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106997_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106997','EPSG','1220','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115786','RGSPM_2006',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106997',0); INSERT INTO "usage" VALUES('ESRI', '115786_USAGE','vertical_crs','ESRI','115786','EPSG','1220','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1047','D_RRAF_1991',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1047_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1047','EPSG','2824','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115787','RRAF_1991',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1047',0); INSERT INTO "usage" VALUES('ESRI', '115787_USAGE','vertical_crs','ESRI','115787','EPSG','2824','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6764','D_Ross_Sea_Region_Geodetic_Datum_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6764_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6764','EPSG','3558','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115788','RSRGD2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6764',0); INSERT INTO "usage" VALUES('ESRI', '115788_USAGE','vertical_crs','ESRI','115788','EPSG','3558','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6674','D_SIRGAS_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6674_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6674','EPSG','3418','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115789','SIRGAS_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6674',0); INSERT INTO "usage" VALUES('ESRI', '115789_USAGE','vertical_crs','ESRI','115789','EPSG','3418','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1064','SIRGAS-Chile_realization_1_epoch_2002',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1064_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1064','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115790','SIRGAS-Chile_2002',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1064',0); INSERT INTO "usage" VALUES('ESRI', '115790_USAGE','vertical_crs','ESRI','115790','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1069','D_SIRGAS_ES2007.8',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1069_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1069','EPSG','1087','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115791','SIRGAS_ES2007.8',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1069',0); INSERT INTO "usage" VALUES('ESRI', '115791_USAGE','vertical_crs','ESRI','115791','EPSG','1087','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1068','D_SIRGAS-ROU98',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1068_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1068','EPSG','1247','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115792','SIRGAS-ROU98',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1068',0); INSERT INTO "usage" VALUES('ESRI', '115792_USAGE','vertical_crs','ESRI','115792','EPSG','1247','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1053','D_Sri_Lanka_Datum_1999',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1053_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1053','EPSG','3310','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115793','SLD99',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1053',0); INSERT INTO "usage" VALUES('ESRI', '115793_USAGE','vertical_crs','ESRI','115793','EPSG','3310','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6765','D_Slovenia_Geodetic_Datum_1996',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6765_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6765','EPSG','1212','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115794','Slovenia_1996',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6765',0); INSERT INTO "usage" VALUES('ESRI', '115794_USAGE','vertical_crs','ESRI','115794','EPSG','1212','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106995','D_Serbian_Reference_Network_1998',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106995_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106995','EPSG','4543','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115795','SREF98',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106995',0); INSERT INTO "usage" VALUES('ESRI', '115795_USAGE','vertical_crs','ESRI','115795','EPSG','4543','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1052','D_S_JTSK_05',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1052_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1052','EPSG','1079','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115796','S_JTSK/05',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1052',0); INSERT INTO "usage" VALUES('ESRI', '115796_USAGE','vertical_crs','ESRI','115796','EPSG','1079','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115797','S_JTSK/05_Ferro',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1052',0); INSERT INTO "usage" VALUES('ESRI', '115797_USAGE','vertical_crs','ESRI','115797','EPSG','1079','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6619','D_SWEREF99',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6619_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6619','EPSG','1225','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115798','SWEREF99',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6619',0); INSERT INTO "usage" VALUES('ESRI', '115798_USAGE','vertical_crs','ESRI','115798','EPSG','1225','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1095','D_Tonga_Geodetic_Datum_2005',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1095_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1095','EPSG','1234','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115799','TGD2005',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1095',0); INSERT INTO "usage" VALUES('ESRI', '115799_USAGE','vertical_crs','ESRI','115799','EPSG','1234','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106282','D_TWD_1997',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106282_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106282','EPSG','1228','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115800','TWD_1997',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106282',0); INSERT INTO "usage" VALUES('ESRI', '115800_USAGE','vertical_crs','ESRI','115800','EPSG','1228','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1077','D_Ukraine_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1077_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1077','EPSG','1242','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115801','Ukraine_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1077',0); INSERT INTO "usage" VALUES('ESRI', '115801_USAGE','vertical_crs','ESRI','115801','EPSG','1242','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6163','D_Yemen_NGN_1996',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6163_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6163','EPSG','1257','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115802','Yemen_NGN_1996',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6163',0); INSERT INTO "usage" VALUES('ESRI', '115802_USAGE','vertical_crs','ESRI','115802','EPSG','1257','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1061','D_ITRF_2008',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1061_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1061','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115803','ITRF_2008',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1061',0); INSERT INTO "usage" VALUES('ESRI', '115803_USAGE','vertical_crs','ESRI','115803','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1057','D_Turkish_National_Reference_Frame',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1057_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1057','EPSG','1237','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115804','TUREF',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1057',0); INSERT INTO "usage" VALUES('ESRI', '115804_USAGE','vertical_crs','ESRI','115804','EPSG','1237','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1168','GDA2020',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1168_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1168','EPSG','4177','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115805','GDA2020',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1168',0); INSERT INTO "usage" VALUES('ESRI', '115805_USAGE','vertical_crs','ESRI','115805','EPSG','4177','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1167','Bulgaria_Geodetic_System_2005',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1167_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1167','EPSG','1056','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115806','BGS2005',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1167',0); INSERT INTO "usage" VALUES('ESRI', '115806_USAGE','vertical_crs','ESRI','115806','EPSG','1056','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','105110','Unknown_height_system_(meters)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '105110_USAGE','vertical_datum','ESRI','105110','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115807','Unknown_height_system_(meters)',NULL,'EPSG','6499','ESRI','105110',0); INSERT INTO "usage" VALUES('ESRI', '115807_USAGE','vertical_crs','ESRI','115807','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','105111','Unknown_height_system_(US_survey_feet)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '105111_USAGE','vertical_datum','ESRI','105111','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115808','Unknown_height_system_(US_survey_feet)',NULL,'EPSG','6497','ESRI','105111',0); INSERT INTO "usage" VALUES('ESRI', '115808_USAGE','vertical_crs','ESRI','115808','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','105112','Unknown_height_system_(Intl_feet)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '105112_USAGE','vertical_datum','ESRI','105112','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115809','Unknown_height_system_(Intl_Feet)',NULL,'EPSG','1030','ESRI','105112',0); INSERT INTO "usage" VALUES('ESRI', '115809_USAGE','vertical_crs','ESRI','115809','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1165','International_Terrestrial_Reference_Frame_2014',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1165_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1165','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115810','ITRF2014',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1165',0); INSERT INTO "usage" VALUES('ESRI', '115810_USAGE','vertical_crs','ESRI','115810','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1174','St_Helena_Geodetic_Datum_2015',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1174_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1174','EPSG','3183','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115811','SHGD2015',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1174',0); INSERT INTO "usage" VALUES('ESRI', '115811_USAGE','vertical_crs','ESRI','115811','EPSG','3183','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1173','St_Helena_Tritan',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1173_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1173','EPSG','3183','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115812','St_Helena_Tritan',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1173',0); INSERT INTO "usage" VALUES('ESRI', '115812_USAGE','vertical_crs','ESRI','115812','EPSG','3183','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1159','Geodezicheskaya_Sistema_Koordinat_2011',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1159_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1159','EPSG','1198','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115813','GSK-2011',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1159',0); INSERT INTO "usage" VALUES('ESRI', '115813_USAGE','vertical_crs','ESRI','115813','EPSG','1198','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1158','Parametry_Zemli_1990.11',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1158_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1158','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115814','PZ-90.11',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1158',0); INSERT INTO "usage" VALUES('ESRI', '115814_USAGE','vertical_crs','ESRI','115814','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1157','Parametry_Zemli_1990.02',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1157_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1157','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115815','PZ-90.02',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1157',0); INSERT INTO "usage" VALUES('ESRI', '115815_USAGE','vertical_crs','ESRI','115815','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1166','World_Geodetic_System_1984_(Transit)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1166_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1166','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115816','WGS_1984_(Transit)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1166',0); INSERT INTO "usage" VALUES('ESRI', '115816_USAGE','vertical_crs','ESRI','115816','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1156','World_Geodetic_System_1984_(G1762)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1156_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1156','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115817','WGS_1984_(G1762)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1156',0); INSERT INTO "usage" VALUES('ESRI', '115817_USAGE','vertical_crs','ESRI','115817','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1155','World_Geodetic_System_1984_(G1674)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1155_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1155','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115818','WGS_1984_(G1674)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1155',0); INSERT INTO "usage" VALUES('ESRI', '115818_USAGE','vertical_crs','ESRI','115818','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1154','World_Geodetic_System_1984_(G1150)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1154_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1154','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115819','WGS_1984_(G1150)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1154',0); INSERT INTO "usage" VALUES('ESRI', '115819_USAGE','vertical_crs','ESRI','115819','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1153','World_Geodetic_System_1984_(G873)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1153_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1153','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115820','WGS_1984_(G873)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1153',0); INSERT INTO "usage" VALUES('ESRI', '115820_USAGE','vertical_crs','ESRI','115820','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1152','World_Geodetic_System_1984_(G730)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1152_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1152','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115821','WGS_1984_(G730)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1152',0); INSERT INTO "usage" VALUES('ESRI', '115821_USAGE','vertical_crs','ESRI','115821','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1179','European_Terrestrial_Reference_Frame_1990',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1179_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1179','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115822','ETRF90',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1179',0); INSERT INTO "usage" VALUES('ESRI', '115822_USAGE','vertical_crs','ESRI','115822','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1180','European_Terrestrial_Reference_Frame_1991',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1180_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1180','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115823','ETRF91',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1180',0); INSERT INTO "usage" VALUES('ESRI', '115823_USAGE','vertical_crs','ESRI','115823','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1181','European_Terrestrial_Reference_Frame_1992',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1181_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1181','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115824','ETRF92',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1181',0); INSERT INTO "usage" VALUES('ESRI', '115824_USAGE','vertical_crs','ESRI','115824','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1182','European_Terrestrial_Reference_Frame_1993',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1182_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1182','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115825','ETRF93',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1182',0); INSERT INTO "usage" VALUES('ESRI', '115825_USAGE','vertical_crs','ESRI','115825','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1183','European_Terrestrial_Reference_Frame_1994',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1183_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1183','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115826','ETRF94',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1183',0); INSERT INTO "usage" VALUES('ESRI', '115826_USAGE','vertical_crs','ESRI','115826','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1184','European_Terrestrial_Reference_Frame_1996',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1184_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1184','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115827','ETRF96',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1184',0); INSERT INTO "usage" VALUES('ESRI', '115827_USAGE','vertical_crs','ESRI','115827','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1185','European_Terrestrial_Reference_Frame_1997',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1185_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1185','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115828','ETRF97',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1185',0); INSERT INTO "usage" VALUES('ESRI', '115828_USAGE','vertical_crs','ESRI','115828','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1186','European_Terrestrial_Reference_Frame_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1186_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1186','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115829','ETRF2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1186',0); INSERT INTO "usage" VALUES('ESRI', '115829_USAGE','vertical_crs','ESRI','115829','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1192','North_American_Datum_of_1983_(CSRS96)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1192_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1192','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115830','NAD83(CSRS96)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1192',0); INSERT INTO "usage" VALUES('ESRI', '115830_USAGE','vertical_crs','ESRI','115830','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1193','North_American_Datum_of_1983_(CSRS)_version_2',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1193_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1193','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115831','NAD83(CSRS)v2',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1193',0); INSERT INTO "usage" VALUES('ESRI', '115831_USAGE','vertical_crs','ESRI','115831','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1194','North_American_Datum_of_1983_(CSRS)_version_3',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1194_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1194','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115832','NAD83(CSRS)v3',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1194',0); INSERT INTO "usage" VALUES('ESRI', '115832_USAGE','vertical_crs','ESRI','115832','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1195','North_American_Datum_of_1983_(CSRS)_version_4',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1195_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1195','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115833','NAD83(CSRS)v4',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1195',0); INSERT INTO "usage" VALUES('ESRI', '115833_USAGE','vertical_crs','ESRI','115833','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1196','North_American_Datum_of_1983_(CSRS)_version_5',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1196_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1196','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115834','NAD83(CSRS)v5',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1196',0); INSERT INTO "usage" VALUES('ESRI', '115834_USAGE','vertical_crs','ESRI','115834','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1197','North_American_Datum_of_1983_(CSRS)_version_6',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1197_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1197','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115835','NAD83(CSRS)v6',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1197',0); INSERT INTO "usage" VALUES('ESRI', '115835_USAGE','vertical_crs','ESRI','115835','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1198','North_American_Datum_of_1983_(CSRS)_version_7',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1198_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1198','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115836','NAD83(CSRS)v7',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1198',0); INSERT INTO "usage" VALUES('ESRI', '115836_USAGE','vertical_crs','ESRI','115836','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1191','IGS14',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1191_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1191','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115837','IGS14',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1191',0); INSERT INTO "usage" VALUES('ESRI', '115837_USAGE','vertical_crs','ESRI','115837','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1187','Islands_Net_2016',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1187_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1187','EPSG','1120','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115838','ISN2016',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1187',0); INSERT INTO "usage" VALUES('ESRI', '115838_USAGE','vertical_crs','ESRI','115838','EPSG','1120','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1209','Hong_Kong_Geodetic',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1209_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1209','EPSG','1118','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115839','Hong_Kong_Geodetic_CS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1209',0); INSERT INTO "usage" VALUES('ESRI', '115839_USAGE','vertical_crs','ESRI','115839','EPSG','1118','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1211','NAD_1983_(Federal_Base_Network)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1211_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1211','EPSG','4515','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115840','NAD_1983_(FBN)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1211',0); INSERT INTO "usage" VALUES('ESRI', '115840_USAGE','vertical_crs','ESRI','115840','EPSG','4515','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1212','NAD_1983_(High_Accuracy_Reference_Network-Corrected)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1212_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1212','EPSG','3634','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115841','NAD_1983_(HARN_Corrected)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1212',0); INSERT INTO "usage" VALUES('ESRI', '115841_USAGE','vertical_crs','ESRI','115841','EPSG','3634','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1214','Serbian_Spatial_Reference_System_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1214_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1214','EPSG','4543','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115842','SRB_ETRS89',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1214',0); INSERT INTO "usage" VALUES('ESRI', '115842_USAGE','vertical_crs','ESRI','115842','EPSG','4543','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1218','MOMRA_Terrestrial_Reference_Frame_2000',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1218_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1218','EPSG','1206','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115843','MTRF-2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1218',0); INSERT INTO "usage" VALUES('ESRI', '115843_USAGE','vertical_crs','ESRI','115843','EPSG','1206','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106012','California_SRS_Epoch_2017.50_(NAD83)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106012_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106012','ESRI','1','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115844','California_SRS_Epoch_2017.50_(NAD83)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106012',0); INSERT INTO "usage" VALUES('ESRI', '115844_USAGE','vertical_crs','ESRI','115844','ESRI','1','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106010','Georgia_Geodetic_Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106010_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106010','EPSG','3251','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115845','GGD',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106010',0); INSERT INTO "usage" VALUES('ESRI', '115845_USAGE','vertical_crs','ESRI','115845','EPSG','3251','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1147','Oman_National_Geodetic_Datum_2014',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1147_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1147','EPSG','1183','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115846','ONGD14',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1147',0); INSERT INTO "usage" VALUES('ESRI', '115846_USAGE','vertical_crs','ESRI','115846','EPSG','1183','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106027','Oman_National_Geodetic_Datum_2017',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106027_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106027','EPSG','1183','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115847','ONGD17',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106027',0); INSERT INTO "usage" VALUES('ESRI', '115847_USAGE','vertical_crs','ESRI','115847','EPSG','1183','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1201','S-JTSK_[JTSK03]',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1201_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1201','EPSG','1211','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115848','S-JTSK_[JTSK03]',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1201',0); INSERT INTO "usage" VALUES('ESRI', '115848_USAGE','vertical_crs','ESRI','115848','EPSG','1211','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1225','CR-SIRGAS',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1225_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1225','EPSG','1074','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115849','CR-SIRGAS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1225',0); INSERT INTO "usage" VALUES('ESRI', '115849_USAGE','vertical_crs','ESRI','115849','EPSG','1074','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1223','Reseau_Geodesique_de_Wallis_et_Futuna_1996',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1223_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1223','EPSG','1255','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115850','RGWF96',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1223',0); INSERT INTO "usage" VALUES('ESRI', '115850_USAGE','vertical_crs','ESRI','115850','EPSG','1255','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1227','SIRGAS_Continuously_Operating_Network_DGF00P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1227_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1227','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115851','SIRGAS-CON_DGF00P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1227',0); INSERT INTO "usage" VALUES('ESRI', '115851_USAGE','vertical_crs','ESRI','115851','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1228','SIRGAS_Continuously_Operating_Network_DGF01P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1228_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1228','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115852','SIRGAS-CON_DGF01P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1228',0); INSERT INTO "usage" VALUES('ESRI', '115852_USAGE','vertical_crs','ESRI','115852','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1229','SIRGAS_Continuously_Operating_Network_DGF01P02',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1229_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1229','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115853','SIRGAS-CON_DGF01P02',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1229',0); INSERT INTO "usage" VALUES('ESRI', '115853_USAGE','vertical_crs','ESRI','115853','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1230','SIRGAS_Continuously_Operating_Network_DGF02P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1230_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1230','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115854','SIRGAS-CON_DGF02P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1230',0); INSERT INTO "usage" VALUES('ESRI', '115854_USAGE','vertical_crs','ESRI','115854','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1231','SIRGAS_Continuously_Operating_Network_DGF04P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1231_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1231','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115855','SIRGAS-CON_DGF04P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1231',0); INSERT INTO "usage" VALUES('ESRI', '115855_USAGE','vertical_crs','ESRI','115855','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1232','SIRGAS_Continuously_Operating_Network_DGF05P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1232_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1232','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115856','SIRGAS-CON_DGF05P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1232',0); INSERT INTO "usage" VALUES('ESRI', '115856_USAGE','vertical_crs','ESRI','115856','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1233','SIRGAS_Continuously_Operating_Network_DGF06P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1233_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1233','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115857','SIRGAS-CON_DGF06P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1233',0); INSERT INTO "usage" VALUES('ESRI', '115857_USAGE','vertical_crs','ESRI','115857','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1234','SIRGAS_Continuously_Operating_Network_DGF07P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1234_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1234','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115858','SIRGAS-CON_DGF07P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1234',0); INSERT INTO "usage" VALUES('ESRI', '115858_USAGE','vertical_crs','ESRI','115858','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1235','SIRGAS_Continuously_Operating_Network_DGF08P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1235_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1235','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115859','SIRGAS-CON_DGF08P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1235',0); INSERT INTO "usage" VALUES('ESRI', '115859_USAGE','vertical_crs','ESRI','115859','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1236','SIRGAS_Continuously_Operating_Network_SIR09P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1236_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1236','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115860','SIRGAS-CON_SIR09P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1236',0); INSERT INTO "usage" VALUES('ESRI', '115860_USAGE','vertical_crs','ESRI','115860','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1237','SIRGAS_Continuously_Operating_Network_SIR10P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1237_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1237','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115861','SIRGAS-CON_SIR10P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1237',0); INSERT INTO "usage" VALUES('ESRI', '115861_USAGE','vertical_crs','ESRI','115861','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1238','SIRGAS_Continuously_Operating_Network_SIR11P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1238_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1238','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115862','SIRGAS-CON_SIR11P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1238',0); INSERT INTO "usage" VALUES('ESRI', '115862_USAGE','vertical_crs','ESRI','115862','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1239','SIRGAS_Continuously_Operating_Network_SIR13P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1239_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1239','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115863','SIRGAS-CON_SIR13P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1239',0); INSERT INTO "usage" VALUES('ESRI', '115863_USAGE','vertical_crs','ESRI','115863','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1240','SIRGAS_Continuously_Operating_Network_SIR14P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1240_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1240','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115864','SIRGAS-CON_SIR14P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1240',0); INSERT INTO "usage" VALUES('ESRI', '115864_USAGE','vertical_crs','ESRI','115864','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1241','SIRGAS_Continuously_Operating_Network_SIR15P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1241_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1241','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115865','SIRGAS-CON_SIR15P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1241',0); INSERT INTO "usage" VALUES('ESRI', '115865_USAGE','vertical_crs','ESRI','115865','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1242','SIRGAS_Continuously_Operating_Network_SIR17P01',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1242_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1242','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115866','SIRGAS-CON_SIR17P01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1242',0); INSERT INTO "usage" VALUES('ESRI', '115866_USAGE','vertical_crs','ESRI','115866','EPSG','4530','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1244','IGS97',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1244_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1244','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115867','IGS97',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1244',0); INSERT INTO "usage" VALUES('ESRI', '115867_USAGE','vertical_crs','ESRI','115867','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1245','IGS00',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1245_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1245','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115868','IGS00',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1245',0); INSERT INTO "usage" VALUES('ESRI', '115868_USAGE','vertical_crs','ESRI','115868','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1246','IGb00',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1246_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1246','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115869','IGb00',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1246',0); INSERT INTO "usage" VALUES('ESRI', '115869_USAGE','vertical_crs','ESRI','115869','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1247','IGS05',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1247_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1247','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115870','IGS05',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1247',0); INSERT INTO "usage" VALUES('ESRI', '115870_USAGE','vertical_crs','ESRI','115870','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1248','IGb08',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1248_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1248','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115871','IGb08',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1248',0); INSERT INTO "usage" VALUES('ESRI', '115871_USAGE','vertical_crs','ESRI','115871','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1251','Kosovo_Reference_System_2001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1251_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1251','EPSG','4542','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115872','KOSOVAREF01',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1251',0); INSERT INTO "usage" VALUES('ESRI', '115872_USAGE','vertical_crs','ESRI','115872','EPSG','4542','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1204','European_Terrestrial_Reference_Frame_2005',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1204_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1204','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115873','ETRF2005',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1204',0); INSERT INTO "usage" VALUES('ESRI', '115873_USAGE','vertical_crs','ESRI','115873','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1206','European_Terrestrial_Reference_Frame_2014',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1206_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1206','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115874','ETRF2014',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1206',0); INSERT INTO "usage" VALUES('ESRI', '115874_USAGE','vertical_crs','ESRI','115874','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6150','D_CH1903+',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6150_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6150','EPSG','1286','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115875','CH1903+',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6150',0); INSERT INTO "usage" VALUES('ESRI', '115875_USAGE','vertical_crs','ESRI','115875','EPSG','1286','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1291','Australian_Terrestrial_Reference_Frame_2014',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1291_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1291','EPSG','4177','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115876','ATRF2014',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1291',0); INSERT INTO "usage" VALUES('ESRI', '115876_USAGE','vertical_crs','ESRI','115876','EPSG','4177','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6203','D_Australian_1984',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6203_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6203','EPSG','2576','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115877','Australian_1984',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6203',0); INSERT INTO "usage" VALUES('ESRI', '115877_USAGE','vertical_crs','ESRI','115877','EPSG','2576','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6202','D_Australian_1966',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6202_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6202','EPSG','1279','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115878','Australian_1966',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6202',0); INSERT INTO "usage" VALUES('ESRI', '115878_USAGE','vertical_crs','ESRI','115878','EPSG','1279','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6653','D_ITRF_1994',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6653_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6653','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115879','ITRF_1994',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6653',0); INSERT INTO "usage" VALUES('ESRI', '115879_USAGE','vertical_crs','ESRI','115879','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1062','D_POSGAR_2007',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1062_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1062','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115880','POSGAR_2007',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1062',0); INSERT INTO "usage" VALUES('ESRI', '115880_USAGE','vertical_crs','ESRI','115880','EPSG','1033','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1312','Reseau_Geodesique_Francais_1993_v2',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1312_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1312','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115881','RGF93_v2',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1312',0); INSERT INTO "usage" VALUES('ESRI', '115881_USAGE','vertical_crs','ESRI','115881','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1313','Reseau_Geodesique_Francais_1993_v2b',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1313_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1313','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115882','RGF93_v2b',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1313',0); INSERT INTO "usage" VALUES('ESRI', '115882_USAGE','vertical_crs','ESRI','115882','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1322','International_Terrestrial_Reference_Frame_2020',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1322_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1322','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115883','ITRF2020',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1322',0); INSERT INTO "usage" VALUES('ESRI', '115883_USAGE','vertical_crs','ESRI','115883','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1327','SIRGAS-Chile_realization_5_epoch_2021',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1327_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1327','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115884','SIRGAS_Chile_2021_height',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1327',0); INSERT INTO "usage" VALUES('ESRI', '115884_USAGE','vertical_crs','ESRI','115884','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1309','WGS_1984_(G2139)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1309_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1309','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115885','WGS_1984_(G2139)_height',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1309',0); INSERT INTO "usage" VALUES('ESRI', '115885_USAGE','vertical_crs','ESRI','115885','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6181','D_Luxembourg_Reference_Frame',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6181_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6181','EPSG','1146','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115886','LUREF',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6181',0); INSERT INTO "usage" VALUES('ESRI', '115886_USAGE','vertical_crs','ESRI','115886','EPSG','1146','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106271','D_Bermuda_2000',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106271_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106271','EPSG','1047','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115887','Bermuda_2000',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106271',0); INSERT INTO "usage" VALUES('ESRI', '115887_USAGE','vertical_crs','ESRI','115887','EPSG','1047','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106225','D_Cyprus_Geodetic_Reference_System_1993',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106225_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106225','EPSG','3236','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115888','CGRS_1993',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106225',0); INSERT INTO "usage" VALUES('ESRI', '115888_USAGE','vertical_crs','ESRI','115888','EPSG','3236','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106258','D_ETRF_1989',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106258_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106258','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115889','ETRF_1989',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106258',0); INSERT INTO "usage" VALUES('ESRI', '115889_USAGE','vertical_crs','ESRI','115889','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1305','ETRF2000_Poland',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1305_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1305','EPSG','1192','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115890','ETRF2000-PL',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1305',0); INSERT INTO "usage" VALUES('ESRI', '115890_USAGE','vertical_crs','ESRI','115890','EPSG','1192','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6761','D_Croatian_Terrestrial_Reference_System',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6761_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6761','EPSG','1076','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115891','HTRS96',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6761',0); INSERT INTO "usage" VALUES('ESRI', '115891_USAGE','vertical_crs','ESRI','115891','EPSG','1076','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1272','IGb14',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1272_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1272','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115892','IGb14',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1272',0); INSERT INTO "usage" VALUES('ESRI', '115892_USAGE','vertical_crs','ESRI','115892','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1141','IGS08',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1141_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1141','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115893','IGS08',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1141',0); INSERT INTO "usage" VALUES('ESRI', '115893_USAGE','vertical_crs','ESRI','115893','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1268','Kingdom_of_Saudi_Arabia_Geodetic_Reference_Frame_2017',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1268_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1268','EPSG','1206','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115894','KSA-GRF17',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1268',0); INSERT INTO "usage" VALUES('ESRI', '115894_USAGE','vertical_crs','ESRI','115894','EPSG','1206','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106009','D_Kyrgyz_Republic_2006',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106009_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106009','EPSG','1137','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115895','Kyrg-06',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106009',0); INSERT INTO "usage" VALUES('ESRI', '115895_USAGE','vertical_crs','ESRI','115895','EPSG','1137','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6677','D_Lao_1993',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6677_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6677','EPSG','1138','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115896','Lao_1993',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6677',0); INSERT INTO "usage" VALUES('ESRI', '115896_USAGE','vertical_crs','ESRI','115896','EPSG','1138','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1295','Lyon_Turin_Ferroviaire_2004',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1295_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1295','EPSG','4613','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115897','LTF2004(G)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1295',0); INSERT INTO "usage" VALUES('ESRI', '115897_USAGE','vertical_crs','ESRI','115897','EPSG','4613','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6702','D_Mauritania_1999',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6702_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6702','EPSG','1157','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115898','Mauritania_1999',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6702',0); INSERT INTO "usage" VALUES('ESRI', '115898_USAGE','vertical_crs','ESRI','115898','EPSG','1157','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1304','Red_Geodesica_Para_Mineria_en_Chile',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1304_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1304','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115899','REDGEOMIN',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1304',0); INSERT INTO "usage" VALUES('ESRI', '115899_USAGE','vertical_crs','ESRI','115899','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1113','D_Reseau_Geodesique_des_Terres_Australes_et_Antarctiques_Francaises_2007',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1113_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1113','EPSG','4246','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115900','RGTAAF07',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1113',0); INSERT INTO "usage" VALUES('ESRI', '115900_USAGE','vertical_crs','ESRI','115900','EPSG','4246','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115901','RGTAAF07_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1113',0); INSERT INTO "usage" VALUES('ESRI', '115901_USAGE','vertical_crs','ESRI','115901','EPSG','4246','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1220','Reference_System_de_Angola_2013',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1220_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1220','EPSG','1029','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115902','RSAO13',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1220',0); INSERT INTO "usage" VALUES('ESRI', '115902_USAGE','vertical_crs','ESRI','115902','EPSG','1029','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1243','SIRGAS-Chile_realization_2_epoch_2010',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1243_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1243','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115903','SIRGAS-Chile_2010',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1243',0); INSERT INTO "usage" VALUES('ESRI', '115903_USAGE','vertical_crs','ESRI','115903','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1252','SIRGAS-Chile_realization_3_epoch_2013',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1252_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1252','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115904','SIRGAS-Chile_2013',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1252',0); INSERT INTO "usage" VALUES('ESRI', '115904_USAGE','vertical_crs','ESRI','115904','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1253','SIRGAS-Chile_realization_4_epoch_2016',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1253_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1253','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115905','SIRGAS-Chile_2016',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1253',0); INSERT INTO "usage" VALUES('ESRI', '115905_USAGE','vertical_crs','ESRI','115905','EPSG','1066','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1293','Sistem_Referensi_Geospasial_Indonesia_2013',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1293_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1293','EPSG','1122','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115906','SRGI2013',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1293',0); INSERT INTO "usage" VALUES('ESRI', '115906_USAGE','vertical_crs','ESRI','115906','EPSG','1122','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106001','D_WGS_1966',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106001_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106001','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115907','WGS_1966',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106001',0); INSERT INTO "usage" VALUES('ESRI', '115907_USAGE','vertical_crs','ESRI','115907','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6322','D_WGS_1972',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6322_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6322','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115908','WGS_1972',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6322',0); INSERT INTO "usage" VALUES('ESRI', '115908_USAGE','vertical_crs','ESRI','115908','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6324','D_WGS_1972_BE',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6324_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6324','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115909','WGS_1972_BE',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6324',0); INSERT INTO "usage" VALUES('ESRI', '115909_USAGE','vertical_crs','ESRI','115909','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_ESRI_106984','D_Mexican_Datum_of_1993',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_ESRI_106984_USAGE','vertical_datum','ESRI','from_geogdatum_ESRI_106984','EPSG','1160','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115910','Mexican_Datum_of_1993',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106984',0); INSERT INTO "usage" VALUES('ESRI', '115910_USAGE','vertical_crs','ESRI','115910','EPSG','1160','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115911','RGSPM06_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106997',0); INSERT INTO "usage" VALUES('ESRI', '115911_USAGE','vertical_crs','ESRI','115911','EPSG','1220','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115912','RGR92_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6627',0); INSERT INTO "usage" VALUES('ESRI', '115912_USAGE','vertical_crs','ESRI','115912','EPSG','1196','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115913','RGM04_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106998',0); INSERT INTO "usage" VALUES('ESRI', '115913_USAGE','vertical_crs','ESRI','115913','EPSG','1159','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115914','RGFG95_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6624',0); INSERT INTO "usage" VALUES('ESRI', '115914_USAGE','vertical_crs','ESRI','115914','EPSG','1097','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115915','RGF93_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_ESRI_106264',0); INSERT INTO "usage" VALUES('ESRI', '115915_USAGE','vertical_crs','ESRI','115915','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115916','RGAF09_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1073',0); INSERT INTO "usage" VALUES('ESRI', '115916_USAGE','vertical_crs','ESRI','115916','EPSG','2824','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115917','RGWF96_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1223',0); INSERT INTO "usage" VALUES('ESRI', '115917_USAGE','vertical_crs','ESRI','115917','EPSG','1255','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115918','RGF93_v2_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1312',0); INSERT INTO "usage" VALUES('ESRI', '115918_USAGE','vertical_crs','ESRI','115918','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115919','RGF93_v2b_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1313',0); INSERT INTO "usage" VALUES('ESRI', '115919_USAGE','vertical_crs','ESRI','115919','EPSG','1096','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6170','D_SIRGAS',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6170_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6170','EPSG','3448','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115920','SIRGAS',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6170',0); INSERT INTO "usage" VALUES('ESRI', '115920_USAGE','vertical_crs','ESRI','115920','EPSG','3448','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_6312','D_MGI',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_6312_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_6312','EPSG','1321','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115921','MGI',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6312',0); INSERT INTO "usage" VALUES('ESRI', '115921_USAGE','vertical_crs','ESRI','115921','EPSG','1321','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1333','IGS20',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1333_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1333','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115922','IGS20',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1333',0); INSERT INTO "usage" VALUES('ESRI', '115922_USAGE','vertical_crs','ESRI','115922','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1353','ETRS89_DREF91_Realization_2016',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1353_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1353','EPSG','1103','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115923','ETRS89_DREF91_2016',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1353',0); INSERT INTO "usage" VALUES('ESRI', '115923_USAGE','vertical_crs','ESRI','115923','EPSG','1103','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1355','Sonatrach_Reference_Frame_2020',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1355_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1355','EPSG','1026','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115924','RGSH2020',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1355',0); INSERT INTO "usage" VALUES('ESRI', '115924_USAGE','vertical_crs','ESRI','115924','EPSG','1026','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1356','Latvian_coordinate_system_2020',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1356_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1356','EPSG','1139','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115925','LKS-2020',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1356',0); INSERT INTO "usage" VALUES('ESRI', '115925_USAGE','vertical_crs','ESRI','115925','EPSG','1139','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115926','RGNC_1991-93_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_6749',0); INSERT INTO "usage" VALUES('ESRI', '115926_USAGE','vertical_crs','ESRI','115926','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1357','Reseau_Geodesique_de_Nouvelle_Caledonie_2015',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1357_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1357','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115927','RGNC15',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1357',0); INSERT INTO "usage" VALUES('ESRI', '115927_USAGE','vertical_crs','ESRI','115927','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115928','RGNC15_(lon-lat)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1357',0); INSERT INTO "usage" VALUES('ESRI', '115928_USAGE','vertical_crs','ESRI','115928','EPSG','1174','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1358','BH_ETRS89',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1358_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1358','EPSG','1050','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115929','BH_ETRS89',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1358',0); INSERT INTO "usage" VALUES('ESRI', '115929_USAGE','vertical_crs','ESRI','115929','EPSG','1050','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1329','Marco_Geocentrico_Nacional_de_Referencia_2018',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1329_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1329','EPSG','1070','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115930','MAGNA-SIRGAS_2018',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1329',0); INSERT INTO "usage" VALUES('ESRI', '115930_USAGE','vertical_crs','ESRI','115930','EPSG','1070','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1365','North_American_Datum_of_1983_(CSRS)_version_8',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1365_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1365','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115931','NAD83(CSRS)v8',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1365',0); INSERT INTO "usage" VALUES('ESRI', '115931_USAGE','vertical_crs','ESRI','115931','EPSG','1061','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1382','European_Terrestrial_Reference_Frame_2020',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1382_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1382','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115932','ETRF2020',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1382',0); INSERT INTO "usage" VALUES('ESRI', '115932_USAGE','vertical_crs','ESRI','115932','EPSG','1298','EPSG','1024'); INSERT INTO "vertical_datum" VALUES('ESRI','from_geogdatum_EPSG_1383','World_Geodetic_System_1984_(G2296)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', 'from_geogdatum_EPSG_1383_USAGE','vertical_datum','ESRI','from_geogdatum_EPSG_1383','EPSG','1262','EPSG','1024'); INSERT INTO "vertical_crs" VALUES('ESRI','115933','WGS_1984_(G2296)',NULL,'ESRI','ELLPS_HEIGHT_METRE','ESRI','from_geogdatum_EPSG_1383',0); INSERT INTO "usage" VALUES('ESRI', '115933_USAGE','vertical_crs','ESRI','115933','EPSG','1262','EPSG','1024'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','1049','Incheon','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5122','Japanese_Standard_Levelling_Datum_1949','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5161','Lyttleton','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_datum','EPSG','5177','National_Vertical_Network_1999','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5193','Incheon_Height','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5723','Japanese_Standard_Levelling_Datum_1949','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','ESRI','115742','Korea_2000','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5763','Lyttleton','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5774','NG_L','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5779','NVN99','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','EPSG','5779','NVN99 height','ESRI_OLD'); INSERT INTO alias_name VALUES('vertical_crs','ESRI','115790','SIRGAS-Chile','ESRI_OLD'); INSERT INTO alias_name VALUES('compound_crs','EPSG','3901','KKJ_Finland_Uniform_Coordinate_System_and_N60_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','3902','ETRS_1989_TM35FIN_and_N60_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','3903','ETRS_1989_TM35FIN_and_N2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','4097','ETRS_1989_DKTM1_and_DVR90_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','4098','ETRS_1989_DKTM2_and_DVR90_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','4099','ETRS_1989_DKTM3_and_DVR90_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','4100','ETRS_1989_DKTM4_and_DVR90_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5318','HVC_ETRS_1989_Faroe_TM_and_FVR09_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5498','HVC_NAD_1983_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5499','HVC_NAD_1983_HARN_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5500','HVC_NAD_1983_NSRS2007_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5554','HVC_ETRS_1989_UTM_Zone_31N_and_DHHN92_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5555','HVC_ETRS_1989_UTM_Zone_32N_and_DHHN92_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5556','HVC_ETRS_1989_UTM_Zone_33N_and_DHHN92_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5598','HVC_FEH2010_Fehmarnbelt_TM_and_FCSVR10_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5628','HVC_SWEREF99_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5698','HVC_RGF_1993_Lambert_93_and_NGF_IGN69_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5699','HVC_RGF_1993_Lambert_93_and_NGF_IGN78_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5707','HVC_NTF_Paris_Lambert_Zone_I_and_NGF_IGN69_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5708','HVC_NTF_Paris_Lambert_Zone_IV_and_NGF_IGN78_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5832','HVC_DB_REF_3_Degree_GK_Zone_2_E-N_and_DHHN92','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5833','HVC_DB_REF_3_Degree_GK_Zone_3_E-N_and_DHHN92','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5834','HVC_DB_REF_3_Degree_GK_Zone_4_E-N_and_DHHN92','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5835','HVC_DB_REF_3_Degree_GK_Zone_5_E-N_and_DHHN92','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5845','HVC_SWEREF99_TM_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5846','HVC_SWEREF99_12_00_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5847','HVC_SWEREF99_13_30_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5848','HVC_SWEREF99_15_00_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5849','HVC_SWEREF99_16_30_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5850','HVC_SWEREF99_18_00_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5851','HVC_SWEREF99_14_15_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5852','HVC_SWEREF99_15_45_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5853','HVC_SWEREF99_17_15_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5854','HVC_SWEREF99_18_45_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5855','HVC_SWEREF99_20_15_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5856','HVC_SWEREF99_21_45_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5857','HVC_SWEREF99_23_15_and_RH2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5942','HVC_ETRS_1989_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5945','HVC_ETRS_1989_NTM_Zone_5_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5946','HVC_ETRS_1989_NTM_Zone_6_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5947','HVC_ETRS_1989_NTM_Zone_7_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5948','HVC_ETRS_1989_NTM_Zone_8_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5949','HVC_ETRS_1989_NTM_Zone_9_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5950','HVC_ETRS_1989_NTM_Zone_10_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5951','HVC_ETRS_1989_NTM_Zone_11_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5952','HVC_ETRS_1989_NTM_Zone_12_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5953','HVC_ETRS_1989_NTM_Zone_13_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5954','HVC_ETRS_1989_NTM_Zone_14_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5955','HVC_ETRS_1989_NTM_Zone_15_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5956','HVC_ETRS_1989_NTM_Zone_16_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5957','HVC_ETRS_1989_NTM_Zone_17_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5958','HVC_ETRS_1989_NTM_Zone_18_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5959','HVC_ETRS_1989_NTM_Zone_19_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5960','HVC_ETRS_1989_NTM_Zone_20_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5961','HVC_ETRS_1989_NTM_Zone_21_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5962','HVC_ETRS_1989_NTM_Zone_22_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5963','HVC_ETRS_1989_NTM_Zone_23_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5964','HVC_ETRS_1989_NTM_Zone_24_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5965','HVC_ETRS_1989_NTM_Zone_25_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5966','HVC_ETRS_1989_NTM_Zone_26_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5967','HVC_ETRS_1989_NTM_Zone_27_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5968','HVC_ETRS_1989_NTM_Zone_28_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5969','HVC_ETRS_1989_NTM_Zone_29_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5970','HVC_ETRS_1989_NTM_Zone_30_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5971','HVC_ETRS_1989_UTM_Zone_31_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5972','HVC_ETRS_1989_UTM_Zone_32_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5973','HVC_ETRS_1989_UTM_Zone_33_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5974','HVC_ETRS_1989_UTM_Zone_34_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5975','HVC_ETRS_1989_UTM_Zone_35_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','5976','HVC_ETRS_1989_UTM_Zone_36_and_NN2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6144','HVC_ETRS_1989_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6145','HVC_ETRS_1989_NTM_Zone_5_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6146','HVC_ETRS_1989_NTM_Zone_6_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6147','HVC_ETRS_1989_NTM_Zone_7_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6148','HVC_ETRS_1989_NTM_Zone_8_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6149','HVC_ETRS_1989_NTM_Zone_9_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6150','HVC_ETRS_1989_NTM_Zone_10_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6151','HVC_ETRS_1989_NTM_Zone_11_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6152','HVC_ETRS_1989_NTM_Zone_12_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6153','HVC_ETRS_1989_NTM_Zone_13_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6154','HVC_ETRS_1989_NTM_Zone_14_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6155','HVC_ETRS_1989_NTM_Zone_15_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6156','HVC_ETRS_1989_NTM_Zone_16_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6157','HVC_ETRS_1989_NTM_Zone_17_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6158','HVC_ETRS_1989_NTM_Zone_18_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6159','HVC_ETRS_1989_NTM_Zone_19_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6160','HVC_ETRS_1989_NTM_Zone_20_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6161','HVC_ETRS_1989_NTM_Zone_21_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6162','HVC_ETRS_1989_NTM_Zone_22_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6163','HVC_ETRS_1989_NTM_Zone_23_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6164','HVC_ETRS_1989_NTM_Zone_24_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6165','HVC_ETRS_1989_NTM_Zone_25_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6166','HVC_ETRS_1989_NTM_Zone_26_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6167','HVC_ETRS_1989_NTM_Zone_27_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6168','HVC_ETRS_1989_NTM_Zone_28_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6169','HVC_ETRS_1989_NTM_Zone_29_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6170','HVC_ETRS_1989_NTM_Zone_30_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6171','HVC_ETRS_1989_NTM_Zone_31_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6172','HVC_ETRS_1989_NTM_Zone_32_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6173','HVC_ETRS_1989_NTM_Zone_33_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6174','HVC_ETRS_1989_NTM_Zone_34_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6175','HVC_ETRS_1989_NTM_Zone_35_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6176','HVC_ETRS_1989_NTM_Zone_36_and_NN54_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6190','HVC_Belge_1972_Belgian_Lambert_72_and_Ostend_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6349','HVC_NAD_1983_2011_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6649','HVC_NAD_1983_CSRS_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6650','HVC_NAD_1983_CSRS_UTM_Zone_7N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6651','HVC_NAD_1983_CSRS_UTM_Zone_8N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6652','HVC_NAD_1983_CSRS_UTM_Zone_9N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6653','HVC_NAD_1983_CSRS_UTM_Zone_10N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6654','HVC_NAD_1983_CSRS_UTM_Zone_11N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6655','HVC_NAD_1983_CSRS_UTM_Zone_12N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6656','HVC_NAD_1983_CSRS_UTM_Zone_13N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6657','HVC_NAD_1983_CSRS_UTM_Zone_14N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6658','HVC_NAD_1983_CSRS_UTM_Zone_15N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6659','HVC_NAD_1983_CSRS_UTM_Zone_16N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6660','HVC_NAD_1983_CSRS_UTM_Zone_17N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6661','HVC_NAD_1983_CSRS_UTM_Zone_18N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6662','HVC_NAD_1983_CSRS_UTM_Zone_19N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6663','HVC_NAD_1983_CSRS_UTM_Zone_20N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6664','HVC_NAD_1983_CSRS_UTM_Zone_21N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6665','HVC_NAD_1983_CSRS_UTM_Zone_22N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6696','HVC_JGD2000_and_JGD2000_vertical_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6697','HVC_JGD2011_and_JGD2011_vertical_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6700','HVC_Tokyo_and_JSLD72_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6893','HVC_WGS_1984_World_Mercator_and_EGM2008_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6917','HVC_SVY21_and_SHD_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','6927','HVC_SVY21_Singapore_TM_and_SHD_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7400','HVC_NTF_Paris_and_NGF_IGN69_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7404','HVC_RT90_and_RH70_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7405','HVC_OSGB36_British_National_Grid_and_ODN_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7406','HVC_NAD27_and_NGVD29_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7407','HVC_NAD27_Texas_North_and_NGVD29_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7409','HVC_ETRF89_and_EVRF2000_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7410','HVC_PSD93_and_PHD93','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7411','HVC_NTF_Paris_Lambert_Zone_II_and_NGF_Lallemand_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7414','HVC_Tokyo_and_JSLD_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7415','HVC_Amersfoort_RD_New_and_NAP_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7416','HVC_ETRF89_UTM_Zone_32N_and_DVR90_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7417','HVC_ETRF89_UTM_Zone_33N_and_DVR90_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7418','HVC_ETRF89_KP2000_Jutland_and_DVR90_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7419','HVC_ETRF89_KP2000_Zealand_and_DVR90_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7420','HVC_ETRF89_KP2000_Bornholm_and_DVR90_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7421','HVC_NTF_Paris_Lambert_Zone_II_and_NGF_IGN69_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7422','HVC_NTF_Paris_Lambert_Zone_III_and_NGF_IGN69_Height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7423','HVC_ETRS_1989_and_EVRF2007_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7954','Astro_DOS_71_UTM_Zone_30S_and_Jamestown_1971_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7955','St_Helena_Tritan_UTM_Zone_30S_and_Tritan_2011_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','7956','SHMG2015_and_SHVD2015_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8349','GR96_and_GVR2000_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8350','GR96_and_GVR2016_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8360','ETRS_1989_and_Baltic_1957_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8370','ETRS_1989_Belgian_Lambert_2008_and_Ostend_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8700','NAD_1983_Arizona_East_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8701','NAD_1983_Arizona_Central_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8702','NAD_1983_Arizona_West_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8703','NAD_1983_Michigan_North_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8704','NAD_1983_Michigan_Central_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8705','NAD_1983_Michigan_South_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8706','NAD_1983_Montana_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8707','NAD_1983_North_Dakota_North_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8708','NAD_1983_North_Dakota_South_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8709','NAD_1983_Oregon_North_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8710','NAD_1983_Oregon_South_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8711','NAD_1983_South_Carolina_Ft_Intl_and_NAVD88_height_Ft_Intl','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8712','NAD_1983_Arkansas_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8713','NAD_1983_Arkansas_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8714','NAD_1983_California_I_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8715','NAD_1983_California_II_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8716','NAD_1983_California_III_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8717','NAD_1983_California_IV_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8718','NAD_1983_California_V_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8719','NAD_1983_California_VI_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8720','NAD_1983_Colorado_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8721','NAD_1983_Colorado_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8722','NAD_1983_Colorado_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8723','NAD_1983_Connecticut_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8724','NAD_1983_Delaware_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8725','NAD_1983_Florida_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8726','NAD_1983_Florida_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8727','NAD_1983_Florida_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8728','NAD_1983_Georgia_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8729','NAD_1983_Georgia_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8730','NAD_1983_Idaho_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8731','NAD_1983_Idaho_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8732','NAD_1983_Idaho_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8733','NAD_1983_Illinois_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8734','NAD_1983_Illinois_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8735','NAD_1983_Indiana_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8736','NAD_1983_Indiana_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8737','NAD_1983_Iowa_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8738','NAD_1983_Iowa_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8739','NAD_1983_Kansas_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8740','NAD_1983_Kansas_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8741','NAD_1983_Kentucky_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8742','NAD_1983_Kentucky_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8743','NAD_1983_Lousiana_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8744','NAD_1983_Lousiana_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8745','NAD_1983_Maine_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8746','NAD_1983_Maine_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8747','NAD_1983_Maryland_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8748','NAD_1983_Massachusetts_Mainland_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8749','NAD_1983_Massachusetts_Island_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8750','NAD_1983_Minnesota_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8751','NAD_1983_Minnesota_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8752','NAD_1983_Minnesota_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8753','NAD_1983_Mississippi_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8754','NAD_1983_Mississippi_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8755','NAD_1983_Nebraska_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8756','NAD_1983_Nevada_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8757','NAD_1983_Nevada_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8758','NAD_1983_Nevada_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8759','NAD_1983_New_Hampshire_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8760','NAD_1983_New_Jersey_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8761','NAD_1983_New_Mexico_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8762','NAD_1983_New_Mexico_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8763','NAD_1983_New_Mexico_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8764','NAD_1983_New_York_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8765','NAD_1983_New_York_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8766','NAD_1983_New_York_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8767','NAD_1983_New_York_Long_Island_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8768','NAD_1983_North_Carolina_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8769','NAD_1983_Ohio_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8770','NAD_1983_Ohio_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8771','NAD_1983_Oklahoma_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8772','NAD_1983_Oklahoma_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8773','NAD_1983_Pennsylvania_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8774','NAD_1983_Pennsylvania_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8775','NAD_1983_Rhode_Island_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8776','NAD_1983_South_Dakota_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8777','NAD_1983_South_Dakota_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8778','NAD_1983_Tennessee_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8779','NAD_1983_Texas_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8780','NAD_1983_Texas_North_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8781','NAD_1983_Texas_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8782','NAD_1983_Texas_South_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8783','NAD_1983_Texas_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8784','NAD_1983_Utah_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8785','NAD_1983_Utah_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8786','NAD_1983_Utah_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8787','NAD_1983_Vermont_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8788','NAD_1983_Virginia_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8789','NAD_1983_Virginia_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8790','NAD_1983_Washington_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8791','NAD_1983_Washington_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8792','NAD_1983_West_Virginia_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8793','NAD_1983_West_Virginia_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8794','NAD_1983_Wisconsin_North_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8795','NAD_1983_Wisconsin_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8796','NAD_1983_Wisconsin_South_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8797','NAD_1983_Wyoming_East_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8798','NAD_1983_Wyoming_East_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8799','NAD_1983_Wyoming_West_Central_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8800','NAD_1983_Wyoming_West_Ft_US_and_NAVD88_height_Ft_US','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8801','NAD_1983_Alabama_East_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8802','NAD_1983_Alabama_West_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8803','NAD_1983_Alaska_1_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8804','NAD_1983_Alaska_2_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8805','NAD_1983_Alaska_3_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8806','NAD_1983_Alaska_4_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8807','NAD_1983_Alaska_5_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8808','NAD_1983_Alaska_6_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8809','NAD_1983_Alaska_7_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8810','NAD_1983_Alaska_8_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8811','NAD_1983_Alaska_9_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8812','NAD_1983_Alaska_10_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8813','NAD_1983_Missouri_East_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8814','NAD_1983_Missouri_Central_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8815','NAD_1983_Missouri_West_and_NAVD88_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','8912','CR-SIRGAS_CRTM05_and_DACR52_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9286','ETRS_1989_and_NAP_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9289','ETRS_1989_and_LAT_NL_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9290','ETRS_1989_and_MSL_NL_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9306','HS2_Survey_Grid_and_HS2-VRF_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9368','TPEN11_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9374','MML07_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9388','AbInvA96_2020_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9422','ETRS_1989_and_EVRF2019_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9423','ETRS_1989_and_EVRF2019_mean-tide_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9424','ETRS_1989_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9425','ETRS_1989_and_ODN_(Offshore)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9426','ETRS_1989_and_ODN_Orkney_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9427','ETRS_1989_and_Lerwick_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9428','ETRS_1989_and_Stornoway_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9429','ETRS_1989_and_Douglas_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9430','ETRS_1989_and_St_Marys_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9449','ETRS_1989_and_Malin_Head_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9450','ETRS_1989_and_Belfast_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9452','ETRS_1989_and_BI_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9457','GBK19_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9462','GDA2020_and_AVWS_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9463','GDA2020_and_AHD_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9464','GDA94_and_AHD_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9500','ETRS_1989_and_EVRF2000_Austria_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9501','MGI_and_EVRF2000_Austria_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9502','CIGD11_and_CBVD61_height_(ft)','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9503','CIGD11_and_GCVD54_height_(ft)','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9504','CIGD11_and_LCVD61_height_(ft)','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9505','ETRS_1989_and_Alicante_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9506','ETRS_1989_and_Ceuta_2_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9507','ETRS_1989_and_Ibiza_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9508','ETRS_1989_and_Mallorca_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9509','ETRS_1989_and_Menorca_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9510','REGCAN95_and_El_Hierro_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9511','REGCAN95_and_Fuerteventura_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9512','REGCAN95_and_Gran_Canaria_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9513','REGCAN95_and_La_Gomera_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9514','REGCAN95_and_La_Palma_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9515','REGCAN95_and_Lanzarote_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9516','REGCAN95_and_Tenerife_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9517','SHGD2015_and_SHVD2015_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9518','WGS_1984_and_EGM2008_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9519','FEH2010_and_FCSVR10_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9520','KSA-GRF17_and_KSA-VRF14_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9521','POSGAR_2007_and_SRVN16_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9522','NAD_1983_2011_and_PRVD02_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9523','NAD_1983_2011_and_VIVD09_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9524','NAD83(MA11)_and_GUVD04_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9525','NAD83(MA11)_and_NMVD03_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9526','NAD83(PA11)_and_ASVD02_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9527','NZGD2000_and_NZVD2009_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9528','NZGD2000_and_NZVD2016_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9529','SRGI2013_and_INAGeoid2020_v1_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9530','RGFG95_and_NGG1977_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9531','RGAF09_and_Guadeloupe_1988_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9532','RGAF09_and_IGN_1988_LS_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9533','RGAF09_and_IGN_1988_MG_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9534','RGAF09_and_IGN_1988_SB_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9535','RGAF09_and_IGN_1988_SM_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9536','RGAF09_and_IGN_2008_LD_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9537','RGAF09_and_Martinique_1987_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9538','RGF93_v2_and_NGF-IGN69_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9539','RGF93_v2_and_NGF-IGN78_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9540','RGNC_1991-93_and_NGNC08_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9541','RGSPM06_and_Danger_1950_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9542','RRAF_1991_and_IGN_2008_LD_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9543','ITRF2005_and_SA_LLD_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9544','NAD_1983_CSRS_v6_and_CGVD2013a(2010)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9656','ETRF2000-PL_and_Baltic_1986_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9657','ETRF2000-PL_and_EVRF2007-PL_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9705','WGS_1984_and_MSL_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9707','WGS_1984_and_EGM96_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9711','NAD_1983_CSRS_UTM_zone_23N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9714','NAD_1983_CSRS_UTM_zone_24N_and_CGVD2013_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9715','NAD_1983_CSRS_UTM_zone_15N_and_CGVD2013a(2010)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9723','ETRS_1989_and_Genoa_1942_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9724','ETRS_1989_and_Catania_1965_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9725','ETRS_1989_and_Cagliari_1956_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9742','EOS21_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9762','ECML14_NB_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9767','EWR2_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9785','RGF93_v2b_and_NGF-IGN69_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9870','MRH21_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9881','MOLDOR11_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9883','ETRS_1989_and_CD_Norway_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9897','HVC_LUREF_Luxembourg_TM_and_NG95','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9907','ETRS_1989_and_Ostend_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9920','OSGB36_British_National_Grid_and_BI_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9922','ETRS_1989_ITM_and_BI_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9924','ETRS89_and_DHHN2016_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9928','DB_REF2003_zone_2','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9929','DB_REF2003_zone_3','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9930','DB_REF2003_zone_4','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9931','DB_REF2003_zone_5','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9932','DB_REF2016_zone_2','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9933','DB_REF2016_zone_3','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9934','DB_REF2016_zone_4','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9935','DB_REF2016_zone_5','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9944','EBBWV14_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9948','ISN93_and_ISH2004_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9949','ISN2004_and_ISH2004_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9950','ISN2016_and_ISH2004_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9951','ISN93_Lambert_1993_and_ISH2004_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9952','ISN2004_Lambert_2004_and_ISH2004_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9953','ISN2016_Lambert_2016_and_ISH2004_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9968','HULLEE13_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9973','SCM22_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9978','FNL22_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10156','ETRS_1989_and_MSL_UK_Ireland_VORF08_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10157','ETRS_1989_and_CD_UK_Ireland_VORF08_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10162','JGD2011_Japan_Plane_Rectangular_CS_I_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10163','JGD2011_Japan_Plane_Rectangular_CS_II_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10164','JGD2011_Japan_Plane_Rectangular_CS_III_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10165','JGD2011_Japan_Plane_Rectangular_CS_IV_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10166','JGD2011_Japan_Plane_Rectangular_CS_V_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10167','JGD2011_Japan_Plane_Rectangular_CS_VI_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10168','JGD2011_Japan_Plane_Rectangular_CS_VII_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10169','JGD2011_Japan_Plane_Rectangular_CS_VIII_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10170','JGD2011_Japan_Plane_Rectangular_CS_IX_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10171','JGD2011_Japan_Plane_Rectangular_CS_X_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10172','JGD2011_Japan_Plane_Rectangular_CS_XI_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10173','JGD2011_Japan_Plane_Rectangular_CS_XII_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10174','JGD2011_Japan_Plane_Rectangular_CS_XIII_and_JGD2011_(vertical)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10184','DoPw22_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10189','ShAb07_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10195','CNH22_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10200','CWS13_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10208','DIBA15_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10213','GWPBS22_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10218','GWWAB22_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10223','GWWWA22_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10228','MALS09_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10236','OxWo08_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10241','SYC20_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10245','Slovenia_1996_and_SVS2010_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10246','Slovenia_1996_Slovene_National_Grid_and_SVS2010_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10276','SMITB20_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10281','RBEPP12_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10293','ETRS_1989_DREF91_2016_and_DHHN2016_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10318','RGNC15_(lon-lat)_and_NGNC08_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10355','ETRS89_and_Formentera_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10356','ETRS89_and_Alboran_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10357','ETRS89_and_Melilla_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10365','KGD2002_and_KVD1964_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10472','COV23_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10486','ETRS89_and_DVR90(2002)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10487','ETRS89_and_DVR90(2013)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10488','ETRS89_and_DVR90(2023)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10497','RGF93_v2_Lambert-93_and_NGF-IGN69_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10498','RGF93_v2_Lambert-93_and_NGF-IGN78_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10499','RGF93_v2b_Lambert-93_and_NGF-IGN69_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10500','RGF93_v2b_Lambert-93_and_NGF-IGN78_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10507','RGF93_v2b_and_NGF-IGN78_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10545','ETRS89_and_Cascais_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10553','ETRS89_and_DKMSL(2022)_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10554','ETRS89_and_DKLAT(2022)_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10555','ETRS89_and_DKMSL(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10556','ETRS89_and_DKLAT(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10627','ECML14_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10633','RGAF09_UTM_zone_20N_and_Martinique_1987_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10651','GR96_and_GLMSL(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10652','GR96_and_GLLAT(2023)_depth','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10659','ETRF2000_and_EOMA_1980_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','10660','HD72_EOV_and_EOMA_1980_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','20001','ETRS_1989_and_SVD2006_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','20003','MWC18_Grid_and_ODN_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','20037','NAD_1983_CSRS_v4_and_CGVD2013a(2002)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','20038','NAD_1983_CSRS_v3_and_CGVD2013a(1997)_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','20043','SRGI2013_and_INAGeoid2020_v2_height','ESRI'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9463','GDA2020_+_AHD_height','ESRI_OLD'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9462','GDA2020_+_AVWS_height','ESRI_OLD'); INSERT INTO alias_name VALUES('compound_crs','EPSG','9464','GDA94_+_AHD_height','ESRI_OLD'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1024,'MGI_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1055,'Ain_el_Abd_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1056,'Ain_El_Abd_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1057,'Ain_El_Abd_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1058,'Ain_El_Abd_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1059,'KOC_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1060,'NGN_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1061,'KUDAMS_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1062,'KUDAMS_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1063,'Vientiane_1982_To_Lao_1997_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1064,'Lao_1993_To_Lao_1997_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1065,'Lao_1997_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1066,'Amersfoort_To_ETRS_1989_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1067,'Minna_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1068,'Guam_1963_To_HARN_Guam','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1069,'Guam_1963_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1070,'Guam_1963_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1071,'Palestine_1923_To_Israel_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1073,'Israel_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1074,'Palestine_1923_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1075,'ED_1950_To_WGS_1984_38','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1078,'LUREF_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1079,'LUREF_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1080,'Chatham_Island_1971_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1081,'Chatham_Islands_1979_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1082,'Chatham_Islands_1979_To_NZGD_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1083,'Jamaica_1969_To_WGS_1972_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1084,'Jamaica_1969_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1085,'Jamaica_1969_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1087,'ED_1950_To_WGS_1984_37','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1088,'Monte_Mario_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1089,'Monte_Mario_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1090,'Monte_Mario_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1091,'Monte_Mario_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1092,'Monte_Mario_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1093,'Monte_Mario_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1094,'Monte_Mario_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1095,'PSAD_1956_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1096,'La_Canoa_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1097,'Dealul_Piscului_1970_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1098,'IGM_1995_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1099,'IGM_1995_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1100,'Adindan_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1101,'Adindan_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1102,'Adindan_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1103,'Adindan_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1104,'Adindan_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1105,'Adindan_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1106,'Adindan_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1107,'Afgooye_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1108,'AGD_1966_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1109,'AGD_1984_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1110,'Ain_El_Abd_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1111,'Ain_El_Abd_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1112,'Amersfoort_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1113,'Arc_1950_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1114,'Arc_1950_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1115,'Arc_1950_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1116,'Arc_1950_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1117,'Arc_1950_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1118,'Arc_1950_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1119,'Arc_1950_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1120,'Arc_1950_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1121,'Arc_1950_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1122,'Arc_1960_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1123,'Batavia_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1124,'Bermuda_1957_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1125,'Bogota_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1126,'Bukit_Rimpah_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1127,'Campo_Inchauspe_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1128,'Cape_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1129,'Cape_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1130,'Carthage_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1131,'Chua_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1132,'Corrego_Alegre_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1133,'ED_1950_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1134,'ED_1950_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1135,'ED_1950_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1136,'ED_1950_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1137,'ED_1950_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1138,'ED_1950_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1139,'ED_1950_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1140,'ED_1950_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1141,'ED_1950_ED77_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1142,'ED_1950_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1143,'ED_1950_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1144,'ED_1950_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1145,'ED_1950_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1146,'ED_1987_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1147,'ED_1950_To_ED_1987_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1148,'Egypt_1907_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1149,'ETRS_1989_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1150,'GDA_1994_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1151,'NZGD_1949_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1152,'Hu_Tzu_Shan_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1153,'Indian_1954_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1154,'Indian_1975_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1155,'Kalianpur_1937_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1156,'Kalianpur_1975_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1157,'Kandawala_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1158,'Kertau_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1159,'Leigon_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1160,'Liberia_1964_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1161,'Luzon_1911_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1162,'Luzon_1911_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1163,'Mporaloko_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1164,'Mahe_1971_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1165,'Massawa_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1166,'Merchich_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1167,'Minna_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1168,'Minna_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1169,'Monte_Mario_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1170,'NAD_1927_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1171,'NAD_1927_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1172,'NAD_1927_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1173,'NAD_1927_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1174,'NAD_1927_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1175,'NAD_1927_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1176,'NAD_1927_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1177,'NAD_1927_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1178,'NAD_1927_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1179,'NAD_1927_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1180,'NAD_1927_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1181,'NAD_1927_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1182,'NAD_1927_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1183,'NAD_1927_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1184,'NAD_1927_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1185,'NAD_1927_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1186,'NAD_1927_To_WGS_1984_17','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1187,'NAD_1927_To_WGS_1984_18','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1188,'NAD_1983_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1189,'Nahrwan_1967_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1190,'Nahrwan_1967_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1191,'Nahrwan_1967_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1192,'Naparima_1972_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1193,'NTF_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1194,'MGI_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1195,'OSGB_1936_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1196,'OSGB_1936_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1197,'OSGB_1936_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1198,'OSGB_1936_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1199,'OSGB_1936_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1200,'Pointe_Noire_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1201,'PSAD_1956_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1202,'PSAD_1956_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1203,'PSAD_1956_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1204,'PSAD_1956_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1205,'PSAD_1956_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1206,'PSAD_1956_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1207,'PSAD_1956_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1208,'PSAD_1956_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1209,'PSAD_1956_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1210,'POSGAR_1994_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1225,'Sapper_Hill_1943_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1226,'Schwarzeck_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1227,'Tananarive_1925_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1228,'Timbalai_1948_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1229,'TM65_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1230,'Tokyo_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1231,'Tokyo_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1232,'Tokyo_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1233,'Tokyo_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1234,'Yacare_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1235,'Zanderij_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1236,'AGD_1984_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1237,'WGS_1972_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1238,'WGS_1972_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1239,'WGS_1972_BE_To_WGS_1972_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1240,'WGS_1972_BE_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1241,'NAD_1927_To_NAD_1983_NADCON','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1242,'Hungarian_1972_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1243,'NAD_1927_To_NAD_1983_Alaska','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1244,'PZ_1990_To_WGS_1984_GOST','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1245,'ED_1950_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1246,'Herat_North_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1247,'Kalianpur_1962_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1248,'Indonesian_1974_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1249,'NAD_1927_To_WGS_1984_21','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1250,'NAD_1927_To_WGS_1984_22','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1251,'NAD_1983_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1252,'NAD_1983_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1253,'Nord_Sahara_1959_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1254,'Pulkovo_1942_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1255,'Nord_Sahara_1959_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1256,'Fahud_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1257,'Pulkovo_1995_To_PZ_1990_GOST','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1260,'Makassar_Jakarta_To_Makassar','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1262,'Monte_Mario_Rome_To_Monte_Mario','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1264,'Belge_1950_Brussels_To_Belge_1950','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1265,'Tananarive_1925_Paris_To_Tananarive_1925','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1266,'Voirol_1875_Paris_To_Voirol_1875','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1267,'Pulkovo_1942_To_WGS_1984_17','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1271,'Schwarzeck_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1272,'GGRS_1987_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1274,'Pulkovo_1942_To_LKS_1994','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1275,'ED_1950_To_WGS_1984_17','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1276,'NTF_To_ED_1950','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1277,'NTF_To_WGS_1972','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1278,'AGD_1966_To_GDA_1994','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1279,'AGD_1984_To_GDA_1994','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1280,'AGD_1984_To_GDA_1994_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1281,'Pulkovo_1995_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1282,'Samboja_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1283,'LKS_1994_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1284,'Arc_1960_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1285,'Arc_1960_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1286,'Segora_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1287,'Pulkovo_1942_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1288,'Pulkovo_1942_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1289,'Pulkovo_1942_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1290,'Pulkovo_1942_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1291,'Pulkovo_1942_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1292,'Pulkovo_1942_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1293,'Pulkovo_1942_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1294,'Voirol_1875_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1295,'RGNC_1991-93_To_NEA74_Noumea_4_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1296,'Trinidad_1903_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1297,'Tete_To_Moznet_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1298,'Tete_To_Moznet_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1299,'Tete_To_Moznet_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1300,'Tete_To_Moznet_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1301,'Tete_To_Moznet_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1302,'Moznet_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1303,'Pulkovo_1942_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1304,'Indian_1975_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1305,'Tokyo_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1306,'MGI_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1307,'Naparima_1972_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1308,'NAD_1983_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1309,'DHDN_To_ETRS_1989','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1310,'Pulkovo_1942_To_ETRS_1989','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1311,'ED_1950_To_WGS_1984_18','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1313,'NAD_1927_To_NAD_1983_NTv2_Canada','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1314,'OSGB_1936_To_WGS_1984_Petroleum','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1315,'OSGB_1936_To_ED_1950_UKOOA','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1316,'Manoca_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1317,'Camacupa_To_WGS_1972_BE_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1318,'Camacupa_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1319,'Camacupa_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1320,'Camacupa_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1321,'Camacupa_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1322,'Camacupa_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1323,'Camacupa_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1324,'Camacupa_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1325,'Camacupa_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1326,'Camacupa_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1327,'Camacupa_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1328,'Malongo_To_Mhast_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1329,'Mhast_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1330,'Malongo_1987_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1331,'Estonia_1992_To_ETRS_1989','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1332,'Pulkovo_1942_To_Estonia_1992','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1333,'Estonia_1992_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1334,'Pulkovo_1942_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1437,'RT90_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1438,'Fahud_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1439,'PDO_1993_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1440,'ED_1950_To_WGS_1984_19','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1441,'Antigua_1943_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1442,'Dominica_1945_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1443,'Grenada_1953_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1444,'Montserrat_1958_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1445,'St_Kitts_1955_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1446,'St_Lucia_1955_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1447,'Anguilla_1957_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1448,'Hungarian_1972_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1449,'Hungarian_1972_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1454,'Old_Hawaiian_To_NAD_1983','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1455,'St_Lawrence_To_NAD_1983','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1456,'St_Paul_To_NAD_1983','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1457,'St_George_To_NAD_1983','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1458,'AGD_1966_To_GDA_1994_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1459,'AGD_1966_To_GDA_1994_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1460,'AGD_1966_To_GDA_1994_4','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1461,'Puerto_Rico_To_NAD_1983','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1463,'NAD_1927_DEF_1976_To_NAD_1983_NTv2_Ontario','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1464,'AGD_1966_To_GDA_1994_NTv2_Victoria','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1469,'Locodjo_1965_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1470,'Abidjan_1987_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1472,'ATS_1977_To_NAD_1983_CSRS_NTv2_New_Brunswick','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1473,'NAD_1983_CSRS_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1474,'NAD_1983_To_HARN_Alabama','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1475,'NAD_1983_To_HARN_Arizona','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1476,'NAD_1983_To_HARN_CA_N','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1477,'NAD_1983_To_HARN_CA_S','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1478,'NAD_1983_To_HARN_Colorado','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1479,'NAD_1983_To_HARN_Georgia','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1480,'NAD_1983_To_HARN_Florida','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1481,'NAD_1983_To_HARN_East_MT_ID','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1482,'NAD_1983_To_HARN_West_MT_ID','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1483,'NAD_1983_To_HARN_Kentucky','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1484,'NAD_1983_To_HARN_Louisiana','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1485,'NAD_1983_To_HARN_MD_DE','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1486,'NAD_1983_To_HARN_Maine','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1487,'NAD_1983_To_HARN_Michigan','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1488,'NAD_1983_To_HARN_Mississippi','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1489,'NAD_1983_To_HARN_Nebraska','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1490,'NAD_1983_To_HARN_New_England','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1491,'NAD_1983_To_HARN_New_Mexico','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1492,'NAD_1983_To_HARN_New_York','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1493,'NAD_1983_To_HARN_North_Dakota','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1494,'NAD_1983_To_HARN_Oklahoma','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1495,'NAD_1983_To_HARN_PR_VI','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1496,'NAD_1983_To_HARN_South_Dakota','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1497,'NAD_1983_To_HARN_Tennessee','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1498,'NAD_1983_To_HARN_East_Texas','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1499,'NAD_1983_To_HARN_West_Texas','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1500,'NAD_1983_To_HARN_Virginia','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1501,'NAD_1983_To_HARN_WA_OR','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1502,'NAD_1983_To_HARN_Wisconsin','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1503,'NAD_1983_To_HARN_Wyoming','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1504,'Cape_To_Hartebeesthoek94','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1505,'Hartebeesthoek94_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1506,'AGD_1966_To_GDA_1994_NTv2_Tasmania','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1507,'AGD_1966_To_GDA_1994_NTv2_Northern_Territory','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1508,'CH1903_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1509,'CH1903+_To_CHTRF_1995','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1510,'CH1903_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1511,'CHTRF_1995_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1512,'Rassadiran_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1513,'FD_1958_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1514,'ED_1950_ED77_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1515,'NAD_1983_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1516,'La_Canoa_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1517,'Conakry_1905_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1518,'Dabola_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1519,'Bern_1898_Bern_To_CH1903','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1520,'NAD_1983_To_HARN_Hawaii','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1521,'NAD_1983_To_HARN_Indiana','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1522,'NAD_1983_To_HARN_Kansas','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1523,'NAD_1983_To_HARN_Nevada','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1524,'NAD_1983_To_HARN_Ohio','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1525,'NAD_1983_To_HARN_Utah','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1526,'NAD_1983_To_HARN_West_Virginia','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1527,'Campo_Inchauspe_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1528,'Chos_Malal_1914_To_Campo_Inchauspe','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1529,'Hito_XVIII_1963_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1530,'NAD_1927_To_WGS_1984_30','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1531,'Nahrwan_1967_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1532,'Mporaloko_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1533,'Kalianpur_1937_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1534,'Minna_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1536,'Nahrwan_1967_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1537,'Indian_1975_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1538,'Carthage_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1539,'South_Yemen_To_Yemen_NGN_1996','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1540,'Yemen_NGN_1996_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1541,'Indian_1960_To_WGS_1972_BE','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1542,'Indian_1960_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1543,'Indian_1960_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1544,'Hanoi_1972_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1545,'Egypt_1907_To_WGS_1972','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1546,'Egypt_1907_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1547,'Bissau_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1548,'SAD_1969_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1549,'Aratu_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1550,'Aratu_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1551,'Aratu_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1552,'Aratu_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1553,'NAD_1983_To_HARN_Illinois','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1554,'NAD_1983_To_HARN_New_Jersey','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1555,'Naparima_1955_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1556,'Naparima_1955_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1557,'Malongo_1987_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1558,'Korean_1995_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1559,'AGD_1984_To_GDA_1994_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1560,'Nord_Sahara_1959_To_WGS_1972_BE','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1561,'Qatar_1974_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1562,'Qatar_1974_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1563,'Qatar_1974_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1564,'NZGD_1949_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1565,'NZGD_2000_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1566,'New_Zealand_1949_To_NZGD_2000_1_3PAR','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1568,'New_Zealand_1949_To_NZGD_2000_3_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1569,'Accra_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1570,'Accra_To_WGS_1972_BE','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1571,'Amersfoort_To_ETRS_1989','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1572,'NAD_1983_To_NAD_1983_CSRS_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1573,'NAD_1927_To_NAD_1983_6','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1574,'NAD_1927_To_NAD_1983_CSRS_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1575,'NAD_1927_CGQ77_To_NAD_1983_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1576,'NAD_1927_CGQ77_To_NAD_1983_CSRS','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1577,'American_Samoa_1962_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1578,'American_Samoa_1962_To_HARN_American_Samoa_West','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1579,'American_Samoa_1962_To_HARN_American_Samoa_East','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1580,'NAD_1983_HARN_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1581,'SIRGAS_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1582,'PSAD_1956_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1583,'PSAD_1956_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1584,'Deir_ez_Zor_To_WGS_1972_BE','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1586,'Deir_ez_Zor_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1587,'Deir_ez_Zor_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1588,'ED_1950_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1591,'RGF_1993_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1592,'Timbalai_1948_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1593,'AGD_1984_To_GDA_1994_4_NTv2_Western_Australia','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1594,'AGD_1966_To_GDA_1994_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1595,'AGD_1966_To_GDA_1994_9','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1596,'AGD_1966_To_GDA_1994_10_NTv2_New_South_Wales_and_Victoria','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1597,'Bogota_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1598,'POSGAR_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1599,'ATS_1977_To_NAD_1983_CSRS_2_NTv2_Prince_Edward_Is','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1600,'NAD_1927_To_NAD_1983_CSRS_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1601,'NAD_1983_To_NAD_1983_CSRS_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1602,'NAD_1983_To_NAD_1983_CSRS_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1609,'Belge_1972_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1610,'Belge_1972_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1611,'IRENET95_To_ETRS_1989','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1612,'ED_1950_To_WGS_1984_23','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1613,'ED_1950_To_WGS_1984_24','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1614,'Sierra_Leone_1968_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1615,'Timbalai_1948_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1616,'PDO_1993_To_WGS_1972','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1617,'PDO_1993_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1618,'MGI_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1619,'MGI_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1620,'MGI_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1621,'MGI_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1622,'S_JTSK_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1623,'S_JTSK_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1624,'S_JTSK_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1625,'S_JTSK_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1626,'ED_1950_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1627,'ED_1950_To_WGS_1984_25','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1628,'ED_1950_To_ETRS_1989_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1629,'ED_1950_To_WGS_1984_26','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1630,'ED_1950_To_ETRS_1989_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1631,'ED_1950_To_WGS_1984_27','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1632,'ED_1950_To_ETRS_1989_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1633,'ED_1950_To_WGS_1984_28','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1634,'ED_1950_To_ETRS_1989_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1635,'ED_1950_To_WGS_1984_29','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1638,'KKJ_To_ETRS_1989_1_Old','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1639,'KKJ_To_WGS_1984_1_Old','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1640,'TM65_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1641,'TM65_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1642,'LUREF_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1643,'LUREF_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1644,'Pulkovo_1942_Adj_1958_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1645,'Pulkovo_1942_Adj_1958_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1646,'CH1903_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1647,'CH1903+_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1648,'Estonia_1997_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1649,'Estonia_1997_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1650,'ED_1950_To_ETRS_1989_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1651,'NTF_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1652,'Belge_1972_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1653,'NGO_1948_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1654,'NGO_1948_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1655,'Lisbon_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1656,'Lisbon_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1657,'Datum_73_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1658,'Datum_73_To_WGS_1984_1_Prt2000','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1659,'Monte_Mario_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1660,'Monte_Mario_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1661,'Monte_Mario_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1662,'Monte_Mario_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1663,'Monte_Mario_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1664,'Monte_Mario_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1665,'AGD_1966_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1666,'AGD_1966_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1667,'AGD_1966_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1668,'AGD_1966_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1669,'AGD_1984_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1670,'NZGD_1949_To_WGS_1984_3_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1671,'RGF_1993_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1672,'Amersfoort_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1673,'DHDN_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1674,'Pulkovo_1942_Adj_1983_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1675,'Pulkovo_1942_Adj_1983_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1676,'CH1903+_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1678,'IRENET95_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1679,'Pulkovo_1942_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1680,'RT90_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1682,'South_Yemen_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1683,'Tete_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1684,'Tete_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1685,'Tete_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1686,'Tete_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1687,'Tete_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1688,'ATS_1977_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1689,'ATS_1977_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1690,'NAD_1927_DEF_1976_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1691,'NAD_1927_CGQ77_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1692,'NAD_1927_To_WGS_1984_34','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1693,'NAD_1927_To_WGS_1984_33','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1694,'American_Samoa_1962_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1695,'American_Samoa_1962_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1696,'NAD_1983_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1697,'NAD_1983_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1698,'St_George_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1699,'St_Lawrence_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1700,'St_Paul_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1701,'New_Zealand_1949_To_NZGD_2000_2_7PAR','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1702,'NAD_1983_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1703,'NAD_1927_To_WGS_1984_32','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1704,'NAD_1983_To_HARN_Arkansas','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1705,'NAD_1983_To_HARN_Iowa','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1706,'NAD_1983_To_HARN_Minnesota','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1707,'NAD_1983_To_HARN_Missouri','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1708,'NAD_1983_To_WGS_1984_Arkansas_12','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1709,'NAD_1983_To_WGS_1984_Iowa_13','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1710,'NAD_1983_To_WGS_1984_Minnesota_14','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1711,'NAD_1983_To_WGS_1984_Missouri_15','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1712,'NAD_1983_To_WGS_1984_Colorado_16','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1713,'NAD_1983_To_WGS_1984_Georgia_17','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1714,'NAD_1983_To_WGS_1984_Florida_18','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1715,'NAD_1983_To_WGS_1984_eastern_ID_MT_19','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1716,'NAD_1983_To_WGS_1984_western_ID_MT_20','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1717,'NAD_1983_To_WGS_1984_Alabama_21','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1718,'NAD_1983_To_WGS_1984_Kentucky_22','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1719,'NAD_1983_To_WGS_1984_Louisiana_23','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1720,'NAD_1983_To_WGS_1984_DE_MD_24','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1721,'NAD_1983_To_WGS_1984_Maine_25','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1722,'NAD_1983_To_WGS_1984_Michigan_26','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1723,'NAD_1983_To_WGS_1984_Mississippi_27','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1724,'NAD_1983_To_WGS_1984_Nebraska_28','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1725,'NAD_1983_To_WGS_1984_CT_MA_NH_RI_VT_29','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1726,'NAD_1983_To_WGS_1984_New_Mexico_30','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1727,'NAD_1983_To_WGS_1984_New_York_31','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1728,'NAD_1983_To_WGS_1984_Arizona_32','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1729,'NAD_1983_To_WGS_1984_North_Dakota_33','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1730,'NAD_1983_To_WGS_1984_Oklahoma_34','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1731,'NAD_1983_To_WGS_1984_PR_VI_onshore_35','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1732,'NAD_1983_To_WGS_1984_South_Dakota_36','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1733,'NAD_1983_To_WGS_1984_Tennessee_37','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1734,'NAD_1983_To_WGS_1984_east_Texas_38','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1735,'NAD_1983_To_WGS_1984_west_Texas_39','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1736,'NAD_1983_To_WGS_1984_Virginia_40','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1737,'NAD_1983_To_WGS_1984_OR_WA_41','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1738,'NAD_1983_To_WGS_1984_Wisconsin_42','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1739,'NAD_1983_To_WGS_1984_northern_California_43','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1740,'NAD_1983_To_WGS_1984_Wyoming_44','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1741,'NAD_1983_To_WGS_1984_Hawaii_onshore_45','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1742,'NAD_1983_To_WGS_1984_Indiana_46','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1743,'NAD_1983_To_WGS_1984_Kansas_47','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1744,'NAD_1983_To_WGS_1984_Nevada_48','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1745,'NAD_1983_To_WGS_1984_Ohio_49','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1746,'NAD_1983_To_WGS_1984_Utah_50','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1747,'NAD_1983_To_WGS_1984_West_Virginia_51','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1748,'NAD_1983_To_WGS_1984_Illinois_52','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1749,'NAD_1983_To_WGS_1984_New_Jersey_53','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1750,'NAD_1983_To_WGS_1984_southern_California_54','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1751,'Amersfoort_To_ETRS_1989','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1753,'CH1903_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1754,'Minna_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1755,'Bogota_Bogota_To_Bogota','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1756,'Lisbon_Lisbon_To_Lisbon','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1757,'MGI_Ferro_To_MGI','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1758,'Padang_1884_Jakarta_To_Padang_1884','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1759,'Batavia_Jakarta_To_Batavia','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1760,'RT38_Stockholm_To_RT38','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1761,'Greek_Athens_To_Greek','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1762,'NGO_1948_Oslo_To_NGO_1948','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1763,'NTF_Paris_To_NTF','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1764,'NTF_Paris_To_NTF','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1765,'Bern_1898_Bern_To_CH1903','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1766,'CH1903_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1767,'REGVEN_To_SIRGAS_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1768,'REGVEN_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1769,'PSAD_1956_To_REGVEN','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1771,'La_Canoa_To_REGVEN_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1773,'POSGAR_1998_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1774,'POSGAR_1998_To_SIRGAS_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1775,'Pulkovo_1942_Adj_1983_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1776,'DHDN_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1777,'DHDN_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1778,'DHDN_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1779,'DHDN_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1780,'DHDN_To_ETRS_1989_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1781,'DHDN_To_ETRS_1989_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1782,'DHDN_To_ETRS_1989_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1783,'ED_1950_To_ETRS_1989_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1784,'ED_1950_To_WGS_1984_30','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1785,'MGI_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1786,'MGI_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1787,'RT90_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1794,'MGI_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1795,'MGI_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1796,'Manoca_1962_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1797,'Qornoq_1927_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1798,'Qornoq_1927_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1799,'Scoresbysund_1952_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1800,'Ammassalik_1958_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1801,'Pointe_Noire_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1802,'Pointe_Noire_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1803,'AGD_1966_To_GDA_1994_11_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1804,'AGD_1984_To_GDA_1994_5_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1805,'Garoua_To_WGS_1972_BE_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1806,'Kousseri_To_WGS_1972_BE_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1807,'Pulkovo_1942_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1808,'Pulkovo_1942_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1809,'Pulkovo_1942_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1810,'ED_1950_To_WGS_1984_31','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1811,'PSAD_1956_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1812,'Indian_1975_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1813,'Batavia_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1814,'Batavia_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1815,'Nord_Sahara_1959_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1816,'Nord_Sahara_1959_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1817,'Nord_Sahara_1959_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1818,'Minna_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1820,'Minna_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1821,'Minna_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1822,'Minna_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1823,'Minna_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1824,'Minna_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1825,'Hong_Kong_1980_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1826,'JGD_2000_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1828,'Yoff_To_WGS_1972_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1829,'Hungarian_1972_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1830,'Hungarian_1972_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1831,'Hungarian_1972_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1832,'Indonesian_1974_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1833,'Indonesian_1974_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1837,'Makassar_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1838,'Gunung_Segara_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1839,'Beduaram_To_WGS_1972_BE_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1840,'QND_1995_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1841,'ATS_1977_To_NAD_1983_CSRS_NTv2_New_Brunswick','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1842,'NAD_1983_CSRS_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1843,'NAD_1983_To_NAD_1983_CSRS_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1844,'NAD_1927_To_NAD_1983_CSRS_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1845,'NAD_1927_CGQ77_To_NAD_1983_CSRS','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1846,'ATS_1977_To_NAD_1983_CSRS_2_NTv2_Prince_Edward_Is','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1847,'NAD_1927_To_NAD_1983_CSRS_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1848,'NAD_1983_To_NAD_1983_CSRS_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1849,'NAD_1983_To_NAD_1983_CSRS_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1850,'ATS_1977_To_NAD_1983_CSRS_NTv2_Nova_Scotia','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',1851,'ATS_1977_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1852,'Timbalai_1948_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1853,'ED_1950_To_WGS_1984_39','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1854,'FD_1958_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1855,'FD_1958_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1856,'ED_1950_ED77_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1857,'ED_1950_ED77_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1858,'ED_1950_ED77_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1859,'ELD_1979_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1860,'ELD_1979_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1861,'ELD_1979_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1862,'ELD_1979_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1863,'ELD_1979_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1864,'SAD_1969_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1865,'SAD_1969_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1866,'SAD_1969_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1867,'SAD_1969_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1868,'SAD_1969_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1869,'SAD_1969_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1870,'SAD_1969_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1871,'SAD_1969_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1872,'SAD_1969_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1873,'SAD_1969_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1874,'SAD_1969_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1875,'SAD_1969_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1876,'SAD_1969_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1877,'SAD_1969_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1878,'SWEREF99_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1879,'SWEREF99_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1880,'Point58_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1881,'Carthage_Paris_To_Carthage','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1882,'Nord_Sahara_1959_Paris_To_Nord_Sahara_1959','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1883,'Gunung_Segara_Jakarta_To_Gunung_Segara','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1884,'S_JTSK_Ferro_To_S_JTSK','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1885,'Azores_Oriental_1940_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1886,'Azores_Central_1948_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1887,'Azores_Occidental_1939_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1888,'Porto_Santo_1936_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1890,'Australian_Antarctic_1998_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1891,'Greek_To_GGRS_1987','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1892,'Hito_XVIII_1963_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1893,'Puerto_Rico_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1894,'Gandajika_1970_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1895,'RT90_To_SWEREF99_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1896,'RT90_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1897,'Gunung_Segara_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1898,'Gunung_Segara_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1899,'Gunung_Segara_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1900,'NAD_1983_HARN_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1901,'NAD_1983_HARN_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1902,'Manoca_1962_To_WGS_1972_BE_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1903,'Fort_Marigot_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1904,'Sainte_Anne_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1905,'Sainte_Anne_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1906,'CSG_1967_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1907,'RGFG_1995_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1908,'CSG_1967_To_RGFG_1995_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1909,'Fort_Desaix_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1910,'Fort_Desaix_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1911,'Reunion_1947_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1912,'RGR_1992_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1913,'Tahaa_1954_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1914,'IGN72_Nuku_Hiva_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1915,'Kerguelen_Island_1949_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1916,'Combani_1950_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1917,'IGN56_Lifou_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1920,'RGNC_1991_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1921,'Petrels_1972_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1922,'Pointe_Geologie_Perroud_1950_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1923,'Saint_Pierre_et_Miquelon_1950_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1924,'Tahiti_1952_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1925,'MOP78_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1926,'Reunion_1947_To_RGR_1992_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1927,'IGN56_Lifou_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1928,'IGN53_Mare_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1930,'ST84_Ile_des_Pins_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1931,'ST71_Belep_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1932,'NEA74_Noumea_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1944,'Lisbon_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1946,'NAD_1983_CSRS_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1950,'NAD_1983_To_NAD_1983_CSRS_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1951,'Hjorsey_1955_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1952,'ISN_1993_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1953,'TM75_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1954,'TM75_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1955,'OSNI_1952_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1956,'TM75_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1957,'Helle_1954_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1958,'LKS_1992_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1959,'St_Vincent_1945_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1962,'IGN72_Grande_Terre_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1963,'IGN72_Grande_Terre_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1964,'RGR_1992_To_Reunion_1947_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1965,'Selvagem_Grande_1938_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1966,'Porto_Santo_1995_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1967,'Porto_Santo_1995_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1968,'Azores_Oriental_1995_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1969,'Azores_Oriental_1995_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1970,'Azores_Oriental_1995_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1971,'Azores_Oriental_1995_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1972,'Azores_Central_1995_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1973,'Azores_Central_1995_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1974,'Azores_Central_1995_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1975,'Azores_Central_1995_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1976,'Azores_Central_1995_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1977,'Azores_Central_1995_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1978,'Azores_Central_1995_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1979,'Azores_Central_1995_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1980,'Azores_Central_1995_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1981,'Azores_Central_1995_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1982,'Azores_Occidental_1939_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1983,'Datum_73_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1984,'Lisbon_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1985,'European_1950_To_WGS_1984_33','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1986,'Lisbon_1890_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1987,'Datum_73_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1988,'Lisbon_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1989,'ED_1950_To_WGS_1984_34','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1990,'Lisbon_1890_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',1991,'Lisbon_1890_Lisbon_To_Lisbon','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1992,'Datum_73_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1993,'IKBD_1992_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1994,'Reykjavik_1900_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1995,'Dealul_Piscului_1933_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1996,'Dealul_Piscului_1970_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1997,'Lisbon_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',1998,'ED_1950_To_WGS_1984_36','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3817,'HD1909_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3830,'TWD_1997_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3894,'IGRS_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',3895,'MGI_Ferro_To_MGI','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',3896,'MGI_Ferro_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3904,'ED_1950_To_WGS_1984_32','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3905,'ED_1987_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',3913,'MGI_Ferro_To_MGI_1901_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3914,'MGI_1901_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3915,'MGI_1901_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3916,'MGI_1901_To_Slovenia_1996_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3917,'MGI_1901_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3918,'MGI_1901_To_Slovenia_1996_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3919,'MGI_1901_To_Slovenia_1996_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3921,'MGI_1901_To_Slovenia_1996_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3922,'MGI_1901_To_Slovenia_1996_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3923,'MGI_1901_To_Slovenia_1996_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3924,'MGI_1901_To_Slovenia_1996_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3925,'MGI_1901_To_Slovenia_1996_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3926,'MGI_1901_To_Slovenia_1996_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3927,'MGI_1901_To_Slovenia_1996_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3928,'MGI_1901_To_Slovenia_1996_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3962,'MGI_1901_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3963,'MGI_1901_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3964,'MGI_1901_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3965,'MGI_1901_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',3966,'MGI_Ferro_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3971,'PSAD_1956_To_SIRGAS_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3972,'Chua_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3990,'PSAD_1956_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',3998,'Arc_1960_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4064,'RGRDC_2005_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4065,'Katanga_1955_To_RGRDC_2005_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4066,'Katanga_1955_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4067,'Katanga_1955_To_RGRDC_2005_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4068,'Katanga_1955_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4069,'Chua_To_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4076,'SREF98_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4077,'SREF98_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4078,'ED_1987_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4084,'REGCAN95_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4290,'Cadastre_1997_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4461,'NAD_1983_HARN_To_NAD_1983_NSRS2007_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4476,'RGM_2004_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4477,'RGSPM_2006_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4478,'Cadastre_1997_To_RGM_2004_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4560,'RRAF_1991_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4827,'S_JTSK_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4829,'S_JTSK_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4830,'Amersfoort_To_ETRS_1989_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4831,'Amersfoort_To_ETRS_1989_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4832,'Mexican_Datum_1993_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4833,'Amersfoort_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4834,'Chua_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4835,'Tahiti_1979_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4836,'S_JTSK_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4840,'RGFG_1995_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',4905,'PTRA08_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5021,'Porto_Santo_1995_To_PTRA08_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5022,'Porto_Santo_1995_To_PTRA08_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5023,'Porto_Santo_1995_To_PTRA08_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5024,'Azores_Oriental_1995_To_PTRA08_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5025,'Azores_Oriental_1995_To_PTRA08_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5026,'Azores_Oriental_1995_To_PTRA08_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5027,'Azores_Central_1995_To_PTRA08_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5028,'Azores_Central_1995_To_PTRA08_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5029,'Azores_Central_1995_To_PTRA08_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5030,'Azores_Central_1995_To_PTRA08_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5031,'Azores_Central_1995_To_PTRA08_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5032,'Azores_Central_1995_To_PTRA08_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5033,'Azores_Occidental_1939_To_PTRA08_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5034,'Azores_Occidental_1939_To_PTRA08_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5035,'Azores_Occidental_1939_To_PTRA08_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5036,'Datum_73_To_ETRS_1989_2009_3par','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5037,'Datum_73_To_ETRS_1989_2009_7par','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5038,'Lisbon_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5039,'Lisbon_1890_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5040,'ED_1950_To_ETRS_1989_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5043,'Pulkovo_1995_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5044,'Pulkovo_1942_To_WGS_1984_20','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5050,'Aratu_To_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5051,'Aratu_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5052,'Aratu_To_SIRGAS_2000_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5053,'Aratu_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5054,'Aratu_To_SIRGAS_2000_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5055,'Aratu_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5056,'Aratu_To_SIRGAS_2000_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5057,'Aratu_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5058,'Aratu_To_SIRGAS_2000_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5059,'Aratu_To_WGS_1984_17','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5060,'Aratu_To_SIRGAS_2000_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5061,'Aratu_To_WGS_1984_18','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5062,'Aratu_To_SIRGAS_2000_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5063,'Aratu_To_WGS_1984_19','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5064,'Aratu_To_SIRGAS_2000_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5065,'Aratu_To_WGS_1984_20','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5066,'Aratu_To_SIRGAS_2000_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5067,'Aratu_To_WGS_1984_21','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5077,'Karbala_1979_Polservice_To_IGRS_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5078,'Karbala_1979_Polservice_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',5133,'Tokyo_1892_to_Tokyo_1','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',5134,'Tokyo_1892_to_Korean_1985_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5189,'Korean_1985_To_KGD2002_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5191,'Korean_1985_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',5192,'Tokyo_1892_to_WGS_84_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5194,'VN_2000_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5226,'S_JTSK/05_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5227,'S_JTSK/05_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',5230,'S_JTSK_FERRO_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5236,'SLD99_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',5238,'S_JTSK/05_Ferro_To_S_JTSK/05_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5239,'S_JTSK_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',5240,'S_JTSK/05_Ferro_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('other_transformation','EPSG',5241,'S_JTSK_To_S_JTSK/05_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',5242,'S_JTSK_Ferro_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5248,'Timbalai_1948_To_GDBD2009_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5249,'Timbalai_1948_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5260,'S_TUREF_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5261,'TUREF_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5267,'DRUKREF_03_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5327,'ISN_2004_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5338,'OSGB_1936_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5339,'OSGB_1936_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5350,'Campo_Inchauspe_To_POSGAR_2007_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5351,'POSGAR_2007_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5374,'MARGEN_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5375,'SIRGAS-Chile_2002_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5376,'CR05_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5377,'MARCARIO_SOLIS_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5378,'Peru96_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5384,'SIRGAS-ROU98_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5385,'Yacare_To_SIRGAS-ROU98_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5386,'Yacare_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5395,'SIRGAS-ES2007.8_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5470,'Ocotepeque_1935_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5473,'Ocotepeque_1935_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5474,'Ocotepeque_1935_To_NAD_1927_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5483,'LUREF_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5484,'LUREF_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5485,'LUREF_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5486,'LUREF_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5491,'Fort_Desaix_To_RGAF09_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5492,'Sainte_Anne_To_RGAF09_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5493,'Fort_Marigot_To_RGAF09_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5494,'RRAF_1991_To_RGAF09_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5495,'RRAF_1991_To_RGAF09_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5496,'RRAF_1991_To_RGAF09_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5497,'POSGAR_2007_To_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5501,'RGAF09_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5521,'Grand_Comoros_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5525,'Corrego_Alegre_1961_To_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5526,'Corrego_Alegre_To_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5528,'SAD_1969_To_SIRGAS_2000_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5529,'SAD_1969_96_To_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5540,'Corrego_Alegre_1961_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5541,'Corrego_Alegre_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5542,'SAD_1969_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5543,'SAD_1969_96_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5553,'PNG94_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5584,'MOLDREF99_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5585,'MOLDREF99_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5586,'Pulkovo_1942_To_Ukraine_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5590,'Ukraine_2000_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5599,'FEH2010_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5622,'OSGB_1936_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5630,'Nord_Sahara_1959_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5660,'Nord_Sahara_1959_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5661,'ED_1950_To_ETRS_1989_NTv2_Catalonia','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5662,'AGD_1966_To_PNG_1994_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5823,'Ukraine_2000_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5826,'DB_REF_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5827,'AGD_1966_To_GDA_1994_19','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',5838,'Lisbon_Lisbon_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5840,'Ukraine_2000_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5841,'AGD_1966_To_WGS_1984_19','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5878,'Timbalai_1948_To_GDBD2009_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5881,'SAD_1969_96_To_SIRGAS_2000_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5882,'SAD_1969_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',5888,'Combani_1950_To_RGM_2004_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',5891,'MGI_To_ETRS_1989_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6136,'Grand_Cayman_1959_To_CIGD11_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6137,'Little_Cayman_1961_To_CIGD11_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6142,'Grand_Cayman_1959_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6143,'Little_Cayman_1961_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6177,'CIGD11_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6188,'Lisbon_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6189,'Datum_73_To_ETRS_1989_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6191,'Corrego_Alegre_To_SAD_1969_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6192,'Corrego_Alegre_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6193,'Corrego_Alegre_To_SIRGAS_2000_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6194,'Corrego_Alegre_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6195,'SAD_1969_96_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6196,'Minna_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6205,'MGI_1901_To_ETRS_1989_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6206,'MGI_1901_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6208,'Nepal_Nagarkot_To_WGS_1984_1_EPSG','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6209,'NAD_1927_To_NAD_1983_CSRS_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6373,'Mexico_ITRF2008_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6698,'JGD_2000_To_JGD_2011_2_Null','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6701,'GDBD2009_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6710,'RDN2008_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6711,'RDN2008_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6712,'Tokyo_To_JGD_2000_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6713,'JGD_2000_To_JGD_2011_NTv2_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6740,'Tokyo_To_JGD_2011_2_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6872,'Abidjan_1987_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6873,'Tananarive_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',6874,'Tananarive_Paris_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6888,'Ocotepeque_1935_To_NAD_1927_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6890,'Ocotepeque_1935_To_CR05','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6891,'Ocotepeque_1935_To_WGS_1984_3PAR','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6895,'Viti_Levu_1912_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6896,'Accra_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6897,'St_Lucia_1955_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6898,'Lisbon_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6899,'Pulkovo_1942_To_WGS_1984_21','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6900,'Observatario_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6901,'Tete_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6902,'Timbalai_1948_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6903,'Yoff_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6904,'Arc_1950_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6905,'AGD66_To_WGS_1984_20','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6906,'Arc_1950_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6907,'Ayabelle_Lighthouse_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6908,'Fahud_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6909,'Hjorsey_1955_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6910,'Aden_1925_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6911,'Bekaa_Valley_1920_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6912,'Bioko_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6913,'Gambia_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6914,'South_East_Island_1943_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6926,'South_East_Island_1943_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6937,'AGD_1966_To_PNG_1994_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6938,'AGD_1966_To_PNG_1994_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6939,'AGD_1966_To_PNG_1994_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6940,'AGD_1966_To_PNG_1994_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6941,'AGD_1966_To_PNG_1994_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6942,'AGD_1966_To_PNG_1994_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6943,'AGD_1966_To_WGS_1984_21','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6944,'AGD_1966_To_WGS_1984_22','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6945,'AGD_1966_To_WGS_1984_23','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6946,'TM75_To_ETRS_1989_3_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6947,'TM75_To_WGS_1984_4_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',6948,'RD/83_To_ETRS_1989_2_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6949,'PSAD_1956_To_SIRGAS-Chile_2002_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6950,'PSAD_1956_To_SIRGAS-Chile_2002_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6951,'PSAD_1956_To_SIRGAS-Chile_2002_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6960,'VN_2000_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6967,'SAD_1969_To_SIRGAS-Chile_2002_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6968,'SAD_1969_To_SIRGAS-Chile_2002_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6969,'SAD_1969_To_SIRGAS-Chile_2002_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6970,'SAD_1969_To_SIRGAS-Chile_2002_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6971,'PSAD_1956_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6972,'PSAD_1956_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6973,'PSAD_1956_To_WGS_1984_17','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6974,'SAD_1969_To_WGS_1984_17','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6975,'SAD_1969_To_WGS_1984_18','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6976,'SAD_1969_To_WGS_1984_19','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6977,'SAD_1969_To_WGS_1984_20','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6992,'IGD05_To_IGD05(2012)','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6993,'IGD05(2012)_To_IG05(2012)_Intermediate_CRS','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6998,'Nahrwan_1967_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',6999,'Nahrwan_1967_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',7000,'Amersfoort_To_ETRS_1989_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7002,'Nahrwan_1967_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7003,'Nahrwan_1967_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7004,'Nahrwan_1967_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7033,'Nahrwan_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7083,'Perroud_1950_To_RGTAAF07_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7140,'IGD05_To_IG05_Intermediate_CRS','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','7377','ONGD14_To_WGS_1984_1',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','7373','EPSG','4326',0.1,0.819,-0.5762,-1.6446,'EPSG','9001',0.00378,0.03317,-0.00318,'EPSG','9104',0.0693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '7377_USAGE','helmert_transformation','ESRI','7377','EPSG','1183','EPSG','1024'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7442,'Nord_Sahara_1959_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7443,'ONGD14_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7448,'SAD_1969_To_SIRGAS-Chile_2002_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7449,'SAD_1969_To_SIRGAS-Chile_2002_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',7673,'CH1903_To_CHTRF95_1_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',7674,'CH1903_To_ETRS_1989_2_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7675,'MGI_1901_To_ETRS_1989_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7676,'MGI_1901_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7697,'Egypt_1907_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7698,'NAD_1927_To_WGS_1984_89','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',7709,'OSGB36_to_ETRS89_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',7710,'OSGB36_to_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7720,'CGRS93_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7721,'CGRS93_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',7788,'CH1903_To_WGS_1984_3_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',7811,'NTF_(Paris)_to_RGF93_v1_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7833,'Albanian_1987_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7834,'Albanian_1987_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7835,'Pulkovo_1942_Adj_1958_To_WGS_1984_22','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7836,'Pulkovo_1942_Adj_1958_To_Albanian_1987_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7892,'SHGD2015_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7893,'Astro_DOS_71-4_To_SHGD2015_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7894,'Astro_DOS_71-4_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7895,'Astro_DOS_71-4_To_SHGD2015_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7896,'SHGD2015_To_Astro_DOS_71-4_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7897,'St_Helena_Tritan_To_SHGD2015_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',7898,'St_Helena_Tritan_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8048,'GDA_1994_To_GDA2020_1','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','8049','ITRF_2014_To_GDA2020_AT2020',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7912','EPSG','7843',0.03,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,-0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00150379,0.00118346,0.00120716,'EPSG','1043',0.0,'EPSG','1041',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '8049_USAGE','helmert_transformation','ESRI','8049','EPSG','4177','EPSG','1024'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8094,'NTF_Paris_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8174,'Bogota_Bogota_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8175,'Monte_Mario_Rome_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8176,'Tananarive_1925_Paris_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8178,'Batavia_Jakarta_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8186,'NTF_Paris_To_ED_1950','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8188,'NTF_Paris_To_WGS_1972','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8195,'RT90_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8211,'Voirol_1875_Paris_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8263,'MGI_Ferro_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8270,'Saint_Pierre_et_Miquelon_1950_To_WGS_1984_(G1150)','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8364,'S-JTSK_[JTSK03]_To_S-JTSK_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8365,'ETRS_1989_To_S-JTSK_[JTSK03]_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8367,'S-JTSK_[JTSK03]_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8368,'S-JTSK_[JTSK03]_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8369,'Belge_1972_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8435,'Macao_2008_to_Macao_1920_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8436,'Macao_2008_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8438,'Macao_1920_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8439,'Hong_Kong_Geodetic_CS_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8444,'GDA_1994_To_GDA2020_NTv2_4_Christmas','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8445,'GDA_1994_To_GDA2020_NTv2_5_Cocos_Keeling','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8446,'GDA_1994_To_GDA2020_NTv2_3_Conformal','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8447,'GDA_1994_To_GDA2020_NTv2_2_Conformal_and_Distortion','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8450,'GDA2020_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8452,'Batavia_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8517,'Chos_Malal_1914_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8532,'Indian_1960_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8537,'Egypt_1907_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8546,'St_George_Island_To_NAD_1983_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8547,'St_Lawrence_Island_To_NAD_1983_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8548,'St_Paul_Island_To_NAD_1983_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8549,'NAD_1927_To_NAD_1983_8','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8550,'NAD_1983_To_NAD_1983_HARN_48','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8551,'NAD_1983_HARN_TO_NAD_1983_NSRS2007_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8552,'NAD_1983_NSRS2007_TO_NAD_1983_2011_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8555,'NAD_1927_To_NAD_1983_7','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8556,'NAD_1983_To_NAD_1983_HARN_47','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8559,'NAD_1983_NSRS2007_To_2011_NADCON5_3D_CONUS_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8561,'Old_Hawaiian_To_NAD_1983_2','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8562,'Nord_Sahara_1959_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8636,'Carthage_(Paris)_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8638,'Makassar_(Jakarta)_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8639,'Belge_1972_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8641,'Segara_(Jakarta)_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8642,'S-JTSK_(Ferro)_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8644,'Greek_(Athens)_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8648,'Lisbon_1890_(Lisbon)_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8649,'Lisbon_1890_(Lisbon)_to_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('concatenated_operation','EPSG',8650,'Palestine_1923_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8660,'NAD_1983_To_NAD_1983_HARN_49','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8661,'NAD_1983_HARN_To_PA11_NADCON5_3D_Hawaii_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8662,'American_Samoa_1962_To_NAD_1983_HARN_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8665,'Guam_1963_To_NAD_1983_HARN_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8668,'Puerto_Rico_To_NAD_1983_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8669,'NAD_1983_To_NAD_1983_HARN_50','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8673,'NAD_1983_NSRS2007_To_2011_NADCON5_3D_PRVI_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8674,'La_Canoa_To_PSAD56_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8680,'MGI_1901_To_ETRS_1989_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8688,'MGI_1901_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8689,'MGI_1901_To_Slovenia_1996_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8695,'Camacupa_To_Camacupa_2015_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8696,'Camacupa_To_Camacupa_2015_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8819,'RSAO13_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8822,'MTRF-2000_To_WGS_1984_(G1150)','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8823,'MGI_1901_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8824,'Ain_el_Abd_1970_To_MTRF-2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8827,'Camacupa_2015_To_RSAO13_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8828,'RGPF_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8829,'Tahiti_1979_To_RGPF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8830,'Tahiti_1979_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8831,'Moorea_1987_To_RGPF_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8832,'Moorea_1987_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8833,'Tahaa_1954_To_RGPF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8834,'Tahaa_1954_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8835,'Fatu_Iva_1972_To_RGPF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8842,'Fatu_Iva_1972_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8843,'IGN63_Hiva_Oa_To_RGPF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8844,'IGN63_Hiva_Oa_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8845,'IGN63_Hiva_Oa_To_RGPF_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8846,'IGN63_Hiva_Oa_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8847,'IGN72_Nuku_Hiva_To_RGPF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8848,'IGN72_Nuku_Hiva_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8849,'IGN72_Nuku_Hiva_To_RGPF_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8850,'IGN72_Nuku_Hiva_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8851,'IGN72_Nuku_Hiva_To_RGPF_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8852,'IGN72_Nuku_Hiva_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8853,'Maupiti_1983_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8861,'NAD_1983_HARN_To_FBN_NADCON5_3D_CONUS_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8862,'NAD_1983_FBN_To_NSRS2007_NADCON5_3D_CONUS_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8863,'NAD_1983_HARN_To_FBN_NADCON5_3D_American_Samoa_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8864,'NAD_1983_FBN_To_PA11_NADCON5_3D_American_Samoa_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8865,'NAD_1983_HARN_To_FBN_NADCON5_3D_Guam_CNMI_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8866,'NAD_1983_FBN_To_MA11_NADCON5_3D_Guam_CNMI_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8867,'NAD_1983_HARN_Corrected_To_FBN_NADCON5_3D_PRVI_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',8868,'NAD_1983_FBN_To_NSRS2007_NADCON5_3D_PRVI_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8882,'Camacupa_2015_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8883,'Camacupa_To_RSAO13_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8884,'Camacupa_To_RSAO13_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8886,'SVY21_To_WGS_1984_1','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','8887','GDA2020_To_WGS_1984_Transit_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7844','EPSG','8888',3.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '8887_USAGE','helmert_transformation','ESRI','8887','EPSG','4177','EPSG','1024'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8889,'BGS2005_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8890,'BGS2005_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8891,'LKS_1992_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8892,'LKS_1994_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8893,'SRB_ETRS89_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8894,'SRB_ETRS89_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8895,'CHTRF95_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8968,'CR05_To_CR-SIRGAS_1_deprecated','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8969,'CR05_To_WGS_1984_2_deprecated','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',8971,'NAD83_to_NAD83(2011)_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9105,'ATS_1977_To_NAD_1983_1_Nova_Scotia','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9106,'ATS_1977_To_NAD_1983_CSRS_v6_4_Nova_Scotia','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9107,'NAD_1927_To_NAD_1983_CSRS_v3_5_Ontario','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9108,'NAD_1927_To_NAD_1983_CSRS_v3_6_Toronto','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9109,'NAD_1927_Def76_To_NAD_1983_CSRS_v3_1_Ontario','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9110,'NAD_1983_To_NAD_1983_CSRS_v3_5_Ontario','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9111,'NAD_1927_To_NAD_1983_9_Saskatchewan','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9112,'NAD_1927_To_NAD_1983_CSRS_v2_7_British_Columbia','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9113,'NAD_1927_To_NAD_1983_CSRS_v3_8_BC_CRD','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9114,'NAD_1927_To_NAD_1983_CSRS_v3_9_BC_NVI','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9115,'NAD_1927_To_NAD_1983_CSRS_v4_10_BC_mainland','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9116,'NAD_1983_To_NAD_1983_CSRS_v2_6_BC','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9117,'NAD_1983_To_NAD_1983_CSRS_v3_7_BC_CRD','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9118,'NAD_1983_To_NAD_1983_CSRS_v3_8_BC_NVI','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9119,'NAD_1983_To_NAD_1983_CSRS_v4_9_BC_mainland','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9120,'NAD_1983_CSRS_v2_To_NAD_1983_CSRS_v3_1_BC_CRD','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9121,'NAD_1983_CSRS_v2_To_NAD_1983_CSRS_v3_2_BC_NVI','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9142,'MGI_1901_To_KOSOVAREF01_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9143,'MGI_1901_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9144,'KOSOVAREF01_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9181,'NAD_1983_HARN_To_HARN_Corrected_NADCON5_3D_PRVI_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9185,'AGD_1966_To_GDA2020_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9186,'ITRF_2008_To_IG05(2012)_Intermediate_CRS','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9189,'WGS_1984_To_IG05(2012)_Intermediate_CRS','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9224,'ED_1950_To_ETRS_1989_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9226,'SHGD2015_To_Astro_DOS_71-4_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9232,'ISN93_To_ISN2016_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9233,'ISN2004_To_ISN2016_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9234,'Kalianpur_1962_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9235,'ATS_1977_To_NAD_1983_CSRS_v3_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9236,'ATS_1977_To_NAD_1983_CSRS_v2_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9237,'ATS_1977_To_NAD_1983_CSRS_v2_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9238,'NAD_1927_To_NAD_1983_CSRS_v2_4','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9239,'NAD_1927_To_NAD_1983_CSRS_v2_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9240,'NAD_1927_CGQ77_To_NAD_1983_CSRS_v2_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9241,'NAD_1983_To_NAD_1983_CSRS_v2_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9242,'NAD_1927_To_NAD_1983_CSRS_v3_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9243,'NAD_1983_To_NAD_1983_CSRS_v3_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9244,'NAD_1983_To_NAD_1983_CSRS_v4_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9257,'Chos_Malal_1914_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9258,'Chos_Malal_1914_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9259,'Pampa_del_Castillo_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9260,'Tapi_Aike_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9261,'MMN_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9262,'MMS_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9263,'Hito_XVIII_1963_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9264,'POSGAR_2007_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9281,'Amersfoort_To_ETRS_1989_8','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9282,'Amersfoort_To_ETRS_1989_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9291,'ISN2016_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9302,'HS2-IRF_to_ETRS89_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9310,'DHDN_to_ETRS89_(10)','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9338,'DHDN_to_ETRS89_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9339,'PSAD56_to_SIRGAS-Chile_2010_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9340,'PSAD56_to_SIRGAS-Chile_2010_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9341,'PSAD56_to_SIRGAS-Chile_2010_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9342,'PSAD56_to_SIRGAS-Chile_2013_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9343,'PSAD56_to_SIRGAS-Chile_2013_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9344,'PSAD56_to_SIRGAS-Chile_2013_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9345,'PSAD56_to_SIRGAS-Chile_2016_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9346,'PSAD56_to_SIRGAS-Chile_2016_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9347,'PSAD56_to_SIRGAS-Chile_2016_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9348,'SAD69_to_SIRGAS-Chile_2010_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9349,'SAD69_to_SIRGAS-Chile_2013_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9350,'SAD69_to_SIRGAS-Chile_2016_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9361,'MTRF-2000_To_KSA-GRF17_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9362,'Ain_el_Abd_To_KSA-GRF17_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9365,'ETRS89_to_TPEN11-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9369,'ETRS89_to_MML07-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9383,'KSA-GRF17_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9386,'ETRS89_to_AbInvA96_2020-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9408,'ED50_to_ETRS89_16','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9409,'ED50_to_ETRS89_17','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9454,'ETRS89_to_GBK19-IRF_1','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','9459','ATRF_2014_To_GDA_2020_AT2020',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','9308','EPSG','7843',0.03,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00150379,0.00118346,0.00120716,'EPSG','1043',0.0,'EPSG','1041',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9459_USAGE','helmert_transformation','ESRI','9459','EPSG','4177','EPSG','1024'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9472,'DGN95_to_SRGI2013_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9486,'MGI_1901_to_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9495,'MGI_1901_to_SRB-ETRS89_8','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9496,'MGI_1901_to_SRB-ETRS89_9','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9550,'NAD83_to_NAD83(CSRS)v6_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9676,'Israel_1993_to_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9679,'Gulshan_303_to_WGS_1984_2','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','9682','ITRF_2014_To_GDA_1994_AT2020',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7912','EPSG','4939',0.035,-61.55,10.87,40.19,'EPSG','1025',39.4924,32.7221,32.8979,'EPSG','1031',0.009994,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00150379,0.00118346,0.00120716,'EPSG','1043',0.0,'EPSG','1041',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9682_USAGE','helmert_transformation','ESRI','9682','EPSG','4177','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9684','ATRF_2014_To_GDA_1994_AT2020',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','9308','EPSG','4939',0.035,-61.55,10.87,40.19,'EPSG','1025',39.4924,32.7221,32.8979,'EPSG','1031',0.009994,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00150379,0.00118346,0.00120716,'EPSG','1043',0.0,'EPSG','1041',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9684_USAGE','helmert_transformation','ESRI','9684','EPSG','4177','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9686','GDA_1994_To_WGS_1984_G1762_AT2020',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','4939','EPSG','7665',0.25,61.55,-10.87,-40.19,'EPSG','1025',-39.4924,-32.7221,-32.8979,'EPSG','1031',-0.009994,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',-0.00150379,-0.00118346,-0.00120716,'EPSG','1043',0.0,'EPSG','1041',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9686_USAGE','helmert_transformation','ESRI','9686','EPSG','4177','EPSG','1024'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9688,'GDA_1994_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9689,'GDA_1994_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9690,'WGS_1984_To_GDA2020_3','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9691,'WGS_1984_To_GDA2020_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9703,'ETRF2000-PL_to_ETRS89_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9732,'Monte_Mario_to_ED50_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9733,'Monte_Mario_to_IGM95_4','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9734,'Monte_Mario_to_RDN2008_5','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9735,'ED50_to_IGM95_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9736,'ED50_to_RDN2008_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9737,'IGM95_to_RDN2008_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9740,'ETRS89_to_EOS21-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9743,'PN68_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9751,'CR05_to_CR-SIRGAS_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9752,'CR05_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9759,'ETRS89_to_ECML14_NB-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9764,'ETRS89_to_EWR2-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9768,'Kyrg-06_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9769,'RGWF96_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9770,'RGTAAF07_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9771,'TGD2005_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9772,'ETRF2000-PL_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9773,'GSK-2011_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9774,'NAD_1983_(2011)_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9788,'RGF93_v2_to_RGF93_v2b','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9789,'RGF93_v2_to_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9790,'RGF93_v2b_to_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9791,'RGF93_v2_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9792,'RGF93_v2b_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9795,'NAD83_to_NAD83(CSRS)v7_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9867,'ETRS_1989_to_MRH21-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9878,'ETRS_1989_to_MOLDOR11-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9882,'RGF93_v1_to_RGF93_v2_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9886,'NAD_1927_to_NAD83(CSRS)v2_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9887,'NAD_1983_to_NAD83(CSRS)v2_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9890,'RGF93_v2_to_NTF_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9891,'RGF93_v2b_to_NTF_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9896,'JGD2000_to_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9898,'LUREF_To_ETRS_1989_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9899,'LUREF_To_ETRS_1989_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9901,'UCS-2000_to_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9904,'Camacupa_1948_to_RSAO13_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9905,'Camacupa_1948_to_RSAO13_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9906,'Malongo_1987_to_RSAO13_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9910,'MGI_To_ETRS_1989_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9913,'Hong_Kong_1980_to_Hong_Kong_Geodetic_CS_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9936,'JGD2011_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9937,'LUREF_To_ETRS_1989_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',9938,'LUREF_To_ETRS_1989_8','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9940,'DHDN_to_ETRS89_11','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9941,'ETRS_1989_to_EBBWV14-IRF_1','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','9962','WGS_1984_G873_To_G1150_AT2005_KD',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7659','EPSG','7661',0.03,1.1,-4.7,22.0,'EPSG','1025',0.0,0.0,0.16,'EPSG','1031',1.45,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.0,0.0,0.02,'EPSG','1032',-0.01,'EPSG','1030',2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9962_USAGE','helmert_transformation','ESRI','9962','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9963','WGS_1984_G1150_To_G1674_AT2005_KD',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7661','EPSG','7663',0.02,-2.4,1.6,23.2,'EPSG','1025',-0.27,0.27,-0.38,'EPSG','1031',2.08,'EPSG','1028',-0.1,-0.1,1.8,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.08,'EPSG','1030',2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9963_USAGE','helmert_transformation','ESRI','9963','EPSG','1262','EPSG','1024'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9965,'ETRS_1989_to_HULLEE13-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9970,'ETRS_1989_to_SCM22-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9975,'ETRS_1989_to_FNL22-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9979,'SIRGAS_1995_to_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',9980,'SIRGAS_2000_to_SIRGAS-CON_SIR17P01_1','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','9991','ITRF2014_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','9989',0.001,0.0014,0.0009,-0.0014,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00042,'EPSG','9202',0.0,0.0001,-0.0002,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.0,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9991_USAGE','helmert_transformation','ESRI','9991','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9992','ITRF_2008_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','9989',0.01,-0.0002,-0.001,-0.0033,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00029,'EPSG','9202',0.0,0.0001,-0.0001,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',-0.00003,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9992_USAGE','helmert_transformation','ESRI','9992','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9993','ITRF_2005_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7910','EPSG','9989',0.01,-0.0027,-0.0001,0.0014,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00065,'EPSG','9202',-0.0003,0.0001,-0.0001,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',-0.00003,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9993_USAGE','helmert_transformation','ESRI','9993','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9994','ITRF_2000_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','9989',0.01,0.0002,-0.0008,0.0342,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00225,'EPSG','9202',-0.0001,0.0,0.0017,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',-0.00011,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9994_USAGE','helmert_transformation','ESRI','9994','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9995','ITRF_1997_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7908','EPSG','9989',0.01,-0.0065,0.0039,0.0779,'EPSG','9001',0.0,0.0,-0.00036,'EPSG','9104',-0.00398,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9995_USAGE','helmert_transformation','ESRI','9995','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9996','ITRF_1996_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7907','EPSG','9989',0.01,-0.0065,0.0039,0.0779,'EPSG','9001',0.0,0.0,-0.00036,'EPSG','9104',-0.00398,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9996_USAGE','helmert_transformation','ESRI','9996','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9997','ITRF_1994_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7906','EPSG','9989',0.01,-0.0065,0.0039,0.0779,'EPSG','9001',0.0,0.0,-0.00036,'EPSG','9104',-0.00398,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9997_USAGE','helmert_transformation','ESRI','9997','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9998','ITRF_1993_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7905','EPSG','9989',0.01,0.0658,-0.0019,0.0713,'EPSG','9001',0.00336,0.00433,-0.00075,'EPSG','9104',-0.00447,'EPSG','9202',0.0028,0.0002,0.0023,'EPSG','1042',0.00011,0.00019,-0.00007,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9998_USAGE','helmert_transformation','ESRI','9998','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','9999','ITRF_1992_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7904','EPSG','9989',0.01,-0.0145,0.0019,0.0859,'EPSG','9001',0.0,0.0,-0.00036,'EPSG','9104',-0.00327,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '9999_USAGE','helmert_transformation','ESRI','9999','EPSG','1262','EPSG','1024'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10085,'Trinidad_1903_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10086,'Jamaica_1969_To_WGS_1972_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10089,'Aratu_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10090,'Aratu_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10091,'Aratu_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10092,'Aratu_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10093,'Aratu_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10098,'KKJ_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10099,'KKJ_To_WGS_1984_2_JHS153','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','10100','ITRF_1991_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7903','EPSG','9989',0.01,-0.0265,-0.0121,0.0919,'EPSG','9001',0.0,0.0,-0.00036,'EPSG','9104',-0.00467,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '10100_USAGE','helmert_transformation','ESRI','10100','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','10103','ITRF_1990_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7902','EPSG','9989',0.01,-0.0245,-0.0081,0.1079,'EPSG','9001',0.0,0.0,-0.00036,'EPSG','9104',-0.00497,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '10103_USAGE','helmert_transformation','ESRI','10103','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','10104','ITRF_1989_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7901','EPSG','9989',0.01,-0.0295,-0.0321,0.1459,'EPSG','9001',0.0,0.0,-0.00036,'EPSG','9104',-0.00837,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '10104_USAGE','helmert_transformation','ESRI','10104','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','10105','ITRF_1988_TO_ITRF2020_AT2015_1',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7900','EPSG','9989',0.01,-0.0245,0.0039,0.1699,'EPSG','9001',-0.0001,0.0,-0.00036,'EPSG','9104',-0.01147,'EPSG','9202',-0.0001,0.0006,0.0031,'EPSG','1042',0.0,0.0,-0.00002,'EPSG','1043',-0.00012,'EPSG','1041',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '10105_USAGE','helmert_transformation','ESRI','10105','EPSG','1262','EPSG','1024'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10108,'ETRS_1989_to_MWC18-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10135,'PSAD56_to_SIRGAS-Chile_2021_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10136,'PSAD56_to_SIRGAS-Chile_2021_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10137,'PSAD56_to_SIRGAS-Chile_2021_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10138,'SAD69_to_SIRGAS-Chile_2021_(4)','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10149,'MAGNA-SIRGAS_2018_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10161,'ETRS89_to_S34J-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10181,'ETRS89_to_DoPw22-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10186,'ETRS89_to_ShAb07-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10192,'ETRS89_to_CNH22-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10197,'ETRS89_to_CWS13-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10205,'ETRS89_to_DIBA15-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10210,'ETRS89_to_GWPBS22-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10215,'ETRS89_to_GWWAB22-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10220,'ETRS89_to_GWWWA22-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10225,'ETRS89_to_MALS09-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10230,'ETRS89_to_OxWo08-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10238,'ETRS89_to_SYC20-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10251,'ETRS89_to_S34S-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10255,'ETRS89_to_S45B-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10259,'ETRS89_to_GS-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10263,'ETRS89_to_GSB-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10264,'RGSH2020_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10267,'ETRS89_to_KK-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10271,'ETRS89_to_Ostenfeld-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10273,'ETRS89_to_SMITB20-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10278,'ETRS89_to_RBEPP12-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10296,'Nord_Sahara_1959_to_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10321,'RGNC91-93_to_RGNC15_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10324,'RGNC15_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10330,'BH_ETRS89_to_ETRS89_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10333,'BH_ETRS89_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10339,'Nord_Sahara_1959_to_RGSH2020_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10340,'Nord_Sahara_1959_to_RGSH2020_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10341,'Nord_Sahara_1959_to_RGSH2020_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10342,'Nord_Sahara_1959_to_RGSH2020_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10343,'Nord_Sahara_1959_to_RGSH2020_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10344,'Nord_Sahara_1959_to_RGSH2020_6','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10469,'ETRS89_to_COV23-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10478,'BBT2000_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10543,'GDM2000_to_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',10589,'ITRF_2014_To_Segara_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10615,'NAD_1983_CSRS_v2_To_NAD_1983_CSRS_v4_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10624,'ETRS89_to_ECML14-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',10629,'ETRS89_to_WC05-IRF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15483,'Tokyo_To_JGD_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15484,'Tokyo_To_WGS_1984_108','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15485,'SAD_1969_To_SIRGAS_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15486,'CH1903_To_CH1903+_1_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15493,'Minna_To_WGS_1984_15','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15494,'Kalianpur_1962_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15495,'Accra_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15496,'Pulkovo_1942_Adj_1958_To_WGS_1984_18','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15497,'Pulkovo_1942_Adj_1958_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15699,'NAD_1927_To_WGS_1984_87','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15701,'Kalianpur_1962_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15702,'Kalianpur_1962_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15703,'Kalianpur_1962_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15705,'Minna_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15706,'Minna_To_WGS_1984_13','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15707,'ELD_1979_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15708,'PRS_1992_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15709,'Nouakchott_1965_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15710,'Aratu_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15711,'Aratu_To_WGS_1984_11','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15712,'Aratu_To_WGS_1984_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15713,'Gan_1970_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15714,'Bogota_To_MAGNA_Region_1_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15715,'Bogota_To_WGS_1984_Region_1_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15716,'Bogota_To_MAGNA_Region_2_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15717,'Bogota_To_WGS_1984_Region_2_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15718,'Bogota_To_MAGNA_Region_3_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15719,'Bogota_To_WGS_1984_Region_3_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15720,'Bogota_To_MAGNA_Region_4_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15721,'Bogota_To_WGS_1984_Region_4_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15722,'Bogota_To_MAGNA_Region_5_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15723,'Bogota_To_WGS_1984_Region_5_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15724,'Bogota_To_MAGNA_Region_6_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15725,'Bogota_To_WGS_1984_Region_6_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15726,'Bogota_To_MAGNA_Region_7_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15727,'Bogota_To_WGS_1984_Region_7_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15728,'Bogota_To_MAGNA_Region_8_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15729,'Bogota_To_WGS_1984_Region_8_CF','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15730,'Bogota_To_MAGNA_Region_1_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15731,'Bogota_To_MAGNA_Region_2_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15732,'Bogota_To_MAGNA_Region_3_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15733,'Bogota_To_MAGNA_Region_4_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15734,'Bogota_To_MAGNA_Region_5_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15735,'Bogota_To_MAGNA_Region_6_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15736,'Bogota_To_MAGNA_Region_7_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15737,'Bogota_To_MAGNA_Region_8_MB','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15738,'MAGNA_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15739,'Amersfoort_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15740,'Amersfoort_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15741,'Deir_ez_Zor_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15742,'Deir_ez_Zor_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15743,'Deir_ez_Zor_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15745,'ED_1950_ED77_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15746,'Nakhl-e_Ghanem_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15748,'Belge_1972_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15749,'Belge_1972_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15750,'St_Kitts_1955_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15751,'Reunion_1947_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15752,'European_1979_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15754,'Aratu_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15755,'Minna_To_WGS_1984_14','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15757,'Moorea_1987_To_RGPF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15759,'Maupiti_1983_To_RGPF_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15768,'Tahiti_1979_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15769,'Moorea_1987_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15770,'Tahaa_1954_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15771,'Maupiti_1983_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15772,'Fatu_Iva_1972_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15773,'IGN63_Hiva_Oa_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15774,'IGN63_Hiva_Oa_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15775,'IGN72_Nuku_Hiva_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15776,'IGN72_Nuku_Hiva_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15777,'IGN72_Nuku_Hiva_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15778,'ELD_1979_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15779,'Gulshan_303_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15780,'POSGAR_1994_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15782,'Campo_Inchauspe_To_POSGAR_1994_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15783,'IGN53_Mare_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15784,'Le_Pouce_1934_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15785,'AGD_1984_To_WGS_1984_9_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15786,'AGD_1966_To_WGS_1984_17_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15787,'IGCB_1955_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15788,'AGD_1966_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15789,'AGD_1984_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15790,'Mhast_offshore_To_WGS_1972_BE_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15791,'Malongo_1987_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15792,'Egypt_Gulf_of_Suez_S-650_TL_To_WGS_1972_BE_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15793,'Barbados_1938_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15794,'Anna_1_1965_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15795,'Tern_Island_1961_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15796,'Beacon_E_1945_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15797,'Ascension_Island_1958_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15798,'DOS_71_4_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15799,'Astro_1952_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15800,'Ayabelle_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15801,'Bellevue_IGN_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15802,'Camp_Area_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15803,'Canton_1966_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15804,'Cape_Canaveral_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15805,'Solomon_1968_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15806,'Easter_Island_1967_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15807,'Solomon_1968_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15808,'ISTS_073_1969_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15809,'Johnston_Island_1961_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15810,'Kusaie_1951_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15811,'Antigua_1943_To_WGS_1984_NGA','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15812,'Deception_Island_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15813,'ISTS_061_1968_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15814,'Little_Cayman_1961_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15815,'Pico_de_Las_Nieves_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15816,'Tristan_1968_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15817,'Midway_1961_To_WGS_1984_Old','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15818,'Midway_1961_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15819,'Pitcairn_1967_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15820,'Santo_DOS_1965_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15821,'Viti_Levu_1916_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15822,'Wake_Eniwetok_1960_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15823,'Wake_Island_1952_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15824,'Old_Hawaiian_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15825,'Old_Hawaiian_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15826,'Old_Hawaiian_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15827,'Old_Hawaiian_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15828,'Old_Hawaiian_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15829,'Little_Cayman_1961_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15830,'Grand_Cayman_1959_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15831,'KGD2002_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15833,'RGPF_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15834,'NAD_1983_To_HARN_North_Carolina','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15835,'NAD_1983_To_WGS_1984_North_Carolina_55','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15836,'NAD_1983_To_HARN_South_Carolina','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15837,'NAD_1983_To_WGS_1984_South_Carolina_56','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15838,'NAD_1983_To_HARN_Pennsylvania','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15839,'NAD_1983_To_WGS_1984_Pennsylvania_57','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15840,'Old_Hawaiian_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15841,'Puerto_Rico_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15842,'Hong_Kong_1963_67_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15843,'PZ_1990_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15844,'Pulkovo_1942_To_PZ_1990_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15845,'Pampa_del_Castillo_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15846,'Egypt_Gulf_of_Suez_S-650_TL_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15847,'MOP78_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15848,'ST84_Ile_des_Pins_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15849,'Beduaram_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15850,'Kerguelen_Island_1949_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15851,'NAD_1927_To_WGS_1984_79_CONUS','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15852,'NAD_1927_To_WGS_1984_80','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15853,'NAD_1927_To_WGS_1984_81','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15854,'NAD_1927_To_WGS_1984_82','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15855,'NAD_1927_To_WGS_1984_83','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15856,'NAD_1927_To_WGS_1984_84','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15860,'Mauritania_1999_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15864,'NAD_1927_To_WGS_1984_85','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15865,'Pulkovo_1942_To_WGS_1984_16','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15866,'FD_1954_To_ED_1950_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15867,'PD/83_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15868,'RD/83_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15869,'DHDN_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15870,'Jouik_1961_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15871,'Nahrwan_1967_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15872,'Karbala_1979_Polservice_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15873,'Douala_1948_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15874,'Nord_Sahara_1959_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15875,'Fiji_1956_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15876,'Fiji_1986_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15877,'Fiji_1986_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15878,'Vanua_Levu_1915_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15879,'Greenland_1996_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15880,'RGNC_1991-93_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15881,'ST87_Ouvea_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15882,'IGN72_Grande_Terre_To_RGNC_1991-93_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15883,'IGN56_Lifou_To_RGNC_1991-93_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15884,'IGN53_Mare_To_RGNC_1991-93_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15885,'ST87_Ouvea_To_RGNC_1991-93_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15886,'NEA74_Noumea_To_RGNC_1991-93_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15887,'IGN72_Grande_Terre_To_RGNC_1991-93_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15888,'IGN72_Grande_Terre_To_RGNC_1991-93_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15889,'NEA74_Noumea_To_RGNC_1991-93_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15890,'IGN56_Lifou_To_RGNC_1991-93_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15891,'IGN53_Mare_To_RGNC_1991-93_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15892,'ST87_Ouvea_To_RGNC_1991-93_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15893,'ST84_Ile_des_Pins_To_RGNC_1991-93_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15894,'SIRGAS_2000_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15896,'Kertau_RSO_To_Kertau_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15897,'Viti_Levu_1912_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15899,'Scoresbysund_1952_To_Greenland_1996_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15900,'Ammassalik_1958_To_Greenland_1996_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15901,'IGN53_Mare_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15902,'IGN56_Lifou_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15903,'IGN72_Grande_Terre_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15904,'NEA74_Noumea_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15908,'LGD2006_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15909,'ELD_1979_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15911,'Indonesian_1974_To_DGN_1995_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15912,'DGN_1995_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15913,'NAD_1927_To_WGS_1984_86','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15918,'Beijing_1954_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15919,'Beijing_1954_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15920,'Beijing_1954_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15921,'Beijing_1954_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15923,'ELD_1979_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15924,'ELD_1979_To_LGD2006_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15925,'JAD_2001_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15926,'Jamaica_1969_To_JAD_2001_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15927,'Jamaica_1969_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15928,'Belge_1972_To_ETRS_1989_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15929,'Belge_1972_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15930,'NAD_1983_HARN_To_NAD_1983_NSRS2007_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15931,'NAD_1983_NSRS2007_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15932,'ED_1950_To_ETRS_1989_12_NTv2_Spain_v2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15933,'ED_1950_To_WGS_1984_41_NTv2_Spain_v2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15934,'Amersfoort_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15935,'Beijing_1954_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15936,'Beijing_1954_To_WGS_1984_6','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15937,'Nahrwan_1967_To_WGS_1984_7','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15938,'Nahrwan_1967_To_WGS_1984_8','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15948,'DHDN_To_ETRS_1989_8_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15949,'DHDN_To_WGS_1984_4_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15952,'Nahrwan_1967_To_WGS_1984_9','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15953,'Nahrwan_1967_To_WGS_1984_10','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15954,'RD/83_To_WGS_1984_1_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15955,'PD/83_To_WGS_1984_1_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15957,'Qornoq_1927_To_Greenland_1996_1','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15958,'RGF_1993_To_NTF_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15959,'ETRS_1989_To_NTF_3_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15960,'WGS_1984_To_NTF_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('grid_transformation','EPSG',15962,'RGNC_1991-93_To_IGN72_Grande_Terre_6_NTv2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15963,'Yacare_To_SIRGAS_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15964,'ED_1950_To_WGS_1984_42','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15965,'S_JTSK_To_WGS_1984_NGA','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15966,'HTRS96_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15967,'HTRS96_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15969,'Bermuda_1957_To_Bermuda_2000_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15970,'Bermuda_1957_To_WGS_1984_2','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15971,'Bermuda_2000_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15972,'Pitcairn_2006_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15973,'WGS_1984_Major_Auxiliary_Sphere_To_WGS_1984','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15974,'RSRGD2000_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15975,'NZGD_1949_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15976,'Slovenia_1996_To_WGS_1984_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15977,'Slovenia_1996_To_ETRS_1989_1','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15978,'NAD_1927_To_WGS_1984_88','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15979,'AGD_1966_To_GDA_1994_12','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15980,'AGD_1966_To_WGS_1984_18','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15993,'Pulkovo_1942_Adj_1958_To_ETRS_1989_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15994,'Pulkovo_1942_Adj_1958_To_ETRS_1989_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15995,'Pulkovo_1942_Adj_1958_To_WGS_1984_19','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15996,'Pulkovo_1942_Adj_1983_To_WGS_1984_3','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15997,'Pulkovo_1942_Adj_1958_To_WGS_1984_4','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15998,'Pulkovo_1942_Adj_1983_To_WGS_1984_5','ESRI'); INSERT INTO "alias_name" VALUES('helmert_transformation','EPSG',15999,'Pulkovo_1942_Adj_1958_To_WGS_1984_8','ESRI'); INSERT INTO "helmert_transformation" VALUES('ESRI','108013','CR05_To_Ocotepeque_1935_MB',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','5365','EPSG','5451',0.5,-213.116,-9.358,74.946,'EPSG','9001',2.3514188,-0.0614669,6.394209,'EPSG','9104',5.22,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,617749.7118,-6250547.7336,1102063.6099,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108013_USAGE','helmert_transformation','ESRI','108013','EPSG','3232','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108014','WGS_1984_To_Ocotepeque_1935_MB',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4326','EPSG','5451',0.5,-213.116,-9.358,74.946,'EPSG','9001',2.3514188,-0.0614669,6.394209,'EPSG','9104',5.22,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,617749.7118,-6250547.7336,1102063.6099,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108014_USAGE','helmert_transformation','ESRI','108014','EPSG','3232','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108015','Nepal_Nagarkot_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6207','EPSG','4326',10.0,296.0,732.0,273.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108015_USAGE','helmert_transformation','ESRI','108015','EPSG','1171','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108016','Nepal_Nagarkot_To_WGS_1984_2',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6207','EPSG','4326',5.0,296.207,731.545,273.001,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108016_USAGE','helmert_transformation','ESRI','108016','EPSG','1171','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108017','NAD_1983_PACP00_To_WGS_1984',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9075','EPSG','4326',0.1,-0.9102,2.0141,0.5602,'EPSG','9001',-0.029039,-0.010065,-0.010101,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108017_USAGE','helmert_transformation','ESRI','108017','EPSG','4162','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108018','NAD_1983_MARP00_To_WGS_1984',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9072','EPSG','4326',0.1,-0.9102,2.0141,0.5602,'EPSG','9001',-0.029039,-0.010065,-0.010101,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108018_USAGE','helmert_transformation','ESRI','108018','EPSG','4167','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','177','Israel, Palestine Territory, and Jordan','Israel, Palestine Territory, and Jordan',29.19,33.53,32.99,39.3,0); INSERT INTO "helmert_transformation" VALUES('ESRI','108021','WGS_1984_To_Israel_CoordFrame',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','4141',1.0,-24.0024,-17.1032,-17.8444,'EPSG','9001',-0.33009,-1.85269,1.66969,'EPSG','9104',5.4248,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108021_USAGE','helmert_transformation','ESRI','108021','ESRI','177','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108023','Datum_Lisboa_Hayford_To_WGS_1984_NTv2',NULL,'EPSG','9615','NTv2','ESRI','104106','EPSG','4326',0.1,'EPSG','8656','Latitude and longitude difference file','portugal/DLX_ETRS89_geo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108023_USAGE','grid_transformation','ESRI','108023','EPSG','1294','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108024','Datum_Lisboa_Hayford_To_ETRS_1989_NTv2',NULL,'EPSG','9615','NTv2','ESRI','104106','EPSG','4258',0.1,'EPSG','8656','Latitude and longitude difference file','portugal/DLX_ETRS89_geo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108024_USAGE','grid_transformation','ESRI','108024','EPSG','1294','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108025','Datum_73_To_WGS_1984_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4274','EPSG','4326',0.1,'EPSG','8656','Latitude and longitude difference file','portugal/D73_ETRS89_geo',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108025_USAGE','grid_transformation','ESRI','108025','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108026','ITRF_1997_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8996','EPSG','8997',0.01,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108026_USAGE','helmert_transformation','ESRI','108026','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108027','ITRF_1996_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8995','EPSG','8997',0.01,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108027_USAGE','helmert_transformation','ESRI','108027','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108028','ITRF_1994_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8994','EPSG','8997',0.01,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108028_USAGE','helmert_transformation','ESRI','108028','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108029','ITRF_1993_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8993','EPSG','8997',0.01,-0.0127,-0.0065,0.0209,'EPSG','9001',0.00039,-0.0008,0.00114,'EPSG','9104',-0.00195,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108029_USAGE','helmert_transformation','ESRI','108029','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108030','ITRF_1992_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8992','EPSG','8997',0.01,-0.0147,-0.0135,0.0139,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00075,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108030_USAGE','helmert_transformation','ESRI','108030','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108031','ITRF_1991_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8991','EPSG','8997',0.01,-0.0267,-0.0275,0.0199,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00215,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108031_USAGE','helmert_transformation','ESRI','108031','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108032','ITRF_1990_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8990','EPSG','8997',0.01,-0.0247,-0.0235,0.0359,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00245,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108032_USAGE','helmert_transformation','ESRI','108032','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108033','ITRF_1989_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8989','EPSG','8997',0.01,-0.0297,-0.0475,0.0739,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',0.00585,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108033_USAGE','helmert_transformation','ESRI','108033','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108034','ITRF_1988_To_ITRF_2000_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8988','EPSG','8997',0.01,-0.0247,-0.0115,0.0979,'EPSG','9001',-0.0001,0.0,0.00018,'EPSG','9104',-0.00895,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108034_USAGE','helmert_transformation','ESRI','108034','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108035','Ukraine_2000_To_ITRF_2005_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5561','EPSG','8998',1.0,24.0,-121.0,-76.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108035_USAGE','helmert_transformation','ESRI','108035','EPSG','1242','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108036','ITRF_2000_To_ITRF_2005_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8997','EPSG','8998',0.01,-0.0001,0.0008,0.0058,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.0004,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108036_USAGE','helmert_transformation','ESRI','108036','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108037','Macao_2008_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8431','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108037_USAGE','helmert_transformation','ESRI','108037','ESRI','53','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108038','Macao_2008_To_ITRF_2005',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8431','EPSG','8998',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108038_USAGE','helmert_transformation','ESRI','108038','ESRI','53','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108039','Macao_2008_To_Observatorio_Meteorologico_1965_1',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','8431','ESRI','104126',3.0,202.865,303.99,155.873,'EPSG','9001',34.067,-76.126,-32.647,'EPSG','9104',-6.096,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-2361757.652,5417232.187,2391453.053,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108039_USAGE','helmert_transformation','ESRI','108039','ESRI','53','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108042','Amersfoort_To_WGS_1984_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4289','EPSG','4326',0.2,'EPSG','8656','Latitude and longitude difference file','netherlands/rdtrans2008',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108042_USAGE','grid_transformation','ESRI','108042','EPSG','1275','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108043','Egypt_1907_To_WGS_1984_2',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4229','EPSG','4326',5.0,-121.8,98.1,-10.7,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108043_USAGE','helmert_transformation','ESRI','108043','EPSG','1086','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108050','ETRS_1989_To_Xrail84_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4258','ESRI','104050',0.5,19.019,115.122,-97.287,'EPSG','9001',3.577824,-3.484437,-2.767646,'EPSG','9104',18.6084754,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108050_USAGE','helmert_transformation','ESRI','108050','ESRI','2','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108051','WGS_1984_To_Xrail84_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4326','ESRI','104050',0.5,19.019,115.122,-97.287,'EPSG','9001',3.577824,-3.484437,-2.767646,'EPSG','9104',18.6084754,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108051_USAGE','helmert_transformation','ESRI','108051','ESRI','2','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108052','ITRF_2005_To_ITRF_2008_2',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8998','EPSG','8999',0.01,0.002,0.0009,0.0047,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00094,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108052_USAGE','helmert_transformation','ESRI','108052','EPSG','1262','EPSG','1024'); INSERT INTO "other_transformation" VALUES('ESRI','108053','JGD_2011_To_WGS_1984',NULL,'EPSG','9619','Geographic2D offsets','EPSG','6668','EPSG','4326',0.0,'EPSG','8601','Latitude offset',0,'EPSG','9104','EPSG','8602','Longitude offset',0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108053_USAGE','other_transformation','ESRI','108053','EPSG','3957','EPSG','1024'); INSERT INTO "other_transformation" VALUES('ESRI','108054','MONREF_1997_To_WGS_1984',NULL,'EPSG','9619','Geographic2D offsets','ESRI','104134','EPSG','4326',1.0,'EPSG','8601','Latitude offset',0,'EPSG','9104','EPSG','8602','Longitude offset',0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108054_USAGE','other_transformation','ESRI','108054','EPSG','1164','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108055','WGS_1984_To_MSK_1942',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','ESRI','104135',NULL,78.0421780299,204.5186132514,77.449861533,'EPSG','9001',-1.7736709695,3.3197917322,-1.0426077127,'EPSG','9104',-4.95105766,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108055_USAGE','helmert_transformation','ESRI','108055','EPSG','1164','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108056','WGS_1984_To_Pulkovo_1942',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','4284',NULL,78.0421780299,204.5186132514,77.449861533,'EPSG','9001',-1.7736709695,3.3197917322,-1.0426077127,'EPSG','9104',-4.95105766,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108056_USAGE','helmert_transformation','ESRI','108056','EPSG','1164','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108057','ETRS_1989_To_OSGB_1936_OSTN15',NULL,'EPSG','9615','NTv2','EPSG','4258','EPSG','4277',0.03,'EPSG','8656','Latitude and longitude difference file','uk/OSTN15_NTv2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108057_USAGE','grid_transformation','ESRI','108057','EPSG','4390','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108058','WGS_1984_To_OSGB_1936_OSTN15',NULL,'EPSG','9615','NTv2','EPSG','4326','EPSG','4277',1.0,'EPSG','8656','Latitude and longitude difference file','uk/OSTN15_NTv2',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108058_USAGE','grid_transformation','ESRI','108058','EPSG','4390','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108059','OSGB_1936_To_Xrail84_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4277','ESRI','104050',0.5,'EPSG','8656','Latitude and longitude difference file','uk/osgb36_xrail84',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108059_USAGE','grid_transformation','ESRI','108059','ESRI','2','EPSG','1024'); INSERT INTO "other_transformation" VALUES('ESRI','108061','ITRF_2014_To_GDA2020_Null',NULL,'EPSG','9619','Geographic2D offsets','EPSG','9000','EPSG','7844',0.005,'EPSG','8601','Latitude offset',0,'EPSG','9104','EPSG','8602','Longitude offset',0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108061_USAGE','other_transformation','ESRI','108061','EPSG','4177','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108062','NAD_1927_To_SIRGAS_2000_7Par_Panama',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4267','EPSG','4674',1.0,-32.3841359,180.4090461,120.8442577,'EPSG','9001',2.1545854,0.1498782,-0.5742915,'EPSG','9104',8.1049164,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108062_USAGE','helmert_transformation','ESRI','108062','EPSG','3290','EPSG','1024'); INSERT INTO "other_transformation" VALUES('ESRI','108063','NAD_1983_HARN_To_HARN_Adjusted_WCCS_Chippewa',NULL,'EPSG','9619','Geographic2D offsets','EPSG','4152','ESRI','104808',0.0,'EPSG','8601','Latitude offset',0,'EPSG','9104','EPSG','8602','Longitude offset',0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108063_USAGE','other_transformation','ESRI','108063','EPSG','1418','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108068','ED_1950_To_WGS_1984_NTv2_PENR2009',NULL,'EPSG','9615','NTv2','EPSG','4230','EPSG','4326',0.9,'EPSG','8656','Latitude and longitude difference file','spain/PENR2009',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108068_USAGE','grid_transformation','ESRI','108068','EPSG','4605','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108069','ED_1950_To_WGS_1984_NTv2_BALR2009',NULL,'EPSG','9615','NTv2','EPSG','4230','EPSG','4326',0.9,'EPSG','8656','Latitude and longitude difference file','spain/BALR2009',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108069_USAGE','grid_transformation','ESRI','108069','EPSG','2335','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108070','PD/83_To_WGS_1984_7PAR',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4746','EPSG','4326',0.5,599.4,72.4,419.2,'EPSG','9001',-0.062,-0.022,-2.723,'EPSG','9104',6.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108070_USAGE','helmert_transformation','ESRI','108070','EPSG','2544','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108071','RD/83_To_WGS_1984_7PAR',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4745','EPSG','4326',0.5,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108071_USAGE','helmert_transformation','ESRI','108071','EPSG','2545','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108072','MGI_To_ETRS_1989_Serbia',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4258',0.5,577.88891,165.22205,391.18289,'EPSG','9001',-4.9145,0.94729,13.05098,'EPSG','9104',7.78664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108072_USAGE','helmert_transformation','ESRI','108072','EPSG','3534','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108073','MGI_To_WGS_1984_Serbia',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4326',1.0,577.88891,165.22205,391.18289,'EPSG','9001',-4.9145,0.94729,13.05098,'EPSG','9104',7.78664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108073_USAGE','helmert_transformation','ESRI','108073','EPSG','3534','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108074','ITRF_2008_To_ITRF_2014_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8999','EPSG','9000',0.01,-0.0016,-0.0019,-0.0024,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00002,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108074_USAGE','helmert_transformation','ESRI','108074','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108075','ITRF_2014_To_NAD_1983_CSRS_v7_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','9000','EPSG','8255',0.0,1.0053,-1.9092,-0.5416,'EPSG','9001',-0.0267814,0.0004203,-0.0109321,'EPSG','9104',0.00037,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108075_USAGE','helmert_transformation','ESRI','108075','EPSG','1061','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108076','D48_To_D96_2010_GI',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104131','EPSG','4765',1.07,476.08,125.947,417.81,'EPSG','9001',-4.610862,-2.388137,11.942335,'EPSG','9104',9.896638,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108076_USAGE','helmert_transformation','ESRI','108076','EPSG','3307','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108077','D96_To_D48_Zahodna_Slovenija',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.357,-453.674,-112.561,-388.287,'EPSG','9001',5.343297,2.485394,-10.836743,'EPSG','9104',-15.958238,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108077_USAGE','helmert_transformation','ESRI','108077','EPSG','3564','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108078','D96_To_D48_Severovzhodna_Slovenija',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.504,-491.556,-135.972,-440.4,'EPSG','9001',3.683681,2.232141,-13.171698,'EPSG','9104',-5.421926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108078_USAGE','helmert_transformation','ESRI','108078','EPSG','3565','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108079','D96_To_D48_Jugovzhodna_Slovenija',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.388,-485.018,-129.747,-423.199,'EPSG','9001',4.880531,2.348721,-11.745346,'EPSG','9104',-8.231637,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108079_USAGE','helmert_transformation','ESRI','108079','EPSG','3566','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108080','D96_To_D48_Juzna_Slovenija',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.137,-502.101,-131.516,-433.704,'EPSG','9001',6.054862,2.498236,-10.429331,'EPSG','9104',-5.188197,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108080_USAGE','helmert_transformation','ESRI','108080','EPSG','3567','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108081','D96_To_D48_Dolenjska',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.308,-481.871,-129.173,-420.608,'EPSG','9001',5.096868,2.423927,-11.524756,'EPSG','9104',-8.872387,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108081_USAGE','helmert_transformation','ESRI','108081','EPSG','3568','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108082','D96_To_D48_Stajerska',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.368,-477.73,-130.719,-424.46,'EPSG','9001',3.790572,2.246488,-12.99207,'EPSG','9104',-8.828735,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108082_USAGE','helmert_transformation','ESRI','108082','EPSG','3569','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108083','D96_To_D48_Pomurje',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.21,-523.882,-151.289,-480.592,'EPSG','9001',3.706371,2.315828,-13.400341,'EPSG','9104',2.972511,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108083_USAGE','helmert_transformation','ESRI','108083','EPSG','3570','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108084','D96_To_D48_Gorenjska',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.249,-438.775,-109.403,-377.696,'EPSG','9001',4.933923,2.503267,-11.26993,'EPSG','9104',-18.814763,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108084_USAGE','helmert_transformation','ESRI','108084','EPSG','3571','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108085','D96_To_D48_Primorska',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.27,-465.715,-115.127,-397.622,'EPSG','9001',5.743906,2.510737,-10.415817,'EPSG','9104',-13.558204,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108085_USAGE','helmert_transformation','ESRI','108085','EPSG','3572','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108086','D96_To_D48_Osrednja_Slovenija',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4765','ESRI','104131',0.185,-465.328,-122.305,-403.609,'EPSG','9001',4.387757,2.265582,-12.157415,'EPSG','9104',-12.73019,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108086_USAGE','helmert_transformation','ESRI','108086','EPSG','3573','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108087','Nord_Sahara_1959_To_WGS_1984_3',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4307','EPSG','4326',10.0,-156.5,-87.2,287.8,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108087_USAGE','helmert_transformation','ESRI','108087','EPSG','2393','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108088','Saint_Pierre_et_Miquelon_1950_To_RGSPM_2006',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4638','EPSG','4463',1.0,-95.593,573.763,173.442,'EPSG','9001',-0.9602,1.251,-1.3918,'EPSG','9104',42.6265,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108088_USAGE','helmert_transformation','ESRI','108088','EPSG','3299','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108089','OSGB_1936_To_WGS_1984_8_BAD_DX',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4277','EPSG','4326',5.0,370.396,-108.938,435.682,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108089_USAGE','helmert_transformation','ESRI','108089','EPSG','3893','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108094','MGI_Ferro_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4805','EPSG','4326',5.0,682.0,-203.0,480.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108094_USAGE','helmert_transformation','ESRI','108094','EPSG','2370','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108095','MGI_To_WGS_1984_2',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4326',1.5,577.326,90.129,463.919,'EPSG','9001',5.1365988,1.4742,5.2970436,'EPSG','9104',2.4232,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108095_USAGE','helmert_transformation','ESRI','108095','EPSG','1037','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108096','Chos_Malal_1914_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4160','EPSG','4326',10.5,5.5,176.7,141.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108096_USAGE','helmert_transformation','ESRI','108096','EPSG','2325','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108097','Indian_1960_To_WGS_1984_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4131','EPSG','4326',27.0,199.0,931.0,318.9,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108097_USAGE','helmert_transformation','ESRI','108097','EPSG','1495','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108099','Palestine_1923_To_WGS_1984_2',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4281','EPSG','4326',3.5,-229.0,-67.0,277.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108099_USAGE','helmert_transformation','ESRI','108099','EPSG','2603','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108102','NTF_Paris_To_RGF_1993_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4807','EPSG','4171',2.0,-168.0,-60.0,320.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108102_USAGE','helmert_transformation','ESRI','108102','EPSG','3694','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108106','Tokyo_To_WGS_1984_2001',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',4.0,-147.54,507.26,680.47,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108106_USAGE','helmert_transformation','ESRI','108106','EPSG','3957','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108107','JGD_2000_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4612','EPSG','4326',4.0,-1.126,-0.077,-0.037,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108107_USAGE','helmert_transformation','ESRI','108107','EPSG','1135','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108109','Tokyo_To_WGS_1984_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4301','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','japan/tky2jgd',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108109_USAGE','grid_transformation','ESRI','108109','EPSG','3957','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108110','Datum_73_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4274','EPSG','4326',5.0,-223.237,110.193,36.649,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108110_USAGE','helmert_transformation','ESRI','108110','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108111','ED_1950_To_WGS_1984_PT3',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',NULL,-86.277,-108.879,-120.181,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108111_USAGE','helmert_transformation','ESRI','108111','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108112','Graciosa_Base_SW_1948_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','4326',5.0,-106.226,166.366,-37.893,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108112_USAGE','helmert_transformation','ESRI','108112','EPSG','1301','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108113','Datum_Lisboa_Bessel_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104105','EPSG','4326',5.0,508.088,-191.042,565.223,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108113_USAGE','helmert_transformation','ESRI','108113','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108114','Datum_Lisboa_Hayford_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104106','EPSG','4326',5.0,-304.046,-60.576,103.64,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108114_USAGE','helmert_transformation','ESRI','108114','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108115','Porto_Santo_1936_To_WGS_1984_1_IGP',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','4326',5.0,-502.862,-247.438,312.724,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108115_USAGE','helmert_transformation','ESRI','108115','EPSG','2870','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108116','Observatorio_Meteorologico_1939_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37245','EPSG','4326',5.0,-422.651,-172.995,84.02,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108116_USAGE','helmert_transformation','ESRI','108116','EPSG','1344','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108117','Sao_Braz_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37249','EPSG','4326',5.0,-204.619,140.176,55.226,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108117_USAGE','helmert_transformation','ESRI','108117','EPSG','1345','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108119','ED_1950_To_WGS_1984_NTv2_Baleares',NULL,'EPSG','9615','NTv2','EPSG','4230','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','spain/baleares',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108119_USAGE','grid_transformation','ESRI','108119','EPSG','2335','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108121','ED_1950_To_WGS_1984_PT7',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4230','EPSG','4326',NULL,-68.863,-134.888,-111.49,'EPSG','9001',0.53,0.14,-0.57,'EPSG','9104',-3.4,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108121_USAGE','helmert_transformation','ESRI','108121','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108122','Graciosa_Base_SW_1948_To_WGS_1984_2',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','37241','EPSG','4326',1.0,-103.088,162.481,-28.276,'EPSG','9001',-0.17,-0.08,-0.17,'EPSG','9104',-1.5,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108122_USAGE','helmert_transformation','ESRI','108122','EPSG','1301','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108123','Datum_Lisboa_Bessel_To_WGS_1984_2',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104105','EPSG','4326',1.0,631.392,-66.551,481.442,'EPSG','9001',-1.09,4.445,4.487,'EPSG','9104',-4.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108123_USAGE','helmert_transformation','ESRI','108123','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108124','Datum_Lisboa_Hayford_To_WGS_1984_2',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104106','EPSG','4326',2.0,-288.885,-91.744,126.244,'EPSG','9001',1.69,-0.41,0.21,'EPSG','9104',-4.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108124_USAGE','helmert_transformation','ESRI','108124','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108125','Porto_Santo_1936_To_WGS_1984_2',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4615','EPSG','4326',1.0,-210.502,-66.902,-48.476,'EPSG','9001',-2.094,15.067,5.817,'EPSG','9104',0.485,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108125_USAGE','helmert_transformation','ESRI','108125','EPSG','2870','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108127','Sao_Braz_To_WGS_1984_2',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','37249','EPSG','4326',1.0,-208.719,129.685,52.092,'EPSG','9001',0.2,0.01,-0.33,'EPSG','9104',0.2,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108127_USAGE','helmert_transformation','ESRI','108127','EPSG','1345','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108128','CGRS_1993_To_ETRS_1989',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','6311','EPSG','4258',0.5,8.846,-4.394,-1.122,'EPSG','9001',-0.00237,-0.146528,0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108128_USAGE','helmert_transformation','ESRI','108128','EPSG','3236','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108129','CGRS_1993_To_WGS_1984',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','6311','EPSG','4326',1.0,8.846,-4.394,-1.122,'EPSG','9001',-0.00237,-0.146528,0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108129_USAGE','helmert_transformation','ESRI','108129','EPSG','3236','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108130','NTF_To_RGF_1993_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4275','EPSG','4171',2.0,-168.0,-60.0,320.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108130_USAGE','helmert_transformation','ESRI','108130','EPSG','3694','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108136','ED_1950_To_WGS_1984_NTv2_Peninsula',NULL,'EPSG','9615','NTv2','EPSG','4230','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','spain/peninsula',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108136_USAGE','grid_transformation','ESRI','108136','EPSG','4605','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','178','Northern Marianas - Rota','Northern Marianas - Rota',14.0,14.75,145.0,146.0,0); INSERT INTO "helmert_transformation" VALUES('ESRI','108137','Guam_1963_To_HARN_Marianas_Rota',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4675','EPSG','4152',NULL,-96.234,-252.601,258.222,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108137_USAGE','helmert_transformation','ESRI','108137','ESRI','178','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','179','Northern Marianas - Saipan','Northern Marianas - Saipan',14.75,15.5,145.0,146.0,0); INSERT INTO "helmert_transformation" VALUES('ESRI','108138','Guam_1963_To_HARN_Marianas_Saipan',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4675','EPSG','4152',NULL,-91.766,-255.817,255.702,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108138_USAGE','helmert_transformation','ESRI','108138','ESRI','179','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','180','Northern Marianas - Tinian and Aguijan','Northern Marianas - Tinian and Aguijan',14.75,15.13333333333333,145.5,145.75,0); INSERT INTO "helmert_transformation" VALUES('ESRI','108139','Guam_1963_To_HARN_Marianas_Tinian_Aguijan',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4675','EPSG','4152',NULL,-93.062,-255.309,256.696,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108139_USAGE','helmert_transformation','ESRI','108139','ESRI','180','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108145','NGO_1948_Oslo_To_WGS_1984',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4817','EPSG','4326',5.0,319.08,37.81,463.57,'EPSG','9001',-6.2970588,1.2903926,5.712916338,'EPSG','9104',10.819,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108145_USAGE','helmert_transformation','ESRI','108145','EPSG','1352','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108146','NGO_1948_Oslo_To_ETRS_1989_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4817','EPSG','4258',3.0,278.3,93.0,474.5,'EPSG','9001',7.889,0.05,-6.61,'EPSG','9104',6.21,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108146_USAGE','helmert_transformation','ESRI','108146','EPSG','1352','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108147','NGO_1948_Oslo_To_WGS_1984_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4817','EPSG','4326',3.0,278.3,93.0,474.5,'EPSG','9001',7.889,0.05,-6.61,'EPSG','9104',6.21,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108147_USAGE','helmert_transformation','ESRI','108147','EPSG','1352','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108148','NAD_1983_CORS96_To_NAD_1983_HARN',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6783','EPSG','4152',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108148_USAGE','helmert_transformation','ESRI','108148','EPSG','1324','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108149','NAD_1983_CORS96_To_NAD_1983_NSRS2007',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6783','EPSG','4759',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108149_USAGE','helmert_transformation','ESRI','108149','EPSG','1324','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108150','ITRF_2000_To_NAD_1983_CORS96',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8997','EPSG','6783',0.1,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108150_USAGE','helmert_transformation','ESRI','108150','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108151','WGS_1984_(ITRF00)_To_NAD_1983_CORS96',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','6783',0.1,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108151_USAGE','helmert_transformation','ESRI','108151','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108153','Datum_73_To_WGS_1984_2009_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4274','EPSG','4326',0.4,-230.994,102.591,25.199,'EPSG','9001',0.633,-0.239,0.9,'EPSG','9104',1.95,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108153_USAGE','helmert_transformation','ESRI','108153','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108155','Datum_73_To_WGS_1984_2009_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4274','EPSG','4326',0.9,-223.15,110.132,36.711,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108155_USAGE','helmert_transformation','ESRI','108155','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108156','Datum_Lisboa_Hayford_To_ETRS_1989_2009_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','104106','EPSG','4258',1.5,-283.088,-70.693,117.445,'EPSG','9001',-1.157,0.059,-0.652,'EPSG','9104',-4.058,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108156_USAGE','helmert_transformation','ESRI','108156','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108157','Datum_Lisboa_Hayford_To_WGS_1984_2009_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','104106','EPSG','4326',1.5,-283.088,-70.693,117.445,'EPSG','9001',-1.157,0.059,-0.652,'EPSG','9104',-4.058,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108157_USAGE','helmert_transformation','ESRI','108157','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108158','Datum_Lisboa_Hayford_To_ETRS_1989_2009_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104106','EPSG','4258',1.7,-303.861,-60.693,103.607,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108158_USAGE','helmert_transformation','ESRI','108158','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108159','Datum_Lisboa_Hayford_To_WGS_1984_2009_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104106','EPSG','4326',1.7,-303.861,-60.693,103.607,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108159_USAGE','helmert_transformation','ESRI','108159','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108160','Porto_Santo_1936_To_PTRA08_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4615','EPSG','5013',0.05,-160.41,-21.066,-99.282,'EPSG','9001',2.437,-17.25,-7.446,'EPSG','9104',0.168,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108160_USAGE','helmert_transformation','ESRI','108160','EPSG','1314','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108161','Porto_Santo_1936_To_PTRA08_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4615','EPSG','5013',0.05,-303.956,224.556,214.306,'EPSG','9001',9.405,-6.626,-12.583,'EPSG','9104',1.327,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108161_USAGE','helmert_transformation','ESRI','108161','EPSG','3679','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108162','Porto_Santo_1936_To_PTRA08_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4615','EPSG','5013',0.002,-494.088,-312.129,279.877,'EPSG','9001',-1.423,-1.013,1.59,'EPSG','9104',-0.748,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108162_USAGE','helmert_transformation','ESRI','108162','EPSG','3680','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108163','Porto_Santo_1936_To_PTRA08_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','5013',0.3,-503.229,-247.375,312.582,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108163_USAGE','helmert_transformation','ESRI','108163','EPSG','1314','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108164','Porto_Santo_1936_To_PTRA08_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','5013',0.14,-503.174,-247.255,312.316,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108164_USAGE','helmert_transformation','ESRI','108164','EPSG','3679','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108165','Porto_Santo_1936_To_PTRA08_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','5013',0.12,-503.3,-247.574,313.025,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108165_USAGE','helmert_transformation','ESRI','108165','EPSG','3680','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108166','Porto_Santo_1936_To_WGS_1984_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4615','EPSG','4326',0.1,-160.41,-21.066,-99.282,'EPSG','9001',2.437,-17.25,-7.446,'EPSG','9104',0.168,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108166_USAGE','helmert_transformation','ESRI','108166','EPSG','1314','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108167','Porto_Santo_1936_To_WGS_1984_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4615','EPSG','4326',0.1,-303.956,224.556,214.306,'EPSG','9001',9.405,-6.626,-12.583,'EPSG','9104',1.327,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108167_USAGE','helmert_transformation','ESRI','108167','EPSG','3679','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108168','Porto_Santo_1936_To_WGS_1984_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4615','EPSG','4326',0.01,-494.088,-312.129,279.877,'EPSG','9001',-1.423,-1.013,1.59,'EPSG','9104',-0.748,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108168_USAGE','helmert_transformation','ESRI','108168','EPSG','3680','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108169','Porto_Santo_1936_To_WGS_1984_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','4326',0.5,-503.229,-247.375,312.582,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108169_USAGE','helmert_transformation','ESRI','108169','EPSG','1314','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108170','Porto_Santo_1936_To_WGS_1984_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','4326',0.3,-503.174,-247.255,312.316,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108170_USAGE','helmert_transformation','ESRI','108170','EPSG','3679','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108171','Porto_Santo_1936_To_WGS_1984_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','4326',0.3,-503.3,-247.574,313.025,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108171_USAGE','helmert_transformation','ESRI','108171','EPSG','3680','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108172','Sao_Braz_To_PTRA08_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37249','EPSG','5013',0.025,-269.089,186.247,155.667,'EPSG','9001',2.005,3.606,-0.366,'EPSG','9104',0.097,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108172_USAGE','helmert_transformation','ESRI','108172','EPSG','1345','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108173','Sao_Braz_To_PTRA08_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37249','EPSG','5013',0.03,-249.507,179.302,119.92,'EPSG','9001',1.406,2.423,-0.479,'EPSG','9104',0.952,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108173_USAGE','helmert_transformation','ESRI','108173','EPSG','2871','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','181','Azores - Santa Maria Island','Azores - Santa Maria Island',36.9,37.1,-25.25,-24.95,0); INSERT INTO "helmert_transformation" VALUES('ESRI','108174','Sao_Braz_To_PTRA08_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37249','EPSG','5013',0.01,-440.296,58.548,296.265,'EPSG','9001',1.128,10.202,4.559,'EPSG','9104',-0.438,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108174_USAGE','helmert_transformation','ESRI','108174','ESRI','181','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108175','Sao_Braz_To_PTRA08_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37249','EPSG','5013',0.8,-204.926,140.353,55.063,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108175_USAGE','helmert_transformation','ESRI','108175','EPSG','1345','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108176','Sao_Braz_To_PTRA08_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37249','EPSG','5013',0.8,-204.519,140.159,55.404,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108176_USAGE','helmert_transformation','ESRI','108176','EPSG','2871','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108177','Sao_Braz_To_PTRA08_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37249','EPSG','5013',0.8,-205.808,140.771,54.326,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108177_USAGE','helmert_transformation','ESRI','108177','ESRI','181','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108178','Sao_Braz_To_WGS_1984_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37249','EPSG','4326',0.035,-269.089,186.247,155.667,'EPSG','9001',2.005,3.606,-0.366,'EPSG','9104',0.097,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108178_USAGE','helmert_transformation','ESRI','108178','EPSG','1345','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108179','Sao_Braz_To_WGS_1984_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37249','EPSG','4326',0.04,-249.507,179.302,119.92,'EPSG','9001',1.406,2.423,-0.479,'EPSG','9104',0.952,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108179_USAGE','helmert_transformation','ESRI','108179','EPSG','2871','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108180','Sao_Braz_To_WGS_1984_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37249','EPSG','4326',0.03,-440.296,58.548,296.265,'EPSG','9001',1.128,10.202,4.559,'EPSG','9104',-0.438,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108180_USAGE','helmert_transformation','ESRI','108180','ESRI','181','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108181','Sao_Braz_To_WGS_1984_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37249','EPSG','4326',0.9,-204.926,140.353,55.063,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108181_USAGE','helmert_transformation','ESRI','108181','EPSG','1345','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108182','Sao_Braz_To_WGS_1984_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37249','EPSG','4326',0.9,-204.519,140.159,55.404,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108182_USAGE','helmert_transformation','ESRI','108182','EPSG','2871','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108183','Sao_Braz_To_WGS_1984_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37249','EPSG','4326',0.9,-205.808,140.771,54.326,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108183_USAGE','helmert_transformation','ESRI','108183','ESRI','181','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108184','Graciosa_1948_To_PTRA08_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','5013',0.18,-185.391,122.266,35.989,'EPSG','9001',0.12,3.18,2.046,'EPSG','9104',-1.053,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108184_USAGE','helmert_transformation','ESRI','108184','EPSG','1301','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108185','Graciosa_1948_To_PTRA08_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','5013',0.005,-76.822,257.457,-12.817,'EPSG','9001',2.136,-0.033,-2.392,'EPSG','9104',-0.031,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108185_USAGE','helmert_transformation','ESRI','108185','EPSG','2873','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108186','Graciosa_1948_To_PTRA08_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','5013',0.004,-210.371,49.768,0.808,'EPSG','9001',-2.036,3.046,3.709,'EPSG','9104',0.934,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108186_USAGE','helmert_transformation','ESRI','108186','EPSG','3681','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108187','Graciosa_1948_To_PTRA08_4_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','5013',0.4,-364.422,243.651,274.822,'EPSG','9001',5.477,12.092,1.538,'EPSG','9104',2.243,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108187_USAGE','helmert_transformation','ESRI','108187','EPSG','2874','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108188','Graciosa_1948_To_PTRA08_5_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','5013',0.007,-201.545,109.048,32.218,'EPSG','9001',-0.286,3.471,2.443,'EPSG','9104',0.309,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108188_USAGE','helmert_transformation','ESRI','108188','EPSG','2875','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108189','Graciosa_1948_To_PTRA08_6_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','5013',0.005,-216.355,107.044,48.015,'EPSG','9001',-0.204,4.158,2.605,'EPSG','9104',0.297,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108189_USAGE','helmert_transformation','ESRI','108189','EPSG','2872','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108190','WGS_1984_(ITRF00)_To_NAD_1983',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','4269',0.1,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108190_USAGE','helmert_transformation','ESRI','108190','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108192','DHDN_To_ETRF_1989',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4314','EPSG','9059',5.0,582.0,105.0,414.0,'EPSG','9001',-1.04,-0.35,3.08,'EPSG','9104',8.3,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108192_USAGE','helmert_transformation','ESRI','108192','EPSG','2326','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108193','ED_1950_To_ETRF_1989_1',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','9059',1.0,-116.641,-56.931,-110.559,'EPSG','9001',0.893,0.921,-0.917,'EPSG','9104',-3.52,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108193_USAGE','helmert_transformation','ESRI','108193','EPSG','2601','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108194','Estonia_1992_To_ETRF_1989',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4133','EPSG','9059',0.1,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108194_USAGE','helmert_transformation','ESRI','108194','EPSG','3246','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108195','ETRF_1989_To_WGS_1984',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','9059','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108195_USAGE','helmert_transformation','ESRI','108195','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108196','Hungarian_1972_To_ETRF_1989_1',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','9059',1.0,56.0,-75.77,-15.31,'EPSG','9001',0.37,0.2,0.21,'EPSG','9104',1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108196_USAGE','helmert_transformation','ESRI','108196','EPSG','1119','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108197','IRENET95_To_ETRF_1989',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4173','EPSG','9059',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108197_USAGE','helmert_transformation','ESRI','108197','EPSG','1305','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108199','RGF_1993_To_ETRF_1989_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4171','EPSG','9059',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108199_USAGE','helmert_transformation','ESRI','108199','EPSG','1096','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108201','NGO_1948_To_WGS_1984',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4273','EPSG','4326',5.0,319.08,37.81,463.57,'EPSG','9001',-6.2970588,1.2903926,5.712916338,'EPSG','9104',10.819,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108201_USAGE','helmert_transformation','ESRI','108201','EPSG','1352','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108202','S_JTSK_To_Pulkovo_1942',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4284',1.0,544.8,206.7,540.8,'EPSG','9001',4.998,1.587,5.261,'EPSG','9104',3.56,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108202_USAGE','helmert_transformation','ESRI','108202','EPSG','1079','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108206','DHDN_To_WGS_1984_3x',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326',0.1,597.1,71.4,412.1,'EPSG','9001',0.894,0.068,-1.563,'EPSG','9104',7.58,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108206_USAGE','helmert_transformation','ESRI','108206','EPSG','2543','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108207','DHDN_To_WGS_1984_4x',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326',0.1,584.8,67.0,400.3,'EPSG','9001',0.105,0.013,-2.378,'EPSG','9104',10.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108207_USAGE','helmert_transformation','ESRI','108207','EPSG','2542','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108208','DHDN_To_WGS_1984_5x',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326',0.1,590.5,69.5,411.6,'EPSG','9001',-0.796,-0.052,-3.601,'EPSG','9104',8.3,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108208_USAGE','helmert_transformation','ESRI','108208','EPSG','2541','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108209','DHDN_To_WGS_1984_6x',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326',0.1,599.4,72.4,419.2,'EPSG','9001',-0.062,-0.022,-2.723,'EPSG','9104',6.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108209_USAGE','helmert_transformation','ESRI','108209','EPSG','2544','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108210','DHDN_To_WGS_1984_7x',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326',0.1,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108210_USAGE','helmert_transformation','ESRI','108210','EPSG','2545','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108211','WGS_1984_To_Observatorio_Meteorologico_1965_1',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','ESRI','104126',NULL,148.635396,339.470115,157.265381,'EPSG','9001',32.87685,-76.963371,-32.622853,'EPSG','9104',-8.204889,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108211_USAGE','helmert_transformation','ESRI','108211','EPSG','1147','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108212','SWEREF99_To_RT90',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4619','EPSG','4124',NULL,-414.1055246174168,-41.3265500041888,-603.0582474221075,'EPSG','9001',-0.8551163376151379,2.141317405481035,-7.022729828586432,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108212_USAGE','helmert_transformation','ESRI','108212','EPSG','1225','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108213','WGS_1984_To_RT90',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','4124',NULL,-414.0978567149,-41.3381489658,-603.0627177516,'EPSG','9001',-0.8550434314,2.1413465185,-7.0227209516,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108213_USAGE','helmert_transformation','ESRI','108213','EPSG','1225','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','182','Iceland - NADCON','Iceland - NADCON',63.2700005,66.6600003,-24.6499996,-13.2499999,0); INSERT INTO "grid_transformation" VALUES('ESRI','108214','ISN_1993_To_ISN_2004',NULL,'EPSG','9615','NTv2','EPSG','4659','EPSG','5324',0.05,'EPSG','8656','Latitude and longitude difference file','icegrid2004',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108214_USAGE','grid_transformation','ESRI','108214','ESRI','182','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108216','ISN_2004_To_ISN_1993',NULL,'EPSG','9615','NTv2','EPSG','5324','EPSG','4659',0.05,'EPSG','8656','Latitude and longitude difference file','ICEGRID93',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108216_USAGE','grid_transformation','ESRI','108216','ESRI','182','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108217','La_Canoa_To_SIRGAS',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4247','EPSG','4170',15.0,-270.933,115.599,-360.226,'EPSG','9001',-5.266,-1.238,2.381,'EPSG','9104',-5.109,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2464351.594,-5783466.613,974809.808,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108217_USAGE','helmert_transformation','ESRI','108217','EPSG','3327','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108220','Palestine_1923_To_WGS_1984_1X',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4281','EPSG','4326',1.5,-181.0,-122.0,225.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108220_USAGE','helmert_transformation','ESRI','108220','EPSG','1356','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108222','Datum_Lisboa_Hayford_To_Datum_73_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104106','EPSG','4274',5.0,-80.809,-170.77,66.991,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108222_USAGE','helmert_transformation','ESRI','108222','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108223','Datum_Lisboa_Hayford_To_Datum_73_2',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104106','EPSG','4274',5.0,-49.137,-179.924,95.757,'EPSG','9001',1.955,-0.328,1.423,'EPSG','9104',-6.827,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108223_USAGE','helmert_transformation','ESRI','108223','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108224','Datum_Lisboa_Hayford_To_Datum_Lisboa_Bessel_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104106','ESRI','104105',5.0,-812.134,130.465,-461.583,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108224_USAGE','helmert_transformation','ESRI','108224','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108225','Datum_Lisboa_Hayford_To_Datum_Lisboa_Bessel_2',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104106','ESRI','104105',5.0,-920.281,-25.191,-355.2,'EPSG','9001',2.781,-4.855,-4.276,'EPSG','9104',-0.168,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108225_USAGE','helmert_transformation','ESRI','108225','EPSG','1294','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108226','EUREF_FIN_To_ETRS_1989',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104129','EPSG','4258',1.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108226_USAGE','helmert_transformation','ESRI','108226','EPSG','1095','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108227','EUREF_FIN_To_WGS_1984',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104129','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108227_USAGE','helmert_transformation','ESRI','108227','EPSG','1095','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108229','KKJ_To_EUREF_FIN',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4123','ESRI','104129',1.0,-96.0617,-82.4278,-121.7535,'EPSG','9001',-4.80107,-0.34543,1.37646,'EPSG','9104',1.4964,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108229_USAGE','helmert_transformation','ESRI','108229','EPSG','3333','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108232','Palestine_1923_To_WGS_1984_2X',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4281','EPSG','4326',NULL,-219.247,-73.802,269.529,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108232_USAGE','helmert_transformation','ESRI','108232','EPSG','2602','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108233','Jordan_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104130','EPSG','4326',NULL,-86.0,-98.0,-119.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108233_USAGE','helmert_transformation','ESRI','108233','EPSG','1130','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108234','Observatorio_Meteorologico_1965_To_WGS_1984_2',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','ESRI','104126','EPSG','4326',NULL,-203.35,-302.66,-155.23,'EPSG','9001',-33.338,76.825,32.412,'EPSG','9104',7.926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-2361564.77,5417538.39,2391581.09,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108234_USAGE','helmert_transformation','ESRI','108234','EPSG','1147','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108235','WGS_1984_To_Observatorio_Meteorologico_1965_2',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4326','ESRI','104126',NULL,203.35,302.66,155.23,'EPSG','9001',33.326,-76.831,-32.4,'EPSG','9104',-7.926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-2361768.11,5417235.73,2391425.86,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108235_USAGE','helmert_transformation','ESRI','108235','EPSG','1147','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108237','Amersfoort_To_WGS_1984_4X',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4289','EPSG','4326',0.75,593.0297,26.0038,478.7534,'EPSG','9001',0.4068573303223975,-0.3507326765425626,1.870347383606796,'EPSG','9104',4.0812,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3903453.1482,368135.3134,5012970.3051,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108237_USAGE','helmert_transformation','ESRI','108237','EPSG','1275','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108240','Graciosa_1948_To_PTRA08_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','5013',0.19,-105.679,166.1,-37.322,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108240_USAGE','helmert_transformation','ESRI','108240','EPSG','1301','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108241','Graciosa_1948_To_PTRA08_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','5013',0.068,-105.377,165.769,-36.965,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108241_USAGE','helmert_transformation','ESRI','108241','EPSG','2873','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108242','Graciosa_1948_To_PTRA08_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','5013',0.064,-105.359,165.804,-37.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108242_USAGE','helmert_transformation','ESRI','108242','EPSG','3681','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108243','Graciosa_1948_To_PTRA08_4_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','5013',0.1,-105.531,166.39,-37.326,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108243_USAGE','helmert_transformation','ESRI','108243','EPSG','2874','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108244','Graciosa_1948_To_PTRA08_5_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','5013',0.7,-105.756,165.972,-37.313,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108244_USAGE','helmert_transformation','ESRI','108244','EPSG','2875','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108245','Graciosa_1948_To_PTRA08_6_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','5013',0.07,-106.235,166.236,-37.768,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108245_USAGE','helmert_transformation','ESRI','108245','EPSG','2872','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108246','Graciosa_1948_To_WGS_1984_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','4326',0.5,-185.391,122.266,35.989,'EPSG','9001',0.12,3.18,2.046,'EPSG','9104',-1.053,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108246_USAGE','helmert_transformation','ESRI','108246','EPSG','1301','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108247','Graciosa_1948_To_WGS_1984_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','4326',0.01,-76.822,257.457,-12.817,'EPSG','9001',2.136,-0.033,-2.392,'EPSG','9104',-0.031,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108247_USAGE','helmert_transformation','ESRI','108247','EPSG','2873','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108248','Graciosa_1948_To_WGS_1984_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','4326',0.01,-210.371,49.768,0.808,'EPSG','9001',-2.036,3.046,3.709,'EPSG','9104',0.934,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108248_USAGE','helmert_transformation','ESRI','108248','EPSG','3681','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108249','Graciosa_1948_To_WGS_1984_4_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','4326',0.5,-364.422,243.651,274.822,'EPSG','9001',5.477,12.092,1.538,'EPSG','9104',2.243,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108249_USAGE','helmert_transformation','ESRI','108249','EPSG','2874','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108250','Graciosa_1948_To_WGS_1984_5_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','4326',0.01,-201.545,109.048,32.218,'EPSG','9001',-0.286,3.471,2.443,'EPSG','9104',0.309,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108250_USAGE','helmert_transformation','ESRI','108250','EPSG','2875','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108251','Graciosa_1948_To_WGS_1984_6_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37241','EPSG','4326',0.01,-216.355,107.044,48.015,'EPSG','9001',-0.204,4.158,2.605,'EPSG','9104',0.297,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108251_USAGE','helmert_transformation','ESRI','108251','EPSG','2872','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108259','DOS_1968_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37218','EPSG','4326',44.0,230.0,-199.0,-752.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108259_USAGE','helmert_transformation','ESRI','108259','EPSG','3198','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108261','Estonia_1937_To_WGS_1984_NGA',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104101','EPSG','4326',4.7,374.0,150.0,588.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108261_USAGE','helmert_transformation','ESRI','108261','EPSG','1090','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108262','Fort_Thomas_1955_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37240','EPSG','4326',44.0,-7.0,215.0,225.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108262_USAGE','helmert_transformation','ESRI','108262','EPSG','1200','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108263','GUX_1_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37221','EPSG','4326',44.0,252.0,-209.0,-751.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108263_USAGE','helmert_transformation','ESRI','108263','EPSG','3197','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108264','Hermannskogel_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104102','EPSG','4326',NULL,682.0,-203.0,480.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108264_USAGE','helmert_transformation','ESRI','108264','EPSG','2370','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108265','Voirol_Unifie_1960_Grad_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','4305','EPSG','4326',44.0,-123.0,-206.0,219.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108265_USAGE','helmert_transformation','ESRI','108265','EPSG','1365','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108269','South_Asia_Singapore_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37207','EPSG','4326',NULL,7.0,-10.0,-26.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108269_USAGE','helmert_transformation','ESRI','108269','EPSG','1210','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108272','Estonia_1937_To_ETRS_1989',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104101','EPSG','4258',0.1,372.87,149.23,585.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108272_USAGE','helmert_transformation','ESRI','108272','EPSG','1090','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108276','D48_To_ETRS_1989',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','104131','EPSG','4258',3.0,426.62,142.62,460.09,'EPSG','9001',4.98,4.49,-12.42,'EPSG','9104',-17.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108276_USAGE','helmert_transformation','ESRI','108276','EPSG','1212','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108277','D48_To_WGS_1984',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','104131','EPSG','4326',3.0,426.62,142.62,460.09,'EPSG','9001',4.98,4.49,-12.42,'EPSG','9104',-17.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108277_USAGE','helmert_transformation','ESRI','108277','EPSG','1212','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108278','Voirol_1875_Grad_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104139','EPSG','4326',44.0,-73.0,-247.0,227.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108278_USAGE','helmert_transformation','ESRI','108278','EPSG','1365','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108280','ITRF_2000_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8997','EPSG','4326',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108280_USAGE','helmert_transformation','ESRI','108280','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108281','ITRF_2000_To_NAD_1983_HARN',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8997','EPSG','4152',0.1,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108281_USAGE','helmert_transformation','ESRI','108281','EPSG','1324','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108282','WGS_1984_(ITRF00)_To_NAD_1983_HARN',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','4152',0.1,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108282_USAGE','helmert_transformation','ESRI','108282','EPSG','1324','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108283','Ocotepeque_1935_To_WGS_1984_RN',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','5451','EPSG','4326',NULL,6.41,-49.05,-11.28,'EPSG','9001',1.5657,0.5242,6.9718,'EPSG','9104',-5.7649,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108283_USAGE','helmert_transformation','ESRI','108283','EPSG','3232','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108286','MONREF_1997_To_MSK_1942_1',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104134','ESRI','104135',NULL,78.0421780299,204.5186132514,77.449861533,'EPSG','9001',-1.7736709695,3.3197917322,-1.0426077127,'EPSG','9104',-4.95105766,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108286_USAGE','helmert_transformation','ESRI','108286','EPSG','1164','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108287','MONREF_1997_To_MSK_1942_2',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104134','ESRI','104135',NULL,-12.6212134867,138.667639968,73.9961390849,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108287_USAGE','helmert_transformation','ESRI','108287','EPSG','1164','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108288','MONREF_1997_To_Pulkovo_1942_1',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','ESRI','104134','EPSG','4284',NULL,78.0421780299,204.5186132514,77.449861533,'EPSG','9001',-1.7736709695,3.3197917322,-1.0426077127,'EPSG','9104',-4.95105766,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108288_USAGE','helmert_transformation','ESRI','108288','EPSG','1164','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108289','MONREF_1997_To_Pulkovo_1942_2',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104134','EPSG','4284',NULL,-12.6212134867,138.667639968,73.9961390849,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108289_USAGE','helmert_transformation','ESRI','108289','EPSG','1164','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108290','MAGNA_To_SIRGAS',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4686','EPSG','4170',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108290_USAGE','helmert_transformation','ESRI','108290','EPSG','1070','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108292','Graciosa_1948_To_WGS_1984_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','4326',0.3,-105.679,166.1,-37.322,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108292_USAGE','helmert_transformation','ESRI','108292','EPSG','1301','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108293','Graciosa_1948_To_WGS_1984_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','4326',0.2,-105.377,165.769,-36.965,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108293_USAGE','helmert_transformation','ESRI','108293','EPSG','2873','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108294','Graciosa_1948_To_WGS_1984_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','4326',0.1,-105.359,165.804,-37.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108294_USAGE','helmert_transformation','ESRI','108294','EPSG','3681','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108295','Graciosa_1948_To_WGS_1984_4_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','4326',0.3,-105.531,166.39,-37.326,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108295_USAGE','helmert_transformation','ESRI','108295','EPSG','2874','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108296','Graciosa_1948_To_WGS_1984_5_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','4326',0.9,-105.756,165.972,-37.313,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108296_USAGE','helmert_transformation','ESRI','108296','EPSG','2875','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108297','Graciosa_1948_To_WGS_1984_6_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37241','EPSG','4326',0.2,-106.235,166.236,-37.768,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108297_USAGE','helmert_transformation','ESRI','108297','EPSG','2872','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108299','Guam_1963_To_WGS_1984_Saipan',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4675','EPSG','4326',NULL,59.935,118.4,-10.871,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108299_USAGE','helmert_transformation','ESRI','108299','ESRI','179','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108300','NAD_1983_HARN_To_WGS_1984_Saipan',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4152','EPSG','4326',NULL,1.2,0.4,0.55,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108300_USAGE','helmert_transformation','ESRI','108300','ESRI','179','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108302','ATS_1977_To_NAD_1983_CSRS_NTv2_Maritimes',NULL,'EPSG','9615','NTv2','EPSG','4122','EPSG','4617',NULL,'EPSG','8656','Latitude and longitude difference file','canada/GS7783',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108302_USAGE','grid_transformation','ESRI','108302','EPSG','1283','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108303','Pohnpei_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104109','EPSG','4326',NULL,-89.121,-348.182,260.871,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108303_USAGE','helmert_transformation','ESRI','108303','EPSG','1161','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','183','Pacific - USA interests Pacific and Mariana plates','Pacific - USA interests Pacific and Mariana plates',-17.56,31.8,129.48,-151.27,0); INSERT INTO "helmert_transformation" VALUES('ESRI','108307','NAD_1983_HARN_PACP00_MARP00_To_WGS_1984',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4152','EPSG','4326',NULL,-0.9102,2.0141,0.5602,'EPSG','9001',-0.029039,-0.010065,-0.010101,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108307_USAGE','helmert_transformation','ESRI','108307','ESRI','183','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108330','Old_Hawaiian_Intl_1924_To_WGS_1984_Mean',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104138','EPSG','4326',38.0,201.0,-228.0,-346.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108330_USAGE','helmert_transformation','ESRI','108330','EPSG','1334','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108331','Old_Hawaiian_Intl_1924_To_WGS_1984_Hawaii',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104138','EPSG','4326',44.0,229.0,-222.0,-348.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108331_USAGE','helmert_transformation','ESRI','108331','EPSG','1546','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108332','Old_Hawaiian_Intl_1924_To_WGS_1984_Kauai',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104138','EPSG','4326',35.0,185.0,-233.0,-337.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108332_USAGE','helmert_transformation','ESRI','108332','EPSG','1549','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108333','Old_Hawaiian_Intl_1924_To_WGS_1984_Maui',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104138','EPSG','4326',44.0,205.0,-233.0,-355.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108333_USAGE','helmert_transformation','ESRI','108333','EPSG','1547','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108334','Old_Hawaiian_Intl_1924_To_WGS_1984_Oahu',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104138','EPSG','4326',14.0,198.0,-226.0,-347.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108334_USAGE','helmert_transformation','ESRI','108334','EPSG','1548','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108335','ED_1950_To_WGS_1984_NGA_7PAR',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4230','EPSG','4326',10.0,-102.0,-102.0,-129.0,'EPSG','9001',0.413,-0.184,0.385,'EPSG','9104',2.4664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108335_USAGE','helmert_transformation','ESRI','108335','EPSG','2420','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108336','OSGB_1936_To_WGS_1984_NGA_7PAR',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4277','EPSG','4326',21.0,446.0,-99.0,544.0,'EPSG','9001',-0.945,-0.261,-0.435,'EPSG','9104',-20.8927,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108336_USAGE','helmert_transformation','ESRI','108336','EPSG','1264','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108337','Hong_Kong_1980_To_ITRF_1996',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4611','EPSG','8995',1.0,-162.619,-276.959,-161.764,'EPSG','9001',-0.067753,2.243648,1.158828,'EPSG','9104',-1.094246,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108337_USAGE','helmert_transformation','ESRI','108337','EPSG','1118','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108341','Observatorio_Meteorologico_1939_To_PTRA08_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37245','EPSG','5013',0.03,-487.978,-226.275,102.787,'EPSG','9001',-0.743,1.677,2.087,'EPSG','9104',1.485,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108341_USAGE','helmert_transformation','ESRI','108341','EPSG','1344','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','184','Azores - Flores Island','Azores - Flores Island',39.35,39.5,-31.3,-31.1,0); INSERT INTO "helmert_transformation" VALUES('ESRI','108342','Observatorio_Meteorologico_1939_To_PTRA08_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37245','EPSG','5013',0.02,-511.151,-181.269,139.609,'EPSG','9001',1.05,2.703,1.798,'EPSG','9104',3.071,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108342_USAGE','helmert_transformation','ESRI','108342','ESRI','184','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108343','Observatorio_Meteorologico_1939_To_PTRA08_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37245','EPSG','5013',0.07,-1333.976,-487.235,945.031,'EPSG','9001',6.674,35.963,20.438,'EPSG','9104',-11.187,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108343_USAGE','helmert_transformation','ESRI','108343','EPSG','3685','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108344','Observatorio_Meteorologico_1939_To_PTRA08_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37245','EPSG','5013',0.06,-423.058,-172.868,83.772,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108344_USAGE','helmert_transformation','ESRI','108344','EPSG','1344','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108345','Observatorio_Meteorologico_1939_To_PTRA08_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37245','EPSG','5013',0.056,-423.053,-172.871,83.771,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108345_USAGE','helmert_transformation','ESRI','108345','ESRI','184','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108346','Observatorio_Meteorologico_1939_To_PTRA08_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37245','EPSG','5013',0.064,-423.024,-172.923,83.83,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108346_USAGE','helmert_transformation','ESRI','108346','EPSG','3685','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108347','Observatorio_Meteorologico_1939_To_WGS_1984_1_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37245','EPSG','4326',0.06,-487.978,-226.275,102.787,'EPSG','9001',-0.743,1.677,2.087,'EPSG','9104',1.485,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108347_USAGE','helmert_transformation','ESRI','108347','EPSG','1344','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108348','Observatorio_Meteorologico_1939_To_WGS_1984_2_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37245','EPSG','4326',0.05,-511.151,-181.269,139.609,'EPSG','9001',1.05,2.703,1.798,'EPSG','9104',3.071,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108348_USAGE','helmert_transformation','ESRI','108348','ESRI','184','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108349','Observatorio_Meteorologico_1939_To_WGS_1984_3_7par',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','ESRI','37245','EPSG','4326',0.1,-1333.976,-487.235,945.031,'EPSG','9001',6.674,35.963,20.438,'EPSG','9104',-11.187,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108349_USAGE','helmert_transformation','ESRI','108349','EPSG','3685','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108350','Observatorio_Meteorologico_1939_To_WGS_1984_1_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37245','EPSG','4326',0.1,-423.058,-172.868,83.772,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108350_USAGE','helmert_transformation','ESRI','108350','EPSG','1344','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108351','Observatorio_Meteorologico_1939_To_WGS_1984_2_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37245','EPSG','4326',0.08,-423.053,-172.871,83.771,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108351_USAGE','helmert_transformation','ESRI','108351','ESRI','184','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108352','Observatorio_Meteorologico_1939_To_WGS_1984_3_3par',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','37245','EPSG','4326',0.085,-423.024,-172.923,83.83,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108352_USAGE','helmert_transformation','ESRI','108352','EPSG','3685','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108353','ITRF_2000_To_NAD_1983_2011',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8997','EPSG','6318',0.1,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108353_USAGE','helmert_transformation','ESRI','108353','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108354','WGS_1984_(ITRF00)_To_NAD_1983_2011',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','6318',0.1,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108354_USAGE','helmert_transformation','ESRI','108354','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108355','NAD_1983_HARN_To_NAD_1983_2011',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4152','EPSG','6318',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108355_USAGE','helmert_transformation','ESRI','108355','EPSG','1324','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108356','NAD_1983_NSRS2007_To_NAD_1983_2011',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4759','EPSG','6318',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108356_USAGE','helmert_transformation','ESRI','108356','EPSG','1324','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108357','NAD_1983_CORS96_To_NAD_1983_2011',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6783','EPSG','6318',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108357_USAGE','helmert_transformation','ESRI','108357','EPSG','1324','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108359','ED_1950_To_WGS_1984_NTv2_Catalonia',NULL,'EPSG','9615','NTv2','EPSG','4230','EPSG','4326',0.05,'EPSG','8656','Latitude and longitude difference file','spain/100800401',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108359_USAGE','grid_transformation','ESRI','108359','EPSG','3732','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108360','ITRF_2008_To_NAD_1983_2011',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8999','EPSG','6318',0.03,0.99343,-1.90331,-0.52655,'EPSG','9001',0.02591467,0.00942645,0.01159935,'EPSG','9104',0.00171504,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108360_USAGE','helmert_transformation','ESRI','108360','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108361','ITRF_2008_To_NAD_1983_MA11',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8999','EPSG','6325',0.05,0.908,-2.0161,-0.5653,'EPSG','9001',0.028971,0.01042,0.008928,'EPSG','9104',0.0011,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108361_USAGE','helmert_transformation','ESRI','108361','EPSG','4167','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108362','ITRF_2008_To_NAD_1983_PA11',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8999','EPSG','6322',0.05,0.908,-2.0161,-0.5653,'EPSG','9001',0.027741,0.013469,0.002712,'EPSG','9104',0.0011,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108362_USAGE','helmert_transformation','ESRI','108362','EPSG','4162','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108363','WGS_1984_(ITRF08)_To_NAD_1983_2011',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','6318',0.03,0.99343,-1.90331,-0.52655,'EPSG','9001',0.02591467,0.00942645,0.01159935,'EPSG','9104',0.00171504,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108363_USAGE','helmert_transformation','ESRI','108363','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108364','WGS_1984_(ITRF08)_To_NAD_1983_MA11',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','6325',0.05,0.908,-2.0161,-0.5653,'EPSG','9001',0.028971,0.01042,0.008928,'EPSG','9104',0.0011,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108364_USAGE','helmert_transformation','ESRI','108364','EPSG','4167','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108365','WGS_1984_(ITRF08)_To_NAD_1983_PA11',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','6322',0.05,0.908,-2.0161,-0.5653,'EPSG','9001',0.027741,0.013469,0.002712,'EPSG','9104',0.0011,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108365_USAGE','helmert_transformation','ESRI','108365','ESRI','4','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108366','WGS_1984_To_Ain_El_Abd_1970_MB',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4326','EPSG','4204',0.1,151.9082,251.0907,-0.2276,'EPSG','9001',-0.91646,-1.0469,3.21042,'EPSG','9104',-5.2723,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3641909.2287,4425312.2897,2789434.9636,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108366_USAGE','helmert_transformation','ESRI','108366','EPSG','1040','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108367','GGD_To_Pulkovo_1942',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','ESRI','104022','EPSG','4284',0.11,-15.626,126.0343,79.3775,'EPSG','9001',-1.2753,-1.42112,2.69445,'EPSG','9104',4.5284,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3445619.6689,3275369.7555,4236015.9558,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108367_USAGE','helmert_transformation','ESRI','108367','EPSG','3251','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108368','GGD_To_ITRF_1993',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','ESRI','104022','EPSG','8993',0.03,0.3452,-0.1805,-0.206,'EPSG','9001',-0.05465,0.06718,-0.06143,'EPSG','9104',0.0181,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3419202.2774,3284301.1262,4251887.7897,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108368_USAGE','helmert_transformation','ESRI','108368','EPSG','3251','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108369','CH1903+_To_ETRS_1989_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4150','EPSG','4258',0.1,'EPSG','8656','Latitude and longitude difference file','switzerland/ntv2-ch03p-etrs',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108369_USAGE','grid_transformation','ESRI','108369','EPSG','1286','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108370','CH1903+_To_CHTRF95_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4150','EPSG','4151',0.1,'EPSG','8656','Latitude and longitude difference file','switzerland/ntv2-ch03p-etrs',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108370_USAGE','grid_transformation','ESRI','108370','EPSG','1286','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108371','ONGD17_To_ITRF_1989',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9294','EPSG','8989',0.1,1.16835,-1.42001,-2.24431,'EPSG','9001',0.00822,0.05508,-0.01818,'EPSG','9104',0.23388,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108371_USAGE','helmert_transformation','ESRI','108371','EPSG','1183','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108372','ONGD17_To_WGS_1984',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9294','EPSG','4326',0.1,1.16835,-1.42001,-2.24431,'EPSG','9001',0.00822,0.05508,-0.01818,'EPSG','9104',0.23388,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108372_USAGE','helmert_transformation','ESRI','108372','EPSG','1183','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108374','Dealul_Piscului_1970_To_WGS_1984_3X',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4317','EPSG','4326',3.0,2.3287,-147.0425,-92.0802,'EPSG','9001',0.3092483,-0.32482185,-0.49729934,'EPSG','9104',5.68906266,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108374_USAGE','helmert_transformation','ESRI','108374','EPSG','1197','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108375','Dealul_Piscului_1970_To_ETRS_1989_1X',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4317','EPSG','4258',3.0,2.3287,-147.0425,-92.0802,'EPSG','9001',0.3092483,-0.32482185,-0.49729934,'EPSG','9104',5.68906266,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108375_USAGE','helmert_transformation','ESRI','108375','EPSG','1197','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108376','Barbados_1938_To_WGS_1984_2X',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4212','EPSG','4326',0.15,-267.434,173.496,181.814,'EPSG','9001',13.4704,-8.7154,-7.3926,'EPSG','9104',14.7492,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108376_USAGE','helmert_transformation','ESRI','108376','EPSG','3218','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108377','NAD_1983_HARN_To_NAD_1983_MA11',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4152','EPSG','6325',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108377_USAGE','helmert_transformation','ESRI','108377','EPSG','4167','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108379','ITRF_2014_To_NAD83_2011_At_Epoch_2010.0_FE',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9000','EPSG','6318',NULL,1.0053,-1.90921,-0.54157,'EPSG','9001',26.78138,-0.42027,10.93206,'EPSG','1031',0.36891,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108379_USAGE','helmert_transformation','ESRI','108379','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108380','ITRF_2014_To_NAD83_PA11_At_Epoch_2010.0_FE',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9000','EPSG','6322',NULL,0.9109,-2.0129,-0.5863,'EPSG','9001',22.749,26.56,-25.706,'EPSG','1031',2.12,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108380_USAGE','helmert_transformation','ESRI','108380','ESRI','4','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108381','ITRF_2014_To_NAD83_MA11_At_Epoch_2010.0_FE',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9000','EPSG','6325',NULL,0.9109,-2.0129,-0.5863,'EPSG','9001',28.711,11.785,4.417,'EPSG','1031',2.12,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108381_USAGE','helmert_transformation','ESRI','108381','EPSG','4167','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108382','NAD_1983_CSRS_To_NAD_1983_CSRS_v2_Quebec',NULL,'EPSG','9615','NTv2','EPSG','4617','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','canada/NA83SCRS',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108382_USAGE','grid_transformation','ESRI','108382','EPSG','1368','EPSG','1024'); INSERT INTO "extent" VALUES('ESRI','185','Australia - Lord Howe and Norfolk Islands onshore','Australia - Lord Howe and Norfolk Islands onshore',-32.3333,-28.6333,158.8,168.3333,0); INSERT INTO "grid_transformation" VALUES('ESRI','108440','WGS_1984_To_GDA2020_NTv2_CPD_plus_Lord_Howe_Norfolk',NULL,'EPSG','9615','NTv2','EPSG','4326','EPSG','7844',3.2,'EPSG','8656','Latitude and longitude difference file','australia/gda94_gda2020_CPD_plus_lordhowe_norfolk',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108440_USAGE','grid_transformation','ESRI','108440','ESRI','185','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108441','GDA_1994_To_WGS_1984_NTv2_CPD_plus_Lord_Howe_Norfolk',NULL,'EPSG','9615','NTv2','EPSG','4283','EPSG','4326',3.1,'EPSG','8656','Latitude and longitude difference file','australia/gda94_gda2020_CPD_plus_lordhowe_norfolk',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108441_USAGE','grid_transformation','ESRI','108441','ESRI','185','EPSG','1024'); INSERT INTO "other_transformation" VALUES('ESRI','108442','ATRF_2014_To_GDA2020_Null',NULL,'EPSG','9619','Geographic2D offsets','EPSG','9309','EPSG','7844',0.005,'EPSG','8601','Latitude offset',0,'EPSG','9104','EPSG','8602','Longitude offset',0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108442_USAGE','other_transformation','ESRI','108442','EPSG','4177','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108443','GDA_1994_To_GDA2020_NTv2_CPD_plus_Lord_Howe_Norfolk',NULL,'EPSG','9615','NTv2','EPSG','4283','EPSG','7844',0.05,'EPSG','8656','Latitude and longitude difference file','australia/gda94_gda2020_CPD_plus_lordhowe_norfolk',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108443_USAGE','grid_transformation','ESRI','108443','ESRI','185','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108448','Bab_South_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104112','EPSG','4326',NULL,-185.583,-230.096,281.361,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108448_USAGE','helmert_transformation','ESRI','108448','EPSG','1185','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108449','Majuro_To_WGS_1984',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','ESRI','104113','EPSG','4326',NULL,25.1,-275.6,222.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108449_USAGE','helmert_transformation','ESRI','108449','EPSG','1155','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108450','NAD_1983_HARN_To_NAD_1983_PA11_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4152','EPSG','6322',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108450_USAGE','helmert_transformation','ESRI','108450','EPSG','4162','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108451','WGS_1984_To_KUDAMS_KM_2019',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','4319',0.3,-6.1075,-6.4151,-4.9032,'EPSG','9001',1.16158,1.29682,1.91627,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108451_USAGE','helmert_transformation','ESRI','108451','EPSG','1136','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108452','Padang_To_WGS_1984_1',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4280','EPSG','4326',6.0,-377.0,681.0,-50.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108452_USAGE','helmert_transformation','ESRI','108452','EPSG','1355','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108453','AGD_1984_To_GDA_1994_NTv2_Queensland',NULL,'EPSG','9615','NTv2','EPSG','4203','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','australia/QLD_0900',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108453_USAGE','grid_transformation','ESRI','108453','EPSG','4021','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108457','Amersfoort_To_WGS_1984_2008_MB',NULL,'EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4289','EPSG','4326',0.5,593.0248,25.9984,478.7459,'EPSG','9001',0.3989573882431337,-0.3439878173782826,1.877401639980446,'EPSG','9104',4.0725,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3903453.1482,368135.3134,5012970.3051,'EPSG','9001',NULL,0); INSERT INTO "usage" VALUES('ESRI', '108457_USAGE','helmert_transformation','ESRI','108457','EPSG','1275','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108465','WGS_1984_Transit_To_G730_Fixed_At_1990.5_KD',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8888','EPSG','9053',0.283,-58.0,521.0,239.0,'EPSG','1025',18.3,-0.3,7.0,'EPSG','1031',10.7,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108465_USAGE','helmert_transformation','ESRI','108465','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108466','WGS_1984_G730_To_G873_Fixed_At_1995.5_KD',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9053','EPSG','9054',0.121,-20.0,-16.0,14.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.69,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108466_USAGE','helmert_transformation','ESRI','108466','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108467','WGS_1984_G873_To_G1150_Fixed_At_1999.5_KD',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9054','EPSG','9055',0.202,1.1,-8.0,14.3,'EPSG','1025',0.0,0.0,0.05,'EPSG','1031',1.505,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108467_USAGE','helmert_transformation','ESRI','108467','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108468','WGS_1984_G1150_To_G1674_Fixed_At_2007.5_KD',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9055','EPSG','9056',0.404,-2.65,1.35,27.7,'EPSG','1025',-0.27,0.27,-0.38,'EPSG','1031',1.88,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108468_USAGE','helmert_transformation','ESRI','108468','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108469','WGS_1984_G1674_To_G1762_Fixed_At_2012.5_KD',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9056','EPSG','9057',0.04,-4.0,3.0,4.0,'EPSG','1025',0.27,-0.27,0.38,'EPSG','1031',-6.9,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108469_USAGE','helmert_transformation','ESRI','108469','EPSG','1262','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108471','RGNC_1991_To_IGN72_Grande_Terre_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4645','EPSG','4662',0.1,'EPSG','8656','Latitude and longitude difference file','france/RGNC1991_IGN72GrandeTerre',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108471_USAGE','grid_transformation','ESRI','108471','EPSG','2822','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108472','RGNC_1991_To_NEA74_Noumea_NTv2',NULL,'EPSG','9615','NTv2','EPSG','4645','EPSG','4644',NULL,'EPSG','8656','Latitude and longitude difference file','france/RGNC1991_NEA74Noumea',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108472_USAGE','grid_transformation','ESRI','108472','EPSG','2823','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108474','WGS_1984_G1762_To_G2139_Fixed_At_2016.0_NGA',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9057','EPSG','9755',0.01,5.8,-6.4,7.0,'EPSG','1025',0.08,0.04,0.12,'EPSG','1031',-4.4,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108474_USAGE','helmert_transformation','ESRI','108474','EPSG','1262','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108475','MGI_1901_To_Slovenia_1996_3tra_NTv2',NULL,'EPSG','9615','NTv2','EPSG','3906','EPSG','4765',0.11,'EPSG','8656','Latitude and longitude difference file','slovenia/SI_D48_D96_GRID',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108475_USAGE','grid_transformation','ESRI','108475','EPSG','3307','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('ESRI','108476','D48_To_D96_3tra_NTv2',NULL,'EPSG','9615','NTv2','ESRI','104131','EPSG','4765',0.11,'EPSG','8656','Latitude and longitude difference file','slovenia/SI_D48_D96_GRID',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108476_USAGE','grid_transformation','ESRI','108476','EPSG','3307','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108477','WGS_1984_G2139_To_G2296_Fixed_At_2024.0_NGA',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9755','EPSG','10606',0.01,2.6,5.4,-0.9,'EPSG','1025',-0.01,-0.07,0.0,'EPSG','1031',0.06,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108477_USAGE','helmert_transformation','ESRI','108477','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108478','WGS_1984_G2296_To_ITRF2020_NGA',NULL,'EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','10606','EPSG','9990',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108478_USAGE','helmert_transformation','ESRI','108478','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108501','ITRF_2014_To_ITRF_2008_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7911',NULL,0.0016,0.0019,0.0024,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00002,'EPSG','9202',0.0,0.0,-0.0001,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.00003,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108501_USAGE','helmert_transformation','ESRI','108501','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108502','ITRF_2014_To_ITRF_2005_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7910',NULL,0.0026,0.001,-0.0023,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00092,'EPSG','9202',0.0003,0.0,-0.0001,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.00003,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108502_USAGE','helmert_transformation','ESRI','108502','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108503','ITRF_2014_To_ITRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7909',NULL,0.0007,0.0012,-0.0261,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00212,'EPSG','9202',0.0001,0.0001,-0.0019,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.00011,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108503_USAGE','helmert_transformation','ESRI','108503','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108504','ITRF_2014_To_ITRF_1997_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7908',NULL,0.0074,-0.0005,-0.0628,'EPSG','9001',0.0,0.0,0.00026,'EPSG','9104',0.0038,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108504_USAGE','helmert_transformation','ESRI','108504','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108505','ITRF_2014_To_ITRF_1996_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7907',NULL,0.0074,-0.0005,-0.0628,'EPSG','9001',0.0,0.0,0.00026,'EPSG','9104',0.0038,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108505_USAGE','helmert_transformation','ESRI','108505','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108506','ITRF_2014_To_ITRF_1994_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7906',NULL,0.0074,-0.0005,-0.0628,'EPSG','9001',0.0,0.0,0.00026,'EPSG','9104',0.0038,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108506_USAGE','helmert_transformation','ESRI','108506','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108507','ITRF_2014_To_ITRF_1993_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7905',NULL,-0.0504,0.0033,-0.0602,'EPSG','9001',-0.00281,-0.00338,0.0004,'EPSG','9104',0.00429,'EPSG','9202',-0.0028,-0.0001,-0.0025,'EPSG','1042',-0.00011,-0.00019,0.00007,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108507_USAGE','helmert_transformation','ESRI','108507','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108508','ITRF_2014_To_ITRF_1992_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7904',NULL,0.0154,0.0015,-0.0708,'EPSG','9001',0.0,0.0,0.00026,'EPSG','9104',0.00309,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108508_USAGE','helmert_transformation','ESRI','108508','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108509','ITRF_2014_To_ITRF_1991_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7903',NULL,0.0274,0.0155,-0.0768,'EPSG','9001',0.0,0.0,0.00026,'EPSG','9104',0.00449,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108509_USAGE','helmert_transformation','ESRI','108509','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108510','ITRF_2014_To_ITRF_1990_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7902',NULL,0.0254,0.0115,-0.0928,'EPSG','9001',0.0,0.0,0.00026,'EPSG','9104',0.00479,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108510_USAGE','helmert_transformation','ESRI','108510','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108511','ITRF_2014_To_ITRF_1989_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7901',NULL,0.0304,0.0355,-0.1308,'EPSG','9001',0.0,0.0,0.00026,'EPSG','9104',0.00819,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108511_USAGE','helmert_transformation','ESRI','108511','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108512','ITRF_2014_To_ITRF_1988_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7900',NULL,0.0254,-0.0005,-0.1548,'EPSG','9001',0.0001,0.0,0.00026,'EPSG','9104',0.01129,'EPSG','9202',0.0001,-0.0005,-0.0033,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108512_USAGE','helmert_transformation','ESRI','108512','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108513','ITRF_2008_To_ITRF_2005_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7910',NULL,-0.002,-0.0009,-0.0047,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00094,'EPSG','9202',0.0003,0.0,0.0,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.0,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108513_USAGE','helmert_transformation','ESRI','108513','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108514','ITRF_2008_To_ITRF_2000_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7909',NULL,-0.0019,-0.0017,-0.0105,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00134,'EPSG','9202',0.0001,0.0001,-0.0018,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.00008,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108514_USAGE','helmert_transformation','ESRI','108514','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108515','ITRF_2008_To_ITRF_1997_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7908',NULL,0.0048,0.0026,-0.0332,'EPSG','9001',0.0,0.0,0.00006,'EPSG','9104',0.00292,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108515_USAGE','helmert_transformation','ESRI','108515','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108516','ITRF_2008_To_ITRF_1996_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7907',NULL,0.0048,0.0026,-0.0332,'EPSG','9001',0.0,0.0,0.00006,'EPSG','9104',0.00292,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108516_USAGE','helmert_transformation','ESRI','108516','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108517','ITRF_2008_To_ITRF_1994_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7906',NULL,0.0048,0.0026,-0.0332,'EPSG','9001',0.0,0.0,0.00006,'EPSG','9104',0.00292,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108517_USAGE','helmert_transformation','ESRI','108517','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108518','ITRF_2008_To_ITRF_1993_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7905',NULL,-0.024,0.0024,-0.0386,'EPSG','9001',-0.00171,-0.00148,-0.0003,'EPSG','9104',0.00341,'EPSG','9202',-0.0028,-0.0001,-0.0024,'EPSG','1042',-0.00011,-0.00019,0.00007,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108518_USAGE','helmert_transformation','ESRI','108518','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108519','ITRF_2008_To_ITRF_1992_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7904',NULL,0.0128,0.0046,-0.0412,'EPSG','9001',0.0,0.0,0.00006,'EPSG','9104',0.00221,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108519_USAGE','helmert_transformation','ESRI','108519','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108520','ITRF_2008_To_ITRF_1991_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7903',NULL,0.0248,0.0186,-0.0472,'EPSG','9001',0.0,0.0,0.00006,'EPSG','9104',0.00361,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108520_USAGE','helmert_transformation','ESRI','108520','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108521','ITRF_2008_To_ITRF_1990_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7902',NULL,0.0228,0.0146,-0.0632,'EPSG','9001',0.0,0.0,0.00006,'EPSG','9104',0.00391,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108521_USAGE','helmert_transformation','ESRI','108521','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108522','ITRF_2008_To_ITRF_1989_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7901',NULL,0.0278,0.0386,-0.1012,'EPSG','9001',0.0,0.0,0.00006,'EPSG','9104',0.00731,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108522_USAGE','helmert_transformation','ESRI','108522','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108523','ITRF_2008_To_ITRF_1988_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7900',NULL,0.0228,0.0026,-0.1252,'EPSG','9001',0.0001,0.0,0.00006,'EPSG','9104',0.01041,'EPSG','9202',0.0001,-0.0005,-0.0032,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00009,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108523_USAGE','helmert_transformation','ESRI','108523','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108524','ITRF_2005_To_ITRF_2000_AT2000',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7910','EPSG','7909',NULL,0.0001,-0.0008,-0.0058,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0004,'EPSG','9202',-0.0002,0.0001,-0.0018,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.00008,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108524_USAGE','helmert_transformation','ESRI','108524','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108525','ITRF_2000_To_ITRF_1997_AT1997',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7908',NULL,0.0067,0.0061,-0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00155,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108525_USAGE','helmert_transformation','ESRI','108525','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108526','ITRF_2000_To_ITRF_1996_AT1997',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7907',NULL,0.0067,0.0061,-0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00155,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108526_USAGE','helmert_transformation','ESRI','108526','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108527','ITRF_2000_To_ITRF_1994_AT1997',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7906',NULL,0.0067,0.0061,-0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.00155,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108527_USAGE','helmert_transformation','ESRI','108527','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108528','ITRF_2000_To_ITRF_1993_AT1988',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7905',NULL,0.0127,0.0065,-0.0209,'EPSG','9001',-0.00039,0.0008,-0.00114,'EPSG','9104',0.00195,'EPSG','9202',-0.0029,-0.0002,-0.0006,'EPSG','1042',-0.00011,-0.00019,0.00007,'EPSG','1043',0.00001,'EPSG','1041',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108528_USAGE','helmert_transformation','ESRI','108528','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108529','ITRF_2000_To_ITRF_1992_AT1988',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7904',NULL,0.0147,0.0135,-0.0139,'EPSG','9001',0.0,0.0,-0.00018,'EPSG','9104',0.00075,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108529_USAGE','helmert_transformation','ESRI','108529','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108530','ITRF_2000_To_ITRF_1991_AT1988',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7903',NULL,0.0267,0.0275,-0.0199,'EPSG','9001',0.0,0.0,-0.00018,'EPSG','9104',0.00215,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108530_USAGE','helmert_transformation','ESRI','108530','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108531','ITRF_2000_To_ITRF_1990_AT1988',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7902',NULL,0.0247,0.0235,-0.0359,'EPSG','9001',0.0,0.0,-0.00018,'EPSG','9104',0.00245,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108531_USAGE','helmert_transformation','ESRI','108531','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108532','ITRF_2000_To_ITRF_1989_AT1988',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7901',NULL,0.0297,0.0475,-0.0739,'EPSG','9001',0.0,0.0,-0.00018,'EPSG','9104',0.00585,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108532_USAGE','helmert_transformation','ESRI','108532','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108533','ITRF_2000_To_ITRF_1988_AT1988',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7900',NULL,0.0247,0.0115,-0.0979,'EPSG','9001',0.0001,0.0,-0.00018,'EPSG','9104',0.00895,'EPSG','9202',0.0,-0.0006,-0.0014,'EPSG','1042',0.0,0.0,0.00002,'EPSG','1043',0.00001,'EPSG','1041',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108533_USAGE','helmert_transformation','ESRI','108533','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108535','ITRF_1997_To_ETRF_1997_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7908','EPSG','7929',NULL,0.041,0.041,-0.049,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.0002,0.0005,-0.00065,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108535_USAGE','helmert_transformation','ESRI','108535','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108536','ITRF_1996_To_ETRF_1996_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7907','EPSG','7927',NULL,0.041,0.041,-0.049,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.0002,0.0005,-0.00065,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108536_USAGE','helmert_transformation','ESRI','108536','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108537','ITRF_1994_To_ETRF_1994_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7906','EPSG','7925',NULL,0.041,0.041,-0.049,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.0002,0.0005,-0.00065,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108537_USAGE','helmert_transformation','ESRI','108537','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108538','ITRF_1993_To_ETRF_1993_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7905','EPSG','7923',NULL,0.019,0.053,-0.021,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00032,0.00078,-0.00067,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108538_USAGE','helmert_transformation','ESRI','108538','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108539','ITRF_1992_To_ETRF_1992_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7904','EPSG','7921',NULL,0.038,0.04,-0.037,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00021,0.00052,-0.00068,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108539_USAGE','helmert_transformation','ESRI','108539','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108540','ITRF_1991_To_ETRF_1991_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7903','EPSG','7919',NULL,0.021,0.025,-0.037,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00021,0.00052,-0.00068,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108540_USAGE','helmert_transformation','ESRI','108540','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108541','ITRF_1990_To_ETRF_1990_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7902','EPSG','7917',NULL,0.019,0.028,-0.023,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00011,0.00057,-0.00071,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108541_USAGE','helmert_transformation','ESRI','108541','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108542','ITRF_1989_To_ETRF_1989_AT1989',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7901','EPSG','7915',NULL,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.00011,0.00057,-0.00071,'EPSG','1043',0.0,'EPSG','1041',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108542_USAGE','helmert_transformation','ESRI','108542','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108543','ITRF_2014_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','8403',NULL,0.0,0.0,0.0,'EPSG','9001',0.001785,0.011151,-0.01617,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.000085,0.000531,-0.00077,'EPSG','1043',0.0,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108543_USAGE','helmert_transformation','ESRI','108543','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108544','ITRF_2008_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','8403',NULL,-0.0016,-0.0019,-0.0024,'EPSG','9001',0.001785,0.011151,-0.01617,'EPSG','9104',0.00002,'EPSG','9202',0.0,0.0,0.0001,'EPSG','1042',0.000085,0.000531,-0.00077,'EPSG','1043',-0.00003,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108544_USAGE','helmert_transformation','ESRI','108544','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108545','ITRF_2005_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7910','EPSG','8403',NULL,-0.0026,-0.001,0.0023,'EPSG','9001',0.001785,0.011151,-0.01617,'EPSG','9104',-0.00092,'EPSG','9202',-0.0003,0.0,0.0001,'EPSG','1042',0.000085,0.000531,-0.00077,'EPSG','1043',-0.00003,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108545_USAGE','helmert_transformation','ESRI','108545','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108546','ITRF_2000_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','8403',NULL,-0.0007,-0.0012,0.0261,'EPSG','9001',0.001785,0.011151,-0.01617,'EPSG','9104',-0.00212,'EPSG','9202',-0.0001,-0.0001,0.0019,'EPSG','1042',0.000085,0.000531,-0.00077,'EPSG','1043',-0.00011,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108546_USAGE','helmert_transformation','ESRI','108546','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108547','ITRF_1997_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7908','EPSG','8403',NULL,-0.0074,0.0005,0.0628,'EPSG','9001',0.001785,0.011151,-0.01643,'EPSG','9104',-0.0038,'EPSG','9202',-0.0001,0.0005,0.0033,'EPSG','1042',0.000085,0.000531,-0.00079,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108547_USAGE','helmert_transformation','ESRI','108547','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108548','ITRF_1996_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7907','EPSG','8403',NULL,-0.0074,0.0005,0.0628,'EPSG','9001',0.001785,0.011151,-0.01643,'EPSG','9104',-0.0038,'EPSG','9202',-0.0001,0.0005,0.0033,'EPSG','1042',0.000085,0.000531,-0.00079,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108548_USAGE','helmert_transformation','ESRI','108548','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108549','ITRF_1994_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7906','EPSG','8403',NULL,-0.0074,0.0005,0.0628,'EPSG','9001',0.001785,0.011151,-0.01643,'EPSG','9104',-0.0038,'EPSG','9202',-0.0001,0.0005,0.0033,'EPSG','1042',0.000085,0.000531,-0.00079,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108549_USAGE','helmert_transformation','ESRI','108549','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108550','ITRF_1993_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7905','EPSG','8403',NULL,0.0504,-0.0033,0.0602,'EPSG','9001',0.004595,0.014531,-0.01657,'EPSG','9104',-0.00429,'EPSG','9202',0.0028,0.0001,0.0025,'EPSG','1042',0.000195,0.000721,-0.00084,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108550_USAGE','helmert_transformation','ESRI','108550','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108551','ITRF_1992_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7904','EPSG','8403',NULL,-0.0154,-0.0015,0.0708,'EPSG','9001',0.001785,0.011151,-0.01643,'EPSG','9104',-0.00309,'EPSG','9202',-0.0001,0.0005,0.0033,'EPSG','1042',0.000085,0.000531,-0.00079,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108551_USAGE','helmert_transformation','ESRI','108551','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108552','ITRF_1991_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7903','EPSG','8403',NULL,-0.0274,-0.0155,0.0768,'EPSG','9001',0.001785,0.011151,-0.01643,'EPSG','9104',-0.00449,'EPSG','9202',-0.0001,0.0005,0.0033,'EPSG','1042',0.000085,0.000531,-0.00079,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108552_USAGE','helmert_transformation','ESRI','108552','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108553','ITRF_1990_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7902','EPSG','8403',NULL,-0.0254,-0.0115,0.0928,'EPSG','9001',0.001785,0.011151,-0.01643,'EPSG','9104',-0.00479,'EPSG','9202',-0.0001,0.0005,0.0033,'EPSG','1042',0.000085,0.000531,-0.00079,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108553_USAGE','helmert_transformation','ESRI','108553','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108554','ITRF_1989_To_ETRF_2014_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7901','EPSG','8403',NULL,-0.0304,-0.0355,0.1308,'EPSG','9001',0.001785,0.011151,-0.01643,'EPSG','9104',-0.00819,'EPSG','9202',-0.0001,0.0005,0.0033,'EPSG','1042',0.000085,0.000531,-0.00079,'EPSG','1043',-0.00012,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108554_USAGE','helmert_transformation','ESRI','108554','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108555','ITRF_2014_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7912','EPSG','7931',NULL,0.0547,0.0522,-0.0741,'EPSG','9001',0.001701,0.01029,-0.016632,'EPSG','9104',0.00212,'EPSG','9202',0.0001,0.0001,-0.0019,'EPSG','1042',0.000081,0.00049,-0.000792,'EPSG','1043',0.00011,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108555_USAGE','helmert_transformation','ESRI','108555','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108556','ITRF_2008_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7911','EPSG','7931',NULL,0.0531,0.0503,-0.0765,'EPSG','9001',0.001701,0.01029,-0.016632,'EPSG','9104',0.00214,'EPSG','9202',0.0001,0.0001,-0.0018,'EPSG','1042',0.000081,0.00049,-0.000792,'EPSG','1043',0.00008,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108556_USAGE','helmert_transformation','ESRI','108556','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108557','ITRF_2005_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7910','EPSG','7931',NULL,0.0521,0.0512,-0.0718,'EPSG','9001',0.001701,0.01029,-0.016632,'EPSG','9104',0.0012,'EPSG','9202',-0.0002,0.0001,-0.0018,'EPSG','1042',0.000081,0.00049,-0.000792,'EPSG','1043',0.00008,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108557_USAGE','helmert_transformation','ESRI','108557','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108558','ITRF_2000_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7909','EPSG','7931',NULL,0.054,0.051,-0.048,'EPSG','9001',0.001701,0.01029,-0.016632,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.000081,0.00049,-0.000792,'EPSG','1043',0.0,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108558_USAGE','helmert_transformation','ESRI','108558','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108559','ITRF_1997_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7908','EPSG','7931',NULL,0.0473,0.0527,-0.0113,'EPSG','9001',0.001701,0.01029,-0.016892,'EPSG','9104',-0.00168,'EPSG','9202',0.0,0.0006,0.0014,'EPSG','1042',0.000081,0.00049,-0.000812,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108559_USAGE','helmert_transformation','ESRI','108559','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108560','ITRF_1996_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7907','EPSG','7931',NULL,0.0473,0.0527,-0.0113,'EPSG','9001',0.001701,0.01029,-0.016892,'EPSG','9104',-0.00168,'EPSG','9202',0.0,0.0006,0.0014,'EPSG','1042',0.000081,0.00049,-0.000812,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108560_USAGE','helmert_transformation','ESRI','108560','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108561','ITRF_1994_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7906','EPSG','7931',NULL,0.0473,0.0527,-0.0113,'EPSG','9001',0.001701,0.01029,-0.016892,'EPSG','9104',-0.00168,'EPSG','9202',0.0,0.0006,0.0014,'EPSG','1042',0.000081,0.00049,-0.000812,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108561_USAGE','helmert_transformation','ESRI','108561','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108562','ITRF_1993_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7905','EPSG','7931',NULL,0.1051,0.0489,-0.0139,'EPSG','9001',0.004511,0.01367,-0.017032,'EPSG','9104',-0.00217,'EPSG','9202',0.0029,0.0002,0.0006,'EPSG','1042',0.000191,0.00068,-0.000862,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108562_USAGE','helmert_transformation','ESRI','108562','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108563','ITRF_1992_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7904','EPSG','7931',NULL,0.0393,0.0507,-0.0033,'EPSG','9001',0.001701,0.01029,-0.016892,'EPSG','9104',-0.00097,'EPSG','9202',0.0,0.0006,0.0014,'EPSG','1042',0.000081,0.00049,-0.000812,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108563_USAGE','helmert_transformation','ESRI','108563','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108564','ITRF_1991_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7903','EPSG','7931',NULL,0.0273,0.0367,0.0027,'EPSG','9001',0.001701,0.01029,-0.016892,'EPSG','9104',-0.00237,'EPSG','9202',0.0,0.0006,0.0014,'EPSG','1042',0.000081,0.00049,-0.000812,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108564_USAGE','helmert_transformation','ESRI','108564','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108565','ITRF_1990_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7902','EPSG','7931',NULL,0.0293,0.0407,0.0187,'EPSG','9001',0.001701,0.01029,-0.016892,'EPSG','9104',-0.00267,'EPSG','9202',0.0,0.0006,0.0014,'EPSG','1042',0.000081,0.00049,-0.000812,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108565_USAGE','helmert_transformation','ESRI','108565','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108566','ITRF_1989_To_ETRF_2000_AT2010',NULL,'EPSG','1054','Time-dependent Position Vector tfm (geog2D)','EPSG','7901','EPSG','7931',NULL,0.0243,0.0167,0.0567,'EPSG','9001',0.001701,0.01029,-0.016892,'EPSG','9104',-0.00607,'EPSG','9202',0.0,0.0006,0.0014,'EPSG','1042',0.000081,0.00049,-0.000812,'EPSG','1043',-0.00001,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108566_USAGE','helmert_transformation','ESRI','108566','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108567','ITRF_2000_To_NAD_1983_CORS96_AT1997',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7909','EPSG','6782',NULL,0.9956,-1.9013,-0.5215,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',0.00062,'EPSG','9202',0.0007,-0.0007,0.0005,'EPSG','1042',0.000067,-0.000757,-0.000051,'EPSG','1043',-0.00018,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108567_USAGE','helmert_transformation','ESRI','108567','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108568','ITRF_1997_To_NAD_1983_CORS96_AT1997',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7908','EPSG','6782',NULL,0.9889,-1.9074,-0.503,'EPSG','9001',0.025915,0.009426,0.011599,'EPSG','9104',-0.00093,'EPSG','9202',0.0007,-0.0001,0.0019,'EPSG','1042',0.000067,-0.000757,-0.000031,'EPSG','1043',-0.00019,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108568_USAGE','helmert_transformation','ESRI','108568','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108569','ITRF_1996_To_NAD_1983_CORS96_AT1997',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7907','EPSG','6782',NULL,0.991,-1.9072,-0.5129,'EPSG','9001',0.02579,0.00965,0.01166,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',0.0000532,-0.0007423,-0.0000316,'EPSG','1043',0.0,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108569_USAGE','helmert_transformation','ESRI','108569','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108571','IGS08_To_NAD_1983_2011_AT1997',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','9013','EPSG','6319',NULL,0.99343,-1.90331,-0.52655,'EPSG','9001',0.02591467,0.00942645,0.01159935,'EPSG','9104',0.00171504,'EPSG','9202',0.00079,-0.0006,-0.00134,'EPSG','1042',0.00006667,-0.00075744,-0.00005133,'EPSG','1043',-0.00010201,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108571_USAGE','helmert_transformation','ESRI','108571','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108572','IGS08_To_NAD_1983_PA11_AT1997',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','9013','EPSG','6321',NULL,0.908,-2.0161,-0.5653,'EPSG','9001',0.027741,0.013469,0.002712,'EPSG','9104',0.0011,'EPSG','9202',0.0001,0.0001,-0.0018,'EPSG','1042',-0.000384,0.001007,-0.002186,'EPSG','1043',0.00008,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108572_USAGE','helmert_transformation','ESRI','108572','EPSG','4162','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108573','IGS08_To_NAD_1983_MA11_AT1997',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','9013','EPSG','6324',NULL,0.908,-2.0161,-0.5653,'EPSG','9001',0.028971,0.01042,0.008928,'EPSG','9104',0.0011,'EPSG','9202',0.0001,-0.0001,-0.0018,'EPSG','1042',-0.00002,0.000105,-0.000347,'EPSG','1043',0.00008,'EPSG','1041',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108573_USAGE','helmert_transformation','ESRI','108573','EPSG','4167','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108574','ITRF_2014_To_NAD_1983_2011_AT2010',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7912','EPSG','6319',NULL,1.0053,-1.90921,-0.54157,'EPSG','9001',0.0267815,-0.00042078,0.01093254,'EPSG','9104',0.00036891,'EPSG','9202',0.00079,-0.0006,-0.00144,'EPSG','1042',0.00006669,-0.00075749,-0.00005129,'EPSG','1043',-0.00007201,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108574_USAGE','helmert_transformation','ESRI','108574','EPSG','1511','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108575','ITRF_2014_To_NAD_1983_PA11_AT2010',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7912','EPSG','6321',NULL,0.9109,-2.0129,-0.5863,'EPSG','9001',0.022749,0.02656,-0.025706,'EPSG','9104',0.00212,'EPSG','9202',0.0001,0.0001,-0.0019,'EPSG','1042',-0.000384,0.001007,-0.002186,'EPSG','1043',0.00011,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108575_USAGE','helmert_transformation','ESRI','108575','EPSG','4162','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108576','ITRF_2014_To_NAD_1983_MA11_AT2010',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7912','EPSG','6324',NULL,0.9109,-2.0129,-0.5863,'EPSG','9001',0.028711,0.011785,0.004417,'EPSG','9104',0.00212,'EPSG','9202',0.0001,0.0001,-0.0019,'EPSG','1042',-0.00002,0.000105,-0.000347,'EPSG','1043',0.00011,'EPSG','1041',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108576_USAGE','helmert_transformation','ESRI','108576','EPSG','4167','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108577','ITRF_2000_To_NAD_1983_PACP00_AT1993',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7909','EPSG','9074',NULL,0.9102,-2.0141,-0.5602,'EPSG','9001',0.029039,0.010065,0.010101,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',-0.000384,0.001007,-0.002186,'EPSG','1043',0.0,'EPSG','1041',1993.62,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108577_USAGE','helmert_transformation','ESRI','108577','EPSG','4162','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('ESRI','108578','ITRF_2000_To_NAD_1983_MARP00_AT1993',NULL,'EPSG','1057','Time-dependent Coordinate Frame rotation (geog2D)','EPSG','7909','EPSG','9071',NULL,0.9102,-2.0141,-0.5602,'EPSG','9001',0.029039,0.010065,0.010101,'EPSG','9104',0.0,'EPSG','9202',0.0,0.0,0.0,'EPSG','1042',-0.00002,0.000105,-0.000347,'EPSG','1043',0.0,'EPSG','1041',1993.62,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('ESRI', '108578_USAGE','helmert_transformation','ESRI','108578','EPSG','4167','EPSG','1024'); ------------------ -- ESRI grid names ------------------ INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('portugal/DLX_ETRS89_geo','pt_dgt_DLx_ETRS89_geo.tif','DLX_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_DLx_ETRS89_geo.tif',1,1,NULL), ('portugal/D73_ETRS89_geo','pt_dgt_D73_ETRS89_geo.tif','D73_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_D73_ETRS89_geo.tif',1,1,NULL), ('netherlands/rdtrans2008','','rdtrans2008.gsb','NTv2','hgridshift',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/rdtrans2008.gsb',1,0,NULL), ('uk/OSTN15_NTv2','uk_os_OSTN15_NTv2_OSGBtoETRS.tif','OSTN15_NTv2_OSGBtoETRS.gsb','GTiff','hgridshift',1 -- reverse direction ,NULL,'https://cdn.proj.org/uk_os_OSTN15_NTv2_OSGBtoETRS.tif',1,1,NULL), ('canada/GS7783','ca_nrc_GS7783.tif','GS7783.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_GS7783.tif',1,1,NULL), ('spain/100800401','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL), ('australia/QLD_0900','au_icsm_National_84_02_07_01.tif','National_84_02_07_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_National_84_02_07_01.tif',1,1,NULL), -- From https://www.dnrme.qld.gov.au/__data/assets/pdf_file/0006/105765/gday-21-user-guide.pdf: "Note that the Queensland grid QLD_0900.gsb produces identical results to the National AGD84 grid for the equivalent coverage." ('spain/PENR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL), ('spain/BALR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL), ('spain/peninsula','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL); -- 'france/RGNC1991_IGN72GrandeTerre' : we have a 3D geocentric corresponding one: no need for mapping -- 'france/RGNC1991_NEA74Noumea' : we have a 3D geocentric corresponding one: no need for mapping -- 'uk/osgb36_xrail84': no mapping -- 'japan/tky2jgd': no mapping -- 'icegrid2004': no mapping -- 'ICEGRID93': no mapping -- 'switzerland/ntv2-ch03p-etrs': no mapping -- 'canada/NA83SCRS': no mapping -- 'australia/gda94_gda2020_CPD_plus_lordhowe_norfolk': no mapping -- 'slovenia/SI_D48_D96_GRID': no mapping proj-9.6.0/data/sql/extent.sql000664 001754 001755 00002621403 14764566077 016171 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "extent" VALUES('EPSG','1024','Afghanistan','Afghanistan.',29.4,38.48,60.5,74.92,0); INSERT INTO "extent" VALUES('EPSG','1025','Albania','Albania - onshore and offshore.',39.63,42.67,18.46,21.06,0); INSERT INTO "extent" VALUES('EPSG','1026','Algeria','Algeria - onshore and offshore.',18.97,38.8,-8.67,11.99,0); INSERT INTO "extent" VALUES('EPSG','1027','American Samoa','American Samoa - onshore and offshore.',-17.56,-10.02,-173.75,-165.2,0); INSERT INTO "extent" VALUES('EPSG','1028','Andorra','Andorra.',42.43,42.66,1.42,1.79,0); INSERT INTO "extent" VALUES('EPSG','1029','Angola','Angola - onshore and offshore.',-18.02,-4.38,8.2,24.09,0); INSERT INTO "extent" VALUES('EPSG','1030','Anguilla','Anguilla - onshore and offshore.',17.94,21.93,-63.9,-60.68,0); INSERT INTO "extent" VALUES('EPSG','1031','Antarctica','Antarctica.',-90.0,-60.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1032','Antigua and Barbuda','Antigua and Barbuda - Antigua, Barbuda and Redonda.',16.61,20.88,-62.76,-58.37,0); INSERT INTO "extent" VALUES('EPSG','1033','Argentina','Argentina - onshore and offshore.',-58.41,-21.78,-73.59,-52.63,0); INSERT INTO "extent" VALUES('EPSG','1034','Armenia','Armenia.',38.84,41.3,43.45,46.63,0); INSERT INTO "extent" VALUES('EPSG','1035','Aruba','Aruba - onshore and offshore.',12.14,15.42,-70.42,-69.31,0); INSERT INTO "extent" VALUES('EPSG','1036','Australia - onshore and EEZ','Australia - onshore and offshore to 200 nautical mile EEZ boundary. Includes Lord Howe Island, Ashmore and Cartier Islands.',-47.2,-8.88,109.23,163.2,0); INSERT INTO "extent" VALUES('EPSG','1037','Austria','Austria.',46.4,49.02,9.53,17.17,0); INSERT INTO "extent" VALUES('EPSG','1038','Azerbaijan','Azerbaijan - onshore and offshore.',37.89,42.59,44.77,51.73,0); INSERT INTO "extent" VALUES('EPSG','1039','Bahamas','Bahamas - onshore and offshore.',20.36,30.36,-81.22,-70.63,0); INSERT INTO "extent" VALUES('EPSG','1040','Bahrain','Bahrain - onshore and offshore.',25.53,27.17,50.26,51.13,0); INSERT INTO "extent" VALUES('EPSG','1041','Bangladesh','Bangladesh - onshore and offshore.',18.56,26.64,88.01,92.67,0); INSERT INTO "extent" VALUES('EPSG','1042','Barbados','Barbados - onshore and offshore.',10.68,16.0,-60.39,-55.99,0); INSERT INTO "extent" VALUES('EPSG','1043','Belarus','Belarus.',51.25,56.17,23.16,32.75,0); INSERT INTO "extent" VALUES('EPSG','1044','Belgium','Belgium - onshore and offshore.',49.5,51.88,2.23,6.4,0); INSERT INTO "extent" VALUES('EPSG','1045','Belize','Belize - onshore and offshore.',15.88,18.49,-89.22,-86.11,0); INSERT INTO "extent" VALUES('EPSG','1046','Benin','Benin - onshore and offshore.',2.99,12.4,0.77,3.86,0); INSERT INTO "extent" VALUES('EPSG','1047','Bermuda','Bermuda - onshore and offshore.',28.91,35.73,-68.83,-60.7,0); INSERT INTO "extent" VALUES('EPSG','1048','Bhutan','Bhutan.',26.7,28.33,88.74,92.13,0); INSERT INTO "extent" VALUES('EPSG','1049','Bolivia','Bolivia.',-22.91,-9.67,-69.66,-57.52,0); INSERT INTO "extent" VALUES('EPSG','1050','Bosnia and Herzegovina','Bosnia and Herzegovina.',42.56,45.27,15.74,19.62,0); INSERT INTO "extent" VALUES('EPSG','1051','Botswana','Botswana.',-26.88,-17.78,19.99,29.38,0); INSERT INTO "extent" VALUES('EPSG','1052','Bouvet Island','Bouvet Island - onshore and offshore.',-57.8,-51.06,-2.38,9.21,0); INSERT INTO "extent" VALUES('EPSG','1053','Brazil','Brazil - onshore and offshore. Includes Rocas, Fernando de Noronha archipelago, Trindade, Ihlas Martim Vaz and Sao Pedro e Sao Paulo.',-35.71,7.04,-74.01,-25.28,0); INSERT INTO "extent" VALUES('EPSG','1054','British Indian Ocean Territory','British Indian Ocean Territory - onshore and offshore - Chagos Archipelago.',-10.8,-2.28,67.88,75.86,0); INSERT INTO "extent" VALUES('EPSG','1055','Brunei','Brunei Darussalam - onshore and offshore.',4.01,6.31,112.37,115.37,0); INSERT INTO "extent" VALUES('EPSG','1056','Bulgaria','Bulgaria - onshore and offshore.',41.24,44.23,22.36,31.35,0); INSERT INTO "extent" VALUES('EPSG','1057','Burkina Faso','Burkina Faso.',9.39,15.09,-5.53,2.4,0); INSERT INTO "extent" VALUES('EPSG','1058','Burundi','Burundi.',-4.45,-2.3,28.98,30.86,0); INSERT INTO "extent" VALUES('EPSG','1059','Cambodia','Cambodia - onshore and offshore.',8.78,14.73,101.33,107.64,0); INSERT INTO "extent" VALUES('EPSG','1060','Cameroon','Cameroon - onshore and offshore.',1.65,13.09,8.32,16.21,0); INSERT INTO "extent" VALUES('EPSG','1061','Canada','Canada - onshore and offshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon.',38.21,86.46,-141.01,-40.73,0); INSERT INTO "extent" VALUES('EPSG','1062','Cape Verde','Cape Verde - onshore and offshore. Includes Boa Vista, Brava, Fogo, Maio, Sal, Santo Antao, Sao Nicolau, Sao Tiago, Sao Vicente.',11.47,20.54,-28.85,-19.53,0); INSERT INTO "extent" VALUES('EPSG','1063','Cayman Islands','Cayman Islands - onshore and offshore. Includes Grand Cayman, Little Cayman and Cayman Brac.',17.58,20.68,-83.6,-78.72,0); INSERT INTO "extent" VALUES('EPSG','1064','Central African Republic','Central African Republic.',2.22,11.01,14.41,27.46,0); INSERT INTO "extent" VALUES('EPSG','1065','Chad','Chad.',7.45,23.46,13.46,24.01,0); INSERT INTO "extent" VALUES('EPSG','1066','Chile','Chile - onshore and offshore. Includes Easter Island, Juan Fernandez Islands, San Felix, and Sala y Gomez.',-59.87,-17.5,-113.21,-65.72,0); INSERT INTO "extent" VALUES('EPSG','1067','China','China - onshore and offshore.',16.7,53.56,73.62,134.77,0); INSERT INTO "extent" VALUES('EPSG','1068','Christmas Island','Christmas Island - onshore and offshore.',-13.92,-8.87,102.14,109.03,0); INSERT INTO "extent" VALUES('EPSG','1069','Cocos (Keeling) Islands - onshore','Cocos (Keeling) Islands - onshore.',-12.27,-11.76,96.76,96.99,0); INSERT INTO "extent" VALUES('EPSG','1070','Colombia','Colombia - onshore and offshore. Includes San Andres y Providencia, Malpelo Islands, Roncador Bank, Serrana Bank and Serranilla Bank.',-4.23,15.51,-84.77,-66.87,0); INSERT INTO "extent" VALUES('EPSG','1071','Comoros','Comoros - onshore and offshore. Includes Anjouan, Grande Comore, Moheli and other islands.',-14.43,-8.01,41.93,45.79,0); INSERT INTO "extent" VALUES('EPSG','1072','Congo','Congo - onshore and offshore.',-6.91,3.72,8.84,18.65,0); INSERT INTO "extent" VALUES('EPSG','1073','Cook Islands','Cook Islands - onshore and offshore.',-25.28,-5.85,-168.53,-154.8,0); INSERT INTO "extent" VALUES('EPSG','1074','Costa Rica','Costa Rica - onshore and offshore.',2.15,11.77,-90.45,-81.43,0); INSERT INTO "extent" VALUES('EPSG','1075','Cote d''Ivoire (Ivory Coast)','Côte d''Ivoire (Ivory Coast) - onshore and offshore.',1.02,10.74,-8.61,-2.48,0); INSERT INTO "extent" VALUES('EPSG','1076','Croatia','Croatia - onshore and offshore.',41.62,46.54,13.0,19.43,0); INSERT INTO "extent" VALUES('EPSG','1077','Cuba','Cuba - onshore and offshore.',18.83,25.51,-87.01,-73.57,0); INSERT INTO "extent" VALUES('EPSG','1078','Cyprus','Cyprus - onshore and offshore.',32.88,36.21,29.95,35.2,0); INSERT INTO "extent" VALUES('EPSG','1079','Czechia','Czechia.',48.58,51.06,12.09,18.86,0); INSERT INTO "extent" VALUES('EPSG','1080','Denmark','Denmark - onshore and offshore.',54.36,58.27,3.24,16.51,0); INSERT INTO "extent" VALUES('EPSG','1081','Djibouti','Djibouti - onshore and offshore.',10.94,12.72,41.75,44.15,0); INSERT INTO "extent" VALUES('EPSG','1082','Dominica','Dominica - onshore and offshore.',14.48,16.62,-62.82,-57.52,0); INSERT INTO "extent" VALUES('EPSG','1083','Dominican Republic','Dominican Republic - onshore and offshore.',14.96,22.42,-73.46,-66.82,0); INSERT INTO "extent" VALUES('EPSG','1084','East Timor','Timor-Leste (East Timor) - onshore and offshore. Includes enclave of Oe-Cussi (Okusi).',-10.47,-7.97,123.92,127.97,0); INSERT INTO "extent" VALUES('EPSG','1085','Ecuador','Ecuador - onshore and offshore. Includes Galapagos Islands (Archipelago de Colon).',-5.01,5.0,-95.35,-75.21,0); INSERT INTO "extent" VALUES('EPSG','1086','Egypt','Egypt - onshore and offshore.',21.89,33.82,24.7,37.91,0); INSERT INTO "extent" VALUES('EPSG','1087','El Salvador','El Salvador - onshore and offshore.',9.97,14.44,-91.43,-87.65,0); INSERT INTO "extent" VALUES('EPSG','1088','Equatorial Guinea','Equatorial Guinea - onshore and offshore. Includes Rio Muni, Bioko, Annobon, Corisco, Elobey Chico, and Ebony Grande.',-4.8,4.13,2.26,11.36,0); INSERT INTO "extent" VALUES('EPSG','1089','Eritrea','Eritrea - onshore and offshore.',12.36,18.1,36.44,43.31,0); INSERT INTO "extent" VALUES('EPSG','1090','Estonia','Estonia - onshore and offshore.',57.52,60.0,20.37,28.2,0); INSERT INTO "extent" VALUES('EPSG','1091','Ethiopia','Ethiopia.',3.4,14.89,32.99,47.99,0); INSERT INTO "extent" VALUES('EPSG','1092','Falkland Islands','Falkland Islands (Malvinas) - onshore and offshore.',-56.25,-47.68,-65.01,-52.31,0); INSERT INTO "extent" VALUES('EPSG','1093','Faroe Islands','Faroe Islands - onshore and offshore.',59.94,65.7,-13.91,-0.48,0); INSERT INTO "extent" VALUES('EPSG','1094','Fiji - onshore','Fiji - onshore. Includes Viti Levu, Vanua Levu, Taveuni, the Yasawa Group, the Kadavu Group, the Lau Islands and Rotuma Islands.',-20.81,-12.42,176.81,-178.15,0); INSERT INTO "extent" VALUES('EPSG','1095','Finland','Finland - onshore and offshore.',58.84,70.09,19.08,31.59,0); INSERT INTO "extent" VALUES('EPSG','1096','France','France - onshore and offshore, mainland and Corsica (France métropolitaine including Corsica).',41.15,51.56,-9.86,10.38,0); INSERT INTO "extent" VALUES('EPSG','1097','French Guiana','French Guiana - onshore and offshore.',2.11,8.88,-54.61,-49.45,0); INSERT INTO "extent" VALUES('EPSG','1098','French Polynesia','French Polynesia - onshore and offshore. Includes Society archipelago, Tuamotu archipelago, Marquesas Islands, Gambier Islands and Austral Islands.',-31.24,-4.52,-158.13,-131.97,0); INSERT INTO "extent" VALUES('EPSG','1099','French Southern Territories','French Southern Territories - onshore and offshore. Includes Amsterdam and St Paul, Bassas da India, Crozet, Europa, Glorieuses, Juan de Nova, Kerguelen and Tromelin.',-53.24,-10.65,37.55,81.83,0); INSERT INTO "extent" VALUES('EPSG','1100','Gabon','Gabon - onshore and offshore.',-6.37,2.32,7.03,14.52,0); INSERT INTO "extent" VALUES('EPSG','1101','Gambia','Gambia - onshore and offshore.',13.05,13.83,-20.19,-13.79,0); INSERT INTO "extent" VALUES('EPSG','1102','Georgia','Georgia - onshore and offshore.',41.04,43.59,38.97,46.72,0); INSERT INTO "extent" VALUES('EPSG','1103','Germany','Germany - onshore and offshore.',47.27,55.92,3.34,15.04,0); INSERT INTO "extent" VALUES('EPSG','1104','Ghana','Ghana - onshore and offshore.',1.4,11.16,-3.79,2.1,0); INSERT INTO "extent" VALUES('EPSG','1105','Gibraltar','Gibraltar - onshore and offshore.',36.0,36.16,-5.42,-4.89,0); INSERT INTO "extent" VALUES('EPSG','1106','Greece','Greece - onshore and offshore. Includes Aegean Islands, Ionian Islands, Dodecanese Islands, Crete, and Mount Athos.',33.26,41.75,18.26,30.23,0); INSERT INTO "extent" VALUES('EPSG','1107','Greenland','Greenland - onshore and offshore.',56.38,87.02,-75.0,7.99,0); INSERT INTO "extent" VALUES('EPSG','1108','Grenada','Grenada and southern Grenadine Islands - onshore and offshore.',11.36,13.4,-63.28,-60.82,0); INSERT INTO "extent" VALUES('EPSG','1109','Guadeloupe','Guadeloupe - onshore and offshore. Includes Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade.',15.06,18.54,-62.82,-57.54,0); INSERT INTO "extent" VALUES('EPSG','1110','Guam','Guam - onshore and offshore.',10.95,15.91,141.19,148.18,0); INSERT INTO "extent" VALUES('EPSG','1111','Guatemala','Guatemala - onshore and offshore.',10.6,17.83,-94.57,-88.16,0); INSERT INTO "extent" VALUES('EPSG','1112','Guinea','Guinea - onshore and offshore.',7.19,12.68,-18.26,-7.65,0); INSERT INTO "extent" VALUES('EPSG','1113','Guinea-Bissau','Guinea-Bissau - onshore and offshore.',8.64,12.69,-19.8,-13.64,0); INSERT INTO "extent" VALUES('EPSG','1114','Guyana','Guyana - onshore and offshore.',1.18,10.7,-61.39,-55.77,0); INSERT INTO "extent" VALUES('EPSG','1115','Haiti','Haiti - onshore and offshore.',14.73,20.72,-75.73,-71.62,0); INSERT INTO "extent" VALUES('EPSG','1116','Heard Island and McDonald Islands','Heard Island and McDonald Islands - onshore and offshore.',-59.02,-49.5,62.92,83.57,0); INSERT INTO "extent" VALUES('EPSG','1117','Honduras','Honduras - onshore and offshore. Includes Swan Islands.',12.98,19.59,-89.36,-79.87,0); INSERT INTO "extent" VALUES('EPSG','1118','Hong Kong','China - Hong Kong - onshore and offshore.',22.13,22.58,113.76,114.51,0); INSERT INTO "extent" VALUES('EPSG','1119','Hungary','Hungary.',45.74,48.58,16.11,22.9,0); INSERT INTO "extent" VALUES('EPSG','1120','Iceland','Iceland - onshore and offshore.',59.96,69.59,-30.87,-5.55,0); INSERT INTO "extent" VALUES('EPSG','1121','India','India - onshore and offshore. Includes Amandivis, Laccadives, Minicoy, Andaman Islands, Nicobar Islands, and Sikkim.',3.87,35.51,65.6,97.42,0); INSERT INTO "extent" VALUES('EPSG','1122','Indonesia','Indonesia - onshore and offshore.',-13.95,7.79,92.01,141.46,0); INSERT INTO "extent" VALUES('EPSG','1123','Iran','Iran - onshore and offshore.',23.34,39.78,44.03,63.34,0); INSERT INTO "extent" VALUES('EPSG','1124','Iraq','Iraq - onshore and offshore.',29.06,37.39,38.79,48.75,0); INSERT INTO "extent" VALUES('EPSG','1125','Ireland','Ireland - onshore and offshore.',48.18,56.57,-16.1,-5.24,0); INSERT INTO "extent" VALUES('EPSG','1126','Israel','Israel - onshore and offshore.',29.45,33.53,32.99,35.69,0); INSERT INTO "extent" VALUES('EPSG','1127','Italy','Italy - onshore and offshore.',34.76,47.1,5.93,18.99,0); INSERT INTO "extent" VALUES('EPSG','1128','Jamaica','Jamaica - onshore and offshore. Includes Morant Cays and Pedro Cays.',14.08,19.36,-80.6,-74.51,0); INSERT INTO "extent" VALUES('EPSG','1129','Japan','Japan - onshore and offshore.',17.09,46.05,122.38,157.65,0); INSERT INTO "extent" VALUES('EPSG','1130','Jordan','Jordan.',29.18,33.38,34.88,39.31,0); INSERT INTO "extent" VALUES('EPSG','1131','Kazakhstan','Kazakhstan - onshore including Caspian Sea.',40.59,55.45,46.49,87.35,0); INSERT INTO "extent" VALUES('EPSG','1132','Kenya','Kenya - onshore and offshore.',-4.9,4.63,33.9,44.28,0); INSERT INTO "extent" VALUES('EPSG','1133','Kiribati','Kiribati - onshore and offshore. Includes Fanning Island, Washington Island and Christmas in the Line Islands, Ocean Islands, Phoenix Islands.',-13.84,7.92,167.81,-146.82,0); INSERT INTO "extent" VALUES('EPSG','1134','North Korea','Democratic People''s Republic of Korea (North Korea) - onshore and offshore.',37.1,43.01,123.54,132.82,0); INSERT INTO "extent" VALUES('EPSG','1135','South Korea','Republic of Korea (South Korea) - onshore and offshore.',28.6,40.27,122.71,134.28,0); INSERT INTO "extent" VALUES('EPSG','1136','Kuwait','Kuwait - onshore and offshore.',28.53,30.09,46.54,49.53,0); INSERT INTO "extent" VALUES('EPSG','1137','Kyrgyzstan','Kyrgyzstan.',39.19,43.22,69.24,80.29,0); INSERT INTO "extent" VALUES('EPSG','1138','Laos','Laos.',13.92,22.5,100.09,107.64,0); INSERT INTO "extent" VALUES('EPSG','1139','Latvia','Latvia - onshore and offshore.',55.67,58.09,19.06,28.24,0); INSERT INTO "extent" VALUES('EPSG','1140','Lebanon','Lebanon - onshore and offshore.',33.06,34.84,33.75,36.63,0); INSERT INTO "extent" VALUES('EPSG','1141','Lesotho','Lesotho.',-30.66,-28.57,27.01,29.46,0); INSERT INTO "extent" VALUES('EPSG','1142','Liberia','Liberia - onshore and offshore.',1.02,8.52,-13.59,-7.36,0); INSERT INTO "extent" VALUES('EPSG','1143','Libya','Libya - onshore and offshore.',19.5,35.23,9.31,26.21,0); INSERT INTO "extent" VALUES('EPSG','1144','Liechtenstein','Liechtenstein.',47.05,47.28,9.47,9.64,0); INSERT INTO "extent" VALUES('EPSG','1145','Lithuania','Lithuania - onshore and offshore.',53.89,56.45,19.02,26.82,0); INSERT INTO "extent" VALUES('EPSG','1146','Luxembourg','Luxembourg.',49.44,50.19,5.73,6.53,0); INSERT INTO "extent" VALUES('EPSG','1147','Macao','China - Macao - onshore and offshore.',22.06,22.23,113.52,113.68,0); INSERT INTO "extent" VALUES('EPSG','1148','North Macedonia','North Macedonia.',40.85,42.36,20.45,23.04,0); INSERT INTO "extent" VALUES('EPSG','1149','Madagascar - onshore and nearshore','Madagascar - onshore and nearshore.',-26.59,-11.69,42.53,51.03,0); INSERT INTO "extent" VALUES('EPSG','1150','Malawi','Malawi.',-17.14,-9.37,32.68,35.93,0); INSERT INTO "extent" VALUES('EPSG','1151','Malaysia','Malaysia - onshore and offshore. Includes peninsular Malayasia, Sabah and Sarawak.',0.85,7.81,98.02,119.61,0); INSERT INTO "extent" VALUES('EPSG','1152','Maldives','Maldives - onshore and offshore.',-3.47,8.1,69.29,77.08,0); INSERT INTO "extent" VALUES('EPSG','1153','Mali','Mali.',10.14,25.01,-12.25,4.26,0); INSERT INTO "extent" VALUES('EPSG','1154','Malta','Malta - onshore and offshore.',34.49,36.56,13.41,18.06,0); INSERT INTO "extent" VALUES('EPSG','1155','Marshall Islands','Marshall Islands - onshore and offshore.',1.77,17.88,157.47,175.52,0); INSERT INTO "extent" VALUES('EPSG','1156','Martinique','Martinique - onshore and offshore.',14.08,16.36,-62.82,-57.52,0); INSERT INTO "extent" VALUES('EPSG','1157','Mauritania','Mauritania - onshore and offshore.',14.72,27.3,-20.04,-4.8,0); INSERT INTO "extent" VALUES('EPSG','1158','Mauritius','Mauritius - onshore and offshore. Includes Rodrigues, Agalega Islands, and Cargados Carajos.',-23.81,-8.43,53.8,67.05,0); INSERT INTO "extent" VALUES('EPSG','1159','Mayotte','Mayotte - onshore and offshore.',-14.49,-11.33,43.68,46.7,0); INSERT INTO "extent" VALUES('EPSG','1160','Mexico','Mexico - onshore and offshore.',12.1,32.72,-122.19,-84.64,0); INSERT INTO "extent" VALUES('EPSG','1161','Micronesia','Federated States of Micronesia - onshore and offshore. Includes Caroline Islands, Yap, Truk, Ponape, Kosrae.',-1.19,13.43,135.27,165.68,0); INSERT INTO "extent" VALUES('EPSG','1162','Moldova','Moldova.',45.44,48.47,26.63,30.13,0); INSERT INTO "extent" VALUES('EPSG','1163','Monaco','Monaco - onshore and offshore.',42.94,43.77,7.39,7.76,0); INSERT INTO "extent" VALUES('EPSG','1164','Mongolia','Mongolia.',41.58,52.15,87.76,119.94,0); INSERT INTO "extent" VALUES('EPSG','1165','Montserrat','Montserrat - onshore and offshore.',15.84,17.04,-63.05,-61.82,0); INSERT INTO "extent" VALUES('EPSG','1166','Morocco','Morocco - onshore and offshore.',27.66,36.0,-13.86,-1.01,0); INSERT INTO "extent" VALUES('EPSG','1167','Mozambique','Mozambique - onshore and offshore.',-27.71,-10.09,30.21,43.03,0); INSERT INTO "extent" VALUES('EPSG','1168','Myanmar (Burma)','Myanmar (Burma) - onshore and offshore.',9.48,28.55,89.61,101.17,0); INSERT INTO "extent" VALUES('EPSG','1169','Namibia','Namibia - onshore and offshore.',-30.64,-16.95,8.24,25.27,0); INSERT INTO "extent" VALUES('EPSG','1170','Nauru','Nauru - onshore and offshore.',-3.91,2.69,163.58,168.6,0); INSERT INTO "extent" VALUES('EPSG','1171','Nepal','Nepal.',26.34,30.43,80.06,88.21,0); INSERT INTO "extent" VALUES('EPSG','1172','Netherlands','Netherlands - onshore and offshore.',50.75,55.77,2.53,7.22,0); INSERT INTO "extent" VALUES('EPSG','1173','Netherlands Antilles','Netherlands Antilles - onshore and offshore. Includes Bonaire, Curacao, Saba, St Eustatius, and southern St Martin',11.67,18.07,-69.59,-62.82,1); INSERT INTO "extent" VALUES('EPSG','1174','New Caledonia','New Caledonia - onshore and offshore. Isle de Pins, Loyalty Islands, Huon Islands, Belep archipelago, Chesterfield Islands, and Walpole.',-26.45,-14.83,156.25,174.28,0); INSERT INTO "extent" VALUES('EPSG','1175','New Zealand','New Zealand - onshore and offshore. Includes Antipodes Islands, Auckland Islands, Bounty Islands, Chatham Islands, Cambell Island, Kermadec Islands, Raoul Island and Snares Islands.',-55.95,-25.88,160.6,-171.2,0); INSERT INTO "extent" VALUES('EPSG','1176','Nicaragua','Nicaragua - onshore and offshore.',9.75,16.26,-89.43,-79.76,0); INSERT INTO "extent" VALUES('EPSG','1177','Niger','Niger.',11.69,23.53,0.16,16.0,0); INSERT INTO "extent" VALUES('EPSG','1178','Nigeria','Nigeria - onshore and offshore.',1.92,13.9,2.66,14.65,0); INSERT INTO "extent" VALUES('EPSG','1179','Niue','Niue - onshore and offshore.',-22.49,-16.58,-172.01,-166.31,0); INSERT INTO "extent" VALUES('EPSG','1180','Norfolk Island','Norfolk Island - onshore and offshore.',-32.48,-25.61,163.36,173.35,0); INSERT INTO "extent" VALUES('EPSG','1181','Northern Mariana Islands','Northern Mariana Islands - onshore and offshore.',12.38,23.9,141.33,149.55,0); INSERT INTO "extent" VALUES('EPSG','1182','Norway','Norway including Svalbard - onshore and offshore.',56.08,84.73,-3.35,38.01,0); INSERT INTO "extent" VALUES('EPSG','1183','Oman','Oman - onshore and offshore.',14.33,26.74,51.99,63.38,0); INSERT INTO "extent" VALUES('EPSG','1184','Pakistan','Pakistan - onshore and offshore.',21.05,37.07,60.86,77.83,0); INSERT INTO "extent" VALUES('EPSG','1185','Palau','Palau - onshore and offshore.',1.64,11.45,129.48,136.98,0); INSERT INTO "extent" VALUES('EPSG','1186','Panama','Panama - onshore and offshore.',5.0,12.51,-84.32,-77.04,0); INSERT INTO "extent" VALUES('EPSG','1187','Papua New Guinea','Papua New Guinea - onshore and offshore. Includes Bismark archipelago, Louisade archipelago, Admiralty Islands, d''Entrecasteaux Islands, northern Solomon Islands, Trobriand Islands, New Britain, New Ireland, Woodlark, and associated islands.',-14.75,2.58,139.2,162.81,0); INSERT INTO "extent" VALUES('EPSG','1188','Paraguay','Paraguay.',-27.59,-19.29,-62.65,-54.24,0); INSERT INTO "extent" VALUES('EPSG','1189','Peru','Peru - onshore and offshore.',-21.05,-0.03,-84.68,-68.67,0); INSERT INTO "extent" VALUES('EPSG','1190','Philippines','Philippines - onshore and offshore.',3.0,22.18,116.04,129.95,0); INSERT INTO "extent" VALUES('EPSG','1191','Pitcairn','Pitcairn - Pitcairn Island, Henderson Island, Ducie Island and Oeno Atoll.',-28.41,-20.58,-133.43,-121.11,0); INSERT INTO "extent" VALUES('EPSG','1192','Poland','Poland - onshore and offshore.',49.0,55.93,14.14,24.15,0); INSERT INTO "extent" VALUES('EPSG','1193','Portugal','Portugal - mainland, Azores and Madeira, onshore and offshore.',29.24,43.07,-35.58,-6.19,0); INSERT INTO "extent" VALUES('EPSG','1194','Puerto Rico','Puerto Rico - onshore and offshore.',14.92,21.86,-68.49,-65.04,0); INSERT INTO "extent" VALUES('EPSG','1195','Qatar','Qatar - onshore and offshore.',24.55,27.05,50.55,53.04,0); INSERT INTO "extent" VALUES('EPSG','1196','Reunion','Reunion - onshore and offshore - Reunion island, Ile Europa, Bassas da India, Juan de Nova, Iles Glorieuses, and Ile Tromelin.',-25.92,-10.6,37.58,58.27,1); INSERT INTO "extent" VALUES('EPSG','1197','Romania','Romania - onshore and offshore.',43.44,48.27,20.26,31.41,0); INSERT INTO "extent" VALUES('EPSG','1198','Russia','Russian Federation - onshore and offshore.',39.87,85.19,18.92,-168.97,0); INSERT INTO "extent" VALUES('EPSG','1199','Rwanda','Rwanda.',-2.83,-1.05,28.85,30.9,0); INSERT INTO "extent" VALUES('EPSG','1200','St Kitts and Nevis','St Kitts and Nevis - onshore and offshore.',16.34,17.67,-63.63,-62.2,0); INSERT INTO "extent" VALUES('EPSG','1201','St Lucia','St Lucia - onshore and offshore.',13.23,14.28,-62.8,-59.99,0); INSERT INTO "extent" VALUES('EPSG','1202','St Vincent and the Grenadines','St Vincent and the northern Grenadine Islands - onshore and offshore.',12.03,14.09,-63.38,-60.28,0); INSERT INTO "extent" VALUES('EPSG','1203','Samoa','Samoa - onshore and offshore.',-15.84,-10.94,-174.54,-170.51,0); INSERT INTO "extent" VALUES('EPSG','1204','San Marino','San Marino.',43.89,43.99,12.4,12.52,0); INSERT INTO "extent" VALUES('EPSG','1205','Sao Tome and Principe','Sao Tome and Principe - onshore and offshore.',-1.49,2.72,3.2,8.56,0); INSERT INTO "extent" VALUES('EPSG','1206','Saudi Arabia','Saudi Arabia - onshore and offshore.',16.29,32.16,34.44,55.67,0); INSERT INTO "extent" VALUES('EPSG','1207','Senegal','Senegal - onshore and offshore.',10.64,16.7,-20.22,-11.36,0); INSERT INTO "extent" VALUES('EPSG','1208','Seychelles','Seychelles - onshore and offshore - Alphonse, Bijoutier, St Francois Islands, St Pierre islet, Cosmoledo Islands, Amirantes, Aldabra, Farquhar, and Desroches.',-12.72,-0.37,43.19,59.66,0); INSERT INTO "extent" VALUES('EPSG','1209','Sierra Leone','Sierra Leone - onshore and offshore.',4.22,10.0,-16.57,-10.26,0); INSERT INTO "extent" VALUES('EPSG','1210','Singapore','Singapore - onshore and offshore.',1.13,1.47,103.59,104.07,0); INSERT INTO "extent" VALUES('EPSG','1211','Slovakia','Slovakia.',47.73,49.61,16.84,22.56,0); INSERT INTO "extent" VALUES('EPSG','1212','Slovenia','Slovenia - onshore and offshore.',45.42,46.88,13.38,16.61,0); INSERT INTO "extent" VALUES('EPSG','1213','Solomon Islands - onshore main islands','Solomon Islands - onshore southern Solomon Islands, primarily Guadalcanal, Malaita, San Cristobel, Santa Isobel, Choiseul, Makira-Ulawa.',-10.9,-6.55,155.62,162.44,0); INSERT INTO "extent" VALUES('EPSG','1214','Somalia','Somalia - onshore and offshore.',-3.61,13.5,40.98,54.43,0); INSERT INTO "extent" VALUES('EPSG','1215','South Africa','South Africa - onshore and offshore, including Marion Island, and Prince Edward Island.',-50.32,-22.13,13.33,42.85,0); INSERT INTO "extent" VALUES('EPSG','1216','South Georgia and the South Sandwich Islands','South Georgia and the South Sandwich Islands - onshore and offshore.',-62.79,-50.15,-48.06,-19.84,0); INSERT INTO "extent" VALUES('EPSG','1217','Spain','Spain - mainland, Balearic Islands, Canary Islands, Ceuta and Melila - onshore and offshore.',24.6,46.26,-21.93,6.3,0); INSERT INTO "extent" VALUES('EPSG','1218','Sri Lanka','Sri Lanka - onshore and offshore.',2.58,11.45,77.02,85.24,0); INSERT INTO "extent" VALUES('EPSG','1219','St Helena, Ascension and Tristan da Cunha','St Helena, Ascension and Tristan da Cunha archipelago (Gough, Inaccessible, Nightingale and Stoltenhoff Islands) - onshore and offshore.',-43.71,-4.55,-17.79,-2.16,0); INSERT INTO "extent" VALUES('EPSG','1220','St Pierre and Miquelon','St Pierre and Miquelon - onshore and offshore.',43.41,47.37,-57.1,-55.9,0); INSERT INTO "extent" VALUES('EPSG','1221','Sudan','Sudan - onshore and offshore.',8.64,22.24,21.82,39.76,0); INSERT INTO "extent" VALUES('EPSG','1222','Suriname','Suriname - onshore and offshore.',1.83,9.35,-58.08,-52.66,0); INSERT INTO "extent" VALUES('EPSG','1223','Svalbard and Jan Mayen','Svalbard and Jan Mayen - onshore and offshore. Includes Bear Island.',66.24,85.05,-16.22,35.02,1); INSERT INTO "extent" VALUES('EPSG','1224','Eswatini','Eswatini (Swaziland).',-27.32,-25.72,30.79,32.14,0); INSERT INTO "extent" VALUES('EPSG','1225','Sweden','Sweden - onshore and offshore.',54.96,69.07,10.03,24.17,0); INSERT INTO "extent" VALUES('EPSG','1226','Switzerland','Switzerland.',45.82,47.81,5.96,10.49,0); INSERT INTO "extent" VALUES('EPSG','1227','Syria','Syria - onshore and offshore.',32.31,37.3,34.96,42.38,0); INSERT INTO "extent" VALUES('EPSG','1228','Taiwan','Taiwan, Republic of China - onshore and offshore - Taiwan Island, Penghu (Pescadores) Islands.',17.36,26.96,114.32,123.61,0); INSERT INTO "extent" VALUES('EPSG','1229','Tajikistan','Tajikistan.',36.67,41.05,67.36,75.19,0); INSERT INTO "extent" VALUES('EPSG','1230','Tanzania','Tanzania - onshore and offshore.',-11.75,-0.99,29.34,43.29,0); INSERT INTO "extent" VALUES('EPSG','1231','Thailand','Thailand - onshore and offshore.',5.63,20.46,95.52,105.64,0); INSERT INTO "extent" VALUES('EPSG','1232','Togo','Togo - onshore and offshore.',2.91,11.14,-0.15,2.42,0); INSERT INTO "extent" VALUES('EPSG','1233','Tokelau','Tokelau - onshore and offshore.',-11.04,-6.46,-175.86,-167.98,0); INSERT INTO "extent" VALUES('EPSG','1234','Tonga','Tonga - onshore and offshore.',-25.68,-14.14,-179.08,-171.28,0); INSERT INTO "extent" VALUES('EPSG','1235','Trinidad and Tobago','Trinidad and Tobago - onshore and offshore.',9.83,12.34,-62.09,-57.28,0); INSERT INTO "extent" VALUES('EPSG','1236','Tunisia','Tunisia - onshore and offshore.',30.23,38.41,7.49,13.67,0); INSERT INTO "extent" VALUES('EPSG','1237','Turkey','Türkiye (Turkey) - onshore and offshore.',34.42,43.45,25.62,44.83,0); INSERT INTO "extent" VALUES('EPSG','1238','Turkmenistan','Turkmenistan - onshore and offshore.',35.14,42.8,51.3,66.68,0); INSERT INTO "extent" VALUES('EPSG','1239','Turks and Caicos Islands','Turks and Caicos Islands - onshore and offshore.',20.54,25.07,-72.82,-67.66,0); INSERT INTO "extent" VALUES('EPSG','1240','Tuvalu','Tuvalu - onshore and offshore. Funafuti, Nanumanga, Nui, Nanomea, Nurakita, Niutao, Nukufetau, Nukulaelae, and Vaitupu.',-13.24,-4.0,172.73,-176.71,0); INSERT INTO "extent" VALUES('EPSG','1241','Uganda','Uganda.',-1.48,4.23,29.57,35.01,0); INSERT INTO "extent" VALUES('EPSG','1242','Ukraine','Ukraine - onshore and offshore.',43.18,52.38,22.15,40.18,0); INSERT INTO "extent" VALUES('EPSG','1243','UAE','United Arab Emirates (UAE) - onshore and offshore. Abu Dhabi, Dubai, Sharjah, Umm al Qaywayn, Al Fujairah, Ras al Khaymah.',22.63,26.27,51.5,57.13,0); INSERT INTO "extent" VALUES('EPSG','1244','UK','United Kingdom (UK) - onshore and offshore - England, Scotland including Orkney and Shetland Islands, Wales, Northern Ireland (Ulster).',47.42,63.89,-14.89,3.4,0); INSERT INTO "extent" VALUES('EPSG','1245','USA','United States (USA) - onshore and offshore.',15.56,74.71,167.65,-65.69,0); INSERT INTO "extent" VALUES('EPSG','1246','United States Minor Outlying Islands','United States Minor Outlying Islands - onshore and offshore - Baker Island, Howland Islands, Jarvis Island, Johnston Atoll, Kingman Reef, Midway Islands, Palmyra Islands, and Wake Island.',-3.74,31.8,163.07,-157.41,0); INSERT INTO "extent" VALUES('EPSG','1247','Uruguay','Uruguay - onshore and offshore.',-37.77,-30.09,-58.49,-50.01,0); INSERT INTO "extent" VALUES('EPSG','1248','Uzbekistan','Uzbekistan.',37.18,45.58,55.99,73.17,0); INSERT INTO "extent" VALUES('EPSG','1249','Vanuatu','Vanuatu - onshore and offshore.',-21.65,-12.27,163.16,173.59,0); INSERT INTO "extent" VALUES('EPSG','1250','Vatican','Holy See (Vatican City State).',41.9,41.91,12.44,12.46,0); INSERT INTO "extent" VALUES('EPSG','1251','Venezuela','Venezuela - onshore and offshore.',0.64,16.75,-73.38,-58.95,0); INSERT INTO "extent" VALUES('EPSG','1252','Vietnam','Vietnam - onshore and offshore.',5.67,23.4,102.14,112.55,0); INSERT INTO "extent" VALUES('EPSG','1253','Virgin Islands, British','British Virgin Islands - onshore and offshore - Anegada, Jost Van Dyke, Tortola, and Virgin Gorda.',17.96,22.09,-65.85,-63.29,0); INSERT INTO "extent" VALUES('EPSG','1254','Virgin Islands, US','US Virgin Islands - onshore and offshore - St Croix, St John, and St Thomas.',16.22,21.83,-66.05,-63.88,0); INSERT INTO "extent" VALUES('EPSG','1255','Wallis and Futuna','Wallis and Futuna - onshore and offshore - Uvea, Futuna, and Alofi.',-15.94,-9.84,179.49,-174.27,0); INSERT INTO "extent" VALUES('EPSG','1256','Western Sahara','Western Sahara - onshore and offshore.',18.98,27.67,-20.68,-8.66,0); INSERT INTO "extent" VALUES('EPSG','1257','Yemen','Yemen - onshore and offshore.',8.95,19.0,41.08,57.96,0); INSERT INTO "extent" VALUES('EPSG','1258','Yugoslavia - Serbia and Montenegro','Yugoslavia - Union of Serbia and Montenegro - onshore and offshore.',41.82,46.23,18.44,23.05,1); INSERT INTO "extent" VALUES('EPSG','1259','Congo DR (Zaire)','The Democratic Republic of the Congo (Zaire) - onshore and offshore.',-13.46,5.39,11.79,31.31,0); INSERT INTO "extent" VALUES('EPSG','1260','Zambia','Zambia.',-18.08,-8.19,21.99,33.71,0); INSERT INTO "extent" VALUES('EPSG','1261','Zimbabwe','Zimbabwe.',-22.42,-15.61,25.23,33.08,0); INSERT INTO "extent" VALUES('EPSG','1262','World','World.',-90.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1263','Not specified','Not specified.',-90.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1264','UK - Great Britain onshore and nearshore; Isle of Man','United Kingdom (UK) - Great Britain - England and Wales onshore, Scotland onshore and Western Isles nearshore including Sea of the Hebrides and The Minch; Isle of Man onshore.',49.79,60.94,-8.82,1.92,0); INSERT INTO "extent" VALUES('EPSG','1265','Argentina - Comodoro Rivadavia','Argentina - Comodoro Rivadavia area.',-46.7,-45.19,-69.5,-67.1,0); INSERT INTO "extent" VALUES('EPSG','1266','Venezuela - Puerto La Cruz','Venezuela - Puerto La Cruz area.',10.0,10.31,-64.7,-64.5,0); INSERT INTO "extent" VALUES('EPSG','1267','Venezuela - Barinas','Venezuela - Barinas area.',7.31,9.07,-71.49,-67.58,0); INSERT INTO "extent" VALUES('EPSG','1268','Venezuela - Falcon state','Venezuela - Falcon state.',10.3,12.25,-71.3,-68.19,0); INSERT INTO "extent" VALUES('EPSG','1269','Venezuela - Pedregal area of Falcon state','Venezuela - Pedregal area of Falcon state.',10.8,11.26,-70.4,-69.69,0); INSERT INTO "extent" VALUES('EPSG','1270','Venezuela - Maracaibo south','Venezuela - south Maracaibo area.',8.72,10.01,-72.4,-70.78,0); INSERT INTO "extent" VALUES('EPSG','1271','Africa - Eritrea, Ethiopia, South Sudan and Sudan','Eritrea; Ethiopia; South Sudan; Sudan.',3.4,22.24,21.82,47.99,0); INSERT INTO "extent" VALUES('EPSG','1272','Asia - Middle East - Bahrain, Kuwait and Saudi Arabia','Bahrain, Kuwait and Saudi Arabia - onshore.',16.37,32.16,34.51,55.67,0); INSERT INTO "extent" VALUES('EPSG','1273','Antigua - onshore','Antigua island - onshore.',16.94,17.22,-61.95,-61.61,0); INSERT INTO "extent" VALUES('EPSG','1274','Brazil - Aratu','Brazil - offshore south and east of a line intersecting the coast at 2°55''S; onshore Tucano basin.',-35.71,4.26,-53.38,-26.0,0); INSERT INTO "extent" VALUES('EPSG','1275','Netherlands - onshore','Netherlands - onshore, including Waddenzee, Dutch Wadden Islands and 12-mile offshore coastal zone.',50.75,53.7,3.2,7.22,0); INSERT INTO "extent" VALUES('EPSG','1276','Africa - Botswana, Malawi, Zambia, Zimbabwe','Botswana; Malawi; Zambia; Zimbabwe.',-26.88,-8.19,19.99,35.93,0); INSERT INTO "extent" VALUES('EPSG','1277','Africa - Burundi, Kenya, Rwanda, Tanzania and Uganda','Burundi, Kenya, Rwanda, Tanzania and Uganda.',-11.75,4.63,28.85,41.91,0); INSERT INTO "extent" VALUES('EPSG','1278','Antarctica - Australian sector','Antarctica between 45°E and 136°E and between 142°E and 160°E - Australian sector.',-90.0,-60.0,45.0,160.0,0); INSERT INTO "extent" VALUES('EPSG','1279','Australasia - Australia and PNG - AGD66','Australia - onshore and offshore. Papua New Guinea - onshore.',-47.2,-1.3,109.23,163.2,0); INSERT INTO "extent" VALUES('EPSG','1280','Australia - Western Australia','Australia - Western Australia.',-35.19,-13.67,112.85,129.01,0); INSERT INTO "extent" VALUES('EPSG','1281','Australia - mainland','Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Western Australia; Victoria.',-39.2,-10.65,112.85,153.69,0); INSERT INTO "extent" VALUES('EPSG','1282','Australia - Tasmania','Australia - Tasmania including islands - onshore.',-43.7,-39.52,143.77,148.55,0); INSERT INTO "extent" VALUES('EPSG','1283','Canada - Maritime Provinces','Canada - New Brunswick; Nova Scotia; Prince Edward Island.',43.41,48.07,-69.05,-59.73,0); INSERT INTO "extent" VALUES('EPSG','1284','Europe - FSU, Czechoslovakia - onshore','Armenia; Azerbaijan; Belarus; Czechia; Estonia - onshore; Georgia - onshore; Kazakhstan; Kyrgyzstan; Latvia - onshore; Lithuania - onshore; Moldova; Russian Federation - onshore; Slovakia; Tajikistan; Turkmenistan; Ukraine - onshore; Uzbekistan.',35.14,77.79,12.09,-169.57,0); INSERT INTO "extent" VALUES('EPSG','1285','Indonesia - Bali, Java and western Sumatra onshore','Indonesia - onshore - Bali, Java and western Sumatra.',-8.91,5.97,95.16,115.77,0); INSERT INTO "extent" VALUES('EPSG','1286','Europe - Liechtenstein and Switzerland','Liechtenstein; Switzerland.',45.82,47.81,5.96,10.49,0); INSERT INTO "extent" VALUES('EPSG','1287','Indonesia - Banga & Belitung Islands','Indonesia - Banga and Belitung Islands.',-3.3,-1.44,105.07,108.35,0); INSERT INTO "extent" VALUES('EPSG','1288','Angola - Angola proper','Angola - Angola proper - onshore and offshore.',-18.02,-5.82,8.2,24.09,0); INSERT INTO "extent" VALUES('EPSG','1289','Canada - CGVD28','Canada - onshore - Alberta; British Columbia; Manitoba south of 59°N; New Brunswick; Newfoundland, Labrador between 52°50’N and 54°30’N; Northwest Territories south west of a line between 60°40’N, 110°W and the coast at 132°W; Nova Scotia; Ontario south of 52°20''N; Prince Edward Island; Quebec - mainland south of 55°N and west of 64°W, north of 55°N between 70°W and 66°W, coastal area between 66°W and 64°W, and Anticosta island; Saskatchewan south of 58°30’N; Yukon.',41.67,69.81,-141.01,-52.54,0); INSERT INTO "extent" VALUES('EPSG','1290','Africa - Botswana, Eswatini, Lesotho and South Africa','Botswana; Eswatini (Swaziland); Lesotho; South Africa - mainland.',-34.88,-17.78,16.45,32.95,0); INSERT INTO "extent" VALUES('EPSG','1291','Asia - FSU - Caspian Sea','Azerbaijan - offshore; Kazakhstan - offshore; Russian Federation - Caspian Sea; Turkmenistan - offshore.',37.35,46.97,46.95,53.93,0); INSERT INTO "extent" VALUES('EPSG','1292','Argentina - Neuquen province','Argentina - Neuquen province.',-40.17,-34.26,-71.19,-66.52,0); INSERT INTO "extent" VALUES('EPSG','1293','Brazil - Corrego Alegre 1970-1972','Brazil - onshore - west of 54°W and south of 18°S; also south of 15°S between 54°W and 42°W; also east of 42°W.',-33.78,-2.68,-58.16,-34.74,0); INSERT INTO "extent" VALUES('EPSG','1294','Portugal - mainland - onshore','Portugal - mainland - onshore.',36.95,42.16,-9.56,-6.19,0); INSERT INTO "extent" VALUES('EPSG','1295','Germany - DHDN','Germany - onshore - Baden-Wurtemberg, Bayern, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein. Also former DDR states of Sachsen and Thuringen by transformation.',47.27,55.06,5.87,15.03,1); INSERT INTO "extent" VALUES('EPSG','1296','Europe - ED50 by country','Europe - west: Andorra; Cyprus; Denmark - onshore and offshore; Faroe Islands - onshore; France - offshore; Germany - offshore North Sea; Gibraltar; Greece - offshore; Israel - offshore; Italy including San Marino and Vatican City State; Ireland offshore; Malta; Netherlands - offshore; North Sea; Norway including Svalbard - onshore and offshore; Portugal - mainland - offshore; Spain - onshore; Türkiye (Turkey) - onshore and offshore; United Kingdom - UKCS offshore east of 6°W including Channel Islands (Guernsey and Jersey). Egypt - Western Desert; Iraq - onshore; Jordan.',25.71,84.73,-16.1,48.61,0); INSERT INTO "extent" VALUES('EPSG','1297','Europe - west','Europe - west.',34.88,84.73,-10.56,38.01,0); INSERT INTO "extent" VALUES('EPSG','1298','Europe - ETRF','Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N.',33.26,84.73,-16.1,38.01,0); INSERT INTO "extent" VALUES('EPSG','1299','Europe - EVRF2000','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar; Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.24,-9.56,31.59,0); INSERT INTO "extent" VALUES('EPSG','1300','Iran - FD58','Iran - Arwaz area and onshore Gulf coast west of 54°E, Lavan Island, offshore Balal field and South Pars blocks 2 and 3.',26.21,33.22,47.13,53.61,0); INSERT INTO "extent" VALUES('EPSG','1301','Portugal - Azores C - onshore','Portugal - central Azores onshore - Faial, Graciosa, Pico, Sao Jorge, Terceira.',38.32,39.14,-28.9,-26.97,0); INSERT INTO "extent" VALUES('EPSG','1302','Asia - Cambodia and Vietnam - mainland','Cambodia - mainland onshore; Vietnam - mainland onshore.',8.33,23.4,102.14,109.53,0); INSERT INTO "extent" VALUES('EPSG','1303','South America - Tierra del Fuego','Chile - Tierra del Fuego, onshore; Argentina - Tierra del Fuego, onshore and offshore Atlantic west of 66°W.',-55.96,-51.65,-74.83,-63.73,0); INSERT INTO "extent" VALUES('EPSG','1304','Asia - Myanmar and Thailand onshore','Myanmar (Burma) - onshore; Thailand - onshore.',5.63,28.55,92.2,105.64,0); INSERT INTO "extent" VALUES('EPSG','1305','Europe - Ireland (Republic and Ulster) - onshore','Ireland - onshore. United Kingdom (UK) - Northern Ireland (Ulster) - onshore.',51.39,55.43,-10.56,-5.34,0); INSERT INTO "extent" VALUES('EPSG','1306','Europe - Czechoslovakia','Czechia; Slovakia.',47.73,51.06,12.09,22.56,0); INSERT INTO "extent" VALUES('EPSG','1307','Asia - Bangladesh; India; Myanmar; Pakistan - onshore','Bangladesh - onshore; India - mainland onshore; Myanmar (Burma) - onshore; Pakistan - onshore.',8.02,37.07,60.86,101.17,0); INSERT INTO "extent" VALUES('EPSG','1308','Asia - Bangladesh; India; Myanmar; Pakistan - onshore','Bangladesh - onshore; India - mainland onshore; Myanmar - onshore and Moattama area offshore; Pakistan - onshore.',8.02,37.07,60.86,101.17,0); INSERT INTO "extent" VALUES('EPSG','1309','Asia - Malaysia (west) and Singapore','Malaysia - West Malaysia; Singapore.',1.13,6.72,99.59,104.6,0); INSERT INTO "extent" VALUES('EPSG','1310','Kuwait - Kuwait City','Kuwait - Kuwait City.',29.17,29.45,47.78,48.16,0); INSERT INTO "extent" VALUES('EPSG','1311','Venezuela - Cabimas','Venezuela - Cabimas area.',10.14,10.61,-71.55,-71.29,0); INSERT INTO "extent" VALUES('EPSG','1312','Venezuela - Lake Maracaibo','Venezuela - Lake Maracaibo area, onshore and offshore in lake.',8.72,11.04,-72.4,-70.78,0); INSERT INTO "extent" VALUES('EPSG','1313','Venezuela - north of 7°45''N','Venezuela - onshore north of approximately 7°45''N.',7.75,12.25,-73.38,-59.8,0); INSERT INTO "extent" VALUES('EPSG','1314','Portugal - Madeira archipelago onshore','Portugal - Madeira, Porto Santo and Desertas islands - onshore.',32.35,33.15,-17.31,-16.23,0); INSERT INTO "extent" VALUES('EPSG','1315','Mozambique - west - Tete province','Mozambique - west - Tete province.',-17.76,-14.01,30.21,35.37,0); INSERT INTO "extent" VALUES('EPSG','1316','Indonesia - Sulawesi SW','Indonesia - south west Sulawesi.',-6.54,-1.88,118.71,120.78,0); INSERT INTO "extent" VALUES('EPSG','1317','Angola - Cabinda offshore','Angola - Cabinda offshore.',-6.04,-5.05,10.53,12.18,0); INSERT INTO "extent" VALUES('EPSG','1318','Angola - Cabinda','Angola - Cabinda.',-6.04,-4.38,10.53,13.1,0); INSERT INTO "extent" VALUES('EPSG','1319','Venezuela - Maracaibo area','Venezuela - Maracaibo area, onshore and offshore in lake.',10.0,11.0,-72.25,-71.5,0); INSERT INTO "extent" VALUES('EPSG','1320','Venezuela - Maturin','Venezuela - Maturin area.',9.1,10.13,-64.3,-63.0,0); INSERT INTO "extent" VALUES('EPSG','1321','Europe - Austria and former Yugoslavia onshore','Austria. Bosnia and Herzegovina. Croatia - onshore. Kosovo. Montenegro - onshore. North Macedonia. Serbia. Slovenia - onshore.',40.85,49.02,9.53,23.04,0); INSERT INTO "extent" VALUES('EPSG','1322','Trinidad and Tobago - Tobago - onshore','Trinidad and Tobago - Tobago - onshore.',11.08,11.41,-60.9,-60.44,0); INSERT INTO "extent" VALUES('EPSG','1323','USA - CONUS - onshore','United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',24.41,49.38,-124.79,-66.91,0); INSERT INTO "extent" VALUES('EPSG','1324','USA (all states)','United States (USA) - onshore and offshore - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Hawaii; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',15.56,74.71,167.65,-65.69,0); INSERT INTO "extent" VALUES('EPSG','1325','North America - Canada and USA (CONUS, Alaska mainland)','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. United States (USA) - Alabama; Alaska (mainland); Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',23.81,86.46,-172.54,-47.74,0); INSERT INTO "extent" VALUES('EPSG','1326','France - mainland onshore','France - mainland onshore.',42.33,51.14,-4.87,8.23,0); INSERT INTO "extent" VALUES('EPSG','1327','France - Corsica onshore','France - Corsica onshore.',41.31,43.07,8.5,9.63,0); INSERT INTO "extent" VALUES('EPSG','1328','Indonesia - Kalimantan - Mahakam delta','Indonesia - east Kalimantan - Mahakam delta coastal and offshore shelf areas.',-1.24,0.0,116.72,117.99,0); INSERT INTO "extent" VALUES('EPSG','1329','Mozambique - south','Mozambique - south.',-26.87,-19.84,31.29,35.65,0); INSERT INTO "extent" VALUES('EPSG','1330','USA - Alaska','United States (USA) - Alaska.',51.3,71.4,172.42,-129.99,0); INSERT INTO "extent" VALUES('EPSG','1331','USA - Alaska - St. George Island','United States (USA) - Alaska - Pribilof Islands - St George Island.',56.49,56.67,-169.88,-169.38,0); INSERT INTO "extent" VALUES('EPSG','1332','USA - Alaska - St. Lawrence Island','United States (USA) - Alaska - St Lawrence Island.',62.89,63.84,-171.97,-168.59,0); INSERT INTO "extent" VALUES('EPSG','1333','USA - Alaska - St. Paul Island','United States (USA) - Alaska - Pribilof Islands - St Paul Island.',57.06,57.28,-170.51,-170.04,0); INSERT INTO "extent" VALUES('EPSG','1334','USA - Hawaii - onshore','United States (USA) - Hawaii - main islands onshore.',18.87,22.29,-160.3,-154.74,0); INSERT INTO "extent" VALUES('EPSG','1335','Caribbean - Puerto Rico and Virgin Islands - onshore','Puerto Rico, US Virgin Islands and British Virgin Islands - onshore.',17.62,18.78,-67.97,-64.25,0); INSERT INTO "extent" VALUES('EPSG','1336','Canada - CSRS98','Canada - Alberta; New Brunswick; Saskatchewan; Prince Edward Island; and Quebec.',44.61,62.56,-120.0,-57.1,1); INSERT INTO "extent" VALUES('EPSG','1337','USA - HARN','American Samoa - onshore - Tutuila, Aunu''u, Ofu, Olesega, Ta''u and Rose islands. Guam - onshore. Northern Mariana Islands - onshore. Puerto Rico - onshore. United States (USA) - onshore Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin and Wyoming; offshore Gulf of Mexico continental shelf (GoM OCS). US Virgin Islands - onshore.',-14.59,71.4,144.58,-64.51,0); INSERT INTO "extent" VALUES('EPSG','1338','Iran - Taheri refinery','Iran - Taheri refinery site.',27.39,27.61,52.5,52.71,0); INSERT INTO "extent" VALUES('EPSG','1339','Trinidad and Tobago - Trinidad','Trinidad and Tobago - Trinidad - onshore and offshore.',9.83,11.51,-62.09,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1340','Yemen - South Yemen - mainland','Yemen - South Yemen onshore mainland.',12.54,19.0,43.37,53.14,0); INSERT INTO "extent" VALUES('EPSG','1341','South America by country','South America - Argentina, Brazil, Bolivia, Chile, Colombia, Ecuador, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela.',-56.15,13.0,-82.0,-34.0,1); INSERT INTO "extent" VALUES('EPSG','1342','Sierra Leone - Freetown Peninsula','Sierra Leone - Freetown Peninsula.',8.32,8.55,-13.34,-13.13,0); INSERT INTO "extent" VALUES('EPSG','1343','Germany - East Germany all states','Germany - states of former East Germany - Berlin, Brandenburg; Mecklenburg-Vorpommern; Sachsen; Sachsen-Anhalt; Thuringen.',50.2,54.74,9.92,15.04,0); INSERT INTO "extent" VALUES('EPSG','1344','Portugal - Azores W - onshore','Portugal - western Azores onshore - Flores, Corvo.',39.3,39.77,-31.34,-31.02,0); INSERT INTO "extent" VALUES('EPSG','1345','Portugal - Azores E - onshore','Portugal - eastern Azores onshore - Sao Miguel, Santa Maria, Formigas.',36.87,37.96,-25.92,-24.72,0); INSERT INTO "extent" VALUES('EPSG','1346','Qatar - onshore','Qatar - onshore.',24.55,26.2,50.69,51.68,0); INSERT INTO "extent" VALUES('EPSG','1347','Belgium - onshore','Belgium - onshore.',49.5,51.51,2.5,6.4,0); INSERT INTO "extent" VALUES('EPSG','1348','South America - PSAD56 by country','Aruba - onshore; Bolivia; Bonaire - onshore; Brazil - offshore - Amazon Cone shelf; Chile - onshore north of 43°30''S; Curacao - onshore; Ecuador - mainland onshore; Guyana - onshore; Peru - onshore; Venezuela - onshore.',-43.5,12.68,-81.41,-47.99,0); INSERT INTO "extent" VALUES('EPSG','1349','North America - NAD27','North and central America: Antigua and Barbuda - onshore. Bahamas - onshore plus offshore over internal continental shelf only. Belize - onshore. British Virgin Islands - onshore. Canada onshore - Alberta, British Columbia, Manitoba, New Brunswick, Newfoundland and Labrador, Northwest Territories, Nova Scotia, Nunavut, Ontario, Prince Edward Island, Quebec, Saskatchewan and Yukon - plus offshore east coast. Cuba - onshore and offshore. El Salvador - onshore. Guatemala - onshore. Honduras - onshore. Panama - onshore. Puerto Rico - onshore. Mexico - onshore plus offshore east coast. Nicaragua - onshore. United States (USA) onshore and offshore - Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin and Wyoming - plus offshore . US Virgin Islands - onshore.',7.15,83.17,167.65,-47.74,0); INSERT INTO "extent" VALUES('EPSG','1350','North America - NAD83','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. Puerto Rico. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Hawaii; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Virgin Islands. British Virgin Islands.',14.92,86.45,167.65,-40.73,0); INSERT INTO "extent" VALUES('EPSG','1351','Asia - Middle East - Qatar offshore and UAE','Arabian Gulf; Qatar - offshore; United Arab Emirates (UAE) - Abu Dhabi; Dubai; Sharjah; Ajman; Fujairah; Ras Al Kaimah; Umm Al Qaiwain - onshore and offshore.',22.63,27.05,50.55,57.13,0); INSERT INTO "extent" VALUES('EPSG','1352','Norway - onshore','Norway - onshore.',57.9,71.24,4.39,31.32,0); INSERT INTO "extent" VALUES('EPSG','1353','France - onshore','France - onshore.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1354','Europe - British Isles - UK and Ireland onshore','Ireland - onshore. United Kingdom (UK) - onshore - England; Scotland; Wales; Northern Ireland. Isle of Man.',49.81,60.9,-10.56,1.84,0); INSERT INTO "extent" VALUES('EPSG','1355','Indonesia - Sumatra','Indonesia - Sumatra.',-5.99,5.97,95.16,106.13,0); INSERT INTO "extent" VALUES('EPSG','1356','Asia - Middle East - Israel, Jordan and Palestine onshore','Israel - onshore; Jordan; Palestine Territory - onshore.',29.18,33.38,34.17,39.31,0); INSERT INTO "extent" VALUES('EPSG','1357','Europe - eastern and FSU','Albania; Bulgaria; Czech Republic; Germany (former DDR); Hungary; Poland; Romania; Slovakia. Armenia; Azerbaijan; Belarus; Estonia; Georgia; Kazakhstan; Kyrgyzstan; Latvia; Lithuania; Moldova; Russian Federation; Tajikistan; Turkmenistan; Ukraine; Uzbekistan.',35.1,78.0,9.87,-169.73,1); INSERT INTO "extent" VALUES('EPSG','1358','South America - SAD69 by country','Brazil - onshore and offshore. In rest of South America - onshore north of approximately 45°S and Tierra del Fuego.',-55.96,12.52,-91.72,-25.28,0); INSERT INTO "extent" VALUES('EPSG','1359','Indonesia - Kalimantan SE','Indonesia - Kalimantan - onshore southeast coastal area including Mahakam delta coastal and offshore shelf areas.',-4.24,0.0,114.55,117.99,0); INSERT INTO "extent" VALUES('EPSG','1360','Indonesia - Kalimantan E','Indonesia - Kalimantan - onshore east coastal area including Mahakam delta coastal and offshore shelf areas.',-4.24,4.29,114.55,119.06,0); INSERT INTO "extent" VALUES('EPSG','1361','Sudan - south','Sudan - south.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1362','Asia - Brunei and East Malaysia','Brunei - onshore and offshore; Malaysia - East Malaysia (Sabah; Sarawak) - onshore and offshore.',0.85,7.67,109.31,119.61,0); INSERT INTO "extent" VALUES('EPSG','1363','UAE - Abu Dhabi and Dubai - onshore','United Arab Emirates (UAE) - Abu Dhabi onshore and Dubai onshore.',22.63,25.34,51.56,56.03,0); INSERT INTO "extent" VALUES('EPSG','1364','Asia - Japan and Korea','Japan - onshore; North Korea - onshore; South Korea - onshore.',20.37,45.54,122.83,154.05,0); INSERT INTO "extent" VALUES('EPSG','1365','Algeria - north of 32°N','Algeria - onshore north of 32°N.',31.99,37.14,-2.95,9.09,0); INSERT INTO "extent" VALUES('EPSG','1366','Africa - Algeria, Morocco and Tunisia','Algeria; Morocco; Tunisia.',18.98,37.34,-13.17,11.99,1); INSERT INTO "extent" VALUES('EPSG','1367','Canada - Ontario','Canada - Ontario.',41.67,56.9,-95.16,-74.35,0); INSERT INTO "extent" VALUES('EPSG','1368','Canada - Quebec','Canada - Quebec.',44.99,62.62,-79.85,-57.1,0); INSERT INTO "extent" VALUES('EPSG','1369','France - Alsace','France - Alsace.',47.42,49.07,6.84,8.23,0); INSERT INTO "extent" VALUES('EPSG','1370','Venezuela - Deltana','Venezuela - Deltana area.',7.89,10.46,-62.8,-59.8,0); INSERT INTO "extent" VALUES('EPSG','1371','Venezuela - Guarico state','Venezuela - Guarico state.',7.54,10.03,-68.0,-64.76,0); INSERT INTO "extent" VALUES('EPSG','1372','USA - Alabama','United States (USA) - Alabama.',30.14,35.02,-88.48,-84.89,0); INSERT INTO "extent" VALUES('EPSG','1373','USA - Arizona','United States (USA) - Arizona.',31.33,37.01,-114.81,-109.04,0); INSERT INTO "extent" VALUES('EPSG','1374','USA - Arkansas','United States (USA) - Arkansas.',33.01,36.5,-94.62,-89.64,0); INSERT INTO "extent" VALUES('EPSG','1375','USA - California','United States (USA) - California.',32.53,42.01,-124.45,-114.12,0); INSERT INTO "extent" VALUES('EPSG','1376','USA - Colorado','United States (USA) - Colorado.',36.98,41.01,-109.06,-102.04,0); INSERT INTO "extent" VALUES('EPSG','1377','USA - Connecticut','United States (USA) - Connecticut - counties of Fairfield; Hartford; Litchfield; Middlesex; New Haven; New London; Tolland; Windham.',40.98,42.05,-73.73,-71.78,0); INSERT INTO "extent" VALUES('EPSG','1378','USA - Delaware','United States (USA) - Delaware - counties of Kent; New Castle; Sussex.',38.44,39.85,-75.8,-74.97,0); INSERT INTO "extent" VALUES('EPSG','1379','USA - Florida','United States (USA) - Florida.',24.41,31.01,-87.63,-79.97,0); INSERT INTO "extent" VALUES('EPSG','1380','USA - Georgia','United States (USA) - Georgia.',30.36,35.01,-85.61,-80.77,0); INSERT INTO "extent" VALUES('EPSG','1381','USA - Idaho','United States (USA) - Idaho.',41.99,49.01,-117.24,-111.04,0); INSERT INTO "extent" VALUES('EPSG','1382','USA - Illinois','United States (USA) - Illinois.',36.97,42.51,-91.52,-87.02,0); INSERT INTO "extent" VALUES('EPSG','1383','USA - Indiana','United States (USA) - Indiana.',37.77,41.77,-88.1,-84.78,0); INSERT INTO "extent" VALUES('EPSG','1384','USA - Iowa','United States (USA) - Iowa.',40.36,43.51,-96.65,-90.14,0); INSERT INTO "extent" VALUES('EPSG','1385','USA - Kansas','United States (USA) - Kansas.',36.99,40.01,-102.06,-94.58,0); INSERT INTO "extent" VALUES('EPSG','1386','USA - Kentucky','United States (USA) - Kentucky.',36.49,39.15,-89.57,-81.95,0); INSERT INTO "extent" VALUES('EPSG','1387','USA - Louisiana','United States (USA) - Louisiana.',28.85,33.03,-94.05,-88.75,0); INSERT INTO "extent" VALUES('EPSG','1388','USA - Maine','United States (USA) - Maine.',43.04,47.47,-71.09,-66.91,0); INSERT INTO "extent" VALUES('EPSG','1389','USA - Maryland','United States (USA) - Maryland - counties of Allegany; Anne Arundel; Baltimore; Calvert; Caroline; Carroll; Cecil; Charles; Dorchester; Frederick; Garrett; Harford; Howard; Kent; Montgomery; Prince Georges; Queen Annes; Somerset; St Marys; Talbot; Washington; Wicomico; Worcester.',37.97,39.73,-79.49,-74.97,0); INSERT INTO "extent" VALUES('EPSG','1390','USA - Massachusetts','United States (USA) - Massachusetts.',41.19,42.89,-73.5,-69.86,0); INSERT INTO "extent" VALUES('EPSG','1391','USA - Michigan','United States (USA) - Michigan.',41.69,48.32,-90.42,-82.13,0); INSERT INTO "extent" VALUES('EPSG','1392','USA - Minnesota','United States (USA) - Minnesota.',43.49,49.38,-97.22,-89.49,0); INSERT INTO "extent" VALUES('EPSG','1393','USA - Mississippi','United States (USA) - Mississippi.',30.01,35.01,-91.65,-88.09,0); INSERT INTO "extent" VALUES('EPSG','1394','USA - Missouri','United States (USA) - Missouri.',35.98,40.61,-95.77,-89.1,0); INSERT INTO "extent" VALUES('EPSG','1395','USA - Montana','United States (USA) - Montana - counties of Beaverhead; Big Horn; Blaine; Broadwater; Carbon; Carter; Cascade; Chouteau; Custer; Daniels; Dawson; Deer Lodge; Fallon; Fergus; Flathead; Gallatin; Garfield; Glacier; Golden Valley; Granite; Hill; Jefferson; Judith Basin; Lake; Lewis and Clark; Liberty; Lincoln; Madison; McCone; Meagher; Mineral; Missoula; Musselshell; Park; Petroleum; Phillips; Pondera; Powder River; Powell; Prairie; Ravalli; Richland; Roosevelt; Rosebud; Sanders; Sheridan; Silver Bow; Stillwater; Sweet Grass; Teton; Toole; Treasure; Valley; Wheatland; Wibaux; Yellowstone.',44.35,49.01,-116.07,-104.04,0); INSERT INTO "extent" VALUES('EPSG','1396','USA - Nebraska','United States (USA) - Nebraska - counties of Adams; Antelope; Arthur; Banner; Blaine; Boone; Box Butte; Boyd; Brown; Buffalo; Burt; Butler; Cass; Cedar; Chase; Cherry; Cheyenne; Clay; Colfax; Cuming; Custer; Dakota; Dawes; Dawson; Deuel; Dixon; Dodge; Douglas; Dundy; Fillmore; Franklin; Frontier; Furnas; Gage; Garden; Garfield; Gosper; Grant; Greeley; Hall; Hamilton; Harlan; Hayes; Hitchcock; Holt; Hooker; Howard; Jefferson; Johnson; Kearney; Keith; Keya Paha; Kimball; Knox; Lancaster; Lincoln; Logan; Loup; Madison; McPherson; Merrick; Morrill; Nance; Nemaha; Nuckolls; Otoe; Pawnee; Perkins; Phelps; Pierce; Platte; Polk; Red Willow; Richardson; Rock; Saline; Sarpy; Saunders; Scotts Bluff; Seward; Sheridan; Sherman; Sioux; Stanton; Thayer; Thomas; Thurston; Valley; Washington; Wayne; Webster; Wheeler; York.',39.99,43.01,-104.06,-95.3,0); INSERT INTO "extent" VALUES('EPSG','1397','USA - Nevada','United States (USA) - Nevada.',34.99,42.0,-120.0,-114.03,0); INSERT INTO "extent" VALUES('EPSG','1398','USA - New Hampshire','United States (USA) - New Hampshire - counties of Belknap; Carroll; Cheshire; Coos; Grafton; Hillsborough; Merrimack; Rockingham; Strafford; Sullivan.',42.69,45.31,-72.56,-70.63,0); INSERT INTO "extent" VALUES('EPSG','1399','USA - New Jersey','United States (USA) - New Jersey - counties of Atlantic; Bergen; Burlington; Camden; Cape May; Cumberland; Essex; Gloucester; Hudson; Hunterdon; Mercer; Middlesex; Monmouth; Morris; Ocean; Passaic; Salem; Somerset; Sussex; Union; Warren.',38.87,41.36,-75.6,-73.88,0); INSERT INTO "extent" VALUES('EPSG','1400','USA - New Mexico','United States (USA) - New Mexico.',31.33,37.0,-109.06,-102.99,0); INSERT INTO "extent" VALUES('EPSG','1401','USA - New York','United States (USA) - New York.',40.47,45.02,-79.77,-71.8,0); INSERT INTO "extent" VALUES('EPSG','1402','USA - North Carolina','United States (USA) - North Carolina - counties of Alamance; Alexander; Alleghany; Anson; Ashe; Avery; Beaufort; Bertie; Bladen; Brunswick; Buncombe; Burke; Cabarrus; Caldwell; Camden; Carteret; Caswell; Catawba; Chatham; Cherokee; Chowan; Clay; Cleveland; Columbus; Craven; Cumberland; Currituck; Dare; Davidson; Davie; Duplin; Durham; Edgecombe; Forsyth; Franklin; Gaston; Gates; Graham; Granville; Greene; Guilford; Halifax; Harnett; Haywood; Henderson; Hertford; Hoke; Hyde; Iredell; Jackson; Johnston; Jones; Lee; Lenoir; Lincoln; Macon; Madison; Martin; McDowell; Mecklenburg; Mitchell; Montgomery; Moore; Nash; New Hanover; Northampton; Onslow; Orange; Pamlico; Pasquotank; Pender; Perquimans; Person; Pitt; Polk; Randolph; Richmond; Robeson; Rockingham; Rowan; Rutherford; Sampson; Scotland; Stanly; Stokes; Surry; Swain; Transylvania; Tyrrell; Union; Vance; Wake; Warren; Washington; Watauga; Wayne; Wilkes; Wilson; Yadkin; Yancey.',33.83,36.59,-84.33,-75.38,0); INSERT INTO "extent" VALUES('EPSG','1403','USA - North Dakota','United States (USA) - North Dakota.',45.93,49.01,-104.07,-96.55,0); INSERT INTO "extent" VALUES('EPSG','1404','USA - Ohio','United States (USA) - Ohio.',38.4,42.33,-84.83,-80.51,0); INSERT INTO "extent" VALUES('EPSG','1405','USA - Oklahoma','United States (USA) - Oklahoma.',33.62,37.01,-103.0,-94.42,0); INSERT INTO "extent" VALUES('EPSG','1406','USA - Oregon','United States (USA) - Oregon.',41.98,46.26,-124.6,-116.47,0); INSERT INTO "extent" VALUES('EPSG','1407','USA - Pennsylvania','United States (USA) - Pennsylvania.',39.71,42.53,-80.53,-74.7,0); INSERT INTO "extent" VALUES('EPSG','1408','USA - Rhode Island','United States (USA) - Rhode Island - counties of Bristol; Kent; Newport; Providence; Washington.',41.13,42.02,-71.85,-71.08,0); INSERT INTO "extent" VALUES('EPSG','1409','USA - South Carolina','United States (USA) - South Carolina - counties of Abbeville; Aiken; Allendale; Anderson; Bamberg; Barnwell; Beaufort; Berkeley; Calhoun; Charleston; Cherokee; Chester; Chesterfield; Clarendon; Colleton; Darlington; Dillon; Dorchester; Edgefield; Fairfield; Florence; Georgetown; Greenville; Greenwood; Hampton; Horry; Jasper; Kershaw; Lancaster; Laurens; Lee; Lexington; Marion; Marlboro; McCormick; Newberry; Oconee; Orangeburg; Pickens; Richland; Saluda; Spartanburg; Sumter; Union; Williamsburg; York.',32.05,35.21,-83.36,-78.52,0); INSERT INTO "extent" VALUES('EPSG','1410','USA - South Dakota','United States (USA) - South Dakota.',42.48,45.95,-104.07,-96.43,0); INSERT INTO "extent" VALUES('EPSG','1411','USA - Tennessee','United States (USA) - Tennessee - counties of Anderson; Bedford; Benton; Bledsoe; Blount; Bradley; Campbell; Cannon; Carroll; Carter; Cheatham; Chester; Claiborne; Clay; Cocke; Coffee; Crockett; Cumberland; Davidson; De Kalb; Decatur; Dickson; Dyer; Fayette; Fentress; Franklin; Gibson; Giles; Grainger; Greene; Grundy; Hamblen; Hamilton; Hancock; Hardeman; Hardin; Hawkins; Haywood; Henderson; Henry; Hickman; Houston; Humphreys; Jackson; Jefferson; Johnson; Knox; Lake; Lauderdale; Lawrence; Lewis; Lincoln; Loudon; Macon; Madison; Marion; Marshall; Maury; McMinn; McNairy; Meigs; Monroe; Montgomery; Moore; Morgan; Obion; Overton; Perry; Pickett; Polk; Putnam; Rhea; Roane; Robertson; Rutherford; Scott; Sequatchie; Sevier; Shelby; Smith; Stewart; Sullivan; Sumner; Tipton; Trousdale; Unicoi; Union; Van Buren; Warren; Washington; Wayne; Weakley; White; Williamson; Wilson.',34.98,36.68,-90.31,-81.65,0); INSERT INTO "extent" VALUES('EPSG','1412','USA - Texas','United States (USA) - Texas.',25.83,36.5,-106.66,-93.5,0); INSERT INTO "extent" VALUES('EPSG','1413','USA - Utah','United States (USA) - Utah.',36.99,42.01,-114.05,-109.04,0); INSERT INTO "extent" VALUES('EPSG','1414','USA - Vermont','United States (USA) - Vermont - counties of Addison; Bennington; Caledonia; Chittenden; Essex; Franklin; Grand Isle; Lamoille; Orange; Orleans; Rutland; Washington; Windham; Windsor.',42.72,45.03,-73.44,-71.5,0); INSERT INTO "extent" VALUES('EPSG','1415','USA - Virginia','United States (USA) - Virginia.',36.54,39.46,-83.68,-75.31,0); INSERT INTO "extent" VALUES('EPSG','1416','USA - Washington','United States (USA) - Washington.',45.54,49.05,-124.79,-116.91,0); INSERT INTO "extent" VALUES('EPSG','1417','USA - West Virginia','United States (USA) - West Virginia.',37.2,40.64,-82.65,-77.72,0); INSERT INTO "extent" VALUES('EPSG','1418','USA - Wisconsin','United States (USA) - Wisconsin.',42.48,47.31,-92.89,-86.25,0); INSERT INTO "extent" VALUES('EPSG','1419','USA - Wyoming','United States (USA) - Wyoming.',40.99,45.01,-111.06,-104.05,0); INSERT INTO "extent" VALUES('EPSG','1420','Canada - Quebec - east of 57°W','Canada - Quebec - east of 57°W.',46.6,53.76,-57.0,-54.0,1); INSERT INTO "extent" VALUES('EPSG','1421','Canada - Quebec - 60°W to 57°W','Canada - Quebec - between 60°W and 57°W.',50.1,52.0,-60.0,-57.1,1); INSERT INTO "extent" VALUES('EPSG','1422','Canada - Quebec - 63°W to 60°W','Canada - Quebec - between 63°W and 60°W.',47.16,52.01,-63.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1423','Canada - Quebec - 66°W to 63°W','Canada - Quebec - between 66°W and 63°W.',47.95,60.42,-66.0,-63.0,0); INSERT INTO "extent" VALUES('EPSG','1424','Canada - Quebec - 69°W to 66°W','Canada - Quebec - between 69°W and 66°W.',47.31,59.0,-69.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1425','Canada - Quebec - 72°W to 69°W','Canada - Quebec - between 72°W and 69°W.',45.01,61.8,-72.0,-69.0,0); INSERT INTO "extent" VALUES('EPSG','1426','Canada - Quebec - 75°W to 72°W','Canada - Quebec - between 75°W and 72°W.',44.99,62.53,-75.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','1427','Canada - Quebec - 78°W to 75°W','Canada - Quebec - between 78°W and 75°W.',45.37,62.62,-78.0,-75.0,0); INSERT INTO "extent" VALUES('EPSG','1428','Canada - Quebec - west of 78°W','Canada - Quebec - west of 78°W.',46.23,62.45,-79.85,-78.0,0); INSERT INTO "extent" VALUES('EPSG','1429','Canada - Ontario - east of 75°W','Canada - Ontario - east of 75°W.',44.98,45.65,-75.0,-74.35,0); INSERT INTO "extent" VALUES('EPSG','1430','Canada - Ontario - 78°W to 75°W','Canada - Ontario - between 78°W and 75°W.',43.63,46.25,-78.0,-75.0,0); INSERT INTO "extent" VALUES('EPSG','1431','Canada - Ontario - MTM zone 10','Canada - Ontario - between 81°W and 78°W: south of 46°N in area to west of 80°15''W, south of 47°N in area between 80°15''W and 79°30''W, entire province between 79°30''W and 78°W.',42.26,47.33,-81.0,-77.99,0); INSERT INTO "extent" VALUES('EPSG','1432','Canada - Ontario - MTM zone 11','Canada - Ontario - south of 46°N and west of 81°W.',41.67,46.0,-83.6,-81.0,0); INSERT INTO "extent" VALUES('EPSG','1433','Canada - Ontario - MTM zone 12','Canada - Ontario - between 82°30''W and 79°30''W: north of 46°N in area between 82°30''W and 80°15''W, north of 47°N in area between 80°15''W and 79°30''W.',46.0,55.21,-82.5,-79.5,0); INSERT INTO "extent" VALUES('EPSG','1434','Canada - Ontario - MTM zone 13','Canada - Ontario - between 85°30''W and 82°30''W and north of 46°N.',46.0,55.59,-85.5,-82.5,0); INSERT INTO "extent" VALUES('EPSG','1435','Canada - Ontario - 88.5°W to 85.5°W','Canada - Ontario - between 88°30''W and 85°30''W.',47.17,56.7,-88.5,-85.5,0); INSERT INTO "extent" VALUES('EPSG','1436','Canada - Ontario - 91.5°W to 88.5°W','Canada - Ontario - between 91°30''W and 88°30''W.',47.97,56.9,-91.5,-88.5,0); INSERT INTO "extent" VALUES('EPSG','1437','Canada - Ontario - 94.5°W to 91.5°W','Canada - Ontario - between 94°30''W and 91°30''W.',48.06,55.2,-94.5,-91.5,0); INSERT INTO "extent" VALUES('EPSG','1438','Canada - Ontario - west of 94.5°W','Canada - Ontario - west of 94°30''W.',48.69,53.24,-95.16,-94.5,0); INSERT INTO "extent" VALUES('EPSG','1439','Canada - Ontario - west of 90°W','Canada - Ontario - west of 90°W.',48.03,56.2,-95.16,-90.0,0); INSERT INTO "extent" VALUES('EPSG','1440','Canada - Ontario - 90°W to 84°W','Canada - Ontario - between 90°W and 84°W.',46.11,56.9,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','1441','Canada - Ontario - 84°W to 78°W','Canada - Ontario - between 84°W and 78°W.',41.67,55.37,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','1442','Canada - Ontario - east of 78°W','Canada - Ontario - east of 78°W.',43.63,46.25,-78.0,-74.35,0); INSERT INTO "extent" VALUES('EPSG','1443','Canada - Quebec - 78°W to 72°W','Canada - Quebec - between 78°W and 72°W.',44.99,62.62,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','1444','Canada - Quebec - 72°W to 66°W','Canada - Quebec - between 72°W and 66°W.',45.01,61.8,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1445','Canada - Quebec - 66°W to 60°W','Canada - Quebec - between 66°W and 60°W.',47.16,60.42,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1446','Canada - Quebec - east of 60°W','Canada - Quebec - east of 60°W.',50.2,52.01,-60.0,-57.1,0); INSERT INTO "extent" VALUES('EPSG','1447','Canada - New Brunswick','Canada - New Brunswick.',44.56,48.07,-69.05,-63.7,0); INSERT INTO "extent" VALUES('EPSG','1448','Canada - 72°W to 66°W, south of 62°N','Canada south of 60°N and between 72°W and 66°W - New Brunswick (NB), Labrador, Nova Scotia (NS), Quebec.',44.6,61.5,-72.0,-66.0,1); INSERT INTO "extent" VALUES('EPSG','1449','Canada - 66°W to 60°W, south of 60°N','Canada south of 60°N and between 66°W and 60°W - New Brunswick (NB), Labrador, Nova Scotia (NS), Prince Edward Island (PEI), Quebec.',43.2,60.0,-66.0,-60.0,1); INSERT INTO "extent" VALUES('EPSG','1450','Cote d''Ivoire (Ivory Coast) - east of 6°W','Côte d''Ivoire (Ivory Coast) east of 6°W.',4.92,10.46,-6.0,-2.48,0); INSERT INTO "extent" VALUES('EPSG','1451','Cote d''Ivoire (Ivory Coast) - west of 6°W','Côte d''Ivoire (Ivory Coast) west of 6°W.',4.29,10.74,-8.61,-6.0,0); INSERT INTO "extent" VALUES('EPSG','1452','Vietnam - west of 108°E onshore','Vietnam - onshore west of 108°E.',8.33,23.4,102.14,108.0,0); INSERT INTO "extent" VALUES('EPSG','1453','Vietnam - east of 108°E onshore','Vietnam - onshore east of 108°E.',10.43,21.56,108.0,109.53,0); INSERT INTO "extent" VALUES('EPSG','1454','Namibia - Walvis Bay','Namibia - Walvis Bay.',-23.15,-22.68,14.35,14.6,0); INSERT INTO "extent" VALUES('EPSG','1455','South Africa - west of 18°E','South Africa - onshore west of 18°E.',-33.1,-28.03,16.45,18.0,0); INSERT INTO "extent" VALUES('EPSG','1456','South Africa - 18°E to 20°E','South Africa - onshore between 18°E and 20°E.',-34.88,-28.38,17.99,20.0,0); INSERT INTO "extent" VALUES('EPSG','1457','South Africa - 20°E to 22°E','South Africa - onshore between 20°E and 22°E.',-34.88,-24.76,19.99,22.01,0); INSERT INTO "extent" VALUES('EPSG','1458','South Africa - 22°E to 24°E','South Africa - onshore between 22°E and 24°E.',-34.26,-25.26,22.0,24.01,0); INSERT INTO "extent" VALUES('EPSG','1459','South Africa - 24°E to 26°E','South Africa - onshore between 24°E and 26°E.',-34.26,-24.71,24.0,26.01,0); INSERT INTO "extent" VALUES('EPSG','1460','South Africa - 26°E to 28°E','Lesotho - west of 28°E. South Africa - onshore between 26°E and 28°E.',-33.83,-22.92,26.0,28.0,0); INSERT INTO "extent" VALUES('EPSG','1461','South Africa - 28°E to 30°E','Lesotho - east of 28°E. South Africa - onshore between 28°E and 30°E.',-33.03,-22.13,27.99,30.01,0); INSERT INTO "extent" VALUES('EPSG','1462','South Africa - 30°E to 32°E','South Africa - onshore between 30°E and 32°E. Eswatini (Swaziland).',-31.38,-22.22,29.99,32.02,0); INSERT INTO "extent" VALUES('EPSG','1463','South Africa - east of 32°E','South Africa - east of 32°E.',-28.94,-26.8,31.95,32.95,0); INSERT INTO "extent" VALUES('EPSG','1464','Iran - west of 48°E','Iran - west of 48°E.',30.99,39.78,44.03,48.0,0); INSERT INTO "extent" VALUES('EPSG','1465','Iran - 48°E to 54°E','Iran - onshore and offshore between 48°E and 54°E.',25.47,39.71,48.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','1466','Iran - 54°E to 60°E','Iran - onshore between 54°E and 60°E, Gulf offshore between of 54°E and Strait of Hormuz.',25.32,38.29,54.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','1467','Iran - east of 60°E onshore','Iran - onshore east of 60°E.',25.02,37.06,60.0,63.34,0); INSERT INTO "extent" VALUES('EPSG','1468','Guinea - west of 12°W','Guinea - onshore west of 12°W.',9.01,12.68,-15.13,-12.0,0); INSERT INTO "extent" VALUES('EPSG','1469','Guinea - east of 12°W','Guinea - east of 12°W.',7.19,12.51,-12.0,-7.65,0); INSERT INTO "extent" VALUES('EPSG','1470','Libya - west of 10°E','Libya - west of 10°E.',25.37,30.49,9.31,10.01,0); INSERT INTO "extent" VALUES('EPSG','1471','Libya - 10°E to 12°E onshore','Libya - onshore between 10°E and 12°E.',23.51,33.23,10.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','1472','Libya - 12°E to 14°E onshore','Libya - onshore between 12°E and 14°E.',22.8,33.06,12.0,14.0,0); INSERT INTO "extent" VALUES('EPSG','1473','Libya - 14°E to 16°E onshore','Libya - onshore between 14°E and 16°E.',22.61,32.79,14.0,16.0,0); INSERT INTO "extent" VALUES('EPSG','1474','Libya - 16°E to 18°E onshore','Libya - onshore between 16°E and 18°E.',22.51,31.34,16.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','1475','Libya - 18°E to 20°E onshore','Libya - onshore between 18°E and 20°E.',21.54,32.17,18.0,20.0,0); INSERT INTO "extent" VALUES('EPSG','1476','Libya - 20°E to 22°E onshore','Libya - onshore between 20°E and 22°E.',20.54,33.0,20.0,22.0,0); INSERT INTO "extent" VALUES('EPSG','1477','Libya - 22°E to 24°E onshore','Libya - onshore between 22°E and 24°E.',19.5,32.97,22.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','1478','Libya - east of 24°E onshore','Libya - onshore east of 24°E.',19.99,32.15,24.0,25.21,0); INSERT INTO "extent" VALUES('EPSG','1479','Libya - west of 12°E onshore','Libya - onshore west of 12°E.',23.51,33.23,9.31,12.0,0); INSERT INTO "extent" VALUES('EPSG','1480','Libya - 12°E to 18°E onshore','Libya - onshore between 12°E and 18°E.',22.51,33.06,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','1481','Libya - 18°E to 24°E onshore','Libya - onshore between 18°E and 24°E.',19.5,33.0,17.99,24.0,0); INSERT INTO "extent" VALUES('EPSG','1482','Libya - west of 15°E onshore','Libya - onshore west of 15°E.',22.61,33.23,9.31,15.0,0); INSERT INTO "extent" VALUES('EPSG','1483','Argentina - Mendoza and Neuquen 70.5°W to 67.5°W','Argentina - Mendoza and Neuquen provinces between 70°30''W and 67°30''W - Neuquen and Cuyo basins.',-43.41,-31.91,-70.51,-67.49,0); INSERT INTO "extent" VALUES('EPSG','1484','Argentina - 42.5°S to 50.3°S and 70.5°W to 67.5°W','Argentina - Chibut province between 70°30''W and 67°30''W and south of approximately 42°30''S and Santa Cruz province between 70°30''W and 67°30''W and north of approximately 50°20''S.',-50.34,-42.49,-70.5,-67.49,0); INSERT INTO "extent" VALUES('EPSG','1485','Argentina - Tierra del Fuego onshore west of 67.5°W','Argentina - Tierra del Fuego onshore west of 67°30''W.',-54.9,-52.59,-68.64,-67.5,0); INSERT INTO "extent" VALUES('EPSG','1486','Argentina - Tierra del Fuego offshore','Argentina - Tierra del Fuego offshore Atlantic.',-54.93,-51.36,-68.62,-61.49,0); INSERT INTO "extent" VALUES('EPSG','1487','Cuba - onshore north of 21°30''N','Cuba - onshore north of 21°30''N but also including all of Isla de la Juventud.',21.38,23.25,-85.01,-76.91,0); INSERT INTO "extent" VALUES('EPSG','1488','Cuba - onshore south of 21°30''N','Cuba - onshore south of 21°30''N and east of 80°W .',19.77,21.5,-78.69,-74.07,0); INSERT INTO "extent" VALUES('EPSG','1489','Tunisia - offshore','Tunisia - offshore.',33.22,38.41,7.81,13.67,0); INSERT INTO "extent" VALUES('EPSG','1490','Yemen - 42°E to 48°E','Yemen - between 42°E and 48°E, onshore and offshore.',11.57,17.95,42.0,48.01,0); INSERT INTO "extent" VALUES('EPSG','1491','Yemen - 48°E to 54°E','Yemen - between 48°E and 54°E, onshore and offshore.',9.45,19.0,48.0,54.01,0); INSERT INTO "extent" VALUES('EPSG','1492','Yemen - South Yemen - mainland west of 48°E','Yemen - South Yemen onshore mainland west of 48°E.',12.54,17.95,43.37,48.01,0); INSERT INTO "extent" VALUES('EPSG','1493','Yemen - South Yemen - mainland east of 48°E','Yemen - South Yemen onshore mainland east of 48°E.',13.94,19.0,48.0,53.14,0); INSERT INTO "extent" VALUES('EPSG','1494','Vietnam - onshore Vung Tau area','Vietnam - onshore Vung Tau area.',9.03,11.04,105.49,107.58,0); INSERT INTO "extent" VALUES('EPSG','1495','Vietnam - offshore Cuu Long basin','Vietnam - offshore - Cuu Long basin and northwestern part of Nam Con Son basin.',7.99,11.15,106.54,110.0,0); INSERT INTO "extent" VALUES('EPSG','1496','Korea, Republic of (South Korea) - 128°E to 130°E onshore','Republic of Korea (South Korea) - onshore between 128°E and 130°E.',34.49,38.64,128.0,129.65,0); INSERT INTO "extent" VALUES('EPSG','1497','Korea, Republic of (South Korea) - 126°E to 128°E onshore','Republic of Korea (South Korea) - onshore between 126°E and 128°E.',33.14,38.33,126.0,128.0,0); INSERT INTO "extent" VALUES('EPSG','1498','Korea, Republic of (South Korea) - 124°E to 126°E onshore','Republic of Korea (South Korea) - onshore between 124°E and 126°E.',33.99,38.04,124.53,126.0,0); INSERT INTO "extent" VALUES('EPSG','1499','Venezuela - Maracaibo - blocks I II and III','Venezuela - Maracaibo area offshore blocks I, II and III.',10.0,10.51,-71.5,-71.17,0); INSERT INTO "extent" VALUES('EPSG','1500','New Zealand - North Island','New Zealand - North Island.',-41.67,-34.1,171.99,178.63,0); INSERT INTO "extent" VALUES('EPSG','1501','New Zealand - South Island','New Zealand - South Island.',-46.86,-40.44,166.37,174.46,0); INSERT INTO "extent" VALUES('EPSG','1502','New Zealand - offshore 162°E to168°E','New Zealand - offshore between 162°E and 168°E.',-55.89,-39.68,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','1503','New Zealand - offshore 168°E to 174°E','New Zealand - offshore between 168°E and 174°E.',-55.95,-30.78,168.0,174.0,0); INSERT INTO "extent" VALUES('EPSG','1504','New Zealand - offshore 174°E to 180°E','New Zealand - offshore between 174°E and 180°E.',-54.32,-26.42,174.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1505','Ghana - offshore','Ghana - offshore.',1.4,6.06,-3.79,2.1,0); INSERT INTO "extent" VALUES('EPSG','1506','Canada - 108°W to 102°W, south of 60°N','Canada south of 60°N and between 108°E and 102°W - Saskatchewan.',49.0,60.0,-108.0,-102.0,1); INSERT INTO "extent" VALUES('EPSG','1507','Canada - 114°W to 108°W, south of 60°N','Canada south of 60°N and between 114°E and 108°W - Alberta, Saskatchewan.',49.0,60.0,-114.0,-108.0,1); INSERT INTO "extent" VALUES('EPSG','1508','Canada - 120°W to 114°W, south of 60°N','Canada south of 60°N and between 120°E and 114°W - Alberta, British Columbia (BC).',49.0,60.0,-120.0,-114.0,1); INSERT INTO "extent" VALUES('EPSG','1509','Sierra Leone - west of 12°W','Sierra Leone - onshore west of 12°W.',7.15,9.94,-13.35,-12.0,0); INSERT INTO "extent" VALUES('EPSG','1510','Sierra Leone - east of 12°W','Sierra Leone - onshore east of 12°W.',6.88,10.0,-12.0,-10.26,0); INSERT INTO "extent" VALUES('EPSG','1511','USA - CONUS and Alaska; PRVI','Puerto Rico - onshore and offshore. United States (USA) onshore and offshore - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Virgin Islands - onshore and offshore.',14.92,74.71,167.65,-63.88,0); INSERT INTO "extent" VALUES('EPSG','1512','Germany - East Germany - west of 10.5°E','Germany - states of former East Germany - west of 10°30''E - Thuringen.',50.35,51.56,9.92,10.5,0); INSERT INTO "extent" VALUES('EPSG','1513','Europe - 10.5°E to 13.5°E onshore by country','Czechia - west of 13°30''E. Germany - states of former East Germany onshore - between 10°30''E and 13°30''E - Brandenburg; Mecklenburg-Vorpommern; Sachsen; Sachsen-Anhalt; Thuringen.',48.97,54.74,10.5,13.5,0); INSERT INTO "extent" VALUES('EPSG','1514','Europe - 13.5°E to 16.5°E onshore and S-42(83) by country','Czechia - between 13°30''E and 16°30''E. Germany - states of former East Germany onshore east of 13°30''E - Brandenburg; Mecklenburg-Vorpommern; Sachsen. Hungary - west of 16°30''E.',46.54,54.72,13.5,16.5,0); INSERT INTO "extent" VALUES('EPSG','1515','Poland - zone I','Poland - southeast - south of 52°20''N and east of 18°E.',49.0,52.34,18.0,24.15,0); INSERT INTO "extent" VALUES('EPSG','1516','Poland - zone II','Poland - northeast - onshore north of 51°20''N and east of 19°E.',51.33,54.51,19.0,23.95,0); INSERT INTO "extent" VALUES('EPSG','1517','Poland - zone III','Poland - northwest - onshore north of 52°10''N and west of 20°E.',52.16,54.89,14.14,20.0,0); INSERT INTO "extent" VALUES('EPSG','1518','Poland - zone IV','Poland - southwest - south of 53°20''N and west of 19°05''E.',49.39,53.34,14.14,19.09,0); INSERT INTO "extent" VALUES('EPSG','1519','Poland - zone V','Poland - south central - between 49°20''N and 51°20''N, 18°20''E and 19°40''E.',49.39,51.34,18.33,19.67,0); INSERT INTO "extent" VALUES('EPSG','1520','Poland - west of 16.5°E','Poland - onshore and offshore west of 16°30''E.',50.26,55.35,14.14,16.5,0); INSERT INTO "extent" VALUES('EPSG','1521','Poland - 16.5°E to 19.5°E','Poland - onshore and offshore between 16°30''E and 19°30''E.',49.39,55.93,16.5,19.5,0); INSERT INTO "extent" VALUES('EPSG','1522','Poland - 19.5°E to 22.5°E','Poland - onshore and offshore between 19°30''E and 22°30''E.',49.09,54.55,19.5,22.5,0); INSERT INTO "extent" VALUES('EPSG','1523','Poland - east of 22.5°E','Poland - east of 22°30''E.',49.0,54.41,22.5,24.15,0); INSERT INTO "extent" VALUES('EPSG','1524','Turkey - west of 28.5°E onshore','Türkiye (Turkey) - west of 28°30''E, onshore.',36.5,42.11,25.62,28.5,0); INSERT INTO "extent" VALUES('EPSG','1525','Turkey - 28.5°E to 31.5°E onshore','Türkiye (Turkey) - between 28°30''E and 31°30''E, onshore.',36.06,41.46,28.5,31.5,0); INSERT INTO "extent" VALUES('EPSG','1526','Turkey - 31.5°E to 34.5°E onshore','Türkiye (Turkey) - between 31°30''E and 34°30''E, onshore.',35.97,42.07,31.5,34.5,0); INSERT INTO "extent" VALUES('EPSG','1527','Turkey - 34.5°E to 37.5°E onshore','Türkiye (Turkey) - between 34°30''E and 37°30''E, onshore.',35.81,42.15,34.5,37.5,0); INSERT INTO "extent" VALUES('EPSG','1528','Turkey - 37.5°E to 40.5°E onshore','Türkiye (Turkey) - between 37°30''E and 40°30''E, onshore.',36.66,41.19,37.5,40.5,0); INSERT INTO "extent" VALUES('EPSG','1529','Turkey - 40.5°E to 43.5°E onshore','Türkiye (Turkey) - between 40°30''E and 43°30''E, onshore.',37.02,41.6,40.5,43.5,0); INSERT INTO "extent" VALUES('EPSG','1530','Turkey - east of 43.5°E','Türkiye (Turkey) - east of 43°30''E.',36.97,41.02,43.5,44.83,0); INSERT INTO "extent" VALUES('EPSG','1531','Canada - Maritime Provinces - west of 66°W','Canada - New Brunswick and Nova Scotia - west of 66°W.',43.64,48.07,-69.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1532','Canada - Maritime Provinces - east of 66°W','Canada - New Brunswick and Nova Scotia east of 66°W; Prince Edward Island.',43.41,47.98,-66.0,-59.73,0); INSERT INTO "extent" VALUES('EPSG','1533','Canada - Prince Edward Island','Canada - Prince Edward Island.',45.9,47.09,-64.49,-61.9,0); INSERT INTO "extent" VALUES('EPSG','1534','Canada - Nova Scotia - east of 63°W','Canada - Nova Scotia - east of 63°W.',44.64,47.08,-63.0,-59.73,0); INSERT INTO "extent" VALUES('EPSG','1535','Canada - Nova Scotia - west of 63°W','Canada - Nova Scotia - west of 63°W.',43.41,46.02,-66.28,-63.0,0); INSERT INTO "extent" VALUES('EPSG','1536','Finland - 19.5°E to 22.5°E onshore','Finland - onshore between 19°30''E and 22°30''E.',59.76,69.33,19.5,22.5,0); INSERT INTO "extent" VALUES('EPSG','1537','Finland - 22.5°E to 25.5°E onshore','Finland - onshore between 22°30''E and 25°30''E.',59.75,68.9,22.5,25.5,0); INSERT INTO "extent" VALUES('EPSG','1538','Finland - 25.5°E to 28.5°E onshore','Finland - onshore between 25°30''E and 28°30''E.',60.18,70.09,25.5,28.51,0); INSERT INTO "extent" VALUES('EPSG','1539','Finland - 28.5°E to 31.5°E','Finland - between 28°30''E and 31°30''E.',60.94,69.81,28.5,31.5,0); INSERT INTO "extent" VALUES('EPSG','1540','Mozambique - onshore west of 36°E','Mozambique - onshore west of 36°E.',-26.87,-11.41,30.21,36.0,0); INSERT INTO "extent" VALUES('EPSG','1541','Mozambique - onshore east of 36°E','Mozambique - onshore east of 36°E.',-18.98,-10.42,35.99,40.9,0); INSERT INTO "extent" VALUES('EPSG','1542','Asia - Cambodia and Vietnam - west of 108°E','Cambodia; Vietnam west of 108°E.',8.33,23.4,102.14,108.0,0); INSERT INTO "extent" VALUES('EPSG','1543','Austria - Styria','Austria - Styria.',46.64,47.84,13.58,16.17,0); INSERT INTO "extent" VALUES('EPSG','1544','Oman - onshore west of 54°E','Oman - onshore west of 54°E.',16.59,19.67,51.99,54.0,0); INSERT INTO "extent" VALUES('EPSG','1545','Oman - onshore east of 54°E','Oman - onshore east of 54°E. Includes Musandam and the Kuria Muria (Al Hallaniyah) islands.',16.89,26.58,54.0,59.91,0); INSERT INTO "extent" VALUES('EPSG','1546','USA - Hawaii - island of Hawaii - onshore','United States (USA) - Hawaii - island of Hawaii - onshore.',18.87,20.33,-156.1,-154.74,0); INSERT INTO "extent" VALUES('EPSG','1547','USA - Hawaii - Maui; Kahoolawe; Lanai; Molokai - onshore','United States (USA) - Hawaii - Maui; Kahoolawe; Lanai; Molokai - onshore.',20.45,21.26,-157.36,-155.93,0); INSERT INTO "extent" VALUES('EPSG','1548','USA - Hawaii - Oahu - onshore','United States (USA) - Hawaii - Oahu - onshore.',21.2,21.75,-158.33,-157.61,0); INSERT INTO "extent" VALUES('EPSG','1549','USA - Hawaii - Kauai - onshore','United States (USA) - Hawaii - Kauai - onshore.',21.81,22.29,-159.85,-159.23,0); INSERT INTO "extent" VALUES('EPSG','1550','USA - Hawaii - Niihau - onshore','United States (USA) - Hawaii - Niihau - onshore.',21.73,22.07,-160.3,-159.99,0); INSERT INTO "extent" VALUES('EPSG','1551','Grenada and southern Grenadines - onshore','Grenada and southern Grenadine Islands - onshore.',11.94,12.57,-61.84,-61.35,0); INSERT INTO "extent" VALUES('EPSG','1552','Africa - Eritrea, Ethiopia and Sudan - 36°E to 42°E','Eritrea. Ethiopia - between 36°E and 42°E. Sudan - east of 36°E.',3.4,22.01,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','1553','Ethiopia - east of 42°E','Ethiopia - east of 42°E.',4.11,12.85,42.0,47.99,0); INSERT INTO "extent" VALUES('EPSG','1554','Somalia - 42°E to 48°E, N hemisphere onshore','Somalia - onshore north of equator and between 42°E and 48°E.',0.0,11.52,42.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','1555','Somalia - onshore east of 48°E','Somalia - onshore east of 48°E.',4.44,12.03,48.0,51.47,0); INSERT INTO "extent" VALUES('EPSG','1556','Australia - 102°E to 108°E','Australia - between 102°E and 108°E.',-56.0,-10.0,102.0,108.0,1); INSERT INTO "extent" VALUES('EPSG','1557','Australia - 108°E to 114°E (EEZ)','Australia - onshore and offshore to 200 nautical mile EEZ boundary between 108°E and 114°E.',-37.84,-17.19,109.23,114.0,0); INSERT INTO "extent" VALUES('EPSG','1558','Australia - 114°E to 120°E (EEZ)','Australia - onshore and offshore to 200 nautical mile EEZ boundary between 114°E and 120°E.',-38.53,-12.61,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','1559','Australia - 120°E to 126°E','Australia - onshore and offshore between 120°E and 126°E.',-38.07,-10.46,120.0,126.01,0); INSERT INTO "extent" VALUES('EPSG','1560','Australia - 126°E to 132°E','Australia - onshore and offshore between 126°E and 132°E.',-37.38,-9.1,125.99,132.0,0); INSERT INTO "extent" VALUES('EPSG','1561','Australia - 132°E to 138°E','Australia - onshore and offshore between 132°E and 138°E.',-40.71,-8.88,132.0,138.01,0); INSERT INTO "extent" VALUES('EPSG','1562','Australia - 138°E to 144°E','Australia - onshore and offshore between 138°E and 144°E.',-48.19,-9.08,138.0,144.01,0); INSERT INTO "extent" VALUES('EPSG','1563','Australia - 144°E to 150°E','Australia - onshore and offshore between 144°E and 150°E.',-50.89,-9.23,144.0,150.01,0); INSERT INTO "extent" VALUES('EPSG','1564','Australia - 150°E to 156°E','Australia - onshore and offshore between 150°E and 156°E.',-58.96,-13.87,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','1565','Australia - 156°E to 162°E','Australia including Lord Howe Island - onshore and offshore between 156°E and 162°E.',-35.13,-14.08,156.0,162.01,0); INSERT INTO "extent" VALUES('EPSG','1566','Australia - EEZ east of 162°E','Australia - offshore east of 162°E to 200 nautical mile EEZ boundary.',-34.22,-27.25,162.0,163.2,0); INSERT INTO "extent" VALUES('EPSG','1567','Australasia - Australia and PNG - 138°E to 144°E','Australia - onshore and offshore between 138°E and 144°E. Papua New Guinea - onshore west of 144°E.',-46.63,-2.53,138.0,144.01,0); INSERT INTO "extent" VALUES('EPSG','1568','Australasia - Australia and PNG - 144°E to 150°E','Australia - onshore and offshore between 144°E and 150°E. Papua New Guinea (PNG) - onshore between 144°E and 150°E.',-47.2,-1.3,144.0,150.01,0); INSERT INTO "extent" VALUES('EPSG','1569','Saudi Arabia - onshore 36°E to 42°E','Saudi Arabia - onshore between 36°E and 42°E.',16.59,32.16,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','1570','Asia - Middle East - Kuwait and Saudi - 48°E to 54°E','Kuwait - onshore east of 48°E. Saudi Arabia - onshore between 48°E and 54°E.',17.94,30.04,47.99,54.01,0); INSERT INTO "extent" VALUES('EPSG','1571','Asia - Middle East - Kuwait and Saudi - 42°E to 48°E','Kuwait - west of 48°E. Saudi Arabia - between of 42°E and 48°E.',16.37,31.15,42.0,48.01,0); INSERT INTO "extent" VALUES('EPSG','1572','Brazil - 54°W to 48°W and Aratu','Brazil - offshore between 54°W and 48°W, including Pelotas basin.',-35.71,-25.01,-53.38,-47.99,0); INSERT INTO "extent" VALUES('EPSG','1573','Brazil - 48°W to 42°W and Aratu','Brazil - offshore areas south of intersection of parallel of 2°55''S with coast and between 48°W and 42°W including Santos basin.',-33.5,0.0,-48.01,-41.99,0); INSERT INTO "extent" VALUES('EPSG','1574','Brazil - 42°W to 36°W and Aratu','Brazil - between 42°W and 36°W, southern hemisphere offshore including Campos and Espirito Santo basins; onshore Tucano basin area.',-26.35,0.01,-42.01,-36.0,0); INSERT INTO "extent" VALUES('EPSG','1575','Africa - Botswana and Zambia - west of 24°E','Botswana and Zambia - west of 24°E.',-26.88,-10.86,19.99,24.0,0); INSERT INTO "extent" VALUES('EPSG','1576','Africa - Botswana, Zambia and Zimbabwe - 24°E to 30°E','Botswana - east of 24°E; Zambia - between 24°E and 30°E; Zimbabwe - west of 30°E .',-25.84,-8.31,24.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','1577','Africa - Malawi, Zambia and Zimbabwe - east of 30°E','Malawi. Zambia and Zimbabwe - east of 30°E.',-22.42,-8.19,30.0,35.93,0); INSERT INTO "extent" VALUES('EPSG','1578','Uganda - north of equator and west of 30°E','Uganda - north of equator and west of 30°E.',0.0,0.86,29.71,30.0,0); INSERT INTO "extent" VALUES('EPSG','1579','Africa - Tanzania and Uganda - south of equator and west of 30°E','Tanzania - west of 30°E; Uganda - south of equator and west of 30°E.',-6.81,0.0,29.34,30.0,0); INSERT INTO "extent" VALUES('EPSG','1580','Africa - Kenya and Uganda - north of equator and 30°E to 36°E','Kenya - north of equator and west of 36°E; Uganda - north of equator and east of 30°E.',0.0,4.63,29.99,36.0,0); INSERT INTO "extent" VALUES('EPSG','1581','Africa - Kenya, Tanzania and Uganda - south of equator and 30°E to 36°E','Kenya - south of equator and west of 36°E; Tanzania - 30°E to 36°E; Uganda - south of equator and east of 30°E.',-11.61,0.01,29.99,36.0,0); INSERT INTO "extent" VALUES('EPSG','1582','Kenya - north of equator and east of 36°E','Kenya - north of equator and east of 36°E.',0.0,4.49,36.0,41.91,0); INSERT INTO "extent" VALUES('EPSG','1583','Africa - Kenya and Tanzania - south of equator and east of 36°E','Kenya - south of equator and east of 36°E; Tanzania - east of 36°E.',-11.75,0.0,36.0,41.6,0); INSERT INTO "extent" VALUES('EPSG','1584','Indonesia - Java and Java Sea - west of 108°E','Indonesia - onshore Java and offshore southern Java Sea west of 108°E.',-7.79,-4.07,105.06,108.0,0); INSERT INTO "extent" VALUES('EPSG','1585','Indonesia - Java and Java Sea - east of 114°E','Indonesia - onshore Java and Bali, offshore southern Java Sea, Madura Strait and western Bali Sea - east of 114°E.',-8.91,-5.33,114.0,117.01,0); INSERT INTO "extent" VALUES('EPSG','1586','Indonesia - Java and Java Sea - 108°E to 114°E','Indonesia - onshore Java and Madura and offshore southern Java Sea and Madura Strait - between 108°E and 114°E.',-8.67,-4.27,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1587','China - west of 78°E','China - west of 78°E.',35.42,41.07,73.62,78.01,0); INSERT INTO "extent" VALUES('EPSG','1588','China - 78°E to 84°E','China - between 78°E and 84°E.',29.16,47.23,77.98,84.0,0); INSERT INTO "extent" VALUES('EPSG','1589','China - 84°E to 90°E','China - between 84°E and 90°E.',27.32,49.18,84.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','1590','China - 90°E to 96°E','China - between 90°E and 96°E.',27.71,47.9,90.0,96.01,0); INSERT INTO "extent" VALUES('EPSG','1591','China - 96°E to 102°E','China - between 96°E and 102°E.',21.13,43.18,96.0,102.01,0); INSERT INTO "extent" VALUES('EPSG','1592','China - 102°E to 108°E onshore','China - onshore between 102°E and 108°E.',21.53,42.47,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','1593','China - 108°E to 114°E onshore','China - onshore between 108°E and 114°E.',18.11,45.11,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1594','China - 114°E to 120°E onshore','China - onshore between 114°E and 120°E.',22.14,51.52,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','1595','China - 120°E to 126°E onshore','China - onshore between 120°E and 126°E.',26.34,53.56,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','1596','China - 126°E to 132°E onshore','China - onshore between 126°E and 132°E.',40.89,52.79,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','1597','China - east of 132°E','China - east of 132°E.',45.02,48.4,132.0,134.77,0); INSERT INTO "extent" VALUES('EPSG','1598','Colombia - west of 75°35''W','Colombia - mainland onshore west of 1°30''W of Bogota (approximately 75°35''W of Greenwich).',0.03,10.21,-79.1,-75.58,0); INSERT INTO "extent" VALUES('EPSG','1599','Colombia - 75°35''W to 72°35''W','Colombia - onshore between 1°30''W and 1°30''E of Bogota (approximately 75°35''W and 72°35''W of Greenwich).',-2.51,11.82,-75.59,-72.58,0); INSERT INTO "extent" VALUES('EPSG','1600','Colombia - 72°35''W to 69°35''W','Colombia - onshore between 1°30''E and 4°30''E of Bogota (approximately 72°35''W and 69°35''W of Greenwich).',-4.23,12.52,-72.59,-69.58,0); INSERT INTO "extent" VALUES('EPSG','1601','Colombia - east of 69°35''W','Colombia - east of 4°30''E of Bogota (approximately 69°35''W of Greenwich).',-2.25,6.31,-69.59,-66.87,0); INSERT INTO "extent" VALUES('EPSG','1602','Colombia - offshore west of 78°W','Colombia - offshore west of 78°W of Greenwich.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1603','Colombia - offshore Caribbean west of 72°W','Colombia - offshore Caribbean west of 72°W of Greenwich.',7.9,13.68,-77.37,-72.0,0); INSERT INTO "extent" VALUES('EPSG','1604','Angola - Angola proper - offshore','Angola - Angola proper - offshore.',-17.26,-6.01,8.2,13.86,0); INSERT INTO "extent" VALUES('EPSG','1605','Angola - offshore block 15','Angola - offshore block 15.',-6.59,-6.03,10.83,11.67,0); INSERT INTO "extent" VALUES('EPSG','1606','Angola - Angola proper - offshore - west of 12°E','Angola - Angola proper - offshore - west of 12°E.',-17.26,-6.03,8.2,12.0,0); INSERT INTO "extent" VALUES('EPSG','1607','Angola - Angola proper - 12°E to 18°E','Angola - Angola proper between 12°E and 18°E.',-17.44,-5.82,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','1608','Argentina - west of 70.5°W','Argentina - west of 70°30''W.',-52.0,-36.16,-73.59,-70.5,0); INSERT INTO "extent" VALUES('EPSG','1609','Argentina - 70.5°W to 67.5°W onshore','Argentina - between 70°30''W and 67°30''W, onshore.',-54.9,-24.08,-70.5,-67.49,0); INSERT INTO "extent" VALUES('EPSG','1610','Argentina - 67.5°W to 64.5°W onshore','Argentina - between 67°30''W and 64°30''W, onshore.',-55.11,-21.78,-67.5,-64.49,0); INSERT INTO "extent" VALUES('EPSG','1611','Argentina - 64.5°W to 61.5°W onshore','Argentina - between 64°30''W and 61°30''W, onshore.',-54.91,-21.99,-64.5,-61.5,0); INSERT INTO "extent" VALUES('EPSG','1612','Argentina - 61.5°W to 58.5°W onshore','Argentina - between 61°30''W and 58°30''W onshore.',-39.06,-23.37,-61.51,-58.5,0); INSERT INTO "extent" VALUES('EPSG','1613','Argentina - 58.5°W to 55.5°W onshore','Argentina - between 58°30''W and 55°30''W, onshore.',-38.59,-24.84,-58.5,-55.49,0); INSERT INTO "extent" VALUES('EPSG','1614','Argentina - east of 55.5°W onshore','Argentina - east of 55°30''W, onshore.',-28.11,-25.49,-55.5,-53.65,0); INSERT INTO "extent" VALUES('EPSG','1615','Botswana - west of 24°E','Botswana - west of 24°E.',-26.88,-17.99,19.99,24.0,0); INSERT INTO "extent" VALUES('EPSG','1616','Botswana - 21°E to 27°E','Botswana - between 21°E and 27°E.',-26.88,-17.78,21.0,27.0,1); INSERT INTO "extent" VALUES('EPSG','1617','Botswana - east of 24°E','Botswana - east of 24°E.',-25.84,-17.78,24.0,29.38,0); INSERT INTO "extent" VALUES('EPSG','1618','Tunisia - onshore','Tunisia - onshore.',30.23,37.4,7.49,11.59,0); INSERT INTO "extent" VALUES('EPSG','1619','Tunisia - north of 34°39''N','Tunisia - onshore north of 38.5 grads North (34°39''N).',34.65,37.4,8.18,11.37,0); INSERT INTO "extent" VALUES('EPSG','1620','Tunisia - south of 34°39''N','Tunisia - onshore south of 38.5 grads North (34°39''N) .',30.23,34.66,7.49,11.59,0); INSERT INTO "extent" VALUES('EPSG','1621','Brazil - Corrego Alegre - west of 42°W','Brazil - NE coastal area between 45°W and 42°W.',-3.9,-1.5,-45.0,-42.0,1); INSERT INTO "extent" VALUES('EPSG','1622','Brazil - Corrego Alegre - east of 42°W','Brazil - NE coastal area between 42°W and 40°W.',-4.0,-2.7,-42.0,-40.0,1); INSERT INTO "extent" VALUES('EPSG','1623','Asia - Middle East - Lebanon and Syria onshore','Lebanon - onshore. Syrian Arab Republic - onshore.',32.31,37.3,35.04,42.38,0); INSERT INTO "extent" VALUES('EPSG','1624','Germany - West Germany - west of 7.5°E','Germany - former West Germany onshore west of 7°30''E - states of Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland.',49.11,53.81,5.86,7.51,0); INSERT INTO "extent" VALUES('EPSG','1625','Germany - West-Germany - 7.5°E to 10.5°E','Germany - former West Germany onshore between 7°30''E and 10°30''E - states of Baden-Wurtemberg, Bayern, Bremen, Hamberg, Hessen, Niedersachsen, Nordrhein-Westfalen, Rhineland-Pfalz, Schleswig-Holstein.',47.27,55.09,7.5,10.51,0); INSERT INTO "extent" VALUES('EPSG','1626','Germany - West Germany - 10.5°E to 13.5°E','Germany - former West Germany onshore between 10°30''E and 13°30''E - states of Bayern, Berlin, Niedersachsen, Schleswig-Holstein.',47.39,54.59,10.5,13.51,0); INSERT INTO "extent" VALUES('EPSG','1627','Germany - West Germany - east of 13.5°E','Germany - former West Germany onshore east of 13°30''E - state of Bayern.',48.51,48.98,13.5,13.84,0); INSERT INTO "extent" VALUES('EPSG','1628','Germany - west of 4.5°E','Germany - onshore - west of 4°30''E.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1629','UK - offshore - North Sea','United Kingdom (UK) - offshore - North Sea.',51.03,62.03,-5.05,3.4,0); INSERT INTO "extent" VALUES('EPSG','1630','Netherlands - offshore','Netherlands - offshore North Sea.',51.44,55.77,2.53,6.37,0); INSERT INTO "extent" VALUES('EPSG','1631','Europe - 18°W to 12°W and ED50 by country','Europe - between 18°W and 12°W - Ireland offshore.',48.43,56.57,-16.1,-12.0,0); INSERT INTO "extent" VALUES('EPSG','1632','Europe - 12°W to 6°W and ED50 by country','Europe - between 12°W and 6°W - Faroe Islands - onshore; Spain - mainland onshore; Ireland offshore.',36.13,62.41,-12.0,-6.0,0); INSERT INTO "extent" VALUES('EPSG','1633','Europe - 6°W to 0°W and ED50 by country','Europe - between 6°W and 0°W - Channel Islands (Jersey, Guernsey); France offshore; Gibraltar; Ireland offshore; Norway including Svalbard - offshore; Spain - onshore; United Kingdom - UKCS offshore.',35.26,80.49,-6.0,0.01,0); INSERT INTO "extent" VALUES('EPSG','1634','Europe - 0°E to 6°E and ED50 by country','Europe - between 0°E and 6°E - Andorra; Denmark (North Sea); France - offshore; Germany - offshore; Netherlands - offshore; Norway including Svalbard - onshore and offshore; Spain - onshore (mainland and Balearic Islands); United Kingdom - offshore UKCS.',38.56,82.45,0.0,6.0,0); INSERT INTO "extent" VALUES('EPSG','1635','Europe - 6°E to 12°E and ED50 by country','Europe - between 6°E and 12°E - Denmark - onshore and offshore; France - offshore; Germany offshore; Italy - onshore and offshore; Netherlands offshore; Norway including Svalbard - onshore and offshore.',36.53,84.33,6.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','1636','Europe - 12°E to 18°E and ED50 by country','Europe - between 12°E and 18°E onshore and offshore - Denmark (including Bornholm); Italy including San Marino and Vatican City State; Malta; Norway including Svalbard.',34.49,84.42,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','1637','Europe - 18°E to 24°E and ED50 by country','Europe - between 18°E and 24°E - Greece - offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',33.59,84.54,17.99,24.01,0); INSERT INTO "extent" VALUES('EPSG','1638','Europe - 24°E to 30°E and ED50 by country','Europe - between 24°E and 30°E - Greece - offshore; Norway including Svalbard - onshore and offshore; Türkiye (Turkey) - onshore and offshore. Egypt - Western Desert.',25.71,84.73,24.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','1639','Europe - 30°E to 36°E and ED50 by country','Europe - between 30°E and 36°E - Israel - offshore; Jordan; Norway including Svalbard - onshore and offshore; Türkiye (Turkey) - onshore and offshore.',29.19,84.7,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','1640','Europe - 36°E to 42°E and ED50 by country','Europe - between 36°E and 42°E - Jordan; Norway including Svalbard - offshore; Türkiye (Turkey) - onshore and offshore.',29.18,79.07,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','1641','Europe - 42°E to 48°E and ED50 by country','Europe - between 42°E and 48°E - Türkiye (Turkey).',36.97,41.6,42.0,44.83,0); INSERT INTO "extent" VALUES('EPSG','1642','Egypt - east of 33°E onshore','Egypt - east of 33°E - onshore plus offshore Gulf of Suez.',21.97,31.36,33.0,36.95,0); INSERT INTO "extent" VALUES('EPSG','1643','Egypt - 29°E to 33°E','Egypt - onshore between 29°E and 33°E, offshore Mediterranean east of 29°E and offshore Gulf of Suez.',21.99,33.82,29.0,34.27,0); INSERT INTO "extent" VALUES('EPSG','1644','Egypt - west of 29°E; north of 28°11''N','Egypt - onshore west of 29°E and north of approximately 28°11''N.',28.18,31.68,24.7,29.0,0); INSERT INTO "extent" VALUES('EPSG','1645','Egypt - west of 29°E; south of 28°11''N','Egypt - west of 29°E; south of approximately 28°11''N.',21.99,28.19,24.99,29.01,0); INSERT INTO "extent" VALUES('EPSG','1646','Europe - Estonia; Latvia; Lithuania','Estonia, Latvia and Lithuania - onshore and offshore.',53.89,60.0,19.02,28.24,0); INSERT INTO "extent" VALUES('EPSG','1647','Indonesia - west of 96°E, N hemisphere','Indonesia - north of equator and west of 96°E - onshore and offshore.',0.0,7.79,92.01,96.0,0); INSERT INTO "extent" VALUES('EPSG','1648','Indonesia - west of 96°E, S hemisphere','Indonesia - south of equator and west of 96°E.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1649','Indonesia - 96°E to 102°E, N hemisphere','Indonesia - north of equator and between 96°E and 102°E - onshore and offshore.',0.0,7.49,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','1650','Indonesia - 96°E to 102°E, S hemisphere','Indonesia - south of equator and between 96°E and 102°E - onshore and offshore.',-8.86,0.0,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','1651','Indonesia - 102°E to 108°E, N hemisphere','Indonesia - north of equator and between 102°E and 108°E - onshore and offshore.',0.0,6.94,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','1652','Indonesia - 102°E to 108°E, S hemisphere','Indonesia - south of equator and between 102°E and 108°E - onshore and offshore.',-10.73,0.0,102.0,108.01,0); INSERT INTO "extent" VALUES('EPSG','1653','Indonesia - 108°E to 114°E, N hemisphere','Indonesia - north of equator and between 108°E and 114°E - onshore and offshore.',0.0,7.37,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1654','Indonesia - 108°E to 114°E, S hemisphere','Indonesia - south of equator and between 108°E and 114°E - onshore and offshore.',-12.07,0.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1655','Indonesia - 114°E to 120°E, N hemisphere','Indonesia - north of equator and between 114°E and 120°E - onshore and offshore.',0.0,4.37,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','1656','Indonesia - 114°E to 120°E, S hemisphere','Indonesia - south of equator and between 114°E and 120°E - onshore and offshore.',-13.06,0.0,114.0,120.01,0); INSERT INTO "extent" VALUES('EPSG','1657','Indonesia - 120°E to 126°E, N hemisphere','Indonesia - north of equator and between 120°E and 126°E - onshore and offshore.',0.0,5.48,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','1658','Indonesia - 120°E to 126°E, S hemisphere','Indonesia - south of equator and between 120°E and 126°E - onshore and offshore.',-13.95,0.01,120.0,126.01,0); INSERT INTO "extent" VALUES('EPSG','1659','Indonesia - 126°E to 132°E, N hemisphere','Indonesia - north of equator and between 126°E and 132°E - onshore and offshore.',0.0,6.68,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','1660','Indonesia - 126°E to 132°E, S hemisphere','Indonesia - south of equator and between 126°E and 132°E - onshore and offshore.',-9.45,0.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','1661','Indonesia - 132°E to 138°E, N hemisphere','Indonesia - north of equator and east of 132°E.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1662','Indonesia - 132°E to 138°E, S hemisphere','Indonesia - south of equator and between 132°E and 138°E - onshore and offshore.',-10.06,0.0,132.0,138.01,0); INSERT INTO "extent" VALUES('EPSG','1663','Indonesia - east of 138°E, S hemisphere','Indonesia - south of equator and east of 138°E - onshore and offshore.',-10.84,0.0,138.0,141.46,0); INSERT INTO "extent" VALUES('EPSG','1664','Myanmar (Burma) - onshore west of 96°E','Myanmar (Burma) - onshore west of 96°E.',15.66,27.14,92.2,96.01,0); INSERT INTO "extent" VALUES('EPSG','1665','Asia - Myanmar and Thailand - 96°E to 102°E','Myanmar (Burma) - onshore east of 96°E; Thailand - onshore west of 102°E.',5.63,28.55,95.99,102.01,0); INSERT INTO "extent" VALUES('EPSG','1666','Thailand - east of 102°E','Thailand - onshore and offshore east of 102°E.',6.02,18.44,102.0,105.64,0); INSERT INTO "extent" VALUES('EPSG','1667','Thailand - onshore and GoT 96°E to102°E','Thailand - onshore west of 102°E plus offshore Gulf of Thailand west of 102°E.',5.63,20.46,97.34,102.01,0); INSERT INTO "extent" VALUES('EPSG','1668','Pakistan - north of 35°35''N','Pakistan - north of 35°35''N.',35.58,37.07,71.18,77.01,0); INSERT INTO "extent" VALUES('EPSG','1669','Asia - India; Pakistan - 28°N to 35°35''N','India - north of 28°N; Pakistan - between 28°N and 35°35''N.',28.0,35.59,60.86,81.64,0); INSERT INTO "extent" VALUES('EPSG','1670','Asia - India; Pakistan - onshore 21°N to 28°N and west of 82°E','India - onshore between 21°N and 28°N and west of 82°E; Pakistan - onshore south of 28°N.',21.0,28.01,61.59,82.01,0); INSERT INTO "extent" VALUES('EPSG','1671','Asia - Bangladesh; India; Myanmar; Pakistan - zone Ilb','Bangladesh - onshore north of 21°N; India - onshore north of 21°N and east of 82°E; Myanmar (Burma) - north of 21°N.',21.0,29.47,82.0,101.17,0); INSERT INTO "extent" VALUES('EPSG','1672','India - onshore 15°N to 21°N','India - onshore between 15°N and 21°N.',15.0,21.01,70.14,87.15,0); INSERT INTO "extent" VALUES('EPSG','1673','India - mainland south of 15°N','India - mainland onshore south of 15°N.',8.02,15.01,73.94,80.4,0); INSERT INTO "extent" VALUES('EPSG','1674','Bangladesh - onshore west of 90°E','Bangladesh - onshore west of 90°E.',21.59,26.64,88.01,90.0,0); INSERT INTO "extent" VALUES('EPSG','1675','Bangladesh - onshore east of 90°E','Bangladesh - onshore east of 90°E.',20.52,25.29,90.0,92.67,0); INSERT INTO "extent" VALUES('EPSG','1676','India - north of 28°N','India - north of 28°N.',28.0,35.51,70.35,81.64,0); INSERT INTO "extent" VALUES('EPSG','1677','India - onshore 21°N to 28°N and west of 82°E','India - onshore between 21°N and 28°N and west of 82°E.',21.0,28.01,68.13,82.01,0); INSERT INTO "extent" VALUES('EPSG','1678','India - onshore north of 21°N and east of 82°E','India - onshore north of 21°N and east of 82°E.',21.0,29.47,82.0,97.42,0); INSERT INTO "extent" VALUES('EPSG','1679','India - onshore west of 72°E','India - onshore west of 72°E.',20.64,28.22,68.13,72.01,0); INSERT INTO "extent" VALUES('EPSG','1680','India - mainland 72°E to 78°E','India - mainland onshore between 72°E and 78°E.',8.02,35.51,72.0,78.01,0); INSERT INTO "extent" VALUES('EPSG','1681','India - onshore 78°E to 84°E','India - onshore between 78°E and 84°E.',8.29,35.5,78.0,84.01,0); INSERT INTO "extent" VALUES('EPSG','1682','India - onshore 84°E to 90°E','India - onshore between 84°E and 90°E.',18.18,28.14,84.0,90.01,0); INSERT INTO "extent" VALUES('EPSG','1683','India - mainland 90°E to 96°E','India - mainland onshore between 90°E and 96°E.',21.94,29.42,90.0,96.01,0); INSERT INTO "extent" VALUES('EPSG','1684','India - east of 96°E','India - east of 96°E.',27.1,29.47,96.0,97.42,0); INSERT INTO "extent" VALUES('EPSG','1685','Pakistan - 28°N to 35°35''N','Pakistan - between 28°N and 35°35''N.',28.0,35.59,60.86,77.83,0); INSERT INTO "extent" VALUES('EPSG','1686','Pakistan - onshore south of 28°N','Pakistan - onshore south of 28°N.',23.64,28.01,61.59,71.91,0); INSERT INTO "extent" VALUES('EPSG','1687','Pakistan - onshore west of 66°E','Pakistan - onshore west of 66°E.',24.98,29.87,60.86,66.01,0); INSERT INTO "extent" VALUES('EPSG','1688','Pakistan - onshore 66°E to 72°E','Pakistan - onshore between 66°E and 72°E.',23.64,36.56,66.0,72.01,0); INSERT INTO "extent" VALUES('EPSG','1689','Pakistan - east of 72°E','Pakistan - east of 72°E.',28.21,37.07,72.0,77.83,0); INSERT INTO "extent" VALUES('EPSG','1690','Malaysia - West Malaysia - onshore','Malaysia - West Malaysia onshore.',1.21,6.72,99.59,104.6,0); INSERT INTO "extent" VALUES('EPSG','1691','Malaysia - West Malaysia - onshore west of 102°E','Malaysia - West Malaysia onshore west of 102°E.',2.29,6.72,99.59,102.01,0); INSERT INTO "extent" VALUES('EPSG','1692','Malaysia - West Malaysia - east of 102°E','Malaysia - onshore West Malaysia east of 102°E and offshore east coast.',1.21,7.81,102.0,105.82,0); INSERT INTO "extent" VALUES('EPSG','1693','Venezuela - west of 72°W','Venezuela - west of 72°W.',7.02,11.62,-73.38,-71.99,0); INSERT INTO "extent" VALUES('EPSG','1694','Venezuela - 72°W and 66°W onshore','Venezuela - between 72°W and 66°W, onshore.',0.73,12.25,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1695','Venezuela - east of 66°W onshore','Venezuela - onshore east of 66°W.',0.64,11.23,-66.0,-59.8,0); INSERT INTO "extent" VALUES('EPSG','1696','Gabon - north of equator and west of 12°E onshore','Gabon - onshore north of equator and west of 12°E.',0.0,2.32,9.25,12.0,0); INSERT INTO "extent" VALUES('EPSG','1697','Gabon - west of 12°E','Gabon - west of 12°E - onshore and offshore.',-6.37,2.32,7.03,12.01,0); INSERT INTO "extent" VALUES('EPSG','1698','Philippines - zone I','Philippines - west of 118°E onshore and offshore.',6.21,18.64,116.04,118.0,0); INSERT INTO "extent" VALUES('EPSG','1699','Philippines - zone II','Philippines - approximately between 118°E and 120°E - Palawan; Calamian Islands - onshore and offshore.',3.02,20.42,118.0,120.07,0); INSERT INTO "extent" VALUES('EPSG','1700','Philippines - zone III','Philippines - approximately between 120°E and 122°E, onshore and offshore. Luzon (west of 122°E); Mindoro.',3.0,21.62,119.7,122.21,0); INSERT INTO "extent" VALUES('EPSG','1701','Philippines - zone IV','Philippines - approximately between 122°E and 124°E onshore and offshore - southeast Luzon (east of 122°E); Tablas; Masbate; Panay; Cebu; Negros; west Mindanao (west of 122°E).',3.44,22.18,121.74,124.29,0); INSERT INTO "extent" VALUES('EPSG','1702','Philippines - zone V','Philippines - approximately between 124°E and 126°E, onshore and offshore - east Mindanao (east of 124°E); Bohol; Samar.',4.76,21.97,123.73,126.65,0); INSERT INTO "extent" VALUES('EPSG','1703','Morocco - north of 31.5°N','Morocco onshore north of 35 grads North (31°30''N).',31.49,35.97,-9.85,-1.01,0); INSERT INTO "extent" VALUES('EPSG','1704','Morocco - 27.9°N to 31.5°N','Morocco between 31 grads and 35 grads North (27°54''N and 31°30''N).',27.9,31.5,-13.0,-3.5,1); INSERT INTO "extent" VALUES('EPSG','1705','Morocco - south of 27.9°N','Morocco south of 31 grads North (27°54''N).',21.06,27.9,-17.0,-8.67,1); INSERT INTO "extent" VALUES('EPSG','1706','Austria - west of 11°50''E','Austria west of 11°50''E of Greenwich (29°30''E of Ferro).',46.77,47.61,9.53,11.84,0); INSERT INTO "extent" VALUES('EPSG','1707','Austria - 11°50''E to 14°50''E','Austria between 11°50''E and 14°50''E of Greenwich (29°30''E and 32°30''E of Ferro).',46.4,48.79,11.83,14.84,0); INSERT INTO "extent" VALUES('EPSG','1708','Austria - east of 14°50''E','Austria east of 14°50''E of Greenwich (32°30''E of Ferro).',46.56,49.02,14.83,17.17,0); INSERT INTO "extent" VALUES('EPSG','1709','Europe - former Yugoslavia onshore west of 16.5°E','Bosnia and Herzegovina - west of 16°30''E; Croatia - onshore west of 16°30''E; Slovenia - onshore.',42.95,46.88,13.38,16.5,0); INSERT INTO "extent" VALUES('EPSG','1710','Europe - former Yugoslavia onshore 16.5°E to 19.5°E','Bosnia and Herzegovina - between 16°30''E and 19°30''E; Croatia - onshore east of 16°30''E; Montenegro - onshore west of 19°30''E; Serbia - west of 19°30''E.',41.79,46.55,16.5,19.51,0); INSERT INTO "extent" VALUES('EPSG','1711','Europe - former Yugoslavia onshore 19.5°E to 22.5°E','Bosnia and Herzegovina - east of 19°30''E; Kosovo; Montenegro - east of 19°30''E; Serbia - between 19°30''E and 22°30''E.',41.85,46.19,19.5,22.51,0); INSERT INTO "extent" VALUES('EPSG','1712','Europe - former Yugoslavia onshore east of 22.5°E','North Macedonia - east of 22°30''E; Serbia - east of 22°30''E.',41.11,44.7,22.5,23.04,0); INSERT INTO "extent" VALUES('EPSG','1713','Nigeria - east of 10.5°E','Nigeria east of 10°30''E.',6.43,13.72,10.49,14.65,0); INSERT INTO "extent" VALUES('EPSG','1714','Nigeria - 6.5°E to 10.5°E','Nigeria between 6°30''E and 10°30''E, onshore and offshore shelf.',3.57,13.53,6.5,10.51,0); INSERT INTO "extent" VALUES('EPSG','1715','Nigeria - west of 6.5°E','Nigeria - onshore west of 6°30''E, onshore and offshore shelf.',3.57,13.9,2.69,6.5,0); INSERT INTO "extent" VALUES('EPSG','1716','Nigeria - offshore deep water - west of 6°E','Nigeria - offshore beyond continental shelf west of 6°E.',1.92,6.14,2.66,6.0,0); INSERT INTO "extent" VALUES('EPSG','1717','Nigeria - offshore deep water','Nigeria - offshore beyond continental shelf.',1.92,6.14,2.66,7.82,0); INSERT INTO "extent" VALUES('EPSG','1718','Italy - west of 12°E','Italy - onshore and offshore - west of 12°E.',36.53,47.04,5.93,12.0,0); INSERT INTO "extent" VALUES('EPSG','1719','Italy - east of 12°E','Italy - onshore and offshore - east of 12°E including San Marino and Vatican City State.',34.76,47.1,12.0,18.99,0); INSERT INTO "extent" VALUES('EPSG','1720','USA - Michigan - SPCS - E','United States (USA) - Michigan - counties of Alcona; Alpena; Arenac; Bay; Cheboygan; Chippewa; Clinton; Crawford; Genesee; Gladwin; Gratiot; Hillsdale; Huron; Ingham; Iosco; Jackson; Lapeer; Lenawee; Livingston; Macomb; Midland; Monroe; Montmorency; Oakland; Ogemaw; Oscoda; Otsego; Presque Isle; Roscommon; Saginaw; Sanilac; Shiawassee; St Clair; Tuscola; Washtenaw; Wayne.',41.69,46.04,-84.87,-82.13,0); INSERT INTO "extent" VALUES('EPSG','1721','USA - Michigan - SPCS - old central','United States (USA) - Michigan - counties of Alger; Allegan; Antrim; Barry; Benzie; Berrien; Branch; Calhoun; Cass; Charlevoix; Clare; Delta; Eaton; Emmet; Grand Traverse; Ionia; Isabella; Kalamazoo; Kalkaska; Kent; Lake; Leelanau; Luce; Mackinac; Manistee; Mason; Mecosta; Missaukee; Montcalm; Muskegon; Newaygo; Oceana; Osceola; Ottawa; St Joseph; Schoolcraft; Van Buren; Wexford.',41.75,46.11,-87.61,-84.6,0); INSERT INTO "extent" VALUES('EPSG','1722','USA - Michigan - SPCS - W','United States (USA) - Michigan - counties of Alger; Baraga; Chippewa; Delta; Dickinson; Gogebic; Houghton; Iron; Keweenaw; Luce; Mackinac; Marquette; Menominee; Ontonagon; Schoolcraft.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1723','USA - Michigan - SPCS - N','United States (USA) - Michigan north of approximately 45°45''N - counties of Alger; Baraga; Chippewa; Delta; Dickinson; Gogebic; Houghton; Iron; Keweenaw; Luce; Mackinac; Marquette; Menominee; Ontonagon; Schoolcraft.',45.08,48.32,-90.42,-83.44,0); INSERT INTO "extent" VALUES('EPSG','1724','USA - Michigan - SPCS - C','United States (USA) - Michigan - counties of Alcona; Alpena; Antrim; Arenac; Benzie; Charlevoix; Cheboygan; Clare; Crawford; Emmet; Gladwin; Grand Traverse; Iosco; Kalkaska; Lake; Leelanau; Manistee; Mason; Missaukee; Montmorency; Ogemaw; Osceola; Oscoda; Otsego; Presque Isle; Roscommon; Wexford.',43.8,45.92,-87.06,-82.27,0); INSERT INTO "extent" VALUES('EPSG','1725','USA - Michigan - SPCS - S','United States (USA) - Michigan - counties of Allegan; Barry; Bay; Berrien; Branch; Calhoun; Cass; Clinton; Eaton; Genesee; Gratiot; Hillsdale; Huron; Ingham; Ionia; Isabella; Jackson; Kalamazoo; Kent; Lapeer; Lenawee; Livingston; Macomb; Mecosta; Midland; Monroe; Montcalm; Muskegon; Newaygo; Oakland; Oceana; Ottawa; Saginaw; Sanilac; Shiawassee; St Clair; St Joseph; Tuscola; Van Buren; Washtenaw; Wayne.',41.69,44.22,-87.2,-82.13,0); INSERT INTO "extent" VALUES('EPSG','1726','Mozambique - offshore','Mozambique - offshore.',-27.71,-10.09,32.64,43.03,0); INSERT INTO "extent" VALUES('EPSG','1727','Suriname - offshore','Suriname - offshore.',5.34,9.35,-57.25,-52.66,0); INSERT INTO "extent" VALUES('EPSG','1728','Algeria - north of 34°39''N','Algeria - onshore north of 38.5 grads North (34°39''N).',34.64,37.14,-2.22,8.64,0); INSERT INTO "extent" VALUES('EPSG','1729','Algeria - 31°30''N to 34°39''N','Algeria - 35 grads to 38.5 grads North (31°30''N to 34°39''N).',31.49,34.66,-3.85,9.22,0); INSERT INTO "extent" VALUES('EPSG','1730','North America - NAVD88','North America: Canada - Alberta; British Columbia (BC); Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward Island (PEI); Quebec; Saskatchewan; Yukon. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',25.0,58.0,-168.0,-52.0,1); INSERT INTO "extent" VALUES('EPSG','1731','France - mainland north of 48.15°N','France mainland onshore north of 53.5 grads North (48°09''N).',48.14,51.14,-4.87,8.23,0); INSERT INTO "extent" VALUES('EPSG','1732','France - mainland 45.45°N to 48.15°N','France mainland onshore between 50.5 grads and 53.5 grads North (45°27''N to 48°09''N).',45.44,48.15,-4.8,7.63,0); INSERT INTO "extent" VALUES('EPSG','1733','France - mainland south of 45.45°N','France - mainland onshore south of 50.5 grads North (45°27''N).',42.33,45.46,-1.79,7.71,0); INSERT INTO "extent" VALUES('EPSG','1734','France - mainland 45.45°N to 48.15°N. Also all mainland.','France mainland onshore between 50.5 grads and 53.5 grads North (45°27''N to 48°09''N). Also used over all onshore mainland France.',42.33,51.14,-4.87,8.23,0); INSERT INTO "extent" VALUES('EPSG','1735','Algeria - west of 6°W','Algeria - west of 6°W (of Greenwich).',25.73,29.85,-8.67,-6.0,0); INSERT INTO "extent" VALUES('EPSG','1736','Algeria - 6°W to 0°W onshore','Algeria - onshore between 6°W and 0°W (of Greenwich).',21.82,35.96,-6.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','1737','Algeria - 0°E to 6°E onshore','Algeria - onshore between 0°E and 6°E (of Greenwich).',18.97,36.97,0.0,6.01,0); INSERT INTO "extent" VALUES('EPSG','1738','Algeria - east of 6°E onshore','Algeria - onshore east of 6°E (of Greenwich).',19.6,37.14,6.0,11.99,0); INSERT INTO "extent" VALUES('EPSG','1739','Kuwait - west of 48°E onshore','Kuwait - onshore west of 48°E.',28.53,30.09,46.54,48.0,0); INSERT INTO "extent" VALUES('EPSG','1740','Kuwait - east of 48°E onshore','Kuwait - onshore east of 48°E.',28.54,30.04,48.0,48.48,0); INSERT INTO "extent" VALUES('EPSG','1741','Norway - zone I','Norway - west of 3°30''W of Oslo (7°13''22.5"E of Greenwich).',57.92,63.17,4.39,7.23,0); INSERT INTO "extent" VALUES('EPSG','1742','Norway - zone II','Norway - between 3°30''W and 1°10'' W of Oslo (7°13''22.5"E and 9°33''22.5"E of Greenwich).',57.9,64.23,7.22,9.56,0); INSERT INTO "extent" VALUES('EPSG','1743','Norway - zone III','Norway - between 1°10''W and 1°15''E of Oslo (9°33''22.5"E and 11°58''22.5"E of Greenwich).',58.78,67.58,9.55,11.98,0); INSERT INTO "extent" VALUES('EPSG','1744','Norway - zone IV','Norway - between 1°15''E and 4°20''E of Oslo (11°58''22.5"E and 15°03''22.5"E of Greenwich).',59.88,69.1,11.97,15.06,0); INSERT INTO "extent" VALUES('EPSG','1745','Norway - zone V','Norway - between 4°20''E and 8°10''E of Oslo (15°03''22.5"E and 18°53''22.5"E of Greenwich).',66.15,70.27,15.05,18.89,0); INSERT INTO "extent" VALUES('EPSG','1746','Norway - zone VI','Norway - between 8°10''E and 12°10''E of Oslo (18°53''22.5"E and 22°53''22.5"E of Greenwich).',68.33,70.93,18.88,22.89,0); INSERT INTO "extent" VALUES('EPSG','1747','Norway - zone VII','Norway - between 12°10''E and 16°15''E of Oslo (22°53''22.5"E and 26°58''22.5"E of Greenwich).',68.58,71.24,22.88,26.98,0); INSERT INTO "extent" VALUES('EPSG','1748','Norway - zone VIII','Norway - east of 16°15''E of Oslo (26°58''22.5"E of Greenwich).',69.02,71.19,26.97,31.32,0); INSERT INTO "extent" VALUES('EPSG','1749','Asia - Middle East - Qatar offshore and UAE west of 54°E','Qatar - offshore. United Arab Emirates (UAE) - Abu Dhabi - onshore and offshore west of 54°E.',22.76,27.05,50.55,54.01,0); INSERT INTO "extent" VALUES('EPSG','1750','UAE - east of 54°E','United Arab Emirates (UAE) onshore and offshore east of 54°E - Abu Dhabi; Dubai; Sharjah; Ajman; Fujairah; Ras Al Kaimah; Umm Al Qaiwain.',22.63,26.27,54.0,57.13,0); INSERT INTO "extent" VALUES('EPSG','1751','Peru - east of 73°W','Peru - east of 73°W, onshore.',-18.39,-2.14,-73.0,-68.67,0); INSERT INTO "extent" VALUES('EPSG','1752','Peru - 79°W to 73°W','Peru - between 79°W and 73°W, onshore.',-16.57,-0.03,-79.0,-73.0,0); INSERT INTO "extent" VALUES('EPSG','1753','Peru - west of 79°W','Peru - west of 79°W.',-8.32,-3.38,-81.41,-79.0,0); INSERT INTO "extent" VALUES('EPSG','1754','Brazil - Amazon cone shelf','Brazil - offshore shelf - Amazon cone.',-1.05,5.6,-51.64,-48.0,0); INSERT INTO "extent" VALUES('EPSG','1755','South America - 84°W to 78°W, S hemisphere and PSAD56 by country','South America (Ecuador and Peru) between 84°W and 78°W, southern hemisphere, onshore.',-10.53,0.0,-81.41,-78.0,0); INSERT INTO "extent" VALUES('EPSG','1756','South America - 78°W to 72°W, N hemisphere and PSAD56 by country','South America (Ecuador; Venezuela) between 78°W and 72°W, northern hemisphere, onshore.',0.0,11.62,-78.0,-71.99,0); INSERT INTO "extent" VALUES('EPSG','1757','South America - 78°W to 72°W, S hemisphere and PSAD56 by country','South America (Chile - north of 45°S; Ecuador; Peru) between 78°W and 72°W, southern hemisphere, onshore.',-43.5,0.0,-78.0,-71.99,0); INSERT INTO "extent" VALUES('EPSG','1758','South America - 72°W to 66°W, N hemisphere and PSAD56 by country','South America (Aruba; Bonaire; Curacao; Venezuela) between 72°W and 66°W, northern hemisphere, onshore.',0.73,12.68,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1759','South America - 72°W to 66°W, S hemisphere and PSAD56 by country','South America (Bolivia; Chile - north of 45°S; Peru) between 72°W and 66°W, southern hemisphere, onshore.',-43.5,-2.14,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1760','South America - 66°W to 60°W, N hemisphere and PSAD56 by country','South America (Guyana; Venezuela) onshore between 66°W and 60°W, northern hemisphere.',0.64,11.23,-66.0,-59.99,0); INSERT INTO "extent" VALUES('EPSG','1761','Bolivia - 66°W to 60°W','Bolivia between 66°W and 60°W.',-22.87,-9.67,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1762','South America - 60°W to 54°W, N hemisphere and PSAD56 by country','South America (Guyana) onshore between 60°W and 54°W, northern hemisphere.',1.18,8.58,-60.0,-56.47,0); INSERT INTO "extent" VALUES('EPSG','1763','Russia - west of 24°E onshore','Russian Federation - onshore west of 24°E - Kaliningrad.',54.32,55.32,19.57,22.87,0); INSERT INTO "extent" VALUES('EPSG','1764','Russia - 24°E to 30°E onshore','Russian Federation - onshore between 24°E and 30°E.',55.69,69.47,26.61,30.0,0); INSERT INTO "extent" VALUES('EPSG','1765','Russia - 30°E to 36°E onshore','Russian Federation - onshore between 30°E and 36°E.',50.34,70.02,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','1766','Russia - 36°E to 42°E onshore','Russian Federation - onshore between 36°E and 42°E.',43.18,69.23,36.0,42.01,0); INSERT INTO "extent" VALUES('EPSG','1767','Russia - 42°E to 48°E onshore','Russian Federation - onshore between 42°E and 48°E.',41.19,80.91,42.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','1768','Russia - 48°E to 54°E onshore','Russian Federation - onshore between 48°E and 54°E.',41.39,81.4,48.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','1769','Russia - 54°E to 60°E onshore','Russian Federation - onshore between 54°E and 60°E.',50.47,81.91,54.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','1770','Russia - 60°E to 66°E onshore','Russian Federation - onshore between 60°E and 66°E.',50.66,81.77,60.0,66.0,0); INSERT INTO "extent" VALUES('EPSG','1771','Russia - 66°E to 72°E onshore','Russian Federation - onshore between 66°E and 72°E .',54.1,77.07,66.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','1772','Russia - 72°E to 78°E onshore','Russian Federation - onshore between 72°E and 78°E.',53.17,79.71,72.0,78.0,0); INSERT INTO "extent" VALUES('EPSG','1773','Russia - 78°E to 84°E onshore','Russian Federation - onshore between 78°E and 84°E.',50.69,81.03,78.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','1774','Russia - 84°E to 90°E onshore','Russian Federation - onshore between 84°E and 90°E.',49.07,81.27,84.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','1775','Russia - 90°E to 96°E onshore','Russian Federation - onshore between 90°E and 96°E.',49.89,81.35,90.0,96.0,0); INSERT INTO "extent" VALUES('EPSG','1776','Russia - 96°E to 102°E onshore','Russian Federation - onshore between 96°E and 102°E.',49.73,81.32,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','1777','Russia - 102°E to 108°E onshore','Russian Federation - onshore between 102°E and 108°E.',49.64,79.48,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','1778','Russia - 108°E to 114°E onshore','Russian Federation - onshore between 108°E and 114°E.',49.14,76.81,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1779','Russia - 114°E to 120°E onshore','Russian Federation - onshore between 114°E and 120°E.',49.51,75.96,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','1780','Russia - 120°E to 126°E onshore','Russian Federation - onshore between 120°E and 126°E.',51.51,74.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','1781','Russia - 126°E to 132°E onshore','Russian Federation - onshore between 126°E and 132°E.',42.25,73.61,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','1782','Russia - 132°E to 138°E onshore','Russian Federation - onshore between 132°E and 138°E.',42.63,76.15,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','1783','Russia - 138°E to 144°E onshore','Russian Federation - onshore between 138°E and 144°E.',45.84,76.27,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','1784','Russia - 144°E to 150°E onshore','Russian Federation - onshore between 144°E and 150°E.',43.6,76.82,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','1785','Russia - 150°E to 156°E onshore','Russian Federation - onshore between 150°E and 156°E.',45.77,76.26,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','1786','Russia - 156°E to 162°E onshore','Russian Federation - onshore between 156°E and 162°E.',50.27,77.2,156.0,162.0,0); INSERT INTO "extent" VALUES('EPSG','1787','Russia - 162°E to 168°E onshore','Russian Federation - onshore between 162°E and 168°E.',54.47,70.03,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','1788','Russia - 168°E to 174°E onshore','Russian Federation - onshore between 168°E and 174°E.',54.45,70.19,168.0,174.0,0); INSERT INTO "extent" VALUES('EPSG','1789','Russia - 174°E to 180°E onshore','Russian Federation - onshore between 174°E and 180°E .',61.65,71.59,174.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1790','Russia - 180° to 174°W onshore','Russian Federation - onshore between 180°E and 174°W.',64.35,71.65,-180.0,-174.0,0); INSERT INTO "extent" VALUES('EPSG','1791','Russia - east of 174°W onshore','Russian Federation - onshore east of 174°W.',64.2,67.18,-174.0,-168.97,0); INSERT INTO "extent" VALUES('EPSG','1792','Europe - 12°E to 18°E onshore and S-42(58) by country','Germany (former DDR) - onshore east of 12°E. Poland - onshore west of 18°E. Czechia, Hungary and Slovakia - west of 18°E.',45.78,54.89,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','1793','Europe - FSU onshore 18°E to 24°E and S-42 by country','Belarus, Estonia, Latvia, Lithuania and Ukraine - onshore west of 24°E. Russian Federation - Kaliningrad onshore.',47.95,59.44,19.57,24.0,0); INSERT INTO "extent" VALUES('EPSG','1794','Europe - FSU onshore 24°E to 30°E and S-42 by country','Estonia; Latvia and Lithuania - onshore east of 24°E; Belarus, Moldova, Russian Federation and Ukraine - onshore 24°E to 30°E.',45.18,69.47,24.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','1795','Europe - FSU onshore 30°E to 36°E','Belarus and Moldova - east of 30°E; Russian Federation and Ukraine - onshore 30°E to 36°E.',44.32,70.02,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','1796','Europe - FSU onshore 36°E to 42°E','Georgia - onshore west of 36°E; Russian Federation - onshore 36°E to 42°E; Ukraine - onshore east of 36°E.',41.43,69.23,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','1797','Europe - FSU onshore 42°E to 48°E','Armenia - west of 48°E; Azerbaijan - west of 48°E; Georgia - east of 42°E; Kazakhstan - west of 48°E; Russian Federation - onshore 42°E to 48°E.',38.84,80.91,42.0,48.01,0); INSERT INTO "extent" VALUES('EPSG','1798','Asia - FSU onshore 48°E to 54°E','Azerbaijan - east of 48°E; Kazakhstan - 48°E to 54°E; Russian Federation - 48°E to 54°E; Turkmenistan - west of 54°E. Includes Caspian Sea (considered a lake rather than offshore).',37.34,81.4,48.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','1799','Asia - FSU onshore 54°E to 60°E','Kazakhstan; Russian Federation - onshore; Turkmenistan - 54°E to 60°E; Uzbekistan - west of 60°E.',37.05,81.91,54.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','1800','Asia - FSU onshore 60°E to 66°E','Kazakhstan; Russian Federation - onshore; Uzbekistan - 60°E to 66°E; Turkmenistan - east of 60°E.',35.14,81.77,60.0,66.0,0); INSERT INTO "extent" VALUES('EPSG','1801','Asia - FSU onshore 66°E to 72°E','Kazakhstan, Russian Federation onshore and Uzbekistan - 66°E to 72°E; Kyrgyzstan and Tajikistan - west of 72°E.',36.67,77.07,66.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','1802','Asia - FSU onshore 72°E to 78°E','Kazakhstan; Kyrgyzstan; Russian Federation onshore - 72°E to 78°E; Tajikistan and Uzbekistan - east of 72°E.',36.79,79.71,72.0,78.0,0); INSERT INTO "extent" VALUES('EPSG','1803','Asia - FSU onshore 78°E to 84°E','Kazakhstan and Russian Federation onshore - 78°E to 84°E; Kyrgyzstan - east of 78°E.',41.04,81.03,78.0,84.01,0); INSERT INTO "extent" VALUES('EPSG','1804','Asia - FSU onshore 84°E to 90°E','Kazakhstan - east of 84°E; Russian Federation - onshore 84°E to 90°E.',46.82,81.27,84.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','1805','Europe - 6°E to 12°E and Pulkovo by country','Czech Republic and Germany (former DDR) - west of 12°E.',50.21,54.18,9.93,12.0,1); INSERT INTO "extent" VALUES('EPSG','1806','South America - UTM 17S and SAD69 by country','South America - between 84°W and 78°W; southern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1807','South America - UTM 18N and SAD69 by country','South America - between 78°W and 72°W; northern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1808','South America - UTM 18S and SAD69 by country','South America - between 78°W and 72°W; southern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1809','South America - UTM 19N and SAD69 by country','South America - between 72°W and 66°W; northern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1810','South America - UTM 19S and SAD69 by country','South America - between 72°W and 66°W; southern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1811','South America - UTM 20N and SAD69 by country','South America - between 66°W and 60°W; northern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1812','South America - UTM 20S and SAD69 by country','South America - between 66°W and 60°W; southern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1813','South America - UTM 21N and SAD69','South America - between 60°W and 54°W; northern hemisphere.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1814','South America - 60°W to 54°W, S hemisphere and SAD69 by country','Brazil - between 60°W and 54°W, northern and southern hemispheres. In rest of South America between 60°W and 54°W southern hemisphere, onshore.',-38.91,4.51,-60.0,-53.99,0); INSERT INTO "extent" VALUES('EPSG','1815','South America - 54°W to 48°W, N hemisphere and SAD69 by country','Brazil - offshore deep water - Amazon cone. In remainder of South America, between 54°W and 48°W, northern hemisphere onshore but excluding most of the area southeast of a line between approximately 2°N, 54°W and 4°N, 52°W.',1.68,5.81,-54.0,-46.65,0); INSERT INTO "extent" VALUES('EPSG','1816','South America - 54°W to 48°W, S hemisphere and SAD69 by country','Brazil - onshore and offshore northern and southern hemispheres between 54°W and 48°W. In remainder of South America - between 54°W and 48°W, southern hemisphere, onshore.',-35.71,7.04,-54.0,-47.99,0); INSERT INTO "extent" VALUES('EPSG','1817','Brazil - 48°W to 42°W','Brazil - between 48°W and 42°W.',-26.3,0.0,-48.0,-42.0,1); INSERT INTO "extent" VALUES('EPSG','1818','Brazil - 42°W to 36°W onshore','Brazil - between 42°W and 36°W, onshore.',-22.96,-2.68,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','1819','Brazil - 36°W to 30°W','Brazil - between 36°W and 30°W.',-10.05,-5.15,-36.0,-30.0,1); INSERT INTO "extent" VALUES('EPSG','1820','Falkland Islands - onshore west of 60°W','Falkland Islands (Malvinas) - onshore west of 60°W.',-52.33,-50.96,-61.55,-59.99,0); INSERT INTO "extent" VALUES('EPSG','1821','Falkland Islands - onshore east of 60°W','Falkland Islands (Malvinas) - onshore east of 60°W.',-52.51,-51.13,-60.0,-57.6,0); INSERT INTO "extent" VALUES('EPSG','1822','Namibia - offshore','Namibia - offshore.',-30.64,-17.24,8.24,16.46,0); INSERT INTO "extent" VALUES('EPSG','1823','South America - 84°W to 78°W, N hemisphere and SIRGAS95 by country','South America between 84°W and 78°W, northern hemisphere, onshore and offshore.',0.9,15.51,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','1824','South America - 84°W to 78°W, S hemisphere','South America between 84°W and 78°W, southern hemisphere, onshore and offshore.',-56.45,0.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','1825','South America - 78°W to 72°W, N hemisphere','South America between 78°W and 72°W, northern hemisphere, onshore and offshore.',0.0,15.04,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','1826','South America - 78°W to 72°W, S hemisphere and SIRGAS 1995 by country','South America between 78°W and 72°W, southern hemisphere, onshore and offshore.',-59.36,0.0,-78.0,-71.99,0); INSERT INTO "extent" VALUES('EPSG','1827','South America - 72°W to 66°W, N hemisphere','South America between 72°W and 66°W, northern hemisphere, onshore and offshore.',0.0,15.64,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1828','South America - 72°W to 66°W, S hemisphere','South America between 72°W and 66°W, southern hemisphere, onshore and offshore.',-59.87,0.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1829','South America - 66°W to 60°W, N hemisphere','South America between 66°W and 60°W, northern hemisphere, onshore and offshore.',0.0,16.75,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1830','South America - 66°W to 60°W, S hemisphere','South America between 66°W and 60°W, southern hemisphere, onshore and offshore.',-58.39,0.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1831','South America - 60°W to 54°W, N hemisphere','South America between 60°W and 54°W, northern hemisphere, onshore and offshore.',0.0,10.7,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','1832','South America - 60°W to 54°W, S hemisphere','South America onshore and offshore, southern hemisphere between 60°W and 54°W.',-44.82,0.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','1833','South America - 54°W to 48°W, N hemisphere','South America between 54°W and 48°W, northern hemisphere, onshore and offshore.',0.0,9.24,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','1834','South America - 54°W to 48°W, S hemisphere','South America between 54°W and 48°W, southern hemisphere, onshore and offshore.',-39.95,0.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','1835','South America - 48°W to 42°W','South America - between 48°W and 42°W, southern hemisphere, onshore and offshore.',-33.5,0.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','1836','South America - 42°W to 36°W','South America - between 42°W and 36°W, southern hemisphere, onshore and offshore.',-26.35,0.0,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','1837','South America - 36°W to 30°W','South America - between 36°W and 30°W, southern hemisphere, onshore and offshore.',-20.11,0.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','1838','Namibia - west of 12°E','Namibia - onshore west of 12°E.',-18.53,-17.15,11.66,12.0,0); INSERT INTO "extent" VALUES('EPSG','1839','Namibia - 12°E to 14°E','Namibia - onshore between 12°E and 14°E.',-21.9,-16.95,12.0,14.01,0); INSERT INTO "extent" VALUES('EPSG','1840','Namibia - 14°E to 16°E','Namibia - onshore between 14°E and 16°E.',-28.3,-17.38,14.0,16.0,0); INSERT INTO "extent" VALUES('EPSG','1841','Namibia - 16°E to 18°E','Namibia - onshore between 16°E and 18°E.',-28.83,-17.38,15.99,18.01,0); INSERT INTO "extent" VALUES('EPSG','1842','Namibia - 18°E to 20°E','Namibia - between 18°E and 20°E.',-28.97,-17.38,18.0,20.0,0); INSERT INTO "extent" VALUES('EPSG','1843','Namibia - 20°E to 22°E','Namibia - between 20°E and 22°E.',-22.01,-17.85,19.99,22.0,0); INSERT INTO "extent" VALUES('EPSG','1844','Namibia - 22°E to 24°E','Namibia - between 22°E and 24°E.',-18.49,-17.52,21.99,24.0,0); INSERT INTO "extent" VALUES('EPSG','1845','Namibia - east of 24°E','Namibia - east of 24°E.',-18.18,-17.47,24.0,25.27,0); INSERT INTO "extent" VALUES('EPSG','1846','Sudan - south - west of 30°E','Sudan south - west of 30°E.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1847','Sudan - south - east of 30°E','Sudan south - east of 30°E.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','1848','Madagascar - nearshore - west of 48°E','Madagascar - nearshore west of 48°E.',-26.59,-13.0,42.53,48.0,0); INSERT INTO "extent" VALUES('EPSG','1849','Madagascar - nearshore - east of 48°E','Madagascar - nearshore east of 48°E.',-24.21,-11.69,48.0,51.03,0); INSERT INTO "extent" VALUES('EPSG','1850','UAE - Abu Dhabi - onshore west of 54°E','United Arab Emirates (UAE) - Abu Dhabi onshore west of 54°E.',22.76,24.32,51.56,54.01,0); INSERT INTO "extent" VALUES('EPSG','1851','Malaysia - East Malaysia onshore','Malaysia - onshore East Malaysia (Sabah; Sarawak).',0.85,7.41,109.54,119.33,0); INSERT INTO "extent" VALUES('EPSG','1852','Asia - Brunei and East Malaysia - 108°E to 114°E','Brunei - offshore west of 114°E; Malaysia - East Malaysia (Sarawak) onshore and offshore west of 114°E).',0.85,7.37,109.31,114.0,0); INSERT INTO "extent" VALUES('EPSG','1853','Asia - Brunei and East Malaysia - 114°E to 120°E','Brunei - onshore and offshore east of 114°E; Malaysia - East Malaysia (Sabah, Sarawak) onshore and offshore east of 114°E).',1.43,7.67,114.0,119.61,0); INSERT INTO "extent" VALUES('EPSG','1854','Japan - zone I','Japan - onshore - Kyushu west of approximately 130°E - Nagasaki-ken; islands of Kagoshima-ken between 27°N and 32°N and between 128°18''E and 130°E (between 128°18''E and 30°13''E for Amami islands).',26.96,34.74,128.17,130.46,0); INSERT INTO "extent" VALUES('EPSG','1855','Japan - zone II','Japan - onshore - Kyushu east of approximately 130°E - Fukuoka-ken; Saga-ken; Kumamoto-ken; Oita-ken; Miyazaki-ken; Kagoshima-ken (except for area within Japan Plane Rectangular Coordinate System zone I).',30.18,33.99,129.76,132.05,0); INSERT INTO "extent" VALUES('EPSG','1856','Japan - zone III','Japan - onshore - Honshu west of approximately 133°15''E - Yamaguchi-ken; Shimane-ken; Hiroshima-ken.',33.72,36.38,130.81,133.49,0); INSERT INTO "extent" VALUES('EPSG','1857','Japan - zone IV','Japan - onshore - Shikoku - Kagawa-ken; Ehime-ken; Tokushima-ken; Kochi-ken.',32.69,34.45,131.95,134.81,0); INSERT INTO "extent" VALUES('EPSG','1858','Japan - zone V','Japan - onshore - Honshu between approximately 133°15''E and 135°10''E - Hyogo-ken; Tottori-ken; Okayama-ken.',34.13,35.71,133.13,135.47,0); INSERT INTO "extent" VALUES('EPSG','1859','Japan - zone VI','Japan - onshore - Honshu between approximately 135°10''E and 136°45''E - Kyoto-fu; Osaka-fu; Fukui-ken; Shiga-ken; Mie-ken; Nara-ken; Wakayama-ken.',33.4,36.33,134.86,136.99,0); INSERT INTO "extent" VALUES('EPSG','1860','Japan - zone VII','Japan - onshore - Honshu between approximately 136°15''E and 137°45''E - Ishikawa-ken; Toyama-ken; Gifu-ken; Aichi-ken.',34.51,37.58,136.22,137.84,0); INSERT INTO "extent" VALUES('EPSG','1861','Japan - zone VIII','Japan - onshore - Honshu between approximately 137°45''E and 139°E - Niigata-ken; Nagano-ken; Yamanashi-ken; Shizuoka-ken.',34.54,38.58,137.32,139.91,0); INSERT INTO "extent" VALUES('EPSG','1862','Japan - zone IX','Japan - onshore - Honshu - Tokyo-to. (Excludes offshore island areas of Tokyo-to covered by Japan Plane Rectangular Coordinate System zones XIV, XVIII and XIX).',29.31,37.98,138.4,141.11,0); INSERT INTO "extent" VALUES('EPSG','1863','Japan - zone X','Japan - onshore - Honshu north of 38°N approximately - Aomori-ken; Akita-ken; Yamagata-ken; Iwate-ken; Miyagi-ken.',37.73,41.58,139.49,142.14,0); INSERT INTO "extent" VALUES('EPSG','1864','Japan - zone XI','Japan - onshore - Hokkaido west of approximately 141°E - Otaru city; Hakodate city; Date city; Usu-gun and Abuta-gun of Iburi-shicho; Hiyama-shicho; Shiribeshi-shicho; Oshima-shicho.',41.34,43.42,139.34,141.46,0); INSERT INTO "extent" VALUES('EPSG','1865','Japan - zone XII','Japan - onshore - Hokkaido between approximately 141°E and 143°E - Sapporo city; Asahikawa city; Wakkanai city; Rumoi city; Bibai city; Yubari city; Iwamizawa city; Tomakomai city; Muroran city; Shibetsu city; Nayoro city; Ashibetsu city; Akabira city; Mikasa city; Takikawa city; Sunagawa city; Ebetsu city; Chitose city; Utashinai city; Fukagawa city; Monbetsu city; Furano city; Noboribetsu city; Eniwa city; Ishikari-shicho; Monbetsu-gun of Abashiri-shicho; Kamikawa-shicho; Soya-shicho; Hidaka-shicho; Iburi-shicho (except Usu-gun and Abuta-gun); Sorachi-shicho; Rumoi-shicho.',42.15,45.54,140.89,143.61,0); INSERT INTO "extent" VALUES('EPSG','1866','Japan - zone XIII','Japan - onshore - Hokkaido east of approximately 143°E - Kitami city; Obihiro city; Kushiro city; Abashiri city; Nemuro city; Nemuro-shicho; Kushiro-shicho; Abashiri-shicho (except Monbetsu-gun); Tokachi-shicho.',41.87,44.4,142.61,145.87,0); INSERT INTO "extent" VALUES('EPSG','1867','Japan - zone XIV','Japan - onshore - Tokyo-to south of 28°N and between 140°30''E and 143°E.',24.67,27.8,141.2,142.33,0); INSERT INTO "extent" VALUES('EPSG','1868','Japan - zone XV','Japan - onshore - Okinawa-ken between 126°E and 130°E.',26.02,26.91,126.63,128.4,0); INSERT INTO "extent" VALUES('EPSG','1869','Japan - zone XVI','Japan - onshore - Okinawa-ken west of 126°E.',23.98,24.94,122.83,125.51,0); INSERT INTO "extent" VALUES('EPSG','1870','Japan - zone XVII','Japan - onshore Okinawa-ken east of 130°E.',24.4,26.01,131.12,131.38,0); INSERT INTO "extent" VALUES('EPSG','1871','Japan - zone XVIII','Japan - onshore - Tokyo-to south of 28°N and west of 140°30''E.',20.37,20.48,136.02,136.16,0); INSERT INTO "extent" VALUES('EPSG','1872','Japan - Minamitori-shima (Marcus Island) - onshore','Japan - onshore - Tokyo-to south of 28°N and east of 143°E - Minamitori-shima (Marcus Island).',24.22,24.35,153.91,154.05,0); INSERT INTO "extent" VALUES('EPSG','1873','World - N hemisphere - 180°W to 174°W','Between 180°W and 174°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-180.0,-174.0,0); INSERT INTO "extent" VALUES('EPSG','1874','World - S hemisphere - 180°W to 174°W','Between 180°W to 174°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-180.0,-174.0,0); INSERT INTO "extent" VALUES('EPSG','1875','World - N hemisphere - 174°W to 168°W','Between 174°W and 168°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-174.0,-168.0,0); INSERT INTO "extent" VALUES('EPSG','1876','World - S hemisphere - 174°W to 168°W','Between 174°W and 168°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-174.0,-168.0,0); INSERT INTO "extent" VALUES('EPSG','1877','World - N hemisphere - 168°W to 162°W','Between 168°W and 162°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-168.0,-162.0,0); INSERT INTO "extent" VALUES('EPSG','1878','World - S hemisphere - 168°W to 162°W','Between 168°W and 162°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-168.0,-162.0,0); INSERT INTO "extent" VALUES('EPSG','1879','World - N hemisphere - 162°W to 156°W','Between 162°W and 156°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-162.0,-156.0,0); INSERT INTO "extent" VALUES('EPSG','1880','World - S hemisphere - 162°W to 156°W','Between 162°W and 156°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-162.0,-156.0,0); INSERT INTO "extent" VALUES('EPSG','1881','World - N hemisphere - 156°W to 150°W','Between 156°W and 150°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-156.0,-150.0,0); INSERT INTO "extent" VALUES('EPSG','1882','World - S hemisphere - 156°W to 150°W','Between 156°W and 150°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-156.0,-150.0,0); INSERT INTO "extent" VALUES('EPSG','1883','World - N hemisphere - 150°W to 144°W','Between 150°W and 144°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-150.0,-144.0,0); INSERT INTO "extent" VALUES('EPSG','1884','World - S hemisphere - 150°W to 144°W','Between 150°W and 144°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-150.0,-144.0,0); INSERT INTO "extent" VALUES('EPSG','1885','World - N hemisphere - 144°W to 138°W','Between 144°W and 138°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-144.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','1886','World - S hemisphere - 144°W to 138°W','Between 144°W and 138°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-144.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','1887','World - N hemisphere - 138°W to 132°W','Between 138°W and 132°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-138.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','1888','World - S hemisphere - 138°W to 132°W','Between 138°W and 132°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-138.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','1889','World - N hemisphere - 132°W to 126°W','Between 132°W and 126°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','1890','World - S hemisphere - 132°W to 126°W','Between 132°W and 126°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','1891','World - N hemisphere - 126°W to 120°W','Between 126°W and 120°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-126.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','1892','World - S hemisphere - 126°W to 120°W','Between 126°W and 120°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-126.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','1893','World - N hemisphere - 120°W to 114°W','Between 120°W and 114°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','1894','World - S hemisphere - 120°W to 114°W','Between 120°W and 114°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','1895','World - N hemisphere - 114°W to 108°W','Between 114°W and 108°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','1896','World - S hemisphere - 114°W to 108°W','Between 114°W and 108°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','1897','World - N hemisphere - 108°W to 102°W','Between 108°W and 102°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','1898','World - S hemisphere - 108°W to 102°W','Between 108°W and 102°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','1899','World - N hemisphere - 102°W to 96°W','Between 102°W and 96°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','1900','World - S hemisphere - 102°W to 96°W','Between 102°W and 96°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','1901','World - N hemisphere - 96°W to 90°W','Between 96°W and 90°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','1902','World - S hemisphere - 96°W to 90°W','Between 96°W and 90°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','1903','World - N hemisphere - 90°W to 84°W','Between 90°W and 84°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','1904','World - S hemisphere - 90°W to 84°W','Between 90°W and 84°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','1905','World - N hemisphere - 84°W to 78°W','Between 84°W and 78°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','1906','World - S hemisphere - 84°W to 78°W','Between 84°W and 78°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','1907','World - N hemisphere - 78°W to 72°W','Between 78°W and 72°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','1908','World - S hemisphere - 78°W to 72°W','Between 78°W and 72°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','1909','World - N hemisphere - 72°W to 66°W','Between 72°W and 66°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1910','World - S hemisphere - 72°W to 66°W','Between 72°W and 66°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','1911','World - N hemisphere - 66°W to 60°W','Between 66°W and 60°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1912','World - S hemisphere - 66°W to 60°W','Between 66°W and 60°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','1913','World - N hemisphere - 60°W to 54°W','Between 60°W and 54°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','1914','World - S hemisphere - 60°W to 54°W','Between 60°W and 54°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','1915','World - N hemisphere - 54°W to 48°W','Between 54°W and 48°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','1916','World - S hemisphere - 54°W to 48°W','Between 54°W and 48°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','1917','World - N hemisphere - 48°W to 42°W','Between 48°W and 42°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','1918','World - S hemisphere - 48°W to 42°W','Between 48°W and 42°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','1919','World - N hemisphere - 42°W to 36°W','Between 42°W and 36°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','1920','World - S hemisphere - 42°W to 36°W','Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','1921','World - N hemisphere - 36°W to 30°W','Between 36°W and 30°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','1922','World - S hemisphere - 36°W to 30°W','Between 36°W and 30°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','1923','World - N hemisphere - 30°W to 24°W','Between 30°W and 24°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-30.0,-24.0,0); INSERT INTO "extent" VALUES('EPSG','1924','World - S hemisphere - 30°W to 24°W','Between 30°W and 24°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-30.0,-24.0,0); INSERT INTO "extent" VALUES('EPSG','1925','World - N hemisphere - 24°W to 18°W','Between 24°W and 18°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-24.0,-18.0,0); INSERT INTO "extent" VALUES('EPSG','1926','World - S hemisphere - 24°W to 18°W','Between 24°W and 18°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-24.0,-18.0,0); INSERT INTO "extent" VALUES('EPSG','1927','World - N hemisphere - 18°W to 12°W','Between 18°W and 12°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-18.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','1928','World - S hemisphere - 18°W to 12°W','Between 18°W and 12°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-18.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','1929','World - N hemisphere - 12°W to 6°W','Between 12°W and 6°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-12.0,-6.0,0); INSERT INTO "extent" VALUES('EPSG','1930','World - S hemisphere - 12°W to 6°W','Between 12°W and 6°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-12.0,-6.0,0); INSERT INTO "extent" VALUES('EPSG','1931','World - N hemisphere - 6°W to 0°W','Between 6°W and 0°W, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-6.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','1932','World - S hemisphere - 6°W to 0°W','Between 6°W and 0°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-6.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','1933','World - N hemisphere - 0°E to 6°E','Between 0°E and 6°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,0.0,6.0,0); INSERT INTO "extent" VALUES('EPSG','1934','World - S hemisphere - 0°E to 6°E','Between 0°E and 6°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,0.0,6.0,0); INSERT INTO "extent" VALUES('EPSG','1935','World - N hemisphere - 6°E to 12°E','Between 6°E and 12°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,6.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','1936','World - S hemisphere - 6°E to 12°E','Between 6°E and 12°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,6.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','1937','World - N hemisphere - 12°E to 18°E','Between 12°E and 18°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','1938','World - S hemisphere - 12°E to 18°E','Between 12°E and 18°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','1939','World - N hemisphere - 18°E to 24°E','Between 18°E and 24°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','1940','World - S hemisphere - 18°E to 24°E','Between 18°E and 24°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','1941','World - N hemisphere - 24°E to 30°E','Between 24°E and 30°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,24.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','1942','World - S hemisphere - 24°E to 30°E','Between 24°E and 30°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,24.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','1943','World - N hemisphere - 30°E to 36°E','Between 30°E and 36°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','1944','World - S hemisphere - 30°E to 36°E','Between 30°E and 36°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','1945','World - N hemisphere - 36°E to 42°E','Between 36°E and 42°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','1946','World - S hemisphere - 36°E to 42°E','Between 36°E and 42°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','1947','World - N hemisphere - 42°E to 48°E','Between 42°E and 48°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,42.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','1948','World - S hemisphere - 42°E to 48°E','Between 42°E and 48°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,42.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','1949','World - N hemisphere - 48°E to 54°E','Between 48°E and 54°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,48.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','1950','World - S hemisphere - 48°E to 54°E','Between 48°E and 54°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,48.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','1951','World - N hemisphere - 54°E to 60°E','Between 54°E and 60°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,54.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','1952','World - S hemisphere - 54°E to 60°E','Between 54°E and 60°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,54.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','1953','World - N hemisphere - 60°E to 66°E','Between 60°E and 66°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,60.0,66.0,0); INSERT INTO "extent" VALUES('EPSG','1954','World - S hemisphere - 60°E to 66°E','Between 60°E and 66°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,60.0,66.0,0); INSERT INTO "extent" VALUES('EPSG','1955','World - N hemisphere - 66°E to 72°E','Between 66°E and 72°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,66.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','1956','World - S hemisphere - 66°E to 72°E','Between 66°E and 72°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,66.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','1957','World - N hemisphere - 72°E to 78°E','Between 72°E and 78°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,72.0,78.0,0); INSERT INTO "extent" VALUES('EPSG','1958','World - S hemisphere - 72°E to 78°E','Between 72°E and 78°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,72.0,78.0,0); INSERT INTO "extent" VALUES('EPSG','1959','World - N hemisphere - 78°E to 84°E','Between 78°E and 84°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,78.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','1960','World - S hemisphere - 78°E to 84°E','Between 78°E and 84°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,78.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','1961','World - N hemisphere - 84°E to 90°E','Between 84°E and 90°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,84.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','1962','World - S hemisphere - 84°E to 90°E','Between 84°E and 90°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,84.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','1963','World - N hemisphere - 90°E to 96°E','Between 90°E and 96°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,90.0,96.0,0); INSERT INTO "extent" VALUES('EPSG','1964','World - S hemisphere - 90°E to 96°E','Between 90°E and 96°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,90.0,96.0,0); INSERT INTO "extent" VALUES('EPSG','1965','World - N hemisphere - 96°E to 102°E','Between 96°E and 102°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','1966','World - S hemisphere - 96°E to 102°E','Between 96°E and 102°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','1967','World - N hemisphere - 102°E to 108°E','Between 102°E and 108°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','1968','World - S hemisphere - 102°E to 108°E','Between 102°E and 108°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','1969','World - N hemisphere - 108°E to 114°E','Between 108°E and 114°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1970','World - S hemisphere - 108°E to 114°E','Between 108°E and 114°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1971','World - N hemisphere - 114°E to 120°E','Between 114°E and 120°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','1972','World - S hemisphere - 114°E to 120°E','Between 114°E and 120°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','1973','World - N hemisphere - 120°E to 126°E','Between 120°E and 126°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','1974','World - S hemisphere - 120°E to 126°E','Between 120°E and 126°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','1975','World - N hemisphere - 126°E to 132°E','Between 126°E and 132°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','1976','World - S hemisphere - 126°E to 132°E','Between 126°E and 132°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','1977','World - N hemisphere - 132°E to 138°E','Between 132°E and 138°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','1978','World - S hemisphere - 132°E to 138°E','Between 132°E and 138°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','1979','World - N hemisphere - 138°E to 144°E','Between 138°E and 144°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','1980','World - S hemisphere - 138°E to 144°E','Between 138°E and 144°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','1981','World - N hemisphere - 144°E to 150°E','Between 144°E and 150°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','1982','World - S hemisphere - 144°E to 150°E','Between 144°E and 150°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','1983','World - N hemisphere - 150°E to 156°E','Between 150°E and 156°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','1984','World - S hemisphere - 150°E to 156°E','Between 150°E and 156°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','1985','World - N hemisphere - 156°E to 162°E','Between 156°E and 162°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,156.0,162.0,0); INSERT INTO "extent" VALUES('EPSG','1986','World - S hemisphere - 156°E to 162°E','Between 156°E and 162°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,156.0,162.0,0); INSERT INTO "extent" VALUES('EPSG','1987','World - N hemisphere - 162°E to 168°E','Between 162°E and 168°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','1988','World - S hemisphere - 162°E to 168°E','Between 162°E and 168°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','1989','World - N hemisphere - 168°E to 174°E','Between 168°E and 174°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,168.0,174.0,0); INSERT INTO "extent" VALUES('EPSG','1990','World - S hemisphere - 168°E to 174°E','Between 168°E and 174°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,168.0,174.0,0); INSERT INTO "extent" VALUES('EPSG','1991','World - N hemisphere - 174°E to 180°E','Between 174°E and 180°E, northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,174.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1992','World - S hemisphere - 174°E to 180°E','Between 174°E and 180°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,174.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1993','World - N hemisphere - 102°E to 108°E - by country and WGS 72BE','Between 102°E and 108°E, northern hemisphere between equator and 84°N, onshore and offshore. Vietnam - offshore.',0.0,84.0,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','1994','World - N hemisphere - 108°E to 114°E - by country and WGS 72BE','Between 108°E and 114°E, northern hemisphere between equator and 84°N, onshore and offshore. Vietnam - offshore.',0.0,84.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1995','World - S hemisphere - 108°E to 114°E - by country and WGS 72BE','Between 108°E and 114°E, southern hemisphere between 80°S and equator, onshore and offshore. Indonesia - offshore.',-80.0,0.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','1996','World - N hemisphere - north of 60°N','Northern hemisphere - north of 60°N onshore and offshore, including Arctic.',60.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1997','World - S hemisphere - south of 60°S','Southern hemisphere - south of 60°S onshore and offshore - Antarctica.',-90.0,-60.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1998','World - N hemisphere - 0°N to 84°N','Northern hemisphere between equator and 84°N, onshore and offshore.',0.0,84.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','1999','World - S hemisphere - 0°N to 80°S','Southern hemisphere between equator and 80°S, onshore and offshore.',-80.0,0.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','2000','World - N hemisphere - 180°W to 174°W - by country','Between 180°W and 174°W, northern hemisphere between equator and 84°N, onshore and offshore. Russian Federation; United States (USA) - Alaska (AK).',0.0,84.0,-180.0,-174.0,0); INSERT INTO "extent" VALUES('EPSG','2001','World - S hemisphere - 180°W to 174°W - by country','Between 180°W and 174°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-180.0,-174.0,0); INSERT INTO "extent" VALUES('EPSG','2002','World - N hemisphere - 174°W to 168°W - by country','Between 174°W and 168°W, northern hemisphere between equator and 84°N, onshore and offshore. Russian Federation; United States (USA) - Alaska (AK).',0.0,84.0,-174.0,-168.0,0); INSERT INTO "extent" VALUES('EPSG','2003','World - S hemisphere - 174°W to 168°W - by country','Between 174°W and 168°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-174.0,-168.0,0); INSERT INTO "extent" VALUES('EPSG','2004','World - N hemisphere - 168°W to 162°W - by country','Between 168°W and 162°W, northern hemisphere between equator and 84°N, onshore and offshore. United States (USA) - Alaska (AK).',0.0,84.0,-168.0,-162.0,0); INSERT INTO "extent" VALUES('EPSG','2005','World - S hemisphere - 168°W to 162°W - by country','Between 168°W and 162°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-168.0,-162.0,0); INSERT INTO "extent" VALUES('EPSG','2006','World - N hemisphere - 162°W to 156°W - by country','Between 162°W and 156°W, northern hemisphere between equator and 84°N, onshore and offshore. United States (USA) - Alaska (AK).',0.0,84.0,-162.0,-156.0,0); INSERT INTO "extent" VALUES('EPSG','2007','World - S hemisphere - 162°W to 156°W - by country','Between 162°W and 156°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-162.0,-156.0,0); INSERT INTO "extent" VALUES('EPSG','2008','World - N hemisphere - 156°W to 150°W - by country','Between 156°W and 150°W, northern hemisphere between equator and 84°N, onshore and offshore. United States (USA) - Alaska (AK).',0.0,84.0,-156.0,-150.0,0); INSERT INTO "extent" VALUES('EPSG','2009','World - S hemisphere - 156°W to 150°W - by country','Between 156°W and 150°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-156.0,-150.0,0); INSERT INTO "extent" VALUES('EPSG','2010','World - N hemisphere - 150°W to 144°W - by country','Between 150°W and 144°W, northern hemisphere between equator and 84°N, onshore and offshore. United States (USA) - Alaska (AK).',0.0,84.0,-150.0,-144.0,0); INSERT INTO "extent" VALUES('EPSG','2011','World - S hemisphere - 150°W to 144°W - by country','Between 150°W and 144°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-150.0,-144.0,0); INSERT INTO "extent" VALUES('EPSG','2012','World - N hemisphere - 144°W to 138°W - by country','Between 144°W and 138°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - British Columbia (BC); Yukon. United States (USA) - Alaska (AK).',0.0,84.0,-144.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','2013','World - S hemisphere - 144°W to 138°W - by country','Between 144°W and 138°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-144.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','2014','World - N hemisphere - 138°W to 132°W - by country','Between 138°W and 132°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - British Columbia (BC); Northwest Territiories (NWT); Yukon. United States (USA) - Alaska (AK).',0.0,84.0,-138.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','2015','World - S hemisphere - 138°W to 132°W - by country','Between 138°W and 132°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-138.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','2016','World - N hemisphere - 132°W to 126°W - by country','Between 132°W and 126°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - British Columbia (BC); NorthW Territories (NWT); Yukon. United States (USA) - Alaska (AK).',0.0,84.0,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','2017','World - S hemisphere - 132°W to 126°W - by country','Between 132°W and 126°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','2018','World - N hemisphere - 126°W to 120°W - by country','Between 126°W and 120°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - British Columbia (BC); Northwest Territories (NWT); Nunavut; Yukon. United States (USA) - Alaska (AK).',0.0,84.0,-126.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','2019','World - S hemisphere - 126°W to 120°W - by country','Between 126°W and 120°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-126.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','2020','World - N hemisphere - 120°W to 114°W - by country','Between 120°W and 114°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - Alberta; British Columbia (BC); Northwest Territories (NWT); Nunavut. Mexico. United States (USA).',0.0,84.0,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','2021','World - S hemisphere - 120°W to 114°W - by country','Between 120°W and 114°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','2022','World - N hemisphere - 114°W to 108°W - by country','Between 114°W and 108°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - Alberta; Northwest Territories (NWT); Nunavut; Saskatchewan. Mexico. United States (USA).',0.0,84.0,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','2023','World - S hemisphere - 114°W to 108°W - by country','Between 114°W and 108°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','2024','World - N hemisphere - 108°W to 102°W - by country','Between 108°W and 102°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - Northwest Territories (NWT); Nunavut; Saskatchewan. Mexico. United States (USA).',0.0,84.0,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','2025','World - S hemisphere - 108°W to 102°W - by country','Between 108°W and 102°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','2026','World - N hemisphere - 102°W to 96°W - by country','Between 102°W and 96°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - Manitoba; Nunavut; Saskatchewan. Mexico. United States (USA).',0.0,84.0,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','2027','World - S hemisphere - 102°W to 96°W - by country','Between 102°W and 96°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','2028','World - N hemisphere - 96°W to 90°W - by country','Between 96°W and 90°W, northern hemisphere between equator and 84°N, onshore and offshore. Canada - Manitoba; Nunavut; Ontario. Ecuador -Galapagos. Guatemala. Mexico. United States (USA).',0.0,84.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','2029','World - S hemisphere - 96°W to 90°W - by country','Between 96°W and 90°W, southern hemisphere between 80°S and equator, onshore and offshore. Ecuador - Galapagos.',-80.0,0.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','2030','World - N hemisphere - 90°W to 84°W - by country','Between 90°W and 84°W, northern hemisphere between equator and 84°N, onshore and offshore. Belize. Canada - Manitoba; Nunavut; Ontario. Costa Rica. Cuba. Ecuador - Galapagos. El Salvador. Guatemala. Honduras. Mexico. Nicaragua. United States (USA).',0.0,84.0,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','2031','World - S hemisphere - 90°W to 84°W - by country','Between 90°W and 84°W, southern hemisphere between 80°S and equator, onshore and offshore. Ecuador - Galapagos.',-80.0,0.0,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','2032','World - N hemisphere - 84°W to 78°W - by country','Between 84°W and 78°W, northern hemisphere between equator and 84°N, onshore and offshore. Bahamas. Ecuador - north of equator. Canada - Nunavut; Ontario; Quebec. Cayman Islands. Colombia. Costa Rica. Cuba. Jamaica. Nicaragua. Panama. United States (USA).',0.0,84.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','2033','World - S hemisphere - 84°W to 78°W - by country','Between 84°W and 78°W, southern hemisphere between 80°S and equator, onshore and offshore. Ecuador. Peru.',-80.0,0.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','2034','World - N hemisphere - 78°W to 72°W - by country','Between 78°W and 72°W, northern hemisphere between equator and 84°N, onshore and offshore. Bahamas. Canada - Nunavut; Ontario; Quebec. Colombia. Cuba. Ecuador. Greenland. Haiti. Jamaica. Panama. Turks and Caicos Islands. United States (USA). Venezuela.',0.0,84.0,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','2035','World - S hemisphere - 78°W to 72°W - by country','Between 78°W and 72°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Brazil. Chile. Colombia. Ecuador. Peru.',-80.0,0.0,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','2036','World - N hemisphere - 72°W to 66°W - by country','Between 72°W and 66°W, northern hemisphere between equator and 84°N, onshore and offshore. Aruba. Bahamas. Brazil. Canada - New Brunswick (NB); Labrador; Nunavut; Nova Scotia (NS); Quebec. Colombia. Dominican Republic. Greenland. Netherlands Antilles. Puerto Rico. Turks and Caicos Islands. United States. Venezuela.',0.0,84.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','2037','World - S hemisphere - 72°W to 66°W - by country','Between 72°W and 66°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Bolivia. Brazil. Chile. Colombia. Peru.',-80.0,0.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','2038','World - N hemisphere - 66°W to 60°W - by country','Between 66°W and 60°W, northern hemisphere between equator and 84°N, onshore and offshore. Anguilla. Antigua and Barbuda. Bermuda. Brazil. British Virgin Islands. Canada - New Brunswick; Labrador; Nova Scotia; Nunavut; Prince Edward Island; Quebec. Dominica. Greenland. Grenada. Guadeloupe. Guyana. Martinique. Montserrat. Puerto Rico. St Kitts and Nevis. St Barthelemy. St Lucia. St Maarten, St Martin. St Vincent and the Grenadines. Trinidad and Tobago. Venezuela. US Virgin Islands.',0.0,84.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','2039','World - S hemisphere - 66°W to 60°W - by country','Between 66°W and 60°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Bolivia. Brazil. Falkland Islands (Malvinas). Paraguay.',-80.0,0.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','2040','World - N hemisphere - 60°W to 54°W - by country','Between 60°W and 54°W, northern hemisphere between equator and 84°N, onshore and offshore. Barbados. Brazil. Canada - Newfoundland and Labrador, Quebec. French Guiana. Greenland. Guyana. St Pierre and Miquelon. Suriname.',0.0,84.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','2041','World - S hemisphere - 60°W to 54°W - by country','Between 60°W and 54°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Bolivia. Brazil. Falkland Islands (Malvinas). Paraguay. Uruguay.',-80.0,0.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','2042','World - N hemisphere - 54°W to 48°W - by country','Between 54°W and 48°W, northern hemisphere between equator and 84°N, onshore and offshore. Brazil. Canada - Newfoundland. French Guiana. Greenland.',0.0,84.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','2043','World - S hemisphere - 54°W to 48°W - by country','Between 54°W and 48°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. Uruguay.',-80.0,0.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','2044','World - N hemisphere - 48°W to 42°W - by country','Between 48°W and 42°W, northern hemisphere between equator and 84°N, onshore and offshore. Greenland.',0.0,84.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','2045','World - S hemisphere - 48°W to 42°W - by country','Between 48°W and 42°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil.',-80.0,0.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','2046','World - N hemisphere - 42°W to 36°W - by country','Between 42°W and 36°W, northern hemisphere between equator and 84°N, onshore and offshore. Greenland.',0.0,84.0,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','2047','World - S hemisphere - 42°W to 36°W - by country','Between 42°W and 36°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil. South Georgia and the South Sandwich Islands.',-80.0,0.0,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','2048','World - N hemisphere - 36°W to 30°W - by country','Between 36°W and 30°W, northern hemisphere between equator and 84°N, onshore and offshore. Greenland.',0.0,84.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','2049','World - S hemisphere - 36°W to 30°W - by country','Between 36°W and 30°W, southern hemisphere between 80°S and equator, onshore and offshore. Brazil.',-80.0,0.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','2050','World - N hemisphere - 30°W to 24°W - by country','Between 30°W and 24°W, northern hemisphere between equator and 84°N, onshore and offshore. Greenland. Iceland.',0.0,84.0,-30.0,-24.0,0); INSERT INTO "extent" VALUES('EPSG','2051','World - S hemisphere - 30°W to 24°W - by country','Between 30°W and 24°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-30.0,-24.0,0); INSERT INTO "extent" VALUES('EPSG','2052','World - N hemisphere - 24°W to 18°W - by country','Between 24°W and 18°W, northern hemisphere between equator and 84°N, onshore and offshore. Greenland. Iceland.',0.0,84.0,-24.0,-18.0,0); INSERT INTO "extent" VALUES('EPSG','2053','World - S hemisphere - 24°W to 18°W - by country','Between 24°W and 18°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-24.0,-18.0,0); INSERT INTO "extent" VALUES('EPSG','2054','World - N hemisphere - 18°W to 12°W - by country','Between 18°W and 12°W, northern hemisphere between equator and 84°N, onshore and offshore. Gambia. Greenland. Guinea. Guinea-Bissau. Iceland. Ireland - offshore Porcupine Basin. Mauritania. Morocco. Senegal. Sierra Leone. Western Sahara.',0.0,84.0,-18.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','2055','World - S hemisphere - 18°W to 12°W - by country','Between 18°W and 12°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-18.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','2056','World - N hemisphere - 12°W to 6°W - by country','Between 12°W and 6°W, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Côte D''Ivoire (Ivory Coast). Faroe Islands. Guinea. Ireland. Jan Mayen. Liberia, Mali. Mauritania. Morocco. Portugal. Sierra Leone. Spain. United Kingdom (UK). Western Sahara.',0.0,84.01,-12.01,-6.0,0); INSERT INTO "extent" VALUES('EPSG','2057','World - S hemisphere - 12°W to 6°W - by country','Between 12°W and 6°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-12.0,-6.0,0); INSERT INTO "extent" VALUES('EPSG','2058','World - N hemisphere - 6°W to 0°W - by country','Between 6°W and 0°W, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Burkina Faso. Côte'' Ivoire (Ivory Coast). Faroe Islands - offshore. France. Ghana. Gibraltar. Ireland - offshore Irish Sea. Mali. Mauritania. Morocco. Spain. United Kingdom (UK).',0.0,84.0,-6.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','2059','World - S hemisphere - 6°W to 0°W - by country','Between 6°W and 0°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-6.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','2060','World - N hemisphere - 0°E to 6°E - by country','Between 0°E and 6°E, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Andorra. Belgium. Benin. Burkina Faso. Denmark - North Sea. France. Germany - North Sea. Ghana. Luxembourg. Mali. Netherlands. Niger. Nigeria. Norway. Spain. Togo. United Kingdom (UK) - North Sea.',0.0,84.0,0.0,6.0,0); INSERT INTO "extent" VALUES('EPSG','2061','World - S hemisphere - 0°E to 6°E - by country','Between 0°E and 6°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,0.0,6.0,0); INSERT INTO "extent" VALUES('EPSG','2062','World - N hemisphere - 6°E to 12°E - by country','Between 6°E and 12°E, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Austria. Cameroon. Denmark. Equatorial Guinea. France. Gabon. Germany. Italy. Libya. Liechtenstein. Monaco. Netherlands. Niger. Nigeria. Norway. Sao Tome and Principe. Svalbard. Sweden. Switzerland. Tunisia. Vatican City State.',0.0,84.0,6.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','2063','World - S hemisphere - 6°E to 12°E - by country','Between 6°E and 12°E, southern hemisphere between 80°S and equator, onshore and offshore. Angola. Congo. Gabon. Namibia.',-80.0,0.0,6.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','2064','World - N hemisphere - 12°E to 18°E - by country','Between 12°E and 18°E, northern hemisphere between equator and 84°N, onshore and offshore. Austria. Bosnia and Herzegovina. Cameroon. Central African Republic. Chad. Congo. Croatia. Czechia. Democratic Republic of the Congo (Zaire). Gabon. Germany. Hungary. Italy. Libya. Malta. Niger. Nigeria. Norway. Poland. San Marino. Slovakia. Slovenia. Svalbard. Sweden. Vatican City State.',0.0,84.0,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','2065','World - S hemisphere - 12°E to 18°E - by country','Between 12°E and 18°E, southern hemisphere between 80°S and equator, onshore and offshore. Angola. Congo. Democratic Republic of the Congo (Zaire). Gabon. Namibia. South Africa.',-80.0,0.0,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','2066','World - N hemisphere - 18°E to 24°E - by country','Between 18°E and 24°E, northern hemisphere between equator and 84°N, onshore and offshore. Albania. Belarus. Bosnia and Herzegovina. Bulgaria. Central African Republic. Chad. Croatia. Democratic Republic of the Congo (Zaire). Estonia. Finland. Greece. Hungary. Italy. Kosovo. Latvia. Libya. Lithuania. Montenegro. North Macedonia. Norway, including Svalbard and Bjornoys. Poland. Romania. Russian Federation. Serbia. Slovakia. Sudan. Sweden. Ukraine.',0.0,84.0,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','2067','World - S hemisphere - 18°E to 24°E - by country','Between 18°E and 24°E, southern hemisphere between 80°S and equator, onshore and offshore. Angola. Botswana. Democratic Republic of the Congo (Zaire). Namibia. South Africa. Zambia.',-80.0,0.0,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','2068','World - N hemisphere - 24°E to 30°E - by country','Between 24°E and 30°E, northern hemisphere between equator and 84°N, onshore and offshore. Belarus. Bulgaria. Central African Republic. Democratic Republic of the Congo (Zaire). Egypt. Estonia. Finland. Greece. Latvia. Lesotho. Libya. Lithuania. Moldova. Norway. Poland. Romania. Russian Federation. Sudan. Svalbard. Türkiye (Turkey). Uganda. Ukraine.',0.0,84.0,24.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','2069','World - S hemisphere - 24°E to 30°E - by country','Between 24°E and 30°E, southern hemisphere between 80°S and equator, onshore and offshore. Botswana. Burundi. Democratic Republic of the Congo (Zaire). Rwanda. South Africa. Tanzania. Uganda. Zambia. Zimbabwe.',-80.0,0.0,24.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','2070','World - N hemisphere - 30°E to 36°E - by country','Between 30°E and 36°E, northern hemisphere between equator and 84°N, onshore and offshore. Belarus. Cyprus. Egypt. Ethiopia. Finland. Israel. Jordan. Kenya. Lebanon. Moldova. Norway. Russian Federation. Saudi Arabia. Sudan. Syria. Türkiye (Turkey). Uganda. Ukraine.',0.0,84.0,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','2071','World - S hemisphere - 30°E to 36°E - by country','Between 30°E and 36°E, southern hemisphere between 80°S and equator, onshore and offshore. Burundi. Eswatini (Swaziland). Kenya. Malawi. Mozambique. Rwanda. South Africa. Tanzania. Uganda. Zambia. Zimbabwe.',-80.0,0.0,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','2072','World - N hemisphere - 36°E to 42°E - by country','Between 36°E and 42°E, northern hemisphere between equator and 84°N, onshore and offshore. Djibouti. Egypt. Eritrea. Ethiopia. Georgia. Iraq. Jordan. Kenya. Lebanon. Russian Federation. Saudi Arabia. Somalia. Sudan. Syria. Türkiye (Turkey). Ukraine.',0.0,84.0,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','2073','World - S hemisphere - 36°E to 42°E - by country','Between 36°E and 42°E, southern hemisphere between 80°S and equator, onshore and offshore. Kenya. Mozambique. Tanzania.',-80.0,0.0,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','2074','World - N hemisphere - 42°E to 48°E - by country','Between 42°E and 48°E, northern hemisphere between equator and 84°N, onshore and offshore. Armenia. Azerbaijan. Djibouti. Eritrea. Ethiopia. Georgia. Islamic Republic of Iran. Iraq. kazakhstan. Kuwait. Russian Federation. Saudi Arabia. Somalia. Türkiye (Turkey). Yemen.',0.0,84.0,42.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','2075','World - S hemisphere - 42°E to 48°E - by country','Between 42°E and 48°E, southern hemisphere between 80°S and equator, onshore and offshore. Madagascar.',-80.0,0.0,42.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','2076','World - N hemisphere - 48°E to 54°E - by country','Between 48°E and 54°E, northern hemisphere between equator and 84°N, onshore and offshore. Azerbaijan. Bahrain. Islamic Republic of Iran. Iraq. Kazakhstan. Kuwait. Oman. Qatar. Russian Federation. Saudi Arabia. Somalia. Turkmenistan. United Arab Emirates. Yemen.',0.0,84.0,48.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','2077','World - S hemisphere - 48°E to 54°E - by country','Between 48°E and 54°E, southern hemisphere between 80°S and equator, onshore and offshore. Madagascar.',-80.0,0.0,48.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','2078','World - N hemisphere - 54°E to 60°E - by country','Between 54°E and 60°E, northern hemisphere between equator and 84°N, onshore and offshore. Islamic Republic of Iran. kazakhstan. Oman. Russian Federation. Saudi Arabia. Turkmenistan. United Arab Emirates. Uzbekistan.',0.0,84.0,54.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','2079','World - S hemisphere - 54°E to 60°E - by country','Between 54°E and 60°E, southern hemisphere between 80°S and equator, onshore and offshore. Seychelles.',-80.0,0.0,54.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','2080','World - N hemisphere - 60°E to 66°E - by country','Between 60°E and 66°E, northern hemisphere between equator and 84°N, onshore and offshore. Afghanistan. Islamic Republic of Iran. kazakhstan. Pakistan. Russian Federation. Turkmenistan. Uzbekistan.',0.0,84.0,60.0,66.0,0); INSERT INTO "extent" VALUES('EPSG','2081','World - S hemisphere - 60°E to 66°E - by country','Between 60°E and 66°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,60.0,66.0,0); INSERT INTO "extent" VALUES('EPSG','2082','World - N hemisphere - 66°E to 72°E - by country','Between 66°E and 72°E, northern hemisphere between equator and 84°N, onshore and offshore. Afghanistan. India. Kazakhstan. Kyrgyzstan. Pakistan. Russian Federation. Tajikistan. Uzbekistan.',0.0,84.0,66.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','2083','World - S hemisphere - 66°E to 72°E - by country','Between 66°E and 72°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,66.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','2084','World - N hemisphere - 72°E to 78°E - by country','Between 72°E and 78°E, northern hemisphere between equator and 84°N, onshore and offshore. China. India. Kazakhstan. Kyrgyzstan. Maldives. Pakistan. Russian Federation. Tajikistan. Uzbekistan.',0.0,84.0,72.0,78.0,0); INSERT INTO "extent" VALUES('EPSG','2085','World - S hemisphere - 72°E to 78°E - by country','Between 72°E and 78°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,72.0,78.0,0); INSERT INTO "extent" VALUES('EPSG','2086','World - N hemisphere - 78°E to 84°E - by country','Between 78°E and 84°E, northern hemisphere between equator and 84°N, onshore and offshore. China. India. Kazakhstan. Kyrgyzstan. Nepal. Russian Federation. Sri Lanka.',0.0,84.0,78.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','2087','World - S hemisphere - 78°E to 84°E - by country','Between 78°E and 84°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,78.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','2088','World - N hemisphere - 84°E to 90°E - by country','Between 84°E and 90°E, northern hemisphere between equator and 84°N, onshore and offshore. Bangladesh. Bhutan. China. India. Kazakhstan. Mongolia. Nepal. Russian Federation.',0.0,84.0,84.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','2089','World - S hemisphere - 84°E to 90°E - by country','Between 84°E and 90°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,84.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','2090','World - N hemisphere - 90°E to 96°E - by country','Between 90°E and 96°E, northern hemisphere between equator and 84°N, onshore and offshore. Bangladesh. Bhutan. China. Indonesia. Mongolia. Myanmar (Burma). Russian Federation.',0.0,84.0,90.0,96.0,0); INSERT INTO "extent" VALUES('EPSG','2091','World - S hemisphere - 90°E to 96°E - by country','Between 90°E and 96°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,90.0,96.0,0); INSERT INTO "extent" VALUES('EPSG','2092','World - N hemisphere - 96°E to 102°E - by country','Between 96°E and 102°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Indonesia. Laos. Malaysia - West Malaysia. Mongolia. Myanmar (Burma). Russian Federation. Thailand.',0.0,84.0,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','2093','World - S hemisphere - 96°E to 102°E - by country','Between 96°E and 102°E, southern hemisphere between 80°S and equator, onshore and offshore. Indonesia.',-80.0,0.0,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','2094','World - N hemisphere - 102°E to 108°E - by country','Between 102°E and 108°E, northern hemisphere between equator and 84°N, onshore and offshore. Cambodia. China. Indonesia. Laos. Malaysia - West Malaysia. Mongolia. Russian Federation. Singapore. Thailand. Vietnam.',0.0,84.0,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','2095','World - S hemisphere - 102°E to 108°E - by country','Between 102°E and 108°E, southern hemisphere between 80°S and equator, onshore and offshore. Indonesia.',-80.0,0.0,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','2096','World - N hemisphere - 108°E to 114°E - by country','Between 108°E and 114°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Hong Kong. Indonesia. Macao. Malaysia - East Malaysia - Sarawak. Mongolia. Russian Federation. Vietnam.',0.0,84.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','2097','World - S hemisphere - 108°E to 114°E - by country','Between 108°E and 114°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Indonesia.',-80.0,0.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','2098','World - N hemisphere - 114°E to 120°E - by country','Between 114°E and 120°E, northern hemisphere between equator and 84°N, onshore and offshore. Brunei. China. Hong Kong. Indonesia. Malaysia - East Malaysia - Sarawak. Mongolia. Philippines. Russian Federation. Taiwan.',0.0,84.0,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','2099','World - S hemisphere - 114°E to 120°E - by country','Between 114°E and 120°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Indonesia.',-80.0,0.0,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','2100','World - N hemisphere - 120°E to 126°E - by country','Between 120°E and 126°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Indonesia. Japan. North Korea. Philippines. Russian Federation. South Korea. Taiwan.',0.0,84.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','2101','World - S hemisphere - 120°E to 126°E - by country','Between 120°E and 126°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. East Timor. Indonesia.',-80.0,0.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','2102','World - N hemisphere - 126°E to 132°E - by country','Between 126°E and 132°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Indonesia. Japan. North Korea. Russian Federation. South Korea.',0.0,84.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2103','World - S hemisphere - 126°E to 132°E - by country','Between 126°E and 132°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. East Timor. Indonesia.',-80.0,0.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2104','World - N hemisphere - 132°E to 138°E - by country','Between 132°E and 138°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Japan. Russian Federation.',0.0,84.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2105','World - S hemisphere - 132°E to 138°E - by country','Between 132°E and 138°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Indonesia.',-80.0,0.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2106','World - N hemisphere - 138°E to 144°E - by country','Between 138°E and 144°E, northern hemisphere between equator and 84°N, onshore and offshore. Japan. Russian Federation.',0.0,84.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2107','World - S hemisphere - 138°E to 144°E - by country','Between 138°E and 144°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Indonesia. Papua New Guinea.',-80.0,0.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2108','World - N hemisphere - 144°E to 150°E - by country','Between 144°E and 150°E, northern hemisphere between equator and 84°N, onshore and offshore. Japan. Russian Federation.',0.0,84.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','2109','World - S hemisphere - 144°E to 150°E - by country','Between 144°E and 150°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Papua New Guinea.',-80.0,0.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','2110','World - N hemisphere - 150°E to 156°E - by country','Between 150°E and 156°E, northern hemisphere between equator and 84°N, onshore and offshore. Russian Federation.',0.0,84.0,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','2111','World - S hemisphere - 150°E to 156°E - by country','Between 150°E and 156°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Papua New Guinea.',-80.0,0.0,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','2112','World - N hemisphere - 156°E to 162°E - by country','Between 156°E and 162°E, northern hemisphere between equator and 84°N, onshore and offshore. Russian Federation.',0.0,84.0,156.0,162.0,0); INSERT INTO "extent" VALUES('EPSG','2113','World - S hemisphere - 156°E to 162°E - by country','Between 156°E and 162°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,156.0,162.0,0); INSERT INTO "extent" VALUES('EPSG','2114','World - N hemisphere - 162°E to 168°E - by country','Between 162°E and 168°E, northern hemisphere between equator and 84°N, onshore and offshore. Russian Federation.',0.0,84.0,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','2115','World - S hemisphere - 162°E to 168°E - by country','Between 162°E and 168°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','2116','World - N hemisphere - 168°E to 174°E - by country','Between 168°E and 174°E, northern hemisphere between equator and 84°N, onshore and offshore. Russian Federation; United States (USA) - Alaska.',0.0,84.0,168.0,174.0,0); INSERT INTO "extent" VALUES('EPSG','2117','World - S hemisphere - 168°E to 174°E - by country','Between 168°E and 174°E, southern hemisphere between 80°S and equator, onshore and offshore. New Zealand.',-80.0,0.0,168.0,174.0,0); INSERT INTO "extent" VALUES('EPSG','2118','World - N hemisphere - 174°E to 180°E - by country','Between 174°E and 180°E, northern hemisphere between equator and 84°N, onshore and offshore. Russian Federation; United States (USA) - Alaska (AK).',0.0,84.0,174.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','2119','World - S hemisphere - 174°E to 180°E - by country','Between 174°E and 180°E, southern hemisphere between 80°S and equator, onshore and offshore. New Zealand.',-80.0,0.0,174.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','2120','Guatemala - north of 15°51''30"N','Guatemala - north of 15°51''30"N.',15.85,17.83,-91.86,-88.34,0); INSERT INTO "extent" VALUES('EPSG','2121','Guatemala - south of 15°51''30"N','Guatemala - south of 15°51''30"N.',13.69,15.86,-92.29,-88.19,0); INSERT INTO "extent" VALUES('EPSG','2122','Europe - 18°W to 12°W and ETRS89 by country','Europe between 18°W and 12°W: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - offshore; Portugal - offshore mainland; Spain - offshore mainland; United Kingdom (UKCS) - offshore.',34.93,72.44,-16.1,-11.99,0); INSERT INTO "extent" VALUES('EPSG','2123','Europe - 12°W to 6°W and ETRS89 by country','Europe between 12°W and 6°W: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - onshore and offshore; Portugal - mainland - onshore and offshore; Spain - mainland - onshore and offshore; United Kingdom - UKCS offshore.',34.91,74.13,-12.0,-6.0,0); INSERT INTO "extent" VALUES('EPSG','2124','Europe - 6°W to 0°W and ETRS89 by country','Europe between 6°W and 0°W: Faroe Islands offshore; Ireland - offshore; Jan Mayen - offshore; Norway including Svalbard - offshore; Spain - mainland - onshore and offshore.',35.26,80.49,-6.0,0.01,0); INSERT INTO "extent" VALUES('EPSG','2125','Europe - 0°E to 6°E and ETRS89 by country','Europe between 0°E and 6°E: Andorra; Denmark - offshore; Germany - offshore; Jan Mayen - offshore; Norway including Svalbard - onshore and offshore; Spain - mainland and Balearic islands - onshore and offshore.',37.0,82.45,0.0,6.01,0); INSERT INTO "extent" VALUES('EPSG','2126','Europe - 6°E to 12°E and ETRS89 by country','Europe between 6°E and 12°E: Austria; Denmark - onshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore; Spain - offshore.',36.53,84.01,6.0,12.01,0); INSERT INTO "extent" VALUES('EPSG','2127','Europe - 12°E to 18°E and ETRS89 by country','Europe between 12°E and 18°E: Austria; Croatia; Denmark - offshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',34.79,84.01,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','2128','Europe - 18°E to 24°E and ETRS89 by country','Europe between 18°E and 24°E: Bulgaria; Croatia; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',34.76,84.01,18.0,24.01,0); INSERT INTO "extent" VALUES('EPSG','2129','Europe - 24°E to 30°E and ETRS89 by country','Europe between 24°E and 30°E: Bulgaria - onshore and offshore; Norway including Svalbard - onshore and offshore.',41.24,84.01,24.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','2130','Europe - 30°E to 36°E and ETRS89 by country','Europe between 30°E and 36°E: Bulgaria - offshore; Norway including Svalbard - onshore and offshore.',42.56,84.01,30.0,36.01,0); INSERT INTO "extent" VALUES('EPSG','2131','Europe - 36°E to 42°E and ETRS89 by country','Europe between 36°E and 42°E: Norway including Svalbard - offshore.',72.99,79.07,36.0,38.01,0); INSERT INTO "extent" VALUES('EPSG','2132','Europe - 42°E to 48°E and ETRS89 by country','Europe - between 42°E and 48°E.',37.0,41.65,42.0,48.0,1); INSERT INTO "extent" VALUES('EPSG','2133','USA - 168°W to 162°W - AK, OCS','United States (USA) - between 168°W and 162°W - Alaska and offshore continental shelf (OCS).',49.52,74.29,-168.0,-161.99,0); INSERT INTO "extent" VALUES('EPSG','2134','USA - 162°W to 156°W - AK, OCS','United States (USA) - between 162°W and 156°W - Alaska and offshore continental shelf (OCS).',50.98,74.71,-162.0,-155.99,0); INSERT INTO "extent" VALUES('EPSG','2135','USA - 156°W to 150°W - AK, OCS','United States (USA) - between 156°W and 150°W - Alaska and offshore continental shelf (OCS).',52.15,74.71,-156.0,-149.99,0); INSERT INTO "extent" VALUES('EPSG','2136','USA - 150°W to 144°W - AK, OCS','United States (USA) - between 150°W and 144°W - Alaska and offshore continental shelf (OCS).',54.05,74.13,-150.0,-143.99,0); INSERT INTO "extent" VALUES('EPSG','2137','North America - 144°W to 138°W and NAD27 by country','North America - between 144°W and 138°W. Canada - British Columbia; Yukon. United States (USA) - Alaska. Onshore for western Canada & but onshore and offshore for Alaska.',53.47,73.59,-144.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','2138','North America - 138°W to 132°W and NAD27 by country - onshore','North America - between 138°W and 132°W - onshore. Canada - British Columbia; Northwest Territiories; Yukon. United States (USA) - Alaska. Onshore for Canadian British Columbia & Arctic and for US Pacific coast including Alaska panhandle.',52.58,73.04,-138.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','2139','North America - 132°W to 126°W and NAD27 by country - onshore','North America - between 132°W and 126°W - onshore. Canada - British Columbia; Northwest Territories; Yukon. United States (USA) - Alaska. Onshore for Canadian British Colombia & Arctic coasts and for the US Pacific coast including Alaska panhandle.',49.18,72.03,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','2140','North America - 126°W to 120°W and NAD27 by country - onshore','North America - between 126°W and 120°W - onshore. Canada - British Columbia; Northwest Territories; Nunavut; Yukon. United States (USA) - California; Oregon; Washington.',34.4,77.13,-126.0,-119.99,0); INSERT INTO "extent" VALUES('EPSG','2141','North America - 120°W to 114°W and NAD27 by country - onshore','North America - between 120°W and 114°W - onshore. Canada - Alberta; British Columbia; Northwest Territories; Nunavut. Mexico. United States (USA) - California; Idaho; Nevada; Oregon; Washington.',26.93,78.13,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','2142','North America - 114°W to 108°W and NAD27 by country','North America - between 114°W and 108°W. Canada - Alberta; Northwest Territories; Nunavut; Saskatchewan. Mexico. United States (USA) - Arizona; Colorado; Idaho; Montana; New Mexico; Utah; Wyoming. Onshore for Mexican Pacific and Canadian Arctic coasts.',18.66,78.81,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','2143','North America - 108°W to 102°W and NAD27 by country','North America - between 108°W and 102°W. Canada - Northwest Territories; Nunavut; Saskatchewan. Mexico. United States (USA) - Colorado; Montana; Nebraska; New Mexico; North Dakota; Oklahoma; South Dakota; Texas; Wyoming. Onshore for Mexican Pacific and Canadian Arctic coasts.',17.86,79.42,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','2144','North America - 102°W to 96°W and NAD27 by country','North America - between 102°W and 96°W. Canada - Manitoba; Nunavut; Saskatchewan. Mexico. United States (USA) - Iowa; Kansas; Minnesota; Nebraska; North Dakota; Oklahoma; South Dakota; Texas. Onshore for Mexican Pacific coast and Canadian Arctic but onshore and offshore for US & Mexico Gulf of Mexico and Caribbean coasts.',15.59,80.74,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','2145','North America - 96°W to 90°W and NAD27 by country','North America - between 96°W and 90°W. Canada - Manitoba; Nunavut; Ontario. Guatemala. Mexico. United States (USA) - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin. Onshore for Canadian Arctic and Central America, onshore and offshore for Gulf of Mexico (both US and Mexican sectors).',13.63,81.96,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','2146','North America - 90°W to 84°W and NAD27 by country','North America - between 90°W and 84°W. Belize. Canada - Manitoba; Nunavut; Ontario. Costa Rica. Cuba. El Salvador. Guatemala. Honduras. Mexico. Nicaragua. United States (USA) - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin. Onshore for Canadian Arctic and Central America, onshore and offshore for Cuba and Gulf of Mexico (both US and Mexican sectors).',9.27,82.54,-90.01,-84.0,0); INSERT INTO "extent" VALUES('EPSG','2147','North America - 84°W to 78°W and NAD27 by country','North America - between 84°W and 78°W. Bahamas. Canada - Nunavut; Ontario; Quebec. Costa Rica. Cuba. Honduras. Nicaragua. United States (USA) - Florida; Georgia; Kentucky; Maryland; Michigan; New York; North Carolina; Ohio; Pennsylvania; South Carolina; Tennessee; Virginia; West Virginia. Onshore for Canadian Arctic. onshore and offshore for US east coast and Cuba, with usage in Bahamas onshore plus offshore over internal continental shelf only.',7.98,83.03,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','2148','North America - 78°W to 72°W and NAD27 by country','North America - between 78°W and 72°W. Bahamas. Canada - Nunavut; Ontario; Quebec. Cuba. United States (USA) - Connecticut; Delaware; Maryland; Massachusetts; New Hampshire; New Jersey; New York; North Carolina; Pennsylvania; Virginia; Vermont. Onshore for Canadian arctic. onshore and offshore for US east coast and Cuba, with usage in Bahamas onshore plus offshore over internal continental shelf only.',18.83,83.16,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','2149','North America - 72°W to 66°W and NAD27 by country','North America - between 72°W and 66°W. Canada - New Brunswick; Labrador; Nunavut; Nova Scotia; Quebec. United States (USA) - Connecticut; Maine; Massachusetts; New Hampshire; New York (Long Island); Rhode Island; Vermont. Onshore and offshore for US and Canadian east coasts.',33.61,83.17,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','2150','North America - 66°W to 60°W and NAD27 by country','North America - between 66°W and 60°W - onshore and offshore. Canada - New Brunswick; Labrador; Nova Scotia; Nunavut; Prince Edward Island; Quebec. United States (USA) offshore Atlantic.',38.21,82.97,-66.0,-59.99,0); INSERT INTO "extent" VALUES('EPSG','2151','Canada - 60°W to 54°W','Canada between 60°W and 54°W - Newfoundland and Labrador; Nunavut; Quebec.',38.56,84.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','2152','Canada - 54°W to 48°W','Canada between 54°W and 48°W onshore and offshore - Newfoundland and Labrador.',39.5,57.65,-54.0,-47.99,0); INSERT INTO "extent" VALUES('EPSG','2153','Canada - 48°W to 42°W','Canada offshore Atlantic - 48°W to 42°W.',39.85,54.47,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','2154','USA - Alabama - SPCS - E','United States (USA) - Alabama east of approximately 86°37''W - counties Barbour; Bullock; Calhoun; Chambers; Cherokee; Clay; Cleburne; Coffee; Coosa; Covington; Crenshaw; Dale; De Kalb; Elmore; Etowah; Geneva; Henry; Houston; Jackson; Lee; Macon; Madison; Marshall; Montgomery; Pike; Randolph; Russell; StClair; Talladega; Tallapoosa.',30.99,35.0,-86.79,-84.89,0); INSERT INTO "extent" VALUES('EPSG','2155','USA - Alabama - SPCS - W','United States (USA) - Alabama west of approximately 86°37''W - counties Autauga; Baldwin; Bibb; Blount; Butler; Chilton; Choctaw; Clarke; Colbert; Conecuh; Cullman; Dallas; Escambia; Fayette; Franklin; Greene; Hale; Jefferson; Lamar; Lauderdale; Lawrence; Limestone; Lowndes; Marengo; Marion; Mobile; Monroe; Morgan; Perry; Pickens; Shelby; Sumter; Tuscaloosa; Walker; Washington; Wilcox; Winston.',30.14,35.02,-88.48,-86.3,0); INSERT INTO "extent" VALUES('EPSG','2156','USA - Alaska - Panhandle','United States (USA) - Alaska - east of 141°W; i.e. Panhandle.',54.61,60.35,-141.0,-129.99,0); INSERT INTO "extent" VALUES('EPSG','2157','USA - Alaska - Aleutian Islands','United States (USA) - Alaska - Aleutian Islands onshore.',51.3,54.34,172.42,-164.84,0); INSERT INTO "extent" VALUES('EPSG','2158','USA - Alaska - 144°W to 141°W','United States (USA) - Alaska - between 144°W and 141°W, onshore.',59.72,70.16,-144.01,-140.98,0); INSERT INTO "extent" VALUES('EPSG','2159','USA - Alaska - 148°W to 144°W','United States (USA) - Alaska - between 148°W and 144°W.',59.72,70.38,-148.0,-144.0,0); INSERT INTO "extent" VALUES('EPSG','2160','USA - Alaska - 152°W to 148°W','United States (USA) - Alaska - between 152°W and 148°W, onshore.',59.11,70.63,-152.01,-147.99,0); INSERT INTO "extent" VALUES('EPSG','2161','USA - Alaska - 156°W to 152°W','United States (USA) - Alaska - between 156°W and 152°W.',55.72,71.28,-156.0,-151.86,0); INSERT INTO "extent" VALUES('EPSG','2162','USA - Alaska - 160°W to 156°W','United States (USA) - Alaska - between 160°W and 156°W, onshore.',54.89,71.4,-160.0,-155.99,0); INSERT INTO "extent" VALUES('EPSG','2163','USA - Alaska - 164°W to 160°W','United States (USA) - Alaska - between 164°W and 160°W, onshore.',54.32,70.74,-164.01,-160.0,0); INSERT INTO "extent" VALUES('EPSG','2164','USA - Alaska - north of 54.5°N; 168°W to 164°W','United States (USA) - Alaska onshore north of 54°30''N and between 168°W and 164°W.',54.34,69.05,-168.26,-164.0,0); INSERT INTO "extent" VALUES('EPSG','2165','USA - Alaska - north of 54.5°N; west of 168°W','United States (USA) - Alaska onshore north of 54°30''N and west of 168°W.',56.49,65.82,-173.16,-168.0,0); INSERT INTO "extent" VALUES('EPSG','2166','USA - Arizona - SPCS - C','United States (USA) - Arizona - counties Coconino; Maricopa; Pima; Pinal; Santa Cruz; Yavapai.',31.33,37.01,-113.35,-110.44,0); INSERT INTO "extent" VALUES('EPSG','2167','USA - Arizona - SPCS - E','United States (USA) - Arizona - counties Apache; Cochise; Gila; Graham; Greenlee; Navajo.',31.33,37.01,-111.71,-109.04,0); INSERT INTO "extent" VALUES('EPSG','2168','USA - Arizona - SPCS - W','United States (USA) - Arizona - counties of La Paz; Mohave; Yuma.',32.05,37.0,-114.81,-112.52,0); INSERT INTO "extent" VALUES('EPSG','2169','USA - Arkansas - SPCS - N','United States (USA) - Arkansas - counties of Baxter; Benton; Boone; Carroll; Clay; Cleburne; Conway; Craighead; Crawford; Crittenden; Cross; Faulkner; Franklin; Fulton; Greene; Independence; Izard; Jackson; Johnson; Lawrence; Logan; Madison; Marion; Mississippi; Newton; Perry; Poinsett; Pope; Randolph; Scott; Searcy; Sebastian; Sharp; St Francis; Stone; Van Buren; Washington; White; Woodruff; Yell.',34.67,36.5,-94.62,-89.64,0); INSERT INTO "extent" VALUES('EPSG','2170','USA - Arkansas - SPCS - S','United States (USA) - Arkansas - counties Arkansas; Ashley; Bradley; Calhoun; Chicot; Clark; Cleveland; Columbia; Dallas; Desha; Drew; Garland; Grant; Hempstead; Hot Spring; Howard; Jefferson; Lafayette; Lee; Lincoln; Little River; Lonoke; Miller; Monroe; Montgomery; Nevada; Ouachita; Phillips; Pike; Polk; Prairie; Pulaski; Saline; Sevier; Union.',33.01,35.1,-94.48,-90.4,0); INSERT INTO "extent" VALUES('EPSG','2171','USA - GoM OCS - west of 96°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) west of approximately 96°W - protraction areas Corpus Christi; Port Isabel.',25.97,28.43,-97.22,-95.87,0); INSERT INTO "extent" VALUES('EPSG','2172','USA - GoM OCS - 96°W to 90°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) between approximately 96°W and 90°W - protraction areas East Breaks; Alaminos Canyon; Garden Banks; Keathley Canyon; Sigsbee Escarpment; Ewing Bank; Green Canyon; Walker Ridge; Amery Terrace.',25.61,29.73,-96.0,-89.86,0); INSERT INTO "extent" VALUES('EPSG','2173','USA - GoM OCS - 90°W to 84°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) between approximately 90°W and 84°W - protraction areas Mobile; Viosca Knoll; Mississippi Canyon; Atwater Valley; Lund; Lund South; Pensacola; Destin Dome; De Soto Canyon; Lloyd Ridge; Henderson; Florida Plain; Campeche Escarpment; Apalachicola; Florida Middle Ground; The Elbow; Vernon Basin; Howell Hook; Rankin.',23.95,30.25,-90.01,-83.91,0); INSERT INTO "extent" VALUES('EPSG','2174','USA - GoM OCS - east of 84°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) east of approximately 84°W - protraction areas Gainesville; Tarpon Springs; St Petersburg; Charlotte Harbor; Pulley Ridge; Dry Tortugas; Tortugas Valley; Miami; Key West.',23.82,29.94,-84.09,-81.17,0); INSERT INTO "extent" VALUES('EPSG','2175','USA - California - SPCS - 1','United States (USA) - California - counties Del Norte; Humboldt; Lassen; Modoc; Plumas; Shasta; Siskiyou; Tehama; Trinity.',39.59,42.01,-124.45,-119.99,0); INSERT INTO "extent" VALUES('EPSG','2176','USA - California - SPCS - 2','United States (USA) - California - counties of Alpine; Amador; Butte; Colusa; El Dorado; Glenn; Lake; Mendocino; Napa; Nevada; Placer; Sacramento; Sierra; Solano; Sonoma; Sutter; Yolo; Yuba.',38.02,40.16,-124.06,-119.54,0); INSERT INTO "extent" VALUES('EPSG','2177','USA - California - SPCS - 3','United States (USA) - California - counties Alameda; Calaveras; Contra Costa; Madera; Marin; Mariposa; Merced; Mono; San Francisco; San Joaquin; San Mateo; Santa Clara; Santa Cruz; Stanislaus; Tuolumne.',36.73,38.71,-123.02,-117.83,0); INSERT INTO "extent" VALUES('EPSG','2178','USA - California - SPCS - 4','United States (USA) - California - counties Fresno; Inyo; Kings; Monterey; San Benito; Tulare.',35.78,37.58,-122.01,-115.62,0); INSERT INTO "extent" VALUES('EPSG','2179','USA - California - SPCS27 - 5','United States (USA) - California - counties of Kern; San Bernardino; San Luis Obispo; Santa Barbara; Ventura.',32.76,35.81,-121.43,-114.12,0); INSERT INTO "extent" VALUES('EPSG','2180','USA - California - SPCS - 6','United States (USA) - California - counties Imperial; Orange; Riverside; San Diego.',32.53,34.08,-118.15,-114.42,0); INSERT INTO "extent" VALUES('EPSG','2181','USA - California - SPCS27 - 7','United States (USA) - California - Los Angeles county.',33.66,34.83,-118.96,-117.63,0); INSERT INTO "extent" VALUES('EPSG','2182','USA - California - SPCS83 - 5','United States (USA) - California - counties Kern; Los Angeles; San Bernardino; San Luis Obispo; Santa Barbara; Ventura.',32.76,35.81,-121.42,-114.12,0); INSERT INTO "extent" VALUES('EPSG','2183','USA - Colorado - SPCS - C','United States (USA) - Colorado - counties Arapahoe; Chaffee; Cheyenne; Clear Creek; Delta; Denver; Douglas; Eagle; El Paso; Elbert; Fremont; Garfield; Gunnison; Jefferson; Kit Carson; Lake; Lincoln; Mesa; Park; Pitkin; Summit; Teller.',38.14,40.09,-109.06,-102.04,0); INSERT INTO "extent" VALUES('EPSG','2184','USA - Colorado - SPCS - N','United States (USA) - Colorado - counties Adams; Boulder; Gilpin; Grand; Jackson; Larimer; Logan; Moffat; Morgan; Phillips; Rio Blanco; Routt; Sedgwick; Washington; Weld; Yuma.',39.56,41.01,-109.06,-102.04,0); INSERT INTO "extent" VALUES('EPSG','2185','USA - Colorado - SPCS - S','United States (USA) - Colorado - counties Alamosa; Archuleta; Baca; Bent; Conejos; Costilla; Crowley; Custer; Dolores; Hinsdale; Huerfano; Kiowa; La Plata; Las Animas; Mineral; Montezuma; Montrose; Otero; Ouray; Prowers; Pueblo; Rio Grande; Saguache; San Juan; San Miguel.',36.98,38.68,-109.06,-102.04,0); INSERT INTO "extent" VALUES('EPSG','2186','USA - Florida - SPCS - E','United States (USA) - Florida - counties of Brevard; Broward; Clay; Collier; Dade; Duval; Flagler; Glades; Hendry; Highlands; Indian River; Lake; Martin; Monroe; Nassau; Okeechobee; Orange; Osceola; Palm Beach; Putnam; Seminole; St Johns; St Lucie; Volusia.',24.41,30.83,-82.33,-79.97,0); INSERT INTO "extent" VALUES('EPSG','2187','USA - Florida - SPCS - N','United States (USA) - Florida - counties of Alachua; Baker; Bay; Bradford; Calhoun; Columbia; Dixie; Escambia; Franklin; Gadsden; Gilchrist; Gulf; Hamilton; Holmes; Jackson; Jefferson; Lafayette; Leon; Liberty; Madison; Okaloosa; Santa Rosa; Suwannee; Taylor; Union; Wakulla; Walton; Washington.',29.21,31.01,-87.63,-82.04,0); INSERT INTO "extent" VALUES('EPSG','2188','USA - Florida - SPCS - W','United States (USA) - Florida - counties of Charlotte; Citrus; De Soto; Hardee; Hernando; Hillsborough; Lee; Levy; Manatee; Marion; Pasco; Pinellas; Polk; Sarasota; Sumter.',26.27,29.6,-83.34,-81.13,0); INSERT INTO "extent" VALUES('EPSG','2189','USA - Georgia - SPCS - E','United States (USA) - Georgia - counties of Appling; Atkinson; Bacon; Baldwin; Brantley; Bryan; Bulloch; Burke; Camden; Candler; Charlton; Chatham; Clinch; Coffee; Columbia; Dodge; Echols; Effingham; Elbert; Emanuel; Evans; Franklin; Glascock; Glynn; Greene; Hancock; Hart; Jeff Davis; Jefferson; Jenkins; Johnson; Lanier; Laurens; Liberty; Lincoln; Long; Madison; McDuffie; McIntosh; Montgomery; Oglethorpe; Pierce; Richmond; Screven; Stephens; Taliaferro; Tattnall; Telfair; Toombs; Treutlen; Ware; Warren; Washington; Wayne; Wheeler; Wilkes; Wilkinson.',30.36,34.68,-83.47,-80.77,0); INSERT INTO "extent" VALUES('EPSG','2190','USA - Georgia - SPCS - W','United States (USA) - Georgia - counties of Baker; Banks; Barrow; Bartow; Ben Hill; Berrien; Bibb; Bleckley; Brooks; Butts; Calhoun; Carroll; Catoosa; Chattahoochee; Chattooga; Cherokee; Clarke; Clay; Clayton; Cobb; Colquitt; Cook; Coweta; Crawford; Crisp; Dade; Dawson; De Kalb; Decatur; Dooly; Dougherty; Douglas; Early; Fannin; Fayette; Floyd; Forsyth; Fulton; Gilmer; Gordon; Grady; Gwinnett; Habersham; Hall; Haralson; Harris; Heard; Henry; Houston; Irwin; Jackson; Jasper; Jones; Lamar; Lee; Lowndes; Lumpkin; Macon; Marion; Meriwether; Miller; Mitchell; Monroe; Morgan; Murray; Muscogee; Newton; Oconee; Paulding; Peach; Pickens; Pike; Polk; Pulaski; Putnam; Quitman; Rabun; Randolph; Rockdale; Schley; Seminole; Spalding; Stewart; Sumter; Talbot; Taylor; Terrell; Thomas; Tift; Towns; Troup; Turner; Twiggs; Union; Upson; Walker; Walton; Webster; White; Whitfield; Wilcox; Worth.',30.62,35.01,-85.61,-82.99,0); INSERT INTO "extent" VALUES('EPSG','2191','USA - Idaho - SPCS - C','United States (USA) - Idaho - counties of Blaine; Butte; Camas; Cassia; Custer; Gooding; Jerome; Lemhi; Lincoln; Minidoka; Twin Falls.',41.99,45.7,-115.3,-112.67,0); INSERT INTO "extent" VALUES('EPSG','2192','USA - Idaho - SPCS - E','United States (USA) - Idaho - counties of Bannock; Bear Lake; Bingham; Bonneville; Caribou; Clark; Franklin; Fremont; Jefferson; Madison; Oneida; Power; Teton.',41.99,44.75,-113.24,-111.04,0); INSERT INTO "extent" VALUES('EPSG','2193','USA - Idaho - SPCS - W','United States (USA) - Idaho - counties of Ada; Adams; Benewah; Boise; Bonner; Boundary; Canyon; Clearwater; Elmore; Gem; Idaho; Kootenai; Latah; Lewis; Nez Perce; Owyhee; Payette; Shoshone; Valley; Washington.',41.99,49.01,-117.24,-114.32,0); INSERT INTO "extent" VALUES('EPSG','2194','USA - Illinois - SPCS - E','United States (USA) - Illinois - counties of Boone; Champaign; Clark; Clay; Coles; Cook; Crawford; Cumberland; De Kalb; De Witt; Douglas; Du Page; Edgar; Edwards; Effingham; Fayette; Ford; Franklin; Gallatin; Grundy; Hamilton; Hardin; Iroquois; Jasper; Jefferson; Johnson; Kane; Kankakee; Kendall; La Salle; Lake; Lawrence; Livingston; Macon; Marion; Massac; McHenry; McLean; Moultrie; Piatt; Pope; Richland; Saline; Shelby; Vermilion; Wabash; Wayne; White; Will; Williamson.',37.06,42.5,-89.27,-87.02,0); INSERT INTO "extent" VALUES('EPSG','2195','USA - Illinois - SPCS - W','United States (USA) - Illinois - counties of Adams; Alexander; Bond; Brown; Bureau; Calhoun; Carroll; Cass; Christian; Clinton; Fulton; Greene; Hancock; Henderson; Henry; Jackson; Jersey; Jo Daviess; Knox; Lee; Logan; Macoupin; Madison; Marshall; Mason; McDonough; Menard; Mercer; Monroe; Montgomery; Morgan; Ogle; Peoria; Perry; Pike; Pulaski; Putnam; Randolph; Rock Island; Sangamon; Schuyler; Scott; St Clair; Stark; Stephenson; Tazewell; Union; Warren; Washington; Whiteside; Winnebago; Woodford.',36.97,42.51,-91.52,-88.92,0); INSERT INTO "extent" VALUES('EPSG','2196','USA - Indiana - SPCS - E','United States (USA) - Indiana - counties of Adams; Allen; Bartholomew; Blackford; Brown; Cass; Clark; De Kalb; Dearborn; Decatur; Delaware; Elkhart; Fayette; Floyd; Franklin; Fulton; Grant; Hamilton; Hancock; Harrison; Henry; Howard; Huntington; Jackson; Jay; Jefferson; Jennings; Johnson; Kosciusko; Lagrange; Madison; Marion; Marshall; Miami; Noble; Ohio; Randolph; Ripley; Rush; Scott; Shelby; St Joseph; Steuben; Switzerland; Tipton; Union; Wabash; Washington; Wayne; Wells; Whitley.',37.95,41.77,-86.59,-84.78,0); INSERT INTO "extent" VALUES('EPSG','2197','USA - Indiana - SPCS - W','United States (USA) - Indiana - counties of Benton; Boone; Carroll; Clay; Clinton; Crawford; Daviess; Dubois; Fountain; Gibson; Greene; Hendricks; Jasper; Knox; La Porte; Lake; Lawrence; Martin; Monroe; Montgomery; Morgan; Newton; Orange; Owen; Parke; Perry; Pike; Porter; Posey; Pulaski; Putnam; Spencer; Starke; Sullivan; Tippecanoe; Vanderburgh; Vermillion; Vigo; Warren; Warrick; White.',37.77,41.77,-88.1,-86.24,0); INSERT INTO "extent" VALUES('EPSG','2198','USA - Iowa - SPCS - N','United States (USA) - Iowa - counties of Allamakee; Benton; Black Hawk; Boone; Bremer; Buchanan; Buena Vista; Butler; Calhoun; Carroll; Cerro Gordo; Cherokee; Chickasaw; Clay; Clayton; Crawford; Delaware; Dickinson; Dubuque; Emmet; Fayette; Floyd; Franklin; Greene; Grundy; Hamilton; Hancock; Hardin; Howard; Humboldt; Ida; Jackson; Jones; Kossuth; Linn; Lyon; Marshall; Mitchell; Monona; O''Brien; Osceola; Palo Alto; Plymouth; Pocahontas; Sac; Sioux; Story; Tama; Webster; Winnebago; Winneshiek; Woodbury; Worth; Wright.',41.85,43.51,-96.65,-90.15,0); INSERT INTO "extent" VALUES('EPSG','2199','USA - Iowa - SPCS - S','United States (USA) - Iowa - counties of Adair; Adams; Appanoose; Audubon; Cass; Cedar; Clarke; Clinton; Dallas; Davis; Decatur; Des Moines; Fremont; Guthrie; Harrison; Henry; Iowa; Jasper; Jefferson; Johnson; Keokuk; Lee; Louisa; Lucas; Madison; Mahaska; Marion; Mills; Monroe; Montgomery; Muscatine; Page; Polk; Pottawattamie; Poweshiek; Ringgold; Scott; Shelby; Taylor; Union; Van Buren; Wapello; Warren; Washington; Wayne.',40.36,42.04,-96.14,-90.14,0); INSERT INTO "extent" VALUES('EPSG','2200','USA - Kansas - SPCS - N','United States (USA) - Kansas - counties of Atchison; Brown; Cheyenne; Clay; Cloud; Decatur; Dickinson; Doniphan; Douglas; Ellis; Ellsworth; Geary; Gove; Graham; Jackson; Jefferson; Jewell; Johnson; Leavenworth; Lincoln; Logan; Marshall; Mitchell; Morris; Nemaha; Norton; Osborne; Ottawa; Phillips; Pottawatomie; Rawlins; Republic; Riley; Rooks; Russell; Saline; Shawnee; Sheridan; Sherman; Smith; Thomas; Trego; Wabaunsee; Wallace; Washington; Wyandotte.',38.52,40.01,-102.06,-94.58,0); INSERT INTO "extent" VALUES('EPSG','2201','USA - Kansas - SPCS - S','United States (USA) - Kansas - counties of Allen; Anderson; Barber; Barton; Bourbon; Butler; Chase; Chautauqua; Cherokee; Clark; Coffey; Comanche; Cowley; Crawford; Edwards; Elk; Finney; Ford; Franklin; Grant; Gray; Greeley; Greenwood; Hamilton; Harper; Harvey; Haskell; Hodgeman; Kearny; Kingman; Kiowa; Labette; Lane; Linn; Lyon; Marion; McPherson; Meade; Miami; Montgomery; Morton; Neosho; Ness; Osage; Pawnee; Pratt; Reno; Rice; Rush; Scott; Sedgwick; Seward; Stafford; Stanton; Stevens; Sumner; Wichita; Wilson; Woodson.',36.99,38.88,-102.05,-94.6,0); INSERT INTO "extent" VALUES('EPSG','2202','USA - Kentucky - SPCS - N','United States (USA) - Kentucky - counties of Anderson; Bath; Boone; Bourbon; Boyd; Bracken; Bullitt; Campbell; Carroll; Carter; Clark; Elliott; Fayette; Fleming; Franklin; Gallatin; Grant; Greenup; Harrison; Henry; Jefferson; Jessamine; Kenton; Lawrence; Lewis; Mason; Menifee; Montgomery; Morgan; Nicholas; Oldham; Owen; Pendleton; Robertson; Rowan; Scott; Shelby; Spencer; Trimble; Woodford.',37.71,39.15,-85.96,-82.47,0); INSERT INTO "extent" VALUES('EPSG','2203','USA - Kentucky - SPCS - S','United States (USA) - Kentucky - counties of Adair; Allen; Ballard; Barren; Bell; Boyle; Breathitt; Breckinridge; Butler; Caldwell; Calloway; Carlisle; Casey; Christian; Clay; Clinton; Crittenden; Cumberland; Daviess; Edmonson; Estill; Floyd; Fulton; Garrard; Graves; Grayson; Green; Hancock; Hardin; Harlan; Hart; Henderson; Hickman; Hopkins; Jackson; Johnson; Knott; Knox; Larue; Laurel; Lee; Leslie; Letcher; Lincoln; Livingston; Logan; Lyon; Madison; Magoffin; Marion; Marshall; Martin; McCracken; McCreary; McLean; Meade; Mercer; Metcalfe; Monroe; Muhlenberg; Nelson; Ohio; Owsley; Perry; Pike; Powell; Pulaski; Rockcastle; Russell; Simpson; Taylor; Todd; Trigg; Union; Warren; Washington; Wayne; Webster; Whitley; Wolfe.',36.49,38.17,-89.57,-81.95,0); INSERT INTO "extent" VALUES('EPSG','2204','USA - Louisiana - SPCS - N','United States (USA) - Louisiana - counties of Avoyelles; Bienville; Bossier; Caddo; Caldwell; Catahoula; Claiborne; Concordia; De Soto; East Carroll; Franklin; Grant; Jackson; La Salle; Lincoln; Madison; Morehouse; Natchitoches; Ouachita; Rapides; Red River; Richland; Sabine; Tensas; Union; Vernon; Webster; West Carroll; Winn.',30.85,33.03,-94.05,-90.86,0); INSERT INTO "extent" VALUES('EPSG','2205','USA - Louisiana - SPCS27 - S','United States (USA) - Louisiana - counties of Acadia; Allen; Ascension; Assumption; Beauregard; Calcasieu; Cameron; East Baton Rouge; East Feliciana; Evangeline; Iberia; Iberville; Jefferson; Jefferson Davis; Lafayette; LaFourche; Livingston; Orleans; Plaquemines; Pointe Coupee; St Bernard; St Charles; St Helena; St James; St John the Baptist; St Landry; St Martin; St Mary; St Tammany; Tangipahoa; Terrebonne; Vermilion; Washington; West Baton Rouge; West Feliciana. Also Gulf of Mexico outer continental shelf (GoM OCS) protraction areas Sabine Pass (LA); West Cameron; East Cameron; Vermilion; South Marsh Island; Eugene Island; Ship Shoal; South Pelto; Bay Marchand; South Timbalier; Grand Isle; West Delta; South Pass; Main Pass; Breton Sound; Chandeleur.',27.82,31.07,-93.94,-87.76,0); INSERT INTO "extent" VALUES('EPSG','2206','USA - Maine - SPCS - E','United States (USA) - Maine - counties of Aroostook; Hancock; Knox; Penobscot; Piscataquis; Waldo; Washington.',43.88,47.47,-70.03,-66.91,0); INSERT INTO "extent" VALUES('EPSG','2207','USA - Maine - SPCS - W','United States (USA) - Maine - counties of Androscoggin; Cumberland; Franklin; Kennebec; Lincoln; Oxford; Sagadahoc; Somerset; York.',43.04,46.58,-71.09,-69.26,0); INSERT INTO "extent" VALUES('EPSG','2208','USA - Massachusetts - SPCS - islands','United States (USA) - Massachusetts offshore - counties of Dukes; Nantucket.',41.19,41.51,-70.91,-69.89,0); INSERT INTO "extent" VALUES('EPSG','2209','USA - Massachusetts - SPCS - mainland','United States (USA) - Massachusetts onshore - counties of Barnstable; Berkshire; Bristol; Essex; Franklin; Hampden; Hampshire; Middlesex; Norfolk; Plymouth; Suffolk; Worcester.',41.46,42.89,-73.5,-69.86,0); INSERT INTO "extent" VALUES('EPSG','2210','USA - Montana - SPCS27 - C','United States (USA) - Montana - counties of Cascade; Dawson; Fergus; Garfield; Judith Basin; Lake; Lewis and Clark; McCone; Meagher; Mineral; Missoula; Petroleum; Powell; Prairie; Richland; Sanders; Wibaux.',46.17,48.26,-116.06,-104.04,0); INSERT INTO "extent" VALUES('EPSG','2211','USA - Montana - SPCS27 - N','United States (USA) - Montana north of approximately 47°50''N - counties of Blaine; Chouteau; Daniels; Flathead; Glacier; Hill; Liberty; Lincoln; Phillips; Pondera; Roosevelt; Sheridan; Teton; Toole; Valley.',47.41,49.01,-116.07,-104.04,0); INSERT INTO "extent" VALUES('EPSG','2212','USA - Montana - SPCS27 - S','United States (USA) - Montana - counties of Beaverhead; Big Horn; Broadwater; Carbon; Carter; Custer; Deer Lodge; Fallon; Gallatin; Golden Valley; Granite; Jefferson; Madison; Musselshell; Park; Powder River; Ravalli; Rosebud; Silver Bow; Stillwater; Sweet Grass; Treasure; Wheatland; Yellowstone.',44.35,46.87,-114.57,-104.04,0); INSERT INTO "extent" VALUES('EPSG','2213','USA - Minnesota - SPCS - C','United States (USA) - Minnesota - counties of Aitkin; Becker; Benton; Carlton; Cass; Chisago; Clay; Crow Wing; Douglas; Grant; Hubbard; Isanti; Kanabec; Mille Lacs; Morrison; Otter Tail; Pine; Pope; Stearns; Stevens; Todd; Traverse; Wadena; Wilkin.',45.28,47.48,-96.86,-92.29,0); INSERT INTO "extent" VALUES('EPSG','2214','USA - Minnesota - SPCS - N','United States (USA) - Minnesota - counties of Beltrami; Clearwater; Cook; Itasca; Kittson; Koochiching; Lake; Lake of the Woods; Mahnomen; Marshall; Norman; Pennington; Polk; Red Lake; Roseau; St Louis.',46.64,49.38,-97.22,-89.49,0); INSERT INTO "extent" VALUES('EPSG','2215','USA - Minnesota - SPCS - S','United States (USA) - Minnesota - counties of Anoka; Big Stone; Blue Earth; Brown; Carver; Chippewa; Cottonwood; Dakota; Dodge; Faribault; Fillmore; Freeborn; Goodhue; Hennepin; Houston; Jackson; Kandiyohi; Lac Qui Parle; Le Sueur; Lincoln; Lyon; Martin; McLeod; Meeker; Mower; Murray; Nicollet; Nobles; Olmsted; Pipestone; Ramsey; Redwood; Renville; Rice; Rock; Scott; Sherburne; Sibley; Steele; Swift; Wabasha; Waseca; Washington; Watonwan; Winona; Wright; Yellow Medicine.',43.49,45.59,-96.85,-91.21,0); INSERT INTO "extent" VALUES('EPSG','2216','USA - Mississippi - SPCS - E','United States (USA) - Mississippi - counties of Alcorn; Attala; Benton; Calhoun; Chickasaw; Choctaw; Clarke; Clay; Covington; Forrest; George; Greene; Hancock; Harrison; Itawamba; Jackson; Jasper; Jones; Kemper; Lafayette; Lamar; Lauderdale; Leake; Lee; Lowndes; Marshall; Monroe; Neshoba; Newton; Noxubee; Oktibbeha; Pearl River; Perry; Pontotoc; Prentiss; Scott; Smith; Stone; Tippah; Tishomingo; Union; Wayne; Webster; Winston.',30.01,35.01,-89.97,-88.09,0); INSERT INTO "extent" VALUES('EPSG','2217','USA - Mississippi - SPCS - W','United States (USA) - Mississippi - counties of Adams; Amite; Bolivar; Carroll; Claiborne; Coahoma; Copiah; De Soto; Franklin; Grenada; Hinds; Holmes; Humphreys; Issaquena; Jefferson; Jefferson Davis; Lawrence; Leflore; Lincoln; Madison; Marion; Montgomery; Panola; Pike; Quitman; Rankin; Sharkey; Simpson; Sunflower; Tallahatchie; Tate; Tunica; Walthall; Warren; Washington; Wilkinson; Yalobusha; Yazoo.',31.0,35.01,-91.65,-89.37,0); INSERT INTO "extent" VALUES('EPSG','2218','USA - Missouri - SPCS - C','United States (USA) - Missouri - counties of Adair; Audrain; Benton; Boone; Callaway; Camden; Carroll; Chariton; Christian; Cole; Cooper; Dallas; Douglas; Greene; Grundy; Hickory; Howard; Howell; Knox; Laclede; Linn; Livingston; Macon; Maries; Mercer; Miller; Moniteau; Monroe; Morgan; Osage; Ozark; Pettis; Phelps; Polk; Pulaski; Putnam; Randolph; Saline; Schuyler; Scotland; Shelby; Stone; Sullivan; Taney; Texas; Webster; Wright.',36.48,40.61,-93.79,-91.41,0); INSERT INTO "extent" VALUES('EPSG','2219','USA - Missouri - SPCS - E','United States (USA) - Missouri - counties of Bollinger; Butler; Cape Girardeau; Carter; Clark; Crawford; Dent; Dunklin; Franklin; Gasconade; Iron; Jefferson; Lewis; Lincoln; Madison; Marion; Mississippi; Montgomery; New Madrid; Oregon; Pemiscot; Perry; Pike; Ralls; Reynolds; Ripley; Scott; Shannon; St Charles; St Francois; St Louis; Ste. Genevieve; Stoddard; Warren; Washington; Wayne.',35.98,40.61,-91.97,-89.1,0); INSERT INTO "extent" VALUES('EPSG','2220','USA - Missouri - SPCS - W','United States (USA) - Missouri - counties of Andrew; Atchison; Barry; Barton; Bates; Buchanan; Caldwell; Cass; Cedar; Clay; Clinton; Dade; Daviess; De Kalb; Gentry; Harrison; Henry; Holt; Jackson; Jasper; Johnson; Lafayette; Lawrence; McDonald; Newton; Nodaway; Platte; Ray; St Clair; Vernon; Worth.',36.48,40.59,-95.77,-93.48,0); INSERT INTO "extent" VALUES('EPSG','2221','USA - Nebraska - SPCS27 - N','United States (USA) - Nebraska - counties of Antelope; Blaine; Box Butte; Boyd; Brown; Burt; Cedar; Cherry; Cuming; Dakota; Dawes; Dixon; Garfield; Grant; Holt; Hooker; Keya Paha; Knox; Loup; Madison; Pierce; Rock; Sheridan; Sioux; Stanton; Thomas; Thurston; Wayne; Wheeler.',41.68,43.01,-104.06,-96.07,0); INSERT INTO "extent" VALUES('EPSG','2222','USA - Nebraska - SPCS27 - S','United States (USA) - Nebraska - counties of Adams; Arthur; Banner; Boone; Buffalo; Butler; Cass; Chase; Cheyenne; Clay; Colfax; Custer; Dawson; Deuel; Dodge; Douglas; Dundy; Fillmore; Franklin; Frontier; Furnas; Gage; Garden; Gosper; Greeley; Hall; Hamilton; Harlan; Hayes; Hitchcock; Howard; Jefferson; Johnson; Kearney; Keith; Kimball; Lancaster; Lincoln; Logan; McPherson; Merrick; Morrill; Nance; Nemaha; Nuckolls; Otoe; Pawnee; Perkins; Phelps; Platte; Polk; Red Willow; Richardson; Saline; Sarpy; Saunders; Scotts Bluff; Seward; Sherman; Thayer; Valley; Washington; Webster; York.',39.99,42.01,-104.06,-95.3,0); INSERT INTO "extent" VALUES('EPSG','2223','USA - Nevada - SPCS - C','United States (USA) - Nevada - counties of Lander; Nye.',36.0,41.0,-118.19,-114.99,0); INSERT INTO "extent" VALUES('EPSG','2224','USA - Nevada - SPCS - E','United States (USA) - Nevada - counties of Clark; Elko; Eureka; Lincoln; White Pine.',34.99,42.0,-117.01,-114.03,0); INSERT INTO "extent" VALUES('EPSG','2225','USA - Nevada - SPCS - W','United States (USA) - Nevada - counties of Churchill; Douglas; Esmeralda; Humboldt; Lyon; Mineral; Pershing; Storey; Washoe.',36.95,42.0,-120.0,-116.99,0); INSERT INTO "extent" VALUES('EPSG','2226','Canada - Newfoundland - east of 54.5°W','Canada - Newfoundland - onshore east of 54°30''W.',46.56,49.89,-54.5,-52.54,0); INSERT INTO "extent" VALUES('EPSG','2227','Canada - Newfoundland and Labrador - 57.5°W to 54.5°W','Canada - Newfoundland and Labrador between 57°30''W and 54°30''W.',46.81,54.71,-57.5,-54.49,0); INSERT INTO "extent" VALUES('EPSG','2228','USA - New Mexico - SPCS - E','United States (USA) - New Mexico - counties of Chaves; Colfax; Curry; De Baca; Eddy; Guadalupe; Harding; Lea; Mora; Quay; Roosevelt; San Miguel; Union.',32.0,37.0,-105.72,-102.99,0); INSERT INTO "extent" VALUES('EPSG','2229','USA - New Mexico - SPCS27 - C','United States (USA) - New Mexico - counties of Bernalillo; Dona Ana; Lincoln; Los Alamos; Otero; Rio Arriba; Sandoval; Santa Fe; Socorro; Taos; Torrance.',31.78,37.0,-107.73,-104.83,0); INSERT INTO "extent" VALUES('EPSG','2230','USA - New Mexico - SPCS27 - W','United States (USA) - New Mexico - counties of Catron; Cibola; Grant; Hidalgo; Luna; McKinley; San Juan; Sierra; Valencia.',31.33,37.0,-109.06,-106.32,0); INSERT INTO "extent" VALUES('EPSG','2231','USA - New Mexico - SPCS83 - C','United States (USA) - New Mexico - counties of Bernalillo; Dona Ana; Lincoln; Los Alamos; Otero; Rio Arriba; Sandoval; Santa Fe; Socorro; Taos; Torrance; Valencia.',31.78,37.0,-107.73,-104.84,0); INSERT INTO "extent" VALUES('EPSG','2232','USA - New Mexico - SPCS83 - W','United States (USA) - New Mexico - counties of Catron; Cibola; Grant; Hidalgo; Luna; McKinley; San Juan; Sierra.',31.33,37.0,-109.06,-106.32,0); INSERT INTO "extent" VALUES('EPSG','2233','USA - New York - SPCS - C','United States (USA) - New York - counties of Broome; Cayuga; Chemung; Chenango; Cortland; Jefferson; Lewis; Madison; Oneida; Onondaga; Ontario; Oswego; Schuyler; Seneca; Steuben; Tioga; Tompkins; Wayne; Yates.',41.99,44.41,-77.75,-75.06,0); INSERT INTO "extent" VALUES('EPSG','2234','USA - New York - SPCS - E','United States (USA) - New York mainland - counties of Albany; Clinton; Columbia; Delaware; Dutchess; Essex; Franklin; Fulton; Greene; Hamilton; Herkimer; Montgomery; Orange; Otsego; Putnam; Rensselaer; Rockland; Saratoga; Schenectady; Schoharie; St Lawrence; Sullivan; Ulster; Warren; Washington; Westchester.',40.88,45.02,-75.87,-73.23,0); INSERT INTO "extent" VALUES('EPSG','2235','USA - New York - SPCS - Long Island','United States (USA) - New York - counties of Bronx; Kings; Nassau; New York; Queens; Richmond; Suffolk.',40.47,41.3,-74.26,-71.8,0); INSERT INTO "extent" VALUES('EPSG','2236','USA - New York - SPCS - W','United States (USA) - New York - counties of Allegany; Cattaraugus; Chautauqua; Erie; Genesee; Livingston; Monroe; Niagara; Orleans; Wyoming.',41.99,43.64,-79.77,-77.36,0); INSERT INTO "extent" VALUES('EPSG','2237','USA - North Dakota - SPCS - N','United States (USA) - North Dakota - counties of Benson; Bottineau; Burke; Cavalier; Divide; Eddy; Foster; Grand Forks; Griggs; McHenry; McKenzie; McLean; Mountrial; Nelson; Pembina; Pierce; Ramsey; Renville; Rolette; Sheridan; Steele; Towner; Traill; Walsh; Ward; Wells; Williams.',47.15,49.01,-104.07,-96.83,0); INSERT INTO "extent" VALUES('EPSG','2238','USA - North Dakota - SPCS - S','United States (USA) - North Dakota - counties of Adams; Barnes; Billings; Bowman; Burleigh; Cass; Dickey; Dunn; Emmons; Golden Valley; Grant; Hettinger; Kidder; La Moure; Logan; McIntosh; Mercer; Morton; Oliver; Ransom; Richland; Sargent; Sioux; Slope; Stark; Stutsman.',45.93,47.83,-104.05,-96.55,0); INSERT INTO "extent" VALUES('EPSG','2239','USA - Ohio - SPCS - N','United States (USA) - Ohio - counties of Allen;Ashland; Ashtabula; Auglaize; Carroll; Columbiana; Coshocton; Crawford; Cuyahoga; Defiance; Delaware; Erie; Fulton; Geauga; Hancock; Hardin; Harrison; Henry; Holmes; Huron; Jefferson; Knox; Lake; Logan; Lorain; Lucas; Mahoning; Marion; Medina; Mercer; Morrow; Ottawa; Paulding; Portage; Putnam; Richland; Sandusky; Seneca; Shelby; Stark; Summit; Trumbull; Tuscarawas; Union; Van Wert; Wayne; Williams; Wood; Wyandot.',40.1,42.33,-84.81,-80.51,0); INSERT INTO "extent" VALUES('EPSG','2240','USA - Ohio - SPCS - S','United States (USA) - Ohio - counties of Adams; Athens; Belmont; Brown; Butler; Champaign; Clark; Clermont; Clinton; Darke; Fairfield; Fayette; Franklin; Gallia; Greene; Guernsey; Hamilton; Highland; Hocking; Jackson; Lawrence; Licking; Madison; Meigs; Miami; Monroe; Montgomery; Morgan; Muskingum; Noble; Perry; Pickaway; Pike; Preble; Ross; Scioto; Vinton; Warren; Washington.',38.4,40.36,-84.83,-80.7,0); INSERT INTO "extent" VALUES('EPSG','2241','USA - Oklahoma - SPCS - N','United States (USA) - Oklahoma - counties of Adair; Alfalfa; Beaver; Blaine; Canadian; Cherokee; Cimarron; Craig; Creek; Custer; Delaware; Dewey; Ellis; Garfield; Grant; Harper; Kay; Kingfisher; Lincoln; Logan; Major; Mayes; Muskogee; Noble; Nowata; Okfuskee; Oklahoma; Okmulgee; Osage; Ottawa; Pawnee; Payne; Roger Mills; Rogers; Sequoyah; Texas; Tulsa; Wagoner; Washington; Woods; Woodward.',35.27,37.01,-103.0,-94.42,0); INSERT INTO "extent" VALUES('EPSG','2242','USA - Oklahoma - SPCS - S','United States (USA) - Oklahoma - counties of Atoka; Beckham; Bryan; Caddo; Carter; Choctaw; Cleveland; Coal; Comanche; Cotton; Garvin; Grady; Greer; Harmon; Haskell; Hughes; Jackson; Jefferson; Johnston; Kiowa; Latimer; Le Flore; Love; Marshall; McClain; McCurtain; McIntosh; Murray; Pittsburg; Pontotoc; Pottawatomie; Pushmataha; Seminole; Stephens; Tillman; Washita.',33.62,35.57,-100.0,-94.42,0); INSERT INTO "extent" VALUES('EPSG','2243','USA - Oregon - SPCS - N','United States (USA) - Oregon - counties of Baker; Benton; Clackamas; Clatsop; Columbia; Gilliam; Grant; Hood River; Jefferson; Lincoln; Linn; Marion; Morrow; Multnomah; Polk; Sherman; Tillamook; Umatilla; Union; Wallowa; Wasco; Washington; Wheeler; Yamhill.',43.95,46.26,-124.17,-116.47,0); INSERT INTO "extent" VALUES('EPSG','2244','USA - Oregon - SPCS - S','United States (USA) - Oregon - counties of Coos; Crook; Curry; Deschutes; Douglas; Harney; Jackson; Josephine; Klamath; Lake; Lane; Malheur.',41.98,44.56,-124.6,-116.9,0); INSERT INTO "extent" VALUES('EPSG','2245','USA - Pennsylvania - SPCS - N','United States (USA) - Pennsylvania - counties of Bradford; Cameron; Carbon; Centre; Clarion; Clearfield; Clinton; Columbia; Crawford; Elk; Erie; Forest; Jefferson; Lackawanna; Luzerne; Lycoming; McKean; Mercer; Monroe; Montour; Northumberland; Pike; Potter; Sullivan; Susquehanna; Tioga; Union; Venango; Warren; Wayne; Wyoming.',40.6,42.53,-80.53,-74.7,0); INSERT INTO "extent" VALUES('EPSG','2246','USA - Pennsylvania - SPCS - S','United States (USA) - Pennsylvania - counties of Adams; Allegheny; Armstrong; Beaver; Bedford; Berks; Blair; Bucks; Butler; Cambria; Chester; Cumberland; Dauphin; Delaware; Fayette; Franklin; Fulton; Greene; Huntingdon; Indiana; Juniata; Lancaster; Lawrence; Lebanon; Lehigh; Mifflin; Montgomery; Northampton; Perry; Philadelphia; Schuylkill; Snyder; Somerset; Washington; Westmoreland; York.',39.71,41.18,-80.53,-74.72,0); INSERT INTO "extent" VALUES('EPSG','2247','USA - South Carolina - SPCS27 - N','United States (USA) - South Carolina - counties of Abbeville; Anderson; Calhoun; Cherokee; Chester; Chesterfield; Darlington; Dillon; Edgefield; Fairfield; Florence; Greenville; Greenwood; Horry; Kershaw; Lancaster; Laurens; Lee; Lexington; Marion; Marlboro; McCormick; Newberry; Oconee; Pickens; Richland; Saluda; Spartanburg; Sumter; Union; York.',33.46,35.21,-83.36,-78.52,0); INSERT INTO "extent" VALUES('EPSG','2248','USA - South Carolina - SPCS27 - S','United States (USA) - South Carolina - counties of Aiken; Allendale; Bamberg; Barnwell; Beaufort; Berkeley; Charleston; Clarendon; Colleton; Dorchester; Georgetown; Hampton; Jasper; Orangeburg; Williamsburg.',32.05,33.95,-82.03,-78.95,0); INSERT INTO "extent" VALUES('EPSG','2249','USA - South Dakota - SPCS - N','United States (USA) - South Dakota - counties of Beadle; Brookings; Brown; Butte; Campbell; Clark; Codington; Corson; Day; Deuel; Dewey; Edmunds; Faulk; Grant; Hamlin; Hand; Harding; Hyde; Kingsbury; Lawrence; Marshall; McPherson; Meade; Perkins; Potter; Roberts; Spink; Sully; Walworth; Ziebach.',44.14,45.95,-104.07,-96.45,0); INSERT INTO "extent" VALUES('EPSG','2250','USA - South Dakota - SPCS - S','United States (USA) - South Dakota - counties of Aurora; Bennett; Bon Homme; Brule; Buffalo; Charles Mix; Clay; Custer; Davison; Douglas; Fall River; Gregory; Haakon; Hanson; Hughes; Hutchinson; Jackson; Jerauld; Jones; Lake; Lincoln; Lyman; McCook; Mellette; Miner; Minnehaha; Moody; Pennington; Sanborn; Shannon; Stanley; Todd; Tripp; Turner; Union; Yankton.',42.48,44.79,-104.06,-96.43,0); INSERT INTO "extent" VALUES('EPSG','2251','Caribbean - Puerto Rico and US Virgin Islands','Puerto Rico and US Virgin Islands - onshore and offshore.',14.92,21.86,-68.49,-63.88,0); INSERT INTO "extent" VALUES('EPSG','2252','USA - Texas - SPCS - C','United States (USA) - Texas - counties of Anderson; Angelina; Bastrop; Bell; Blanco; Bosque; Brazos; Brown; Burleson; Burnet; Cherokee; Coke; Coleman; Comanche; Concho; Coryell; Crane; Crockett; Culberson; Ector; El Paso; Falls; Freestone; Gillespie; Glasscock; Grimes; Hamilton; Hardin; Houston; Hudspeth; Irion; Jasper; Jeff Davis; Kimble; Lampasas; Lee; Leon; Liberty; Limestone; Llano; Loving; Madison; Mason; McCulloch; McLennan; Menard; Midland; Milam; Mills; Montgomery; Nacogdoches; Newton; Orange; Pecos; Polk; Reagan; Reeves; Robertson; Runnels; Sabine; San Augustine; San Jacinto; San Saba; Schleicher; Shelby; Sterling; Sutton; Tom Green; Travis; Trinity; Tyler; Upton; Walker; Ward; Washington; Williamson; Winkler.',29.78,32.27,-106.66,-93.5,0); INSERT INTO "extent" VALUES('EPSG','2253','USA - Texas - SPCS - N','United States (USA) - Texas - counties of: Armstrong; Briscoe; Carson; Castro; Childress; Collingsworth; Dallam; Deaf Smith; Donley; Gray; Hall; Hansford; Hartley; Hemphill; Hutchinson; Lipscomb; Moore; Ochiltree; Oldham; Parmer; Potter; Randall; Roberts; Sherman; Swisher; Wheeler.',34.3,36.5,-103.03,-99.99,0); INSERT INTO "extent" VALUES('EPSG','2254','USA - Texas - SPCS - NC','United States (USA) - Texas - counties of: Andrews; Archer; Bailey; Baylor; Borden; Bowie; Callahan; Camp; Cass; Clay; Cochran; Collin; Cooke; Cottle; Crosby; Dallas; Dawson; Delta; Denton; Dickens; Eastland; Ellis; Erath; Fannin; Fisher; Floyd; Foard; Franklin; Gaines; Garza; Grayson; Gregg; Hale; Hardeman; Harrison; Haskell; Henderson; Hill; Hockley; Hood; Hopkins; Howard; Hunt; Jack; Johnson; Jones; Kaufman; Kent; King; Knox; Lamar; Lamb; Lubbock; Lynn; Marion; Martin; Mitchell; Montague; Morris; Motley; Navarro; Nolan; Palo Pinto; Panola; Parker; Rains; Red River; Rockwall; Rusk; Scurry; Shackelford; Smith; Somervell; Stephens; Stonewall; Tarrant; Taylor; Terry; Throckmorton; Titus; Upshur; Van Zandt; Wichita; Wilbarger; Wise; Wood; Yoakum; Young.',31.72,34.58,-103.07,-94.0,0); INSERT INTO "extent" VALUES('EPSG','2255','USA - Texas - SPCS27 - S','United States (USA) - Texas - counties of Brooks; Cameron; Duval; Hidalgo; Jim Hogg; Jim Wells; Kenedy; Kleberg; Nueces; San Patricio; Starr; Webb; Willacy; Zapata. Gulf of Mexico outer continental shelf (GoM OCS) protraction areas: South Padre Island; North Padre Island; Mustang Island.',25.83,28.21,-100.2,-95.36,0); INSERT INTO "extent" VALUES('EPSG','2256','USA - Texas - SPCS27 - SC','United States (USA) - Texas - counties of Aransas; Atascosa; Austin; Bandera; Bee; Bexar; Brazoria; Brewster; Caldwell; Calhoun; Chambers; Colorado; Comal; De Witt; Dimmit; Edwards; Fayette; Fort Bend; Frio; Galveston; Goliad; Gonzales; Guadalupe; Harris; Hays; Jackson; Jefferson; Karnes; Kendall; Kerr; Kinney; La Salle; Lavaca; Live Oak; Matagorda; Maverick; McMullen; Medina; Presidio; Real; Refugio; Terrell; Uvalde; Val Verde; Victoria; Waller; Wharton; Wilson; Zavala. Gulf of Mexico outer continental shelf (GoM OCS) protraction areas: Matagorda Island; Brazos; Galveston; High Island, Sabine Pass (TX).',27.78,30.67,-105.0,-93.41,0); INSERT INTO "extent" VALUES('EPSG','2257','USA - Utah - SPCS - C','United States (USA) - Utah - counties of Carbon; Duchesne; Emery; Grand; Juab; Millard; Salt Lake; Sanpete; Sevier; Tooele; Uintah; Utah; Wasatch.',38.49,41.08,-114.05,-109.04,0); INSERT INTO "extent" VALUES('EPSG','2258','USA - Utah - SPCS - N','United States (USA) - Utah - counties of Box Elder; Cache; Daggett; Davis; Morgan; Rich; Summit; Weber.',40.55,42.01,-114.04,-109.04,0); INSERT INTO "extent" VALUES('EPSG','2259','USA - Utah - SPCS - S','United States (USA) - Utah - counties of Beaver; Garfield; Iron; Kane; Piute; San Juan; Washington; Wayne.',36.99,38.58,-114.05,-109.04,0); INSERT INTO "extent" VALUES('EPSG','2260','USA - Virginia - SPCS - N','United States (USA) - Virginia - counties of Arlington; Augusta; Bath; Caroline; Clarke; Culpeper; Fairfax; Fauquier; Frederick; Greene; Highland; King George; Loudoun; Madison; Orange; Page; Prince William; Rappahannock; Rockingham; Shenandoah; Spotsylvania; Stafford; Warren; Westmoreland.',37.77,39.46,-80.06,-76.51,0); INSERT INTO "extent" VALUES('EPSG','2261','USA - Virginia - SPCS - S','United States (USA) - Virginia - counties of Accomack; Albemarle; Alleghany; Amelia; Amherst; Appomattox; Bedford; Bland; Botetourt; Bristol; Brunswick; Buchanan; Buckingham; Campbell; Carroll; Charles City; Charlotte; Chesapeake; Chesterfield; Colonial Heights; Craig; Cumberland; Dickenson; Dinwiddie; Essex; Floyd; Fluvanna; Franklin; Giles; Gloucester; Goochland; Grayson; Greensville; Halifax; Hampton; Hanover; Henrico; Henry; Isle of Wight; James City; King and Queen; King William; Lancaster; Lee; Louisa; Lunenburg; Lynchburg; Mathews; Mecklenburg; Middlesex; Montgomery; Nelson; New Kent; Newport News; Norfolk; Northampton; Northumberland; Norton; Nottoway; Patrick; Petersburg; Pittsylvania; Portsmouth; Powhatan; Prince Edward; Prince George; Pulaski; Richmond; Roanoke; Rockbridge; Russell; Scott; Smyth; Southampton; Suffolk; Surry; Sussex; Tazewell; Washington; Wise; Wythe; York.',36.54,38.28,-83.68,-75.31,0); INSERT INTO "extent" VALUES('EPSG','2262','USA - Washington - SPCS27 - N','United States (USA) - Washington - counties of Chelan; Clallam; Douglas; Ferry; Island; Jefferson; King; Kitsap; Lincoln; Okanogan; Pend Oreille; San Juan; Skagit; Snohomish; Spokane; Stevens; Whatcom.',47.08,49.05,-124.79,-117.02,0); INSERT INTO "extent" VALUES('EPSG','2263','USA - Washington - SPCS27 - S','United States (USA) - Washington - counties of Adams; Asotin; Benton; Clark; Columbia; Cowlitz; Franklin; Garfield; Grant; Grays Harbor; Kittitas; Klickitat; Lewis; Mason; Pacific; Pierce; Skamania; Thurston; Wahkiakum; Walla Walla; Whitman; Yakima.',45.54,47.96,-124.4,-116.91,0); INSERT INTO "extent" VALUES('EPSG','2264','USA - West Virginia - SPCS - N','United States (USA) - West Virginia - counties of Barbour; Berkeley; Brooke; Doddridge; Grant; Hampshire; Hancock; Hardy; Harrison; Jefferson; Marion; Marshall; Mineral; Monongalia; Morgan; Ohio; Pleasants; Preston; Ritchie; Taylor; Tucker; Tyler; Wetzel; Wirt; Wood.',38.76,40.64,-81.76,-77.72,0); INSERT INTO "extent" VALUES('EPSG','2265','USA - West Virginia - SPCS - S','United States (USA) - West Virginia - counties of Boone; Braxton; Cabell; Calhoun; Clay; Fayette; Gilmer; Greenbrier; Jackson; Kanawha; Lewis; Lincoln; Logan; Mason; McDowell; Mercer; Mingo; Monroe; Nicholas; Pendleton; Pocahontas; Putnam; Raleigh; Randolph; Roane; Summers; Upshur; Wayne; Webster; Wyoming.',37.2,39.17,-82.65,-79.05,0); INSERT INTO "extent" VALUES('EPSG','2266','USA - Wisconsin - SPCS - C','United States (USA) - Wisconsin - counties of Barron; Brown; Buffalo; Chippewa; Clark; Door; Dunn; Eau Claire; Jackson; Kewaunee; Langlade; Lincoln; Marathon; Marinette; Menominee; Oconto; Outagamie; Pepin; Pierce; Polk; Portage; Rusk; Shawano; St Croix; Taylor; Trempealeau; Waupaca; Wood.',43.98,45.8,-92.89,-86.25,0); INSERT INTO "extent" VALUES('EPSG','2267','USA - Wisconsin - SPCS - N','United States (USA) - Wisconsin - counties of Ashland; Bayfield; Burnett; Douglas; Florence; Forest; Iron; Oneida; Price; Sawyer; Vilas; Washburn.',45.37,47.31,-92.89,-88.05,0); INSERT INTO "extent" VALUES('EPSG','2268','USA - Wisconsin - SPCS - S','United States (USA) - Wisconsin - counties of Adams; Calumet; Columbia; Crawford; Dane; Dodge; Fond Du Lac; Grant; Green; Green Lake; Iowa; Jefferson; Juneau; Kenosha; La Crosse; Lafayette; Manitowoc; Marquette; Milwaukee; Monroe; Ozaukee; Racine; Richland; Rock; Sauk; Sheboygan; Vernon; Walworth; Washington; Waukesha; Waushara; Winnebago.',42.48,44.33,-91.43,-86.95,0); INSERT INTO "extent" VALUES('EPSG','2269','USA - Wyoming - SPCS - E','United States (USA) - Wyoming - counties of Albany; Campbell; Converse; Crook; Goshen; Laramie; Niobrara; Platte; Weston.',40.99,45.01,-106.33,-104.05,0); INSERT INTO "extent" VALUES('EPSG','2270','USA - Wyoming - SPCS - EC','United States (USA) - Wyoming - counties of Big Horn; Carbon; Johnson; Natrona; Sheridan; Washakie.',40.99,45.01,-108.63,-106.0,0); INSERT INTO "extent" VALUES('EPSG','2271','USA - Wyoming - SPCS - W','United States (USA) - Wyoming - counties of Lincoln; Sublette; Teton; Uinta.',40.99,44.67,-111.06,-109.04,0); INSERT INTO "extent" VALUES('EPSG','2272','USA - Wyoming - SPCS - WC','United States (USA) - Wyoming - counties of Fremont; Hot Springs; Park; Sweetwater.',40.99,45.01,-111.06,-107.5,0); INSERT INTO "extent" VALUES('EPSG','2273','USA - Washington - SPCS83 - N','United States (USA) - Washington - counties of Chelan; Clallam; Douglas; Ferry; Grant north of approximately 47°30''N; Island; Jefferson; King; Kitsap; Lincoln; Okanogan; Pend Oreille; San Juan; Skagit; Snohomish; Spokane; Stevens; Whatcom.',47.08,49.05,-124.79,-117.02,0); INSERT INTO "extent" VALUES('EPSG','2274','USA - Washington - SPCS83 - S','United States (USA) - Washington - counties of Adams; Asotin; Benton; Clark; Columbia; Cowlitz; Franklin; Garfield; Grant south of approximately 47°30''N; Grays Harbor; Kittitas; Klickitat; Lewis; Mason; Pacific; Pierce; Skamania; Thurston; Wahkiakum; Walla Walla; Whitman; Yakima.',45.54,47.61,-124.4,-116.91,0); INSERT INTO "extent" VALUES('EPSG','2275','Canada - Newfoundland and Labrador - 60°W to 57.5°W','Canada - Newfoundland west of 57°30''W.',47.5,50.54,-59.48,-57.5,0); INSERT INTO "extent" VALUES('EPSG','2276','Canada - Quebec and Labrador - 63°W to 60°W','Canada - Quebec and Labrador between 63°W and 60°W.',47.16,58.92,-63.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','2277','Canada - Quebec and Labrador - 66°W to 63°W','Canada - Quebec and Labrador between 66°W and 63°W.',47.95,60.52,-66.0,-63.0,0); INSERT INTO "extent" VALUES('EPSG','2278','Canada - Quebec and Labrador - 69°W to 66°W','Canada - Quebec and Labrador between 69°W and 66°W.',47.31,59.0,-69.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','2279','Canada - Quebec and Ontario - 75°W to 72°W','Canada - Quebec between 75°W and 72°W.; Canada - Ontario - east of 75°W.',44.98,62.53,-75.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','2280','Canada - Quebec and Ontario - 78°W to 75°W','Canada - Quebec and Ontario - between 78°W and 75°W.',43.63,62.65,-78.0,-75.0,0); INSERT INTO "extent" VALUES('EPSG','2281','Canada - Quebec and Ontario - MTM zone 10','Canada - Quebec west of 78°W; Canada - Ontario - between 79°30''W and 78°W in area to north of 47°N; between 80°15''W and 78°W in area between 46°N and 47°N; between 81°W and 78°W in area south of 46°N.',42.26,62.45,-81.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','2282','Cote d''Ivoire (Ivory Coast) - Abidjan area','Côte d''Ivoire (Ivory Coast) - Abidjan area.',5.15,5.54,-4.22,-3.85,0); INSERT INTO "extent" VALUES('EPSG','2283','Australia - Australian Capital Territory','Australia - Australian Capital Territory.',-35.93,-35.12,148.76,149.4,0); INSERT INTO "extent" VALUES('EPSG','2284','Australia - Northern Territory','Australia - Northern Territory.',-26.01,-10.86,128.99,138.0,0); INSERT INTO "extent" VALUES('EPSG','2285','Australia - Victoria','Australia - Victoria.',-39.2,-33.98,140.96,150.04,0); INSERT INTO "extent" VALUES('EPSG','2286','Australia - New South Wales and Victoria','Australia - New South Wales and Victoria.',-39.2,-28.15,140.96,153.69,0); INSERT INTO "extent" VALUES('EPSG','2287','Australia - SE Australia (ACT NSW Vic)','Australia - Australian Capital Territory, New South Wales, Victoria.',-39.2,-28.15,140.96,153.69,0); INSERT INTO "extent" VALUES('EPSG','2288','American Samoa - Tutuila island','American Samoa - Tutuila island.',-14.43,-14.2,-170.88,-170.51,0); INSERT INTO "extent" VALUES('EPSG','2289','American Samoa - Ofu, Olesega and Ta''u islands','American Samoa - Ofu, Olesega and Ta''u islands.',-14.31,-14.11,-169.73,-169.38,0); INSERT INTO "extent" VALUES('EPSG','2290','Canada - Quebec, Newfoundland and Labrador - MTM zone 3','Canada - Newfoundland and Labrador between 60°W and 57°30''W; Canada - Quebec east of 60°W.',47.5,55.38,-60.0,-57.1,0); INSERT INTO "extent" VALUES('EPSG','2291','Australasia - Australia and PNG - 150°E to 156°E','Australia - onshore and offshore between 150°E and 156°E. Papua New Guinea onshore east of 150°E.',-46.44,-2.32,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','2292','Asia - Bangladesh; Myanmar - onshore 15°N to 21°N','Bangladesh - onshore south of 21°N; Myanmar (Burma) - onshore between 15°N and 21°N.',15.0,21.01,92.1,100.65,0); INSERT INTO "extent" VALUES('EPSG','2293','Myanmar (Burma) - onshore south of 15°N','Myanmar (Burma) - onshore south of 15°N.',9.78,15.0,97.74,99.66,0); INSERT INTO "extent" VALUES('EPSG','2294','Asia - Middle East - Iraq zone','Iran - onshore south of 36°N. Iraq - onshore. Kuwait - onshore.',25.02,37.39,38.79,63.34,0); INSERT INTO "extent" VALUES('EPSG','2295','Caribbean - Windward and Leeward Islands','Windward Islands - Dominica; Grenada; St Lucia; St Vincent; Leeward Islands - Anguilla; Antigua (excluding Barbuda); Montserrat; St Kitts and Nevis; Barbados.',11.94,18.33,-63.22,-59.37,0); INSERT INTO "extent" VALUES('EPSG','2296','Cote d''Ivoire (Ivory Coast) - offshore','Côte d''Ivoire (Ivory Coast) - offshore.',1.02,5.19,-7.55,-3.11,0); INSERT INTO "extent" VALUES('EPSG','2297','USA - California - north of 36.5°N','United States (USA) - California north of 36.5°N.',36.5,42.01,-124.45,-116.54,0); INSERT INTO "extent" VALUES('EPSG','2298','USA - California - south of 36.5°N','United States (USA) - California south of 36.5°N',32.53,36.5,-121.98,-114.12,0); INSERT INTO "extent" VALUES('EPSG','2299','World - N hemisphere - 3-degree CM 003°E','Between 1°30''E and 4°30''E, northern hemisphere.',0.0,84.0,1.5,4.5,0); INSERT INTO "extent" VALUES('EPSG','2300','World - N hemisphere - 3-degree CM 006°E','Between 4°30''E and 7°30''E, northern hemisphere.',0.0,84.0,4.5,7.5,0); INSERT INTO "extent" VALUES('EPSG','2301','World - N hemisphere - 3-degree CM 009°E','Between 7°30''E and 10°30''E, northern hemisphere.',0.0,84.0,7.5,10.5,0); INSERT INTO "extent" VALUES('EPSG','2302','World - N hemisphere - 3-degree CM 012°E','Between 10°30''E and 13°30''E, northern hemisphere.',0.0,84.0,10.5,13.5,0); INSERT INTO "extent" VALUES('EPSG','2303','World - N hemisphere - 3-degree CM 015°E','Between 13°30''E and 16°30''E, northern hemisphere.',0.0,84.0,13.5,16.5,0); INSERT INTO "extent" VALUES('EPSG','2304','World - N hemisphere - 3-degree CM 018°E','Between 16°30''E and 19°30''E, northern hemisphere.',0.0,84.0,16.5,19.5,0); INSERT INTO "extent" VALUES('EPSG','2305','World - N hemisphere - 3-degree CM 021°E','Between 19°30''E and 22°30''E, northern hemisphere.',0.0,84.0,19.5,22.5,0); INSERT INTO "extent" VALUES('EPSG','2306','World - N hemisphere - 3-degree CM 024°E','Between 22°30''E and 25°30''E, northern hemisphere.',0.0,84.0,22.5,25.5,0); INSERT INTO "extent" VALUES('EPSG','2307','Brazil - Campos; Espirito Santo and Santos basins','Brazil - offshore - Campos; Espirito Santo and Santos basins.',-28.41,-17.59,-48.8,-35.18,0); INSERT INTO "extent" VALUES('EPSG','2308','Brazil - Tucano basin north','Brazil - Tucano basin north.',-9.8,-8.39,-39.04,-37.09,0); INSERT INTO "extent" VALUES('EPSG','2309','Brazil - Tucano basin central','Brazil - Tucano basin central.',-10.61,-9.79,-39.14,-37.99,0); INSERT INTO "extent" VALUES('EPSG','2310','Brazil - Tucano basin south','Brazil - Tucano basin south.',-12.27,-10.6,-39.07,-37.98,0); INSERT INTO "extent" VALUES('EPSG','2311','Africa - Kenya and Tanzania','Kenya; Tanzania.',-11.75,4.63,29.34,41.91,0); INSERT INTO "extent" VALUES('EPSG','2312','Africa - Botswana, Eswatini, Lesotho, Malawi, Zambia, Zimbabwe','Botswana; Eswatini (Swaziland); Lesotho; Malawi; Zambia; Zimbabwe.',-30.66,-8.19,19.99,35.93,0); INSERT INTO "extent" VALUES('EPSG','2313','Canada - Nova Scotia','Canada - Nova Scotia onshore.',43.41,47.08,-66.28,-59.73,0); INSERT INTO "extent" VALUES('EPSG','2314','Asia - FSU - Caspian states','Azerbaijan; Kazakhstan; Russian Federation; Turkmenistan - Caspian Sea.',35.15,81.85,26.0,90.0,1); INSERT INTO "extent" VALUES('EPSG','2315','Colombia - Cusiana','Colombia - Casanare province BP Cusiana/Cupiagua field areas. Also used by Total in Rivera and Gatanas blocks.',4.75,5.68,-73.0,-72.25,0); INSERT INTO "extent" VALUES('EPSG','2316','Angola - offshore block 5','Angola - offshore block 5.',-8.59,-7.75,12.58,13.4,0); INSERT INTO "extent" VALUES('EPSG','2317','Angola - offshore block 2','Angola - offshore block 2.',-7.01,-6.01,12.08,12.84,0); INSERT INTO "extent" VALUES('EPSG','2318','Angola - offshore block 3','Angola - offshore block 3.',-7.34,-6.66,11.74,12.5,0); INSERT INTO "extent" VALUES('EPSG','2319','Angola - offshore block 7','Angola - offshore block 7.',-10.09,-9.41,12.66,13.39,0); INSERT INTO "extent" VALUES('EPSG','2320','Angola - offshore blocks 7 8 24 + WGC spec','Angola - offshore blocks 7 and 8. Also used rounded to integer metre in offshore block 24 and for GSI/HGS/Western Geophysical speculative seismic data throughout offshore Angola.',-17.26,-6.01,8.2,13.86,0); INSERT INTO "extent" VALUES('EPSG','2321','Angola - offshore blocks 1 and 16','Angola - offshore blocks 1 and 16.',-7.26,-6.03,11.08,12.09,0); INSERT INTO "extent" VALUES('EPSG','2322','Angola - offshore blocks 3 7 15 and 17','Angola - offshore blocks 3, 7,15 and 17.',-10.09,-6.03,10.83,13.39,0); INSERT INTO "extent" VALUES('EPSG','2323','Angola - offshore blocks 1 16 and 18','Angola - offshore blocks 1, 16 and 18.',-8.34,-6.03,11.08,12.75,0); INSERT INTO "extent" VALUES('EPSG','2324','Angola - offshore blocks 2 3 17-18 and 31-33','Angola - offshore blocks 2, 3, 17, 18, 31, 32 and 33.',-8.59,-6.01,10.41,12.84,0); INSERT INTO "extent" VALUES('EPSG','2325','Argentina - Neuquen province Auca Mahuida area','Argentina - Neuquen province - Auca Mahuida area.',-38.75,-37.5,-69.5,-68.25,0); INSERT INTO "extent" VALUES('EPSG','2326','Germany - West Germany all states','Germany - states of former West Germany onshore - Baden-Wurtemberg, Bayern, Bremen, Hamburg, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein.',47.27,55.09,5.86,13.84,0); INSERT INTO "extent" VALUES('EPSG','2327','Syria - Al Whaleed area','Syria - Al Whaleed area',35.33,35.9,39.15,40.41,0); INSERT INTO "extent" VALUES('EPSG','2328','Syria - Shaddadeh area','Syria - Shaddadeh area (36°N, 41°E)',35.79,36.5,40.5,41.39,0); INSERT INTO "extent" VALUES('EPSG','2329','Syria - Deir area','Syria - Deir area (35°22''N, 40°06''E)',34.49,35.9,39.3,40.81,0); INSERT INTO "extent" VALUES('EPSG','2330','Europe - North Sea','Denmark - North Sea; Germany - North Sea; Netherlands - offshore; Norway - North Sea south of 62°N; United Kingdom (UKCS) - North Sea south of 62°N.',51.03,62.0,-5.05,10.86,0); INSERT INTO "extent" VALUES('EPSG','2331','Norway - offshore north of 65°N','Norway - offshore north of 65°N.',65.0,72.0,-0.5,32.02,1); INSERT INTO "extent" VALUES('EPSG','2332','Norway - offshore north of 65°N; Svalbard','Norway - offshore north of 65°N. Also Svalbard.',65.0,84.73,-3.35,38.01,0); INSERT INTO "extent" VALUES('EPSG','2333','Norway - offshore 62°N to 65°N and west of 5°E','Norway - offshore between 62°N and 65°N and west of 5°E.',62.0,65.01,-0.49,5.01,0); INSERT INTO "extent" VALUES('EPSG','2334','Norway - North Sea - offshore south of 62°N','Norway - offshore south of 62°N - North Sea.',56.08,62.01,1.37,10.81,0); INSERT INTO "extent" VALUES('EPSG','2335','Spain - Balearic Islands','Spain - Balearic Islands.',38.59,40.15,1.12,4.39,0); INSERT INTO "extent" VALUES('EPSG','2336','Spain - mainland except northwest','Spain - onshore mainland except northwest (north of 41°30''N and west of 4°30''W).',35.26,43.56,-7.54,3.39,0); INSERT INTO "extent" VALUES('EPSG','2337','Spain - mainland northwest','Spain - onshore mainland north of 41°30''N and west of 4°30'' W.',41.5,43.82,-9.37,-4.5,0); INSERT INTO "extent" VALUES('EPSG','2338','Europe - Portugal and Spain','Portugal; Spain - mainland.',35.26,43.82,-9.56,3.39,0); INSERT INTO "extent" VALUES('EPSG','2339','Italy - Sardinia onshore','Italy - Sardinia onshore.',38.82,41.31,8.08,9.89,0); INSERT INTO "extent" VALUES('EPSG','2340','Italy - Sicily onshore','Italy - Sicily onshore.',36.59,38.35,12.36,15.71,0); INSERT INTO "extent" VALUES('EPSG','2341','Egypt - Gulf of Suez','Egypt - Gulf of Suez.',27.19,30.01,32.34,34.27,0); INSERT INTO "extent" VALUES('EPSG','2342','Europe - common offshore','Denmark - offshore North Sea; Ireland - offshore; Netherlands - offshore; United Kingdom - UKCS offshore.',47.42,63.89,-16.1,10.86,0); INSERT INTO "extent" VALUES('EPSG','2343','Europe - British Isles and Channel Islands onshore','Channel islands - onshore. Ireland - onshore. Isle of Man - onshore. United Kingdom (UK) - onshore - England; Scotland; Wales; Northern Ireland.',49.11,60.9,-10.56,1.84,0); INSERT INTO "extent" VALUES('EPSG','2344','Europe - Finland and Norway - onshore','Finland and Norway - onshore.',57.9,71.24,4.39,31.59,0); INSERT INTO "extent" VALUES('EPSG','2345','Asia - Middle East - Iraq; Israel; Jordan; Lebanon; Kuwait; Saudi Arabia; Syria','Iraq, Israel, Jordan, Lebanon, Kuwait, Saudi Arabia and Syria - onshore.',16.37,37.39,34.17,55.67,0); INSERT INTO "extent" VALUES('EPSG','2346','World - WGS72 BE to WGS 84 - by country','World. Vietnam - offshore.',-90.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','2347','Algeria - north of 31.5°N','Algeria - onshore north of 35 grads North (31°30''N).',31.5,37.14,-3.85,9.22,0); INSERT INTO "extent" VALUES('EPSG','2348','Brunei - offshore','Brunei Darussalam - offshore.',4.58,6.37,112.5,115.24,1); INSERT INTO "extent" VALUES('EPSG','2349','Brunei - onshore','Brunei Darussalam - onshore.',4.01,5.11,114.09,115.37,0); INSERT INTO "extent" VALUES('EPSG','2350','Mozambique - A','Mozambique - Maputo province and southern part of Gaza province; i.e. south of approximately 24°S.',-26.87,-23.91,31.91,34.5,0); INSERT INTO "extent" VALUES('EPSG','2351','Mozambique - B','Mozambique - provinces of Gaza; Inhambane and southern parts of Sofala and Manhica; i.e. between approximately 24°S and 20°S.',-24.91,-19.74,31.29,35.65,0); INSERT INTO "extent" VALUES('EPSG','2352','Mozambique - C','Mozambique - provinces of Sofala north of Beira corridor; Manhica; Tete and Zambezia; i.e. between approximately 20°S and 16°S.',-19.91,-14.01,30.21,39.18,0); INSERT INTO "extent" VALUES('EPSG','2353','Mozambique - D','Mozambique - provinces of Nampula; Niassa; Cabo Delgado; i.e. north of approximately 16°S.',-16.94,-10.42,34.36,40.9,0); INSERT INTO "extent" VALUES('EPSG','2354','Indonesia - Kalimantan','Indonesia - Kalimantan.',-4.24,4.37,108.79,119.06,0); INSERT INTO "extent" VALUES('EPSG','2355','Falkland Islands - East Falkland Island','Falkland Islands (Malvinas) - East Falkland Island.',-52.51,-51.16,-59.98,-57.6,0); INSERT INTO "extent" VALUES('EPSG','2356','Ecuador - Galapagos onshore','Ecuador - Baltra; Galapagos - onshore.',-1.41,0.18,-91.72,-89.19,0); INSERT INTO "extent" VALUES('EPSG','2357','Argentina - Tierra del Fuego onshore','Argentina - Tierra del Fuego onshore.',-55.11,-52.59,-68.64,-63.73,0); INSERT INTO "extent" VALUES('EPSG','2358','Thailand - Bongkot field','Thailand - Bongkot field.',6.74,8.16,102.16,103.05,0); INSERT INTO "extent" VALUES('EPSG','2359','Vietnam - 14°N to 18°N onshore','Vietnam - onshore between 14°N and 18°N.',14.0,18.01,105.61,109.36,0); INSERT INTO "extent" VALUES('EPSG','2360','Vietnam - Con Son Island','Vietnam - Con Son Island.',8.57,8.83,106.48,106.8,0); INSERT INTO "extent" VALUES('EPSG','2361','Myanmar (Burma) - Moattama area','Myanmar (Burma) - Moattama area.',9.48,17.87,93.94,99.66,0); INSERT INTO "extent" VALUES('EPSG','2362','Iran - Kangan district','Iran - Kangan district.',27.3,28.2,51.8,53.01,0); INSERT INTO "extent" VALUES('EPSG','2363','Venezuela - east','Venezuela - east - Delta Amacuro; Anzoategui; Bolivar; Monagas; Sucre states.',3.56,10.8,-67.49,-59.8,0); INSERT INTO "extent" VALUES('EPSG','2364','Philippines - onshore excluding Mindanao','Philippines - onshore excluding Mindanao.',7.75,19.45,116.89,125.88,0); INSERT INTO "extent" VALUES('EPSG','2365','Philippines - Mindanao onshore','Philippines - Mindanao onshore.',4.99,10.52,119.76,126.65,0); INSERT INTO "extent" VALUES('EPSG','2366','Spain - mainland onshore','Spain - mainland onshore.',35.95,43.82,-9.37,3.39,0); INSERT INTO "extent" VALUES('EPSG','2367','Spain - mainland northeast','Spain - onshore mainland north of the parallel of approximately 41°58''N from approximately 6°35''W to the meridian of 4°W of Greenwich and then a line from 41°58''N, 4°W through 40°N, 0°E of Greenwich.',39.96,43.82,-9.37,3.39,0); INSERT INTO "extent" VALUES('EPSG','2368','Spain - mainland southwest','Spain - onshore mainland south of the parallel of approximately 41°58''N from approximately 6°35''W to the meridian of 4°W of Greenwich and then a line from 41°58''N, 4°W through 40°N, 0°E of Greenwich.',35.95,41.98,-7.54,0.28,0); INSERT INTO "extent" VALUES('EPSG','2369','Seychelles - Mahe Island','Seychelles - Mahe Island.',-4.86,-4.5,55.3,55.59,0); INSERT INTO "extent" VALUES('EPSG','2370','Europe - former Yugoslavia onshore','Bosnia and Herzegovina; Croatia - onshore; Kosovo; Montenegro - onshore; North Macedonia; Serbia; Slovenia - onshore.',40.85,46.88,13.38,23.04,0); INSERT INTO "extent" VALUES('EPSG','2371','Nigeria - south','Nigeria - onshore south.',4.22,6.95,4.35,9.45,0); INSERT INTO "extent" VALUES('EPSG','2372','Italy - mainland','Italy - mainland including San Marino and Vatican City State.',37.86,47.1,6.62,18.58,0); INSERT INTO "extent" VALUES('EPSG','2373','USA - Alaska including EEZ','United States (USA) - Alaska including EEZ.',47.88,74.71,167.65,-129.99,0); INSERT INTO "extent" VALUES('EPSG','2374','USA - CONUS including EEZ','United States (USA) - CONUS including EEZ - onshore and offshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico (GoM) OCS.',23.81,49.38,-129.17,-65.69,0); INSERT INTO "extent" VALUES('EPSG','2375','Canada - Saskatchewan','Canada - Saskatchewan.',49.0,60.01,-110.0,-101.34,0); INSERT INTO "extent" VALUES('EPSG','2376','Canada - Alberta','Canada - Alberta.',48.99,60.0,-120.0,-109.98,0); INSERT INTO "extent" VALUES('EPSG','2377','USA - Delaware and Maryland','United States (USA) - Delaware and Maryland.',37.97,39.85,-79.49,-74.97,0); INSERT INTO "extent" VALUES('EPSG','2378','USA - New England - south (CT, MA, NH, RI, VT)','United States (USA) - Connecticut; Massachusetts; New Hampshire; Rhode Island; Vermont.',40.98,45.31,-73.73,-69.86,0); INSERT INTO "extent" VALUES('EPSG','2379','USA - Texas east of 100°W','United States (USA) - Texas east of 100°W.',25.83,34.58,-100.0,-93.5,0); INSERT INTO "extent" VALUES('EPSG','2380','USA - Texas west of 100°W','United States (USA) - Texas west of 100°W.',28.04,36.5,-106.66,-100.0,0); INSERT INTO "extent" VALUES('EPSG','2381','USA - Oregon and Washington','United States (USA) - Oregon and Washington.',41.98,49.05,-124.79,-116.47,0); INSERT INTO "extent" VALUES('EPSG','2382','USA - Idaho and Montana - east of 113°W','United States (USA) - Idaho and Montana - east of 113°W.',41.99,49.01,-113.0,-104.04,0); INSERT INTO "extent" VALUES('EPSG','2383','USA - Idaho and Montana - west of 113°W','United States (USA) - Idaho and Montana - west of 113°W.',41.99,49.01,-117.24,-113.0,0); INSERT INTO "extent" VALUES('EPSG','2384','Canada - Alberta and British Columbia','Canada - Alberta; British Columbia.',48.25,60.01,-139.04,-109.98,0); INSERT INTO "extent" VALUES('EPSG','2385','Panama - Canal Zone','Panama - Canal Zone.',8.82,9.45,-80.07,-79.46,0); INSERT INTO "extent" VALUES('EPSG','2386','Greenland - Hayes Peninsula','Greenland - Hayes Peninsula.',75.86,79.2,-73.29,-60.98,0); INSERT INTO "extent" VALUES('EPSG','2387','USA - Alaska - Aleutian Islands east of 180°E','United States (USA) - Alaska - Aleutian Islands onshore east of 180°E.',51.54,54.34,-178.3,-164.84,0); INSERT INTO "extent" VALUES('EPSG','2388','USA - Alaska - Aleutian Islands west of 180°W','United States (USA) - Alaska - Aleutian Islands onshore west of 180°W.',51.3,53.07,172.42,179.86,0); INSERT INTO "extent" VALUES('EPSG','2389','USA - CONUS east of Mississippi River - onshore','United States (USA) - CONUS east of Mississippi River - onshore - including entire states of Louisiana; Missouri; Minnesota as well as Alabama; Connecticut; Delaware; Florida; Georgia; Illinois; Indiana; Kentucky; Maine; Maryland; Massachusetts; Michigan; Mississippi; New Hampshire; New Jersey; New York; North Carolina; Ohio; Pennsylvania; Rhode Island; South Carolina; Tennessee; Vermont; Virginia; West Virginia; Wisconsin.',24.41,49.38,-97.22,-66.91,0); INSERT INTO "extent" VALUES('EPSG','2390','USA - CONUS west of Mississippi River - onshore','United States (USA) - CONUS west of Mississippi River - onshore - excludes those states covered under Area 2389 - Includes Arizona; Arkansas; California; Colorado; Idaho; Iowa; Kansas; Montana; Nebraska; Nevada; New Mexico; North Dakota; Oklahoma; Oregon; South Dakota; Texas; Utah; Washington; Wyoming.',25.83,49.05,-124.79,-89.64,0); INSERT INTO "extent" VALUES('EPSG','2391','Oman - Masirah Island','Oman - Masirah Island.',20.12,20.74,58.58,59.01,0); INSERT INTO "extent" VALUES('EPSG','2392','UAE - Abu al Bu Khoosh','United Arab Emirates (UAE) - Abu Dhabi offshore - Abu al Bu Khoosh.',25.33,25.54,53.03,53.4,0); INSERT INTO "extent" VALUES('EPSG','2393','Algeria - Hassi Messaoud','Algeria - Hassi Messaoud.',31.48,32.09,5.59,6.5,0); INSERT INTO "extent" VALUES('EPSG','2394','UK - Great Britain and UKCS','United Kingdom (UKCS) - Great Britain (GB) - England; Scotland; Wales; UKCS including North Sea.',49.15,63.83,-6.0,3.4,1); INSERT INTO "extent" VALUES('EPSG','2395','UK - England','United Kingdom (UK) - England onshore.',49.81,55.85,-6.5,1.84,0); INSERT INTO "extent" VALUES('EPSG','2396','UK - England and Wales, Isle of Man','United Kingdom (UK) - England and Wales; Isle of Man - onshore.',49.81,55.85,-6.5,1.84,0); INSERT INTO "extent" VALUES('EPSG','2397','UK - Scotland','United Kingdom (UK) - Scotland (including Orkney and Shetland Islands), onshore and nearshore.',54.57,60.9,-8.74,-0.65,0); INSERT INTO "extent" VALUES('EPSG','2398','UK - Wales','United Kingdom (UK) - Wales onshore.',51.28,53.48,-5.34,-2.65,0); INSERT INTO "extent" VALUES('EPSG','2399','South America - Bolivia; Chile; Ecuador; Guyana; Peru; Venezuela','Bolivia; Chile - onshore north of 43°30''S; Ecuador - mainland onshore; Guyana - onshore; Peru - onshore; Venezuela - onshore.',-43.5,12.25,-81.41,-56.47,0); INSERT INTO "extent" VALUES('EPSG','2400','Bolivia - Madidi','Bolivia - Madidi.',-14.43,-13.56,-68.96,-67.79,0); INSERT INTO "extent" VALUES('EPSG','2401','Bolivia - Block 20','Bolivia - Block 20.',-21.71,-21.09,-63.44,-62.95,0); INSERT INTO "extent" VALUES('EPSG','2402','Chile - onshore north of 21°30''S','Chile - onshore north of 21°30''S.',-21.51,-17.5,-70.49,-68.18,0); INSERT INTO "extent" VALUES('EPSG','2403','Chile - onshore 39°S to 43°30''S','Chile - onshore between 39°S and 43°30''S.',-43.5,-38.99,-74.48,-71.38,0); INSERT INTO "extent" VALUES('EPSG','2404','Oman - block 4','Oman - block 4.',19.58,21.17,56.5,59.02,0); INSERT INTO "extent" VALUES('EPSG','2405','Kazakhstan - Caspian Sea','Kazakhstan - Caspian Sea.',41.15,46.97,48.9,53.15,0); INSERT INTO "extent" VALUES('EPSG','2406','Qatar - offshore','Qatar - offshore.',24.64,27.05,50.55,53.04,0); INSERT INTO "extent" VALUES('EPSG','2407','Greenland - south of 72°N','Greenland - south of 72°N.',59.75,72.0,-55.0,-40.0,1); INSERT INTO "extent" VALUES('EPSG','2408','Japan - Okinawa','Japan - onshore Okinawa.',23.98,26.91,122.83,131.38,0); INSERT INTO "extent" VALUES('EPSG','2409','Asia - Japan and South Korea','Japan - onshore; South Korea - onshore.',20.37,45.54,122.83,145.87,0); INSERT INTO "extent" VALUES('EPSG','2410','Canada - NWT; Nunavut; Saskatchewan','Canada - Northwest Territories; Nunavut; Saskatchewan.',49.0,83.17,-136.46,-60.72,0); INSERT INTO "extent" VALUES('EPSG','2411','Asia - India mainland and Nepal','India - mainland onshore; Nepal.',8.02,35.51,68.13,97.42,0); INSERT INTO "extent" VALUES('EPSG','2412','USA - Alaska mainland','United States (USA) - Alaska mainland.',54.34,71.4,-168.26,-129.99,0); INSERT INTO "extent" VALUES('EPSG','2413','Bahamas - main islands onshore','Bahamas - onshore southwest of a line from 27°30''N, 77°30''W through 23°15''N, 74°30''W to 22°30''N, 72°30''W.',20.86,27.29,-79.04,-72.68,0); INSERT INTO "extent" VALUES('EPSG','2414','Bahamas (San Salvador Island) - onshore','Bahamas (San Salvador Island) - onshore.',23.9,24.19,-74.6,-74.37,0); INSERT INTO "extent" VALUES('EPSG','2415','Canada - Manitoba and Ontario','Canada - Manitoba; Ontario.',41.67,60.01,-102.0,-74.35,0); INSERT INTO "extent" VALUES('EPSG','2416','Canada - eastern provinces','Canada - onshore - New Brunswick; Newfoundland and Labrador; Nova Scotia; Prince Edward Island; Quebec.',43.41,62.62,-79.85,-52.54,0); INSERT INTO "extent" VALUES('EPSG','2417','Canada - Yukon','Canada - Yukon.',59.99,69.7,-141.01,-123.91,0); INSERT INTO "extent" VALUES('EPSG','2418','Caribbean - central (DMA tfm)','Antigua; Barbados; Barbuda; Cuba; Dominican Republic; Grand Cayman; Jamaica; Turks and Caicos Islands. Note: does not include other islands within this geographic area.',13.0,23.25,-85.01,-59.37,0); INSERT INTO "extent" VALUES('EPSG','2419','Central America - Belize to Costa Rica','Onshore Belize, Costa Rica, El Salvador, Guatemala, Honduras and Nicaragua.',7.98,18.49,-92.29,-82.53,0); INSERT INTO "extent" VALUES('EPSG','2420','Europe - west (DMA ED50 mean)','Austria; Belgium; Denmark; Finland; Faroe islands; France; Germany (west); Gibraltar; Greece; Italy; Luxembourg; Netherlands; Norway; Portugal; Spain; Sweden; Switzerland.',34.88,71.24,-9.56,31.59,0); INSERT INTO "extent" VALUES('EPSG','2421','Europe - west central (by country)','Austria; Denmark; France; Germany (west); Netherlands; Switzerland.',42.33,57.8,-4.87,17.17,0); INSERT INTO "extent" VALUES('EPSG','2422','Slovenia - Gorenjska - central','Slovenia - central Gorenjska (Upper Carniola) with part of the Kamnik or Savinja Alps.',46.14,46.45,14.01,14.61,0); INSERT INTO "extent" VALUES('EPSG','2423','Europe - FSU onshore','Armenia; Azerbaijan; Belarus; Estonia - onshore; Georgia - onshore; Kazakhstan; Kyrgyzstan; Latvia - onshore; Lithuania - onshore; Moldova; Russian Federation - onshore; Tajikistan; Turkmenistan; Ukraine - onshore; Uzbekistan.',35.14,81.91,19.57,-168.97,0); INSERT INTO "extent" VALUES('EPSG','2424','USA - HARN','American Samoa; Puerto Rico and the Virgin Islands; United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Hawaii; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',NULL,NULL,NULL,NULL,1); INSERT INTO "extent" VALUES('EPSG','2425','Japan - 45°20''N to 46°N; 141°E to 142°E','Japan - onshore mainland 45°20''N to 46°N; 141°E to 142°E.',45.33,45.54,141.56,142.0,0); INSERT INTO "extent" VALUES('EPSG','2426','Japan - 45°20''N to 46°N; 142°E to 143°E','Japan - onshore 45°20''N to 46°N; 142°E to 143°E.',45.33,45.54,142.0,142.27,0); INSERT INTO "extent" VALUES('EPSG','2427','Japan - 44°40''N to 45°20''N; 141°E to 142°E','Japan - onshore mainland 44°40''N to 45°20''N; 141°E to 142°E.',44.66,45.34,141.5,142.0,0); INSERT INTO "extent" VALUES('EPSG','2428','Japan - 44°40''N to 45°20''N; 142°E to 143°E','Japan - onshore 44°40''N to 45°20''N; 142°E to 143°E.',44.66,45.34,142.0,142.97,0); INSERT INTO "extent" VALUES('EPSG','2429','Japan - 44°N to 44°40''N; 141°E to 142°E','Japan - onshore mainland 44°N to 44°40''N; 141°E to 142°E.',43.99,44.67,141.58,142.0,0); INSERT INTO "extent" VALUES('EPSG','2430','Japan - 44°N to 44°40''N; 142°E to 143°E','Japan - 44°N to 44°40''N; 142°E to 143°E.',43.99,44.67,142.0,143.0,0); INSERT INTO "extent" VALUES('EPSG','2431','Japan - 44°N to 44°40''N; 143°E to 144°E','Japan - onshore 44°N to 44°40''N; 143°E to 144°E.',43.99,44.65,143.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2432','Japan - 44°N to 44°40''N; 144°E to 145°E','Japan - onshore 44°N to 44°40''N; 144°E to 145°E.',43.99,44.19,144.0,145.0,0); INSERT INTO "extent" VALUES('EPSG','2433','Japan - 43°20''N to 44°N; 141°E to 142°E','Japan - onshore 43°20''N to 44°N; 141°E to 142°E.',43.33,44.0,141.26,142.0,0); INSERT INTO "extent" VALUES('EPSG','2434','Japan - 43°20''N to 44°N; 142°E to 143°E','Japan - 43°20''N to 44°N; 142°E to 143°E.',43.33,44.0,142.0,143.0,0); INSERT INTO "extent" VALUES('EPSG','2435','Japan - 43°20''N to 44°N; 143°E to 144°E','Japan - 43°20''N to 44°N; 143°E to 144°E.',43.33,44.0,143.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2436','Japan - 43°20''N to 44°N; 144°E to 145°E','Japan - 43°20''N to 44°N; 144°E to 145°E.',43.33,44.0,144.0,145.0,0); INSERT INTO "extent" VALUES('EPSG','2437','Japan - north of 43°20''N; 145°E to 146°E','Japan - onshore north of 43°20''N and west of 145°E.',43.33,44.4,145.0,145.87,0); INSERT INTO "extent" VALUES('EPSG','2438','Japan - 42°40''N to 43°25''N; 140°E to 141°E','Japan - onshore 42°40''N to 43°25''N; 140°E to 141°E.',42.66,43.42,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2439','Japan - 42°40''N to 43°20''N; 141°E to 142°E','Japan - 42°40''N to 43°20''N; 141°E to 142°E.',42.66,43.34,141.0,142.0,0); INSERT INTO "extent" VALUES('EPSG','2440','Japan - 42°40''N to 43°20''N; 142°E to 143°E','Japan - 42°40''N to 43°20''N; 142°E to 143°E.',42.66,43.34,142.0,143.0,0); INSERT INTO "extent" VALUES('EPSG','2441','Japan - 42°40''N to 43°20''N; 143°E to 144°E','Japan - 42°40''N to 43°20''N; 143°E to 144°E.',42.66,43.34,143.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2442','Japan - 42°40''N to 43°20''N; 144°E to 145°E','Japan - onshore 42°40''N to 43°20''N; 144°E to 145°E.',42.84,43.34,144.0,145.0,0); INSERT INTO "extent" VALUES('EPSG','2443','Japan - 42°40''N to 43°20''N; 145°E to 146°E','Japan - onshore 42°40''N to 43°20''N; 145°E to 146°E.',42.93,43.34,145.0,145.87,0); INSERT INTO "extent" VALUES('EPSG','2444','Japan - north of 42°N; west of 140°E','Japan - onshore mainland north of 42°N and west of 140°E.',42.05,42.73,139.7,140.0,0); INSERT INTO "extent" VALUES('EPSG','2445','Japan - 42°N to 42°40''N; 140°E to 141°E','Japan - 42°N to 42°40''N; 140°E to 141°E.',41.99,42.67,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2446','Japan - 42°N to 42°40''N; 141°E to 142°E','Japan - onshore 42°N to 42°40''N; 141°E to 142°E.',42.24,42.67,141.0,142.0,0); INSERT INTO "extent" VALUES('EPSG','2447','Japan - 42°N to 42°40''N; 142°E to 143°E','Japan - onshore 42°N to 42°40''N; 142°E to 143°E.',42.02,42.67,142.0,143.0,0); INSERT INTO "extent" VALUES('EPSG','2448','Japan - south of 42°40''N; 143°E to 144°E','Japan - onshore south of 42°40''N; east of 143°E.',41.87,42.67,143.0,143.76,0); INSERT INTO "extent" VALUES('EPSG','2449','Japan - 41°20''N to 42°N; west of 141°E','Japan - onshore mainland 41°20''N to 42°N; west of 141°E.',41.33,42.0,139.91,141.0,0); INSERT INTO "extent" VALUES('EPSG','2450','Japan - 41°20''N to 42°N; 141°E to 142°E','Japan - onshore 41°20''N to 42°N; 141°E to 142°E.',41.33,41.96,141.0,141.53,0); INSERT INTO "extent" VALUES('EPSG','2451','Japan - 40°40''N to 41°20''N; 140°E to 141°E','Japan - 40°40''N to 41°20''N; 140°E to 141°E.',40.66,41.34,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2452','Japan - 40°40''N to 41°20''N; 141°E to 142°E','Japan - onshore 40°40''N to 41°20''N; 141°E to 142°E.',40.66,41.34,141.0,141.53,0); INSERT INTO "extent" VALUES('EPSG','2453','Japan - 40°N to 40°48''N; 139°E to 140°E','Japan - onshore 40°N to 40°48''N; 139°E to 140°E.',39.99,40.8,139.63,140.0,0); INSERT INTO "extent" VALUES('EPSG','2454','Japan - 40°N to 40°40''N; 140°E to 141°E','Japan - 40°N to 40°40''N; 140°E to 141°E.',39.99,40.67,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2455','Japan - 40°N to 40°40''N; 141°E to 142°E','Japan - 40°N to 40°40''N; 141°E to 142°E.',39.99,40.67,141.0,142.0,0); INSERT INTO "extent" VALUES('EPSG','2456','Japan - 39°20''N to 40°N; 139°E to 140°E','Japan - onshore 39°20''N to 40°N; 139°E to 140°E.',39.33,40.0,139.63,140.0,0); INSERT INTO "extent" VALUES('EPSG','2457','Japan - 39°20''N to 40°N; 140°E to 141°E','Japan - 39°20''N to 40°N; 140°E to 141°E.',39.33,40.0,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2458','Japan - 39°20''N to 40°N; east of 141°E','Japan - onshore 39°20''N to 40°N; east of 141°E.',39.33,40.0,141.0,142.14,0); INSERT INTO "extent" VALUES('EPSG','2459','Japan - 38°40''N to 39°20''N; 139°E to 140°E','Japan - onshore 38°40''N to 39°20''N; 139°E to 140°E.',38.66,39.34,139.55,140.0,0); INSERT INTO "extent" VALUES('EPSG','2460','Japan - 38°40''N to 39°20''N; 140°E to 141°E','Japan - 38°40''N to 39°20''N; 140°E to 141°E.',38.66,39.34,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2461','Japan - 38°40''N to 39°20''N; 141°E to 142°E','Japan - onshore 38°40''N to 39°20''N; 141°E to 142°E.',38.66,39.34,141.0,141.99,0); INSERT INTO "extent" VALUES('EPSG','2462','Japan - 38°N to 38°40''N; 139°E to 140°E','Japan - onshore 38°N to 38°40''N; 139°E to 140°E.',37.99,38.67,139.11,140.0,0); INSERT INTO "extent" VALUES('EPSG','2463','Japan - 38°N to 38°40''N; 140°E to 141°E','Japan - 38°N to 38°40''N; 140°E to 141°E.',37.99,38.67,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2464','Japan - 38°N to 38°40''N; 141°E to 142°E','Japan - onshore 38°N to 38°40''N; 141°E to 142°E.',38.08,38.67,141.0,141.62,0); INSERT INTO "extent" VALUES('EPSG','2465','Japan - 37°20''N to 38°N; 136°E to 137°E','Japan - onshore 37°20''N to 38°N; 136°E to 137°E.',37.33,37.47,136.67,137.0,0); INSERT INTO "extent" VALUES('EPSG','2466','Japan - 37°20''N to 38°N; 137°E to 138°E','Japan - onshore 37°20''N to 38°N; 137°E to 138°E.',37.33,37.58,137.0,137.43,0); INSERT INTO "extent" VALUES('EPSG','2467','Japan - 37°20''N to 38°N; 138°E to 139°E','Japan - onshore mainland 37°20''N to 38°N; 138°E to 139°E.',37.33,37.97,138.39,139.0,0); INSERT INTO "extent" VALUES('EPSG','2468','Japan - 37°20''N to 38°N; 139°E to 140°E','Japan - 37°20''N to 38°N; 139°E to 140°E.',37.33,38.0,139.0,140.0,0); INSERT INTO "extent" VALUES('EPSG','2469','Japan - 37°20''N to 38°N; 140°E to 141°E','Japan - 37°20''N to 38°N; 140°E to 141°E.',37.33,38.0,140.0,141.0,0); INSERT INTO "extent" VALUES('EPSG','2470','Japan - 37°20''N to 38°N; 141°E to 142°E','Japan - onshore 37°20''N to 38°N; 141°E to 142°E.',37.33,37.87,141.0,141.11,0); INSERT INTO "extent" VALUES('EPSG','2471','Japan - 36°40''N to 37°20''N; 136°E to 137°E','Japan - onshore 36°40''N to 37°20''N; 136°E to 137°E.',36.66,37.34,136.58,137.0,0); INSERT INTO "extent" VALUES('EPSG','2472','Japan - 36°40''N to 37°20''N; 137°E to 138°E','Japan - 36°40''N to 37°20''N; 137°E to 138°E.',36.66,37.34,137.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2473','Japan - 36°40''N to 37°20''N; 138°E to 139°E','Japan - 36°40''N to 37°20''N; 138°E to 139°E.',36.66,37.34,138.0,139.0,0); INSERT INTO "extent" VALUES('EPSG','2474','Japan - 36°40''N to 37°20''N; 139°E to 140°E','Japan - 36°40''N to 37°20''N; 139°E to 140°E.',36.66,37.34,139.0,140.0,0); INSERT INTO "extent" VALUES('EPSG','2475','Japan - 36°40''N to 37°20''N; east of 140°E','Japan - onshore between 36°40''N and 37°20''N; east of 140°E.',36.66,37.34,140.0,141.1,0); INSERT INTO "extent" VALUES('EPSG','2476','Japan - 36°N to 36°40''N; west of137°E','Japan - onshore between 36°N and 36°40''N; west of 137°E.',35.99,36.67,135.9,137.0,0); INSERT INTO "extent" VALUES('EPSG','2477','Japan - 36°N to 36°40''N; 137°E to 138°E','Japan - 36°N to 36°40''N; 137°E to 138°E.',35.99,36.67,137.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2478','Japan - 36°N to 36°40''N; 138°E to 139°E','Japan - 36°N to 36°40''N; 138°E to 139°E.',35.99,36.67,138.0,139.0,0); INSERT INTO "extent" VALUES('EPSG','2479','Japan - 36°N to 36°40''N; 139°E to 140°E','Japan - 36°N to 36°40''N; 139°E to 140°E.',35.99,36.67,139.0,140.0,0); INSERT INTO "extent" VALUES('EPSG','2480','Japan - 36°N to 36°40''N; 140°E to 141°E','Japan - onshore 36°N to 36°40''N; 140°E to 141°E.',35.99,36.67,140.0,140.77,0); INSERT INTO "extent" VALUES('EPSG','2481','Japan - 35°20''N to 36°N; 132°E to 133°E','Japan - onshore mainland 35°20''N to 36°N; 132°E to 133°E.',35.33,35.58,132.56,133.0,0); INSERT INTO "extent" VALUES('EPSG','2482','Japan - 35°20''N to 36°N; 133°E to 134°E','Japan - onshore mainland 35°20''N to 36°N; 133°E to 134°E.',35.33,35.64,133.0,134.0,0); INSERT INTO "extent" VALUES('EPSG','2483','Japan - 35°20''N to 36°N; 134°E to 135°E','Japan - onshore 35°20''N to 36°N; 134°E to 135°E.',35.33,35.73,134.0,135.0,0); INSERT INTO "extent" VALUES('EPSG','2484','Japan - 35°20''N to 36°N; 135°E to 136°E','Japan - 35°20''N to 36°N; 135°E to 136°E.',35.33,36.0,135.0,136.0,0); INSERT INTO "extent" VALUES('EPSG','2485','Japan - 35°20''N to 36°N; 136°E to 137°E','Japan - 35°20''N to 36°N; 136°E to 137°E.',35.33,36.0,136.0,137.0,0); INSERT INTO "extent" VALUES('EPSG','2486','Japan - 35°20''N to 36°N; 137°E to 138°E','Japan - 35°20''N to 36°N; 137°E to 138°E.',35.33,36.0,137.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2487','Japan - 35°20''N to 36°N; 138°E to 139°E','Japan - 35°20''N to 36°N; 138°E to 139°E.',35.33,36.0,138.0,139.0,0); INSERT INTO "extent" VALUES('EPSG','2488','Japan - 35°20''N to 36°N; 139°E to 140°E','Japan - 35°20''N to 36°N; 139°E to 140°E.',35.33,36.0,139.0,140.0,0); INSERT INTO "extent" VALUES('EPSG','2489','Japan - 35°20''N to 36°N; 140°E to 141°E','Japan - onshore 35°20''N to 36°N; 140°E to 141°E.',35.33,36.0,140.0,140.9,0); INSERT INTO "extent" VALUES('EPSG','2490','Japan - 34°40''N to 35°20''N; 132°E to 133°E','Japan - 34°40''N to 35°20''N; 132°E to 133°E.',34.66,35.34,132.0,133.0,0); INSERT INTO "extent" VALUES('EPSG','2491','Japan - 34°40''N to 35°20''N; 133°E to 134°E','Japan - 34°40''N to 35°20''N; 133°E to 134°E.',34.66,35.34,133.0,134.0,0); INSERT INTO "extent" VALUES('EPSG','2492','Japan - 34°40''N to 35°20''N; 134°E to 135°E','Japan - 34°40''N to 35°20''N; 134°E to 135°E.',34.66,35.34,134.0,135.0,0); INSERT INTO "extent" VALUES('EPSG','2493','Japan - 34°40N'' to 35°20''N; 135°E to 136°E','Japan - 34°40N'' to 35°20''N; 135°E to 136°E.',34.66,35.34,135.0,136.0,0); INSERT INTO "extent" VALUES('EPSG','2494','Japan - 34°40''N to 35°20''N; 136°E to 137°E','Japan - 34°40''N to 35°20''N; 136°E to 137°E.',34.66,35.34,136.0,137.0,0); INSERT INTO "extent" VALUES('EPSG','2495','Japan - 34°40''N to 35°20''N; 137°E to 138°E','Japan - 34°40''N to 35°20''N; 137°E to 138°E.',34.66,35.34,137.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2496','Japan - 34°40''N to 35°20''N; 138°E to 139°E','Japan - 34°40''N to 35°20''N; 138°E to 139°E.',34.66,35.34,138.0,139.0,0); INSERT INTO "extent" VALUES('EPSG','2497','Japan - 34°40''N to 35°20''N; 139°E to 140°E','Japan - onshore mainland 34°40''N to 35°20''N; 139°E to 140°E.',34.66,35.34,139.0,140.0,0); INSERT INTO "extent" VALUES('EPSG','2498','Japan - 34°40''N to 35°20''N; 140°E to 141°E','Japan - onshore 34°40''N to 35°20''N; 140°E to 141°E.',34.87,35.34,140.0,140.48,0); INSERT INTO "extent" VALUES('EPSG','2499','Japan - 34°N to 34°40''N; 130°E to 131°E','Japan - onshore 34°N to 34°40''N; 130°E to 131°E.',33.99,34.48,130.81,131.0,0); INSERT INTO "extent" VALUES('EPSG','2500','Japan - north of 34°N; 131°E to 132°E','Japan - onshore north of 34°N; between 131°E and 132°E.',33.99,34.9,131.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2501','Japan - 34°N to 34°40''N; 132°E to 133°E','Japan - 34°N to 34°40''N; 132°E to 133°E.',33.99,34.67,132.0,133.0,0); INSERT INTO "extent" VALUES('EPSG','2502','Japan - 34°N to 34°40''N; 133°E to 134°E','Japan - 34°N to 34°40''N; 133°E to 134°E.',33.99,34.67,133.0,134.0,0); INSERT INTO "extent" VALUES('EPSG','2503','Japan - 34°N to 34°40''N; 134°E to 135°E','Japan - 34°N to 34°40''N; 134°E to 135°E.',33.99,34.67,134.0,135.0,0); INSERT INTO "extent" VALUES('EPSG','2504','Japan - 34°N to 34°40''N; 135°E to 136°E','Japan - 34°N to 34°40''N; 135°E to 136°E.',33.99,34.67,135.0,136.0,0); INSERT INTO "extent" VALUES('EPSG','2505','Japan - 34°N to 34°40''N; 136°E to 137°E','Japan - 34°N to 34°40''N; 136°E to 137°E.',33.99,34.67,136.0,137.0,0); INSERT INTO "extent" VALUES('EPSG','2506','Japan - 34°N to 34°40''N; 137°E to 138°E','Japan - onshore 34°N to 34°40''N; 137°E to 138°E.',34.51,34.67,137.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2507','Japan - 34°N to 34°40''N; 138°E to 139°E','Japan - onshore 34°N to 34°40''N; 138°E to 139°E.',34.54,34.67,138.0,139.0,0); INSERT INTO "extent" VALUES('EPSG','2508','Japan - 33°20''N to 34°N; 129°E to 130°E','Japan - onshore mainland 33°20''N to 34°N; 129°E to 130°E.',33.33,33.59,129.38,130.0,0); INSERT INTO "extent" VALUES('EPSG','2509','Japan - 33°20''N to 34°N; 130°E to 131°E','Japan - onshore mainland 33°20''N to 34°N; 130°E to 131°E.',33.33,34.0,130.0,131.0,0); INSERT INTO "extent" VALUES('EPSG','2510','Japan - 33°20''N to 34°N; 131°E to 132°E','Japan - 33°20''N to 34°N; 131°E to 132°E.',33.33,34.0,131.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2511','Japan - 33°20''N to 34°N; 132°E to 133°E','Japan - 33°20''N to 34°N; 132°E to 133°E.',33.33,34.0,132.0,133.0,0); INSERT INTO "extent" VALUES('EPSG','2512','Japan - 33°20''N to 34°N; 133°E to 134°E','Japan - 33°20''N to 34°N; 133°E to 134°E.',33.33,34.0,133.0,134.0,0); INSERT INTO "extent" VALUES('EPSG','2513','Japan - 33°20''N to 34°N; 134°E to 135°E','Japan - onshore 33°20''N to 34°N; 134°E to 135°E.',33.33,34.0,134.0,134.81,0); INSERT INTO "extent" VALUES('EPSG','2514','Japan - 33°20''N to 34°N; 135°E to 136°E','Japan - onshore 33°20''N to 34°N; 135°E to 136°E.',33.4,34.0,135.0,136.0,0); INSERT INTO "extent" VALUES('EPSG','2515','Japan - 33°20''N to 34°N; 136°E to 137°E','Japan - onshore 33°20''N to 34°N; 136°E to 137°E.',33.54,34.0,136.0,136.34,0); INSERT INTO "extent" VALUES('EPSG','2516','Japan - 32°40''N to 33°20''N; 129°E to 130°E','Japan - onshore mainland 32°40''N to 33°20''N; 129°E to 130°E.',32.51,33.34,129.3,130.0,0); INSERT INTO "extent" VALUES('EPSG','2517','Japan - 32°40''N to 33°20''N; 130°E to 131°E','Japan - 32°40''N to 33°20''N; 130°E to 131°E.',32.66,33.34,130.0,131.0,0); INSERT INTO "extent" VALUES('EPSG','2518','Japan - 32°40''N to 33°20''N; 131°E to 132°E','Japan - 32°40''N to 33°20''N; 131°E to 132°E.',32.66,33.34,131.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2519','Japan - 32°40''N to 33°20''N; 132°E to 133°E','Japan - onshore mainland 32°40''N to 33°20''N; 132°E to 133°E.',32.69,33.34,132.0,133.0,0); INSERT INTO "extent" VALUES('EPSG','2520','Japan - 32°40''N to 33°20''N; 133°E to 134°E','Japan - onshore 32°40''N to 33°20''N; 133°E to 134°E.',32.7,33.34,133.0,134.0,0); INSERT INTO "extent" VALUES('EPSG','2521','Japan - 32°40''N to 33°20''N; 134°E to 135°E','Japan - onshore 32°40''N to 33°20''N; 134°E to 135°E.',33.19,33.34,134.0,134.27,0); INSERT INTO "extent" VALUES('EPSG','2522','Japan - 32°N to 32°40''N; 129°54''E to 131°E','Japan - onshore 32°N to 32°40''N; 129°54''E to 131°E.',31.99,32.67,129.89,131.0,0); INSERT INTO "extent" VALUES('EPSG','2523','Japan - 32°N to 32°40''N; 131°E to 132°E','Japan - onshore 32°N to 32°40''N; 131°E to 132°E.',31.99,32.67,131.0,131.91,0); INSERT INTO "extent" VALUES('EPSG','2524','Japan - 31°20''N to 32°N; 130°E to 131°E','Japan - onshore mainland 31°20''N to 32°N; 130°E to 131°E.',31.33,32.0,130.1,131.0,0); INSERT INTO "extent" VALUES('EPSG','2525','Japan - 31°20''N to 32°N; 131°E to 132°E','Japan - onshore 31°20''N to 32°N; 131°E to 132°E.',31.33,32.0,131.0,131.55,0); INSERT INTO "extent" VALUES('EPSG','2526','Japan - onshore mainland south of 31°20''N','Japan - onshore mainland south of 31°20''N.',30.94,31.34,130.14,131.19,0); INSERT INTO "extent" VALUES('EPSG','2527','USA - Texas - SPCS83 - SC','United States (USA) - Texas - counties of Aransas; Atascosa; Austin; Bandera; Bee; Bexar; Brazoria; Brewster; Caldwell; Calhoun; Chambers; Colorado; Comal; De Witt; Dimmit; Edwards; Fayette; Fort Bend; Frio; Galveston; Goliad; Gonzales; Guadalupe; Harris; Hays; Jackson; Jefferson; Karnes; Kendall; Kerr; Kinney; La Salle; Lavaca; Live Oak; Matagorda; Maverick; McMullen; Medina; Presidio; Real; Refugio; Terrell; Uvalde; Val Verde; Victoria; Waller; Wharton; Wilson; Zavala.',27.78,30.67,-105.0,-93.76,0); INSERT INTO "extent" VALUES('EPSG','2528','USA - Texas - SPCS83 - S','United States (USA) - Texas - counties of Brooks; Cameron; Duval; Hidalgo; Jim Hogg; Jim Wells; Kenedy; Kleberg; Nueces; San Patricio; Starr; Webb; Willacy; Zapata.',25.83,28.21,-100.2,-96.85,0); INSERT INTO "extent" VALUES('EPSG','2529','USA - Louisiana - SPCS83 - S','United States (USA) - Louisiana - counties of Acadia; Allen; Ascension; Assumption; Beauregard; Calcasieu; Cameron; East Baton Rouge; East Feliciana; Evangeline; Iberia; Iberville; Jefferson; Jefferson Davis; Lafayette; LaFourche; Livingston; Orleans; Plaquemines; Pointe Coupee; St Bernard; St Charles; St Helena; St James; St John the Baptist; St Landry; St Martin; St Mary; St Tammany; Tangipahoa; Terrebonne; Vermilion; Washington; West Baton Rouge; West Feliciana.',28.85,31.07,-93.94,-88.75,0); INSERT INTO "extent" VALUES('EPSG','2530','UK - Northern Ireland - onshore','United Kingdom (UK) - Northern Ireland (Ulster) - onshore.',53.96,55.36,-8.18,-5.34,0); INSERT INTO "extent" VALUES('EPSG','2531','Denmark - onshore Jutland and Funen','Denmark - Jutland and Funen - onshore.',54.67,57.8,8.0,11.29,0); INSERT INTO "extent" VALUES('EPSG','2532','Denmark - onshore Zealand and Lolland','Denmark - Zealand and Lolland (onshore).',54.51,56.79,10.79,12.87,0); INSERT INTO "extent" VALUES('EPSG','2533','Denmark - onshore Bornholm','Denmark - Bornholm onshore.',54.94,55.38,14.59,15.25,0); INSERT INTO "extent" VALUES('EPSG','2534','World - N hemisphere - 3-degree CM 027°E','Between 25°30''E and 28°30''E, northern hemisphere.',0.0,84.0,25.5,28.5,0); INSERT INTO "extent" VALUES('EPSG','2535','World - N hemisphere - 3-degree CM 030°E','Between 28°30''E and 31°30''E, northern hemisphere.',0.0,84.0,28.5,31.5,0); INSERT INTO "extent" VALUES('EPSG','2536','World - N hemisphere - 3-degree CM 033°E','Between 31°30''E and 34°30''E, northern hemisphere.',0.0,84.0,31.5,34.5,0); INSERT INTO "extent" VALUES('EPSG','2537','World - N hemisphere - 3-degree CM 036°E','Between 34°30''E and 37°30''E, northern hemisphere.',0.0,84.0,34.5,37.5,0); INSERT INTO "extent" VALUES('EPSG','2538','World - N hemisphere - 3-degree CM 039°E','Between 37°30''E and 40°30''E, northern hemisphere.',0.0,84.0,37.5,40.5,0); INSERT INTO "extent" VALUES('EPSG','2539','World - N hemisphere - 3-degree CM 042°E','Between 40°30''E and 43°30''E, northern hemisphere.',0.0,84.0,40.5,43.5,0); INSERT INTO "extent" VALUES('EPSG','2540','World - N hemisphere - 3-degree CM 045°E','Between 43°30''E and 46°30''E, northern hemisphere.',0.0,84.0,43.5,46.5,0); INSERT INTO "extent" VALUES('EPSG','2541','Germany - West Germany N','Germany - states of former West Germany - onshore north of 52°20''N.',52.33,55.09,6.56,11.59,0); INSERT INTO "extent" VALUES('EPSG','2542','Germany - West Germany C','Germany - states of former West Germany - between 50°20''N and 52°20''N.',50.33,52.34,5.86,12.03,0); INSERT INTO "extent" VALUES('EPSG','2543','Germany - West Germany S','Germany - states of former West Germany - south of 50°20''N.',47.27,50.34,6.11,13.84,0); INSERT INTO "extent" VALUES('EPSG','2544','Germany - Thuringen','Germany - Thuringen.',50.2,51.65,9.87,12.66,0); INSERT INTO "extent" VALUES('EPSG','2545','Germany - Saxony','Germany - Sachsen.',50.2,51.66,11.89,15.04,0); INSERT INTO "extent" VALUES('EPSG','2546','Romania - offshore','Romania - offshore.',43.44,45.2,28.64,31.41,0); INSERT INTO "extent" VALUES('EPSG','2547','Serbia and Montenegro - Montenegro','Serbia and Montenegro - Montenegro.',41.82,43.53,18.44,20.37,1); INSERT INTO "extent" VALUES('EPSG','2548','Africa - AOF west of 10°W','French West Africa onshore west of 10°W - Guinea, Mali, Mauritania, Senegal.',8.29,26.01,-17.59,-10.0,0); INSERT INTO "extent" VALUES('EPSG','2549','Africa - AOF 10°W to 3.5°W','French West Africa between 10°W and 3°30''W - Burkina Faso, Côte d''Ivoire (Ivory Coast), Guinea, Mali, Mauritania.',4.29,27.3,-10.0,-3.49,0); INSERT INTO "extent" VALUES('EPSG','2550','Africa - AOF 3.5°W to 4°E','French West Africa onshore between 3°30''W and 4°E - Benin, Burkina Faso, Côte d''Ivoire (Ivory Coast), Mali, Niger, Togo.',5.03,24.18,-3.5,4.0,0); INSERT INTO "extent" VALUES('EPSG','2551','Africa - AOF 4°E to 9°E','French West Africa between 4°E and 9°E - Mali, Niger.',12.82,21.79,4.0,9.0,0); INSERT INTO "extent" VALUES('EPSG','2552','Africa - AEF 9°E to 14°E','French Equatorial Africa onshore west of 14°E - Cameroon, Chad, Congo, Gabon, Niger - between 9°E and 14°E.',-5.06,23.53,8.45,14.0,0); INSERT INTO "extent" VALUES('EPSG','2553','Africa - AEF 14°E to 21°E','French Equatorial Africa between 14°E and 21°E - Cameroon, Central African Republic, Chad, Congo, Gabon, Niger.',-4.91,23.46,14.0,21.0,0); INSERT INTO "extent" VALUES('EPSG','2554','Africa - AEF east of 21°E','French Equatorial Africa east of 21°E - Central African Republic, Chad.',4.12,21.06,21.0,27.46,0); INSERT INTO "extent" VALUES('EPSG','2555','Cameroon - coastal area','Cameroon - coastal area.',2.16,4.99,8.45,10.4,0); INSERT INTO "extent" VALUES('EPSG','2556','Greenland - north of 81°N','Greenland - onshore north of 81°N.',81.0,83.67,-65.06,-11.81,0); INSERT INTO "extent" VALUES('EPSG','2557','Greenland - east - 78°N to 81°N','Greenland - east of 44°W and between 78°N and 81°N, onshore.',78.0,81.0,-44.0,-14.33,0); INSERT INTO "extent" VALUES('EPSG','2558','Greenland - east - 75°N to 78°N','Greenland - east of 44°W and between 75°N and 78°N, onshore.',75.0,78.0,-44.0,-17.12,0); INSERT INTO "extent" VALUES('EPSG','2559','Greenland - east - 72°N to 75°N','Greenland - east of 38°W and between 72°N and 75°N, onshore.',72.0,75.0,-38.0,-17.21,0); INSERT INTO "extent" VALUES('EPSG','2560','Greenland - east - 69°N to 72°N','Greenland - east of 38°W and between 69°N and 72°N, onshore.',69.0,72.0,-38.0,-21.32,0); INSERT INTO "extent" VALUES('EPSG','2561','Greenland - east - 66°N to 69°N','Greenland - east of 42°W and between 66°N and 69°N, onshore.',66.0,69.0,-42.0,-25.14,0); INSERT INTO "extent" VALUES('EPSG','2562','Greenland - east - 63°N to 66°N','Greenland - east of 46°W and between 63°N and 66°N, onshore.',63.0,66.0,-46.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','2563','Greenland - west - 78°N to 81°N','Greenland - west of 44°W and between 78°N and 81°N, onshore.',78.0,81.0,-73.29,-44.0,0); INSERT INTO "extent" VALUES('EPSG','2564','Greenland - west - 75°N to 78°N','Greenland - west of 44°W and between 75°N and 78°N, onshore.',75.0,78.0,-72.79,-44.0,0); INSERT INTO "extent" VALUES('EPSG','2565','Greenland - west - 72°N to 75°N','Greenland - west of 38°W and between 72°N and 75°N, onshore.',72.0,75.0,-58.21,-38.0,0); INSERT INTO "extent" VALUES('EPSG','2566','Greenland - west - 69°N to 72°N','Greenland - west of 38°W and between 69°N and 72°N, onshore.',69.0,72.0,-56.06,-38.0,0); INSERT INTO "extent" VALUES('EPSG','2567','Greenland - west - 66°N to 69°N','Greenland - west of 42°W and between 66°N and 69°N, onshore.',66.0,69.0,-54.09,-42.0,0); INSERT INTO "extent" VALUES('EPSG','2568','Greenland - west - 63°N to 66°N','Greenland - west of 46°W and between 63°N and 66°N, onshore.',63.0,66.0,-53.7,-46.0,0); INSERT INTO "extent" VALUES('EPSG','2569','Greenland - south of 63°N','Greenland - onshore south of 63°N.',59.74,63.0,-50.72,-41.33,0); INSERT INTO "extent" VALUES('EPSG','2570','Greenland - Scoresbysund area','Greenland - Scoresbysund area onshore.',68.66,74.58,-29.69,-19.89,0); INSERT INTO "extent" VALUES('EPSG','2571','Greenland - Ammassalik area','Greenland - Ammassalik area onshore.',65.52,65.91,-38.86,-36.81,0); INSERT INTO "extent" VALUES('EPSG','2572','Greenland - southwest coast east of 48°W','Greenland - southwest coast east of 48°W.',59.74,62.05,-48.0,-42.52,0); INSERT INTO "extent" VALUES('EPSG','2573','Greenland - southwest coast 54°W to 48°W','Greenland - southwest coast between 54°W and 48°W.',60.63,73.05,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','2574','Congo - coastal area and offshore','Congo - coastal area and offshore.',-6.91,-3.55,8.84,12.34,0); INSERT INTO "extent" VALUES('EPSG','2575','Australia - onshore','Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Tasmania; Western Australia; Victoria.',-43.7,-9.86,112.85,153.69,0); INSERT INTO "extent" VALUES('EPSG','2576','Australia - AGD84','Australia - Queensland, South Australia, Western Australia, federal areas offshore west of 129°E.',-38.53,-9.37,109.23,153.61,0); INSERT INTO "extent" VALUES('EPSG','2577','Indonesia - Java Sea - offshore northwest Java','Indonesia - southern Java Sea offshore northwest Java.',-6.89,-4.07,105.77,110.01,0); INSERT INTO "extent" VALUES('EPSG','2578','Slovenia - upper Soca Valley','Slovenia - upper Soca Valley and Julian Alps.',46.16,46.49,13.38,13.87,0); INSERT INTO "extent" VALUES('EPSG','2579','Slovenia - Gorica','Slovenia - Gorica region including the Trnovo Forest, Nanos and Idrija Mountains.',45.77,46.18,13.47,14.11,0); INSERT INTO "extent" VALUES('EPSG','2580','Slovenia - upper Savinja','Slovenia - upper Savinja region with part of Koroska (Slovene Carinthia).',46.21,46.56,14.55,15.0,0); INSERT INTO "extent" VALUES('EPSG','2581','Slovenia - Suha Krajina','Slovenia - Suha Krajina with the Ribnica and Zuzemberk area.',45.66,45.89,14.57,15.08,0); INSERT INTO "extent" VALUES('EPSG','2582','Slovenia - Karst','Slovenia - The Karst with part of the Gorica area.',45.64,45.9,13.57,14.12,0); INSERT INTO "extent" VALUES('EPSG','2583','Slovenia - Littoral onshore','Slovenia - the Slovene Littoral with parts of the Karst and the Brkini Hills - onshore.',45.44,45.73,13.5,14.24,0); INSERT INTO "extent" VALUES('EPSG','2584','Slovenia - Bela Krajina','Slovenia - Bela Krajina including the broad region of Crnomelj and Metlika.',45.42,45.74,15.06,15.36,0); INSERT INTO "extent" VALUES('EPSG','2585','Slovenia - Pohorje','Slovenia - Pohorje with the Paski Kozjak and Konjiska Gora (Mountain).',46.28,46.58,15.15,15.54,0); INSERT INTO "extent" VALUES('EPSG','2586','Slovenia - lower Posavje','Slovenia - lower Posavje (the Sava Basin) with part of the Kozjansko region.',45.81,46.17,15.2,15.73,0); INSERT INTO "extent" VALUES('EPSG','2587','Slovenia - Maribor and Ptuj','Slovenia - Maribor and Ptuj with parts of the Kozjak range and the Slovenske Gorice (the Slovene Humpback).',46.33,46.74,15.44,16.0,0); INSERT INTO "extent" VALUES('EPSG','2588','Indonesia - Bali Sea west','Indonesia - offshore Madura Strait and western Bali Sea.',-8.46,-6.8,112.8,117.01,0); INSERT INTO "extent" VALUES('EPSG','2589','Indonesia - West Papua - Tangguh','Indonesia - West Papua (formerly Irian Jaya) - Tangguh.',-2.94,-1.97,131.89,133.82,0); INSERT INTO "extent" VALUES('EPSG','2590','Cameroon - Garoua area','Cameroon - Garoua area.',8.92,9.87,12.9,14.19,0); INSERT INTO "extent" VALUES('EPSG','2591','Cameroon - N''Djamena area','Cameroon - N''Djamena area.',11.7,12.77,14.17,15.09,0); INSERT INTO "extent" VALUES('EPSG','2592','Azerbaijan - offshore and Sangachal','Azerbaijan - Caspian offshore and onshore Sangachal terminal.',37.89,42.59,48.66,51.73,0); INSERT INTO "extent" VALUES('EPSG','2593','Asia - FSU - Azerbaijan and Georgia','Azerbaijan (including Caspian) and Georgia onshore.',37.89,43.59,39.99,51.73,0); INSERT INTO "extent" VALUES('EPSG','2594','Azerbaijan - coastal area Baku to Astara','Azerbaijan - coastal area Baku to Astara.',38.31,40.33,48.93,50.4,0); INSERT INTO "extent" VALUES('EPSG','2595','Egypt - Western Desert','Egypt - Western Desert.',25.71,31.68,24.7,30.0,0); INSERT INTO "extent" VALUES('EPSG','2596','Argentina - Tierra del Fuego offshore west of 66°W','Argentina - Tierra del Fuego offshore Atlantic west of 66°W.',-54.61,-51.65,-68.62,-66.0,0); INSERT INTO "extent" VALUES('EPSG','2597','Argentina - Tierra del Fuego offshore east of 66°W','Argentina - Tierra del Fuego offshore Atlantic east of 66°W.',-54.93,-51.36,-66.0,-61.49,0); INSERT INTO "extent" VALUES('EPSG','2598','Algeria - District 3','Algeria - District 3 (In Salah).',25.0,32.0,1.0,3.3,0); INSERT INTO "extent" VALUES('EPSG','2599','Algeria - In Amenas','Algeria - In Amenas block.',27.5,28.3,8.83,9.92,0); INSERT INTO "extent" VALUES('EPSG','2600','Algeria - Hassi Bir Reikaz','Algeria - Hassi Bir Reikaz.',31.75,32.42,7.16,8.0,0); INSERT INTO "extent" VALUES('EPSG','2601','Norway - offshore north of 62°N; Svalbard','Norway - offshore north of 62°N. Also Svalbard - onshore and offshore.',62.0,84.73,-3.35,38.01,0); INSERT INTO "extent" VALUES('EPSG','2602','Palestine','Palestine Territory.',31.21,32.55,34.17,35.58,0); INSERT INTO "extent" VALUES('EPSG','2603','Asia - Middle East - Israel and Palestine Territory onshore','Israel - onshore; Palestine Territory - onshore.',29.45,33.28,34.17,35.69,0); INSERT INTO "extent" VALUES('EPSG','2604','World - N hemisphere - 3-degree CM 048°E','Between 46°30''E and 49°30''E, northern hemisphere.',0.0,84.0,46.5,49.5,0); INSERT INTO "extent" VALUES('EPSG','2605','World - N hemisphere - 3-degree CM 051°E','Between 49°30''E and 52°30''E, northern hemisphere.',0.0,84.0,49.5,52.5,0); INSERT INTO "extent" VALUES('EPSG','2606','World - N hemisphere - 3-degree CM 054°E','Between 52°30''E and 55°30''E, northern hemisphere.',0.0,84.0,52.5,55.5,0); INSERT INTO "extent" VALUES('EPSG','2607','World - N hemisphere - 3-degree CM 057°E','Between 55°30''E and 58°30''E, northern hemisphere.',0.0,84.0,55.5,58.5,0); INSERT INTO "extent" VALUES('EPSG','2608','World - N hemisphere - 3-degree CM 060°E','Between 58°30''E and 61°30''E, northern hemisphere.',0.0,84.0,58.5,61.5,0); INSERT INTO "extent" VALUES('EPSG','2609','World - N hemisphere - 3-degree CM 063°E','Between 61°30''E and 64°30''E, northern hemisphere.',0.0,84.0,61.5,64.5,0); INSERT INTO "extent" VALUES('EPSG','2610','World - N hemisphere - 3-degree CM 066°E','Between 64°30''E and 67°30''E, northern hemisphere.',0.0,84.0,64.5,67.5,0); INSERT INTO "extent" VALUES('EPSG','2611','World - N hemisphere - 3-degree CM 069°E','Between 67°30''E and 70°30''E, northern hemisphere.',0.0,84.0,67.5,70.5,0); INSERT INTO "extent" VALUES('EPSG','2612','World - N hemisphere - 3-degree CM 072°E','Between 70°30''E and 73°30''E, northern hemisphere.',0.0,84.0,70.5,73.5,0); INSERT INTO "extent" VALUES('EPSG','2613','World - N hemisphere - 3-degree CM 075°E','Between 73°30''E and 76°30''E, northern hemisphere.',0.0,84.0,73.5,76.5,0); INSERT INTO "extent" VALUES('EPSG','2614','World - N hemisphere - 3-degree CM 078°E','Between 76°30''E and 79°30''E, northern hemisphere.',0.0,84.0,76.5,79.5,0); INSERT INTO "extent" VALUES('EPSG','2615','World - N hemisphere - 3-degree CM 081°E','Between 79°30''E and 82°30''E, northern hemisphere.',0.0,84.0,79.5,82.5,0); INSERT INTO "extent" VALUES('EPSG','2616','World - N hemisphere - 3-degree CM 084°E','Between 82°30''E and 85°30''E, northern hemisphere.',0.0,84.0,82.5,85.5,0); INSERT INTO "extent" VALUES('EPSG','2617','World - N hemisphere - 3-degree CM 087°E','Between 85°30''E and 88°30''E, northern hemisphere.',0.0,84.0,85.5,88.5,0); INSERT INTO "extent" VALUES('EPSG','2618','World - N hemisphere - 3-degree CM 090°E','Between 88°30''E and 91°30''E, northern hemisphere.',0.0,84.0,88.5,91.5,0); INSERT INTO "extent" VALUES('EPSG','2619','World - N hemisphere - 3-degree CM 093°E','Between 91°30''E and 94°30''E, northern hemisphere.',0.0,84.0,91.5,94.5,0); INSERT INTO "extent" VALUES('EPSG','2620','World - N hemisphere - 3-degree CM 096°E','Between 94°30''E and 97°30''E, northern hemisphere.',0.0,84.0,94.5,97.5,0); INSERT INTO "extent" VALUES('EPSG','2621','World - N hemisphere - 3-degree CM 099°E','Between 97°30''E and 100°30''E, northern hemisphere.',0.0,84.0,97.5,100.5,0); INSERT INTO "extent" VALUES('EPSG','2622','World - N hemisphere - 3-degree CM 102°E','Between 100°30''E and 103°30''E, northern hemisphere.',0.0,84.0,100.5,103.5,0); INSERT INTO "extent" VALUES('EPSG','2623','World - N hemisphere - 3-degree CM 105°E','Between 103°30''E and 106°30''E, northern hemisphere.',0.0,84.0,103.5,106.5,0); INSERT INTO "extent" VALUES('EPSG','2624','World - N hemisphere - 3-degree CM 108°E','Between 106°30''E and 109°30''E, northern hemisphere.',0.0,84.0,106.5,109.5,0); INSERT INTO "extent" VALUES('EPSG','2625','World - N hemisphere - 3-degree CM 111°E','Between 109°30''Eand 112°30''E, northern hemisphere.',0.0,84.0,109.5,112.5,0); INSERT INTO "extent" VALUES('EPSG','2626','World - N hemisphere - 3-degree CM 114°E','Between 112°30''E and 115°30''E, northern hemisphere.',0.0,84.0,112.5,115.5,0); INSERT INTO "extent" VALUES('EPSG','2627','World - N hemisphere - 3-degree CM 117°E','Between 115°30''E and 118°30''E, northern hemisphere.',0.0,84.0,115.5,118.5,0); INSERT INTO "extent" VALUES('EPSG','2628','World - N hemisphere - 3-degree CM 120°E','Between 118°30''E and 121°30''E, northern hemisphere.',0.0,84.0,118.5,121.5,0); INSERT INTO "extent" VALUES('EPSG','2629','World - N hemisphere - 3-degree CM 123°E','Between 121°30''E and 124°30''E, northern hemisphere.',0.0,84.0,121.5,124.5,0); INSERT INTO "extent" VALUES('EPSG','2630','World - N hemisphere - 3-degree CM 126°E','Between 124°30''E and 127°30''E, northern hemisphere.',0.0,84.0,124.5,127.5,0); INSERT INTO "extent" VALUES('EPSG','2631','World - N hemisphere - 3-degree CM 129°E','Between 127°30''E and 130°30''E, northern hemisphere.',0.0,84.0,127.5,130.5,0); INSERT INTO "extent" VALUES('EPSG','2632','World - N hemisphere - 3-degree CM 132°E','Between 130°30''E and 133°30''E, northern hemisphere.',0.0,84.0,130.5,133.5,0); INSERT INTO "extent" VALUES('EPSG','2633','World - N hemisphere - 3-degree CM 135°E','Between 133°30''E and 136°30''E, northern hemisphere.',0.0,84.0,133.5,136.5,0); INSERT INTO "extent" VALUES('EPSG','2634','World - N hemisphere - 3-degree CM 138°E','Between 136°30''E and 139°30''E, northern hemisphere.',0.0,84.0,136.5,139.5,0); INSERT INTO "extent" VALUES('EPSG','2635','World - N hemisphere - 3-degree CM 141°E','Between 139°30''E and 142°30''E, northern hemisphere.',0.0,84.0,139.5,142.5,0); INSERT INTO "extent" VALUES('EPSG','2636','World - N hemisphere - 3-degree CM 144°E','Between 142°30''E and 145°30''E, northern hemisphere.',0.0,84.0,142.5,145.5,0); INSERT INTO "extent" VALUES('EPSG','2637','World - N hemisphere - 3-degree CM 147°E','Between 145°30''E and 148°30''E, northern hemisphere.',0.0,84.0,145.5,148.5,0); INSERT INTO "extent" VALUES('EPSG','2638','World - N hemisphere - 3-degree CM 150°E','Between 148°30''E and 151°30''E, northern hemisphere.',0.0,84.0,148.5,151.5,0); INSERT INTO "extent" VALUES('EPSG','2639','World - N hemisphere - 3-degree CM 153°E','Between 151°30''E and 154°30''E, northern hemisphere.',0.0,84.0,151.5,154.5,0); INSERT INTO "extent" VALUES('EPSG','2640','World - N hemisphere - 3-degree CM 156°E','Between 154°30''E and 157°30''E, northern hemisphere.',0.0,84.0,154.5,157.5,0); INSERT INTO "extent" VALUES('EPSG','2641','World - N hemisphere - 3-degree CM 159°E','Between 157°30''E and 160°30''E, northern hemisphere.',0.0,84.0,157.5,160.5,0); INSERT INTO "extent" VALUES('EPSG','2642','World - N hemisphere - 3-degree CM 162°E','Between 160°30''E and 163°30''E, northern hemisphere.',0.0,84.0,160.5,163.5,0); INSERT INTO "extent" VALUES('EPSG','2643','World - N hemisphere - 3-degree CM 165°E','Between 163°30''E and 166°30''E, northern hemisphere.',0.0,84.0,163.5,166.5,0); INSERT INTO "extent" VALUES('EPSG','2644','World - N hemisphere - 3-degree CM 168°E','Between 166°30''E and 169°30''E, northern hemisphere.',0.0,84.0,166.5,169.5,0); INSERT INTO "extent" VALUES('EPSG','2645','World - N hemisphere - 3-degree CM 171°E','Between 169°30''E and 172°30''E, northern hemisphere.',0.0,84.0,169.5,172.5,0); INSERT INTO "extent" VALUES('EPSG','2646','World - N hemisphere - 3-degree CM 174°E','Between 172°30''E and 175°30''E, northern hemisphere.',0.0,84.0,172.5,175.5,0); INSERT INTO "extent" VALUES('EPSG','2647','World - N hemisphere - 3-degree CM 177°E','Between 175°30''E and 178°30''E, northern hemisphere.',0.0,84.0,175.5,178.5,0); INSERT INTO "extent" VALUES('EPSG','2648','World - N hemisphere - 3-degree CM 180°E','Between 178°30''E and 178°30''W, northern hemisphere.',0.0,84.0,178.5,-178.5,0); INSERT INTO "extent" VALUES('EPSG','2649','World - N hemisphere - 3-degree CM 177°W','Between 178°30''W and 175°30''W, northern hemisphere.',0.0,84.0,-178.5,-175.5,0); INSERT INTO "extent" VALUES('EPSG','2650','World - N hemisphere - 3-degree CM 174°W','Between 175°30''W and 172°30''W, northern hemisphere.',0.0,84.0,-175.5,-172.5,0); INSERT INTO "extent" VALUES('EPSG','2651','World - N hemisphere - 3-degree CM 171°W','Between 172°30''W and 169°30''W, northern hemisphere.',0.0,84.0,-172.5,-169.5,0); INSERT INTO "extent" VALUES('EPSG','2652','World - N hemisphere - 3-degree CM 168°W','Between 169°30''W and 166°30''W, northern hemisphere.',0.0,84.0,-169.5,-166.5,0); INSERT INTO "extent" VALUES('EPSG','2653','Europe - FSU - 19.5°E to 22.5°E onshore','Estonia, Latvia, Lithuania, Russian Federation (Kaliningrad) and Ukraine - onshore between 19°30''E and 22°30''E.',48.24,59.1,19.57,22.5,0); INSERT INTO "extent" VALUES('EPSG','2654','Europe - FSU - 22.5°E to 25.5°E onshore','Belarus, Estonia, Latvia, Lithuania, Russian Federation (Kaliningrad) and Ukraine - onshore between 22°30''E and 25°30''E.',47.71,59.75,22.5,25.5,0); INSERT INTO "extent" VALUES('EPSG','2655','Europe - FSU - 25.5°E to 28.5°E onshore','Belarus, Estonia, Latvia, Lithuania, Moldova, Russian Federation and Ukraine - onshore between 25°30''E and 28°30''E.',45.26,68.93,25.49,28.51,0); INSERT INTO "extent" VALUES('EPSG','2656','Europe - FSU - 28.5°E to 31.5°E onshore','Belarus, Moldova, Russian Federation and Ukraine - onshore between 28°30''E and 31°30''E.',45.18,69.85,28.5,31.5,0); INSERT INTO "extent" VALUES('EPSG','2657','Europe - FSU - 31.5°E to 34.5°E onshore','Belarus, Russian Federation and Ukraine - onshore between 31°30''E and 34°30''E.',44.32,70.02,31.5,34.5,0); INSERT INTO "extent" VALUES('EPSG','2658','Europe - FSU - 34.5°E to 37.5°E onshore','Russian Federation and Ukraine - onshore between 34°30''E and 37°30''E.',44.61,69.39,34.5,37.5,0); INSERT INTO "extent" VALUES('EPSG','2659','Europe - FSU - 37.5°E to 40.5°E onshore','Georgia, Russian Federation and Ukraine - onshore between 37°30''E and 40°30''E.',43.07,68.8,37.5,40.5,0); INSERT INTO "extent" VALUES('EPSG','2660','Europe - FSU - 40.5°E to 43.5°E onshore','Georgia, Russian Federation - onshore between 40°30''E and 43°30''E.',41.01,68.74,40.5,43.51,0); INSERT INTO "extent" VALUES('EPSG','2661','Europe - FSU - 43.5°E to 46.5°E onshore','Armenia, Azerbaijan, Georgia and Russian Federation onshore - between 43°30''E and 46°30''E.',38.84,80.8,43.5,46.5,0); INSERT INTO "extent" VALUES('EPSG','2662','Europe - FSU - 46.5°E to 49.5°E onshore','Azerbaijan, Georgia, Kazakhstan and Russian Federation onshore - between 46°30''E and 49°30''E.',38.31,80.91,46.5,49.5,0); INSERT INTO "extent" VALUES('EPSG','2663','Asia - FSU - 49.5°E to 52.5°E onshore','Azerbaijan, Kazakhstan and Russian Federation onshore - between 49°30''E and 52°30''E.',37.66,81.22,49.5,52.5,0); INSERT INTO "extent" VALUES('EPSG','2664','Asia - FSU - 52.5°E to 55.5°E onshore','Kazakhstan, Russian Federation onshore and Turkmenistan - between 52°30''E and 55°30''E.',37.33,81.41,52.5,55.5,0); INSERT INTO "extent" VALUES('EPSG','2665','Asia - FSU - 55.5°E to 58.5°E onshore','Kazakhstan, Russian Federation onshore, Turkmenistan and Uzbekistan - between 55°30''E and 58°30''E.',37.64,81.89,55.5,58.5,0); INSERT INTO "extent" VALUES('EPSG','2666','Asia - FSU - 58.5°E to 61.5°E onshore','Kazakhstan, Russian Federation onshore, Turkmenistan and Uzbekistan - between 58°30''E and 61°30''E.',35.51,81.91,58.5,61.5,0); INSERT INTO "extent" VALUES('EPSG','2667','Asia - FSU - 61.5°E to 64.5°E onshore','Kazakhstan, Russian Federation onshore, Turkmenistan and Uzbekistan - between 61°30''E and 64°30''E.',35.14,81.77,61.5,64.5,0); INSERT INTO "extent" VALUES('EPSG','2668','Asia - FSU - 64.5°E to 67.5°E onshore','Kazakhstan, Russian Federation onshore, Tajikistan, Turkmenistan and Uzbekistan - between 64°30''E and 67°30''E.',36.27,81.25,64.5,67.5,0); INSERT INTO "extent" VALUES('EPSG','2669','Asia - FSU - 67.5°E to 70.5°E onshore','Kazakhstan, Kyrgyzstan, Russian Federation onshore, Tajikistan and Uzbekistan - between 67°30''E and 70°30''E.',36.93,77.07,67.5,70.5,0); INSERT INTO "extent" VALUES('EPSG','2670','Asia - FSU - 70.5°E to 73.5°E onshore','Kazakhstan, Kyrgyzstan, Russian Federation onshore, Tajikistan and Uzbekistan - between 70°30''E and 73°30''E.',36.67,73.57,70.5,73.5,0); INSERT INTO "extent" VALUES('EPSG','2671','Asia - FSU - 73.5°E to 76.5°E onshore','Kazakhstan, Kyrgyzstan, Russian Federation onshore and Tajikistan - between 73°30''E and 76°30''E.',37.22,79.71,73.5,76.5,0); INSERT INTO "extent" VALUES('EPSG','2672','Asia - FSU - 76.5°E to 79.5°E onshore','Kazakhstan, Kyrgyzstan and Russian Federation onshore - between 76°30''E and 79°30''E.',40.44,81.03,76.5,79.5,0); INSERT INTO "extent" VALUES('EPSG','2673','Asia - FSU - 79.5°E to 82.5°E onshore','Kazakhstan, Kyrgyzstan and Russian Federation onshore - between 79°30''E and 82°30''E.',41.82,81.03,79.5,82.5,0); INSERT INTO "extent" VALUES('EPSG','2674','Asia - FSU - 82.5°E to 85.5°E onshore','Kazakhstan and Russian Federation onshore - between 82°30''E and 85°30''E.',45.11,77.56,82.5,85.5,0); INSERT INTO "extent" VALUES('EPSG','2675','Asia - FSU - 85.5°E to 88.5°E onshore','Kazakhstan and Russian Federation onshore - between 85°30''E and 88°30''E.',47.05,77.16,85.5,88.5,0); INSERT INTO "extent" VALUES('EPSG','2676','Russia - 88.5°E to 91.5°E onshore','Russian Federation - onshore between 88°30''E and 91°30''E.',49.44,81.28,88.5,91.5,0); INSERT INTO "extent" VALUES('EPSG','2677','Russia - 91.5°E to 94.5°E onshore','Russian Federation - onshore between 91°30''E and 94°30''E.',50.16,81.26,91.5,94.5,0); INSERT INTO "extent" VALUES('EPSG','2678','Russia - 94.5°E to 97.5°E onshore','Russian Federation - onshore between 94°30''E and 97°30''E.',49.73,81.35,94.5,97.5,0); INSERT INTO "extent" VALUES('EPSG','2679','Russia - 97.5°E to 100.5°E onshore','Russian Federation - onshore between 97°30''E and 100°30''E.',49.79,80.9,97.5,100.5,0); INSERT INTO "extent" VALUES('EPSG','2680','Russia - 100.5°E to 103.5°E onshore','Russian Federation - onshore between 100°30''E and 103°30''E.',50.17,79.71,100.5,103.5,0); INSERT INTO "extent" VALUES('EPSG','2681','Russia - 103.5°E to 106.5°E onshore','Russian Federation - onshore between 103°30''E and 106°30''E.',50.13,79.21,103.5,106.5,0); INSERT INTO "extent" VALUES('EPSG','2682','Russia - 106.5°E to 109.5°E onshore','Russian Federation - onshore between 106°30''E and 109°30''E.',49.25,78.4,106.5,109.5,0); INSERT INTO "extent" VALUES('EPSG','2683','Russia - 109.5°E to 112.5°E onshore','Russian Federation - onshore between 109°30''E and 112°30''E.',49.14,76.81,109.5,112.5,0); INSERT INTO "extent" VALUES('EPSG','2684','Russia - 112.5°E to 115.5°E onshore','Russian Federation - onshore between 112°30''E and 115°30''E.',49.49,76.7,112.5,115.5,0); INSERT INTO "extent" VALUES('EPSG','2685','Russia - 115.5°E to 118.5°E onshore','Russian Federation - onshore between 115°30''E and 118°30''E.',49.51,74.43,115.5,118.5,0); INSERT INTO "extent" VALUES('EPSG','2686','Russia - 118.5°E to 121.5°E onshore','Russian Federation - onshore between 118°30''E and 121°30''E.',49.87,73.63,118.5,121.5,0); INSERT INTO "extent" VALUES('EPSG','2687','Russia - 121.5°E to 124.5°E onshore','Russian Federation - onshore between 121°30''E and 124°30''E.',53.18,74.0,121.5,124.5,0); INSERT INTO "extent" VALUES('EPSG','2688','Russia - 124.5°E to 127.5°E onshore','Russian Federation - onshore between 124°30''E and 127°30''E.',49.88,74.0,124.5,127.5,0); INSERT INTO "extent" VALUES('EPSG','2689','Russia - 127.5°E to 130.5°E onshore','Russian Federation - onshore between 127°30''E and 130°30''E.',42.67,73.59,127.5,130.5,0); INSERT INTO "extent" VALUES('EPSG','2690','Russia - 130.5°E to 133.5°E onshore','Russian Federation - onshore between 130°30''E and 133°30''E.',42.25,71.99,130.5,133.5,0); INSERT INTO "extent" VALUES('EPSG','2691','Russia - 133.5°E to 136.5°E onshore','Russian Federation - onshore between 133°30''E and 136°30''E.',42.74,75.9,133.5,136.5,0); INSERT INTO "extent" VALUES('EPSG','2692','Russia - 136.5°E to 139.5°E onshore','Russian Federation - onshore between 136°30''E and 139°30''E.',44.76,76.27,136.5,139.5,0); INSERT INTO "extent" VALUES('EPSG','2693','Russia - 139.5°E to 142.5°E onshore','Russian Federation - onshore between 139°30''E and 142°30''E.',45.84,76.23,139.5,142.5,0); INSERT INTO "extent" VALUES('EPSG','2694','Russia - 142.5°E to 145.5°E onshore','Russian Federation - onshore between 142°30''E and 145°30''E.',43.61,75.98,142.5,145.5,0); INSERT INTO "extent" VALUES('EPSG','2695','Russia - 145.5°E to 148.5°E onshore','Russian Federation - onshore between 145°30''E and 148°30''E.',43.6,76.76,145.5,148.5,0); INSERT INTO "extent" VALUES('EPSG','2696','Russia - 148.5°E to 151.5°E onshore','Russian Federation - onshore between 148°30''E and 151°30''E.',45.21,76.82,148.5,151.5,0); INSERT INTO "extent" VALUES('EPSG','2697','Russia - 151.5°E to 154.5°E onshore','Russian Federation - onshore between 151°30''E and 154°30''E.',46.72,76.26,151.5,154.5,0); INSERT INTO "extent" VALUES('EPSG','2698','Russia - 154.5°E to 157.5°E onshore','Russian Federation - onshore between 154°30''E and 157°30''E.',49.02,77.2,154.5,157.5,0); INSERT INTO "extent" VALUES('EPSG','2699','Russia - 157.5°E to 160.5°E onshore','Russian Federation - onshore between 157°30''E and 160°30''E.',51.36,71.12,157.5,160.5,0); INSERT INTO "extent" VALUES('EPSG','2700','Russia - 160.5°E to 163.5°E onshore','Russian Federation - onshore between 160°30''E and 163°30''E.',54.34,70.98,160.5,163.5,0); INSERT INTO "extent" VALUES('EPSG','2701','Russia - 163.5°E to 166.5°E onshore','Russian Federation - onshore between 163°30''E and 166°30''E.',54.69,69.82,163.5,166.5,0); INSERT INTO "extent" VALUES('EPSG','2702','Russia - 166.5°E to 169.5°E onshore','Russian Federation - onshore between 166°30''E and 169°30''E.',54.45,70.07,166.5,169.5,0); INSERT INTO "extent" VALUES('EPSG','2703','Russia - 169.5°E to 172.5°E onshore','Russian Federation - onshore between 169°30''E and 172°30''E.',59.86,70.19,169.5,172.5,0); INSERT INTO "extent" VALUES('EPSG','2704','Russia - 172.5°E to 175.5°E onshore','Russian Federation - onshore between 172°30''E and 175°30''E.',60.99,70.02,172.5,175.5,0); INSERT INTO "extent" VALUES('EPSG','2705','Russia - 175.5°E to 178.5°E onshore','Russian Federation - onshore between 175°30''E and 178°30''E.',62.09,71.1,175.5,178.5,0); INSERT INTO "extent" VALUES('EPSG','2706','Russia - 178.5°E to 178.5°W onshore','Russian Federation - onshore between 178°30''E and 178°30''W.',62.24,71.65,178.5,-178.5,0); INSERT INTO "extent" VALUES('EPSG','2707','Russia - 178.5°W to 175.5°W onshore','Russian Federation - onshore between 178°30''W and 175°30''W.',64.74,71.61,-178.5,-175.5,0); INSERT INTO "extent" VALUES('EPSG','2708','Russia - 175.5°W to 172.5°W onshore','Russian Federation - onshore between 175°30''W and 172°30''W.',64.2,67.78,-175.5,-172.5,0); INSERT INTO "extent" VALUES('EPSG','2709','Russia - 172.5°W to 169.5°W onshore','Russian Federation - onshore between 172°30''W and 169°30''W.',64.35,67.06,-172.5,-169.57,0); INSERT INTO "extent" VALUES('EPSG','2710','Russia - east of 169.5°W onshore','Russian Federation - onshore between 169°30''W and 166°30''W.',65.7,65.86,-169.22,-168.97,0); INSERT INTO "extent" VALUES('EPSG','2711','China - west of 76.5°E','China - west of 76°30''E.',35.81,40.65,73.62,76.5,0); INSERT INTO "extent" VALUES('EPSG','2712','China - 76.5°E to 79.5°E','China - between 76°30''E and 79°30''E.',31.03,41.83,76.5,79.5,0); INSERT INTO "extent" VALUES('EPSG','2713','China - 79.5°E to 82.5°E','China - between 79°30''E and 82°30''E.',29.95,45.88,79.5,82.51,0); INSERT INTO "extent" VALUES('EPSG','2714','China - 82.5°E to 85.5°E','China - between 82°30''E and 85°30''E.',28.26,47.23,82.5,85.5,0); INSERT INTO "extent" VALUES('EPSG','2715','China - 85.5°E to 88.5°E','China - between 85°30''E and 88°30''E.',27.8,49.18,85.5,88.5,0); INSERT INTO "extent" VALUES('EPSG','2716','China - 88.5°E to 91.5°E','China - between 88°30''E and 91°30''E.',27.32,48.42,88.49,91.51,0); INSERT INTO "extent" VALUES('EPSG','2717','China - 91.5°E to 94.5°E','China - between 91°30''E and 94°30''E.',27.71,45.13,91.5,94.5,0); INSERT INTO "extent" VALUES('EPSG','2718','China - 94.5°E to 97.5°E','China - between 94°30''E and 97°30''E.',28.23,44.5,94.5,97.51,0); INSERT INTO "extent" VALUES('EPSG','2719','China - 97.5°E to 100.5°E','China - between 97°30''E and 100°30''E.',21.43,42.76,97.5,100.5,0); INSERT INTO "extent" VALUES('EPSG','2720','China - 100.5°E to 103.5°E','China - between 100°30''E and 103°30''E.',21.13,42.69,100.5,103.5,0); INSERT INTO "extent" VALUES('EPSG','2721','China - 103.5°E to 106.5°E','China - between 103°30''E and 106°30''E.',22.5,42.21,103.5,106.51,0); INSERT INTO "extent" VALUES('EPSG','2722','China - 106.5°E to 109.5°E onshore','China - onshore between 106°30''E and 109°30''E.',18.19,42.47,106.5,109.51,0); INSERT INTO "extent" VALUES('EPSG','2723','China - 109.5°E to 112.5°E onshore','China - onshore between 109°30''E and 112°30''E.',18.11,45.11,109.5,112.5,0); INSERT INTO "extent" VALUES('EPSG','2724','China - 112.5°E to 115.5°E onshore','China - onshore between 112°30''E and 115°30''E.',21.52,45.45,112.5,115.5,0); INSERT INTO "extent" VALUES('EPSG','2725','China - 115.5°E to 118.5°E onshore','China - onshore between 115°30''E and 118°30''E.',22.6,49.88,115.5,118.5,0); INSERT INTO "extent" VALUES('EPSG','2726','China - 118.5°E to 121.5°E onshore','China - onshore between 118°30''E and 121°30''E.',24.43,53.33,118.5,121.5,0); INSERT INTO "extent" VALUES('EPSG','2727','China - 121.5°E to 124.5°E onshore','China - onshore between 121°30''E and 124°30''E.',28.22,53.56,121.5,124.5,0); INSERT INTO "extent" VALUES('EPSG','2728','China - 124.5°E to 127.5°E onshore','China - onshore between 124°30''E and 127°30''E.',40.19,53.2,124.5,127.5,0); INSERT INTO "extent" VALUES('EPSG','2729','China - 127.5°E to 130.5°E','China - between 127°30''E and 130°30''E.',41.37,50.25,127.5,130.5,0); INSERT INTO "extent" VALUES('EPSG','2730','China - 130.5°E to 133.5°E','China - between 130°30''E and 133°30''E.',42.42,48.88,130.5,133.5,0); INSERT INTO "extent" VALUES('EPSG','2731','China - east of 133.5°E','China - east of 133°30''E.',45.85,48.4,133.5,134.77,0); INSERT INTO "extent" VALUES('EPSG','2732','World - 6-degree CM 081°W','Between 84°W and 78°W.',-80.0,84.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','2733','World - 6-degree CM 075°W','Between 78°W and 72°W.',-80.0,84.0,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','2734','World - 6-degree CM 069°W','Between 72°W and 66°W.',-80.0,84.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','2735','World - 6-degree CM 063°W','Between 66°W and 60°W.',-80.0,84.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','2736','World - 6-degree CM 057°W','Between 60°W and 54°W.',-80.0,84.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','2737','World - 6-degree CM 051°W','Between 54°W and 48°W.',-80.0,84.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','2738','World - 6-degree CM 045°W','Between 48°W and 42°W.',-80.0,84.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','2739','World - 6-degree CM 039°W','Between 42°W and 36°W.',-80.0,84.0,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','2740','World - 6-degree CM 033°W','Between 36°W and 30°W.',-80.0,84.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','2741','World - 6-degree CM 009°E','Between 6°E and 12°E.',-80.0,84.0,6.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','2742','World - 6-degree CM 015°E','Between 12°E and 18°E.',-80.0,84.0,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','2743','World - 6-degree CM 021°E','Between 18°E and 24°E.',-80.0,84.0,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','2744','World - 6-degree CM 027°E','Between 24°E and 30°E.',-80.0,84.0,24.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','2745','World - 6-degree CM 033°E','Between 30°E and 36°E.',-80.0,84.0,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','2746','World - 6-degree CM 039°E','Between 36°E and 42°E.',-80.0,84.0,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','2747','Russia - 19.5°E to 22.5°E onshore','Russian Federation - Kaliningrad - onshore between 19°30''E and 22°30''E.',54.32,55.32,19.57,22.5,0); INSERT INTO "extent" VALUES('EPSG','2748','Russia - 22.5°E to 25.5°E onshore','Russian Federation - onshore between 22°30''E and 25°30''E - Kaliningrad.',54.34,55.07,22.5,22.87,0); INSERT INTO "extent" VALUES('EPSG','2749','Russia - 25.5°E to 28.5°E onshore','Russian Federation - onshore between 25°30''E and 28°30''E.',56.05,68.93,26.61,28.51,0); INSERT INTO "extent" VALUES('EPSG','2750','Russia - 28.5°E to 31.5°E onshore','Russian Federation - onshore between 28°30''E and 31°30''E.',52.85,69.85,28.5,31.5,0); INSERT INTO "extent" VALUES('EPSG','2751','Russia - 31.5°E to 34.5°E onshore','Russian Federation - onshore between 31°30''E and 34°30''E.',51.24,70.02,31.5,34.5,0); INSERT INTO "extent" VALUES('EPSG','2752','Russia - 34.5°E to 37.5°E onshore','Russian Federation - onshore between 34°30''E and 37°30''E.',44.61,69.39,34.5,37.51,0); INSERT INTO "extent" VALUES('EPSG','2753','Russia - 37.5°E to 40.5°E onshore','Russian Federation - onshore between 37°30''E and 40°30''E.',43.33,68.8,37.5,40.5,0); INSERT INTO "extent" VALUES('EPSG','2754','Russia - 40.5°E to 43.5°E onshore','Russian Federation - onshore between 40°30''E and 43°30''E.',42.87,68.74,40.5,43.5,0); INSERT INTO "extent" VALUES('EPSG','2755','Russia - 43.5°E to 46.5°E onshore','Russian Federation - onshore between 43°30''E and 46°30''E.',41.89,80.8,43.5,46.5,0); INSERT INTO "extent" VALUES('EPSG','2756','Russia - 46.5°E to 49.5°E onshore','Russian Federation - onshore between 46°30''E and 49°30''E.',41.19,80.91,46.5,49.5,0); INSERT INTO "extent" VALUES('EPSG','2757','Russia - 49.5°E to 52.5°E onshore','Russian Federation - onshore between 49°30''E and 52°30''E.',42.36,81.22,49.5,52.5,0); INSERT INTO "extent" VALUES('EPSG','2758','Russia - 52.5°E to 55.5°E onshore','Russian Federation - onshore between 52°30''E and 55°30''E.',50.52,81.41,52.5,55.5,0); INSERT INTO "extent" VALUES('EPSG','2759','Russia - 55.5°E to 58.5°E onshore','Russian Federation - onshore between 55°30''E and 58°30''E.',50.53,81.89,55.5,58.5,0); INSERT INTO "extent" VALUES('EPSG','2760','Russia - 58.5°E to 61.5°E onshore','Russian Federation - onshore between 58°30''E and 61°30''E.',50.47,81.91,58.5,61.5,0); INSERT INTO "extent" VALUES('EPSG','2761','Russia - 61.5°E to 64.5°E onshore','Russian Federation - onshore between 61°30''E and 64°30''E.',51.03,81.77,61.5,64.5,0); INSERT INTO "extent" VALUES('EPSG','2762','Russia - 64.5°E to 67.5°E onshore','Russian Federation - onshore between 64°30''E and 67°30''E.',54.31,81.25,64.5,67.5,0); INSERT INTO "extent" VALUES('EPSG','2763','Russia - 67.5°E to 70.5°E onshore','Russian Federation - onshore between 67°30''E and 70°30''E.',54.85,77.07,67.5,70.5,0); INSERT INTO "extent" VALUES('EPSG','2764','Russia - 70.5°E to 73.5°E onshore','Russian Federation - onshore between 70°30''E and 73°30''E.',53.43,73.57,70.5,73.5,0); INSERT INTO "extent" VALUES('EPSG','2765','Russia - 73.5°E to 76.5°E onshore','Russian Federation - onshore between 73°30''E and 76°30''E.',53.47,79.71,73.5,76.5,0); INSERT INTO "extent" VALUES('EPSG','2766','Russia - 76.5°E to 79.5°E onshore','Russian Federation - onshore between 76°30''E and 79°30''E.',51.49,81.03,76.5,79.5,0); INSERT INTO "extent" VALUES('EPSG','2767','Russia - 79.5°E to 82.5°E onshore','Russian Federation - onshore between 79°30''E and 82°30''E.',50.7,81.03,79.5,82.5,0); INSERT INTO "extent" VALUES('EPSG','2768','Russia - 82.5°E to 85.5°E onshore','Russian Federation - onshore between 82°30''E and 85°30''E.',49.58,77.56,82.5,85.5,0); INSERT INTO "extent" VALUES('EPSG','2769','Russia - 85.5°E to 88.5°E onshore','Russian Federation - onshore between 85°30''E and 88°30''E.',49.07,77.16,85.5,88.5,0); INSERT INTO "extent" VALUES('EPSG','2770','Indonesia - northeast Kalimantan','Indonesia - northeast Kalimantan.',-0.06,4.29,116.96,119.06,0); INSERT INTO "extent" VALUES('EPSG','2771','Niger - southeast','Niger - southeast',12.8,16.7,7.81,14.9,0); INSERT INTO "extent" VALUES('EPSG','2772','Asia - FSU - CS63 zone A1','Armenia and Georgia onshore west of 43°02''E.',41.37,43.59,39.99,43.04,0); INSERT INTO "extent" VALUES('EPSG','2773','Asia - FSU - CS63 zone A2','Armenia and Georgia between 43°02''E and 46°02''E; Azerbaijan west of 46°02''E.',38.87,43.05,43.03,46.04,0); INSERT INTO "extent" VALUES('EPSG','2774','Asia - FSU - CS63 zone A3','Armenia and Georgia east of 46°02''E; Azerbaijan between 46°02'' and 49°02''E.',38.38,42.1,46.03,49.04,0); INSERT INTO "extent" VALUES('EPSG','2775','Asia - FSU - CS63 zone A4','Azerbaijan east of 49°02''E.',37.89,42.59,49.03,51.73,0); INSERT INTO "extent" VALUES('EPSG','2776','Asia - FSU - CS63 zone K2','Kazakhstan between 49°16''E and 52°16''E.',41.15,51.77,49.26,52.27,0); INSERT INTO "extent" VALUES('EPSG','2777','Asia - FSU - CS63 zone K3','Kazakhstan between 52°16''E and 55°16''E.',41.46,51.79,52.26,55.27,0); INSERT INTO "extent" VALUES('EPSG','2778','Asia - FSU - CS63 zone K4','Kazakhstan between 55°16''E and 58°16''E.',41.26,51.14,55.26,58.27,0); INSERT INTO "extent" VALUES('EPSG','2779','Portugal - Selvagens onshore','Portugal - Selvagens islands (Madeira province) - onshore.',29.98,30.21,-16.11,-15.79,0); INSERT INTO "extent" VALUES('EPSG','2780','Malaysia - East Malaysia - offshore SCS','Malaysia - East Malaysia (Sabah; Sarawak) - offshore South China Sea.',1.56,7.67,109.31,117.31,0); INSERT INTO "extent" VALUES('EPSG','2781','Iran - Kharg Island','Iran - Kharg Island.',29.16,29.39,50.22,50.42,0); INSERT INTO "extent" VALUES('EPSG','2782','Iran - Lavan Island and Balal field','Iran - Lavan Island and Balal field.',26.21,26.87,52.49,53.43,0); INSERT INTO "extent" VALUES('EPSG','2783','Iran - South Pars blocks 2 and 3','Iran - South Pars field phases 2 and 3.',26.58,26.71,52.07,52.28,0); INSERT INTO "extent" VALUES('EPSG','2784','Canada - south of 60°N','Canada south of 60°N - Alberta, British Columbia (BC), Manitoba, New Brunswick (NB), Newfoundland and Labrador, Nova Scotia (NS), Ontario, Prince Edward Island (PEI), Quebec and Saskatchewan.',41.68,60.0,-139.05,-52.62,1); INSERT INTO "extent" VALUES('EPSG','2785','Libya - Murzuq and En Naga','Libya - Murzuq and En Naga fields.',27.32,27.67,18.37,18.72,0); INSERT INTO "extent" VALUES('EPSG','2786','Libya - Mabruk','Libya - Mabruk field.',29.61,30.07,17.13,17.51,0); INSERT INTO "extent" VALUES('EPSG','2787','Morocco - south of 31.5°N','Morocco onshore south of 35 grads North (31°30''N).',27.66,31.51,-13.24,-3.59,0); INSERT INTO "extent" VALUES('EPSG','2788','Western Sahara - north of 24.3°N','Western Sahara - onshore north of 27grads North (24°18''N).',24.29,27.67,-15.42,-8.66,0); INSERT INTO "extent" VALUES('EPSG','2789','Western Sahara - south of 24.3°N','Western Sahara - onshore south of 27grads North (24°18''N).',20.71,24.31,-17.16,-12.0,0); INSERT INTO "extent" VALUES('EPSG','2790','Africa - 12th parallel N','Senegal - central, Mali - southwest, Burkina Faso - central, Niger - southwest, Nigeria - north, Chad - central. All in proximity to the parallel of latitude of 12°N.',10.26,15.7,-17.19,30.42,0); INSERT INTO "extent" VALUES('EPSG','2791','Africa - Burkina Faso and SW Niger','Burkina Faso - central; Niger - southwest, in proximity to the parallel of latitude of 12°N.',11.83,14.23,-4.64,4.0,0); INSERT INTO "extent" VALUES('EPSG','2792','UK - Great Britain mainland onshore','United Kingdom (UK) - Great Britain onshore - England and Wales - mainland; Scotland - mainland and Inner Hebrides.',49.93,58.71,-7.06,1.8,0); INSERT INTO "extent" VALUES('EPSG','2793','UK - Orkney Islands onshore','United Kingdom (UK) - Great Britain - Scotland - Orkney Islands onshore.',58.72,59.41,-3.48,-2.34,0); INSERT INTO "extent" VALUES('EPSG','2794','UK - Fair Isle onshore','United Kingdom (UK) - Great Britain - Scotland - Fair Isle onshore.',59.45,59.6,-1.76,-1.5,0); INSERT INTO "extent" VALUES('EPSG','2795','UK - Shetland Islands onshore','United Kingdom (UK) - Great Britain - Scotland - Shetland Islands onshore.',59.83,60.87,-1.78,-0.67,0); INSERT INTO "extent" VALUES('EPSG','2796','UK - Foula onshore','United Kingdom (UK) - Great Britain - Scotland - Foula onshore.',60.06,60.2,-2.21,-1.95,0); INSERT INTO "extent" VALUES('EPSG','2797','UK - Sule Skerry onshore','United Kingdom (UK) - Great Britain - Scotland - Sule Skerry onshore.',59.05,59.13,-4.5,-4.3,0); INSERT INTO "extent" VALUES('EPSG','2798','UK - North Rona onshore','United Kingdom (UK) - Great Britain - Scotland - North Rona onshore.',59.07,59.19,-5.92,-5.73,0); INSERT INTO "extent" VALUES('EPSG','2799','UK - Outer Hebrides onshore','United Kingdom (UK) - Great Britain - Scotland - Outer Hebrides onshore.',56.76,58.54,-7.72,-6.1,0); INSERT INTO "extent" VALUES('EPSG','2800','UK - St. Kilda onshore','United Kingdom (UK) - Great Britain - Scotland - St Kilda onshore.',57.74,57.93,-8.74,-8.41,0); INSERT INTO "extent" VALUES('EPSG','2801','UK - Flannan Isles onshore','United Kingdom (UK) - Great Britain - Scotland - Flannan Isles onshore.',58.21,58.35,-7.75,-7.46,0); INSERT INTO "extent" VALUES('EPSG','2802','UK - Scilly Isles onshore','United Kingdom (UK) - Great Britain - England - Isles of Scilly onshore.',49.86,49.99,-6.41,-6.23,0); INSERT INTO "extent" VALUES('EPSG','2803','Isle of Man','Isle of Man - onshore.',54.02,54.44,-4.87,-4.27,0); INSERT INTO "extent" VALUES('EPSG','2804','Europe - Austria and FR Yugoslavia','Austria; Boznia and Herzegovina; Croatia; Czech Republic; FYR Macedonia; Montenegro; Serbia; Slovakia; Slovenia.',40.86,51.05,9.53,23.03,1); INSERT INTO "extent" VALUES('EPSG','2805','Chile - Tierra del Fuego','Chile - Tierra del Fuego onshore.',-55.96,-51.99,-74.83,-66.33,0); INSERT INTO "extent" VALUES('EPSG','2806','Iran - northern Gulf coast','Iran - northern Gulf coast area.',29.0,31.67,47.75,50.83,1); INSERT INTO "extent" VALUES('EPSG','2807','Comoros - Njazidja (Grande Comore)','Comoros - Njazidja (Grande Comore).',-11.99,-11.31,43.16,43.55,0); INSERT INTO "extent" VALUES('EPSG','2808','Comoros - Nzwani','Comoros - Nzwani.',-12.43,-12.02,44.16,44.59,0); INSERT INTO "extent" VALUES('EPSG','2809','Comoros - Mwali','Comoros - Mwali.',-12.44,-12.19,43.57,43.92,0); INSERT INTO "extent" VALUES('EPSG','2810','French Polynesia - Marquesas Islands - Nuku Hiva','French Polynesia - Marquesas Islands - Nuku Hiva.',-9.01,-8.72,-140.31,-139.96,0); INSERT INTO "extent" VALUES('EPSG','2811','French Polynesia - Society Islands - Moorea and Tahiti','French Polynesia - Society Islands - Moorea and Tahiti.',-17.93,-17.41,-150.0,-149.09,0); INSERT INTO "extent" VALUES('EPSG','2812','French Polynesia - Society Islands - Bora Bora, Huahine, Raiatea, Tahaa','French Polynesia - Society Islands - Bora Bora, Huahine, Raiatea and Tahaa.',-16.96,-16.17,-151.91,-150.89,0); INSERT INTO "extent" VALUES('EPSG','2813','New Caledonia - Ouvea','New Caledonia - Loyalty Islands - Ouvea.',-20.77,-20.34,166.44,166.71,0); INSERT INTO "extent" VALUES('EPSG','2814','New Caledonia - Lifou','New Caledonia - Loyalty Islands - Lifou.',-21.24,-20.62,166.98,167.52,0); INSERT INTO "extent" VALUES('EPSG','2815','Wallis and Futuna - Wallis','Wallis and Futuna - Wallis.',-13.41,-13.16,-176.25,-176.07,0); INSERT INTO "extent" VALUES('EPSG','2816','French Southern Territories - Kerguelen onshore','French Southern Territories - Kerguelen onshore.',-49.78,-48.6,68.69,70.62,0); INSERT INTO "extent" VALUES('EPSG','2817','Antarctica - Adelie Land - Petrels island','Antarctica - Adelie Land - Petrels island.',-66.78,-66.1,139.44,141.5,0); INSERT INTO "extent" VALUES('EPSG','2818','Antarctica - Adelie Land coastal area','Antarctica - Adelie Land - coastal area between 136°E and 142°E.',-67.13,-65.61,136.0,142.0,0); INSERT INTO "extent" VALUES('EPSG','2819','New Caledonia - Mare','New Caledonia - Loyalty Islands - Mare.',-21.71,-21.32,167.75,168.19,0); INSERT INTO "extent" VALUES('EPSG','2820','New Caledonia - Ile des Pins','New Caledonia - Ile des Pins.',-22.73,-22.49,167.36,167.61,0); INSERT INTO "extent" VALUES('EPSG','2821','New Caledonia - Belep','New Caledonia - Belep.',-19.85,-19.5,163.54,163.75,0); INSERT INTO "extent" VALUES('EPSG','2822','New Caledonia - Grande Terre','New Caledonia - Grande Terre.',-22.45,-20.03,163.92,167.09,0); INSERT INTO "extent" VALUES('EPSG','2823','New Caledonia - Grande Terre - Noumea','New Caledonia - Grande Terre - Noumea district.',-22.37,-22.19,166.35,166.54,0); INSERT INTO "extent" VALUES('EPSG','2824','Caribbean - French Antilles','French Antilles onshore and offshore - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; St Martin.',14.08,18.53,-63.66,-57.52,0); INSERT INTO "extent" VALUES('EPSG','2825','Africa - Ethiopia and Sudan - 30°E to 36°E','Ethiopia - west of 36°E. South Sudan - east of 30°E. Sudan - between 30°E and 36°E.',3.49,22.24,29.99,36.0,0); INSERT INTO "extent" VALUES('EPSG','2826','Africa - South Sudan and Sudan - west of 24°E','South Sudan and Sudan - west of 24°E.',8.7,15.76,21.82,24.01,0); INSERT INTO "extent" VALUES('EPSG','2827','Africa - South Sudan and Sudan - 24°E to 30°E','South Sudan and Sudan - between 24°E and 30°E.',4.21,22.01,23.99,30.01,0); INSERT INTO "extent" VALUES('EPSG','2828','Guadeloupe - St Martin and St Barthelemy - onshore','Guadeloupe - onshore - St Martin and St Barthélemy islands.',17.82,18.17,-63.21,-62.73,0); INSERT INTO "extent" VALUES('EPSG','2829','Guadeloupe - Grande-Terre and surrounding islands - onshore','Guadeloupe - onshore - Basse-Terre, Grande-Terre, La Desirade, Marie-Galante, Les Saintes.',15.8,16.55,-61.85,-60.97,0); INSERT INTO "extent" VALUES('EPSG','2830','World (by country)','World: Afghanistan; Albania; Algeria; American Samoa; Andorra; Angola; Anguilla; Antarctica; Antigua and Barbuda; Argentina; Armenia; Aruba; Australia; Austria; Azerbaijan; Bahamas; Bahrain; Bangladesh; Barbados; Belgium; Belarus; Belize; Benin; Bermuda; Bhutan; Bolivia; BES Islands - Bonaire, St Eustatius and Saba; Bosnia and Herzegovina; Botswana; Bouvet Island; Brazil; British Indian Ocean Territory; British Virgin Islands; Brunei; Bulgaria; Burkina Faso; Burundi; Cambodia; Cameroon; Canada; Cape Verde; Cayman Islands; Central African Republic; Chad; Chile; China; China - Hong Kong; China - Macao; Christmas Island; Cocos (Keeling) Islands; Colombia; Comoros; Congo; Congo DR (Zaire); Cook Islands; Costa Rica; Côte d''Ivoire (Ivory Coast); Croatia; Cuba; Curacao; Cyprus; Czechia; Denmark; Djibouti; Dominica; Dominican Republic; East Timor; Ecuador; Egypt; El Salvador; Equatorial Guinea; Eritrea; Estonia; Eswatini (Swaziland); Ethiopia; Falkland Islands (Malvinas); Faroe Islands; Fiji; Finland; France; French Guiana; French Polynesia; French Southern Territories; Gabon; Gambia; Georgia; Germany; Ghana; Gibraltar; Greece; Greenland; Grenada; Guadeloupe; Guam; Guatemala; Guinea; Guinea-Bissau; Guyana; Haiti; Heard Island and McDonald Islands; Honduras; Hungary; Iceland; India; Indonesia; Iran; Iraq; Ireland; Israel; Italy; Jamaica; Japan; Jordan; Kazakhstan; Kenya; Kiribati; North Korea; South Korea; Kosovo; Kuwait; Kyrgyzstan; Laos; Latvia; Lebanon; Lesotho; Liberia; Libya; Liechtenstein; Lithuania; Luxembourg; Madagascar; Malawi; Malaysia; Maldives; Mali; Malta; Marshall Islands; Martinique; Mauritania; Mauritius; Mayotte; Mexico; Micronesia; Moldova; Monaco; Mongolia; Montenegro; Montserrat; Morocco; Mozambique; Myanmar (Burma); Namibia; Nauru; Nepal; Netherlands; New Caledonia; New Zealand; Nicaragua; Niger; Nigeria; Niue; Norfolk Island; North Macedonia; Northern Mariana Islands; Norway; Oman; Pakistan; Palau; Panama; Papua New Guinea (PNG); Paraguay; Peru; Philippines; Pitcairn; Poland; Portugal; Puerto Rico; Qatar; Reunion; Romania; Russia; Rwanda; St Barthelemy; St Helena, Ascension and Tristan da Cunha; St Kitts and Nevis; St Lucia; St Maarten; St Martin; St Pierre and Miquelon; St Vincent and the Grenadines; Samoa; San Marino; Sao Tome and Principe; Saudi Arabia; Senegal; Serbia; Seychelles; Sierra Leone; Singapore; Slovakia; Slovenia; Solomon Islands; Somalia; South Africa; South Georgia and the South Sandwich Islands; South Sudan; Spain; Sri Lanka; Sudan; Suriname; Svalbard and Jan Mayen; Sweden; Switzerland; Syria; Taiwan; Tajikistan; Tanzania; Thailand; Togo; Tokelau; Tonga; Trinidad and Tobago; Tunisia; Türkiye (Turkey); Turkmenistan; Turks and Caicos Islands; Tuvalu; Uganda; Ukraine; United Arab Emirates (UAE); United Kingdom (UK); United States (USA); US Minor Outlying Islands; US Virgin Islands; Uruguay; Uzbekistan; Vanuatu; Vatican; Venezuela; Vietnam; Wallis and Futuna; Western Sahara; Yemen; Zambia; Zimbabwe.',-90.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','2831','Canada - Atlantic offshore','Canada - offshore Newfoundland and Labrador, New Brunswick and Nova Scotia - west of 44°W and north of 40°N.',40.0,64.21,-67.75,-43.99,0); INSERT INTO "extent" VALUES('EPSG','2832','Canada - British Columbia','Canada - British Columbia.',48.25,60.01,-139.04,-114.08,0); INSERT INTO "extent" VALUES('EPSG','2833','Sweden - 12 00','Sweden - communes west of approximately 12°45''E and south of approximately 60°N. See information source for map.',56.74,60.13,10.93,13.11,0); INSERT INTO "extent" VALUES('EPSG','2834','Sweden - 13 30','Sweden - communes between approximately 12°45''E and 14°15''E and south of approximately 62°10''N. See information source for map.',55.28,62.28,12.12,14.79,0); INSERT INTO "extent" VALUES('EPSG','2835','Sweden - 15 00','Sweden - communes between approximately 14°15''E and 15°45''E and south of approximately 61°30''N. See information source for map.',55.95,61.62,13.54,16.15,0); INSERT INTO "extent" VALUES('EPSG','2836','Sweden - 16 30','Sweden - communes between approximately 15°45''E and 17°15''E and south of approximately 62°20''N. See information source for map.',56.15,62.26,15.41,17.63,0); INSERT INTO "extent" VALUES('EPSG','2837','Sweden - 18 00','Sweden - communes east of approximately 17°15''E between approximately 60°40''N and 58°50''N. See information source for map.',58.66,60.7,17.08,19.61,0); INSERT INTO "extent" VALUES('EPSG','2838','Sweden - 14 15','Sweden - communes west of approximately 15°E and between approximately 61°35''N and 64°25''N. See information source for map.',61.55,64.39,11.93,15.55,0); INSERT INTO "extent" VALUES('EPSG','2839','Sweden - 15 45','Sweden - communes between approximately 15°E and 16°30''E and between approximately 60°30''N and 65°N. See information source for map.',60.44,65.13,13.66,17.01,0); INSERT INTO "extent" VALUES('EPSG','2840','Sweden - 17 15','Sweden - communes between approximately 14°20''E and 18°50''E and between approximately 67°10''N and 62°05''N. See information source for map.',62.12,67.19,14.31,19.04,0); INSERT INTO "extent" VALUES('EPSG','2841','Sweden - 18 45','Sweden - mainland communes between approximately 18°E and 19°30''E and between approximately 62°50''N and 66°N. Also Gotland. See information source for map.',56.86,66.17,17.18,20.22,0); INSERT INTO "extent" VALUES('EPSG','2842','Sweden - 20 15','Sweden - communes in Vaasterbotten east of approximately 19°30''E and (i) north of 63°30''N and (ii) south of approximately 65°05''N. Also Norbotten west of approximately 23°20''E. See information source for map.',63.45,69.07,16.08,23.28,0); INSERT INTO "extent" VALUES('EPSG','2843','Sweden - 21 45','Sweden - communes in Norbotten east of approximately 19°30''E and south of approximately 65°50''N. See information source for map.',65.01,66.43,19.63,22.91,0); INSERT INTO "extent" VALUES('EPSG','2844','Sweden - 23 15','Sweden - communes east of approximately 21°50''E. See information source for map.',65.49,68.14,21.85,24.17,0); INSERT INTO "extent" VALUES('EPSG','2845','Sweden - 7.5 gon W','Sweden - communes west of approximately 12°26''E. See information source for map.',57.29,59.73,10.93,12.91,0); INSERT INTO "extent" VALUES('EPSG','2846','Sweden - 5 gon W','Sweden - communes between approximately 12°26''E and 14°40''E. See information source for map.',55.28,64.39,11.81,15.44,0); INSERT INTO "extent" VALUES('EPSG','2847','Sweden - 2.5 gon W','Sweden - communes between approximately 14°40''E and 16°55''E. See information source for map.',55.95,67.18,13.66,17.73,0); INSERT INTO "extent" VALUES('EPSG','2848','Sweden - 0 gon','Sweden - communes between approximately 16°55''E and 19°10''E; Gotland. See information source for map.',56.86,68.54,16.08,20.22,0); INSERT INTO "extent" VALUES('EPSG','2849','Sweden - 2.5 gon E','Sweden - communes between approximately 19°10''E and 21°25''E. See information source for map.',63.37,69.07,18.4,22.2,0); INSERT INTO "extent" VALUES('EPSG','2850','Sweden - 5 gon E','Sweden - east of approximately 21°26''E. See information source for map.',65.24,68.58,21.34,24.17,0); INSERT INTO "extent" VALUES('EPSG','2851','Iceland - mainland west of 24°W','Iceland - mainland west of 24°W.',64.71,65.85,-24.66,-24.0,0); INSERT INTO "extent" VALUES('EPSG','2852','Iceland - mainland 24°W to 18°W','Iceland - mainland between 24°W and 18°W.',63.34,66.52,-24.0,-18.0,0); INSERT INTO "extent" VALUES('EPSG','2853','Iceland - mainland east of 18°W','Iceland - mainland east of 18°W.',63.45,66.58,-18.0,-13.38,0); INSERT INTO "extent" VALUES('EPSG','2854','Europe - 36°W to 30°W','Europe - between 36°W and 30°W.',39.3,39.85,-36.0,-30.0,1); INSERT INTO "extent" VALUES('EPSG','2855','Europe - 30°W to 24°W','Europe - between 30°W and 24°W.',25.1,65.8,-30.0,-24.0,1); INSERT INTO "extent" VALUES('EPSG','2856','Europe - 24°W to 18°W','Europe - between 24°W and 18°W.',27.6,66.5,-24.0,-18.0,1); INSERT INTO "extent" VALUES('EPSG','2857','Europe - 18°W to 12°W','Europe - between 18°W and 12°W.',27.6,66.55,-18.0,-12.0,1); INSERT INTO "extent" VALUES('EPSG','2858','Europe - 12°W to 6°W','Europe - between 12°W and 6°W.',36.0,62.33,-12.0,-6.0,1); INSERT INTO "extent" VALUES('EPSG','2859','Europe - 6°W to 0°W','Europe - between 6°W and 0°W.',34.75,62.33,-6.0,0.0,1); INSERT INTO "extent" VALUES('EPSG','2860','Germany - west of 6°E','Germany - onshore and offshore west of 6°E.',50.97,55.92,3.34,6.01,0); INSERT INTO "extent" VALUES('EPSG','2861','Germany - 6°E to 12°E','Germany - onshore and offshore between 6°E and 12°E - Baden-Wurtemberg, Bayern, Bremen, Hamburg, Hessen, Mecklenburg-Vorpommern, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Sachsen, Sachsen-Anhalt, Schleswig-Holstein, Thuringen.',47.27,55.47,6.0,12.01,0); INSERT INTO "extent" VALUES('EPSG','2862','Germany - east of 12°E','Germany - onshore and offshore east of 12°E, together with that part of Brandenburg state west of 12°E - Bayern, Berlin, Brandenburg (all state), Mecklenburg-Vorpommern, Sachsen, Sachsen-Anhalt, Thuringen.',47.46,55.03,11.57,15.04,0); INSERT INTO "extent" VALUES('EPSG','2863','Europe - 18°E to 24°E','Europe - between 18°E and 24°E.',34.8,75.0,18.0,24.0,1); INSERT INTO "extent" VALUES('EPSG','2864','Europe - 24°E to 30°E','Europe - between 24°E and 30°E.',34.8,75.0,24.0,30.0,1); INSERT INTO "extent" VALUES('EPSG','2865','Europe - 30°E to 36°E','Europe - between 30°E and 36°E.',34.5,75.0,30.0,36.0,1); INSERT INTO "extent" VALUES('EPSG','2866','Europe - 36°E to 42°E','Europe - between 36°E and 42°E.',35.75,75.0,36.0,42.0,1); INSERT INTO "extent" VALUES('EPSG','2867','Europe - 42°E to 48°E','Europe - between 42°E and 48°E.',36.95,75.0,42.0,48.0,1); INSERT INTO "extent" VALUES('EPSG','2868','Europe - 48°E to 54°E','Europe - between 48°E and 54°E.',36.0,75.0,48.0,54.0,1); INSERT INTO "extent" VALUES('EPSG','2869','Jan Mayen - onshore','Jan Mayen - onshore.',70.75,71.24,-9.17,-7.87,0); INSERT INTO "extent" VALUES('EPSG','2870','Portugal - Madeira and Porto Santo islands onshore','Portugal - Madeira and Porto Santo islands onshore.',32.58,33.15,-17.31,-16.23,0); INSERT INTO "extent" VALUES('EPSG','2871','Portugal - Azores E - S Miguel onshore','Portugal - eastern Azores - Sao Miguel island onshore.',37.65,37.96,-25.92,-25.08,0); INSERT INTO "extent" VALUES('EPSG','2872','Portugal - Azores C - Terceira onshore','Portugal - central Azores - Terceira island onshore.',38.57,38.86,-27.44,-26.97,0); INSERT INTO "extent" VALUES('EPSG','2873','Portugal - Azores C - Faial onshore','Portugal - central Azores - Faial island onshore.',38.46,38.7,-28.9,-28.54,0); INSERT INTO "extent" VALUES('EPSG','2874','Portugal - Azores C - Pico onshore','Portugal - central Azores - Pico island onshore.',38.32,38.61,-28.61,-27.98,0); INSERT INTO "extent" VALUES('EPSG','2875','Portugal - Azores C - S Jorge onshore','Portugal - central Azores - Sao Jorge island onshore.',38.48,38.8,-28.37,-27.71,0); INSERT INTO "extent" VALUES('EPSG','2876','Asia - Middle East - Iraq-Kuwait boundary','Iraq - Kuwait boundary.',29.06,30.32,46.36,48.61,0); INSERT INTO "extent" VALUES('EPSG','2877','Slovenia - Slovenska Bistrica','Slovenia - Slovenska Bistrica with the Dravinja River Basin, area of Boc and parts of the Haloze and the Kozjansko region.',46.14,46.46,15.31,16.0,0); INSERT INTO "extent" VALUES('EPSG','2878','Slovenia - Slovenske Gorice','Slovenia - Slovenske Gorice (the Slovene Humpback) with the broad region of Ormoz.',46.29,46.76,15.9,16.3,0); INSERT INTO "extent" VALUES('EPSG','2879','Germany - offshore North Sea','Germany - offshore North Sea.',53.58,55.92,3.34,8.88,0); INSERT INTO "extent" VALUES('EPSG','2880','Antarctica - Australian sector north of 80°S','Antarctica - north of 80°S and between 45°E and 136°E and between 142°E and 160°E - Australian sector north of 80°S.',-80.0,-60.0,45.0,160.0,0); INSERT INTO "extent" VALUES('EPSG','2881','Europe - LCC & LAEA','Europe - European Union (EU) countries and candidates. Europe - onshore and offshore: Albania; Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Cyprus; Czechia; Denmark; Estonia; Faroe Islands; Finland; France; Germany; Gibraltar; Greece; Hungary; Iceland; Ireland; Italy; Kosovo; Latvia; Liechtenstein; Lithuania; Luxembourg; Malta; Monaco; Montenegro; Netherlands; North Macedonia; Norway including Svalbard and Jan Mayen; Poland; Portugal including Madeira and Azores; Romania; San Marino; Serbia; Slovakia; Slovenia; Spain including Canary Islands; Sweden; Switzerland; Türkiye (Turkey); United Kingdom (UK) including Channel Islands and Isle of Man; Vatican City State.',24.6,84.73,-35.58,44.83,0); INSERT INTO "extent" VALUES('EPSG','2882','Italy - Adriatic - North Ancona','Italy - offshore - Adriatic Sea - North Ancona.',43.62,45.73,12.22,13.96,0); INSERT INTO "extent" VALUES('EPSG','2883','Italy - Adriatic - South Ancona / North Gargano','Italy - offshore - Adriatic Sea - South Ancona and North Gargano.',41.95,44.04,13.61,16.14,0); INSERT INTO "extent" VALUES('EPSG','2884','Italy - Adriatic - South Gargano','Italy - offshore - Adriatic Sea - South Gargano.',40.72,42.28,15.95,18.63,0); INSERT INTO "extent" VALUES('EPSG','2885','Italy - Otranto channel','Italy - offshore - Otranto channel.',39.77,41.03,17.95,18.99,0); INSERT INTO "extent" VALUES('EPSG','2886','Italy - north Ionian Sea','Italy - offshore - north Ionian Sea.',37.67,40.47,16.55,18.93,0); INSERT INTO "extent" VALUES('EPSG','2887','Italy - Sicily Strait east of 13°E','Italy - offshore - Strait of Sicily - east of 13°E (of Greenwich).',35.22,37.48,13.0,15.16,0); INSERT INTO "extent" VALUES('EPSG','2888','Italy - Sicily Strait west of 13°E','Italy - offshore - Strait of Sicily - west of 13°E (of Greenwich).',35.28,38.45,10.68,13.01,0); INSERT INTO "extent" VALUES('EPSG','2889','New Zealand - Chatham Islands group','New Zealand - Chatham Islands group - onshore.',-44.64,-43.3,-177.25,-175.54,0); INSERT INTO "extent" VALUES('EPSG','2890','Guadeloupe - St Martin - onshore','Guadeloupe - onshore - St Martin island.',18.01,18.17,-63.21,-62.96,0); INSERT INTO "extent" VALUES('EPSG','2891','Guadeloupe - St Barthelemy - onshore','Guadeloupe - onshore - St Barthelemy island.',17.82,17.98,-62.92,-62.73,0); INSERT INTO "extent" VALUES('EPSG','2892','Guadeloupe - Grande-Terre and Basse-Terre - onshore','Guadeloupe - onshore - Basse-Terre and Grande-Terre.',15.88,16.55,-61.85,-61.15,0); INSERT INTO "extent" VALUES('EPSG','2893','Guadeloupe - La Desirade - onshore','Guadeloupe - onshore - La Desirade.',16.26,16.38,-61.13,-60.97,0); INSERT INTO "extent" VALUES('EPSG','2894','Guadeloupe - Marie-Galante - onshore','Guadeloupe - onshore - Marie-Galante.',15.8,16.05,-61.39,-61.13,0); INSERT INTO "extent" VALUES('EPSG','2895','Guadeloupe - Les Saintes - onshore','Guadeloupe - onshore - Les Saintes.',15.8,15.94,-61.68,-61.52,0); INSERT INTO "extent" VALUES('EPSG','2896','Asia - Middle East - Israel, Palestine Territory, Turkey - offshore','Israel and Palestine Territory - offshore Mediterranean Sea; Türkiye (Turkey) - offshore Black Sea.',31.35,43.45,28.03,41.47,0); INSERT INTO "extent" VALUES('EPSG','2897','Asia - Middle East - Israel and Palestine Territory offshore','Israel and Palestine Territory - offshore Mediterranean Sea.',31.33,33.1,33.5,35.1,1); INSERT INTO "extent" VALUES('EPSG','2898','Germany - Berlin','Germany - Berlin.',52.33,52.65,13.09,13.76,0); INSERT INTO "extent" VALUES('EPSG','2899','Australia - 126°E to 132°E, 8°S to 12°S (SC52) onshore','Australia - onshore mainland between 8°S and 12°S and 126°E and 132°E.',-12.0,-11.07,131.02,132.0,0); INSERT INTO "extent" VALUES('EPSG','2900','Australia - 132°E to 138°E, 8°S to 12°S (SC53) onshore','Australia - onshore mainland between 8°S and 12°S and 132°E and 138°E.',-12.0,-10.92,132.0,136.83,0); INSERT INTO "extent" VALUES('EPSG','2901','Australia - 138°E to 144°E, 8°S to 12°S (SC54) onshore','Australia - onshore mainland between 8°S and 12°S and 138°E and 144°E.',-12.0,-10.65,141.77,143.31,0); INSERT INTO "extent" VALUES('EPSG','2902','Australia - 120°E to 126°E, 12°S to 16°S (SD51) onshore','Australia - onshore mainland between 12°S and 16°S and 120°E and 126°E.',-16.0,-13.87,124.17,126.0,0); INSERT INTO "extent" VALUES('EPSG','2903','Australia - 126°E to 132°E, 12°S to 16°S (SD52) onshore','Australia - onshore mainland between 12°S and 16°S and 126°E and 132°E.',-16.0,-12.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2904','Australia - 132°E to 138°E, 12°S to 16°S (SD53) onshore','Australia - onshore mainland between 12°S and 16°S and 132°E and 138°E.',-16.0,-12.0,132.0,137.28,0); INSERT INTO "extent" VALUES('EPSG','2905','Australia - 138°E to 144°E, 12°S to 16°S (SD54) onshore','Australia - onshore mainland between 12°S and 16°S and 138°E and 144°E.',-16.0,-12.0,141.34,144.01,0); INSERT INTO "extent" VALUES('EPSG','2906','Australia - 144°E to 150°E, 12°S to 16°S (SD55) onshore','Australia - onshore mainland between 12°S and 16°S and 144°E and 150°E.',-16.0,-14.01,144.0,145.49,0); INSERT INTO "extent" VALUES('EPSG','2907','Australia - 114°E to 120°E, 16°S to 20°S (SE50) onshore','Australia - onshore mainland between 16°S and 20°S and 114°E and 120°E.',-20.0,-19.88,118.94,120.0,0); INSERT INTO "extent" VALUES('EPSG','2908','Australia - 120°E to 126°E, 16°S to 20°S (SE51) onshore','Australia - onshore mainland between 16°S and 20°S and 120°E and 126°E.',-20.0,-16.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','2909','Australia - 126°E to 132°E, 16°S to 20°S (SE52)','Australia - between 16°S and 20°S and 126°E and 132°E.',-20.0,-16.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2910','Australia - 132°E to 138°E, 16°S to 20°S (SE53) onshore','Australia - onshore between 16°S and 20°S and 132°E and 138°E.',-20.0,-16.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2911','Australia - 138°E to 144°E, 16°S to 20°S (SE54) onshore','Australia - onshore mainland between 16°S and 20°S and 138°E and 144°E.',-20.0,-16.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2912','Australia - 144°E to 150°E, 16°S to 20°S (SE55) onshore','Australia - onshore mainland between 16°S and 20°S and 144°E and 150°E.',-20.0,-16.0,144.0,148.97,0); INSERT INTO "extent" VALUES('EPSG','2913','Australia - 108°E to 114°E, 20°S to 24°S (SF49) onshore','Australia - onshore mainland between 20°S and 24°S and 108°E and 114°E.',-24.0,-21.8,113.39,114.0,0); INSERT INTO "extent" VALUES('EPSG','2914','Australia - 114°E to 120°E, 20°S to 24°S (SF50) onshore','Australia - onshore mainland between 20°S and 24°S and 114°E and 120°E.',-24.0,-20.0,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','2915','Australia - 120°E to 126°E, 20°S to 24°S (SF51)','Australia - between 20°S and 24°S and 120°E and 126°E.',-24.0,-20.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','2916','Australia - 126°E to 132°E, 20°S to 24°S (SF52)','Australia - between 20°S and 24°S and 126°E and 132°E.',-24.0,-20.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2917','Australia - 132°E to 138°E, 20°S to 24°S (SF53)','Australia - between 20°S and 24°S and 132°E and 138°E.',-24.0,-20.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2918','Australia - 138°E to 144°E, 20°S to 24°S (SF54)','Australia - between 20°S and 24°S and 138°E and 144°E.',-24.0,-20.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2919','Australia - 144°E to 150°E, 20°S to 24°S (SF55) onshore','Australia - onshore mainland between 20°S and 24°S and 144°E and 150°E.',-24.0,-20.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','2920','Australia - 150°E to 156°E, 20°S to 24°S (SF56) onshore','Australia - onshore mainland between 20°S and 24°S and 150°E and 156°E.',-24.0,-22.0,150.0,151.82,0); INSERT INTO "extent" VALUES('EPSG','2921','Australia - 108°E to 114°E, 24°S to 28°S (SG49) onshore','Australia - onshore mainland between 24°S and 28°S and 108°E and 114°E.',-27.44,-24.0,112.85,114.0,0); INSERT INTO "extent" VALUES('EPSG','2922','Australia - 114°E to 120°E, 24°S to 28°S (SG50) onshore','Australia - onshore mainland between 24°S and 28°S and 114°E and 120°E.',-28.0,-24.0,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','2923','Australia - 120°E to 126°E, 24°S to 28°S (SG51)','Australia - between 24°S and 28°S and 120°E and 126°E.',-28.0,-24.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','2924','Australia - 126°E to 132°E, 24°S to 28°S (SG52)','Australia - between 24°S and 28°S and 126°E and 132°E.',-28.0,-24.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2925','Australia - 132°E to 138°E, 24°S to 28°S (SG53)','Australia - between 24°S and 28°S and 132°E and 138°E.',-28.0,-24.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2926','Australia - 138°E to 144°E, 24°S to 28°S (SG54)','Australia - between 24°S and 28°S and 138°E and 144°E.',-28.0,-24.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2927','Australia - 144°E to 150°E, 24°S to 28°S (SG55)','Australia - between 24°S and 28°S and 144°E and 150°E.',-28.0,-24.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','2928','Australia - 150°E to 156°E, 24°S to 28°S (SG56) onshore','Australia - onshore mainland between 24°S and 28°S and 150°E and 156°E.',-28.0,-24.0,150.0,153.6,0); INSERT INTO "extent" VALUES('EPSG','2929','Australia - 108°E to 114°E, 28°S to 32°S (SH49)','Australia - between 28°S and 32°S and 108°E and 114°E.',-32.0,-28.0,108.0,114.0,1); INSERT INTO "extent" VALUES('EPSG','2930','Australia - 114°E to 120°E, 28°S to 32°S (SH50) onshore','Australia - onshore mainland between 28°S and 32°S and 114°E and 120°E.',-32.0,-28.0,114.07,120.0,0); INSERT INTO "extent" VALUES('EPSG','2931','Australia - 120°E to 126°E, 28°S to 32°S (SH51)','Australia - between 28°S and 32°S and 120°E and 126°E.',-32.0,-28.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','2932','Australia - 126°E to 132°E, south of 28°S (SH52) onshore','Australia - onshore mainland south of 28°S and between 126°E and 132°E.',-32.37,-28.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','2933','Australia - 132°E to 138°E, 28°S to 32°S (SH53) onshore','Australia - onshore between 28°S and 32°S and 132°E and 138°E.',-32.0,-28.0,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2934','Australia - 138°E to 144°E, 28°S to 32°S (SH54)','Australia - between 28°S and 32°S and 138°E and 144°E.',-32.0,-28.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2935','Australia - 144°E to 150°E, 28°S to 32°S (SH55)','Australia - between 28°S and 32°S and 144°E and 150°E.',-32.0,-28.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','2936','Australia - 150°E to 156°E, 28°S to 32°S (SH56) onshore','Australia - onshore mainland between 28°S and 32°S and 150°E and 156°E.',-32.0,-28.0,150.0,153.69,0); INSERT INTO "extent" VALUES('EPSG','2937','Australia - 114°E to 120°E, 32°S to 36°S (SI50) onshore','Australia - onshore mainland between 32°S and 36°S and 114°E and 120°E.',-35.19,-32.0,114.89,120.0,0); INSERT INTO "extent" VALUES('EPSG','2938','Australia - 120°E to 126°E, 32°S to 36°S (SI51) onshore','Australia - onshore mainland between 32°S and 36°S and 120°E and 126°E.',-34.16,-32.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','2939','Australia - 132°E to 138°E, 32°S to 36°S (SI53) onshore','Australia - onshore mainland and Kangaroo Island between 32°S and 36°S and 132°E and 138°E.',-36.0,-32.0,132.08,138.0,0); INSERT INTO "extent" VALUES('EPSG','2940','Australia - 138°E to 144°E, 32°S to 36°S (SI54) onshore','Australia - onshore between 32°S and 36°S and 138°E and 144°E.',-36.0,-32.0,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2941','Australia - 144°E to 150°E, 32°S to 36°S (SI55)','Australia - between 32°S and 36°S and 144°E and 150°E.',-36.0,-32.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','2942','Australia - 150°E to 156°E, 32°S to 36°S (SI56) onshore','Australia - onshore mainland between 32°S and 36°S and 150°E and 156°E.',-36.0,-32.0,150.0,152.66,0); INSERT INTO "extent" VALUES('EPSG','2943','Australia - 132°E to 138°E, 36°S to 40°S (SJ53) onshore','Australia - onshore Kangaroo Island between 36°S and 40°S and 132°E and 138°E.',-36.14,-36.0,136.57,137.68,0); INSERT INTO "extent" VALUES('EPSG','2944','Australia - 138°E to 144°E, 36°S to 40°S (SJ54) onshore','Australia - onshore mainland between 36°S and 40°S and 138°E and 144°E.',-38.91,-36.0,139.38,144.0,0); INSERT INTO "extent" VALUES('EPSG','2945','Australia - 144°E to 150°E, 36°S to 40°S (SJ55) onshore','Australia - onshore mainland between 36°S and 40°S and 144°E and 150°E.',-39.2,-36.0,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','2946','Australia - 150°E to 156°E, 36°S to 40°S (SJ56) onshore','Australia - onshore mainland between 36°S and 40°S and 150°E and 156°E.',-37.57,-36.0,150.0,150.22,0); INSERT INTO "extent" VALUES('EPSG','2947','Australia - Tasmania mainland onshore','Australia - Tasmania mainland - onshore.',-43.7,-40.24,144.55,148.44,0); INSERT INTO "extent" VALUES('EPSG','2948','USA - CONUS east of 89°W - onshore','United States (USA) - CONUS east of 89°W - onshore - Alabama; Connecticut; Delaware; Florida; Georgia; llinois; Indiana; Kentucky; Maine; Maryland; Massachusetts; Michigan; Mississippi; New Hampshire; New Jersey; New York; North Carolina; Ohio; Pennsylvania; Rhode Island; South Carolina; Tennessee; Vermont; Virginia; West Virginia; Wisconsin.',24.41,48.32,-89.0,-66.91,0); INSERT INTO "extent" VALUES('EPSG','2949','USA - CONUS 89°W-107°W - onshore','United States (USA) - CONUS between 89°W and 107°W - onshore - Arkansas; Colorado; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; New Mexico; North Dakota; Oklahoma; South Dakota; Tennessee; Texas; Wisconsin; Wyoming.',25.83,49.38,-107.0,-89.0,0); INSERT INTO "extent" VALUES('EPSG','2950','USA - CONUS west of 107°W - onshore','United States (USA) - CONUS west of 107°W - onshore - Arizona; California; Colorado; Idaho; Montana; Nevada; New Mexico; Oregon; Utah; Washington; Wyoming.',31.33,49.05,-124.79,-107.0,0); INSERT INTO "extent" VALUES('EPSG','2951','Japan - 120°E to 126°E onshore','Japan - onshore west of 126°E.',23.98,24.94,123.62,125.51,0); INSERT INTO "extent" VALUES('EPSG','2952','Japan - 126°E to 132°E onshore','Japan - onshore between 126°E and 132°E.',24.4,34.9,126.63,132.0,0); INSERT INTO "extent" VALUES('EPSG','2953','Japan - 132°E to 138°E onshore','Japan - onshore between 132°E and 138°E.',20.37,37.58,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','2954','Japan - 138°E to 144°E onshore','Japan - onshore between 138°E and 144°E.',24.67,45.54,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','2955','Japan - 144°E to 150°E onshore','Japan - onshore east of 144°E.',42.84,44.4,144.0,145.87,0); INSERT INTO "extent" VALUES('EPSG','2956','Kuwait - north of 29.25°N','Kuwait - onshore north of a line between Al Jahra'' and the Kuwait/Iraq/Saudi Arabia border tripoint.',29.1,30.09,46.54,48.42,0); INSERT INTO "extent" VALUES('EPSG','2957','Kuwait - south of 29.25°N','Kuwait - onshore south of a line between Al Jahra'' and the Kuwait/Iraq/Saudi Arabia border tripoint.',28.53,29.45,46.54,48.48,0); INSERT INTO "extent" VALUES('EPSG','2958','USA - Maine - CS2000 - W','United States (USA) - Maine west of approximately 69°40''W. The area is bounded by the following: Beginning at the point determined by the intersection of the Maine State line and the County Line between Aroostook and Somerset Counties, thence following the Somerset County line Easterly to the Northwest corner of the Somerset and Piscataquis county line, thence Southerly along this county line to the northeast corner of the Athens town line, thence westerly along the town line between Brighton Plantation and Athens to the westerly corner of Athens, and continuing southerly to the southwest corner of the town of Athens where it meets the Cornville town line, thence westerly along the Cornville - Solon town line to the intersection of the Cornville - Madison town line, thence southerly and westerly following the Madison town line to the intersection of the Norridgewock - Skowhegan town line, thence southerly along the Skowhegan town line to the Fairfield town line, thence easterly along the Fairfield town line to the Clinton town line (being determined by the Kennebec River), thence southerly along the Kennebec River to the Augusta city line, thence easterly along the city line to the Windsor town line, thence southerly along the Augusta - Windsor town line to the northwest corner of the Lincoln County line, thence southerly along the westerly Lincoln county line to the boundary of the State of Maine as determined by Maritime law, thence following the State boundary on the westerly side of the state to the point of beginning.',43.07,46.58,-71.09,-69.6,0); INSERT INTO "extent" VALUES('EPSG','2959','USA - Maine - CS2000 - C','United States (USA) - Maine between approximately 69°40''W and 68°25''W. The area is bounded by the following: Beginning at the point determined by the intersection of the Maine State line and the County Line between Aroostook and Somerset Counties, thence northeasterly along the state line to the intersection of the Fort Kent - Frenchville town line, thence southerly along this town line to the intersection with the New Canada Plantation - T17 R5 WELS town line, thence continuing southerly along town lines to the northeast corner of Penobscot County, thence continuing southerly along the Penobscot County line to the intersection of the Woodville - Mattawamkeag town line (being determined by the Penobscot River), thence along the Penobscot River to the Enfield - Lincoln town line, thence southeasterly along the Enfield - Lincoln town line and the Enfield - Lowell town line to the Passadumkeag - Edinburg town line, thence south-southeasterly along town lines to the intersection of the Hancock County line, thence southerly along the county line to the intersection of the Otis - Mariaville town line, thence southerly along the Otis - Mariaville town line to the Ellsworth city line, thence southerly along the Ellsworth city line to the intersection of the Surry - Trenton town line, thence southerly along the easterly town lines of Surry, Blue Hill, Brooklin, Deer Isle, and Stonington to the Knox County line, thence following the Knox County line to the boundary of the State of Maine as determined by Maritime law, thence following the State boundary westerly to the intersection of the Sagadahoc - Lincoln county line, thence northerly along the easterly boundary of the Maine 2000 West Zone, as defined, to the point of beginning.',43.75,47.47,-70.03,-68.33,0); INSERT INTO "extent" VALUES('EPSG','2960','USA - Maine - CS2000 - E','United States (USA) - Maine east of approximately 68°25''W. The area is bounded by the following: Beginning at the point determined by the intersection of the Maine State line and the Fort Kent - Frenchville town line, thence continuing easterly and then southerly along the state line to the boundary of the State of Maine as determined by Maritime law, thence following the State boundary westerly to the intersection of the Knox and Hancock County line, thence northerly along the easterly boundary of the Maine 2000 Central Zone, as defined, to the point of beginning.',44.18,47.37,-68.58,-66.91,0); INSERT INTO "extent" VALUES('EPSG','2961','Ireland - Corrib and Errigal','Ireland - offshore - Corrib and Errigal fields.',53.75,55.76,-12.5,-9.49,0); INSERT INTO "extent" VALUES('EPSG','2962','Brazil - Santos','Brazil - offshore - Santos basin.',-28.41,-22.66,-48.8,-40.2,0); INSERT INTO "extent" VALUES('EPSG','2963','Brazil - Campos','Brazil - offshore - Campos basin.',-25.91,-20.45,-42.04,-37.11,0); INSERT INTO "extent" VALUES('EPSG','2964','Brazil - Espirito Santo and Mucuri','Brazil - offshore - Espirito Santo and Mucuri basins.',-22.04,-17.59,-40.37,-35.18,0); INSERT INTO "extent" VALUES('EPSG','2965','Brazil - Pelotas','Brazil - offshore - Pelotas basin.',-35.71,-28.11,-53.38,-44.71,0); INSERT INTO "extent" VALUES('EPSG','2966','Brazil - offshore 18°S to 34°S','Brazil - offshore between 18°S and 34°S.',-34.0,-18.0,-53.38,-35.19,0); INSERT INTO "extent" VALUES('EPSG','2967','Mauritania - north coast','Mauritania - coastal area north of Cape Timiris.',19.37,21.34,-17.08,-15.88,0); INSERT INTO "extent" VALUES('EPSG','2968','Mauritania - central coast','Mauritania - coastal area south of Cape Timiris.',16.81,19.41,-16.57,-15.59,0); INSERT INTO "extent" VALUES('EPSG','2969','Mauritania - east of 6°W','Mauritania - east of 6°W.',15.49,25.74,-6.0,-4.8,0); INSERT INTO "extent" VALUES('EPSG','2970','Mauritania - 12°W to 6°W','Mauritania - between 12°W and 6°W.',14.75,27.3,-12.0,-6.0,0); INSERT INTO "extent" VALUES('EPSG','2971','Mauritania - west of 12°W onshore','Mauritania - onshore west of 12°W.',14.72,23.46,-17.08,-12.0,0); INSERT INTO "extent" VALUES('EPSG','2972','Mauritania - Nouakchutt','Mauritania - Nouakchutt.',17.89,18.25,-16.11,-15.83,0); INSERT INTO "extent" VALUES('EPSG','2973','USA - CONUS south of 41°N, west of 112°W - onshore','United States (USA) - CONUS onshore south of 41°N and west of 112°W - Arizona west of 112°W; California and Nevada south of 41°N; Utah south of 41°N and west of 112°W.',31.64,41.0,-124.45,-112.0,0); INSERT INTO "extent" VALUES('EPSG','2974','USA - CONUS south of 41°N, 112°W to 95°W - onshore','United States (USA) - CONUS onshore south of 41°N and between 112°W and 95°W - Colorado and New Mexico; Arizona east of 112°W; Utah south of 41°N and east of 112°W; Nebraska south of 41°N; Iowa south of 41°N and west of 95°W; Kansas, Missouri, Oklahoma and Texas west of 95°W.',25.83,41.01,-112.0,-94.99,0); INSERT INTO "extent" VALUES('EPSG','2975','USA - CONUS south of 41°N, 95°W to 78°W - onshore','United States (USA) - CONUS onshore south of 41°N and between 95°W and 78°W - Alabama, Arkansas, Florida, Georgia, Kentucky, Louisiana, Mississippi, South Carolina and Tennessee; Kansas, Missouri, Oklahoma and Texas east of 95°W; Iowa south of 41°N and east of 95°W; Illinois, Indiana and Ohio south of 41°N; Pennsylvania south of 41°N and west of 78°W; Maryland, North Carolina, Virginia and West Virginia west of 78°W.',24.41,41.01,-95.0,-77.99,0); INSERT INTO "extent" VALUES('EPSG','2976','USA - CONUS south of 41°N, east of 78°W - onshore','United States (USA) - CONUS onshore - south of 41°N and east of 78°W - Delaware; Maryland, North Carolina, Virginia and West Virginia east of 78°W; Pennsylvania south of 41°N and east of 78°W; New Jersey and New York south of 41°N.',33.84,41.01,-78.0,-71.9,0); INSERT INTO "extent" VALUES('EPSG','2977','USA - CONUS north of 41°N, west of 112°W - onshore','United States (USA) - CONUS onshore north of 41°N and west of 112°W - Oregon and Washington; California and Nevada north of 41°N; Utah north of 41°N and west of 112°W; Idaho and Montana west of 112°W.',41.0,49.05,-124.79,-112.0,0); INSERT INTO "extent" VALUES('EPSG','2978','USA - CONUS north of 41°N, 112°W to 95°W','United States (USA) - CONUS north of 41°N and between 112°W and 95°W - North Dakota, South Dakota and Wyoming; Idaho and Montana east of 112°W; Utah north of 41°N and east of 112°W; Nebraska north of 41°N; Iowa north of 41°N and west of 95°W; Minnesota west of 95°W.',41.0,49.38,-112.0,-95.0,0); INSERT INTO "extent" VALUES('EPSG','2979','USA - CONUS north of 41°N, 95°W to 78°W','United States (USA) - CONUS north of 41°N and between 95°W and 78°W - Michigan and Wisconsin; Minnesota east of 95°W; Iowa north of 41°N and east of 95°W; Illinois, Indiana and Ohio north of 41°N; Pennsylvania north of 41°N and west of 78°W; New York west of 78°W.',41.0,49.37,-95.0,-77.99,0); INSERT INTO "extent" VALUES('EPSG','2980','USA - CONUS north of 41°N, east of 78°W - onshore','United States (USA) - CONUS onshore north of 41°N and east of 78°W - Connecticut, Maine, Massachusetts, New Hampshire, Rhode Island and Vermont; New Jersey north of 41°N; New York and Pennsylvania north of 41°N and east of 78°W.',41.0,47.47,-78.0,-66.91,0); INSERT INTO "extent" VALUES('EPSG','2981','Nigeria - offshore','Nigeria - offshore.',1.92,6.38,2.66,8.49,0); INSERT INTO "extent" VALUES('EPSG','2982','Pakistan - Karachi','Pakistan - Karachi licence area.',24.69,25.76,66.83,68.0,0); INSERT INTO "extent" VALUES('EPSG','2983','Pakistan - East Sind','Pakistan - East Sind.',24.16,28.61,68.27,71.14,0); INSERT INTO "extent" VALUES('EPSG','2984','Pakistan - Badin and Mehran','Pakistan - Badin and Mehran blocks.',24.0,25.64,67.74,69.87,0); INSERT INTO "extent" VALUES('EPSG','2985','Pakistan - offshore Indus','Pakistan - offshore Indus fan.',21.05,25.39,64.0,68.24,0); INSERT INTO "extent" VALUES('EPSG','2986','Australia - SA','Australia - South Australia.',-38.13,-25.99,128.99,141.01,0); INSERT INTO "extent" VALUES('EPSG','2987','Libya - Amal','Libya - Amal field.',29.1,29.8,20.8,21.4,0); INSERT INTO "extent" VALUES('EPSG','2988','Jersey','Channel Islands - Jersey, Les Ecrehos and Les Minquiers - onshore and offshore.',48.87,49.44,-2.56,-1.81,0); INSERT INTO "extent" VALUES('EPSG','2989','Guernsey','Channel Islands - Guernsey, Alderney, Sark, Herm, Brecqhou, Jethou, Lihou - onshore and offshore.',49.21,49.94,-3.06,-2.03,0); INSERT INTO "extent" VALUES('EPSG','2990','Australia - Brisbane','Australia - Brisbane and surrounding area. Also applicable in other local authorities in south-east Queensland (Gold Coast, Logan, Ipswich, Scenic Rim, Redland, Moreton Bay, Sunshine Coast, Noosa, eastern part of Gympie, eastern part of Fraser Coast) and north-east New South Wales (Tweed, Byron, Lismore, Kyogle, Ballina and Richmond Valley).',-29.36,-24.64,152.37,153.69,0); INSERT INTO "extent" VALUES('EPSG','2991','Antarctica - 60°S to 64°S, 72°W to 60°W (SP19-20)','Antarctica - 60°S to 64°S and 72°W to 60°W.',-64.0,-60.0,-72.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','2992','Antarctica - 60°S to 64°S, 60°W to 48°W (SP21-22)','Antarctica - 60°S to 64°S and 60°W to 48°W.',-64.0,-60.0,-60.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','2993','Antarctica - 60°S to 64°S, 48°W to 36°W (SP23-24)','Antarctica - 60°S to 64°S and 48°W to 36°W.',-64.0,-60.0,-48.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','2994','Antarctica - 64°S to 68°S, 180°W to 168°W (SQ01-02)','Antarctica - 64°S to 68°S and 180°W to 168°W.',-68.0,-64.0,-180.0,-168.0,0); INSERT INTO "extent" VALUES('EPSG','2995','Antarctica - 64°S to 68°S, 72°W to 60°W (SQ19-20)','Antarctica - 64°S to 68°S and 72°W to 60°W.',-68.0,-64.0,-72.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','2996','Antarctica - 64°S to 68°S, 60°W to 48°W (SQ21-22)','Antarctica - 64°S to 68°S and 60°W to 48°W.',-68.0,-64.0,-60.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','2997','Antarctica - 64°S to 68°S, 36°E to 48°E (SQ37-38)','Antarctica - 64°S to 68°S and 36°E to 48°E.',-68.0,-64.0,36.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','2998','Antarctica - 64°S to 68°S, 48°E to 60°E (SQ39-40)','Antarctica - 64°S to 68°S and 48°E to 60°E.',-68.0,-64.0,48.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','2999','Antarctica - 64°S to 68°S, 60°E to 72°E (SQ41-42)','Antarctica - 64°S to 68°S and 60°E to 72°E.',-68.0,-64.0,60.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','3000','Antarctica - 64°S to 68°S, 72°E to 84°E (SQ43-44)','Antarctica - 64°S to 68°S and 72°E to 84°E.',-68.0,-64.0,72.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','3001','Antarctica - 64°S to 68°S, 84°E to 96°E (SQ45-46)','Antarctica - 64°S to 68°S and 84°E to 96°E.',-68.0,-64.0,84.0,96.0,0); INSERT INTO "extent" VALUES('EPSG','3002','Antarctica - 64°S to 68°S, 96°E to 108°E (SQ47-48)','Antarctica - 64°S to 68°S and 96°E to 108°E.',-68.0,-64.0,96.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3003','Antarctica - 64°S to 68°S, 108°E to 120°E (SQ49-50)','Antarctica - 64°S to 68°S and 108°E to 120°E.',-68.0,-64.0,108.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3004','Antarctica - 64°S to 68°S, 120°E to 132°E (SQ51-52)','Antarctica - 64°S to 68°S and 120°E to 132°E.',-68.0,-64.0,120.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','3005','Antarctica - 64°S to 68°S, 132°E to 144°E (SQ53-54)','Antarctica - 64°S to 68°S and 132°E to 144°E.',-68.0,-64.0,132.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','3006','Antarctica - 64°S to 68°S, 144°E to 156°E (SQ55-56)','Antarctica - 64°S to 68°S and 144°E to 156°E.',-68.0,-64.0,144.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','3007','Antarctica - 64°S to 68°S, 156°E to 168°E (SQ57-58)','Antarctica - 64°S to 68°S and 156°E to 168°E.',-68.0,-64.0,156.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','3008','Antarctica - 68°S to 72°S, 108°W to 96°W (SR13-14)','Antarctica - 68°S to 72°S and 108°W to 96°W.',-72.0,-68.0,-108.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','3009','Antarctica - 68°S to 72°S, 96°W to 84°W (SR15-16)','Antarctica - 68°S to 72°S and 96°W to 84°W.',-72.0,-68.0,-96.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','3010','Antarctica - 68°S to 72°S, 84°W to 72°W (SR17-18)','Antarctica - 68°S to 72°S and 84°W to 72°W.',-72.0,-68.0,-84.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3011','Antarctica - 68°S to 72°S, 72°W to 60°W (SR19-20)','Antarctica - 68°S to 72°S and 72°W to 60°W.',-72.0,-68.0,-72.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3012','Antarctica - 68°S to 72°S, 24°W to 12°W (SR27-28)','Antarctica - 68°S to 72°S and 24°W to 12°W.',-72.0,-68.0,-24.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','3013','Antarctica - 68°S to 72°S, 12°W to 0°W (SR29-30)','Antarctica - 68°S to 72°S and 12°W to 0°W.',-72.0,-68.0,-12.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','3014','Antarctica - 68°S to 72°S, 0°E to 12°E (SR31-32)','Antarctica - 68°S to 72°S and 0°E to 12°E.',-72.0,-68.0,0.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','3015','Antarctica - 68°S to 72°S, 12°E to 24°E (SR33-34)','Antarctica - 68°S to 72°S and 12°E to 24°E.',-72.0,-68.0,12.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','3016','Antarctica - 68°S to 72°S, 24°E to 36°E (SR35-36)','Antarctica - 68°S to 72°S and 24°E to 36°E.',-72.0,-68.0,24.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','3017','Antarctica - 68°S to 72°S, 36°E to 48°E (SR37-38)','Antarctica - 68°S to 72°S and 36°E to 48°E.',-72.0,-68.0,36.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','3018','Antarctica - 68°S to 72°S, 48°E to 60°E (SR39-40)','Antarctica - 68°S to 72°S and 48°E to 60°E.',-72.0,-68.0,48.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','3019','Antarctica - 68°S to 72°S, 60°E to 72°E (SR41-42)','Antarctica - 68°S to 72°S and 60°E to 72°E.',-72.0,-68.0,60.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','3020','Antarctica - 68°S to 72°S, 72°E to 84°E (SR43-44)','Antarctica - 68°S to 72°S and 72°E to 84°E.',-72.0,-68.0,72.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','3021','Antarctica - 68°S to 72°S, 84°E to 96°E (SR45-46)','Antarctica - 68°S to 72°S and 84°E to 96°E.',-72.0,-68.0,84.0,96.0,0); INSERT INTO "extent" VALUES('EPSG','3022','Antarctica - 68°S to 72°S, 96°E to 108°E (SR47-48)','Antarctica - 68°S to 72°S and 96°E to 108°E.',-72.0,-68.0,96.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3023','Antarctica - 68°S to 72°S, 108°E to 120°E (SR49-50)','Antarctica - 68°S to 72°S and 108°E to 120°E.',-72.0,-68.0,108.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3024','Antarctica - 68°S to 72°S, 120°E to 132°E (SR51-52)','Antarctica - 68°S to 72°S and 120°E to 132°E.',-72.0,-68.0,120.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','3025','Antarctica - 68°S to 72°S, 132°E to 144°E (SR53-54)','Antarctica - 68°S to 72°S and 132°E to 144°E.',-72.0,-68.0,132.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','3026','Antarctica - 68°S to 72°S, 144°E to 156°E (SR55-56)','Antarctica - 68°S to 72°S and 144°E to 156°E.',-72.0,-68.0,144.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','3027','Antarctica - 68°S to 72°S, 156°E to 168°E (SR57-58)','Antarctica - 68°S to 72°S and 156°E to 168°E.',-72.0,-68.0,156.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','3028','Antarctica - 68°S to 72°S, 168°E to 180°E (SR59-60)','Antarctica - 68°S to 72°S and 168°E to 180°E.',-72.0,-68.0,168.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3029','Antarctica - 72°S to 76°S, 162°W to 144°W (SS04-06)','Antarctica - 72°S to 76°S and 162°W to 144°W.',-76.0,-72.0,-162.0,-144.0,0); INSERT INTO "extent" VALUES('EPSG','3030','Antarctica - 72°S to 76°S, 144°W to 126°W (SS07-09)','Antarctica - 72°S to 76°S and 144°W to 126°W.',-76.0,-72.0,-144.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','3031','Antarctica - 72°S to 76°S, 126°W to 108°W (SS10-12)','Antarctica - 72°S to 76°S and 126°W to 108°W.',-76.0,-72.0,-126.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','3032','Antarctica - 72°S to 76°S, 108°W to 90°W (SS13-15)','Antarctica - 72°S to 76°S and 108°W to 90°W.',-76.0,-72.0,-108.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','3033','Antarctica - 72°S to 76°S, 90°W to 72°W (SS16-18)','Antarctica - 72°S to 76°S and 90°W to 72°W.',-76.0,-72.0,-90.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3034','Antarctica - 72°S to 76°S, 72°W to 54°W (SS19-21)','Antarctica - 72°S to 76°S and 72°W to 54°W.',-76.0,-72.0,-72.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3035','Antarctica - 72°S to 76°S, 36°W to 18°W (SS25-27)','Antarctica - 72°S to 76°S and 36°W to 18°W.',-76.0,-72.0,-36.0,-18.0,0); INSERT INTO "extent" VALUES('EPSG','3036','Antarctica - 72°S to 76°S, 18°W to 0°W (SS28-30)','Antarctica - 72°S to 76°S and 18°W to 0°W.',-76.0,-72.0,-18.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','3037','Antarctica - 72°S to 76°S, 0°E to 18°E (SS31-33)','Antarctica - 72°S to 76°S and 0°E to 18°E.',-76.0,-72.0,0.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','3038','Antarctica - 72°S to 76°S, 18°E to 36°E (SS34-36)','Antarctica - 72°S to 76°S and 18°E to 36°E.',-76.0,-72.0,18.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','3039','Antarctica - 72°S to 76°S, 36°E to 54°E (SS37-39)','Antarctica - 72°S to 76°S and 36°E to 54°E.',-76.0,-72.0,36.0,54.0,0); INSERT INTO "extent" VALUES('EPSG','3040','Antarctica - 72°S to 76°S, 54°E to 72°E (SS40-42)','Antarctica - 72°S to 76°S and 54°E to 72°E.',-76.0,-72.0,54.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','3041','Antarctica - 72°S to 76°S, 72°E to 90°E (SS43-45)','Antarctica - 72°S to 76°S and 72°E to 90°E.',-76.0,-72.0,72.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','3042','Antarctica - 72°S to 76°S, 90°E to 108°E (SS46-48)','Antarctica - 72°S to 76°S and 90°E to 108°E.',-76.0,-72.0,90.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3043','Antarctica - 72°S to 76°S, 108°E to 126°E (SS49-51)','Antarctica - 72°S to 76°S and 108°E to 126°E.',-76.0,-72.0,108.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','3044','Antarctica - 72°S to 76°S, 126°E to 144°E (SS52-54)','Antarctica - 72°S to 76°S and 126°E to 144°E.',-76.0,-72.0,126.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','3045','Antarctica - 72°S to 76°S, 144°E to 162°E (SS55-57)','Antarctica - 72°S to 76°S and 144°E to 162°E.',-76.0,-72.0,144.0,162.0,0); INSERT INTO "extent" VALUES('EPSG','3046','Antarctica - 72°S to 76°S, 162°E to 180°E (SS58-60)','Antarctica - 72°S to 76°S and 162°E to 180°E.',-76.0,-72.0,162.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3047','Antarctica - 76°S to 80°S, 180°W to 156°W (ST01-04)','Antarctica - 76°S to 80°S and 180°W to 156°W.',-80.0,-76.0,-180.0,-156.0,0); INSERT INTO "extent" VALUES('EPSG','3048','Antarctica - 76°S to 80°S, 156°W to 132°W (ST05-08)','Antarctica - 76°S to 80°S and 156°W to 132°W.',-80.0,-76.0,-156.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','3049','Antarctica - 76°S to 80°S, 132°W to 108°W (ST09-12)','Antarctica - 76°S to 80°S and 132°W to 108°W.',-80.0,-76.0,-132.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','3050','Antarctica - 76°S to 80°S, 108°W to 84°W (ST13-16)','Antarctica - 76°S to 80°S and 108°W to 84°W.',-80.0,-76.0,-108.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','3051','Antarctica - 76°S to 80°S, 84°W to 60°W (ST17-20)','Antarctica - 76°S to 80°S and 84°W to 60°W.',-80.0,-76.0,-84.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3052','Antarctica - 76°S to 80°S, 60°W to 36°W (ST21-24)','Antarctica - 76°S to 80°S and 60°W to 36°W.',-80.0,-76.0,-60.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','3053','Antarctica - 76°S to 80°S, 36°W to 12°W (ST25-28)','Antarctica - 76°S to 80°S and 36°W to 12°W.',-80.0,-76.0,-36.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','3054','Antarctica - 76°S to 80°S, 12°W to 12°E (ST29-32)','Antarctica - 76°S to 80°S and 12°W to 12°E.',-80.0,-76.0,-12.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','3055','Antarctica - 76°S to 80°S, 12°E to 36°E (ST33-36)','Antarctica - 76°S to 80°S and 12°E to 36°E.',-80.0,-76.0,12.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','3056','Antarctica - 76°S to 80°S, 36°E to 60°E (ST37-40)','Antarctica - 76°S to 80°S and 36°E to 60°E.',-80.0,-76.0,36.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','3057','Antarctica - 76°S to 80°S, 60°E to 84°E (ST41-44)','Antarctica - 76°S to 80°S and 60°E to 84°E.',-80.0,-76.0,60.0,84.0,0); INSERT INTO "extent" VALUES('EPSG','3058','Antarctica - 76°S to 80°S, 84°E to 108°E (ST45-48)','Antarctica - 76°S to 80°S and 84°E to 108°E.',-80.0,-76.0,84.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3059','Antarctica - 76°S to 80°S, 108°E to 132°E (ST49-52)','Antarctica - 76°S to 80°S and 108°E to 132°E.',-80.0,-76.0,108.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','3060','Antarctica - 76°S to 80°S, 132°E to 156°E (ST53-56)','Antarctica - 76°S to 80°S and 132°E to 156°E.',-80.0,-76.0,132.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','3061','Antarctica - 76°S to 80°S, 156°E to 180°E (ST57-60)','Antarctica - 76°S to 80°S and 156°E to 180°E.',-80.0,-76.0,156.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3062','Antarctica - 80°S to 84°S, 180°W to 150°W (SU01-05)','Antarctica - 80°S to 84°S and 180°W to 150°W.',-84.0,-80.0,-180.0,-150.0,0); INSERT INTO "extent" VALUES('EPSG','3063','Antarctica - 80°S to 84°S, 150°W to 120°W (SU06-10)','Antarctica - 80°S to 84°S and 150°W to 120°W.',-84.0,-80.0,-150.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','3064','Antarctica - 80°S to 84°S, 120°W to 90°W (SU11-15)','Antarctica - 80°S to 84°S and 120°W to 90°W.',-84.0,-80.0,-120.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','3065','Antarctica - 80°S to 84°S, 90°W to 60°W (SU16-20)','Antarctica - 80°S to 84°S and 90°W to 60°W.',-84.0,-80.0,-90.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3066','Antarctica - 80°S to 84°S, 60°W to 30°W (SU21-25)','Antarctica - 80°S to 84°S and 60°W to 30°W.',-84.0,-80.0,-60.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','3067','Antarctica - 80°S to 84°S, 30°W to 0°W (SU26-30)','Antarctica - 80°S to 84°S and 30°W to 0°W.',-84.0,-80.0,-30.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','3068','Antarctica - 80°S to 84°S, 0°E to 30°E (SU31-35)','Antarctica - 80°S to 84°S and 0°E to 30°E.',-84.0,-80.0,0.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','3069','Antarctica - 80°S to 84°S, 30°E to 60°E (SU36-40)','Antarctica - 80°S to 84°S and 30°E to 60°E.',-84.0,-80.0,30.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','3070','Antarctica - 80°S to 84°S, 60°E to 90°E (SU41-45)','Antarctica - 80°S to 84°S and 60°E to 90°E.',-84.0,-80.0,60.0,90.0,0); INSERT INTO "extent" VALUES('EPSG','3071','Antarctica - 80°S to 84°S, 90°E to 120°E (SU46-50)','Antarctica - 80°S to 84°S and 90°E to 120°E.',-84.0,-80.0,90.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3072','Antarctica - 80°S to 84°S, 120°E to 150°E (SU51-55)','Antarctica - 80°S to 84°S and 120°E to 150°E.',-84.0,-80.0,120.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','3073','Antarctica - 80°S to 84°S, 150°E to 180° (SU56-60)','Antarctica - 80°S to 84°S and 150°E to 180°E.',-84.0,-80.0,150.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3074','Antarctica - 84°S to 88°S, 180°W to 120°W (SV01-10)','Antarctica - 84°S to 88°S and 180°W to 120°W.',-88.0,-84.0,-180.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','3075','Antarctica - 84°S to 88°S, 120°W to 60°W (SV11-20)','Antarctica - 84°S to 88°S and 120°W to 60°W.',-88.0,-84.0,-120.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3076','Antarctica - 84°S to 88°S, 60°W to 0°W (SV21-30)','Antarctica - 84°S to 88°S and 60°W to 0°W.',-88.0,-84.0,-60.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','3077','Antarctica - 84°S to 88°S, 0°E to 60°E (SV31-40)','Antarctica - 84°S to 88°S and 0°E to 60°E.',-88.0,-84.0,0.0,60.0,0); INSERT INTO "extent" VALUES('EPSG','3078','Antarctica - 84°S to 88°S, 60°E to 120°E (SV41-50)','Antarctica - 84°S to 88°S and 60°E to 120°E.',-88.0,-84.0,60.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3079','Antarctica - 84°S to 88°S, 120°E to 180°E (SV51-60)','Antarctica - 84°S to 88°S and 120°E to 180°E.',-88.0,-84.0,120.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3080','Antarctica - 88°S to 90°S, 180°W to 180°E (SW01-60)','Antarctica - 88°S to 90°S and 180°W to 180°E.',-90.0,-88.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3081','Antarctica - Transantarctic mountains north of 80°S','Antarctica - Transantarctic mountains north of 80°S.',-80.0,-68.6,149.83,174.01,0); INSERT INTO "extent" VALUES('EPSG','3082','Colombia region 1','Colombia - region I (north east). Onshore north of 9°48''N and east of 73°W.',9.8,12.52,-73.0,-71.06,0); INSERT INTO "extent" VALUES('EPSG','3083','Colombia region 2','Colombia - region II (north west). Onshore north of 9°24''N and west of 73°W.',9.39,11.59,-76.08,-73.0,0); INSERT INTO "extent" VALUES('EPSG','3084','Colombia region 3','Colombia - region III - onshore between 8°N and 9°24''N and west of 74°24''W.',8.0,9.4,-77.48,-74.39,0); INSERT INTO "extent" VALUES('EPSG','3085','Colombia region 4','Colombia - region IV - between 5°N and 9°24''N and between 74°24''W and 72°W.',5.0,9.4,-74.4,-71.99,0); INSERT INTO "extent" VALUES('EPSG','3086','Colombia region 5','Colombia - region V - onshore between 5°N and 8°N and west of 74°24''W.',5.0,8.01,-77.92,-74.39,0); INSERT INTO "extent" VALUES('EPSG','3087','Colombia region 6','Colombia - region VI - onshore between 3°N and 5°N and west of 74°24''W.',3.0,5.01,-77.68,-74.39,0); INSERT INTO "extent" VALUES('EPSG','3088','Colombia region 7','Colombia - region VII (south west). Onshore south of 3°N and west of 74°W.',-1.13,3.01,-79.1,-74.0,0); INSERT INTO "extent" VALUES('EPSG','3089','Colombia region 8','Colombia - region VIII (south east). South and east of a line from the intersection of the meridian of 74°W with the southern border, northwards to 3°N, 74°W, westwards to 3°''N, 74°24''W, northwards to 5°N, 74°24''W, eastwards to 5°N, 72°W, and then northwards to the intersection of the meridian of 72°W with the international border.',-4.23,7.1,-74.4,-66.87,0); INSERT INTO "extent" VALUES('EPSG','3090','Colombia - 78°35''W to 75°35''W','Colombia - onshore between 4°30''W and 1°30''W of Bogota (approximately 78°35''W and 75°35''W of Greenwich).',0.03,10.21,-78.59,-75.58,0); INSERT INTO "extent" VALUES('EPSG','3091','Colombia - west of 78°35''W','Colombia - mainland onshore west of 4°30''W of Bogota (approximately 78°35''W of Greenwich).',1.23,2.48,-79.1,-78.58,0); INSERT INTO "extent" VALUES('EPSG','3092','Finland - west of 19.5°E onshore','Finland - onshore west of 19°30''E.',60.08,60.34,19.24,19.5,0); INSERT INTO "extent" VALUES('EPSG','3093','Finland - 19.5°E to 20.5°E onshore','Finland - onshore between 19°30''E and 20°30''E.',59.92,60.48,19.5,20.5,0); INSERT INTO "extent" VALUES('EPSG','3094','Finland - 20.5°E to 21.5°E onshore','Finland - onshore between 20°30''E and 21°30''E.',59.84,69.33,20.5,21.5,0); INSERT INTO "extent" VALUES('EPSG','3095','Finland - 21.5°E to 22.5°E onshore','Finland - onshore between 21°30''E and 22°30''E.',59.76,69.31,21.5,22.5,0); INSERT INTO "extent" VALUES('EPSG','3096','Finland - 22.5°E to 23.5°E onshore','Finland - onshore between 22°30''E and 23°30''E.',59.75,68.74,22.5,23.5,0); INSERT INTO "extent" VALUES('EPSG','3097','Finland - 23.5°E to 24.5°E onshore','Finland - onshore between 23°30''E and 24°30''E.',59.86,68.84,23.5,24.5,0); INSERT INTO "extent" VALUES('EPSG','3098','Finland - 24.5°E to 25.5°E onshore','Finland - onshore between 24°30''E and 25°30''E.',59.94,68.9,24.5,25.5,0); INSERT INTO "extent" VALUES('EPSG','3099','Finland - 25.5°E to 26.5°E onshore','Finland - onshore between 25°30''E and 26°30''E.',60.18,69.94,25.5,26.5,0); INSERT INTO "extent" VALUES('EPSG','3100','Finland - 26.5°E to 27.5°E onshore','Finland - onshore between 26°30''E and 27°30''E.',60.36,70.05,26.5,27.5,0); INSERT INTO "extent" VALUES('EPSG','3101','Finland - 27.5°E to 28.5°E onshore','Finland - onshore between 27°30''E and 28°30''E.',60.42,70.09,27.5,28.5,0); INSERT INTO "extent" VALUES('EPSG','3102','Finland - 28.5°E to 29.5°E','Finland - between 28°30''E and 29°30''E.',60.94,69.81,28.5,29.5,0); INSERT INTO "extent" VALUES('EPSG','3103','Finland - 29.5°E to 30.5°E','Finland - between 29°30''E and 30°30''E.',61.43,67.98,29.5,30.5,0); INSERT INTO "extent" VALUES('EPSG','3104','Finland - east of 30.5°E','Finland - east of 30°30''E.',62.08,64.27,30.5,31.59,0); INSERT INTO "extent" VALUES('EPSG','3105','French Guiana - coastal area','French Guiana - coastal area.',3.43,5.81,-54.45,-51.61,0); INSERT INTO "extent" VALUES('EPSG','3106','Saudi Arabia - east of 54°E','Saudi Arabia - east of 54°E.',19.66,22.77,54.0,55.67,0); INSERT INTO "extent" VALUES('EPSG','3107','Saudi Arabia - onshore west of 36°E','Saudi Arabia - onshore west of 36°E.',26.82,29.38,34.51,36.0,0); INSERT INTO "extent" VALUES('EPSG','3108','Micronesia - Yap Islands','Federated States of Micronesia - Yap Islands.',9.39,9.69,137.99,138.27,0); INSERT INTO "extent" VALUES('EPSG','3109','American Samoa - 2 main island groups','American Samoa - Tutuila, Aunu''u, Ofu, Olesega and Ta''u islands.',-14.43,-14.11,-170.88,-169.38,0); INSERT INTO "extent" VALUES('EPSG','3110','American Samoa - 2 main island groups and Rose Island','American Samoa - Tutuila, Aunu''u, Ofu, Olesega, Ta''u and Rose islands.',-14.59,-14.11,-170.88,-168.09,0); INSERT INTO "extent" VALUES('EPSG','3111','Europe - ED79 tfm','Austria; Finland; Netherlands; Norway; Spain; Sweden, Switzerland.',36.0,71.05,-8.95,31.6,1); INSERT INTO "extent" VALUES('EPSG','3112','South America - 84°W to 78°W, N hemisphere and PSAD56 by country','South America (Ecuador) between 84°W and 78°W, northern hemisphere, onshore.',0.0,1.45,-80.18,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3113','Nigeria - OML 58','Nigeria - block OML 58.',5.05,5.36,6.53,6.84,0); INSERT INTO "extent" VALUES('EPSG','3114','North America - 96°W to 90°W and NAD83 by country','North America - between 96°W and 90°W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin.',25.61,84.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','3115','North America - 90°W to 84°W and NAD83 by country','North America - between 90°W and 84°W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin.',23.97,84.0,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','3116','North America - 84°W to 78°W and NAD83 by country','North America - between 84°W and 78°W - onshore and offshore. Canada - Nunavut; Ontario; Quebec. United States (USA) - Florida; Georgia; Kentucky; Maryland; Michigan; New York; North Carolina; Ohio; Pennsylvania; South Carolina; Tennessee; Virginia; West Virginia.',23.81,84.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3117','North America - 78°W to 72°W and NAD83 by country','North America - between 78°W and 72°W - onshore and offshore. Canada - Nunavut; Ontario; Quebec. United States (USA) - Connecticut; Delaware; Maryland; Massachusetts; New Hampshire; New Jersey; New York; North Carolina; Pennsylvania; Virginia; Vermont.',28.28,84.0,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3118','Grenada - main island - onshore','Grenada - main island - onshore.',11.94,12.29,-61.84,-61.54,0); INSERT INTO "extent" VALUES('EPSG','3119','Greenland - onshore','Greenland - onshore.',59.74,83.67,-73.29,-11.81,0); INSERT INTO "extent" VALUES('EPSG','3120','French Polynesia - west of 150°W','French Polynesia - west of 150°W onshore and offshore.',-26.7,-12.5,-158.13,-150.0,0); INSERT INTO "extent" VALUES('EPSG','3121','French Polynesia - 150°W to 144°W','French Polynesia - between 150°W and 144°W onshore and offshore.',-31.2,-7.29,-150.0,-144.0,0); INSERT INTO "extent" VALUES('EPSG','3122','French Polynesia - 144°W to 138°W','French Polynesia - between 144°W and 138°W onshore and offshore.',-31.24,-4.52,-144.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','3123','French Polynesia - east of 138°W','French Polynesia - east of 138°W.',-26.58,-5.52,-138.0,-131.97,0); INSERT INTO "extent" VALUES('EPSG','3124','French Polynesia - Society Islands - Tahiti','French Polynesia - Society Islands - Tahiti.',-17.93,-17.44,-149.7,-149.09,0); INSERT INTO "extent" VALUES('EPSG','3125','French Polynesia - Society Islands - Moorea','French Polynesia - Society Islands - Moorea.',-17.63,-17.41,-150.0,-149.73,0); INSERT INTO "extent" VALUES('EPSG','3126','French Polynesia - Society Islands - Maupiti','French Polynesia - Society Islands - Maupiti.',-16.57,-16.34,-152.39,-152.14,0); INSERT INTO "extent" VALUES('EPSG','3127','French Polynesia - Marquesas Islands - Ua Huka','French Polynesia - Marquesas Islands - Ua Huka.',-9.0,-8.81,-139.66,-139.44,0); INSERT INTO "extent" VALUES('EPSG','3128','French Polynesia - Marquesas Islands - Ua Pou','French Polynesia - Marquesas Islands - Ua Pou.',-9.57,-9.27,-140.21,-139.95,0); INSERT INTO "extent" VALUES('EPSG','3129','French Polynesia - Marquesas Islands - Nuku Hiva, Ua Huka and Ua Pou','French Polynesia - Marquesas Islands - Nuku Hiva, Ua Huka and Ua Pou.',-9.57,-8.72,-140.31,-139.44,0); INSERT INTO "extent" VALUES('EPSG','3130','French Polynesia - Marquesas Islands - Hiva Oa and Tahuata','French Polynesia - Marquesas Islands - Hiva Oa and Tahuata.',-10.08,-9.64,-139.23,-138.75,0); INSERT INTO "extent" VALUES('EPSG','3131','French Polynesia - Marquesas Islands - Hiva Oa','French Polynesia - Marquesas Islands - Hiva Oa.',-9.89,-9.64,-139.23,-138.75,0); INSERT INTO "extent" VALUES('EPSG','3132','French Polynesia - Marquesas Islands - Tahuata','French Polynesia - Marquesas Islands - Tahuata.',-10.08,-9.86,-139.19,-138.98,0); INSERT INTO "extent" VALUES('EPSG','3133','French Polynesia - Marquesas Islands - Fatu Hiva','French Polynesia - Marquesas Islands - Fatu Hiva.',-10.6,-10.36,-138.75,-138.54,0); INSERT INTO "extent" VALUES('EPSG','3134','French Polynesia - Society Islands - main islands','French Polynesia - Society Islands - Bora Bora, Huahine, Maupiti, Moorea, Raiatea, Tahaa and Tahiti.',-17.93,-16.17,-152.39,-149.09,0); INSERT INTO "extent" VALUES('EPSG','3135','French Polynesia - Society Islands - Huahine','French Polynesia - Society Islands - Huahine.',-16.87,-16.63,-151.11,-150.89,0); INSERT INTO "extent" VALUES('EPSG','3136','French Polynesia - Society Islands - Raiatea','French Polynesia - Society Islands - Raiatea.',-16.96,-16.68,-151.55,-151.3,0); INSERT INTO "extent" VALUES('EPSG','3137','French Polynesia - Society Islands - Bora Bora','French Polynesia - Society Islands - Bora Bora.',-16.62,-16.39,-151.86,-151.61,0); INSERT INTO "extent" VALUES('EPSG','3138','French Polynesia - Society Islands - Tahaa','French Polynesia - Society Islands - Tahaa.',-16.72,-16.5,-151.63,-151.36,0); INSERT INTO "extent" VALUES('EPSG','3139','Australia - New South Wales','Australia - New South Wales.',-37.53,-28.15,140.99,153.69,0); INSERT INTO "extent" VALUES('EPSG','3140','Iran - South Pars block 11','Iran - South Pars field phase 11.',26.46,26.64,52.22,52.41,0); INSERT INTO "extent" VALUES('EPSG','3141','Iran - Tombak LNG plant','Iran - Tombak LNG plant.',27.63,27.81,52.09,52.26,0); INSERT INTO "extent" VALUES('EPSG','3142','Libya - Sirte NC192','Libya - Sirte Basin licence NC192.',27.5,28.07,21.25,21.59,0); INSERT INTO "extent" VALUES('EPSG','3143','Trinidad and Tobago - Trinidad - onshore','Trinidad and Tobago - Trinidad - onshore.',9.99,10.9,-61.98,-60.85,0); INSERT INTO "extent" VALUES('EPSG','3144','French Guiana - east of 54°W','French Guiana - east of 54°W, onshore and offshore.',2.17,8.88,-54.0,-49.45,0); INSERT INTO "extent" VALUES('EPSG','3145','French Guiana - west of 54°W','French Guiana - west of 54°W.',2.11,5.69,-54.61,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3146','French Guiana - onshore','French Guiana - onshore.',2.11,5.81,-54.61,-51.61,0); INSERT INTO "extent" VALUES('EPSG','3147','Congo DR (Zaire) - Katanga','The Democratic Republic of the Congo (Zaire) - Katanga.',-13.46,-4.99,21.74,30.78,0); INSERT INTO "extent" VALUES('EPSG','3148','Congo DR (Zaire) - Kasai - SE','The Democratic Republic of the Congo (Zaire) - Kasai - south of 5°S and east of 21°30''E.',-7.31,-5.01,21.5,26.26,0); INSERT INTO "extent" VALUES('EPSG','3149','Congo DR (Zaire) - 6th parallel south','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse.',-7.36,-3.29,12.17,29.64,0); INSERT INTO "extent" VALUES('EPSG','3150','Congo DR (Zaire) - 11°E to 13°E onshore','The Democratic Republic of the Congo (Zaire) - onshore west of 13°E.',-6.04,-4.67,12.17,13.01,0); INSERT INTO "extent" VALUES('EPSG','3151','Congo DR (Zaire) - 13°E to 15°E','The Democratic Republic of the Congo (Zaire) - between 13°E to 15°E.',-5.91,-4.28,13.0,15.01,0); INSERT INTO "extent" VALUES('EPSG','3152','Congo DR (Zaire) - 15°E to 17°E','The Democratic Republic of the Congo (Zaire) - between 15°E to 17°E.',-7.31,-1.13,14.99,17.01,0); INSERT INTO "extent" VALUES('EPSG','3153','Congo DR (Zaire) - 17°E to 19°E','The Democratic Republic of the Congo (Zaire) - between 17°E to 19°E.',-8.11,4.77,17.0,19.01,0); INSERT INTO "extent" VALUES('EPSG','3154','Congo DR (Zaire) - 19°E to 21°E','The Democratic Republic of the Congo (Zaire) - between 19°E to 21°E.',-8.0,5.16,18.99,21.01,0); INSERT INTO "extent" VALUES('EPSG','3155','Congo DR (Zaire) - 21°E to 23°E','The Democratic Republic of the Congo (Zaire) - between 21°E to 23°E.',-11.24,4.84,20.99,23.01,0); INSERT INTO "extent" VALUES('EPSG','3156','Congo DR (Zaire) - 23°E to 25°E','The Democratic Republic of the Congo (Zaire) - between 23°E to 25°E.',-11.47,5.12,22.99,25.01,0); INSERT INTO "extent" VALUES('EPSG','3157','Congo DR (Zaire) - 25°E to 27°E','The Democratic Republic of the Congo (Zaire) - between 25°E to 27°E.',-11.99,5.39,24.99,27.0,0); INSERT INTO "extent" VALUES('EPSG','3158','Congo DR (Zaire) - 27°E to 29°E','The Democratic Republic of the Congo (Zaire) - between 27°E to 29°E.',-13.39,5.21,26.99,29.01,0); INSERT INTO "extent" VALUES('EPSG','3159','Congo DR (Zaire) - east of 29°E','The Democratic Republic of the Congo (Zaire) - east of 29°E.',-13.46,4.69,29.0,31.31,0); INSERT INTO "extent" VALUES('EPSG','3160','Congo DR (Zaire) - 6th parallel south 15°E to 17°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse between 15°E and 17°E.',-5.87,-3.29,15.0,17.0,0); INSERT INTO "extent" VALUES('EPSG','3161','Congo DR (Zaire) - 6th parallel south 17°E to 19°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel traverse between 17°E and 19°E.',-5.38,-3.4,17.0,19.0,0); INSERT INTO "extent" VALUES('EPSG','3162','Congo DR (Zaire) - 6th parallel south 19°E to 21°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse between 19°E and 21°E.',-7.29,-4.01,19.0,21.0,0); INSERT INTO "extent" VALUES('EPSG','3163','Congo DR (Zaire) - 6th parallel south 21°E to 23°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse between 21°E and 23°E.',-7.31,-5.31,21.0,23.0,0); INSERT INTO "extent" VALUES('EPSG','3164','Congo DR (Zaire) - 6th parallel south 23°E to 25°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse between 23°E and 25°E.',-6.99,-5.01,23.0,25.0,0); INSERT INTO "extent" VALUES('EPSG','3165','Congo DR (Zaire) - 6th parallel south 25°E to 27°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse between 25°E and 27°E.',-7.26,-4.23,25.0,27.0,0); INSERT INTO "extent" VALUES('EPSG','3166','Congo DR (Zaire) - 6th parallel south 27°E to 29°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse between 27°E and 29°E.',-7.36,-4.24,27.0,29.0,0); INSERT INTO "extent" VALUES('EPSG','3167','Congo DR (Zaire) - 6th parallel south 29°E to 31°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse and east of 29°E.',-6.04,-4.34,29.0,29.64,0); INSERT INTO "extent" VALUES('EPSG','3168','Poland - west of 18°E','Poland - west of 18°E.',49.98,54.85,14.14,18.0,1); INSERT INTO "extent" VALUES('EPSG','3169','Poland - 18°E to 24°E','Poland - between 18°E and 24°E.',49.03,55.95,18.0,24.0,1); INSERT INTO "extent" VALUES('EPSG','3170','Poland - east of 24°E','Poland - east of 24°E.',50.4,50.9,24.0,24.16,1); INSERT INTO "extent" VALUES('EPSG','3171','Congo DR (Zaire) - Bas Congo','The Democratic Republic of the Congo (Zaire) - Lower Congo (Bas Congo)',-6.04,-4.28,12.17,16.28,0); INSERT INTO "extent" VALUES('EPSG','3172','Pacific Ocean','Pacific Ocean - American Samoa, Antarctica, Australia, Brunei Darussalam, Cambodia, Canada, Chile, China, China - Hong Kong, China - Macao, Cook Islands, Ecuador, Fiji, French Polynesia, Guam, Indonesia, Japan, Kiribati, Democratic People''s Republic of Korea (North Korea), Republic of Korea (South Korea), Malaysia, Marshall Islands, Federated States of Micronesia, Nauru, New Caledonia, New Zealand, Niue, Norfolk Island, Northern Mariana Islands, Palau, Panama, Papua New Guinea (PNG), Peru, Philippines, Pitcairn, Russian Federation, Samoa, Singapore, Solomon Islands, Taiwan, Thailand, Tokelau, Tonga, Tuvalu, United States (USA), United States Minor Outlying Islands, Vanuatu, Venezuela, Vietnam, Wallis and Futuna.',-60.0,66.67,98.69,-68.0,0); INSERT INTO "extent" VALUES('EPSG','3173','Europe - FSU - CS63 zone C0','Estonia, Latvia and Lithuania - onshore west of 23°27''E. Russia - Kaliningrad onshore.',54.17,59.27,19.57,23.45,0); INSERT INTO "extent" VALUES('EPSG','3174','Europe - FSU - CS63 zone C1','Estonia, Latvia and Lithuania - onshore between 23°27''E and 26°27''E.',53.89,59.72,23.45,26.45,0); INSERT INTO "extent" VALUES('EPSG','3175','Europe - FSU - CS63 zone C2','Estonia, Latvia and Lithuania - onshore east of 26°27''E.',55.15,59.61,26.45,28.24,0); INSERT INTO "extent" VALUES('EPSG','3176','Brazil - 54°W to 48°W and south of 15°S','Brazil - onshore between 54°W and 48°W and south of 15°S.',-33.78,-15.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','3177','Brazil - 48°W to 42°W and south of 15°S','Brazil - onshore between 48°W and 42°W and south of 15°S.',-25.29,-15.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','3178','Brazil - east of 36°W onshore','Brazil - onshore east of 36°W .',-10.1,-4.99,-36.0,-34.74,0); INSERT INTO "extent" VALUES('EPSG','3179','Africa - Angola (Cabinda) and DR Congo (Zaire) - coastal','Angola (Cabinda) - onshore and offshore; The Democratic Republic of the Congo (Zaire) - onshore coastal area and offshore.',-6.04,-4.38,10.53,13.1,0); INSERT INTO "extent" VALUES('EPSG','3180','Africa - Angola (Cabinda) and DR Congo (Zaire) - offshore','Angola (Cabinda) - offshore; The Democratic Republic of the Congo (Zaire) - offshore.',-6.04,-5.05,10.53,12.37,0); INSERT INTO "extent" VALUES('EPSG','3181','USA - Hawaii - Tern Island and Sorel Atoll','United States (USA) - Hawaii - Tern Island and Sorel Atoll.',23.69,23.93,-166.36,-166.03,0); INSERT INTO "extent" VALUES('EPSG','3182','St Helena - Ascension Island','St Helena, Ascension and Tristan da Cunha - Ascension Island - onshore.',-8.03,-7.83,-14.46,-14.24,0); INSERT INTO "extent" VALUES('EPSG','3183','St Helena - St Helena Island','St Helena, Ascension and Tristan da Cunha - St Helena Island - onshore.',-16.08,-15.85,-5.85,-5.59,0); INSERT INTO "extent" VALUES('EPSG','3184','St Helena - Tristan da Cunha','St Helena, Ascension and Tristan da Cunha - Tristan da Cunha island group including Tristan, Inaccessible, Nightingale, Middle and Stoltenhoff Islands.',-40.42,-37.0,-12.76,-9.8,0); INSERT INTO "extent" VALUES('EPSG','3185','Cayman Islands - Grand Cayman','Cayman Islands - Grand Cayman.',19.21,19.41,-81.46,-81.04,0); INSERT INTO "extent" VALUES('EPSG','3186','Cayman Islands - Little Cayman and Cayman Brac','Cayman Islands - Little Cayman and Cayman Brac.',19.63,19.78,-80.14,-79.69,0); INSERT INTO "extent" VALUES('EPSG','3187','South Georgia and the South Sandwich Islands - onshore','South Georgia and the South Sandwich Islands - onshore.',-59.53,-53.49,-42.14,-26.19,0); INSERT INTO "extent" VALUES('EPSG','3188','Chile - Easter Island onshore','Chile - Easter Island onshore.',-27.25,-27.01,-109.51,-109.16,0); INSERT INTO "extent" VALUES('EPSG','3189','British Indian Ocean Territory - Diego Garcia','British Indian Ocean Territory - Chagos Archipelago - Diego Garcia.',-7.49,-7.18,72.3,72.55,0); INSERT INTO "extent" VALUES('EPSG','3190','Wake - onshore','Wake atoll - onshore.',19.22,19.38,166.55,166.72,0); INSERT INTO "extent" VALUES('EPSG','3191','Pacific - Marshall Islands, Wake - onshore','Marshall Islands - onshore. Wake atoll onshore.',8.66,19.38,162.27,167.82,0); INSERT INTO "extent" VALUES('EPSG','3192','Micronesia - Kosrae (Kusaie)','Federated States of Micronesia - Kosrae (Kusaie).',5.21,5.43,162.85,163.1,0); INSERT INTO "extent" VALUES('EPSG','3193','Vanuatu - southern islands','Vanuatu - southern islands - Aneityum, Efate, Erromango and Tanna.',-20.31,-17.37,168.09,169.95,0); INSERT INTO "extent" VALUES('EPSG','3194','Vanuatu - northern islands','Vanuatu - northern islands - Aese, Ambrym, Aoba, Epi, Espiritu Santo, Maewo, Malo, Malkula, Paama, Pentecost, Shepherd and Tutuba.',-17.32,-14.57,166.47,168.71,0); INSERT INTO "extent" VALUES('EPSG','3195','Fiji - Viti Levu','Fiji - Viti Levu island.',-18.32,-17.25,177.19,178.75,0); INSERT INTO "extent" VALUES('EPSG','3196','Kiribati - Phoenix Islands','Kiribati - Phoenix Islands: Kanton, Orona, McKean Atoll, Birnie Atoll, Phoenix Seamounts.',-4.76,-2.68,-174.6,-170.66,0); INSERT INTO "extent" VALUES('EPSG','3197','Solomon Islands - Guadalcanal Island','Solomon Islands - Guadalcanal Island.',-9.98,-9.2,159.55,160.88,0); INSERT INTO "extent" VALUES('EPSG','3198','Solomon Islands - New Georgia - Ghizo (Gizo)','Solomon Islands - Western Islands - New Georgia, Ghizo (Gizo).',-8.86,-7.52,156.44,158.2,0); INSERT INTO "extent" VALUES('EPSG','3199','Spain - Canary Islands','Spain - Canary Islands onshore and offshore.',24.6,32.76,-21.93,-11.75,0); INSERT INTO "extent" VALUES('EPSG','3200','Japan - Iwo Jima','Japan - Iwo Jima island.',24.67,24.89,141.2,141.42,0); INSERT INTO "extent" VALUES('EPSG','3201','Johnston Island','United States Minor Outlying Islands - Johnston Island.',16.67,16.79,-169.59,-169.47,0); INSERT INTO "extent" VALUES('EPSG','3202','Midway Islands - Sand and Eastern Islands','United States Minor Outlying Islands - Midway Islands - Sand Island and Eastern Island.',28.13,28.28,-177.45,-177.31,0); INSERT INTO "extent" VALUES('EPSG','3203','Japan - Minamitori-shima (Marcus Island)','Japan - Minamitori-shima (Marcus Island).',24.26,24.32,153.95,154.01,1); INSERT INTO "extent" VALUES('EPSG','3204','Antarctica - Deception Island','Antarctica - South Shetland Islands - Deception Island.',-63.08,-62.82,-60.89,-60.35,0); INSERT INTO "extent" VALUES('EPSG','3205','Antarctica - Camp McMurdo area','Antarctica - McMurdo Sound, Camp McMurdo area.',-77.94,-77.17,165.73,167.43,0); INSERT INTO "extent" VALUES('EPSG','3206','North America - Bahamas and USA - Florida - onshore','North America - onshore - Bahamas and USA - Florida (east).',20.86,30.83,-82.33,-72.68,0); INSERT INTO "extent" VALUES('EPSG','3207','Cayman Islands - Cayman Brac','Cayman Islands - Cayman Brac.',19.66,19.78,-79.92,-79.69,0); INSERT INTO "extent" VALUES('EPSG','3208','Pitcairn - Pitcairn Island','Pitcairn - Pitcairn Island.',-25.14,-25.0,-130.16,-130.01,0); INSERT INTO "extent" VALUES('EPSG','3209','Mauritius - mainland','Mauritius - mainland onshore.',-20.57,-19.94,57.25,57.85,0); INSERT INTO "extent" VALUES('EPSG','3210','Serbia and Montenegro','Serbia and Montenegro - onshore and offshore.',41.82,46.23,18.44,23.05,1); INSERT INTO "extent" VALUES('EPSG','3211','Aaland Islands','Åland Islands - onshore and offshore.',59.84,60.48,19.24,21.19,0); INSERT INTO "extent" VALUES('EPSG','3212','Albania - onshore','Albania - onshore.',39.64,42.67,19.22,21.06,0); INSERT INTO "extent" VALUES('EPSG','3213','Algeria - onshore','Algeria - onshore.',18.97,37.14,-8.67,11.99,0); INSERT INTO "extent" VALUES('EPSG','3214','Anguilla - onshore','Anguilla - onshore.',18.11,18.33,-63.22,-62.92,0); INSERT INTO "extent" VALUES('EPSG','3215','Argentina - mainland onshore','Argentina - mainland onshore.',-52.43,-21.78,-73.59,-53.65,0); INSERT INTO "extent" VALUES('EPSG','3216','Aruba - onshore','Aruba - onshore.',12.36,12.68,-70.11,-69.82,0); INSERT INTO "extent" VALUES('EPSG','3217','Bangladesh - onshore','Bangladesh - onshore.',20.52,26.64,88.01,92.67,0); INSERT INTO "extent" VALUES('EPSG','3218','Barbados - onshore','Barbados - onshore.',13.0,13.39,-59.71,-59.37,0); INSERT INTO "extent" VALUES('EPSG','3219','Belize - onshore','Belize - onshore.',15.88,18.49,-89.22,-87.72,0); INSERT INTO "extent" VALUES('EPSG','3220','Benin - onshore','Benin - onshore.',6.17,12.4,0.77,3.86,0); INSERT INTO "extent" VALUES('EPSG','3221','Bermuda - onshore','Bermuda - onshore.',32.21,32.43,-64.89,-64.61,0); INSERT INTO "extent" VALUES('EPSG','3222','Bouvet Island - onshore','Bouvet Island - onshore.',-54.52,-54.33,3.29,3.54,0); INSERT INTO "extent" VALUES('EPSG','3223','Brazil - onshore','Brazil - onshore.',-33.78,5.28,-74.01,-34.74,0); INSERT INTO "extent" VALUES('EPSG','3224','Bulgaria - onshore','Bulgaria - onshore.',41.24,44.23,22.36,28.68,0); INSERT INTO "extent" VALUES('EPSG','3225','Cambodia - onshore','Cambodia - onshore.',10.39,14.73,102.34,107.64,0); INSERT INTO "extent" VALUES('EPSG','3226','Cameroon - onshore','Cameroon - onshore.',1.65,13.09,8.45,16.21,0); INSERT INTO "extent" VALUES('EPSG','3227','Chile - onshore north of 45°S','Chile - onshore north of 45°S.',-45.0,-17.5,-75.22,-67.0,0); INSERT INTO "extent" VALUES('EPSG','3228','China - onshore','China - onshore.',18.11,53.56,73.62,134.77,0); INSERT INTO "extent" VALUES('EPSG','3229','Colombia - mainland','Colombia - mainland onshore.',-4.23,12.52,-79.1,-66.87,0); INSERT INTO "extent" VALUES('EPSG','3230','Congo - onshore','Congo - onshore.',-5.06,3.72,11.11,18.65,0); INSERT INTO "extent" VALUES('EPSG','3231','Congo DR (Zaire) - onshore','The Democratic Republic of the Congo (Zaire) - onshore.',-13.46,5.39,12.17,31.31,0); INSERT INTO "extent" VALUES('EPSG','3232','Costa Rica - onshore','Costa Rica - onshore.',7.98,11.22,-85.97,-82.53,0); INSERT INTO "extent" VALUES('EPSG','3233','Cote d''Ivoire (Ivory Coast) - onshore','Côte d''Ivoire (Ivory Coast) - onshore.',4.29,10.74,-8.61,-2.48,0); INSERT INTO "extent" VALUES('EPSG','3234','Croatia - onshore','Croatia - onshore.',42.34,46.54,13.43,19.43,0); INSERT INTO "extent" VALUES('EPSG','3235','Cuba - onshore','Cuba - onshore.',19.77,23.25,-85.01,-74.07,0); INSERT INTO "extent" VALUES('EPSG','3236','Cyprus - onshore','Cyprus - onshore.',34.59,35.74,32.2,34.65,0); INSERT INTO "extent" VALUES('EPSG','3237','Denmark - onshore','Denmark - onshore.',54.5,57.81,7.98,15.28,0); INSERT INTO "extent" VALUES('EPSG','3238','Djibouti - onshore','Djibouti - onshore.',10.94,12.72,41.75,43.48,0); INSERT INTO "extent" VALUES('EPSG','3239','Dominica - onshore','Dominica - onshore.',15.14,15.69,-61.55,-61.2,0); INSERT INTO "extent" VALUES('EPSG','3240','Dominican Republic - onshore','Dominican Republic - onshore.',17.55,19.99,-72.01,-68.27,0); INSERT INTO "extent" VALUES('EPSG','3241','Ecuador - mainland onshore','Ecuador - mainland - onshore.',-5.01,1.45,-81.03,-75.21,0); INSERT INTO "extent" VALUES('EPSG','3242','Egypt - onshore','Egypt - onshore.',21.97,31.68,24.7,36.95,0); INSERT INTO "extent" VALUES('EPSG','3243','El Salvador - onshore','El Salvador - onshore.',13.1,14.44,-90.11,-87.69,0); INSERT INTO "extent" VALUES('EPSG','3244','Equatorial Guinea - onshore','Equatorial Guinea - onshore.',0.93,3.82,8.37,11.36,0); INSERT INTO "extent" VALUES('EPSG','3245','Eritrea - onshore','Eritrea - onshore.',12.36,18.01,36.44,43.18,0); INSERT INTO "extent" VALUES('EPSG','3246','Estonia - onshore','Estonia - onshore.',57.52,59.75,21.74,28.2,0); INSERT INTO "extent" VALUES('EPSG','3247','Falkland Islands - onshore','Falkland Islands (Malvinas) - onshore.',-52.51,-50.96,-61.55,-57.6,0); INSERT INTO "extent" VALUES('EPSG','3248','Faroe Islands - onshore','Faroe Islands - onshore.',61.33,62.41,-7.49,-6.33,0); INSERT INTO "extent" VALUES('EPSG','3249','Gabon - onshore','Gabon - onshore.',-3.98,2.32,8.65,14.52,0); INSERT INTO "extent" VALUES('EPSG','3250','Gambia - onshore','Gambia - onshore.',13.05,13.83,-16.88,-13.79,0); INSERT INTO "extent" VALUES('EPSG','3251','Georgia - onshore','Georgia - onshore.',41.04,43.59,39.99,46.72,0); INSERT INTO "extent" VALUES('EPSG','3252','Ghana - onshore','Ghana - onshore.',4.67,11.16,-3.25,1.23,0); INSERT INTO "extent" VALUES('EPSG','3253','Gibraltar - onshore','Gibraltar - onshore.',36.07,36.16,-5.42,-5.27,0); INSERT INTO "extent" VALUES('EPSG','3254','Greece - onshore','Greece - onshore.',34.88,41.75,19.57,28.3,0); INSERT INTO "extent" VALUES('EPSG','3255','Guam - onshore','Guam - onshore.',13.18,13.7,144.58,145.01,0); INSERT INTO "extent" VALUES('EPSG','3256','Guatemala - onshore','Guatemala - onshore.',13.69,17.83,-92.29,-88.19,0); INSERT INTO "extent" VALUES('EPSG','3257','Guinea - onshore','Guinea - onshore.',7.19,12.68,-15.13,-7.65,0); INSERT INTO "extent" VALUES('EPSG','3258','Guinea-Bissau - onshore','Guinea-Bissau - onshore.',10.87,12.69,-16.77,-13.64,0); INSERT INTO "extent" VALUES('EPSG','3259','Guyana - onshore','Guyana - onshore.',1.18,8.58,-61.39,-56.47,0); INSERT INTO "extent" VALUES('EPSG','3260','Haiti - onshore','Haiti - onshore.',17.97,20.15,-74.52,-71.62,0); INSERT INTO "extent" VALUES('EPSG','3261','Honduras - onshore','Honduras - onshore.',12.98,16.49,-89.36,-83.08,0); INSERT INTO "extent" VALUES('EPSG','3262','Iceland - mainland','Iceland - mainland.',63.34,66.59,-24.66,-13.38,0); INSERT INTO "extent" VALUES('EPSG','3263','Japan - onshore mainland','Japan - onshore mainland - Hokkaido, Honshu, Shikoku, Kyushu.',30.94,45.54,129.3,145.87,0); INSERT INTO "extent" VALUES('EPSG','3264','Kenya - onshore','Kenya - onshore.',-4.72,4.63,33.9,41.91,0); INSERT INTO "extent" VALUES('EPSG','3265','Korea, Democratic People''s Republic of (North Korea) - onshore','Democratic People''s Republic of Korea (North Korea) - onshore.',37.62,43.01,124.27,130.75,0); INSERT INTO "extent" VALUES('EPSG','3266','Korea, Republic of (South Korea) - onshore','Republic of Korea (South Korea) - onshore.',33.14,38.64,124.53,131.01,0); INSERT INTO "extent" VALUES('EPSG','3267','Kuwait - onshore','Kuwait - onshore.',28.53,30.09,46.54,48.48,0); INSERT INTO "extent" VALUES('EPSG','3268','Latvia - onshore','Latvia - onshore.',55.67,58.09,20.87,28.24,0); INSERT INTO "extent" VALUES('EPSG','3269','Lebanon - onshore','Lebanon - onshore.',33.06,34.65,35.04,36.63,0); INSERT INTO "extent" VALUES('EPSG','3270','Liberia - onshore','Liberia - onshore.',4.29,8.52,-11.52,-7.36,0); INSERT INTO "extent" VALUES('EPSG','3271','Libya - onshore','Libya - onshore.',19.5,33.23,9.31,25.21,0); INSERT INTO "extent" VALUES('EPSG','3272','Lithuania - onshore','Lithuania - onshore.',53.89,56.45,20.86,26.82,0); INSERT INTO "extent" VALUES('EPSG','3273','Madagascar - onshore','Madagascar - onshore.',-25.64,-11.89,43.18,50.56,0); INSERT INTO "extent" VALUES('EPSG','3274','Maldives - onshore','Maldives - onshore.',-0.69,7.08,72.81,73.69,0); INSERT INTO "extent" VALUES('EPSG','3275','Malta - onshore','Malta - onshore.',35.74,36.05,14.27,14.63,0); INSERT INTO "extent" VALUES('EPSG','3276','Martinique - onshore','Martinique - onshore.',14.35,14.93,-61.29,-60.76,0); INSERT INTO "extent" VALUES('EPSG','3277','Mauritania - onshore','Mauritania - onshore.',14.72,27.3,-17.08,-4.8,0); INSERT INTO "extent" VALUES('EPSG','3278','Mexico - onshore','Mexico - onshore.',14.51,32.72,-118.47,-86.68,0); INSERT INTO "extent" VALUES('EPSG','3279','Montserrat - onshore','Montserrat - onshore.',16.62,16.87,-62.29,-62.08,0); INSERT INTO "extent" VALUES('EPSG','3280','Morocco - onshore','Morocco - onshore.',27.66,35.97,-13.24,-1.01,0); INSERT INTO "extent" VALUES('EPSG','3281','Mozambique - onshore','Mozambique - onshore.',-26.87,-10.42,30.21,40.9,0); INSERT INTO "extent" VALUES('EPSG','3282','Myanmar (Burma) - onshore','Myanmar (Burma) - onshore.',9.78,28.55,92.2,101.17,0); INSERT INTO "extent" VALUES('EPSG','3283','Namibia - onshore','Namibia - onshore.',-28.97,-16.95,11.66,25.27,0); INSERT INTO "extent" VALUES('EPSG','3284','Netherlands - onshore','Netherlands - onshore.',50.78,53.6,3.33,7.3,1); INSERT INTO "extent" VALUES('EPSG','3285','New Zealand - onshore and nearshore','New Zealand - North Island, South Island, Stewart Island - onshore and nearshore.',-47.65,-33.89,165.87,179.27,0); INSERT INTO "extent" VALUES('EPSG','3286','Nicaragua - onshore','Nicaragua - onshore.',10.7,15.03,-87.74,-83.08,0); INSERT INTO "extent" VALUES('EPSG','3287','Nigeria - onshore','Nigeria - onshore.',4.22,13.9,2.69,14.65,0); INSERT INTO "extent" VALUES('EPSG','3288','Oman - onshore','Oman - onshore. Includes Musandam and the Kuria Muria (Al Hallaniyah) islands.',16.59,26.58,51.99,59.91,0); INSERT INTO "extent" VALUES('EPSG','3289','Pakistan - onshore','Pakistan - onshore.',23.64,37.07,60.86,77.83,0); INSERT INTO "extent" VALUES('EPSG','3290','Panama - onshore','Panama - onshore.',7.15,9.68,-83.04,-77.19,0); INSERT INTO "extent" VALUES('EPSG','3291','Papua New Guinea - onshore','Papua New Guinea - onshore.',-11.7,-1.3,140.85,156.02,0); INSERT INTO "extent" VALUES('EPSG','3292','Peru - onshore','Peru - onshore.',-18.35,-0.03,-81.41,-68.67,0); INSERT INTO "extent" VALUES('EPSG','3293','Poland - onshore','Poland - onshore.',49.0,54.89,14.14,24.15,0); INSERT INTO "extent" VALUES('EPSG','3294','Puerto Rico - onshore','Puerto Rico - onshore.',17.87,18.57,-67.97,-65.19,0); INSERT INTO "extent" VALUES('EPSG','3295','Romania - onshore','Romania - onshore.',43.62,48.27,20.26,29.74,0); INSERT INTO "extent" VALUES('EPSG','3296','Russia - onshore','Russian Federation - onshore.',41.19,81.91,19.58,-168.97,0); INSERT INTO "extent" VALUES('EPSG','3297','St Kitts and Nevis - onshore','St Kitts and Nevis - onshore.',17.06,17.46,-62.92,-62.5,0); INSERT INTO "extent" VALUES('EPSG','3298','St Lucia - onshore','St Lucia - onshore.',13.66,14.16,-61.13,-60.82,0); INSERT INTO "extent" VALUES('EPSG','3299','St Pierre and Miquelon - onshore','St Pierre and Miquelon - onshore.',46.69,47.19,-56.48,-56.07,0); INSERT INTO "extent" VALUES('EPSG','3300','St Vincent and the Grenadines - onshore','St Vincent and the northern Grenadine Islands - onshore.',12.54,13.44,-61.52,-61.07,0); INSERT INTO "extent" VALUES('EPSG','3301','Samoa - onshore','Samoa - onshore.',-14.11,-13.41,-172.84,-171.37,0); INSERT INTO "extent" VALUES('EPSG','3302','Sao Tome and Principe - onshore','Sao Tome and Principe - onshore.',-0.04,1.76,6.41,7.52,0); INSERT INTO "extent" VALUES('EPSG','3303','Saudi Arabia - onshore','Saudi Arabia - onshore.',16.37,32.16,34.51,55.67,0); INSERT INTO "extent" VALUES('EPSG','3304','Senegal - onshore','Senegal - onshore.',12.29,16.7,-17.59,-11.36,0); INSERT INTO "extent" VALUES('EPSG','3305','Serbia and Montenegro - onshore','Serbia and Montenegro - onshore.',41.82,46.23,18.44,23.05,1); INSERT INTO "extent" VALUES('EPSG','3306','Sierra Leone - onshore','Sierra Leone - onshore.',6.88,10.0,-13.35,-10.26,0); INSERT INTO "extent" VALUES('EPSG','3307','Slovenia - onshore','Slovenia - onshore.',45.42,46.88,13.38,16.61,0); INSERT INTO "extent" VALUES('EPSG','3308','Somalia - onshore','Somalia - onshore.',-1.71,12.03,40.98,51.47,0); INSERT INTO "extent" VALUES('EPSG','3309','South Africa - onshore','South Africa - mainland onshore.',-34.88,-22.13,16.45,32.95,0); INSERT INTO "extent" VALUES('EPSG','3310','Sri Lanka - onshore','Sri Lanka - onshore.',5.86,9.88,79.64,81.95,0); INSERT INTO "extent" VALUES('EPSG','3311','Africa - South Sudan and Sudan onshore','South Sudan. Sudan - onshore.',3.49,22.24,21.82,38.66,0); INSERT INTO "extent" VALUES('EPSG','3312','Suriname - onshore','Suriname - onshore.',1.83,6.06,-58.08,-53.95,0); INSERT INTO "extent" VALUES('EPSG','3313','Sweden - onshore','Sweden - onshore.',55.28,69.07,10.93,24.17,0); INSERT INTO "extent" VALUES('EPSG','3314','Syria - onshore','Syria - onshore.',32.31,37.3,35.61,42.38,0); INSERT INTO "extent" VALUES('EPSG','3315','Taiwan - onshore - mainland and Penghu','Taiwan, Republic of China - onshore - Taiwan Island, Penghu (Pescadores) Islands.',21.87,25.34,119.25,122.06,0); INSERT INTO "extent" VALUES('EPSG','3316','Tanzania - onshore','Tanzania - onshore.',-11.75,-0.99,29.34,40.48,0); INSERT INTO "extent" VALUES('EPSG','3317','Thailand - onshore','Thailand - onshore.',5.63,20.46,97.34,105.64,0); INSERT INTO "extent" VALUES('EPSG','3318','East Timor - onshore','Timor-Leste (East Timor) - onshore.',-9.5,-8.08,124.03,127.36,0); INSERT INTO "extent" VALUES('EPSG','3319','Togo - onshore','Togo - onshore.',6.05,11.14,-0.15,1.8,0); INSERT INTO "extent" VALUES('EPSG','3320','Tokelau - onshore','Tokelau - onshore.',-9.27,-9.12,-171.92,-171.79,0); INSERT INTO "extent" VALUES('EPSG','3321','Tonga - onshore','Tonga - onshore.',-21.32,-18.51,-175.42,-173.85,0); INSERT INTO "extent" VALUES('EPSG','3322','Turkey - onshore','Türkiye (Turkey) - onshore.',35.81,42.15,25.62,44.83,0); INSERT INTO "extent" VALUES('EPSG','3323','Turks and Caicos Islands - onshore','Turks and Caicos Islands - onshore.',21.38,22.01,-72.09,-71.07,0); INSERT INTO "extent" VALUES('EPSG','3324','Ukraine - onshore','Ukraine - onshore.',44.32,52.38,22.15,40.18,0); INSERT INTO "extent" VALUES('EPSG','3325','UAE - onshore','United Arab Emirates (UAE) - onshore. Abu Dhabi, Dubai, Sharjah, Umm al Qaywayn, Al Fujairah, Ras al Khaymah.',22.63,26.1,51.56,56.44,0); INSERT INTO "extent" VALUES('EPSG','3326','Uruguay - onshore','Uruguay - onshore.',-35.0,-30.09,-58.49,-53.09,0); INSERT INTO "extent" VALUES('EPSG','3327','Venezuela - onshore','Venezuela - onshore.',0.64,12.25,-73.38,-59.8,0); INSERT INTO "extent" VALUES('EPSG','3328','Vietnam - onshore','Vietnam - onshore.',8.33,23.4,102.14,109.53,0); INSERT INTO "extent" VALUES('EPSG','3329','Virgin Islands, British - onshore','British Virgin Islands - onshore - Anegada, Jost Van Dyke, Tortola, and Virgin Gorda.',18.28,18.78,-64.88,-64.25,0); INSERT INTO "extent" VALUES('EPSG','3330','Virgin Islands, US - onshore','US Virgin Islands - onshore - St Croix, St John, and St Thomas.',17.62,18.44,-65.09,-64.51,0); INSERT INTO "extent" VALUES('EPSG','3331','Western Sahara - onshore','Western Sahara - onshore.',20.71,27.67,-17.16,-8.66,0); INSERT INTO "extent" VALUES('EPSG','3332','Yemen - onshore','Yemen - onshore.',12.09,19.0,41.8,54.53,0); INSERT INTO "extent" VALUES('EPSG','3333','Finland - onshore','Finland - onshore.',59.75,70.09,19.24,31.59,0); INSERT INTO "extent" VALUES('EPSG','3334','China - Hong Kong - onshore','China - Hong Kong - onshore.',22.19,22.56,113.82,114.39,0); INSERT INTO "extent" VALUES('EPSG','3335','China - Hong Kong - offshore','China - Hong Kong - offshore.',22.13,22.58,113.76,114.51,0); INSERT INTO "extent" VALUES('EPSG','3336','Iran - onshore','Iran - onshore.',25.02,39.78,44.03,63.34,0); INSERT INTO "extent" VALUES('EPSG','3337','Reunion - onshore','Reunion - onshore.',-21.42,-20.81,55.16,55.91,0); INSERT INTO "extent" VALUES('EPSG','3338','New Zealand - Stewart Island','New Zealand - Stewart Island.',-47.33,-46.63,167.29,168.34,0); INSERT INTO "extent" VALUES('EPSG','3339','Germany - onshore','Germany - onshore - states of Baden-Wurtemberg, Bayern, Berlin, Brandenburg, Bremen, Hamburg, Hessen, Mecklenburg-Vorpommern, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Sachsen, Sachsen-Anhalt, Schleswig-Holstein, Thuringen.',47.27,55.09,5.86,15.04,0); INSERT INTO "extent" VALUES('EPSG','3340','Mayotte - onshore','Mayotte - onshore.',-13.05,-12.61,44.98,45.35,0); INSERT INTO "extent" VALUES('EPSG','3341','India - mainland','India - mainland onshore.',8.02,35.51,68.13,97.42,0); INSERT INTO "extent" VALUES('EPSG','3342','Jamaica - onshore','Jamaica - onshore.',17.64,18.58,-78.43,-76.17,0); INSERT INTO "extent" VALUES('EPSG','3343','Italy - including San Marino and Vatican','Italy - onshore and offshore; San Marino, Vatican City State.',34.76,47.1,5.93,18.99,0); INSERT INTO "extent" VALUES('EPSG','3344','New Zealand - South and Stewart Islands','New Zealand - South Island, Stewart Island.',-47.33,-40.44,166.37,174.46,0); INSERT INTO "extent" VALUES('EPSG','3345','Slovenia - Ljubljana east','Slovenia - eastern part of the Ljubljana region with the Kamnik-Domzale area.',45.85,46.32,14.45,15.01,0); INSERT INTO "extent" VALUES('EPSG','3346','Slovenia - Prekmurje','Slovenia - Prekmurje (the Transmuraland).',46.47,46.88,15.98,16.61,0); INSERT INTO "extent" VALUES('EPSG','3347','Slovenia - Novo Mesto','Slovenia - Novo Mesto with the Gorjanci.',45.66,45.87,15.06,15.47,0); INSERT INTO "extent" VALUES('EPSG','3348','Slovenia - Gorenjska - upper','Slovenia - upper Gorenjska (Upper Carniola) with the Baca Valley and part of the Cerkno Mountains.',46.09,46.53,13.7,14.18,0); INSERT INTO "extent" VALUES('EPSG','3349','Slovenia - Ljubliana west','Slovenia - western part of the Ljubljana region with part of Skofja Loka Hills and the Idrija-Cerklje region.',45.86,46.21,13.95,14.52,0); INSERT INTO "extent" VALUES('EPSG','3350','Slovenia - Notranjska','Slovenia - Notranjska (Inner Carniola) with parts of the Karst and the Brkini Hills.',45.47,45.88,14.08,14.59,0); INSERT INTO "extent" VALUES('EPSG','3351','Slovenia - Kocevje','Slovenia - Kocevje with the Kocevski Forest and Gotenica Mountain.',45.46,45.76,14.6,15.12,0); INSERT INTO "extent" VALUES('EPSG','3352','Slovenia - Koroska','Slovenia - Koroska Region (Slovene Carinthia).',46.46,46.66,14.83,15.51,0); INSERT INTO "extent" VALUES('EPSG','3353','Slovenia - Velenje','Slovenia - Velenje with part of Koroska Region (Slovene Carinthia).',46.28,46.51,14.9,15.26,0); INSERT INTO "extent" VALUES('EPSG','3354','Slovenia - Zasavje','Slovenia - Zasavje (the Sava Valley) with the broad region of Celje.',46.0,46.32,14.84,15.35,0); INSERT INTO "extent" VALUES('EPSG','3355','Brazil - west of 54°W and south of 18°S','Brazil - west of 54°W and south of 18°S.',-31.91,-17.99,-58.16,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3356','South America - Brazil - south of 18°S and west of 54°W + DF; N Paraguay','Brazil - south of 18°S and west of 54°W, plus Distrito Federal. Paraguay - north.',-31.91,-15.37,-62.57,-47.1,0); INSERT INTO "extent" VALUES('EPSG','3357','USA - GoM OCS','United States (USA) - offshore Gulf of Mexico outer continental shelf (GoM OCS) - protraction areas South Padre Island; North Padre Island; Mustang Island; Matagorda Island; Brazos; Galveston; High Island; Sabine Pass; West Cameron; East Cameron; Vermilion; South Marsh Island; Eugene Island; Ship Shoal; South Pelto; Bay Marchand; South Timbalier; Grand Isle; West Delta; South Pass; Main Pass; Breton Sound; Chandeleur; Corpus Christi; Port Isabel; East Breaks; Alaminos Canyon; Garden Banks; Keathley Canyon; Sigsbee Escarpment; Ewing Bank; Green Canyon; Walker Ridge; Amery Terrace; Mobile; Viosca Knoll; Mississippi Canyon; Atwater Valley; Lund; Lund South; Pensacola; Destin Dome; De Soto Canyon; Lloyd Ridge; Henderson; Florida Plain; Campeche Escarpment; Apalachicola; Florida Middle Ground; The Elbow; Vernon Basin; Howell Hook; Rankin; Gainesville; Tarpon Springs; St Petersburg; Charlotte Harbor; Pulley Ridge; Dry Tortugas; Tortugas Valley; Miami; Key West.',23.82,30.25,-97.22,-81.17,0); INSERT INTO "extent" VALUES('EPSG','3358','USA - GoM - east of 87.25°W','United States (USA) - offshore Gulf of Mexico (GoM) east of approximately 87°15''W - protraction areas Gainesville, Tarpon Springs, St Petersburg, Charlotte Harbor, Pulley Ridge, Dry Tortugas, Tortugas Valley, Miami, Key West, Apalachicola, Florida Middle Ground, The Elbow, Vernon Basin, Howell Hook, Rankin and Campeche Escarpment. Also for protraction areas Pensacola, Destin Dome, Desoto Canyon, Lloyd Ridge, Henderson and Florida Plain - east of 87°15''W.',23.82,30.25,-87.25,-81.17,0); INSERT INTO "extent" VALUES('EPSG','3359','USA - GoM - 95°W to 87.25°W','United States (USA) - offshore Gulf of Mexico (GoM) between approximately 95°W and 87°15''W - protraction areas High Island (including all additions and extensions), Sabine Pass, West Cameron (including west and south additions), East Cameron (including south addition), Vermillion (including south addition), South Marsh Island (including north and south additions), Eugene Island (including south addition), Ship Shoal (including south addition), South Timbalier (including south addition), Grand Isle (including south addition), West Delta (including south addition), South Pass (including south and east additions), Main Pass (including south and east addition), Breton Sound, Chandeleur (including east addition), Mobile, Viosca Knoll, Mississippi Canyon, Atwater Valley, Lund, Lund South, Ewing Bank, Green Canyon, Walker Ridge, Amery Terrace, Garden Banks, Keathley Canyon and Sigsbee Escarpment. Also for protraction areas Galveston (including south addition), East Breaks and Aliminos Canyon - east of 95°W; for protraction areas Pensacola, Destin Dome, Desoto Canyon, Lloyd Ridge, Henderson and Florida Plain - west of 87°15''W.',25.61,30.23,-95.0,-87.25,0); INSERT INTO "extent" VALUES('EPSG','3360','USA - GoM - west of 95°W','United States (USA) - offshore Gulf of Mexico (GoM) west of approximately 95°W - protraction areas Brazos (including south addition), Matagorda Island, Mustang Island (including east addition); North Padre Island (including east addition), South Padre Island (including east addition), Corpus Christi and Port Isabel. Also protraction areas Galveston (including south addition), East Breaks and Aliminos Canyon - west of 95°W.',25.97,28.97,-97.22,-95.0,0); INSERT INTO "extent" VALUES('EPSG','3361','Mexico - offshore GoM - Tampico area','Mexico - offshore Gulf of Mexico (GoM) - Tampico area.',21.51,22.75,-98.1,-96.89,0); INSERT INTO "extent" VALUES('EPSG','3362','Greenland - west coast','Greenland - west coast onshore.',59.74,79.0,-73.29,-42.52,0); INSERT INTO "extent" VALUES('EPSG','3363','Greenland - west coast - 63°N to 66°N','Greenland - west coast onshore - between 63°N and 66°N.',63.0,66.0,-53.7,-49.17,0); INSERT INTO "extent" VALUES('EPSG','3364','Greenland - west coast - 66°N to 69°N','Greenland - west coast onshore - between 66°N and 69°N.',66.0,69.0,-54.09,-49.4,0); INSERT INTO "extent" VALUES('EPSG','3365','Greenland - west coast - 69°N to 72°N','Greenland - west coast onshore - between 69°N and 72°N.',69.0,72.0,-56.06,-49.11,0); INSERT INTO "extent" VALUES('EPSG','3366','Greenland - west coast - 72°N to 75°N','Greenland - west coast onshore - between 72°N and 75°N.',72.0,75.0,-58.21,-52.02,0); INSERT INTO "extent" VALUES('EPSG','3367','Greenland - west coast - 75°N to 78°N','Greenland - west coast - between 75°N and 78°N.',75.0,78.0,-72.79,-56.31,0); INSERT INTO "extent" VALUES('EPSG','3368','Greenland - west coast - 78°N to 79°N','Greenland - west coast onshore - between 78°N and 79°N.',78.0,79.0,-73.29,-65.24,0); INSERT INTO "extent" VALUES('EPSG','3369','Greenland - east coast - 68°N to 69°N','Greenland - east coast onshore - between 68°N and 69°N.',68.66,69.0,-26.99,-25.14,0); INSERT INTO "extent" VALUES('EPSG','3370','Greenland - east coast - 69°N to 72°N','Greenland - east coast onshore - between 69°N and 72°N.',69.0,72.0,-29.69,-21.32,0); INSERT INTO "extent" VALUES('EPSG','3371','Greenland - east coast - 72°N to 75°N','Greenland - east coast onshore - between 72°N and 75°N.',72.0,74.58,-29.15,-19.89,0); INSERT INTO "extent" VALUES('EPSG','3372','USA - west of 174°E - AK, OCS','United States (USA) - west of 174°E. Alaska and offshore continental shelf (OCS).',49.01,56.28,167.65,174.01,0); INSERT INTO "extent" VALUES('EPSG','3373','USA - 174°E to 180°E - AK, OCS','United States (USA) - between 174°E and 180°E - Alaska and offshore continental shelf (OCS).',47.92,56.67,174.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3374','USA - 180°W to 174°W - AK, OCS','United States (USA) - between 180°W and 174°W - Alaska and offshore continental shelf (OCS).',47.88,63.21,-180.0,-173.99,0); INSERT INTO "extent" VALUES('EPSG','3375','USA - 174°W to 168°W - AK, OCS','United States (USA) - between 174°W and 168°W - Alaska and offshore continental shelf (OCS).',48.66,73.05,-174.0,-167.99,0); INSERT INTO "extent" VALUES('EPSG','3376','Malaysia - West Malaysia - Johor','Malaysia - West Malaysia - Johor.',1.21,2.95,102.44,104.6,0); INSERT INTO "extent" VALUES('EPSG','3377','Malaysia - West Malaysia - Sembilan and Melaka','Malaysia - West Malaysia - Negeri Sembilan and Melaka.',2.03,3.28,101.7,102.71,0); INSERT INTO "extent" VALUES('EPSG','3378','Malaysia - West Malaysia - Pahang','Malaysia - West Malaysia - Pahang.',2.45,4.78,101.33,103.67,0); INSERT INTO "extent" VALUES('EPSG','3379','Malaysia - West Malaysia - Selangor','Malaysia - West Malaysia - Selangor.',2.54,3.87,100.76,101.97,0); INSERT INTO "extent" VALUES('EPSG','3380','Malaysia - West Malaysia - Terengganu','Malaysia - West Malaysia - Terengganu.',3.89,5.9,102.38,103.72,0); INSERT INTO "extent" VALUES('EPSG','3381','Malaysia - West Malaysia - Pulau Pinang','Malaysia - West Malaysia - Pulau Pinang - Pinang (Penang) Island and Seberang Perai (Province Wellesley).',5.12,5.59,100.12,100.56,0); INSERT INTO "extent" VALUES('EPSG','3382','Malaysia - West Malaysia - Kedah and Perlis','Malaysia - West Malaysia - Kedah and Perlis.',5.08,6.72,99.59,101.12,0); INSERT INTO "extent" VALUES('EPSG','3383','Malaysia - West Malaysia - Perak','Malaysia - West Malaysia - Perak.',3.66,5.92,100.07,102.0,0); INSERT INTO "extent" VALUES('EPSG','3384','Malaysia - West Malaysia - Kelantan','Malaysia - West Malaysia - Kelantan.',4.54,6.29,101.33,102.67,0); INSERT INTO "extent" VALUES('EPSG','3385','Finland - east of 31.5°E','Finland - east of 31°30''E.',62.83,63.0,31.5,31.59,0); INSERT INTO "extent" VALUES('EPSG','3386','Asia - Middle East - Iraq and Kuwait 42°E to 48°E','Iraq - between 42°E and 48°E. Kuwait - west of 48°E.',28.53,37.39,42.0,48.0,1); INSERT INTO "extent" VALUES('EPSG','3387','Iraq - west of 42°E','Iraq - west of 42°E.',31.14,36.75,38.79,42.0,0); INSERT INTO "extent" VALUES('EPSG','3388','Iraq - 42°E to 48°E','Iraq - between 42°E and 48°E.',29.06,37.39,42.0,48.0,0); INSERT INTO "extent" VALUES('EPSG','3389','Iraq - east of 48°E onshore','Iraq - onshore east of 48°E.',29.87,31.0,48.0,48.61,0); INSERT INTO "extent" VALUES('EPSG','3390','Asia - Middle East -SE Iraq and SW Iran','Iraq - onshore southeast; Iran - onshore northern Gulf coast and west bordering southeast Iraq.',29.06,33.5,44.3,51.06,0); INSERT INTO "extent" VALUES('EPSG','3391','World - between 80°S and 84°N','World between 80°S and 84°N.',-80.0,84.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3392','Germany - Thuringen - west of 10.5°E','Germany - Thuringen - west of 10°30''E.',50.35,51.56,9.92,10.5,0); INSERT INTO "extent" VALUES('EPSG','3393','Germany - Thuringen - east of 10.5°E','Germany - Thuringen - east of 10°30''E.',50.2,51.64,10.5,12.56,0); INSERT INTO "extent" VALUES('EPSG','3394','Germany - Saxony - east of 13.5°E','Germany - Sachsen - east of 13°30''E.',50.62,51.58,13.5,15.04,0); INSERT INTO "extent" VALUES('EPSG','3395','Germany - Saxony - west of 13.5°E','Germany - Sachsen - west of 13°30''E.',50.2,51.66,11.89,13.51,0); INSERT INTO "extent" VALUES('EPSG','3396','Germany - Mecklenburg-Vorpommern and Sachsen-Anhalt','Germany - Mecklenburg-Vorpommern and Sachsen-Anhalt.',50.94,53.05,10.54,14.43,1); INSERT INTO "extent" VALUES('EPSG','3397','Iraq - Basra area','Iraq - Basra area.',29.87,31.09,46.46,48.61,0); INSERT INTO "extent" VALUES('EPSG','3398','Fiji - main islands','Fiji - onshore - Vanua Levu, Taveuni, Viti Levu and and immediately adjacent smaller islands of Yasawa and Kandavu groups.',-19.22,-16.1,176.81,-179.77,0); INSERT INTO "extent" VALUES('EPSG','3399','Fiji - main islands - west of 180°','Fiji - onshore west of 180° - Vanua Levu, Taveuni, Viti Levu and and immediately adjacent smaller islands of Yasawa and Kandavu groups.',-19.22,-16.1,176.81,180.0,0); INSERT INTO "extent" VALUES('EPSG','3400','Fiji - main islands - east of 180°','Fiji - onshore east of 180° - Vanua Levu, Taveuni.',-17.04,-16.1,-180.0,-179.77,0); INSERT INTO "extent" VALUES('EPSG','3401','Fiji - Vanua Levu and Taveuni','Fiji - Vanua Levu and Taveuni.',-17.07,-16.1,178.42,-179.77,0); INSERT INTO "extent" VALUES('EPSG','3402','Algeria - Hassi Mouina licence area','Algeria - Hassi Mouina licence area.',29.25,31.0,0.0,1.25,0); INSERT INTO "extent" VALUES('EPSG','3403','Russia - west of 19.5°E','Russian Federation - Kaliningrad - west of 19°30''E.',54.32,55.3,19.2,19.5,1); INSERT INTO "extent" VALUES('EPSG','3404','North America - 120°W to 114°W and NAD83 by country','North America - between 120°W and 114°W - onshore and offshore. Canada - Alberta; British Columbia; Northwest Territories; Nunavut. United States (USA) - California; Idaho; Nevada, Oregon; Washington.',30.88,83.5,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','3405','North America - 114°W to 108°W and NAD83 by country','North America - between 114°W and 108°W - onshore and offshore. Canada - Alberta; Northwest Territories; Nunavut; Saskatchewan. United States (USA) - Arizona; Colorado; Idaho; Montana; New Mexico; Utah; Wyoming.',31.33,84.0,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','3406','North America - 108°W to 102°W and NAD83 by country','North America - between 108°W and 102°W - onshore and offshore. Canada - Northwest Territories; Nunavut; Saskatchewan. United States (USA) - Colorado; Montana; Nebraska; New Mexico; North Dakota; Oklahoma; South Dakota; Texas; Wyoming.',28.98,84.0,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','3407','North America - 102°W to 96°W and NAD83 by country','North America - between 102°W and 96°W - onshore and offshore. Canada - Manitoba; Nunavut; Saskatchewan. United States (USA) - Iowa; Kansas; Minnesota; Nebraska; North Dakota; Oklahoma; South Dakota; Texas.',25.83,84.0,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','3408','Sweden - Stockholm','Sweden - Stockholm commune.',59.22,59.43,17.75,18.2,0); INSERT INTO "extent" VALUES('EPSG','3409','Canada - 144°W to 138°W','Canada west of 138°W, onshore and offshore south of 84°N - British Columbia, Yukon.',52.05,72.53,-141.01,-138.0,0); INSERT INTO "extent" VALUES('EPSG','3410','Canada - 138°W to 132°W','Canada between 138°W and 132°W, onshore and offshore south of 84°N - British Columbia, Northwest Territories, Yukon.',48.06,79.42,-138.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','3411','Canada - 132°W to 126°W','Canada - between 132°W and 126°W, onshore and offshore south of 84°N - British Columbia, Northwest Territories, Yukon.',46.52,80.93,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','3412','Canada - 126°W to 120°W','Canada between 126°W and 120°W, onshore and offshore south of 84°N - British Columbia, Northwest Territories, Yukon.',48.13,81.8,-126.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','3413','Canada - 102°W to 96°W','Canada between 102°W and 96°W, onshore and offshore south of 84°N - Manitoba, Nunavut, Saskatchewan.',48.99,84.0,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','3414','Canada - 96°W to 90°W','Canada between 96°W and 90°W, onshore and offshore south of 84°N - Manitoba, Nunavut, Ontario.',48.03,84.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','3415','Canada - 90°W to 84°W','Canada between 90°W and 84°W, onshore and offshore south of 84°N - Manitoba, Nunavut, Ontario.',46.11,84.0,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','3416','Canada - 84°W to 78°W','Canada between 84°W and 78°W, onshore and offshore south of 84°N - Nunavut, Ontario and Quebec.',41.67,84.0,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3417','Canada - 78°W to 72°W','Canada between 78°W and 72°W, onshore and offshore south of 84°N - Nunavut, Ontario and Quebec.',43.63,84.0,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3418','Latin America - SIRGAS 2000 by country','Latin America - Central America and South America - onshore and offshore. Brazil - onshore and offshore.',-59.87,32.72,-122.19,-25.28,0); INSERT INTO "extent" VALUES('EPSG','3419','North America - 72°W to 66°W and NAD83 by country','North America - between 72°W and 66°W - onshore and offshore. Canada - Labrador; New Brunswick; Nova Scotia; Nunavut; Quebec. Puerto Rico. United States (USA) - Connecticut; Maine; Massachusetts; New Hampshire; New York (Long Island); Rhode Island; Vermont.',14.92,84.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3420','North America - 66°W to 60°W and NAD83 by country','North America - between 66°W and 60°W - onshore and offshore. British Virgin Islands. Canada - New Brunswick; Labrador; Nunavut; Prince Edward Island; Quebec. Puerto Rico. US Virgin Islands. United States (USA) offshore Atlantic.',15.63,84.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3421','Latin America - 84°W to 78°West; N hemisphere and SIRGAS by country','Latin America - Central America and South America - between 84°W and 78°W, northern hemisphere, onshore and offshore.',0.0,19.54,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3422','Latin America - 78°W to 72°West; N hemisphere and SIRGAS by country','Latin America - Central America and South America - between 78°W and 72°W, northern hemisphere, onshore and offshore.',0.0,15.04,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3423','Mexico - west of 114°W','Mexico west of 114°W, onshore and offshore.',15.01,32.72,-122.19,-114.0,0); INSERT INTO "extent" VALUES('EPSG','3424','Mexico - 114°W to 108°W','Mexico between 114°W and 108°W, onshore and offshore.',15.09,32.27,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','3425','Mexico - 108°W to 102°W','Mexico between 108°W and 102°W, onshore and offshore.',14.05,31.79,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','3426','Mexico - 102°W to 96°W','Mexico between 102°W and 96°W, onshore and offshore.',12.3,29.81,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','3427','Latin America - 96°W to 90°W; N hemisphere and SIRGAS 2000 by country','Latin America - Central and South America - between 96°W and 90°W, northern hemisphere, onshore and offshore.',0.0,26.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','3428','Latin America - 90°W to 84°W; N hemisphere and SIRGAS 2000 by country','Latin America - Central America and South America - between 90°W and 84°W, northern hemisphere, onshore and offshore.',0.0,25.77,-90.0,-83.99,0); INSERT INTO "extent" VALUES('EPSG','3429','Spain - mainland and Balearic Islands onshore','Spain - mainland, Balearic Islands, Ceuta and Melila - onshore.',35.26,43.82,-9.37,4.39,0); INSERT INTO "extent" VALUES('EPSG','3430','New Caledonia - Belep, Grande Terre, Ile des Pins, Loyalty Islands','New Caledonia - Belep, Grande Terre, Ile des Pins, Loyalty Islands (Lifou, Mare, Ouvea).',-22.73,-19.5,163.54,168.19,0); INSERT INTO "extent" VALUES('EPSG','3431','New Caledonia - west of 162°E','New Caledonia - west of 162°E onshore and offshore.',-26.03,-15.34,156.25,162.01,0); INSERT INTO "extent" VALUES('EPSG','3432','New Caledonia - 162°E to 168°E','New Caledonia - between 162°E and 168°E onshore and offshore.',-26.45,-14.83,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','3433','New Caledonia - east of 168°E','New Caledonia - east of 168°E onshore and offshore.',-25.95,-19.75,168.0,174.28,0); INSERT INTO "extent" VALUES('EPSG','3434','New Caledonia - Mare - west of 168°E','New Caledonia - Loyalty Islands - Mare - west of 168°E.',-21.71,-21.32,167.75,168.0,0); INSERT INTO "extent" VALUES('EPSG','3435','New Caledonia - Mare - east of 168°E','New Caledonia - Loyalty Islands - Mare - east of 168°E.',-21.71,-21.35,168.0,168.19,0); INSERT INTO "extent" VALUES('EPSG','3436','South America - 72°W to 66°W, N hemisphere and SIRGAS 2000 by country','South America between 72°W and 66°W and north of approximately 2°N, onshore and offshore.',0.0,15.64,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3437','South America - 66°W to 60°W, N hemisphere and SIRGAS 2000 by country','South America between 66°W and 60°W, north of approximately 4°N, onshore and offshore.',0.64,16.75,-66.0,-59.99,0); INSERT INTO "extent" VALUES('EPSG','3438','South America - 60°W to 54°W, N hemisphere and SIRGAS 2000 by country','South America between 60°W and 54°W, north of approximately 2°N, onshore and offshore.',1.18,12.19,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3439','South America - 54°W to 48°W, N hemisphere and SIRGAS 2000 by country','South America between 54°W and 48°W, northern hemisphere, onshore and offshore except Brazil where offshore only.',0.0,9.24,-54.0,-47.99,0); INSERT INTO "extent" VALUES('EPSG','3440','South America - 78°W to 72°W, S hemisphere and SIRGAS 2000 by country','Brazil west of 72°W. In remainder of South America, between 78°W and 72°W, southern hemisphere, onshore and offshore.',-59.36,0.0,-78.0,-71.99,0); INSERT INTO "extent" VALUES('EPSG','3441','South America - 72°W to 66°W, S hemisphere and SIRGAS 2000 by country','Brazil - between 72°W and 66°W, northern and southern hemispheres. In remainder of South America - between 72°W and 66°W, southern hemisphere, onshore and offshore.',-59.87,2.15,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3442','South America - 66°W to 60°W, S hemisphere and SIRGAS 2000 by country','Brazil - between 66°W and 60°W, northern and southern hemispheres. In remainder of South America - between 66°W and 60°W, southern hemisphere, onshore and offshore.',-58.39,5.28,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3443','South America - 60°W to 54°W, S hemisphere and SIRGAS 2000 by country','Brazil - between 60°W and 54°W, northern and southern hemispheres. In remainder of South America - between 60°W and 54°W, southern hemisphere, onshore and offshore.',-44.82,4.51,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3444','South America - 54°W to 48°W, S hemisphere and SIRGAS 2000 by country','Brazil - between 54°W and 48°W, northern and southern hemispheres, onshore and offshore. In remainder of South America - between 54°W and 48°W, southern hemisphere, onshore and offshore.',-54.18,7.04,-54.0,-47.99,0); INSERT INTO "extent" VALUES('EPSG','3445','Brazil - 48°W to 42°W','Brazil - between 48°W and 42°W, northern and southern hemispheres, onshore and offshore.',-33.5,5.13,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','3446','Brazil - 42°W to 36°W','Brazil - between 42°W and 36°W, northern and southern hemispheres, onshore and offshore.',-26.35,0.74,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','3447','Brazil - 36°W to 30°W','Brazil - between 36°W and 30°W, northern and southern hemispheres, onshore and offshore.',-23.8,4.19,-36.0,-29.99,0); INSERT INTO "extent" VALUES('EPSG','3448','South America - SIRGAS 1995 by country','South America - onshore and offshore. Ecuador (mainland and Galapagos) - onshore and offshore.',-59.87,16.75,-113.21,-26.0,0); INSERT INTO "extent" VALUES('EPSG','3449','Greenland - west of 72°W','Greenland - west of 72°W, onshore and offshore.',74.52,79.04,-75.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3450','Greenland - 72°W to 66°W','Greenland - between 72°W and 66°W, onshore and offshore.',73.24,80.9,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3451','Greenland - 66°W to 60°W','Greenland - between 66°W and 60°W, onshore and offshore.',68.92,82.22,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3452','Greenland - 60°W to 54°W','Greenland - between 60°W and 54°W, onshore and offshore south of 84°N.',58.91,84.0,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3453','Greenland - 54°W to 48°W','Greenland - between 54°W and 48°W, onshore and offshore south of 84°N.',56.9,84.0,-54.0,-48.0,0); INSERT INTO "extent" VALUES('EPSG','3454','Greenland - 48°W to 42°W','Greenland - between 48°W and 42°W, onshore and offshore south of 84°N.',56.38,84.0,-48.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','3455','Greenland - 42°W to 36°W','Greenland - between 42°W and 36°W, onshore and offshore south of 84°N.',56.56,84.0,-42.0,-36.0,0); INSERT INTO "extent" VALUES('EPSG','3456','Greenland - 36°W to 30°W','Greenland - between 36°W and 30°W, onshore and offshore south of 84°N.',60.16,84.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','3457','Greenland - 30°W to 24°W','Greenland - between 30°W and 24°W, onshore and offshore south of 84°N.',64.96,84.0,-30.0,-24.0,0); INSERT INTO "extent" VALUES('EPSG','3458','Greenland - 24°W to 18°W','Greenland - between 24°W and 18°W, onshore and offshore south of 84°N.',67.7,84.0,-24.0,-18.0,0); INSERT INTO "extent" VALUES('EPSG','3459','Greenland - 18°W to 12°W','Greenland - between 18°W and 12°W, onshore and offshore south of 84°N.',68.67,84.0,-18.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','3460','Greenland - 12°W to 6°W','Greenland - 12°W to 6°W, onshore and offshore south of 84°N.',72.43,84.0,-12.0,-6.0,0); INSERT INTO "extent" VALUES('EPSG','3461','Mexico - offshore GoM - Campeche area N','Mexico - offshore Gulf of Mexico (GoM) - Bay of Campeche northeast.',20.87,23.01,-94.33,-88.67,0); INSERT INTO "extent" VALUES('EPSG','3462','Mexico - offshore GoM - Campeche area S','Mexico - offshore Gulf of Mexico (GoM) - Bay of Campeche southeast.',17.85,20.89,-94.79,-89.75,0); INSERT INTO "extent" VALUES('EPSG','3463','World - 86°S to 86°N','World between 86°S and 86°N.',-86.0,86.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3464','World - N hemisphere - 12°E to 18°E - by country and WGS 72BE','Between 12°E and 18°E, northern hemisphere between equator and 84°N, onshore and offshore. Chad - west of 18°E.',0.0,84.0,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','3465','World - N hemisphere - 18°E to 24°E - by country and WGS 72BE','Between 12°E and 18°E, northern hemisphere between equator and 84°N, onshore and offshore. Chad - east of 18°E.',0.0,84.0,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','3466','China - Ordos basin','China - Ordos basin.',35.0,39.0,107.0,110.01,0); INSERT INTO "extent" VALUES('EPSG','3467','North America - Great Lakes basin','Canada and United States (USA) - Great Lakes basin.',40.99,50.74,-93.17,-74.47,0); INSERT INTO "extent" VALUES('EPSG','3468','North America - Great Lakes basin and St Lawrence Seaway','Canada and United States (USA) - Great Lakes basin and St Lawrence Seaway.',40.99,52.22,-93.17,-54.75,0); INSERT INTO "extent" VALUES('EPSG','3469','China - offshore - Yellow Sea','China - offshore - Huang Hai (Yellow Sea).',31.23,37.4,119.23,125.06,0); INSERT INTO "extent" VALUES('EPSG','3470','China - offshore - Pearl River basin','China - offshore South China Sea - Pearl River basin.',18.31,22.89,110.13,116.76,0); INSERT INTO "extent" VALUES('EPSG','3471','Denmark - onshore west of 12°E','Denmark - onshore west of 12°E - Zealand, Jutland, Fuen and Lolland.',54.51,57.8,8.0,12.01,0); INSERT INTO "extent" VALUES('EPSG','3472','Denmark - onshore east of 12°E','Denmark - onshore east of 12°E - Zealand and Falster, Bornholm.',54.51,56.18,12.0,15.25,0); INSERT INTO "extent" VALUES('EPSG','3473','World - south of 40°S','Southern hemisphere - south of 40°S including Antarctica.',-90.0,-40.0,-180.0,180.0,1); INSERT INTO "extent" VALUES('EPSG','3474','World - south of 0°N','Southern hemisphere.',-90.0,0.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3475','World - north of 0°N','Northern hemisphere.',0.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3476','World - north of 30°N','Northern hemisphere - north of 30°N, including Arctic.',30.0,90.0,-180.0,180.0,1); INSERT INTO "extent" VALUES('EPSG','3477','Libya - Cyrenaica','Libya - Cyrenaica area 42, blocks 2 and 4.',32.0,32.8,22.49,23.0,0); INSERT INTO "extent" VALUES('EPSG','3478','Jamaica - west of 78°W','Jamaica - west of 78°W onshore and offshore.',14.16,19.36,-80.6,-77.99,0); INSERT INTO "extent" VALUES('EPSG','3479','Jamaica - east of 78°W','Jamaica - east of 78°W onshore and offshore.',14.08,19.2,-78.0,-74.51,0); INSERT INTO "extent" VALUES('EPSG','3480','World - north of 45°N','Northern hemisphere - north of 45°N, including Arctic.',45.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3481','Canada - NWT','Canada - Northwest Territories onshore.',59.98,78.81,-136.46,-102.0,0); INSERT INTO "extent" VALUES('EPSG','3482','USA - west of 174°E - AK','United States (USA) - west of 174°E - Alaska (AK).',49.0,56.3,168.0,174.0,1); INSERT INTO "extent" VALUES('EPSG','3483','USA - 174°E to 180°E - AK','United States (USA) - between 174°E and 180°E - Alaska (AK).',48.0,59.8,174.0,180.0,1); INSERT INTO "extent" VALUES('EPSG','3484','USA - 180°W to 174°W - AK','United States (USA) - between 180°W and 174°W - Alaska (AK).',48.0,63.3,-180.0,-174.0,1); INSERT INTO "extent" VALUES('EPSG','3485','USA - 174°W to 168°W - AK','United States (USA) - between 174°W and 168°W - Alaska (AK).',48.7,73.0,-174.0,-168.0,1); INSERT INTO "extent" VALUES('EPSG','3486','USA - 168°W to 162°W - AK','United States (USA) - between 168°W and 162°W - Alaska (AK).',49.6,74.3,-168.0,-162.0,1); INSERT INTO "extent" VALUES('EPSG','3487','USA - 162°W to 156°W - AK','United States (USA) - between 162°W and 156°W - Alaska (AK).',51.1,74.7,-162.0,-156.0,1); INSERT INTO "extent" VALUES('EPSG','3488','USA - 162°W to 156°W onshore - HI','United States (USA) - between 162°W and 156°W onshore - Hawaii.',19.51,22.29,-160.3,-155.99,0); INSERT INTO "extent" VALUES('EPSG','3489','USA - 162°W to 156°W - AK, HI','United States (USA) - between 162°W and 156°W onshore and offshore - Alaska, Hawaii.',15.57,74.71,-162.0,-155.99,0); INSERT INTO "extent" VALUES('EPSG','3490','USA - 156°W to 150°W - AK','United States (USA) - between 156°W and 150°W - Alaska (AK).',52.1,74.7,-156.0,-150.0,1); INSERT INTO "extent" VALUES('EPSG','3491','USA - 156°W to 150°W onshore - HI','United States (USA) - between 156°W and 150°W onshore - Hawaii.',18.87,20.86,-156.0,-154.74,0); INSERT INTO "extent" VALUES('EPSG','3492','USA - 156°W to 150°W - AK, HI','United States (USA) - between 156°W and 150°W onshore and offshore - Alaska, Hawaii.',15.56,74.71,-156.0,-149.99,0); INSERT INTO "extent" VALUES('EPSG','3493','USA - 150°W to 144°W - AK','United States (USA) - between 150°W and 144°W - Alaska (AK).',54.0,74.2,-150.0,-144.0,1); INSERT INTO "extent" VALUES('EPSG','3494','USA - 144°W to 138°W','United States (USA) - between 144°W and 138°W onshore and offshore - Alaska.',53.47,73.59,-144.0,-137.99,0); INSERT INTO "extent" VALUES('EPSG','3495','USA - 138°W to 132°W','United States (USA) - between 138°W and 132°W onshore and offshore - Alaska.',53.6,73.04,-138.0,-131.99,0); INSERT INTO "extent" VALUES('EPSG','3496','USA - 132°W to 126°W','United States (USA) - between 132°W and 126°W onshore and offshore - Alaska.',35.38,56.84,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','3497','USA - 126°W to 120°W','United States (USA) - between 126°W and 120°W onshore and offshore - California; Oregon; Washington.',30.54,49.09,-126.0,-119.99,0); INSERT INTO "extent" VALUES('EPSG','3498','USA - 120°W to 114°W','United States (USA) - between 120°W and 114°W onshore and offshore - California, Idaho, Nevada, Oregon, Washington.',30.88,49.01,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','3499','USA - 114°W to 108°W','United States (USA) - between 114°W and 108°W - Arizona; Colorado; Idaho; Montana; New Mexico; Utah; Wyoming.',31.33,49.01,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','3500','USA - 108°W to 102°W','United States (USA) - between 108°W and 102°W - Colorado; Montana; Nebraska; New Mexico; North Dakota; Oklahoma; South Dakota; Texas; Wyoming.',28.98,49.01,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','3501','USA - 102°W to 96°W','United States (USA) - between 102°W and 96°W onshore and offshore - Iowa; Kansas; Minnesota; Nebraska; North Dakota; Oklahoma; South Dakota; Texas.',25.83,49.01,-102.0,-96.0,0); INSERT INTO "extent" VALUES('EPSG','3502','USA - 96°W to 90°W','United States (USA) - between 96°W and 90°W onshore and offshore - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin.',25.61,49.38,-96.01,-90.0,0); INSERT INTO "extent" VALUES('EPSG','3503','USA - 90°W to 84°W','United States (USA) - between 90°W and 84°W onshore and offshore - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin.',23.97,48.32,-90.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','3504','USA - 84°W to 78°W','United States (USA) - between 84°W and 78°W onshore and offshore - Florida; Georgia; Kentucky; Maryland; Michigan; New York; North Carolina; Ohio; Pennsylvania; South Carolina; Tennessee; Virginia; West Virginia.',23.81,46.13,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3505','USA - 78°W to 72°W','United States (USA) - between 78°W and 72°W onshore and offshore - Connecticut; Delaware; Maryland; Massachusetts; New Hampshire; New Jersey; New York; North Carolina; Pennsylvania; Virginia; Vermont.',28.28,45.03,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3506','USA - 72°W to 66°W','United States (USA) - between 72°W and 66°W onshore and offshore - Connecticut; Maine; Massachusetts; New Hampshire; New York (Long Island); Rhode Island; Vermont.',33.61,47.47,-72.0,-65.99,0); INSERT INTO "extent" VALUES('EPSG','3507','China - Tarim - 77.5°E to 88°E and 37°N to 42°N','China - south and west Tarim basin.',37.0,41.99,77.45,88.0,0); INSERT INTO "extent" VALUES('EPSG','3508','New Zealand - offshore Pacific Ocean, Southern Ocean','Southwestern Pacific Ocean and Southern Ocean areas surrounding New Zealand.',-60.0,-25.0,155.0,-169.99,0); INSERT INTO "extent" VALUES('EPSG','3509','UAE - Abu Dhabi - offshore','United Arab Emirates (UAE) - Abu Dhabi offshore.',24.0,25.64,51.5,54.85,0); INSERT INTO "extent" VALUES('EPSG','3510','Indonesia - 96°E to 99°E onshore','Indonesia - onshore between 96°E and 99°E.',-1.81,5.42,96.0,99.0,0); INSERT INTO "extent" VALUES('EPSG','3511','Indonesia - 99°E to 102°E onshore','Indonesia - onshore between 99°E and 102°E.',-3.57,3.71,99.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','3512','Indonesia - 102°E to 105°E onshore','Indonesia - onshore between 102°E and 105°E.',-5.99,1.68,102.0,105.0,0); INSERT INTO "extent" VALUES('EPSG','3513','Indonesia - 105°E to 108°E onshore','Indonesia - onshore between 105°E and 108°E.',-7.79,4.11,105.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3514','Indonesia - 108°E to 111°E onshore','Indonesia - onshore between 108°E and 111°E.',-8.31,4.25,108.0,111.0,0); INSERT INTO "extent" VALUES('EPSG','3515','Indonesia - 111°E to 114°E onshore','Indonesia - onshore between 111°E and 114°E.',-8.67,1.59,111.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','3516','Indonesia - 114°E to 117°E onshore','Indonesia - onshore between 114°E and 117°E.',-9.15,4.37,114.0,117.01,0); INSERT INTO "extent" VALUES('EPSG','3517','Indonesia - 117°E to 120°E onshore','Indonesia - onshore between 117°E and 120°E.',-10.15,4.36,117.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3518','Indonesia - 120°E to 123°E onshore','Indonesia - onshore between 120°E and 123°E.',-10.98,1.4,120.0,123.0,0); INSERT INTO "extent" VALUES('EPSG','3519','Indonesia - 123°E to 126°E onshore','Indonesia - onshore between 123°E and 126°E.',-10.92,3.84,123.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','3520','Indonesia - 126°E to 129°E onshore','Indonesia - onshore between 126°E and 129°E.',-8.32,4.59,126.0,129.0,0); INSERT INTO "extent" VALUES('EPSG','3521','Indonesia - 129°E to 132°E onshore','Indonesia - onshore between 129°E and 132°E.',-8.41,0.1,129.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','3522','Indonesia - 132°E to 135°E onshore','Indonesia - onshore between 132°E and 135°E.',-7.3,-0.29,132.0,135.0,0); INSERT INTO "extent" VALUES('EPSG','3523','Indonesia - 135°E to 138°E onshore','Indonesia - onshore between 135°E and 138°E.',-8.49,-0.58,135.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','3524','Canada - 72°W to 66°W','Canada between 72°W and 66°W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Quebec.',40.8,84.0,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3525','Canada - 66°W to 60°W','Canada between 66°W and 60°W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Prince Edward Island, Quebec.',40.04,84.0,-66.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3526','Canada - 108°W to 102°W','Canada between 108°W and 102°W onshore and offshore - Northwest Territories, Nunavut, Saskatchewan.',48.99,84.0,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','3527','Canada - 114°W to 108°W','Canada between 114°W and 108°W onshore and offshore - Alberta, Northwest Territories, Nunavut, Saskatchewan.',48.99,84.0,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','3528','Canada - 120°W to 114°W','Canada between 120°W and 114°W onshore and offshore - Alberta, British Columbia, Northwest Territories, Nunavut.',48.99,83.5,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','3529','South Georgia - onshore','South Georgia and the South Sandwich Islands - South Georgia onshore.',-54.95,-53.93,-38.08,-35.74,0); INSERT INTO "extent" VALUES('EPSG','3530','UAE - Dubai - offshore','United Arab Emirates (UAE) - Dubai offshore - Falah, Fateh and Rashid oilfields.',24.94,25.8,54.06,55.3,0); INSERT INTO "extent" VALUES('EPSG','3531','UAE - Dubai municipality','United Arab Emirates (UAE) - Dubai municipality.',24.85,25.34,54.84,55.55,0); INSERT INTO "extent" VALUES('EPSG','3532','Channel Islands - Jersey','Channel Islands - Jersey.',48.93,49.34,-2.3,-1.98,1); INSERT INTO "extent" VALUES('EPSG','3533','Channel Islands - Guernsey','Channel Islands - Guernsey.',49.4,49.75,-2.75,-2.13,1); INSERT INTO "extent" VALUES('EPSG','3534','Serbia and Kosovo','Serbia including Vojvodina and Kosovo.',41.85,46.19,18.81,23.01,0); INSERT INTO "extent" VALUES('EPSG','3535','Montenegro','Montenegro - onshore and offshore.',41.27,43.56,18.02,20.38,0); INSERT INTO "extent" VALUES('EPSG','3536','Montenegro - onshore','Montenegro - onshore.',41.79,43.56,18.45,20.38,0); INSERT INTO "extent" VALUES('EPSG','3537','Portugal - mainland - offshore','Portugal - mainland - offshore.',34.91,41.88,-13.87,-7.24,0); INSERT INTO "extent" VALUES('EPSG','3538','Croatia - east of 18°E','Croatia - east of 18°E, onshore and offshore.',41.62,45.92,18.0,19.43,0); INSERT INTO "extent" VALUES('EPSG','3539','Croatia - west of 18°E','Croatia - west of 18°E, onshore and offshore.',41.63,46.54,13.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','3540','Canada - Alberta - west of 118.5°W','Canada - Alberta - west of 118°30'' W.',52.88,60.0,-120.0,-118.5,0); INSERT INTO "extent" VALUES('EPSG','3541','Canada - Alberta - 118.5°W to 115.5°W','Canada - Alberta - between 118°30''W and 115°30'' W.',50.77,60.0,-118.5,-115.5,0); INSERT INTO "extent" VALUES('EPSG','3542','Canada - Alberta - 115.5°W to 112.5°W','Canada - Alberta - between 115°30''W and 112°30''W.',48.99,60.0,-115.5,-112.5,0); INSERT INTO "extent" VALUES('EPSG','3543','Canada - Alberta - east of 112.5°W','Canada - Alberta - east of 112°30''W.',48.99,60.0,-112.5,-109.98,0); INSERT INTO "extent" VALUES('EPSG','3544','World - 85°S to 85°N','World between 85.06°S and 85.06°N.',-85.06,85.06,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','3545','France - mainland south of 43°N and Corsica','France onshore - mainland south of 43°N and Corsica.',41.31,43.07,-1.06,9.63,0); INSERT INTO "extent" VALUES('EPSG','3546','France - mainland south of 44°N','France - mainland onshore south of 44°N.',42.33,44.01,-1.79,7.65,0); INSERT INTO "extent" VALUES('EPSG','3547','France - mainland - 43°N to 45°N','France - mainland onshore between 43°N and 45°N.',42.92,45.0,-1.79,7.71,0); INSERT INTO "extent" VALUES('EPSG','3548','France - mainland - 44°N to 46°N','France - mainland onshore between 44°N and 46°N.',44.0,46.0,-1.46,7.71,0); INSERT INTO "extent" VALUES('EPSG','3549','France - mainland - 45°N to 47°N','France - mainland onshore between 45°N and 47°N.',45.0,47.0,-2.21,7.16,0); INSERT INTO "extent" VALUES('EPSG','3550','France - mainland - 46°N to 48°N','France - mainland onshore between 46°N and 48°N.',46.0,48.0,-4.77,7.63,0); INSERT INTO "extent" VALUES('EPSG','3551','France - mainland - 47°N to 49°N','France - mainland onshore between 47°N and 49°N.',47.0,49.0,-4.87,8.23,0); INSERT INTO "extent" VALUES('EPSG','3552','France - mainland - 48°N to 50°N','France - mainland onshore between 48°N and 50°N.',48.0,50.0,-4.87,8.23,0); INSERT INTO "extent" VALUES('EPSG','3553','France - mainland north of 49°N','France - mainland onshore north of 49°N.',49.0,51.14,-2.03,8.08,0); INSERT INTO "extent" VALUES('EPSG','3554','New Zealand - Snares and Auckland Islands','New Zealand - Snares Island, Auckland Island - onshore.',-51.13,-47.8,165.55,166.93,0); INSERT INTO "extent" VALUES('EPSG','3555','New Zealand - Campbell Island','New Zealand - Campbell Island.',-52.83,-52.26,168.65,169.6,0); INSERT INTO "extent" VALUES('EPSG','3556','New Zealand - Antipodes and Bounty Islands','New Zealand - Antipodes Island, Bounty Islands.',-49.92,-47.54,178.4,179.37,0); INSERT INTO "extent" VALUES('EPSG','3557','New Zealand - Raoul and Kermadec Islands','New Zealand - Raoul Island, Kermadec Islands.',-31.56,-29.03,-179.07,-177.62,0); INSERT INTO "extent" VALUES('EPSG','3558','Antarctica - Ross Sea Region','Antarctica - Ross Sea Region - nominally between 160°E and 150°W but includes buffer on eastern hemisphere margin to include Transantarctic Mountains',-90.0,-59.99,144.99,-144.99,0); INSERT INTO "extent" VALUES('EPSG','3559','Australia - offshore','Australia - offshore including EEZ.',-47.2,-8.88,109.23,163.2,0); INSERT INTO "extent" VALUES('EPSG','3560','Slovenia - Dolenjska - central','Slovenia - central Dolenjska (Lower Carniola).',45.81,46.01,14.97,15.43,0); INSERT INTO "extent" VALUES('EPSG','3561','China - offshore - Bei Bu','China - offshore - Bei Bu Wan (Gulf of Tonkin).',17.81,21.69,107.15,110.17,0); INSERT INTO "extent" VALUES('EPSG','3562','Taiwan - 120°E to 122°E','Taiwan, Republic of China - between 120°E and 122°E, onshore and offshore - Taiwan Island.',20.41,26.72,119.99,122.06,0); INSERT INTO "extent" VALUES('EPSG','3563','Taiwan - 118°E to 120°E','Taiwan, Republic of China - between 118°E and 120°E, onshore and offshore - Penghu (Pescadores) Islands.',18.63,24.65,118.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3564','Slovenia - west of 14°30''E onshore','Slovenia - onshore west of 14°30''E.',45.44,46.53,13.38,14.58,0); INSERT INTO "extent" VALUES('EPSG','3565','Slovenia - NE','Slovenia - east of 14°30''E and north of 46°03''N.',46.14,46.88,14.54,16.61,0); INSERT INTO "extent" VALUES('EPSG','3566','Slovenia - SE','Slovenia - east of 14°30''E and south of 46°09''N.',45.42,46.22,14.55,15.73,0); INSERT INTO "extent" VALUES('EPSG','3567','Slovenia - southeastern','Slovenia - southeastern.',45.42,45.77,14.53,15.36,0); INSERT INTO "extent" VALUES('EPSG','3568','Slovenia - Dolenjska','Slovenia - Dolenjska (Lower Carniola).',45.7,46.12,14.47,15.73,0); INSERT INTO "extent" VALUES('EPSG','3569','Slovenia - Stajerska','Slovenia - Stajerska (Slovene Styria).',46.1,46.76,14.74,16.27,0); INSERT INTO "extent" VALUES('EPSG','3570','Slovenia - Pomurje','Slovenia - Pomurje (the Mura Region).',46.47,46.88,15.96,16.61,0); INSERT INTO "extent" VALUES('EPSG','3571','Slovenia - Gorenjska and N Primorsko','Slovenia - Gorenjska (Upper Carniola) and northern Primorska.',46.05,46.53,13.38,14.82,0); INSERT INTO "extent" VALUES('EPSG','3572','Slovenia - Primorska and Notranjska onshore','Slovenia - onshore Primorska and Notranjska (Inner Carniola).',45.44,46.08,13.47,14.58,0); INSERT INTO "extent" VALUES('EPSG','3573','Slovenia - central','Slovenia - central.',45.91,46.31,14.21,15.28,0); INSERT INTO "extent" VALUES('EPSG','3574','Europe - onshore - eastern - S-42(58)','Onshore: Bulgaria, Czechia, Germany (former DDR), Hungary, Poland and Slovakia. Onshore and offshore: Albania and Romania.',39.63,54.89,9.92,31.41,0); INSERT INTO "extent" VALUES('EPSG','3575','Germany - East Germany - west of 12°E','Germany - states of former East Germany - west of 12°E.',50.2,54.23,9.92,12.0,0); INSERT INTO "extent" VALUES('EPSG','3576','Europe - 12°E to 18°E onshore and S-42(83) by country','Germany (former DDR) - onshore east of 12°E. Czechia, Hungary and Slovakia - west of 18°E.',45.78,54.74,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','3577','Europe - 18°E to 24°E onshore and S-42(58) by country','Albania - onshore east of 18°E. Czechia, Hungary and Slovakia - east of 18°E. Poland - onshore between 18°E and 24°E. Bulgaria and Romania - onshore west of 24°E.',39.64,54.89,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','3578','Europe - 18°E to 24°E onshore and S-42(83) by country','Czechia, Hungary and Slovakia - east of 18°E.',45.74,50.06,18.0,22.9,0); INSERT INTO "extent" VALUES('EPSG','3579','Europe - 24°E to 30°E onshore and S-42(58) by country','Bulgaria, Poland and Romania - onshore east of 24°E.',41.24,50.93,24.0,29.74,0); INSERT INTO "extent" VALUES('EPSG','3580','Europe - 13.5°E to 16.5°E onshore and S-42(58) by country','Czechia - between 13°30''E and 16°30''E. Germany - states of former East Germany onshore - east of 13°30''E - Brandenburg; Mecklenburg-Vorpommern; Sachsen. Hungary and Poland - onshore west of 16°30''E.',46.54,54.72,13.5,16.5,0); INSERT INTO "extent" VALUES('EPSG','3581','Europe - 16.5°E to 19.5°E onshore and S-42(58) by country','Albania - onshore west of 19°30''E. Czechia - east of 16°30''E. Hungary and Poland - onshore between 16°30''E and 19°30''E. Slovakia - west of 19°30''E.',40.14,54.89,16.5,19.5,0); INSERT INTO "extent" VALUES('EPSG','3582','Europe - 16.5°E to 19.5°E onshore and S-42(83) by country','Czechia - east of 16°30''E. Hungary - between 16°30''E and 19°30''E. Slovakia - west of 19°30''E.',45.74,50.45,16.5,19.5,0); INSERT INTO "extent" VALUES('EPSG','3583','Europe - 19.5°E to 22.5°E onshore and S-42(58) by country','Albania - east of 19°30''E. Bulgaria and Romania - west of 22°30''E. Hungary, Poland and Slovakia - between 19°30''E and 22°30''E.',39.64,54.51,19.5,22.5,0); INSERT INTO "extent" VALUES('EPSG','3584','Europe - 19.5°E to 22.5°E onshore and S-42(83) by country','Hungary and Slovakia - between 19°30''E and 22°30''E.',46.1,49.59,19.5,22.5,0); INSERT INTO "extent" VALUES('EPSG','3585','Europe - 22.5°E to 25.5°E onshore and S-42(58) by country','Bulgaria and Romania - between 22°30''E and 25°30''E. Hungary, Poland and Slovakia - east of 22°30''E.',41.24,54.41,22.5,25.5,0); INSERT INTO "extent" VALUES('EPSG','3586','Europe - 22.5°E to 25.5°E onshore and S-42(83) by country','Hungary and Slovakia - east of 22°30''E.',47.76,49.1,22.5,22.9,0); INSERT INTO "extent" VALUES('EPSG','3587','Europe - 25.5°E to 28.5°E onshore and S-42(58) by country','Bulgaria and Romania - onshore between 25°30''E and 28°30''E.',41.28,48.27,25.5,28.5,0); INSERT INTO "extent" VALUES('EPSG','3588','Europe - 28.5°E to 31.5°E onshore and S-42(58) by country','Bulgaria and Romania - onshore east of 28°30''E.',43.34,45.44,28.5,29.74,0); INSERT INTO "extent" VALUES('EPSG','3589','Pakistan - Gambat','Pakistan - Gambat.',25.88,27.67,68.24,69.3,0); INSERT INTO "extent" VALUES('EPSG','3590','Nigeria - 4°N to 5°N, 6°E to 8°E','Nigeria - 4°N to 5°N and 6°E to 8°E.',3.99,5.01,5.99,8.01,0); INSERT INTO "extent" VALUES('EPSG','3591','Taiwan - onshore - Penghu','Taiwan, Republic of China - onshore - Penghu (Pescadores) Islands.',23.13,23.82,119.25,119.78,0); INSERT INTO "extent" VALUES('EPSG','3592','Antarctica - Darwin Glacier region','Antarctica - Darwin Glacier region.',-81.0,-76.0,145.0,169.0,0); INSERT INTO "extent" VALUES('EPSG','3593','New Zealand - offshore','New Zealand - offshore.',-55.95,-25.88,160.6,-171.2,0); INSERT INTO "extent" VALUES('EPSG','3594','Europe - EVRF2007','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.24,-9.56,31.59,0); INSERT INTO "extent" VALUES('EPSG','3595','Finland - west of 19.5°E onshore nominal','Finland - nominally onshore west of 19°30''E but may be used in adjacent areas to east if a municipality chooses to use one zone over its whole extent.',60.08,60.34,19.24,19.5,0); INSERT INTO "extent" VALUES('EPSG','3596','Finland - 19.5°E to 20.5°E onshore nominal','Finland - nominally onshore between 19°30''E and 20°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.92,60.48,19.5,20.5,0); INSERT INTO "extent" VALUES('EPSG','3597','Finland - 20.5°E to 21.5°E onshore nominal','Finland - nominally onshore between 20°30''E and 21°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.84,69.33,20.5,21.5,0); INSERT INTO "extent" VALUES('EPSG','3598','Finland - 21.5°E to 22.5°E onshore nominal','Finland - nominally onshore between 21°30''E and 22°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.76,69.31,21.5,22.5,0); INSERT INTO "extent" VALUES('EPSG','3599','Finland - 22.5°E to 23.5°E onshore nominal','Finland - nominally onshore between 22°30''E and 23°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.75,68.74,22.5,23.5,0); INSERT INTO "extent" VALUES('EPSG','3600','Finland - 23.5°E to 24.5°E onshore nominal','Finland - nominally onshore between 23°30''E and 24°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.86,68.84,23.5,24.5,0); INSERT INTO "extent" VALUES('EPSG','3601','Finland - 24.5°E to 25.5°E onshore nominal','Finland - nominally onshore between 24°30''E and 25°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.94,68.9,24.5,25.5,0); INSERT INTO "extent" VALUES('EPSG','3602','Finland - 25.5°E to 26.5°E onshore nominal','Finland - nominally onshore between 25°30''E and 26°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',60.18,69.94,25.5,26.5,0); INSERT INTO "extent" VALUES('EPSG','3603','Finland - 26.5°E to 27.5°E onshore nominal','Finland - nominally onshore between 26°30''E and 27°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',60.36,70.05,26.5,27.5,0); INSERT INTO "extent" VALUES('EPSG','3604','Finland - 27.5°E to 28.5°E onshore nominal','Finland - nominally onshore between 27°30''E and 28°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',60.42,70.09,27.5,28.5,0); INSERT INTO "extent" VALUES('EPSG','3605','Finland - 28.5°E to 29.5°E nominal','Finland - nominally between 28°30''E and 29°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',60.94,69.81,28.5,29.5,0); INSERT INTO "extent" VALUES('EPSG','3606','Finland - 29.5°E to 30.5°E nominal','Finland - nominally between 29°30''E and 30°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',61.43,67.98,29.5,30.5,0); INSERT INTO "extent" VALUES('EPSG','3607','Finland - east of 30.5°E nominal','Finland - nominally east of 30°30''E but may be used in adjacent areas to west if a municipality chooses to use one zone over its whole extent.',62.08,64.27,30.5,31.59,0); INSERT INTO "extent" VALUES('EPSG','3608','Sweden - Stockholm county','Sweden - Stockholm county. Municipalities of Botkyrka, Danderyd, Ekerö, Haninge, Huddinge, Järfälla, Lidingö, Nacka, Nynäshamn, Salem, Sigtuna, Sollentuna, Solna, Stockholm and Sundbyberg.',58.69,60.27,17.25,19.61,0); INSERT INTO "extent" VALUES('EPSG','3609','Congo DR (Zaire) - Katanga west of 25.5°E','The Democratic Republic of the Congo (Zaire) - Katanga west of 25°30''E.',-11.72,-6.32,21.74,25.51,0); INSERT INTO "extent" VALUES('EPSG','3610','Congo DR (Zaire) - Katanga 24.5°E to 27.5°E','The Democratic Republic of the Congo (Zaire) - Katanga between 24°30''E and 27°30''E.',-12.08,-4.99,24.5,27.5,0); INSERT INTO "extent" VALUES('EPSG','3611','Congo DR (Zaire) - Katanga 26.5°E to 29.5°E','The Democratic Republic of the Congo (Zaire) - Katanga between 26°30''E and 29°30''E.',-13.44,-4.99,26.5,29.5,0); INSERT INTO "extent" VALUES('EPSG','3612','Congo DR (Zaire) - Katanga east of 28.5°E','The Democratic Republic of the Congo (Zaire) - Katanga east of 28°30''E.',-13.46,-4.99,28.5,30.78,0); INSERT INTO "extent" VALUES('EPSG','3613','Congo DR (Zaire) - south','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto - onshore and offshore.',-13.46,-3.41,11.79,29.81,0); INSERT INTO "extent" VALUES('EPSG','3614','Congo DR (Zaire) - Katanga - Lubumbashi area','The Democratic Republic of the Congo (Zaire) - Katanga - Likasi-Lubumbashi area.',-12.01,-11.13,26.38,27.75,0); INSERT INTO "extent" VALUES('EPSG','3615','Moldova - west of 30°E','Moldova - west of 30°E.',45.44,48.47,26.63,30.0,0); INSERT INTO "extent" VALUES('EPSG','3616','Moldova - east of 30°E','Moldova - east of 30°E.',46.37,46.47,30.0,30.13,0); INSERT INTO "extent" VALUES('EPSG','3617','Congo DR (Zaire) - south and 15°E to 17°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 15°E and 17°E.',-7.31,-3.41,15.0,17.0,0); INSERT INTO "extent" VALUES('EPSG','3618','Congo DR (Zaire) - south and 17°E and 19°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 17°E and 19°E.',-8.11,-3.43,17.0,19.0,0); INSERT INTO "extent" VALUES('EPSG','3619','Brazil - Distrito Federal','Brazil - Distrito Federal.',-15.94,-15.37,-48.1,-47.1,0); INSERT INTO "extent" VALUES('EPSG','3620','Congo DR (Zaire) - south and 19°E to 21°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 19°E and 21°E.',-8.0,-3.77,19.0,21.0,0); INSERT INTO "extent" VALUES('EPSG','3621','Congo DR (Zaire) - south and 21°E to 23°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 21°E and 23°E.',-11.24,-4.18,21.0,23.01,0); INSERT INTO "extent" VALUES('EPSG','3622','Congo DR (Zaire) - south and 23°E to 25°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 23°E and 25°E.',-11.47,-4.58,23.0,25.0,0); INSERT INTO "extent" VALUES('EPSG','3623','Congo DR (Zaire) - south and 25°E to 27°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 25°E and 27°E.',-11.99,-4.99,25.0,27.0,0); INSERT INTO "extent" VALUES('EPSG','3624','Congo DR (Zaire) - south and 27°E to 29°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 27°E and 29°E.',-13.39,-6.43,27.0,29.0,0); INSERT INTO "extent" VALUES('EPSG','3625','Iraq - onshore','Iraq - onshore.',29.06,37.39,38.79,48.61,0); INSERT INTO "extent" VALUES('EPSG','3626','Congo DR (Zaire) - south and 12°E to 18°E','The Democratic Republic of the Congo (Zaire) - onshore and offshore south of a line through Bandundu, Seke and Pweto and between 12°E and 18°E.',-8.11,-3.41,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','3627','Congo DR (Zaire) - south and 18°E to 24°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and between 18°E and 24°E.',-11.24,-3.57,18.0,24.0,0); INSERT INTO "extent" VALUES('EPSG','3628','Congo DR (Zaire) - south and 24°E to 30°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and east of 24°E.',-13.46,-4.79,24.0,29.81,0); INSERT INTO "extent" VALUES('EPSG','3629','Spain - Canary Islands - west of 18°W','Spain - Canary Islands - west of 18°W, onshore and offshore.',24.6,31.19,-21.93,-18.0,0); INSERT INTO "extent" VALUES('EPSG','3630','Spain - Canary Islands - east of 18°W','Spain - Canary Islands - east of 18°W, onshore and offshore.',25.25,32.76,-18.0,-11.75,0); INSERT INTO "extent" VALUES('EPSG','3631','Denmark - onshore Jutland west of 10°E','Denmark - Jutland onshore west of 10°E.',54.8,57.64,8.0,10.0,0); INSERT INTO "extent" VALUES('EPSG','3632','Denmark - onshore Jutland east of 9°E and Funen','Denmark - onshore - Jutland east of 9°E and Funen.',54.67,57.8,9.0,11.29,0); INSERT INTO "extent" VALUES('EPSG','3633','Mexico - 96°W to 90°W','Mexico between 96°W and 90°W, onshore and offshore.',12.1,26.0,-96.0,-90.0,0); INSERT INTO "extent" VALUES('EPSG','3634','Caribbean - Puerto Rico and US Virgin Islands - onshore','Puerto Rico and US Virgin Islands - onshore.',17.62,18.57,-67.97,-64.51,0); INSERT INTO "extent" VALUES('EPSG','3635','Mexico - east of 90°W','Mexico east of 90°W, onshore and offshore.',17.81,25.77,-90.0,-84.64,0); INSERT INTO "extent" VALUES('EPSG','3636','Norway - onshore - west of 6°E','Norway - onshore - west of 6°E.',58.32,62.64,4.39,6.01,0); INSERT INTO "extent" VALUES('EPSG','3637','USA - 102°W to 96°W and GoM OCS','United States (USA) - between 102°W and 96°W. Iowa; Kansas; Minnesota; Nebraska; North Dakota; Oklahoma; South Dakota; Texas; Gulf of Mexico outer continental shelf (GoM OCS) west of approximately 96°W - protraction areas Corpus Christi; Port Isabel.',25.83,49.01,-102.0,-95.87,0); INSERT INTO "extent" VALUES('EPSG','3638','South America - 84°W to 78°W, S hemisphere and SIRGAS95 by country','Ecuador (mainland whole country including areas in northern hemisphere and east of 78°W), onshore and offshore. In remainder of South America, between 84°W and 78°W, southern hemisphere, onshore and offshore.',-56.45,1.45,-84.0,-75.21,0); INSERT INTO "extent" VALUES('EPSG','3639','Norway - onshore - 6°E to 7°E','Norway - onshore - between 6°E and 7°E.',57.93,63.03,6.0,7.01,0); INSERT INTO "extent" VALUES('EPSG','3640','USA - 96°W to 90°W and GoM OCS','United States (USA) - between 96°W and 90°W - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin; Gulf of Mexico outer continental shelf (GoM OCS) between approximately 96°W and 90°W - protraction areas East Breaks; Alaminos Canyon; Garden Banks; Keathley Canyon; Sigsbee Escarpment; Ewing Bank; Green Canyon; Walker Ridge; Amery Terrace.',25.61,49.38,-96.01,-89.86,0); INSERT INTO "extent" VALUES('EPSG','3641','USA - 90°W to 84°W and GoM OCS','United States (USA) - between 90°W and 84°W onshore and offshore - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin; Gulf of Mexico outer continental shelf (GoM OCS) between approximately 90°W and 84°W - protraction areas Mobile; Viosca Knoll; Mississippi Canyon; Atwater Valley; Lund; Lund South; Pensacola; Destin Dome; De Soto Canyon; Lloyd Ridge; Henderson; Florida Plain; Campeche Escarpment; Apalachicola; Florida Middle Ground; The Elbow; Vernon Basin; Howell Hook; Rankin.',23.95,48.32,-90.01,-83.91,0); INSERT INTO "extent" VALUES('EPSG','3642','USA - 84°W to 78°W and GoM OCS','United States (USA) - between 84°W and 78°W onshore and offshore - Florida; Georgia; Maryland; Michigan; New York; North Carolina; Ohio; Pennsylvania; South Carolina; Tennessee; Virginia; West Virginia; Gulf of Mexico outer continental shelf (GoM OCS) east of approximately 84°W - protraction areas Gainesville; Tarpon Springs; St Petersburg; Charlotte Harbor; Pulley Ridge; Dry Tortugas; Tortugas Valley; Miami; Key West.',23.81,46.13,-84.09,-77.99,0); INSERT INTO "extent" VALUES('EPSG','3643','Germany - Schleswig-Holstein','Germany - Schleswig-Holstein',53.35,55.06,7.8,11.35,1); INSERT INTO "extent" VALUES('EPSG','3644','Germany - Schleswig-Holstein - east of 10.5°E','Germany - Schleswig-Holstein - east of 10°30''E.',53.36,54.59,10.49,11.4,0); INSERT INTO "extent" VALUES('EPSG','3645','Sao Tome and Principe - onshore - Sao Tome','Sao Tome and Principe - onshore - Sao Tome.',-0.04,0.46,6.41,6.82,0); INSERT INTO "extent" VALUES('EPSG','3646','Sao Tome and Principe - onshore - Principe','Sao Tome and Principe - onshore - Principe.',1.48,1.76,7.27,7.52,0); INSERT INTO "extent" VALUES('EPSG','3647','Norway - onshore - 7°E to 8°E','Norway - onshore - between 7°E and 8°E.',57.9,63.59,6.99,8.01,0); INSERT INTO "extent" VALUES('EPSG','3648','Norway - onshore - 8°E to 9°E','Norway - onshore - between 8°E and 9°E.',58.0,64.1,8.0,9.01,0); INSERT INTO "extent" VALUES('EPSG','3649','Norway - onshore - 9°E to 10°E','Norway - onshore - between 9°E and 10°E.',58.44,64.25,9.0,10.01,0); INSERT INTO "extent" VALUES('EPSG','3650','Norway - onshore - 10°E to 11°E','Norway - onshore - between 10°E and 11°E.',58.9,65.27,10.0,11.01,0); INSERT INTO "extent" VALUES('EPSG','3651','Norway - onshore - 11°E to 12°E','Norway - onshore - between 11°E and 12°E.',58.88,67.58,11.0,12.01,0); INSERT INTO "extent" VALUES('EPSG','3652','USA - Michigan - SPCS - W','United States (USA) - Michigan - counties of Baraga; Dickinson; Gogebic; Houghton; Iron; Keweenaw; Marquette; Menominee; Ontonagon.',45.09,48.32,-90.42,-83.44,0); INSERT INTO "extent" VALUES('EPSG','3653','Norway - onshore - 12°E to 13°E','Norway - onshore - between 12°E and 13°E.',59.88,68.16,12.0,13.01,0); INSERT INTO "extent" VALUES('EPSG','3654','Norway - onshore - 13°E to 14°E','Norway - onshore - between 13°E and 14°E.',64.01,68.4,13.0,14.01,0); INSERT INTO "extent" VALUES('EPSG','3655','Norway - onshore - 14°E to 15°E','Norway - onshore - between 14°E and 15°E.',64.03,69.07,14.0,15.01,0); INSERT INTO "extent" VALUES('EPSG','3656','Norway - onshore - 15°E to 16°E','Norway - onshore - between 15°E and 16°E.',66.14,69.38,15.0,16.01,0); INSERT INTO "extent" VALUES('EPSG','3657','Norway - onshore - 16°E to 17°E','Norway - onshore - between 16°E and 17°E.',66.88,69.49,15.99,17.01,0); INSERT INTO "extent" VALUES('EPSG','3658','Norway - onshore - 17°E to 18°E','Norway - onshore - between 17°E and 18°E.',67.94,69.96,17.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','3659','Germany - Schleswig-Holstein - west of 10.5°E','Germany - Schleswig-Holstein - west of 10°30''E including Heligoland.',53.37,55.09,7.8,10.5,0); INSERT INTO "extent" VALUES('EPSG','3660','Norway - onshore - 18°E to 19°E','Norway - onshore - between 18°E and 19°E.',68.04,70.29,18.0,19.01,0); INSERT INTO "extent" VALUES('EPSG','3661','Norway - onshore - 19°E to 20°E','Norway - onshore - between 19°E and 20°E.',68.33,70.35,19.0,20.01,0); INSERT INTO "extent" VALUES('EPSG','3662','Norway - onshore - 20°E to 21°E','Norway - onshore - between 20°E and 21°E.',68.37,70.37,20.0,21.01,0); INSERT INTO "extent" VALUES('EPSG','3663','Norway - onshore - 21°E to 22°E','Norway - onshore - between 21°E and 22°E.',69.03,70.73,21.0,22.01,0); INSERT INTO "extent" VALUES('EPSG','3664','USA - CONUS and Alaska - onshore','United States (USA) - CONUS and Alaska - onshore - Alabama; Alaska mainland; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',24.41,71.4,-168.26,-66.91,0); INSERT INTO "extent" VALUES('EPSG','3665','Norway - onshore - 22°E to 23°E','Norway - onshore - between 22°E and 23°E.',68.69,70.93,22.0,23.01,0); INSERT INTO "extent" VALUES('EPSG','3666','Indonesia - Java, Java Sea and western Sumatra','Indonesia - Bali, Java and western Sumatra onshore, offshore southern Java Sea, Madura Strait and western Bali Sea.',-8.91,5.97,95.16,117.01,0); INSERT INTO "extent" VALUES('EPSG','3667','Norway - onshore - 23°E to 24°E','Norway - onshore - between 23°E and 24°E.',68.62,71.15,23.0,24.01,0); INSERT INTO "extent" VALUES('EPSG','3668','Norway - onshore - 24°E to 25°E','Norway - onshore - between 24°E and 25°E.',68.58,71.17,24.0,25.01,0); INSERT INTO "extent" VALUES('EPSG','3669','Norway - onshore - 25°E to 26°E','Norway - onshore - between 25°E and 26°E.',68.59,71.24,25.0,26.01,0); INSERT INTO "extent" VALUES('EPSG','3670','Portugal - Azores and Madeira','Portugal - Azores and Madeira island groups and surrounding EEZ - Flores, Corvo; Graciosa, Terceira, Sao Jorge, Pico, Faial; Sao Miguel, Santa Maria; Madeira, Porto Santo, Desertas; Selvagens.',29.24,43.07,-35.58,-12.48,0); INSERT INTO "extent" VALUES('EPSG','3671','Norway - onshore - 26°E to 27°E','Norway - onshore - between 26°E and 27°E.',69.71,71.2,26.0,27.01,0); INSERT INTO "extent" VALUES('EPSG','3672','Norway - onshore - 27°E to 28°E','Norway - onshore - between 27°E and 28°E.',69.9,71.19,27.0,28.01,0); INSERT INTO "extent" VALUES('EPSG','3673','Norway - onshore - 28°E to 29°E','Norway - onshore - between 28°E and 29°E.',69.03,71.15,28.0,29.01,0); INSERT INTO "extent" VALUES('EPSG','3674','Norway - onshore - 29°E to 30°E','Norway - onshore - between 29°E and 30°E.',69.02,70.94,29.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','3675','Paraguay - north of 22°S','Paraguay - north of 22°S.',-22.0,-19.29,-62.57,-57.81,0); INSERT INTO "extent" VALUES('EPSG','3676','Norway - onshore - east of 30°E','Norway - onshore - east of 30°E.',69.46,70.77,30.0,31.32,0); INSERT INTO "extent" VALUES('EPSG','3677','Portugal - Azores 30°W to 24°W','Portugal - between 30°W and 24°W - central and eastern Azores - Graciosa, Terceira, Sao Jorge, Pico, Faial; Sao Miguel and Santa Maria islands and surrounding EEZ.',33.52,42.96,-30.0,-24.0,0); INSERT INTO "extent" VALUES('EPSG','3678','Portugal - Madeira and EEZ E of 18°W','Portugal - Madeira, Porto Santo, Desertas and Selvagens islands and surrounding EEZ east of 18°W.',29.24,36.46,-18.0,-12.48,0); INSERT INTO "extent" VALUES('EPSG','3679','Portugal - Madeira island onshore','Portugal - Madeira island onshore.',32.58,32.93,-17.31,-16.66,0); INSERT INTO "extent" VALUES('EPSG','3680','Portugal - Porto Santo island onshore','Portugal - Porto Santo island (Madeira archipelago) onshore.',32.96,33.15,-16.44,-16.23,0); INSERT INTO "extent" VALUES('EPSG','3681','Portugal - Azores C - Graciosa onshore','Portugal - central Azores - Graciosa island onshore.',38.97,39.14,-28.13,-27.88,0); INSERT INTO "extent" VALUES('EPSG','3682','Portugal - Azores - west of 30°W','Portugal - west of 30°W - western Azores - Flores and Corvo islands and surrounding EEZ.',35.25,43.07,-35.58,-30.0,0); INSERT INTO "extent" VALUES('EPSG','3683','Portugal - Azores E - Santa Maria onshore','Portugal - eastern Azores - Santa Maria island onshore.',36.87,37.08,-25.26,-24.96,0); INSERT INTO "extent" VALUES('EPSG','3684','Portugal - Azores W - Flores onshore','Portugal - western Azores - Flores island onshore.',39.3,39.58,-31.34,-31.07,0); INSERT INTO "extent" VALUES('EPSG','3685','Portugal - Azores W - Corvo onshore','Portugal - western Azores - Corvo island onshore.',39.63,39.77,-31.18,-31.02,0); INSERT INTO "extent" VALUES('EPSG','3686','Colombia - mainland and offshore Caribbean','Colombia - mainland and offshore Caribbean.',-4.23,13.68,-79.1,-66.87,0); INSERT INTO "extent" VALUES('EPSG','3687','Australia - SA and WA 126°E to 132°E','Australia - South Australia west of 132°E, Western Australia east of 126°E, offshore federal waters between 126°E and 129°E.',-37.05,-9.37,125.99,132.01,0); INSERT INTO "extent" VALUES('EPSG','3688','Australia - SA 132°E to 138°E','Australia - South Australia between 132°E and 138°E.',-36.14,-25.99,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','3689','Australia - SA and Qld 138°E to 144°E','Australia - South Australia east of 138°E, Queensland west of 144°E.',-38.13,-9.86,138.0,144.01,0); INSERT INTO "extent" VALUES('EPSG','3690','Australia - Qld 144°E to 150°E','Australia - Queensland between 144°E and 150°E.',-29.01,-14.01,144.0,150.0,0); INSERT INTO "extent" VALUES('EPSG','3691','Australia - Qld east of 150°E','Australia - Queensland east of 150°E.',-29.19,-22.0,150.0,153.61,0); INSERT INTO "extent" VALUES('EPSG','3692','Brazil - Reconcavo and Jacuipe','Brazil - offshore - Reconcavo and Jacuipe basins.',-13.57,-11.18,-39.09,-35.31,0); INSERT INTO "extent" VALUES('EPSG','3693','Brazil - Tucano and Jatoba','Brazil - Tucano North, Tucano Central, Tucano South and Jatoba basins.',-12.27,-8.39,-39.14,-37.09,0); INSERT INTO "extent" VALUES('EPSG','3694','France - onshore - mainland and Corsica','France - onshore - mainland and Corsica.',41.31,51.14,-4.87,9.63,0); INSERT INTO "extent" VALUES('EPSG','3695','Iraq - 31.4°N to 33°N, 43.9°E to 46.1°E (map 16)','Iraq - between UTM 3470000mN and 3650000mN (approximately 31°21''N and 32°58''N) and between UTM 400000mE and 600000mE (approximately 43°56''E and 46°04''E).',31.36,32.99,43.92,46.08,0); INSERT INTO "extent" VALUES('EPSG','3696','Brazil - Sergipe and Alagoas','Brazil - offshore - Sergipe and Alagoas basins.',-13.58,-8.73,-37.34,-32.01,0); INSERT INTO "extent" VALUES('EPSG','3697','Brazil - Paraiba-Pernambuco','Brazil - offshore - Paraiba-Pernambuco basin.',-10.17,-4.6,-35.1,-29.13,0); INSERT INTO "extent" VALUES('EPSG','3698','Brazil - Potiguar, Ceara and Barreirinhas','Brazil - offshore - Potiguar, Ceara and Barreirinhas basins.',-6.5,4.26,-44.79,-26.0,0); INSERT INTO "extent" VALUES('EPSG','3699','Brazil - Cumuruxatiba, Jequitinhonha and Camamu-Almada','Brazil - offshore - Cumuruxatiba, Jequitinhonha and Camamu-Almada basins.',-17.7,-13.01,-39.22,-34.6,0); INSERT INTO "extent" VALUES('EPSG','3700','Brazil - Santos and Pelotas','Brazil - offshore - Santos and Pelotas basins.',-35.71,-22.66,-53.38,-40.2,0); INSERT INTO "extent" VALUES('EPSG','3701','Iraq - 34.6°N to 36.2°N, west of 42.8°E (map 5)','Iraq - between UTM 3830000mN and 4010000mN (approximately 34°35''N and 36°13''N) and west of UTM 300000mE (approximately 42°48''E).',34.57,36.22,41.09,42.82,0); INSERT INTO "extent" VALUES('EPSG','3702','Iraq - SE','Iraq - onshore southeast.',29.06,32.51,43.98,48.61,0); INSERT INTO "extent" VALUES('EPSG','3703','Germany - Lower Saxony west of 7.5°E','Germany - Niedersachsen onshore west of 7°30''E.',52.23,53.81,6.56,7.51,0); INSERT INTO "extent" VALUES('EPSG','3704','Iraq - 31.4°N to 33°N, east of 46.1°E (map 17)','Iraq - between UTM 3470000mN and 3650000mN (approximately 31°21''N and 32°58''N) and east of UTM 600000mE (approximately 46°04''E).',31.33,32.99,46.05,47.87,0); INSERT INTO "extent" VALUES('EPSG','3705','Germany - Lower Saxony east of 10.5°E','Germany - Niedersachsen east of 10°30''E.',51.55,53.38,10.5,11.59,0); INSERT INTO "extent" VALUES('EPSG','3706','Iraq - 29.7 to 31.4°N, 42°E to 43.9°E (map 19)','Iraq - between UTM 3290000mN and 3470000mN (approximately 29°47''N and 31°21''N) and between 42°E and UTM 400000mE (approximately 43°56''E).',29.75,31.37,42.0,43.97,0); INSERT INTO "extent" VALUES('EPSG','3707','Germany - Lower Saxony 7.5°E to 10.5°E','Germany - Niedersachsen between 7°30''E and 10°30''E.',51.28,53.95,7.5,10.51,0); INSERT INTO "extent" VALUES('EPSG','3708','Iraq - 29.7°N to 31.4°N, 43.9°E to 46.1°E (map 20)','Iraq - between UTM 3290000mN and 3470000mN (approximately 29°47''N and 31°21''N) and between UTM 400000mE and 600000mE (approximately 43°56''E and 46°04''E).',29.73,31.37,43.94,46.06,0); INSERT INTO "extent" VALUES('EPSG','3709','Iraq - 31.4°N to 33°N, 42°E to 43.9°E (map 15)','Iraq - between UTM 3470000mN and 3650000mN (approximately 31°21''N and 32°58''N) and between 42°E and UTM 400000mE (approximately 43°56''E).',31.32,32.99,42.0,43.95,0); INSERT INTO "extent" VALUES('EPSG','3710','Iraq - 29.7°N to 31.4°N, 46.1°E to 48°E (map 21)','Iraq - between UTM 3290000mN and 3470000mN (approximately 29°47''N and 31°21''N) and between UTM 600000mE (approximately 46°04''E) and 48°E.',29.72,31.37,46.03,48.0,0); INSERT INTO "extent" VALUES('EPSG','3711','Iraq - south of 29.7°N, west of 46.1°E (map 24)','Iraq - south of UTM 3290000mN (approximately 29°47''N) and west of UTM 600000mE (approximately 46°04''E).',29.09,29.75,43.99,46.04,0); INSERT INTO "extent" VALUES('EPSG','3712','Iraq - south of 29.7°N, east of 46.1°E (map 25)','Iraq - south of UTM 3290000mN (approximately 29°47''N) and east of UTM 600000mE (approximately 46°04''E).',29.06,29.74,46.02,47.02,0); INSERT INTO "extent" VALUES('EPSG','3713','Asia - Korea N and S - west of 126°E','Democratic People''s Republic of Korea (North Korea) and Republic of Korea (South Korea) - onshore west of 126°E.',33.99,40.9,124.27,126.0,0); INSERT INTO "extent" VALUES('EPSG','3714','Iraq - north of 36.2°N, west of 42°E (map 1)','Iraq - north of UTM 4010000mN (approximately 36°13''N and west of 42°E.',36.19,36.75,41.27,42.0,0); INSERT INTO "extent" VALUES('EPSG','3715','Iraq - 34.6°N to 36.2°N, 42.8°E to 45°E (map 6)','Iraq - between UTM 3830000mN and 4010000mN (approximately 34°35''N and 36°13''N) and between UTM 300000mE (approximately 42°48''E) and 45°E.',34.59,36.24,42.77,45.0,0); INSERT INTO "extent" VALUES('EPSG','3716','Asia - Korea N and S - 126°E to 128°E','Democratic People''s Republic of Korea (North Korea) and Republic of Korea (South Korea) - onshore between 126°E and 128°E.',33.14,41.8,126.0,128.0,0); INSERT INTO "extent" VALUES('EPSG','3717','Iraq - north of 36.2°N, 42°E to 43.9°E (map 2)','Iraq - north of UTM 4010000mN (approximately 36°13''N) and between 42°E and UTM 400000mE (approximately 43°56''E).',36.19,37.39,42.0,43.89,0); INSERT INTO "extent" VALUES('EPSG','3718','Iraq - 34.6°N to 36.2°N, east of 45°E (map 7)','Iraq - between UTM 3830000mN and 4010000mN (approximately 34°35''N and 36°13''N) and east of 45°E.',34.6,36.24,45.0,46.35,0); INSERT INTO "extent" VALUES('EPSG','3719','Iraq - north of 36.2°N, east of 43.9°E (map 3)','Iraq - north of UTM 4010000mN (approximately 36°13''N) and east of UTM 400000mE (approximatrely 43°56''E).',36.22,37.33,43.87,45.33,0); INSERT INTO "extent" VALUES('EPSG','3720','Korea, Republic of (South Korea) - 130°E to 132°E onshore','Republic of Korea (South Korea) - onshore between 130°E and 132°E.',37.39,37.62,130.71,131.01,0); INSERT INTO "extent" VALUES('EPSG','3721','Korea, Republic of (South Korea) - 126°E to 128°E Jeju','Republic of Korea (South Korea) - between 126°E and 128°E - Jeju island onshore.',33.14,33.61,126.09,127.01,0); INSERT INTO "extent" VALUES('EPSG','3722','Iraq - 33°N to 34.6°N, west of 40.1°E (map 8)','Iraq - north of UTM 3650000mN (approximately 32°58''N) and west of UTM zone 37 600000mE (approximately 40°04''E).',32.98,33.99,38.79,40.09,0); INSERT INTO "extent" VALUES('EPSG','3723','Iraq - 33°N to 34.6°N, 40.1°E to 42°E (map 9)','Iraq - between UTM 3650000mN and 3830000mN (approximately 32°58''N and 34°35''N) and between UTM zone 37 600000mE (approximately 40°04''E) and 42°E.',32.95,34.6,40.07,42.0,0); INSERT INTO "extent" VALUES('EPSG','3724','Iraq - 33°N to 34.6°N, 42°E to 43.9°E (map 10)','Iraq - between UTM 3650000mN and 3830000mN (approximately 32°58''N and 34°35''N) and between 42°E and UTM 400000mE (approximately 43°56''E).',32.95,34.61,42.0,43.93,0); INSERT INTO "extent" VALUES('EPSG','3725','Iraq - 33°N to 34.6°N, 43.9°E to 46.1°E (map 11)','Iraq - between UTM 3650000mN and 3830000mN (approximately 32°58''N and 34°35''N) and between UTM 400000mE and 600000mE (approximately 43°56''E and 46°04''E).',32.98,34.62,43.9,46.2,0); INSERT INTO "extent" VALUES('EPSG','3726','Asia - Korea N and S - 128°E to 130°E','Democratic People''s Republic of Korea (North Korea) and Republic of Korea (South Korea) - onshore between 128°E and 130°E.',34.49,43.01,128.0,130.0,0); INSERT INTO "extent" VALUES('EPSG','3727','Asia - Korea N and S - east of 130°E','Democratic People''s Republic of Korea (North Korea) and Republic of Korea (South Korea) - onshore east of 130°E.',37.39,42.98,130.0,131.01,0); INSERT INTO "extent" VALUES('EPSG','3728','Iraq - 31.4°N to 33°N, 40.1°E to 42°E (map 14)','Iraq - between UTM 3470000mN and 3650000mN (approximately 31°21''N and 32°58''N) and between UTM zone 37 600000mE (approximately 40°04''E) and 42°E.',31.32,32.99,40.05,42.0,0); INSERT INTO "extent" VALUES('EPSG','3729','Iraq - 31.4°N to 33°N, west of 40.1°E (map 13)','Iraq - sorth of UTM 3650000mN (approximately 32°58''N) and west of UTM zone 37 600000mE (approximately 40°04''E).',32.0,32.99,38.92,40.08,0); INSERT INTO "extent" VALUES('EPSG','3730','Korea, Republic of (South Korea) - 126°E to 128°E mainland','Republic of Korea (South Korea) - between 126°E and 128°E - mainland and nearshore.',33.96,38.33,126.0,128.0,0); INSERT INTO "extent" VALUES('EPSG','3731','Georgia - offshore','Georgia - offshore.',41.54,43.33,38.97,41.71,0); INSERT INTO "extent" VALUES('EPSG','3732','Spain - Catalonia onshore','Spain - Catalonia onshore.',40.49,42.86,0.16,3.39,0); INSERT INTO "extent" VALUES('EPSG','3733','Bolivia - east of 60°W','Bolivia - east of 60°W.',-20.17,-16.27,-60.0,-57.52,0); INSERT INTO "extent" VALUES('EPSG','3734','Bhutan - Bumthang district','Bhutan - Bumthang district.',27.33,28.09,90.46,91.02,0); INSERT INTO "extent" VALUES('EPSG','3735','Thailand - onshore east of 102°E','Thailand - onshore east of 102°E.',6.02,18.44,102.0,105.64,0); INSERT INTO "extent" VALUES('EPSG','3736','Italy - mainland and Sicily','Italy - mainland (including San Marino and Vatican City State) and Sicily.',36.59,47.1,6.62,18.58,0); INSERT INTO "extent" VALUES('EPSG','3737','Bhutan - Chhukha district','Bhutan - Chhukha district.',26.71,27.32,89.26,89.83,0); INSERT INTO "extent" VALUES('EPSG','3738','Bhutan - Dagana district','Bhutan - Dagana district.',26.7,27.29,89.63,90.08,0); INSERT INTO "extent" VALUES('EPSG','3739','Korea, Republic of (South Korea) - mainland','Republic of Korea (South Korea) - mainland onshore.',33.96,38.64,125.75,129.65,0); INSERT INTO "extent" VALUES('EPSG','3740','Bhutan - Gasa district','Bhutan - Gasa district.',27.72,28.33,89.44,90.47,0); INSERT INTO "extent" VALUES('EPSG','3741','Thailand - onshore and Gulf of Thailand','Thailand - onshore plus offshore Gulf of Thailand.',5.63,20.46,97.34,105.64,0); INSERT INTO "extent" VALUES('EPSG','3742','Bhutan - Ha district','Bhutan - Ha district.',27.02,27.62,88.9,89.39,0); INSERT INTO "extent" VALUES('EPSG','3743','Bhutan - Lhuentse district','Bhutan - Lhuentse district.',27.39,28.09,90.77,91.49,0); INSERT INTO "extent" VALUES('EPSG','3744','Europe - Ireland (Republic and Ulster) - on- and offshore','Ireland - onshore. United Kingdom (UK) - Northern Ireland (Ulster) - onshore and offshore.',51.33,55.4,-10.6,-5.33,1); INSERT INTO "extent" VALUES('EPSG','3745','Bhutan - Mongar district','Bhutan - Mongar district.',26.93,27.61,90.95,91.5,0); INSERT INTO "extent" VALUES('EPSG','3746','Bhutan - Paro district','Bhutan - Paro district.',27.18,27.79,89.12,89.56,0); INSERT INTO "extent" VALUES('EPSG','3747','Bhutan - Pemagatshel district','Bhutan - Pemagatshel district.',26.78,27.18,91.0,91.56,0); INSERT INTO "extent" VALUES('EPSG','3748','Latin America - 120°W to 114°W','Latin America between 120°W and 114°W, northern hemisphere, onshore and offshore.',15.01,32.72,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','3749','Bhutan - Punakha district','Bhutan - Punakha district.',27.46,27.87,89.63,90.08,0); INSERT INTO "extent" VALUES('EPSG','3750','Bhutan - Samdrup Jongkhar district','Bhutan - Samdrup Jongkhar district.',26.79,27.25,91.39,92.13,0); INSERT INTO "extent" VALUES('EPSG','3751','Bhutan - Samtse district','Bhutan - Samtse district.',26.8,27.28,88.74,89.38,0); INSERT INTO "extent" VALUES('EPSG','3752','Bhutan - Sarpang district','Bhutan - Sarpang district.',26.73,27.23,90.01,90.78,0); INSERT INTO "extent" VALUES('EPSG','3753','Bhutan - Thimphu district','Bhutan - Thimphu district.',27.14,28.01,89.22,89.77,0); INSERT INTO "extent" VALUES('EPSG','3754','Bhutan - Trashigang district','Bhutan - Trashigang district.',27.01,27.49,91.37,92.13,0); INSERT INTO "extent" VALUES('EPSG','3755','Bhutan - Trongsa district','Bhutan - Trongsa district.',27.13,27.79,90.26,90.76,0); INSERT INTO "extent" VALUES('EPSG','3756','Latin America - 114°W to 108°W','Latin America between 114°W and 108°W, northern hemisphere, onshore and offshore.',15.09,32.27,-114.0,-108.0,0); INSERT INTO "extent" VALUES('EPSG','3757','Bhutan - Tsirang district','Bhutan - Tsirang district.',26.81,27.2,90.0,90.35,0); INSERT INTO "extent" VALUES('EPSG','3758','Bhutan - Wangdue Phodrang district','Bhutan - Wangdue Phodrang district.',27.11,28.08,89.71,90.54,0); INSERT INTO "extent" VALUES('EPSG','3759','Latin America - 108°W to 102°W','Latin America between 108°W and 102°W, northern hemisphere, onshore and offshore.',14.05,31.79,-108.0,-102.0,0); INSERT INTO "extent" VALUES('EPSG','3760','Bhutan - Yangtse district','Bhutan - Yangtse district.',27.37,28.0,91.34,91.77,0); INSERT INTO "extent" VALUES('EPSG','3761','Bhutan - Zhemgang district','Bhutan - Zhemgang district.',26.77,27.39,90.53,91.19,0); INSERT INTO "extent" VALUES('EPSG','3762','New Zealand - North Island - One Tree vcrs','New Zealand - North Island - One Tree Point vertical CRS area.',-36.41,-34.36,172.61,174.83,0); INSERT INTO "extent" VALUES('EPSG','3763','Latin America - 102°W to 96°W','Latin America between 102°W and 96°W, northern hemisphere, onshore and offshore.',12.3,29.81,-102.01,-96.0,0); INSERT INTO "extent" VALUES('EPSG','3764','New Zealand - North Island - Auckland vcrs','New Zealand - North Island - Auckland vertical CRS area.',-37.67,-36.12,174.0,176.17,0); INSERT INTO "extent" VALUES('EPSG','3765','French Guiana - coastal area west of 54°W','French Guiana - coastal area west of 54°W.',4.84,5.69,-54.45,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3766','French Guiana - coastal area east of 54°W','French Guiana - coastal area east of 54°W.',3.43,5.81,-54.0,-51.61,0); INSERT INTO "extent" VALUES('EPSG','3767','Ireland - onshore','Ireland - onshore.',51.39,55.43,-10.56,-5.93,0); INSERT INTO "extent" VALUES('EPSG','3768','New Zealand - North Island - Moturiki vcrs','New Zealand - North Island - Moturiki vertical CRS area.',-40.59,-37.52,174.57,177.26,0); INSERT INTO "extent" VALUES('EPSG','3769','New Zealand - North Island - Taranaki vcrs','New Zealand - North Island - Taranaki vertical CRS area.',-39.92,-38.41,173.68,174.95,0); INSERT INTO "extent" VALUES('EPSG','3770','Vietnam - DBSCL 02 and 03','Vietnam - Mekong delta blocks DBSCL 02 and 03.',9.35,11.04,104.24,107.11,0); INSERT INTO "extent" VALUES('EPSG','3771','New Zealand - North Island - Gisborne vcrs','New Zealand - North Island - Gisborne vertical CRS area.',-39.04,-37.49,176.41,178.63,0); INSERT INTO "extent" VALUES('EPSG','3772','New Zealand - North Island - Hawkes Bay mc Napier vcrs','New Zealand - North Island - Hawkes Bay meridional circuit and Napier vertical crs area.',-40.57,-38.87,175.8,178.07,0); INSERT INTO "extent" VALUES('EPSG','3773','New Zealand - North Island - Wellington vcrs','New Zealand - North Island - Wellington vertical CRS area.',-41.67,-40.12,174.52,176.55,0); INSERT INTO "extent" VALUES('EPSG','3774','New Zealand - North Island - Wellington mc','New Zealand - North Island - Wellington meridional circuit area.',-41.5,-40.91,174.52,175.36,0); INSERT INTO "extent" VALUES('EPSG','3775','New Zealand - North Island - Wairarapa mc','New Zealand - North Island - Wairarapa meridional circuit area.',-41.67,-40.29,175.01,176.55,0); INSERT INTO "extent" VALUES('EPSG','3776','New Zealand - North Island - Wanganui mc','New Zealand - North Island - Wanganui meridional circuit area.',-40.97,-39.46,174.4,176.27,0); INSERT INTO "extent" VALUES('EPSG','3777','New Zealand - North Island - Taranaki mc','New Zealand - North Island - Taranaki meridional circuit area.',-39.78,-38.4,173.68,175.44,0); INSERT INTO "extent" VALUES('EPSG','3778','New Zealand - North Island - Tuhirangi mc','New Zealand - North Island - Tuhirangi meridional circuit area.',-39.55,-38.87,174.88,176.33,0); INSERT INTO "extent" VALUES('EPSG','3779','New Zealand - North Island - Bay of Plenty mc','New Zealand - North Island - Bay of Plenty meridional circuit area.',-39.13,-37.22,175.75,177.23,0); INSERT INTO "extent" VALUES('EPSG','3780','New Zealand - North Island - Poverty Bay mc','New Zealand - North Island - Poverty Bay meridional circuit area.',-39.04,-37.49,176.73,178.63,0); INSERT INTO "extent" VALUES('EPSG','3781','New Zealand - North Island - Mount Eden mc','New Zealand - North Island - Mount Eden meridional circuit area.',-39.01,-34.1,171.99,176.12,0); INSERT INTO "extent" VALUES('EPSG','3782','New Zealand - South Island - Collingwood mc','New Zealand - South Island - Collingwood meridional circuit area.',-41.22,-40.44,172.16,173.13,0); INSERT INTO "extent" VALUES('EPSG','3783','New Zealand - South Island - Karamea mc','New Zealand - South Island - Karamea meridional circuit area.',-41.49,-40.75,171.96,172.7,0); INSERT INTO "extent" VALUES('EPSG','3784','New Zealand - South Island - Nelson mc','New Zealand - South Island - Nelson meridional circuit area.',-42.18,-40.66,172.4,174.08,0); INSERT INTO "extent" VALUES('EPSG','3785','New Zealand - South Island - Marlborough mc','New Zealand - South Island - Marlborough meridional circuit area.',-42.65,-40.85,172.95,174.46,0); INSERT INTO "extent" VALUES('EPSG','3786','New Zealand - South Island - Buller mc','New Zealand - South Island - Buller meridional circuit area.',-42.19,-41.42,171.27,172.41,0); INSERT INTO "extent" VALUES('EPSG','3787','New Zealand - South Island - Grey mc','New Zealand - South Island - Grey meridional circuit area.',-42.74,-41.5,171.15,172.75,0); INSERT INTO "extent" VALUES('EPSG','3788','New Zealand - South Island - Amuri mc','New Zealand - South Island - Amuri meridional circuit area.',-42.95,-42.09,171.88,173.55,0); INSERT INTO "extent" VALUES('EPSG','3789','New Zealand - South Island - Hokitika mc','New Zealand - South Island - Hokitika meridional circuit area.',-43.23,-42.41,170.39,171.89,0); INSERT INTO "extent" VALUES('EPSG','3790','New Zealand - South Island - Mount Pleasant mc','New Zealand - South Island - Mount Pleasant meridional circuit area.',-43.96,-42.69,171.11,173.38,0); INSERT INTO "extent" VALUES('EPSG','3791','New Zealand - South Island - Okarito mc','New Zealand - South Island - Okarito meridional circuit area.',-43.85,-43.0,169.21,170.89,0); INSERT INTO "extent" VALUES('EPSG','3792','New Zealand - South Island - Gawler mc','New Zealand - South Island - Gawler meridional circuit area.',-44.25,-43.13,170.68,172.26,0); INSERT INTO "extent" VALUES('EPSG','3793','New Zealand - South Island - Timaru mc','New Zealand - South Island - Timaru meridional circuit area.',-44.98,-43.35,169.82,171.55,0); INSERT INTO "extent" VALUES('EPSG','3794','New Zealand - South Island - Jacksons Bay mc','New Zealand - South Island - Jacksons Bay meridional circuit area.',-44.4,-43.67,168.02,170.01,0); INSERT INTO "extent" VALUES('EPSG','3795','New Zealand - South Island - Lindis Peak mc','New Zealand - South Island - Lindis Peak meridional circuit area.',-45.4,-43.71,168.62,170.24,0); INSERT INTO "extent" VALUES('EPSG','3796','New Zealand - South Island - Observation Point mc','New Zealand - South Island - Observation Point meridional circuit area.',-45.82,-44.61,169.77,171.24,0); INSERT INTO "extent" VALUES('EPSG','3797','New Zealand - South Island - Mount Nicholas mc','New Zealand - South Island - Mount Nicholas meridional circuit area.',-45.58,-44.29,167.72,169.11,0); INSERT INTO "extent" VALUES('EPSG','3798','New Zealand - South Island - North Taieri mc','New Zealand - South Island - North Taieri meridional circuit area.',-46.73,-45.23,168.64,170.87,0); INSERT INTO "extent" VALUES('EPSG','3799','New Zealand - South Island - Mount York mc','New Zealand - South Island - Mount York meridional circuit area.',-46.33,-44.53,166.37,168.21,0); INSERT INTO "extent" VALUES('EPSG','3800','New Zealand - South and Stewart Islands - Bluff mc','New Zealand - Stewart Island; South Island - Bluff meridional circuit area.',-47.33,-45.33,167.29,168.97,0); INSERT INTO "extent" VALUES('EPSG','3801','New Zealand - South Island - Bluff vcrs','New Zealand - South Island - Bluff vertical CRS area.',-46.71,-46.26,168.01,168.86,0); INSERT INTO "extent" VALUES('EPSG','3802','New Zealand - South Island - Nelson vcrs','New Zealand - South Island - north of approximately 42°20''S - Nelson vertical CRS area.',-42.44,-40.44,171.82,174.46,0); INSERT INTO "extent" VALUES('EPSG','3803','New Zealand - South Island - Dunedin vcrs','New Zealand - South Island - between approximately 44°S and 46°S - Dunedin vertical CRS area.',-46.4,-43.82,167.73,171.28,0); INSERT INTO "extent" VALUES('EPSG','3804','New Zealand - South Island - Lyttleton vcrs','New Zealand - South Island - between approximately 41°20''S and 45°S - Lyttleton vertical CRS area.',-44.92,-41.6,168.95,173.77,0); INSERT INTO "extent" VALUES('EPSG','3805','BES Islands','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - onshore and offshore.',11.66,17.96,-69.09,-62.76,0); INSERT INTO "extent" VALUES('EPSG','3806','New Zealand - South Island - Dunedin-Bluff vcrs','New Zealand - South Island - Dunedin-Bluff vertical CRS area.',-46.73,-44.52,166.37,169.95,0); INSERT INTO "extent" VALUES('EPSG','3807','Curacao','Curaçao - onshore and offshore.',11.66,15.35,-69.55,-68.54,0); INSERT INTO "extent" VALUES('EPSG','3808','Brazil - 36°W to 30°W offshore','Brazil - offshore between 36°W and 30°W, southern hemisphere.',-20.11,0.0,-36.0,-30.0,0); INSERT INTO "extent" VALUES('EPSG','3809','St Maarten','Sint Maarten - onshore and offshore.',17.81,18.07,-63.3,-62.92,0); INSERT INTO "extent" VALUES('EPSG','3810','Caribbean onshore - BES Islands - St Eustatius and Saba; Sint Maarten','Caribbean - Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - St Eustatius and Saba - onshore; St Maarten - onshore.',17.41,18.07,-63.31,-62.88,0); INSERT INTO "extent" VALUES('EPSG','3811','Chile - 72°W to 66°W','Chile - 72°W to 66°W, onshore and offshore.',-59.87,-17.5,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3812','Nigeria - offshore deep water - east of 6°E','Nigeria - offshore deep water - east of 6°E.',2.61,3.68,6.0,7.82,0); INSERT INTO "extent" VALUES('EPSG','3813','Nigeria - offshore blocks OPL 209, 219 and 220','Nigeria - offshore blocks OPL 209, 219 and 220.',3.25,5.54,4.01,6.96,0); INSERT INTO "extent" VALUES('EPSG','3814','Nigeria - offshore blocks OML 99-102 and OPL 222 and 223','Nigeria - offshore blocks OML 99-102 and OPL 222 and 223.',3.25,4.51,7.16,8.25,0); INSERT INTO "extent" VALUES('EPSG','3815','Nigeria - offshore blocks OPL 209-213 and 316','Nigeria - offshore blocks OPL 209-213 and 316.',4.22,6.31,3.83,5.17,0); INSERT INTO "extent" VALUES('EPSG','3816','Nigeria - offshore blocks OPL 217-223','Nigeria - offshore blocks OPL 217-223.',3.24,3.86,5.58,8.0,0); INSERT INTO "extent" VALUES('EPSG','3817','Nigeria - offshore blocks OPL 210, 213, 217 and 218','Nigeria - offshore blocks OPL 210, 213, 217 and 218.',3.24,5.54,4.41,6.29,0); INSERT INTO "extent" VALUES('EPSG','3818','New Zealand - North Island - Tararu vcrs','New Zealand - North Island - Tararu vertical CRS area.',-37.21,-36.78,175.44,175.99,0); INSERT INTO "extent" VALUES('EPSG','3819','Nigeria - offshore blocks OPL 215 and 221','Nigeria - offshore blocks OPL 215 and 221.',3.25,4.23,5.02,7.31,0); INSERT INTO "extent" VALUES('EPSG','3820','BES Islands - St Eustatius and Saba','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - St Eustatius and Saba - onshore and offshore.',16.68,17.96,-64.02,-62.76,0); INSERT INTO "extent" VALUES('EPSG','3821','BES Islands - Bonaire','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Bonaire - onshore and offshore.',11.66,15.3,-69.09,-67.98,0); INSERT INTO "extent" VALUES('EPSG','3822','BES Islands - Bonaire onshore','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Bonaire - onshore.',11.97,12.36,-68.47,-68.14,0); INSERT INTO "extent" VALUES('EPSG','3823','Curacao - onshore','Curaçao - onshore.',11.99,12.44,-69.22,-68.69,0); INSERT INTO "extent" VALUES('EPSG','3824','Nigeria - Gongola Basin','Nigeria - onshore - Gongola Basin',8.78,11.63,9.41,12.13,0); INSERT INTO "extent" VALUES('EPSG','3825','Caribbean - French Antilles west of 60°W','French Antilles onshore and offshore west of 60°W - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; northern St Martin.',14.08,18.31,-63.66,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3826','Uruguay - west of 54°W','Uruguay - west of 54°W, onshore and offshore.',-36.63,-30.09,-58.49,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3827','Bolivia - west of 66°W','Bolivia - west of 66°W.',-22.91,-9.77,-69.66,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3828','Uruguay - east of 54°W','Uruguay - east of 54°W, onshore and offshore.',-37.77,-31.9,-54.0,-50.01,0); INSERT INTO "extent" VALUES('EPSG','3829','Chile - 78°W to 72°W','Chile - 78°W to 72°W, onshore and offshore.',-59.36,-18.35,-78.0,-71.99,0); INSERT INTO "extent" VALUES('EPSG','3830','South America - 84°W to 78°W, N hemisphere and SAD69 by country','South America between 84°W and 78°W, northern hemisphere, onshore.',0.0,2.7,-80.18,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3831','South America - 84°W to 78°W, S hemisphere and SAD69 by country','South America between 84°W and 78°W, southern hemisphere, onshore.',-10.53,0.0,-81.41,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3832','South America - 78°W to 72°W, N hemisphere and SAD69 by country','South America between 78°W and 72°W, northern hemisphere, onshore.',0.0,12.31,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3833','South America - 78°W to 72°W, S hemisphere and SAD69 by country','Brazil - west of 72°W. In rest of South America between 78°W and 72°W, southern hemisphere onshore north of 45°S.',-45.0,0.0,-78.0,-71.99,0); INSERT INTO "extent" VALUES('EPSG','3834','South America - 72°W to 66°W, N hemisphere onshore','South America between 72°W and 66°W, northern hemisphere, onshore, but excluding the area between approximately 0°N, 70°W to 2°N, 70°W to 2°N, 66°W.',0.0,12.52,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3835','South America - 72°W to 66°W, S hemisphere onshore','Brazil - between 72°W and 66°W, northern and southern hemispheres. In rest of South America between 72°W and 66°W, southern hemisphere onshore north of 45°S.',-45.0,2.15,-72.0,-65.99,0); INSERT INTO "extent" VALUES('EPSG','3836','Peru - east of 72°W','Peru - east of 72°W, onshore and offshore.',-20.44,-2.14,-72.0,-68.67,0); INSERT INTO "extent" VALUES('EPSG','3837','Peru - 84°W to 78°W','Peru - between 84°W and 78°W, onshore and offshore.',-17.33,-3.11,-84.0,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3838','Peru - 78°W to 72°W','Peru - between 78°W and 72°W, onshore and offshore.',-21.05,-0.03,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3839','South America - 66°W to 60°W, N hemisphere and SAD69 by country','South America between 66°W and 60°W, northern hemisphere, onshore, but excluding most of the area south of 4°N.',0.64,11.23,-66.0,-59.99,0); INSERT INTO "extent" VALUES('EPSG','3840','South America - 66°W to 60°W, S hemisphere and SAD69 by country','Brazil - between 66°W and 60°W, northern and southern hemispheres. In rest of South America between 66°W and 60°W, southern hemisphere onshore.',-45.0,5.28,-66.0,-59.99,0); INSERT INTO "extent" VALUES('EPSG','3841','South America - 60°W to 54°W, N hemisphere and SAD69 by country','South America between 60°W and 54°W, northern hemisphere onshore, but excluding most of the area south of approximately 2°N.',1.18,8.6,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3842','Brazil - east of 30°W','Brazil - east of 30°W, northern and southern hemispheres, onshore and offshore.',-23.86,4.26,-30.0,-25.28,0); INSERT INTO "extent" VALUES('EPSG','3843','Argentina - mainland onshore and offshore TdF','Argentina - mainland onshore and Atlantic offshore Tierra del Fuego.',-54.93,-21.78,-73.59,-53.65,0); INSERT INTO "extent" VALUES('EPSG','3844','Nicaragua - onshore north of 12°48''N','Nicaragua - onshore north of 12°48''N.',12.8,15.03,-87.74,-83.08,0); INSERT INTO "extent" VALUES('EPSG','3845','Brazil - SAD69','Brazil - onshore southeast of a line beginning at the intersection of the 54°W meridian with the northern national boundary then running southwards to 5°S, 54°W, southwestwards to 10°S, 60°W, and southwards to the national boundary. Offshore within 370km of the mainland.',-35.71,7.04,-60.57,-29.03,1); INSERT INTO "extent" VALUES('EPSG','3846','Greenland - southwest coast south of 63°N','Greenland - onshore southwest coastal area south of 63°N.',59.74,63.0,-50.72,-42.52,0); INSERT INTO "extent" VALUES('EPSG','3847','Nicaragua - onshore south of 12°48''N','Nicaragua - onshore south of 12°48''N.',10.7,12.8,-87.63,-83.42,0); INSERT INTO "extent" VALUES('EPSG','3848','Honduras - onshore north of 14°38''30"N','Honduras - onshore north of 14°38''30"N.',14.64,16.49,-89.23,-83.08,0); INSERT INTO "extent" VALUES('EPSG','3849','Costa Rica - onshore and offshore east of 86°30''W','Costa Rica - onshore and offshore east of 86°30''W.',2.21,11.77,-86.5,-81.43,0); INSERT INTO "extent" VALUES('EPSG','3850','Honduras - onshore south of 14°38''30"N','Honduras - onshore south of 14°38''30"N.',12.98,14.65,-89.36,-84.4,0); INSERT INTO "extent" VALUES('EPSG','3851','Brazil - 36°W to 30°W SAD69','Brazil - between 36°W and 30°W, northern and southern hemispheres, onshore and offshore within 370km of the mainland.',-20.1,-0.49,-36.0,-30.0,1); INSERT INTO "extent" VALUES('EPSG','3852','USA - 120°W to 114°W onshore','United States (USA) - between 120°W and 114°W - onshore - Arizona; California; Idaho; Montana; Nevada; Oregon; Utah; Washington.',32.26,49.01,-120.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','3853','Antarctica - McMurdo Sound region','Antarctica - McMurdo Sound region.',-81.0,-76.0,153.0,173.0,0); INSERT INTO "extent" VALUES('EPSG','3854','Antarctica - Borchgrevink Coast region','Antarctica - Borchgrevink Coast region.',-76.0,-73.0,157.0,173.0,0); INSERT INTO "extent" VALUES('EPSG','3855','Antarctica - Pennell Coast region','Antarctica - Pennell Coast region.',-73.0,-69.5,160.0,172.0,0); INSERT INTO "extent" VALUES('EPSG','3856','Antarctica - Ross Ice Shelf Region','Antarctica - Ross Ice Shelf Region.',-90.0,-76.0,150.0,-150.0,0); INSERT INTO "extent" VALUES('EPSG','3857','USA - 126°W to 120°W onshore','United States (USA) - between 126°W and 120°W - onshore - California; Oregon; Washington.',33.85,49.05,-124.79,-119.99,0); INSERT INTO "extent" VALUES('EPSG','3858','Venezuela - east of 66°W','Venezuela - east of 66°W, onshore and offshore.',0.64,16.75,-66.0,-58.95,0); INSERT INTO "extent" VALUES('EPSG','3859','Venezuela - 72°W and 66°W','Venezuela - between 72°W and 66°W, onshore and offshore.',0.73,15.64,-72.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3860','USA - 102°W to 96°W onshore','United States (USA) - between 102°W and 96°W - onshore - Iowa; Kansas; Minnesota; Nebraska; North Dakota; Oklahoma; South Dakota; Texas.',25.83,49.01,-102.0,-95.99,0); INSERT INTO "extent" VALUES('EPSG','3861','USA - 96°W to 90°W onshore','United States (USA) - between 96°W and 90°W - onshore - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin.',28.42,49.38,-96.0,-89.99,0); INSERT INTO "extent" VALUES('EPSG','3862','USA - 90°W to 84°W onshore','United States (USA) - between 90°W and 84°W - onshore - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin.',28.85,48.32,-90.0,-83.99,0); INSERT INTO "extent" VALUES('EPSG','3863','USA - 84°W to 78°W onshore','United States (USA) - between 84°W and 78°W - onshore - Florida; Georgia; Maryland; Michigan; New York; North Carolina; Ohio; Pennsylvania; South Carolina; Tennessee; Virginia; West Virginia.',24.41,46.13,-84.01,-78.0,0); INSERT INTO "extent" VALUES('EPSG','3864','North America - 126°W to 120°W and NAD83 by country','North America - between 126°W and 120°W - onshore and offshore. Canada - British Columbia; Northwest Territories; Yukon. United States (USA) - California; Oregon; Washington.',30.54,81.8,-126.0,-119.99,0); INSERT INTO "extent" VALUES('EPSG','3865','Canada - Labrador - 66°W to 63°W','Canada - Labrador - 66°W to 63°W.',51.58,60.52,-66.0,-63.0,0); INSERT INTO "extent" VALUES('EPSG','3866','North America - 132°W to 126°W and NAD83 by country','North America - between 132°W and 126°W - onshore and offshore. Canada - British Columbia; Northwest Territories; Yukon. United States (USA) - Alaska.',35.38,80.93,-132.0,-126.0,0); INSERT INTO "extent" VALUES('EPSG','3867','North America - 138°W to 132°W and NAD83 by country','North America - between 138°W and 132°W - onshore and offshore. Canada - British Columbia; Northwest Territiories; Yukon. United States (USA) - Alaska.',48.06,79.42,-138.0,-132.0,0); INSERT INTO "extent" VALUES('EPSG','3868','USA - 78°W to 72°W onshore','United States (USA) - between 78°W and 72°W - onshore - Connecticut; Delaware; Maryland; Massachusetts; New Hampshire; New Jersey; New York; North Carolina; Pennsylvania; Virginia; Vermont.',33.84,45.03,-78.0,-72.0,0); INSERT INTO "extent" VALUES('EPSG','3869','Costa Rica - onshore north of 9°32''N','Costa Rica - onshore north of 9°32''N.',9.53,11.22,-85.97,-82.53,0); INSERT INTO "extent" VALUES('EPSG','3870','Costa Rica - onshore south of 9°56''N','Costa Rica - onshore south of 9°56''N',7.98,9.94,-85.74,-82.53,0); INSERT INTO "extent" VALUES('EPSG','3871','USA - 72°W to 66°W onshore','United States (USA) - between 72°W and 66°W - onshore - Connecticut; Maine; Massachusetts; New Hampshire; New York (Long Island); Rhode Island; Vermont.',40.96,47.47,-72.0,-66.91,0); INSERT INTO "extent" VALUES('EPSG','3872','North America - 144°W to 138°W and NAD83 by country','North America - between 144°W and 138°W - onshore and offshore. Canada - British Columbia; Yukon. United States (USA) - Alaska.',52.05,73.59,-144.0,-137.99,0); INSERT INTO "extent" VALUES('EPSG','3873','Spain - Canary Islands onshore','Spain - Canary Islands onshore.',27.58,29.47,-18.22,-13.37,0); INSERT INTO "extent" VALUES('EPSG','3874','Brazil - Corrego Alegre 1961','Brazil - onshore - between 18°S and 27°30''S, also east of 54°W between 15°S and 18°S.',-27.5,-14.99,-58.16,-38.82,0); INSERT INTO "extent" VALUES('EPSG','3875','Canada - Labrador - 63°W to 60°W','Canada - Labrador between 63°W and 60°W.',52.0,58.92,-63.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','3876','Central America - Guatemala to Costa Rica','Costa Rica; El Salvador; Guatemala; Honduras; Nicaragua.',7.98,17.83,-92.29,-82.53,0); INSERT INTO "extent" VALUES('EPSG','3877','Brazil - 42°W to 36°W and south of 15°S onshore','Brazil - between 42°W and 36°W and south of 15°S, onshore.',-22.96,-14.99,-42.0,-38.82,0); INSERT INTO "extent" VALUES('EPSG','3878','Brazil - 54°W to 48°W and SAD69','Brazil - onshore and offshore northern and southern hemispheres between 54°W and 48°W.',-35.71,7.04,-54.01,-47.99,0); INSERT INTO "extent" VALUES('EPSG','3879','Germany - onshore east of 12°E','Germany - onshore east of 12°E.',47.46,54.74,12.0,15.04,0); INSERT INTO "extent" VALUES('EPSG','3880','Canada - Labrador - west of 66°W','Canada - Labrador - west of 66°W.',52.05,55.34,-67.81,-66.0,0); INSERT INTO "extent" VALUES('EPSG','3881','Brazil - 60°W to 54°W','Brazil - between 60°W and 54°W, northern and southern hemispheres.',-31.91,4.51,-60.0,-53.99,0); INSERT INTO "extent" VALUES('EPSG','3882','Papua New Guinea - west of 144°E','Papua New Guinea - west of 144°E, onshore and offshore.',-11.15,2.31,139.2,144.0,0); INSERT INTO "extent" VALUES('EPSG','3883','USA - Hawaii - main islands','United States (USA) - Hawaii - main islands onshore and offshore.',15.56,25.58,-163.74,-151.27,0); INSERT INTO "extent" VALUES('EPSG','3884','Brazil - SAD69 onshore south of 4°30''S','Brazil - onshore southeast of a line beginning at the intersection of the coast with the 4°30''S parallel, then westwards to 4°30''S, 54°W, then southwards to 5°S, 54°W, southwestwards to 10°S, 60°W, and southwards to the national boundary.',-33.78,-4.5,-60.57,-34.74,1); INSERT INTO "extent" VALUES('EPSG','3885','Papua New Guinea - 144°E to 150°E','Papua New Guinea - between 144°E and 150°E, onshore and offshore.',-13.88,2.58,144.0,150.01,0); INSERT INTO "extent" VALUES('EPSG','3886','Finland - onshore west of 19.5°E','Finland - onshore west of 19°30''E.',60.0,60.42,19.3,19.5,1); INSERT INTO "extent" VALUES('EPSG','3887','Brazil - onshore south of 14°S and east of 53°W','Brazil - onshore southeast of a line beginning at the intersection of the 53°W meridian with the northern national boundary then running southwards to 14°S, then westwards to the national boundary.',-33.78,4.43,-60.58,-34.74,0); INSERT INTO "extent" VALUES('EPSG','3888','Papua New Guinea - 150°E to 156°E','Papua New Guinea - between 150°E and 156°E, onshore and offshore.',-14.75,1.98,150.0,156.0,0); INSERT INTO "extent" VALUES('EPSG','3889','Europe - Fehmarnbelt outer','Fehmarnbelt area of Denmark and Germany.',54.33,54.83,10.66,12.01,0); INSERT INTO "extent" VALUES('EPSG','3890','Europe - Fehmarnbelt inner','Fehmarnbelt area of Denmark and Germany.',54.42,54.76,11.17,11.51,0); INSERT INTO "extent" VALUES('EPSG','3891','Canada - 60°W to 54°W and NAD27','Canada between 60°W and 54°W, onshore and offshore - Newfoundland and Labrador; Quebec.',40.57,68.93,-60.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','3892','Germany - offshore North Sea west of 4.5°E','Germany - offshore North Sea west of 4°30''E.',55.24,55.92,3.34,4.51,0); INSERT INTO "extent" VALUES('EPSG','3893','UK - Wytch Farm','United Kingdom (UK) - Wytch Farm area - onshore and offshore.',50.53,50.8,-2.2,-1.68,0); INSERT INTO "extent" VALUES('EPSG','3894','New Zealand - Chatham Island onshore','New Zealand - Chatham Island - onshore.',-44.18,-43.67,-176.92,-176.2,0); INSERT INTO "extent" VALUES('EPSG','3895','Ukraine - west of 24°E','Ukraine - west of 24°E.',47.95,51.66,22.15,24.0,0); INSERT INTO "extent" VALUES('EPSG','3896','Brazil - equatorial margin','Brazil - offshore - equatorial margin.',-5.74,7.04,-51.64,-32.43,0); INSERT INTO "extent" VALUES('EPSG','3897','France - offshore Mediterranean','France - offshore Mediterranean.',41.15,43.74,3.04,10.38,0); INSERT INTO "extent" VALUES('EPSG','3898','Ukraine - 24°E to 30°E','Ukraine - between 24°E and 30°E, onshore and offshore.',45.1,51.96,24.0,30.0,0); INSERT INTO "extent" VALUES('EPSG','3899','Europe - South Permian basin','Europe - South Permian basin.',50.5,56.0,-1.67,22.0,0); INSERT INTO "extent" VALUES('EPSG','3900','Europe - onshore - eastern - S-42(83)','Onshore Bulgaria, Czechia, Germany (former DDR), Hungary and Slovakia.',41.24,54.74,9.92,28.68,0); INSERT INTO "extent" VALUES('EPSG','3901','Germany - onshore west of 6°E','Germany - onshore west of 6°E - Nordrhein-Westfalen.',50.97,51.83,5.86,6.01,0); INSERT INTO "extent" VALUES('EPSG','3902','Reunion','Reunion - onshore and offshore.',-24.72,-18.28,51.83,58.24,0); INSERT INTO "extent" VALUES('EPSG','3903','Ukraine - 30°E to 36°E','Ukraine - between 30°E and 36°E, onshore and offshore.',43.18,52.38,30.0,36.0,0); INSERT INTO "extent" VALUES('EPSG','3904','Germany - onshore between 6°E and 12°E','Germany - onshore between 6°E and 12°E.',47.27,55.09,6.0,12.0,0); INSERT INTO "extent" VALUES('EPSG','3905','Ukraine - east of 36°E','Ukraine - east of 36°E, onshore and offshore.',43.43,50.44,36.0,40.18,0); INSERT INTO "extent" VALUES('EPSG','3906','Ukraine - west of 22.5°E','Ukraine - west of 22°30''E.',48.24,48.98,22.15,22.5,0); INSERT INTO "extent" VALUES('EPSG','3907','Ukraine - 22.5°E to 25.5°E','Ukraine - between 22°30''E and 25°30''E.',47.71,51.96,22.5,25.5,0); INSERT INTO "extent" VALUES('EPSG','3908','Ukraine - 25.5°E to 28.5°E','Ukraine - between 25°30''E and 28°30''E.',45.26,51.94,25.5,28.5,0); INSERT INTO "extent" VALUES('EPSG','3909','Ukraine - 28.5°E to 31.5°E','Ukraine - between 28°30''E and 31°30''E, onshore and offshore.',43.42,52.12,28.5,31.5,0); INSERT INTO "extent" VALUES('EPSG','3910','Ukraine - 31.5°E to 34.5°E','Ukraine - between 31°30''E and 34°30''E, onshore and offshore.',43.18,52.38,31.5,34.5,0); INSERT INTO "extent" VALUES('EPSG','3911','Reunion - east of 54°E','Reunion - onshore and offshore - east of 54°E.',-24.72,-18.28,54.0,58.24,0); INSERT INTO "extent" VALUES('EPSG','3912','Ukraine - 34.5°E to 37.5°E','Ukraine - between 34°30''E and 37°30''E, onshore and offshore.',43.24,51.25,34.5,37.5,0); INSERT INTO "extent" VALUES('EPSG','3913','Ukraine - east of 37.5°E','Ukraine - east of 37°30''E.',46.77,50.39,37.5,40.18,0); INSERT INTO "extent" VALUES('EPSG','3914','World - N hemisphere - 3°E to 9°E - by country','France - offshore Mediterranean including area east of 9°E. Nigeria - offshore including area west of 3°E.',1.92,43.74,2.66,10.38,0); INSERT INTO "extent" VALUES('EPSG','3915','Reunion - west of 54°E','Reunion - offshore - west of 54°E.',-24.37,-18.52,51.83,54.0,0); INSERT INTO "extent" VALUES('EPSG','3916','French Southern Territories - Amsterdam onshore','French Southern Territories - Amsterdam Island onshore.',-37.93,-37.74,77.45,77.67,0); INSERT INTO "extent" VALUES('EPSG','3917','Algeria - Ahnet licence area','Algeria - Ahnet licence area.',26.06,27.51,1.24,2.92,0); INSERT INTO "extent" VALUES('EPSG','3918','French Southern Territories - Kerguelen','French Southern Territories - Kerguelen onshore and offshore.',-53.24,-45.11,62.96,75.66,0); INSERT INTO "extent" VALUES('EPSG','3919','French Southern Territories - Crozet','French Southern Territories - Crozet onshore and offshore.',-49.82,-42.61,45.37,57.16,0); INSERT INTO "extent" VALUES('EPSG','3920','French Southern Territories - Crozet onshore','French Southern Territories - Crozet onshore.',-46.53,-45.87,50.09,52.36,0); INSERT INTO "extent" VALUES('EPSG','3921','French Southern Territories - Amsterdam & St Paul','French Southern Territories - Amsterdam & St Paul islands onshore and offshore.',-42.08,-34.47,73.24,81.83,0); INSERT INTO "extent" VALUES('EPSG','3922','French Southern Territories - St Paul onshore','French Southern Territories - St Paul Island onshore.',-38.79,-38.63,77.44,77.63,0); INSERT INTO "extent" VALUES('EPSG','3923','French Southern Territories - Tromelin','French Southern Territories - Tromelin onshore and offshore.',-18.69,-12.59,52.45,57.18,0); INSERT INTO "extent" VALUES('EPSG','3924','French Southern Territories - Tromelin onshore','French Southern Territories - Tromelin onshore.',-15.96,-15.82,54.46,54.6,0); INSERT INTO "extent" VALUES('EPSG','3925','French Southern Territories - Glorieuses','French Southern Territories - Glorieuses onshore and offshore.',-12.8,-10.65,45.76,48.49,0); INSERT INTO "extent" VALUES('EPSG','3926','French Southern Territories - Glorieuses onshore','French Southern Territories - Glorieuses onshore.',-11.63,-11.5,47.22,47.36,0); INSERT INTO "extent" VALUES('EPSG','3927','French Southern Territories - Juan de Nova','French Southern Territories - Juan de Nova onshore and offshore.',-19.21,-15.35,40.94,43.46,0); INSERT INTO "extent" VALUES('EPSG','3928','Sudan - onshore','Sudan - onshore.',8.64,22.24,21.82,38.66,0); INSERT INTO "extent" VALUES('EPSG','3929','Mozambique - west of 36°E','Mozambique - west of 36°E, onshore and offshore.',-27.58,-11.41,30.21,36.0,0); INSERT INTO "extent" VALUES('EPSG','3930','French Southern Territories - Juan de Nova onshore','French Southern Territories - Juan de Nova onshore.',-17.13,-17.0,42.67,42.82,0); INSERT INTO "extent" VALUES('EPSG','3931','Mozambique - 36°E to 42°E','Mozambique - between 36°E and 42°E, onshore and offshore.',-27.71,-10.09,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','3932','French Southern Territories - Bassas da India','French Southern Territories - Bassas da India onshore and offshore.',-23.21,-19.07,37.55,41.59,0); INSERT INTO "extent" VALUES('EPSG','3933','French Southern Territories - Bassas da India onshore','French Southern Territories - Bassas da India onshore.',-21.58,-21.37,39.57,39.82,0); INSERT INTO "extent" VALUES('EPSG','3934','French Southern Territories - Europa','French Southern Territories - Europa onshore and offshore.',-25.7,-20.91,37.98,41.82,0); INSERT INTO "extent" VALUES('EPSG','3935','Mozambique - east of 42°E','Mozambique - offshore east of 42°E.',-15.83,-10.09,42.0,43.03,0); INSERT INTO "extent" VALUES('EPSG','3936','French Southern Territories - Europa onshore','French Southern Territories - Europa onshore.',-22.46,-22.27,40.26,40.46,0); INSERT INTO "extent" VALUES('EPSG','3937','Congo DR (Zaire) - 11°E to 13°E','The Democratic Republic of the Congo (Zaire) - west of 13°E onshore and offshore.',-6.04,-4.67,11.79,13.0,0); INSERT INTO "extent" VALUES('EPSG','3938','Mauritania - 18°W to 12°W','Mauritania - 18°W to 12°W, onshore and offshore.',14.72,23.46,-18.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','3939','Mauritania - 12°W to 6°W','Mauritania - between 12°W and 6°W, onshore and offshore.',14.73,27.31,-12.0,-6.0,1); INSERT INTO "extent" VALUES('EPSG','3940','Mauritania - east of 6°W','Mauritania - east of 6°W, onshore and offshore.',14.73,27.31,-6.0,0.0,1); INSERT INTO "extent" VALUES('EPSG','3941','Libya - east of 24°E','Libya - east of 24°E, onshore and offshore.',19.99,33.6,24.0,26.21,0); INSERT INTO "extent" VALUES('EPSG','3942','South Sudan','South Sudan.',3.49,12.22,24.14,35.94,0); INSERT INTO "extent" VALUES('EPSG','3943','Bahrain - onshore','Bahrain - onshore.',25.53,26.34,50.39,50.85,0); INSERT INTO "extent" VALUES('EPSG','3944','China - 102°E to 108°E','China - onshore and offshore between 102°E and 108°E.',17.75,42.47,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3945','China - 108°E to 114°E','China - onshore and offshore between 108°E and 114°E.',16.7,45.11,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','3946','China - 114°E to 120°E','China - onshore and offshore between 114°E and 120°E.',19.02,51.52,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3947','China - 120°E to 126°E','China - onshore and offshore between 120°E and 126°E.',24.64,53.56,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','3948','China - 126°E to 132°E','China - onshore and offshore between 126°E and 132°E.',29.7,52.79,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','3949','Libya - west of 12°E','Libya - west of 12°E, onshore and offshore.',23.51,33.92,9.31,12.0,0); INSERT INTO "extent" VALUES('EPSG','3950','Libya - 12°E to 18°E','Libya - between 12°E and 18°E, onshore and offshore.',22.51,35.23,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','3951','Libya - 18°E to 24°E','Libya - between 18°E and 24°E, onshore and offshore.',19.5,35.03,17.99,24.01,0); INSERT INTO "extent" VALUES('EPSG','3952','Algeria - 6°W to 0°W','Algeria - between 6°W and 0°W (of Greenwich), onshore and offshore.',21.82,37.01,-6.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','3953','Algeria - 0°E to 6°E','Algeria - between 0°E and 6°E (of Greenwich), onshore and offshore.',18.97,38.77,0.0,6.01,0); INSERT INTO "extent" VALUES('EPSG','3954','Algeria - east of 6°E','Algeria - east of 6°E (of Greenwich), onshore and offshore.',19.6,38.8,6.0,11.99,0); INSERT INTO "extent" VALUES('EPSG','3955','Malaysia - West Malaysia','Malaysia - West Malaysia onshore and offshore.',1.13,7.81,98.02,105.82,0); INSERT INTO "extent" VALUES('EPSG','3956','Iraq - east of 48°E','Iraq - east of 48°E, onshore and offshore.',29.6,31.0,48.0,48.75,0); INSERT INTO "extent" VALUES('EPSG','3957','Japan - onshore','Japan including outlying islands - onshore.',20.37,45.54,122.83,154.05,0); INSERT INTO "extent" VALUES('EPSG','3958','Philippines - zone I onshore','Philippines - onshore west of 118°E.',7.75,9.32,116.89,118.0,0); INSERT INTO "extent" VALUES('EPSG','3959','Japan - 120°E to 126°E','Japan - west of 126°E, onshore and offshore.',21.1,29.71,122.38,126.0,0); INSERT INTO "extent" VALUES('EPSG','3960','Japan - 126°E to 132°E','Japan - between 126°E and 132°E, onshore and offshore.',21.12,38.63,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','3961','Japan - 132°E to 138°E','Japan - between 132°E and 138°E, onshore and offshore.',17.09,43.55,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','3962','Japan - 138°E to 144°E','Japan - between 138°E and 144°E, onshore and offshore.',17.63,46.05,138.0,144.0,0); INSERT INTO "extent" VALUES('EPSG','3963','Japan - 144°E to 150°E','Japan - east of 144°E, onshore and offshore.',23.03,45.65,144.0,147.86,0); INSERT INTO "extent" VALUES('EPSG','3964','Philippines - zone II onshore','Philippines - onshore approximately between 118°E and 120°E - Palawan; Calamian Islands.',8.82,11.58,118.0,120.07,0); INSERT INTO "extent" VALUES('EPSG','3965','Philippines - zone III onshore','Philippines - onshore approximately between 120°E and 122°E. Luzon (west of 122°E); Mindoro.',4.99,19.45,119.7,122.21,0); INSERT INTO "extent" VALUES('EPSG','3966','Philippines - zone IV onshore','Philippines - onshore approximately between 122°E and 124°E - southeast Luzon (east of 122°E); Tablas; Masbate; Panay; Cebu; Negros; northwest Mindanao (west of 124°E).',6.35,18.58,121.74,124.29,0); INSERT INTO "extent" VALUES('EPSG','3967','Philippines - zone V onshore','Philippines - onshore approximately between 124°E and 126°E - east Mindanao (east of 124°E); Bohol; Samar.',5.5,14.15,123.73,126.65,0); INSERT INTO "extent" VALUES('EPSG','3968','Saudi Arabia - onshore Gulf coast','Saudi Arabia - onshore Arabian Gulf coastal area.',24.63,28.57,47.95,50.81,0); INSERT INTO "extent" VALUES('EPSG','3969','Philippines - onshore','Philippines - onshore.',4.99,19.45,116.89,126.65,0); INSERT INTO "extent" VALUES('EPSG','3970','New Zealand - nearshore west of 168°E','New Zealand - nearshore west of 168°E.',-47.65,-42.59,165.87,168.0,0); INSERT INTO "extent" VALUES('EPSG','3971','New Zealand - nearshore 168°E to 174°E','New Zealand - nearshore between 168°E and 174°E.',-47.64,-33.89,168.0,174.0,0); INSERT INTO "extent" VALUES('EPSG','3972','New Zealand - nearshore east of 174°E','New Zealand - nearshore east of 174°E.',-44.13,-34.24,174.0,179.27,0); INSERT INTO "extent" VALUES('EPSG','3973','New Zealand - onshore','New Zealand - North Island, South Island, Stewart Island - onshore.',-47.33,-34.1,166.37,178.63,0); INSERT INTO "extent" VALUES('EPSG','3974','Cocos (Keeling) Islands','Cocos (Keeling) Islands - onshore and offshore.',-15.56,-8.47,93.41,100.34,0); INSERT INTO "extent" VALUES('EPSG','3975','Indonesia - east of 138°E onshore','Indonesia - onshore east of 138°E.',-9.19,-1.49,138.0,141.01,0); INSERT INTO "extent" VALUES('EPSG','3976','Indonesia - west of 96°E onshore','Indonesia - onshore west of 96°E.',2.55,5.97,95.16,96.0,0); INSERT INTO "extent" VALUES('EPSG','3977','Malaysia - East Malaysia','Malaysia - East Malaysia (Sabah; Sarawak), onshore and offshore.',0.85,7.67,109.31,119.61,0); INSERT INTO "extent" VALUES('EPSG','3978','Indonesia - 96°E to 102°E, N hemisphere onshore','Indonesia - onshore north of equator and between 96°E and 102°E.',0.0,5.42,96.0,102.0,0); INSERT INTO "extent" VALUES('EPSG','3979','Indonesia - 102°E to 108°E, N hemisphere onshore','Indonesia - onshore north of equator and between 102°E and 108°E.',0.0,4.11,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3980','Indonesia - 108°E to 114°E, N hemisphere onshore','Indonesia - onshore north of equator and between 108°E and 114°E.',0.0,4.25,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','3981','Indonesia - 114°E to 120°E, N hemisphere onshore','Indonesia - onshore north of equator and between 114°E and 120°E.',0.0,4.37,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3982','Taiwan - onshore - mainland','Taiwan, Republic of China - onshore - Taiwan Island.',21.87,25.34,119.99,122.06,0); INSERT INTO "extent" VALUES('EPSG','3983','Indonesia - 120°E to 126°E, N hemisphere onshore','Indonesia - onshore north of equator and between 120°E and 126°E.',0.0,3.84,120.0,125.71,0); INSERT INTO "extent" VALUES('EPSG','3984','Indonesia - 126°E to 132°E, N hemisphere onshore','Indonesia - onshore north of equator and between 126°E and 132°E.',0.0,4.59,126.55,131.0,0); INSERT INTO "extent" VALUES('EPSG','3985','Indonesia - 96°E to 102°E, S hemisphere onshore','Indonesia - onshore south of equator and between 96°E and 102°E.',-3.57,0.0,98.24,102.0,0); INSERT INTO "extent" VALUES('EPSG','3986','Indonesia - 102°E to 108°E, S hemisphere onshore','Indonesia - onshore south of equator and between 102°E and 108°E.',-7.79,0.0,102.0,108.0,0); INSERT INTO "extent" VALUES('EPSG','3987','Indonesia - 108°E to 114°E, S hemisphere onshore','Indonesia - onshore south of equator and between 108°E and 114°E.',-8.67,0.0,108.0,114.0,0); INSERT INTO "extent" VALUES('EPSG','3988','Indonesia - 114°E to 120°E, S hemisphere onshore','Indonesia - onshore south of equator and between 114°E and 120°E.',-10.15,0.0,114.0,120.0,0); INSERT INTO "extent" VALUES('EPSG','3989','Indonesia - 120°E to 126°E, S hemisphere onshore','Indonesia - onshore south of equator and between 120°E and 126°E.',-10.98,0.0,120.0,126.0,0); INSERT INTO "extent" VALUES('EPSG','3990','Indonesia - 126°E to 132°E, S hemisphere onshore','Indonesia - onshore south of equator and between 126°E and 132°E.',-8.41,0.0,126.0,132.0,0); INSERT INTO "extent" VALUES('EPSG','3991','Indonesia - 132°E to 138°E, S hemisphere onshore','Indonesia - onshore south of equator and between 132°E and 138°E.',-8.49,-0.29,132.0,138.0,0); INSERT INTO "extent" VALUES('EPSG','3992','New Zealand - offshore 180°W to 174°W','New Zealand - offshore between 180°W and 174°W.',-52.97,-25.88,-180.0,-174.0,0); INSERT INTO "extent" VALUES('EPSG','3993','Germany - onshore 7.5°E to 10.5°E','Germany - onshore between 7°30''E and 10°30''E.',47.27,55.09,7.5,10.51,0); INSERT INTO "extent" VALUES('EPSG','3994','Madagascar','Madagascar - onshore and offshore.',-28.92,-10.28,40.31,53.39,0); INSERT INTO "extent" VALUES('EPSG','3995','Japan - onshore mainland and adjacent islands','Japan - onshore mainland and adjacent islands.',30.18,45.54,128.31,145.87,0); INSERT INTO "extent" VALUES('EPSG','3996','Germany - onshore 10.5°E to 13.5°E','Germany - onshore between 10°30''E and 13°30''E.',47.39,54.74,10.5,13.51,0); INSERT INTO "extent" VALUES('EPSG','3997','Germany - East Germany - 10.5°E to 13.5°E onshore','Germany - states of former East Germany - onshore between 10°30''E and 13°30''E.',50.2,54.74,10.5,13.51,0); INSERT INTO "extent" VALUES('EPSG','3998','Germany - onshore east of 13.5°E','Germany - onshore east of 13°30''E.',48.51,54.72,13.5,15.04,0); INSERT INTO "extent" VALUES('EPSG','3999','Fiji','Fiji - onshore and offshore.',-25.09,-9.78,172.76,-176.27,0); INSERT INTO "extent" VALUES('EPSG','4000','Germany - onshore 10.5°E to 12°E','Germany - onshore between 10°30''E and 12°E.',47.39,54.59,10.5,12.0,0); INSERT INTO "extent" VALUES('EPSG','4001','Germany - onshore 12°E to 13.5°E','Germany - onshore between 12°E and 13°30''E.',47.46,54.74,12.0,13.51,0); INSERT INTO "extent" VALUES('EPSG','4002','Yemen - east of 54°E','Yemen - east of 54°E, onshore and offshore.',8.95,14.95,54.0,57.96,0); INSERT INTO "extent" VALUES('EPSG','4003','Germany - East Germany - east of 13.5°E onshore','Germany - states of former East Germany - onshore east of 13°30''E.',50.62,54.72,13.5,15.04,0); INSERT INTO "extent" VALUES('EPSG','4004','Australia - Northern Territory mainland','Australia - Northern Territory mainland onshore.',-26.01,-10.92,128.99,138.0,0); INSERT INTO "extent" VALUES('EPSG','4005','Indonesia - Kalimantan W - coastal','Indonesia - west Kalimantan - onshore coastal area.',0.06,2.13,108.79,109.78,0); INSERT INTO "extent" VALUES('EPSG','4006','Yemen - west of 42°E','Yemen - west of 42°E, onshore and offshore.',14.73,16.36,41.08,42.0,0); INSERT INTO "extent" VALUES('EPSG','4007','Asia - Cambodia and Vietnam - onshore & Cuu Long basin','Cambodia - onshore; Vietnam - onshore and offshore Cuu Long basin.',7.99,23.4,102.14,110.0,0); INSERT INTO "extent" VALUES('EPSG','4008','Oman - mainland east of 54°E','Oman - mainland onshore east of 54°E.',16.89,26.42,54.0,59.91,0); INSERT INTO "extent" VALUES('EPSG','4009','Oman - mainland','Oman - mainland onshore.',16.59,26.42,51.99,59.91,0); INSERT INTO "extent" VALUES('EPSG','4010','Solomon Islands','Solomon Islands - onshore and offshore.',-16.13,-4.14,154.58,173.58,0); INSERT INTO "extent" VALUES('EPSG','4011','Tuvalu - onshore','Tuvalu - onshore.',-8.62,-6.03,176.24,179.29,0); INSERT INTO "extent" VALUES('EPSG','4012','Congo DR (Zaire) - Bas Congo east of 15°E','The Democratic Republic of the Congo (Zaire) - Bas Congo east of 15°E.',-5.87,-4.42,14.99,16.28,0); INSERT INTO "extent" VALUES('EPSG','4013','Papua New Guinea - PFTB','Papua New Guinea - Papuan fold and thrust belt.',-8.28,-5.59,142.24,144.75,0); INSERT INTO "extent" VALUES('EPSG','4014','Australia - Western Australia mainland','Australia - Western Australia mainland.',-35.19,-13.67,112.85,129.01,0); INSERT INTO "extent" VALUES('EPSG','4015','Vietnam - mainland','Vietnam - mainland onshore.',8.33,23.4,102.14,109.53,0); INSERT INTO "extent" VALUES('EPSG','4016','South America - onshore north of 45°S','South America - onshore north of 45°S excluding Amazonia.',-45.0,12.52,-81.41,-34.74,0); INSERT INTO "extent" VALUES('EPSG','4017','Australia - SE Australia (ACT NSW)','Australia - Australian Capital Territory and New South Wales onshore.',-37.53,-28.15,140.99,153.69,0); INSERT INTO "extent" VALUES('EPSG','4018','Congo DR (Zaire) - south and 29°E to 31°E','The Democratic Republic of the Congo (Zaire) - south of a line through Bandundu, Seke and Pweto and east of 29°E.',-13.46,-12.15,29.0,29.81,0); INSERT INTO "extent" VALUES('EPSG','4019','Arctic - 87°N to 75°N, 156°W to 66°W','Arctic - 87°N to 75°N, approximately 156°W to approximately 66°W. May be extended westwards or eastwards within the latitude limits.',75.0,87.01,-156.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','4020','Indonesia - onshore','Indonesia - onshore.',-10.98,5.97,95.16,141.01,0); INSERT INTO "extent" VALUES('EPSG','4021','Australia - Queensland mainland','Australia - Queensland mainland onshore.',-29.19,-10.65,137.99,153.61,0); INSERT INTO "extent" VALUES('EPSG','4022','UAE - Abu Dhabi and Dubai - onshore east of 54°E','United Arab Emirates (UAE) - Abu Dhabi onshore east of 54°E; Dubai onshore.',22.63,25.34,53.99,56.03,0); INSERT INTO "extent" VALUES('EPSG','4023','Brazil - west of 72°W','Brazil - west of 72°W.',-10.01,-4.59,-74.01,-71.99,0); INSERT INTO "extent" VALUES('EPSG','4024','Brazil - 72°W to 66°W','Brazil - between 72°W and 66°W, northern and southern hemispheres.',-11.14,2.15,-72.0,-65.99,0); INSERT INTO "extent" VALUES('EPSG','4025','Angola - offshore north of 8°S','Angola - offshore north of 8°S - including blocks 0, 1, 2, 14, 15, 17, 18 north of 8°S and 32; onshore Soyo area.',-8.01,-5.05,10.41,12.84,0); INSERT INTO "extent" VALUES('EPSG','4026','Brazil - 66°W to 60°W','Brazil - between 66°W and 60°W, northern and southern hemispheres.',-16.28,5.28,-66.0,-59.99,0); INSERT INTO "extent" VALUES('EPSG','4027','Arctic - 87°N to 75°N, 84°W to 6°E','Arctic - 87°N to 75°N, approximately 84°W to approximately 6°E. May be extended westwards or eastwards within the latitude limits.',75.0,87.01,-84.0,6.01,0); INSERT INTO "extent" VALUES('EPSG','4028','Arctic - 87°N to 75°N, 12°W to 78°E','Arctic - 87°N to 75°N, approximately 12°W to approximately 78°E. May be extended westwards or eastwards within the latitude limits.',75.0,87.01,-12.0,78.01,0); INSERT INTO "extent" VALUES('EPSG','4029','Arctic - 87°N to 75°N, 60°E to 150°E','Arctic - 87°N to 75°N, approximately 60°E to approximately 150°E. May be extended westwards or eastwards within the latitude limits.',75.0,87.01,60.0,150.01,0); INSERT INTO "extent" VALUES('EPSG','4030','Arctic - 84°30''N to 79°30''N, 135°W to 95°W','Arctic - between 84°30''N and 79°30''N, approximately 135°W to approximately 95°W. May be extended eastwards within the latitude limits.',79.5,84.51,-135.0,-95.0,0); INSERT INTO "extent" VALUES('EPSG','4031','Arctic - 87°N to 75°N, 132°E to 138°W','Arctic - 87°N to 75°N, approximately 132°E to approximately 138°W. May be extended westwards or eastwards within the latitude limits.',75.0,87.01,132.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','4032','Arctic - 79°N to 67°N, 156°W to 66°W','Arctic - 79°N to 67°N, approximately 156°W to approximately 66°W. May be extended westwards or eastwards within the latitude limits.',67.0,79.01,-156.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','4033','Arctic - 79°N to 67°N, 84°W to 6°E','Arctic - 79°N to 67°N, approximately 84°W to approximately 6°E. May be extended westwards or eastwards within the latitude limits.',67.0,79.01,-84.0,6.01,0); INSERT INTO "extent" VALUES('EPSG','4034','Arctic - 79°N to 67°N, 12°W to 78°E','Arctic - 79°N to 67°N, approximately 12°W to approximately 78°E. May be extended westwards or eastwards within the latitude limits.',67.0,79.01,-12.0,78.01,0); INSERT INTO "extent" VALUES('EPSG','4035','Italy - Emilia-Romagna','Italy - Emilia-Romagna region.',43.73,45.14,9.19,12.76,0); INSERT INTO "extent" VALUES('EPSG','4036','Arctic - 84°30''N to 79°30''N, 95°W to 55°W','Arctic - between 84°30''N and 79°30''N, approximately 95°W to approximately 55°W. May be extended westwards within the latitude limits.',79.5,84.51,-95.0,-55.0,0); INSERT INTO "extent" VALUES('EPSG','4037','Arctic - 79°N to 67°N, 60°E to 150°E','Arctic - 79°N to 67°N, approximately 60°E to approximately 150°E. May be extended westwards or eastwards within the latitude limits.',67.0,79.01,60.0,150.01,0); INSERT INTO "extent" VALUES('EPSG','4038','Arctic - 79°N to 67°N, 132°E to 138°W','Arctic - 79°N to 67°N, approximately 132°E to approximately 138°W. May be extended westwards or eastwards within the latitude limits.',67.0,79.01,132.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','4039','Arctic - 84°30''N to 79°30''N, 72°W to 32°W','Arctic - between 84°30''N and 79°30''N, approximately 72°W to approximately 32°W. May be extended eastwards within the latitude limits.',79.5,84.51,-72.0,-32.0,0); INSERT INTO "extent" VALUES('EPSG','4040','Arctic - 71°N to 59°N, 156°W to 66°W','Arctic - 71°N to 59°N, approximately 156°W to approximately 66°W. May be extended westwards or eastwards within the latitude limits.',59.0,71.0,-156.0,-66.0,0); INSERT INTO "extent" VALUES('EPSG','4041','Arctic - 71°N to 59°N, 84°W to 6°E','Arctic - 71°N to 59°N, approximately 84°W to approximately 6°E. May be extended westwards or eastwards within the latitude limits.',59.0,71.0,-84.0,6.0,0); INSERT INTO "extent" VALUES('EPSG','4042','Arctic - 71°N to 59°N, 12°W to 78°E','Arctic - 71°N to 59°N, approximately 12°W to approximately 78°E. May be extended westwards or eastwards within the latitude limits.',59.0,71.0,-12.0,78.01,0); INSERT INTO "extent" VALUES('EPSG','4043','Arctic - 71°N to 59°N, 60°E to 150°E','Arctic - 71°N to 59°N, approximately 60°E to approximately 150°E. May be extended westwards or eastwards within the latitude limits.',59.0,71.0,60.0,150.01,0); INSERT INTO "extent" VALUES('EPSG','4044','Arctic - 87°50''N to 82°50''N, 180°W to 120°W','Arctic - between 87°50''N and 82°50''N, approximately 180°W to approximately 120°W. May be extended westwards or eastwards within the latitude limits.',82.83,87.84,-180.0,-120.0,0); INSERT INTO "extent" VALUES('EPSG','4045','Arctic - 71°N to 59°N, 132°E to 138°W','Arctic - 71°N to 59°N, approximately 132°E to approximately 138°W. May be extended westwards or eastwards within the latitude limits.',59.0,71.0,132.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','4046','Arctic - 84°30''N to 79°30''N, 32°W to 8°E','Arctic - between 84°30''N and 79°30''N, approximately 32°W to approximately 8°E. May be extended westwards within the latitude limits.',79.5,84.51,-32.0,8.01,0); INSERT INTO "extent" VALUES('EPSG','4047','Arctic - 87°50''N to 82°50''N, 120°W to 60°W','Arctic - between 87°50''N and 82°50''N, approximately 120°W to approximately 60°W. May be extended westwards or eastwards within the latitude limits.',82.83,87.84,-120.0,-60.0,0); INSERT INTO "extent" VALUES('EPSG','4048','Arctic - 87°50''N to 82°50''N, 60°W to 0°E','Arctic - between 87°50''N and 82°50''N, approximately 60°W to approximately 0°E. May be extended westwards or eastwards within the latitude limits.',82.83,87.84,-60.0,0.0,0); INSERT INTO "extent" VALUES('EPSG','4049','Arctic - 87°50''N to 82°50''N, 0°E to 60°E','Arctic - between 87°50''N and 82°50''N, approximately 0°E to approximately 60°E. May be extended westwards or eastwards within the latitude limits.',82.83,87.84,0.0,60.01,0); INSERT INTO "extent" VALUES('EPSG','4050','Arctic - 87°50''N to 82°50''N, 60°E to 120°E','Arctic - between 87°50''N and 82°50''N, approximately 60°E to approximately 120°E. May be extended westwards or eastwards within the latitude limits.',82.83,87.84,60.0,120.01,0); INSERT INTO "extent" VALUES('EPSG','4051','Arctic - 87°50''N to 82°50''N, 120°E to 180°E','Arctic - between 87°50''N and 82°50''N, approximately 120°E to approximately 180°E. May be extended westwards or eastwards within the latitude limits.',82.83,87.83,120.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','4052','Arctic - 84°30''N to 79°30''N, 174°W to 135°W','Arctic - between 84°30''N and 79°30''N, approximately 174°W to approximately 135°W. May be extended westwards or eastwards within the latitude limits.',79.5,84.51,-174.0,-134.99,0); INSERT INTO "extent" VALUES('EPSG','4053','Arctic - 84°30''N to 79°30''N, 4°W to 36°E','Arctic - between 84°30''N and 79°30''N, approximately 4°W to approximately 36°E.',79.5,84.51,-4.0,36.01,0); INSERT INTO "extent" VALUES('EPSG','4054','Arctic - 84°30''N to 79°30''N, 33°E to 73°E','Arctic - between 84°30''N and 79°30''N, approximately 33°E to approximately 73°E. May be extended westwards or eastwards within the latitude limits.',79.5,84.51,33.0,73.01,0); INSERT INTO "extent" VALUES('EPSG','4055','Arctic - 84°30''N to 79°30''N, 73°E to 113°E','Arctic - between 84°30''N and 79°30''N, approximately 73°E to approximately 113°E. May be extended westwards or eastwards within the latitude limits.',79.5,84.51,73.0,113.01,0); INSERT INTO "extent" VALUES('EPSG','4056','Arctic - 84°30''N to 79°30''N, 113°E to 153°E','Arctic - between 84°30''N and 79°30''N, approximately 113°E to approximately 153°E. May be extended westwards or eastwards within the latitude limits.',79.5,84.51,113.0,153.01,0); INSERT INTO "extent" VALUES('EPSG','4057','Arctic - 84°30''N to 79°30''N, 146°E to 174°W','Arctic - between 84°30''N and 79°30''N, approximately 146°E to approximately 174°W. May be extended westwards or eastwards within the latitude limits.',79.5,84.51,146.0,-173.99,0); INSERT INTO "extent" VALUES('EPSG','4058','Arctic - 81°10''N to 76°10''N, 4°W to 38°E','Arctic (Norway (Svalbard) onshore and offshore) - between 81°10''N and 76°10''N.',76.16,81.17,-3.35,38.01,0); INSERT INTO "extent" VALUES('EPSG','4059','Arctic - 81°10''N to 76°10''N, 35°E to 67°E','Arctic (Russia onshore and offshore) - between 81°10''N and 76°10''N, approximately 35°E to approximately 67°E. May be extended eastwards within the latitude limits.',76.16,81.17,34.99,67.01,0); INSERT INTO "extent" VALUES('EPSG','4060','Arctic - 81°10''N to 76°10''N, 67°E to 98°E','Arctic (Russia onshore and offshore) - between 81°10''N and 76°10''N, approximately 67°E to approximately 98°E. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,67.0,98.01,0); INSERT INTO "extent" VALUES('EPSG','4061','Arctic - 81°10''N to 76°10''N, 98°E to 129°E','Arctic (Russia onshore and offshore) - between 81°10''N and 76°10''N, approximately 98°E to approximately 129°E. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,98.0,129.01,0); INSERT INTO "extent" VALUES('EPSG','4062','Arctic - 81°10''N to 76°10''N, 129°E to 160°E','Arctic (Russia onshore and offshore) - between 81°10''N and 76°10''N, approximately 129°E to approximately 160°E. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,129.0,160.01,0); INSERT INTO "extent" VALUES('EPSG','4063','Arctic - 81°10''N to 76°10''N, 160°E to 169°W','Arctic - between 81°10''N and 76°10''N, approximately 160°E to approximately 169°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,160.0,-168.99,0); INSERT INTO "extent" VALUES('EPSG','4064','Arctic - 81°10''N to 76°10''N, 169°W to 138°W','Arctic - between 81°10''N and 76°10''N, approximately 169°W to approximately 138°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,-169.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','4065','Arctic - 81°10''N to 76°10''N, 144°W to 114°W','Arctic - between 81°10''N and 76°10''N, approximately 144°W to approximately 114°W. May be extended eastwards within the latitude limits.',76.16,81.17,-144.0,-114.0,0); INSERT INTO "extent" VALUES('EPSG','4066','Norway - onshore - 6°E to 12°E','Norway - onshore - between 6°E and 12°E.',57.9,67.58,6.0,12.01,0); INSERT INTO "extent" VALUES('EPSG','4067','Norway - onshore - 12°E to 18°E','Norway - onshore - between 12°E and 18°E.',59.88,69.96,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','4068','Norway - onshore - 18°E to 24°E','Norway - onshore - between 18°E and 24°E.',68.04,71.15,18.0,24.01,0); INSERT INTO "extent" VALUES('EPSG','4069','Norway - onshore - 24°E to 30°E','Norway - onshore - between 24°E and 30°E.',68.58,71.24,24.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','4070','Arctic - 81°10''N to 76°10''N, 114°W to 84°W','Arctic - between 81°10''N and 76°10''N, approximately 114°W to approximately 84°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,-114.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','4071','Arctic - 81°10''N to 76°10''N, 84°W to 54°W','Arctic - between 81°10''N and 76°10''N, approximately 84°W to approximately 54°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,-84.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','4072','Arctic - 81°10''N to 76°10''N, Canada east of 84°W','Arctic - between 81°10''N and 76°10''N, Canada east of approximately 84°W. May be extended westwards within the latitude limits.',76.16,81.17,-84.0,-64.78,0); INSERT INTO "extent" VALUES('EPSG','4073','Arctic - 81°10''N to 76°10''N, Greenland west of 54°W','Arctic - between 81°10''N and 76°10''N, Greenland west of approximately 54°W. May be extended eastwards within the latitude limits.',76.16,81.17,-75.0,-54.0,0); INSERT INTO "extent" VALUES('EPSG','4074','Arctic - 81°10''N to 76°10''N, 54°W to 24°W','Arctic - between 81°10''N and 76°10''N, approximately 54°W to approximately 24°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,-54.0,-24.0,0); INSERT INTO "extent" VALUES('EPSG','4075','Arctic - 81°10''N to 76°10''N, 24°W to 3°E','Arctic - between 81°10''N and 76°10''N, approximately 24°W to approximately 2°E. May be extended westwards within the latitude limits.',76.16,81.17,-24.0,1.89,0); INSERT INTO "extent" VALUES('EPSG','4076','Arctic - 77°50''N to 72°50''N, 169°W to 141°W','Arctic - between 77°50''N and 72°50''N, approximately 169°W to approximately 141°W. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,-169.0,-141.0,0); INSERT INTO "extent" VALUES('EPSG','4077','Arctic - 77°50''N to 72°50''N, 141°W to 116°W','Arctic - between 77°50''N and 72°50''N, approximately 141°W to approximately 116°W. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,-141.0,-116.0,0); INSERT INTO "extent" VALUES('EPSG','4078','Arctic - 77°50''N to 72°50''N, 116°W to 91°W','Arctic - between 77°50''N and 72°50''N, approximately 116°W to approximately 91°W. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,-116.0,-91.0,0); INSERT INTO "extent" VALUES('EPSG','4079','Arctic - 77°50''N to 72°50''N, 91°W to 67°W','Arctic - between 77°50''N and 72°50''N, approximately 91°W to approximately 67°W. May be extended westwards within the latitude limits.',72.83,77.84,-91.0,-67.0,0); INSERT INTO "extent" VALUES('EPSG','4080','Arctic - 77°50''N to 72°50''N, 76°W to 51°W','Arctic - between 77°50''N and 72°50''N, approximately 76°W to approximately 51°W. May be extended eastwards within the latitude limits.',72.83,77.84,-76.0,-51.0,0); INSERT INTO "extent" VALUES('EPSG','4081','Arctic - 77°50''N to 72°50''N, 51°W to 26°W','Arctic - between 77°50''N and 72°50''N, approximately 51°W to approximately 26°W. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,-51.0,-26.0,0); INSERT INTO "extent" VALUES('EPSG','4082','Arctic - 77°50''N to 72°50''N, 26°W to 2°W','Arctic - between 77°50''N and 72°50''N, approximately 26°W to approximately 2°W. May be extended westwards within the latitude limits.',72.83,77.84,-26.0,-2.0,0); INSERT INTO "extent" VALUES('EPSG','4083','Arctic - 77°50''N to 72°50''N, 2°W to 22°E','Arctic - between 77°50''N and 72°50''N, approximately 2°W to approximately 22°E. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,-2.0,22.01,0); INSERT INTO "extent" VALUES('EPSG','4084','Arctic - 77°50''N to 72°50''N, 22°E to 46°E','Arctic - between 77°50''N and 72°50''N, approximately 22°E to approximately 46°E. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,22.0,46.01,0); INSERT INTO "extent" VALUES('EPSG','4085','Arctic - 77°50''N to 72°50''N, 46°E to 70°E','Arctic - between 77°50''N and 72°50''N, approximately 46°E to approximately 70°E. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,46.0,70.01,0); INSERT INTO "extent" VALUES('EPSG','4086','Arctic - 77°50''N to 72°50''N, 70°E to 94°E','Arctic - between 77°50''N and 72°50''N, approximately 70°E to approximately 94°E. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,70.0,94.01,0); INSERT INTO "extent" VALUES('EPSG','4087','Arctic - 77°50''N to 72°50''N, 94°E to 118°E','Arctic - between 77°50''N and 72°50''N, approximately 94°E to approximately 118°E. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,94.0,118.01,0); INSERT INTO "extent" VALUES('EPSG','4088','Arctic - 77°50''N to 72°50''N, 118°E to 142°E','Arctic - between 77°50''N and 72°50''N, approximately 118°E to approximately 142°E. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,118.0,142.01,0); INSERT INTO "extent" VALUES('EPSG','4089','Arctic - 77°50''N to 72°50''N, 142°E to 166°E','Arctic - between 77°50''N and 72°50''N, approximately 142°E to approximately 166°E. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,142.0,166.01,0); INSERT INTO "extent" VALUES('EPSG','4090','Arctic - 77°50''N to 72°50''N, 166°E to 169°W','Arctic - between 77°50''N and 72°50''N, approximately 166°E to approximately 169°W. May be extended westwards or eastwards within the latitude limits.',72.83,77.84,166.0,-168.99,0); INSERT INTO "extent" VALUES('EPSG','4091','Arctic - 74°30''N to 69°30''N, 4°E to 24°E','Arctic - between 74°30''N and 69°30''N, approximately 4°E to approximately 24°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,4.0,24.01,0); INSERT INTO "extent" VALUES('EPSG','4092','Arctic - 74°30''N to 69°30''N, 24°E to 44°E','Arctic - between 74°30''N and 69°30''N, approximately 24°E to approximately 44°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,24.0,44.01,0); INSERT INTO "extent" VALUES('EPSG','4093','Arctic - 74°30''N to 69°30''N, 44°E to 64°E','Arctic - between 74°30''N and 69°30''N, approximately 44°E to approximately 64°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,44.0,64.01,0); INSERT INTO "extent" VALUES('EPSG','4094','Arctic - 74°30''N to 69°30''N, 64°E to 85°E','Arctic - between 74°30''N and 69°30''N, approximately 64°E to approximately 85°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,64.0,85.01,0); INSERT INTO "extent" VALUES('EPSG','4095','Arctic - 74°30''N to 69°30''N, 85°E to 106°E','Arctic - between 74°30''N and 69°30''N, approximately 85°E to approximately 106°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,85.0,106.01,0); INSERT INTO "extent" VALUES('EPSG','4096','Arctic - 74°30''N to 69°30''N, 106°E to 127°E','Arctic - between 74°30''N and 69°30''N, approximately 106°E to approximately 127°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,106.0,127.01,0); INSERT INTO "extent" VALUES('EPSG','4097','Arctic - 74°30''N to 69°30''N, 127°E to 148°E','Arctic - between 74°30''N and 69°30''N, approximately 127°E to approximately 148°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,127.0,148.0,0); INSERT INTO "extent" VALUES('EPSG','4098','Arctic - 74°30''N to 69°30''N, 148°E to 169°E','Arctic - between 74°30''N and 69°30''N, approximately 148°E to approximately 169°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,148.0,169.01,0); INSERT INTO "extent" VALUES('EPSG','4099','Arctic - 74°30''N to 69°30''N, 169°E to 169°W','Arctic - between 74°30''N and 69°30''N, approximately 169°E to approximately 169°W. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,169.0,-169.0,0); INSERT INTO "extent" VALUES('EPSG','4100','Arctic - 74°30''N to 69°30''N, 173°W to 153°W','Arctic - between 74°30''N and 69°30''N, approximately 173°W to approximately 153°W. May be extended eastwards within the latitude limits.',69.5,74.51,-173.0,-153.0,0); INSERT INTO "extent" VALUES('EPSG','4101','Arctic - 74°30''N to 69°30''N, 157°W to 137°W','Arctic - between 74°30''N and 69°30''N, approximately 157°W to approximately 137°W. May be extended westwards within the latitude limits.',69.5,74.51,-157.0,-137.0,0); INSERT INTO "extent" VALUES('EPSG','4102','Arctic - 74°30''N to 69°30''N, 141°W to 121°W','Arctic - between 74°30''N and 69°30''N, approximately 141°W to approximately 121°W. May be extended eastwards within the latitude limits.',69.5,74.51,-141.0,-121.0,0); INSERT INTO "extent" VALUES('EPSG','4103','Arctic - 74°30''N to 69°30''N, 121°W to 101°W','Arctic - between 74°30''N and 69°30''N, approximately 121°W to approximately 101°W. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,-121.0,-101.0,0); INSERT INTO "extent" VALUES('EPSG','4104','Arctic - 74°30''N to 69°30''N, 101°W to 81°W','Arctic - between 74°30''N and 69°30''N, approximately 101°W to approximately 81°W. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,-101.0,-81.0,0); INSERT INTO "extent" VALUES('EPSG','4105','Arctic - 74°30''N to 69°30''N, 81°W to 61°W','Arctic - between 74°30''N and 69°30''N, approximately 81°W to approximately 61°W. May be extended westwards within the latitude limits.',69.5,74.51,-81.0,-61.0,0); INSERT INTO "extent" VALUES('EPSG','4106','Arctic - 74°30''N to 69°30''N, 72°W to 52°W','Arctic - between 74°30''N and 69°30''N, approximately 72°W to approximately 52°W. May be extended eastwards within the latitude limits.',69.48,74.51,-71.89,-51.99,0); INSERT INTO "extent" VALUES('EPSG','4107','Arctic - 74°30''N to 69°30''N, 52°W to 32°W','Arctic - between 74°30''N and 69°30''N, approximately 52°W to approximately 32°W. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,-52.0,-32.0,0); INSERT INTO "extent" VALUES('EPSG','4108','Arctic - 74°30''N to 69°30''N, 32°W to 12°W','Arctic - between 74°30''N and 69°30''N, approximately 32°W to approximately 12°W. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,-32.0,-12.0,0); INSERT INTO "extent" VALUES('EPSG','4109','Arctic - 74°30''N to 69°30''N, 15°W to 5°E','Arctic - between 74°30''N and 69°30''N, approximately 15°W to approximately 5°E. May be extended westwards or eastwards within the latitude limits.',69.5,74.51,-15.0,5.01,0); INSERT INTO "extent" VALUES('EPSG','4110','Arctic - 71°10''N to 66°10''N, 174°W to 156°W','Arctic - between 71°10''N and 66°10''N, approximately 174°W to approximately 156°W. May be extended eastwards within the latitude limits.',66.16,71.17,-174.0,-156.0,0); INSERT INTO "extent" VALUES('EPSG','4111','Arctic - 71°10''N to 66°10''N, 156°W to 138°W','Arctic - between 71°10''N and 66°10''N, approximately 156°W to approximately 138°W. May be extended westwards within the latitude limits.',66.16,71.17,-156.0,-138.0,0); INSERT INTO "extent" VALUES('EPSG','4112','Arctic - 71°10''N to 66°10''N, 141°W to 122°W','Arctic - between 71°10''N and 66°10''N, approximately 141°W to approximately 122°W. May be extended eastwards within the latitude limits.',66.16,71.17,-141.0,-122.0,0); INSERT INTO "extent" VALUES('EPSG','4113','Arctic - 71°10''N to 66°10''N, 122°W to 103°W','Arctic - between 71°10''N and 66°10''N, approximately 122°W to approximately 103°W. May be extended westwards or eastwards within the latitude limits.',66.16,71.17,-122.0,-103.0,0); INSERT INTO "extent" VALUES('EPSG','4114','Arctic - 71°10''N to 66°10''N, 103°W to 84°W','Arctic - between 71°10''N and 66°10''N, approximately 103°W to approximately 84°W. May be extended westwards or eastwards within the latitude limits.',66.16,71.17,-103.0,-84.0,0); INSERT INTO "extent" VALUES('EPSG','4115','Arctic - 71°10''N to 66°10''N, 84°W to 65°W','Arctic - between 71°10''N and 66°10''N, approximately 84°W to approximately 65°W. May be extended westwards or eastwards within the latitude limits.',66.16,71.17,-84.0,-65.0,0); INSERT INTO "extent" VALUES('EPSG','4116','Arctic - 71°10''N to 66°10''N, 65°W to 47°W','Arctic - between 71°10''N and 66°10''N, approximately 65°W to approximately 47°W. May be extended westwards or eastwards within the latitude limits.',66.16,71.17,-65.0,-47.0,0); INSERT INTO "extent" VALUES('EPSG','4117','Arctic - 71°10''N to 66°10''N, 47°W to 29°W','Arctic - between 71°10''N and 66°10''N, approximately 47°W to approximately 29°W. May be extended westwards or eastwards within the latitude limits.',66.16,71.17,-47.0,-29.0,0); INSERT INTO "extent" VALUES('EPSG','4118','Arctic - 71°10''N to 66°10''N, 29°W to 11°W','Arctic - between 71°10''N and 66°10''N, approximately 29°W to approximately 11°W. May be extended westwards within the latitude limits.',66.16,71.17,-29.0,-11.0,0); INSERT INTO "extent" VALUES('EPSG','4119','Arctic - 67°50''N to 62°50''N, 59°W to 42°W','Arctic - between 67°50''N and 62°50''N, approximately 59°W to approximately 42°W. May be extended eastwards within the latitude limits.',62.83,67.84,-59.0,-42.0,0); INSERT INTO "extent" VALUES('EPSG','4120','Arctic - 67°50''N to 62°50''N, 42°W to 25°W','Arctic - between 67°50''N and 62°50''N, approximately 42°W to approximately 25°W. May be extended westwards within the latitude limits.',62.83,67.84,-42.0,-25.0,0); INSERT INTO "extent" VALUES('EPSG','4121','Cayman Islands - Little Cayman','Cayman Islands - Little Cayman.',19.63,19.74,-80.14,-79.93,0); INSERT INTO "extent" VALUES('EPSG','4122','Colombia - Arauca city','Colombia - Arauca city.',7.05,7.1,-70.78,-70.71,0); INSERT INTO "extent" VALUES('EPSG','4123','Arctic - 64°30''N to 59°30''N, 59°W to 44°W','Arctic - between 64°30''N and 59°30''N, approximately 59°W to approximately 44°W. May be extended eastwards within the latitude limits.',59.5,64.51,-59.0,-44.0,0); INSERT INTO "extent" VALUES('EPSG','4124','Arctic - 64°30''N to 59°30''N, 44°W to 29°W','Arctic - between 64°30''N and 59°30''N, approximately 44°W to approximately 29°W. May be extended westwards within the latitude limits.',59.5,64.51,-44.0,-29.0,0); INSERT INTO "extent" VALUES('EPSG','4125','Portugal - Madeira and Desertas islands onshore','Portugal - Madeira and Desertas islands - onshore.',32.35,32.93,-17.31,-16.4,0); INSERT INTO "extent" VALUES('EPSG','4126','Portugal - Azores E onshore - Santa Maria and Formigas','Portugal - eastern Azores onshore - Santa Maria, Formigas.',36.87,37.34,-25.26,-24.72,0); INSERT INTO "extent" VALUES('EPSG','4127','Nigeria - OML 124','Nigeria - onshore - block OML 124 (formerly OPL 118).',5.56,5.74,6.72,6.97,0); INSERT INTO "extent" VALUES('EPSG','4128','Colombia - Santa Marta city','Colombia - Santa Marta city.',11.16,11.3,-74.24,-74.13,0); INSERT INTO "extent" VALUES('EPSG','4129','Brazil - 48°W to 42°W and north of 0°N','Brazil - offshore between 48°W and 42°W, northern hemisphere.',0.0,5.13,-48.0,-41.99,0); INSERT INTO "extent" VALUES('EPSG','4130','Colombia - Sucre city','Colombia - Sucre city.',8.79,8.83,-74.74,-74.69,0); INSERT INTO "extent" VALUES('EPSG','4131','Colombia - Tunja city','Colombia - Tunja city.',5.5,5.61,-73.39,-73.3,0); INSERT INTO "extent" VALUES('EPSG','4132','Colombia - Armenia city','Colombia - Armenia city.',4.5,4.55,-75.73,-75.65,0); INSERT INTO "extent" VALUES('EPSG','4133','Brazil - 42°W to 36°W and north of 0°N','Brazil - offshore between 42°W and 36°W, northern hemisphere.',0.0,0.74,-42.0,-38.22,0); INSERT INTO "extent" VALUES('EPSG','4134','Colombia - Barranquilla city','Colombia - Barranquilla city.',10.85,11.06,-74.87,-74.75,0); INSERT INTO "extent" VALUES('EPSG','4135','Colombia - Bogota city','Colombia - Bogota DC city.',4.45,4.85,-74.27,-73.98,0); INSERT INTO "extent" VALUES('EPSG','4136','Colombia - Bucaramanga city','Colombia - Bucaramanga city.',7.03,7.17,-73.19,-73.06,0); INSERT INTO "extent" VALUES('EPSG','4137','Colombia - Cali city','Colombia - Cali city.',3.32,3.56,-76.61,-76.42,0); INSERT INTO "extent" VALUES('EPSG','4138','Colombia - Cartagena city','Colombia - Cartagena city.',10.27,10.47,-75.57,-75.42,0); INSERT INTO "extent" VALUES('EPSG','4139','Colombia - Cucuta city','Colombia - Cucuta city.',7.81,7.97,-72.56,-72.46,0); INSERT INTO "extent" VALUES('EPSG','4140','Colombia - Florencia city','Colombia - Florencia city.',1.57,1.65,-75.63,-75.59,0); INSERT INTO "extent" VALUES('EPSG','4141','Colombia - Ibague city','Colombia - Ibague city.',4.39,4.47,-75.27,-75.11,0); INSERT INTO "extent" VALUES('EPSG','4142','Colombia - Inirida city','Colombia - Inirida city.',3.8,3.9,-67.94,-67.88,0); INSERT INTO "extent" VALUES('EPSG','4143','Colombia - Leticia city','Colombia - Leticia city.',-4.23,-4.17,-69.98,-69.92,0); INSERT INTO "extent" VALUES('EPSG','4144','Colombia - Manizales city','Colombia - Manizales city.',5.02,5.11,-75.54,-75.44,0); INSERT INTO "extent" VALUES('EPSG','4145','Colombia - Medellin city','Colombia - Medellin city.',6.12,6.37,-75.66,-75.5,0); INSERT INTO "extent" VALUES('EPSG','4146','Colombia - Mitu city','Colombia - Mitu city.',1.23,1.29,-70.25,-70.21,0); INSERT INTO "extent" VALUES('EPSG','4147','Colombia - Mocoa city','Colombia - Mocoa city.',1.12,1.18,-76.66,-76.63,0); INSERT INTO "extent" VALUES('EPSG','4148','Colombia - Monteria city','Colombia - Monteria city.',8.7,8.81,-75.94,-75.82,0); INSERT INTO "extent" VALUES('EPSG','4149','Colombia - Neiva city','Colombia - Neiva city.',2.87,2.99,-75.32,-75.23,0); INSERT INTO "extent" VALUES('EPSG','4150','Colombia - Pasto city','Colombia - Pasto city.',1.16,1.26,-77.32,-77.23,0); INSERT INTO "extent" VALUES('EPSG','4151','Colombia - Pereira city','Colombia - Pereira city.',4.78,4.87,-75.77,-75.64,0); INSERT INTO "extent" VALUES('EPSG','4152','Colombia - Popayan city','Colombia - Popayan city.',2.41,2.49,-76.65,-76.55,0); INSERT INTO "extent" VALUES('EPSG','4153','Colombia - Puerto Carreno city','Colombia - Puerto Carreno city.',5.98,6.3,-67.7,-67.41,0); INSERT INTO "extent" VALUES('EPSG','4154','Colombia - Quibdo city','Colombia - Quibdo city.',5.66,5.72,-76.68,-76.63,0); INSERT INTO "extent" VALUES('EPSG','4155','Colombia - Riohacha city','Colombia - Riohacha city.',11.42,11.58,-72.96,-72.84,0); INSERT INTO "extent" VALUES('EPSG','4156','Colombia - San Andres city','Colombia - San Andres city.',12.43,12.65,-81.82,-81.6,0); INSERT INTO "extent" VALUES('EPSG','4157','Colombia - San Jose del Guaviare city','Colombia - San Jose del Guaviare city.',2.54,2.61,-72.66,-72.6,0); INSERT INTO "extent" VALUES('EPSG','4158','Colombia - Valledupar city','Colombia - Valledupar city.',10.39,10.51,-73.3,-73.19,0); INSERT INTO "extent" VALUES('EPSG','4159','Colombia - Villavicencio city','Colombia - Villavicencio city.',4.07,4.21,-73.69,-73.56,0); INSERT INTO "extent" VALUES('EPSG','4160','Colombia - Yopal city','Colombia - Yopal city.',5.3,5.37,-72.43,-72.35,0); INSERT INTO "extent" VALUES('EPSG','4161','North America - Mexico and USA - onshore','Mexico - onshore. United States (USA) - CONUS and Alaska - onshore - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',14.51,71.4,172.42,-66.91,0); INSERT INTO "extent" VALUES('EPSG','4162','Pacific - US interests Pacific plate','American Samoa, Marshall Islands, United States (USA) - Hawaii, United States minor outlying islands; onshore and offshore.',-17.56,31.8,157.47,-151.27,0); INSERT INTO "extent" VALUES('EPSG','4163','Japan excluding northern main province','Japan - onshore and offshore, excluding northern prefectures of ''main province'' (see remarks).',17.09,46.05,122.38,157.65,0); INSERT INTO "extent" VALUES('EPSG','4164','USA - Iowa - Spencer','United States (USA) - Iowa - counties of Clay; Dickinson; Emmet; Kossuth; Lyon; O''Brien; Osceola; Palo Alto; Sioux.',42.9,43.51,-96.6,-93.97,0); INSERT INTO "extent" VALUES('EPSG','4165','Japan - onshore mainland excluding eastern main province','Japan - onshore mainland - Hokkaido, Honshu (western part only, see remarks), Shikoku, Kyushu.',30.94,45.54,129.3,145.87,0); INSERT INTO "extent" VALUES('EPSG','4166','Japan - onshore - Honshu, Shikoku, Kyushu','Japan - onshore mainland - Honshu, Shikoku, Kyushu.',30.94,41.58,129.3,142.14,0); INSERT INTO "extent" VALUES('EPSG','4167','Pacific - US interests Mariana plate','Guam, Northern Mariana Islands and Palau; onshore and offshore.',1.64,23.9,129.48,149.55,0); INSERT INTO "extent" VALUES('EPSG','4168','Japan - onshore - Hokkaido','Japan - onshore mainland - Hokkaido.',41.34,45.54,139.7,145.87,0); INSERT INTO "extent" VALUES('EPSG','4169','Christmas Island - onshore','Christmas Island - onshore.',-10.63,-10.36,105.48,105.77,0); INSERT INTO "extent" VALUES('EPSG','4170','Japan - northern Honshu','Japan - northern Honshu prefectures affected by 2011 Tohoku earthquake: Aomori, Iwate, Miyagi, Akita, Yamaguta, Fukushima, Ibaraki, Tochigi, Gumma, Saitama, Chiba, Tokyo, Kanagawa, Niigata, Toyama, Ishikawa, Fukui, Yamanashi, Nagano, Gifu.',34.84,41.58,135.42,142.14,0); INSERT INTO "extent" VALUES('EPSG','4171','Northern Mariana Islands - Rota, Saipan and Tinian','Northern Mariana Islands - onshore - Rota, Saipan and Tinian.',14.06,15.35,145.06,145.89,0); INSERT INTO "extent" VALUES('EPSG','4172','Falkland Islands - offshore 63°W to 57°W','Falkland Islands (Malvinas) - offshore - between 63°W and 57°W.',-56.25,-47.68,-63.01,-56.99,0); INSERT INTO "extent" VALUES('EPSG','4173','Heard Island and McDonald Islands - west of 66°E','Heard Island and McDonald Islands - offshore west of 66°E.',-57.5,-53.43,62.92,66.0,0); INSERT INTO "extent" VALUES('EPSG','4174','Australia','Australia - onshore and offshore. Includes Lord Howe Island, Macquarie Island, Ashmore and Cartier Islands.',-60.55,-8.88,105.8,164.69,0); INSERT INTO "extent" VALUES('EPSG','4175','Australasia - Australia and Norfolk Island - 162°E to 168°E','Australia - offshore east of 162°E. Norfolk Island - onshore and offshore west of 168°E.',-59.39,-25.94,162.0,168.0,0); INSERT INTO "extent" VALUES('EPSG','4176','Australasia - Australia and Christmas Island - 108°E to 114°E','Australia - onshore and offshore west of 114°E. Christmas Island - offshore east of 108°E.',-37.84,-10.72,108.0,114.01,0); INSERT INTO "extent" VALUES('EPSG','4177','Australia - GDA','Australia including Lord Howe Island, Macquarie Island, Ashmore and Cartier Islands, Christmas Island, Cocos (Keeling) Islands, Norfolk Island. All onshore and offshore.',-60.55,-8.47,93.41,173.34,0); INSERT INTO "extent" VALUES('EPSG','4178','Australia - 114°E to 120°E','Australia - onshore and offshore between 114°E and 120°E.',-38.53,-12.06,114.0,120.01,0); INSERT INTO "extent" VALUES('EPSG','4179','Norfolk Island - east of 168°E','Norfolk Island - offshore east of 168°E.',-32.48,-25.61,168.0,173.35,0); INSERT INTO "extent" VALUES('EPSG','4180','USA - Oregon - Baker City','United States (USA) - Oregon - Baker City area.',44.6,45.19,-118.15,-117.37,0); INSERT INTO "extent" VALUES('EPSG','4181','Heard Island and McDonald Islands - 66°E to 72°E','Heard Island and McDonald Islands - offshore 66°E to 72°E.',-58.96,-51.18,66.0,72.01,0); INSERT INTO "extent" VALUES('EPSG','4182','USA - Oregon - Bend-Burns','United States (USA) - Oregon - Bend-Burns area.',43.34,44.28,-120.95,-118.8,0); INSERT INTO "extent" VALUES('EPSG','4183','Seychelles - Seychelles Bank','Seychelles - Mahe, Silhouette, North, Aride Island, Praslin, La Digue and Frigate islands including adjacent smaller granitic islands on the Seychelles Bank, Bird Island and Denis Island.',-4.86,-3.66,55.15,56.01,0); INSERT INTO "extent" VALUES('EPSG','4184','Heard Island and McDonald Islands - 72°E to 78°E','Heard Island and McDonald Islands - onshore and offshore 72°E to 78°E.',-59.02,-49.5,72.0,78.01,0); INSERT INTO "extent" VALUES('EPSG','4185','Heard Island and McDonald Islands - east of 78°E','Heard Island and McDonald Islands - offshore east of 78°E.',-58.47,-50.65,78.0,83.57,0); INSERT INTO "extent" VALUES('EPSG','4186','Italy - 12°E to 18°E','Italy - onshore and offshore - between 12°E and 18°E including San Marino and Vatican City State.',34.79,47.1,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','4187','Italy - east of 18°E','Italy - onshore and offshore - east of 18°E.',34.76,41.64,17.99,18.99,0); INSERT INTO "extent" VALUES('EPSG','4188','Spain and Gibraltar - onshore','Gibraltar - onshore; Spain - mainland onshore.',35.95,43.82,-9.37,3.39,0); INSERT INTO "extent" VALUES('EPSG','4189','Cocos (Keeling) Islands - west of 96°E','Cocos (Keeling) Islands - offshore west of 96°E.',-15.46,-8.57,93.41,96.01,0); INSERT INTO "extent" VALUES('EPSG','4190','Cocos (Keeling) Islands - east of 96°E','Cocos (Keeling) Islands - onshore and offshore east of 96°E.',-15.56,-8.47,96.0,100.34,0); INSERT INTO "extent" VALUES('EPSG','4191','Australasia - Australia and Christmas Island - west of 108°E','Australia - offshore west of 108°E. Christmas Island - onshore and offshore west of 108°E.',-34.68,-8.87,102.14,108.01,0); INSERT INTO "extent" VALUES('EPSG','4192','USA - Oregon - Bend-Klamath Falls','United States (USA) - Oregon - Bend-Klamath Falls area.',41.88,43.89,-122.45,-120.77,0); INSERT INTO "extent" VALUES('EPSG','4193','Vietnam - west of 103°30''E onshore','Vietnam - onshore west of 103°30''E.',9.2,22.82,102.14,103.51,0); INSERT INTO "extent" VALUES('EPSG','4194','Japan onshore excluding northern main province','Japan - onshore, excluding northern prefectures of ''main province'' (see remarks).',20.37,45.54,122.83,154.05,0); INSERT INTO "extent" VALUES('EPSG','4195','USA - Oregon - Bend-Redmond-Prineville','United States (USA) - Oregon - Bend-Redmond-Prineville area.',43.76,44.98,-121.88,-119.79,0); INSERT INTO "extent" VALUES('EPSG','4196','Australia - 156°E to 162°E including Macquarie','Australia including Lord Howe Island and Macquarie Island - onshore and offshore between 156°E and 162°E.',-60.56,-14.08,156.0,162.01,0); INSERT INTO "extent" VALUES('EPSG','4197','USA - Oregon - Eugene','United States (USA) - Oregon - Eugene area.',43.74,44.71,-123.8,-122.18,0); INSERT INTO "extent" VALUES('EPSG','4198','USA - Oregon - Grants Pass-Ashland','United States (USA) - Oregon - Grants Pass-Ashland area.',41.88,42.85,-123.95,-122.37,0); INSERT INTO "extent" VALUES('EPSG','4199','USA - Oregon - Canyonville-Grants Pass','United States (USA) - Oregon - Canyonville-Grants Pass area.',42.49,43.24,-123.83,-122.43,0); INSERT INTO "extent" VALUES('EPSG','4200','USA - Oregon - Columbia River East','United States (USA) - Oregon - Columbia River area between approximately 122°03''W and 118°53''W.',45.49,46.08,-122.05,-118.89,0); INSERT INTO "extent" VALUES('EPSG','4201','USA - Oregon - Gresham-Warm Springs','United States (USA) - Oregon - Gresham-Warm Springs area.',45.02,45.55,-122.43,-121.68,0); INSERT INTO "extent" VALUES('EPSG','4202','USA - Oregon - Columbia River West','United States (USA) - Oregon - Columbia River area west of approximately 121°30''W.',45.17,46.56,-124.33,-121.47,0); INSERT INTO "extent" VALUES('EPSG','4203','USA - Oregon - Cottage Grove-Canyonville','United States (USA) - Oregon - Cottage Grove-Canyonville area.',42.82,43.88,-123.96,-122.4,0); INSERT INTO "extent" VALUES('EPSG','4204','USA - Oregon - Dufur-Madras','United States (USA) - Oregon - Dufur-Madras area.',44.63,45.55,-121.95,-120.46,0); INSERT INTO "extent" VALUES('EPSG','4205','enter here applicable extent','enter here applicable geographic extent',89.99,90.0,179.99,180.0,0); INSERT INTO "extent" VALUES('EPSG','4206','USA - Oregon - La Grande','United States (USA) - Oregon - La Grande area.',45.13,45.8,-118.17,-117.14,0); INSERT INTO "extent" VALUES('EPSG','4207','USA - Oregon - Ontario','United States (USA) - Oregon - Ontario area.',43.41,44.65,-117.9,-116.7,0); INSERT INTO "extent" VALUES('EPSG','4208','USA - Oregon - Oregon Coast','United States (USA) - Oregon - coastal area.',41.89,46.4,-124.84,-123.35,0); INSERT INTO "extent" VALUES('EPSG','4209','USA - Oregon - Pendleton','United States (USA) - Oregon - Pendleton area.',45.46,46.02,-119.36,-118.17,0); INSERT INTO "extent" VALUES('EPSG','4210','USA - Oregon - Pendleton-La Grande','United States (USA) - Oregon - Pendleton-La Grande area.',45.13,45.64,-118.64,-118.09,0); INSERT INTO "extent" VALUES('EPSG','4211','USA - Oregon - Portland','United States (USA) - Oregon - Portland area.',45.23,46.01,-123.53,-122.11,0); INSERT INTO "extent" VALUES('EPSG','4212','USA - Oregon - Salem','United States (USA) - Oregon - Salem area.',44.32,45.3,-123.73,-121.89,0); INSERT INTO "extent" VALUES('EPSG','4213','USA - Oregon - Sweet Home-Sisters','United States (USA) - Oregon - Sweet Home-Santiam Pass-Sisters area.',44.1,44.66,-122.51,-121.69,0); INSERT INTO "extent" VALUES('EPSG','4214','Papua New Guinea - mainland onshore','Papua New Guinea - mainland onshore.',-10.76,-2.53,140.85,150.96,0); INSERT INTO "extent" VALUES('EPSG','4215','Vietnam - 103.5°E to 106.5°E onshore','Vietnam - between 103°30''E and 106°30''E, onshore.',8.33,23.4,103.5,106.51,0); INSERT INTO "extent" VALUES('EPSG','4216','Papua New Guinea - North Fly','Papua New Guinea - North Fly area (between 5°04''S and 6°36''S and west of 141°32''E).',-6.6,-5.05,140.89,141.54,0); INSERT INTO "extent" VALUES('EPSG','4217','Vietnam - east of 106.5°E onshore','Vietnam - onshore east of 106°30''E.',8.57,22.95,106.5,109.53,0); INSERT INTO "extent" VALUES('EPSG','4218','Vietnam - Quang Ninh; Da Nang, Quang Nam; Ba Ria-Vung Tau, Dong Nai, Lam Dong','Vietnam - Quang Ninh province; Da Nang municipality and Quang Nam province; Ba Ria-Vung Tau, Dong Nai and Lam Dong provinces.',8.57,21.67,106.43,108.76,0); INSERT INTO "extent" VALUES('EPSG','4219','USA - Iowa - Mason City','United States (USA) - Iowa - counties of Cerro Gordo; Chickasaw; Floyd; Hancock; Howard; Mitchell; Winnebago; Winneshiek; Worth.',42.9,43.51,-93.98,-91.6,0); INSERT INTO "extent" VALUES('EPSG','4220','Equatorial Guinea - Bioko','Equatorial Guinea - Bioko onshore.',3.14,3.82,8.37,9.02,0); INSERT INTO "extent" VALUES('EPSG','4221','Chile - onshore 36°S to 43.5°S','Chile - onshore between 36°S and 43°30''S.',-43.5,-35.99,-74.48,-70.39,0); INSERT INTO "extent" VALUES('EPSG','4222','Chile - onshore 26°S to 36°S','Chile - onshore between 26°S and 36°S.',-36.0,-26.0,-72.87,-68.28,0); INSERT INTO "extent" VALUES('EPSG','4223','Asia - Malaysia (west including SCS) and Singapore','Malaysia - West Malaysia onshore and offshore east coast; Singapore - onshore and offshore.',1.13,7.81,99.59,105.82,0); INSERT INTO "extent" VALUES('EPSG','4224','Chile - onshore 32°S to 36°S','Chile - onshore between 32°S and 36°S.',-36.0,-31.99,-72.87,-69.77,0); INSERT INTO "extent" VALUES('EPSG','4225','UAE - Abu Dhabi - onshore','United Arab Emirates (UAE) - Abu Dhabi onshore.',22.63,24.95,51.56,56.03,0); INSERT INTO "extent" VALUES('EPSG','4226','UAE - Abu Dhabi','United Arab Emirates (UAE) - Abu Dhabi onshore and offshore.',22.63,25.64,51.5,56.03,0); INSERT INTO "extent" VALUES('EPSG','4227','UAE - Abu Dhabi - onshore east of 54°E','United Arab Emirates (UAE) - Abu Dhabi onshore east of 54°E.',22.63,24.95,53.99,56.03,0); INSERT INTO "extent" VALUES('EPSG','4228','USA - California - San Francisco Bay Area','United States (USA) - California - San Francisco bay area - counties of Alameda, Contra Costa, Marin, Napa, San Francisco, San Mateo, Santa Clara, Santa Cruz, Solano and Sonoma.',36.85,38.87,-123.56,-121.2,0); INSERT INTO "extent" VALUES('EPSG','4229','UAE - Abu Dhabi island','United Arab Emirates (UAE) - Abu Dhabi island.',24.24,24.64,54.2,54.71,0); INSERT INTO "extent" VALUES('EPSG','4230','USA - Iowa - Elkader','United States (USA) - Iowa - counties of Allamakee; Clayton; Delaware.',42.29,43.51,-91.62,-90.89,0); INSERT INTO "extent" VALUES('EPSG','4231','Chile - onshore north of 26°S','Chile - onshore north of 26°S.',-26.0,-17.5,-70.79,-67.0,0); INSERT INTO "extent" VALUES('EPSG','4232','Chile - onshore north of 32°S','Chile - onshore north of 32°S.',-32.0,-17.5,-71.77,-67.0,0); INSERT INTO "extent" VALUES('EPSG','4233','USA - Iowa - Sioux City-Iowa Falls','United States (USA) - Iowa - counties of Buena Vista; Calhoun; Cherokee; Franklin; Hamilton; Hardin; Humboldt; Ida; Plymouth; Pocahontas; Sac; Webster; Woodbury; Wright.',42.2,42.92,-96.65,-93.0,0); INSERT INTO "extent" VALUES('EPSG','4234','USA - Iowa - Waterloo','United States (USA) - Iowa - counties of Black Hawk; Bremer; Buchanan; Butler; Fayette; Grundy.',42.2,43.09,-93.03,-91.59,0); INSERT INTO "extent" VALUES('EPSG','4235','USA - Iowa - Council Bluffs','United States (USA) - Iowa - counties of Crawford; Fremont; Harrison; Mills; Monona; Pottawattamie; Shelby.',40.58,42.22,-96.37,-95.04,0); INSERT INTO "extent" VALUES('EPSG','4236','USA - Iowa - Carroll-Atlantic','United States (USA) - Iowa - counties of Adair; Audubon; Carroll; Cass; Greene; Guthrie.',41.15,42.22,-95.16,-94.16,0); INSERT INTO "extent" VALUES('EPSG','4237','USA - Iowa - Ames-Des Moines','United States (USA) - Iowa - counties of Boone; Dallas; Madison; Polk; Story; Warren.',41.15,42.22,-94.29,-93.23,0); INSERT INTO "extent" VALUES('EPSG','4238','Asia - Middle East - Iraq and SW Iran','Iraq - onshore; Iran - onshore northern Gulf coast and west bordering southeast Iraq.',29.06,37.39,38.79,51.06,0); INSERT INTO "extent" VALUES('EPSG','4239','USA - Iowa - Newton','United States (USA) - Iowa - counties of Jasper; Mahaska; Marion; Marshall; Poweshiek; Tama.',41.16,42.3,-93.35,-92.29,0); INSERT INTO "extent" VALUES('EPSG','4240','USA - Iowa - Cedar Rapids','United States (USA) - Iowa - counties of Benton; Cedar; Iowa; Johnson; Jones; Linn.',41.42,42.3,-92.31,-90.89,0); INSERT INTO "extent" VALUES('EPSG','4241','USA - Iowa - Dubuque-Davenport','United States (USA) - Iowa - counties of Clinton; Dubuque; Jackson; Scott.',41.44,42.68,-91.14,-90.14,0); INSERT INTO "extent" VALUES('EPSG','4242','USA - Iowa - Red Oak-Ottumwa','United States (USA) - Iowa - counties of Adams; Appanoose; Clarke; Davis; Decatur; Lucas; Monroe; Montgomery; Page; Ringgold; Taylor; Union; Wapello; Wayne.',40.57,41.17,-95.39,-92.17,0); INSERT INTO "extent" VALUES('EPSG','4243','USA - Iowa - Fairfield','United States (USA) - Iowa - counties of Jefferson; Keokuk; Van Buren; Washington.',40.59,41.52,-92.42,-91.48,0); INSERT INTO "extent" VALUES('EPSG','4244','USA - Iowa - Burlington','United States (USA) - Iowa - counties of Des Moines; Henry; Lee; Louisa; Muscatine.',40.36,41.6,-91.72,-90.78,0); INSERT INTO "extent" VALUES('EPSG','4245','French Southern Territories - Crozet west of 48°E','French Southern Territories - Crozet offshore west of 48°E.',-49.38,-43.12,45.37,48.01,0); INSERT INTO "extent" VALUES('EPSG','4246','French Southern and Antarctic Territories','French Southern Territories - onshore and offshore: Amsterdam and St Paul, Crozet, Europa and Kerguelen. Antarctica - Adelie Land coastal area.',-67.13,-20.91,37.98,142.0,0); INSERT INTO "extent" VALUES('EPSG','4247','French Southern Territories - Crozet 48°E to 54°E','French Southern Territories - Crozet onshore and offshore between 48°E to 54°E.',-49.82,-42.61,48.0,54.01,0); INSERT INTO "extent" VALUES('EPSG','4248','French Southern Territories - Crozet east of 54°E','French Southern Territories - Crozet offshore east of 54°E.',-49.61,-43.3,54.0,57.16,0); INSERT INTO "extent" VALUES('EPSG','4249','French Southern Territories - 60°E to 66°E','French Southern Territories - Kerguelen offshore west of 66°E.',-53.03,-45.73,62.96,66.0,0); INSERT INTO "extent" VALUES('EPSG','4250','French Southern Territories - 66°E to 72°E','French Southern Territories - Kerguelen onshore and offshore between 66°E and 72°E.',-53.24,-45.11,66.0,72.01,0); INSERT INTO "extent" VALUES('EPSG','4251','French Southern Territories - 72°E to 78°E','French Southern Territories - Kerguelen offshore east of 72°E and Amsterdam & St Paul onshore and offshore west of 78°E.',-51.19,-34.47,72.0,78.01,0); INSERT INTO "extent" VALUES('EPSG','4252','French Southern Territories - east of 78°E','French Southern Territories - Amsterdam & St Paul offshore east of 78°E.',-42.04,-34.5,78.0,81.83,0); INSERT INTO "extent" VALUES('EPSG','4253','USA - Indiana - Lake and Newton','United States (USA) - Indiana - counties of Lake and Newton.',40.73,41.77,-87.53,-87.21,0); INSERT INTO "extent" VALUES('EPSG','4254','USA - Indiana - Jasper and Porter','United States (USA) - Indiana - counties of Jasper and Porter.',40.73,41.77,-87.28,-86.92,0); INSERT INTO "extent" VALUES('EPSG','4255','USA - Indiana - LaPorte, Pulaski, Starke','United States (USA) - Indiana - counties of LaPorte, Pulaski and Starke.',40.9,41.77,-86.94,-86.46,0); INSERT INTO "extent" VALUES('EPSG','4256','USA - Indiana - Benton','United States (USA) - Indiana - Benton county.',40.47,40.74,-87.53,-87.09,0); INSERT INTO "extent" VALUES('EPSG','4257','USA - Indiana - Tippecanoe and White','United States (USA) - Indiana - counties of Tippecanoe and White.',40.21,40.92,-87.1,-86.58,0); INSERT INTO "extent" VALUES('EPSG','4258','USA - Indiana - Carroll','United States (USA) - Indiana - Carroll county.',40.43,40.74,-86.78,-86.37,0); INSERT INTO "extent" VALUES('EPSG','4259','USA - Indiana - Fountain and Warren','United States (USA) - Indiana - counties of Fountain and Warren.',39.95,40.48,-87.54,-87.09,0); INSERT INTO "extent" VALUES('EPSG','4260','USA - Indiana - Clinton','United States (USA) - Indiana - Clinton county.',40.17,40.44,-86.7,-86.24,0); INSERT INTO "extent" VALUES('EPSG','4261','USA - Indiana - Parke and Vermillion','United States (USA) - Indiana - counties of Parke and Vermillion.',39.6,40.15,-87.54,-87.0,0); INSERT INTO "extent" VALUES('EPSG','4262','USA - Indiana - Montgomery and Putnam','United States (USA) - Indiana - counties of Montgomery and Putnam.',39.47,40.22,-87.1,-86.64,0); INSERT INTO "extent" VALUES('EPSG','4263','USA - Indiana - Boone and Hendricks','United States (USA) - Indiana - counties of Boone and Hendricks.',39.6,40.19,-86.7,-86.24,0); INSERT INTO "extent" VALUES('EPSG','4264','USA - Indiana - Vigo','United States (USA) - Indiana - Vigo county.',39.25,39.61,-87.63,-87.19,0); INSERT INTO "extent" VALUES('EPSG','4265','USA - Indiana - Clay','United States (USA) - Indiana - Clay county.',39.16,39.61,-87.25,-86.93,0); INSERT INTO "extent" VALUES('EPSG','4266','USA - Indiana - Owen','United States (USA) - Indiana - Owen county.',39.16,39.48,-87.06,-86.63,0); INSERT INTO "extent" VALUES('EPSG','4267','USA - Indiana - Monroe and Morgan','United States (USA) - Indiana - counties of Monroe and Morgan.',38.99,39.64,-86.69,-86.24,0); INSERT INTO "extent" VALUES('EPSG','4268','USA - Indiana - Sullivan','United States (USA) - Indiana - Sullivan county.',38.9,39.26,-87.66,-87.24,0); INSERT INTO "extent" VALUES('EPSG','4269','USA - Indiana - Daviess and Greene','United States (USA) - Indiana - counties of Daviess and Greene.',38.49,39.18,-87.28,-86.68,0); INSERT INTO "extent" VALUES('EPSG','4270','USA - Indiana - Knox','United States (USA) - Indiana - Knox county.',38.41,38.91,-87.76,-87.09,0); INSERT INTO "extent" VALUES('EPSG','4271','USA - Indiana - Dubois and Martin','United States (USA) - Indiana - counties of Dubois and Martin.',38.2,38.91,-87.08,-86.67,0); INSERT INTO "extent" VALUES('EPSG','4272','USA - Indiana - Crawford, Lawrence, Orange','United States (USA) - Indiana - counties of Crawford, Lawrence and Orange.',38.1,39.0,-86.69,-86.24,0); INSERT INTO "extent" VALUES('EPSG','4273','USA - Indiana - Gibson','United States (USA) - Indiana - Gibson county.',38.16,38.54,-87.99,-87.31,0); INSERT INTO "extent" VALUES('EPSG','4274','USA - Indiana - Pike and Warrick','United States (USA) - Indiana - counties of Pike and Warrick.',37.87,38.56,-87.48,-87.01,0); INSERT INTO "extent" VALUES('EPSG','4275','USA - Indiana - Posey','United States (USA) - Indiana - Posey county.',37.77,38.24,-88.1,-87.68,0); INSERT INTO "extent" VALUES('EPSG','4276','USA - Indiana - Vanderburgh','United States (USA) - Indiana - Vanderburgh county.',37.82,38.17,-87.71,-87.44,0); INSERT INTO "extent" VALUES('EPSG','4277','USA - Indiana - Spencer','United States (USA) - Indiana - Spencer county.',37.78,38.21,-87.27,-86.76,0); INSERT INTO "extent" VALUES('EPSG','4278','USA - Indiana - Perry','United States (USA) - Indiana - Perry county.',37.84,38.27,-86.82,-86.43,0); INSERT INTO "extent" VALUES('EPSG','4279','USA - Indiana - Fulton, Marshall, St Joseph','United States (USA) - Indiana - counties of Fulton, Marshall and St Joseph.',40.9,41.77,-86.53,-85.94,0); INSERT INTO "extent" VALUES('EPSG','4280','USA - Indiana - Elkhart, Kosciusko, Wabash','United States (USA) - Indiana - counties of Elkhart, Kosciusko and Wabash.',40.65,41.77,-86.08,-85.63,0); INSERT INTO "extent" VALUES('EPSG','4281','USA - Indiana - LaGrange and Noble','United States (USA) - Indiana - counties of LaGrange and Noble.',41.26,41.77,-85.66,-85.19,0); INSERT INTO "extent" VALUES('EPSG','4282','USA - Indiana - Steuben','United States (USA) - Indiana - Steuben county.',41.52,41.77,-85.2,-84.8,0); INSERT INTO "extent" VALUES('EPSG','4283','USA - Indiana - DeKalb','United States (USA) - Indiana - DeKalb county.',41.26,41.54,-85.2,-84.8,0); INSERT INTO "extent" VALUES('EPSG','4284','USA - Indiana - Huntington and Whitley','United States (USA) - Indiana - counties of Huntington and Whitley.',40.65,41.3,-85.69,-85.3,0); INSERT INTO "extent" VALUES('EPSG','4285','USA - Indiana - Allen','United States (USA) - Indiana - Allen county.',40.91,41.28,-85.34,-84.8,0); INSERT INTO "extent" VALUES('EPSG','4286','USA - Indiana - Cass','United States (USA) - Indiana - Cass county.',40.56,40.92,-86.59,-86.16,0); INSERT INTO "extent" VALUES('EPSG','4287','USA - Indiana - Howard and Miami','United States (USA) - Indiana - counties of Howard and Miami.',40.37,41.0,-86.38,-85.86,0); INSERT INTO "extent" VALUES('EPSG','4288','USA - Indiana - Wells','United States (USA) - Indiana - Wells county.',40.56,40.92,-85.45,-85.06,0); INSERT INTO "extent" VALUES('EPSG','4289','USA - Indiana - Adams','United States (USA) - Indiana - Adams county.',40.56,40.93,-85.08,-84.8,0); INSERT INTO "extent" VALUES('EPSG','4290','USA - Indiana - Grant','United States (USA) - Indiana - Grant county.',40.37,40.66,-85.87,-85.44,0); INSERT INTO "extent" VALUES('EPSG','4291','USA - Indiana - Blackford and Delaware','United States (USA) - Indiana - counties of Blackford and Delaware.',40.07,40.57,-85.58,-85.2,0); INSERT INTO "extent" VALUES('EPSG','4292','USA - Indiana - Jay','United States (USA) - Indiana - Jay county.',40.3,40.58,-85.22,-84.8,0); INSERT INTO "extent" VALUES('EPSG','4293','USA - Indiana - Hamilton and Tipton','United States (USA) - Indiana - counties of Hamilton and Tipton.',39.92,40.41,-86.25,-85.86,0); INSERT INTO "extent" VALUES('EPSG','4294','USA - Indiana - Hancock and Madison','United States (USA) - Indiana - counties of Hancock and Madison.',39.69,40.38,-85.96,-85.57,0); INSERT INTO "extent" VALUES('EPSG','4295','USA - Indiana - Randolph and Wayne','United States (USA) - Indiana - counties of Randolph and Wayne.',39.71,40.32,-85.23,-84.8,0); INSERT INTO "extent" VALUES('EPSG','4296','USA - Indiana - Henry','United States (USA) - Indiana - Henry county.',39.78,40.08,-85.6,-85.2,0); INSERT INTO "extent" VALUES('EPSG','4297','USA - Indiana - Johnson and Marion','United States (USA) - Indiana - counties of Johnson and Marion.',39.34,39.93,-86.33,-85.93,0); INSERT INTO "extent" VALUES('EPSG','4298','USA - Indiana - Shelby','United States (USA) - Indiana - Shelby county.',39.34,39.7,-85.96,-85.62,0); INSERT INTO "extent" VALUES('EPSG','4299','USA - Indiana - Decatur and Rush','United States (USA) - Indiana - counties of Decatur and Rush.',39.13,39.79,-85.69,-85.29,0); INSERT INTO "extent" VALUES('EPSG','4300','USA - Indiana - Fayette, Franklin, Union','United States (USA) - Indiana - counties of Fayette, Franklin and Union.',39.26,39.79,-85.31,-84.81,0); INSERT INTO "extent" VALUES('EPSG','4301','USA - Indiana - Brown','United States (USA) - Indiana - Brown county.',39.04,39.35,-86.39,-86.07,0); INSERT INTO "extent" VALUES('EPSG','4302','USA - Indiana - Bartholomew','United States (USA) - Indiana - Bartholomew county.',39.03,39.36,-86.09,-85.68,0); INSERT INTO "extent" VALUES('EPSG','4303','USA - Indiana - Jackson','United States (USA) - Indiana - Jackson county.',38.72,39.08,-86.32,-85.79,0); INSERT INTO "extent" VALUES('EPSG','4304','USA - Indiana - Jennings','United States (USA) - Indiana - Jennings county.',38.8,39.2,-85.8,-85.43,0); INSERT INTO "extent" VALUES('EPSG','4305','USA - Indiana - Ripley','United States (USA) - Indiana - Ripley county.',38.91,39.32,-85.45,-85.06,0); INSERT INTO "extent" VALUES('EPSG','4306','USA - Indiana - Dearborn, Ohio, Switzerland','United States (USA) - Indiana - counties of Dearborn, Ohio and Switzerland.',38.68,39.31,-85.21,-84.78,0); INSERT INTO "extent" VALUES('EPSG','4307','USA - Indiana - Harrison and Washington','United States (USA) - Indiana - counties of Harrison and Washington.',37.95,38.79,-86.33,-85.84,0); INSERT INTO "extent" VALUES('EPSG','4308','USA - Indiana - Clark, Floyd, Scott','United States (USA) - Indiana - counties of Clark, Floyd and Scott.',38.17,38.84,-86.04,-85.41,0); INSERT INTO "extent" VALUES('EPSG','4309','USA - Indiana - Jefferson','United States (USA) - Indiana - Jefferson county.',38.58,38.92,-85.69,-85.2,0); INSERT INTO "extent" VALUES('EPSG','4310','USA - Montana - St Mary valley','United States (USA) - Montana - St Mary''s Valley area.',48.55,49.01,-113.97,-113.0,0); INSERT INTO "extent" VALUES('EPSG','4311','USA - Montana - Blackfeet reservation','United States (USA) - Montana - Blackfeet Indian Reservation.',48.0,49.01,-113.84,-112.0,0); INSERT INTO "extent" VALUES('EPSG','4312','USA - Montana - Milk River','United States (USA) - Montana - Milk River area.',47.78,49.01,-112.5,-108.74,0); INSERT INTO "extent" VALUES('EPSG','4313','USA - Montana - Fort Belknap','United States (USA) - Montana - Fort Belknap Indian Reservation area.',47.78,49.01,-110.84,-106.99,0); INSERT INTO "extent" VALUES('EPSG','4314','USA - Montana - Fort Peck higher areas','United States (USA) - Montana - Fort Peck Indian Reservation - higher areas, notably in west and north.',48.01,48.88,-107.57,-104.78,0); INSERT INTO "extent" VALUES('EPSG','4315','USA - Montana - Fort Peck lower areas','United States (USA) - Montana - Fort Peck Indian Reservation - lower areas, notably in south and east.',47.75,49.01,-107.76,-104.04,0); INSERT INTO "extent" VALUES('EPSG','4316','USA - Montana - Crow reservation','United States (USA) - Montana - Crow Indian Reservation.',44.99,46.09,-108.84,-106.66,0); INSERT INTO "extent" VALUES('EPSG','4317','USA - Montana - Three Forks','United States (USA) - Montana - Three Forks area.',45.36,46.59,-112.34,-110.75,0); INSERT INTO "extent" VALUES('EPSG','4318','USA - Montana - Billings','United States (USA) - Montana - Billings area.',44.99,47.41,-109.42,-107.99,0); INSERT INTO "extent" VALUES('EPSG','4319','USA - Wyoming - Wind River reservation','United States (USA) - Wyoming - Wind River Indian Reservation.',42.69,43.86,-109.5,-107.94,0); INSERT INTO "extent" VALUES('EPSG','4320','USA - Wisconsin - Ashland','United States (USA) - Wisconsin - Ashland county.',45.98,47.09,-90.93,-90.3,0); INSERT INTO "extent" VALUES('EPSG','4321','USA - Wisconsin - Bayfield','United States (USA) - Wisconsin - Bayfield county.',46.15,47.01,-91.56,-90.75,0); INSERT INTO "extent" VALUES('EPSG','4322','Oman - west of 54°E','Oman - onshore and offshore west of 54°E.',14.94,19.67,51.99,54.01,0); INSERT INTO "extent" VALUES('EPSG','4323','Oman - 54°E to 60°E','Oman - onshore and offshore between 54°E and 60°E.',14.33,26.74,54.0,60.01,0); INSERT INTO "extent" VALUES('EPSG','4324','Oman - east of 60°E','Oman - offshore east of 60°E.',16.37,24.09,60.0,63.38,0); INSERT INTO "extent" VALUES('EPSG','4325','USA - Wisconsin - Burnett','United States (USA) - Wisconsin - Burnett county.',45.63,46.16,-92.89,-92.03,0); INSERT INTO "extent" VALUES('EPSG','4326','USA - Wisconsin - Douglas','United States (USA) - Wisconsin - Douglas county.',46.15,46.76,-92.3,-91.55,0); INSERT INTO "extent" VALUES('EPSG','4327','USA - Wisconsin - Florence','United States (USA) - Wisconsin - Florence county.',45.71,46.03,-88.69,-88.05,0); INSERT INTO "extent" VALUES('EPSG','4328','USA - Wisconsin - Forest','United States (USA) - Wisconsin - Forest county.',45.37,46.08,-89.05,-88.42,0); INSERT INTO "extent" VALUES('EPSG','4329','USA - Wisconsin - Iron','United States (USA) - Wisconsin - Iron county.',45.98,46.6,-90.56,-89.92,0); INSERT INTO "extent" VALUES('EPSG','4330','USA - Wisconsin - Oneida','United States (USA) - Wisconsin - Oneida county.',45.46,45.91,-90.05,-89.04,0); INSERT INTO "extent" VALUES('EPSG','4331','USA - Wisconsin - Barron','United States (USA) - Wisconsin - Barron county.',45.2,45.65,-92.16,-91.53,0); INSERT INTO "extent" VALUES('EPSG','4332','USA - Wisconsin - Price','United States (USA) - Wisconsin - Price county.',45.37,45.99,-90.68,-90.04,0); INSERT INTO "extent" VALUES('EPSG','4333','USA - Wisconsin - Sawyer','United States (USA) - Wisconsin - Sawyer county.',45.63,46.16,-91.56,-90.67,0); INSERT INTO "extent" VALUES('EPSG','4334','USA - Wisconsin - Vilas','United States (USA) - Wisconsin - Vilas county.',45.85,46.3,-90.05,-88.93,0); INSERT INTO "extent" VALUES('EPSG','4335','USA - Wisconsin - Washburn','United States (USA) - Wisconsin - Washburn county.',45.63,46.16,-92.06,-91.54,0); INSERT INTO "extent" VALUES('EPSG','4336','USA - Wisconsin - Brown','United States (USA) - Wisconsin - Brown county.',44.24,44.68,-88.26,-87.76,0); INSERT INTO "extent" VALUES('EPSG','4337','USA - Wisconsin - Buffalo','United States (USA) - Wisconsin - Buffalo county.',44.02,44.6,-92.09,-91.52,0); INSERT INTO "extent" VALUES('EPSG','4338','USA - Wisconsin - Chippewa','United States (USA) - Wisconsin - Chippewa county.',44.85,45.3,-91.67,-90.92,0); INSERT INTO "extent" VALUES('EPSG','4339','USA - Wisconsin - Clark','United States (USA) - Wisconsin - Clark county.',44.42,45.04,-90.93,-90.31,0); INSERT INTO "extent" VALUES('EPSG','4340','USA - Wisconsin - Door','United States (USA) - Wisconsin - Door county.',44.67,45.43,-87.74,-86.8,0); INSERT INTO "extent" VALUES('EPSG','4341','USA - Wisconsin - Dunn','United States (USA) - Wisconsin - Dunn county.',44.68,45.21,-92.16,-91.64,0); INSERT INTO "extent" VALUES('EPSG','4342','USA - Wisconsin - Eau Claire','United States (USA) - Wisconsin - Eau Claire county.',44.59,44.86,-91.66,-90.92,0); INSERT INTO "extent" VALUES('EPSG','4343','USA - Wisconsin - Jackson','United States (USA) - Wisconsin - Jackson county.',44.07,44.6,-91.17,-90.31,0); INSERT INTO "extent" VALUES('EPSG','4344','USA - Wisconsin - Langlade','United States (USA) - Wisconsin - Langlade county.',45.02,45.48,-89.43,-88.63,0); INSERT INTO "extent" VALUES('EPSG','4345','USA - Wisconsin - Lincoln','United States (USA) - Wisconsin - Lincoln county.',45.11,45.56,-90.05,-89.42,0); INSERT INTO "extent" VALUES('EPSG','4346','USA - Wisconsin - Marathon','United States (USA) - Wisconsin - Marathon county.',44.68,45.13,-90.32,-89.22,0); INSERT INTO "extent" VALUES('EPSG','4347','USA - Wisconsin - Marinette','United States (USA) - Wisconsin - Marinette county.',44.96,45.8,-88.43,-87.48,0); INSERT INTO "extent" VALUES('EPSG','4348','USA - Wisconsin - Menominee','United States (USA) - Wisconsin - Menominee county.',44.85,45.12,-88.99,-88.48,0); INSERT INTO "extent" VALUES('EPSG','4349','USA - Wisconsin - Oconto','United States (USA) - Wisconsin - Oconto county.',44.67,45.38,-88.69,-87.76,0); INSERT INTO "extent" VALUES('EPSG','4350','USA - Wisconsin - Pepin and Pierce','United States (USA) - Wisconsin - counties of Pepin and Pierce.',44.4,44.87,-92.81,-91.65,0); INSERT INTO "extent" VALUES('EPSG','4351','USA - Wisconsin - Polk','United States (USA) - Wisconsin - Polk county.',45.2,45.73,-92.89,-92.15,0); INSERT INTO "extent" VALUES('EPSG','4352','USA - Wisconsin - Portage','United States (USA) - Wisconsin - Portage county.',44.24,44.69,-89.85,-89.22,0); INSERT INTO "extent" VALUES('EPSG','4353','USA - Wisconsin - Rusk','United States (USA) - Wisconsin - Rusk county.',45.29,45.64,-91.55,-90.67,0); INSERT INTO "extent" VALUES('EPSG','4354','USA - Wisconsin - Shawano','United States (USA) - Wisconsin - Shawano county.',44.58,45.03,-89.23,-88.24,0); INSERT INTO "extent" VALUES('EPSG','4355','USA - Wisconsin - St. Croix','United States (USA) - Wisconsin - St. Croix county.',44.85,45.22,-92.81,-92.13,0); INSERT INTO "extent" VALUES('EPSG','4356','USA - Wisconsin - Taylor','United States (USA) - Wisconsin - Taylor county.',45.03,45.39,-90.93,-90.04,0); INSERT INTO "extent" VALUES('EPSG','4357','USA - Wisconsin - Trempealeau','United States (USA) - Wisconsin - Trempealeau county.',43.98,44.6,-91.62,-91.15,0); INSERT INTO "extent" VALUES('EPSG','4358','USA - Wisconsin - Waupaca','United States (USA) - Wisconsin - Waupaca county.',44.24,44.69,-89.23,-88.6,0); INSERT INTO "extent" VALUES('EPSG','4359','USA - Wisconsin - Wood','United States (USA) - Wisconsin - Wood county.',44.24,44.69,-90.32,-89.72,0); INSERT INTO "extent" VALUES('EPSG','4360','USA - Wisconsin - Adams and Juneau','United States (USA) - Wisconsin - counties of Adams and Juneau.',43.64,44.25,-90.32,-89.59,0); INSERT INTO "extent" VALUES('EPSG','4361','USA - Wisconsin - Calumet, Fond du Lac, Outagamie and Winnebago','United States (USA) - Wisconsin - counties of Calumet, Fond du Lac, Outagamie and Winnebago.',43.54,44.6,-88.89,-88.04,0); INSERT INTO "extent" VALUES('EPSG','4362','USA - Wisconsin - Columbia','United States (USA) - Wisconsin - Columbia county.',43.28,43.65,-89.79,-89.0,0); INSERT INTO "extent" VALUES('EPSG','4363','USA - Wisconsin - Crawford','United States (USA) - Wisconsin - Crawford county.',42.98,43.43,-91.22,-90.66,0); INSERT INTO "extent" VALUES('EPSG','4364','USA - Wisconsin - Dane','United States (USA) - Wisconsin - Dane county.',42.84,43.3,-89.84,-89.0,0); INSERT INTO "extent" VALUES('EPSG','4365','USA - Wisconsin - Dodge and Jefferson','United States (USA) - Wisconsin - counties of Dodge and Jefferson.',42.84,43.64,-89.02,-88.4,0); INSERT INTO "extent" VALUES('EPSG','4366','USA - Wisconsin - Grant','United States (USA) - Wisconsin - Grant county.',42.5,43.22,-91.16,-90.42,0); INSERT INTO "extent" VALUES('EPSG','4367','USA - Wisconsin - Green and Lafayette','United States (USA) - Wisconsin - counties of Green and Lafayette.',42.5,42.86,-90.43,-89.36,0); INSERT INTO "extent" VALUES('EPSG','4368','USA - Wisconsin - Green Lake and Marquette','United States (USA) - Wisconsin - counties of Green Lake and Marquette.',43.63,43.99,-89.6,-88.88,0); INSERT INTO "extent" VALUES('EPSG','4369','USA - Wisconsin - Iowa','United States (USA) - Wisconsin - Iowa county.',42.81,43.21,-90.43,-89.83,0); INSERT INTO "extent" VALUES('EPSG','4370','USA - Wisconsin - Kenosha, Milwaukee, Ozaukee and Racine','United States (USA) - Wisconsin - counties of Kenosha, Milwaukee, Ozaukee and Racine.',42.49,43.55,-88.31,-87.75,0); INSERT INTO "extent" VALUES('EPSG','4371','USA - Wisconsin - Kewaunee, Manitowoc and Sheboygan','United States (USA) - Wisconsin - counties of Kewaunee, Manitowoc and Sheboygan.',43.54,44.68,-88.17,-87.37,0); INSERT INTO "extent" VALUES('EPSG','4372','USA - Wisconsin - La Crosse','United States (USA) - Wisconsin - La Crosse county.',43.72,44.1,-91.43,-90.91,0); INSERT INTO "extent" VALUES('EPSG','4373','USA - Wisconsin - Monroe','United States (USA) - Wisconsin - Monroe county.',43.72,44.17,-90.98,-90.31,0); INSERT INTO "extent" VALUES('EPSG','4374','USA - Wisconsin - Richland','United States (USA) - Wisconsin - Richland county.',43.16,43.56,-90.68,-90.19,0); INSERT INTO "extent" VALUES('EPSG','4375','USA - Wisconsin - Rock','United States (USA) - Wisconsin - Rock county.',42.49,42.85,-89.37,-88.77,0); INSERT INTO "extent" VALUES('EPSG','4376','USA - Wisconsin - Sauk','United States (USA) - Wisconsin - Sauk county.',43.14,43.65,-90.32,-89.59,0); INSERT INTO "extent" VALUES('EPSG','4377','USA - Wisconsin - Vernon','United States (USA) - Wisconsin - Vernon county.',43.42,43.74,-91.28,-90.31,0); INSERT INTO "extent" VALUES('EPSG','4378','USA - Wisconsin - Walworth','United States (USA) - Wisconsin - Walworth county.',42.49,42.85,-88.78,-88.3,0); INSERT INTO "extent" VALUES('EPSG','4379','USA - Wisconsin - Washington','United States (USA) - Wisconsin - Washington county.',43.19,43.55,-88.42,-88.03,0); INSERT INTO "extent" VALUES('EPSG','4380','USA - Wisconsin - Waukesha','United States (USA) - Wisconsin - Waukesha county.',42.84,43.2,-88.55,-88.06,0); INSERT INTO "extent" VALUES('EPSG','4381','USA - Wisconsin - Waushara','United States (USA) - Wisconsin - Waushara county.',43.98,44.25,-89.6,-88.88,0); INSERT INTO "extent" VALUES('EPSG','4382','Algeria - Ain Tsila','Algeria - Ain Tsila field.',27.4,28.1,7.66,8.27,0); INSERT INTO "extent" VALUES('EPSG','4383','Papua New Guinea - onshore south of 5°S and west of 144°E','Papua New Guinea - onshore south of 5°S and west of 144°E.',-9.35,-5.0,140.85,144.01,0); INSERT INTO "extent" VALUES('EPSG','4384','Papua New Guinea - 0°N to 12°S and 140°E to 158°E','Papua New Guinea - between 0°N and 12°S and 140°E and 158°E - onshore and offshore.',-12.0,0.01,140.0,158.01,0); INSERT INTO "extent" VALUES('EPSG','4385','Kyrgyzstan - west of 70°01''E','Kyrgyzstan - west of 70°01''E.',39.51,40.22,69.24,70.02,0); INSERT INTO "extent" VALUES('EPSG','4386','Kyrgyzstan - 70°01''E to 73°01''E','Kyrgyzstan - between 70°01''E and 73°01''E.',39.19,42.83,70.01,73.02,0); INSERT INTO "extent" VALUES('EPSG','4387','Kyrgyzstan - 73°01''E to 76°01''E','Kyrgyzstan - between 73°01''E and 76°01''E.',39.35,43.22,73.01,76.02,0); INSERT INTO "extent" VALUES('EPSG','4388','Kyrgyzstan - 76°01''E to 79°01''E','Kyrgyzstan - between 76°01''E and 79°01''E.',40.35,43.0,76.01,79.02,0); INSERT INTO "extent" VALUES('EPSG','4389','Kyrgyzstan - east of 79°01''E','Kyrgyzstan - east of 79°01''E.',41.66,42.8,79.01,80.29,0); INSERT INTO "extent" VALUES('EPSG','4390','UK - Britain and UKCS 49°45''N to 61°N, 9°W to 2°E','United Kingdom (UK) - offshore to boundary of UKCS within 49°45''N to 61°N and 9°W to 2°E; onshore Great Britain (England, Wales and Scotland). Isle of Man onshore.',49.75,61.01,-9.01,2.01,0); INSERT INTO "extent" VALUES('EPSG','4391','UK - offshore 49°45''N to 61°N, 9°W to 2°E','United Kingdom (UK) - offshore between 2km from shore and boundary of UKCS within 49°45''N to 61°N and 9°W to 2°E.',49.75,61.01,-9.01,2.01,0); INSERT INTO "extent" VALUES('EPSG','4392','India - northeast','India - Arunachal Pradesh, Assam, Manipur, Meghalaya, Mizoram, Nagaland and Tripura.',21.94,29.47,89.69,97.42,0); INSERT INTO "extent" VALUES('EPSG','4393','To be specified','Description of the extent of the CRS.',-90.0,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','4394','India - Andhra Pradesh and Telangana','India - Andhra Pradesh; Telangana; Yanam area of Pudacherry territory.',12.61,19.92,76.75,84.81,0); INSERT INTO "extent" VALUES('EPSG','4395','India - Arunachal Pradesh','India - Arunachal Pradesh.',26.65,29.47,91.55,97.42,0); INSERT INTO "extent" VALUES('EPSG','4396','India - Assam','India - Assam.',24.13,27.98,89.69,96.03,0); INSERT INTO "extent" VALUES('EPSG','4397','India - Bihar','India - Bihar.',24.28,27.86,83.31,88.3,0); INSERT INTO "extent" VALUES('EPSG','4398','India - Chhattisgarh','India - Chhattisgarh.',17.78,24.11,80.23,84.39,0); INSERT INTO "extent" VALUES('EPSG','4399','India - Goa','India - Goa.',14.86,15.8,73.61,74.35,0); INSERT INTO "extent" VALUES('EPSG','4400','India - Gujarat','India - Gujarat and union territories of Daman, Diu, Dadra and Nagar Haveli.',20.05,24.71,68.13,74.48,0); INSERT INTO "extent" VALUES('EPSG','4401','India - Haryana','India - Haryana including Chandigarh.',27.65,30.94,74.46,77.6,0); INSERT INTO "extent" VALUES('EPSG','4402','India - Himachal Pradesh','India - Himachal Pradesh.',30.38,33.26,75.57,79.0,0); INSERT INTO "extent" VALUES('EPSG','4403','India - Jammu and Kashmir','India - Jammu and Kashmir.',32.27,35.51,73.76,79.57,0); INSERT INTO "extent" VALUES('EPSG','4404','India - Jharkhand','India - Jharkhand.',21.96,25.35,83.32,87.98,0); INSERT INTO "extent" VALUES('EPSG','4405','India - Karnataka','India - Karnataka.',11.57,18.46,74.0,78.58,0); INSERT INTO "extent" VALUES('EPSG','4406','India - Kerala','India - Kerala; Mayyazhi (Mahe) area of Pudacherry territory.',8.25,12.8,74.81,77.4,0); INSERT INTO "extent" VALUES('EPSG','4407','India - Madhya Pradesh','India - Madhya Pradesh.',21.07,26.88,74.03,82.81,0); INSERT INTO "extent" VALUES('EPSG','4408','India - Maharashtra','India - Maharashtra.',15.6,22.04,72.6,80.9,0); INSERT INTO "extent" VALUES('EPSG','4409','India - Manipur','India - Manipur.',23.84,25.7,92.97,94.76,0); INSERT INTO "extent" VALUES('EPSG','4410','India - Meghalaya','India - Meghalaya.',25.03,26.12,89.82,92.81,0); INSERT INTO "extent" VALUES('EPSG','4411','India - Mizoram','India - Mizoram.',21.94,24.53,92.25,93.45,0); INSERT INTO "extent" VALUES('EPSG','4412','India - Nagaland','India - Nagaland.',25.2,27.05,93.33,95.25,0); INSERT INTO "extent" VALUES('EPSG','4413','India - Odisha','India - Odisha (Orissa).',17.8,22.57,81.38,87.5,0); INSERT INTO "extent" VALUES('EPSG','4414','India - Punjab','India - Punjab including Chandigarh.',29.54,32.58,73.87,76.94,0); INSERT INTO "extent" VALUES('EPSG','4415','India - Rajasthan','India - Rajasthan.',23.06,30.2,69.48,78.27,0); INSERT INTO "extent" VALUES('EPSG','4416','India - Sikkim','India - Sikkim.',27.08,28.14,88.01,88.92,0); INSERT INTO "extent" VALUES('EPSG','4417','India - Tamil Nadu','India - Tamil Nadu; Pudacherry and Karaikal areas of Pudacherry territory.',8.02,13.59,76.22,80.4,0); INSERT INTO "extent" VALUES('EPSG','4418','India - Tripura','India - Tripura.',22.94,24.54,91.15,92.34,0); INSERT INTO "extent" VALUES('EPSG','4419','India - Uttar Pradesh','India - Uttar Pradesh.',23.87,30.42,77.08,84.64,0); INSERT INTO "extent" VALUES('EPSG','4420','India - Uttarakhand','India - Uttarakhand (Uttaranchal).',28.71,31.48,77.56,81.02,0); INSERT INTO "extent" VALUES('EPSG','4421','India - West Bengal','India - West Bengal.',21.49,27.23,85.82,89.88,0); INSERT INTO "extent" VALUES('EPSG','4422','India - Delhi','India - Delhi national capital territory.',28.4,28.89,76.83,77.34,0); INSERT INTO "extent" VALUES('EPSG','4423','India - Andaman and Nicobar Islands','India - Andaman and Nicobar Islands.',6.7,13.73,92.15,94.33,0); INSERT INTO "extent" VALUES('EPSG','4424','India - Lakshadweep','India - Lakshadweep (Laccadive, Minicoy, and Aminidivi Islands).',8.21,11.76,72.04,73.76,0); INSERT INTO "extent" VALUES('EPSG','4425','Papua New Guinea - onshore - Central province and Gulf province east of 144°E','Papua New Guinea - onshore - Gulf province east of 144°24''E, Central province and National Capital District.',-10.42,-6.67,144.4,149.67,0); INSERT INTO "extent" VALUES('EPSG','4426','Bulgaria - east of 30°E','Bulgaria - offshore east of 30°E.',42.56,43.67,30.0,31.35,0); INSERT INTO "extent" VALUES('EPSG','4427','Bulgaria - 24°E to 30°E','Bulgaria - onshore east of 24°E, offshore west of 30°E.',41.24,44.15,24.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','4428','Bulgaria - west of 24°E','Bulgaria - west of 24°E.',41.32,44.23,22.36,24.0,0); INSERT INTO "extent" VALUES('EPSG','4429','Ukraine - 25°E to 28°E','Ukraine - between 25°E and 28°E.',47.72,51.96,25.0,28.01,0); INSERT INTO "extent" VALUES('EPSG','4430','Ukraine - 28°E to 31°E onshore','Ukraine - between 28°E and 31°E, onshore.',45.18,52.09,28.0,31.01,0); INSERT INTO "extent" VALUES('EPSG','4431','Ukraine - 31°E to 34°E onshore','Ukraine - between 31°E and 34°E, onshore.',44.32,52.38,31.0,34.01,0); INSERT INTO "extent" VALUES('EPSG','4432','Ukraine - 34°E to 37°E onshore','Ukraine - between 34°E and 37°E, onshore.',44.33,52.25,34.0,37.01,0); INSERT INTO "extent" VALUES('EPSG','4433','Ukraine - 37°E to 40°E onshore','Ukraine - between 37°E and 40°E, onshore.',46.8,50.44,37.0,40.01,0); INSERT INTO "extent" VALUES('EPSG','4434','Ukraine - east of 40°E','Ukraine - east of 40°E.',48.8,49.62,40.0,40.18,0); INSERT INTO "extent" VALUES('EPSG','4435','Ukraine - west of 25°E','Ukraine - west of 25°E.',47.71,51.92,22.15,25.01,0); INSERT INTO "extent" VALUES('EPSG','4436','Australia - Western Australia - Kalgoorlie','Australia - Western Australia - Kalgoorlie area.',-32.25,-28.75,121.0,121.84,0); INSERT INTO "extent" VALUES('EPSG','4437','Australia - Western Australia - Busselton','Australia - Western Australia - Busselton area onshore below 250m AHD.',-33.75,-33.4,115.18,115.87,0); INSERT INTO "extent" VALUES('EPSG','4438','Australia - Western Australia - Barrow','Australia - Western Australia - Barrow Island and Onslow area onshore.',-22.2,-20.21,114.9,115.59,0); INSERT INTO "extent" VALUES('EPSG','4439','Australia - Western Australia - Albany','Australia - Western Australia - Albany area onshore below 190m AHD.',-35.21,-34.75,117.55,118.22,0); INSERT INTO "extent" VALUES('EPSG','4440','Australia - Western Australia - Jurien Bay','Australia - Western Australia - Jurien Bay area onshore below 200m AHD.',-30.74,-29.08,114.83,115.34,0); INSERT INTO "extent" VALUES('EPSG','4441','Australia - Western Australia - Broome','Australia - Western Australia - Broome area onshore below 130m AHD.',-18.09,-16.75,122.08,122.62,0); INSERT INTO "extent" VALUES('EPSG','4442','Australia - Western Australia - Carnarvon','Australia - Western Australia - Carnarvon area onshore.',-25.5,-23.0,113.33,114.0,0); INSERT INTO "extent" VALUES('EPSG','4443','Australia - Western Australia - Collie','Australia - Western Australia - Collie area between 50m and 310m AHD.',-34.67,-33.25,115.73,116.4,0); INSERT INTO "extent" VALUES('EPSG','4444','Australia - Western Australia - Kalbarri','Australia - Western Australia - Kalbarri area onshore.',-28.5,-27.16,113.9,114.75,0); INSERT INTO "extent" VALUES('EPSG','4445','Australia - Western Australia - Esperance','Australia - Western Australia - Esperance area onshore.',-34.5,-33.33,121.56,122.2,0); INSERT INTO "extent" VALUES('EPSG','4446','Albania - north of 41°18''N and east of 19°09''E','Albania - north of 41°18''N and east of 19°09''E, onshore and offshore.',41.3,42.67,19.14,20.63,0); INSERT INTO "extent" VALUES('EPSG','4447','DR Congo (Zaire) - offshore','The Democratic Republic of the Congo (Zaire) - offshore.',-6.04,-5.79,11.79,12.37,0); INSERT INTO "extent" VALUES('EPSG','4448','Australia - Western Australia - Exmouth','Australia - Western Australia - Exmouth area onshore below 160m AHD.',-22.42,-21.75,113.75,114.25,0); INSERT INTO "extent" VALUES('EPSG','4449','Australia - Western Australia - Geraldton','Australia - Western Australia - Geraldton area onshore below 195m AHD.',-29.1,-28.48,114.51,115.0,0); INSERT INTO "extent" VALUES('EPSG','4450','USA - Arizona - Pima county west','United States (USA) - Arizona - Pima county - west of the township line between ranges R2W and R3W, Gila and Salt River Meridian (west of approximately 112°31''W).',31.8,32.51,-113.33,-112.51,0); INSERT INTO "extent" VALUES('EPSG','4451','Australia - Western Australia - Karratha','Australia - Western Australia - Karratha area onshore.',-20.92,-20.25,116.58,117.25,0); INSERT INTO "extent" VALUES('EPSG','4452','Australia - Western Australia - Kununurra','Australia - Western Australia - Kununurra area onshore below 200m AHD.',-16.75,-14.75,128.5,129.0,0); INSERT INTO "extent" VALUES('EPSG','4453','Australia - Western Australia - Lancelin','Australia - Western Australia - Lancelin area onshore below 200m AHD.',-31.49,-30.71,115.15,115.62,0); INSERT INTO "extent" VALUES('EPSG','4454','Greenland - 58°N to 85°N','Greenland - onshore and offshore between 58°N and 85°N and west of 7°W.',58.0,85.01,-75.0,-6.99,0); INSERT INTO "extent" VALUES('EPSG','4455','Europe - Upper Austria, Salzburg and Bohemia','Austria - Upper Austria and Salzburg provinces. Czechia - Bohemia.',46.93,51.06,12.07,16.83,0); INSERT INTO "extent" VALUES('EPSG','4456','Europe - Lower Austria and Moravia','Austria - Lower Austria. Czechia - Moravia and Czech Silesia.',47.42,50.45,14.41,18.86,0); INSERT INTO "extent" VALUES('EPSG','4457','Australia - Western Australia - Margaret River','Australia - Western Australia - Margaret River area onshore below 200m AHD.',-34.42,-33.51,114.96,115.24,0); INSERT INTO "extent" VALUES('EPSG','4458','USA - Oregon - Riley-Lakeview','United States (USA) - Oregon - Riley-Lakeview area.',41.88,43.45,-120.97,-119.15,0); INSERT INTO "extent" VALUES('EPSG','4459','USA - Oregon - Burns-Harper','United States (USA) - Oregon - Burns-Harper area.',43.49,44.19,-118.61,-117.49,0); INSERT INTO "extent" VALUES('EPSG','4460','USA - Arizona - Pima county central','United States (USA) - Arizona - Pima county - between the township line between ranges R2W and R3W and the township line between ranges R7E and R8E, Gila and Salt River Meridian (between approximately 112°31''W and 111°34''W).',31.5,32.51,-112.52,-111.56,0); INSERT INTO "extent" VALUES('EPSG','4461','Greenland - 59°N to 84°N','Greenland - onshore and offshore between 59°N and 84°N and west of 10°W.',59.0,84.01,-75.0,-10.0,0); INSERT INTO "extent" VALUES('EPSG','4462','Australia - Western Australia - Perth','Australia - Western Australia - Perth area onshore below 165m AHD.',-33.42,-31.33,115.44,116.09,0); INSERT INTO "extent" VALUES('EPSG','4463','USA - Oregon - Siskiyou Pass','United States (USA) - Oregon - Siskiyou Pass area.',41.95,42.46,-122.71,-121.96,0); INSERT INTO "extent" VALUES('EPSG','4464','USA - onshore - AZ MI MT ND OR SC','United States (USA) - onshore - Arizona; Michigan; Montana; North Dakota; Oregon; South Carolina.',31.33,49.01,-124.6,-78.52,0); INSERT INTO "extent" VALUES('EPSG','4465','USA - Oregon - Canyon City-Burns','United States (USA) - Oregon - Canyon City-Burns area.',43.52,44.36,-119.22,-118.52,0); INSERT INTO "extent" VALUES('EPSG','4466','Australia - Western Australia - Port Hedland','Australia - Western Australia - Port Hedland area onshore.',-20.79,-20.1,118.25,118.97,0); INSERT INTO "extent" VALUES('EPSG','4467','Trinidad and Tobago - offshore west of 60°W','Trinidad and Tobago - offshore west of 60°W.',9.83,12.34,-62.09,-59.99,0); INSERT INTO "extent" VALUES('EPSG','4468','Trinidad and Tobago - offshore east of 60°W','Trinidad and Tobago - offshore east of 60°W.',9.95,12.19,-60.0,-57.28,0); INSERT INTO "extent" VALUES('EPSG','4469','Angola - onshore','Angola - onshore including Cabinda.',-18.02,-4.38,11.67,24.09,0); INSERT INTO "extent" VALUES('EPSG','4470','USA - Oregon - Ukiah-Fox','United States (USA) - Oregon - Ukiah-Fox area.',44.52,45.21,-119.35,-118.64,0); INSERT INTO "extent" VALUES('EPSG','4471','USA - Oregon - Coast Range North','United States (USA) - Oregon - Coast Range North area.',45.4,45.98,-123.81,-123.01,0); INSERT INTO "extent" VALUES('EPSG','4472','USA - Arizona - Pima county east','United States (USA) - Arizona - Pima county - east of the township line between ranges R7E and R8E, Gila and Salt River Meridian (east of approximately 111°34''W).',31.43,32.52,-111.57,-110.44,0); INSERT INTO "extent" VALUES('EPSG','4473','USA - Arizona - Pima county Mt. Lemmon','United States (USA) - Arizona - Pima county - Catalina Highway corridor between Mt. Lemmon and Willow Canyon.',32.33,32.49,-110.87,-110.61,0); INSERT INTO "extent" VALUES('EPSG','4474','USA - Oregon - Dayville-Prairie City','United States (USA) - Oregon - Dayville-Prairie City area.',44.24,44.94,-119.89,-118.61,0); INSERT INTO "extent" VALUES('EPSG','4475','USA - Oregon - Denio-Burns','United States (USA) - Oregon - Denio-Burns area.',41.88,43.54,-119.41,-117.67,0); INSERT INTO "extent" VALUES('EPSG','4476','USA - Oregon - Halfway','United States (USA) - Oregon - Halfway area.',44.61,45.28,-117.61,-116.63,0); INSERT INTO "extent" VALUES('EPSG','4477','USA - Oregon - Medford-Diamond Lake','United States (USA) - Oregon - Medford-Diamond Lake area.',42.53,43.34,-122.73,-121.71,0); INSERT INTO "extent" VALUES('EPSG','4478','USA - Oregon - Mitchell','United States (USA) - Oregon - Mitchell area.',44.38,44.78,-120.56,-119.82,0); INSERT INTO "extent" VALUES('EPSG','4479','USA - Oregon - North Central','United States (USA) - Oregon - North Central area.',44.89,45.95,-121.79,-119.03,0); INSERT INTO "extent" VALUES('EPSG','4480','USA - Oregon - Wallowa','United States (USA) - Oregon - Wallowa area.',45.27,46.05,-118.16,-116.42,0); INSERT INTO "extent" VALUES('EPSG','4481','USA - Oregon - Ochoco Summit','United States (USA) - Oregon - Ochoco Summit area.',44.21,44.61,-121.01,-120.31,0); INSERT INTO "extent" VALUES('EPSG','4482','USA - Oregon - Owyhee','United States (USA) - Oregon - Owyhee area.',41.88,43.54,-118.14,-116.85,0); INSERT INTO "extent" VALUES('EPSG','4483','USA - Oregon - Pilot Rock-Ukiah','United States (USA) - Oregon - Pilot Rock-Ukiah area.',44.99,46.04,-119.65,-118.11,0); INSERT INTO "extent" VALUES('EPSG','4484','USA - Oregon - Prairie City-Brogan','United States (USA) - Oregon - Prairie City-Brogan area.',44.16,45.02,-118.77,-117.48,0); INSERT INTO "extent" VALUES('EPSG','4485','USA - Nevada - Las Vegas','United States (USA) - Nevada - Las Vegas area below approximately 3000 feet.',35.88,36.43,-115.5,-114.71,0); INSERT INTO "extent" VALUES('EPSG','4486','USA - Oregon - Warner Highway','United States (USA) - Oregon - Warner Highway area.',41.95,42.43,-120.42,-119.3,0); INSERT INTO "extent" VALUES('EPSG','4487','USA - Nevada - Las Vegas high elevation','United States (USA) - Nevada - Las Vegas area above approximately 2850 feet.',35.88,36.43,-115.5,-114.71,0); INSERT INTO "extent" VALUES('EPSG','4488','USA - Oregon - Willamette Pass','United States (USA) - Oregon - Willamette Pass area.',42.99,44.18,-122.26,-121.48,0); INSERT INTO "extent" VALUES('EPSG','4489','Antarctica - Adelie Land coastal area west of 138°E','Antarctica - Adelie Land - coastal area between 136°E and 138°E.',-66.73,-65.61,136.0,138.01,0); INSERT INTO "extent" VALUES('EPSG','4490','Germany - Hamburg','Germany - Hamburg, including Neuwerk, Nigehörn, Scharhörn and surrounding maritime area.',53.36,53.99,8.33,10.41,0); INSERT INTO "extent" VALUES('EPSG','4491','Australia - Queensland - Weipa','Australia - Queensland - Weipa area between 141°30''E and 142°30''E.',-13.5,-11.49,141.5,142.51,0); INSERT INTO "extent" VALUES('EPSG','4492','Antarctica - Adelie Land coastal area east of 138°E','Antarctica - Adelie Land - coastal area between 138°E and 142°E.',-67.13,-66.1,138.0,142.0,0); INSERT INTO "extent" VALUES('EPSG','4493','Australia Christmas and Cocos - onshore','Australia - Australian Capital Territory, New South Wales, Northern Territory, Queensland, South Australia, Tasmania, Western Australia and Victoria - onshore. Christmas Island - onshore. Cocos and Keeling Islands - onshore.',-43.7,-9.86,96.76,153.69,0); INSERT INTO "extent" VALUES('EPSG','4494','USA - Kansas - Hays','United States (USA) - Kansas - counties of Ellis; Graham; Norton; Phillips; Rooks; Trego.',38.69,40.01,-100.19,-99.03,0); INSERT INTO "extent" VALUES('EPSG','4495','USA - Kansas - Goodland','United States (USA) - Kansas - counties of Cheyenne; Sherman; Wallace.',38.69,40.01,-102.06,-101.38,0); INSERT INTO "extent" VALUES('EPSG','4496','USA - Kansas - Colby','United States (USA) - Kansas - counties of Logan; Rawlins; Thomas.',38.69,40.01,-101.49,-100.71,0); INSERT INTO "extent" VALUES('EPSG','4497','USA - Kansas - Oberlin','United States (USA) - Kansas - counties of Decatur; Gove; Sheridan.',38.69,40.01,-100.82,-100.14,0); INSERT INTO "extent" VALUES('EPSG','4498','USA - Kansas - Great Bend','United States (USA) - Kansas - counties of Barton; Osborne; Russell; Smith.',38.26,40.01,-99.07,-98.47,0); INSERT INTO "extent" VALUES('EPSG','4499','USA - Kansas - Beloit','United States (USA) - Kansas - counties of Ellsworth; Jewell; Lincoln; Mitchell; Rice.',38.15,40.01,-98.51,-97.92,0); INSERT INTO "extent" VALUES('EPSG','4500','USA - Kansas - Salina','United States (USA) - Kansas - counties of Clay; Cloud; Dickinson; Marion; McPherson; Ottawa; Republic; Saline; Washington.',38.08,40.01,-97.94,-96.8,0); INSERT INTO "extent" VALUES('EPSG','4501','USA - Kansas - Manhattan','United States (USA) - Kansas - counties of Geary; Pottawatomie; Riley; Wabaunsee.',38.73,39.57,-96.97,-95.94,0); INSERT INTO "extent" VALUES('EPSG','4502','USA - Kansas - Emporia','United States (USA) - Kansas - counties of Chase; Lyon; Morris.',38.08,38.88,-96.94,-95.94,0); INSERT INTO "extent" VALUES('EPSG','4503','USA - Kansas - Atchison','United States (USA) - Kansas - counties of Atchison; Brown; Doniphan; Jackson; Marshall; Nemaha.',39.21,40.01,-96.81,-94.85,0); INSERT INTO "extent" VALUES('EPSG','4504','USA - Kansas - Kansas City','United States (USA) - Kansas - counties of Douglas; Jefferson; Johnson; Leavenworth; Shawnee; Wyandotte.',38.73,39.43,-96.04,-94.58,0); INSERT INTO "extent" VALUES('EPSG','4505','USA - Kansas - Ulysses','United States (USA) - Kansas - counties of Grant; Greeley; Hamilton; Kearny; Morton; Stanton; Stevens; Wichita.',36.99,38.71,-102.05,-101.06,0); INSERT INTO "extent" VALUES('EPSG','4506','USA - Kansas - Garden City','United States (USA) - Kansas - counties of Finney; Gray; Haskell; Lane; Meade; Scott; Seward.',36.99,38.71,-101.13,-100.08,0); INSERT INTO "extent" VALUES('EPSG','4507','USA - Kansas - Dodge City','United States (USA) - Kansas - counties of Clark; Ford; Hodgeman; Ness.',36.99,38.7,-100.25,-99.54,0); INSERT INTO "extent" VALUES('EPSG','4508','USA - Kansas - Larned','United States (USA) - Kansas - counties of Comanche; Edwards; Kiowa; Pawnee; Rush.',36.99,38.7,-99.59,-98.91,0); INSERT INTO "extent" VALUES('EPSG','4509','USA - Kansas - Pratt','United States (USA) - Kansas - counties of Barber; Pratt; Stafford.',36.99,38.27,-99.03,-98.34,0); INSERT INTO "extent" VALUES('EPSG','4510','USA - Kansas - Wichita','United States (USA) - Kansas - counties of Butler; Harvey; Kingman; Reno; Sedgwick.',37.38,38.18,-98.48,-96.52,0); INSERT INTO "extent" VALUES('EPSG','4511','USA - Kansas - Arkansas City','United States (USA) - Kansas - counties of Cowley; Harper; Sumner.',36.99,37.48,-98.35,-96.52,0); INSERT INTO "extent" VALUES('EPSG','4512','USA - Kansas - Coffeyville','United States (USA) - Kansas - counties of Chautauqua; Coffey; Elk; Greenwood; Montgomery; Osage; Wilson; Woodson.',36.99,38.88,-96.53,-95.5,0); INSERT INTO "extent" VALUES('EPSG','4513','USA - Kansas - Pittsburg','United States (USA) - Kansas - counties of Allen; Anderson; Bourbon; Cherokee; Crawford; Franklin; Labette; Linn; Miami; Neosho.',36.99,38.74,-95.53,-94.6,0); INSERT INTO "extent" VALUES('EPSG','4514','Pacific - Guam and NMI west of 144°E','Guam and Northern Mariana Islands; offshore west of 144°E.',10.95,23.9,141.19,144.01,0); INSERT INTO "extent" VALUES('EPSG','4515','USA - FBN','American Samoa - Tutuila, Aunu''u, Ofu, Olesega, Ta''u and Rose islands - onshore. Guam - onshore. Northern Mariana Islands - onshore. Puerto Rico - onshore. United States (USA) - CONUS - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming - onshore plus Gulf of Mexico offshore continental shelf (GoM OCS). US Virgin Islands - onshore.',-14.59,49.38,144.58,-64.51,0); INSERT INTO "extent" VALUES('EPSG','4516','USA - CONUS and GoM','United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico offshore continental shelf (GoM OCS).',23.82,49.38,-124.79,-66.91,0); INSERT INTO "extent" VALUES('EPSG','4517','Canada - NAD27','Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast west of 44°W and north of 40°N.',40.0,83.17,-141.01,-44.0,0); INSERT INTO "extent" VALUES('EPSG','4518','Pacific - Guam and NMI east of 144°E','Guam and Northern Mariana Islands; onshore and offshore east of 144°E.',11.05,23.9,144.0,149.55,0); INSERT INTO "extent" VALUES('EPSG','4519','Algeria - 32°N to 34°39''N','Algeria - 35.6 grads to 38.5 grads North (32°N to 34°39''N).',31.99,34.66,-2.95,9.09,0); INSERT INTO "extent" VALUES('EPSG','4520','World centred on 90°W','World centred on the Americas.',-90.0,90.0,90.01,89.99,0); INSERT INTO "extent" VALUES('EPSG','4521','Northern Mariana Islands - onshore','Northern Mariana Islands - onshore.',14.06,20.61,144.83,146.12,0); INSERT INTO "extent" VALUES('EPSG','4522','Finland - mainland south of 66°N','Finland - onshore mainland south of approximately 66°N.',59.75,66.73,20.95,31.59,0); INSERT INTO "extent" VALUES('EPSG','4523','World centred on 150°E','World centred on Asia-Pacific.',-90.0,90.0,-29.99,-30.01,0); INSERT INTO "extent" VALUES('EPSG','4524','Saudi Arabia - west of 36°E','Saudi Arabia - onshore and offshore - west of 36°E.',24.92,29.38,34.44,36.01,0); INSERT INTO "extent" VALUES('EPSG','4525','Pacific - Guam and NMI - onshore','Guam - onshore. Northern Mariana Islands - onshore.',13.18,20.61,144.58,146.12,0); INSERT INTO "extent" VALUES('EPSG','4526','Saudi Arabia - 36°E to 42°E','Saudi Arabia - onshore and offshore - between 36°E and 42°E.',16.29,32.16,36.0,42.0,0); INSERT INTO "extent" VALUES('EPSG','4527','Saudi Arabia - 42°E to 48°E','Saudi Arabia - onshore and offshore - between of 42°E and 48°E.',16.35,31.15,41.99,48.0,0); INSERT INTO "extent" VALUES('EPSG','4528','Saudi Arabia - 48°E to 54°E','Saudi Arabia - onshore and offshore - between 48°E and 54°E.',17.94,28.94,47.99,54.01,0); INSERT INTO "extent" VALUES('EPSG','4529','USA - California - San Francisco international airport','USA - California - San Francisco international airport.',37.58,37.66,-122.43,-122.33,0); INSERT INTO "extent" VALUES('EPSG','4530','Latin America - Central America and South America','Latin America - Central America and South America, onshore and offshore.',-59.87,32.72,-122.19,-25.28,0); INSERT INTO "extent" VALUES('EPSG','4531','Costa Rica - offshore Caribbean','Costa Rica - offshore - Caribbean sea.',9.6,11.77,-83.6,-81.43,0); INSERT INTO "extent" VALUES('EPSG','4532','Costa Rica - offshore Pacific','Costa Rica - offshore Pacific ocean and onshore Coco Island.',2.15,11.11,-90.45,-82.92,0); INSERT INTO "extent" VALUES('EPSG','4533','Canada - British Columbia - CRD','Canada - British Columbia - Vancouver Island - Capital Regional District.',48.25,49.06,-124.52,-123.0,0); INSERT INTO "extent" VALUES('EPSG','4534','Canada - British Columbia - north Vancouver Is','Canada - British Columbia - north Vancouver Island.',48.48,50.93,-128.5,-123.49,0); INSERT INTO "extent" VALUES('EPSG','4535','Canada - British Columbia - mainland','Canada - British Columbia - mainland and Graham Island.',48.99,60.01,-139.04,-114.08,0); INSERT INTO "extent" VALUES('EPSG','4536','Canada - Ontario - Toronto','Canada - Ontario - Toronto.',43.58,43.86,-79.64,-79.11,0); INSERT INTO "extent" VALUES('EPSG','4537','Canada - Ontario ex. Toronto','Canada - Ontario excluding Toronto.',41.67,56.9,-95.16,-74.35,0); INSERT INTO "extent" VALUES('EPSG','4538','Vietnam - Son La','Vietnam - Son La province.',20.57,22.04,103.21,105.03,0); INSERT INTO "extent" VALUES('EPSG','4539','Angola - east of 18°E','Angola - east of 18°E.',-18.02,-6.91,17.99,24.09,0); INSERT INTO "extent" VALUES('EPSG','4540','Africa - South Africa, Lesotho and Eswatini.','Eswatini (Swaziland); Lesotho; South Africa - onshore and offshore.',-50.32,-22.13,13.33,42.85,0); INSERT INTO "extent" VALUES('EPSG','4541','Vietnam - Dien Bien and Lai Chau','Vietnam - Dien Bien and Lai Chau provinces.',20.89,22.82,102.14,103.99,0); INSERT INTO "extent" VALUES('EPSG','4542','Kosovo','Kosovo.',41.85,43.25,19.97,21.8,0); INSERT INTO "extent" VALUES('EPSG','4543','Serbia','Serbia including Vojvodina.',42.23,46.19,18.81,23.01,0); INSERT INTO "extent" VALUES('EPSG','4544','North America - Canada, US (Conus+AK), PRVI','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. Puerto Rico. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Virgin Islands.',14.92,86.46,167.65,-47.74,0); INSERT INTO "extent" VALUES('EPSG','4545','Vietnam - Ca Mau and Kien Giang','Vietnam - Ca Mau and Kien Giang provinces.',8.33,10.55,103.4,105.54,0); INSERT INTO "extent" VALUES('EPSG','4546','Vietnam - An Giang, Lao Cai, Nghe An, Phu Tho, Yen Bai','Vietnam - An Giang, Lao Cai, Nghe An, Phu Tho and Yen Bai provinces.',10.18,22.85,103.53,105.86,0); INSERT INTO "extent" VALUES('EPSG','4547','Vietnam - 104°20''E to 106°10''E by province - Hanoi','Vietnam - Ha Noi city, Ha Nam, Ha Tay, Ninh Binh, Thanh Hoa and Vinh Phuc provinces; Can Tho city, Bac Lieu, Dong Thap and Hau Giang provinces.',8.97,21.58,104.37,106.19,0); INSERT INTO "extent" VALUES('EPSG','4548','Vietnam - 104°20''E to 106°40''E by province','Vietnam - Bac Ninh, Ha Giang, Ha Tinh, Hai Duong, Hung Yen, Nam Dinh, Soc Trang, Tay Ninh, Thai Binh, Tra Vinh and Vinh Long provinces.',9.19,23.4,104.33,106.69,0); INSERT INTO "extent" VALUES('EPSG','4549','Vietnam - 105°15''E to 107°50''E by province - HCMC','Vietnam - Hai Phong and Ho Chi Minh cities; Ben Tre, Binh Duong, Cao Bang, Long An and Tien Giang provinces.',9.75,23.12,105.26,107.8,0); INSERT INTO "extent" VALUES('EPSG','4550','Vietnam - Hoa Binh, Quang Binh and Tuyen Quang','Vietnam - Hoa Binh, Quang Binh and Tuyen Quang provinces.',16.92,22.7,104.83,107.03,0); INSERT INTO "extent" VALUES('EPSG','4551','Angola - west of 12°E','Angola - west of 12°E, onshore and offshore.',-17.28,-5.03,8.2,12.01,0); INSERT INTO "extent" VALUES('EPSG','4552','Vietnam - Binh Phuoc and Quang Tri','Vietnam - Binh Phuoc and Quang Tri provinces.',11.3,17.22,106.41,107.43,0); INSERT INTO "extent" VALUES('EPSG','4553','Vietnam - Bac Kan and Thai Nguyen','Vietnam - Bac Kan and Thai Nguyen provinces.',21.32,22.75,105.43,106.25,0); INSERT INTO "extent" VALUES('EPSG','4554','Vietnam - Bac Giang and Thua Thien-Hue','Vietnam - Bac Giang and Thua Thien-Hue provinces.',15.99,21.63,105.88,108.24,0); INSERT INTO "extent" VALUES('EPSG','4555','Angola - 12°E to 18°E','Angola - between 12°E and 18°E, onshore and offshore.',-17.44,-4.38,12.0,18.0,0); INSERT INTO "extent" VALUES('EPSG','4556','Vietnam - Lang Son','Vietnam - Lang Son province.',21.32,22.47,106.09,107.37,0); INSERT INTO "extent" VALUES('EPSG','4557','Vietnam - Kon Tum','Vietnam - Kon Tum province.',13.92,15.42,107.33,108.55,0); INSERT INTO "extent" VALUES('EPSG','4558','Vietnam - Quang Ngai','Vietnam - Quang Ngai province.',14.53,15.49,108.23,109.2,0); INSERT INTO "extent" VALUES('EPSG','4559','Vietnam - Binh Dinh, Khanh Hoa, Ninh Thuan','Vietnam - Binh Dinh, Khanh Hoa and Ninh Thuan provinces.',11.25,14.71,108.55,109.53,0); INSERT INTO "extent" VALUES('EPSG','4560','Vietnam - Binh Thuan, Dak Lak, Dak Nong, Gia Lai, Phu Yen','Vietnam - Binh Thuan, Dak Lak, Dak Nong, Gia Lai and Phu Yen provinces.',10.43,14.61,107.2,109.52,0); INSERT INTO "extent" VALUES('EPSG','4561','Argentina - Mendoza - Cuyo basin','Argentina - Mendoza province - Cuyo basin.',-36.37,-31.96,-69.4,-66.42,0); INSERT INTO "extent" VALUES('EPSG','4562','Argentina - Mendoza and Neuquen','Argentina - Mendoza province, Neuquen province, western La Pampa province and western Rio Negro province.',-43.41,-31.91,-72.14,-65.86,0); INSERT INTO "extent" VALUES('EPSG','4563','Argentina - 42.5°S to 50.3°S','Argentina - Chibut province south of approximately 42°30''S and Santa Cruz province north of approximately 50°20''S.',-50.34,-42.49,-73.59,-65.47,0); INSERT INTO "extent" VALUES('EPSG','4564','Argentina - 42.5°S to 50.3°S and west of 70.5°W','Argentina - Chibut province west of 70°30''W and south of approximately 44°55''S and Santa Cruz province west of 70°30''W and north of approximately 50°20''S.',-50.34,-44.94,-73.59,-70.5,0); INSERT INTO "extent" VALUES('EPSG','4565','Argentina - 42.5°S to 50.3°S and east of 67.5°W','Argentina - Chibut province east of 67°30''W and south of approximately 43°35''S and Santa Cruz province east of 67°30''W and north of approximately 49°23''S.',-49.05,-43.58,-67.5,-65.47,0); INSERT INTO "extent" VALUES('EPSG','4566','Europe - offshore North Sea - Germany and Netherlands east of 5°E','Germany - offshore North Sea. Netherlands - offshore east of 5E.',53.49,55.92,3.34,8.88,0); INSERT INTO "extent" VALUES('EPSG','4567','South Africa - mainland - onshore and offshore','South Africa - mainland - onshore and offshore.',-38.17,-22.13,13.33,36.54,0); INSERT INTO "extent" VALUES('EPSG','4568','South Africa - Prince Edward islands - onshore and offshore','South Africa - Marion Island and Prince Edward Island - onshore and offshore.',-50.32,-43.26,32.71,42.85,0); INSERT INTO "extent" VALUES('EPSG','4569','Argentina - south Santa Cruz','Argentina - Santa Cruz province south of approximately 50°20''S.',-52.43,-50.33,-73.28,-68.3,0); INSERT INTO "extent" VALUES('EPSG','4570','Argentina - south Santa Cruz west of 70.5°W','Argentina - Santa Cruz province south of approximately 50°20''S and west of 70°30''W.',-52.0,-50.33,-73.28,-70.5,0); INSERT INTO "extent" VALUES('EPSG','4571','Argentina - south Santa Cruz east of 70.5°W','Argentina - Santa Cruz province south of approximately 50°20''S and east of 70°30''W.',-52.43,-50.33,-70.5,-68.3,0); INSERT INTO "extent" VALUES('EPSG','4572','Argentina - 44°S to 47.5°S','Argentina - Chubut province south of approximately 44°S and Santa Cruz province north of approximately 47°30''S - Golfo San Jorge basin onshore and offshore.',-47.5,-43.99,-72.36,-63.24,0); INSERT INTO "extent" VALUES('EPSG','4573','Argentina - onshore','Argentina - onshore.',-55.11,-21.78,-73.59,-53.65,0); INSERT INTO "extent" VALUES('EPSG','4574','Brazil - west of 54°W and between 18°S and 27°30''S','Brazil - west of 54°W and between 18°S and 27°30''S.',-27.5,-17.99,-58.16,-54.0,0); INSERT INTO "extent" VALUES('EPSG','4575','Denmark - onshore Jutland, Funen, Zealand and Lolland','Denmark - onshore Jutland, Funen, Zealand and Lolland.',54.51,57.8,8.0,12.87,0); INSERT INTO "extent" VALUES('EPSG','4576','Brazil - 54°W to 48°W and 15°S to 27°30''S','Brazil - onshore between 54°W and 48°W and between 15°S and 27°30''S.',-27.5,-14.99,-54.0,-47.99,0); INSERT INTO "extent" VALUES('EPSG','4577','Argentina - 70.5°W to 67.5°W mainland onshore','Argentina - between 70°30''W and 67°30''W, onshore mainland.',-52.43,-24.08,-70.5,-67.49,0); INSERT INTO "extent" VALUES('EPSG','4578','Argentina - 67.5°W to 64.5°W mainland onshore','Argentina - between 67°30''W and 64°30''W, onshore mainland.',-49.05,-21.78,-67.5,-64.49,0); INSERT INTO "extent" VALUES('EPSG','4579','Argentina - 64.5°W to 61.5°W mainland onshore','Argentina - between 64°30''W and 61°30''W, onshore mainland.',-43.14,-21.99,-64.5,-61.49,0); INSERT INTO "extent" VALUES('EPSG','4580','Germany - Baden-Wurttemberg','Germany - Baden-Wurttemberg.',47.54,49.8,7.51,10.5,0); INSERT INTO "extent" VALUES('EPSG','4581','Africa - Morocco and Western Sahara - onshore','Africa - Morocco and Western Sahara - onshore.',20.71,35.97,-17.16,-1.01,0); INSERT INTO "extent" VALUES('EPSG','4582','UK - London to Birmingham and Crewe','United Kingdom (UK) - HS2 phases 1 and 2a railway corridor from London to Birmingham, Lichfield and Crewe.',51.45,53.3,-2.75,0.0,0); INSERT INTO "extent" VALUES('EPSG','4583','UK - Liverpool to Leeds','United Kingdom (UK) - on or related to the Trans-Pennine rail route from Liverpool via Manchester to Bradford and Leeds.',53.32,53.9,-3.14,-1.34,0); INSERT INTO "extent" VALUES('EPSG','4584','Germany - Saarland','Germany - Saarland.',49.11,49.64,6.35,7.41,0); INSERT INTO "extent" VALUES('EPSG','4585','Austria - Vienna','Austria - Vienna city state.',48.12,48.34,16.18,16.59,0); INSERT INTO "extent" VALUES('EPSG','4586','World - south of 50°S','Southern hemisphere - south of 50°S onshore and offshore, including Antarctica.',-90.0,-50.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','4587','Congo DR (Zaire) - 6th parallel south 21.5°E to 23°E','The Democratic Republic of the Congo (Zaire) - adjacent to 6th parallel south traverse between 21°30''E and 23°E.',-7.31,-5.31,21.5,23.01,0); INSERT INTO "extent" VALUES('EPSG','4588','UK - London to Sheffield','United Kingdom (UK) - on or related to the Midland Mainline rail route from Sheffield to London.',51.46,53.42,-1.89,0.16,0); INSERT INTO "extent" VALUES('EPSG','4589','UK - Aberdeen to Inverness','United Kingdom (UK) - on or related to the A96 highway from Aberdeen to Inverness.',57.1,57.71,-4.31,-2.1,0); INSERT INTO "extent" VALUES('EPSG','4590','Spain - Ceuta','Spain - Ceuta onshore.',35.82,35.97,-5.4,-5.24,0); INSERT INTO "extent" VALUES('EPSG','4591','Spain - Canary Islands - Lanzarote','Spain - Canary Islands - Lanzarote onshore.',28.78,29.47,-13.95,-13.37,0); INSERT INTO "extent" VALUES('EPSG','4592','Spain - Canary Islands - Fuerteventura','Spain - Canary Islands - Fuerteventura onshore.',27.99,28.81,-14.58,-13.75,0); INSERT INTO "extent" VALUES('EPSG','4593','Spain - Canary Islands - Gran Canaria','Spain - Canary Islands - Gran Canaria onshore.',27.68,28.23,-15.88,-15.31,0); INSERT INTO "extent" VALUES('EPSG','4594','Spain - Canary Islands - Tenerife','Spain - Canary Islands - Tenerife onshore.',27.93,28.63,-16.96,-16.08,0); INSERT INTO "extent" VALUES('EPSG','4595','Spain - Canary Islands - La Gomera','Spain - Canary Islands - La Gomera onshore.',27.95,28.26,-17.39,-17.03,0); INSERT INTO "extent" VALUES('EPSG','4596','Spain - Canary Islands - La Palma','Spain - Canary Islands - La Palma onshore.',28.4,28.9,-18.06,-17.66,0); INSERT INTO "extent" VALUES('EPSG','4597','Spain - Canary Islands - El Hierro','Spain - Canary Islands - El Hierro onshore.',27.58,27.9,-18.22,-17.83,0); INSERT INTO "extent" VALUES('EPSG','4598','Spain - Canary Islands western','Spain - Canary Islands - El Hierro, La Gomera, La Palma and Tenerife - onshore.',27.58,28.9,-18.22,-16.08,0); INSERT INTO "extent" VALUES('EPSG','4599','Spain - Canary Islands - El Hierro west of 18°W','Spain - Canary Islands - El Hierro onshore west of 18°W.',27.59,27.88,-18.22,-18.0,0); INSERT INTO "extent" VALUES('EPSG','4600','Spain - Canary Islands onshore east of 18°W','Spain - Canary Islands onshore - El Hierro east of 18°W, Fuerteventura, Gran Canaria, La Gomera, La Palma, Lanzarote and Tenerife.',27.58,29.47,-18.06,-13.37,0); INSERT INTO "extent" VALUES('EPSG','4601','Spain - Canary Islands western east of 18°W','Spain - Canary Islands onshore - El Hierro east of 18°W, La Gomera, La Palma and Tenerife.',27.58,28.9,-18.06,-16.08,0); INSERT INTO "extent" VALUES('EPSG','4602','Spain - Balearic Islands - Mallorca','Spain - Balearic Islands - Mallorca onshore.',39.07,40.02,2.23,3.55,0); INSERT INTO "extent" VALUES('EPSG','4603','Spain - Balearic Islands - Menorca','Spain - Balearic Islands - Menorca onshore.',39.75,40.15,3.73,4.39,0); INSERT INTO "extent" VALUES('EPSG','4604','Spain - Balearic Islands - Ibiza','Spain - Balearic Islands - Ibiza - onshore.',38.77,39.17,1.12,1.68,0); INSERT INTO "extent" VALUES('EPSG','4605','Spain - mainland onshore and Ceuta','Spain - mainland and Ceuta - onshore.',35.82,43.82,-9.37,3.39,0); INSERT INTO "extent" VALUES('EPSG','4606','Europe - British Isles - UK and Ireland onshore, UKCS','United Kingdom (UK) - offshore to boundary of UKCS within 49°45''N to 61°N and 9°W to 2°E; onshore Great Britain (England, Wales and Scotland) and Northern Ireland. Ireland onshore. Isle of Man onshore.',49.75,61.01,-10.85,2.01,0); INSERT INTO "extent" VALUES('EPSG','4607','UK - Glasgow to Kilmarnock','United Kingdom (UK) - on or related to the rail route from Glasgow to Kilmarnock via Barrhead and the branch to East Kilbride.',55.55,55.95,-4.65,-4.05,0); INSERT INTO "extent" VALUES('EPSG','4608','Europe - EVRF2019','Europe - onshore - Andorra; Austria; Belarus; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; North Macedonia; Norway; Poland; Portugal - mainland; Romania; Russia – west of approximately 60°E; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Ukraine; Vatican City State.',35.95,77.07,-9.56,69.15,0); INSERT INTO "extent" VALUES('EPSG','4609','Europe - ETRF EVRF2019','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; North Macedonia; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.24,-9.56,31.59,0); INSERT INTO "extent" VALUES('EPSG','4610','Argentina - Buenos Aires city','Argentina - autonomous city of Buenos Aires.',-34.71,-34.5,-58.54,-58.29,0); INSERT INTO "extent" VALUES('EPSG','4611','Malaysia - East Malaysia - Sarawak onshore','Malaysia - East Malaysia - Sarawak onshore.',0.85,5.03,109.54,115.69,0); INSERT INTO "extent" VALUES('EPSG','4612','Canada - Newfoundland','Canada - Newfoundland - onshore.',46.56,51.68,-59.48,-52.54,0); INSERT INTO "extent" VALUES('EPSG','4613','Europe - Lyon-Turin','France and Italy - on or related to the rail route from Lyon to Turin.',44.87,45.89,4.65,7.88,0); INSERT INTO "extent" VALUES('EPSG','4614','Argentina - Comodoro Rivadavia - west of 67.5°W','Argentina - Comodoro Rivadavia area west of 67°30''W.',-46.7,-45.19,-69.5,-67.5,0); INSERT INTO "extent" VALUES('EPSG','4615','Norway, Svalbard and Jan Mayen - offshore','Norway (offshore) and Svalbard and Jan Mayen (offshore).',56.08,84.73,-13.63,38.01,0); INSERT INTO "extent" VALUES('EPSG','4616','UK - Great Britain onshore; Isle of Man','United Kingdom (UK) - Great Britain - England, Scotland and Wales onshore; Isle of Man onshore.',49.81,60.93,-8.69,1.91,0); INSERT INTO "extent" VALUES('EPSG','4617','Canada - east of 42°W','Canada offshore Atlantic - east of 42°W.',45.53,49.53,-42.0,-40.73,0); INSERT INTO "extent" VALUES('EPSG','4618','Canada - 41°N to 85°N, west of 50°W','Canada - onshore and offshore between 41°N and 85°N and west of 50°W - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon.',41.0,85.01,-141.01,-49.99,0); INSERT INTO "extent" VALUES('EPSG','4619','Italy - 6°22''E to 18°40''E and north of 35°16''N; San Marino, Vatican City State','Italy - onshore and offshore between 6°22''E and 18°40''E and north of 35°16''N; San Marino, Vatican City State.',35.26,47.1,6.36,18.67,0); INSERT INTO "extent" VALUES('EPSG','4620','UK - Tweedmouth to Aberdeen','United Kingdom (UK) - on or related to the complex of rail routes in the East of Scotland, incorporating the route from Tweedbank through the Borders to Edinburgh; the line from Edinburgh to Aberdeen; routes via Kirkaldy and Cowdenbeath; and routes via Leuchars and Perth to Dundee. ',55.55,57.21,-3.56,-1.94,0); INSERT INTO "extent" VALUES('EPSG','4621','UK - Newcastle to Ashington','United Kingdom (UK) - on or related to rail routes from Newcastle Central to Ashington via Benton North Junction, and the section from Bedlington to Morpeth.',54.85,55.3,-1.9,-1.3,0); INSERT INTO "extent" VALUES('EPSG','4622','UK - Oxford to Bedford','United Kingdom (UK) - on or related to East West Rail (Phase 2) routes from Oxford to Bicester, Bletchley and Bedford, and from Claydon Junction to Aylesbury and Princes Risborough.',51.7,52.24,-1.43,-0.36,0); INSERT INTO "extent" VALUES('EPSG','4623','Ukraine - Kyiv city','Ukraine - Kyiv (Kiev) city.',50.21,50.59,30.23,30.83,0); INSERT INTO "extent" VALUES('EPSG','4624','Ukraine - Cherkasy oblast','Ukraine - Cherkasy region (oblast).',48.45,50.23,29.6,32.89,0); INSERT INTO "extent" VALUES('EPSG','4625','Ukraine - Chernihiv oblast','Ukraine - Chernihiv region (oblast).',50.34,52.38,30.48,33.51,0); INSERT INTO "extent" VALUES('EPSG','4626','Ukraine - Chernivtsi oblast','Ukraine - Chernivtsi region (oblast).',47.72,48.68,24.9,27.54,0); INSERT INTO "extent" VALUES('EPSG','4627','Ukraine - Dnipropetrovsk oblast','Ukraine - Dnipropetrovsk region (oblast).',47.45,49.19,32.95,36.94,0); INSERT INTO "extent" VALUES('EPSG','4628','Ukraine - Donetsk oblast','Ukraine - Donetsk region (oblast).',46.86,49.24,36.54,39.1,0); INSERT INTO "extent" VALUES('EPSG','4629','Ukraine - Ivano-Frankivsk oblast','Ukraine - Ivano-Frankivsk region (oblast).',47.72,49.56,23.53,25.66,0); INSERT INTO "extent" VALUES('EPSG','4630','Ukraine - Kharkiv oblast','Ukraine - Kharkiv region (oblast).',48.52,50.46,34.84,38.1,0); INSERT INTO "extent" VALUES('EPSG','4631','Ukraine - Kherson oblast','Ukraine - Kherson region (oblast).',45.75,47.6,31.51,35.11,0); INSERT INTO "extent" VALUES('EPSG','4632','Ukraine - Khmelnytskyi oblast','Ukraine - Khmelnytskyi region (oblast).',48.45,50.59,26.13,27.9,0); INSERT INTO "extent" VALUES('EPSG','4633','Ukraine - Kyiv oblast','Ukraine - Kyiv (Kiev) region (oblast).',49.17,51.55,29.26,32.16,0); INSERT INTO "extent" VALUES('EPSG','4634','Ukraine - Kirovohrad oblast','Ukraine - Kirovohrad region (oblast).',47.74,49.25,29.74,33.9,0); INSERT INTO "extent" VALUES('EPSG','4635','Ukraine - Luhansk oblast','Ukraine - Luhansk region (oblast).',47.82,50.09,37.83,40.23,0); INSERT INTO "extent" VALUES('EPSG','4636','Ukraine - Lviv oblast','Ukraine - Lviv region (oblast).',48.71,50.65,22.64,25.43,0); INSERT INTO "extent" VALUES('EPSG','4637','Ukraine - Mykolaiv oblast','Ukraine - Mykolaiv region (oblast).',46.36,48.23,30.2,33.19,0); INSERT INTO "extent" VALUES('EPSG','4638','Ukraine - Odessa oblast','Ukraine - Odessa region (oblast).',45.2,48.24,28.21,31.3,0); INSERT INTO "extent" VALUES('EPSG','4639','Ukraine - Poltava oblast','Ukraine - Poltava region (oblast).',48.74,50.55,32.08,35.49,0); INSERT INTO "extent" VALUES('EPSG','4640','Ukraine - Rivne oblast','Ukraine - Rivne region (oblast).',50.0,51.95,25.08,27.74,0); INSERT INTO "extent" VALUES('EPSG','4641','Ukraine - Sumy oblast','Ukraine - Sumy region (oblast).',50.1,52.37,32.93,35.67,0); INSERT INTO "extent" VALUES('EPSG','4642','Ukraine - Ternopil oblast','Ukraine - Ternopil region (oblast).',48.5,50.27,24.71,26.45,0); INSERT INTO "extent" VALUES('EPSG','4643','Ukraine - Vinnytsia oblast','Ukraine - Vinnytsia region (oblast).',48.06,49.89,27.37,30.02,0); INSERT INTO "extent" VALUES('EPSG','4644','Ukraine - Volyn oblast','Ukraine - Volyn region (oblast).',50.28,51.97,23.6,26.11,0); INSERT INTO "extent" VALUES('EPSG','4645','Ukraine - Zakarpattia oblast','Ukraine - Zakarpattia (Zakarpatska) region (Transcarpathia oblast).',47.89,49.1,22.13,24.63,0); INSERT INTO "extent" VALUES('EPSG','4646','Ukraine - Zaporizhzhia oblast','Ukraine - Zaporizhzhia region (oblast).',46.07,48.15,34.17,37.25,0); INSERT INTO "extent" VALUES('EPSG','4647','Ukraine - Zhytomyr oblast','Ukraine - Zhytomyr region (oblast).',49.58,51.68,27.19,29.74,0); INSERT INTO "extent" VALUES('EPSG','4648','Ukraine - Crimea','Ukraine - Crimea autonomous region.',44.38,46.24,32.47,36.65,0); INSERT INTO "extent" VALUES('EPSG','4649','Ukraine - Sevastopol','Ukraine - Sevastopol (Sebastopol) city.',44.38,44.85,33.37,33.93,0); INSERT INTO "extent" VALUES('EPSG','4650','Ukraine - Kyiv city and oblast','Ukraine - Kyiv (Kiev) city and Kyiv region (oblast).',49.17,51.55,29.26,32.16,0); INSERT INTO "extent" VALUES('EPSG','4651','Ukraine - Rivne and Khmelnytskyi oblasts','Ukraine - Rivne and Khmelnytskyi regions (oblasts).',48.45,51.95,25.08,27.9,0); INSERT INTO "extent" VALUES('EPSG','4652','UK - Cardiff to Lincoln','United Kingdom (UK) - on or related to Midland Rail Hub, covering routes through Cardiff, Bristol, Gloucester, Derby, Birmingham, Leicester, and Lincoln.',51.35,53.26,-3.27,-0.36,0); INSERT INTO "extent" VALUES('EPSG','4653','Papua New Guinea - 156°E to 162°E','Papua New Guinea - between 156°E and 162°E, onshore and offshore.',-14.26,-1.11,156.0,162.01,0); INSERT INTO "extent" VALUES('EPSG','4654','Papua New Guinea - east of 162°E','Papua New Guinea - east of 162°E to EEZ limit.',-4.36,-2.34,162.0,162.81,0); INSERT INTO "extent" VALUES('EPSG','4655','UK - Manchester to Dore','United Kingdom (UK) - on or related to the rail route from Manchester via Ordsall Lane and the Hope Valley to Dore Junction.',53.25,53.55,-2.4,-1.39,0); INSERT INTO "extent" VALUES('EPSG','4656','Norway - inshore and nearshore','Norway - inshore and nearshore.',57.75,71.39,4.08,31.77,0); INSERT INTO "extent" VALUES('EPSG','4657','St Martin','St Martin - onshore and offshore.',17.87,18.19,-63.66,-62.73,0); INSERT INTO "extent" VALUES('EPSG','4658','St Barthelemy','St Barthélemy - onshore and offshore.',17.64,18.32,-63.11,-62.21,0); INSERT INTO "extent" VALUES('EPSG','4659','Italy - mainland west of 16°E','Italy - mainland northwest of approximately 16°E, including San Marino and Vatican City State.',39.65,47.1,6.62,16.53,0); INSERT INTO "extent" VALUES('EPSG','4660','Germany - Hessen','Germany - Hessen.',49.39,51.66,7.77,10.24,0); INSERT INTO "extent" VALUES('EPSG','4661','UK - Newport to Ebbw Vale','United Kingdom (UK) - on or related to the rail route from Newport (Park Junction) to Ebbw Vale.',51.5,51.85,-3.3,-2.89,0); INSERT INTO "extent" VALUES('EPSG','4662','Iceland - onshore','Iceland - onshore.',63.24,66.62,-24.66,-13.38,0); INSERT INTO "extent" VALUES('EPSG','4663','UK - Leeds to Hull','United Kingdom (UK) - on or related to the rail route from the Morley tunnel through Leeds to Hull.',53.6,53.9,-1.7,-0.27,0); INSERT INTO "extent" VALUES('EPSG','4664','UK - Inverness to Thurso','United Kingdom (UK) - on or related to the rail route from Inverness to Thurso and Wick.',57.4,58.64,-4.6,-3.0,0); INSERT INTO "extent" VALUES('EPSG','4665','UK - Motherwell to Inverness','United Kingdom (UK) - on or related to the Scottish central mainline rail route from Motherwell through Perth and Pitlochry to Inverness.',55.7,57.55,-4.4,-3.3,0); INSERT INTO "extent" VALUES('EPSG','4666','UK - Manchester, Wigan and Chester','United Kingdom (UK) - on or related to the rail route from Manchester via Wigan and Liverpool to Chester.',53.09,53.65,-3.15,-2.1,0); INSERT INTO "extent" VALUES('EPSG','4667','Chile - west of 108°W','Chile - Easter Island onshore and offshore - west of 108°W.',-30.54,-23.72,-113.21,-108.0,0); INSERT INTO "extent" VALUES('EPSG','4668','Europe - Ireland and UK offshore','Ireland and United Kingdom (UK) (including Isle of Man and Channel Islands) - inshore, nearshore and offshore.',47.42,63.89,-16.1,3.4,0); INSERT INTO "extent" VALUES('EPSG','4669','USA - Amtrak NE corridor','United States (USA) - parts of Connecticut, Delaware, District of Columbia, Maryland, Massachusetts, New Jersey, New York, Pennsylvania, Rhode Island and Virginia on or related to the Amtrak northeast corridor rail route from Boston to Washington DC via New York and Philadelphia.',38.64,42.74,-78.51,-70.48,0); INSERT INTO "extent" VALUES('EPSG','4670','Japan - zone I - onshore mainland','Japan - onshore - Kyushu west of approximately 130°E - Nagasaki-ken',32.51,33.49,129.3,130.46,0); INSERT INTO "extent" VALUES('EPSG','4671','Japan - zone II - onshore mainland','Japan - onshore - Kyushu east of approximately 130°E - Fukuoka-ken; Saga-ken; Kumamoto-ken; Oita-ken; Miyazaki-ken; Kagoshima-ken on Kyushu (except for area within Japan Plane Rectangular Coordinate System zone I).',30.94,33.99,129.76,132.05,0); INSERT INTO "extent" VALUES('EPSG','4672','Japan - zone III - onshore mainland','Japan - onshore - Honshu west of approximately 133°15''E - Yamaguchi-ken; Shimane-ken; Hiroshima-ken.',33.72,35.64,130.81,133.49,0); INSERT INTO "extent" VALUES('EPSG','4673','Japan - zone VIII - onshore mainland','Japan - onshore - Honshu between approximately 137°45''E and 139°E - Niigata-ken on Honshu; Nagano-ken; Yamanashi-ken; Shizuoka-ken.',34.54,38.58,137.32,139.91,0); INSERT INTO "extent" VALUES('EPSG','4674','Japan - zone IX - onshore mainland','Japan - onshore - Honshu - Tokyo-to. (Excludes offshore island areas of Tokyo-to).',34.84,37.98,138.4,141.11,0); INSERT INTO "extent" VALUES('EPSG','4675','Japan - zone XI - onshore mainland','Japan - onshore - Hokkaido west of approximately 141°E - Otaru city; Usu-gun and Abuta-gun of Iburi-shicho; Hiyama-shicho; Shiribeshi-shicho; Oshima-shicho.',41.34,43.42,139.7,141.46,0); INSERT INTO "extent" VALUES('EPSG','4676','Japan - zone XII - onshore mainland','Japan - onshore - Hokkaido between approximately 141°E and 143°E - Sapporo city; Asahikawa city; Wakkanai city; Rumoi city; Bibai city; Yubari city; Iwamizawa city; Tomakomai city; Muroran city; Shibetsu city; Nayoro city; Ashibetsu city; Akabira city; Mikasa city; Takikawa city; Sunagawa city; Ebetsu city; Chitose city; Utashinai city; Fukagawa city; Monbetsu city; Furano city; Noboribetsu city; Eniwa city; Ishikari-shicho; Monbetsu-gun of Abashiri-shicho; Kamikawa-shicho; Soya-shicho; Hidaka-shicho; Iburi-shicho (except Usu-gun and Abuta-gun); Sorachi-shicho; Rumoi-shicho.',42.15,45.54,141.0,143.61,0); INSERT INTO "extent" VALUES('EPSG','4677','UK - Crewe to Holyhead','United Kingdom (UK) - on or related to the rail route from Crewe via Chester to Holyhead.',53.02,53.46,-4.71,-2.28,0); INSERT INTO "extent" VALUES('EPSG','4678','UK - Chester to Shrewsbury','United Kingdom (UK) - on or related to the rail route from from Chester via Wrexham to Shrewsbury.',52.5,53.26,-3.16,-2.65,0); INSERT INTO "extent" VALUES('EPSG','4679','UK - Shrewsbury to Crewe','United Kingdom (UK) - on or related to the rail route from Shrewsbury to Crewe.',52.65,53.16,-2.91,-2.3,0); INSERT INTO "extent" VALUES('EPSG','4680','UK - Oxford to Worcester','United Kingdom (UK) - on or related to the rail route from Oxford to Worcester.',51.65,52.26,-2.31,-1.15,0); INSERT INTO "extent" VALUES('EPSG','4681','UK - Didcot to Banbury','United Kingdom (UK) - on or related to the rail route from Didcot to Banbury.',51.57,52.11,-1.46,-1.15,0); INSERT INTO "extent" VALUES('EPSG','4682','UK - London to Leamington Spa','United Kingdom (UK) - on or related to the rail route from London (Marylebone) to Leamington Spa.',51.45,52.91,-2.26,-0.05,0); INSERT INTO "extent" VALUES('EPSG','4683','UK - Swansea to Fishguard','United Kingdom (UK) - on or related to the rail routes from Swansea to Pembroke Dock, Milford Haven and Fishguard.',51.55,52.06,-5.16,-3.6,0); INSERT INTO "extent" VALUES('EPSG','4684','UK - Cardiff and the valleys','United Kingdom (UK) - on or related to the rail routes around Cardiff and the valleys.',51.35,51.81,-3.6,-3.12,0); INSERT INTO "extent" VALUES('EPSG','4685','UK - London to Swansea','United Kingdom (UK) - on or related to the rail route from London (Paddington) to Swansea.',51.25,52.06,-4.26,-0.1,0); INSERT INTO "extent" VALUES('EPSG','4686','UK - Dovey Junction to Pwllheli','United Kingdom (UK) - on or related to the rail route from Dovey Junction to Pwllheli.',52.45,53.01,-4.51,-3.8,0); INSERT INTO "extent" VALUES('EPSG','4687','UK - Shrewsbury to Aberystwyth','United Kingdom (UK) - on or related to the rail route from Shrewsbury to Aberystwyth.',52.37,52.77,-4.16,-2.6,0); INSERT INTO "extent" VALUES('EPSG','4688','UK - Okehampton to Penstone','United Kingdom (UK) - on or related to the rail route from Okehampton to Penstone.',50.65,50.86,-4.11,-3.6,0); INSERT INTO "extent" VALUES('EPSG','4689','UK - Reading to Penzance','United Kingdom (UK) - on or related to the rail route from Reading via Newbury to Penzance.',50.05,51.71,-5.63,-0.85,0); INSERT INTO "extent" VALUES('EPSG','4690','UK - London to Fishguard','United Kingdom (UK) - on or related to the rail routes from London (Paddington) to Swansea; Swansea to Pembroke Dock, Milford Haven and Fishguard; and around Cardiff and the valleys.',51.25,52.06,-5.16,-0.1,0); INSERT INTO "extent" VALUES('EPSG','4691','Portugal - mainland - nearshore','Portugal - mainland - nearshore.',36.9,41.88,-9.57,-7.39,0); INSERT INTO "extent" VALUES('EPSG','4692','Portugal - mainland - nearshore - Tagus estuary','Portugal - mainland - nearshore - Tagus estuary.',38.58,38.96,-9.46,-8.92,0); INSERT INTO "extent" VALUES('EPSG','4693','Denmark - Copenhagen','Denmark - onshore - Copenhagen and surrounding area.',55.51,55.82,12.23,12.73,0); INSERT INTO "extent" VALUES('EPSG','4694','Denmark - northern Schleswig','Denmark - onshore northern Schleswig and surrounding islands (i.e. Jutland south of the pre-1920 border near the Kongea river).',54.8,55.47,8.37,10.16,0); INSERT INTO "extent" VALUES('EPSG','4695','Portugal - Madeira and Desertas islands - nearshore','Portugal - Madeira and Desertas islands - nearshore.',32.35,32.93,-17.33,-16.4,0); INSERT INTO "extent" VALUES('EPSG','4696','Portugal - Porto Santo island - nearshore','Portugal - Porto Santo island (Madeira archipelago) - nearshore.',32.97,33.16,-16.46,-16.23,0); INSERT INTO "extent" VALUES('EPSG','4697','Portugal - Azores W - Flores, Corvo - nearshore','Portugal - western Azores - Flores and Corvo islands - nearshore.',39.32,39.78,-31.34,-31.01,0); INSERT INTO "extent" VALUES('EPSG','4698','Portugal - Azores C - Faial - nearshore','Portugal - central Azores - Faial island - nearshore.',38.46,38.7,-28.91,-28.53,0); INSERT INTO "extent" VALUES('EPSG','4699','Portugal - Azores C - Pico nearshore','Portugal - central Azores - Pico island - nearshore.',38.33,38.62,-28.61,-27.96,0); INSERT INTO "extent" VALUES('EPSG','4700','Portugal - Azores C - S Jorge - nearshore','Portugal - central Azores - Sao Jorge island - nearshore.',38.48,38.81,-28.39,-27.68,0); INSERT INTO "extent" VALUES('EPSG','4701','USA - Illinois - Carroll, Jo Daviess, Stephenson','United States (USA) - Illinois - counties of Carroll, Jo Daviess and Stephenson.',41.92,42.51,-90.66,-89.39,0); INSERT INTO "extent" VALUES('EPSG','4702','USA - Illinois - Lee, Ogle, Winnebago','United States (USA) - Illinois - counties of Lee, Ogle and Winnebago.',41.58,42.51,-89.69,-88.93,0); INSERT INTO "extent" VALUES('EPSG','4703','USA - Illinois - Boone, Dekalb, Kane, Kendall, McHenry','United States (USA) - Illinois - counties of Boone, Dekalb, Kane, Kendall and McHenry.',41.45,42.5,-88.95,-88.19,0); INSERT INTO "extent" VALUES('EPSG','4704','USA - Illinois - Cook, DuPage, Lake','United States (USA) - Illinois - counties of Cook, DuPage and Lake.',41.46,42.5,-88.27,-87.52,0); INSERT INTO "extent" VALUES('EPSG','4705','USA - Illinois - Rock Island','United States (USA) - Illinois - Rock Island county.',41.32,41.79,-91.08,-90.15,0); INSERT INTO "extent" VALUES('EPSG','4706','USA - Illinois - Henry, Whiteside','United States (USA) - Illinois - counties of Henry and Whiteside.',41.14,41.94,-90.44,-89.62,0); INSERT INTO "extent" VALUES('EPSG','4707','USA - Illinois - Bureau, Grundy, LaSalle, Putnam','United States (USA) - Illinois - counties of Bureau, Grundy, LaSalle and Putnam.',40.92,41.64,-89.87,-88.24,0); INSERT INTO "extent" VALUES('EPSG','4708','USA - Illinois - Kankakee, Will','United States (USA) - Illinois - counties of Kankakee and Will.',40.99,41.73,-88.27,-87.52,0); INSERT INTO "extent" VALUES('EPSG','4709','USA - Illinois - Henderson, Mercer, Warren','United States (USA) - Illinois - counties of Henderson, Mercer and Warren.',40.62,41.34,-91.19,-90.43,0); INSERT INTO "extent" VALUES('EPSG','4710','USA - Illinois - Fulton, Knox, Stark','United States (USA) - Illinois - counties of Fulton, Knox and Stark.',40.18,41.24,-90.46,-89.63,0); INSERT INTO "extent" VALUES('EPSG','4711','USA - Illinois - Peoria, Tazewell','United States (USA) - Illinois - counties of Peoria and Tazewell.',40.31,40.98,-89.99,-89.26,0); INSERT INTO "extent" VALUES('EPSG','4712','USA - Illinois - Marshall, Woodford','United States (USA) - Illinois - counties of Marshall and Woodford.',40.59,41.15,-89.64,-88.92,0); INSERT INTO "extent" VALUES('EPSG','4713','USA - Illinois - McLean','United States (USA) - Illinois - McLean county.',40.28,40.76,-89.27,-88.45,0); INSERT INTO "extent" VALUES('EPSG','4714','USA - Illinois - Livingston','United States (USA) - Illinois - Livingston county.',40.61,41.12,-88.94,-88.23,0); INSERT INTO "extent" VALUES('EPSG','4715','USA - Illinois - Ford, Iroquois','United States (USA) - Illinois - counties of Ford and Iroquois.',40.39,41.02,-88.46,-87.52,0); INSERT INTO "extent" VALUES('EPSG','4716','USA - Illinois - Adams, Hancock','United States (USA) - Illinois - counties of Adams and Hancock.',39.75,40.64,-91.52,-90.9,0); INSERT INTO "extent" VALUES('EPSG','4717','USA - Illinois - Brown, McDonough, Schuyler','United States (USA) - Illinois - counties of Brown, McDonough and Schuyler.',39.83,40.64,-90.92,-90.19,0); INSERT INTO "extent" VALUES('EPSG','4718','USA - Illinois - Cass, Logan, Mason, Menard','United States (USA) - Illinois - counties of Cass, Logan, Mason and Menard.',39.87,40.44,-90.59,-89.14,0); INSERT INTO "extent" VALUES('EPSG','4719','USA - Illinois - Dewitt, Macon, Moultrie, Piatt, Shelby','United States (USA) - Illinois - counties of Dewitt, Macon, Moultrie, Piatt and Shelby.',39.21,40.29,-89.22,-88.46,0); INSERT INTO "extent" VALUES('EPSG','4720','USA - Illinois - Champaign, Vermilion','United States (USA) - Illinois - counties of Champaign and Vermilion.',39.86,40.5,-88.47,-87.52,0); INSERT INTO "extent" VALUES('EPSG','4721','USA - Illinois - Morgan, Pike, Scott','United States (USA) - Illinois - counties of Morgan, Pike and Scott.',39.39,39.88,-91.38,-89.92,0); INSERT INTO "extent" VALUES('EPSG','4722','USA - Illinois - Sangamon','United States (USA) - Illinois - Sangamon county.',39.52,39.98,-90.0,-89.21,0); INSERT INTO "extent" VALUES('EPSG','4723','USA - Illinois - Coles, Douglas, Edgar','United States (USA) - Illinois - counties of Coles, Douglas and Edgar.',39.37,39.89,-88.48,-87.53,0); INSERT INTO "extent" VALUES('EPSG','4724','USA - Illinois - Calhoun, Jersey','United States (USA) - Illinois - counties of Calhoun and Jersey.',38.86,39.41,-90.94,-90.14,0); INSERT INTO "extent" VALUES('EPSG','4725','USA - Illinois - Greene, Macoupin','United States (USA) - Illinois - counties of Greene and Macoupin.',38.99,39.53,-90.63,-89.69,0); INSERT INTO "extent" VALUES('EPSG','4726','USA - Illinois - Christian, Montgomery','United States (USA) - Illinois - counties of Christian and Montgomery.',38.99,39.83,-89.71,-89.02,0); INSERT INTO "extent" VALUES('EPSG','4727','USA - Illinois - Bond, Effingham, Fayette','United States (USA) - Illinois - counties of Bond, Effingham and Fayette.',38.73,39.22,-89.64,-88.36,0); INSERT INTO "extent" VALUES('EPSG','4728','USA - Illinois - Clark, Crawford, Cumberland, Jasper','United States (USA) - Illinois - counties of Clark, Crawford, Cumberland and Jasper.',38.84,39.49,-88.48,-87.51,0); INSERT INTO "extent" VALUES('EPSG','4729','USA - Illinois - Madison, Monroe, St Clair','United States (USA) - Illinois - counties of Madison, Monroe and St Clair.',38.08,39.0,-90.38,-89.59,0); INSERT INTO "extent" VALUES('EPSG','4730','USA - Illinois - Clinton, Jefferson, Marion, Washington','United States (USA) - Illinois - counties of Clinton, Jefferson, Marion and Washington.',38.12,38.83,-89.71,-88.69,0); INSERT INTO "extent" VALUES('EPSG','4731','USA - Illinois - Olney zone','United States (USA) - Illinois - counties of Clay, Edwards, Lawrence, Richland, Wabash and Wayne.',38.23,38.92,-88.71,-87.49,0); INSERT INTO "extent" VALUES('EPSG','4732','USA - Illinois - Carbondale zone','United States (USA) - Illinois - counties of Franklin, Gallatin, Hamilton, Jackson, Perry, Randolph, Saline, White and Williamson.',37.56,38.26,-90.21,-87.91,0); INSERT INTO "extent" VALUES('EPSG','4733','USA - Illinois - Metropolis zone','United States (USA) - Illinois - counties of Alexander, Hardin, Johnson, Massac, Pope, Pulaski and Union.',36.97,37.61,-89.53,-88.06,0); INSERT INTO "extent" VALUES('EPSG','4734','Portugal - Azores C - Graciosa - nearshore','Portugal - central Azores - Graciosa island - nearshore.',38.95,39.15,-28.14,-27.88,0); INSERT INTO "extent" VALUES('EPSG','4735','Portugal - Azores C - Terceira - nearshore','Portugal - central Azores - Terceira island - nearshore.',38.58,38.86,-27.45,-26.97,0); INSERT INTO "extent" VALUES('EPSG','4736','Portugal - Azores E - S Miguel - nearshore','Portugal - eastern Azores - Sao Miguel island - nearshore.',37.65,37.97,-25.92,-25.07,0); INSERT INTO "extent" VALUES('EPSG','4737','Portugal - Azores E - Santa Maria and Formigas - nearshore','Portugal - eastern Azores - Santa Maria and Formigas islands - nearshore.',36.87,37.33,-25.25,-24.71,0); INSERT INTO "extent" VALUES('EPSG','4738','Portugal - offshore','Portugal - offshore.',29.24,43.07,-35.58,-7.25,0); INSERT INTO "extent" VALUES('EPSG','4739','Spain - Balearic Islands - Formentera','Spain - Balearic Islands - Formentera - onshore.',38.59,38.86,1.31,1.65,0); INSERT INTO "extent" VALUES('EPSG','4740','Spain - Melilla','Spain - Melilla onshore.',35.26,35.38,-2.98,-2.88,0); INSERT INTO "extent" VALUES('EPSG','4741','Spain - Alboran','Spain - Alboran island - onshore.',35.88,36.0,-3.1,-2.96,0); INSERT INTO "extent" VALUES('EPSG','4742','Netherlands - offshore and nearshore ','Netherlands - offshore North Sea and nearshore.',51.32,55.77,2.53,7.21,0); INSERT INTO "extent" VALUES('EPSG','4743','UK - Coventry','United Kingdom (UK) - in and around the area of Coventry city centre and the route to Birmingham airport.',52.3,52.5,-1.85,-1.3,0); INSERT INTO "extent" VALUES('EPSG','4744','Europe - Brenner','Austria and Italy - on or related to the Brenner Base Tunnel rail route from Innsbruck to Fortezza (Franzensfeste).',46.45,47.33,11.04,11.91,0); INSERT INTO "extent" VALUES('EPSG','4745','Africa - Equi7','Africa and the Arabian peninsula.',-43.89,38.8,-31.68,79.3,0); INSERT INTO "extent" VALUES('EPSG','4746','Antarctica - Equi7','Antarctica.',-90.0,-34.47,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','4747','Asia - Equi7','Asia including Maldives and British Indian Ocean Territory.',-10.8,83.67,31.45,-168.43,0); INSERT INTO "extent" VALUES('EPSG','4748','Europe - Equi7','Europe including Russia west of the Ural Mountains.',29.24,83.67,-42.52,51.73,0); INSERT INTO "extent" VALUES('EPSG','4749','North America - Equi7','North America including Greenland, the Caribbean and Central America, together with circum-polar area north of 83°40''N. Excluding the circum-polar area, the longitude extent is from 167.65° in west across the 180° meridian to 15.72° in east.',7.98,90.0,-180.0,180.0,0); INSERT INTO "extent" VALUES('EPSG','4750','South America - Equi7','South America including Panama.',-59.87,30.31,-124.82,-14.58,0); INSERT INTO "extent" VALUES('EPSG','4751','Oceania - Equi7','Australasia and the western Pacific Ocean.',-60.56,21.57,72.37,-121.05,0); INSERT INTO "extent" VALUES('EPSG','4752','Canada - onshore south of 60°N','Canada - onshore south of 60°N - Alberta, British Columbia (BC), Manitoba, New Brunswick (NB), Newfoundland and Labrador, Nova Scotia (NS), Ontario, Prince Edward Island (PEI), Quebec and Saskatchewan.',41.67,60.01,-139.04,-52.54,0); INSERT INTO "extent" VALUES('EPSG','4753','Canada - onshore north of 60°N','Canada - onshore north of 60°N - Newfoundland and Labrador; Northwest Territories (NWT); Nunavut; Quebec; Yukon.',59.99,83.17,-141.01,-60.72,0); INSERT INTO "extent" VALUES('EPSG','4754','Canada - onshore','Canada - onshore - Alberta; British Columbia (BC); Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward Island (PEI); Quebec; Saskatchewan; Yukon.',41.67,83.17,-141.01,-52.54,0); INSERT INTO "extent" VALUES('EPSG','4755','Europe - ETRF by country','Europe - onshore and offshore: Albania; Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Faroe Islands; Finland; France; Germany; Gibraltar; Greece; Hungary; Ireland; Italy; Kosovo; Latvia; Liechtenstein; Lithuania; Luxembourg; Malta; Moldova; Monaco; Montenegro; Netherlands; North Macedonia; Norway including Svalbard and Jan Mayen; Poland; Portugal - mainland; Romania; San Marino; Serbia; Slovakia; Slovenia; Spain - mainland and Balearic islands; Sweden; Switzerland; United Kingdom (UK) including Channel Islands and Isle of Man; Vatican City State.',33.26,84.73,-16.1,38.01,0); INSERT INTO "extent" VALUES('EPSG','4756','Denmark - offshore','Denmark - offshore.',54.36,58.27,3.25,16.51,0); INSERT INTO "extent" VALUES('EPSG','4757','BES Islands - Saba onshore','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Saba - onshore.',17.56,17.71,-63.31,-63.16,0); INSERT INTO "extent" VALUES('EPSG','4758','Europe - 6°W to 0°W and ETRF','Europe between 6°W and 0°W and approximately 35°15''N to 80°30''N.',35.26,80.49,-6.01,0.0,0); INSERT INTO "extent" VALUES('EPSG','4759','Europe - 0°E to 6°E and ETRF','Europe between 0°E and 6°E and approximately 37°N to 82°27''N.',37.0,82.45,0.0,6.01,0); INSERT INTO "extent" VALUES('EPSG','4760','Europe - 6°E to 12°E and ETRF','Europe between 6°E and 12°E and approximately 36°30''N to 84°N.',36.53,84.01,6.0,12.01,0); INSERT INTO "extent" VALUES('EPSG','4761','Europe - 12°E to 18°E and ETRF','Europe between 12°E and 18°E and approximately 34°30''N to 84°N.',34.49,84.01,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','4762','Europe - 18°E to 24°E and ETRF','Europe between 18°E and 24°E and approximately 33°36''N to 84°N.',33.59,84.01,18.0,24.01,0); INSERT INTO "extent" VALUES('EPSG','4763','Europe - 24°E to 30°E and ETRF','Europe between 24°E and 30°E and approximately 33°15''N to 84°N.',33.26,84.01,24.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','4764','Europe - 30°E to 36°E and ETRF','Europe between 30°E and 36°E and approximately 33°55''N to 84°N.',33.91,84.01,30.0,36.01,0); INSERT INTO "extent" VALUES('EPSG','4765','Europe - 12°W to 6°W and ETRF','Europe between 12°W and 6°W and approximately 34°50''N to 74°10''N.',34.91,74.13,-12.01,-6.0,0); INSERT INTO "extent" VALUES('EPSG','4766','Europe - 12°W to 6°W and ETRF by country','Europe between 12°W and 6°W and approximately 34°50''N to 74°10''N: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - onshore and offshore; Portugal - mainland - onshore and offshore; Spain - mainland - onshore and offshore; United Kingdom - UKCS offshore.',34.91,74.13,-12.01,-6.0,0); INSERT INTO "extent" VALUES('EPSG','4767','Europe - 6°W to 0°W and ETRF by country','Europe between 6°W and 0°W and approximately 35°15''N to 80°30''N: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - offshore; Norway including Svalbard - offshore; Spain - mainland - onshore and offshore.',35.26,80.49,-6.01,0.0,0); INSERT INTO "extent" VALUES('EPSG','4768','Europe - 0°E to 6°E and ETRF by country','Europe between 0°E and 6°E and approximately 37°N to 82°27''N: Andorra; Denmark - offshore; Germany - offshore; Jan Mayen - offshore; Norway including Svalbard - onshore and offshore; Spain - mainland and Balearic islands - onshore and offshore.',37.0,82.45,0.0,6.01,0); INSERT INTO "extent" VALUES('EPSG','4769','Europe - 6°E to 12°E and ETRF by country','Europe between 6°E and 12°E and approximately 36°30''N to 84°N: Austria; Denmark - onshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore; Spain - offshore.',36.53,84.01,6.0,12.01,0); INSERT INTO "extent" VALUES('EPSG','4770','Europe - 12°E to 18°E and ETRF by country','Europe between 12°E and 18°E and approximately 34°30''N to 84°N.: Austria; Croatia; Denmark - offshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',34.49,84.01,12.0,18.01,0); INSERT INTO "extent" VALUES('EPSG','4771','Europe - 18°E to 24°E and ETRF by country','Europe between 18°E and 24°E and approximately 33°36''N to 84°N: Bulgaria; Croatia; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',33.59,84.01,18.0,24.01,0); INSERT INTO "extent" VALUES('EPSG','4772','Europe - 24°E to 30°E and ETRF by country','Europe between 24°E and 30°E and approximately 33°15''N to 84°N: Bulgaria - onshore and offshore; Norway including Svalbard - onshore and offshore.',33.26,84.01,24.0,30.01,0); INSERT INTO "extent" VALUES('EPSG','4773','Europe - 30°E to 36°E and ETRF by country','Europe between 30°E and 36°E and approximately 33°55''N to 84°N: Bulgaria - offshore; Norway including Svalbard - onshore and offshore.',33.91,84.01,30.0,36.01,0); INSERT INTO "extent" VALUES('EPSG','4774','UK - London to Edinburgh','United Kingdom (UK) - on or related to the east coast mainline rail route from London (Kings Cross) via Newcastle to Edinburgh.',51.45,56.1,-3.45,0.05,0); INSERT INTO "extent" VALUES('EPSG','4775','UK - London to Glasgow','United Kingdom (UK) - on or related to the west coast mainline rail route from London (Euston) via Carlisle to Glasgow.',51.4,55.92,-4.33,-0.04,0); INSERT INTO "extent" VALUES('EPSG','4776','Greenland - offshore','Greenland - offshore.',56.38,87.03,-75.0,7.99,0); INSERT INTO "extent" VALUES('EPSG','4777','Brazil - Porto Alegre municipality','Brazil - Porto Alegre municipality.',-30.27,-29.93,-51.3,-51.01,0); INSERT INTO "extent" VALUES('EPSG','4778','Canada - CGVD28(HTv2.0)','Canada - onshore and offshore between 41°N and 84°N and west of 48°W - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon.',41.0,84.0,-141.01,-48.0,0); INSERT INTO "extent" VALUES('EPSG','4779','Europe - Baltic Sea','Denmark, Estonia, Finland, Germany, Latvia, Lithuania, Norway, Poland, Russia and Sweden - offshore Baltic Sea including Skagerrak east of 8°30''E, Kattegat, Gulf of Bothnia, and Gulf of Finland.',53.88,65.92,8.5,30.23,0); INSERT INTO "extent" VALUES('EPSG','4780','Vietnam - offshore','Vietnam - offshore.',5.67,21.45,102.2,112.55,0); INSERT INTO "extent" VALUES('EPSG','4781','Finland - west of 24°E','Finland - west of 24°E, onshore and offshore.',58.84,69.33,19.08,24.0,0); INSERT INTO "extent" VALUES('EPSG','4782','Finland - 24°E to 30°E','Finland - between 24°E and 30°E, onshore and offshore.',59.64,70.09,23.99,30.0,0); INSERT INTO "extent" VALUES('EPSG','4783','Finland - east of 30°E','Finland - east of 30°E.',61.73,67.71,30.0,31.59,0); INSERT INTO "extent" VALUES('EPSG','4784','Uzbekistan - west of 60°E','Uzbekistan - west of 60°E.',41.25,45.58,55.99,60.0,0); INSERT INTO "extent" VALUES('EPSG','4785','Uzbekistan - 60°E to 66°E','Uzbekistan - between 60°E and 66°E.',38.22,44.82,60.0,66.0,0); INSERT INTO "extent" VALUES('EPSG','4786','Uzbekistan - 66°E to 72°E','Uzbekistan - between 66°E and 72°E.',37.18,43.0,66.0,72.0,0); INSERT INTO "extent" VALUES('EPSG','4787','Uzbekistan - east of 72°E','Uzbekistan - east of 72°E.',40.26,41.21,72.0,73.17,0); INSERT INTO "extent" VALUES('EPSG','4788','BES Islands - Sint Eustatius - onshore','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Sint Eustatius - onshore.',17.41,17.58,-63.05,-62.88,0); INSERT INTO "extent" VALUES('EPSG','4789','Brazil - Ribeirao Preto municipality','Brazil - Ribeirao Preto municipality, Sao Paulo state.',-21.37,-21.06,-47.99,-47.64,0); INSERT INTO "extent" VALUES('EPSG','4793','Liberia - east of 12°W','Liberia - onshore, and offshore east of 12°W.',1.02,8.52,-12.0,-7.36,0); INSERT INTO "extent" VALUES('EPSG','4794','Liberia - west of 12°W','Liberia - offshore west of 12°W.',3.12,6.4,-13.59,-12.0,0); proj-9.6.0/data/sql/final_consistency_checks.sql000664 001754 001755 00000024270 14764566077 021711 0ustar00e012349e012349000000 000000 -- Final consistency checks CREATE TABLE dummy(foo); CREATE TRIGGER final_checks BEFORE INSERT ON dummy FOR EACH ROW BEGIN -- check that view definitions have no error SELECT RAISE(ABORT, 'corrupt definition of coordinate_operation_view') WHERE (SELECT 1 FROM coordinate_operation_view LIMIT 1) = 0; SELECT RAISE(ABORT, 'corrupt definition of crs_view') WHERE (SELECT 1 FROM crs_view LIMIT 1) = 0; SELECT RAISE(ABORT, 'corrupt definition of object_view') WHERE (SELECT 1 FROM object_view LIMIT 1) = 0; SELECT RAISE(ABORT, 'corrupt definition of authority_list') WHERE (SELECT 1 FROM authority_list LIMIT 1) = 0; -- check that the auth_name of all objects in object_view is recorded in builtin_authorities SELECT RAISE(ABORT, 'One or several authorities referenced in object_view are missing in builtin_authorities') WHERE EXISTS ( SELECT DISTINCT o.auth_name FROM object_view o WHERE NOT EXISTS ( SELECT 1 FROM builtin_authorities b WHERE o.auth_name = b.auth_name) ); -- check that a usage is registered for most objects where this is needed SELECT RAISE(ABORT, 'One or several objects lack a corresponding record in the usage table') WHERE EXISTS ( SELECT * FROM object_view o WHERE NOT EXISTS ( SELECT 1 FROM usage u WHERE o.table_name = u.object_table_name AND o.auth_name = u.object_auth_name AND o.code = u.object_code) AND o.table_name NOT IN ('unit_of_measure', 'axis', 'celestial_body', 'ellipsoid', 'prime_meridian', 'extent') -- the IGNF registry lacks extent for the following objects AND NOT (o.auth_name = 'IGNF' AND o.table_name IN ('geodetic_datum', 'vertical_datum', 'conversion')) ); SELECT RAISE(ABORT, 'Geodetic datum ensemble defined, but no ensemble member') WHERE EXISTS ( SELECT * FROM geodetic_datum d WHERE ensemble_accuracy IS NOT NULL AND NOT EXISTS (SELECT 1 FROM geodetic_datum_ensemble_member WHERE d.auth_name = ensemble_auth_name AND d.code = ensemble_code) ); SELECT RAISE(ABORT, 'Vertical datum ensemble defined, but no ensemble member') WHERE EXISTS ( SELECT * FROM vertical_datum d WHERE ensemble_accuracy IS NOT NULL AND NOT EXISTS (SELECT 1 FROM vertical_datum_ensemble_member WHERE d.auth_name = ensemble_auth_name AND d.code = ensemble_code) ); SELECT RAISE(ABORT, 'PROJ defines an alias that exists in EPSG') WHERE EXISTS ( SELECT * FROM ( SELECT count(*) AS count, table_name, auth_name, code, alt_name FROM alias_name WHERE source in ('EPSG', 'PROJ') AND NOT (source = 'PROJ' AND alt_name IN ('GGRS87', 'NAD27', 'NAD83')) GROUP BY table_name, auth_name, code, alt_name) x WHERE count > 1 ); -- test to check that our custom grid transformation overrides are really needed SELECT RAISE(ABORT, 'PROJ grid_transformation defined whereas EPSG has one') WHERE EXISTS (SELECT 1 FROM grid_transformation g1 JOIN grid_transformation g2 ON g1.source_crs_auth_name = g2.source_crs_auth_name AND g1.source_crs_code = g2.source_crs_code AND g1.target_crs_auth_name = g2.target_crs_auth_name AND g1.target_crs_code = g2.target_crs_code WHERE g1.auth_name = 'PROJ' AND g1.code NOT LIKE '%_RESTRICTED_TO_VERTCRS%' AND g2.auth_name = 'EPSG' AND g2.deprecated = 0 AND ( (g1.interpolation_crs_auth_name IS NULL AND g2.interpolation_crs_auth_name IS NULL) OR (g1.interpolation_crs_auth_name IS NOT NULL AND g2.interpolation_crs_auth_name IS NOT NULL AND g1.interpolation_crs_auth_name = g2.interpolation_crs_auth_name AND g1.interpolation_crs_code = g2.interpolation_crs_code))) OR EXISTS (SELECT 1 FROM grid_transformation g1 JOIN grid_transformation g2 ON g1.source_crs_auth_name = g2.target_crs_auth_name AND g1.source_crs_code = g2.target_crs_code AND g1.target_crs_auth_name = g1.source_crs_auth_name AND g1.target_crs_code = g1.source_crs_code WHERE g1.auth_name = 'PROJ' AND g1.code NOT LIKE '%_RESTRICTED_TO_VERTCRS%' AND g2.auth_name = 'EPSG' AND g2.deprecated = 0); SELECT RAISE(ABORT, 'Arg! there is now a EPSG:102100 object. Hack in createFromUserInput() will no longer work') WHERE EXISTS(SELECT 1 FROM crs_view WHERE auth_name = 'EPSG' AND code = '102100'); -- check coordinate_operation_view "foreign keys" SELECT RAISE(ABORT, 'One coordinate_operation has a broken source_crs link') WHERE EXISTS (SELECT * FROM coordinate_operation_view cov WHERE cov.source_crs_auth_name || cov.source_crs_code NOT IN (SELECT auth_name || code FROM crs_view)); SELECT RAISE(ABORT, 'One coordinate_operation has a broken target_crs link') WHERE EXISTS (SELECT * FROM coordinate_operation_view cov WHERE cov.target_crs_auth_name || cov.target_crs_code NOT IN (SELECT auth_name || code FROM crs_view)); -- check that transformations intersect the area of use of their source/target CRS -- EPSG, ESRI and IGNF have cases where this does not hold. SELECT RAISE(ABORT, 'The area of use of at least one coordinate_operation does not intersect the one of its source CRS') WHERE EXISTS (SELECT * FROM coordinate_operation_view v, crs_view c, usage vu, extent ve, usage cu, extent ce WHERE v.deprecated = 0 AND (v.table_name = 'grid_transformation' OR v.auth_name NOT IN ('EPSG', 'ESRI', 'IGNF')) AND v.source_crs_auth_name = c.auth_name AND v.source_crs_code = c.code AND vu.object_table_name = v.table_name AND vu.object_auth_name = v.auth_name AND vu.object_code = v.code AND vu.extent_auth_name = ve.auth_name AND vu.extent_code = ve.code AND cu.object_table_name = c.table_name AND cu.object_auth_name = c.auth_name AND cu.object_code = c.code AND cu.extent_auth_name = ce.auth_name AND cu.extent_code = ce.code AND NOT ((ce.south_lat < ve.north_lat AND ve.south_lat < ce.north_lat) OR (ce.west_lon < ce.east_lon AND ve.west_lon < ve.east_lon AND NOT (ce.west_lon < ve.east_lon AND ve.west_lon < ce.east_lon))) ); SELECT RAISE(ABORT, 'The area of use of at least one coordinate_operation does not intersect the one of its target CRS') WHERE EXISTS (SELECT * FROM coordinate_operation_view v, crs_view c, usage vu, extent ve, usage cu, extent ce WHERE v.deprecated = 0 AND ((v.table_name = 'grid_transformation' AND NOT (v.auth_name = 'IGNF' AND v.code = 'TSG1185')) OR v.auth_name NOT IN ('EPSG', 'ESRI', 'IGNF')) AND v.target_crs_auth_name = c.auth_name AND v.target_crs_code = c.code AND vu.object_table_name = v.table_name AND vu.object_auth_name = v.auth_name AND vu.object_code = v.code AND vu.extent_auth_name = ve.auth_name AND vu.extent_code = ve.code AND cu.object_table_name = c.table_name AND cu.object_auth_name = c.auth_name AND cu.object_code = c.code AND cu.extent_auth_name = ce.auth_name AND cu.extent_code = ce.code AND NOT ((ce.south_lat < ve.north_lat AND ve.south_lat < ce.north_lat) OR (ce.west_lon < ce.east_lon AND ve.west_lon < ve.east_lon AND NOT (ce.west_lon < ve.east_lon AND ve.west_lon < ce.east_lon))) ); -- check geoid_model table SELECT RAISE(ABORT, 'missing GEOID99 in geoid_model') WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID99'); SELECT RAISE(ABORT, 'missing GEOID03 in geoid_model') WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID03'); SELECT RAISE(ABORT, 'missing GEOID06 in geoid_model') WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID06'); SELECT RAISE(ABORT, 'missing GEOID09 in geoid_model') WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID09'); SELECT RAISE(ABORT, 'missing GEOID12A in geoid_model') WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID12A'); SELECT RAISE(ABORT, 'missing GEOID12B in geoid_model') WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID12B'); SELECT RAISE(ABORT, 'missing GEOID18 in geoid_model') WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID18'); -- check presence of au_ga_AUSGeoid98.tif SELECT RAISE(ABORT, 'missing au_ga_AUSGeoid98.tif') WHERE NOT EXISTS(SELECT 1 FROM grid_alternatives WHERE proj_grid_name = 'au_ga_AUSGeoid98.tif'); -- check PROJ.VERSION value SELECT RAISE(ABORT, 'Value of PROJ.VERSION entry of metadata tables not substituted by actual value') WHERE (SELECT 1 FROM metadata WHERE key = 'PROJ.VERSION' AND value LIKE '$%'); -- Only available in sqlite >= 3.16. May be activated as soon as support for ubuntu 16 is dropped -- check all foreign key constraints have an 'ON DELETE CASCADE' -- SELECT RAISE(ABORT, 'FK constraint with missing "ON DELETE CASCADE"') -- WHERE EXISTS (SELECT 1 FROM -- pragma_foreign_key_list(name), -- (SELECT name from sqlite_master WHERE type='table') -- WHERE upper(on_delete) != 'CASCADE'); END; INSERT INTO dummy DEFAULT VALUES; DROP TRIGGER final_checks; DROP TABLE dummy; proj-9.6.0/data/sql/geodetic_crs.sql000664 001754 001755 00001002665 14764566077 017316 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "geodetic_crs" VALUES('EPSG','3819','HD1909',NULL,'geographic 2D','EPSG','6422','EPSG','1024',NULL,0); INSERT INTO "usage" VALUES('EPSG','2825','geodetic_crs','EPSG','3819','EPSG','1119','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','3821','TWD67',NULL,'geographic 2D','EPSG','6422','EPSG','1025',NULL,0); INSERT INTO "usage" VALUES('EPSG','2826','geodetic_crs','EPSG','3821','EPSG','3315','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','3822','TWD97',NULL,'geocentric','EPSG','6500','EPSG','1026',NULL,0); INSERT INTO "usage" VALUES('EPSG','2827','geodetic_crs','EPSG','3822','EPSG','1228','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','3823','TWD97',NULL,'geographic 3D','EPSG','6423','EPSG','1026',NULL,0); INSERT INTO "usage" VALUES('EPSG','2828','geodetic_crs','EPSG','3823','EPSG','1228','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','3824','TWD97',NULL,'geographic 2D','EPSG','6422','EPSG','1026',NULL,0); INSERT INTO "usage" VALUES('EPSG','2829','geodetic_crs','EPSG','3824','EPSG','1228','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','3887','IGRS',NULL,'geocentric','EPSG','6500','EPSG','1029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2873','geodetic_crs','EPSG','3887','EPSG','1124','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','3888','IGRS',NULL,'geographic 3D','EPSG','6423','EPSG','1029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2874','geodetic_crs','EPSG','3888','EPSG','1124','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','3889','IGRS',NULL,'geographic 2D','EPSG','6422','EPSG','1029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2875','geodetic_crs','EPSG','3889','EPSG','1124','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','3906','MGI 1901',NULL,'geographic 2D','EPSG','6422','EPSG','1031',NULL,0); INSERT INTO "usage" VALUES('EPSG','2884','geodetic_crs','EPSG','3906','EPSG','2370','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4000','MOLDREF99',NULL,'geocentric','EPSG','6500','EPSG','1032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2922','geodetic_crs','EPSG','4000','EPSG','1162','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4001','Unknown datum based upon the Airy 1830 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6001',NULL,1); INSERT INTO "usage" VALUES('EPSG','2923','geodetic_crs','EPSG','4001','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4002','Unknown datum based upon the Airy Modified 1849 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6002',NULL,1); INSERT INTO "usage" VALUES('EPSG','2924','geodetic_crs','EPSG','4002','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4003','Unknown datum based upon the Australian National Spheroid',NULL,'geographic 2D','EPSG','6422','EPSG','6003',NULL,1); INSERT INTO "usage" VALUES('EPSG','2925','geodetic_crs','EPSG','4003','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4004','Unknown datum based upon the Bessel 1841 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6004',NULL,1); INSERT INTO "usage" VALUES('EPSG','2926','geodetic_crs','EPSG','4004','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4005','Unknown datum based upon the Bessel Modified ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6005',NULL,1); INSERT INTO "usage" VALUES('EPSG','2927','geodetic_crs','EPSG','4005','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4006','Unknown datum based upon the Bessel Namibia ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6006',NULL,1); INSERT INTO "usage" VALUES('EPSG','2928','geodetic_crs','EPSG','4006','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4007','Unknown datum based upon the Clarke 1858 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6007',NULL,1); INSERT INTO "usage" VALUES('EPSG','2929','geodetic_crs','EPSG','4007','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4008','Unknown datum based upon the Clarke 1866 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6008',NULL,1); INSERT INTO "usage" VALUES('EPSG','2930','geodetic_crs','EPSG','4008','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4009','Unknown datum based upon the Clarke 1866 Michigan ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6009',NULL,1); INSERT INTO "usage" VALUES('EPSG','2931','geodetic_crs','EPSG','4009','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4010','Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6010',NULL,1); INSERT INTO "usage" VALUES('EPSG','2932','geodetic_crs','EPSG','4010','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4011','Unknown datum based upon the Clarke 1880 (IGN) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6011',NULL,1); INSERT INTO "usage" VALUES('EPSG','2933','geodetic_crs','EPSG','4011','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4012','Unknown datum based upon the Clarke 1880 (RGS) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6012',NULL,1); INSERT INTO "usage" VALUES('EPSG','2934','geodetic_crs','EPSG','4012','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4013','Unknown datum based upon the Clarke 1880 (Arc) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6013',NULL,1); INSERT INTO "usage" VALUES('EPSG','2935','geodetic_crs','EPSG','4013','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4014','Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6014',NULL,1); INSERT INTO "usage" VALUES('EPSG','2936','geodetic_crs','EPSG','4014','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4015','Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6015',NULL,1); INSERT INTO "usage" VALUES('EPSG','2937','geodetic_crs','EPSG','4015','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4016','Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6016',NULL,1); INSERT INTO "usage" VALUES('EPSG','2938','geodetic_crs','EPSG','4016','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4017','MOLDREF99',NULL,'geographic 3D','EPSG','6423','EPSG','1032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2939','geodetic_crs','EPSG','4017','EPSG','1162','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4018','Unknown datum based upon the Everest 1830 Modified ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6018',NULL,1); INSERT INTO "usage" VALUES('EPSG','2940','geodetic_crs','EPSG','4018','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4019','Unknown datum based upon the GRS 1980 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6019',NULL,1); INSERT INTO "usage" VALUES('EPSG','2941','geodetic_crs','EPSG','4019','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4020','Unknown datum based upon the Helmert 1906 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6020',NULL,1); INSERT INTO "usage" VALUES('EPSG','2942','geodetic_crs','EPSG','4020','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4021','Unknown datum based upon the Indonesian National Spheroid',NULL,'geographic 2D','EPSG','6422','EPSG','6021',NULL,1); INSERT INTO "usage" VALUES('EPSG','2943','geodetic_crs','EPSG','4021','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4022','Unknown datum based upon the International 1924 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6022',NULL,1); INSERT INTO "usage" VALUES('EPSG','2944','geodetic_crs','EPSG','4022','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4023','MOLDREF99',NULL,'geographic 2D','EPSG','6422','EPSG','1032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2945','geodetic_crs','EPSG','4023','EPSG','1162','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4024','Unknown datum based upon the Krassowsky 1940 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6024',NULL,1); INSERT INTO "usage" VALUES('EPSG','2946','geodetic_crs','EPSG','4024','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4025','Unknown datum based upon the NWL 9D ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6025',NULL,1); INSERT INTO "usage" VALUES('EPSG','2947','geodetic_crs','EPSG','4025','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4027','Unknown datum based upon the Plessis 1817 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6027',NULL,1); INSERT INTO "usage" VALUES('EPSG','2949','geodetic_crs','EPSG','4027','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4028','Unknown datum based upon the Struve 1860 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6028',NULL,1); INSERT INTO "usage" VALUES('EPSG','2950','geodetic_crs','EPSG','4028','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4029','Unknown datum based upon the War Office ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6029',NULL,1); INSERT INTO "usage" VALUES('EPSG','2951','geodetic_crs','EPSG','4029','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4030','Unknown datum based upon the WGS 84 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6030',NULL,1); INSERT INTO "usage" VALUES('EPSG','2952','geodetic_crs','EPSG','4030','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4031','Unknown datum based upon the GEM 10C ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6031',NULL,1); INSERT INTO "usage" VALUES('EPSG','2953','geodetic_crs','EPSG','4031','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4032','Unknown datum based upon the OSU86F ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6032',NULL,1); INSERT INTO "usage" VALUES('EPSG','2954','geodetic_crs','EPSG','4032','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4033','Unknown datum based upon the OSU91A ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6033',NULL,1); INSERT INTO "usage" VALUES('EPSG','2955','geodetic_crs','EPSG','4033','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4034','Unknown datum based upon the Clarke 1880 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6034',NULL,1); INSERT INTO "usage" VALUES('EPSG','2956','geodetic_crs','EPSG','4034','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4035','Unknown datum based upon the Authalic Sphere',NULL,'geographic 2D','EPSG','6402','EPSG','6035',NULL,1); INSERT INTO "usage" VALUES('EPSG','2957','geodetic_crs','EPSG','4035','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4036','Unknown datum based upon the GRS 1967 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6036',NULL,1); INSERT INTO "usage" VALUES('EPSG','2958','geodetic_crs','EPSG','4036','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4039','RGRDC 2005',NULL,'geocentric','EPSG','6500','EPSG','1033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2961','geodetic_crs','EPSG','4039','EPSG','3613','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4040','RGRDC 2005',NULL,'geographic 3D','EPSG','6423','EPSG','1033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2962','geodetic_crs','EPSG','4040','EPSG','3613','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4041','Unknown datum based upon the Average Terrestrial System 1977 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6041',NULL,1); INSERT INTO "usage" VALUES('EPSG','2963','geodetic_crs','EPSG','4041','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4042','Unknown datum based upon the Everest (1830 Definition) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6042',NULL,1); INSERT INTO "usage" VALUES('EPSG','2964','geodetic_crs','EPSG','4042','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4043','Unknown datum based upon the WGS 72 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6043',NULL,1); INSERT INTO "usage" VALUES('EPSG','2965','geodetic_crs','EPSG','4043','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4044','Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6044',NULL,1); INSERT INTO "usage" VALUES('EPSG','2966','geodetic_crs','EPSG','4044','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4045','Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6045',NULL,1); INSERT INTO "usage" VALUES('EPSG','2967','geodetic_crs','EPSG','4045','EPSG','1263','EPSG','1214'); INSERT INTO "geodetic_crs" VALUES('EPSG','4046','RGRDC 2005',NULL,'geographic 2D','EPSG','6422','EPSG','1033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2968','geodetic_crs','EPSG','4046','EPSG','3613','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4047','Unspecified datum based upon the GRS 1980 Authalic Sphere',NULL,'geographic 2D','EPSG','6422','EPSG','6047',NULL,1); INSERT INTO "usage" VALUES('EPSG','2969','geodetic_crs','EPSG','4047','EPSG','1263','EPSG','1162'); INSERT INTO "geodetic_crs" VALUES('EPSG','4052','Unspecified datum based upon the Clarke 1866 Authalic Sphere',NULL,'geographic 2D','EPSG','6422','EPSG','6052',NULL,1); INSERT INTO "usage" VALUES('EPSG','2974','geodetic_crs','EPSG','4052','EPSG','1263','EPSG','1162'); INSERT INTO "geodetic_crs" VALUES('EPSG','4053','Unspecified datum based upon the International 1924 Authalic Sphere',NULL,'geographic 2D','EPSG','6422','EPSG','6053',NULL,1); INSERT INTO "usage" VALUES('EPSG','2975','geodetic_crs','EPSG','4053','EPSG','1263','EPSG','1162'); INSERT INTO "geodetic_crs" VALUES('EPSG','4054','Unspecified datum based upon the Hughes 1980 ellipsoid',NULL,'geographic 2D','EPSG','6422','EPSG','6054',NULL,1); INSERT INTO "usage" VALUES('EPSG','2976','geodetic_crs','EPSG','4054','EPSG','1263','EPSG','1110'); INSERT INTO "geodetic_crs" VALUES('EPSG','4055','Popular Visualisation CRS',NULL,'geographic 2D','EPSG','6422','EPSG','6055',NULL,1); INSERT INTO "usage" VALUES('EPSG','2977','geodetic_crs','EPSG','4055','EPSG','1262','EPSG','1098'); INSERT INTO "geodetic_crs" VALUES('EPSG','4073','SREF98',NULL,'geocentric','EPSG','6500','EPSG','1034',NULL,0); INSERT INTO "usage" VALUES('EPSG','2987','geodetic_crs','EPSG','4073','EPSG','4543','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4074','SREF98',NULL,'geographic 3D','EPSG','6423','EPSG','1034',NULL,0); INSERT INTO "usage" VALUES('EPSG','2988','geodetic_crs','EPSG','4074','EPSG','4543','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4075','SREF98',NULL,'geographic 2D','EPSG','6422','EPSG','1034',NULL,0); INSERT INTO "usage" VALUES('EPSG','2989','geodetic_crs','EPSG','4075','EPSG','4543','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4079','REGCAN95',NULL,'geocentric','EPSG','6500','EPSG','1035',NULL,0); INSERT INTO "usage" VALUES('EPSG','2990','geodetic_crs','EPSG','4079','EPSG','3199','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4080','REGCAN95',NULL,'geographic 3D','EPSG','6423','EPSG','1035',NULL,0); INSERT INTO "usage" VALUES('EPSG','2991','geodetic_crs','EPSG','4080','EPSG','3199','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4081','REGCAN95',NULL,'geographic 2D','EPSG','6422','EPSG','1035',NULL,0); INSERT INTO "usage" VALUES('EPSG','2992','geodetic_crs','EPSG','4081','EPSG','3199','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4120','Greek',NULL,'geographic 2D','EPSG','6422','EPSG','6120',NULL,0); INSERT INTO "usage" VALUES('EPSG','3005','geodetic_crs','EPSG','4120','EPSG','3254','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4121','GGRS87',NULL,'geographic 2D','EPSG','6422','EPSG','6121',NULL,0); INSERT INTO "usage" VALUES('EPSG','3006','geodetic_crs','EPSG','4121','EPSG','3254','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4122','ATS77',NULL,'geographic 2D','EPSG','6422','EPSG','6122',NULL,0); INSERT INTO "usage" VALUES('EPSG','3007','geodetic_crs','EPSG','4122','EPSG','1283','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4123','KKJ',NULL,'geographic 2D','EPSG','6422','EPSG','6123',NULL,0); INSERT INTO "usage" VALUES('EPSG','3008','geodetic_crs','EPSG','4123','EPSG','3333','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4124','RT90',NULL,'geographic 2D','EPSG','6422','EPSG','6124',NULL,0); INSERT INTO "usage" VALUES('EPSG','3009','geodetic_crs','EPSG','4124','EPSG','1225','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4125','Samboja',NULL,'geographic 2D','EPSG','6402','EPSG','6125',NULL,1); INSERT INTO "usage" VALUES('EPSG','3010','geodetic_crs','EPSG','4125','EPSG','1328','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4126','LKS94 (ETRS89)',NULL,'geographic 2D','EPSG','6402','EPSG','6126',NULL,1); INSERT INTO "usage" VALUES('EPSG','3011','geodetic_crs','EPSG','4126','EPSG','1145','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4127','Tete',NULL,'geographic 2D','EPSG','6422','EPSG','6127',NULL,0); INSERT INTO "usage" VALUES('EPSG','3012','geodetic_crs','EPSG','4127','EPSG','3281','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4128','Madzansua',NULL,'geographic 2D','EPSG','6422','EPSG','6128',NULL,0); INSERT INTO "usage" VALUES('EPSG','3013','geodetic_crs','EPSG','4128','EPSG','1315','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4129','Observatario',NULL,'geographic 2D','EPSG','6422','EPSG','6129',NULL,0); INSERT INTO "usage" VALUES('EPSG','3014','geodetic_crs','EPSG','4129','EPSG','1329','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4130','Moznet',NULL,'geographic 2D','EPSG','6422','EPSG','6130',NULL,0); INSERT INTO "usage" VALUES('EPSG','3015','geodetic_crs','EPSG','4130','EPSG','1167','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4131','Indian 1960',NULL,'geographic 2D','EPSG','6422','EPSG','6131',NULL,0); INSERT INTO "usage" VALUES('EPSG','3016','geodetic_crs','EPSG','4131','EPSG','4007','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4132','FD58',NULL,'geographic 2D','EPSG','6422','EPSG','6132',NULL,0); INSERT INTO "usage" VALUES('EPSG','3017','geodetic_crs','EPSG','4132','EPSG','1300','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4133','EST92',NULL,'geographic 2D','EPSG','6422','EPSG','6133',NULL,0); INSERT INTO "usage" VALUES('EPSG','3018','geodetic_crs','EPSG','4133','EPSG','3246','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4134','PSD93',NULL,'geographic 2D','EPSG','6422','EPSG','6134',NULL,0); INSERT INTO "usage" VALUES('EPSG','3019','geodetic_crs','EPSG','4134','EPSG','3288','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4135','Old Hawaiian',NULL,'geographic 2D','EPSG','6422','EPSG','6135',NULL,0); INSERT INTO "usage" VALUES('EPSG','3020','geodetic_crs','EPSG','4135','EPSG','1334','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4136','St. Lawrence Island',NULL,'geographic 2D','EPSG','6422','EPSG','6136',NULL,0); INSERT INTO "usage" VALUES('EPSG','3021','geodetic_crs','EPSG','4136','EPSG','1332','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4137','St. Paul Island',NULL,'geographic 2D','EPSG','6422','EPSG','6137',NULL,0); INSERT INTO "usage" VALUES('EPSG','3022','geodetic_crs','EPSG','4137','EPSG','1333','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4138','St. George Island',NULL,'geographic 2D','EPSG','6422','EPSG','6138',NULL,0); INSERT INTO "usage" VALUES('EPSG','3023','geodetic_crs','EPSG','4138','EPSG','1331','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4139','Puerto Rico',NULL,'geographic 2D','EPSG','6422','EPSG','6139',NULL,0); INSERT INTO "usage" VALUES('EPSG','3024','geodetic_crs','EPSG','4139','EPSG','1335','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4140','NAD83(CSRS98)',NULL,'geographic 2D','EPSG','6402','EPSG','6140',NULL,1); INSERT INTO "usage" VALUES('EPSG','3025','geodetic_crs','EPSG','4140','EPSG','1336','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4141','Israel 1993',NULL,'geographic 2D','EPSG','6422','EPSG','6141',NULL,0); INSERT INTO "usage" VALUES('EPSG','3026','geodetic_crs','EPSG','4141','EPSG','2603','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4142','Locodjo 1965',NULL,'geographic 2D','EPSG','6422','EPSG','6142',NULL,0); INSERT INTO "usage" VALUES('EPSG','3027','geodetic_crs','EPSG','4142','EPSG','1075','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4143','Abidjan 1987',NULL,'geographic 2D','EPSG','6422','EPSG','6143',NULL,0); INSERT INTO "usage" VALUES('EPSG','3028','geodetic_crs','EPSG','4143','EPSG','1075','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4144','Kalianpur 1937',NULL,'geographic 2D','EPSG','6422','EPSG','6144',NULL,0); INSERT INTO "usage" VALUES('EPSG','3029','geodetic_crs','EPSG','4144','EPSG','1308','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4145','Kalianpur 1962',NULL,'geographic 2D','EPSG','6422','EPSG','6145',NULL,0); INSERT INTO "usage" VALUES('EPSG','3030','geodetic_crs','EPSG','4145','EPSG','1184','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4146','Kalianpur 1975',NULL,'geographic 2D','EPSG','6422','EPSG','6146',NULL,0); INSERT INTO "usage" VALUES('EPSG','3031','geodetic_crs','EPSG','4146','EPSG','3341','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4147','Hanoi 1972',NULL,'geographic 2D','EPSG','6422','EPSG','6147',NULL,0); INSERT INTO "usage" VALUES('EPSG','3032','geodetic_crs','EPSG','4147','EPSG','3328','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4148','Hartebeesthoek94',NULL,'geographic 2D','EPSG','6422','EPSG','6148',NULL,0); INSERT INTO "usage" VALUES('EPSG','3033','geodetic_crs','EPSG','4148','EPSG','4540','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4149','CH1903',NULL,'geographic 2D','EPSG','6422','EPSG','6149',NULL,0); INSERT INTO "usage" VALUES('EPSG','3034','geodetic_crs','EPSG','4149','EPSG','1286','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4150','CH1903+',NULL,'geographic 2D','EPSG','6422','EPSG','6150',NULL,0); INSERT INTO "usage" VALUES('EPSG','3035','geodetic_crs','EPSG','4150','EPSG','1286','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4151','CHTRS95',NULL,'geographic 2D','EPSG','6422','EPSG','6151',NULL,0); INSERT INTO "usage" VALUES('EPSG','3036','geodetic_crs','EPSG','4151','EPSG','1286','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4152','NAD83(HARN)',NULL,'geographic 2D','EPSG','6422','EPSG','6152',NULL,0); INSERT INTO "usage" VALUES('EPSG','3037','geodetic_crs','EPSG','4152','EPSG','1337','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4153','Rassadiran',NULL,'geographic 2D','EPSG','6422','EPSG','6153',NULL,0); INSERT INTO "usage" VALUES('EPSG','3038','geodetic_crs','EPSG','4153','EPSG','1338','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4154','ED50(ED77)',NULL,'geographic 2D','EPSG','6422','EPSG','6154',NULL,0); INSERT INTO "usage" VALUES('EPSG','3039','geodetic_crs','EPSG','4154','EPSG','1123','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4155','Dabola 1981',NULL,'geographic 2D','EPSG','6422','EPSG','6155',NULL,0); INSERT INTO "usage" VALUES('EPSG','3040','geodetic_crs','EPSG','4155','EPSG','3257','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4156','S-JTSK',NULL,'geographic 2D','EPSG','6422','EPSG','6156',NULL,0); INSERT INTO "usage" VALUES('EPSG','3041','geodetic_crs','EPSG','4156','EPSG','1306','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4157','Mount Dillon',NULL,'geographic 2D','EPSG','6422','EPSG','6157',NULL,0); INSERT INTO "usage" VALUES('EPSG','3042','geodetic_crs','EPSG','4157','EPSG','1322','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4158','Naparima 1955',NULL,'geographic 2D','EPSG','6422','EPSG','6158',NULL,0); INSERT INTO "usage" VALUES('EPSG','3043','geodetic_crs','EPSG','4158','EPSG','3143','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4159','ELD79',NULL,'geographic 2D','EPSG','6422','EPSG','6159',NULL,0); INSERT INTO "usage" VALUES('EPSG','3044','geodetic_crs','EPSG','4159','EPSG','1143','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4160','Chos Malal 1914',NULL,'geographic 2D','EPSG','6422','EPSG','6160',NULL,0); INSERT INTO "usage" VALUES('EPSG','3045','geodetic_crs','EPSG','4160','EPSG','4562','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4161','Pampa del Castillo',NULL,'geographic 2D','EPSG','6422','EPSG','6161',NULL,0); INSERT INTO "usage" VALUES('EPSG','3046','geodetic_crs','EPSG','4161','EPSG','4563','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','4162','Korean 1985',NULL,'geographic 2D','EPSG','6422','EPSG','6162',NULL,0); INSERT INTO "usage" VALUES('EPSG','3047','geodetic_crs','EPSG','4162','EPSG','3266','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4163','Yemen NGN96',NULL,'geographic 2D','EPSG','6422','EPSG','6163',NULL,0); INSERT INTO "usage" VALUES('EPSG','3048','geodetic_crs','EPSG','4163','EPSG','1257','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4164','South Yemen',NULL,'geographic 2D','EPSG','6422','EPSG','6164',NULL,0); INSERT INTO "usage" VALUES('EPSG','3049','geodetic_crs','EPSG','4164','EPSG','1340','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4165','Bissau',NULL,'geographic 2D','EPSG','6422','EPSG','6165',NULL,0); INSERT INTO "usage" VALUES('EPSG','3050','geodetic_crs','EPSG','4165','EPSG','3258','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4166','Korean 1995',NULL,'geographic 2D','EPSG','6422','EPSG','6166',NULL,0); INSERT INTO "usage" VALUES('EPSG','3051','geodetic_crs','EPSG','4166','EPSG','3266','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4167','NZGD2000',NULL,'geographic 2D','EPSG','6422','EPSG','6167',NULL,0); INSERT INTO "usage" VALUES('EPSG','3052','geodetic_crs','EPSG','4167','EPSG','1175','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4168','Accra',NULL,'geographic 2D','EPSG','6422','EPSG','6168',NULL,0); INSERT INTO "usage" VALUES('EPSG','3053','geodetic_crs','EPSG','4168','EPSG','1104','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4169','American Samoa 1962',NULL,'geographic 2D','EPSG','6422','EPSG','6169',NULL,0); INSERT INTO "usage" VALUES('EPSG','3054','geodetic_crs','EPSG','4169','EPSG','3109','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4170','SIRGAS 1995',NULL,'geographic 2D','EPSG','6422','EPSG','6170',NULL,0); INSERT INTO "usage" VALUES('EPSG','3055','geodetic_crs','EPSG','4170','EPSG','3448','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4171','RGF93 v1',NULL,'geographic 2D','EPSG','6422','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('EPSG','3056','geodetic_crs','EPSG','4171','EPSG','1096','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4172','POSGAR',NULL,'geographic 2D','EPSG','6402','EPSG','6172',NULL,1); INSERT INTO "usage" VALUES('EPSG','3057','geodetic_crs','EPSG','4172','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4173','IRENET95',NULL,'geographic 2D','EPSG','6422','EPSG','6173',NULL,0); INSERT INTO "usage" VALUES('EPSG','3058','geodetic_crs','EPSG','4173','EPSG','1305','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4174','Sierra Leone 1924',NULL,'geographic 2D','EPSG','6422','EPSG','6174',NULL,0); INSERT INTO "usage" VALUES('EPSG','3059','geodetic_crs','EPSG','4174','EPSG','1342','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4175','Sierra Leone 1968',NULL,'geographic 2D','EPSG','6422','EPSG','6175',NULL,0); INSERT INTO "usage" VALUES('EPSG','3060','geodetic_crs','EPSG','4175','EPSG','3306','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4176','Australian Antarctic',NULL,'geographic 2D','EPSG','6422','EPSG','6176',NULL,0); INSERT INTO "usage" VALUES('EPSG','3061','geodetic_crs','EPSG','4176','EPSG','1278','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4178','Pulkovo 1942(83)',NULL,'geographic 2D','EPSG','6422','EPSG','6178',NULL,0); INSERT INTO "usage" VALUES('EPSG','3062','geodetic_crs','EPSG','4178','EPSG','3900','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4179','Pulkovo 1942(58)',NULL,'geographic 2D','EPSG','6422','EPSG','6179',NULL,0); INSERT INTO "usage" VALUES('EPSG','3063','geodetic_crs','EPSG','4179','EPSG','3574','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4180','EST97',NULL,'geographic 2D','EPSG','6422','EPSG','6180',NULL,0); INSERT INTO "usage" VALUES('EPSG','3064','geodetic_crs','EPSG','4180','EPSG','1090','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4181','LUREF',NULL,'geographic 2D','EPSG','6422','EPSG','6181',NULL,0); INSERT INTO "usage" VALUES('EPSG','3065','geodetic_crs','EPSG','4181','EPSG','1146','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4182','Azores Occidental 1939',NULL,'geographic 2D','EPSG','6422','EPSG','6182',NULL,0); INSERT INTO "usage" VALUES('EPSG','3066','geodetic_crs','EPSG','4182','EPSG','1344','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4183','Azores Central 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6183',NULL,0); INSERT INTO "usage" VALUES('EPSG','3067','geodetic_crs','EPSG','4183','EPSG','1301','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4184','Azores Oriental 1940',NULL,'geographic 2D','EPSG','6422','EPSG','6184',NULL,0); INSERT INTO "usage" VALUES('EPSG','3068','geodetic_crs','EPSG','4184','EPSG','1345','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4185','Madeira 1936',NULL,'geographic 2D','EPSG','6402','EPSG','6185',NULL,1); INSERT INTO "usage" VALUES('EPSG','3069','geodetic_crs','EPSG','4185','EPSG','1314','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4188','OSNI 1952',NULL,'geographic 2D','EPSG','6422','EPSG','6188',NULL,0); INSERT INTO "usage" VALUES('EPSG','3070','geodetic_crs','EPSG','4188','EPSG','2530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4189','REGVEN',NULL,'geographic 2D','EPSG','6422','EPSG','6189',NULL,0); INSERT INTO "usage" VALUES('EPSG','3071','geodetic_crs','EPSG','4189','EPSG','1251','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4190','POSGAR 98',NULL,'geographic 2D','EPSG','6422','EPSG','6190',NULL,0); INSERT INTO "usage" VALUES('EPSG','3072','geodetic_crs','EPSG','4190','EPSG','1033','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4191','Albanian 1987',NULL,'geographic 2D','EPSG','6422','EPSG','6191',NULL,0); INSERT INTO "usage" VALUES('EPSG','3073','geodetic_crs','EPSG','4191','EPSG','3212','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4192','Douala 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6192',NULL,0); INSERT INTO "usage" VALUES('EPSG','3074','geodetic_crs','EPSG','4192','EPSG','2555','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4193','Manoca 1962',NULL,'geographic 2D','EPSG','6422','EPSG','6193',NULL,0); INSERT INTO "usage" VALUES('EPSG','3075','geodetic_crs','EPSG','4193','EPSG','2555','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4194','Qornoq 1927',NULL,'geographic 2D','EPSG','6422','EPSG','6194',NULL,0); INSERT INTO "usage" VALUES('EPSG','3076','geodetic_crs','EPSG','4194','EPSG','3362','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4195','Scoresbysund 1952',NULL,'geographic 2D','EPSG','6422','EPSG','6195',NULL,0); INSERT INTO "usage" VALUES('EPSG','3077','geodetic_crs','EPSG','4195','EPSG','2570','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4196','Ammassalik 1958',NULL,'geographic 2D','EPSG','6422','EPSG','6196',NULL,0); INSERT INTO "usage" VALUES('EPSG','3078','geodetic_crs','EPSG','4196','EPSG','2571','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4197','Garoua',NULL,'geographic 2D','EPSG','6422','EPSG','6197',NULL,0); INSERT INTO "usage" VALUES('EPSG','3079','geodetic_crs','EPSG','4197','EPSG','2590','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4198','Kousseri',NULL,'geographic 2D','EPSG','6422','EPSG','6198',NULL,0); INSERT INTO "usage" VALUES('EPSG','3080','geodetic_crs','EPSG','4198','EPSG','2591','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4199','Egypt 1930',NULL,'geographic 2D','EPSG','6422','EPSG','6199',NULL,0); INSERT INTO "usage" VALUES('EPSG','3081','geodetic_crs','EPSG','4199','EPSG','3242','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4200','Pulkovo 1995',NULL,'geographic 2D','EPSG','6422','EPSG','6200',NULL,0); INSERT INTO "usage" VALUES('EPSG','3082','geodetic_crs','EPSG','4200','EPSG','1198','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4201','Adindan',NULL,'geographic 2D','EPSG','6422','EPSG','6201',NULL,0); INSERT INTO "usage" VALUES('EPSG','3083','geodetic_crs','EPSG','4201','EPSG','1271','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4202','AGD66',NULL,'geographic 2D','EPSG','6422','EPSG','6202',NULL,0); INSERT INTO "usage" VALUES('EPSG','3084','geodetic_crs','EPSG','4202','EPSG','1279','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4203','AGD84',NULL,'geographic 2D','EPSG','6422','EPSG','6203',NULL,0); INSERT INTO "usage" VALUES('EPSG','3085','geodetic_crs','EPSG','4203','EPSG','2576','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4204','Ain el Abd',NULL,'geographic 2D','EPSG','6422','EPSG','6204',NULL,0); INSERT INTO "usage" VALUES('EPSG','3086','geodetic_crs','EPSG','4204','EPSG','1272','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4205','Afgooye',NULL,'geographic 2D','EPSG','6422','EPSG','6205',NULL,0); INSERT INTO "usage" VALUES('EPSG','3087','geodetic_crs','EPSG','4205','EPSG','3308','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4206','Agadez',NULL,'geographic 2D','EPSG','6422','EPSG','6206',NULL,0); INSERT INTO "usage" VALUES('EPSG','3088','geodetic_crs','EPSG','4206','EPSG','1177','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4207','Lisbon',NULL,'geographic 2D','EPSG','6422','EPSG','6207',NULL,0); INSERT INTO "usage" VALUES('EPSG','3089','geodetic_crs','EPSG','4207','EPSG','1294','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4208','Aratu',NULL,'geographic 2D','EPSG','6422','EPSG','6208',NULL,0); INSERT INTO "usage" VALUES('EPSG','3090','geodetic_crs','EPSG','4208','EPSG','1274','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4209','Arc 1950',NULL,'geographic 2D','EPSG','6422','EPSG','6209',NULL,0); INSERT INTO "usage" VALUES('EPSG','3091','geodetic_crs','EPSG','4209','EPSG','1276','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4210','Arc 1960',NULL,'geographic 2D','EPSG','6422','EPSG','6210',NULL,0); INSERT INTO "usage" VALUES('EPSG','3092','geodetic_crs','EPSG','4210','EPSG','1277','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4211','Batavia',NULL,'geographic 2D','EPSG','6422','EPSG','6211',NULL,0); INSERT INTO "usage" VALUES('EPSG','3093','geodetic_crs','EPSG','4211','EPSG','3666','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4212','Barbados 1938',NULL,'geographic 2D','EPSG','6422','EPSG','6212',NULL,0); INSERT INTO "usage" VALUES('EPSG','3094','geodetic_crs','EPSG','4212','EPSG','3218','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4213','Beduaram',NULL,'geographic 2D','EPSG','6422','EPSG','6213',NULL,0); INSERT INTO "usage" VALUES('EPSG','3095','geodetic_crs','EPSG','4213','EPSG','2771','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4214','Beijing 1954',NULL,'geographic 2D','EPSG','6422','EPSG','6214',NULL,0); INSERT INTO "usage" VALUES('EPSG','3096','geodetic_crs','EPSG','4214','EPSG','1067','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4215','BD50',NULL,'geographic 2D','EPSG','6422','EPSG','6215',NULL,0); INSERT INTO "usage" VALUES('EPSG','3097','geodetic_crs','EPSG','4215','EPSG','1347','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4216','Bermuda 1957',NULL,'geographic 2D','EPSG','6422','EPSG','6216',NULL,0); INSERT INTO "usage" VALUES('EPSG','3098','geodetic_crs','EPSG','4216','EPSG','3221','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4218','Bogota 1975',NULL,'geographic 2D','EPSG','6422','EPSG','6218',NULL,0); INSERT INTO "usage" VALUES('EPSG','3100','geodetic_crs','EPSG','4218','EPSG','3686','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4219','Bukit Rimpah',NULL,'geographic 2D','EPSG','6422','EPSG','6219',NULL,0); INSERT INTO "usage" VALUES('EPSG','3101','geodetic_crs','EPSG','4219','EPSG','1287','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4220','Camacupa 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6220',NULL,0); INSERT INTO "usage" VALUES('EPSG','3102','geodetic_crs','EPSG','4220','EPSG','1288','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','4221','Campo Inchauspe',NULL,'geographic 2D','EPSG','6422','EPSG','6221',NULL,0); INSERT INTO "usage" VALUES('EPSG','3103','geodetic_crs','EPSG','4221','EPSG','3843','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4222','Cape',NULL,'geographic 2D','EPSG','6422','EPSG','6222',NULL,0); INSERT INTO "usage" VALUES('EPSG','3104','geodetic_crs','EPSG','4222','EPSG','1290','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4223','Carthage',NULL,'geographic 2D','EPSG','6422','EPSG','6223',NULL,0); INSERT INTO "usage" VALUES('EPSG','3105','geodetic_crs','EPSG','4223','EPSG','1236','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4224','Chua',NULL,'geographic 2D','EPSG','6422','EPSG','6224',NULL,0); INSERT INTO "usage" VALUES('EPSG','3106','geodetic_crs','EPSG','4224','EPSG','3356','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4225','Corrego Alegre 1970-72',NULL,'geographic 2D','EPSG','6422','EPSG','6225',NULL,0); INSERT INTO "usage" VALUES('EPSG','3107','geodetic_crs','EPSG','4225','EPSG','1293','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4226','Cote d''Ivoire',NULL,'geographic 2D','EPSG','6402','EPSG','6226',NULL,1); INSERT INTO "usage" VALUES('EPSG','3108','geodetic_crs','EPSG','4226','EPSG','1075','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4227','Deir ez Zor',NULL,'geographic 2D','EPSG','6422','EPSG','6227',NULL,0); INSERT INTO "usage" VALUES('EPSG','3109','geodetic_crs','EPSG','4227','EPSG','1623','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4228','Douala',NULL,'geographic 2D','EPSG','6402','EPSG','6228',NULL,1); INSERT INTO "usage" VALUES('EPSG','3110','geodetic_crs','EPSG','4228','EPSG','1060','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4229','Egypt 1907',NULL,'geographic 2D','EPSG','6422','EPSG','6229',NULL,0); INSERT INTO "usage" VALUES('EPSG','3111','geodetic_crs','EPSG','4229','EPSG','1086','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4230','ED50',NULL,'geographic 2D','EPSG','6422','EPSG','6230',NULL,0); INSERT INTO "usage" VALUES('EPSG','3112','geodetic_crs','EPSG','4230','EPSG','1296','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4231','ED87',NULL,'geographic 2D','EPSG','6422','EPSG','6231',NULL,0); INSERT INTO "usage" VALUES('EPSG','3113','geodetic_crs','EPSG','4231','EPSG','1297','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4232','Fahud',NULL,'geographic 2D','EPSG','6422','EPSG','6232',NULL,0); INSERT INTO "usage" VALUES('EPSG','3114','geodetic_crs','EPSG','4232','EPSG','4009','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4233','Gandajika 1970',NULL,'geographic 2D','EPSG','6422','EPSG','6233',NULL,1); INSERT INTO "usage" VALUES('EPSG','3115','geodetic_crs','EPSG','4233','EPSG','1152','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4234','Garoua',NULL,'geographic 2D','EPSG','6402','EPSG','6234',NULL,1); INSERT INTO "usage" VALUES('EPSG','3116','geodetic_crs','EPSG','4234','EPSG','1060','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4235','Guyane Francaise',NULL,'geographic 2D','EPSG','6402','EPSG','6235',NULL,1); INSERT INTO "usage" VALUES('EPSG','3117','geodetic_crs','EPSG','4235','EPSG','1097','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4236','Hu Tzu Shan 1950',NULL,'geographic 2D','EPSG','6422','EPSG','6236',NULL,0); INSERT INTO "usage" VALUES('EPSG','3118','geodetic_crs','EPSG','4236','EPSG','3315','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4237','HD72',NULL,'geographic 2D','EPSG','6422','EPSG','6237',NULL,0); INSERT INTO "usage" VALUES('EPSG','3119','geodetic_crs','EPSG','4237','EPSG','1119','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4238','ID74',NULL,'geographic 2D','EPSG','6422','EPSG','6238',NULL,0); INSERT INTO "usage" VALUES('EPSG','3120','geodetic_crs','EPSG','4238','EPSG','4020','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4239','Indian 1954',NULL,'geographic 2D','EPSG','6422','EPSG','6239',NULL,0); INSERT INTO "usage" VALUES('EPSG','3121','geodetic_crs','EPSG','4239','EPSG','1304','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4240','Indian 1975',NULL,'geographic 2D','EPSG','6422','EPSG','6240',NULL,0); INSERT INTO "usage" VALUES('EPSG','3122','geodetic_crs','EPSG','4240','EPSG','3741','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4241','Jamaica 1875',NULL,'geographic 2D','EPSG','6422','EPSG','6241',NULL,0); INSERT INTO "usage" VALUES('EPSG','3123','geodetic_crs','EPSG','4241','EPSG','3342','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4242','JAD69',NULL,'geographic 2D','EPSG','6422','EPSG','6242',NULL,0); INSERT INTO "usage" VALUES('EPSG','3124','geodetic_crs','EPSG','4242','EPSG','3342','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4243','Kalianpur 1880',NULL,'geographic 2D','EPSG','6422','EPSG','6243',NULL,0); INSERT INTO "usage" VALUES('EPSG','3125','geodetic_crs','EPSG','4243','EPSG','1307','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4244','Kandawala',NULL,'geographic 2D','EPSG','6422','EPSG','6244',NULL,0); INSERT INTO "usage" VALUES('EPSG','3126','geodetic_crs','EPSG','4244','EPSG','3310','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4245','Kertau 1968',NULL,'geographic 2D','EPSG','6422','EPSG','6245',NULL,0); INSERT INTO "usage" VALUES('EPSG','3127','geodetic_crs','EPSG','4245','EPSG','4223','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4246','KOC',NULL,'geographic 2D','EPSG','6422','EPSG','6246',NULL,0); INSERT INTO "usage" VALUES('EPSG','3128','geodetic_crs','EPSG','4246','EPSG','3267','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4247','La Canoa',NULL,'geographic 2D','EPSG','6422','EPSG','6247',NULL,0); INSERT INTO "usage" VALUES('EPSG','3129','geodetic_crs','EPSG','4247','EPSG','3327','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4248','PSAD56',NULL,'geographic 2D','EPSG','6422','EPSG','6248',NULL,0); INSERT INTO "usage" VALUES('EPSG','3130','geodetic_crs','EPSG','4248','EPSG','1348','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4249','Lake',NULL,'geographic 2D','EPSG','6422','EPSG','6249',NULL,0); INSERT INTO "usage" VALUES('EPSG','3131','geodetic_crs','EPSG','4249','EPSG','1312','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4250','Leigon',NULL,'geographic 2D','EPSG','6422','EPSG','6250',NULL,0); INSERT INTO "usage" VALUES('EPSG','3132','geodetic_crs','EPSG','4250','EPSG','1104','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4251','Liberia 1964',NULL,'geographic 2D','EPSG','6422','EPSG','6251',NULL,0); INSERT INTO "usage" VALUES('EPSG','3133','geodetic_crs','EPSG','4251','EPSG','3270','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4252','Lome',NULL,'geographic 2D','EPSG','6422','EPSG','6252',NULL,0); INSERT INTO "usage" VALUES('EPSG','3134','geodetic_crs','EPSG','4252','EPSG','1232','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4253','Luzon 1911',NULL,'geographic 2D','EPSG','6422','EPSG','6253',NULL,0); INSERT INTO "usage" VALUES('EPSG','3135','geodetic_crs','EPSG','4253','EPSG','3969','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4254','Hito XVIII 1963',NULL,'geographic 2D','EPSG','6422','EPSG','6254',NULL,0); INSERT INTO "usage" VALUES('EPSG','3136','geodetic_crs','EPSG','4254','EPSG','1303','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4255','Herat North',NULL,'geographic 2D','EPSG','6422','EPSG','6255',NULL,0); INSERT INTO "usage" VALUES('EPSG','3137','geodetic_crs','EPSG','4255','EPSG','1024','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4256','Mahe 1971',NULL,'geographic 2D','EPSG','6422','EPSG','6256',NULL,0); INSERT INTO "usage" VALUES('EPSG','3138','geodetic_crs','EPSG','4256','EPSG','2369','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4257','Makassar',NULL,'geographic 2D','EPSG','6422','EPSG','6257',NULL,0); INSERT INTO "usage" VALUES('EPSG','3139','geodetic_crs','EPSG','4257','EPSG','1316','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4258','ETRS89',NULL,'geographic 2D','EPSG','6422','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('EPSG','3140','geodetic_crs','EPSG','4258','EPSG','4755','EPSG','1026'); INSERT INTO "geodetic_crs" VALUES('EPSG','4259','Malongo 1987',NULL,'geographic 2D','EPSG','6422','EPSG','6259',NULL,0); INSERT INTO "usage" VALUES('EPSG','3141','geodetic_crs','EPSG','4259','EPSG','3180','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','4260','Manoca',NULL,'geographic 2D','EPSG','6402','EPSG','6260',NULL,1); INSERT INTO "usage" VALUES('EPSG','3142','geodetic_crs','EPSG','4260','EPSG','1060','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4261','Merchich',NULL,'geographic 2D','EPSG','6422','EPSG','6261',NULL,0); INSERT INTO "usage" VALUES('EPSG','3143','geodetic_crs','EPSG','4261','EPSG','4581','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4262','Massawa',NULL,'geographic 2D','EPSG','6422','EPSG','6262',NULL,0); INSERT INTO "usage" VALUES('EPSG','3144','geodetic_crs','EPSG','4262','EPSG','1089','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4263','Minna',NULL,'geographic 2D','EPSG','6422','EPSG','6263',NULL,0); INSERT INTO "usage" VALUES('EPSG','3145','geodetic_crs','EPSG','4263','EPSG','1178','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4264','Mhast',NULL,'geographic 2D','EPSG','6422','EPSG','6264',NULL,1); INSERT INTO "usage" VALUES('EPSG','3146','geodetic_crs','EPSG','4264','EPSG','1318','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4265','Monte Mario',NULL,'geographic 2D','EPSG','6422','EPSG','6265',NULL,0); INSERT INTO "usage" VALUES('EPSG','3147','geodetic_crs','EPSG','4265','EPSG','3343','EPSG','1187'); INSERT INTO "geodetic_crs" VALUES('EPSG','4266','M''poraloko',NULL,'geographic 2D','EPSG','6422','EPSG','6266',NULL,0); INSERT INTO "usage" VALUES('EPSG','3148','geodetic_crs','EPSG','4266','EPSG','1100','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4267','NAD27',NULL,'geographic 2D','EPSG','6422','EPSG','6267',NULL,0); INSERT INTO "usage" VALUES('EPSG','3149','geodetic_crs','EPSG','4267','EPSG','1349','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4268','NAD27 Michigan',NULL,'geographic 2D','EPSG','6422','EPSG','6268',NULL,1); INSERT INTO "usage" VALUES('EPSG','3150','geodetic_crs','EPSG','4268','EPSG','1391','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4269','NAD83',NULL,'geographic 2D','EPSG','6422','EPSG','6269',NULL,0); INSERT INTO "usage" VALUES('EPSG','3151','geodetic_crs','EPSG','4269','EPSG','1350','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4270','Nahrwan 1967',NULL,'geographic 2D','EPSG','6422','EPSG','6270',NULL,0); INSERT INTO "usage" VALUES('EPSG','3152','geodetic_crs','EPSG','4270','EPSG','1351','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4271','Naparima 1972',NULL,'geographic 2D','EPSG','6422','EPSG','6271',NULL,0); INSERT INTO "usage" VALUES('EPSG','3153','geodetic_crs','EPSG','4271','EPSG','1322','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4272','NZGD49',NULL,'geographic 2D','EPSG','6422','EPSG','6272',NULL,0); INSERT INTO "usage" VALUES('EPSG','3154','geodetic_crs','EPSG','4272','EPSG','3285','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4273','NGO 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6273',NULL,0); INSERT INTO "usage" VALUES('EPSG','3155','geodetic_crs','EPSG','4273','EPSG','1352','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4274','Datum 73',NULL,'geographic 2D','EPSG','6422','EPSG','6274',NULL,0); INSERT INTO "usage" VALUES('EPSG','3156','geodetic_crs','EPSG','4274','EPSG','1294','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4275','NTF',NULL,'geographic 2D','EPSG','6422','EPSG','6275',NULL,0); INSERT INTO "usage" VALUES('EPSG','3157','geodetic_crs','EPSG','4275','EPSG','3694','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4276','NSWC 9Z-2',NULL,'geographic 2D','EPSG','6422','EPSG','6276',NULL,0); INSERT INTO "usage" VALUES('EPSG','3158','geodetic_crs','EPSG','4276','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4277','OSGB36',NULL,'geographic 2D','EPSG','6422','EPSG','6277',NULL,0); INSERT INTO "usage" VALUES('EPSG','3159','geodetic_crs','EPSG','4277','EPSG','4390','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4278','OSGB70',NULL,'geographic 2D','EPSG','6422','EPSG','6278',NULL,0); INSERT INTO "usage" VALUES('EPSG','3160','geodetic_crs','EPSG','4278','EPSG','1264','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4279','OS(SN)80',NULL,'geographic 2D','EPSG','6422','EPSG','6279',NULL,0); INSERT INTO "usage" VALUES('EPSG','3161','geodetic_crs','EPSG','4279','EPSG','1354','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4280','Padang',NULL,'geographic 2D','EPSG','6422','EPSG','6280',NULL,1); INSERT INTO "usage" VALUES('EPSG','3162','geodetic_crs','EPSG','4280','EPSG','1355','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4281','Palestine 1923',NULL,'geographic 2D','EPSG','6422','EPSG','6281',NULL,0); INSERT INTO "usage" VALUES('EPSG','3163','geodetic_crs','EPSG','4281','EPSG','1356','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4282','Pointe Noire',NULL,'geographic 2D','EPSG','6422','EPSG','6282',NULL,0); INSERT INTO "usage" VALUES('EPSG','3164','geodetic_crs','EPSG','4282','EPSG','1072','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4283','GDA94',NULL,'geographic 2D','EPSG','6422','EPSG','6283',NULL,0); INSERT INTO "usage" VALUES('EPSG','3165','geodetic_crs','EPSG','4283','EPSG','4177','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4284','Pulkovo 1942',NULL,'geographic 2D','EPSG','6422','EPSG','6284',NULL,0); INSERT INTO "usage" VALUES('EPSG','3166','geodetic_crs','EPSG','4284','EPSG','2423','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4285','Qatar 1974',NULL,'geographic 2D','EPSG','6422','EPSG','6285',NULL,0); INSERT INTO "usage" VALUES('EPSG','3167','geodetic_crs','EPSG','4285','EPSG','1195','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4286','Qatar 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6286',NULL,0); INSERT INTO "usage" VALUES('EPSG','3168','geodetic_crs','EPSG','4286','EPSG','1346','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4287','Qornoq',NULL,'geographic 2D','EPSG','6402','EPSG','6287',NULL,1); INSERT INTO "usage" VALUES('EPSG','3169','geodetic_crs','EPSG','4287','EPSG','1107','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4288','Loma Quintana',NULL,'geographic 2D','EPSG','6422','EPSG','6288',NULL,0); INSERT INTO "usage" VALUES('EPSG','3170','geodetic_crs','EPSG','4288','EPSG','1313','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4289','Amersfoort',NULL,'geographic 2D','EPSG','6422','EPSG','6289',NULL,0); INSERT INTO "usage" VALUES('EPSG','3171','geodetic_crs','EPSG','4289','EPSG','1275','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','4291','SAD69',NULL,'geographic 2D','EPSG','6402','EPSG','6291',NULL,1); INSERT INTO "usage" VALUES('EPSG','3172','geodetic_crs','EPSG','4291','EPSG','1358','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4292','Sapper Hill 1943',NULL,'geographic 2D','EPSG','6422','EPSG','6292',NULL,0); INSERT INTO "usage" VALUES('EPSG','3173','geodetic_crs','EPSG','4292','EPSG','3247','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4293','Schwarzeck',NULL,'geographic 2D','EPSG','6422','EPSG','6293',NULL,0); INSERT INTO "usage" VALUES('EPSG','3174','geodetic_crs','EPSG','4293','EPSG','1169','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4294','Segora',NULL,'geographic 2D','EPSG','6402','EPSG','6294',NULL,1); INSERT INTO "usage" VALUES('EPSG','3175','geodetic_crs','EPSG','4294','EPSG','1359','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4295','Serindung',NULL,'geographic 2D','EPSG','6422','EPSG','6295',NULL,0); INSERT INTO "usage" VALUES('EPSG','3176','geodetic_crs','EPSG','4295','EPSG','4005','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4296','Sudan',NULL,'geographic 2D','EPSG','6402','EPSG','6296',NULL,1); INSERT INTO "usage" VALUES('EPSG','3177','geodetic_crs','EPSG','4296','EPSG','1361','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4297','Tananarive',NULL,'geographic 2D','EPSG','6422','EPSG','6297',NULL,0); INSERT INTO "usage" VALUES('EPSG','3178','geodetic_crs','EPSG','4297','EPSG','1149','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4298','Timbalai 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6298',NULL,0); INSERT INTO "usage" VALUES('EPSG','3179','geodetic_crs','EPSG','4298','EPSG','1362','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4299','TM65',NULL,'geographic 2D','EPSG','6422','EPSG','6299',NULL,0); INSERT INTO "usage" VALUES('EPSG','3180','geodetic_crs','EPSG','4299','EPSG','1305','EPSG','1089'); INSERT INTO "geodetic_crs" VALUES('EPSG','4300','TM75',NULL,'geographic 2D','EPSG','6422','EPSG','6300',NULL,0); INSERT INTO "usage" VALUES('EPSG','3181','geodetic_crs','EPSG','4300','EPSG','1305','EPSG','1090'); INSERT INTO "geodetic_crs" VALUES('EPSG','4301','Tokyo',NULL,'geographic 2D','EPSG','6422','EPSG','6301',NULL,0); INSERT INTO "usage" VALUES('EPSG','3182','geodetic_crs','EPSG','4301','EPSG','1364','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4302','Trinidad 1903',NULL,'geographic 2D','EPSG','6422','EPSG','6302',NULL,0); INSERT INTO "usage" VALUES('EPSG','3183','geodetic_crs','EPSG','4302','EPSG','1339','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4303','TC(1948)',NULL,'geographic 2D','EPSG','6422','EPSG','6303',NULL,0); INSERT INTO "usage" VALUES('EPSG','3184','geodetic_crs','EPSG','4303','EPSG','1363','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4304','Voirol 1875',NULL,'geographic 2D','EPSG','6422','EPSG','6304',NULL,0); INSERT INTO "usage" VALUES('EPSG','3185','geodetic_crs','EPSG','4304','EPSG','1365','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4306','Bern 1938',NULL,'geographic 2D','EPSG','6422','EPSG','6306',NULL,0); INSERT INTO "usage" VALUES('EPSG','3186','geodetic_crs','EPSG','4306','EPSG','1286','EPSG','1153'); INSERT INTO "geodetic_crs" VALUES('EPSG','4307','Nord Sahara 1959',NULL,'geographic 2D','EPSG','6422','EPSG','6307',NULL,0); INSERT INTO "usage" VALUES('EPSG','3187','geodetic_crs','EPSG','4307','EPSG','1026','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4308','RT38',NULL,'geographic 2D','EPSG','6422','EPSG','6308',NULL,0); INSERT INTO "usage" VALUES('EPSG','3188','geodetic_crs','EPSG','4308','EPSG','3313','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4309','Yacare',NULL,'geographic 2D','EPSG','6422','EPSG','6309',NULL,0); INSERT INTO "usage" VALUES('EPSG','3189','geodetic_crs','EPSG','4309','EPSG','3326','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4310','Yoff',NULL,'geographic 2D','EPSG','6422','EPSG','6310',NULL,0); INSERT INTO "usage" VALUES('EPSG','3190','geodetic_crs','EPSG','4310','EPSG','1207','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4311','Zanderij',NULL,'geographic 2D','EPSG','6422','EPSG','6311',NULL,0); INSERT INTO "usage" VALUES('EPSG','3191','geodetic_crs','EPSG','4311','EPSG','1222','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4312','MGI',NULL,'geographic 2D','EPSG','6422','EPSG','6312',NULL,0); INSERT INTO "usage" VALUES('EPSG','3192','geodetic_crs','EPSG','4312','EPSG','1037','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4313','BD72',NULL,'geographic 2D','EPSG','6422','EPSG','6313',NULL,0); INSERT INTO "usage" VALUES('EPSG','3193','geodetic_crs','EPSG','4313','EPSG','1347','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4314','DHDN',NULL,'geographic 2D','EPSG','6422','EPSG','6314',NULL,0); INSERT INTO "usage" VALUES('EPSG','3194','geodetic_crs','EPSG','4314','EPSG','2326','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4315','Conakry 1905',NULL,'geographic 2D','EPSG','6422','EPSG','6315',NULL,0); INSERT INTO "usage" VALUES('EPSG','3195','geodetic_crs','EPSG','4315','EPSG','3257','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4316','Dealul Piscului 1930',NULL,'geographic 2D','EPSG','6422','EPSG','6316',NULL,0); INSERT INTO "usage" VALUES('EPSG','3196','geodetic_crs','EPSG','4316','EPSG','3295','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4317','Dealul Piscului 1970',NULL,'geographic 2D','EPSG','6422','EPSG','6317',NULL,1); INSERT INTO "usage" VALUES('EPSG','3197','geodetic_crs','EPSG','4317','EPSG','1197','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4318','NGN',NULL,'geographic 2D','EPSG','6422','EPSG','6318',NULL,0); INSERT INTO "usage" VALUES('EPSG','3198','geodetic_crs','EPSG','4318','EPSG','3267','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4319','KUDAMS',NULL,'geographic 2D','EPSG','6422','EPSG','6319',NULL,0); INSERT INTO "usage" VALUES('EPSG','3199','geodetic_crs','EPSG','4319','EPSG','1310','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4322','WGS 72',NULL,'geographic 2D','EPSG','6422','EPSG','6322',NULL,0); INSERT INTO "usage" VALUES('EPSG','3200','geodetic_crs','EPSG','4322','EPSG','1262','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4324','WGS 72BE',NULL,'geographic 2D','EPSG','6422','EPSG','6324',NULL,0); INSERT INTO "usage" VALUES('EPSG','3201','geodetic_crs','EPSG','4324','EPSG','1262','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4326','WGS 84',NULL,'geographic 2D','EPSG','6422','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('EPSG','3202','geodetic_crs','EPSG','4326','EPSG','2830','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4327','WGS 84 (geographic 3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6326',NULL,1); INSERT INTO "usage" VALUES('EPSG','3203','geodetic_crs','EPSG','4327','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','4328','WGS 84 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6326',NULL,1); INSERT INTO "usage" VALUES('EPSG','3204','geodetic_crs','EPSG','4328','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','4329','WGS 84 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6326',NULL,1); INSERT INTO "usage" VALUES('EPSG','3205','geodetic_crs','EPSG','4329','EPSG','2830','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','4330','ITRF88 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6647',NULL,1); INSERT INTO "usage" VALUES('EPSG','3206','geodetic_crs','EPSG','4330','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4331','ITRF89 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6648',NULL,1); INSERT INTO "usage" VALUES('EPSG','3207','geodetic_crs','EPSG','4331','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4332','ITRF90 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6649',NULL,1); INSERT INTO "usage" VALUES('EPSG','3208','geodetic_crs','EPSG','4332','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4333','ITRF91 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6650',NULL,1); INSERT INTO "usage" VALUES('EPSG','3209','geodetic_crs','EPSG','4333','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4334','ITRF92 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6651',NULL,1); INSERT INTO "usage" VALUES('EPSG','3210','geodetic_crs','EPSG','4334','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4335','ITRF93 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6652',NULL,1); INSERT INTO "usage" VALUES('EPSG','3211','geodetic_crs','EPSG','4335','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4336','ITRF94 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6653',NULL,1); INSERT INTO "usage" VALUES('EPSG','3212','geodetic_crs','EPSG','4336','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4337','ITRF96 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6654',NULL,1); INSERT INTO "usage" VALUES('EPSG','3213','geodetic_crs','EPSG','4337','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4338','ITRF97 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6655',NULL,1); INSERT INTO "usage" VALUES('EPSG','3214','geodetic_crs','EPSG','4338','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4339','Australian Antarctic (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6176',NULL,1); INSERT INTO "usage" VALUES('EPSG','3215','geodetic_crs','EPSG','4339','EPSG','1278','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4340','Australian Antarctic (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6176',NULL,1); INSERT INTO "usage" VALUES('EPSG','3216','geodetic_crs','EPSG','4340','EPSG','1278','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4341','EST97 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6180',NULL,1); INSERT INTO "usage" VALUES('EPSG','3217','geodetic_crs','EPSG','4341','EPSG','1090','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4342','EST97 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6180',NULL,1); INSERT INTO "usage" VALUES('EPSG','3218','geodetic_crs','EPSG','4342','EPSG','1090','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4343','CHTRF95 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6151',NULL,1); INSERT INTO "usage" VALUES('EPSG','3219','geodetic_crs','EPSG','4343','EPSG','1286','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4344','CHTRF95 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6151',NULL,1); INSERT INTO "usage" VALUES('EPSG','3220','geodetic_crs','EPSG','4344','EPSG','1286','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4345','ETRS89 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6258',NULL,1); INSERT INTO "usage" VALUES('EPSG','3221','geodetic_crs','EPSG','4345','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4346','ETRS89 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6258',NULL,1); INSERT INTO "usage" VALUES('EPSG','3222','geodetic_crs','EPSG','4346','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4347','GDA94 (3D)',NULL,'geographic 3D','EPSG','6423','EPSG','6283',NULL,1); INSERT INTO "usage" VALUES('EPSG','3223','geodetic_crs','EPSG','4347','EPSG','1036','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4348','GDA94 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6283',NULL,1); INSERT INTO "usage" VALUES('EPSG','3224','geodetic_crs','EPSG','4348','EPSG','1036','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4349','Hartebeesthoek94 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6148',NULL,1); INSERT INTO "usage" VALUES('EPSG','3225','geodetic_crs','EPSG','4349','EPSG','1215','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4350','Hartebeesthoek94 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6148',NULL,1); INSERT INTO "usage" VALUES('EPSG','3226','geodetic_crs','EPSG','4350','EPSG','1215','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4351','IRENET95 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6173',NULL,1); INSERT INTO "usage" VALUES('EPSG','3227','geodetic_crs','EPSG','4351','EPSG','1305','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4352','IRENET95 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6173',NULL,1); INSERT INTO "usage" VALUES('EPSG','3228','geodetic_crs','EPSG','4352','EPSG','1305','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4353','JGD2000 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6612',NULL,1); INSERT INTO "usage" VALUES('EPSG','3229','geodetic_crs','EPSG','4353','EPSG','1129','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4354','JGD2000 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6612',NULL,1); INSERT INTO "usage" VALUES('EPSG','3230','geodetic_crs','EPSG','4354','EPSG','1129','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4355','LKS94 (ETRS89) (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6126',NULL,1); INSERT INTO "usage" VALUES('EPSG','3231','geodetic_crs','EPSG','4355','EPSG','1145','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4356','LKS94 (ETRS89) (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6126',NULL,1); INSERT INTO "usage" VALUES('EPSG','3232','geodetic_crs','EPSG','4356','EPSG','1145','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4357','Moznet (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6130',NULL,1); INSERT INTO "usage" VALUES('EPSG','3233','geodetic_crs','EPSG','4357','EPSG','1167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4358','Moznet (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6130',NULL,1); INSERT INTO "usage" VALUES('EPSG','3234','geodetic_crs','EPSG','4358','EPSG','1167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4359','NAD83(CSRS) (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6140',NULL,1); INSERT INTO "usage" VALUES('EPSG','3235','geodetic_crs','EPSG','4359','EPSG','2784','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4360','NAD83(CSRS) (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6140',NULL,1); INSERT INTO "usage" VALUES('EPSG','3236','geodetic_crs','EPSG','4360','EPSG','2784','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4361','NAD83(HARN) (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6152',NULL,1); INSERT INTO "usage" VALUES('EPSG','3237','geodetic_crs','EPSG','4361','EPSG','1337','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4362','NAD83(HARN) (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6152',NULL,1); INSERT INTO "usage" VALUES('EPSG','3238','geodetic_crs','EPSG','4362','EPSG','1337','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4363','NZGD2000 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6167',NULL,1); INSERT INTO "usage" VALUES('EPSG','3239','geodetic_crs','EPSG','4363','EPSG','1175','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4364','NZGD2000 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6167',NULL,1); INSERT INTO "usage" VALUES('EPSG','3240','geodetic_crs','EPSG','4364','EPSG','1175','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4365','POSGAR 98 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6190',NULL,1); INSERT INTO "usage" VALUES('EPSG','3241','geodetic_crs','EPSG','4365','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4366','POSGAR 98 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6190',NULL,1); INSERT INTO "usage" VALUES('EPSG','3242','geodetic_crs','EPSG','4366','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4367','REGVEN (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6189',NULL,1); INSERT INTO "usage" VALUES('EPSG','3243','geodetic_crs','EPSG','4367','EPSG','1251','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4368','REGVEN (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6189',NULL,1); INSERT INTO "usage" VALUES('EPSG','3244','geodetic_crs','EPSG','4368','EPSG','1251','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4369','RGF93 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6171',NULL,1); INSERT INTO "usage" VALUES('EPSG','3245','geodetic_crs','EPSG','4369','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4370','RGF93 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6171',NULL,1); INSERT INTO "usage" VALUES('EPSG','3246','geodetic_crs','EPSG','4370','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4371','RGFG95 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6624',NULL,1); INSERT INTO "usage" VALUES('EPSG','3247','geodetic_crs','EPSG','4371','EPSG','1097','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4372','RGFG95 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6624',NULL,1); INSERT INTO "usage" VALUES('EPSG','3248','geodetic_crs','EPSG','4372','EPSG','1097','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4373','RGR92 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6627',NULL,1); INSERT INTO "usage" VALUES('EPSG','3249','geodetic_crs','EPSG','4373','EPSG','1196','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4374','RGR92 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6627',NULL,1); INSERT INTO "usage" VALUES('EPSG','3250','geodetic_crs','EPSG','4374','EPSG','1196','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4375','SIRGAS (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6170',NULL,1); INSERT INTO "usage" VALUES('EPSG','3251','geodetic_crs','EPSG','4375','EPSG','1341','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4376','SIRGAS (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6170',NULL,1); INSERT INTO "usage" VALUES('EPSG','3252','geodetic_crs','EPSG','4376','EPSG','1341','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4377','SWEREF99 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6619',NULL,1); INSERT INTO "usage" VALUES('EPSG','3253','geodetic_crs','EPSG','4377','EPSG','1225','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4378','SWEREF99 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6619',NULL,1); INSERT INTO "usage" VALUES('EPSG','3254','geodetic_crs','EPSG','4378','EPSG','1225','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4379','Yemen NGN96 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6163',NULL,1); INSERT INTO "usage" VALUES('EPSG','3255','geodetic_crs','EPSG','4379','EPSG','1257','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4380','Yemen NGN96 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6163',NULL,1); INSERT INTO "usage" VALUES('EPSG','3256','geodetic_crs','EPSG','4380','EPSG','1257','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4381','RGNC 1991 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6645',NULL,1); INSERT INTO "usage" VALUES('EPSG','3257','geodetic_crs','EPSG','4381','EPSG','1174','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4382','RGNC 1991 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6645',NULL,1); INSERT INTO "usage" VALUES('EPSG','3258','geodetic_crs','EPSG','4382','EPSG','1174','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4383','RRAF 1991 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6640',NULL,1); INSERT INTO "usage" VALUES('EPSG','3259','geodetic_crs','EPSG','4383','EPSG','2824','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4384','RRAF 1991 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6640',NULL,1); INSERT INTO "usage" VALUES('EPSG','3260','geodetic_crs','EPSG','4384','EPSG','2824','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4385','ITRF2000 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6656',NULL,1); INSERT INTO "usage" VALUES('EPSG','3261','geodetic_crs','EPSG','4385','EPSG','2830','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4386','ISN93 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6659',NULL,1); INSERT INTO "usage" VALUES('EPSG','3262','geodetic_crs','EPSG','4386','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4387','ISN93 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6659',NULL,1); INSERT INTO "usage" VALUES('EPSG','3263','geodetic_crs','EPSG','4387','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4388','LKS92 (3D)',NULL,'geographic 3D','EPSG','6401','EPSG','6661',NULL,1); INSERT INTO "usage" VALUES('EPSG','3264','geodetic_crs','EPSG','4388','EPSG','1139','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4389','LKS92 (geocentric)',NULL,'geocentric','EPSG','6500','EPSG','6661',NULL,1); INSERT INTO "usage" VALUES('EPSG','3265','geodetic_crs','EPSG','4389','EPSG','1139','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4463','RGSPM06',NULL,'geographic 2D','EPSG','6422','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('EPSG','3319','geodetic_crs','EPSG','4463','EPSG','1220','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4465','RGSPM06',NULL,'geocentric','EPSG','6500','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('EPSG','3320','geodetic_crs','EPSG','4465','EPSG','1220','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4466','RGSPM06',NULL,'geographic 3D','EPSG','6423','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('EPSG','3321','geodetic_crs','EPSG','4466','EPSG','1220','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','4468','RGM04',NULL,'geocentric','EPSG','6500','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('EPSG','3323','geodetic_crs','EPSG','4468','EPSG','1159','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4469','RGM04',NULL,'geographic 3D','EPSG','6423','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('EPSG','3324','geodetic_crs','EPSG','4469','EPSG','1159','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','4470','RGM04',NULL,'geographic 2D','EPSG','6422','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('EPSG','3325','geodetic_crs','EPSG','4470','EPSG','1159','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4472','Cadastre 1997',NULL,'geographic 3D','EPSG','6423','EPSG','1037',NULL,0); INSERT INTO "usage" VALUES('EPSG','3327','geodetic_crs','EPSG','4472','EPSG','3340','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4473','Cadastre 1997',NULL,'geocentric','EPSG','6500','EPSG','1037',NULL,0); INSERT INTO "usage" VALUES('EPSG','3328','geodetic_crs','EPSG','4473','EPSG','3340','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4475','Cadastre 1997',NULL,'geographic 2D','EPSG','6422','EPSG','1037',NULL,0); INSERT INTO "usage" VALUES('EPSG','3330','geodetic_crs','EPSG','4475','EPSG','3340','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4479','China Geodetic Coordinate System 2000',NULL,'geocentric','EPSG','6500','EPSG','1043',NULL,0); INSERT INTO "usage" VALUES('EPSG','3331','geodetic_crs','EPSG','4479','EPSG','1067','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4480','China Geodetic Coordinate System 2000',NULL,'geographic 3D','EPSG','6423','EPSG','1043',NULL,0); INSERT INTO "usage" VALUES('EPSG','3332','geodetic_crs','EPSG','4480','EPSG','1067','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4481','Mexico ITRF92',NULL,'geocentric','EPSG','6500','EPSG','1042',NULL,0); INSERT INTO "usage" VALUES('EPSG','3333','geodetic_crs','EPSG','4481','EPSG','1160','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4482','Mexico ITRF92',NULL,'geographic 3D','EPSG','6423','EPSG','1042',NULL,0); INSERT INTO "usage" VALUES('EPSG','3334','geodetic_crs','EPSG','4482','EPSG','1160','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4483','Mexico ITRF92',NULL,'geographic 2D','EPSG','6422','EPSG','1042',NULL,0); INSERT INTO "usage" VALUES('EPSG','3335','geodetic_crs','EPSG','4483','EPSG','1160','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4490','China Geodetic Coordinate System 2000',NULL,'geographic 2D','EPSG','6422','EPSG','1043',NULL,0); INSERT INTO "usage" VALUES('EPSG','3342','geodetic_crs','EPSG','4490','EPSG','1067','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4555','New Beijing',NULL,'geographic 2D','EPSG','6422','EPSG','1045',NULL,0); INSERT INTO "usage" VALUES('EPSG','3407','geodetic_crs','EPSG','4555','EPSG','3228','EPSG','1153'); INSERT INTO "geodetic_crs" VALUES('EPSG','4556','RRAF 1991',NULL,'geocentric','EPSG','6500','EPSG','1047',NULL,0); INSERT INTO "usage" VALUES('EPSG','3408','geodetic_crs','EPSG','4556','EPSG','2824','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4557','RRAF 1991',NULL,'geographic 3D','EPSG','6423','EPSG','1047',NULL,0); INSERT INTO "usage" VALUES('EPSG','3409','geodetic_crs','EPSG','4557','EPSG','2824','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4558','RRAF 1991',NULL,'geographic 2D','EPSG','6422','EPSG','1047',NULL,0); INSERT INTO "usage" VALUES('EPSG','3410','geodetic_crs','EPSG','4558','EPSG','2824','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4600','Anguilla 1957',NULL,'geographic 2D','EPSG','6422','EPSG','6600',NULL,0); INSERT INTO "usage" VALUES('EPSG','3434','geodetic_crs','EPSG','4600','EPSG','3214','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4601','Antigua 1943',NULL,'geographic 2D','EPSG','6422','EPSG','6601',NULL,0); INSERT INTO "usage" VALUES('EPSG','3435','geodetic_crs','EPSG','4601','EPSG','1273','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4602','Dominica 1945',NULL,'geographic 2D','EPSG','6422','EPSG','6602',NULL,0); INSERT INTO "usage" VALUES('EPSG','3436','geodetic_crs','EPSG','4602','EPSG','3239','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4603','Grenada 1953',NULL,'geographic 2D','EPSG','6422','EPSG','6603',NULL,0); INSERT INTO "usage" VALUES('EPSG','3437','geodetic_crs','EPSG','4603','EPSG','1551','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4604','Montserrat 1958',NULL,'geographic 2D','EPSG','6422','EPSG','6604',NULL,0); INSERT INTO "usage" VALUES('EPSG','3438','geodetic_crs','EPSG','4604','EPSG','3279','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4605','St. Kitts 1955',NULL,'geographic 2D','EPSG','6422','EPSG','6605',NULL,0); INSERT INTO "usage" VALUES('EPSG','3439','geodetic_crs','EPSG','4605','EPSG','3297','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4606','St. Lucia 1955',NULL,'geographic 2D','EPSG','6422','EPSG','6606',NULL,0); INSERT INTO "usage" VALUES('EPSG','3440','geodetic_crs','EPSG','4606','EPSG','3298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4607','St. Vincent 1945',NULL,'geographic 2D','EPSG','6422','EPSG','6607',NULL,0); INSERT INTO "usage" VALUES('EPSG','3441','geodetic_crs','EPSG','4607','EPSG','3300','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4608','NAD27(76)',NULL,'geographic 2D','EPSG','6422','EPSG','6608',NULL,0); INSERT INTO "usage" VALUES('EPSG','3442','geodetic_crs','EPSG','4608','EPSG','1367','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4609','NAD27(CGQ77)',NULL,'geographic 2D','EPSG','6422','EPSG','6609',NULL,0); INSERT INTO "usage" VALUES('EPSG','3443','geodetic_crs','EPSG','4609','EPSG','1368','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4610','Xian 1980',NULL,'geographic 2D','EPSG','6422','EPSG','6610',NULL,0); INSERT INTO "usage" VALUES('EPSG','3444','geodetic_crs','EPSG','4610','EPSG','3228','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4611','Hong Kong 1980',NULL,'geographic 2D','EPSG','6422','EPSG','6611',NULL,0); INSERT INTO "usage" VALUES('EPSG','3445','geodetic_crs','EPSG','4611','EPSG','1118','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4612','JGD2000',NULL,'geographic 2D','EPSG','6422','EPSG','6612',NULL,0); INSERT INTO "usage" VALUES('EPSG','3446','geodetic_crs','EPSG','4612','EPSG','1129','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4613','Segara',NULL,'geographic 2D','EPSG','6422','EPSG','6613',NULL,0); INSERT INTO "usage" VALUES('EPSG','3447','geodetic_crs','EPSG','4613','EPSG','1360','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4614','QND95',NULL,'geographic 2D','EPSG','6422','EPSG','6614',NULL,0); INSERT INTO "usage" VALUES('EPSG','3448','geodetic_crs','EPSG','4614','EPSG','1346','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4615','Porto Santo',NULL,'geographic 2D','EPSG','6422','EPSG','6615',NULL,0); INSERT INTO "usage" VALUES('EPSG','3449','geodetic_crs','EPSG','4615','EPSG','1314','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4616','Selvagem Grande',NULL,'geographic 2D','EPSG','6422','EPSG','6616',NULL,0); INSERT INTO "usage" VALUES('EPSG','3450','geodetic_crs','EPSG','4616','EPSG','2779','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4617','NAD83(CSRS)',NULL,'geographic 2D','EPSG','6422','EPSG','6140',NULL,0); INSERT INTO "usage" VALUES('EPSG','3451','geodetic_crs','EPSG','4617','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4618','SAD69',NULL,'geographic 2D','EPSG','6422','EPSG','6618',NULL,0); INSERT INTO "usage" VALUES('EPSG','3452','geodetic_crs','EPSG','4618','EPSG','1358','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4619','SWEREF99',NULL,'geographic 2D','EPSG','6422','EPSG','6619',NULL,0); INSERT INTO "usage" VALUES('EPSG','3453','geodetic_crs','EPSG','4619','EPSG','1225','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4620','Point 58',NULL,'geographic 2D','EPSG','6422','EPSG','6620',NULL,0); INSERT INTO "usage" VALUES('EPSG','3454','geodetic_crs','EPSG','4620','EPSG','2790','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4621','Fort Marigot',NULL,'geographic 2D','EPSG','6422','EPSG','6621',NULL,0); INSERT INTO "usage" VALUES('EPSG','3455','geodetic_crs','EPSG','4621','EPSG','2828','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4622','Guadeloupe 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6622',NULL,0); INSERT INTO "usage" VALUES('EPSG','3456','geodetic_crs','EPSG','4622','EPSG','2829','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4623','CSG67',NULL,'geographic 2D','EPSG','6422','EPSG','6623',NULL,0); INSERT INTO "usage" VALUES('EPSG','3457','geodetic_crs','EPSG','4623','EPSG','3105','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4624','RGFG95',NULL,'geographic 2D','EPSG','6422','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('EPSG','3458','geodetic_crs','EPSG','4624','EPSG','1097','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4625','Martinique 1938',NULL,'geographic 2D','EPSG','6422','EPSG','6625',NULL,0); INSERT INTO "usage" VALUES('EPSG','3459','geodetic_crs','EPSG','4625','EPSG','3276','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4626','Reunion 1947',NULL,'geographic 2D','EPSG','6422','EPSG','6626',NULL,0); INSERT INTO "usage" VALUES('EPSG','3460','geodetic_crs','EPSG','4626','EPSG','3337','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4627','RGR92',NULL,'geographic 2D','EPSG','6422','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('EPSG','3461','geodetic_crs','EPSG','4627','EPSG','3902','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4628','Tahiti 52',NULL,'geographic 2D','EPSG','6422','EPSG','6628',NULL,0); INSERT INTO "usage" VALUES('EPSG','3462','geodetic_crs','EPSG','4628','EPSG','2811','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4629','Tahaa 54',NULL,'geographic 2D','EPSG','6422','EPSG','6629',NULL,0); INSERT INTO "usage" VALUES('EPSG','3463','geodetic_crs','EPSG','4629','EPSG','2812','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4630','IGN72 Nuku Hiva',NULL,'geographic 2D','EPSG','6422','EPSG','6630',NULL,0); INSERT INTO "usage" VALUES('EPSG','3464','geodetic_crs','EPSG','4630','EPSG','3129','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4631','K0 1949',NULL,'geographic 2D','EPSG','6422','EPSG','6631',NULL,1); INSERT INTO "usage" VALUES('EPSG','3465','geodetic_crs','EPSG','4631','EPSG','2816','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4632','Combani 1950',NULL,'geographic 2D','EPSG','6422','EPSG','6632',NULL,0); INSERT INTO "usage" VALUES('EPSG','3466','geodetic_crs','EPSG','4632','EPSG','3340','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4633','IGN56 Lifou',NULL,'geographic 2D','EPSG','6422','EPSG','6633',NULL,0); INSERT INTO "usage" VALUES('EPSG','3467','geodetic_crs','EPSG','4633','EPSG','2814','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4634','IGN72 Grand Terre',NULL,'geographic 2D','EPSG','6402','EPSG','6634',NULL,1); INSERT INTO "usage" VALUES('EPSG','3468','geodetic_crs','EPSG','4634','EPSG','2822','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4635','ST87 Ouvea',NULL,'geographic 2D','EPSG','6422','EPSG','6635',NULL,1); INSERT INTO "usage" VALUES('EPSG','3469','geodetic_crs','EPSG','4635','EPSG','2813','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4636','Petrels 1972',NULL,'geographic 2D','EPSG','6422','EPSG','6636',NULL,0); INSERT INTO "usage" VALUES('EPSG','3470','geodetic_crs','EPSG','4636','EPSG','2817','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4637','Perroud 1950',NULL,'geographic 2D','EPSG','6422','EPSG','6637',NULL,0); INSERT INTO "usage" VALUES('EPSG','3471','geodetic_crs','EPSG','4637','EPSG','2818','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4638','Saint Pierre et Miquelon 1950',NULL,'geographic 2D','EPSG','6422','EPSG','6638',NULL,0); INSERT INTO "usage" VALUES('EPSG','3472','geodetic_crs','EPSG','4638','EPSG','3299','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4639','MOP78',NULL,'geographic 2D','EPSG','6422','EPSG','6639',NULL,0); INSERT INTO "usage" VALUES('EPSG','3473','geodetic_crs','EPSG','4639','EPSG','2815','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4640','RRAF 1991',NULL,'geographic 2D','EPSG','6422','EPSG','6640',NULL,1); INSERT INTO "usage" VALUES('EPSG','3474','geodetic_crs','EPSG','4640','EPSG','2824','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4641','IGN53 Mare',NULL,'geographic 2D','EPSG','6422','EPSG','6641',NULL,0); INSERT INTO "usage" VALUES('EPSG','3475','geodetic_crs','EPSG','4641','EPSG','2819','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4642','ST84 Ile des Pins',NULL,'geographic 2D','EPSG','6422','EPSG','6642',NULL,0); INSERT INTO "usage" VALUES('EPSG','3476','geodetic_crs','EPSG','4642','EPSG','2820','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4643','ST71 Belep',NULL,'geographic 2D','EPSG','6422','EPSG','6643',NULL,0); INSERT INTO "usage" VALUES('EPSG','3477','geodetic_crs','EPSG','4643','EPSG','2821','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4644','NEA74 Noumea',NULL,'geographic 2D','EPSG','6422','EPSG','6644',NULL,0); INSERT INTO "usage" VALUES('EPSG','3478','geodetic_crs','EPSG','4644','EPSG','2823','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4645','RGNC 1991',NULL,'geographic 2D','EPSG','6422','EPSG','6645',NULL,1); INSERT INTO "usage" VALUES('EPSG','3479','geodetic_crs','EPSG','4645','EPSG','1174','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4646','Grand Comoros',NULL,'geographic 2D','EPSG','6422','EPSG','6646',NULL,0); INSERT INTO "usage" VALUES('EPSG','3480','geodetic_crs','EPSG','4646','EPSG','2807','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4657','Reykjavik 1900',NULL,'geographic 2D','EPSG','6422','EPSG','6657',NULL,0); INSERT INTO "usage" VALUES('EPSG','3487','geodetic_crs','EPSG','4657','EPSG','3262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4658','Hjorsey 1955',NULL,'geographic 2D','EPSG','6422','EPSG','6658',NULL,0); INSERT INTO "usage" VALUES('EPSG','3488','geodetic_crs','EPSG','4658','EPSG','3262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4659','ISN93',NULL,'geographic 2D','EPSG','6422','EPSG','6659',NULL,0); INSERT INTO "usage" VALUES('EPSG','3489','geodetic_crs','EPSG','4659','EPSG','1120','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4660','Helle 1954',NULL,'geographic 2D','EPSG','6422','EPSG','6660',NULL,0); INSERT INTO "usage" VALUES('EPSG','3490','geodetic_crs','EPSG','4660','EPSG','2869','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4661','LKS-92',NULL,'geographic 2D','EPSG','6422','EPSG','6661',NULL,0); INSERT INTO "usage" VALUES('EPSG','3491','geodetic_crs','EPSG','4661','EPSG','1139','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4662','IGN72 Grande Terre',NULL,'geographic 2D','EPSG','6422','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('EPSG','3492','geodetic_crs','EPSG','4662','EPSG','2822','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4663','Porto Santo 1995',NULL,'geographic 2D','EPSG','6422','EPSG','6663',NULL,0); INSERT INTO "usage" VALUES('EPSG','3493','geodetic_crs','EPSG','4663','EPSG','1314','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4664','Azores Oriental 1995',NULL,'geographic 2D','EPSG','6422','EPSG','6664',NULL,0); INSERT INTO "usage" VALUES('EPSG','3494','geodetic_crs','EPSG','4664','EPSG','1345','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4665','Azores Central 1995',NULL,'geographic 2D','EPSG','6422','EPSG','6665',NULL,0); INSERT INTO "usage" VALUES('EPSG','3495','geodetic_crs','EPSG','4665','EPSG','1301','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4666','Lisbon 1890',NULL,'geographic 2D','EPSG','6422','EPSG','6666',NULL,0); INSERT INTO "usage" VALUES('EPSG','3496','geodetic_crs','EPSG','4666','EPSG','1294','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4667','IKBD-92',NULL,'geographic 2D','EPSG','6422','EPSG','6667',NULL,0); INSERT INTO "usage" VALUES('EPSG','3497','geodetic_crs','EPSG','4667','EPSG','2876','EPSG','1053'); INSERT INTO "geodetic_crs" VALUES('EPSG','4668','ED79',NULL,'geographic 2D','EPSG','6422','EPSG','6668',NULL,0); INSERT INTO "usage" VALUES('EPSG','3498','geodetic_crs','EPSG','4668','EPSG','1297','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4669','LKS94',NULL,'geographic 2D','EPSG','6422','EPSG','6126',NULL,0); INSERT INTO "usage" VALUES('EPSG','3499','geodetic_crs','EPSG','4669','EPSG','1145','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4670','IGM95',NULL,'geographic 2D','EPSG','6422','EPSG','6670',NULL,0); INSERT INTO "usage" VALUES('EPSG','14404','geodetic_crs','EPSG','4670','EPSG','3343','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4671','Voirol 1879',NULL,'geographic 2D','EPSG','6422','EPSG','6671',NULL,0); INSERT INTO "usage" VALUES('EPSG','3501','geodetic_crs','EPSG','4671','EPSG','1365','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4672','Chatham Islands 1971',NULL,'geographic 2D','EPSG','6422','EPSG','6672',NULL,0); INSERT INTO "usage" VALUES('EPSG','3502','geodetic_crs','EPSG','4672','EPSG','2889','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4673','Chatham Islands 1979',NULL,'geographic 2D','EPSG','6422','EPSG','6673',NULL,0); INSERT INTO "usage" VALUES('EPSG','3503','geodetic_crs','EPSG','4673','EPSG','2889','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4674','SIRGAS 2000',NULL,'geographic 2D','EPSG','6422','EPSG','6674',NULL,0); INSERT INTO "usage" VALUES('EPSG','3504','geodetic_crs','EPSG','4674','EPSG','3418','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4675','Guam 1963',NULL,'geographic 2D','EPSG','6422','EPSG','6675',NULL,0); INSERT INTO "usage" VALUES('EPSG','3505','geodetic_crs','EPSG','4675','EPSG','4525','EPSG','1056'); INSERT INTO "geodetic_crs" VALUES('EPSG','4676','Vientiane 1982',NULL,'geographic 2D','EPSG','6422','EPSG','6676',NULL,0); INSERT INTO "usage" VALUES('EPSG','3506','geodetic_crs','EPSG','4676','EPSG','1138','EPSG','1210'); INSERT INTO "geodetic_crs" VALUES('EPSG','4677','Lao 1993',NULL,'geographic 2D','EPSG','6422','EPSG','6677',NULL,0); INSERT INTO "usage" VALUES('EPSG','3507','geodetic_crs','EPSG','4677','EPSG','1138','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4678','Lao 1997',NULL,'geographic 2D','EPSG','6422','EPSG','6678',NULL,0); INSERT INTO "usage" VALUES('EPSG','3508','geodetic_crs','EPSG','4678','EPSG','1138','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4679','Jouik 1961',NULL,'geographic 2D','EPSG','6422','EPSG','6679',NULL,0); INSERT INTO "usage" VALUES('EPSG','3509','geodetic_crs','EPSG','4679','EPSG','2967','EPSG','1198'); INSERT INTO "geodetic_crs" VALUES('EPSG','4680','Nouakchott 1965',NULL,'geographic 2D','EPSG','6422','EPSG','6680',NULL,0); INSERT INTO "usage" VALUES('EPSG','3510','geodetic_crs','EPSG','4680','EPSG','2968','EPSG','1198'); INSERT INTO "geodetic_crs" VALUES('EPSG','4681','Mauritania 1999',NULL,'geographic 2D','EPSG','6422','EPSG','6681',NULL,1); INSERT INTO "usage" VALUES('EPSG','3511','geodetic_crs','EPSG','4681','EPSG','1157','EPSG','1249'); INSERT INTO "geodetic_crs" VALUES('EPSG','4682','Gulshan 303',NULL,'geographic 2D','EPSG','6422','EPSG','6682',NULL,0); INSERT INTO "usage" VALUES('EPSG','3512','geodetic_crs','EPSG','4682','EPSG','1041','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','4683','PRS92',NULL,'geographic 2D','EPSG','6422','EPSG','6683',NULL,0); INSERT INTO "usage" VALUES('EPSG','3513','geodetic_crs','EPSG','4683','EPSG','1190','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4684','Gan 1970',NULL,'geographic 2D','EPSG','6422','EPSG','6684',NULL,0); INSERT INTO "usage" VALUES('EPSG','3514','geodetic_crs','EPSG','4684','EPSG','3274','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4685','Gandajika',NULL,'geographic 2D','EPSG','6422','EPSG','6685',NULL,1); INSERT INTO "usage" VALUES('EPSG','3515','geodetic_crs','EPSG','4685','EPSG','1259','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4686','MAGNA-SIRGAS',NULL,'geographic 2D','EPSG','6422','EPSG','6686',NULL,0); INSERT INTO "usage" VALUES('EPSG','3516','geodetic_crs','EPSG','4686','EPSG','1070','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4687','RGPF',NULL,'geographic 2D','EPSG','6422','EPSG','6687',NULL,0); INSERT INTO "usage" VALUES('EPSG','3517','geodetic_crs','EPSG','4687','EPSG','1098','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4688','Fatu Iva 72',NULL,'geographic 2D','EPSG','6422','EPSG','6688',NULL,0); INSERT INTO "usage" VALUES('EPSG','3518','geodetic_crs','EPSG','4688','EPSG','3133','EPSG','1201'); INSERT INTO "geodetic_crs" VALUES('EPSG','4689','IGN63 Hiva Oa',NULL,'geographic 2D','EPSG','6422','EPSG','6689',NULL,0); INSERT INTO "usage" VALUES('EPSG','3519','geodetic_crs','EPSG','4689','EPSG','3130','EPSG','1201'); INSERT INTO "geodetic_crs" VALUES('EPSG','4690','Tahiti 79',NULL,'geographic 2D','EPSG','6422','EPSG','6690',NULL,0); INSERT INTO "usage" VALUES('EPSG','3520','geodetic_crs','EPSG','4690','EPSG','3124','EPSG','1201'); INSERT INTO "geodetic_crs" VALUES('EPSG','4691','Moorea 87',NULL,'geographic 2D','EPSG','6422','EPSG','6691',NULL,0); INSERT INTO "usage" VALUES('EPSG','3521','geodetic_crs','EPSG','4691','EPSG','3125','EPSG','1201'); INSERT INTO "geodetic_crs" VALUES('EPSG','4692','Maupiti 83',NULL,'geographic 2D','EPSG','6422','EPSG','6692',NULL,0); INSERT INTO "usage" VALUES('EPSG','3522','geodetic_crs','EPSG','4692','EPSG','3126','EPSG','1201'); INSERT INTO "geodetic_crs" VALUES('EPSG','4693','Nakhl-e Ghanem',NULL,'geographic 2D','EPSG','6422','EPSG','6693',NULL,0); INSERT INTO "usage" VALUES('EPSG','3523','geodetic_crs','EPSG','4693','EPSG','2362','EPSG','1140'); INSERT INTO "geodetic_crs" VALUES('EPSG','4694','POSGAR 94',NULL,'geographic 2D','EPSG','6422','EPSG','6694',NULL,0); INSERT INTO "usage" VALUES('EPSG','3524','geodetic_crs','EPSG','4694','EPSG','1033','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4695','Katanga 1955',NULL,'geographic 2D','EPSG','6422','EPSG','6695',NULL,0); INSERT INTO "usage" VALUES('EPSG','3525','geodetic_crs','EPSG','4695','EPSG','3147','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4696','Kasai 1953',NULL,'geographic 2D','EPSG','6422','EPSG','6696',NULL,0); INSERT INTO "usage" VALUES('EPSG','3526','geodetic_crs','EPSG','4696','EPSG','3148','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4697','IGC 1962 6th Parallel South',NULL,'geographic 2D','EPSG','6422','EPSG','6697',NULL,0); INSERT INTO "usage" VALUES('EPSG','3527','geodetic_crs','EPSG','4697','EPSG','3149','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4698','IGN 1962 Kerguelen',NULL,'geographic 2D','EPSG','6422','EPSG','6698',NULL,0); INSERT INTO "usage" VALUES('EPSG','3528','geodetic_crs','EPSG','4698','EPSG','2816','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4699','Le Pouce 1934',NULL,'geographic 2D','EPSG','6422','EPSG','6699',NULL,0); INSERT INTO "usage" VALUES('EPSG','3529','geodetic_crs','EPSG','4699','EPSG','3209','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4700','IGN Astro 1960',NULL,'geographic 2D','EPSG','6422','EPSG','6700',NULL,0); INSERT INTO "usage" VALUES('EPSG','3530','geodetic_crs','EPSG','4700','EPSG','3277','EPSG','1249'); INSERT INTO "geodetic_crs" VALUES('EPSG','4701','IGCB 1955',NULL,'geographic 2D','EPSG','6422','EPSG','6701',NULL,0); INSERT INTO "usage" VALUES('EPSG','3531','geodetic_crs','EPSG','4701','EPSG','3171','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4702','Mauritania 1999',NULL,'geographic 2D','EPSG','6422','EPSG','6702',NULL,0); INSERT INTO "usage" VALUES('EPSG','3532','geodetic_crs','EPSG','4702','EPSG','1157','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4703','Mhast 1951',NULL,'geographic 2D','EPSG','6422','EPSG','6703',NULL,0); INSERT INTO "usage" VALUES('EPSG','3533','geodetic_crs','EPSG','4703','EPSG','1318','EPSG','1105'); INSERT INTO "geodetic_crs" VALUES('EPSG','4704','Mhast (onshore)',NULL,'geographic 2D','EPSG','6422','EPSG','6704',NULL,0); INSERT INTO "usage" VALUES('EPSG','3534','geodetic_crs','EPSG','4704','EPSG','3179','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','4705','Mhast (offshore)',NULL,'geographic 2D','EPSG','6422','EPSG','6705',NULL,0); INSERT INTO "usage" VALUES('EPSG','3535','geodetic_crs','EPSG','4705','EPSG','3180','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','4706','Egypt Gulf of Suez S-650 TL',NULL,'geographic 2D','EPSG','6422','EPSG','6706',NULL,0); INSERT INTO "usage" VALUES('EPSG','3536','geodetic_crs','EPSG','4706','EPSG','2341','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','4707','Tern Island 1961',NULL,'geographic 2D','EPSG','6422','EPSG','6707',NULL,0); INSERT INTO "usage" VALUES('EPSG','3537','geodetic_crs','EPSG','4707','EPSG','3181','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4708','Cocos Islands 1965',NULL,'geographic 2D','EPSG','6422','EPSG','6708',NULL,0); INSERT INTO "usage" VALUES('EPSG','3538','geodetic_crs','EPSG','4708','EPSG','1069','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4709','Iwo Jima 1945',NULL,'geographic 2D','EPSG','6422','EPSG','6709',NULL,0); INSERT INTO "usage" VALUES('EPSG','3539','geodetic_crs','EPSG','4709','EPSG','3200','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4710','Astro DOS 71',NULL,'geographic 2D','EPSG','6422','EPSG','6710',NULL,0); INSERT INTO "usage" VALUES('EPSG','3540','geodetic_crs','EPSG','4710','EPSG','3183','EPSG','1180'); INSERT INTO "geodetic_crs" VALUES('EPSG','4711','Marcus Island 1952',NULL,'geographic 2D','EPSG','6422','EPSG','6711',NULL,0); INSERT INTO "usage" VALUES('EPSG','3541','geodetic_crs','EPSG','4711','EPSG','1872','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4712','Ascension Island 1958',NULL,'geographic 2D','EPSG','6422','EPSG','6712',NULL,0); INSERT INTO "usage" VALUES('EPSG','3542','geodetic_crs','EPSG','4712','EPSG','3182','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4713','Ayabelle Lighthouse',NULL,'geographic 2D','EPSG','6422','EPSG','6713',NULL,0); INSERT INTO "usage" VALUES('EPSG','3543','geodetic_crs','EPSG','4713','EPSG','1081','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4714','Bellevue',NULL,'geographic 2D','EPSG','6422','EPSG','6714',NULL,0); INSERT INTO "usage" VALUES('EPSG','3544','geodetic_crs','EPSG','4714','EPSG','3193','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4715','Camp Area Astro',NULL,'geographic 2D','EPSG','6422','EPSG','6715',NULL,0); INSERT INTO "usage" VALUES('EPSG','3545','geodetic_crs','EPSG','4715','EPSG','3205','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4716','Phoenix Islands 1966',NULL,'geographic 2D','EPSG','6422','EPSG','6716',NULL,0); INSERT INTO "usage" VALUES('EPSG','3546','geodetic_crs','EPSG','4716','EPSG','3196','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4717','Cape Canaveral',NULL,'geographic 2D','EPSG','6422','EPSG','6717',NULL,0); INSERT INTO "usage" VALUES('EPSG','3547','geodetic_crs','EPSG','4717','EPSG','3206','EPSG','1233'); INSERT INTO "geodetic_crs" VALUES('EPSG','4718','Solomon 1968',NULL,'geographic 2D','EPSG','6422','EPSG','6718',NULL,0); INSERT INTO "usage" VALUES('EPSG','3548','geodetic_crs','EPSG','4718','EPSG','1213','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4719','Easter Island 1967',NULL,'geographic 2D','EPSG','6422','EPSG','6719',NULL,0); INSERT INTO "usage" VALUES('EPSG','3549','geodetic_crs','EPSG','4719','EPSG','3188','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4720','Fiji 1986',NULL,'geographic 2D','EPSG','6422','EPSG','6720',NULL,0); INSERT INTO "usage" VALUES('EPSG','3550','geodetic_crs','EPSG','4720','EPSG','1094','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4721','Fiji 1956',NULL,'geographic 2D','EPSG','6422','EPSG','6721',NULL,0); INSERT INTO "usage" VALUES('EPSG','3551','geodetic_crs','EPSG','4721','EPSG','3398','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4722','South Georgia 1968',NULL,'geographic 2D','EPSG','6422','EPSG','6722',NULL,0); INSERT INTO "usage" VALUES('EPSG','3552','geodetic_crs','EPSG','4722','EPSG','3529','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4723','GCGD59',NULL,'geographic 2D','EPSG','6422','EPSG','6723',NULL,0); INSERT INTO "usage" VALUES('EPSG','3553','geodetic_crs','EPSG','4723','EPSG','3185','EPSG','1056'); INSERT INTO "geodetic_crs" VALUES('EPSG','4724','Diego Garcia 1969',NULL,'geographic 2D','EPSG','6422','EPSG','6724',NULL,0); INSERT INTO "usage" VALUES('EPSG','3554','geodetic_crs','EPSG','4724','EPSG','3189','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4725','Johnston Island 1961',NULL,'geographic 2D','EPSG','6422','EPSG','6725',NULL,0); INSERT INTO "usage" VALUES('EPSG','3555','geodetic_crs','EPSG','4725','EPSG','3201','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4726','SIGD61',NULL,'geographic 2D','EPSG','6422','EPSG','6726',NULL,0); INSERT INTO "usage" VALUES('EPSG','3556','geodetic_crs','EPSG','4726','EPSG','3186','EPSG','1056'); INSERT INTO "geodetic_crs" VALUES('EPSG','4727','Midway 1961',NULL,'geographic 2D','EPSG','6422','EPSG','6727',NULL,0); INSERT INTO "usage" VALUES('EPSG','3557','geodetic_crs','EPSG','4727','EPSG','3202','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4728','PN84',NULL,'geographic 2D','EPSG','6422','EPSG','6728',NULL,0); INSERT INTO "usage" VALUES('EPSG','3558','geodetic_crs','EPSG','4728','EPSG','4598','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4729','Pitcairn 1967',NULL,'geographic 2D','EPSG','6422','EPSG','6729',NULL,0); INSERT INTO "usage" VALUES('EPSG','3559','geodetic_crs','EPSG','4729','EPSG','3208','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4730','Santo 1965',NULL,'geographic 2D','EPSG','6422','EPSG','6730',NULL,0); INSERT INTO "usage" VALUES('EPSG','3560','geodetic_crs','EPSG','4730','EPSG','3194','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4731','Viti Levu 1916',NULL,'geographic 2D','EPSG','6422','EPSG','6731',NULL,1); INSERT INTO "usage" VALUES('EPSG','3561','geodetic_crs','EPSG','4731','EPSG','3195','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4732','Marshall Islands 1960',NULL,'geographic 2D','EPSG','6422','EPSG','6732',NULL,0); INSERT INTO "usage" VALUES('EPSG','3562','geodetic_crs','EPSG','4732','EPSG','3191','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4733','Wake Island 1952',NULL,'geographic 2D','EPSG','6422','EPSG','6733',NULL,0); INSERT INTO "usage" VALUES('EPSG','3563','geodetic_crs','EPSG','4733','EPSG','3190','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4734','Tristan 1968',NULL,'geographic 2D','EPSG','6422','EPSG','6734',NULL,0); INSERT INTO "usage" VALUES('EPSG','3564','geodetic_crs','EPSG','4734','EPSG','3184','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4735','Kusaie 1951',NULL,'geographic 2D','EPSG','6422','EPSG','6735',NULL,0); INSERT INTO "usage" VALUES('EPSG','3565','geodetic_crs','EPSG','4735','EPSG','3192','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4736','Deception Island',NULL,'geographic 2D','EPSG','6422','EPSG','6736',NULL,0); INSERT INTO "usage" VALUES('EPSG','3566','geodetic_crs','EPSG','4736','EPSG','3204','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4737','KGD2002',NULL,'geographic 2D','EPSG','6422','EPSG','6737',NULL,0); INSERT INTO "usage" VALUES('EPSG','3567','geodetic_crs','EPSG','4737','EPSG','1135','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4738','Hong Kong 1963',NULL,'geographic 2D','EPSG','6422','EPSG','6738',NULL,0); INSERT INTO "usage" VALUES('EPSG','3568','geodetic_crs','EPSG','4738','EPSG','1118','EPSG','1153'); INSERT INTO "geodetic_crs" VALUES('EPSG','4739','Hong Kong 1963(67)',NULL,'geographic 2D','EPSG','6422','EPSG','6739',NULL,0); INSERT INTO "usage" VALUES('EPSG','3569','geodetic_crs','EPSG','4739','EPSG','1118','EPSG','1160'); INSERT INTO "geodetic_crs" VALUES('EPSG','4740','PZ-90',NULL,'geographic 2D','EPSG','6422','EPSG','6740',NULL,0); INSERT INTO "usage" VALUES('EPSG','3570','geodetic_crs','EPSG','4740','EPSG','1262','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4741','FD54',NULL,'geographic 2D','EPSG','6422','EPSG','6741',NULL,0); INSERT INTO "usage" VALUES('EPSG','3571','geodetic_crs','EPSG','4741','EPSG','3248','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','4742','GDM2000',NULL,'geographic 2D','EPSG','6422','EPSG','6742',NULL,0); INSERT INTO "usage" VALUES('EPSG','3572','geodetic_crs','EPSG','4742','EPSG','1151','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4743','Karbala 1979',NULL,'geographic 2D','EPSG','6422','EPSG','6743',NULL,0); INSERT INTO "usage" VALUES('EPSG','3573','geodetic_crs','EPSG','4743','EPSG','3625','EPSG','1178'); INSERT INTO "geodetic_crs" VALUES('EPSG','4744','Nahrwan 1934',NULL,'geographic 2D','EPSG','6422','EPSG','6744',NULL,0); INSERT INTO "usage" VALUES('EPSG','3574','geodetic_crs','EPSG','4744','EPSG','4238','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','4745','RD/83',NULL,'geographic 2D','EPSG','6422','EPSG','6745',NULL,0); INSERT INTO "usage" VALUES('EPSG','3575','geodetic_crs','EPSG','4745','EPSG','2545','EPSG','1091'); INSERT INTO "geodetic_crs" VALUES('EPSG','4746','PD/83',NULL,'geographic 2D','EPSG','6422','EPSG','6746',NULL,0); INSERT INTO "usage" VALUES('EPSG','3576','geodetic_crs','EPSG','4746','EPSG','2544','EPSG','1091'); INSERT INTO "geodetic_crs" VALUES('EPSG','4747','GR96',NULL,'geographic 2D','EPSG','6422','EPSG','6747',NULL,0); INSERT INTO "usage" VALUES('EPSG','3577','geodetic_crs','EPSG','4747','EPSG','1107','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4748','Vanua Levu 1915',NULL,'geographic 2D','EPSG','6422','EPSG','6748',NULL,0); INSERT INTO "usage" VALUES('EPSG','3578','geodetic_crs','EPSG','4748','EPSG','3401','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4749','RGNC91-93',NULL,'geographic 2D','EPSG','6422','EPSG','6749',NULL,0); INSERT INTO "usage" VALUES('EPSG','3579','geodetic_crs','EPSG','4749','EPSG','1174','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','4750','ST87 Ouvea',NULL,'geographic 2D','EPSG','6422','EPSG','6750',NULL,0); INSERT INTO "usage" VALUES('EPSG','3580','geodetic_crs','EPSG','4750','EPSG','2813','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4751','Kertau (RSO)',NULL,'geographic 2D','EPSG','6422','EPSG','6751',NULL,0); INSERT INTO "usage" VALUES('EPSG','3581','geodetic_crs','EPSG','4751','EPSG','1309','EPSG','1250'); INSERT INTO "geodetic_crs" VALUES('EPSG','4752','Viti Levu 1912',NULL,'geographic 2D','EPSG','6422','EPSG','6752',NULL,0); INSERT INTO "usage" VALUES('EPSG','3582','geodetic_crs','EPSG','4752','EPSG','3195','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4753','fk89',NULL,'geographic 2D','EPSG','6422','EPSG','6753',NULL,0); INSERT INTO "usage" VALUES('EPSG','3583','geodetic_crs','EPSG','4753','EPSG','3248','EPSG','1028'); INSERT INTO "geodetic_crs" VALUES('EPSG','4754','LGD2006',NULL,'geographic 2D','EPSG','6422','EPSG','6754',NULL,0); INSERT INTO "usage" VALUES('EPSG','3584','geodetic_crs','EPSG','4754','EPSG','1143','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4755','DGN95',NULL,'geographic 2D','EPSG','6422','EPSG','6755',NULL,0); INSERT INTO "usage" VALUES('EPSG','3585','geodetic_crs','EPSG','4755','EPSG','1122','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4756','VN-2000',NULL,'geographic 2D','EPSG','6422','EPSG','6756',NULL,0); INSERT INTO "usage" VALUES('EPSG','3586','geodetic_crs','EPSG','4756','EPSG','3328','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4757','SVY21',NULL,'geographic 2D','EPSG','6422','EPSG','6757',NULL,0); INSERT INTO "usage" VALUES('EPSG','3587','geodetic_crs','EPSG','4757','EPSG','1210','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4758','JAD2001',NULL,'geographic 2D','EPSG','6422','EPSG','6758',NULL,0); INSERT INTO "usage" VALUES('EPSG','3588','geodetic_crs','EPSG','4758','EPSG','1128','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4759','NAD83(NSRS2007)',NULL,'geographic 2D','EPSG','6422','EPSG','6759',NULL,0); INSERT INTO "usage" VALUES('EPSG','3589','geodetic_crs','EPSG','4759','EPSG','1511','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4760','WGS 66',NULL,'geographic 2D','EPSG','6422','EPSG','6760',NULL,0); INSERT INTO "usage" VALUES('EPSG','3590','geodetic_crs','EPSG','4760','EPSG','1262','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4761','HTRS96',NULL,'geographic 2D','EPSG','6422','EPSG','6761',NULL,0); INSERT INTO "usage" VALUES('EPSG','3591','geodetic_crs','EPSG','4761','EPSG','1076','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4762','BDA2000',NULL,'geographic 2D','EPSG','6422','EPSG','6762',NULL,0); INSERT INTO "usage" VALUES('EPSG','3592','geodetic_crs','EPSG','4762','EPSG','1047','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4763','Pitcairn 2006',NULL,'geographic 2D','EPSG','6422','EPSG','6763',NULL,0); INSERT INTO "usage" VALUES('EPSG','3593','geodetic_crs','EPSG','4763','EPSG','3208','EPSG','1091'); INSERT INTO "geodetic_crs" VALUES('EPSG','4764','RSRGD2000',NULL,'geographic 2D','EPSG','6422','EPSG','6764',NULL,0); INSERT INTO "usage" VALUES('EPSG','3594','geodetic_crs','EPSG','4764','EPSG','3558','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4765','Slovenia 1996',NULL,'geographic 2D','EPSG','6422','EPSG','6765',NULL,0); INSERT INTO "usage" VALUES('EPSG','3595','geodetic_crs','EPSG','4765','EPSG','1212','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','4801','CH1903 (Bern)',NULL,'geographic 2D','EPSG','6422','EPSG','6801',NULL,0); INSERT INTO "usage" VALUES('EPSG','3631','geodetic_crs','EPSG','4801','EPSG','1286','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4802','Bogota 1975 (Bogota)',NULL,'geographic 2D','EPSG','6422','EPSG','6802',NULL,0); INSERT INTO "usage" VALUES('EPSG','3632','geodetic_crs','EPSG','4802','EPSG','3229','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4803','Lisbon (Lisbon)',NULL,'geographic 2D','EPSG','6422','EPSG','6803',NULL,0); INSERT INTO "usage" VALUES('EPSG','3633','geodetic_crs','EPSG','4803','EPSG','1294','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4804','Makassar (Jakarta)',NULL,'geographic 2D','EPSG','6422','EPSG','6804',NULL,0); INSERT INTO "usage" VALUES('EPSG','3634','geodetic_crs','EPSG','4804','EPSG','1316','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4805','MGI (Ferro)',NULL,'geographic 2D','EPSG','6422','EPSG','6805',NULL,0); INSERT INTO "usage" VALUES('EPSG','3635','geodetic_crs','EPSG','4805','EPSG','1321','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4806','Monte Mario (Rome)',NULL,'geographic 2D','EPSG','6422','EPSG','6806',NULL,0); INSERT INTO "usage" VALUES('EPSG','3636','geodetic_crs','EPSG','4806','EPSG','3343','EPSG','1188'); INSERT INTO "geodetic_crs" VALUES('EPSG','4807','NTF (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6807',NULL,0); INSERT INTO "usage" VALUES('EPSG','3637','geodetic_crs','EPSG','4807','EPSG','3694','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4808','Padang (Jakarta)',NULL,'geographic 2D','EPSG','6422','EPSG','6808',NULL,1); INSERT INTO "usage" VALUES('EPSG','3638','geodetic_crs','EPSG','4808','EPSG','1355','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4809','BD50 (Brussels)',NULL,'geographic 2D','EPSG','6422','EPSG','6809',NULL,0); INSERT INTO "usage" VALUES('EPSG','3639','geodetic_crs','EPSG','4809','EPSG','1347','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4810','Tananarive (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6810',NULL,0); INSERT INTO "usage" VALUES('EPSG','3640','geodetic_crs','EPSG','4810','EPSG','3273','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4811','Voirol 1875 (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6811',NULL,0); INSERT INTO "usage" VALUES('EPSG','3641','geodetic_crs','EPSG','4811','EPSG','1365','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4813','Batavia (Jakarta)',NULL,'geographic 2D','EPSG','6422','EPSG','6813',NULL,0); INSERT INTO "usage" VALUES('EPSG','3643','geodetic_crs','EPSG','4813','EPSG','1285','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4814','RT38 (Stockholm)',NULL,'geographic 2D','EPSG','6422','EPSG','6814',NULL,0); INSERT INTO "usage" VALUES('EPSG','3644','geodetic_crs','EPSG','4814','EPSG','3313','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4815','Greek (Athens)',NULL,'geographic 2D','EPSG','6422','EPSG','6815',NULL,0); INSERT INTO "usage" VALUES('EPSG','3645','geodetic_crs','EPSG','4815','EPSG','3254','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4816','Carthage (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6816',NULL,0); INSERT INTO "usage" VALUES('EPSG','3646','geodetic_crs','EPSG','4816','EPSG','1618','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4817','NGO 1948 (Oslo)',NULL,'geographic 2D','EPSG','6422','EPSG','6817',NULL,0); INSERT INTO "usage" VALUES('EPSG','3647','geodetic_crs','EPSG','4817','EPSG','1352','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4818','S-JTSK (Ferro)',NULL,'geographic 2D','EPSG','6422','EPSG','6818',NULL,0); INSERT INTO "usage" VALUES('EPSG','3648','geodetic_crs','EPSG','4818','EPSG','1306','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4819','Nord Sahara 1959 (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6819',NULL,1); INSERT INTO "usage" VALUES('EPSG','3649','geodetic_crs','EPSG','4819','EPSG','1366','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4820','Segara (Jakarta)',NULL,'geographic 2D','EPSG','6422','EPSG','6820',NULL,0); INSERT INTO "usage" VALUES('EPSG','3650','geodetic_crs','EPSG','4820','EPSG','1360','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4821','Voirol 1879 (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6821',NULL,0); INSERT INTO "usage" VALUES('EPSG','3651','geodetic_crs','EPSG','4821','EPSG','1365','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4823','Sao Tome',NULL,'geographic 2D','EPSG','6422','EPSG','1044',NULL,0); INSERT INTO "usage" VALUES('EPSG','3653','geodetic_crs','EPSG','4823','EPSG','3645','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4824','Principe',NULL,'geographic 2D','EPSG','6422','EPSG','1046',NULL,0); INSERT INTO "usage" VALUES('EPSG','3654','geodetic_crs','EPSG','4824','EPSG','3646','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4882','Slovenia 1996',NULL,'geocentric','EPSG','6500','EPSG','6765',NULL,0); INSERT INTO "usage" VALUES('EPSG','3683','geodetic_crs','EPSG','4882','EPSG','1212','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4883','Slovenia 1996',NULL,'geographic 3D','EPSG','6423','EPSG','6765',NULL,0); INSERT INTO "usage" VALUES('EPSG','3684','geodetic_crs','EPSG','4883','EPSG','1212','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4884','RSRGD2000',NULL,'geocentric','EPSG','6500','EPSG','6764',NULL,0); INSERT INTO "usage" VALUES('EPSG','3685','geodetic_crs','EPSG','4884','EPSG','3558','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4885','RSRGD2000',NULL,'geographic 3D','EPSG','6423','EPSG','6764',NULL,0); INSERT INTO "usage" VALUES('EPSG','3686','geodetic_crs','EPSG','4885','EPSG','3558','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4886','BDA2000',NULL,'geocentric','EPSG','6500','EPSG','6762',NULL,0); INSERT INTO "usage" VALUES('EPSG','3687','geodetic_crs','EPSG','4886','EPSG','1047','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4887','BDA2000',NULL,'geographic 3D','EPSG','6423','EPSG','6762',NULL,0); INSERT INTO "usage" VALUES('EPSG','3688','geodetic_crs','EPSG','4887','EPSG','1047','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4888','HTRS96',NULL,'geocentric','EPSG','6500','EPSG','6761',NULL,0); INSERT INTO "usage" VALUES('EPSG','3689','geodetic_crs','EPSG','4888','EPSG','1076','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4889','HTRS96',NULL,'geographic 3D','EPSG','6423','EPSG','6761',NULL,0); INSERT INTO "usage" VALUES('EPSG','3690','geodetic_crs','EPSG','4889','EPSG','1076','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4890','WGS 66',NULL,'geocentric','EPSG','6500','EPSG','6760',NULL,0); INSERT INTO "usage" VALUES('EPSG','3691','geodetic_crs','EPSG','4890','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4891','WGS 66',NULL,'geographic 3D','EPSG','6423','EPSG','6760',NULL,0); INSERT INTO "usage" VALUES('EPSG','3692','geodetic_crs','EPSG','4891','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4892','NAD83(NSRS2007)',NULL,'geocentric','EPSG','6500','EPSG','6759',NULL,0); INSERT INTO "usage" VALUES('EPSG','3693','geodetic_crs','EPSG','4892','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4893','NAD83(NSRS2007)',NULL,'geographic 3D','EPSG','6423','EPSG','6759',NULL,0); INSERT INTO "usage" VALUES('EPSG','3694','geodetic_crs','EPSG','4893','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4894','JAD2001',NULL,'geocentric','EPSG','6500','EPSG','6758',NULL,0); INSERT INTO "usage" VALUES('EPSG','3695','geodetic_crs','EPSG','4894','EPSG','1128','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4895','JAD2001',NULL,'geographic 3D','EPSG','6423','EPSG','6758',NULL,0); INSERT INTO "usage" VALUES('EPSG','3696','geodetic_crs','EPSG','4895','EPSG','1128','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4896','ITRF2005',NULL,'geocentric','EPSG','6500','EPSG','6896',NULL,0); INSERT INTO "usage" VALUES('EPSG','3697','geodetic_crs','EPSG','4896','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4897','DGN95',NULL,'geocentric','EPSG','6500','EPSG','6755',NULL,0); INSERT INTO "usage" VALUES('EPSG','3698','geodetic_crs','EPSG','4897','EPSG','1122','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4898','DGN95',NULL,'geographic 3D','EPSG','6423','EPSG','6755',NULL,0); INSERT INTO "usage" VALUES('EPSG','3699','geodetic_crs','EPSG','4898','EPSG','1122','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4899','LGD2006',NULL,'geocentric','EPSG','6500','EPSG','6754',NULL,0); INSERT INTO "usage" VALUES('EPSG','3700','geodetic_crs','EPSG','4899','EPSG','1143','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4900','LGD2006',NULL,'geographic 3D','EPSG','6423','EPSG','6754',NULL,0); INSERT INTO "usage" VALUES('EPSG','3701','geodetic_crs','EPSG','4900','EPSG','1143','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4901','ATF (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6901',NULL,0); INSERT INTO "usage" VALUES('EPSG','3702','geodetic_crs','EPSG','4901','EPSG','1326','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4902','NDG (Paris)',NULL,'geographic 2D','EPSG','6403','EPSG','6902',NULL,1); INSERT INTO "usage" VALUES('EPSG','3703','geodetic_crs','EPSG','4902','EPSG','1369','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4903','Madrid 1870 (Madrid)',NULL,'geographic 2D','EPSG','6422','EPSG','6903',NULL,0); INSERT INTO "usage" VALUES('EPSG','3704','geodetic_crs','EPSG','4903','EPSG','2366','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4904','Lisbon 1890 (Lisbon)',NULL,'geographic 2D','EPSG','6422','EPSG','6904',NULL,0); INSERT INTO "usage" VALUES('EPSG','3705','geodetic_crs','EPSG','4904','EPSG','1294','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4906','RGNC91-93',NULL,'geocentric','EPSG','6500','EPSG','6749',NULL,0); INSERT INTO "usage" VALUES('EPSG','3706','geodetic_crs','EPSG','4906','EPSG','1174','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4907','RGNC91-93',NULL,'geographic 3D','EPSG','6423','EPSG','6749',NULL,0); INSERT INTO "usage" VALUES('EPSG','3707','geodetic_crs','EPSG','4907','EPSG','1174','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','4908','GR96',NULL,'geocentric','EPSG','6500','EPSG','6747',NULL,0); INSERT INTO "usage" VALUES('EPSG','3708','geodetic_crs','EPSG','4908','EPSG','1107','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4909','GR96',NULL,'geographic 3D','EPSG','6423','EPSG','6747',NULL,0); INSERT INTO "usage" VALUES('EPSG','3709','geodetic_crs','EPSG','4909','EPSG','1107','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4910','ITRF88',NULL,'geocentric','EPSG','6500','EPSG','6647',NULL,0); INSERT INTO "usage" VALUES('EPSG','3710','geodetic_crs','EPSG','4910','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4911','ITRF89',NULL,'geocentric','EPSG','6500','EPSG','6648',NULL,0); INSERT INTO "usage" VALUES('EPSG','3711','geodetic_crs','EPSG','4911','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4912','ITRF90',NULL,'geocentric','EPSG','6500','EPSG','6649',NULL,0); INSERT INTO "usage" VALUES('EPSG','3712','geodetic_crs','EPSG','4912','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4913','ITRF91',NULL,'geocentric','EPSG','6500','EPSG','6650',NULL,0); INSERT INTO "usage" VALUES('EPSG','3713','geodetic_crs','EPSG','4913','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4914','ITRF92',NULL,'geocentric','EPSG','6500','EPSG','6651',NULL,0); INSERT INTO "usage" VALUES('EPSG','3714','geodetic_crs','EPSG','4914','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4915','ITRF93',NULL,'geocentric','EPSG','6500','EPSG','6652',NULL,0); INSERT INTO "usage" VALUES('EPSG','3715','geodetic_crs','EPSG','4915','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4916','ITRF94',NULL,'geocentric','EPSG','6500','EPSG','6653',NULL,0); INSERT INTO "usage" VALUES('EPSG','3716','geodetic_crs','EPSG','4916','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4917','ITRF96',NULL,'geocentric','EPSG','6500','EPSG','6654',NULL,0); INSERT INTO "usage" VALUES('EPSG','3717','geodetic_crs','EPSG','4917','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4918','ITRF97',NULL,'geocentric','EPSG','6500','EPSG','6655',NULL,0); INSERT INTO "usage" VALUES('EPSG','3718','geodetic_crs','EPSG','4918','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4919','ITRF2000',NULL,'geocentric','EPSG','6500','EPSG','6656',NULL,0); INSERT INTO "usage" VALUES('EPSG','3719','geodetic_crs','EPSG','4919','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4920','GDM2000',NULL,'geocentric','EPSG','6500','EPSG','6742',NULL,0); INSERT INTO "usage" VALUES('EPSG','3720','geodetic_crs','EPSG','4920','EPSG','1151','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4921','GDM2000',NULL,'geographic 3D','EPSG','6423','EPSG','6742',NULL,0); INSERT INTO "usage" VALUES('EPSG','3721','geodetic_crs','EPSG','4921','EPSG','1151','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4922','PZ-90',NULL,'geocentric','EPSG','6500','EPSG','6740',NULL,0); INSERT INTO "usage" VALUES('EPSG','3722','geodetic_crs','EPSG','4922','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_crs" VALUES('EPSG','4923','PZ-90',NULL,'geographic 3D','EPSG','6423','EPSG','6740',NULL,0); INSERT INTO "usage" VALUES('EPSG','3723','geodetic_crs','EPSG','4923','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_crs" VALUES('EPSG','4924','Mauritania 1999',NULL,'geocentric','EPSG','6500','EPSG','6702',NULL,0); INSERT INTO "usage" VALUES('EPSG','3724','geodetic_crs','EPSG','4924','EPSG','1157','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4925','Mauritania 1999',NULL,'geographic 3D','EPSG','6423','EPSG','6702',NULL,0); INSERT INTO "usage" VALUES('EPSG','3725','geodetic_crs','EPSG','4925','EPSG','1157','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4926','KGD2002',NULL,'geocentric','EPSG','6500','EPSG','6737',NULL,0); INSERT INTO "usage" VALUES('EPSG','3726','geodetic_crs','EPSG','4926','EPSG','1135','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4927','KGD2002',NULL,'geographic 3D','EPSG','6423','EPSG','6737',NULL,0); INSERT INTO "usage" VALUES('EPSG','3727','geodetic_crs','EPSG','4927','EPSG','1135','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4928','POSGAR 94',NULL,'geocentric','EPSG','6500','EPSG','6694',NULL,0); INSERT INTO "usage" VALUES('EPSG','3728','geodetic_crs','EPSG','4928','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4929','POSGAR 94',NULL,'geographic 3D','EPSG','6423','EPSG','6694',NULL,0); INSERT INTO "usage" VALUES('EPSG','3729','geodetic_crs','EPSG','4929','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4930','Australian Antarctic',NULL,'geocentric','EPSG','6500','EPSG','6176',NULL,0); INSERT INTO "usage" VALUES('EPSG','3730','geodetic_crs','EPSG','4930','EPSG','1278','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4931','Australian Antarctic',NULL,'geographic 3D','EPSG','6423','EPSG','6176',NULL,0); INSERT INTO "usage" VALUES('EPSG','3731','geodetic_crs','EPSG','4931','EPSG','1278','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4932','CHTRS95',NULL,'geocentric','EPSG','6500','EPSG','6151',NULL,0); INSERT INTO "usage" VALUES('EPSG','3732','geodetic_crs','EPSG','4932','EPSG','1286','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4933','CHTRS95',NULL,'geographic 3D','EPSG','6423','EPSG','6151',NULL,0); INSERT INTO "usage" VALUES('EPSG','3733','geodetic_crs','EPSG','4933','EPSG','1286','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4934','EST97',NULL,'geocentric','EPSG','6500','EPSG','6180',NULL,0); INSERT INTO "usage" VALUES('EPSG','3734','geodetic_crs','EPSG','4934','EPSG','1090','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4935','EST97',NULL,'geographic 3D','EPSG','6423','EPSG','6180',NULL,0); INSERT INTO "usage" VALUES('EPSG','3735','geodetic_crs','EPSG','4935','EPSG','1090','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4936','ETRS89',NULL,'geocentric','EPSG','6500','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('EPSG','3736','geodetic_crs','EPSG','4936','EPSG','4755','EPSG','1026'); INSERT INTO "geodetic_crs" VALUES('EPSG','4937','ETRS89',NULL,'geographic 3D','EPSG','6423','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('EPSG','3737','geodetic_crs','EPSG','4937','EPSG','4755','EPSG','1026'); INSERT INTO "geodetic_crs" VALUES('EPSG','4938','GDA94',NULL,'geocentric','EPSG','6500','EPSG','6283',NULL,0); INSERT INTO "usage" VALUES('EPSG','3738','geodetic_crs','EPSG','4938','EPSG','4177','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4939','GDA94',NULL,'geographic 3D','EPSG','6423','EPSG','6283',NULL,0); INSERT INTO "usage" VALUES('EPSG','3739','geodetic_crs','EPSG','4939','EPSG','4177','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4940','Hartebeesthoek94',NULL,'geocentric','EPSG','6500','EPSG','6148',NULL,0); INSERT INTO "usage" VALUES('EPSG','3740','geodetic_crs','EPSG','4940','EPSG','4540','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4941','Hartebeesthoek94',NULL,'geographic 3D','EPSG','6423','EPSG','6148',NULL,0); INSERT INTO "usage" VALUES('EPSG','3741','geodetic_crs','EPSG','4941','EPSG','4540','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4942','IRENET95',NULL,'geocentric','EPSG','6500','EPSG','6173',NULL,0); INSERT INTO "usage" VALUES('EPSG','3742','geodetic_crs','EPSG','4942','EPSG','1305','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4943','IRENET95',NULL,'geographic 3D','EPSG','6423','EPSG','6173',NULL,0); INSERT INTO "usage" VALUES('EPSG','3743','geodetic_crs','EPSG','4943','EPSG','1305','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4944','ISN93',NULL,'geocentric','EPSG','6500','EPSG','6659',NULL,0); INSERT INTO "usage" VALUES('EPSG','3744','geodetic_crs','EPSG','4944','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4945','ISN93',NULL,'geographic 3D','EPSG','6423','EPSG','6659',NULL,0); INSERT INTO "usage" VALUES('EPSG','3745','geodetic_crs','EPSG','4945','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4946','JGD2000',NULL,'geocentric','EPSG','6500','EPSG','6612',NULL,0); INSERT INTO "usage" VALUES('EPSG','3746','geodetic_crs','EPSG','4946','EPSG','1129','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4947','JGD2000',NULL,'geographic 3D','EPSG','6423','EPSG','6612',NULL,0); INSERT INTO "usage" VALUES('EPSG','3747','geodetic_crs','EPSG','4947','EPSG','1129','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4948','LKS-92',NULL,'geocentric','EPSG','6500','EPSG','6661',NULL,0); INSERT INTO "usage" VALUES('EPSG','3748','geodetic_crs','EPSG','4948','EPSG','1139','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4949','LKS-92',NULL,'geographic 3D','EPSG','6423','EPSG','6661',NULL,0); INSERT INTO "usage" VALUES('EPSG','3749','geodetic_crs','EPSG','4949','EPSG','1139','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4950','LKS94',NULL,'geocentric','EPSG','6500','EPSG','6126',NULL,0); INSERT INTO "usage" VALUES('EPSG','3750','geodetic_crs','EPSG','4950','EPSG','1145','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4951','LKS94',NULL,'geographic 3D','EPSG','6423','EPSG','6126',NULL,0); INSERT INTO "usage" VALUES('EPSG','3751','geodetic_crs','EPSG','4951','EPSG','1145','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4952','Moznet',NULL,'geocentric','EPSG','6500','EPSG','6130',NULL,0); INSERT INTO "usage" VALUES('EPSG','3752','geodetic_crs','EPSG','4952','EPSG','1167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4953','Moznet',NULL,'geographic 3D','EPSG','6423','EPSG','6130',NULL,0); INSERT INTO "usage" VALUES('EPSG','3753','geodetic_crs','EPSG','4953','EPSG','1167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4954','NAD83(CSRS)',NULL,'geocentric','EPSG','6500','EPSG','6140',NULL,0); INSERT INTO "usage" VALUES('EPSG','3754','geodetic_crs','EPSG','4954','EPSG','1061','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','4955','NAD83(CSRS)',NULL,'geographic 3D','EPSG','6423','EPSG','6140',NULL,0); INSERT INTO "usage" VALUES('EPSG','3755','geodetic_crs','EPSG','4955','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4956','NAD83(HARN)',NULL,'geocentric','EPSG','6500','EPSG','6152',NULL,0); INSERT INTO "usage" VALUES('EPSG','3756','geodetic_crs','EPSG','4956','EPSG','1337','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4957','NAD83(HARN)',NULL,'geographic 3D','EPSG','6423','EPSG','6152',NULL,0); INSERT INTO "usage" VALUES('EPSG','3757','geodetic_crs','EPSG','4957','EPSG','1337','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4958','NZGD2000',NULL,'geocentric','EPSG','6500','EPSG','6167',NULL,0); INSERT INTO "usage" VALUES('EPSG','3758','geodetic_crs','EPSG','4958','EPSG','1175','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4959','NZGD2000',NULL,'geographic 3D','EPSG','6423','EPSG','6167',NULL,0); INSERT INTO "usage" VALUES('EPSG','3759','geodetic_crs','EPSG','4959','EPSG','1175','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4960','POSGAR 98',NULL,'geocentric','EPSG','6500','EPSG','6190',NULL,0); INSERT INTO "usage" VALUES('EPSG','3760','geodetic_crs','EPSG','4960','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4961','POSGAR 98',NULL,'geographic 3D','EPSG','6423','EPSG','6190',NULL,0); INSERT INTO "usage" VALUES('EPSG','3761','geodetic_crs','EPSG','4961','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4962','REGVEN',NULL,'geocentric','EPSG','6500','EPSG','6189',NULL,0); INSERT INTO "usage" VALUES('EPSG','3762','geodetic_crs','EPSG','4962','EPSG','1251','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4963','REGVEN',NULL,'geographic 3D','EPSG','6423','EPSG','6189',NULL,0); INSERT INTO "usage" VALUES('EPSG','3763','geodetic_crs','EPSG','4963','EPSG','1251','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4964','RGF93 v1',NULL,'geocentric','EPSG','6500','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('EPSG','3764','geodetic_crs','EPSG','4964','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4965','RGF93 v1',NULL,'geographic 3D','EPSG','6423','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('EPSG','3765','geodetic_crs','EPSG','4965','EPSG','1096','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','4966','RGFG95',NULL,'geocentric','EPSG','6500','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('EPSG','3766','geodetic_crs','EPSG','4966','EPSG','1097','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4967','RGFG95',NULL,'geographic 3D','EPSG','6423','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('EPSG','3767','geodetic_crs','EPSG','4967','EPSG','1097','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','4968','RGNC 1991',NULL,'geocentric','EPSG','6500','EPSG','6645',NULL,1); INSERT INTO "usage" VALUES('EPSG','3768','geodetic_crs','EPSG','4968','EPSG','1174','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4969','RGNC 1991',NULL,'geographic 3D','EPSG','6423','EPSG','6645',NULL,1); INSERT INTO "usage" VALUES('EPSG','3769','geodetic_crs','EPSG','4969','EPSG','1174','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4970','RGR92',NULL,'geocentric','EPSG','6500','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('EPSG','3770','geodetic_crs','EPSG','4970','EPSG','3902','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4971','RGR92',NULL,'geographic 3D','EPSG','6423','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('EPSG','3771','geodetic_crs','EPSG','4971','EPSG','3902','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','4972','RRAF 1991',NULL,'geocentric','EPSG','6500','EPSG','6640',NULL,1); INSERT INTO "usage" VALUES('EPSG','3772','geodetic_crs','EPSG','4972','EPSG','2824','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4973','RRAF 1991',NULL,'geographic 3D','EPSG','6423','EPSG','6640',NULL,1); INSERT INTO "usage" VALUES('EPSG','3773','geodetic_crs','EPSG','4973','EPSG','2824','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4974','SIRGAS 1995',NULL,'geocentric','EPSG','6500','EPSG','6170',NULL,0); INSERT INTO "usage" VALUES('EPSG','3774','geodetic_crs','EPSG','4974','EPSG','3448','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4975','SIRGAS 1995',NULL,'geographic 3D','EPSG','6423','EPSG','6170',NULL,0); INSERT INTO "usage" VALUES('EPSG','3775','geodetic_crs','EPSG','4975','EPSG','3448','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4976','SWEREF99',NULL,'geocentric','EPSG','6500','EPSG','6619',NULL,0); INSERT INTO "usage" VALUES('EPSG','3776','geodetic_crs','EPSG','4976','EPSG','1225','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4977','SWEREF99',NULL,'geographic 3D','EPSG','6423','EPSG','6619',NULL,0); INSERT INTO "usage" VALUES('EPSG','3777','geodetic_crs','EPSG','4977','EPSG','1225','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4978','WGS 84',NULL,'geocentric','EPSG','6500','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('EPSG','3778','geodetic_crs','EPSG','4978','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','4979','WGS 84',NULL,'geographic 3D','EPSG','6423','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('EPSG','3779','geodetic_crs','EPSG','4979','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','4980','Yemen NGN96',NULL,'geocentric','EPSG','6500','EPSG','6163',NULL,0); INSERT INTO "usage" VALUES('EPSG','3780','geodetic_crs','EPSG','4980','EPSG','1257','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4981','Yemen NGN96',NULL,'geographic 3D','EPSG','6423','EPSG','6163',NULL,0); INSERT INTO "usage" VALUES('EPSG','3781','geodetic_crs','EPSG','4981','EPSG','1257','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4982','IGM95',NULL,'geocentric','EPSG','6500','EPSG','6670',NULL,0); INSERT INTO "usage" VALUES('EPSG','14402','geodetic_crs','EPSG','4982','EPSG','3343','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4983','IGM95',NULL,'geographic 3D','EPSG','6423','EPSG','6670',NULL,0); INSERT INTO "usage" VALUES('EPSG','14403','geodetic_crs','EPSG','4983','EPSG','3343','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4984','WGS 72',NULL,'geocentric','EPSG','6500','EPSG','6322',NULL,0); INSERT INTO "usage" VALUES('EPSG','3784','geodetic_crs','EPSG','4984','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4985','WGS 72',NULL,'geographic 3D','EPSG','6423','EPSG','6322',NULL,0); INSERT INTO "usage" VALUES('EPSG','3785','geodetic_crs','EPSG','4985','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4986','WGS 72BE',NULL,'geocentric','EPSG','6500','EPSG','6324',NULL,0); INSERT INTO "usage" VALUES('EPSG','3786','geodetic_crs','EPSG','4986','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4987','WGS 72BE',NULL,'geographic 3D','EPSG','6423','EPSG','6324',NULL,0); INSERT INTO "usage" VALUES('EPSG','3787','geodetic_crs','EPSG','4987','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4988','SIRGAS 2000',NULL,'geocentric','EPSG','6500','EPSG','6674',NULL,0); INSERT INTO "usage" VALUES('EPSG','3788','geodetic_crs','EPSG','4988','EPSG','3418','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4989','SIRGAS 2000',NULL,'geographic 3D','EPSG','6423','EPSG','6674',NULL,0); INSERT INTO "usage" VALUES('EPSG','3789','geodetic_crs','EPSG','4989','EPSG','3418','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4990','Lao 1993',NULL,'geocentric','EPSG','6500','EPSG','6677',NULL,0); INSERT INTO "usage" VALUES('EPSG','3790','geodetic_crs','EPSG','4990','EPSG','1138','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4991','Lao 1993',NULL,'geographic 3D','EPSG','6423','EPSG','6677',NULL,0); INSERT INTO "usage" VALUES('EPSG','3791','geodetic_crs','EPSG','4991','EPSG','1138','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4992','Lao 1997',NULL,'geocentric','EPSG','6500','EPSG','6678',NULL,0); INSERT INTO "usage" VALUES('EPSG','3792','geodetic_crs','EPSG','4992','EPSG','1138','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4993','Lao 1997',NULL,'geographic 3D','EPSG','6423','EPSG','6678',NULL,0); INSERT INTO "usage" VALUES('EPSG','3793','geodetic_crs','EPSG','4993','EPSG','1138','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4994','PRS92',NULL,'geocentric','EPSG','6500','EPSG','6683',NULL,0); INSERT INTO "usage" VALUES('EPSG','3794','geodetic_crs','EPSG','4994','EPSG','1190','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4995','PRS92',NULL,'geographic 3D','EPSG','6423','EPSG','6683',NULL,0); INSERT INTO "usage" VALUES('EPSG','3795','geodetic_crs','EPSG','4995','EPSG','1190','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4996','MAGNA-SIRGAS',NULL,'geocentric','EPSG','6500','EPSG','6686',NULL,0); INSERT INTO "usage" VALUES('EPSG','3796','geodetic_crs','EPSG','4996','EPSG','1070','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4997','MAGNA-SIRGAS',NULL,'geographic 3D','EPSG','6423','EPSG','6686',NULL,0); INSERT INTO "usage" VALUES('EPSG','3797','geodetic_crs','EPSG','4997','EPSG','1070','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4998','RGPF',NULL,'geocentric','EPSG','6500','EPSG','6687',NULL,0); INSERT INTO "usage" VALUES('EPSG','3798','geodetic_crs','EPSG','4998','EPSG','1098','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','4999','RGPF',NULL,'geographic 3D','EPSG','6423','EPSG','6687',NULL,0); INSERT INTO "usage" VALUES('EPSG','3799','geodetic_crs','EPSG','4999','EPSG','1098','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5011','PTRA08',NULL,'geocentric','EPSG','6500','EPSG','1041',NULL,0); INSERT INTO "usage" VALUES('EPSG','3800','geodetic_crs','EPSG','5011','EPSG','3670','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5012','PTRA08',NULL,'geographic 3D','EPSG','6423','EPSG','1041',NULL,0); INSERT INTO "usage" VALUES('EPSG','3801','geodetic_crs','EPSG','5012','EPSG','3670','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5013','PTRA08',NULL,'geographic 2D','EPSG','6422','EPSG','1041',NULL,0); INSERT INTO "usage" VALUES('EPSG','3802','geodetic_crs','EPSG','5013','EPSG','3670','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5132','Tokyo 1892',NULL,'geographic 2D','EPSG','6422','EPSG','1048',NULL,0); INSERT INTO "usage" VALUES('EPSG','3841','geodetic_crs','EPSG','5132','EPSG','1364','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5228','S-JTSK/05',NULL,'geographic 2D','EPSG','6422','EPSG','1052',NULL,0); INSERT INTO "usage" VALUES('EPSG','3871','geodetic_crs','EPSG','5228','EPSG','1079','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5229','S-JTSK/05 (Ferro)',NULL,'geographic 2D','EPSG','6422','EPSG','1055',NULL,0); INSERT INTO "usage" VALUES('EPSG','3872','geodetic_crs','EPSG','5229','EPSG','1079','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5233','SLD99',NULL,'geographic 2D','EPSG','6422','EPSG','1053',NULL,0); INSERT INTO "usage" VALUES('EPSG','3873','geodetic_crs','EPSG','5233','EPSG','3310','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5244','GDBD2009',NULL,'geocentric','EPSG','6500','EPSG','1056',NULL,0); INSERT INTO "usage" VALUES('EPSG','3878','geodetic_crs','EPSG','5244','EPSG','1055','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5245','GDBD2009',NULL,'geographic 3D','EPSG','6423','EPSG','1056',NULL,0); INSERT INTO "usage" VALUES('EPSG','3879','geodetic_crs','EPSG','5245','EPSG','1055','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5246','GDBD2009',NULL,'geographic 2D','EPSG','6422','EPSG','1056',NULL,0); INSERT INTO "usage" VALUES('EPSG','3880','geodetic_crs','EPSG','5246','EPSG','1055','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5250','TUREF',NULL,'geocentric','EPSG','6500','EPSG','1057',NULL,0); INSERT INTO "usage" VALUES('EPSG','3882','geodetic_crs','EPSG','5250','EPSG','1237','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5251','TUREF',NULL,'geographic 3D','EPSG','6423','EPSG','1057',NULL,0); INSERT INTO "usage" VALUES('EPSG','3883','geodetic_crs','EPSG','5251','EPSG','1237','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5252','TUREF',NULL,'geographic 2D','EPSG','6422','EPSG','1057',NULL,0); INSERT INTO "usage" VALUES('EPSG','3884','geodetic_crs','EPSG','5252','EPSG','1237','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5262','DRUKREF 03',NULL,'geocentric','EPSG','6500','EPSG','1058',NULL,0); INSERT INTO "usage" VALUES('EPSG','3892','geodetic_crs','EPSG','5262','EPSG','1048','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5263','DRUKREF 03',NULL,'geographic 3D','EPSG','6423','EPSG','1058',NULL,0); INSERT INTO "usage" VALUES('EPSG','3893','geodetic_crs','EPSG','5263','EPSG','1048','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5264','DRUKREF 03',NULL,'geographic 2D','EPSG','6422','EPSG','1058',NULL,0); INSERT INTO "usage" VALUES('EPSG','3894','geodetic_crs','EPSG','5264','EPSG','1048','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5322','ISN2004',NULL,'geocentric','EPSG','6500','EPSG','1060',NULL,0); INSERT INTO "usage" VALUES('EPSG','3928','geodetic_crs','EPSG','5322','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5323','ISN2004',NULL,'geographic 3D','EPSG','6423','EPSG','1060',NULL,0); INSERT INTO "usage" VALUES('EPSG','3929','geodetic_crs','EPSG','5323','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5324','ISN2004',NULL,'geographic 2D','EPSG','6422','EPSG','1060',NULL,0); INSERT INTO "usage" VALUES('EPSG','3930','geodetic_crs','EPSG','5324','EPSG','1120','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5332','ITRF2008',NULL,'geocentric','EPSG','6500','EPSG','1061',NULL,0); INSERT INTO "usage" VALUES('EPSG','3935','geodetic_crs','EPSG','5332','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5340','POSGAR 2007',NULL,'geographic 2D','EPSG','6422','EPSG','1062',NULL,0); INSERT INTO "usage" VALUES('EPSG','3938','geodetic_crs','EPSG','5340','EPSG','1033','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5341','POSGAR 2007',NULL,'geocentric','EPSG','6500','EPSG','1062',NULL,0); INSERT INTO "usage" VALUES('EPSG','3939','geodetic_crs','EPSG','5341','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5342','POSGAR 2007',NULL,'geographic 3D','EPSG','6423','EPSG','1062',NULL,0); INSERT INTO "usage" VALUES('EPSG','3940','geodetic_crs','EPSG','5342','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5352','MARGEN',NULL,'geocentric','EPSG','6500','EPSG','1063',NULL,0); INSERT INTO "usage" VALUES('EPSG','3948','geodetic_crs','EPSG','5352','EPSG','1049','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5353','MARGEN',NULL,'geographic 3D','EPSG','6423','EPSG','1063',NULL,0); INSERT INTO "usage" VALUES('EPSG','3949','geodetic_crs','EPSG','5353','EPSG','1049','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5354','MARGEN',NULL,'geographic 2D','EPSG','6422','EPSG','1063',NULL,0); INSERT INTO "usage" VALUES('EPSG','3950','geodetic_crs','EPSG','5354','EPSG','1049','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5358','SIRGAS-Chile 2002',NULL,'geocentric','EPSG','6500','EPSG','1064',NULL,0); INSERT INTO "usage" VALUES('EPSG','3954','geodetic_crs','EPSG','5358','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5359','SIRGAS-Chile 2002',NULL,'geographic 3D','EPSG','6423','EPSG','1064',NULL,0); INSERT INTO "usage" VALUES('EPSG','3955','geodetic_crs','EPSG','5359','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5360','SIRGAS-Chile 2002',NULL,'geographic 2D','EPSG','6422','EPSG','1064',NULL,0); INSERT INTO "usage" VALUES('EPSG','3956','geodetic_crs','EPSG','5360','EPSG','1066','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5363','CR05',NULL,'geocentric','EPSG','6500','EPSG','1065',NULL,0); INSERT INTO "usage" VALUES('EPSG','3959','geodetic_crs','EPSG','5363','EPSG','1074','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5364','CR05',NULL,'geographic 3D','EPSG','6423','EPSG','1065',NULL,0); INSERT INTO "usage" VALUES('EPSG','3960','geodetic_crs','EPSG','5364','EPSG','1074','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5365','CR05',NULL,'geographic 2D','EPSG','6422','EPSG','1065',NULL,0); INSERT INTO "usage" VALUES('EPSG','3961','geodetic_crs','EPSG','5365','EPSG','1074','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5368','MACARIO SOLIS',NULL,'geocentric','EPSG','6500','EPSG','1066',NULL,0); INSERT INTO "usage" VALUES('EPSG','3963','geodetic_crs','EPSG','5368','EPSG','1186','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5369','Peru96',NULL,'geocentric','EPSG','6500','EPSG','1067',NULL,0); INSERT INTO "usage" VALUES('EPSG','3964','geodetic_crs','EPSG','5369','EPSG','1189','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5370','MACARIO SOLIS',NULL,'geographic 3D','EPSG','6423','EPSG','1066',NULL,0); INSERT INTO "usage" VALUES('EPSG','3965','geodetic_crs','EPSG','5370','EPSG','1186','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5371','MACARIO SOLIS',NULL,'geographic 2D','EPSG','6422','EPSG','1066',NULL,0); INSERT INTO "usage" VALUES('EPSG','3966','geodetic_crs','EPSG','5371','EPSG','1186','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5372','Peru96',NULL,'geographic 3D','EPSG','6423','EPSG','1067',NULL,0); INSERT INTO "usage" VALUES('EPSG','3967','geodetic_crs','EPSG','5372','EPSG','1189','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5373','Peru96',NULL,'geographic 2D','EPSG','6422','EPSG','1067',NULL,0); INSERT INTO "usage" VALUES('EPSG','3968','geodetic_crs','EPSG','5373','EPSG','1189','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5379','SIRGAS-ROU98',NULL,'geocentric','EPSG','6500','EPSG','1068',NULL,0); INSERT INTO "usage" VALUES('EPSG','3969','geodetic_crs','EPSG','5379','EPSG','1247','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5380','SIRGAS-ROU98',NULL,'geographic 3D','EPSG','6423','EPSG','1068',NULL,0); INSERT INTO "usage" VALUES('EPSG','3970','geodetic_crs','EPSG','5380','EPSG','1247','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5381','SIRGAS-ROU98',NULL,'geographic 2D','EPSG','6422','EPSG','1068',NULL,0); INSERT INTO "usage" VALUES('EPSG','3971','geodetic_crs','EPSG','5381','EPSG','1247','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5391','SIRGAS_ES2007.8',NULL,'geocentric','EPSG','6500','EPSG','1069',NULL,0); INSERT INTO "usage" VALUES('EPSG','3977','geodetic_crs','EPSG','5391','EPSG','1087','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5392','SIRGAS_ES2007.8',NULL,'geographic 3D','EPSG','6423','EPSG','1069',NULL,0); INSERT INTO "usage" VALUES('EPSG','3978','geodetic_crs','EPSG','5392','EPSG','1087','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5393','SIRGAS_ES2007.8',NULL,'geographic 2D','EPSG','6422','EPSG','1069',NULL,0); INSERT INTO "usage" VALUES('EPSG','3979','geodetic_crs','EPSG','5393','EPSG','1087','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5451','Ocotepeque 1935',NULL,'geographic 2D','EPSG','6422','EPSG','1070',NULL,0); INSERT INTO "usage" VALUES('EPSG','3981','geodetic_crs','EPSG','5451','EPSG','3876','EPSG','1180'); INSERT INTO "geodetic_crs" VALUES('EPSG','5464','Sibun Gorge 1922',NULL,'geographic 2D','EPSG','6422','EPSG','1071',NULL,0); INSERT INTO "usage" VALUES('EPSG','3990','geodetic_crs','EPSG','5464','EPSG','3219','EPSG','1180'); INSERT INTO "geodetic_crs" VALUES('EPSG','5467','Panama-Colon 1911',NULL,'geographic 2D','EPSG','6422','EPSG','1072',NULL,0); INSERT INTO "usage" VALUES('EPSG','3992','geodetic_crs','EPSG','5467','EPSG','3290','EPSG','1180'); INSERT INTO "geodetic_crs" VALUES('EPSG','5487','RGAF09',NULL,'geocentric','EPSG','6500','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('EPSG','3999','geodetic_crs','EPSG','5487','EPSG','2824','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5488','RGAF09',NULL,'geographic 3D','EPSG','6423','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('EPSG','4000','geodetic_crs','EPSG','5488','EPSG','2824','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','5489','RGAF09',NULL,'geographic 2D','EPSG','6422','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('EPSG','4001','geodetic_crs','EPSG','5489','EPSG','2824','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5524','Corrego Alegre 1961',NULL,'geographic 2D','EPSG','6422','EPSG','1074',NULL,0); INSERT INTO "usage" VALUES('EPSG','4014','geodetic_crs','EPSG','5524','EPSG','3874','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5527','SAD69(96)',NULL,'geographic 2D','EPSG','6422','EPSG','1075',NULL,0); INSERT INTO "usage" VALUES('EPSG','4015','geodetic_crs','EPSG','5527','EPSG','1053','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5544','PNG94',NULL,'geocentric','EPSG','6500','EPSG','1076',NULL,0); INSERT INTO "usage" VALUES('EPSG','4026','geodetic_crs','EPSG','5544','EPSG','1187','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5545','PNG94',NULL,'geographic 3D','EPSG','6423','EPSG','1076',NULL,0); INSERT INTO "usage" VALUES('EPSG','4027','geodetic_crs','EPSG','5545','EPSG','1187','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5546','PNG94',NULL,'geographic 2D','EPSG','6422','EPSG','1076',NULL,0); INSERT INTO "usage" VALUES('EPSG','4028','geodetic_crs','EPSG','5546','EPSG','1187','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5558','UCS-2000',NULL,'geocentric','EPSG','6500','EPSG','1077',NULL,0); INSERT INTO "usage" VALUES('EPSG','4035','geodetic_crs','EPSG','5558','EPSG','1242','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5560','UCS-2000',NULL,'geographic 3D','EPSG','6423','EPSG','1077',NULL,0); INSERT INTO "usage" VALUES('EPSG','4037','geodetic_crs','EPSG','5560','EPSG','1242','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5561','UCS-2000',NULL,'geographic 2D','EPSG','6422','EPSG','1077',NULL,0); INSERT INTO "usage" VALUES('EPSG','4038','geodetic_crs','EPSG','5561','EPSG','1242','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5591','FEH2010',NULL,'geocentric','EPSG','6500','EPSG','1078',NULL,0); INSERT INTO "usage" VALUES('EPSG','4063','geodetic_crs','EPSG','5591','EPSG','3889','EPSG','1139'); INSERT INTO "geodetic_crs" VALUES('EPSG','5592','FEH2010',NULL,'geographic 3D','EPSG','6423','EPSG','1078',NULL,0); INSERT INTO "usage" VALUES('EPSG','4064','geodetic_crs','EPSG','5592','EPSG','3889','EPSG','1139'); INSERT INTO "geodetic_crs" VALUES('EPSG','5593','FEH2010',NULL,'geographic 2D','EPSG','6422','EPSG','1078',NULL,0); INSERT INTO "usage" VALUES('EPSG','4065','geodetic_crs','EPSG','5593','EPSG','3889','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','5681','DB_REF',NULL,'geographic 2D','EPSG','6422','EPSG','1081',NULL,0); INSERT INTO "usage" VALUES('EPSG','4136','geodetic_crs','EPSG','5681','EPSG','3339','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5828','DB_REF',NULL,'geocentric','EPSG','6500','EPSG','1081',NULL,0); INSERT INTO "usage" VALUES('EPSG','4266','geodetic_crs','EPSG','5828','EPSG','3339','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5830','DB_REF',NULL,'geographic 3D','EPSG','6423','EPSG','1081',NULL,0); INSERT INTO "usage" VALUES('EPSG','4268','geodetic_crs','EPSG','5830','EPSG','3339','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5884','TGD2005',NULL,'geocentric','EPSG','6500','EPSG','1095',NULL,0); INSERT INTO "usage" VALUES('EPSG','4314','geodetic_crs','EPSG','5884','EPSG','1234','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5885','TGD2005',NULL,'geographic 3D','EPSG','6423','EPSG','1095',NULL,0); INSERT INTO "usage" VALUES('EPSG','4315','geodetic_crs','EPSG','5885','EPSG','1234','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','5886','TGD2005',NULL,'geographic 2D','EPSG','6422','EPSG','1095',NULL,0); INSERT INTO "usage" VALUES('EPSG','4316','geodetic_crs','EPSG','5886','EPSG','1234','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6133','CIGD11',NULL,'geocentric','EPSG','6500','EPSG','1100',NULL,0); INSERT INTO "usage" VALUES('EPSG','4460','geodetic_crs','EPSG','6133','EPSG','1063','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6134','CIGD11',NULL,'geographic 3D','EPSG','6423','EPSG','1100',NULL,0); INSERT INTO "usage" VALUES('EPSG','4461','geodetic_crs','EPSG','6134','EPSG','1063','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6135','CIGD11',NULL,'geographic 2D','EPSG','6422','EPSG','1100',NULL,0); INSERT INTO "usage" VALUES('EPSG','4462','geodetic_crs','EPSG','6135','EPSG','1063','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6207','Nepal 1981',NULL,'geographic 2D','EPSG','6422','EPSG','1111',NULL,0); INSERT INTO "usage" VALUES('EPSG','4512','geodetic_crs','EPSG','6207','EPSG','1171','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6309','CGRS93',NULL,'geocentric','EPSG','6500','EPSG','1112',NULL,0); INSERT INTO "usage" VALUES('EPSG','4548','geodetic_crs','EPSG','6309','EPSG','3236','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6310','CGRS93',NULL,'geographic 3D','EPSG','6423','EPSG','1112',NULL,0); INSERT INTO "usage" VALUES('EPSG','4549','geodetic_crs','EPSG','6310','EPSG','3236','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6311','CGRS93',NULL,'geographic 2D','EPSG','6422','EPSG','1112',NULL,0); INSERT INTO "usage" VALUES('EPSG','4550','geodetic_crs','EPSG','6311','EPSG','3236','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6317','NAD83(2011)',NULL,'geocentric','EPSG','6500','EPSG','1116',NULL,0); INSERT INTO "usage" VALUES('EPSG','4553','geodetic_crs','EPSG','6317','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6318','NAD83(2011)',NULL,'geographic 2D','EPSG','6422','EPSG','1116',NULL,0); INSERT INTO "usage" VALUES('EPSG','4554','geodetic_crs','EPSG','6318','EPSG','1511','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6319','NAD83(2011)',NULL,'geographic 3D','EPSG','6423','EPSG','1116',NULL,0); INSERT INTO "usage" VALUES('EPSG','4555','geodetic_crs','EPSG','6319','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6320','NAD83(PA11)',NULL,'geocentric','EPSG','6500','EPSG','1117',NULL,0); INSERT INTO "usage" VALUES('EPSG','4556','geodetic_crs','EPSG','6320','EPSG','4162','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6321','NAD83(PA11)',NULL,'geographic 3D','EPSG','6423','EPSG','1117',NULL,0); INSERT INTO "usage" VALUES('EPSG','4557','geodetic_crs','EPSG','6321','EPSG','4162','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6322','NAD83(PA11)',NULL,'geographic 2D','EPSG','6422','EPSG','1117',NULL,0); INSERT INTO "usage" VALUES('EPSG','4558','geodetic_crs','EPSG','6322','EPSG','4162','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6323','NAD83(MA11)',NULL,'geocentric','EPSG','6500','EPSG','1118',NULL,0); INSERT INTO "usage" VALUES('EPSG','4559','geodetic_crs','EPSG','6323','EPSG','4167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6324','NAD83(MA11)',NULL,'geographic 3D','EPSG','6423','EPSG','1118',NULL,0); INSERT INTO "usage" VALUES('EPSG','4560','geodetic_crs','EPSG','6324','EPSG','4167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6325','NAD83(MA11)',NULL,'geographic 2D','EPSG','6422','EPSG','1118',NULL,0); INSERT INTO "usage" VALUES('EPSG','4561','geodetic_crs','EPSG','6325','EPSG','4167','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6363','Mexico ITRF2008',NULL,'geocentric','EPSG','6500','EPSG','1120',NULL,0); INSERT INTO "usage" VALUES('EPSG','4596','geodetic_crs','EPSG','6363','EPSG','1160','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6364','Mexico ITRF2008',NULL,'geographic 3D','EPSG','6423','EPSG','1120',NULL,0); INSERT INTO "usage" VALUES('EPSG','4597','geodetic_crs','EPSG','6364','EPSG','1160','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6365','Mexico ITRF2008',NULL,'geographic 2D','EPSG','6422','EPSG','1120',NULL,0); INSERT INTO "usage" VALUES('EPSG','4598','geodetic_crs','EPSG','6365','EPSG','1160','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6666','JGD2011',NULL,'geocentric','EPSG','6500','EPSG','1128',NULL,0); INSERT INTO "usage" VALUES('EPSG','4885','geodetic_crs','EPSG','6666','EPSG','1129','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6667','JGD2011',NULL,'geographic 3D','EPSG','6423','EPSG','1128',NULL,0); INSERT INTO "usage" VALUES('EPSG','4886','geodetic_crs','EPSG','6667','EPSG','1129','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6668','JGD2011',NULL,'geographic 2D','EPSG','6422','EPSG','1128',NULL,0); INSERT INTO "usage" VALUES('EPSG','4887','geodetic_crs','EPSG','6668','EPSG','1129','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6704','RDN2008',NULL,'geocentric','EPSG','6500','EPSG','1132',NULL,0); INSERT INTO "usage" VALUES('EPSG','14411','geodetic_crs','EPSG','6704','EPSG','3343','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6705','RDN2008',NULL,'geographic 3D','EPSG','6423','EPSG','1132',NULL,0); INSERT INTO "usage" VALUES('EPSG','14410','geodetic_crs','EPSG','6705','EPSG','3343','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6706','RDN2008',NULL,'geographic 2D','EPSG','6422','EPSG','1132',NULL,0); INSERT INTO "usage" VALUES('EPSG','14412','geodetic_crs','EPSG','6706','EPSG','3343','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6781','NAD83(CORS96)',NULL,'geocentric','EPSG','6500','EPSG','1133',NULL,0); INSERT INTO "usage" VALUES('EPSG','4937','geodetic_crs','EPSG','6781','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6782','NAD83(CORS96)',NULL,'geographic 3D','EPSG','6423','EPSG','1133',NULL,0); INSERT INTO "usage" VALUES('EPSG','4938','geodetic_crs','EPSG','6782','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6783','NAD83(CORS96)',NULL,'geographic 2D','EPSG','6422','EPSG','1133',NULL,0); INSERT INTO "usage" VALUES('EPSG','4939','geodetic_crs','EPSG','6783','EPSG','1511','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','6881','Aden 1925',NULL,'geographic 2D','EPSG','6422','EPSG','1135',NULL,0); INSERT INTO "usage" VALUES('EPSG','5028','geodetic_crs','EPSG','6881','EPSG','1340','EPSG','1138'); INSERT INTO "geodetic_crs" VALUES('EPSG','6882','Bekaa Valley 1920',NULL,'geographic 2D','EPSG','6422','EPSG','1137',NULL,0); INSERT INTO "usage" VALUES('EPSG','5029','geodetic_crs','EPSG','6882','EPSG','3269','EPSG','1153'); INSERT INTO "geodetic_crs" VALUES('EPSG','6883','Bioko',NULL,'geographic 2D','EPSG','6422','EPSG','1136',NULL,0); INSERT INTO "usage" VALUES('EPSG','5030','geodetic_crs','EPSG','6883','EPSG','4220','EPSG','1153'); INSERT INTO "geodetic_crs" VALUES('EPSG','6892','South East Island 1943',NULL,'geographic 2D','EPSG','6422','EPSG','1138',NULL,0); INSERT INTO "usage" VALUES('EPSG','5035','geodetic_crs','EPSG','6892','EPSG','4183','EPSG','1237'); INSERT INTO "geodetic_crs" VALUES('EPSG','6894','Gambia',NULL,'geographic 2D','EPSG','6422','EPSG','1139',NULL,0); INSERT INTO "usage" VALUES('EPSG','5037','geodetic_crs','EPSG','6894','EPSG','3250','EPSG','1153'); INSERT INTO "geodetic_crs" VALUES('EPSG','6934','IGS08',NULL,'geocentric','EPSG','6500','EPSG','1141',NULL,0); INSERT INTO "usage" VALUES('EPSG','5049','geodetic_crs','EPSG','6934','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6978','IGD05',NULL,'geocentric','EPSG','6500','EPSG','1143',NULL,1); INSERT INTO "usage" VALUES('EPSG','5056','geodetic_crs','EPSG','6978','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6979','IGD05',NULL,'geographic 3D','EPSG','6423','EPSG','1143',NULL,1); INSERT INTO "usage" VALUES('EPSG','5057','geodetic_crs','EPSG','6979','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6980','IGD05',NULL,'geographic 2D','EPSG','6422','EPSG','1143',NULL,1); INSERT INTO "usage" VALUES('EPSG','5058','geodetic_crs','EPSG','6980','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6981','IG05 Intermediate CRS',NULL,'geocentric','EPSG','6500','EPSG','1142',NULL,0); INSERT INTO "usage" VALUES('EPSG','5059','geodetic_crs','EPSG','6981','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','6982','IG05 Intermediate CRS',NULL,'geographic 3D','EPSG','6423','EPSG','1142',NULL,0); INSERT INTO "usage" VALUES('EPSG','5060','geodetic_crs','EPSG','6982','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','6983','IG05 Intermediate CRS',NULL,'geographic 2D','EPSG','6422','EPSG','1142',NULL,0); INSERT INTO "usage" VALUES('EPSG','5061','geodetic_crs','EPSG','6983','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','6985','IGD05/12',NULL,'geocentric','EPSG','6500','EPSG','1145',NULL,1); INSERT INTO "usage" VALUES('EPSG','5063','geodetic_crs','EPSG','6985','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6986','IGD05/12',NULL,'geographic 3D','EPSG','6423','EPSG','1145',NULL,1); INSERT INTO "usage" VALUES('EPSG','5064','geodetic_crs','EPSG','6986','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6987','IGD05/12',NULL,'geographic 2D','EPSG','6422','EPSG','1145',NULL,1); INSERT INTO "usage" VALUES('EPSG','5065','geodetic_crs','EPSG','6987','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','6988','IG05/12 Intermediate CRS',NULL,'geocentric','EPSG','6500','EPSG','1144',NULL,0); INSERT INTO "usage" VALUES('EPSG','5066','geodetic_crs','EPSG','6988','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','6989','IG05/12 Intermediate CRS',NULL,'geographic 3D','EPSG','6423','EPSG','1144',NULL,0); INSERT INTO "usage" VALUES('EPSG','5067','geodetic_crs','EPSG','6989','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','6990','IG05/12 Intermediate CRS',NULL,'geographic 2D','EPSG','6422','EPSG','1144',NULL,0); INSERT INTO "usage" VALUES('EPSG','5068','geodetic_crs','EPSG','6990','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','7034','RGSPM06 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('EPSG','5075','geodetic_crs','EPSG','7034','EPSG','1220','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7035','RGSPM06 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('EPSG','5076','geodetic_crs','EPSG','7035','EPSG','1220','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7036','RGR92 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('EPSG','5077','geodetic_crs','EPSG','7036','EPSG','3902','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7037','RGR92 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('EPSG','5078','geodetic_crs','EPSG','7037','EPSG','3902','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7038','RGM04 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('EPSG','5079','geodetic_crs','EPSG','7038','EPSG','1159','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7039','RGM04 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('EPSG','5080','geodetic_crs','EPSG','7039','EPSG','1159','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7040','RGFG95 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('EPSG','5081','geodetic_crs','EPSG','7040','EPSG','1097','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7041','RGFG95 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('EPSG','5082','geodetic_crs','EPSG','7041','EPSG','1097','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7042','RGF93 v1 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('EPSG','5083','geodetic_crs','EPSG','7042','EPSG','1096','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7071','RGTAAF07',NULL,'geocentric','EPSG','6500','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('EPSG','5098','geodetic_crs','EPSG','7071','EPSG','4246','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7072','RGTAAF07',NULL,'geographic 3D','EPSG','6423','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('EPSG','5099','geodetic_crs','EPSG','7072','EPSG','4246','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','7073','RGTAAF07',NULL,'geographic 2D','EPSG','6422','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('EPSG','5100','geodetic_crs','EPSG','7073','EPSG','4246','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','7084','RGF93 v1 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('EPSG','5110','geodetic_crs','EPSG','7084','EPSG','1096','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7085','RGAF09 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('EPSG','5111','geodetic_crs','EPSG','7085','EPSG','2824','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7086','RGAF09 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('EPSG','5112','geodetic_crs','EPSG','7086','EPSG','2824','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7087','RGTAAF07 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('EPSG','5113','geodetic_crs','EPSG','7087','EPSG','4246','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7088','RGTAAF07 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1113',NULL,1); INSERT INTO "usage" VALUES('EPSG','5114','geodetic_crs','EPSG','7088','EPSG','4246','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7133','RGTAAF07 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('EPSG','5137','geodetic_crs','EPSG','7133','EPSG','4246','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','7134','IGD05',NULL,'geocentric','EPSG','6500','EPSG','1114',NULL,0); INSERT INTO "usage" VALUES('EPSG','5138','geodetic_crs','EPSG','7134','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7135','IGD05',NULL,'geographic 3D','EPSG','6423','EPSG','1114',NULL,0); INSERT INTO "usage" VALUES('EPSG','5139','geodetic_crs','EPSG','7135','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7136','IGD05',NULL,'geographic 2D','EPSG','6422','EPSG','1114',NULL,0); INSERT INTO "usage" VALUES('EPSG','5140','geodetic_crs','EPSG','7136','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7137','IGD05/12',NULL,'geocentric','EPSG','6500','EPSG','1115',NULL,0); INSERT INTO "usage" VALUES('EPSG','5141','geodetic_crs','EPSG','7137','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7138','IGD05/12',NULL,'geographic 3D','EPSG','6423','EPSG','1115',NULL,0); INSERT INTO "usage" VALUES('EPSG','5142','geodetic_crs','EPSG','7138','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7139','IGD05/12',NULL,'geographic 2D','EPSG','6422','EPSG','1115',NULL,0); INSERT INTO "usage" VALUES('EPSG','5143','geodetic_crs','EPSG','7139','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7371','ONGD14',NULL,'geocentric','EPSG','6500','EPSG','1147',NULL,0); INSERT INTO "usage" VALUES('EPSG','5259','geodetic_crs','EPSG','7371','EPSG','1183','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7372','ONGD14',NULL,'geographic 3D','EPSG','6423','EPSG','1147',NULL,0); INSERT INTO "usage" VALUES('EPSG','5260','geodetic_crs','EPSG','7372','EPSG','1183','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7373','ONGD14',NULL,'geographic 2D','EPSG','6422','EPSG','1147',NULL,0); INSERT INTO "usage" VALUES('EPSG','5261','geodetic_crs','EPSG','7373','EPSG','1183','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','7656','WGS 84 (G730)',NULL,'geocentric','EPSG','6500','EPSG','1152',NULL,0); INSERT INTO "usage" VALUES('EPSG','5411','geodetic_crs','EPSG','7656','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7657','WGS 84 (G730)',NULL,'geographic 3D','EPSG','6423','EPSG','1152',NULL,0); INSERT INTO "usage" VALUES('EPSG','5412','geodetic_crs','EPSG','7657','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7658','WGS 84 (G873)',NULL,'geocentric','EPSG','6500','EPSG','1153',NULL,0); INSERT INTO "usage" VALUES('EPSG','5413','geodetic_crs','EPSG','7658','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7659','WGS 84 (G873)',NULL,'geographic 3D','EPSG','6423','EPSG','1153',NULL,0); INSERT INTO "usage" VALUES('EPSG','5414','geodetic_crs','EPSG','7659','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7660','WGS 84 (G1150)',NULL,'geocentric','EPSG','6500','EPSG','1154',NULL,0); INSERT INTO "usage" VALUES('EPSG','5415','geodetic_crs','EPSG','7660','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7661','WGS 84 (G1150)',NULL,'geographic 3D','EPSG','6423','EPSG','1154',NULL,0); INSERT INTO "usage" VALUES('EPSG','5416','geodetic_crs','EPSG','7661','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7662','WGS 84 (G1674)',NULL,'geocentric','EPSG','6500','EPSG','1155',NULL,0); INSERT INTO "usage" VALUES('EPSG','5417','geodetic_crs','EPSG','7662','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7663','WGS 84 (G1674)',NULL,'geographic 3D','EPSG','6423','EPSG','1155',NULL,0); INSERT INTO "usage" VALUES('EPSG','5418','geodetic_crs','EPSG','7663','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7664','WGS 84 (G1762)',NULL,'geocentric','EPSG','6500','EPSG','1156',NULL,0); INSERT INTO "usage" VALUES('EPSG','5419','geodetic_crs','EPSG','7664','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7665','WGS 84 (G1762)',NULL,'geographic 3D','EPSG','6423','EPSG','1156',NULL,0); INSERT INTO "usage" VALUES('EPSG','5420','geodetic_crs','EPSG','7665','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7677','PZ-90.02',NULL,'geocentric','EPSG','6500','EPSG','1157',NULL,0); INSERT INTO "usage" VALUES('EPSG','5421','geodetic_crs','EPSG','7677','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_crs" VALUES('EPSG','7678','PZ-90.02',NULL,'geographic 3D','EPSG','6423','EPSG','1157',NULL,0); INSERT INTO "usage" VALUES('EPSG','5422','geodetic_crs','EPSG','7678','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_crs" VALUES('EPSG','7679','PZ-90.11',NULL,'geocentric','EPSG','6500','EPSG','1158',NULL,0); INSERT INTO "usage" VALUES('EPSG','5423','geodetic_crs','EPSG','7679','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_crs" VALUES('EPSG','7680','PZ-90.11',NULL,'geographic 3D','EPSG','6423','EPSG','1158',NULL,0); INSERT INTO "usage" VALUES('EPSG','5424','geodetic_crs','EPSG','7680','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_crs" VALUES('EPSG','7681','GSK-2011',NULL,'geocentric','EPSG','6500','EPSG','1159',NULL,0); INSERT INTO "usage" VALUES('EPSG','5425','geodetic_crs','EPSG','7681','EPSG','1198','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7682','GSK-2011',NULL,'geographic 3D','EPSG','6423','EPSG','1159',NULL,0); INSERT INTO "usage" VALUES('EPSG','5426','geodetic_crs','EPSG','7682','EPSG','1198','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7683','GSK-2011',NULL,'geographic 2D','EPSG','6422','EPSG','1159',NULL,0); INSERT INTO "usage" VALUES('EPSG','5427','geodetic_crs','EPSG','7683','EPSG','1198','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','7684','Kyrg-06',NULL,'geocentric','EPSG','6500','EPSG','1160',NULL,0); INSERT INTO "usage" VALUES('EPSG','5428','geodetic_crs','EPSG','7684','EPSG','1137','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7685','Kyrg-06',NULL,'geographic 3D','EPSG','6423','EPSG','1160',NULL,0); INSERT INTO "usage" VALUES('EPSG','5429','geodetic_crs','EPSG','7685','EPSG','1137','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7686','Kyrg-06',NULL,'geographic 2D','EPSG','6422','EPSG','1160',NULL,0); INSERT INTO "usage" VALUES('EPSG','5430','geodetic_crs','EPSG','7686','EPSG','1137','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','7789','ITRF2014',NULL,'geocentric','EPSG','6500','EPSG','1165',NULL,0); INSERT INTO "usage" VALUES('EPSG','5473','geodetic_crs','EPSG','7789','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7796','BGS2005',NULL,'geocentric','EPSG','6500','EPSG','1167',NULL,0); INSERT INTO "usage" VALUES('EPSG','5479','geodetic_crs','EPSG','7796','EPSG','1056','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7797','BGS2005',NULL,'geographic 3D','EPSG','6423','EPSG','1167',NULL,0); INSERT INTO "usage" VALUES('EPSG','5480','geodetic_crs','EPSG','7797','EPSG','1056','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7798','BGS2005',NULL,'geographic 2D','EPSG','6422','EPSG','1167',NULL,0); INSERT INTO "usage" VALUES('EPSG','5481','geodetic_crs','EPSG','7798','EPSG','1056','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','7815','WGS 84 (Transit)',NULL,'geocentric','EPSG','6500','EPSG','1166',NULL,0); INSERT INTO "usage" VALUES('EPSG','5488','geodetic_crs','EPSG','7815','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7816','WGS 84 (Transit)',NULL,'geographic 3D','EPSG','6423','EPSG','1166',NULL,0); INSERT INTO "usage" VALUES('EPSG','5489','geodetic_crs','EPSG','7816','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','7842','GDA2020',NULL,'geocentric','EPSG','6500','EPSG','1168',NULL,0); INSERT INTO "usage" VALUES('EPSG','5501','geodetic_crs','EPSG','7842','EPSG','4177','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','7843','GDA2020',NULL,'geographic 3D','EPSG','6423','EPSG','1168',NULL,0); INSERT INTO "usage" VALUES('EPSG','5502','geodetic_crs','EPSG','7843','EPSG','4177','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','7844','GDA2020',NULL,'geographic 2D','EPSG','6422','EPSG','1168',NULL,0); INSERT INTO "usage" VALUES('EPSG','5503','geodetic_crs','EPSG','7844','EPSG','4177','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','7879','St. Helena Tritan',NULL,'geocentric','EPSG','6500','EPSG','1173',NULL,0); INSERT INTO "usage" VALUES('EPSG','5521','geodetic_crs','EPSG','7879','EPSG','3183','EPSG','1146'); INSERT INTO "geodetic_crs" VALUES('EPSG','7880','St. Helena Tritan',NULL,'geographic 3D','EPSG','6423','EPSG','1173',NULL,0); INSERT INTO "usage" VALUES('EPSG','5522','geodetic_crs','EPSG','7880','EPSG','3183','EPSG','1146'); INSERT INTO "geodetic_crs" VALUES('EPSG','7881','St. Helena Tritan',NULL,'geographic 2D','EPSG','6422','EPSG','1173',NULL,0); INSERT INTO "usage" VALUES('EPSG','5523','geodetic_crs','EPSG','7881','EPSG','3183','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','7884','SHGD2015',NULL,'geocentric','EPSG','6500','EPSG','1174',NULL,0); INSERT INTO "usage" VALUES('EPSG','5526','geodetic_crs','EPSG','7884','EPSG','3183','EPSG','1146'); INSERT INTO "geodetic_crs" VALUES('EPSG','7885','SHGD2015',NULL,'geographic 3D','EPSG','6423','EPSG','1174',NULL,0); INSERT INTO "usage" VALUES('EPSG','5527','geodetic_crs','EPSG','7885','EPSG','3183','EPSG','1146'); INSERT INTO "geodetic_crs" VALUES('EPSG','7886','SHGD2015',NULL,'geographic 2D','EPSG','6422','EPSG','1174',NULL,0); INSERT INTO "usage" VALUES('EPSG','5528','geodetic_crs','EPSG','7886','EPSG','3183','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','7900','ITRF88',NULL,'geographic 3D','EPSG','6423','EPSG','6647',NULL,0); INSERT INTO "usage" VALUES('EPSG','5534','geodetic_crs','EPSG','7900','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7901','ITRF89',NULL,'geographic 3D','EPSG','6423','EPSG','6648',NULL,0); INSERT INTO "usage" VALUES('EPSG','5535','geodetic_crs','EPSG','7901','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7902','ITRF90',NULL,'geographic 3D','EPSG','6423','EPSG','6649',NULL,0); INSERT INTO "usage" VALUES('EPSG','5536','geodetic_crs','EPSG','7902','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7903','ITRF91',NULL,'geographic 3D','EPSG','6423','EPSG','6650',NULL,0); INSERT INTO "usage" VALUES('EPSG','5537','geodetic_crs','EPSG','7903','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7904','ITRF92',NULL,'geographic 3D','EPSG','6423','EPSG','6651',NULL,0); INSERT INTO "usage" VALUES('EPSG','5538','geodetic_crs','EPSG','7904','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7905','ITRF93',NULL,'geographic 3D','EPSG','6423','EPSG','6652',NULL,0); INSERT INTO "usage" VALUES('EPSG','5539','geodetic_crs','EPSG','7905','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7906','ITRF94',NULL,'geographic 3D','EPSG','6423','EPSG','6653',NULL,0); INSERT INTO "usage" VALUES('EPSG','5540','geodetic_crs','EPSG','7906','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7907','ITRF96',NULL,'geographic 3D','EPSG','6423','EPSG','6654',NULL,0); INSERT INTO "usage" VALUES('EPSG','5541','geodetic_crs','EPSG','7907','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7908','ITRF97',NULL,'geographic 3D','EPSG','6423','EPSG','6655',NULL,0); INSERT INTO "usage" VALUES('EPSG','5542','geodetic_crs','EPSG','7908','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7909','ITRF2000',NULL,'geographic 3D','EPSG','6423','EPSG','6656',NULL,0); INSERT INTO "usage" VALUES('EPSG','5543','geodetic_crs','EPSG','7909','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7910','ITRF2005',NULL,'geographic 3D','EPSG','6423','EPSG','6896',NULL,0); INSERT INTO "usage" VALUES('EPSG','5544','geodetic_crs','EPSG','7910','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7911','ITRF2008',NULL,'geographic 3D','EPSG','6423','EPSG','1061',NULL,0); INSERT INTO "usage" VALUES('EPSG','5545','geodetic_crs','EPSG','7911','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7912','ITRF2014',NULL,'geographic 3D','EPSG','6423','EPSG','1165',NULL,0); INSERT INTO "usage" VALUES('EPSG','5546','geodetic_crs','EPSG','7912','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7914','ETRF89',NULL,'geocentric','EPSG','6500','EPSG','1178',NULL,0); INSERT INTO "usage" VALUES('EPSG','5547','geodetic_crs','EPSG','7914','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7915','ETRF89',NULL,'geographic 3D','EPSG','6423','EPSG','1178',NULL,0); INSERT INTO "usage" VALUES('EPSG','5548','geodetic_crs','EPSG','7915','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7916','ETRF90',NULL,'geocentric','EPSG','6500','EPSG','1179',NULL,0); INSERT INTO "usage" VALUES('EPSG','5549','geodetic_crs','EPSG','7916','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7917','ETRF90',NULL,'geographic 3D','EPSG','6423','EPSG','1179',NULL,0); INSERT INTO "usage" VALUES('EPSG','5550','geodetic_crs','EPSG','7917','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7918','ETRF91',NULL,'geocentric','EPSG','6500','EPSG','1180',NULL,0); INSERT INTO "usage" VALUES('EPSG','5551','geodetic_crs','EPSG','7918','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7919','ETRF91',NULL,'geographic 3D','EPSG','6423','EPSG','1180',NULL,0); INSERT INTO "usage" VALUES('EPSG','5552','geodetic_crs','EPSG','7919','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7920','ETRF92',NULL,'geocentric','EPSG','6500','EPSG','1181',NULL,0); INSERT INTO "usage" VALUES('EPSG','5553','geodetic_crs','EPSG','7920','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7921','ETRF92',NULL,'geographic 3D','EPSG','6423','EPSG','1181',NULL,0); INSERT INTO "usage" VALUES('EPSG','5554','geodetic_crs','EPSG','7921','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7922','ETRF93',NULL,'geocentric','EPSG','6500','EPSG','1182',NULL,0); INSERT INTO "usage" VALUES('EPSG','5555','geodetic_crs','EPSG','7922','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7923','ETRF93',NULL,'geographic 3D','EPSG','6423','EPSG','1182',NULL,0); INSERT INTO "usage" VALUES('EPSG','5556','geodetic_crs','EPSG','7923','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7924','ETRF94',NULL,'geocentric','EPSG','6500','EPSG','1183',NULL,0); INSERT INTO "usage" VALUES('EPSG','5557','geodetic_crs','EPSG','7924','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7925','ETRF94',NULL,'geographic 3D','EPSG','6423','EPSG','1183',NULL,0); INSERT INTO "usage" VALUES('EPSG','5558','geodetic_crs','EPSG','7925','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7926','ETRF96',NULL,'geocentric','EPSG','6500','EPSG','1184',NULL,0); INSERT INTO "usage" VALUES('EPSG','5559','geodetic_crs','EPSG','7926','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7927','ETRF96',NULL,'geographic 3D','EPSG','6423','EPSG','1184',NULL,0); INSERT INTO "usage" VALUES('EPSG','5560','geodetic_crs','EPSG','7927','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7928','ETRF97',NULL,'geocentric','EPSG','6500','EPSG','1185',NULL,0); INSERT INTO "usage" VALUES('EPSG','5561','geodetic_crs','EPSG','7928','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7929','ETRF97',NULL,'geographic 3D','EPSG','6423','EPSG','1185',NULL,0); INSERT INTO "usage" VALUES('EPSG','5562','geodetic_crs','EPSG','7929','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7930','ETRF2000',NULL,'geocentric','EPSG','6500','EPSG','1186',NULL,0); INSERT INTO "usage" VALUES('EPSG','5563','geodetic_crs','EPSG','7930','EPSG','4755','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','7931','ETRF2000',NULL,'geographic 3D','EPSG','6423','EPSG','1186',NULL,0); INSERT INTO "usage" VALUES('EPSG','5564','geodetic_crs','EPSG','7931','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8042','Gusterberg (Ferro)',NULL,'geographic 2D','EPSG','6422','EPSG','1188',NULL,0); INSERT INTO "usage" VALUES('EPSG','5596','geodetic_crs','EPSG','8042','EPSG','4455','EPSG','1028'); INSERT INTO "geodetic_crs" VALUES('EPSG','8043','St. Stephen (Ferro)',NULL,'geographic 2D','EPSG','6422','EPSG','1189',NULL,0); INSERT INTO "usage" VALUES('EPSG','5597','geodetic_crs','EPSG','8043','EPSG','4456','EPSG','1028'); INSERT INTO "geodetic_crs" VALUES('EPSG','8084','ISN2016',NULL,'geocentric','EPSG','6500','EPSG','1187',NULL,0); INSERT INTO "usage" VALUES('EPSG','5612','geodetic_crs','EPSG','8084','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8085','ISN2016',NULL,'geographic 3D','EPSG','6423','EPSG','1187',NULL,0); INSERT INTO "usage" VALUES('EPSG','5613','geodetic_crs','EPSG','8085','EPSG','1120','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8086','ISN2016',NULL,'geographic 2D','EPSG','6422','EPSG','1187',NULL,0); INSERT INTO "usage" VALUES('EPSG','5614','geodetic_crs','EPSG','8086','EPSG','1120','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8227','IGS14',NULL,'geocentric','EPSG','6500','EPSG','1191',NULL,0); INSERT INTO "usage" VALUES('EPSG','5735','geodetic_crs','EPSG','8227','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8230','NAD83(CSRS96)',NULL,'geocentric','EPSG','6500','EPSG','1192',NULL,0); INSERT INTO "usage" VALUES('EPSG','5737','geodetic_crs','EPSG','8230','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8231','NAD83(CSRS96)',NULL,'geographic 3D','EPSG','6423','EPSG','1192',NULL,0); INSERT INTO "usage" VALUES('EPSG','5738','geodetic_crs','EPSG','8231','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8232','NAD83(CSRS96)',NULL,'geographic 2D','EPSG','6422','EPSG','1192',NULL,0); INSERT INTO "usage" VALUES('EPSG','5739','geodetic_crs','EPSG','8232','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8233','NAD83(CSRS)v2',NULL,'geocentric','EPSG','6500','EPSG','1193',NULL,0); INSERT INTO "usage" VALUES('EPSG','5740','geodetic_crs','EPSG','8233','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8235','NAD83(CSRS)v2',NULL,'geographic 3D','EPSG','6423','EPSG','1193',NULL,0); INSERT INTO "usage" VALUES('EPSG','5741','geodetic_crs','EPSG','8235','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8237','NAD83(CSRS)v2',NULL,'geographic 2D','EPSG','6422','EPSG','1193',NULL,0); INSERT INTO "usage" VALUES('EPSG','5742','geodetic_crs','EPSG','8237','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8238','NAD83(CSRS)v3',NULL,'geocentric','EPSG','6500','EPSG','1194',NULL,0); INSERT INTO "usage" VALUES('EPSG','5743','geodetic_crs','EPSG','8238','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8239','NAD83(CSRS)v3',NULL,'geographic 3D','EPSG','6423','EPSG','1194',NULL,0); INSERT INTO "usage" VALUES('EPSG','5744','geodetic_crs','EPSG','8239','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8240','NAD83(CSRS)v3',NULL,'geographic 2D','EPSG','6422','EPSG','1194',NULL,0); INSERT INTO "usage" VALUES('EPSG','5745','geodetic_crs','EPSG','8240','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8242','NAD83(CSRS)v4',NULL,'geocentric','EPSG','6500','EPSG','1195',NULL,0); INSERT INTO "usage" VALUES('EPSG','5746','geodetic_crs','EPSG','8242','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8244','NAD83(CSRS)v4',NULL,'geographic 3D','EPSG','6423','EPSG','1195',NULL,0); INSERT INTO "usage" VALUES('EPSG','5747','geodetic_crs','EPSG','8244','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8246','NAD83(CSRS)v4',NULL,'geographic 2D','EPSG','6422','EPSG','1195',NULL,0); INSERT INTO "usage" VALUES('EPSG','5748','geodetic_crs','EPSG','8246','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8247','NAD83(CSRS)v5',NULL,'geocentric','EPSG','6500','EPSG','1196',NULL,0); INSERT INTO "usage" VALUES('EPSG','5749','geodetic_crs','EPSG','8247','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8248','NAD83(CSRS)v5',NULL,'geographic 3D','EPSG','6423','EPSG','1196',NULL,0); INSERT INTO "usage" VALUES('EPSG','5750','geodetic_crs','EPSG','8248','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8249','NAD83(CSRS)v5',NULL,'geographic 2D','EPSG','6422','EPSG','1196',NULL,0); INSERT INTO "usage" VALUES('EPSG','5751','geodetic_crs','EPSG','8249','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8250','NAD83(CSRS)v6',NULL,'geocentric','EPSG','6500','EPSG','1197',NULL,0); INSERT INTO "usage" VALUES('EPSG','5752','geodetic_crs','EPSG','8250','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8251','NAD83(CSRS)v6',NULL,'geographic 3D','EPSG','6423','EPSG','1197',NULL,0); INSERT INTO "usage" VALUES('EPSG','5753','geodetic_crs','EPSG','8251','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8252','NAD83(CSRS)v6',NULL,'geographic 2D','EPSG','6422','EPSG','1197',NULL,0); INSERT INTO "usage" VALUES('EPSG','5754','geodetic_crs','EPSG','8252','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8253','NAD83(CSRS)v7',NULL,'geocentric','EPSG','6500','EPSG','1198',NULL,0); INSERT INTO "usage" VALUES('EPSG','5755','geodetic_crs','EPSG','8253','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8254','NAD83(CSRS)v7',NULL,'geographic 3D','EPSG','6423','EPSG','1198',NULL,0); INSERT INTO "usage" VALUES('EPSG','5756','geodetic_crs','EPSG','8254','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8255','NAD83(CSRS)v7',NULL,'geographic 2D','EPSG','6422','EPSG','1198',NULL,0); INSERT INTO "usage" VALUES('EPSG','5757','geodetic_crs','EPSG','8255','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8351','S-JTSK [JTSK03]',NULL,'geographic 2D','EPSG','6422','EPSG','1201',NULL,0); INSERT INTO "usage" VALUES('EPSG','5800','geodetic_crs','EPSG','8351','EPSG','1211','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8397','ETRF2005',NULL,'geocentric','EPSG','6500','EPSG','1204',NULL,0); INSERT INTO "usage" VALUES('EPSG','5819','geodetic_crs','EPSG','8397','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8399','ETRF2005',NULL,'geographic 3D','EPSG','6423','EPSG','1204',NULL,0); INSERT INTO "usage" VALUES('EPSG','5820','geodetic_crs','EPSG','8399','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8401','ETRF2014',NULL,'geocentric','EPSG','6500','EPSG','1206',NULL,0); INSERT INTO "usage" VALUES('EPSG','5821','geodetic_crs','EPSG','8401','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8403','ETRF2014',NULL,'geographic 3D','EPSG','6423','EPSG','1206',NULL,0); INSERT INTO "usage" VALUES('EPSG','5822','geodetic_crs','EPSG','8403','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8425','Hong Kong Geodetic CS',NULL,'geocentric','EPSG','6500','EPSG','1209',NULL,0); INSERT INTO "usage" VALUES('EPSG','5823','geodetic_crs','EPSG','8425','EPSG','1118','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8426','Hong Kong Geodetic CS',NULL,'geographic 3D','EPSG','6423','EPSG','1209',NULL,0); INSERT INTO "usage" VALUES('EPSG','5824','geodetic_crs','EPSG','8426','EPSG','1118','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8427','Hong Kong Geodetic CS',NULL,'geographic 2D','EPSG','6422','EPSG','1209',NULL,0); INSERT INTO "usage" VALUES('EPSG','5825','geodetic_crs','EPSG','8427','EPSG','1118','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8428','Macao 1920',NULL,'geographic 2D','EPSG','6422','EPSG','1207',NULL,0); INSERT INTO "usage" VALUES('EPSG','5826','geodetic_crs','EPSG','8428','EPSG','1147','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','8429','Macao 2008',NULL,'geocentric','EPSG','6500','EPSG','1208',NULL,0); INSERT INTO "usage" VALUES('EPSG','5827','geodetic_crs','EPSG','8429','EPSG','1147','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8430','Macao 2008',NULL,'geographic 3D','EPSG','6423','EPSG','1208',NULL,0); INSERT INTO "usage" VALUES('EPSG','5828','geodetic_crs','EPSG','8430','EPSG','1147','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8431','Macao 2008',NULL,'geographic 2D','EPSG','6422','EPSG','1208',NULL,0); INSERT INTO "usage" VALUES('EPSG','5829','geodetic_crs','EPSG','8431','EPSG','1147','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8449','NAD83(FBN)',NULL,'geographic 2D','EPSG','6423','EPSG','6152',NULL,1); INSERT INTO "usage" VALUES('EPSG','5833','geodetic_crs','EPSG','8449','EPSG','4515','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8541','NAD83(FBN)',NULL,'geocentric','EPSG','6500','EPSG','1211',NULL,0); INSERT INTO "usage" VALUES('EPSG','5856','geodetic_crs','EPSG','8541','EPSG','4515','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8542','NAD83(FBN)',NULL,'geographic 3D','EPSG','6423','EPSG','1211',NULL,0); INSERT INTO "usage" VALUES('EPSG','5857','geodetic_crs','EPSG','8542','EPSG','4515','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8543','NAD83(HARN Corrected)',NULL,'geocentric','EPSG','6500','EPSG','1212',NULL,0); INSERT INTO "usage" VALUES('EPSG','5858','geodetic_crs','EPSG','8543','EPSG','3634','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8544','NAD83(HARN Corrected)',NULL,'geographic 3D','EPSG','6423','EPSG','1212',NULL,0); INSERT INTO "usage" VALUES('EPSG','5859','geodetic_crs','EPSG','8544','EPSG','3634','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8545','NAD83(HARN Corrected)',NULL,'geographic 2D','EPSG','6422','EPSG','1212',NULL,0); INSERT INTO "usage" VALUES('EPSG','5860','geodetic_crs','EPSG','8545','EPSG','3634','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8683','SRB_ETRS89',NULL,'geocentric','EPSG','6500','EPSG','1214',NULL,0); INSERT INTO "usage" VALUES('EPSG','5866','geodetic_crs','EPSG','8683','EPSG','4543','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8684','SRB_ETRS89',NULL,'geographic 3D','EPSG','6423','EPSG','1214',NULL,0); INSERT INTO "usage" VALUES('EPSG','5867','geodetic_crs','EPSG','8684','EPSG','4543','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8685','SRB_ETRS89',NULL,'geographic 2D','EPSG','6422','EPSG','1214',NULL,0); INSERT INTO "usage" VALUES('EPSG','5868','geodetic_crs','EPSG','8685','EPSG','4543','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8694','Camacupa 2015',NULL,'geographic 2D','EPSG','6422','EPSG','1217',NULL,0); INSERT INTO "usage" VALUES('EPSG','5875','geodetic_crs','EPSG','8694','EPSG','1029','EPSG','1130'); INSERT INTO "geodetic_crs" VALUES('EPSG','8697','RSAO13',NULL,'geocentric','EPSG','6500','EPSG','1220',NULL,0); INSERT INTO "usage" VALUES('EPSG','5876','geodetic_crs','EPSG','8697','EPSG','1029','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8698','RSAO13',NULL,'geographic 3D','EPSG','6423','EPSG','1220',NULL,0); INSERT INTO "usage" VALUES('EPSG','5877','geodetic_crs','EPSG','8698','EPSG','1029','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8699','RSAO13',NULL,'geographic 2D','EPSG','6422','EPSG','1220',NULL,0); INSERT INTO "usage" VALUES('EPSG','5878','geodetic_crs','EPSG','8699','EPSG','1029','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8816','MTRF-2000',NULL,'geocentric','EPSG','6500','EPSG','1218',NULL,0); INSERT INTO "usage" VALUES('EPSG','5995','geodetic_crs','EPSG','8816','EPSG','1206','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8817','MTRF-2000',NULL,'geographic 3D','EPSG','6423','EPSG','1218',NULL,0); INSERT INTO "usage" VALUES('EPSG','5996','geodetic_crs','EPSG','8817','EPSG','1206','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8818','MTRF-2000',NULL,'geographic 2D','EPSG','6422','EPSG','1218',NULL,0); INSERT INTO "usage" VALUES('EPSG','5997','geodetic_crs','EPSG','8818','EPSG','1206','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8860','NAD83(FBN)',NULL,'geographic 2D','EPSG','6422','EPSG','1211',NULL,0); INSERT INTO "usage" VALUES('EPSG','6010','geodetic_crs','EPSG','8860','EPSG','4515','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8888','WGS 84 (Transit)',NULL,'geographic 2D','EPSG','6422','EPSG','1166',NULL,0); INSERT INTO "usage" VALUES('EPSG','6011','geodetic_crs','EPSG','8888','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','8898','RGWF96',NULL,'geocentric','EPSG','6500','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6014','geodetic_crs','EPSG','8898','EPSG','1255','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8899','RGWF96',NULL,'geographic 3D','EPSG','6423','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6015','geodetic_crs','EPSG','8899','EPSG','1255','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','8900','RGWF96',NULL,'geographic 2D','EPSG','6422','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6016','geodetic_crs','EPSG','8900','EPSG','1255','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8901','RGWF96 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6017','geodetic_crs','EPSG','8901','EPSG','1255','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','8902','RGWF96 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6018','geodetic_crs','EPSG','8902','EPSG','1255','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','8905','CR-SIRGAS',NULL,'geocentric','EPSG','6500','EPSG','1225',NULL,0); INSERT INTO "usage" VALUES('EPSG','6021','geodetic_crs','EPSG','8905','EPSG','1074','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8906','CR-SIRGAS',NULL,'geographic 3D','EPSG','6423','EPSG','1225',NULL,0); INSERT INTO "usage" VALUES('EPSG','6022','geodetic_crs','EPSG','8906','EPSG','1074','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8907','CR-SIRGAS',NULL,'geographic 2D','EPSG','6422','EPSG','1225',NULL,0); INSERT INTO "usage" VALUES('EPSG','6023','geodetic_crs','EPSG','8907','EPSG','1074','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8915','SIRGAS-CON DGF00P01',NULL,'geocentric','EPSG','6500','EPSG','1227',NULL,0); INSERT INTO "usage" VALUES('EPSG','6029','geodetic_crs','EPSG','8915','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8916','SIRGAS-CON DGF00P01',NULL,'geographic 3D','EPSG','6423','EPSG','1227',NULL,0); INSERT INTO "usage" VALUES('EPSG','6030','geodetic_crs','EPSG','8916','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8917','SIRGAS-CON DGF01P01',NULL,'geocentric','EPSG','6500','EPSG','1228',NULL,0); INSERT INTO "usage" VALUES('EPSG','6031','geodetic_crs','EPSG','8917','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8918','SIRGAS-CON DGF01P01',NULL,'geographic 3D','EPSG','6423','EPSG','1228',NULL,0); INSERT INTO "usage" VALUES('EPSG','6032','geodetic_crs','EPSG','8918','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8919','SIRGAS-CON DGF01P02',NULL,'geocentric','EPSG','6500','EPSG','1229',NULL,0); INSERT INTO "usage" VALUES('EPSG','6033','geodetic_crs','EPSG','8919','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8920','SIRGAS-CON DGF01P02',NULL,'geographic 3D','EPSG','6423','EPSG','1229',NULL,0); INSERT INTO "usage" VALUES('EPSG','6034','geodetic_crs','EPSG','8920','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8921','SIRGAS-CON DGF02P01',NULL,'geocentric','EPSG','6500','EPSG','1230',NULL,0); INSERT INTO "usage" VALUES('EPSG','6035','geodetic_crs','EPSG','8921','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8922','SIRGAS-CON DGF02P01',NULL,'geographic 3D','EPSG','6423','EPSG','1230',NULL,0); INSERT INTO "usage" VALUES('EPSG','6036','geodetic_crs','EPSG','8922','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8923','SIRGAS-CON DGF04P01',NULL,'geocentric','EPSG','6500','EPSG','1231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6037','geodetic_crs','EPSG','8923','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8924','SIRGAS-CON DGF04P01',NULL,'geographic 3D','EPSG','6423','EPSG','1231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6038','geodetic_crs','EPSG','8924','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8925','SIRGAS-CON DGF05P01',NULL,'geocentric','EPSG','6500','EPSG','1232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6039','geodetic_crs','EPSG','8925','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8926','SIRGAS-CON DGF05P01',NULL,'geographic 3D','EPSG','6423','EPSG','1232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6040','geodetic_crs','EPSG','8926','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8927','SIRGAS-CON DGF06P01',NULL,'geocentric','EPSG','6500','EPSG','1233',NULL,0); INSERT INTO "usage" VALUES('EPSG','6041','geodetic_crs','EPSG','8927','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8928','SIRGAS-CON DGF06P01',NULL,'geographic 3D','EPSG','6423','EPSG','1233',NULL,0); INSERT INTO "usage" VALUES('EPSG','6042','geodetic_crs','EPSG','8928','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8929','SIRGAS-CON DGF07P01',NULL,'geocentric','EPSG','6500','EPSG','1234',NULL,0); INSERT INTO "usage" VALUES('EPSG','6043','geodetic_crs','EPSG','8929','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8930','SIRGAS-CON DGF07P01',NULL,'geographic 3D','EPSG','6423','EPSG','1234',NULL,0); INSERT INTO "usage" VALUES('EPSG','6044','geodetic_crs','EPSG','8930','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8931','SIRGAS-CON DGF08P01',NULL,'geocentric','EPSG','6500','EPSG','1235',NULL,0); INSERT INTO "usage" VALUES('EPSG','6045','geodetic_crs','EPSG','8931','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8932','SIRGAS-CON DGF08P01',NULL,'geographic 3D','EPSG','6423','EPSG','1235',NULL,0); INSERT INTO "usage" VALUES('EPSG','6046','geodetic_crs','EPSG','8932','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8933','SIRGAS-CON SIR09P01',NULL,'geocentric','EPSG','6500','EPSG','1236',NULL,0); INSERT INTO "usage" VALUES('EPSG','6047','geodetic_crs','EPSG','8933','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8934','SIRGAS-CON SIR09P01',NULL,'geographic 3D','EPSG','6423','EPSG','1236',NULL,0); INSERT INTO "usage" VALUES('EPSG','6048','geodetic_crs','EPSG','8934','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8935','SIRGAS-CON SIR10P01',NULL,'geocentric','EPSG','6500','EPSG','1237',NULL,0); INSERT INTO "usage" VALUES('EPSG','6049','geodetic_crs','EPSG','8935','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8936','SIRGAS-CON SIR10P01',NULL,'geographic 3D','EPSG','6423','EPSG','1237',NULL,0); INSERT INTO "usage" VALUES('EPSG','6050','geodetic_crs','EPSG','8936','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8937','SIRGAS-CON SIR11P01',NULL,'geocentric','EPSG','6500','EPSG','1238',NULL,0); INSERT INTO "usage" VALUES('EPSG','6051','geodetic_crs','EPSG','8937','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8938','SIRGAS-CON SIR11P01',NULL,'geographic 3D','EPSG','6423','EPSG','1238',NULL,0); INSERT INTO "usage" VALUES('EPSG','6052','geodetic_crs','EPSG','8938','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8939','SIRGAS-CON SIR13P01',NULL,'geocentric','EPSG','6500','EPSG','1239',NULL,0); INSERT INTO "usage" VALUES('EPSG','6053','geodetic_crs','EPSG','8939','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8940','SIRGAS-CON SIR13P01',NULL,'geographic 3D','EPSG','6423','EPSG','1239',NULL,0); INSERT INTO "usage" VALUES('EPSG','6054','geodetic_crs','EPSG','8940','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8941','SIRGAS-CON SIR14P01',NULL,'geocentric','EPSG','6500','EPSG','1240',NULL,0); INSERT INTO "usage" VALUES('EPSG','6055','geodetic_crs','EPSG','8941','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8942','SIRGAS-CON SIR14P01',NULL,'geographic 3D','EPSG','6423','EPSG','1240',NULL,0); INSERT INTO "usage" VALUES('EPSG','6056','geodetic_crs','EPSG','8942','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8943','SIRGAS-CON SIR15P01',NULL,'geocentric','EPSG','6500','EPSG','1241',NULL,0); INSERT INTO "usage" VALUES('EPSG','6057','geodetic_crs','EPSG','8943','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8944','SIRGAS-CON SIR15P01',NULL,'geographic 3D','EPSG','6423','EPSG','1241',NULL,0); INSERT INTO "usage" VALUES('EPSG','6058','geodetic_crs','EPSG','8944','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8945','SIRGAS-CON SIR17P01',NULL,'geocentric','EPSG','6500','EPSG','1242',NULL,0); INSERT INTO "usage" VALUES('EPSG','6059','geodetic_crs','EPSG','8945','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8946','SIRGAS-CON SIR17P01',NULL,'geographic 3D','EPSG','6423','EPSG','1242',NULL,0); INSERT INTO "usage" VALUES('EPSG','6060','geodetic_crs','EPSG','8946','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8947','SIRGAS-Chile 2010',NULL,'geocentric','EPSG','6500','EPSG','1243',NULL,0); INSERT INTO "usage" VALUES('EPSG','6061','geodetic_crs','EPSG','8947','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8948','SIRGAS-Chile 2010',NULL,'geographic 3D','EPSG','6423','EPSG','1243',NULL,0); INSERT INTO "usage" VALUES('EPSG','6062','geodetic_crs','EPSG','8948','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8949','SIRGAS-Chile 2010',NULL,'geographic 2D','EPSG','6422','EPSG','1243',NULL,0); INSERT INTO "usage" VALUES('EPSG','6063','geodetic_crs','EPSG','8949','EPSG','1066','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','8972','SIRGAS-CON DGF00P01',NULL,'geographic 2D','EPSG','6422','EPSG','1227',NULL,0); INSERT INTO "usage" VALUES('EPSG','6066','geodetic_crs','EPSG','8972','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8973','SIRGAS-CON DGF01P01',NULL,'geographic 2D','EPSG','6422','EPSG','1228',NULL,0); INSERT INTO "usage" VALUES('EPSG','6067','geodetic_crs','EPSG','8973','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8974','SIRGAS-CON DGF01P02',NULL,'geographic 2D','EPSG','6422','EPSG','1229',NULL,0); INSERT INTO "usage" VALUES('EPSG','6068','geodetic_crs','EPSG','8974','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8975','SIRGAS-CON DGF02P01',NULL,'geographic 2D','EPSG','6422','EPSG','1230',NULL,0); INSERT INTO "usage" VALUES('EPSG','6069','geodetic_crs','EPSG','8975','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8976','SIRGAS-CON DGF04P01',NULL,'geographic 2D','EPSG','6422','EPSG','1231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6070','geodetic_crs','EPSG','8976','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8977','SIRGAS-CON DGF05P01',NULL,'geographic 2D','EPSG','6422','EPSG','1232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6071','geodetic_crs','EPSG','8977','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8978','SIRGAS-CON DGF06P01',NULL,'geographic 2D','EPSG','6422','EPSG','1233',NULL,0); INSERT INTO "usage" VALUES('EPSG','6072','geodetic_crs','EPSG','8978','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8979','SIRGAS-CON DGF07P01',NULL,'geographic 2D','EPSG','6422','EPSG','1234',NULL,0); INSERT INTO "usage" VALUES('EPSG','6073','geodetic_crs','EPSG','8979','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8980','SIRGAS-CON DGF08P01',NULL,'geographic 2D','EPSG','6422','EPSG','1235',NULL,0); INSERT INTO "usage" VALUES('EPSG','6074','geodetic_crs','EPSG','8980','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8981','SIRGAS-CON SIR09P01',NULL,'geographic 2D','EPSG','6422','EPSG','1236',NULL,0); INSERT INTO "usage" VALUES('EPSG','6075','geodetic_crs','EPSG','8981','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8982','SIRGAS-CON SIR10P01',NULL,'geographic 2D','EPSG','6422','EPSG','1237',NULL,0); INSERT INTO "usage" VALUES('EPSG','6076','geodetic_crs','EPSG','8982','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8983','SIRGAS-CON SIR11P01',NULL,'geographic 2D','EPSG','6422','EPSG','1238',NULL,0); INSERT INTO "usage" VALUES('EPSG','6077','geodetic_crs','EPSG','8983','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8984','SIRGAS-CON SIR13P01',NULL,'geographic 2D','EPSG','6422','EPSG','1239',NULL,0); INSERT INTO "usage" VALUES('EPSG','6078','geodetic_crs','EPSG','8984','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8985','SIRGAS-CON SIR14P01',NULL,'geographic 2D','EPSG','6422','EPSG','1240',NULL,0); INSERT INTO "usage" VALUES('EPSG','6079','geodetic_crs','EPSG','8985','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8986','SIRGAS-CON SIR15P01',NULL,'geographic 2D','EPSG','6422','EPSG','1241',NULL,0); INSERT INTO "usage" VALUES('EPSG','6080','geodetic_crs','EPSG','8986','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8987','SIRGAS-CON SIR17P01',NULL,'geographic 2D','EPSG','6422','EPSG','1242',NULL,0); INSERT INTO "usage" VALUES('EPSG','6081','geodetic_crs','EPSG','8987','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8988','ITRF88',NULL,'geographic 2D','EPSG','6422','EPSG','6647',NULL,0); INSERT INTO "usage" VALUES('EPSG','6082','geodetic_crs','EPSG','8988','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8989','ITRF89',NULL,'geographic 2D','EPSG','6422','EPSG','6648',NULL,0); INSERT INTO "usage" VALUES('EPSG','6083','geodetic_crs','EPSG','8989','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8990','ITRF90',NULL,'geographic 2D','EPSG','6422','EPSG','6649',NULL,0); INSERT INTO "usage" VALUES('EPSG','6084','geodetic_crs','EPSG','8990','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8991','ITRF91',NULL,'geographic 2D','EPSG','6422','EPSG','6650',NULL,0); INSERT INTO "usage" VALUES('EPSG','6085','geodetic_crs','EPSG','8991','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8992','ITRF92',NULL,'geographic 2D','EPSG','6422','EPSG','6651',NULL,0); INSERT INTO "usage" VALUES('EPSG','6086','geodetic_crs','EPSG','8992','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8993','ITRF93',NULL,'geographic 2D','EPSG','6422','EPSG','6652',NULL,0); INSERT INTO "usage" VALUES('EPSG','6087','geodetic_crs','EPSG','8993','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8994','ITRF94',NULL,'geographic 2D','EPSG','6422','EPSG','6653',NULL,0); INSERT INTO "usage" VALUES('EPSG','6088','geodetic_crs','EPSG','8994','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8995','ITRF96',NULL,'geographic 2D','EPSG','6422','EPSG','6654',NULL,0); INSERT INTO "usage" VALUES('EPSG','6089','geodetic_crs','EPSG','8995','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8996','ITRF97',NULL,'geographic 2D','EPSG','6422','EPSG','6655',NULL,0); INSERT INTO "usage" VALUES('EPSG','6090','geodetic_crs','EPSG','8996','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8997','ITRF2000',NULL,'geographic 2D','EPSG','6422','EPSG','6656',NULL,0); INSERT INTO "usage" VALUES('EPSG','6091','geodetic_crs','EPSG','8997','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8998','ITRF2005',NULL,'geographic 2D','EPSG','6422','EPSG','6896',NULL,0); INSERT INTO "usage" VALUES('EPSG','6092','geodetic_crs','EPSG','8998','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','8999','ITRF2008',NULL,'geographic 2D','EPSG','6422','EPSG','1061',NULL,0); INSERT INTO "usage" VALUES('EPSG','6093','geodetic_crs','EPSG','8999','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9000','ITRF2014',NULL,'geographic 2D','EPSG','6422','EPSG','1165',NULL,0); INSERT INTO "usage" VALUES('EPSG','6094','geodetic_crs','EPSG','9000','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9001','IGS97',NULL,'geocentric','EPSG','6500','EPSG','1244',NULL,0); INSERT INTO "usage" VALUES('EPSG','6095','geodetic_crs','EPSG','9001','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9002','IGS97',NULL,'geographic 3D','EPSG','6423','EPSG','1244',NULL,0); INSERT INTO "usage" VALUES('EPSG','6096','geodetic_crs','EPSG','9002','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9003','IGS97',NULL,'geographic 2D','EPSG','6422','EPSG','1244',NULL,0); INSERT INTO "usage" VALUES('EPSG','6097','geodetic_crs','EPSG','9003','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9004','IGS00',NULL,'geocentric','EPSG','6500','EPSG','1245',NULL,0); INSERT INTO "usage" VALUES('EPSG','6098','geodetic_crs','EPSG','9004','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9005','IGS00',NULL,'geographic 3D','EPSG','6423','EPSG','1245',NULL,0); INSERT INTO "usage" VALUES('EPSG','6099','geodetic_crs','EPSG','9005','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9006','IGS00',NULL,'geographic 2D','EPSG','6422','EPSG','1245',NULL,0); INSERT INTO "usage" VALUES('EPSG','6100','geodetic_crs','EPSG','9006','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9007','IGb00',NULL,'geocentric','EPSG','6500','EPSG','1246',NULL,0); INSERT INTO "usage" VALUES('EPSG','6101','geodetic_crs','EPSG','9007','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9008','IGb00',NULL,'geographic 3D','EPSG','6423','EPSG','1246',NULL,0); INSERT INTO "usage" VALUES('EPSG','6102','geodetic_crs','EPSG','9008','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9009','IGb00',NULL,'geographic 2D','EPSG','6422','EPSG','1246',NULL,0); INSERT INTO "usage" VALUES('EPSG','6103','geodetic_crs','EPSG','9009','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9010','IGS05',NULL,'geocentric','EPSG','6500','EPSG','1247',NULL,0); INSERT INTO "usage" VALUES('EPSG','6104','geodetic_crs','EPSG','9010','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9011','IGS05',NULL,'geographic 3D','EPSG','6423','EPSG','1247',NULL,0); INSERT INTO "usage" VALUES('EPSG','6105','geodetic_crs','EPSG','9011','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9012','IGS05',NULL,'geographic 2D','EPSG','6422','EPSG','1247',NULL,0); INSERT INTO "usage" VALUES('EPSG','6106','geodetic_crs','EPSG','9012','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9013','IGS08',NULL,'geographic 3D','EPSG','6423','EPSG','1141',NULL,0); INSERT INTO "usage" VALUES('EPSG','6107','geodetic_crs','EPSG','9013','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9014','IGS08',NULL,'geographic 2D','EPSG','6422','EPSG','1141',NULL,0); INSERT INTO "usage" VALUES('EPSG','6108','geodetic_crs','EPSG','9014','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9015','IGb08',NULL,'geocentric','EPSG','6500','EPSG','1248',NULL,0); INSERT INTO "usage" VALUES('EPSG','6109','geodetic_crs','EPSG','9015','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9016','IGb08',NULL,'geographic 3D','EPSG','6423','EPSG','1248',NULL,0); INSERT INTO "usage" VALUES('EPSG','6110','geodetic_crs','EPSG','9016','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9017','IGb08',NULL,'geographic 2D','EPSG','6422','EPSG','1248',NULL,0); INSERT INTO "usage" VALUES('EPSG','6111','geodetic_crs','EPSG','9017','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9018','IGS14',NULL,'geographic 3D','EPSG','6423','EPSG','1191',NULL,0); INSERT INTO "usage" VALUES('EPSG','6112','geodetic_crs','EPSG','9018','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9019','IGS14',NULL,'geographic 2D','EPSG','6422','EPSG','1191',NULL,0); INSERT INTO "usage" VALUES('EPSG','6113','geodetic_crs','EPSG','9019','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9053','WGS 84 (G730)',NULL,'geographic 2D','EPSG','6422','EPSG','1152',NULL,0); INSERT INTO "usage" VALUES('EPSG','6116','geodetic_crs','EPSG','9053','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9054','WGS 84 (G873)',NULL,'geographic 2D','EPSG','6422','EPSG','1153',NULL,0); INSERT INTO "usage" VALUES('EPSG','6117','geodetic_crs','EPSG','9054','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9055','WGS 84 (G1150)',NULL,'geographic 2D','EPSG','6422','EPSG','1154',NULL,0); INSERT INTO "usage" VALUES('EPSG','6118','geodetic_crs','EPSG','9055','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9056','WGS 84 (G1674)',NULL,'geographic 2D','EPSG','6422','EPSG','1155',NULL,0); INSERT INTO "usage" VALUES('EPSG','6119','geodetic_crs','EPSG','9056','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9057','WGS 84 (G1762)',NULL,'geographic 2D','EPSG','6422','EPSG','1156',NULL,0); INSERT INTO "usage" VALUES('EPSG','6120','geodetic_crs','EPSG','9057','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9059','ETRF89',NULL,'geographic 2D','EPSG','6422','EPSG','1178',NULL,0); INSERT INTO "usage" VALUES('EPSG','6121','geodetic_crs','EPSG','9059','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9060','ETRF90',NULL,'geographic 2D','EPSG','6422','EPSG','1179',NULL,0); INSERT INTO "usage" VALUES('EPSG','6122','geodetic_crs','EPSG','9060','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9061','ETRF91',NULL,'geographic 2D','EPSG','6422','EPSG','1180',NULL,0); INSERT INTO "usage" VALUES('EPSG','6123','geodetic_crs','EPSG','9061','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9062','ETRF92',NULL,'geographic 2D','EPSG','6422','EPSG','1181',NULL,0); INSERT INTO "usage" VALUES('EPSG','6124','geodetic_crs','EPSG','9062','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9063','ETRF93',NULL,'geographic 2D','EPSG','6422','EPSG','1182',NULL,0); INSERT INTO "usage" VALUES('EPSG','6125','geodetic_crs','EPSG','9063','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9064','ETRF94',NULL,'geographic 2D','EPSG','6422','EPSG','1183',NULL,0); INSERT INTO "usage" VALUES('EPSG','6126','geodetic_crs','EPSG','9064','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9065','ETRF96',NULL,'geographic 2D','EPSG','6422','EPSG','1184',NULL,0); INSERT INTO "usage" VALUES('EPSG','6127','geodetic_crs','EPSG','9065','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9066','ETRF97',NULL,'geographic 2D','EPSG','6422','EPSG','1185',NULL,0); INSERT INTO "usage" VALUES('EPSG','6128','geodetic_crs','EPSG','9066','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9067','ETRF2000',NULL,'geographic 2D','EPSG','6422','EPSG','1186',NULL,0); INSERT INTO "usage" VALUES('EPSG','6129','geodetic_crs','EPSG','9067','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9068','ETRF2005',NULL,'geographic 2D','EPSG','6422','EPSG','1204',NULL,0); INSERT INTO "usage" VALUES('EPSG','6130','geodetic_crs','EPSG','9068','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9069','ETRF2014',NULL,'geographic 2D','EPSG','6422','EPSG','1206',NULL,0); INSERT INTO "usage" VALUES('EPSG','6131','geodetic_crs','EPSG','9069','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9070','NAD83(MARP00)',NULL,'geocentric','EPSG','6500','EPSG','1221',NULL,0); INSERT INTO "usage" VALUES('EPSG','6132','geodetic_crs','EPSG','9070','EPSG','4167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9071','NAD83(MARP00)',NULL,'geographic 3D','EPSG','6423','EPSG','1221',NULL,0); INSERT INTO "usage" VALUES('EPSG','6133','geodetic_crs','EPSG','9071','EPSG','4167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9072','NAD83(MARP00)',NULL,'geographic 2D','EPSG','6422','EPSG','1221',NULL,0); INSERT INTO "usage" VALUES('EPSG','6134','geodetic_crs','EPSG','9072','EPSG','4167','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9073','NAD83(PACP00)',NULL,'geocentric','EPSG','6500','EPSG','1249',NULL,0); INSERT INTO "usage" VALUES('EPSG','6135','geodetic_crs','EPSG','9073','EPSG','4162','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9074','NAD83(PACP00)',NULL,'geographic 3D','EPSG','6423','EPSG','1249',NULL,0); INSERT INTO "usage" VALUES('EPSG','6136','geodetic_crs','EPSG','9074','EPSG','4162','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9075','NAD83(PACP00)',NULL,'geographic 2D','EPSG','6422','EPSG','1249',NULL,0); INSERT INTO "usage" VALUES('EPSG','6137','geodetic_crs','EPSG','9075','EPSG','4162','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9138','KOSOVAREF01',NULL,'geocentric','EPSG','6500','EPSG','1251',NULL,0); INSERT INTO "usage" VALUES('EPSG','6139','geodetic_crs','EPSG','9138','EPSG','4542','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9139','KOSOVAREF01',NULL,'geographic 3D','EPSG','6423','EPSG','1251',NULL,0); INSERT INTO "usage" VALUES('EPSG','6140','geodetic_crs','EPSG','9139','EPSG','4542','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9140','KOSOVAREF01',NULL,'geographic 2D','EPSG','6422','EPSG','1251',NULL,0); INSERT INTO "usage" VALUES('EPSG','6141','geodetic_crs','EPSG','9140','EPSG','4542','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9146','SIRGAS-Chile 2013',NULL,'geocentric','EPSG','6500','EPSG','1252',NULL,0); INSERT INTO "usage" VALUES('EPSG','6143','geodetic_crs','EPSG','9146','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9147','SIRGAS-Chile 2013',NULL,'geographic 3D','EPSG','6423','EPSG','1252',NULL,0); INSERT INTO "usage" VALUES('EPSG','6144','geodetic_crs','EPSG','9147','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9148','SIRGAS-Chile 2013',NULL,'geographic 2D','EPSG','6422','EPSG','1252',NULL,0); INSERT INTO "usage" VALUES('EPSG','6145','geodetic_crs','EPSG','9148','EPSG','1066','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9151','SIRGAS-Chile 2016',NULL,'geocentric','EPSG','6500','EPSG','1253',NULL,0); INSERT INTO "usage" VALUES('EPSG','6148','geodetic_crs','EPSG','9151','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9152','SIRGAS-Chile 2016',NULL,'geographic 3D','EPSG','6423','EPSG','1253',NULL,0); INSERT INTO "usage" VALUES('EPSG','6149','geodetic_crs','EPSG','9152','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9153','SIRGAS-Chile 2016',NULL,'geographic 2D','EPSG','6422','EPSG','1253',NULL,0); INSERT INTO "usage" VALUES('EPSG','6150','geodetic_crs','EPSG','9153','EPSG','1066','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9182','SIRGAS-Chile',NULL,'geocentric','EPSG','6500','EPSG','1254',NULL,1); INSERT INTO "usage" VALUES('EPSG','6157','geodetic_crs','EPSG','9182','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9183','SIRGAS-Chile',NULL,'geographic 3D','EPSG','6423','EPSG','1254',NULL,1); INSERT INTO "usage" VALUES('EPSG','6158','geodetic_crs','EPSG','9183','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9184','SIRGAS-Chile',NULL,'geographic 2D','EPSG','6422','EPSG','1254',NULL,1); INSERT INTO "usage" VALUES('EPSG','6159','geodetic_crs','EPSG','9184','EPSG','1066','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9248','Tapi Aike',NULL,'geographic 2D','EPSG','6422','EPSG','1257',NULL,0); INSERT INTO "usage" VALUES('EPSG','13901','geodetic_crs','EPSG','9248','EPSG','4569','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','9251','MMN',NULL,'geographic 2D','EPSG','6422','EPSG','1258',NULL,0); INSERT INTO "usage" VALUES('EPSG','13904','geodetic_crs','EPSG','9251','EPSG','2357','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','9253','MMS',NULL,'geographic 2D','EPSG','6422','EPSG','1259',NULL,0); INSERT INTO "usage" VALUES('EPSG','13906','geodetic_crs','EPSG','9253','EPSG','2357','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','9266','MGI',NULL,'geocentric','EPSG','6500','EPSG','6312',NULL,0); INSERT INTO "usage" VALUES('EPSG','13910','geodetic_crs','EPSG','9266','EPSG','1037','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9267','MGI',NULL,'geographic 3D','EPSG','6423','EPSG','6312',NULL,0); INSERT INTO "usage" VALUES('EPSG','13911','geodetic_crs','EPSG','9267','EPSG','1037','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9292','ONGD17',NULL,'geocentric','EPSG','6500','EPSG','1263',NULL,0); INSERT INTO "usage" VALUES('EPSG','13963','geodetic_crs','EPSG','9292','EPSG','1183','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9293','ONGD17',NULL,'geographic 3D','EPSG','6423','EPSG','1263',NULL,0); INSERT INTO "usage" VALUES('EPSG','13964','geodetic_crs','EPSG','9293','EPSG','1183','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9294','ONGD17',NULL,'geographic 2D','EPSG','6422','EPSG','1263',NULL,0); INSERT INTO "usage" VALUES('EPSG','13965','geodetic_crs','EPSG','9294','EPSG','1183','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9299','HS2-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1264',NULL,0); INSERT INTO "usage" VALUES('EPSG','14047','geodetic_crs','EPSG','9299','EPSG','4582','EPSG','1260'); INSERT INTO "geodetic_crs" VALUES('EPSG','9307','ATRF2014',NULL,'geocentric','EPSG','6500','EPSG','1291',NULL,0); INSERT INTO "usage" VALUES('EPSG','14135','geodetic_crs','EPSG','9307','EPSG','4177','EPSG','1267'); INSERT INTO "geodetic_crs" VALUES('EPSG','9308','ATRF2014',NULL,'geographic 3D','EPSG','6423','EPSG','1291',NULL,0); INSERT INTO "usage" VALUES('EPSG','14136','geodetic_crs','EPSG','9308','EPSG','4177','EPSG','1267'); INSERT INTO "geodetic_crs" VALUES('EPSG','9309','ATRF2014',NULL,'geographic 2D','EPSG','6422','EPSG','1291',NULL,0); INSERT INTO "usage" VALUES('EPSG','14137','geodetic_crs','EPSG','9309','EPSG','4177','EPSG','1267'); INSERT INTO "geodetic_crs" VALUES('EPSG','9331','KSA-GRF17',NULL,'geocentric','EPSG','6500','EPSG','1268',NULL,0); INSERT INTO "usage" VALUES('EPSG','13919','geodetic_crs','EPSG','9331','EPSG','1206','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','9332','KSA-GRF17',NULL,'geographic 3D','EPSG','6423','EPSG','1268',NULL,0); INSERT INTO "usage" VALUES('EPSG','13920','geodetic_crs','EPSG','9332','EPSG','1206','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','9333','KSA-GRF17',NULL,'geographic 2D','EPSG','6422','EPSG','1268',NULL,0); INSERT INTO "usage" VALUES('EPSG','13921','geodetic_crs','EPSG','9333','EPSG','1206','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','9364','TPEN11-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1266',NULL,0); INSERT INTO "usage" VALUES('EPSG','13974','geodetic_crs','EPSG','9364','EPSG','4583','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9372','MML07-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1271',NULL,0); INSERT INTO "usage" VALUES('EPSG','13995','geodetic_crs','EPSG','9372','EPSG','4588','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9378','IGb14',NULL,'geocentric','EPSG','6500','EPSG','1272',NULL,0); INSERT INTO "usage" VALUES('EPSG','13999','geodetic_crs','EPSG','9378','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9379','IGb14',NULL,'geographic 3D','EPSG','6423','EPSG','1272',NULL,0); INSERT INTO "usage" VALUES('EPSG','14000','geodetic_crs','EPSG','9379','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9380','IGb14',NULL,'geographic 2D','EPSG','6422','EPSG','1272',NULL,0); INSERT INTO "usage" VALUES('EPSG','14213','geodetic_crs','EPSG','9380','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9384','AbInvA96_2020-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1273',NULL,0); INSERT INTO "usage" VALUES('EPSG','14028','geodetic_crs','EPSG','9384','EPSG','4589','EPSG','1196'); INSERT INTO "geodetic_crs" VALUES('EPSG','9403','PN68',NULL,'geographic 2D','EPSG','6422','EPSG','1286',NULL,0); INSERT INTO "usage" VALUES('EPSG','14042','geodetic_crs','EPSG','9403','EPSG','3873','EPSG','1178'); INSERT INTO "geodetic_crs" VALUES('EPSG','9453','GBK19-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1289',NULL,0); INSERT INTO "usage" VALUES('EPSG','14128','geodetic_crs','EPSG','9453','EPSG','4607','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9468','SRGI2013',NULL,'geocentric','EPSG','6500','EPSG','1293',NULL,0); INSERT INTO "usage" VALUES('EPSG','14150','geodetic_crs','EPSG','9468','EPSG','1122','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9469','SRGI2013',NULL,'geographic 3D','EPSG','6423','EPSG','1293',NULL,0); INSERT INTO "usage" VALUES('EPSG','14151','geodetic_crs','EPSG','9469','EPSG','1122','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9470','SRGI2013',NULL,'geographic 2D','EPSG','6422','EPSG','1293',NULL,0); INSERT INTO "usage" VALUES('EPSG','14152','geodetic_crs','EPSG','9470','EPSG','1122','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9474','PZ-90.02',NULL,'geographic 2D','EPSG','6422','EPSG','1157',NULL,0); INSERT INTO "usage" VALUES('EPSG','14195','geodetic_crs','EPSG','9474','EPSG','1262','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9475','PZ-90.11',NULL,'geographic 2D','EPSG','6422','EPSG','1158',NULL,0); INSERT INTO "usage" VALUES('EPSG','14194','geodetic_crs','EPSG','9475','EPSG','1262','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9545','LTF2004(G)',NULL,'geocentric','EPSG','6500','EPSG','1295',NULL,0); INSERT INTO "usage" VALUES('EPSG','14547','geodetic_crs','EPSG','9545','EPSG','4613','EPSG','1271'); INSERT INTO "geodetic_crs" VALUES('EPSG','9546','LTF2004(G)',NULL,'geographic 3D','EPSG','6423','EPSG','1295',NULL,0); INSERT INTO "usage" VALUES('EPSG','14539','geodetic_crs','EPSG','9546','EPSG','4613','EPSG','1271'); INSERT INTO "geodetic_crs" VALUES('EPSG','9547','LTF2004(G)',NULL,'geographic 2D','EPSG','6422','EPSG','1295',NULL,0); INSERT INTO "usage" VALUES('EPSG','14546','geodetic_crs','EPSG','9547','EPSG','4613','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9694','REDGEOMIN',NULL,'geocentric','EPSG','6500','EPSG','1304',NULL,0); INSERT INTO "usage" VALUES('EPSG','14939','geodetic_crs','EPSG','9694','EPSG','1066','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','9695','REDGEOMIN',NULL,'geographic 3D','EPSG','6423','EPSG','1304',NULL,0); INSERT INTO "usage" VALUES('EPSG','14947','geodetic_crs','EPSG','9695','EPSG','1066','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','9696','REDGEOMIN',NULL,'geographic 2D','EPSG','6422','EPSG','1304',NULL,0); INSERT INTO "usage" VALUES('EPSG','14949','geodetic_crs','EPSG','9696','EPSG','1066','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9700','ETRF2000-PL',NULL,'geocentric','EPSG','6500','EPSG','1305',NULL,0); INSERT INTO "usage" VALUES('EPSG','15062','geodetic_crs','EPSG','9700','EPSG','1192','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9701','ETRF2000-PL',NULL,'geographic 3D','EPSG','6423','EPSG','1305',NULL,0); INSERT INTO "usage" VALUES('EPSG','15063','geodetic_crs','EPSG','9701','EPSG','1192','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9702','ETRF2000-PL',NULL,'geographic 2D','EPSG','6422','EPSG','1305',NULL,0); INSERT INTO "usage" VALUES('EPSG','15131','geodetic_crs','EPSG','9702','EPSG','1192','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9739','EOS21-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1308',NULL,0); INSERT INTO "usage" VALUES('EPSG','15341','geodetic_crs','EPSG','9739','EPSG','4620','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9753','WGS 84 (G2139)',NULL,'geocentric','EPSG','6500','EPSG','1309',NULL,0); INSERT INTO "usage" VALUES('EPSG','16657','geodetic_crs','EPSG','9753','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9754','WGS 84 (G2139)',NULL,'geographic 3D','EPSG','6423','EPSG','1309',NULL,0); INSERT INTO "usage" VALUES('EPSG','16853','geodetic_crs','EPSG','9754','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9755','WGS 84 (G2139)',NULL,'geographic 2D','EPSG','6422','EPSG','1309',NULL,0); INSERT INTO "usage" VALUES('EPSG','16852','geodetic_crs','EPSG','9755','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','9758','ECML14_NB-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1310',NULL,0); INSERT INTO "usage" VALUES('EPSG','16495','geodetic_crs','EPSG','9758','EPSG','4621','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9763','EWR2-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1311',NULL,0); INSERT INTO "usage" VALUES('EPSG','16507','geodetic_crs','EPSG','9763','EPSG','4622','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9775','RGF93 v2',NULL,'geocentric','EPSG','6500','EPSG','1312',NULL,0); INSERT INTO "usage" VALUES('EPSG','16642','geodetic_crs','EPSG','9775','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9776','RGF93 v2',NULL,'geographic 3D','EPSG','6423','EPSG','1312',NULL,0); INSERT INTO "usage" VALUES('EPSG','16641','geodetic_crs','EPSG','9776','EPSG','1096','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','9777','RGF93 v2',NULL,'geographic 2D','EPSG','6422','EPSG','1312',NULL,0); INSERT INTO "usage" VALUES('EPSG','16643','geodetic_crs','EPSG','9777','EPSG','1096','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9778','RGF93 v2 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1312',NULL,0); INSERT INTO "usage" VALUES('EPSG','16647','geodetic_crs','EPSG','9778','EPSG','1096','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','9779','RGF93 v2 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1312',NULL,0); INSERT INTO "usage" VALUES('EPSG','16646','geodetic_crs','EPSG','9779','EPSG','1096','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','9780','RGF93 v2b',NULL,'geocentric','EPSG','6500','EPSG','1313',NULL,0); INSERT INTO "usage" VALUES('EPSG','16649','geodetic_crs','EPSG','9780','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9781','RGF93 v2b',NULL,'geographic 3D','EPSG','6423','EPSG','1313',NULL,0); INSERT INTO "usage" VALUES('EPSG','16650','geodetic_crs','EPSG','9781','EPSG','1096','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','9782','RGF93 v2b',NULL,'geographic 2D','EPSG','6422','EPSG','1313',NULL,0); INSERT INTO "usage" VALUES('EPSG','16651','geodetic_crs','EPSG','9782','EPSG','1096','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','9783','RGF93 v2b (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1313',NULL,0); INSERT INTO "usage" VALUES('EPSG','16652','geodetic_crs','EPSG','9783','EPSG','1096','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','9784','RGF93 v2b (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1313',NULL,0); INSERT INTO "usage" VALUES('EPSG','16653','geodetic_crs','EPSG','9784','EPSG','1096','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','9866','MRH21-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1314',NULL,0); INSERT INTO "usage" VALUES('EPSG','16934','geodetic_crs','EPSG','9866','EPSG','4652','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9871','MOLDOR11-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1315',NULL,0); INSERT INTO "usage" VALUES('EPSG','16960','geodetic_crs','EPSG','9871','EPSG','4655','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9892','LUREF',NULL,'geocentric','EPSG','6500','EPSG','6181',NULL,0); INSERT INTO "usage" VALUES('EPSG','17243','geodetic_crs','EPSG','9892','EPSG','1146','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9893','LUREF',NULL,'geographic 3D','EPSG','6423','EPSG','6181',NULL,0); INSERT INTO "usage" VALUES('EPSG','17309','geodetic_crs','EPSG','9893','EPSG','1146','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9939','EBBWV14-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1319',NULL,0); INSERT INTO "usage" VALUES('EPSG','17353','geodetic_crs','EPSG','9939','EPSG','4661','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9964','HULLEE13-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1317',NULL,0); INSERT INTO "usage" VALUES('EPSG','17424','geodetic_crs','EPSG','9964','EPSG','4663','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9969','SCM22-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1320',NULL,0); INSERT INTO "usage" VALUES('EPSG','17438','geodetic_crs','EPSG','9969','EPSG','4665','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9974','FNL22-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1321',NULL,0); INSERT INTO "usage" VALUES('EPSG','17451','geodetic_crs','EPSG','9974','EPSG','4664','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','9988','ITRF2020',NULL,'geocentric','EPSG','6500','EPSG','1322',NULL,0); INSERT INTO "usage" VALUES('EPSG','17904','geodetic_crs','EPSG','9988','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9989','ITRF2020',NULL,'geographic 3D','EPSG','6423','EPSG','1322',NULL,0); INSERT INTO "usage" VALUES('EPSG','17902','geodetic_crs','EPSG','9989','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','9990','ITRF2020',NULL,'geographic 2D','EPSG','6422','EPSG','1322',NULL,0); INSERT INTO "usage" VALUES('EPSG','17901','geodetic_crs','EPSG','9990','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10158','S34J-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1332',NULL,0); INSERT INTO "usage" VALUES('EPSG','19659','geodetic_crs','EPSG','10158','EPSG','2531','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','10175','DoPw22-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1334',NULL,0); INSERT INTO "usage" VALUES('EPSG','18657','geodetic_crs','EPSG','10175','EPSG','4686','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10176','IGS20',NULL,'geocentric','EPSG','6500','EPSG','1333',NULL,0); INSERT INTO "usage" VALUES('EPSG','18627','geodetic_crs','EPSG','10176','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10177','IGS20',NULL,'geographic 3D','EPSG','6423','EPSG','1333',NULL,0); INSERT INTO "usage" VALUES('EPSG','18628','geodetic_crs','EPSG','10177','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10178','IGS20',NULL,'geographic 2D','EPSG','6422','EPSG','1333',NULL,0); INSERT INTO "usage" VALUES('EPSG','18629','geodetic_crs','EPSG','10178','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10185','ShAb07-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1335',NULL,0); INSERT INTO "usage" VALUES('EPSG','18854','geodetic_crs','EPSG','10185','EPSG','4687','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10191','CNH22-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1336',NULL,0); INSERT INTO "usage" VALUES('EPSG','18717','geodetic_crs','EPSG','10191','EPSG','4677','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10196','CWS13-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1338',NULL,0); INSERT INTO "usage" VALUES('EPSG','18705','geodetic_crs','EPSG','10196','EPSG','4678','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10204','DIBA15-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1339',NULL,0); INSERT INTO "usage" VALUES('EPSG','18714','geodetic_crs','EPSG','10204','EPSG','4681','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10209','GWPBS22-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1340',NULL,0); INSERT INTO "usage" VALUES('EPSG','18796','geodetic_crs','EPSG','10209','EPSG','4685','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10214','GWWAB22-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1341',NULL,0); INSERT INTO "usage" VALUES('EPSG','18798','geodetic_crs','EPSG','10214','EPSG','4684','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10219','GWWWA22-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1342',NULL,0); INSERT INTO "usage" VALUES('EPSG','18800','geodetic_crs','EPSG','10219','EPSG','4683','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10224','MALS09-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1343',NULL,0); INSERT INTO "usage" VALUES('EPSG','18749','geodetic_crs','EPSG','10224','EPSG','4682','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10229','OxWo08-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1344',NULL,0); INSERT INTO "usage" VALUES('EPSG','18784','geodetic_crs','EPSG','10229','EPSG','4680','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10237','SYC20-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1345',NULL,0); INSERT INTO "usage" VALUES('EPSG','18789','geodetic_crs','EPSG','10237','EPSG','4679','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10249','S34S-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1337',NULL,0); INSERT INTO "usage" VALUES('EPSG','19667','geodetic_crs','EPSG','10249','EPSG','2532','EPSG','1028'); INSERT INTO "geodetic_crs" VALUES('EPSG','10252','S45B-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1346',NULL,0); INSERT INTO "usage" VALUES('EPSG','19671','geodetic_crs','EPSG','10252','EPSG','2533','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','10256','GS-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1347',NULL,0); INSERT INTO "usage" VALUES('EPSG','19707','geodetic_crs','EPSG','10256','EPSG','4575','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','10260','GSB-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1348',NULL,0); INSERT INTO "usage" VALUES('EPSG','19682','geodetic_crs','EPSG','10260','EPSG','2533','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','10265','KK-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1349',NULL,0); INSERT INTO "usage" VALUES('EPSG','19712','geodetic_crs','EPSG','10265','EPSG','4693','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','10268','Ostenfeld-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1350',NULL,0); INSERT INTO "usage" VALUES('EPSG','19696','geodetic_crs','EPSG','10268','EPSG','4694','EPSG','1203'); INSERT INTO "geodetic_crs" VALUES('EPSG','10272','SMITB20-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1351',NULL,0); INSERT INTO "usage" VALUES('EPSG','19175','geodetic_crs','EPSG','10272','EPSG','4688','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10277','RBEPP12-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1352',NULL,0); INSERT INTO "usage" VALUES('EPSG','19181','geodetic_crs','EPSG','10277','EPSG','4689','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10282','ETRS89/DREF91/2016',NULL,'geocentric','EPSG','6500','EPSG','1353',NULL,0); INSERT INTO "usage" VALUES('EPSG','19243','geodetic_crs','EPSG','10282','EPSG','1103','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10283','ETRS89/DREF91/2016',NULL,'geographic 3D','EPSG','6423','EPSG','1353',NULL,0); INSERT INTO "usage" VALUES('EPSG','19203','geodetic_crs','EPSG','10283','EPSG','1103','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10284','ETRS89/DREF91/2016',NULL,'geographic 2D','EPSG','6422','EPSG','1353',NULL,0); INSERT INTO "usage" VALUES('EPSG','19244','geodetic_crs','EPSG','10284','EPSG','1103','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10297','RGSH2020',NULL,'geocentric','EPSG','6500','EPSG','1355',NULL,0); INSERT INTO "usage" VALUES('EPSG','19531','geodetic_crs','EPSG','10297','EPSG','1026','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','10298','RGSH2020',NULL,'geographic 3D','EPSG','6423','EPSG','1355',NULL,0); INSERT INTO "usage" VALUES('EPSG','19533','geodetic_crs','EPSG','10298','EPSG','1026','EPSG','1136'); INSERT INTO "geodetic_crs" VALUES('EPSG','10299','RGSH2020',NULL,'geographic 2D','EPSG','6422','EPSG','1355',NULL,0); INSERT INTO "usage" VALUES('EPSG','19534','geodetic_crs','EPSG','10299','EPSG','1026','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10300','RGNC91-93 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','6749',NULL,0); INSERT INTO "usage" VALUES('EPSG','19598','geodetic_crs','EPSG','10300','EPSG','1174','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','10303','LKS-2020',NULL,'geocentric','EPSG','6500','EPSG','1356',NULL,0); INSERT INTO "usage" VALUES('EPSG','19562','geodetic_crs','EPSG','10303','EPSG','1139','EPSG','1026'); INSERT INTO "geodetic_crs" VALUES('EPSG','10304','LKS-2020',NULL,'geographic 3D','EPSG','6423','EPSG','1356',NULL,0); INSERT INTO "usage" VALUES('EPSG','19554','geodetic_crs','EPSG','10304','EPSG','1139','EPSG','1026'); INSERT INTO "geodetic_crs" VALUES('EPSG','10305','LKS-2020',NULL,'geographic 2D','EPSG','6422','EPSG','1356',NULL,0); INSERT INTO "usage" VALUES('EPSG','19552','geodetic_crs','EPSG','10305','EPSG','1139','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10307','RGNC91-93 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','6749',NULL,0); INSERT INTO "usage" VALUES('EPSG','19599','geodetic_crs','EPSG','10307','EPSG','1174','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','10308','RGNC15',NULL,'geocentric','EPSG','6500','EPSG','1357',NULL,0); INSERT INTO "usage" VALUES('EPSG','19579','geodetic_crs','EPSG','10308','EPSG','1174','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10309','RGNC15',NULL,'geographic 3D','EPSG','6423','EPSG','1357',NULL,0); INSERT INTO "usage" VALUES('EPSG','19592','geodetic_crs','EPSG','10309','EPSG','1174','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','10310','RGNC15',NULL,'geographic 2D','EPSG','6422','EPSG','1357',NULL,0); INSERT INTO "usage" VALUES('EPSG','19593','geodetic_crs','EPSG','10310','EPSG','1174','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','10311','RGNC15 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1357',NULL,0); INSERT INTO "usage" VALUES('EPSG','19601','geodetic_crs','EPSG','10311','EPSG','1174','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','10312','RGNC15 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1357',NULL,0); INSERT INTO "usage" VALUES('EPSG','19595','geodetic_crs','EPSG','10312','EPSG','1174','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','10326','BH_ETRS89',NULL,'geocentric','EPSG','6500','EPSG','1358',NULL,0); INSERT INTO "usage" VALUES('EPSG','19732','geodetic_crs','EPSG','10326','EPSG','1050','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10327','BH_ETRS89',NULL,'geographic 3D','EPSG','6423','EPSG','1358',NULL,0); INSERT INTO "usage" VALUES('EPSG','19742','geodetic_crs','EPSG','10327','EPSG','1050','EPSG','1026'); INSERT INTO "geodetic_crs" VALUES('EPSG','10328','BH_ETRS89',NULL,'geographic 2D','EPSG','6422','EPSG','1358',NULL,0); INSERT INTO "usage" VALUES('EPSG','19734','geodetic_crs','EPSG','10328','EPSG','1050','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10345','Hughes 1980',NULL,'geographic 2D','EPSG','6422','EPSG','1359',NULL,0); INSERT INTO "usage" VALUES('EPSG','19882','geodetic_crs','EPSG','10345','EPSG','1262','EPSG','1110'); INSERT INTO "geodetic_crs" VALUES('EPSG','10346','NSIDC Authalic Sphere',NULL,'geographic 2D','EPSG','6422','EPSG','1360',NULL,0); INSERT INTO "usage" VALUES('EPSG','19878','geodetic_crs','EPSG','10346','EPSG','1262','EPSG','1195'); INSERT INTO "geodetic_crs" VALUES('EPSG','10412','NAD83(CSRS)v8',NULL,'geocentric','EPSG','6500','EPSG','1365',NULL,0); INSERT INTO "usage" VALUES('EPSG','20139','geodetic_crs','EPSG','10412','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10413','NAD83(CSRS)v8',NULL,'geographic 3D','EPSG','6423','EPSG','1365',NULL,0); INSERT INTO "usage" VALUES('EPSG','20141','geodetic_crs','EPSG','10413','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10414','NAD83(CSRS)v8',NULL,'geographic 2D','EPSG','6422','EPSG','1365',NULL,0); INSERT INTO "usage" VALUES('EPSG','20156','geodetic_crs','EPSG','10414','EPSG','1061','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10468','COV23-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1366',NULL,0); INSERT INTO "usage" VALUES('EPSG','20311','geodetic_crs','EPSG','10468','EPSG','4743','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10473','BBT2000',NULL,'geocentric','EPSG','6500','EPSG','1367',NULL,0); INSERT INTO "usage" VALUES('EPSG','20338','geodetic_crs','EPSG','10473','EPSG','4744','EPSG','1285'); INSERT INTO "geodetic_crs" VALUES('EPSG','10474','BBT2000',NULL,'geographic 3D','EPSG','6423','EPSG','1367',NULL,0); INSERT INTO "usage" VALUES('EPSG','20339','geodetic_crs','EPSG','10474','EPSG','4744','EPSG','1285'); INSERT INTO "geodetic_crs" VALUES('EPSG','10475','BBT2000',NULL,'geographic 2D','EPSG','6422','EPSG','1367',NULL,0); INSERT INTO "usage" VALUES('EPSG','20331','geodetic_crs','EPSG','10475','EPSG','4744','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10569','ETRF2020',NULL,'geocentric','EPSG','6500','EPSG','1382',NULL,0); INSERT INTO "usage" VALUES('EPSG','21226','geodetic_crs','EPSG','10569','EPSG','4755','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10570','ETRF2020',NULL,'geographic 3D','EPSG','6423','EPSG','1382',NULL,0); INSERT INTO "usage" VALUES('EPSG','21227','geodetic_crs','EPSG','10570','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10571','ETRF2020',NULL,'geographic 2D','EPSG','6422','EPSG','1382',NULL,0); INSERT INTO "usage" VALUES('EPSG','21228','geodetic_crs','EPSG','10571','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10604','WGS 84 (G2296)',NULL,'geocentric','EPSG','6500','EPSG','1383',NULL,0); INSERT INTO "usage" VALUES('EPSG','21200','geodetic_crs','EPSG','10604','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','10605','WGS 84 (G2296)',NULL,'geographic 3D','EPSG','6423','EPSG','1383',NULL,0); INSERT INTO "usage" VALUES('EPSG','21195','geodetic_crs','EPSG','10605','EPSG','2830','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','10606','WGS 84 (G2296)',NULL,'geographic 2D','EPSG','6422','EPSG','1383',NULL,0); INSERT INTO "usage" VALUES('EPSG','21196','geodetic_crs','EPSG','10606','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_crs" VALUES('EPSG','10623','ECML14-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1385',NULL,0); INSERT INTO "usage" VALUES('EPSG','21387','geodetic_crs','EPSG','10623','EPSG','4774','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10628','WC05-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1386',NULL,0); INSERT INTO "usage" VALUES('EPSG','21381','geodetic_crs','EPSG','10628','EPSG','4775','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','10634','Saba',NULL,'geocentric','EPSG','6500','EPSG','1379',NULL,0); INSERT INTO "usage" VALUES('EPSG','21863','geodetic_crs','EPSG','10634','EPSG','4757','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','10635','Saba',NULL,'geographic 3D','EPSG','6423','EPSG','1379',NULL,0); INSERT INTO "usage" VALUES('EPSG','21864','geodetic_crs','EPSG','10635','EPSG','4757','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','10636','Saba',NULL,'geographic 2D','EPSG','6422','EPSG','1379',NULL,0); INSERT INTO "usage" VALUES('EPSG','21865','geodetic_crs','EPSG','10636','EPSG','4757','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','10637','BES2020 Saba',NULL,'geocentric','EPSG','6500','EPSG','1380',NULL,0); INSERT INTO "usage" VALUES('EPSG','21866','geodetic_crs','EPSG','10637','EPSG','4757','EPSG','1179'); INSERT INTO "geodetic_crs" VALUES('EPSG','10638','BES2020 Saba',NULL,'geographic 3D','EPSG','6423','EPSG','1380',NULL,0); INSERT INTO "usage" VALUES('EPSG','21867','geodetic_crs','EPSG','10638','EPSG','4757','EPSG','1179'); INSERT INTO "geodetic_crs" VALUES('EPSG','10639','BES2020 Saba',NULL,'geographic 2D','EPSG','6422','EPSG','1380',NULL,0); INSERT INTO "usage" VALUES('EPSG','21868','geodetic_crs','EPSG','10639','EPSG','4757','EPSG','1178'); INSERT INTO "geodetic_crs" VALUES('EPSG','10669','RGM23',NULL,'geocentric','EPSG','6500','EPSG','1389',NULL,0); INSERT INTO "usage" VALUES('EPSG','21846','geodetic_crs','EPSG','10669','EPSG','1159','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10670','RGM23',NULL,'geographic 3D','EPSG','6423','EPSG','1389',NULL,0); INSERT INTO "usage" VALUES('EPSG','21845','geodetic_crs','EPSG','10670','EPSG','1159','EPSG','1182'); INSERT INTO "geodetic_crs" VALUES('EPSG','10671','RGM23',NULL,'geographic 2D','EPSG','6422','EPSG','1389',NULL,0); INSERT INTO "usage" VALUES('EPSG','21844','geodetic_crs','EPSG','10671','EPSG','1159','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10672','RGM23 (lon-lat)',NULL,'geographic 3D','EPSG','6426','EPSG','1389',NULL,0); INSERT INTO "usage" VALUES('EPSG','21686','geodetic_crs','EPSG','10672','EPSG','1159','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','10673','RGM23 (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1389',NULL,0); INSERT INTO "usage" VALUES('EPSG','21687','geodetic_crs','EPSG','10673','EPSG','1159','EPSG','1189'); INSERT INTO "geodetic_crs" VALUES('EPSG','10688','EUREF-FIN',NULL,'geocentric','EPSG','6500','EPSG','1391',NULL,0); INSERT INTO "usage" VALUES('EPSG','21977','geodetic_crs','EPSG','10688','EPSG','1095','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','10689','EUREF-FIN',NULL,'geographic 3D','EPSG','6423','EPSG','1391',NULL,0); INSERT INTO "usage" VALUES('EPSG','21978','geodetic_crs','EPSG','10689','EPSG','1095','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','10690','EUREF-FIN',NULL,'geographic 2D','EPSG','6422','EPSG','1391',NULL,0); INSERT INTO "usage" VALUES('EPSG','22200','geodetic_crs','EPSG','10690','EPSG','1095','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10723','UZGD2024',NULL,'geocentric','EPSG','6500','EPSG','1392',NULL,0); INSERT INTO "usage" VALUES('EPSG','22087','geodetic_crs','EPSG','10723','EPSG','1248','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10724','UZGD2024',NULL,'geographic 3D','EPSG','6423','EPSG','1392',NULL,0); INSERT INTO "usage" VALUES('EPSG','22088','geodetic_crs','EPSG','10724','EPSG','1248','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10725','UZGD2024',NULL,'geographic 2D','EPSG','6422','EPSG','1392',NULL,0); INSERT INTO "usage" VALUES('EPSG','22089','geodetic_crs','EPSG','10725','EPSG','1248','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','10734','Sint Eustatius',NULL,'geocentric','EPSG','6500','EPSG','1393',NULL,0); INSERT INTO "usage" VALUES('EPSG','22282','geodetic_crs','EPSG','10734','EPSG','4788','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','10735','Sint Eustatius',NULL,'geographic 3D','EPSG','6423','EPSG','1393',NULL,0); INSERT INTO "usage" VALUES('EPSG','22283','geodetic_crs','EPSG','10735','EPSG','4788','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','10736','Sint Eustatius',NULL,'geographic 2D','EPSG','6422','EPSG','1393',NULL,0); INSERT INTO "usage" VALUES('EPSG','22284','geodetic_crs','EPSG','10736','EPSG','4788','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','10737','BES2020 Sint Eustatius',NULL,'geocentric','EPSG','6500','EPSG','1394',NULL,0); INSERT INTO "usage" VALUES('EPSG','22285','geodetic_crs','EPSG','10737','EPSG','4788','EPSG','1179'); INSERT INTO "geodetic_crs" VALUES('EPSG','10738','BES2020 Sint Eustatius',NULL,'geographic 3D','EPSG','6423','EPSG','1394',NULL,0); INSERT INTO "usage" VALUES('EPSG','22286','geodetic_crs','EPSG','10738','EPSG','4788','EPSG','1179'); INSERT INTO "geodetic_crs" VALUES('EPSG','10739','BES2020 Sint Eustatius',NULL,'geographic 2D','EPSG','6422','EPSG','1394',NULL,0); INSERT INTO "usage" VALUES('EPSG','22287','geodetic_crs','EPSG','10739','EPSG','4788','EPSG','1178'); INSERT INTO "geodetic_crs" VALUES('EPSG','10758','Bonaire',NULL,'geographic 2D','EPSG','6422','EPSG','1396',NULL,0); INSERT INTO "usage" VALUES('EPSG','22168','geodetic_crs','EPSG','10758','EPSG','3822','EPSG','1269'); INSERT INTO "geodetic_crs" VALUES('EPSG','10760','Bonaire 2004',NULL,'geocentric','EPSG','6500','EPSG','1397',NULL,0); INSERT INTO "usage" VALUES('EPSG','22269','geodetic_crs','EPSG','10760','EPSG','3822','EPSG','1179'); INSERT INTO "geodetic_crs" VALUES('EPSG','10761','Bonaire 2004',NULL,'geographic 3D','EPSG','6423','EPSG','1397',NULL,0); INSERT INTO "usage" VALUES('EPSG','22172','geodetic_crs','EPSG','10761','EPSG','3822','EPSG','1179'); INSERT INTO "geodetic_crs" VALUES('EPSG','10762','Bonaire 2004',NULL,'geographic 2D','EPSG','6422','EPSG','1397',NULL,0); INSERT INTO "usage" VALUES('EPSG','22173','geodetic_crs','EPSG','10762','EPSG','3822','EPSG','1178'); INSERT INTO "geodetic_crs" VALUES('EPSG','10779','ITRF2020-u2023',NULL,'geocentric','EPSG','6500','EPSG','1399',NULL,0); INSERT INTO "usage" VALUES('EPSG','22372','geodetic_crs','EPSG','10779','EPSG','2830','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10780','ITRF2020-u2023',NULL,'geographic 3D','EPSG','6423','EPSG','1399',NULL,0); INSERT INTO "usage" VALUES('EPSG','22335','geodetic_crs','EPSG','10780','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10781','ITRF2020-u2023',NULL,'geographic 2D','EPSG','6422','EPSG','1399',NULL,0); INSERT INTO "usage" VALUES('EPSG','22336','geodetic_crs','EPSG','10781','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10783','IGb20',NULL,'geocentric','EPSG','6500','EPSG','1400',NULL,0); INSERT INTO "usage" VALUES('EPSG','22363','geodetic_crs','EPSG','10783','EPSG','2830','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10784','IGb20',NULL,'geographic 3D','EPSG','6423','EPSG','1400',NULL,0); INSERT INTO "usage" VALUES('EPSG','22364','geodetic_crs','EPSG','10784','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10785','IGb20',NULL,'geographic 2D','EPSG','6422','EPSG','1400',NULL,0); INSERT INTO "usage" VALUES('EPSG','22365','geodetic_crs','EPSG','10785','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10798','LibRef21',NULL,'geocentric','EPSG','6500','EPSG','1402',NULL,0); INSERT INTO "usage" VALUES('EPSG','22444','geodetic_crs','EPSG','10798','EPSG','1142','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10799','LibRef21',NULL,'geographic 3D','EPSG','6423','EPSG','1402',NULL,0); INSERT INTO "usage" VALUES('EPSG','22445','geodetic_crs','EPSG','10799','EPSG','1142','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','10800','LibRef21',NULL,'geographic 2D','EPSG','6422','EPSG','1402',NULL,0); INSERT INTO "usage" VALUES('EPSG','22446','geodetic_crs','EPSG','10800','EPSG','1142','EPSG','1181'); INSERT INTO "geodetic_crs" VALUES('EPSG','20033','MWC18-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1324',NULL,0); INSERT INTO "usage" VALUES('EPSG','18335','geodetic_crs','EPSG','20033','EPSG','4666','EPSG','1141'); INSERT INTO "geodetic_crs" VALUES('EPSG','20039','SIRGAS-Chile 2021',NULL,'geocentric','EPSG','6500','EPSG','1327',NULL,0); INSERT INTO "usage" VALUES('EPSG','18454','geodetic_crs','EPSG','20039','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','20040','SIRGAS-Chile 2021',NULL,'geographic 3D','EPSG','6423','EPSG','1327',NULL,0); INSERT INTO "usage" VALUES('EPSG','18455','geodetic_crs','EPSG','20040','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','20041','SIRGAS-Chile 2021',NULL,'geographic 2D','EPSG','6422','EPSG','1327',NULL,0); INSERT INTO "usage" VALUES('EPSG','18456','geodetic_crs','EPSG','20041','EPSG','1066','EPSG','1183'); INSERT INTO "geodetic_crs" VALUES('EPSG','20044','MAGNA-SIRGAS 2018',NULL,'geocentric','EPSG','6500','EPSG','1329',NULL,0); INSERT INTO "usage" VALUES('EPSG','19038','geodetic_crs','EPSG','20044','EPSG','1070','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','20045','MAGNA-SIRGAS 2018',NULL,'geographic 3D','EPSG','6423','EPSG','1329',NULL,0); INSERT INTO "usage" VALUES('EPSG','19039','geodetic_crs','EPSG','20045','EPSG','1070','EPSG','1027'); INSERT INTO "geodetic_crs" VALUES('EPSG','20046','MAGNA-SIRGAS 2018',NULL,'geographic 2D','EPSG','6422','EPSG','1329',NULL,0); INSERT INTO "usage" VALUES('EPSG','18485','geodetic_crs','EPSG','20046','EPSG','1070','EPSG','1183'); proj-9.6.0/data/sql/geodetic_datum.sql000664 001754 001755 00000477603 14764566077 017650 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "geodetic_datum" VALUES('EPSG','1024','Hungarian Datum 1909',NULL,'EPSG','7004','EPSG','8901','1909-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13076','geodetic_datum','EPSG','1024','EPSG','1119','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1025','Taiwan Datum 1967',NULL,'EPSG','7050','EPSG','8901','1967-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13077','geodetic_datum','EPSG','1025','EPSG','3315','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1026','Taiwan Datum 1997',NULL,'EPSG','7019','EPSG','8901','1997-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13078','geodetic_datum','EPSG','1026','EPSG','1228','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1029','Iraqi Geospatial Reference System',NULL,'EPSG','7019','EPSG','8901','1997-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13081','geodetic_datum','EPSG','1029','EPSG','1124','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1031','MGI 1901',NULL,'EPSG','7004','EPSG','8901','1901-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13083','geodetic_datum','EPSG','1031','EPSG','2370','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1032','MOLDREF99',NULL,'EPSG','7019','EPSG','8901','1999-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13084','geodetic_datum','EPSG','1032','EPSG','1162','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1033','Reseau Geodesique de la RDC 2005',NULL,'EPSG','7019','EPSG','8901','2005-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13085','geodetic_datum','EPSG','1033','EPSG','3613','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1034','Serbian Reference Network 1998',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13086','geodetic_datum','EPSG','1034','EPSG','4543','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1035','Red Geodesica de Canarias 1995',NULL,'EPSG','7019','EPSG','8901','2007-08-29',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13087','geodetic_datum','EPSG','1035','EPSG','3199','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1036','Reseau Geodesique de Mayotte 2004',NULL,'EPSG','7019','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13088','geodetic_datum','EPSG','1036','EPSG','1159','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1037','Cadastre 1997',NULL,'EPSG','7022','EPSG','8901','1997-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13089','geodetic_datum','EPSG','1037','EPSG','3340','EPSG','1028'); INSERT INTO "geodetic_datum" VALUES('EPSG','1038','Reseau Geodesique de Saint Pierre et Miquelon 2006',NULL,'EPSG','7019','EPSG','8901','2006-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13090','geodetic_datum','EPSG','1038','EPSG','1220','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1041','Autonomous Regions of Portugal 2008',NULL,'EPSG','7019','EPSG','8901','2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13093','geodetic_datum','EPSG','1041','EPSG','3670','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1042','Mexico ITRF92',NULL,'EPSG','7019','EPSG','8901','1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13094','geodetic_datum','EPSG','1042','EPSG','1160','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1043','China 2000',NULL,'EPSG','1024','EPSG','8901','2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13095','geodetic_datum','EPSG','1043','EPSG','1067','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1044','Sao Tome',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13096','geodetic_datum','EPSG','1044','EPSG','3645','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1045','New Beijing',NULL,'EPSG','7024','EPSG','8901','1982-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13097','geodetic_datum','EPSG','1045','EPSG','3228','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1046','Principe',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13098','geodetic_datum','EPSG','1046','EPSG','3646','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1047','Reseau de Reference des Antilles Francaises 1991',NULL,'EPSG','7019','EPSG','8901','1991-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13099','geodetic_datum','EPSG','1047','EPSG','2824','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1048','Tokyo 1892',NULL,'EPSG','7004','EPSG','8901','1892-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13100','geodetic_datum','EPSG','1048','EPSG','1364','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','1052','System of the Unified Trigonometrical Cadastral Network/05',NULL,'EPSG','7004','EPSG','8901','2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13104','geodetic_datum','EPSG','1052','EPSG','1079','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1053','Sri Lanka Datum 1999',NULL,'EPSG','7015','EPSG','8901','1999-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13105','geodetic_datum','EPSG','1053','EPSG','3310','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1055','System of the Unified Trigonometrical Cadastral Network/05 (Ferro)',NULL,'EPSG','7004','EPSG','8909','2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13107','geodetic_datum','EPSG','1055','EPSG','1079','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1056','Geocentric Datum Brunei Darussalam 2009',NULL,'EPSG','7019','EPSG','8901','2009-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13108','geodetic_datum','EPSG','1056','EPSG','1055','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1057','Turkish National Reference Frame',NULL,'EPSG','7019','EPSG','8901','2005-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13109','geodetic_datum','EPSG','1057','EPSG','1237','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1058','Bhutan National Geodetic Datum',NULL,'EPSG','7019','EPSG','8901','2003-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13110','geodetic_datum','EPSG','1058','EPSG','1048','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1060','Islands Net 2004',NULL,'EPSG','7019','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13112','geodetic_datum','EPSG','1060','EPSG','1120','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1061','International Terrestrial Reference Frame 2008',NULL,'EPSG','7019','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13113','geodetic_datum','EPSG','1061','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1062','Posiciones Geodesicas Argentinas 2007',NULL,'EPSG','7030','EPSG','8901','2006-08-19',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13114','geodetic_datum','EPSG','1062','EPSG','1033','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1063','Marco Geodesico Nacional de Bolivia',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13115','geodetic_datum','EPSG','1063','EPSG','1049','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1064','SIRGAS-Chile realization 1 epoch 2002',NULL,'EPSG','7019','EPSG','8901','2002-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13116','geodetic_datum','EPSG','1064','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1065','Costa Rica 2005',NULL,'EPSG','7030','EPSG','8901','2007-07-30',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13117','geodetic_datum','EPSG','1065','EPSG','1074','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1066','Sistema Geodesico Nacional de Panama MACARIO SOLIS',NULL,'EPSG','7019','EPSG','8901','2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13118','geodetic_datum','EPSG','1066','EPSG','1186','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1067','Peru96',NULL,'EPSG','7019','EPSG','8901','1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13119','geodetic_datum','EPSG','1067','EPSG','1189','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1068','SIRGAS-ROU98',NULL,'EPSG','7030','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13120','geodetic_datum','EPSG','1068','EPSG','1247','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1069','SIRGAS_ES2007.8',NULL,'EPSG','7019','EPSG','8901','2007-11-07',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13121','geodetic_datum','EPSG','1069','EPSG','1087','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1070','Ocotepeque 1935',NULL,'EPSG','7008','EPSG','8901','1935-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13122','geodetic_datum','EPSG','1070','EPSG','3876','EPSG','1142'); INSERT INTO "geodetic_datum" VALUES('EPSG','1071','Sibun Gorge 1922',NULL,'EPSG','7007','EPSG','8901','1922-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13123','geodetic_datum','EPSG','1071','EPSG','3219','EPSG','1142'); INSERT INTO "geodetic_datum" VALUES('EPSG','1072','Panama-Colon 1911',NULL,'EPSG','7008','EPSG','8901','1911-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13124','geodetic_datum','EPSG','1072','EPSG','3290','EPSG','1142'); INSERT INTO "geodetic_datum" VALUES('EPSG','1073','Reseau Geodesique des Antilles Francaises 2009',NULL,'EPSG','7019','EPSG','8901','2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13125','geodetic_datum','EPSG','1073','EPSG','2824','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1074','Corrego Alegre 1961',NULL,'EPSG','7022','EPSG','8901','1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13126','geodetic_datum','EPSG','1074','EPSG','3874','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1075','South American Datum 1969(96)',NULL,'EPSG','7050','EPSG','8901','1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13127','geodetic_datum','EPSG','1075','EPSG','1053','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1076','Papua New Guinea Geodetic Datum 1994',NULL,'EPSG','7019','EPSG','8901','1994-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13128','geodetic_datum','EPSG','1076','EPSG','1187','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1077','Ukraine 2000',NULL,'EPSG','7024','EPSG','8901','2003-09-17',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13129','geodetic_datum','EPSG','1077','EPSG','1242','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1078','Fehmarnbelt Datum 2010',NULL,'EPSG','7019','EPSG','8901','2010-02-21',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13130','geodetic_datum','EPSG','1078','EPSG','3889','EPSG','1139'); INSERT INTO "geodetic_datum" VALUES('EPSG','1081','Deutsche Bahn Reference System',NULL,'EPSG','7004','EPSG','8901','2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13133','geodetic_datum','EPSG','1081','EPSG','3339','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1095','Tonga Geodetic Datum 2005',NULL,'EPSG','7019','EPSG','8901','2005-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13147','geodetic_datum','EPSG','1095','EPSG','1234','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1100','Cayman Islands Geodetic Datum 2011',NULL,'EPSG','7019','EPSG','8901','2011-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13152','geodetic_datum','EPSG','1100','EPSG','1063','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1111','Nepal 1981',NULL,'EPSG','7015','EPSG','8901','1981-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13163','geodetic_datum','EPSG','1111','EPSG','1171','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1112','Cyprus Geodetic Reference System 1993',NULL,'EPSG','7030','EPSG','8901','1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13164','geodetic_datum','EPSG','1112','EPSG','3236','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','1113','Reseau Geodesique des Terres Australes et Antarctiques Francaises 2007',NULL,'EPSG','7019','EPSG','8901','2007-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13165','geodetic_datum','EPSG','1113','EPSG','4246','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1114','Israeli Geodetic Datum 2005',NULL,'EPSG','7030','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13166','geodetic_datum','EPSG','1114','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1115','Israeli Geodetic Datum 2005(2012)',NULL,'EPSG','7030','EPSG','8901','2012-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13167','geodetic_datum','EPSG','1115','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1116','NAD83 (National Spatial Reference System 2011)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','13168','geodetic_datum','EPSG','1116','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1117','NAD83 (National Spatial Reference System PA11)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13169','geodetic_datum','EPSG','1117','EPSG','4162','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1118','NAD83 (National Spatial Reference System MA11)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13170','geodetic_datum','EPSG','1118','EPSG','4167','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1120','Mexico ITRF2008',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13172','geodetic_datum','EPSG','1120','EPSG','1160','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1128','Japanese Geodetic Datum 2011',NULL,'EPSG','7019','EPSG','8901','2011-10-21',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13180','geodetic_datum','EPSG','1128','EPSG','1129','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1132','Rete Dinamica Nazionale 2008',NULL,'EPSG','7019','EPSG','8901','2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13184','geodetic_datum','EPSG','1132','EPSG','3343','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1133','NAD83 (Continuously Operating Reference Station 1996)',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13185','geodetic_datum','EPSG','1133','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1135','Aden 1925',NULL,'EPSG','7012','EPSG','8901','1925-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13187','geodetic_datum','EPSG','1135','EPSG','1340','EPSG','1138'); INSERT INTO "geodetic_datum" VALUES('EPSG','1136','Bioko',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13188','geodetic_datum','EPSG','1136','EPSG','4220','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1137','Bekaa Valley 1920',NULL,'EPSG','7012','EPSG','8901','1920-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13189','geodetic_datum','EPSG','1137','EPSG','3269','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1138','South East Island 1943',NULL,'EPSG','7012','EPSG','8901','1975-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13190','geodetic_datum','EPSG','1138','EPSG','4183','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1139','Gambia',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13191','geodetic_datum','EPSG','1139','EPSG','3250','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','1141','IGS08',NULL,'EPSG','7019','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13193','geodetic_datum','EPSG','1141','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1142','IG05 Intermediate Datum',NULL,'EPSG','7019','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13194','geodetic_datum','EPSG','1142','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1143','Israeli Geodetic Datum 2005',NULL,'EPSG','7019','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13195','geodetic_datum','EPSG','1143','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1144','IG05/12 Intermediate Datum',NULL,'EPSG','7019','EPSG','8901','2012-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13196','geodetic_datum','EPSG','1144','EPSG','2603','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1145','Israeli Geodetic Datum 2005(2012)',NULL,'EPSG','7019','EPSG','8901','2012-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13197','geodetic_datum','EPSG','1145','EPSG','1126','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1147','Oman National Geodetic Datum 2014',NULL,'EPSG','7019','EPSG','8901','2013-12-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13199','geodetic_datum','EPSG','1147','EPSG','1183','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1152','World Geodetic System 1984 (G730)',NULL,'EPSG','7030','EPSG','8901','1994-01-01',1994.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13204','geodetic_datum','EPSG','1152','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1153','World Geodetic System 1984 (G873)',NULL,'EPSG','7030','EPSG','8901','1997-01-01',1997.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13205','geodetic_datum','EPSG','1153','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1154','World Geodetic System 1984 (G1150)',NULL,'EPSG','7030','EPSG','8901','2001-01-01',2001.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13206','geodetic_datum','EPSG','1154','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1155','World Geodetic System 1984 (G1674)',NULL,'EPSG','7030','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13207','geodetic_datum','EPSG','1155','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1156','World Geodetic System 1984 (G1762)',NULL,'EPSG','7030','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13208','geodetic_datum','EPSG','1156','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1157','Parametry Zemli 1990.02',NULL,'EPSG','7054','EPSG','8901','2002-01-01',2002.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13209','geodetic_datum','EPSG','1157','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_datum" VALUES('EPSG','1158','Parametry Zemli 1990.11',NULL,'EPSG','7054','EPSG','8901','2010-01-01',2010.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13210','geodetic_datum','EPSG','1158','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_datum" VALUES('EPSG','1159','Geodezicheskaya Sistema Koordinat 2011',NULL,'EPSG','1025','EPSG','8901','2012-12-28',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13211','geodetic_datum','EPSG','1159','EPSG','1198','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1160','Kyrgyzstan Geodetic Datum 2006',NULL,'EPSG','7019','EPSG','8901','2006-09-13',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13212','geodetic_datum','EPSG','1160','EPSG','1137','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1165','International Terrestrial Reference Frame 2014',NULL,'EPSG','7019','EPSG','8901','2010-01-01',2010.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13217','geodetic_datum','EPSG','1165','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1166','World Geodetic System 1984 (Transit)',NULL,'EPSG','7030','EPSG','8901','1984-01-01',1984.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13218','geodetic_datum','EPSG','1166','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1167','Bulgaria Geodetic System 2005',NULL,'EPSG','7019','EPSG','8901','2005-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13219','geodetic_datum','EPSG','1167','EPSG','1056','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1168','Geocentric Datum of Australia 2020',NULL,'EPSG','7019','EPSG','8901','2017-05-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13220','geodetic_datum','EPSG','1168','EPSG','4177','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1173','St. Helena Tritan',NULL,'EPSG','7030','EPSG','8901','2011-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13225','geodetic_datum','EPSG','1173','EPSG','3183','EPSG','1146'); INSERT INTO "geodetic_datum" VALUES('EPSG','1174','St. Helena Geodetic Datum 2015',NULL,'EPSG','7019','EPSG','8901','2015-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13226','geodetic_datum','EPSG','1174','EPSG','3183','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1178','European Terrestrial Reference Frame 1989',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13230','geodetic_datum','EPSG','1178','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1179','European Terrestrial Reference Frame 1990',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13231','geodetic_datum','EPSG','1179','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1180','European Terrestrial Reference Frame 1991',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13232','geodetic_datum','EPSG','1180','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1181','European Terrestrial Reference Frame 1992',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13233','geodetic_datum','EPSG','1181','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1182','European Terrestrial Reference Frame 1993',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13234','geodetic_datum','EPSG','1182','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1183','European Terrestrial Reference Frame 1994',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13235','geodetic_datum','EPSG','1183','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1184','European Terrestrial Reference Frame 1996',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13236','geodetic_datum','EPSG','1184','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1185','European Terrestrial Reference Frame 1997',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13237','geodetic_datum','EPSG','1185','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1186','European Terrestrial Reference Frame 2000',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13238','geodetic_datum','EPSG','1186','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1187','Islands Net 2016',NULL,'EPSG','7019','EPSG','8901','2016-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13239','geodetic_datum','EPSG','1187','EPSG','1120','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1188','Gusterberg (Ferro)',NULL,'EPSG','1026','EPSG','8909','1817-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13240','geodetic_datum','EPSG','1188','EPSG','4455','EPSG','1028'); INSERT INTO "geodetic_datum" VALUES('EPSG','1189','St. Stephen (Ferro)',NULL,'EPSG','1026','EPSG','8909','1817-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13241','geodetic_datum','EPSG','1189','EPSG','4456','EPSG','1028'); INSERT INTO "geodetic_datum" VALUES('EPSG','1191','IGS14',NULL,'EPSG','7019','EPSG','8901','2010-01-01',2010.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13243','geodetic_datum','EPSG','1191','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1192','North American Datum of 1983 (CSRS96)',NULL,'EPSG','7019','EPSG','8901','1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13244','geodetic_datum','EPSG','1192','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1193','North American Datum of 1983 (CSRS) version 2',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,1997.0,0); INSERT INTO "usage" VALUES('EPSG','13245','geodetic_datum','EPSG','1193','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1194','North American Datum of 1983 (CSRS) version 3',NULL,'EPSG','7019','EPSG','8901','1999-01-01',NULL,NULL,NULL,1997.0,0); INSERT INTO "usage" VALUES('EPSG','13246','geodetic_datum','EPSG','1194','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1195','North American Datum of 1983 (CSRS) version 4',NULL,'EPSG','7019','EPSG','8901','2002-01-01',NULL,NULL,NULL,2002.0,0); INSERT INTO "usage" VALUES('EPSG','13247','geodetic_datum','EPSG','1195','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1196','North American Datum of 1983 (CSRS) version 5',NULL,'EPSG','7019','EPSG','8901','2007-01-01',NULL,NULL,NULL,2006.0,0); INSERT INTO "usage" VALUES('EPSG','13248','geodetic_datum','EPSG','1196','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1197','North American Datum of 1983 (CSRS) version 6',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','13249','geodetic_datum','EPSG','1197','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1198','North American Datum of 1983 (CSRS) version 7',NULL,'EPSG','7019','EPSG','8901','2017-05-01',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','13250','geodetic_datum','EPSG','1198','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1201','System of the Unified Trigonometrical Cadastral Network [JTSK03]',NULL,'EPSG','7004','EPSG','8901','2003-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13253','geodetic_datum','EPSG','1201','EPSG','1211','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1204','European Terrestrial Reference Frame 2005',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13256','geodetic_datum','EPSG','1204','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1206','European Terrestrial Reference Frame 2014',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13258','geodetic_datum','EPSG','1206','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1207','Macao 1920',NULL,'EPSG','7022','EPSG','8901','1920-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13259','geodetic_datum','EPSG','1207','EPSG','1147','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1208','Macao Geodetic Datum 2008',NULL,'EPSG','7019','EPSG','8901','2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13260','geodetic_datum','EPSG','1208','EPSG','1147','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1209','Hong Kong Geodetic',NULL,'EPSG','7019','EPSG','8901','1998-04-30',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13261','geodetic_datum','EPSG','1209','EPSG','1118','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1211','NAD83 (Federal Base Network)',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13263','geodetic_datum','EPSG','1211','EPSG','4515','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1212','NAD83 (High Accuracy Reference Network - Corrected)',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13264','geodetic_datum','EPSG','1212','EPSG','3634','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1214','Serbian Spatial Reference System 2000',NULL,'EPSG','7019','EPSG','8901','2010-08-19',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13266','geodetic_datum','EPSG','1214','EPSG','4543','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1217','Camacupa 2015',NULL,'EPSG','7012','EPSG','8901','2015-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13269','geodetic_datum','EPSG','1217','EPSG','1029','EPSG','1130'); INSERT INTO "geodetic_datum" VALUES('EPSG','1218','MOMRA Terrestrial Reference Frame 2000',NULL,'EPSG','7019','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13270','geodetic_datum','EPSG','1218','EPSG','1206','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1220','Reference System de Angola 2013',NULL,'EPSG','7019','EPSG','8901','2015-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13272','geodetic_datum','EPSG','1220','EPSG','1029','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1221','North American Datum of 1983 (MARP00)',NULL,'EPSG','7019','EPSG','8901','1993-08-15',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13273','geodetic_datum','EPSG','1221','EPSG','4167','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1223','Reseau Geodesique de Wallis et Futuna 1996',NULL,'EPSG','7019','EPSG','8901','1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13275','geodetic_datum','EPSG','1223','EPSG','1255','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1225','CR-SIRGAS',NULL,'EPSG','7019','EPSG','8901','2018-04-17',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13277','geodetic_datum','EPSG','1225','EPSG','1074','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1227','SIRGAS Continuously Operating Network DGF00P01',NULL,'EPSG','7019','EPSG','8901','2000-05-01',2000.4,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13279','geodetic_datum','EPSG','1227','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1228','SIRGAS Continuously Operating Network DGF01P01',NULL,'EPSG','7019','EPSG','8901','2000-01-01',2000.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13280','geodetic_datum','EPSG','1228','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1229','SIRGAS Continuously Operating Network DGF01P02',NULL,'EPSG','7019','EPSG','8901','1998-05-01',1998.4,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13281','geodetic_datum','EPSG','1229','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1230','SIRGAS Continuously Operating Network DGF02P01',NULL,'EPSG','7019','EPSG','8901','2000-01-01',2000.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13282','geodetic_datum','EPSG','1230','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1231','SIRGAS Continuously Operating Network DGF04P01',NULL,'EPSG','7019','EPSG','8901','2003-01-01',2003.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13283','geodetic_datum','EPSG','1231','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1232','SIRGAS Continuously Operating Network DGF05P01',NULL,'EPSG','7019','EPSG','8901','2004-01-01',2004.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13284','geodetic_datum','EPSG','1232','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1233','SIRGAS Continuously Operating Network DGF06P01',NULL,'EPSG','7019','EPSG','8901','2004-01-01',2004.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13285','geodetic_datum','EPSG','1233','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1234','SIRGAS Continuously Operating Network DGF07P01',NULL,'EPSG','7019','EPSG','8901','2004-07-01',2004.5,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13286','geodetic_datum','EPSG','1234','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1235','SIRGAS Continuously Operating Network DGF08P01',NULL,'EPSG','7019','EPSG','8901','2004-07-01',2004.5,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13287','geodetic_datum','EPSG','1235','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1236','SIRGAS Continuously Operating Network SIR09P01',NULL,'EPSG','7019','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13288','geodetic_datum','EPSG','1236','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1237','SIRGAS Continuously Operating Network SIR10P01',NULL,'EPSG','7019','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13289','geodetic_datum','EPSG','1237','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1238','SIRGAS Continuously Operating Network SIR11P01',NULL,'EPSG','7019','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13290','geodetic_datum','EPSG','1238','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1239','SIRGAS Continuously Operating Network SIR13P01',NULL,'EPSG','7019','EPSG','8901','2012-01-01',2012.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13291','geodetic_datum','EPSG','1239','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1240','SIRGAS Continuously Operating Network SIR14P01',NULL,'EPSG','7019','EPSG','8901','2013-01-01',2013.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13292','geodetic_datum','EPSG','1240','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1241','SIRGAS Continuously Operating Network SIR15P01',NULL,'EPSG','7019','EPSG','8901','2013-01-01',2013.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13293','geodetic_datum','EPSG','1241','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1242','SIRGAS Continuously Operating Network SIR17P01',NULL,'EPSG','7019','EPSG','8901','2015-01-01',2015.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13294','geodetic_datum','EPSG','1242','EPSG','4530','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1243','SIRGAS-Chile realization 2 epoch 2010',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13295','geodetic_datum','EPSG','1243','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1244','IGS97',NULL,'EPSG','7019','EPSG','8901','1997-01-01',1997.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13296','geodetic_datum','EPSG','1244','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1245','IGS00',NULL,'EPSG','7019','EPSG','8901','1998-01-01',1998.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13297','geodetic_datum','EPSG','1245','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1246','IGb00',NULL,'EPSG','7019','EPSG','8901','1998-01-01',1998.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13298','geodetic_datum','EPSG','1246','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1247','IGS05',NULL,'EPSG','7019','EPSG','8901','2000-01-01',2000.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13299','geodetic_datum','EPSG','1247','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1248','IGb08',NULL,'EPSG','7019','EPSG','8901','2005-01-01',2005.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13300','geodetic_datum','EPSG','1248','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1249','North American Datum of 1983 (PACP00)',NULL,'EPSG','7019','EPSG','8901','1993-08-15',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13301','geodetic_datum','EPSG','1249','EPSG','4162','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1251','Kosovo Reference System 2001',NULL,'EPSG','7019','EPSG','8901','2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13303','geodetic_datum','EPSG','1251','EPSG','4542','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1252','SIRGAS-Chile realization 3 epoch 2013',NULL,'EPSG','7019','EPSG','8901','2013-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13304','geodetic_datum','EPSG','1252','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1253','SIRGAS-Chile realization 4 epoch 2016',NULL,'EPSG','7019','EPSG','8901','2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18458','geodetic_datum','EPSG','1253','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1254','SIRGAS-Chile',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13306','geodetic_datum','EPSG','1254','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1257','Tapi Aike',NULL,'EPSG','7022','EPSG','8901','1945-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13890','geodetic_datum','EPSG','1257','EPSG','4569','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','1258','Ministerio de Marina Norte',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13891','geodetic_datum','EPSG','1258','EPSG','2357','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','1259','Ministerio de Marina Sur',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13892','geodetic_datum','EPSG','1259','EPSG','2357','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','1263','Oman National Geodetic Datum 2017',NULL,'EPSG','7019','EPSG','8901','2017-11-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13962','geodetic_datum','EPSG','1263','EPSG','1183','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1264','HS2 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14026','geodetic_datum','EPSG','1264','EPSG','4582','EPSG','1260'); INSERT INTO "geodetic_datum" VALUES('EPSG','1266','TPEN11 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2011-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13980','geodetic_datum','EPSG','1266','EPSG','4583','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1268','Kingdom of Saudi Arabia Geodetic Reference Frame 2017',NULL,'EPSG','7019','EPSG','8901','2019-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13896','geodetic_datum','EPSG','1268','EPSG','1206','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1271','MML07 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2007-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13993','geodetic_datum','EPSG','1271','EPSG','4588','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1272','IGb14',NULL,'EPSG','7019','EPSG','8901','2010-01-01',2010.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13994','geodetic_datum','EPSG','1272','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1273','AbInvA96_2020 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2020-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13876','geodetic_datum','EPSG','1273','EPSG','4589','EPSG','1196'); INSERT INTO "geodetic_datum" VALUES('EPSG','1286','Pico de las Nieves 1968',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14025','geodetic_datum','EPSG','1286','EPSG','3873','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1289','GBK19 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14127','geodetic_datum','EPSG','1289','EPSG','4607','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1291','Australian Terrestrial Reference Frame 2014',NULL,'EPSG','7019','EPSG','8901','2020-01-01',2020.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14133','geodetic_datum','EPSG','1291','EPSG','4177','EPSG','1267'); INSERT INTO "geodetic_datum" VALUES('EPSG','1293','Sistem Referensi Geospasial Indonesia 2013',NULL,'EPSG','7030','EPSG','8901','2012-01-01',2012.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14148','geodetic_datum','EPSG','1293','EPSG','1122','EPSG','1266'); INSERT INTO "geodetic_datum" VALUES('EPSG','1295','Lyon Turin Ferroviaire 2004',NULL,'EPSG','7019','EPSG','8901','2005-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14538','geodetic_datum','EPSG','1295','EPSG','4613','EPSG','1271'); INSERT INTO "geodetic_datum" VALUES('EPSG','1304','Red Geodesica Para Mineria en Chile',NULL,'EPSG','7019','EPSG','8901','2019-01-01',2019.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15025','geodetic_datum','EPSG','1304','EPSG','1066','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1305','ETRF2000 Poland',NULL,'EPSG','7019','EPSG','8901','2012-11-15',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15061','geodetic_datum','EPSG','1305','EPSG','1192','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','1308','EOS21 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15312','geodetic_datum','EPSG','1308','EPSG','4620','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1309','World Geodetic System 1984 (G2139)',NULL,'EPSG','7030','EPSG','8901','2016-01-01',2016.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16665','geodetic_datum','EPSG','1309','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1310','ECML14_NB Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16494','geodetic_datum','EPSG','1310','EPSG','4621','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1311','EWR2 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16506','geodetic_datum','EPSG','1311','EPSG','4622','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1312','Reseau Geodesique Francais 1993 v2',NULL,'EPSG','7019','EPSG','8901','2010-06-18',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16636','geodetic_datum','EPSG','1312','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1313','Reseau Geodesique Francais 1993 v2b',NULL,'EPSG','7019','EPSG','8901','2021-01-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16637','geodetic_datum','EPSG','1313','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1314','MRH21 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16933','geodetic_datum','EPSG','1314','EPSG','4652','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1315','MOLDOR11 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','16950','geodetic_datum','EPSG','1315','EPSG','4655','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1317','HULLEE13 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17416','geodetic_datum','EPSG','1317','EPSG','4663','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1319','EBBWV14 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17343','geodetic_datum','EPSG','1319','EPSG','4661','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1320','SCM22 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17437','geodetic_datum','EPSG','1320','EPSG','4665','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1321','FNL22 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17450','geodetic_datum','EPSG','1321','EPSG','4664','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1322','International Terrestrial Reference Frame 2020',NULL,'EPSG','7019','EPSG','8901','2015-01-01',2015.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17903','geodetic_datum','EPSG','1322','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1324','MWC18 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18330','geodetic_datum','EPSG','1324','EPSG','4666','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1327','SIRGAS-Chile realization 5 epoch 2021',NULL,'EPSG','7019','EPSG','8901','2021-08-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18453','geodetic_datum','EPSG','1327','EPSG','1066','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1329','Marco Geocentrico Nacional de Referencia 2018',NULL,'EPSG','7019','EPSG','8901','2018-06-08',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18473','geodetic_datum','EPSG','1329','EPSG','1070','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1332','System 34 Jylland Intermediate Datum',NULL,'EPSG','7022','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19781','geodetic_datum','EPSG','1332','EPSG','2531','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1333','IGS20',NULL,'EPSG','7019','EPSG','8901','2015-01-01',2015.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18632','geodetic_datum','EPSG','1333','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1334','DoPw22 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18851','geodetic_datum','EPSG','1334','EPSG','4686','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1335','ShAb07 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18853','geodetic_datum','EPSG','1335','EPSG','4687','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1336','CNH22 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18690','geodetic_datum','EPSG','1336','EPSG','4677','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1337','System 34 Sjaelland Intermediate Datum',NULL,'EPSG','7022','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19782','geodetic_datum','EPSG','1337','EPSG','2532','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1338','CWS13 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18702','geodetic_datum','EPSG','1338','EPSG','4678','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1339','DIBA15 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18768','geodetic_datum','EPSG','1339','EPSG','4681','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1340','GWPBS22 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18715','geodetic_datum','EPSG','1340','EPSG','4685','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1341','GWWAB22 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18725','geodetic_datum','EPSG','1341','EPSG','4684','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1342','GWWWA22 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18732','geodetic_datum','EPSG','1342','EPSG','4683','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1343','MALS09 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18740','geodetic_datum','EPSG','1343','EPSG','4682','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1344','OxWo08 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18783','geodetic_datum','EPSG','1344','EPSG','4680','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1345','SYC20 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18756','geodetic_datum','EPSG','1345','EPSG','4679','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1346','System 45 Bornholm Intermediate Datum',NULL,'EPSG','7022','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19715','geodetic_datum','EPSG','1346','EPSG','2533','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1347','Generalstabens System Intermediate Datum',NULL,'EPSG','7051','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19716','geodetic_datum','EPSG','1347','EPSG','4575','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1348','Generalstabens System Bornholm Intermediate Datum',NULL,'EPSG','7051','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19717','geodetic_datum','EPSG','1348','EPSG','2533','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1349','Copenhagen Commune Intermediate Datum',NULL,'EPSG','7051','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19718','geodetic_datum','EPSG','1349','EPSG','4693','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1350','Ostenfeld Intermediate Datum',NULL,'EPSG','7004','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19719','geodetic_datum','EPSG','1350','EPSG','4694','EPSG','1203'); INSERT INTO "geodetic_datum" VALUES('EPSG','1351','SMITB20 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19174','geodetic_datum','EPSG','1351','EPSG','4688','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1352','RBEPP12 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19180','geodetic_datum','EPSG','1352','EPSG','4689','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1353','ETRS89/DREF91 Realization 2016',NULL,'EPSG','7019','EPSG','8901','2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19242','geodetic_datum','EPSG','1353','EPSG','1103','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1355','Sonatrach Reference Frame 2020',NULL,'EPSG','7019','EPSG','8901','2012-11-15',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19535','geodetic_datum','EPSG','1355','EPSG','1026','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','1356','Latvian coordinate system 2020',NULL,'EPSG','7019','EPSG','8901','2023-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19558','geodetic_datum','EPSG','1356','EPSG','1139','EPSG','1026'); INSERT INTO "geodetic_datum" VALUES('EPSG','1357','Reseau Geodesique de Nouvelle Caledonie 2015',NULL,'EPSG','7019','EPSG','8901','2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19600','geodetic_datum','EPSG','1357','EPSG','1174','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1358','BH_ETRS89',NULL,'EPSG','7019','EPSG','8901','2011-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19740','geodetic_datum','EPSG','1358','EPSG','1050','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1359','Hughes 1980',NULL,'EPSG','7058','EPSG','8901','1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19883','geodetic_datum','EPSG','1359','EPSG','1262','EPSG','1110'); INSERT INTO "geodetic_datum" VALUES('EPSG','1360','NSIDC International 1924 Authalic Sphere',NULL,'EPSG','7057','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19879','geodetic_datum','EPSG','1360','EPSG','1262','EPSG','1195'); INSERT INTO "geodetic_datum" VALUES('EPSG','1365','North American Datum of 1983 (CSRS) version 8',NULL,'EPSG','7019','EPSG','8901','2022-11-27',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','20140','geodetic_datum','EPSG','1365','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1366','COV23 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2023-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20309','geodetic_datum','EPSG','1366','EPSG','4743','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1367','Brenner Base Tunnel 2000',NULL,'EPSG','7030','EPSG','8901','2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20337','geodetic_datum','EPSG','1367','EPSG','4744','EPSG','1285'); INSERT INTO "geodetic_datum" VALUES('EPSG','1379','Saba',NULL,'EPSG','7022','EPSG','8901','2023-04-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22072','geodetic_datum','EPSG','1379','EPSG','4757','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','1380','BES2020 Saba',NULL,'EPSG','7019','EPSG','8901','2023-04-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21849','geodetic_datum','EPSG','1380','EPSG','4757','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1382','European Terrestrial Reference Frame 2020',NULL,'EPSG','7019','EPSG','8901','1989-01-01',1989.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21225','geodetic_datum','EPSG','1382','EPSG','1298','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1383','World Geodetic System 1984 (G2296)',NULL,'EPSG','7030','EPSG','8901','2024-01-01',2024.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21254','geodetic_datum','EPSG','1383','EPSG','1262','EPSG','1176'); INSERT INTO "geodetic_datum" VALUES('EPSG','1385','ECML14 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2024-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21397','geodetic_datum','EPSG','1385','EPSG','4774','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1386','WC05 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2024-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21396','geodetic_datum','EPSG','1386','EPSG','4775','EPSG','1141'); INSERT INTO "geodetic_datum" VALUES('EPSG','1389','Mayotte Geodetic Reference Frame 2023',NULL,'EPSG','7019','EPSG','8901','2024-07-08',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21858','geodetic_datum','EPSG','1389','EPSG','1159','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1391','EUREF-FIN',NULL,'EPSG','7019','EPSG','8901','1999-01-01',NULL,NULL,NULL,1997.0,0); INSERT INTO "usage" VALUES('EPSG','21991','geodetic_datum','EPSG','1391','EPSG','1095','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','1392','Uzbekistan Geodetic Datum 2024',NULL,'EPSG','7019','EPSG','8901','2024-07-04',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22194','geodetic_datum','EPSG','1392','EPSG','1248','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1393','Sint Eustatius',NULL,'EPSG','7022','EPSG','8901','2023-04-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22279','geodetic_datum','EPSG','1393','EPSG','4788','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','1394','BES2020 Sint Eustatius',NULL,'EPSG','7019','EPSG','8901','2023-04-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22280','geodetic_datum','EPSG','1394','EPSG','4788','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1396','Bonaire',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22166','geodetic_datum','EPSG','1396','EPSG','3822','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','1397','Bonaire 2004',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22170','geodetic_datum','EPSG','1397','EPSG','3822','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','1399','International Terrestrial Reference Frame 2020-u2023',NULL,'EPSG','7019','EPSG','8901','2015-01-01',2015.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22373','geodetic_datum','EPSG','1399','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1400','IGb20',NULL,'EPSG','7019','EPSG','8901','2015-01-01',2015.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22362','geodetic_datum','EPSG','1400','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1402','Liberia Reference Frame 2021',NULL,'EPSG','7019','EPSG','8901','2022-10-31',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22451','geodetic_datum','EPSG','1402','EPSG','1142','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6001','Not specified (based on Airy 1830 ellipsoid)',NULL,'EPSG','7001','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13422','geodetic_datum','EPSG','6001','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6002','Not specified (based on Airy Modified 1849 ellipsoid)',NULL,'EPSG','7002','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13423','geodetic_datum','EPSG','6002','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6003','Not specified (based on Australian National Spheroid)',NULL,'EPSG','7003','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13424','geodetic_datum','EPSG','6003','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6004','Not specified (based on Bessel 1841 ellipsoid)',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13425','geodetic_datum','EPSG','6004','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6005','Not specified (based on Bessel Modified ellipsoid)',NULL,'EPSG','7005','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13426','geodetic_datum','EPSG','6005','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6006','Not specified (based on Bessel Namibia ellipsoid)',NULL,'EPSG','7046','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13427','geodetic_datum','EPSG','6006','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6007','Not specified (based on Clarke 1858 ellipsoid)',NULL,'EPSG','7007','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13428','geodetic_datum','EPSG','6007','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6008','Not specified (based on Clarke 1866 ellipsoid)',NULL,'EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13429','geodetic_datum','EPSG','6008','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6009','Not specified (based on Clarke 1866 Michigan ellipsoid)',NULL,'EPSG','7009','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13430','geodetic_datum','EPSG','6009','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6010','Not specified (based on Clarke 1880 (Benoit) ellipsoid)',NULL,'EPSG','7010','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13431','geodetic_datum','EPSG','6010','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6011','Not specified (based on Clarke 1880 (IGN) ellipsoid)',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13432','geodetic_datum','EPSG','6011','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6012','Not specified (based on Clarke 1880 (RGS) ellipsoid)',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13433','geodetic_datum','EPSG','6012','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6013','Not specified (based on Clarke 1880 (Arc) ellipsoid)',NULL,'EPSG','7013','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13434','geodetic_datum','EPSG','6013','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6014','Not specified (based on Clarke 1880 (SGA 1922) ellipsoid)',NULL,'EPSG','7014','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13435','geodetic_datum','EPSG','6014','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6015','Not specified (based on Everest 1830 (1937 Adjustment) ellipsoid)',NULL,'EPSG','7015','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13436','geodetic_datum','EPSG','6015','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6016','Not specified (based on Everest 1830 (1967 Definition) ellipsoid)',NULL,'EPSG','7016','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13437','geodetic_datum','EPSG','6016','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6018','Not specified (based on Everest 1830 Modified ellipsoid)',NULL,'EPSG','7018','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13438','geodetic_datum','EPSG','6018','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6019','Not specified (based on GRS 1980 ellipsoid)',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13439','geodetic_datum','EPSG','6019','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6020','Not specified (based on Helmert 1906 ellipsoid)',NULL,'EPSG','7020','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13440','geodetic_datum','EPSG','6020','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6021','Not specified (based on Indonesian National Spheroid)',NULL,'EPSG','7021','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13441','geodetic_datum','EPSG','6021','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6022','Not specified (based on International 1924 ellipsoid)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13442','geodetic_datum','EPSG','6022','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6024','Not specified (based on Krassowsky 1940 ellipsoid)',NULL,'EPSG','7024','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13443','geodetic_datum','EPSG','6024','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6025','Not specified (based on NWL 9D ellipsoid)',NULL,'EPSG','7025','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13444','geodetic_datum','EPSG','6025','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6027','Not specified (based on Plessis 1817 ellipsoid)',NULL,'EPSG','7027','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13445','geodetic_datum','EPSG','6027','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6028','Not specified (based on Struve 1860 ellipsoid)',NULL,'EPSG','7028','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13446','geodetic_datum','EPSG','6028','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6029','Not specified (based on War Office ellipsoid)',NULL,'EPSG','7029','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13447','geodetic_datum','EPSG','6029','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6030','Not specified (based on WGS 84 ellipsoid)',NULL,'EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13448','geodetic_datum','EPSG','6030','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6031','Not specified (based on GEM 10C ellipsoid)',NULL,'EPSG','7031','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13449','geodetic_datum','EPSG','6031','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6032','Not specified (based on OSU86F ellipsoid)',NULL,'EPSG','7032','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13450','geodetic_datum','EPSG','6032','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6033','Not specified (based on OSU91A ellipsoid)',NULL,'EPSG','7033','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13451','geodetic_datum','EPSG','6033','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6034','Not specified (based on Clarke 1880 ellipsoid)',NULL,'EPSG','7034','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13452','geodetic_datum','EPSG','6034','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6035','Not specified (based on Authalic Sphere)',NULL,'EPSG','7035','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13453','geodetic_datum','EPSG','6035','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6036','Not specified (based on GRS 1967 ellipsoid)',NULL,'EPSG','7036','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13454','geodetic_datum','EPSG','6036','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6041','Not specified (based on Average Terrestrial System 1977 ellipsoid)',NULL,'EPSG','7041','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13455','geodetic_datum','EPSG','6041','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6042','Not specified (based on Everest (1830 Definition) ellipsoid)',NULL,'EPSG','7042','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13456','geodetic_datum','EPSG','6042','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6043','Not specified (based on WGS 72 ellipsoid)',NULL,'EPSG','7043','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13457','geodetic_datum','EPSG','6043','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6044','Not specified (based on Everest 1830 (1962 Definition) ellipsoid)',NULL,'EPSG','7044','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13458','geodetic_datum','EPSG','6044','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6045','Not specified (based on Everest 1830 (1975 Definition) ellipsoid)',NULL,'EPSG','7045','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13459','geodetic_datum','EPSG','6045','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6047','Not specified (based on GRS 1980 Authalic Sphere)',NULL,'EPSG','7048','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13460','geodetic_datum','EPSG','6047','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6052','Not specified (based on Clarke 1866 Authalic Sphere)',NULL,'EPSG','7052','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13461','geodetic_datum','EPSG','6052','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6053','Not specified (based on International 1924 Authalic Sphere)',NULL,'EPSG','7057','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13462','geodetic_datum','EPSG','6053','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6054','Not specified (based on Hughes 1980 ellipsoid)',NULL,'EPSG','7058','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13463','geodetic_datum','EPSG','6054','EPSG','1263','EPSG','1213'); INSERT INTO "geodetic_datum" VALUES('EPSG','6055','Popular Visualisation Datum',NULL,'EPSG','7059','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13464','geodetic_datum','EPSG','6055','EPSG','1262','EPSG','1098'); INSERT INTO "geodetic_datum" VALUES('EPSG','6120','Greek',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13465','geodetic_datum','EPSG','6120','EPSG','3254','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6121','Greek Geodetic Reference System 1987',NULL,'EPSG','7019','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13466','geodetic_datum','EPSG','6121','EPSG','3254','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6122','Average Terrestrial System 1977',NULL,'EPSG','7041','EPSG','8901','1977-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13467','geodetic_datum','EPSG','6122','EPSG','1283','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6123','Kartastokoordinaattijarjestelma (1966)',NULL,'EPSG','7022','EPSG','8901','1966-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13468','geodetic_datum','EPSG','6123','EPSG','3333','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6124','Rikets koordinatsystem 1990',NULL,'EPSG','7004','EPSG','8901','1990-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13469','geodetic_datum','EPSG','6124','EPSG','1225','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6125','Samboja',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13470','geodetic_datum','EPSG','6125','EPSG','1328','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6126','Lithuania 1994 (ETRS89)',NULL,'EPSG','7019','EPSG','8901','1992-10-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13471','geodetic_datum','EPSG','6126','EPSG','1145','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6127','Tete',NULL,'EPSG','7008','EPSG','8901','1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13472','geodetic_datum','EPSG','6127','EPSG','3281','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6128','Madzansua',NULL,'EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13473','geodetic_datum','EPSG','6128','EPSG','1315','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6129','Observatario',NULL,'EPSG','7008','EPSG','8901','1907-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13474','geodetic_datum','EPSG','6129','EPSG','1329','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6130','Moznet (ITRF94)',NULL,'EPSG','7030','EPSG','8901','1996-11-24',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13475','geodetic_datum','EPSG','6130','EPSG','1167','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6131','Indian 1960',NULL,'EPSG','7015','EPSG','8901','1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13476','geodetic_datum','EPSG','6131','EPSG','4007','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6132','Final Datum 1958',NULL,'EPSG','7012','EPSG','8901','1958-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13477','geodetic_datum','EPSG','6132','EPSG','1300','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6133','Estonia 1992',NULL,'EPSG','7019','EPSG','8901','1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13478','geodetic_datum','EPSG','6133','EPSG','3246','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6134','PDO Survey Datum 1993',NULL,'EPSG','7012','EPSG','8901','1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13479','geodetic_datum','EPSG','6134','EPSG','3288','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6135','Old Hawaiian',NULL,'EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13480','geodetic_datum','EPSG','6135','EPSG','1334','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6136','St. Lawrence Island',NULL,'EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13481','geodetic_datum','EPSG','6136','EPSG','1332','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6137','St. Paul Island',NULL,'EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13482','geodetic_datum','EPSG','6137','EPSG','1333','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6138','St. George Island',NULL,'EPSG','7008','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13483','geodetic_datum','EPSG','6138','EPSG','1331','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6139','Puerto Rico',NULL,'EPSG','7008','EPSG','8901','1901-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13484','geodetic_datum','EPSG','6139','EPSG','1335','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6140','NAD83 Canadian Spatial Reference System',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13485','geodetic_datum','EPSG','6140','EPSG','1061','EPSG','1189'); INSERT INTO "geodetic_datum" VALUES('EPSG','6141','Israel 1993',NULL,'EPSG','7019','EPSG','8901','1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13486','geodetic_datum','EPSG','6141','EPSG','2603','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6142','Locodjo 1965',NULL,'EPSG','7012','EPSG','8901','1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13487','geodetic_datum','EPSG','6142','EPSG','1075','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6143','Abidjan 1987',NULL,'EPSG','7012','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13488','geodetic_datum','EPSG','6143','EPSG','1075','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6144','Kalianpur 1937',NULL,'EPSG','7015','EPSG','8901','1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13489','geodetic_datum','EPSG','6144','EPSG','1308','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6145','Kalianpur 1962',NULL,'EPSG','7044','EPSG','8901','1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13490','geodetic_datum','EPSG','6145','EPSG','1184','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6146','Kalianpur 1975',NULL,'EPSG','7045','EPSG','8901','1975-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13491','geodetic_datum','EPSG','6146','EPSG','3341','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6147','Hanoi 1972',NULL,'EPSG','7024','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13492','geodetic_datum','EPSG','6147','EPSG','3328','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6148','Hartebeesthoek94',NULL,'EPSG','7030','EPSG','8901','1994-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13493','geodetic_datum','EPSG','6148','EPSG','4540','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6149','CH1903',NULL,'EPSG','7004','EPSG','8901','1903-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13494','geodetic_datum','EPSG','6149','EPSG','1286','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6150','CH1903+',NULL,'EPSG','7004','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13495','geodetic_datum','EPSG','6150','EPSG','1286','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6151','Swiss Terrestrial Reference System 1995',NULL,'EPSG','7019','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13496','geodetic_datum','EPSG','6151','EPSG','1286','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6152','NAD83 (High Accuracy Reference Network)',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13497','geodetic_datum','EPSG','6152','EPSG','1337','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6153','Rassadiran',NULL,'EPSG','7022','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13498','geodetic_datum','EPSG','6153','EPSG','1338','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6154','European Datum 1950(1977)',NULL,'EPSG','7022','EPSG','8901','1977-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13499','geodetic_datum','EPSG','6154','EPSG','1123','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6155','Dabola 1981',NULL,'EPSG','7011','EPSG','8901','1981-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13500','geodetic_datum','EPSG','6155','EPSG','3257','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6156','System of the Unified Trigonometrical Cadastral Network',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13501','geodetic_datum','EPSG','6156','EPSG','1306','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6157','Mount Dillon',NULL,'EPSG','7007','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13502','geodetic_datum','EPSG','6157','EPSG','1322','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6158','Naparima 1955',NULL,'EPSG','7022','EPSG','8901','1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13503','geodetic_datum','EPSG','6158','EPSG','3143','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6159','European Libyan Datum 1979',NULL,'EPSG','7022','EPSG','8901','1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13504','geodetic_datum','EPSG','6159','EPSG','1143','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6160','Chos Malal 1914',NULL,'EPSG','7022','EPSG','8901','1914-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13505','geodetic_datum','EPSG','6160','EPSG','4562','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6161','Pampa del Castillo',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13506','geodetic_datum','EPSG','6161','EPSG','4563','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6162','Korean Datum 1985',NULL,'EPSG','7004','EPSG','8901','1985-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13507','geodetic_datum','EPSG','6162','EPSG','3266','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6163','Yemen National Geodetic Network 1996',NULL,'EPSG','7030','EPSG','8901','1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13508','geodetic_datum','EPSG','6163','EPSG','1257','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6164','South Yemen',NULL,'EPSG','7024','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13509','geodetic_datum','EPSG','6164','EPSG','1340','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6165','Bissau',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13510','geodetic_datum','EPSG','6165','EPSG','3258','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6166','Korean Datum 1995',NULL,'EPSG','7030','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13511','geodetic_datum','EPSG','6166','EPSG','3266','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6167','New Zealand Geodetic Datum 2000',NULL,'EPSG','7019','EPSG','8901','2007-11-16',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13512','geodetic_datum','EPSG','6167','EPSG','1175','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6168','Accra',NULL,'EPSG','7029','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13513','geodetic_datum','EPSG','6168','EPSG','1104','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6169','American Samoa 1962',NULL,'EPSG','7008','EPSG','8901','1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13514','geodetic_datum','EPSG','6169','EPSG','3109','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6170','Sistema de Referencia Geocentrico para America del Sur 1995',NULL,'EPSG','7019','EPSG','8901','1995-05-26',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13515','geodetic_datum','EPSG','6170','EPSG','3448','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6171','Reseau Geodesique Francais 1993 v1',NULL,'EPSG','7019','EPSG','8901','1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13516','geodetic_datum','EPSG','6171','EPSG','1096','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6172','Posiciones Geodesicas Argentinas',NULL,'EPSG','7019','EPSG','8901','1994-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13517','geodetic_datum','EPSG','6172','EPSG','1033','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6173','IRENET95',NULL,'EPSG','7019','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13518','geodetic_datum','EPSG','6173','EPSG','1305','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6174','Sierra Leone Colony 1924',NULL,'EPSG','7029','EPSG','8901','1924-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13519','geodetic_datum','EPSG','6174','EPSG','1342','EPSG','1142'); INSERT INTO "geodetic_datum" VALUES('EPSG','6175','Sierra Leone 1968',NULL,'EPSG','7012','EPSG','8901','1968-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13520','geodetic_datum','EPSG','6175','EPSG','3306','EPSG','1142'); INSERT INTO "geodetic_datum" VALUES('EPSG','6176','Australian Antarctic Datum 1998',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13521','geodetic_datum','EPSG','6176','EPSG','1278','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6178','Pulkovo 1942(83)',NULL,'EPSG','7024','EPSG','8901','1983-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13522','geodetic_datum','EPSG','6178','EPSG','3900','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6179','Pulkovo 1942(58)',NULL,'EPSG','7024','EPSG','8901','1958-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13523','geodetic_datum','EPSG','6179','EPSG','3574','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6180','Estonia 1997',NULL,'EPSG','7019','EPSG','8901','1997-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13524','geodetic_datum','EPSG','6180','EPSG','1090','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6181','Luxembourg Reference Frame',NULL,'EPSG','7022','EPSG','8901','1930-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13525','geodetic_datum','EPSG','6181','EPSG','1146','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6182','Azores Occidental Islands 1939',NULL,'EPSG','7022','EPSG','8901','1939-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13526','geodetic_datum','EPSG','6182','EPSG','1344','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6183','Azores Central Islands 1948',NULL,'EPSG','7022','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13527','geodetic_datum','EPSG','6183','EPSG','1301','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6184','Azores Oriental Islands 1940',NULL,'EPSG','7022','EPSG','8901','1940-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13528','geodetic_datum','EPSG','6184','EPSG','1345','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6185','Madeira 1936',NULL,'EPSG','7022','EPSG','8901','1936-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13529','geodetic_datum','EPSG','6185','EPSG','1314','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6188','OSNI 1952',NULL,'EPSG','7001','EPSG','8901','1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13530','geodetic_datum','EPSG','6188','EPSG','2530','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6189','Red Geodesica Venezolana',NULL,'EPSG','7019','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13531','geodetic_datum','EPSG','6189','EPSG','1251','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6190','Posiciones Geodesicas Argentinas 1998',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13532','geodetic_datum','EPSG','6190','EPSG','1033','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6191','Albanian 1987',NULL,'EPSG','7024','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13533','geodetic_datum','EPSG','6191','EPSG','3212','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6192','Douala 1948',NULL,'EPSG','7022','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13534','geodetic_datum','EPSG','6192','EPSG','2555','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6193','Manoca 1962',NULL,'EPSG','7011','EPSG','8901','1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13535','geodetic_datum','EPSG','6193','EPSG','2555','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6194','Qornoq 1927',NULL,'EPSG','7022','EPSG','8901','1927-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13536','geodetic_datum','EPSG','6194','EPSG','3362','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6195','Scoresbysund 1952',NULL,'EPSG','7022','EPSG','8901','1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13537','geodetic_datum','EPSG','6195','EPSG','2570','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6196','Ammassalik 1958',NULL,'EPSG','7022','EPSG','8901','1958-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13538','geodetic_datum','EPSG','6196','EPSG','2571','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6197','Garoua',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13539','geodetic_datum','EPSG','6197','EPSG','2590','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6198','Kousseri',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13540','geodetic_datum','EPSG','6198','EPSG','2591','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6199','Egypt 1930',NULL,'EPSG','7022','EPSG','8901','1930-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13541','geodetic_datum','EPSG','6199','EPSG','3242','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6200','Pulkovo 1995',NULL,'EPSG','7024','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13542','geodetic_datum','EPSG','6200','EPSG','1198','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6201','Adindan',NULL,'EPSG','7012','EPSG','8901','1958-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13543','geodetic_datum','EPSG','6201','EPSG','1271','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6202','Australian Geodetic Datum 1966',NULL,'EPSG','7003','EPSG','8901','1968-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13544','geodetic_datum','EPSG','6202','EPSG','1279','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6203','Australian Geodetic Datum 1984',NULL,'EPSG','7003','EPSG','8901','1985-12-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13545','geodetic_datum','EPSG','6203','EPSG','2576','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6204','Ain el Abd 1970',NULL,'EPSG','7022','EPSG','8901','1970-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13546','geodetic_datum','EPSG','6204','EPSG','1272','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6205','Afgooye',NULL,'EPSG','7024','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13547','geodetic_datum','EPSG','6205','EPSG','3308','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6206','Agadez',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13548','geodetic_datum','EPSG','6206','EPSG','1177','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6207','Lisbon 1937',NULL,'EPSG','7022','EPSG','8901','1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13549','geodetic_datum','EPSG','6207','EPSG','1294','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6208','Aratu',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13550','geodetic_datum','EPSG','6208','EPSG','1274','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6209','Arc 1950',NULL,'EPSG','7013','EPSG','8901','1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13551','geodetic_datum','EPSG','6209','EPSG','1276','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6210','Arc 1960',NULL,'EPSG','7012','EPSG','8901','1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13552','geodetic_datum','EPSG','6210','EPSG','1277','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6211','Batavia',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13553','geodetic_datum','EPSG','6211','EPSG','3666','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6212','Barbados 1938',NULL,'EPSG','7012','EPSG','8901','1938-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13554','geodetic_datum','EPSG','6212','EPSG','3218','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6213','Beduaram',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13555','geodetic_datum','EPSG','6213','EPSG','2771','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6214','Beijing 1954',NULL,'EPSG','7024','EPSG','8901','1954-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13556','geodetic_datum','EPSG','6214','EPSG','1067','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6215','Reseau National Belge 1950',NULL,'EPSG','7022','EPSG','8901','1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13557','geodetic_datum','EPSG','6215','EPSG','1347','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6216','Bermuda 1957',NULL,'EPSG','7008','EPSG','8901','1957-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13558','geodetic_datum','EPSG','6216','EPSG','3221','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6218','Bogota 1975',NULL,'EPSG','7022','EPSG','8901','1975-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13559','geodetic_datum','EPSG','6218','EPSG','3686','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6219','Bukit Rimpah',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13560','geodetic_datum','EPSG','6219','EPSG','1287','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6220','Camacupa 1948',NULL,'EPSG','7012','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13561','geodetic_datum','EPSG','6220','EPSG','1288','EPSG','1104'); INSERT INTO "geodetic_datum" VALUES('EPSG','6221','Campo Inchauspe',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13562','geodetic_datum','EPSG','6221','EPSG','3843','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6222','Cape',NULL,'EPSG','7013','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13563','geodetic_datum','EPSG','6222','EPSG','1290','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6223','Carthage',NULL,'EPSG','7011','EPSG','8901','1925-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13564','geodetic_datum','EPSG','6223','EPSG','1236','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6224','Chua',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13565','geodetic_datum','EPSG','6224','EPSG','3356','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6225','Corrego Alegre 1970-72',NULL,'EPSG','7022','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13566','geodetic_datum','EPSG','6225','EPSG','1293','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6226','Cote d''Ivoire',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13567','geodetic_datum','EPSG','6226','EPSG','1075','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6227','Deir ez Zor',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13568','geodetic_datum','EPSG','6227','EPSG','1623','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6228','Douala',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13569','geodetic_datum','EPSG','6228','EPSG','1060','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6229','Egypt 1907',NULL,'EPSG','7020','EPSG','8901','1907-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13570','geodetic_datum','EPSG','6229','EPSG','1086','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6230','European Datum 1950',NULL,'EPSG','7022','EPSG','8901','1950-06-30',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13571','geodetic_datum','EPSG','6230','EPSG','1296','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6231','European Datum 1987',NULL,'EPSG','7022','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13572','geodetic_datum','EPSG','6231','EPSG','1297','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6232','Fahud',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13573','geodetic_datum','EPSG','6232','EPSG','4009','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6233','Gandajika 1970',NULL,'EPSG','7022','EPSG','8901','1970-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13574','geodetic_datum','EPSG','6233','EPSG','1152','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6234','Garoua',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13575','geodetic_datum','EPSG','6234','EPSG','1060','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6235','Guyane Francaise',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13576','geodetic_datum','EPSG','6235','EPSG','1097','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6236','Hu Tzu Shan 1950',NULL,'EPSG','7022','EPSG','8901','1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13577','geodetic_datum','EPSG','6236','EPSG','3315','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6237','Hungarian Datum 1972',NULL,'EPSG','7036','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13578','geodetic_datum','EPSG','6237','EPSG','1119','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6238','Indonesian Datum 1974',NULL,'EPSG','7021','EPSG','8901','1974-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13579','geodetic_datum','EPSG','6238','EPSG','4020','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6239','Indian 1954',NULL,'EPSG','7015','EPSG','8901','1954-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13580','geodetic_datum','EPSG','6239','EPSG','1304','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6240','Indian 1975',NULL,'EPSG','7015','EPSG','8901','1975-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13581','geodetic_datum','EPSG','6240','EPSG','3741','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6241','Jamaica 1875',NULL,'EPSG','7034','EPSG','8901','1875-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13582','geodetic_datum','EPSG','6241','EPSG','3342','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6242','Jamaica 1969',NULL,'EPSG','7008','EPSG','8901','1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13583','geodetic_datum','EPSG','6242','EPSG','3342','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6243','Kalianpur 1880',NULL,'EPSG','7042','EPSG','8901','1880-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13584','geodetic_datum','EPSG','6243','EPSG','1307','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6244','Kandawala',NULL,'EPSG','7015','EPSG','8901','1930-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13585','geodetic_datum','EPSG','6244','EPSG','3310','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6245','Kertau 1968',NULL,'EPSG','7018','EPSG','8901','1968-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13586','geodetic_datum','EPSG','6245','EPSG','4223','EPSG','1185'); INSERT INTO "geodetic_datum" VALUES('EPSG','6246','Kuwait Oil Company',NULL,'EPSG','7012','EPSG','8901','1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13587','geodetic_datum','EPSG','6246','EPSG','3267','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6247','La Canoa',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13588','geodetic_datum','EPSG','6247','EPSG','3327','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6248','Provisional South American Datum 1956',NULL,'EPSG','7022','EPSG','8901','1956-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13589','geodetic_datum','EPSG','6248','EPSG','1348','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6249','Lake',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13590','geodetic_datum','EPSG','6249','EPSG','1312','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6250','Leigon',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13591','geodetic_datum','EPSG','6250','EPSG','1104','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6251','Liberia 1964',NULL,'EPSG','7012','EPSG','8901','1964-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13592','geodetic_datum','EPSG','6251','EPSG','3270','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6252','Lome',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13593','geodetic_datum','EPSG','6252','EPSG','1232','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6253','Luzon 1911',NULL,'EPSG','7008','EPSG','8901','1911-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13594','geodetic_datum','EPSG','6253','EPSG','3969','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6254','Hito XVIII 1963',NULL,'EPSG','7022','EPSG','8901','1963-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13595','geodetic_datum','EPSG','6254','EPSG','1303','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6255','Herat North',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13596','geodetic_datum','EPSG','6255','EPSG','1024','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6256','Mahe 1971',NULL,'EPSG','7012','EPSG','8901','1971-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13597','geodetic_datum','EPSG','6256','EPSG','2369','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6257','Makassar',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13598','geodetic_datum','EPSG','6257','EPSG','1316','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6259','Malongo 1987',NULL,'EPSG','7022','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13600','geodetic_datum','EPSG','6259','EPSG','3180','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','6260','Manoca',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13601','geodetic_datum','EPSG','6260','EPSG','1060','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6261','Merchich',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13602','geodetic_datum','EPSG','6261','EPSG','4581','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6262','Massawa',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13603','geodetic_datum','EPSG','6262','EPSG','1089','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6263','Minna',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13604','geodetic_datum','EPSG','6263','EPSG','1178','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6264','Mhast',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13605','geodetic_datum','EPSG','6264','EPSG','1318','EPSG','1103'); INSERT INTO "geodetic_datum" VALUES('EPSG','6265','Monte Mario',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13606','geodetic_datum','EPSG','6265','EPSG','3343','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6266','M''poraloko',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13607','geodetic_datum','EPSG','6266','EPSG','1100','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6267','North American Datum 1927',NULL,'EPSG','7008','EPSG','8901','1927-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13608','geodetic_datum','EPSG','6267','EPSG','1349','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6268','NAD27 Michigan',NULL,'EPSG','7009','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13609','geodetic_datum','EPSG','6268','EPSG','1391','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6269','North American Datum 1983',NULL,'EPSG','7019','EPSG','8901','1986-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13610','geodetic_datum','EPSG','6269','EPSG','1350','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6270','Nahrwan 1967',NULL,'EPSG','7012','EPSG','8901','1967-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13611','geodetic_datum','EPSG','6270','EPSG','1351','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6271','Naparima 1972',NULL,'EPSG','7022','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13612','geodetic_datum','EPSG','6271','EPSG','1322','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6272','New Zealand Geodetic Datum 1949',NULL,'EPSG','7022','EPSG','8901','1949-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13613','geodetic_datum','EPSG','6272','EPSG','3285','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6273','NGO 1948',NULL,'EPSG','7005','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13614','geodetic_datum','EPSG','6273','EPSG','1352','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6274','Datum 73',NULL,'EPSG','7022','EPSG','8901','1974-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13615','geodetic_datum','EPSG','6274','EPSG','1294','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6275','Nouvelle Triangulation Francaise',NULL,'EPSG','7011','EPSG','8901','1895-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13616','geodetic_datum','EPSG','6275','EPSG','3694','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6276','NSWC 9Z-2',NULL,'EPSG','7025','EPSG','8901','1976-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13617','geodetic_datum','EPSG','6276','EPSG','1262','EPSG','1245'); INSERT INTO "geodetic_datum" VALUES('EPSG','6277','Ordnance Survey of Great Britain 1936',NULL,'EPSG','7001','EPSG','8901','1936-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13618','geodetic_datum','EPSG','6277','EPSG','4390','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6278','OSGB 1970 (SN)',NULL,'EPSG','7001','EPSG','8901','1970-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13619','geodetic_datum','EPSG','6278','EPSG','1264','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6279','OS (SN) 1980',NULL,'EPSG','7001','EPSG','8901','1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13620','geodetic_datum','EPSG','6279','EPSG','1354','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6280','Padang 1884',NULL,'EPSG','7004','EPSG','8901','1884-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13621','geodetic_datum','EPSG','6280','EPSG','1355','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6281','Palestine 1923',NULL,'EPSG','7010','EPSG','8901','1923-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13622','geodetic_datum','EPSG','6281','EPSG','1356','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6282','Congo 1960 Pointe Noire',NULL,'EPSG','7011','EPSG','8901','1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13623','geodetic_datum','EPSG','6282','EPSG','1072','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6283','Geocentric Datum of Australia 1994',NULL,'EPSG','7019','EPSG','8901','1994-01-14',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13624','geodetic_datum','EPSG','6283','EPSG','4177','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6284','Pulkovo 1942',NULL,'EPSG','7024','EPSG','8901','1942-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13625','geodetic_datum','EPSG','6284','EPSG','2423','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6285','Qatar 1974',NULL,'EPSG','7022','EPSG','8901','1974-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13626','geodetic_datum','EPSG','6285','EPSG','1195','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6286','Qatar 1948',NULL,'EPSG','7020','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13627','geodetic_datum','EPSG','6286','EPSG','1346','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6287','Qornoq',NULL,'EPSG','7022','EPSG','8901','1927-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13628','geodetic_datum','EPSG','6287','EPSG','1107','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6288','Loma Quintana',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13629','geodetic_datum','EPSG','6288','EPSG','1313','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6289','Amersfoort',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13630','geodetic_datum','EPSG','6289','EPSG','1275','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6291','South American Datum 1969',NULL,'EPSG','7036','EPSG','8901','1969-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13631','geodetic_datum','EPSG','6291','EPSG','1358','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6292','Sapper Hill 1943',NULL,'EPSG','7022','EPSG','8901','1943-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13632','geodetic_datum','EPSG','6292','EPSG','3247','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6293','Schwarzeck',NULL,'EPSG','7046','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13633','geodetic_datum','EPSG','6293','EPSG','1169','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6294','Segora',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13634','geodetic_datum','EPSG','6294','EPSG','1359','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6295','Serindung',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13635','geodetic_datum','EPSG','6295','EPSG','4005','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6296','Sudan',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13636','geodetic_datum','EPSG','6296','EPSG','1361','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6297','Tananarive 1925',NULL,'EPSG','7022','EPSG','8901','1925-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13637','geodetic_datum','EPSG','6297','EPSG','1149','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6298','Timbalai 1948',NULL,'EPSG','7016','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13638','geodetic_datum','EPSG','6298','EPSG','1362','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6299','TM65',NULL,'EPSG','7002','EPSG','8901','1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13639','geodetic_datum','EPSG','6299','EPSG','1305','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6300','Geodetic Datum of 1965',NULL,'EPSG','7002','EPSG','8901','1975-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13640','geodetic_datum','EPSG','6300','EPSG','1305','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6301','Tokyo',NULL,'EPSG','7004','EPSG','8901','1918-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13641','geodetic_datum','EPSG','6301','EPSG','1364','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6302','Trinidad 1903',NULL,'EPSG','7007','EPSG','8901','1903-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13642','geodetic_datum','EPSG','6302','EPSG','1339','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6303','Trucial Coast 1948',NULL,'EPSG','7020','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13643','geodetic_datum','EPSG','6303','EPSG','1363','EPSG','1216'); INSERT INTO "geodetic_datum" VALUES('EPSG','6304','Voirol 1875',NULL,'EPSG','7011','EPSG','8901','1875-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13644','geodetic_datum','EPSG','6304','EPSG','1365','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6306','Bern 1938',NULL,'EPSG','7004','EPSG','8901','1938-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13645','geodetic_datum','EPSG','6306','EPSG','1286','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6307','Nord Sahara 1959',NULL,'EPSG','7012','EPSG','8901','1959-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13646','geodetic_datum','EPSG','6307','EPSG','1026','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6308','Stockholm 1938',NULL,'EPSG','7004','EPSG','8901','1938-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13647','geodetic_datum','EPSG','6308','EPSG','3313','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6309','Yacare',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13648','geodetic_datum','EPSG','6309','EPSG','3326','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6310','Yoff',NULL,'EPSG','7011','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13649','geodetic_datum','EPSG','6310','EPSG','1207','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6311','Zanderij',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13650','geodetic_datum','EPSG','6311','EPSG','1222','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6312','Militar-Geographische Institut',NULL,'EPSG','7004','EPSG','8901','1901-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13651','geodetic_datum','EPSG','6312','EPSG','1037','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6313','Reseau National Belge 1972',NULL,'EPSG','7022','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13652','geodetic_datum','EPSG','6313','EPSG','1347','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6314','Deutsches Hauptdreiecksnetz',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13653','geodetic_datum','EPSG','6314','EPSG','2326','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6315','Conakry 1905',NULL,'EPSG','7011','EPSG','8901','1905-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13654','geodetic_datum','EPSG','6315','EPSG','3257','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6316','Dealul Piscului 1930',NULL,'EPSG','7022','EPSG','8901','1930-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13655','geodetic_datum','EPSG','6316','EPSG','3295','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6317','Dealul Piscului 1970',NULL,'EPSG','7024','EPSG','8901','1970-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13656','geodetic_datum','EPSG','6317','EPSG','1197','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6318','National Geodetic Network',NULL,'EPSG','7030','EPSG','8901','1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13657','geodetic_datum','EPSG','6318','EPSG','3267','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6319','Kuwait Utility',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13658','geodetic_datum','EPSG','6319','EPSG','1310','EPSG','1054'); INSERT INTO "geodetic_datum" VALUES('EPSG','6322','World Geodetic System 1972',NULL,'EPSG','7043','EPSG','8901','1972-01-01',1972.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13659','geodetic_datum','EPSG','6322','EPSG','1262','EPSG','1245'); INSERT INTO "geodetic_datum" VALUES('EPSG','6324','WGS 72 Transit Broadcast Ephemeris',NULL,'EPSG','7043','EPSG','8901','1972-01-01',1972.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13660','geodetic_datum','EPSG','6324','EPSG','1262','EPSG','1245'); INSERT INTO "geodetic_datum" VALUES('EPSG','6600','Anguilla 1957',NULL,'EPSG','7012','EPSG','8901','1957-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13662','geodetic_datum','EPSG','6600','EPSG','3214','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6601','Antigua 1943',NULL,'EPSG','7012','EPSG','8901','1943-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13663','geodetic_datum','EPSG','6601','EPSG','1273','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6602','Dominica 1945',NULL,'EPSG','7012','EPSG','8901','1945-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13664','geodetic_datum','EPSG','6602','EPSG','3239','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6603','Grenada 1953',NULL,'EPSG','7012','EPSG','8901','1953-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13665','geodetic_datum','EPSG','6603','EPSG','1551','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6604','Montserrat 1958',NULL,'EPSG','7012','EPSG','8901','1958-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13666','geodetic_datum','EPSG','6604','EPSG','3279','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6605','St. Kitts 1955',NULL,'EPSG','7012','EPSG','8901','1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13667','geodetic_datum','EPSG','6605','EPSG','3297','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6606','St. Lucia 1955',NULL,'EPSG','7012','EPSG','8901','1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13668','geodetic_datum','EPSG','6606','EPSG','3298','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6607','St. Vincent 1945',NULL,'EPSG','7012','EPSG','8901','1945-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13669','geodetic_datum','EPSG','6607','EPSG','3300','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6608','North American Datum 1927 (1976)',NULL,'EPSG','7008','EPSG','8901','1975-05-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13670','geodetic_datum','EPSG','6608','EPSG','1367','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6609','North American Datum 1927 (CGQ77)',NULL,'EPSG','7008','EPSG','8901','1977-05-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13671','geodetic_datum','EPSG','6609','EPSG','1368','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6610','Xian 1980',NULL,'EPSG','7049','EPSG','8901','1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13672','geodetic_datum','EPSG','6610','EPSG','3228','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6611','Hong Kong 1980',NULL,'EPSG','7022','EPSG','8901','1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13673','geodetic_datum','EPSG','6611','EPSG','1118','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6612','Japanese Geodetic Datum 2000',NULL,'EPSG','7019','EPSG','8901','2002-04-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13674','geodetic_datum','EPSG','6612','EPSG','1129','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6613','Gunung Segara',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13675','geodetic_datum','EPSG','6613','EPSG','1360','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6614','Qatar National Datum 1995',NULL,'EPSG','7022','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13676','geodetic_datum','EPSG','6614','EPSG','1346','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6615','Porto Santo 1936',NULL,'EPSG','7022','EPSG','8901','1936-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13677','geodetic_datum','EPSG','6615','EPSG','1314','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6616','Selvagem Grande',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13678','geodetic_datum','EPSG','6616','EPSG','2779','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6618','South American Datum 1969',NULL,'EPSG','7050','EPSG','8901','1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13679','geodetic_datum','EPSG','6618','EPSG','1358','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6619','SWEREF99',NULL,'EPSG','7019','EPSG','8901','1999-06-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13680','geodetic_datum','EPSG','6619','EPSG','1225','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6620','Point 58',NULL,'EPSG','7012','EPSG','8901','1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13681','geodetic_datum','EPSG','6620','EPSG','2790','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6621','Fort Marigot',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13682','geodetic_datum','EPSG','6621','EPSG','2828','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6622','Guadeloupe 1948',NULL,'EPSG','7022','EPSG','8901','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13683','geodetic_datum','EPSG','6622','EPSG','2829','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6623','Centre Spatial Guyanais 1967',NULL,'EPSG','7022','EPSG','8901','1967-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13684','geodetic_datum','EPSG','6623','EPSG','3105','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6624','Reseau Geodesique Francais Guyane 1995',NULL,'EPSG','7019','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13685','geodetic_datum','EPSG','6624','EPSG','1097','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6625','Martinique 1938',NULL,'EPSG','7022','EPSG','8901','1938-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13686','geodetic_datum','EPSG','6625','EPSG','3276','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6626','Reunion 1947',NULL,'EPSG','7022','EPSG','8901','1947-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13687','geodetic_datum','EPSG','6626','EPSG','3337','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6627','Reseau Geodesique de la Reunion 1992',NULL,'EPSG','7019','EPSG','8901','1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13688','geodetic_datum','EPSG','6627','EPSG','3902','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6628','Tahiti 52',NULL,'EPSG','7022','EPSG','8901','1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13689','geodetic_datum','EPSG','6628','EPSG','2811','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6629','Tahaa 54',NULL,'EPSG','7022','EPSG','8901','1954-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13690','geodetic_datum','EPSG','6629','EPSG','2812','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6630','IGN72 Nuku Hiva',NULL,'EPSG','7022','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13691','geodetic_datum','EPSG','6630','EPSG','3129','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6631','K0 1949',NULL,'EPSG','7022','EPSG','8901','1949-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13692','geodetic_datum','EPSG','6631','EPSG','2816','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6632','Combani 1950',NULL,'EPSG','7022','EPSG','8901','1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13693','geodetic_datum','EPSG','6632','EPSG','3340','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6633','IGN56 Lifou',NULL,'EPSG','7022','EPSG','8901','1956-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13694','geodetic_datum','EPSG','6633','EPSG','2814','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6634','IGN72 Grande Terre',NULL,'EPSG','7022','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13695','geodetic_datum','EPSG','6634','EPSG','2822','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6635','ST87 Ouvea',NULL,'EPSG','7022','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13696','geodetic_datum','EPSG','6635','EPSG','2813','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6636','Petrels 1972',NULL,'EPSG','7022','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13697','geodetic_datum','EPSG','6636','EPSG','2817','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6637','Pointe Geologie Perroud 1950',NULL,'EPSG','7022','EPSG','8901','1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13698','geodetic_datum','EPSG','6637','EPSG','2818','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6638','Saint Pierre et Miquelon 1950',NULL,'EPSG','7008','EPSG','8901','1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13699','geodetic_datum','EPSG','6638','EPSG','3299','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6639','MOP78',NULL,'EPSG','7022','EPSG','8901','1978-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13700','geodetic_datum','EPSG','6639','EPSG','2815','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6640','Reseau de Reference des Antilles Francaises 1991',NULL,'EPSG','7030','EPSG','8901','1991-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13701','geodetic_datum','EPSG','6640','EPSG','2824','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6641','IGN53 Mare',NULL,'EPSG','7022','EPSG','8901','1953-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13702','geodetic_datum','EPSG','6641','EPSG','2819','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6642','ST84 Ile des Pins',NULL,'EPSG','7022','EPSG','8901','1984-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13703','geodetic_datum','EPSG','6642','EPSG','2820','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6643','ST71 Belep',NULL,'EPSG','7022','EPSG','8901','1971-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13704','geodetic_datum','EPSG','6643','EPSG','2821','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6644','NEA74 Noumea',NULL,'EPSG','7022','EPSG','8901','1974-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13705','geodetic_datum','EPSG','6644','EPSG','2823','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6645','Reseau Geodesique Nouvelle Caledonie 1991',NULL,'EPSG','7022','EPSG','8901','1991-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13706','geodetic_datum','EPSG','6645','EPSG','1174','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6646','Grand Comoros',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13707','geodetic_datum','EPSG','6646','EPSG','2807','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6647','International Terrestrial Reference Frame 1988',NULL,'EPSG','7019','EPSG','8901','1988-01-01',1988.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13708','geodetic_datum','EPSG','6647','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6648','International Terrestrial Reference Frame 1989',NULL,'EPSG','7019','EPSG','8901','1988-01-01',1988.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13709','geodetic_datum','EPSG','6648','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6649','International Terrestrial Reference Frame 1990',NULL,'EPSG','7019','EPSG','8901','1988-01-01',1988.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13710','geodetic_datum','EPSG','6649','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6650','International Terrestrial Reference Frame 1991',NULL,'EPSG','7019','EPSG','8901','1988-01-01',1988.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13711','geodetic_datum','EPSG','6650','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6651','International Terrestrial Reference Frame 1992',NULL,'EPSG','7019','EPSG','8901','1988-01-01',1988.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13712','geodetic_datum','EPSG','6651','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6652','International Terrestrial Reference Frame 1993',NULL,'EPSG','7019','EPSG','8901','1993-01-01',1993.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13713','geodetic_datum','EPSG','6652','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6653','International Terrestrial Reference Frame 1994',NULL,'EPSG','7019','EPSG','8901','1993-01-01',1993.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13714','geodetic_datum','EPSG','6653','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6654','International Terrestrial Reference Frame 1996',NULL,'EPSG','7019','EPSG','8901','1997-01-01',1997.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13715','geodetic_datum','EPSG','6654','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6655','International Terrestrial Reference Frame 1997',NULL,'EPSG','7019','EPSG','8901','1997-01-01',1997.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13716','geodetic_datum','EPSG','6655','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6656','International Terrestrial Reference Frame 2000',NULL,'EPSG','7019','EPSG','8901','1997-01-01',1997.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13717','geodetic_datum','EPSG','6656','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6657','Reykjavik 1900',NULL,'EPSG','7051','EPSG','8901','1900-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13718','geodetic_datum','EPSG','6657','EPSG','3262','EPSG','1211'); INSERT INTO "geodetic_datum" VALUES('EPSG','6658','Hjorsey 1955',NULL,'EPSG','7022','EPSG','8901','1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13719','geodetic_datum','EPSG','6658','EPSG','3262','EPSG','1062'); INSERT INTO "geodetic_datum" VALUES('EPSG','6659','Islands Net 1993',NULL,'EPSG','7019','EPSG','8901','1993-08-07',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13720','geodetic_datum','EPSG','6659','EPSG','1120','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6660','Helle 1954',NULL,'EPSG','7022','EPSG','8901','1954-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13721','geodetic_datum','EPSG','6660','EPSG','2869','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6661','Latvian geodetic coordinate system 1992',NULL,'EPSG','7019','EPSG','8901','1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13722','geodetic_datum','EPSG','6661','EPSG','1139','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6663','Porto Santo 1995',NULL,'EPSG','7022','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13723','geodetic_datum','EPSG','6663','EPSG','1314','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6664','Azores Oriental Islands 1995',NULL,'EPSG','7022','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13724','geodetic_datum','EPSG','6664','EPSG','1345','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6665','Azores Central Islands 1995',NULL,'EPSG','7022','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13725','geodetic_datum','EPSG','6665','EPSG','1301','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6666','Lisbon 1890',NULL,'EPSG','7004','EPSG','8901','1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13726','geodetic_datum','EPSG','6666','EPSG','1294','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6667','Iraq-Kuwait Boundary Datum 1992',NULL,'EPSG','7030','EPSG','8901','1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13727','geodetic_datum','EPSG','6667','EPSG','2876','EPSG','1053'); INSERT INTO "geodetic_datum" VALUES('EPSG','6668','European Datum 1979',NULL,'EPSG','7022','EPSG','8901','1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13728','geodetic_datum','EPSG','6668','EPSG','1297','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6670','Istituto Geografico Militaire 1995',NULL,'EPSG','7019','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14401','geodetic_datum','EPSG','6670','EPSG','3343','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6671','Voirol 1879',NULL,'EPSG','7011','EPSG','8901','1879-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13730','geodetic_datum','EPSG','6671','EPSG','1365','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6672','Chatham Islands Datum 1971',NULL,'EPSG','7022','EPSG','8901','1971-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13731','geodetic_datum','EPSG','6672','EPSG','2889','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6673','Chatham Islands Datum 1979',NULL,'EPSG','7022','EPSG','8901','1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13732','geodetic_datum','EPSG','6673','EPSG','2889','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6674','Sistema de Referencia Geocentrico para las AmericaS 2000',NULL,'EPSG','7019','EPSG','8901','2000-05-26',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13733','geodetic_datum','EPSG','6674','EPSG','3418','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6675','Guam 1963',NULL,'EPSG','7008','EPSG','8901','1963-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13734','geodetic_datum','EPSG','6675','EPSG','4525','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6676','Vientiane 1982',NULL,'EPSG','7024','EPSG','8901','1982-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13735','geodetic_datum','EPSG','6676','EPSG','1138','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6677','Lao 1993',NULL,'EPSG','7024','EPSG','8901','1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13736','geodetic_datum','EPSG','6677','EPSG','1138','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6678','Lao National Datum 1997',NULL,'EPSG','7024','EPSG','8901','1997-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13737','geodetic_datum','EPSG','6678','EPSG','1138','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','6679','Jouik 1961',NULL,'EPSG','7012','EPSG','8901','1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13738','geodetic_datum','EPSG','6679','EPSG','2967','EPSG','1198'); INSERT INTO "geodetic_datum" VALUES('EPSG','6680','Nouakchott 1965',NULL,'EPSG','7012','EPSG','8901','1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13739','geodetic_datum','EPSG','6680','EPSG','2968','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6681','Mauritania 1999',NULL,'EPSG','7012','EPSG','8901','1999-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13740','geodetic_datum','EPSG','6681','EPSG','1157','EPSG','1249'); INSERT INTO "geodetic_datum" VALUES('EPSG','6682','Gulshan 303',NULL,'EPSG','7015','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13741','geodetic_datum','EPSG','6682','EPSG','1041','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6683','Philippine Reference System 1992',NULL,'EPSG','7008','EPSG','8901','1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13742','geodetic_datum','EPSG','6683','EPSG','1190','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6684','Gan 1970',NULL,'EPSG','7022','EPSG','8901','1970-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13743','geodetic_datum','EPSG','6684','EPSG','3274','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6685','Gandajika',NULL,'EPSG','7022','EPSG','8901','1953-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13744','geodetic_datum','EPSG','6685','EPSG','1259','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6686','Marco Geocentrico Nacional de Referencia',NULL,'EPSG','7019','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13745','geodetic_datum','EPSG','6686','EPSG','1070','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6687','Reseau Geodesique de la Polynesie Francaise',NULL,'EPSG','7019','EPSG','8901','1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13746','geodetic_datum','EPSG','6687','EPSG','1098','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6688','Fatu Iva 72',NULL,'EPSG','7022','EPSG','8901','1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13747','geodetic_datum','EPSG','6688','EPSG','3133','EPSG','1201'); INSERT INTO "geodetic_datum" VALUES('EPSG','6689','IGN63 Hiva Oa',NULL,'EPSG','7022','EPSG','8901','1963-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13748','geodetic_datum','EPSG','6689','EPSG','3130','EPSG','1201'); INSERT INTO "geodetic_datum" VALUES('EPSG','6690','Tahiti 79',NULL,'EPSG','7022','EPSG','8901','1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13749','geodetic_datum','EPSG','6690','EPSG','3124','EPSG','1201'); INSERT INTO "geodetic_datum" VALUES('EPSG','6691','Moorea 87',NULL,'EPSG','7022','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13750','geodetic_datum','EPSG','6691','EPSG','3125','EPSG','1201'); INSERT INTO "geodetic_datum" VALUES('EPSG','6692','Maupiti 83',NULL,'EPSG','7022','EPSG','8901','1983-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13751','geodetic_datum','EPSG','6692','EPSG','3126','EPSG','1201'); INSERT INTO "geodetic_datum" VALUES('EPSG','6693','Nakhl-e Ghanem',NULL,'EPSG','7030','EPSG','8901','2005-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13752','geodetic_datum','EPSG','6693','EPSG','2362','EPSG','1140'); INSERT INTO "geodetic_datum" VALUES('EPSG','6694','Posiciones Geodesicas Argentinas 1994',NULL,'EPSG','7030','EPSG','8901','1994-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18565','geodetic_datum','EPSG','6694','EPSG','1033','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6695','Katanga 1955',NULL,'EPSG','7008','EPSG','8901','1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13754','geodetic_datum','EPSG','6695','EPSG','3147','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','6696','Kasai 1953',NULL,'EPSG','7012','EPSG','8901','1953-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13755','geodetic_datum','EPSG','6696','EPSG','3148','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','6697','IGC 1962 Arc of the 6th Parallel South',NULL,'EPSG','7012','EPSG','8901','1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13756','geodetic_datum','EPSG','6697','EPSG','3149','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6698','IGN 1962 Kerguelen',NULL,'EPSG','7022','EPSG','8901','1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13757','geodetic_datum','EPSG','6698','EPSG','2816','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6699','Le Pouce 1934',NULL,'EPSG','7012','EPSG','8901','1934-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13758','geodetic_datum','EPSG','6699','EPSG','3209','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6700','IGN Astro 1960',NULL,'EPSG','7012','EPSG','8901','1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13759','geodetic_datum','EPSG','6700','EPSG','3277','EPSG','1241'); INSERT INTO "geodetic_datum" VALUES('EPSG','6701','Institut Geographique du Congo Belge 1955',NULL,'EPSG','7012','EPSG','8901','1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13760','geodetic_datum','EPSG','6701','EPSG','3171','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','6702','Mauritania 1999',NULL,'EPSG','7019','EPSG','8901','1999-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13761','geodetic_datum','EPSG','6702','EPSG','1157','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6703','Missao Hidrografico Angola y Sao Tome 1951',NULL,'EPSG','7012','EPSG','8901','1951-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13762','geodetic_datum','EPSG','6703','EPSG','1318','EPSG','1103'); INSERT INTO "geodetic_datum" VALUES('EPSG','6704','Mhast (onshore)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13763','geodetic_datum','EPSG','6704','EPSG','3179','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','6705','Mhast (offshore)',NULL,'EPSG','7022','EPSG','8901','1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13764','geodetic_datum','EPSG','6705','EPSG','3180','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','6706','Egypt Gulf of Suez S-650 TL',NULL,'EPSG','7020','EPSG','8901','1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13765','geodetic_datum','EPSG','6706','EPSG','2341','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','6707','Tern Island 1961',NULL,'EPSG','7022','EPSG','8901','1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13766','geodetic_datum','EPSG','6707','EPSG','3181','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6708','Cocos Islands 1965',NULL,'EPSG','7003','EPSG','8901','1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13767','geodetic_datum','EPSG','6708','EPSG','1069','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6709','Iwo Jima 1945',NULL,'EPSG','7022','EPSG','8901','1945-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13768','geodetic_datum','EPSG','6709','EPSG','3200','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6710','Astro DOS 71',NULL,'EPSG','7022','EPSG','8901','1971-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13769','geodetic_datum','EPSG','6710','EPSG','3183','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6711','Marcus Island 1952',NULL,'EPSG','7022','EPSG','8901','1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13770','geodetic_datum','EPSG','6711','EPSG','1872','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6712','Ascension Island 1958',NULL,'EPSG','7022','EPSG','8901','1958-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13771','geodetic_datum','EPSG','6712','EPSG','3182','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6713','Ayabelle Lighthouse',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13772','geodetic_datum','EPSG','6713','EPSG','1081','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6714','Bellevue',NULL,'EPSG','7022','EPSG','8901','1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13773','geodetic_datum','EPSG','6714','EPSG','3193','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6715','Camp Area Astro',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13774','geodetic_datum','EPSG','6715','EPSG','3205','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6716','Phoenix Islands 1966',NULL,'EPSG','7022','EPSG','8901','1966-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13775','geodetic_datum','EPSG','6716','EPSG','3196','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6717','Cape Canaveral',NULL,'EPSG','7008','EPSG','8901','1963-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13776','geodetic_datum','EPSG','6717','EPSG','3206','EPSG','1233'); INSERT INTO "geodetic_datum" VALUES('EPSG','6718','Solomon 1968',NULL,'EPSG','7022','EPSG','8901','1968-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13777','geodetic_datum','EPSG','6718','EPSG','1213','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6719','Easter Island 1967',NULL,'EPSG','7022','EPSG','8901','1967-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13778','geodetic_datum','EPSG','6719','EPSG','3188','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6720','Fiji Geodetic Datum 1986',NULL,'EPSG','7043','EPSG','8901','1986-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13779','geodetic_datum','EPSG','6720','EPSG','1094','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6721','Fiji 1956',NULL,'EPSG','7022','EPSG','8901','1956-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13780','geodetic_datum','EPSG','6721','EPSG','3398','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6722','South Georgia 1968',NULL,'EPSG','7022','EPSG','8901','1968-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13781','geodetic_datum','EPSG','6722','EPSG','3529','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6723','Grand Cayman Geodetic Datum 1959',NULL,'EPSG','7008','EPSG','8901','1959-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13782','geodetic_datum','EPSG','6723','EPSG','3185','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6724','Diego Garcia 1969',NULL,'EPSG','7022','EPSG','8901','1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13783','geodetic_datum','EPSG','6724','EPSG','3189','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6725','Johnston Island 1961',NULL,'EPSG','7022','EPSG','8901','1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13784','geodetic_datum','EPSG','6725','EPSG','3201','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6726','Sister Islands Geodetic Datum 1961',NULL,'EPSG','7008','EPSG','8901','1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13785','geodetic_datum','EPSG','6726','EPSG','3186','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6727','Midway 1961',NULL,'EPSG','7022','EPSG','8901','1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13786','geodetic_datum','EPSG','6727','EPSG','3202','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6728','Pico de las Nieves 1984',NULL,'EPSG','7022','EPSG','8901','1984-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13787','geodetic_datum','EPSG','6728','EPSG','4598','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6729','Pitcairn 1967',NULL,'EPSG','7022','EPSG','8901','1967-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13788','geodetic_datum','EPSG','6729','EPSG','3208','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6730','Santo 1965',NULL,'EPSG','7022','EPSG','8901','1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13789','geodetic_datum','EPSG','6730','EPSG','3194','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6731','Viti Levu 1916',NULL,'EPSG','7012','EPSG','8901','1916-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13790','geodetic_datum','EPSG','6731','EPSG','3195','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6732','Marshall Islands 1960',NULL,'EPSG','7053','EPSG','8901','1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13791','geodetic_datum','EPSG','6732','EPSG','3191','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6733','Wake Island 1952',NULL,'EPSG','7022','EPSG','8901','1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13792','geodetic_datum','EPSG','6733','EPSG','3190','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6734','Tristan 1968',NULL,'EPSG','7022','EPSG','8901','1968-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13793','geodetic_datum','EPSG','6734','EPSG','3184','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6735','Kusaie 1951',NULL,'EPSG','7022','EPSG','8901','1951-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13794','geodetic_datum','EPSG','6735','EPSG','3192','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6736','Deception Island',NULL,'EPSG','7012','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13795','geodetic_datum','EPSG','6736','EPSG','3204','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6737','Korean Geodetic Datum 2002',NULL,'EPSG','7019','EPSG','8901','2002-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13796','geodetic_datum','EPSG','6737','EPSG','1135','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6738','Hong Kong 1963',NULL,'EPSG','7007','EPSG','8901','1963-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13797','geodetic_datum','EPSG','6738','EPSG','1118','EPSG','1201'); INSERT INTO "geodetic_datum" VALUES('EPSG','6739','Hong Kong 1963(67)',NULL,'EPSG','7022','EPSG','8901','1967-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13798','geodetic_datum','EPSG','6739','EPSG','1118','EPSG','1160'); INSERT INTO "geodetic_datum" VALUES('EPSG','6740','Parametry Zemli 1990',NULL,'EPSG','7054','EPSG','8901','1990-01-01',1990.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13799','geodetic_datum','EPSG','6740','EPSG','1262','EPSG','1177'); INSERT INTO "geodetic_datum" VALUES('EPSG','6741','Faroe Datum 1954',NULL,'EPSG','7022','EPSG','8901','1954-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13800','geodetic_datum','EPSG','6741','EPSG','3248','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6742','Geodetic Datum of Malaysia 2000',NULL,'EPSG','7019','EPSG','8901','2003-08-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13801','geodetic_datum','EPSG','6742','EPSG','1151','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6743','Karbala 1979',NULL,'EPSG','7012','EPSG','8901','1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13802','geodetic_datum','EPSG','6743','EPSG','3625','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6744','Nahrwan 1934',NULL,'EPSG','7012','EPSG','8901','1934-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13803','geodetic_datum','EPSG','6744','EPSG','4238','EPSG','1136'); INSERT INTO "geodetic_datum" VALUES('EPSG','6745','Rauenberg Datum/83',NULL,'EPSG','7004','EPSG','8901','1983-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13804','geodetic_datum','EPSG','6745','EPSG','2545','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6746','Potsdam Datum/83',NULL,'EPSG','7004','EPSG','8901','1983-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13805','geodetic_datum','EPSG','6746','EPSG','2544','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6747','Greenland 1996',NULL,'EPSG','7019','EPSG','8901','1996-08-14',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13806','geodetic_datum','EPSG','6747','EPSG','1107','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6748','Vanua Levu 1915',NULL,'EPSG','7055','EPSG','8901','1915-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13807','geodetic_datum','EPSG','6748','EPSG','3401','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6749','Reseau Geodesique de Nouvelle Caledonie 91-93',NULL,'EPSG','7019','EPSG','8901','1989-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13808','geodetic_datum','EPSG','6749','EPSG','1174','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6750','ST87 Ouvea',NULL,'EPSG','7030','EPSG','8901','1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13809','geodetic_datum','EPSG','6750','EPSG','2813','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6751','Kertau (RSO)',NULL,'EPSG','7056','EPSG','8901','1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13810','geodetic_datum','EPSG','6751','EPSG','1309','EPSG','1250'); INSERT INTO "geodetic_datum" VALUES('EPSG','6752','Viti Levu 1912',NULL,'EPSG','7055','EPSG','8901','1912-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13811','geodetic_datum','EPSG','6752','EPSG','3195','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6753','fk89',NULL,'EPSG','7022','EPSG','8901','1989-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13812','geodetic_datum','EPSG','6753','EPSG','3248','EPSG','1028'); INSERT INTO "geodetic_datum" VALUES('EPSG','6754','Libyan Geodetic Datum 2006',NULL,'EPSG','7022','EPSG','8901','2006-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13813','geodetic_datum','EPSG','6754','EPSG','1143','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6755','Datum Geodesi Nasional 1995',NULL,'EPSG','7030','EPSG','8901','1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13814','geodetic_datum','EPSG','6755','EPSG','1122','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6756','Vietnam 2000',NULL,'EPSG','7030','EPSG','8901','2000-07-12',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13815','geodetic_datum','EPSG','6756','EPSG','3328','EPSG','1178'); INSERT INTO "geodetic_datum" VALUES('EPSG','6757','SVY21',NULL,'EPSG','7030','EPSG','8901','2004-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13816','geodetic_datum','EPSG','6757','EPSG','1210','EPSG','1028'); INSERT INTO "geodetic_datum" VALUES('EPSG','6758','Jamaica 2001',NULL,'EPSG','7030','EPSG','8901','2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13817','geodetic_datum','EPSG','6758','EPSG','1128','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6759','NAD83 (National Spatial Reference System 2007)',NULL,'EPSG','7019','EPSG','8901','2007-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13818','geodetic_datum','EPSG','6759','EPSG','1511','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6760','World Geodetic System 1966',NULL,'EPSG','7025','EPSG','8901','1966-01-01',1966.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13819','geodetic_datum','EPSG','6760','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6761','Croatian Terrestrial Reference System',NULL,'EPSG','7019','EPSG','8901','1995-07-20',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13820','geodetic_datum','EPSG','6761','EPSG','1076','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6762','Bermuda 2000',NULL,'EPSG','7030','EPSG','8901','2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13821','geodetic_datum','EPSG','6762','EPSG','1047','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','6763','Pitcairn 2006',NULL,'EPSG','7030','EPSG','8901','2006-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13822','geodetic_datum','EPSG','6763','EPSG','3208','EPSG','1056'); INSERT INTO "geodetic_datum" VALUES('EPSG','6764','Ross Sea Region Geodetic Datum 2000',NULL,'EPSG','7019','EPSG','8901','2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13823','geodetic_datum','EPSG','6764','EPSG','3558','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6765','Slovenia Geodetic Datum 1996',NULL,'EPSG','7019','EPSG','8901','1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13824','geodetic_datum','EPSG','6765','EPSG','1212','EPSG','1180'); INSERT INTO "geodetic_datum" VALUES('EPSG','6801','CH1903 (Bern)',NULL,'EPSG','7004','EPSG','8907','1903-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13825','geodetic_datum','EPSG','6801','EPSG','1286','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6802','Bogota 1975 (Bogota)',NULL,'EPSG','7022','EPSG','8904','1975-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13826','geodetic_datum','EPSG','6802','EPSG','3229','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6803','Lisbon 1937 (Lisbon)',NULL,'EPSG','7022','EPSG','8902','1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13827','geodetic_datum','EPSG','6803','EPSG','1294','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6804','Makassar (Jakarta)',NULL,'EPSG','7004','EPSG','8908',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13828','geodetic_datum','EPSG','6804','EPSG','1316','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6805','Militar-Geographische Institut (Ferro)',NULL,'EPSG','7004','EPSG','8909','1901-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13829','geodetic_datum','EPSG','6805','EPSG','1321','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6806','Monte Mario (Rome)',NULL,'EPSG','7022','EPSG','8906',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13830','geodetic_datum','EPSG','6806','EPSG','3343','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6807','Nouvelle Triangulation Francaise (Paris)',NULL,'EPSG','7011','EPSG','8903','1895-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13831','geodetic_datum','EPSG','6807','EPSG','3694','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6808','Padang 1884 (Jakarta)',NULL,'EPSG','7004','EPSG','8908','1884-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13832','geodetic_datum','EPSG','6808','EPSG','1355','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6809','Reseau National Belge 1950 (Brussels)',NULL,'EPSG','7022','EPSG','8910','1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13833','geodetic_datum','EPSG','6809','EPSG','1347','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6810','Tananarive 1925 (Paris)',NULL,'EPSG','7022','EPSG','8903','1925-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13834','geodetic_datum','EPSG','6810','EPSG','3273','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6811','Voirol 1875 (Paris)',NULL,'EPSG','7011','EPSG','8903','1875-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13835','geodetic_datum','EPSG','6811','EPSG','1365','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6813','Batavia (Jakarta)',NULL,'EPSG','7004','EPSG','8908',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13836','geodetic_datum','EPSG','6813','EPSG','1285','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6814','Stockholm 1938 (Stockholm)',NULL,'EPSG','7004','EPSG','8911','1938-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13837','geodetic_datum','EPSG','6814','EPSG','3313','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6815','Greek (Athens)',NULL,'EPSG','7004','EPSG','8912',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13838','geodetic_datum','EPSG','6815','EPSG','3254','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6816','Carthage (Paris)',NULL,'EPSG','7011','EPSG','8903','1925-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13839','geodetic_datum','EPSG','6816','EPSG','1618','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6817','NGO 1948 (Oslo)',NULL,'EPSG','7005','EPSG','8913','1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13840','geodetic_datum','EPSG','6817','EPSG','1352','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6818','System of the Unified Trigonometrical Cadastral Network (Ferro)',NULL,'EPSG','7004','EPSG','8909','1920-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13841','geodetic_datum','EPSG','6818','EPSG','1306','EPSG','1181'); INSERT INTO "geodetic_datum" VALUES('EPSG','6819','Nord Sahara 1959 (Paris)',NULL,'EPSG','7012','EPSG','8903','1959-01-01',NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13842','geodetic_datum','EPSG','6819','EPSG','1366','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6820','Gunung Segara (Jakarta)',NULL,'EPSG','7004','EPSG','8908',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13843','geodetic_datum','EPSG','6820','EPSG','1360','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6821','Voirol 1879 (Paris)',NULL,'EPSG','7011','EPSG','8903','1879-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13844','geodetic_datum','EPSG','6821','EPSG','1365','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6896','International Terrestrial Reference Frame 2005',NULL,'EPSG','7019','EPSG','8901','2000-01-01',2000.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13845','geodetic_datum','EPSG','6896','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','6901','Ancienne Triangulation Francaise (Paris)',NULL,'EPSG','7027','EPSG','8914',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13846','geodetic_datum','EPSG','6901','EPSG','1326','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6902','Nord de Guerre (Paris)',NULL,'EPSG','7027','EPSG','8903',NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13847','geodetic_datum','EPSG','6902','EPSG','1369','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6903','Madrid 1870 (Madrid)',NULL,'EPSG','7028','EPSG','8905','1870-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13848','geodetic_datum','EPSG','6903','EPSG','2366','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6904','Lisbon 1890 (Lisbon)',NULL,'EPSG','7004','EPSG','8902','1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13849','geodetic_datum','EPSG','6904','EPSG','1294','EPSG','1153'); INSERT INTO "geodetic_datum" VALUES('EPSG','6258','European Terrestrial Reference System 1989 ensemble',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,0.1,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14235','geodetic_datum','EPSG','6258','EPSG','4755','EPSG','1026'); INSERT INTO "geodetic_datum" VALUES('EPSG','6326','World Geodetic System 1984 ensemble',NULL,'EPSG','7030','EPSG','8901',NULL,NULL,2.0,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14343','geodetic_datum','EPSG','6326','EPSG','1262','EPSG','1245'); proj-9.6.0/data/sql/geodetic_datum_ensemble_member.sql000664 001754 001755 00000003333 14764566077 023032 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1178',1); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1179',2); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1180',3); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1181',4); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1182',5); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1183',6); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1184',7); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1185',8); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1186',9); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1204',10); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1206',11); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6258','EPSG','1382',12); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1166',1); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1152',2); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1153',3); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1154',4); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1155',5); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1156',6); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1309',7); INSERT INTO "geodetic_datum_ensemble_member" VALUES('EPSG','6326','EPSG','1383',8); proj-9.6.0/data/sql/grid_alternatives.sql000664 001754 001755 00000136742 14764566077 020375 0ustar00e012349e012349000000 000000 INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES -- ar_ign - Instituto Geográfico Nacional (IGN) ('GEOIDE-Ar16.gri','ar_ign_GEOIDE-Ar16.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ar_ign_GEOIDE-Ar16.tif',1,1,NULL), -- at_bev - Austria Bundesamt für Eich- und Vermessungswessen ('AT_GIS_GRID.gsb','at_bev_AT_GIS_GRID.tif','AT_GIS_GRID.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/at_bev_AT_GIS_GRID.tif',1,1,NULL), ('AT_GIS_GRID_2021_09_28.gsb','at_bev_AT_GIS_GRID_2021_09_28.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/at_bev_AT_GIS_GRID_2021_09_28.tif',1,1,NULL), ('GV_HoehenGrid_V1.csv','at_bev_GV_Hoehengrid_V1.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/at_bev_GV_Hoehengrid_V1.tif',1,1,NULL), ('GEOID_GRS80_Oesterreich.csv','at_bev_GEOID_GRS80_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_GRS80_Oesterreich.tif',1,1,NULL), ('GEOID_BESSEL_Oesterreich.csv','at_bev_GEOID_BESSEL_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_BESSEL_Oesterreich.tif',1,1,NULL), ('GV_Hoehengrid_plus_Geoid_V3.csv','at_bev_GV_Hoehengrid_plus_Geoid_V2.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GV_Hoehengrid_plus_Geoid_V2.tif',1,1,NULL), -- au_ga - Geoscience Australia -- source file contains undulation in first band, and deflection in 2nd and 3d band ('AUSGeoid09_V1.01.gsb','au_ga_AUSGeoid09_V1.01.tif','AUSGeoid09_V1.01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid09_V1.01.tif',1,1,NULL), ('AUSGeoid09_GDA94_V1.01_DOV_windows.gsb','au_ga_AUSGeoid09_V1.01.tif','AUSGeoid09_V1.01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid09_V1.01.tif',1,1,NULL), -- source file contains undulation in first band, and deflection in 2nd and 3d band ('AUSGeoid2020_20180201.gsb','au_ga_AUSGeoid2020_20180201.tif','AUSGeoid2020_20180201.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid2020_20180201.tif',1,1,NULL), ('AGQG_20191107.gsb','au_ga_AGQG_20191107.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AGQG_20191107.tif',1,1,NULL), ('AGQG_20201120.gsb','au_ga_AGQG_20201120.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AGQG_20201120.tif',1,1,NULL), -- au_icsm - Australian Intergovernmental Committee on Surveying and Mapping ('A66 National (13.09.01).gsb','au_icsm_A66_National_13_09_01.tif','A66_National_13_09_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_A66_National_13_09_01.tif',1,1,NULL), ('National 84 (02.07.01).gsb','au_icsm_National_84_02_07_01.tif','National_84_02_07_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_National_84_02_07_01.tif',1,1,NULL), ('GDA94_GDA2020_conformal.gsb','au_icsm_GDA94_GDA2020_conformal.tif','GDA94_GDA2020_conformal.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal.tif',1,1,NULL), ('GDA94_GDA2020_conformal_and_distortion.gsb','au_icsm_GDA94_GDA2020_conformal_and_distortion.tif','GDA94_GDA2020_conformal_and_distortion.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_and_distortion.tif',1,1,NULL), ('GDA94_GDA2020_conformal_christmas_island.gsb','au_icsm_GDA94_GDA2020_conformal_christmas_island.tif','GDA94_GDA2020_conformal_christmas_island.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_christmas_island.tif',1,1,NULL), ('GDA94_GDA2020_conformal_cocos_island.gsb','au_icsm_GDA94_GDA2020_conformal_cocos_island.tif','GDA94_GDA2020_conformal_cocos_island.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_cocos_island.tif',1,1,NULL), -- be_ign - IGN Belgium ('bd72lb72_etrs89lb08.gsb','be_ign_bd72lb72_etrs89lb08.tif','bd72lb72_etrs89lb08.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/be_ign_bd72lb72_etrs89lb08.tif',1,1,NULL), ('hBG18.dat', 'be_ign_hBG18.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/be_ign_hBG18.tif',1,1,NULL), -- br_ibge - Instituto Brasileiro de Geografia e Estatistica (IBGE) ('CA61_003.gsb','br_ibge_CA61_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_CA61_003.tif',1,1,NULL), ('CA7072_003.gsb','br_ibge_CA7072_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_CA7072_003.tif',1,1,NULL), ('SAD69_003.gsb','br_ibge_SAD69_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_SAD69_003.tif',1,1,NULL), ('SAD96_003.gsb','br_ibge_SAD96_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_SAD96_003.tif',1,1,NULL), -- ca_nrc - Natural Resources Canada ('CGG2013ai08.byn','ca_nrc_CGG2013ai08.tif','CGG2013ai08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013ai08.tif',1,1,NULL), ('CGG2013an83.byn','ca_nrc_CGG2013an83.tif','CGG2013an83.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013an83.tif',1,1,NULL), ('CGG2013i08.byn','ca_nrc_CGG2013i08.tif','CGG2013i08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013i08.tif',1,1,NULL), ('CGG2013n83.byn','ca_nrc_CGG2013n83.tif','CGG2013n83.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013n83.tif',1,1,NULL), ('HT2_0.byn','ca_nrc_HT2_1997.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_1997.tif',1,1,NULL), ('HT2_1997.byn','ca_nrc_HT2_1997.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_1997.tif',1,1,NULL), ('HT2_2002v70.byn','ca_nrc_HT2_2002v70.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_2002v70.tif',1,1,NULL), ('HT2_2010v70.byn','ca_nrc_HT2_2010v70.tif','HT2_2010v70.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_2010v70.tif',1,1,NULL), ('HT2_1997_CGG2013a.byn','ca_nrc_HT2_1997_CGG2013a.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_1997_CGG2013a.tif',1,1,NULL), ('HT2_2002v70_CGG2013a.byn','ca_nrc_HT2_2002v70_CGG2013a.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_2002v70_CGG2013a.tif',1,1,NULL), ('HT2_2010v70_CGG2013a.byn','ca_nrc_HT2_2010v70_CGG2013a.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_2010v70_CGG2013a.tif',1,1,NULL), -- the PROJ grid is the reverse way of the EPSG one ('NTv1_0.gsb','ca_nrc_ntv1_can.tif','ntv1_can.dat','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ntv1_can.tif',1,1,NULL), -- just a case change ('NTv2_0.gsb','ca_nrc_ntv2_0.tif','ntv2_0.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ntv2_0.tif',1,1,NULL), -- Provincial grids ('AB_CSRS.DAC','ca_nrc_ABCSRSV4.tif','ABCSRSV4.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ABCSRSV4.tif',1,1,NULL), ('BC_27_05.GSB','ca_nrc_BC_27_05.tif','BC_27_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_BC_27_05.tif',1,1,NULL), ('BC_93_05.GSB','ca_nrc_BC_93_05.tif','BC_93_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_BC_93_05.tif',1,1,NULL), ('CGQ77-98.gsb','ca_nrc_CQ77SCRS.tif','CQ77SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CQ77SCRS.tif',1,1,NULL), ('CRD27_00.GSB','ca_nrc_CRD27_00.tif','CRD27_00.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CRD27_00.tif',1,1,NULL), ('CRD93_00.GSB','ca_nrc_CRD93_00.tif','CRD93_00.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CRD93_00.tif',1,1,NULL), ('GS7783.GSB','ca_nrc_GS7783.tif','GS7783.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_GS7783.tif',1,1,NULL), -- just a case change ('May76v20.gsb','ca_nrc_MAY76V20.tif','MAY76V20.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_MAY76V20.tif',1,1,NULL), ('NA27SCRS.GSB','ca_nrc_NA27SCRS.tif','NA27SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA27SCRS.tif',1,1,NULL), ('QUE27-98.gsb','ca_nrc_NA27SCRS.tif','NA27SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA27SCRS.tif',1,1,NULL), -- two grid names in EPSG point to the same file distributed by NRCan ('NA83SCRS.GSB','ca_nrc_NA83SCRS.tif','NA83SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA83SCRS.tif',1,1,NULL), ('NAD83-98.gsb','ca_nrc_NA83SCRS.tif','NA83SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA83SCRS.tif',1,1,NULL), ('NB2783v2.gsb','ca_nrc_NB2783v2.tif','NB2783v2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NB2783v2.tif',1,1,NULL), ('NB7783v2.gsb','ca_nrc_NB7783v2.tif','NB7783v2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NB7783v2.tif',1,1,NULL), ('NS778302.gsb','ca_nrc_NS778302.tif','NS778302.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NS778302.tif',1,1,NULL), ('NVI93_05.GSB','ca_nrc_NVI93_05.tif','NVI93_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NVI93_05.tif',1,1,NULL), ('ON27CSv1.GSB','ca_nrc_ON27CSv1.tif','ON27CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON27CSv1.tif',1,1,NULL), ('ON76CSv1.GSB','ca_nrc_ON76CSv1.tif','ON76CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON76CSv1.tif',1,1,NULL), ('ON83CSv1.GSB','ca_nrc_ON83CSv1.tif','ON83CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON83CSv1.tif',1,1,NULL), ('PE7783V2.gsb','ca_nrc_PE7783V2.tif','PE7783V2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_PE7783V2.tif',1,1,NULL), ('SK27-98.gsb','ca_nrc_SK27-98.tif','SK27-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK27-98.tif',1,1,NULL), ('SK83-98.gsb','ca_nrc_SK83-98.tif','SK83-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK83-98.tif',1,1,NULL), ('TO27CSv1.GSB','ca_nrc_TO27CSv1.tif','TO27CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_TO27CSv1.tif',1,1,NULL), ('NAD83v6VG.gvb','ca_nrc_NAD83v6VG.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/ca_nrc_NAD83v6VG.tif',1,1,NULL), ('NAD83v70VG.gvb','ca_nrc_NAD83v70VG.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/ca_nrc_NAD83v70VG.tif',1,1,NULL), -- ca_que - Ministère de l'Énergie et des Ressources naturelles du Québec -- two grid names in EPSG point to the same file distributed by NRCan ('NA27NA83.GSB','ca_que_mern_na27na83.tif','na27na83.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_que_mern_na27na83.tif',1,1,NULL), ('CQ77NA83.GSB','ca_que_mern_cq77na83.tif','cq77na83.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_que_mern_cq77na83.tif',1,1,NULL), -- ch_swisstopo - Swisstopo Federal Office of Topography ('CHENyx06a.gsb','ch_swisstopo_CHENyx06a.tif','CHENyx06a.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ch_swisstopo_CHENyx06a.tif',1,1,NULL), ('CHENyx06_ETRS.gsb','ch_swisstopo_CHENyx06_ETRS.tif','CHENyx06_ETRS.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ch_swisstopo_CHENyx06_ETRS.tif',1,1,NULL), ('chgeo2004_ETRS.agr','ch_swisstopo_chgeo2004_ETRS89_LHN95.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ch_swisstopo_chgeo2004_ETRS89_LHN95.tif',1,1,NULL), ('chgeo2004_htrans_ETRS.agr','ch_swisstopo_chgeo2004_ETRS89_LN02.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ch_swisstopo_chgeo2004_ETRS89_LN02.tif',1,1,NULL), -- cz_cuzk - ČÚZK ('CR2005_GTX.gtx','cz_cuzk_CR-2005.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/cz_cuzk_CR-2005.tif',1,1,NULL), -- de_adv - Arbeitsgemeinschaft der Vermessungsverwaltungender der Länder der Bundesrepublik Deutschland (AdV) ('BETA2007.gsb','de_adv_BETA2007.tif','BETA2007.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_adv_BETA2007.tif',1,1,NULL), -- de_bkg - Bundesamt für Kartographie und Geodäsie (BKG) ('GCG2016.txt','de_bkg_gcg2016.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/de_bkg_gcg2016.tif',1,1,NULL), -- de_geosn - Staatsbetrieb Geobasisinformation und Vermessung Sachsen GeoSN ('NTv2_SN.gsb','de_geosn_NTv2_SN.tif','NTv2_SN.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_geosn_NTv2_SN.tif',1,1,NULL), -- de_hvbg - Hessische Verwaltung für Bodenmanagement und Geoinformation ('HeTa2010.gsb','de_hvbg_hessen_HeTA2010.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_hvbg_hessen_HeTA2010.tif',1,1,NULL), -- de_lgl_bw - LGL Baden-Württemberg ('BWTA2017.gsb','de_lgl_bw_BWTA2017.tif','BWTA2017.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_lgl_bw_BWTA2017.tif',1,1,NULL), -- de_lgvl_saarland - LVGL Saarland ('SeTa2016.gsb','de_lgvl_saarland_SeTa2016.tif','SeTa2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_lgvl_saarland_SeTa2016.tif',1,1,NULL), -- de_tlbg_thueringen - TLBG Thüringen ('de_tlbg_thuringen_NTv2gridTH.gsb','de_tlbg_thueringen_NTv2gridTH.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_tlbg_thueringen_NTv2gridTH.tif',1,1,NULL), -- dk_sdfe - Danish Agency for Data Supply and Efficiency -- Denmark mainland ('dnn.gtx','dk_sdfe_dnn.tif','dnn.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_dnn.tif',1,1,NULL), -- Faroe islands height models ('fvr09.gtx','dk_sdfe_fvr09.tif','fvr09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_fvr09.tif',1,1,NULL), -- Greenland height models ('gr2000g.gri','dk_sdfe_gvr2000.tif','gvr2000.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_gvr2000.tif',1,1,NULL), ('ggeoid16.gri','dk_sdfe_gvr2016.tif','gvr2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_gvr2016.tif',1,1,NULL), -- dk_sdfi - Danish Agency for Data Supply and Infrastructure -- Denmark mainland ('gs_2022.gsb','dk_sdfi_gs_2022.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_gs_2022.tif',1,1,NULL), ('gsb_2022.gsb','dk_sdfi_gsb_2022.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_gsb_2022.tif',1,1,NULL), ('kk_2022.gsb','dk_sdfi_kk_2022.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_kk_2022.tif',1,1,NULL), ('os_2022.gsb','dk_sdfi_os_2022.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_os_2022.tif',1,1,NULL), ('s34j_2022.gsb','dk_sdfi_s34j_2022.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_s34j_2022.tif',1,1,NULL), ('s34s_2022.gsb','dk_sdfi_s34s_2022.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_s34s_2022.tif',1,1,NULL), ('s45b_2022.gsb','dk_sdfi_s45b_2022.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_s45b_2022.tif',1,1,NULL), ('dvr90_2002.tif','dk_sdfi_dvr90_2002.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_dvr90_2002.tif',1,1,NULL), ('dvr90_2013.tif','dk_sdfi_dvr90_2013.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_dvr90_2013.tif',1,1,NULL), ('dvr90_2023.tif','dk_sdfi_dvr90_2023.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_dvr90_2023.tif',1,1,NULL), ('dklat_2022.tif','dk_sdfi_dklat_2022.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_dklat_2022.tif',1,1,NULL), ('dklat_2023.tif','dk_sdfi_dklat_2023.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_dklat_2023.tif',1,1,NULL), ('dkmsl_2022.tif','dk_sdfi_dkmsl_2022.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_dkmsl_2022.tif',1,1,NULL), ('dkmsl_2023.tif','dk_sdfi_dkmsl_2023.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_dkmsl_2023.tif',1,1,NULL), -- Greenland ('gllmsl_2022.tif','dk_sdfi_gllmsl_2022.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/dk_sdfi_gllmsl_2022.tif',1,1,NULL), ('gllat_2023.tif','dk_sdfi_gllat_2023.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_gllat_2023.tif',1,1,NULL), ('glmsl_2023.tif','dk_sdfi_glmsl_2023.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_glmsl_2023.tif',1,1,NULL), -- es_cat_icgc - Institut Cartogràfic i Geològic de Catalunya (ICGC) ('100800401.gsb','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL), -- es_ign - Instituto Geográfico Nacional (IGN) ('SPED2ETV2.gsb','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL), ('EGM08_REDNAP.txt','es_ign_egm08-rednap.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/es_ign_egm08-rednap.tif',1,1,NULL), ('EGM08_REDNAP_Canarias.txt','es_ign_egm08-rednap-canarias.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/es_ign_egm08-rednap-canarias.tif',1,1,NULL), -- eur_nkg - Nordic Geodetic Commission ('eur_nkg_nkgrf03vel_realigned.tif','eur_nkg_nkgrf03vel_realigned.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/eur_nkg_nkgrf03vel_realigned.tif',1,1,NULL), ('eur_nkg_nkgrf17vel.tif','eur_nkg_nkgrf17vel.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/eur_nkg_nkgrf17vel.tif',1,1,NULL), -- fi_nls - National Land Survey of Finland (MML) ('fi_nls_fin2000.tif','fi_nls_fin2000.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fi_nls_fin2000.tif',1,1,NULL), ('fi_nls_fin2005n00.tif','fi_nls_fin2005n00.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fi_nls_fin2005n00.tif',1,1,NULL), ('fi_nls_fin2023n2000.tif','fi_nls_fin2023n2000.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fi_nls_fin2023n2000.tif',1,1,NULL), ('fi_nls_n43_n60.json','fi_nls_n43_n60.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_n43_n60.json',1,1,NULL), ('fi_nls_n60_n2000.json','fi_nls_n60_n2000.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_n60_n2000.json',1,1,NULL), ('fi_nls_ykj_etrs35fin.json','fi_nls_ykj_etrs35fin.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_ykj_etrs35fin.json',1,1,NULL), -- fr_ign - IGN France ('rgf93_ntf.gsb','fr_ign_ntf_r93.tif','ntf_r93.gsb','GTiff','hgridshift',1,NULL,'https://cdn.proj.org/fr_ign_ntf_r93.tif',1,1,NULL), ('gr3df97a.txt','fr_ign_gr3df97a.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/fr_ign_gr3df97a.tif',1,1,NULL), ('RGM04versRGM23.txt','fr_ign_RGM04versRGM23.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/fr_ign_RGM04versRGM23.tif',1,1,NULL), -- Vertical grids ('RAC09.mnt','fr_ign_RAC09.tif','RAC09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAC09.tif',1,1,NULL), ('RAC23.mnt','fr_ign_RAC23.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAC23.tif',1,1,NULL), ('RAF09.mnt','fr_ign_RAF09.tif','RAF09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF09.tif',1,1,NULL), ('RAF18.mnt','fr_ign_RAF18.tif','RAF18.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF18.tif',1,1,NULL), ('RAF18b.mnt','fr_ign_RAF18b.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF18b.tif',1,1,NULL), ('RAF20.tac','fr_ign_RAF20.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF20.tif',1,1,NULL), -- The following is a bit an abusive mapping. The ggf97a.txt is the one pointed for the "RGF93 v1 to NGF-IGN69 height" transformation -- but we have never ingested that grid. So we point to RAF18.mnt instead... -- If we didn't do this, we wouldn't get a grid at all, since RAF09 and RAF18 are now only available for RGF93 v2 ('ggf97a.txt','fr_ign_RAF18.tif','RAF18.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF18.tif',1,1,NULL), ('gg10_gtbt.txt','fr_ign_RAGTBT2016.tif','RAGTBT2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAGTBT2016.tif',1,1,NULL), ('RAGTBT2016.mnt','fr_ign_RAGTBT2016.tif','RAGTBT2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAGTBT2016.tif',1,1,NULL), ('gg10_ld.txt','fr_ign_RALD2016.tif','RALD2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALD2016.tif',1,1,NULL), ('RALD2016.mnt','fr_ign_RALD2016.tif','RALD2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALD2016.tif',1,1,NULL), ('ggg00_ld.txt','fr_ign_RALDW842016.tif','RALDW842016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALDW842016.tif',1,1,NULL), ('RALDW842016.mnt','fr_ign_RALDW842016.tif','RALDW842016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALDW842016.tif',1,1,NULL), ('gg10_ls.txt','fr_ign_RALS2016.tif','RALS2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALS2016.tif',1,1,NULL), ('RALS2016.mnt','fr_ign_RALS2016.tif','RALS2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALS2016.tif',1,1,NULL), ('gg10_mart.txt','fr_ign_RAMART2016.tif','RAMART2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMART2016.tif',1,1,NULL), ('RAMART2016.mnt','fr_ign_RAMART2016.tif','RAMART2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMART2016.tif',1,1,NULL), ('gg10_mg.txt','fr_ign_RAMG2016.tif','RAMG2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMG2016.tif',1,1,NULL), ('RAMG2016.mnt','fr_ign_RAMG2016.tif','RAMG2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMG2016.tif',1,1,NULL), ('ggr99.txt','fr_ign_RAR07_bl.tif','RAR07_bl.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAR07_bl.tif',1,1,NULL), ('RASPM2018.mnt','fr_ign_RASPM2018.tif','RASPM2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RASPM2018.tif',1,1,NULL), ('gg10_sb.txt','fr_ign_gg10_sbv2.tif','gg10_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_sbv2.tif',1,1,NULL), ('gg10_sbv2.mnt','fr_ign_gg10_sbv2.tif','gg10_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_sbv2.tif',1,1,NULL), ('gg10_sm.txt','fr_ign_gg10_smv2.tif','gg10_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_smv2.tif',1,1,NULL), ('gg10_smv2.mnt','fr_ign_gg10_smv2.tif','gg10_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_smv2.tif',1,1,NULL), ('ggg00_ls.txt','fr_ign_ggg00_lsv2.tif','ggg00_lsv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_lsv2.tif',1,1,NULL), ('ggg00_mg.txt','fr_ign_ggg00_mgv2.tif','ggg00_mgv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_mgv2.tif',1,1,NULL), ('ggg00_sb.txt','fr_ign_ggg00_sbv2.tif','ggg00_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_sbv2.tif',1,1,NULL), ('ggg00_sm.txt','fr_ign_ggg00_smv2.tif','ggg00_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_smv2.tif',1,1,NULL), ('ggg00.txt','fr_ign_ggg00v2.tif','ggg00v2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00v2.tif',1,1,NULL), ('ggguy00.txt','fr_ign_ggguy15.tif','ggguy15.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggguy15.tif',1,1,NULL), ('ggm00.txt','fr_ign_ggm00v2.tif','ggm00v2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggm00v2.tif',1,1,NULL), ('GGSPM06v1.mnt','fr_ign_ggspm06v1.tif','ggspm06v1.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggspm06v1.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_CGVD2013RGSPM06.tif','fr_ign_CGVD2013RGSPM06.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_CGVD2013RGSPM06.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf02-Maiao.tif','fr_ign_ggpf02-Maiao.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf02-Maiao.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf02-Tupai.tif','fr_ign_ggpf02-Tupai.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf02-Tupai.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf05-HivaOa.tif','fr_ign_ggpf05-HivaOa.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf05-HivaOa.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf05-Nuku.tif','fr_ign_ggpf05-Nuku.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf05-Nuku.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Gambier.tif','fr_ign_ggpf08-Gambier.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Gambier.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Hao.tif','fr_ign_ggpf08-Hao.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Hao.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Mataiva.tif','fr_ign_ggpf08-Mataiva.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Mataiva.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Raivavae.tif','fr_ign_ggpf08-Raivavae.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Raivavae.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Reao.tif','fr_ign_ggpf08-Reao.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Reao.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Rurutu.tif','fr_ign_ggpf08-Rurutu.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Rurutu.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Tikehau.tif','fr_ign_ggpf08-Tikehau.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Tikehau.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Tubuai.tif','fr_ign_ggpf08-Tubuai.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Tubuai.tif',1,1,NULL), -- hu_bme - Budapest University of Technology and Economics ('hu_bme_geoid2014.tif','hu_bme_geoid2014.tif', 'geoid_eht2014.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/hu_bme_geoid2014.tif', 1, 1, NULL), ('hu_bme_hd72corr.gsb', 'hu_bme_hd72corr.tif', 'etrs2eov_notowgs.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/hu_bme_hd72corr.tif', 1, 1, NULL), -- is_lmi - National Land Survey of Iceland ('Icegeoid_ISN2004.gri','is_lmi_Icegeoid_ISN2004.tif','Icegeoid_ISN2004.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2004.tif',1,1,NULL), ('Icegeoid_ISN93.gri','is_lmi_Icegeoid_ISN93.tif','Icegeoid_ISN93.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN93.tif',1,1,NULL), ('Icegeoid_ISN2016.gri','is_lmi_Icegeoid_ISN2016.tif','Icegeoid_ISN2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2016.tif',1,1,NULL), ('ISN93_ISN2016.gsb','is_lmi_ISN93_ISN2016.tif','ISN93_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN93_ISN2016.tif',1,1,NULL), ('ISN2004_ISN2016.gsb','is_lmi_ISN2004_ISN2016.tif','ISN2004_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN2004_ISN2016.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-is_lmi_ISN_vel_beta.tif','is_lmi_ISN_vel_beta.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/is_lmi_ISN_vel_beta.tif',1,1,NULL), -- jp_gsi - Geospatial Information Authority of Japan ('jp_gsi_gsigeo2011.tif','jp_gsi_gsigeo2011.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/jp_gsi_gsigeo2011.tif',1,1,NULL), -- lv_lgia - Latvian Geospatial Information Agency ('lv_lgia_lv14.tif','lv_lgia_lv14.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/lv_lgia_lv14.tif',1,1,NULL), -- mx_inegi - Instituto Nacional de Estadística, Geografía e Informática (INEGI) Mexico ('GGM10.txt','mx_inegi_ggm10.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/mx_inegi_ggm10.tif',1,1,NULL), -- nc_dittt - Gouvernement de Nouvelle Calédonie - DITTT ('Ranc08_Circe.mnt','nc_dittt_Ranc08_Circe.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nc_dittt_Ranc08_Circe.tif',1,1,NULL), ('RANC15.tac','nc_dittt_RANC15.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nc_dittt_RANC15.tif',1,1,NULL), ('gr3dnc01b.mnt','nc_dittt_gr3dnc01b.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc01b.tif',1,1,NULL), ('gr3dnc02b.mnt','nc_dittt_gr3dnc02b.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc02b.tif',1,1,NULL), ('gr3dnc03a.mnt','nc_dittt_gr3dnc03a.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc03a.tif',1,1,NULL), ('gr3dncl08.tac','nc_dittt_gr3dncI08.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dncI08.tif',1,1,NULL), -- Netherlands / RDNAP (non-free grids). See https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/master/debian/copyright -- Netherlands / RDNAP 2018 ('nlgeo2018.gtx','nl_nsgi_nlgeo2018.tif','nlgeo2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nl_nsgi_nlgeo2018.tif',1,1,NULL), ('rdtrans2018.gsb','nl_nsgi_rdtrans2018.tif','rdtrans2018.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nl_nsgi_rdtrans2018.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-naptrans2018.gtx','nl_nsgi_naptrans2018.tif','naptrans2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nl_nsgi_naptrans2018.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-rdcorr2018.gsb','nl_nsgi_rdcorr2018.tif','rdcorr2018.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nl_nsgi_rdcorr2018.tif',1,1,NULL), ('naptrans2008.gtx','','naptrans2008.gtx','GTX','geoid_like',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/naptrans2008.gtx',1,0,NULL), ('rdtrans2008.gsb','','rdtrans2008.gsb','NTv2','hgridshift',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/rdtrans2008.gsb',1,0,NULL), -- no_kv - Kartverket -- Norwegian grids ('HREF2018B_NN2000_EUREF89.bin','no_kv_HREF2018B_NN2000_EUREF89.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/no_kv_HREF2018B_NN2000_EUREF89.tif',1,1,NULL), ('href2008a.bin','no_kv_href2008a.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/no_kv_href2008a.tif',1,1,NULL), ('no_kv_NKGETRF14_EPSG7922_2000.tif','no_kv_NKGETRF14_EPSG7922_2000.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/no_kv_NKGETRF14_EPSG7922_2000.tif',1,1,NULL), ('ChartDatum_above_Ellipsoid_EUREF89_v2021a.bin','no_kv_CD_above_Ell_ETRS89_v2021a.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/no_kv_CD_above_Ell_ETRS89_v2021a.tif',1,1,NULL), ('ChartDatum_above_Ellipsoid_EUREF89_v2023b.bin','no_kv_CD_above_Ell_ETRS89_v2023b.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/no_kv_CD_above_Ell_ETRS89_v2023b.tif',1,1,NULL), ('no_kv_ETRS89NO_NGO48_TIN.json','no_kv_ETRS89NO_NGO48_TIN.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/no_kv_ETRS89NO_NGO48_TIN.json',1,1,NULL), ('arcgp-2006-sk.bin','no_kv_arcgp-2006-sk.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/no_kv_arcgp-2006-sk.tif',1,1,NULL), -- nz_linz - New Zealand ('nzgd2kgrid0005.gsb','nz_linz_nzgd2kgrid0005.tif','nzgd2kgrid0005.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2kgrid0005.tif',1,1,NULL), ('nzgeoid2016.gtx','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), ('nzgd2000_deformation_20000101_full.zip','nz_linz_nzgd2000-20000101.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20000101.json',1,1,NULL), ('nzgd2000_deformation_20130801_full.zip','nz_linz_nzgd2000-20130801.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20130801.json',1,1,NULL), ('nzgd2000_deformation_20140201_full.zip','nz_linz_nzgd2000-20140201.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20140201.json',1,1,NULL), ('nzgd2000_deformation_20150101_full.zip','nz_linz_nzgd2000-20150101.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20150101.json',1,1,NULL), ('nzgd2000_deformation_20160701_full.zip','nz_linz_nzgd2000-20160701.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20160701.json',1,1,NULL), ('nzgd2000_deformation_20171201_full.zip','nz_linz_nzgd2000-20171201.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20171201.json',1,1,NULL), ('nzgd2000_deformation_20180701_full.zip','nz_linz_nzgd2000-20180701.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20180701.json',1,1,NULL), -- Superseded ('New_Zealand_Quasigeoid_2016.csv','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), ('nzgeoid2009.gtx','nz_linz_nzgeoid2009.tif','nzgeoid2009.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2009.tif',1,1,NULL), -- Superseded ('nzgeoid09.sid','nz_linz_nzgeoid2009.tif','nzgeoid2009.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2009.tif',1,1,NULL), -- New Zealand grid shift models. ('auckht1946-nzvd2016.gtx','nz_linz_auckht1946-nzvd2016.tif','auckht1946-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_auckht1946-nzvd2016.tif',1,1,NULL), ('blufht1955-nzvd2016.gtx','nz_linz_blufht1955-nzvd2016.tif','blufht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_blufht1955-nzvd2016.tif',1,1,NULL), ('dublht1960-nzvd2016.gtx','nz_linz_dublht1960-nzvd2016.tif','dublht1960-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_dublht1960-nzvd2016.tif',1,1,NULL), ('duneht1958-nzvd2016.gtx','nz_linz_duneht1958-nzvd2016.tif','duneht1958-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_duneht1958-nzvd2016.tif',1,1,NULL), ('gisbht1926-nzvd2016.gtx','nz_linz_gisbht1926-nzvd2016.tif','gisbht1926-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_gisbht1926-nzvd2016.tif',1,1,NULL), ('lyttht1937-nzvd2016.gtx','nz_linz_lyttht1937-nzvd2016.tif','lyttht1937-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_lyttht1937-nzvd2016.tif',1,1,NULL), ('motuht1953-nzvd2016.gtx','nz_linz_motuht1953-nzvd2016.tif','motuht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_motuht1953-nzvd2016.tif',1,1,NULL), ('napiht1962-nzvd2016.gtx','nz_linz_napiht1962-nzvd2016.tif','napiht1962-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_napiht1962-nzvd2016.tif',1,1,NULL), ('nelsht1955-nzvd2016.gtx','nz_linz_nelsht1955-nzvd2016.tif','nelsht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nelsht1955-nzvd2016.tif',1,1,NULL), ('ontpht1964-nzvd2016.gtx','nz_linz_ontpht1964-nzvd2016.tif','ontpht1964-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_ontpht1964-nzvd2016.tif',1,1,NULL), ('stisht1977-nzvd2016.gtx','nz_linz_stisht1977-nzvd2016.tif','stisht1977-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_stisht1977-nzvd2016.tif',1,1,NULL), ('taraht1970-nzvd2016.gtx','nz_linz_taraht1970-nzvd2016.tif','taraht1970-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_taraht1970-nzvd2016.tif',1,1,NULL), ('wellht1953-nzvd2016.gtx','nz_linz_wellht1953-nzvd2016.tif','wellht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_wellht1953-nzvd2016.tif',1,1,NULL), -- Superseded entries ('auckland-1946-to-nzvd2016-conversion.csv','nz_linz_auckht1946-nzvd2016.tif','auckht1946-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_auckht1946-nzvd2016.tif',1,1,NULL), ('bluff-1955-to-nzvd2016-conversion.csv','nz_linz_blufht1955-nzvd2016.tif','blufht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_blufht1955-nzvd2016.tif',1,1,NULL), ('dunedin-bluff-1960-to-nzvd2016-conversion.csv','nz_linz_dublht1960-nzvd2016.tif','dublht1960-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_dublht1960-nzvd2016.tif',1,1,NULL), ('dunedin-1958-to-nzvd2016-conversion.csv','nz_linz_duneht1958-nzvd2016.tif','duneht1958-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_duneht1958-nzvd2016.tif',1,1,NULL), ('gisborne-1926-to-nzvd2016-conversion.csv','nz_linz_gisbht1926-nzvd2016.tif','gisbht1926-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_gisbht1926-nzvd2016.tif',1,1,NULL), ('lyttelton-1937-to-nzvd2016-conversion.csv','nz_linz_lyttht1937-nzvd2016.tif','lyttht1937-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_lyttht1937-nzvd2016.tif',1,1,NULL), ('moturiki-1953-to-nzvd2016-conversion.csv','nz_linz_motuht1953-nzvd2016.tif','motuht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_motuht1953-nzvd2016.tif',1,1,NULL), ('napier-1962-to-nzvd2016-conversion.csv','nz_linz_napiht1962-nzvd2016.tif','napiht1962-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_napiht1962-nzvd2016.tif',1,1,NULL), ('nelson-1955-to-nzvd2016-conversion.csv','nz_linz_nelsht1955-nzvd2016.tif','nelsht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nelsht1955-nzvd2016.tif',1,1,NULL), ('onetreepoint-1964-to-nzvd2016-conversion.csv','nz_linz_ontpht1964-nzvd2016.tif','ontpht1964-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_ontpht1964-nzvd2016.tif',1,1,NULL), ('stewartisland-1977-to-nzvd2016-conversion.csv','nz_linz_stisht1977-nzvd2016.tif','stisht1977-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_stisht1977-nzvd2016.tif',1,1,NULL), ('taranaki-1970-to-nzvd2016-conversion.csv','nz_linz_taraht1970-nzvd2016.tif','taraht1970-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_taraht1970-nzvd2016.tif',1,1,NULL), ('wellington-1953-to-nzvd2016-conversion.csv','nz_linz_wellht1953-nzvd2016.tif','wellht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_wellht1953-nzvd2016.tif',1,1,NULL), -- pl_gugik - Główny Urząd Geodezji i Kartografii ('gugik-geoid2011-PL-EVRF2007-NH.txt','pl_gugik_geoid2011-PL-EVRF2007-NH.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/pl_gugik_geoid2011-PL-EVRF2007-NH.tif',1,1,NULL), ('gugik-geoid2011-PL-KRON86-NH.txt','pl_gugik_geoid2011-PL-KRON86-NH.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/pl_gugik_geoid2011-PL-KRON86-NH.tif',1,1,NULL), ('Model_quasi-geoidy-PL-geoid2021-PL-EVRF2007-NH.txt','pl_gugik_geoid2021-PL-EVRF2007-NH.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/pl_gugik_geoid2021-PL-EVRF2007-NH.tif',1,1,NULL), -- pt_dgt - DG Territorio ('DLx_ETRS89_geo.gsb','pt_dgt_DLx_ETRS89_geo.tif','DLx_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_DLx_ETRS89_geo.tif',1,1,NULL), ('D73_ETRS89_geo.gsb','pt_dgt_D73_ETRS89_geo.tif','D73_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_D73_ETRS89_geo.tif',1,1,NULL), ('GeodPT08.dat','pt_dgt_GeodPT08.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/pt_dgt_GeodPT08.tif',1,1,NULL), -- se_lantmateriet - Sweden ('SWEN17_RH2000.gtx','se_lantmateriet_SWEN17_RH2000.tif','SWEN17_RH2000.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/se_lantmateriet_SWEN17_RH2000.tif',1,1,NULL), -- si_gurs - Slovenia ('https://isgeoid.polimi.it/Geoid/Europe/Slovenia/public/Slovenia_2016_SLO_VRP2016_Koper_hybrQ_20221122.isg','si_gurs_SLO-VRP2016-Koper.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/si_gurs_SLO-VRP2016-Koper.tif',1,1,NULL), -- sk_gku - Geodetický a kartografický ústav Bratislava (GKU) ('Slovakia_JTSK03_to_JTSK.LAS','sk_gku_JTSK03_to_JTSK.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/sk_gku_JTSK03_to_JTSK.tif',1,1,NULL), ('Slovakia_ETRS89h_to_Baltic1957.gtx','sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif',1,1,NULL), ('Slovakia_ETRS89h_to_EVRF2007.gtx','sk_gku_Slovakia_ETRS89h_to_EVRF2007.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/sk_gku_Slovakia_ETRS89h_to_EVRF2007.tif',1,1,NULL), -- uk_os - Ordnance Survey -- Northern Ireland: OSGM15 height, Belfast height -> ETRS89 ellipsoidal heights ('OSGM15_Belfast.gri','uk_os_OSGM15_Belfast.tif','OSGM15_Belfast.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/uk_os_OSGM15_Belfast.tif',1,1,NULL), -- United Kingdom: OSGM15 height, ODN height -> ETRS89 ellipsoidal heights ('OSTN15_OSGM15_GB.txt','uk_os_OSGM15_GB.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/uk_os_OSGM15_GB.tif',1,1,NULL), -- Ireland: OSGM15 height, Malin head datum -> ETRS89 ellipsoidal heights ('OSGM15_Malin.gri','uk_os_OSGM15_Malin.tif','OSGM15_Malin.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/uk_os_OSGM15_Malin.tif',1,1,NULL), ('OSTN15_NTv2_OSGBtoETRS.gsb','uk_os_OSTN15_NTv2_OSGBtoETRS.tif','OSTN15_NTv2_OSGBtoETRS.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/uk_os_OSTN15_NTv2_OSGBtoETRS.tif',1,1,NULL), -- us_nga - US National Geospatial Intelligence Agency (NGA) ('WW15MGH.GRD','us_nga_egm96_15.tif','egm96_15.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_nga_egm96_15.tif',1,1,NULL), ('Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz','us_nga_egm08_25.tif','egm08_25.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_nga_egm08_25.tif',1,1,NULL), -- us_noaa - United States -- Continental USA VERTCON: NGVD (19)29 height to NAVD (19)88 height ('vertconw.94','us_noaa_vertconw.tif','vertconw.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertconw.tif',1,1,NULL), ('vertconc.94','us_noaa_vertconc.tif','vertconc.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertconc.tif',1,1,NULL), ('vertcone.94','us_noaa_vertcone.tif','vertcone.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertcone.tif',1,1,NULL), -- US GEOID99 height models. Not mapped: Alaska: g1999a01.gtx to g1999a04.gtx. Hawaii: g1999h01.gtx, Puerto Rico: g1999p01.gtx ('NOT-YET-IN-GRID-TRANSFORMATION-g1999a01.bin','us_noaa_g1999a01.tif','g1999a01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a01.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g1999a02.bin','us_noaa_g1999a02.tif','g1999a02.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a02.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g1999a03.bin','us_noaa_g1999a03.tif','g1999a03.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a03.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g1999a04.bin','us_noaa_g1999a04.tif','g1999a04.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a04.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g1999p01.bin','us_noaa_g1999p01.tif','g1999p01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999p01.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g1999h01.bin','us_noaa_g1999h01.tif','g1999h01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999h01.tif',1,1,NULL), ('g1999u01.bin','us_noaa_g1999u01.tif','g1999u01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u01.tif',1,1,NULL), ('g1999u02.bin','us_noaa_g1999u02.tif','g1999u02.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u02.tif',1,1,NULL), ('g1999u03.bin','us_noaa_g1999u03.tif','g1999u03.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u03.tif',1,1,NULL), ('g1999u04.bin','us_noaa_g1999u04.tif','g1999u04.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u04.tif',1,1,NULL), ('g1999u05.bin','us_noaa_g1999u05.tif','g1999u05.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u05.tif',1,1,NULL), ('g1999u06.bin','us_noaa_g1999u06.tif','g1999u06.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u06.tif',1,1,NULL), ('g1999u07.bin','us_noaa_g1999u07.tif','g1999u07.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u07.tif',1,1,NULL), ('g1999u08.bin','us_noaa_g1999u08.tif','g1999u08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u08.tif',1,1,NULL), -- US GEOID03 height models. Not mapped: Alaska: g2003a01.gtx to g2003a04.gtx. Hawaii: g2003h01.gtx. Puerto Rico: g2003p01.gtx ('NOT-YET-IN-GRID-TRANSFORMATION-g2003a01.bin','us_noaa_g2003a01.tif','g2003a01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a01.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g2003a02.bin','us_noaa_g2003a02.tif','g2003a02.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a02.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g2003a03.bin','us_noaa_g2003a03.tif','g2003a03.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a03.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g2003a04.bin','us_noaa_g2003a04.tif','g2003a04.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a04.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g2003p01.bin','us_noaa_g2003p01.tif','g2003p01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003p01.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g2003h01.bin','us_noaa_g2003h01.tif','g2003h01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003h01.tif',1,1,NULL),('geoid03_conus.bin','us_noaa_geoid03_conus.tif','geoid03_conus.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_geoid03_conus.tif',1,1,NULL), -- US GEOID06 height models ('geoid06_ak.bin','us_noaa_geoid06_ak.tif','geoid06_ak.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_geoid06_ak.tif',1,1,NULL), -- US GEOID09 height models.Not mapped: Hawaii: g2009h01.gtx ('geoid09_ak.bin','us_noaa_geoid09_ak.tif','geoid09_ak.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_geoid09_ak.tif',1,1,NULL), ('geoid09_conus.bin','us_noaa_geoid09_conus.tif','geoid09_conus.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_geoid09_conus.tif',1,1,NULL), ('g2009g01.bin','us_noaa_g2009g01.tif','g2009g01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009g01.tif',1,1,NULL), ('g2009s01.bin','us_noaa_g2009s01.tif','g2009s01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009s01.tif',1,1,NULL), ('g2009p01.bin','us_noaa_g2009p01.tif','g2009p01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009p01.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-g2009h01.bin','us_noaa_g2009h01.tif','g2009h01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009h01.tif',1,1,NULL), -- US GEOID12B height models -- CONUS ('g2012bu0.bin','us_noaa_g2012bu0.tif','g2012bu0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bu0.tif',1,1,NULL), -- Alaska ('g2012ba0.bin','us_noaa_g2012ba0.tif','g2012ba0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012ba0.tif',1,1,NULL), -- Puerto Rico ('g2012bp0.bin','us_noaa_g2012bp0.tif','g2012bp0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bp0.tif',1,1,NULL), -- Guam ('g2012bg0.bin','us_noaa_g2012bg0.tif','g2012bg0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bg0.tif',1,1,NULL), -- American Samoa ('g2012bs0.bin','us_noaa_g2012bs0.tif','g2012bs0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bs0.tif',1,1,NULL), -- Hawaii ('NOT-YET-IN-GRID-TRANSFORMATION-g2012bh0.bin','us_noaa_g2012bh0.tif','g2012bh0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bh0.tif',1,1,NULL), -- US GEOID18 height models ('g2018u0.bin','us_noaa_g2018u0.tif','g2018u0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2018u0.tif',1,1,NULL), ('g2018p0.bin','us_noaa_g2018p0.tif','g2018p0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2018p0.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_flhpgn.tif','us_noaa_flhpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_flhpgn.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_mdhpgn.tif','us_noaa_mdhpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_mdhpgn.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_tnhpgn.tif','us_noaa_tnhpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_tnhpgn.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_wihpgn.tif','us_noaa_wihpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_wihpgn.tif',1,1,NULL), ('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_wohpgn.tif','us_noaa_wohpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_wohpgn.tif',1,1,NULL), -- za_cdngi - Chief Directorate: National Geospatial Information (CD:NGI) South Africa ('SAGEOID2010.dat','za_cdngi_sageoid2010.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/za_cdngi_sageoid2010.tif',1,1,NULL) ; proj-9.6.0/data/sql/grid_alternatives_generated_noaa.sql000664 001754 001755 00000200730 14764566077 023376 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_grid_alternatives_generated_noaa.py. DO NOT EDIT ! -- NADCON (NAD27 -> NAD83) entries INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('conus.las', 'us_noaa_conus.tif', 'conus', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_conus.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('alaska.las', 'us_noaa_alaska.tif', 'alaska', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_alaska.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('hawaii.las', 'us_noaa_hawaii.tif', 'hawaii', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_hawaii.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('prvi.las', 'us_noaa_prvi.tif', 'prvi', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_prvi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('stgeorge.las', 'us_noaa_stgeorge.tif', 'stgeorge', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_stgeorge.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('stlrnc.las', 'us_noaa_stlrnc.tif', 'stlrnc', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_stlrnc.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('stpaul.las', 'us_noaa_stpaul.tif', 'stpaul', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_stpaul.tif', 1, 1, NULL); -- NAD83 -> NAD83(HPGN) entries INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('alhpgn.las', 'us_noaa_alhpgn.tif', 'alhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_alhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('arhpgn.las', 'us_noaa_arhpgn.tif', 'arhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_arhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('azhpgn.las', 'us_noaa_azhpgn.tif', 'azhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_azhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('cnhpgn.las', 'us_noaa_cnhpgn.tif', 'cnhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_cnhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('cohpgn.las', 'us_noaa_cohpgn.tif', 'cohpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_cohpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('cshpgn.las', 'us_noaa_cshpgn.tif', 'cshpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_cshpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('emhpgn.las', 'us_noaa_emhpgn.tif', 'emhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_emhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('eshpgn.las', 'us_noaa_eshpgn.tif', 'eshpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_eshpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('ethpgn.las', 'us_noaa_ethpgn.tif', 'ethpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_ethpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('flhpgn.las', 'us_noaa_FL.tif', 'FL', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_FL.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('gahpgn.las', 'us_noaa_gahpgn.tif', 'gahpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_gahpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('guhpgn.las', 'us_noaa_guhpgn.tif', 'guhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_guhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('hihpgn.las', 'us_noaa_hihpgn.tif', 'hihpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_hihpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('iahpgn.las', 'us_noaa_iahpgn.tif', 'iahpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_iahpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('ilhpgn.las', 'us_noaa_ilhpgn.tif', 'ilhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_ilhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('inhpgn.las', 'us_noaa_inhpgn.tif', 'inhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_inhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('kshpgn.las', 'us_noaa_kshpgn.tif', 'kshpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_kshpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('kyhpgn.las', 'us_noaa_kyhpgn.tif', 'kyhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_kyhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('lahpgn.las', 'us_noaa_lahpgn.tif', 'lahpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_lahpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('mdhpgn.las', 'us_noaa_MD.tif', 'MD', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_MD.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('mehpgn.las', 'us_noaa_mehpgn.tif', 'mehpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_mehpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('mihpgn.las', 'us_noaa_mihpgn.tif', 'mihpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_mihpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('mnhpgn.las', 'us_noaa_mnhpgn.tif', 'mnhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_mnhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('mohpgn.las', 'us_noaa_mohpgn.tif', 'mohpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_mohpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('mshpgn.las', 'us_noaa_mshpgn.tif', 'mshpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_mshpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nbhpgn.las', 'us_noaa_nbhpgn.tif', 'nbhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nbhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nchpgn.las', 'us_noaa_nchpgn.tif', 'nchpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nchpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('ndhpgn.las', 'us_noaa_ndhpgn.tif', 'ndhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_ndhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nehpgn.las', 'us_noaa_nehpgn.tif', 'nehpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nehpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('njhpgn.las', 'us_noaa_njhpgn.tif', 'njhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_njhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nmhpgn.las', 'us_noaa_nmhpgn.tif', 'nmhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nmhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nvhpgn.las', 'us_noaa_nvhpgn.tif', 'nvhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nvhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nyhpgn.las', 'us_noaa_nyhpgn.tif', 'nyhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nyhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('ohhpgn.las', 'us_noaa_ohhpgn.tif', 'ohhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_ohhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('okhpgn.las', 'us_noaa_okhpgn.tif', 'okhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_okhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('pahpgn.las', 'us_noaa_pahpgn.tif', 'pahpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_pahpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('pvhpgn.las', 'us_noaa_pvhpgn.tif', 'pvhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_pvhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('schpgn.las', 'us_noaa_schpgn.tif', 'schpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_schpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('sdhpgn.las', 'us_noaa_sdhpgn.tif', 'sdhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_sdhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('tnhpgn.las', 'us_noaa_TN.tif', 'TN', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_TN.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('uthpgn.las', 'us_noaa_uthpgn.tif', 'uthpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_uthpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('vahpgn.las', 'us_noaa_vahpgn.tif', 'vahpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_vahpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('wihpgn.las', 'us_noaa_WI.tif', 'WI', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_WI.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('wmhpgn.las', 'us_noaa_wmhpgn.tif', 'wmhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_wmhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('wohpgn.las', 'us_noaa_WO.tif', 'WO', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_WO.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('wshpgn.las', 'us_noaa_wshpgn.tif', 'wshpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_wshpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('wthpgn.las', 'us_noaa_wthpgn.tif', 'wthpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_wthpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('wvhpgn.las', 'us_noaa_wvhpgn.tif', 'wvhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_wvhpgn.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('wyhpgn.las', 'us_noaa_wyhpgn.tif', 'wyhpgn.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_wyhpgn.tif', 1, 1, NULL); -- NADCON5 entries INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.as62.nad83_1993.as.lat.trn.20160901.b', 'us_noaa_nadcon5_as62_nad83_1993_as.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_as62_nad83_1993_as.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.gu63.nad83_1993.guamcnmi.lat.trn.20160901.b', 'us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_gu63_nad83_1993_guamcnmi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad27.nad83_1986.alaska.lat.trn.20160901.b', 'us_noaa_nadcon5_nad27_nad83_1986_alaska.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad27_nad83_1986_alaska.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad27.nad83_1986.conus.lat.trn.20160901.b', 'us_noaa_nadcon5_nad27_nad83_1986_conus.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad27_nad83_1986_conus.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1986.nad83_1992.alaska.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1986_nad83_1992_alaska.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1986.nad83_1993.hawaii.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1986_nad83_1993_hawaii.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1986.nad83_1993.prvi.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1986_nad83_1993_prvi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1986.nad83_harn.conus.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1992.nad83_2007.alaska.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1992_nad83_2007_alaska.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1993.nad83_1997.prvi.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1993_nad83_1997_prvi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1993.nad83_2002.as.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1993_nad83_2002_as.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1993.nad83_2002.guamcnmi.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1993_nad83_2002_guamcnmi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1993.nad83_pa11.hawaii.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1993_nad83_pa11_hawaii.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_1997.nad83_2002.prvi.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_1997_nad83_2002_prvi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_2002.nad83_2007.prvi.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_2002_nad83_2007_prvi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_2002.nad83_ma11.guamcnmi.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_2002_nad83_ma11_guamcnmi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_2002.nad83_pa11.as.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_2002_nad83_pa11_as.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_2007.nad83_2011.alaska.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_2007_nad83_2011_alaska.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_2007.nad83_2011.conus.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_2007_nad83_2011_conus.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_2007.nad83_2011.prvi.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_2007_nad83_2011_prvi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_fbn.nad83_2007.conus.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_fbn_nad83_2007_conus.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.nad83_harn.nad83_fbn.conus.lat.trn.20160901.b', 'us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.ohd.nad83_1986.hawaii.lat.trn.20160901.b', 'us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_ohd_nad83_1986_hawaii.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.pr40.nad83_1986.prvi.lat.trn.20160901.b', 'us_noaa_nadcon5_pr40_nad83_1986_prvi.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_pr40_nad83_1986_prvi.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.sg1952.nad83_1986.stgeorge.lat.trn.20160901.b', 'us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_sg1952_nad83_1986_stgeorge.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.sl1952.nad83_1986.stlawrence.lat.trn.20160901.b', 'us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_sl1952_nad83_1986_stlawrence.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('nadcon5.sp1952.nad83_1986.stpaul.lat.trn.20160901.b', 'us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif', NULL, 'GTiff', 'gridshift', 0, NULL, 'https://cdn.proj.org/us_noaa_nadcon5_sp1952_nad83_1986_stpaul.tif', 1, 1, NULL); proj-9.6.0/data/sql/grid_transformation.sql000664 001754 001755 00002000716 14764566077 020733 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "grid_transformation" VALUES('EPSG','1068','Guam 1963 to NAD83(HARN) (1)','NADCON method which expects longitudes positive west; EPSG GeogCRSs Guam 1963 and NAD83(HARN) (codes 4675 and 4152) have longitudes positive east. Can be used as approximation for tfm between Guam 1963 and WGS 84 - see tfm code 1069.','EPSG','9613','NADCON','EPSG','4675','EPSG','4152',5.0,'EPSG','8657','Latitude difference file','guhpgn.las','EPSG','8658','Longitude difference file','guhpgn.los',NULL,NULL,'NGS-Gum',0); INSERT INTO "usage" VALUES('EPSG','7989','grid_transformation','EPSG','1068','EPSG','3255','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1069','Guam 1963 to WGS 84 (2)','Parameter files are from Guam 1963 to NAD83(HARN) (1) (code 1068), but for many purposes NAD83(HARN) can be considered to be coincident with WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4675','EPSG','4326',5.0,'EPSG','8657','Latitude difference file','guhpgn.las','EPSG','8658','Longitude difference file','guhpgn.los',NULL,NULL,'EPSG-Gum',0); INSERT INTO "usage" VALUES('EPSG','7990','grid_transformation','EPSG','1069','EPSG','3255','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1241','NAD27 to NAD83 (1)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east. For application in Gulf of Mexico refer to IOGP report 373-26.','EPSG','9613','NADCON','EPSG','4267','EPSG','4269',0.15,'EPSG','8657','Latitude difference file','conus.las','EPSG','8658','Longitude difference file','conus.los',NULL,NULL,'NGS-Usa Conus',0); INSERT INTO "usage" VALUES('EPSG','8162','grid_transformation','EPSG','1241','EPSG','2374','EPSG','1032'); INSERT INTO "grid_transformation" VALUES('EPSG','1243','NAD27 to NAD83 (2)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east. May be used as transformation to WGS 84 - see NAD27 to WGS 84 (85) (code 15864).','EPSG','9613','NADCON','EPSG','4267','EPSG','4269',0.5,'EPSG','8657','Latitude difference file','alaska.las','EPSG','8658','Longitude difference file','alaska.los',NULL,NULL,'NGS-Usa AK',0); INSERT INTO "usage" VALUES('EPSG','8164','grid_transformation','EPSG','1243','EPSG','2373','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1295','RGNC91-93 to NEA74 Noumea (4)','Emulation using NTv2 method of tfm NEA74 Noumea to RGNC91-93 (3) (code 15943). Note reversal of sign of parameter values in grid file.','EPSG','9615','NTv2','EPSG','4749','EPSG','4644',0.05,'EPSG','8656','Latitude and longitude difference file','RGNC1991_NEA74Noumea.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.05m',0); INSERT INTO "usage" VALUES('EPSG','8216','grid_transformation','EPSG','1295','EPSG','2823','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1312','NAD27 to NAD83 (3)','Uses NTv1 method. Replaced in Quebec by code 1462 and elsewhere in 1997 by NTv2 (transformation code 1313). Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east.','EPSG','9614','NTv1','EPSG','4267','EPSG','4269',1.0,'EPSG','8656','Latitude and longitude difference file','NTv1_0.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GC-Can NT1',0); INSERT INTO "usage" VALUES('EPSG','8233','grid_transformation','EPSG','1312','EPSG','4517','EPSG','1197'); INSERT INTO "grid_transformation" VALUES('EPSG','1313','NAD27 to NAD83 (4)','Uses NTv2 data files. Replaces NTv1 (transformation code 1312) except in Quebec. Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and (code 4269) have longitudes positive east. May be used as tfm to WGS 84 - see code 1693.','EPSG','9615','NTv2','EPSG','4267','EPSG','4269',1.5,'EPSG','8656','Latitude and longitude difference file','NTv2_0.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GC-Can NT2',0); INSERT INTO "usage" VALUES('EPSG','8234','grid_transformation','EPSG','1313','EPSG','4517','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1451','NAD27(CGQ77) to NAD83 (1)','Replaced by NAD27(CGQ77) to NAD83 (2) (code 1575). Uses NT method which expects longitudes positive west; EPSG GeogCRSs CGQ77 (code 4609) and NAD83 (code 4269) have longitudes positive east.','EPSG','9614','NTv1','EPSG','4609','EPSG','4269',1.0,'EPSG','8656','Latitude and longitude difference file','PQV4.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT1',0); INSERT INTO "usage" VALUES('EPSG','8372','grid_transformation','EPSG','1451','EPSG','1368','EPSG','1197'); INSERT INTO "grid_transformation" VALUES('EPSG','1454','Old Hawaiian to NAD83 (1)','Accuracy 0.2m at 67% confidence level. Uses NADCON method which expects longitudes positive west; source and target CRSs have longitudes positive east. NADCON converts from Old Hawaiian Datum but makes the transformation appear to be from NAD27.','EPSG','9613','NADCON','EPSG','4135','EPSG','4269',0.2,'EPSG','8657','Latitude difference file','hawaii.las','EPSG','8658','Longitude difference file','hawaii.los',NULL,NULL,'NGS-Usa HI',0); INSERT INTO "usage" VALUES('EPSG','8375','grid_transformation','EPSG','1454','EPSG','1334','EPSG','1032'); INSERT INTO "grid_transformation" VALUES('EPSG','1455','St. Lawrence Island to NAD83 (1)','Accuracy 0.5m at 67% confidence level. Uses NADCON method which expects longitudes positive west; source and target CRSs have longitudes positive east. NADCON data converts from St. Lawrence Datum but makes the transformation appear to be from NAD27.','EPSG','9613','NADCON','EPSG','4136','EPSG','4269',0.5,'EPSG','8657','Latitude difference file','stlrnc.las','EPSG','8658','Longitude difference file','stlrnc.los',NULL,NULL,'NGS-Usa AK StL',0); INSERT INTO "usage" VALUES('EPSG','8376','grid_transformation','EPSG','1455','EPSG','1332','EPSG','1035'); INSERT INTO "grid_transformation" VALUES('EPSG','1456','St. Paul Island to NAD83 (1)','Accuracy 0.5m at 67% confidence level. Uses NADCON method which expects longitudes positive west; source and target CRSs have longitudes positive east. NADCON converts from St. Paul Datum but makes the transformation appear to be from NAD27.','EPSG','9613','NADCON','EPSG','4137','EPSG','4269',0.5,'EPSG','8657','Latitude difference file','stpaul.las','EPSG','8658','Longitude difference file','stpaul.los',NULL,NULL,'NGS-Usa AK StP',0); INSERT INTO "usage" VALUES('EPSG','8377','grid_transformation','EPSG','1456','EPSG','1333','EPSG','1035'); INSERT INTO "grid_transformation" VALUES('EPSG','1457','St. George Island to NAD83 (1)','Accuracy 0.5m at 67% confidence level. Uses NADCON method which expects longitudes positive west; source and target CRSs have longitudes positive east. NADCON converts from St. George Datum but makes the transformation appear to be from NAD27.','EPSG','9613','NADCON','EPSG','4138','EPSG','4269',0.5,'EPSG','8657','Latitude difference file','stgeorge.las','EPSG','8658','Longitude difference file','stgeorge.los',NULL,NULL,'NGS-Usa AK StG',0); INSERT INTO "usage" VALUES('EPSG','8378','grid_transformation','EPSG','1457','EPSG','1331','EPSG','1035'); INSERT INTO "grid_transformation" VALUES('EPSG','1461','Puerto Rico to NAD83 (1)','Accuracy 0.05m at 67% confidence level. May be taken as approximate transformation Puerto Rico-WGS 84 - see code 15841.','EPSG','9613','NADCON','EPSG','4139','EPSG','4269',0.05,'EPSG','8657','Latitude difference file','prvi.las','EPSG','8658','Longitude difference file','prvi.los',NULL,NULL,'NGS-PRVI',0); INSERT INTO "usage" VALUES('EPSG','8382','grid_transformation','EPSG','1461','EPSG','1335','EPSG','1079'); INSERT INTO "grid_transformation" VALUES('EPSG','1462','NAD27 to NAD83 (5)','Densification for Quebec of code 1312. Replaced by NAD27 to NAD83 (6) (code 1573). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east.','EPSG','9614','NTv1','EPSG','4267','EPSG','4269',1.0,'EPSG','8656','Latitude and longitude difference file','GS2783v1.QUE',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT1',0); INSERT INTO "usage" VALUES('EPSG','8383','grid_transformation','EPSG','1462','EPSG','1368','EPSG','1197'); INSERT INTO "grid_transformation" VALUES('EPSG','1463','NAD27(76) to NAD83 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(76) (code 4608) and NAD83 (code 4269) have longitudes positive east. May be taken as approximate transformation NAD27(76) to WGS 84 - see code 1690.','EPSG','9615','NTv2','EPSG','4608','EPSG','4269',1.0,'EPSG','8656','Latitude and longitude difference file','May76v20.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can Ont',0); INSERT INTO "usage" VALUES('EPSG','8384','grid_transformation','EPSG','1463','EPSG','1367','EPSG','1024'); INSERT INTO "grid_transformation" VALUES('EPSG','1464','AGD66 to GDA94 (5)','Replaced by AGD66 to GDA94 (10) (code 1596) and then by AGD66 to GDA94 (11) (code 1803). Input expects longitudes to be positive west; EPSG GeogCRS AGD66 (code 4202) and GDA94 (code 4283) both have longitudes positive east.','EPSG','9615','NTv2','EPSG','4202','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','vic_0799.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Aus Vic old',0); INSERT INTO "usage" VALUES('EPSG','8385','grid_transformation','EPSG','1464','EPSG','2285','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','1472','ATS77 to NAD83(CSRS98) (1)','Introduced in 1999. Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1688.','EPSG','9615','NTv2','EPSG','4122','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','NB7783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GIC-Can NB',1); INSERT INTO "usage" VALUES('EPSG','8393','grid_transformation','EPSG','1472','EPSG','1447','EPSG','1025'); INSERT INTO "grid_transformation" VALUES('EPSG','1474','NAD83 to NAD83(HARN) (1)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1717.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','alhpgn.las','EPSG','8658','Longitude difference file','alhpgn.los',NULL,NULL,'NGS-Usa AL',0); INSERT INTO "usage" VALUES('EPSG','8395','grid_transformation','EPSG','1474','EPSG','1372','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1475','NAD83 to NAD83(HARN) (2)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1728.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','azhpgn.las','EPSG','8658','Longitude difference file','azhpgn.los',NULL,NULL,'NGS-Usa AZ',0); INSERT INTO "usage" VALUES('EPSG','8396','grid_transformation','EPSG','1475','EPSG','1373','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1476','NAD83 to NAD83(HARN) (3)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1739.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','cnhpgn.las','EPSG','8658','Longitude difference file','cnhpgn.los',NULL,NULL,'NGS-Usa CA n',0); INSERT INTO "usage" VALUES('EPSG','8397','grid_transformation','EPSG','1476','EPSG','2297','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1477','NAD83 to NAD83(HARN) (4)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1750.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','cshpgn.las','EPSG','8658','Longitude difference file','cshpgn.los',NULL,NULL,'NGS-Usa CA s',0); INSERT INTO "usage" VALUES('EPSG','8398','grid_transformation','EPSG','1477','EPSG','2298','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1478','NAD83 to NAD83(HARN) (5)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1712.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','cohpgn.las','EPSG','8658','Longitude difference file','cohpgn.los',NULL,NULL,'NGS-Usa CO',0); INSERT INTO "usage" VALUES('EPSG','8399','grid_transformation','EPSG','1478','EPSG','1376','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1479','NAD83 to NAD83(HARN) (6)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1713.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','gahpgn.las','EPSG','8658','Longitude difference file','gahpgn.los',NULL,NULL,'NGS-Usa GA',0); INSERT INTO "usage" VALUES('EPSG','8400','grid_transformation','EPSG','1479','EPSG','1380','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1480','NAD83 to NAD83(HARN) (7)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1714.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','flhpgn.las','EPSG','8658','Longitude difference file','flhpgn.los',NULL,NULL,'NGS-Usa FL',0); INSERT INTO "usage" VALUES('EPSG','8401','grid_transformation','EPSG','1480','EPSG','1379','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1481','NAD83 to NAD83(HARN) (8)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1715.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','emhpgn.las','EPSG','8658','Longitude difference file','emhpgn.los',NULL,NULL,'NGS-Usa ID MT e',0); INSERT INTO "usage" VALUES('EPSG','8402','grid_transformation','EPSG','1481','EPSG','2382','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1482','NAD83 to NAD83(HARN) (9)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1716.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','wmhpgn.las','EPSG','8658','Longitude difference file','wmhpgn.los',NULL,NULL,'NGS-Usa ID MT w',0); INSERT INTO "usage" VALUES('EPSG','8403','grid_transformation','EPSG','1482','EPSG','2383','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1483','NAD83 to NAD83(HARN) (10)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1718.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','kyhpgn.las','EPSG','8658','Longitude difference file','kyhpgn.los',NULL,NULL,'NGS-Usa KY',0); INSERT INTO "usage" VALUES('EPSG','8404','grid_transformation','EPSG','1483','EPSG','1386','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1484','NAD83 to NAD83(HARN) (11)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1719.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','lahpgn.las','EPSG','8658','Longitude difference file','lahpgn.los',NULL,NULL,'NGS-Usa LA',0); INSERT INTO "usage" VALUES('EPSG','8405','grid_transformation','EPSG','1484','EPSG','1387','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1485','NAD83 to NAD83(HARN) (12)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1720.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','mdhpgn.las','EPSG','8658','Longitude difference file','mdhpgn.los',NULL,NULL,'NGS-Usa DE MD',0); INSERT INTO "usage" VALUES('EPSG','8406','grid_transformation','EPSG','1485','EPSG','2377','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1486','NAD83 to NAD83(HARN) (13)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1721.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','mehpgn.las','EPSG','8658','Longitude difference file','mehpgn.los',NULL,NULL,'NGS-Usa ME',0); INSERT INTO "usage" VALUES('EPSG','8407','grid_transformation','EPSG','1486','EPSG','1388','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1487','NAD83 to NAD83(HARN) (14)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1722.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','mihpgn.las','EPSG','8658','Longitude difference file','mihpgn.los',NULL,NULL,'NGS-Usa MI',0); INSERT INTO "usage" VALUES('EPSG','8408','grid_transformation','EPSG','1487','EPSG','1391','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1488','NAD83 to NAD83(HARN) (15)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1723.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','mshpgn.las','EPSG','8658','Longitude difference file','mshpgn.los',NULL,NULL,'NGS-Usa MS',0); INSERT INTO "usage" VALUES('EPSG','8409','grid_transformation','EPSG','1488','EPSG','1393','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1489','NAD83 to NAD83(HARN) (16)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1724.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nbhpgn.las','EPSG','8658','Longitude difference file','nbhpgn.los',NULL,NULL,'NGS-Usa NE',0); INSERT INTO "usage" VALUES('EPSG','8410','grid_transformation','EPSG','1489','EPSG','1396','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1490','NAD83 to NAD83(HARN) (17)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1725.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nehpgn.las','EPSG','8658','Longitude difference file','nehpgn.los',NULL,NULL,'NGS-Usa NewEng',0); INSERT INTO "usage" VALUES('EPSG','8411','grid_transformation','EPSG','1490','EPSG','2378','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1491','NAD83 to NAD83(HARN) (18)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1726.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nmhpgn.las','EPSG','8658','Longitude difference file','nmhpgn.los',NULL,NULL,'NGS-Usa NM',0); INSERT INTO "usage" VALUES('EPSG','8412','grid_transformation','EPSG','1491','EPSG','1400','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1492','NAD83 to NAD83(HARN) (19)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1727.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nyhpgn.las','EPSG','8658','Longitude difference file','nyhpgn.los',NULL,NULL,'NGS-Usa NY',0); INSERT INTO "usage" VALUES('EPSG','8413','grid_transformation','EPSG','1492','EPSG','1401','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1493','NAD83 to NAD83(HARN) (20)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1729.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','ndhpgn.las','EPSG','8658','Longitude difference file','ndhpgn.los',NULL,NULL,'NGS-Usa ND',0); INSERT INTO "usage" VALUES('EPSG','8414','grid_transformation','EPSG','1493','EPSG','1403','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1494','NAD83 to NAD83(HARN) (21)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1730.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','okhpgn.las','EPSG','8658','Longitude difference file','okhpgn.los',NULL,NULL,'NGS-Usa OK',0); INSERT INTO "usage" VALUES('EPSG','8415','grid_transformation','EPSG','1494','EPSG','1405','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1495','NAD83 to NAD83(HARN) (22)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1731.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','pvhpgn.las','EPSG','8658','Longitude difference file','pvhpgn.los',NULL,NULL,'NGS-PRVI',0); INSERT INTO "usage" VALUES('EPSG','8416','grid_transformation','EPSG','1495','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1496','NAD83 to NAD83(HARN) (23)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1732.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','sdhpgn.las','EPSG','8658','Longitude difference file','sdhpgn.los',NULL,NULL,'NGS-Usa SD',0); INSERT INTO "usage" VALUES('EPSG','8417','grid_transformation','EPSG','1496','EPSG','1410','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1497','NAD83 to NAD83(HARN) (24)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1733.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','tnhpgn.las','EPSG','8658','Longitude difference file','tnhpgn.los',NULL,NULL,'NGS-Usa TN',0); INSERT INTO "usage" VALUES('EPSG','8418','grid_transformation','EPSG','1497','EPSG','1411','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1498','NAD83 to NAD83(HARN) (25)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1734.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','ethpgn.las','EPSG','8658','Longitude difference file','ethpgn.los',NULL,NULL,'NGS-Usa TX e',0); INSERT INTO "usage" VALUES('EPSG','8419','grid_transformation','EPSG','1498','EPSG','2379','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1499','NAD83 to NAD83(HARN) (26)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1735.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','wthpgn.las','EPSG','8658','Longitude difference file','wthpgn.los',NULL,NULL,'NGS-Usa TX w',0); INSERT INTO "usage" VALUES('EPSG','8420','grid_transformation','EPSG','1499','EPSG','2380','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1500','NAD83 to NAD83(HARN) (27)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1736.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','vahpgn.las','EPSG','8658','Longitude difference file','vahpgn.los',NULL,NULL,'NGS-Usa VA',0); INSERT INTO "usage" VALUES('EPSG','8421','grid_transformation','EPSG','1500','EPSG','1415','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1501','NAD83 to NAD83(HARN) (28)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1737.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','wohpgn.las','EPSG','8658','Longitude difference file','wohpgn.los',NULL,NULL,'NGS-Usa OR WA',0); INSERT INTO "usage" VALUES('EPSG','8422','grid_transformation','EPSG','1501','EPSG','2381','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1502','NAD83 to NAD83(HARN) (29)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1738.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','wihpgn.las','EPSG','8658','Longitude difference file','wihpgn.los',NULL,NULL,'NGS-Usa WI',0); INSERT INTO "usage" VALUES('EPSG','8423','grid_transformation','EPSG','1502','EPSG','1418','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1503','NAD83 to NAD83(HARN) (30)','Accuracy 67% confidence level. Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1740.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','wyhpgn.las','EPSG','8658','Longitude difference file','wyhpgn.los',NULL,NULL,'NGS-Usa WY',0); INSERT INTO "usage" VALUES('EPSG','8424','grid_transformation','EPSG','1503','EPSG','1419','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1506','AGD66 to GDA94 (6)','Replaced by AGD66 to GDA94 (11) (code 1803). Input expects longitudes to be positive west; EPSG GeogCRS AGD66 (code 4202) and GDA94 (code 4283) both have longitudes positive east.','EPSG','9615','NTv2','EPSG','4202','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','tas_1098.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Tas 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8427','grid_transformation','EPSG','1506','EPSG','1282','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','1507','AGD66 to GDA94 (7)','Replaced by AGD66 to GDA94 (11) (code 1803). Input expects longitudes to be positive west; EPSG GeogCRS AGD66 (code 4202) and GDA94 (code 4283) both have longitudes positive east.','EPSG','9615','NTv2','EPSG','4202','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','nt_0599.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-NT 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8428','grid_transformation','EPSG','1507','EPSG','2284','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','1520','NAD83 to NAD83(HARN) (31)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1741.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','hihpgn.las','EPSG','8658','Longitude difference file','hihpgn.los',NULL,NULL,'NGS-Usa HI',0); INSERT INTO "usage" VALUES('EPSG','8441','grid_transformation','EPSG','1520','EPSG','1334','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1521','NAD83 to NAD83(HARN) (32)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1742.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','inhpgn.las','EPSG','8658','Longitude difference file','inhpgn.los',NULL,NULL,'NGS-Usa IN',0); INSERT INTO "usage" VALUES('EPSG','8442','grid_transformation','EPSG','1521','EPSG','1383','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1522','NAD83 to NAD83(HARN) (33)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1743.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','kshpgn.las','EPSG','8658','Longitude difference file','kshpgn.los',NULL,NULL,'NGS-Usa KS',0); INSERT INTO "usage" VALUES('EPSG','8443','grid_transformation','EPSG','1522','EPSG','1385','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1523','NAD83 to NAD83(HARN) (34)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1744.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nvhpgn.las','EPSG','8658','Longitude difference file','nvhpgn.los',NULL,NULL,'NGS-Usa NV',0); INSERT INTO "usage" VALUES('EPSG','8444','grid_transformation','EPSG','1523','EPSG','1397','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1524','NAD83 to NAD83(HARN) (35)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1745.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','ohhpgn.las','EPSG','8658','Longitude difference file','ohhpgn.los',NULL,NULL,'NGS-Usa OH',0); INSERT INTO "usage" VALUES('EPSG','8445','grid_transformation','EPSG','1524','EPSG','1404','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1525','NAD83 to NAD83(HARN) (36)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1746.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','uthpgn.las','EPSG','8658','Longitude difference file','uthpgn.los',NULL,NULL,'NGS-Usa UT',0); INSERT INTO "usage" VALUES('EPSG','8446','grid_transformation','EPSG','1525','EPSG','1413','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1526','NAD83 to NAD83(HARN) (37)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1747.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','wvhpgn.las','EPSG','8658','Longitude difference file','wvhpgn.los',NULL,NULL,'NGS-Usa WV',0); INSERT INTO "usage" VALUES('EPSG','8447','grid_transformation','EPSG','1526','EPSG','1417','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1553','NAD83 to NAD83(HARN) (38)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1748.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','ilhpgn.las','EPSG','8658','Longitude difference file','ilhpgn.los',NULL,NULL,'NGS-Usa IL',0); INSERT INTO "usage" VALUES('EPSG','8474','grid_transformation','EPSG','1553','EPSG','1382','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1554','NAD83 to NAD83(HARN) (39)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1749.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','njhpgn.las','EPSG','8658','Longitude difference file','njhpgn.los',NULL,NULL,'NGS-Usa NJ',0); INSERT INTO "usage" VALUES('EPSG','8475','grid_transformation','EPSG','1554','EPSG','1399','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1559','AGD84 to GDA94 (3)','Withdrawn and replaced by AGD84 to GDA94 (4) (code 1593) due to binary file format error. Input expects longitudes to be positive west; EPSG GeogCRS AGD84 (code 4203) and GDA94 (code 4283) have longitudes positive east.','EPSG','9615','NTv2','EPSG','4203','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','wa_0400.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'DOLA-Aus WA 0.1m old',1); INSERT INTO "usage" VALUES('EPSG','8480','grid_transformation','EPSG','1559','EPSG','1280','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','1568','NZGD49 to NZGD2000 (3)','These same parameter values may be used to transform to WGS 84 - see NZGD49 to WGS 84 (4) (code 1670).','EPSG','9615','NTv2','EPSG','4272','EPSG','4167',0.2,'EPSG','8656','Latitude and longitude difference file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl 1m',0); INSERT INTO "usage" VALUES('EPSG','8489','grid_transformation','EPSG','1568','EPSG','3285','EPSG','1032'); INSERT INTO "grid_transformation" VALUES('EPSG','1572','NAD83 to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS98) (code 4140) have longitudes positive east. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1696.','EPSG','9615','NTv2','EPSG','4269','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1); INSERT INTO "usage" VALUES('EPSG','8493','grid_transformation','EPSG','1572','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1573','NAD27 to NAD83 (6)','Also distributed with file name QUE27-83.gsb. Replaces NAD27 to NAD83 (5) (code 1462). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east.','EPSG','9615','NTv2','EPSG','4267','EPSG','4269',1.5,'EPSG','8656','Latitude and longitude difference file','NA27NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0); INSERT INTO "usage" VALUES('EPSG','8494','grid_transformation','EPSG','1573','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1574','NAD27 to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83(CSRS98) (code 4140) have longitudes positive east. Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1692.','EPSG','9615','NTv2','EPSG','4267','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','QUE27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1); INSERT INTO "usage" VALUES('EPSG','8495','grid_transformation','EPSG','1574','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1575','NAD27(CGQ77) to NAD83 (2)','Replaces NAD27(CGQ77) to NAD83 (1) (code 1451). Can be taken as approx transformation to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','4269',1.5,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0); INSERT INTO "usage" VALUES('EPSG','8496','grid_transformation','EPSG','1575','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1576','NAD27(CGQ77) to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS98) (code 4140) have 1691longitudes positive east. Can be taken as an approximate transformation NAD27(CGQ77) to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1); INSERT INTO "usage" VALUES('EPSG','8497','grid_transformation','EPSG','1576','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1578','American Samoa 1962 to NAD83(HARN) (1)','NADCON method which expects longitudes positive west; EPSG GeogCRSs American Samoa 1962 and NAD83(HARN) (codes 4169 and 4152) have longitudes positive east. NADCON expects latitudes in northern hemisphere and values must be made positive prior to input.','EPSG','9613','NADCON','EPSG','4169','EPSG','4152',5.0,'EPSG','8657','Latitude difference file','wshpgn.las','EPSG','8658','Longitude difference file','wshpgn.los',NULL,NULL,'NGS-Asm W',0); INSERT INTO "usage" VALUES('EPSG','8499','grid_transformation','EPSG','1578','EPSG','2288','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1579','American Samoa 1962 to NAD83(HARN) (2)','NADCON method which expects longitudes positive west; EPSG GeogCRSs American Samoa 1962 and NAD83(HARN) (codes 4169 and 4152) have longitudes positive east. NADCON expects latitudes in northern hemisphere and values must be made positive prior to input.','EPSG','9613','NADCON','EPSG','4169','EPSG','4152',5.0,'EPSG','8657','Latitude difference file','eshpgn.las','EPSG','8658','Longitude difference file','eshpgn.los',NULL,NULL,'NGS-Asm E',0); INSERT INTO "usage" VALUES('EPSG','8500','grid_transformation','EPSG','1579','EPSG','2289','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1593','AGD84 to GDA94 (4)','Replaces AGD84 to GDA94 (3) (code 1559) and then replaced by AGD84 to GDA94 (5) (code 1804). Input expects longitudes to be positive west; EPSG GeogCRS AGD84 (code 4203) and GDA94 (code 4283) both have longitudes positive east.','EPSG','9615','NTv2','EPSG','4203','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','wa_0700.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'DOLA-Aus WA 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8514','grid_transformation','EPSG','1593','EPSG','1280','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','1596','AGD66 to GDA94 (10)','Replaces AGD66 to GDA94 (5) (code 1464). Replaced by AGD66 to GDA94 (11) (code 1803). Input expects longitudes to be positive west; EPSG GeogCRS AGD66 (code 4202) and GDA94 (code 4283) both have longitudes positive east.','EPSG','9615','NTv2','EPSG','4202','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','SEAust_21_06_00.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Aus SE 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8517','grid_transformation','EPSG','1596','EPSG','2287','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','1599','ATS77 to NAD83(CSRS98) (2)','Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1689.','EPSG','9615','NTv2','EPSG','4122','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','PE7783V2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'PEI DOT-Can PEI',1); INSERT INTO "usage" VALUES('EPSG','8520','grid_transformation','EPSG','1599','EPSG','1533','EPSG','1025'); INSERT INTO "grid_transformation" VALUES('EPSG','1600','NAD27 to NAD83(CSRS98) (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','8521','grid_transformation','EPSG','1600','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1601','NAD83 to NAD83(CSRS98) (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','8522','grid_transformation','EPSG','1601','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1602','NAD83 to NAD83(CSRS98) (3)','This gridded difference file AB_CSRS.DAC will need to be renamed to AB_CSRS.gsb to run in some software suites. Formats identical, but AB file is provincial fit only.','EPSG','9615','NTv2','EPSG','4267','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'AB Env-Can AB',1); INSERT INTO "usage" VALUES('EPSG','8523','grid_transformation','EPSG','1602','EPSG','2376','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1670','NZGD49 to WGS 84 (3)','Parameter file is from NZGD49 to NZGD2000 (3) (code 1568) and assumes WGS 84 is coincident with NZGD2000 to the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4272','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Nzl 1m',0); INSERT INTO "usage" VALUES('EPSG','8591','grid_transformation','EPSG','1670','EPSG','3285','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1688','ATS77 to WGS 84 (1)','Parameter file is from ATS77 to NAD83(CSRS)v2 (1) (code 9237) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4122','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','NB7783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can NB',0); INSERT INTO "usage" VALUES('EPSG','8609','grid_transformation','EPSG','1688','EPSG','1447','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1689','ATS77 to WGS 84 (2)','Parameter file is from ATS77 to NAD83(CSRS)v2 (2) (code 9236) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4122','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','PE7783V2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can PEI',0); INSERT INTO "usage" VALUES('EPSG','8610','grid_transformation','EPSG','1689','EPSG','1533','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1690','NAD27(76) to WGS 84 (1)','Parameter file is from NAD27(76) to NAD83 (1) (code 1463) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4608','EPSG','4326',2.0,'EPSG','8656','Latitude and longitude difference file','May76v20.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can On',0); INSERT INTO "usage" VALUES('EPSG','8611','grid_transformation','EPSG','1690','EPSG','1367','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1691','NAD27(CGQ77) to WGS 84 (3)','Parameter file is from NAD27(CGQ77) to NAD83 (2) (code 1575) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4609','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can Qc NT2',0); INSERT INTO "usage" VALUES('EPSG','8612','grid_transformation','EPSG','1691','EPSG','1368','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1692','NAD27 to WGS 84 (34)','Parameter file is from NAD27 to NAD83(CSRS)v2 (1) (code 9239) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation. Also distributed as QUE27-98.gsb.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','NA27SCRS.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0); INSERT INTO "usage" VALUES('EPSG','8613','grid_transformation','EPSG','1692','EPSG','1368','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1693','NAD27 to WGS 84 (33)','Parameter file is from NAD27 to NAD83 (4) (code 1313) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326',2.0,'EPSG','8656','Latitude and longitude difference file','NTv2_0.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can',0); INSERT INTO "usage" VALUES('EPSG','8614','grid_transformation','EPSG','1693','EPSG','4517','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1694','American Samoa 1962 to WGS 84 (2)','Parameter files are from American Samoa 1962 to NAD83(HARN) (1) (code 1578), but for many purposes NAD83(HARN) can be considered to be coincident with WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4169','EPSG','4326',5.0,'EPSG','8657','Latitude difference file','wshpgn.las','EPSG','8658','Longitude difference file','wshpgn.los',NULL,NULL,'EPSG-Asm W',0); INSERT INTO "usage" VALUES('EPSG','8615','grid_transformation','EPSG','1694','EPSG','2288','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1695','American Samoa 1962 to WGS 84 (3)','Parameter files are from American Samoa 1962 to NAD83(HARN) (2) (code 1579), but for many purposes NAD83(HARN) can be considered to be coincident with WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4169','EPSG','4326',5.0,'EPSG','8657','Latitude difference file','eshpgn.las','EPSG','8658','Longitude difference file','eshpgn.los',NULL,NULL,'EPSG-Asm E',0); INSERT INTO "usage" VALUES('EPSG','8616','grid_transformation','EPSG','1695','EPSG','2289','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1696','NAD83 to WGS 84 (6)','Parameter file is from NAD83 to NAD83(CSRS)v2 (1) (code 9241) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation. Also distributed with file name NAD83-98.gsb.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','NA83SCRS.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0); INSERT INTO "usage" VALUES('EPSG','8617','grid_transformation','EPSG','1696','EPSG','1368','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1697','NAD83 to WGS 84 (7)','Parameter file is from NAD83 to NAD83(CSRS)v2 (2) (code 9887) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can SK',0); INSERT INTO "usage" VALUES('EPSG','8618','grid_transformation','EPSG','1697','EPSG','2375','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1698','St. George Island to WGS 84 (1)','Parameter files are from St. George Island to NAD83 (1) (code 1457) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4138','EPSG','4326',1.5,'EPSG','8657','Latitude difference file','stgeorge.las','EPSG','8658','Longitude difference file','stgeorge.los',NULL,NULL,'EPSG-Usa AK StG',0); INSERT INTO "usage" VALUES('EPSG','8619','grid_transformation','EPSG','1698','EPSG','1331','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1699','St. Lawrence Island to WGS 84 (1)','Parameter files are from St. Lawrence Island to NAD83 (1) (code 1455) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4136','EPSG','4326',1.5,'EPSG','8657','Latitude difference file','stlrnc.las','EPSG','8658','Longitude difference file','stlrnc.los',NULL,NULL,'EPSG-Usa AK StL',0); INSERT INTO "usage" VALUES('EPSG','8620','grid_transformation','EPSG','1699','EPSG','1332','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1700','St. Paul Island to WGS 84 (1)','Parameter files are from St. Paul Island to NAD83 (1) (code 1456) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4137','EPSG','4326',1.5,'EPSG','8657','Latitude difference file','stpaul.las','EPSG','8658','Longitude difference file','stpaul.los',NULL,NULL,'EPSG-Usa AK StP',0); INSERT INTO "usage" VALUES('EPSG','8621','grid_transformation','EPSG','1700','EPSG','1333','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1702','NAD83 to WGS 84 (8)','Parameter file is from NAD83 to NAD83(CSRS)v4 (3) (code 9244) assuming that NAD83(CSRS)v4 is equivalent to WGS 84 within the accuracy of the transformation. This file AB_CSRS.DAC will need to be renamed to AB_CSRS.gsb to run in some software.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can AB',0); INSERT INTO "usage" VALUES('EPSG','8623','grid_transformation','EPSG','1702','EPSG','2376','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1703','NAD27 to WGS 84 (32)','Parameter file is from NAD27 to NAD83(CSRS)v2 (2) (code 9886) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can SK',0); INSERT INTO "usage" VALUES('EPSG','8624','grid_transformation','EPSG','1703','EPSG','2375','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1704','NAD83 to NAD83(HARN) (40)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1708.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','arhpgn.las','EPSG','8658','Longitude difference file','arhpgn.los',NULL,NULL,'NGS-Usa AR',0); INSERT INTO "usage" VALUES('EPSG','8625','grid_transformation','EPSG','1704','EPSG','1374','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1705','NAD83 to NAD83(HARN) (41)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1709.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','iahpgn.las','EPSG','8658','Longitude difference file','iahpgn.los',NULL,NULL,'NGS-Usa IA',0); INSERT INTO "usage" VALUES('EPSG','8626','grid_transformation','EPSG','1705','EPSG','1384','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1706','NAD83 to NAD83(HARN) (42)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1710.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','mnhpgn.las','EPSG','8658','Longitude difference file','mnhpgn.los',NULL,NULL,'NGS-Usa MN',0); INSERT INTO "usage" VALUES('EPSG','8627','grid_transformation','EPSG','1706','EPSG','1392','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1707','NAD83 to NAD83(HARN) (43)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1711.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','mohpgn.las','EPSG','8658','Longitude difference file','mohpgn.los',NULL,NULL,'NGS-Usa MO',0); INSERT INTO "usage" VALUES('EPSG','8628','grid_transformation','EPSG','1707','EPSG','1394','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','1708','NAD83 to WGS 84 (12)','Parameter files are from NAD83 to NAD83(HARN) (40) (code 1704) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','arhpgn.las','EPSG','8658','Longitude difference file','arhpgn.los',NULL,NULL,'EPSG-USA Ar',0); INSERT INTO "usage" VALUES('EPSG','8629','grid_transformation','EPSG','1708','EPSG','1374','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1709','NAD83 to WGS 84 (13)','Parameter files are from NAD83 to NAD83(HARN) (41) (code 1705) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','iahpgn.las','EPSG','8658','Longitude difference file','iahpgn.los',NULL,NULL,'EPSG-Usa IA',0); INSERT INTO "usage" VALUES('EPSG','8630','grid_transformation','EPSG','1709','EPSG','1384','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1710','NAD83 to WGS 84 (14)','Parameter files are from NAD83 to NAD83(HARN) (42) (code 1706) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','mnhpgn.las','EPSG','8658','Longitude difference file','mnhpgn.los',NULL,NULL,'EPSG-Usa MN',0); INSERT INTO "usage" VALUES('EPSG','8631','grid_transformation','EPSG','1710','EPSG','1392','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1711','NAD83 to WGS 84 (15)','Parameter files are from NAD83 to NAD83(HARN) (43) (code 1707) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','mohpgn.las','EPSG','8658','Longitude difference file','mohpgn.los',NULL,NULL,'EPSG-Usa MO',0); INSERT INTO "usage" VALUES('EPSG','8632','grid_transformation','EPSG','1711','EPSG','1394','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1712','NAD83 to WGS 84 (16)','Parameter files are from NAD83 to NAD83(HARN) (5) (code 1478) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','cohpgn.las','EPSG','8658','Longitude difference file','cohpgn.los',NULL,NULL,'EPSG-Usa CO',0); INSERT INTO "usage" VALUES('EPSG','8633','grid_transformation','EPSG','1712','EPSG','1376','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1713','NAD83 to WGS 84 (17)','Parameter files are from NAD83 to NAD83(HARN) (6) (code 1479) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','gahpgn.las','EPSG','8658','Longitude difference file','gahpgn.los',NULL,NULL,'EPSG-Usa GA',0); INSERT INTO "usage" VALUES('EPSG','8634','grid_transformation','EPSG','1713','EPSG','1380','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1714','NAD83 to WGS 84 (18)','Parameter files are from NAD83 to NAD83(HARN) (7) (code 1480) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','flhpgn.las','EPSG','8658','Longitude difference file','flhpgn.los',NULL,NULL,'EPSG-Usa FL',0); INSERT INTO "usage" VALUES('EPSG','8635','grid_transformation','EPSG','1714','EPSG','1379','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1715','NAD83 to WGS 84 (19)','Parameter files are from NAD83 to NAD83(HARN) (8) (code 1481) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','emhpgn.las','EPSG','8658','Longitude difference file','emhpgn.los',NULL,NULL,'EPSG-Usa ID MT e',0); INSERT INTO "usage" VALUES('EPSG','8636','grid_transformation','EPSG','1715','EPSG','2382','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1716','NAD83 to WGS 84 (20)','Parameter files are from NAD83 to NAD83(HARN) (9) (code 1482) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','wmhpgn.las','EPSG','8658','Longitude difference file','wmhpgn.los',NULL,NULL,'EPSG-Usa ID MT w',0); INSERT INTO "usage" VALUES('EPSG','8637','grid_transformation','EPSG','1716','EPSG','2383','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1717','NAD83 to WGS 84 (21)','Parameter files are from NAD83 to NAD83(HARN) (1) (code 1474) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','alhpgn.las','EPSG','8658','Longitude difference file','alhpgn.los',NULL,NULL,'EPSG-Usa AL',0); INSERT INTO "usage" VALUES('EPSG','8638','grid_transformation','EPSG','1717','EPSG','1372','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1718','NAD83 to WGS 84 (22)','Parameter files are from NAD83 to NAD83(HARN) (10) (code 1483) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','kyhpgn.las','EPSG','8658','Longitude difference file','kyhpgn.los',NULL,NULL,'EPSG-Usa KY',0); INSERT INTO "usage" VALUES('EPSG','8639','grid_transformation','EPSG','1718','EPSG','1386','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1719','NAD83 to WGS 84 (23)','Parameter files are from NAD83 to NAD83(HARN) (11) (code 1484) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','lahpgn.las','EPSG','8658','Longitude difference file','lahpgn.los',NULL,NULL,'EPSG-Usa LA',0); INSERT INTO "usage" VALUES('EPSG','8640','grid_transformation','EPSG','1719','EPSG','1387','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1720','NAD83 to WGS 84 (24)','Parameter files are from NAD83 to NAD83(HARN) (12) (code 1485) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','mdhpgn.las','EPSG','8658','Longitude difference file','mdhpgn.los',NULL,NULL,'EPSG-Usa DE MD',0); INSERT INTO "usage" VALUES('EPSG','8641','grid_transformation','EPSG','1720','EPSG','2377','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1721','NAD83 to WGS 84 (25)','Parameter files are from NAD83 to NAD83(HARN) (13) (code 1486) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','mehpgn.las','EPSG','8658','Longitude difference file','mehpgn.los',NULL,NULL,'EPSG-Usa ME',0); INSERT INTO "usage" VALUES('EPSG','8642','grid_transformation','EPSG','1721','EPSG','1388','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1722','NAD83 to WGS 84 (26)','Parameter files are from NAD83 to NAD83(HARN) (14) (code 1487) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','mihpgn.las','EPSG','8658','Longitude difference file','mihpgn.los',NULL,NULL,'EPSG-Usa MI',0); INSERT INTO "usage" VALUES('EPSG','8643','grid_transformation','EPSG','1722','EPSG','1391','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1723','NAD83 to WGS 84 (27)','Parameter files are from NAD83 to NAD83(HARN) (15) (code 1488) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','mshpgn.las','EPSG','8658','Longitude difference file','mshpgn.los',NULL,NULL,'EPSG-Usa MS',0); INSERT INTO "usage" VALUES('EPSG','8644','grid_transformation','EPSG','1723','EPSG','1393','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1724','NAD83 to WGS 84 (28)','Parameter files are from NAD83 to NAD83(HARN) (16) (code 1489) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','nbhpgn.las','EPSG','8658','Longitude difference file','nbhpgn.los',NULL,NULL,'EPSG-Usa NE',0); INSERT INTO "usage" VALUES('EPSG','8645','grid_transformation','EPSG','1724','EPSG','1396','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1725','NAD83 to WGS 84 (29)','Parameter files are from NAD83 to NAD83(HARN) (17) (code 1490) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','nehpgn.las','EPSG','8658','Longitude difference file','nehpgn.los',NULL,NULL,'EPSG-Usa NewEng',0); INSERT INTO "usage" VALUES('EPSG','8646','grid_transformation','EPSG','1725','EPSG','2378','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1726','NAD83 to WGS 84 (30)','Parameter files are from NAD83 to NAD83(HARN) (18) (code 1491) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','nmhpgn.las','EPSG','8658','Longitude difference file','nmhpgn.los',NULL,NULL,'EPSG-Usa NM',0); INSERT INTO "usage" VALUES('EPSG','8647','grid_transformation','EPSG','1726','EPSG','1400','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1727','NAD83 to WGS 84 (31)','Parameter files are from NAD83 to NAD83(HARN) (19) (code 1492) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','nyhpgn.las','EPSG','8658','Longitude difference file','nyhpgn.los',NULL,NULL,'EPSG-Usa NY',0); INSERT INTO "usage" VALUES('EPSG','8648','grid_transformation','EPSG','1727','EPSG','1401','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1728','NAD83 to WGS 84 (32)','Parameter files are from NAD83 to NAD83(HARN) (2) (code 1475) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','azhpgn.las','EPSG','8658','Longitude difference file','azhpgn.los',NULL,NULL,'EPSG-Usa AZ',0); INSERT INTO "usage" VALUES('EPSG','8649','grid_transformation','EPSG','1728','EPSG','1373','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1729','NAD83 to WGS 84 (33)','Parameter files are from NAD83 to NAD83(HARN) (20) (code 1493) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','ndhpgn.las','EPSG','8658','Longitude difference file','ndhpgn.los',NULL,NULL,'EPSG-Usa ND',0); INSERT INTO "usage" VALUES('EPSG','8650','grid_transformation','EPSG','1729','EPSG','1403','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1730','NAD83 to WGS 84 (34)','Parameter files are from NAD83 to NAD83(HARN) (21) (code 1494) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','okhpgn.las','EPSG','8658','Longitude difference file','okhpgn.los',NULL,NULL,'EPSG-Usa OK',0); INSERT INTO "usage" VALUES('EPSG','8651','grid_transformation','EPSG','1730','EPSG','1405','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1731','NAD83 to WGS 84 (35)','Parameter files are from NAD83 to NAD83(HARN) (22) (code 1495) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','pvhpgn.las','EPSG','8658','Longitude difference file','pvhpgn.los',NULL,NULL,'EPSG-PRVI',0); INSERT INTO "usage" VALUES('EPSG','8652','grid_transformation','EPSG','1731','EPSG','3634','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1732','NAD83 to WGS 84 (36)','Parameter files are from NAD83 to NAD83(HARN) (23) (code 1496) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','sdhpgn.las','EPSG','8658','Longitude difference file','sdhpgn.los',NULL,NULL,'EPSG-Usa SD',0); INSERT INTO "usage" VALUES('EPSG','8653','grid_transformation','EPSG','1732','EPSG','1410','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1733','NAD83 to WGS 84 (37)','Parameter files are from NAD83 to NAD83(HARN) (24) (code 1497) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','tnhpgn.las','EPSG','8658','Longitude difference file','tnhpgn.los',NULL,NULL,'EPSG-Usa TN',0); INSERT INTO "usage" VALUES('EPSG','8654','grid_transformation','EPSG','1733','EPSG','1411','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1734','NAD83 to WGS 84 (38)','Parameter files are from NAD83 to NAD83(HARN) (25) (code 1498) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','ethpgn.las','EPSG','8658','Longitude difference file','ethpgn.los',NULL,NULL,'EPSG-Usa TX e',0); INSERT INTO "usage" VALUES('EPSG','8655','grid_transformation','EPSG','1734','EPSG','2379','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1735','NAD83 to WGS 84 (39)','Parameter files are from NAD83 to NAD83(HARN) (26) (code 1499) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','wthpgn.las','EPSG','8658','Longitude difference file','wthpgn.los',NULL,NULL,'EPSG-Usa TX w',0); INSERT INTO "usage" VALUES('EPSG','8656','grid_transformation','EPSG','1735','EPSG','2380','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1736','NAD83 to WGS 84 (40)','Parameter files are from NAD83 to NAD83(HARN) (27) (code 1500) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','vahpgn.las','EPSG','8658','Longitude difference file','vahpgn.los',NULL,NULL,'EPSG-Usa VA',0); INSERT INTO "usage" VALUES('EPSG','8657','grid_transformation','EPSG','1736','EPSG','1415','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1737','NAD83 to WGS 84 (41)','Parameter files are from NAD83 to NAD83(HARN) (28) (code 1501) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','wohpgn.las','EPSG','8658','Longitude difference file','wohpgn.los',NULL,NULL,'EPSG-Usa OR WA',0); INSERT INTO "usage" VALUES('EPSG','8658','grid_transformation','EPSG','1737','EPSG','2381','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1738','NAD83 to WGS 84 (42)','Parameter files are from NAD83 to NAD83(HARN) (29) (code 1502) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','wihpgn.las','EPSG','8658','Longitude difference file','wihpgn.los',NULL,NULL,'EPSG-Usa WI',0); INSERT INTO "usage" VALUES('EPSG','8659','grid_transformation','EPSG','1738','EPSG','1418','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1739','NAD83 to WGS 84 (43)','Parameter files are from NAD83 to NAD83(HARN) (3) (code 1476) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','cnhpgn.las','EPSG','8658','Longitude difference file','cnhpgn.los',NULL,NULL,'EPSG-Usa CA n',0); INSERT INTO "usage" VALUES('EPSG','8660','grid_transformation','EPSG','1739','EPSG','2297','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1740','NAD83 to WGS 84 (44)','Parameter files are from NAD83 to NAD83(HARN) (30) (code 1503) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','wyhpgn.las','EPSG','8658','Longitude difference file','wyhpgn.los',NULL,NULL,'EPSG-Usa WY',0); INSERT INTO "usage" VALUES('EPSG','8661','grid_transformation','EPSG','1740','EPSG','1419','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1741','NAD83 to WGS 84 (45)','Parameter files are from NAD83 to NAD83(HARN) (31) (code 1520) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','hihpgn.las','EPSG','8658','Longitude difference file','hihpgn.los',NULL,NULL,'EPSG-Usa HI',0); INSERT INTO "usage" VALUES('EPSG','8662','grid_transformation','EPSG','1741','EPSG','1334','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1742','NAD83 to WGS 84 (46)','Parameter files are from NAD83 to NAD83(HARN) (32) (code 1521) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','inhpgn.las','EPSG','8658','Longitude difference file','inhpgn.los',NULL,NULL,'EPSG-Usa IN',0); INSERT INTO "usage" VALUES('EPSG','8663','grid_transformation','EPSG','1742','EPSG','1383','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1743','NAD83 to WGS 84 (47)','Parameter files are from NAD83 to NAD83(HARN) (33) (code 1522) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','kshpgn.las','EPSG','8658','Longitude difference file','kshpgn.los',NULL,NULL,'EPSG-Usa KS',0); INSERT INTO "usage" VALUES('EPSG','8664','grid_transformation','EPSG','1743','EPSG','1385','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1744','NAD83 to WGS 84 (48)','Parameter files are from NAD83 to NAD83(HARN) (34) (code 1523) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','nvhpgn.las','EPSG','8658','Longitude difference file','nvhpgn.los',NULL,NULL,'EPSG-Usa NV',0); INSERT INTO "usage" VALUES('EPSG','8665','grid_transformation','EPSG','1744','EPSG','1397','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1745','NAD83 to WGS 84 (49)','Parameter files are from NAD83 to NAD83(HARN) (35) (code 1524) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','ohhpgn.las','EPSG','8658','Longitude difference file','ohhpgn.los',NULL,NULL,'EPSG-Usa OH',0); INSERT INTO "usage" VALUES('EPSG','8666','grid_transformation','EPSG','1745','EPSG','1404','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1746','NAD83 to WGS 84 (50)','Parameter files are from NAD83 to NAD83(HARN) (36) (code 1525) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','uthpgn.las','EPSG','8658','Longitude difference file','uthpgn.los',NULL,NULL,'EPSG-Usa UT',0); INSERT INTO "usage" VALUES('EPSG','8667','grid_transformation','EPSG','1746','EPSG','1413','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1747','NAD83 to WGS 84 (51)','Parameter files are from NAD83 to NAD83(HARN) (37) (code 1526) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','wvhpgn.las','EPSG','8658','Longitude difference file','wvhpgn.los',NULL,NULL,'EPSG-Usa WV',0); INSERT INTO "usage" VALUES('EPSG','8668','grid_transformation','EPSG','1747','EPSG','1417','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1748','NAD83 to WGS 84 (52)','Parameter files are from NAD83 to NAD83(HARN) (38) (code 1553) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','ilhpgn.las','EPSG','8658','Longitude difference file','ilhpgn.los',NULL,NULL,'EPSG-Usa IL',0); INSERT INTO "usage" VALUES('EPSG','8669','grid_transformation','EPSG','1748','EPSG','1382','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1749','NAD83 to WGS 84 (53)','Parameter files are from NAD83 to NAD83(HARN) (39) (code 1554) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','njhpgn.las','EPSG','8658','Longitude difference file','njhpgn.los',NULL,NULL,'EPSG-Usa NJ',0); INSERT INTO "usage" VALUES('EPSG','8670','grid_transformation','EPSG','1749','EPSG','1399','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1750','NAD83 to WGS 84 (54)','Parameter files are from NAD83 to NAD83(HARN) (4) (code 1477) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','cshpgn.las','EPSG','8658','Longitude difference file','cshpgn.los',NULL,NULL,'EPSG-Usa CA s',0); INSERT INTO "usage" VALUES('EPSG','8671','grid_transformation','EPSG','1750','EPSG','2298','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','1752','NAD83 to NAD83(CSRS98) (3)','This gridded difference file AB_CSRS.DAC will need to be renamed to AB_CSRS.gsb to run in some software suites. Formats identical, but AB file is provincial fit only. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1702.','EPSG','9615','NTv2','EPSG','4269','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'AB Env-Can AB',1); INSERT INTO "usage" VALUES('EPSG','8673','grid_transformation','EPSG','1752','EPSG','2376','EPSG','1025'); INSERT INTO "grid_transformation" VALUES('EPSG','1803','AGD66 to GDA94 (11)','Replaces AGD66 to GDA94 variants 6, 7 and 10 (codes 1506 1507 1596). Input expects longitudes to be positive west; source and target CRSs AGD66 (code 4202) and GDA94 (code 4283) both have longitudes positive east.','EPSG','9615','NTv2','EPSG','4202','EPSG','4283',0.5,'EPSG','8656','Latitude and longitude difference file','A66 National (13.09.01).gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8724','grid_transformation','EPSG','1803','EPSG','2575','EPSG','1035'); INSERT INTO "grid_transformation" VALUES('EPSG','1804','AGD84 to GDA94 (5)','Replaces AGD84 to GDA94 (4) (code 1593) which itself replaced variant 3 (code 1559). Input expects longitudes to be + west; EPSG GeogCRS AGD84 (code 4203) and GDA94 (code 4283) both have longitudes positive east. May be used as tfm to WGS 84 - see 15785','EPSG','9615','NTv2','EPSG','4203','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','National 84 (02.07.01).gsb',NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus 0.1m',0); INSERT INTO "usage" VALUES('EPSG','14199','grid_transformation','EPSG','1804','EPSG','2576','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','1841','ATS77 to NAD83(CSRS) (1)','Introduced in 1999. Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1688.','EPSG','9615','NTv2','EPSG','4122','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','NB7783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GIC-Can NB',1); INSERT INTO "usage" VALUES('EPSG','8762','grid_transformation','EPSG','1841','EPSG','1447','EPSG','1231'); INSERT INTO "grid_transformation" VALUES('EPSG','1843','NAD83 to NAD83(CSRS) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1696.','EPSG','9615','NTv2','EPSG','4269','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1); INSERT INTO "usage" VALUES('EPSG','8764','grid_transformation','EPSG','1843','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1844','NAD27 to NAD83(CSRS) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1692.','EPSG','9615','NTv2','EPSG','4267','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','QUE27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1); INSERT INTO "usage" VALUES('EPSG','8765','grid_transformation','EPSG','1844','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1845','NAD27(CGQ77) to NAD83(CSRS) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD27(CGQ77) to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1); INSERT INTO "usage" VALUES('EPSG','8766','grid_transformation','EPSG','1845','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1846','ATS77 to NAD83(CSRS) (2)','Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1689.','EPSG','9615','NTv2','EPSG','4122','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','PE7783V2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'PEI DOT-Can PEI',1); INSERT INTO "usage" VALUES('EPSG','8767','grid_transformation','EPSG','1846','EPSG','1533','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1847','NAD27 to NAD83(CSRS) (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','8768','grid_transformation','EPSG','1847','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1848','NAD83 to NAD83(CSRS) (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','8769','grid_transformation','EPSG','1848','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1849','NAD83 to NAD83(CSRS) (3)','This gridded difference file AB_CSRS.DAC will need to be renamed to AB_CSRS.gsb to run in some software suites. Formats identical, but AB file is provincial fit only. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1702.','EPSG','9615','NTv2','EPSG','4269','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'AB Env-Can AB',1); INSERT INTO "usage" VALUES('EPSG','8770','grid_transformation','EPSG','1849','EPSG','2376','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1850','ATS77 to NAD83(CSRS) (3)','Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1851.','EPSG','9615','NTv2','EPSG','4122','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','NS778301.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS',1); INSERT INTO "usage" VALUES('EPSG','8771','grid_transformation','EPSG','1850','EPSG','2313','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','1851','ATS77 to WGS 84 (3)','Parameter file is from ATS77 to NAD83(CSRS)v3 (3) (code 9235) assuming that NAD83(CSRS)v3 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4122','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','NS778301.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can NS',0); INSERT INTO "usage" VALUES('EPSG','8772','grid_transformation','EPSG','1851','EPSG','2313','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','3858','WGS 84 to EGM2008 height (1)','Replaces WGS 84 to EGM96 height (1) (CT code 15781). Grid spacing is 2.5 arc-minutes. For smaller spacing (in principle more exact) see CT code 3859. For reversible alternative see CT code 9704. An executable using spherical harmonics is also available.','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4979','EPSG','3855',1.0,'EPSG','8666','Geoid (height correction) model file','Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,NULL,NULL,'NGA-World 2.5min',0); INSERT INTO "usage" VALUES('EPSG','8948','grid_transformation','EPSG','3858','EPSG','1262','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','3859','WGS 84 to EGM2008 height (2)','Replaces WGS 84 to EGM96 height (1) (CT code 15781). Grid spacing is 1 arc-minute. For a larger grid spacing (in principle less exact) see CT code 3858. For reversible alternative see CT code 9618. An executable using spherical harmonics is available.','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4979','EPSG','3855',0.5,'EPSG','8666','Geoid (height correction) model file','Und_min1x1_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,NULL,NULL,'NGA-World 1min',0); INSERT INTO "usage" VALUES('EPSG','14322','grid_transformation','EPSG','3859','EPSG','1262','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4459','NZGD2000 to NZVD2009 height (1)','Defines NZVD2009 vertical datum (datum code 1039, CRS code 4440).','EPSG','1030','Geographic3D to GravityRelatedHeight (NZgeoid)','EPSG','4959','EPSG','4440',0.1,'EPSG','8666','Geoid (height correction) model file','nzgeoid09.sid',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ 2009',0); INSERT INTO "usage" VALUES('EPSG','9090','grid_transformation','EPSG','4459','EPSG','1175','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4561','RRAF 1991 to Martinique 1987 height (1)','May be used for transformations from WGS 84 to IGN 1987. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4557','EPSG','5756',998.0,'EPSG','8666','Geoid (height correction) model file','ggm00.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Mtq',0); INSERT INTO "usage" VALUES('EPSG','9098','grid_transformation','EPSG','4561','EPSG','3276','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4562','RRAF 1991 to Guadeloupe 1988 height (1)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4557','EPSG','5757',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp GT',0); INSERT INTO "usage" VALUES('EPSG','9099','grid_transformation','EPSG','4562','EPSG','2892','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4563','RRAF 1991 to IGN 1988 MG height (1)','May be used for transformations from WGS 84 to IGN 1988 MG. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4557','EPSG','5617',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_mg.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG',0); INSERT INTO "usage" VALUES('EPSG','9100','grid_transformation','EPSG','4563','EPSG','2894','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4564','RRAF 1991 to IGN 1988 SM height (1)','May be used for transformations from WGS 84 to IGN 1988 SM. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4557','EPSG','5620',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_sm.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StM',0); INSERT INTO "usage" VALUES('EPSG','9101','grid_transformation','EPSG','4564','EPSG','2890','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4565','RRAF 1991 to IGN 1988 LS height (1)','May be used for transformations from WGS 84 to IGN 1988 LS. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4557','EPSG','5616',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_ls.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp LSt',0); INSERT INTO "usage" VALUES('EPSG','9102','grid_transformation','EPSG','4565','EPSG','2895','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4566','RRAF 1991 to IGN 1992 LD height (1)','Accuracy 0.5m. Replaced by RRAF 1991 to IGN 2008 LD height (1) (CT code 9132).','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4557','EPSG','5618',0.5,'EPSG','8666','Geoid (height correction) model file','ggg00_ld.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp Des',0); INSERT INTO "usage" VALUES('EPSG','9103','grid_transformation','EPSG','4566','EPSG','2893','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','4567','RRAF 1991 to IGN 1988 SB height (1)','May be used for transformations from WGS 84 to IGN 1988 SB. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4557','EPSG','5619',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_sb.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StB',0); INSERT INTO "usage" VALUES('EPSG','9104','grid_transformation','EPSG','4567','EPSG','2891','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5334','ETRS89 to Belfast height (1)','May be used for transformations from WGS 84 to Belfast. Replaced by ETRS89 to Belfast height (2) (code 7958).','EPSG','1045','Geographic3D to GravityRelatedHeight (OSGM02-Ire)','EPSG','4937','EPSG','5732',0.03,'EPSG','8666','Geoid (height correction) model file','OSGM02_NI.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI',0); INSERT INTO "usage" VALUES('EPSG','9347','grid_transformation','EPSG','5334','EPSG','2530','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5335','ETRS89 to Malin Head height (1)','May be used for transformations from WGS 84 to Malin Head. Replaced by ETRS89 to Malin Head height (2) (code 7959).','EPSG','1045','Geographic3D to GravityRelatedHeight (OSGM02-Ire)','EPSG','4937','EPSG','5731',0.04,'EPSG','8666','Geoid (height correction) model file','OSGM02_RoI.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire',0); INSERT INTO "usage" VALUES('EPSG','9348','grid_transformation','EPSG','5335','EPSG','1305','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5338','OSGB36 to ETRS89 (1)','Approximate alternative to official OSTN02 method (tfm code 7952). Accuracy at 2000 test points compared to OSTN02 (tfm code 1039): latitude 0.5mm av, 17mm max; longitude 0.8mm av, 23mm max. May be taken as approximate CT to WGS 84 - see code 5339.','EPSG','9615','NTv2','EPSG','4277','EPSG','4258',0.03,'EPSG','8656','Latitude and longitude difference file','OSTN02_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSGB-UK Gbr02 NT',0); INSERT INTO "usage" VALUES('EPSG','9349','grid_transformation','EPSG','5338','EPSG','4616','EPSG','1273'); INSERT INTO "grid_transformation" VALUES('EPSG','5339','OSGB36 to WGS 84 (7)','Parameter values taken from OSGB36 to ETRS89 (1) (tfm code 5338) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the tfm.','EPSG','9615','NTv2','EPSG','4277','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','OSTN02_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-UK Gbr02 NT',0); INSERT INTO "usage" VALUES('EPSG','9350','grid_transformation','EPSG','5339','EPSG','4616','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','5409','NGVD29 height to NAVD88 height (1)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','5702','EPSG','5703',0.02,'EPSG','8732','Vertical offset file','vertconw.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus W',1); INSERT INTO "usage" VALUES('EPSG','9377','grid_transformation','EPSG','5409','EPSG','2950','EPSG','1255'); INSERT INTO "grid_transformation" VALUES('EPSG','5410','NGVD29 height to NAVD88 height (2)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','5702','EPSG','5703',0.02,'EPSG','8732','Vertical offset file','vertconc.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus C',1); INSERT INTO "usage" VALUES('EPSG','9378','grid_transformation','EPSG','5410','EPSG','2949','EPSG','1255'); INSERT INTO "grid_transformation" VALUES('EPSG','5411','NGVD29 height to NAVD88 height (3)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','5702','EPSG','5703',0.02,'EPSG','8732','Vertical offset file','vertcone.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus E',1); INSERT INTO "usage" VALUES('EPSG','9379','grid_transformation','EPSG','5411','EPSG','2948','EPSG','1255'); INSERT INTO "grid_transformation" VALUES('EPSG','5502','RGAF09 to Martinique 1987 height (1)','Replaces tfm from RRAF 1991, code 4561. May be used for transformations from WGS 84 to IGN 1987. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5756',998.0,'EPSG','8666','Geoid (height correction) model file','gg10_mart.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Mtq',0); INSERT INTO "usage" VALUES('EPSG','9445','grid_transformation','EPSG','5502','EPSG','3276','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5503','RGAF09 to Guadeloupe 1988 height (1)','Replaces tfm from RRAF 1991, code 4562. May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5757',0.2,'EPSG','8666','Geoid (height correction) model file','gg10_gtbt.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp GT',0); INSERT INTO "usage" VALUES('EPSG','9446','grid_transformation','EPSG','5503','EPSG','2892','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5504','RGAF09 to IGN 1988 MG height (1)','Replaces tfm from RRAF 1991, code 4563. May be used for transformations from WGS 84 to IGN 1988 MG. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5617',0.2,'EPSG','8666','Geoid (height correction) model file','gg10_mg.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG',0); INSERT INTO "usage" VALUES('EPSG','9447','grid_transformation','EPSG','5504','EPSG','2894','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5505','RGAF09 to IGN 1988 SM height (1)','Replaces tfm from RRAF 1991, code 4564. May be used for transformations from WGS 84 to IGN 1988 SM. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5620',0.2,'EPSG','8666','Geoid (height correction) model file','gg10_sm.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StM',0); INSERT INTO "usage" VALUES('EPSG','9448','grid_transformation','EPSG','5505','EPSG','2890','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5506','RGAF09 to IGN 1988 LS height (1)','Replaces tfm from RRAF 1991, code 4565. May be used for transformations from WGS 84 to IGN 1988 LS. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5616',0.2,'EPSG','8666','Geoid (height correction) model file','gg10_ls.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp LSt',0); INSERT INTO "usage" VALUES('EPSG','9449','grid_transformation','EPSG','5506','EPSG','2895','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5507','RGAF09 to IGN 1992 LD height (1)','Replaces tfm from RRAF 1991, code 4566. Replaced by RGAF09 to IGN 2008 LD height (1), CT code 9131. May be used for transformations from WGS 84 to IGN 1992 LD. Accuracy at each 0.025° grid node is given within the geoid model file, approx. average 0.5m.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5618',0.5,'EPSG','8666','Geoid (height correction) model file','gg10_ld.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp Des',0); INSERT INTO "usage" VALUES('EPSG','9450','grid_transformation','EPSG','5507','EPSG','2893','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5508','RGAF09 to IGN 1988 SB height (1)','Replaces tfm from RRAF 1991, code 4567. May be used for transformations from WGS 84 to IGN 1988 SB. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5619',0.2,'EPSG','8666','Geoid (height correction) model file','gg10_sb.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StB',0); INSERT INTO "usage" VALUES('EPSG','9451','grid_transformation','EPSG','5508','EPSG','2891','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5525','Corrego Alegre 1961 to SIRGAS 2000 (1)','May be used as transformation between Corrego Alegre 1961 and WGS 84 - see tfm code 5540.','EPSG','9615','NTv2','EPSG','5524','EPSG','4674',2.0,'EPSG','8656','Latitude and longitude difference file','CA61_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IBGE-Bra',0); INSERT INTO "usage" VALUES('EPSG','9459','grid_transformation','EPSG','5525','EPSG','3874','EPSG','1042'); INSERT INTO "grid_transformation" VALUES('EPSG','5526','Corrego Alegre 1970-72 to SIRGAS 2000 (1)','May be used as transformation between Corrego Alegre 1970-72 and WGS 84 - see tfm code 5541.','EPSG','9615','NTv2','EPSG','4225','EPSG','4674',2.0,'EPSG','8656','Latitude and longitude difference file','CA7072_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IBGE-Bra',0); INSERT INTO "usage" VALUES('EPSG','9460','grid_transformation','EPSG','5526','EPSG','1293','EPSG','1042'); INSERT INTO "grid_transformation" VALUES('EPSG','5528','SAD69 to SIRGAS 2000 (2)','For IBGE, in onshore east and south Brazil only, replaces SAD69 to SIRGAS 2000 (1) (tfm code 15485) for pre-1996 data based on the classical geodetic network. May be used as transformation between SAD69 and WGS 84 - see tfm code 5542.','EPSG','9615','NTv2','EPSG','4618','EPSG','4674',1.0,'EPSG','8656','Latitude and longitude difference file','SAD69_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IBGE-Bra 1m 1996',0); INSERT INTO "usage" VALUES('EPSG','9461','grid_transformation','EPSG','5528','EPSG','3887','EPSG','1068'); INSERT INTO "grid_transformation" VALUES('EPSG','5529','SAD69(96) to SIRGAS 2000 (1)','May be used as transformation between SAD69(96) and WGS 84 - see tfm code 5543.','EPSG','9615','NTv2','EPSG','5527','EPSG','4674',0.5,'EPSG','8656','Latitude and longitude difference file','SAD96_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IBGE-Bra 0.5m 1996',0); INSERT INTO "usage" VALUES('EPSG','9462','grid_transformation','EPSG','5529','EPSG','3887','EPSG','1067'); INSERT INTO "grid_transformation" VALUES('EPSG','5540','Corrego Alegre 1961 to WGS 84 (1)','Parameters from Corrego Alegre 1961 to SIRGAS 2000 (1) (tfm code 5525) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','5524','EPSG','4326',2.0,'EPSG','8656','Latitude and longitude difference file','CA61_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra',0); INSERT INTO "usage" VALUES('EPSG','9463','grid_transformation','EPSG','5540','EPSG','3874','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','5541','Corrego Alegre 1970-72 to WGS 84 (2)','Parameters from Corrego Alegre 1970-72 to SIRGAS 2000 (1) (tfm code 5526) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4225','EPSG','4326',2.0,'EPSG','8656','Latitude and longitude difference file','CA7072_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra',0); INSERT INTO "usage" VALUES('EPSG','9464','grid_transformation','EPSG','5541','EPSG','1293','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','5542','SAD69 to WGS 84 (15)','Parameters values taken from SAD69 to SIRGAS 2000 (2) (tfm code 5528) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4618','EPSG','4326',2.0,'EPSG','8656','Latitude and longitude difference file','SAD69_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra 2m 1996',0); INSERT INTO "usage" VALUES('EPSG','9465','grid_transformation','EPSG','5542','EPSG','3887','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','5543','SAD69(96) to WGS 84 (1)','Parameters values taken from SAD69(96) to SIRGAS 2000 (1) (tfm code 5529) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','5527','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','SAD96_003.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra 1m 1996',0); INSERT INTO "usage" VALUES('EPSG','9466','grid_transformation','EPSG','5543','EPSG','3887','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','5594','FEH2010 to FCSVR10 height (1)','','EPSG','1030','Geographic3D to GravityRelatedHeight (NZgeoid)','EPSG','5592','EPSG','5597',0.1,'EPSG','8666','Geoid (height correction) model file','fehmarn_geoid10.gri',NULL,NULL,NULL,NULL,NULL,NULL,'FEM-Dnk-Deu Feh',1); INSERT INTO "usage" VALUES('EPSG','9477','grid_transformation','EPSG','5594','EPSG','3890','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5626','FEH2010 to FCSVR10 height (1)','For reversible alternative to this transformation see FEH2010 to FEH2010 + FCSVR10 height (1) (code 9619).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','5592','EPSG','5597',0.1,'EPSG','8666','Geoid (height correction) model file','fehmarn_geoid10.gri',NULL,NULL,NULL,NULL,NULL,NULL,'FEM-Dnk-Deu Feh',0); INSERT INTO "usage" VALUES('EPSG','14327','grid_transformation','EPSG','5626','EPSG','3890','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5656','GDA94 to AHD height (49)','File name previously called AUSGeoid09_GDA94_V1.01_DOV_windows.gsb. Replaces AUSGeoid98 model. Uses AUSGeoid09 model which uses bi-cubic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time.','EPSG','1048','Geographic3D to GravityRelatedHeight (AUSGeoid v2)','EPSG','4939','EPSG','5711',0.15,'EPSG','8666','Geoid (height correction) model file','AUSGeoid09_V1.01.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus09 mainland',0); INSERT INTO "usage" VALUES('EPSG','9488','grid_transformation','EPSG','5656','EPSG','1281','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5657','GDA94 to AHD (Tasmania) height (2)','Replaces AusGeoid98 model. Uses AusGeoid09 model which uses bi-cubic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time. May be used for transformations from WGS 84 to AHD (Tasmania).','EPSG','1048','Geographic3D to GravityRelatedHeight (AUSGeoid v2)','EPSG','4939','EPSG','5712',0.03,'EPSG','8666','Geoid (height correction) model file','AUSGeoid09_GDA94_V1.01_DOV_windows.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus09 Tas',0); INSERT INTO "usage" VALUES('EPSG','9489','grid_transformation','EPSG','5657','EPSG','2947','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','5661','ED50 to ETRS89 (14)','When included in concatenation from and to projected CRSs, gives same results as ED50 / UTM zone 31N to ETRS89 / UTM zone 31N (1) - see CRS code 5166.','EPSG','9615','NTv2','EPSG','4230','EPSG','4258',0.05,'EPSG','8656','Latitude and longitude difference file','100800401.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICC-Esp Cat',0); INSERT INTO "usage" VALUES('EPSG','9492','grid_transformation','EPSG','5661','EPSG','3732','EPSG','1079'); INSERT INTO "grid_transformation" VALUES('EPSG','5891','MGI to ETRS89 (5)','Not to be used for cadastral purposes because it does not comply with the rules for control network tie-in as per Paragraph 3 of the Land Survey Regulations (Vermessungsverordnung) 2010. Replaced by GIS-Grid 2021 (MGI to ETRS89 (8), code 9910).','EPSG','9615','NTv2','EPSG','4312','EPSG','4258',0.15,'EPSG','8656','Latitude and longitude difference file','AT_GIS_GRID.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut NTv2',0); INSERT INTO "usage" VALUES('EPSG','17397','grid_transformation','EPSG','5891','EPSG','1037','EPSG','1144'); INSERT INTO "grid_transformation" VALUES('EPSG','6138','CIGD11 to GCVD54 height (ft) (1)','Care: source CRS heights are in metres, transformation file parameter values and target CRS heights are in feet. For reversible alternative to this transformation see CIGD11 to CIGD11 + GCVD54 height (ft)) (code 9603).','EPSG','1050','Geographic3D to GravityRelatedHeight (CI)','EPSG','6134','EPSG','6130',0.03,'EPSG','8666','Geoid (height correction) model file','GCGM0811.TXT',NULL,NULL,NULL,NULL,NULL,NULL,'LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','14268','grid_transformation','EPSG','6138','EPSG','3185','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','6139','CIGD11 to LCVD61 height (ft) (1)','Care: source CRS heights are in metres, transformation file parameter values and target CRS heights are in feet. For reversible alternative to this transformation see CIGD11 to CIGD11 + LCVD61 height (ft) (1) (code 9604).','EPSG','1050','Geographic3D to GravityRelatedHeight (CI)','EPSG','6134','EPSG','6131',0.03,'EPSG','8666','Geoid (height correction) model file','LCGM0811.TXT',NULL,NULL,NULL,NULL,NULL,NULL,'LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','14269','grid_transformation','EPSG','6139','EPSG','4121','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','6140','CIGD11 to CBVD61 height (ft) (1)','Care: source CRS heights are in metres, transformation file parameter values and target CRS heights are in feet. For reversible alternative to this transformation see CIGD11 to CIGD11 + CBVD61 height (ft) (1) (code 9602).','EPSG','1050','Geographic3D to GravityRelatedHeight (CI)','EPSG','6134','EPSG','6132',0.03,'EPSG','8666','Geoid (height correction) model file','CBGM0811.TXT',NULL,NULL,NULL,NULL,NULL,NULL,'LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','14263','grid_transformation','EPSG','6140','EPSG','3207','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','6188','Lisbon to ETRS89 (4)','Derived from 1129 common stations in the national geodetic network. Residuals at 130 further test points average 0.09m, maximum 0.30m.','EPSG','9615','NTv2','EPSG','4207','EPSG','4258',0.1,'EPSG','8656','Latitude and longitude difference file','DLx_ETRS89_geo.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt 0.1m',0); INSERT INTO "usage" VALUES('EPSG','9634','grid_transformation','EPSG','6188','EPSG','1294','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','6189','Datum 73 to ETRS89 (6)','Derived from 1129 common stations in the national geodetic network. Residuals at 130 further test points average 0.06m, maximum 0.16m.','EPSG','9615','NTv2','EPSG','4274','EPSG','4258',0.1,'EPSG','8656','Latitude and longitude difference file','D73_ETRS89_geo.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt 0.1m',0); INSERT INTO "usage" VALUES('EPSG','9635','grid_transformation','EPSG','6189','EPSG','1294','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','6209','NAD27 to NAD83(CSRS) (4)','Introduced in 2011. Precision of 20 cm in area covered by the input data set and 40 cm anywhere else, with the exception of the northwest area of the province (near the border with Quebec) where the precision deteriorates to 80 cm.','EPSG','9615','NTv2','EPSG','4267','EPSG','4617',0.8,'EPSG','8656','Latitude and longitude difference file','NB2783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SNB-Can NB',1); INSERT INTO "usage" VALUES('EPSG','9649','grid_transformation','EPSG','6209','EPSG','1447','EPSG','1231'); INSERT INTO "grid_transformation" VALUES('EPSG','6326','NAD83(2011) to NAVD88 height (1)','Uses Geoid12B hybrid model. Renamed from Geoid12A but with no data changes. See information source for further information.','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','5703',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bu0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus',0); INSERT INTO "usage" VALUES('EPSG','9717','grid_transformation','EPSG','6326','EPSG','1323','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','6327','NAD83(2011) to NAVD88 height (2)','Uses Geoid12B hybrid model. Renamed from Geoid12A but with no data changes. See information source for further information. For reversible alternative to this transformation see NAD83(2011) to NAD83(2011) + NAVD88 height (2) (code 9596).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','5703',0.02,'EPSG','8666','Geoid (height correction) model file','g2012ba0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US AK',0); INSERT INTO "usage" VALUES('EPSG','14351','grid_transformation','EPSG','6327','EPSG','1330','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','6648','NAD83(CSRS) to CGVD2013 height (1)','Uses CGG2013 model which uses bi-quadratic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','4955','EPSG','6647',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013n83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013',1); INSERT INTO "usage" VALUES('EPSG','9733','grid_transformation','EPSG','6648','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','6712','Tokyo to JGD2000 (2)','NTv2 grid derived by ESRI from that supplied by GSI in application tky2jgd. After Tohoku earthquake of 2011 accuracy in northern Honshu reduced to 1-5m and in this area replaced by Tokyo to JGD2011 (tfm code 6714).','EPSG','9615','NTv2','EPSG','4301','EPSG','4612',0.2,'EPSG','8656','Latitude and longitude difference file','tky2jgd.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn',0); INSERT INTO "usage" VALUES('EPSG','9740','grid_transformation','EPSG','6712','EPSG','3957','EPSG','1142'); INSERT INTO "grid_transformation" VALUES('EPSG','6713','JGD2000 to JGD2011 (1)','NTv2 grid derived by ESRI from that supplied by GSI in application patchjgd.','EPSG','9615','NTv2','EPSG','4612','EPSG','6668',0.2,'EPSG','8656','Latitude and longitude difference file','touhokutaiheiyouoki2011.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn N Honshu',0); INSERT INTO "usage" VALUES('EPSG','9741','grid_transformation','EPSG','6713','EPSG','4170','EPSG','1280'); INSERT INTO "grid_transformation" VALUES('EPSG','6740','Tokyo to JGD2011 (2)','Parameter values from Tokyo to JGD2000 (2) (tfm code 6712) as in area of applicability JGD2011 = JGD2000. NTv2 grid derived by ESRI from that supplied by GSI in application tky2jgd. See Tokyo to JGD2011 (1) (tfm code 6714) for northern Honshu area.','EPSG','9615','NTv2','EPSG','4301','EPSG','6668',0.2,'EPSG','8656','Latitude and longitude difference file','tky2jgd.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn ex N Honshu',0); INSERT INTO "usage" VALUES('EPSG','9756','grid_transformation','EPSG','6740','EPSG','4194','EPSG','1142'); INSERT INTO "grid_transformation" VALUES('EPSG','6946','TM75 to ETRS89 (3)','Approximate alternative to official OS polynomial method (tfm code 1041). May be taken as approximate transformation TM75 to WGS 84 - see code 6947.','EPSG','9615','NTv2','EPSG','4300','EPSG','4258',0.41,'EPSG','8656','Latitude and longitude difference file','tm75_etrs89.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire NT approximation',0); INSERT INTO "usage" VALUES('EPSG','9849','grid_transformation','EPSG','6946','EPSG','1305','EPSG','1137'); INSERT INTO "grid_transformation" VALUES('EPSG','6947','TM75 to WGS 84 (4)','Parameter values taken from TM75 to ETRS89 (3) (tfm code 6946) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the tfm. Within accuracy of the tfm equivalent to TM75 to WGS 84 (1) (tfm code 1042).','EPSG','9615','NTv2','EPSG','4300','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','tm75_etrs89.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ire NT approx',0); INSERT INTO "usage" VALUES('EPSG','9850','grid_transformation','EPSG','6947','EPSG','1305','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','6948','RD/83 to ETRS89 (2)','Recommended by Saxony State Spatial Data and Land Survey Corporation for transformations based on official geospatial data of Saxony. Accuracy 3mm within Saxony; within the rest of RD/83 definition area results at least coincide with EPSG CT code15868.','EPSG','9615','NTv2','EPSG','4745','EPSG','4258',0.03,'EPSG','8656','Latitude and longitude difference file','NTv2_SN.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GeoSN-Deu SN',0); INSERT INTO "usage" VALUES('EPSG','9851','grid_transformation','EPSG','6948','EPSG','2545','EPSG','1028'); INSERT INTO "grid_transformation" VALUES('EPSG','7000','Amersfoort to ETRS89 (7)','Consistent to within 1mm with official RNAPTRANS(TM)2008 at ground level onshore and at MSL offshore. The horizontal deviation using this NTv2 grid is approximately 1mm per 50m height difference from ground level or MSL.','EPSG','9615','NTv2','EPSG','4289','EPSG','4258',0.001,'EPSG','8656','Latitude and longitude difference file','rdtrans2008.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'RDNAP-Nld 2008',0); INSERT INTO "usage" VALUES('EPSG','9881','grid_transformation','EPSG','7000','EPSG','1275','EPSG','1086'); INSERT INTO "grid_transformation" VALUES('EPSG','7001','ETRS89 to NAP height (1)','Alternative to vertical component of official 3D RDNAPTRANS(TM)2008. The naptrans2008 correction grid incorporates the NLGEO2004 geoid model plus a fixed offset.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5709',0.01,'EPSG','8666','Geoid (height correction) model file','naptrans2008.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'RDNAP-Nld 2008',1); INSERT INTO "usage" VALUES('EPSG','9882','grid_transformation','EPSG','7001','EPSG','1275','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7646','NAD83(2011) to PRVD02 height (1)','Uses Geoid12B hybrid model. See information source for further information.','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','6641',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bp0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 12B',0); INSERT INTO "usage" VALUES('EPSG','10190','grid_transformation','EPSG','7646','EPSG','3294','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','7647','NAD83(2011) to VIVD09 height (1)','Uses Geoid12B hybrid model. See information source for further information.','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','6642',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bp0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 12B',0); INSERT INTO "usage" VALUES('EPSG','10191','grid_transformation','EPSG','7647','EPSG','3330','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','7648','NAD83(MA11) to GUVD04 height (1)','Uses Geoid12B hybrid model. See information source for further information. For reversible alternative to this transformation see NAD83(MA11) to NAD83(MA11) + GUVD04 height (1) (code 9624).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6324','EPSG','6644',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bg0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Gum 12B',0); INSERT INTO "usage" VALUES('EPSG','14366','grid_transformation','EPSG','7648','EPSG','3255','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','7649','NAD83(MA11) to NMVD03 height (1)','Uses Geoid12B hybrid model. See information source for further information. For reversible alternative to this transformation see NAD83(MA11) to NAD83(MA11) + NMVD03 height (1) (code 9625).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6324','EPSG','6640',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bg0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Mnp 12B',0); INSERT INTO "usage" VALUES('EPSG','14369','grid_transformation','EPSG','7649','EPSG','4171','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','7650','NAD83(PA11) to ASVD02 height (1)','Uses Geoid12B hybrid model. See information source for further information. For reversible alternative to this transformation see NAD83(PA11) to NAD83(PA11) + ASVD02 height (1) (code 9626).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6321','EPSG','6643',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bs0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Asm 12B',0); INSERT INTO "usage" VALUES('EPSG','14372','grid_transformation','EPSG','7650','EPSG','2288','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','7655','PNG94 to PNG08 height (1)','','EPSG','1059','Geographic3D to GravityRelatedHeight (PNG)','EPSG','5545','EPSG','7447',0.2,'EPSG','8666','Geoid (height correction) model file','PNG08.DAT',NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png',0); INSERT INTO "usage" VALUES('EPSG','10197','grid_transformation','EPSG','7655','EPSG','4384','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7673','CH1903 to CHTRS95 (1)','Equivalent to concatenation of transformations 15486 (CH1903 to CH1903+) and 1509 (CH1903+ to CHTRS95) to within 2cm. Also used as transformation between CH1903 and ETRS89 (see code 7674).','EPSG','9615','NTv2','EPSG','4149','EPSG','4151',0.25,'EPSG','8656','Latitude and longitude difference file','CHENyx06_ETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che NTv2',0); INSERT INTO "usage" VALUES('EPSG','10205','grid_transformation','EPSG','7673','EPSG','1286','EPSG','1083'); INSERT INTO "grid_transformation" VALUES('EPSG','7674','CH1903 to ETRS89 (2)','Equivalent to concatenation of CTs 15486 (CH1903 to CH1903+) and 1647 (CH1903+ to CHTRS95) to within 2cm. Also used as CT between CH1903 and CHTRS95 (see code 7673). Replaces CT code 1646. May be used as approximate CT CH1903 to WGS 84 - see code 7788.','EPSG','9615','NTv2','EPSG','4149','EPSG','4258',0.25,'EPSG','8656','Latitude and longitude difference file','CHENyx06_ETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che NTv2',0); INSERT INTO "usage" VALUES('EPSG','10206','grid_transformation','EPSG','7674','EPSG','1286','EPSG','1083'); INSERT INTO "grid_transformation" VALUES('EPSG','7709','OSGB36 to ETRS89 (2)','Approximate alternative to official OSTN15 method (tfm code 7953). May be taken as approximate transformation OSGB36 to WGS 84 - see code 7710. Replaces OSGB36 to ETRS89 (1) (tfm code 5338).','EPSG','9615','NTv2','EPSG','4277','EPSG','4258',0.03,'EPSG','8656','Latitude and longitude difference file','OSTN15_NTv2_OSGBtoETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSGB-UK Gbr15 NT',0); INSERT INTO "usage" VALUES('EPSG','10222','grid_transformation','EPSG','7709','EPSG','4390','EPSG','1273'); INSERT INTO "grid_transformation" VALUES('EPSG','7710','OSGB36 to WGS 84 (9)','Parameter values taken from OSGB36 to ETRS89 (2) (tfm code 7709) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the tfm. Replaces OSGB36 to WGS 84 (7) (tfm code 5339).','EPSG','9615','NTv2','EPSG','4277','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','OSTN15_NTv2_OSGBtoETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-UK Gbr15 NT',0); INSERT INTO "usage" VALUES('EPSG','10223','grid_transformation','EPSG','7710','EPSG','4390','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','7711','ETRS89 to ODN height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Newlyn height (1) (tfm code 10021). For reversible alternative to this transformation see ETRS89 to ETRS89 + ODN height (2) (code 9587).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5701',0.008,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Gbr 2015',0); INSERT INTO "usage" VALUES('EPSG','14515','grid_transformation','EPSG','7711','EPSG','2792','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7712','ETRS89 to ODN Orkney height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Newlyn (Orkney Isles) height (1) (tfm code 10029). For reversible alternative to this transformation see ETRS89 to ETRS89 + ODN Orkney height (2) (code 9586).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5740',0.017,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Ork 2015',0); INSERT INTO "usage" VALUES('EPSG','14517','grid_transformation','EPSG','7712','EPSG','2793','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7713','ETRS89 to ODN (Offshore) height (1)','Replaces ETRS89 to Fair Isle/Flannan Isles/Foula/North Rona/St Kilda/Sule Skerry height (1) (tfm codes 10024-26, 10030-31 and 10034). For reversible alternative to this transformation see ETRS89 to ETRS89 + ODN (Offshore) height (1) (code 9588).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','7707',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Off 2015',0); INSERT INTO "usage" VALUES('EPSG','14512','grid_transformation','EPSG','7713','EPSG','4391','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7714','ETRS89 to Lerwick height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Lerwick height (1) (tfm code 10027). For reversible alternative to this transformation see ETRS89 to ETRS89 + Lerwick height (2) (code 9589).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5742',0.018,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS -UK Shet 2015',0); INSERT INTO "usage" VALUES('EPSG','14510','grid_transformation','EPSG','7714','EPSG','2795','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7715','ETRS89 to Stornoway height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Stornaway height (1) (tfm code 10033). For reversible alternative to this transformation see ETRS89 to ETRS89 + Stornoway height (2) (code 9584).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5746',0.011,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Heb 2015',0); INSERT INTO "usage" VALUES('EPSG','14521','grid_transformation','EPSG','7715','EPSG','2799','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7716','ETRS89 to St. Marys height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to St Marys height (1) (tfm code 10032). For reversible alternative to this transformation see ETRS89 to ETRS89 + St. Marys height (2) (code 9585).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5749',0.01,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Scilly 2015',0); INSERT INTO "usage" VALUES('EPSG','14519','grid_transformation','EPSG','7716','EPSG','2802','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7717','ETRS89 to Douglas height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Douglas height (1) (tfm code 10023). For reversible alternative to this transformation see ETRS89 to ETRS89 + Douglas height (2) (code 9590).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5750',0.03,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Man 2015',0); INSERT INTO "usage" VALUES('EPSG','14508','grid_transformation','EPSG','7717','EPSG','2803','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7718','ETRS89 to Belfast height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Belfast height (1) (tfm code 5334).','EPSG','1045','Geographic3D to GravityRelatedHeight (OSGM02-Ire)','EPSG','4937','EPSG','5732',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI 2015',1); INSERT INTO "usage" VALUES('EPSG','10231','grid_transformation','EPSG','7718','EPSG','2530','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7719','ETRS89 to Malin Head height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Malin Head height (1) (tfm code 5335).','EPSG','1045','Geographic3D to GravityRelatedHeight (OSGM02-Ire)','EPSG','4937','EPSG','5731',0.023,'EPSG','8666','Geoid (height correction) model file','OSGM15_Malin.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire 2015',1); INSERT INTO "usage" VALUES('EPSG','10232','grid_transformation','EPSG','7719','EPSG','1305','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7788','CH1903 to WGS 84 (3)','Parameter values from CH1903 to ETRS89 (2) (code 7674) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Equivalent to concatenation of transformations 15486 and 1676.','EPSG','9615','NTv2','EPSG','4149','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','CHENyx06_ETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Che NTv2',0); INSERT INTO "usage" VALUES('EPSG','10268','grid_transformation','EPSG','7788','EPSG','1286','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','7840','NZGD2000 to NZVD2016 height (1)','Defines NZVD2016 vertical datum (datum code 1169, CRS code 7839).','EPSG','1030','Geographic3D to GravityRelatedHeight (NZgeoid)','EPSG','4959','EPSG','7839',0.1,'EPSG','8666','Geoid (height correction) model file','New_Zealand_Quasigeoid_2016.csv',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ 2016',0); INSERT INTO "usage" VALUES('EPSG','10293','grid_transformation','EPSG','7840','EPSG','1175','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7860','NZVD2016 height to Auckland 1946 height (1)','Derived at 260 control points. Mean offset 0.292m, standard deviation 0.029m, maximum difference from mean 0.075m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5759',0.02,'EPSG','8732','Vertical offset file','auckland-1946-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ AUCK',0); INSERT INTO "usage" VALUES('EPSG','10294','grid_transformation','EPSG','7860','EPSG','3764','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7861','NZVD2016 height to Bluff 1955 height (1)','Derived at 71 control points. Mean offset 0.273m, standard deviation 0.034m, maximum difference from mean 0.079m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5760',0.02,'EPSG','8732','Vertical offset file','bluff-1955-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ BLUF',0); INSERT INTO "usage" VALUES('EPSG','10295','grid_transformation','EPSG','7861','EPSG','3801','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7862','NZVD2016 height to Dunedin 1958 height (1)','Derived at 197 control points. Mean offset 0.326m, standard deviation 0.043m, maximum difference from mean 0.152m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5761',0.02,'EPSG','8732','Vertical offset file','dunedin-1958-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ DUNE',0); INSERT INTO "usage" VALUES('EPSG','10296','grid_transformation','EPSG','7862','EPSG','3803','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7863','NZVD2016 height to Dunedin-Bluff 1960 height (1)','Derived at 205 control points. Mean offset 0.254m, standard deviation 0.039m, maximum difference from mean 0.11m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','4458',0.02,'EPSG','8732','Vertical offset file','dunedin-bluff-1960-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ DUBL',0); INSERT INTO "usage" VALUES('EPSG','10297','grid_transformation','EPSG','7863','EPSG','3806','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7864','NZVD2016 height to Gisborne 1926 height (1)','Derived at 274 control points. Mean offset 0.343m, standard deviation 0.025m, maximum difference from mean 0.09m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5762',0.02,'EPSG','8732','Vertical offset file','gisborne-1926-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ GISB',0); INSERT INTO "usage" VALUES('EPSG','10298','grid_transformation','EPSG','7864','EPSG','3771','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7865','NZVD2016 height to Lyttelton 1937 height (1)','Derived at 923 control points. Mean offset 0.34m, standard deviation 0.041m, maximum difference from mean 0.149m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5763',0.01,'EPSG','8732','Vertical offset file','lyttelton-1937-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ LYTT',0); INSERT INTO "usage" VALUES('EPSG','10299','grid_transformation','EPSG','7865','EPSG','3804','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7866','NZVD2016 height to Moturiki 1953 height (1)','Derived at 519 control points. Mean offset 0.309m, standard deviation 0.071m, maximum difference from mean 0.231m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5764',0.02,'EPSG','8732','Vertical offset file','moturiki-1953-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ MOTU',0); INSERT INTO "usage" VALUES('EPSG','10300','grid_transformation','EPSG','7866','EPSG','3768','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7867','NZVD2016 height to Napier 1962 height (1)','Derived at 207 control points. Mean offset 0.203m, standard deviation 0.034m, maximum difference from mean 0.096m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5765',0.02,'EPSG','8732','Vertical offset file','napier-1962-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ NAPI',0); INSERT INTO "usage" VALUES('EPSG','10301','grid_transformation','EPSG','7867','EPSG','3772','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7868','NZVD2016 height to Nelson 1955 height (1)','Derived at 256 control points. Mean offset 0.329m, standard deviation 0.039m, maximum difference from mean 0.114m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5766',0.02,'EPSG','8732','Vertical offset file','nelson-1955-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ NELS',0); INSERT INTO "usage" VALUES('EPSG','10302','grid_transformation','EPSG','7868','EPSG','3802','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7869','NZVD2016 height to One Tree Point 1964 height (1)','Derived at 137 control points. Mean offset 0.077m, standard deviation 0.042m, maximum difference from mean 0.107m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5767',0.01,'EPSG','8732','Vertical offset file','onetreepoint-1964-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ ONTP',0); INSERT INTO "usage" VALUES('EPSG','10303','grid_transformation','EPSG','7869','EPSG','3762','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7870','NZVD2016 height to Stewart Island 1977 height (1)','Derived at 4 control points. Mean offset 0.299m, standard deviation 0.025m, maximum difference from mean 0.039m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5772',0.18,'EPSG','8732','Vertical offset file','stewartisland-1977-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ STWT',0); INSERT INTO "usage" VALUES('EPSG','10304','grid_transformation','EPSG','7870','EPSG','3338','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7871','NZVD2016 height to Taranaki 1970 height (1)','Derived at 125 control points. Mean offset 0.286m, standard deviation 0.026m, maximum difference from mean 0.07m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5769',0.02,'EPSG','8732','Vertical offset file','taranaki-1970-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ TARA',0); INSERT INTO "usage" VALUES('EPSG','10305','grid_transformation','EPSG','7871','EPSG','3769','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7872','NZVD2016 height to Wellington 1953 height (1)','Derived at 137 control points. Mean offset 0.408m, standard deviation 0.054m, maximum difference from mean 0.112m.','EPSG','1071','Vertical Offset by Grid Interpolation (NZLVD)','EPSG','7839','EPSG','5770',0.02,'EPSG','8732','Vertical offset file','wellington-1953-to-nzvd2016-conversion.csv',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ WGTN',0); INSERT INTO "usage" VALUES('EPSG','10306','grid_transformation','EPSG','7872','EPSG','3773','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7891','SHGD2015 to SHVD2015 height (1)','This transformation defines SHVD2015 heights. For reversible alternative to this transformation see SHGD2015 to SHGD2015 + SHVD2015 height (1) (code 10614).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','7885','EPSG','7890',0.0,'EPSG','8666','Geoid (height correction) model file','Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','14318','grid_transformation','EPSG','7891','EPSG','3183','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7957','Canada velocity grid v6','NOTE: Before being deprecated this record had a second parameter (code 1048, value 8251) which has been removed due to being non-compliant with the data model.','EPSG','1070','Point motion by grid (NTv2_Vel)','EPSG','8251','EPSG','8251',0.01,'EPSG','1050','Point motion velocity grid file','cvg60.cvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg6.0',1); INSERT INTO "usage" VALUES('EPSG','10342','grid_transformation','EPSG','7957','EPSG','1061','EPSG','1058'); INSERT INTO "grid_transformation" VALUES('EPSG','7958','ETRS89 to Belfast height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Belfast height (1) (tfm code 5334). For reversible alternative to this transformation see ETRS89 to ETRS89 + Belfast height (2) (code 9592).','EPSG','1072','Geographic3D to GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','5732',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI 2015',0); INSERT INTO "usage" VALUES('EPSG','14505','grid_transformation','EPSG','7958','EPSG','2530','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7959','ETRS89 to Malin Head height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Malin Head height (1) (tfm code 5335). For reversible alternative to this transformation see ETRS89 to ETRS89 + Malin Head height (2) (code 9591).','EPSG','1072','Geographic3D to GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','5731',0.023,'EPSG','8666','Geoid (height correction) model file','OSGM15_Malin.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire 2015',0); INSERT INTO "usage" VALUES('EPSG','10344','grid_transformation','EPSG','7959','EPSG','1305','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','7969','NGVD29 height (m) to NAVD88 height (1)','In this area the NGVD29 vertical reference surface is approximately 0.6 to 1.6m below the NAVD88 datum surface. Interpolation within the gridded data file may be made using either NAD27 or any of the realizations of NAD83 applicable to US conus.','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','7968','EPSG','5703',0.02,'EPSG','8732','Vertical offset file','vertconw.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus W',0); INSERT INTO "usage" VALUES('EPSG','10352','grid_transformation','EPSG','7969','EPSG','2950','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7970','NGVD29 height (m) to NAVD88 height (2)','In the SE of this area the NGVD29 surface is 0 to 0.1m above the NAVD88 surface; in the W it is 0.6 to 0.9m below the NAVD88 surface. Interpolation in the data file may be made using either NAD27 or any of the NAD83 realizations applicable to US conus.','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','7968','EPSG','5703',0.02,'EPSG','8732','Vertical offset file','vertconc.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus C',0); INSERT INTO "usage" VALUES('EPSG','10353','grid_transformation','EPSG','7970','EPSG','2949','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7971','NGVD29 height (m) to NAVD88 height (3)','In this area the NGVD29 vertical reference surface is approximately 0 to 0.5m above the NAVD88 surface. Interpolation within the gridded data file may be made using either NAD27 or any of the realisations of NAD83 applicable to US conus.','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','7968','EPSG','5703',0.02,'EPSG','8732','Vertical offset file','vertcone.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus E',0); INSERT INTO "usage" VALUES('EPSG','10354','grid_transformation','EPSG','7971','EPSG','2948','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','8037','WGS 84 to MSL height (1)','Parameter values are from WGS 84 to EGM2008 height (2) (CT code 3859) assuming that the EGM2008 surface equals MSL surface within the accuracy of the transformation. For reversible alternative see WGS 84 to WGS 84 + MSL height (1) (code 9706).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4979','EPSG','5714',0.5,'EPSG','8666','Geoid (height correction) model file','Und_min1x1_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-World',0); INSERT INTO "usage" VALUES('EPSG','10394','grid_transformation','EPSG','8037','EPSG','1262','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8268','GR96 to GVR2000 height (1)','Defines GVR2000. File is also available in NOAA VDatum format (ggeoid2000.gtx) and GeoTIFF format (ggeoid2000.tif). For reversible alternative to this transformation see GR96 to GR96 + GVR2000 height (1) (code 9598).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4909','EPSG','8266',0.1,'EPSG','8666','Geoid (height correction) model file','gr2000g.gri',NULL,NULL,NULL,NULL,NULL,NULL,'SDFE-Grl',0); INSERT INTO "usage" VALUES('EPSG','14329','grid_transformation','EPSG','8268','EPSG','4461','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8269','GR96 to GVR2016 height (1)','Defines GVR2016. File is also available in NOAA VDatum format (ggeoid2016.gtx) and GeoTIFF format (ggeoid2016.tif). For reversible alternative to this transformation see GR96 to GR96 + GVR2016 height (1) (code 9599).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4909','EPSG','8267',0.1,'EPSG','8666','Geoid (height correction) model file','ggeoid16.gri',NULL,NULL,NULL,NULL,NULL,NULL,'SDFE-Grl',0); INSERT INTO "usage" VALUES('EPSG','14333','grid_transformation','EPSG','8269','EPSG','4454','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8271','RGF93 to NGF IGN69 height (2)','Replaces RGF93 to NGF IGN69 height (1) (code 10000). Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4965','EPSG','5720',0.02,'EPSG','8666','Geoid (height correction) model file','RAF09.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 09',1); INSERT INTO "usage" VALUES('EPSG','10464','grid_transformation','EPSG','8271','EPSG','1326','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8272','RGF93 to IGN78 Corsica height (1)','Replaces RGF93 to NGF IGN69 height (1) (code 10002). Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4965','EPSG','5721',0.05,'EPSG','8666','Geoid (height correction) model file','RAC09.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra Cor 09',1); INSERT INTO "usage" VALUES('EPSG','10465','grid_transformation','EPSG','8272','EPSG','1327','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8361','ETRS89 to ETRS89 + Baltic 1957 height (1)','Uses ETRS89 (realization ETRF2000) and quasigeoid model DVRM05. 1 sigma = 34 mm (test performed on 563 independent points). Recommended as part of transformation between Baltic 1957 height and EVRF2007 height (see concatenated operation code 8363).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4937','EPSG','8360',0.03,'EPSG','8666','Geoid (height correction) model file','Slovakia_ETRS89h_to_Baltic1957.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','UGKK-Svk',0); INSERT INTO "usage" VALUES('EPSG','10508','grid_transformation','EPSG','8361','EPSG','1211','EPSG','1186'); INSERT INTO "grid_transformation" VALUES('EPSG','8362','ETRS89 to ETRS89 + EVRF2007 height (1)','Uses ETRS89 (realization ETRF2000) and quasigeoid model DMQSK2014E. 1 sigma = 29 mm (test performed on 93 independent points). Recommended as part of transformation between Baltic 1957 height and EVRF2007 height (see concatenated operation code 8363).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4937','EPSG','7423',0.03,'EPSG','8666','Geoid (height correction) model file','Slovakia_ETRS89h_to_EVRF2007.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','UGKK-Svk',0); INSERT INTO "usage" VALUES('EPSG','10509','grid_transformation','EPSG','8362','EPSG','1211','EPSG','1186'); INSERT INTO "grid_transformation" VALUES('EPSG','8364','S-JTSK [JTSK03] to S-JTSK (1)','Derived at 684 identical points. Also available as an NTv2 file.','EPSG','9613','NADCON','EPSG','8351','EPSG','4156',0.05,'EPSG','8657','Latitude difference file','Slovakia_JTSK03_to_JTSK.LAS','EPSG','8658','Longitude difference file','Slovakia_JTSK03_to_JTSK.LOS',NULL,NULL,'UGKK-Svk',0); INSERT INTO "usage" VALUES('EPSG','10511','grid_transformation','EPSG','8364','EPSG','1211','EPSG','1079'); INSERT INTO "grid_transformation" VALUES('EPSG','8369','BD72 to ETRS89 (3)','File name is lower case and despite its name is between geographic CRSs. (Similarly-named file in upper case BD72LB72_ETRS89LB08 operates in projected CRS domain).','EPSG','9615','NTv2','EPSG','4313','EPSG','4258',0.01,'EPSG','8656','Latitude and longitude difference file','bd72lb72_etrs89lb08.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel 0.01m',0); INSERT INTO "usage" VALUES('EPSG','10516','grid_transformation','EPSG','8369','EPSG','1347','EPSG','1150'); INSERT INTO "grid_transformation" VALUES('EPSG','8371','RGF93 v2 to NGF-IGN69 height (2)','Replaces ggf97a geoid model [RGF93 v1 to NGF IGN69 height (1) (code 10000)]. Replaced by RAF18 model. Accuracy at each 0.0333333333333° in longitude and 0.025° in latitude grid node is given within the model file.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9776','EPSG','5720',0.02,'EPSG','8666','Geoid (height correction) model file','RAF09.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 09',0); INSERT INTO "usage" VALUES('EPSG','10517','grid_transformation','EPSG','8371','EPSG','1326','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8372','RGF93 v2 to NGF-IGN78 height (2)','Replaces ggf97a model (code 10002)]. Replaced by RAC23 model (code 10506). Accuracy at each grid node is given in the geoid model file. For reversible alternative see RGF93 v2 to RGF93 v2 + NGF-IGN78 height (2) (code 9639).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9776','EPSG','5721',0.05,'EPSG','8666','Geoid (height correction) model file','RAC09.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra Cor 09',0); INSERT INTO "usage" VALUES('EPSG','10518','grid_transformation','EPSG','8372','EPSG','1327','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8444','GDA94 to GDA2020 (4)','See GDA94 to GDA2020 (1) (code 8048) for transformation using Helmert method which gives identical results.','EPSG','9615','NTv2','EPSG','4283','EPSG','7844',0.05,'EPSG','8656','Latitude and longitude difference file','GDA94_GDA2020_conformal_christmas_island.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Cxr Conf',0); INSERT INTO "usage" VALUES('EPSG','10564','grid_transformation','EPSG','8444','EPSG','4169','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8445','GDA94 to GDA2020 (5)','See GDA94 to GDA2020 (1) (code 8048) for transformation using Helmert method which gives identical results.','EPSG','9615','NTv2','EPSG','4283','EPSG','7844',0.05,'EPSG','8656','Latitude and longitude difference file','GDA94_GDA2020_conformal_cocos_island.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Cck Conf',0); INSERT INTO "usage" VALUES('EPSG','10565','grid_transformation','EPSG','8445','EPSG','1069','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8446','GDA94 to GDA2020 (3)','Gives identical results to Helmert transformation GDA94 to GDA2020 (1) (code 8048). See GDA94 to GDA2020 (2) (code 8447) for alternative with local distortion modelling included. GDA2020 Technical Manual and fact sheet T1 give guidance on which to use.','EPSG','9615','NTv2','EPSG','4283','EPSG','7844',0.05,'EPSG','8656','Latitude and longitude difference file','GDA94_GDA2020_conformal.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus NTv2 Conf',0); INSERT INTO "usage" VALUES('EPSG','10566','grid_transformation','EPSG','8446','EPSG','2575','EPSG','1108'); INSERT INTO "grid_transformation" VALUES('EPSG','8447','GDA94 to GDA2020 (2)','See GDA94 to GDA2020 (1) or (3) (codes 8048 and 8446) for alternative conformal-only transformation without local distortion modelling. GDA2020 Technical Manual and fact sheet T1 give guidance on which to use.','EPSG','9615','NTv2','EPSG','4283','EPSG','7844',0.05,'EPSG','8656','Latitude and longitude difference file','GDA94_GDA2020_conformal_and_distortion.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf and Dist',0); INSERT INTO "usage" VALUES('EPSG','10567','grid_transformation','EPSG','8447','EPSG','2575','EPSG','1234'); INSERT INTO "grid_transformation" VALUES('EPSG','8451','GDA2020 to AHD height (1)','File name previously called AUSGeoid2020_windows_binary.gsb. Uncertainties given in accompanying file AUSGeoid2020_20180201_error.gsb. For reversible alternative to this transformation see GDA2020 to GDA2020 + AHD height (1) (code 9466).','EPSG','1048','Geographic3D to GravityRelatedHeight (AUSGeoid v2)','EPSG','7843','EPSG','5711',0.15,'EPSG','8666','Geoid (height correction) model file','AUSGeoid2020_20180201.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus 2020',0); INSERT INTO "usage" VALUES('EPSG','10570','grid_transformation','EPSG','8451','EPSG','4493','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','8546','St. George Island to NAD83 (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4138','EPSG','4269',0.15,'EPSG','8657','Latitude difference file','nadcon5.sg1952.nad83_1986.stgeorge.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.sg1952.nad83_1986.stgeorge.lon.trn.20160901.b',NULL,NULL,'NGS-Usa AK StG Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10638','grid_transformation','EPSG','8546','EPSG','1331','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8547','St. Lawrence Island to NAD83 (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4136','EPSG','4269',0.5,'EPSG','8657','Latitude difference file','nadcon5.sl1952.nad83_1986.stlawrence.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.sl1952.nad83_1986.stlawrence.lon.trn.20160901.b',NULL,NULL,'NGS-Usa AK StL Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10639','grid_transformation','EPSG','8547','EPSG','1332','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8548','St. Paul Island to NAD83 (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4137','EPSG','4269',0.5,'EPSG','8657','Latitude difference file','nadcon5.sp1952.nad83_1986.stpaul.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.sp1952.nad83_1986.stpaul.lon.trn.20160901.b',NULL,NULL,'NGS-Usa AK StP Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10640','grid_transformation','EPSG','8548','EPSG','1333','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8549','NAD27 to NAD83 (8)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; source and target CRSs have longitudes positive east in range -180° to +180°. Accuracy at 67% confidence level is 0.5m onshore, 5m nearshore and undetermined farther offshore.','EPSG','1074','NADCON5 (2D)','EPSG','4267','EPSG','4269',0.5,'EPSG','8657','Latitude difference file','nadcon5.nad27.nad83_1986.alaska.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad27.nad83_1986.alaska.lon.trn.20160901.b',NULL,NULL,'NGS-Usa AK Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10641','grid_transformation','EPSG','8549','EPSG','1330','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8550','NAD83 to NAD83(HARN) (48)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4269','EPSG','4152',0.15,'EPSG','8657','Latitude difference file','nadcon5.nad83_1986.nad83_1992.alaska.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1986.nad83_1992.alaska.lon.trn.20160901.b',NULL,NULL,'NGS-Usa AK Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10642','grid_transformation','EPSG','8550','EPSG','2373','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8551','NAD83(HARN) to NAD83(NSRS2007) (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','4759',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1992.nad83_2007.alaska.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1992.nad83_2007.alaska.lon.trn.20160901.b',NULL,NULL,'NGS-Usa AK Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10643','grid_transformation','EPSG','8551','EPSG','2373','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8552','NAD83(NSRS2007) to NAD83(2011) (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4759','EPSG','6318',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2007.nad83_2011.alaska.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2007.nad83_2011.alaska.lon.trn.20160901.b',NULL,NULL,'NGS-Usa AK Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10644','grid_transformation','EPSG','8552','EPSG','1330','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8555','NAD27 to NAD83 (7)','NADCON5 method expects longitudes 0-360°; source and target CRS longitudes in range ±180°. Accuracy at 67% confidence level is 0.15m onshore, 1m nearshore and undetermined farther offshore. For application in Gulf of Mexico refer to IOGP report 373-26.','EPSG','1074','NADCON5 (2D)','EPSG','4267','EPSG','4269',0.15,'EPSG','8657','Latitude difference file','nadcon5.nad27.nad83_1986.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad27.nad83_1986.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10647','grid_transformation','EPSG','8555','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8556','NAD83 to NAD83(HARN) (47)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1986.nad83_harn.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1986.nad83_harn.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10648','grid_transformation','EPSG','8556','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8557','NAD83(HARN) to NAD83(FBN) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8449',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_harn.nad83_fbn.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_harn.nad83_fbn.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10649','grid_transformation','EPSG','8557','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8558','NAD83(FBN) to NAD83(NSRS2007) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8449','EPSG','4759',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_fbn.nad83_2007.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_fbn.nad83_2007.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10650','grid_transformation','EPSG','8558','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8559','NAD83(NSRS2007) to NAD83(2011) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4759','EPSG','6318',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2007.nad83_2011.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2007.nad83_2011.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10651','grid_transformation','EPSG','8559','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8561','Old Hawaiian to NAD83 (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4135','EPSG','4269',0.2,'EPSG','8657','Latitude difference file','nadcon5.ohd.nad83_1986.hawaii.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.ohd.nad83_1986.hawaii.lon.trn.20160901.b',NULL,NULL,'NGS-Usa HI Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10653','grid_transformation','EPSG','8561','EPSG','1334','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8660','NAD83 to NAD83(HARN) (49)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1986.nad83_1993.hawaii.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1986.nad83_1993.hawaii.lon.trn.20160901.b',NULL,NULL,'NGS-Usa HI Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10752','grid_transformation','EPSG','8660','EPSG','1334','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8661','NAD83(HARN) to NAD83(PA11) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','6322',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1993.nad83_pa11.hawaii.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1993.nad83_pa11.hawaii.lon.trn.20160901.b',NULL,NULL,'NGS-Usa HI Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10753','grid_transformation','EPSG','8661','EPSG','1334','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8662','American Samoa 1962 to NAD83(HARN) (3)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4169','EPSG','4152',5.0,'EPSG','8657','Latitude difference file','nadcon5.as62.nad83_1993.as.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.as62.nad83_1993.as.lon.trn.20160901.b',NULL,NULL,'NGS-Asm Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10754','grid_transformation','EPSG','8662','EPSG','3109','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8663','NAD83(HARN) to NAD83(FBN) (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8449',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1993.nad83_2002.as.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1993.nad83_2002.as.lon.trn.20160901.b',NULL,NULL,'NGS-Asm Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10755','grid_transformation','EPSG','8663','EPSG','3110','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8664','NAD83(FBN) to NAD83(PA11) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8449','EPSG','6322',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2002.nad83_pa11.as.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2002.nad83_pa11.as.lon.trn.20160901.b',NULL,NULL,'NGS-Asm Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10756','grid_transformation','EPSG','8664','EPSG','3110','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8665','Guam 1963 to NAD83(HARN) (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4675','EPSG','4152',5.0,'EPSG','8657','Latitude difference file','nadcon5.gu63.nad83_1993.guamcnmi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.gu63.nad83_1993.guamcnmi.lon.trn.20160901.b',NULL,NULL,'NGS-Gum NADCON5',0); INSERT INTO "usage" VALUES('EPSG','10757','grid_transformation','EPSG','8665','EPSG','4525','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8666','NAD83(HARN) to NAD83(FBN) (3)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8449',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1993.nad83_2002.guamcnmi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1993.nad83_2002.guamcnmi.lon.trn.20160901.b',NULL,NULL,'NGS-Gum Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10758','grid_transformation','EPSG','8666','EPSG','4525','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8667','NAD83(FBN) to NAD83(MA11) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8449','EPSG','6325',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2002.nad83_ma11.guamcnmi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2002.nad83_ma11.guamcnmi.lon.trn.20160901.b',NULL,NULL,'NGS-Gum Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10759','grid_transformation','EPSG','8667','EPSG','4525','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8668','Puerto Rico to NAD83 (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4139','EPSG','4269',0.15,'EPSG','8657','Latitude difference file','nadcon5.pr40.nad83_1986.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.pr40.nad83_1986.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10760','grid_transformation','EPSG','8668','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8669','NAD83 to NAD83(HARN) (50)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1074','NADCON5 (2D)','EPSG','4269','EPSG','4152',0.15,'EPSG','8657','Latitude difference file','nadcon5.nad83_1986.nad83_1993.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1986.nad83_1993.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10761','grid_transformation','EPSG','8669','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8670','NAD83(HARN) to NAD83(HARN Corrected) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8545',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1997.nad83_2002.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1997.nad83_2002.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10762','grid_transformation','EPSG','8670','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8671','NAD83(HARN Corrected) to NAD83(FBN) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8545','EPSG','8449',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1997.nad83_2002.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1997.nad83_2002.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10763','grid_transformation','EPSG','8671','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8672','NAD83(FBN) to NAD83(NSRS2007) (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8449','EPSG','4759',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2002.nad83_2007.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2002.nad83_2007.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',1); INSERT INTO "usage" VALUES('EPSG','10764','grid_transformation','EPSG','8672','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8673','NAD83(NSRS2007) to NAD83(2011) (3)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4759','EPSG','6318',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2007.nad83_2011.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2007.nad83_2011.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10765','grid_transformation','EPSG','8673','EPSG','2251','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8676','Canada velocity grid v6','File initially published as cvg60.cvb, later renamed to NAD83v6VG.gvb with no change of content. Not recommended for height transformation north of 60°N due to inaccuracies in the vertical component of the model. Replaced by Canada velocity grid v7. Although the interpolation CRS is given as NAD83(CSRS)v6 (also known as NAD83(CSRS) 2010), any version of NAD83(CSRS) may be used for grid interpolation without significant error.','EPSG','1141','Point motion by grid (NEU domain) (NTv2_Vel)','EPSG','8251','EPSG','8251',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','NRC-Can cvg6.0',0); INSERT INTO "usage" VALUES('EPSG','10767','grid_transformation','EPSG','8676','EPSG','4752','EPSG','1058'); INSERT INTO "usage" VALUES('EPSG','20820','grid_transformation','EPSG','8676','EPSG','4753','EPSG','1288'); INSERT INTO "grid_transformation" VALUES('EPSG','8861','NAD83(HARN) to NAD83(FBN) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8860',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_harn.nad83_fbn.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_harn.nad83_fbn.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10803','grid_transformation','EPSG','8861','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8862','NAD83(FBN) to NAD83(NSRS2007) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8860','EPSG','4759',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_fbn.nad83_2007.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_fbn.nad83_2007.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10804','grid_transformation','EPSG','8862','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8863','NAD83(HARN) to NAD83(FBN) (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8860',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1993.nad83_2002.as.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1993.nad83_2002.as.lon.trn.20160901.b',NULL,NULL,'NGS-Asm Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10805','grid_transformation','EPSG','8863','EPSG','3110','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8864','NAD83(FBN) to NAD83(PA11) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8860','EPSG','6322',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2002.nad83_pa11.as.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2002.nad83_pa11.as.lon.trn.20160901.b',NULL,NULL,'NGS-Asm Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10806','grid_transformation','EPSG','8864','EPSG','3110','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8865','NAD83(HARN) to NAD83(FBN) (3)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8860',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1993.nad83_2002.guamcnmi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1993.nad83_2002.guamcnmi.lon.trn.20160901.b',NULL,NULL,'NGS-Gum Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10807','grid_transformation','EPSG','8865','EPSG','4525','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8866','NAD83(FBN) to NAD83(MA11) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8860','EPSG','6325',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2002.nad83_ma11.guamcnmi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2002.nad83_ma11.guamcnmi.lon.trn.20160901.b',NULL,NULL,'NGS-Gum Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10808','grid_transformation','EPSG','8866','EPSG','4525','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8867','NAD83(HARN Corrected) to NAD83(FBN) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8545','EPSG','8860',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1997.nad83_2002.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1997.nad83_2002.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10809','grid_transformation','EPSG','8867','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8868','NAD83(FBN) to NAD83(NSRS2007) (2)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8860','EPSG','4759',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2002.nad83_2007.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2002.nad83_2007.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10810','grid_transformation','EPSG','8868','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8885','RGF93 v2 to NGF-IGN69 height (3)','Replaces RAF09 geoid model [RGF93 v2 to NGF-IGN69 height (2) (code 8371)]. Replaced by RAF18b model. May also be found with filename RAF18.tac. For reversible alternative see RGF93 v2 to RGF93 v2 + NGF-IGN69 height (3) (code 9638).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9776','EPSG','5720',0.01,'EPSG','8666','Geoid (height correction) model file','RAF18.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 18',0); INSERT INTO "usage" VALUES('EPSG','14492','grid_transformation','EPSG','8885','EPSG','1326','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9084','ITRF96 to NZGD2000 (1)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaced by 2013-08-01 model (CT code 9085).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20000101_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2000-01-01',0); INSERT INTO "usage" VALUES('EPSG','10898','grid_transformation','EPSG','9084','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9085','ITRF96 to NZGD2000 (2)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2000-01-01 model (CT code 9084). Replaced by 2013-08-01 model (CT code 9086).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20130801_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2013-08-01',0); INSERT INTO "usage" VALUES('EPSG','10899','grid_transformation','EPSG','9085','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9086','ITRF96 to NZGD2000 (3)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2013-08-01 model (CT code 9085). Replaced by 2015-01-01 model (CT code 9087).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20140201_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2014-02-01',0); INSERT INTO "usage" VALUES('EPSG','10900','grid_transformation','EPSG','9086','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9087','ITRF96 to NZGD2000 (4)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2014-02-01 model (CT code 9086). Replaced by 2016-07-01 model (CT code 9088).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20150101_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2015-01-01',0); INSERT INTO "usage" VALUES('EPSG','10901','grid_transformation','EPSG','9087','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9088','ITRF96 to NZGD2000 (5)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2015-01-01 model (CT code 9087). Replaced by 2017-12-01 model (CT code 9089).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20160701_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2016-07-01',0); INSERT INTO "usage" VALUES('EPSG','10902','grid_transformation','EPSG','9088','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9089','ITRF96 to NZGD2000 (6)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2016-07-01 model (CT code 9088). Replaced by 2018-07-01 model (CT code 9090).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20171201_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2017-12-01',0); INSERT INTO "usage" VALUES('EPSG','10903','grid_transformation','EPSG','9089','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9090','ITRF96 to NZGD2000 (7)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2017-12-01 model (CT code 9089).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20180701_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2018-07-01',0); INSERT INTO "usage" VALUES('EPSG','14197','grid_transformation','EPSG','9090','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9105','ATS77 to NAD83 (1)','','EPSG','9615','NTv2','EPSG','4122','EPSG','4269',0.5,'EPSG','8656','Latitude and longitude difference file','GS7783.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS',0); INSERT INTO "usage" VALUES('EPSG','10919','grid_transformation','EPSG','9105','EPSG','2313','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9106','ATS77 to NAD83(CSRS)v6 (4)','Derived through NAD83(CSRS)v6. Replaces ATS77 to NAD83(CSRS)v3 (3) (transformation code 9235).','EPSG','9615','NTv2','EPSG','4122','EPSG','8252',0.06,'EPSG','8656','Latitude and longitude difference file','NS778302.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS v2',0); INSERT INTO "usage" VALUES('EPSG','10920','grid_transformation','EPSG','9106','EPSG','2313','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9107','NAD27 to NAD83(CSRS)v3 (5)','Derived through NAD83(CSRS)v3 but within accuracy of transformation may be assumed to apply to any version. For Toronto use NAD27 to NAD83(CSRS) (6) (CT code 9108).','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','ON27CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont ex Tor',0); INSERT INTO "usage" VALUES('EPSG','10921','grid_transformation','EPSG','9107','EPSG','4537','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9108','NAD27 to NAD83(CSRS)v3 (6)','Derived through NAD83(CSRS)v3 but within accuracy of transformation may be assumed to apply to any version. For Ontario excluding Toronto use NAD27 to NAD83(CSRS) (5) (CT code 9107). Previously available from Land Information Ontario as TOR27CSv1.GSB.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.0,'EPSG','8656','Latitude and longitude difference file','TO27CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont Tor',0); INSERT INTO "usage" VALUES('EPSG','10922','grid_transformation','EPSG','9108','EPSG','4536','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9109','NAD27(76) to NAD83(CSRS)v3 (1)','Derived through NAD83(CSRS)v3 but within accuracy of transformation may be assumed to apply to any version.','EPSG','9615','NTv2','EPSG','4608','EPSG','8240',1.0,'EPSG','8656','Latitude and longitude difference file','ON76CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont',0); INSERT INTO "usage" VALUES('EPSG','10923','grid_transformation','EPSG','9109','EPSG','1367','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9110','NAD83 to NAD83(CSRS)v3 (5)','Derived through NAD83(CSRS)v3.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','ON83CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont',0); INSERT INTO "usage" VALUES('EPSG','10924','grid_transformation','EPSG','9110','EPSG','1367','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9111','NAD27 to NAD83 (9)','','EPSG','9615','NTv2','EPSG','4267','EPSG','4269',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-83.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ISC-Can SK',0); INSERT INTO "usage" VALUES('EPSG','10925','grid_transformation','EPSG','9111','EPSG','2375','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9112','NAD27 to NAD83(CSRS)v2 (7)','Derived through NAD83(CSRS)v2. Replaced by NAD27 to NAD83(CSRS) (8) (CT code 9113) for CRD, NAD27 to NAD83(CSRS) (9) (CT code 9114) forn north Vancouver Island and NAD27 to NAD83(CSRS) (10) (CT code 9115) for mainland.','EPSG','9615','NTv2','EPSG','4267','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','BC_27_98.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CSRSv2',0); INSERT INTO "usage" VALUES('EPSG','10926','grid_transformation','EPSG','9112','EPSG','2832','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9113','NAD27 to NAD83(CSRS)v3 (8)','Derived through NAD83(CSRS)v3.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','CRD27_00.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CRD',0); INSERT INTO "usage" VALUES('EPSG','10927','grid_transformation','EPSG','9113','EPSG','4533','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9114','NAD27 to NAD83(CSRS)v3 (9)','Derived through NAD83(CSRS)v3.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','NVI27_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC NVI',0); INSERT INTO "usage" VALUES('EPSG','10928','grid_transformation','EPSG','9114','EPSG','4534','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9115','NAD27 to NAD83(CSRS)v4 (10)','Derived through NAD83(CSRS)v4.','EPSG','9615','NTv2','EPSG','4267','EPSG','8246',1.5,'EPSG','8656','Latitude and longitude difference file','BC_27_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0); INSERT INTO "usage" VALUES('EPSG','10929','grid_transformation','EPSG','9115','EPSG','4535','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9116','NAD83 to NAD83(CSRS)v2 (6)','Derived through NAD83(CSRS)v2. Replaced by NAD83 to NAD83(CSRS) (7) (CT code 9117) for CRD, NAD83 to NAD83(CSRS) (8) (CT code 9118) for north Vancouver Island and NAD83 to NAD83(CSRS) (9) (CT code 9119) for mainland.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237',0.1,'EPSG','8656','Latitude and longitude difference file','BC_93_98.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CSRSv2',0); INSERT INTO "usage" VALUES('EPSG','10930','grid_transformation','EPSG','9116','EPSG','2832','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9117','NAD83 to NAD83(CSRS)v3 (7)','Derived through NAD83(CSRS)v3.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','CRD93_00.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CRD',0); INSERT INTO "usage" VALUES('EPSG','10931','grid_transformation','EPSG','9117','EPSG','4533','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9118','NAD83 to NAD83(CSRS)v3 (8)','Derived through NAD83(CSRS)v3.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','NVI93_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC NVI',0); INSERT INTO "usage" VALUES('EPSG','10932','grid_transformation','EPSG','9118','EPSG','4534','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9119','NAD83 to NAD83(CSRS)v4 (9)','Derived through NAD83(CSRS)v4.','EPSG','9615','NTv2','EPSG','4269','EPSG','8246',0.1,'EPSG','8656','Latitude and longitude difference file','BC_93_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0); INSERT INTO "usage" VALUES('EPSG','10933','grid_transformation','EPSG','9119','EPSG','4535','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9120','NAD83(CSRS)v2 to NAD83(CSRS)v3 (1)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','CRD98_00.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CRD',0); INSERT INTO "usage" VALUES('EPSG','10934','grid_transformation','EPSG','9120','EPSG','4533','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9121','NAD83(CSRS)v2 to NAD83(CSRS)v3 (2)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','NVI98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC NVI',0); INSERT INTO "usage" VALUES('EPSG','10935','grid_transformation','EPSG','9121','EPSG','4534','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9122','NAD83(CSRS)v2 to NAD83(CSRS)v4 (1)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','BC_98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',1); INSERT INTO "usage" VALUES('EPSG','10936','grid_transformation','EPSG','9122','EPSG','4535','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9123','NAD83(CSRS) to CGVD28 height (1)','Derived through NAD83(CSRS)v3.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','4955','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_0.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2000',1); INSERT INTO "usage" VALUES('EPSG','10937','grid_transformation','EPSG','9123','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9124','ITRF2008 to CGVD2013(CGG2013) height (1)','Uses CGG2013 model derived through NAD83(CSRS)v6. In ITRF the CGVD2013 geoid velocity is not zero so CGVD2013 heights derived through ITRF change with respect to NAD83(CSRS)v6: CGRSC recommends using NAD83(CSRS)v6 (code 9246). Replaced by CT code 9125.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','7911','EPSG','6647',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013i08.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013',0); INSERT INTO "usage" VALUES('EPSG','10938','grid_transformation','EPSG','9124','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9125','ITRF2008 to CGVD2013a(2010) height (2)','Replaces CT code 9124. Uses CGG2013a model at epoch 2010.0. In ITRF the CGVD2013 geoid velocity is not zero so CGVD2013 heights derived through ITRF change with respect to those derived through NAD83(CSRS). CGRSC recommends using NAD83(CSRS) (code 9247).','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','7911','EPSG','9245',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013ai08.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013a',0); INSERT INTO "usage" VALUES('EPSG','10939','grid_transformation','EPSG','9125','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9131','RGAF09 to IGN 2008 LD height (1)','Replaces RGAF09 to IGN 1992 LD height (1) (CT code 5507). Accuracy 0.1-0.2m within onshore area. For reversible alternative to this transformation see RGAF09 to RGAF09 + IGN 2008 LD height (1) (code 9636).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9130',0.2,'EPSG','8666','Geoid (height correction) model file','RALD2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp Des',0); INSERT INTO "usage" VALUES('EPSG','10944','grid_transformation','EPSG','9131','EPSG','2893','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9132','RRAF 1991 to IGN 2008 LD height (1)','Replaces RRAF 1991 to IGN 1992 LD height (1) (CT code 4566). Accuracy 0.1-0.2m within onshore area. For reversible alternative to this transformation see RRAF 1991 to RRAF 1991 + IGN 2008 LD height (1) (code 9642).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4557','EPSG','9130',0.2,'EPSG','8666','Geoid (height correction) model file','RALDW842016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp Des',0); INSERT INTO "usage" VALUES('EPSG','14503','grid_transformation','EPSG','9132','EPSG','2893','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9133','RGAF09 to Guadeloupe 1988 height (2)','Replaces RGAF09 to Guadeloupe 1988 height (1) (CT code 5503). Accuracy 0.01-0.05m within onshore areas. For reversible alternative to this transformation see RGAF09 to RGAF09 + Guadeloupe 1988 height (2) (code 9631).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5757',0.05,'EPSG','8666','Geoid (height correction) model file','RAGTBT2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp GT 2016',0); INSERT INTO "usage" VALUES('EPSG','14426','grid_transformation','EPSG','9133','EPSG','2892','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9134','RGAF09 to IGN 1988 LS height (2)','Replaces RGAF09 to IGN 1988 LS height (2) (CT code 5506). Accuracy 0.05-0.1m within onshore area. For reversible alternative to this transformation see RGAF09 to RGAF09 to IGN 1988 LS height (2) (code 9632).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5616',0.1,'EPSG','8666','Geoid (height correction) model file','RALS2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp LSt 2016',0); INSERT INTO "usage" VALUES('EPSG','14477','grid_transformation','EPSG','9134','EPSG','2895','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9135','RGAF09 to IGN 1988 MG height (2)','Replaces RGAF09 to IGN 1988 MG height (1), CT code 5504. Accuracy 0.0.5-0.1m within onshore area. For reversible alternative to this transformation see RGAF09 to RGAF09 + IGN 1988 MG height (2) (code 9633).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5617',0.1,'EPSG','8666','Geoid (height correction) model file','RAMG2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG 2016',0); INSERT INTO "usage" VALUES('EPSG','14476','grid_transformation','EPSG','9135','EPSG','2894','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9136','RGAF09 to Martinique 1987 height (2)','Replaces RGAF09 to Martinique 1987 height (1) (CT code 5502). Accuracy 0.01m to 0.05m within onshore area. For reversible alternative to this transformation see RGAF09 to RGAF09 + Martinique 1987 height (2) (code 9637).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5756',0.05,'EPSG','8666','Geoid (height correction) model file','RAMART2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Mtq 2016',0); INSERT INTO "usage" VALUES('EPSG','14488','grid_transformation','EPSG','9136','EPSG','3276','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9137','RGSPM06 to Danger 1950 height (1)','Accuracy 0.10m to 0.20m within onshore area.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4466','EPSG','5792',0.2,'EPSG','8666','Geoid (height correction) model file','GGSPM06v1.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-SPM',0); INSERT INTO "usage" VALUES('EPSG','10950','grid_transformation','EPSG','9137','EPSG','3299','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9160','NAD83(HARN) to NAVD88 height (1)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NW',0); INSERT INTO "usage" VALUES('EPSG','10955','grid_transformation','EPSG','9160','EPSG','2977','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9161','NAD83(HARN) to NAVD88 height (2)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u02.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNW',0); INSERT INTO "usage" VALUES('EPSG','10956','grid_transformation','EPSG','9161','EPSG','2978','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9162','NAD83(HARN) to NAVD88 height (3)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u03.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNE',0); INSERT INTO "usage" VALUES('EPSG','10957','grid_transformation','EPSG','9162','EPSG','2979','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9163','NAD83(HARN) to NAVD88 height (4)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u04.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NE',0); INSERT INTO "usage" VALUES('EPSG','10958','grid_transformation','EPSG','9163','EPSG','2980','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9164','NAD83(HARN) to NAVD88 height (5)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u05.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SW',0); INSERT INTO "usage" VALUES('EPSG','10959','grid_transformation','EPSG','9164','EPSG','2973','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9165','NAD83(HARN) to NAVD88 height (6)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u06.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSW',0); INSERT INTO "usage" VALUES('EPSG','10960','grid_transformation','EPSG','9165','EPSG','2974','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9166','NAD83(HARN) to NAVD88 height (7)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u07.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSE',0); INSERT INTO "usage" VALUES('EPSG','10961','grid_transformation','EPSG','9166','EPSG','2975','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9167','NAD83(HARN) to NAVD88 height (8)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u08.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SE',0); INSERT INTO "usage" VALUES('EPSG','10962','grid_transformation','EPSG','9167','EPSG','2976','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9168','NAD83(FBN) to NAVD88 height (1)','Uses Geoid03 hybrid model. Replaced by 2009 model (CT code 9173).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','8542','EPSG','5703',0.02,'EPSG','8666','Geoid (height correction) model file','geoid03_conus.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus',0); INSERT INTO "usage" VALUES('EPSG','10963','grid_transformation','EPSG','9168','EPSG','1323','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9169','NAD83(HARN) to NAVD88 height (9)','Uses Geoid06 hybrid model. Replaced by Geoid09 model (CT code 9174).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4957','EPSG','5703',0.02,'EPSG','8666','Geoid (height correction) model file','geoid06_ak.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US AK',0); INSERT INTO "usage" VALUES('EPSG','10964','grid_transformation','EPSG','9169','EPSG','1330','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9170','NAD83(FBN) to ASVD02 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7650).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','8542','EPSG','6643',0.05,'EPSG','8666','Geoid (height correction) model file','g2009s01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Asm 09',0); INSERT INTO "usage" VALUES('EPSG','10965','grid_transformation','EPSG','9170','EPSG','2288','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9171','NAD83(FBN) to GUVD04 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7648).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','8542','EPSG','6644',0.05,'EPSG','8666','Geoid (height correction) model file','g2009g01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Gum 09',0); INSERT INTO "usage" VALUES('EPSG','10966','grid_transformation','EPSG','9171','EPSG','3255','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9172','NAD83(FBN) to NMVD03 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7649).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','8542','EPSG','6640',0.05,'EPSG','8666','Geoid (height correction) model file','g2009g01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Mnp 09',0); INSERT INTO "usage" VALUES('EPSG','10967','grid_transformation','EPSG','9172','EPSG','4171','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9173','NAD83(NSRS2007) to NAVD88 height (1)','Uses Geoid09 hybrid model. Replaced by 2012 model (CT code 6326).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4893','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','geoid09_conus.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus 09',0); INSERT INTO "usage" VALUES('EPSG','10968','grid_transformation','EPSG','9173','EPSG','1323','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9174','NAD83(NSRS2007) to NAVD88 height (2)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 6327).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4893','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','geoid09_ak.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US AK 09',0); INSERT INTO "usage" VALUES('EPSG','10969','grid_transformation','EPSG','9174','EPSG','1330','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9175','NAD83(NSRS2007) to PRVD02 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7646).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4893','EPSG','6641',0.05,'EPSG','8666','Geoid (height correction) model file','g2009p01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 09',0); INSERT INTO "usage" VALUES('EPSG','10970','grid_transformation','EPSG','9175','EPSG','3294','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9176','NAD83(NSRS2007) to VIVD09 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7647).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','4893','EPSG','6642',0.05,'EPSG','8666','Geoid (height correction) model file','g2009p01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 09',0); INSERT INTO "usage" VALUES('EPSG','10971','grid_transformation','EPSG','9176','EPSG','3330','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9181','NAD83(HARN) to NAD83(HARN Corrected) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8545',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_1993.nad83_1997.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_1993.nad83_1997.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10976','grid_transformation','EPSG','9181','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9187','RGAF09 to IGN 1988 SB height (2)','Accuracy 0.05m to 0.1m. Replaces RGAF09 to IGN 1988 SB height (1), transformation code 5508. For reversible alternative to this transformation see RGAF09 to RGAF09 + IGN 1988 SB height (2) (code 9634).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5619',0.1,'EPSG','8666','Geoid (height correction) model file','gg10_sbv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StB v2',0); INSERT INTO "usage" VALUES('EPSG','14480','grid_transformation','EPSG','9187','EPSG','2891','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9188','RGAF09 to IGN 1988 SM height (2)','Accuracy 0.05m to 0.1m. Replaces RGAF09 to IGN 1988 SM height (1), transformation code 5505. For reversible alternative to this transformation see RGAF09 to RGAF09 + IGN 1988 SM height (2) (code 9635).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5620',0.1,'EPSG','8666','Geoid (height correction) model file','gg10_smv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StM v2',0); INSERT INTO "usage" VALUES('EPSG','14483','grid_transformation','EPSG','9188','EPSG','2890','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9228','RGSPM06 to Danger 1950 height (2)','Accuracy 0.01m to 0.05m within onshore area. Replaces RGSPM06 to Danger 1950 height (1), CT code 9137. For reversible alternative to this transformation see RGSPM06 to RGSPM06 + Danger 1950 height (2) (code 9641).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4466','EPSG','5792',0.05,'EPSG','8666','Geoid (height correction) model file','RASPM2018.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-SPM v2',0); INSERT INTO "usage" VALUES('EPSG','13868','grid_transformation','EPSG','9228','EPSG','3299','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9229','NAD83(2011) to NAVD88 height (3)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information. For reversible alternative to this transformation see NAD83(2011) to NAD83(2011) + NAVD88 height (3) (code 9595).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','5703',0.015,'EPSG','8666','Geoid (height correction) model file','g2018u0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus 18',0); INSERT INTO "usage" VALUES('EPSG','14353','grid_transformation','EPSG','9229','EPSG','1323','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9230','NAD83(2011) to PRVD02 height (2)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information. For reversible alternative to this transformation see NAD83(2011) to PRVD02 height (2) (code 9622).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','6641',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 18',0); INSERT INTO "usage" VALUES('EPSG','14360','grid_transformation','EPSG','9230','EPSG','3294','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9231','NAD83(2011) to VIVD09 height (2)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information. For reversible alternative to this transformation see NAD83(2011) to NAD83(2011) + VIVD09 height (2) (code 9623).','EPSG','1134','Geographic3D to GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','6642',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 18',0); INSERT INTO "usage" VALUES('EPSG','14362','grid_transformation','EPSG','9231','EPSG','3330','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','9232','ISN93 to ISN2016 (1)','Grid transformation based on Kriging between ISN93 and ISN2016. Accuracy is better than 5 cm in stable areas but can be around 25 cm in areas that have suffered deformation due to earthquake or volcanic eruption.','EPSG','9615','NTv2','EPSG','4659','EPSG','8086',0.05,'EPSG','8656','Latitude and longitude difference file','ISN93_ISN2016.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','13872','grid_transformation','EPSG','9232','EPSG','1120','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','9233','ISN2004 to ISN2016 (1)','Grid transformation based on Kriging between ISN2004 and ISN2016. Accuracy is better than 5 cm in stable areas but can be around 25 cm in areas that have suffered deformation due to earthquake or volcanic eruption.','EPSG','9615','NTv2','EPSG','5324','EPSG','8086',0.05,'EPSG','8656','Latitude and longitude difference file','ISN2004_ISN2016.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','13873','grid_transformation','EPSG','9233','EPSG','1120','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','9235','ATS77 to NAD83(CSRS)v3 (3)','Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1851. Replaced by ATS77 to NAD83(CSRS)v6 (4) (transformation code 9106).','EPSG','9615','NTv2','EPSG','4122','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','NS778301.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS',0); INSERT INTO "usage" VALUES('EPSG','13880','grid_transformation','EPSG','9235','EPSG','2313','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9236','ATS77 to NAD83(CSRS)v2 (2)','Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1689.','EPSG','9615','NTv2','EPSG','4122','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','PE7783V2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'PEI DOT-Can PEI',0); INSERT INTO "usage" VALUES('EPSG','13881','grid_transformation','EPSG','9236','EPSG','1533','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9237','ATS77 to NAD83(CSRS)v2 (1)','Introduced in 1999. Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1688.','EPSG','9615','NTv2','EPSG','4122','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','NB7783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GIC-Can NB',0); INSERT INTO "usage" VALUES('EPSG','13882','grid_transformation','EPSG','9237','EPSG','1447','EPSG','1231'); INSERT INTO "grid_transformation" VALUES('EPSG','9238','NAD27 to NAD83(CSRS)v2 (4)','Introduced in 2011. Precision of 20 cm in area covered by the input data set and 40 cm anywhere else, with the exception of the northwest area of the province (near the border with Quebec) where the precision deteriorates to 80 cm.','EPSG','9615','NTv2','EPSG','4267','EPSG','8237',0.8,'EPSG','8656','Latitude and longitude difference file','NB2783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SNB-Can NB',0); INSERT INTO "usage" VALUES('EPSG','13883','grid_transformation','EPSG','9238','EPSG','1447','EPSG','1231'); INSERT INTO "grid_transformation" VALUES('EPSG','9239','NAD27 to NAD83(CSRS)v2 (1)','Also found with file name NA27SCRS.GSB. Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate CT NAD27 to WGS 84 - see code 1692.','EPSG','9615','NTv2','EPSG','4267','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','QUE27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0); INSERT INTO "usage" VALUES('EPSG','13884','grid_transformation','EPSG','9239','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9240','NAD27(CGQ77) to NAD83(CSRS)v2 (1)','Also found with file name CQ77SCRS.GSB. Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS) (code 4617) have longitudes positive east.','EPSG','9615','NTv2','EPSG','4609','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0); INSERT INTO "usage" VALUES('EPSG','13885','grid_transformation','EPSG','9240','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9241','NAD83 to NAD83(CSRS)v2 (1)','Also found with file name NA83SCRS.GSB. Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS)v2 (code 8237) have longitudes positive east. Can be taken as an approximate CT NAD83 to WGS 84 - see code 1696.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0); INSERT INTO "usage" VALUES('EPSG','14556','grid_transformation','EPSG','9241','EPSG','1368','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9242','NAD27 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','13887','grid_transformation','EPSG','9242','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9243','NAD83 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1); INSERT INTO "usage" VALUES('EPSG','13888','grid_transformation','EPSG','9243','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9244','NAD83 to NAD83(CSRS)v4 (3)','This gridded difference file AB_CSRS.DAC may need to be renamed to AB_CSRS.gsb or AB_CSRSV4.gsb to run in some software. Formats identical, but AB file is provincial fit only. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1702.','EPSG','9615','NTv2','EPSG','4269','EPSG','8246',1.5,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'AB Env-Can AB',0); INSERT INTO "usage" VALUES('EPSG','13889','grid_transformation','EPSG','9244','EPSG','2376','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9246','NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1)','Uses CGG2013 model which uses bi-quadratic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time. Replaced by CGG2013a model (CT code 9247).','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8251','EPSG','6647',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013n83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013',0); INSERT INTO "usage" VALUES('EPSG','13879','grid_transformation','EPSG','9246','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9247','NAD83(CSRS)v6 to CGVD2013a(2010) height (1)','Defines CGVD2013 heights. Because CSRS ellipsoidal heights are affected by glacial isostatic adjustment, CGVD2013 heights also change with time. For reversible alternative see NAD83(CSRS)v6 to NAD83(CSRS)v6 + CGVD2013a(2010) height (1) (code 9644).','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8251','EPSG','9245',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013a',0); INSERT INTO "usage" VALUES('EPSG','14527','grid_transformation','EPSG','9247','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9256','POSGAR 2007 to SRVN16 height (1)','Uses geoid model Ar16. See information source for more information. For reversible alternative to this transformation see POSGAR 2007 to POSGAR 2007 + SRVN16 height (1) (code 9621).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','5342','EPSG','9255',0.05,'EPSG','8666','Geoid (height correction) model file','GEOIDE-Ar16.gri',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Arg',0); INSERT INTO "usage" VALUES('EPSG','14342','grid_transformation','EPSG','9256','EPSG','4573','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9275','GHA height to EVRF2000 Austria height (1)','Care! Austrian literature describes this transformation in direction EVRF2000 Austria height to GHA height with offset subtracted. EPSG method has offset as an addition. See method formula and example. The grid is implemented in BEV-Transformator.','EPSG','1080','Vertical Offset by Grid Interpolation (BEV AT)','EPSG','5778','EPSG','9274',0.05,'EPSG','8732','Vertical offset file','GV_HoehenGrid_V1.csv',NULL,NULL,NULL,NULL,'EPSG','4312','BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','13933','grid_transformation','EPSG','9275','EPSG','1037','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9276','ETRS89 to EVRF2000 Austria height (1)','Austrian Geoid 2008. Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator. For reversible alternative to this transformation see ETRS89 to ETRS89 + EVRF2000 Austria height (1) (code 9600).','EPSG','1081','Geographic3D to GravityRelatedHeight (BEV AT)','EPSG','4937','EPSG','9274',0.05,'EPSG','8666','Geoid (height correction) model file','GEOID_GRS80_Oesterreich.csv',NULL,NULL,NULL,NULL,'EPSG','4258','BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','14251','grid_transformation','EPSG','9276','EPSG','1037','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9277','MGI to EVRF2000 Austria height (1)','Austrian Geoid 2008 (Bessel ellipsoid). Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator. For reversible alternative to this transformation see MGI to MGI + EVRF2000 Austria height (1) (code 9601).','EPSG','1081','Geographic3D to GravityRelatedHeight (BEV AT)','EPSG','9267','EPSG','9274',0.05,'EPSG','8666','Geoid (height correction) model file','GEOID_BESSEL_Oesterreich.csv',NULL,NULL,NULL,NULL,'EPSG','4312','BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','14254','grid_transformation','EPSG','9277','EPSG','1037','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9278','ETRS89 to GHA height (1)','This transformation gives same result as concatenation of ETRS89 to EVRF2000 Austria height and EVRF2000 Austria height to GHA height transformations, CTs code 9276 and 9275. Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator.','EPSG','1081','Geographic3D to GravityRelatedHeight (BEV AT)','EPSG','4937','EPSG','5778',0.05,'EPSG','8666','Geoid (height correction) model file','GV_Hoehengrid_plus_Geoid_V3.csv',NULL,NULL,NULL,NULL,'EPSG','4258','BEV-Aut',1); INSERT INTO "usage" VALUES('EPSG','13936','grid_transformation','EPSG','9278','EPSG','1037','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9280','ITRF2005 to SA LLD height (1)','Hybrid geoid referenced to ITRF2005@2010.02. Accuracy 7cm at 1 sigma. For reversible alternative to this transformation see ITRF2005 to ITRF2005 + SA LLD height (1) (code 9643).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','7910','EPSG','9279',0.07,'EPSG','8666','Geoid (height correction) model file','SAGEOID2010.dat',NULL,NULL,NULL,NULL,NULL,NULL,'NGI-Zaf',0); INSERT INTO "usage" VALUES('EPSG','14524','grid_transformation','EPSG','9280','EPSG','3309','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9282','Amersfoort to ETRS89 (9)','Defines Amersfoort. Horizontal component of official transformation RDNAPTRANS(TM)2018. Replaces Amersfoort to ETRS89 (7) (tfm code 7000).','EPSG','9615','NTv2','EPSG','4289','EPSG','4258',0.0,'EPSG','8656','Latitude and longitude difference file','rdtrans2018.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','13939','grid_transformation','EPSG','9282','EPSG','1275','EPSG','1051'); INSERT INTO "grid_transformation" VALUES('EPSG','9283','ETRS89 to NAP height (2)','Vertical component of official transformation RDNAPTRANS(TM)2018. Replaces earlier versions of RDNAPTRANS(TM). For reversible alternative to this transformation see ETRS89 to ETRS89 + NAP height (2) (code 9597).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5709',0.001,'EPSG','8666','Geoid (height correction) model file','nlgeo2018.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','14346','grid_transformation','EPSG','9283','EPSG','1275','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9302','HS2-IRF to ETRS89 (1)','In conjunction with the HS2-TM projection (code 9301), emulates zero-distortion HS2P1+14 Snake projection. For use with OSNet v2009 CORS. Supersedes HS2TN02 used with OSNet v2001. Derived at 350000 locations, RMS 0.15 mm; this is considered errorless.','EPSG','9615','NTv2','EPSG','9299','EPSG','4258',0.0,'EPSG','8656','Latitude and longitude difference file','HS2TN15_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'HS2-Gbr OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','14060','grid_transformation','EPSG','9302','EPSG','4582','EPSG','1260'); INSERT INTO "grid_transformation" VALUES('EPSG','9304','ETRS89 to HS2-VRF height (1)','Defines HS2-VRF using OSNet v2009. Full grid also available in a single file in each of Leica, Topcon and Trimble formats.','EPSG','9661','Geographic3D to GravityRelatedHeight (EGM)','EPSG','4937','EPSG','9303',0.001,'EPSG','8666','Geoid (height correction) model file','HS2GM15W.grd',NULL,NULL,NULL,NULL,NULL,NULL,'HS2-Gbr HS2GM15 W',0); INSERT INTO "usage" VALUES('EPSG','14061','grid_transformation','EPSG','9304','EPSG','4582','EPSG','1260'); INSERT INTO "grid_transformation" VALUES('EPSG','9305','SRGI2013 to INAGeoid2020 v1 height (1)','Defines INAGeoid2020 v1 reference surface and as such is considered to be errorless. Internal accuracy is between 0.05 and 0.24m on the large islands of Indonesia. Replaced by INAGeoid2020 v2 (CT code 20043). Before 2022, v1 file name was INAGEOID20.gtx.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','9469','EPSG','9471',0.0,'EPSG','8666','Geoid (height correction) model file','INAGEOID2020v1.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'BIG-Idn INAGeoid20 v1',0); INSERT INTO "usage" VALUES('EPSG','14385','grid_transformation','EPSG','9305','EPSG','1122','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9310','DHDN to ETRS89 (10)','Replaces SeTa2009 from 2018-01-15. Derived using the 2016 implementation of ETRS89 / DREF91 and DHHN2016. Coincident with the transformation of cadastral data from DHDN to ETRS89 used by LVGL at a level of 1-2 mm.','EPSG','9615','NTv2','EPSG','4314','EPSG','4258',0.01,'EPSG','8656','Latitude and longitude difference file','SeTa2016.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LVGL-Deu SL 2016',0); INSERT INTO "usage" VALUES('EPSG','13970','grid_transformation','EPSG','9310','EPSG','4584','EPSG','1055'); INSERT INTO "grid_transformation" VALUES('EPSG','9312','NZVD2016 height to Auckland 1946 height (2)','Derived at 260 control points. Mean offset 0.292m, standard deviation 0.029m, maximum difference from mean 0.075m. Supersedes NZVD2016 height to Auckland 1946 height (1) (code 7860) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5759',0.02,'EPSG','8732','Vertical offset file','auckht1946-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ AUCK gtx',0); INSERT INTO "usage" VALUES('EPSG','13941','grid_transformation','EPSG','9312','EPSG','3764','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9313','NZVD2016 height to Bluff 1955 height (2)','Derived at 71 control points. Mean offset 0.273m, standard deviation 0.034m, maximum difference from mean 0.079m. Supersedes NZVD2016 height to Bluff 1955 height (1) (code 7861) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5760',0.02,'EPSG','8732','Vertical offset file','blufht1955-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ BLUF gtx',0); INSERT INTO "usage" VALUES('EPSG','13942','grid_transformation','EPSG','9313','EPSG','3801','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9314','NZVD2016 height to Dunedin 1958 height (2)','Derived at 197 control points. Mean offset 0.326m, standard deviation 0.043m, maximum difference from mean 0.152m. Supersedes NZVD2016 height to Dunedin 1958 height (1) (code 7862) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5761',0.02,'EPSG','8732','Vertical offset file','duneht1958-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ DUNE gtx',0); INSERT INTO "usage" VALUES('EPSG','13943','grid_transformation','EPSG','9314','EPSG','3803','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9315','NZVD2016 height to Dunedin-Bluff 1960 height (2)','Derived at 205 control points. Mean offset 0.254m, standard deviation 0.039m, maximum difference from mean 0.11m. Supersedes NZVD2016 height to Dunedin-Bluff 1960 height (1) (code 7863) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','4458',0.02,'EPSG','8732','Vertical offset file','dublht1960-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ DUBL gtx',0); INSERT INTO "usage" VALUES('EPSG','13944','grid_transformation','EPSG','9315','EPSG','3806','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9316','NZVD2016 height to Gisborne 1926 height (2)','Derived at 274 control points. Mean offset 0.343m, standard deviation 0.025m, maximum difference from mean 0.09m. Supersedes NZVD2016 height to Gisborne 1926 height (1) (code 7864) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5762',0.02,'EPSG','8732','Vertical offset file','gisbht1926-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ GISB gtx',0); INSERT INTO "usage" VALUES('EPSG','13945','grid_transformation','EPSG','9316','EPSG','3771','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9317','NZVD2016 height to Lyttelton 1937 height (2)','Derived at 923 control points. Mean offset 0.34m, standard deviation 0.041m, maximum difference from mean 0.149m. Supersedes NZVD2016 height to Lyttelton 1937 height (1) (code 7865) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5763',0.01,'EPSG','8732','Vertical offset file','lyttht1937-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ LYTT gtx',0); INSERT INTO "usage" VALUES('EPSG','13946','grid_transformation','EPSG','9317','EPSG','3804','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9318','NZVD2016 height to Moturiki 1953 height (2)','Derived at 519 control points. Mean offset 0.309m, standard deviation 0.071m, maximum difference from mean 0.231m. Supersedes NZVD2016 height to Moturiki 1953 height (1) (code 7866) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5764',0.02,'EPSG','8732','Vertical offset file','motuht1953-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ MOTU gtx',0); INSERT INTO "usage" VALUES('EPSG','13947','grid_transformation','EPSG','9318','EPSG','3768','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9319','NZVD2016 height to Napier 1962 height (2)','Derived at 207 control points. Mean offset 0.203m, standard deviation 0.034m, maximum difference from mean 0.096m. Supersedes NZVD2016 height to Napier 1962 height (1) (code 7867) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5765',0.02,'EPSG','8732','Vertical offset file','napiht1962-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ NAPI gtx',0); INSERT INTO "usage" VALUES('EPSG','13948','grid_transformation','EPSG','9319','EPSG','3772','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9320','NZVD2016 height to Nelson 1955 height (2)','Derived at 256 control points. Mean offset 0.329m, standard deviation 0.039m, maximum difference from mean 0.114m. Supersedes NZVD2016 height to Nelson 1955 height (1) (code 7868) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5766',0.02,'EPSG','8732','Vertical offset file','nelsht1955-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ NELS gtx',0); INSERT INTO "usage" VALUES('EPSG','13949','grid_transformation','EPSG','9320','EPSG','3802','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9321','NZVD2016 height to One Tree Point 1964 height (2)','Derived at 137 control points. Mean offset 0.077m, standard deviation 0.042m, maximum difference from mean 0.107m. Supersedes NZVD2016 height to One Tree Point 1964 height (1) (code 7869) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5767',0.01,'EPSG','8732','Vertical offset file','ontpht1964-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ ONTP gtx',0); INSERT INTO "usage" VALUES('EPSG','13950','grid_transformation','EPSG','9321','EPSG','3762','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9322','NZVD2016 height to Stewart Island 1977 height (2)','Derived at 4 control points. Mean offset 0.299m, standard deviation 0.025m, maximum difference from mean 0.039m. Supersedes NZVD2016 height to Stewart Island 1977 height (1) (code 7870) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5772',0.18,'EPSG','8732','Vertical offset file','stisht1977-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ STWT gtx',0); INSERT INTO "usage" VALUES('EPSG','13951','grid_transformation','EPSG','9322','EPSG','3338','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9323','NZVD2016 height to Taranaki 1970 height (2)','Derived at 125 control points. Mean offset 0.286m, standard deviation 0.026m, maximum difference from mean 0.07m. Supersedes NZVD2016 height to Taranaki 1970 height (1) (code 7871) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5769',0.02,'EPSG','8732','Vertical offset file','taraht1970-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ TARA gtx',0); INSERT INTO "usage" VALUES('EPSG','13952','grid_transformation','EPSG','9323','EPSG','3769','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9324','NZVD2016 height to Wellington 1953 height (2)','Derived at 137 control points. Mean offset 0.408m, standard deviation 0.054m, maximum difference from mean 0.112m. Supersedes NZVD2016 height to Wellington 1953 height (1) (code 7872) after change of grid file format.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5770',0.02,'EPSG','8732','Vertical offset file','wellht1953-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ WGTN gtx',0); INSERT INTO "usage" VALUES('EPSG','13953','grid_transformation','EPSG','9324','EPSG','3773','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9325','NZGD2000 to NZVD2009 height (2)','Defines NZVD2009 vertical datum (datum code 1039, CRS code 4440). Supersedes NZGD2000 to NZVD2009 height (1) (code 4459) after change of grid file format. For reversible alternative to this CT see NZGD2000 to NZGD2000 + NZVD2009 height (2) (code 9627).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4959','EPSG','4440',0.1,'EPSG','8666','Geoid (height correction) model file','nzgeoid2009.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ 2009 gtx',0); INSERT INTO "usage" VALUES('EPSG','14379','grid_transformation','EPSG','9325','EPSG','1175','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9326','NZGD2000 to NZVD2016 height (2)','Defines NZVD2016 vertical datum (datum code 1169, CRS code 7839). Supersedes NZGD2000 to NZVD2016 height (1) (code 7840) after change of grid file format. For reversible alternative to this CT see NZGD2000 to NZGD2000 + NZVD2016 height (2) (code 9628).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4959','EPSG','7839',0.1,'EPSG','8666','Geoid (height correction) model file','nzgeoid2016.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ 2016 gtx',0); INSERT INTO "usage" VALUES('EPSG','14382','grid_transformation','EPSG','9326','EPSG','1175','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9327','NTF to RGF93 v1 (1)','May be emulated using NTv2 method - see tfm code 15958. Also used to transform between NTF and later realizations of RGF93.','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4275','EPSG','4171',1.0,'EPSG','8727','Geocentric translation file','gr3df97a.txt',NULL,NULL,NULL,NULL,'EPSG','4171','IGN-Fra 1m',0); INSERT INTO "usage" VALUES('EPSG','13956','grid_transformation','EPSG','9327','EPSG','3694','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','9328','NEA74 Noumea to RGNC91-93 (3)','Developed in July 2002 and officially adopted in August 2005. May be emulated using NTv2 method - see RGNC91-93 to NEA74 Noumea (4) (code 1295).','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4644','EPSG','4749',0.05,'EPSG','8727','Geocentric translation file','gr3dnc03a.mnt',NULL,NULL,NULL,NULL,'EPSG','4749','BGN-Ncl 0.05m',0); INSERT INTO "usage" VALUES('EPSG','13957','grid_transformation','EPSG','9328','EPSG','2823','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','9329','IGN72 Grande Terre to RGNC91-93 (4)','Developed in July 2002 and officially adopted in August 2005. May be emulated using NTv2 method - see RGNC91-93 to IGN72 Grande Terre (6) (code 15962).','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4662','EPSG','4749',0.1,'EPSG','8727','Geocentric translation file','gr3dnc01b.mnt',NULL,NULL,NULL,NULL,'EPSG','4749','BGN-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','13958','grid_transformation','EPSG','9329','EPSG','2822','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','9330','IGN72 Grande Terre to RGNC91-93 (5)','Developed in July 2002 and officially adopted in August 2005.','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4662','EPSG','4749',0.05,'EPSG','8727','Geocentric translation file','gr3dnc02b.mnt',NULL,NULL,NULL,NULL,'EPSG','4749','BGN-Ncl Noum 0.05m',0); INSERT INTO "usage" VALUES('EPSG','13959','grid_transformation','EPSG','9330','EPSG','2823','EPSG','1079'); INSERT INTO "grid_transformation" VALUES('EPSG','9338','DHDN to ETRS89 (9)','Official transformation for the state of Baden-Württemberg. Used in ATKIS (Amtliches Topographisch-Kartographisches Informationssystem [Official Topographic and Cartographic Information System]).','EPSG','9615','NTv2','EPSG','4314','EPSG','4258',0.1,'EPSG','8656','Latitude and longitude difference file','BWTA2017.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LGL-Deu BWTA2017',0); INSERT INTO "usage" VALUES('EPSG','13961','grid_transformation','EPSG','9338','EPSG','4580','EPSG','1055'); INSERT INTO "grid_transformation" VALUES('EPSG','9352','RGNC91-93 to NGNC08 height (1)','Geoid model RANC08 realizes NGNC08 height (CRS code 9351) to a precision of 2-5cm. For reversible alternative to this transformation see RGNC91-93 to RGNC91-93 + NGNC08 height (1) (code 9640).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4907','EPSG','9351',0.03,'EPSG','8666','Geoid (height correction) model file','Ranc08_Circe.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl RANC08',0); INSERT INTO "usage" VALUES('EPSG','14497','grid_transformation','EPSG','9352','EPSG','3430','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9355','KSA-GRF17 to KSA-VRF14 height (1)','Hybrid geoid, grid resolution 0.02° lat x 0.025° lon. Accuracy ~2 cm in Eastern region and ~10-20 cm in rest of KSA. File also available in IGN2009 format. To access KSA-GEOID17 contact GCS at info@gcs.gov.sa. For reversible alternative see code 9620.','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','9332','EPSG','9335',0.1,'EPSG','8666','Geoid (height correction) model file','KSA-GEOID17.gra',NULL,NULL,NULL,NULL,NULL,NULL,'GCS-Sau',0); INSERT INTO "usage" VALUES('EPSG','14338','grid_transformation','EPSG','9355','EPSG','3303','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9363','Ain el Abd to KSA-GRF17 (2)','Accuracy 5-10 cm.','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4204','EPSG','9333',0.1,'EPSG','8727','Geocentric translation file','ARAMCO_AAA-KSAGRF_6.tac',NULL,NULL,NULL,NULL,'EPSG','9333','GCS-Sau 0.1m',0); INSERT INTO "usage" VALUES('EPSG','14010','grid_transformation','EPSG','9363','EPSG','3303','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9365','ETRS89 to TPEN11-IRF (1)','In conjunction with the TPEN11-TM map projection (code 9366) applied to TPEN11-IRF (code 9364), emulates the TPEN11 Snake and TPEN11ext Snake projections. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines TPEN11-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9364',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-TPEN11-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr TPEN11 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','13984','grid_transformation','EPSG','9365','EPSG','4583','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9369','ETRS89 to MML07-IRF (1)','In conjunction with the MML07-TM map projection (code 9370) applied to MML07-IRF (code 9372), emulates the MML07 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines MML07-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9372',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-MML07-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr MML07 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','14002','grid_transformation','EPSG','9369','EPSG','4588','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9386','ETRS89 to AbInvA96_2020-IRF (1)','In conjunction with AbInvA96_2020-TM map projection (code 9385) applied to AbInvA96_2020-IRF (code 9384), emulates the AbInvA96_2020 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines AbInvA96_2020-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9384',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-AbInvA96_2020-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'TS-Gbr A96 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','14063','grid_transformation','EPSG','9386','EPSG','4589','EPSG','1196'); INSERT INTO "grid_transformation" VALUES('EPSG','9408','ED50 to ETRS89 (16)','Replaces ED50 to ETRS89 (12) (code 15932).','EPSG','9615','NTv2','EPSG','4230','EPSG','4258',0.2,'EPSG','8656','Latitude and longitude difference file','PENR2009.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp v3 pen',0); INSERT INTO "usage" VALUES('EPSG','14064','grid_transformation','EPSG','9408','EPSG','4605','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','9409','ED50 to ETRS89 (17)','Replaces ED50 to ETRS89 (12) (code 15932).','EPSG','9615','NTv2','EPSG','4230','EPSG','4258',0.2,'EPSG','8656','Latitude and longitude difference file','BALR2009.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp v3 Bal',0); INSERT INTO "usage" VALUES('EPSG','14065','grid_transformation','EPSG','9409','EPSG','2335','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','9410','ETRS89 to Alicante height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Alicante height (1) (code 9605).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','5782',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14272','grid_transformation','EPSG','9410','EPSG','2366','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9411','ETRS89 to Mallorca height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Mallorca height (1) (code 9608).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9392',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14282','grid_transformation','EPSG','9411','EPSG','4602','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9412','ETRS89 to Menorca height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Menorca height (1) (code 9609).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9393',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14285','grid_transformation','EPSG','9412','EPSG','4603','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9413','ETRS89 to Ibiza height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Ibiza height (1) (code 9607).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9394',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14278','grid_transformation','EPSG','9413','EPSG','4604','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9414','ETRS89 to Ceuta 2 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Ceuta 2 height (1) (code 9606).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9402',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14275','grid_transformation','EPSG','9414','EPSG','4590','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9415','REGCAN95 to Lanzarote height (1)','For reversible alternative to this transformation see REGCAN95 to REGCAN95 + Lanzarote height (1) (code 9615).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9395',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14307','grid_transformation','EPSG','9415','EPSG','4591','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9416','REGCAN95 to Fuerteventura height (1)','For reversible alternative to this transformation see REGCAN95 to REGCAN95 + Fuerteventura height (1) (code 9611).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9396',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14293','grid_transformation','EPSG','9416','EPSG','4592','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9417','REGCAN95 to Gran Canaria height (1)','For reversible alternative to this transformation see REGCAN95 to REGCAN95 + Gran Canaria height (1) (code 9612).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9397',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14298','grid_transformation','EPSG','9417','EPSG','4593','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9418','REGCAN95 to Tenerife height (1)','For reversible alternative to this transformation see REGCAN95 to REGCAN95 + Tenerife height (1) (code 9616).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9398',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14074','grid_transformation','EPSG','9418','EPSG','4594','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9419','REGCAN95 to La Gomera height (1)','For reversible alternative to this transformation see REGCAN95 to REGCAN95 + La Gomera height (1) (code 9613).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9399',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14301','grid_transformation','EPSG','9419','EPSG','4595','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9420','REGCAN95 to La Palma height (1)','For reversible alternative to this transformation see REGCAN95 to REGCAN95 + La Palma height (1) (code 9614).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9400',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14304','grid_transformation','EPSG','9420','EPSG','4596','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9421','REGCAN95 to El Hierro height (1)','For reversible alternative to this transformation see REGCAN95 to REGCAN + El Hierro height (1) (code 9610).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9401',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14288','grid_transformation','EPSG','9421','EPSG','4597','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9431','GHA height to EVRF2019 height (1)','Determined at 147 points, SD 0.060m. Offset: mean -0.306m, minimum -0.442m, maximum -0.219m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9389',0.12,'EPSG','8732','Vertical offset file','at_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019z',1); INSERT INTO "usage" VALUES('EPSG','14089','grid_transformation','EPSG','9431','EPSG','1037','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9432','GHA height to EVRF2019 mean-tide height (1)','Determined at 147 points, SD 0.058m. Offset: mean -0.330m, minimum -0.463m, maximum -0.245m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9390',0.116,'EPSG','8732','Vertical offset file','at_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019m',1); INSERT INTO "usage" VALUES('EPSG','14090','grid_transformation','EPSG','9432','EPSG','1037','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9433','Ostend height to EVRF2019 mean-tide height (1)','Determined at 39 points, SD 0.016m. Offset: mean -2.323m, minimum -2.372m, maximum -2.290m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9390',0.032,'EPSG','8732','Vertical offset file','be_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019m',1); INSERT INTO "usage" VALUES('EPSG','14091','grid_transformation','EPSG','9433','EPSG','1347','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9434','Ostend height to EVRF2019 height (1)','Determined at 39 points, SD 0.017m. Offset: mean -2.315m, minimum -2.364m, maximum -2.279m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9389',0.034,'EPSG','8732','Vertical offset file','be_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019z',1); INSERT INTO "usage" VALUES('EPSG','14092','grid_transformation','EPSG','9434','EPSG','1347','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9435','DHHN2016 height to EVRF2019 height (1)','Determined at 802 points, SD 0.010m. Offset: mean 0.013m, minimum -0.008m, maximum 0.039m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','de_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019z',1); INSERT INTO "usage" VALUES('EPSG','14093','grid_transformation','EPSG','9435','EPSG','3339','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9436','DHHN2016 height to EVRF2019 mean-tide height (1)','Determined at 802 points, SD 0.003m. Offset: mean 0.007m, minimum -0.004m, maximum 0.018m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9390',0.006,'EPSG','8732','Vertical offset file','de_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019m',1); INSERT INTO "usage" VALUES('EPSG','14094','grid_transformation','EPSG','9436','EPSG','3339','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9437','Trieste height to EVRF2019 height (1)','Determined at 46 points, SD 0.016m. Offset: mean -0.548m, minimum -0.595m, maximum -0.500m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9389',0.032,'EPSG','8732','Vertical offset file','mk_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019z',1); INSERT INTO "usage" VALUES('EPSG','14095','grid_transformation','EPSG','9437','EPSG','1148','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9438','Trieste height to EVRF2019 mean-tide height (1)','Determined at 46 points, SD 0.015m. Offset: mean -0.604m, minimum -0.650m, maximum -0.558m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9390',0.03,'EPSG','8732','Vertical offset file','mk_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019m',1); INSERT INTO "usage" VALUES('EPSG','14096','grid_transformation','EPSG','9438','EPSG','1148','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9439','Cascais height to EVRF2019 height (1)','Determined at 18 points, SD 0.010m. Offset: mean -0.277m, minimum -0.323m, maximum -0.264m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','pt_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019z',1); INSERT INTO "usage" VALUES('EPSG','14097','grid_transformation','EPSG','9439','EPSG','1294','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9440','Cascais height to EVRF2019 mean-tide height (1)','Determined at 18 points, SD 0.007m. Offset: mean -0.343m, minimum -0.383m, maximum -0.332m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9390',0.014,'EPSG','8732','Vertical offset file','pt_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019m',1); INSERT INTO "usage" VALUES('EPSG','14098','grid_transformation','EPSG','9440','EPSG','1294','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9441','SVS2010 height to EVRF2019 height (1)','Determined at 66 points, SD 0.003m. Offset: mean -0.258m, minimum -0.264m, maximum -0.250m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','si_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019z',1); INSERT INTO "usage" VALUES('EPSG','14099','grid_transformation','EPSG','9441','EPSG','3307','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9442','SVS2010 height to EVRF2019 mean-tide height (1)','Determined at 66 points, SD 0.004m. Offset: mean -0.290m, minimum -0.295m, maximum -0.280m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','si_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019m',1); INSERT INTO "usage" VALUES('EPSG','14100','grid_transformation','EPSG','9442','EPSG','3307','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9443','LHN95 height to EVRF2019 height (1)','Determined at 553 points, SD 0.075m. Offset: mean -0.204m, minimum -0.330m, maximum -0.130m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9389',0.15,'EPSG','8732','Vertical offset file','ch_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019z',1); INSERT INTO "usage" VALUES('EPSG','14101','grid_transformation','EPSG','9443','EPSG','1286','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9444','LHN95 height to EVRF2019 mean-tide height (1)','Determined at 553 points, SD 0.073m. Offset: mean -0.233m, minimum -0.353m, maximum -0.044m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9390',0.146,'EPSG','8732','Vertical offset file','ch_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019m',1); INSERT INTO "usage" VALUES('EPSG','14102','grid_transformation','EPSG','9444','EPSG','1286','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9445','ODN height to EVRF2019 height (1)','Determined at 35 points, SD 0.011m. Offset: mean -0.181m, minimum -0.202m, maximum -0.161m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5701','EPSG','9389',0.022,'EPSG','8732','Vertical offset file','gb_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Gbr 2019z',1); INSERT INTO "usage" VALUES('EPSG','14103','grid_transformation','EPSG','9445','EPSG','2792','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9454','ETRS89 to GBK19-IRF (1)','In conjunction with the GBK19-TM map projection (code 9455) applied to GBK19-IRF (code 9453), emulates the GBK19 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines GBK19-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9453',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-GBK19-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr GBK19 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','14129','grid_transformation','EPSG','9454','EPSG','4607','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9461','GDA2020 to AVWS height (1)','AGQG is used to realise AVWS. Uncertainties (4-8 cm across mainland Australia) given in accompanying file AGQG_uncertainty_20191107.gsb. For reversible alternative to this transformation see GDA2020 to GDA2020 + AVWS height (1) (code 9465).','EPSG','1048','Geographic3D to GravityRelatedHeight (AUSGeoid v2)','EPSG','7843','EPSG','9458',0.1,'EPSG','8666','Geoid (height correction) model file','AGQG_20191107.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus AGQG 20191107',1); INSERT INTO "usage" VALUES('EPSG','14141','grid_transformation','EPSG','9461','EPSG','4177','EPSG','1264'); INSERT INTO "grid_transformation" VALUES('EPSG','9465','GDA2020 to GDA2020 + AVWS height (1)','Reversible alternative to GDA2020 to AVWS height (1) (code 9461). AGQG is used to realise AVWS. Uncertainties (4-8 cm across mainland Australia) given in accompanying file AGQG_uncertainty_20191107.gsb.','EPSG','1083','Geog3D to Geog2D+GravityRelatedHeight (AUSGeoidv2)','EPSG','7843','EPSG','9462',0.1,'EPSG','8666','Geoid (height correction) model file','AGQG_20191107.gsb',NULL,NULL,NULL,NULL,'EPSG','7844','GA-Aus AGQG 20191107',1); INSERT INTO "usage" VALUES('EPSG','14145','grid_transformation','EPSG','9465','EPSG','4177','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9466','GDA2020 to GDA2020 + AHD height (1)','Reversible alternative to GDA2020 to AHD height (1) (code 8451). Uncertainties given in accompanying file AUSGeoid2020_20180201_error.gsb','EPSG','1083','Geog3D to Geog2D+GravityRelatedHeight (AUSGeoidv2)','EPSG','7843','EPSG','9463',0.15,'EPSG','8666','Geoid (height correction) model file','AUSGeoid2020_20180201.gsb',NULL,NULL,NULL,NULL,'EPSG','7844','GA-Aus 2020',0); INSERT INTO "usage" VALUES('EPSG','14146','grid_transformation','EPSG','9466','EPSG','4493','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9467','GDA94 to GDA94 + AHD height (1)','Reversible alternative to GDA94 to AHD height (1) and GDA94 to AHD (Tasmania) height (2) (codes 5656 and 5657). Uses AUSGeoid09 model which uses bi-cubic interpolation; bi-linear interpolation will give results agreeing to within 1cm 99.97% of the time.','EPSG','1083','Geog3D to Geog2D+GravityRelatedHeight (AUSGeoidv2)','EPSG','4939','EPSG','9464',0.15,'EPSG','8666','Geoid (height correction) model file','AUSGeoid09_V1.01.gsb',NULL,NULL,NULL,NULL,'EPSG','4283','GA-Aus09',0); INSERT INTO "usage" VALUES('EPSG','14147','grid_transformation','EPSG','9467','EPSG','2575','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9483','Canada velocity grid v7','File initially published with name cvg70.cvb, later renamed to NAD83v70VG.gvb with no change of content. Replaces Canada velocity grid v6 (code 8676). Replaced by Canada velocity grid v8 (code 10707). Although the interpolation CRS is given as NAD83(CSRS)v7 (also known as NAD83(CSRS) 2010), any version of NAD83(CSRS) may be used for grid interpolation without significant error.','EPSG','1141','Point motion by grid (NEU domain) (NTv2_Vel)','EPSG','8254','EPSG','8254',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','NRC-Can cvg7.0',0); INSERT INTO "usage" VALUES('EPSG','14214','grid_transformation','EPSG','9483','EPSG','4754','EPSG','1131'); INSERT INTO "grid_transformation" VALUES('EPSG','9484','ETRS89 to NN54 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN54 height (1) (code 9594).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5776',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2008',0); INSERT INTO "usage" VALUES('EPSG','14374','grid_transformation','EPSG','9484','EPSG','1352','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9485','ETRS89 to NN2000 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN2000 height (1) (code 9593).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5941',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2018',0); INSERT INTO "usage" VALUES('EPSG','14376','grid_transformation','EPSG','9485','EPSG','1352','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9496','MGI 1901 to SRB-ETRS89 (9)','','EPSG','9615','NTv2','EPSG','3906','EPSG','8685',0.03,'EPSG','8656','Latitude and longitude difference file','MGI1901_TO_SRBETRS89_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb 0.1m 2020',0); INSERT INTO "usage" VALUES('EPSG','14226','grid_transformation','EPSG','9496','EPSG','4543','EPSG','1185'); INSERT INTO "grid_transformation" VALUES('EPSG','9550','NAD83 to NAD83(CSRS)v6 (10)','File NLCSRSV4A.GSB corrects error in file header record previously released as NLCSRSV4.GSB. No change to gridded data.','EPSG','9615','NTv2','EPSG','4269','EPSG','8252',0.1,'EPSG','8656','Latitude and longitude difference file','NLCSRSV4A.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'CGS-Can Nfl island',0); INSERT INTO "usage" VALUES('EPSG','14831','grid_transformation','EPSG','9550','EPSG','4612','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','9553','Cascais height to EVRF2019 height (2)','Determined at 18 points, SD 0.014m. Offset: mean -0.275m, minimum -0.322m, maximum -0.262m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9389',0.028,'EPSG','8732','Vertical offset file','pt_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14842','grid_transformation','EPSG','9553','EPSG','1294','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9554','Cascais height to EVRF2019 mean-tide height (2)','Determined at 18 points, SD 0.012m. Offset: mean -0.340m, minimum -0.383m, maximum -0.324m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9390',0.024,'EPSG','8732','Vertical offset file','pt_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14671','grid_transformation','EPSG','9554','EPSG','1294','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9555','DHHN2016 height to EVRF2019 height (2)','Determined at 802 points, SD 0.010m. Offset: mean 0.016m, minimum -0.004m, maximum 0.052m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','de_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14672','grid_transformation','EPSG','9555','EPSG','3339','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9556','DHHN2016 height to EVRF2019 mean-tide height (2)','Determined at 802 points, SD 0.004m. Offset: mean 0.009m, minimum -0.011m, maximum 0.028m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','de_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14843','grid_transformation','EPSG','9556','EPSG','3339','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9557','GHA height to EVRF2019 height (2)','Determined at 150 points, SD 0.068m. Offset: mean -0.309m, minimum -0.450m, maximum -0.210m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9389',0.136,'EPSG','8732','Vertical offset file','at_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14673','grid_transformation','EPSG','9557','EPSG','1037','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9558','GHA height to EVRF2019 mean-tide height (2)','Determined at 150 points, SD 0.065m. Offset: mean -0.333m, minimum -0.471m, maximum -0.236m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9390',0.13,'EPSG','8732','Vertical offset file','at_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14674','grid_transformation','EPSG','9558','EPSG','1037','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9559','LHN95 height to EVRF2019 height (2)','Determined at 553 points, SD 0.073m. Offset: mean -0.216m, minimum -0.478m, maximum -0.021m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9389',0.146,'EPSG','8732','Vertical offset file','ch_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019z 2020-09',1); INSERT INTO "usage" VALUES('EPSG','14675','grid_transformation','EPSG','9559','EPSG','1286','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9560','LHN95 height to EVRF2019 mean-tide height (2)','Determined at 553 points, SD 0.071m. Offset: mean -0.244m, minimum -0.506m, maximum -0.012m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9390',0.142,'EPSG','8732','Vertical offset file','ch_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019m 2020-09',1); INSERT INTO "usage" VALUES('EPSG','14676','grid_transformation','EPSG','9560','EPSG','1286','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9561','ODN height to EVRF2019 height (2)','Determined at 35 points, SD 0.012m. Offset: mean -0.178m, minimum -0.199m, maximum -0.159m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5701','EPSG','9389',0.024,'EPSG','8732','Vertical offset file','gb_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Gbr 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14677','grid_transformation','EPSG','9561','EPSG','2792','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9563','Ostend height to EVRF2019 height (2)','Determined at 39 points, SD 0.021m. Offset: mean -2.312m, minimum -2.362m, maximum -2.275m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9389',0.042,'EPSG','8732','Vertical offset file','be_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14678','grid_transformation','EPSG','9563','EPSG','1347','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9564','Ostend height to EVRF2019 mean-tide height (2)','Determined at 39 points, SD 0.020m. Offset: mean -2.320m, minimum -2.370m, maximum -2.285m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9390',0.04,'EPSG','8732','Vertical offset file','be_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14679','grid_transformation','EPSG','9564','EPSG','1347','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9565','SVS2010 height to EVRF2019 height (2)','Determined at 65 points, SD 0.003m. Offset: mean -0.259m, minimum -0.265m, maximum -0.251m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','si_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14680','grid_transformation','EPSG','9565','EPSG','3307','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9566','SVS2010 height to EVRF2019 mean-tide height (2)','Determined at 65 points, SD 0.004m. Offset: mean -0.290m, minimum -0.295m, maximum -0.280m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','si_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14681','grid_transformation','EPSG','9566','EPSG','3307','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9567','Trieste height to EVRF2019 height (2)','Determined at 46 points, SD 0.021m. Offset: mean -0.551m, minimum -0.606m, maximum -0.490m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9389',0.042,'EPSG','8732','Vertical offset file','mk_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14668','grid_transformation','EPSG','9567','EPSG','1148','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9568','Trieste height to EVRF2019 mean-tide height (2)','Determined at 46 points, SD 0.022m. Offset: mean -0.606m, minimum -0.662m, maximum -0.548m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9390',0.044,'EPSG','8732','Vertical offset file','mk_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14667','grid_transformation','EPSG','9568','EPSG','1148','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9569','Trieste height to EVRF2019 height (3)','Determined at 10 points, SD 0.006m. Offset: mean -0.336m, minimum -0.346m, maximum -0.326m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9389',0.012,'EPSG','8732','Vertical offset file','ba_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bih 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14666','grid_transformation','EPSG','9569','EPSG','1050','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9570','Trieste height to EVRF2019 mean-tide height (3)','Determined at 10 points, SD 0.005m. Offset: mean -0.377m, minimum -0.386m, maximum -0.368m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9390',0.01,'EPSG','8732','Vertical offset file','ba_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bih 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14665','grid_transformation','EPSG','9570','EPSG','1050','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9571','Baltic 1982 height to EVRF2019 height (1)','Determined at 58 points, SD 0.024m. Offset: mean 0.228m, minimum 0.167m, maximum 0.277m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5786','EPSG','9389',0.048,'EPSG','8732','Vertical offset file','bgalt_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14628','grid_transformation','EPSG','9571','EPSG','3224','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9572','Baltic 1982 height to EVRF2019 mean-tide height (1)','Determined at 58 points, SD 0.021m. Offset: mean 0.180m, minimum 0.123m, maximum 0.228m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5786','EPSG','9390',0.042,'EPSG','8732','Vertical offset file','bgalt_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14781','grid_transformation','EPSG','9572','EPSG','3224','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9573','N2000 height to EVRF2019 height (1)','Determined at 191 points, SD 0.002m. Offset: mean 0.002m, minimum -0.005m, maximum 0.007m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','3900','EPSG','9389',0.004,'EPSG','8732','Vertical offset file','fi_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fin 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14664','grid_transformation','EPSG','9573','EPSG','3333','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9574','N2000 height to EVRF2019 mean-tide height (1)','Determined at 191 points, SD 0.012m. Offset: mean 0.054m, minimum 0.034m, maximum 0.079m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','3900','EPSG','9390',0.024,'EPSG','8732','Vertical offset file','fi_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fin 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14663','grid_transformation','EPSG','9574','EPSG','3333','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9575','NGF-IGN69 height to EVRF2019 height (1)','Determined at 1228 points, SD 0.054m. Offset: mean -0.539m, minimum -0.651m, maximum -0.380m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5720','EPSG','9389',0.108,'EPSG','8732','Vertical offset file','fr_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fra 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14662','grid_transformation','EPSG','9575','EPSG','1326','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9576','NGF-IGN69 height to EVRF2019 mean-tide height (1)','Determined at 1228 points, SD 0.043m. Offset: mean -0.561m, minimum -0.658m, maximum -0.430m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5720','EPSG','9390',0.086,'EPSG','8732','Vertical offset file','fr_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fra 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14682','grid_transformation','EPSG','9576','EPSG','1326','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9577','EOMA 1980 height to EVRF2019 height (1)','Determined at 35 points, SD 0.003m. Offset: mean 0.163m, minimum 0.156m, maximum 0.171m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5787','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','hu_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hun 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14844','grid_transformation','EPSG','9577','EPSG','1119','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9578','EOMA 1980 height to EVRF2019 mean-tide height (1)','Determined at 35 points, SD 0.005m. Offset: mean 0.138m, minimum 0.127m, maximum 0.149m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5787','EPSG','9390',0.01,'EPSG','8732','Vertical offset file','hu_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hun 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14686','grid_transformation','EPSG','9578','EPSG','1119','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9579','Latvia 2000 height to EVRF2019 height (1)','Determined at 134 points, SD 0.003m. Offset: mean 0.009m, minimum 0.000m, maximum 0.019m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7700','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','lv_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14687','grid_transformation','EPSG','9579','EPSG','3268','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9580','Latvia 2000 height to EVRF2019 mean-tide height (1)','Determined at 134 points, SD 0.004m. Offset: mean 0.031m, minimum 0.025m, maximum 0.045m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7700','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','lv_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14780','grid_transformation','EPSG','9580','EPSG','3268','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9581','NAP height to EVRF2019 height (1)','Determined at 1095 points, SD 0.008m. Offset: mean 0.021m, minimum 0.009m, maximum 0.055m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5709','EPSG','9389',0.016,'EPSG','8732','Vertical offset file','nl_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Nld 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14689','grid_transformation','EPSG','9581','EPSG','1275','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9582','NAP height to EVRF2019 mean-tide height (1)','Determined at 1095 points, SD 0.006m. Offset: mean 0.021m, minimum 0.008m, maximum 0.047m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5709','EPSG','9390',0.012,'EPSG','8732','Vertical offset file','nl_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Nld 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14779','grid_transformation','EPSG','9582','EPSG','1275','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9583','Constanta height to EVRF2019 height (1)','Determined at 96 points, SD 0.006m. Offset: mean 0.050m, minimum 0.029m, maximum 0.063m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5781','EPSG','9389',0.12,'EPSG','8732','Vertical offset file','ro_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14693','grid_transformation','EPSG','9583','EPSG','3295','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9584','ETRS89 to ETRS89 + Stornoway height (2)','Reversible alternative to ETRS89 to Stornoway height (2) (code 7715).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9428',0.011,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK Heb 2015',0); INSERT INTO "usage" VALUES('EPSG','15098','grid_transformation','EPSG','9584','EPSG','2799','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9585','ETRS89 to ETRS89 + St. Marys height (2)','Reversible alternative to ETRS89 to St. Marys height (2) (code 7716).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9430',0.01,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK Scilly 2015',0); INSERT INTO "usage" VALUES('EPSG','14518','grid_transformation','EPSG','9585','EPSG','2802','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9586','ETRS89 to ETRS89 + ODN Orkney height (2)','Reversible alternative to ETRS89 to ODN Orkney height (2) (code 7712).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9426',0.017,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK Ork 2015',0); INSERT INTO "usage" VALUES('EPSG','14516','grid_transformation','EPSG','9586','EPSG','2793','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9587','ETRS89 to ETRS89 + ODN height (2)','Reversible alternative to ETRS89 to ODN height (2) (code 7711).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9424',0.008,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK Gbr 2015',0); INSERT INTO "usage" VALUES('EPSG','15097','grid_transformation','EPSG','9587','EPSG','2792','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9588','ETRS89 to ETRS89 + ODN (Offshore) height (1)','Reversible alternative to ETRS89 to ODN (Offshore) height (1) (code 7713).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9425',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK Off 2015',0); INSERT INTO "usage" VALUES('EPSG','14511','grid_transformation','EPSG','9588','EPSG','4391','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9589','ETRS89 to ETRS89 + Lerwick height (2)','Reversible alternative to ETRS89 to Lerwick height (2) (code 7714).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9427',0.018,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS -UK Shet 2015',0); INSERT INTO "usage" VALUES('EPSG','15083','grid_transformation','EPSG','9589','EPSG','2795','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9590','ETRS89 to ETRS89 + Douglas height (2)','Reversible alternative to ETRS89 to Douglas height (2) (code 7717).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9429',0.03,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK Man 2015',0); INSERT INTO "usage" VALUES('EPSG','15082','grid_transformation','EPSG','9590','EPSG','2803','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9591','ETRS89 to ETRS89 + Malin Head height (2)','Reversible alternative to ETRS89 to Malin Head height (2) (code 7959).','EPSG','1096','Geog3D to Geog2D+GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','9449',0.023,'EPSG','8666','Geoid (height correction) model file','OSGM15_Malin.gri',NULL,NULL,NULL,NULL,'EPSG','4258','OS-Ire 2015',0); INSERT INTO "usage" VALUES('EPSG','15081','grid_transformation','EPSG','9591','EPSG','1305','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9592','ETRS89 to ETRS89 + Belfast height (2)','Reversible alternative to ETRS89 to Belfast height (2) (code 7958).','EPSG','1096','Geog3D to Geog2D+GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','9450',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK NI 2015',0); INSERT INTO "usage" VALUES('EPSG','14504','grid_transformation','EPSG','9592','EPSG','2530','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9593','ETRS89 to ETRS89 + NN2000 height (1)','Reversible alternative to ETRS89 to NN2000 height (1) (code 9485).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5942',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2018',0); INSERT INTO "usage" VALUES('EPSG','14465','grid_transformation','EPSG','9593','EPSG','1352','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9594','ETRS89 to ETRS89 + NN54 height (1)','Reversible alternative to ETRS89 to NN54 height (1) (code 9484).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','6144',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2008',0); INSERT INTO "usage" VALUES('EPSG','14464','grid_transformation','EPSG','9594','EPSG','1352','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9595','NAD83(2011) to NAD83(2011) + NAVD88 height (3)','Reversible alternative to NAD83(2011) to NAVD88 height (3) (code 9229). Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','EPSG','1135','Geog3D to Geog2D+GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','6349',0.015,'EPSG','8666','Geoid (height correction) model file','g2018u0.bin',NULL,NULL,NULL,NULL,'EPSG','6318','NGS-US Conus 18',0); INSERT INTO "usage" VALUES('EPSG','14853','grid_transformation','EPSG','9595','EPSG','1323','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9596','NAD83(2011) to NAD83(2011) + NAVD88 height (2)','Reversible alternative to NAD83(2011) to NAVD88 height (2) (code 6327).','EPSG','1135','Geog3D to Geog2D+GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','6349',0.02,'EPSG','8666','Geoid (height correction) model file','g2012ba0.bin',NULL,NULL,NULL,NULL,'EPSG','6318','NGS-US AK',0); INSERT INTO "usage" VALUES('EPSG','14456','grid_transformation','EPSG','9596','EPSG','1330','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9597','ETRS89 to ETRS89 + NAP height (2)','Reversible alternative to ETRS89 to NAP height (2) (code 9283).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4937','EPSG','9286',0.001,'EPSG','8666','Geoid (height correction) model file','nlgeo2018.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','NSGI-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','14455','grid_transformation','EPSG','9597','EPSG','1275','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9598','GR96 to GR96 + GVR2000 height (1)','Reversible alternative to GR96 to GVR2000 height (1) (code 8268). File is also available in NOAA VDatum format (ggeoid2000.gtx) and GeoTIFF format (ggeoid2000.tif).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4909','EPSG','8349',0.1,'EPSG','8666','Geoid (height correction) model file','gr2000g.gri',NULL,NULL,NULL,NULL,'EPSG','4747','SDFE-Grl',0); INSERT INTO "usage" VALUES('EPSG','15074','grid_transformation','EPSG','9598','EPSG','4461','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9599','GR96 to GR96 + GVR2016 height (1)','Reversible alternative to GR96 to GVR2016 height (1) (code 8269). File is also available in NOAA VDatum format (ggeoid2016.gtx) and GeoTIFF format (ggeoid2016.tif).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4909','EPSG','8350',0.1,'EPSG','8666','Geoid (height correction) model file','ggeoid16.gri',NULL,NULL,NULL,NULL,'EPSG','4747','SDFE-Grl',0); INSERT INTO "usage" VALUES('EPSG','15075','grid_transformation','EPSG','9599','EPSG','4454','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9600','ETRS89 to ETRS89 + EVRF2000 Austria height (1)','Reversible alternative to ETRS89 to EVRF2000 Austria height (1) (code 9276). Austrian Geoid 2008. Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator.','EPSG','1089','Geog3D to Geog2D+GravityRelatedHeight (BEV AT)','EPSG','4937','EPSG','9500',0.05,'EPSG','8666','Geoid (height correction) model file','GEOID_GRS80_Oesterreich.csv',NULL,NULL,NULL,NULL,'EPSG','4258','BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','14428','grid_transformation','EPSG','9600','EPSG','1037','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9601','MGI to MGI + EVRF2000 Austria height (1)','Reversible alternative to MGI to EVRF2000 Austria height (1) (code 9277). Austrian Geoid 2008 (Bessel ellipsoid). Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator.','EPSG','1089','Geog3D to Geog2D+GravityRelatedHeight (BEV AT)','EPSG','9267','EPSG','9501',0.05,'EPSG','8666','Geoid (height correction) model file','GEOID_BESSEL_Oesterreich.csv',NULL,NULL,NULL,NULL,'EPSG','4312','BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','14430','grid_transformation','EPSG','9601','EPSG','1037','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9602','CIGD11 to CIGD11 + CBVD61 height (ft) (1)','Reversible alternative to CIGD11 to CBVD61 height (ft) (1) (code 6140). Care: source CRS heights are in metres, transformation file parameter values and target CRS heights are in feet.','EPSG','1091','Geog3D to Geog2D+GravityRelatedHeight (CI)','EPSG','6134','EPSG','9502',0.03,'EPSG','8666','Geoid (height correction) model file','CBGM0811.TXT',NULL,NULL,NULL,NULL,'EPSG','6135','LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','15103','grid_transformation','EPSG','9602','EPSG','3207','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9603','CIGD11 to CIGD11 + GCVD54 height (ft) (1)','Reversible alternative to CIGD11 to GCVD54 height (ft) (1) (code 6138). Care: source CRS heights are in metres, transformation file parameter values and target CRS heights are in feet.','EPSG','1091','Geog3D to Geog2D+GravityRelatedHeight (CI)','EPSG','6134','EPSG','9503',0.03,'EPSG','8666','Geoid (height correction) model file','GCGM0811.TXT',NULL,NULL,NULL,NULL,'EPSG','6135','LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','15067','grid_transformation','EPSG','9603','EPSG','3185','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','9604','CIGD11 to CIGD11 + LCVD61 height (ft) (1)','Reversible alternative to CIGD11 to LCVD61 height (ft) (1) (code 6139). Care: source CRS heights are in metres, transformation file parameter values and target CRS heights are in feet.','EPSG','1091','Geog3D to Geog2D+GravityRelatedHeight (CI)','EPSG','6134','EPSG','9504',0.03,'EPSG','8666','Geoid (height correction) model file','LCGM0811.TXT',NULL,NULL,NULL,NULL,'EPSG','6135','LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','15069','grid_transformation','EPSG','9604','EPSG','4121','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9605','ETRS89 to ETRS89 + Alicante height (1)','Reversible alternative to ETRS89 to Alicante height (1) (code 9410).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9505',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','15070','grid_transformation','EPSG','9605','EPSG','2366','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9606','ETRS89 to ETRS89 + Ceuta 2 height (1)','Reversible alternative to ETRS89 to Ceuta 2 height (1) (code 9414).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9506',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14438','grid_transformation','EPSG','9606','EPSG','4590','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9607','ETRS89 to ETRS89 + Ibiza height (1)','Reversible alternative to ETRS89 to Ibiza height (1) (code 9413).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9507',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14439','grid_transformation','EPSG','9607','EPSG','4604','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9608','ETRS89 to ETRS89 + Mallorca height (1)','Reversible alternative to ETRS89 to ETRS89 + Mallorca height (1) (code 9411).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9508',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14281','grid_transformation','EPSG','9608','EPSG','4602','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','9609','ETRS89 to ETRS89 + Menorca height (1)','Reversible alternative to ETRS89 to Menorca height (1) (code 9412).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','9509',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14441','grid_transformation','EPSG','9609','EPSG','4603','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9610','REGCAN95 to REGCAN95 + El Hierro height (1)','Reversible alternative to REGCAN95 to El Hierro height (1) (code 9421).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9510',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,'EPSG','4081','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','15102','grid_transformation','EPSG','9610','EPSG','4597','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9611','REGCAN95 to REGCAN95 + Fuerteventura height (1)','Reversible alternative to REGCAN95 to Fuerteventura height (1) (code 9416).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9511',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,'EPSG','4081','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14443','grid_transformation','EPSG','9611','EPSG','4592','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9612','REGCAN95 to REGCAN95 + Gran Canaria height (1)','Reversible alternative to REGCAN95 to Gran Canaria height (1) (code 9417).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9512',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,'EPSG','4081','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','15071','grid_transformation','EPSG','9612','EPSG','4593','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9613','REGCAN95 to REGCAN95 + La Gomera height (1)','Reversible alternative to REGCAN95 to La Gomera height (1) (code 9419).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9513',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,'EPSG','4081','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14445','grid_transformation','EPSG','9613','EPSG','4595','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9614','REGCAN95 to REGCAN95 + La Palma height (1)','Reversible alternative to REGCAN95 to La Palma height (1) (code 9420).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9514',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,'EPSG','4081','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14446','grid_transformation','EPSG','9614','EPSG','4596','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9615','REGCAN95 to REGCAN95 + Lanzarote height (1)','Reversible alternative to REGCAN95 to Lanzarote height (1) (code 9415).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9515',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,'EPSG','4081','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','15072','grid_transformation','EPSG','9615','EPSG','4591','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9616','REGCAN95 to REGCAN95 + Tenerife height (1)','Reversible alternative to REGCAN95 to Tenerife height (1) (code 9418).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9516',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,'EPSG','4081','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','14448','grid_transformation','EPSG','9616','EPSG','4594','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9617','SHGD2015 to SHGD2015 + SHVD2015 height (1)','Reversible alternative to SHGD2015 to SHVD2015 height (1) (code 7891).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','7885','EPSG','7956',0.0,'EPSG','8666','Geoid (height correction) model file','Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,'EPSG','7886','ENRD-Shn Hel',1); INSERT INTO "usage" VALUES('EPSG','14449','grid_transformation','EPSG','9617','EPSG','3183','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9618','WGS 84 to WGS 84 + EGM2008 height (2)','Reversible alternative to WGS 84 to EGM2008 height (2) (code 3859).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4979','EPSG','9518',0.5,'EPSG','8666','Geoid (height correction) model file','Und_min1x1_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,'EPSG','4326','NGA-World 1min',0); INSERT INTO "usage" VALUES('EPSG','15073','grid_transformation','EPSG','9618','EPSG','1262','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9619','FEH2010 to FEH2010 + FCSVR10 height (1)','Reversible alternative to FEH2010 to FCSVR10 height (1) (code 5626).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','5592','EPSG','9519',0.1,'EPSG','8666','Geoid (height correction) model file','fehmarn_geoid10.gri',NULL,NULL,NULL,NULL,'EPSG','5593','FEM-Dnk-Deu Feh',0); INSERT INTO "usage" VALUES('EPSG','14326','grid_transformation','EPSG','9619','EPSG','3890','EPSG','1139'); INSERT INTO "grid_transformation" VALUES('EPSG','9620','KSA-GRF17 to KSA-GRF17 + KSA-VRF14 height (1)','Reversible alternative to KSA-GRF17 to KSA-VRF14 height (1) (code 9355). File also available in IGN2009 format. To access KSA-GEOID17 contact GCS by email to info@gcs.gov.sa','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','9332','EPSG','9520',0.1,'EPSG','8666','Geoid (height correction) model file','KSA-GEOID17.gra',NULL,NULL,NULL,NULL,'EPSG','9333','GCS-Sau',0); INSERT INTO "usage" VALUES('EPSG','14453','grid_transformation','EPSG','9620','EPSG','3303','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9621','POSGAR 2007 to POSGAR 2007 + SRVN16 height (1)','Reversible alternative to POSGAR 2007 to SRVN16 height (1) (code 9256). Uses geoid model Ar16. See information source for more information.','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','5342','EPSG','9521',0.05,'EPSG','8666','Geoid (height correction) model file','GEOIDE-Ar16.gri',NULL,NULL,NULL,NULL,'EPSG','5340','IGN-Arg',0); INSERT INTO "usage" VALUES('EPSG','15056','grid_transformation','EPSG','9621','EPSG','4573','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9622','NAD83(2011) to NAD83(2011) + PRVD02 height (2)','Reversible alternative to NAD83(2011) to PRVD02 height (2) (code 9230). Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','EPSG','1135','Geog3D to Geog2D+GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','9522',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,'EPSG','6318','NGS-Pri 18',0); INSERT INTO "usage" VALUES('EPSG','14458','grid_transformation','EPSG','9622','EPSG','3294','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9623','NAD83(2011) to NAD83(2011) + VIVD09 height (2)','Reversible alternative to NAD83(2011) to VIVD09 height (2) (code 9231). Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','EPSG','1135','Geog3D to Geog2D+GravityRelatedHeight (NGS bin)','EPSG','6319','EPSG','9523',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,'EPSG','6318','NGS-Vir 18',0); INSERT INTO "usage" VALUES('EPSG','14459','grid_transformation','EPSG','9623','EPSG','3330','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9624','NAD83(MA11) to NAD83(MA11) + GUVD04 height (1)','Reversible alternative to NAD83(MA11) to GUVD04 height (1) (code 7648). Uses Geoid12B hybrid model. See information source for further information.','EPSG','1135','Geog3D to Geog2D+GravityRelatedHeight (NGS bin)','EPSG','6324','EPSG','9524',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bg0.bin',NULL,NULL,NULL,NULL,'EPSG','6325','NGS-Gum 12B',0); INSERT INTO "usage" VALUES('EPSG','14460','grid_transformation','EPSG','9624','EPSG','3255','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9625','NAD83(MA11) to NAD83(MA11) + NMVD03 height (1)','Reversible alternative to NAD83(MA11) to NMVD03 height (1) (code 7649). Uses Geoid12B hybrid model. See information source for further information.','EPSG','1135','Geog3D to Geog2D+GravityRelatedHeight (NGS bin)','EPSG','6324','EPSG','9525',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bg0.bin',NULL,NULL,NULL,NULL,'EPSG','6325','NGS-Mnp 12B',0); INSERT INTO "usage" VALUES('EPSG','14461','grid_transformation','EPSG','9625','EPSG','4171','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9626','NAD83(PA11) to NAD83(PA11) + ASVD02 height (1)','Reversible alternative to NAD83(PA11) to ASVD02 height (1) (code 7650). Uses Geoid12B hybrid model. See information source for further information.','EPSG','1135','Geog3D to Geog2D+GravityRelatedHeight (NGS bin)','EPSG','6321','EPSG','9526',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bs0.bin',NULL,NULL,NULL,NULL,'EPSG','6322','NGS-Asm 12B',0); INSERT INTO "usage" VALUES('EPSG','14463','grid_transformation','EPSG','9626','EPSG','2288','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9627','NZGD2000 to NZGD2000 + NZVD2009 height (2)','Reversible alternative to NZGD2000 to NZVD2009 height (2) (code 9325).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4959','EPSG','9527',0.1,'EPSG','8666','Geoid (height correction) model file','nzgeoid2009.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ 2009 gtx',0); INSERT INTO "usage" VALUES('EPSG','14466','grid_transformation','EPSG','9627','EPSG','1175','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9628','NZGD2000 to NZGD2000 + NZVD2016 height (2)','Reversible alternative to NZGD2000 to NZVD2016 height (2) (code 9326).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4959','EPSG','9528',0.1,'EPSG','8666','Geoid (height correction) model file','nzgeoid2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ 2016 gtx',0); INSERT INTO "usage" VALUES('EPSG','14467','grid_transformation','EPSG','9628','EPSG','1175','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9629','SRGI2013 to SRGI2013 + INAGeoid2020 v1 height (1)','Reversible alternative to SRGI2013 to INAGeoid2020 v1 height (1) (code 9305). Before 2022-07, file name was INAGEOID20.gtx.','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','9469','EPSG','9529',0.0,'EPSG','8666','Geoid (height correction) model file','INAGEOID2020v1.gtx',NULL,NULL,NULL,NULL,'EPSG','9470','BIG-Idn INAGeoid20 v1',0); INSERT INTO "usage" VALUES('EPSG','14468','grid_transformation','EPSG','9629','EPSG','1122','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9630','RGFG95 to RGFG95 + NGG1977 height (1)','Reversible alternative to RGFG95 to NGG1977 height (1) (code 10011).','EPSG','1094','Geog3D to Geog2D+GravityRelatedHeight (IGN1997)','EPSG','4967','EPSG','9530',998.0,'EPSG','8666','Geoid (height correction) model file','ggguy00.txt',NULL,NULL,NULL,NULL,'EPSG','4624','IGN Guf',0); INSERT INTO "usage" VALUES('EPSG','14469','grid_transformation','EPSG','9630','EPSG','3146','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9631','RGAF09 to RGAF09 + Guadeloupe 1988 height (2)','Reversible alternative to RGAF09 to Guadeloupe 1988 height (2) (code 9133).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9531',0.05,'EPSG','8666','Geoid (height correction) model file','RAGTBT2016.mnt',NULL,NULL,NULL,NULL,'EPSG','5489','IGN Glp GT 2016',0); INSERT INTO "usage" VALUES('EPSG','14470','grid_transformation','EPSG','9631','EPSG','2892','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9632','RGAF09 to RGAF09 + IGN 1988 LS height (2)','Reversible alternative to RGAF09 to IGN 1988 LS height (2) (code 9134).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9532',0.1,'EPSG','8666','Geoid (height correction) model file','RALS2016.mnt',NULL,NULL,NULL,NULL,'EPSG','5489','IGN Glp LSt 2016',0); INSERT INTO "usage" VALUES('EPSG','14472','grid_transformation','EPSG','9632','EPSG','2895','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9633','RGAF09 to RGAF09 + IGN 1988 MG height (2)','Reversible alternative to RGAF09 to IGN 1988 MG height (2) (code 9135).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9533',0.1,'EPSG','8666','Geoid (height correction) model file','RAMG2016.mnt',NULL,NULL,NULL,NULL,'EPSG','5489','IGN Glp MG 2016',0); INSERT INTO "usage" VALUES('EPSG','15076','grid_transformation','EPSG','9633','EPSG','2894','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9634','RGAF09 to RGAF09 + IGN 1988 SB height (2)','Reversible alternative to RGAF09 to IGN 1988 SB height (2) (code 9187).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9534',0.1,'EPSG','8666','Geoid (height correction) model file','gg10_sbv2.mnt',NULL,NULL,NULL,NULL,'EPSG','5489','IGN Glp StB',0); INSERT INTO "usage" VALUES('EPSG','15077','grid_transformation','EPSG','9634','EPSG','2891','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9635','RGAF09 to RGAF09 + IGN 1988 SM height (2)','Reversible alternative to RGAF09 to IGN 1988 SM height (2) (code 9188).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9535',0.1,'EPSG','8666','Geoid (height correction) model file','gg10_smv2.mnt',NULL,NULL,NULL,NULL,'EPSG','5489','IGN Glp StM',0); INSERT INTO "usage" VALUES('EPSG','14482','grid_transformation','EPSG','9635','EPSG','2890','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9636','RGAF09 to RGAF09 + IGN 2008 LD height (1)','Reversible alternative to RGAF09 to IGN 2008 LD height (1) (code 9131).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9536',0.2,'EPSG','8666','Geoid (height correction) model file','RALD2016.mnt',NULL,NULL,NULL,NULL,'EPSG','5489','IGN-Glp Des',0); INSERT INTO "usage" VALUES('EPSG','14485','grid_transformation','EPSG','9636','EPSG','2893','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9637','RGAF09 to RGAF09 + Martinique 1987 height (2)','Reversible alternative to RGAF09 to Martinique 1987 height (2) (code 9136).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9537',0.05,'EPSG','8666','Geoid (height correction) model file','RAMART2016.mnt',NULL,NULL,NULL,NULL,'EPSG','5489','IGN Mtq 2016',0); INSERT INTO "usage" VALUES('EPSG','14487','grid_transformation','EPSG','9637','EPSG','3276','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9638','RGF93 v2 to RGF93 v2 + NGF-IGN69 height (3)','Reversible alternative to RGF93 v2 to NGF-IGN69 height (3) (code 8885). May also be found with filename RAF18.tac.','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','9776','EPSG','9538',0.01,'EPSG','8666','Geoid (height correction) model file','RAF18.mnt',NULL,NULL,NULL,NULL,'EPSG','9777','IGN Fra 18',0); INSERT INTO "usage" VALUES('EPSG','15078','grid_transformation','EPSG','9638','EPSG','1326','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9639','RGF93 v2 to RGF93 v2 + NGF-IGN78 height (2)','Reversible alternative to RGF93 v2 to NGF-IGN78 height (2) (code 8372).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','9776','EPSG','9539',0.05,'EPSG','8666','Geoid (height correction) model file','RAC09.mnt',NULL,NULL,NULL,NULL,'EPSG','9777','IGN Fra Cor 09',0); INSERT INTO "usage" VALUES('EPSG','15079','grid_transformation','EPSG','9639','EPSG','1327','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9640','RGNC91-93 to RGNC91-93 + NGNC08 height (1)','Reversible alternative to RGNC91-93 to NGNC08 height (1) (code 9352).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','4907','EPSG','9540',0.03,'EPSG','8666','Geoid (height correction) model file','Ranc08_Circe.mnt',NULL,NULL,NULL,NULL,'EPSG','4749','BGN-Ncl RANC08',0); INSERT INTO "usage" VALUES('EPSG','14496','grid_transformation','EPSG','9640','EPSG','3430','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9641','RGSPM06 to RGSPM06 + Danger 1950 height (2)','Reversible alternative to RGSPM06 to Danger 1950 height (2) (code 9228).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','4466','EPSG','9541',0.05,'EPSG','8666','Geoid (height correction) model file','RASPM2018.mnt',NULL,NULL,NULL,NULL,'EPSG','4463','IGN-SPM',0); INSERT INTO "usage" VALUES('EPSG','15080','grid_transformation','EPSG','9641','EPSG','3299','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9642','RRAF 1991 to RRAF 1991 + IGN 2008 LD height (1)','Reversible alternative to RRAF 1991 to IGN 2008 LD height (1) (code 9132).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','4557','EPSG','9542',0.2,'EPSG','8666','Geoid (height correction) model file','RALDW842016.mnt',NULL,NULL,NULL,NULL,'EPSG','4558','IGN Glp Des',0); INSERT INTO "usage" VALUES('EPSG','14502','grid_transformation','EPSG','9642','EPSG','2893','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9643','ITRF2005 to ITRF2005 + SA LLD height (1)','Reversible alternative to ITRF2005 to SA LLD height (1) (code 9280).','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','7910','EPSG','9543',0.07,'EPSG','8666','Geoid (height correction) model file','SAGEOID2010.dat',NULL,NULL,NULL,NULL,'EPSG','8998','NGI-Zaf',0); INSERT INTO "usage" VALUES('EPSG','14523','grid_transformation','EPSG','9643','EPSG','3309','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9644','NAD83(CSRS)v6 to NAD83(CSRS)v6 + CGVD2013a(2010) height (1)','Reversible alternative to NAD83(CSRS)v6 to CGVD2013a(2010) height (1) (code 9247).','EPSG','1090','Geog3D to Geog2D+GravityRelatedHeight (NRCan byn)','EPSG','8251','EPSG','9544',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,'EPSG','8252','NRC Can CGG2013a',0); INSERT INTO "usage" VALUES('EPSG','15099','grid_transformation','EPSG','9644','EPSG','1061','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9645','Constanta height to EVRF2019 mean-tide height (1)','Determined at 96 points, SD 0.010m. Offset: mean 0.015m, minimum -0.006m, maximum 0.040m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5781','EPSG','9390',0.02,'EPSG','8732','Vertical offset file','ro_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14692','grid_transformation','EPSG','9645','EPSG','3295','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9646','Alicante height to EVRF2019 height (1)','Determined at 155 points, SD 0.041m. Offset: mean -0.427m, minimum -0.555m, maximum -0.355m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5782','EPSG','9389',0.082,'EPSG','8732','Vertical offset file','es_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Esp 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14696','grid_transformation','EPSG','9646','EPSG','2366','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9647','Alicante height to EVRF2019 mean-tide height (1)','Determined at 155 points, SD 0.039m. Offset: mean -0.488m, minimum -0.603m, maximum -0.426m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5782','EPSG','9390',0.078,'EPSG','8732','Vertical offset file','es_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Esp 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14854','grid_transformation','EPSG','9647','EPSG','2366','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9648','RH2000 height to EVRF2019 height (1)','Determined at 3356 points, SD 0.003m. Offset: mean -0.003m, minimum -0.014m, maximum 0.003m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5613','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','se_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14697','grid_transformation','EPSG','9648','EPSG','3313','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9649','RH2000 height to EVRF2019 mean-tide height (1)','Determined at 3356 points, SD 0.016m. Offset: mean 0.036m, minimum 0.003m, maximum 0.071m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5613','EPSG','9390',0.032,'EPSG','8732','Vertical offset file','se_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14778','grid_transformation','EPSG','9649','EPSG','3313','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9652','Baltic 1986 height to EVRF2019 height (1)','Determined at 300 points, SD 0.010m. Offset: mean 0.178m, minimum 0.144m, maximum 0.203m. May also use CRS 9702 (ETRF2000-PL) as interpolation CRS.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9650','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','pl86_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Pol 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','15035','grid_transformation','EPSG','9652','EPSG','3293','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9653','Baltic 1986 height to EVRF2019 mean-tide height (1)','Determined at 300 points, SD 0.010m. Offset: mean 0.176m, minimum 0.133m, maximum 0.201m. May also use CRS 9702 (ETRF2000-PL) as interpolation CRS.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9650','EPSG','9390',0.02,'EPSG','8732','Vertical offset file','pl86_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Pol 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','15036','grid_transformation','EPSG','9653','EPSG','3293','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9654','EVRF2007-PL height to EVRF2019 height (1)','Determined at 319 points, SD 0.003m. Offset: mean 0.012m, minimum 0.002m, maximum 0.024m. May also use CRS 9702 (ETRF2000-PL) as interpolation CRS.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9651','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','pl07_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Pol 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','15037','grid_transformation','EPSG','9654','EPSG','3293','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9655','EVRF2007-PL height to EVRF2019 mean-tide height (1)','Determined at 319 points, SD 0.006m. Offset: mean 0.011m, minimum -0.006m, maximum 0.022m. May also use CRS 9702 (ETRF2000-PL) as interpolation CRS.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9651','EPSG','9390',0.012,'EPSG','8732','Vertical offset file','pl07_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Pol 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','15038','grid_transformation','EPSG','9655','EPSG','3293','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9658','ETRF2000-PL to Baltic 1986 height (1)','For reversible alternative to this transformation see ETRF2000-PL to ETRF2000-PL + Baltic 1986 height (1) (code 9659).','EPSG','1099','Geographic3D to GravityRelatedHeight (PL txt)','EPSG','9702','EPSG','9650',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-KRON86-NH.txt',NULL,NULL,NULL,NULL,NULL,NULL,'GUGiK-Pol geoid11 KRON86',1); INSERT INTO "usage" VALUES('EPSG','15013','grid_transformation','EPSG','9658','EPSG','3293','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9659','ETRF2000-PL to ETRF2000-PL + Baltic 1986 height (1)','Reversible alternative to ETRF2000-PL to Baltic 1986 height (1) (code 9658).','EPSG','1100','Geog3D to Geog2D+GravityRelatedHeight (PL txt)','EPSG','9702','EPSG','9656',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-KRON86-NH.txt',NULL,NULL,NULL,NULL,'EPSG','9702','GUGiK-Pol geoid11 KRON86',1); INSERT INTO "usage" VALUES('EPSG','15106','grid_transformation','EPSG','9659','EPSG','3293','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9660','ETRF2000-PL to EVRF2007-PL height (1)','For reversible alternative to this transformation see ETRF2000-PL to ETRF2000-PL + EVRF2007-PL height (1) (code 9661).','EPSG','1099','Geographic3D to GravityRelatedHeight (PL txt)','EPSG','9702','EPSG','9651',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-EVRF2007-NH.txt',NULL,NULL,NULL,NULL,NULL,NULL,'GUGiK-Pol geoid11 EVRF07',1); INSERT INTO "usage" VALUES('EPSG','15039','grid_transformation','EPSG','9660','EPSG','3293','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9661','ETRF2000-PL to ETRF2000-PL + EVRF2007-PL height (1)','Reversible alternative to ETRF2000-PL to EVRF2007-PL height (1) (code 9660).','EPSG','1100','Geog3D to Geog2D+GravityRelatedHeight (PL txt)','EPSG','9702','EPSG','9657',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-EVRF2007-NH.txt',NULL,NULL,NULL,NULL,'EPSG','9702','GUGiK-Pol geoid11 EVRF07',1); INSERT INTO "usage" VALUES('EPSG','15107','grid_transformation','EPSG','9661','EPSG','3293','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9662','Baltic 1986 height to EVRF2007-PL height (1)','Gives same result as differencing quasi-geoid models geoid2011-KRON86 and geoid2011-EVRF2007 (transformations 9658 and 9660).','EPSG','1101','Vertical Offset by Grid Interpolation (PL txt)','EPSG','9650','EPSG','9651',0.04,'EPSG','8732','Vertical offset file','gugik-evrf2007.txt',NULL,NULL,NULL,NULL,'EPSG','9702','GUGiK-Pol',0); INSERT INTO "usage" VALUES('EPSG','15052','grid_transformation','EPSG','9662','EPSG','3293','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9664','EH2000 height to EVRF2019 height (1)','Determined at 367 points, SD 0.001m. Offset: mean 0.011m, minimum 0.008m, maximum 0.013m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9663','EPSG','9389',0.002,'EPSG','8732','Vertical offset file','ee_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Est 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14748','grid_transformation','EPSG','9664','EPSG','3246','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9665','EH2000 height to EVRF2019 mean-tide height (1)','Determined at 367 points, SD 0.002m. Offset: mean 0.041m, minimum 0.037m, maximum 0.045m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9663','EPSG','9390',0.004,'EPSG','8732','Vertical offset file','ee_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Est 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14757','grid_transformation','EPSG','9665','EPSG','3246','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9667','LAS07 height to EVRF2019 height (1)','Determined at 56 points, SD 0.005m. Offset: mean 0.009m, minimum 0.001m, maximum 0.018m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9666','EPSG','9389',0.01,'EPSG','8732','Vertical offset file','lt_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ltu 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14755','grid_transformation','EPSG','9667','EPSG','3272','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9668','LAS07 height to EVRF2019 mean-tide height (1)','Determined at 56 points, SD 0.007m. Offset: mean 0.024m, minimum 0.010m, maximum 0.036m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9666','EPSG','9390',0.014,'EPSG','8732','Vertical offset file','lt_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ltu 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14759','grid_transformation','EPSG','9668','EPSG','3272','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9670','BGS2005 height to EVRF2019 height (1)','Determined at 59 points, SD 0.018m. Offset: mean -0.002m, minimum -0.051m, maximum 0.034m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9669','EPSG','9389',0.036,'EPSG','8732','Vertical offset file','bgneu_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14799','grid_transformation','EPSG','9670','EPSG','3224','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9671','BGS2005 height to EVRF2019 mean-tide height (1)','Determined at 59 points, SD 0.016m. Offset: mean -0.050m, minimum -0.093m, maximum -0.019m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','9669','EPSG','9390',0.032,'EPSG','8732','Vertical offset file','bgneu_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14798','grid_transformation','EPSG','9671','EPSG','3224','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9689','GDA94 to WGS 84 (3)','Equivalent to concatenation of CT 8447 and null CT 8450 through GDA2020. See GDA94 to WGS 84 (2) (CT code 9688) for conformal-only alternative (i.e. without distortion modelling).','EPSG','9615','NTv2','EPSG','4283','EPSG','4326',3.0,'EPSG','8656','Latitude and longitude difference file','GDA94_GDA2020_conformal_and_distortion.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf and Dist',0); INSERT INTO "usage" VALUES('EPSG','14965','grid_transformation','EPSG','9689','EPSG','2575','EPSG','1275'); INSERT INTO "grid_transformation" VALUES('EPSG','9691','WGS 84 to GDA2020 (4)','Equivalent to concatenation of null CT 1150 and CT 8447 through GDA94. See WGS 84 to GDA94 (3) (CT code 9690) for conformal-only alternative (i.e. without distortion modelling).','EPSG','9615','NTv2','EPSG','4326','EPSG','7844',3.0,'EPSG','8656','Latitude and longitude difference file','GDA94_GDA2020_conformal_and_distortion.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf and Dist',0); INSERT INTO "usage" VALUES('EPSG','14966','grid_transformation','EPSG','9691','EPSG','2575','EPSG','1159'); INSERT INTO "grid_transformation" VALUES('EPSG','9692','GDA2020 to AVWS height (2)','AGQG is used to realise AVWS. Uncertainties (4-8 cm across mainland Australia) given in accompanying file AGQG_uncertainty_20201120.gsb. For reversible alternative to this transformation see GDA2020 to GDA2020 + AVWS height (2) (code 9693).','EPSG','1048','Geographic3D to GravityRelatedHeight (AUSGeoid v2)','EPSG','7843','EPSG','9458',0.1,'EPSG','8666','Geoid (height correction) model file','AGQG_20201120.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus AGQG 20201120',0); INSERT INTO "usage" VALUES('EPSG','14924','grid_transformation','EPSG','9692','EPSG','4177','EPSG','1264'); INSERT INTO "grid_transformation" VALUES('EPSG','9693','GDA2020 to GDA2020 + AVWS height (2)','Reversible alternative to GDA2020 to AVWS height (1) (code 9692). AGQG is used to realise AVWS. Uncertainties (4-8 cm across mainland Australia) given in accompanying file AGQG_uncertainty_20201120.gsb.','EPSG','1083','Geog3D to Geog2D+GravityRelatedHeight (AUSGeoidv2)','EPSG','7843','EPSG','9462',0.1,'EPSG','8666','Geoid (height correction) model file','AGQG_20201120.gsb',NULL,NULL,NULL,NULL,'EPSG','7844','GA-Aus AGQG 20201120',0); INSERT INTO "usage" VALUES('EPSG','14967','grid_transformation','EPSG','9693','EPSG','4177','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9704','WGS 84 to WGS 84 + EGM2008 height (1)','Reversible alternative to WGS 84 to EGM2008 height (1) (code 3858).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4979','EPSG','9518',1.0,'EPSG','8666','Geoid (height correction) model file','Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,'EPSG','4326','NGA-World 2.5min',0); INSERT INTO "usage" VALUES('EPSG','15096','grid_transformation','EPSG','9704','EPSG','1262','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9706','WGS 84 to WGS 84 + MSL height (1)','Reversible alternative to WGS 84 to MSL height (1) (code 8037). Parameter values are from WGS 84 to WGS 84 + EGM2008 height (2) (CT code 9618) assuming that the EGM2008 surface equals MSL surface within the accuracy of the transformation.','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4979','EPSG','9705',0.5,'EPSG','8666','Geoid (height correction) model file','Und_min1x1_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,'EPSG','4326','IOGP-World',0); INSERT INTO "usage" VALUES('EPSG','15105','grid_transformation','EPSG','9706','EPSG','1262','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9708','WGS 84 to WGS 84 + EGM96 height (1)','Reversible alternative to WGS 84 to EGM96 height (1) (code 10084).','EPSG','1103','Geog3D to Geog2D+GravityRelatedHeight (EGM)','EPSG','4979','EPSG','9707',1.0,'EPSG','8666','Geoid (height correction) model file','WW15MGH.GRD',NULL,NULL,NULL,NULL,'EPSG','4326','NGA-World',0); INSERT INTO "usage" VALUES('EPSG','15101','grid_transformation','EPSG','9708','EPSG','1262','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9717','ETRF2000-PL to Baltic 1986 height (1)','For reversible alternative to this transformation see ETRF2000-PL to ETRF2000-PL + Baltic 1986 height (1) (code 9718).','EPSG','1099','Geographic3D to GravityRelatedHeight (PL txt)','EPSG','9701','EPSG','9650',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-KRON86-NH.txt',NULL,NULL,NULL,NULL,NULL,NULL,'GUGiK-Pol geoid11 KRON86',0); INSERT INTO "usage" VALUES('EPSG','15236','grid_transformation','EPSG','9717','EPSG','3293','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9718','ETRF2000-PL to ETRF2000-PL + Baltic 1986 height (1)','Reversible alternative to ETRF2000-PL to Baltic 1986 height (1) (code 9717).','EPSG','1100','Geog3D to Geog2D+GravityRelatedHeight (PL txt)','EPSG','9701','EPSG','9656',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-KRON86-NH.txt',NULL,NULL,NULL,NULL,'EPSG','9702','GUGiK-Pol geoid11 KRON86',0); INSERT INTO "usage" VALUES('EPSG','15237','grid_transformation','EPSG','9718','EPSG','3293','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9719','ETRF2000-PL to EVRF2007-PL height (1)','For reversible alternative to this transformation see ETRF2000-PL to ETRF2000-PL + EVRF2007-PL height (1) (code 9720).','EPSG','1099','Geographic3D to GravityRelatedHeight (PL txt)','EPSG','9701','EPSG','9651',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-EVRF2007-NH.txt',NULL,NULL,NULL,NULL,NULL,NULL,'GUGiK-Pol geoid11 EVRF07',0); INSERT INTO "usage" VALUES('EPSG','15238','grid_transformation','EPSG','9719','EPSG','3293','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9720','ETRF2000-PL to ETRF2000-PL + EVRF2007-PL height (1)','Reversible alternative to ETRF2000-PL to EVRF2007-PL height (1) (code 9719).','EPSG','1100','Geog3D to Geog2D+GravityRelatedHeight (PL txt)','EPSG','9701','EPSG','9657',0.03,'EPSG','8666','Geoid (height correction) model file','gugik-geoid2011-PL-EVRF2007-NH.txt',NULL,NULL,NULL,NULL,'EPSG','9702','GUGiK-Pol geoid11 EVRF07',0); INSERT INTO "usage" VALUES('EPSG','15239','grid_transformation','EPSG','9720','EPSG','3293','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9727','ETRS89 to Genoa 1942 height (1)','Replaces ITALGEO99. For reversible alternative to this transformation see ETRS89 to ETRS89+ Genoa 1942 height (1) (code 9729).','EPSG','1106','Geographic3D to GravityRelatedHeight (ITAL2005)','EPSG','4937','EPSG','5214',0.035,'EPSG','8666','Geoid (height correction) model file','geo_igm_mar06.grd',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita 2005 main Sic',0); INSERT INTO "usage" VALUES('EPSG','15332','grid_transformation','EPSG','9727','EPSG','3736','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9728','ETRS89 to Cagliari 1956 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Cagliari 1956 height (1) (code 9730).','EPSG','1106','Geographic3D to GravityRelatedHeight (ITAL2005)','EPSG','4937','EPSG','9722',0.035,'EPSG','8666','Geoid (height correction) model file','geo_igm_mar06.grd',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita 2005 Sardinia',0); INSERT INTO "usage" VALUES('EPSG','15337','grid_transformation','EPSG','9728','EPSG','2339','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9729','ETRS89 to ETRS89 + Genoa 1942 height (1)','Reversible alternative to ETRS89 to Genoa 1942 height (1) (code 9727).','EPSG','1105','Geog3D to Geog2D+GravityRelatedHeight (ITAL2005)','EPSG','4937','EPSG','9723',0.035,'EPSG','8666','Geoid (height correction) model file','geo_igm_mar06.grd',NULL,NULL,NULL,NULL,'EPSG','4258','IGM-Ita 2005 main Sic',0); INSERT INTO "usage" VALUES('EPSG','15333','grid_transformation','EPSG','9729','EPSG','3736','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9730','ETRS89 to ETRS89 + Cagliari 1956 height (1)','Reversible alternative to ETRS89 to Cagliari 1956 height (1) (code 9728).','EPSG','1105','Geog3D to Geog2D+GravityRelatedHeight (ITAL2005)','EPSG','4937','EPSG','9725',0.035,'EPSG','8666','Geoid (height correction) model file','geo_igm_mar06.grd',NULL,NULL,NULL,NULL,'EPSG','4258','IGM-Ita 2005 Sardinia',0); INSERT INTO "usage" VALUES('EPSG','15283','grid_transformation','EPSG','9730','EPSG','2339','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9732','Monte Mario to ED50 (1)','For the reverse transformation from ED50 to Monte Mario, iteration may be avoided by using an alternative grid file (35160622_47161840_E50_R40.gsb).','EPSG','9615','NTv2','EPSG','4265','EPSG','4230',0.1,'EPSG','8656','Latitude and longitude difference file','35160622_47161840_R40_E50.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','15306','grid_transformation','EPSG','9732','EPSG','4619','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','9733','Monte Mario to IGM95 (4)','For the reverse transformation from IGM95 to Monte Mario, iteration may be avoided by using an alternative grid file (35160622_47161840_F89_R40.gsb).','EPSG','9615','NTv2','EPSG','4265','EPSG','4670',0.1,'EPSG','8656','Latitude and longitude difference file','35160622_47161840_R40_F89.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','15327','grid_transformation','EPSG','9733','EPSG','4619','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','9734','Monte Mario to RDN2008 (5)','For the reverse transformation from RDN2008 to Monte Mario, iteration may be avoided by using an alternative grid file (35160622_47161840_F00_R40.gsb).','EPSG','9615','NTv2','EPSG','4265','EPSG','6706',0.1,'EPSG','8656','Latitude and longitude difference file','35160622_47161840_R40_F00.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','15308','grid_transformation','EPSG','9734','EPSG','4619','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','9735','ED50 to IGM95 (1)','For the reverse transformation from IGM95 to ED50, iteration may be avoided by using an alternative grid file (35160622_47161840_F89_E50.gsb).','EPSG','9615','NTv2','EPSG','4230','EPSG','4670',0.2,'EPSG','8656','Latitude and longitude difference file','35160622_47161840_E50_F89.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','15334','grid_transformation','EPSG','9735','EPSG','4619','EPSG','1032'); INSERT INTO "grid_transformation" VALUES('EPSG','9736','ED50 to RDN2008 (1)','For the reverse transformation from RDN2008 to ED50, iteration may be avoided by using an alternative grid file (35160622_47161840_F00_E50.gsb).','EPSG','9615','NTv2','EPSG','4230','EPSG','6706',0.2,'EPSG','8656','Latitude and longitude difference file','35160622_47161840_E50_F00.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','15335','grid_transformation','EPSG','9736','EPSG','4619','EPSG','1032'); INSERT INTO "grid_transformation" VALUES('EPSG','9737','IGM95 to RDN2008 (1)','For the reverse transformation from RDN2008 to IGM95, iteration may be avoided by using an alternative grid file (35160622_47161840_F00_F89.gsb).','EPSG','9615','NTv2','EPSG','4670','EPSG','6706',0.01,'EPSG','8656','Latitude and longitude difference file','35160622_47161840_F89_F00.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','15336','grid_transformation','EPSG','9737','EPSG','4619','EPSG','1150'); INSERT INTO "grid_transformation" VALUES('EPSG','9740','ETRS89 to EOS21-IRF (1)','In conjunction with the EOS21-TM map projection (code 9738) applied to EOS21-IRF (code 9739), emulates the EOS21 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines EOS21-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9739',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-EOS21-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr EOS21 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','15342','grid_transformation','EPSG','9740','EPSG','4620','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9759','ETRS89 to ECML14_NB-IRF (1)','In conjunction with the ECML14_NB-TM map projection (code 9760) applied to ECML14_NB-IRF (code 9758), emulates the ECML14_NB Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines ECML14_NB-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9758',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-ECML14_NB-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr ECML_NB OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','16500','grid_transformation','EPSG','9759','EPSG','4621','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9764','ETRS89 to EWR2-IRF (1)','In conjunction with the EWR2-TM map projection (code 9765) applied to EWR2-IRF (code 9763), emulates the EWR2 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines EWR2-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9763',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-EWR2-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr EWR2 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','16505','grid_transformation','EPSG','9764','EPSG','4622','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9786','RGF93 v2b to NGF-IGN69 height (4)','Replaces RAF18 geoid model [RGF93 v2 to NGF-IGN69 height (3)]. Accuracy at each grid node is in the geoid model file. Recommended interpolation method is bilinear. For reversible alternative see RGF93 v2b to RGF93 v2b + NGF-IGN69 height (4) (code 9787).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','5720',0.01,'EPSG','8666','Geoid (height correction) model file','RAF18b.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 18b',0); INSERT INTO "usage" VALUES('EPSG','16689','grid_transformation','EPSG','9786','EPSG','1326','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9787','RGF93 v2b to RGF93 v2b + NGF-IGN69 height (4)','Reversible alternative to RGF93 v2b to NGF-IGN69 height (4) (CT code 9786). Replaces RGF93 v2 to RGF93 v2 + NGF-IGN69 height (3) (CT code 9638).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','9785',0.01,'EPSG','8666','Geoid (height correction) model file','RAF18b.mnt',NULL,NULL,NULL,NULL,'EPSG','9782','IGN Fra 18b',0); INSERT INTO "usage" VALUES('EPSG','16690','grid_transformation','EPSG','9787','EPSG','1326','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9795','NAD83 to NAD83(CSRS)v7 (1)','Also distributed through Alberta Environment and Parks Lands Division named ABCSRSV7.DAC.','EPSG','9615','NTv2','EPSG','4269','EPSG','8255',0.1,'EPSG','8656','Latitude and longitude difference file','ABCSRSV7.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can AB',0); INSERT INTO "usage" VALUES('EPSG','16635','grid_transformation','EPSG','9795','EPSG','2376','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','9867','ETRS89 to MRH21-IRF (1)','In conjunction with MRH21-TM map projection (code 9868) applied to MRH21-IRF (code 9866), emulates the MRH21 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines MRH21-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','9866',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-MRH21-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr MHR21 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','16943','grid_transformation','EPSG','9867','EPSG','4652','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9876','RGF93 v2b to NGF-IGN69 height (5)','Replaces RAF18b geoid model [RGF93 v2 to NGF-IGN69 height (4)]. Accuracy at each grid node is in the geoid model file. Recommended interpolation method is bilinear. For reversible alternative see RGF93 v2b to RGF93 v2b + NGF-IGN69 height (5) (code 9877).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','5720',0.01,'EPSG','8666','Geoid (height correction) model file','RAF20.tac',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 20',0); INSERT INTO "usage" VALUES('EPSG','16930','grid_transformation','EPSG','9876','EPSG','1326','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9877','RGF93 v2b to RGF93 v2b + NGF-IGN69 height (5)','Reversible alternative to RGF93 v2b to NGF-IGN69 height (5) (CT code 9876). Replaces RGF93 v2b to RGF93 v2b + NGF-IGN69 height (4) (CT code 9787).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','9785',0.01,'EPSG','8666','Geoid (height correction) model file','RAF20.tac',NULL,NULL,NULL,NULL,'EPSG','9782','IGN Fra 20',0); INSERT INTO "usage" VALUES('EPSG','16932','grid_transformation','EPSG','9877','EPSG','1326','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9878','ETRS89 to MOLDOR11-IRF (1)','In conjunction with the MOLDOR11-TM map projection (code 9879) applied to MOLDOR11-IRF (code 9871), emulates the MOLDOR11 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines MOLDOR11-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9871',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-MOLDOR11-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr MOLDOR OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','16955','grid_transformation','EPSG','9878','EPSG','4655','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9884','ETRS89 to CD Norway depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + CD Norway depth (1) (code 9885). Replaced by ETRS89 to CD Norway depth (2) (model "CD Norway 2021b", code 10130).','EPSG','1109','Geographic3D to Depth (Gravsoft)','EPSG','4937','EPSG','9672',999.0,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2021a.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2021',0); INSERT INTO "usage" VALUES('EPSG','16982','grid_transformation','EPSG','9884','EPSG','4656','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','9885','ETRS89 to ETRS89 + CD Norway depth (1)','Reversible alternative to ETRS89 to CD Norway depth (1) (code 9884). Replaced by ETRS89 to ETRS89 + CD Norway depth (2) (model "CD Norway 2021b", code 10133).','EPSG','1110','Geog3D to Geog2D+Depth (Gravsoft)','EPSG','4937','EPSG','9883',999.0,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2021a.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2021',0); INSERT INTO "usage" VALUES('EPSG','16984','grid_transformation','EPSG','9885','EPSG','4656','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','9886','NAD27 to NAD83(CSRS)v2 (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0); INSERT INTO "usage" VALUES('EPSG','16978','grid_transformation','EPSG','9886','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9887','NAD83 to NAD83(CSRS)v2 (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0); INSERT INTO "usage" VALUES('EPSG','16979','grid_transformation','EPSG','9887','EPSG','2375','EPSG','1151'); INSERT INTO "grid_transformation" VALUES('EPSG','9888','NTF to RGF93 v2 (1)','Parameter file is from NTF to RGF93 v1 (code 9327), assuming that RGF93 v1 is equivalent to RGF93 v2 within the accuracy of the transformation. May be emulated using NTv2 method - see CT code 9890.','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4275','EPSG','9777',1.0,'EPSG','8727','Geocentric translation file','gr3df97a.txt',NULL,NULL,NULL,NULL,'EPSG','9777','IGN-Fra 1m',0); INSERT INTO "usage" VALUES('EPSG','17063','grid_transformation','EPSG','9888','EPSG','3694','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','9889','NTF to RGF93 v2b (1)','Parameter file is from NTF to RGF93 v1 (code 9327), assuming that RGF93 v1 is equivalent to RGF93 v2b within the accuracy of the transformation. May be emulated using NTv2 method - see CT code 9891.','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4275','EPSG','9782',1.0,'EPSG','8727','Geocentric translation file','gr3df97a.txt',NULL,NULL,NULL,NULL,'EPSG','9782','IGN-Fra 1m',0); INSERT INTO "usage" VALUES('EPSG','17064','grid_transformation','EPSG','9889','EPSG','3694','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','9890','RGF93 v2 to NTF (2)','Emulation of transformation NTF to RGF93 v2 (1), code 9888. Note that grid file parameters are of opposite sign. Parameter file is from RGF93 v1 to NTF (code 15958), assuming that RGF93 v1 is equivalent to RGF93 v2 within the accuracy of the CT.','EPSG','9615','NTv2','EPSG','9777','EPSG','4275',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Fra 1m emulation',0); INSERT INTO "usage" VALUES('EPSG','17060','grid_transformation','EPSG','9890','EPSG','3694','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','9891','RGF93 v2b to NTF (2)','Emulation of transformation NTF to RGF93 v2b (1), code 9889. Note that grid file parameters are of opposite sign. Parameter file is from RGF93 v1 to NTF (code 15958), assuming that RGF93 v1 is equivalent to RGF93 v2b within the accuracy of the CT.','EPSG','9615','NTv2','EPSG','9782','EPSG','4275',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Fra 1m emulation',0); INSERT INTO "usage" VALUES('EPSG','17062','grid_transformation','EPSG','9891','EPSG','3694','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','9896','JGD2000 to WGS 84 (2)','Parameter file from JGD2000 to JGD2011 (1) (code 6713) assuming that JGD2011 is equivalent to WGS 84 within the accuracy of this CT. Use for area affected by the 2011 Tohoku earthquake; for areas outside this extent use JGD2000 to WGS 84 (1) (code 1826).','EPSG','9615','NTv2','EPSG','4612','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','touhokutaiheiyouoki2011.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Jpn N Honshu',0); INSERT INTO "usage" VALUES('EPSG','17283','grid_transformation','EPSG','9896','EPSG','4170','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','9900','Genoa 1942 height to EVRF2019 height (1)','Determined at 26 points, SD 0.062m. Offset: mean -0.285m, minimum -0.441m, maximum -0.194m. The extent corresponds to the area in Italy containing benchmarks with EVRF heights.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5214','EPSG','9389',0.124,'EPSG','8732','Vertical offset file','it_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','17317','grid_transformation','EPSG','9900','EPSG','4659','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9902','Baltic 1977 height to EVRF2019 height (1)','Determined at 154 points, SD 0.034m. Offset: mean 0.151m, minimum 0.079m, maximum 0.285m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5705','EPSG','9389',0.068,'EPSG','8732','Vertical offset file','ua_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ukr 2019z 2021',0); INSERT INTO "usage" VALUES('EPSG','17066','grid_transformation','EPSG','9902','EPSG','3324','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9903','Baltic 1977 height to EVRF2019 mean-tide height (1)','Determined at 154 points, SD 0.032m. Offset: mean 0.131m, minimum 0.066m, maximum 0.268m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5705','EPSG','9390',0.064,'EPSG','8732','Vertical offset file','ua_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ukr 2019m 2021',0); INSERT INTO "usage" VALUES('EPSG','17067','grid_transformation','EPSG','9903','EPSG','3324','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9908','ETRS89 to Ostend height (1)','Based on gravimetric quasi-geoid NLGEO2018 fitted to 3707 benchmarks of the Ostend height leveling network. SD of 1 cm. In use from 2018-08-01. For reversible alternative to this transformation see ETRS89 to ETRS89 + Ostend height (1) (code 9909).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','4937','EPSG','5710',0.02,'EPSG','8666','Geoid (height correction) model file','hBG18.dat',NULL,NULL,NULL,NULL,NULL,NULL,'NGI-Bel 2018',0); INSERT INTO "usage" VALUES('EPSG','17367','grid_transformation','EPSG','9908','EPSG','1347','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9909','ETRS89 to ETRS89 + Ostend height (1)','Reversible alternative to ETRS89 to Ostend height (1) (code 9908). In use from 2018-08-01.','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','4937','EPSG','9907',0.02,'EPSG','8666','Geoid (height correction) model file','hBG18.dat',NULL,NULL,NULL,NULL,'EPSG','4258','NGI-Bel 2018',0); INSERT INTO "usage" VALUES('EPSG','17373','grid_transformation','EPSG','9909','EPSG','1347','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9910','MGI to ETRS89 (8)','Replaces GIS-Grid (2010) (CT 5891). Not to be used for cadastral purposes because it does not comply with the rules for control network tie-in as per Paragraph 3 of the Land Survey Regulations (Vermessungsverordnung) 2010.','EPSG','9615','NTv2','EPSG','4312','EPSG','4258',0.14,'EPSG','8656','Latitude and longitude difference file','AT_GIS_GRID_2021_09_28.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut NTv2 2021',0); INSERT INTO "usage" VALUES('EPSG','17414','grid_transformation','EPSG','9910','EPSG','1037','EPSG','1144'); INSERT INTO "grid_transformation" VALUES('EPSG','9914','ETRS89 to BI height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + BI height (1) (code 9915).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9451',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Gbr 2015',0); INSERT INTO "usage" VALUES('EPSG','17330','grid_transformation','EPSG','9914','EPSG','4390','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9915','ETRS89 to ETRS89 + BI height (1)','Reversible alternative to ETRS89 to BI height (1) (code 9914).','EPSG','1097','Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','9452',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,'EPSG','4258','OS-Gbr 2015',0); INSERT INTO "usage" VALUES('EPSG','17331','grid_transformation','EPSG','9915','EPSG','4390','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9916','ETRS89 to BI height (2)','Parameter file taken from ETRS89 to Belfast height (2). Belfast is a member of the BI ensemble. For reversible alternative to this transformation see ETRS89 to ETRS89 + BI height (2) (code 9917).','EPSG','1072','Geographic3D to GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','9451',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI 2015',0); INSERT INTO "usage" VALUES('EPSG','17324','grid_transformation','EPSG','9916','EPSG','2530','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9917','ETRS89 to ETRS89 + BI height (2)','Reversible alternative to ETRS89 to BI height (2) (code 9916).','EPSG','1096','Geog3D to Geog2D+GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','9452',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK NI 2015',0); INSERT INTO "usage" VALUES('EPSG','17325','grid_transformation','EPSG','9917','EPSG','2530','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9918','ETRS89 to BI height (3)','Parameter file taken from ETRS89 to Malin Head height (2). Malin Head is a member of the BI ensemble. For reversible alternative to this transformation see ETRS89 to ETRS89 + BI height (3) (code 9919).','EPSG','1072','Geographic3D to GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','9451',0.023,'EPSG','8666','Geoid (height correction) model file','OSGM15_Malin.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire 2015',0); INSERT INTO "usage" VALUES('EPSG','17341','grid_transformation','EPSG','9918','EPSG','1305','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9919','ETRS89 to ETRS89 + BI height (3)','Reversible alternative to ETRS89 to BI height (3) (code 9918).','EPSG','1096','Geog3D to Geog2D+GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','9452',0.023,'EPSG','8666','Geoid (height correction) model file','OSGM15_Malin.gri',NULL,NULL,NULL,NULL,'EPSG','4258','OS-Ire 2015',0); INSERT INTO "usage" VALUES('EPSG','17342','grid_transformation','EPSG','9919','EPSG','1305','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9921','Genoa 1942 height to EVRF2019 mean-tide height (1)','Determined at 26 points, SD 0.054m. Offset: mean -0.328m, minimum -0.469m, maximum -0.249m. The extent corresponds to the area in Italy containing benchmarks with EVRF heights.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5214','EPSG','9390',0.108,'EPSG','8732','Vertical offset file','it_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','17318','grid_transformation','EPSG','9921','EPSG','4659','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','9925','ETRS89 to DHHN2016 height (1)','Better model accuracy (approx. 1 cm in the lowlands, approx. 2 cm in the high mountains and 2 - 6 cm offshore) if applied to ETRS89/DREF91/2016 (CT code 10294). For reversible alternative to this CT see ETRS89 to ETRS89 + DHHN2016 height (1) (code 9926).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','4937','EPSG','7837',0.1,'EPSG','8666','Geoid (height correction) model file','GCG2016.txt',NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu 2016',0); INSERT INTO "usage" VALUES('EPSG','17171','grid_transformation','EPSG','9925','EPSG','3339','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9926','ETRS89 to ETRS89 + DHHN2016 height (1)','Reversible alternative to ETRS89 to DHHN2016 height (1) (code 9925). Geoid model accuracy approx. 1 cm in the lowlands, approx. 2 cm in the high mountains and 2 - 6 cm offshore when applied to ETRS89/DREF91/2016 but no better than 0.1m when ETRS89 used.','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','4937','EPSG','9924',0.1,'EPSG','8666','Geoid (height correction) model file','GCG2016.txt',NULL,NULL,NULL,NULL,'EPSG','4258','BKG-Deu 2016',0); INSERT INTO "usage" VALUES('EPSG','17170','grid_transformation','EPSG','9926','EPSG','3339','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9940','DHDN to ETRS89 (11)','Official transformation of Hessen for the land survey register (ALKIS).','EPSG','9615','NTv2','EPSG','4314','EPSG','4258',0.1,'EPSG','8656','Latitude and longitude difference file','HeTa2010.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LVGL-Deu HE 2010',0); INSERT INTO "usage" VALUES('EPSG','17340','grid_transformation','EPSG','9940','EPSG','4660','EPSG','1055'); INSERT INTO "grid_transformation" VALUES('EPSG','9941','ETRS89 to EBBWV14-IRF (1)','In conjunction with EBBWV14-TM map projection (code 9942) applied to EBBWV14-IRF (code 9939), emulates the EBBWV14 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines EBBWV14-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','9939',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-EBBWV14-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr EBBWV14 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','17356','grid_transformation','EPSG','9941','EPSG','4661','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9954','ISN93 to ISH2004 height (1)','File is also available in NOAA VDatum format (Icegeoid_ISN93.gtx). For reversible alternative to this transformation see ISN93 to ISN93 + ISH2004 height (1) (CT code 9955). Replaced by Icegeoid_ISN2004 (CT code 9956).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4945','EPSG','8089',0.05,'EPSG','8666','Geoid (height correction) model file','Icegeoid_ISN93.gri',NULL,NULL,NULL,NULL,NULL,NULL,'NMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','17385','grid_transformation','EPSG','9954','EPSG','4662','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9955','ISN93 to ISN93 + ISH2004 height (1)','Reversible alternative to ISN93 to ISH2004 height (1) (code 9954). File is also available in NOAA VDatum format (Icegeoid_ISN93.gtx). Replaced by Icegeoid_ISN2004.','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4945','EPSG','9948',0.05,'EPSG','8666','Geoid (height correction) model file','Icegeoid_ISN93.gri',NULL,NULL,NULL,NULL,'EPSG','4659','NMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','17393','grid_transformation','EPSG','9955','EPSG','4662','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9956','ISN2004 to ISH2004 height (1)','File also available in NOAA VDatum format (Icegeoid_ISN2004.gtx). For reversible alternative to this transformation see ISN2004 to ISN2004 + ISH2004 height (1) (CT code 9957). Replaces Icegeoid_ISN93 (code 9954). Replaced by Icegeoid_ISN2016 (code 9958).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','5323','EPSG','8089',0.05,'EPSG','8666','Geoid (height correction) model file','Icegeoid_ISN2004.gri',NULL,NULL,NULL,NULL,NULL,NULL,'NMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','17391','grid_transformation','EPSG','9956','EPSG','4662','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9957','ISN2004 to ISN2004 + ISH2004 height (1)','Reversible alternative to ISN2004 to ISH2004 height (1) (CT code 9956). File is also available in NOAA VDatum format (Icegeoid_ISN2004.gtx). Replaces Icegeoid_ISN93, replaced by Icegeoid_ISN2016.','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','5323','EPSG','9949',0.05,'EPSG','8666','Geoid (height correction) model file','Icegeoid_ISN2004.gri',NULL,NULL,NULL,NULL,'EPSG','5324','NMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','17394','grid_transformation','EPSG','9957','EPSG','4662','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9958','ISN2016 to ISH2004 height (1)','File also available in NOAA VDatum format (Icegeoid_ISN2016.gtx). For reversible alternative to this transformation see ISN2016 to ISN2016 + ISH2004 height (1) (CT code 9959). Replaces Icegeoid_ISN2004 (code 9956).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','8085','EPSG','8089',0.05,'EPSG','8666','Geoid (height correction) model file','Icegeoid_ISN2016.gri',NULL,NULL,NULL,NULL,NULL,NULL,'NMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','17392','grid_transformation','EPSG','9958','EPSG','4662','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9959','ISN2016 to ISN2016 + ISH2004 height (1)','Reversible alternative to ISN2016 to ISH2004 height (1) (CT code 9958). File is also available in NOAA VDatum format (Icegeoid_ISN2016.gtx). Replaces Icegeoid_ISN2004.','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','8085','EPSG','9950',0.05,'EPSG','8666','Geoid (height correction) model file','Icegeoid_ISN2016.gri',NULL,NULL,NULL,NULL,'EPSG','8086','NMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','17395','grid_transformation','EPSG','9959','EPSG','4662','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','9965','ETRS89 to HULLEE13-IRF (1)','In conjunction with the HULLEE13-TM map projection (code 9966) applied to HULLEE13-IRF (code 9964), emulates the HULLEE13 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines HULLEE13-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','9964',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-HULLEE13-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr HULLEE OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','17458','grid_transformation','EPSG','9965','EPSG','4663','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9970','ETRS89 to SCM22-IRF (1)','In conjunction with the SCM22-TM map projection (code 9971) applied to SCM22-IRF (code 9969), emulates the SCM22 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines SCM22-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9969',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-SCM22-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr SCM22 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','17453','grid_transformation','EPSG','9970','EPSG','4665','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9975','ETRS89 to FNL22-IRF (1)','In conjunction with the FNL22-TM map projection (code 9976) applied to FNL22-IRF (code 9974), emulates the FNL22 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines FNL22-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','9974',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-FNL22-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr FNL22 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','17452','grid_transformation','EPSG','9975','EPSG','4664','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','9979','SIRGAS 1995 to SIRGAS 2000 (1)','Derived at 48 stations.','EPSG','9615','NTv2','EPSG','4170','EPSG','4674',0.006,'EPSG','8656','Latitude and longitude difference file','SIRGAS1995-to-SIRGAS2000.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SIR-SAm 2021',0); INSERT INTO "usage" VALUES('EPSG','17507','grid_transformation','EPSG','9979','EPSG','3448','EPSG','1278'); INSERT INTO "grid_transformation" VALUES('EPSG','9980','SIRGAS 2000 to SIRGAS-CON SIR17P01 (1)','Derived at 79 stations at epoch 2015.00. Accuracy deteriorates with time due to intra-plate seismic deformation.','EPSG','9615','NTv2','EPSG','4674','EPSG','8987',0.02,'EPSG','8656','Latitude and longitude difference file','SIRGAS2000-to-SIRGAS-CONSIR17P01.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SIR-SAm 2021',0); INSERT INTO "usage" VALUES('EPSG','17505','grid_transformation','EPSG','9980','EPSG','4530','EPSG','1255'); INSERT INTO "grid_transformation" VALUES('EPSG','9983','NAD83(CSRS)v3 to CGVD28 height (1)','Hybrid geoid derived from CGG2000 gravimetric geoid fitted to 1926 benchmarks with CGVD28 and NAD83(CSRS)v3 heights valid at epoch 1997.0. In 2019, file renamed from "HT2_0.byn"; no change to file contents. It is also used as CT to CGVD28(v2.0) height.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8239','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_1997.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000',0); INSERT INTO "usage" VALUES('EPSG','18315','grid_transformation','EPSG','9983','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9984','NAD83(CSRS)v2 to CGVD28 height (1)','Hybrid geoid model valid at epoch 1997.0. Provisional grid derived through NAD83(CSRS98) (= NAD83(CSRS)v2) used HT1 software. This grid is an update derived through NAD83(CSRS)v3. It is used in HT2 software. It is also used as CT to CGVD28(v2.0) height.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8235','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_1997.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 1997',0); INSERT INTO "usage" VALUES('EPSG','18354','grid_transformation','EPSG','9984','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9985','NAD83(CSRS)v4 to CGVD28 height (1)','Hybrid geoid model valid at epoch 2002.0. Derived at epoch 1997.0 through NAD83(CSRS)v3 and modified to include correction derived from the Canada velocity grid v7 for propagation of height between 1997 and 2002. Also used as CT to CGVD28(v2.0) height.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8244','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_2002v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2002',0); INSERT INTO "usage" VALUES('EPSG','18027','grid_transformation','EPSG','9985','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9986','NAD83(CSRS)v6 to CGVD28 height (1)','Hybrid geoid model valid at epoch 2010.0. Derived at epoch 1997.0 through NAD83(CSRS)v3 and modified to include correction derived from the Canada velocity grid v7 for propagation of height between 1997 and 2010. Also used as CT to CGVD28(v2.0) height.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8251','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',0); INSERT INTO "usage" VALUES('EPSG','18355','grid_transformation','EPSG','9986','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9987','NAD83(CSRS)v7 to CGVD28 height (1)','Hybrid geoid model valid at epoch 2010.0. Derived at epoch 1997.0 through NAD83(CSRS)v3 and modified to include correction derived from the Canada velocity grid v7 for propagation of height between 1997 and 2010. Also used as CT to CGVD28(v2.0) height.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8254','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',0); INSERT INTO "usage" VALUES('EPSG','18356','grid_transformation','EPSG','9987','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10000','RGF93 v1 to NGF-IGN69 height (1)','May be used for transformations from WGS 84 to NGF-IGN69 height. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4965','EPSG','5720',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0); INSERT INTO "usage" VALUES('EPSG','11001','grid_transformation','EPSG','10000','EPSG','1326','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10001','ETRS89 to NGF-IGN69 height (1)','Parameter values taken from RGF93 v1 to NGF-IGN69 height (1) (code 10000) assuming that RGF93 v1 is equivalent to ETRS89 within the accuracy of the transformation. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4937','EPSG','5720',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0); INSERT INTO "usage" VALUES('EPSG','11002','grid_transformation','EPSG','10001','EPSG','1326','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10002','RGF93 v1 to NGF-IGN78 height (1)','May be used for transformations from WGS 84 to NGF-IGN78 height. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4965','EPSG','5721',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a_corse.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra Cor',0); INSERT INTO "usage" VALUES('EPSG','11003','grid_transformation','EPSG','10002','EPSG','1327','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10003','ETRS89 to NGF-IGN78 height (1)','Parameter values taken from RGF93 v1 to NGF-IGN78 height (1) (code 10002) assuming that RGF93 v1 is equivalent to ETRS89 within the accuracy of the transformation. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4937','EPSG','5721',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a_corse.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra Cor',0); INSERT INTO "usage" VALUES('EPSG','11004','grid_transformation','EPSG','10003','EPSG','1327','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10004','RRAF 1991 to Martinique 1987 height (1)','May be used for transformations from WGS 84 to IGN 1987. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5756',998.0,'EPSG','8666','Geoid (height correction) model file','ggm00.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Mtq',1); INSERT INTO "usage" VALUES('EPSG','11005','grid_transformation','EPSG','10004','EPSG','1156','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10005','RRAF 1991 to Guadeloupe 1988 height (1)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5757',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp GT',1); INSERT INTO "usage" VALUES('EPSG','11006','grid_transformation','EPSG','10005','EPSG','2892','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10006','RRAF 1991 to Guadeloupe 1988 height (2)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5757',998.0,'EPSG','8666','Geoid (height correction) model file','ggg00_mg.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG',1); INSERT INTO "usage" VALUES('EPSG','11007','grid_transformation','EPSG','10006','EPSG','2894','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10007','RRAF 1991 to Guadeloupe 1988 height (3)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5757',998.0,'EPSG','8666','Geoid (height correction) model file','ggg00_ls.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp LSt',1); INSERT INTO "usage" VALUES('EPSG','11008','grid_transformation','EPSG','10007','EPSG','2895','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10008','RRAF 1991 to Guadeloupe 1988 height (4)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5757',998.0,'EPSG','8666','Geoid (height correction) model file','ggg00_ld.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp Des',1); INSERT INTO "usage" VALUES('EPSG','11009','grid_transformation','EPSG','10008','EPSG','2893','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10009','RRAF 1991 to Guadeloupe 1988 height (5)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5757',998.0,'EPSG','8666','Geoid (height correction) model file','ggg00_sb.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StB',1); INSERT INTO "usage" VALUES('EPSG','11010','grid_transformation','EPSG','10009','EPSG','2891','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10010','RRAF 1991 to Guadeloupe 1988 height (6)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5757',998.0,'EPSG','8666','Geoid (height correction) model file','ggg00_sm.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StM',1); INSERT INTO "usage" VALUES('EPSG','11011','grid_transformation','EPSG','10010','EPSG','2890','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10011','RGFG95 to NGG1977 height (1)','May be used for transformations from WGS 84 to NGG1977. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file. For reversible alternative to this transformation see RGFG95 to RGFG95 + NGG1977 height (1) (code 9630).','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4967','EPSG','5755',998.0,'EPSG','8666','Geoid (height correction) model file','ggguy00.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Guf',0); INSERT INTO "usage" VALUES('EPSG','14422','grid_transformation','EPSG','10011','EPSG','3146','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10012','RGR92 to Reunion 1989 height (1)','May be used for transformations from WGS 84 to IGN 1989. Accuracy at each 0.02 deg x 0.02 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4971','EPSG','5758',0.1,'EPSG','8666','Geoid (height correction) model file','ggr99.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Reu',0); INSERT INTO "usage" VALUES('EPSG','11013','grid_transformation','EPSG','10012','EPSG','3337','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10013','NAD83 to NAVD88 height (1)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NW',1); INSERT INTO "usage" VALUES('EPSG','11014','grid_transformation','EPSG','10013','EPSG','2977','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10014','NAD83 to NAVD88 height (2)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u02.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNW',1); INSERT INTO "usage" VALUES('EPSG','11015','grid_transformation','EPSG','10014','EPSG','2978','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10015','NAD83 to NAVD88 height (3)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u03.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNE',1); INSERT INTO "usage" VALUES('EPSG','11016','grid_transformation','EPSG','10015','EPSG','2979','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10016','NAD83 to NAVD88 height (4)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u04.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NE',1); INSERT INTO "usage" VALUES('EPSG','11017','grid_transformation','EPSG','10016','EPSG','2980','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10017','NAD83 to NAVD88 height (5)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u05.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SW',1); INSERT INTO "usage" VALUES('EPSG','11018','grid_transformation','EPSG','10017','EPSG','2973','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10018','NAD83 to NAVD88 height (6)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u06.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSW',1); INSERT INTO "usage" VALUES('EPSG','11019','grid_transformation','EPSG','10018','EPSG','2974','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10019','NAD83 to NAVD88 height (7)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u07.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSE',1); INSERT INTO "usage" VALUES('EPSG','11020','grid_transformation','EPSG','10019','EPSG','2975','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10020','NAD83 to NAVD88 height (8)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4269','EPSG','5703',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u08.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SE',1); INSERT INTO "usage" VALUES('EPSG','11021','grid_transformation','EPSG','10020','EPSG','2976','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10021','ETRS89 to ODN height (1)','','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5701',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Gbr',0); INSERT INTO "usage" VALUES('EPSG','11022','grid_transformation','EPSG','10021','EPSG','2792','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10022','ETRS89 to Belfast height (1)','May be used for transformations from WGS 84 to Belfast.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5732',0.03,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI',1); INSERT INTO "usage" VALUES('EPSG','11023','grid_transformation','EPSG','10022','EPSG','2530','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10023','ETRS89 to Douglas height (1)','May be used for transformations from WGS 84 to Douglas.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5750',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Man',0); INSERT INTO "usage" VALUES('EPSG','11024','grid_transformation','EPSG','10023','EPSG','2803','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10024','ETRS89 to Fair Isle height (1)','May be used for transformations from WGS 84 to Fair Isle.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5741',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Fair',0); INSERT INTO "usage" VALUES('EPSG','11025','grid_transformation','EPSG','10024','EPSG','2794','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10025','ETRS89 to Flannan Isles height (1)','May be used for transformations from WGS 84 to Flannan Isles.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5748',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Flan',0); INSERT INTO "usage" VALUES('EPSG','11026','grid_transformation','EPSG','10025','EPSG','2801','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10026','ETRS89 to Foula height (1)','May be used for transformations from WGS 84 to Foula.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5743',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Foula',0); INSERT INTO "usage" VALUES('EPSG','11027','grid_transformation','EPSG','10026','EPSG','2796','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10027','ETRS89 to Lerwick height (1)','May be used for transformations from WGS 84 to Lerwick.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5742',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Shet',0); INSERT INTO "usage" VALUES('EPSG','11028','grid_transformation','EPSG','10027','EPSG','2795','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10028','ETRS89 to Malin Head height (1)','May be used for transformations from WGS 84 to Malin Head.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5731',0.04,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire',1); INSERT INTO "usage" VALUES('EPSG','11029','grid_transformation','EPSG','10028','EPSG','1305','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10029','ETRS89 to ODN Orkney height (1)','','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5740',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Ork',0); INSERT INTO "usage" VALUES('EPSG','11030','grid_transformation','EPSG','10029','EPSG','2793','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10030','ETRS89 to North Rona height (1)','May be used for transformations from WGS 84 to North Rona.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5745',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Rona',0); INSERT INTO "usage" VALUES('EPSG','11031','grid_transformation','EPSG','10030','EPSG','2798','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10031','ETRS89 to St. Kilda height (1)','May be used for transformations from WGS 84 to St. Kilda.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5747',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Kilda',0); INSERT INTO "usage" VALUES('EPSG','11032','grid_transformation','EPSG','10031','EPSG','2800','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10032','ETRS89 to St. Marys height (1)','May be used for transformations from WGS 84 to St. Marys.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5749',0.0,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Scilly',0); INSERT INTO "usage" VALUES('EPSG','11033','grid_transformation','EPSG','10032','EPSG','2802','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10033','ETRS89 to Stornoway height (1)','May be used for transformations from WGS 84 to Stornoway.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5746',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Heb',0); INSERT INTO "usage" VALUES('EPSG','11034','grid_transformation','EPSG','10033','EPSG','2799','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10034','ETRS89 to Sule Skerry height (1)','May be used for transformations from WGS 84 to Sule Skerry.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5744',0.05,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Sule',0); INSERT INTO "usage" VALUES('EPSG','11035','grid_transformation','EPSG','10034','EPSG','2797','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10035','GDA94 to AHD height (1)','May be used for transformations from WGS 84 to AHD.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SC52_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SC52',0); INSERT INTO "usage" VALUES('EPSG','11036','grid_transformation','EPSG','10035','EPSG','2899','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10036','GDA94 to AHD height (2)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SC53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SC53',0); INSERT INTO "usage" VALUES('EPSG','11037','grid_transformation','EPSG','10036','EPSG','2900','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10037','GDA94 to AHD height (3)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SC54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SC54',0); INSERT INTO "usage" VALUES('EPSG','11038','grid_transformation','EPSG','10037','EPSG','2901','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10038','GDA94 to AHD height (4)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SD51_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SD51',0); INSERT INTO "usage" VALUES('EPSG','11039','grid_transformation','EPSG','10038','EPSG','2902','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10039','GDA94 to AHD height (5)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SD52_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SD52',0); INSERT INTO "usage" VALUES('EPSG','11040','grid_transformation','EPSG','10039','EPSG','2903','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10040','GDA94 to AHD height (6)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SD53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SD53',0); INSERT INTO "usage" VALUES('EPSG','11041','grid_transformation','EPSG','10040','EPSG','2904','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10041','GDA94 to AHD height (7)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SD54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SD54',0); INSERT INTO "usage" VALUES('EPSG','11042','grid_transformation','EPSG','10041','EPSG','2905','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10042','GDA94 to AHD height (8)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SD55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SD55',0); INSERT INTO "usage" VALUES('EPSG','11043','grid_transformation','EPSG','10042','EPSG','2906','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10043','GDA94 to AHD height (9)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SE50_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SE50',0); INSERT INTO "usage" VALUES('EPSG','11044','grid_transformation','EPSG','10043','EPSG','2907','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10044','GDA94 to AHD height (10)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SE51_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SE51',0); INSERT INTO "usage" VALUES('EPSG','11045','grid_transformation','EPSG','10044','EPSG','2908','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10045','GDA94 to AHD height (11)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SE52_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SE52',0); INSERT INTO "usage" VALUES('EPSG','11046','grid_transformation','EPSG','10045','EPSG','2909','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10046','GDA94 to AHD height (12)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SE53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SE53',0); INSERT INTO "usage" VALUES('EPSG','11047','grid_transformation','EPSG','10046','EPSG','2910','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10047','GDA94 to AHD height (13)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SE54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SE54',0); INSERT INTO "usage" VALUES('EPSG','11048','grid_transformation','EPSG','10047','EPSG','2911','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10048','GDA94 to AHD height (14)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SE55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SE55',0); INSERT INTO "usage" VALUES('EPSG','11049','grid_transformation','EPSG','10048','EPSG','2912','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10049','GDA94 to AHD height (15)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF49_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF49',0); INSERT INTO "usage" VALUES('EPSG','11050','grid_transformation','EPSG','10049','EPSG','2913','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10050','GDA94 to AHD height (16)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF50_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF50',0); INSERT INTO "usage" VALUES('EPSG','11051','grid_transformation','EPSG','10050','EPSG','2914','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10051','GDA94 to AHD height (17)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF51_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF51',0); INSERT INTO "usage" VALUES('EPSG','11052','grid_transformation','EPSG','10051','EPSG','2915','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10052','GDA94 to AHD height (18)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF52_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF52',0); INSERT INTO "usage" VALUES('EPSG','11053','grid_transformation','EPSG','10052','EPSG','2916','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10053','GDA94 to AHD height (19)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF53',0); INSERT INTO "usage" VALUES('EPSG','11054','grid_transformation','EPSG','10053','EPSG','2917','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10054','GDA94 to AHD height (20)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF54',0); INSERT INTO "usage" VALUES('EPSG','11055','grid_transformation','EPSG','10054','EPSG','2918','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10055','GDA94 to AHD height (21)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF55',0); INSERT INTO "usage" VALUES('EPSG','11056','grid_transformation','EPSG','10055','EPSG','2919','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10056','GDA94 to AHD height (22)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SF56_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SF56',0); INSERT INTO "usage" VALUES('EPSG','11057','grid_transformation','EPSG','10056','EPSG','2920','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10057','GDA94 to AHD height (23)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG49_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG49',0); INSERT INTO "usage" VALUES('EPSG','11058','grid_transformation','EPSG','10057','EPSG','2921','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10058','GDA94 to AHD height (24)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG50_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG50',0); INSERT INTO "usage" VALUES('EPSG','11059','grid_transformation','EPSG','10058','EPSG','2922','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10059','GDA94 to AHD height (25)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG51_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG51',0); INSERT INTO "usage" VALUES('EPSG','11060','grid_transformation','EPSG','10059','EPSG','2923','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10060','GDA94 to AHD height (26)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG52_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG52',0); INSERT INTO "usage" VALUES('EPSG','11061','grid_transformation','EPSG','10060','EPSG','2924','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10061','GDA94 to AHD height (27)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG53',0); INSERT INTO "usage" VALUES('EPSG','11062','grid_transformation','EPSG','10061','EPSG','2925','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10062','GDA94 to AHD height (28)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG54',0); INSERT INTO "usage" VALUES('EPSG','11063','grid_transformation','EPSG','10062','EPSG','2926','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10063','GDA94 to AHD height (29)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG55',0); INSERT INTO "usage" VALUES('EPSG','11064','grid_transformation','EPSG','10063','EPSG','2927','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10064','GDA94 to AHD height (30)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SG56_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SG56',0); INSERT INTO "usage" VALUES('EPSG','11065','grid_transformation','EPSG','10064','EPSG','2928','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10065','GDA94 to AHD height (31)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH49_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH49',1); INSERT INTO "usage" VALUES('EPSG','11066','grid_transformation','EPSG','10065','EPSG','2929','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10066','GDA94 to AHD height (32)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH50_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH50',0); INSERT INTO "usage" VALUES('EPSG','11067','grid_transformation','EPSG','10066','EPSG','2930','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10067','GDA94 to AHD height (33)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH51_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH51',0); INSERT INTO "usage" VALUES('EPSG','11068','grid_transformation','EPSG','10067','EPSG','2931','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10068','GDA94 to AHD height (34)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH52_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH52',0); INSERT INTO "usage" VALUES('EPSG','11069','grid_transformation','EPSG','10068','EPSG','2932','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10069','GDA94 to AHD height (35)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH53',0); INSERT INTO "usage" VALUES('EPSG','11070','grid_transformation','EPSG','10069','EPSG','2933','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10070','GDA94 to AHD height (36)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH54',0); INSERT INTO "usage" VALUES('EPSG','11071','grid_transformation','EPSG','10070','EPSG','2934','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10071','GDA94 to AHD height (37)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH55',0); INSERT INTO "usage" VALUES('EPSG','11072','grid_transformation','EPSG','10071','EPSG','2935','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10072','GDA94 to AHD height (38)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SH56_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SH56',0); INSERT INTO "usage" VALUES('EPSG','11073','grid_transformation','EPSG','10072','EPSG','2936','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10073','GDA94 to AHD height (39)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SI50_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SI50',0); INSERT INTO "usage" VALUES('EPSG','11074','grid_transformation','EPSG','10073','EPSG','2937','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10074','GDA94 to AHD height (40)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SI51_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SI51',0); INSERT INTO "usage" VALUES('EPSG','11075','grid_transformation','EPSG','10074','EPSG','2938','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10075','GDA94 to AHD height (41)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SI53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SI53',0); INSERT INTO "usage" VALUES('EPSG','11076','grid_transformation','EPSG','10075','EPSG','2939','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10076','GDA94 to AHD height (42)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SI54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SI54',0); INSERT INTO "usage" VALUES('EPSG','11077','grid_transformation','EPSG','10076','EPSG','2940','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10077','GDA94 to AHD height (43)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SI55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SI55',0); INSERT INTO "usage" VALUES('EPSG','11078','grid_transformation','EPSG','10077','EPSG','2941','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10078','GDA94 to AHD height (44)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SI56_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SI56',0); INSERT INTO "usage" VALUES('EPSG','11079','grid_transformation','EPSG','10078','EPSG','2942','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10079','GDA94 to AHD height (45)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SJ53_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SJ53',0); INSERT INTO "usage" VALUES('EPSG','11080','grid_transformation','EPSG','10079','EPSG','2943','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10080','GDA94 to AHD height (46)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SJ54_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SJ54',0); INSERT INTO "usage" VALUES('EPSG','11081','grid_transformation','EPSG','10080','EPSG','2944','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10081','GDA94 to AHD height (47)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SJ55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SJ55',0); INSERT INTO "usage" VALUES('EPSG','11082','grid_transformation','EPSG','10081','EPSG','2945','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10082','GDA94 to AHD height (48)','May be used for transformations from WGS 84 to AHD. Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5711',0.4,'EPSG','8666','Geoid (height correction) model file','SJ56_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SJ56',0); INSERT INTO "usage" VALUES('EPSG','11083','grid_transformation','EPSG','10082','EPSG','2946','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10083','GDA94 to AHD (Tasmania) height (1)','May be used for transformations from WGS 84 to AHD (Tasmania). Uses AusGeoid98 model.','EPSG','9662','Geographic3D to GravityRelatedHeight (AUSGeoid98)','EPSG','4939','EPSG','5712',0.4,'EPSG','8666','Geoid (height correction) model file','SK55_DAT.htm',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus SK55',0); INSERT INTO "usage" VALUES('EPSG','11084','grid_transformation','EPSG','10083','EPSG','2947','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10084','WGS 84 to EGM96 height (1)','Replaces WGS 84 to EGM84 height (1) (CT 15781). Replaced by WGS 84 to EGM2008 height (1) and (2) (CTs 3858-59). For reversible alternative see WGS 84 to WGS 84 + EGM96 height (1) (CT 9708). An executable using spherical harmonics is also available.','EPSG','9661','Geographic3D to GravityRelatedHeight (EGM)','EPSG','4979','EPSG','5773',1.0,'EPSG','8666','Geoid (height correction) model file','WW15MGH.GRD',NULL,NULL,NULL,NULL,NULL,NULL,'NGA-World',0); INSERT INTO "usage" VALUES('EPSG','11085','grid_transformation','EPSG','10084','EPSG','1262','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10106','ETRS89 to SVD2006 height (1)','For reversible alternative see ETRS89 to ETRS89 + SVD2006 height (1) (code 10107).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','20000',1.0,'EPSG','8666','Geoid (height correction) model file','arcgp-2006-sk.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NMA-Sjm SV 2006',0); INSERT INTO "usage" VALUES('EPSG','17961','grid_transformation','EPSG','10106','EPSG','4058','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10107','ETRS89 to ETRS89 + SVD2006 height (1)','Reversible alternative to ETRS89 to SVD2006 height (1) (code 10106).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','20001',1.0,'EPSG','8666','Geoid (height correction) model file','arcgp-2006-sk.bin',NULL,NULL,NULL,NULL,'EPSG','4258','NMA-Sjm SV 2006',0); INSERT INTO "usage" VALUES('EPSG','17960','grid_transformation','EPSG','10107','EPSG','4058','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10108','ETRS89 to MWC18-IRF (1)','In conjunction with the MWC18-TM map projection (code 10127) applied to MWC18-IRF (code 20033), emulates the MWC18 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines MWC18-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','20033',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-MWC18-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr MWC18 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18334','grid_transformation','EPSG','10108','EPSG','4666','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10109','NAD83(CSRS)v7 to CGVD2013a(2010) height (1)','Applies same geoid model as NAD83(CSRS)v6 to CGVD2013a(2010) height (1), CT code 9247.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8254','EPSG','9245',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Can CGG2013a 2010',0); INSERT INTO "usage" VALUES('EPSG','18316','grid_transformation','EPSG','10109','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10110','NAD83(CSRS)v4 to CGVD2013a(2002) height (1)','Defines CGVD2013a(2002) height. For reversible alternative see NAD83(CSRS)v4 to NAD83(CSRS)v4 + CGVD2013a(2002) height (1) (code 10128).','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8244','EPSG','20034',0.05,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Can CGG2013a 2002',0); INSERT INTO "usage" VALUES('EPSG','18349','grid_transformation','EPSG','10110','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10111','NAD83(CSRS)v3 to CGVD2013a(1997) height (1)','Defines CGVD2013a(1997) height. For reversible alternative see NAD83(CSRS)v3 to NAD83(CSRS)v3 + CGVD2013a(1997) height (1) (code 10129).','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8239','EPSG','20035',0.05,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Can CGG2013a 1997',0); INSERT INTO "usage" VALUES('EPSG','18281','grid_transformation','EPSG','10111','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10112','NAD83(CSRS)v2 to CGVD2013a(1997) height (1)','Applies same geoid model as NAD83(CSRS)v3 to CGVD2013a(1997) height (1), code 10111.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8235','EPSG','20035',0.05,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Can CGG2013a',0); INSERT INTO "usage" VALUES('EPSG','18318','grid_transformation','EPSG','10112','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10113','CGVD28 height to CGVD2013a(1997) height (1)','Equivalent to HT2_1997 hybrid geoid model minus CGG2013a geoid model (i.e. CT code 9983 minus CT 10111 = CT 9984 minus CT 10112). Specifies NAD83(CSRS)v3 as interpolation CRS, but NAD83(CSRS)v2 (code 8237) may equally be used.','EPSG','1112','Vertical Offset by Grid Interpolation (NRCan byn)','EPSG','5713','EPSG','20035',0.05,'EPSG','8732','Vertical offset file','HT2_1997_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8240','NR-Can HT2 1997',1); INSERT INTO "usage" VALUES('EPSG','18324','grid_transformation','EPSG','10113','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10114','CGVD28 height to CGVD2013a(2002) height (1)','Equivalent to HT2_2002v70 hybrid geoid model minus CGG2013a geoid model (i.e. CT code 9985 minus CT 10110).','EPSG','1112','Vertical Offset by Grid Interpolation (NRCan byn)','EPSG','5713','EPSG','20034',0.05,'EPSG','8732','Vertical offset file','HT2_2002v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8246','NR-Can HT2 2002',1); INSERT INTO "usage" VALUES('EPSG','18322','grid_transformation','EPSG','10114','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10115','CGVD28 height to CGVD2013a(2010) height (1)','Equivalent to HT2_2010v70 hybrid geoid model minus CGG2013a geoid model (i.e. CT code 9986 minus CT 9247 = CT 9987 minus CT 10109). Specifies NAD83(CSRS)v6 as interpolation CRS, but NAD83(CSRS)v7 (code 8255) may equally be used.','EPSG','1112','Vertical Offset by Grid Interpolation (NRCan byn)','EPSG','5713','EPSG','9245',0.05,'EPSG','8732','Vertical offset file','HT2_2010v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8252','NR-Can HT2 2010',1); INSERT INTO "usage" VALUES('EPSG','18323','grid_transformation','EPSG','10115','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10116','CGVD2013a(2010) height to CGVD2013a(2002) height (1)','Interpolation CRS = NAD83(CSRS) 2010, i.e. may be any one of NAD83(CSRS)v6, v7 or v8 (CRS codes 8252, 8255 or 10414). Equivalent to CGVD28 to CGVD2013a(2002) minus CGVD28 to CGVD2013a(2010) (i.e. CT code 10114 minus CT 10115).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','9245','EPSG','20034',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','18325','grid_transformation','EPSG','10116','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10117','CGVD2013a(2010) height to CGVD2013a(1997) height (1)','Interpolation CRS = NAD83(CSRS) 2010, i.e. may be any one of NAD83(CSRS)v6, v7 or v8 (CRS codes 8252, 8255 or 10414). Equivalent to CGVD28 to CGVD2013a(1997) minus CGVD28 to CGVD2013a(2010) (i.e. CT code 10113 minus CT 10115).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','9245','EPSG','20035',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','18352','grid_transformation','EPSG','10117','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10118','CGVD2013a(2002) height to CGVD2013a(1997) height (1)','Equivalent to CGVD28 to CGVD2013a(1997) minus CGVD28 to CGVD2013a(2002) (i.e. CT code 10113 minus CT 10114).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20034','EPSG','20035',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','18328','grid_transformation','EPSG','10118','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10119','NAD83(CSRS)v4 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18201','grid_transformation','EPSG','10119','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10120','NAD83(CSRS)v4 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18210','grid_transformation','EPSG','10120','EPSG','1061','EPSG','1274'); INSERT INTO "grid_transformation" VALUES('EPSG','10121','NAD83(CSRS)v6 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8251','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18203','grid_transformation','EPSG','10121','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10122','NAD83(CSRS)v6 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8251','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18351','grid_transformation','EPSG','10122','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10123','NAD83(CSRS)v6 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8251','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18259','grid_transformation','EPSG','10123','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10124','NAD83(CSRS)v7 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8254','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18206','grid_transformation','EPSG','10124','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10125','NAD83(CSRS)v7 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8254','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18207','grid_transformation','EPSG','10125','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10126','NAD83(CSRS)v7 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8254','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18350','grid_transformation','EPSG','10126','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10128','NAD83(CSRS)v4 to NAD83(CSRS)v4 + CGVD2013a(2002) height (1)','Reversible alternative to NAD83(CSRS)v4 to CGVD2013a(2002) height (1) (code 10110).','EPSG','1090','Geog3D to Geog2D+GravityRelatedHeight (NRCan byn)','EPSG','8244','EPSG','20037',0.05,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,'EPSG','8246','NR-Can CGG2013a 2002',0); INSERT INTO "usage" VALUES('EPSG','18287','grid_transformation','EPSG','10128','EPSG','1061','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10129','NAD83(CSRS)v3 to NAD83(CSRS)v3 + CGVD2013a(1997) height (1)','Reversible alternative to NAD83(CSRS)v3 to CGVD2013a(1997) height (1) (code 10111).','EPSG','1090','Geog3D to Geog2D+GravityRelatedHeight (NRCan byn)','EPSG','8239','EPSG','20038',0.05,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,'EPSG','8240','NR-Can CGG2013a 1997',0); INSERT INTO "usage" VALUES('EPSG','18285','grid_transformation','EPSG','10129','EPSG','1061','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10130','ETRS89 to CD Norway depth (2)','Replaces model "CD Norway 2021" (also referred to as model "CD Norway 2021a") (code 9884). Replaced by model "CD Norway 2023a" (code 10504). For reversible alternative to this transformation see ETRS89 to ETRS89 + CD Norway depth (2) (code 10133).','EPSG','1109','Geographic3D to Depth (Gravsoft)','EPSG','4937','EPSG','9672',0.5,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2021b.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2021b',0); INSERT INTO "usage" VALUES('EPSG','18348','grid_transformation','EPSG','10130','EPSG','4656','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10133','ETRS89 to ETRS89 + CD Norway depth (2)','Reversible alternative to ETRS89 to CD Norway depth (2) (code 10130). Replaces ETRS89 to ETRS89 + CD Norway depth (1) (code 9885). Replaced by ETRS89 to ETRS89 + CD Norway depth (3) (code 10505).','EPSG','1110','Geog3D to Geog2D+Depth (Gravsoft)','EPSG','4937','EPSG','9883',0.5,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2021b.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2021b',0); INSERT INTO "usage" VALUES('EPSG','18347','grid_transformation','EPSG','10133','EPSG','4656','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10144','SRGI2013 to INAGeoid2020 v2 height (1)','Defines INAGeoid2020 v2 reference surface and as such is considered to be errorless. Internal accuracy is between 0.05 and 0.3m on the large islands of Indonesia. Replaces INAGeoid2020 v1 (CT code 9305).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','9469','EPSG','20036',0.0,'EPSG','8666','Geoid (height correction) model file','INAGEOID2020v2.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'BIG-Idn INAGeoid20 v2',0); INSERT INTO "usage" VALUES('EPSG','18445','grid_transformation','EPSG','10144','EPSG','1122','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10145','SRGI2013 to SRGI2013 + INAGeoid2020 v2 height (1)','Reversible alternative to SRGI2013 to INAGeoid2020 v2 height (1) (code 10144).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','9469','EPSG','20043',0.0,'EPSG','8666','Geoid (height correction) model file','INAGEOID2020v2.gtx',NULL,NULL,NULL,NULL,'EPSG','9470','BIG-Idn INAGeoid20 v2',0); INSERT INTO "usage" VALUES('EPSG','18451','grid_transformation','EPSG','10145','EPSG','1122','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10152','ETRS89 to ETRS89 + MSL UK & Ireland VORF08 depth (1)','Reversible alternative to ETRS89 to MSL UK & Ireland VORF08 depth (1) (code 10154). VORF08 usually delivered in tiles covering 2° by 2° or less. Transformation accuracy at 2-sigma is 0.20 metres (inshore) and 0.30 metres (offshore).','EPSG','1115','Geog3D to Geog2D+Depth (txt)','EPSG','4937','EPSG','10156',0.3,'EPSG','8666','Geoid (height correction) model file','VORF-UK08_ETRF_to_MSL.vrf',NULL,NULL,NULL,NULL,'EPSG','4258','UKHO-VORF08',0); INSERT INTO "usage" VALUES('EPSG','18608','grid_transformation','EPSG','10152','EPSG','4668','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10153','ETRS89 to ETRS89 + CD UK & Ireland VORF08 depth (1)','Reversible alternative to ETRS89 to CD UK & Ireland VORF08 depth (1) (code 10155). VORF08 usually delivered in tiles covering 2° by 2° or less. Transformation accuracy at 2-sigma is 0.20 metres (inshore) and 0.30 metres (offshore).','EPSG','1115','Geog3D to Geog2D+Depth (txt)','EPSG','4937','EPSG','10157',0.3,'EPSG','8666','Geoid (height correction) model file','VORF-UK08_ETRF_to_CD.vrf',NULL,NULL,NULL,NULL,'EPSG','4258','UKHO-VORF08',0); INSERT INTO "usage" VALUES('EPSG','18609','grid_transformation','EPSG','10153','EPSG','4668','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10154','ETRS89 to MSL UK & Ireland VORF08 depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + MSL UK & Ireland VORF08 depth (1) (code 10152).','EPSG','1116','Geographic3D to Depth (txt)','EPSG','4937','EPSG','10150',0.3,'EPSG','8666','Geoid (height correction) model file','VORF-UK08_ETRF_to_MSL.vrf',NULL,NULL,NULL,NULL,NULL,NULL,'UKHO-VORF08',0); INSERT INTO "usage" VALUES('EPSG','18587','grid_transformation','EPSG','10154','EPSG','4668','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10155','ETRS89 to CD UK & Ireland VORF08 depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + CD UK & Ireland VORF08 depth (1) (code 10153).','EPSG','1116','Geographic3D to Depth (txt)','EPSG','4937','EPSG','10151',0.3,'EPSG','8666','Geoid (height correction) model file','VORF-UK08_ETRF_to_CD.vrf',NULL,NULL,NULL,NULL,NULL,NULL,'UKHO-VORF08',0); INSERT INTO "usage" VALUES('EPSG','18588','grid_transformation','EPSG','10155','EPSG','4668','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10161','ETRS89 to S34J-IRF (1)','In conjunction with the S34-reconstruction map projection (code 10159) applied to S34J-IRF (code 10158), enables transformation of coordinates between the historic CRS S34J and ETRS89. File is also available in GeoTIFF format (s34j_2022.tif).','EPSG','9615','NTv2','EPSG','4258','EPSG','10158',0.03,'EPSG','8656','Latitude and longitude difference file','s34j_2022.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Den Jy 2022',0); INSERT INTO "usage" VALUES('EPSG','19699','grid_transformation','EPSG','10161','EPSG','2531','EPSG','1203'); INSERT INTO "grid_transformation" VALUES('EPSG','10181','ETRS89 to DoPw22-IRF (1)','In conjunction with DoPw22-TM map projection (code 10182) applied to DoPw22-IRF (code 10175), emulates the DoPw22 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines DoPw22-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10175',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-DoPw22-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr DoPw22 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18852','grid_transformation','EPSG','10181','EPSG','4686','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10186','ETRS89 to ShAb07-IRF (1)','In conjunction with the ShAb07-TM map projection (code 10187) applied to ShAb07-IRF (code 10185), emulates the ShAb07 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines ShAb07-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10185',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-ShAb07-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr ShAb07 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18663','grid_transformation','EPSG','10186','EPSG','4687','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10192','ETRS89 to CNH22-IRF (1)','In conjunction with the CNH22-LCC map projection (code 10193) applied to CNH22-IRF (code 10191), emulates the CNH22 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines CNH22-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10191',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-CNH22-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr CNH22 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18765','grid_transformation','EPSG','10192','EPSG','4677','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10197','ETRS89 to CWS13-IRF (1)','In conjunction with the CWS13-TM map projection (code 10198) applied to CWS13-IRF (code 10196), emulates the CWS13 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines CWS13-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10196',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-CWS13-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr CWS13 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18703','grid_transformation','EPSG','10197','EPSG','4678','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10205','ETRS89 to DIBA15-IRF (1)','In conjunction with the DIBA15-TM map projection (code 10206) applied to DIBA15-IRF (code 10204), emulates the DIBA15 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines DIBA15-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10204',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-DIBA15-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr DIBA15 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18769','grid_transformation','EPSG','10205','EPSG','4681','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10210','ETRS89 to GWPBS22-IRF (1)','In conjunction with the GW22-LCC map projection (code 10211) applied to GWPBS22-IRF (code 10209), emulates the GWPBS22 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines GWPBS22-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10209',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-GWPBS22-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr GWPBS22 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18795','grid_transformation','EPSG','10210','EPSG','4685','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10215','ETRS89 to GWWAB22-IRF (1)','In conjunction with the GW22-LCC map projection (code 10211) applied to GWWAB22-IRF (code 10214), emulates the GWWAB22 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines GWWAB22-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10214',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-GWWAB22-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr GWWAB22 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18799','grid_transformation','EPSG','10215','EPSG','4684','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10220','ETRS89 to GWWWA22-IRF (1)','In conjunction with the GW22-LCC map projection (code 10211) applied to GWWWA22-IRF (code 10219), emulates the GWWWA22 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines GWWWA22-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10219',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-GWWWA22-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr GWWWA22 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18801','grid_transformation','EPSG','10220','EPSG','4683','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10225','ETRS89 to MALS09-IRF (1)','In conjunction with MALS09-TM map projection (code 10226) applied to MALS09-IRF (code 10224), emulates the MALS09 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines MALS09-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10224',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-MALS09-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr MALS09 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18742','grid_transformation','EPSG','10225','EPSG','4682','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10230','ETRS89 to OxWo08-IRF (1)','In conjunction with the OxWo08-TM map projection (code 10234) applied to OxWo08-IRF (code 10229), emulates the OxWo08 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines OxWo08-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10229',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-OxWo08-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr OxWo08 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18785','grid_transformation','EPSG','10230','EPSG','4680','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10238','ETRS89 to SYC20-IRF (1)','In conjunction with the SYC20-TM map projection (code 10239) applied to SYC20-IRF (code 10237), emulates the SYC20 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines SYC20-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10237',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-SYC20-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr SYC20 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','18758','grid_transformation','EPSG','10238','EPSG','4679','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10247','Slovenia 1996 to SVS2010 height (1)','Hybrid geoid fitted to 66 levelling benchmarks. File also available in Gravsoft format (SLOVRP2016-Koper.gri). For reversible alternative to this transformation see Slovenia 1996 to Slovenia 1996 + SVS2010 height (1) (CT code 10248).','EPSG','1117','Geographic3D to GravityRelatedHeight (ISG)','EPSG','4883','EPSG','8690',0.1,'EPSG','8666','Geoid (height correction) model file','https://isgeoid.polimi.it/Geoid/Europe/Slovenia/public/Slovenia_2016_SLO_VRP2016_Koper_hybrQ_20221122.isg',NULL,NULL,NULL,NULL,NULL,NULL,'SMA-Svn VRP2016/Koper ',0); INSERT INTO "usage" VALUES('EPSG','18848','grid_transformation','EPSG','10247','EPSG','3307','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10248','Slovenia 1996 to Slovenia 1996 + SVS2010 height (1)','Reversible alternative to Slovenia 1996 to SVS2010 height (1) (CT code 10247). Hybrid geoid fitted at 66 levelling benchmarks. File is also available in Gravsoft format (SLOVRP2016-Koper.gri).','EPSG','1118','Geog3D to Geog2D+GravityRelatedHeight (ISG)','EPSG','4883','EPSG','10245',0.1,'EPSG','8666','Geoid (height correction) model file','https://isgeoid.polimi.it/Geoid/Europe/Slovenia/public/Slovenia_2016_SLO_VRP2016_Koper_hybrQ_20221122.isg',NULL,NULL,NULL,NULL,'EPSG','4765','SMA-Svn VRP2016/Koper',0); INSERT INTO "usage" VALUES('EPSG','18850','grid_transformation','EPSG','10248','EPSG','3307','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10251','ETRS89 to S34S-IRF (1)','In conjunction with the S34-reconstruction map projection (code 10159) applied to S34S-IRF (code 10249), enables transformation of coordinates between the historic CRS S34S and ETRS89. File is also available in GeoTIFF format (s34s_2022.tif).','EPSG','9615','NTv2','EPSG','4258','EPSG','10249',0.03,'EPSG','8656','Latitude and longitude difference file','s34s_2022.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Den Sj 2022',0); INSERT INTO "usage" VALUES('EPSG','19700','grid_transformation','EPSG','10251','EPSG','2532','EPSG','1203'); INSERT INTO "grid_transformation" VALUES('EPSG','10255','ETRS89 to S45B-IRF (1)','In conjunction with the S45B-reconstruction map projection (code 10253) applied to S45B-IRF (code 10252), enables transformation of coordinates between the historic CRS S45 and ETRS89. File is also available in GeoTIFF format (s45b_2022.tif).','EPSG','9615','NTv2','EPSG','4258','EPSG','10252',0.03,'EPSG','8656','Latitude and longitude difference file','s45b_2022.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Den 2022',0); INSERT INTO "usage" VALUES('EPSG','19701','grid_transformation','EPSG','10255','EPSG','2533','EPSG','1203'); INSERT INTO "grid_transformation" VALUES('EPSG','10259','ETRS89 to GS-IRF (1)','In conjunction with the GS LCC map projection (code 10257) applied to GS-IRF (code 10256), enables transformation of coordinates between the historic Generalstabens System and ETRS89. File is also available in GeoTIFF format (gs_2022.tif).','EPSG','9615','NTv2','EPSG','4258','EPSG','10256',0.5,'EPSG','8656','Latitude and longitude difference file','gs_2022.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Den 2022',0); INSERT INTO "usage" VALUES('EPSG','19708','grid_transformation','EPSG','10259','EPSG','4575','EPSG','1203'); INSERT INTO "grid_transformation" VALUES('EPSG','10263','ETRS89 to GSB-IRF (1)','In conjunction with the GSB-reconstruction projection (code 10261) applied to GSB-IRF (code 10260), enables transformation of coordinates between the historic Generalstaben in Bornholm and ETRS89. File is also available in GeoTIFF format (gsb_2022.tif).','EPSG','9615','NTv2','EPSG','4258','EPSG','10260',0.5,'EPSG','8656','Latitude and longitude difference file','gsb_2022.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Den 2022',0); INSERT INTO "usage" VALUES('EPSG','19771','grid_transformation','EPSG','10263','EPSG','2533','EPSG','1203'); INSERT INTO "grid_transformation" VALUES('EPSG','10267','ETRS89 to KK-IRF (1)','In conjunction with the GS LCC map projection (code 10257) applied to KK-IRF (code 10265), enables transformation of coordinates between the historic Copenhagen Commune system and ETRS89. File is also available in GeoTIFF format (kk_2022.tif).','EPSG','9615','NTv2','EPSG','4258','EPSG','10265',0.5,'EPSG','8656','Latitude and longitude difference file','kk_2022.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Den 2022',0); INSERT INTO "usage" VALUES('EPSG','19711','grid_transformation','EPSG','10267','EPSG','4693','EPSG','1203'); INSERT INTO "grid_transformation" VALUES('EPSG','10271','ETRS89 to Ostenfeld-IRF (1)','In conjunction with the Ostenfeld-reconstruction map projection (code 10269) applied to OS-IRF (code 10268), enables transformation of coordinates between the historic Ostenfeld CRS and ETRS89. File is also available in GeoTIFF format (os_2022.tif).','EPSG','9615','NTv2','EPSG','4258','EPSG','10268',1.0,'EPSG','8656','Latitude and longitude difference file','os_2022.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Den 2022',0); INSERT INTO "usage" VALUES('EPSG','19705','grid_transformation','EPSG','10271','EPSG','4694','EPSG','1028'); INSERT INTO "grid_transformation" VALUES('EPSG','10273','ETRS89 to SMITB20-IRF (1)','In conjunction with the SMITB20-TM map projection (code 10274) applied to SMITB20-IRF (code 10272), emulates the SMITB20 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines SMITB20-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10272',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-SMITB20-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr SMITB20 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','19176','grid_transformation','EPSG','10273','EPSG','4688','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10278','ETRS89 to RBEPP12-IRF (1)','In conjunction with the RBEPP12-LCC map projection (code 10279) applied to RBEPP12-IRF (code 10277), emulates the RBEPP12 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines RBEPP12-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','10277',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-RBEPP12-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr RBEPP12 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','19182','grid_transformation','EPSG','10278','EPSG','4689','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10294','ETRS89/DREF91/2016 to DHHN2016 height (1)','Accuracy approx. 1 cm in the lowlands, approx. 2 cm in the high mountains and 2 - 6 cm offshore. For reversible alternative to this transformation see ETRS89/DREF91/2016 to ETRS89/DREF91/2016 + DHHN2016 height (1) (code 10295).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','10283','EPSG','7837',0.02,'EPSG','8666','Geoid (height correction) model file','GCG2016.txt',NULL,NULL,NULL,NULL,NULL,NULL,'AdV-Deu 2016',0); INSERT INTO "usage" VALUES('EPSG','19347','grid_transformation','EPSG','10294','EPSG','1103','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10295','ETRS89/DREF91/2016 to ETRS89/DREF91/2016 + DHHN2016 height (1)','Reversible alternative to ETRS89/DREF91/2016 to DHHN2016 height (1) (code 10294). Accuracy approx. 1 cm in the lowlands, approx. 2 cm in the high mountains and 2 - 6 cm offshore.','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','10283','EPSG','10293',0.02,'EPSG','8666','Geoid (height correction) model file','GCG2016.txt',NULL,NULL,NULL,NULL,'EPSG','10284','AdV-Deu 2016',0); INSERT INTO "usage" VALUES('EPSG','19564','grid_transformation','EPSG','10295','EPSG','3339','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10319','RGNC15 to NGNC08 height (1)','Geoid model RANC15 realizes NGNC08 height (CRS code 9351) to a precision of 2-5cm. Replaces RANC08. For reversible alternative to this transformation see RGNC15 (lon-lat) to RGNC15 (lon-lat) + NGNC08 height (1) (code 10320).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','10311','EPSG','9351',0.03,'EPSG','8666','Geoid (height correction) model file','RANC15.tac',NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl RANC15',0); INSERT INTO "usage" VALUES('EPSG','19635','grid_transformation','EPSG','10319','EPSG','3430','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10320','RGNC15 to RGNC15 + NGNC08 height (1)','Reversible alternative to RGNC15 to NGNC08 height (1) (code 10319).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','10311','EPSG','10318',0.03,'EPSG','8666','Geoid (height correction) model file','RANC15.tac',NULL,NULL,NULL,NULL,'EPSG','10312','BGN-Ncl RANC15',0); INSERT INTO "usage" VALUES('EPSG','19636','grid_transformation','EPSG','10320','EPSG','3430','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10322','RGNC91-93 to RGNC15 (2)','Derived at 67 GNSS stations. General accuracy 1 to 1.5cm in planimetry and 2cm in height at epoch 2015.0.','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','10307','EPSG','10312',0.03,'EPSG','8727','Geocentric translation file','gr3dncl08.tac',NULL,NULL,NULL,NULL,'EPSG','10310','BGN-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','19654','grid_transformation','EPSG','10322','EPSG','3430','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','10347','ETRF2000-PL to EVRF2007-PL height (2)','Replaces 2011 model (CT code 9719) from 2022-04-04. For reversible alternative to this transformation see ETRF2000-PL to ETRF2000-PL + EVRF2007-PL height (2) (code 10348).','EPSG','1099','Geographic3D to GravityRelatedHeight (PL txt)','EPSG','9701','EPSG','9651',0.02,'EPSG','8666','Geoid (height correction) model file','Model_quasi-geoidy-PL-geoid2021-PL-EVRF2007-NH.txt',NULL,NULL,NULL,NULL,NULL,NULL,'GUGiK-Pol geoid21 EVRF07',0); INSERT INTO "usage" VALUES('EPSG','19905','grid_transformation','EPSG','10347','EPSG','3293','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10348','ETRF2000-PL to ETRF2000-PL + EVRF2007-PL height (2)','Reversible alternative to ETRF2000-PL to EVRF2007-PL height (2) (code 10347). Replaces 2011 model (CT code 9720) from 2022-04-04.','EPSG','1100','Geog3D to Geog2D+GravityRelatedHeight (PL txt)','EPSG','9701','EPSG','9657',0.02,'EPSG','8666','Geoid (height correction) model file','Model_quasi-geoidy-PL-geoid2021-PL-EVRF2007-NH.txt',NULL,NULL,NULL,NULL,'EPSG','9702','GUGiK-Pol geoid21 EVRF07',0); INSERT INTO "usage" VALUES('EPSG','19907','grid_transformation','EPSG','10348','EPSG','3293','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10350','ETRS89 to LAT NL depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + LAT NL depth (1) (code 10351).','EPSG','1121','Geographic3D to Depth (gtx)','EPSG','4937','EPSG','9287',0.1,'EPSG','8666','Geoid (height correction) model file','nllat2018.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','19928','grid_transformation','EPSG','10350','EPSG','4742','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10351','ETRS89 to ETRS89 + LAT NL depth (1)','Reversible alternative to ETRS89 to LAT NL depth (1) (code 10350).','EPSG','1122','Geog3D to Geog2D+Depth (gtx)','EPSG','4937','EPSG','9289',0.1,'EPSG','8666','Geoid (height correction) model file','nllat2018.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','NSGI-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','19929','grid_transformation','EPSG','10351','EPSG','4742','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10358','ETRS89 to Formentera height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Formentera height (1) (code 10359).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','10352',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','19930','grid_transformation','EPSG','10358','EPSG','4739','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10359','ETRS89 to ETRS89 + Formentera height (1)','Reversible alternative to ETRS89 to Formentera height (1) (code 10358).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','10355',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','19918','grid_transformation','EPSG','10359','EPSG','4739','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10360','ETRS89 to Alboran height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Alboran height (1) (code 10361).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','10353',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','20154','grid_transformation','EPSG','10360','EPSG','4741','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10361','ETRS89 to ETRS89 + Alboran height (1)','Reversible alternative to ETRS89 to Alboran height (1) (code 10360).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','10356',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','19920','grid_transformation','EPSG','10361','EPSG','4741','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10362','ETRS89 to Melilla height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Melilla height (1) (code 10363).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','10354',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','20155','grid_transformation','EPSG','10362','EPSG','4740','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10363','ETRS89 to ETRS89 + Melilla height (1)','Reversible alternative to ETRS89 to Melilla height (1) (code 10362).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','4937','EPSG','10357',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP.txt',NULL,NULL,NULL,NULL,'EPSG','4258','IGN-Esp 2008',0); INSERT INTO "usage" VALUES('EPSG','19922','grid_transformation','EPSG','10363','EPSG','4740','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10366','KGD2002 to KVD1964 height (1)','For reversible alternative to this transformation see KGD2002 to KGD2002 + KVD1964 height (1) (code 10367). Replaced by KNGeoid18 (code 10368).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4927','EPSG','5193',0.035,'EPSG','8666','Geoid (height correction) model file','KNGeoid14.gri',NULL,NULL,NULL,NULL,NULL,NULL,'NGII-Kor 2014',0); INSERT INTO "usage" VALUES('EPSG','20254','grid_transformation','EPSG','10366','EPSG','3266','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10367','KGD2002 to KGD2002 + KVD1964 height (1)','Reversible alternative to KGD2002 + KVD1964 height (1) (code 10366). Replaced by KNGeoid18 (code 10369).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4927','EPSG','10365',0.035,'EPSG','8666','Geoid (height correction) model file','KNGeoid14.gri',NULL,NULL,NULL,NULL,'EPSG','4737','NGII-Kor 2014',0); INSERT INTO "usage" VALUES('EPSG','20151','grid_transformation','EPSG','10367','EPSG','3266','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10368','KGD2002 to KVD1964 height (2)','Replaces KNGeoid14 (code 10366). For reversible alternative to this transformation see KGD2002 to KGD2002 + KVD1964 height (2) (code 10369).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4927','EPSG','5193',0.024,'EPSG','8666','Geoid (height correction) model file','KNGeoid18.gri',NULL,NULL,NULL,NULL,NULL,NULL,'NGII-Kor 2018',0); INSERT INTO "usage" VALUES('EPSG','20253','grid_transformation','EPSG','10368','EPSG','3266','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10369','KGD2002 to KGD2002 + KVD1964 height (2)','Reversible alternative to KGD2002 to KVD1964 height (2) (code 10368). Replaces KNGeoid14 (code 10367).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4927','EPSG','10365',0.024,'EPSG','8666','Geoid (height correction) model file','KNGeoid18.gri',NULL,NULL,NULL,NULL,'EPSG','4737','NGII-Kor 2018',0); INSERT INTO "usage" VALUES('EPSG','20153','grid_transformation','EPSG','10369','EPSG','3266','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10417','NAD83(CSRS)v8 to CGVD2013a(2010) height (1)','Applies same geoid model as NAD83(CSRS)v6 to CGVD2013a(2010) height (1) and NAD83(CSRS)v6 to CGVD2013a(2010) height (1), CT codes 9247 and 10109.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','10413','EPSG','9245',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Can CGG2013a 2010',0); INSERT INTO "usage" VALUES('EPSG','20252','grid_transformation','EPSG','10417','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10418','NAD83(CSRS)v8 to CGVD28 height (1)','Hybrid geoid model valid at epoch 2010.0. Derived at epoch 1997.0 through NAD83(CSRS)v3 and modified to include correction derived from the Canada velocity grid v7 for propagation of height between 1997 and 2010. Also used as CT to CGVD28(v2.0) height.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','10413','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',0); INSERT INTO "usage" VALUES('EPSG','20137','grid_transformation','EPSG','10418','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10421','NAD83(CSRS)v8 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','10413','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','20188','grid_transformation','EPSG','10421','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10422','NAD83(CSRS)v8 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','10413','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','20189','grid_transformation','EPSG','10422','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10423','NAD83(CSRS)v8 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','10413','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','20190','grid_transformation','EPSG','10423','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10466','ETRS89 to MSL NL depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + MSL NL depth (1) (code 10467).','EPSG','1121','Geographic3D to Depth (gtx)','EPSG','4937','EPSG','9288',0.3,'EPSG','8666','Geoid (height correction) model file','nlgeo2018.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','21437','grid_transformation','EPSG','10466','EPSG','4742','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10467','ETRS89 to ETRS89 + MSL NL depth (1)','Reversible alternative to ETRS89 to MSL NL depth (1) (code 10466).','EPSG','1122','Geog3D to Geog2D+Depth (gtx)','EPSG','4937','EPSG','9290',0.3,'EPSG','8666','Geoid (height correction) model file','nlgeo2018.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','NSGI-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','21438','grid_transformation','EPSG','10467','EPSG','4742','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10469','ETRS89 to COV23-IRF (1)','In conjunction with the COV23-TM map projection (code 10470) applied to COV23-IRF (code 10468), emulates the COV23 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines COV23-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10468',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-COV23-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'CCC-Gbr COV23 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','20323','grid_transformation','EPSG','10469','EPSG','4743','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10489','ETRS89 to DVR90(2002) height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + DVR90(2002) height (1) (code 10490).','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','4937','EPSG','10483',0.06,'EPSG','8666','Geoid (height correction) model file','dvr90_2002.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Dnk 2002',0); INSERT INTO "usage" VALUES('EPSG','20499','grid_transformation','EPSG','10489','EPSG','3237','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10490','ETRS89 to ETRS89 + DVR90(2002) height (1)','Reversible alternative to ETRS89 to DVR90(2002) height (1) (code 10489).','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','4937','EPSG','10486',0.06,'EPSG','8666','Geoid (height correction) model file','dvr90_2002.tif',NULL,NULL,NULL,NULL,'EPSG','4258','SDFI-Dnk 2002',0); INSERT INTO "usage" VALUES('EPSG','20504','grid_transformation','EPSG','10490','EPSG','3237','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10491','ETRS89 to DVR90(2013) height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + DVR90(2013) height (1) (code 10492).','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','4937','EPSG','10484',0.03,'EPSG','8666','Geoid (height correction) model file','dvr90_2013.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Dnk 2013',0); INSERT INTO "usage" VALUES('EPSG','20498','grid_transformation','EPSG','10491','EPSG','3237','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10492','ETRS89 to ETRS89 + DVR90(2013) height (1)','Reversible alternative to ETRS89 to DVR90(2013) height (1) (code 10491).','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','4937','EPSG','10487',0.03,'EPSG','8666','Geoid (height correction) model file','dvr90_2013.tif',NULL,NULL,NULL,NULL,'EPSG','4258','SDFI-Dnk 2013',0); INSERT INTO "usage" VALUES('EPSG','20500','grid_transformation','EPSG','10492','EPSG','3237','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10493','ETRS89 to DVR90(2023) height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + DVR90(2023) height (1) (code 10494).','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','4937','EPSG','10485',0.01,'EPSG','8666','Geoid (height correction) model file','dvr90_2023.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','20438','grid_transformation','EPSG','10493','EPSG','3237','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10494','ETRS89 to ETRS89 + DVR90(2023) height (1)','Reversible alternative to ETRS89 to DVR90(2023) height (1) (code 10493).','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','4937','EPSG','10488',0.01,'EPSG','8666','Geoid (height correction) model file','dvr90_2023.tif',NULL,NULL,NULL,NULL,'EPSG','4258','SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','20439','grid_transformation','EPSG','10494','EPSG','3237','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10504','ETRS89 to CD Norway depth (3)','Replaces model "CD Norway 2021b" (code 10130). Replaced by model "CD Norway 2023b" (code 10509). For reversible alternative to this transformation see CT code 10505.','EPSG','1109','Geographic3D to Depth (Gravsoft)','EPSG','4937','EPSG','9672',0.5,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2023a.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2023a',0); INSERT INTO "usage" VALUES('EPSG','20539','grid_transformation','EPSG','10504','EPSG','4656','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10505','ETRS89 to ETRS89 + CD Norway depth (3)','Reversible alternative to ETRS89 to CD Norway depth (3) (CT code 10504). Replaces ETRS89 to ETRS89 + CD Norway depth (2) (model 2021b, CT code 10133). Replaced by ETRS89 to ETRS89 + CD Norway depth (4) (model 2023b, CT code 10510).','EPSG','1110','Geog3D to Geog2D+Depth (Gravsoft)','EPSG','4937','EPSG','9883',0.5,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2023a.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2023a',0); INSERT INTO "usage" VALUES('EPSG','20540','grid_transformation','EPSG','10505','EPSG','4656','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10506','RGF93 v2b to NGF-IGN78 height (3)','Replaces RAC09 model [RGF93 v2 to NGF-IGN78 height (2) (code 8372)]. Accuracy at each grid node is given in the geoid model file. Bilinear interpolation used. For reversible alternative see RGF93 v2b to RGF93 v2b + NGF-IGN78 height (3) (code 10508).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','5721',0.02,'EPSG','8666','Geoid (height correction) model file','RAC23.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra Cor 23',0); INSERT INTO "usage" VALUES('EPSG','20497','grid_transformation','EPSG','10506','EPSG','1327','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10508','RGF93 v2b to RGF93 v2b + NGF-IGN78 height (3)','Reversible alternative to RGF93 v2b to NGF-IGN78 height (3) (code 10506).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','10507',0.02,'EPSG','8666','Geoid (height correction) model file','RAC23.mnt',NULL,NULL,NULL,NULL,'EPSG','9782','IGN Fra Cor 23',0); INSERT INTO "usage" VALUES('EPSG','20535','grid_transformation','EPSG','10508','EPSG','1327','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10509','ETRS89 to CD Norway depth (4)','Replaces ETRS89 to CD Norway depth (3) (code 10504). Accompanying file ...v2023b_standarddeviation.bin contains first estimate of SD of model. For reversible alternative to this transformation see ETRS89 to ETRS89 + CD Norway depth (2) (code 10510).','EPSG','1109','Geographic3D to Depth (Gravsoft)','EPSG','4937','EPSG','9672',0.5,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2023b.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2023b',0); INSERT INTO "usage" VALUES('EPSG','20537','grid_transformation','EPSG','10509','EPSG','4656','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10510','ETRS89 to ETRS89 + CD Norway depth (4)','Reversible alternative to ETRS89 to CD Norway depth (4) (code 10509). Accompanying file ...v2023b_standarddeviation.bin contains first estimate of SD of model. Replaces ETRS89 to ETRS89 + CD Norway depth (3) (code 10133).','EPSG','1110','Geog3D to Geog2D+Depth (Gravsoft)','EPSG','4937','EPSG','9883',0.5,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2023b.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2023b',0); INSERT INTO "usage" VALUES('EPSG','20541','grid_transformation','EPSG','10510','EPSG','4656','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10518','CGVD28 height to CGVD2013a(1997) height (2)','Equal to HT2_1997 hybrid geoid model minus CGG2013a geoid model (CT 9983 minus CT 10111). Specified interpolation CRS is NAD83(CSRS)v3, but NAD83(CSRS)v2 or any later realization may be used without error. See also CT 10617 from CGVD28(v2.0) height.','EPSG','1126','Vertical change by geoid grid difference (NRCan)','EPSG','5713','EPSG','20035',0.05,'EPSG','1063','Geoid model difference file','HT2_1997_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8240','NR-Can HT2 1997',0); INSERT INTO "usage" VALUES('EPSG','20892','grid_transformation','EPSG','10518','EPSG','1289','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10519','CGVD28 height to CGVD2013a(2002) height (2)','Equal to HT2_2002v70 hybrid geoid model minus CGG2013a geoid model (CT 9985 minus CT 10110). Specified interpolation CRS is NAD83(CSRS)v4, but NAD83(CSRS)v2 or any later realization may be used without error. See also CT 10618 from CGVD28(v2.0) height.','EPSG','1126','Vertical change by geoid grid difference (NRCan)','EPSG','5713','EPSG','20034',0.05,'EPSG','1063','Geoid model difference file','HT2_2002v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8246','NR-Can HT2 2002',0); INSERT INTO "usage" VALUES('EPSG','20893','grid_transformation','EPSG','10519','EPSG','1289','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10520','CGVD28 height to CGVD2013a(2010) height (2)','Equal to HT2_2010v70 hybrid geoid model minus CGG2013a geoid model (CT 9986 minus CT 9247). Specified interpolation CRS is NAD83(CSRS)v6, but NAD83(CSRS)v2 or any later realization may be used without error. See also CT 10619 from CGVD28(v2.0) height.','EPSG','1126','Vertical change by geoid grid difference (NRCan)','EPSG','5713','EPSG','9245',0.05,'EPSG','1063','Geoid model difference file','HT2_2010v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8252','NR-Can HT2 2010',0); INSERT INTO "usage" VALUES('EPSG','20894','grid_transformation','EPSG','10520','EPSG','1289','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10521','NAD83(CSRS)v2 to NAD83(CSRS)v4 (3)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v4 (4) (code 10522).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8244',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg60',0); INSERT INTO "usage" VALUES('EPSG','21280','grid_transformation','EPSG','10521','EPSG','4752','EPSG','1058'); INSERT INTO "usage" VALUES('EPSG','21281','grid_transformation','EPSG','10521','EPSG','4753','EPSG','1288'); INSERT INTO "grid_transformation" VALUES('EPSG','10522','NAD83(CSRS)v2 to NAD83(CSRS)v4 (4)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v4 (3) (code 10521). Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v4 (5) (code 10708).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8244',0.015,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21279','grid_transformation','EPSG','10522','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10523','NAD83(CSRS)v2 to NAD83(CSRS)v6 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v6 (3) (code 10524).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8251',0.03,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg60',0); INSERT INTO "usage" VALUES('EPSG','21131','grid_transformation','EPSG','10523','EPSG','4752','EPSG','1058'); INSERT INTO "usage" VALUES('EPSG','21132','grid_transformation','EPSG','10523','EPSG','4753','EPSG','1288'); INSERT INTO "grid_transformation" VALUES('EPSG','10524','NAD83(CSRS)v2 to NAD83(CSRS)v6 (3)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v6 (2) (code 10523). Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v6 (4) (code 10709).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21133','grid_transformation','EPSG','10524','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10525','NAD83(CSRS)v2 to NAD83(CSRS)v7 (2)','Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v7 (3) (code 10710).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8254',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21134','grid_transformation','EPSG','10525','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10526','NAD83(CSRS)v2 to NAD83(CSRS)v8 (2)','Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v8 (3) (code 10711).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','10413',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21323','grid_transformation','EPSG','10526','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10527','NAD83(CSRS)v3 to NAD83(CSRS)v4 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v4 (3) (code 10528).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8244',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg60',0); INSERT INTO "usage" VALUES('EPSG','21136','grid_transformation','EPSG','10527','EPSG','4752','EPSG','1058'); INSERT INTO "usage" VALUES('EPSG','21137','grid_transformation','EPSG','10527','EPSG','4753','EPSG','1288'); INSERT INTO "grid_transformation" VALUES('EPSG','10528','NAD83(CSRS)v3 to NAD83(CSRS)v4 (3)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v4 (2) (code 10527). Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v4 (4) (code 10712).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8244',0.015,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21138','grid_transformation','EPSG','10528','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10529','NAD83(CSRS)v3 to NAD83(CSRS)v6 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v6 (3) (code 10530).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8251',0.03,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg60',0); INSERT INTO "usage" VALUES('EPSG','21139','grid_transformation','EPSG','10529','EPSG','4752','EPSG','1058'); INSERT INTO "usage" VALUES('EPSG','21140','grid_transformation','EPSG','10529','EPSG','4753','EPSG','1288'); INSERT INTO "grid_transformation" VALUES('EPSG','10530','NAD83(CSRS)v3 to NAD83(CSRS)v6 (3)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v6 (2) (code 10529). Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v6 (4) (code 10713).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21141','grid_transformation','EPSG','10530','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10534','NAD83(CSRS)v3 to NAD83(CSRS)v7 (2)','Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v7 (3) (code 10714).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8254',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21142','grid_transformation','EPSG','10534','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10535','NAD83(CSRS)v3 to NAD83(CSRS)v8 (2)','Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v8 (3) (code 10715).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','10413',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21324','grid_transformation','EPSG','10535','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10536','NAD83(CSRS)v4 to NAD83(CSRS)v6 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v4 to NAD83(CSRS)v6 (3) (code 10537).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg60',0); INSERT INTO "usage" VALUES('EPSG','21325','grid_transformation','EPSG','10536','EPSG','4752','EPSG','1058'); INSERT INTO "usage" VALUES('EPSG','21326','grid_transformation','EPSG','10536','EPSG','4753','EPSG','1288'); INSERT INTO "grid_transformation" VALUES('EPSG','10537','NAD83(CSRS)v4 to NAD83(CSRS)v6 (3)','Replaces NAD83(CSRS)v4 to NAD83(CSRS)v6 (2) (code 10536). Replaced by NAD83(CSRS)v4 to NAD83(CSRS)v6 (4) (code 10716).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8251',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21327','grid_transformation','EPSG','10537','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10538','NAD83(CSRS)v4 to NAD83(CSRS)v7 (2)','Replaced by NAD83(CSRS)v4 to NAD83(CSRS)v7 (3) (code 10717).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8254',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21328','grid_transformation','EPSG','10538','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10539','NAD83(CSRS)v4 to NAD83(CSRS)v8 (2)','Replaced by NAD83(CSRS)v4 to NAD83(CSRS)v8 (3) (code 10718).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','10413',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg70',0); INSERT INTO "usage" VALUES('EPSG','21148','grid_transformation','EPSG','10539','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10540','CGVD2013a(1997) height to CGVD2013a(2002) height (2)','Although interpolation CRS is specified as NAD83(CSRS)v7, NAD83(CSRS)v2 or any later realization may be used without introducing significant error.','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20035','EPSG','20034',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can',0); INSERT INTO "usage" VALUES('EPSG','21329','grid_transformation','EPSG','10540','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10541','CGVD2013a(1997) height to CGVD2013a(2010) height (2)','Although interpolation CRS is specified as NAD83(CSRS)v7, NAD83(CSRS)v2 or any later realization may be used without introducing significant error. ','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20035','EPSG','9245',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can',0); INSERT INTO "usage" VALUES('EPSG','21330','grid_transformation','EPSG','10541','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10542','CGVD2013a(2002) height to CGVD2013a(2010) height (2)','Although interpolation CRS is specified as NAD83(CSRS)v7, NAD83(CSRS)v2 or any later realization may be used without introducing significant error. ','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20034','EPSG','9245',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can',0); INSERT INTO "usage" VALUES('EPSG','21331','grid_transformation','EPSG','10542','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10544','ETRS89 to Cascais height (1)','Hybrid geoid model GeodPT08 adjusts ICAGM07 to fit Cascais at the Portuguese Mainland geodetic network. For reversible alternative to this transformation see ETRS89 to ETRS89 + Cascais height (1) (code 10546).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','4937','EPSG','5780',0.04,'EPSG','8666','Geoid (height correction) model file','GeodPT08.dat',NULL,NULL,NULL,NULL,NULL,NULL,'DGT-Prt 2008',0); INSERT INTO "usage" VALUES('EPSG','20911','grid_transformation','EPSG','10544','EPSG','1294','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10546','ETRS89 to ETRS89 + Cascais height (1)','Reversible alternative to ETRS89 to Cascais height (1) (code 10544).','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','4937','EPSG','10545',0.04,'EPSG','8666','Geoid (height correction) model file','GeodPT08.dat',NULL,NULL,NULL,NULL,'EPSG','4258','DGT-Prt 2008',0); INSERT INTO "usage" VALUES('EPSG','20910','grid_transformation','EPSG','10546','EPSG','1294','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10557','ETRS89 to DKMSL(2022) depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + DKMSL(2022) depth (1) (code 10558).','EPSG','1127','Geographic3D to Depth (gtg)','EPSG','4937','EPSG','10547',0.5,'EPSG','8666','Geoid (height correction) model file','dkmsl_2022.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Dnk 2022',0); INSERT INTO "usage" VALUES('EPSG','21053','grid_transformation','EPSG','10557','EPSG','4756','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10558','ETRS89 to ETRS89 + DKMSL(2022) depth (1)','Reversible alternative to ETRS89 to DKMSL(2022) depth (1) (code 10557).','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','4937','EPSG','10553',0.5,'EPSG','8666','Geoid (height correction) model file','dkmsl_2022.tif',NULL,NULL,NULL,NULL,'EPSG','4258','SDFI-Dnk 2022',0); INSERT INTO "usage" VALUES('EPSG','21042','grid_transformation','EPSG','10558','EPSG','4756','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10559','ETRS89 to DKLAT(2022) depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + DKLAT(2022) depth (1) (code 10560).','EPSG','1127','Geographic3D to Depth (gtg)','EPSG','4937','EPSG','10548',0.5,'EPSG','8666','Geoid (height correction) model file','dklat_2022.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Dnk 2022',0); INSERT INTO "usage" VALUES('EPSG','21043','grid_transformation','EPSG','10559','EPSG','4756','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10560','ETRS89 to ETRS89 + DKLAT(2022) depth (1)','Reversible alternative to ETRS89 to DKLAT(2022) depth (1) (code 10559).','EPSG','1128','Geog3D to Geog2D+Depth (gtg)','EPSG','4937','EPSG','10554',0.5,'EPSG','8666','Geoid (height correction) model file','dklat_2022.tif',NULL,NULL,NULL,NULL,'EPSG','4258','SDFI-Dnk 2022',0); INSERT INTO "usage" VALUES('EPSG','21054','grid_transformation','EPSG','10560','EPSG','4756','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10561','ETRS89 to DKMSL(2023) depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + DKMSL(2023) depth (1) (code 10562). Replaces ETRS89 to DKMSL(2022) depth (1) (code 10557).','EPSG','1127','Geographic3D to Depth (gtg)','EPSG','4937','EPSG','10549',0.1,'EPSG','8666','Geoid (height correction) model file','dkmsl_2023.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','21046','grid_transformation','EPSG','10561','EPSG','4756','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10562','ETRS89 to ETRS89 + DKMSL(2023) depth (1)','Reversible alternative to ETRS89 to DKMSL(2023) depth (1) (code 10561). Replaces ETRS89 to ETRS89 + DKMSL(2022) depth (1) (code 10558).','EPSG','1128','Geog3D to Geog2D+Depth (gtg)','EPSG','4937','EPSG','10555',0.1,'EPSG','8666','Geoid (height correction) model file','dkmsl_2023.tif',NULL,NULL,NULL,NULL,'EPSG','4258','SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','21291','grid_transformation','EPSG','10562','EPSG','4756','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10563','ETRS89 to DKLAT(2023) depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + DKLAT(2023) depth (1) (code 10564). Replaces ETRS89 to DKLAT(2022) depth (1) (code 10559).','EPSG','1127','Geographic3D to Depth (gtg)','EPSG','4937','EPSG','10550',0.1,'EPSG','8666','Geoid (height correction) model file','dklat_2023.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','21048','grid_transformation','EPSG','10563','EPSG','4756','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10564','ETRS89 to ETRS89 + DKLAT(2023) depth (1)','Reversible alternative to ETRS89 to DKLAT(2023) depth (1) (code 10563). Replaces ETRS89 to ETRS89 + DKLAT(2022) depth (1) (code 10560).','EPSG','1128','Geog3D to Geog2D+Depth (gtg)','EPSG','4937','EPSG','10556',0.1,'EPSG','8666','Geoid (height correction) model file','dklat_2023.tif',NULL,NULL,NULL,NULL,'EPSG','4258','SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','21271','grid_transformation','EPSG','10564','EPSG','4756','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10566','GLLMSL(2022) height to GVR2016 height (1)','File format is GeoTIFF grid (.gtg) which is algorithmically equivalent to the GTX format (see https://proj.org/en/9.3/specifications/geodetictiffgrids.html).','EPSG','1129','Vertical Offset by Grid Interpolation (gtg)','EPSG','10565','EPSG','8267',0.02,'EPSG','8732','Vertical offset file','gllmsl_2022.tif',NULL,NULL,NULL,NULL,'EPSG','4747','SDFI-Grl 2022',0); INSERT INTO "usage" VALUES('EPSG','21011','grid_transformation','EPSG','10566','EPSG','3119','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10567','ETRS89 to Baltic 1957 height (2)','For reversible alternative to this transformation see ETRS89 to ETRS89 + Baltic 1957 height (2) (code 10568).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','8357',0.03,'EPSG','8666','Geoid (height correction) model file','CR2005_GTX.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'cuzk-Cze 2005',0); INSERT INTO "usage" VALUES('EPSG','21065','grid_transformation','EPSG','10567','EPSG','1079','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10568','ETRS89 to ETRS89 + Baltic 1957 height (2)','Reversible alternative to ETRS89 to Baltic 1957 height (2) (code 10567).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4937','EPSG','8360',0.03,'EPSG','8666','Geoid (height correction) model file','CR2005_GTX.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','cuzk-Cze 2005',0); INSERT INTO "usage" VALUES('EPSG','21066','grid_transformation','EPSG','10568','EPSG','1079','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10590','NAD83(CSRS)v2 to CGVD28(HTv2.0) height (1)','Hybrid geoid model. Valid at epoch 1997.0. A provisional grid was derived through NAD83(CSRS98) = NAD83(CSRS)v2 and used in HT1 software. This grid is an update used in HT2 software, derived through NAD83(CSRS)v3, CRS code 8239.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8235','EPSG','10588',0.01,'EPSG','8666','Geoid (height correction) model file','HT2_1997.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 1997',0); INSERT INTO "usage" VALUES('EPSG','21634','grid_transformation','EPSG','10590','EPSG','4778','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10609','NAD83(CSRS)v3 to CGVD28(HTv2.0) height (1)','Valid at epoch 1997.0. Hybrid geoid derived from CGG2000 gravimetric geoid fitted to 1926 benchmarks with CGVD28 and NAD83(CSRS)v3 heights. On publication in 2019 of models valid at other epochs, file renamed from "HT2_0.byn"; no change to file contents.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8239','EPSG','10588',0.0,'EPSG','8666','Geoid (height correction) model file','HT2_1997.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000',0); INSERT INTO "usage" VALUES('EPSG','21635','grid_transformation','EPSG','10609','EPSG','4778','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10610','NAD83(CSRS)v4 to CGVD28(HTv2.0) height (1)','Hybrid geoid model, valid at epoch 2002.0. Grid derived at epoch 1997.0 through NAD83(CSRS)v3 (CRS code 8239) and then modified to include correction derived from the Canada velocity grid v7.0 for propagation of height between 1997.0 and 2002.0.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8244','EPSG','10588',0.02,'EPSG','8666','Geoid (height correction) model file','HT2_2002v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2002',0); INSERT INTO "usage" VALUES('EPSG','21636','grid_transformation','EPSG','10610','EPSG','4778','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10611','NAD83(CSRS)v6 to CGVD28(HTv2.0) height (1)','Hybrid geoid model, valid at epoch 2010.0. Grid derived at epoch 1997.0 through NAD83(CSRS)v3 (CRS code 8235) and then modified to include correction for propagation of height between 1997.0 and 2010.0 derived from the Canada velocity grid v7.0.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8251','EPSG','5713',0.03,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',1); INSERT INTO "usage" VALUES('EPSG','21637','grid_transformation','EPSG','10611','EPSG','4778','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10612','NAD83(CSRS)v7 to CGVD28(HTv2.0) height (1)','Hybrid geoid model, valid at epoch 2010.0. Grid derived at epoch 1997.0 through NAD83(CSRS)v3 (CRS code 8235) and then modified to include correction for propagation of height between 1997.0 and 2010.0 derived from the Canada velocity grid v7.0.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8254','EPSG','10588',0.03,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',0); INSERT INTO "usage" VALUES('EPSG','21638','grid_transformation','EPSG','10612','EPSG','4778','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10613','NAD83(CSRS)v8 to CGVD28(HTv2.0) height (1)','Hybrid geoid model, valid at epoch 2010.0. Grid derived at epoch 1997.0 through NAD83(CSRS)v3 (CRS code 8235) and then modified to include correction for propagation of height between 1997.0 and 2010.0 derived from the Canada velocity grid v7.0.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','10413','EPSG','10588',0.03,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',0); INSERT INTO "usage" VALUES('EPSG','21639','grid_transformation','EPSG','10613','EPSG','4778','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10614','SHGD2015 to SHGD2015 + SHVD2015 height (1)','Reversible alternative to SHGD2015 to SHVD2015 height (1) (code 7891).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','7885','EPSG','9517',0.0,'EPSG','8666','Geoid (height correction) model file','Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,'EPSG','7886','ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','21285','grid_transformation','EPSG','10614','EPSG','3183','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10615','NAD83(CSRS)v2 to NAD83(CSRS)v4 (1)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8246',0.1,'EPSG','8656','Latitude and longitude difference file','BC_98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0); INSERT INTO "usage" VALUES('EPSG','21322','grid_transformation','EPSG','10615','EPSG','4535','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','10617','CGVD28(HTv2.0) height to CGVD2013a(1997) height (1)','Equal to HT2_1997 hybrid geoid model minus CGG2013a geoid model (CT 10609 minus CT 10111). Specified interpolation CRS is NAD83(CSRS)v3, but NAD83(CSRS)v2 or any later realization may be used without error. Also used as CT 10518 from CGVD28 height.','EPSG','1126','Vertical change by geoid grid difference (NRCan)','EPSG','10588','EPSG','20035',0.03,'EPSG','1063','Geoid model difference file','HT2_1997_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8240','NR-Can HT2 1997',0); INSERT INTO "usage" VALUES('EPSG','21640','grid_transformation','EPSG','10617','EPSG','4778','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10618','CGVD28(HTv2.0) height to CGVD2013a(2002) height (1)','Equal to HT2_2002v70 hybrid geoid model minus CGG2013a geoid model (CT 10610 minus CT 10110). Specified interpolation CRS is NAD83(CSRS)v4, but NAD83(CSRS)v2 or any later realization may be used without error. Also used as CT 10519 from CGVD28 height.','EPSG','1126','Vertical change by geoid grid difference (NRCan)','EPSG','10588','EPSG','20034',0.02,'EPSG','1063','Geoid model difference file','HT2_2002v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8246','NR-Can HT2 2002',0); INSERT INTO "usage" VALUES('EPSG','21641','grid_transformation','EPSG','10618','EPSG','4778','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10619','CGVD28(HTv2.0) height to CGVD2013a(2010) height (1)','Equal to HT2_2010v70 hybrid geoid model minus CGG2013a geoid model (CT 10611 minus CT 9247). Specified interpolation CRS is NAD83(CSRS)v6, but NAD83(CSRS)v2 or any later realization may be used without error. Also used as CT 10520 from CGVD28 height.','EPSG','1126','Vertical change by geoid grid difference (NRCan)','EPSG','10588','EPSG','9245',0.0,'EPSG','1063','Geoid model difference file','HT2_2010v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8252','NR-Can HT2 2010',0); INSERT INTO "usage" VALUES('EPSG','21642','grid_transformation','EPSG','10619','EPSG','4778','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10624','ETRS89 to ECML14-IRF (1)','In conjunction with the ECML14-TM map projection (code 10625) applied to ECML14-IRF (code 10623), emulates the ECML14 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines ECML14-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10623',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-ECML14-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr ECML14 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','21386','grid_transformation','EPSG','10624','EPSG','4774','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10629','ETRS89 to WC05-IRF (1)','In conjunction with the WC05-TM map projection (code 10631) applied to WC05-IRF (code 10628), emulates the WC05 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines WC05-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10628',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-WC05-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr WC05 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','21382','grid_transformation','EPSG','10629','EPSG','4775','EPSG','1141'); INSERT INTO "grid_transformation" VALUES('EPSG','10653','GR96 to GLMSL(2023) depth (1)','For reversible alternative to this transformation see GR96 to GR96 + GLMSL(2023) depth (1) (code 10654).','EPSG','1127','Geographic3D to Depth (gtg)','EPSG','4909','EPSG','10649',0.05,'EPSG','8666','Geoid (height correction) model file','glmsl_2023.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Grl 2023',0); INSERT INTO "usage" VALUES('EPSG','21453','grid_transformation','EPSG','10653','EPSG','4776','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10654','GR96 to GR96 + GLMSL(2023) depth (1)','Reversible alternative to GR96 to GLMSL(2023) depth (1) (code 10653).','EPSG','1128','Geog3D to Geog2D+Depth (gtg)','EPSG','4909','EPSG','10651',0.05,'EPSG','8666','Geoid (height correction) model file','glmsl_2023.tif',NULL,NULL,NULL,NULL,'EPSG','4747','SDFI-Grl 2023',0); INSERT INTO "usage" VALUES('EPSG','21463','grid_transformation','EPSG','10654','EPSG','4776','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10655','GR96 to GLLAT(2023) depth (1)','For reversible alternative to this transformation see GR96 to GR96 + GLLAT(2023) depth (1) (code 10656).','EPSG','1127','Geographic3D to Depth (gtg)','EPSG','4909','EPSG','10650',0.1,'EPSG','8666','Geoid (height correction) model file','gllat_2023.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SDFI-Grl 2023',0); INSERT INTO "usage" VALUES('EPSG','21456','grid_transformation','EPSG','10655','EPSG','4776','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10656','GR96 to GR96 + GLLAT(2023) depth (1)','Reversible alternative to GR96 to GLLAT(2023) depth (1) (code 10655).','EPSG','1128','Geog3D to Geog2D+Depth (gtg)','EPSG','4909','EPSG','10652',0.1,'EPSG','8666','Geoid (height correction) model file','gllat_2023.tif',NULL,NULL,NULL,NULL,'EPSG','4747','SDFI-Grl 2023',0); INSERT INTO "usage" VALUES('EPSG','21458','grid_transformation','EPSG','10656','EPSG','4776','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10661','ETRF2000 to EOMA 1980 height (1)','Used in the official SGO EHT coordinate transformation tool. For access to the grid file see https://www.gnssnet.hu/. Replaces VITEL2009. For reversible alternative to this transformation see ETRF2000 to ETRF2000 + EOMA 1980 height (1) (CT code 10662).','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','7931','EPSG','5787',0.05,'EPSG','8666','Geoid (height correction) model file','hu_sgo_vitel2014.tif',NULL,NULL,NULL,NULL,NULL,NULL,'SGO-Hun geoid14',0); INSERT INTO "usage" VALUES('EPSG','21612','grid_transformation','EPSG','10661','EPSG','1119','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10662','ETRF2000 to ETRF2000 + EOMA 1980 height (1)','Reversible alternative to ETRF2000 to EOMA 1980 height (1) (code 10661). Used in the official SGO EHT coordinate transformation tool. For access to the grid file see https://www.gnssnet.hu/.','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','7931','EPSG','10659',0.05,'EPSG','8666','Geoid (height correction) model file','hu_sgo_vitel2014.tif',NULL,NULL,NULL,NULL,'EPSG','9067','SGO-Hun geoid14',0); INSERT INTO "usage" VALUES('EPSG','21628','grid_transformation','EPSG','10662','EPSG','1119','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10663','HD72 to ETRF2000 (1)','Used in the official SGO EHT coordinate transformation tool. For access to the grid file see https://www.gnssnet.hu/.','EPSG','9615','NTv2','EPSG','4237','EPSG','9067',0.01,'EPSG','8656','Latitude and longitude difference file','hu_sgo_hd72corr.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LTK-Hun',0); INSERT INTO "usage" VALUES('EPSG','21614','grid_transformation','EPSG','10663','EPSG','1119','EPSG','1181'); INSERT INTO "grid_transformation" VALUES('EPSG','10666','ETRF2000 to EOMA 1980 height (2)','Emulation to better than 7mm of the official SGO EHT model (CT code 10661). The geoid height values were obtained from the online EHT service. For reversible alternative to this transformation see ETRF2000 to ETRF2000 + EOMA 1980 height (2) (code 10667).','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','7931','EPSG','5787',0.06,'EPSG','8666','Geoid (height correction) model file','hu_bme_geoid2014.tif',NULL,NULL,NULL,NULL,NULL,NULL,'BME-Hun geoid14',0); INSERT INTO "usage" VALUES('EPSG','21674','grid_transformation','EPSG','10666','EPSG','1119','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10667','ETRF2000 to ETRF2000 + EOMA 1980 height (2)','Reversible alternative to ETRF2000 to EOMA 1980 height (2) (code 10666). Emulation to better than 7mm of the official SGO EHT transformation (CT code 10662).','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','7931','EPSG','10659',0.06,'EPSG','8666','Geoid (height correction) model file','hu_bme_geoid2014.tif',NULL,NULL,NULL,NULL,'EPSG','9067','BME-Hun geoid14',0); INSERT INTO "usage" VALUES('EPSG','21675','grid_transformation','EPSG','10667','EPSG','1119','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10668','HD72 to ETRF2000 (2)','Emulation to better than 2mm of the official SGO EHT transformation. ETRF2000 coordinates of the grid nodes were converted to HD72 using the online EHT tool. For cadastral and other legal purposes the official transformation (CT code 10663) must be used.','EPSG','9615','NTv2','EPSG','4237','EPSG','9067',0.015,'EPSG','8656','Latitude and longitude difference file','hu_bme_hd72corr.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BME-Hun',0); INSERT INTO "usage" VALUES('EPSG','21676','grid_transformation','EPSG','10668','EPSG','1119','EPSG','1178'); INSERT INTO "grid_transformation" VALUES('EPSG','10677','PD/83 to ETRS89 (2)','Official transformation for the state of Thuringen used in ThuTrans. File also available in GTG format.','EPSG','9615','NTv2','EPSG','4746','EPSG','4258',0.3,'EPSG','8656','Latitude and longitude difference file','de_tlbg_thuringen_NTv2gridTH.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'TLBG-Deu Thuringen',0); INSERT INTO "usage" VALUES('EPSG','21822','grid_transformation','EPSG','10677','EPSG','2544','EPSG','1273'); INSERT INTO "grid_transformation" VALUES('EPSG','10680','ETRS89 to BSCD2000 depth (1)','Defines BSCD2000. See ETRS89 to ETRS89 + BSCD2000 depth (1) (code 10681) for reversible alternative. File also available in gtx and gtg formats.','EPSG','1116','Geographic3D to Depth (txt)','EPSG','4937','EPSG','10678',0.05,'EPSG','8666','Geoid (height correction) model file','BSCD2000.txt',NULL,NULL,NULL,NULL,NULL,NULL,'BSHC-Baltic 2023',0); INSERT INTO "usage" VALUES('EPSG','21820','grid_transformation','EPSG','10680','EPSG','4779','EPSG','1277'); INSERT INTO "grid_transformation" VALUES('EPSG','10681','ETRS89 to ETRS89 + BSCD2000 depth (1)','Reversible alternative to ETRS89 to BSCD2000 depth (1) (code 10680). File also available in gtx and gtg formats.','EPSG','1115','Geog3D to Geog2D+Depth (txt)','EPSG','4937','EPSG','10679',0.05,'EPSG','8666','Geoid (height correction) model file','BSCD2000.txt',NULL,NULL,NULL,NULL,'EPSG','4258','BSHC-Baltic 2023',0); INSERT INTO "usage" VALUES('EPSG','21821','grid_transformation','EPSG','10681','EPSG','4779','EPSG','1272'); INSERT INTO "grid_transformation" VALUES('EPSG','10683','RGM04 to RGM23 (2)','','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4470','EPSG','10671',0.05,'EPSG','8727','Geocentric translation file','RGM04versRGM23.txt',NULL,NULL,NULL,NULL,'EPSG','10671','IGN-Myt 5cm',0); INSERT INTO "usage" VALUES('EPSG','21860','grid_transformation','EPSG','10683','EPSG','1159','EPSG','1178'); INSERT INTO "grid_transformation" VALUES('EPSG','10685','SVS2000 height to SVS2010 height (1)','SLO-VTP2024 height transformation surface derived at 2116 benchmarks. Height differences vary between −0.240 m and −0.047 m; 1σ accuarcy at 8693 BM is 9.9mm. File is also available in Surfer .grd and Gravsoft .gri formats.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5779','EPSG','8690',0.02,'EPSG','8732','Vertical offset file','SLO-VTP2024.xyz',NULL,NULL,NULL,NULL,'EPSG','4765','GuRS-Svn',0); INSERT INTO "usage" VALUES('EPSG','21886','grid_transformation','EPSG','10685','EPSG','3307','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10693','EUREF-FIN to N60 height (1)','For reversible alternative see EUREF-FIN to EUREF-FIN + N60 height (1) (code 10694). Derived through a correction surface to the Nordic NKG96 geoid model using 156 points at which both levelled and GPS heights were available. ASCII file format available.','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','10689','EPSG','5717',0.03,'EPSG','8666','Geoid (height correction) model file','fi_nls_fin2000.tif',NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Fin 2000',0); INSERT INTO "usage" VALUES('EPSG','22010','grid_transformation','EPSG','10693','EPSG','3333','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10694','EUREF-FIN to EUREF-FIN + N60 height (1)','Reversible alternative to EUREF-FIN to N60 height (1) (code 10693). File also available in 3 ASCII formats.','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','10689','EPSG','10691',0.03,'EPSG','8666','Geoid (height correction) model file','fi_nls_fin2000.tif',NULL,NULL,NULL,NULL,'EPSG','10690','NLS-Fin 2000',0); INSERT INTO "usage" VALUES('EPSG','22011','grid_transformation','EPSG','10694','EPSG','3333','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10695','EUREF-FIN to N2000 height (1)','Replaced by EUREF-FIN to N2000 height (2) (code 10697). For reversible alternative see EUREF-FIN to EUREF-FIN + N2000 height (1) (code 10696). Derived through correction surface to the Nordic NKG2004-geoid model using 50 EUVN points. File also in ASCII.','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','10689','EPSG','3900',0.02,'EPSG','8666','Geoid (height correction) model file','fi_nls_fin2005n00.tif',NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Fin 2005',0); INSERT INTO "usage" VALUES('EPSG','22016','grid_transformation','EPSG','10695','EPSG','3333','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10696','EUREF-FIN to EUREF-FIN + N2000 height (1)','Reversible alternative to EUREF-FIN to N2000 height (1) (code 10695). Replaced by EUREF-FIN to EUREF-FIN + N2000 height (2) (code 10698). File also available in 3 ASCII formats.','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','10689','EPSG','10692',0.02,'EPSG','8666','Geoid (height correction) model file','fi_nls_fin2005n00.tif',NULL,NULL,NULL,NULL,'EPSG','10690','NLS-Fin 2005',0); INSERT INTO "usage" VALUES('EPSG','22017','grid_transformation','EPSG','10696','EPSG','3333','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10697','EUREF-FIN to N2000 height (2)','Replaces EUREF-FIN to N2000 height (1) (code 10695). For reversible alternative to this transformation see EUREF-FIN to EUREF-FIN + N2000 height (2) (code 10698). File also available in 3 ASCII formats.','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','10689','EPSG','3900',0.014,'EPSG','8666','Geoid (height correction) model file','fi_nls_fin2023n2000.tif',NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Fin 2023',0); INSERT INTO "usage" VALUES('EPSG','22014','grid_transformation','EPSG','10697','EPSG','3333','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10698','EUREF-FIN to EUREF-FIN + N2000 height (2)','Replaces EUREF-FIN to EUREF-FIN + N2000 height (1) (code 10696). Reversible alternative to EUREF-FIN to N2000 height (2) (code 10697). File also available in 3 ASCII formats.','EPSG','1124','Geog3D to Geog2D+GravityRelatedHeight (gtg)','EPSG','10689','EPSG','10692',0.014,'EPSG','8666','Geoid (height correction) model file','fi_nls_fin2023n2000.tif',NULL,NULL,NULL,NULL,'EPSG','10690','NLS-Fin 2023',0); INSERT INTO "usage" VALUES('EPSG','22015','grid_transformation','EPSG','10698','EPSG','3333','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10703','KKJ / Finland Uniform Coordinate System to EUREF-FIN / TM35FIN(E,N) (1)','This YKJ to ETRS-TM35FIN TINshift transformation is the recommended method for KKJ to EUREF-FIN coordinate change, to be used in preference to transformation KKJ to EUREF-FIN (2) (code 10098). See concatenated operation 10778.','EPSG','1138','Cartesian Grid Offsets by TIN Interpolation (JSON)','EPSG','2393','EPSG','3067',0.03,'EPSG','1064','TIN offset file','fi_nls_ykj_etrs35fin.json',NULL,NULL,NULL,NULL,NULL,NULL,'NLS-FIN TINshift',0); INSERT INTO "usage" VALUES('EPSG','22055','grid_transformation','EPSG','10703','EPSG','3333','EPSG','1273'); INSERT INTO "grid_transformation" VALUES('EPSG','10704','N43 height to N60 height (1)','Accuracy has not been determined.','EPSG','1137','Vertical Offset by TIN Interpolation (JSON)','EPSG','8675','EPSG','5717',999.0,'EPSG','1064','TIN offset file','fi_nls_n43_n60.json',NULL,NULL,NULL,NULL,'EPSG','2393','NLS-Fin TINshift',0); INSERT INTO "usage" VALUES('EPSG','22018','grid_transformation','EPSG','10704','EPSG','4522','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10705','N60 height to N2000 height (1)','Recommended method for N60<>N2000 trasformations, as more accurate than concatenating geoid models.','EPSG','1137','Vertical Offset by TIN Interpolation (JSON)','EPSG','5717','EPSG','3900',0.005,'EPSG','1064','TIN offset file','fi_nls_n60_n2000.json',NULL,NULL,NULL,NULL,'EPSG','2393','NLS-Fin TINshift',0); INSERT INTO "usage" VALUES('EPSG','22201','grid_transformation','EPSG','10705','EPSG','3333','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10707','Canada velocity grid v8','Replaces Canada velocity grid v7 (code 9483). Although the interpolation CRS is given as NAD83(CSRS)v8 (also known as NAD83(CSRS) 2010), any version of NAD83(CSRS) may be used for grid interpolation without significant error.','EPSG','1141','Point motion by grid (NEU domain) (NTv2_Vel)','EPSG','10413','EPSG','10413',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','NRC-Can cvg8.0',0); INSERT INTO "usage" VALUES('EPSG','22258','grid_transformation','EPSG','10707','EPSG','4754','EPSG','1058'); INSERT INTO "grid_transformation" VALUES('EPSG','10708','NAD83(CSRS)v2 to NAD83(CSRS)v4 (5)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v4 (3) (code 10522).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8244',0.015,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22066','grid_transformation','EPSG','10708','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10709','NAD83(CSRS)v2 to NAD83(CSRS)v6 (4)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v6 (3) (code 10524).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22067','grid_transformation','EPSG','10709','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10710','NAD83(CSRS)v2 to NAD83(CSRS)v7 (3)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v7 (2) (code 10525).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8254',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22068','grid_transformation','EPSG','10710','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10711','NAD83(CSRS)v2 to NAD83(CSRS)v8 (3)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v8 (2) (code 10526).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','10413',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22060','grid_transformation','EPSG','10711','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10712','NAD83(CSRS)v3 to NAD83(CSRS)v4 (4)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v4 (3) (code 10528).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8244',0.015,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22061','grid_transformation','EPSG','10712','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10713','NAD83(CSRS)v3 to NAD83(CSRS)v6 (4)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v6 (3) (code 10530).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22062','grid_transformation','EPSG','10713','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10714','NAD83(CSRS)v3 to NAD83(CSRS)v7 (3)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v7 (2) (code 10534).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8254',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22257','grid_transformation','EPSG','10714','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10715','NAD83(CSRS)v3 to NAD83(CSRS)v8 (3)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v8 (2) (code 10535).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','10413',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22064','grid_transformation','EPSG','10715','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10716','NAD83(CSRS)v4 to NAD83(CSRS)v6 (4)','Replaces NAD83(CSRS)v4 to NAD83(CSRS)v6 (3) (code 10537).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8251',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22069','grid_transformation','EPSG','10716','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10717','NAD83(CSRS)v4 to NAD83(CSRS)v7 (3)','Replaces NAD83(CSRS)v4 to NAD83(CSRS)v7 (2) (code 10538).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8254',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22070','grid_transformation','EPSG','10717','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10718','NAD83(CSRS)v4 to NAD83(CSRS)v8 (3)','Replaces NAD83(CSRS)v4 to NAD83(CSRS)v8 (2) (code 10539).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','10413',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg80',0); INSERT INTO "usage" VALUES('EPSG','22065','grid_transformation','EPSG','10718','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10767','Bonaire 2004 to Bonaire height (1)','Vertical component of official transformation BESTRANS2020. For reversible alternative to this transformation see Bonaire 2004 to Bonaire 2004 + Bonaire height (1) (code 10768).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','10761','EPSG','10763',0.25,'EPSG','8666','Geoid (height correction) model file','bongeo2004.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes bongeo2004',0); INSERT INTO "usage" VALUES('EPSG','22276','grid_transformation','EPSG','10767','EPSG','3822','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10768','Bonaire 2004 to Bonaire 2004 + Bonaire height (1)','Reversible alternative to Bonaire 2004 to Bonaire height (1) (code 10767). Vertical component of official transformation BESTRANS2020.','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','10761','EPSG','10765',0.25,'EPSG','8666','Geoid (height correction) model file','bongeo2004.gtx',NULL,NULL,NULL,NULL,'EPSG','10762','NSGI-Bes bongeo2004',0); INSERT INTO "usage" VALUES('EPSG','22189','grid_transformation','EPSG','10768','EPSG','3822','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10775','KSA-GRF17 to KSA-VRF14 height (2)','Hybrid geoid, replaces KSA-Geoid17. Accuracy 1.5 cm along levelling lines, 2.5 cm between lines. To access KSA-GEOID21 contact GEOSA at info@geosa.gov.sa. For reversible alternative see code 10776.','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','9332','EPSG','9335',0.02,'EPSG','8666','Geoid (height correction) model file','KSA-GEOID21.gra',NULL,NULL,NULL,NULL,NULL,NULL,'GEOSA-Sau 21',0); INSERT INTO "usage" VALUES('EPSG','22359','grid_transformation','EPSG','10775','EPSG','3303','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10776','KSA-GRF17 to KSA-GRF17 + KSA-VRF14 height (2)','Reversible alternative to KSA-GRF17 to KSA-VRF14 height (2) (code 10775). Hybrid geoid, replaces KSA-Geoid17. Accuracy 1.5 cm along levelling lines, 2.5 cm between lines. To access KSA-GEOID21 contact GEOSA at info@geosa.gov.sa','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','9332','EPSG','9520',0.02,'EPSG','8666','Geoid (height correction) model file','KSA-GEOID21.gra',NULL,NULL,NULL,NULL,'EPSG','9333','GEOSA-Sau 21',0); INSERT INTO "usage" VALUES('EPSG','22377','grid_transformation','EPSG','10776','EPSG','3303','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10821','NAD83(CSRS)v6 to CGVD28(HTv2.0) height (1)','Hybrid geoid model, valid at epoch 2010.0. Grid derived at epoch 1997.0 through NAD83(CSRS)v3 (CRS code 8235) and then modified to include correction for propagation of height between 1997.0 and 2010.0 derived from the Canada velocity grid v7.0.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8251','EPSG','10588',0.03,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',0); INSERT INTO "usage" VALUES('EPSG','22548','grid_transformation','EPSG','10821','EPSG','4778','EPSG','1132'); INSERT INTO "grid_transformation" VALUES('EPSG','10822','LN02 height to EVRF2019 height (2)','Determined at 553 points, SD 0.073m. Offset: mean -0.216m, minimum -0.478m, maximum -0.021m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5728','EPSG','9389',0.146,'EPSG','8732','Vertical offset file','ch_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','22550','grid_transformation','EPSG','10822','EPSG','1286','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10823','LN02 height to EVRF2019 mean-tide height (2)','Determined at 553 points, SD 0.071m. Offset: mean -0.244m, minimum -0.506m, maximum -0.012m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5728','EPSG','9390',0.142,'EPSG','8732','Vertical offset file','ch_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','22551','grid_transformation','EPSG','10823','EPSG','1286','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','15486','CH1903 to CH1903+ (1)','For improved accuracy (0.01m) use CHENyx06 interpolation programme FINELTRA. File CHENyx06 replaced by CHENyx06a; there is a small area at the border of the data where some more real data has been introduced. swisstopo consider the change insignificant.','EPSG','9615','NTv2','EPSG','4149','EPSG','4150',0.2,'EPSG','8656','Latitude and longitude difference file','CHENyx06a.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che',0); INSERT INTO "usage" VALUES('EPSG','11497','grid_transformation','EPSG','15486','EPSG','1286','EPSG','1085'); INSERT INTO "grid_transformation" VALUES('EPSG','15488','RRAF 1991 to IGN 1988 MG height (1)','May be used for transformations from WGS 84 to IGN 1988 MG. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5617',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_mg.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG',1); INSERT INTO "usage" VALUES('EPSG','11499','grid_transformation','EPSG','15488','EPSG','2894','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','15489','RRAF 1991 to IGN 1988 LS height (1)','May be used for transformations from WGS 84 to IGN 1988 LS. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5616',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_ls.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp LSt',1); INSERT INTO "usage" VALUES('EPSG','11500','grid_transformation','EPSG','15489','EPSG','2895','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','15490','RRAF 1991 to IGN 1992 LD height (1)','May be used for transformations from WGS 84 to IGN 1992 LD. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5618',0.5,'EPSG','8666','Geoid (height correction) model file','ggg00_ld.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp Des',1); INSERT INTO "usage" VALUES('EPSG','11501','grid_transformation','EPSG','15490','EPSG','2893','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','15491','RRAF 1991 to IGN 1988 SB height (1)','May be used for transformations from WGS 84 to IGN 1988 SB. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5619',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_sb.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StB',1); INSERT INTO "usage" VALUES('EPSG','11502','grid_transformation','EPSG','15491','EPSG','2891','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','15492','RRAF 1991 to IGN 1988 SM height (1)','May be used for transformations from WGS 84 to IGN 1988 SM. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5620',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_sm.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StM',1); INSERT INTO "usage" VALUES('EPSG','11503','grid_transformation','EPSG','15492','EPSG','2890','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','15781','WGS 84 to EGM84 height (1)','File may also be found named as "EGM84.GRD". An executable using spherical harmonics is also available. Replaced by WGS 84 to EGM96 height (1) (CT code 10084).','EPSG','9661','Geographic3D to GravityRelatedHeight (EGM)','EPSG','4979','EPSG','5798',1.0,'EPSG','8666','Geoid (height correction) model file','DIRACC.DAT',NULL,NULL,NULL,NULL,NULL,NULL,'NGA-World',0); INSERT INTO "usage" VALUES('EPSG','11792','grid_transformation','EPSG','15781','EPSG','1262','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','15785','AGD84 to WGS 84 (9)','Parameter values from AGD84 to GDA94 (5) (code 1804). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9615','NTv2','EPSG','4203','EPSG','4326',2.9,'EPSG','8656','Latitude and longitude difference file','National 84 (02.07.01).gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Aus 1m',0); INSERT INTO "usage" VALUES('EPSG','11796','grid_transformation','EPSG','15785','EPSG','2576','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15786','AGD66 to WGS 84 (17)','Parameter values from AGD66 to GDA94 (11) (code 1803). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9615','NTv2','EPSG','4202','EPSG','4326',2.9,'EPSG','8656','Latitude and longitude difference file','A66 National (13.09.01).gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Aus 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11797','grid_transformation','EPSG','15786','EPSG','2575','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15834','NAD83 to NAD83(HARN) (44)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 15835.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','nchpgn.las','EPSG','8658','Longitude difference file','nchpgn.los',NULL,NULL,'NGS-Usa NC',0); INSERT INTO "usage" VALUES('EPSG','11845','grid_transformation','EPSG','15834','EPSG','1402','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','15835','NAD83 to WGS 84 (55)','Parameter files are from NAD83 to NAD83(HARN) (44) (code 15834) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','nchpgn.las','EPSG','8658','Longitude difference file','nchpgn.los',NULL,NULL,'OGP-Usa NC',0); INSERT INTO "usage" VALUES('EPSG','11846','grid_transformation','EPSG','15835','EPSG','1402','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15836','NAD83 to NAD83(HARN) (45)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 15837.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','schpgn.las','EPSG','8658','Longitude difference file','schpgn.los',NULL,NULL,'NGS-Usa SC',0); INSERT INTO "usage" VALUES('EPSG','11847','grid_transformation','EPSG','15836','EPSG','1409','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','15837','NAD83 to WGS 84 (56)','Parameter files are from NAD83 to NAD83(HARN) (45) (code 15836) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','schpgn.las','EPSG','8658','Longitude difference file','schpgn.los',NULL,NULL,'OGP-Usa SC',0); INSERT INTO "usage" VALUES('EPSG','11848','grid_transformation','EPSG','15837','EPSG','1409','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15838','NAD83 to NAD83(HARN) (46)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 15839.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','pahpgn.las','EPSG','8658','Longitude difference file','pahpgn.los',NULL,NULL,'NGS-Usa PA',0); INSERT INTO "usage" VALUES('EPSG','11849','grid_transformation','EPSG','15838','EPSG','1407','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','15839','NAD83 to WGS 84 (57)','Parameter files are from NAD83 to NAD83(HARN) (46) (code 15838) assuming that NAD83(HARN) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4269','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','pahpgn.las','EPSG','8658','Longitude difference file','pahpgn.los',NULL,NULL,'OGP-Usa PA',0); INSERT INTO "usage" VALUES('EPSG','11850','grid_transformation','EPSG','15839','EPSG','1407','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15840','Old Hawaiian to WGS 84 (8)','Parameter files are from Old Hawaiian to NAD83 (1) (code 1454) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4135','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','hawaii.las','EPSG','8658','Longitude difference file','hawaii.los',NULL,NULL,'OGP-Usa HI 2m',0); INSERT INTO "usage" VALUES('EPSG','11851','grid_transformation','EPSG','15840','EPSG','1334','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15841','Puerto Rico to WGS 84 (4)','Parameter files are from Puerto Rico to NAD83 (1) (code 1461) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4139','EPSG','4326',2.0,'EPSG','8657','Latitude difference file','prvi.las','EPSG','8658','Longitude difference file','prvi.los',NULL,NULL,'OGP-Pri 2m',0); INSERT INTO "usage" VALUES('EPSG','11852','grid_transformation','EPSG','15841','EPSG','3294','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15851','NAD27 to WGS 84 (79)','Parameter files are from NAD27 to NAD83 (1) (code 1241) assuming that NAD83 is equivalent to WGS 84 within the accuracy of this tfm. Uses NADCON method which expects longitudes positive west; EPSG CRS codes 4267 and 4326 have longitudes positive east.','EPSG','9613','NADCON','EPSG','4267','EPSG','4326',5.0,'EPSG','8657','Latitude difference file','conus.las','EPSG','8658','Longitude difference file','conus.los',NULL,NULL,'OGP-Usa Conus',0); INSERT INTO "usage" VALUES('EPSG','11862','grid_transformation','EPSG','15851','EPSG','2374','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15864','NAD27 to WGS 84 (85)','Parameter files are from NAD27 to NAD83 (2) (code 1243) assuming that NAD83 is equivalent to WGS 84 within the accuracy of this tfm. Uses NADCON method which expects longitudes positive west; EPSG CRS codes 4267 and 4326 have longitudes positive east.','EPSG','9613','NADCON','EPSG','4267','EPSG','4326',5.0,'EPSG','8657','Latitude difference file','alaska.las','EPSG','8658','Longitude difference file','alaska.los',NULL,NULL,'OGP-Usa AK',0); INSERT INTO "usage" VALUES('EPSG','11875','grid_transformation','EPSG','15864','EPSG','2373','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15895','ED50 to ETRS89 (11)','May be taken as approximate transformation ED50 to WGS 84 - see code 15907. NOTE: Parameter file is non-conformant with NTv2 specification - replaced by ED50 to ETRS89 (12) (code 15932).','EPSG','9615','NTv2','EPSG','4230','EPSG','4258',0.2,'EPSG','8656','Latitude and longitude difference file','sped2et.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp',1); INSERT INTO "usage" VALUES('EPSG','11906','grid_transformation','EPSG','15895','EPSG','3429','EPSG','1152'); INSERT INTO "grid_transformation" VALUES('EPSG','15907','ED50 to WGS 84 (40)','Parameter values from ED50 to ETRS89 (11) (code 15895). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. NOTE: Parameter file is non-conformant with NTv2 specification - replaced by ED50 to WGS 84 (41).','EPSG','9615','NTv2','EPSG','4230','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','sped2et.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Esp',1); INSERT INTO "usage" VALUES('EPSG','11918','grid_transformation','EPSG','15907','EPSG','3429','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','15932','ED50 to ETRS89 (12)','Replaces ED50 to ETRS89 (11) (code 15895) - see supersession record. May be taken as approximate transformation ED50 to WGS 84 - see code 15933.','EPSG','9615','NTv2','EPSG','4230','EPSG','4258',0.2,'EPSG','8656','Latitude and longitude difference file','SPED2ETV2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp v2',0); INSERT INTO "usage" VALUES('EPSG','11943','grid_transformation','EPSG','15932','EPSG','3429','EPSG','1152'); INSERT INTO "grid_transformation" VALUES('EPSG','15933','ED50 to WGS 84 (41)','Parameter values from ED50 to ETRS89 (12) (code 15932). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaces ED50 to WGS 84 (40) - see supersession record.','EPSG','9615','NTv2','EPSG','4230','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','SPED2ETV2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Esp v2',0); INSERT INTO "usage" VALUES('EPSG','11944','grid_transformation','EPSG','15933','EPSG','3429','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15940','NTF to RGF93 (2)','Emulation using NTv2 method of France Geocentric Interpolation method tfm NTF to RGF93 (1), code 1053. May be taken as approximate transformation to ETRS89 or WGS 84 - see tfm codes 15941 and 15942.','EPSG','9615','NTv2','EPSG','4275','EPSG','4171',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Fra 1m emulation',1); INSERT INTO "usage" VALUES('EPSG','11951','grid_transformation','EPSG','15940','EPSG','1326','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','15941','NTF to ETRS89 (3)','These parameter values are taken from NTF to RGR93 (2) (code 15940) as RGR93 may be considered equivalent to ETRS89 within the accuracy of the transformation. Emulation of France Geocentric Interpolation method tfm code 1054.','EPSG','9615','NTv2','EPSG','4275','EPSG','4258',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',1); INSERT INTO "usage" VALUES('EPSG','11952','grid_transformation','EPSG','15941','EPSG','1326','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','15942','NTF to WGS 84 (3)','These parameter values are taken from NTF to RGR93 (2) (code 15940) as RGR93 may be considered equivalent to WGS 84 within the accuracy of the transformation. Emulation of France Geocentric Interpolation method tfm code 15939.','EPSG','9615','NTv2','EPSG','4275','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',1); INSERT INTO "usage" VALUES('EPSG','11953','grid_transformation','EPSG','15942','EPSG','1326','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','15944','NEA74 Noumea to RGNC91-93 (4)','Emulation using NTv2 method of tfm NEA74 Noumea to RGNC91-93 (3) (code 15943).','EPSG','9615','NTv2','EPSG','4644','EPSG','4749',0.05,'EPSG','8656','Latitude and longitude difference file','RGNC1991_NEA74Noumea.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.05m',1); INSERT INTO "usage" VALUES('EPSG','11955','grid_transformation','EPSG','15944','EPSG','2823','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','15947','IGN72 Grande Terre to RGNC91-93 (6)','Emulation using NTv2 method of tfm IGN72 Grande Terre to RGNC91-93 (4) (code 15945).','EPSG','9615','NTv2','EPSG','4662','EPSG','4749',0.1,'EPSG','8656','Latitude and longitude difference file','RGNC1991_IGN72GrandeTerre.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.1m',1); INSERT INTO "usage" VALUES('EPSG','11958','grid_transformation','EPSG','15947','EPSG','2822','EPSG','1031'); INSERT INTO "grid_transformation" VALUES('EPSG','15948','DHDN to ETRS89 (8)','Developed for ATKIS (Amtliches Topographisch-Kartographisches Informationssystem [Official Topographic and Cartographic Information System]). Provides a uniform transformation across the whole country. May be used as tfm to WGS 84 - see tfm code 15949.','EPSG','9615','NTv2','EPSG','4314','EPSG','4258',0.9,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu BeTA2007',0); INSERT INTO "usage" VALUES('EPSG','11959','grid_transformation','EPSG','15948','EPSG','3339','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','15949','DHDN to WGS 84 (4)','These parameter values are taken from DHDN to ETRS89 (8) (code 15948) as ETRS89 may be considered equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4314','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu BeTA2007',0); INSERT INTO "usage" VALUES('EPSG','11960','grid_transformation','EPSG','15949','EPSG','3339','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15954','RD/83 to WGS 84 (1)','Parameter values from taken DHDN to ETRS89 (8) (code 15948) as RD/83 and ETRS89 may be considered equivalent to DHDN and WGS 84 respectively within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4745','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu BeTA2007',0); INSERT INTO "usage" VALUES('EPSG','11965','grid_transformation','EPSG','15954','EPSG','2545','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15955','PD/83 to WGS 84 (1)','Parameter values taken from DHDN to ETRS89 (8) (code 15948) as PD/83 and ETRS89 may be considered equivalent to DHDN and WGS 84 respectively within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4746','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu BeTA2007',0); INSERT INTO "usage" VALUES('EPSG','11966','grid_transformation','EPSG','15955','EPSG','2544','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15958','RGF93 v1 to NTF (2)','Emulation using NTv2 method of NTF to RGF93 v1 (1), code 9327. Note that grid file parameters are of opposite sign. May be taken as approximate CT to ETRS89 or WGS 84 (see codes 15959 and 15960). Also used to transform later realizations of RGF93 to NTF.','EPSG','9615','NTv2','EPSG','4171','EPSG','4275',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Fra 1m emulation',0); INSERT INTO "usage" VALUES('EPSG','11969','grid_transformation','EPSG','15958','EPSG','3694','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','15959','ETRS89 to NTF (3)','These parameter values are taken from RGF93 to NTF (2) (code 15958) as RGF93 may be considered equivalent to ETRS89 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4258','EPSG','4275',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',0); INSERT INTO "usage" VALUES('EPSG','11970','grid_transformation','EPSG','15959','EPSG','3694','EPSG','1041'); INSERT INTO "grid_transformation" VALUES('EPSG','15960','WGS 84 to NTF (3)','These parameter values are taken from RGF93 to NTF (2) (code 15958) as RGF93 may be considered equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4326','EPSG','4275',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',0); INSERT INTO "usage" VALUES('EPSG','11971','grid_transformation','EPSG','15960','EPSG','3694','EPSG','1252'); INSERT INTO "grid_transformation" VALUES('EPSG','15961','RGNC91-93 to NEA74 Noumea (4)','Emulation using NTv2 method of tfm NEA74 Noumea to RGNC91-93 (3) (code 15943). Note reversal of sign of parameter values in grid file.','EPSG','9615','NTv2','EPSG','4749','EPSG','4644',0.05,'EPSG','8656','Latitude and longitude difference file','RGNC1991_IGN72GrandeTerre.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.05m',1); INSERT INTO "usage" VALUES('EPSG','11972','grid_transformation','EPSG','15961','EPSG','2823','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','15962','RGNC91-93 to IGN72 Grande Terre (6)','Emulation using NTv2 method of tfm IGN72 Grande Terre to RGNC91-93 (4) (code 9329). Note reversal sign of of parameter values in grid file.','EPSG','9615','NTv2','EPSG','4749','EPSG','4662',0.1,'EPSG','8656','Latitude and longitude difference file','RGNC1991_IGN72GrandeTerre.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11973','grid_transformation','EPSG','15962','EPSG','2822','EPSG','1031'); proj-9.6.0/data/sql/grid_transformation_custom.sql000664 001754 001755 00000012213 14764566077 022316 0ustar00e012349e012349000000 000000 -- This file is hand generated. -- Denmark INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_4937_TO_EPSG_5733','ETRS89 to DNN height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','4937', -- source CRS (ETRS89) 'EPSG','5733', -- target CRS (DNN height) NULL, 'EPSG','8666','Geoid (height correction) model file','dnn.gtx', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_4937_TO_EPSG_5733_USAGE', 'grid_transformation', 'PROJ', 'EPSG_4937_TO_EPSG_5733', 'EPSG','3237', -- area of use: Denmark onshore 'EPSG','1024' -- unknown ); -- Faroe Islands INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_4937_TO_EPSG_5317','ETRS89 to FVR09 height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','4937', -- source CRS (ETRS89) 'EPSG','5317', -- target CRS (FVR09 height) NULL, 'EPSG','8666','Geoid (height correction) model file','fvr09.gtx', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_4937_TO_EPSG_5317_USAGE', 'grid_transformation', 'PROJ', 'EPSG_4937_TO_EPSG_5317', 'EPSG','3248', -- area of use: Faroe Islands - onshore 'EPSG','1024' -- unknown ); -- Sweden INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_4977_TO_EPSG_5613','SWEREF99 to RH2000 height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','4977', -- source CRS (SWEREF99) 'EPSG','5613', -- target CRS (RH2000 height) NULL, 'EPSG','8666','Geoid (height correction) model file','SWEN17_RH2000.gtx', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_4977_TO_EPSG_5613_USAGE', 'grid_transformation', 'PROJ', 'EPSG_4977_TO_EPSG_5613', 'EPSG','3313', -- area of use: Sweden onshore 'EPSG','1024' -- unknown ); -- Japan INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_6667_TO_EPSG_6695','JDG2011 to JGD2011 height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','6667', -- source CRS (JDG2011) 'EPSG','6695', -- target CRS (JDG2011 (vertical) height) NULL, 'EPSG','8666','Geoid (height correction) model file','jp_gsi_gsigeo2011.tif', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_6667_TO_EPSG_6695_USAGE', 'grid_transformation', 'PROJ', 'EPSG_6667_TO_EPSG_6695', 'EPSG','3263', -- area of use: Japan - onshore mainland 'EPSG','1024' -- unknown ); -- Switzerland INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_4937_TO_EPSG_5729','ETRS89 to LHN95 height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','4937', -- source CRS (ETRS89) 'EPSG','5729', -- target CRS (LHN95 height) NULL, 'EPSG','8666','Geoid (height correction) model file','chgeo2004_ETRS.agr', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_4937_TO_EPSG_5729_USAGE', 'grid_transformation', 'PROJ', 'EPSG_4937_TO_EPSG_5729', 'EPSG','1286', -- area of use: Europe - Liechtenstein and Switzerland 'EPSG','1024' -- unknown ); INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_4937_TO_EPSG_5728','ETRS89 to LN02 height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','4937', -- source CRS (ETRS89) 'EPSG','5728', -- target CRS (LN02 height) NULL, 'EPSG','8666','Geoid (height correction) model file','chgeo2004_htrans_ETRS.agr', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_4937_TO_EPSG_5728_USAGE', 'grid_transformation', 'PROJ', 'EPSG_4937_TO_EPSG_5728', 'EPSG','1286', -- area of use: Europe - Liechtenstein and Switzerland 'EPSG','1024' -- unknown ); -- Mexico INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_6364_TO_EPSG_5703','Mexico ITRF2008 to NAVD88 height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','6364', -- source CRS (Mexico ITRF2008) 'EPSG','5703', -- target CRS (NAVD88 height) NULL, 'EPSG','8666','Geoid (height correction) model file','GGM10.txt', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_6364_TO_EPSG_5703_USAGE', 'grid_transformation', 'PROJ', 'EPSG_6364_TO_EPSG_5703', 'EPSG','3278', -- area of use: Mexico - onshore 'EPSG','1024' -- unknown ); -- Latvia INSERT INTO "grid_transformation" VALUES( 'PROJ','EPSG_4949_TO_EPSG_7700','LKS-92 to Latvia 2000 height', NULL, 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', 'EPSG','4949', -- source CRS (LKS-92) 'EPSG','7700', -- target CRS (Latvia 2000 height) NULL, 'EPSG','8666','Geoid (height correction) model file','lv_lgia_lv14.tif', NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES( 'PROJ', 'EPSG_4949_TO_EPSG_7700_USAGE', 'grid_transformation', 'PROJ', 'EPSG_4949_TO_EPSG_7700', 'EPSG','3268', -- area of use: Latvia - onshore 'EPSG','1024' -- unknown );proj-9.6.0/data/sql/helmert_transformation.sql000664 001754 001755 00003615361 14764566077 021457 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF89','ETRS89 to ETRF89','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9059',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF89_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF89','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF90','ETRS89 to ETRF90','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9060',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF90_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF90','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF91','ETRS89 to ETRF91','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9061',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF91_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF91','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF92','ETRS89 to ETRF92','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9062',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF92_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF92','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF93','ETRS89 to ETRF93','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9063',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF93_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF93','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF94','ETRS89 to ETRF94','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9064',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF94_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF94','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF96','ETRS89 to ETRF96','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9065',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF96_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF96','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF97','ETRS89 to ETRF97','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9066',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF97_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF97','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF2000','ETRS89 to ETRF2000','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9067',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF2000_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF2000','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF2005','ETRS89 to ETRF2005','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9068',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF2005_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF2005','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF2014','ETRS89 to ETRF2014','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','9069',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF2014_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF2014','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','ETRS89_TO_ETRF2020','ETRS89 to ETRF2020','Accuracy 0.1 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','10571',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_ETRF2020_USAGE','helmert_transformation','PROJ','ETRS89_TO_ETRF2020','EPSG','1298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_TRANSIT','WGS 84 to WGS 84 (Transit)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','8888',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_TRANSIT_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_TRANSIT','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G730','WGS 84 to WGS 84 (G730)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9053',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_G730_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_G730','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G873','WGS 84 to WGS 84 (G873)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9054',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_G873_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_G873','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G1150','WGS 84 to WGS 84 (G1150)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9055',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_G1150_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_G1150','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G1674','WGS 84 to WGS 84 (G1674)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9056',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_G1674_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_G1674','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G1762','WGS 84 to WGS 84 (G1762)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9057',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_G1762_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_G1762','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G2139','WGS 84 to WGS 84 (G2139)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9755',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_G2139_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_G2139','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G2296','WGS 84 to WGS 84 (G2296)','Accuracy 2.0 m, from datum ensemble definition','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','10606',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','WGS84_TO_WGS84_G2296_USAGE','helmert_transformation','PROJ','WGS84_TO_WGS84_G2296','EPSG','1262','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1024','MGI to ETRS89 (4)','Parameter values from MGI to WGS 84 (8) (tfm code 1194). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Information source gives scale as -2.388739 ppm.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4258',1.0,601.705,84.263,485.227,'EPSG','9001',-4.7354,-1.3145,-5.393,'EPSG','9104',-2.3887,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LBD-Aut Sty',0); INSERT INTO "usage" VALUES('EPSG','7945','helmert_transformation','EPSG','1024','EPSG','1543','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1055','Ain el Abd to WGS 84 (3)','Derived at station K1.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-145.7,-249.1,1.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'WGC-Kwt',0); INSERT INTO "usage" VALUES('EPSG','7976','helmert_transformation','EPSG','1055','EPSG','3267','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1056','Ain el Abd to WGS 84 (4)','Derivation is more precise, but no evidence that accuracy is better than Ain el Abd to WGS 84 (3). OGP recommends using Ain el Abd to WGS 84 (3).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-85.645,-273.077,-79.708,'EPSG','9001',-2.289,1.421,-2.532,'EPSG','9104',3.194,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt',0); INSERT INTO "usage" VALUES('EPSG','7977','helmert_transformation','EPSG','1056','EPSG','3267','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1057','Ain el Abd to WGS 84 (5)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-202.234,-168.351,-63.51,'EPSG','9001',-3.545,-0.659,1.945,'EPSG','9104',2.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt N',0); INSERT INTO "usage" VALUES('EPSG','7978','helmert_transformation','EPSG','1057','EPSG','2956','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1058','Ain el Abd to WGS 84 (6)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-18.944,-379.364,-24.063,'EPSG','9001',-0.04,0.764,-6.431,'EPSG','9104',3.657,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt S',0); INSERT INTO "usage" VALUES('EPSG','7979','helmert_transformation','EPSG','1058','EPSG','2957','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1059','KOC to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4246','EPSG','4326',1.0,-294.7,-200.1,525.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'WGC-Kwt',0); INSERT INTO "usage" VALUES('EPSG','7980','helmert_transformation','EPSG','1059','EPSG','3267','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1060','NGN to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4318','EPSG','4326',1.0,-3.2,-5.7,2.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Mun-Kwt',0); INSERT INTO "usage" VALUES('EPSG','7981','helmert_transformation','EPSG','1060','EPSG','3267','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1061','Kudams to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4319','EPSG','4326',1.0,-20.8,11.3,2.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Mun-Kwt',0); INSERT INTO "usage" VALUES('EPSG','7982','helmert_transformation','EPSG','1061','EPSG','1310','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1062','Kudams to WGS 84 (2)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4319','EPSG','4326',1.0,226.702,-193.337,-35.371,'EPSG','9001',2.229,4.391,-9.238,'EPSG','9104',0.9798,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt',0); INSERT INTO "usage" VALUES('EPSG','7983','helmert_transformation','EPSG','1062','EPSG','1310','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1063','Vientiane 1982 to Lao 1997 (1)','Derived at 8 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4676','EPSG','4678',2.0,-2.227,6.524,2.178,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGD-Lao',0); INSERT INTO "usage" VALUES('EPSG','7984','helmert_transformation','EPSG','1063','EPSG','1138','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1064','Lao 1993 to Lao 1997 (1)','Derived at 25 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4677','EPSG','4678',0.15,-0.652,1.619,0.213,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGD-Lao',0); INSERT INTO "usage" VALUES('EPSG','7985','helmert_transformation','EPSG','1064','EPSG','1138','EPSG','1078'); INSERT INTO "helmert_transformation" VALUES('EPSG','1065','Lao 1997 to WGS 84 (1)','Derived at 25 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4678','EPSG','4326',5.0,44.585,-131.212,-39.544,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGD-Lao',0); INSERT INTO "usage" VALUES('EPSG','7986','helmert_transformation','EPSG','1065','EPSG','1138','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1066','Amersfoort to ETRS89 (2)','Replaced by Amersfoort to ETRS89 (4) (tfm code 15740). Dutch sources also quote an equivalent transformation using the Coordinate Frame 7-parameter method - see tfm code 1751.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4289','EPSG','4258',0.5,593.032,26.0,478.741,'EPSG','9001',1.9848,-1.7439,9.0587,'EPSG','9109',4.0772,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3903453.148,368135.313,5012970.306,'EPSG','9001','NCG-Nld 2000 MB',0); INSERT INTO "usage" VALUES('EPSG','7987','helmert_transformation','EPSG','1066','EPSG','1275','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','1067','Minna to WGS 84 (11)','Used by Statoil for deep water blocks 210, 213, 217 and 218. Parameter values interpolated from Racal Survey geocentric translation contour charts for each of these four blocks and then meaned.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',8.0,-92.1,-89.9,114.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Stat-Nga',0); INSERT INTO "usage" VALUES('EPSG','7988','helmert_transformation','EPSG','1067','EPSG','3817','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1070','Guam 1963 to WGS 84 (1)','Derived at 5 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4675','EPSG','4326',6.0,-100.0,-248.0,259.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gum',0); INSERT INTO "usage" VALUES('EPSG','7991','helmert_transformation','EPSG','1070','EPSG','3255','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1071','Palestine 1923 to Israel 1993 (1)','For more accurate transformation contact Survey of Israel.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4281','EPSG','4141',1.5,-181.0,-122.0,225.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SoI-Isr',0); INSERT INTO "usage" VALUES('EPSG','14559','helmert_transformation','EPSG','1071','EPSG','2603','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1073','Israel 1993 to WGS 84 (1)','For more accurate transformation contact Survey of Israel.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4141','EPSG','4326',2.0,-48.0,55.0,52.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SoI-Isr',0); INSERT INTO "usage" VALUES('EPSG','14558','helmert_transformation','EPSG','1073','EPSG','2603','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1074','Palestine 1923 to WGS 84 (1)','Accuracy: 1m to north and 5m to south of east-west line through Beersheba (31°15''N). Not recognised by Survey of Israel. See Palestine 1923 to WGS 84 (2) (code 8650).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4281','EPSG','4326',2.0,-275.7224,94.7824,340.8944,'EPSG','9001',-8.001,-4.42,-11.821,'EPSG','9104',1.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Isr',0); INSERT INTO "usage" VALUES('EPSG','7995','helmert_transformation','EPSG','1074','EPSG','2603','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1075','ED50 to WGS 84 (38)','Derived in 1987 by Geodetic for TPAO. Used on BP 1991/92 2D seismic surveys in central and eastern Turkish sector of Black Sea. In Turkey, replaced by tfm code 1784. Also adopted for use offshore Israel.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',10.0,-89.05,-87.03,-124.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TPAO-Tur',0); INSERT INTO "usage" VALUES('EPSG','7996','helmert_transformation','EPSG','1075','EPSG','2896','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1078','LUREF to ETRS89 (2)','LUREF 1994 parameters. Replaced by LUREF 2006 parameters, see transformation LUREF to ETRS89 (4) (code 5483). May be taken as approximate transformation LUREF to WGS 84 - see CT code 1079.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.1,-265.983,76.918,20.182,'EPSG','9001',0.4099,2.9332,-2.6881,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4098647.674,442843.139,4851251.093,'EPSG','9001','ACT-Lux 0.1m',0); INSERT INTO "usage" VALUES('EPSG','7999','helmert_transformation','EPSG','1078','EPSG','1146','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1079','LUREF to WGS 84 (2)','Parameter values from LUREF to ETRS89 (2) (code 1078). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4326',1.0,-265.983,76.918,20.182,'EPSG','9001',0.4099,2.9332,-2.6881,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4098647.674,442843.139,4851251.093,'EPSG','9001','EPSG-Lux 1994',0); INSERT INTO "usage" VALUES('EPSG','8000','helmert_transformation','EPSG','1079','EPSG','1146','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1080','CI1971 to WGS 84 (1)','Derived at 4 stations. Accuracy 15m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4672','EPSG','4326',26.0,175.0,-38.0,113.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Nzl CI',0); INSERT INTO "usage" VALUES('EPSG','8001','helmert_transformation','EPSG','1080','EPSG','2889','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1081','CI1979 to WGS 84 (1)','Derived at 4 stations using concatenation through WGS72. Parameter vales are also used to transform CI1979 to NZGD2000 - see tfm code 1082.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4673','EPSG','4326',2.0,174.05,-25.49,112.57,'EPSG','9001',0.0,0.0,-0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl CI',0); INSERT INTO "usage" VALUES('EPSG','8002','helmert_transformation','EPSG','1081','EPSG','2889','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1082','CI1979 to NZGD2000 (1)','Parameter vales are from CI1979 to WGS 84 (1) (code 1081) assuming that WGS 84 is equivalent to NZGD2000 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4673','EPSG','4167',2.0,174.05,-25.49,112.57,'EPSG','9001',0.0,0.0,-0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl CI',0); INSERT INTO "usage" VALUES('EPSG','8003','helmert_transformation','EPSG','1082','EPSG','2889','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1083','JAD69 to WGS 72 (2)','Derived in 1981 through Transit observations at 4 stations by Geodetic Survey for Petroleum Corporation of Jamaica.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4242','EPSG','4322',10.0,50.0,212.0,381.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PC-Jam',0); INSERT INTO "usage" VALUES('EPSG','8004','helmert_transformation','EPSG','1083','EPSG','3342','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1084','JAD69 to WGS 84 (1)','Derived via NAD27 and WGS 72. Preliminary values derived by Survey Department but not officially promulgated.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4242','EPSG','4326',5.0,70.0,207.0,389.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Jam 5m',0); INSERT INTO "usage" VALUES('EPSG','8005','helmert_transformation','EPSG','1084','EPSG','3342','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1085','JAD69 to WGS 84 (2)','Derived at 4 stations, tested at a further 9.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4242','EPSG','4326',2.0,65.334,212.46,387.63,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Jam 2m',0); INSERT INTO "usage" VALUES('EPSG','8006','helmert_transformation','EPSG','1085','EPSG','3342','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1086','JAD69 to WGS 84 (3)','Derived at 4 stations, tested at a further 9.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4242','EPSG','4326',1.0,-33.722,153.789,94.959,'EPSG','9001',8.581,4.478,-4.54,'EPSG','9104',-8.95,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Jam 1m',1); INSERT INTO "usage" VALUES('EPSG','8007','helmert_transformation','EPSG','1086','EPSG','3342','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1087','ED50 to WGS 84 (37)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',2.5,-112.0,-110.3,-140.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RJGC-Jor',0); INSERT INTO "usage" VALUES('EPSG','8008','helmert_transformation','EPSG','1087','EPSG','1130','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','1088','Monte Mario to WGS 84 (5)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',10.0,-223.7,-67.38,1.34,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENI-Ita Adr N Anc',0); INSERT INTO "usage" VALUES('EPSG','8009','helmert_transformation','EPSG','1088','EPSG','2882','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1089','Monte Mario to WGS 84 (6)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',10.0,-225.4,-67.7,7.85,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENI-Ita Adr Anc-Gar',0); INSERT INTO "usage" VALUES('EPSG','8010','helmert_transformation','EPSG','1089','EPSG','2883','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1090','Monte Mario to WGS 84 (7)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',10.0,-227.1,-68.1,14.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENI-Ita Adr S Gar',0); INSERT INTO "usage" VALUES('EPSG','8011','helmert_transformation','EPSG','1090','EPSG','2884','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1091','Monte Mario to WGS 84 (8)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',10.0,-231.61,-68.21,13.93,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENI-Ita Otr',0); INSERT INTO "usage" VALUES('EPSG','8012','helmert_transformation','EPSG','1091','EPSG','2885','EPSG','1251'); INSERT INTO "helmert_transformation" VALUES('EPSG','1092','Monte Mario to WGS 84 (9)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',10.0,-225.06,-67.37,14.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENI-Ita N Jon',0); INSERT INTO "usage" VALUES('EPSG','8013','helmert_transformation','EPSG','1092','EPSG','2886','EPSG','1251'); INSERT INTO "helmert_transformation" VALUES('EPSG','1093','Monte Mario to WGS 84 (10)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',10.0,-229.08,-65.73,20.21,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENI-Ita E Sic',0); INSERT INTO "usage" VALUES('EPSG','8014','helmert_transformation','EPSG','1093','EPSG','2887','EPSG','1251'); INSERT INTO "helmert_transformation" VALUES('EPSG','1094','Monte Mario to WGS 84 (11)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',10.0,-230.47,-56.08,22.43,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENI-Ita W Sic',0); INSERT INTO "usage" VALUES('EPSG','8015','helmert_transformation','EPSG','1094','EPSG','2888','EPSG','1251'); INSERT INTO "helmert_transformation" VALUES('EPSG','1095','PSAD56 to WGS 84 (13)','Parameter values are from PSAD56 to REGVEN (1) (code 1769) assuming that REGVEN is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4248','EPSG','4326',15.0,-270.933,115.599,-360.226,'EPSG','9001',-5.266,-1.238,2.381,'EPSG','9104',-5.109,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2464351.59,-5783466.61,974809.81,'EPSG','9001','EPSG-Ven',0); INSERT INTO "usage" VALUES('EPSG','8016','helmert_transformation','EPSG','1095','EPSG','3327','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1096','La Canoa to WGS 84 (13)','Parameter values are from La Canoa to REGVEN (1) (code 1771) assuming that REGVEN is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4247','EPSG','4326',15.0,-270.933,115.599,-360.226,'EPSG','9001',-5.266,-1.238,2.381,'EPSG','9104',-5.109,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2464351.59,-5783466.61,974809.81,'EPSG','9001','EPSG-Ven',0); INSERT INTO "usage" VALUES('EPSG','8017','helmert_transformation','EPSG','1096','EPSG','3327','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1097','Dealul Piscului 1970 to WGS 84 (2)','Parameter values taken from Pulkovo 1942 to WGS 84 (9) (code 1293) assuming that Pulkovo 1942 in Romania is equivalent to Dealul Piscului 1970.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4317','EPSG','4326',7.0,28.0,-121.0,-77.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Rom',1); INSERT INTO "usage" VALUES('EPSG','8018','helmert_transformation','EPSG','1097','EPSG','1197','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1098','IGM95 to ETRS89 (1)','IGM95 is the first Italian realization of ETRS89. May be taken as approximate transformation IGM95 to WGS 84 - see code 1099. For accurate transformation to a later realization see IGM95 to RDN2008 (1) (CT code 9737).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4670','EPSG','4258',0.5,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','14407','helmert_transformation','EPSG','1098','EPSG','3343','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','1099','IGM95 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. IGM95 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4670','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0); INSERT INTO "usage" VALUES('EPSG','14408','helmert_transformation','EPSG','1099','EPSG','3343','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1100','Adindan to WGS 84 (1)','Derived at 22 stations. Accuracy 5m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',9.0,-166.0,-15.0,204.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Eth Sud',0); INSERT INTO "usage" VALUES('EPSG','8021','helmert_transformation','EPSG','1100','EPSG','1271','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1101','Adindan to WGS 84 (2)','Derived at 1 station connected to the Adindan (Blue Nile 1958) network through the 1968-69 12th parallel traverse. Accuracy 25m in each axis. Note: the Adindan (Blue Nile 1958) CRS is used in Ethiopia and Sudan, not Burkino Faso.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',44.0,-118.0,-14.0,218.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bfa',0); INSERT INTO "usage" VALUES('EPSG','8022','helmert_transformation','EPSG','1101','EPSG','1057','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1102','Adindan to WGS 84 (3)','Derived at 1 station connected to the Adindan (Blue Nile 1958) network through the 1968-69 12th parallel traverse. Accuracy 25m in each axis. Note: the Adindan (Blue Nile 1958) CRS is used in Ethiopia and Sudan, not Cameroon.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',44.0,-134.0,-2.0,210.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cmr',0); INSERT INTO "usage" VALUES('EPSG','8023','helmert_transformation','EPSG','1102','EPSG','3226','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1103','Adindan to WGS 84 (4)','Derived at 8 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',6.0,-165.0,-11.0,206.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Eth',0); INSERT INTO "usage" VALUES('EPSG','8024','helmert_transformation','EPSG','1103','EPSG','1091','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1104','Adindan to WGS 84 (5)','Derived at 1 station connected to the Adindan (Blue Nile 1958) network through the 1968-69 12th parallel traverse. Accuracy 25m in each axis. Note: the Adindan (Blue Nile 1958) CRS is used in Ethiopia and Sudan, not Mali.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',44.0,-123.0,-20.0,220.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mli',0); INSERT INTO "usage" VALUES('EPSG','8025','helmert_transformation','EPSG','1104','EPSG','1153','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1105','Adindan to WGS 84 (6)','Derived at 2 stations connected to the Adindan (Blue Nile 1958) network through the 1968-69 12th parallel traverse. Accuracy 25m in each axis. Note: The Adindan (Blue Nile 1958) CRS is used in Ethiopia and Sudan, not Senegal.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',44.0,-128.0,-18.0,224.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Sen',0); INSERT INTO "usage" VALUES('EPSG','8026','helmert_transformation','EPSG','1105','EPSG','3304','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1106','Adindan to WGS 84 (7)','Derived at 14 stations. Accuracy 3m, 5m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',7.0,-161.0,-14.0,205.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Sud',0); INSERT INTO "usage" VALUES('EPSG','8027','helmert_transformation','EPSG','1106','EPSG','3311','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1107','Afgooye to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4205','EPSG','4326',44.0,-43.0,-163.0,45.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Som',0); INSERT INTO "usage" VALUES('EPSG','8028','helmert_transformation','EPSG','1107','EPSG','3308','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1108','AGD66 to WGS 84 (1)','Derived at 105 stations. Accuracy 3m in each axis. Replaced by AGD66 to WGS 84 (20) (code 6905).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326',6.0,-133.0,-48.0,148.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Aus',0); INSERT INTO "usage" VALUES('EPSG','8029','helmert_transformation','EPSG','1108','EPSG','2575','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1109','AGD84 to WGS 84 (1)','Derived at 90 stations. Accuracy 2m in each axis. Note: AGD84 officially adopted only in Queensland, South Australia and Western Australia.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4203','EPSG','4326',4.0,-134.0,-48.0,149.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Aus',0); INSERT INTO "usage" VALUES('EPSG','8030','helmert_transformation','EPSG','1109','EPSG','2576','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1110','Ain el Abd to WGS 84 (1)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4204','EPSG','4326',44.0,-150.0,-250.0,-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bhr',0); INSERT INTO "usage" VALUES('EPSG','8031','helmert_transformation','EPSG','1110','EPSG','3943','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1111','Ain el Abd to WGS 84 (2)','Derived at 9 stations. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4204','EPSG','4326',18.0,-143.0,-236.0,7.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Sau',0); INSERT INTO "usage" VALUES('EPSG','8032','helmert_transformation','EPSG','1111','EPSG','3303','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1112','Amersfoort to WGS 84 (1)','Replaced by Amersfoort to WGS 84 (2) (code 1672).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4289','EPSG','4326',1.0,593.16,26.15,478.54,'EPSG','9001',-6.3239,-0.5008,-5.5487,'EPSG','9109',4.0775,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NCG-Nld 93',0); INSERT INTO "usage" VALUES('EPSG','8033','helmert_transformation','EPSG','1112','EPSG','1275','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1113','Arc 1950 to WGS 84 (1)','Derived at 41 stations. Accuracy 20m, 33m and 20m in X, Y and Z axes. Note: Eswatini and Lesotho do not use Arc 1950 but do use Cape (CRS code 4222); Cape and Arc 1950 datums share a common fundamental point.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',44.0,-143.0,-90.0,-294.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-mean',0); INSERT INTO "usage" VALUES('EPSG','8034','helmert_transformation','EPSG','1113','EPSG','2312','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1114','Arc 1950 to WGS 84 (2)','Derived at 9 stations. Accuracy 3m, 5m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',7.0,-138.0,-105.0,-289.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bwa',0); INSERT INTO "usage" VALUES('EPSG','8035','helmert_transformation','EPSG','1114','EPSG','1051','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1115','Arc 1950 to WGS 84 (3)','Derived at 3 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',35.0,-153.0,-5.0,-292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bdi',1); INSERT INTO "usage" VALUES('EPSG','8036','helmert_transformation','EPSG','1115','EPSG','1058','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1116','Arc 1950 to WGS 84 (4)','Derived at 5 stations. Accuracy 3m, 3m and 8m in X, Y and Z axes. Note: Lesotho does not use Arc 1950 but does use Cape (CRS code 4222); Cape and Arc 1950 datums share a common fundamental point.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',10.0,-125.0,-108.0,-295.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Lso',0); INSERT INTO "usage" VALUES('EPSG','8037','helmert_transformation','EPSG','1116','EPSG','1141','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1117','Arc 1950 to WGS 84 (5)','Derived at 6 stations. Accuracy 9m, 24m and 8m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',27.0,-161.0,-73.0,-317.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mwi',0); INSERT INTO "usage" VALUES('EPSG','8038','helmert_transformation','EPSG','1117','EPSG','1150','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1118','Arc 1950 to WGS 84 (6)','Derived at 4 stations. Accuracy 15m in each axis. Note: Eswatini does not use Arc 1950 but does use Cape (CRS code 4222); Cape and Arc 1950 datums share a common fundamental point.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',26.0,-134.0,-105.0,-295.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Swz',0); INSERT INTO "usage" VALUES('EPSG','8039','helmert_transformation','EPSG','1118','EPSG','1224','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1119','Arc 1950 to WGS 84 (7)','Derived at 2 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',25.0,-169.0,-19.0,-278.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cod',1); INSERT INTO "usage" VALUES('EPSG','8040','helmert_transformation','EPSG','1119','EPSG','1259','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1120','Arc 1950 to WGS 84 (8)','Derived at 5 stations. Accuracy 21m, 21m and 27m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',41.0,-147.0,-74.0,-283.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Zmb',0); INSERT INTO "usage" VALUES('EPSG','8041','helmert_transformation','EPSG','1120','EPSG','1260','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1121','Arc 1950 to WGS 84 (9)','Derived at 10 stations. Accuracy 5m, 8m and 11m in X, Y and Z axes. Replaced by Arc 1950 to WGS 84 (10), tfm code 6906.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',15.0,-142.0,-96.0,-293.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Zwe',0); INSERT INTO "usage" VALUES('EPSG','8042','helmert_transformation','EPSG','1121','EPSG','1261','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1122','Arc 1960 to WGS 84 (1)','Derived at 25 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4210','EPSG','4326',35.0,-160.0,-6.0,-302.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ken Tza',0); INSERT INTO "usage" VALUES('EPSG','8043','helmert_transformation','EPSG','1122','EPSG','2311','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1123','Batavia to WGS 84 (1)','Note: The area of use cited for this transformation (Sumatra) is not consistent with the area of use (Java) for the Batavia (Genuk) coordinate reference system. Derived at 5 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4211','EPSG','4326',6.0,-377.0,681.0,-50.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Idn Sumatra',1); INSERT INTO "usage" VALUES('EPSG','8044','helmert_transformation','EPSG','1123','EPSG','1355','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1124','Bermuda 1957 to WGS 84 (1)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4216','EPSG','4326',35.0,-73.0,213.0,296.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bmu',0); INSERT INTO "usage" VALUES('EPSG','8045','helmert_transformation','EPSG','1124','EPSG','3221','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1125','Bogota 1975 to WGS 84 (1)','Derived in 1987 at 7 stations. Accuracy 6m, 5m and 6m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4218','EPSG','4326',10.0,307.0,304.0,-318.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Col',0); INSERT INTO "usage" VALUES('EPSG','8046','helmert_transformation','EPSG','1125','EPSG','3686','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1126','Bukit Rimpah to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4219','EPSG','4326',999.0,-384.0,664.0,-48.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Idn BBI',0); INSERT INTO "usage" VALUES('EPSG','8047','helmert_transformation','EPSG','1126','EPSG','1287','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1127','Campo Inchauspe to WGS 84 (1)','Derived at 20 stations. Accuracy 5m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4221','EPSG','4326',9.0,-148.0,136.0,90.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Arg',0); INSERT INTO "usage" VALUES('EPSG','8048','helmert_transformation','EPSG','1127','EPSG','3843','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1128','Cape to WGS 84 (1)','Derived at 5 stations. Accuracy 3m, 6m and 6m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4222','EPSG','4326',9.0,-136.0,-108.0,-292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Zaf',0); INSERT INTO "usage" VALUES('EPSG','8049','helmert_transformation','EPSG','1128','EPSG','3309','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1129','Cape to WGS 84 (2)','Parameter values are from Cape to Hartebeesthoek94 (1) (code 1504) assuming that Hartebeesthoek94 and WGS 84 are equivalent within the accuracy of the transformation. Residuals should not exceed 15 metres.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4222','EPSG','4326',15.0,-134.73,-110.92,-292.66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DSLI-Zaf',0); INSERT INTO "usage" VALUES('EPSG','8050','helmert_transformation','EPSG','1129','EPSG','3309','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1130','Carthage to WGS 84 (1)','Derived at 5 stations. Accuracy 6m, 9m and 8m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4223','EPSG','4326',14.0,-263.0,6.0,431.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Tun',0); INSERT INTO "usage" VALUES('EPSG','8051','helmert_transformation','EPSG','1130','EPSG','1236','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1131','Chua to WGS 84 (1)','Derived at 6 stations. Accuracy 6m, 9m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4224','EPSG','4326',12.0,-134.0,229.0,-29.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Pry',0); INSERT INTO "usage" VALUES('EPSG','8052','helmert_transformation','EPSG','1131','EPSG','3675','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1132','Corrego Alegre 1970-72 to WGS 84 (1)','Derived at 17 stations. Accuracy 5m, 3m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4225','EPSG','4326',8.0,-206.0,172.0,-6.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bra',0); INSERT INTO "usage" VALUES('EPSG','8053','helmert_transformation','EPSG','1132','EPSG','1293','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1133','ED50 to WGS 84 (1)','Derived at 85 stations. Accuracy 3m, 8m and 5m in X, Y and Z axes. In Germany will be accepted by LBA for minerals management purposes as alternative to tfm 1052 or 1998.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',10.0,-87.0,-98.0,-121.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-mean',0); INSERT INTO "usage" VALUES('EPSG','8054','helmert_transformation','EPSG','1133','EPSG','2420','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1134','ED50 to WGS 84 (2)','Derived at 52 stations. Accuracy 3m each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',6.0,-87.0,-96.0,-120.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-cenEur',0); INSERT INTO "usage" VALUES('EPSG','8055','helmert_transformation','EPSG','1134','EPSG','2421','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1135','ED50 to WGS 84 (3)','Accuracy estimate not available. Note: ED50 is not used in Israel, Lebanon, Kuwait, Saudi Arabia or Syria.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',999.0,-103.0,-106.0,-141.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-midEast',0); INSERT INTO "usage" VALUES('EPSG','8056','helmert_transformation','EPSG','1135','EPSG','2345','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1136','ED50 to WGS 84 (4)','Derived at 4 stations. Accuracy 15m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',26.0,-104.0,-101.0,-140.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cyp',0); INSERT INTO "usage" VALUES('EPSG','8057','helmert_transformation','EPSG','1136','EPSG','1078','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1137','ED50 to WGS 84 (5)','Derived at 14 stations. Accuracy 6m, 8m and 8m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',13.0,-130.0,-117.0,-151.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Egy',0); INSERT INTO "usage" VALUES('EPSG','8058','helmert_transformation','EPSG','1137','EPSG','2595','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1138','ED50 to WGS 84 (6)','Derived at 40 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',6.0,-86.0,-96.0,-120.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Irl Gbr',0); INSERT INTO "usage" VALUES('EPSG','8059','helmert_transformation','EPSG','1138','EPSG','2343','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1139','ED50 to WGS 84 (7)','Derived at 20 stations. Accuracy 3m, 5m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',7.0,-87.0,-95.0,-120.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Fin Nor',0); INSERT INTO "usage" VALUES('EPSG','8060','helmert_transformation','EPSG','1139','EPSG','2344','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1140','ED50 to WGS 84 (8)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',44.0,-84.0,-95.0,-130.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Grc',0); INSERT INTO "usage" VALUES('EPSG','8061','helmert_transformation','EPSG','1140','EPSG','3254','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1141','ED50(ED77) to WGS 84 (2)','Given by DMA as from ED50. OGP interpret that as ED50(ED77) in Iran. Derived at 27 stations. Accuracy 9m, 12m and 11m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4154','EPSG','4326',19.0,-117.0,-132.0,-164.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Irn',0); INSERT INTO "usage" VALUES('EPSG','8062','helmert_transformation','EPSG','1141','EPSG','1123','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1142','ED50 to WGS 84 (10)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',44.0,-97.0,-103.0,-120.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ita Sard',0); INSERT INTO "usage" VALUES('EPSG','8063','helmert_transformation','EPSG','1142','EPSG','2339','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1143','ED50 to WGS 84 (11)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',35.0,-97.0,-88.0,-135.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ita Sic',0); INSERT INTO "usage" VALUES('EPSG','8064','helmert_transformation','EPSG','1143','EPSG','2340','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1144','ED50 to WGS 84 (12)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',44.0,-107.0,-88.0,-149.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mlt',0); INSERT INTO "usage" VALUES('EPSG','8065','helmert_transformation','EPSG','1144','EPSG','3275','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1145','ED50 to WGS 84 (13)','Derived at 18 stations. Accuracy 5m, 6m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',9.0,-84.0,-107.0,-120.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Prt Esp',0); INSERT INTO "usage" VALUES('EPSG','8066','helmert_transformation','EPSG','1145','EPSG','2338','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1146','ED87 to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4231','EPSG','4326',0.8,-82.981,-99.719,-110.709,'EPSG','9001',-0.5076,0.1503,0.3898,'EPSG','9109',-0.3143,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'5Nat-NSea-90',0); INSERT INTO "usage" VALUES('EPSG','8067','helmert_transformation','EPSG','1146','EPSG','2330','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1147','ED50 to ED87 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4231',1.0,-1.51,-0.84,-3.5,'EPSG','9001',-1.893,-0.687,-2.764,'EPSG','9109',0.609,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NMA-Nor N65',0); INSERT INTO "usage" VALUES('EPSG','8068','helmert_transformation','EPSG','1147','EPSG','2332','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1148','Egypt 1907 to WGS 84 (1)','Derived at 14 stations. Accuracy 3m, 6m and 8m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4229','EPSG','4326',11.0,-130.0,110.0,-13.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Egy',0); INSERT INTO "usage" VALUES('EPSG','8069','helmert_transformation','EPSG','1148','EPSG','1086','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1149','ETRS89 to WGS 84 (1)','ETRS89 and WGS 84 are realizations of ITRS coincident to within 1 metre. This transformation has an accuracy equal to the coincidence figure.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4258','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-eur',0); INSERT INTO "usage" VALUES('EPSG','8070','helmert_transformation','EPSG','1149','EPSG','4755','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1150','GDA94 to WGS 84 (1)','Approximation at the 3m level assuming WGS 84 is equivalent to GDA94. Ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4283','EPSG','4326',3.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Aus',0); INSERT INTO "usage" VALUES('EPSG','8071','helmert_transformation','EPSG','1150','EPSG','4177','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1151','NZGD49 to WGS 84 (1)','Derived at 14 stations. Accuracy 5m, 3m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4272','EPSG','4326',8.0,84.0,-22.0,209.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Nzl',0); INSERT INTO "usage" VALUES('EPSG','8072','helmert_transformation','EPSG','1151','EPSG','3285','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1152','Hu Tzu Shan 1950 to WGS 84 (1)','Derived at 4 stations. Accuracy 15m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4236','EPSG','4326',26.0,-637.0,-549.0,-203.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Twn',0); INSERT INTO "usage" VALUES('EPSG','8073','helmert_transformation','EPSG','1152','EPSG','3315','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1153','Indian 1954 to WGS 84 (1)','Derived at 11 stations. Accuracy 15m, 6m and 12m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4239','EPSG','4326',21.0,217.0,823.0,299.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Tha',0); INSERT INTO "usage" VALUES('EPSG','8074','helmert_transformation','EPSG','1153','EPSG','3317','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1154','Indian 1975 to WGS 84 (1)','Derived at 62 stations. Accuracy 3m, 2m and 3m in X, Y and Z axes. Replaced by Indian 1975 to WGS 84 (2) (code 1304).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4240','EPSG','4326',5.0,209.0,818.0,290.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Tha',0); INSERT INTO "usage" VALUES('EPSG','8075','helmert_transformation','EPSG','1154','EPSG','3741','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1155','Kalianpur 1937 to WGS 84 (1)','Derived at 6 stations. Accuracy 10m, 8m and 12m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4144','EPSG','4326',18.0,282.0,726.0,254.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bgd',0); INSERT INTO "usage" VALUES('EPSG','8076','helmert_transformation','EPSG','1155','EPSG','3217','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1156','Kalianpur 1975 to WGS 84 (1)','Derived at 7 stations. Accuracy 12m, 10m and 15m in X, Y and Z axes. Care! DMA ellipsoid is inconsistent with EPSG ellipsoid - transformation parameter values may not be appropriate. Also source CRS may not apply to Nepal.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4146','EPSG','4326',22.0,295.0,736.0,257.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ind Npl',0); INSERT INTO "usage" VALUES('EPSG','8077','helmert_transformation','EPSG','1156','EPSG','2411','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1157','Kandawala to WGS 84 (1)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4244','EPSG','4326',35.0,-97.0,787.0,86.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Lka',0); INSERT INTO "usage" VALUES('EPSG','8078','helmert_transformation','EPSG','1157','EPSG','3310','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1158','Kertau 1968 to WGS 84 (1)','Derived at 6 stations. Accuracy 10m, 8m and 6m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4245','EPSG','4326',15.0,-11.0,851.0,5.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mys Sgp',0); INSERT INTO "usage" VALUES('EPSG','8079','helmert_transformation','EPSG','1158','EPSG','4223','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1159','Leigon to WGS 84 (1)','Derived at 8 stations. Accuracy 2m, 3m and 2m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4250','EPSG','4326',5.0,-130.0,29.0,364.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gha',0); INSERT INTO "usage" VALUES('EPSG','8080','helmert_transformation','EPSG','1159','EPSG','1104','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1160','Liberia 1964 to WGS 84 (1)','Derived at 4 stations. Accuracy 15m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4251','EPSG','4326',26.0,-90.0,40.0,88.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Lbr',0); INSERT INTO "usage" VALUES('EPSG','8081','helmert_transformation','EPSG','1160','EPSG','3270','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1161','Luzon 1911 to WGS 84 (1)','Derived at 6 stations. Accuracy 8m, 11m and 9m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4253','EPSG','4326',17.0,-133.0,-77.0,-51.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Phl N',0); INSERT INTO "usage" VALUES('EPSG','8082','helmert_transformation','EPSG','1161','EPSG','2364','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1162','Luzon 1911 to WGS 84 (2)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4253','EPSG','4326',44.0,-133.0,-79.0,-72.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Phl Min',0); INSERT INTO "usage" VALUES('EPSG','8083','helmert_transformation','EPSG','1162','EPSG','2365','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1163','M''poraloko to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4266','EPSG','4326',44.0,-74.0,-130.0,42.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gab',0); INSERT INTO "usage" VALUES('EPSG','8084','helmert_transformation','EPSG','1163','EPSG','1100','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1164','Mahe 1971 to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4256','EPSG','4326',44.0,41.0,-220.0,-134.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Syc',0); INSERT INTO "usage" VALUES('EPSG','8085','helmert_transformation','EPSG','1164','EPSG','2369','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1165','Massawa to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4262','EPSG','4326',44.0,639.0,405.0,60.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Eth',0); INSERT INTO "usage" VALUES('EPSG','8086','helmert_transformation','EPSG','1165','EPSG','1089','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1166','Merchich to WGS 84 (1)','Derived at 9 stations. Accuracy 5m, 3m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4261','EPSG','4326',7.0,31.0,146.0,47.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mar',0); INSERT INTO "usage" VALUES('EPSG','8087','helmert_transformation','EPSG','1166','EPSG','3280','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1167','Minna to WGS 84 (1)','Derived at 2 stations. Accuracy 25m in each axis. Note: Minna is used in Nigeria, not Cameroon.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',44.0,-81.0,-84.0,115.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cmr',0); INSERT INTO "usage" VALUES('EPSG','8088','helmert_transformation','EPSG','1167','EPSG','3226','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1168','Minna to WGS 84 (2)','Derived at 6 stations. Accuracy 3m, 6m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',15.0,-92.0,-93.0,122.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Nga',0); INSERT INTO "usage" VALUES('EPSG','8089','helmert_transformation','EPSG','1168','EPSG','1178','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1169','Monte Mario to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4265','EPSG','4326',44.0,-225.0,-65.0,9.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ita Sar',0); INSERT INTO "usage" VALUES('EPSG','8090','helmert_transformation','EPSG','1169','EPSG','2339','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1170','NAD27 to WGS 84 (1)','Derived at 15 stations. Accuracy 3m, 9m and 12m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',16.0,-3.0,142.0,183.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Carib',0); INSERT INTO "usage" VALUES('EPSG','8091','helmert_transformation','EPSG','1170','EPSG','2418','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1171','NAD27 to WGS 84 (2)','Derived at 19 stations. Accuracy 8m, 3m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',10.0,0.0,125.0,194.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cen Am',0); INSERT INTO "usage" VALUES('EPSG','8092','helmert_transformation','EPSG','1171','EPSG','2419','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1172','NAD27 to WGS 84 (3)','Derived at 112 stations. Accuracy 15m, 11m and 6m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',20.0,-10.0,158.0,187.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Can',0); INSERT INTO "usage" VALUES('EPSG','8093','helmert_transformation','EPSG','1172','EPSG','4517','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1173','NAD27 to WGS 84 (4)','Derived at 405 stations. Accuracy 5m, 5m and 6m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',10.0,-8.0,160.0,176.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Conus',0); INSERT INTO "usage" VALUES('EPSG','8094','helmert_transformation','EPSG','1173','EPSG','1323','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1174','NAD27 to WGS 84 (5)','Derived at 129 stations. Accuracy 5m, 5m and 8m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',11.0,-9.0,161.0,179.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-ConusE',0); INSERT INTO "usage" VALUES('EPSG','8095','helmert_transformation','EPSG','1174','EPSG','2389','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1175','NAD27 to WGS 84 (6)','Derived at 276 stations. Accuracy 5m, 3m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',7.0,-8.0,159.0,175.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-ConusW',0); INSERT INTO "usage" VALUES('EPSG','8096','helmert_transformation','EPSG','1175','EPSG','2390','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1176','NAD27 to WGS 84 (7)','Derived at 47 stations. Accuracy 5m, 9m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',12.0,-5.0,135.0,172.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-USA AK',0); INSERT INTO "usage" VALUES('EPSG','8097','helmert_transformation','EPSG','1176','EPSG','2412','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1177','NAD27 to WGS 84 (8)','Derived at 11 stations. Accuracy 5m, 3m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',8.0,-4.0,154.0,178.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bha xSalv',0); INSERT INTO "usage" VALUES('EPSG','8098','helmert_transformation','EPSG','1177','EPSG','2413','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1178','NAD27 to WGS 84 (9)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',44.0,1.0,140.0,165.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bha Salv',0); INSERT INTO "usage" VALUES('EPSG','8099','helmert_transformation','EPSG','1178','EPSG','2414','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1179','NAD27 to WGS 84 (10)','Derived at 25 stations. Accuracy 8m, 8m and 6m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',13.0,-7.0,162.0,188.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Can AB BC',0); INSERT INTO "usage" VALUES('EPSG','8100','helmert_transformation','EPSG','1179','EPSG','2384','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1180','NAD27 to WGS 84 (11)','Derived at 25 stations. Accuracy 9m, 5m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',12.0,-9.0,157.0,184.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Can MN ON',0); INSERT INTO "usage" VALUES('EPSG','8101','helmert_transformation','EPSG','1180','EPSG','2415','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1181','NAD27 to WGS 84 (12)','Derived at 37 stations. Accuracy 6m, 6m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',9.0,-22.0,160.0,190.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Can E',0); INSERT INTO "usage" VALUES('EPSG','8102','helmert_transformation','EPSG','1181','EPSG','2416','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1182','NAD27 to WGS 84 (13)','Derived at 17 stations. Accuracy 5m, 5m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',8.0,4.0,159.0,188.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Can NWT',0); INSERT INTO "usage" VALUES('EPSG','8103','helmert_transformation','EPSG','1182','EPSG','2410','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1183','NAD27 to WGS 84 (14)','Derived at 8 stations. Accuracy 5m, 8m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',10.0,-7.0,139.0,181.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Can Yuk',0); INSERT INTO "usage" VALUES('EPSG','8104','helmert_transformation','EPSG','1183','EPSG','2417','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1184','NAD27 to WGS 84 (15)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',35.0,0.0,125.0,201.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Pan',0); INSERT INTO "usage" VALUES('EPSG','8105','helmert_transformation','EPSG','1184','EPSG','2385','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1185','NAD27 to WGS 84 (16)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',44.0,-9.0,152.0,178.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cuba',0); INSERT INTO "usage" VALUES('EPSG','8106','helmert_transformation','EPSG','1185','EPSG','3235','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1186','NAD27 to WGS 84 (17)','Derived at 2 stations. Accuracy 25m in each axis. Note: NAD27 is not used in Greenland.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',44.0,11.0,114.0,195.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Grl',0); INSERT INTO "usage" VALUES('EPSG','8107','helmert_transformation','EPSG','1186','EPSG','2386','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1187','NAD27 to WGS 84 (18)','Derived at 22 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',12.0,-12.0,130.0,190.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mex',0); INSERT INTO "usage" VALUES('EPSG','8108','helmert_transformation','EPSG','1187','EPSG','3278','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1188','NAD83 to WGS 84 (1)','Derived at 354 stations. Accuracy 2m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4269','EPSG','4326',4.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-N Am',0); INSERT INTO "usage" VALUES('EPSG','8109','helmert_transformation','EPSG','1188','EPSG','1325','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1189','Nahrwan 1967 to WGS 84 (1)','Derived at 2 stations. Accuracy 25m in each axis. Note: Nahrwan 1967 is not used in Oman.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',44.0,-247.0,-148.0,369.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Omn Mas',0); INSERT INTO "usage" VALUES('EPSG','8110','helmert_transformation','EPSG','1189','EPSG','2391','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1190','Nahrwan 1967 to WGS 84 (2)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',35.0,-243.0,-192.0,477.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Sau',0); INSERT INTO "usage" VALUES('EPSG','8111','helmert_transformation','EPSG','1190','EPSG','3968','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1191','Nahrwan 1967 to WGS 84 (3)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',44.0,-249.0,-156.0,381.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-UAE',0); INSERT INTO "usage" VALUES('EPSG','8112','helmert_transformation','EPSG','1191','EPSG','1243','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1192','Naparima 1972 to WGS 84 (1)','CAUTION: IOGP believes that the coordinates used to derive these parameter values include a blunder, leading to an error in the value of tX. If a transformation from DMA is required IOGP recommends use of the 1987 version (EPSG codes 1307 and 1556).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4271','EPSG','4326',33.0,-10.0,375.0,165.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Tto',0); INSERT INTO "usage" VALUES('EPSG','8113','helmert_transformation','EPSG','1192','EPSG','1322','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1193','NTF to WGS 84 (1)','These same parameter values are used to transform to ETRS89. See NTF to ETRS89 (1) (code 1651).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4275','EPSG','4326',2.0,-168.0,-60.0,320.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8114','helmert_transformation','EPSG','1193','EPSG','3694','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1194','MGI to WGS 84 (8)','May be taken as approximate transformation MGI to ETRS89 assuming ETRS89 is equivalent to WGS 84 within the accuracy of the transformation - see tfm code 1024. Information source gives scale as -2.388739 ppm.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4326',0.5,601.705,84.263,485.227,'EPSG','9001',-4.7354,-1.3145,-5.393,'EPSG','9104',-2.3887,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LBD-Aut Sty',0); INSERT INTO "usage" VALUES('EPSG','8115','helmert_transformation','EPSG','1194','EPSG','1543','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','1195','OSGB36 to WGS 84 (1)','Derived at 38 stations. Accuracy 10m, 10m and 15m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4277','EPSG','4326',21.0,375.0,-111.0,431.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gbr',0); INSERT INTO "usage" VALUES('EPSG','8116','helmert_transformation','EPSG','1195','EPSG','1264','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1196','OSGB36 to WGS 84 (2)','Derived at 24 stations. Accuracy 5m, 5m and 6m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4277','EPSG','4326',10.0,371.0,-112.0,434.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gbr Eng',0); INSERT INTO "usage" VALUES('EPSG','8117','helmert_transformation','EPSG','1196','EPSG','2395','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1197','OSGB36 to WGS 84 (3)','Derived at 25 stations. Accuracy 10m, 10m and 15m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4277','EPSG','4326',21.0,371.0,-111.0,434.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gbr E&W',0); INSERT INTO "usage" VALUES('EPSG','8118','helmert_transformation','EPSG','1197','EPSG','2396','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1198','OSGB36 to WGS 84 (4)','Derived at 13 stations. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4277','EPSG','4326',18.0,384.0,-111.0,425.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gbr Sco',0); INSERT INTO "usage" VALUES('EPSG','8119','helmert_transformation','EPSG','1198','EPSG','2397','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1199','OSGB36 to WGS 84 (5)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4277','EPSG','4326',35.0,370.0,-108.0,434.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gbr Wal',0); INSERT INTO "usage" VALUES('EPSG','8120','helmert_transformation','EPSG','1199','EPSG','2398','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1200','Pointe Noire to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4282','EPSG','4326',44.0,-148.0,51.0,-291.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cog',0); INSERT INTO "usage" VALUES('EPSG','8121','helmert_transformation','EPSG','1200','EPSG','1072','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1201','PSAD56 to WGS 84 (1)','Derived at 63 stations. Accuracy 17m, 27m and 27m in X, Y and Z axes. DMA also lists Colombia as area of applicability but PSAD56 is not used in that country.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',42.0,-288.0,175.0,-376.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-mean',0); INSERT INTO "usage" VALUES('EPSG','8122','helmert_transformation','EPSG','1201','EPSG','2399','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1202','PSAD56 to WGS 84 (2)','Derived at 5 stations. Accuracy 5m, 11m and 14m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',19.0,-270.0,188.0,-388.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bol',0); INSERT INTO "usage" VALUES('EPSG','8123','helmert_transformation','EPSG','1202','EPSG','1049','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1203','PSAD56 to WGS 84 (3)','Derived at 1 station. Accuracy 25m in each axis. Replaced by PSAD56 to WGS 84 (15) (code 6971).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',44.0,-270.0,183.0,-390.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Chl N',0); INSERT INTO "usage" VALUES('EPSG','8124','helmert_transformation','EPSG','1203','EPSG','2402','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1204','PSAD56 to WGS 84 (4)','Derived at 3 stations. Accuracy 20m in each axis. Replaced by PSAD56 to WGS 84 (17) (code 6973).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',35.0,-305.0,243.0,-442.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Chl S',0); INSERT INTO "usage" VALUES('EPSG','8125','helmert_transformation','EPSG','1204','EPSG','2403','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1205','PSAD56 to WGS 84 (5)','Derived at 4 stations. Accuracy 15m in each axis. Note that although the PSAD56 network included Colombia the CRS is not used there: see Bogota 1975 (CRS code 4218).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',26.0,-282.0,169.0,-371.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Col',0); INSERT INTO "usage" VALUES('EPSG','8126','helmert_transformation','EPSG','1205','EPSG','3229','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1206','PSAD56 to WGS 84 (6)','Derived at 11 stations. Accuracy 3m, 5m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',7.0,-278.0,171.0,-367.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ecu',0); INSERT INTO "usage" VALUES('EPSG','8127','helmert_transformation','EPSG','1206','EPSG','3241','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1207','PSAD56 to WGS 84 (7)','Derived at 9 stations. Accuracy 6m, 14m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',17.0,-298.0,159.0,-369.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Guy',0); INSERT INTO "usage" VALUES('EPSG','8128','helmert_transformation','EPSG','1207','EPSG','1114','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1208','PSAD56 to WGS 84 (8)','Derived at 6 stations. Accuracy 6m, 8m and 12m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',16.0,-279.0,175.0,-379.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Per',0); INSERT INTO "usage" VALUES('EPSG','8129','helmert_transformation','EPSG','1208','EPSG','3292','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1209','PSAD56 to WGS 84 (9)','Derived at 24 stations. Accuracy 9m, 14m and 15m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',23.0,-295.0,173.0,-371.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ven',0); INSERT INTO "usage" VALUES('EPSG','8130','helmert_transformation','EPSG','1209','EPSG','3327','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1210','POSGAR 94 to WGS 84 (1)','Approximation at the +/- 1m level assuming that POSGAR 94 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4694','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Arg',0); INSERT INTO "usage" VALUES('EPSG','8131','helmert_transformation','EPSG','1210','EPSG','1033','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1211','Qornoq to WGS 84 (1)','Derived at 2 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4287','EPSG','4326',NULL,164.0,138.0,-189.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Grl S',1); INSERT INTO "usage" VALUES('EPSG','8132','helmert_transformation','EPSG','1211','EPSG','2407','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1212','SAD69 to WGS 84 (1)','Derived at 84 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-57.0,1.0,-41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-mean',1); INSERT INTO "usage" VALUES('EPSG','8133','helmert_transformation','EPSG','1212','EPSG','1341','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1213','SAD69 to WGS 84 (2)','Derived at 10 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-62.0,-1.0,-37.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Arg',1); INSERT INTO "usage" VALUES('EPSG','8134','helmert_transformation','EPSG','1213','EPSG','1033','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1214','SAD69 to WGS 84 (3)','Derived at 4 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-61.0,2.0,-48.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bol',1); INSERT INTO "usage" VALUES('EPSG','8135','helmert_transformation','EPSG','1214','EPSG','1049','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1215','SAD69 to WGS 84 (4)','Derived at 22 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-60.0,-2.0,-41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bra',1); INSERT INTO "usage" VALUES('EPSG','8136','helmert_transformation','EPSG','1215','EPSG','1053','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1216','SAD69 to WGS 84 (5)','Derived at 9 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-75.0,-1.0,-44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Chile',1); INSERT INTO "usage" VALUES('EPSG','8137','helmert_transformation','EPSG','1216','EPSG','1066','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1217','SAD69 to WGS 84 (6)','Derived at 7 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-44.0,6.0,-36.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Col',1); INSERT INTO "usage" VALUES('EPSG','8138','helmert_transformation','EPSG','1217','EPSG','1070','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1218','SAD69 to WGS 84 (7)','Derived at 11 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-48.0,3.0,-44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ecu',1); INSERT INTO "usage" VALUES('EPSG','8139','helmert_transformation','EPSG','1218','EPSG','1085','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1219','SAD69 to WGS 84 (8)','Derived at 1 station.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-47.0,26.0,-42.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ecu Gal',1); INSERT INTO "usage" VALUES('EPSG','8140','helmert_transformation','EPSG','1219','EPSG','2356','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1220','SAD69 to WGS 84 (9)','Derived at 5 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-53.0,3.0,-47.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Guy',1); INSERT INTO "usage" VALUES('EPSG','8141','helmert_transformation','EPSG','1220','EPSG','1114','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1221','SAD69 to WGS 84 (10)','Derived at 4 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-61.0,2.0,-33.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Pgy',1); INSERT INTO "usage" VALUES('EPSG','8142','helmert_transformation','EPSG','1221','EPSG','1188','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1222','SAD69 to WGS 84 (11)','Derived at 6 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-58.0,0.0,-44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Peru',1); INSERT INTO "usage" VALUES('EPSG','8143','helmert_transformation','EPSG','1222','EPSG','1189','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1223','SAD69 to WGS 84 (12)','Derived at 1 station.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-45.0,12.0,-33.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Tto',1); INSERT INTO "usage" VALUES('EPSG','8144','helmert_transformation','EPSG','1223','EPSG','1235','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1224','SAD69 to WGS 84 (13)','Derived at 5 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-45.0,8.0,-33.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ven',1); INSERT INTO "usage" VALUES('EPSG','8145','helmert_transformation','EPSG','1224','EPSG','1251','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1225','Sapper Hill 1943 to WGS 84 (1)','Derived at 5 stations. Accuracy 1m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4292','EPSG','4326',2.0,-355.0,21.0,72.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Flk E',0); INSERT INTO "usage" VALUES('EPSG','8146','helmert_transformation','EPSG','1225','EPSG','2355','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1226','Schwarzeck to WGS 84 (1)','Derived at 3 stations. Accuracy 20m in each axis. Beware! Source CRS uses German legal metres, transformation parameter values are in (International) metres. See tfm code 1271 for example.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4293','EPSG','4326',35.0,616.0,97.0,-251.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Nam',0); INSERT INTO "usage" VALUES('EPSG','8147','helmert_transformation','EPSG','1226','EPSG','1169','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1227','Tananarive to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4297','EPSG','4326',999.0,-189.0,-242.0,-91.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mdg',0); INSERT INTO "usage" VALUES('EPSG','8148','helmert_transformation','EPSG','1227','EPSG','1149','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1228','Timbalai 1948 to WGS 84 (1)','Derived at 8 stations. Accuracy 10m, 10m and 12m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4298','EPSG','4326',19.0,-679.0,669.0,-48.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Borneo',0); INSERT INTO "usage" VALUES('EPSG','8149','helmert_transformation','EPSG','1228','EPSG','1362','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1229','TM65 to WGS 84 (1)','Derived at 7 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4299','EPSG','4326',NULL,506.0,-122.0,611.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ire',1); INSERT INTO "usage" VALUES('EPSG','8150','helmert_transformation','EPSG','1229','EPSG','1305','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1230','Tokyo to WGS 84 (1)','Derived at 31 stations. Accuracy 20m, 5m and 20m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',29.0,-148.0,507.0,685.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Jpn Kor',0); INSERT INTO "usage" VALUES('EPSG','8151','helmert_transformation','EPSG','1230','EPSG','2409','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1231','Tokyo to WGS 84 (2)','Derived at 16 stations. Accuracy 8m, 5m and 8m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',13.0,-148.0,507.0,685.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Jpn',0); INSERT INTO "usage" VALUES('EPSG','8152','helmert_transformation','EPSG','1231','EPSG','3995','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1232','Tokyo to WGS 84 (3)','Derived at 29 stations. Accuracy 8m, 5m and 8m in X, Y and Z axes. Replaced by Tokyo to WGS 84 (5) (code 1305).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',13.0,-146.0,507.0,687.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Kor',0); INSERT INTO "usage" VALUES('EPSG','8153','helmert_transformation','EPSG','1232','EPSG','3266','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1233','Tokyo to WGS 84 (4)','Derived at 3 stations. Accuracy 20m, 5m and 20m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',29.0,-158.0,507.0,676.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Jpn Ok',0); INSERT INTO "usage" VALUES('EPSG','8154','helmert_transformation','EPSG','1233','EPSG','2408','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1234','Yacare to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4309','EPSG','4326',999.0,-155.0,171.0,37.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ury',0); INSERT INTO "usage" VALUES('EPSG','8155','helmert_transformation','EPSG','1234','EPSG','3326','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1235','Zanderij to WGS 84 (1)','Derived at 5 stations. Accuracy 5m, 5m and 8m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4311','EPSG','4326',11.0,-265.0,120.0,-358.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Sur',0); INSERT INTO "usage" VALUES('EPSG','8156','helmert_transformation','EPSG','1235','EPSG','1222','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1236','AGD84 to WGS 84 (2)','"Higgins parameters". Replaced by AGD84 to GDA94 (2) (code 1280) and AGD84 to WGS 84 (7) (code 1669). Note: AGD84 officially adopted only in Queensland, South Australia and Western Australia.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4203','EPSG','4326',5.0,-116.0,-50.47,141.69,'EPSG','9001',-0.23,-0.39,-0.344,'EPSG','9104',0.0983,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus old',0); INSERT INTO "usage" VALUES('EPSG','8157','helmert_transformation','EPSG','1236','EPSG','2576','EPSG','1204'); INSERT INTO "helmert_transformation" VALUES('EPSG','1237','WGS 72 to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4322','EPSG','4326',2.0,0.0,0.0,4.5,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA1',0); INSERT INTO "usage" VALUES('EPSG','8158','helmert_transformation','EPSG','1237','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1238','WGS 72 to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4322','EPSG','4326',2.0,0.0,0.0,4.5,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA2',0); INSERT INTO "usage" VALUES('EPSG','8159','helmert_transformation','EPSG','1238','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1239','WGS 72BE to WGS 72 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4324','EPSG','4322',2.0,0.0,0.0,-2.6,'EPSG','9001',0.0,0.0,0.26,'EPSG','9104',-0.6063,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA',0); INSERT INTO "usage" VALUES('EPSG','8160','helmert_transformation','EPSG','1239','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1240','WGS 72BE to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4324','EPSG','4326',2.0,0.0,0.0,1.9,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA',0); INSERT INTO "usage" VALUES('EPSG','8161','helmert_transformation','EPSG','1240','EPSG','1262','EPSG','1027'); INSERT INTO "usage" VALUES('EPSG','21889','helmert_transformation','EPSG','1240','EPSG','4780','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1242','HD72 to WGS 84 (4)','Parameter value error in info source Hungarian text but correct in English summary. Replaces HD72 to WGS 84 (2) (code 1831).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4237','EPSG','4326',1.0,52.17,-71.82,-14.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELTE-Hun 2004',0); INSERT INTO "usage" VALUES('EPSG','8163','helmert_transformation','EPSG','1242','EPSG','1119','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1244','PZ-90 to WGS 84 (2)','Mandated for use in Russia by GosStandard of Russia Decree #327 of August 9, 2001. Republished but with one significant figure less precision to parameter values in GOST R 51794-2008 of December 18 2008.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4740','EPSG','4326',0.5,-1.08,-0.27,-0.9,'EPSG','9001',0.0,0.0,-0.16,'EPSG','9104',-0.12,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOST-Rus',0); INSERT INTO "usage" VALUES('EPSG','8165','helmert_transformation','EPSG','1244','EPSG','1198','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1245','ED50 to WGS 84 (16)','Derived at 4 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',44.0,-112.0,-77.0,-145.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Tun',0); INSERT INTO "usage" VALUES('EPSG','8166','helmert_transformation','EPSG','1245','EPSG','1236','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1246','Herat North to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4255','EPSG','4326',999.0,-333.0,-222.0,114.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Afg',0); INSERT INTO "usage" VALUES('EPSG','8167','helmert_transformation','EPSG','1246','EPSG','1024','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1247','Kalianpur 1962 to WGS 84 (1)','Care! DMA ellipsoid is inconsistent with EPSG ellipsoid - transformation parameter values may not be appropriate. No accuracy estimate available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326',999.0,283.0,682.0,231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Pak',0); INSERT INTO "usage" VALUES('EPSG','8168','helmert_transformation','EPSG','1247','EPSG','3289','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1248','ID74 to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4238','EPSG','4326',44.0,-24.0,-15.0,5.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Idn',0); INSERT INTO "usage" VALUES('EPSG','8169','helmert_transformation','EPSG','1248','EPSG','4020','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1249','NAD27 to WGS 84 (21)','Derived at 6 stations. Accuracy 6m, 8m and 10m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',15.0,-2.0,152.0,149.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-AK AluE',0); INSERT INTO "usage" VALUES('EPSG','8170','helmert_transformation','EPSG','1249','EPSG','2387','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1250','NAD27 to WGS 84 (22)','Derived at 5 stations. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',18.0,2.0,204.0,105.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-AK AluW',0); INSERT INTO "usage" VALUES('EPSG','8171','helmert_transformation','EPSG','1250','EPSG','2388','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1251','NAD83 to WGS 84 (2)','Derived at 4 stations. Accuracy 5m, 2m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4269','EPSG','4326',8.0,-2.0,0.0,4.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-AK Alu',0); INSERT INTO "usage" VALUES('EPSG','8172','helmert_transformation','EPSG','1251','EPSG','2157','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1252','NAD83 to WGS 84 (3)','Derived at 6 stations. Accuracy 2m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4269','EPSG','4326',4.0,1.0,1.0,-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-USA Hi',0); INSERT INTO "usage" VALUES('EPSG','8173','helmert_transformation','EPSG','1252','EPSG','3883','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1253','Nord Sahara 1959 to WGS 84 (1)','Derived at 3 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4326',44.0,-186.0,-93.0,310.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Alg',0); INSERT INTO "usage" VALUES('EPSG','8174','helmert_transformation','EPSG','1253','EPSG','3213','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1254','Pulkovo 1942 to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',999.0,28.0,-130.0,-95.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Rus',0); INSERT INTO "usage" VALUES('EPSG','8175','helmert_transformation','EPSG','1254','EPSG','3296','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1255','Nord Sahara 1959 to WGS 84 (2)','Derived at 2 stations. Accuracy 25m in each axis. CAUTION: DMA describe Source CRS as Voirol 1960. OGP believes that the data used in the derivation of these parameters contains a blunder. We recommend using CT North Sahara 1959 to WGS84 (1) (code 1253).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4326',44.0,-123.0,-206.0,219.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Dza N',0); INSERT INTO "usage" VALUES('EPSG','8176','helmert_transformation','EPSG','1255','EPSG','1365','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1256','Fahud to WGS 84 (1)','Derived at 7 stations. Accuracy 3m, 3m and 9m in X, Y and Z axes. Replaced by Fahud to WGS 84 (3) (code 6908).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4232','EPSG','4326',10.0,-346.0,-1.0,224.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Omn',0); INSERT INTO "usage" VALUES('EPSG','8177','helmert_transformation','EPSG','1256','EPSG','4009','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1257','Pulkovo 1995 to PZ-90 (1)','Mandated for use in Russia by GosStandard of Russia Decree #327 of August 9, 2001.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4200','EPSG','4740',1.0,25.9,-130.94,-81.76,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOST-Rus',0); INSERT INTO "usage" VALUES('EPSG','8178','helmert_transformation','EPSG','1257','EPSG','1198','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1267','Pulkovo 1942 to WGS 84 (17)','Derived through concatenation of Pulkovo 1942 to PZ-90 (1) (tfm code 15844) and PZ-90 to WGS 84 (2) (tfm code 1244. Mandated for use in Russia by GOST R 51794-2001, but this has been superseded by GOST R 51794-2008. Replaced by tfm code 5044.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4326',4.0,23.92,-141.27,-80.9,'EPSG','9001',0.0,-0.35,-0.82,'EPSG','9104',-0.12,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOST-Rus',0); INSERT INTO "usage" VALUES('EPSG','8188','helmert_transformation','EPSG','1267','EPSG','3296','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','1271','Schwarzeck to WGS 84 (2)','Beware! Source CRS uses GLM, tfm param in m. Example: Schwarzeck φ=19°35''46.952"S λ=20°41''50.649"E h=1185.99m; X=5623409.386 Y=2124618.003 Z=-2125847.632 GLM; X=5623485.84m Y=2124646.89m Z=-2125876.54m; WGS 84 X=5624101.48m Y=2124748.97m Z=-2126132.35m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4293','EPSG','4326',999.0,615.64,102.08,-255.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SLI-Nam',0); INSERT INTO "usage" VALUES('EPSG','8192','helmert_transformation','EPSG','1271','EPSG','1169','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1272','GGRS87 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4121','EPSG','4326',1.0,-199.87,74.79,246.62,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Hel-Grc',0); INSERT INTO "usage" VALUES('EPSG','8193','helmert_transformation','EPSG','1272','EPSG','3254','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1273','HD72 to ETRS89 (1)','May be taken as approximate transformation HD72 to WGS 84 - see code 1677.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','4258',NULL,-56.0,75.77,15.31,'EPSG','9001',-0.37,-0.2,-0.21,'EPSG','9104',-1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELTE-Hun',1); INSERT INTO "usage" VALUES('EPSG','8194','helmert_transformation','EPSG','1273','EPSG','1119','EPSG','1025'); INSERT INTO "helmert_transformation" VALUES('EPSG','1274','Pulkovo 1942 to LKS94 (1)','May be taken as approximate transformation Pulkovo 1942 to WGS 84 - see code 1679.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4669',9.0,-40.595,-18.55,-69.339,'EPSG','9001',-2.508,-1.832,2.611,'EPSG','9104',-4.299,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HNIT-Ltu',0); INSERT INTO "usage" VALUES('EPSG','8195','helmert_transformation','EPSG','1274','EPSG','3272','EPSG','1049'); INSERT INTO "helmert_transformation" VALUES('EPSG','1275','ED50 to WGS 84 (17)','These same parameter values are used to transform to ETRS89. See ED50 to ETRS89 (10) (code 1650).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',2.0,-84.0,-97.0,-117.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8196','helmert_transformation','EPSG','1275','EPSG','1096','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1276','NTF to ED50 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4275','EPSG','4230',2.0,-84.0,37.0,437.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8197','helmert_transformation','EPSG','1276','EPSG','3694','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1277','NTF to WGS 72 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4275','EPSG','4322',2.0,-168.0,-72.0,314.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8198','helmert_transformation','EPSG','1277','EPSG','3694','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1278','AGD66 to GDA94 (1)','Given to greater precision but no better accuracy at http://www.dehaa.sa.gov.au For higher accuracy requirements see various regional transformations. May be taken as approximate transformation AGD66 to WGS 84 - see code 15788. Derived at 162 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4283',5.0,-127.8,-52.3,152.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus 5m',0); INSERT INTO "usage" VALUES('EPSG','8199','helmert_transformation','EPSG','1278','EPSG','2575','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1279','AGD84 to GDA94 (1)','Derived at 327 stations. May be taken as approximate transformation AGD84 to WGS 84 - see code 15789. For higher accuracy use AGD84 to GDA94 (2) (code 1280). Note: AGD84 officially adopted only in Queensland, South Australia and Western Australia.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4203','EPSG','4283',5.0,-128.5,-53.0,153.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus 5m',0); INSERT INTO "usage" VALUES('EPSG','8200','helmert_transformation','EPSG','1279','EPSG','2576','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1280','AGD84 to GDA94 (2)','Replaces AGD84 to WGS 84 (2) (code 1236). May be taken as approximate transformation AGD84 to WGS 84 - see code 1669. Note: although applicable nationwide, AGD84 officially adopted only in Queensland, South Australia and Western Australia.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4203','EPSG','4283',1.0,-117.763,-51.51,139.061,'EPSG','9001',-0.292,-0.443,-0.277,'EPSG','9104',-0.191,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus 1m',0); INSERT INTO "usage" VALUES('EPSG','14198','helmert_transformation','EPSG','1280','EPSG','2576','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1281','Pulkovo 1995 to WGS 84 (1)','Derived through concatenation of Pulkovo 1995 to PZ-90 (1) (tfm code 1257) and PZ-90 to WGS 84 (2) (tfm code 1244). Mandated for use in Russia by GOST R 51794-2001, but this has been superseded by GOST R 51794-2008. Replaced by tfm code 5043.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4200','EPSG','4326',1.0,24.82,-131.21,-82.66,'EPSG','9001',0.0,0.0,-0.16,'EPSG','9104',-0.12,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOST-Rus',0); INSERT INTO "usage" VALUES('EPSG','8202','helmert_transformation','EPSG','1281','EPSG','1198','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1282','Samboja to WGS 84 (1)','Datum shift derived through ITRF93.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4125','EPSG','4326',NULL,-404.78,685.68,45.47,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Idn Mah',1); INSERT INTO "usage" VALUES('EPSG','8203','helmert_transformation','EPSG','1282','EPSG','1328','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1283','LKS94 to WGS 84 (1)','LKS94 is a national realization of ETRS89 and coincident to WGS 84 within 1 metre. This transformation has an accuracy equal to the coincidence figure.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4669','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HNIT-Ltu',0); INSERT INTO "usage" VALUES('EPSG','8204','helmert_transformation','EPSG','1283','EPSG','1145','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1284','Arc 1960 to WGS 84 (2)','Derived at 24 stations. Accuracy 4m, 3m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4210','EPSG','4326',6.0,-157.0,-2.0,-299.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Ken',0); INSERT INTO "usage" VALUES('EPSG','8205','helmert_transformation','EPSG','1284','EPSG','3264','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1285','Arc 1960 to WGS 84 (3)','Derived at 12 stations. Accuracy 6m, 9m and 10m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4210','EPSG','4326',15.0,-175.0,-23.0,-303.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Tza',0); INSERT INTO "usage" VALUES('EPSG','8206','helmert_transformation','EPSG','1285','EPSG','3316','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1286','Segora to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4294','EPSG','4326',NULL,-403.0,684.0,41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Idn Kal',1); INSERT INTO "usage" VALUES('EPSG','8207','helmert_transformation','EPSG','1286','EPSG','2354','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1287','Pulkovo 1942 to WGS 84 (3)','Derived at 5 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',4.0,28.0,-121.0,-77.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Hun',1); INSERT INTO "usage" VALUES('EPSG','8208','helmert_transformation','EPSG','1287','EPSG','1119','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1288','Pulkovo 1942 to WGS 84 (4)','Derived at 11 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',6.0,23.0,-124.0,-82.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Pol',1); INSERT INTO "usage" VALUES('EPSG','8209','helmert_transformation','EPSG','1288','EPSG','1192','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1289','Pulkovo 1942 to WGS 84 (5)','Derived at 6 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',5.0,26.0,-121.0,-78.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Cze',1); INSERT INTO "usage" VALUES('EPSG','8210','helmert_transformation','EPSG','1289','EPSG','1306','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1290','Pulkovo 1942 to WGS 84 (6)','Derived at 5 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',4.0,24.0,-124.0,-82.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Lva',0); INSERT INTO "usage" VALUES('EPSG','8211','helmert_transformation','EPSG','1290','EPSG','3268','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1291','Pulkovo 1942 to WGS 84 (7)','Derived at 2 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',44.0,15.0,-130.0,-84.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Kaz',0); INSERT INTO "usage" VALUES('EPSG','8212','helmert_transformation','EPSG','1291','EPSG','1131','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1292','Pulkovo 1942 to WGS 84 (8)','Derived at 7 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',6.0,24.0,-130.0,-92.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Alb',1); INSERT INTO "usage" VALUES('EPSG','8213','helmert_transformation','EPSG','1292','EPSG','1025','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1293','Pulkovo 1942 to WGS 84 (9)','Derived at 4 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',7.0,28.0,-121.0,-77.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Rom',1); INSERT INTO "usage" VALUES('EPSG','8214','helmert_transformation','EPSG','1293','EPSG','1197','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1294','Voirol 1875 to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4304','EPSG','4326',999.0,-73.0,-247.0,227.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Dza N',0); INSERT INTO "usage" VALUES('EPSG','8215','helmert_transformation','EPSG','1294','EPSG','1365','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1296','Trinidad 1903 to WGS 84 (1)','Derived in 1989 by ONI for Amoco.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4302','EPSG','4326',2.0,-61.702,284.488,472.052,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Amoco-Tto Trin',0); INSERT INTO "usage" VALUES('EPSG','8217','helmert_transformation','EPSG','1296','EPSG','1339','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1297','Tete to Moznet (1)','Mean of 32 stations. Residuals as high as 30 metres. To reduce the size of the residuals; four regional parameter sets (see codes 1298-1301) were developed. May be taken as approximate transformation Tete to WGS 84 - see code 1683.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4130',30.0,-115.064,-87.39,-101.716,'EPSG','9001',0.058,-4.001,2.062,'EPSG','9104',9.366,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DNGC-Moz',0); INSERT INTO "usage" VALUES('EPSG','8218','helmert_transformation','EPSG','1297','EPSG','3281','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1298','Tete to Moznet (2)','Mean of 9 stations. Residuals are generally under 1 metre. May be taken as approximate transformation Tete to WGS 84 - see code 1684.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4130',1.0,-82.875,-57.097,-156.768,'EPSG','9001',2.158,-1.524,0.982,'EPSG','9104',-0.359,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DNGC-Moz A',0); INSERT INTO "usage" VALUES('EPSG','8219','helmert_transformation','EPSG','1298','EPSG','2350','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1299','Tete to Moznet (3)','Mean of 6 stations. Residuals are generally under 4 metres. May be taken as approximate transformation Tete to WGS 84 - see code 1685.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4130',4.0,-138.527,-91.999,-114.591,'EPSG','9001',0.14,-3.363,2.217,'EPSG','9104',11.748,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DNGC-Moz B',0); INSERT INTO "usage" VALUES('EPSG','8220','helmert_transformation','EPSG','1299','EPSG','2351','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','1300','Tete to Moznet (4)','Mean of 11 stations. Residuals are generally under 3 metres. May be taken as approximate transformation Tete to WGS 84 - see code 1686.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4130',3.0,-73.472,-51.66,-112.482,'EPSG','9001',-0.953,-4.6,2.368,'EPSG','9104',0.586,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DNGC-Moz C',0); INSERT INTO "usage" VALUES('EPSG','8221','helmert_transformation','EPSG','1300','EPSG','2352','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','1301','Tete to Moznet (5)','Mean of 7 stations. Residuals are 5-10 metres. May be taken as approximate transformation Tete to WGS 84 - see code 1687.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4130',10.0,219.315,168.975,-166.145,'EPSG','9001',-0.198,-5.926,2.356,'EPSG','9104',-57.104,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DNGC-Moz D',0); INSERT INTO "usage" VALUES('EPSG','8222','helmert_transformation','EPSG','1301','EPSG','2353','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1302','Moznet to WGS 84 (1)','For many purposes Moznet can be considered to be coincident with WGS 84. Accuracy better than 1 metre.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4130','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Moz',0); INSERT INTO "usage" VALUES('EPSG','8223','helmert_transformation','EPSG','1302','EPSG','1167','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1303','Pulkovo 1942 to WGS 84 (10)','Mean of 13 stations along entire Kazak coastline.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4284','EPSG','4326',2.0,43.822,-108.842,-119.585,'EPSG','9001',1.455,-0.761,0.737,'EPSG','9104',0.549,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KCS-Kaz Cas',0); INSERT INTO "usage" VALUES('EPSG','8224','helmert_transformation','EPSG','1303','EPSG','2405','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1304','Indian 1975 to WGS 84 (2)','Derived at 62 stations. Accuracy 3m, 2m and 3m in X, Y and Z axes. Replaces Indian 1975 to WGS 84 (1) (code 1154).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4240','EPSG','4326',5.0,210.0,814.0,289.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Tha',0); INSERT INTO "usage" VALUES('EPSG','8225','helmert_transformation','EPSG','1304','EPSG','3741','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1305','Tokyo to WGS 84 (5)','Derived at 29 stations. Accuracy 2m in each axis. Replaces Tokyo to WGS 84 (3) (code 1232).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',4.0,-147.0,506.0,687.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Kor',0); INSERT INTO "usage" VALUES('EPSG','8226','helmert_transformation','EPSG','1305','EPSG','3266','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1306','MGI to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4312','EPSG','4326',999.0,682.0,-203.0,480.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-balk',1); INSERT INTO "usage" VALUES('EPSG','8227','helmert_transformation','EPSG','1306','EPSG','2370','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1307','Naparima 1972 to WGS 84 (3)','DMA does not differentiate between Naparima 1955 (Trinidad) and Naparima 1972 (Tobago). Consequently for Trinidad IOGP has duplicated this transformation as Naparima 1955 to WGS 84 (3) - see code 1556.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4271','EPSG','4326',26.0,-2.0,374.0,172.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Tto Tob',0); INSERT INTO "usage" VALUES('EPSG','8228','helmert_transformation','EPSG','1307','EPSG','1322','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1308','NAD83 to WGS 84 (4)','Strictly between NAD83 and ITRF94(1996.0). Superseded by NAD83 to WGS 84 (5) (code 1515).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4269','EPSG','4326',NULL,-0.9738,1.9453,0.5486,'EPSG','9001',-1.3357e-07,-4.872e-08,-5.507e-08,'EPSG','9101',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Usa ITRF94',1); INSERT INTO "usage" VALUES('EPSG','8229','helmert_transformation','EPSG','1308','EPSG','1323','EPSG','1197'); INSERT INTO "helmert_transformation" VALUES('EPSG','1309','DHDN to ETRS89 (1)','Mean of 69 stations. May be taken as approximate tfm DHDN to WGS 84 (code 1673). Replaced by DHDN to ETRS89 (2) (tfm code 1776) and regional higher accuracy tfms. Note: these later tfms have been published using the Position Vector method.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4314','EPSG','4258',5.0,582.0,105.0,414.0,'EPSG','9001',-1.04,-0.35,3.08,'EPSG','9104',8.3,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W',0); INSERT INTO "usage" VALUES('EPSG','8230','helmert_transformation','EPSG','1309','EPSG','2326','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1310','Pulkovo 1942 to ETRS89 (1)','Mean of 20 stations.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4258',2.0,24.0,-123.0,-94.0,'EPSG','9001',-0.02,0.25,0.13,'EPSG','9104',1.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu E',1); INSERT INTO "usage" VALUES('EPSG','8231','helmert_transformation','EPSG','1310','EPSG','1343','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1311','ED50 to WGS 84 (18)','Recommended CT for UKCS and IrishCS petroleum purposes, known as "Common Offshore". Based on ED50 to WGS 72 (precise ephemeris) 6-nations agreement of 1981 with which precise to broadcast and broadcast to WGS 84 transformations have been concatenated.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.0,-89.5,-93.8,-123.1,'EPSG','9001',0.0,0.0,-0.156,'EPSG','9104',1.2,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKOOA-CO',0); INSERT INTO "usage" VALUES('EPSG','8232','helmert_transformation','EPSG','1311','EPSG','2342','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1314','OSGB36 to WGS 84 (6)','Commonly referred to as the "OSGB Petroleum transformation". For a more accurate transformation see ETRS89 to OSGB36 / British National Grid (3) (code 7953).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4277','EPSG','4326',2.0,446.448,-125.157,542.06,'EPSG','9001',0.15,0.247,0.842,'EPSG','9104',-20.489,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKOOA-Pet',0); INSERT INTO "usage" VALUES('EPSG','8235','helmert_transformation','EPSG','1314','EPSG','1264','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1315','OSGB36 to ED50 (1)','Known as the "UKOOA landward/seaward transformation". This transformation is concatenated from OSGB36 to WGS 84 (6) (Petroleum) (code 1314) minus ED50 to WGS 84 (18) (Common Offshore) (code 1311). Accuracy better than 4m and generally better than 2m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4277','EPSG','4230',2.0,535.948,-31.357,665.16,'EPSG','9001',0.15,0.247,0.998,'EPSG','9104',-21.689,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKOOA-UKCS',0); INSERT INTO "usage" VALUES('EPSG','8236','helmert_transformation','EPSG','1315','EPSG','1264','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1316','Manoca to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4260','EPSG','4326',999.0,-70.9,-151.8,-41.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SCS-Cmr',1); INSERT INTO "usage" VALUES('EPSG','8237','helmert_transformation','EPSG','1316','EPSG','1060','EPSG','1025'); INSERT INTO "helmert_transformation" VALUES('EPSG','1317','Camacupa 1948 to WGS 72BE (1)','Derived by Geophysical Services Inc. in 1979 from mean of Transit results at 7 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4324',10.0,-37.2,-370.6,-228.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Ago',0); INSERT INTO "usage" VALUES('EPSG','8238','helmert_transformation','EPSG','1317','EPSG','1604','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1318','Camacupa 1948 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',10.0,-42.01,-332.21,-229.75,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CON-Ago B5',0); INSERT INTO "usage" VALUES('EPSG','8239','helmert_transformation','EPSG','1318','EPSG','2316','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1319','Camacupa 1948 to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',25.0,-40.0,-354.0,-224.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TEX-Ago B2',0); INSERT INTO "usage" VALUES('EPSG','8240','helmert_transformation','EPSG','1319','EPSG','2317','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1320','Camacupa 1948 to WGS 84 (3)','Replaced by Camacupa 1948 to WGS 84 (9). Used by Shell prior to 1994.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4220','EPSG','4326',10.0,-37.2,-370.6,-224.0,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Ago old',0); INSERT INTO "usage" VALUES('EPSG','8241','helmert_transformation','EPSG','1320','EPSG','2321','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1321','Camacupa 1948 to WGS 84 (4)','Mean of 123 Transit passes at station Cabo Ledo NE base in November 1990. Used by Elf for block 7 up to December 1992 then replaced by Camacupa 1948 to WGS 84 (7). Used by Total in block 8, ExxonMobil block 24, Western Geophysical for spec. data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',10.0,-41.8,-342.2,-228.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Ago',0); INSERT INTO "usage" VALUES('EPSG','8242','helmert_transformation','EPSG','1321','EPSG','2320','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1322','Camacupa 1948 to WGS 84 (5)','Derived at station Djeno during coordination of platform PAL F2 in February 1992. Used by Elf for block 3 up to December 1992 then replaced by Camacupa 1948 to WGS 84 (7).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',3.0,-55.5,-348.0,-229.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B3 old',0); INSERT INTO "usage" VALUES('EPSG','8243','helmert_transformation','EPSG','1322','EPSG','2318','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1323','Camacupa 1948 to WGS 84 (6)','Derived at Luanda observatory December 1992.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',8.0,-43.0,-337.0,-233.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B7 old',0); INSERT INTO "usage" VALUES('EPSG','8244','helmert_transformation','EPSG','1323','EPSG','2319','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1324','Camacupa 1948 to WGS 84 (7)','Derived at platform PAL F2 in December 1992. For use in blocks 3, 7 and 17, replaced by Camacupa 1948 to WGS 84 (10) (code 1327).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',3.0,-48.0,-345.0,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B15',0); INSERT INTO "usage" VALUES('EPSG','8245','helmert_transformation','EPSG','1324','EPSG','2322','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1325','Camacupa 1948 to WGS 84 (8)','Derived at platform PAL F2 in December 1992. Used by Total for block 2 between December 1992 and 1994 then replaced by Camacupa 1948 to WGS 84 (10).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',3.0,-48.6,-345.1,-230.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B2 old',0); INSERT INTO "usage" VALUES('EPSG','8246','helmert_transformation','EPSG','1325','EPSG','2317','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1326','Camacupa 1948 to WGS 84 (9)','Derived by GPS on two Topnav DGPS reference stations at Djeno and Luanda. Replaces Camacupa 1948 to WGS 84 (3). In block 18 replaced by BP from 1999 by Camacupa 1948 to WGS 84 (10).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4220','EPSG','4326',10.0,-41.057,-374.564,-226.287,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Ago B16',0); INSERT INTO "usage" VALUES('EPSG','8247','helmert_transformation','EPSG','1326','EPSG','2323','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1327','Camacupa 1948 to WGS 84 (10)','Derived at platform PAL F2 in 1994 by Topnav using Doris.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326',5.0,-50.9,-347.6,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago N',0); INSERT INTO "usage" VALUES('EPSG','8248','helmert_transformation','EPSG','1327','EPSG','2324','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1328','Malongo 1987 to Mhast (1)','Malongo 1987 is an offshore extension of Mhast adopted by Chevron in 1987.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4259','EPSG','4264',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab',1); INSERT INTO "usage" VALUES('EPSG','8249','helmert_transformation','EPSG','1328','EPSG','1317','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1329','Mhast to WGS 84 (1)','Superseded in 1990 by trf Malongo 1987 to WGS 84 (2), code 1557. Malongo 1987 is an offshore extension of the Mhast cooordinate system.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4264','EPSG','4326',10.0,-252.95,-4.11,-96.38,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab',1); INSERT INTO "usage" VALUES('EPSG','8250','helmert_transformation','EPSG','1329','EPSG','1317','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1330','Malongo 1987 to WGS 84 (1)','Derived at Station Y in April 1989 using 572 transit satellite passes. Computed value for dZ was -96.42 but -96.38 has been utilised. Replaced Malongo 1987 to WGS 84 (3) (code 15791) in 1989. Replaced by Malongo 1987 to WGS 84 (2) (code 1557) in 1990.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4259','EPSG','4326',10.0,-252.95,-4.11,-96.38,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab89',0); INSERT INTO "usage" VALUES('EPSG','8251','helmert_transformation','EPSG','1330','EPSG','3180','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1331','EST92 to ETRS89 (1)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4133','EPSG','4258',0.1,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Est',0); INSERT INTO "usage" VALUES('EPSG','8252','helmert_transformation','EPSG','1331','EPSG','3246','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','1332','Pulkovo 1942 to EST92 (1)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4133',9.0,21.53219,-97.00027,-60.74046,'EPSG','9001',-0.99548,-0.58147,-0.2418,'EPSG','9104',-4.5981,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Est',0); INSERT INTO "usage" VALUES('EPSG','8253','helmert_transformation','EPSG','1332','EPSG','3246','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1333','EST92 to WGS 84 (1)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4133','EPSG','4326',0.5,0.055,-0.541,-0.185,'EPSG','9001',-0.0183,0.0003,0.007,'EPSG','9104',-0.014,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Est',0); INSERT INTO "usage" VALUES('EPSG','8254','helmert_transformation','EPSG','1333','EPSG','3246','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1334','Pulkovo 1942 to WGS 84 (12)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4326',9.0,21.58719,-97.54127,-60.92546,'EPSG','9001',-1.01378,-0.58117,-0.2348,'EPSG','9104',-4.6121,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Est',0); INSERT INTO "usage" VALUES('EPSG','8255','helmert_transformation','EPSG','1334','EPSG','3246','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1437','RT90 to ETRS89 (1)','Derived at 22 points in 1993. Replaced by RT90 to SWEREF99 (1) (code 1895) from 2001. This transformation is actually between ETRS89 and RR92. RR92 is a geographic 3D CRS where the horizontal component is RT90.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4124','EPSG','4258',0.5,419.3836,99.3335,591.3451,'EPSG','9001',-0.850389,-1.817277,7.862238,'EPSG','9104',-0.99496,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Swe',0); INSERT INTO "usage" VALUES('EPSG','8358','helmert_transformation','EPSG','1437','EPSG','1225','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','1438','Fahud to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4232','EPSG','4326',25.0,-333.102,-11.02,230.69,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PDO-Omn',0); INSERT INTO "usage" VALUES('EPSG','8359','helmert_transformation','EPSG','1438','EPSG','4009','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1439','PSD93 to WGS 84 (1)','Residuals 0.5m at 67% probability level. Replaced PSD93 to WGS 84 (2) (code 8581) in 1997.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4134','EPSG','4326',0.5,-180.624,-225.516,173.919,'EPSG','9001',-0.81,-1.898,8.336,'EPSG','9104',16.71006,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PDO-Omn 97',0); INSERT INTO "usage" VALUES('EPSG','8360','helmert_transformation','EPSG','1439','EPSG','3288','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1440','ED50 to WGS 84 (19)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',999.0,-86.0,-92.2,-127.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HEL-Grc',0); INSERT INTO "usage" VALUES('EPSG','8361','helmert_transformation','EPSG','1440','EPSG','3254','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1441','Antigua 1943 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4601','EPSG','4326',10.0,-255.0,-15.0,71.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Atg Ant',0); INSERT INTO "usage" VALUES('EPSG','8362','helmert_transformation','EPSG','1441','EPSG','1273','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1442','Dominica 1945 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4602','EPSG','4326',10.0,725.0,685.0,536.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Dma',0); INSERT INTO "usage" VALUES('EPSG','8363','helmert_transformation','EPSG','1442','EPSG','3239','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1443','Grenada 1953 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4603','EPSG','4326',10.0,72.0,213.7,93.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Grd',0); INSERT INTO "usage" VALUES('EPSG','8364','helmert_transformation','EPSG','1443','EPSG','3118','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1444','Montserrat 1958 to WGS 84 (1)','Derived at 1 satellite station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4604','EPSG','4326',44.0,174.0,359.0,365.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Msr',0); INSERT INTO "usage" VALUES('EPSG','8365','helmert_transformation','EPSG','1444','EPSG','3279','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1445','St. Kitts 1955 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4605','EPSG','4326',10.0,9.0,183.0,236.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Kna',0); INSERT INTO "usage" VALUES('EPSG','8366','helmert_transformation','EPSG','1445','EPSG','3297','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1446','St. Lucia 1955 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4606','EPSG','4326',10.0,-149.0,128.0,296.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Lca',0); INSERT INTO "usage" VALUES('EPSG','8367','helmert_transformation','EPSG','1446','EPSG','3298','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1448','HD72 to WGS 84 (3)','Parameter values taken from HD72 to ETRS89 (2) (code 1449) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaces HD72 to WGS 84 (1) (code 1830).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','4326',1.0,52.684,-71.194,-13.975,'EPSG','9001',0.312,0.1063,0.3729,'EPSG','9104',1.0191,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELTE-Hun 2003',0); INSERT INTO "usage" VALUES('EPSG','8369','helmert_transformation','EPSG','1448','EPSG','1119','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1449','HD72 to ETRS89 (2)','Derived at 1153 stations of the Hungarian National GPS Network. Values here correct parameter errors given in Hungarian standard MSZ 7222:2002. Replaces HD72 to ETRS89 (1), code 1829. May be taken as approximate tfm HD72 to WGS 84 - see tfm code 1448.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','4258',0.4,52.684,-71.194,-13.975,'EPSG','9001',0.312,0.1063,0.3729,'EPSG','9104',1.0191,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MSZ-Hun',0); INSERT INTO "usage" VALUES('EPSG','8370','helmert_transformation','EPSG','1449','EPSG','1119','EPSG','1034'); INSERT INTO "helmert_transformation" VALUES('EPSG','1458','AGD66 to GDA94 (2)','For higher accuracy requirements see AGD66 to GDA94 (11) (code 1803). May be taken as approximate transformation AGD66 to WGS 84 - see code 1665. See code 5827 for a marginally better accuracy transformation derived locally.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',1.0,-129.193,-41.212,130.73,'EPSG','9001',-0.246,-0.374,-0.329,'EPSG','9104',-2.955,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-ACT 1m',0); INSERT INTO "usage" VALUES('EPSG','8379','helmert_transformation','EPSG','1458','EPSG','2283','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1459','AGD66 to GDA94 (3)','Replaced in 2000 by AGD66 to GDA94 (8) (code 1594). Application gives result differences which are sub-metre.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',1.0,-120.695,-62.73,165.46,'EPSG','9001',-0.109,0.141,0.116,'EPSG','9104',2.733,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Tas 1m old',0); INSERT INTO "usage" VALUES('EPSG','8380','helmert_transformation','EPSG','1459','EPSG','1282','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1460','AGD66 to GDA94 (4)','For higher accuracy requirements see AGD66 to GDA94 (11) (code 1803). May be taken as approximate transformation AGD66 to WGS 84 - see code 1666.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',1.0,-119.353,-48.301,139.484,'EPSG','9001',-0.415,-0.26,-0.437,'EPSG','9104',-0.613,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-NSW Vic 1m',0); INSERT INTO "usage" VALUES('EPSG','8381','helmert_transformation','EPSG','1460','EPSG','2286','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1469','Locodjo 1965 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4142','EPSG','4326',15.0,-125.0,53.0,467.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Civ',0); INSERT INTO "usage" VALUES('EPSG','8390','helmert_transformation','EPSG','1469','EPSG','2282','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1470','Abidjan 1987 to WGS 84 (1)','Derived in Abidjan for use in the immediate area, but used by E&P industry onshore and offshore. Accuracy is submetre in Abidjan but unknown elsewhere. A similar CT (tfm code 6872) was used by Western Geophysical for offshore surveys in the 1990s.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4143','EPSG','4326',2.0,-124.76,53.0,466.79,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Civ',0); INSERT INTO "usage" VALUES('EPSG','8391','helmert_transformation','EPSG','1470','EPSG','1075','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','1471','MGI to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4326',NULL,-577.326,-90.129,-463.919,'EPSG','9001',-15.8537,-4.55,-16.3489,'EPSG','9113',-2.4232,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut',1); INSERT INTO "usage" VALUES('EPSG','8392','helmert_transformation','EPSG','1471','EPSG','1037','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','1473','NAD83(CSRS98) to WGS 84 (1)','For many purposes NAD83(CSRS98) can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4140','EPSG','4326',NULL,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','8394','helmert_transformation','EPSG','1473','EPSG','1336','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1504','Cape to Hartebeesthoek94 (1)','Residuals should not exceed 15 metres. Also used to transform Cape to WGS 84 - see code 1129.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4222','EPSG','4148',15.0,-134.73,-110.92,-292.66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DSM-Zaf',0); INSERT INTO "usage" VALUES('EPSG','8425','helmert_transformation','EPSG','1504','EPSG','3309','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1505','Hartebeesthoek94 to WGS 84 (1)','For many purposes Hartebeesthoek94 datum can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4148','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Zaf',0); INSERT INTO "usage" VALUES('EPSG','8426','helmert_transformation','EPSG','1505','EPSG','4540','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1508','CH1903 to WGS 84 (1)','Implemented in Bundesamt für Landestopographie programme GRANIT.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4149','EPSG','4326',NULL,660.077,13.551,369.344,'EPSG','9001',2.484,1.783,2.939,'EPSG','9113',5.66,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH 1',1); INSERT INTO "usage" VALUES('EPSG','8429','helmert_transformation','EPSG','1508','EPSG','1286','EPSG','1025'); INSERT INTO "helmert_transformation" VALUES('EPSG','1509','CH1903+ to CHTRS95 (1)','This transformation is also given as CH1903+ to ETRS89 (1) (code 1647). CHTRS95 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4150','EPSG','4151',0.1,674.374,15.056,405.346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH',0); INSERT INTO "usage" VALUES('EPSG','8430','helmert_transformation','EPSG','1509','EPSG','1286','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1510','CH1903 to WGS 84 (2)','These parameters are strictly between CH1903+ and CHTRF95 but are used from CH1903 as an approximation which is within the accuracy of the distortions in the CH1903 network.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4149','EPSG','4326',NULL,674.374,15.056,405.346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH 2',1); INSERT INTO "usage" VALUES('EPSG','8431','helmert_transformation','EPSG','1510','EPSG','1286','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1511','CHTRS95 to WGS 84 (1)','For many purposes CHTRS95 can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4151','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-CH',0); INSERT INTO "usage" VALUES('EPSG','8432','helmert_transformation','EPSG','1511','EPSG','1286','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1512','Rassadiran to WGS 84 (1)','Derived in 1998 at Assaluyeh (Taheri refinery) by Geoid for Total. Used only for terminal site for South Pars phases 2 and 3.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4153','EPSG','4326',0.5,-133.63,-157.5,-158.62,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Irn Taheri',0); INSERT INTO "usage" VALUES('EPSG','8433','helmert_transformation','EPSG','1512','EPSG','1338','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1513','FD58 to WGS 84 (1)','Derived in 1998 in Kangan district by Geoid for Total. Used for South Pars phases 2 and 3.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4132','EPSG','4326',0.5,-241.54,-163.64,396.06,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Irn Kangan',0); INSERT INTO "usage" VALUES('EPSG','8434','helmert_transformation','EPSG','1513','EPSG','2362','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1514','ED50(ED77) to WGS 84 (1)','Used for South Pars phases 6, 7 and 8.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4154','EPSG','4326',1.0,-110.33,-97.73,-119.85,'EPSG','9001',0.3423,1.1634,0.2715,'EPSG','9104',0.063,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NCCI-Irn',0); INSERT INTO "usage" VALUES('EPSG','8435','helmert_transformation','EPSG','1514','EPSG','1123','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1515','NAD83 to WGS 84 (5)','Strictly between NAD83 and ITRF96(1997.0). Supersedes NAD83 to WGS 84 (4) (code 1308).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4269','EPSG','4326',NULL,-0.991,1.9072,0.5129,'EPSG','9001',-1.25033e-07,-4.6785e-08,-5.6529e-08,'EPSG','9101',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Usa ITRF96',1); INSERT INTO "usage" VALUES('EPSG','8436','helmert_transformation','EPSG','1515','EPSG','1323','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1516','La Canoa to WGS 84 (18)','Parameter values estimated accuracy: ± 2.0m; ± 2.7m; ± 1.3m respectively. Also used for PSAD56 to WGS 84 transformations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4247','EPSG','4326',2.5,-273.5,110.6,-357.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LAG-Ven E',0); INSERT INTO "usage" VALUES('EPSG','8437','helmert_transformation','EPSG','1516','EPSG','2363','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','1517','Conakry 1905 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4315','EPSG','4326',30.0,-23.0,259.0,-9.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Gin',0); INSERT INTO "usage" VALUES('EPSG','8438','helmert_transformation','EPSG','1517','EPSG','3257','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1518','Dabola 1981 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4155','EPSG','4326',25.0,-83.0,37.0,124.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Gin',0); INSERT INTO "usage" VALUES('EPSG','8439','helmert_transformation','EPSG','1518','EPSG','3257','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1527','Campo Inchauspe to WGS 84 (2)','Derived through ties at 2 stations (Cerro Colorado and Chihuido Sur) to 4 IGS stations in February 1995','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4221','EPSG','4326',0.5,-154.5,150.7,100.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Arg Neu',0); INSERT INTO "usage" VALUES('EPSG','8448','helmert_transformation','EPSG','1527','EPSG','2325','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1528','Chos Malal 1914 to Campo Inchauspe (1)','Derived through common coordinates at 5 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4160','EPSG','4221',10.0,160.0,26.0,41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Arg Neu',0); INSERT INTO "usage" VALUES('EPSG','8449','helmert_transformation','EPSG','1528','EPSG','2325','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1529','Hito XVIII to WGS 84 (1)','Derived through ties at 3 stations (RC03, TOTAL11 and MP12) to 3 IGS stations in November 1995','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4254','EPSG','4326',0.5,18.38,192.45,96.82,'EPSG','9001',0.056,-0.142,-0.2,'EPSG','9104',-0.0013,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Arg TdF',0); INSERT INTO "usage" VALUES('EPSG','8450','helmert_transformation','EPSG','1529','EPSG','2357','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1530','NAD27 to WGS 84 (30)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',3.0,-4.2,135.4,181.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICH-Cub',0); INSERT INTO "usage" VALUES('EPSG','8451','helmert_transformation','EPSG','1530','EPSG','1077','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1531','Nahrwan 1967 to WGS 84 (4)','Parameter values adopted by Total are mean of those derived by Oceonics and Geoid through ties at platform AK1 to 4 IGS stations in March 1995.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',0.5,-245.0,-153.9,382.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-UAE Abk',0); INSERT INTO "usage" VALUES('EPSG','8452','helmert_transformation','EPSG','1531','EPSG','2392','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1532','M''poraloko to WGS 84 (2)','Derived as mean of Doris determinations at 3 stations in Port Gentil area in 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4266','EPSG','4326',0.5,-80.7,-132.5,41.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Elf-Gab94',0); INSERT INTO "usage" VALUES('EPSG','8453','helmert_transformation','EPSG','1532','EPSG','1100','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1533','Kalianpur 1937 to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4144','EPSG','4326',5.0,214.0,804.0,268.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Mmr Moat',0); INSERT INTO "usage" VALUES('EPSG','8454','helmert_transformation','EPSG','1533','EPSG','2361','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1534','Minna to WGS 84 (3)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4263','EPSG','4326',NULL,-111.92,-87.85,114.5,'EPSG','9001',1.875,0.202,0.219,'EPSG','9104',0.032,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Nig S',1); INSERT INTO "usage" VALUES('EPSG','8455','helmert_transformation','EPSG','1534','EPSG','2371','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1536','Nahrwan 1967 to WGS 84 (5)','Derived by Brown & Root in 1992 for Qatar General Petroleum Corporation North Field development. Adopted by QGPC for all offshore Qatar.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',1.0,-250.2,-153.09,391.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'B&R-Qat off',0); INSERT INTO "usage" VALUES('EPSG','8457','helmert_transformation','EPSG','1536','EPSG','2406','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1537','Indian 1975 to WGS 84 (3)','Derived in 1995 at point RTSD181.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4240','EPSG','4326',1.0,204.64,834.74,293.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Fug-Tha',0); INSERT INTO "usage" VALUES('EPSG','8458','helmert_transformation','EPSG','1537','EPSG','2358','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1538','Carthage to WGS 84 (2)','Derived at station Chaffar January 1995.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4223','EPSG','4326',1.0,-260.1,5.5,432.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Elf-Tun',0); INSERT INTO "usage" VALUES('EPSG','8459','helmert_transformation','EPSG','1538','EPSG','1489','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1539','South Yemen to Yemen NGN96 (1)','May be used as an approximate transformation to WGS 84 - see South Yemen to WGS 84 (1) (code 1682).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4164','EPSG','4163',5.0,-76.0,-138.0,67.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Yem South',0); INSERT INTO "usage" VALUES('EPSG','8460','helmert_transformation','EPSG','1539','EPSG','1340','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1540','Yemen NGN96 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4163','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Yem',0); INSERT INTO "usage" VALUES('EPSG','8461','helmert_transformation','EPSG','1540','EPSG','1257','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1541','Indian 1960 to WGS 72BE (1)','Derived in Vung Tau area by Technical Navigation for Deminex in 1978.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4131','EPSG','4324',25.0,199.0,931.0,317.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PV-Vnm',0); INSERT INTO "usage" VALUES('EPSG','8462','helmert_transformation','EPSG','1541','EPSG','1495','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1542','Indian 1960 to WGS 84 (2)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4131','EPSG','4326',44.0,198.0,881.0,317.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Vnm 16N',0); INSERT INTO "usage" VALUES('EPSG','8463','helmert_transformation','EPSG','1542','EPSG','2359','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1543','Indian 1960 to WGS 84 (3)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4131','EPSG','4326',44.0,182.0,915.0,344.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Vnm ConSon',0); INSERT INTO "usage" VALUES('EPSG','8464','helmert_transformation','EPSG','1543','EPSG','2360','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1544','Hanoi 1972 to WGS 84 (1)','Derived in Vung Tau area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4147','EPSG','4326',5.0,-17.51,-108.32,-62.39,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BP-Vnm',0); INSERT INTO "usage" VALUES('EPSG','8465','helmert_transformation','EPSG','1544','EPSG','1494','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1545','Egypt 1907 to WGS 72 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4229','EPSG','4322',5.0,-121.8,98.1,-15.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MCE-Egy',0); INSERT INTO "usage" VALUES('EPSG','8466','helmert_transformation','EPSG','1545','EPSG','1086','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1546','Egypt 1907 to WGS 84 (3)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4229','EPSG','4326',30.0,-146.21,112.63,4.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Racal-Egy GoS',1); INSERT INTO "usage" VALUES('EPSG','8467','helmert_transformation','EPSG','1546','EPSG','2341','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1547','Bissau to WGS 84 (1)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4165','EPSG','4326',25.0,-173.0,253.0,27.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gnb',0); INSERT INTO "usage" VALUES('EPSG','8468','helmert_transformation','EPSG','1547','EPSG','3258','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1548','SAD69 to WGS 84 (14)','Derived by Brazilean Institute of Geography and Statistics (IGBE) in 1989. Used by ANP.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4291','EPSG','4326',NULL,-66.87,4.37,-38.52,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGBE-Bra',1); INSERT INTO "usage" VALUES('EPSG','8469','helmert_transformation','EPSG','1548','EPSG','1053','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','1549','Aratu to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',999.0,-158.0,315.0,-148.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra Camp',1); INSERT INTO "usage" VALUES('EPSG','8470','helmert_transformation','EPSG','1549','EPSG','2307','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1550','Aratu to WGS 84 (2)','Replaced by Aratu to WGS 84 (18) (tfm code 5061) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',5.0,-139.62,290.53,-150.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra TucN',0); INSERT INTO "usage" VALUES('EPSG','8471','helmert_transformation','EPSG','1550','EPSG','2308','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1551','Aratu to WGS 84 (3)','Replaced by Aratu to WGS 84 (18) (tfm code 5061) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',5.0,-141.15,293.44,-150.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra TucC',0); INSERT INTO "usage" VALUES('EPSG','8472','helmert_transformation','EPSG','1551','EPSG','2309','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1552','Aratu to WGS 84 (4)','Replaced by Aratu to WGS 84 (18) (tfm code 5061) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',5.0,-142.48,296.03,-149.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra TucS',0); INSERT INTO "usage" VALUES('EPSG','8473','helmert_transformation','EPSG','1552','EPSG','2310','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1555','Naparima 1955 to WGS 84 (2)','Derived in 1989 by ONI for Amoco.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4158','EPSG','4326',1.0,-0.465,372.095,171.736,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Amoco-Tto Trin',0); INSERT INTO "usage" VALUES('EPSG','8476','helmert_transformation','EPSG','1555','EPSG','3143','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1556','Naparima 1955 to WGS 84 (3)','DMA does not differentiate between Naparima 1955 (Trinidad) and Naparima 1972 (Tobago). Consequently for Trinidad IOGP has duplicated this transformation as Naparima 1972 to WGS 84 (3) - see code 1307.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4158','EPSG','4326',26.0,-2.0,374.0,172.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Tto Trin',0); INSERT INTO "usage" VALUES('EPSG','8477','helmert_transformation','EPSG','1556','EPSG','3143','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1557','Malongo 1987 to WGS 84 (2)','Derived at station Y in July 1990 through Transit single point positioning using 187 passes by Geodetic Survey Ltd. Replaces Malongo 1987 to WGS 84 (1) (trf code 1330).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4259','EPSG','4326',5.0,-254.1,-5.36,-100.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab90',0); INSERT INTO "usage" VALUES('EPSG','8478','helmert_transformation','EPSG','1557','EPSG','3180','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1558','Korean 1995 to WGS 84 (1)','Derived at 5 stations. Accuracy 1m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4166','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Kor',0); INSERT INTO "usage" VALUES('EPSG','8479','helmert_transformation','EPSG','1558','EPSG','3266','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1560','Nord Sahara 1959 to WGS 72BE (1)','Derived at IGN monument CFP19 using Transit.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4324',8.0,-156.5,-87.2,285.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGG-Alg HM',0); INSERT INTO "usage" VALUES('EPSG','8481','helmert_transformation','EPSG','1560','EPSG','2393','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1561','Qatar 1974 to WGS 84 (1)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4285','EPSG','4326',35.0,-128.0,-283.0,22.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Qat',0); INSERT INTO "usage" VALUES('EPSG','8482','helmert_transformation','EPSG','1561','EPSG','1346','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1562','Qatar 1974 to WGS 84 (2)','Derived by Brown & Root in 1992 for Qatar General Petroleum Corporation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4285','EPSG','4326',1.0,-128.16,-282.42,21.93,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'B&R-Qat off',0); INSERT INTO "usage" VALUES('EPSG','8483','helmert_transformation','EPSG','1562','EPSG','2406','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1563','Qatar 1974 to WGS 84 (3)','Derived by Qatar Centre for GIS. See Qatar 1974 to WGS 84 (2) (code 1562) for transformation used by QGPC for offshore petroleum industry.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4285','EPSG','4326',1.0,-128.033,-283.697,21.052,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGIS-Qat',0); INSERT INTO "usage" VALUES('EPSG','8484','helmert_transformation','EPSG','1563','EPSG','1346','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1564','NZGD49 to WGS 84 (2)','These parameter values are taken from NZGD49 to NZGD2000 (2) (code 1701) and assume that NZGD2000 and WGS 84 are coincident to within the accuracy of the transformation. For improved accuracy use NZGD49 to WGS 84 (4) (code 1670).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4272','EPSG','4326',4.0,59.47,-5.04,187.44,'EPSG','9001',-0.47,0.1,-1.024,'EPSG','9104',-4.5993,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl 4m',0); INSERT INTO "usage" VALUES('EPSG','8485','helmert_transformation','EPSG','1564','EPSG','3285','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1565','NZGD2000 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4167','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl',0); INSERT INTO "usage" VALUES('EPSG','8486','helmert_transformation','EPSG','1565','EPSG','1175','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1566','NZGD49 to NZGD2000 (1)','For better accuracy use NZGD49 to NZGD2000 (2) (code 1701) or NZGD49 to NZGD2000 (3) (code 1568).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4272','EPSG','4167',5.0,54.4,-20.1,183.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl 5m',0); INSERT INTO "usage" VALUES('EPSG','8487','helmert_transformation','EPSG','1566','EPSG','3285','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1567','NZGD49 to NZGD2000 (2)','4m accuracy. For better accuracy use NZGD49 to NZGD2000 (3) (code 1568)','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4272','EPSG','4167',NULL,59.47,-5.04,187.44,'EPSG','9001',-0.47,0.1,1.024,'EPSG','9104',-4.5993,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl 4m',1); INSERT INTO "usage" VALUES('EPSG','8488','helmert_transformation','EPSG','1567','EPSG','1175','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','1569','Accra to WGS 84 (1)','Derived at 3 common points.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4168','EPSG','4326',25.0,-199.0,32.0,322.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MCE-Gha',0); INSERT INTO "usage" VALUES('EPSG','8490','helmert_transformation','EPSG','1569','EPSG','1104','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1570','Accra to WGS 72BE (1)','Derived be single point Transit observation at several locations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4168','EPSG','4324',25.0,-171.16,17.29,323.31,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Gha',0); INSERT INTO "usage" VALUES('EPSG','8491','helmert_transformation','EPSG','1570','EPSG','1505','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1571','Amersfoort to ETRS89 (1)','Dutch sources also quote an equivalent transformation with parameter values dX=+593.032 dY=+26.000 dZ=+478.741m, rX rY rZ and dS as this tfm. These values belong to a different transformation method and cannot be used with the Coordinate Frame method.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4258','EPSG','4326',NULL,565.04,49.91,465.84,'EPSG','9001',1.9848,-1.7439,9.0587,'EPSG','9109',4.0772,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NCG-Nld 2000',1); INSERT INTO "usage" VALUES('EPSG','8492','helmert_transformation','EPSG','1571','EPSG','1172','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','1577','American Samoa 1962 to WGS 84 (1)','Transformation based on observations at 2 stations in 1993. One sigma uncertainty is 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4169','EPSG','4326',44.0,-115.0,118.0,426.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Asm',0); INSERT INTO "usage" VALUES('EPSG','8498','helmert_transformation','EPSG','1577','EPSG','3109','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1580','NAD83(HARN) to WGS 84 (1)','For many purposes NAD83(HARN) can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4152','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Usa',0); INSERT INTO "usage" VALUES('EPSG','8501','helmert_transformation','EPSG','1580','EPSG','1337','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1581','SIRGAS 1995 to WGS 84 (1)','Accuracy 1m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4170','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-S America',0); INSERT INTO "usage" VALUES('EPSG','8502','helmert_transformation','EPSG','1581','EPSG','3448','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1582','PSAD56 to WGS 84 (10)','Derived May 1995 by Geoid for Total. OSU91A geoid model used.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',3.0,-259.73,173.12,-398.27,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Bol Mad',0); INSERT INTO "usage" VALUES('EPSG','8503','helmert_transformation','EPSG','1582','EPSG','2400','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1583','PSAD56 to WGS 84 (11)','Derived July 1997 by Geoid from data recorded by UGA for Total. OSU91A geoid model used.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',0.5,-307.7,265.3,-363.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Bol B20',0); INSERT INTO "usage" VALUES('EPSG','8504','helmert_transformation','EPSG','1583','EPSG','2401','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1584','Deir ez Zor to WGS 72BE (1)','Recomputed in 1991 by Elf from data derived in 1983 at station 254 Deir by Geco using Transit. Derivation of 1983 parameter values of dX=-163.2 dY=-12.7 dZ=+232.7 contained errors in geodetic parameters for Syria.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4227','EPSG','4324',5.0,-174.6,-3.1,236.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GECO-Syr',0); INSERT INTO "usage" VALUES('EPSG','8505','helmert_transformation','EPSG','1584','EPSG','2329','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1585','Deir ez Zor to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4227','EPSG','4326',999.0,-177.5,14.1,237.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Syr',1); INSERT INTO "usage" VALUES('EPSG','8506','helmert_transformation','EPSG','1585','EPSG','1227','EPSG','1025'); INSERT INTO "helmert_transformation" VALUES('EPSG','1586','Deir ez Zor to WGS 84 (3)','Derived in 1995 by CGG for Al Furat Petroleum Company. Can be approximated using geocentric translations of dX=-174.3m, dY=+14.1m, dZ=+237.6m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4227','EPSG','4326',999.0,-175.09,1.218,238.831,'EPSG','9001',-0.047,0.019,0.808,'EPSG','9104',0.1698,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Syr Whal',0); INSERT INTO "usage" VALUES('EPSG','8507','helmert_transformation','EPSG','1586','EPSG','2327','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1587','Deir ez Zor to WGS 84 (4)','Derived at four stations by Topnav in 1997.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4227','EPSG','4326',1.0,-191.77,15.01,235.07,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Syr Shad',0); INSERT INTO "usage" VALUES('EPSG','8508','helmert_transformation','EPSG','1587','EPSG','2328','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1588','ED50 to ETRS89 (1)','Included in Statens Kartverk programme wsktrans from 1997. The same parameter values were adopted for ED50 to WGS84 (variant 23) transformation offshore Norway north of 62N from April 2001 - see code 1612.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258',1.0,-116.641,-56.931,-110.559,'EPSG','9001',4.327,4.464,-4.444,'EPSG','9109',-3.52,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NMA-Nor N65 1997',0); INSERT INTO "usage" VALUES('EPSG','8509','helmert_transformation','EPSG','1588','EPSG','2332','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1591','RGF93 v1 to ETRS89 (1)','RGF93 v1 is a national realization of ETRS89. May be taken as approximate transformation RGF93 v1 to WGS 84 - see code 1671.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4171','EPSG','4258',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8512','helmert_transformation','EPSG','1591','EPSG','1096','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','1592','Timbalai 1948 to WGS 84 (2)','Originally used by BSP offshore only, use extended to onshore in 2010.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4298','EPSG','4326',5.0,-678.0,670.0,-48.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BSP-Brn',0); INSERT INTO "usage" VALUES('EPSG','8513','helmert_transformation','EPSG','1592','EPSG','1055','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1594','AGD66 to GDA94 (8)','Replaces AGD66 to GDA94 (3) (code 1459) from August 2000. For higher accuracy requirements see AGD66 to GDA94 (11) (code 1803). May be taken as approximate transformation AGD66 to WGS 84 - see code 1667.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',1.0,-120.271,-64.543,161.632,'EPSG','9001',-0.217,0.067,0.129,'EPSG','9104',2.499,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Tas 1m',0); INSERT INTO "usage" VALUES('EPSG','8515','helmert_transformation','EPSG','1594','EPSG','1282','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1595','AGD66 to GDA94 (9)','For higher accuracy requirements see AGD66 to GDA94 (11) (code 1803). May be taken as approximate transformation AGD66 to WGS 84 - see code 1668.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',1.0,-124.133,-42.003,137.4,'EPSG','9001',0.008,-0.557,-0.178,'EPSG','9104',-1.854,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-NT 1m',0); INSERT INTO "usage" VALUES('EPSG','8516','helmert_transformation','EPSG','1595','EPSG','2284','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1597','Bogota 1975 to WGS 84 (2)','Derived in 1995 by WGC at first order stations Recreo and Mena via multi-day ties to 4 IGS stations. Residuals under 20cm.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4218','EPSG','4326',0.2,304.5,306.5,-318.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BP-Col CusCup',0); INSERT INTO "usage" VALUES('EPSG','8518','helmert_transformation','EPSG','1597','EPSG','2315','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1598','POSGAR to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4172','EPSG','4326',NULL,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Arg',1); INSERT INTO "usage" VALUES('EPSG','8519','helmert_transformation','EPSG','1598','EPSG','1033','EPSG','1025'); INSERT INTO "helmert_transformation" VALUES('EPSG','1609','BD72 to WGS 84 (1)','Scale difference is given by information source as 0.999999. Given in this record in ppm to assist application usage. Very similar parameter values (to slightly less precision) used for BD72 to ETRS89: see code 1652.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4313','EPSG','4326',1.0,-99.059,53.322,-112.486,'EPSG','9001',-0.419,0.83,-1.885,'EPSG','9104',-1.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel 7',0); INSERT INTO "usage" VALUES('EPSG','8530','helmert_transformation','EPSG','1609','EPSG','1347','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1610','BD72 to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4313','EPSG','4326',5.0,-125.8,79.9,-100.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel 3',0); INSERT INTO "usage" VALUES('EPSG','8531','helmert_transformation','EPSG','1610','EPSG','1347','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1611','IRENET95 to ETRS89 (1)','IRENET95 is a regional realization of ETRS89. May be taken as approximate transformation IRENET95 to WGS 84 - see code 1678.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4173','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire',0); INSERT INTO "usage" VALUES('EPSG','8532','helmert_transformation','EPSG','1611','EPSG','1305','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','1612','ED50 to WGS 84 (23)','Parameter values are taken from ED50 to ETRS89 (1), code 1588, (rotations converted from μrad). Adopted for ED50 to WGS 84 CTs offshore Norway north of 62°N from April 2001, replacing code 1590. Included in Statens Kartverk programme wsktrans from v4.0.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.0,-116.641,-56.931,-110.559,'EPSG','9001',0.893,0.921,-0.917,'EPSG','9104',-3.52,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Nor N62 2001',0); INSERT INTO "usage" VALUES('EPSG','8533','helmert_transformation','EPSG','1612','EPSG','2601','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1613','ED50 to WGS 84 (24)','Approximation to 1 metre of concatenated transformation ED50 to WGS 84 (14), code 8653. 8653 remains the transformation promulgated by Statens Kartverk but 1613 recommended by EPSG for practical oil industry usage.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.0,-90.365,-101.13,-123.384,'EPSG','9001',0.333,0.077,0.894,'EPSG','9104',1.994,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Nor S62 2001',0); INSERT INTO "usage" VALUES('EPSG','8534','helmert_transformation','EPSG','1613','EPSG','2334','EPSG','1253'); INSERT INTO "helmert_transformation" VALUES('EPSG','1614','Sierra Leone 1968 to WGS 84 (1)','Determined at 8 stations, accuracy +/- 15m in each axis. Info. Source has the source CRS as Sierra Leone 1960. Sierra Leone 1968 is a readjustment of the 1960 network: coordinates changed by less than 3 metres.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4175','EPSG','4326',26.0,-88.0,4.0,101.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Sle',0); INSERT INTO "usage" VALUES('EPSG','8535','helmert_transformation','EPSG','1614','EPSG','3306','EPSG','1076'); INSERT INTO "helmert_transformation" VALUES('EPSG','1615','Timbalai 1948 to WGS 84 (3)','CARE! Erroneous GPS data was used in the derivation of these parameters. They produce a coordinate difference of 10m horizontally and 50m vertically compared to Timbalai 1948 to WGS 84 (2) (code 1592).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4298','EPSG','4326',100.0,-726.282,703.611,-48.999,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Brn',0); INSERT INTO "usage" VALUES('EPSG','8536','helmert_transformation','EPSG','1615','EPSG','2349','EPSG','1142'); INSERT INTO "helmert_transformation" VALUES('EPSG','1616','PSD93 to WGS 72 (1)','Residuals 1.2m at 67% probability level.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4134','EPSG','4322',1.2,-182.046,-225.604,168.884,'EPSG','9001',-0.616,-1.655,7.824,'EPSG','9104',16.641,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PDO-Omn 93',0); INSERT INTO "usage" VALUES('EPSG','8537','helmert_transformation','EPSG','1616','EPSG','3288','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1617','PSD93 to WGS 84 (3)','Accuracy better than 0.5m in block 4.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4134','EPSG','4326',0.5,-191.808,-250.512,167.861,'EPSG','9001',-0.792,-1.653,8.558,'EPSG','9104',20.703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Omn 95',0); INSERT INTO "usage" VALUES('EPSG','8538','helmert_transformation','EPSG','1617','EPSG','2404','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1618','MGI to WGS 84 (3)','Same transformation parameters used for MGI to ETRS89 (1) (code 1619).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4326',1.5,577.326,90.129,463.919,'EPSG','9001',5.137,1.474,5.297,'EPSG','9104',2.4232,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','8539','helmert_transformation','EPSG','1618','EPSG','1037','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1619','MGI to ETRS89 (1)','Same transformation parameters used for MGI to WGS 84 (3) (code 1618). Precision of parameter values in this record were increased effective 16-Dec-2006 (db v6.12): see change record 2006.971.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4258',1.5,577.326,90.129,463.919,'EPSG','9001',5.137,1.474,5.297,'EPSG','9104',2.4232,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','8540','helmert_transformation','EPSG','1619','EPSG','1037','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','1620','MGI to ETRS89 (2)','May be taken as approximate transformation MGI to WGS 84 - see code 1621.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4258',1.0,551.7,162.9,467.9,'EPSG','9001',6.04,1.96,-11.38,'EPSG','9104',-4.82,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DGU-Hrv',1); INSERT INTO "usage" VALUES('EPSG','8541','helmert_transformation','EPSG','1620','EPSG','1076','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1621','MGI to WGS 84 (4)','Parameter values from MGI to ETRS89 (2) (code 1620). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4326',1.0,551.7,162.9,467.9,'EPSG','9001',6.04,1.96,-11.38,'EPSG','9104',-4.82,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Hrv',1); INSERT INTO "usage" VALUES('EPSG','8542','helmert_transformation','EPSG','1621','EPSG','1076','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1622','S-JTSK to ETRS89 (1)','May be taken as approximate transformation S-JTSK to WGS 84 - see code 1623. Improved by S-JTSK/05 to ETRS89 (1) (code 5226) in 2009, where S-JTSK/05 is a scientific working system and S-JTSK remains the legal system in Czechia.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4258',1.0,570.8,85.7,462.8,'EPSG','9001',4.998,1.587,5.261,'EPSG','9104',3.56,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CUZK-Cze',0); INSERT INTO "usage" VALUES('EPSG','8543','helmert_transformation','EPSG','1622','EPSG','1079','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1623','S-JTSK to WGS 84 (1)','Parameter values from S-JTSK to ETRS89 (1) (code 1622). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaced by S-JTSK to WGS 84 (5) (code 5239).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4326',1.0,570.8,85.7,462.8,'EPSG','9001',4.998,1.587,5.261,'EPSG','9104',3.56,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Cze',0); INSERT INTO "usage" VALUES('EPSG','8544','helmert_transformation','EPSG','1623','EPSG','1079','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1624','S-JTSK to ETRS89 (2)','May be taken as approximate transformation S-JTSK to WGS 84 - see code 1625.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4258',1.0,559.0,68.7,451.5,'EPSG','9001',7.92,4.073,4.251,'EPSG','9104',5.71,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk',1); INSERT INTO "usage" VALUES('EPSG','8545','helmert_transformation','EPSG','1624','EPSG','1211','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1625','S-JTSK to WGS 84 (2)','Parameter values from S-JTSK to ETRS89 (2) (code 1624). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4326',1.0,559.0,68.7,451.5,'EPSG','9001',7.92,4.073,4.251,'EPSG','9104',5.71,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Svk',1); INSERT INTO "usage" VALUES('EPSG','8546','helmert_transformation','EPSG','1625','EPSG','1211','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1626','ED50 to ETRS89 (4)','May be taken as approximate transformation ED50 to WGS 84 - see code 1627.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258',1.0,-81.1,-89.4,-115.8,'EPSG','9001',0.485,0.024,0.413,'EPSG','9104',-0.54,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Dnk',0); INSERT INTO "usage" VALUES('EPSG','8547','helmert_transformation','EPSG','1626','EPSG','3237','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1627','ED50 to WGS 84 (25)','Parameter values from ED50 to ETRS89 (4) (code 1626). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.0,-81.1,-89.4,-115.8,'EPSG','9001',0.485,0.024,0.413,'EPSG','9104',-0.54,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Dnk',0); INSERT INTO "usage" VALUES('EPSG','8548','helmert_transformation','EPSG','1627','EPSG','3237','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1628','ED50 to ETRS89 (5)','May be taken as approximate transformation ED50 to WGS 84 - see code 1629.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4258',1.0,-116.8,-106.4,-154.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DGC-Gib',0); INSERT INTO "usage" VALUES('EPSG','8549','helmert_transformation','EPSG','1628','EPSG','1105','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1629','ED50 to WGS 84 (26)','Parameter values from ED50 to ETRS89 (5) (code 1628). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',1.0,-116.8,-106.4,-154.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Gib',0); INSERT INTO "usage" VALUES('EPSG','8550','helmert_transformation','EPSG','1629','EPSG','1105','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1630','ED50 to ETRS89 (6)','May be taken as approximate transformation ED50 to WGS 84 - see code 1631.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258',1.5,-181.5,-90.3,-187.2,'EPSG','9001',0.144,0.492,-0.394,'EPSG','9104',17.57,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CNIG-Esp Bal',0); INSERT INTO "usage" VALUES('EPSG','8551','helmert_transformation','EPSG','1630','EPSG','2335','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','1631','ED50 to WGS 84 (27)','Parameter values from ED50 to ETRS89 (6) (code 1630). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.5,-181.5,-90.3,-187.2,'EPSG','9001',0.144,0.492,-0.394,'EPSG','9104',17.57,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Esp Bal',0); INSERT INTO "usage" VALUES('EPSG','8552','helmert_transformation','EPSG','1631','EPSG','2335','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1632','ED50 to ETRS89 (7)','May be taken as approximate transformation ED50 to WGS 84 - see code 1633.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258',1.5,-131.0,-100.3,-163.4,'EPSG','9001',-1.244,-0.02,-1.144,'EPSG','9104',9.39,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CNIG-Esp',0); INSERT INTO "usage" VALUES('EPSG','8553','helmert_transformation','EPSG','1632','EPSG','2336','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','1633','ED50 to WGS 84 (28)','Parameter values from ED50 to ETRS89 (7) (code 1632). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.5,-131.0,-100.3,-163.4,'EPSG','9001',-1.244,-0.02,-1.144,'EPSG','9104',9.39,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Esp',0); INSERT INTO "usage" VALUES('EPSG','8554','helmert_transformation','EPSG','1633','EPSG','2336','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1634','ED50 to ETRS89 (8)','May be taken as approximate transformation ED50 to WGS 84 - see code 1635.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258',1.5,-178.4,-83.2,-221.3,'EPSG','9001',0.54,-0.532,-0.126,'EPSG','9104',21.2,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CNIG-Esp NW',0); INSERT INTO "usage" VALUES('EPSG','8555','helmert_transformation','EPSG','1634','EPSG','2337','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','1635','ED50 to WGS 84 (29)','Parameter values from ED50 to ETRS89 (8) (code 1634). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.5,-178.4,-83.2,-221.3,'EPSG','9001',0.54,-0.532,-0.126,'EPSG','9104',21.2,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Esp NW',0); INSERT INTO "usage" VALUES('EPSG','8556','helmert_transformation','EPSG','1635','EPSG','2337','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1638','KKJ to ETRS89 (1)','Parameter values derived from ETRF89 (EUREF-89) coordinates based on the Finnish GPS campaign in 1992 (“GPS-Suomi”). May be taken as approximate transformation KKJ to WGS 84 - see code 1639. Replaced by KKJ to EUREF-FIN (2) (code 10098).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4123','EPSG','4258',1.5,-90.7,-106.1,-119.2,'EPSG','9001',4.09,0.218,-1.05,'EPSG','9104',1.37,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Fin',0); INSERT INTO "usage" VALUES('EPSG','8559','helmert_transformation','EPSG','1638','EPSG','3333','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','1639','KKJ to WGS 84 (1)','Parameter values from KKJ to ETRS89 (1) (code 1638). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaced by KKJ to WGS 84 (2) (code 10099).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4123','EPSG','4326',1.5,-90.7,-106.1,-119.2,'EPSG','9001',4.09,0.218,-1.05,'EPSG','9104',1.37,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fin',0); INSERT INTO "usage" VALUES('EPSG','8560','helmert_transformation','EPSG','1639','EPSG','3333','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1640','TM65 to ETRS89 (1)','May be taken as approximate transformation TM65 to WGS 84 - see code 1641.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4299','EPSG','4258',NULL,482.5,-130.6,564.6,'EPSG','9001',-1.042,-0.214,-0.631,'EPSG','9104',8.15,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire',1); INSERT INTO "usage" VALUES('EPSG','8561','helmert_transformation','EPSG','1640','EPSG','1305','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1641','TM65 to WGS 84 (2)','Parameter values from TM75 to ETRS89 (2) (code 1953). Assumes each pair of (i) TM65 and TM75, and (ii) ETRS89 and WGS 84, can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4299','EPSG','4326',1.0,482.5,-130.6,564.6,'EPSG','9001',-1.042,-0.214,-0.631,'EPSG','9104',8.15,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ire',0); INSERT INTO "usage" VALUES('EPSG','8562','helmert_transformation','EPSG','1641','EPSG','1305','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1642','LUREF to ETRS89 (1)','Derived by EuroGeographics from ACT transformation parameters (see CT code 1078). Not published by ACT. Replaced by LUREF to ETRS89 (3) (CT code 5485). May be taken as approximate transformation LUREF to WGS 84 - see CT code 1643.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4181','EPSG','4258',1.0,-193.0,13.7,-39.3,'EPSG','9001',-0.41,-2.933,2.688,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux',0); INSERT INTO "usage" VALUES('EPSG','8563','helmert_transformation','EPSG','1642','EPSG','1146','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1643','LUREF to WGS 84 (1)','Parameter values from LUREF to ETRS89 (1) (code 1642). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4181','EPSG','4326',1.0,-193.0,13.7,-39.3,'EPSG','9001',-0.41,-2.933,2.688,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Lux',0); INSERT INTO "usage" VALUES('EPSG','8564','helmert_transformation','EPSG','1643','EPSG','1146','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1644','Pulkovo 1942(58) to ETRS89 (1)','May be taken as approximate transformation Pulkovo 1942(58) to WGS 84 - see code 1645. Parameter values given to greater precision but to no better accuracy in GUGiK Technical Instruction G-2, Warsaw 2001.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4179','EPSG','4258',1.0,33.4,-146.6,-76.3,'EPSG','9001',-0.359,-0.053,0.844,'EPSG','9104',-0.84,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GUGK-Pol',0); INSERT INTO "usage" VALUES('EPSG','8565','helmert_transformation','EPSG','1644','EPSG','3293','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1645','Pulkovo 1942(58) to WGS 84 (1)','Parameter values from Pulkovo 1942(58) to ETRS89 (1) (code 1644). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4179','EPSG','4326',1.0,33.4,-146.6,-76.3,'EPSG','9001',-0.359,-0.053,0.844,'EPSG','9104',-0.84,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pol',0); INSERT INTO "usage" VALUES('EPSG','8566','helmert_transformation','EPSG','1645','EPSG','3293','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1646','CH1903 to ETRS89 (1)','Parameter values from CH1903+ to ETRS89 (tfm code 1647). In EPSG db v5.2 to v8.9 given to 1dm; the difference in output of cms is considered by swisstopo to be insignificant given the tfm accuracy. Superseded by CH1903 to ETRS89 (2) (tfm code 7674).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4149','EPSG','4258',1.5,674.374,15.056,405.346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che',0); INSERT INTO "usage" VALUES('EPSG','8567','helmert_transformation','EPSG','1646','EPSG','1286','EPSG','1084'); INSERT INTO "helmert_transformation" VALUES('EPSG','1647','CH1903+ to ETRS89 (1)','This transformation is also given as CH1903+ to CHTRS95 (1) (code 1509). CHTRS95 is a national realization of ETRS89. May be taken as approximate transformation CH1903+ to WGS 84 - see code 1676.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4150','EPSG','4258',0.1,674.374,15.056,405.346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che',0); INSERT INTO "usage" VALUES('EPSG','8568','helmert_transformation','EPSG','1647','EPSG','1286','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1648','EST97 to ETRS89 (1)','EST97 is a national realization of ETRS89. May be taken as approximate transformation EST97 to WGS 84 - see code 1649.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4180','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLB-Est',0); INSERT INTO "usage" VALUES('EPSG','8569','helmert_transformation','EPSG','1648','EPSG','1090','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','1649','EST97 to WGS 84 (1)','Approximation at the +/- 1m level assuming ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. EST97 is a national densification of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4180','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Est',0); INSERT INTO "usage" VALUES('EPSG','8570','helmert_transformation','EPSG','1649','EPSG','1090','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1650','ED50 to ETRS89 (10)','These same parameter values are used to transform to WGS 84. See ED50 to WGS 84 (17) (code 1275).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4258',2.0,-84.0,-97.0,-117.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8571','helmert_transformation','EPSG','1650','EPSG','1096','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1651','NTF to ETRS89 (1)','These same parameter values are used to transform to WGS 84. See NTF to WGS 84 (1) (code 1193).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4275','EPSG','4258',2.0,-168.0,-60.0,320.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8572','helmert_transformation','EPSG','1651','EPSG','3694','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1652','BD72 to ETRS89 (1)','May be taken as approximate transformation BD72 to WGS 84 - see code 1609.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4313','EPSG','4258',1.0,-99.1,53.3,-112.5,'EPSG','9001',0.419,-0.83,1.885,'EPSG','9104',-1.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel',0); INSERT INTO "usage" VALUES('EPSG','8573','helmert_transformation','EPSG','1652','EPSG','1347','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1653','NGO 1948 to ETRS89 (1)','May be taken as approximate transformation NGO 1948 to WGS 84 - see code 1654.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4273','EPSG','4258',3.0,278.3,93.0,474.5,'EPSG','9001',7.889,0.05,-6.61,'EPSG','9104',6.21,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SKV-Nor',0); INSERT INTO "usage" VALUES('EPSG','8574','helmert_transformation','EPSG','1653','EPSG','1352','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','1654','NGO 1948 to WGS 84 (1)','Parameter values from NGO 1948 to ETRS89 (1) (code 1653). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4273','EPSG','4326',3.0,278.3,93.0,474.5,'EPSG','9001',7.889,0.05,-6.61,'EPSG','9104',6.21,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Nor',0); INSERT INTO "usage" VALUES('EPSG','8575','helmert_transformation','EPSG','1654','EPSG','1352','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1655','Lisbon to ETRS89 (1)','Derived in 2000 at 8 stations. Replaced by 2001 derivation (tfm code 1997). May be taken as approximate transformation to WGS 84 - see tfm code 1656,','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4207','EPSG','4258',3.0,-280.9,-89.8,130.2,'EPSG','9001',-1.721,0.355,-0.371,'EPSG','9104',-5.92,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICC-Prt 2000',0); INSERT INTO "usage" VALUES('EPSG','8576','helmert_transformation','EPSG','1655','EPSG','1294','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','1656','Lisbon to WGS 84 (1)','Parameter values from Lisbon to ETRS89 (1) (code 1655). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaced by Lisbon to WGS 84 (4) (code 1988).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4207','EPSG','4326',3.0,-280.9,-89.8,130.2,'EPSG','9001',-1.721,0.355,-0.371,'EPSG','9104',-5.92,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Prt 2000',0); INSERT INTO "usage" VALUES('EPSG','8577','helmert_transformation','EPSG','1656','EPSG','1294','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1657','Datum 73 to ETRS89 (1)','Derived in 2000 at 8 stations. Replaced by 2001 derivation (tfm code 1992). May be taken as approximate tfm to WGS 84 - see tfm 1658.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4274','EPSG','4258',2.0,-238.2,85.2,29.9,'EPSG','9001',0.166,0.046,1.248,'EPSG','9104',2.03,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICC-Prt 2000',0); INSERT INTO "usage" VALUES('EPSG','8578','helmert_transformation','EPSG','1657','EPSG','1294','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1658','Datum 73 to WGS 84 (1)','Parameter values from Datum 73 to ETRS89 (1) (code 1657). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaced by Datum 73 to WGS 84 (4) (tfm code 1987).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4274','EPSG','4326',2.0,-238.2,85.2,29.9,'EPSG','9001',0.166,0.046,1.248,'EPSG','9104',2.03,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Prt 2000',0); INSERT INTO "usage" VALUES('EPSG','8579','helmert_transformation','EPSG','1658','EPSG','1294','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1659','Monte Mario to ETRS89 (1)','May be taken as approximate transformation Monte Mario to WGS 84 - see code 1660. For more accurate transformations to explicit realizations of ETRS89 see Monte Mario to IGM95 (4) and Monte Mario to RDN2008 (5), CTs 9733 and 9734.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4265','EPSG','4258',4.0,-104.1,-49.1,-9.9,'EPSG','9001',0.971,-2.917,0.714,'EPSG','9104',-11.68,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita main',0); INSERT INTO "usage" VALUES('EPSG','8580','helmert_transformation','EPSG','1659','EPSG','2372','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','1660','Monte Mario to WGS 84 (4)','Parameter values from Monte Mario to ETRS89 (1) (code 1659). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4265','EPSG','4326',4.0,-104.1,-49.1,-9.9,'EPSG','9001',0.971,-2.917,0.714,'EPSG','9104',-11.68,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ita main',0); INSERT INTO "usage" VALUES('EPSG','8581','helmert_transformation','EPSG','1660','EPSG','2372','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1661','Monte Mario to ETRS89 (2)','May be taken as approximate transformation Monte Mario to WGS 84 - see code 1662. For more accurate transformations to explicit realizations of ETRS89 see Monte Mario to IGM95 (4) and Monte Mario to RDN2008 (5), CTs 9733 and 9734.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4265','EPSG','4258',4.0,-168.6,-34.0,38.6,'EPSG','9001',-0.374,-0.679,-1.379,'EPSG','9104',-9.48,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita Sar',0); INSERT INTO "usage" VALUES('EPSG','8582','helmert_transformation','EPSG','1661','EPSG','2339','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','1662','Monte Mario to WGS 84 (2)','Parameter values from Monte Mario to ETRS89 (2) (code 1661). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4265','EPSG','4326',4.0,-168.6,-34.0,38.6,'EPSG','9001',-0.374,-0.679,-1.379,'EPSG','9104',-9.48,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ita Sar',0); INSERT INTO "usage" VALUES('EPSG','8583','helmert_transformation','EPSG','1662','EPSG','2339','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1663','Monte Mario to ETRS89 (3)','May be taken as approximate transformation Monte Mario to WGS 84 - see code 1664. For more accurate transformations to explicit realizations of ETRS89 see Monte Mario to IGM95 (4) and Monte Mario to RDN2008 (5), CTs 9733 and 9734.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4265','EPSG','4258',4.0,-50.2,-50.4,84.8,'EPSG','9001',-0.69,-2.012,0.459,'EPSG','9104',-28.08,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita Sic',0); INSERT INTO "usage" VALUES('EPSG','8584','helmert_transformation','EPSG','1663','EPSG','2340','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','1664','Monte Mario to WGS 84 (3)','Parameter values from Monte Mario to ETRS89 (3) (code 1663). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4265','EPSG','4326',4.0,-50.2,-50.4,84.8,'EPSG','9001',-0.69,-2.012,0.459,'EPSG','9104',-28.08,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ita Sic',0); INSERT INTO "usage" VALUES('EPSG','8585','helmert_transformation','EPSG','1664','EPSG','2340','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1665','AGD66 to WGS 84 (12)','Parameter values from AGD66 to GDA94 (2) (code 1458). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4326',3.0,-129.193,-41.212,130.73,'EPSG','9001',-0.246,-0.374,-0.329,'EPSG','9104',-2.955,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-ACT 1m',0); INSERT INTO "usage" VALUES('EPSG','8586','helmert_transformation','EPSG','1665','EPSG','2283','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1666','AGD66 to WGS 84 (13)','Parameter values from AGD66 to GDA94 (4) (code 1460). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4326',3.0,-119.353,-48.301,139.484,'EPSG','9001',-0.415,-0.26,-0.437,'EPSG','9104',-0.613,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-NSW Vic 1m',0); INSERT INTO "usage" VALUES('EPSG','8587','helmert_transformation','EPSG','1666','EPSG','2286','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1667','AGD66 to WGS 84 (14)','Parameter values from AGD66 to GDA94 (8) (code 1594). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4326',3.0,-120.271,-64.543,161.632,'EPSG','9001',-0.217,0.067,0.129,'EPSG','9104',2.499,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Tas 1m',0); INSERT INTO "usage" VALUES('EPSG','8588','helmert_transformation','EPSG','1667','EPSG','1282','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1668','AGD66 to WGS 84 (15)','Parameter values from AGD66 to GDA94 (9) (code 1595). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4326',3.0,-124.133,-42.003,137.4,'EPSG','9001',0.008,-0.557,-0.178,'EPSG','9104',-1.854,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-NT 1m',0); INSERT INTO "usage" VALUES('EPSG','8589','helmert_transformation','EPSG','1668','EPSG','2284','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1669','AGD84 to WGS 84 (7)','Parameter values from AGD84 to GDA94 (2) (code 1280). Approximation assuming WGS 84 is equivalent to GDA94; ignores low accuracy of the WGS 84 ensemble and inconsistent application of tectonic plate motion. Replaces AGD84 to WGS 84 (2) (code 1236).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4203','EPSG','4326',3.0,-117.763,-51.51,139.061,'EPSG','9001',-0.292,-0.443,-0.277,'EPSG','9104',-0.191,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Aus 1m',0); INSERT INTO "usage" VALUES('EPSG','8590','helmert_transformation','EPSG','1669','EPSG','2576','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1671','RGF93 v1 to WGS 84 (1)','Approximation at the 1m level assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. (RGF93 v1 is a national realization of ETRS89).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4171','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra',0); INSERT INTO "usage" VALUES('EPSG','8592','helmert_transformation','EPSG','1671','EPSG','1096','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1672','Amersfoort to WGS 84 (2)','Parameter values from Amersfoort to ETRS89 (1) (code 1751) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaces Amersfoort to WGS 84 (1) (code 1112). Replaced by Amersfoort to WGS 84 (3) (code 15934).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4326',1.0,565.04,49.91,465.84,'EPSG','9001',1.9848,-1.7439,9.0587,'EPSG','9109',4.0772,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Nld 2000',0); INSERT INTO "usage" VALUES('EPSG','8593','helmert_transformation','EPSG','1672','EPSG','1275','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1673','DHDN to WGS 84 (1)','Parameter values from DHDN to ETRS89 (1) (code 1309) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaced by DHDN to WGS 84 (2) (tfm code 1777).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4314','EPSG','4326',5.0,582.0,105.0,414.0,'EPSG','9001',-1.04,-0.35,3.08,'EPSG','9104',8.3,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Deu W',0); INSERT INTO "usage" VALUES('EPSG','8594','helmert_transformation','EPSG','1673','EPSG','2326','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','1674','Pulkovo 1942(83) to ETRS89 (1)','Mean of 20 stations. May be taken as approximate transformation to WGS 84 - see code 1675. Also given by EuroGeographics at http://crs.ifag.de/ as a Position Vector transformation with changed values for rotations. In 2001 partially replaced by tfm 1775.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4178','EPSG','4258',2.0,24.0,-123.0,-94.0,'EPSG','9001',-0.02,0.25,0.13,'EPSG','9104',1.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu E',0); INSERT INTO "usage" VALUES('EPSG','8595','helmert_transformation','EPSG','1674','EPSG','1343','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1675','Pulkovo 1942(83) to WGS 84 (1)','Parameter values from Pulkovo 1942(83) to ETRS89 (1) (code 1674) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4178','EPSG','4326',2.0,24.0,-123.0,-94.0,'EPSG','9001',-0.02,0.25,0.13,'EPSG','9104',1.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Deu E',0); INSERT INTO "usage" VALUES('EPSG','8596','helmert_transformation','EPSG','1675','EPSG','1343','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1676','CH1903+ to WGS 84 (1)','Parameter values are from CH1903+ to ETRS89 (1) (code 1647) assuming that ETRS89 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4150','EPSG','4326',1.0,674.374,15.056,405.346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH',0); INSERT INTO "usage" VALUES('EPSG','8597','helmert_transformation','EPSG','1676','EPSG','1286','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1677','HD72 to WGS 84 (1)','Parameter values taken from HD72 to ETRS89 (1) (code 1273) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','4326',NULL,56.0,75.77,15.31,'EPSG','9001',-0.37,-0.2,-0.21,'EPSG','9104',-1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Hun',1); INSERT INTO "usage" VALUES('EPSG','8598','helmert_transformation','EPSG','1677','EPSG','1119','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1678','IRENET95 to WGS 84 (1)','Assumes that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. IRENET95 is a regional realisation of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4173','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ire',0); INSERT INTO "usage" VALUES('EPSG','8599','helmert_transformation','EPSG','1678','EPSG','1305','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1679','Pulkovo 1942 to WGS 84 (2)','Parameter values taken from Pulkovo 1942 to LKS94(ETRS89) (1) (code 1274) assuming that LKS94(ETRS89) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4326',9.0,-40.595,-18.55,-69.339,'EPSG','9001',-2.508,-1.832,2.611,'EPSG','9104',-4.299,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ltu',0); INSERT INTO "usage" VALUES('EPSG','8600','helmert_transformation','EPSG','1679','EPSG','3272','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1680','RT90 to WGS 84 (1)','Parameter values from RT90 to ETRS89 (1) (code 1437) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaced by RT90 to WGS 84 (2) (code 1896) from 2001.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4124','EPSG','4326',1.0,419.3836,99.3335,591.3451,'EPSG','9001',-0.850389,-1.817277,7.862238,'EPSG','9104',-0.99496,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Swe',0); INSERT INTO "usage" VALUES('EPSG','8601','helmert_transformation','EPSG','1680','EPSG','1225','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1682','South Yemen to WGS 84 (1)','Parameter values taken from South Yemen to Yemen NGN96 (1) (code 1539) assuming that NGN96 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4164','EPSG','4326',5.0,-76.0,-138.0,67.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Yem South',0); INSERT INTO "usage" VALUES('EPSG','8603','helmert_transformation','EPSG','1682','EPSG','1340','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1683','Tete to WGS 84 (1)','Parameter values taken from Tete to Moznet (1) (code 1297) assuming that Moznet is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4326',30.0,-115.064,-87.39,-101.716,'EPSG','9001',0.058,-4.001,2.062,'EPSG','9104',9.366,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Moz',0); INSERT INTO "usage" VALUES('EPSG','8604','helmert_transformation','EPSG','1683','EPSG','3281','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1684','Tete to WGS 84 (2)','Parameter values taken from Tete to Moznet (2) (code 1298) assuming that Moznet is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4326',1.0,-82.875,-57.097,-156.768,'EPSG','9001',2.158,-1.524,0.982,'EPSG','9104',-0.359,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Moz A',0); INSERT INTO "usage" VALUES('EPSG','8605','helmert_transformation','EPSG','1684','EPSG','2350','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1685','Tete to WGS 84 (3)','Parameter values taken from Tete to Moznet (3) (code 1299) assuming that Moznet is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4326',4.0,-138.527,-91.999,-114.591,'EPSG','9001',0.14,-3.363,2.217,'EPSG','9104',11.748,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Moz B',0); INSERT INTO "usage" VALUES('EPSG','8606','helmert_transformation','EPSG','1685','EPSG','2351','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1686','Tete to WGS 84 (4)','Parameter values taken from Tete to Moznet (4) (code 1300) assuming that Moznet is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4326',3.0,-73.472,-51.66,-112.482,'EPSG','9001',-0.953,-4.6,2.368,'EPSG','9104',0.586,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Moz C',0); INSERT INTO "usage" VALUES('EPSG','8607','helmert_transformation','EPSG','1686','EPSG','2352','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1687','Tete to WGS 84 (5)','Parameter values taken from Tete to Moznet (5) (code 1301) assuming that Moznet is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4127','EPSG','4326',10.0,219.315,168.975,-166.145,'EPSG','9001',-0.198,-5.926,2.356,'EPSG','9104',-57.104,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Moz D',0); INSERT INTO "usage" VALUES('EPSG','8608','helmert_transformation','EPSG','1687','EPSG','2353','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1701','NZGD49 to NZGD2000 (2)','For better accuracy use NZGD49 to NZGD2000 (3) (code 1568).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4272','EPSG','4167',4.0,59.47,-5.04,187.44,'EPSG','9001',-0.47,0.1,-1.024,'EPSG','9104',-4.5993,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl 4m',0); INSERT INTO "usage" VALUES('EPSG','8622','helmert_transformation','EPSG','1701','EPSG','3285','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','1751','Amersfoort to ETRS89 (1)','Replaced by Amersfoort to ETRS89 (3) (tfm code 15739). Dutch sources also quote an equivalent transformation using the Molodenski-Badekas 10-parameter method (M-B) - see tfm code 1066.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4258',0.5,565.04,49.91,465.84,'EPSG','9001',1.9848,-1.7439,9.0587,'EPSG','9109',4.0772,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NCG-Nld 2000 CF',0); INSERT INTO "usage" VALUES('EPSG','8672','helmert_transformation','EPSG','1751','EPSG','1275','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','1753','CH1903 to WGS 84 (1)','Implemented in Bundesamt für Landestopografie programme GRANIT. Used from 1987 to 1997. Not recommended for current usage - replaced by CH1903 to WGS 84 (2) (code 1766).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4149','EPSG','4326',1.0,660.077,13.551,369.344,'EPSG','9001',2.484,1.783,2.939,'EPSG','9113',5.66,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH 1',0); INSERT INTO "usage" VALUES('EPSG','8674','helmert_transformation','EPSG','1753','EPSG','1286','EPSG','1232'); INSERT INTO "helmert_transformation" VALUES('EPSG','1754','Minna to WGS 84 (3)','Derived at 8 stations across the Niger delta. Used by Shell SPDC throughout southern Nigeria onshore, delta and shallow offshore from 1994 and by Total in OPL246. Sometimes given with parameter values to greater resolution; values here are adequate.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4263','EPSG','4326',5.0,-111.92,-87.85,114.5,'EPSG','9001',1.875,0.202,0.219,'EPSG','9104',0.032,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Nga S',0); INSERT INTO "usage" VALUES('EPSG','8675','helmert_transformation','EPSG','1754','EPSG','2371','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1766','CH1903 to WGS 84 (2)','Parameters values from CH1903 to ETRS89 (1) (tfm code 1646) assuming ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaces CH1903 to WGS 84 (1) (code 1753). Replaced by CH1903 to WGS 84 (3) (code 7788).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4149','EPSG','4326',1.5,674.374,15.056,405.346,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH 2',0); INSERT INTO "usage" VALUES('EPSG','8687','helmert_transformation','EPSG','1766','EPSG','1286','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1767','REGVEN to SIRGAS 1995 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4189','EPSG','4170',0.02,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CN-Ven',0); INSERT INTO "usage" VALUES('EPSG','8688','helmert_transformation','EPSG','1767','EPSG','1251','EPSG','1255'); INSERT INTO "helmert_transformation" VALUES('EPSG','1768','REGVEN to WGS 84 (1)','Approximation at the +/- 1m level assuming that REGVEN is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4189','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ven',0); INSERT INTO "usage" VALUES('EPSG','8689','helmert_transformation','EPSG','1768','EPSG','1251','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1769','PSAD56 to REGVEN (1)','May be taken as transformation to WGS 84 - see PSAD56 to WGS 84 (13) (code 1095).','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4248','EPSG','4189',15.0,-270.933,115.599,-360.226,'EPSG','9001',-5.266,-1.238,2.381,'EPSG','9104',-5.109,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2464351.59,-5783466.61,974809.81,'EPSG','9001','IGSB-Ven',0); INSERT INTO "usage" VALUES('EPSG','8690','helmert_transformation','EPSG','1769','EPSG','3327','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1770','PSAD56 to WGS84 (1)','Parameter vales are from PSAD56 to REGVEN (1) (code 1769) assuming that REGVEN is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4248','EPSG','4326',NULL,-270.933,115.599,-360.226,'EPSG','9001',-5.266,-1.238,2.381,'EPSG','9104',-5.109,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2464351.59,-5783466.61,974809.81,'EPSG','9001','EPSG-Ven',1); INSERT INTO "usage" VALUES('EPSG','8691','helmert_transformation','EPSG','1770','EPSG','1251','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1771','La Canoa to REGVEN (1)','May be used as transformation to WGS 84 - see La Canoa to WGS 84 (13) (code 1096)','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4247','EPSG','4189',15.0,-270.933,115.599,-360.226,'EPSG','9001',-5.266,-1.238,2.381,'EPSG','9104',-5.109,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2464351.59,-5783466.61,974809.81,'EPSG','9001','IGSB-Ven',0); INSERT INTO "usage" VALUES('EPSG','8692','helmert_transformation','EPSG','1771','EPSG','3327','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1772','La Canoa to WGS84 (1)','Parameter values are from La Canoa to REGVEN (1) (code 1771) assuming that REGVEN is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4247','EPSG','4326',NULL,-270.933,115.599,-360.226,'EPSG','9001',-5.266,-1.238,2.381,'EPSG','9104',-5.109,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2464351.59,-5783466.61,974809.81,'EPSG','9001','EPSG-Ven',1); INSERT INTO "usage" VALUES('EPSG','8693','helmert_transformation','EPSG','1772','EPSG','1251','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1773','POSGAR 98 to WGS 84 (1)','Approximation at the +/- 1m level assuming that POSGAR 98 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4190','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Arg',0); INSERT INTO "usage" VALUES('EPSG','8694','helmert_transformation','EPSG','1773','EPSG','1033','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1774','POSGAR 98 to SIRGAS 1995 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4190','EPSG','4170',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Arg',0); INSERT INTO "usage" VALUES('EPSG','8695','helmert_transformation','EPSG','1774','EPSG','1033','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1775','Pulkovo 1942(83) to ETRS89 (2)','Derived at 35 points of the German GPS Network DREF. From 2001 replaces Pulkovo 1942(83) to ETRS89 (1) (code 1674) within Mecklenburg-Vorpommern and Sachsen-Anhalt. From 2009 replaces tfm 1674 in all other states of former East Germany.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4178','EPSG','4258',0.1,24.9,-126.4,-93.2,'EPSG','9001',-0.063,-0.247,-0.041,'EPSG','9104',1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu E 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8696','helmert_transformation','EPSG','1775','EPSG','1343','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1776','DHDN to ETRS89 (2)','Mean of 109 stations. Replaces DHDN to ETRS89 (1) (tfm code 1309). May be taken as approximate transformation DHDN to WGS 84 - see code 1777.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258',3.0,598.1,73.7,418.2,'EPSG','9001',0.202,0.045,-2.455,'EPSG','9104',6.7,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W 3m',0); INSERT INTO "usage" VALUES('EPSG','8697','helmert_transformation','EPSG','1776','EPSG','2326','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','1777','DHDN to WGS 84 (2)','Parameter values from DHDN to ETRS89 (2) (code 1776) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaces DHDN to WGS 84 (1) (tfm code 1673).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326',3.0,598.1,73.7,418.2,'EPSG','9001',0.202,0.045,-2.455,'EPSG','9104',6.7,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Deu W 3m',0); INSERT INTO "usage" VALUES('EPSG','8698','helmert_transformation','EPSG','1777','EPSG','2326','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1778','DHDN to ETRS89 (3)','Derived in 2001 at 41 points of the German GPS Network DREF.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258',1.0,597.1,71.4,412.1,'EPSG','9001',0.894,0.068,-1.563,'EPSG','9104',7.58,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-S',0); INSERT INTO "usage" VALUES('EPSG','8699','helmert_transformation','EPSG','1778','EPSG','2543','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1779','DHDN to ETRS89 (4)','Derived at 27 points of the German GPS Network DREF.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258',1.0,584.8,67.0,400.3,'EPSG','9001',0.105,0.013,-2.378,'EPSG','9104',10.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-cen',0); INSERT INTO "usage" VALUES('EPSG','8700','helmert_transformation','EPSG','1779','EPSG','2542','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1780','DHDN to ETRS89 (5)','Derived at 21 points of the German GPS Network DREF.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258',1.0,590.5,69.5,411.6,'EPSG','9001',-0.796,-0.052,-3.601,'EPSG','9104',8.3,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-N',0); INSERT INTO "usage" VALUES('EPSG','8701','helmert_transformation','EPSG','1780','EPSG','2541','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1781','DHDN to ETRS89 (6)','Derived at 10 points of the German GPS Network DREF.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258',0.1,599.4,72.4,419.2,'EPSG','9001',-0.062,-0.022,-2.723,'EPSG','9104',6.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu Thur',1); INSERT INTO "usage" VALUES('EPSG','8702','helmert_transformation','EPSG','1781','EPSG','2544','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1782','DHDN to ETRS89 (7)','Derived at 35 points of the German GPS Network DREF.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258',0.1,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu Sach',1); INSERT INTO "usage" VALUES('EPSG','8703','helmert_transformation','EPSG','1782','EPSG','2545','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1783','ED50 to ETRS89 (9)','May be taken as approximate transformation ED50 to WGS 84 - see code 1784. Note: the ETRS89 CRS is not used in Turkey.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258',2.0,-84.1,-101.8,-129.7,'EPSG','9001',0.0,0.0,0.468,'EPSG','9104',1.05,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HGK-Tur',0); INSERT INTO "usage" VALUES('EPSG','8704','helmert_transformation','EPSG','1783','EPSG','1237','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1784','ED50 to WGS 84 (30)','Parameter values from ED50 to ETRS89 (9) (code 1783). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',2.0,-84.1,-101.8,-129.7,'EPSG','9001',0.0,0.0,0.468,'EPSG','9104',1.05,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Tur',0); INSERT INTO "usage" VALUES('EPSG','8705','helmert_transformation','EPSG','1784','EPSG','1237','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1785','MGI to ETRS89 (3)','May be taken as approximate transformation MGI to WGS 84 - see code 1786.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4258',1.0,426.9,142.6,460.1,'EPSG','9001',4.91,4.49,-12.42,'EPSG','9104',17.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GURS-Svn',1); INSERT INTO "usage" VALUES('EPSG','8706','helmert_transformation','EPSG','1785','EPSG','1212','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1786','MGI to WGS 84 (5)','Parameter values from MGI to ETRS89 (3) (code 1785). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4312','EPSG','4326',1.0,426.9,142.6,460.1,'EPSG','9001',4.91,4.49,-12.42,'EPSG','9104',17.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Svn',1); INSERT INTO "usage" VALUES('EPSG','8707','helmert_transformation','EPSG','1786','EPSG','1212','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1787','RT90 to ETRS89 (2)','Derived at 165 points. Supersedes RT90 to ETRS89 (1) (code 1437). May be taken as approximate transformation RT90 to WGS 84 - see code 1787.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4124','EPSG','4258',NULL,414.1,41.3,603.1,'EPSG','9001',-0.855,2.141,-7.023,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Swe 2001',1); INSERT INTO "usage" VALUES('EPSG','8708','helmert_transformation','EPSG','1787','EPSG','1225','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1788','RT90 to WGS 84 (2)','Parameter values from RT90 to ETRS89 (1) (code 1787) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Supersedes RT90 to WGS 84 (1) (code 1680).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4124','EPSG','4326',NULL,414.1,41.3,603.1,'EPSG','9001',-0.855,2.141,-7.023,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Swe 2001',1); INSERT INTO "usage" VALUES('EPSG','8709','helmert_transformation','EPSG','1788','EPSG','1225','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1789','Dealui Piscului 1933 to WGS 84 (1)','Parameter values taken from Pulkovo 1942 to WGS 84 (9) (code 1293) assuming that','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4316','EPSG','4326',NULL,103.25,-100.4,-307.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NAMR-Rom',1); INSERT INTO "usage" VALUES('EPSG','8710','helmert_transformation','EPSG','1789','EPSG','1197','EPSG','1025'); INSERT INTO "helmert_transformation" VALUES('EPSG','1790','Lisbon to ETRS89 (2)','Derived in 2001. Supersedes Lisbon to ETRS89 (1) (code 1655).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4207','EPSG','4258',NULL,-282.1,-72.2,120.0,'EPSG','9001',-1.592,0.145,-0.89,'EPSG','9104',-4.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICC-Prt 2001',1); INSERT INTO "usage" VALUES('EPSG','8711','helmert_transformation','EPSG','1790','EPSG','1294','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1791','Lisbon to WGS 84 (2)','Parameter values from Lisbon to ETRS89 (2) (code 1790). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4207','EPSG','4258',NULL,-282.1,-72.2,120.0,'EPSG','9001',-1.592,0.145,-0.89,'EPSG','9104',-4.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Prt 2001',1); INSERT INTO "usage" VALUES('EPSG','8712','helmert_transformation','EPSG','1791','EPSG','1294','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1792','Datum 73 to ETRS89 (2)','Derived in 2001. Supersedes Datum 73 to ETRS89 (1) (code 1657).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4274','EPSG','4258',NULL,-231.0,102.6,29.8,'EPSG','9001',0.615,-0.198,0.881,'EPSG','9104',1.79,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICC-Prt 2001',1); INSERT INTO "usage" VALUES('EPSG','8713','helmert_transformation','EPSG','1792','EPSG','1294','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1793','Datum 73 to WGS 84 (2)','Parameter values from Datum 73 to ETRS89 (2) (code 1792). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4274','EPSG','4258',NULL,-231.0,102.6,29.8,'EPSG','9001',0.615,-0.198,0.881,'EPSG','9104',1.79,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Prt 2001',1); INSERT INTO "usage" VALUES('EPSG','8714','helmert_transformation','EPSG','1793','EPSG','1294','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1794','MGI to WGS 84 (6)','For more accurate transformation see MGI to WGS 84 (7) (code 1795).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4312','EPSG','4326',999.0,695.5,-216.6,491.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JPet-Yug',1); INSERT INTO "usage" VALUES('EPSG','8715','helmert_transformation','EPSG','1794','EPSG','3536','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1795','MGI to WGS 84 (7)','','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4312','EPSG','4326',999.0,408.0895,-288.9616,791.5498,'EPSG','9001',-4.078662,0.022669,9.825424,'EPSG','9104',94.060626,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4444943.0248,1518098.4827,4302370.0765,'EPSG','9001','JPET-Yug MB',1); INSERT INTO "usage" VALUES('EPSG','8716','helmert_transformation','EPSG','1795','EPSG','3536','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1796','Manoca 1962 to WGS 84 (1)','Derived at two points, checked at a third by Stolt Comex Seaway and Geoid for Elf.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4193','EPSG','4326',0.5,-70.9,-151.8,-41.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF94-Cmr',0); INSERT INTO "usage" VALUES('EPSG','8717','helmert_transformation','EPSG','1796','EPSG','2555','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1797','Qornoq 1927 to WGS 84 (1)','Derived at 2 stations. Accuracy 25m, 25m and 32m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4194','EPSG','4326',48.0,164.0,138.0,-189.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Grl S',0); INSERT INTO "usage" VALUES('EPSG','8718','helmert_transformation','EPSG','1797','EPSG','3362','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1798','Qornoq 1927 to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4194','EPSG','4326',1.0,163.511,127.533,-159.789,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Grl',0); INSERT INTO "usage" VALUES('EPSG','8719','helmert_transformation','EPSG','1798','EPSG','3362','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','1799','Scoresbysund 1952 to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4195','EPSG','4326',1.0,105.0,326.0,-102.5,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Grl Scosd',0); INSERT INTO "usage" VALUES('EPSG','8720','helmert_transformation','EPSG','1799','EPSG','2570','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','1800','Ammassalik 1958 to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4196','EPSG','4326',1.0,-45.0,417.0,-3.5,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Grl Ammlk',0); INSERT INTO "usage" VALUES('EPSG','8721','helmert_transformation','EPSG','1800','EPSG','2571','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','1801','Pointe Noire to WGS 84 (2)','Derived in 1994 by CGG/Topnav using DORIS system on various stations along the coastline.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4282','EPSG','4326',4.0,-145.0,52.7,-291.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGG94-Cog',0); INSERT INTO "usage" VALUES('EPSG','8722','helmert_transformation','EPSG','1801','EPSG','2574','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('EPSG','1802','Pointe Noire to WGS 84 (3)','Derived by Geoid for Elf in May 1995 using GPS and IGS data by tying 4 geodetic points to ITRF93 epoch 1995.4. Used for all offshore Congo operations.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4282','EPSG','4326',0.15,-178.3,-316.7,-131.5,'EPSG','9001',5.278,6.077,10.979,'EPSG','9104',19.166,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF95-Cog',0); INSERT INTO "usage" VALUES('EPSG','8723','helmert_transformation','EPSG','1802','EPSG','2574','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1805','Garoua to WGS 72BE (1)','Derived in 1981 by Decca Survey France for Elf Serepca.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4197','EPSG','4324',5.0,-56.1,-167.8,13.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Cmr',0); INSERT INTO "usage" VALUES('EPSG','8726','helmert_transformation','EPSG','1805','EPSG','2590','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','1806','Kousseri to WGS 72BE (1)','Derived in 1981 by Decca Survey France for Elf Serepca.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4198','EPSG','4324',5.0,-104.4,-136.6,201.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Cmr',0); INSERT INTO "usage" VALUES('EPSG','8727','helmert_transformation','EPSG','1806','EPSG','2591','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','1807','Pulkovo 1942 to WGS 84 (13)','Derived via WGS72 values taken from SOCAR Magnavox 1502 manual. Used by AIOC 1995-1997 then replaced by the AIOC97 values (tfm code 1808). Do not confuse with AIOC95 vertical datum as used in southern Caspian Sea and at Sangachal terminal by AIOC.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4284','EPSG','4326',10.0,27.0,-135.0,-84.5,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BP-Aze Aioc95',0); INSERT INTO "usage" VALUES('EPSG','8728','helmert_transformation','EPSG','1807','EPSG','1038','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1808','Pulkovo 1942 to WGS 84 (14)','Mean of 3 stations in western Georgia, 4 stations in eastern Georgia and 4 stations in eastern Azerbaijan. Derived for use on AIOC early oil western export pipeline, but adopted for all AIOC work replacing the 1995 AIOC transformation (code 1807).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4284','EPSG','4326',5.0,686.1,-123.5,-574.4,'EPSG','9001',8.045,-23.366,10.791,'EPSG','9104',-2.926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BP-Aze Aioc97',0); INSERT INTO "usage" VALUES('EPSG','8729','helmert_transformation','EPSG','1808','EPSG','2593','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1809','Pulkovo 1942 to WGS 84 (15)','Parameter values calculated by Elf Exploration and Production based on geodetic survey carried out by Azerbaijan State Committee for Geodesy and Cartography.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4284','EPSG','4326',2.0,926.4,-715.9,-186.4,'EPSG','9001',-10.364,-20.78,26.452,'EPSG','9104',-7.224,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Aze97',0); INSERT INTO "usage" VALUES('EPSG','8730','helmert_transformation','EPSG','1809','EPSG','2594','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1810','ED50 to WGS 84 (31)','Derived via concatenation through WGS72. The ED50 to WGS72 step is the Sepplin 1974 value for all Europe.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',15.0,-84.0,-103.0,-122.5,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'wgc72-Egy',0); INSERT INTO "usage" VALUES('EPSG','8731','helmert_transformation','EPSG','1810','EPSG','2595','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1811','PSAD56 to WGS 84 (12)','Used by Petrobras for shelf operations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',10.0,-291.87,106.37,-364.52,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Braz N',0); INSERT INTO "usage" VALUES('EPSG','8732','helmert_transformation','EPSG','1811','EPSG','1754','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','1812','Indian 1975 to WGS 84 (4)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4240','EPSG','4326',3.0,293.0,836.0,318.0,'EPSG','9001',0.5,1.6,-2.8,'EPSG','9104',2.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Tha',0); INSERT INTO "usage" VALUES('EPSG','8733','helmert_transformation','EPSG','1812','EPSG','3317','EPSG','1028'); INSERT INTO "helmert_transformation" VALUES('EPSG','1813','Batavia to WGS 84 (2)','Used by ARCO offshore NW Java area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4211','EPSG','4326',5.0,-378.873,676.002,-46.255,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ARCO-Idn ONWJ',0); INSERT INTO "usage" VALUES('EPSG','8734','helmert_transformation','EPSG','1813','EPSG','2577','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1814','Batavia to WGS 84 (3)','Used by PT Komaritim for Nippon Steel during East Java Gas Pipeline construction.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4211','EPSG','4326',5.0,-377.7,675.1,-52.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOM-Idn EJGP',0); INSERT INTO "usage" VALUES('EPSG','8735','helmert_transformation','EPSG','1814','EPSG','2588','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1815','Nord Sahara 1959 to WGS 84 (4)','Used by BP in District 3 and In Salah Gas. May be taken as a transformation to RGSH2020 - see CT 10339.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4307','EPSG','4326',5.0,-152.9,43.8,358.3,'EPSG','9001',2.714,1.386,-2.788,'EPSG','9104',-6.743,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BP-Alg D3',0); INSERT INTO "usage" VALUES('EPSG','8736','helmert_transformation','EPSG','1815','EPSG','2598','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1816','Nord Sahara 1959 to WGS 84 (5)','Derived at astro station central to concession. Significant and varying differences (>100m) at 4 neighbouring astro stations. May be taken as a transformation to RGSH2020 - see CT 10340.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4326',100.0,-95.7,10.2,158.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BPA-Alg InAm',0); INSERT INTO "usage" VALUES('EPSG','8737','helmert_transformation','EPSG','1816','EPSG','2599','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1817','Nord Sahara 1959 to WGS 84 (6)','Derived at astro station Guerrara. May be taken as a transformation to RGSH2020 - see CT 10341.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4326',100.0,-165.914,-70.607,305.009,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ARCO-Alg HBR',0); INSERT INTO "usage" VALUES('EPSG','8738','helmert_transformation','EPSG','1817','EPSG','2600','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1818','Minna to WGS 84 (4)','Concatenated via WGS 72BE.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4263','EPSG','4326',12.0,-89.0,-112.0,125.9,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RSL-Nga',0); INSERT INTO "usage" VALUES('EPSG','8739','helmert_transformation','EPSG','1818','EPSG','1717','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1819','Minna to WGS 84 (5)','Used by Shell in southern Nigeria and Total in OPL246.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4263','EPSG','4326',NULL,-111.92,-87.85,114.5,'EPSG','9001',1.875,0.202,0.219,'EPSG','9104',0.032,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SPD-Nga S',1); INSERT INTO "usage" VALUES('EPSG','8740','helmert_transformation','EPSG','1819','EPSG','2371','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1820','Minna to WGS 84 (6)','Derived by Nortech at station L40 Minna using NNPC 1989 GPS network tied to 4 ADOS stations. Used by Conoco in OPLs 219-220 to cm precision and ExxonMobil in OPL 209 to dm precision..','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',12.0,-93.2,-93.31,121.156,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CON89-Nga',0); INSERT INTO "usage" VALUES('EPSG','8741','helmert_transformation','EPSG','1820','EPSG','3813','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1821','Minna to WGS 84 (7)','Derived by Elf Petroleum Nigeria in 1994 at 3 stations (M101 onshore, offshore platforms XSW06 and XSV39) and used in OMLs 99-102 and OPLs 222-223.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',6.0,-88.98,-83.23,113.55,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF94-Nga',0); INSERT INTO "usage" VALUES('EPSG','8742','helmert_transformation','EPSG','1821','EPSG','3814','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1822','Minna to WGS 84 (8)','Used by Shell SNEPCO for OPLs 209-213 and 316. Derived during 1990 Niger Delta control survey at 4 stations (XSU27, 30 31 and 35).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',10.0,-92.726,-90.304,115.735,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Nga OPL W',0); INSERT INTO "usage" VALUES('EPSG','8743','helmert_transformation','EPSG','1822','EPSG','3815','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1823','Minna to WGS 84 (9)','Used by Shell SNEPCO for OPLs 217-223. Derived during 1990 Niger Delta control survey at 4 stations (XSU38, 41, 44 and 45).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',8.0,-93.134,-86.647,114.196,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Nga OPL S',0); INSERT INTO "usage" VALUES('EPSG','8744','helmert_transformation','EPSG','1823','EPSG','3816','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1824','Minna to WGS 84 (10)','Used by Shell SNEPCO for Gongola basin.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',25.0,-93.0,-94.0,124.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Nga Gongola',0); INSERT INTO "usage" VALUES('EPSG','8745','helmert_transformation','EPSG','1824','EPSG','3824','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1825','Hong Kong 1980 to WGS 84 (1)','Derived via ITRF96 @ 1998.121. Published 2002-03-01. Parameter values from Hong Kong 1980 to Hong Kong Geodetic CS (1) (code 9913) assuming Hong Kong Geodetic CS and WGS 84 are equivalent within the accuracy of the CT.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4611','EPSG','4326',1.0,-162.619,-276.959,-161.764,'EPSG','9001',-0.067753,2.243648,1.158828,'EPSG','9104',-1.094246,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LSD-HKG 2002',0); INSERT INTO "usage" VALUES('EPSG','8746','helmert_transformation','EPSG','1825','EPSG','1118','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1826','JGD2000 to WGS 84 (1)','Excludes area affected by the 2011 Tohoku earthquake. For areas of northern Honshu affected by the earthquake see JGD2000 to WGS 84 (2) (code 9896).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4612','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Jpn',0); INSERT INTO "usage" VALUES('EPSG','8747','helmert_transformation','EPSG','1826','EPSG','4163','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1828','Yoff to WGS 72 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4310','EPSG','4322',25.0,-37.0,157.0,85.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-SEN',0); INSERT INTO "usage" VALUES('EPSG','8749','helmert_transformation','EPSG','1828','EPSG','1207','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1829','HD72 to ETRS89 (1)','Derived at 5 stations. OGP recommends corrected Hungarian standard MSZ 7222 (tfm code 1449) be used in preference to this transformation. May be taken as approximate transformation HD72 to WGS 84 - see code 1830.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','4258',0.5,56.0,-75.77,-15.31,'EPSG','9001',0.37,0.2,0.21,'EPSG','9104',1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FOMI-Hun',0); INSERT INTO "usage" VALUES('EPSG','8750','helmert_transformation','EPSG','1829','EPSG','1119','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1830','HD72 to WGS 84 (1)','Parameter values taken from HD72 to ETRS89 (1) (code 1829) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. OGP recommends use of newer MSZ 7222 equivalent (tfm code 1448) in preference to this transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','4326',1.0,56.0,-75.77,-15.31,'EPSG','9001',0.37,0.2,0.21,'EPSG','9104',1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Hun',0); INSERT INTO "usage" VALUES('EPSG','8751','helmert_transformation','EPSG','1830','EPSG','1119','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1831','HD72 to WGS 84 (2)','Derived at fundamental point Szolohegy and tested at 99 stations throughout Hungary. Accuracy better than 1m in all three dimensions throughout Hungary. OGP recommends use of newer transformation (tfm code 1242) in preference to this transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4237','EPSG','4326',1.0,57.01,-69.97,-9.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELTE-Hun',0); INSERT INTO "usage" VALUES('EPSG','8752','helmert_transformation','EPSG','1831','EPSG','1119','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1832','ID74 to WGS 84 (2)','Derived via coordinates of 2 Pulse8 stations. Use of ID74 to WGS 84 (3) (code 1833) is recommended.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4238','EPSG','4326',25.0,2.691,-14.757,4.724,'EPSG','9001',0.0,0.0,0.774,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Rac91-Idn',0); INSERT INTO "usage" VALUES('EPSG','8753','helmert_transformation','EPSG','1832','EPSG','4020','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1833','ID74 to WGS 84 (3)','Parameter values from ID74 to DGN95 (1) (code 15911) assuming that DGN95 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4238','EPSG','4326',3.0,-1.977,-13.06,-9.993,'EPSG','9001',-0.364,-0.254,-0.689,'EPSG','9104',-1.037,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Bak-Idn',0); INSERT INTO "usage" VALUES('EPSG','8754','helmert_transformation','EPSG','1833','EPSG','4020','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1834','Segara to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4294','EPSG','4326',NULL,-403.0,684.0,41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Idn Kal',1); INSERT INTO "usage" VALUES('EPSG','8755','helmert_transformation','EPSG','1834','EPSG','2354','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1835','Segara to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4294','EPSG','4326',NULL,-387.06,636.53,46.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shl-Idn Kal E',1); INSERT INTO "usage" VALUES('EPSG','8756','helmert_transformation','EPSG','1835','EPSG','1360','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1836','Segara to WGS 84 (3)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4294','EPSG','4326',NULL,-403.4,681.12,46.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shl-Idn Kal NE',1); INSERT INTO "usage" VALUES('EPSG','8757','helmert_transformation','EPSG','1836','EPSG','2770','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1837','Makassar to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4257','EPSG','4326',999.0,-587.8,519.75,145.76,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shl-Idn Sul SW',0); INSERT INTO "usage" VALUES('EPSG','8758','helmert_transformation','EPSG','1837','EPSG','1316','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1838','Segara to WGS 84 (4)','Datum shift derived through ITRF93. In Pertamina Hulu Mahakam replaced by ITRF2014 to Segara (1) (CT code 10589).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4613','EPSG','4326',1.0,-404.78,685.68,45.47,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Idn Mah',0); INSERT INTO "usage" VALUES('EPSG','8759','helmert_transformation','EPSG','1838','EPSG','1328','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1839','Beduaram to WGS 72BE (1)','Derived by Elf in 1986.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4213','EPSG','4324',15.0,-101.0,-111.0,187.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ner SE',0); INSERT INTO "usage" VALUES('EPSG','8760','helmert_transformation','EPSG','1839','EPSG','2771','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1840','QND95 to WGS 84 (1)','Transformation defines QND95. May be approximated to 1m throughout Qatar by geocentric translation transformation with dX=-127.78098m, dY=-283.37477m, dZ=+21.24081m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4614','EPSG','4326',0.0,-119.4248,-303.65872,-11.00061,'EPSG','9001',1.164298,0.174458,1.096259,'EPSG','9104',3.657065,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGIS-Qat',0); INSERT INTO "usage" VALUES('EPSG','8761','helmert_transformation','EPSG','1840','EPSG','1346','EPSG','1113'); INSERT INTO "helmert_transformation" VALUES('EPSG','1842','NAD83(CSRS) to WGS 84 (1)','For many purposes NAD83(CSRS) can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4617','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can',0); INSERT INTO "usage" VALUES('EPSG','8763','helmert_transformation','EPSG','1842','EPSG','1061','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1852','Timbalai 1948 to WGS 84 (4)','Derived by Racal Survey for SSB at 24 coastal stations (including Timbalai fundamental point and 6 other primary triangulation stations) between in Sabah (Kudat southwards) and Sarawak (Sibu northwards).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4298','EPSG','4326',5.0,-533.4,669.2,-52.5,'EPSG','9001',0.0,0.0,4.28,'EPSG','9104',9.4,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SSB-Mys E',0); INSERT INTO "usage" VALUES('EPSG','8773','helmert_transformation','EPSG','1852','EPSG','2780','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1853','ED50 to WGS 84 (39)','Derived at a single point in Galway docks.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',5.0,-82.31,-95.23,-114.96,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Ent-Ire Corrib',0); INSERT INTO "usage" VALUES('EPSG','8774','helmert_transformation','EPSG','1853','EPSG','2961','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1854','FD58 to WGS 84 (2)','Derived by Geoid for Elf in 1999. EGM96 geoid used.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4132','EPSG','4326',0.5,-239.1,-170.02,397.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Irn Lavan',0); INSERT INTO "usage" VALUES('EPSG','8775','helmert_transformation','EPSG','1854','EPSG','2782','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1855','FD58 to WGS 84 (3)','Derived by Geoid for Elf in 1999. EGM96 geoid used.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4132','EPSG','4326',0.5,-244.72,-162.773,400.75,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Irn Kharg',0); INSERT INTO "usage" VALUES('EPSG','8776','helmert_transformation','EPSG','1855','EPSG','2781','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1856','ED50(ED77) to WGS 84 (3)','Derived in Kangan district by Geoid for Total in 1998. Used for South Pars phases 2 and 3.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4154','EPSG','4326',0.5,-122.89,-159.08,-168.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Irn SPars',0); INSERT INTO "usage" VALUES('EPSG','8777','helmert_transformation','EPSG','1856','EPSG','2783','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1857','ED50(ED77) to WGS 84 (4)','Derived in 1999 on Lavan island by Geoid for Elf.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4154','EPSG','4326',0.5,-84.78,-107.55,-137.25,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Irn Lavan',0); INSERT INTO "usage" VALUES('EPSG','8778','helmert_transformation','EPSG','1857','EPSG','2782','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1858','ED50(ED77) to WGS 84 (5)','Derived by Geoid for Elf in 1999. EGM96 geoid used.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4154','EPSG','4326',0.5,-123.92,-155.515,-157.721,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Irn Kharg',0); INSERT INTO "usage" VALUES('EPSG','8779','helmert_transformation','EPSG','1858','EPSG','2781','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1859','ELD79 to WGS 84 (1)','Used by Repsol in Murzuq field, and PetroCanada and previous licence holders in NC177 and 72 (En Naga field). Reliability of connection to ELD79 questionned.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326',20.0,-69.06,-90.71,-142.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'REP-Lby MZQ',0); INSERT INTO "usage" VALUES('EPSG','8780','helmert_transformation','EPSG','1859','EPSG','2785','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1860','ELD79 to WGS 84 (2)','Derived December 2001 by NAGECO. 3-dimensional SD at 11 points is 0.5m. Connected to ITRF via Remsa 2000 data. Used by TotalFinaElf.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326',0.5,-113.997,-97.076,-152.312,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Lby MZQ',0); INSERT INTO "usage" VALUES('EPSG','8781','helmert_transformation','EPSG','1860','EPSG','2785','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1861','ELD79 to WGS 84 (3)','Derived by GEOID in 1994 from Transit satellite data. Used by TotalFinaElf.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326',2.0,-114.5,-96.1,-151.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Lby MBK94',0); INSERT INTO "usage" VALUES('EPSG','8782','helmert_transformation','EPSG','1861','EPSG','2786','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1862','ELD79 to WGS 84 (4)','Derived by Geoid in 2000 from ITRF connection by NAGECO for TotalFinaElf. For historic compatibility TFE use the 1994 tfm ELD79 to WGS 84 (3) (code 1861) rather than this transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4159','EPSG','4326',0.5,-194.513,-63.978,-25.759,'EPSG','9001',-3.4027,3.756,-3.352,'EPSG','9104',-0.9175,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Lby MBK00',0); INSERT INTO "usage" VALUES('EPSG','8783','helmert_transformation','EPSG','1862','EPSG','2786','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1863','ELD79 to WGS 84 (5)','Derived for the Great Man-made River Authority (GMRA).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4159','EPSG','4326',6.0,-389.691,64.502,210.209,'EPSG','9001',-0.086,-14.314,6.39,'EPSG','9104',0.9264,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GMRA-Lby',0); INSERT INTO "usage" VALUES('EPSG','8784','helmert_transformation','EPSG','1863','EPSG','2786','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1864','SAD69 to WGS 84 (1)','Derived at 84 stations. Accuracy 15m, 6m and 9m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',19.0,-57.0,1.0,-41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-mean',0); INSERT INTO "usage" VALUES('EPSG','8785','helmert_transformation','EPSG','1864','EPSG','4016','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1865','SAD69 to WGS 84 (2)','Derived at 10 stations. Accuracy 5m in each axis. Note: SAD69 not adopted in Argentina: see Campo Inchauspe (CRS code 4221).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',9.0,-62.0,-1.0,-37.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Arg',0); INSERT INTO "usage" VALUES('EPSG','8786','helmert_transformation','EPSG','1865','EPSG','3215','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1866','SAD69 to WGS 84 (3)','Derived at 4 stations. Accuracy 15m in each axis. Note: SAD69 not adopted in Bolivia: see PSAD56 (CRS code 4248).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',26.0,-61.0,2.0,-48.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bol',0); INSERT INTO "usage" VALUES('EPSG','8787','helmert_transformation','EPSG','1866','EPSG','1049','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1867','SAD69 to WGS 84 (4)','Derived at 22 stations. Accuracy 3m, 5m and 5m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',8.0,-60.0,-2.0,-41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bra',0); INSERT INTO "usage" VALUES('EPSG','8788','helmert_transformation','EPSG','1867','EPSG','3887','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1868','SAD69 to WGS 84 (5)','Derived at 9 stations. Accuracy 15m, 8m and 11m in X, Y and Z axes. Note: SAD69 not adopted in Chile north of 43°30''S. Replaced by SAD69 to WGS 84 (17) to (19) (codes 6974, 6975 and 6976).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',21.0,-75.0,-1.0,-44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Chile',0); INSERT INTO "usage" VALUES('EPSG','8789','helmert_transformation','EPSG','1868','EPSG','3227','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1869','SAD69 to WGS 84 (6)','Derived at 7 stations. Accuracy 6m, 6m and 5m in X, Y and Z axes. Note: SAD69 not adopted in Colombia: see Bogota 1975 (CRS code 4218).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',10.0,-44.0,6.0,-36.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Col',0); INSERT INTO "usage" VALUES('EPSG','8790','helmert_transformation','EPSG','1869','EPSG','3229','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1870','SAD69 to WGS 84 (7)','Derived at 11 stations. Accuracy 3m in each axis. Note: SAD69 not adopted in Ecuador: see PSAD56 (CRS code 4248).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',6.0,-48.0,3.0,-44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ecu',0); INSERT INTO "usage" VALUES('EPSG','8791','helmert_transformation','EPSG','1870','EPSG','3241','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1871','SAD69 to WGS 84 (8)','Derived at 1 station. Accuracy 25m in each axis. Note: SAD69 not adopted in Ecuador.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',44.0,-47.0,26.0,-42.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ecu Gal',0); INSERT INTO "usage" VALUES('EPSG','8792','helmert_transformation','EPSG','1871','EPSG','2356','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1872','SAD69 to WGS 84 (9)','Derived at 5 stations. Accuracy 9m, 5m and 5m in X, Y and Z axes. Note: SAD69 not adopted in Guyana.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',12.0,-53.0,3.0,-47.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Guy',0); INSERT INTO "usage" VALUES('EPSG','8793','helmert_transformation','EPSG','1872','EPSG','3259','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1873','SAD69 to WGS 84 (10)','Derived at 4 stations. Accuracy 15m in each axis. Note: SAD69 not adopted in Paraguay.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',26.0,-61.0,2.0,-33.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Pgy',0); INSERT INTO "usage" VALUES('EPSG','8794','helmert_transformation','EPSG','1873','EPSG','1188','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1874','SAD69 to WGS 84 (11)','Derived at 6 stations. Accuracy 5m in each axis. Note: SAD69 not adopted in Peru: see PSAD56 (CRS code 4248).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',9.0,-58.0,0.0,-44.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Peru',0); INSERT INTO "usage" VALUES('EPSG','8795','helmert_transformation','EPSG','1874','EPSG','3292','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1875','SAD69 to WGS 84 (12)','Derived at 1 station. Accuracy 25m in each axis. Note: SAD69 not adopted in Trinidad and Tobago.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',44.0,-45.0,12.0,-33.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Tto',0); INSERT INTO "usage" VALUES('EPSG','8796','helmert_transformation','EPSG','1875','EPSG','3143','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1876','SAD69 to WGS 84 (13)','Derived at 5 stations. Accuracy 3m, 6m and 3m in X, Y and Z axes. Note: SAD69 not adopted in Venezuela: see PSAD56 (CRS code 4248).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',8.0,-45.0,8.0,-33.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ven',0); INSERT INTO "usage" VALUES('EPSG','8797','helmert_transformation','EPSG','1876','EPSG','3327','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1877','SAD69 to WGS 84 (14)','Derived by Brazilian Institute of Geography and Statistics (IBGE) in 1989 at Chua origin point. In use by Shell throughout Brazil. For use by Petrobras and ANP, replaced by tfm code 5882 from 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',5.0,-66.87,4.37,-38.52,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IBGE-Bra 5m 1989',0); INSERT INTO "usage" VALUES('EPSG','8798','helmert_transformation','EPSG','1877','EPSG','1053','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','1878','SWEREF99 to ETRS89 (1)','Can be taken as an approximate transformation SWEREF99 to WGS 84 - see code 1879.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4619','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Swe',0); INSERT INTO "usage" VALUES('EPSG','8799','helmert_transformation','EPSG','1878','EPSG','1225','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','1879','SWEREF99 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. SWEREF99 is a regional realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4619','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Swe',0); INSERT INTO "usage" VALUES('EPSG','8800','helmert_transformation','EPSG','1879','EPSG','1225','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1880','Point 58 to WGS 84 (1)','Derived at one point in each of Burkina Faso and Niger. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4620','EPSG','4326',44.0,-106.0,-129.0,165.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Bfa Ner',0); INSERT INTO "usage" VALUES('EPSG','8801','helmert_transformation','EPSG','1880','EPSG','2791','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1885','Azores Oriental 1940 to WGS 84 (1)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4184','EPSG','4326',44.0,-203.0,141.0,53.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Prt Az E',0); INSERT INTO "usage" VALUES('EPSG','8806','helmert_transformation','EPSG','1885','EPSG','1345','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1886','Azores Central 1948 to WGS 84 (1)','Derived at 5 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4183','EPSG','4326',6.0,-104.0,167.0,-38.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Prt Az C',0); INSERT INTO "usage" VALUES('EPSG','8807','helmert_transformation','EPSG','1886','EPSG','1301','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1887','Azores Occidental 1939 to WGS 84 (1)','Derived at 3 stations. Accuracy 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4182','EPSG','4326',35.0,-425.0,-169.0,81.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Prt Az W',0); INSERT INTO "usage" VALUES('EPSG','8808','helmert_transformation','EPSG','1887','EPSG','1344','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1888','Porto Santo to WGS 84 (1)','Derived at 2 stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4615','EPSG','4326',44.0,-499.0,-249.0,314.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Prt Mad',0); INSERT INTO "usage" VALUES('EPSG','8809','helmert_transformation','EPSG','1888','EPSG','1314','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1889','Selvagen Grande to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4616','EPSG','4326',NULL,-289.0,-124.0,60.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Prt Sel',1); INSERT INTO "usage" VALUES('EPSG','8810','helmert_transformation','EPSG','1889','EPSG','2779','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1890','Australian Antarctic to WGS 84 (1)','For many purposes Australian Antarctic can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4176','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ata Aus',0); INSERT INTO "usage" VALUES('EPSG','8811','helmert_transformation','EPSG','1890','EPSG','1278','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1892','Hito XVIII 1963 to WGS 84 (2)','Derived at 2 stations. As the source CRS was used for the border survey this transformation is probably also applicable to adjacent areas of Argentina.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4254','EPSG','4326',44.0,16.0,196.0,93.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Chl',0); INSERT INTO "usage" VALUES('EPSG','8813','helmert_transformation','EPSG','1892','EPSG','2805','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1893','Puerto Rico to WGS 84 (3)','Derived at 11 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4139','EPSG','4326',6.0,11.0,72.0,-101.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Pri',0); INSERT INTO "usage" VALUES('EPSG','8814','helmert_transformation','EPSG','1893','EPSG','1335','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1894','Gandajika 1970 to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4233','EPSG','4326',25.0,-133.0,-321.0,50.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Mdv',1); INSERT INTO "usage" VALUES('EPSG','8815','helmert_transformation','EPSG','1894','EPSG','1152','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1895','RT90 to SWEREF99 (1)','Derived at 165 points in 2001. Also given by EuroGeographics as RT90 to ETRS89 using the Position Vector transformation method. Replaces RT90 to ETRS89 (1) (code 1437). May be taken as approximate transformation RT90 to WGS 84 - see code 1896.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4124','EPSG','4619',0.1,414.1,41.3,603.1,'EPSG','9001',0.855,-2.141,7.023,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Swe 2001',0); INSERT INTO "usage" VALUES('EPSG','8816','helmert_transformation','EPSG','1895','EPSG','1225','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1896','RT90 to WGS 84 (2)','Parameter values from RT90 to SWEREF99 (1) (code 1895) assuming that SWEREF99 is equivalent to WGS 84 within the accuracy of the transformation. Replaces RT90 to WGS 84 (1) (code 1680).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4124','EPSG','4326',1.0,414.1,41.3,603.1,'EPSG','9001',0.855,-2.141,7.023,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Swe 2001',0); INSERT INTO "usage" VALUES('EPSG','8817','helmert_transformation','EPSG','1896','EPSG','1225','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1897','Segara to WGS 84 (1)','Accuracy estimate not available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4613','EPSG','4326',999.0,-403.0,684.0,41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Idn Kal',0); INSERT INTO "usage" VALUES('EPSG','8818','helmert_transformation','EPSG','1897','EPSG','1360','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1898','Segara to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4613','EPSG','4326',5.0,-387.06,636.53,46.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shl-Idn Kal E',0); INSERT INTO "usage" VALUES('EPSG','8819','helmert_transformation','EPSG','1898','EPSG','1359','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1899','Segara to WGS 84 (3)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4613','EPSG','4326',10.0,-403.4,681.12,46.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shl-Idn Kal NE',0); INSERT INTO "usage" VALUES('EPSG','8820','helmert_transformation','EPSG','1899','EPSG','2770','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1900','NAD83(HARN) to WGS 84 (2)','Approximation derived ignoring time-dependent parameters and assuming ITRF94(1996.0) and WGS 84, plus NAD83(CORS94) and NAD83(HARN), can be considered the same within the accuracy of the transformation. Replaced by NAD83(HARN) to WGS 84 (3) (code 1901).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4152','EPSG','4326',1.0,-0.9738,1.9453,0.5486,'EPSG','9001',-1.3357e-07,-4.872e-08,-5.507e-08,'EPSG','9101',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Usa ITRF94',0); INSERT INTO "usage" VALUES('EPSG','8821','helmert_transformation','EPSG','1900','EPSG','1323','EPSG','1159'); INSERT INTO "helmert_transformation" VALUES('EPSG','1901','NAD83(HARN) to WGS 84 (3)','Approximation derived from tfm code 6864 ignoring time-dependent parameters and assuming ITRF96(1997.0) and WGS 84, plus NAD83(CORS96) and NAD83(HARN), can be considered the same within the accuracy of the tfm. In USA only replaces tfm code 1900.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4152','EPSG','4326',1.0,-0.991,1.9072,0.5129,'EPSG','9001',-1.25033e-07,-4.6785e-08,-5.6529e-08,'EPSG','9101',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Usa ITRF96',0); INSERT INTO "usage" VALUES('EPSG','8822','helmert_transformation','EPSG','1901','EPSG','1323','EPSG','1159'); INSERT INTO "helmert_transformation" VALUES('EPSG','1902','Manoca 1962 to WGS 72BE (1)','Derived at 6 stations using Transit in 1977.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4193','EPSG','4324',5.0,-56.7,-171.8,-40.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOC-Cmr',0); INSERT INTO "usage" VALUES('EPSG','8823','helmert_transformation','EPSG','1902','EPSG','2555','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1903','Fort Marigot to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4621','EPSG','4326',10.0,137.0,248.0,-430.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp',0); INSERT INTO "usage" VALUES('EPSG','8824','helmert_transformation','EPSG','1903','EPSG','2828','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1904','Guadeloupe 1948 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4622','EPSG','4326',10.0,-467.0,-16.0,-300.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp 10m',0); INSERT INTO "usage" VALUES('EPSG','8825','helmert_transformation','EPSG','1904','EPSG','2829','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1905','Guadeloupe 1948 to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4622','EPSG','4326',0.1,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp 1m',0); INSERT INTO "usage" VALUES('EPSG','8826','helmert_transformation','EPSG','1905','EPSG','2829','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1906','CSG67 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4623','EPSG','4326',10.0,-186.0,230.0,110.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Guf',0); INSERT INTO "usage" VALUES('EPSG','8827','helmert_transformation','EPSG','1906','EPSG','3105','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1907','RGFG95 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4624','EPSG','4326',2.0,2.0,2.0,-2.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Guf',1); INSERT INTO "usage" VALUES('EPSG','8828','helmert_transformation','EPSG','1907','EPSG','1097','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1908','CSG67 to RGFG95 (1)','Accuracy better than +/- 0.1 metre in the coastal area, better than +/- 1 metre in the interior.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4623','EPSG','4624',1.0,-193.066,236.993,105.447,'EPSG','9001',0.4814,-0.8074,0.1276,'EPSG','9104',1.5649,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Guf',0); INSERT INTO "usage" VALUES('EPSG','8829','helmert_transformation','EPSG','1908','EPSG','3105','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1909','Martinique 1938 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4625','EPSG','4326',10.0,186.0,482.0,151.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Mtq 10m',0); INSERT INTO "usage" VALUES('EPSG','8830','helmert_transformation','EPSG','1909','EPSG','3276','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1910','Martinique 1938 to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4625','EPSG','4326',0.1,126.93,547.94,130.41,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Mtq 1m',0); INSERT INTO "usage" VALUES('EPSG','8831','helmert_transformation','EPSG','1910','EPSG','3276','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1911','Reunion 1947 to WGS 84 (1)','Derived at 1 station.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4626','EPSG','4326',30.0,94.0,-948.0,-1292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Reu 30m',1); INSERT INTO "usage" VALUES('EPSG','8832','helmert_transformation','EPSG','1911','EPSG','1196','EPSG','1077'); INSERT INTO "helmert_transformation" VALUES('EPSG','1912','RGR92 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4627','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Reu',0); INSERT INTO "usage" VALUES('EPSG','8833','helmert_transformation','EPSG','1912','EPSG','3902','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1913','Tahaa 54 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4629','EPSG','4326',10.0,65.0,342.0,77.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf Tahaa',0); INSERT INTO "usage" VALUES('EPSG','8834','helmert_transformation','EPSG','1913','EPSG','2812','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1914','IGN72 Nuku Hiva to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4630','EPSG','4326',10.0,84.0,274.0,65.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',0); INSERT INTO "usage" VALUES('EPSG','8835','helmert_transformation','EPSG','1914','EPSG','3129','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1915','K0 1949 to WGS 84 (1)','Also published in US NIMA/NGA TR8350.2 which gives accuracy of +/-25m in each axis and states that derived at one station.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4631','EPSG','4326',10.0,145.0,-187.0,103.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Atf Kerg',1); INSERT INTO "usage" VALUES('EPSG','8836','helmert_transformation','EPSG','1915','EPSG','2816','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1916','Combani 1950 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4632','EPSG','4326',10.0,-382.0,-59.0,-262.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Myt',0); INSERT INTO "usage" VALUES('EPSG','8837','helmert_transformation','EPSG','1916','EPSG','3340','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1917','IGN56 Lifou to WGS 84 (1)','Withdrawn by information source and replaced by improved information from local authority - see tfm code 15902.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4633','EPSG','4326',10.0,336.0,223.0,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl',0); INSERT INTO "usage" VALUES('EPSG','8838','helmert_transformation','EPSG','1917','EPSG','2814','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1918','IGN72 Grand Terre to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4634','EPSG','4326',NULL,-13.0,-348.0,292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl',1); INSERT INTO "usage" VALUES('EPSG','8839','helmert_transformation','EPSG','1918','EPSG','1174','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1919','ST87 Ouvea to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4635','EPSG','4326',1.0,-122.383,-188.696,103.344,'EPSG','9001',3.5107,-4.9668,-5.7047,'EPSG','9104',4.4798,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl',1); INSERT INTO "usage" VALUES('EPSG','8840','helmert_transformation','EPSG','1919','EPSG','2813','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1920','RGNC 1991 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4645','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl',1); INSERT INTO "usage" VALUES('EPSG','8841','helmert_transformation','EPSG','1920','EPSG','1174','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1921','Petrels 1972 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4636','EPSG','4326',10.0,365.0,194.0,166.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ata Adel',0); INSERT INTO "usage" VALUES('EPSG','8842','helmert_transformation','EPSG','1921','EPSG','2817','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1922','Perroud 1950 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4637','EPSG','4326',10.0,325.0,154.0,172.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ata Adel',0); INSERT INTO "usage" VALUES('EPSG','8843','helmert_transformation','EPSG','1922','EPSG','2818','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1923','Saint Pierre et Miquelon 1950 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4638','EPSG','4326',10.0,30.0,430.0,368.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Spm',0); INSERT INTO "usage" VALUES('EPSG','8844','helmert_transformation','EPSG','1923','EPSG','3299','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1924','Tahiti 52 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4628','EPSG','4326',10.0,162.0,117.0,154.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',0); INSERT INTO "usage" VALUES('EPSG','8845','helmert_transformation','EPSG','1924','EPSG','2811','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1925','MOP78 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4639','EPSG','4326',10.0,252.0,-132.0,-125.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Wlf Wallis',1); INSERT INTO "usage" VALUES('EPSG','8846','helmert_transformation','EPSG','1925','EPSG','2815','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1926','Reunion 1947 to RGR92 (1)','Note: Because of the large rotation about the Y-axis this transformation is not reversible. Errors of up to 0.5m may occur. For the reverse transformation use RGR92 to Reunion 1947 [alias Piton des Neiges] (1) (code 1964).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4626','EPSG','4627',0.1,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104',-32.3241,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Reu 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8847','helmert_transformation','EPSG','1926','EPSG','3337','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1927','IGN56 Lifou to WGS 84 (2)','Withdrawn by information source and replaced by improved information - see CT code 15902.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4633','EPSG','4326',1.0,137.092,131.66,91.475,'EPSG','9001',-1.9436,-11.5993,-4.3321,'EPSG','9104',-7.4824,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl v2',0); INSERT INTO "usage" VALUES('EPSG','8848','helmert_transformation','EPSG','1927','EPSG','2814','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1928','IGN53 Mare to WGS 84 (1)','Withdrawn by information source and replaced by improved information - see CT code 15901.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4641','EPSG','4326',1.0,-408.809,366.856,-412.987,'EPSG','9001',1.8842,-0.5308,2.1655,'EPSG','9104',-121.0993,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl v1',0); INSERT INTO "usage" VALUES('EPSG','8849','helmert_transformation','EPSG','1928','EPSG','2819','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1929','IGN72 Grand Terre to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4634','EPSG','4326',NULL,97.295,-263.247,310.882,'EPSG','9001',-1.5999,0.8386,3.1409,'EPSG','9104',13.3259,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl',1); INSERT INTO "usage" VALUES('EPSG','8850','helmert_transformation','EPSG','1929','EPSG','2822','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1930','ST84 Ile des Pins to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4642','EPSG','4326',1.0,244.416,85.339,168.114,'EPSG','9001',-8.9353,7.7523,12.5953,'EPSG','9104',14.268,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl',1); INSERT INTO "usage" VALUES('EPSG','8851','helmert_transformation','EPSG','1930','EPSG','2820','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1931','ST71 Belep to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4643','EPSG','4326',1.0,-480.26,-438.32,-643.429,'EPSG','9001',16.3119,20.1721,-4.0349,'EPSG','9104',-111.7002,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl',0); INSERT INTO "usage" VALUES('EPSG','8852','helmert_transformation','EPSG','1931','EPSG','2821','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1932','NEA74 Noumea to WGS 84 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4644','EPSG','4326',1.0,-166.207,-154.777,254.831,'EPSG','9001',-37.5444,7.7011,-10.2025,'EPSG','9104',-30.8598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl',1); INSERT INTO "usage" VALUES('EPSG','8853','helmert_transformation','EPSG','1932','EPSG','2823','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1933','RGR92 to Piton des Nieges (1)','Note: Because of the large rotation about the Y-axis this transformation is not reversible. For the reverse transformation see Piton des Nieges to RGR92 (1) (code 1926).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4627','EPSG','4626',NULL,-789.99,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.568,'EPSG','9104',32.2083,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Reu 0.1m',1); INSERT INTO "usage" VALUES('EPSG','8854','helmert_transformation','EPSG','1933','EPSG','1196','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1934','RRAF 1991 to WGS 84 (1)','RRAF 1991 was defined to be WGS84 at a single point in Martinique during the 1988 Tango mission.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4640','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-FrAnt',1); INSERT INTO "usage" VALUES('EPSG','8855','helmert_transformation','EPSG','1934','EPSG','2824','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1935','ITRF97 to ITRF2000 (1)','At epoch 1997.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4918','EPSG','4919',0.0,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8856','helmert_transformation','EPSG','1935','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1936','ITRF96 to ITRF2000 (1)','At epoch 1997.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4917','EPSG','4919',0.0,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8857','helmert_transformation','EPSG','1936','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1937','ITRF94 to ITRF2000 (1)','At epoch 1997.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4916','EPSG','4919',0.0,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8858','helmert_transformation','EPSG','1937','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1938','ITRF93 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0029 m/yr, dy=0.0002 m/yr, dZ=0.0006 m/yr, rX=0.00011"/yr, rY=0.00019"/yr, rZ=-0.00007"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4915','EPSG','4919',0.0,-0.0127,-0.0065,0.0209,'EPSG','9001',0.00039,-0.0008,0.00114,'EPSG','9104',-0.00195,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8859','helmert_transformation','EPSG','1938','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1939','ITRF92 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4914','EPSG','4919',0.0,-0.0147,-0.0135,0.0139,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00075,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8860','helmert_transformation','EPSG','1939','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1940','ITRF91 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4913','EPSG','4919',0.0,-0.0267,-0.0275,0.0199,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00215,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8861','helmert_transformation','EPSG','1940','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1941','ITRF90 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4912','EPSG','4919',0.0,-0.0247,-0.0235,0.0359,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00245,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8862','helmert_transformation','EPSG','1941','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1942','ITRF89 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4911','EPSG','4919',0.0,-0.0297,-0.0475,0.0739,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',0.00585,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8863','helmert_transformation','EPSG','1942','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1943','ITRF88 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4910','EPSG','4919',0.0,-0.0247,-0.0115,0.0979,'EPSG','9001',-0.0001,0.0,0.00018,'EPSG','9104',-0.00895,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','8864','helmert_transformation','EPSG','1943','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1944','Lisbon to WGS 84 (2)','Parameter values from Lisbon to ETRS89 (2) (code 1790). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4207','EPSG','4326',NULL,-282.1,-72.2,120.0,'EPSG','9001',-1.592,0.145,-0.89,'EPSG','9104',-4.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Prt 2001',1); INSERT INTO "usage" VALUES('EPSG','8865','helmert_transformation','EPSG','1944','EPSG','1294','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1945','Datum 73 to WGS 84 (2)','Parameter values from Datum 73 to ETRS89 (2) (code 1792). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4274','EPSG','4326',NULL,-231.0,102.6,29.8,'EPSG','9001',0.615,-0.198,0.881,'EPSG','9104',1.79,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Prt 2001',1); INSERT INTO "usage" VALUES('EPSG','8866','helmert_transformation','EPSG','1945','EPSG','1294','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1946','NAD83(CSRS) to WGS 84 (2)','Approximation derived from tfm code 6864 ignoring time-dependent parameters and assuming ITRF96(1997.0) and WGS 84 can be considered the same within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4617','EPSG','4326',1.0,-0.991,1.9072,0.5129,'EPSG','9001',-1.25033e-07,-4.6785e-08,-5.6529e-08,'EPSG','9101',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Usa ITRF96',0); INSERT INTO "usage" VALUES('EPSG','8867','helmert_transformation','EPSG','1946','EPSG','1061','EPSG','1159'); INSERT INTO "helmert_transformation" VALUES('EPSG','1950','NAD83 to NAD83(CSRS) (4)','Used as part of NAD27 to/from WGS 84 transformation for offshore oil operations - see code 8647.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4269','EPSG','4617',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can E Off',0); INSERT INTO "usage" VALUES('EPSG','8871','helmert_transformation','EPSG','1950','EPSG','2831','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1951','Hjorsey 1955 to WGS 84 (1)','Derived at 6 stations. Accuracy 3m, 3m and 5m in X, Y and Z axes. Replaced by Hjorsey 1955 to WGS 84 (2) (code 6909).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4658','EPSG','4326',7.0,-73.0,46.0,-86.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Isl',0); INSERT INTO "usage" VALUES('EPSG','8872','helmert_transformation','EPSG','1951','EPSG','3262','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1952','ISN93 to WGS 84 (1)','For many purposes ISN93 can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4659','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Isl',0); INSERT INTO "usage" VALUES('EPSG','8873','helmert_transformation','EPSG','1952','EPSG','1120','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1953','TM75 to ETRS89 (2)','TM75 is based on the geodetic datum of 1965 which should not be confused with the mapping adjustment of 1965 (TM65). May be taken as approximate transformations TM75 to WGS 84, TM65 to WGS 84 and OSNI 1952 to WGS 84 - see codes 1954, 1641 and 1955.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4300','EPSG','4258',1.0,482.5,-130.6,564.6,'EPSG','9001',-1.042,-0.214,-0.631,'EPSG','9104',8.15,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire PV approximation',0); INSERT INTO "usage" VALUES('EPSG','8874','helmert_transformation','EPSG','1953','EPSG','1305','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1954','TM75 to WGS 84 (2)','Parameter values taken from TM65 to ETRS89 (2) (code 1953). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4300','EPSG','4326',1.0,482.5,-130.6,564.6,'EPSG','9001',-1.042,-0.214,-0.631,'EPSG','9104',8.15,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ire PV approx',0); INSERT INTO "usage" VALUES('EPSG','8875','helmert_transformation','EPSG','1954','EPSG','1305','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1955','OSNI 1952 to WGS 84 (1)','Parameter values from TM75 to ETRS89 (2) (code 1953). Assumes each pair of (i) OSNI 1952 and TM75, and (ii) ETRS89 and WGS 84, can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4188','EPSG','4326',1.0,482.5,-130.6,564.6,'EPSG','9001',-1.042,-0.214,-0.631,'EPSG','9104',8.15,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ire',0); INSERT INTO "usage" VALUES('EPSG','8876','helmert_transformation','EPSG','1955','EPSG','2530','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1956','TM75 to WGS 84 (3)','Derived at 7 stations. Accuracy 3m in each axis. TM75 is based on the geodetic datum of 1965 which should not be confused with the mapping adjustment of 1965 (TM65).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4300','EPSG','4326',6.0,506.0,-122.0,611.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ire',0); INSERT INTO "usage" VALUES('EPSG','8877','helmert_transformation','EPSG','1956','EPSG','1305','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1957','Helle 1954 to WGS 84 (1)','Derived at 3 stations. Residuals under 1m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4660','EPSG','4326',1.0,982.6087,552.753,-540.873,'EPSG','9001',32.39344,-153.25684,-96.2266,'EPSG','9109',16.805,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SKV-SJM Jan Mayen',0); INSERT INTO "usage" VALUES('EPSG','8878','helmert_transformation','EPSG','1957','EPSG','2869','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1958','LKS-92 to WGS 84 (1)','LKS-92 is a national realization of ETRS89 and coincident to WGS84 within 1 metre. This transformation has an accuracy equal to the coincidence figure.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4661','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Vzd-Lva',0); INSERT INTO "usage" VALUES('EPSG','8879','helmert_transformation','EPSG','1958','EPSG','1139','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1959','St. Vincent 1945 to WGS 84 (1)','Derived at 4 points.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4607','EPSG','4326',1.0,195.671,332.517,274.607,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LSU-Vct',0); INSERT INTO "usage" VALUES('EPSG','8880','helmert_transformation','EPSG','1959','EPSG','3300','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1960','ED87 to WGS 84 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4231','EPSG','4326',1.0,-83.11,-97.38,-117.22,'EPSG','9001',0.005693,-0.04469,0.04428,'EPSG','9104',1.218,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Eur',1); INSERT INTO "usage" VALUES('EPSG','8881','helmert_transformation','EPSG','1960','EPSG','1297','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','1961','ED50 to WGS 84 (32)','Parameter values taken from ED87 to WGS 84 (2) (tfm code 1960) assuming that ED87 is identical to ED50. Errors caused by this assumption can reach 3m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',NULL,-83.11,-97.38,-117.22,'EPSG','9001',0.005693,-0.04469,0.4428,'EPSG','9104',1.218,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NAM-Nld-Nsea',1); INSERT INTO "usage" VALUES('EPSG','8882','helmert_transformation','EPSG','1961','EPSG','1630','EPSG','1217'); INSERT INTO "helmert_transformation" VALUES('EPSG','1962','IGN72 Grande Terre to WGS 84 (1)','Withdrawn by information source and replaced by improved information from local authority - see tfm code 15903.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4662','EPSG','4326',10.0,-13.0,-348.0,292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl',0); INSERT INTO "usage" VALUES('EPSG','8883','helmert_transformation','EPSG','1962','EPSG','2822','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','1963','IGN72 Grande Terre to WGS 84 (2)','Withdrawn by information source and replaced by improved information - see CT code 15903.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4662','EPSG','4326',1.0,97.295,-263.247,310.882,'EPSG','9001',-1.5999,0.8386,3.1409,'EPSG','9104',13.3259,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl v2',0); INSERT INTO "usage" VALUES('EPSG','8884','helmert_transformation','EPSG','1963','EPSG','2822','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','1964','RGR92 to Reunion 1947 (1)','Note: Because of the large rotation about the Y-axis this transformation is not reversible. Errors of up to 0.5m may occur. For the reverse transformation use Reunion 1947 [alias Piton des Neiges] to RGR92 (1) (code 1926).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4627','EPSG','4626',0.1,-789.99,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.568,'EPSG','9104',32.2083,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Reu 0.1m',0); INSERT INTO "usage" VALUES('EPSG','8885','helmert_transformation','EPSG','1964','EPSG','3337','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','1965','Selvagem Grande to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4616','EPSG','4326',44.0,-289.0,-124.0,60.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Prt Sel',0); INSERT INTO "usage" VALUES('EPSG','8886','helmert_transformation','EPSG','1965','EPSG','2779','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','1966','Porto Santo 1995 to WGS 84 (2)','Derived at Forte de Sao Tiago.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4663','EPSG','4326',5.0,-502.862,-247.438,312.724,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Mad 5m',0); INSERT INTO "usage" VALUES('EPSG','8887','helmert_transformation','EPSG','1966','EPSG','2870','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1967','Porto Santo 1995 to WGS 84 (3)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4663','EPSG','4326',1.0,-210.502,-66.902,-48.476,'EPSG','9001',-2.094,15.067,5.817,'EPSG','9104',0.485,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Mad 1m',0); INSERT INTO "usage" VALUES('EPSG','8888','helmert_transformation','EPSG','1967','EPSG','2870','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1968','Azores Oriental 1995 to WGS 84 (2)','Calculated in 2001.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4664','EPSG','4326',5.0,-204.633,140.216,55.199,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Mig 5m',0); INSERT INTO "usage" VALUES('EPSG','8889','helmert_transformation','EPSG','1968','EPSG','2871','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1969','Azores Oriental 1995 to WGS 84 (3)','Calculated in 2001.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4664','EPSG','4326',1.0,-211.939,137.626,58.3,'EPSG','9001',0.089,-0.251,-0.079,'EPSG','9104',0.384,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Mig 1m',0); INSERT INTO "usage" VALUES('EPSG','8890','helmert_transformation','EPSG','1969','EPSG','2871','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1970','Azores Oriental 1995 to WGS 84 (4)','Mean for all islands in group.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4664','EPSG','4326',5.0,-204.619,140.176,55.226,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az E 5m',0); INSERT INTO "usage" VALUES('EPSG','8891','helmert_transformation','EPSG','1970','EPSG','1345','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1971','Azores Oriental 1995 to WGS 84 (5)','Mean for all islands in group.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4664','EPSG','4326',1.0,-208.719,129.685,52.092,'EPSG','9001',0.195,0.014,-0.327,'EPSG','9104',0.198,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az E 1m',0); INSERT INTO "usage" VALUES('EPSG','8892','helmert_transformation','EPSG','1971','EPSG','1345','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1972','Azores Central 1995 to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','4326',5.0,-106.301,166.27,-37.916,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Ter 5m',0); INSERT INTO "usage" VALUES('EPSG','8893','helmert_transformation','EPSG','1972','EPSG','2872','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1973','Azores Central 1995 to WGS 84 (3)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4665','EPSG','4326',1.0,-105.854,165.589,-38.312,'EPSG','9001',0.003,0.026,-0.024,'EPSG','9104',-0.048,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Ter 1m',0); INSERT INTO "usage" VALUES('EPSG','8894','helmert_transformation','EPSG','1973','EPSG','2872','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1974','Azores Central 1995 to WGS 84 (4)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','4326',5.0,-106.248,166.244,-37.845,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Fai 5m',0); INSERT INTO "usage" VALUES('EPSG','8895','helmert_transformation','EPSG','1974','EPSG','2873','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1975','Azores Central 1995 to WGS 84 (5)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4665','EPSG','4326',1.0,-104.0,162.924,-38.882,'EPSG','9001',0.075,0.071,-0.051,'EPSG','9104',-0.338,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Fai 1m',0); INSERT INTO "usage" VALUES('EPSG','8896','helmert_transformation','EPSG','1975','EPSG','2873','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1976','Azores Central 1995 to WGS 84 (6)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','4326',5.0,-106.044,166.655,-37.876,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Pic 5m',0); INSERT INTO "usage" VALUES('EPSG','8897','helmert_transformation','EPSG','1976','EPSG','2874','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1977','Azores Central 1995 to WGS 84 (7)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4665','EPSG','4326',1.0,-95.323,166.098,-69.942,'EPSG','9001',0.215,1.031,-0.047,'EPSG','9104',1.922,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az Pic 1m',0); INSERT INTO "usage" VALUES('EPSG','8898','helmert_transformation','EPSG','1977','EPSG','2874','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1978','Azores Central 1995 to WGS 84 (8)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','4326',5.0,-106.253,166.239,-37.854,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az SJ 5m',0); INSERT INTO "usage" VALUES('EPSG','8899','helmert_transformation','EPSG','1978','EPSG','2875','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1979','Azores Central 1995 to WGS 84 (9)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4665','EPSG','4326',1.0,-100.306,161.246,-48.761,'EPSG','9001',0.192,0.385,-0.076,'EPSG','9104',0.131,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az SJ 1m',0); INSERT INTO "usage" VALUES('EPSG','8900','helmert_transformation','EPSG','1979','EPSG','2875','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1980','Azores Central 1995 to WGS 84 (10)','Mean for all islands in group.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','4326',5.0,-106.226,166.366,-37.893,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az C 5m',0); INSERT INTO "usage" VALUES('EPSG','8901','helmert_transformation','EPSG','1980','EPSG','1301','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1981','Azores Central 1995 to WGS 84 (11)','Mean for all islands in group.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4665','EPSG','4326',1.0,-103.088,162.481,-28.276,'EPSG','9001',-0.167,-0.082,-0.168,'EPSG','9104',-1.504,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az C 1m',0); INSERT INTO "usage" VALUES('EPSG','8902','helmert_transformation','EPSG','1981','EPSG','1301','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1982','Azores Occidental 1939 to WGS 84 (2)','Derived at 2 stations in 1999.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4182','EPSG','4326',5.0,-422.651,-172.995,84.02,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt Az W',0); INSERT INTO "usage" VALUES('EPSG','8903','helmert_transformation','EPSG','1982','EPSG','1344','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1983','Datum 73 to WGS 84 (3)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4274','EPSG','4326',5.0,-223.237,110.193,36.649,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 5m',0); INSERT INTO "usage" VALUES('EPSG','8904','helmert_transformation','EPSG','1983','EPSG','1294','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1984','Lisbon to WGS 84 (3)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4207','EPSG','4326',5.0,-304.046,-60.576,103.64,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 5m',0); INSERT INTO "usage" VALUES('EPSG','8905','helmert_transformation','EPSG','1984','EPSG','1294','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1985','ED50 to WGS 84 (33)','May be taken as a transformation from ED50 to ETRS89 - see tfm code 5040.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',5.0,-87.987,-108.639,-121.593,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 5m',0); INSERT INTO "usage" VALUES('EPSG','8906','helmert_transformation','EPSG','1985','EPSG','1294','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1986','Lisbon 1890 to WGS 84 (1)','May be taken as a transformation from Lisbon 1890 to ETRS89 - see tfm code 5039.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4666','EPSG','4326',5.0,508.088,-191.042,565.223,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 5m',0); INSERT INTO "usage" VALUES('EPSG','8907','helmert_transformation','EPSG','1986','EPSG','1294','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1987','Datum 73 to WGS 84 (4)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4274','EPSG','4326',1.0,-239.749,88.181,30.488,'EPSG','9001',-0.263,-0.082,-1.211,'EPSG','9104',2.229,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 1m',0); INSERT INTO "usage" VALUES('EPSG','8908','helmert_transformation','EPSG','1987','EPSG','1294','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1988','Lisbon to WGS 84 (4)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4207','EPSG','4326',2.0,-288.885,-91.744,126.244,'EPSG','9001',1.691,-0.41,0.211,'EPSG','9104',-4.598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 1m',0); INSERT INTO "usage" VALUES('EPSG','8909','helmert_transformation','EPSG','1988','EPSG','1294','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1989','ED50 to WGS 84 (34)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4230','EPSG','4326',1.0,-74.292,-135.889,-104.967,'EPSG','9001',0.524,0.136,-0.61,'EPSG','9104',-3.761,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 1m',0); INSERT INTO "usage" VALUES('EPSG','8910','helmert_transformation','EPSG','1989','EPSG','1294','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1990','Lisbon 1890 to WGS 84 (2)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4666','EPSG','4326',1.0,631.392,-66.551,481.442,'EPSG','9001',-1.09,4.445,4.487,'EPSG','9104',-4.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 1m',0); INSERT INTO "usage" VALUES('EPSG','8911','helmert_transformation','EPSG','1990','EPSG','1294','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1992','Datum 73 to ETRS89 (3)','Parameters calculated in 1998 using 9 common stations. Published in 2001. Replaces Datum 73 to ETRS89 (1) (code 1657). Replaced by Datum 73 to ETRS89 (5) (code 5037).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4274','EPSG','4258',1.0,-231.034,102.615,26.836,'EPSG','9001',-0.615,0.198,-0.881,'EPSG','9104',1.786,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 1m',0); INSERT INTO "usage" VALUES('EPSG','8913','helmert_transformation','EPSG','1992','EPSG','1294','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','1993','IKBD-92 to WGS 84 (4)','This transformation was exact in 1992, deteriorating with tectonic plate motion at several centimetres per year.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4667','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UN-Irq Kwt',0); INSERT INTO "usage" VALUES('EPSG','8914','helmert_transformation','EPSG','1993','EPSG','2876','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','1994','Reykjavik 1900 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4657','EPSG','4326',10.0,-28.0,199.0,5.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','8915','helmert_transformation','EPSG','1994','EPSG','3262','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','1995','Dealul Piscului 1930 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4316','EPSG','4326',10.0,103.25,-100.4,-307.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NAMR-Rom',0); INSERT INTO "usage" VALUES('EPSG','8916','helmert_transformation','EPSG','1995','EPSG','3295','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1996','Dealul Piscului 1970 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4317','EPSG','4326',10.0,44.107,-116.147,-54.648,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shell-Rom',1); INSERT INTO "usage" VALUES('EPSG','8917','helmert_transformation','EPSG','1996','EPSG','1197','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1997','Lisbon to ETRS89 (2)','Derived in 2001. Replaces Lisbon to ETRS89 (1) (code 1655). Also given to greater precision but no more accuracy on ICC web site using Coordinate Frame method. Replaced by Lisbon to ETRS89 (3) (code 5038).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4207','EPSG','4258',2.0,-282.1,-72.2,120.0,'EPSG','9001',-1.529,0.145,-0.89,'EPSG','9104',-4.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICC-Prt 2001',0); INSERT INTO "usage" VALUES('EPSG','8918','helmert_transformation','EPSG','1997','EPSG','1294','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','1998','ED50 to WGS 84 (36)','Approximation to better than 0.5m of CT adopted in June 2003 (see ED50 to WGS 84 (35), code 1052). Recommended for Germany North Sea petroleum purposes. Acceptable to Landesbergamt for Lower Saxony and Bundesanstalt für Seeschifffahrt und Hydrographie.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',1.0,-157.89,-17.16,-78.41,'EPSG','9001',2.118,2.697,-1.434,'EPSG','9104',-5.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ger Nsea',0); INSERT INTO "usage" VALUES('EPSG','8919','helmert_transformation','EPSG','1998','EPSG','2879','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','1999','ED50 to WGS 84 (32)','Parameter values taken from ED87 to WGS 84 (2) (tfm code 1960) assuming that ED87 is identical to ED50. Errors caused by this assumption can reach 3m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',3.0,-83.11,-97.38,-117.22,'EPSG','9001',0.005693,-0.04469,0.04428,'EPSG','9104',1.218,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NAM-Nld-Nsea',1); INSERT INTO "usage" VALUES('EPSG','8920','helmert_transformation','EPSG','1999','EPSG','1630','EPSG','1217'); INSERT INTO "helmert_transformation" VALUES('EPSG','3817','HD1909 to WGS 84 (1)','Horizontal coordinates of 66 points of the National Geodetic Network were used to compute this transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3819','EPSG','4326',3.0,595.48,121.69,515.35,'EPSG','9001',-4.115,2.9383,-0.853,'EPSG','9104',-3.408,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELTE-Hun',0); INSERT INTO "usage" VALUES('EPSG','8941','helmert_transformation','EPSG','3817','EPSG','1119','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','3830','TWD97 to WGS 84 (1)','Approximation at the +/- 1m level assuming that TWD97 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','3824','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Twn',0); INSERT INTO "usage" VALUES('EPSG','8944','helmert_transformation','EPSG','3830','EPSG','1228','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3894','IGRS to WGS 84 (1)','Approximation at the +/- 1m level assuming that IGRS is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','3889','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Irq',0); INSERT INTO "usage" VALUES('EPSG','8963','helmert_transformation','EPSG','3894','EPSG','1124','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3904','ED50 to WGS 84 (32)','Parameter values from ED87 to ETRS89 (1) (tfm code 4078), assuming that ED50 is identical to ED87 and ETRS89 to WGS 84. Errors caused by this assumption can reach 3-5m. Used by NAM for offshore operations until mid 2004, then replaced by tfm code 1311.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4326',5.0,-83.11,-97.38,-117.22,'EPSG','9001',0.0276,-0.2167,0.2147,'EPSG','9109',0.1218,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Rws-Nld-Nsea',0); INSERT INTO "usage" VALUES('EPSG','8969','helmert_transformation','EPSG','3904','EPSG','1630','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3905','ED87 to WGS 84 (2)','Parameter values taken from ED87 to ETRS89 (1) (tfm code 4078) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the transformation. Used as a tfm between ED50 and WGS 84 - see code 3904.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4231','EPSG','4326',1.0,-83.11,-97.38,-117.22,'EPSG','9001',0.0276,-0.2167,0.2147,'EPSG','9109',0.1218,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Eur',0); INSERT INTO "usage" VALUES('EPSG','8970','helmert_transformation','EPSG','3905','EPSG','1297','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3914','MGI 1901 to ETRS89 (3)','Derived at 11 points. May be taken as approximate transformation MGI 1901 to WGS 84 - see code 3915. Superseded by MGI 1901 to Slovenia 1996 (12) (code 8689).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4258',1.0,426.9,142.6,460.1,'EPSG','9001',4.91,4.49,-12.42,'EPSG','9104',17.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GURS-Svn',0); INSERT INTO "usage" VALUES('EPSG','8972','helmert_transformation','EPSG','3914','EPSG','3307','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','3915','MGI 1901 to WGS 84 (5)','Parameter values from MGI 1901 to ETRS89 (3) (code 3914). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,426.9,142.6,460.1,'EPSG','9001',4.91,4.49,-12.42,'EPSG','9104',17.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Svn',0); INSERT INTO "usage" VALUES('EPSG','8973','helmert_transformation','EPSG','3915','EPSG','3307','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3916','MGI 1901 to Slovenia 1996 (1)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible. May be taken as approx tfm MGI 1901 to WGS 84 (see code 3917).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',1.0,409.545,72.164,486.872,'EPSG','9001',-3.085957,-5.46911,11.020289,'EPSG','9104',17.919665,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn',0); INSERT INTO "usage" VALUES('EPSG','8974','helmert_transformation','EPSG','3916','EPSG','3307','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','3917','MGI 1901 to WGS 84 (9)','Parameter values from MGI 1901 to Slovenia 1996 (1) (code 3916). Assumes Slovenia 1996 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,409.545,72.164,486.872,'EPSG','9001',-3.085957,-5.46911,11.020289,'EPSG','9104',17.919665,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Svn 96',0); INSERT INTO "usage" VALUES('EPSG','8975','helmert_transformation','EPSG','3917','EPSG','3307','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3918','MGI 1901 to Slovenia 1996 (2)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.5,315.393,186.223,499.609,'EPSG','9001',-6.445954,-8.131631,13.208641,'EPSG','9104',23.449046,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn W',0); INSERT INTO "usage" VALUES('EPSG','8976','helmert_transformation','EPSG','3918','EPSG','3564','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','3919','MGI 1901 to Slovenia 1996 (3)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.5,464.939,-21.478,504.497,'EPSG','9001',0.403,-4.228747,9.954942,'EPSG','9104',12.795378,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn NE',0); INSERT INTO "usage" VALUES('EPSG','8977','helmert_transformation','EPSG','3919','EPSG','3565','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','3921','MGI 1901 to Slovenia 1996 (4)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.5,459.968,82.193,458.756,'EPSG','9001',-3.565234,-3.700593,10.860523,'EPSG','9104',15.507563,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn SE 0.5m',0); INSERT INTO "usage" VALUES('EPSG','8978','helmert_transformation','EPSG','3921','EPSG','3566','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','3922','MGI 1901 to Slovenia 1996 (5)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.3,427.914,105.528,510.908,'EPSG','9001',-4.992523,-5.898813,10.306673,'EPSG','9104',12.431493,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn SE 0.3m',0); INSERT INTO "usage" VALUES('EPSG','8979','helmert_transformation','EPSG','3922','EPSG','3567','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','3923','MGI 1901 to Slovenia 1996 (6)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.3,468.63,81.389,445.221,'EPSG','9001',-3.839242,-3.262525,10.566866,'EPSG','9104',16.132726,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Dol',0); INSERT INTO "usage" VALUES('EPSG','8980','helmert_transformation','EPSG','3923','EPSG','3568','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','3924','MGI 1901 to Slovenia 1996 (7)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.3,439.5,-11.77,494.976,'EPSG','9001',-0.026585,-4.65641,10.155824,'EPSG','9104',16.270002,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Staj',0); INSERT INTO "usage" VALUES('EPSG','8981','helmert_transformation','EPSG','3924','EPSG','3569','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','3925','MGI 1901 to Slovenia 1996 (8)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.3,524.442,3.275,519.002,'EPSG','9001',0.013287,-3.119714,10.232693,'EPSG','9104',4.184981,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Pom',0); INSERT INTO "usage" VALUES('EPSG','8982','helmert_transformation','EPSG','3925','EPSG','3570','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','3926','MGI 1901 to Slovenia 1996 (9)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.3,281.529,45.963,537.515,'EPSG','9001',-2.570437,-9.648271,10.759507,'EPSG','9104',26.465548,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Gor',0); INSERT INTO "usage" VALUES('EPSG','8983','helmert_transformation','EPSG','3926','EPSG','3571','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','3927','MGI 1901 to Slovenia 1996 (10)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.3,355.845,274.282,462.979,'EPSG','9001',-9.086933,-6.491055,14.502181,'EPSG','9104',20.888647,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Prim',0); INSERT INTO "usage" VALUES('EPSG','8984','helmert_transformation','EPSG','3927','EPSG','3572','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','3928','MGI 1901 to Slovenia 1996 (11)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',0.3,400.629,90.651,472.249,'EPSG','9001',-3.261138,-5.263404,11.83739,'EPSG','9104',20.022676,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn cen',0); INSERT INTO "usage" VALUES('EPSG','8985','helmert_transformation','EPSG','3928','EPSG','3573','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','3962','MGI 1901 to WGS 84 (1)','Accuracy estimate not available from information source but established empirically by OGP.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','3906','EPSG','4326',5.0,682.0,-203.0,480.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-balk',0); INSERT INTO "usage" VALUES('EPSG','9010','helmert_transformation','EPSG','3962','EPSG','2370','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','3963','MGI 1901 to ETRS89 (2)','May be taken as approximate transformation MGI 1901 to WGS 84 - see code 3964.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4258',1.0,551.7,162.9,467.9,'EPSG','9001',6.04,1.96,-11.38,'EPSG','9104',-4.82,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DGU-Hrv',0); INSERT INTO "usage" VALUES('EPSG','9011','helmert_transformation','EPSG','3963','EPSG','3234','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','3964','MGI 1901 to WGS 84 (4)','Parameter values from MGI 1901 to ETRS89 (2) (code 3963). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,551.7,162.9,467.9,'EPSG','9001',6.04,1.96,-11.38,'EPSG','9104',-4.82,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Hrv',0); INSERT INTO "usage" VALUES('EPSG','9012','helmert_transformation','EPSG','3964','EPSG','3234','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3965','MGI 1901 to WGS 84 (6)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','3906','EPSG','4326',10.0,695.5,-216.6,491.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JPet-Yug',0); INSERT INTO "usage" VALUES('EPSG','9013','helmert_transformation','EPSG','3965','EPSG','3536','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','3971','PSAD56 to SIRGAS 1995 (1)','Derived at 42 points. May be taken as transformation PSAD56 to WGS 84 - see code 3990.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4248','EPSG','4170',5.0,-60.31,245.935,31.008,'EPSG','9001',-12.324,-3.755,7.37,'EPSG','9104',0.447,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ecu',0); INSERT INTO "usage" VALUES('EPSG','9016','helmert_transformation','EPSG','3971','EPSG','3241','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','3972','Chua to WGS 84 (2)','Mandatory for SICAD use until 2005. Replaced by Chua to SIRGAS 2000 (tfm code 4069).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4224','EPSG','4326',5.0,-143.87,243.37,-33.52,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SICAD-Bra DF pre 2000',0); INSERT INTO "usage" VALUES('EPSG','9017','helmert_transformation','EPSG','3972','EPSG','3619','EPSG','1143'); INSERT INTO "helmert_transformation" VALUES('EPSG','3990','PSAD56 to WGS 84 (14)','Parameter values from PSAD56 to SIRGAS 1995 (1) (code 3971). Assumes SIRGAS 1995 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4248','EPSG','4326',5.0,-60.31,245.935,31.008,'EPSG','9001',-12.324,-3.755,7.37,'EPSG','9104',0.447,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ecu',0); INSERT INTO "usage" VALUES('EPSG','9024','helmert_transformation','EPSG','3990','EPSG','3241','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','3998','Arc 1960 to WGS 84 (4)','Derived at 3 stations. Accuracy 20m in each axis. Info source gives source CRS as Arc 1950. From inspection of parameter values, analysis of TR8350.2 contour chart sand geographic applicability of CRS, OGP believes that the this shuld be Arc 1960.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4210','EPSG','4326',35.0,-153.0,-5.0,-292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bdi',0); INSERT INTO "usage" VALUES('EPSG','9025','helmert_transformation','EPSG','3998','EPSG','1058','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','4064','RGRDC 2005 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGRDC 2005 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4046','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-DUC',0); INSERT INTO "usage" VALUES('EPSG','9027','helmert_transformation','EPSG','4064','EPSG','3613','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4065','Katanga 1955 to RGRDC 2005 (1)','Derived at 4 stations in Lubumbashi area. May be taken as approximate transformation Katanga 1955 to WGS 84 - see code 4066.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4695','EPSG','4046',1.5,-103.746,-9.614,-255.95,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Rec-DUC',0); INSERT INTO "usage" VALUES('EPSG','9028','helmert_transformation','EPSG','4065','EPSG','3614','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','4066','Katanga 1955 to WGS 84 (1)','Parameter values taken from Katanga 1955 to RGRDC 2005 (1) (code 4065) assuming that RGRDC 2005 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4695','EPSG','4326',1.5,-103.746,-9.614,-255.95,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Rec-DUC',0); INSERT INTO "usage" VALUES('EPSG','9029','helmert_transformation','EPSG','4066','EPSG','3614','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4067','Katanga 1955 to RGRDC 2005 (2)','Derived at 5 stations across Lubumbashi-Likasi region. Used as transformation Katanga 1955 to WGS 84 - see code 4068.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4695','EPSG','4046',0.5,-102.283,-10.277,-257.396,'EPSG','9001',-3.976,-0.002,-6.203,'EPSG','9104',12.315,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,5580868.818,2826402.46,-1243557.996,'EPSG','9001','SDG-DUC',0); INSERT INTO "usage" VALUES('EPSG','9030','helmert_transformation','EPSG','4067','EPSG','3614','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','4068','Katanga 1955 to WGS 84 (2)','Parameter values taken from Katanga 1955 to RGRDC 2005 (2) (code 4067) assuming that RGRDC 2005 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4695','EPSG','4326',1.0,-102.283,-10.277,-257.396,'EPSG','9001',-3.976,-0.002,-6.203,'EPSG','9104',12.315,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,5580868.818,2826402.46,-1243557.996,'EPSG','9001','SDG-DUC',0); INSERT INTO "usage" VALUES('EPSG','9031','helmert_transformation','EPSG','4068','EPSG','3614','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4069','Chua to SIRGAS 2000 (1)','Mandatory for SICAD use. Replaces Chua to WGS 84 (2) (code 3972). May be used as a tfm to WGS 84 - see tfm code 4834.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4224','EPSG','4674',5.0,-144.35,242.88,-33.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SICAD-Bra DF',0); INSERT INTO "usage" VALUES('EPSG','9032','helmert_transformation','EPSG','4069','EPSG','3619','EPSG','1143'); INSERT INTO "helmert_transformation" VALUES('EPSG','4070','Chua to WGS 84 (3)','Parameter values from Chua to SIRGAS 2000 (1) (tfm code 4069) assuming that within the tfm accuracy SIRGAS 2000 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4224','EPSG','4674',5.0,-144.35,242.88,-33.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra DF post 2000',1); INSERT INTO "usage" VALUES('EPSG','9033','helmert_transformation','EPSG','4070','EPSG','1053','EPSG','1097'); INSERT INTO "helmert_transformation" VALUES('EPSG','4076','SREF98 to ETRS89 (1)','May be taken as approximate transformation SREF98 to WGS 84 - see code 4077.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4075','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Srb',0); INSERT INTO "usage" VALUES('EPSG','9035','helmert_transformation','EPSG','4076','EPSG','4543','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','4077','SREF98 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. SREF98 is a regional realisation of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4075','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Srb',0); INSERT INTO "usage" VALUES('EPSG','9036','helmert_transformation','EPSG','4077','EPSG','4543','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4078','ED87 to ETRS89 (1)','May be used as a transformation between ED87 and WGS 84 - see tfm code 3905.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4231','EPSG','4258',0.3,-83.11,-97.38,-117.22,'EPSG','9001',0.0276,-0.2167,0.2147,'EPSG','9109',0.1218,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Eur',0); INSERT INTO "usage" VALUES('EPSG','9037','helmert_transformation','EPSG','4078','EPSG','1297','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4084','REGCAN95 to WGS 84 (1)','Approximation at the +/- 1m level assuming that REGCAN95 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4081','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-esp',0); INSERT INTO "usage" VALUES('EPSG','9038','helmert_transformation','EPSG','4084','EPSG','3199','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4290','Cadastre 1997 to WGS 84 (1)','Parameter values taken from Cadastre 1997 to RGM04 (1) (transformation code 4478) assuming that RGM04 is coincident with WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4475','EPSG','4326',1.0,-381.788,-57.501,-256.673,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Myt',0); INSERT INTO "usage" VALUES('EPSG','9067','helmert_transformation','EPSG','4290','EPSG','3340','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4461','NAD83(HARN) to NAD83(NSRS2007) (1)','Accuracy 0.1 to 0.2m in California, 0.05-0.11 in Oregon, elsewhere better than 0.05m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4152','EPSG','4759',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-USA conus',0); INSERT INTO "usage" VALUES('EPSG','9092','helmert_transformation','EPSG','4461','EPSG','1323','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','4476','RGM04 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGM04 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4470','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Myt',0); INSERT INTO "usage" VALUES('EPSG','9094','helmert_transformation','EPSG','4476','EPSG','1159','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4477','RGSPM06 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGSPM06 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4463','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-SPM',0); INSERT INTO "usage" VALUES('EPSG','9095','helmert_transformation','EPSG','4477','EPSG','1220','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4478','Cadastre 1997 to RGM04 (1)','May be taken as approximate transformation Cadastre 1997 to WGS 84 - see transformation code 4290.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4475','EPSG','4470',0.1,-381.788,-57.501,-256.673,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Certu-Myt',0); INSERT INTO "usage" VALUES('EPSG','9096','helmert_transformation','EPSG','4478','EPSG','3340','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','4560','RRAF 1991 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RRAF91 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4558','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-FrAnt',0); INSERT INTO "usage" VALUES('EPSG','9097','helmert_transformation','EPSG','4560','EPSG','2824','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4590','ITRF88 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4910','EPSG','4919',0.0,-0.0247,-0.0115,0.0979,'EPSG','9001',-0.0001,0.0,0.00018,'EPSG','9104',-0.00895,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9105','helmert_transformation','EPSG','4590','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4591','ITRF89 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4911','EPSG','4919',0.0,-0.0297,-0.0475,0.0739,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00585,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9106','helmert_transformation','EPSG','4591','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4592','ITRF90 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4912','EPSG','4919',0.0,-0.0247,-0.0235,0.0359,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00245,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9107','helmert_transformation','EPSG','4592','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4593','ITRF91 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4913','EPSG','4919',0.0,-0.0267,-0.0275,0.0199,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00215,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9108','helmert_transformation','EPSG','4593','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4594','ITRF92 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4914','EPSG','4919',0.0,-0.0147,-0.0135,0.0139,'EPSG','9001',0.0,0.0,0.00018,'EPSG','9104',-0.00075,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9109','helmert_transformation','EPSG','4594','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4595','ITRF93 to ITRF2000 (1)','At epoch 1988.0. Rates dX=0.0029 m/yr, dy=0.0002 m/yr, dZ=0.0006 m/yr, rX=0.00011"/yr, rY=0.00019"/yr, rZ=-0.00007"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4915','EPSG','4919',0.0,-0.0127,-0.0065,0.0209,'EPSG','9001',0.00039,-0.0008,0.00114,'EPSG','9104',-0.00195,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9110','helmert_transformation','EPSG','4595','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4596','ITRF94 to ITRF2000 (1)','At epoch 1997.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4916','EPSG','4919',0.0,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9111','helmert_transformation','EPSG','4596','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4597','ITRF96 to ITRF2000 (1)','At epoch 1997.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4917','EPSG','4919',0.0,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9112','helmert_transformation','EPSG','4597','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4598','ITRF97 to ITRF2000 (1)','At epoch 1997.0. Rates dX=0.0000 m/yr, dy=0.0006 m/yr, dZ=0.0014 m/yr, rX=rY=0.0"/yr, rZ=-0.00002"/yr, dS=-0.00001 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4918','EPSG','4919',0.0,-0.0067,-0.0061,0.0185,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00155,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9113','helmert_transformation','EPSG','4598','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4599','ITRF2000 to ITRF2005 (1)','At epoch 2000.0. Rates dX=0.0002 m/yr, dy=-0.0001 m/yr, dZ=0.0018 m/yr, rX=rY=rZ=0.0"/yr, dS=-0.00008 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4919','EPSG','4896',0.0,-0.0001,0.0008,0.0058,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.0004,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9114','helmert_transformation','EPSG','4599','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','4827','S-JTSK to ETRS89 (4)','Derived at approximately 700 points. Scale difference incorporated into rotation matrix. Replaces S-JTSK to ETRS89 (3) (code 4829) to use more common method. May be taken as approximate transformation S-JTSK to WGS 84 - see code 4836.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4258',1.0,485.0,169.5,483.8,'EPSG','9001',7.786,4.398,4.103,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk PV',0); INSERT INTO "usage" VALUES('EPSG','9120','helmert_transformation','EPSG','4827','EPSG','1211','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','4828','S-JTSK to WGS 84 (4)','Parameter values from S-JTSK to ETRS89 (4) (code 4827). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4326',1.0,485.0,169.5,483.5,'EPSG','9001',7.786,4.398,4.103,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Svk',1); INSERT INTO "usage" VALUES('EPSG','9121','helmert_transformation','EPSG','4828','EPSG','1211','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4829','S-JTSK to ETRS89 (3)','Replaced by S-JTSK to ETRS89 (4) (code 4827) to use more commonly encountered transformation method.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4156','EPSG','4258',0.5,558.7,68.8,452.2,'EPSG','9001',-8.025,-4.105,-4.295,'EPSG','9104',5.74,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3977358.114,1407223.203,4765441.589,'EPSG','9001','UGKK-Svk MB',0); INSERT INTO "usage" VALUES('EPSG','9122','helmert_transformation','EPSG','4829','EPSG','1211','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','4830','Amersfoort to ETRS89 (5)','Replaces Amersfoort to ETRS89 (3) (tfm code 15739). Dutch sources also quote an equivalent transformation using the Molodenski-Badekas method - see tfm code 4831.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4258',0.5,565.4171,50.3319,465.5524,'EPSG','9001',1.9342,-1.6677,9.1019,'EPSG','9109',4.0725,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NCG-Nld 2008 CF',0); INSERT INTO "usage" VALUES('EPSG','9123','helmert_transformation','EPSG','4830','EPSG','1275','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','4831','Amersfoort to ETRS89 (6)','Replaces Amersfoort to ETRS89 (4) (tfm code 15740). Dutch sources also quote an equivalent transformation using the Coordinate Frame 7-parameter method - see tfm code 4830.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4289','EPSG','4258',0.5,593.0248,25.9984,478.7459,'EPSG','9001',1.9342,-1.6677,9.1019,'EPSG','9109',4.0725,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3903453.1482,368135.3134,5012970.3051,'EPSG','9001','NCG-Nld 2008 MB',0); INSERT INTO "usage" VALUES('EPSG','9124','helmert_transformation','EPSG','4831','EPSG','1275','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','4832','Mexico ITRF92 to WGS 84 (1)','Approximation at the +/- 1m level assuming that Mexico ITRF92 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4483','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mex',0); INSERT INTO "usage" VALUES('EPSG','9125','helmert_transformation','EPSG','4832','EPSG','1160','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4833','Amersfoort to WGS 84 (4)','Parameter values from Amersfoort to ETRS89 (5) (tfm code 4830) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaces Amersfoort to WGS 84 (3) (code 15934).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4326',1.0,565.4171,50.3319,465.5524,'EPSG','9001',1.9342,-1.6677,9.1019,'EPSG','9109',4.0725,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Nld 2008',0); INSERT INTO "usage" VALUES('EPSG','9126','helmert_transformation','EPSG','4833','EPSG','1275','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4834','Chua to WGS 84 (3)','Parameter values from Chua to SIRGAS 2000 (1) (tfm code 4069) assuming that within the tfm accuracy SIRGAS 2000 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4224','EPSG','4326',5.0,-144.35,242.88,-33.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra DF post 2000',0); INSERT INTO "usage" VALUES('EPSG','9127','helmert_transformation','EPSG','4834','EPSG','3619','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4835','Tahiti 79 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from Tahiti 79 to RGPF (1) (tfm code 15756).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4690','EPSG','4326',1.0,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.877,'EPSG','9104',11.4741,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',1); INSERT INTO "usage" VALUES('EPSG','9128','helmert_transformation','EPSG','4835','EPSG','3124','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4836','S-JTSK to WGS 84 (4)','Parameter values from S-JTSK to ETRS89 (4) (code 4827). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4156','EPSG','4326',1.0,485.0,169.5,483.8,'EPSG','9001',7.786,4.398,4.103,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Svk',0); INSERT INTO "usage" VALUES('EPSG','9129','helmert_transformation','EPSG','4836','EPSG','1211','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4840','RGFG95 to WGS 84 (2)','Replaces RGFG95 to WGS 84 (1) (code 1907) which was not put into official use but issued in error.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4624','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Guf 2',0); INSERT INTO "usage" VALUES('EPSG','9132','helmert_transformation','EPSG','4840','EPSG','1097','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','4905','PTRA08 to WGS 84 (1)','Approximation at the +/- 1m level assuming that PTRA08 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5013','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-pt RA',0); INSERT INTO "usage" VALUES('EPSG','9148','helmert_transformation','EPSG','4905','EPSG','3670','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5021','Porto Santo 1995 to PTRA08 (1)','Derived at 34 points in May 2009. Residuals at 25 test points within 0.5m horizontal and 2m vertical. Info source also provides a Position Vector tfm of similar accuracy. See codes 5022 and 5023 for preferred tfms for islands of Porto Santo and Maderia.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4663','EPSG','5013',2.0,-503.229,-247.375,312.582,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt MadArch',0); INSERT INTO "usage" VALUES('EPSG','9162','helmert_transformation','EPSG','5021','EPSG','1314','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','5022','Porto Santo 1995 to PTRA08 (2)','Derived at 22 points in May 2009. Residuals at 17 test points within 0.1m horizontal and 1m vertical. Info source also provides a less accurate 3-parameter transformation (dX=-503.174m, dY=-247.255m, dZ=312.316m).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4663','EPSG','5013',1.0,-303.956,224.556,214.306,'EPSG','9001',9.405,-6.626,-12.583,'EPSG','9104',1.327,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Mad',0); INSERT INTO "usage" VALUES('EPSG','9163','helmert_transformation','EPSG','5022','EPSG','3679','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5023','Porto Santo 1995 to PTRA08 (3)','Derived at 14 points in May 2009. Residuals at 6 test points within 0.1m horizontal and 0.2m vertical. Info source also provides a 7-parameter Position Vector transformation of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4663','EPSG','5013',0.2,-503.3,-247.574,313.025,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Porto Santo',0); INSERT INTO "usage" VALUES('EPSG','9164','helmert_transformation','EPSG','5023','EPSG','3680','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5024','Azores Oriental 1995 to PTRA08 (1)','Derived at 53 points in May 2009. Residuals at 58 test points within 0.2m horizontal and 2m vertical. Info source also provides a Position Vector tfm of similar accuracy. See codes 5025-26 for preferred tfms for islands of Sao Miguel and Santa Maria.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4664','EPSG','5013',2.0,-204.926,140.353,55.063,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az E',0); INSERT INTO "usage" VALUES('EPSG','9165','helmert_transformation','EPSG','5024','EPSG','1345','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','5025','Azores Oriental 1995 to PTRA08 (2)','Derived at 36 points in May 2009. Residuals at 43 test points within 0.2m horizontal and 0.3m vertical. Info source also provides a 7-parameter Position Vector transformation of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4664','EPSG','5013',0.3,-204.519,140.159,55.404,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az Mig',0); INSERT INTO "usage" VALUES('EPSG','9166','helmert_transformation','EPSG','5025','EPSG','2871','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','5026','Azores Oriental 1995 to PTRA08 (3)','Derived at 18 points in May 2009. Residuals at 14 test points within 0.1m. Info source also provides a 7-parameter Position Vector transformation of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4664','EPSG','5013',0.1,-205.808,140.771,54.326,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az S.Maria',0); INSERT INTO "usage" VALUES('EPSG','9167','helmert_transformation','EPSG','5026','EPSG','3683','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','5027','Azores Central 1995 to PTRA08 (1)','Derived at 112 points in May 2009. Residuals at 184 test points within 0.5m horizontal and 1m vertical. Info source also provides a Position Vector tfm of similar accuracy. See codes 5028-32 for preferred tfms for individual islands.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','5013',2.0,-105.679,166.1,-37.322,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az C',0); INSERT INTO "usage" VALUES('EPSG','9168','helmert_transformation','EPSG','5027','EPSG','1301','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','5028','Azores Central 1995 to PTRA08 (2)','Derived at 24 points in May 2009. Residuals at 37 test points within 0.1m horizontal and 0.3m vertical. Info source also provides a Position Vector tfm of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','5013',0.5,-105.377,165.769,-36.965,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az Faial',0); INSERT INTO "usage" VALUES('EPSG','9169','helmert_transformation','EPSG','5028','EPSG','2873','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','5029','Azores Central 1995 to PTRA08 (3)','Derived at 11 points in May 2009. Residuals at 15 test points within 0.1m horizontal and 0.2m vertical. Info source also provides a Position Vector tfm of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','5013',0.2,-105.359,165.804,-37.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az Graciosa',0); INSERT INTO "usage" VALUES('EPSG','9170','helmert_transformation','EPSG','5029','EPSG','3681','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','5030','Azores Central 1995 to PTRA08 (4)','Derived at 34 points in May 2009. Residuals at 38 test points within 0.2m horizontal and 1m vertical. Info source also provides a Position Vector tfm of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','5013',1.0,-105.531,166.39,-37.326,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az Pico',0); INSERT INTO "usage" VALUES('EPSG','9171','helmert_transformation','EPSG','5030','EPSG','2874','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5031','Azores Central 1995 to PTRA08 (5)','Derived at 17 points in May 2009. Residuals at 60 test points within 0.1m horizontal and 0.8m vertical. Info source also provides a Position Vector tfm of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','5013',0.8,-105.756,165.972,-37.313,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az S.Jorge',0); INSERT INTO "usage" VALUES('EPSG','9172','helmert_transformation','EPSG','5031','EPSG','2875','EPSG','1038'); INSERT INTO "helmert_transformation" VALUES('EPSG','5032','Azores Central 1995 to PTRA08 (6)','Derived at 26 points in May 2009. Residuals at 34 test points within 0.1m horizontal and 0.6m vertical. Info source also provides a Position Vector tfm of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4665','EPSG','5013',0.6,-106.235,166.236,-37.768,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az Terceira',0); INSERT INTO "usage" VALUES('EPSG','9173','helmert_transformation','EPSG','5032','EPSG','2872','EPSG','1036'); INSERT INTO "helmert_transformation" VALUES('EPSG','5033','Azores Occidental 1939 to PTRA08 (1)','Derived at 21 points in May 2009. Residuals at 18 test points within 0.1m horizontal and 0.2m vertical. Info source also provides a Position Vector tfm of similar accuracy. See codes 5034-35 for preferred tfms for islands of Flores and Corvo.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4182','EPSG','5013',0.5,-423.058,-172.868,83.772,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az W',0); INSERT INTO "usage" VALUES('EPSG','9174','helmert_transformation','EPSG','5033','EPSG','1344','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','5034','Azores Occidental 1939 to PTRA08 (2)','Derived at 18 points in May 2009. Residuals at 15 test points within 0.1m horizontal and 0.2m vertical. Info source also provides a Position Vector tfm of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4182','EPSG','5013',0.2,-423.053,-172.871,83.771,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az Flores',0); INSERT INTO "usage" VALUES('EPSG','9175','helmert_transformation','EPSG','5034','EPSG','3684','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','5035','Azores Occidental 1939 to PTRA08 (3)','Derived at 3 points in May 2009. Residuals at these points within 0.1m horizontal and 0.3m vertical. Info source also provides a Position Vector tfm of similar accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4182','EPSG','5013',0.3,-423.024,-172.923,83.83,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt Az Corvo',0); INSERT INTO "usage" VALUES('EPSG','9176','helmert_transformation','EPSG','5035','EPSG','3685','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','5036','Datum 73 to ETRS89 (4)','Derived in July 2009 from 119 common stations. Residuals at 833 test points under 3m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4274','EPSG','4258',3.0,-223.15,110.132,36.711,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 2009 3m',0); INSERT INTO "usage" VALUES('EPSG','9177','helmert_transformation','EPSG','5036','EPSG','1294','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','5037','Datum 73 to ETRS89 (5)','Derived in July 2009 from 119 common stations. Residuals at 833 test points under 2m. Replaces Datum 73 to ETRS89 (3) (tfm code 1992).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4274','EPSG','4258',2.0,-230.994,102.591,25.199,'EPSG','9001',0.633,-0.239,0.9,'EPSG','9104',1.95,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 2009 2m',0); INSERT INTO "usage" VALUES('EPSG','9178','helmert_transformation','EPSG','5037','EPSG','1294','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','5038','Lisbon to ETRS89 (3)','Derived in July 2009 from 119 common stations. Average residual at 833 test points 2.5m, maximum 7m. Info source also gives a Position Vector tfm which is of similar accuracy. Replaces Lisbon to ETRS89 (2) (tfm code 1997).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4207','EPSG','4258',2.5,-303.861,-60.693,103.607,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 2009 7m',0); INSERT INTO "usage" VALUES('EPSG','9179','helmert_transformation','EPSG','5038','EPSG','1294','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','5039','Lisbon 1890 to ETRS89 (1)','Parameter values taken from Lisbon 1890 to WGS 84 (1) (tfm code 1986) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4666','EPSG','4258',5.0,508.088,-191.042,565.223,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 5m',0); INSERT INTO "usage" VALUES('EPSG','9180','helmert_transformation','EPSG','5039','EPSG','1294','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','5040','ED50 to ETRS89 (13)','Parameter values taken from ED50 to WGS 84 (33) (tfm code 1985) assuming that ETRS89 and WGS 84 are the same within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4258',5.0,-87.987,-108.639,-121.593,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt 5m',0); INSERT INTO "usage" VALUES('EPSG','9181','helmert_transformation','EPSG','5040','EPSG','1294','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','5043','Pulkovo 1995 to WGS 84 (2)','Derived through concatenation of Pulkovo 1995 to PZ-90.02 to WGS 84. Replaces Pulkovo 1995 to WGS 84 (1), tfm code 1281.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4200','EPSG','4326',1.0,24.47,-130.89,-81.56,'EPSG','9001',0.0,0.0,-0.13,'EPSG','9104',-0.22,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOST-Rus 2008',0); INSERT INTO "usage" VALUES('EPSG','9182','helmert_transformation','EPSG','5043','EPSG','1198','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5044','Pulkovo 1942 to WGS 84 (20)','Derived through concatenation of Pulkovo 1942 to PZ-90.02 to WGS 84. Replaces Pulkovo 1942 to WGS 84 (17) (code 1267).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4326',3.0,23.57,-140.95,-79.8,'EPSG','9001',0.0,-0.35,-0.79,'EPSG','9104',-0.22,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOST-Rus 2008',0); INSERT INTO "usage" VALUES('EPSG','9183','helmert_transformation','EPSG','5044','EPSG','3296','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','5050','Aratu to SIRGAS 2000 (1)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5051.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-157.84,308.54,-146.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BS 2002',0); INSERT INTO "usage" VALUES('EPSG','9188','helmert_transformation','EPSG','5050','EPSG','3700','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5051','Aratu to WGS 84 (13)','Parameters from Aratu to SIRGAS 2000 (1) (tfm code 5050) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area. Replaces tfm codes 15711 and 15734.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-157.84,308.54,-146.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BS 2002',0); INSERT INTO "usage" VALUES('EPSG','9189','helmert_transformation','EPSG','5051','EPSG','3700','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5052','Aratu to SIRGAS 2000 (2)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5053.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-160.31,314.82,-142.25,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BC 2002',0); INSERT INTO "usage" VALUES('EPSG','9190','helmert_transformation','EPSG','5052','EPSG','2963','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5053','Aratu to WGS 84 (14)','Parameters from Aratu to SIRGAS 2000 (2) (tfm code 5052) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area. Replaces tfm codes 15710 and 15754.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-160.31,314.82,-142.25,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BC 2002',0); INSERT INTO "usage" VALUES('EPSG','9191','helmert_transformation','EPSG','5053','EPSG','2963','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5054','Aratu to SIRGAS 2000 (3)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5055.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-161.11,310.25,-144.64,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra ES 2002',0); INSERT INTO "usage" VALUES('EPSG','9192','helmert_transformation','EPSG','5054','EPSG','2964','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5055','Aratu to WGS 84 (15)','Parameters from Aratu to SIRGAS 2000 (3) (tfm code 5054) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area. Replaces tfms 15712 and 15754.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-161.11,310.25,-144.64,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra ES 2002',0); INSERT INTO "usage" VALUES('EPSG','9193','helmert_transformation','EPSG','5055','EPSG','2964','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5056','Aratu to SIRGAS 2000 (4)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5057.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-160.4,302.29,-144.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BSUL 2002',0); INSERT INTO "usage" VALUES('EPSG','9194','helmert_transformation','EPSG','5056','EPSG','3699','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5057','Aratu to WGS 84 (16)','Parameters from Aratu to SIRGAS 2000 (4) (tfm code 5056) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-160.4,302.29,-144.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BSUL 2002',0); INSERT INTO "usage" VALUES('EPSG','9195','helmert_transformation','EPSG','5057','EPSG','3699','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5058','Aratu to SIRGAS 2000 (5)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5059.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-153.54,302.33,-152.37,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BREC 2002',0); INSERT INTO "usage" VALUES('EPSG','9196','helmert_transformation','EPSG','5058','EPSG','3692','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5059','Aratu to WGS 84 (17)','Parameters from Aratu to SIRGAS 2000 (5) (tfm code 5058) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-153.54,302.33,-152.37,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BREC 2002',0); INSERT INTO "usage" VALUES('EPSG','9197','helmert_transformation','EPSG','5059','EPSG','3692','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5060','Aratu to SIRGAS 2000 (6)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5061.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-151.5,300.09,-151.15,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BTUC 2002',0); INSERT INTO "usage" VALUES('EPSG','9198','helmert_transformation','EPSG','5060','EPSG','3693','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5061','Aratu to WGS 84 (18)','Parameters from Aratu to SIRGAS 2000 (6) (tfm code 5060) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area. Replaces tfms 1550-1552.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-151.5,300.09,-151.15,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BTUC 2002',0); INSERT INTO "usage" VALUES('EPSG','9199','helmert_transformation','EPSG','5061','EPSG','3693','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5062','Aratu to SIRGAS 2000 (7)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5063.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-156.8,298.41,-147.41,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra SEAL 2002',0); INSERT INTO "usage" VALUES('EPSG','9200','helmert_transformation','EPSG','5062','EPSG','3696','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5063','Aratu to WGS 84 (19)','Parameters from Aratu to SIRGAS 2000 (7) (tfm code 5062) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-156.8,298.41,-147.41,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra SEAL 2002',0); INSERT INTO "usage" VALUES('EPSG','9201','helmert_transformation','EPSG','5063','EPSG','3696','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5064','Aratu to SIRGAS 2000 (8)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5065.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-157.4,295.05,-150.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra PEPB 2002',0); INSERT INTO "usage" VALUES('EPSG','9202','helmert_transformation','EPSG','5064','EPSG','3697','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5065','Aratu to WGS 84 (20)','Parameters from Aratu to SIRGAS 2000 (8) (tfm code 5064) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation.Petrobras preferred parameters for all purposes in the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-157.4,295.05,-150.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra PEPB 2002',0); INSERT INTO "usage" VALUES('EPSG','9203','helmert_transformation','EPSG','5065','EPSG','3697','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5066','Aratu to SIRGAS 2000 (9)','Derived in 2002. Petrobras preferred transformation for all purposes in the area. May be used as transformation between Aratu and WGS 84 - see tfm code 5067.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4674',0.5,-151.99,287.04,-147.45,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra RNCE 2002',0); INSERT INTO "usage" VALUES('EPSG','9204','helmert_transformation','EPSG','5066','EPSG','3698','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5067','Aratu to WGS 84 (21)','Parameters from Aratu to SIRGAS 2000 (9) (tfm code 5066) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Petrobras preferred parameters for all purposes in the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',1.0,-151.99,287.04,-147.45,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra RNCE 2002',0); INSERT INTO "usage" VALUES('EPSG','9205','helmert_transformation','EPSG','5067','EPSG','3698','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5077','Karbala 1979 to IGRS (1)','Derived at 95 stations mostly south of Baghdad but including 3 in Kirkuk-Erbil area. Maximum residuals 0.3m. May be used as a tfm to WGS 84 - see tfm code 5078.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4743','EPSG','3889',0.3,70.995,-335.916,262.898,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MWR-Irq 2009',0); INSERT INTO "usage" VALUES('EPSG','9211','helmert_transformation','EPSG','5077','EPSG','3625','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','5078','Karbala 1979 to WGS 84 (2)','Parameter values from Karbala 1979 to IGRS (1) (tfm code 5077) assuming that IGRS is equivalent to WGS 84 within the accuracy of the transformation. Replaces Karbala 1979 to WGS 84 (1) (tfm code 15872).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4743','EPSG','4326',1.0,70.995,-335.916,262.898,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Irq 2009',0); INSERT INTO "usage" VALUES('EPSG','9212','helmert_transformation','EPSG','5078','EPSG','3625','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5189','Korean 1985 to KGD2002 (1)','For accuracies commensurate with mapping at 1/5000 scale. May be taken as approximate transformation Korean 1985 to WGS 84 - see code 5191.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4162','EPSG','4737',1.0,-145.907,505.034,685.756,'EPSG','9001',-1.162,2.347,1.592,'EPSG','9104',6.342,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-3159521.31,4068151.32,3748113.85,'EPSG','9001','NGII-Kor',0); INSERT INTO "usage" VALUES('EPSG','9274','helmert_transformation','EPSG','5189','EPSG','3266','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5191','Korean 1985 to WGS 84 (1)','Parameter values from Korean 1985 to KGD2002 (1) (code 5189). Assumes KGD2002 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4162','EPSG','4326',1.0,-145.907,505.034,685.756,'EPSG','9001',-1.162,2.347,1.592,'EPSG','9104',6.342,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-3159521.31,4068151.32,3748113.85,'EPSG','9001','OGP-Kor',0); INSERT INTO "usage" VALUES('EPSG','9276','helmert_transformation','EPSG','5191','EPSG','3266','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5194','VN-2000 to WGS 84 (1)','Used by Total in Mekong delta.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4756','EPSG','4326',1.0,-192.873,-39.382,-111.202,'EPSG','9001',0.00205,0.0005,-0.00335,'EPSG','9104',0.0188,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HCMCTU-Vnm',0); INSERT INTO "usage" VALUES('EPSG','9278','helmert_transformation','EPSG','5194','EPSG','3770','EPSG','1065'); INSERT INTO "helmert_transformation" VALUES('EPSG','5226','S-JTSK/05 to ETRS89 (1)','Derived from the relationship between the R05 realisation of ETRS89 and the astrogeodetic S-JTSK network. Improves CT code 1622. S-JTSK/05 is a scientific working system, S-JTSK the legal system. May be taken as approx. CT S-JTSK to WGS 84 (code 5227).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5228','EPSG','4258',0.0,572.213,85.334,461.94,'EPSG','9001',-4.9732,-1.529,-5.2484,'EPSG','9104',3.5378,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CUZK-Cze 05',0); INSERT INTO "usage" VALUES('EPSG','9304','helmert_transformation','EPSG','5226','EPSG','1079','EPSG','1114'); INSERT INTO "helmert_transformation" VALUES('EPSG','5227','S-JTSK/05 to WGS 84 (1)','Parameter values from S-JTSK/05 to ETRS89 (1) (code 5226). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaces tfm code 1622.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5228','EPSG','4326',1.0,572.213,85.334,461.94,'EPSG','9001',-4.9732,-1.529,-5.2484,'EPSG','9104',3.5378,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cze 05',0); INSERT INTO "usage" VALUES('EPSG','9305','helmert_transformation','EPSG','5227','EPSG','1079','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5236','SLD99 to WGS 84 (1)','Derived at 58 stations.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5233','EPSG','4326',14.0,-0.293,766.95,87.713,'EPSG','9001',-0.195704,-1.695068,-3.473016,'EPSG','9104',-0.039338,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSU-Lka',0); INSERT INTO "usage" VALUES('EPSG','9309','helmert_transformation','EPSG','5236','EPSG','3310','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','5239','S-JTSK to WGS 84 (5)','Parameter values from S-JTSK/05 to WGS 84 (1) (code 5227). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaces tfm code 1622.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4156','EPSG','4326',1.0,572.213,85.334,461.94,'EPSG','9001',-4.9732,-1.529,-5.2484,'EPSG','9104',3.5378,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cze 05',0); INSERT INTO "usage" VALUES('EPSG','9311','helmert_transformation','EPSG','5239','EPSG','1079','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5248','Timbalai 1948 to GDBD2009 (1)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4298','EPSG','4326',1.0,-689.5937,623.84046,-65.93566,'EPSG','9001',0.02331,-1.17094,0.80054,'EPSG','9104',5.88536,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Brn',1); INSERT INTO "usage" VALUES('EPSG','9315','helmert_transformation','EPSG','5248','EPSG','1055','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5249','Timbalai 1948 to WGS 84 (5)','Parameter values taken from Timbalai 1948 to GDBD2009 (1) (code 5878) assuming that GDBD2009 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4298','EPSG','4326',1.0,-689.5937,623.84046,-65.93566,'EPSG','9001',0.02331,-1.17094,0.80054,'EPSG','9104',5.88536,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Brn',0); INSERT INTO "usage" VALUES('EPSG','9316','helmert_transformation','EPSG','5249','EPSG','1055','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5260','TUREF to ETRS89 (1)','Note: the ETRS89 CRS is not used in Turkey.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','5252','EPSG','4258',0.1,0.023,0.036,-0.068,'EPSG','9001',0.00176,0.00912,-0.01136,'EPSG','9104',0.00439,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GCM-Tur',0); INSERT INTO "usage" VALUES('EPSG','9317','helmert_transformation','EPSG','5260','EPSG','1237','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','5261','TUREF to WGS 84 (1)','Approximation at the +/- 1m level assuming that TUREF is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5252','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Tur',0); INSERT INTO "usage" VALUES('EPSG','9318','helmert_transformation','EPSG','5261','EPSG','1237','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5267','DRUKREF 03 to WGS 84 (1)','DRUKREF 03 and WGS 84 are both realisations of ITRS.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5264','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Btn',0); INSERT INTO "usage" VALUES('EPSG','9320','helmert_transformation','EPSG','5267','EPSG','1048','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5327','ISN2004 to WGS 84 (1)','For many purposes ISN2004 can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5324','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Isl',0); INSERT INTO "usage" VALUES('EPSG','9344','helmert_transformation','EPSG','5327','EPSG','1120','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5333','ITRF2005 to ITRF2008 (1)','At epoch 2005.0. Rates dX=-0.0003 m/yr, dy=dz=0.000 m/yr, rX=rY=rZ=0.0"/yr, dS=0.0000 ppm/yr.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4896','EPSG','5332',0.0,0.0005,0.0009,0.0047,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.00094,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','9346','helmert_transformation','EPSG','5333','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','5350','Campo Inchauspe to POSGAR 2007 (1)','Adopted from U.S. Defense Mapping Agency values for Campo Inchauspe to WGS 84 (tfm code 1127) assuming that POSGAR 2007 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4221','EPSG','5340',5.0,-148.0,136.0,90.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Arg',0); INSERT INTO "usage" VALUES('EPSG','9351','helmert_transformation','EPSG','5350','EPSG','3215','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','5351','POSGAR 2007 to WGS 84 (1)','Approximation at the +/- 1m level assuming that POSGAR 2007 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5340','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Arg',0); INSERT INTO "usage" VALUES('EPSG','9352','helmert_transformation','EPSG','5351','EPSG','1033','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5374','MARGEN to WGS 84 (1)','Approximation at the +/- 1m level assuming that MARGEN is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5354','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bol',0); INSERT INTO "usage" VALUES('EPSG','9354','helmert_transformation','EPSG','5374','EPSG','1049','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5375','SIRGAS-Chile to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9184','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Chl',1); INSERT INTO "usage" VALUES('EPSG','9355','helmert_transformation','EPSG','5375','EPSG','1066','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5376','CR05 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5365','EPSG','4326',1.5,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cri',0); INSERT INTO "usage" VALUES('EPSG','9356','helmert_transformation','EPSG','5376','EPSG','1074','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5377','MACARIO SOLIS to WGS 84 (1)','Approximation at the +/- 1m level assuming that MACARIO SOLIS is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5371','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Pan',0); INSERT INTO "usage" VALUES('EPSG','9357','helmert_transformation','EPSG','5377','EPSG','1186','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5378','Peru96 to WGS 84 (1)','Approximation at the +/- 1m level assuming that Peru96 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5373','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Per',0); INSERT INTO "usage" VALUES('EPSG','9358','helmert_transformation','EPSG','5378','EPSG','1189','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5384','SIRGAS-ROU98 to WGS 84 (1)','Approximation at the +/- 1m level assuming that SIRGAS-ROU98 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5381','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ury',0); INSERT INTO "usage" VALUES('EPSG','9359','helmert_transformation','EPSG','5384','EPSG','1247','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5385','Yacare to SIRGAS-ROU98 (1)','Derived at 11 stations during 1998 densification of Uruguay control based on SIRGAS 1995. Accuracy at stations used for derivation: 0.13 to 1.17m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4309','EPSG','5381',1.5,-124.45,183.74,44.64,'EPSG','9001',-0.4384,0.5446,-0.9706,'EPSG','9104',-2.1365,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SGM-Ury',0); INSERT INTO "usage" VALUES('EPSG','9360','helmert_transformation','EPSG','5385','EPSG','3326','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5386','Yacare to WGS 84 (2)','Derived at 11 stations during 1998 densification of Uruguay control based on SIRGAS 1995. Accuracy at stations used for derivation: 0.13 to 1.17m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4309','EPSG','4326',1.5,-124.45,183.74,44.64,'EPSG','9001',-0.4384,0.5446,-0.9706,'EPSG','9104',-2.1365,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SGM-Ury',0); INSERT INTO "usage" VALUES('EPSG','9361','helmert_transformation','EPSG','5386','EPSG','3326','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5395','SIRGAS_ES2007.8 to WGS 84 (1)','Approximation at the +/- 1m level assuming that SIRGAS_ES2007.8 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5393','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Slv',0); INSERT INTO "usage" VALUES('EPSG','9364','helmert_transformation','EPSG','5395','EPSG','1087','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5470','Ocotepeque 1935 to WGS 84 (1)','Parameter values taken from Ocotepeque to CR05 (1) (tfm code 6890) assuming that CR05 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5451','EPSG','4326',8.0,213.11,9.37,-74.95,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri',0); INSERT INTO "usage" VALUES('EPSG','9425','helmert_transformation','EPSG','5470','EPSG','3232','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5473','Ocotepeque 1935 to WGS 84 (2)','Rotations in original source given in radians are equivalent to Rx = 2.35", Ry = -0.06", Rz = 6.39".','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5451','EPSG','4326',5.0,213.116,9.358,-74.946,'EPSG','9001',1.14e-05,-2.98e-07,3.1e-05,'EPSG','9101',-5.22,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UNA-Cri',1); INSERT INTO "usage" VALUES('EPSG','9427','helmert_transformation','EPSG','5473','EPSG','3232','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','5474','Ocotepeque 1935 to NAD27 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5451','EPSG','4326',9.0,205.435,-29.099,292.202,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cri',1); INSERT INTO "usage" VALUES('EPSG','9428','helmert_transformation','EPSG','5474','EPSG','3876','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','5483','LUREF to ETRS89 (4)','LUREF 2006 parameters. For an equivalent CT using the Coordinate Frame method see CT 5485. Defines LUREF between 2006 and 2014. Replaces LUREF 1994 parameters (CT 1078). May be taken as approximate transformation LUREF to WGS 84 - see CT code 5484.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.0,-265.8867,76.9851,20.2667,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3943,440486.4235,4846923.4558,'EPSG','9001','ACT-Lux MB 2011',0); INSERT INTO "usage" VALUES('EPSG','9433','helmert_transformation','EPSG','5483','EPSG','1146','EPSG','1281'); INSERT INTO "helmert_transformation" VALUES('EPSG','5484','LUREF to WGS 84 (4)','Parameter values from LUREF to ETRS89 (4) (code 5483) assuming ETRS89 and WGS 84 are coincident within the one metre level. Replaces CT code 1079. For an equivalent transformation using the Coordinate Frame method see code 5486.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4326',1.0,-265.8867,76.9851,20.2667,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3943,440486.4235,4846923.4558,'EPSG','9001','OGP-Lux MB 2011',0); INSERT INTO "usage" VALUES('EPSG','9434','helmert_transformation','EPSG','5484','EPSG','1146','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5485','LUREF to ETRS89 (3)','LUREF 2006 parameters. For an equivalent CT using the Molodensky-Badekas method see code 5483. Defines LUREF between 2006 and 2014. Replaces LUREF to ETRS89 (1) (CT 1642). May be taken as approximate transformation LUREF to WGS 84 - see CT code 5486.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4258',0.0,-189.6806,18.3463,-42.7695,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux CF 2011',0); INSERT INTO "usage" VALUES('EPSG','9435','helmert_transformation','EPSG','5485','EPSG','1146','EPSG','1281'); INSERT INTO "helmert_transformation" VALUES('EPSG','5486','LUREF to WGS 84 (3)','Parameter values from LUREF to ETRS89 (3) (code 5485) assuming ETRS89 and WGS 84 are coincident within the one metre level. Replaces CT code 1643. For an equivalent transformation using the Molodensky-Badekas method see code 5484.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4326',1.0,-189.6806,18.3463,-42.7695,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Lux CF 2011',0); INSERT INTO "usage" VALUES('EPSG','9436','helmert_transformation','EPSG','5486','EPSG','1146','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5491','Martinique 1938 to RGAF09 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4625','EPSG','5489',0.1,127.744,547.069,118.359,'EPSG','9001',-3.1116,4.9509,-0.8837,'EPSG','9104',14.1012,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Mtq',0); INSERT INTO "usage" VALUES('EPSG','9437','helmert_transformation','EPSG','5491','EPSG','3276','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','5492','Guadeloupe 1948 to RGAF09 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4622','EPSG','5489',10.0,-471.06,-3.212,-305.843,'EPSG','9001',0.4752,-0.9978,0.2068,'EPSG','9104',2.1353,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp',0); INSERT INTO "usage" VALUES('EPSG','9438','helmert_transformation','EPSG','5492','EPSG','2829','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','5493','Fort Marigot to RGAF09 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4621','EPSG','5489',10.0,151.613,253.832,-429.084,'EPSG','9001',-0.0506,0.0958,-0.5974,'EPSG','9104',-0.3971,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp',0); INSERT INTO "usage" VALUES('EPSG','9439','helmert_transformation','EPSG','5493','EPSG','2828','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','5494','RRAF 1991 to RGAF09 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4558','EPSG','5489',0.1,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.0239,'EPSG','9104',0.2829,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp',0); INSERT INTO "usage" VALUES('EPSG','9440','helmert_transformation','EPSG','5494','EPSG','1156','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','5495','RRAF 1991 to RGAF09 (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4558','EPSG','5489',0.1,1.2239,2.4156,-1.7598,'EPSG','9001',0.038,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp GT',0); INSERT INTO "usage" VALUES('EPSG','9441','helmert_transformation','EPSG','5495','EPSG','2829','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','5496','RRAF 1991 to RGAF09 (3)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4558','EPSG','5489',0.1,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp SM',0); INSERT INTO "usage" VALUES('EPSG','9442','helmert_transformation','EPSG','5496','EPSG','2828','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','5497','POSGAR 2007 to SIRGAS 2000 (1)','Agreement at the decimeter level.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5340','EPSG','4674',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Arg',0); INSERT INTO "usage" VALUES('EPSG','9443','helmert_transformation','EPSG','5497','EPSG','1033','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','5501','RGAF09 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGAF09 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5489','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-FrAnt',0); INSERT INTO "usage" VALUES('EPSG','9444','helmert_transformation','EPSG','5501','EPSG','2824','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5521','Grand Comoros to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4646','EPSG','4326',999.0,-963.0,510.0,-359.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHOM-Com',0); INSERT INTO "usage" VALUES('EPSG','9457','helmert_transformation','EPSG','5521','EPSG','2807','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','5553','PNG94 to WGS 84 (1)','Exact in 1994 but due to significant and variable tectonic activity in PNG, in 2011 PNG94 and WGS 84 differ generally by 2m but in areas of significant tectonic activity differences can exceed 9m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5546','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-PNG',0); INSERT INTO "usage" VALUES('EPSG','9470','helmert_transformation','EPSG','5553','EPSG','1187','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5584','MOLDREF99 to ETRS89 (1)','MOLDREF is a densification of ETRS89 in Moldova.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4023','EPSG','4258',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mda',0); INSERT INTO "usage" VALUES('EPSG','9472','helmert_transformation','EPSG','5584','EPSG','1162','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','5585','MOLDREF99 to WGS 84 (1)','Parameter values from MOLDREF99 to ETRS89 (1) (code 5584). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4023','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mda',0); INSERT INTO "usage" VALUES('EPSG','9473','helmert_transformation','EPSG','5585','EPSG','1162','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5586','Pulkovo 1942 to UCS-2000 (1)','UCS-2000 is defined to be approximately consistent with Pulkovo 1942 and this transformation''s accuracy is due to deformation of the Pulkovo system across Ukranian territory.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','5561',3.5,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr',0); INSERT INTO "usage" VALUES('EPSG','9474','helmert_transformation','EPSG','5586','EPSG','1242','EPSG','1044'); INSERT INTO "helmert_transformation" VALUES('EPSG','5590','UCS-2000 to WGS 84 (1)','Derived through concatenation of UCS-2000 to S-42 (1) (tfm code 5586 reversed) [an approximation] and S-42 to WGS 84 (16) (tfm code 15865) [derived for whole FSU rather than Ukraine]. Replaced by UCS-2000 to WGS 84 (2) (tfm code 5840).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5561','EPSG','4326',5.0,25.0,-141.0,-78.5,'EPSG','9001',0.0,-0.35,-0.736,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr',0); INSERT INTO "usage" VALUES('EPSG','9476','helmert_transformation','EPSG','5590','EPSG','1242','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','5599','FEH2010 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5593','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Dnk-Deu Feh',0); INSERT INTO "usage" VALUES('EPSG','9479','helmert_transformation','EPSG','5599','EPSG','3889','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5622','OSGB36 to WGS 84 (8)','Derived by CGG for 1994 3D seismic survey.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4277','EPSG','4326',3.0,370.936,-108.938,435.682,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bp-Gbr WytchF',0); INSERT INTO "usage" VALUES('EPSG','9480','helmert_transformation','EPSG','5622','EPSG','3893','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5630','Nord Sahara 1959 to WGS 84 (8)','Derived at 1 station (L38). May be taken as a transformation to RGSH2020 - see CT 10343.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4326',5.0,-168.52,-72.05,304.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Dza Ahnet',0); INSERT INTO "usage" VALUES('EPSG','9482','helmert_transformation','EPSG','5630','EPSG','3917','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5660','Nord Sahara 1959 to WGS 84 (9)','Derived in 2006 at 45 points in north and central Algeria. Accuracy at 75 common points better than 1m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4307','EPSG','4326',1.0,-209.3622,-87.8162,404.6198,'EPSG','9001',0.0046,3.4784,0.5805,'EPSG','9104',-1.4547,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'INCT-Dza',0); INSERT INTO "usage" VALUES('EPSG','9491','helmert_transformation','EPSG','5660','EPSG','1026','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5662','AGD66 to PNG94 (1)','Derived at 25 stations in 2007. Accuracy 2m in 2007. Replaced by AGD66 to PNG94 (4) (code 6939).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','5546',2.0,-124.0,-60.0,153.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png PFTB 2007',0); INSERT INTO "usage" VALUES('EPSG','9493','helmert_transformation','EPSG','5662','EPSG','4013','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5822','UCS-2000 to ITRF2005 (1)','May be taken as approximate transformation UCS-2000 to WGS 84 - see code 5840.','EPSG','1031','Geocentric translations (geocentric domain)','EPSG','5558','EPSG','4896',1.0,24.0,-121.0,-76.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SSGC-Ukr',1); INSERT INTO "usage" VALUES('EPSG','9506','helmert_transformation','EPSG','5822','EPSG','1242','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','5823','Ukraine 2000 to WGS 84 (1)','Parameter values taken from Ukraine 2000 to ITRF2005 (1) (code 5822) assuming that ITRS2005 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5561','EPSG','4326',1.0,24.0,-121.0,-76.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr',1); INSERT INTO "usage" VALUES('EPSG','9507','helmert_transformation','EPSG','5823','EPSG','1242','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5826','DB_REF to ETRS89 (1)','Defines DB_REF so considered errorless. Defined with parameter values for forward and reverse CTs with rotation and scale to greater resolution. The OGP truncated values and reversible formula have no impact on calculation results at the micron level.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5681','EPSG','4258',0.0,584.9636,107.7175,413.8067,'EPSG','9001',-1.1155,-0.2824,3.1384,'EPSG','9104',7.9922,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DB-Deu',0); INSERT INTO "usage" VALUES('EPSG','9509','helmert_transformation','EPSG','5826','EPSG','3339','EPSG','1141'); INSERT INTO "helmert_transformation" VALUES('EPSG','5827','AGD66 to GDA94 (19)','Replaces nationally-derived transformation code 1458.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',0.5,-129.164,-41.188,130.718,'EPSG','9001',-0.246,-0.374,-0.329,'EPSG','9104',-2.955,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PLA-ACT',0); INSERT INTO "usage" VALUES('EPSG','9510','helmert_transformation','EPSG','5827','EPSG','2283','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','5840','UCS-2000 to WGS 84 (2)','Rounded parameter values taken from UCS-2000 to ITRF2000 (1) (code 7817) assuming that WGS 84 is equivalent to ITRF2000 within the accuracy of the transformation. Replaces UCS-2000 to WGS 84 (1) (tfm code 5590).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5561','EPSG','4326',1.0,24.0,-121.0,-76.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr SSGC',0); INSERT INTO "usage" VALUES('EPSG','9512','helmert_transformation','EPSG','5840','EPSG','1242','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5841','AGD66 to WGS 84 (19)','Derived at 25 stations in 2007. Accuracy 2m in 2007. Due to significant tectonic activity in PNG, AGD66 and WGS 84 are separating by approximately 7cm per year.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326',2.0,-124.0,-60.0,154.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png PFTB 2007',0); INSERT INTO "usage" VALUES('EPSG','9513','helmert_transformation','EPSG','5841','EPSG','4013','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5878','Timbalai 1948 to GDBD2009 (1)','May be taken as approximate transformation Timbalai 1948 to WGS 84 - see code 5249.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4298','EPSG','5246',1.0,-689.5937,623.84046,-65.93566,'EPSG','9001',0.02331,-1.17094,0.80054,'EPSG','9104',5.88536,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Brn',0); INSERT INTO "usage" VALUES('EPSG','9515','helmert_transformation','EPSG','5878','EPSG','1055','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','5881','SAD69(96) to SIRGAS 2000 (2)','Parameter values from SAD69 to SIRGAS 2000 (1) (tfm code 15485) assuming that SAD69 and SAD69(96) are equal within the accuracy of the transformation. Used by Petrobras and ANP throughout Brazil from 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5527','EPSG','4674',5.0,-67.35,3.88,-38.22,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IBGE-Bra 5m 1994',0); INSERT INTO "usage" VALUES('EPSG','9516','helmert_transformation','EPSG','5881','EPSG','1053','EPSG','1257'); INSERT INTO "helmert_transformation" VALUES('EPSG','5882','SAD69 to WGS 84 (16)','Parameter values taken from SAD69 to SIRGAS 2000 (1) (tfm code 15485) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Used by ANP and Petrobras throughout Brazil from 1994, replacing use of tfm code 1877.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',5.0,-67.35,3.88,-38.22,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra 5m 1994',0); INSERT INTO "usage" VALUES('EPSG','9517','helmert_transformation','EPSG','5882','EPSG','1053','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','5888','Combani 1950 to RGM04 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4632','EPSG','4470',0.3,-599.928,-275.552,-195.665,'EPSG','9001',-0.0835,-0.4715,0.0602,'EPSG','9104',49.2814,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Myt',0); INSERT INTO "usage" VALUES('EPSG','9519','helmert_transformation','EPSG','5888','EPSG','3340','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','5900','ITRF2005 to ETRF2005 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','8397',0.0,56.0,48.0,-37.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.054,0.518,-0.781,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','9528','helmert_transformation','EPSG','5900','EPSG','1298','EPSG','1128'); INSERT INTO "helmert_transformation" VALUES('EPSG','6136','GCGD59 to CIGD11 (1)','May be taken as approximate transformation GCGD61 to WGS 84 - see code 6142.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4723','EPSG','6135',0.3,-179.483,-69.379,-27.584,'EPSG','9001',7.862,-8.163,-6.042,'EPSG','9104',-13.925,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','9626','helmert_transformation','EPSG','6136','EPSG','3185','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','6137','SIGD61 to CIGD11 (1)','May be taken as approximate transformation SIGD61 to WGS 84 - see code 6143.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4726','EPSG','6135',0.15,8.853,-52.644,180.304,'EPSG','9001',0.393,2.323,-2.96,'EPSG','9104',-24.081,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LSD-Cym',0); INSERT INTO "usage" VALUES('EPSG','9627','helmert_transformation','EPSG','6137','EPSG','3186','EPSG','1078'); INSERT INTO "helmert_transformation" VALUES('EPSG','6142','GCGD59 to WGS 84 (2)','Parameter values are taken from GCGD59 to CIGD11 (1) (code 6136) assuming that CIGD11 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4723','EPSG','4326',1.0,-179.483,-69.379,-27.584,'EPSG','9001',7.862,-8.163,-6.042,'EPSG','9104',-13.925,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cym',0); INSERT INTO "usage" VALUES('EPSG','9631','helmert_transformation','EPSG','6142','EPSG','3185','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6143','SIGD61 to WGS 84 (3)','Parameter values are taken from SIGD59 to CIGD11 (1) (code 6137) assuming that CIGD11 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4726','EPSG','4326',1.0,8.853,-52.644,180.304,'EPSG','9001',0.393,2.323,-2.96,'EPSG','9104',-24.081,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cym',0); INSERT INTO "usage" VALUES('EPSG','9632','helmert_transformation','EPSG','6143','EPSG','3186','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6177','CIGD11 to WGS 84 (1)','Approximation at the +/- 1m level assuming that CIGD11 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6135','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cym',0); INSERT INTO "usage" VALUES('EPSG','9633','helmert_transformation','EPSG','6177','EPSG','1063','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6191','Corrego Alegre 1970-72 to SAD69 (1)','Derived by Brazilian Institute of Geography and Statistics (IBGE) in 1983 at Chua origin point.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4225','EPSG','4618',5.0,-138.7,164.4,34.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGBE-Bra',0); INSERT INTO "usage" VALUES('EPSG','9636','helmert_transformation','EPSG','6191','EPSG','1293','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6192','Corrego Alegre 1970-72 to WGS 84 (3)','Formed by concatenation of tfms codes 6191 and 1877. Used by Petrobras and ANP until February 2005 when replaced by Corrego Alegre 1970-72 to WGS 84 (4) (tfm code 6194).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4225','EPSG','4326',5.0,-205.57,168.77,-4.12,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PBS-Bra 1983',0); INSERT INTO "usage" VALUES('EPSG','9637','helmert_transformation','EPSG','6192','EPSG','1293','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6193','Corrego Alegre 1970-72 to SIRGAS 2000 (2)','Formed by concatenation of tfms codes 6191 and 15485. May be used as transformation between Corrego Alegre 1970-72 and WGS 84 - see tfm code 6194. Used by Petrobras and ANP from February 2005.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4225','EPSG','4674',5.0,-206.05,168.28,-3.82,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PBS-Bra 2005',0); INSERT INTO "usage" VALUES('EPSG','9638','helmert_transformation','EPSG','6193','EPSG','1293','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6194','Corrego Alegre 1970-72 to WGS 84 (4)','Parameter values from Corrego Alegre to SIRGAS 2000 (2) (tfm code 6193) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation. Used by ANP and Petrobras from February 2005, replacing use of tfm code 6192.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4225','EPSG','4326',5.0,-206.05,168.28,-3.82,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PBS-Bra 2005',0); INSERT INTO "usage" VALUES('EPSG','9639','helmert_transformation','EPSG','6194','EPSG','1293','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6195','SAD69(96) to WGS 84 (2)','Parameter values from SAD69(96) to SIRGAS 2000 (2)) (tfm code 5881) assuming that SIRGAS 2000 and WGS 84 are equal within the accuracy of the transformation, based on SAD69 to SIRGAS 2000 (1)) (tfm code 15485). Used by Petrobras and ANP from 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5527','EPSG','4326',5.0,-67.35,3.88,-38.22,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bra 5m 1994',0); INSERT INTO "usage" VALUES('EPSG','9640','helmert_transformation','EPSG','6195','EPSG','1053','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6196','Minna to WGS 84 (16)','Used by Addax for OPL 118 and OML 124. Derived in 1999 at 4 stations during extension into OPL 118 of control in Chevron block OML 53.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',5.0,-93.179,-87.124,114.338,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ADX-Nga OPL 118',0); INSERT INTO "usage" VALUES('EPSG','9641','helmert_transformation','EPSG','6196','EPSG','4127','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','6205','MGI 1901 to ETRS89 (5)','Derived at 31 stations in July 2010. Residuals generally less than +/- 0.7m horizontally.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4258',1.0,517.4399,228.7318,579.7954,'EPSG','9001',-4.045,-4.304,15.612,'EPSG','9104',-8.312,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KAT-Mkd',0); INSERT INTO "usage" VALUES('EPSG','9646','helmert_transformation','EPSG','6205','EPSG','1148','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','6206','MGI 1901 to WGS 84 (10)','Derived at 13 stations. Residuals generally less than +/- 1m horizontally and vertically.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326',2.0,521.748,229.489,590.921,'EPSG','9001',-4.029,-4.488,15.521,'EPSG','9104',-9.78,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Kat-Mkd',0); INSERT INTO "usage" VALUES('EPSG','9647','helmert_transformation','EPSG','6206','EPSG','1148','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','6208','Nepal 1981 to WGS 84 (1)','Derived at 11 points. Accuracy 0.26m (1-sigma).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6207','EPSG','4326',0.3,293.17,726.18,245.36,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Npl',0); INSERT INTO "usage" VALUES('EPSG','9648','helmert_transformation','EPSG','6208','EPSG','1171','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','6276','ITRF2008 to GDA94 (1)','RMS residuals 5mm north, 8mm east and 28mm vertical, maximum residuals 10mm north, 13mm east and 51mm vertical. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','4938',0.03,-84.68,-19.42,32.01,'EPSG','1025',-0.4254,2.2578,2.4015,'EPSG','1031',9.71,'EPSG','1028',1.42,1.34,0.9,'EPSG','1027',1.5461,1.182,1.1551,'EPSG','1032',0.109,'EPSG','1030',1994.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2010',0); INSERT INTO "usage" VALUES('EPSG','9682','helmert_transformation','EPSG','6276','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6277','ITRF2005 to GDA94 (1)','RMS residuals 4mm north, 8mm east and 30mm vertical, maximum residuals 10mm north, 17 mm east and 61mm vertical. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4896','EPSG','4938',0.03,-79.73,-6.86,38.03,'EPSG','1025',-0.0351,2.1211,2.1411,'EPSG','1031',6.636,'EPSG','1028',2.25,-0.62,-0.56,'EPSG','1027',1.4707,1.1443,1.1701,'EPSG','1032',0.294,'EPSG','1030',1994.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2010',0); INSERT INTO "usage" VALUES('EPSG','9683','helmert_transformation','EPSG','6277','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6278','ITRF2000 to GDA94 (2)','RMS residuals 3mm N, 8mm E and 55mm up, maximum residuals 5mm N, 13mm E and 84mm up. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Replaces 2001 transformation by Dawson and Steed, tfm code 6315.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','4938',0.06,-45.91,-29.85,-20.37,'EPSG','1025',-1.6705,0.4594,1.9356,'EPSG','1031',7.07,'EPSG','1028',-4.66,3.55,11.24,'EPSG','1027',1.7454,1.4868,1.224,'EPSG','1032',0.249,'EPSG','1030',1994.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2010',0); INSERT INTO "usage" VALUES('EPSG','9684','helmert_transformation','EPSG','6278','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6279','ITRF97 to GDA94 (2)','RMS residuals 26mm N, 12mm E and 179mm up, maximum residuals 49mm N, 24mm E and 464mm up. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Replaces 2001 transformation by Dawson and Steed, tfm code 6392.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4918','EPSG','4938',0.18,-14.63,-27.62,-25.32,'EPSG','1025',-1.7893,-0.6047,0.9962,'EPSG','1031',6.695,'EPSG','1028',-8.6,0.36,11.25,'EPSG','1027',1.6394,1.5198,1.3801,'EPSG','1032',0.007,'EPSG','1030',1994.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2010',0); INSERT INTO "usage" VALUES('EPSG','9685','helmert_transformation','EPSG','6279','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6280','ITRF96 to GDA94 (2)','RMS residuals 22mm N, 56mm E and 90mm up, maximum residuals 49mm N, 126mm E and 193mm up. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Replaces 2001 transformation by Dawson and Steed, code 6313.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4917','EPSG','4938',0.11,24.54,-36.43,-68.12,'EPSG','1025',-2.7359,-2.0431,0.3731,'EPSG','1031',6.901,'EPSG','1028',-21.8,4.71,26.27,'EPSG','1027',2.0203,2.1735,1.629,'EPSG','1032',0.388,'EPSG','1030',1994.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2010',0); INSERT INTO "usage" VALUES('EPSG','9686','helmert_transformation','EPSG','6280','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6281','ITRF88 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4910','EPSG','4919',0.01,-2.47,-1.15,9.79,'EPSG','1033',-0.1,0.0,0.18,'EPSG','1031',-8.95,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9687','helmert_transformation','EPSG','6281','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6282','ITRF89 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','4919',0.01,-2.97,-4.75,7.39,'EPSG','1033',0.0,0.0,0.18,'EPSG','1031',-5.85,'EPSG','1028',0.0,0.6,-3.2,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',1); INSERT INTO "usage" VALUES('EPSG','9688','helmert_transformation','EPSG','6282','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6283','ITRF90 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','4919',0.01,-2.47,-2.35,3.59,'EPSG','1033',0.0,0.0,0.18,'EPSG','1031',-2.45,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9689','helmert_transformation','EPSG','6283','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6284','ITRF91 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','4919',0.01,-2.67,-2.75,1.99,'EPSG','1033',0.0,0.0,0.18,'EPSG','1031',-2.15,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9690','helmert_transformation','EPSG','6284','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6285','ITRF92 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','4919',0.01,-1.47,-1.35,1.39,'EPSG','1033',0.0,0.0,0.18,'EPSG','1031',-0.75,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9691','helmert_transformation','EPSG','6285','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6286','ITRF93 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','4919',0.01,-1.27,-0.65,2.09,'EPSG','1033',0.39,-0.8,1.14,'EPSG','1031',-1.95,'EPSG','1028',0.29,0.02,0.06,'EPSG','1034',0.11,0.19,-0.07,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9692','helmert_transformation','EPSG','6286','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6287','ITRF94 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','4919',0.01,-0.67,-0.61,1.85,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-1.55,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9693','helmert_transformation','EPSG','6287','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6288','ITRF96 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','4919',0.01,-0.67,-0.61,1.85,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-1.55,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9694','helmert_transformation','EPSG','6288','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6289','ITRF97 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','4919',0.01,-0.67,-0.61,1.85,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-1.55,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9695','helmert_transformation','EPSG','6289','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6290','ITRF2000 to ITRF2005 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','4896',0.01,-0.1,0.8,5.8,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.4,'EPSG','1028',0.2,-0.1,0.18,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.08,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',1); INSERT INTO "usage" VALUES('EPSG','9696','helmert_transformation','EPSG','6290','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6291','ITRF88 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4910','EPSG','5332',0.01,-22.8,-2.6,125.2,'EPSG','1025',-0.1,0.0,-0.06,'EPSG','1031',-10.41,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9697','helmert_transformation','EPSG','6291','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6292','ITRF89 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','5332',0.01,-27.8,-38.6,101.2,'EPSG','1025',0.0,0.0,-0.06,'EPSG','1031',-7.31,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9698','helmert_transformation','EPSG','6292','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6293','ITRF90 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','5332',0.01,-22.8,-14.6,63.2,'EPSG','1025',0.0,0.0,-0.06,'EPSG','1031',-3.91,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9699','helmert_transformation','EPSG','6293','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6294','ITRF91 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','5332',0.01,-24.8,-18.6,47.2,'EPSG','1025',0.0,0.0,-0.06,'EPSG','1031',-3.61,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9700','helmert_transformation','EPSG','6294','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6295','ITRF92 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','5332',0.01,-12.8,-4.6,41.2,'EPSG','1025',0.0,0.0,-0.06,'EPSG','1031',-2.21,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9701','helmert_transformation','EPSG','6295','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6296','ITRF93 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','5332',0.01,24.0,-2.4,38.6,'EPSG','1025',1.71,1.48,0.3,'EPSG','1031',-3.41,'EPSG','1028',2.8,0.1,2.4,'EPSG','1027',0.11,0.19,-0.07,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9702','helmert_transformation','EPSG','6296','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6297','ITRF94 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','5332',0.01,-4.8,-2.6,33.2,'EPSG','1025',0.0,0.0,-0.06,'EPSG','1031',-2.92,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9703','helmert_transformation','EPSG','6297','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6298','ITRF96 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','5332',0.01,-4.8,-2.6,33.2,'EPSG','1025',0.0,0.0,-0.06,'EPSG','1031',-2.92,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9704','helmert_transformation','EPSG','6298','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6299','ITRF97 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','5332',0.01,-4.8,-2.6,33.2,'EPSG','1025',0.0,0.0,-0.06,'EPSG','1031',-2.92,'EPSG','1028',-0.1,0.5,3.2,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.09,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9705','helmert_transformation','EPSG','6299','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6300','ITRF2000 to ITRF2008 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','5332',0.01,1.9,1.7,10.5,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-1.34,'EPSG','1028',-0.1,-0.1,1.8,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.08,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9706','helmert_transformation','EPSG','6300','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6301','ITRF2005 to ITRF2008 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','5332',0.01,2.0,0.9,4.7,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.94,'EPSG','1028',-0.1,-0.3,0.0,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',0.0,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld 2008',1); INSERT INTO "usage" VALUES('EPSG','9707','helmert_transformation','EPSG','6301','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6302','ITRF2000 to ITRF2005 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Estimated using 70 stations.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','4896',0.01,-0.1,0.8,5.8,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.4,'EPSG','1028',0.2,-0.1,1.8,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.08,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','9708','helmert_transformation','EPSG','6302','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6313','ITRF96 to GDA94 (1)','Replaced by Dawson and Woods transformation of 2010, code 6280.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4917','EPSG','4938',0.1,-0.014,0.0431,0.201,'EPSG','9001',0.012464,0.012013,0.006434,'EPSG','9104',0.024607,'EPSG','9202',0.0411,0.0218,0.0383,'EPSG','1042',0.002542,0.001431,-0.000234,'EPSG','1043',0.005897,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2001',0); INSERT INTO "usage" VALUES('EPSG','9714','helmert_transformation','EPSG','6313','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6314','ITRF97 to GDA94 (1)','Replaced by Dawson and Woods transformation of 2010, tfm code 6279.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4918','EPSG','4938',999.0,-0.2088,0.0119,0.1805,'EPSG','9001',0.012059,0.013369,0.011825,'EPSG','9104',0.004559,'EPSG','9202',-0.022,0.0049,0.0169,'EPSG','1042',0.00204,0.001782,0.001697,'EPSG','1043',-0.00109,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2001',1); INSERT INTO "usage" VALUES('EPSG','9715','helmert_transformation','EPSG','6314','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6315','ITRF2000 to GDA94 (1)','Replaced by Dawson and Woods transformation of 2010, tfm code 6278.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','4938',0.1,-0.0761,-0.0101,0.0444,'EPSG','9001',0.008765,0.009361,0.009325,'EPSG','9104',0.007935,'EPSG','9202',0.011,-0.0045,-0.0174,'EPSG','1042',0.001034,0.000671,0.001039,'EPSG','1043',-0.000538,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2001',0); INSERT INTO "usage" VALUES('EPSG','9716','helmert_transformation','EPSG','6315','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6373','Mexico ITRF2008 to WGS 84 (1)','Approximation at the +/- 1m level assuming that Mexico ITRF2008 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6365','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mex',0); INSERT INTO "usage" VALUES('EPSG','9720','helmert_transformation','EPSG','6373','EPSG','1160','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6388','Ocotepeque 1935 to NAD27 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5451','EPSG','4267',9.0,205.435,-29.099,292.202,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cri',1); INSERT INTO "usage" VALUES('EPSG','9728','helmert_transformation','EPSG','6388','EPSG','3876','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','6389','ITRF2005 to ITRF2008 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. IERS also publish parameter values for epoch 2005.0; because most rates are zero all values as above except tX=0.5mm. Estimated using 171 stations at 131 sites.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','5332',0.01,2.0,0.9,4.7,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.94,'EPSG','1028',-0.3,0.0,0.0,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',0.0,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld 2008',0); INSERT INTO "usage" VALUES('EPSG','9729','helmert_transformation','EPSG','6389','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6392','ITRF97 to GDA94 (1)','Replaced by Dawson and Woods transformation of 2010, tfm code 6279.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4918','EPSG','4938',0.1,-0.2088,0.0119,0.1855,'EPSG','9001',0.012059,0.013639,0.011825,'EPSG','9104',0.004559,'EPSG','9202',-0.022,0.0049,0.0169,'EPSG','1042',0.00204,0.001782,0.001697,'EPSG','1043',-0.00109,'EPSG','1041',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 2001',0); INSERT INTO "usage" VALUES('EPSG','9731','helmert_transformation','EPSG','6392','EPSG','1036','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6698','JGD2000 to JGD2011 (2)','Excludes areas of northern Honshu affected by 2008 Iwate-Miyagi and 2011 Tohoku earthquakes. For these areas use GSI PatchJGD application or JGD2000 to JGD2011 (1) (tfm code 6713).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4612','EPSG','6668',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn ex N Honshu',0); INSERT INTO "usage" VALUES('EPSG','9734','helmert_transformation','EPSG','6698','EPSG','4163','EPSG','1253'); INSERT INTO "helmert_transformation" VALUES('EPSG','6701','GDBD2009 to WGS 84 (1)','Approximation at the +/- 1m level assuming that GDBD2009 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5246','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Brn',0); INSERT INTO "usage" VALUES('EPSG','9736','helmert_transformation','EPSG','6701','EPSG','1055','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6710','RDN2008 to ETRS89 (1)','RDN2008 is the second Italian realization of ETRS89. May be taken as approximate transformation RDN2008 to WGS 84 - see code 6711.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6706','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ita',0); INSERT INTO "usage" VALUES('EPSG','9738','helmert_transformation','EPSG','6710','EPSG','3343','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','6711','RDN2008 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. RDN2008 is a regional realisation of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6706','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ita',0); INSERT INTO "usage" VALUES('EPSG','9739','helmert_transformation','EPSG','6711','EPSG','1127','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6864','ITRF96 to NAD83(CORS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Jointly derived by Canada and US at 12 North American VLBI stations. Replaced by CT code 6865 from 2000-01-01. See CT code 8259 for Canadian equivalent.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4917','EPSG','6781',0.0,0.991,-1.9072,-0.5129,'EPSG','9001',25.79,9.65,11.66,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',0.0532,-0.7423,-0.0316,'EPSG','1032',0.0,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-US CORS96',0); INSERT INTO "usage" VALUES('EPSG','9797','helmert_transformation','EPSG','6864','EPSG','1511','EPSG','1173'); INSERT INTO "helmert_transformation" VALUES('EPSG','6865','ITRF97 to NAD83(CORS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. 1996 derivation (see CT 6864) concatenated with IGS value of ITRF96>ITRF97. Replaced by CT code 6866 from 2002-01-01. See CT code 8260 for Canadian equivalent.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4918','EPSG','6781',0.0,0.9889,-1.9074,-0.503,'EPSG','9001',25.915,9.426,11.599,'EPSG','1031',-0.93,'EPSG','1028',0.0007,-0.0001,0.0019,'EPSG','1042',0.067,-0.757,-0.031,'EPSG','1032',-0.19,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-US CORS96',0); INSERT INTO "usage" VALUES('EPSG','9798','helmert_transformation','EPSG','6865','EPSG','1511','EPSG','1174'); INSERT INTO "helmert_transformation" VALUES('EPSG','6866','ITRF2000 to NAD83(CORS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Joint derivation by Canada and US (tfm 6864) concatenated with IGS value for ITRF96>97 and IERS ITRF97>2000 transformations. See tfm 8261 for Canadian equivalent.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','6781',0.0,0.9956,-1.9013,-0.5215,'EPSG','9001',25.915,9.426,11.599,'EPSG','1031',0.62,'EPSG','1028',0.0007,-0.0007,0.0005,'EPSG','1042',0.067,-0.757,-0.051,'EPSG','1032',-0.18,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-US CORS96',0); INSERT INTO "usage" VALUES('EPSG','9799','helmert_transformation','EPSG','6866','EPSG','1511','EPSG','1175'); INSERT INTO "helmert_transformation" VALUES('EPSG','6872','Abidjan 1987 to WGS 84 (2)','Derived and used by Western Geophysical for offshore surveys in the 1990s, but exact provenance uncertain. Used by OMV.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4143','EPSG','4326',2.0,-123.1,53.2,465.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'WGC-Civ',0); INSERT INTO "usage" VALUES('EPSG','9801','helmert_transformation','EPSG','6872','EPSG','2296','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','6873','Tananarive to WGS 84 (2)','Derived at 9 points throughout Madagascar. Adopted by OMV.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4297','EPSG','4326',3.0,-198.383,-240.517,-107.909,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ROG-Mdg',0); INSERT INTO "usage" VALUES('EPSG','9802','helmert_transformation','EPSG','6873','EPSG','1149','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','6888','Ocotepeque 1935 to NAD27 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5451','EPSG','4267',9.0,205.435,-29.099,-292.202,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cri',0); INSERT INTO "usage" VALUES('EPSG','9806','helmert_transformation','EPSG','6888','EPSG','3876','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','6889','Ocotepeque 1935 to WGS 84 (2)','Rotations in original source given in radians are equivalent to Rx = 2.35", Ry = -0.06", Rz = 6.39".','EPSG','1063','Molodensky-Badekas (PV geog2D domain)','EPSG','5451','EPSG','4326',5.0,213.116,9.358,-74.946,'EPSG','9001',1.14e-05,-2.98e-07,3.1e-05,'EPSG','9101',5.22,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,617749.7118,-6250547.7336,1102063.6099,'EPSG','9001','UNA-Cri',0); INSERT INTO "usage" VALUES('EPSG','9807','helmert_transformation','EPSG','6889','EPSG','3232','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','6890','Ocotepeque 1935 to CR05 (1)','May be taken as approximate transformation Ocotepeque to WGS 84 - see code 5470.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5451','EPSG','5365',8.0,213.11,9.37,-74.95,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri',0); INSERT INTO "usage" VALUES('EPSG','9808','helmert_transformation','EPSG','6890','EPSG','3232','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','6891','Ocotepeque 1935 to WGS 84 (3)','Concatenation (via NAD27) of transformations 6888 and 1171. Accuracy not given, but accuracy of constituent transformations given as 9m and 10m respectively.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5451','EPSG','4326',14.0,205.0,96.0,-98.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Cri',0); INSERT INTO "usage" VALUES('EPSG','9809','helmert_transformation','EPSG','6891','EPSG','3876','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6895','Viti Levu 1912 to WGS 84 (2)','Derived at 9 stations. Accuracy +/-3m in each axis. Replaces Viti Levu 1912 to WGS 84 (1) (code 15897).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4752','EPSG','4326',5.0,98.0,390.0,-22.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Fji GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9810','helmert_transformation','EPSG','6895','EPSG','3195','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','6896','Accra to WGS 84 (4)','Derived at 4 stations. Accuracy 3m, 4m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4168','EPSG','4326',6.0,-170.0,33.0,326.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Gha GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9811','helmert_transformation','EPSG','6896','EPSG','3252','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6897','St. Lucia 1955 to WGS 84 (2)','Derived at 3 stations. Accuracy 1m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4606','EPSG','4326',2.0,-153.0,153.0,307.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Lca GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9812','helmert_transformation','EPSG','6897','EPSG','3298','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6898','Lisbon to WGS 84 (5)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4207','EPSG','4326',43.0,-306.0,-62.0,105.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Prt GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9813','helmert_transformation','EPSG','6898','EPSG','1294','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6899','Pulkovo 1942 to WGS 84 (21)','Derived at 19 stations. Accuracy 2m, 3m and 3m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','4326',5.0,22.0,-126.0,-85.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Est GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9814','helmert_transformation','EPSG','6899','EPSG','3246','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6900','Observatario to WGS 84 (1)','Derived at 3 stations. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4129','EPSG','4326',17.0,-132.0,-110.0,-335.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Moz Geotrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9815','helmert_transformation','EPSG','6900','EPSG','1329','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6901','Tete to WGS 84 (6)','Derived at 4 stations. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4127','EPSG','4326',17.0,-80.0,-100.0,-228.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Moz GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9816','helmert_transformation','EPSG','6901','EPSG','3281','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6902','Timbalai 1948 to WGS 84 (6)','Derived at 9 stations. Accuracy 1m, 6m and 2m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4298','EPSG','4326',6.0,-679.0,667.0,-49.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Brn GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9817','helmert_transformation','EPSG','6902','EPSG','2349','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6903','Yoff to WGS 84 (2)','Derived at 7 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4310','EPSG','4326',5.0,-30.0,190.0,89.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Sen GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9818','helmert_transformation','EPSG','6903','EPSG','1207','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6904','Arc 1950 to WGS 84 (11)','Derived at 7 stations. Accuracy 13m, 25m and 7m in X, Y and Z axes. Info source gives source CRS as Arc 1960. From inspection of parameter values, comparison with other CTs and geographic applicability of CRS, OGP believes that this should be Arc 1950.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',29.0,-179.0,-81.0,-314.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Mwi GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9819','helmert_transformation','EPSG','6904','EPSG','1150','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6905','AGD66 to WGS 84 (20)','Derived at 161 stations. Accuracy 5m in each axis. Replaces AGD66 to WGS 84 (1) (code 1108).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326',9.0,-128.0,-52.0,153.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Aus GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9820','helmert_transformation','EPSG','6905','EPSG','2575','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6906','Arc 1950 to WGS 84 (10)','Derived at 38 stations. Accuracy 10m in each of X, Y and Z axes. Replaces Arc 1950 to WGS 84 (9), tfm code 1121.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4209','EPSG','4326',17.0,-145.0,-97.0,-292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Zwe GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9821','helmert_transformation','EPSG','6906','EPSG','1261','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6907','Ayabelle Lighthouse to WGS 84 (2)','Derived at 2 stations. Accuracy 10m in each axis. Replaces Ayabelle Lighthouse to WGS 84 (1) (code 15800).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4713','EPSG','4326',17.0,-77.0,-128.0,142.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Dji GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9822','helmert_transformation','EPSG','6907','EPSG','3238','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6908','Fahud to WGS 84 (3)','Derived at 11 stations. Accuracy 3m, 3m and 6m in X, Y and Z axes. Replaces Fahud to WGS 84 (1) (code 1256).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4232','EPSG','4326',7.0,-345.0,3.0,223.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Omn GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9823','helmert_transformation','EPSG','6908','EPSG','4009','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6909','Hjorsey 1955 to WGS 84 (2)','Derived at 16 stations. Accuracy 3m, 3m and 6m in X, Y and Z axes. Replaces Hjorsey 1955 to WGS 84 (1) (code 1951).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4658','EPSG','4326',7.0,-73.0,47.0,-83.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Isl GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9824','helmert_transformation','EPSG','6909','EPSG','3262','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6910','Aden 1925 to WGS 84 (1)','Derivation not given. Accuracy not specified.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6881','EPSG','4326',999.0,-24.0,-203.0,268.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Yem GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9825','helmert_transformation','EPSG','6910','EPSG','1340','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6911','Bekaa Valley 1920 to WGS 84 (1)','Derivation not given. Accuracy not specified.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6882','EPSG','4326',999.0,-183.0,-15.0,273.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Lbn GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9826','helmert_transformation','EPSG','6911','EPSG','3269','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6912','Bioko to WGS 84 (1)','Derived at 6 stations. Accuracy 5m, 17m and 38m in X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6883','EPSG','4326',42.0,-235.0,-110.0,393.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Gnq GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9827','helmert_transformation','EPSG','6912','EPSG','4220','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6913','Gambia to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6894','EPSG','4326',43.0,-63.0,176.0,185.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Gmb GeoTrans3-4',0); INSERT INTO "usage" VALUES('EPSG','9828','helmert_transformation','EPSG','6913','EPSG','3250','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6914','South East Island 1943 to WGS 84 (1)','Derived by UK DOS at 10 stations in 1998, RMS ±0.314m. Also published by NGA in Standard 0036 v1.0.0 of 2014-07-08 and in GeoTrans v3.4 software with parameter values rounded to integer.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6892','EPSG','4326',1.0,-43.685,-179.785,-267.721,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Syc 3-param',0); INSERT INTO "usage" VALUES('EPSG','9829','helmert_transformation','EPSG','6914','EPSG','4183','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','6926','South East Island 1943 to WGS 84 (2)','Derived by UKHO at 13 stations in 1999, RMS ±0.271m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','6892','EPSG','4326',1.0,-76.269,-16.683,68.562,'EPSG','9001',-6.275,10.536,-4.286,'EPSG','9104',-13.686,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKHO-Syc 7-param',0); INSERT INTO "usage" VALUES('EPSG','9834','helmert_transformation','EPSG','6926','EPSG','4183','EPSG','1198'); INSERT INTO "helmert_transformation" VALUES('EPSG','6935','IGS08 to IGRS (1)','Derived by least squares adjustment from the coordinates of the IRAQ-CORS network in both CRSs. Station Baghdad was excluded (high residuals). RMSE = 0.004 m. Application yields identical results to transformation 6936.','EPSG','1061','Molodensky-Badekas (PV geocentric domain)','EPSG','6934','EPSG','3887',0.05,0.208,-0.012,-0.229,'EPSG','9001',-0.01182,0.00811,-0.01677,'EPSG','9104',-0.0059,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3777505.028,3779254.396,3471111.632,'EPSG','9001','IRQ-MB(PV)',0); INSERT INTO "usage" VALUES('EPSG','9838','helmert_transformation','EPSG','6935','EPSG','1124','EPSG','1178'); INSERT INTO "helmert_transformation" VALUES('EPSG','6936','IGS08 to IGRS (2)','Derived by least squares adjustment from the coordinates of the IRAQ-CORS network in both CRSs. Station Baghdad was excluded (high residuals). RMSE = 0.004 m. Application yields identical results to transformation 6935.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','6934','EPSG','3887',0.05,-0.214,0.119,0.156,'EPSG','9001',-0.01182,0.00811,-0.01677,'EPSG','9104',-0.0059,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IRQ-7PV',0); INSERT INTO "usage" VALUES('EPSG','9839','helmert_transformation','EPSG','6936','EPSG','1124','EPSG','1178'); INSERT INTO "helmert_transformation" VALUES('EPSG','6937','AGD66 to PNG94 (2)','Derived in 2014 at 38 stations around the PNG mainland. Aligned to the Bevan Rapids Geodetic Origin AA 070 as required by the Papua New Guinea Oil and Gas Act 1998.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4202','EPSG','5546',1.0,-0.41,-2.37,2.0,'EPSG','9001',3.592,3.698,3.989,'EPSG','9104',8.843,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png Mainland 1m',0); INSERT INTO "usage" VALUES('EPSG','9840','helmert_transformation','EPSG','6937','EPSG','4214','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','6938','AGD66 to PNG94 (3)','Derived in 2014 at 38 stations around the PNG mainland. See AGD66 to PNG94 (2) for a more accurate 7-parameter transformation. May be taken as an approximate transformation AGD66 to WGS 84 - see tfm code 6943.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','5546',4.0,-129.0,-58.0,152.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png Mainland 4m',0); INSERT INTO "usage" VALUES('EPSG','9841','helmert_transformation','EPSG','6938','EPSG','4214','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','6939','AGD66 to PNG94 (4)','Derived in 2014 at 23 stations around the Kutubu oilfields. Aligned to the Bevan Rapids Geodetic Origin AA 070 as required by the Papua New Guinea Oil and Gas Act 1998. Replaces AGD66 to PNG94 (1) (tfm code 5662).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4202','EPSG','5546',1.0,-131.876,-54.554,453.346,'EPSG','9001',-5.2155,-8.2042,0.09,'EPSG','9104',5.02,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png PFTB 2014 1m',0); INSERT INTO "usage" VALUES('EPSG','9842','helmert_transformation','EPSG','6939','EPSG','4013','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','6940','AGD66 to PNG94 (5)','Derived in 2014 at 23 stations around the Kutubu oilfields. See AGD66 to PNG94 (4) for a more accurate 7-parameter transformation. May be taken as an approximate transformation AGD66 to WGS 84 - see tfm code 6944.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','5546',2.0,-131.3,-55.3,151.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png PFTB 2014 2m',0); INSERT INTO "usage" VALUES('EPSG','9843','helmert_transformation','EPSG','6940','EPSG','4013','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','6941','AGD66 to PNG94 (6)','Derived in 2014 at 7 stations in Ningerum and Tabubil (North Fly District).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4202','EPSG','5546',0.5,45.928,-177.212,336.867,'EPSG','9001',-4.6039,-3.0921,0.5729,'EPSG','9104',36.796,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png North Fly 1m',0); INSERT INTO "usage" VALUES('EPSG','9844','helmert_transformation','EPSG','6941','EPSG','4216','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','6942','AGD66 to PNG94 (7)','Derived in 2014 at 7 stations in Ningerum and Tabubil (North Fly District). See AGD66 to PNG94 (6) for a more accurate 7-parameter transformation. May be taken as an approximate transformation AGD66 to WGS 84 - see tfm code 6945.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','5546',2.5,-137.4,-58.9,150.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png North Fly 3m',0); INSERT INTO "usage" VALUES('EPSG','9845','helmert_transformation','EPSG','6942','EPSG','4216','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','6943','AGD66 to WGS 84 (21)','Parameter values taken from AGD66 to PNG94 (3) (code 6938). Approximation at the +/- 5m level assuming that PNG94 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326',5.0,-129.0,-58.0,152.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png Mainland',0); INSERT INTO "usage" VALUES('EPSG','9846','helmert_transformation','EPSG','6943','EPSG','4214','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6944','AGD66 to WGS 84 (22)','Parameter values taken from AGD66 to PNG94 (5) (code 6940). Approximation at the +/- 4m level assuming that PNG94 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326',4.0,-131.3,-55.3,151.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png PFTB 2014',0); INSERT INTO "usage" VALUES('EPSG','9847','helmert_transformation','EPSG','6944','EPSG','4013','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6945','AGD66 to WGS 84 (23)','Parameter values taken from AGD66 to PNG94 (7) (code 6942). Approximation at the +/- 4m level assuming that PNG94 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326',4.0,-137.4,-58.9,150.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png North Fly',0); INSERT INTO "usage" VALUES('EPSG','9848','helmert_transformation','EPSG','6945','EPSG','4216','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6949','PSAD56 to SIRGAS-Chile 2002 (1)','Also used as a transformation from PSAD56 to WGS 84 - see code 6971.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','5360',5.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0); INSERT INTO "usage" VALUES('EPSG','9852','helmert_transformation','EPSG','6949','EPSG','4231','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6950','PSAD56 to SIRGAS-Chile 2002 (2)','Also used as a transformation from PSAD56 to WGS 84 - see code 6972.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','5360',5.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0); INSERT INTO "usage" VALUES('EPSG','9853','helmert_transformation','EPSG','6950','EPSG','4222','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6951','PSAD56 to SIRGAS-Chile 2002 (3)','Also used as a transformation from PSAD56 to WGS 84 - see code 6973.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','5360',5.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0); INSERT INTO "usage" VALUES('EPSG','9854','helmert_transformation','EPSG','6951','EPSG','4221','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6960','VN-2000 to WGS 84 (2)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4756','EPSG','4326',1.0,-191.90441429,-39.30318279,-111.45032835,'EPSG','9001',-0.00928836,0.01975479,-0.00427372,'EPSG','9104',0.252906278,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DoSM-Vnm',0); INSERT INTO "usage" VALUES('EPSG','9859','helmert_transformation','EPSG','6960','EPSG','3328','EPSG','1065'); INSERT INTO "helmert_transformation" VALUES('EPSG','6963','Albanian 1987 to ETRS89 (1)','Derived using 90 stations, mse 18cm. May be taken as approximate transformation from Albanian 1987 to WGS 84 (see code 6964).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4258',0.2,-44.183,-0.58,-38.489,'EPSG','9001',2.3867,2.7072,-3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Alb 2D',1); INSERT INTO "usage" VALUES('EPSG','9861','helmert_transformation','EPSG','6963','EPSG','3212','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','6964','Albanian 1987 to WGS 84 (1)','Parameter values from Albanian 1987 to ETRS89 (1) (code 6963). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4326',1.0,-44.183,-0.58,-38.489,'EPSG','9001',2.3867,2.7072,-3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alb 2D',1); INSERT INTO "usage" VALUES('EPSG','9862','helmert_transformation','EPSG','6964','EPSG','3212','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','6967','SAD69 to SIRGAS-Chile (1)','Also used as a transformation from SAD69 to WGS 84 - see code 6974. Note: SAD69 adopted in Chile only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',5.0,-59.0,-11.0,-52.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',1); INSERT INTO "usage" VALUES('EPSG','9864','helmert_transformation','EPSG','6967','EPSG','4232','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6968','SAD69 to SIRGAS-Chile 2002 (2)','Also used as a transformation from SAD69 to WGS 84 - see code 6975. Note: SAD69 adopted in Chile only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360',5.0,-64.0,0.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0); INSERT INTO "usage" VALUES('EPSG','9865','helmert_transformation','EPSG','6968','EPSG','4224','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6969','SAD69 to SIRGAS-Chile (3)','Also used as a transformation from SAD69 to WGS 84 - see code 6976. Note: SAD69 adopted in Chile only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',5.0,-72.0,10.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',1); INSERT INTO "usage" VALUES('EPSG','9866','helmert_transformation','EPSG','6969','EPSG','4221','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6970','SAD69 to SIRGAS-Chile 2002 (4)','Also used as a transformation from SAD69 to WGS 84 - see code 6977.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360',5.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl D',0); INSERT INTO "usage" VALUES('EPSG','9867','helmert_transformation','EPSG','6970','EPSG','2805','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','6971','PSAD56 to WGS 84 (15)','Derived at 5 stations. Accuracy 10m in each axis. Replaces PSAD56 to WGS 84 (3) (code 1203). Also used as a transformation from PSAD56 to SIRGAS-Chile - see code 6949.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',17.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl N 2014',0); INSERT INTO "usage" VALUES('EPSG','9868','helmert_transformation','EPSG','6971','EPSG','4231','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6972','PSAD56 to WGS 84 (16)','Derived at 7 stations. Accuracy 10m in each axis. Also used as a transformation from PSAD56 to SIRGAS-Chile - see code 6950.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',17.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl Cen 2014',0); INSERT INTO "usage" VALUES('EPSG','9869','helmert_transformation','EPSG','6972','EPSG','4222','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6973','PSAD56 to WGS 84 (17)','Derived at 6 stations. Accuracy 10m in each axis. Replaces PSAD56 to WGS 84 (4) (code 1204). Info source gives S limit as 44°S but Chilean IGM states that PSAD56 limit is 43°30''S. Also used as a transformation from PSAD56 to SIRGAS-Chile - see code 6951.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326',17.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl S 2014',0); INSERT INTO "usage" VALUES('EPSG','9870','helmert_transformation','EPSG','6973','EPSG','4221','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6974','SAD69 to WGS 84 (17)','Derived at 8 stations. Accuracy 2m in each axis. Along with CTs 6975 and 6976, replaces SAD69 to WGS 84 (5) (code 1868). Also used as a CT from SAD69 to SIRGAS-Chile - see code 7448. Note: SAD69 adopted by Chile authorities only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',4.0,-59.0,-11.0,-52.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl 17-32',0); INSERT INTO "usage" VALUES('EPSG','9871','helmert_transformation','EPSG','6974','EPSG','4232','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6975','SAD69 to WGS 84 (18)','Derived at 6 stations. Accuracy 2m in each axis. Along with CTs 6974 and 6976, replaces SAD69 to WGS 84 (5) (code 1868). Also used as a CT from SAD69 to SIRGAS-Chile - see code 6968. Note: SAD69 adopted by Chile authorities only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',4.0,-64.0,0.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chile 32-36',0); INSERT INTO "usage" VALUES('EPSG','9872','helmert_transformation','EPSG','6975','EPSG','4224','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6976','SAD69 to WGS 84 (19)','Derived at 4 stations. Accuracy 4m in each axis. Along with CTs 6974 and 6975, replaces SAD69 to WGS 84 (5) (code 1868). Also used as a CT from SAD69 to SIRGAS-Chile - see code 7449. Note: SAD69 adopted by Chile authorities only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',7.0,-72.0,10.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl 36-44',0); INSERT INTO "usage" VALUES('EPSG','9873','helmert_transformation','EPSG','6976','EPSG','4221','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6977','SAD69 to WGS 84 (20)','Derived at 6 stations. Accuracy 3m, 3m and 4m in X, Y and Z axes. Also used as a transformation from SAD69 to SIRGAS-Chile - see code 6970. Unlike IGM Chile, NGA extends use of this tfm to all Chile south of 44°S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326',6.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chile 44-',0); INSERT INTO "usage" VALUES('EPSG','9874','helmert_transformation','EPSG','6977','EPSG','2805','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','6992','IGD05 to IGD05/12','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','7136','EPSG','7139',0.05,0.2255,-0.3709,-0.1171,'EPSG','9001',-0.00388,0.00063,-0.0182,'EPSG','9104',0.013443,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr',0); INSERT INTO "usage" VALUES('EPSG','9875','helmert_transformation','EPSG','6992','EPSG','1126','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','6993','IGD05/12 to IG05/12 Intermediate CRS','Replaces IGD05 transformation (code 7140). Defines the IG05/12 Intermediate CRS so is considered errorless. Israeli documentation refers to target CRS as "in GRS80". Use this CT for cadastre and precise engineering but see CTs 9186 or 9189 for GIS use.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','7139','EPSG','6990',0.0,-24.0024,-17.1032,-17.8444,'EPSG','9001',-0.33009,-1.85269,1.66969,'EPSG','9104',5.4248,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr',0); INSERT INTO "usage" VALUES('EPSG','9876','helmert_transformation','EPSG','6993','EPSG','2603','EPSG','1113'); INSERT INTO "helmert_transformation" VALUES('EPSG','6998','Nahrwan 1967 to WGS 84 (11)','Derived via WGS 72 but provenance uncertain. In ADMA replaces tfm code 15938. In ADCO replaced by tfm code 6999 from October 2013.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4270','EPSG','4326',5.0,-233.4,-160.7,381.5,'EPSG','9001',0.0,0.0,-0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ADNOC-UAE Abd',0); INSERT INTO "usage" VALUES('EPSG','9879','helmert_transformation','EPSG','6998','EPSG','4226','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','6999','Nahrwan 1967 to WGS 84 (12)','Derived in October 2013 at four control points of the ADCO CRF and evaluated at four others. Estimated horizontal accuracy of 0.14 m at the 95% confidence level.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4270','EPSG','4326',0.15,-253.4392,-148.452,386.5267,'EPSG','9001',-0.15605,-0.43,0.1013,'EPSG','9104',-0.0424,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ADCO-UAE Abd 2013',0); INSERT INTO "usage" VALUES('EPSG','9880','helmert_transformation','EPSG','6999','EPSG','4225','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','7002','Nahrwan 1967 to WGS 84 (13)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4270','EPSG','4326',1.0,-246.1633,-152.9047,382.6047,'EPSG','9001',-0.0989,-0.1382,-0.0768,'EPSG','9104',2.1e-06,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ADM-UAE Abd Isl',0); INSERT INTO "usage" VALUES('EPSG','9883','helmert_transformation','EPSG','7002','EPSG','4229','EPSG','1064'); INSERT INTO "helmert_transformation" VALUES('EPSG','7003','Nahrwan 1967 to WGS 84 (14)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4270','EPSG','4326',1.0,-242.8907,-149.0671,384.416,'EPSG','9001',-0.19044,-0.24987,-0.13925,'EPSG','9104',0.0001746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ADM-UAE Abd U39',0); INSERT INTO "usage" VALUES('EPSG','9884','helmert_transformation','EPSG','7003','EPSG','1850','EPSG','1064'); INSERT INTO "helmert_transformation" VALUES('EPSG','7004','Nahrwan 1967 to WGS 84 (15)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4270','EPSG','4326',1.0,-246.734,-153.4345,382.1477,'EPSG','9001',0.116617,0.165167,0.091327,'EPSG','9104',1.94e-05,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ADM-UAE Abd U40',0); INSERT INTO "usage" VALUES('EPSG','9885','helmert_transformation','EPSG','7004','EPSG','4227','EPSG','1064'); INSERT INTO "helmert_transformation" VALUES('EPSG','7033','Nahrwan 1934 to WGS 84 (6)','Derived by concatenation of parameter values published by IGN Paris from Nahrwan 1934 to WGS 72 at the Nahrwan SE Base station near Baghdad with DMA WGS 72 to WGS 84 parameter values. For more accurate transformation away from origin see codes 7008-7032.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4744','EPSG','4326',30.0,-242.2,-144.9,370.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Irq',0); INSERT INTO "usage" VALUES('EPSG','9911','helmert_transformation','EPSG','7033','EPSG','3625','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','7083','Perroud 1950 to RGTAAF07 (1)','Derived at three point on Petrels island at which residuals about 20 cm.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4637','EPSG','7073',0.5,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN Ata Petrel',0); INSERT INTO "usage" VALUES('EPSG','9926','helmert_transformation','EPSG','7083','EPSG','2817','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','7140','IGD05 to IG05 Intermediate CRS','Defines the IG05 Intermediate CRS so is considered errorless. Target CRS is referred to in Israeli documentation as "in GRS80". Replaced by IG05/12 transformation (code 6993).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','7136','EPSG','6983',0.0,-23.8085,-17.5937,-17.801,'EPSG','9001',-0.3306,-1.85706,1.64828,'EPSG','9104',5.4374,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr',0); INSERT INTO "usage" VALUES('EPSG','9949','helmert_transformation','EPSG','7140','EPSG','2603','EPSG','1113'); INSERT INTO "helmert_transformation" VALUES('EPSG','7377','ONGD14 to WGS 84 (1)','Translations given by information source in mm. Derived at 20 stations, RMS 0.0313m in northing, 0.0377m in easting and 0.0678m in height.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7371','EPSG','4978',0.1,0.819,-0.5762,-1.6446,'EPSG','9001',0.00378,0.03317,-0.00318,'EPSG','9104',0.0693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSA-Omn',0); INSERT INTO "usage" VALUES('EPSG','10065','helmert_transformation','EPSG','7377','EPSG','1183','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7442','Nord Sahara 1959 to WGS 84 (10)','Derived at 1 astro station central to concession. Significant and varying differences (>100m) known to exist in neighbouring astro stations. May be taken as a transformation to RGSH2020 - see CT 10344.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4326',100.0,-181.7,64.7,247.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Isa-Alg Ain Tsila',0); INSERT INTO "usage" VALUES('EPSG','10106','helmert_transformation','EPSG','7442','EPSG','4382','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','7443','ONGD14 to WGS 84 (2)','Approximation at the +/- 2m level assuming that ONG14 is equivalent to WGS 84. See transformation code 7377 for authoritative values.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7373','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Omn',0); INSERT INTO "usage" VALUES('EPSG','10107','helmert_transformation','EPSG','7443','EPSG','1183','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','7444','CGRS93 to ETRS89 (1)','Derived at 6 points at epoch 1993.1. May be taken as approximate transformation CGRS93 to WGS 84 - see code 7445.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','6311','EPSG','4258',0.1,8.846,-4.394,-1.122,'EPSG','9001',0.00237,0.146528,-0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DLS-Cyp',1); INSERT INTO "usage" VALUES('EPSG','10108','helmert_transformation','EPSG','7444','EPSG','3236','EPSG','1243'); INSERT INTO "helmert_transformation" VALUES('EPSG','7445','CGRS93 to WGS 84 (1)','Parameter values from CGRS93 to ETRS89 (1) (code 7444). Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','6311','EPSG','4326',1.0,8.846,-4.394,-1.122,'EPSG','9001',0.00237,0.146528,-0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Cyp',1); INSERT INTO "usage" VALUES('EPSG','10109','helmert_transformation','EPSG','7445','EPSG','3236','EPSG','1243'); INSERT INTO "helmert_transformation" VALUES('EPSG','7448','SAD69 to SIRGAS-Chile 2002 (1)','Also used as a transformation from SAD69 to WGS 84 - see code 6974. Note: SAD69 adopted in Chile only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360',5.0,-59.0,-11.0,-52.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0); INSERT INTO "usage" VALUES('EPSG','10110','helmert_transformation','EPSG','7448','EPSG','4232','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','7449','SAD69 to SIRGAS-Chile 2002 (3)','Also used as a transformation from SAD69 to WGS 84 - see code 6976. Note: SAD69 adopted in Chile only south of 43°30''S.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360',5.0,-72.0,10.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0); INSERT INTO "usage" VALUES('EPSG','10111','helmert_transformation','EPSG','7449','EPSG','4221','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','7666','WGS 84 (G1762) to ITRF2008 (1)','Defined at epoch 2005.0. Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7664','EPSG','5332',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2005.0',0); INSERT INTO "usage" VALUES('EPSG','10198','helmert_transformation','EPSG','7666','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7667','WGS 84 (G1674) to WGS 84 (G1762) (1)','Defined at epoch 2005.0. Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7662','EPSG','7664',0.01,-4.0,3.0,4.0,'EPSG','1025',0.27,-0.27,0.38,'EPSG','1031',-6.9,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2005.0',0); INSERT INTO "usage" VALUES('EPSG','10199','helmert_transformation','EPSG','7667','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7668','WGS 84 (G1150) to WGS 84 (G1762) (1)','Defined at epoch 2001.0. Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7660','EPSG','7664',0.02,-6.0,5.0,20.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-4.5,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2001.0',0); INSERT INTO "usage" VALUES('EPSG','10200','helmert_transformation','EPSG','7668','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7669','WGS 84 (G1674) to ITRF2008 (1)','Defined at epoch 2005.0. Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7662','EPSG','5332',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2005.0',0); INSERT INTO "usage" VALUES('EPSG','10201','helmert_transformation','EPSG','7669','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7670','WGS 84 (G1150) to ITRF2000 (1)','Defined at epoch 2001.0.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7660','EPSG','4919',0.02,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2001.0',0); INSERT INTO "usage" VALUES('EPSG','10202','helmert_transformation','EPSG','7670','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7671','WGS 84 (G873) to ITRF92 (1)','Defined at epoch 1997.0.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7658','EPSG','4914',0.1,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 1997.0',1); INSERT INTO "usage" VALUES('EPSG','10203','helmert_transformation','EPSG','7671','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7672','WGS 84 (G730) to ITRF92 (1)','Defined at epoch 1994.0.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7656','EPSG','4914',0.2,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 1994.0',0); INSERT INTO "usage" VALUES('EPSG','10204','helmert_transformation','EPSG','7672','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7675','MGI 1901 to ETRS89 (6)','Derived at 5506 points across the Repulic of Serbia. May be taken as approximate transformation MGI 1901 to WGS 84 assuming ETRS89 is equivalent to WGS 84 within the accuracy of the transformation - see tfm code 7676.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4258',0.5,577.88891,165.22205,391.18289,'EPSG','9001',-4.9145,0.94729,13.05098,'EPSG','9104',7.78664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb',0); INSERT INTO "usage" VALUES('EPSG','10207','helmert_transformation','EPSG','7675','EPSG','4543','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','7676','MGI 1901 to WGS 84 (11)','Parameter values from MGI 1901 to ETRS89 (6) (code 7675). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,577.88891,165.22205,391.18289,'EPSG','9001',-4.9145,0.94729,13.05098,'EPSG','9104',7.78664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Srb',0); INSERT INTO "usage" VALUES('EPSG','10208','helmert_transformation','EPSG','7676','EPSG','4543','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','7697','Egypt 1907 to WGS 84 (4)','Derived at 30 stations throughout Egypt 1907 network. Accuracy determined at 15 stations 0.7m in each axis. Unified transformation for whole country.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4229','EPSG','4326',1.2,-127.535,113.495,-12.7,'EPSG','9001',1.603747,-0.153612,-5.364408,'EPSG','9104',5.33745,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4854969.728,2945552.013,2868447.61,'EPSG','9001','SRI-Egy',0); INSERT INTO "usage" VALUES('EPSG','10214','helmert_transformation','EPSG','7697','EPSG','1086','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','7698','NAD27 to WGS 84 (89)','Derived at stations in the provinces of Colón, Panamá, Coclé, Veraguas, Herrera, Los Santos y Chiriquí. Standard deviation 0.871m in north and 0.531m in east.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4267','EPSG','4326',1.0,-32.3841359,180.4090461,120.8442577,'EPSG','9001',2.1545854,0.1498782,-0.5742915,'EPSG','9104',8.1049164,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGNTG-Pan',0); INSERT INTO "usage" VALUES('EPSG','10215','helmert_transformation','EPSG','7698','EPSG','3290','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','7702','PZ-90 to PZ-90.02 (1)','','EPSG','1066','Time-specific Coordinate Frame rotation (geocen)','EPSG','4922','EPSG','7677',0.17,-1.07,-0.03,0.02,'EPSG','9001',0.0,0.0,-130.0,'EPSG','1031',-0.22,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2002.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'MTD-Rus',0); INSERT INTO "usage" VALUES('EPSG','10217','helmert_transformation','EPSG','7702','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7703','PZ-90.02 to PZ-90.11 (1)','','EPSG','1066','Time-specific Coordinate Frame rotation (geocen)','EPSG','7677','EPSG','7679',0.07,-0.373,0.186,0.202,'EPSG','9001',-2.3,3.54,-4.21,'EPSG','1031',-0.008,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'MTD-Rus',0); INSERT INTO "usage" VALUES('EPSG','10218','helmert_transformation','EPSG','7703','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7704','PZ-90 to PZ-90.11 (1)','Concatenation of transformations 7702 and 7703.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','4922','EPSG','7679',0.2,-1.443,0.156,0.222,'EPSG','9001',-2.3,3.54,-134.21,'EPSG','1031',-0.228,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MTD-Rus',0); INSERT INTO "usage" VALUES('EPSG','10219','helmert_transformation','EPSG','7704','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7705','GSK-2011 to PZ-90.11 (1)','','EPSG','1066','Time-specific Coordinate Frame rotation (geocen)','EPSG','7681','EPSG','7679',0.03,0.0,0.014,-0.008,'EPSG','9001',-0.562,-0.019,0.053,'EPSG','1031',-0.0006,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2011.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'MTD-Rus',0); INSERT INTO "usage" VALUES('EPSG','10220','helmert_transformation','EPSG','7705','EPSG','1198','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7720','CGRS93 to ETRS89 (1)','Derived at 6 points at epoch 1993.1. May be taken as approximate transformation CGRS93 to WGS 84 - see code 7721.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','6311','EPSG','4258',0.1,8.846,-4.394,-1.122,'EPSG','9001',0.00237,0.146528,-0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DLS-Cyp',0); INSERT INTO "usage" VALUES('EPSG','10233','helmert_transformation','EPSG','7720','EPSG','3236','EPSG','1243'); INSERT INTO "helmert_transformation" VALUES('EPSG','7721','CGRS93 to WGS 84 (1)','Parameter values from CGRS93 to ETRS89 (1) (code 7720). Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','6311','EPSG','4326',1.0,8.846,-4.394,-1.122,'EPSG','9001',0.00237,0.146528,-0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Cyp',0); INSERT INTO "usage" VALUES('EPSG','10234','helmert_transformation','EPSG','7721','EPSG','3236','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','7790','ITRF2008 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Estimated using 127 stations at 125 sites.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','7789',0.01,-1.6,-1.9,-2.4,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.02,'EPSG','1028',0.0,0.0,0.1,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10269','helmert_transformation','EPSG','7790','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7806','Pulkovo 1942(83) to BGS2005 (1)','Official transformation for converting existing geodetic and cartographic materials to BGS2005. Older CRSs (CS30, CS50, CS70) must first be transformed to Pulkovo 1942(83) before this transformation is applied.','EPSG','1063','Molodensky-Badekas (PV geog2D domain)','EPSG','4178','EPSG','7798',5.0,5.0,-133.0,-104.0,'EPSG','9001',-1.4,-2.0,3.4,'EPSG','9104',-3.9901,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4223032.0,2032778.0,4309209.0,'EPSG','9001','RD-Bul',0); INSERT INTO "usage" VALUES('EPSG','10271','helmert_transformation','EPSG','7806','EPSG','3224','EPSG','1178'); INSERT INTO "helmert_transformation" VALUES('EPSG','7807','ITRF2008 to NAD83(2011) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Joint derivation by Canada and US (tfm 6864) concatenated with IGS value for ITRF96>97 and IERS ITRF97>2008 transformations. See tfm 8264 for Canadian equivalent.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6317',0.0,0.99343,-1.90331,-0.52655,'EPSG','9001',25.91467,9.42645,11.59935,'EPSG','1031',1.71504,'EPSG','1028',0.00079,-0.0006,-0.00134,'EPSG','1042',0.06667,-0.75744,-0.05133,'EPSG','1032',-0.10201,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-NA',0); INSERT INTO "usage" VALUES('EPSG','10272','helmert_transformation','EPSG','7807','EPSG','1511','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7808','ITRF2008 to NAD83(PA11) (1)','Information source gives IGS08 as source CRS: for most practical purposes IGS08 is equivalent to ITRF2008.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6320',0.0,0.908,-2.0161,-0.5653,'EPSG','9001',27.741,13.469,2.712,'EPSG','1031',1.1,'EPSG','1028',0.0001,0.0001,-0.0018,'EPSG','1042',-0.384,1.007,-2.186,'EPSG','1032',0.08,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-PA',0); INSERT INTO "usage" VALUES('EPSG','10273','helmert_transformation','EPSG','7808','EPSG','4162','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7809','ITRF2008 to NAD83(MA11) (1)','Information source gives IGS08 as source CRS: for most practical purposes IGS08 is equivalent to ITRF2008.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6323',0.0,0.908,-2.0161,-0.5653,'EPSG','9001',28.971,10.42,8.928,'EPSG','1031',1.1,'EPSG','1028',0.0001,0.0001,-0.0018,'EPSG','1042',-0.02,0.105,-0.347,'EPSG','1032',0.08,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-MA',0); INSERT INTO "usage" VALUES('EPSG','10274','helmert_transformation','EPSG','7809','EPSG','4167','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7814','ITRF89 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','4919',0.01,-2.97,-4.75,7.39,'EPSG','1033',0.0,0.0,0.18,'EPSG','1031',-5.85,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10279','helmert_transformation','EPSG','7814','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7817','UCS-2000 to ITRF2000 (1)','Derived for epoch 2005.0 at which time it defines UCS-2000 and is therefore exact (accuracy = 0) at this epoch. May be taken as approximate transformation UCS-2000 to ETRS89 and UCS-2000 to WGS 84 - see codes 9901 and 5840.','EPSG','1031','Geocentric translations (geocentric domain)','EPSG','5558','EPSG','4919',0.0,24.322,-121.372,-75.847,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SSGC-Ukr',0); INSERT INTO "usage" VALUES('EPSG','10280','helmert_transformation','EPSG','7817','EPSG','1242','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','7833','Albanian 1987 to ETRS89 (1)','Derived using 90 stations by IGM Italy on behalf of ASIG. mse = 18cm. Use only for horizontal coordinates; geoid heights must be calculated with ALBGEO3 software. May be taken as approximate transformation from Albanian 1987 to WGS 84 (see code 7834).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4258',0.2,-44.183,-0.58,-38.489,'EPSG','9001',-2.3867,-2.7072,3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Alb 2D',0); INSERT INTO "usage" VALUES('EPSG','10288','helmert_transformation','EPSG','7833','EPSG','3212','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','7834','Albanian 1987 to WGS 84 (1)','Parameter values from Albanian 1987 to ETRS89 (1) (code 7833). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4326',1.0,-44.183,-0.58,-38.489,'EPSG','9001',-2.3867,-2.7072,3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alb 2D',0); INSERT INTO "usage" VALUES('EPSG','10289','helmert_transformation','EPSG','7834','EPSG','3212','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','7835','Pulkovo 1942(58) to WGS 84 (22)','Derived by Deminex for nearshore Rodoni block in 1991-1992. Used by Shell for onshore seismic in 1995.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4179','EPSG','4326',2.0,74.5,-112.5,-44.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Dmnx-Alb',0); INSERT INTO "usage" VALUES('EPSG','10290','helmert_transformation','EPSG','7835','EPSG','4446','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','7836','Pulkovo 1942(58) to Albanian 1987 (1)','Albanian 1987 may be considered to be approximately equivalent to Pulkovo 1942(58) at the +/- 1m level.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4179','EPSG','4191',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alb',0); INSERT INTO "usage" VALUES('EPSG','10291','helmert_transformation','EPSG','7836','EPSG','1025','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','7892','SHGD2015 to WGS 84 (1)','SHGD2015 is realized by ITRF2008 at epoch 2015.0 and can be considered coincident with WGS 84 at epoch 2015.0 Accuracy 3 cm at 1/1/2015 then degrades by 3 cm/yr from 1/1/2015 depending upon epoch of WGS 84 due to motion of the Nubian Plate','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7886','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','10312','helmert_transformation','EPSG','7892','EPSG','3183','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','7893','Astro DOS 71 to SHGD2015 (1)','Derived at 19 stations, RMS = 12cm. May be used as an approximate transformation to WGS 84 - see code 7894.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4710','EPSG','7886',0.15,-323.65,551.39,-491.22,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel 0.15m',0); INSERT INTO "usage" VALUES('EPSG','10313','helmert_transformation','EPSG','7893','EPSG','3183','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','7894','Astro DOS 71 to WGS 84 (2)','Parameter values from Astro DOS 71 to SHGD2015 (1) (tfm code 7893). Assumes SHGD2015 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4710','EPSG','4326',1.0,-323.65,551.39,-491.22,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','10314','helmert_transformation','EPSG','7894','EPSG','3183','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','7895','Astro DOS 71 to SHGD2015 (2)','Derived at 19 stations, RMS = 6cm. Note: Because of the large rotations about the Y- and Z-axes this transformation is not reversible. For the reverse transformation use SHGD2015 to Astro DOS 71 (2) (code 9226).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4710','EPSG','7886',0.1,-112.854,12.27,-18.913,'EPSG','9001',2.1692,16.8896,17.1961,'EPSG','9104',-19.54517,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel 0.1m',0); INSERT INTO "usage" VALUES('EPSG','10315','helmert_transformation','EPSG','7895','EPSG','3183','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','7896','SHGD2015 to Astro DOS 71 (2)','Derived at 19 stations, RMS = 6cm. Note: Because of the large rotations about the Y- and Z-axes this transformation is not reversible. For the reverse transformation use Astro DOS 71 to SHGD2015 (2) (code 7895).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4710','EPSG','4710',0.1,112.771,-12.282,18.935,'EPSG','9001',-2.1692,-16.8896,-17.1961,'EPSG','9104',19.54517,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel 0.1m Rev',1); INSERT INTO "usage" VALUES('EPSG','10316','helmert_transformation','EPSG','7896','EPSG','3183','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','7897','St. Helena Tritan to SHGD2015 (1)','Derived at 19 stations, RMS = 5cm. May be used as an approximate transformation to WGS 84 - see code 7898.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7881','EPSG','7886',0.05,-0.077,0.079,0.086,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','10317','helmert_transformation','EPSG','7897','EPSG','3183','EPSG','1079'); INSERT INTO "helmert_transformation" VALUES('EPSG','7898','St. Helena Tritan to WGS 84 (1)','Parameter values from Tritan St. Helena to SHGD2015 (1) (tfm code 7897). Assumes Tritan St. Helena and SHGD2015 can be considered the same to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7881','EPSG','4326',1.0,-0.077,0.079,0.086,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','10318','helmert_transformation','EPSG','7898','EPSG','3183','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','7932','ITRF89 to ETRF89 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','7914',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.11,0.57,-0.71,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10320','helmert_transformation','EPSG','7932','EPSG','1298','EPSG','1119'); INSERT INTO "helmert_transformation" VALUES('EPSG','7933','ITRF90 to ETRF90 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','7916',0.0,1.9,2.8,-2.3,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.11,0.57,-0.71,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10321','helmert_transformation','EPSG','7933','EPSG','1298','EPSG','1120'); INSERT INTO "helmert_transformation" VALUES('EPSG','7934','ITRF91 to ETRF91 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','7918',0.0,2.1,2.5,-3.7,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.21,0.52,-0.68,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10322','helmert_transformation','EPSG','7934','EPSG','1298','EPSG','1121'); INSERT INTO "helmert_transformation" VALUES('EPSG','7935','ITRF92 to ETRF92 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','7920',0.0,3.8,4.0,-3.7,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.21,0.52,-0.68,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10323','helmert_transformation','EPSG','7935','EPSG','1298','EPSG','1122'); INSERT INTO "helmert_transformation" VALUES('EPSG','7936','ITRF93 to ETRF93 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','7922',0.0,1.9,5.3,-2.1,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.32,0.78,-0.67,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10324','helmert_transformation','EPSG','7936','EPSG','1298','EPSG','1123'); INSERT INTO "helmert_transformation" VALUES('EPSG','7937','ITRF94 to ETRF94 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','7924',0.0,4.1,4.1,-4.9,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.2,0.5,-0.65,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10325','helmert_transformation','EPSG','7937','EPSG','1298','EPSG','1124'); INSERT INTO "helmert_transformation" VALUES('EPSG','7938','ITRF96 to ETRF96 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','7926',0.0,4.1,4.1,-4.9,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.2,0.5,-0.65,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10326','helmert_transformation','EPSG','7938','EPSG','1298','EPSG','1125'); INSERT INTO "helmert_transformation" VALUES('EPSG','7939','ITRF97 to ETRF97 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','7928',0.0,4.1,4.1,-4.9,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.2,0.5,-0.65,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10327','helmert_transformation','EPSG','7939','EPSG','1298','EPSG','1126'); INSERT INTO "helmert_transformation" VALUES('EPSG','7940','ITRF2000 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ITRF2000 to ETRF2000 (2) (code 7941) for an exactly equivalent transformation but with the transformation''s parameter values at epoch 2000.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','7930',0.0,5.4,5.1,-4.8,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1034',0.081,0.49,-0.792,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','10328','helmert_transformation','EPSG','7940','EPSG','1298','EPSG','1127'); INSERT INTO "helmert_transformation" VALUES('EPSG','7941','ITRF2000 to ETRF2000 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ITRF2000 to ETRF2000 (1) (code 7940) for transformation which defines ETRF2000. 7941 is equivalent but with the transformation''s parameters at epoch 2000.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','7930',0.0,54.0,51.0,-48.0,'EPSG','1025',0.891,5.39,-8.712,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.081,0.49,-0.792,'EPSG','1032',0.0,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10329','helmert_transformation','EPSG','7941','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7942','ITRF89 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','7930',0.0,24.3,10.7,42.7,'EPSG','1025',0.891,5.39,-8.772,'EPSG','1031',-5.97,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.081,0.49,-0.812,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10330','helmert_transformation','EPSG','7942','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7943','ITRF90 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','7930',0.0,29.3,34.7,4.7,'EPSG','1025',0.891,5.39,-8.772,'EPSG','1031',-2.57,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.081,0.49,-0.812,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10331','helmert_transformation','EPSG','7943','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7944','ITRF91 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','7930',0.0,27.3,30.7,-11.3,'EPSG','1025',0.891,5.39,-8.772,'EPSG','1031',-2.27,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.081,0.49,-0.812,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10332','helmert_transformation','EPSG','7944','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7945','ITRF92 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','7930',0.0,39.3,44.7,-17.3,'EPSG','1025',0.891,5.39,-8.772,'EPSG','1031',-0.87,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.081,0.49,-0.812,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10333','helmert_transformation','EPSG','7945','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7946','ITRF93 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','7930',0.0,76.1,46.9,-19.9,'EPSG','1025',2.601,6.87,-8.412,'EPSG','1031',-2.07,'EPSG','1028',2.9,0.2,0.6,'EPSG','1027',0.191,0.68,-0.862,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10334','helmert_transformation','EPSG','7946','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7947','ITRF94 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','7930',0.0,47.3,46.7,-25.3,'EPSG','1025',0.891,5.39,-8.772,'EPSG','1031',-1.58,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.081,0.49,-0.812,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10335','helmert_transformation','EPSG','7947','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7948','ITRF96 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','7930',0.0,47.3,46.7,-25.3,'EPSG','1025',0.891,5.39,-8.772,'EPSG','1031',-1.58,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.081,0.49,-0.812,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10336','helmert_transformation','EPSG','7948','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7949','ITRF97 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','7930',0.0,47.3,46.7,-25.3,'EPSG','1025',0.891,5.39,-8.772,'EPSG','1031',-1.58,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.081,0.49,-0.812,'EPSG','1032',-0.01,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10337','helmert_transformation','EPSG','7949','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7950','ITRF2005 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','7930',0.0,54.1,50.2,-53.8,'EPSG','1025',0.891,5.39,-8.712,'EPSG','1031',0.4,'EPSG','1028',-0.2,0.1,-1.8,'EPSG','1027',0.081,0.49,-0.792,'EPSG','1032',0.08,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10338','helmert_transformation','EPSG','7950','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7951','ITRF2008 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','7930',0.0,52.1,49.3,-58.5,'EPSG','1025',0.891,5.39,-8.712,'EPSG','1031',1.34,'EPSG','1028',0.1,0.1,-1.8,'EPSG','1027',0.081,0.49,-0.792,'EPSG','1032',0.08,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10339','helmert_transformation','EPSG','7951','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7960','PZ-90.11 to ITRF2008 (1)','','EPSG','1066','Time-specific Coordinate Frame rotation (geocen)','EPSG','7679','EPSG','5332',0.004,-0.003,-0.001,0.0,'EPSG','9001',0.019,-0.042,0.002,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'MTD-Rus',0); INSERT INTO "usage" VALUES('EPSG','10345','helmert_transformation','EPSG','7960','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','7961','WGS 84 (G1150) to PZ-90.02 (1)','','EPSG','1066','Time-specific Coordinate Frame rotation (geocen)','EPSG','7660','EPSG','7677',0.17,0.36,-0.08,-0.18,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2002.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'MTD-Rus',0); INSERT INTO "usage" VALUES('EPSG','10346','helmert_transformation','EPSG','7961','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8048','GDA94 to GDA2020 (1)','Scale difference in ppb where 1/billion = 1E-9. See CT codes 8444-46 for NTv2 method giving equivalent results for Christmas Island, Cocos Islands and Australia respectively. See CT code 8447 for alternative including distortion model for Australia only.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4283','EPSG','7844',0.01,61.55,-10.87,-40.19,'EPSG','1025',-39.4924,-32.7221,-32.8979,'EPSG','1031',-9.994,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus',0); INSERT INTO "usage" VALUES('EPSG','10401','helmert_transformation','EPSG','8048','EPSG','4177','EPSG','1108'); INSERT INTO "helmert_transformation" VALUES('EPSG','8049','ITRF2014 to GDA2020 (1)','Derived at 109 stations of the Australian Regional GNSS network (ARGN). RMS residuals 26mm N, 12mm E and 179mm up, maximum residuals 49mm N, 24mm E and 464mm up. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7789','EPSG','7842',0.03,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',1.50379,1.18346,1.20716,'EPSG','1032',0.0,'EPSG','1030',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus',0); INSERT INTO "usage" VALUES('EPSG','10402','helmert_transformation','EPSG','8049','EPSG','4177','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8069','ITRF88 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4910','EPSG','7789',0.01,-25.4,0.5,154.8,'EPSG','1025',-0.1,0.0,-0.26,'EPSG','1031',-11.29,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10412','helmert_transformation','EPSG','8069','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8070','ITRF89 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','7789',0.01,-30.4,-35.5,130.8,'EPSG','1025',0.0,0.0,-0.26,'EPSG','1031',-8.19,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10413','helmert_transformation','EPSG','8070','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8071','ITRF90 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','7789',0.01,-25.4,-11.5,92.8,'EPSG','1025',0.0,0.0,-0.26,'EPSG','1031',-4.79,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10414','helmert_transformation','EPSG','8071','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8072','ITRF91 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','7789',0.01,-27.4,-15.5,76.8,'EPSG','1025',0.0,0.0,-0.26,'EPSG','1031',-4.49,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10415','helmert_transformation','EPSG','8072','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8073','ITRF92 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','7789',0.01,-15.4,-1.5,70.8,'EPSG','1025',0.0,0.0,-0.26,'EPSG','1031',-3.09,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10416','helmert_transformation','EPSG','8073','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8074','ITRF93 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','7789',0.01,50.4,-3.3,60.2,'EPSG','1025',2.81,3.38,-0.4,'EPSG','1031',-4.29,'EPSG','1028',2.8,0.1,2.5,'EPSG','1027',0.11,0.19,-0.07,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10417','helmert_transformation','EPSG','8074','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8075','ITRF94 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','7789',0.01,-7.4,0.5,62.8,'EPSG','1025',0.0,0.0,-0.26,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10418','helmert_transformation','EPSG','8075','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8076','ITRF96 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','7789',0.01,-7.4,0.5,62.8,'EPSG','1025',0.0,0.0,-0.26,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10419','helmert_transformation','EPSG','8076','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8077','ITRF97 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','7789',0.01,-7.4,0.5,62.8,'EPSG','1025',0.0,0.0,-0.26,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10420','helmert_transformation','EPSG','8077','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8078','ITRF2000 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','7789',0.01,-0.7,-1.2,26.1,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-2.12,'EPSG','1028',-0.1,-0.1,1.9,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10421','helmert_transformation','EPSG','8078','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8079','ITRF2005 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Derived by IERS from previously published information.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','7789',0.01,-2.6,-1.0,2.3,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.92,'EPSG','1028',-0.3,0.0,0.1,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10422','helmert_transformation','EPSG','8079','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8256','ITRF92 to NAD83(CSRS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Superseded by CT from ITRF93 (see code 8257).','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','8230',0.0,0.936,-1.984,-0.543,'EPSG','9001',-27.5,-15.5,-10.7,'EPSG','1031',5.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',-0.052,0.742,0.032,'EPSG','1032',0.0,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRS96 92',0); INSERT INTO "usage" VALUES('EPSG','10451','helmert_transformation','EPSG','8256','EPSG','1061','EPSG','1166'); INSERT INTO "helmert_transformation" VALUES('EPSG','8257','ITRF93 to NAD83(CSRS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Superseded by CT from ITRF94 (see code 8258).','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','8230',0.0,0.94,-1.979,-0.534,'EPSG','9001',-27.09,-16.22,-9.87,'EPSG','1031',4.1,'EPSG','1028',0.0023,0.0004,-0.0008,'EPSG','1042',0.078,0.962,-0.008,'EPSG','1032',0.11,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRS96 93',0); INSERT INTO "usage" VALUES('EPSG','10452','helmert_transformation','EPSG','8257','EPSG','1061','EPSG','1166'); INSERT INTO "helmert_transformation" VALUES('EPSG','8258','ITRF94 to NAD83(CSRS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','8230',0.0,0.942,-1.979,-0.534,'EPSG','9001',-27.3,-15.4,-10.7,'EPSG','1031',4.9,'EPSG','1028',-0.0004,0.0004,-0.0008,'EPSG','1042',-0.052,0.762,0.032,'EPSG','1032',0.0,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRS96 94',0); INSERT INTO "usage" VALUES('EPSG','10453','helmert_transformation','EPSG','8258','EPSG','1061','EPSG','1166'); INSERT INTO "helmert_transformation" VALUES('EPSG','8259','ITRF96 to NAD83(CSRS)v2 (1)','Jointly derived by Canada and US at 12 North American VLBI stations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See tfm code 6864 for US equivalent.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','8233',0.0,0.991,-1.9072,-0.5129,'EPSG','9001',-25.79,-9.65,-11.66,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',-0.0532,0.7423,0.0316,'EPSG','1032',0.0,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv2',0); INSERT INTO "usage" VALUES('EPSG','10454','helmert_transformation','EPSG','8259','EPSG','1061','EPSG','1167'); INSERT INTO "helmert_transformation" VALUES('EPSG','8260','ITRF97 to NAD83(CSRS)v3 (1)','Concatenation of joint Canada-US transformation NAD83>ITRF96 (see tfm code 8259) and IGS value for ITRF96>ITRF97 transformation. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See tfm 6865 for US equivalent.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','8238',0.0,0.9889,-1.9074,-0.503,'EPSG','9001',-25.915,-9.426,-11.599,'EPSG','1031',-0.935,'EPSG','1028',0.0007,-0.0001,0.0019,'EPSG','1042',-0.067,0.757,0.031,'EPSG','1032',-0.192,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv3',0); INSERT INTO "usage" VALUES('EPSG','10455','helmert_transformation','EPSG','8260','EPSG','1061','EPSG','1168'); INSERT INTO "helmert_transformation" VALUES('EPSG','8261','ITRF2000 to NAD83(CSRS)v4 (1)','Concatenation of joint Canada-US NAD83>ITRF96 tfm (code 8259) with IGS value of ITRF96>ITRF97 and IERS tfm ITRF97>ITRF2000. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See tfm code 6866 for US equivalent.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','8242',0.0,0.9956,-1.9013,-0.5214,'EPSG','9001',-25.915,-9.426,-11.599,'EPSG','1031',0.615,'EPSG','1028',0.0007,-0.0007,0.0005,'EPSG','1042',-0.067,0.757,0.051,'EPSG','1032',-0.182,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv4',0); INSERT INTO "usage" VALUES('EPSG','10456','helmert_transformation','EPSG','8261','EPSG','1061','EPSG','1169'); INSERT INTO "helmert_transformation" VALUES('EPSG','8262','ITRF2005 to NAD83(CSRS)v5 (1)','Concatenation of joint Canada-US NAD83>ITRF96 transformation (code 8259) with IGS value for ITRF96>ITRF97 and IERS transformations ITRF97>ITRF2005. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','8248',0.0,0.9963,-1.9024,-0.5219,'EPSG','9001',-25.915,-9.426,-11.599,'EPSG','1031',0.775,'EPSG','1028',0.0005,-0.0006,-0.0013,'EPSG','1042',-0.067,0.757,0.051,'EPSG','1032',-0.102,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv5',1); INSERT INTO "usage" VALUES('EPSG','10457','helmert_transformation','EPSG','8262','EPSG','1061','EPSG','1170'); INSERT INTO "helmert_transformation" VALUES('EPSG','8264','ITRF2008 to NAD83(CSRS)v6 (1)','Concatenation of joint Canada-US transformation NAD83>ITRF96 (code 8259) with IGS tfm ITRF96>97 and IERS tfms ITRF97>2008. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See tfm code 7807 for US equivalent.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','8250',0.0,0.99343,-1.90331,-0.52655,'EPSG','9001',-25.91467,-9.42645,-11.59935,'EPSG','1031',1.71504,'EPSG','1028',0.00079,-0.0006,-0.00134,'EPSG','1042',-0.06667,0.75744,0.05133,'EPSG','1032',-0.102,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv6',0); INSERT INTO "usage" VALUES('EPSG','10459','helmert_transformation','EPSG','8264','EPSG','1061','EPSG','1171'); INSERT INTO "helmert_transformation" VALUES('EPSG','8265','ITRF2014 to NAD83(CSRS)v7 (1)','Concatenation of joint Canada-US tfm NAD83>ITRF96 (CT code 8259) with IGS value for ITRF96>ITRF97 and IERS values for ITRF97>ITRF2014 transformations. Scale difference in ppb and rate in ppb/yr where 1/billion = 1E-9. See tfm 8970 for US equivalent.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8253',0.0,1.0053,-1.90921,-0.54157,'EPSG','9001',-26.78138,0.42027,-10.93206,'EPSG','1031',0.36891,'EPSG','1028',0.00079,-0.0006,-0.00144,'EPSG','1042',-0.06667,0.75744,0.05133,'EPSG','1032',-0.07201,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv7',0); INSERT INTO "usage" VALUES('EPSG','10460','helmert_transformation','EPSG','8265','EPSG','1061','EPSG','1172'); INSERT INTO "helmert_transformation" VALUES('EPSG','8270','Saint Pierre et Miquelon 1950 to WGS 84 (2)','Replaces Saint Pierre et Miquelon 1950 to WGS 84 (1) (code 1923) from March 2006. Accuracy +/- 0.5 to 1 metre.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4638','EPSG','4326',1.0,11.363,424.148,373.13,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Spm 2017',0); INSERT INTO "usage" VALUES('EPSG','10463','helmert_transformation','EPSG','8270','EPSG','3299','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','8365','ETRS89 to S-JTSK [JTSK03] (1)','Derived at 684 points with known S-JTSK and ETRS89 (ETRF2000 realization) coordinates. Scale parameter was constrained to be zero. UGKK consider this transformation to not be reversible at the 1mm accuracy level: for reverse see transformation code 8367.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4258','EPSG','8351',0.001,-485.014055,-169.473618,-483.842943,'EPSG','9001',7.78625453,4.39770887,4.10248899,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk',0); INSERT INTO "usage" VALUES('EPSG','10512','helmert_transformation','EPSG','8365','EPSG','1211','EPSG','1115'); INSERT INTO "helmert_transformation" VALUES('EPSG','8366','ITRF2014 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ITRF2014 to ETRF2014 (2) (code 8880) for an exactly equivalent transformation but with the transformation''s parameter values at epoch 2010.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8401',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','14203','helmert_transformation','EPSG','8366','EPSG','1298','EPSG','1129'); INSERT INTO "helmert_transformation" VALUES('EPSG','8367','S-JTSK [JTSK03] to ETRS89 (1)','Derived at 684 points. At the 1mm accuracy level this transformation is not reversible: for reverse see transformation code 8365. May be taken as approximate transformation to WGS 84 - see code 8368.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8351','EPSG','4258',0.001,485.021,169.465,483.839,'EPSG','9001',-7.786342,-4.397554,-4.102655,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk',0); INSERT INTO "usage" VALUES('EPSG','10514','helmert_transformation','EPSG','8367','EPSG','1211','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8368','S-JTSK [JTSK03] to WGS 84 (1)','Parameter values taken from S-JTSK [JTSK03] to ETRS89 (1) (code 8367) assuming that ETRS89 (ETRF2000 realization) is coincident with WGS 84 within the accuracy of the transformation. Within the 1m accuracy of this transformation, it is reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8351','EPSG','4326',1.0,485.021,169.465,483.839,'EPSG','9001',-7.786342,-4.397554,-4.102655,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk',0); INSERT INTO "usage" VALUES('EPSG','10515','helmert_transformation','EPSG','8368','EPSG','1211','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8393','Camacupa to WGS 84 (11)','Derived by Univ. of Lisbon for IGCA using 38 REPANGOL points in Angola (except SE) and Cabinda. Application differs from Camacupa to WGS 84 (1) to (10) by approx 25 m. Average horizontal error 1m, vertical 3m; max radial error 6m. For onshore use only.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4220','EPSG','4326',3.0,-93.799,-132.737,-219.073,'EPSG','9001',1.844,-0.648,6.37,'EPSG','9104',-0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGCA-Ago',1); INSERT INTO "usage" VALUES('EPSG','10528','helmert_transformation','EPSG','8393','EPSG','4469','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8405','ITRF2014 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','7930',0.0,54.7,52.2,-74.1,'EPSG','1025',1.701,10.29,-16.632,'EPSG','1031',2.12,'EPSG','1028',0.1,0.1,-1.9,'EPSG','1027',0.081,0.49,-0.792,'EPSG','1032',0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2000',0); INSERT INTO "usage" VALUES('EPSG','10535','helmert_transformation','EPSG','8405','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8407','ITRF2014 to ETRF2014 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9. See ITRF2014 to ETRF2014 (1) (code 8366) for transformation which defines ETRF2014. Transformation 8407 is equivalent to 8366 but with parameter values at epoch 2010.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','7930',0.0,0.0,0.0,0.0,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10537','helmert_transformation','EPSG','8407','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8409','ITRF2008 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','7789',0.0,-1.6,-1.9,-2.4,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',0.02,'EPSG','1028',0.0,0.0,0.1,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10539','helmert_transformation','EPSG','8409','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8410','ITRF2005 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','7789',0.0,-2.6,-1.0,-2.3,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',-0.92,'EPSG','1028',-0.3,0.0,0.1,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10540','helmert_transformation','EPSG','8410','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8411','ITRF2000 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','7789',0.0,-0.7,-1.2,26.1,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',-2.12,'EPSG','1028',-0.1,-0.1,1.9,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',-0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10541','helmert_transformation','EPSG','8411','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8412','ITRF97 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','7789',0.0,-7.4,0.5,62.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10542','helmert_transformation','EPSG','8412','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8413','ITRF96 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','7789',0.0,-7.4,0.5,62.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10543','helmert_transformation','EPSG','8413','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8414','ITRF94 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','7789',0.0,-7.4,0.5,62.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10544','helmert_transformation','EPSG','8414','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8415','ITRF93 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','7789',0.0,50.4,-3.3,60.2,'EPSG','1025',4.595,14.531,-16.57,'EPSG','1031',-4.29,'EPSG','1028',2.8,0.1,2.5,'EPSG','1027',0.195,0.721,-0.84,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10545','helmert_transformation','EPSG','8415','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8416','ITRF92 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','7789',0.0,-15.4,-1.5,70.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.09,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10546','helmert_transformation','EPSG','8416','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8417','ITRF91 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','7789',0.0,-27.4,-15.5,76.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-4.49,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10547','helmert_transformation','EPSG','8417','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8423','ITRF90 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','7789',0.0,-25.4,-11.5,92.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-4.79,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10553','helmert_transformation','EPSG','8423','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8424','ITRF89 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','7789',0.0,-30.4,-35.5,130.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-8.19,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',1); INSERT INTO "usage" VALUES('EPSG','10554','helmert_transformation','EPSG','8424','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8435','Macao 2008 to Macao 1920 (1)','Derived at 3 stations in 2008. Accuracy not stated.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','8431','EPSG','8428',999.0,202.865,303.99,155.873,'EPSG','9001',34.067,-76.126,-32.647,'EPSG','9104',-6.096,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-2361757.652,5417232.187,2391453.053,'EPSG','9001','DSCC-Mac',0); INSERT INTO "usage" VALUES('EPSG','10556','helmert_transformation','EPSG','8435','EPSG','1147','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','8436','Macao 2008 to WGS 84 (1)','Approximation at the +/- 1m level assuming that Macao 2008 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8431','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bmu',0); INSERT INTO "usage" VALUES('EPSG','10557','helmert_transformation','EPSG','8436','EPSG','1147','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8437','Hong Kong 1980 to Hong Kong Geodetic CS (1)','Also published as a transformation to WGS 84 using the position vector method - see Hong Kong 1980 to WGS 84 (1) (code 1825).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4611','EPSG','8427',1.0,-162.619,-276.961,-161.763,'EPSG','9001',0.067741,-2.243649,-1.158827,'EPSG','9104',-1.094239,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LSD-HKG 2002',1); INSERT INTO "usage" VALUES('EPSG','10558','helmert_transformation','EPSG','8437','EPSG','1118','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','8438','Macao 1920 to WGS 84 (1)','Derived from Macao 2008 to Macao 1920 (1) (code 8435) (reversed) assuming that Macao 2008 is equivalent to WGS 84 within the accuracy of the transformation. Some parameter values differ in the reverse due to the high rotations.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','8428','EPSG','4326',1.0,-202.865,-303.99,-155.873,'EPSG','9001',-34.079,76.126,32.66,'EPSG','9104',6.096,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,-2361554.788,5417536.177,2391608.926,'EPSG','9001','EPSG-Mac',0); INSERT INTO "usage" VALUES('EPSG','10559','helmert_transformation','EPSG','8438','EPSG','1147','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8439','Hong Kong Geodetic CS to WGS 84 (1)','Approximation at the +/- 1m level assuming that Hong Kong Geodetic CS is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8427','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Hkg',0); INSERT INTO "usage" VALUES('EPSG','10560','helmert_transformation','EPSG','8439','EPSG','1118','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8448','GDA2020 to WGS 84 (G1762) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Parameter values taken from ITRF2014 to GDA2020 (1) (code 8049), assuming WGS 84 (G1762) is equivalent to ITRF2014 within the accuracy of the transformation.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7842','EPSG','7664',0.2,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',-1.50379,-1.18346,-1.20716,'EPSG','1032',0.0,'EPSG','1030',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 0.2m',0); INSERT INTO "usage" VALUES('EPSG','10568','helmert_transformation','EPSG','8448','EPSG','4177','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8450','GDA2020 to WGS 84 (2)','Approximation at the 3m level assuming WGS 84 is equivalent to GDA2020. Ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7844','EPSG','4326',3.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus 3m',0); INSERT INTO "usage" VALUES('EPSG','10569','helmert_transformation','EPSG','8450','EPSG','4177','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8452','Batavia to WGS 84 (1)','Derived at 5 stations. Note: U.S. DMA TR8350.2 September 1987 gives source CRS as Batavia and area as Sumatra. The Batavia (Genuk) CRS applies to Java and western Sumatra. EPSG presumes this CT applies to both. Sometimes found applied to all Sumatra.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4211','EPSG','4326',6.0,-377.0,681.0,-50.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Idn Sumatra',0); INSERT INTO "usage" VALUES('EPSG','10571','helmert_transformation','EPSG','8452','EPSG','1285','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','8674','La Canoa to PSAD56 (1)','In Venezuela PSAD56 is coincident with La Canoa.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4247','EPSG','4248',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LAG-Ven E',0); INSERT INTO "usage" VALUES('EPSG','10766','helmert_transformation','EPSG','8674','EPSG','3327','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8680','MGI 1901 to ETRS89 (7)','Derived at 1385 points across the area of Bosnia and Herzegovina. May be taken as approximate transformation MGI 1901 to WGS 84 (see code 8823).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4258',1.0,489.88,183.912,533.711,'EPSG','9001',5.76545,4.69994,-12.58211,'EPSG','9104',1.00646,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FGA-Bih',0); INSERT INTO "usage" VALUES('EPSG','10768','helmert_transformation','EPSG','8680','EPSG','1050','EPSG','1056'); INSERT INTO "helmert_transformation" VALUES('EPSG','8681','MGI 1901 to WGS 84 (12)','Parameter values from MGI 1901 to ETRS89 (7) (code 8680). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4258',1.0,489.88,183.912,533.711,'EPSG','9001',5.76545,4.69994,-12.58211,'EPSG','9104',1.00646,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FGA-Bih',1); INSERT INTO "usage" VALUES('EPSG','10769','helmert_transformation','EPSG','8681','EPSG','1050','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8688','MGI 1901 to WGS 84 (16)','Parameter values from MGI to Slovenia 1996 (12) (tfm code 8689) assuming Slovenia 1996 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,476.08,125.947,417.81,'EPSG','9001',-4.610862,-2.388137,11.942335,'EPSG','9104',9.896638,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 2010',0); INSERT INTO "usage" VALUES('EPSG','10770','helmert_transformation','EPSG','8688','EPSG','3307','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8689','MGI 1901 to Slovenia 1996 (12)','Derived at 479 nodes of Delauney triangulation generated from 1958 control points. Replaces MGI 1901 to Slovenia 1996 (1) (code 3916). May be taken as approximate transformation MGI 1901 to WGS 84 (see code 8688).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765',1.0,476.08,125.947,417.81,'EPSG','9001',-4.610862,-2.388137,11.942335,'EPSG','9104',9.896638,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 2010',0); INSERT INTO "usage" VALUES('EPSG','10771','helmert_transformation','EPSG','8689','EPSG','3307','EPSG','1158'); INSERT INTO "helmert_transformation" VALUES('EPSG','8695','Camacupa 1948 to Camacupa 2015 (1)','Concatenation of transformations 1327 and 8882.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4220','EPSG','8694',5.8,42.899,-214.863,-11.927,'EPSG','9001',-1.844,0.648,-6.37,'EPSG','9104',0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago',0); INSERT INTO "usage" VALUES('EPSG','10772','helmert_transformation','EPSG','8695','EPSG','2324','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8696','Camacupa 1948 to Camacupa 2015 (2)','Concatenation of transformations 1324 and 8882.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4220','EPSG','8694',4.2,45.799,-212.263,-11.927,'EPSG','9001',-1.844,0.648,-6.37,'EPSG','9104',0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago B15',0); INSERT INTO "usage" VALUES('EPSG','10773','helmert_transformation','EPSG','8696','EPSG','2322','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8819','RSAO13 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RSAO13 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8699','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago',0); INSERT INTO "usage" VALUES('EPSG','10774','helmert_transformation','EPSG','8819','EPSG','1029','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8822','MTRF-2000 to WGS 84 (1)','Approximation at the +/- 1m level assuming that MTRF-2000 (ITRF2000 at epoch 2004.00) is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8818','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Sau',0); INSERT INTO "usage" VALUES('EPSG','10775','helmert_transformation','EPSG','8822','EPSG','1206','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8823','MGI 1901 to WGS 84 (13)','Parameter values from MGI 1901 to ETRS89 (7) (code 8680). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,489.88,183.912,533.711,'EPSG','9001',5.76545,4.69994,-12.58211,'EPSG','9104',1.00646,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FGA-Bih',0); INSERT INTO "usage" VALUES('EPSG','10776','helmert_transformation','EPSG','8823','EPSG','1050','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8824','Ain el Abd to MTRF-2000 (1)','Nation-wide transformation. Accuracy given as ''several metres''. More precise national cellular transformation parameters were also determined. Software coded for these cellular transformations is available in MOMRA.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','8818',5.0,-61.15,-315.86,-3.51,'EPSG','9001',0.41,0.74,-3.52,'EPSG','9104',1.36,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MOMRA-Sau',0); INSERT INTO "usage" VALUES('EPSG','10777','helmert_transformation','EPSG','8824','EPSG','3303','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','8827','Camacupa 2015 to RSAO13 (1)','Derived by Univ. of Lisbon for CIDDEMA using 38 REPANGOL points in Angola (except SE) and Cabinda. Average horizontal error 1m, vertical 3m; max radial error 6m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8694','EPSG','8699',3.0,-93.799,-132.737,-219.073,'EPSG','9001',1.844,-0.648,6.37,'EPSG','9104',-0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CIDDEMA-Ago',0); INSERT INTO "usage" VALUES('EPSG','10779','helmert_transformation','EPSG','8827','EPSG','1029','EPSG','1130'); INSERT INTO "helmert_transformation" VALUES('EPSG','8828','RGPF to WGS 84 (1)','SHOM report gives scale difference as 0.999 999 9907 (wrt unity). Transformation is to original Transit definition of WGS 84. It is consistent with later WGS 84 realisations G730, G873 and G1150 to no better than 1m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4687','EPSG','4326',0.5,0.072,-0.507,-0.245,'EPSG','9001',0.0183,-0.0003,0.007,'EPSG','9104',-0.0093,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10780','helmert_transformation','EPSG','8828','EPSG','1098','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8829','Tahiti 79 to RGPF (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4690','EPSG','4687',0.5,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.877,'EPSG','9104',11.4741,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10781','helmert_transformation','EPSG','8829','EPSG','3124','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8830','Tahiti 79 to WGS 84 (2)','Concatenation of Tahiti 79 to RGPF (1) and RGPF to WGS 84 (1) (CT codes 8829 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4690','EPSG','4326',1.0,221.597,152.441,176.523,'EPSG','9001',2.403,1.3893,0.884,'EPSG','9104',11.4648,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10782','helmert_transformation','EPSG','8830','EPSG','3124','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8831','Moorea 87 to RGPF (2)','Recalculated in 2009 using corrected coordinates of deriving stations.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4691','EPSG','4687',0.5,218.697,151.257,176.995,'EPSG','9001',3.5048,2.004,1.281,'EPSG','9104',10.991,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10783','helmert_transformation','EPSG','8831','EPSG','3125','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8832','Moorea 87 to WGS 84 (2)','Concatenation of Moorea 87 to RGPF (2) and RGPF to WGS 84 (1) (CT codes 8831 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4691','EPSG','4326',1.0,218.769,150.75,176.75,'EPSG','9001',3.5231,2.0037,1.288,'EPSG','9104',10.9817,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10784','helmert_transformation','EPSG','8832','EPSG','3125','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8833','Tahaa 54 to RGPF (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4629','EPSG','4687',0.5,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10785','helmert_transformation','EPSG','8833','EPSG','2812','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8834','Tahaa 54 to WGS 84 (3)','Concatenation of Tahaa 54 to RGPF (1) and RGPF to WGS 84 (1) (CT codes 8833 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4629','EPSG','4326',1.0,72.51,345.411,79.241,'EPSG','9001',-1.5862,-0.8826,-0.5495,'EPSG','9104',1.3653,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10786','helmert_transformation','EPSG','8834','EPSG','2812','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8835','Fatu Iva 72 to RGPF (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4688','EPSG','4687',2.0,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104',186.074,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10787','helmert_transformation','EPSG','8835','EPSG','3133','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8842','Fatu Iva 72 to WGS 84 (2)','Concatenation of Fatu Iva 72 to RGPF (1) and RGPF to WGS 84 (1) (CT codes 8835 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4688','EPSG','4326',2.0,347.175,1077.618,2623.677,'EPSG','9001',33.9058,-70.6776,9.4013,'EPSG','9104',186.0647,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10788','helmert_transformation','EPSG','8842','EPSG','3133','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8843','IGN63 Hiva Oa to RGPF (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4689','EPSG','4687',0.5,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf HivaOa',0); INSERT INTO "usage" VALUES('EPSG','10789','helmert_transformation','EPSG','8843','EPSG','3131','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8844','IGN63 Hiva Oa to WGS 84 (3)','Concatenation of IGN63 Hiva Oa to RGPF (1) and RGPF to WGS 84 (1) (CT codes 8843 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4689','EPSG','4326',2.0,410.793,54.542,80.501,'EPSG','9001',-2.5596,-2.3517,-0.6594,'EPSG','9104',17.3218,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf HivaOa',0); INSERT INTO "usage" VALUES('EPSG','10790','helmert_transformation','EPSG','8844','EPSG','3131','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8845','IGN63 Hiva Oa to RGPF (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4689','EPSG','4687',2.0,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf Tahuata',0); INSERT INTO "usage" VALUES('EPSG','10791','helmert_transformation','EPSG','8845','EPSG','3132','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8846','IGN63 Hiva Oa to WGS 84 (4)','Concatenation of TIGN63 Hiva Oa to RGPF (2) and RGPF to WGS 84 (1) (CT codes 8845 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4689','EPSG','4326',2.0,374.787,-58.914,-1.202,'EPSG','9001',-16.1928,-11.4629,-5.5287,'EPSG','9104',-0.5502,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf Tahuata',0); INSERT INTO "usage" VALUES('EPSG','10792','helmert_transformation','EPSG','8846','EPSG','3132','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8847','IGN72 Nuku Hiva to RGPF (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4630','EPSG','4687',0.5,165.732,216.72,180.505,'EPSG','9001',-0.6434,-0.4512,-0.0791,'EPSG','9104',7.4204,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf NukuHiva',0); INSERT INTO "usage" VALUES('EPSG','10793','helmert_transformation','EPSG','8847','EPSG','2810','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8848','IGN72 Nuku Hiva to WGS 84 (5)','Concatenation of IGN72 Nuku Hiva to RGPF (1) and RGPF to WGS 84 (1) (CT codes 8847 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4630','EPSG','4326',1.0,165.804,216.213,180.26,'EPSG','9001',-0.6251,-0.4515,-0.0721,'EPSG','9104',7.4111,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf NukuHiva',0); INSERT INTO "usage" VALUES('EPSG','10794','helmert_transformation','EPSG','8848','EPSG','2810','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8849','IGN72 Nuku Hiva to RGPF (2)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4630','EPSG','4687',2.0,1363.785,1362.687,398.811,'EPSG','9001',-4.5322,-6.7579,-1.0574,'EPSG','9104',268.361,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf UaHuka',0); INSERT INTO "usage" VALUES('EPSG','10795','helmert_transformation','EPSG','8849','EPSG','3127','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8850','IGN72 Nuku Hiva to WGS 84 (6)','Concatenation of IGN72 Nuku Hiva to RGPF (2) and RGPF to WGS 84 (1) (CT codes 8849 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4630','EPSG','4326',2.0,1363.857,1362.18,398.566,'EPSG','9001',-4.5139,-6.7582,-1.0504,'EPSG','9104',268.3517,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf UaHuka',0); INSERT INTO "usage" VALUES('EPSG','10796','helmert_transformation','EPSG','8850','EPSG','3127','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8851','IGN72 Nuku Hiva to RGPF (3)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4630','EPSG','4687',0.5,259.551,297.612,197.833,'EPSG','9001',1.4866,2.1224,0.4612,'EPSG','9104',27.0249,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf UaPou',0); INSERT INTO "usage" VALUES('EPSG','10797','helmert_transformation','EPSG','8851','EPSG','3128','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8852','IGN72 Nuku Hiva to WGS 84 (7)','Concatenation of IGN72 Nuku Hiva to RGPF (3) and RGPF to WGS 84 (1) (CT codes 8851 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4630','EPSG','4326',1.0,259.623,297.105,197.588,'EPSG','9001',1.5049,2.1221,0.4682,'EPSG','9104',27.0156,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf UaPou',0); INSERT INTO "usage" VALUES('EPSG','10798','helmert_transformation','EPSG','8852','EPSG','3128','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8853','Maupiti 83 to WGS 84 (2)','Concatenation of Maupiti 83 to RGPF (1) and RGPF to WGS 84 (1) (CT codes 15759 and 8828).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4692','EPSG','4326',1.0,217.109,86.452,23.711,'EPSG','9001',0.0183,-0.0003,0.007,'EPSG','9104',-0.0093,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0); INSERT INTO "usage" VALUES('EPSG','10799','helmert_transformation','EPSG','8853','EPSG','3126','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8869','ITRF2008 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','8401',0.0,-1.6,-1.9,-2.4,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',0.02,'EPSG','1028',0.0,0.0,0.1,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10811','helmert_transformation','EPSG','8869','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8870','ITRF2005 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','8401',0.0,-2.6,-1.0,2.3,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',-0.92,'EPSG','1028',-0.3,0.0,0.1,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10812','helmert_transformation','EPSG','8870','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8871','ITRF2000 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','8401',0.0,-0.7,-1.2,26.1,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',-2.12,'EPSG','1028',-0.1,-0.1,1.9,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',-0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10813','helmert_transformation','EPSG','8871','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8872','ITRF97 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','8401',0.0,-7.4,0.5,62.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10814','helmert_transformation','EPSG','8872','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8873','ITRF96 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','8401',0.0,-7.4,0.5,62.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10815','helmert_transformation','EPSG','8873','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8874','ITRF94 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','8401',0.0,-7.4,0.5,62.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.8,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10816','helmert_transformation','EPSG','8874','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8875','ITRF93 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','8401',0.0,50.4,-3.3,60.2,'EPSG','1025',4.595,14.531,-16.57,'EPSG','1031',-4.29,'EPSG','1028',2.8,0.1,2.5,'EPSG','1027',0.195,0.721,-0.84,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10817','helmert_transformation','EPSG','8875','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8876','ITRF92 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','8401',0.0,-15.4,-1.5,70.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-3.09,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10818','helmert_transformation','EPSG','8876','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8877','ITRF91 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','8401',0.0,-27.4,-15.5,76.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-4.49,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10819','helmert_transformation','EPSG','8877','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8878','ITRF90 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','8401',0.0,-25.4,-11.5,92.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-4.79,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10820','helmert_transformation','EPSG','8878','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8879','ITRF89 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','8401',0.0,-30.4,-35.5,130.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-8.19,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','10821','helmert_transformation','EPSG','8879','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8880','ITRF2014 to ETRF2014 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9. See ITRF2014 to ETRF2014 (1) (code 8366) for transformation which defines ETRF2014. Transformation 8880 is equivalent to 8366 but with parameter values at epoch 2010.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8401',0.0,0.0,0.0,0.0,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0); INSERT INTO "usage" VALUES('EPSG','14204','helmert_transformation','EPSG','8880','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8882','Camacupa 2015 to WGS 84 (11)','Used by CIDDEMA for delimitation of Angola''s EEZ boundary. Derived by Univ. of Lisbon using 38 REPANGOL points. Average horizontal error 1m, vertical 3m; max radial error 6m. Application offshore differs from Camacupa 1948 to WGS 84 by approx 25m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8694','EPSG','4326',3.0,-93.799,-132.737,-219.073,'EPSG','9001',1.844,-0.648,6.37,'EPSG','9104',-0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CIDDEMA-Ago',0); INSERT INTO "usage" VALUES('EPSG','10823','helmert_transformation','EPSG','8882','EPSG','1029','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8883','Camacupa 1948 to RSAO13 (1)','Parameter values taken from Camacupa 1948 to WGS 84 (7) (code 1324) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','8699',3.0,-48.0,-345.0,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago B15',0); INSERT INTO "usage" VALUES('EPSG','10824','helmert_transformation','EPSG','8883','EPSG','2322','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','8884','Camacupa 1948 to RSAO13 (2)','Parameter values taken from Camacupa 1948 to WGS 84 (10) (code 1327) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','8699',5.0,-50.9,-347.6,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago N',0); INSERT INTO "usage" VALUES('EPSG','10825','helmert_transformation','EPSG','8884','EPSG','2324','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','8886','SVY21 to WGS 84 (1)','Considered exact at 1994-01-01 when SVY21 aligned to WGS 84 (Transit).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4757','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SLA-sgp',0); INSERT INTO "usage" VALUES('EPSG','10827','helmert_transformation','EPSG','8886','EPSG','1210','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8887','GDA2020 to WGS 84 (Transit) (1)','Approximation at the 3m level assuming WGS 84 (Transit) is equivalent to ITRF2014 within the accuracy of the transformation.','EPSG','1031','Geocentric translations (geocentric domain)','EPSG','7842','EPSG','7815',3.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus 3m',0); INSERT INTO "usage" VALUES('EPSG','10828','helmert_transformation','EPSG','8887','EPSG','4177','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8889','BGS2005 to ETRS89 (1)','BGS2005 is a national realization of ETRS89. May be taken as approximate transformation BGS2005 to WGS 84 - see code 8890.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7798','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bgr',0); INSERT INTO "usage" VALUES('EPSG','10829','helmert_transformation','EPSG','8889','EPSG','1056','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','8890','BGS2005 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. BGS2005 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7798','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bgr',0); INSERT INTO "usage" VALUES('EPSG','10830','helmert_transformation','EPSG','8890','EPSG','1056','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8891','LKS-92 to ETRS89 (1)','LKS-92 is a national realization of ETRS89. May be taken as approximate transformation LKS92 to WGS 84 - see code 1958.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4661','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Lva',0); INSERT INTO "usage" VALUES('EPSG','10831','helmert_transformation','EPSG','8891','EPSG','1139','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','8892','LKS94 to ETRS89 (1)','LKS94 is a national realization of ETRS89. May be taken as approximate transformation LKS94 to WGS 84 - see code 1283.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4669','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ltu',0); INSERT INTO "usage" VALUES('EPSG','10832','helmert_transformation','EPSG','8892','EPSG','1145','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','8893','SRB_ETRS89 to ETRS89 (1)','SRB_ETRS89 is a national realization of ETRS89. May be taken as approximate transformation SRB_ETRS89 to WGS 84 - see code 8894.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8685','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Sbr',0); INSERT INTO "usage" VALUES('EPSG','10833','helmert_transformation','EPSG','8893','EPSG','4543','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','8894','SRB_ETRS89 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. SRB_ETRS89 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8685','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Srb',0); INSERT INTO "usage" VALUES('EPSG','10834','helmert_transformation','EPSG','8894','EPSG','4543','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','8895','CHTRS95 to ETRS89 (1)','CHTRS95 is a national realization of ETRS89. May be taken as approximate transformation CHTRS95 to WGS 84 - see code 1511.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4151','EPSG','4258',0.01,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Che',0); INSERT INTO "usage" VALUES('EPSG','10835','helmert_transformation','EPSG','8895','EPSG','1286','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','8913','CR05 to CR-SIRGAS (1)','Derived at 16 stations. CR05 is static, CR-SIRGAS is dynamic: transformation is valid at epoch 2014.59 but accuracy will deteriorate due to tectonic motion. May be taken as an approximate transformation to ITRF08 / IGb08 / WGS 84 - see code 8914.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','5364','EPSG','8906',0.5,-0.16959,0.35312,0.51846,'EPSG','9001',-0.03385,0.16325,-0.03446,'EPSG','9104',0.03693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri 2014',1); INSERT INTO "usage" VALUES('EPSG','10836','helmert_transformation','EPSG','8913','EPSG','1074','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','8914','CR05 to WGS 84 (2)','Parameter vales are from CR05 to CR-SIRGAS (1) (code 8913) assuming that CR-SIRGAS (ITRF08 (IGb08)@2014.59) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','5364','EPSG','4326',1.0,-0.16959,0.35312,0.51846,'EPSG','9001',-0.03385,0.16325,-0.03446,'EPSG','9104',0.03693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri 2014',1); INSERT INTO "usage" VALUES('EPSG','10837','helmert_transformation','EPSG','8914','EPSG','1074','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','8952','ITRF97 to SIRGAS-CON DGF00P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4918','EPSG','8915',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2000.4,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10838','helmert_transformation','EPSG','8952','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8953','ITRF2000 to SIRGAS-CON DGF01P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','8917',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10839','helmert_transformation','EPSG','8953','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8954','ITRF2000 to SIRGAS-CON DGF01P02 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','8919',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1998.4,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10840','helmert_transformation','EPSG','8954','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8955','ITRF2000 to SIRGAS-CON DGF02P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','8921',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10841','helmert_transformation','EPSG','8955','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8956','ITRF2000 to SIRGAS-CON DGF04P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','8923',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2003.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10842','helmert_transformation','EPSG','8956','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8957','ITRF2000 to SIRGAS-CON DGF05P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','8925',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2004.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10843','helmert_transformation','EPSG','8957','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8958','ITRF2000 to SIRGAS-CON DGF06P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','8927',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2004.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10844','helmert_transformation','EPSG','8958','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8959','IGS05 to SIRGAS-CON DGF07P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9010','EPSG','8929',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2004.5,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10845','helmert_transformation','EPSG','8959','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8960','IGS05 to SIRGAS-CON DGF08P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9010','EPSG','8931',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2004.5,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10846','helmert_transformation','EPSG','8960','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8961','IGS05 to SIRGAS-CON SIR09P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9010','EPSG','8933',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10847','helmert_transformation','EPSG','8961','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8962','ITRF2008 to SIRGAS-CON SIR10P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','5332','EPSG','8935',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10848','helmert_transformation','EPSG','8962','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8963','ITRF2008 to SIRGAS-CON SIR11P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','5332','EPSG','8937',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10849','helmert_transformation','EPSG','8963','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8964','IGb08 to SIRGAS-CON SIR13P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9015','EPSG','8939',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2012.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10850','helmert_transformation','EPSG','8964','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8965','IGb08 to SIRGAS-CON SIR14P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9015','EPSG','8941',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2013.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10851','helmert_transformation','EPSG','8965','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8966','IGb08 to SIRGAS-CON SIR15P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9015','EPSG','8943',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2013.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10852','helmert_transformation','EPSG','8966','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8967','IGS14 to SIRGAS-CON SIR17P01 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8227','EPSG','8945',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10853','helmert_transformation','EPSG','8967','EPSG','4530','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','8968','CR05 to CR-SIRGAS (1)','Derived at 16 stations. CR05 is static, CR-SIRGAS is dynamic: transformation is valid at epoch 2014.59 but accuracy will deteriorate due to tectonic motion. May be taken as an approximate transformation to ITRF08 / IGb08 / WGS 84 - see code 8969.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','5365','EPSG','8907',0.5,-0.16959,0.35312,0.51846,'EPSG','9001',-0.03385,0.16325,-0.03446,'EPSG','9104',0.03693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri 2014',1); INSERT INTO "usage" VALUES('EPSG','10854','helmert_transformation','EPSG','8968','EPSG','1074','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','8969','CR05 to WGS 84 (2)','Parameter vales are from CR05 to CR-SIRGAS (1) (code 8968) assuming that CR-SIRGAS (ITRF08 (IGb08)@2014.59) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','5365','EPSG','4326',1.0,-0.16959,0.35312,0.51846,'EPSG','9001',-0.03385,0.16325,-0.03446,'EPSG','9104',0.03693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri 2014',1); INSERT INTO "usage" VALUES('EPSG','10855','helmert_transformation','EPSG','8969','EPSG','1074','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','8970','ITRF2014 to NAD83(2011) (1)','Concatenation of joint US-Canada tfm NAD83(CORS96)>ITRF96 (CT code 6864) with IGS value for ITRF96>ITRF97 and IERS values for ITRF97>ITRF2014 CTs. Scale difference in ppb and rate in ppb/yr where 1/billion = 1E-9. See tfm 8265 for Canadian equivalent.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7789','EPSG','6317',0.0,1.0053,-1.90921,-0.54157,'EPSG','9001',26.78138,-0.42027,10.93206,'EPSG','1031',0.36891,'EPSG','1028',0.00079,-0.0006,-0.00144,'EPSG','1042',0.06667,-0.75744,-0.05133,'EPSG','1032',-0.07201,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-Usa CONUS-AK PRVI',0); INSERT INTO "usage" VALUES('EPSG','10856','helmert_transformation','EPSG','8970','EPSG','1511','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','8971','NAD83 to NAD83(2011) (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4269','EPSG','6318',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Usa GoM',0); INSERT INTO "usage" VALUES('EPSG','10857','helmert_transformation','EPSG','8971','EPSG','3357','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9020','ITRF88 to ITRF89 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Superseded by parameter values derived from transformations to ITRF2020 (change in scale difference), see EPSG:10139.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4910','EPSG','4911',0.01,0.5,3.6,2.4,'EPSG','1033',-0.1,0.0,0.0,'EPSG','1031',-3.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10858','helmert_transformation','EPSG','9020','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9021','ITRF89 to ITRF90 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Superseded by parameter values derived from transformations to ITRF2020 (change in scale difference), see EPSG:10140.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4911','EPSG','4912',0.01,-0.5,-2.4,3.8,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-3.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10859','helmert_transformation','EPSG','9021','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9022','ITRF90 to ITRF91 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Superseded by parameter values derived from transformations to ITRF2020 (change in tX), see EPSG:10141.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4912','EPSG','4913',0.007,-0.1,0.4,1.6,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-0.3,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10860','helmert_transformation','EPSG','9022','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9023','ITRF91 to ITRF92 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Superseded by parameter values derived from transformations to ITRF2020 (change in tX), see EPSG:10142.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4913','EPSG','4914',0.005,-1.1,-1.4,0.6,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-1.4,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10861','helmert_transformation','EPSG','9023','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9024','ITRF92 to ITRF93 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Note: info source gives translation rates in mm/year.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','4915',0.003,-0.2,-0.7,-0.7,'EPSG','1033',-0.39,0.8,-0.96,'EPSG','1031',1.2,'EPSG','1028',-0.29,0.04,0.08,'EPSG','1034',-0.11,-0.19,0.05,'EPSG','1032',0.0,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10862','helmert_transformation','EPSG','9024','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9025','ITRF93 to ITRF94 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Superseded by parameter values derived from transformations to ITRF2020 (change in scale difference), see EPSG:10143.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','4916',0.01,-0.6,0.5,1.5,'EPSG','1033',0.39,-0.8,0.96,'EPSG','1031',-0.4,'EPSG','1028',0.29,-0.04,-0.08,'EPSG','1034',0.11,0.19,-0.05,'EPSG','1032',0.0,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10863','helmert_transformation','EPSG','9025','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9026','ITRF94 to ITRF96 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. ITRF96 is by definition aligned with ITRF94.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4916','EPSG','4917',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10864','helmert_transformation','EPSG','9026','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9027','ITRF96 to ITRF97 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. ITRF97 is by definition aligned with ITRF96.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4917','EPSG','4918',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10865','helmert_transformation','EPSG','9027','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9028','ITRF97 to IGS97 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS97 is by definition aligned with ITRF97.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4918','EPSG','9001',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10866','helmert_transformation','EPSG','9028','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9029','ITRF2000 to IGS00 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS00 is by definition aligned with ITRF2000.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','9004',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1998.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10867','helmert_transformation','EPSG','9029','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9030','ITRF2005 to IGS05 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS05 is by definition aligned with ITRF2005.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4896','EPSG','9010',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10868','helmert_transformation','EPSG','9030','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9031','ITRF2008 to IGS08 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS08 is by definition aligned with ITRF2008.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','5332','EPSG','6934',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10869','helmert_transformation','EPSG','9031','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9032','ITRF2014 to IGS14 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS14 is by definition aligned with ITRF2014.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','7789','EPSG','8227',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10870','helmert_transformation','EPSG','9032','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9033','IGS97 to IGS00 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9001','EPSG','9004',0.007,-6.0,-5.6,20.1,'EPSG','1025',-0.04,0.001,0.043,'EPSG','1031',-1.403,'EPSG','1028',0.4,0.8,1.5,'EPSG','1027',0.004,-0.001,-0.003,'EPSG','1032',-0.012,'EPSG','1030',1998.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10871','helmert_transformation','EPSG','9033','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9034','IGS00 to IGb00 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS00 and IGb00 are both by definition aligned with ITRF2000. The actual IGS00-IGb00 transformation parameter values are not null but are statistically insignificant and treated as null by IGS.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9004','EPSG','9007',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1998.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10872','helmert_transformation','EPSG','9034','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9035','IGb00 to IGS05 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9007','EPSG','9010',0.001,0.0,1.7,5.3,'EPSG','1025',0.0224,-0.0341,0.0099,'EPSG','1031',-0.8473,'EPSG','1028',0.4,-0.7,1.8,'EPSG','1027',-0.0033,0.0001,0.0161,'EPSG','1032',-0.1748,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10873','helmert_transformation','EPSG','9035','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9036','IGS05 to IGS08 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9010','EPSG','6934',0.001,1.5,0.0,5.8,'EPSG','1025',-0.012,0.014,0.014,'EPSG','1031',-1.04,'EPSG','1028',-0.1,0.0,-0.1,'EPSG','1027',-0.002,-0.003,0.001,'EPSG','1032',0.01,'EPSG','1030',2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10874','helmert_transformation','EPSG','9036','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9037','IGS08 to IGb08 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS08 and IGb08 are both by definition aligned with ITRF2008.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','6934','EPSG','9015',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10875','helmert_transformation','EPSG','9037','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9038','IGb08 to IGS14 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Parameter values from ITRF2008 to ITRF2014 (1) (code 7790) as IGb08 is aligned to ITRF2008 and IGS14 is aligned to ITRF2014.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9015','EPSG','8227',0.01,-1.6,-1.9,-2.4,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.02,'EPSG','1028',0.0,0.0,0.1,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10876','helmert_transformation','EPSG','9038','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9051','ITRF94 to SIRGAS 1995 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4916','EPSG','4974',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1995.4,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-S Am',0); INSERT INTO "usage" VALUES('EPSG','10887','helmert_transformation','EPSG','9051','EPSG','3448','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9052','ITRF2000 to SIRGAS 2000 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','4988',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2000.4,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0); INSERT INTO "usage" VALUES('EPSG','10888','helmert_transformation','EPSG','9052','EPSG','3418','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9076','WGS 84 (G873) to ITRF94 (1)','Defined at epoch 1997.0.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7658','EPSG','4916',0.1,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 1997.0',0); INSERT INTO "usage" VALUES('EPSG','10890','helmert_transformation','EPSG','9076','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9077','ITRF2000 to NAD83(MARP00) (1)','Defines NAD83(MARP00). Equivalent transformation published on NGS web site and used in HDTP with rX=28.971 mas, rY=10.420 mas and rZ=8.928 mas at epoch 1997.00.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','9070',0.0,0.9102,-2.0141,-0.5602,'EPSG','9001',29.039,10.065,10.101,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',-0.02,0.105,-0.347,'EPSG','1032',0.0,'EPSG','1030',1993.62,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-MA',0); INSERT INTO "usage" VALUES('EPSG','10891','helmert_transformation','EPSG','9077','EPSG','4167','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9078','ITRF2000 to NAD83(PACP00) (1)','Defines NAD83(PACP00). Equivalent transformation published on NGS web site and used in HDTP with rX=27.741 mas, rY=13.469 mas and rZ=2.712 mas at epoch 1997.00.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','9073',0.0,0.9102,-2.0141,-0.5602,'EPSG','9001',29.039,10.065,10.101,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',-0.384,1.007,-2.186,'EPSG','1032',0.0,'EPSG','1030',1993.62,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-PA',0); INSERT INTO "usage" VALUES('EPSG','10892','helmert_transformation','EPSG','9078','EPSG','4162','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9079','ITRF97 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Uses IGS determination. Used as first step in ITRF97 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','4917',0.01,0.0,-0.51,15.53,'EPSG','1025',-0.16508,0.26897,0.05984,'EPSG','1031',-1.51099,'EPSG','1028',0.69,-0.1,1.86,'EPSG','1027',-0.01347,0.01514,-0.00027,'EPSG','1032',-0.19201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 97',0); INSERT INTO "usage" VALUES('EPSG','10893','helmert_transformation','EPSG','9079','EPSG','1175','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9080','ITRF2000 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2000 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','4917',0.01,6.7,3.79,-7.17,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',0.06901,'EPSG','1028',0.69,-0.7,0.46,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.18201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2000',0); INSERT INTO "usage" VALUES('EPSG','10894','helmert_transformation','EPSG','9080','EPSG','1175','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9081','ITRF2005 to ITRF96 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2005 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','4917',0.01,6.8,2.99,-12.97,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',0.46901,'EPSG','1028',0.49,-0.6,-1.34,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.10201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2005',0); INSERT INTO "usage" VALUES('EPSG','10895','helmert_transformation','EPSG','9081','EPSG','1175','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9082','ITRF2008 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2008 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','4917',0.01,4.8,2.09,-17.67,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',1.40901,'EPSG','1028',0.79,-0.6,-1.34,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.10201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2008',0); INSERT INTO "usage" VALUES('EPSG','10896','helmert_transformation','EPSG','9082','EPSG','1175','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9083','ITRF2014 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2014 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','4917',0.01,6.4,3.99,-14.27,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',1.08901,'EPSG','1028',0.79,-0.6,-1.44,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.07201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2014',0); INSERT INTO "usage" VALUES('EPSG','10897','helmert_transformation','EPSG','9083','EPSG','1175','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9126','NAD83(CSRS)v2 to NAD83(CORS96) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF96 by common transformations (codes 6864 and 8259). 6864 defines CORS96 from 1st January 1997 to 31st December 1999.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8233','EPSG','6781',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0); INSERT INTO "usage" VALUES('EPSG','10940','helmert_transformation','EPSG','9126','EPSG','4544','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9127','NAD83(CSRS)v3 to NAD83(CORS96) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF97 by common transformations (codes 6865 and 8260). 6865 defines CORS96 from 1st January 2000 to 31st December 2001.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8238','EPSG','6781',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0); INSERT INTO "usage" VALUES('EPSG','10941','helmert_transformation','EPSG','9127','EPSG','4544','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9128','NAD83(CSRS)v4 to NAD83(CORS96) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF2000 by common transformations (codes 6866 and 8261). 6866 defines CORS96 from 1st January 2002 to 6th September 2011.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8242','EPSG','6781',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0); INSERT INTO "usage" VALUES('EPSG','10942','helmert_transformation','EPSG','9128','EPSG','4544','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9129','NAD83(CSRS)v6 to NAD83(2011) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF2008 by common transformations (codes 7807 and 8264).','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8250','EPSG','6317',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0); INSERT INTO "usage" VALUES('EPSG','10943','helmert_transformation','EPSG','9129','EPSG','4544','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9142','MGI 1901 to KOSOVAREF01 (1)','Derived at 18 points across the area of Kosovo. May be taken as approximate transformation MGI 1901 to WGS 84 (see code 9143).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','9140',1.0,628.54052,192.2538,498.43507,'EPSG','9001',-13.79189,-0.81467,41.21533,'EPSG','9104',-17.40368,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KCA-Kos',0); INSERT INTO "usage" VALUES('EPSG','10951','helmert_transformation','EPSG','9142','EPSG','4542','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9143','MGI 1901 to WGS 84 (14)','Parameter values from MGI 1901 to KOSOVAREF01 (1) (code 9142). Assumes KOSOVAREF01 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,628.54052,192.2538,498.43507,'EPSG','9001',-13.79189,-0.81467,41.21533,'EPSG','9104',-17.40368,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Kos',0); INSERT INTO "usage" VALUES('EPSG','10952','helmert_transformation','EPSG','9143','EPSG','4542','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9144','KOSOVAREF01 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. KOSOVAREF01 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9140','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Kos',0); INSERT INTO "usage" VALUES('EPSG','10953','helmert_transformation','EPSG','9144','EPSG','4542','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9145','WGS 84 (Transit) to ITRF90 (1)','','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','7815','EPSG','4912',1.0,-0.06,0.517,0.223,'EPSG','9001',-0.0183,0.0003,-0.007,'EPSG','9104',0.011,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','10954','helmert_transformation','EPSG','9145','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9177','SIRGAS-Chile 2002 to ITRF2000 (1)','Transformation is exact at epoch 2002.00 but accuracy then decreasing with time.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','5358','EPSG','4919',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2002.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0); INSERT INTO "usage" VALUES('EPSG','10972','helmert_transformation','EPSG','9177','EPSG','1066','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9178','SIRGAS-Chile 2010 to IGS08 (1)','Transformation is exact at epoch 2010.00 but accuracy then decreasing with time.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8947','EPSG','6934',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0); INSERT INTO "usage" VALUES('EPSG','10973','helmert_transformation','EPSG','9178','EPSG','1066','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9179','SIRGAS-Chile 2013 to IGb08 (1)','Transformation is exact at epoch 2013.00 but accuracy then decreasing with time.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9146','EPSG','9015',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2013.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0); INSERT INTO "usage" VALUES('EPSG','10974','helmert_transformation','EPSG','9179','EPSG','1066','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9180','SIRGAS-Chile 2016 to IGb08 (1)','Transformation is exact at epoch 2016.00 but accuracy then decreasing with time.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9151','EPSG','9015',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2016.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0); INSERT INTO "usage" VALUES('EPSG','10975','helmert_transformation','EPSG','9180','EPSG','1066','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9185','AGD66 to GDA2020 (1)','This transformation is for users wanting to apply a 7-parameter conformal transformation from AGD66 to GDA2020 in the ACT.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','7844',0.05,-136.9703,-37.5638,124.4242,'EPSG','9001',-0.25676,-0.42966,-0.30077,'EPSG','9104',-4.61966,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPD-Aus ACT',0); INSERT INTO "usage" VALUES('EPSG','10977','helmert_transformation','EPSG','9185','EPSG','2283','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9186','ITRF2008 to IG05/12 Intermediate CRS','Derived from Israeli CORS on ITRF2008 at epoch 2018.50. Updates CT 6993 for approx. 40cm tectonic plate motion 2012 to 2019 for GIS purposes. CT 6993 remains the legal definition of IG05/12 and must be used for cadastral and precise engineering purposes.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8999','EPSG','6990',0.05,-23.772,-17.49,-17.859,'EPSG','9001',-0.3132,-1.85274,1.67299,'EPSG','9104',5.4262,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr 2019',0); INSERT INTO "usage" VALUES('EPSG','10978','helmert_transformation','EPSG','9186','EPSG','2603','EPSG','1189'); INSERT INTO "helmert_transformation" VALUES('EPSG','9189','WGS 84 to IG05/12 Intermediate CRS','Parameter values from CT code 9186 assuming that WGS 84 is coincident with ITRF2008. Updates CT 6993 for approx 40cm tectonic plate motion for GIS purposes. CT 6993 remains the legal definition of IG05/12 and must be used for cadastre and engineering.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','6990',0.1,-23.772,-17.49,-17.859,'EPSG','9001',-0.3132,-1.85274,1.67299,'EPSG','9104',5.4262,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr 2019',0); INSERT INTO "usage" VALUES('EPSG','10981','helmert_transformation','EPSG','9189','EPSG','2603','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9223','WGS 84 to ETRS89 (2)','Parameter values derived from ITRF2008 to ETRF2000 (1), code 7951, as a time-specific transformation @2014.81, assuming ITRF2008 = WGS 84 (G1762) = WGS 84 and ETRF2000 = ETRS89.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4936','EPSG','4978',0.1,0.054,0.051,-0.085,'EPSG','9001',0.0021,0.0126,-0.0204,'EPSG','9104',0.0025,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2014.81,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ONE-Deu/Nld 2014.81',1); INSERT INTO "usage" VALUES('EPSG','10998','helmert_transformation','EPSG','9223','EPSG','4566','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9224','ED50 to ETRS89 (15)','Parameter values from ED50 to WGS 84 (36) (CT 1998) assuming that ETRS89 is equivalent to WGS 84 at epoch 1989.00.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258',1.0,-157.89,-17.16,-78.41,'EPSG','9001',2.118,2.697,-1.434,'EPSG','9104',-5.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ONE-Ger Nsea',0); INSERT INTO "usage" VALUES('EPSG','10999','helmert_transformation','EPSG','9224','EPSG','4566','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9225','WGS 84 to ETRS89 (2)','Parameter values derived from ITRF2008 to ETRF2000 (1), code 7951, as a time-specific transformation @2014.81, assuming ITRF2008 = WGS 84 (G1762) = WGS 84 and ETRF2000 = ETRS89.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4978','EPSG','4936',0.1,0.054,0.051,-0.085,'EPSG','9001',0.0021,0.0126,-0.0204,'EPSG','9104',0.0025,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2014.81,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ONE-Deu/Nld 2014.81',0); INSERT INTO "usage" VALUES('EPSG','11000','helmert_transformation','EPSG','9225','EPSG','4566','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9226','SHGD2015 to Astro DOS 71 (2)','Derived at 19 stations, RMS = 6cm. Note: Because of the large rotations about the Y- and Z-axes this transformation is not reversible. For the reverse transformation use Astro DOS 71 to SHGD2015 (2) (code 7895).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','7886','EPSG','4710',0.1,112.771,-12.282,18.935,'EPSG','9001',-2.1692,-16.8896,-17.1961,'EPSG','9104',19.54517,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel 0.1m Rev',0); INSERT INTO "usage" VALUES('EPSG','13866','helmert_transformation','EPSG','9226','EPSG','3183','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','9227','ITRF2005 to NAD83(CSRS)v5 (1)','Concatenation of joint Canada-US NAD83>ITRF96 transformation (code 8259) with IGS value for ITRF96>ITRF97 and IERS transformations ITRF97>ITRF2005. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','8247',0.0,0.9963,-1.9024,-0.5219,'EPSG','9001',-25.915,-9.426,-11.599,'EPSG','1031',0.775,'EPSG','1028',0.0005,-0.0006,-0.0013,'EPSG','1042',-0.067,0.757,0.051,'EPSG','1032',-0.102,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv5',0); INSERT INTO "usage" VALUES('EPSG','13867','helmert_transformation','EPSG','9227','EPSG','1061','EPSG','1170'); INSERT INTO "helmert_transformation" VALUES('EPSG','9234','Kalianpur 1962 to WGS 84 (5)','Derived by Western Geophysical for UTP 1996 East Sind 2D survey. Very similar parameter values (higher resolution but no better accuracy) were used by BGP for the ENI 2006 East Sind 2D survey.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4145','EPSG','4326',3.0,230.25,632.76,161.03,'EPSG','9001',-1.114,1.115,1.212,'EPSG','9104',12.584,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak E Sind',0); INSERT INTO "usage" VALUES('EPSG','13923','helmert_transformation','EPSG','9234','EPSG','2983','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','9257','Chos Malal 1914 to WGS 84 (2)','Derived through common coordinates at 13 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4160','EPSG','4326',2.5,8.88,184.86,106.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg Cuyo',0); INSERT INTO "usage" VALUES('EPSG','13925','helmert_transformation','EPSG','9257','EPSG','4561','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9258','Chos Malal 1914 to WGS 84 (3)','Derived through common coordinates at 43 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4160','EPSG','4326',2.5,15.75,164.93,126.18,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg Neuq',0); INSERT INTO "usage" VALUES('EPSG','13926','helmert_transformation','EPSG','9258','EPSG','1292','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9259','Pampa del Castillo to WGS 84 (2)','Derived through common coordinates at 22 stations. Used by YPF throughout the Golfo San Jorge basin.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4161','EPSG','4326',2.5,-233.43,6.65,173.64,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg GSJB',0); INSERT INTO "usage" VALUES('EPSG','13927','helmert_transformation','EPSG','9259','EPSG','4572','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9260','Tapi Aike to WGS 84 (1)','Used by YPF throughout the Tapi Aike basin.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9248','EPSG','4326',5.0,-192.26,65.72,132.08,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg TapiAike',0); INSERT INTO "usage" VALUES('EPSG','13928','helmert_transformation','EPSG','9260','EPSG','4569','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9261','MMN to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9251','EPSG','4326',2.5,-9.5,122.9,138.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg MMN',0); INSERT INTO "usage" VALUES('EPSG','13929','helmert_transformation','EPSG','9261','EPSG','2357','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9262','MMS to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9253','EPSG','4326',2.5,-78.1,101.6,133.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg MMS',0); INSERT INTO "usage" VALUES('EPSG','13930','helmert_transformation','EPSG','9262','EPSG','2357','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9263','Hito XVIII 1963 to WGS 84 (3)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4254','EPSG','4326',2.5,18.2,190.7,100.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg TdF Hito',0); INSERT INTO "usage" VALUES('EPSG','13931','helmert_transformation','EPSG','9263','EPSG','2357','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9264','POSGAR 2007 to WGS 84 (2)','Derived as average at all points common between the POSGAR 94 and POSGAR 2007 networks. Accuracy 0.1m in 1994 increasing by approximately 1.5cm per year due to tectonic plate motion.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5340','EPSG','4326',0.5,-0.41,0.46,-0.35,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg',0); INSERT INTO "usage" VALUES('EPSG','13932','helmert_transformation','EPSG','9264','EPSG','1033','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9281','Amersfoort to ETRS89 (8)','Replaces Amersfoort to ETRS89 (5) and (6) (tfm codes 4830 and 4831). Derived using ETRF2000. In official transformation used with an ellipsoidal height of 0m in Amersfoort or 43m in ETRS89 and with an additional correction grid (up to 0.25m).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4258',0.25,565.7381,50.4018,465.2904,'EPSG','9001',1.91514,-1.60363,9.09546,'EPSG','9109',4.07244,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Nld 2018',0); INSERT INTO "usage" VALUES('EPSG','13938','helmert_transformation','EPSG','9281','EPSG','1275','EPSG','1048'); INSERT INTO "helmert_transformation" VALUES('EPSG','9291','ISN2016 to WGS 84 (1)','For many purposes ISN2016 can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8086','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LMI-Isl',0); INSERT INTO "usage" VALUES('EPSG','14126','helmert_transformation','EPSG','9291','EPSG','1120','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9298','ONGD17 to WGS 84 (1)','','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','9292','EPSG','4978',0.1,1.16835,-1.42001,-2.24431,'EPSG','9001',0.00822,0.05508,-0.01818,'EPSG','9104',0.23388,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSA-Omn',0); INSERT INTO "usage" VALUES('EPSG','13971','helmert_transformation','EPSG','9298','EPSG','1183','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9334','ITRF2014 to KSA-GRF17 (1)','Arabian plate rotations derived from obs. at 41 sites with at least 2.5y of continuous observations. May be approximated by position vector CT with rX=8.393 mas, rY=-0.749 mas, rZ=10.276 mas, valid at 2017.0, and degrading by ~2.5cm per year (code 9383).','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','9331',0.001,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',-1.199,0.107,-1.468,'EPSG','1032',0.0,'EPSG','1030',2017.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GCS-Sau',0); INSERT INTO "usage" VALUES('EPSG','13960','helmert_transformation','EPSG','9334','EPSG','1206','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9339','PSAD56 to SIRGAS-Chile 2010 (1)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6971.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','8949',5.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0); INSERT INTO "usage" VALUES('EPSG','14107','helmert_transformation','EPSG','9339','EPSG','4231','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9340','PSAD56 to SIRGAS-Chile 2010 (2)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6972.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','8949',5.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0); INSERT INTO "usage" VALUES('EPSG','14108','helmert_transformation','EPSG','9340','EPSG','4222','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9341','PSAD56 to SIRGAS-Chile 2010 (3)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6973.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','8949',5.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0); INSERT INTO "usage" VALUES('EPSG','14109','helmert_transformation','EPSG','9341','EPSG','4221','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9342','PSAD56 to SIRGAS-Chile 2013 (1)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6971.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9148',5.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0); INSERT INTO "usage" VALUES('EPSG','14110','helmert_transformation','EPSG','9342','EPSG','4231','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9343','PSAD56 to SIRGAS-Chile 2013 (2)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6972.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9148',5.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0); INSERT INTO "usage" VALUES('EPSG','14111','helmert_transformation','EPSG','9343','EPSG','4222','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9344','PSAD56 to SIRGAS-Chile 2013 (3)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6973.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9148',5.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0); INSERT INTO "usage" VALUES('EPSG','14112','helmert_transformation','EPSG','9344','EPSG','4221','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9345','PSAD56 to SIRGAS-Chile 2016 (1)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6971.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9153',5.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0); INSERT INTO "usage" VALUES('EPSG','14113','helmert_transformation','EPSG','9345','EPSG','4231','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9346','PSAD56 to SIRGAS-Chile 2016 (2)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6972.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9153',5.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0); INSERT INTO "usage" VALUES('EPSG','14114','helmert_transformation','EPSG','9346','EPSG','4222','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9347','PSAD56 to SIRGAS-Chile 2016 (3)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6973.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9153',5.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0); INSERT INTO "usage" VALUES('EPSG','14115','helmert_transformation','EPSG','9347','EPSG','4221','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9348','SAD69 to SIRGAS-Chile 2010 (4)','Also used as a transformation from SAD69 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6977.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','8949',5.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl D',0); INSERT INTO "usage" VALUES('EPSG','14116','helmert_transformation','EPSG','9348','EPSG','2805','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9349','SAD69 to SIRGAS-Chile 2013 (4)','Also used as a transformation from SAD69 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6977.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','9148',5.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl D',0); INSERT INTO "usage" VALUES('EPSG','14117','helmert_transformation','EPSG','9349','EPSG','2805','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9350','SAD69 to SIRGAS-Chile 2016 (4)','Also used as a transformation from SAD69 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6977.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','9153',5.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl D',0); INSERT INTO "usage" VALUES('EPSG','14118','helmert_transformation','EPSG','9350','EPSG','2805','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','9361','MTRF-2000 to KSA-GRF17 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','8818','EPSG','9333',0.1,0.0469,-0.2827,0.0866,'EPSG','9001',0.00559,-0.004981,0.023108,'EPSG','9104',-0.008051,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GCS-Sau',0); INSERT INTO "usage" VALUES('EPSG','14008','helmert_transformation','EPSG','9361','EPSG','1206','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9362','Ain el Abd to KSA-GRF17 (1)','For a more accurate transformation see Ain el Abd to KSA-GRF17 (2) (CT code 9363)','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4204','EPSG','9333',2.0,13.8714,-83.9721,101.674,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GCS-Sau 2m',0); INSERT INTO "usage" VALUES('EPSG','14009','helmert_transformation','EPSG','9362','EPSG','3303','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9381','ITRF2014 to IGb14 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGb14 is aligned with IGS14 which by definition aligned with ITRF2014.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','7789','EPSG','9378',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','14005','helmert_transformation','EPSG','9381','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9382','IGS14 to IGb14 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS14 and IGb14 are both by definition aligned with ITRF2014.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8227','EPSG','9378',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','14006','helmert_transformation','EPSG','9382','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9383','KSA-GRF17 to WGS 84 (1)','Derived from ITRF2014 to KSA-GRF17 (1) (CT code 9334). Valid at 2017.00 and degrading by approximately 2.5cm per year.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','9333','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',-8.393,0.749,-10.276,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GCS-Sau',0); INSERT INTO "usage" VALUES('EPSG','14007','helmert_transformation','EPSG','9383','EPSG','1206','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9459','ATRF2014 to GDA2020 (1)','Describes movement of ATRF2014 relative to GDA2020 due to Australian tectonic plate motion. Derived at 109 stations of the Australian Regional GNSS network (ARGN). Scale difference (dS) in ppb and dS rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','9307','EPSG','7842',0.03,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',1.50379,1.18346,1.20716,'EPSG','1032',0.0,'EPSG','1030',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus',0); INSERT INTO "usage" VALUES('EPSG','14139','helmert_transformation','EPSG','9459','EPSG','4177','EPSG','1267'); INSERT INTO "helmert_transformation" VALUES('EPSG','9460','ITRF2014 to ATRF2014 (1)','ATRF2014 is a regional densification of ITRF2014 for the Australian region.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7789','EPSG','9307',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus',0); INSERT INTO "usage" VALUES('EPSG','14140','helmert_transformation','EPSG','9460','EPSG','4177','EPSG','1268'); INSERT INTO "helmert_transformation" VALUES('EPSG','9472','DGN95 to SRGI2013 (1)','Derived at 533 stations. Mean residual 0.218m. Note: information source gives rotations given in radians.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4755','EPSG','9470',0.2,-0.2773,0.0534,0.4819,'EPSG','9001',0.0935,-0.0286,0.00969,'EPSG','9109',-0.028,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SRGI-Idn',0); INSERT INTO "usage" VALUES('EPSG','14154','helmert_transformation','EPSG','9472','EPSG','1122','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9486','MGI 1901 to WGS 84 (15)','Parameter values from MGI 1901 to ETRS89 (8) (code 9495). Assumes SRB-ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,577.84843,165.45019,390.43652,'EPSG','9001',-4.93131,0.96052,13.05072,'EPSG','9104',7.86546,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Srb 2020',0); INSERT INTO "usage" VALUES('EPSG','14220','helmert_transformation','EPSG','9486','EPSG','4543','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9495','MGI 1901 to SRB-ETRS89 (8)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','8685',0.46,577.84843,165.45019,390.43652,'EPSG','9001',-4.93131,0.96052,13.05072,'EPSG','9104',7.86546,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb 0.5m 2020',0); INSERT INTO "usage" VALUES('EPSG','14227','helmert_transformation','EPSG','9495','EPSG','4543','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','9676','Israel 1993 to WGS 84 (2)','Parameter values from CT code 9186 assuming that WGS 84 is coincident with ITRF2008 and New Israeli Grid 1993 is equivalent to Israeli Grid 05/12 within the accuracy of the transformation. Use in preference to Israel 1993 to WGS 84 (1) (code 1073).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4141','EPSG','4326',0.5,23.772,17.49,17.859,'EPSG','9001',0.3132,1.85274,-1.67299,'EPSG','9104',-5.4262,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr 2019',0); INSERT INTO "usage" VALUES('EPSG','14833','helmert_transformation','EPSG','9676','EPSG','2603','EPSG','1189'); INSERT INTO "helmert_transformation" VALUES('EPSG','9679','Gulshan 303 to WGS 84 (2)','Derived at origin station in Dhaka.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4682','EPSG','4326',1.0,283.729,735.942,261.143,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SB-Bgd',0); INSERT INTO "usage" VALUES('EPSG','14836','helmert_transformation','EPSG','9679','EPSG','1041','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9682','ITRF2014 to GDA94 (1)','Concatenation of ITRF2014 to GDA2020 (1) (CT 8049) and GDA94 to GDA2020 (1) (CT 8048). Scale difference in ppb and rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ITRF2014 to GDA94 (2) (CT 9683) for alternative for Australia with distortion modelling.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7789','EPSG','4938',0.035,-61.55,10.87,40.19,'EPSG','1025',39.4924,32.7221,32.8979,'EPSG','1031',9.994,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',1.50379,1.18346,1.20716,'EPSG','1032',0.0,'EPSG','1030',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf',0); INSERT INTO "usage" VALUES('EPSG','14950','helmert_transformation','EPSG','9682','EPSG','4177','EPSG','1108'); INSERT INTO "helmert_transformation" VALUES('EPSG','9684','ATRF2014 to GDA94 (1)','Concatenation of ATRF2014 to GDA2020 (1) (CT 9459) and GDA94 to GDA2020 (1) (CT 8048). Scale difference in ppb and rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ATRF2014 to GDA94 (2) (CT 9685) for alternative for Australia with distortion modelling.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','9307','EPSG','4938',0.035,-61.55,10.87,40.19,'EPSG','1025',39.4924,32.7221,32.8979,'EPSG','1031',9.994,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',1.50379,1.18346,1.20716,'EPSG','1032',0.0,'EPSG','1030',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf',0); INSERT INTO "usage" VALUES('EPSG','14952','helmert_transformation','EPSG','9684','EPSG','4177','EPSG','1108'); INSERT INTO "helmert_transformation" VALUES('EPSG','9686','GDA94 to WGS 84 (G1762) (1)','Concatenation of transformations codes 8048 and 8448 through GDA2020. Scale difference in ppb and rate in ppb/yr where 1/billion = 1E-9 or nm/m. See GDA94 to WGS 84 (G1762) (2) (CT 9687) for alternative for Australia with distortion modelling.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4938','EPSG','7664',0.25,61.55,-10.87,-40.19,'EPSG','1025',-39.4924,-32.7221,-32.8979,'EPSG','1031',-9.994,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',-1.50379,-1.18346,-1.20716,'EPSG','1032',0.0,'EPSG','1030',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf',0); INSERT INTO "usage" VALUES('EPSG','14956','helmert_transformation','EPSG','9686','EPSG','4177','EPSG','1108'); INSERT INTO "helmert_transformation" VALUES('EPSG','9688','GDA94 to WGS 84 (2)','Concatenation of CTs 8048 and 8450 through GDA2020. Scale difference in ppb where 1/billion = 1E-9. See GDA94 to WGS 84 (2) (CT code 9689) for alternative for Australia including distortion model.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4283','EPSG','4326',3.0,61.55,-10.87,-40.19,'EPSG','1025',-39.4924,-32.7221,-32.8979,'EPSG','1031',-9.994,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf',0); INSERT INTO "usage" VALUES('EPSG','14921','helmert_transformation','EPSG','9688','EPSG','4177','EPSG','1275'); INSERT INTO "helmert_transformation" VALUES('EPSG','9690','WGS 84 to GDA2020 (3)','Concatenation of CTs 1150 and 8048 through GDA94. Scale difference in ppb where 1/billion = 1E-9. See WGS 84 to GDA2020 (4) (CT code 9691) for alternative for Australia including distortion model.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','7844',3.0,61.55,-10.87,-40.19,'EPSG','1025',-39.4924,-32.7221,-32.8979,'EPSG','1031',-9.994,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus Conf',0); INSERT INTO "usage" VALUES('EPSG','14920','helmert_transformation','EPSG','9690','EPSG','4177','EPSG','1276'); INSERT INTO "helmert_transformation" VALUES('EPSG','9703','ETRF2000-PL to ETRS89 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9702','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Pol',0); INSERT INTO "usage" VALUES('EPSG','15011','helmert_transformation','EPSG','9703','EPSG','1192','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','9743','PN68 to WGS 84 (1)','Determined at 1 satellite station. Accuracy +/- 25m in each axis. Unclear from information source whether the source CRS is PN68 or PN84 - see also CT code 15815. Given the accuracy, can be considered to apply to either.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9403','EPSG','4326',44.0,-307.0,-92.0,127.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Esp Canary',0); INSERT INTO "usage" VALUES('EPSG','15321','helmert_transformation','EPSG','9743','EPSG','3873','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','9751','CR05 to CR-SIRGAS (1)','Derived at 16 stations. Transformation is valid at epoch 2014.59 but accuracy will deteriorate due to tectonic deformation. May be taken as an approximate transformation to ITRF08 / IGb08 / WGS 84 - see code 9752.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5365','EPSG','8907',0.5,-0.16959,0.35312,0.51846,'EPSG','9001',-0.03385,0.16325,-0.03446,'EPSG','9104',0.03693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri 2014',0); INSERT INTO "usage" VALUES('EPSG','15596','helmert_transformation','EPSG','9751','EPSG','1074','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','9752','CR05 to WGS 84 (2)','Parameter values are from CR05 to CR-SIRGAS (1) (code 9751) assuming that CR-SIRGAS (ITRF08 (IGb08)@2014.59) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5365','EPSG','4326',1.0,-0.16959,0.35312,0.51846,'EPSG','9001',-0.03385,0.16325,-0.03446,'EPSG','9104',0.03693,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Cri 2014',0); INSERT INTO "usage" VALUES('EPSG','15832','helmert_transformation','EPSG','9752','EPSG','1074','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9756','WGS 84 (G1762) to WGS 84 (G2139) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7664','EPSG','9753',0.01,0.0058,-0.0064,0.007,'EPSG','9001',0.08,0.04,0.12,'EPSG','1031',-4.4,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2021.0',0); INSERT INTO "usage" VALUES('EPSG','16692','helmert_transformation','EPSG','9756','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9757','WGS 84 (G2139) to ITRF2014 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','9753','EPSG','7789',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2021.0',0); INSERT INTO "usage" VALUES('EPSG','16664','helmert_transformation','EPSG','9757','EPSG','1262','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9768','Kyrg-06 to WGS 84 (1)','For many purposes Kyrg-06 can be considered to be coincident with WGS 84. This approximation ignores the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7686','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Kgz',0); INSERT INTO "usage" VALUES('EPSG','16666','helmert_transformation','EPSG','9768','EPSG','1137','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9769','RGWF96 to WGS 84 (1)','For many purposes RGWF96 can be considered to be coincident with WGS 84. This approximation ignores the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8900','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Wlf',0); INSERT INTO "usage" VALUES('EPSG','16667','helmert_transformation','EPSG','9769','EPSG','1255','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9770','RGTAAF07 to WGS 84 (1)','For many purposes RGTAAF07 can be considered to be coincident with WGS 84. This approximation ignores the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7073','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Atf',0); INSERT INTO "usage" VALUES('EPSG','16668','helmert_transformation','EPSG','9770','EPSG','4246','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9771','TGD2005 to WGS 84 (1)','For many purposes TGD2005 can be considered to be coincident with WGS 84. This approximation ignores the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5886','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ton',0); INSERT INTO "usage" VALUES('EPSG','16669','helmert_transformation','EPSG','9771','EPSG','1234','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9772','ETRF2000-PL to WGS 84 (1)','For many purposes ETRF2000-PL can be considered to be coincident with WGS 84. This approximation ignores the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9702','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pol',0); INSERT INTO "usage" VALUES('EPSG','16670','helmert_transformation','EPSG','9772','EPSG','1192','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9773','GSK-2011 to WGS 84 (1)','For many purposes GSK-2011 can be considered to be coincident with WGS 84. This approximation ignores the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7683','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Rus',0); INSERT INTO "usage" VALUES('EPSG','16671','helmert_transformation','EPSG','9773','EPSG','1198','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9774','NAD83(2011) to WGS 84 (1)','For many purposes NAD83(2011) can be considered to be coincident with WGS 84. This approximation ignores the ~2.2m offset of NAD83 from the geocentre, the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6318','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Usa Conus AK PRVI',0); INSERT INTO "usage" VALUES('EPSG','16675','helmert_transformation','EPSG','9774','EPSG','1511','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9788','RGF93 v2 to RGF93 v2b','Derived at 465 permanent GNSS stations. In use from 2021-01-05.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','9777','EPSG','9782',0.005,-0.017,0.058,0.009,'EPSG','9001',0.001305,0.00068,-0.001467,'EPSG','9104',-0.00072,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','16601','helmert_transformation','EPSG','9788','EPSG','1096','EPSG','1179'); INSERT INTO "helmert_transformation" VALUES('EPSG','9789','RGF93 v2 to ETRS89 (1)','RGF93 v2 is a national realization of ETRS89. May be taken as approximate transformation RGF93 v2 to WGS 84 - see code 9791.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9777','EPSG','4258',0.02,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','16638','helmert_transformation','EPSG','9789','EPSG','1096','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','9790','RGF93 v2b to ETRS89 (1)','RGF93 v2b is a national realization of ETRS89. May be taken as approximate transformation RGF93 v2b to WGS 84 - see CT code 9792.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9782','EPSG','4258',0.01,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','16656','helmert_transformation','EPSG','9790','EPSG','1096','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','9791','RGF93 v2 to WGS 84 (1)','Approximation at the 1m level assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. (RGF93 v2 is a national realization of ETRS89).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9777','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra',0); INSERT INTO "usage" VALUES('EPSG','16612','helmert_transformation','EPSG','9791','EPSG','1096','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9792','RGF93 v2b to WGS 84 (1)','Approximation at the 1m level assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. (RGF93 v2b is a national realization of ETRS89).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9782','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra',0); INSERT INTO "usage" VALUES('EPSG','16613','helmert_transformation','EPSG','9792','EPSG','1096','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9882','RGF93 v1 to RGF93 v2 (1)','Maximum differences are 0.1m in both horizontal and vertical. Distortions in RGF93 v1 are irregular and IGN considers that no systematic transformation to the improved v2 adjustment is possible.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4171','EPSG','9777',0.05,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','16986','helmert_transformation','EPSG','9882','EPSG','1096','EPSG','1079'); INSERT INTO "helmert_transformation" VALUES('EPSG','9898','LUREF to ETRS89 (5)','LUREF 2014 parameters. For an equivalent CT using the Coordinate Frame method see CT 9899. Defines LUREF between 2014 and 2020. Replaces LUREF 2006 parameters (CT 5483). Info source gives this CT in reverse direction. Derived using ETRF2000 @2013-01-27.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.0,-265.8979,76.9761,20.2504,'EPSG','9001',0.43335,3.11447,-2.63637,'EPSG','9104',0.4752,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3891,440486.4152,4846923.4466,'EPSG','9001','ACT-Lux MB 2014',0); INSERT INTO "usage" VALUES('EPSG','17305','helmert_transformation','EPSG','9898','EPSG','1146','EPSG','1282'); INSERT INTO "helmert_transformation" VALUES('EPSG','9899','LUREF to ETRS89 (6)','LUREF 2014 parameters. For an equivalent CT using the Molodensky-Badekas method see CT 9898. Defines LUREF between 2014 and 2020. Replaces LUREF 2006 parameters (CT 5485). Info source gives this CT in reverse direction. Derived using ETRF2000@2013-01-27.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4258',0.0,-189.033,14.1335,-43.0901,'EPSG','9001',0.43331,3.11448,-2.63636,'EPSG','9104',0.4752,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux CF 2014',0); INSERT INTO "usage" VALUES('EPSG','17306','helmert_transformation','EPSG','9899','EPSG','1146','EPSG','1282'); INSERT INTO "helmert_transformation" VALUES('EPSG','9901','UCS-2000 to ETRS89 (1)','Rounded parameter values taken from UCS-2000 to ITRF2000 (1) (code 7817) assuming that ETRS89 is equivalent to ITRF2000 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5561','EPSG','4258',1.0,24.0,-121.0,-76.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr SSGC',0); INSERT INTO "usage" VALUES('EPSG','17069','helmert_transformation','EPSG','9901','EPSG','1242','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9904','Camacupa 1948 to RSAO13 (3)','Parameter values taken from Camacupa 1948 to WGS 84 (6) (code 1323) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation. Equivalent to concatenation of EPSG:1323 and EPSG:8819.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','8699',8.0,-43.0,-337.0,-233.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago B7 old',0); INSERT INTO "usage" VALUES('EPSG','18357','helmert_transformation','EPSG','9904','EPSG','2319','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9905','Camacupa 1948 to RSAO13 (4)','Parameter values taken from Camacupa 1948 to WGS 84 (9) (code 1326) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation. Equivalent to concatenation of EPSG:1326 and EPSG:8819.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4220','EPSG','8699',10.0,-41.057,-374.564,-226.287,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago B16',0); INSERT INTO "usage" VALUES('EPSG','18358','helmert_transformation','EPSG','9905','EPSG','2323','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9906','Malongo 1987 to RSAO13 (1)','Parameter values taken from Malongo 1987 to WGS 84 (2) (code 1557) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation. Equivalent to concatenation of EPSG:1557 and EPSG:8819.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4259','EPSG','8699',5.0,-254.1,-5.36,-100.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago Cab90',0); INSERT INTO "usage" VALUES('EPSG','18359','helmert_transformation','EPSG','9906','EPSG','3180','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','9913','Hong Kong 1980 to Hong Kong Geodetic CS (1)','Derived via ITRF96 @ 1998.121. Published 2002-03-01. Also published as a transformation to WGS 84 - see Hong Kong 1980 to WGS 84 (1) (code 1825).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4611','EPSG','8427',1.0,-162.619,-276.959,-161.764,'EPSG','9001',-0.067753,2.243648,1.158828,'EPSG','9104',-1.094246,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LSD-HKG 2002',0); INSERT INTO "usage" VALUES('EPSG','17339','helmert_transformation','EPSG','9913','EPSG','1118','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','9936','JGD2011 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6668','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Jpn',0); INSERT INTO "usage" VALUES('EPSG','17201','helmert_transformation','EPSG','9936','EPSG','1129','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','9937','LUREF to ETRS89 (7)','LUREF 2020 parameters. For an equivalent CT using the Coordinate Frame method see CT 9938. Defines LUREF from 2020. Replaces LUREF 2014 parameters (CT 9898). Info source gives this CT in reverse direction. Derived using ETRF2000 @2013-01-27.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.0,-265.9196,76.9506,20.2222,'EPSG','9001',0.48171,3.09948,-2.68639,'EPSG','9104',0.46346,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4101567.0943,440245.0881,4848681.4115,'EPSG','9001','ACT-Lux MB 2020',0); INSERT INTO "usage" VALUES('EPSG','17307','helmert_transformation','EPSG','9937','EPSG','1146','EPSG','1283'); INSERT INTO "helmert_transformation" VALUES('EPSG','9938','LUREF to ETRS89 (8)','LUREF 2020 parameters. For an equivalent CT using the Molodensky-Badekas method see CT 9937. Defines LUREF from 2020. Replaces LUREF 2014 parameters (CT 9899). Info source gives CT in reverse direction. Derived using ETRF2000 @2013-01-27.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4258',0.0,-189.228,12.0035,-42.6303,'EPSG','9001',0.48171,3.09948,-2.68639,'EPSG','9104',0.46346,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux CF 2020',0); INSERT INTO "usage" VALUES('EPSG','17308','helmert_transformation','EPSG','9938','EPSG','1146','EPSG','1283'); INSERT INTO "helmert_transformation" VALUES('EPSG','9960','WGS 84 (Transit) to WGS 84 (G730) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Derived through ITRF90 and ITRF91 at epoch 1990.5. Parameter values valid at other epochs including 2005.0.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7815','EPSG','7656',0.7,-58.0,521.0,239.0,'EPSG','1025',18.3,-0.3,7.0,'EPSG','1031',10.7,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KD2022-Wld',0); INSERT INTO "usage" VALUES('EPSG','17491','helmert_transformation','EPSG','9960','EPSG','1262','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9961','WGS 84 (G730) to WGS 84 (G873) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Derived via ITRF91 through ITRF94 at epoch 1995.5. Parameter values valid at other epochs including 2005.0.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7656','EPSG','7658',0.04,-20.0,-16.0,14.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.69,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KD2022-Wld',0); INSERT INTO "usage" VALUES('EPSG','17492','helmert_transformation','EPSG','9961','EPSG','1262','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9962','WGS 84 (G873) to WGS 84 (G1150) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Derived via ITRF94 through ITRF2000. May be approximated to 0.2m using 7-parameter CF method 1032 with parameters for epoch 1999.50 of tX=1.1mm tY=-8.0mm tZ=14.3mm rX=0 rY=0 rZ=0.05mas dS=1.505ppb.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7658','EPSG','7660',0.03,1.1,-4.7,22.0,'EPSG','1025',0.0,0.0,0.16,'EPSG','1031',1.45,'EPSG','1028',0.0,0.6,1.4,'EPSG','1027',0.0,0.0,0.02,'EPSG','1032',-0.01,'EPSG','1030',2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'KD2022-Wld',0); INSERT INTO "usage" VALUES('EPSG','18078','helmert_transformation','EPSG','9962','EPSG','1262','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9963','WGS 84 (G1150) to WGS 84 (G1674) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Derived via ITRF2005. May be approximated to 0.4m using 7-parameter CF method 1032 with parameters for epoch 2007.50 of tX=-2.65mm tY=1.35mm tZ=27.7mm rX=-0.27mas rY=027mas rZ=-0.38 mas dS=1.88ppb.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7660','EPSG','7662',0.02,-2.4,1.6,23.2,'EPSG','1025',-0.27,0.27,-0.38,'EPSG','1031',2.08,'EPSG','1028',-0.1,-0.1,1.8,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.08,'EPSG','1030',2005.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'KD2022-Wld',0); INSERT INTO "usage" VALUES('EPSG','17500','helmert_transformation','EPSG','9963','EPSG','1262','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','9991','ITRF2014 to ITRF2020 (1)','IERS describes CT in opposite direction. Estimated using core network of 131 stations at 105 sites. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','9988',0.001,1.4,0.9,-1.4,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.42,'EPSG','1028',0.0,0.1,-0.2,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17933','helmert_transformation','EPSG','9991','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9992','ITRF2008 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from those already published between ITRF2020, ITRF2014 and ITRF2008. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','9988',0.01,-0.2,-1.0,-3.3,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.29,'EPSG','1028',0.0,0.1,-0.1,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.03,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17946','helmert_transformation','EPSG','9992','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9993','ITRF2005 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','9988',0.01,-2.7,-0.1,1.4,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.65,'EPSG','1028',-0.3,0.1,-0.1,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.03,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17935','helmert_transformation','EPSG','9993','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9994','ITRF2000 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','9988',0.01,0.2,-0.8,34.2,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-2.25,'EPSG','1028',-0.1,0.0,1.7,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.11,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17936','helmert_transformation','EPSG','9994','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9995','ITRF97 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','9988',0.01,-6.5,3.9,77.9,'EPSG','1025',0.0,0.0,-0.36,'EPSG','1031',-3.98,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17937','helmert_transformation','EPSG','9995','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9996','ITRF96 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','9988',0.01,-6.5,3.9,77.9,'EPSG','1025',0.0,0.0,-0.36,'EPSG','1031',-3.98,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17938','helmert_transformation','EPSG','9996','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9997','ITRF94 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','9988',0.01,-6.5,3.9,77.9,'EPSG','1025',0.0,0.0,-0.36,'EPSG','1031',-3.98,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17939','helmert_transformation','EPSG','9997','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9998','ITRF93 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','9988',0.01,65.8,-1.9,71.3,'EPSG','1025',3.36,4.33,-0.75,'EPSG','1031',-4.47,'EPSG','1028',2.8,0.2,2.3,'EPSG','1027',0.11,0.19,-0.07,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17947','helmert_transformation','EPSG','9998','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','9999','ITRF92 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','9988',0.01,-14.5,1.9,85.9,'EPSG','1025',0.0,0.0,-0.36,'EPSG','1031',-3.27,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17941','helmert_transformation','EPSG','9999','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10085','Trinidad 1903 to WGS 84 (2)','Parameter values provided to EOG by Trinidad Ministry of Energy and Energy Industries. Used by EOG offshore Trinidad (including Pelican, Kiskadee and Ibis fields) since 1996.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4302','EPSG','4326',3.0,-61.0,285.2,471.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EOG-Tto Trin',0); INSERT INTO "usage" VALUES('EPSG','11086','helmert_transformation','EPSG','10085','EPSG','1339','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10086','JAD69 to WGS 72 (1)','Derived in 1977 through Transit observations at 2 stations by US DMA.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4242','EPSG','4322',15.0,48.0,208.0,382.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',0); INSERT INTO "usage" VALUES('EPSG','11087','helmert_transformation','EPSG','10086','EPSG','3342','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','10089','Aratu to WGS 84 (5)','Used by ExxonMobil for block BMS1. See WGS 84 (13) (tfm code 5051) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',7.0,-163.466,317.396,-147.538,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EXM-Bra Santos',0); INSERT INTO "usage" VALUES('EPSG','11090','helmert_transformation','EPSG','10089','EPSG','2962','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10090','Aratu to WGS 84 (6)','Used by ExxonMobil for block BC10. Derived from earlier Shell position vector tfm of dX = -181m, dY = +294m, dZ = -144.5m, rX = rY = 0, rZ = +0.554s, dS = +0.219 ppm. See Aratu to WGS 84 (14) (tfm code 5053) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',7.0,-170.0,305.0,-145.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EXM-Bra Campos',0); INSERT INTO "usage" VALUES('EPSG','11091','helmert_transformation','EPSG','10090','EPSG','2963','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10091','Aratu to WGS 84 (7)','Used by ExxonMobil for block BMES1. See Aratu to WGS 84 (15) (tfm code 5055) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',7.0,-162.904,312.531,-137.109,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EXM-Bra EspS',0); INSERT INTO "usage" VALUES('EPSG','11092','helmert_transformation','EPSG','10091','EPSG','2964','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10092','Aratu to WGS 84 (8)','Used by ExxonMobil for block BP1. Also used by BG as part of a concatenated tfm to SAD69 for offshore regional studies. See WGS 84 (13) (tfm code 5051) for transformation Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',7.0,-158.0,309.0,-151.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EXM-Bra Pel',0); INSERT INTO "usage" VALUES('EPSG','11093','helmert_transformation','EPSG','10092','EPSG','2965','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10093','Aratu to WGS 84 (9)','Used by ExxonMobil for offshore regional studies. See Aratu to WGS 84 (13) through (21) (tfm codes 5051-67 [odd numbers only]) which Petrobras now recommends for various areas.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',15.0,-161.0,308.0,-142.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EXM-Bra off',0); INSERT INTO "usage" VALUES('EPSG','11094','helmert_transformation','EPSG','10093','EPSG','2966','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10094','Nouakchott 1965 to WGS 84 (1)','Derived by IGN in 1992 at 7 stations within Nouakchott city.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',5.0,124.5,-63.5,-281.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Mau',1); INSERT INTO "usage" VALUES('EPSG','11095','helmert_transformation','EPSG','10094','EPSG','2972','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10098','KKJ to EUREF-FIN (2)','In most areas accuracy is approximately 0.5m although in some areas it is in the order of 2m. Replaces KKJ to ETRS89 (1) (code 1638). YKJ to ETRS-TM35FIN (code 10703) using the TINshift method is recommended in preference to this transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4123','EPSG','10690',0.5,-96.062,-82.428,-121.753,'EPSG','9001',-4.801,-0.345,1.376,'EPSG','9104',1.496,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Fin JHS153',0); INSERT INTO "usage" VALUES('EPSG','11099','helmert_transformation','EPSG','10098','EPSG','3333','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','10099','KKJ to WGS 84 (2)','Parameter values from KKJ to ETRS89 (2) (code 10098). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation. Replaces KKJ to WGS 84 (1) (code 1639).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4123','EPSG','4326',1.0,-96.062,-82.428,-121.753,'EPSG','9001',-4.801,-0.345,1.376,'EPSG','9104',1.496,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fin JHS153',0); INSERT INTO "usage" VALUES('EPSG','11100','helmert_transformation','EPSG','10099','EPSG','3333','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','10100','ITRF91 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','9988',0.01,-26.5,-12.1,91.9,'EPSG','1025',0.0,0.0,-0.36,'EPSG','1031',-4.67,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17942','helmert_transformation','EPSG','10100','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10103','ITRF90 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','9988',0.01,-24.5,-8.1,107.9,'EPSG','1025',0.0,0.0,-0.36,'EPSG','1031',-4.97,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17943','helmert_transformation','EPSG','10103','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10104','ITRF89 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','9988',0.01,-29.5,-32.1,145.9,'EPSG','1025',0.0,0.0,-0.36,'EPSG','1031',-8.37,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17944','helmert_transformation','EPSG','10104','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10105','ITRF88 to ITRF2020 (1)','IERS describes CT in opposite direction. Parameter values derived from the those between ITRF2020, ITRF2014 and ITRF2008 and those published between earlier realizations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4910','EPSG','9988',0.01,-24.5,3.9,169.9,'EPSG','1025',-0.1,0.0,-0.36,'EPSG','1031',-11.47,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.0,0.0,-0.02,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','17948','helmert_transformation','EPSG','10105','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10134','SIRGAS-Chile 2021 to ITRF2014 (1)','Transformation is exact at epoch 2021.00 but accuracy then decreasing with time.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','20039','EPSG','7789',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2021.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0); INSERT INTO "usage" VALUES('EPSG','18457','helmert_transformation','EPSG','10134','EPSG','1066','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10135','PSAD56 to SIRGAS-Chile 2021 (1)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6971.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','20041',5.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0); INSERT INTO "usage" VALUES('EPSG','18374','helmert_transformation','EPSG','10135','EPSG','4231','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','10136','PSAD56 to SIRGAS-Chile 2021 (2)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6972.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','20041',5.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0); INSERT INTO "usage" VALUES('EPSG','18375','helmert_transformation','EPSG','10136','EPSG','4222','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','10137','PSAD56 to SIRGAS-Chile 2021 (3)','Also used as a transformation from PSAD56 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6973.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','20041',5.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0); INSERT INTO "usage" VALUES('EPSG','18376','helmert_transformation','EPSG','10137','EPSG','4221','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','10138','SAD69 to SIRGAS-Chile 2021 (4)','Also used as a transformation from SAD69 to other realizations of SIRGAS-Chile and to WGS 84 - see code 6977.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','20041',5.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl D',0); INSERT INTO "usage" VALUES('EPSG','18377','helmert_transformation','EPSG','10138','EPSG','2805','EPSG','1210'); INSERT INTO "helmert_transformation" VALUES('EPSG','10139','ITRF88 to ITRF89 (2)','Parameter values derived from differences in CTs to ITRF2020 (codes 10104 and 10105). These supersede all values published in past IERS/ITRF documentation (CT code 9020). Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4910','EPSG','4911',0.01,0.5,3.6,2.4,'EPSG','1033',-0.1,0.0,0.0,'EPSG','1031',-3.1,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld 2020',0); INSERT INTO "usage" VALUES('EPSG','18427','helmert_transformation','EPSG','10139','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10140','ITRF89 to ITRF90 (2)','Parameter values derived from differences in CTs to ITRF2020 (codes 10103 and 10104). These supersede all values published in past IERS/ITRF documentation (CT code 9021). Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4911','EPSG','4912',0.01,-0.5,-2.4,3.8,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-3.4,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld 2020',0); INSERT INTO "usage" VALUES('EPSG','18428','helmert_transformation','EPSG','10140','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10141','ITRF90 to ITRF91 (2)','Parameter values derived from differences in CTs to ITRF2020 (codes 10100 and 10103). These supersede all values published in past IERS/ITRF documentation (CT code 9022). Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4912','EPSG','4913',0.007,0.2,0.4,1.6,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-0.3,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld 2020',0); INSERT INTO "usage" VALUES('EPSG','18432','helmert_transformation','EPSG','10141','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10142','ITRF91 to ITRF92 (2)','Parameter values derived from differences in CTs to ITRF2020 (codes 9999 and 10100). These supersede all values published in past IERS/ITRF documentation (CT code 9023). Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','4913','EPSG','4914',0.005,-1.2,-1.4,0.6,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',-1.4,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld 2020',0); INSERT INTO "usage" VALUES('EPSG','18430','helmert_transformation','EPSG','10142','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10143','ITRF93 to ITRF94 (2)','Parameter values derived from differences in CTs to ITRF2020 (codes 9997 and 9998). These supersede all values published in past IERS/ITRF documentation (CT code 9025). Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','4916',0.01,-0.6,0.5,1.5,'EPSG','1033',0.39,-0.8,0.96,'EPSG','1031',-0.49,'EPSG','1028',0.29,-0.04,-0.08,'EPSG','1034',0.11,0.19,-0.05,'EPSG','1032',0.0,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld 2020',0); INSERT INTO "usage" VALUES('EPSG','18431','helmert_transformation','EPSG','10143','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10149','MAGNA-SIRGAS 2018 to WGS 84 (1)','See Datum 1329 remarks for conversion path between GeogCRSs "MAGNA-SIRGAS" and "MAGNA-SIRGAS 2018". CTs 10216, 10221, 10242-4 provide recommended conversions between ProjCRSs on "MAGNA-SIRGAS" and "MAGNA-SIRGAS 2018" using null Cartesian Offsets.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','20046','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col',0); INSERT INTO "usage" VALUES('EPSG','18935','helmert_transformation','EPSG','10149','EPSG','1070','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10179','ITRF2020 to IGS20 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGS20 is by definition aligned with ITRF2020.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9988','EPSG','10176',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','18634','helmert_transformation','EPSG','10179','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10180','IGb14 to IGS20 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Parameter values from ITRF2014 to ITRF2020 (1) (code 9991) as IGb14 is aligned to ITRF2014 and IGS20 is aligned to ITRF2020.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9378','EPSG','10176',0.001,1.4,0.9,-1.4,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.42,'EPSG','1028',0.0,0.1,-0.2,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','18633','helmert_transformation','EPSG','10180','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10264','RGSH2020 to WGS 84 (1)','For many purposes RGSH2020 can be considered to be coincident with WGS 84. This approximation ignores the low accuracy of the WGS 84 ensemble and the application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10299','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Dza',0); INSERT INTO "usage" VALUES('EPSG','19536','helmert_transformation','EPSG','10264','EPSG','1026','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10292','ETRS89/DREF91/2016 to ETRF2000 (1)','Accuracy 4.1mm N, 3.3mm E, 10.6mm up.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','10282','EPSG','7930',0.1,0.0,0.0,0.0,'EPSG','9001',0.658,-0.208,0.755,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'AdV-Deu 2016',0); INSERT INTO "usage" VALUES('EPSG','19279','helmert_transformation','EPSG','10292','EPSG','1103','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10296','Nord Sahara 1959 to WGS 84 (11)','Given by infomation source in direction WGS 84 to Nord Sahara 1959. Defines official relationship between WGS 84 and national geodetic system; epoch unspecified. Derived at approximately 40 points in northern Algeria; accuracy applies only to this area.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4307','EPSG','4326',1.0,-267.407,-47.068,446.357,'EPSG','9001',-0.179423,5.577661,-1.27762,'EPSG','9104',1.204866,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'INCT-Dza 2022',0); INSERT INTO "usage" VALUES('EPSG','19518','helmert_transformation','EPSG','10296','EPSG','1026','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','10321','RGNC91-93 to RGNC15 (1)','See RGNC91-93 to RGNC15 (2) (transformation code 10322) for authoritative transformation between these CRSs. This transformation is used only as the standard transformation T0 within that transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10307','EPSG','10312',1.0,-0.584,-1.117,1.125,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 1m',0); INSERT INTO "usage" VALUES('EPSG','19653','helmert_transformation','EPSG','10321','EPSG','3430','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','10324','RGNC15 to WGS 84 (1)','Accuracy decreasing at approximately 6cm per year due to tectonic plate motion.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10310','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ncl',0); INSERT INTO "usage" VALUES('EPSG','19656','helmert_transformation','EPSG','10324','EPSG','1174','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10330','BH_ETRS89 to ETRS89 (1)','BH_ETRS89 is a national realization of ETRS89. May be taken as approximate transformation BH_ETRS89 to WGS 84 - see code 10333.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10328','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bih',0); INSERT INTO "usage" VALUES('EPSG','19745','helmert_transformation','EPSG','10330','EPSG','1050','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','10333','BH_ETRS89 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. BH_ETRS89 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10328','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bih',0); INSERT INTO "usage" VALUES('EPSG','19744','helmert_transformation','EPSG','10333','EPSG','1050','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10334','ITRF2020 to NAD83(2011) (1)','Concatenation of joint US-Canada tfm NAD83(CORS96)>ITRF96 (CT code 6864) with IGS value for ITRF96>ITRF97 and IERS values for ITRF97>ITRF2020 CTs. Scale difference in ppb and rate in ppb/yr where 1/billion = 1E-9. See tfm 10415 for Canadian equivalent.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','9988','EPSG','6317',0.0,1003.9,-1909.61,-541.17,'EPSG','1025',26.78138,-0.42027,10.93206,'EPSG','1031',-0.05109,'EPSG','1028',0.79,-0.7,-1.24,'EPSG','1027',0.06667,-0.75744,-0.05133,'EPSG','1032',-0.07201,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-Usa CONUS-AK PRVI',0); INSERT INTO "usage" VALUES('EPSG','19772','helmert_transformation','EPSG','10334','EPSG','1511','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','10335','ITRF2014 to NAD83(PA11) (1)','','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7789','EPSG','6320',0.0,0.9109,-2.0129,-0.5863,'EPSG','9001',22.749,26.56,-25.706,'EPSG','1031',2.12,'EPSG','1028',0.0001,0.0001,-0.0019,'EPSG','1042',-0.384,1.007,-2.186,'EPSG','1032',0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-PA',0); INSERT INTO "usage" VALUES('EPSG','19769','helmert_transformation','EPSG','10335','EPSG','4162','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','10336','ITRF2020 to NAD83(PA11) (1)','','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','9988','EPSG','6320',0.0,909.5,-2013.3,-585.9,'EPSG','1025',22.749,26.56,-25.706,'EPSG','1031',1.7,'EPSG','1028',0.1,0.0,-1.7,'EPSG','1027',-0.384,1.007,-2.186,'EPSG','1032',0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-PA',0); INSERT INTO "usage" VALUES('EPSG','19773','helmert_transformation','EPSG','10336','EPSG','4162','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','10337','ITRF2014 to NAD83(MA11) (1)','','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7789','EPSG','6323',0.0,0.9109,-2.0129,-0.5863,'EPSG','9001',28.711,11.785,4.417,'EPSG','1031',2.12,'EPSG','1028',0.0001,0.0001,-0.0019,'EPSG','1042',-0.02,0.105,-0.347,'EPSG','1032',0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-MA',0); INSERT INTO "usage" VALUES('EPSG','19770','helmert_transformation','EPSG','10337','EPSG','4167','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','10338','ITRF2020 to NAD83(MA11) (1)','','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','9988','EPSG','6323',0.0,909.5,-2013.3,-585.9,'EPSG','1025',28.711,11.785,4.417,'EPSG','1031',1.7,'EPSG','1028',0.1,0.0,-1.7,'EPSG','1027',-0.02,0.105,-0.347,'EPSG','1032',0.11,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-MA',0); INSERT INTO "usage" VALUES('EPSG','19774','helmert_transformation','EPSG','10338','EPSG','4167','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','10339','Nord Sahara 1959 to RGSH2020 (1)','Parameter values taken from Nord Sahara 1959 to WGS 84 (4) (code 1815) assuming that RGSH2020 is coincident with WGS 84 within the accuracy of the transformation. CT 1815 used by BP in District 3 and In Salah Gas.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4307','EPSG','10299',5.0,-152.9,43.8,358.3,'EPSG','9001',2.714,1.386,-2.788,'EPSG','9104',-6.743,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alg D3',0); INSERT INTO "usage" VALUES('EPSG','19855','helmert_transformation','EPSG','10339','EPSG','2598','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10340','Nord Sahara 1959 to RGSH2020 (2)','Parameter values taken from Nord Sahara 1959 to WGS 84 (5) (code 1816) assuming that RGSH2020 is coincident with WGS 84 within the accuracy of the transformation. Significant and varying differences (>100m) at 4 neighbouring astro stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','10299',100.0,-95.7,10.2,158.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alg InAm',0); INSERT INTO "usage" VALUES('EPSG','19850','helmert_transformation','EPSG','10340','EPSG','2599','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10341','Nord Sahara 1959 to RGSH2020 (3)','Parameter values taken from Nord Sahara 1959 to WGS 84 (6) (code 1817) assuming that RGSH2020 is coincident with WGS 84 within the accuracy of the transformation. Derived at astro station Guerrara.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','10299',100.0,-165.914,-70.607,305.009,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alg HBR',0); INSERT INTO "usage" VALUES('EPSG','19851','helmert_transformation','EPSG','10341','EPSG','2600','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10342','Nord Sahara 1959 to RGSH2020 (4)','Parameter values taken from Nord Sahara 1959 to WGS 84 (7) (code 15874) assuming that RGSH2020 is coincident with WGS 84 within the accuracy of the transformation. Derived at 11 stations. CT 15874 used by Equinor in Hassi Mouina.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','10299',5.0,-169.559,-72.34,303.102,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Dza Mou',0); INSERT INTO "usage" VALUES('EPSG','19852','helmert_transformation','EPSG','10342','EPSG','3402','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10343','Nord Sahara 1959 to RGSH2020 (5)','Parameter values taken from Nord Sahara 1959 to WGS 84 (8) (code 5630) assuming that RGSH2020 is coincident with WGS 84 within the accuracy of the transformation. Derived at 1 station (L38).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','10299',5.0,-168.52,-72.05,304.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Dza Ahnet',0); INSERT INTO "usage" VALUES('EPSG','19853','helmert_transformation','EPSG','10343','EPSG','3917','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10344','Nord Sahara 1959 to RGSH2020 (6)','Parameter values taken from Nord Sahara 1959 to WGS 84 (10) (code 7442) assuming that RGSH2020 is coincident with WGS 84 within the accuracy of the transformation. Significant and varying differences (>100m) known to exist in neighbouring astro stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','10299',100.0,-181.7,64.7,247.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alg Ain Tsila',0); INSERT INTO "usage" VALUES('EPSG','19854','helmert_transformation','EPSG','10344','EPSG','4382','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10415','ITRF2020 to NAD83(CSRS)v8 (1)','Concatenation of joint Canada-US tfm NAD83>ITRF96 (see tfm code 8259) with IGS value for ITRF96>ITRF97 and IERS values for ITRF97>ITRF2020 transformations. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9988','EPSG','10412',0.0,1.0039,-1.90961,-0.54117,'EPSG','9001',-26.78138,0.42027,-10.93206,'EPSG','1031',-0.05109,'EPSG','1028',0.00079,-0.0007,-0.00124,'EPSG','1042',-0.06667,0.75744,0.05133,'EPSG','1032',-0.07201,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv8',0); INSERT INTO "usage" VALUES('EPSG','20192','helmert_transformation','EPSG','10415','EPSG','1061','EPSG','1284'); INSERT INTO "helmert_transformation" VALUES('EPSG','10416','NAD83(CSRS)v7 to NAD83(2011) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF2014 by common transformations (codes 8970 and 8265).','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8253','EPSG','6317',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0); INSERT INTO "usage" VALUES('EPSG','20197','helmert_transformation','EPSG','10416','EPSG','4544','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10419','NAD83(CSRS)v8 to NAD83(2011) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF2020 by common transformations (codes 10334 and 10415).','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','10412','EPSG','6317',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0); INSERT INTO "usage" VALUES('EPSG','20195','helmert_transformation','EPSG','10419','EPSG','4544','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10478','BBT2000 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10475','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BBT-Aut-Ita',0); INSERT INTO "usage" VALUES('EPSG','20343','helmert_transformation','EPSG','10478','EPSG','4744','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10511','NAD83(CSRS)v2 to NAD83(CSRS)v3 (3)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)v2 and NAD83(CSRS)v3 are referenced to the same coordinate reference epoch (1997.00) and considered compatible with each other at the centimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8233','EPSG','8238',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 1997',0); INSERT INTO "usage" VALUES('EPSG','20612','helmert_transformation','EPSG','10511','EPSG','1061','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10512','NAD83(CSRS)v6 to NAD83(CSRS)v7 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)v6 and NAD83(CSRS)v7 are referenced to the same coordinate reference epoch (2010.00) and considered compatible with each other at the centimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8250','EPSG','8253',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 2010',0); INSERT INTO "usage" VALUES('EPSG','20890','helmert_transformation','EPSG','10512','EPSG','1061','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10513','NAD83(CSRS)v6 to NAD83(CSRS)v8 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)v6 and NAD83(CSRS)v8 are referenced to the same coordinate reference epoch (2010.00) and considered compatible with each other at the centimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8250','EPSG','10412',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 2010',0); INSERT INTO "usage" VALUES('EPSG','20614','helmert_transformation','EPSG','10513','EPSG','1061','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10514','NAD83(CSRS)v7 to NAD83(CSRS)v8 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)7 and NAD83(CSRS)v8 are referenced to the same coordinate reference epoch (2010.00) and considered compatible with each other at the millimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8253','EPSG','10412',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 2010',0); INSERT INTO "usage" VALUES('EPSG','20891','helmert_transformation','EPSG','10514','EPSG','1061','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10543','GDM2000 to WGS 84 (1)','Approximation at the +/- 1m level assuming that GDM2000 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4742','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Mys 1m',0); INSERT INTO "usage" VALUES('EPSG','20831','helmert_transformation','EPSG','10543','EPSG','1151','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10572','ITRF2020 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ITRF2020 to ETRF2020 (2) (code 10573) for an exactly equivalent transformation but with the transformation''s parameter values at epoch 2015.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9988','EPSG','10569',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.086,0.519,-0.753,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0); INSERT INTO "usage" VALUES('EPSG','21229','helmert_transformation','EPSG','10572','EPSG','1298','EPSG','1289'); INSERT INTO "helmert_transformation" VALUES('EPSG','10573','ITRF2020 to ETRF2020 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9. See ITRF2020 to ETRF2020 (1) (code 10572) for transformation which defines ETRF2020. This CT 10573 is equivalent to 10572 but with parameter values at epoch 2015.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9988','EPSG','10569',0.0,0.0,0.0,0.0,'EPSG','1025',2.236,13.494,-19.578,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.086,0.519,-0.753,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21230','helmert_transformation','EPSG','10573','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10574','ITRF2014 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','10569',0.0,1.4,0.9,-1.4,'EPSG','1025',2.236,13.494,-19.578,'EPSG','1031',0.42,'EPSG','1028',0.0,0.1,-0.2,'EPSG','1027',0.086,0.519,-0.753,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21231','helmert_transformation','EPSG','10574','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10575','ITRF2008 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','10569',0.0,-0.2,-1.0,-3.3,'EPSG','1025',2.236,13.494,-19.578,'EPSG','1031',0.29,'EPSG','1028',0.0,0.1,-0.1,'EPSG','1027',0.086,0.519,-0.753,'EPSG','1032',-0.03,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21224','helmert_transformation','EPSG','10575','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10576','ITRF2005 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','10569',0.0,-2.7,-0.1,1.4,'EPSG','1025',2.236,13.494,-19.578,'EPSG','1031',-0.65,'EPSG','1028',-0.3,0.1,-0.1,'EPSG','1027',0.086,0.519,-0.753,'EPSG','1032',-0.03,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21244','helmert_transformation','EPSG','10576','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10577','ITRF2000 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','10569',0.0,0.2,-0.8,34.2,'EPSG','1025',2.236,13.494,-19.578,'EPSG','1031',-2.25,'EPSG','1028',-0.1,0.0,1.7,'EPSG','1027',0.086,0.519,-0.753,'EPSG','1032',-0.11,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21290','helmert_transformation','EPSG','10577','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10578','ITRF97 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','10569',0.0,-6.5,3.9,77.9,'EPSG','1025',2.236,13.494,-19.938,'EPSG','1031',-3.98,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.086,0.519,-0.773,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21246','helmert_transformation','EPSG','10578','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10579','ITRF96 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4917','EPSG','10569',0.0,-6.5,3.9,77.9,'EPSG','1025',2.236,13.494,-19.938,'EPSG','1031',-3.98,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.086,0.519,-0.773,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21247','helmert_transformation','EPSG','10579','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10580','ITRF94 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4916','EPSG','10569',0.0,-6.5,3.9,77.9,'EPSG','1025',2.236,13.494,-19.938,'EPSG','1031',-3.98,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.086,0.519,-0.773,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21248','helmert_transformation','EPSG','10580','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10581','ITRF93 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4915','EPSG','10569',0.0,65.8,-1.9,71.3,'EPSG','1025',5.596,17.824,-20.328,'EPSG','1031',-4.47,'EPSG','1028',2.8,0.2,2.3,'EPSG','1027',0.196,0.709,-0.823,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21249','helmert_transformation','EPSG','10581','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10582','ITRF92 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4914','EPSG','10569',0.0,-14.5,1.9,85.9,'EPSG','1025',2.236,13.494,-19.938,'EPSG','1031',-3.27,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.086,0.519,-0.773,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21250','helmert_transformation','EPSG','10582','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10583','ITRF91 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4913','EPSG','10569',0.0,-26.5,-12.1,91.9,'EPSG','1025',2.236,13.494,-19.938,'EPSG','1031',-4.67,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.086,0.519,-0.773,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21251','helmert_transformation','EPSG','10583','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10584','ITRF90 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','10569',0.0,-24.5,-8.1,107.9,'EPSG','1025',2.236,13.494,-19.938,'EPSG','1031',-4.97,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.086,0.519,-0.773,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21252','helmert_transformation','EPSG','10584','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10585','ITRF89 to ETRF2020 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','10569',0.0,-29.5,-32.1,145.9,'EPSG','1025',2.236,13.494,-19.938,'EPSG','1031',-8.37,'EPSG','1028',-0.1,0.6,3.1,'EPSG','1027',0.086,0.519,-0.773,'EPSG','1032',-0.12,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21253','helmert_transformation','EPSG','10585','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10586','ITRF2020 to ETRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9988','EPSG','7930',0.0,53.8,51.8,-82.2,'EPSG','1025',2.106,12.74,-20.592,'EPSG','1031',2.25,'EPSG','1028',0.1,0.0,-1.7,'EPSG','1027',0.081,0.49,-0.792,'EPSG','1032',0.11,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21243','helmert_transformation','EPSG','10586','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10587','ITRF2020 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9988','EPSG','8401',0.0,-1.4,-0.9,1.4,'EPSG','1025',2.21,13.806,-20.02,'EPSG','1031',-0.42,'EPSG','1028',0.0,-0.1,0.2,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2024',0); INSERT INTO "usage" VALUES('EPSG','21242','helmert_transformation','EPSG','10587','EPSG','1298','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10589','ITRF2014 to Segara (1)','Replaces transformation Segara to WGS 84 (4) (code 1838). Computed by PT Pageo Utama and PT Bhumi Warih Geohydromatics in May 2023. Transformation parameters were derived at epoch 2022.00.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','9000','EPSG','4613',0.2,407.379,-685.226,-52.577,'EPSG','9001',-0.318,0.107,-0.058,'EPSG','9104',0.207,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PHM-Idn Mhk 2023',0); INSERT INTO "usage" VALUES('EPSG','21255','helmert_transformation','EPSG','10589','EPSG','1328','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','10607','WGS 84 (G2139) to WGS 84 (G2296) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Calculated by extrapolating the position and velocity of the seventeen WGS 84 GPS monitoring sites to the epoch 2024.00.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','9753','EPSG','10604',0.01,2.6,5.4,-0.9,'EPSG','1025',-0.01,-0.07,0.0,'EPSG','1031',0.06,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2024.0',0); INSERT INTO "usage" VALUES('EPSG','21197','helmert_transformation','EPSG','10607','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10608','WGS 84 (G2296) to ITRF2020 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Accuracy of 1cm applies at epoch 2024.0. Due to subsequent drift between the reference frames it may reach 2cm at other epochs.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','10604','EPSG','9988',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2024.0',0); INSERT INTO "usage" VALUES('EPSG','21198','helmert_transformation','EPSG','10608','EPSG','1262','EPSG','1026'); INSERT INTO "helmert_transformation" VALUES('EPSG','10646','Saba to BES2020 Saba (1)','For the reverse transformation from BES2020 Saba to Saba, method 1140 [used here] is reversible using the same parameter values with the reverse formulas (see GN7-2). However, the official BESTRANS document applies the same formulas for both the forward and reverse transformations, but uses different parameter values for the reverse transformation.','EPSG','1140','Coordinate Frame rotation full matrix (geog3D)','EPSG','10635','EPSG','10638',0.05,1138.7432,-2064.4761,110.7016,'EPSG','9001',-214.615206,479.360036,-164.703951,'EPSG','9104',-402.32073,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes Saba 2020',0); INSERT INTO "usage" VALUES('EPSG','21861','helmert_transformation','EPSG','10646','EPSG','4757','EPSG','1142'); INSERT INTO "helmert_transformation" VALUES('EPSG','10647','BES2020 Saba to ITRF2014 (1)','Time-dependent component of official transformation BESTRANS2020.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','10637','EPSG','7789',0.05,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.00726,0.00848,0.01353,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.0,'EPSG','1041',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NSGI-Bes Saba',0); INSERT INTO "usage" VALUES('EPSG','21765','helmert_transformation','EPSG','10647','EPSG','4757','EPSG','1079'); INSERT INTO "helmert_transformation" VALUES('EPSG','10648','BES2020 Saba to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10639','EPSG','4326',0.5,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes Saba',0); INSERT INTO "usage" VALUES('EPSG','21743','helmert_transformation','EPSG','10648','EPSG','4757','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10676','Saba to WGS 84 (1)','Parameter values taken from Saba to BES2020 Saba (1) (transformation code 10646) assuming that BES2020 Saba is coincident with WGS 84 within the accuracy of the transformation.','EPSG','1133','Coordinate Frame rotation full matrix (geog2D)','EPSG','10636','EPSG','4326',1.0,1138.7432,-2064.4761,110.7016,'EPSG','9001',-214.615206,479.360036,-164.703951,'EPSG','9104',-402.32073,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bes Saba',0); INSERT INTO "usage" VALUES('EPSG','21783','helmert_transformation','EPSG','10676','EPSG','4757','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10682','RGM04 to RGM23 (1)','Approximation at the +/- 0.1m level. For more accurate official transformation see RGM04 to RGM23 (2) (code 10683).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4470','EPSG','10671',0.1,-0.5377,0.3946,0.3608,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Myt 10cm',0); INSERT INTO "usage" VALUES('EPSG','21834','helmert_transformation','EPSG','10682','EPSG','1159','EPSG','1189'); INSERT INTO "helmert_transformation" VALUES('EPSG','10684','RGM23 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGM23 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10671','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Myt',0); INSERT INTO "usage" VALUES('EPSG','21859','helmert_transformation','EPSG','10684','EPSG','1159','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10701','EUREF-FIN to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. EUREF-FIN is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10690','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Fin',0); INSERT INTO "usage" VALUES('EPSG','22008','helmert_transformation','EPSG','10701','EPSG','1095','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10706','EUREF-FIN to ETRS89 (1)','EUREF-FIN is a national realization of ETRS89. May be taken as approximate transformation EUREF-FIN to WGS 84 - see code 10701.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10690','EPSG','4258',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Fin',0); INSERT INTO "usage" VALUES('EPSG','22009','helmert_transformation','EPSG','10706','EPSG','1095','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','10748','BES2020 Sint Eustatius to ITRF2014 (1)','Time-dependent component of official transformation BESTRANS2020.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','10737','EPSG','7789',0.05,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',0.00743,0.00875,0.01402,'EPSG','1042',0.0,0.0,0.0,'EPSG','1043',0.0,'EPSG','1041',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NSGI-Bes SEu 2020',0); INSERT INTO "usage" VALUES('EPSG','22303','helmert_transformation','EPSG','10748','EPSG','4788','EPSG','1079'); INSERT INTO "helmert_transformation" VALUES('EPSG','10749','BES2020 Sint Eustatius to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10739','EPSG','4326',0.5,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes SEu 2020',0); INSERT INTO "usage" VALUES('EPSG','22311','helmert_transformation','EPSG','10749','EPSG','4788','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10750','Sint Eustatius to BES2020 Sint Eustatius (1)','For the reverse transformation from BES2020 Sint Eustatius to Sint Eustatius, method 1140 [used here] is reversible using the same parameter values with the reverse formulas (see GN7-2). However, the official BESTRANS document applies the same formulas for both the forward and reverse transformations, but uses different parameter values for the reverse transformation.','EPSG','1140','Coordinate Frame rotation full matrix (geog3D)','EPSG','10735','EPSG','10738',0.05,1276.2485,-2016.6406,667.4403,'EPSG','9001',-101.005288,212.913401,-68.43277,'EPSG','9104',-431.59604,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes SEu 2020',0); INSERT INTO "usage" VALUES('EPSG','22306','helmert_transformation','EPSG','10750','EPSG','4788','EPSG','1142'); INSERT INTO "helmert_transformation" VALUES('EPSG','10766','Bonaire to Bonaire 2004 (1)','For the reverse transformation from Bonaire 2004 to Bonaire, method 1133 [used here] is reversible using the same parameter values with the reverse formulas (see GN7-2). However, the official BESTRANS document applies the same formulas for both the forward and reverse transformations, but uses different parameter values for the reverse transformation.','EPSG','1133','Coordinate Frame rotation full matrix (geog2D)','EPSG','10758','EPSG','10762',0.05,-366.1939,-115.0688,-776.7039,'EPSG','9001',20.96308,16.462749,-14.276379,'EPSG','9104',-12.809,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes Bon',0); INSERT INTO "usage" VALUES('EPSG','22270','helmert_transformation','EPSG','10766','EPSG','3822','EPSG','1142'); INSERT INTO "helmert_transformation" VALUES('EPSG','10769','Bonaire to WGS 84 (1)','Parameter values taken from Bonaire to Bonaire 2004 (1) (transformation code 10766) assuming that Bonaire 2004 is coincident with WGS 84 within the accuracy of the transformation.','EPSG','1133','Coordinate Frame rotation full matrix (geog2D)','EPSG','10758','EPSG','4326',1.0,-366.1939,-115.0688,-776.7039,'EPSG','9001',20.96308,16.462749,-14.276379,'EPSG','9104',-12.809,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bes Bon',0); INSERT INTO "usage" VALUES('EPSG','22274','helmert_transformation','EPSG','10769','EPSG','3822','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10770','Bonaire 2004 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10762','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes Bon',0); INSERT INTO "usage" VALUES('EPSG','22193','helmert_transformation','EPSG','10770','EPSG','3822','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10771','UZGD2024 to WGS 84 (1)','Approximation at the +/- 1m level assuming that UZGD2024 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10725','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Mys 1m',0); INSERT INTO "usage" VALUES('EPSG','22195','helmert_transformation','EPSG','10771','EPSG','1248','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10777','ITRF2020 to KSA-GRF17 (1)','Derived by combining the IERS transformation from ITRF2020 to ITRF2014 at epoch 2017.0 (code 9991) with ITRF2014 to KSA-GRF17 transformation (code 9334).','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9988','EPSG','9331',0.001,-1.4,-1.1,1.8,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-0.42,'EPSG','1028',0.0,-0.1,0.2,'EPSG','1027',-1.199,0.107,-1.468,'EPSG','1032',0.0,'EPSG','1030',2017.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GEOSA-Sau',0); INSERT INTO "usage" VALUES('EPSG','22256','helmert_transformation','EPSG','10777','EPSG','1206','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10782','ITRF2020 to ITRF2020-u2023 (1)','The alignment of ITRF2020-u2023 to ITRF2020 implies that all transformation parameters between ITRF2020-u2023 and ITRF2020 are zero.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','9988','EPSG','10779',0.001,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0); INSERT INTO "usage" VALUES('EPSG','22374','helmert_transformation','EPSG','10782','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10786','ITRF2020-u2023 to IGb20 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. IGb20 is by definition aligned with ITRF2020-u2023.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','10779','EPSG','10783',0.0,0.0,0.0,0.0,'EPSG','1033',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','22366','helmert_transformation','EPSG','10786','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10787','IGS20 to IGb20 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Parameter values from ITRF2020 to ITRF2020-u2023 (1) (code 10782) as IGS20 is aligned to ITRF2020 and IGb20 is aligned to ITRF2020-u2023.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','10176','EPSG','10783',0.001,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0); INSERT INTO "usage" VALUES('EPSG','22369','helmert_transformation','EPSG','10787','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10803','LibRef21 to WGS 84 (1)','Approximation at the +/- 1m level assuming that LibRef21 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10800','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Lbr',0); INSERT INTO "usage" VALUES('EPSG','22441','helmert_transformation','EPSG','10803','EPSG','1142','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','10804','Sint Eustatius to WGS 84 (1)','Parameter values taken from Sint Eustatius to BES2020 Sint Eustatius (1) (transformation code 10750) assuming that BES2020 Sint Eustatius is coincident with WGS 84 within the accuracy of the transformation.','EPSG','1133','Coordinate Frame rotation full matrix (geog2D)','EPSG','10736','EPSG','4326',1.0,1276.2485,-2016.6406,667.4403,'EPSG','9001',-101.005288,212.913401,-68.43277,'EPSG','9104',-431.59604,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bes Seu',0); INSERT INTO "usage" VALUES('EPSG','22543','helmert_transformation','EPSG','10804','EPSG','4788','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15483','Tokyo to JGD2000 (1)','Derived at Tokyo datum origin. Accuracy on main islands 9m. Also used on remote islands with significantly less accuracy: Io-To 793m, Kitadaito and Minamidaito Jima 642m, Tarama and Minna Shima 560m, Ishigaki and Taketomi Jima 251m, Yonaguni Jima 248m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4612',9.0,-146.414,507.337,680.507,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn',0); INSERT INTO "usage" VALUES('EPSG','11494','helmert_transformation','EPSG','15483','EPSG','3957','EPSG','1142'); INSERT INTO "helmert_transformation" VALUES('EPSG','15484','Tokyo to WGS 84 (108)','Parameter values from Tokyo to JGD2000 (1) (code 15483). Assumes JGD2000 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',9.0,-146.414,507.337,680.507,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn',0); INSERT INTO "usage" VALUES('EPSG','11495','helmert_transformation','EPSG','15484','EPSG','3957','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15485','SAD69 to SIRGAS 2000 (1)','Accuracy generally better than 1m except in Amazon basin where it degenerates to 5m. May be used as CT between SAD69(96) and SIRGAS 2000 and between SAD69 and WGS 84 - see tfm codes 5881 and 5882. Used by Petrobras and ANP throughout Brazil from 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4674',5.0,-67.35,3.88,-38.22,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IBGE-Bra 5m 1994',0); INSERT INTO "usage" VALUES('EPSG','11496','helmert_transformation','EPSG','15485','EPSG','1053','EPSG','1257'); INSERT INTO "helmert_transformation" VALUES('EPSG','15493','Minna to WGS 84 (15)','Adopted by MPN for all joint venture operations from 1/1/1996.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',5.0,-94.031,-83.317,116.708,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MPN-Nga',0); INSERT INTO "usage" VALUES('EPSG','11504','helmert_transformation','EPSG','15493','EPSG','3590','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15494','Kalianpur 1962 to WGS 84 (6)','Derived by Fugro-Geodetic in 2004 at 6 closely-spaced stations. Used by OMV in all blocks in Pakistan where operator.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326',3.0,274.164,677.282,226.704,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'omv-Pak Gambat',0); INSERT INTO "usage" VALUES('EPSG','11505','helmert_transformation','EPSG','15494','EPSG','3589','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15495','Accra to WGS 84 (3)','Derived via WGS 72BE. Found in use within oil industry erroneously concatenated via WGS 72. See tfm code 8571.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4168','EPSG','4326',25.0,-171.16,17.29,325.21,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Gha 1',0); INSERT INTO "usage" VALUES('EPSG','11506','helmert_transformation','EPSG','15495','EPSG','1505','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15496','Pulkovo 1942(58) to WGS 84 (18)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4179','EPSG','4326',10.0,44.107,-116.147,-54.648,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shell-Rom',0); INSERT INTO "usage" VALUES('EPSG','11507','helmert_transformation','EPSG','15496','EPSG','1197','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15497','Pulkovo 1942(58) to WGS 84 (9)','Derived at 4 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4179','EPSG','4326',7.0,28.0,-121.0,-77.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Rom',0); INSERT INTO "usage" VALUES('EPSG','11508','helmert_transformation','EPSG','15497','EPSG','1197','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15698','ITRF2000 to ITRF2005 (1)','At epoch 2000.0. Rates dX=0.0002 m/yr, dy=-0.0001 m/yr, dZ=0.0018 m/yr, rX=rY=rZ=0.0"/yr, dS=-0.00008 ppm/yr.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4919','EPSG','4896',0.0,-0.0001,0.0008,0.0058,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',-0.0004,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS',1); INSERT INTO "usage" VALUES('EPSG','11709','helmert_transformation','EPSG','15698','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','15699','NAD27 to WGS 84 (87)','Developed by John E Chance and Associates at 19°44''N, 92°21''W. Geoid height used =-13.34m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',5.0,-2.0,124.7,196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JECA-Mex GoM CamS',0); INSERT INTO "usage" VALUES('EPSG','11710','helmert_transformation','EPSG','15699','EPSG','3462','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15700','Gulshan 303 to WGS 84 (1)','Derived at origin station in Dhaka.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4682','EPSG','4326',1.0,283.8,735.9,261.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SB-BGD',1); INSERT INTO "usage" VALUES('EPSG','11711','helmert_transformation','EPSG','15700','EPSG','1041','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15701','Kalianpur 1962 to WGS 84 (2)','Derived at Geodetic Survey office in Karachi in 1997.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326',1.0,275.57,676.78,229.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Pak Indus',0); INSERT INTO "usage" VALUES('EPSG','11712','helmert_transformation','EPSG','15701','EPSG','2985','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15702','Kalianpur 1962 to WGS 84 (3)','Derived at station S0001, an approximate offset to Survey of India primary station Kat Baman, in 1992 from 180 single point Transit passes observed in 1991 by Fugro-Geodetic for UTP.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326',3.0,278.9,684.39,226.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak Badin',0); INSERT INTO "usage" VALUES('EPSG','11713','helmert_transformation','EPSG','15702','EPSG','2984','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15703','Kalianpur 1962 to WGS 84 (4)','Derived at Chitrawala triangulation station by Fugro-Geodetic for UTP.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326',3.0,271.905,669.593,231.495,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak Karachi',0); INSERT INTO "usage" VALUES('EPSG','11714','helmert_transformation','EPSG','15703','EPSG','2982','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15704','Kalianpur 1962 to WGS 84 (5)','Derived by Western Geophysical for UTP 1996 East Sind 2D survey.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4145','EPSG','4326',3.0,230.25,632.76,161.03,'EPSG','9001',-1.114,1.115,1.212,'EPSG','9104',12.584,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak E Sind',1); INSERT INTO "usage" VALUES('EPSG','11715','helmert_transformation','EPSG','15704','EPSG','2983','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15705','Minna to WGS 84 (12)','Derived via WGS 72(BE). Minna to WGS 72(BE) transformation derived in 1981 for Mobil E&P Nigeria (MEPCON) by Geodetic Survey through Transit translocation at six stations in southern Nigeria. Used by MEPCON in blocks OPL 215 and 221.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4263','EPSG','4326',8.0,-83.13,-104.95,114.63,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'WGC-Nga 211',0); INSERT INTO "usage" VALUES('EPSG','11716','helmert_transformation','EPSG','15705','EPSG','3819','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','15706','Minna to WGS 84 (13)','Used by Elf in Blocks OPL 222 and OPL 223 and by Mobil in 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',7.0,-93.6,-83.7,113.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Elf-Nga',0); INSERT INTO "usage" VALUES('EPSG','11717','helmert_transformation','EPSG','15706','EPSG','1717','EPSG','1216'); INSERT INTO "helmert_transformation" VALUES('EPSG','15707','ELD79 to WGS 84 (6)','Used by Petrocanada and previous licence holders in Amal field, concession 12.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326',10.0,-118.996,-111.177,-198.687,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PCan-Lby Amal',0); INSERT INTO "usage" VALUES('EPSG','11718','helmert_transformation','EPSG','15707','EPSG','2987','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15708','PRS92 to WGS 84 (1)','Derived during GPS campaign which established PRS92 coordinates at 330 first order stations.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4683','EPSG','4326',0.05,-127.62,-67.24,-47.04,'EPSG','9001',3.068,-4.903,-1.578,'EPSG','9104',-1.06,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGS-Phl',0); INSERT INTO "usage" VALUES('EPSG','11719','helmert_transformation','EPSG','15708','EPSG','1190','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15709','Nouakchott 1965 to WGS 84 (1)','Derived by IGN in 1992 at 7 stations within Nouakchott city.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4680','EPSG','4326',5.0,124.5,-63.5,-281.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Mau',0); INSERT INTO "usage" VALUES('EPSG','11720','helmert_transformation','EPSG','15709','EPSG','2972','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15710','Aratu to WGS 84 (10)','Replaced by Aratu to WGS 84 (14) (tfm code 5053) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',5.0,-160.0,315.0,-142.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra Campos',0); INSERT INTO "usage" VALUES('EPSG','11721','helmert_transformation','EPSG','15710','EPSG','2963','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15711','Aratu to WGS 84 (11)','Replaced by Aratu to WGS 84 (13) (tfm code 5051) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',5.0,-158.0,309.0,-147.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra Santos',0); INSERT INTO "usage" VALUES('EPSG','11722','helmert_transformation','EPSG','15711','EPSG','2962','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15712','Aratu to WGS 84 (12)','Replaced by Aratu to WGS 84 (15) (tfm code 5055) which Petrobras now recommends for the area.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',5.0,-161.0,310.0,-145.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra EspS',0); INSERT INTO "usage" VALUES('EPSG','11723','helmert_transformation','EPSG','15712','EPSG','2964','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15713','Gan 1970 to WGS 84 (1)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4684','EPSG','4326',44.0,-133.0,-321.0,50.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Mdv',0); INSERT INTO "usage" VALUES('EPSG','11724','helmert_transformation','EPSG','15713','EPSG','3274','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15714','Bogota 1975 to MAGNA-SIRGAS (1)','May be taken as transformation to WGS 84 - see tfm code 15715. See Bogota 1975 to MAGNA-SIRGAS (9), tfm code 15730, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,-806.413,-263.5,-622.671,'EPSG','9001',6.018583e-05,-1.450001e-05,-0.0001892455,'EPSG','9101',-20.81616,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 1',0); INSERT INTO "usage" VALUES('EPSG','11725','helmert_transformation','EPSG','15714','EPSG','3082','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15715','Bogota 1975 to WGS 84 (3)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (1) (tfm code 15714). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,-806.413,-263.5,-622.671,'EPSG','9001',6.018583e-05,-1.450001e-05,-0.0001892455,'EPSG','9101',-20.81616,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 1',0); INSERT INTO "usage" VALUES('EPSG','11726','helmert_transformation','EPSG','15715','EPSG','3082','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15716','Bogota 1975 to MAGNA-SIRGAS (2)','May be taken as transformation to WGS 84 - see tfm code 15717. See Bogota 1975 to MAGNA-SIRGAS (10), tfm code 15731, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,100.783,187.382,-47.0,'EPSG','9001',-4.471839e-05,1.175093e-05,-4.027967e-05,'EPSG','9101',-13.56561,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 2',0); INSERT INTO "usage" VALUES('EPSG','11727','helmert_transformation','EPSG','15716','EPSG','3083','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15717','Bogota 1975 to WGS 84 (4)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (2) (tfm code 15716). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,100.783,187.382,-47.0,'EPSG','9001',-4.471839e-05,1.175093e-05,-4.027967e-05,'EPSG','9101',-13.56561,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 2',0); INSERT INTO "usage" VALUES('EPSG','11728','helmert_transformation','EPSG','15717','EPSG','3083','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15718','Bogota 1975 to MAGNA-SIRGAS (3)','May be taken as transformation to WGS 84 - see tfm code 15719. See Bogota 1975 to MAGNA-SIRGAS (10), tfm code 15732, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,336.026,348.565,252.978,'EPSG','9001',-8.358813e-05,-3.057474e-05,7.573031e-06,'EPSG','9101',-5.771909,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 3',0); INSERT INTO "usage" VALUES('EPSG','11729','helmert_transformation','EPSG','15718','EPSG','3084','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15719','Bogota 1975 to WGS 84 (5)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (3) (tfm code 15718). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,336.026,348.565,252.978,'EPSG','9001',-8.358813e-05,-3.057474e-05,7.573031e-06,'EPSG','9101',-5.771909,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 3',0); INSERT INTO "usage" VALUES('EPSG','11730','helmert_transformation','EPSG','15719','EPSG','3084','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15720','Bogota 1975 to MAGNA-SIRGAS (4)','May be taken as transformation to WGS 84 - see tfm code 15721. See Bogota 1975 to MAGNA-SIRGAS (10), tfm code 15733, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,963.273,486.386,190.997,'EPSG','9001',-7.992171e-05,-8.090696e-06,0.0001051699,'EPSG','9101',-13.89914,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 4',0); INSERT INTO "usage" VALUES('EPSG','11731','helmert_transformation','EPSG','15720','EPSG','3085','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15721','Bogota 1975 to WGS 84 (6)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (4) (tfm code 15720). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,963.273,486.386,190.997,'EPSG','9001',-7.992171e-05,-8.090696e-06,0.0001051699,'EPSG','9101',-13.89914,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 4',0); INSERT INTO "usage" VALUES('EPSG','11732','helmert_transformation','EPSG','15721','EPSG','3085','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15722','Bogota 1975 to MAGNA-SIRGAS (5)','May be taken as transformation to WGS 84 - see tfm code 15723. See Bogota 1975 to MAGNA-SIRGAS (10), tfm code 15734, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,-90.29,247.559,-21.989,'EPSG','9001',-4.216369e-05,-2.030416e-05,-6.209623e-05,'EPSG','9101',2.181658,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 5',0); INSERT INTO "usage" VALUES('EPSG','11733','helmert_transformation','EPSG','15722','EPSG','3086','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15723','Bogota 1975 to WGS 84 (7)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (5) (tfm code 15722). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,-90.29,247.559,-21.989,'EPSG','9001',-4.216369e-05,-2.030416e-05,-6.209623e-05,'EPSG','9101',2.181658,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 5',0); INSERT INTO "usage" VALUES('EPSG','11734','helmert_transformation','EPSG','15723','EPSG','3086','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15724','Bogota 1975 to MAGNA-SIRGAS (6)','May be taken as transformation to WGS 84 - see tfm code 15725. See Bogota 1975 to MAGNA-SIRGAS (10), tfm code 15735, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,-0.562,244.299,-456.938,'EPSG','9001',3.329153e-05,-4.001009e-05,-4.507206e-05,'EPSG','9101',3.74656,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 6',0); INSERT INTO "usage" VALUES('EPSG','11735','helmert_transformation','EPSG','15724','EPSG','3087','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15725','Bogota 1975 to WGS 84 (8)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (6) (tfm code 15724). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,-0.562,244.299,-456.938,'EPSG','9001',3.329153e-05,-4.001009e-05,-4.507206e-05,'EPSG','9101',3.74656,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 6',0); INSERT INTO "usage" VALUES('EPSG','11736','helmert_transformation','EPSG','15725','EPSG','3087','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15726','Bogota 1975 to MAGNA-SIRGAS (7)','May be taken as transformation to WGS 84 - see tfm code 15727. See Bogota 1975 to MAGNA-SIRGAS (10), tfm code 15736, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,-305.356,222.004,-30.023,'EPSG','9001',-4.698084e-05,5.003123e-06,-9.578655e-05,'EPSG','9101',6.325747,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 7',0); INSERT INTO "usage" VALUES('EPSG','11737','helmert_transformation','EPSG','15726','EPSG','3088','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15727','Bogota 1975 to WGS 84 (9)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (7) (tfm code 15726). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,-305.356,222.004,-30.023,'EPSG','9001',-4.698084e-05,5.003123e-06,-9.578655e-05,'EPSG','9101',6.325747,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 7',0); INSERT INTO "usage" VALUES('EPSG','11738','helmert_transformation','EPSG','15727','EPSG','3088','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15728','Bogota 1975 to MAGNA-SIRGAS (8)','May be taken as transformation to WGS 84 - see tfm code 15729. See Bogota 1975 to MAGNA-SIRGAS (10), tfm code 15737, for an equivalent transformation using the Molodenski-Badekas 10-parameter method. OGP recommends this alternative.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4686',1.0,221.899,274.136,-397.554,'EPSG','9001',1.361573e-05,-2.174431e-06,-1.36241e-05,'EPSG','9101',-2.199943,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col CF reg 8',0); INSERT INTO "usage" VALUES('EPSG','11739','helmert_transformation','EPSG','15728','EPSG','3089','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15729','Bogota 1975 to WGS 84 (10)','Parameter values taken from Bogota 1975 to MAGNA-SIRGAS (8) (tfm code 15728). Approximation assumes that MAGNA-SIRGAS is equivalent to WGS 84. Accuracy about 1 part in 10^5 of distance between points, depending on relative tectonic motion.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4218','EPSG','4326',1.0,221.899,274.136,-397.554,'EPSG','9001',1.361573e-05,-2.174431e-06,-1.36241e-05,'EPSG','9101',-2.199943,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Col reg 8',0); INSERT INTO "usage" VALUES('EPSG','11740','helmert_transformation','EPSG','15729','EPSG','3089','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15730','Bogota 1975 to MAGNA-SIRGAS (9)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (1), tfm code 15714.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,300.449,293.757,-317.306,'EPSG','9001',6.018581e-05,-1.450002e-05,-0.0001892455,'EPSG','9101',-20.81615,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1891881.173,-5961263.267,1248403.057,'EPSG','9001','IGAC-Col MB reg 1',0); INSERT INTO "usage" VALUES('EPSG','11741','helmert_transformation','EPSG','15730','EPSG','3082','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15731','Bogota 1975 to MAGNA-SIRGAS (10)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (2), tfm code 15716.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,308.833,282.519,-314.571,'EPSG','9001',-4.471845e-05,1.175087e-05,-4.027981e-05,'EPSG','9101',-13.56561,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1625036.59,-6054644.061,1172969.151,'EPSG','9001','IGAC-Col MB reg 2',0); INSERT INTO "usage" VALUES('EPSG','11742','helmert_transformation','EPSG','15731','EPSG','3083','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15732','Bogota 1975 to MAGNA-SIRGAS (11)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (3), tfm code 15718.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,311.118,289.167,-310.641,'EPSG','9001',-8.358815e-05,-3.057474e-05,7.573043e-06,'EPSG','9101',-5.771882,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1555622.801,-6105353.313,991255.656,'EPSG','9001','IGAC-Col MB reg 3',0); INSERT INTO "usage" VALUES('EPSG','11743','helmert_transformation','EPSG','15732','EPSG','3084','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15733','Bogota 1975 to MAGNA-SIRGAS (12)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (4), tfm code 15720.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,306.666,315.063,-318.837,'EPSG','9001',-7.992173e-05,-8.090698e-06,0.0001051699,'EPSG','9101',-13.89912,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1845222.398,-6058604.495,769132.398,'EPSG','9001','IGAC-Col MB reg 4',0); INSERT INTO "usage" VALUES('EPSG','11744','helmert_transformation','EPSG','15733','EPSG','3085','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15734','Bogota 1975 to MAGNA-SIRGAS (13)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (5), see tfm code 15722.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,307.871,305.803,-311.992,'EPSG','9001',-4.216368e-05,-2.030416e-05,-6.209624e-05,'EPSG','9101',2.181655,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1594396.206,-6143812.398,648855.829,'EPSG','9001','IGAC-Col MB reg 5',0); INSERT INTO "usage" VALUES('EPSG','11745','helmert_transformation','EPSG','15734','EPSG','3086','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15735','Bogota 1975 to MAGNA-SIRGAS (14)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (6), tfm code 15724.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,302.934,307.805,-312.121,'EPSG','9001',3.329153e-05,-4.001009e-05,-4.507205e-05,'EPSG','9101',3.746562,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1558280.49,-6167355.092,491954.219,'EPSG','9001','IGAC-Col MB reg 6',0); INSERT INTO "usage" VALUES('EPSG','11746','helmert_transformation','EPSG','15735','EPSG','3087','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15736','Bogota 1975 to MAGNA-SIRGAS (15)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (7), tfm code 15726.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,295.282,321.293,-311.001,'EPSG','9001',-4.698084e-05,5.003127e-06,-9.578653e-05,'EPSG','9101',6.325744,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1564000.62,-6180004.879,243257.955,'EPSG','9001','IGAC-Col MB reg 7',0); INSERT INTO "usage" VALUES('EPSG','11747','helmert_transformation','EPSG','15736','EPSG','3088','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15737','Bogota 1975 to MAGNA-SIRGAS (16)','Source also quotes an equivalent transformation using the Coordinate Frame 7-parameter method - see Bogota 1975 to MAGNA-SIRGAS (8), tfm code 15728.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4218','EPSG','4686',1.0,302.529,317.979,-319.08,'EPSG','9001',1.361566e-05,-2.174456e-06,-1.362418e-05,'EPSG','9101',-2.199976,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1738580.767,-6120500.388,491473.306,'EPSG','9001','IGAC-Col MB reg 8',0); INSERT INTO "usage" VALUES('EPSG','11748','helmert_transformation','EPSG','15737','EPSG','3089','EPSG','1256'); INSERT INTO "helmert_transformation" VALUES('EPSG','15738','MAGNA-SIRGAS to WGS 84 (1)','Approximation at the +/- 1m level assuming that MAGNA-SIRGAS is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4686','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG',0); INSERT INTO "usage" VALUES('EPSG','11749','helmert_transformation','EPSG','15738','EPSG','1070','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15739','Amersfoort to ETRS89 (3)','Replaces Amersfoort to ETRS89 (1) (tfm code 1751). Replaced by Amersfoort to ETRS89 (5) (tfm code 4830). Dutch sources also quote an equivalent transformation using the Molodenski-Badekas 10-parameter method (M-B) - see tfm code 15740.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4258',0.5,565.2369,50.0087,465.658,'EPSG','9001',1.9725,-1.7004,9.0677,'EPSG','9109',4.0812,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NCG-Nld 2004 CF',0); INSERT INTO "usage" VALUES('EPSG','11750','helmert_transformation','EPSG','15739','EPSG','1275','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15740','Amersfoort to ETRS89 (4)','Replaces Amersfoort to ETRS89 (2) (tfm code 1066). Replaced by Amersfoort to ETRS89 (6) (tfm code 4831). Dutch sources also quote an equivalent transformation using the Coordinate Frame 7-parameter method - see tfm code 15739.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4289','EPSG','4258',0.5,593.0297,26.0038,478.7534,'EPSG','9001',1.9725,-1.7004,9.0677,'EPSG','9109',4.0812,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3903453.1482,368135.3134,5012970.3051,'EPSG','9001','NCG-Nld 2004 MB',0); INSERT INTO "usage" VALUES('EPSG','11751','helmert_transformation','EPSG','15740','EPSG','1275','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15741','Deir ez Zor to WGS 84 (2)','Derived by Elf in 1991 from tfm code 1584 concatenated with a tfm from WGS72BE to WGS84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4227','EPSG','4326',5.0,-187.5,14.1,237.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Elf-Syr Deir 1991',0); INSERT INTO "usage" VALUES('EPSG','11752','helmert_transformation','EPSG','15741','EPSG','2329','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15742','Deir ez Zor to WGS 84 (5)','Derived for 1998 Omar seismic survey and used in 2000 for El Isba seismic survey.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4227','EPSG','4326',5.0,-190.421,8.532,238.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGG-Syr Isba',0); INSERT INTO "usage" VALUES('EPSG','11753','helmert_transformation','EPSG','15742','EPSG','3314','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15743','Deir ez Zor to WGS 84 (6)','Derived 2005 at 5 triangulation stations and using (EGM96 geoid model +1.15m). Used by Total/DEZPC for Jafra and Mazraa seismic surveys. Can be approximated using geocentric translations of dX=-190.6m, dY=+8.8m, dZ=+239.6m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4227','EPSG','4326',0.5,-83.58,-397.54,458.78,'EPSG','9001',-17.595,-2.847,4.256,'EPSG','9104',3.225,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Syr Deir 2005',0); INSERT INTO "usage" VALUES('EPSG','11754','helmert_transformation','EPSG','15743','EPSG','2329','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15745','ED50(ED77) to WGS 84 (6)','Derived in Tombak district in March 2005. Used for South Pars phase 11.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4154','EPSG','4326',0.2,-123.02,-158.95,-168.47,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Irn Spars',0); INSERT INTO "usage" VALUES('EPSG','11756','helmert_transformation','EPSG','15745','EPSG','3140','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15746','Nakhl-e Ghanem to WGS 84 (6)','Derived in Tombak district in March 2005. Used for South Pars phase 11 and Pars LNG plants.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4693','EPSG','4326',0.2,0.0,-0.15,0.68,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Irn Tombak',0); INSERT INTO "usage" VALUES('EPSG','11757','helmert_transformation','EPSG','15746','EPSG','3141','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15748','BD72 to ETRS89 (2)','May be taken as approximate transformation BD72 to WGS 84 - see code 15749. Scale difference is given by information source as 1.0000012747. Given in this record in ppm to assist application usage.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4313','EPSG','4258',0.2,-106.8686,52.2978,-103.7239,'EPSG','9001',-0.3366,0.457,-1.8422,'EPSG','9104',1.2747,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel 0.2m',1); INSERT INTO "usage" VALUES('EPSG','11759','helmert_transformation','EPSG','15748','EPSG','1044','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','15749','BD72 to WGS 84 (3)','Parameter values from BD72 to ETRS89 (2) (code 15748). Scale difference is given by information source as 1.0000012747. Given in this record in ppm to assist application usage.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4313','EPSG','4326',0.2,-106.8686,52.2978,-103.7239,'EPSG','9001',-0.3366,0.457,-1.8422,'EPSG','9104',1.2747,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel 0.2m',1); INSERT INTO "usage" VALUES('EPSG','11760','helmert_transformation','EPSG','15749','EPSG','1044','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15750','St. Kitts 1955 to WGS 84 (2)','Derived at 2 stations. Accuracy 25m in each of X, Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4605','EPSG','4326',44.0,-7.0,215.0,225.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Kna',0); INSERT INTO "usage" VALUES('EPSG','11761','helmert_transformation','EPSG','15750','EPSG','3297','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15751','Reunion 1947 to WGS 84 (2)','Derived at 1 station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4626','EPSG','4326',44.0,94.0,-948.0,-1262.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Reu 30m',0); INSERT INTO "usage" VALUES('EPSG','11762','helmert_transformation','EPSG','15751','EPSG','3337','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15752','ED79 to WGS 84 (1)','Derived at 22 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4668','EPSG','4326',6.0,-86.0,-98.0,-119.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Eur',0); INSERT INTO "usage" VALUES('EPSG','11763','helmert_transformation','EPSG','15752','EPSG','1297','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15754','Aratu to WGS 84 (1)','Mean for 3 basins. See Aratu to WGS 84 (10) through (12) (codes 15710-12) for transformations for individual basins. Replaced by Aratu to WGS 84 (13) through (15) (tfm codes 5051, 5053 and 5055) which Petrobras now recommends for the areas.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326',10.0,-158.0,315.0,-148.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PB-Bra BC BS ES',0); INSERT INTO "usage" VALUES('EPSG','11765','helmert_transformation','EPSG','15754','EPSG','2307','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15755','Minna to WGS 84 (14)','Derived in 1995 at unspecified DMA ADOS stations and Racal stations M101 and ZVS3003. Used by Elf in onshore Block OML 58.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',7.0,-90.2,-87.32,114.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Elf-Nga-OML58',0); INSERT INTO "usage" VALUES('EPSG','11766','helmert_transformation','EPSG','15755','EPSG','3113','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15756','Tahiti 79 to RGPF (1)','May be taken as approximate transformation Tahiti 79 to WGS 84 - see code 4835.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4690','EPSG','4687',0.5,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.877,'EPSG','9104',11.4741,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11767','helmert_transformation','EPSG','15756','EPSG','3124','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15757','Moorea 87 to RGPF (1)','May be taken as approximate transformation Moorea 87 to WGS 84 - see code 15769.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4691','EPSG','4687',0.5,215.525,149.593,176.229,'EPSG','9001',3.2624,1.692,1.1571,'EPSG','9104',10.4773,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11768','helmert_transformation','EPSG','15757','EPSG','3125','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15758','Tahaa 54 to RGPF (1)','May be taken as approximate transformation Tahaa 54 to WGS 84 - see code 15770.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4629','EPSG','4687',0.5,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11769','helmert_transformation','EPSG','15758','EPSG','2812','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15759','Maupiti 83 to RGPF (1)','May be taken as approximate transformation Maupiti 83 to WGS 84 - see code 15771.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4692','EPSG','4687',0.5,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',0); INSERT INTO "usage" VALUES('EPSG','11770','helmert_transformation','EPSG','15759','EPSG','3126','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15760','Fatu Iva 72 to RGPF (1)','May be taken as approximate transformation Fatu Iva 72 to WGS 84 - see code 15772.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4688','EPSG','4687',2.0,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104',186.074,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11771','helmert_transformation','EPSG','15760','EPSG','3133','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','15761','IGN63 Hiva Oa to RGPF (1)','May be taken as approximate transformation IGN63 Hiva Oa to WGS 84 - see code 15773.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4689','EPSG','4687',0.5,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf HivaOa',1); INSERT INTO "usage" VALUES('EPSG','11772','helmert_transformation','EPSG','15761','EPSG','3131','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15762','IGN63 Hiva Oa to RGPF (2)','May be taken as approximate transformation IGN63 Hiva Oa to WGS 84 - see code 15774.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4689','EPSG','4687',2.0,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf Tahuata',1); INSERT INTO "usage" VALUES('EPSG','11773','helmert_transformation','EPSG','15762','EPSG','3132','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','15763','IGN72 Nuku Hiva to RGPF (1)','May be taken as approximate transformation IGN72 Nuku Hiva to WGS 84 - see code 15775.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4630','EPSG','4687',0.5,165.732,216.72,180.505,'EPSG','9001',-0.6434,-0.4512,-0.0791,'EPSG','9104',7.4204,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf NukuHiva',1); INSERT INTO "usage" VALUES('EPSG','11774','helmert_transformation','EPSG','15763','EPSG','2810','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15764','IGN72 Nuku Hiva to RGPF (2)','May be taken as approximate transformation IGN72 Nuku Hiva to WGS 84 - see code 15776.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4630','EPSG','4687',2.0,1363.785,1362.687,398.811,'EPSG','9001',-4.5322,-6.7579,-1.0574,'EPSG','9104',268.361,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf UaHuka',1); INSERT INTO "usage" VALUES('EPSG','11775','helmert_transformation','EPSG','15764','EPSG','3127','EPSG','1151'); INSERT INTO "helmert_transformation" VALUES('EPSG','15765','IGN72 Nuku Hiva to RGPF (3)','May be taken as approximate transformation IGN72 Nuku Hiva to WGS 84 - see code 15777.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4630','EPSG','4687',0.5,259.551,297.612,197.833,'EPSG','9001',1.4866,2.1224,0.4612,'EPSG','9104',27.0249,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf UaPou',1); INSERT INTO "usage" VALUES('EPSG','11776','helmert_transformation','EPSG','15765','EPSG','3128','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15766','RGPF to WGS 84 (1)','Transformation is to original definition of WGS 84. It is consistent with later WGS 84 realisations G730, G873 and G1150 to no better than 1m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4999','EPSG','4979',0.5,0.072,-0.507,-0.245,'EPSG','9001',0.0183,-0.0003,0.007,'EPSG','9104',-0.0093,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11777','helmert_transformation','EPSG','15766','EPSG','1098','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15767','RGPF to WGS 84 (2)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4999','EPSG','4979',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11778','helmert_transformation','EPSG','15767','EPSG','1098','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15768','Tahiti 79 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from Tahiti 79 to RGPF (1) (tfm code 15756).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4690','EPSG','4687',1.0,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.877,'EPSG','9104',11.4741,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11779','helmert_transformation','EPSG','15768','EPSG','3124','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15769','Moorea 87 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from Moorea 87 to RGPF (1) (tfm code 15757).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4691','EPSG','4326',1.0,215.525,149.593,176.229,'EPSG','9001',3.2624,1.692,1.1571,'EPSG','9104',10.4773,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11780','helmert_transformation','EPSG','15769','EPSG','3125','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15770','Tahaa 54 to WGS 84 (2)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from Tahaa 54 to RGPF (1) (tfm code 15758).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4629','EPSG','4326',1.0,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11781','helmert_transformation','EPSG','15770','EPSG','2812','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15771','Maupiti 83 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from Maupiti 83 to RGPF (1) (tfm code 15759).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4692','EPSG','4326',1.0,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11782','helmert_transformation','EPSG','15771','EPSG','3126','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15772','Fatu Iva 72 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from Fatu Iva 72 to RGPF (1) (tfm code 15760).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4688','EPSG','4326',2.0,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104',186.074,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11783','helmert_transformation','EPSG','15772','EPSG','3133','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','15773','IGN63 Hiva Oa to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from IGN63 Hiva Oa to RGPF (1) (tfm code 15761).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4689','EPSG','4326',2.0,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf HivaOa',1); INSERT INTO "usage" VALUES('EPSG','11784','helmert_transformation','EPSG','15773','EPSG','3131','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15774','IGN63 Hiva Oa to WGS 84 (2)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from IGN63 Hiva Oa to RGPF (2) (tfm code 15762).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4689','EPSG','4326',2.0,374.716,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf Tahuata',1); INSERT INTO "usage" VALUES('EPSG','11785','helmert_transformation','EPSG','15774','EPSG','3132','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','15775','IGN72 Nuku Hiva to WGS 84 (2)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from IGN72 Nuku Hiva to RGPF (1) (tfm code 15763).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4630','EPSG','4326',1.0,165.732,216.72,180.505,'EPSG','9001',-0.6434,-0.4512,-0.0791,'EPSG','9104',7.4204,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf NukuHiva',1); INSERT INTO "usage" VALUES('EPSG','11786','helmert_transformation','EPSG','15775','EPSG','2810','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15776','IGN72 Nuku Hiva to WGS 84 (3)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from IGN72 Nuku Hiva to RGPF (2) (tfm code 15764).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4630','EPSG','4326',2.0,1363.785,1362.687,398.811,'EPSG','9001',-4.5322,-6.7579,-1.0574,'EPSG','9104',268.361,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf UaHuka',1); INSERT INTO "usage" VALUES('EPSG','11787','helmert_transformation','EPSG','15776','EPSG','3127','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','15777','IGN72 Nuku Hiva to WGS 84 (4)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84. Parameter values taken from IGN72 Nuku Hiva to RGPF (2) (tfm code 15765).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4630','EPSG','4326',1.0,259.551,297.612,197.833,'EPSG','9001',1.4866,2.1224,0.4612,'EPSG','9104',27.0249,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf UaPou',1); INSERT INTO "usage" VALUES('EPSG','11788','helmert_transformation','EPSG','15777','EPSG','3128','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15778','ELD79 to WGS 84 (7)','Derived by Total at stations SDL 130-03, 04 and 05 in May 2005.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326',0.5,-114.7,-98.5,-150.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Lby NC192',0); INSERT INTO "usage" VALUES('EPSG','11789','helmert_transformation','EPSG','15778','EPSG','3142','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15779','Gulshan 303 to WGS 84 (1)','Derived at origin station in Dhaka. Source information given to 3 decimal places but rounded by OGP to be commensurate with stated accuracy. For consistency with Survey of Bangladesh, Gulshan 303 to WGS 84 (2) [code 9679] should be preferred.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4682','EPSG','4326',1.0,283.7,735.9,261.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bgd rounded',0); INSERT INTO "usage" VALUES('EPSG','11790','helmert_transformation','EPSG','15779','EPSG','1041','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15780','POSGAR 94 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4190','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Arg',1); INSERT INTO "usage" VALUES('EPSG','11791','helmert_transformation','EPSG','15780','EPSG','1033','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15782','Campo Inchauspe to POSGAR 94 (1)','Adopted from U.S. Defense Mapping Agency values for Campo Inchauspe to WGS 84 (tfm code 1127) assuming that POSGAR 94 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4221','EPSG','4694',5.0,-148.0,136.0,90.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Arg',0); INSERT INTO "usage" VALUES('EPSG','11793','helmert_transformation','EPSG','15782','EPSG','3215','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','15783','IGN53 Mare to WGS 84 (2)','Withdrawn by information source and replaced by improved information from local authority - see tfm code 15901.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4641','EPSG','4326',5.0,287.0,178.0,-136.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl Mare',0); INSERT INTO "usage" VALUES('EPSG','11794','helmert_transformation','EPSG','15783','EPSG','2819','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','15784','Le Pouce 1934 to WGS 84 (1)','Derived at 17 stations in 1994 by University of East London. Residuals less than 2m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4699','EPSG','4326',2.0,-770.1,158.4,-498.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UEL-Mus',0); INSERT INTO "usage" VALUES('EPSG','11795','helmert_transformation','EPSG','15784','EPSG','3209','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','15787','IGCB 1955 to WGS 84 (1)','Derived by Topnav in 1991 at station TSH 85.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4701','EPSG','4326',5.0,-79.9,-158.0,-168.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Cod',0); INSERT INTO "usage" VALUES('EPSG','11798','helmert_transformation','EPSG','15787','EPSG','3171','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15788','AGD66 to WGS 84 (16)','Parameter values from AGD66 to GDA94 (1) (code 1278). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326',5.0,-127.8,-52.3,152.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Aus 5m',0); INSERT INTO "usage" VALUES('EPSG','11799','helmert_transformation','EPSG','15788','EPSG','2575','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15789','AGD84 to WGS 84 (8)','Parameter values from AGD84 to GDA94 (1) (code 1279). Approximation assuming WGS 84 is equivalent to GDA94; ignores the low accuracy of the WGS 84 ensemble and the inconsistent application of tectonic plate motion to WGS 84 data.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4203','EPSG','4326',5.0,-128.5,-53.0,153.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Aus 5m',0); INSERT INTO "usage" VALUES('EPSG','11800','helmert_transformation','EPSG','15789','EPSG','2576','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15790','Mhast (offshore) to WGS 72BE (1)','Derived by Oceaneering for CABGOC in 1979. Mean of parameters derived by single point Transit translocation at 2 stations (Mongo Tando and N''To). Applied to single point Transit translocations at other stations to define Mhast (offshore) coordinates.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4705','EPSG','4324',10.0,-255.0,-29.0,-105.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab',0); INSERT INTO "usage" VALUES('EPSG','11801','helmert_transformation','EPSG','15790','EPSG','3180','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15791','Malongo 1987 to WGS 84 (3)','Derived via WGS 72BE by Geodetic for Chevron in 1987 by single point Transit translocation at 1 station (Malongo Y). Replaced in 1989 by Malongo 1987 to WGS 84 (1) (code 1330).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4259','EPSG','4326',10.0,-259.99,-5.28,-97.09,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab87',0); INSERT INTO "usage" VALUES('EPSG','11802','helmert_transformation','EPSG','15791','EPSG','3180','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15792','Egypt Gulf of Suez S-650 TL to WGS 72BE (1)','Derived by Egypt Surveys Limited through single point Transit translocation at 1 station (S-650).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4706','EPSG','4324',5.0,-123.0,98.0,2.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ESL-Egy GoS',0); INSERT INTO "usage" VALUES('EPSG','11803','helmert_transformation','EPSG','15792','EPSG','2341','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15793','Barbados 1938 to WGS 84 (1)','Derived at 2 stations (S40 and M1, St Annes Tower) in 2004. Accuracy 2.5m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4212','EPSG','4326',3.0,31.95,300.99,419.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKHO-Brb',0); INSERT INTO "usage" VALUES('EPSG','11804','helmert_transformation','EPSG','15793','EPSG','3218','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','15794','Cocos Islands 1965 to WGS 84 (1)','Derived at 1 satellite station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4708','EPSG','4326',44.0,-491.0,-22.0,435.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cck',0); INSERT INTO "usage" VALUES('EPSG','11805','helmert_transformation','EPSG','15794','EPSG','1069','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15795','Tern Island 1961 to WGS 84 (1)','Derived at 1 satellite station. Same transformation parameter values related to same datum area given in original 1987 DMA TR8350.2 edition for Sorol Atoll.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4707','EPSG','4326',44.0,114.0,-116.0,-333.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Usa HI Tern',0); INSERT INTO "usage" VALUES('EPSG','11806','helmert_transformation','EPSG','15795','EPSG','3181','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15796','Iwo Jima 1945 to WGS 84 (1)','Derived at 1 satellite station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4709','EPSG','4326',44.0,145.0,75.0,-272.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Jpn IwoJ',0); INSERT INTO "usage" VALUES('EPSG','11807','helmert_transformation','EPSG','15796','EPSG','3200','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15797','Ascension Island 1958 to WGS 84 (1)','Derived at 2 satellite stations. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4712','EPSG','4326',44.0,-205.0,107.0,53.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Shn Asc',0); INSERT INTO "usage" VALUES('EPSG','11808','helmert_transformation','EPSG','15797','EPSG','3182','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15798','Astro DOS 71 to WGS 84 (1)','Derived at 1 satellite station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4710','EPSG','4326',44.0,-320.0,550.0,-494.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','11809','helmert_transformation','EPSG','15798','EPSG','3183','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15799','Marcus Island 1952 to WGS 84 (1)','Derived at 1 satellite station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4711','EPSG','4326',44.0,124.0,-234.0,-25.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Jpn Marcus',0); INSERT INTO "usage" VALUES('EPSG','11810','helmert_transformation','EPSG','15799','EPSG','1872','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15800','Ayabelle Lighthouse to WGS 84 (1)','Derived at 1 satellite station. Accuracy 25m in each axis. Replaced by Ayabelle Lighthouse to WGS 84 (2) (code 6907).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4713','EPSG','4326',44.0,-79.0,-129.0,145.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Dji',0); INSERT INTO "usage" VALUES('EPSG','11811','helmert_transformation','EPSG','15800','EPSG','1081','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15801','Bellevue to WGS 84 (1)','Derived at 3 satellite stations. Accuracy +/- 20 m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4714','EPSG','4326',35.0,-127.0,-769.0,472.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Vut',0); INSERT INTO "usage" VALUES('EPSG','11812','helmert_transformation','EPSG','15801','EPSG','3193','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15802','Camp Area Astro to WGS 84 (1)','No accuracy estimate available.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4715','EPSG','4326',999.0,-104.0,-129.0,239.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ata McMurdo',0); INSERT INTO "usage" VALUES('EPSG','11813','helmert_transformation','EPSG','15802','EPSG','3205','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15803','Phoenix Islands 1966 to WGS 84 (1)','Derived at 4 satellite stations. Accuracy +/- 15 m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4716','EPSG','4326',26.0,298.0,-304.0,-375.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Kir Phoenix',0); INSERT INTO "usage" VALUES('EPSG','11814','helmert_transformation','EPSG','15803','EPSG','3196','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15804','Cape Canaveral to WGS 84 (1)','Derived at 19 satellite stations. Accuracy +/- 3 m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4717','EPSG','4326',6.0,-2.0,151.0,181.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bha Usa-FL',0); INSERT INTO "usage" VALUES('EPSG','11815','helmert_transformation','EPSG','15804','EPSG','3206','EPSG','1233'); INSERT INTO "helmert_transformation" VALUES('EPSG','15805','Solomon 1968 to WGS 84 (1)','Derived at 1 satellite station. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4718','EPSG','4326',44.0,230.0,-199.0,-752.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Slb Gizo',0); INSERT INTO "usage" VALUES('EPSG','11816','helmert_transformation','EPSG','15805','EPSG','3198','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15806','Easter Island 1967 to WGS 84 (1)','Derived at 1 satellite station. Accuracy +/- 25m in each axis','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4719','EPSG','4326',44.0,211.0,147.0,111.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Chl Easter',0); INSERT INTO "usage" VALUES('EPSG','11817','helmert_transformation','EPSG','15806','EPSG','3188','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15807','Solomon 1968 to WGS 84 (2)','Derived at 1 satellite station. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4718','EPSG','4326',44.0,252.0,-209.0,-751.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Slb Guad',0); INSERT INTO "usage" VALUES('EPSG','11818','helmert_transformation','EPSG','15807','EPSG','3197','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15808','Diego Garcia 1969 to WGS 84 (1)','Derived at 2 satellite stations. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4724','EPSG','4326',44.0,208.0,-435.0,-229.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Iot Garcia',0); INSERT INTO "usage" VALUES('EPSG','11819','helmert_transformation','EPSG','15808','EPSG','3189','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15809','Johnston Island 1961 to WGS 84 (1)','Derived at 2 satellite stations. Accuracy +/- 25m in each axis. Note: NGA online html files carry a different dZ value - OGP believe this is an erroneous transcription from the TR8350.2 line above.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4725','EPSG','4326',44.0,189.0,-79.0,-202.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Umi Johnston',0); INSERT INTO "usage" VALUES('EPSG','11820','helmert_transformation','EPSG','15809','EPSG','3201','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15810','Kusaie 1951 to WGS 84 (1)','Derived at 1 satellite station. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4735','EPSG','4326',44.0,647.0,1777.0,-1124.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Fsm Carol',0); INSERT INTO "usage" VALUES('EPSG','11821','helmert_transformation','EPSG','15810','EPSG','3192','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15811','Antigua 1943 to WGS 84 (2)','Determined from 1 satellite station. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4601','EPSG','4326',44.0,-270.0,13.0,62.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Atg Ant',0); INSERT INTO "usage" VALUES('EPSG','11822','helmert_transformation','EPSG','15811','EPSG','1273','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15812','Deception Island to WGS 84 (1)','Accuracy +/- 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4736','EPSG','4326',35.0,260.0,12.0,-147.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Ata Dec',0); INSERT INTO "usage" VALUES('EPSG','11823','helmert_transformation','EPSG','15812','EPSG','3204','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','15813','South Georgia 1968 to WGS 84 (1)','Determined from 1 satellite station. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4722','EPSG','4326',44.0,-794.0,119.0,-298.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Sgs Sgeorg',0); INSERT INTO "usage" VALUES('EPSG','11824','helmert_transformation','EPSG','15813','EPSG','3529','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15814','SIGD61 to WGS 84 (1)','Determined from 1 satellite station. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4726','EPSG','4326',44.0,42.0,124.0,147.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cym Little Brac',0); INSERT INTO "usage" VALUES('EPSG','11825','helmert_transformation','EPSG','15814','EPSG','3186','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15815','PN84 to WGS 84 (1)','Determined at 1 satellite station. Accuracy +/- 25m in each axis. Unclear from information source whether the source CRS is PN68 or PN84 - see also CT code 9743. Given the accuracy, can be considered to apply to either.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4728','EPSG','4326',44.0,-307.0,-92.0,127.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Esp Canary',0); INSERT INTO "usage" VALUES('EPSG','11826','helmert_transformation','EPSG','15815','EPSG','4598','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15816','Tristan 1968 to WGS 84 (1)','Determined at 1 satellite station. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4734','EPSG','4326',44.0,-632.0,438.0,-609.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Shn Tris',0); INSERT INTO "usage" VALUES('EPSG','11827','helmert_transformation','EPSG','15816','EPSG','3184','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15817','Midway 1961 to WGS 84 (1)','Derived at 1 satellite station. Accuracy +/- 25m in each axis. Information source states "provided for historical purposes only. These parameter [values] should not be used". Replaced by Midway 1961 to WGS 84 (2) (tfm code 15818).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4727','EPSG','4326',44.0,912.0,-58.0,1227.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Umi Midway 1987',0); INSERT INTO "usage" VALUES('EPSG','11828','helmert_transformation','EPSG','15817','EPSG','3202','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15818','Midway 1961 to WGS 84 (2)','Derived at 1 satellite station. Accuracy +/- 25m in each axis. Replaces Midway 1961 to WGS 84 (1) (tfm code 15817).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4727','EPSG','4326',44.0,403.0,-81.0,277.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Umi Midway 2003',0); INSERT INTO "usage" VALUES('EPSG','11829','helmert_transformation','EPSG','15818','EPSG','3202','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15819','Pitcairn 1967 to WGS 84 (1)','Derived at 1 satellite station. Accuracy +/- 25 m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4729','EPSG','4326',44.0,185.0,165.0,42.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Pcn Pitcairn Isl',0); INSERT INTO "usage" VALUES('EPSG','11830','helmert_transformation','EPSG','15819','EPSG','3208','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15820','Santo 1965 to WGS 84 (1)','Derived at 1 satellite station. Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4730','EPSG','4326',44.0,170.0,42.0,84.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Vut',0); INSERT INTO "usage" VALUES('EPSG','11831','helmert_transformation','EPSG','15820','EPSG','3194','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15821','Viti Levu 1916 to WGS 84 (1)','Derived at 1 satellite station. Accuracy +/-25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4731','EPSG','4326',44.0,51.0,391.0,-36.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Fji',1); INSERT INTO "usage" VALUES('EPSG','11832','helmert_transformation','EPSG','15821','EPSG','3195','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15822','Marshall Islands 1960 to WGS 84 (1)','Derived at 10 satellite stations. Accuracy +/-3 m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4732','EPSG','4326',6.0,102.0,52.0,-38.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mhl 1960',0); INSERT INTO "usage" VALUES('EPSG','11833','helmert_transformation','EPSG','15822','EPSG','3191','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15823','Wake Island 1952 to WGS 84 (1)','Derived at 2 satellite stations. Accuracy +/-25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4733','EPSG','4326',44.0,276.0,-57.0,149.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Mhl Wake',0); INSERT INTO "usage" VALUES('EPSG','11834','helmert_transformation','EPSG','15823','EPSG','3190','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15824','Old Hawaiian to WGS 84 (3)','Derived at 15 satellite stations. Accuracy +/- 25m in X axis, +/- 20m in Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4135','EPSG','4326',38.0,61.0,-285.0,-181.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Usa HI 1987',0); INSERT INTO "usage" VALUES('EPSG','11835','helmert_transformation','EPSG','15824','EPSG','1334','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15825','Old Hawaiian to WGS 84 (4)','Derived at 2 satellite stations. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4135','EPSG','4326',44.0,89.0,-279.0,-183.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Usa HI Haw 1991',0); INSERT INTO "usage" VALUES('EPSG','11836','helmert_transformation','EPSG','15825','EPSG','1546','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15826','Old Hawaiian to WGS 84 (5)','Derived at 3 satellite stations. Accuracy +/- 20m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4135','EPSG','4326',35.0,45.0,-290.0,-172.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Usa HI Kauai 1991',0); INSERT INTO "usage" VALUES('EPSG','11837','helmert_transformation','EPSG','15826','EPSG','1549','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15827','Old Hawaiian to WGS 84 (6)','Derived at 2 satellite stations. Accuracy +/- 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4135','EPSG','4326',44.0,65.0,-290.0,-190.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Usa HI Maui 1991',0); INSERT INTO "usage" VALUES('EPSG','11838','helmert_transformation','EPSG','15827','EPSG','1547','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15828','Old Hawaiian to WGS 84 (7)','Derived at 8 satellite stations. Accuracy +/- 10m in X axis, +/- 6m in Y and Z axes.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4135','EPSG','4326',14.0,58.0,-283.0,-182.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Usa HI Oahu 1991',0); INSERT INTO "usage" VALUES('EPSG','11839','helmert_transformation','EPSG','15828','EPSG','1548','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15829','SIGD61 to WGS 84 (2)','Determined from 2 satellite stations. Accuracy +/- 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4726','EPSG','4326',1.0,44.4,109.0,151.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UNO-Cym Little Brac',0); INSERT INTO "usage" VALUES('EPSG','11840','helmert_transformation','EPSG','15829','EPSG','3186','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15830','GCGD59 to WGS 84 (1)','Determined from 6 satellite stations. Accuracy +/- 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4723','EPSG','4326',1.0,67.8,106.1,138.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UNO-Cym Grand',0); INSERT INTO "usage" VALUES('EPSG','11841','helmert_transformation','EPSG','15830','EPSG','3185','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15831','KGD2002 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ITRF2000 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4737','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Kor',0); INSERT INTO "usage" VALUES('EPSG','11842','helmert_transformation','EPSG','15831','EPSG','1135','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15832','RGPF to WGS 84 (1)','Transformation is to original definition of WGS 84. It is consistent with later WGS 84 realisations G730, G873 and G1150 to no better than 1m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4687','EPSG','4326',0.5,0.072,-0.507,-0.245,'EPSG','9001',0.0183,-0.0003,0.007,'EPSG','9104',-0.0093,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Pyf',1); INSERT INTO "usage" VALUES('EPSG','11843','helmert_transformation','EPSG','15832','EPSG','1098','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15833','RGPF to WGS 84 (2)','Approximation at the +/- 1m level assuming that RGPF is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4687','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Pyf',0); INSERT INTO "usage" VALUES('EPSG','11844','helmert_transformation','EPSG','15833','EPSG','1098','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15842','Hong Kong 1963(67) to WGS 84 (1)','Derived at 2 satellite stations. Accuracy +/- 1m. Care: does not use Hong Kong 1963 (code 4838) as the source CRS.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4739','EPSG','4326',1.0,-156.0,-271.0,-189.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKHO-Hkg',0); INSERT INTO "usage" VALUES('EPSG','11853','helmert_transformation','EPSG','15842','EPSG','1118','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15843','PZ-90 to WGS 84 (1)','Derived through Glonass and GPS at 30 stations throughout USSR - Former Soviet Union (FSU). Accuracy better than 1.5 metres.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4740','EPSG','4326',1.5,0.0,0.0,1.5,'EPSG','9001',0.0,0.0,-0.076,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GiK-World',0); INSERT INTO "usage" VALUES('EPSG','11854','helmert_transformation','EPSG','15843','EPSG','1262','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','15844','Pulkovo 1942 to PZ-90 (1)','Derived through Glonass at 30 stations throughout USSR - Former Soviet Union (FSU). Mandated for use in Russia by GosStandard of Russia Decree #327 of August 9, 2001.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4740',4.0,25.0,-141.0,-80.0,'EPSG','9001',0.0,-0.35,-0.66,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GiK-Rus',0); INSERT INTO "usage" VALUES('EPSG','11855','helmert_transformation','EPSG','15844','EPSG','2423','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15845','Pampa del Castillo to WGS 84 (1)','Transformation parameter precision given to millimetres in information source but due to accuracy rounded to nearest decimetre for EPSG database.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4161','EPSG','4326',25.0,27.5,14.0,186.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UNO-Arg ComRiv',1); INSERT INTO "usage" VALUES('EPSG','11856','helmert_transformation','EPSG','15845','EPSG','1265','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15846','Egypt Gulf of Suez S-650 TL to WGS 84 (2)','Sometime referred to as "Egypt 1907 to WGS 84". However, application to WGS 84 coordinates of the reverse of this tfm results in Gulf of Suez S-650 TL, not Egypt 1907, position. Gulf of Suez S-650 TL and Egypt 1907 CRSs differ by some 20 metres.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4706','EPSG','4326',5.0,-146.21,112.63,4.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Racal-Egy GoS',0); INSERT INTO "usage" VALUES('EPSG','11857','helmert_transformation','EPSG','15846','EPSG','2341','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15847','MOP78 to WGS 84 (2)','Replaces information from 2001 (tfm code 1925).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4639','EPSG','4326',10.0,253.0,-132.0,-127.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Wlf Wallis',0); INSERT INTO "usage" VALUES('EPSG','11858','helmert_transformation','EPSG','15847','EPSG','2815','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','15848','ST84 Ile des Pins to WGS 84 (2)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4642','EPSG','4326',10.0,-13.0,-348.0,292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl Pins',0); INSERT INTO "usage" VALUES('EPSG','11859','helmert_transformation','EPSG','15848','EPSG','2820','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','15849','Beduaram to WGS 84 (2)','Used by Elf / CGG between December 1991 and March 1992. Probably derived from results of concatenated tfm Beduaram to WGS 84 (1) (code 8634).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4213','EPSG','4326',15.0,-106.0,-87.0,188.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ner SE 91',0); INSERT INTO "usage" VALUES('EPSG','11860','helmert_transformation','EPSG','15849','EPSG','2771','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15850','IGN 1962 Kerguelen to WGS 84 (1)','Also published in US NIMA/NGA TR8350.2 which gives accuracy of +/-25m in each axis and states that derived at one station.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4698','EPSG','4326',10.0,145.0,-187.0,103.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Atf Kerg',0); INSERT INTO "usage" VALUES('EPSG','11861','helmert_transformation','EPSG','15850','EPSG','2816','EPSG','1050'); INSERT INTO "helmert_transformation" VALUES('EPSG','15852','NAD27 to WGS 84 (80)','Developed by John E Chance and Associates. Replaced by NAD27 to WGS 84 (79) (tfm code 15851).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',5.0,-3.0,154.0,177.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JECA-Usa GoM E',0); INSERT INTO "usage" VALUES('EPSG','11863','helmert_transformation','EPSG','15852','EPSG','3358','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15853','NAD27 to WGS 84 (81)','Developed by John E Chance and Associates. Replaced by NAD27 to WGS 84 (79) (tfm code 15851).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',5.0,-7.0,151.0,175.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JECA-Usa GoM C',0); INSERT INTO "usage" VALUES('EPSG','11864','helmert_transformation','EPSG','15853','EPSG','3359','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15854','NAD27 to WGS 84 (82)','Developed by John E Chance and Associates. Replaced by NAD27 to WGS 84 (79) (tfm code 15851).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',5.0,-7.0,151.0,178.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JECA-Usa GoM W',0); INSERT INTO "usage" VALUES('EPSG','11865','helmert_transformation','EPSG','15854','EPSG','3360','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15855','NAD27 to WGS 84 (83)','Developed by John E Chance and Associates at 21°55''N, 97°20''W. Geoid height used =-17m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',5.0,-8.0,125.0,190.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JECA-Mex GoM Tam',0); INSERT INTO "usage" VALUES('EPSG','11866','helmert_transformation','EPSG','15855','EPSG','3361','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15856','NAD27 to WGS 84 (84)','Developed by EnSoCo Inc. Replaced by NAD27 to WGS 84 (79) (tfm code 15851).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',8.0,-7.0,158.0,172.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ESC-Usa GoM',0); INSERT INTO "usage" VALUES('EPSG','11867','helmert_transformation','EPSG','15856','EPSG','3357','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15860','Mauritania 1999 to WGS 84 (1)','Mauritania 1999 can be considered to be the same as WGS 84 within the accuracy of this transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4702','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mau',0); INSERT INTO "usage" VALUES('EPSG','11871','helmert_transformation','EPSG','15860','EPSG','1157','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15865','Pulkovo 1942 to WGS 84 (16)','Derived via PZ-90 at 30 stations throughout USSR (Former Soviet Union, FSU) through concatenation of Pulkovo 1942 to PZ-90 (1) (tfm code 15844) and PZ-90 to WGS 84 (1) (tfm code 15843).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4326',4.5,25.0,-141.0,-78.5,'EPSG','9001',0.0,-0.35,-0.736,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Rus',0); INSERT INTO "usage" VALUES('EPSG','11876','helmert_transformation','EPSG','15865','EPSG','2423','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','15866','FD54 to ED50 (1)','Derived at 3 points in 1976. This transformation then used to define ED50 on the Faroe Islands.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4741','EPSG','4230',0.0,-153.33,-169.41,86.39,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Fro',0); INSERT INTO "usage" VALUES('EPSG','11877','helmert_transformation','EPSG','15866','EPSG','3248','EPSG','1116'); INSERT INTO "helmert_transformation" VALUES('EPSG','15867','PD/83 to ETRS89 (1)','Derived at 10 points of the German GPS Network DREF.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4746','EPSG','4258',1.0,599.4,72.4,419.2,'EPSG','9001',-0.062,-0.022,-2.723,'EPSG','9104',6.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu Thur',0); INSERT INTO "usage" VALUES('EPSG','11878','helmert_transformation','EPSG','15867','EPSG','2544','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15868','RD/83 to ETRS89 (1)','Derived in 2001 at 31 points of the German GPS Network DREF in former East Germany. Although for high accuracy limited to Saxony, may be taken as approximate transformation between DHDN and WGS 84 for all former East German states - see code 15869.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4745','EPSG','4258',1.0,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu Sach',0); INSERT INTO "usage" VALUES('EPSG','11879','helmert_transformation','EPSG','15868','EPSG','2545','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15869','DHDN to WGS 84 (3)','Parameter values taken from RD/83 to ETRS89 (1) (tfm code 15868) assuming that within the accuracy of the transformation ETRS89 is equivalent to WGS 84 and RD/83 is equivalent to DHDN.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326',2.0,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu E',0); INSERT INTO "usage" VALUES('EPSG','11880','helmert_transformation','EPSG','15869','EPSG','1343','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15870','Jouik 1961 to WGS 84 (1)','Derived at 5 points in 2002.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4679','EPSG','4326',1.0,-80.01,253.26,291.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Wood-Mrt',0); INSERT INTO "usage" VALUES('EPSG','11881','helmert_transformation','EPSG','15870','EPSG','2967','EPSG','1198'); INSERT INTO "helmert_transformation" VALUES('EPSG','15871','Nahrwan 1967 to WGS 84 (6)','Derived by concatenation of parameter values published by IGN Paris from Nahrwan 1967 to WGS 72 at the Nahrwan SE Base trig station near Baghdad with DMA WGS 72 to WGS 84 parameter values.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',5.0,-242.2,-144.9,370.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Irq',1); INSERT INTO "usage" VALUES('EPSG','11882','helmert_transformation','EPSG','15871','EPSG','3625','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15872','Karbala 1979 to WGS 84 (1)','Derived from shifts in UTM rectangular coordinates for one point in Basra area provided by Iraq National Oil Exploration Company. Replaced by Karbala 1979 to WGS 84 (2) (tfm code 5078).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4743','EPSG','4326',5.0,84.1,-320.1,218.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OEC-Irq Bas',0); INSERT INTO "usage" VALUES('EPSG','11883','helmert_transformation','EPSG','15872','EPSG','3397','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15873','Douala 1948 to WGS 84 (1)','Derived at Manoca tower assuming the pyramid on the tower and the centre of the tower reservoir are co-located. This assumption carries a few metres uncertainty.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4192','EPSG','4326',10.0,-206.1,-174.7,-87.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Cmr',0); INSERT INTO "usage" VALUES('EPSG','11884','helmert_transformation','EPSG','15873','EPSG','2555','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15874','Nord Sahara 1959 to WGS 84 (7)','Derived at 11 stations throughout blocks 317b, 319b, 321b and 322b. Network based on station P4 (horizontal) and benchmark RN51 (vertical) using EGM96 geoid height. Used by Equinor in Hassi Mouina. May be taken as a transformation to RGSH2020 (CT 10342).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4307','EPSG','4326',5.0,-169.559,-72.34,303.102,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENG-Dza Mou',0); INSERT INTO "usage" VALUES('EPSG','11885','helmert_transformation','EPSG','15874','EPSG','3402','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15875','Fiji 1956 to WGS 84 (1)','Derived at 20 stations. Also published by NGA in GeoTrans v3.4 software with parameter values rounded to integer.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4721','EPSG','4326',7.0,265.025,384.929,-194.046,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DGC-Fji',0); INSERT INTO "usage" VALUES('EPSG','11886','helmert_transformation','EPSG','15875','EPSG','3398','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15876','Fiji 1986 to WGS 84 (1)','Approximation at the +/- 2m level assuming that Fiji 1986 is equivalent to WGS 72. Parameter values taken from WGS 72 to WGS 84 (1) (tfm code 1237).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4720','EPSG','4326',2.0,0.0,0.0,4.5,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.2263,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Fji',0); INSERT INTO "usage" VALUES('EPSG','11887','helmert_transformation','EPSG','15876','EPSG','1094','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15877','Fiji 1986 to WGS 84 (2)','Horizontal accuracy 2m, vertical accuracy approximately 40 metres. Suitable for GIS mapping purposes but not rigorous surveying. Very similar results may be obtained through Fiji 1986 to WGS 84 (1) (tfm code 15876).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4720','EPSG','4326',40.0,-35.173,136.571,-36.964,'EPSG','9001',1.37,-0.842,-4.718,'EPSG','9104',-1.537,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FD-Fji',0); INSERT INTO "usage" VALUES('EPSG','11888','helmert_transformation','EPSG','15877','EPSG','3398','EPSG','1157'); INSERT INTO "helmert_transformation" VALUES('EPSG','15878','Vanua Levu 1915 to WGS 84 (1)','Parameter values taken from Viti Levu 1912 to WGS 84 (1) (tfm code 15897). Approximation at the +/- 50m level assuming that CRS 4748 is equivalent to CRS 4752 within the transformation accuracy. Source CRSs 4748 and 4752 are independent but connected.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4748','EPSG','4326',50.0,51.0,391.0,-36.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Fji',0); INSERT INTO "usage" VALUES('EPSG','11889','helmert_transformation','EPSG','15878','EPSG','3401','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15879','GR96 to WGS 84 (1)','Approximation at the +/- 1m level assuming that GR96 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4747','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Grl',0); INSERT INTO "usage" VALUES('EPSG','11890','helmert_transformation','EPSG','15879','EPSG','1107','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15880','RGNC91-93 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4749','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl',0); INSERT INTO "usage" VALUES('EPSG','11891','helmert_transformation','EPSG','15880','EPSG','1174','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15881','ST87 Ouvea to WGS 84 (2)','Parameter values taken from ST87 Ouvea to RGNC91-93 (1) (code 15885) assuming that RGNC91-93 is equivalent to WGS 84 to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4750','EPSG','4326',1.0,-56.263,16.136,-22.856,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl',0); INSERT INTO "usage" VALUES('EPSG','11892','helmert_transformation','EPSG','15881','EPSG','2813','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15882','IGN72 Grande Terre to RGNC91-93 (1)','Determined in May 2001. May be taken as approximate transformation to WGS 84 - see IGN72 Grande Terre to WGS 84 (3) (code 15903).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4662','EPSG','4749',2.0,-11.64,-348.6,291.98,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 2m',0); INSERT INTO "usage" VALUES('EPSG','11893','helmert_transformation','EPSG','15882','EPSG','2822','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','15883','IGN56 Lifou to RGNC91-93 (1)','Determined in April 1993. May be taken as approximate transformation to WGS 84 - see IGN56 Lifou to WGS 84 (3) (code 15902).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4633','EPSG','4749',1.0,335.47,222.58,-230.94,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 1m',0); INSERT INTO "usage" VALUES('EPSG','11894','helmert_transformation','EPSG','15883','EPSG','2814','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15884','IGN53 Mare to RGNC91-93 (1)','Determined in April 1993, modified in December 1999. May be taken as approximate transformation to WGS 84: see IGN53 Mare to WGS 84 (3) (code 15901).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4641','EPSG','4749',2.0,287.58,177.78,-135.41,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 2m',0); INSERT INTO "usage" VALUES('EPSG','11895','helmert_transformation','EPSG','15884','EPSG','2819','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','15885','ST87 Ouvea to RGNC91-93 (1)','Determined in December 1999. May be used as approximate transformation to WGS 84 - see ST87 Ouvea to WGS 84 (2) (code 15881).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4750','EPSG','4749',0.5,-56.263,16.136,-22.856,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 1m',0); INSERT INTO "usage" VALUES('EPSG','11896','helmert_transformation','EPSG','15885','EPSG','2813','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15886','NEA74 Noumea to RGNC91-93 (1)','Determined in July 2000. May be taken as approximate transformation to WGS 84 - see NEA74 Noumea to WGS 84 (3) (code 15904).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4644','EPSG','4749',1.0,-10.18,-350.43,291.37,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 1m',0); INSERT INTO "usage" VALUES('EPSG','11897','helmert_transformation','EPSG','15886','EPSG','2823','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15887','IGN72 Grande Terre to RGNC91-93 (2)','Determined in April 1993.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4662','EPSG','4749',0.3,97.297,-263.243,310.879,'EPSG','9001',1.5999,-0.8387,-3.1409,'EPSG','9104',13.326,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 1m',0); INSERT INTO "usage" VALUES('EPSG','11898','helmert_transformation','EPSG','15887','EPSG','2822','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15888','IGN72 Grande Terre to RGNC91-93 (3)','Determined in July 2000','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4662','EPSG','4749',0.1,48.812,-205.932,343.993,'EPSG','9001',3.4427,0.4999,-4.0878,'EPSG','9104',6.5215,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl Noum 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11899','helmert_transformation','EPSG','15888','EPSG','2823','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','15889','NEA74 Noumea to RGNC91-93 (2)','Determined in May 2001','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4644','EPSG','4749',0.1,-166.0684,-154.7826,254.8282,'EPSG','9001',37.546,-7.7018,10.2029,'EPSG','9104',-30.84,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11900','helmert_transformation','EPSG','15889','EPSG','2823','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','15890','IGN56 Lifou to RGNC91-93 (2)','Determined in April 1993.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4633','EPSG','4749',0.1,137.092,131.675,91.478,'EPSG','9001',1.9435,11.5995,4.3316,'EPSG','9104',-7.4801,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11901','helmert_transformation','EPSG','15890','EPSG','2814','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','15891','IGN53 Mare to RGNC91-93 (2)','Determined in April 1993, modified in December 1999.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4641','EPSG','4749',0.1,-408.809,366.857,-412.987,'EPSG','9001',-1.8843,0.5308,-2.1657,'EPSG','9104',-121.0994,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11902','helmert_transformation','EPSG','15891','EPSG','2819','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','15892','ST87 Ouvea to RGNC91-93 (2)','Determined in December 1999.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4750','EPSG','4749',0.1,-122.386,-188.707,103.334,'EPSG','9001',-3.511,4.9665,5.7048,'EPSG','9104',4.4799,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11903','helmert_transformation','EPSG','15892','EPSG','2813','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','15893','ST84 Ile des Pins to RGNC91-93 (1)','Determined in December 1999.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4642','EPSG','4749',0.1,244.42,85.352,168.129,'EPSG','9001',8.936,-7.752,-12.5952,'EPSG','9104',14.2723,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 0.1m',0); INSERT INTO "usage" VALUES('EPSG','11904','helmert_transformation','EPSG','15893','EPSG','2820','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','15894','SIRGAS 2000 to WGS 84 (1)','Approximation at the +/- 1m level assuming that SIRGAS 2000 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4674','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-C&S America',0); INSERT INTO "usage" VALUES('EPSG','11905','helmert_transformation','EPSG','15894','EPSG','3418','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15896','Kertau (RSO) to Kertau 1968 (1)','To transform Kertau (RSO) to WGS 84, see concatenated transformation code 8659.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4751','EPSG','4245',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mys',0); INSERT INTO "usage" VALUES('EPSG','11907','helmert_transformation','EPSG','15896','EPSG','1309','EPSG','1164'); INSERT INTO "helmert_transformation" VALUES('EPSG','15897','Viti Levu 1912 to WGS 84 (1)','Derived at 1 satellite station. Accuracy +/-25m in each axis. Replaced by Viti Levu 1912 to WGS 84 (2) (code 6895).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4752','EPSG','4326',44.0,51.0,391.0,-36.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Fji',0); INSERT INTO "usage" VALUES('EPSG','11908','helmert_transformation','EPSG','15897','EPSG','3195','EPSG','1153'); INSERT INTO "helmert_transformation" VALUES('EPSG','15898','Qornoq to GR96 (1)','Derived via NWL 9D.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4747','EPSG','4747',1.0,163.511,127.533,-159.789,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Grl',1); INSERT INTO "usage" VALUES('EPSG','11909','helmert_transformation','EPSG','15898','EPSG','1107','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15899','Scoresbysund 1952 to GR96 (1)','Derived via NWL 9D.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4195','EPSG','4747',1.0,105.0,326.0,-102.5,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Grl',0); INSERT INTO "usage" VALUES('EPSG','11910','helmert_transformation','EPSG','15899','EPSG','2570','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15900','Ammassalik 1958 to GR96 (1)','Derived via NWL 9D.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4196','EPSG','4747',1.0,-45.0,417.0,-3.5,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Grl',0); INSERT INTO "usage" VALUES('EPSG','11911','helmert_transformation','EPSG','15900','EPSG','2571','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15901','IGN53 Mare to WGS 84 (3)','Parameter values taken from IGN53 Mare to RGNC91-93 (1) (code 15884) assuming that RGNC91-93 is equivalent to WGS 84 to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4641','EPSG','4326',2.0,287.58,177.78,-135.41,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl v3',0); INSERT INTO "usage" VALUES('EPSG','11912','helmert_transformation','EPSG','15901','EPSG','2819','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15902','IGN56 Lifou to WGS 84 (3)','Parameter values taken from IGN56 Lifou to RGNC91-93 (1) (code 15883) assuming that RGNC91-93 is equivalent to WGS 84 to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4633','EPSG','4326',1.0,335.47,222.58,-230.94,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl v3',0); INSERT INTO "usage" VALUES('EPSG','11913','helmert_transformation','EPSG','15902','EPSG','2814','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15903','IGN72 Grande Terre to WGS 84 (3)','Parameter values taken from IGN72 Grande Terre to RGNC91-93 (1) (code 15882) assuming that RGNC91-93 is equivalent to WGS 84 to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4662','EPSG','4326',2.0,-11.64,-348.6,291.98,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl v3',0); INSERT INTO "usage" VALUES('EPSG','11914','helmert_transformation','EPSG','15903','EPSG','2822','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15904','NEA74 Noumea to WGS 84 (2)','Parameter values taken from NEA74 Noumea to RGNC91-93 (1) (code 15886) assuming that RGNC91-93 is equivalent to WGS 84 to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4644','EPSG','4326',1.0,-10.18,-350.43,291.37,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl',0); INSERT INTO "usage" VALUES('EPSG','11915','helmert_transformation','EPSG','15904','EPSG','2823','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15908','LGD2006 to WGS 84 (1)','Derived at 5 stations throughout Libya used to define LGD2006 in May 2006.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4754','EPSG','4326',0.1,-208.4058,-109.8777,-2.5764,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SDL-Lby',0); INSERT INTO "usage" VALUES('EPSG','11919','helmert_transformation','EPSG','15908','EPSG','1143','EPSG','1031'); INSERT INTO "helmert_transformation" VALUES('EPSG','15909','ELD79 to WGS 84 (8)','Derived at 29 stations throughout Libya in May 2006.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326',5.0,-115.8543,-99.0583,-152.4616,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SDL-Lby',0); INSERT INTO "usage" VALUES('EPSG','11920','helmert_transformation','EPSG','15909','EPSG','3271','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','15910','ELD79 to LGD2006 (1)','Derived at 29 stations throughout Libya in May 2006.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4754',5.0,-92.5515,-10.8194,149.8852,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SDL-Lby',1); INSERT INTO "usage" VALUES('EPSG','11921','helmert_transformation','EPSG','15910','EPSG','3271','EPSG','1042'); INSERT INTO "helmert_transformation" VALUES('EPSG','15911','ID74 to DGN95 (1)','Derived at 38 stations. Standard deviations of translations are 1.3, 1.1 and 3.6m, of rotations 0.11, 0.06 and 0.04 sec and ppm 0.18. May be taken as a tfm ID74 to WGS 84 - see tfm 1833.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4238','EPSG','4755',3.0,-1.977,-13.06,-9.993,'EPSG','9001',-0.364,-0.254,-0.689,'EPSG','9104',-1.037,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Bak-Idn',0); INSERT INTO "usage" VALUES('EPSG','11922','helmert_transformation','EPSG','15911','EPSG','4020','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','15912','DGN95 to WGS 84 (1)','Approximation at the +/- 1m level assuming that DGN95 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4755','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Idn',0); INSERT INTO "usage" VALUES('EPSG','11923','helmert_transformation','EPSG','15912','EPSG','1122','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15913','NAD27 to WGS 84 (86)','Developed by John E Chance and Associates at 21°33''N, 92°33''W. Geoid height used =-16.7m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326',5.0,0.0,125.0,196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'JECA-Mex GoM CamN',0); INSERT INTO "usage" VALUES('EPSG','11924','helmert_transformation','EPSG','15913','EPSG','3461','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15918','Beijing 1954 to WGS 84 (1)','Provided by BGP to TOTAL in June 2006.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4214','EPSG','4326',1.0,12.646,-155.176,-80.863,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGP-Chn Ord',0); INSERT INTO "usage" VALUES('EPSG','11929','helmert_transformation','EPSG','15918','EPSG','3466','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15919','Beijing 1954 to WGS 84 (2)','Derived via WGS 72BE. Original transformation derived in 1979 at 4 stations on Yellow Sea coast.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4214','EPSG','4326',15.0,15.53,-113.82,-41.38,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BP-Chn YS',0); INSERT INTO "usage" VALUES('EPSG','11930','helmert_transformation','EPSG','15919','EPSG','3469','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15920','Beijing 1954 to WGS 84 (3)','Derived via WGS 72BE. Original transformation derived by GSI in 1980-81. The GSI memo incorrectly gave the parameters as from WGS 72 to Beijing 1954, but it has been determined by the OGP that the memo should have stated from Beijing 1954 to WGS 72BE.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4214','EPSG','4326',15.0,31.4,-144.3,-74.8,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Chn SCS',0); INSERT INTO "usage" VALUES('EPSG','11931','helmert_transformation','EPSG','15920','EPSG','3470','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15921','Beijing 1954 to WGS 84 (4)','Provided by BGP to ELF in 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4214','EPSG','4326',1.0,15.8,-154.4,-82.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGP-Chn Tarim',0); INSERT INTO "usage" VALUES('EPSG','11932','helmert_transformation','EPSG','15921','EPSG','3507','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15923','ELD79 to WGS 84 (9)','Derived by SDL for Total in Cyrenaica blocks 2 & 4.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326',2.0,-117.7,-100.3,-152.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Lby Cyr',0); INSERT INTO "usage" VALUES('EPSG','11934','helmert_transformation','EPSG','15923','EPSG','3477','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15924','ELD79 to LGD2006 (1)','Derived at 29 stations throughout Libya in May 2006.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4754',5.0,92.5515,10.8194,-149.8852,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SDL-Lby',0); INSERT INTO "usage" VALUES('EPSG','11935','helmert_transformation','EPSG','15924','EPSG','3271','EPSG','1045'); INSERT INTO "helmert_transformation" VALUES('EPSG','15925','JAD2001 to WGS 84 (1)','For many practical purposes JAD2001 can be considered to be coincident with WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4758','EPSG','4326',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLA-Jam',0); INSERT INTO "usage" VALUES('EPSG','11936','helmert_transformation','EPSG','15925','EPSG','1128','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15926','JAD69 to JAD2001 (1)','Accuracy 0.3 to 0.5 metres. May be used as tfm to WGS 84 - see JAD69 to WGS 84 (3) (tfm code 15927).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4242','EPSG','4758',0.5,-33.722,153.789,94.959,'EPSG','9001',8.581,4.478,-4.54,'EPSG','9104',8.95,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLA-Jam',0); INSERT INTO "usage" VALUES('EPSG','11937','helmert_transformation','EPSG','15926','EPSG','3342','EPSG','1034'); INSERT INTO "helmert_transformation" VALUES('EPSG','15927','JAD69 to WGS 84 (3)','Derived at 4 stations, tested at a further 9. Also used as tfm to JAD69 to JAD2001 (see code 15926). Note: Info source paper contains an error in sign of dS, subsequently confirmed by primary author and NLA of Jamaica, and corrected in this record.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4242','EPSG','4326',1.0,-33.722,153.789,94.959,'EPSG','9001',8.581,4.478,-4.54,'EPSG','9104',8.95,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UT-Jam 1m',0); INSERT INTO "usage" VALUES('EPSG','11938','helmert_transformation','EPSG','15927','EPSG','3342','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15928','BD72 to ETRS89 (2)','May be taken as approximate transformation BD72 to WGS 84 - see code 15929. Scale difference is given by information source as -1.0000012747. Given in this record in ppm to assist application usage.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4313','EPSG','4258',0.2,-106.8686,52.2978,-103.7239,'EPSG','9001',-0.3366,0.457,-1.8422,'EPSG','9104',-1.2747,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel 0.2m',0); INSERT INTO "usage" VALUES('EPSG','11939','helmert_transformation','EPSG','15928','EPSG','1347','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','15929','BD72 to WGS 84 (3)','Parameter values from BD72 to ETRS89 (2) (code 15928) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the tfm. Scale difference is given by information source as -1.0000012747; given in this record in ppm to assist application usage.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4313','EPSG','4326',1.0,-106.8686,52.2978,-103.7239,'EPSG','9001',-0.3366,0.457,-1.8422,'EPSG','9104',-1.2747,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel 1m',0); INSERT INTO "usage" VALUES('EPSG','11940','helmert_transformation','EPSG','15929','EPSG','1347','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15930','NAD83(HARN) to NAD83(NSRS2007) (1)','Accuracy 0.1 to 0.2m in California, 0.05-0.11 in Oregon, elsewhere better than 0.05m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4152','EPSG','4326',0.1,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-USA conus',1); INSERT INTO "usage" VALUES('EPSG','11941','helmert_transformation','EPSG','15930','EPSG','1323','EPSG','1032'); INSERT INTO "helmert_transformation" VALUES('EPSG','15931','NAD83(NSRS2007) to WGS 84 (1)','Approximation assuming that NAD83(NSRS2007) is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4759','EPSG','4326',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-USA conus AK',0); INSERT INTO "usage" VALUES('EPSG','11942','helmert_transformation','EPSG','15931','EPSG','1511','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15934','Amersfoort to WGS 84 (3)','Parameter values from Amersfoort to ETRS89 (3) (tfm code 15739) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaces Amersfoort to WGS 84 (2) (code 1672). Replaced by Amersfoort to WGS 84 (4) (tfm code 4833).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4326',1.0,565.2369,50.0087,465.658,'EPSG','9001',1.9725,-1.7004,9.0677,'EPSG','9109',4.0812,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Nld 2004',0); INSERT INTO "usage" VALUES('EPSG','11945','helmert_transformation','EPSG','15934','EPSG','1275','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15935','Beijing 1954 to WGS 84 (5)','Concatenated via WGS 72BE. Recomputation by Shelltech in 1981 of SSB 1980 observation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4214','EPSG','4326',10.0,18.0,-136.8,-73.7,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Shlt-Chn BeiBu',0); INSERT INTO "usage" VALUES('EPSG','11946','helmert_transformation','EPSG','15935','EPSG','3561','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15936','Beijing 1954 to WGS 84 (6)','Provided by Sinopec to TOTAL in January 2007.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4214','EPSG','4326',1.0,11.911,-154.833,-80.079,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Sino-Chn Ord',0); INSERT INTO "usage" VALUES('EPSG','11947','helmert_transformation','EPSG','15936','EPSG','3466','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15937','Nahrwan 1967 to WGS 84 (7)','Parameter values adopted by Total are mean of those derived by Oceonics and Geoid through ties at station TC58 to 4 IGS stations in March 1995.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',2.0,-245.8,-152.2,382.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-UAE Abd',0); INSERT INTO "usage" VALUES('EPSG','11948','helmert_transformation','EPSG','15937','EPSG','3509','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15938','Nahrwan 1967 to WGS 84 (8)','Derived via WGS 72BE from Transit observations at station TC58 in 1976 by BP for ADMA.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4270','EPSG','4326',5.0,-225.4,-158.7,380.8,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ADMA-UAE Abd',0); INSERT INTO "usage" VALUES('EPSG','11949','helmert_transformation','EPSG','15938','EPSG','3509','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15952','Nahrwan 1967 to WGS 84 (9)','Used by DPC for Al Fateh field. Applying this transformation gives same result as Nahrwan 1967 to WGS 84 (8) (code 15938).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',5.0,-244.2,-149.8,379.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DPC-UAE Fat',0); INSERT INTO "usage" VALUES('EPSG','11963','helmert_transformation','EPSG','15952','EPSG','3530','EPSG','1136'); INSERT INTO "helmert_transformation" VALUES('EPSG','15953','Nahrwan 1967 to WGS 84 (10)','Used by Dubai Municipality before 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326',5.0,-250.7,-157.9,380.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Dub-UAE Dub',0); INSERT INTO "usage" VALUES('EPSG','11964','helmert_transformation','EPSG','15953','EPSG','3531','EPSG','1248'); INSERT INTO "helmert_transformation" VALUES('EPSG','15957','Qornoq 1927 to GR96 (1)','Derived via NWL 9D.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4194','EPSG','4747',1.0,163.511,127.533,-159.789,'EPSG','9001',0.0,0.0,0.814,'EPSG','9104',-0.6,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Grl',0); INSERT INTO "usage" VALUES('EPSG','11968','helmert_transformation','EPSG','15957','EPSG','3362','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15963','Yacare to SIRGAS (1)','Derived at 11 stations during 1998 densification of Uruguay control based on SIRAGAS 1995.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4309','EPSG','4170',1.5,-124.45,183.74,44.64,'EPSG','9001',-0.4384,0.5446,-0.9706,'EPSG','9104',-2.1365,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SGM-Ury',1); INSERT INTO "usage" VALUES('EPSG','11974','helmert_transformation','EPSG','15963','EPSG','1247','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15964','ED50 to WGS 84 (42)','Developed by the Portuguese Hydrographic Institute and used by the Directorate of Energy and Geology.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',5.0,-86.277,-108.879,-120.181,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DGEG-Por off',0); INSERT INTO "usage" VALUES('EPSG','11975','helmert_transformation','EPSG','15964','EPSG','3537','EPSG','1187'); INSERT INTO "helmert_transformation" VALUES('EPSG','15965','S-JTSK to WGS 84 (3)','Derived at 6 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4156','EPSG','4326',6.0,589.0,76.0,480.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Cze',0); INSERT INTO "usage" VALUES('EPSG','11976','helmert_transformation','EPSG','15965','EPSG','1306','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15966','HTRS96 to ETRS89 (1)','May be taken as approximate transformation HTRS96 to WGS 84 - see code 15967.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4761','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Hrv',0); INSERT INTO "usage" VALUES('EPSG','11977','helmert_transformation','EPSG','15966','EPSG','1076','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','15967','HTRS96 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. HTRS96 is a regional realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4761','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Hrv',0); INSERT INTO "usage" VALUES('EPSG','11978','helmert_transformation','EPSG','15967','EPSG','1076','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15969','Bermuda 1957 to BDA2000 (1)','Derived in 1998 at 12 stations. Used for transformation of 1:2500 mapping. May be taken as approximate transformation Bermuda 1957 to WGS 84 - see code 15970.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4216','EPSG','4762',1.0,-292.295,248.758,429.447,'EPSG','9001',-4.9971,-2.99,-6.6906,'EPSG','9104',1.0289,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LBS-Bmu',0); INSERT INTO "usage" VALUES('EPSG','11979','helmert_transformation','EPSG','15969','EPSG','3221','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15970','Bermuda 1957 to WGS 84 (2)','Parameter values from Bermuda 1957 to BDA2000 (1) (code 15969). Assumes BDA2000 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4216','EPSG','4326',1.0,-292.295,248.758,429.447,'EPSG','9001',-4.9971,-2.99,-6.6906,'EPSG','9104',1.0289,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bmu',0); INSERT INTO "usage" VALUES('EPSG','11980','helmert_transformation','EPSG','15970','EPSG','3221','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15971','BDA2000 to WGS 84 (1)','Approximation at the +/- 1m level assuming that BDA2000 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4762','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bmu',0); INSERT INTO "usage" VALUES('EPSG','11981','helmert_transformation','EPSG','15971','EPSG','1047','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15972','Pitcairn 2006 to WGS 84 (1)','Approximation at the +/- 1m level assuming that Pitcairn 2006 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4763','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Pcn',0); INSERT INTO "usage" VALUES('EPSG','11982','helmert_transformation','EPSG','15972','EPSG','3208','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15973','Popular Visualisation CRS to WGS 84 (1)','Executes change of sphere/ellipsoid','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4055','EPSG','4326',800.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-web',1); INSERT INTO "usage" VALUES('EPSG','11983','helmert_transformation','EPSG','15973','EPSG','1262','EPSG','1098'); INSERT INTO "helmert_transformation" VALUES('EPSG','15974','RSRGD2000 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RSRGD2000 is equivalent to WGS 84.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4764','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ata',0); INSERT INTO "usage" VALUES('EPSG','11984','helmert_transformation','EPSG','15974','EPSG','3558','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15975','NZGD49 to WGS 84 (4)','These parameter values are taken from NZGD49 to NZGD2000 (1) (code 1566) and assume that NZGD2000 and WGS 84 are coincident to within the accuracy of the tfm. For better accuracy use NZGD49 to WGS 84 (2) (code 1564) or NZGD49 to WGS 84 (3) (code 1670).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4272','EPSG','4326',5.0,54.4,-20.1,183.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl 5m',0); INSERT INTO "usage" VALUES('EPSG','11985','helmert_transformation','EPSG','15975','EPSG','3285','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15976','Slovenia 1996 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. Slovenia 1996 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4765','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Svn',0); INSERT INTO "usage" VALUES('EPSG','11986','helmert_transformation','EPSG','15976','EPSG','1212','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15977','Slovenia 1996 to ETRS89 (1)','Slovenia 1996 is a local densification of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4765','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Svn',0); INSERT INTO "usage" VALUES('EPSG','11987','helmert_transformation','EPSG','15977','EPSG','1212','EPSG','1161'); INSERT INTO "helmert_transformation" VALUES('EPSG','15978','NAD27 to WGS 84 (88)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4267','EPSG','4326',1.0,2.478,149.752,197.726,'EPSG','9001',-0.526,-0.498,0.501,'EPSG','9104',0.685,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ONHG-Cub',0); INSERT INTO "usage" VALUES('EPSG','11988','helmert_transformation','EPSG','15978','EPSG','1077','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15979','AGD66 to GDA94 (12)','Use only offshore: onshore, transformations 1458 (ACT), 1594 (Tas), 1460 (NSW and Vic) and 1595 (NT) are more accurate.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',3.0,-117.808,-51.536,137.784,'EPSG','9001',-0.303,-0.446,-0.234,'EPSG','9104',-0.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus off',0); INSERT INTO "usage" VALUES('EPSG','14200','helmert_transformation','EPSG','15979','EPSG','3559','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','15980','AGD66 to WGS 84 (18)','Parameter values from AGD66 to GDA94 (12) (code 15979). Assumes WGS 84 is equivalent to GDA94; ignores low accuracy of ensemble and tectonic plate motion. Use only offshore: onshore CTs 1665-68 for ACT, NSW/Vic, Tas and NT respectively are more accurate.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4326',3.0,-117.808,-51.536,137.784,'EPSG','9001',-0.303,-0.446,-0.234,'EPSG','9104',-0.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Aus off',0); INSERT INTO "usage" VALUES('EPSG','11990','helmert_transformation','EPSG','15980','EPSG','3559','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15981','MGI to Slovenia 1996 (1)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible. May be taken as approximate tfm MGI to WGS 84 (see code 15982)','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',1.0,409.545,72.164,486.872,'EPSG','9001',-3.085957,-5.46911,11.020289,'EPSG','9104',17.919665,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn',1); INSERT INTO "usage" VALUES('EPSG','11991','helmert_transformation','EPSG','15981','EPSG','1212','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15982','MGI to WGS 84 (9)','Parameter values from MGI to Slovenia 1996 (1) (code 15981). Assumes Slovenia 1996 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4326',1.0,409.545,72.164,486.872,'EPSG','9001',-3.085957,-5.46911,11.020289,'EPSG','9104',17.919665,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Svn 96',1); INSERT INTO "usage" VALUES('EPSG','11992','helmert_transformation','EPSG','15982','EPSG','1212','EPSG','1041'); INSERT INTO "helmert_transformation" VALUES('EPSG','15983','MGI to Slovenia 1996 (2)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.5,315.393,186.223,499.609,'EPSG','9001',-6.445954,-8.131631,13.208641,'EPSG','9104',23.449046,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn W',1); INSERT INTO "usage" VALUES('EPSG','11993','helmert_transformation','EPSG','15983','EPSG','3564','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15984','MGI to Slovenia 1996 (3)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.5,464.939,-21.478,504.497,'EPSG','9001',0.403,-4.228747,9.954942,'EPSG','9104',12.795378,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn NE',1); INSERT INTO "usage" VALUES('EPSG','11994','helmert_transformation','EPSG','15984','EPSG','3565','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15985','MGI to Slovenia 1996 (4)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.5,459.968,82.193,458.756,'EPSG','9001',-3.565234,-3.700593,10.860523,'EPSG','9104',15.507563,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn SE 0.5m',1); INSERT INTO "usage" VALUES('EPSG','11995','helmert_transformation','EPSG','15985','EPSG','3566','EPSG','1035'); INSERT INTO "helmert_transformation" VALUES('EPSG','15986','MGI to Slovenia 1996 (5)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.3,427.914,105.528,510.908,'EPSG','9001',-4.992523,-5.898813,10.306673,'EPSG','9104',12.431493,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn SE 0.3m',1); INSERT INTO "usage" VALUES('EPSG','11996','helmert_transformation','EPSG','15986','EPSG','3567','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15987','MGI to Slovenia 1996 (6)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.3,468.63,81.389,445.221,'EPSG','9001',-3.839242,-3.262525,10.566866,'EPSG','9104',16.132726,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Dol',1); INSERT INTO "usage" VALUES('EPSG','11997','helmert_transformation','EPSG','15987','EPSG','3568','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15988','MGI to Slovenia 1996 (7)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.3,439.5,-11.77,494.976,'EPSG','9001',-0.026585,-4.65641,10.155824,'EPSG','9104',16.270002,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Staj',1); INSERT INTO "usage" VALUES('EPSG','11998','helmert_transformation','EPSG','15988','EPSG','3569','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15989','MGI to Slovenia 1996 (8)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.3,524.442,3.275,519.002,'EPSG','9001',0.013287,-3.119714,10.232693,'EPSG','9104',4.184981,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Pom',1); INSERT INTO "usage" VALUES('EPSG','11999','helmert_transformation','EPSG','15989','EPSG','3570','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15990','MGI to Slovenia 1996 (9)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.3,281.529,45.963,537.515,'EPSG','9001',-2.570437,-9.648271,10.759507,'EPSG','9104',26.465548,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Gor',1); INSERT INTO "usage" VALUES('EPSG','12000','helmert_transformation','EPSG','15990','EPSG','3571','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15991','MGI to Slovenia 1996 (10)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.3,355.845,274.282,462.979,'EPSG','9001',-9.086933,-6.491055,14.502181,'EPSG','9104',20.888647,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn Prim',1); INSERT INTO "usage" VALUES('EPSG','12001','helmert_transformation','EPSG','15991','EPSG','3572','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15992','MGI to Slovenia 1996 (11)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',0.3,400.629,90.651,472.249,'EPSG','9001',-3.261138,-5.263404,11.83739,'EPSG','9104',20.022676,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn cen',1); INSERT INTO "usage" VALUES('EPSG','12002','helmert_transformation','EPSG','15992','EPSG','3573','EPSG','1033'); INSERT INTO "helmert_transformation" VALUES('EPSG','15993','Pulkovo 1942(58) to ETRS89 (3)','Withdrawn and replaced by S-42 to ETRS89 (4) (tfm code 15994). Consistent with Transdat v2.0 to better than 10m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4179','EPSG','4258',10.0,68.1564,32.7756,80.2249,'EPSG','9001',2.20333014,2.19256447,-2.54166911,'EPSG','9104',-0.14155333,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ANCPI-Rom 2007',0); INSERT INTO "usage" VALUES('EPSG','12003','helmert_transformation','EPSG','15993','EPSG','1197','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','15994','Pulkovo 1942(58) to ETRS89 (4)','Replaces S-42 to ETRS89 (3) (tfm code 15993). Consistent with Transdat v3.0 to better than 0.5m. May be taken as approximate transformation Pulkovo 1942(58) to WGS 84 - see code 15995.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4179','EPSG','4258',3.0,2.3287,-147.0425,-92.0802,'EPSG','9001',0.3092483,-0.32482185,-0.49729934,'EPSG','9104',5.68906266,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ANCPI-Rom 2008',0); INSERT INTO "usage" VALUES('EPSG','12004','helmert_transformation','EPSG','15994','EPSG','1197','EPSG','1043'); INSERT INTO "helmert_transformation" VALUES('EPSG','15995','Pulkovo 1942(58) to WGS 84 (19)','Parameter values taken from Pulkovo 1942(58) to ETRS89 (4) (code 15994) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4179','EPSG','4326',3.0,2.329,-147.042,-92.08,'EPSG','9001',0.309,-0.325,-0.497,'EPSG','9104',5.69,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Rom',0); INSERT INTO "usage" VALUES('EPSG','12005','helmert_transformation','EPSG','15995','EPSG','1197','EPSG','1252'); INSERT INTO "helmert_transformation" VALUES('EPSG','15996','Pulkovo 1942(83) to WGS 84 (3)','Derived at 5 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4178','EPSG','4326',4.0,28.0,-121.0,-77.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Hun',0); INSERT INTO "usage" VALUES('EPSG','12006','helmert_transformation','EPSG','15996','EPSG','1119','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15997','Pulkovo 1942(58) to WGS 84 (4)','Derived at 11 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4179','EPSG','4326',6.0,23.0,-124.0,-82.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Pol',0); INSERT INTO "usage" VALUES('EPSG','12007','helmert_transformation','EPSG','15997','EPSG','3293','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15998','Pulkovo 1942(83) to WGS 84 (5)','Derived at 6 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4178','EPSG','4326',5.0,26.0,-121.0,-78.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Cze',0); INSERT INTO "usage" VALUES('EPSG','12008','helmert_transformation','EPSG','15998','EPSG','1306','EPSG','1160'); INSERT INTO "helmert_transformation" VALUES('EPSG','15999','Pulkovo 1942(58) to WGS 84 (8)','Derived at 7 stations.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4179','EPSG','4326',6.0,24.0,-130.0,-92.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NIMA-Alb',0); INSERT INTO "usage" VALUES('EPSG','12009','helmert_transformation','EPSG','15999','EPSG','3212','EPSG','1160'); proj-9.6.0/data/sql/iau.sql000664 001754 001755 00002703303 14764566077 015440 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db_from_iau.py. DO NOT EDIT ! INSERT INTO coordinate_system VALUES('PROJ','OCENTRIC_LAT_LON','spherical',2); INSERT INTO axis VALUES('PROJ','OCENTRIC_LAT_LON_LAT','Planetocentric latitude','U','north','PROJ','OCENTRIC_LAT_LON',1,'EPSG','9122'); INSERT INTO axis VALUES('PROJ','OCENTRIC_LAT_LON_LON','Planetocentric longitude','V','east','PROJ','OCENTRIC_LAT_LON',2,'EPSG','9122'); INSERT INTO coordinate_system VALUES('PROJ','OGRAPHIC_NORTH_WEST','ellipsoidal',2); INSERT INTO axis VALUES('PROJ','OGRAPHIC_NORTH_WEST_LAT','Geodetic latitude','Lat','north','PROJ','OGRAPHIC_NORTH_WEST',1,'EPSG','9122'); INSERT INTO axis VALUES('PROJ','OGRAPHIC_NORTH_WEST_LON','Geodetic longitude','Lon','west','PROJ','OGRAPHIC_NORTH_WEST',2,'EPSG','9122'); INSERT INTO coordinate_system VALUES('PROJ','PROJECTED_WEST_NORTH','Cartesian',2); INSERT INTO axis VALUES('PROJ','PROJECTED_WEST_NORTH_W','Westing','W','west','PROJ','PROJECTED_WEST_NORTH',1,'EPSG','9001'); INSERT INTO axis VALUES('PROJ','PROJECTED_WEST_NORTH_N','Northing','N','north','PROJ','PROJECTED_WEST_NORTH',2,'EPSG','9001'); INSERT INTO conversion VALUES ('IAU_2015',10,'Equirectangular, clon = 0','','EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',0,'EPSG',9122,'EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_10','conversion','IAU_2015',10,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',15,'Equirectangular, clon = 180','','EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',0,'EPSG',9122,'EPSG','8802','Longitude of natural origin',180,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_15','conversion','IAU_2015',15,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',20,'Sinusoidal, clon = 0','','PROJ','SINUSOIDAL','Sinusoidal','EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_20','conversion','IAU_2015',20,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',25,'Sinusoidal, clon = 180','','PROJ','SINUSOIDAL','Sinusoidal','EPSG','8802','Longitude of natural origin',180,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_25','conversion','IAU_2015',25,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',30,'North Polar','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90,'EPSG',9122,'EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8805','Scale factor at natural origin',1,'EPSG',9201,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_30','conversion','IAU_2015',30,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',35,'South Polar','','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',-90,'EPSG',9122,'EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8805','Scale factor at natural origin',1,'EPSG',9201,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_35','conversion','IAU_2015',35,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',40,'Mollweide, clon = 0','','PROJ','MOLLWEIDE','Mollweide','EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_40','conversion','IAU_2015',40,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',45,'Mollweide, clon = 180','','PROJ','MOLLWEIDE','Mollweide','EPSG','8802','Longitude of natural origin',180,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_45','conversion','IAU_2015',45,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',50,'Robinson, clon = 0','','PROJ','ROBINSON','Robinson','EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_50','conversion','IAU_2015',50,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',55,'Robinson, clon = 180','','PROJ','ROBINSON','Robinson','EPSG','8802','Longitude of natural origin',180,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_55','conversion','IAU_2015',55,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',60,'Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0,'EPSG',9122,'EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8805','Scale factor at natural origin',1.0,'EPSG',9201,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_60','conversion','IAU_2015',60,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',65,'Orthographic, clon = 0','','EPSG','9840','Orthographic','EPSG','8801','Latitude of natural origin',0,'EPSG',9122,'EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_65','conversion','IAU_2015',65,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',70,'Orthographic, clon = 180','','EPSG','9840','Orthographic','EPSG','8801','Latitude of natural origin',0,'EPSG',9122,'EPSG','8802','Longitude of natural origin',180,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_70','conversion','IAU_2015',70,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',75,'Lambert Conic Conformal','','EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',40,'EPSG',9122,'EPSG','8822','Longitude of false origin',0,'EPSG',9122,'EPSG','8823','Latitude of 1st standard parallel',20,'EPSG',9122,'EPSG','8824','Latitude of 2nd standard parallel',60,'EPSG',9122,'EPSG','8826','Easting at false origin',0,'EPSG',9001,'EPSG','8827','Northing at false origin',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_75','conversion','IAU_2015',75,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',80,'Lambert Azimuthal Equal Area','','EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',40,'EPSG',9122,'EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_80','conversion','IAU_2015',80,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',85,'Albers Equal Area','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40,'EPSG',9122,'EPSG','8822','Longitude of false origin',0,'EPSG',9122,'EPSG','8823','Latitude of 1st standard parallel',20,'EPSG',9122,'EPSG','8824','Latitude of 2nd standard parallel',60,'EPSG',9122,'EPSG','8826','Easting at false origin',0,'EPSG',9001,'EPSG','8827','Northing at false origin',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_85','conversion','IAU_2015',85,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES ('IAU_2015',90,'Mercator','','EPSG','1026','Mercator (Spherical)','EPSG','8801','Latitude of natural origin',0,'EPSG',9122,'EPSG','8802','Longitude of natural origin',0,'EPSG',9122,'EPSG','8806','False easting',0,'EPSG',9001,'EPSG','8807','False northing',0,'EPSG',9001,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','CONV_90','conversion','IAU_2015',90,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 10, 'Sun', 695700000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 1000, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',1000,'Sun (2015) - Sphere',NULL,'IAU_2015',10,695700000.000000,'EPSG','9001',NULL,695700000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',1000,'Sun (2015) - Sphere','','IAU_2015',1000,'IAU_2015',1000,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_1000','geodetic_datum','IAU_2015',1000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',1000,'Sun (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',1000,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_1000','geodetic_crs','IAU_2015',1000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1010,'Sun (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1010','projected_crs','IAU_2015',1010,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1015,'Sun (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1015','projected_crs','IAU_2015',1015,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1020,'Sun (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1020','projected_crs','IAU_2015',1020,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1025,'Sun (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1025','projected_crs','IAU_2015',1025,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1030,'Sun (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1030','projected_crs','IAU_2015',1030,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1035,'Sun (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1035','projected_crs','IAU_2015',1035,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1040,'Sun (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1040','projected_crs','IAU_2015',1040,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1045,'Sun (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1045','projected_crs','IAU_2015',1045,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1050,'Sun (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1050','projected_crs','IAU_2015',1050,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1055,'Sun (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1055','projected_crs','IAU_2015',1055,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1060,'Sun (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1060','projected_crs','IAU_2015',1060,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1065,'Sun (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1065','projected_crs','IAU_2015',1065,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1070,'Sun (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1070','projected_crs','IAU_2015',1070,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1075,'Sun (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1075','projected_crs','IAU_2015',1075,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1080,'Sun (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1080','projected_crs','IAU_2015',1080,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1085,'Sun (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1085','projected_crs','IAU_2015',1085,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',1090,'Sun (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',1000,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_1090','projected_crs','IAU_2015',1090,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 199, 'Mercury', 2440530.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 19900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',19900,'Mercury (2015) - Sphere',NULL,'IAU_2015',199,2440530.000000,'EPSG','9001',NULL,2440530.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',19900,'Mercury (2015) - Sphere','','IAU_2015',19900,'IAU_2015',19900,NULL,NULL,NULL,'Hun Kal: 20 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_19900','geodetic_datum','IAU_2015',19900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',19900,'Mercury (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',19900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_19900','geodetic_crs','IAU_2015',19900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19910,'Mercury (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19910','projected_crs','IAU_2015',19910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19915,'Mercury (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19915','projected_crs','IAU_2015',19915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19920,'Mercury (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19920','projected_crs','IAU_2015',19920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19925,'Mercury (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19925','projected_crs','IAU_2015',19925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19930,'Mercury (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19930','projected_crs','IAU_2015',19930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19935,'Mercury (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19935','projected_crs','IAU_2015',19935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19940,'Mercury (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19940','projected_crs','IAU_2015',19940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19945,'Mercury (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19945','projected_crs','IAU_2015',19945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19950,'Mercury (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19950','projected_crs','IAU_2015',19950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19955,'Mercury (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19955','projected_crs','IAU_2015',19955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19960,'Mercury (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19960','projected_crs','IAU_2015',19960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19965,'Mercury (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19965','projected_crs','IAU_2015',19965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19970,'Mercury (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19970','projected_crs','IAU_2015',19970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19975,'Mercury (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19975','projected_crs','IAU_2015',19975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19980,'Mercury (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19980','projected_crs','IAU_2015',19980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19985,'Mercury (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19985','projected_crs','IAU_2015',19985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19990,'Mercury (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',19900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19990','projected_crs','IAU_2015',19990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',19901,'Mercury (2015)',NULL,'IAU_2015',199,2440530.000000,'EPSG','9001',NULL,2438260.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',19901,'Mercury (2015)','','IAU_2015',19901,'IAU_2015',19900,NULL,NULL,NULL,'Hun Kal: 20 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_19901','geodetic_datum','IAU_2015',19901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',19901,'Mercury (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',19901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_19901','geodetic_crs','IAU_2015',19901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19911,'Mercury (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19911','projected_crs','IAU_2015',19911,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19916,'Mercury (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19916','projected_crs','IAU_2015',19916,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19921,'Mercury (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19921','projected_crs','IAU_2015',19921,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19926,'Mercury (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19926','projected_crs','IAU_2015',19926,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19931,'Mercury (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19931','projected_crs','IAU_2015',19931,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19936,'Mercury (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19936','projected_crs','IAU_2015',19936,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19941,'Mercury (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19941','projected_crs','IAU_2015',19941,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19946,'Mercury (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19946','projected_crs','IAU_2015',19946,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19951,'Mercury (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19951','projected_crs','IAU_2015',19951,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19956,'Mercury (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19956','projected_crs','IAU_2015',19956,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19961,'Mercury (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19961','projected_crs','IAU_2015',19961,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19966,'Mercury (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19966','projected_crs','IAU_2015',19966,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19971,'Mercury (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19971','projected_crs','IAU_2015',19971,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19976,'Mercury (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19976','projected_crs','IAU_2015',19976,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19981,'Mercury (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19981','projected_crs','IAU_2015',19981,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19986,'Mercury (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19986','projected_crs','IAU_2015',19986,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19991,'Mercury (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',19901,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19991','projected_crs','IAU_2015',19991,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',19902,'Mercury (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',19901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_19902','geodetic_crs','IAU_2015',19902,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19912,'Mercury (2015) / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19912','projected_crs','IAU_2015',19912,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19917,'Mercury (2015) / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19917','projected_crs','IAU_2015',19917,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19922,'Mercury (2015) / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19922','projected_crs','IAU_2015',19922,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19927,'Mercury (2015) / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19927','projected_crs','IAU_2015',19927,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19932,'Mercury (2015) / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19932','projected_crs','IAU_2015',19932,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19937,'Mercury (2015) / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19937','projected_crs','IAU_2015',19937,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19942,'Mercury (2015) / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19942','projected_crs','IAU_2015',19942,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19947,'Mercury (2015) / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19947','projected_crs','IAU_2015',19947,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19952,'Mercury (2015) / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19952','projected_crs','IAU_2015',19952,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19957,'Mercury (2015) / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19957','projected_crs','IAU_2015',19957,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19962,'Mercury (2015) / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19962','projected_crs','IAU_2015',19962,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19967,'Mercury (2015) / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19967','projected_crs','IAU_2015',19967,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19972,'Mercury (2015) / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19972','projected_crs','IAU_2015',19972,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19977,'Mercury (2015) / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19977','projected_crs','IAU_2015',19977,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19982,'Mercury (2015) / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19982','projected_crs','IAU_2015',19982,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19987,'Mercury (2015) / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19987','projected_crs','IAU_2015',19987,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',19992,'Mercury (2015) / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',19902,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_19992','projected_crs','IAU_2015',19992,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 299, 'Venus', 6051800.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 29900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',29900,'Venus (2015) - Sphere',NULL,'IAU_2015',299,6051800.000000,'EPSG','9001',NULL,6051800.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',29900,'Venus (2015) - Sphere','','IAU_2015',29900,'IAU_2015',29900,NULL,NULL,NULL,'Ariadne: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_29900','geodetic_datum','IAU_2015',29900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',29900,'Venus (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',29900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_29900','geodetic_crs','IAU_2015',29900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29910,'Venus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29910','projected_crs','IAU_2015',29910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29915,'Venus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29915','projected_crs','IAU_2015',29915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29920,'Venus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29920','projected_crs','IAU_2015',29920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29925,'Venus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29925','projected_crs','IAU_2015',29925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29930,'Venus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29930','projected_crs','IAU_2015',29930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29935,'Venus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29935','projected_crs','IAU_2015',29935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29940,'Venus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29940','projected_crs','IAU_2015',29940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29945,'Venus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29945','projected_crs','IAU_2015',29945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29950,'Venus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29950','projected_crs','IAU_2015',29950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29955,'Venus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29955','projected_crs','IAU_2015',29955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29960,'Venus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29960','projected_crs','IAU_2015',29960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29965,'Venus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29965','projected_crs','IAU_2015',29965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29970,'Venus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29970','projected_crs','IAU_2015',29970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29975,'Venus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29975','projected_crs','IAU_2015',29975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29980,'Venus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29980','projected_crs','IAU_2015',29980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29985,'Venus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29985','projected_crs','IAU_2015',29985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',29990,'Venus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',29900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_29990','projected_crs','IAU_2015',29990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 399, 'Earth', 6378136.600000); INSERT INTO prime_meridian VALUES('IAU_2015', 39900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',39900,'Earth (2015) - Sphere',NULL,'IAU_2015',399,6378136.600000,'EPSG','9001',NULL,6378136.600000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',39900,'Earth (2015) - Sphere','','IAU_2015',39900,'IAU_2015',39900,NULL,NULL,NULL,'Greenwich: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_39900','geodetic_datum','IAU_2015',39900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',39900,'Earth (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',39900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_39900','geodetic_crs','IAU_2015',39900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39910,'Earth (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39910','projected_crs','IAU_2015',39910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39915,'Earth (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39915','projected_crs','IAU_2015',39915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39920,'Earth (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39920','projected_crs','IAU_2015',39920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39925,'Earth (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39925','projected_crs','IAU_2015',39925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39930,'Earth (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39930','projected_crs','IAU_2015',39930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39935,'Earth (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39935','projected_crs','IAU_2015',39935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39940,'Earth (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39940','projected_crs','IAU_2015',39940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39945,'Earth (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39945','projected_crs','IAU_2015',39945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39950,'Earth (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39950','projected_crs','IAU_2015',39950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39955,'Earth (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39955','projected_crs','IAU_2015',39955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39960,'Earth (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39960','projected_crs','IAU_2015',39960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39965,'Earth (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39965','projected_crs','IAU_2015',39965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39970,'Earth (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39970','projected_crs','IAU_2015',39970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39975,'Earth (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39975','projected_crs','IAU_2015',39975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39980,'Earth (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39980','projected_crs','IAU_2015',39980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39985,'Earth (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39985','projected_crs','IAU_2015',39985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39990,'Earth (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',39900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39990','projected_crs','IAU_2015',39990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',39901,'Earth (2015)',NULL,'IAU_2015',399,6378136.600000,'EPSG','9001',NULL,6356751.900000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',39901,'Earth (2015)','','IAU_2015',39901,'IAU_2015',39900,NULL,NULL,NULL,'Greenwich: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_39901','geodetic_datum','IAU_2015',39901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',39901,'Earth (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',39901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_39901','geodetic_crs','IAU_2015',39901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39911,'Earth (2015) / Ographic / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39911','projected_crs','IAU_2015',39911,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39916,'Earth (2015) / Ographic / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39916','projected_crs','IAU_2015',39916,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39921,'Earth (2015) / Ographic / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39921','projected_crs','IAU_2015',39921,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39926,'Earth (2015) / Ographic / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39926','projected_crs','IAU_2015',39926,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39931,'Earth (2015) / Ographic / North Polar',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39931','projected_crs','IAU_2015',39931,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39936,'Earth (2015) / Ographic / South Polar',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39936','projected_crs','IAU_2015',39936,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39941,'Earth (2015) / Ographic / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39941','projected_crs','IAU_2015',39941,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39946,'Earth (2015) / Ographic / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39946','projected_crs','IAU_2015',39946,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39951,'Earth (2015) / Ographic / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39951','projected_crs','IAU_2015',39951,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39956,'Earth (2015) / Ographic / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39956','projected_crs','IAU_2015',39956,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39961,'Earth (2015) / Ographic / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39961','projected_crs','IAU_2015',39961,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39966,'Earth (2015) / Ographic / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39966','projected_crs','IAU_2015',39966,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39971,'Earth (2015) / Ographic / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39971','projected_crs','IAU_2015',39971,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39976,'Earth (2015) / Ographic / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39976','projected_crs','IAU_2015',39976,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39981,'Earth (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39981','projected_crs','IAU_2015',39981,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39986,'Earth (2015) / Ographic / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39986','projected_crs','IAU_2015',39986,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',39991,'Earth (2015) / Ographic / Mercator',NULL,'EPSG','4400','IAU_2015',39901,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_39991','projected_crs','IAU_2015',39991,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',39902,'Earth (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',39901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_39902','geodetic_crs','IAU_2015',39902,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 301, 'Moon', 1737400.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 30100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',30100,'Moon (2015) - Sphere',NULL,'IAU_2015',301,1737400.000000,'EPSG','9001',NULL,1737400.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',30100,'Moon (2015) - Sphere','','IAU_2015',30100,'IAU_2015',30100,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_30100','geodetic_datum','IAU_2015',30100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',30100,'Moon (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',30100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_30100','geodetic_crs','IAU_2015',30100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30110,'Moon (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30110','projected_crs','IAU_2015',30110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30115,'Moon (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30115','projected_crs','IAU_2015',30115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30120,'Moon (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30120','projected_crs','IAU_2015',30120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30125,'Moon (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30125','projected_crs','IAU_2015',30125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30130,'Moon (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30130','projected_crs','IAU_2015',30130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30135,'Moon (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30135','projected_crs','IAU_2015',30135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30140,'Moon (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30140','projected_crs','IAU_2015',30140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30145,'Moon (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30145','projected_crs','IAU_2015',30145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30150,'Moon (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30150','projected_crs','IAU_2015',30150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30155,'Moon (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30155','projected_crs','IAU_2015',30155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30160,'Moon (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30160','projected_crs','IAU_2015',30160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30165,'Moon (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30165','projected_crs','IAU_2015',30165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30170,'Moon (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30170','projected_crs','IAU_2015',30170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30175,'Moon (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30175','projected_crs','IAU_2015',30175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30180,'Moon (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30180','projected_crs','IAU_2015',30180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30185,'Moon (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30185','projected_crs','IAU_2015',30185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',30190,'Moon (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',30100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_30190','projected_crs','IAU_2015',30190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 499, 'Mars', 3396190.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 49900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',49900,'Mars (2015) - Sphere',NULL,'IAU_2015',499,3396190.000000,'EPSG','9001',NULL,3396190.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',49900,'Mars (2015) - Sphere','','IAU_2015',49900,'IAU_2015',49900,NULL,NULL,NULL,'Viking 1 lander: 47.95137 W',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_49900','geodetic_datum','IAU_2015',49900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',49900,'Mars (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',49900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_49900','geodetic_crs','IAU_2015',49900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49910,'Mars (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49910','projected_crs','IAU_2015',49910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49915,'Mars (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49915','projected_crs','IAU_2015',49915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49920,'Mars (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49920','projected_crs','IAU_2015',49920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49925,'Mars (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49925','projected_crs','IAU_2015',49925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49930,'Mars (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49930','projected_crs','IAU_2015',49930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49935,'Mars (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49935','projected_crs','IAU_2015',49935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49940,'Mars (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49940','projected_crs','IAU_2015',49940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49945,'Mars (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49945','projected_crs','IAU_2015',49945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49950,'Mars (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49950','projected_crs','IAU_2015',49950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49955,'Mars (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49955','projected_crs','IAU_2015',49955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49960,'Mars (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49960','projected_crs','IAU_2015',49960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49965,'Mars (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49965','projected_crs','IAU_2015',49965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49970,'Mars (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49970','projected_crs','IAU_2015',49970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49975,'Mars (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49975','projected_crs','IAU_2015',49975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49980,'Mars (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49980','projected_crs','IAU_2015',49980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49985,'Mars (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49985','projected_crs','IAU_2015',49985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49990,'Mars (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',49900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49990','projected_crs','IAU_2015',49990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',49901,'Mars (2015)',NULL,'IAU_2015',499,3396190.000000,'EPSG','9001',NULL,3376200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',49901,'Mars (2015)','','IAU_2015',49901,'IAU_2015',49900,NULL,NULL,NULL,'Viking 1 lander: 47.95137 W',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_49901','geodetic_datum','IAU_2015',49901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',49901,'Mars (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',49901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_49901','geodetic_crs','IAU_2015',49901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49911,'Mars (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49911','projected_crs','IAU_2015',49911,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49916,'Mars (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49916','projected_crs','IAU_2015',49916,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49921,'Mars (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49921','projected_crs','IAU_2015',49921,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49926,'Mars (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49926','projected_crs','IAU_2015',49926,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49931,'Mars (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49931','projected_crs','IAU_2015',49931,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49936,'Mars (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49936','projected_crs','IAU_2015',49936,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49941,'Mars (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49941','projected_crs','IAU_2015',49941,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49946,'Mars (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49946','projected_crs','IAU_2015',49946,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49951,'Mars (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49951','projected_crs','IAU_2015',49951,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49956,'Mars (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49956','projected_crs','IAU_2015',49956,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49961,'Mars (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49961','projected_crs','IAU_2015',49961,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49966,'Mars (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49966','projected_crs','IAU_2015',49966,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49971,'Mars (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49971','projected_crs','IAU_2015',49971,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49976,'Mars (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49976','projected_crs','IAU_2015',49976,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49981,'Mars (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49981','projected_crs','IAU_2015',49981,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49986,'Mars (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49986','projected_crs','IAU_2015',49986,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49991,'Mars (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',49901,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49991','projected_crs','IAU_2015',49991,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',49902,'Mars (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',49901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_49902','geodetic_crs','IAU_2015',49902,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49912,'Mars (2015) / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49912','projected_crs','IAU_2015',49912,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49917,'Mars (2015) / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49917','projected_crs','IAU_2015',49917,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49922,'Mars (2015) / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49922','projected_crs','IAU_2015',49922,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49927,'Mars (2015) / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49927','projected_crs','IAU_2015',49927,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49932,'Mars (2015) / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49932','projected_crs','IAU_2015',49932,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49937,'Mars (2015) / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49937','projected_crs','IAU_2015',49937,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49942,'Mars (2015) / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49942','projected_crs','IAU_2015',49942,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49947,'Mars (2015) / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49947','projected_crs','IAU_2015',49947,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49952,'Mars (2015) / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49952','projected_crs','IAU_2015',49952,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49957,'Mars (2015) / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49957','projected_crs','IAU_2015',49957,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49962,'Mars (2015) / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49962','projected_crs','IAU_2015',49962,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49967,'Mars (2015) / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49967','projected_crs','IAU_2015',49967,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49972,'Mars (2015) / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49972','projected_crs','IAU_2015',49972,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49977,'Mars (2015) / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49977','projected_crs','IAU_2015',49977,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49982,'Mars (2015) / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49982','projected_crs','IAU_2015',49982,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49987,'Mars (2015) / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49987','projected_crs','IAU_2015',49987,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',49992,'Mars (2015) / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',49902,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_49992','projected_crs','IAU_2015',49992,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 401, 'Phobos', 11080.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 40100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',40100,'Phobos (2015) - Sphere',NULL,'IAU_2015',401,11080.000000,'EPSG','9001',NULL,11080.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',40100,'Phobos (2015) - Sphere','','IAU_2015',40100,'IAU_2015',40100,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_40100','geodetic_datum','IAU_2015',40100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',40100,'Phobos (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',40100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_40100','geodetic_crs','IAU_2015',40100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40110,'Phobos (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40110','projected_crs','IAU_2015',40110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40115,'Phobos (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40115','projected_crs','IAU_2015',40115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40120,'Phobos (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40120','projected_crs','IAU_2015',40120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40125,'Phobos (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40125','projected_crs','IAU_2015',40125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40130,'Phobos (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40130','projected_crs','IAU_2015',40130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40135,'Phobos (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40135','projected_crs','IAU_2015',40135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40140,'Phobos (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40140','projected_crs','IAU_2015',40140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40145,'Phobos (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40145','projected_crs','IAU_2015',40145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40150,'Phobos (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40150','projected_crs','IAU_2015',40150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40155,'Phobos (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40155','projected_crs','IAU_2015',40155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40160,'Phobos (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40160','projected_crs','IAU_2015',40160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40165,'Phobos (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40165','projected_crs','IAU_2015',40165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40170,'Phobos (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40170','projected_crs','IAU_2015',40170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40175,'Phobos (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40175','projected_crs','IAU_2015',40175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40180,'Phobos (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40180','projected_crs','IAU_2015',40180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40185,'Phobos (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40185','projected_crs','IAU_2015',40185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40190,'Phobos (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',40100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40190','projected_crs','IAU_2015',40190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 402, 'Deimos', 6200.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 40200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',40200,'Deimos (2015) - Sphere',NULL,'IAU_2015',402,6200.000000,'EPSG','9001',NULL,6200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',40200,'Deimos (2015) - Sphere','','IAU_2015',40200,'IAU_2015',40200,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_40200','geodetic_datum','IAU_2015',40200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',40200,'Deimos (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',40200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_40200','geodetic_crs','IAU_2015',40200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40210,'Deimos (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40210','projected_crs','IAU_2015',40210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40215,'Deimos (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40215','projected_crs','IAU_2015',40215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40220,'Deimos (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40220','projected_crs','IAU_2015',40220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40225,'Deimos (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40225','projected_crs','IAU_2015',40225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40230,'Deimos (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40230','projected_crs','IAU_2015',40230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40235,'Deimos (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40235','projected_crs','IAU_2015',40235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40240,'Deimos (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40240','projected_crs','IAU_2015',40240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40245,'Deimos (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40245','projected_crs','IAU_2015',40245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40250,'Deimos (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40250','projected_crs','IAU_2015',40250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40255,'Deimos (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40255','projected_crs','IAU_2015',40255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40260,'Deimos (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40260','projected_crs','IAU_2015',40260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40265,'Deimos (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40265','projected_crs','IAU_2015',40265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40270,'Deimos (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40270','projected_crs','IAU_2015',40270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40275,'Deimos (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40275','projected_crs','IAU_2015',40275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40280,'Deimos (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40280','projected_crs','IAU_2015',40280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40285,'Deimos (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40285','projected_crs','IAU_2015',40285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',40290,'Deimos (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',40200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_40290','projected_crs','IAU_2015',40290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 599, 'Jupiter', 71492000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 59900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',59900,'Jupiter (2015) - Sphere',NULL,'IAU_2015',599,71492000.000000,'EPSG','9001',NULL,71492000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',59900,'Jupiter (2015) - Sphere','','IAU_2015',59900,'IAU_2015',59900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_59900','geodetic_datum','IAU_2015',59900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',59900,'Jupiter (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',59900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_59900','geodetic_crs','IAU_2015',59900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59910,'Jupiter (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59910','projected_crs','IAU_2015',59910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59915,'Jupiter (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59915','projected_crs','IAU_2015',59915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59920,'Jupiter (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59920','projected_crs','IAU_2015',59920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59925,'Jupiter (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59925','projected_crs','IAU_2015',59925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59930,'Jupiter (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59930','projected_crs','IAU_2015',59930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59935,'Jupiter (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59935','projected_crs','IAU_2015',59935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59940,'Jupiter (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59940','projected_crs','IAU_2015',59940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59945,'Jupiter (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59945','projected_crs','IAU_2015',59945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59950,'Jupiter (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59950','projected_crs','IAU_2015',59950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59955,'Jupiter (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59955','projected_crs','IAU_2015',59955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59960,'Jupiter (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59960','projected_crs','IAU_2015',59960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59965,'Jupiter (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59965','projected_crs','IAU_2015',59965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59970,'Jupiter (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59970','projected_crs','IAU_2015',59970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59975,'Jupiter (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59975','projected_crs','IAU_2015',59975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59980,'Jupiter (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59980','projected_crs','IAU_2015',59980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59985,'Jupiter (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59985','projected_crs','IAU_2015',59985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59990,'Jupiter (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',59900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59990','projected_crs','IAU_2015',59990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',59901,'Jupiter (2015)',NULL,'IAU_2015',599,71492000.000000,'EPSG','9001',NULL,66854000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',59901,'Jupiter (2015)','','IAU_2015',59901,'IAU_2015',59900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_59901','geodetic_datum','IAU_2015',59901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',59901,'Jupiter (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',59901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_59901','geodetic_crs','IAU_2015',59901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59911,'Jupiter (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59911','projected_crs','IAU_2015',59911,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59916,'Jupiter (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59916','projected_crs','IAU_2015',59916,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59921,'Jupiter (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59921','projected_crs','IAU_2015',59921,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59926,'Jupiter (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59926','projected_crs','IAU_2015',59926,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59931,'Jupiter (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59931','projected_crs','IAU_2015',59931,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59936,'Jupiter (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59936','projected_crs','IAU_2015',59936,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59941,'Jupiter (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59941','projected_crs','IAU_2015',59941,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59946,'Jupiter (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59946','projected_crs','IAU_2015',59946,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59951,'Jupiter (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59951','projected_crs','IAU_2015',59951,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59956,'Jupiter (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59956','projected_crs','IAU_2015',59956,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59961,'Jupiter (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59961','projected_crs','IAU_2015',59961,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59966,'Jupiter (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59966','projected_crs','IAU_2015',59966,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59971,'Jupiter (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59971','projected_crs','IAU_2015',59971,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59976,'Jupiter (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59976','projected_crs','IAU_2015',59976,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59981,'Jupiter (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59981','projected_crs','IAU_2015',59981,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59986,'Jupiter (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59986','projected_crs','IAU_2015',59986,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59991,'Jupiter (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',59901,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59991','projected_crs','IAU_2015',59991,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',59902,'Jupiter (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',59901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_59902','geodetic_crs','IAU_2015',59902,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59912,'Jupiter (2015) / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59912','projected_crs','IAU_2015',59912,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59917,'Jupiter (2015) / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59917','projected_crs','IAU_2015',59917,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59922,'Jupiter (2015) / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59922','projected_crs','IAU_2015',59922,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59927,'Jupiter (2015) / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59927','projected_crs','IAU_2015',59927,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59932,'Jupiter (2015) / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59932','projected_crs','IAU_2015',59932,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59937,'Jupiter (2015) / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59937','projected_crs','IAU_2015',59937,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59942,'Jupiter (2015) / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59942','projected_crs','IAU_2015',59942,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59947,'Jupiter (2015) / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59947','projected_crs','IAU_2015',59947,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59952,'Jupiter (2015) / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59952','projected_crs','IAU_2015',59952,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59957,'Jupiter (2015) / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59957','projected_crs','IAU_2015',59957,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59962,'Jupiter (2015) / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59962','projected_crs','IAU_2015',59962,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59967,'Jupiter (2015) / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59967','projected_crs','IAU_2015',59967,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59972,'Jupiter (2015) / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59972','projected_crs','IAU_2015',59972,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59977,'Jupiter (2015) / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59977','projected_crs','IAU_2015',59977,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59982,'Jupiter (2015) / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59982','projected_crs','IAU_2015',59982,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59987,'Jupiter (2015) / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59987','projected_crs','IAU_2015',59987,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',59992,'Jupiter (2015) / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',59902,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_59992','projected_crs','IAU_2015',59992,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 501, 'Io', 1821490.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50100,'Io (2015) - Sphere',NULL,'IAU_2015',501,1821490.000000,'EPSG','9001',NULL,1821490.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50100,'Io (2015) - Sphere','','IAU_2015',50100,'IAU_2015',50100,NULL,NULL,NULL,'The mean sub-Jovian direction: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50100','geodetic_datum','IAU_2015',50100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50100,'Io (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50100','geodetic_crs','IAU_2015',50100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50110,'Io (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50110','projected_crs','IAU_2015',50110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50115,'Io (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50115','projected_crs','IAU_2015',50115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50120,'Io (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50120','projected_crs','IAU_2015',50120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50125,'Io (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50125','projected_crs','IAU_2015',50125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50130,'Io (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50130','projected_crs','IAU_2015',50130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50135,'Io (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50135','projected_crs','IAU_2015',50135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50140,'Io (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50140','projected_crs','IAU_2015',50140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50145,'Io (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50145','projected_crs','IAU_2015',50145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50150,'Io (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50150','projected_crs','IAU_2015',50150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50155,'Io (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50155','projected_crs','IAU_2015',50155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50160,'Io (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50160','projected_crs','IAU_2015',50160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50165,'Io (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50165','projected_crs','IAU_2015',50165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50170,'Io (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50170','projected_crs','IAU_2015',50170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50175,'Io (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50175','projected_crs','IAU_2015',50175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50180,'Io (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50180','projected_crs','IAU_2015',50180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50185,'Io (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50185','projected_crs','IAU_2015',50185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50190,'Io (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50190','projected_crs','IAU_2015',50190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 502, 'Europa', 1560800.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50200,'Europa (2015) - Sphere',NULL,'IAU_2015',502,1560800.000000,'EPSG','9001',NULL,1560800.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50200,'Europa (2015) - Sphere','','IAU_2015',50200,'IAU_2015',50200,NULL,NULL,NULL,'Cilix: 182 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50200','geodetic_datum','IAU_2015',50200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50200,'Europa (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50200','geodetic_crs','IAU_2015',50200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50210,'Europa (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50210','projected_crs','IAU_2015',50210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50215,'Europa (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50215','projected_crs','IAU_2015',50215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50220,'Europa (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50220','projected_crs','IAU_2015',50220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50225,'Europa (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50225','projected_crs','IAU_2015',50225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50230,'Europa (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50230','projected_crs','IAU_2015',50230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50235,'Europa (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50235','projected_crs','IAU_2015',50235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50240,'Europa (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50240','projected_crs','IAU_2015',50240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50245,'Europa (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50245','projected_crs','IAU_2015',50245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50250,'Europa (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50250','projected_crs','IAU_2015',50250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50255,'Europa (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50255','projected_crs','IAU_2015',50255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50260,'Europa (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50260','projected_crs','IAU_2015',50260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50265,'Europa (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50265','projected_crs','IAU_2015',50265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50270,'Europa (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50270','projected_crs','IAU_2015',50270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50275,'Europa (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50275','projected_crs','IAU_2015',50275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50280,'Europa (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50280','projected_crs','IAU_2015',50280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50285,'Europa (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50285','projected_crs','IAU_2015',50285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50290,'Europa (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50290','projected_crs','IAU_2015',50290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 503, 'Ganymede', 2631200.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50300,'Ganymede (2015) - Sphere',NULL,'IAU_2015',503,2631200.000000,'EPSG','9001',NULL,2631200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50300,'Ganymede (2015) - Sphere','','IAU_2015',50300,'IAU_2015',50300,NULL,NULL,NULL,'Anat: 128 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50300','geodetic_datum','IAU_2015',50300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50300,'Ganymede (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50300','geodetic_crs','IAU_2015',50300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50310,'Ganymede (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50310','projected_crs','IAU_2015',50310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50315,'Ganymede (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50315','projected_crs','IAU_2015',50315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50320,'Ganymede (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50320','projected_crs','IAU_2015',50320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50325,'Ganymede (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50325','projected_crs','IAU_2015',50325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50330,'Ganymede (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50330','projected_crs','IAU_2015',50330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50335,'Ganymede (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50335','projected_crs','IAU_2015',50335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50340,'Ganymede (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50340','projected_crs','IAU_2015',50340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50345,'Ganymede (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50345','projected_crs','IAU_2015',50345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50350,'Ganymede (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50350','projected_crs','IAU_2015',50350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50355,'Ganymede (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50355','projected_crs','IAU_2015',50355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50360,'Ganymede (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50360','projected_crs','IAU_2015',50360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50365,'Ganymede (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50365','projected_crs','IAU_2015',50365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50370,'Ganymede (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50370','projected_crs','IAU_2015',50370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50375,'Ganymede (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50375','projected_crs','IAU_2015',50375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50380,'Ganymede (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50380','projected_crs','IAU_2015',50380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50385,'Ganymede (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50385','projected_crs','IAU_2015',50385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50390,'Ganymede (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50390','projected_crs','IAU_2015',50390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',50301,'Ganymede (2015)',NULL,'IAU_2015',503,2631200.000000,'EPSG','9001',NULL,2631200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50301,'Ganymede (2015)','','IAU_2015',50301,'IAU_2015',50300,NULL,NULL,NULL,'Anat: 128 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50301','geodetic_datum','IAU_2015',50301,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50301,'Ganymede (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',50301,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50301','geodetic_crs','IAU_2015',50301,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50311,'Ganymede (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50311','projected_crs','IAU_2015',50311,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50316,'Ganymede (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50316','projected_crs','IAU_2015',50316,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50321,'Ganymede (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50321','projected_crs','IAU_2015',50321,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50326,'Ganymede (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50326','projected_crs','IAU_2015',50326,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50331,'Ganymede (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50331','projected_crs','IAU_2015',50331,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50336,'Ganymede (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50336','projected_crs','IAU_2015',50336,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50341,'Ganymede (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50341','projected_crs','IAU_2015',50341,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50346,'Ganymede (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50346','projected_crs','IAU_2015',50346,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50351,'Ganymede (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50351','projected_crs','IAU_2015',50351,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50356,'Ganymede (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50356','projected_crs','IAU_2015',50356,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50361,'Ganymede (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50361','projected_crs','IAU_2015',50361,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50366,'Ganymede (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50366','projected_crs','IAU_2015',50366,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50371,'Ganymede (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50371','projected_crs','IAU_2015',50371,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50376,'Ganymede (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50376','projected_crs','IAU_2015',50376,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50381,'Ganymede (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50381','projected_crs','IAU_2015',50381,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50386,'Ganymede (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50386','projected_crs','IAU_2015',50386,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50391,'Ganymede (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50301,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50391','projected_crs','IAU_2015',50391,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 504, 'Callisto', 2410300.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50400,'Callisto (2015) - Sphere',NULL,'IAU_2015',504,2410300.000000,'EPSG','9001',NULL,2410300.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50400,'Callisto (2015) - Sphere','','IAU_2015',50400,'IAU_2015',50400,NULL,NULL,NULL,'Saga: 326 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50400','geodetic_datum','IAU_2015',50400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50400,'Callisto (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50400','geodetic_crs','IAU_2015',50400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50410,'Callisto (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50410','projected_crs','IAU_2015',50410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50415,'Callisto (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50415','projected_crs','IAU_2015',50415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50420,'Callisto (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50420','projected_crs','IAU_2015',50420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50425,'Callisto (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50425','projected_crs','IAU_2015',50425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50430,'Callisto (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50430','projected_crs','IAU_2015',50430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50435,'Callisto (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50435','projected_crs','IAU_2015',50435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50440,'Callisto (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50440','projected_crs','IAU_2015',50440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50445,'Callisto (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50445','projected_crs','IAU_2015',50445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50450,'Callisto (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50450','projected_crs','IAU_2015',50450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50455,'Callisto (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50455','projected_crs','IAU_2015',50455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50460,'Callisto (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50460','projected_crs','IAU_2015',50460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50465,'Callisto (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50465','projected_crs','IAU_2015',50465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50470,'Callisto (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50470','projected_crs','IAU_2015',50470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50475,'Callisto (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50475','projected_crs','IAU_2015',50475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50480,'Callisto (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50480','projected_crs','IAU_2015',50480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50485,'Callisto (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50485','projected_crs','IAU_2015',50485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50490,'Callisto (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50490','projected_crs','IAU_2015',50490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',50401,'Callisto (2015)',NULL,'IAU_2015',504,2410300.000000,'EPSG','9001',NULL,2410300.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50401,'Callisto (2015)','','IAU_2015',50401,'IAU_2015',50400,NULL,NULL,NULL,'Saga: 326 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50401','geodetic_datum','IAU_2015',50401,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50401,'Callisto (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',50401,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50401','geodetic_crs','IAU_2015',50401,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50411,'Callisto (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50411','projected_crs','IAU_2015',50411,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50416,'Callisto (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50416','projected_crs','IAU_2015',50416,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50421,'Callisto (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50421','projected_crs','IAU_2015',50421,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50426,'Callisto (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50426','projected_crs','IAU_2015',50426,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50431,'Callisto (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50431','projected_crs','IAU_2015',50431,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50436,'Callisto (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50436','projected_crs','IAU_2015',50436,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50441,'Callisto (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50441','projected_crs','IAU_2015',50441,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50446,'Callisto (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50446','projected_crs','IAU_2015',50446,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50451,'Callisto (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50451','projected_crs','IAU_2015',50451,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50456,'Callisto (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50456','projected_crs','IAU_2015',50456,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50461,'Callisto (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50461','projected_crs','IAU_2015',50461,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50466,'Callisto (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50466','projected_crs','IAU_2015',50466,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50471,'Callisto (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50471','projected_crs','IAU_2015',50471,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50476,'Callisto (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50476','projected_crs','IAU_2015',50476,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50481,'Callisto (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50481','projected_crs','IAU_2015',50481,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50486,'Callisto (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50486','projected_crs','IAU_2015',50486,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50491,'Callisto (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',50401,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50491','projected_crs','IAU_2015',50491,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 505, 'Amalthea', 83500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50500,'Amalthea (2015) - Sphere',NULL,'IAU_2015',505,83500.000000,'EPSG','9001',NULL,83500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50500,'Amalthea (2015) - Sphere','','IAU_2015',50500,'IAU_2015',50500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50500','geodetic_datum','IAU_2015',50500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50500,'Amalthea (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50500','geodetic_crs','IAU_2015',50500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50510,'Amalthea (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50510','projected_crs','IAU_2015',50510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50515,'Amalthea (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50515','projected_crs','IAU_2015',50515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50520,'Amalthea (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50520','projected_crs','IAU_2015',50520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50525,'Amalthea (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50525','projected_crs','IAU_2015',50525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50530,'Amalthea (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50530','projected_crs','IAU_2015',50530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50535,'Amalthea (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50535','projected_crs','IAU_2015',50535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50540,'Amalthea (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50540','projected_crs','IAU_2015',50540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50545,'Amalthea (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50545','projected_crs','IAU_2015',50545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50550,'Amalthea (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50550','projected_crs','IAU_2015',50550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50555,'Amalthea (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50555','projected_crs','IAU_2015',50555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50560,'Amalthea (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50560','projected_crs','IAU_2015',50560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50565,'Amalthea (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50565','projected_crs','IAU_2015',50565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50570,'Amalthea (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50570','projected_crs','IAU_2015',50570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50575,'Amalthea (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50575','projected_crs','IAU_2015',50575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50580,'Amalthea (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50580','projected_crs','IAU_2015',50580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50585,'Amalthea (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50585','projected_crs','IAU_2015',50585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50590,'Amalthea (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50590','projected_crs','IAU_2015',50590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 506, 'Himalia', 85000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50600,'Himalia (2015) - Sphere',NULL,'IAU_2015',506,85000.000000,'EPSG','9001',NULL,85000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50600,'Himalia (2015) - Sphere','','IAU_2015',50600,'IAU_2015',50600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50600','geodetic_datum','IAU_2015',50600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50600,'Himalia (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50600','geodetic_crs','IAU_2015',50600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50610,'Himalia (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50610','projected_crs','IAU_2015',50610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50615,'Himalia (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50615','projected_crs','IAU_2015',50615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50620,'Himalia (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50620','projected_crs','IAU_2015',50620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50625,'Himalia (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50625','projected_crs','IAU_2015',50625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50630,'Himalia (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50630','projected_crs','IAU_2015',50630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50635,'Himalia (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50635','projected_crs','IAU_2015',50635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50640,'Himalia (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50640','projected_crs','IAU_2015',50640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50645,'Himalia (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50645','projected_crs','IAU_2015',50645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50650,'Himalia (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50650','projected_crs','IAU_2015',50650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50655,'Himalia (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50655','projected_crs','IAU_2015',50655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50660,'Himalia (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50660','projected_crs','IAU_2015',50660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50665,'Himalia (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50665','projected_crs','IAU_2015',50665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50670,'Himalia (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50670','projected_crs','IAU_2015',50670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50675,'Himalia (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50675','projected_crs','IAU_2015',50675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50680,'Himalia (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50680','projected_crs','IAU_2015',50680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50685,'Himalia (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50685','projected_crs','IAU_2015',50685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50690,'Himalia (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50690','projected_crs','IAU_2015',50690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 507, 'Elara', 40000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50700, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50700,'Elara (2015) - Sphere',NULL,'IAU_2015',507,40000.000000,'EPSG','9001',NULL,40000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50700,'Elara (2015) - Sphere','','IAU_2015',50700,'IAU_2015',50700,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50700','geodetic_datum','IAU_2015',50700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50700,'Elara (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50700,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50700','geodetic_crs','IAU_2015',50700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50710,'Elara (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50710','projected_crs','IAU_2015',50710,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50715,'Elara (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50715','projected_crs','IAU_2015',50715,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50720,'Elara (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50720','projected_crs','IAU_2015',50720,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50725,'Elara (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50725','projected_crs','IAU_2015',50725,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50730,'Elara (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50730','projected_crs','IAU_2015',50730,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50735,'Elara (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50735','projected_crs','IAU_2015',50735,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50740,'Elara (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50740','projected_crs','IAU_2015',50740,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50745,'Elara (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50745','projected_crs','IAU_2015',50745,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50750,'Elara (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50750','projected_crs','IAU_2015',50750,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50755,'Elara (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50755','projected_crs','IAU_2015',50755,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50760,'Elara (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50760','projected_crs','IAU_2015',50760,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50765,'Elara (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50765','projected_crs','IAU_2015',50765,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50770,'Elara (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50770','projected_crs','IAU_2015',50770,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50775,'Elara (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50775','projected_crs','IAU_2015',50775,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50780,'Elara (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50780','projected_crs','IAU_2015',50780,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50785,'Elara (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50785','projected_crs','IAU_2015',50785,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50790,'Elara (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50700,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50790','projected_crs','IAU_2015',50790,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 508, 'Pasiphae', 18000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50800, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50800,'Pasiphae (2015) - Sphere',NULL,'IAU_2015',508,18000.000000,'EPSG','9001',NULL,18000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50800,'Pasiphae (2015) - Sphere','','IAU_2015',50800,'IAU_2015',50800,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50800','geodetic_datum','IAU_2015',50800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50800,'Pasiphae (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50800,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50800','geodetic_crs','IAU_2015',50800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50810,'Pasiphae (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50810','projected_crs','IAU_2015',50810,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50815,'Pasiphae (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50815','projected_crs','IAU_2015',50815,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50820,'Pasiphae (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50820','projected_crs','IAU_2015',50820,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50825,'Pasiphae (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50825','projected_crs','IAU_2015',50825,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50830,'Pasiphae (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50830','projected_crs','IAU_2015',50830,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50835,'Pasiphae (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50835','projected_crs','IAU_2015',50835,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50840,'Pasiphae (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50840','projected_crs','IAU_2015',50840,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50845,'Pasiphae (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50845','projected_crs','IAU_2015',50845,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50850,'Pasiphae (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50850','projected_crs','IAU_2015',50850,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50855,'Pasiphae (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50855','projected_crs','IAU_2015',50855,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50860,'Pasiphae (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50860','projected_crs','IAU_2015',50860,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50865,'Pasiphae (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50865','projected_crs','IAU_2015',50865,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50870,'Pasiphae (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50870','projected_crs','IAU_2015',50870,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50875,'Pasiphae (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50875','projected_crs','IAU_2015',50875,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50880,'Pasiphae (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50880','projected_crs','IAU_2015',50880,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50885,'Pasiphae (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50885','projected_crs','IAU_2015',50885,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50890,'Pasiphae (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50800,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50890','projected_crs','IAU_2015',50890,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 509, 'Sinope', 14000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 50900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',50900,'Sinope (2015) - Sphere',NULL,'IAU_2015',509,14000.000000,'EPSG','9001',NULL,14000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',50900,'Sinope (2015) - Sphere','','IAU_2015',50900,'IAU_2015',50900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_50900','geodetic_datum','IAU_2015',50900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',50900,'Sinope (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',50900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_50900','geodetic_crs','IAU_2015',50900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50910,'Sinope (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50910','projected_crs','IAU_2015',50910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50915,'Sinope (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50915','projected_crs','IAU_2015',50915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50920,'Sinope (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50920','projected_crs','IAU_2015',50920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50925,'Sinope (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50925','projected_crs','IAU_2015',50925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50930,'Sinope (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50930','projected_crs','IAU_2015',50930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50935,'Sinope (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50935','projected_crs','IAU_2015',50935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50940,'Sinope (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50940','projected_crs','IAU_2015',50940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50945,'Sinope (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50945','projected_crs','IAU_2015',50945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50950,'Sinope (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50950','projected_crs','IAU_2015',50950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50955,'Sinope (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50955','projected_crs','IAU_2015',50955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50960,'Sinope (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50960','projected_crs','IAU_2015',50960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50965,'Sinope (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50965','projected_crs','IAU_2015',50965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50970,'Sinope (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50970','projected_crs','IAU_2015',50970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50975,'Sinope (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50975','projected_crs','IAU_2015',50975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50980,'Sinope (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50980','projected_crs','IAU_2015',50980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50985,'Sinope (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50985','projected_crs','IAU_2015',50985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',50990,'Sinope (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',50900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_50990','projected_crs','IAU_2015',50990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 510, 'Lysithea', 12000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 51000, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',51000,'Lysithea (2015) - Sphere',NULL,'IAU_2015',510,12000.000000,'EPSG','9001',NULL,12000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',51000,'Lysithea (2015) - Sphere','','IAU_2015',51000,'IAU_2015',51000,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_51000','geodetic_datum','IAU_2015',51000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',51000,'Lysithea (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',51000,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_51000','geodetic_crs','IAU_2015',51000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51010,'Lysithea (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51010','projected_crs','IAU_2015',51010,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51015,'Lysithea (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51015','projected_crs','IAU_2015',51015,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51020,'Lysithea (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51020','projected_crs','IAU_2015',51020,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51025,'Lysithea (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51025','projected_crs','IAU_2015',51025,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51030,'Lysithea (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51030','projected_crs','IAU_2015',51030,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51035,'Lysithea (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51035','projected_crs','IAU_2015',51035,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51040,'Lysithea (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51040','projected_crs','IAU_2015',51040,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51045,'Lysithea (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51045','projected_crs','IAU_2015',51045,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51050,'Lysithea (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51050','projected_crs','IAU_2015',51050,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51055,'Lysithea (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51055','projected_crs','IAU_2015',51055,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51060,'Lysithea (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51060','projected_crs','IAU_2015',51060,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51065,'Lysithea (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51065','projected_crs','IAU_2015',51065,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51070,'Lysithea (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51070','projected_crs','IAU_2015',51070,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51075,'Lysithea (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51075','projected_crs','IAU_2015',51075,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51080,'Lysithea (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51080','projected_crs','IAU_2015',51080,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51085,'Lysithea (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51085','projected_crs','IAU_2015',51085,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51090,'Lysithea (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',51000,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51090','projected_crs','IAU_2015',51090,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 511, 'Carme', 15000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 51100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',51100,'Carme (2015) - Sphere',NULL,'IAU_2015',511,15000.000000,'EPSG','9001',NULL,15000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',51100,'Carme (2015) - Sphere','','IAU_2015',51100,'IAU_2015',51100,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_51100','geodetic_datum','IAU_2015',51100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',51100,'Carme (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',51100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_51100','geodetic_crs','IAU_2015',51100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51110,'Carme (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51110','projected_crs','IAU_2015',51110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51115,'Carme (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51115','projected_crs','IAU_2015',51115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51120,'Carme (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51120','projected_crs','IAU_2015',51120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51125,'Carme (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51125','projected_crs','IAU_2015',51125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51130,'Carme (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51130','projected_crs','IAU_2015',51130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51135,'Carme (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51135','projected_crs','IAU_2015',51135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51140,'Carme (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51140','projected_crs','IAU_2015',51140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51145,'Carme (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51145','projected_crs','IAU_2015',51145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51150,'Carme (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51150','projected_crs','IAU_2015',51150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51155,'Carme (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51155','projected_crs','IAU_2015',51155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51160,'Carme (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51160','projected_crs','IAU_2015',51160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51165,'Carme (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51165','projected_crs','IAU_2015',51165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51170,'Carme (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51170','projected_crs','IAU_2015',51170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51175,'Carme (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51175','projected_crs','IAU_2015',51175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51180,'Carme (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51180','projected_crs','IAU_2015',51180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51185,'Carme (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51185','projected_crs','IAU_2015',51185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51190,'Carme (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',51100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51190','projected_crs','IAU_2015',51190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 512, 'Ananke', 10000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 51200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',51200,'Ananke (2015) - Sphere',NULL,'IAU_2015',512,10000.000000,'EPSG','9001',NULL,10000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',51200,'Ananke (2015) - Sphere','','IAU_2015',51200,'IAU_2015',51200,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_51200','geodetic_datum','IAU_2015',51200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',51200,'Ananke (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',51200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_51200','geodetic_crs','IAU_2015',51200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51210,'Ananke (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51210','projected_crs','IAU_2015',51210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51215,'Ananke (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51215','projected_crs','IAU_2015',51215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51220,'Ananke (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51220','projected_crs','IAU_2015',51220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51225,'Ananke (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51225','projected_crs','IAU_2015',51225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51230,'Ananke (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51230','projected_crs','IAU_2015',51230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51235,'Ananke (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51235','projected_crs','IAU_2015',51235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51240,'Ananke (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51240','projected_crs','IAU_2015',51240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51245,'Ananke (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51245','projected_crs','IAU_2015',51245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51250,'Ananke (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51250','projected_crs','IAU_2015',51250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51255,'Ananke (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51255','projected_crs','IAU_2015',51255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51260,'Ananke (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51260','projected_crs','IAU_2015',51260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51265,'Ananke (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51265','projected_crs','IAU_2015',51265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51270,'Ananke (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51270','projected_crs','IAU_2015',51270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51275,'Ananke (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51275','projected_crs','IAU_2015',51275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51280,'Ananke (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51280','projected_crs','IAU_2015',51280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51285,'Ananke (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51285','projected_crs','IAU_2015',51285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51290,'Ananke (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',51200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51290','projected_crs','IAU_2015',51290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 513, 'Leda', 5000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 51300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',51300,'Leda (2015) - Sphere',NULL,'IAU_2015',513,5000.000000,'EPSG','9001',NULL,5000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',51300,'Leda (2015) - Sphere','','IAU_2015',51300,'IAU_2015',51300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_51300','geodetic_datum','IAU_2015',51300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',51300,'Leda (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',51300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_51300','geodetic_crs','IAU_2015',51300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51310,'Leda (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51310','projected_crs','IAU_2015',51310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51315,'Leda (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51315','projected_crs','IAU_2015',51315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51320,'Leda (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51320','projected_crs','IAU_2015',51320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51325,'Leda (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51325','projected_crs','IAU_2015',51325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51330,'Leda (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51330','projected_crs','IAU_2015',51330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51335,'Leda (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51335','projected_crs','IAU_2015',51335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51340,'Leda (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51340','projected_crs','IAU_2015',51340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51345,'Leda (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51345','projected_crs','IAU_2015',51345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51350,'Leda (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51350','projected_crs','IAU_2015',51350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51355,'Leda (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51355','projected_crs','IAU_2015',51355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51360,'Leda (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51360','projected_crs','IAU_2015',51360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51365,'Leda (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51365','projected_crs','IAU_2015',51365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51370,'Leda (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51370','projected_crs','IAU_2015',51370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51375,'Leda (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51375','projected_crs','IAU_2015',51375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51380,'Leda (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51380','projected_crs','IAU_2015',51380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51385,'Leda (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51385','projected_crs','IAU_2015',51385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51390,'Leda (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',51300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51390','projected_crs','IAU_2015',51390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 514, 'Thebe', 49300.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 51400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',51400,'Thebe (2015) - Sphere',NULL,'IAU_2015',514,49300.000000,'EPSG','9001',NULL,49300.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',51400,'Thebe (2015) - Sphere','','IAU_2015',51400,'IAU_2015',51400,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_51400','geodetic_datum','IAU_2015',51400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',51400,'Thebe (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',51400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_51400','geodetic_crs','IAU_2015',51400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51410,'Thebe (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51410','projected_crs','IAU_2015',51410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51415,'Thebe (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51415','projected_crs','IAU_2015',51415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51420,'Thebe (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51420','projected_crs','IAU_2015',51420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51425,'Thebe (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51425','projected_crs','IAU_2015',51425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51430,'Thebe (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51430','projected_crs','IAU_2015',51430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51435,'Thebe (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51435','projected_crs','IAU_2015',51435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51440,'Thebe (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51440','projected_crs','IAU_2015',51440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51445,'Thebe (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51445','projected_crs','IAU_2015',51445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51450,'Thebe (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51450','projected_crs','IAU_2015',51450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51455,'Thebe (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51455','projected_crs','IAU_2015',51455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51460,'Thebe (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51460','projected_crs','IAU_2015',51460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51465,'Thebe (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51465','projected_crs','IAU_2015',51465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51470,'Thebe (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51470','projected_crs','IAU_2015',51470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51475,'Thebe (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51475','projected_crs','IAU_2015',51475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51480,'Thebe (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51480','projected_crs','IAU_2015',51480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51485,'Thebe (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51485','projected_crs','IAU_2015',51485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51490,'Thebe (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',51400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51490','projected_crs','IAU_2015',51490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 515, 'Adrastea', 8200.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 51500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',51500,'Adrastea (2015) - Sphere',NULL,'IAU_2015',515,8200.000000,'EPSG','9001',NULL,8200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',51500,'Adrastea (2015) - Sphere','','IAU_2015',51500,'IAU_2015',51500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_51500','geodetic_datum','IAU_2015',51500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',51500,'Adrastea (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',51500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_51500','geodetic_crs','IAU_2015',51500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51510,'Adrastea (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51510','projected_crs','IAU_2015',51510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51515,'Adrastea (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51515','projected_crs','IAU_2015',51515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51520,'Adrastea (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51520','projected_crs','IAU_2015',51520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51525,'Adrastea (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51525','projected_crs','IAU_2015',51525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51530,'Adrastea (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51530','projected_crs','IAU_2015',51530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51535,'Adrastea (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51535','projected_crs','IAU_2015',51535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51540,'Adrastea (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51540','projected_crs','IAU_2015',51540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51545,'Adrastea (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51545','projected_crs','IAU_2015',51545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51550,'Adrastea (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51550','projected_crs','IAU_2015',51550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51555,'Adrastea (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51555','projected_crs','IAU_2015',51555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51560,'Adrastea (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51560','projected_crs','IAU_2015',51560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51565,'Adrastea (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51565','projected_crs','IAU_2015',51565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51570,'Adrastea (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51570','projected_crs','IAU_2015',51570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51575,'Adrastea (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51575','projected_crs','IAU_2015',51575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51580,'Adrastea (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51580','projected_crs','IAU_2015',51580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51585,'Adrastea (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51585','projected_crs','IAU_2015',51585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51590,'Adrastea (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',51500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51590','projected_crs','IAU_2015',51590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 516, 'Metis', 21500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 51600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',51600,'Metis (2015) - Sphere',NULL,'IAU_2015',516,21500.000000,'EPSG','9001',NULL,21500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',51600,'Metis (2015) - Sphere','','IAU_2015',51600,'IAU_2015',51600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_51600','geodetic_datum','IAU_2015',51600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',51600,'Metis (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',51600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_51600','geodetic_crs','IAU_2015',51600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51610,'Metis (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51610','projected_crs','IAU_2015',51610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51615,'Metis (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51615','projected_crs','IAU_2015',51615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51620,'Metis (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51620','projected_crs','IAU_2015',51620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51625,'Metis (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51625','projected_crs','IAU_2015',51625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51630,'Metis (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51630','projected_crs','IAU_2015',51630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51635,'Metis (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51635','projected_crs','IAU_2015',51635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51640,'Metis (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51640','projected_crs','IAU_2015',51640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51645,'Metis (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51645','projected_crs','IAU_2015',51645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51650,'Metis (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51650','projected_crs','IAU_2015',51650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51655,'Metis (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51655','projected_crs','IAU_2015',51655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51660,'Metis (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51660','projected_crs','IAU_2015',51660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51665,'Metis (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51665','projected_crs','IAU_2015',51665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51670,'Metis (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51670','projected_crs','IAU_2015',51670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51675,'Metis (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51675','projected_crs','IAU_2015',51675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51680,'Metis (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51680','projected_crs','IAU_2015',51680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51685,'Metis (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51685','projected_crs','IAU_2015',51685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',51690,'Metis (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',51600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_51690','projected_crs','IAU_2015',51690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Callirrhoe has it lacks all axis information -- Skip Themisto has it lacks all axis information -- Skip Magaclite has it lacks all axis information -- Skip Taygete has it lacks all axis information -- Skip Chaldene has it lacks all axis information -- Skip Harpalyke has it lacks all axis information -- Skip Kalyke has it lacks all axis information -- Skip Iocaste has it lacks all axis information -- Skip Erinome has it lacks all axis information -- Skip Isonoe has it lacks all axis information -- Skip Praxidike has it lacks all axis information -- Skip Autonoe has it lacks all axis information -- Skip Thyone has it lacks all axis information -- Skip Hermippe has it lacks all axis information -- Skip Aitne has it lacks all axis information -- Skip Eurydome has it lacks all axis information -- Skip Euanthe has it lacks all axis information -- Skip Euporie has it lacks all axis information -- Skip Orthosie has it lacks all axis information -- Skip Sponde has it lacks all axis information -- Skip Kale has it lacks all axis information -- Skip Pasithee has it lacks all axis information -- Skip Hegemone has it lacks all axis information -- Skip Mneme has it lacks all axis information -- Skip Aoede has it lacks all axis information -- Skip Thelxinoe has it lacks all axis information -- Skip Arche has it lacks all axis information -- Skip Kallichore has it lacks all axis information -- Skip Helike has it lacks all axis information -- Skip Carpo has it lacks all axis information -- Skip Eukelade has it lacks all axis information -- Skip Cyllene has it lacks all axis information -- Skip Kore has it lacks all axis information -- Skip Herse has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 699, 'Saturn', 60268000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 69900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',69900,'Saturn (2015) - Sphere',NULL,'IAU_2015',699,60268000.000000,'EPSG','9001',NULL,60268000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',69900,'Saturn (2015) - Sphere','','IAU_2015',69900,'IAU_2015',69900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_69900','geodetic_datum','IAU_2015',69900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',69900,'Saturn (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',69900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_69900','geodetic_crs','IAU_2015',69900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69910,'Saturn (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69910','projected_crs','IAU_2015',69910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69915,'Saturn (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69915','projected_crs','IAU_2015',69915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69920,'Saturn (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69920','projected_crs','IAU_2015',69920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69925,'Saturn (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69925','projected_crs','IAU_2015',69925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69930,'Saturn (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69930','projected_crs','IAU_2015',69930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69935,'Saturn (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69935','projected_crs','IAU_2015',69935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69940,'Saturn (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69940','projected_crs','IAU_2015',69940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69945,'Saturn (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69945','projected_crs','IAU_2015',69945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69950,'Saturn (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69950','projected_crs','IAU_2015',69950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69955,'Saturn (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69955','projected_crs','IAU_2015',69955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69960,'Saturn (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69960','projected_crs','IAU_2015',69960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69965,'Saturn (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69965','projected_crs','IAU_2015',69965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69970,'Saturn (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69970','projected_crs','IAU_2015',69970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69975,'Saturn (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69975','projected_crs','IAU_2015',69975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69980,'Saturn (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69980','projected_crs','IAU_2015',69980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69985,'Saturn (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69985','projected_crs','IAU_2015',69985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69990,'Saturn (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',69900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69990','projected_crs','IAU_2015',69990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',69901,'Saturn (2015)',NULL,'IAU_2015',699,60268000.000000,'EPSG','9001',NULL,54364000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',69901,'Saturn (2015)','','IAU_2015',69901,'IAU_2015',69900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_69901','geodetic_datum','IAU_2015',69901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',69901,'Saturn (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',69901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_69901','geodetic_crs','IAU_2015',69901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69911,'Saturn (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69911','projected_crs','IAU_2015',69911,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69916,'Saturn (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69916','projected_crs','IAU_2015',69916,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69921,'Saturn (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69921','projected_crs','IAU_2015',69921,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69926,'Saturn (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69926','projected_crs','IAU_2015',69926,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69931,'Saturn (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69931','projected_crs','IAU_2015',69931,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69936,'Saturn (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69936','projected_crs','IAU_2015',69936,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69941,'Saturn (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69941','projected_crs','IAU_2015',69941,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69946,'Saturn (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69946','projected_crs','IAU_2015',69946,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69951,'Saturn (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69951','projected_crs','IAU_2015',69951,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69956,'Saturn (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69956','projected_crs','IAU_2015',69956,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69961,'Saturn (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69961','projected_crs','IAU_2015',69961,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69966,'Saturn (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69966','projected_crs','IAU_2015',69966,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69971,'Saturn (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69971','projected_crs','IAU_2015',69971,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69976,'Saturn (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69976','projected_crs','IAU_2015',69976,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69981,'Saturn (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69981','projected_crs','IAU_2015',69981,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69986,'Saturn (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69986','projected_crs','IAU_2015',69986,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69991,'Saturn (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',69901,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69991','projected_crs','IAU_2015',69991,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',69902,'Saturn (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',69901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_69902','geodetic_crs','IAU_2015',69902,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69912,'Saturn (2015) / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69912','projected_crs','IAU_2015',69912,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69917,'Saturn (2015) / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69917','projected_crs','IAU_2015',69917,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69922,'Saturn (2015) / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69922','projected_crs','IAU_2015',69922,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69927,'Saturn (2015) / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69927','projected_crs','IAU_2015',69927,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69932,'Saturn (2015) / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69932','projected_crs','IAU_2015',69932,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69937,'Saturn (2015) / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69937','projected_crs','IAU_2015',69937,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69942,'Saturn (2015) / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69942','projected_crs','IAU_2015',69942,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69947,'Saturn (2015) / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69947','projected_crs','IAU_2015',69947,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69952,'Saturn (2015) / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69952','projected_crs','IAU_2015',69952,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69957,'Saturn (2015) / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69957','projected_crs','IAU_2015',69957,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69962,'Saturn (2015) / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69962','projected_crs','IAU_2015',69962,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69967,'Saturn (2015) / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69967','projected_crs','IAU_2015',69967,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69972,'Saturn (2015) / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69972','projected_crs','IAU_2015',69972,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69977,'Saturn (2015) / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69977','projected_crs','IAU_2015',69977,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69982,'Saturn (2015) / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69982','projected_crs','IAU_2015',69982,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69987,'Saturn (2015) / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69987','projected_crs','IAU_2015',69987,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',69992,'Saturn (2015) / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',69902,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_69992','projected_crs','IAU_2015',69992,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 601, 'Mimas', 198200.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60100,'Mimas (2015) - Sphere',NULL,'IAU_2015',601,198200.000000,'EPSG','9001',NULL,198200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60100,'Mimas (2015) - Sphere','','IAU_2015',60100,'IAU_2015',60100,NULL,NULL,NULL,'Palomides: 162 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60100','geodetic_datum','IAU_2015',60100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60100,'Mimas (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60100','geodetic_crs','IAU_2015',60100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60110,'Mimas (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60110','projected_crs','IAU_2015',60110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60115,'Mimas (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60115','projected_crs','IAU_2015',60115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60120,'Mimas (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60120','projected_crs','IAU_2015',60120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60125,'Mimas (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60125','projected_crs','IAU_2015',60125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60130,'Mimas (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60130','projected_crs','IAU_2015',60130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60135,'Mimas (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60135','projected_crs','IAU_2015',60135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60140,'Mimas (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60140','projected_crs','IAU_2015',60140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60145,'Mimas (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60145','projected_crs','IAU_2015',60145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60150,'Mimas (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60150','projected_crs','IAU_2015',60150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60155,'Mimas (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60155','projected_crs','IAU_2015',60155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60160,'Mimas (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60160','projected_crs','IAU_2015',60160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60165,'Mimas (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60165','projected_crs','IAU_2015',60165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60170,'Mimas (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60170','projected_crs','IAU_2015',60170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60175,'Mimas (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60175','projected_crs','IAU_2015',60175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60180,'Mimas (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60180','projected_crs','IAU_2015',60180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60185,'Mimas (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60185','projected_crs','IAU_2015',60185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60190,'Mimas (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60190','projected_crs','IAU_2015',60190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 602, 'Enceladus', 252100.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60200,'Enceladus (2015) - Sphere',NULL,'IAU_2015',602,252100.000000,'EPSG','9001',NULL,252100.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60200,'Enceladus (2015) - Sphere','','IAU_2015',60200,'IAU_2015',60200,NULL,NULL,NULL,'Salih: 5 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60200','geodetic_datum','IAU_2015',60200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60200,'Enceladus (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60200','geodetic_crs','IAU_2015',60200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60210,'Enceladus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60210','projected_crs','IAU_2015',60210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60215,'Enceladus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60215','projected_crs','IAU_2015',60215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60220,'Enceladus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60220','projected_crs','IAU_2015',60220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60225,'Enceladus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60225','projected_crs','IAU_2015',60225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60230,'Enceladus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60230','projected_crs','IAU_2015',60230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60235,'Enceladus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60235','projected_crs','IAU_2015',60235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60240,'Enceladus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60240','projected_crs','IAU_2015',60240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60245,'Enceladus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60245','projected_crs','IAU_2015',60245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60250,'Enceladus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60250','projected_crs','IAU_2015',60250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60255,'Enceladus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60255','projected_crs','IAU_2015',60255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60260,'Enceladus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60260','projected_crs','IAU_2015',60260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60265,'Enceladus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60265','projected_crs','IAU_2015',60265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60270,'Enceladus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60270','projected_crs','IAU_2015',60270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60275,'Enceladus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60275','projected_crs','IAU_2015',60275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60280,'Enceladus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60280','projected_crs','IAU_2015',60280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60285,'Enceladus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60285','projected_crs','IAU_2015',60285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60290,'Enceladus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60290','projected_crs','IAU_2015',60290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 603, 'Tethys', 531000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60300,'Tethys (2015) - Sphere',NULL,'IAU_2015',603,531000.000000,'EPSG','9001',NULL,531000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60300,'Tethys (2015) - Sphere','','IAU_2015',60300,'IAU_2015',60300,NULL,NULL,NULL,'Arete: 299 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60300','geodetic_datum','IAU_2015',60300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60300,'Tethys (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60300','geodetic_crs','IAU_2015',60300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60310,'Tethys (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60310','projected_crs','IAU_2015',60310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60315,'Tethys (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60315','projected_crs','IAU_2015',60315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60320,'Tethys (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60320','projected_crs','IAU_2015',60320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60325,'Tethys (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60325','projected_crs','IAU_2015',60325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60330,'Tethys (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60330','projected_crs','IAU_2015',60330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60335,'Tethys (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60335','projected_crs','IAU_2015',60335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60340,'Tethys (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60340','projected_crs','IAU_2015',60340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60345,'Tethys (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60345','projected_crs','IAU_2015',60345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60350,'Tethys (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60350','projected_crs','IAU_2015',60350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60355,'Tethys (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60355','projected_crs','IAU_2015',60355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60360,'Tethys (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60360','projected_crs','IAU_2015',60360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60365,'Tethys (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60365','projected_crs','IAU_2015',60365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60370,'Tethys (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60370','projected_crs','IAU_2015',60370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60375,'Tethys (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60375','projected_crs','IAU_2015',60375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60380,'Tethys (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60380','projected_crs','IAU_2015',60380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60385,'Tethys (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60385','projected_crs','IAU_2015',60385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60390,'Tethys (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60390','projected_crs','IAU_2015',60390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 604, 'Dione', 561400.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60400,'Dione (2015) - Sphere',NULL,'IAU_2015',604,561400.000000,'EPSG','9001',NULL,561400.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60400,'Dione (2015) - Sphere','','IAU_2015',60400,'IAU_2015',60400,NULL,NULL,NULL,'Palinurus: 63 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60400','geodetic_datum','IAU_2015',60400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60400,'Dione (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60400','geodetic_crs','IAU_2015',60400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60410,'Dione (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60410','projected_crs','IAU_2015',60410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60415,'Dione (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60415','projected_crs','IAU_2015',60415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60420,'Dione (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60420','projected_crs','IAU_2015',60420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60425,'Dione (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60425','projected_crs','IAU_2015',60425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60430,'Dione (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60430','projected_crs','IAU_2015',60430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60435,'Dione (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60435','projected_crs','IAU_2015',60435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60440,'Dione (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60440','projected_crs','IAU_2015',60440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60445,'Dione (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60445','projected_crs','IAU_2015',60445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60450,'Dione (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60450','projected_crs','IAU_2015',60450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60455,'Dione (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60455','projected_crs','IAU_2015',60455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60460,'Dione (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60460','projected_crs','IAU_2015',60460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60465,'Dione (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60465','projected_crs','IAU_2015',60465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60470,'Dione (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60470','projected_crs','IAU_2015',60470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60475,'Dione (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60475','projected_crs','IAU_2015',60475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60480,'Dione (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60480','projected_crs','IAU_2015',60480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60485,'Dione (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60485','projected_crs','IAU_2015',60485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60490,'Dione (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60490','projected_crs','IAU_2015',60490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 605, 'Rhea', 763500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60500,'Rhea (2015) - Sphere',NULL,'IAU_2015',605,763500.000000,'EPSG','9001',NULL,763500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60500,'Rhea (2015) - Sphere','','IAU_2015',60500,'IAU_2015',60500,NULL,NULL,NULL,'Tore: 340 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60500','geodetic_datum','IAU_2015',60500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60500,'Rhea (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60500','geodetic_crs','IAU_2015',60500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60510,'Rhea (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60510','projected_crs','IAU_2015',60510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60515,'Rhea (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60515','projected_crs','IAU_2015',60515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60520,'Rhea (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60520','projected_crs','IAU_2015',60520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60525,'Rhea (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60525','projected_crs','IAU_2015',60525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60530,'Rhea (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60530','projected_crs','IAU_2015',60530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60535,'Rhea (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60535','projected_crs','IAU_2015',60535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60540,'Rhea (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60540','projected_crs','IAU_2015',60540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60545,'Rhea (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60545','projected_crs','IAU_2015',60545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60550,'Rhea (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60550','projected_crs','IAU_2015',60550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60555,'Rhea (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60555','projected_crs','IAU_2015',60555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60560,'Rhea (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60560','projected_crs','IAU_2015',60560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60565,'Rhea (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60565','projected_crs','IAU_2015',60565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60570,'Rhea (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60570','projected_crs','IAU_2015',60570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60575,'Rhea (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60575','projected_crs','IAU_2015',60575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60580,'Rhea (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60580','projected_crs','IAU_2015',60580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60585,'Rhea (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60585','projected_crs','IAU_2015',60585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60590,'Rhea (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60590','projected_crs','IAU_2015',60590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 606, 'Titan', 2575000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60600,'Titan (2015) - Sphere',NULL,'IAU_2015',606,2575000.000000,'EPSG','9001',NULL,2575000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60600,'Titan (2015) - Sphere','','IAU_2015',60600,'IAU_2015',60600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60600','geodetic_datum','IAU_2015',60600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60600,'Titan (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60600','geodetic_crs','IAU_2015',60600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60610,'Titan (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60610','projected_crs','IAU_2015',60610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60615,'Titan (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60615','projected_crs','IAU_2015',60615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60620,'Titan (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60620','projected_crs','IAU_2015',60620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60625,'Titan (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60625','projected_crs','IAU_2015',60625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60630,'Titan (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60630','projected_crs','IAU_2015',60630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60635,'Titan (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60635','projected_crs','IAU_2015',60635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60640,'Titan (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60640','projected_crs','IAU_2015',60640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60645,'Titan (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60645','projected_crs','IAU_2015',60645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60650,'Titan (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60650','projected_crs','IAU_2015',60650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60655,'Titan (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60655','projected_crs','IAU_2015',60655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60660,'Titan (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60660','projected_crs','IAU_2015',60660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60665,'Titan (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60665','projected_crs','IAU_2015',60665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60670,'Titan (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60670','projected_crs','IAU_2015',60670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60675,'Titan (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60675','projected_crs','IAU_2015',60675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60680,'Titan (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60680','projected_crs','IAU_2015',60680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60685,'Titan (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60685','projected_crs','IAU_2015',60685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60690,'Titan (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60690','projected_crs','IAU_2015',60690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 607, 'Hyperion', 135000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60700, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60700,'Hyperion (2015) - Sphere',NULL,'IAU_2015',607,135000.000000,'EPSG','9001',NULL,135000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60700,'Hyperion (2015) - Sphere','','IAU_2015',60700,'IAU_2015',60700,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60700','geodetic_datum','IAU_2015',60700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60700,'Hyperion (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60700,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60700','geodetic_crs','IAU_2015',60700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60710,'Hyperion (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60710','projected_crs','IAU_2015',60710,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60715,'Hyperion (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60715','projected_crs','IAU_2015',60715,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60720,'Hyperion (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60720','projected_crs','IAU_2015',60720,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60725,'Hyperion (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60725','projected_crs','IAU_2015',60725,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60730,'Hyperion (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60730','projected_crs','IAU_2015',60730,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60735,'Hyperion (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60735','projected_crs','IAU_2015',60735,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60740,'Hyperion (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60740','projected_crs','IAU_2015',60740,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60745,'Hyperion (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60745','projected_crs','IAU_2015',60745,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60750,'Hyperion (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60750','projected_crs','IAU_2015',60750,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60755,'Hyperion (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60755','projected_crs','IAU_2015',60755,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60760,'Hyperion (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60760','projected_crs','IAU_2015',60760,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60765,'Hyperion (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60765','projected_crs','IAU_2015',60765,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60770,'Hyperion (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60770','projected_crs','IAU_2015',60770,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60775,'Hyperion (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60775','projected_crs','IAU_2015',60775,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60780,'Hyperion (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60780','projected_crs','IAU_2015',60780,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60785,'Hyperion (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60785','projected_crs','IAU_2015',60785,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60790,'Hyperion (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60700,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60790','projected_crs','IAU_2015',60790,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 608, 'Iapetus', 745700.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60800, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60800,'Iapetus (2015) - Sphere',NULL,'IAU_2015',608,745700.000000,'EPSG','9001',NULL,745700.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60800,'Iapetus (2015) - Sphere','','IAU_2015',60800,'IAU_2015',60800,NULL,NULL,NULL,'Almeric: 276 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60800','geodetic_datum','IAU_2015',60800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60800,'Iapetus (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60800,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60800','geodetic_crs','IAU_2015',60800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60810,'Iapetus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60810','projected_crs','IAU_2015',60810,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60815,'Iapetus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60815','projected_crs','IAU_2015',60815,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60820,'Iapetus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60820','projected_crs','IAU_2015',60820,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60825,'Iapetus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60825','projected_crs','IAU_2015',60825,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60830,'Iapetus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60830','projected_crs','IAU_2015',60830,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60835,'Iapetus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60835','projected_crs','IAU_2015',60835,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60840,'Iapetus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60840','projected_crs','IAU_2015',60840,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60845,'Iapetus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60845','projected_crs','IAU_2015',60845,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60850,'Iapetus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60850','projected_crs','IAU_2015',60850,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60855,'Iapetus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60855','projected_crs','IAU_2015',60855,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60860,'Iapetus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60860','projected_crs','IAU_2015',60860,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60865,'Iapetus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60865','projected_crs','IAU_2015',60865,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60870,'Iapetus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60870','projected_crs','IAU_2015',60870,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60875,'Iapetus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60875','projected_crs','IAU_2015',60875,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60880,'Iapetus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60880','projected_crs','IAU_2015',60880,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60885,'Iapetus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60885','projected_crs','IAU_2015',60885,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60890,'Iapetus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60800,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60890','projected_crs','IAU_2015',60890,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',60801,'Iapetus (2015)',NULL,'IAU_2015',608,745700.000000,'EPSG','9001',NULL,712100.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60801,'Iapetus (2015)','','IAU_2015',60801,'IAU_2015',60800,NULL,NULL,NULL,'Almeric: 276 W.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60801','geodetic_datum','IAU_2015',60801,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60801,'Iapetus (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',60801,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60801','geodetic_crs','IAU_2015',60801,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60811,'Iapetus (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60811','projected_crs','IAU_2015',60811,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60816,'Iapetus (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60816','projected_crs','IAU_2015',60816,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60821,'Iapetus (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60821','projected_crs','IAU_2015',60821,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60826,'Iapetus (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60826','projected_crs','IAU_2015',60826,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60831,'Iapetus (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60831','projected_crs','IAU_2015',60831,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60836,'Iapetus (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60836','projected_crs','IAU_2015',60836,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60841,'Iapetus (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60841','projected_crs','IAU_2015',60841,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60846,'Iapetus (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60846','projected_crs','IAU_2015',60846,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60851,'Iapetus (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60851','projected_crs','IAU_2015',60851,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60856,'Iapetus (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60856','projected_crs','IAU_2015',60856,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60861,'Iapetus (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60861','projected_crs','IAU_2015',60861,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60866,'Iapetus (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60866','projected_crs','IAU_2015',60866,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60871,'Iapetus (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60871','projected_crs','IAU_2015',60871,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60876,'Iapetus (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60876','projected_crs','IAU_2015',60876,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60881,'Iapetus (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60881','projected_crs','IAU_2015',60881,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60886,'Iapetus (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60886','projected_crs','IAU_2015',60886,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60891,'Iapetus (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',60801,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60891','projected_crs','IAU_2015',60891,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60802,'Iapetus (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',60801,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60802','geodetic_crs','IAU_2015',60802,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60812,'Iapetus (2015) / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60812','projected_crs','IAU_2015',60812,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60817,'Iapetus (2015) / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60817','projected_crs','IAU_2015',60817,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60822,'Iapetus (2015) / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60822','projected_crs','IAU_2015',60822,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60827,'Iapetus (2015) / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60827','projected_crs','IAU_2015',60827,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60832,'Iapetus (2015) / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60832','projected_crs','IAU_2015',60832,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60837,'Iapetus (2015) / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60837','projected_crs','IAU_2015',60837,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60842,'Iapetus (2015) / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60842','projected_crs','IAU_2015',60842,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60847,'Iapetus (2015) / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60847','projected_crs','IAU_2015',60847,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60852,'Iapetus (2015) / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60852','projected_crs','IAU_2015',60852,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60857,'Iapetus (2015) / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60857','projected_crs','IAU_2015',60857,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60862,'Iapetus (2015) / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60862','projected_crs','IAU_2015',60862,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60867,'Iapetus (2015) / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60867','projected_crs','IAU_2015',60867,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60872,'Iapetus (2015) / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60872','projected_crs','IAU_2015',60872,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60877,'Iapetus (2015) / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60877','projected_crs','IAU_2015',60877,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60882,'Iapetus (2015) / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60882','projected_crs','IAU_2015',60882,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60887,'Iapetus (2015) / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60887','projected_crs','IAU_2015',60887,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60892,'Iapetus (2015) / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60802,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60892','projected_crs','IAU_2015',60892,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 609, 'Phoebe', 106500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 60900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',60900,'Phoebe (2015) - Sphere',NULL,'IAU_2015',609,106500.000000,'EPSG','9001',NULL,106500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',60900,'Phoebe (2015) - Sphere','','IAU_2015',60900,'IAU_2015',60900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_60900','geodetic_datum','IAU_2015',60900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',60900,'Phoebe (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',60900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_60900','geodetic_crs','IAU_2015',60900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60910,'Phoebe (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60910','projected_crs','IAU_2015',60910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60915,'Phoebe (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60915','projected_crs','IAU_2015',60915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60920,'Phoebe (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60920','projected_crs','IAU_2015',60920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60925,'Phoebe (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60925','projected_crs','IAU_2015',60925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60930,'Phoebe (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60930','projected_crs','IAU_2015',60930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60935,'Phoebe (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60935','projected_crs','IAU_2015',60935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60940,'Phoebe (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60940','projected_crs','IAU_2015',60940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60945,'Phoebe (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60945','projected_crs','IAU_2015',60945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60950,'Phoebe (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60950','projected_crs','IAU_2015',60950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60955,'Phoebe (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60955','projected_crs','IAU_2015',60955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60960,'Phoebe (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60960','projected_crs','IAU_2015',60960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60965,'Phoebe (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60965','projected_crs','IAU_2015',60965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60970,'Phoebe (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60970','projected_crs','IAU_2015',60970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60975,'Phoebe (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60975','projected_crs','IAU_2015',60975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60980,'Phoebe (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60980','projected_crs','IAU_2015',60980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60985,'Phoebe (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60985','projected_crs','IAU_2015',60985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',60990,'Phoebe (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',60900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_60990','projected_crs','IAU_2015',60990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 610, 'Janus', 89200.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61000, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61000,'Janus (2015) - Sphere',NULL,'IAU_2015',610,89200.000000,'EPSG','9001',NULL,89200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61000,'Janus (2015) - Sphere','','IAU_2015',61000,'IAU_2015',61000,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61000','geodetic_datum','IAU_2015',61000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61000,'Janus (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61000,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61000','geodetic_crs','IAU_2015',61000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61010,'Janus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61010','projected_crs','IAU_2015',61010,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61015,'Janus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61015','projected_crs','IAU_2015',61015,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61020,'Janus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61020','projected_crs','IAU_2015',61020,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61025,'Janus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61025','projected_crs','IAU_2015',61025,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61030,'Janus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61030','projected_crs','IAU_2015',61030,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61035,'Janus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61035','projected_crs','IAU_2015',61035,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61040,'Janus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61040','projected_crs','IAU_2015',61040,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61045,'Janus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61045','projected_crs','IAU_2015',61045,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61050,'Janus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61050','projected_crs','IAU_2015',61050,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61055,'Janus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61055','projected_crs','IAU_2015',61055,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61060,'Janus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61060','projected_crs','IAU_2015',61060,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61065,'Janus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61065','projected_crs','IAU_2015',61065,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61070,'Janus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61070','projected_crs','IAU_2015',61070,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61075,'Janus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61075','projected_crs','IAU_2015',61075,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61080,'Janus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61080','projected_crs','IAU_2015',61080,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61085,'Janus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61085','projected_crs','IAU_2015',61085,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61090,'Janus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61000,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61090','projected_crs','IAU_2015',61090,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 611, 'Epimetheus', 58200.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61100,'Epimetheus (2015) - Sphere',NULL,'IAU_2015',611,58200.000000,'EPSG','9001',NULL,58200.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61100,'Epimetheus (2015) - Sphere','','IAU_2015',61100,'IAU_2015',61100,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61100','geodetic_datum','IAU_2015',61100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61100,'Epimetheus (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61100','geodetic_crs','IAU_2015',61100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61110,'Epimetheus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61110','projected_crs','IAU_2015',61110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61115,'Epimetheus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61115','projected_crs','IAU_2015',61115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61120,'Epimetheus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61120','projected_crs','IAU_2015',61120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61125,'Epimetheus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61125','projected_crs','IAU_2015',61125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61130,'Epimetheus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61130','projected_crs','IAU_2015',61130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61135,'Epimetheus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61135','projected_crs','IAU_2015',61135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61140,'Epimetheus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61140','projected_crs','IAU_2015',61140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61145,'Epimetheus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61145','projected_crs','IAU_2015',61145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61150,'Epimetheus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61150','projected_crs','IAU_2015',61150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61155,'Epimetheus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61155','projected_crs','IAU_2015',61155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61160,'Epimetheus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61160','projected_crs','IAU_2015',61160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61165,'Epimetheus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61165','projected_crs','IAU_2015',61165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61170,'Epimetheus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61170','projected_crs','IAU_2015',61170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61175,'Epimetheus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61175','projected_crs','IAU_2015',61175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61180,'Epimetheus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61180','projected_crs','IAU_2015',61180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61185,'Epimetheus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61185','projected_crs','IAU_2015',61185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61190,'Epimetheus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61190','projected_crs','IAU_2015',61190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 612, 'Helene', 18000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61200,'Helene (2015) - Sphere',NULL,'IAU_2015',612,18000.000000,'EPSG','9001',NULL,18000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61200,'Helene (2015) - Sphere','','IAU_2015',61200,'IAU_2015',61200,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61200','geodetic_datum','IAU_2015',61200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61200,'Helene (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61200','geodetic_crs','IAU_2015',61200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61210,'Helene (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61210','projected_crs','IAU_2015',61210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61215,'Helene (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61215','projected_crs','IAU_2015',61215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61220,'Helene (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61220','projected_crs','IAU_2015',61220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61225,'Helene (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61225','projected_crs','IAU_2015',61225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61230,'Helene (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61230','projected_crs','IAU_2015',61230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61235,'Helene (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61235','projected_crs','IAU_2015',61235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61240,'Helene (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61240','projected_crs','IAU_2015',61240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61245,'Helene (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61245','projected_crs','IAU_2015',61245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61250,'Helene (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61250','projected_crs','IAU_2015',61250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61255,'Helene (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61255','projected_crs','IAU_2015',61255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61260,'Helene (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61260','projected_crs','IAU_2015',61260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61265,'Helene (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61265','projected_crs','IAU_2015',61265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61270,'Helene (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61270','projected_crs','IAU_2015',61270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61275,'Helene (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61275','projected_crs','IAU_2015',61275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61280,'Helene (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61280','projected_crs','IAU_2015',61280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61285,'Helene (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61285','projected_crs','IAU_2015',61285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61290,'Helene (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61290','projected_crs','IAU_2015',61290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 613, 'Telesto', 12400.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61300,'Telesto (2015) - Sphere',NULL,'IAU_2015',613,12400.000000,'EPSG','9001',NULL,12400.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61300,'Telesto (2015) - Sphere','','IAU_2015',61300,'IAU_2015',61300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61300','geodetic_datum','IAU_2015',61300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61300,'Telesto (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61300','geodetic_crs','IAU_2015',61300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61310,'Telesto (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61310','projected_crs','IAU_2015',61310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61315,'Telesto (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61315','projected_crs','IAU_2015',61315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61320,'Telesto (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61320','projected_crs','IAU_2015',61320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61325,'Telesto (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61325','projected_crs','IAU_2015',61325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61330,'Telesto (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61330','projected_crs','IAU_2015',61330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61335,'Telesto (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61335','projected_crs','IAU_2015',61335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61340,'Telesto (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61340','projected_crs','IAU_2015',61340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61345,'Telesto (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61345','projected_crs','IAU_2015',61345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61350,'Telesto (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61350','projected_crs','IAU_2015',61350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61355,'Telesto (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61355','projected_crs','IAU_2015',61355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61360,'Telesto (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61360','projected_crs','IAU_2015',61360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61365,'Telesto (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61365','projected_crs','IAU_2015',61365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61370,'Telesto (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61370','projected_crs','IAU_2015',61370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61375,'Telesto (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61375','projected_crs','IAU_2015',61375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61380,'Telesto (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61380','projected_crs','IAU_2015',61380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61385,'Telesto (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61385','projected_crs','IAU_2015',61385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61390,'Telesto (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61390','projected_crs','IAU_2015',61390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 614, 'Calypso', 9600.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61400,'Calypso (2015) - Sphere',NULL,'IAU_2015',614,9600.000000,'EPSG','9001',NULL,9600.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61400,'Calypso (2015) - Sphere','','IAU_2015',61400,'IAU_2015',61400,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61400','geodetic_datum','IAU_2015',61400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61400,'Calypso (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61400','geodetic_crs','IAU_2015',61400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61410,'Calypso (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61410','projected_crs','IAU_2015',61410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61415,'Calypso (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61415','projected_crs','IAU_2015',61415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61420,'Calypso (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61420','projected_crs','IAU_2015',61420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61425,'Calypso (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61425','projected_crs','IAU_2015',61425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61430,'Calypso (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61430','projected_crs','IAU_2015',61430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61435,'Calypso (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61435','projected_crs','IAU_2015',61435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61440,'Calypso (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61440','projected_crs','IAU_2015',61440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61445,'Calypso (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61445','projected_crs','IAU_2015',61445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61450,'Calypso (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61450','projected_crs','IAU_2015',61450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61455,'Calypso (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61455','projected_crs','IAU_2015',61455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61460,'Calypso (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61460','projected_crs','IAU_2015',61460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61465,'Calypso (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61465','projected_crs','IAU_2015',61465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61470,'Calypso (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61470','projected_crs','IAU_2015',61470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61475,'Calypso (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61475','projected_crs','IAU_2015',61475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61480,'Calypso (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61480','projected_crs','IAU_2015',61480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61485,'Calypso (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61485','projected_crs','IAU_2015',61485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61490,'Calypso (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61490','projected_crs','IAU_2015',61490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 615, 'Atlas', 15100.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61500,'Atlas (2015) - Sphere',NULL,'IAU_2015',615,15100.000000,'EPSG','9001',NULL,15100.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61500,'Atlas (2015) - Sphere','','IAU_2015',61500,'IAU_2015',61500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61500','geodetic_datum','IAU_2015',61500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61500,'Atlas (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61500','geodetic_crs','IAU_2015',61500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61510,'Atlas (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61510','projected_crs','IAU_2015',61510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61515,'Atlas (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61515','projected_crs','IAU_2015',61515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61520,'Atlas (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61520','projected_crs','IAU_2015',61520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61525,'Atlas (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61525','projected_crs','IAU_2015',61525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61530,'Atlas (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61530','projected_crs','IAU_2015',61530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61535,'Atlas (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61535','projected_crs','IAU_2015',61535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61540,'Atlas (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61540','projected_crs','IAU_2015',61540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61545,'Atlas (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61545','projected_crs','IAU_2015',61545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61550,'Atlas (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61550','projected_crs','IAU_2015',61550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61555,'Atlas (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61555','projected_crs','IAU_2015',61555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61560,'Atlas (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61560','projected_crs','IAU_2015',61560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61565,'Atlas (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61565','projected_crs','IAU_2015',61565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61570,'Atlas (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61570','projected_crs','IAU_2015',61570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61575,'Atlas (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61575','projected_crs','IAU_2015',61575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61580,'Atlas (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61580','projected_crs','IAU_2015',61580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61585,'Atlas (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61585','projected_crs','IAU_2015',61585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61590,'Atlas (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61590','projected_crs','IAU_2015',61590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 616, 'Prometheus', 43100.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61600,'Prometheus (2015) - Sphere',NULL,'IAU_2015',616,43100.000000,'EPSG','9001',NULL,43100.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61600,'Prometheus (2015) - Sphere','','IAU_2015',61600,'IAU_2015',61600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61600','geodetic_datum','IAU_2015',61600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61600,'Prometheus (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61600','geodetic_crs','IAU_2015',61600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61610,'Prometheus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61610','projected_crs','IAU_2015',61610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61615,'Prometheus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61615','projected_crs','IAU_2015',61615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61620,'Prometheus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61620','projected_crs','IAU_2015',61620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61625,'Prometheus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61625','projected_crs','IAU_2015',61625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61630,'Prometheus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61630','projected_crs','IAU_2015',61630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61635,'Prometheus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61635','projected_crs','IAU_2015',61635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61640,'Prometheus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61640','projected_crs','IAU_2015',61640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61645,'Prometheus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61645','projected_crs','IAU_2015',61645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61650,'Prometheus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61650','projected_crs','IAU_2015',61650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61655,'Prometheus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61655','projected_crs','IAU_2015',61655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61660,'Prometheus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61660','projected_crs','IAU_2015',61660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61665,'Prometheus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61665','projected_crs','IAU_2015',61665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61670,'Prometheus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61670','projected_crs','IAU_2015',61670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61675,'Prometheus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61675','projected_crs','IAU_2015',61675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61680,'Prometheus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61680','projected_crs','IAU_2015',61680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61685,'Prometheus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61685','projected_crs','IAU_2015',61685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61690,'Prometheus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61690','projected_crs','IAU_2015',61690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 617, 'Pandora', 40600.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61700, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61700,'Pandora (2015) - Sphere',NULL,'IAU_2015',617,40600.000000,'EPSG','9001',NULL,40600.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61700,'Pandora (2015) - Sphere','','IAU_2015',61700,'IAU_2015',61700,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61700','geodetic_datum','IAU_2015',61700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61700,'Pandora (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61700,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61700','geodetic_crs','IAU_2015',61700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61710,'Pandora (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61710','projected_crs','IAU_2015',61710,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61715,'Pandora (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61715','projected_crs','IAU_2015',61715,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61720,'Pandora (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61720','projected_crs','IAU_2015',61720,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61725,'Pandora (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61725','projected_crs','IAU_2015',61725,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61730,'Pandora (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61730','projected_crs','IAU_2015',61730,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61735,'Pandora (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61735','projected_crs','IAU_2015',61735,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61740,'Pandora (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61740','projected_crs','IAU_2015',61740,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61745,'Pandora (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61745','projected_crs','IAU_2015',61745,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61750,'Pandora (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61750','projected_crs','IAU_2015',61750,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61755,'Pandora (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61755','projected_crs','IAU_2015',61755,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61760,'Pandora (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61760','projected_crs','IAU_2015',61760,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61765,'Pandora (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61765','projected_crs','IAU_2015',61765,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61770,'Pandora (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61770','projected_crs','IAU_2015',61770,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61775,'Pandora (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61775','projected_crs','IAU_2015',61775,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61780,'Pandora (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61780','projected_crs','IAU_2015',61780,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61785,'Pandora (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61785','projected_crs','IAU_2015',61785,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61790,'Pandora (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61700,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61790','projected_crs','IAU_2015',61790,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 618, 'Pan', 14000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 61800, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',61800,'Pan (2015) - Sphere',NULL,'IAU_2015',618,14000.000000,'EPSG','9001',NULL,14000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',61800,'Pan (2015) - Sphere','','IAU_2015',61800,'IAU_2015',61800,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_61800','geodetic_datum','IAU_2015',61800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',61800,'Pan (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',61800,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_61800','geodetic_crs','IAU_2015',61800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61810,'Pan (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61810','projected_crs','IAU_2015',61810,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61815,'Pan (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61815','projected_crs','IAU_2015',61815,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61820,'Pan (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61820','projected_crs','IAU_2015',61820,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61825,'Pan (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61825','projected_crs','IAU_2015',61825,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61830,'Pan (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61830','projected_crs','IAU_2015',61830,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61835,'Pan (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61835','projected_crs','IAU_2015',61835,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61840,'Pan (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61840','projected_crs','IAU_2015',61840,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61845,'Pan (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61845','projected_crs','IAU_2015',61845,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61850,'Pan (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61850','projected_crs','IAU_2015',61850,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61855,'Pan (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61855','projected_crs','IAU_2015',61855,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61860,'Pan (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61860','projected_crs','IAU_2015',61860,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61865,'Pan (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61865','projected_crs','IAU_2015',61865,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61870,'Pan (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61870','projected_crs','IAU_2015',61870,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61875,'Pan (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61875','projected_crs','IAU_2015',61875,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61880,'Pan (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61880','projected_crs','IAU_2015',61880,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61885,'Pan (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61885','projected_crs','IAU_2015',61885,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',61890,'Pan (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',61800,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_61890','projected_crs','IAU_2015',61890,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Ymir has it lacks all axis information -- Skip Paaliaq has it lacks all axis information -- Skip Tarvos has it lacks all axis information -- Skip Ijiraq has it lacks all axis information -- Skip Suttungr has it lacks all axis information -- Skip Kiviuq has it lacks all axis information -- Skip Mundilfari has it lacks all axis information -- Skip Albiorix has it lacks all axis information -- Skip Skathi has it lacks all axis information -- Skip Erriapo has it lacks all axis information -- Skip Siarnaq has it lacks all axis information -- Skip Thrymr has it lacks all axis information -- Skip Narvi has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 632, 'Methone', 1450.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 63200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',63200,'Methone (2015) - Sphere',NULL,'IAU_2015',632,1450.000000,'EPSG','9001',NULL,1450.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',63200,'Methone (2015) - Sphere','','IAU_2015',63200,'IAU_2015',63200,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_63200','geodetic_datum','IAU_2015',63200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',63200,'Methone (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',63200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_63200','geodetic_crs','IAU_2015',63200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63210,'Methone (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63210','projected_crs','IAU_2015',63210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63215,'Methone (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63215','projected_crs','IAU_2015',63215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63220,'Methone (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63220','projected_crs','IAU_2015',63220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63225,'Methone (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63225','projected_crs','IAU_2015',63225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63230,'Methone (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63230','projected_crs','IAU_2015',63230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63235,'Methone (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63235','projected_crs','IAU_2015',63235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63240,'Methone (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63240','projected_crs','IAU_2015',63240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63245,'Methone (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63245','projected_crs','IAU_2015',63245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63250,'Methone (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63250','projected_crs','IAU_2015',63250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63255,'Methone (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63255','projected_crs','IAU_2015',63255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63260,'Methone (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63260','projected_crs','IAU_2015',63260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63265,'Methone (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63265','projected_crs','IAU_2015',63265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63270,'Methone (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63270','projected_crs','IAU_2015',63270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63275,'Methone (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63275','projected_crs','IAU_2015',63275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63280,'Methone (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63280','projected_crs','IAU_2015',63280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63285,'Methone (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63285','projected_crs','IAU_2015',63285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63290,'Methone (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',63200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63290','projected_crs','IAU_2015',63290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 633, 'Pallene', 2230.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 63300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',63300,'Pallene (2015) - Sphere',NULL,'IAU_2015',633,2230.000000,'EPSG','9001',NULL,2230.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',63300,'Pallene (2015) - Sphere','','IAU_2015',63300,'IAU_2015',63300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_63300','geodetic_datum','IAU_2015',63300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',63300,'Pallene (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',63300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_63300','geodetic_crs','IAU_2015',63300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63310,'Pallene (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63310','projected_crs','IAU_2015',63310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63315,'Pallene (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63315','projected_crs','IAU_2015',63315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63320,'Pallene (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63320','projected_crs','IAU_2015',63320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63325,'Pallene (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63325','projected_crs','IAU_2015',63325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63330,'Pallene (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63330','projected_crs','IAU_2015',63330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63335,'Pallene (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63335','projected_crs','IAU_2015',63335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63340,'Pallene (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63340','projected_crs','IAU_2015',63340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63345,'Pallene (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63345','projected_crs','IAU_2015',63345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63350,'Pallene (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63350','projected_crs','IAU_2015',63350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63355,'Pallene (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63355','projected_crs','IAU_2015',63355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63360,'Pallene (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63360','projected_crs','IAU_2015',63360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63365,'Pallene (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63365','projected_crs','IAU_2015',63365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63370,'Pallene (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63370','projected_crs','IAU_2015',63370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63375,'Pallene (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63375','projected_crs','IAU_2015',63375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63380,'Pallene (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63380','projected_crs','IAU_2015',63380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63385,'Pallene (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63385','projected_crs','IAU_2015',63385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63390,'Pallene (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',63300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63390','projected_crs','IAU_2015',63390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 634, 'Polydeuces', 1300.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 63400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',63400,'Polydeuces (2015) - Sphere',NULL,'IAU_2015',634,1300.000000,'EPSG','9001',NULL,1300.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',63400,'Polydeuces (2015) - Sphere','','IAU_2015',63400,'IAU_2015',63400,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_63400','geodetic_datum','IAU_2015',63400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',63400,'Polydeuces (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',63400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_63400','geodetic_crs','IAU_2015',63400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63410,'Polydeuces (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63410','projected_crs','IAU_2015',63410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63415,'Polydeuces (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63415','projected_crs','IAU_2015',63415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63420,'Polydeuces (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63420','projected_crs','IAU_2015',63420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63425,'Polydeuces (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63425','projected_crs','IAU_2015',63425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63430,'Polydeuces (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63430','projected_crs','IAU_2015',63430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63435,'Polydeuces (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63435','projected_crs','IAU_2015',63435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63440,'Polydeuces (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63440','projected_crs','IAU_2015',63440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63445,'Polydeuces (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63445','projected_crs','IAU_2015',63445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63450,'Polydeuces (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63450','projected_crs','IAU_2015',63450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63455,'Polydeuces (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63455','projected_crs','IAU_2015',63455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63460,'Polydeuces (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63460','projected_crs','IAU_2015',63460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63465,'Polydeuces (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63465','projected_crs','IAU_2015',63465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63470,'Polydeuces (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63470','projected_crs','IAU_2015',63470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63475,'Polydeuces (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63475','projected_crs','IAU_2015',63475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63480,'Polydeuces (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63480','projected_crs','IAU_2015',63480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63485,'Polydeuces (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63485','projected_crs','IAU_2015',63485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63490,'Polydeuces (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',63400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63490','projected_crs','IAU_2015',63490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 635, 'Daphnis', 3800.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 63500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',63500,'Daphnis (2015) - Sphere',NULL,'IAU_2015',635,3800.000000,'EPSG','9001',NULL,3800.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',63500,'Daphnis (2015) - Sphere','','IAU_2015',63500,'IAU_2015',63500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_63500','geodetic_datum','IAU_2015',63500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',63500,'Daphnis (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',63500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_63500','geodetic_crs','IAU_2015',63500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63510,'Daphnis (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63510','projected_crs','IAU_2015',63510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63515,'Daphnis (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63515','projected_crs','IAU_2015',63515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63520,'Daphnis (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63520','projected_crs','IAU_2015',63520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63525,'Daphnis (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63525','projected_crs','IAU_2015',63525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63530,'Daphnis (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63530','projected_crs','IAU_2015',63530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63535,'Daphnis (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63535','projected_crs','IAU_2015',63535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63540,'Daphnis (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63540','projected_crs','IAU_2015',63540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63545,'Daphnis (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63545','projected_crs','IAU_2015',63545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63550,'Daphnis (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63550','projected_crs','IAU_2015',63550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63555,'Daphnis (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63555','projected_crs','IAU_2015',63555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63560,'Daphnis (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63560','projected_crs','IAU_2015',63560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63565,'Daphnis (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63565','projected_crs','IAU_2015',63565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63570,'Daphnis (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63570','projected_crs','IAU_2015',63570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63575,'Daphnis (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63575','projected_crs','IAU_2015',63575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63580,'Daphnis (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63580','projected_crs','IAU_2015',63580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63585,'Daphnis (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63585','projected_crs','IAU_2015',63585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',63590,'Daphnis (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',63500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_63590','projected_crs','IAU_2015',63590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Aegir has it lacks all axis information -- Skip Bebhionn has it lacks all axis information -- Skip Bergelmir has it lacks all axis information -- Skip Bestla has it lacks all axis information -- Skip Farbauti has it lacks all axis information -- Skip Fenrir has it lacks all axis information -- Skip Fornjot has it lacks all axis information -- Skip Hati has it lacks all axis information -- Skip Hyrrokkin has it lacks all axis information -- Skip Kari has it lacks all axis information -- Skip Loge has it lacks all axis information -- Skip Skoll has it lacks all axis information -- Skip Sutur has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 649, 'Anthe', 500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 64900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',64900,'Anthe (2015) - Sphere',NULL,'IAU_2015',649,500.000000,'EPSG','9001',NULL,500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',64900,'Anthe (2015) - Sphere','','IAU_2015',64900,'IAU_2015',64900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_64900','geodetic_datum','IAU_2015',64900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',64900,'Anthe (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',64900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_64900','geodetic_crs','IAU_2015',64900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64910,'Anthe (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64910','projected_crs','IAU_2015',64910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64915,'Anthe (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64915','projected_crs','IAU_2015',64915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64920,'Anthe (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64920','projected_crs','IAU_2015',64920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64925,'Anthe (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64925','projected_crs','IAU_2015',64925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64930,'Anthe (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64930','projected_crs','IAU_2015',64930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64935,'Anthe (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64935','projected_crs','IAU_2015',64935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64940,'Anthe (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64940','projected_crs','IAU_2015',64940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64945,'Anthe (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64945','projected_crs','IAU_2015',64945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64950,'Anthe (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64950','projected_crs','IAU_2015',64950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64955,'Anthe (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64955','projected_crs','IAU_2015',64955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64960,'Anthe (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64960','projected_crs','IAU_2015',64960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64965,'Anthe (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64965','projected_crs','IAU_2015',64965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64970,'Anthe (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64970','projected_crs','IAU_2015',64970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64975,'Anthe (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64975','projected_crs','IAU_2015',64975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64980,'Anthe (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64980','projected_crs','IAU_2015',64980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64985,'Anthe (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64985','projected_crs','IAU_2015',64985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',64990,'Anthe (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',64900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_64990','projected_crs','IAU_2015',64990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Jarnsaxa has it lacks all axis information -- Skip Greip has it lacks all axis information -- Skip Tarqeq has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 653, 'Aegaeon', 330.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 65300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',65300,'Aegaeon (2015) - Sphere',NULL,'IAU_2015',653,330.000000,'EPSG','9001',NULL,330.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',65300,'Aegaeon (2015) - Sphere','','IAU_2015',65300,'IAU_2015',65300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_65300','geodetic_datum','IAU_2015',65300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',65300,'Aegaeon (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',65300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_65300','geodetic_crs','IAU_2015',65300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65310,'Aegaeon (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65310','projected_crs','IAU_2015',65310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65315,'Aegaeon (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65315','projected_crs','IAU_2015',65315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65320,'Aegaeon (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65320','projected_crs','IAU_2015',65320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65325,'Aegaeon (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65325','projected_crs','IAU_2015',65325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65330,'Aegaeon (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65330','projected_crs','IAU_2015',65330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65335,'Aegaeon (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65335','projected_crs','IAU_2015',65335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65340,'Aegaeon (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65340','projected_crs','IAU_2015',65340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65345,'Aegaeon (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65345','projected_crs','IAU_2015',65345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65350,'Aegaeon (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65350','projected_crs','IAU_2015',65350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65355,'Aegaeon (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65355','projected_crs','IAU_2015',65355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65360,'Aegaeon (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65360','projected_crs','IAU_2015',65360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65365,'Aegaeon (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65365','projected_crs','IAU_2015',65365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65370,'Aegaeon (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65370','projected_crs','IAU_2015',65370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65375,'Aegaeon (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65375','projected_crs','IAU_2015',65375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65380,'Aegaeon (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65380','projected_crs','IAU_2015',65380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65385,'Aegaeon (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65385','projected_crs','IAU_2015',65385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',65390,'Aegaeon (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',65300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_65390','projected_crs','IAU_2015',65390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 799, 'Uranus', 25559000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 79900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',79900,'Uranus (2015) - Sphere',NULL,'IAU_2015',799,25559000.000000,'EPSG','9001',NULL,25559000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',79900,'Uranus (2015) - Sphere','','IAU_2015',79900,'IAU_2015',79900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_79900','geodetic_datum','IAU_2015',79900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',79900,'Uranus (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',79900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_79900','geodetic_crs','IAU_2015',79900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79910,'Uranus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79910','projected_crs','IAU_2015',79910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79915,'Uranus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79915','projected_crs','IAU_2015',79915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79920,'Uranus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79920','projected_crs','IAU_2015',79920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79925,'Uranus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79925','projected_crs','IAU_2015',79925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79930,'Uranus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79930','projected_crs','IAU_2015',79930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79935,'Uranus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79935','projected_crs','IAU_2015',79935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79940,'Uranus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79940','projected_crs','IAU_2015',79940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79945,'Uranus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79945','projected_crs','IAU_2015',79945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79950,'Uranus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79950','projected_crs','IAU_2015',79950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79955,'Uranus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79955','projected_crs','IAU_2015',79955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79960,'Uranus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79960','projected_crs','IAU_2015',79960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79965,'Uranus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79965','projected_crs','IAU_2015',79965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79970,'Uranus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79970','projected_crs','IAU_2015',79970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79975,'Uranus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79975','projected_crs','IAU_2015',79975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79980,'Uranus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79980','projected_crs','IAU_2015',79980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79985,'Uranus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79985','projected_crs','IAU_2015',79985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79990,'Uranus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',79900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79990','projected_crs','IAU_2015',79990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',79901,'Uranus (2015)',NULL,'IAU_2015',799,25559000.000000,'EPSG','9001',NULL,24973000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',79901,'Uranus (2015)','','IAU_2015',79901,'IAU_2015',79900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_79901','geodetic_datum','IAU_2015',79901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',79901,'Uranus (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',79901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_79901','geodetic_crs','IAU_2015',79901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79911,'Uranus (2015) / Ographic / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79911','projected_crs','IAU_2015',79911,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79916,'Uranus (2015) / Ographic / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79916','projected_crs','IAU_2015',79916,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79921,'Uranus (2015) / Ographic / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79921','projected_crs','IAU_2015',79921,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79926,'Uranus (2015) / Ographic / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79926','projected_crs','IAU_2015',79926,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79931,'Uranus (2015) / Ographic / North Polar',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79931','projected_crs','IAU_2015',79931,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79936,'Uranus (2015) / Ographic / South Polar',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79936','projected_crs','IAU_2015',79936,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79941,'Uranus (2015) / Ographic / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79941','projected_crs','IAU_2015',79941,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79946,'Uranus (2015) / Ographic / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79946','projected_crs','IAU_2015',79946,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79951,'Uranus (2015) / Ographic / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79951','projected_crs','IAU_2015',79951,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79956,'Uranus (2015) / Ographic / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79956','projected_crs','IAU_2015',79956,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79961,'Uranus (2015) / Ographic / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79961','projected_crs','IAU_2015',79961,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79966,'Uranus (2015) / Ographic / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79966','projected_crs','IAU_2015',79966,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79971,'Uranus (2015) / Ographic / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79971','projected_crs','IAU_2015',79971,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79976,'Uranus (2015) / Ographic / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79976','projected_crs','IAU_2015',79976,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79981,'Uranus (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79981','projected_crs','IAU_2015',79981,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79986,'Uranus (2015) / Ographic / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79986','projected_crs','IAU_2015',79986,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',79991,'Uranus (2015) / Ographic / Mercator',NULL,'EPSG','4400','IAU_2015',79901,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_79991','projected_crs','IAU_2015',79991,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',79902,'Uranus (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',79901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_79902','geodetic_crs','IAU_2015',79902,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 701, 'Ariel', 578900.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70100,'Ariel (2015) - Sphere',NULL,'IAU_2015',701,578900.000000,'EPSG','9001',NULL,578900.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70100,'Ariel (2015) - Sphere','','IAU_2015',70100,'IAU_2015',70100,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70100','geodetic_datum','IAU_2015',70100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70100,'Ariel (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70100','geodetic_crs','IAU_2015',70100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70110,'Ariel (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70110','projected_crs','IAU_2015',70110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70115,'Ariel (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70115','projected_crs','IAU_2015',70115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70120,'Ariel (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70120','projected_crs','IAU_2015',70120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70125,'Ariel (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70125','projected_crs','IAU_2015',70125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70130,'Ariel (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70130','projected_crs','IAU_2015',70130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70135,'Ariel (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70135','projected_crs','IAU_2015',70135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70140,'Ariel (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70140','projected_crs','IAU_2015',70140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70145,'Ariel (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70145','projected_crs','IAU_2015',70145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70150,'Ariel (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70150','projected_crs','IAU_2015',70150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70155,'Ariel (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70155','projected_crs','IAU_2015',70155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70160,'Ariel (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70160','projected_crs','IAU_2015',70160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70165,'Ariel (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70165','projected_crs','IAU_2015',70165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70170,'Ariel (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70170','projected_crs','IAU_2015',70170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70175,'Ariel (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70175','projected_crs','IAU_2015',70175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70180,'Ariel (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70180','projected_crs','IAU_2015',70180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70185,'Ariel (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70185','projected_crs','IAU_2015',70185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70190,'Ariel (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70190','projected_crs','IAU_2015',70190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 702, 'Umbriel', 584700.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70200,'Umbriel (2015) - Sphere',NULL,'IAU_2015',702,584700.000000,'EPSG','9001',NULL,584700.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70200,'Umbriel (2015) - Sphere','','IAU_2015',70200,'IAU_2015',70200,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70200','geodetic_datum','IAU_2015',70200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70200,'Umbriel (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70200','geodetic_crs','IAU_2015',70200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70210,'Umbriel (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70210','projected_crs','IAU_2015',70210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70215,'Umbriel (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70215','projected_crs','IAU_2015',70215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70220,'Umbriel (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70220','projected_crs','IAU_2015',70220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70225,'Umbriel (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70225','projected_crs','IAU_2015',70225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70230,'Umbriel (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70230','projected_crs','IAU_2015',70230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70235,'Umbriel (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70235','projected_crs','IAU_2015',70235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70240,'Umbriel (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70240','projected_crs','IAU_2015',70240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70245,'Umbriel (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70245','projected_crs','IAU_2015',70245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70250,'Umbriel (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70250','projected_crs','IAU_2015',70250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70255,'Umbriel (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70255','projected_crs','IAU_2015',70255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70260,'Umbriel (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70260','projected_crs','IAU_2015',70260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70265,'Umbriel (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70265','projected_crs','IAU_2015',70265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70270,'Umbriel (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70270','projected_crs','IAU_2015',70270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70275,'Umbriel (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70275','projected_crs','IAU_2015',70275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70280,'Umbriel (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70280','projected_crs','IAU_2015',70280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70285,'Umbriel (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70285','projected_crs','IAU_2015',70285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70290,'Umbriel (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70290','projected_crs','IAU_2015',70290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 703, 'Titania', 788900.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70300,'Titania (2015) - Sphere',NULL,'IAU_2015',703,788900.000000,'EPSG','9001',NULL,788900.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70300,'Titania (2015) - Sphere','','IAU_2015',70300,'IAU_2015',70300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70300','geodetic_datum','IAU_2015',70300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70300,'Titania (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70300','geodetic_crs','IAU_2015',70300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70310,'Titania (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70310','projected_crs','IAU_2015',70310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70315,'Titania (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70315','projected_crs','IAU_2015',70315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70320,'Titania (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70320','projected_crs','IAU_2015',70320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70325,'Titania (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70325','projected_crs','IAU_2015',70325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70330,'Titania (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70330','projected_crs','IAU_2015',70330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70335,'Titania (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70335','projected_crs','IAU_2015',70335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70340,'Titania (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70340','projected_crs','IAU_2015',70340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70345,'Titania (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70345','projected_crs','IAU_2015',70345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70350,'Titania (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70350','projected_crs','IAU_2015',70350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70355,'Titania (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70355','projected_crs','IAU_2015',70355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70360,'Titania (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70360','projected_crs','IAU_2015',70360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70365,'Titania (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70365','projected_crs','IAU_2015',70365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70370,'Titania (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70370','projected_crs','IAU_2015',70370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70375,'Titania (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70375','projected_crs','IAU_2015',70375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70380,'Titania (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70380','projected_crs','IAU_2015',70380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70385,'Titania (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70385','projected_crs','IAU_2015',70385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70390,'Titania (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70390','projected_crs','IAU_2015',70390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 704, 'Oberon', 761400.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70400,'Oberon (2015) - Sphere',NULL,'IAU_2015',704,761400.000000,'EPSG','9001',NULL,761400.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70400,'Oberon (2015) - Sphere','','IAU_2015',70400,'IAU_2015',70400,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70400','geodetic_datum','IAU_2015',70400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70400,'Oberon (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70400','geodetic_crs','IAU_2015',70400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70410,'Oberon (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70410','projected_crs','IAU_2015',70410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70415,'Oberon (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70415','projected_crs','IAU_2015',70415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70420,'Oberon (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70420','projected_crs','IAU_2015',70420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70425,'Oberon (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70425','projected_crs','IAU_2015',70425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70430,'Oberon (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70430','projected_crs','IAU_2015',70430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70435,'Oberon (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70435','projected_crs','IAU_2015',70435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70440,'Oberon (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70440','projected_crs','IAU_2015',70440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70445,'Oberon (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70445','projected_crs','IAU_2015',70445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70450,'Oberon (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70450','projected_crs','IAU_2015',70450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70455,'Oberon (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70455','projected_crs','IAU_2015',70455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70460,'Oberon (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70460','projected_crs','IAU_2015',70460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70465,'Oberon (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70465','projected_crs','IAU_2015',70465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70470,'Oberon (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70470','projected_crs','IAU_2015',70470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70475,'Oberon (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70475','projected_crs','IAU_2015',70475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70480,'Oberon (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70480','projected_crs','IAU_2015',70480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70485,'Oberon (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70485','projected_crs','IAU_2015',70485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70490,'Oberon (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70490','projected_crs','IAU_2015',70490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 705, 'Miranda', 235800.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70500,'Miranda (2015) - Sphere',NULL,'IAU_2015',705,235800.000000,'EPSG','9001',NULL,235800.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70500,'Miranda (2015) - Sphere','','IAU_2015',70500,'IAU_2015',70500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70500','geodetic_datum','IAU_2015',70500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70500,'Miranda (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70500','geodetic_crs','IAU_2015',70500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70510,'Miranda (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70510','projected_crs','IAU_2015',70510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70515,'Miranda (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70515','projected_crs','IAU_2015',70515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70520,'Miranda (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70520','projected_crs','IAU_2015',70520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70525,'Miranda (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70525','projected_crs','IAU_2015',70525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70530,'Miranda (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70530','projected_crs','IAU_2015',70530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70535,'Miranda (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70535','projected_crs','IAU_2015',70535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70540,'Miranda (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70540','projected_crs','IAU_2015',70540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70545,'Miranda (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70545','projected_crs','IAU_2015',70545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70550,'Miranda (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70550','projected_crs','IAU_2015',70550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70555,'Miranda (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70555','projected_crs','IAU_2015',70555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70560,'Miranda (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70560','projected_crs','IAU_2015',70560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70565,'Miranda (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70565','projected_crs','IAU_2015',70565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70570,'Miranda (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70570','projected_crs','IAU_2015',70570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70575,'Miranda (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70575','projected_crs','IAU_2015',70575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70580,'Miranda (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70580','projected_crs','IAU_2015',70580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70585,'Miranda (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70585','projected_crs','IAU_2015',70585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70590,'Miranda (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70590','projected_crs','IAU_2015',70590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 706, 'Cordelia', 13000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70600,'Cordelia (2015) - Sphere',NULL,'IAU_2015',706,13000.000000,'EPSG','9001',NULL,13000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70600,'Cordelia (2015) - Sphere','','IAU_2015',70600,'IAU_2015',70600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70600','geodetic_datum','IAU_2015',70600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70600,'Cordelia (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70600','geodetic_crs','IAU_2015',70600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70610,'Cordelia (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70610','projected_crs','IAU_2015',70610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70615,'Cordelia (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70615','projected_crs','IAU_2015',70615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70620,'Cordelia (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70620','projected_crs','IAU_2015',70620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70625,'Cordelia (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70625','projected_crs','IAU_2015',70625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70630,'Cordelia (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70630','projected_crs','IAU_2015',70630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70635,'Cordelia (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70635','projected_crs','IAU_2015',70635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70640,'Cordelia (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70640','projected_crs','IAU_2015',70640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70645,'Cordelia (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70645','projected_crs','IAU_2015',70645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70650,'Cordelia (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70650','projected_crs','IAU_2015',70650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70655,'Cordelia (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70655','projected_crs','IAU_2015',70655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70660,'Cordelia (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70660','projected_crs','IAU_2015',70660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70665,'Cordelia (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70665','projected_crs','IAU_2015',70665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70670,'Cordelia (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70670','projected_crs','IAU_2015',70670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70675,'Cordelia (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70675','projected_crs','IAU_2015',70675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70680,'Cordelia (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70680','projected_crs','IAU_2015',70680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70685,'Cordelia (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70685','projected_crs','IAU_2015',70685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70690,'Cordelia (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70690','projected_crs','IAU_2015',70690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 707, 'Ophelia', 15000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70700, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70700,'Ophelia (2015) - Sphere',NULL,'IAU_2015',707,15000.000000,'EPSG','9001',NULL,15000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70700,'Ophelia (2015) - Sphere','','IAU_2015',70700,'IAU_2015',70700,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70700','geodetic_datum','IAU_2015',70700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70700,'Ophelia (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70700,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70700','geodetic_crs','IAU_2015',70700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70710,'Ophelia (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70710','projected_crs','IAU_2015',70710,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70715,'Ophelia (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70715','projected_crs','IAU_2015',70715,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70720,'Ophelia (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70720','projected_crs','IAU_2015',70720,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70725,'Ophelia (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70725','projected_crs','IAU_2015',70725,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70730,'Ophelia (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70730','projected_crs','IAU_2015',70730,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70735,'Ophelia (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70735','projected_crs','IAU_2015',70735,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70740,'Ophelia (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70740','projected_crs','IAU_2015',70740,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70745,'Ophelia (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70745','projected_crs','IAU_2015',70745,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70750,'Ophelia (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70750','projected_crs','IAU_2015',70750,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70755,'Ophelia (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70755','projected_crs','IAU_2015',70755,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70760,'Ophelia (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70760','projected_crs','IAU_2015',70760,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70765,'Ophelia (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70765','projected_crs','IAU_2015',70765,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70770,'Ophelia (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70770','projected_crs','IAU_2015',70770,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70775,'Ophelia (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70775','projected_crs','IAU_2015',70775,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70780,'Ophelia (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70780','projected_crs','IAU_2015',70780,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70785,'Ophelia (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70785','projected_crs','IAU_2015',70785,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70790,'Ophelia (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70700,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70790','projected_crs','IAU_2015',70790,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 708, 'Bianca', 21000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70800, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70800,'Bianca (2015) - Sphere',NULL,'IAU_2015',708,21000.000000,'EPSG','9001',NULL,21000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70800,'Bianca (2015) - Sphere','','IAU_2015',70800,'IAU_2015',70800,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70800','geodetic_datum','IAU_2015',70800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70800,'Bianca (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70800,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70800','geodetic_crs','IAU_2015',70800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70810,'Bianca (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70810','projected_crs','IAU_2015',70810,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70815,'Bianca (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70815','projected_crs','IAU_2015',70815,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70820,'Bianca (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70820','projected_crs','IAU_2015',70820,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70825,'Bianca (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70825','projected_crs','IAU_2015',70825,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70830,'Bianca (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70830','projected_crs','IAU_2015',70830,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70835,'Bianca (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70835','projected_crs','IAU_2015',70835,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70840,'Bianca (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70840','projected_crs','IAU_2015',70840,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70845,'Bianca (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70845','projected_crs','IAU_2015',70845,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70850,'Bianca (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70850','projected_crs','IAU_2015',70850,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70855,'Bianca (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70855','projected_crs','IAU_2015',70855,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70860,'Bianca (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70860','projected_crs','IAU_2015',70860,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70865,'Bianca (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70865','projected_crs','IAU_2015',70865,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70870,'Bianca (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70870','projected_crs','IAU_2015',70870,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70875,'Bianca (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70875','projected_crs','IAU_2015',70875,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70880,'Bianca (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70880','projected_crs','IAU_2015',70880,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70885,'Bianca (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70885','projected_crs','IAU_2015',70885,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70890,'Bianca (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70800,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70890','projected_crs','IAU_2015',70890,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 709, 'Cressida', 31000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 70900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',70900,'Cressida (2015) - Sphere',NULL,'IAU_2015',709,31000.000000,'EPSG','9001',NULL,31000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',70900,'Cressida (2015) - Sphere','','IAU_2015',70900,'IAU_2015',70900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_70900','geodetic_datum','IAU_2015',70900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',70900,'Cressida (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',70900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_70900','geodetic_crs','IAU_2015',70900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70910,'Cressida (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70910','projected_crs','IAU_2015',70910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70915,'Cressida (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70915','projected_crs','IAU_2015',70915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70920,'Cressida (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70920','projected_crs','IAU_2015',70920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70925,'Cressida (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70925','projected_crs','IAU_2015',70925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70930,'Cressida (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70930','projected_crs','IAU_2015',70930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70935,'Cressida (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70935','projected_crs','IAU_2015',70935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70940,'Cressida (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70940','projected_crs','IAU_2015',70940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70945,'Cressida (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70945','projected_crs','IAU_2015',70945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70950,'Cressida (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70950','projected_crs','IAU_2015',70950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70955,'Cressida (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70955','projected_crs','IAU_2015',70955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70960,'Cressida (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70960','projected_crs','IAU_2015',70960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70965,'Cressida (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70965','projected_crs','IAU_2015',70965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70970,'Cressida (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70970','projected_crs','IAU_2015',70970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70975,'Cressida (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70975','projected_crs','IAU_2015',70975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70980,'Cressida (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70980','projected_crs','IAU_2015',70980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70985,'Cressida (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70985','projected_crs','IAU_2015',70985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',70990,'Cressida (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',70900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_70990','projected_crs','IAU_2015',70990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 710, 'Desdemona', 27000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 71000, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',71000,'Desdemona (2015) - Sphere',NULL,'IAU_2015',710,27000.000000,'EPSG','9001',NULL,27000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',71000,'Desdemona (2015) - Sphere','','IAU_2015',71000,'IAU_2015',71000,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_71000','geodetic_datum','IAU_2015',71000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',71000,'Desdemona (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',71000,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_71000','geodetic_crs','IAU_2015',71000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71010,'Desdemona (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71010','projected_crs','IAU_2015',71010,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71015,'Desdemona (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71015','projected_crs','IAU_2015',71015,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71020,'Desdemona (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71020','projected_crs','IAU_2015',71020,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71025,'Desdemona (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71025','projected_crs','IAU_2015',71025,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71030,'Desdemona (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71030','projected_crs','IAU_2015',71030,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71035,'Desdemona (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71035','projected_crs','IAU_2015',71035,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71040,'Desdemona (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71040','projected_crs','IAU_2015',71040,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71045,'Desdemona (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71045','projected_crs','IAU_2015',71045,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71050,'Desdemona (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71050','projected_crs','IAU_2015',71050,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71055,'Desdemona (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71055','projected_crs','IAU_2015',71055,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71060,'Desdemona (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71060','projected_crs','IAU_2015',71060,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71065,'Desdemona (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71065','projected_crs','IAU_2015',71065,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71070,'Desdemona (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71070','projected_crs','IAU_2015',71070,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71075,'Desdemona (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71075','projected_crs','IAU_2015',71075,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71080,'Desdemona (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71080','projected_crs','IAU_2015',71080,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71085,'Desdemona (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71085','projected_crs','IAU_2015',71085,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71090,'Desdemona (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',71000,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71090','projected_crs','IAU_2015',71090,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 711, 'Juliet', 42000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 71100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',71100,'Juliet (2015) - Sphere',NULL,'IAU_2015',711,42000.000000,'EPSG','9001',NULL,42000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',71100,'Juliet (2015) - Sphere','','IAU_2015',71100,'IAU_2015',71100,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_71100','geodetic_datum','IAU_2015',71100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',71100,'Juliet (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',71100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_71100','geodetic_crs','IAU_2015',71100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71110,'Juliet (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71110','projected_crs','IAU_2015',71110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71115,'Juliet (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71115','projected_crs','IAU_2015',71115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71120,'Juliet (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71120','projected_crs','IAU_2015',71120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71125,'Juliet (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71125','projected_crs','IAU_2015',71125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71130,'Juliet (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71130','projected_crs','IAU_2015',71130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71135,'Juliet (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71135','projected_crs','IAU_2015',71135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71140,'Juliet (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71140','projected_crs','IAU_2015',71140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71145,'Juliet (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71145','projected_crs','IAU_2015',71145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71150,'Juliet (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71150','projected_crs','IAU_2015',71150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71155,'Juliet (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71155','projected_crs','IAU_2015',71155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71160,'Juliet (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71160','projected_crs','IAU_2015',71160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71165,'Juliet (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71165','projected_crs','IAU_2015',71165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71170,'Juliet (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71170','projected_crs','IAU_2015',71170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71175,'Juliet (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71175','projected_crs','IAU_2015',71175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71180,'Juliet (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71180','projected_crs','IAU_2015',71180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71185,'Juliet (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71185','projected_crs','IAU_2015',71185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71190,'Juliet (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',71100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71190','projected_crs','IAU_2015',71190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 712, 'Portia', 54000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 71200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',71200,'Portia (2015) - Sphere',NULL,'IAU_2015',712,54000.000000,'EPSG','9001',NULL,54000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',71200,'Portia (2015) - Sphere','','IAU_2015',71200,'IAU_2015',71200,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_71200','geodetic_datum','IAU_2015',71200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',71200,'Portia (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',71200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_71200','geodetic_crs','IAU_2015',71200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71210,'Portia (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71210','projected_crs','IAU_2015',71210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71215,'Portia (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71215','projected_crs','IAU_2015',71215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71220,'Portia (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71220','projected_crs','IAU_2015',71220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71225,'Portia (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71225','projected_crs','IAU_2015',71225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71230,'Portia (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71230','projected_crs','IAU_2015',71230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71235,'Portia (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71235','projected_crs','IAU_2015',71235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71240,'Portia (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71240','projected_crs','IAU_2015',71240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71245,'Portia (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71245','projected_crs','IAU_2015',71245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71250,'Portia (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71250','projected_crs','IAU_2015',71250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71255,'Portia (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71255','projected_crs','IAU_2015',71255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71260,'Portia (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71260','projected_crs','IAU_2015',71260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71265,'Portia (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71265','projected_crs','IAU_2015',71265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71270,'Portia (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71270','projected_crs','IAU_2015',71270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71275,'Portia (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71275','projected_crs','IAU_2015',71275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71280,'Portia (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71280','projected_crs','IAU_2015',71280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71285,'Portia (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71285','projected_crs','IAU_2015',71285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71290,'Portia (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',71200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71290','projected_crs','IAU_2015',71290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 713, 'Rosalind', 27000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 71300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',71300,'Rosalind (2015) - Sphere',NULL,'IAU_2015',713,27000.000000,'EPSG','9001',NULL,27000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',71300,'Rosalind (2015) - Sphere','','IAU_2015',71300,'IAU_2015',71300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_71300','geodetic_datum','IAU_2015',71300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',71300,'Rosalind (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',71300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_71300','geodetic_crs','IAU_2015',71300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71310,'Rosalind (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71310','projected_crs','IAU_2015',71310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71315,'Rosalind (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71315','projected_crs','IAU_2015',71315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71320,'Rosalind (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71320','projected_crs','IAU_2015',71320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71325,'Rosalind (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71325','projected_crs','IAU_2015',71325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71330,'Rosalind (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71330','projected_crs','IAU_2015',71330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71335,'Rosalind (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71335','projected_crs','IAU_2015',71335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71340,'Rosalind (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71340','projected_crs','IAU_2015',71340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71345,'Rosalind (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71345','projected_crs','IAU_2015',71345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71350,'Rosalind (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71350','projected_crs','IAU_2015',71350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71355,'Rosalind (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71355','projected_crs','IAU_2015',71355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71360,'Rosalind (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71360','projected_crs','IAU_2015',71360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71365,'Rosalind (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71365','projected_crs','IAU_2015',71365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71370,'Rosalind (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71370','projected_crs','IAU_2015',71370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71375,'Rosalind (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71375','projected_crs','IAU_2015',71375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71380,'Rosalind (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71380','projected_crs','IAU_2015',71380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71385,'Rosalind (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71385','projected_crs','IAU_2015',71385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71390,'Rosalind (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',71300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71390','projected_crs','IAU_2015',71390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 714, 'Belinda', 33000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 71400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',71400,'Belinda (2015) - Sphere',NULL,'IAU_2015',714,33000.000000,'EPSG','9001',NULL,33000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',71400,'Belinda (2015) - Sphere','','IAU_2015',71400,'IAU_2015',71400,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_71400','geodetic_datum','IAU_2015',71400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',71400,'Belinda (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',71400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_71400','geodetic_crs','IAU_2015',71400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71410,'Belinda (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71410','projected_crs','IAU_2015',71410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71415,'Belinda (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71415','projected_crs','IAU_2015',71415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71420,'Belinda (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71420','projected_crs','IAU_2015',71420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71425,'Belinda (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71425','projected_crs','IAU_2015',71425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71430,'Belinda (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71430','projected_crs','IAU_2015',71430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71435,'Belinda (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71435','projected_crs','IAU_2015',71435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71440,'Belinda (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71440','projected_crs','IAU_2015',71440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71445,'Belinda (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71445','projected_crs','IAU_2015',71445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71450,'Belinda (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71450','projected_crs','IAU_2015',71450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71455,'Belinda (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71455','projected_crs','IAU_2015',71455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71460,'Belinda (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71460','projected_crs','IAU_2015',71460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71465,'Belinda (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71465','projected_crs','IAU_2015',71465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71470,'Belinda (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71470','projected_crs','IAU_2015',71470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71475,'Belinda (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71475','projected_crs','IAU_2015',71475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71480,'Belinda (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71480','projected_crs','IAU_2015',71480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71485,'Belinda (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71485','projected_crs','IAU_2015',71485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71490,'Belinda (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',71400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71490','projected_crs','IAU_2015',71490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 715, 'Puck', 77000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 71500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',71500,'Puck (2015) - Sphere',NULL,'IAU_2015',715,77000.000000,'EPSG','9001',NULL,77000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',71500,'Puck (2015) - Sphere','','IAU_2015',71500,'IAU_2015',71500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_71500','geodetic_datum','IAU_2015',71500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',71500,'Puck (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',71500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_71500','geodetic_crs','IAU_2015',71500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71510,'Puck (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71510','projected_crs','IAU_2015',71510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71515,'Puck (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71515','projected_crs','IAU_2015',71515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71520,'Puck (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71520','projected_crs','IAU_2015',71520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71525,'Puck (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71525','projected_crs','IAU_2015',71525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71530,'Puck (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71530','projected_crs','IAU_2015',71530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71535,'Puck (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71535','projected_crs','IAU_2015',71535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71540,'Puck (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71540','projected_crs','IAU_2015',71540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71545,'Puck (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71545','projected_crs','IAU_2015',71545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71550,'Puck (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71550','projected_crs','IAU_2015',71550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71555,'Puck (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71555','projected_crs','IAU_2015',71555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71560,'Puck (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71560','projected_crs','IAU_2015',71560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71565,'Puck (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71565','projected_crs','IAU_2015',71565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71570,'Puck (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71570','projected_crs','IAU_2015',71570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71575,'Puck (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71575','projected_crs','IAU_2015',71575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71580,'Puck (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71580','projected_crs','IAU_2015',71580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71585,'Puck (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71585','projected_crs','IAU_2015',71585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',71590,'Puck (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',71500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_71590','projected_crs','IAU_2015',71590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Caliban has it lacks all axis information -- Skip Sycorax has it lacks all axis information -- Skip Prospero has it lacks all axis information -- Skip Setebos has it lacks all axis information -- Skip Stephano has it lacks all axis information -- Skip Trinculo has it lacks all axis information -- Skip Francisco has it lacks all axis information -- Skip Margaret has it lacks all axis information -- Skip Ferdinand has it lacks all axis information -- Skip Perdita has it lacks all axis information -- Skip Mab has it lacks all axis information -- Skip Cupid has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 899, 'Neptune', 24764000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 89900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',89900,'Neptune (2015) - Sphere',NULL,'IAU_2015',899,24764000.000000,'EPSG','9001',NULL,24764000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',89900,'Neptune (2015) - Sphere','','IAU_2015',89900,'IAU_2015',89900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_89900','geodetic_datum','IAU_2015',89900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',89900,'Neptune (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',89900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_89900','geodetic_crs','IAU_2015',89900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89910,'Neptune (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89910','projected_crs','IAU_2015',89910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89915,'Neptune (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89915','projected_crs','IAU_2015',89915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89920,'Neptune (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89920','projected_crs','IAU_2015',89920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89925,'Neptune (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89925','projected_crs','IAU_2015',89925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89930,'Neptune (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89930','projected_crs','IAU_2015',89930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89935,'Neptune (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89935','projected_crs','IAU_2015',89935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89940,'Neptune (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89940','projected_crs','IAU_2015',89940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89945,'Neptune (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89945','projected_crs','IAU_2015',89945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89950,'Neptune (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89950','projected_crs','IAU_2015',89950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89955,'Neptune (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89955','projected_crs','IAU_2015',89955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89960,'Neptune (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89960','projected_crs','IAU_2015',89960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89965,'Neptune (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89965','projected_crs','IAU_2015',89965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89970,'Neptune (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89970','projected_crs','IAU_2015',89970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89975,'Neptune (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89975','projected_crs','IAU_2015',89975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89980,'Neptune (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89980','projected_crs','IAU_2015',89980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89985,'Neptune (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89985','projected_crs','IAU_2015',89985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89990,'Neptune (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',89900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89990','projected_crs','IAU_2015',89990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',89901,'Neptune (2015)',NULL,'IAU_2015',899,24764000.000000,'EPSG','9001',NULL,24341000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',89901,'Neptune (2015)','','IAU_2015',89901,'IAU_2015',89900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_89901','geodetic_datum','IAU_2015',89901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',89901,'Neptune (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',89901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_89901','geodetic_crs','IAU_2015',89901,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89911,'Neptune (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89911','projected_crs','IAU_2015',89911,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89916,'Neptune (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89916','projected_crs','IAU_2015',89916,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89921,'Neptune (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89921','projected_crs','IAU_2015',89921,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89926,'Neptune (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89926','projected_crs','IAU_2015',89926,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89931,'Neptune (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89931','projected_crs','IAU_2015',89931,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89936,'Neptune (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89936','projected_crs','IAU_2015',89936,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89941,'Neptune (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89941','projected_crs','IAU_2015',89941,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89946,'Neptune (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89946','projected_crs','IAU_2015',89946,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89951,'Neptune (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89951','projected_crs','IAU_2015',89951,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89956,'Neptune (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89956','projected_crs','IAU_2015',89956,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89961,'Neptune (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89961','projected_crs','IAU_2015',89961,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89966,'Neptune (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89966','projected_crs','IAU_2015',89966,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89971,'Neptune (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89971','projected_crs','IAU_2015',89971,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89976,'Neptune (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89976','projected_crs','IAU_2015',89976,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89981,'Neptune (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89981','projected_crs','IAU_2015',89981,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89986,'Neptune (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89986','projected_crs','IAU_2015',89986,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89991,'Neptune (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',89901,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89991','projected_crs','IAU_2015',89991,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',89902,'Neptune (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',89901,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_89902','geodetic_crs','IAU_2015',89902,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89912,'Neptune (2015) / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89912','projected_crs','IAU_2015',89912,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89917,'Neptune (2015) / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89917','projected_crs','IAU_2015',89917,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89922,'Neptune (2015) / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89922','projected_crs','IAU_2015',89922,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89927,'Neptune (2015) / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89927','projected_crs','IAU_2015',89927,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89932,'Neptune (2015) / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89932','projected_crs','IAU_2015',89932,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89937,'Neptune (2015) / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89937','projected_crs','IAU_2015',89937,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89942,'Neptune (2015) / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89942','projected_crs','IAU_2015',89942,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89947,'Neptune (2015) / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89947','projected_crs','IAU_2015',89947,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89952,'Neptune (2015) / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89952','projected_crs','IAU_2015',89952,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89957,'Neptune (2015) / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89957','projected_crs','IAU_2015',89957,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89962,'Neptune (2015) / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89962','projected_crs','IAU_2015',89962,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89967,'Neptune (2015) / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89967','projected_crs','IAU_2015',89967,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89972,'Neptune (2015) / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89972','projected_crs','IAU_2015',89972,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89977,'Neptune (2015) / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89977','projected_crs','IAU_2015',89977,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89982,'Neptune (2015) / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89982','projected_crs','IAU_2015',89982,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89987,'Neptune (2015) / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89987','projected_crs','IAU_2015',89987,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',89992,'Neptune (2015) / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',89902,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_89992','projected_crs','IAU_2015',89992,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 801, 'Triton', 1352600.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80100,'Triton (2015) - Sphere',NULL,'IAU_2015',801,1352600.000000,'EPSG','9001',NULL,1352600.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80100,'Triton (2015) - Sphere','','IAU_2015',80100,'IAU_2015',80100,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80100','geodetic_datum','IAU_2015',80100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80100,'Triton (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80100','geodetic_crs','IAU_2015',80100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80110,'Triton (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80110','projected_crs','IAU_2015',80110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80115,'Triton (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80115','projected_crs','IAU_2015',80115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80120,'Triton (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80120','projected_crs','IAU_2015',80120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80125,'Triton (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80125','projected_crs','IAU_2015',80125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80130,'Triton (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80130','projected_crs','IAU_2015',80130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80135,'Triton (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80135','projected_crs','IAU_2015',80135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80140,'Triton (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80140','projected_crs','IAU_2015',80140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80145,'Triton (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80145','projected_crs','IAU_2015',80145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80150,'Triton (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80150','projected_crs','IAU_2015',80150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80155,'Triton (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80155','projected_crs','IAU_2015',80155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80160,'Triton (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80160','projected_crs','IAU_2015',80160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80165,'Triton (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80165','projected_crs','IAU_2015',80165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80170,'Triton (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80170','projected_crs','IAU_2015',80170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80175,'Triton (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80175','projected_crs','IAU_2015',80175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80180,'Triton (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80180','projected_crs','IAU_2015',80180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80185,'Triton (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80185','projected_crs','IAU_2015',80185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80190,'Triton (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80190','projected_crs','IAU_2015',80190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 802, 'Nereid', 170000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80200,'Nereid (2015) - Sphere',NULL,'IAU_2015',802,170000.000000,'EPSG','9001',NULL,170000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80200,'Nereid (2015) - Sphere','','IAU_2015',80200,'IAU_2015',80200,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80200','geodetic_datum','IAU_2015',80200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80200,'Nereid (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80200','geodetic_crs','IAU_2015',80200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80210,'Nereid (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80210','projected_crs','IAU_2015',80210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80215,'Nereid (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80215','projected_crs','IAU_2015',80215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80220,'Nereid (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80220','projected_crs','IAU_2015',80220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80225,'Nereid (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80225','projected_crs','IAU_2015',80225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80230,'Nereid (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80230','projected_crs','IAU_2015',80230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80235,'Nereid (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80235','projected_crs','IAU_2015',80235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80240,'Nereid (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80240','projected_crs','IAU_2015',80240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80245,'Nereid (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80245','projected_crs','IAU_2015',80245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80250,'Nereid (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80250','projected_crs','IAU_2015',80250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80255,'Nereid (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80255','projected_crs','IAU_2015',80255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80260,'Nereid (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80260','projected_crs','IAU_2015',80260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80265,'Nereid (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80265','projected_crs','IAU_2015',80265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80270,'Nereid (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80270','projected_crs','IAU_2015',80270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80275,'Nereid (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80275','projected_crs','IAU_2015',80275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80280,'Nereid (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80280','projected_crs','IAU_2015',80280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80285,'Nereid (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80285','projected_crs','IAU_2015',80285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80290,'Nereid (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80290','projected_crs','IAU_2015',80290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 803, 'Naiad', 29000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80300,'Naiad (2015) - Sphere',NULL,'IAU_2015',803,29000.000000,'EPSG','9001',NULL,29000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80300,'Naiad (2015) - Sphere','','IAU_2015',80300,'IAU_2015',80300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80300','geodetic_datum','IAU_2015',80300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80300,'Naiad (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80300','geodetic_crs','IAU_2015',80300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80310,'Naiad (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80310','projected_crs','IAU_2015',80310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80315,'Naiad (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80315','projected_crs','IAU_2015',80315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80320,'Naiad (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80320','projected_crs','IAU_2015',80320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80325,'Naiad (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80325','projected_crs','IAU_2015',80325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80330,'Naiad (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80330','projected_crs','IAU_2015',80330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80335,'Naiad (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80335','projected_crs','IAU_2015',80335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80340,'Naiad (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80340','projected_crs','IAU_2015',80340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80345,'Naiad (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80345','projected_crs','IAU_2015',80345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80350,'Naiad (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80350','projected_crs','IAU_2015',80350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80355,'Naiad (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80355','projected_crs','IAU_2015',80355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80360,'Naiad (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80360','projected_crs','IAU_2015',80360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80365,'Naiad (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80365','projected_crs','IAU_2015',80365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80370,'Naiad (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80370','projected_crs','IAU_2015',80370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80375,'Naiad (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80375','projected_crs','IAU_2015',80375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80380,'Naiad (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80380','projected_crs','IAU_2015',80380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80385,'Naiad (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80385','projected_crs','IAU_2015',80385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80390,'Naiad (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80390','projected_crs','IAU_2015',80390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',80301,'Naiad (2015)',NULL,'IAU_2015',803,29000.000000,'EPSG','9001',NULL,29000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80301,'Naiad (2015)','','IAU_2015',80301,'IAU_2015',80300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80301','geodetic_datum','IAU_2015',80301,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80301,'Naiad (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',80301,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80301','geodetic_crs','IAU_2015',80301,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80311,'Naiad (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80311','projected_crs','IAU_2015',80311,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80316,'Naiad (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80316','projected_crs','IAU_2015',80316,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80321,'Naiad (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80321','projected_crs','IAU_2015',80321,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80326,'Naiad (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80326','projected_crs','IAU_2015',80326,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80331,'Naiad (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80331','projected_crs','IAU_2015',80331,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80336,'Naiad (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80336','projected_crs','IAU_2015',80336,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80341,'Naiad (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80341','projected_crs','IAU_2015',80341,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80346,'Naiad (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80346','projected_crs','IAU_2015',80346,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80351,'Naiad (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80351','projected_crs','IAU_2015',80351,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80356,'Naiad (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80356','projected_crs','IAU_2015',80356,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80361,'Naiad (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80361','projected_crs','IAU_2015',80361,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80366,'Naiad (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80366','projected_crs','IAU_2015',80366,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80371,'Naiad (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80371','projected_crs','IAU_2015',80371,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80376,'Naiad (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80376','projected_crs','IAU_2015',80376,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80381,'Naiad (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80381','projected_crs','IAU_2015',80381,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80386,'Naiad (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80386','projected_crs','IAU_2015',80386,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80391,'Naiad (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80301,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80391','projected_crs','IAU_2015',80391,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 804, 'Thalassa', 40000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80400,'Thalassa (2015) - Sphere',NULL,'IAU_2015',804,40000.000000,'EPSG','9001',NULL,40000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80400,'Thalassa (2015) - Sphere','','IAU_2015',80400,'IAU_2015',80400,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80400','geodetic_datum','IAU_2015',80400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80400,'Thalassa (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80400','geodetic_crs','IAU_2015',80400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80410,'Thalassa (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80410','projected_crs','IAU_2015',80410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80415,'Thalassa (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80415','projected_crs','IAU_2015',80415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80420,'Thalassa (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80420','projected_crs','IAU_2015',80420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80425,'Thalassa (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80425','projected_crs','IAU_2015',80425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80430,'Thalassa (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80430','projected_crs','IAU_2015',80430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80435,'Thalassa (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80435','projected_crs','IAU_2015',80435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80440,'Thalassa (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80440','projected_crs','IAU_2015',80440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80445,'Thalassa (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80445','projected_crs','IAU_2015',80445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80450,'Thalassa (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80450','projected_crs','IAU_2015',80450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80455,'Thalassa (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80455','projected_crs','IAU_2015',80455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80460,'Thalassa (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80460','projected_crs','IAU_2015',80460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80465,'Thalassa (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80465','projected_crs','IAU_2015',80465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80470,'Thalassa (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80470','projected_crs','IAU_2015',80470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80475,'Thalassa (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80475','projected_crs','IAU_2015',80475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80480,'Thalassa (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80480','projected_crs','IAU_2015',80480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80485,'Thalassa (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80485','projected_crs','IAU_2015',80485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80490,'Thalassa (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80490','projected_crs','IAU_2015',80490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',80401,'Thalassa (2015)',NULL,'IAU_2015',804,40000.000000,'EPSG','9001',NULL,40000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80401,'Thalassa (2015)','','IAU_2015',80401,'IAU_2015',80400,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80401','geodetic_datum','IAU_2015',80401,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80401,'Thalassa (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',80401,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80401','geodetic_crs','IAU_2015',80401,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80411,'Thalassa (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80411','projected_crs','IAU_2015',80411,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80416,'Thalassa (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80416','projected_crs','IAU_2015',80416,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80421,'Thalassa (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80421','projected_crs','IAU_2015',80421,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80426,'Thalassa (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80426','projected_crs','IAU_2015',80426,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80431,'Thalassa (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80431','projected_crs','IAU_2015',80431,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80436,'Thalassa (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80436','projected_crs','IAU_2015',80436,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80441,'Thalassa (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80441','projected_crs','IAU_2015',80441,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80446,'Thalassa (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80446','projected_crs','IAU_2015',80446,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80451,'Thalassa (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80451','projected_crs','IAU_2015',80451,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80456,'Thalassa (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80456','projected_crs','IAU_2015',80456,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80461,'Thalassa (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80461','projected_crs','IAU_2015',80461,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80466,'Thalassa (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80466','projected_crs','IAU_2015',80466,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80471,'Thalassa (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80471','projected_crs','IAU_2015',80471,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80476,'Thalassa (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80476','projected_crs','IAU_2015',80476,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80481,'Thalassa (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80481','projected_crs','IAU_2015',80481,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80486,'Thalassa (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80486','projected_crs','IAU_2015',80486,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80491,'Thalassa (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80401,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80491','projected_crs','IAU_2015',80491,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 805, 'Despina', 74000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80500,'Despina (2015) - Sphere',NULL,'IAU_2015',805,74000.000000,'EPSG','9001',NULL,74000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80500,'Despina (2015) - Sphere','','IAU_2015',80500,'IAU_2015',80500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80500','geodetic_datum','IAU_2015',80500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80500,'Despina (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80500','geodetic_crs','IAU_2015',80500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80510,'Despina (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80510','projected_crs','IAU_2015',80510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80515,'Despina (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80515','projected_crs','IAU_2015',80515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80520,'Despina (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80520','projected_crs','IAU_2015',80520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80525,'Despina (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80525','projected_crs','IAU_2015',80525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80530,'Despina (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80530','projected_crs','IAU_2015',80530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80535,'Despina (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80535','projected_crs','IAU_2015',80535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80540,'Despina (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80540','projected_crs','IAU_2015',80540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80545,'Despina (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80545','projected_crs','IAU_2015',80545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80550,'Despina (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80550','projected_crs','IAU_2015',80550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80555,'Despina (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80555','projected_crs','IAU_2015',80555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80560,'Despina (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80560','projected_crs','IAU_2015',80560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80565,'Despina (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80565','projected_crs','IAU_2015',80565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80570,'Despina (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80570','projected_crs','IAU_2015',80570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80575,'Despina (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80575','projected_crs','IAU_2015',80575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80580,'Despina (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80580','projected_crs','IAU_2015',80580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80585,'Despina (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80585','projected_crs','IAU_2015',80585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80590,'Despina (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80590','projected_crs','IAU_2015',80590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',80501,'Despina (2015)',NULL,'IAU_2015',805,74000.000000,'EPSG','9001',NULL,74000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80501,'Despina (2015)','','IAU_2015',80501,'IAU_2015',80500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80501','geodetic_datum','IAU_2015',80501,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80501,'Despina (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',80501,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80501','geodetic_crs','IAU_2015',80501,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80511,'Despina (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80511','projected_crs','IAU_2015',80511,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80516,'Despina (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80516','projected_crs','IAU_2015',80516,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80521,'Despina (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80521','projected_crs','IAU_2015',80521,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80526,'Despina (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80526','projected_crs','IAU_2015',80526,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80531,'Despina (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80531','projected_crs','IAU_2015',80531,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80536,'Despina (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80536','projected_crs','IAU_2015',80536,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80541,'Despina (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80541','projected_crs','IAU_2015',80541,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80546,'Despina (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80546','projected_crs','IAU_2015',80546,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80551,'Despina (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80551','projected_crs','IAU_2015',80551,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80556,'Despina (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80556','projected_crs','IAU_2015',80556,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80561,'Despina (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80561','projected_crs','IAU_2015',80561,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80566,'Despina (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80566','projected_crs','IAU_2015',80566,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80571,'Despina (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80571','projected_crs','IAU_2015',80571,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80576,'Despina (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80576','projected_crs','IAU_2015',80576,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80581,'Despina (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80581','projected_crs','IAU_2015',80581,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80586,'Despina (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80586','projected_crs','IAU_2015',80586,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80591,'Despina (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80501,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80591','projected_crs','IAU_2015',80591,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 806, 'Galatea', 79000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80600,'Galatea (2015) - Sphere',NULL,'IAU_2015',806,79000.000000,'EPSG','9001',NULL,79000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80600,'Galatea (2015) - Sphere','','IAU_2015',80600,'IAU_2015',80600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80600','geodetic_datum','IAU_2015',80600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80600,'Galatea (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80600','geodetic_crs','IAU_2015',80600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80610,'Galatea (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80610','projected_crs','IAU_2015',80610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80615,'Galatea (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80615','projected_crs','IAU_2015',80615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80620,'Galatea (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80620','projected_crs','IAU_2015',80620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80625,'Galatea (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80625','projected_crs','IAU_2015',80625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80630,'Galatea (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80630','projected_crs','IAU_2015',80630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80635,'Galatea (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80635','projected_crs','IAU_2015',80635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80640,'Galatea (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80640','projected_crs','IAU_2015',80640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80645,'Galatea (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80645','projected_crs','IAU_2015',80645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80650,'Galatea (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80650','projected_crs','IAU_2015',80650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80655,'Galatea (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80655','projected_crs','IAU_2015',80655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80660,'Galatea (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80660','projected_crs','IAU_2015',80660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80665,'Galatea (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80665','projected_crs','IAU_2015',80665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80670,'Galatea (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80670','projected_crs','IAU_2015',80670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80675,'Galatea (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80675','projected_crs','IAU_2015',80675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80680,'Galatea (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80680','projected_crs','IAU_2015',80680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80685,'Galatea (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80685','projected_crs','IAU_2015',80685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80690,'Galatea (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80690','projected_crs','IAU_2015',80690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',80601,'Galatea (2015)',NULL,'IAU_2015',806,79000.000000,'EPSG','9001',NULL,79000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80601,'Galatea (2015)','','IAU_2015',80601,'IAU_2015',80600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80601','geodetic_datum','IAU_2015',80601,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80601,'Galatea (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',80601,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80601','geodetic_crs','IAU_2015',80601,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80611,'Galatea (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80611','projected_crs','IAU_2015',80611,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80616,'Galatea (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80616','projected_crs','IAU_2015',80616,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80621,'Galatea (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80621','projected_crs','IAU_2015',80621,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80626,'Galatea (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80626','projected_crs','IAU_2015',80626,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80631,'Galatea (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80631','projected_crs','IAU_2015',80631,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80636,'Galatea (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80636','projected_crs','IAU_2015',80636,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80641,'Galatea (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80641','projected_crs','IAU_2015',80641,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80646,'Galatea (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80646','projected_crs','IAU_2015',80646,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80651,'Galatea (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80651','projected_crs','IAU_2015',80651,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80656,'Galatea (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80656','projected_crs','IAU_2015',80656,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80661,'Galatea (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80661','projected_crs','IAU_2015',80661,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80666,'Galatea (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80666','projected_crs','IAU_2015',80666,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80671,'Galatea (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80671','projected_crs','IAU_2015',80671,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80676,'Galatea (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80676','projected_crs','IAU_2015',80676,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80681,'Galatea (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80681','projected_crs','IAU_2015',80681,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80686,'Galatea (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80686','projected_crs','IAU_2015',80686,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80691,'Galatea (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80601,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80691','projected_crs','IAU_2015',80691,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 807, 'Larissa', 96000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80700, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80700,'Larissa (2015) - Sphere',NULL,'IAU_2015',807,96000.000000,'EPSG','9001',NULL,96000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80700,'Larissa (2015) - Sphere','','IAU_2015',80700,'IAU_2015',80700,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80700','geodetic_datum','IAU_2015',80700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80700,'Larissa (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80700,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80700','geodetic_crs','IAU_2015',80700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80710,'Larissa (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80710','projected_crs','IAU_2015',80710,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80715,'Larissa (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80715','projected_crs','IAU_2015',80715,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80720,'Larissa (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80720','projected_crs','IAU_2015',80720,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80725,'Larissa (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80725','projected_crs','IAU_2015',80725,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80730,'Larissa (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80730','projected_crs','IAU_2015',80730,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80735,'Larissa (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80735','projected_crs','IAU_2015',80735,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80740,'Larissa (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80740','projected_crs','IAU_2015',80740,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80745,'Larissa (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80745','projected_crs','IAU_2015',80745,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80750,'Larissa (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80750','projected_crs','IAU_2015',80750,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80755,'Larissa (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80755','projected_crs','IAU_2015',80755,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80760,'Larissa (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80760','projected_crs','IAU_2015',80760,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80765,'Larissa (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80765','projected_crs','IAU_2015',80765,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80770,'Larissa (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80770','projected_crs','IAU_2015',80770,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80775,'Larissa (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80775','projected_crs','IAU_2015',80775,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80780,'Larissa (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80780','projected_crs','IAU_2015',80780,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80785,'Larissa (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80785','projected_crs','IAU_2015',80785,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80790,'Larissa (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80700,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80790','projected_crs','IAU_2015',80790,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',80701,'Larissa (2015)',NULL,'IAU_2015',807,96000.000000,'EPSG','9001',NULL,89000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80701,'Larissa (2015)','','IAU_2015',80701,'IAU_2015',80700,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80701','geodetic_datum','IAU_2015',80701,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80701,'Larissa (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','PROJ','OGRAPHIC_NORTH_WEST','IAU_2015',80701,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80701','geodetic_crs','IAU_2015',80701,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80711,'Larissa (2015) / Ographic / Equirectangular, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80711','projected_crs','IAU_2015',80711,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80716,'Larissa (2015) / Ographic / Equirectangular, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80716','projected_crs','IAU_2015',80716,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80721,'Larissa (2015) / Ographic / Sinusoidal, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80721','projected_crs','IAU_2015',80721,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80726,'Larissa (2015) / Ographic / Sinusoidal, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80726','projected_crs','IAU_2015',80726,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80731,'Larissa (2015) / Ographic / North Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80731','projected_crs','IAU_2015',80731,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80736,'Larissa (2015) / Ographic / South Polar',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80736','projected_crs','IAU_2015',80736,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80741,'Larissa (2015) / Ographic / Mollweide, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80741','projected_crs','IAU_2015',80741,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80746,'Larissa (2015) / Ographic / Mollweide, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80746','projected_crs','IAU_2015',80746,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80751,'Larissa (2015) / Ographic / Robinson, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80751','projected_crs','IAU_2015',80751,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80756,'Larissa (2015) / Ographic / Robinson, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80756','projected_crs','IAU_2015',80756,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80761,'Larissa (2015) / Ographic / Transverse Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80761','projected_crs','IAU_2015',80761,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80766,'Larissa (2015) / Ographic / Orthographic, clon = 0',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80766','projected_crs','IAU_2015',80766,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80771,'Larissa (2015) / Ographic / Orthographic, clon = 180',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80771','projected_crs','IAU_2015',80771,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80776,'Larissa (2015) / Ographic / Lambert Conic Conformal',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80776','projected_crs','IAU_2015',80776,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80781,'Larissa (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80781','projected_crs','IAU_2015',80781,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80786,'Larissa (2015) / Ographic / Albers Equal Area',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80786','projected_crs','IAU_2015',80786,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80791,'Larissa (2015) / Ographic / Mercator',NULL,'PROJ','PROJECTED_WEST_NORTH','IAU_2015',80701,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80791','projected_crs','IAU_2015',80791,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80702,'Larissa (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',80701,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80702','geodetic_crs','IAU_2015',80702,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80712,'Larissa (2015) / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80712','projected_crs','IAU_2015',80712,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80717,'Larissa (2015) / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80717','projected_crs','IAU_2015',80717,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80722,'Larissa (2015) / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80722','projected_crs','IAU_2015',80722,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80727,'Larissa (2015) / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80727','projected_crs','IAU_2015',80727,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80732,'Larissa (2015) / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80732','projected_crs','IAU_2015',80732,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80737,'Larissa (2015) / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80737','projected_crs','IAU_2015',80737,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80742,'Larissa (2015) / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80742','projected_crs','IAU_2015',80742,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80747,'Larissa (2015) / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80747','projected_crs','IAU_2015',80747,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80752,'Larissa (2015) / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80752','projected_crs','IAU_2015',80752,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80757,'Larissa (2015) / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80757','projected_crs','IAU_2015',80757,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80762,'Larissa (2015) / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80762','projected_crs','IAU_2015',80762,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80767,'Larissa (2015) / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80767','projected_crs','IAU_2015',80767,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80772,'Larissa (2015) / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80772','projected_crs','IAU_2015',80772,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80777,'Larissa (2015) / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80777','projected_crs','IAU_2015',80777,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80782,'Larissa (2015) / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80782','projected_crs','IAU_2015',80782,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80787,'Larissa (2015) / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80787','projected_crs','IAU_2015',80787,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80792,'Larissa (2015) / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80702,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80792','projected_crs','IAU_2015',80792,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 808, 'Proteus', 208000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 80800, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',80800,'Proteus (2015) - Sphere',NULL,'IAU_2015',808,208000.000000,'EPSG','9001',NULL,208000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',80800,'Proteus (2015) - Sphere','','IAU_2015',80800,'IAU_2015',80800,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_80800','geodetic_datum','IAU_2015',80800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',80800,'Proteus (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',80800,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_80800','geodetic_crs','IAU_2015',80800,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80810,'Proteus (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80810','projected_crs','IAU_2015',80810,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80815,'Proteus (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80815','projected_crs','IAU_2015',80815,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80820,'Proteus (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80820','projected_crs','IAU_2015',80820,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80825,'Proteus (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80825','projected_crs','IAU_2015',80825,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80830,'Proteus (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80830','projected_crs','IAU_2015',80830,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80835,'Proteus (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80835','projected_crs','IAU_2015',80835,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80840,'Proteus (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80840','projected_crs','IAU_2015',80840,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80845,'Proteus (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80845','projected_crs','IAU_2015',80845,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80850,'Proteus (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80850','projected_crs','IAU_2015',80850,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80855,'Proteus (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80855','projected_crs','IAU_2015',80855,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80860,'Proteus (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80860','projected_crs','IAU_2015',80860,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80865,'Proteus (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80865','projected_crs','IAU_2015',80865,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80870,'Proteus (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80870','projected_crs','IAU_2015',80870,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80875,'Proteus (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80875','projected_crs','IAU_2015',80875,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80880,'Proteus (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80880','projected_crs','IAU_2015',80880,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80885,'Proteus (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80885','projected_crs','IAU_2015',80885,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',80890,'Proteus (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',80800,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_80890','projected_crs','IAU_2015',80890,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Halimede has it lacks all axis information -- Skip Psamathe has it lacks all axis information -- Skip Sao has it lacks all axis information -- Skip Laomedeia has it lacks all axis information -- Skip Neso has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 999, 'Pluto', 1188300.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 99900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',99900,'Pluto (2015) - Sphere',NULL,'IAU_2015',999,1188300.000000,'EPSG','9001',NULL,1188300.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',99900,'Pluto (2015) - Sphere','','IAU_2015',99900,'IAU_2015',99900,NULL,NULL,NULL,'Mean sub-Charon meridian: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_99900','geodetic_datum','IAU_2015',99900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',99900,'Pluto (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',99900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_99900','geodetic_crs','IAU_2015',99900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99910,'Pluto (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99910','projected_crs','IAU_2015',99910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99915,'Pluto (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99915','projected_crs','IAU_2015',99915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99920,'Pluto (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99920','projected_crs','IAU_2015',99920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99925,'Pluto (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99925','projected_crs','IAU_2015',99925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99930,'Pluto (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99930','projected_crs','IAU_2015',99930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99935,'Pluto (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99935','projected_crs','IAU_2015',99935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99940,'Pluto (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99940','projected_crs','IAU_2015',99940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99945,'Pluto (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99945','projected_crs','IAU_2015',99945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99950,'Pluto (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99950','projected_crs','IAU_2015',99950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99955,'Pluto (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99955','projected_crs','IAU_2015',99955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99960,'Pluto (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99960','projected_crs','IAU_2015',99960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99965,'Pluto (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99965','projected_crs','IAU_2015',99965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99970,'Pluto (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99970','projected_crs','IAU_2015',99970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99975,'Pluto (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99975','projected_crs','IAU_2015',99975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99980,'Pluto (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99980','projected_crs','IAU_2015',99980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99985,'Pluto (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99985','projected_crs','IAU_2015',99985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',99990,'Pluto (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',99900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_99990','projected_crs','IAU_2015',99990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 901, 'Charon', 606000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 90100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',90100,'Charon (2015) - Sphere',NULL,'IAU_2015',901,606000.000000,'EPSG','9001',NULL,606000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',90100,'Charon (2015) - Sphere','','IAU_2015',90100,'IAU_2015',90100,NULL,NULL,NULL,'Mean sub-Pluto meridian: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_90100','geodetic_datum','IAU_2015',90100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',90100,'Charon (2015) - Sphere / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',90100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_90100','geodetic_crs','IAU_2015',90100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90110,'Charon (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90110','projected_crs','IAU_2015',90110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90115,'Charon (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90115','projected_crs','IAU_2015',90115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90120,'Charon (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90120','projected_crs','IAU_2015',90120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90125,'Charon (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90125','projected_crs','IAU_2015',90125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90130,'Charon (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90130','projected_crs','IAU_2015',90130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90135,'Charon (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90135','projected_crs','IAU_2015',90135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90140,'Charon (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90140','projected_crs','IAU_2015',90140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90145,'Charon (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90145','projected_crs','IAU_2015',90145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90150,'Charon (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90150','projected_crs','IAU_2015',90150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90155,'Charon (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90155','projected_crs','IAU_2015',90155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90160,'Charon (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90160','projected_crs','IAU_2015',90160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90165,'Charon (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90165','projected_crs','IAU_2015',90165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90170,'Charon (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90170','projected_crs','IAU_2015',90170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90175,'Charon (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90175','projected_crs','IAU_2015',90175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90180,'Charon (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90180','projected_crs','IAU_2015',90180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90185,'Charon (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90185','projected_crs','IAU_2015',90185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',90190,'Charon (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',90100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_90190','projected_crs','IAU_2015',90190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Borrelly lacks value for semimajor and/or axisb and/or semiminor. Only consider its mean value. INSERT INTO celestial_body VALUES('IAU_2015', 1000005, 'Borrelly', 4220.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 100000500, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',100000500,'Borrelly (2015) - Sphere',NULL,'IAU_2015',1000005,4220.000000,'EPSG','9001',NULL,4220.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',100000500,'Borrelly (2015) - Sphere','','IAU_2015',100000500,'IAU_2015',100000500,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_100000500','geodetic_datum','IAU_2015',100000500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100000500,'Borrelly (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',100000500,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100000500','geodetic_crs','IAU_2015',100000500,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000510,'Borrelly (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000510','projected_crs','IAU_2015',100000510,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000515,'Borrelly (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000515','projected_crs','IAU_2015',100000515,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000520,'Borrelly (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000520','projected_crs','IAU_2015',100000520,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000525,'Borrelly (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000525','projected_crs','IAU_2015',100000525,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000530,'Borrelly (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000530','projected_crs','IAU_2015',100000530,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000535,'Borrelly (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000535','projected_crs','IAU_2015',100000535,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000540,'Borrelly (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000540','projected_crs','IAU_2015',100000540,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000545,'Borrelly (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000545','projected_crs','IAU_2015',100000545,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000550,'Borrelly (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000550','projected_crs','IAU_2015',100000550,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000555,'Borrelly (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000555','projected_crs','IAU_2015',100000555,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000560,'Borrelly (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000560','projected_crs','IAU_2015',100000560,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000565,'Borrelly (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000565','projected_crs','IAU_2015',100000565,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000570,'Borrelly (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000570','projected_crs','IAU_2015',100000570,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000575,'Borrelly (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000575','projected_crs','IAU_2015',100000575,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000580,'Borrelly (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000580','projected_crs','IAU_2015',100000580,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000585,'Borrelly (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000585','projected_crs','IAU_2015',100000585,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100000590,'Borrelly (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',100000500,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100000590','projected_crs','IAU_2015',100000590,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 1000012, 'Churyumov-Gerasimenko', 1650.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 100001200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',100001200,'Churyumov-Gerasimenko (2015) - Sphere',NULL,'IAU_2015',1000012,1650.000000,'EPSG','9001',NULL,1650.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',100001200,'Churyumov-Gerasimenko (2015) - Sphere','','IAU_2015',100001200,'IAU_2015',100001200,NULL,NULL,NULL,'a large boulder called Cheops: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_100001200','geodetic_datum','IAU_2015',100001200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100001200,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',100001200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100001200','geodetic_crs','IAU_2015',100001200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001210,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001210','projected_crs','IAU_2015',100001210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001215,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001215','projected_crs','IAU_2015',100001215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001220,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001220','projected_crs','IAU_2015',100001220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001225,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001225','projected_crs','IAU_2015',100001225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001230,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001230','projected_crs','IAU_2015',100001230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001235,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001235','projected_crs','IAU_2015',100001235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001240,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001240','projected_crs','IAU_2015',100001240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001245,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001245','projected_crs','IAU_2015',100001245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001250,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001250','projected_crs','IAU_2015',100001250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001255,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001255','projected_crs','IAU_2015',100001255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001260,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001260','projected_crs','IAU_2015',100001260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001265,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001265','projected_crs','IAU_2015',100001265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001270,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001270','projected_crs','IAU_2015',100001270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001275,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001275','projected_crs','IAU_2015',100001275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001280,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001280','projected_crs','IAU_2015',100001280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001285,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001285','projected_crs','IAU_2015',100001285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100001290,'Churyumov-Gerasimenko (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',100001200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100001290','projected_crs','IAU_2015',100001290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 1000036, 'Halley', 8000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 100003600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',100003600,'Halley (2015) - Sphere',NULL,'IAU_2015',1000036,8000.000000,'EPSG','9001',NULL,8000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',100003600,'Halley (2015) - Sphere','','IAU_2015',100003600,'IAU_2015',100003600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_100003600','geodetic_datum','IAU_2015',100003600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100003600,'Halley (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',100003600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100003600','geodetic_crs','IAU_2015',100003600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003610,'Halley (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003610','projected_crs','IAU_2015',100003610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003615,'Halley (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003615','projected_crs','IAU_2015',100003615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003620,'Halley (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003620','projected_crs','IAU_2015',100003620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003625,'Halley (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003625','projected_crs','IAU_2015',100003625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003630,'Halley (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003630','projected_crs','IAU_2015',100003630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003635,'Halley (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003635','projected_crs','IAU_2015',100003635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003640,'Halley (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003640','projected_crs','IAU_2015',100003640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003645,'Halley (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003645','projected_crs','IAU_2015',100003645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003650,'Halley (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003650','projected_crs','IAU_2015',100003650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003655,'Halley (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003655','projected_crs','IAU_2015',100003655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003660,'Halley (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003660','projected_crs','IAU_2015',100003660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003665,'Halley (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003665','projected_crs','IAU_2015',100003665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003670,'Halley (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003670','projected_crs','IAU_2015',100003670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003675,'Halley (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003675','projected_crs','IAU_2015',100003675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003680,'Halley (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003680','projected_crs','IAU_2015',100003680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003685,'Halley (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003685','projected_crs','IAU_2015',100003685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003690,'Halley (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',100003600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003690','projected_crs','IAU_2015',100003690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',100003601,'Halley (2015)',NULL,'IAU_2015',1000036,8000.000000,'EPSG','9001',NULL,4000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',100003601,'Halley (2015)','','IAU_2015',100003601,'IAU_2015',100003600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_100003601','geodetic_datum','IAU_2015',100003601,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100003601,'Halley (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',100003601,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100003601','geodetic_crs','IAU_2015',100003601,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003611,'Halley (2015) / Ographic / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003611','projected_crs','IAU_2015',100003611,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003616,'Halley (2015) / Ographic / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003616','projected_crs','IAU_2015',100003616,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003621,'Halley (2015) / Ographic / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003621','projected_crs','IAU_2015',100003621,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003626,'Halley (2015) / Ographic / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003626','projected_crs','IAU_2015',100003626,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003631,'Halley (2015) / Ographic / North Polar',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003631','projected_crs','IAU_2015',100003631,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003636,'Halley (2015) / Ographic / South Polar',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003636','projected_crs','IAU_2015',100003636,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003641,'Halley (2015) / Ographic / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003641','projected_crs','IAU_2015',100003641,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003646,'Halley (2015) / Ographic / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003646','projected_crs','IAU_2015',100003646,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003651,'Halley (2015) / Ographic / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003651','projected_crs','IAU_2015',100003651,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003656,'Halley (2015) / Ographic / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003656','projected_crs','IAU_2015',100003656,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003661,'Halley (2015) / Ographic / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003661','projected_crs','IAU_2015',100003661,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003666,'Halley (2015) / Ographic / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003666','projected_crs','IAU_2015',100003666,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003671,'Halley (2015) / Ographic / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003671','projected_crs','IAU_2015',100003671,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003676,'Halley (2015) / Ographic / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003676','projected_crs','IAU_2015',100003676,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003681,'Halley (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003681','projected_crs','IAU_2015',100003681,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003686,'Halley (2015) / Ographic / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003686','projected_crs','IAU_2015',100003686,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100003691,'Halley (2015) / Ographic / Mercator',NULL,'EPSG','4400','IAU_2015',100003601,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100003691','projected_crs','IAU_2015',100003691,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100003602,'Halley (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',100003601,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100003602','geodetic_crs','IAU_2015',100003602,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Hartley 2 has inconsistent values: semimajor < axisb or axis < semiminor. Only consider its mean value. INSERT INTO celestial_body VALUES('IAU_2015', 1000041, 'Hartley 2', 580.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 100004100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',100004100,'Hartley 2 (2015) - Sphere',NULL,'IAU_2015',1000041,580.000000,'EPSG','9001',NULL,580.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',100004100,'Hartley 2 (2015) - Sphere','','IAU_2015',100004100,'IAU_2015',100004100,NULL,NULL,NULL,'An isolated large mount on the waist near the large lobe: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_100004100','geodetic_datum','IAU_2015',100004100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100004100,'Hartley 2 (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',100004100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100004100','geodetic_crs','IAU_2015',100004100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004110,'Hartley 2 (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004110','projected_crs','IAU_2015',100004110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004115,'Hartley 2 (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004115','projected_crs','IAU_2015',100004115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004120,'Hartley 2 (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004120','projected_crs','IAU_2015',100004120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004125,'Hartley 2 (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004125','projected_crs','IAU_2015',100004125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004130,'Hartley 2 (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004130','projected_crs','IAU_2015',100004130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004135,'Hartley 2 (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004135','projected_crs','IAU_2015',100004135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004140,'Hartley 2 (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004140','projected_crs','IAU_2015',100004140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004145,'Hartley 2 (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004145','projected_crs','IAU_2015',100004145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004150,'Hartley 2 (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004150','projected_crs','IAU_2015',100004150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004155,'Hartley 2 (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004155','projected_crs','IAU_2015',100004155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004160,'Hartley 2 (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004160','projected_crs','IAU_2015',100004160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004165,'Hartley 2 (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004165','projected_crs','IAU_2015',100004165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004170,'Hartley 2 (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004170','projected_crs','IAU_2015',100004170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004175,'Hartley 2 (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004175','projected_crs','IAU_2015',100004175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004180,'Hartley 2 (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004180','projected_crs','IAU_2015',100004180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004185,'Hartley 2 (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004185','projected_crs','IAU_2015',100004185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100004190,'Hartley 2 (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',100004100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100004190','projected_crs','IAU_2015',100004190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Tempel 1 lacks value for semimajor and/or axisb and/or semiminor. Only consider its mean value. INSERT INTO celestial_body VALUES('IAU_2015', 1000093, 'Tempel 1', 3000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 100009300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',100009300,'Tempel 1 (2015) - Sphere',NULL,'IAU_2015',1000093,3000.000000,'EPSG','9001',NULL,3000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',100009300,'Tempel 1 (2015) - Sphere','','IAU_2015',100009300,'IAU_2015',100009300,NULL,NULL,NULL,'A 350 m diameter unnamed circular feature near the Deep Impactor impact site: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_100009300','geodetic_datum','IAU_2015',100009300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100009300,'Tempel 1 (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',100009300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100009300','geodetic_crs','IAU_2015',100009300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009310,'Tempel 1 (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009310','projected_crs','IAU_2015',100009310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009315,'Tempel 1 (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009315','projected_crs','IAU_2015',100009315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009320,'Tempel 1 (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009320','projected_crs','IAU_2015',100009320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009325,'Tempel 1 (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009325','projected_crs','IAU_2015',100009325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009330,'Tempel 1 (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009330','projected_crs','IAU_2015',100009330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009335,'Tempel 1 (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009335','projected_crs','IAU_2015',100009335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009340,'Tempel 1 (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009340','projected_crs','IAU_2015',100009340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009345,'Tempel 1 (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009345','projected_crs','IAU_2015',100009345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009350,'Tempel 1 (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009350','projected_crs','IAU_2015',100009350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009355,'Tempel 1 (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009355','projected_crs','IAU_2015',100009355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009360,'Tempel 1 (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009360','projected_crs','IAU_2015',100009360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009365,'Tempel 1 (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009365','projected_crs','IAU_2015',100009365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009370,'Tempel 1 (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009370','projected_crs','IAU_2015',100009370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009375,'Tempel 1 (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009375','projected_crs','IAU_2015',100009375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009380,'Tempel 1 (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009380','projected_crs','IAU_2015',100009380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009385,'Tempel 1 (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009385','projected_crs','IAU_2015',100009385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100009390,'Tempel 1 (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',100009300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100009390','projected_crs','IAU_2015',100009390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 1000107, 'Wild 2', 1975.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 100010700, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',100010700,'Wild 2 (2015) - Sphere',NULL,'IAU_2015',1000107,1975.000000,'EPSG','9001',NULL,1975.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',100010700,'Wild 2 (2015) - Sphere','','IAU_2015',100010700,'IAU_2015',100010700,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_100010700','geodetic_datum','IAU_2015',100010700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',100010700,'Wild 2 (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',100010700,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_100010700','geodetic_crs','IAU_2015',100010700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010710,'Wild 2 (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010710','projected_crs','IAU_2015',100010710,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010715,'Wild 2 (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010715','projected_crs','IAU_2015',100010715,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010720,'Wild 2 (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010720','projected_crs','IAU_2015',100010720,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010725,'Wild 2 (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010725','projected_crs','IAU_2015',100010725,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010730,'Wild 2 (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010730','projected_crs','IAU_2015',100010730,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010735,'Wild 2 (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010735','projected_crs','IAU_2015',100010735,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010740,'Wild 2 (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010740','projected_crs','IAU_2015',100010740,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010745,'Wild 2 (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010745','projected_crs','IAU_2015',100010745,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010750,'Wild 2 (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010750','projected_crs','IAU_2015',100010750,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010755,'Wild 2 (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010755','projected_crs','IAU_2015',100010755,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010760,'Wild 2 (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010760','projected_crs','IAU_2015',100010760,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010765,'Wild 2 (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010765','projected_crs','IAU_2015',100010765,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010770,'Wild 2 (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010770','projected_crs','IAU_2015',100010770,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010775,'Wild 2 (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010775','projected_crs','IAU_2015',100010775,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010780,'Wild 2 (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010780','projected_crs','IAU_2015',100010780,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010785,'Wild 2 (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010785','projected_crs','IAU_2015',100010785,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',100010790,'Wild 2 (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',100010700,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_100010790','projected_crs','IAU_2015',100010790,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 9511010, 'Gaspra', 6100.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 951101000, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',951101000,'Gaspra (2015) - Sphere',NULL,'IAU_2015',9511010,6100.000000,'EPSG','9001',NULL,6100.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',951101000,'Gaspra (2015) - Sphere','','IAU_2015',951101000,'IAU_2015',951101000,NULL,NULL,NULL,'Charax: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_951101000','geodetic_datum','IAU_2015',951101000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',951101000,'Gaspra (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',951101000,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_951101000','geodetic_crs','IAU_2015',951101000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101010,'Gaspra (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101010','projected_crs','IAU_2015',951101010,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101015,'Gaspra (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101015','projected_crs','IAU_2015',951101015,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101020,'Gaspra (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101020','projected_crs','IAU_2015',951101020,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101025,'Gaspra (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101025','projected_crs','IAU_2015',951101025,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101030,'Gaspra (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101030','projected_crs','IAU_2015',951101030,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101035,'Gaspra (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101035','projected_crs','IAU_2015',951101035,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101040,'Gaspra (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101040','projected_crs','IAU_2015',951101040,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101045,'Gaspra (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101045','projected_crs','IAU_2015',951101045,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101050,'Gaspra (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101050','projected_crs','IAU_2015',951101050,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101055,'Gaspra (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101055','projected_crs','IAU_2015',951101055,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101060,'Gaspra (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101060','projected_crs','IAU_2015',951101060,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101065,'Gaspra (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101065','projected_crs','IAU_2015',951101065,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101070,'Gaspra (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101070','projected_crs','IAU_2015',951101070,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101075,'Gaspra (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101075','projected_crs','IAU_2015',951101075,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101080,'Gaspra (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101080','projected_crs','IAU_2015',951101080,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101085,'Gaspra (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101085','projected_crs','IAU_2015',951101085,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',951101090,'Gaspra (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',951101000,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_951101090','projected_crs','IAU_2015',951101090,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2431010, 'Ida', 15650.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 243101000, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',243101000,'Ida (2015) - Sphere',NULL,'IAU_2015',2431010,15650.000000,'EPSG','9001',NULL,15650.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',243101000,'Ida (2015) - Sphere','','IAU_2015',243101000,'IAU_2015',243101000,NULL,NULL,NULL,'Afon: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_243101000','geodetic_datum','IAU_2015',243101000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',243101000,'Ida (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',243101000,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_243101000','geodetic_crs','IAU_2015',243101000,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101010,'Ida (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101010','projected_crs','IAU_2015',243101010,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101015,'Ida (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101015','projected_crs','IAU_2015',243101015,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101020,'Ida (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101020','projected_crs','IAU_2015',243101020,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101025,'Ida (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101025','projected_crs','IAU_2015',243101025,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101030,'Ida (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101030','projected_crs','IAU_2015',243101030,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101035,'Ida (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101035','projected_crs','IAU_2015',243101035,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101040,'Ida (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101040','projected_crs','IAU_2015',243101040,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101045,'Ida (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101045','projected_crs','IAU_2015',243101045,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101050,'Ida (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101050','projected_crs','IAU_2015',243101050,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101055,'Ida (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101055','projected_crs','IAU_2015',243101055,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101060,'Ida (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101060','projected_crs','IAU_2015',243101060,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101065,'Ida (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101065','projected_crs','IAU_2015',243101065,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101070,'Ida (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101070','projected_crs','IAU_2015',243101070,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101075,'Ida (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101075','projected_crs','IAU_2015',243101075,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101080,'Ida (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101080','projected_crs','IAU_2015',243101080,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101085,'Ida (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101085','projected_crs','IAU_2015',243101085,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',243101090,'Ida (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',243101000,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_243101090','projected_crs','IAU_2015',243101090,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Dactyl has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 2000001, 'Ceres', 487300.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200000100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200000100,'Ceres (2015) - Sphere',NULL,'IAU_2015',2000001,487300.000000,'EPSG','9001',NULL,487300.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200000100,'Ceres (2015) - Sphere','','IAU_2015',200000100,'IAU_2015',200000100,NULL,NULL,NULL,'Kait: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200000100','geodetic_datum','IAU_2015',200000100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200000100,'Ceres (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200000100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200000100','geodetic_crs','IAU_2015',200000100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000110,'Ceres (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000110','projected_crs','IAU_2015',200000110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000115,'Ceres (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000115','projected_crs','IAU_2015',200000115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000120,'Ceres (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000120','projected_crs','IAU_2015',200000120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000125,'Ceres (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000125','projected_crs','IAU_2015',200000125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000130,'Ceres (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000130','projected_crs','IAU_2015',200000130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000135,'Ceres (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000135','projected_crs','IAU_2015',200000135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000140,'Ceres (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000140','projected_crs','IAU_2015',200000140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000145,'Ceres (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000145','projected_crs','IAU_2015',200000145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000150,'Ceres (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000150','projected_crs','IAU_2015',200000150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000155,'Ceres (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000155','projected_crs','IAU_2015',200000155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000160,'Ceres (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000160','projected_crs','IAU_2015',200000160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000165,'Ceres (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000165','projected_crs','IAU_2015',200000165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000170,'Ceres (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000170','projected_crs','IAU_2015',200000170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000175,'Ceres (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000175','projected_crs','IAU_2015',200000175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000180,'Ceres (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000180','projected_crs','IAU_2015',200000180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000185,'Ceres (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000185','projected_crs','IAU_2015',200000185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000190,'Ceres (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200000100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000190','projected_crs','IAU_2015',200000190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',200000101,'Ceres (2015)',NULL,'IAU_2015',2000001,487300.000000,'EPSG','9001',NULL,446000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200000101,'Ceres (2015)','','IAU_2015',200000101,'IAU_2015',200000100,NULL,NULL,NULL,'Kait: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200000101','geodetic_datum','IAU_2015',200000101,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200000101,'Ceres (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200000101,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200000101','geodetic_crs','IAU_2015',200000101,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000111,'Ceres (2015) / Ographic / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000111','projected_crs','IAU_2015',200000111,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000116,'Ceres (2015) / Ographic / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000116','projected_crs','IAU_2015',200000116,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000121,'Ceres (2015) / Ographic / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000121','projected_crs','IAU_2015',200000121,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000126,'Ceres (2015) / Ographic / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000126','projected_crs','IAU_2015',200000126,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000131,'Ceres (2015) / Ographic / North Polar',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000131','projected_crs','IAU_2015',200000131,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000136,'Ceres (2015) / Ographic / South Polar',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000136','projected_crs','IAU_2015',200000136,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000141,'Ceres (2015) / Ographic / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000141','projected_crs','IAU_2015',200000141,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000146,'Ceres (2015) / Ographic / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000146','projected_crs','IAU_2015',200000146,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000151,'Ceres (2015) / Ographic / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000151','projected_crs','IAU_2015',200000151,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000156,'Ceres (2015) / Ographic / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000156','projected_crs','IAU_2015',200000156,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000161,'Ceres (2015) / Ographic / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000161','projected_crs','IAU_2015',200000161,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000166,'Ceres (2015) / Ographic / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000166','projected_crs','IAU_2015',200000166,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000171,'Ceres (2015) / Ographic / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000171','projected_crs','IAU_2015',200000171,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000176,'Ceres (2015) / Ographic / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000176','projected_crs','IAU_2015',200000176,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000181,'Ceres (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000181','projected_crs','IAU_2015',200000181,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000186,'Ceres (2015) / Ographic / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000186','projected_crs','IAU_2015',200000186,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000191,'Ceres (2015) / Ographic / Mercator',NULL,'EPSG','4400','IAU_2015',200000101,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000191','projected_crs','IAU_2015',200000191,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200000102,'Ceres (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',200000101,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200000102','geodetic_crs','IAU_2015',200000102,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip Pallas has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 2000004, 'Vesta', 255000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200000400, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200000400,'Vesta (2015) - Sphere',NULL,'IAU_2015',2000004,255000.000000,'EPSG','9001',NULL,255000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200000400,'Vesta (2015) - Sphere','','IAU_2015',200000400,'IAU_2015',200000400,NULL,NULL,NULL,'Claudia: 146.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200000400','geodetic_datum','IAU_2015',200000400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200000400,'Vesta (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200000400,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200000400','geodetic_crs','IAU_2015',200000400,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000410,'Vesta (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000410','projected_crs','IAU_2015',200000410,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000415,'Vesta (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000415','projected_crs','IAU_2015',200000415,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000420,'Vesta (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000420','projected_crs','IAU_2015',200000420,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000425,'Vesta (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000425','projected_crs','IAU_2015',200000425,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000430,'Vesta (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000430','projected_crs','IAU_2015',200000430,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000435,'Vesta (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000435','projected_crs','IAU_2015',200000435,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000440,'Vesta (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000440','projected_crs','IAU_2015',200000440,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000445,'Vesta (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000445','projected_crs','IAU_2015',200000445,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000450,'Vesta (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000450','projected_crs','IAU_2015',200000450,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000455,'Vesta (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000455','projected_crs','IAU_2015',200000455,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000460,'Vesta (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000460','projected_crs','IAU_2015',200000460,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000465,'Vesta (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000465','projected_crs','IAU_2015',200000465,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000470,'Vesta (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000470','projected_crs','IAU_2015',200000470,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000475,'Vesta (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000475','projected_crs','IAU_2015',200000475,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000480,'Vesta (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000480','projected_crs','IAU_2015',200000480,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000485,'Vesta (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000485','projected_crs','IAU_2015',200000485,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200000490,'Vesta (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200000400,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200000490','projected_crs','IAU_2015',200000490,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2000016, 'Psyche', 113000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200001600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200001600,'Psyche (2015) - Sphere',NULL,'IAU_2015',2000016,113000.000000,'EPSG','9001',NULL,113000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200001600,'Psyche (2015) - Sphere','','IAU_2015',200001600,'IAU_2015',200001600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200001600','geodetic_datum','IAU_2015',200001600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200001600,'Psyche (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200001600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200001600','geodetic_crs','IAU_2015',200001600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001610,'Psyche (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001610','projected_crs','IAU_2015',200001610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001615,'Psyche (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001615','projected_crs','IAU_2015',200001615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001620,'Psyche (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001620','projected_crs','IAU_2015',200001620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001625,'Psyche (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001625','projected_crs','IAU_2015',200001625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001630,'Psyche (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001630','projected_crs','IAU_2015',200001630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001635,'Psyche (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001635','projected_crs','IAU_2015',200001635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001640,'Psyche (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001640','projected_crs','IAU_2015',200001640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001645,'Psyche (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001645','projected_crs','IAU_2015',200001645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001650,'Psyche (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001650','projected_crs','IAU_2015',200001650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001655,'Psyche (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001655','projected_crs','IAU_2015',200001655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001660,'Psyche (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001660','projected_crs','IAU_2015',200001660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001665,'Psyche (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001665','projected_crs','IAU_2015',200001665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001670,'Psyche (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001670','projected_crs','IAU_2015',200001670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001675,'Psyche (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001675','projected_crs','IAU_2015',200001675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001680,'Psyche (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001680','projected_crs','IAU_2015',200001680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001685,'Psyche (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001685','projected_crs','IAU_2015',200001685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200001690,'Psyche (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200001600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200001690','projected_crs','IAU_2015',200001690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2000021, 'Lutetia', 52500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200002100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200002100,'Lutetia (2015) - Sphere',NULL,'IAU_2015',2000021,52500.000000,'EPSG','9001',NULL,52500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200002100,'Lutetia (2015) - Sphere','','IAU_2015',200002100,'IAU_2015',200002100,NULL,NULL,NULL,'Arbitrarily defined based on light curve information: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200002100','geodetic_datum','IAU_2015',200002100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200002100,'Lutetia (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200002100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200002100','geodetic_crs','IAU_2015',200002100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002110,'Lutetia (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002110','projected_crs','IAU_2015',200002110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002115,'Lutetia (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002115','projected_crs','IAU_2015',200002115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002120,'Lutetia (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002120','projected_crs','IAU_2015',200002120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002125,'Lutetia (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002125','projected_crs','IAU_2015',200002125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002130,'Lutetia (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002130','projected_crs','IAU_2015',200002130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002135,'Lutetia (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002135','projected_crs','IAU_2015',200002135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002140,'Lutetia (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002140','projected_crs','IAU_2015',200002140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002145,'Lutetia (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002145','projected_crs','IAU_2015',200002145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002150,'Lutetia (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002150','projected_crs','IAU_2015',200002150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002155,'Lutetia (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002155','projected_crs','IAU_2015',200002155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002160,'Lutetia (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002160','projected_crs','IAU_2015',200002160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002165,'Lutetia (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002165','projected_crs','IAU_2015',200002165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002170,'Lutetia (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002170','projected_crs','IAU_2015',200002170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002175,'Lutetia (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002175','projected_crs','IAU_2015',200002175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002180,'Lutetia (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002180','projected_crs','IAU_2015',200002180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002185,'Lutetia (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002185','projected_crs','IAU_2015',200002185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200002190,'Lutetia (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200002100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200002190','projected_crs','IAU_2015',200002190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2000052, '52 Europa', 157500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200005200, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200005200,'52 Europa (2015) - Sphere',NULL,'IAU_2015',2000052,157500.000000,'EPSG','9001',NULL,157500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200005200,'52 Europa (2015) - Sphere','','IAU_2015',200005200,'IAU_2015',200005200,NULL,NULL,NULL,'long axis that pointed toward the Earth on 2007 May28 8.3125 UT (light-time corrected): 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200005200','geodetic_datum','IAU_2015',200005200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200005200,'52 Europa (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200005200,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200005200','geodetic_crs','IAU_2015',200005200,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005210,'52 Europa (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005210','projected_crs','IAU_2015',200005210,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005215,'52 Europa (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005215','projected_crs','IAU_2015',200005215,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005220,'52 Europa (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005220','projected_crs','IAU_2015',200005220,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005225,'52 Europa (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005225','projected_crs','IAU_2015',200005225,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005230,'52 Europa (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005230','projected_crs','IAU_2015',200005230,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005235,'52 Europa (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005235','projected_crs','IAU_2015',200005235,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005240,'52 Europa (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005240','projected_crs','IAU_2015',200005240,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005245,'52 Europa (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005245','projected_crs','IAU_2015',200005245,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005250,'52 Europa (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005250','projected_crs','IAU_2015',200005250,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005255,'52 Europa (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005255','projected_crs','IAU_2015',200005255,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005260,'52 Europa (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005260','projected_crs','IAU_2015',200005260,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005265,'52 Europa (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005265','projected_crs','IAU_2015',200005265,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005270,'52 Europa (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005270','projected_crs','IAU_2015',200005270,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005275,'52 Europa (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005275','projected_crs','IAU_2015',200005275,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005280,'52 Europa (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005280','projected_crs','IAU_2015',200005280,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005285,'52 Europa (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005285','projected_crs','IAU_2015',200005285,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200005290,'52 Europa (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200005200,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200005290','projected_crs','IAU_2015',200005290,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2000216, 'Kleopatra', 65333.333333); INSERT INTO prime_meridian VALUES('IAU_2015', 200021600, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200021600,'Kleopatra (2015) - Sphere',NULL,'IAU_2015',2000216,65333.333333,'EPSG','9001',NULL,65333.333333,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200021600,'Kleopatra (2015) - Sphere','','IAU_2015',200021600,'IAU_2015',200021600,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200021600','geodetic_datum','IAU_2015',200021600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200021600,'Kleopatra (2015) - Sphere / Ocentric','Use R_m = (a+b+c)/3 as mean radius. Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200021600,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200021600','geodetic_crs','IAU_2015',200021600,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021610,'Kleopatra (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021610','projected_crs','IAU_2015',200021610,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021615,'Kleopatra (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021615','projected_crs','IAU_2015',200021615,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021620,'Kleopatra (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021620','projected_crs','IAU_2015',200021620,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021625,'Kleopatra (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021625','projected_crs','IAU_2015',200021625,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021630,'Kleopatra (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021630','projected_crs','IAU_2015',200021630,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021635,'Kleopatra (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021635','projected_crs','IAU_2015',200021635,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021640,'Kleopatra (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021640','projected_crs','IAU_2015',200021640,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021645,'Kleopatra (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021645','projected_crs','IAU_2015',200021645,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021650,'Kleopatra (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021650','projected_crs','IAU_2015',200021650,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021655,'Kleopatra (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021655','projected_crs','IAU_2015',200021655,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021660,'Kleopatra (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021660','projected_crs','IAU_2015',200021660,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021665,'Kleopatra (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021665','projected_crs','IAU_2015',200021665,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021670,'Kleopatra (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021670','projected_crs','IAU_2015',200021670,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021675,'Kleopatra (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021675','projected_crs','IAU_2015',200021675,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021680,'Kleopatra (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021680','projected_crs','IAU_2015',200021680,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021685,'Kleopatra (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021685','projected_crs','IAU_2015',200021685,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200021690,'Kleopatra (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200021600,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200021690','projected_crs','IAU_2015',200021690,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2000433, 'Eros', 17000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200043300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200043300,'Eros (2015) - Sphere',NULL,'IAU_2015',2000433,17000.000000,'EPSG','9001',NULL,17000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200043300,'Eros (2015) - Sphere','','IAU_2015',200043300,'IAU_2015',200043300,NULL,NULL,NULL,'unnamed crater: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200043300','geodetic_datum','IAU_2015',200043300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200043300,'Eros (2015) - Sphere / Ocentric','Use semi-major radius as sphere for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200043300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200043300','geodetic_crs','IAU_2015',200043300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043310,'Eros (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043310','projected_crs','IAU_2015',200043310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043315,'Eros (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043315','projected_crs','IAU_2015',200043315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043320,'Eros (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043320','projected_crs','IAU_2015',200043320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043325,'Eros (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043325','projected_crs','IAU_2015',200043325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043330,'Eros (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043330','projected_crs','IAU_2015',200043330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043335,'Eros (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043335','projected_crs','IAU_2015',200043335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043340,'Eros (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043340','projected_crs','IAU_2015',200043340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043345,'Eros (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043345','projected_crs','IAU_2015',200043345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043350,'Eros (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043350','projected_crs','IAU_2015',200043350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043355,'Eros (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043355','projected_crs','IAU_2015',200043355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043360,'Eros (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043360','projected_crs','IAU_2015',200043360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043365,'Eros (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043365','projected_crs','IAU_2015',200043365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043370,'Eros (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043370','projected_crs','IAU_2015',200043370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043375,'Eros (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043375','projected_crs','IAU_2015',200043375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043380,'Eros (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043380','projected_crs','IAU_2015',200043380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043385,'Eros (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043385','projected_crs','IAU_2015',200043385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043390,'Eros (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200043300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043390','projected_crs','IAU_2015',200043390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO ellipsoid VALUES('IAU_2015',200043301,'Eros (2015)',NULL,'IAU_2015',2000433,17000.000000,'EPSG','9001',NULL,5500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200043301,'Eros (2015)','','IAU_2015',200043301,'IAU_2015',200043300,NULL,NULL,NULL,'unnamed crater: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200043301','geodetic_datum','IAU_2015',200043301,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200043301,'Eros (2015) / Ographic','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200043301,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200043301','geodetic_crs','IAU_2015',200043301,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043311,'Eros (2015) / Ographic / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043311','projected_crs','IAU_2015',200043311,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043316,'Eros (2015) / Ographic / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043316','projected_crs','IAU_2015',200043316,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043321,'Eros (2015) / Ographic / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043321','projected_crs','IAU_2015',200043321,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043326,'Eros (2015) / Ographic / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043326','projected_crs','IAU_2015',200043326,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043331,'Eros (2015) / Ographic / North Polar',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043331','projected_crs','IAU_2015',200043331,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043336,'Eros (2015) / Ographic / South Polar',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043336','projected_crs','IAU_2015',200043336,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043341,'Eros (2015) / Ographic / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043341','projected_crs','IAU_2015',200043341,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043346,'Eros (2015) / Ographic / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043346','projected_crs','IAU_2015',200043346,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043351,'Eros (2015) / Ographic / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043351','projected_crs','IAU_2015',200043351,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043356,'Eros (2015) / Ographic / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043356','projected_crs','IAU_2015',200043356,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043361,'Eros (2015) / Ographic / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043361','projected_crs','IAU_2015',200043361,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043366,'Eros (2015) / Ographic / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043366','projected_crs','IAU_2015',200043366,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043371,'Eros (2015) / Ographic / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043371','projected_crs','IAU_2015',200043371,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043376,'Eros (2015) / Ographic / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043376','projected_crs','IAU_2015',200043376,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043381,'Eros (2015) / Ographic / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043381','projected_crs','IAU_2015',200043381,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043386,'Eros (2015) / Ographic / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043386','projected_crs','IAU_2015',200043386,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200043391,'Eros (2015) / Ographic / Mercator',NULL,'EPSG','4400','IAU_2015',200043301,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200043391','projected_crs','IAU_2015',200043391,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200043302,'Eros (2015) / Ocentric','Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','other','PROJ','OCENTRIC_LAT_LON','IAU_2015',200043301,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200043302','geodetic_crs','IAU_2015',200043302,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2000511, 'Davida', 150000.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200051100, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200051100,'Davida (2015) - Sphere',NULL,'IAU_2015',2000511,150000.000000,'EPSG','9001',NULL,150000.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200051100,'Davida (2015) - Sphere','','IAU_2015',200051100,'IAU_2015',200051100,NULL,NULL,NULL,'the long axis that points toward the Earth on 2002 December27 7.83 UT: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200051100','geodetic_datum','IAU_2015',200051100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200051100,'Davida (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200051100,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200051100','geodetic_crs','IAU_2015',200051100,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051110,'Davida (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051110','projected_crs','IAU_2015',200051110,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051115,'Davida (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051115','projected_crs','IAU_2015',200051115,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051120,'Davida (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051120','projected_crs','IAU_2015',200051120,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051125,'Davida (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051125','projected_crs','IAU_2015',200051125,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051130,'Davida (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051130','projected_crs','IAU_2015',200051130,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051135,'Davida (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051135','projected_crs','IAU_2015',200051135,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051140,'Davida (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051140','projected_crs','IAU_2015',200051140,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051145,'Davida (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051145','projected_crs','IAU_2015',200051145,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051150,'Davida (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051150','projected_crs','IAU_2015',200051150,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051155,'Davida (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051155','projected_crs','IAU_2015',200051155,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051160,'Davida (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051160','projected_crs','IAU_2015',200051160,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051165,'Davida (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051165','projected_crs','IAU_2015',200051165,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051170,'Davida (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051170','projected_crs','IAU_2015',200051170,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051175,'Davida (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051175','projected_crs','IAU_2015',200051175,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051180,'Davida (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051180','projected_crs','IAU_2015',200051180,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051185,'Davida (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051185','projected_crs','IAU_2015',200051185,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200051190,'Davida (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200051100,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200051190','projected_crs','IAU_2015',200051190,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2000253, 'Mathilde', 26500.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200025300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200025300,'Mathilde (2015) - Sphere',NULL,'IAU_2015',2000253,26500.000000,'EPSG','9001',NULL,26500.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200025300,'Mathilde (2015) - Sphere','','IAU_2015',200025300,'IAU_2015',200025300,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200025300','geodetic_datum','IAU_2015',200025300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200025300,'Mathilde (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200025300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200025300','geodetic_crs','IAU_2015',200025300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025310,'Mathilde (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025310','projected_crs','IAU_2015',200025310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025315,'Mathilde (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025315','projected_crs','IAU_2015',200025315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025320,'Mathilde (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025320','projected_crs','IAU_2015',200025320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025325,'Mathilde (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025325','projected_crs','IAU_2015',200025325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025330,'Mathilde (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025330','projected_crs','IAU_2015',200025330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025335,'Mathilde (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025335','projected_crs','IAU_2015',200025335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025340,'Mathilde (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025340','projected_crs','IAU_2015',200025340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025345,'Mathilde (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025345','projected_crs','IAU_2015',200025345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025350,'Mathilde (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025350','projected_crs','IAU_2015',200025350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025355,'Mathilde (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025355','projected_crs','IAU_2015',200025355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025360,'Mathilde (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025360','projected_crs','IAU_2015',200025360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025365,'Mathilde (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025365','projected_crs','IAU_2015',200025365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025370,'Mathilde (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025370','projected_crs','IAU_2015',200025370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025375,'Mathilde (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025375','projected_crs','IAU_2015',200025375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025380,'Mathilde (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025380','projected_crs','IAU_2015',200025380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025385,'Mathilde (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025385','projected_crs','IAU_2015',200025385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200025390,'Mathilde (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200025300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200025390','projected_crs','IAU_2015',200025390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2002867, 'Steins', 2700.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 200286700, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200286700,'Steins (2015) - Sphere',NULL,'IAU_2015',2002867,2700.000000,'EPSG','9001',NULL,2700.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200286700,'Steins (2015) - Sphere','','IAU_2015',200286700,'IAU_2015',200286700,NULL,NULL,NULL,'Topaz: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200286700','geodetic_datum','IAU_2015',200286700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200286700,'Steins (2015) - Sphere / Ocentric','Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200286700,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200286700','geodetic_crs','IAU_2015',200286700,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286710,'Steins (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286710','projected_crs','IAU_2015',200286710,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286715,'Steins (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286715','projected_crs','IAU_2015',200286715,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286720,'Steins (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286720','projected_crs','IAU_2015',200286720,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286725,'Steins (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286725','projected_crs','IAU_2015',200286725,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286730,'Steins (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286730','projected_crs','IAU_2015',200286730,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286735,'Steins (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286735','projected_crs','IAU_2015',200286735,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286740,'Steins (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286740','projected_crs','IAU_2015',200286740,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286745,'Steins (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286745','projected_crs','IAU_2015',200286745,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286750,'Steins (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286750','projected_crs','IAU_2015',200286750,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286755,'Steins (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286755','projected_crs','IAU_2015',200286755,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286760,'Steins (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286760','projected_crs','IAU_2015',200286760,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286765,'Steins (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286765','projected_crs','IAU_2015',200286765,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286770,'Steins (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286770','projected_crs','IAU_2015',200286770,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286775,'Steins (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286775','projected_crs','IAU_2015',200286775,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286780,'Steins (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286780','projected_crs','IAU_2015',200286780,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286785,'Steins (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286785','projected_crs','IAU_2015',200286785,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200286790,'Steins (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200286700,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200286790','projected_crs','IAU_2015',200286790,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); -- Skip 1992KD has it lacks all axis information -- Skip Braille has it lacks all axis information -- Skip Wilson-Harrington has it lacks all axis information INSERT INTO celestial_body VALUES('IAU_2015', 2004179, 'Toutatis', 1331.666667); INSERT INTO prime_meridian VALUES('IAU_2015', 200417900, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',200417900,'Toutatis (2015) - Sphere',NULL,'IAU_2015',2004179,1331.666667,'EPSG','9001',NULL,1331.666667,0); INSERT INTO geodetic_datum VALUES('IAU_2015',200417900,'Toutatis (2015) - Sphere','','IAU_2015',200417900,'IAU_2015',200417900,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_200417900','geodetic_datum','IAU_2015',200417900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',200417900,'Toutatis (2015) - Sphere / Ocentric','Use R_m = (a+b+c)/3 as mean radius. Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',200417900,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_200417900','geodetic_crs','IAU_2015',200417900,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417910,'Toutatis (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417910','projected_crs','IAU_2015',200417910,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417915,'Toutatis (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417915','projected_crs','IAU_2015',200417915,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417920,'Toutatis (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417920','projected_crs','IAU_2015',200417920,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417925,'Toutatis (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417925','projected_crs','IAU_2015',200417925,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417930,'Toutatis (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417930','projected_crs','IAU_2015',200417930,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417935,'Toutatis (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417935','projected_crs','IAU_2015',200417935,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417940,'Toutatis (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417940','projected_crs','IAU_2015',200417940,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417945,'Toutatis (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417945','projected_crs','IAU_2015',200417945,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417950,'Toutatis (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417950','projected_crs','IAU_2015',200417950,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417955,'Toutatis (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417955','projected_crs','IAU_2015',200417955,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417960,'Toutatis (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417960','projected_crs','IAU_2015',200417960,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417965,'Toutatis (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417965','projected_crs','IAU_2015',200417965,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417970,'Toutatis (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417970','projected_crs','IAU_2015',200417970,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417975,'Toutatis (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417975','projected_crs','IAU_2015',200417975,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417980,'Toutatis (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417980','projected_crs','IAU_2015',200417980,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417985,'Toutatis (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417985','projected_crs','IAU_2015',200417985,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',200417990,'Toutatis (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',200417900,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_200417990','projected_crs','IAU_2015',200417990,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO celestial_body VALUES('IAU_2015', 2025143, 'Itokawa', 173.000000); INSERT INTO prime_meridian VALUES('IAU_2015', 202514300, 'Reference Meridian', 0.0, 'EPSG', 9102, 0); INSERT INTO ellipsoid VALUES('IAU_2015',202514300,'Itokawa (2015) - Sphere',NULL,'IAU_2015',2025143,173.000000,'EPSG','9001',NULL,173.000000,0); INSERT INTO geodetic_datum VALUES('IAU_2015',202514300,'Itokawa (2015) - Sphere','','IAU_2015',202514300,'IAU_2015',202514300,NULL,NULL,NULL,'defined with W0=0: 0.0',NULL,0); INSERT INTO usage VALUES('IAU_2015','GD_202514300','geodetic_datum','IAU_2015',202514300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('IAU_2015',202514300,'Itokawa (2015) - Sphere / Ocentric','Use R_m = (a+b+c)/3 as mean radius. Use mean radius as sphere radius for interoperability. Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5','geographic 2D','EPSG','6422','IAU_2015',202514300,NULL,0); INSERT INTO usage VALUES('IAU_2015','GCRS_202514300','geodetic_crs','IAU_2015',202514300,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514310,'Itokawa (2015) - Sphere / Ocentric / Equirectangular, clon = 0',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',10,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514310','projected_crs','IAU_2015',202514310,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514315,'Itokawa (2015) - Sphere / Ocentric / Equirectangular, clon = 180',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',15,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514315','projected_crs','IAU_2015',202514315,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514320,'Itokawa (2015) - Sphere / Ocentric / Sinusoidal, clon = 0',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',20,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514320','projected_crs','IAU_2015',202514320,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514325,'Itokawa (2015) - Sphere / Ocentric / Sinusoidal, clon = 180',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',25,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514325','projected_crs','IAU_2015',202514325,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514330,'Itokawa (2015) - Sphere / Ocentric / North Polar',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',30,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514330','projected_crs','IAU_2015',202514330,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514335,'Itokawa (2015) - Sphere / Ocentric / South Polar',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',35,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514335','projected_crs','IAU_2015',202514335,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514340,'Itokawa (2015) - Sphere / Ocentric / Mollweide, clon = 0',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',40,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514340','projected_crs','IAU_2015',202514340,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514345,'Itokawa (2015) - Sphere / Ocentric / Mollweide, clon = 180',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',45,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514345','projected_crs','IAU_2015',202514345,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514350,'Itokawa (2015) - Sphere / Ocentric / Robinson, clon = 0',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',50,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514350','projected_crs','IAU_2015',202514350,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514355,'Itokawa (2015) - Sphere / Ocentric / Robinson, clon = 180',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',55,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514355','projected_crs','IAU_2015',202514355,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514360,'Itokawa (2015) - Sphere / Ocentric / Transverse Mercator',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',60,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514360','projected_crs','IAU_2015',202514360,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514365,'Itokawa (2015) - Sphere / Ocentric / Orthographic, clon = 0',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',65,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514365','projected_crs','IAU_2015',202514365,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514370,'Itokawa (2015) - Sphere / Ocentric / Orthographic, clon = 180',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',70,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514370','projected_crs','IAU_2015',202514370,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514375,'Itokawa (2015) - Sphere / Ocentric / Lambert Conic Conformal',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',75,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514375','projected_crs','IAU_2015',202514375,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514380,'Itokawa (2015) - Sphere / Ocentric / Lambert Azimuthal Equal Area',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',80,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514380','projected_crs','IAU_2015',202514380,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514385,'Itokawa (2015) - Sphere / Ocentric / Albers Equal Area',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',85,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514385','projected_crs','IAU_2015',202514385,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('IAU_2015',202514390,'Itokawa (2015) - Sphere / Ocentric / Mercator',NULL,'EPSG','4400','IAU_2015',202514300,'IAU_2015',90,NULL,0); INSERT INTO usage VALUES('IAU_2015','PCRS_202514390','projected_crs','IAU_2015',202514390,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); proj-9.6.0/data/sql/ignf.sql000664 001754 001755 00003171757 14764566077 015622 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db_create_ignf_from_xml.py from the http://librairies.ign.fr/geoportail/resources/IGNF.xml definition file. DO NOT EDIT ! INSERT INTO "metadata" VALUES('IGNF.SOURCE', 'https://raw.githubusercontent.com/rouault/proj-resources/master/IGNF.v3.1.0.xml'); INSERT INTO "metadata" VALUES('IGNF.VERSION', '3.1.0'); INSERT INTO "metadata" VALUES('IGNF.DATE', '2019-05-24'); INSERT INTO "ellipsoid" VALUES('IGNF','ELG032','SPHERE PICARD',NULL,'PROJ', 'EARTH', 6371598,'EPSG','9001',0,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA052','BORA_SAU 2001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5530001','CADASTRE 1953-1954 (ATOLL RAIVAVAE)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5680001','CADASTRE 1980 (ATOLL APATAKI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG7010001','CADASTRE 1997',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0100001','CAP BIENVENUE - PERROUD 1955',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0110001','CAP JULES - PERROUD 1955',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5060001','CLIPPERTON (MARINE 1967)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0130001','CROZET-POSSESSION 1963',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG4070101','CSG 1967 (IGN 1995)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA018','DANGER 1950 (SAINT-PIERRE-ET-MIQUELON)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5050001','EFATE-IGN 1957',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA034','EPF 1952 (ILE DES PETRELS)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG3790001','EUROPA (MHM 1954)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA122','EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA125','EVRF2007 (EUROPEAN VERTICAL REFERENCE FRAME 2007)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5690001','FG 1949 (ATOLL APATAKI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG3800001','GLORIEUSES (MHG 1977)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG4260001','GUADELOUPE - FORT MARIGOT',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA051','HUAHINE_SAU 2001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA026','IGN 1962 (KERGUELEN)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5630001','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA028','IGN 1966 (TAHITI)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5870001','IGN 1978 (ATOLL MURUROA) TUAMOTU',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA027','IGN 1984 (ILE UVEA OU WALLIS)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA014','IGN 1987 (MARTINIQUE)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA006','IGN 1988 (GUADELOUPE)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA008','IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA007','IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA012','IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA009','IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA033','IGN 1989 (REUNION)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA037','IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA053','IGN 2008 LD (GUADELOUPE / LA DESIRADE)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0300001','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5970001','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0140001','ILE AMSTERDAM 1963',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0150001','ILE SAINT-PAUL 1969',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG3810001','JUAN DE NOVA (MHM 1953)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0060001','KERGUELEN - K0 (IGN 1962)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5590001','MANGAREVA 1951',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA047','MAUPITI_SAU 2001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5880001','MGT 1947 (ATOLL RANGIROA OU RAIROA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5700001','MGT 1948 (ATOLL APATAKI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5780001','MGT 1949 (ATOLL HAO)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5730001','MGT 1950 (ATOLL FANGATAUFA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5850001','MGT 1951 (ATOLL MURUROA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5570001','MGT 1955 (TUBUAI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5550001','MHEFO 1955 (ATOLL RAPA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5600001','MHEFO 1955 (FATU HUKU)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5640001','MHEFO 1955 (MOHOTANI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5860001','MHOI 1962 (ATOLL MURUROA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5800001','MHPF 1958 (ATOLL HAO)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5840001','MHPF 1959 (ATOLL MURUROA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5890001','MHPF 1959 (ATOLL RANGIROA OU RAIROA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5920001','MHPF 1960 (ATOLL TIKEHAU)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5610001','MHPF 1960 (HIVA OA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5660001','MHPF 1963 (ATOLL AMANU)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5740001','MHPF 1964 (ATOLL FANGATAUFA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5750001','MHPF 1965-1 (ATOLL FANGATAUFA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5760001','MHPF 1965-2 (ATOLL FANGATAUFA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5900001','MHPF 1966-1968 (ATOLL RANGIROA OU RAIROA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5770001','MHPF 1966 (ATOLL FANGATAUFA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5540001','MHPF 1966 (ATOLL RAIVAVAE)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5790001','MHPF 1967 (ATOLLS HAO ET AMANU)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5620001','MHPF 1967 (HIVA OA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0270001','MHPF 1967 (MANGAREVA - AGAKAUITAI - AUKENA - MEKIRO) GAMBIER',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5910001','MHPF 1969 (ATOLLS TAKAROA ET TAKAPOTO)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5580001','MHPF 1969 (TUBUAI) ILES AUSTRALES',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0290001','MHPF70 (KAUEHI) TUAMOTU',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA029','MOOREA 1981 (MOOREA_SAU 2001)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0340001','MOP 1983 (MAUPITI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5720001','MOP84 (FANGATAUFA 1984)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5960001','MOP86 (APATAKI - RAPA - HAO) TUAMOTU',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0870001','MOP88 (TIKEHAU) TUAMOTU',NULL,'EPSG','7043','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0280001','MOP90 (TETIAROA) ILES DE LA SOCIETE',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5980001','MOP92 (ANAA) TUAMOTU',NULL,'EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA001','NGF-BOURDALOUE',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA003','NGF-IGN 1969',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA011','NGF-IGN 1978',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA002','NGF-LALLEMAND',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5650001','NGT 1949 (ATOLL AMANU)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA054','NGWF FUTUNA',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA041','NGWF WALLIS (MOP 1996)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA016','NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA010','NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA036','NIVELLEMENT GENERAL DE LIFOU (IGN 1991 LF)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA035','NIVELLEMENT GENERAL DE MARE (IGN 1991 MR)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA019','NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA109','NORMAL NULL (NIVELLEMENT GENERAL DU LUXEMBOURG NG-L)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG7080001','NOUMEA 74 (TRIANGULATION DE NOUMEA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5040001','NOUVELLE CALEDONIE - GOMEN TERME NORD',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0120001','PORT-MARTIN - PERROUD 1955',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA049','RAIATEA_SAU 2001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG3170201','REUNION - PITON DES NEIGES (IGN 1992)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG3170301','REUNION - PITON DES NEIGES (IGN 2008)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0310001','SAT84 (RURUTU) ILES AUSTRALES',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5560001','SEQ 1980 (ATOLL RAPA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5710001','SHM 1947-1950 (ATOLL FAKARAVA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5820001','SHM 1947-1950 (ATOLL HIKUERU)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5830001','SHM 1947-1950 (ATOLL MAKEMO)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5930001','SHM 1947-1950 (ATOLL TIKEHAU)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5670001','SHM 1947 (ATOLL ANAA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5810001','SHM 1949 (ATOLL HARAIKI)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5940001','SHM 1969 (ATOLL TUREIA)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA038','SHOM 1953 (MAYOTTE)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA042','SHOM 1977 (ILES GLORIEUSES - CANAL DE MOZAMBIQUE)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA020','SHOM 1978 (ILE DES PINS)',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG7100001','ST 84 ILE DES PINS',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG7090001','ST 87 OUVEA',NULL,'EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "vertical_datum" VALUES('IGNF','REA050','TAHAA_SAU 2001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG5250001','TANNA BLOC SUD',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG3820001','TROMELIN (SGM 1956)',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "geodetic_datum" VALUES('IGNF','REG0160001','WALLIS-UVEA MOP1976',NULL,'EPSG','7022','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "extent" VALUES('IGNF','1','AMANU (ARCHIPEL DES TUAMOTU)','AMANU (ARCHIPEL DES TUAMOTU)',-18,-17.58,-141,-140.58,0); INSERT INTO scope VALUES('IGNF','1','INTERMEDIAIRE POUR LE CALCUL',0); INSERT INTO "geodetic_crs" VALUES('IGNF','AMANU63','Amanu MHPF 1963 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5660001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMANU63_USAGE','geodetic_crs','IGNF','AMANU63','IGNF','1','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','AMANU49','Amanu NGT 1949 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5650001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMANU49_USAGE','geodetic_crs','IGNF','AMANU49','IGNF','1','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','2','ANAA (ARCHIPEL DES TUAMOTU)','ANAA (ARCHIPEL DES TUAMOTU)',-17.5,-17.32,-145.6,-145.37,0); INSERT INTO "geodetic_crs" VALUES('IGNF','ANAA92','Anaa (MOP92) cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5980001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ANAA92_USAGE','geodetic_crs','IGNF','ANAA92','IGNF','2','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','ANAA47','Anaa SHM 1947 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5670001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ANAA47_USAGE','geodetic_crs','IGNF','ANAA47','IGNF','2','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','3','APATAKI (ARCHIPEL DES TUAMOTU)','APATAKI (ARCHIPEL DES TUAMOTU)',-15.63,-15.29,-146.46,-146.18,0); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT80','Apataki Cadastre 1980 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5680001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT80_USAGE','geodetic_crs','IGNF','APAT80','IGNF','3','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','CADA80','Apataki Cadastre 1980 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5680001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CADA80_USAGE','geodetic_crs','IGNF','CADA80','IGNF','3','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT49','Apataki FG 1949 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5690001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT49_USAGE','geodetic_crs','IGNF','APAT49','IGNF','3','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT48','Apataki MGT 1948 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5700001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT48_USAGE','geodetic_crs','IGNF','APAT48','IGNF','3','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','4','FRANCE METROPOLITAINE (CORSE COMPRISE)','FRANCE METROPOLITAINE (CORSE COMPRISE)',41,52,-5.5,10,0); INSERT INTO "geodetic_crs" VALUES('IGNF','ATIG','ATIG cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6901',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ATIG_USAGE','geodetic_crs','IGNF','ATIG','IGNF','4','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','ATI','ATIG cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6901',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ATI_USAGE','geodetic_crs','IGNF','ATI','IGNF','4','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','5','ILE DE MAYOTTE','ILE DE MAYOTTE',-13.05,-12.5,44.95,45.4,0); INSERT INTO scope VALUES('IGNF','2','LOCALE, HISTORIQUE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','CAD97','Cadastre 1997 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG7010001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAD97_USAGE','geodetic_crs','IGNF','CAD97','IGNF','5','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','6','CAP BIENVENUE (TERRE ADELIE)','CAP BIENVENUE (TERRE ADELIE)',-67,-66.5,140.33,140.67,0); INSERT INTO "geodetic_crs" VALUES('IGNF','CAPBP55','Cap Bienvenue - Perroud 1955 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0100001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAPBP55_USAGE','geodetic_crs','IGNF','CAPBP55','IGNF','6','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','BIEN55','Cap Bienvenue - Perroud 1955 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0100001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'BIEN55_USAGE','geodetic_crs','IGNF','BIEN55','IGNF','6','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','7','CAP JULES (TERRE ADELIE)','CAP JULES (TERRE ADELIE)',-67,-66.5,140.75,141,0); INSERT INTO "geodetic_crs" VALUES('IGNF','CAPJP55','Cap Jules - Perroud 1955 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG0110001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAPJP55_USAGE','geodetic_crs','IGNF','CAPJP55','IGNF','7','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','JULES55','Cap Jules - Perroud 1955 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG0110001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'JULES55_USAGE','geodetic_crs','IGNF','JULES55','IGNF','7','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','8','ILE CLIPPERTON','ILE CLIPPERTON',10.17,10.5,-109.5,-109,0); INSERT INTO "geodetic_crs" VALUES('IGNF','CLIP67','Clipperton (Marine 1967) cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5060001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CLIP67_USAGE','geodetic_crs','IGNF','CLIP67','IGNF','8','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MAYO50','Combani cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6632',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAYO50_USAGE','geodetic_crs','IGNF','MAYO50','IGNF','5','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','9','ILES CROZET (ARCHIPEL)','ILES CROZET (ARCHIPEL)',-46.75,-45.75,50,52.5,0); INSERT INTO "geodetic_crs" VALUES('IGNF','CROZ63','Crozet-Possession 1963 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG0130001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CROZ63_USAGE','geodetic_crs','IGNF','CROZ63','IGNF','9','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','10','GUYANE FRANCAISE','GUYANE FRANCAISE',2.05,5.95,-54.95,-51.05,0); INSERT INTO "geodetic_crs" VALUES('IGNF','CSG67','CSG 1967 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6623',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CSG67_USAGE','geodetic_crs','IGNF','CSG67','IGNF','10','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','C67I95','CSG67 (IGN 1995) CARTESIENNES GEOCENTRIQUES',NULL,'geocentric','EPSG','6500','IGNF','REG4070101',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'C67I95_USAGE','geodetic_crs','IGNF','C67I95','IGNF','10','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','11','EUROPE DE L''OUEST ED50','EUROPE DE L''OUEST ED50',34,72,-10,32,0); INSERT INTO "geodetic_crs" VALUES('IGNF','ED50','ED50 CARTESIENNES GEOCENTRIQUES',NULL,'geocentric','EPSG','6500','EPSG','6230',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ED50_USAGE','geodetic_crs','IGNF','ED50','IGNF','11','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','12','EFATE (ARCHIPEL DU VANUATU)','EFATE (ARCHIPEL DU VANUATU)',-18,-17.25,168,168.67,0); INSERT INTO "geodetic_crs" VALUES('IGNF','EFATE57','Efate - IGN 1957 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5050001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EFATE57_USAGE','geodetic_crs','IGNF','EFATE57','IGNF','12','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','13','EIAO, HIVA OA, MOHOTANI (ARCHIPEL DES MARQUISES)','EIAO, HIVA OA, MOHOTANI (ARCHIPEL DES MARQUISES)',-10.05,-7.89,-140.74,-138.78,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MARQUI72','Eiao Hiva Oa Motohani cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5970001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARQUI72_USAGE','geodetic_crs','IGNF','MARQUI72','IGNF','13','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','14','EUROPE (ETRS89)','EUROPE (ETRS89)',27.5,71.5,-25,45.5,0); INSERT INTO scope VALUES('IGNF','3','CONTINENTALE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','ETRS89','ETRS89 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89_USAGE','geodetic_crs','IGNF','ETRS89','IGNF','14','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','15','ILE EUROPA','ILE EUROPA',-22.33,-22,40.25,40.5,0); INSERT INTO "geodetic_crs" VALUES('IGNF','EUROPA54','Europa MHM 1954 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG3790001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EUROPA54_USAGE','geodetic_crs','IGNF','EUROPA54','IGNF','15','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','16','FAKARAVA (ARCHIPEL DES TUAMOTU)','FAKARAVA (ARCHIPEL DES TUAMOTU)',-16.58,-16,-146,-145.25,0); INSERT INTO "geodetic_crs" VALUES('IGNF','FAKA50','Fakarava SHM 1947-1950 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG5710001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FAKA50_USAGE','geodetic_crs','IGNF','FAKA50','IGNF','16','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','17','FANGATAUFA (ARCHIPEL DES TUAMOTU)','FANGATAUFA (ARCHIPEL DES TUAMOTU)',-22.33,-22.15,-138.83,-138.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA50','Fangataufa MGT 1950 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5730001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA50_USAGE','geodetic_crs','IGNF','FANGA50','IGNF','17','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA64','Fangataufa MHPF 1964 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5740001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA64_USAGE','geodetic_crs','IGNF','FANGA64','IGNF','17','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA651','Fangataufa MHPF 1965-1 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5750001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA651_USAGE','geodetic_crs','IGNF','FANGA651','IGNF','17','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA652','Fangataufa MHPF 1965-2 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5760001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA652_USAGE','geodetic_crs','IGNF','FANGA652','IGNF','17','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA66','Fangataufa MHPF 1966 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5770001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA66_USAGE','geodetic_crs','IGNF','FANGA66','IGNF','17','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA84','Fangataufa MOP 1984 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5720001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA84_USAGE','geodetic_crs','IGNF','FANGA84','IGNF','17','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','18','FATU HUKU (ARCHIPEL DES MARQUISES)','FATU HUKU (ARCHIPEL DES MARQUISES)',-9.44,-9.43,-138.94,-138.92,0); INSERT INTO "geodetic_crs" VALUES('IGNF','FATU55','Fatu Huku MHEFO 1955 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5600001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FATU55_USAGE','geodetic_crs','IGNF','FATU55','IGNF','18','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MHEFO55F','Fatu Huku MHEFO 1955 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5600001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MHEFO55F_USAGE','geodetic_crs','IGNF','MHEFO55F','IGNF','18','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','19','MANGAREVA, AGAKAUITAI, AUKENA, MEKIRO (ILES GAMBIER)','MANGAREVA, AGAKAUITAI, AUKENA, MEKIRO (ILES GAMBIER)',-23.18,-23.07,-135.04,-134.89,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MHPF67','Gambier MHPF 1967 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0270001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MHPF67_USAGE','geodetic_crs','IGNF','MHPF67','IGNF','19','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','20','ILES GLORIEUSES','ILES GLORIEUSES',-11.62,-11.43,47.25,47.47,0); INSERT INTO "geodetic_crs" VALUES('IGNF','GLOR77MHG','Glorieuses (MHG 1977) cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG3800001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77MHG_USAGE','geodetic_crs','IGNF','GLOR77MHG','IGNF','20','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','GLOR77CAR','Glorieuses (MHG 1977) cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG3800001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77CAR_USAGE','geodetic_crs','IGNF','GLOR77CAR','IGNF','20','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','21','GRANDE TERRE (NOUVELLE-CALEDONIE)','GRANDE TERRE (NOUVELLE-CALEDONIE)',-22.75,-19.5,163.5,167.67,0); INSERT INTO "geodetic_crs" VALUES('IGNF','GTN51','GOMEN TERME NORD 1951 CARTESIENNES',NULL,'geocentric','EPSG','6500','IGNF','REG5040001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GTN51_USAGE','geodetic_crs','IGNF','GTN51','IGNF','21','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','NC51','GOMEN TERME NORD 1951 CARTESIENNES',NULL,'geocentric','EPSG','6500','IGNF','REG5040001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NC51_USAGE','geodetic_crs','IGNF','NC51','IGNF','21','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','IGN72','Grande Terre - Ile des Pins IGN 72 cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN72_USAGE','geodetic_crs','IGNF','IGN72','IGNF','21','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','22','ILES DE SAINT-MARTIN ET SAINT-BARTHELEMY (GUADELOUPE)','ILES DE SAINT-MARTIN ET SAINT-BARTHELEMY (GUADELOUPE)',17.82,18.18,-63.18,-62.25,0); INSERT INTO "geodetic_crs" VALUES('IGNF','GUADFM','Guadeloupe Fort Marigot cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG4260001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADFM_USAGE','geodetic_crs','IGNF','GUADFM','IGNF','22','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUADFM49','Guadeloupe Fort Marigot cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG4260001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADFM49_USAGE','geodetic_crs','IGNF','GUADFM49','IGNF','22','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','23','GRANDE-TERRE, BASSE-TERRE, MARIE-GALANTE, LA DESIRADE, LES SAINTES (GUADELOUPE)','GRANDE-TERRE, BASSE-TERRE, MARIE-GALANTE, LA DESIRADE, LES SAINTES (GUADELOUPE)',15.82,16.6,-61.83,-60.77,0); INSERT INTO "geodetic_crs" VALUES('IGNF','GUADANN','Guadeloupe Sainte-Anne cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6622',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADANN_USAGE','geodetic_crs','IGNF','GUADANN','IGNF','23','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUAD48','Guadeloupe Sainte-Anne cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6622',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUAD48_USAGE','geodetic_crs','IGNF','GUAD48','IGNF','23','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','24','HAO ET AMANU (ARCHIPEL DES TUAMOTU)','HAO ET AMANU (ARCHIPEL DES TUAMOTU)',-18.5,-17.58,-141.17,-140.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','HAOAM67','Hao Amanu MHPF 1967 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5790001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAOAM67_USAGE','geodetic_crs','IGNF','HAOAM67','IGNF','24','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','HAO67','Hao Amanu MHPF 1967 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5790001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAO67_USAGE','geodetic_crs','IGNF','HAO67','IGNF','24','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','25','HAO (ARCHIPEL DES TUAMOTU)','HAO (ARCHIPEL DES TUAMOTU)',-18.5,-18,-141.17,-140.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','HAO49','Hao MGT 1949 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5780001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAO49_USAGE','geodetic_crs','IGNF','HAO49','IGNF','25','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','HAO58','Hao MHPF 1958 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5800001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAO58_USAGE','geodetic_crs','IGNF','HAO58','IGNF','25','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','26','HARAIKI (ARCHIPEL DES TUAMOTU)','HARAIKI (ARCHIPEL DES TUAMOTU)',-17.58,-17.42,-143.58,-143.33,0); INSERT INTO "geodetic_crs" VALUES('IGNF','HARA49','Haraiki SHM 1949 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5810001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HARA49_USAGE','geodetic_crs','IGNF','HARA49','IGNF','26','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','27','HIKUERU (ARCHIPEL DES TUAMOTU)','HIKUERU (ARCHIPEL DES TUAMOTU)',-17.83,-17.42,-142.83,-142.42,0); INSERT INTO "geodetic_crs" VALUES('IGNF','HIKU50','Hikureu SHM 1947-1950 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG5820001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIKU50_USAGE','geodetic_crs','IGNF','HIKU50','IGNF','27','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','28','HIVA OA (ARCHIPEL DES MARQUISES)','HIVA OA (ARCHIPEL DES MARQUISES)',-9.87,-9.6,-139.25,-138.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','HIVA60','Hiva Oa MHPF 1960 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5610001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIVA60_USAGE','geodetic_crs','IGNF','HIVA60','IGNF','28','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','HIVA67','Hiva Oa MHPF 1967 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5620001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIVA67_USAGE','geodetic_crs','IGNF','HIVA67','IGNF','28','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','29','HIVA OA, TAHUATA, MOHOTANI (ARCHIPEL DES MARQUISES)','HIVA OA, TAHUATA, MOHOTANI (ARCHIPEL DES MARQUISES)',-9.88,-9.65,-139.2,-138.75,0); INSERT INTO "geodetic_crs" VALUES('IGNF','ATUO63','Hiva Oa Tahuata Motohani IGN 1963 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG5630001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ATUO63_USAGE','geodetic_crs','IGNF','ATUO63','IGNF','29','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','IGN63','Hiva Oa Tahuata Motohani IGN 1963 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG5630001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN63_USAGE','geodetic_crs','IGNF','IGN63','IGNF','29','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','30','ILE AMSTERDAM','ILE AMSTERDAM',-37.92,-37.75,77.45,77.63,0); INSERT INTO "geodetic_crs" VALUES('IGNF','AMST63','Ile Amsterdam 1963 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0140001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMST63_USAGE','geodetic_crs','IGNF','AMST63','IGNF','30','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','31','ILE DES PINS (NOUVELLE-CALEDONIE)','ILE DES PINS (NOUVELLE-CALEDONIE)',-22.8,-22.44,167.29,167.62,0); INSERT INTO "geodetic_crs" VALUES('IGNF','ST84','Ile des Pins ST84 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG7100001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ST84_USAGE','geodetic_crs','IGNF','ST84','IGNF','31','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','32','ILE JUAN DE NOVA','ILE JUAN DE NOVA',-17.17,-17,42.67,42.83,0); INSERT INTO "geodetic_crs" VALUES('IGNF','NOVA53','Juan de Nova MHM 1953 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG3810001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NOVA53_USAGE','geodetic_crs','IGNF','NOVA53','IGNF','32','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','33','KAUHEI (ARCHIPEL DES TUAMOTU)','KAUHEI (ARCHIPEL DES TUAMOTU)',-16,-15.67,-145.33,-145,0); INSERT INTO "geodetic_crs" VALUES('IGNF','KAUE70','Kauehi MHPF70 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0290001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KAUE70_USAGE','geodetic_crs','IGNF','KAUE70','IGNF','33','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','34','KERGUELEN','KERGUELEN',-50.5,-48,67,71,0); INSERT INTO "geodetic_crs" VALUES('IGNF','KERG62K0','Kerguelen - K0 IGN 1962 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG0060001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KERG62K0_USAGE','geodetic_crs','IGNF','KERG62K0','IGNF','34','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','KERG62CAR','Kerguelen - K0 IGN 1962 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG0060001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KERG62CAR_USAGE','geodetic_crs','IGNF','KERG62CAR','IGNF','34','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','35','LIFOU (ILES LOYAUTE)','LIFOU (ILES LOYAUTE)',-21.22,-20.65,166.96,167.51,0); INSERT INTO "geodetic_crs" VALUES('IGNF','LIFOU56','Lifou IGN 1956 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6633',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LIFOU56_USAGE','geodetic_crs','IGNF','LIFOU56','IGNF','35','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','36','MAKEMO (ARCHIPEL DES TUAMOTU)','MAKEMO (ARCHIPEL DES TUAMOTU)',-16.83,-16.33,-144,-143.33,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MAKE50','Makemo SHM 1947-1950 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG5830001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAKE50_USAGE','geodetic_crs','IGNF','MAKE50','IGNF','36','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','37','MANGAREVA (ILES GAMBIER)','MANGAREVA (ILES GAMBIER)',-23.45,-22.83,-135.33,-134.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MANGA51','Mangareva 1951 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5590001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MANGA51_USAGE','geodetic_crs','IGNF','MANGA51','IGNF','37','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','38','MARE (ILES LOYAUTE)','MARE (ILES LOYAUTE)',-21.69,-21.29,167.69,168.18,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MARE53','Mare IGN 1953 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6641',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARE53_USAGE','geodetic_crs','IGNF','MARE53','IGNF','38','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','39','MARTINIQUE','MARTINIQUE',14.27,15,-61.25,-60.75,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MARTFD','Martinique Fort-Desaix cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6625',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARTFD_USAGE','geodetic_crs','IGNF','MARTFD','IGNF','39','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MART38','Martinique Fort-Desaix cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6625',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MART38_USAGE','geodetic_crs','IGNF','MART38','IGNF','39','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','40','MAUPITI','MAUPITI',-16.75,-16.25,-152.5,-152,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MAUPITI','Maupiti MOP 1983 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0340001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAUPITI_USAGE','geodetic_crs','IGNF','MAUPITI','IGNF','40','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','41','MOHOTANI (ARCHIPEL DES MARQUISES)','MOHOTANI (ARCHIPEL DES MARQUISES)',-10.08,-9.83,-138.92,-138.67,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MOHO55','Mohotani MHEFO 1955 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5640001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOHO55_USAGE','geodetic_crs','IGNF','MOHO55','IGNF','41','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MHEFO55M','Mohotani MHEFO 1955 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5640001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MHEFO55M_USAGE','geodetic_crs','IGNF','MHEFO55M','IGNF','41','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','42','MOOREA (ARCHIPEL DE LA SOCIETE)','MOOREA (ARCHIPEL DE LA SOCIETE)',-17.75,-17.25,-150,-149.75,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MOOREA87','MOOREA 1987 CARTESIENNES GEOCENTRIQUES',NULL,'geocentric','EPSG','6500','EPSG','6691',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOOREA87_USAGE','geodetic_crs','IGNF','MOOREA87','IGNF','42','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','43','MURUROA (ARCHIPEL DES TUAMOTU)','MURUROA (ARCHIPEL DES TUAMOTU)',-22,-21.67,-139.17,-138.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU78','Mururoa IGN 1978 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5870001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU78_USAGE','geodetic_crs','IGNF','MURU78','IGNF','43','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU51','Mururoa MGT 1951 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5850001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU51_USAGE','geodetic_crs','IGNF','MURU51','IGNF','43','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU62','Mururoa MHOI 1962 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5860001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU62_USAGE','geodetic_crs','IGNF','MURU62','IGNF','43','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU59','Mururoa MHPF 1959 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5840001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU59_USAGE','geodetic_crs','IGNF','MURU59','IGNF','43','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','44','NOUMEA (NOUVELLE-CALEDONIE)','NOUMEA (NOUVELLE-CALEDONIE)',-22.36,-22.14,166.36,166.54,0); INSERT INTO "geodetic_crs" VALUES('IGNF','NEA74','Noumea 1974 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG7080001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NEA74_USAGE','geodetic_crs','IGNF','NEA74','IGNF','44','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','45','LUXEMBOURG (pays_cid : 137)','LUXEMBOURG (pays_cid : 137)',49.45,50.18,5.73,6.53,0); INSERT INTO scope VALUES('IGNF','4','NATIONALE A CARACTERE LEGAL',0); INSERT INTO "geodetic_crs" VALUES('IGNF','LURES','Nouvelle Triangulation Luxembourg cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6181',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LURES_USAGE','geodetic_crs','IGNF','LURES','IGNF','45','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','LUREF','Nouvelle Triangulation Luxembourg cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6181',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LUREF_USAGE','geodetic_crs','IGNF','LUREF','IGNF','45','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','NTF','NTF cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6275',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTF_USAGE','geodetic_crs','IGNF','NTF','IGNF','4','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','46','NUKU HIVA, UA HUKA ET UA POU (ARCHIPEL DES MARQUISES)','NUKU HIVA, UA HUKA ET UA POU (ARCHIPEL DES MARQUISES)',-9.5,-8.77,-140.27,-139.48,0); INSERT INTO "geodetic_crs" VALUES('IGNF','NUKU72','Nuku Hiva IGN 1972 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6630',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NUKU72_USAGE','geodetic_crs','IGNF','NUKU72','IGNF','46','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','47','OUVEA (ILES LOYAUTE)','OUVEA (ILES LOYAUTE)',-20.78,-20.25,166.11,166.71,0); INSERT INTO "geodetic_crs" VALUES('IGNF','OUVE72','Ouvea MHNC 1972 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'OUVE72_USAGE','geodetic_crs','IGNF','OUVE72','IGNF','47','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','OUVEA72','Ouvea MHNC 1972 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'OUVEA72_USAGE','geodetic_crs','IGNF','OUVEA72','IGNF','47','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','48','ILE DES PETRELS (TERRE ADELIE)','ILE DES PETRELS (TERRE ADELIE)',-68,-66.17,139.67,140.17,0); INSERT INTO "geodetic_crs" VALUES('IGNF','PETRELS72','Petrels IGN 1972 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6636',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PETRELS72_USAGE','geodetic_crs','IGNF','PETRELS72','IGNF','48','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','49','ARCHIPEL POINTE GEOLOGIE (TERRE ADELIE)','ARCHIPEL POINTE GEOLOGIE (TERRE ADELIE)',-66.72,-66.6,139.67,140.12,0); INSERT INTO "geodetic_crs" VALUES('IGNF','PGP50','Pointe Geologie Perroud 1950 cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6637',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PGP50_USAGE','geodetic_crs','IGNF','PGP50','IGNF','49','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','TERA50','Pointe Geologie Perroud 1950 cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6637',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TERA50_USAGE','geodetic_crs','IGNF','TERA50','IGNF','49','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','50','PORT-MARTIN (TERRE ADELIE)','PORT-MARTIN (TERRE ADELIE)',-67,-66.5,141,141.83,0); INSERT INTO "geodetic_crs" VALUES('IGNF','PMARP55','Port Martin Perroud 1955 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0120001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PMARP55_USAGE','geodetic_crs','IGNF','PMARP55','IGNF','50','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','PMAR55','Port Martin Perroud 1955 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0120001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PMAR55_USAGE','geodetic_crs','IGNF','PMAR55','IGNF','50','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','51','RAIATEA, TAHAA (ARCHIPEL DE LA SOCIETE)','RAIATEA, TAHAA (ARCHIPEL DE LA SOCIETE)',-17,-16.5,-151.67,-151.33,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHAA53','Raiatea Tahaa Bora Bora Huahine 1953 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0300001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53_USAGE','geodetic_crs','IGNF','TAHAA53','IGNF','51','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAIA53','Raiatea Tahaa Bora Bora Huahine 1953 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0300001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIA53_USAGE','geodetic_crs','IGNF','RAIA53','IGNF','51','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','52','RAIVAVAE (ARCHIPEL DES AUSTRALES)','RAIVAVAE (ARCHIPEL DES AUSTRALES)',-23.92,-23.75,-147.75,-147.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RAIV54','Raivavae cadastre 1953-1954 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5530001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIV54_USAGE','geodetic_crs','IGNF','RAIV54','IGNF','52','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAIV66','Raivavae MHPF 1966 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5540001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIV66_USAGE','geodetic_crs','IGNF','RAIV66','IGNF','52','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','53','RANGIROA (ARCHIPEL DES TUAMOTU)','RANGIROA (ARCHIPEL DES TUAMOTU)',-14.83,-14.42,-148,-147.15,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RANGI47','Rangiroa MGT 1947 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5880001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI47_USAGE','geodetic_crs','IGNF','RANGI47','IGNF','53','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','RANGI59','Rangiroa MHPF 1959 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5890001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI59_USAGE','geodetic_crs','IGNF','RANGI59','IGNF','53','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','RANGI68','Rangiroa MHPF 1966-1968 cartesiennes geocent.',NULL,'geocentric','EPSG','6500','IGNF','REG5900001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI68_USAGE','geodetic_crs','IGNF','RANGI68','IGNF','53','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','54','RAPA (ARCHIPEL DES AUSTRALES)','RAPA (ARCHIPEL DES AUSTRALES)',-27.75,-27.5,-144.5,-144.25,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RAPA55','Rapa MHEFO 1955 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5550001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAPA55_USAGE','geodetic_crs','IGNF','RAPA55','IGNF','54','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAPA80','Rapa SEQ 1980 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5560001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAPA80_USAGE','geodetic_crs','IGNF','RAPA80','IGNF','54','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','55','ILES WALLIS, FUTUNA ET ALOFI','ILES WALLIS, FUTUNA ET ALOFI',-14.39,-13.16,-179.98,-176.3,0); INSERT INTO scope VALUES('IGNF','5','LOCALE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','RGWF96','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 CARTESIENNES GEOCENTRIQUES',NULL,'geocentric','EPSG','6500','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96_USAGE','geodetic_crs','IGNF','RGWF96','IGNF','55','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','56','ILE DE LA REUNION','ILE DE LA REUNION',-21.42,-20.75,55.17,55.92,0); INSERT INTO "geodetic_crs" VALUES('IGNF','REUN49','Reunion Piton des Neiges 1949 cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6626',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'REUN49_USAGE','geodetic_crs','IGNF','REUN49','IGNF','56','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','REUN47','Reunion Piton des Neiges 1949 cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6626',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'REUN47_USAGE','geodetic_crs','IGNF','REUN47','IGNF','56','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','57','ANTILLES FRANCAISES','ANTILLES FRANCAISES',14.25,18.2,-63.2,-60.73,0); INSERT INTO scope VALUES('IGNF','6','NATIONALE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','RGAF09','RGAF09 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09_USAGE','geodetic_crs','IGNF','RGAF09','IGNF','57','IGNF','6'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGF93','RGF93 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93_USAGE','geodetic_crs','IGNF','RGF93','IGNF','4','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGFG95','RGFG95 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95_USAGE','geodetic_crs','IGNF','RGFG95','IGNF','10','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGM04','RGM04 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGM04_USAGE','geodetic_crs','IGNF','RGM04','IGNF','5','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','58','NOUVELLE-CALEDONIE','NOUVELLE-CALEDONIE',-26.65,-14.6,156.1,174.5,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RGNC','RGNC cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6645',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNC_USAGE','geodetic_crs','IGNF','RGNC','IGNF','58','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','59','POLYNESIE FRANCAISE','POLYNESIE FRANCAISE',-28,-7,-156,-134,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RGPF','RGPF cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6687',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPF_USAGE','geodetic_crs','IGNF','RGPF','IGNF','59','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGR92','RGR92 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGR92_USAGE','geodetic_crs','IGNF','RGR92','IGNF','56','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','60','SAINT-PIERRE-ET-MIQUELON','SAINT-PIERRE-ET-MIQUELON',46.7,47.2,-56.49,-56.1,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RGSPM06','RGSPM06 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06_USAGE','geodetic_crs','IGNF','RGSPM06','IGNF','60','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','61','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF)','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF)',-90,-11,39,142,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RGTAAF07','RGTAAF07 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAF07_USAGE','geodetic_crs','IGNF','RGTAAF07','IGNF','61','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RRAF','RRAF cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RRAF_USAGE','geodetic_crs','IGNF','RRAF','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84GUAD','RRAF cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GUAD_USAGE','geodetic_crs','IGNF','WGS84GUAD','IGNF','57','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','62','RURUTU (ARCHIPEL DES AUSTRALES)','RURUTU (ARCHIPEL DES AUSTRALES)',-22.58,-22.25,-151.5,-151.33,0); INSERT INTO "geodetic_crs" VALUES('IGNF','RUSAT84','Rurutu SAT84 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0310001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RUSAT84_USAGE','geodetic_crs','IGNF','RUSAT84','IGNF','62','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','SAT84','Rurutu SAT84 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0310001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'SAT84_USAGE','geodetic_crs','IGNF','SAT84','IGNF','62','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','63','ILE SAINT-PAUL','ILE SAINT-PAUL',-38.77,-38.67,77.48,77.58,0); INSERT INTO "geodetic_crs" VALUES('IGNF','STPL69','Saint-Paul 1969 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0150001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPL69_USAGE','geodetic_crs','IGNF','STPL69','IGNF','63','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','ST87','ST 87 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG7090001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ST87_USAGE','geodetic_crs','IGNF','ST87','IGNF','47','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','STPM50','St Pierre Miquelon 1950 cartesiennes',NULL,'geocentric','EPSG','6500','EPSG','6638',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPM50_USAGE','geodetic_crs','IGNF','STPM50','IGNF','60','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','64','TAHAA (ARCHIPEL DE LA SOCIETE)','TAHAA (ARCHIPEL DE LA SOCIETE)',-16.7,-16.53,-151.58,-151.38,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHAA','Tahaa 1951 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6629',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA_USAGE','geodetic_crs','IGNF','TAHAA','IGNF','64','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','65','TAHITI (ARCHIPEL DE LA SOCIETE)','TAHITI (ARCHIPEL DE LA SOCIETE)',-18,-17,-150,-149,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHI79','Tahiti IGN 1979 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6690',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI79_USAGE','geodetic_crs','IGNF','TAHI79','IGNF','65','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHI51','TAHITI TERME NORD CARTESIENNES GEOCENTRIQUES',NULL,'geocentric','EPSG','6500','EPSG','6628',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI51_USAGE','geodetic_crs','IGNF','TAHI51','IGNF','65','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','66','TAKAROA ET TAKAPOTO (ARCHIPEL DES TUAMOTU)','TAKAROA ET TAKAPOTO (ARCHIPEL DES TUAMOTU)',-14.75,-14.25,-145.33,-144.75,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TAKA69','Takaroa Takapoto SHM 1969 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG5910001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAKA69_USAGE','geodetic_crs','IGNF','TAKA69','IGNF','66','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','67','TANNA (ARCHIPEL DU VANUATU)','TANNA (ARCHIPEL DU VANUATU)',-19.67,-19.08,169.17,169.83,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TANNA','Tanna Bloc Sud 1957 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5250001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TANNA_USAGE','geodetic_crs','IGNF','TANNA','IGNF','67','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','68','TETIAROA (ARCHIPEL DE LA SOCIETE)','TETIAROA (ARCHIPEL DE LA SOCIETE)',-17.1,-17.02,-149.6,-149.53,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TETIA90','Tetiaroa (MOP90) cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0280001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TETIA90_USAGE','geodetic_crs','IGNF','TETIA90','IGNF','68','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MOP90','Tetiaroa (MOP90) cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG0280001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOP90_USAGE','geodetic_crs','IGNF','MOP90','IGNF','68','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','69','TIKEHAU (ARCHIPEL DES TUAMOTU)','TIKEHAU (ARCHIPEL DES TUAMOTU)',-15.2,-14.83,-148.5,-148,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TIKE60','Tikehau MHPF 1960 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5920001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE60_USAGE','geodetic_crs','IGNF','TIKE60','IGNF','69','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','TIKE50','Tikehau SHM 1947-1950 cartesiennes',NULL,'geocentric','EPSG','6500','IGNF','REG5930001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE50_USAGE','geodetic_crs','IGNF','TIKE50','IGNF','69','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','70','ILE TROMELIN','ILE TROMELIN',-15.9,-15.87,54.51,54.53,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TROM56','Tromelin SGM 1956 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG3820001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TROM56_USAGE','geodetic_crs','IGNF','TROM56','IGNF','70','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','71','APATAKI, RAPA et HAO','APATAKI, RAPA et HAO',-27.75,-15.293,-146.4644,-140.5833,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TUAM86','TUAMOTU (MOP86) CARTESIENNES',NULL,'geocentric','EPSG','6500','IGNF','REG5960001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUAM86_USAGE','geodetic_crs','IGNF','TUAM86','IGNF','71','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT86','TUAMOTU (MOP86) CARTESIENNES',NULL,'geocentric','EPSG','6500','IGNF','REG5960001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT86_USAGE','geodetic_crs','IGNF','APAT86','IGNF','71','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','72','TUBUAI (ARCHIPEL DES AUSTRALES)','TUBUAI (ARCHIPEL DES AUSTRALES)',-23.45,-23.25,-149.58,-149.33,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TUBU55','Tubuai MGT 1955 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5570001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUBU55_USAGE','geodetic_crs','IGNF','TUBU55','IGNF','72','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','TUBU69','Tubuai MHPF 1969 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5580001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUBU69_USAGE','geodetic_crs','IGNF','TUBU69','IGNF','72','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','73','TUREIA (ARCHIPEL DES TUAMOTU)','TUREIA (ARCHIPEL DES TUAMOTU)',-21,-20.67,-139.83,-138.83,0); INSERT INTO "geodetic_crs" VALUES('IGNF','TURI69','Tureia SHM 1969 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG5940001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TURI69_USAGE','geodetic_crs','IGNF','TURI69','IGNF','73','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','74','ILE D''UVEA (WALLIS)','ILE D''UVEA (WALLIS)',-13.42,-13.17,-176.3,-176.1,0); INSERT INTO "geodetic_crs" VALUES('IGNF','WALL76','Wallis - Uvea MOP 1976 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','IGNF','REG0160001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WALL76_USAGE','geodetic_crs','IGNF','WALL76','IGNF','74','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','WALL78','Wallis - Uvea Shom 1978 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6639',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WALL78_USAGE','geodetic_crs','IGNF','WALL78','IGNF','74','IGNF','1'); INSERT INTO "extent" VALUES('IGNF','75','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE',-90,90,-180,180,0); INSERT INTO scope VALUES('IGNF','7','MONDIALE, HISTORIQUE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS72','WGS72 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6322',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS72_USAGE','geodetic_crs','IGNF','WGS72','IGNF','75','IGNF','7'); INSERT INTO scope VALUES('IGNF','8','MONDIALE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84','WGS84 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84_USAGE','geodetic_crs','IGNF','WGS84','IGNF','75','IGNF','8'); INSERT INTO "geodetic_crs" VALUES('IGNF','RRAF91','WGS84 cartesiennes geocentriques',NULL,'geocentric','EPSG','6500','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RRAF91_USAGE','geodetic_crs','IGNF','RRAF91','IGNF','75','IGNF','8'); INSERT INTO "geodetic_crs" VALUES('IGNF','AMANU63G','Amanu (MHPF 1963) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5660001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMANU63G_USAGE','geodetic_crs','IGNF','AMANU63G','IGNF','1','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','AMANU49G','Amanu (NGT 1949) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5650001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMANU49G_USAGE','geodetic_crs','IGNF','AMANU49G','IGNF','1','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','AMST63G','Amsterdam 1963 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0140001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMST63G_USAGE','geodetic_crs','IGNF','AMST63G','IGNF','30','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ANAA92GEO','Anaa (MOP92) geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG5980001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ANAA92GEO_USAGE','geodetic_crs','IGNF','ANAA92GEO','IGNF','2','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ANAA92G','Anaa (MOP92) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5980001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ANAA92G_USAGE','geodetic_crs','IGNF','ANAA92G','IGNF','2','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ANAA47G','Anaa (SHM 1947) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5670001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ANAA47G_USAGE','geodetic_crs','IGNF','ANAA47G','IGNF','2','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT80G','Apataki (Cadastre 1980) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5680001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT80G_USAGE','geodetic_crs','IGNF','APAT80G','IGNF','3','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','CADA80G','Apataki (Cadastre 1980) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5680001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CADA80G_USAGE','geodetic_crs','IGNF','CADA80G','IGNF','3','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT49G','Apataki (FG 1949) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5690001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT49G_USAGE','geodetic_crs','IGNF','APAT49G','IGNF','3','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT48G','Apataki (MGT 1948) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5700001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT48G_USAGE','geodetic_crs','IGNF','APAT48G','IGNF','3','IGNF','2'); INSERT INTO scope VALUES('IGNF','9','NATIONALE, HISTORIQUE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','ATIGG','ATIG geographiques grades Paris (gr)',NULL,'geographic 2D','EPSG','6425','EPSG','6901',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ATIGG_USAGE','geodetic_crs','IGNF','ATIGG','IGNF','4','IGNF','9'); INSERT INTO "geodetic_crs" VALUES('IGNF','CAD97G','Cadastre 1997 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG7010001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAD97G_USAGE','geodetic_crs','IGNF','CAD97G','IGNF','5','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','CAD97GEO','Cadastre 1997 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG7010001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAD97GEO_USAGE','geodetic_crs','IGNF','CAD97GEO','IGNF','5','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','CAPBP55G','Cap Bienvenue geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0100001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAPBP55G_USAGE','geodetic_crs','IGNF','CAPBP55G','IGNF','6','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','BIEN55G','Cap Bienvenue geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0100001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'BIEN55G_USAGE','geodetic_crs','IGNF','BIEN55G','IGNF','6','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','CAPJP55G','Cap Jules geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0110001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAPJP55G_USAGE','geodetic_crs','IGNF','CAPJP55G','IGNF','7','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','JULES55G','Cap Jules geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0110001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'JULES55G_USAGE','geodetic_crs','IGNF','JULES55G','IGNF','7','IGNF','2'); INSERT INTO scope VALUES('IGNF','10','LOCALE A CARACTERE LEGAL',0); INSERT INTO "geodetic_crs" VALUES('IGNF','CLIP67G','Clipperton 1967 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5060001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CLIP67G_USAGE','geodetic_crs','IGNF','CLIP67G','IGNF','8','IGNF','10'); INSERT INTO "geodetic_crs" VALUES('IGNF','MAYO50GEO','Combani geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6632',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAYO50GEO_USAGE','geodetic_crs','IGNF','MAYO50GEO','IGNF','5','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MAYO50G','Combani triangulation IGN 1950 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6632',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAYO50G_USAGE','geodetic_crs','IGNF','MAYO50G','IGNF','5','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','CROZ63GEO','Crozet - Possession 1963 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG0130001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CROZ63GEO_USAGE','geodetic_crs','IGNF','CROZ63GEO','IGNF','9','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','CROZ63G','Crozet Possession 1963 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0130001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CROZ63G_USAGE','geodetic_crs','IGNF','CROZ63G','IGNF','9','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','CSG67G','CSG67 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6623',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CSG67G_USAGE','geodetic_crs','IGNF','CSG67G','IGNF','10','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','CSG67GEO','CSG67 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6623',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CSG67GEO_USAGE','geodetic_crs','IGNF','CSG67GEO','IGNF','10','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','C67IG95G','CSG67 (IGN 1995) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG4070101',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'C67IG95G_USAGE','geodetic_crs','IGNF','C67IG95G','IGNF','10','IGNF','2'); INSERT INTO scope VALUES('IGNF','11','CONTINENTALE, HISTORIQUE',0); INSERT INTO "geodetic_crs" VALUES('IGNF','ED50G','ED50 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6230',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ED50G_USAGE','geodetic_crs','IGNF','ED50G','IGNF','11','IGNF','11'); INSERT INTO "geodetic_crs" VALUES('IGNF','ED50GEO','ED50 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6230',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ED50GEO_USAGE','geodetic_crs','IGNF','ED50GEO','IGNF','11','IGNF','11'); INSERT INTO "geodetic_crs" VALUES('IGNF','EFATE57G','Efate geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5050001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EFATE57G_USAGE','geodetic_crs','IGNF','EFATE57G','IGNF','12','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','EFATE57GEO','Efate geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG5050001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EFATE57GEO_USAGE','geodetic_crs','IGNF','EFATE57GEO','IGNF','12','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ETRS89G','ETRS89 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89G_USAGE','geodetic_crs','IGNF','ETRS89G','IGNF','14','IGNF','3'); INSERT INTO "geodetic_crs" VALUES('IGNF','ETRS89GEO','ETRS89 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6258',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89GEO_USAGE','geodetic_crs','IGNF','ETRS89GEO','IGNF','14','IGNF','3'); INSERT INTO "geodetic_crs" VALUES('IGNF','EUROPA54G','Europa geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG3790001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EUROPA54G_USAGE','geodetic_crs','IGNF','EUROPA54G','IGNF','15','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FAKA50G','Fakarava (SHM 1947-1950) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5710001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FAKA50G_USAGE','geodetic_crs','IGNF','FAKA50G','IGNF','16','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA50G','Fangataufa (MGT 1950) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5730001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA50G_USAGE','geodetic_crs','IGNF','FANGA50G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA64G','Fangataufa (MHPF 1964) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5740001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA64G_USAGE','geodetic_crs','IGNF','FANGA64G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANG651G','Fangataufa (MHPF 1965-1) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5750001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANG651G_USAGE','geodetic_crs','IGNF','FANG651G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA651G','Fangataufa (MHPF 1965-1) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5750001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA651G_USAGE','geodetic_crs','IGNF','FANGA651G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANG652G','Fangataufa (MHPF 1965-2) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5760001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANG652G_USAGE','geodetic_crs','IGNF','FANG652G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA652G','Fangataufa (MHPF 1965-2) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5760001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA652G_USAGE','geodetic_crs','IGNF','FANGA652G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA66G','Fangataufa (MHPF 1966) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5770001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA66G_USAGE','geodetic_crs','IGNF','FANGA66G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FANGA84G','Fangataufa (MOP84) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5720001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA84G_USAGE','geodetic_crs','IGNF','FANGA84G','IGNF','17','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','FATU55FG','Fatu Huku (MHEFO 1955) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5600001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FATU55FG_USAGE','geodetic_crs','IGNF','FATU55FG','IGNF','18','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MHEFO55FG','Fatu Huku (MHEFO 1955) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5600001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MHEFO55FG_USAGE','geodetic_crs','IGNF','MHEFO55FG','IGNF','18','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','GLOR77G','Glorieuses geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG3800001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77G_USAGE','geodetic_crs','IGNF','GLOR77G','IGNF','20','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','GTN51G','Gomen Terme Nord 1951 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5040001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GTN51G_USAGE','geodetic_crs','IGNF','GTN51G','IGNF','21','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','NC51G','Gomen Terme Nord 1951 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5040001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NC51G_USAGE','geodetic_crs','IGNF','NC51G','IGNF','21','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUADFMG','Guadeloupe Fort-Marigot geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG4260001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADFMG_USAGE','geodetic_crs','IGNF','GUADFMG','IGNF','22','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUAFM48G','Guadeloupe Fort-Marigot geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG4260001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUAFM48G_USAGE','geodetic_crs','IGNF','GUAFM48G','IGNF','22','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUADFM49GEO','Guadeloupe Fort-Marigot geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG4260001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADFM49GEO_USAGE','geodetic_crs','IGNF','GUADFM49GEO','IGNF','22','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUADANNG','Guadeloupe Sainte-Anne geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6622',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNG_USAGE','geodetic_crs','IGNF','GUADANNG','IGNF','23','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUAD48G','Guadeloupe Sainte-Anne geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6622',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUAD48G_USAGE','geodetic_crs','IGNF','GUAD48G','IGNF','23','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','GUAD48GEO','Guadeloupe Sainte-Anne geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6622',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUAD48GEO_USAGE','geodetic_crs','IGNF','GUAD48GEO','IGNF','23','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','HAOAM67G','Hao Amanu (MHPF 1967) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5790001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAOAM67G_USAGE','geodetic_crs','IGNF','HAOAM67G','IGNF','24','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','HAOAMA67G','Hao Amanu (MHPF 1967) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5790001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAOAMA67G_USAGE','geodetic_crs','IGNF','HAOAMA67G','IGNF','24','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','HAO49G','Hao (MGT 1949) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5780001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAO49G_USAGE','geodetic_crs','IGNF','HAO49G','IGNF','25','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','HAO58G','Hao (MHPF 1958) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5800001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAO58G_USAGE','geodetic_crs','IGNF','HAO58G','IGNF','25','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','HARA49G','Haraiki (SHM 1949) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5810001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HARA49G_USAGE','geodetic_crs','IGNF','HARA49G','IGNF','26','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','HIKU50G','Hikueru (SHM 1947-1950) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5820001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIKU50G_USAGE','geodetic_crs','IGNF','HIKU50G','IGNF','27','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','HIVA60G','Hiva Oa (MHPF 1960) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5610001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIVA60G_USAGE','geodetic_crs','IGNF','HIVA60G','IGNF','28','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','HIVA67G','Hiva Oa (MHPF 1967) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5620001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIVA67G_USAGE','geodetic_crs','IGNF','HIVA67G','IGNF','28','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ATUO63G','IGN 1963 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5630001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ATUO63G_USAGE','geodetic_crs','IGNF','ATUO63G','IGNF','29','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','IGN63G','IGN 1963 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5630001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN63G_USAGE','geodetic_crs','IGNF','IGN63G','IGNF','29','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHAA53G','IGN53 Societe geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0300001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53G_USAGE','geodetic_crs','IGNF','TAHAA53G','IGNF','51','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAIA53G','IGN53 Societe geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0300001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIA53G_USAGE','geodetic_crs','IGNF','RAIA53G','IGNF','51','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','IGN63GEO','IGN63 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG5630001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN63GEO_USAGE','geodetic_crs','IGNF','IGN63GEO','IGNF','29','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','IGN72GEO','IGN72 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN72GEO_USAGE','geodetic_crs','IGNF','IGN72GEO','IGNF','21','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','IGN72G','IGN72 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN72G_USAGE','geodetic_crs','IGNF','IGN72G','IGNF','21','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','AMST63GEO','Ile Amsterdam 1963 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG0140001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMST63GEO_USAGE','geodetic_crs','IGNF','AMST63GEO','IGNF','30','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','STPL69GEO','Ile Saint-Paul 1969 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG0150001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPL69GEO_USAGE','geodetic_crs','IGNF','STPL69GEO','IGNF','63','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','NOVA53G','Juan de Nova geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG3810001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NOVA53G_USAGE','geodetic_crs','IGNF','NOVA53G','IGNF','32','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','KAUE70G','Kauehi (MHPF70) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0290001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KAUE70G_USAGE','geodetic_crs','IGNF','KAUE70G','IGNF','33','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','KERG62G','Kerguelen geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0060001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KERG62G_USAGE','geodetic_crs','IGNF','KERG62G','IGNF','34','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','KERG62GEO','Kerguelen - K0 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG0060001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KERG62GEO_USAGE','geodetic_crs','IGNF','KERG62GEO','IGNF','34','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','LNGPGG','Lambert Nord de Guerre grades Paris',NULL,'geographic 2D','EPSG','6425','EPSG','6902',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LNGPGG_USAGE','geodetic_crs','IGNF','LNGPGG','EPSG','1262','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','SYSLNG','Lambert Nord de Guerre grades Paris',NULL,'geographic 2D','EPSG','6425','EPSG','6902',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'SYSLNG_USAGE','geodetic_crs','IGNF','SYSLNG','EPSG','1262','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','LIFOU56G','Lifou IGN 56 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6633',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LIFOU56G_USAGE','geodetic_crs','IGNF','LIFOU56G','IGNF','35','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MAKE50G','Makemo (SHM 1947-1950) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5830001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAKE50G_USAGE','geodetic_crs','IGNF','MAKE50G','IGNF','36','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MANGA51G','Mangareva 1951 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5590001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MANGA51G_USAGE','geodetic_crs','IGNF','MANGA51G','IGNF','37','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MARE53G','Mare IGN53 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6641',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARE53G_USAGE','geodetic_crs','IGNF','MARE53G','IGNF','38','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MARQUI72G','Marquises (IGN72) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5970001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARQUI72G_USAGE','geodetic_crs','IGNF','MARQUI72G','IGNF','13','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MARTFDG','Martinique Fort-Desaix geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6625',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARTFDG_USAGE','geodetic_crs','IGNF','MARTFDG','IGNF','39','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MART38G','Martinique Fort-Desaix geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6625',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MART38G_USAGE','geodetic_crs','IGNF','MART38G','IGNF','39','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MART38GEO','Martinique Fort-Desaix geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6625',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MART38GEO_USAGE','geodetic_crs','IGNF','MART38GEO','IGNF','39','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MAUPITIG','Maupiti (MOP 1983) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0340001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAUPITIG_USAGE','geodetic_crs','IGNF','MAUPITIG','IGNF','40','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RANGI47GEO','MGT 1947 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG5880001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI47GEO_USAGE','geodetic_crs','IGNF','RANGI47GEO','IGNF','53','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MHPF67G','MHPF 1967 GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0270001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MHPF67G_USAGE','geodetic_crs','IGNF','MHPF67G','IGNF','19','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MOHO55G','Mohotani (MHEFO 1955) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5640001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOHO55G_USAGE','geodetic_crs','IGNF','MOHO55G','IGNF','41','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MHEFO55MG','Mohotani (MHEFO 1955) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5640001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MHEFO55MG_USAGE','geodetic_crs','IGNF','MHEFO55MG','IGNF','41','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MOOREA87GEO','Moorea 1987 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6691',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOOREA87GEO_USAGE','geodetic_crs','IGNF','MOOREA87GEO','IGNF','42','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MOOREA87G','Moorea 1987 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6691',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOOREA87G_USAGE','geodetic_crs','IGNF','MOOREA87G','IGNF','42','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','WALL78GEO','MOP 1978 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6639',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WALL78GEO_USAGE','geodetic_crs','IGNF','WALL78GEO','IGNF','74','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU78G','Mururoa (IGN 1978) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5870001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU78G_USAGE','geodetic_crs','IGNF','MURU78G','IGNF','43','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU51G','Mururoa (MGT 1951) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5850001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU51G_USAGE','geodetic_crs','IGNF','MURU51G','IGNF','43','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU62G','Mururoa (MHOI 1962) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5860001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU62G_USAGE','geodetic_crs','IGNF','MURU62G','IGNF','43','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MURU59G','Mururoa (MHPF 1959) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5840001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU59G_USAGE','geodetic_crs','IGNF','MURU59G','IGNF','43','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','NEA74G','NEA74 NOUMEA geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG7080001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NEA74G_USAGE','geodetic_crs','IGNF','NEA74G','IGNF','44','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','LURESG','NOUVELLE TRIANGULATION DU DUCHE DU LUXEMBOURG GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','EPSG','6181',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LURESG_USAGE','geodetic_crs','IGNF','LURESG','IGNF','45','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','LUXGEO','NOUVELLE TRIANGULATION DU DUCHE DU LUXEMBOURG GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','EPSG','6181',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LUXGEO_USAGE','geodetic_crs','IGNF','LUXGEO','IGNF','45','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','NTFG','NTF GEOGRAPHIQUES GREENWICH (DMS)',NULL,'geographic 2D','EPSG','6424','EPSG','6275',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFG_USAGE','geodetic_crs','IGNF','NTFG','IGNF','4','IGNF','9'); INSERT INTO "geodetic_crs" VALUES('IGNF','NTFPGRAD','NTF geographiques Paris (gr)',NULL,'geographic 2D','EPSG','6425','EPSG','6807',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFPGRAD_USAGE','geodetic_crs','IGNF','NTFPGRAD','IGNF','4','IGNF','9'); INSERT INTO "geodetic_crs" VALUES('IGNF','NTFP','NTF geographiques Paris (gr)',NULL,'geographic 2D','EPSG','6425','EPSG','6807',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFP_USAGE','geodetic_crs','IGNF','NTFP','IGNF','4','IGNF','9'); INSERT INTO "geodetic_crs" VALUES('IGNF','NUKU72GEO','Nuku Hiva 1972 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6630',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NUKU72GEO_USAGE','geodetic_crs','IGNF','NUKU72GEO','IGNF','46','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','NUKU72G','Nuku Hiva 1972 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6630',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NUKU72G_USAGE','geodetic_crs','IGNF','NUKU72G','IGNF','46','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','OUVE72G','Ouvea MHNC 1972 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'OUVE72G_USAGE','geodetic_crs','IGNF','OUVE72G','IGNF','47','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','OUVEA72G','Ouvea MHNC 1972 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6634',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'OUVEA72G_USAGE','geodetic_crs','IGNF','OUVEA72G','IGNF','47','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','PETRELS72G','Petrels geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6636',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PETRELS72G_USAGE','geodetic_crs','IGNF','PETRELS72G','IGNF','48','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','PDN92G','PITON DES NEIGES (1992) GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','IGNF','REG3170201',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PDN92G_USAGE','geodetic_crs','IGNF','PDN92G','IGNF','56','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','PDN08G','PITON DES NEIGES (2008) GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','IGNF','REG3170301',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PDN08G_USAGE','geodetic_crs','IGNF','PDN08G','IGNF','56','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TERA50GEO','Pointe Geologie Perroud 1950 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6637',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TERA50GEO_USAGE','geodetic_crs','IGNF','TERA50GEO','IGNF','49','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','PGP50G','Pointe Geologie Perroud 1950 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6637',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PGP50G_USAGE','geodetic_crs','IGNF','PGP50G','IGNF','49','IGNF','10'); INSERT INTO "geodetic_crs" VALUES('IGNF','TERA50G','Pointe Geologie Perroud 1950 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6637',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TERA50G_USAGE','geodetic_crs','IGNF','TERA50G','IGNF','49','IGNF','10'); INSERT INTO "geodetic_crs" VALUES('IGNF','PMARP55G','Port Martin geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0120001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PMARP55G_USAGE','geodetic_crs','IGNF','PMARP55G','IGNF','50','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','PMAR55G','Port Martin geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0120001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PMAR55G_USAGE','geodetic_crs','IGNF','PMAR55G','IGNF','50','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAIV54G','Raivavae (Cadastre) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5530001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIV54G_USAGE','geodetic_crs','IGNF','RAIV54G','IGNF','52','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAIV66G','Raivavae (MHPF 1966) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5540001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIV66G_USAGE','geodetic_crs','IGNF','RAIV66G','IGNF','52','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RANGI47G','Rangiroa (MGT 1947) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5880001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI47G_USAGE','geodetic_crs','IGNF','RANGI47G','IGNF','53','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RANGI59G','Rangiroa (MHPF 1959) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5890001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI59G_USAGE','geodetic_crs','IGNF','RANGI59G','IGNF','53','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RANGI68G','Rangiroa (MHPF 1966-68) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5900001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI68G_USAGE','geodetic_crs','IGNF','RANGI68G','IGNF','53','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAPA55G','Rapa (MHEFO 1955) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5550001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAPA55G_USAGE','geodetic_crs','IGNF','RAPA55G','IGNF','54','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RAPA80G','Rapa (SEQ 1980) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5560001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAPA80G_USAGE','geodetic_crs','IGNF','RAPA80G','IGNF','54','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGWF96GDD','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 GEOGRAPHIQUES (DD)',NULL,'geographic 2D','EPSG','6424','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96GDD_USAGE','geodetic_crs','IGNF','RGWF96GDD','IGNF','55','IGNF','5'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGWF96GEODD','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 GEOGRAPHIQUES (DD)',NULL,'geographic 3D','EPSG','6426','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96GEODD_USAGE','geodetic_crs','IGNF','RGWF96GEODD','IGNF','55','IGNF','5'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGWF96GEO','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 GEOGRAPHIQUES (DMS)',NULL,'geographic 3D','EPSG','6426','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96GEO_USAGE','geodetic_crs','IGNF','RGWF96GEO','IGNF','55','IGNF','5'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGWF96G','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','EPSG','1223',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96G_USAGE','geodetic_crs','IGNF','RGWF96G','IGNF','55','IGNF','5'); INSERT INTO "geodetic_crs" VALUES('IGNF','REUN47GEO','Reunion Piton des Neiges geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6626',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'REUN47GEO_USAGE','geodetic_crs','IGNF','REUN47GEO','IGNF','56','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','REUN49G','Reunion Piton des Neiges geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6626',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'REUN49G_USAGE','geodetic_crs','IGNF','REUN49G','IGNF','56','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','REUN47G','Reunion Piton des Neiges geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6626',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'REUN47G_USAGE','geodetic_crs','IGNF','REUN47G','IGNF','56','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGAF09GDD','RGAF09 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD_USAGE','geodetic_crs','IGNF','RGAF09GDD','IGNF','57','IGNF','6'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGAF09GEODD','RGAF09 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GEODD_USAGE','geodetic_crs','IGNF','RGAF09GEODD','IGNF','57','IGNF','6'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGAF09G','RGAF09 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G_USAGE','geodetic_crs','IGNF','RGAF09G','IGNF','57','IGNF','6'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGAF09GEO','RGAF09 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','1073',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GEO_USAGE','geodetic_crs','IGNF','RGAF09GEO','IGNF','57','IGNF','6'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGF93GEODD','RGF93 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93GEODD_USAGE','geodetic_crs','IGNF','RGF93GEODD','IGNF','4','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGF93GDD','RGF93 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93GDD_USAGE','geodetic_crs','IGNF','RGF93GDD','IGNF','4','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGF93GEO','RGF93 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93GEO_USAGE','geodetic_crs','IGNF','RGF93GEO','IGNF','4','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGF93G','RGF93 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6171',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93G_USAGE','geodetic_crs','IGNF','RGF93G','IGNF','4','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGFG95GDD','RGFG95 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95GDD_USAGE','geodetic_crs','IGNF','RGFG95GDD','IGNF','10','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGFG95GEODD','RGFG95 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95GEODD_USAGE','geodetic_crs','IGNF','RGFG95GEODD','IGNF','10','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGFG95G','RGFG95 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95G_USAGE','geodetic_crs','IGNF','RGFG95G','IGNF','10','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGFG95GEO','RGFG95 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6624',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95GEO_USAGE','geodetic_crs','IGNF','RGFG95GEO','IGNF','10','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGM04GEODD','RGM04 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGM04GEODD_USAGE','geodetic_crs','IGNF','RGM04GEODD','IGNF','5','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGM04GDD','RGM04 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGM04GDD_USAGE','geodetic_crs','IGNF','RGM04GDD','IGNF','5','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGM04G','RGM04 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGM04G_USAGE','geodetic_crs','IGNF','RGM04G','IGNF','5','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGM04GEO','RGM04 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','1036',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGM04GEO_USAGE','geodetic_crs','IGNF','RGM04GEO','IGNF','5','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGNCGEODD','RGNC GEOGRAPHIQUES (DD)',NULL,'geographic 3D','EPSG','6426','EPSG','6645',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCGEODD_USAGE','geodetic_crs','IGNF','RGNCGEODD','IGNF','58','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGNCG','RGNC geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6645',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCG_USAGE','geodetic_crs','IGNF','RGNCG','IGNF','58','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGNCGEO','RGNC geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6645',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCGEO_USAGE','geodetic_crs','IGNF','RGNCGEO','IGNF','58','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGPFGDD','RGPF geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','6687',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFGDD_USAGE','geodetic_crs','IGNF','RGPFGDD','IGNF','59','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGPFGEO','RGPF geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6687',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFGEO_USAGE','geodetic_crs','IGNF','RGPFGEO','IGNF','59','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGPFG','RGPF geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6687',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFG_USAGE','geodetic_crs','IGNF','RGPFG','IGNF','59','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGR92GEODD','RGR92 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGR92GEODD_USAGE','geodetic_crs','IGNF','RGR92GEODD','IGNF','56','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGR92GDD','RGR92 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGR92GDD_USAGE','geodetic_crs','IGNF','RGR92GDD','IGNF','56','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGR92GEO','RGR92 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGR92GEO_USAGE','geodetic_crs','IGNF','RGR92GEO','IGNF','56','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGR92G','RGR92 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6627',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGR92G_USAGE','geodetic_crs','IGNF','RGR92G','IGNF','56','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGSPM06GDD','RGSPM06 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06GDD_USAGE','geodetic_crs','IGNF','RGSPM06GDD','IGNF','60','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGSPM06GEODD','RGSPM06 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06GEODD_USAGE','geodetic_crs','IGNF','RGSPM06GEODD','IGNF','60','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGSPM06GEO','RGSPM06 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06GEO_USAGE','geodetic_crs','IGNF','RGSPM06GEO','IGNF','60','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGSPM06G','RGSPM06 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','1038',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06G_USAGE','geodetic_crs','IGNF','RGSPM06G','IGNF','60','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGTAAFGEODD','RGTAAF07 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFGEODD_USAGE','geodetic_crs','IGNF','RGTAAFGEODD','IGNF','61','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGTAAF07GDD','RGTAAF07 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAF07GDD_USAGE','geodetic_crs','IGNF','RGTAAF07GDD','IGNF','61','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGTAAFGEO','RGTAAF07 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFGEO_USAGE','geodetic_crs','IGNF','RGTAAFGEO','IGNF','61','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RGTAAF07G','RGTAAF07 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','1113',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAF07G_USAGE','geodetic_crs','IGNF','RGTAAF07G','IGNF','61','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RRAFGDD','RRAF geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RRAFGDD_USAGE','geodetic_crs','IGNF','RRAFGDD','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84MARTGDD','RRAF geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84MARTGDD_USAGE','geodetic_crs','IGNF','WGS84MARTGDD','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RRAFGEODD','RRAF geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RRAFGEODD_USAGE','geodetic_crs','IGNF','RRAFGEODD','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','W84MARTGEODD','RRAF geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'W84MARTGEODD_USAGE','geodetic_crs','IGNF','W84MARTGEODD','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RRAFGEO','RRAF geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RRAFGEO_USAGE','geodetic_crs','IGNF','RRAFGEO','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84GUADGEO','RRAF geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GUADGEO_USAGE','geodetic_crs','IGNF','WGS84GUADGEO','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RRAFG','RRAF geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG_USAGE','geodetic_crs','IGNF','RRAFG','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84MARTG','RRAF geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6640',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84MARTG_USAGE','geodetic_crs','IGNF','WGS84MARTG','IGNF','57','IGNF','4'); INSERT INTO "geodetic_crs" VALUES('IGNF','RUSAT84G','Rurutu (SAT84) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0310001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RUSAT84G_USAGE','geodetic_crs','IGNF','RUSAT84G','IGNF','62','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','SAT84G','Rurutu (SAT84) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0310001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'SAT84G_USAGE','geodetic_crs','IGNF','SAT84G','IGNF','62','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','STPL69G','Saint-Paul geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0150001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPL69G_USAGE','geodetic_crs','IGNF','STPL69G','IGNF','63','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ST84G','ST 84 ILE DES PINS geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG7100001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ST84G_USAGE','geodetic_crs','IGNF','ST84G','IGNF','31','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ST87G','ST 87 OUVEA geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG7090001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ST87G_USAGE','geodetic_crs','IGNF','ST87G','IGNF','47','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','ST87GEO','ST 87 OUVEA geographiques (dms)',NULL,'geographic 3D','EPSG','6426','IGNF','REG7090001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ST87GEO_USAGE','geodetic_crs','IGNF','ST87GEO','IGNF','47','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','STPM50GEO','St Pierre Miquelon 1950 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6638',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPM50GEO_USAGE','geodetic_crs','IGNF','STPM50GEO','IGNF','60','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','STPM50G','St Pierre Miquelon 1950 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6638',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPM50G_USAGE','geodetic_crs','IGNF','STPM50G','IGNF','60','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHAAG','Tahaa geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6629',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAAG_USAGE','geodetic_crs','IGNF','TAHAAG','IGNF','64','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHAAGEO','Tahaa geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6629',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAAGEO_USAGE','geodetic_crs','IGNF','TAHAAGEO','IGNF','64','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHI79GEO','Tahiti (IGN79) geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6690',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI79GEO_USAGE','geodetic_crs','IGNF','TAHI79GEO','IGNF','65','IGNF','1'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHI79G','Tahiti (IGN79) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6690',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI79G_USAGE','geodetic_crs','IGNF','TAHI79G','IGNF','65','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAHI51G','TAHITI TERME NORD GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','EPSG','6628',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI51G_USAGE','geodetic_crs','IGNF','TAHI51G','IGNF','65','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TAKA69G','Takaroa Takapoto (SHM 1969) geo. (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5910001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAKA69G_USAGE','geodetic_crs','IGNF','TAKA69G','IGNF','66','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TANNAG','Tanna geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5250001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TANNAG_USAGE','geodetic_crs','IGNF','TANNAG','IGNF','67','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TETIA90G','Tetiaroa (MOP90) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0280001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TETIA90G_USAGE','geodetic_crs','IGNF','TETIA90G','IGNF','68','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','MOP90G','Tetiaroa (MOP90) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0280001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOP90G_USAGE','geodetic_crs','IGNF','MOP90G','IGNF','68','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TIKE60G','Tikehau (MHPF 1960) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5920001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE60G_USAGE','geodetic_crs','IGNF','TIKE60G','IGNF','69','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TIKE88GEO','TIKEHAU (MOP88) GEOGRAPHIQUES (DMS)',NULL,'geographic 3D','EPSG','6426','IGNF','REG0870001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE88GEO_USAGE','geodetic_crs','IGNF','TIKE88GEO','IGNF','69','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TIKE88G','TIKEHAU (MOP88) GEOGRAPHIQUES (DMS)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0870001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE88G_USAGE','geodetic_crs','IGNF','TIKE88G','IGNF','69','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TIKE50G','Tikehau (SHM 1947-1950) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5930001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE50G_USAGE','geodetic_crs','IGNF','TIKE50G','IGNF','69','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TROM56G','Tromelin geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG3820001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TROM56G_USAGE','geodetic_crs','IGNF','TROM56G','IGNF','70','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TUAM86G','Tuamotu (MOP86) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5960001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUAM86G_USAGE','geodetic_crs','IGNF','TUAM86G','IGNF','71','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','APAT86G','Tuamotu (MOP86) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5960001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT86G_USAGE','geodetic_crs','IGNF','APAT86G','IGNF','71','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TUBU55G','Tubuai (MGT 1955) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5570001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUBU55G_USAGE','geodetic_crs','IGNF','TUBU55G','IGNF','72','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TUBU69G','Tubuai (MHPF 1969) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5580001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUBU69G_USAGE','geodetic_crs','IGNF','TUBU69G','IGNF','72','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','TURI69G','Tureia (SHM 1969) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG5940001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TURI69G_USAGE','geodetic_crs','IGNF','TURI69G','IGNF','73','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','WALL76G','Wallis (MOP 1976) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','IGNF','REG0160001',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WALL76G_USAGE','geodetic_crs','IGNF','WALL76G','IGNF','74','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','WALL78G','Wallis (MOP 1978) geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6639',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WALL78G_USAGE','geodetic_crs','IGNF','WALL78G','IGNF','74','IGNF','2'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS72G','WGS72 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6322',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS72G_USAGE','geodetic_crs','IGNF','WGS72G','IGNF','75','IGNF','7'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS72GEO','WGS72 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6322',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS72GEO_USAGE','geodetic_crs','IGNF','WGS72GEO','IGNF','75','IGNF','7'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84GEODD','WGS84 geographiques (dd)',NULL,'geographic 3D','EPSG','6426','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GEODD_USAGE','geodetic_crs','IGNF','WGS84GEODD','IGNF','75','IGNF','8'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84GDD','WGS84 geographiques (dd)',NULL,'geographic 2D','EPSG','6424','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GDD_USAGE','geodetic_crs','IGNF','WGS84GDD','IGNF','75','IGNF','8'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84GEO','WGS84 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GEO_USAGE','geodetic_crs','IGNF','WGS84GEO','IGNF','75','IGNF','8'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84RRAFGEO','WGS84 geographiques (dms)',NULL,'geographic 3D','EPSG','6426','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84RRAFGEO_USAGE','geodetic_crs','IGNF','WGS84RRAFGEO','IGNF','75','IGNF','8'); INSERT INTO "geodetic_crs" VALUES('IGNF','WGS84G','WGS84 geographiques (dms)',NULL,'geographic 2D','EPSG','6424','EPSG','6326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84G_USAGE','geodetic_crs','IGNF','WGS84G','IGNF','75','IGNF','8'); INSERT INTO "extent" VALUES('IGNF','76','BORA BORA (ARCHIPEL DE LA SOCIETE)','BORA BORA (ARCHIPEL DE LA SOCIETE)',-16.58,-16.42,-151.83,-151.67,0); INSERT INTO "vertical_crs" VALUES('IGNF','BORA01','BORA_SAU 2001',NULL,'EPSG','6499','IGNF','REA052',0); INSERT INTO "usage" VALUES('IGNF', 'BORA01_USAGE','vertical_crs','IGNF','BORA01','IGNF','76','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','STPM50_V','DANGER 1950 (SAINT-PIERRE-ET-MIQUELON)',NULL,'EPSG','6499','IGNF','REA018',0); INSERT INTO "usage" VALUES('IGNF', 'STPM50_V_USAGE','vertical_crs','IGNF','STPM50_V','IGNF','60','IGNF','4'); INSERT INTO "vertical_crs" VALUES('IGNF','PETRELS52','EPF 1952 (ILE DES PETRELS)',NULL,'EPSG','6499','IGNF','REA034',0); INSERT INTO "usage" VALUES('IGNF', 'PETRELS52_USAGE','vertical_crs','IGNF','PETRELS52','IGNF','48','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','77','EUROPE (RESEAU VERTICAL UNIFIE)','EUROPE (RESEAU VERTICAL UNIFIE)',36,71.2,-10,32,0); INSERT INTO "vertical_crs" VALUES('IGNF','EVRF2000','EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'EPSG','6499','IGNF','REA122',0); INSERT INTO "usage" VALUES('IGNF', 'EVRF2000_USAGE','vertical_crs','IGNF','EVRF2000','IGNF','77','IGNF','11'); INSERT INTO "vertical_crs" VALUES('IGNF','EVRF2007','EVRF2007 (EUROPEAN VERTICAL REFERENCE FRAME 2007)',NULL,'EPSG','6499','IGNF','REA125',0); INSERT INTO "usage" VALUES('IGNF', 'EVRF2007_USAGE','vertical_crs','IGNF','EVRF2007','IGNF','77','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','78','HUAHINE (ARCHIPEL DE LA SOCIETE)','HUAHINE (ARCHIPEL DE LA SOCIETE)',-17,-16.5,-151.5,-150.75,0); INSERT INTO "vertical_crs" VALUES('IGNF','HUAH01','HUAHINE_SAU 2001',NULL,'EPSG','6499','IGNF','REA051',0); INSERT INTO "usage" VALUES('IGNF', 'HUAH01_USAGE','vertical_crs','IGNF','HUAH01','IGNF','78','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','KERG62','IGN 1962 (KERGUELEN)',NULL,'EPSG','6499','IGNF','REA026',0); INSERT INTO "usage" VALUES('IGNF', 'KERG62_USAGE','vertical_crs','IGNF','KERG62','IGNF','34','IGNF','4'); INSERT INTO "vertical_crs" VALUES('IGNF','TAHITI66','IGN 1966 (TAHITI)',NULL,'EPSG','6499','IGNF','REA028',0); INSERT INTO "usage" VALUES('IGNF', 'TAHITI66_USAGE','vertical_crs','IGNF','TAHITI66','IGNF','65','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','UVEA84','IGN 1984 (ILE UVEA)',NULL,'EPSG','6499','IGNF','REA027',0); INSERT INTO "usage" VALUES('IGNF', 'UVEA84_USAGE','vertical_crs','IGNF','UVEA84','IGNF','74','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','MART87','IGN 1987 (MARTINIQUE)',NULL,'EPSG','6499','IGNF','REA014',0); INSERT INTO "usage" VALUES('IGNF', 'MART87_USAGE','vertical_crs','IGNF','MART87','IGNF','39','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','79','GRANDE-TERRE ET BASSE-TERRE (GUADELOUPE)','GRANDE-TERRE ET BASSE-TERRE (GUADELOUPE)',15.88,16.63,-61.85,-61.08,0); INSERT INTO "vertical_crs" VALUES('IGNF','GUAD88','IGN 1988 (GUADELOUPE)',NULL,'EPSG','6499','IGNF','REA006',0); INSERT INTO "usage" VALUES('IGNF', 'GUAD88_USAGE','vertical_crs','IGNF','GUAD88','IGNF','79','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','80','ILE DES SAINTES (GUADELOUPE)','ILE DES SAINTES (GUADELOUPE)',15.8,15.93,-61.7,-61.48,0); INSERT INTO "vertical_crs" VALUES('IGNF','GUAD88LS','IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'EPSG','6499','IGNF','REA008',0); INSERT INTO "usage" VALUES('IGNF', 'GUAD88LS_USAGE','vertical_crs','IGNF','GUAD88LS','IGNF','80','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','81','ILE DE MARIE-GALANTE (GUADELOUPE)','ILE DE MARIE-GALANTE (GUADELOUPE)',15.8,16.13,-61.4,-61.08,0); INSERT INTO "vertical_crs" VALUES('IGNF','GUAD88MG','IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'EPSG','6499','IGNF','REA007',0); INSERT INTO "usage" VALUES('IGNF', 'GUAD88MG_USAGE','vertical_crs','IGNF','GUAD88MG','IGNF','81','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','82','ILE DE SAINT-BARTHELEMY','ILE DE SAINT-BARTHELEMY',17.8,18.03,-63,-62.73,0); INSERT INTO "vertical_crs" VALUES('IGNF','GUAD88SB','IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'EPSG','6499','IGNF','REA012',0); INSERT INTO "usage" VALUES('IGNF', 'GUAD88SB_USAGE','vertical_crs','IGNF','GUAD88SB','IGNF','82','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','83','ILE DE SAINT-MARTIN (GUADELOUPE)','ILE DE SAINT-MARTIN (GUADELOUPE)',18,18.2,-63.2,-62.5,0); INSERT INTO "vertical_crs" VALUES('IGNF','GUAD88SM','IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'EPSG','6499','IGNF','REA009',0); INSERT INTO "usage" VALUES('IGNF', 'GUAD88SM_USAGE','vertical_crs','IGNF','GUAD88SM','IGNF','83','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','REUN89','IGN 1989 (REUNION)',NULL,'EPSG','6499','IGNF','REA033',0); INSERT INTO "usage" VALUES('IGNF', 'REUN89_USAGE','vertical_crs','IGNF','REUN89','IGNF','56','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','84','ILE DE LA DESIRADE (GUADELOUPE)','ILE DE LA DESIRADE (GUADELOUPE)',16.25,16.4,-61.2,-60.75,0); INSERT INTO "vertical_crs" VALUES('IGNF','GUAD92LD','IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'EPSG','6499','IGNF','REA037',0); INSERT INTO "usage" VALUES('IGNF', 'GUAD92LD_USAGE','vertical_crs','IGNF','GUAD92LD','IGNF','84','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','GUAD2008LD','IGN 2008 LD (GUADELOUPE / LA DESIRADE)',NULL,'EPSG','6499','IGNF','REA053',0); INSERT INTO "usage" VALUES('IGNF', 'GUAD2008LD_USAGE','vertical_crs','IGNF','GUAD2008LD','IGNF','84','IGNF','5'); INSERT INTO "vertical_crs" VALUES('IGNF','MAUPITI01','MAUPITI_SAU 2001',NULL,'EPSG','6499','IGNF','REA047',0); INSERT INTO "usage" VALUES('IGNF', 'MAUPITI01_USAGE','vertical_crs','IGNF','MAUPITI01','IGNF','40','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','MOOREA81','MOOREA 1981 (MOOREA_SAU 2001)',NULL,'EPSG','6499','IGNF','REA029',0); INSERT INTO "usage" VALUES('IGNF', 'MOOREA81_USAGE','vertical_crs','IGNF','MOOREA81','IGNF','42','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','85','FRANCE CONTINENTALE (CORSE EXCLUE)','FRANCE CONTINENTALE (CORSE EXCLUE)',42,51.5,-5.5,8.5,0); INSERT INTO "vertical_crs" VALUES('IGNF','BOURD','NGF-BOURDALOUE',NULL,'EPSG','6499','IGNF','REA001',0); INSERT INTO "usage" VALUES('IGNF', 'BOURD_USAGE','vertical_crs','IGNF','BOURD','IGNF','85','IGNF','9'); INSERT INTO "vertical_crs" VALUES('IGNF','IGN69','NGF-IGN 1969',NULL,'EPSG','6499','IGNF','REA003',0); INSERT INTO "usage" VALUES('IGNF', 'IGN69_USAGE','vertical_crs','IGNF','IGN69','IGNF','85','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','86','CORSE','CORSE',41.2,43.5,8,10,0); INSERT INTO "vertical_crs" VALUES('IGNF','IGN78C','NGF-IGN 1978',NULL,'EPSG','6499','IGNF','REA011',0); INSERT INTO "usage" VALUES('IGNF', 'IGN78C_USAGE','vertical_crs','IGNF','IGN78C','IGNF','86','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','NGF84','NGF-LALLEMAND',NULL,'EPSG','6499','IGNF','REA002',0); INSERT INTO "usage" VALUES('IGNF', 'NGF84_USAGE','vertical_crs','IGNF','NGF84','IGNF','85','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','87','ILES FUTUNA ET ALOFI (ILES HORN)','ILES FUTUNA ET ALOFI (ILES HORN)',-14.39,-14.23,-179.98,-178.2,0); INSERT INTO "vertical_crs" VALUES('IGNF','FUTUNA1997','NGWF ILES HORN (FUTUNA ET ALOFI)',NULL,'EPSG','6499','IGNF','REA054',0); INSERT INTO "usage" VALUES('IGNF', 'FUTUNA1997_USAGE','vertical_crs','IGNF','FUTUNA1997','IGNF','87','IGNF','5'); INSERT INTO "vertical_crs" VALUES('IGNF','WALLIS96','NGWF WALLIS (MOP 1996)',NULL,'EPSG','6499','IGNF','REA041',0); INSERT INTO "usage" VALUES('IGNF', 'WALLIS96_USAGE','vertical_crs','IGNF','WALLIS96','IGNF','74','IGNF','5'); INSERT INTO "vertical_crs" VALUES('IGNF','GUYA77','NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'EPSG','6499','IGNF','REA016',0); INSERT INTO "usage" VALUES('IGNF', 'GUYA77_USAGE','vertical_crs','IGNF','GUYA77','IGNF','10','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','NGC48','NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'EPSG','6499','IGNF','REA010',0); INSERT INTO "usage" VALUES('IGNF', 'NGC48_USAGE','vertical_crs','IGNF','NGC48','IGNF','86','IGNF','2'); INSERT INTO "vertical_crs" VALUES('IGNF','LIFOU91','NIVELLEMENT GENERAL DE LIFOU (IGN 1991 LF)',NULL,'EPSG','6499','IGNF','REA036',0); INSERT INTO "usage" VALUES('IGNF', 'LIFOU91_USAGE','vertical_crs','IGNF','LIFOU91','IGNF','35','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','MARE91','NIVELLEMENT GENERAL DE MARE (IGN 1991 MR)',NULL,'EPSG','6499','IGNF','REA035',0); INSERT INTO "usage" VALUES('IGNF', 'MARE91_USAGE','vertical_crs','IGNF','MARE91','IGNF','38','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','NCAL69','NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,'EPSG','6499','IGNF','REA019',0); INSERT INTO "usage" VALUES('IGNF', 'NCAL69_USAGE','vertical_crs','IGNF','NCAL69','IGNF','21','IGNF','4'); INSERT INTO "vertical_crs" VALUES('IGNF','NNLUX','NIVELLEMENT GENERAL DU LUXEMBOURG',NULL,'EPSG','6499','IGNF','REA109',0); INSERT INTO "usage" VALUES('IGNF', 'NNLUX_USAGE','vertical_crs','IGNF','NNLUX','IGNF','45','IGNF','4'); INSERT INTO "vertical_crs" VALUES('IGNF','RAIA01','RAIATEA_SAU 2001',NULL,'EPSG','6499','IGNF','REA049',0); INSERT INTO "usage" VALUES('IGNF', 'RAIA01_USAGE','vertical_crs','IGNF','RAIA01','IGNF','51','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','MAYO53','SHOM 1953 (MAYOTTE)',NULL,'EPSG','6499','IGNF','REA038',0); INSERT INTO "usage" VALUES('IGNF', 'MAYO53_USAGE','vertical_crs','IGNF','MAYO53','IGNF','5','IGNF','4'); INSERT INTO "vertical_crs" VALUES('IGNF','GLOR77','SHOM 1977 (ILES GLORIEUSES - CANAL DE MOZAMBIQUE)',NULL,'EPSG','6499','IGNF','REA042',0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77_USAGE','vertical_crs','IGNF','GLOR77','IGNF','20','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','PINS78','SHOM 1978 (ILE DES PINS)',NULL,'EPSG','6499','IGNF','REA020',0); INSERT INTO "usage" VALUES('IGNF', 'PINS78_USAGE','vertical_crs','IGNF','PINS78','IGNF','31','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','SHOM1984WF','SHOM 1984 (WALLIS ET FUTUNA)',NULL,'EPSG','6499','IGNF','REA027',0); INSERT INTO "usage" VALUES('IGNF', 'SHOM1984WF_USAGE','vertical_crs','IGNF','SHOM1984WF','IGNF','74','IGNF','10'); INSERT INTO "vertical_crs" VALUES('IGNF','TAHAA01','TAHAA_SAU 2001',NULL,'EPSG','6499','IGNF','REA050',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA01_USAGE','vertical_crs','IGNF','TAHAA01','IGNF','64','IGNF','10'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG682','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers NOUVELLE TRIANGULATION DE LA FRANCE (NTF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','IGNF','NTF',NULL,1286,83,-254,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG682_USAGE','helmert_transformation','IGNF','TSG682','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG682_ATI_NTF','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers NOUVELLE TRIANGULATION DE LA FRANCE (NTF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','IGNF','NTF',NULL,1286,83,-254,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG682_ATI_NTF_USAGE','helmert_transformation','IGNF','TSG682_ATI_NTF','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG682_ATIGG_TO_NTFG','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers NOUVELLE TRIANGULATION DE LA FRANCE (NTF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','IGNF','NTFG',NULL,1286,83,-254,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG682_ATIGG_TO_NTFG_USAGE','helmert_transformation','IGNF','TSG682_ATIGG_TO_NTFG','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG683','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers NOUVELLE TRIANGULATION DE LA FRANCE (NTF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','IGNF','NTF',NULL,1295,82,-263,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG683_USAGE','helmert_transformation','IGNF','TSG683','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG683_ATI_NTF','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers NOUVELLE TRIANGULATION DE LA FRANCE (NTF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','IGNF','NTF',NULL,1295,82,-263,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG683_ATI_NTF_USAGE','helmert_transformation','IGNF','TSG683_ATI_NTF','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG683_ATIGG_TO_NTFG','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers NOUVELLE TRIANGULATION DE LA FRANCE (NTF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','IGNF','NTFG',NULL,1295,82,-263,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG683_ATIGG_TO_NTFG_USAGE','helmert_transformation','IGNF','TSG683_ATIGG_TO_NTFG','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','IGNF','WGS84',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_USAGE','helmert_transformation','IGNF','TSG681','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATIG_RRAF91','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','IGNF','RRAF91',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATIG_RRAF91_USAGE','helmert_transformation','IGNF','TSG681_ATIG_RRAF91','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATIG_4978','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','EPSG','4978',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATIG_4978_USAGE','helmert_transformation','IGNF','TSG681_ATIG_4978','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATI_WGS84','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','IGNF','WGS84',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATI_WGS84_USAGE','helmert_transformation','IGNF','TSG681_ATI_WGS84','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATI_RRAF91','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','IGNF','RRAF91',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATI_RRAF91_USAGE','helmert_transformation','IGNF','TSG681_ATI_RRAF91','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATI_4978','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','EPSG','4978',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATI_4978_USAGE','helmert_transformation','IGNF','TSG681_ATI_4978','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATIGG_TO_WGS84GDD','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','IGNF','WGS84GDD',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATIGG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG681_ATIGG_TO_WGS84GDD','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATIGG_TO_WGS84G','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','IGNF','WGS84G',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATIGG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG681_ATIGG_TO_WGS84G','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG681_ATIGG_TO_4326','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','EPSG','4326',NULL,1118,23,66,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG681_ATIGG_TO_4326_USAGE','helmert_transformation','IGNF','TSG681_ATIGG_TO_4326','IGNF','4','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','IGNF','WGS84',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_USAGE','helmert_transformation','IGNF','TSG684','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATIG_RRAF91','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','IGNF','RRAF91',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATIG_RRAF91_USAGE','helmert_transformation','IGNF','TSG684_ATIG_RRAF91','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATIG_4978','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATIG','EPSG','4978',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATIG_4978_USAGE','helmert_transformation','IGNF','TSG684_ATIG_4978','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATI_WGS84','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','IGNF','WGS84',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATI_WGS84_USAGE','helmert_transformation','IGNF','TSG684_ATI_WGS84','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATI_RRAF91','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','IGNF','RRAF91',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATI_RRAF91_USAGE','helmert_transformation','IGNF','TSG684_ATI_RRAF91','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATI_4978','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ATI','EPSG','4978',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATI_4978_USAGE','helmert_transformation','IGNF','TSG684_ATI_4978','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATIGG_TO_WGS84GDD','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','IGNF','WGS84GDD',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATIGG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG684_ATIGG_TO_WGS84GDD','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATIGG_TO_WGS84G','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','IGNF','WGS84G',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATIGG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG684_ATIGG_TO_WGS84G','IGNF','85','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG684_ATIGG_TO_4326','ANCIENNE TRIANGULATION DES INGENIEURS GEOGRAPHES (ATIG) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ATIGG','EPSG','4326',NULL,1127,22,57,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG684_ATIGG_TO_4326_USAGE','helmert_transformation','IGNF','TSG684_ATIGG_TO_4326','IGNF','85','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','88','ILE DE BORA-BORA','ILE DE BORA-BORA',-16.75,-16.25,-152.0,-151.5,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1149','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers BORA_SAU 2001',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','BORA01',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Bora.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1149_USAGE','grid_transformation','IGNF','TSG1149','IGNF','88','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','89','MAYOTTE','MAYOTTE',-13.05,-12.5,44.95,45.4,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG786','CADASTRE 1997 vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','CAD97','IGNF','RGM04',NULL,-381.788,-57.501,-256.673,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG786_USAGE','helmert_transformation','IGNF','TSG786','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG786_CAD97G_TO_RGM04GDD','CADASTRE 1997 vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','CAD97G','IGNF','RGM04GDD',NULL,-381.788,-57.501,-256.673,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG786_CAD97G_TO_RGM04GDD_USAGE','helmert_transformation','IGNF','TSG786_CAD97G_TO_RGM04GDD','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG786_CAD97G_TO_RGM04G','CADASTRE 1997 vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','CAD97G','IGNF','RGM04G',NULL,-381.788,-57.501,-256.673,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG786_CAD97G_TO_RGM04G_USAGE','helmert_transformation','IGNF','TSG786_CAD97G_TO_RGM04G','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG786_CAD97GEO_TO_RGM04GEODD','CADASTRE 1997 vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','CAD97GEO','IGNF','RGM04GEODD',NULL,-381.788,-57.501,-256.673,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG786_CAD97GEO_TO_RGM04GEODD_USAGE','helmert_transformation','IGNF','TSG786_CAD97GEO_TO_RGM04GEODD','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG786_CAD97GEO_TO_RGM04GEO','CADASTRE 1997 vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','CAD97GEO','IGNF','RGM04GEO',NULL,-381.788,-57.501,-256.673,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG786_CAD97GEO_TO_RGM04GEO_USAGE','helmert_transformation','IGNF','TSG786_CAD97GEO_TO_RGM04GEO','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG787','COMBANI vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MAYO50','IGNF','RGM04',NULL,-599.928,-275.552,-195.665,'EPSG','9001',-0.0835,-0.4715,0.0602,'EPSG','9104', 49.2814,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG787_USAGE','helmert_transformation','IGNF','TSG787','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG787_MAYO50GEO_TO_RGM04GEODD','COMBANI vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','MAYO50GEO','IGNF','RGM04GEODD',NULL,-599.928,-275.552,-195.665,'EPSG','9001',-0.0835,-0.4715,0.0602,'EPSG','9104',49.2814,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG787_MAYO50GEO_TO_RGM04GEODD_USAGE','helmert_transformation','IGNF','TSG787_MAYO50GEO_TO_RGM04GEODD','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG787_MAYO50GEO_TO_RGM04GEO','COMBANI vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','MAYO50GEO','IGNF','RGM04GEO',NULL,-599.928,-275.552,-195.665,'EPSG','9001',-0.0835,-0.4715,0.0602,'EPSG','9104',49.2814,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG787_MAYO50GEO_TO_RGM04GEO_USAGE','helmert_transformation','IGNF','TSG787_MAYO50GEO_TO_RGM04GEO','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG787_MAYO50G_TO_RGM04GDD','COMBANI vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MAYO50G','IGNF','RGM04GDD',NULL,-599.928,-275.552,-195.665,'EPSG','9001',-0.0835,-0.4715,0.0602,'EPSG','9104',49.2814,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG787_MAYO50G_TO_RGM04GDD_USAGE','helmert_transformation','IGNF','TSG787_MAYO50G_TO_RGM04GDD','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG787_MAYO50G_TO_RGM04G','COMBANI vers RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MAYO50G','IGNF','RGM04G',NULL,-599.928,-275.552,-195.665,'EPSG','9001',-0.0835,-0.4715,0.0602,'EPSG','9104',49.2814,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG787_MAYO50G_TO_RGM04G_USAGE','helmert_transformation','IGNF','TSG787_MAYO50G_TO_RGM04G','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642','COMBANI vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MAYO50','IGNF','WGS84',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_USAGE','helmert_transformation','IGNF','TSG642','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50_RRAF91','COMBANI vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MAYO50','IGNF','RRAF91',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50_RRAF91_USAGE','helmert_transformation','IGNF','TSG642_MAYO50_RRAF91','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50_4978','COMBANI vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MAYO50','EPSG','4978',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50_4978_USAGE','helmert_transformation','IGNF','TSG642_MAYO50_4978','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50GEO_TO_WGS84GEODD','COMBANI vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','MAYO50GEO','IGNF','WGS84GEODD',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG642_MAYO50GEO_TO_WGS84GEODD','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50GEO_TO_WGS84GEO','COMBANI vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','MAYO50GEO','IGNF','WGS84GEO',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG642_MAYO50GEO_TO_WGS84GEO','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50GEO_TO_WGS84RRAFGEO','COMBANI vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','MAYO50GEO','IGNF','WGS84RRAFGEO',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG642_MAYO50GEO_TO_WGS84RRAFGEO','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50G_TO_WGS84GDD','COMBANI vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MAYO50G','IGNF','WGS84GDD',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG642_MAYO50G_TO_WGS84GDD','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50G_TO_WGS84G','COMBANI vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MAYO50G','IGNF','WGS84G',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG642_MAYO50G_TO_WGS84G','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG642_MAYO50G_TO_4326','COMBANI vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MAYO50G','EPSG','4326',NULL,-382,-59,-262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG642_MAYO50G_TO_4326_USAGE','helmert_transformation','IGNF','TSG642_MAYO50G_TO_4326','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590','CSG 1967 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','CSG67','IGNF','WGS84',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_USAGE','helmert_transformation','IGNF','TSG590','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67_RRAF91','CSG 1967 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','CSG67','IGNF','RRAF91',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67_RRAF91_USAGE','helmert_transformation','IGNF','TSG590_CSG67_RRAF91','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67_4978','CSG 1967 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','CSG67','EPSG','4978',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67_4978_USAGE','helmert_transformation','IGNF','TSG590_CSG67_4978','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67G_TO_WGS84GDD','CSG 1967 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','CSG67G','IGNF','WGS84GDD',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG590_CSG67G_TO_WGS84GDD','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67G_TO_WGS84G','CSG 1967 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','CSG67G','IGNF','WGS84G',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG590_CSG67G_TO_WGS84G','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67G_TO_4326','CSG 1967 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','CSG67G','EPSG','4326',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67G_TO_4326_USAGE','helmert_transformation','IGNF','TSG590_CSG67G_TO_4326','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67GEO_TO_WGS84GEODD','CSG 1967 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','CSG67GEO','IGNF','WGS84GEODD',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG590_CSG67GEO_TO_WGS84GEODD','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67GEO_TO_WGS84GEO','CSG 1967 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','CSG67GEO','IGNF','WGS84GEO',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG590_CSG67GEO_TO_WGS84GEO','EPSG','1262','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG590_CSG67GEO_TO_WGS84RRAFGEO','CSG 1967 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','CSG67GEO','IGNF','WGS84RRAFGEO',NULL,-186,230,110,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG590_CSG67GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG590_CSG67GEO_TO_WGS84RRAFGEO','EPSG','1262','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','90','GUYANE','GUYANE',2.05,5.95,-54.95,-51.05,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG417','CSG 1967 (IGN 1995) vers RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','C67I95','IGNF','RGFG95',NULL,-193.066,236.993,105.447,'EPSG','9001',0.4814,-0.8074,0.1276,'EPSG','9104', 1.5649,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG417_USAGE','helmert_transformation','IGNF','TSG417','IGNF','90','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG417_C67IG95G_TO_RGFG95GDD','CSG 1967 (IGN 1995) vers RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','C67IG95G','IGNF','RGFG95GDD',NULL,-193.066,236.993,105.447,'EPSG','9001',0.4814,-0.8074,0.1276,'EPSG','9104',1.5649,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG417_C67IG95G_TO_RGFG95GDD_USAGE','helmert_transformation','IGNF','TSG417_C67IG95G_TO_RGFG95GDD','IGNF','90','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG417_C67IG95G_TO_RGFG95G','CSG 1967 (IGN 1995) vers RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','C67IG95G','IGNF','RGFG95G',NULL,-193.066,236.993,105.447,'EPSG','9001',0.4814,-0.8074,0.1276,'EPSG','9104',1.5649,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG417_C67IG95G_TO_RGFG95G_USAGE','helmert_transformation','IGNF','TSG417_C67IG95G_TO_RGFG95G','IGNF','90','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1156','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers DANGER 1950 (SAINT-PIERRE-ET-MIQUELON)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGSPM06GEO','IGNF','STPM50_V',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggspm06v1.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1156_USAGE','grid_transformation','IGNF','TSG1156','IGNF','60','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','91','FRANCE','FRANCE',41,52,-5.5,10,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','WGS72','IGNF','WGS84',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_USAGE','helmert_transformation','IGNF','TSG348','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72_RRAF91','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','WGS72','IGNF','RRAF91',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72_RRAF91_USAGE','helmert_transformation','IGNF','TSG348_WGS72_RRAF91','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72_4978','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','WGS72','EPSG','4978',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72_4978_USAGE','helmert_transformation','IGNF','TSG348_WGS72_4978','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72G_TO_WGS84GDD','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','WGS72G','IGNF','WGS84GDD',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG348_WGS72G_TO_WGS84GDD','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72G_TO_WGS84G','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','WGS72G','IGNF','WGS84G',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG348_WGS72G_TO_WGS84G','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72G_TO_4326','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','WGS72G','EPSG','4326',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG348_WGS72G_TO_4326','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72GEO_TO_WGS84GEODD','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','WGS72GEO','IGNF','WGS84GEODD',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG348_WGS72GEO_TO_WGS84GEODD','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72GEO_TO_WGS84GEO','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','WGS72GEO','IGNF','WGS84GEO',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG348_WGS72GEO_TO_WGS84GEO','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG348_WGS72GEO_TO_WGS84RRAFGEO','DOD WORLD GEODETIC SYSTEM 1972 (WGS 72) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','WGS72GEO','IGNF','WGS84RRAFGEO',NULL,0,12,6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG348_WGS72GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG348_WGS72GEO_TO_WGS84RRAFGEO','IGNF','91','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','92','VANUATU','VANUATU',-18,-17.25,168,168.67,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','EFATE57','IGNF','WGS84',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_USAGE','helmert_transformation','IGNF','TSG518','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57_RRAF91','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','EFATE57','IGNF','RRAF91',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57_RRAF91_USAGE','helmert_transformation','IGNF','TSG518_EFATE57_RRAF91','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57_4978','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','EFATE57','EPSG','4978',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57_4978_USAGE','helmert_transformation','IGNF','TSG518_EFATE57_4978','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57G_TO_WGS84GDD','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','EFATE57G','IGNF','WGS84GDD',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG518_EFATE57G_TO_WGS84GDD','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57G_TO_WGS84G','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','EFATE57G','IGNF','WGS84G',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG518_EFATE57G_TO_WGS84G','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57G_TO_4326','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','EFATE57G','EPSG','4326',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57G_TO_4326_USAGE','helmert_transformation','IGNF','TSG518_EFATE57G_TO_4326','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57GEO_TO_WGS84GEODD','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','EFATE57GEO','IGNF','WGS84GEODD',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG518_EFATE57GEO_TO_WGS84GEODD','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57GEO_TO_WGS84GEO','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','EFATE57GEO','IGNF','WGS84GEO',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG518_EFATE57GEO_TO_WGS84GEO','IGNF','92','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG518_EFATE57GEO_TO_WGS84RRAFGEO','EFATE-IGN 1957 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','EFATE57GEO','IGNF','WGS84RRAFGEO',NULL,-127,-769,472,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG518_EFATE57GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG518_EFATE57GEO_TO_WGS84RRAFGEO','IGNF','92','IGNF','5'); INSERT INTO scope VALUES('IGNF','12','SYSTEMES GEODESIQUES ASSIMILABLES SUR LEUR ETENDUE COMMUNE',0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214','ETRS 89 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ETRS89','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_USAGE','helmert_transformation','IGNF','TSG1214','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89_RRAF91','ETRS 89 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ETRS89','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89_RRAF91_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89_RRAF91','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89_4978','ETRS 89 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ETRS89','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89_4978_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89_4978','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89G_TO_WGS84GDD','ETRS 89 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ETRS89G','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89G_TO_WGS84GDD','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89G_TO_WGS84G','ETRS 89 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ETRS89G','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89G_TO_WGS84G','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89G_TO_4326','ETRS 89 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ETRS89G','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89G_TO_4326_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89G_TO_4326','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89GEO_TO_WGS84GEODD','ETRS 89 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','ETRS89GEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89GEO_TO_WGS84GEODD','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89GEO_TO_WGS84GEO','ETRS 89 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','ETRS89GEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89GEO_TO_WGS84GEO','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1214_ETRS89GEO_TO_WGS84RRAFGEO','ETRS 89 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','ETRS89GEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1214_ETRS89GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1214_ETRS89GEO_TO_WGS84RRAFGEO','IGNF','14','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ED50','IGNF','WGS84',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_USAGE','helmert_transformation','IGNF','TSG709','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50_RRAF91','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ED50','IGNF','RRAF91',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50_RRAF91_USAGE','helmert_transformation','IGNF','TSG709_ED50_RRAF91','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50_4978','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ED50','EPSG','4978',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50_4978_USAGE','helmert_transformation','IGNF','TSG709_ED50_4978','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50G_TO_WGS84GDD','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ED50G','IGNF','WGS84GDD',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG709_ED50G_TO_WGS84GDD','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50GEO_TO_WGS84GDD','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ED50GEO','IGNF','WGS84GDD',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50GEO_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG709_ED50GEO_TO_WGS84GDD','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50G_TO_WGS84G','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ED50G','IGNF','WGS84G',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG709_ED50G_TO_WGS84G','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50G_TO_4326','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ED50G','EPSG','4326',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50G_TO_4326_USAGE','helmert_transformation','IGNF','TSG709_ED50G_TO_4326','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50GEO_TO_WGS84G','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ED50GEO','IGNF','WGS84G',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50GEO_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG709_ED50GEO_TO_WGS84G','IGNF','91','IGNF','9'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG709_ED50GEO_TO_4326','EUROPE 1950 (ED50) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ED50GEO','EPSG','4326',NULL,-84,-97,-117,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG709_ED50GEO_TO_4326_USAGE','helmert_transformation','IGNF','TSG709_ED50GEO_TO_4326','IGNF','91','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','93','GUADELOUPE (ILES ST-MARTIN ET ST-BARTHELEMY)','GUADELOUPE (ILES ST-MARTIN ET ST-BARTHELEMY)',17.82,18.18,-63.18,-62.25,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUADFM','IGNF','RRAF',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_USAGE','helmert_transformation','IGNF','TSG464','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFM_WGS84GUAD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUADFM','IGNF','WGS84GUAD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFM_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG464_GUADFM_WGS84GUAD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFM49_RRAF','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUADFM49','IGNF','RRAF',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFM49_RRAF_USAGE','helmert_transformation','IGNF','TSG464_GUADFM49_RRAF','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFM49_WGS84GUAD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUADFM49','IGNF','WGS84GUAD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFM49_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG464_GUADFM49_WGS84GUAD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFMG_TO_RRAFGDD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUADFMG','IGNF','RRAFGDD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFMG_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG464_GUADFMG_TO_RRAFGDD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFMG_TO_WGS84MARTGDD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUADFMG','IGNF','WGS84MARTGDD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFMG_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG464_GUADFMG_TO_WGS84MARTGDD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUAFM48G_TO_RRAFGDD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUAFM48G','IGNF','RRAFGDD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUAFM48G_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG464_GUAFM48G_TO_RRAFGDD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUAFM48G_TO_WGS84MARTGDD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUAFM48G','IGNF','WGS84MARTGDD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUAFM48G_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG464_GUAFM48G_TO_WGS84MARTGDD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFMG_TO_RRAFG','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUADFMG','IGNF','RRAFG',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFMG_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG464_GUADFMG_TO_RRAFG','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFMG_TO_WGS84MARTG','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUADFMG','IGNF','WGS84MARTG',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFMG_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG464_GUADFMG_TO_WGS84MARTG','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUAFM48G_TO_RRAFG','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUAFM48G','IGNF','RRAFG',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUAFM48G_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG464_GUAFM48G_TO_RRAFG','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUAFM48G_TO_WGS84MARTG','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUAFM48G','IGNF','WGS84MARTG',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUAFM48G_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG464_GUAFM48G_TO_WGS84MARTG','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFM49GEO_TO_RRAFGEODD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','GUADFM49GEO','IGNF','RRAFGEODD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFM49GEO_TO_RRAFGEODD_USAGE','helmert_transformation','IGNF','TSG464_GUADFM49GEO_TO_RRAFGEODD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFM49GEO_TO_W84MARTGEODD','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','GUADFM49GEO','IGNF','W84MARTGEODD',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFM49GEO_TO_W84MARTGEODD_USAGE','helmert_transformation','IGNF','TSG464_GUADFM49GEO_TO_W84MARTGEODD','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFM49GEO_TO_RRAFGEO','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','GUADFM49GEO','IGNF','RRAFGEO',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFM49GEO_TO_RRAFGEO_USAGE','helmert_transformation','IGNF','TSG464_GUADFM49GEO_TO_RRAFGEO','IGNF','93','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG464_GUADFM49GEO_TO_WGS84GUADGEO','GUADELOUPE - FORT MARIGOT vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','GUADFM49GEO','IGNF','WGS84GUADGEO',NULL,136.596,248.148,-429.789,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG464_GUADFM49GEO_TO_WGS84GUADGEO_USAGE','helmert_transformation','IGNF','TSG464_GUADFM49GEO_TO_WGS84GUADGEO','IGNF','93','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','94','BASSE TERRE - GRANDE TERRE','BASSE TERRE - GRANDE TERRE',15.88,16.63,-61.85,-61.08,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUADANN','IGNF','WGS84',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_USAGE','helmert_transformation','IGNF','TSG592','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUADANN_RRAF91','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUADANN','IGNF','RRAF91',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUADANN_RRAF91_USAGE','helmert_transformation','IGNF','TSG592_GUADANN_RRAF91','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUADANN_4978','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUADANN','EPSG','4978',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUADANN_4978_USAGE','helmert_transformation','IGNF','TSG592_GUADANN_4978','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48_WGS84','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUAD48','IGNF','WGS84',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48_WGS84_USAGE','helmert_transformation','IGNF','TSG592_GUAD48_WGS84','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48_RRAF91','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUAD48','IGNF','RRAF91',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48_RRAF91_USAGE','helmert_transformation','IGNF','TSG592_GUAD48_RRAF91','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48_4978','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','GUAD48','EPSG','4978',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48_4978_USAGE','helmert_transformation','IGNF','TSG592_GUAD48_4978','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUADANNG_TO_WGS84GDD','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUADANNG','IGNF','WGS84GDD',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUADANNG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG592_GUADANNG_TO_WGS84GDD','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48G_TO_WGS84GDD','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUAD48G','IGNF','WGS84GDD',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG592_GUAD48G_TO_WGS84GDD','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUADANNG_TO_WGS84G','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUADANNG','IGNF','WGS84G',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUADANNG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG592_GUADANNG_TO_WGS84G','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUADANNG_TO_4326','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUADANNG','EPSG','4326',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUADANNG_TO_4326_USAGE','helmert_transformation','IGNF','TSG592_GUADANNG_TO_4326','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48G_TO_WGS84G','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUAD48G','IGNF','WGS84G',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG592_GUAD48G_TO_WGS84G','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48G_TO_4326','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','GUAD48G','EPSG','4326',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48G_TO_4326_USAGE','helmert_transformation','IGNF','TSG592_GUAD48G_TO_4326','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48GEO_TO_WGS84GEODD','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','GUAD48GEO','IGNF','WGS84GEODD',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG592_GUAD48GEO_TO_WGS84GEODD','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48GEO_TO_WGS84GEO','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','GUAD48GEO','IGNF','WGS84GEO',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG592_GUAD48GEO_TO_WGS84GEO','IGNF','94','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG592_GUAD48GEO_TO_WGS84RRAFGEO','GUADELOUPE - STE ANNE vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','GUAD48GEO','IGNF','WGS84RRAFGEO',NULL,-467,-16,-300,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG592_GUAD48GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG592_GUAD48GEO_TO_WGS84RRAFGEO','IGNF','94','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','95','GUADELOUPE (TOUTES ILES SAUF ST-BARTHELEMY ET ST-MARTIN)','GUADELOUPE (TOUTES ILES SAUF ST-BARTHELEMY ET ST-MARTIN)',15.82,16.6,-61.83,-60.77,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','GUADANN','IGNF','RRAF',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104', 1.8984,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_USAGE','helmert_transformation','IGNF','TSG465','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUADANN_WGS84GUAD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','GUADANN','IGNF','WGS84GUAD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104', 1.8984,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUADANN_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG465_GUADANN_WGS84GUAD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48_RRAF','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','GUAD48','IGNF','RRAF',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104', 1.8984,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48_RRAF_USAGE','helmert_transformation','IGNF','TSG465_GUAD48_RRAF','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48_WGS84GUAD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','GUAD48','IGNF','WGS84GUAD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104', 1.8984,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG465_GUAD48_WGS84GUAD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUADANNG_TO_RRAFGDD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUADANNG','IGNF','RRAFGDD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUADANNG_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG465_GUADANNG_TO_RRAFGDD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUADANNG_TO_WGS84MARTGDD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUADANNG','IGNF','WGS84MARTGDD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUADANNG_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG465_GUADANNG_TO_WGS84MARTGDD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48G_TO_RRAFGDD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUAD48G','IGNF','RRAFGDD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48G_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG465_GUAD48G_TO_RRAFGDD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48G_TO_WGS84MARTGDD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUAD48G','IGNF','WGS84MARTGDD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48G_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG465_GUAD48G_TO_WGS84MARTGDD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUADANNG_TO_RRAFG','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUADANNG','IGNF','RRAFG',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUADANNG_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG465_GUADANNG_TO_RRAFG','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUADANNG_TO_WGS84MARTG','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUADANNG','IGNF','WGS84MARTG',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUADANNG_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG465_GUADANNG_TO_WGS84MARTG','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48G_TO_RRAFG','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUAD48G','IGNF','RRAFG',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48G_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG465_GUAD48G_TO_RRAFG','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48G_TO_WGS84MARTG','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','GUAD48G','IGNF','WGS84MARTG',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48G_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG465_GUAD48G_TO_WGS84MARTG','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48GEO_TO_RRAFGEODD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','GUAD48GEO','IGNF','RRAFGEODD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48GEO_TO_RRAFGEODD_USAGE','helmert_transformation','IGNF','TSG465_GUAD48GEO_TO_RRAFGEODD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48GEO_TO_W84MARTGEODD','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','GUAD48GEO','IGNF','W84MARTGEODD',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48GEO_TO_W84MARTGEODD_USAGE','helmert_transformation','IGNF','TSG465_GUAD48GEO_TO_W84MARTGEODD','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48GEO_TO_RRAFGEO','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','GUAD48GEO','IGNF','RRAFGEO',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48GEO_TO_RRAFGEO_USAGE','helmert_transformation','IGNF','TSG465_GUAD48GEO_TO_RRAFGEO','IGNF','95','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG465_GUAD48GEO_TO_WGS84GUADGEO','GUADELOUPE - STE ANNE vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','GUAD48GEO','IGNF','WGS84GUADGEO',NULL,-472.29,-5.63,-304.12,'EPSG','9001',0.4362,-0.8374,0.2563,'EPSG','9104',1.8984,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG465_GUAD48GEO_TO_WGS84GUADGEO_USAGE','helmert_transformation','IGNF','TSG465_GUAD48GEO_TO_WGS84GUADGEO','IGNF','95','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','96','ILE DE HUAHINE','ILE DE HUAHINE',-17.0,-16.5,-151.5,-150.75,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1150','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers HUAHINE_SAU 2001',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','HUAH01',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Huahine.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1150_USAGE','grid_transformation','IGNF','TSG1150','IGNF','96','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','97','GRANDE TERRE DES ILES KERGUELEN','GRANDE TERRE DES ILES KERGUELEN',-50.5,-48.0,67.0,71.0,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1148','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers IGN 1962 (KERGUELEN)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGTAAFGEO','IGNF','KERG62',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggker08v2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1148_USAGE','grid_transformation','IGNF','TSG1148','IGNF','97','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','98','HIVA OA, TAHUATA, MOHOTANI','HIVA OA, TAHUATA, MOHOTANI',-9.88,-9.65,-139.2,-138.75,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1006','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','ATUO63','IGNF','RGPF',NULL,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104', 17.3311,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1006_USAGE','helmert_transformation','IGNF','TSG1006','IGNF','98','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1006_IGN63_RGPF','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','IGN63','IGNF','RGPF',NULL,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104', 17.3311,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1006_IGN63_RGPF_USAGE','helmert_transformation','IGNF','TSG1006_IGN63_RGPF','IGNF','98','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1006_ATUO63G_TO_RGPFGDD','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','ATUO63G','IGNF','RGPFGDD',NULL,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1006_ATUO63G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1006_ATUO63G_TO_RGPFGDD','IGNF','98','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1006_IGN63G_TO_RGPFGDD','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','IGN63G','IGNF','RGPFGDD',NULL,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1006_IGN63G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1006_IGN63G_TO_RGPFGDD','IGNF','98','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1006_ATUO63G_TO_RGPFG','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','ATUO63G','IGNF','RGPFG',NULL,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1006_ATUO63G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1006_ATUO63G_TO_RGPFG','IGNF','98','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1006_IGN63G_TO_RGPFG','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','IGN63G','IGNF','RGPFG',NULL,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1006_IGN63G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1006_IGN63G_TO_RGPFG','IGNF','98','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1006_IGN63GEO_TO_RGPFGEO','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','IGN63GEO','IGNF','RGPFGEO',NULL,410.721,55.049,80.746,'EPSG','9001',-2.5779,-2.3514,-0.6664,'EPSG','9104',17.3311,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1006_IGN63GEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG1006_IGN63GEO_TO_RGPFGEO','IGNF','98','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','99','TAHUATA','TAHUATA',-10.05,-9.85,-139.2,-139,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1008','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','ATUO63','IGNF','RGPF',NULL,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104', -0.5409,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1008_USAGE','helmert_transformation','IGNF','TSG1008','IGNF','99','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1008_IGN63_RGPF','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','IGN63','IGNF','RGPF',NULL,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104', -0.5409,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1008_IGN63_RGPF_USAGE','helmert_transformation','IGNF','TSG1008_IGN63_RGPF','IGNF','99','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1008_ATUO63G_TO_RGPFGDD','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','ATUO63G','IGNF','RGPFGDD',NULL,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1008_ATUO63G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1008_ATUO63G_TO_RGPFGDD','IGNF','99','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1008_IGN63G_TO_RGPFGDD','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','IGN63G','IGNF','RGPFGDD',NULL,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1008_IGN63G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1008_IGN63G_TO_RGPFGDD','IGNF','99','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1008_ATUO63G_TO_RGPFG','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','ATUO63G','IGNF','RGPFG',NULL,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1008_ATUO63G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1008_ATUO63G_TO_RGPFG','IGNF','99','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1008_IGN63G_TO_RGPFG','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','IGN63G','IGNF','RGPFG',NULL,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1008_IGN63G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1008_IGN63G_TO_RGPFG','IGNF','99','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1008_IGN63GEO_TO_RGPFGEO','IGN 1963 (HIVA OA - TAHUATA - MOHOTANI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','IGN63GEO','IGNF','RGPFGEO',NULL,374.715,-58.407,-0.957,'EPSG','9001',-16.2111,-11.4626,-5.5357,'EPSG','9104',-0.5409,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1008_IGN63GEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG1008_IGN63GEO_TO_RGPFGEO','IGNF','99','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','100','ILE DE FAKARAVA','ILE DE FAKARAVA',-16.65,-15.95,-145.9,-145.3,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1185','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers IGN 1966 (TAHITI)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','TAHITI66',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf08-Fakarava.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1185_USAGE','grid_transformation','IGNF','TSG1185','IGNF','100','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','101','ILE DE TAHITI','ILE DE TAHITI',-18.0,-17.0,-149.69,-149.0,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1195','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers IGN 1966 (TAHITI)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','TAHITI66',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf10-Tahiti.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1195_USAGE','grid_transformation','IGNF','TSG1195','IGNF','101','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','102','NUKU HIVA','NUKU HIVA',-9,-8.7,-140.3,-140,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1007','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','NUKU72','IGNF','RGPF',NULL,165.732,216.720,180.505,'EPSG','9001',-0.6434,-0.4512,-0.0791,'EPSG','9104', 7.4204,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1007_USAGE','helmert_transformation','IGNF','TSG1007','IGNF','102','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1007_NUKU72GEO_TO_RGPFGEO','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','RGPFGEO',NULL,165.732,216.720,180.505,'EPSG','9001',-0.6434,-0.4512,-0.0791,'EPSG','9104',7.4204,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1007_NUKU72GEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG1007_NUKU72GEO_TO_RGPFGEO','IGNF','102','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1007_NUKU72G_TO_RGPFGDD','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','NUKU72G','IGNF','RGPFGDD',NULL,165.732,216.720,180.505,'EPSG','9001',-0.6434,-0.4512,-0.0791,'EPSG','9104',7.4204,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1007_NUKU72G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1007_NUKU72G_TO_RGPFGDD','IGNF','102','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1007_NUKU72G_TO_RGPFG','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','NUKU72G','IGNF','RGPFG',NULL,165.732,216.720,180.505,'EPSG','9001',-0.6434,-0.4512,-0.0791,'EPSG','9104',7.4204,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1007_NUKU72G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1007_NUKU72G_TO_RGPFG','IGNF','102','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','103','UA HUKA','UA HUKA',-9.09,-8.75,-139.65,-139.25,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1009','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','NUKU72','IGNF','RGPF',NULL,1363.785,1362.687,398.811,'EPSG','9001',-4.5322,-6.7579,-1.0574,'EPSG','9104', 268.361,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1009_USAGE','helmert_transformation','IGNF','TSG1009','IGNF','103','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1009_NUKU72GEO_TO_RGPFGEO','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','RGPFGEO',NULL,1363.785,1362.687,398.811,'EPSG','9001',-4.5322,-6.7579,-1.0574,'EPSG','9104',268.361,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1009_NUKU72GEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG1009_NUKU72GEO_TO_RGPFGEO','IGNF','103','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1009_NUKU72G_TO_RGPFGDD','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','NUKU72G','IGNF','RGPFGDD',NULL,1363.785,1362.687,398.811,'EPSG','9001',-4.5322,-6.7579,-1.0574,'EPSG','9104',268.361,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1009_NUKU72G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1009_NUKU72G_TO_RGPFGDD','IGNF','103','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1009_NUKU72G_TO_RGPFG','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','NUKU72G','IGNF','RGPFG',NULL,1363.785,1362.687,398.811,'EPSG','9001',-4.5322,-6.7579,-1.0574,'EPSG','9104',268.361,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1009_NUKU72G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1009_NUKU72G_TO_RGPFG','IGNF','103','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','104','UA POU','UA POU',-9.75,-9.15,-140.25,-139.91,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1010','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','NUKU72','IGNF','RGPF',NULL,259.551,297.612,197.833,'EPSG','9001',1.4866,2.1224,0.4612,'EPSG','9104', 27.0249,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1010_USAGE','helmert_transformation','IGNF','TSG1010','IGNF','104','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1010_NUKU72GEO_TO_RGPFGEO','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','RGPFGEO',NULL,259.551,297.612,197.833,'EPSG','9001',1.4866,2.1224,0.4612,'EPSG','9104',27.0249,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1010_NUKU72GEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG1010_NUKU72GEO_TO_RGPFGEO','IGNF','104','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1010_NUKU72G_TO_RGPFGDD','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','NUKU72G','IGNF','RGPFGDD',NULL,259.551,297.612,197.833,'EPSG','9001',1.4866,2.1224,0.4612,'EPSG','9104',27.0249,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1010_NUKU72G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1010_NUKU72G_TO_RGPFGDD','IGNF','104','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1010_NUKU72G_TO_RGPFG','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','NUKU72G','IGNF','RGPFG',NULL,259.551,297.612,197.833,'EPSG','9001',1.4866,2.1224,0.4612,'EPSG','9104',27.0249,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1010_NUKU72G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1010_NUKU72G_TO_RGPFG','IGNF','104','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','105','NUKU HIVA - ILES MARQUISES - POLYNESIE FRANCAISE','NUKU HIVA - ILES MARQUISES - POLYNESIE FRANCAISE',-9.5,-8.77,-140.27,-139.48,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NUKU72','IGNF','WGS84',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_USAGE','helmert_transformation','IGNF','TSG606','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72_RRAF91','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NUKU72','IGNF','RRAF91',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72_RRAF91_USAGE','helmert_transformation','IGNF','TSG606_NUKU72_RRAF91','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72_4978','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NUKU72','EPSG','4978',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72_4978_USAGE','helmert_transformation','IGNF','TSG606_NUKU72_4978','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72GEO_TO_WGS84GEODD','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','WGS84GEODD',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG606_NUKU72GEO_TO_WGS84GEODD','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72GEO_TO_WGS84GEO','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','WGS84GEO',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG606_NUKU72GEO_TO_WGS84GEO','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72GEO_TO_WGS84RRAFGEO','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','WGS84RRAFGEO',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG606_NUKU72GEO_TO_WGS84RRAFGEO','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72G_TO_WGS84GDD','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NUKU72G','IGNF','WGS84GDD',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG606_NUKU72G_TO_WGS84GDD','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72G_TO_WGS84G','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NUKU72G','IGNF','WGS84G',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG606_NUKU72G_TO_WGS84G','IGNF','105','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG606_NUKU72G_TO_4326','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NUKU72G','EPSG','4326',NULL,84,274,65,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG606_NUKU72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG606_NUKU72G_TO_4326','IGNF','105','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','106','NUKU HIVA - MARQUISES','NUKU HIVA - MARQUISES',-9,-8.7,-140.3,-140,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NUKU72','IGNF','WGS84',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_USAGE','helmert_transformation','IGNF','TSG751','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72_RRAF91','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NUKU72','IGNF','RRAF91',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72_RRAF91_USAGE','helmert_transformation','IGNF','TSG751_NUKU72_RRAF91','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72_4978','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NUKU72','EPSG','4978',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72_4978_USAGE','helmert_transformation','IGNF','TSG751_NUKU72_4978','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72GEO_TO_WGS84GEODD','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','WGS84GEODD',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG751_NUKU72GEO_TO_WGS84GEODD','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72GEO_TO_WGS84GEO','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','WGS84GEO',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG751_NUKU72GEO_TO_WGS84GEO','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72GEO_TO_WGS84RRAFGEO','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','NUKU72GEO','IGNF','WGS84RRAFGEO',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG751_NUKU72GEO_TO_WGS84RRAFGEO','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72G_TO_WGS84GDD','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NUKU72G','IGNF','WGS84GDD',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG751_NUKU72G_TO_WGS84GDD','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72G_TO_WGS84G','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NUKU72G','IGNF','WGS84G',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG751_NUKU72G_TO_WGS84G','IGNF','106','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG751_NUKU72G_TO_4326','IGN 1972 (NUKU HIVA - UA HUKA - UA POU) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NUKU72G','EPSG','4326',NULL,130.85,185.17,174.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG751_NUKU72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG751_NUKU72G_TO_4326','IGNF','106','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1176','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1987 (MARTINIQUE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','MART87',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMART2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1176_USAGE','grid_transformation','IGNF','TSG1176','IGNF','39','IGNF','6'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1241','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1987 (MARTINIQUE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','MART87',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMART2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1241_USAGE','grid_transformation','IGNF','TSG1241','IGNF','39','IGNF','6'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1155','WGS 84 (RRAF) vers IGN 1987 (MARTINIQUE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','MART87',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggm00v2.txt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1155_USAGE','grid_transformation','IGNF','TSG1155','IGNF','39','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','107','GUADELOUPE GRANDE-TERRE + BASSE-TERRE','GUADELOUPE GRANDE-TERRE + BASSE-TERRE',15.875,16.625,-61.9,-61.075,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1177','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 (GUADELOUPE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAGTBT2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1177_USAGE','grid_transformation','IGNF','TSG1177','IGNF','107','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','108','GUADELOUPE (GRANDE-TERRE ET BASSE-TERRE)','GUADELOUPE (GRANDE-TERRE ET BASSE-TERRE)',15.875,16.589,-61.9,-61.072,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1242','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 (GUADELOUPE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAGTBT2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1242_USAGE','grid_transformation','IGNF','TSG1242','IGNF','108','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1165','WGS 84 (RRAF) vers IGN 1988 (GUADELOUPE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','GUAD88',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00v2.txt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1165_USAGE','grid_transformation','IGNF','TSG1165','IGNF','107','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','109','ARCHIPEL DES SAINTES (GUADELOUPE)','ARCHIPEL DES SAINTES (GUADELOUPE)',15.8,15.925,-61.7,-61.475,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1180','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88LS',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALS2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1180_USAGE','grid_transformation','IGNF','TSG1180','IGNF','109','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1245','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88LS',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALS2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1245_USAGE','grid_transformation','IGNF','TSG1245','IGNF','109','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1167','WGS 84 (RRAF) vers IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','GUAD88LS',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_lsv2.txt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1167_USAGE','grid_transformation','IGNF','TSG1167','IGNF','109','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1247','WGS 84 (RRAF) vers IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','GUAD88LS',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_lsv2.txt',NULL,NULL,NULL,NULL,NULL,NULL,'2.1.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1247_USAGE','grid_transformation','IGNF','TSG1247','IGNF','109','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','110','ILE DE MARIE-GALANTE','ILE DE MARIE-GALANTE',15.8,16.125,-61.4,-61.075,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1178','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88MG',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMG2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1178_USAGE','grid_transformation','IGNF','TSG1178','IGNF','110','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1244','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88MG',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMG2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1244_USAGE','grid_transformation','IGNF','TSG1244','IGNF','110','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','111','SAINT BARTHELEMY','SAINT BARTHELEMY',17.8,18.025,-63.0,-62.725,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1181','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88SB',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sbv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1181_USAGE','grid_transformation','IGNF','TSG1181','IGNF','111','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','112','SAINT-BARTHELEMY','SAINT-BARTHELEMY',17.8,18.025,-63.0,-62.725,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1249','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88SB',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sbv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'2.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1249_USAGE','grid_transformation','IGNF','TSG1249','IGNF','112','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1169','WGS 84 (RRAF) vers IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','GUAD88SB',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_sbv2.txt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1169_USAGE','grid_transformation','IGNF','TSG1169','IGNF','112','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','113','SAINT-MARTIN (PARTIE FRANCAISE)','SAINT-MARTIN (PARTIE FRANCAISE)',18.0,18.2,-63.2,-62.9,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1182','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88SM',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_smv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1182_USAGE','grid_transformation','IGNF','TSG1182','IGNF','113','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1248','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD88SM',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_smv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'2.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1248_USAGE','grid_transformation','IGNF','TSG1248','IGNF','113','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1154','WGS 84 (RRAF) vers IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','GUAD88SM',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_smv2.txt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1154_USAGE','grid_transformation','IGNF','TSG1154','IGNF','113','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1160','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers IGN 1989 (REUNION)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGR92GEO','IGNF','REUN89',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAR07_bl.gra',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1160_USAGE','grid_transformation','IGNF','TSG1160','IGNF','56','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','114','ILE DE LA DESIRADE','ILE DE LA DESIRADE',16.25,16.4,-61.2,-60.75,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1179','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD92LD',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALD2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1179_USAGE','grid_transformation','IGNF','TSG1179','IGNF','114','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1166','WGS 84 (RRAF) vers IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','GUAD92LD',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALDW842016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1166_USAGE','grid_transformation','IGNF','TSG1166','IGNF','114','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1243','RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009) vers IGN 2008 LD (GUADELOUPE / LA DESIRADE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGAF09GEODD','IGNF','GUAD2008LD',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALD2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1243_USAGE','grid_transformation','IGNF','TSG1243','IGNF','114','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1246','WGS 84 (RRAF) vers IGN 2008 LD (GUADELOUPE / LA DESIRADE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RRAFGEO','IGNF','GUAD2008LD',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALDW842016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1246_USAGE','grid_transformation','IGNF','TSG1246','IGNF','114','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','115','RAIATEA','RAIATEA',-16.94,-16.54,-151.59,-151.32,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG779','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','TAHAA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG779_USAGE','helmert_transformation','IGNF','TSG779','IGNF','115','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG779_RAIA53_RGPF','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RAIA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG779_RAIA53_RGPF_USAGE','helmert_transformation','IGNF','TSG779_RAIA53_RGPF','IGNF','115','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG779_TAHAA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG779_TAHAA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG779_TAHAA53G_TO_RGPFGDD','IGNF','115','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG779_RAIA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG779_RAIA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG779_RAIA53G_TO_RGPFGDD','IGNF','115','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG779_TAHAA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG779_TAHAA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG779_TAHAA53G_TO_RGPFG','IGNF','115','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG779_RAIA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG779_RAIA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG779_RAIA53G_TO_RGPFG','IGNF','115','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','116','TAHAA','TAHAA',-16.7,-16.53,-151.58,-151.38,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG780','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','TAHAA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG780_USAGE','helmert_transformation','IGNF','TSG780','IGNF','116','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG780_RAIA53_RGPF','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RAIA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG780_RAIA53_RGPF_USAGE','helmert_transformation','IGNF','TSG780_RAIA53_RGPF','IGNF','116','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG780_TAHAA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG780_TAHAA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG780_TAHAA53G_TO_RGPFGDD','IGNF','116','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG780_RAIA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG780_RAIA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG780_RAIA53G_TO_RGPFGDD','IGNF','116','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG780_TAHAA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG780_TAHAA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG780_TAHAA53G_TO_RGPFG','IGNF','116','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG780_RAIA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG780_RAIA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG780_RAIA53G_TO_RGPFG','IGNF','116','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','117','BORA BORA','BORA BORA',-16.58,-16.42,-151.83,-151.67,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG781','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','TAHAA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG781_USAGE','helmert_transformation','IGNF','TSG781','IGNF','117','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG781_RAIA53_RGPF','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RAIA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG781_RAIA53_RGPF_USAGE','helmert_transformation','IGNF','TSG781_RAIA53_RGPF','IGNF','117','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG781_TAHAA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG781_TAHAA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG781_TAHAA53G_TO_RGPFGDD','IGNF','117','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG781_RAIA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG781_RAIA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG781_RAIA53G_TO_RGPFGDD','IGNF','117','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG781_TAHAA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG781_TAHAA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG781_TAHAA53G_TO_RGPFG','IGNF','117','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG781_RAIA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG781_RAIA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG781_RAIA53G_TO_RGPFG','IGNF','117','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','118','HUAHINE','HUAHINE',-17,-16.5,-151.5,-150.75,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG782','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','TAHAA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG782_USAGE','helmert_transformation','IGNF','TSG782','IGNF','118','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG782_RAIA53_RGPF','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RAIA53','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG782_RAIA53_RGPF_USAGE','helmert_transformation','IGNF','TSG782_RAIA53_RGPF','IGNF','118','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG782_TAHAA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG782_TAHAA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG782_TAHAA53G_TO_RGPFGDD','IGNF','118','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG782_RAIA53G_TO_RGPFGDD','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG782_RAIA53G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG782_RAIA53G_TO_RGPFGDD','IGNF','118','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG782_TAHAA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG782_TAHAA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG782_TAHAA53G_TO_RGPFG','IGNF','118','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG782_RAIA53G_TO_RGPFG','IGN53 (IGN RAIATEA-TAHAA) RAIATEA-TAHAA-BORA BORA-HUAHINE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RAIA53G','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG782_RAIA53G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG782_RAIA53G_TO_RGPFG','IGNF','118','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','119','ILE DE MARE','ILE DE MARE',-21.69,-21.29,167.69,168.18,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG727','IGN53 MARE - ILES LOYAUTE vers RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MARE53','IGNF','RGNC',NULL,-533.321,238.077,-224.713,'EPSG','9001',2.381004,-7.580876,-2.346668,'EPSG','9104', -124.2432,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG727_USAGE','helmert_transformation','IGNF','TSG727','IGNF','119','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG727_MARE53G_TO_RGNCG','IGN53 MARE - ILES LOYAUTE vers RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MARE53G','IGNF','RGNCG',NULL,-533.321,238.077,-224.713,'EPSG','9001',2.381004,-7.580876,-2.346668,'EPSG','9104',-124.2432,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG727_MARE53G_TO_RGNCG_USAGE','helmert_transformation','IGNF','TSG727_MARE53G_TO_RGNCG','IGNF','119','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','120','MOHOTANI - MARQUISES','MOHOTANI - MARQUISES',-10.08,-9.83,-138.92,-138.67,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG760','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','IGNF','WGS84',NULL,330.91,-13.92,58.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG760_USAGE','helmert_transformation','IGNF','TSG760','IGNF','120','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG760_MARQUI72_RRAF91','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','IGNF','RRAF91',NULL,330.91,-13.92,58.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG760_MARQUI72_RRAF91_USAGE','helmert_transformation','IGNF','TSG760_MARQUI72_RRAF91','IGNF','120','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG760_MARQUI72_4978','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','EPSG','4978',NULL,330.91,-13.92,58.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG760_MARQUI72_4978_USAGE','helmert_transformation','IGNF','TSG760_MARQUI72_4978','IGNF','120','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG760_MARQUI72G_TO_WGS84GDD','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','IGNF','WGS84GDD',NULL,330.91,-13.92,58.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG760_MARQUI72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG760_MARQUI72G_TO_WGS84GDD','IGNF','120','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG760_MARQUI72G_TO_WGS84G','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','IGNF','WGS84G',NULL,330.91,-13.92,58.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG760_MARQUI72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG760_MARQUI72G_TO_WGS84G','IGNF','120','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG760_MARQUI72G_TO_4326','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','EPSG','4326',NULL,330.91,-13.92,58.56,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG760_MARQUI72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG760_MARQUI72G_TO_4326','IGNF','120','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','121','HIVA OA - MARQUISES','HIVA OA - MARQUISES',-9.87,-9.6,-139.25,-138.58,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG761','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','IGNF','WGS84',NULL,327.84,-14.96,59.33,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG761_USAGE','helmert_transformation','IGNF','TSG761','IGNF','121','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG761_MARQUI72_RRAF91','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','IGNF','RRAF91',NULL,327.84,-14.96,59.33,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG761_MARQUI72_RRAF91_USAGE','helmert_transformation','IGNF','TSG761_MARQUI72_RRAF91','IGNF','121','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG761_MARQUI72_4978','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','EPSG','4978',NULL,327.84,-14.96,59.33,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG761_MARQUI72_4978_USAGE','helmert_transformation','IGNF','TSG761_MARQUI72_4978','IGNF','121','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG761_MARQUI72G_TO_WGS84GDD','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','IGNF','WGS84GDD',NULL,327.84,-14.96,59.33,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG761_MARQUI72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG761_MARQUI72G_TO_WGS84GDD','IGNF','121','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG761_MARQUI72G_TO_WGS84G','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','IGNF','WGS84G',NULL,327.84,-14.96,59.33,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG761_MARQUI72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG761_MARQUI72G_TO_WGS84G','IGNF','121','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG761_MARQUI72G_TO_4326','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','EPSG','4326',NULL,327.84,-14.96,59.33,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG761_MARQUI72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG761_MARQUI72G_TO_4326','IGNF','121','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','122','EIAO - MARQUISES','EIAO - MARQUISES',-8.06,-7.95,-140.73,-140.63,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG762','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','IGNF','WGS84',NULL,333.71,-71.31,247.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG762_USAGE','helmert_transformation','IGNF','TSG762','IGNF','122','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG762_MARQUI72_RRAF91','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','IGNF','RRAF91',NULL,333.71,-71.31,247.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG762_MARQUI72_RRAF91_USAGE','helmert_transformation','IGNF','TSG762_MARQUI72_RRAF91','IGNF','122','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG762_MARQUI72_4978','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARQUI72','EPSG','4978',NULL,333.71,-71.31,247.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG762_MARQUI72_4978_USAGE','helmert_transformation','IGNF','TSG762_MARQUI72_4978','IGNF','122','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG762_MARQUI72G_TO_WGS84GDD','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','IGNF','WGS84GDD',NULL,333.71,-71.31,247.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG762_MARQUI72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG762_MARQUI72G_TO_WGS84GDD','IGNF','122','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG762_MARQUI72G_TO_WGS84G','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','IGNF','WGS84G',NULL,333.71,-71.31,247.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG762_MARQUI72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG762_MARQUI72G_TO_WGS84G','IGNF','122','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG762_MARQUI72G_TO_4326','IGN72 (EIAO - HIVA OA - MOHOTANI) MARQUISES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARQUI72G','EPSG','4326',NULL,333.71,-71.31,247.72,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG762_MARQUI72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG762_MARQUI72G_TO_4326','IGNF','122','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','123','NOUVELLE-CALEDONIE - GRANDE TERRE','NOUVELLE-CALEDONIE - GRANDE TERRE',-22.75,-19.5,163.5,167.67,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','IGN72','IGNF','WGS84',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_USAGE','helmert_transformation','IGNF','TSG677','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72_RRAF91','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','IGN72','IGNF','RRAF91',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72_RRAF91_USAGE','helmert_transformation','IGNF','TSG677_IGN72_RRAF91','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72_4978','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','IGN72','EPSG','4978',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72_4978_USAGE','helmert_transformation','IGNF','TSG677_IGN72_4978','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72GEO_TO_WGS84GEODD','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','IGN72GEO','IGNF','WGS84GEODD',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG677_IGN72GEO_TO_WGS84GEODD','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72GEO_TO_WGS84GEO','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','IGN72GEO','IGNF','WGS84GEO',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG677_IGN72GEO_TO_WGS84GEO','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72GEO_TO_WGS84RRAFGEO','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','IGN72GEO','IGNF','WGS84RRAFGEO',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG677_IGN72GEO_TO_WGS84RRAFGEO','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72G_TO_WGS84GDD','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','IGN72G','IGNF','WGS84GDD',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG677_IGN72G_TO_WGS84GDD','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72G_TO_WGS84G','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','IGN72G','IGNF','WGS84G',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG677_IGN72G_TO_WGS84G','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG677_IGN72G_TO_4326','IGN72 GRANDE-TERRE / ILE DES PINS vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','IGN72G','EPSG','4326',NULL,-13,-348,292,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG677_IGN72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG677_IGN72G_TO_4326','IGNF','123','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG783','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','TAHI79','IGNF','RGPF',NULL,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.8770,'EPSG','9104', 11.4741,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG783_USAGE','helmert_transformation','IGNF','TSG783','IGNF','101','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG783_TAHI79GEO_TO_RGPFGEO','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','TAHI79GEO','IGNF','RGPFGEO',NULL,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.8770,'EPSG','9104',11.4741,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG783_TAHI79GEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG783_TAHI79GEO_TO_RGPFGEO','IGNF','101','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG783_TAHI79G_TO_RGPFGDD','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHI79G','IGNF','RGPFGDD',NULL,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.8770,'EPSG','9104',11.4741,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG783_TAHI79G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG783_TAHI79G_TO_RGPFGDD','IGNF','101','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG783_TAHI79G_TO_RGPFG','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHI79G','IGNF','RGPFG',NULL,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.8770,'EPSG','9104',11.4741,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG783_TAHI79G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG783_TAHI79G_TO_RGPFG','IGNF','101','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','124','TAHITI - SOCIETE','TAHITI - SOCIETE',-18,-17,-150,-149,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHI79','IGNF','WGS84',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_USAGE','helmert_transformation','IGNF','TSG757','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79_RRAF91','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHI79','IGNF','RRAF91',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79_RRAF91_USAGE','helmert_transformation','IGNF','TSG757_TAHI79_RRAF91','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79_4978','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHI79','EPSG','4978',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79_4978_USAGE','helmert_transformation','IGNF','TSG757_TAHI79_4978','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79GEO_TO_WGS84GEODD','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TAHI79GEO','IGNF','WGS84GEODD',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG757_TAHI79GEO_TO_WGS84GEODD','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79GEO_TO_WGS84GEO','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TAHI79GEO','IGNF','WGS84GEO',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG757_TAHI79GEO_TO_WGS84GEO','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79GEO_TO_WGS84RRAFGEO','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TAHI79GEO','IGNF','WGS84RRAFGEO',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG757_TAHI79GEO_TO_WGS84RRAFGEO','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79G_TO_WGS84GDD','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHI79G','IGNF','WGS84GDD',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG757_TAHI79G_TO_WGS84GDD','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79G_TO_WGS84G','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHI79G','IGNF','WGS84G',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG757_TAHI79G_TO_WGS84G','IGNF','124','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG757_TAHI79G_TO_4326','IGN79 (TAHITI 1979) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHI79G','EPSG','4326',NULL,160.61,116.05,153.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG757_TAHI79G_TO_4326_USAGE','helmert_transformation','IGNF','TSG757_TAHI79G_TO_4326','IGNF','124','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','125','KERGUELEN (TAAF)','KERGUELEN (TAAF)',-50.5,-48,67,71,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG195','KERGUELEN - K0 (IGN 1962) vers DOD WORLD GEODETIC SYSTEM 1972 (WGS 72)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','KERG62K0','IGNF','WGS72',NULL,155,-191,99,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG195_USAGE','helmert_transformation','IGNF','TSG195','IGNF','125','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG195_KERG62CAR_WGS72','KERGUELEN - K0 (IGN 1962) vers DOD WORLD GEODETIC SYSTEM 1972 (WGS 72)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','KERG62CAR','IGNF','WGS72',NULL,155,-191,99,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG195_KERG62CAR_WGS72_USAGE','helmert_transformation','IGNF','TSG195_KERG62CAR_WGS72','IGNF','125','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG195_KERG62G_TO_WGS72G','KERGUELEN - K0 (IGN 1962) vers DOD WORLD GEODETIC SYSTEM 1972 (WGS 72)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','KERG62G','IGNF','WGS72G',NULL,155,-191,99,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG195_KERG62G_TO_WGS72G_USAGE','helmert_transformation','IGNF','TSG195_KERG62G_TO_WGS72G','IGNF','125','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG195_KERG62GEO_TO_WGS72GEO','KERGUELEN - K0 (IGN 1962) vers DOD WORLD GEODETIC SYSTEM 1972 (WGS 72)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','KERG62GEO','IGNF','WGS72GEO',NULL,155,-191,99,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG195_KERG62GEO_TO_WGS72GEO_USAGE','helmert_transformation','IGNF','TSG195_KERG62GEO_TO_WGS72GEO','IGNF','125','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','126','ILES KERGUELEN','ILES KERGUELEN',-50.5,-48,67,71,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG825','KERGUELEN - K0 (IGN 1962) vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','KERG62K0','IGNF','RGTAAF07',NULL,144.899,-186.770,100.923,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG825_USAGE','helmert_transformation','IGNF','TSG825','IGNF','126','IGNF','10'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG825_KERG62CAR_RGTAAF07','KERGUELEN - K0 (IGN 1962) vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','KERG62CAR','IGNF','RGTAAF07',NULL,144.899,-186.770,100.923,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG825_KERG62CAR_RGTAAF07_USAGE','helmert_transformation','IGNF','TSG825_KERG62CAR_RGTAAF07','IGNF','126','IGNF','10'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG825_KERG62G_TO_RGTAAF07GDD','KERGUELEN - K0 (IGN 1962) vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','KERG62G','IGNF','RGTAAF07GDD',NULL,144.899,-186.770,100.923,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG825_KERG62G_TO_RGTAAF07GDD_USAGE','helmert_transformation','IGNF','TSG825_KERG62G_TO_RGTAAF07GDD','IGNF','126','IGNF','10'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG825_KERG62G_TO_RGTAAF07G','KERGUELEN - K0 (IGN 1962) vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','KERG62G','IGNF','RGTAAF07G',NULL,144.899,-186.770,100.923,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG825_KERG62G_TO_RGTAAF07G_USAGE','helmert_transformation','IGNF','TSG825_KERG62G_TO_RGTAAF07G','IGNF','126','IGNF','10'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG825_KERG62GEO_TO_RGTAAFGEODD','KERGUELEN - K0 (IGN 1962) vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','KERG62GEO','IGNF','RGTAAFGEODD',NULL,144.899,-186.770,100.923,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG825_KERG62GEO_TO_RGTAAFGEODD_USAGE','helmert_transformation','IGNF','TSG825_KERG62GEO_TO_RGTAAFGEODD','IGNF','126','IGNF','10'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG825_KERG62GEO_TO_RGTAAFGEO','KERGUELEN - K0 (IGN 1962) vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','KERG62GEO','IGNF','RGTAAFGEO',NULL,144.899,-186.770,100.923,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG825_KERG62GEO_TO_RGTAAFGEO_USAGE','helmert_transformation','IGNF','TSG825_KERG62GEO_TO_RGTAAFGEO','IGNF','126','IGNF','10'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MARTFD','IGNF','RRAF',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104', 13.8227,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_USAGE','helmert_transformation','IGNF','TSG467','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MARTFD_WGS84GUAD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MARTFD','IGNF','WGS84GUAD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104', 13.8227,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MARTFD_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG467_MARTFD_WGS84GUAD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38_RRAF','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MART38','IGNF','RRAF',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104', 13.8227,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38_RRAF_USAGE','helmert_transformation','IGNF','TSG467_MART38_RRAF','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38_WGS84GUAD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MART38','IGNF','WGS84GUAD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104', 13.8227,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG467_MART38_WGS84GUAD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MARTFDG_TO_RRAFGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MARTFDG','IGNF','RRAFGDD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MARTFDG_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG467_MARTFDG_TO_RRAFGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MARTFDG_TO_WGS84MARTGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MARTFDG','IGNF','WGS84MARTGDD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MARTFDG_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG467_MARTFDG_TO_WGS84MARTGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38G_TO_RRAFGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MART38G','IGNF','RRAFGDD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38G_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG467_MART38G_TO_RRAFGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38G_TO_WGS84MARTGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MART38G','IGNF','WGS84MARTGDD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38G_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG467_MART38G_TO_WGS84MARTGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MARTFDG_TO_RRAFG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MARTFDG','IGNF','RRAFG',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MARTFDG_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG467_MARTFDG_TO_RRAFG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MARTFDG_TO_WGS84MARTG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MARTFDG','IGNF','WGS84MARTG',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MARTFDG_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG467_MARTFDG_TO_WGS84MARTG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38G_TO_RRAFG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MART38G','IGNF','RRAFG',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38G_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG467_MART38G_TO_RRAFG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38G_TO_WGS84MARTG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MART38G','IGNF','WGS84MARTG',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38G_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG467_MART38G_TO_WGS84MARTG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38GEO_TO_RRAFGEODD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','RRAFGEODD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38GEO_TO_RRAFGEODD_USAGE','helmert_transformation','IGNF','TSG467_MART38GEO_TO_RRAFGEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38GEO_TO_W84MARTGEODD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','W84MARTGEODD',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38GEO_TO_W84MARTGEODD_USAGE','helmert_transformation','IGNF','TSG467_MART38GEO_TO_W84MARTGEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38GEO_TO_RRAFGEO','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','RRAFGEO',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38GEO_TO_RRAFGEO_USAGE','helmert_transformation','IGNF','TSG467_MART38GEO_TO_RRAFGEO','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG467_MART38GEO_TO_WGS84GUADGEO','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','WGS84GUADGEO',NULL,126.926,547.939,130.409,'EPSG','9001',-2.7867,5.1612,-0.8584,'EPSG','9104',13.8227,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG467_MART38GEO_TO_WGS84GUADGEO_USAGE','helmert_transformation','IGNF','TSG467_MART38GEO_TO_WGS84GUADGEO','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARTFD','IGNF','RRAF',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_USAGE','helmert_transformation','IGNF','TSG591','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MARTFD_WGS84GUAD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MARTFD','IGNF','WGS84GUAD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MARTFD_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG591_MARTFD_WGS84GUAD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38_RRAF','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MART38','IGNF','RRAF',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38_RRAF_USAGE','helmert_transformation','IGNF','TSG591_MART38_RRAF','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38_WGS84GUAD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MART38','IGNF','WGS84GUAD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38_WGS84GUAD_USAGE','helmert_transformation','IGNF','TSG591_MART38_WGS84GUAD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MARTFDG_TO_RRAFGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARTFDG','IGNF','RRAFGDD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MARTFDG_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG591_MARTFDG_TO_RRAFGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MARTFDG_TO_WGS84MARTGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARTFDG','IGNF','WGS84MARTGDD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MARTFDG_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG591_MARTFDG_TO_WGS84MARTGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38G_TO_RRAFGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MART38G','IGNF','RRAFGDD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38G_TO_RRAFGDD_USAGE','helmert_transformation','IGNF','TSG591_MART38G_TO_RRAFGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38G_TO_WGS84MARTGDD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MART38G','IGNF','WGS84MARTGDD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38G_TO_WGS84MARTGDD_USAGE','helmert_transformation','IGNF','TSG591_MART38G_TO_WGS84MARTGDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MARTFDG_TO_RRAFG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARTFDG','IGNF','RRAFG',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MARTFDG_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG591_MARTFDG_TO_RRAFG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MARTFDG_TO_WGS84MARTG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MARTFDG','IGNF','WGS84MARTG',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MARTFDG_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG591_MARTFDG_TO_WGS84MARTG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38G_TO_RRAFG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MART38G','IGNF','RRAFG',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38G_TO_RRAFG_USAGE','helmert_transformation','IGNF','TSG591_MART38G_TO_RRAFG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38G_TO_WGS84MARTG','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MART38G','IGNF','WGS84MARTG',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38G_TO_WGS84MARTG_USAGE','helmert_transformation','IGNF','TSG591_MART38G_TO_WGS84MARTG','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38GEO_TO_RRAFGEODD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','RRAFGEODD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38GEO_TO_RRAFGEODD_USAGE','helmert_transformation','IGNF','TSG591_MART38GEO_TO_RRAFGEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38GEO_TO_W84MARTGEODD','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','W84MARTGEODD',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38GEO_TO_W84MARTGEODD_USAGE','helmert_transformation','IGNF','TSG591_MART38GEO_TO_W84MARTGEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38GEO_TO_RRAFGEO','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','RRAFGEO',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38GEO_TO_RRAFGEO_USAGE','helmert_transformation','IGNF','TSG591_MART38GEO_TO_RRAFGEO','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG591_MART38GEO_TO_WGS84GUADGEO','MARTINIQUE - FORT DESAIX vers WGS 84 (RRAF)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','MART38GEO','IGNF','WGS84GUADGEO',NULL,186,482,151,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG591_MART38GEO_TO_WGS84GUADGEO_USAGE','helmert_transformation','IGNF','TSG591_MART38GEO_TO_WGS84GUADGEO','IGNF','39','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','127','ILE DE MAUPITI','ILE DE MAUPITI',-16.75,-16.25,-152.5,-152,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1138','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers MAUPITI_SAU 2001',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','MAUPITI01',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Maupiti.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1138_USAGE','grid_transformation','IGNF','TSG1138','IGNF','127','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','128','FATU HIVA','FATU HIVA',-10.6,-10.4,-138.7,138.6,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1005','MHEFO 1955 (FATU HUKU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','FATU55','IGNF','RGPF',NULL,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104', 186.074,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1005_USAGE','helmert_transformation','IGNF','TSG1005','IGNF','128','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1005_MHEFO55F_RGPF','MHEFO 1955 (FATU HUKU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MHEFO55F','IGNF','RGPF',NULL,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104', 186.074,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1005_MHEFO55F_RGPF_USAGE','helmert_transformation','IGNF','TSG1005_MHEFO55F_RGPF','IGNF','128','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1005_FATU55FG_TO_RGPFGDD','MHEFO 1955 (FATU HUKU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','FATU55FG','IGNF','RGPFGDD',NULL,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104',186.074,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1005_FATU55FG_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1005_FATU55FG_TO_RGPFGDD','IGNF','128','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1005_MHEFO55FG_TO_RGPFGDD','MHEFO 1955 (FATU HUKU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MHEFO55FG','IGNF','RGPFGDD',NULL,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104',186.074,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1005_MHEFO55FG_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1005_MHEFO55FG_TO_RGPFGDD','IGNF','128','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1005_FATU55FG_TO_RGPFG','MHEFO 1955 (FATU HUKU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','FATU55FG','IGNF','RGPFG',NULL,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104',186.074,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1005_FATU55FG_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1005_FATU55FG_TO_RGPFG','IGNF','128','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1005_MHEFO55FG_TO_RGPFG','MHEFO 1955 (FATU HUKU) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MHEFO55FG','IGNF','RGPFG',NULL,347.103,1078.125,2623.922,'EPSG','9001',33.8875,-70.6773,9.3943,'EPSG','9104',186.074,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1005_MHEFO55FG_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1005_MHEFO55FG_TO_RGPFG','IGNF','128','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','129','RAIVAVAE','RAIVAVAE',-23.92,-23.75,-147.75,-147.58,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1020','MHPF 1966 (ATOLL RAIVAVAE) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RAIV66','IGNF','RGPF',NULL,248.078,264.693,-207.097,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1020_USAGE','helmert_transformation','IGNF','TSG1020','IGNF','129','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1020_RAIV66G_TO_RGPFGDD','MHPF 1966 (ATOLL RAIVAVAE) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RAIV66G','IGNF','RGPFGDD',NULL,248.078,264.693,-207.097,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1020_RAIV66G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1020_RAIV66G_TO_RGPFGDD','IGNF','129','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1020_RAIV66G_TO_RGPFG','MHPF 1966 (ATOLL RAIVAVAE) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RAIV66G','IGNF','RGPFG',NULL,248.078,264.693,-207.097,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1020_RAIV66G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1020_RAIV66G_TO_RGPFG','IGNF','129','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','130','MANGAREVA - GAMBIER','MANGAREVA - GAMBIER',-23.45,-22.83,-135.33,-134.58,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG756','MHPF 1967 (MANGAREVA - AGAKAUITAI - AUKENA - MEKIRO) GAMBIER vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MHPF67','IGNF','WGS84',NULL,338.08,212.58,-296.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG756_USAGE','helmert_transformation','IGNF','TSG756','IGNF','130','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG756_MHPF67_RRAF91','MHPF 1967 (MANGAREVA - AGAKAUITAI - AUKENA - MEKIRO) GAMBIER vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MHPF67','IGNF','RRAF91',NULL,338.08,212.58,-296.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG756_MHPF67_RRAF91_USAGE','helmert_transformation','IGNF','TSG756_MHPF67_RRAF91','IGNF','130','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG756_MHPF67_4978','MHPF 1967 (MANGAREVA - AGAKAUITAI - AUKENA - MEKIRO) GAMBIER vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MHPF67','EPSG','4978',NULL,338.08,212.58,-296.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG756_MHPF67_4978_USAGE','helmert_transformation','IGNF','TSG756_MHPF67_4978','IGNF','130','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG756_MHPF67G_TO_WGS84GDD','MHPF 1967 (MANGAREVA - AGAKAUITAI - AUKENA - MEKIRO) GAMBIER vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MHPF67G','IGNF','WGS84GDD',NULL,338.08,212.58,-296.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG756_MHPF67G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG756_MHPF67G_TO_WGS84GDD','IGNF','130','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG756_MHPF67G_TO_WGS84G','MHPF 1967 (MANGAREVA - AGAKAUITAI - AUKENA - MEKIRO) GAMBIER vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MHPF67G','IGNF','WGS84G',NULL,338.08,212.58,-296.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG756_MHPF67G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG756_MHPF67G_TO_WGS84G','IGNF','130','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG756_MHPF67G_TO_4326','MHPF 1967 (MANGAREVA - AGAKAUITAI - AUKENA - MEKIRO) GAMBIER vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MHPF67G','EPSG','4326',NULL,338.08,212.58,-296.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG756_MHPF67G_TO_4326_USAGE','helmert_transformation','IGNF','TSG756_MHPF67G_TO_4326','IGNF','130','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','131','TUBUAI - AUSTRALES','TUBUAI - AUSTRALES',-23.45,-23.25,-149.58,-149.33,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG766','MHPF 1969 (TUBUAI) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUBU69','IGNF','WGS84',NULL,237.17,171.61,-77.84,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG766_USAGE','helmert_transformation','IGNF','TSG766','IGNF','131','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG766_TUBU69_RRAF91','MHPF 1969 (TUBUAI) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUBU69','IGNF','RRAF91',NULL,237.17,171.61,-77.84,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG766_TUBU69_RRAF91_USAGE','helmert_transformation','IGNF','TSG766_TUBU69_RRAF91','IGNF','131','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG766_TUBU69_4978','MHPF 1969 (TUBUAI) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUBU69','EPSG','4978',NULL,237.17,171.61,-77.84,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG766_TUBU69_4978_USAGE','helmert_transformation','IGNF','TSG766_TUBU69_4978','IGNF','131','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG766_TUBU69G_TO_WGS84GDD','MHPF 1969 (TUBUAI) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUBU69G','IGNF','WGS84GDD',NULL,237.17,171.61,-77.84,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG766_TUBU69G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG766_TUBU69G_TO_WGS84GDD','IGNF','131','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG766_TUBU69G_TO_WGS84G','MHPF 1969 (TUBUAI) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUBU69G','IGNF','WGS84G',NULL,237.17,171.61,-77.84,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG766_TUBU69G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG766_TUBU69G_TO_WGS84G','IGNF','131','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG766_TUBU69G_TO_4326','MHPF 1969 (TUBUAI) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUBU69G','EPSG','4326',NULL,237.17,171.61,-77.84,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG766_TUBU69G_TO_4326_USAGE','helmert_transformation','IGNF','TSG766_TUBU69G_TO_4326','IGNF','131','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','132','KAUEHI - TUAMOTU','KAUEHI - TUAMOTU',-16,-15.67,-145.33,-145,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG754','MHPF70 (KAUEHI) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','KAUE70','IGNF','WGS84',NULL,126.74,300.10,-75.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG754_USAGE','helmert_transformation','IGNF','TSG754','IGNF','132','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG754_KAUE70_RRAF91','MHPF70 (KAUEHI) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','KAUE70','IGNF','RRAF91',NULL,126.74,300.10,-75.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG754_KAUE70_RRAF91_USAGE','helmert_transformation','IGNF','TSG754_KAUE70_RRAF91','IGNF','132','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG754_KAUE70_4978','MHPF70 (KAUEHI) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','KAUE70','EPSG','4978',NULL,126.74,300.10,-75.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG754_KAUE70_4978_USAGE','helmert_transformation','IGNF','TSG754_KAUE70_4978','IGNF','132','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG754_KAUE70G_TO_WGS84GDD','MHPF70 (KAUEHI) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','KAUE70G','IGNF','WGS84GDD',NULL,126.74,300.10,-75.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG754_KAUE70G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG754_KAUE70G_TO_WGS84GDD','IGNF','132','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG754_KAUE70G_TO_WGS84G','MHPF70 (KAUEHI) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','KAUE70G','IGNF','WGS84G',NULL,126.74,300.10,-75.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG754_KAUE70G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG754_KAUE70G_TO_WGS84G','IGNF','132','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG754_KAUE70G_TO_4326','MHPF70 (KAUEHI) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','KAUE70G','EPSG','4326',NULL,126.74,300.10,-75.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG754_KAUE70G_TO_4326_USAGE','helmert_transformation','IGNF','TSG754_KAUE70G_TO_4326','IGNF','132','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','133','ILE DE MOOREA','ILE DE MOOREA',-17.7000000000,-17.3500000000,-150.0500000000,-149.6500000000,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1189','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers MOOREA 1981 (MOOREA_SAU 2001)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','MOOREA81',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf10-Moorea.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1189_USAGE','grid_transformation','IGNF','TSG1189','IGNF','133','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1011','MOOREA 1987 vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','MOOREA87','IGNF','RGPF',NULL,218.697,151.257,176.995,'EPSG','9001',3.5048,2.0040,1.2810,'EPSG','9104', 10.9910,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1011_USAGE','helmert_transformation','IGNF','TSG1011','IGNF','133','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1011_MOOREA87GEO_TO_RGPFGEO','MOOREA 1987 vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','MOOREA87GEO','IGNF','RGPFGEO',NULL,218.697,151.257,176.995,'EPSG','9001',3.5048,2.0040,1.2810,'EPSG','9104',10.9910,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1011_MOOREA87GEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG1011_MOOREA87GEO_TO_RGPFGEO','IGNF','133','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1011_MOOREA87G_TO_RGPFGDD','MOOREA 1987 vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MOOREA87G','IGNF','RGPFGDD',NULL,218.697,151.257,176.995,'EPSG','9001',3.5048,2.0040,1.2810,'EPSG','9104',10.9910,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1011_MOOREA87G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1011_MOOREA87G_TO_RGPFGDD','IGNF','133','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1011_MOOREA87G_TO_RGPFG','MOOREA 1987 vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','MOOREA87G','IGNF','RGPFG',NULL,218.697,151.257,176.995,'EPSG','9001',3.5048,2.0040,1.2810,'EPSG','9104',10.9910,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1011_MOOREA87G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1011_MOOREA87G_TO_RGPFG','IGNF','133','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG785','MOP 1983 (MAUPITI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MAUPITI','IGNF','RGPF',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG785_USAGE','helmert_transformation','IGNF','TSG785','IGNF','40','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG785_MAUPITIG_TO_RGPFGDD','MOP 1983 (MAUPITI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MAUPITIG','IGNF','RGPFGDD',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG785_MAUPITIG_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG785_MAUPITIG_TO_RGPFGDD','IGNF','40','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG785_MAUPITIG_TO_RGPFG','MOP 1983 (MAUPITI) vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MAUPITIG','IGNF','RGPFG',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG785_MAUPITIG_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG785_MAUPITIG_TO_RGPFG','IGNF','40','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','134','FANGATAUFA - TUAMOTU','FANGATAUFA - TUAMOTU',-22.33,-22.15,-138.83,-138.58,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG749','MOP84 (FANGATAUFA 1984) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','FANGA84','IGNF','WGS84',NULL,150.57,158.33,118.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG749_USAGE','helmert_transformation','IGNF','TSG749','IGNF','134','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG749_FANGA84_RRAF91','MOP84 (FANGATAUFA 1984) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','FANGA84','IGNF','RRAF91',NULL,150.57,158.33,118.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG749_FANGA84_RRAF91_USAGE','helmert_transformation','IGNF','TSG749_FANGA84_RRAF91','IGNF','134','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG749_FANGA84_4978','MOP84 (FANGATAUFA 1984) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','FANGA84','EPSG','4978',NULL,150.57,158.33,118.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG749_FANGA84_4978_USAGE','helmert_transformation','IGNF','TSG749_FANGA84_4978','IGNF','134','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG749_FANGA84G_TO_WGS84GDD','MOP84 (FANGATAUFA 1984) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','FANGA84G','IGNF','WGS84GDD',NULL,150.57,158.33,118.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG749_FANGA84G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG749_FANGA84G_TO_WGS84GDD','IGNF','134','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG749_FANGA84G_TO_WGS84G','MOP84 (FANGATAUFA 1984) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','FANGA84G','IGNF','WGS84G',NULL,150.57,158.33,118.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG749_FANGA84G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG749_FANGA84G_TO_WGS84G','IGNF','134','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG749_FANGA84G_TO_4326','MOP84 (FANGATAUFA 1984) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','FANGA84G','EPSG','4326',NULL,150.57,158.33,118.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG749_FANGA84G_TO_4326_USAGE','helmert_transformation','IGNF','TSG749_FANGA84G_TO_4326','IGNF','134','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','135','HAO - TUAMOTU','HAO - TUAMOTU',-18.5,-18,-141.17,-140.58,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','IGNF','WGS84',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_USAGE','helmert_transformation','IGNF','TSG763','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_TUAM86_RRAF91','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','IGNF','RRAF91',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_TUAM86_RRAF91_USAGE','helmert_transformation','IGNF','TSG763_TUAM86_RRAF91','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_TUAM86_4978','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','EPSG','4978',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_TUAM86_4978_USAGE','helmert_transformation','IGNF','TSG763_TUAM86_4978','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_APAT86_WGS84','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','IGNF','WGS84',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_APAT86_WGS84_USAGE','helmert_transformation','IGNF','TSG763_APAT86_WGS84','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_APAT86_RRAF91','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','IGNF','RRAF91',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_APAT86_RRAF91_USAGE','helmert_transformation','IGNF','TSG763_APAT86_RRAF91','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_APAT86_4978','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','EPSG','4978',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_APAT86_4978_USAGE','helmert_transformation','IGNF','TSG763_APAT86_4978','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_TUAM86G_TO_WGS84GDD','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','IGNF','WGS84GDD',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_TUAM86G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG763_TUAM86G_TO_WGS84GDD','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_APAT86G_TO_WGS84GDD','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','IGNF','WGS84GDD',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_APAT86G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG763_APAT86G_TO_WGS84GDD','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_TUAM86G_TO_WGS84G','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','IGNF','WGS84G',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_TUAM86G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG763_TUAM86G_TO_WGS84G','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_TUAM86G_TO_4326','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','EPSG','4326',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_TUAM86G_TO_4326_USAGE','helmert_transformation','IGNF','TSG763_TUAM86G_TO_4326','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_APAT86G_TO_WGS84G','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','IGNF','WGS84G',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_APAT86G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG763_APAT86G_TO_WGS84G','IGNF','135','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG763_APAT86G_TO_4326','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','EPSG','4326',NULL,143.60,197.82,74.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG763_APAT86G_TO_4326_USAGE','helmert_transformation','IGNF','TSG763_APAT86G_TO_4326','IGNF','135','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','136','RAPA - AUSTRALES','RAPA - AUSTRALES',-27.75,-27.5,-144.5,-144.25,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','IGNF','WGS84',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_USAGE','helmert_transformation','IGNF','TSG764','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_TUAM86_RRAF91','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','IGNF','RRAF91',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_TUAM86_RRAF91_USAGE','helmert_transformation','IGNF','TSG764_TUAM86_RRAF91','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_TUAM86_4978','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','EPSG','4978',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_TUAM86_4978_USAGE','helmert_transformation','IGNF','TSG764_TUAM86_4978','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_APAT86_WGS84','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','IGNF','WGS84',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_APAT86_WGS84_USAGE','helmert_transformation','IGNF','TSG764_APAT86_WGS84','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_APAT86_RRAF91','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','IGNF','RRAF91',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_APAT86_RRAF91_USAGE','helmert_transformation','IGNF','TSG764_APAT86_RRAF91','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_APAT86_4978','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','EPSG','4978',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_APAT86_4978_USAGE','helmert_transformation','IGNF','TSG764_APAT86_4978','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_TUAM86G_TO_WGS84GDD','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','IGNF','WGS84GDD',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_TUAM86G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG764_TUAM86G_TO_WGS84GDD','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_APAT86G_TO_WGS84GDD','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','IGNF','WGS84GDD',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_APAT86G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG764_APAT86G_TO_WGS84GDD','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_TUAM86G_TO_WGS84G','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','IGNF','WGS84G',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_TUAM86G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG764_TUAM86G_TO_WGS84G','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_TUAM86G_TO_4326','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','EPSG','4326',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_TUAM86G_TO_4326_USAGE','helmert_transformation','IGNF','TSG764_TUAM86G_TO_4326','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_APAT86G_TO_WGS84G','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','IGNF','WGS84G',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_APAT86G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG764_APAT86G_TO_WGS84G','IGNF','136','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG764_APAT86G_TO_4326','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','EPSG','4326',NULL,207.14,128.41,38.50,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG764_APAT86G_TO_4326_USAGE','helmert_transformation','IGNF','TSG764_APAT86G_TO_4326','IGNF','136','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','137','APATAKI - TUAMOTU','APATAKI - TUAMOTU',-15.63,-15.29,-146.46,-146.18,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','IGNF','WGS84',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_USAGE','helmert_transformation','IGNF','TSG765','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_TUAM86_RRAF91','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','IGNF','RRAF91',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_TUAM86_RRAF91_USAGE','helmert_transformation','IGNF','TSG765_TUAM86_RRAF91','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_TUAM86_4978','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TUAM86','EPSG','4978',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_TUAM86_4978_USAGE','helmert_transformation','IGNF','TSG765_TUAM86_4978','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_APAT86_WGS84','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','IGNF','WGS84',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_APAT86_WGS84_USAGE','helmert_transformation','IGNF','TSG765_APAT86_WGS84','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_APAT86_RRAF91','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','IGNF','RRAF91',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_APAT86_RRAF91_USAGE','helmert_transformation','IGNF','TSG765_APAT86_RRAF91','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_APAT86_4978','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','APAT86','EPSG','4978',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_APAT86_4978_USAGE','helmert_transformation','IGNF','TSG765_APAT86_4978','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_TUAM86G_TO_WGS84GDD','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','IGNF','WGS84GDD',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_TUAM86G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG765_TUAM86G_TO_WGS84GDD','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_APAT86G_TO_WGS84GDD','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','IGNF','WGS84GDD',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_APAT86G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG765_APAT86G_TO_WGS84GDD','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_TUAM86G_TO_WGS84G','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','IGNF','WGS84G',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_TUAM86G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG765_TUAM86G_TO_WGS84G','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_TUAM86G_TO_4326','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TUAM86G','EPSG','4326',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_TUAM86G_TO_4326_USAGE','helmert_transformation','IGNF','TSG765_TUAM86G_TO_4326','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_APAT86G_TO_WGS84G','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','IGNF','WGS84G',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_APAT86G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG765_APAT86G_TO_WGS84G','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG765_APAT86G_TO_4326','MOP86 (APATAKI - RAPA - HAO) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','APAT86G','EPSG','4326',NULL,216.84,118.81,19.61,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG765_APAT86G_TO_4326_USAGE','helmert_transformation','IGNF','TSG765_APAT86G_TO_4326','IGNF','137','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1003','MOP90 (TETIAROA) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TETIA90','IGNF','RGPF',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1003_USAGE','helmert_transformation','IGNF','TSG1003','IGNF','40','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1003_MOP90_RGPF','MOP90 (TETIAROA) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MOP90','IGNF','RGPF',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1003_MOP90_RGPF_USAGE','helmert_transformation','IGNF','TSG1003_MOP90_RGPF','IGNF','40','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1003_TETIA90G_TO_RGPFGDD','MOP90 (TETIAROA) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TETIA90G','IGNF','RGPFGDD',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1003_TETIA90G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1003_TETIA90G_TO_RGPFGDD','IGNF','40','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1003_MOP90G_TO_RGPFGDD','MOP90 (TETIAROA) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MOP90G','IGNF','RGPFGDD',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1003_MOP90G_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1003_MOP90G_TO_RGPFGDD','IGNF','40','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1003_TETIA90G_TO_RGPFG','MOP90 (TETIAROA) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TETIA90G','IGNF','RGPFG',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1003_TETIA90G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1003_TETIA90G_TO_RGPFG','IGNF','40','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1003_MOP90G_TO_RGPFG','MOP90 (TETIAROA) ILES DE LA SOCIETE vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MOP90G','IGNF','RGPFG',NULL,217.037,86.959,23.956,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1003_MOP90G_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1003_MOP90G_TO_RGPFG','IGNF','40','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','138','TETIAROA - SOCIETE','TETIAROA - SOCIETE',-17.1,-17.02,-149.6,-149.53,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TETIA90','IGNF','WGS84',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_USAGE','helmert_transformation','IGNF','TSG755','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_TETIA90_RRAF91','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TETIA90','IGNF','RRAF91',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_TETIA90_RRAF91_USAGE','helmert_transformation','IGNF','TSG755_TETIA90_RRAF91','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_TETIA90_4978','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TETIA90','EPSG','4978',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_TETIA90_4978_USAGE','helmert_transformation','IGNF','TSG755_TETIA90_4978','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_MOP90_WGS84','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MOP90','IGNF','WGS84',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_MOP90_WGS84_USAGE','helmert_transformation','IGNF','TSG755_MOP90_WGS84','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_MOP90_RRAF91','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MOP90','IGNF','RRAF91',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_MOP90_RRAF91_USAGE','helmert_transformation','IGNF','TSG755_MOP90_RRAF91','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_MOP90_4978','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','MOP90','EPSG','4978',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_MOP90_4978_USAGE','helmert_transformation','IGNF','TSG755_MOP90_4978','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_TETIA90G_TO_WGS84GDD','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TETIA90G','IGNF','WGS84GDD',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_TETIA90G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG755_TETIA90G_TO_WGS84GDD','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_MOP90G_TO_WGS84GDD','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MOP90G','IGNF','WGS84GDD',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_MOP90G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG755_MOP90G_TO_WGS84GDD','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_TETIA90G_TO_WGS84G','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TETIA90G','IGNF','WGS84G',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_TETIA90G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG755_TETIA90G_TO_WGS84G','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_TETIA90G_TO_4326','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TETIA90G','EPSG','4326',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_TETIA90G_TO_4326_USAGE','helmert_transformation','IGNF','TSG755_TETIA90G_TO_4326','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_MOP90G_TO_WGS84G','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MOP90G','IGNF','WGS84G',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_MOP90G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG755_MOP90G_TO_WGS84G','IGNF','138','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG755_MOP90G_TO_4326','MOP90 (TETIAROA) ILES DE LA SOCIETE vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','MOP90G','EPSG','4326',NULL,-10.80,-1.80,12.77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG755_MOP90G_TO_4326_USAGE','helmert_transformation','IGNF','TSG755_MOP90G_TO_4326','IGNF','138','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','139','ANAA - TUAMOTU','ANAA - TUAMOTU',-17.5,-17.32,-145.6,-145.37,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ANAA92','IGNF','WGS84',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_USAGE','helmert_transformation','IGNF','TSG759','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92_RRAF91','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ANAA92','IGNF','RRAF91',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92_RRAF91_USAGE','helmert_transformation','IGNF','TSG759_ANAA92_RRAF91','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92_4978','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','ANAA92','EPSG','4978',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92_4978_USAGE','helmert_transformation','IGNF','TSG759_ANAA92_4978','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92GEO_TO_WGS84GEODD','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','ANAA92GEO','IGNF','WGS84GEODD',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG759_ANAA92GEO_TO_WGS84GEODD','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92GEO_TO_WGS84GEO','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','ANAA92GEO','IGNF','WGS84GEO',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG759_ANAA92GEO_TO_WGS84GEO','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92GEO_TO_WGS84RRAFGEO','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','ANAA92GEO','IGNF','WGS84RRAFGEO',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG759_ANAA92GEO_TO_WGS84RRAFGEO','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92G_TO_WGS84GDD','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ANAA92G','IGNF','WGS84GDD',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG759_ANAA92G_TO_WGS84GDD','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92G_TO_WGS84G','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ANAA92G','IGNF','WGS84G',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG759_ANAA92G_TO_WGS84G','IGNF','139','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG759_ANAA92G_TO_4326','MOP92 (ANAA) TUAMOTU vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','ANAA92G','EPSG','4326',NULL,1.50,3.84,4.81,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG759_ANAA92G_TO_4326_USAGE','helmert_transformation','IGNF','TSG759_ANAA92G_TO_4326','IGNF','139','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','140','EUROPE (EVRF2000)','EUROPE (EVRF2000)',36,71.2,-10,32,0); INSERT INTO "other_transformation" VALUES('IGNF','TSG1250','NGF-IGN 1969 vers EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'EPSG','9616','Vertical Offset','IGNF','IGN69','IGNF','EVRF2000',NULL,'EPSG','8603','Vertical Offset',-0.486,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1250_USAGE','other_transformation','IGNF','TSG1250','IGNF','140','IGNF','11'); INSERT INTO "extent" VALUES('IGNF','141','EUROPE (EVRF2007)','EUROPE (EVRF2007)',36,71.2,-10,32,0); INSERT INTO "other_transformation" VALUES('IGNF','TSG1251','NGF-IGN 1969 vers EVRF2007 (EUROPEAN VERTICAL REFERENCE FRAME 2007)',NULL,'EPSG','9616','Vertical Offset','IGNF','IGN69','IGNF','EVRF2007',NULL,'EPSG','8603','Vertical Offset',-0.47,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1251_USAGE','other_transformation','IGNF','TSG1251','IGNF','141','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','142','FRANCE CONTINENTALE','FRANCE CONTINENTALE',42.00,51.50,-5.50,8.50,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1164','RGF93 (ETRS89) vers NGF-IGN 1969',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGF93GEODD','IGNF','IGN69',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAF09.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1164_USAGE','grid_transformation','IGNF','TSG1164','IGNF','142','IGNF','9'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1252','RGF93 (ETRS89) vers NGF-IGN 1969',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGF93GEODD','IGNF','IGN69',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAF18.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1252_USAGE','grid_transformation','IGNF','TSG1252','IGNF','142','IGNF','6'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1163','RGF93 (ETRS89) vers NGF-IGN 1978',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGF93GEODD','IGNF','IGN78C',NULL,'EPSG','8666','Geoid (height correction) model file','https://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAC09.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1163_USAGE','grid_transformation','IGNF','TSG1163','IGNF','86','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1161','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGFG95GEO','IGNF','GUYA77',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggguy15.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1161_USAGE','grid_transformation','IGNF','TSG1161','IGNF','10','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG62','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers EUROPE 1950 (ED50)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NTF','IGNF','ED50',NULL,-84,37,437,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_USAGE','helmert_transformation','IGNF','TSG62','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG62_NTFG_TO_ED50G','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers EUROPE 1950 (ED50)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NTFG','IGNF','ED50G',NULL,-84,37,437,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFG_TO_ED50G_USAGE','helmert_transformation','IGNF','TSG62_NTFG_TO_ED50G','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG62_NTFG_TO_ED50GEO','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers EUROPE 1950 (ED50)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NTFG','IGNF','ED50GEO',NULL,-84,37,437,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFG_TO_ED50GEO_USAGE','helmert_transformation','IGNF','TSG62_NTFG_TO_ED50GEO','IGNF','91','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','143','FRANCE METROPOLITAINE','FRANCE METROPOLITAINE',41.0,52.0,-5.5,10.0,0); INSERT INTO "grid_transformation" VALUES('IGNF','NTFG_TO_RGF93G','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers RGF93 (ETRS89)',NULL,'EPSG','9615','NTv2','IGNF','NTFG','IGNF','RGF93G',NULL,'EPSG','8656','Latitude and longitude difference file','ntf_r93.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'NTFG_TO_RGF93G_USAGE','grid_transformation','IGNF','NTFG_TO_RGF93G','IGNF','143','IGNF','6'); INSERT INTO "grid_transformation" VALUES('IGNF','IGNF_NTFG_TO_EPSG_4326','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers RGF93 (ETRS89)',NULL,'EPSG','9615','NTv2','IGNF','NTFG','EPSG','4326',NULL,'EPSG','8656','Latitude and longitude difference file','ntf_r93.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'IGNF_NTFG_TO_EPSG_4326_USAGE','grid_transformation','IGNF','IGNF_NTFG_TO_EPSG_4326','IGNF','143','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG399','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NTF','IGNF','WGS84',NULL,-168,-60,320,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_USAGE','helmert_transformation','IGNF','TSG399','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG399_NTF_RRAF91','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NTF','IGNF','RRAF91',NULL,-168,-60,320,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTF_RRAF91_USAGE','helmert_transformation','IGNF','TSG399_NTF_RRAF91','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG399_NTF_4978','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','NTF','EPSG','4978',NULL,-168,-60,320,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTF_4978_USAGE','helmert_transformation','IGNF','TSG399_NTF_4978','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG399_NTFG_TO_WGS84GDD','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NTFG','IGNF','WGS84GDD',NULL,-168,-60,320,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG399_NTFG_TO_WGS84GDD','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG399_NTFG_TO_WGS84G','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NTFG','IGNF','WGS84G',NULL,-168,-60,320,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG399_NTFG_TO_WGS84G','IGNF','91','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG399_NTFG_TO_4326','NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','NTFG','EPSG','4326',NULL,-168,-60,320,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFG_TO_4326_USAGE','helmert_transformation','IGNF','TSG399_NTFG_TO_4326','IGNF','91','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','144','LUXEMBOURG','LUXEMBOURG',49.45,50.18,5.73,6.53,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','LURES','IGNF','WGS84',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104', 0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_USAGE','helmert_transformation','IGNF','TSG802','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LURES_RRAF91','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','LURES','IGNF','RRAF91',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104', 0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LURES_RRAF91_USAGE','helmert_transformation','IGNF','TSG802_LURES_RRAF91','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LURES_4978','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','LURES','EPSG','4978',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104', 0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LURES_4978_USAGE','helmert_transformation','IGNF','TSG802_LURES_4978','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LUREF_WGS84','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','LUREF','IGNF','WGS84',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104', 0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LUREF_WGS84_USAGE','helmert_transformation','IGNF','TSG802_LUREF_WGS84','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LUREF_RRAF91','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','LUREF','IGNF','RRAF91',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104', 0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LUREF_RRAF91_USAGE','helmert_transformation','IGNF','TSG802_LUREF_RRAF91','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LUREF_4978','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','LUREF','EPSG','4978',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104', 0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LUREF_4978_USAGE','helmert_transformation','IGNF','TSG802_LUREF_4978','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LURESG_TO_WGS84GDD','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','LURESG','IGNF','WGS84GDD',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104',0.43,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LURESG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG802_LURESG_TO_WGS84GDD','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LUXGEO_TO_WGS84GDD','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','LUXGEO','IGNF','WGS84GDD',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104',0.43,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LUXGEO_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG802_LUXGEO_TO_WGS84GDD','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LURESG_TO_WGS84G','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','LURESG','IGNF','WGS84G',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104',0.43,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LURESG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG802_LURESG_TO_WGS84G','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LURESG_TO_4326','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','LURESG','EPSG','4326',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104',0.43,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LURESG_TO_4326_USAGE','helmert_transformation','IGNF','TSG802_LURESG_TO_4326','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LUXGEO_TO_WGS84G','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','LUXGEO','IGNF','WGS84G',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104',0.43,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LUXGEO_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG802_LUXGEO_TO_WGS84G','IGNF','144','IGNF','6'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG802_LUXGEO_TO_4326','NOUVELLE TRIANGULATION DU GRAND DUCHE DE LUXEMBOURG (LURES) vers WGS 84',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','LUXGEO','EPSG','4326',NULL,-192.986,13.673,-39.309,'EPSG','9001',-0.409900,-2.933200,2.688100,'EPSG','9104',0.43,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG802_LUXGEO_TO_4326_USAGE','helmert_transformation','IGNF','TSG802_LUXGEO_TO_4326','IGNF','144','IGNF','6'); INSERT INTO "other_transformation" VALUES('IGNF','TSG1240','NTF geographiques Paris (gr) vers NTF GEOGRAPHIQUES GREENWICH (DMS)',NULL,'EPSG','9601','Longitude rotation','IGNF','NTFPGRAD','IGNF','NTFG',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1240_USAGE','other_transformation','IGNF','TSG1240','IGNF','143','IGNF','6'); INSERT INTO "other_transformation" VALUES('IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG','NTF geographiques Paris (gr) vers NTF GEOGRAPHIQUES GREENWICH (DMS)',NULL,'EPSG','9601','Longitude rotation','IGNF','NTFP','IGNF','NTFG',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1240_IGNF_NTFP_TO_IGNF_NTFG_USAGE','other_transformation','IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG','IGNF','143','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','145','TERRE ADELIE - ILE DES PETRELS','TERRE ADELIE - ILE DES PETRELS',-68,-66.17,139.67,140.17,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG608','PETRELS-IGN 1972 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','PETRELS72','IGNF','WGS84',NULL,365,194,166,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG608_USAGE','helmert_transformation','IGNF','TSG608','IGNF','145','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG608_PETRELS72_RRAF91','PETRELS-IGN 1972 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','PETRELS72','IGNF','RRAF91',NULL,365,194,166,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG608_PETRELS72_RRAF91_USAGE','helmert_transformation','IGNF','TSG608_PETRELS72_RRAF91','IGNF','145','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG608_PETRELS72_4978','PETRELS-IGN 1972 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','PETRELS72','EPSG','4978',NULL,365,194,166,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG608_PETRELS72_4978_USAGE','helmert_transformation','IGNF','TSG608_PETRELS72_4978','IGNF','145','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG608_PETRELS72G_TO_WGS84GDD','PETRELS-IGN 1972 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PETRELS72G','IGNF','WGS84GDD',NULL,365,194,166,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG608_PETRELS72G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG608_PETRELS72G_TO_WGS84GDD','IGNF','145','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG608_PETRELS72G_TO_WGS84G','PETRELS-IGN 1972 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PETRELS72G','IGNF','WGS84G',NULL,365,194,166,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG608_PETRELS72G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG608_PETRELS72G_TO_WGS84G','IGNF','145','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG608_PETRELS72G_TO_4326','PETRELS-IGN 1972 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PETRELS72G','EPSG','4326',NULL,365,194,166,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG608_PETRELS72G_TO_4326_USAGE','helmert_transformation','IGNF','TSG608_PETRELS72G_TO_4326','IGNF','145','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','PGP50','IGNF','RGTAAF07',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_USAGE','helmert_transformation','IGNF','TSG815','IGNF','48','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815_TERA50_RGTAAF07','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TERA50','IGNF','RGTAAF07',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_TERA50_RGTAAF07_USAGE','helmert_transformation','IGNF','TSG815_TERA50_RGTAAF07','IGNF','48','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815_TERA50GEO_TO_RGTAAFGEODD','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TERA50GEO','IGNF','RGTAAFGEODD',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_TERA50GEO_TO_RGTAAFGEODD_USAGE','helmert_transformation','IGNF','TSG815_TERA50GEO_TO_RGTAAFGEODD','IGNF','48','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815_TERA50GEO_TO_RGTAAFGEO','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TERA50GEO','IGNF','RGTAAFGEO',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_TERA50GEO_TO_RGTAAFGEO_USAGE','helmert_transformation','IGNF','TSG815_TERA50GEO_TO_RGTAAFGEO','IGNF','48','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815_PGP50G_TO_RGTAAF07GDD','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PGP50G','IGNF','RGTAAF07GDD',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_PGP50G_TO_RGTAAF07GDD_USAGE','helmert_transformation','IGNF','TSG815_PGP50G_TO_RGTAAF07GDD','IGNF','48','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815_TERA50G_TO_RGTAAF07GDD','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TERA50G','IGNF','RGTAAF07GDD',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_TERA50G_TO_RGTAAF07GDD_USAGE','helmert_transformation','IGNF','TSG815_TERA50G_TO_RGTAAF07GDD','IGNF','48','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815_PGP50G_TO_RGTAAF07G','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PGP50G','IGNF','RGTAAF07G',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_PGP50G_TO_RGTAAF07G_USAGE','helmert_transformation','IGNF','TSG815_PGP50G_TO_RGTAAF07G','IGNF','48','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG815_TERA50G_TO_RGTAAF07G','POINTE GEOLOGIE-PERROUD 1950 vers RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007)',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TERA50G','IGNF','RGTAAF07G',NULL,324.912,153.282,172.026,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG815_TERA50G_TO_RGTAAF07G_USAGE','helmert_transformation','IGNF','TSG815_TERA50G_TO_RGTAAF07G','IGNF','48','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','146','TERRE ADELIE','TERRE ADELIE',-66.72,-66.6,139.67,140.12,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','PGP50','IGNF','WGS84',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_USAGE','helmert_transformation','IGNF','TSG586','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_PGP50_RRAF91','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','PGP50','IGNF','RRAF91',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_PGP50_RRAF91_USAGE','helmert_transformation','IGNF','TSG586_PGP50_RRAF91','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_PGP50_4978','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','PGP50','EPSG','4978',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_PGP50_4978_USAGE','helmert_transformation','IGNF','TSG586_PGP50_4978','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50_WGS84','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TERA50','IGNF','WGS84',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50_WGS84_USAGE','helmert_transformation','IGNF','TSG586_TERA50_WGS84','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50_RRAF91','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TERA50','IGNF','RRAF91',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50_RRAF91_USAGE','helmert_transformation','IGNF','TSG586_TERA50_RRAF91','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50_4978','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TERA50','EPSG','4978',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50_4978_USAGE','helmert_transformation','IGNF','TSG586_TERA50_4978','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50GEO_TO_WGS84GEODD','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TERA50GEO','IGNF','WGS84GEODD',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG586_TERA50GEO_TO_WGS84GEODD','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50GEO_TO_WGS84GEO','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TERA50GEO','IGNF','WGS84GEO',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG586_TERA50GEO_TO_WGS84GEO','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50GEO_TO_WGS84RRAFGEO','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TERA50GEO','IGNF','WGS84RRAFGEO',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG586_TERA50GEO_TO_WGS84RRAFGEO','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_PGP50G_TO_WGS84GDD','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PGP50G','IGNF','WGS84GDD',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_PGP50G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG586_PGP50G_TO_WGS84GDD','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50G_TO_WGS84GDD','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TERA50G','IGNF','WGS84GDD',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG586_TERA50G_TO_WGS84GDD','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_PGP50G_TO_WGS84G','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PGP50G','IGNF','WGS84G',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_PGP50G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG586_PGP50G_TO_WGS84G','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_PGP50G_TO_4326','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','PGP50G','EPSG','4326',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_PGP50G_TO_4326_USAGE','helmert_transformation','IGNF','TSG586_PGP50G_TO_4326','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50G_TO_WGS84G','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TERA50G','IGNF','WGS84G',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG586_TERA50G_TO_WGS84G','IGNF','146','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG586_TERA50G_TO_4326','POINTE GEOLOGIE-PERROUD 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TERA50G','EPSG','4326',NULL,324.8,153.6,172.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG586_TERA50G_TO_4326_USAGE','helmert_transformation','IGNF','TSG586_TERA50G_TO_4326','IGNF','146','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','147','ILE DE RAIATEA','ILE DE RAIATEA',-17.0,-16.5,-151.75,-151.25,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1140','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers RAIATEA_SAU 2001',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','RAIA01',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Raiatea.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1140_USAGE','grid_transformation','IGNF','TSG1140','IGNF','147','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGNC','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_USAGE','helmert_transformation','IGNF','TSG1212','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNC_RRAF91','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGNC','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNC_RRAF91_USAGE','helmert_transformation','IGNF','TSG1212_RGNC_RRAF91','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNC_4978','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGNC','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNC_4978_USAGE','helmert_transformation','IGNF','TSG1212_RGNC_4978','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCGEODD_TO_WGS84GEODD','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGNCGEODD','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCGEODD_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1212_RGNCGEODD_TO_WGS84GEODD','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCGEODD_TO_WGS84GEO','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGNCGEODD','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCGEODD_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1212_RGNCGEODD_TO_WGS84GEO','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCGEODD_TO_WGS84RRAFGEO','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGNCGEODD','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCGEODD_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1212_RGNCGEODD_TO_WGS84RRAFGEO','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCG_TO_WGS84GDD','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGNCG','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1212_RGNCG_TO_WGS84GDD','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCG_TO_WGS84G','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGNCG','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1212_RGNCG_TO_WGS84G','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCG_TO_4326','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGNCG','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCG_TO_4326_USAGE','helmert_transformation','IGNF','TSG1212_RGNCG_TO_4326','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCGEO_TO_WGS84GEODD','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGNCGEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCGEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1212_RGNCGEO_TO_WGS84GEODD','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCGEO_TO_WGS84GEO','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGNCGEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCGEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1212_RGNCGEO_TO_WGS84GEO','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1212_RGNCGEO_TO_WGS84RRAFGEO','RESEAU GEODESIQUE DE NOUVELLE-CALEDONIE (RGNC 1991) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGNCGEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1212_RGNCGEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1212_RGNCGEO_TO_WGS84RRAFGEO','IGNF','58','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','REUN49','IGNF','RGR92',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104', -32.3241,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_USAGE','helmert_transformation','IGNF','TSG601','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601_REUN47_RGR92','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','REUN47','IGNF','RGR92',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104', -32.3241,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_REUN47_RGR92_USAGE','helmert_transformation','IGNF','TSG601_REUN47_RGR92','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601_REUN47GEO_TO_RGR92GEODD','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','REUN47GEO','IGNF','RGR92GEODD',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104',-32.3241,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_REUN47GEO_TO_RGR92GEODD_USAGE','helmert_transformation','IGNF','TSG601_REUN47GEO_TO_RGR92GEODD','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601_REUN47GEO_TO_RGR92GEO','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','REUN47GEO','IGNF','RGR92GEO',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104',-32.3241,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_REUN47GEO_TO_RGR92GEO_USAGE','helmert_transformation','IGNF','TSG601_REUN47GEO_TO_RGR92GEO','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601_REUN49G_TO_RGR92GDD','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','REUN49G','IGNF','RGR92GDD',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104',-32.3241,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_REUN49G_TO_RGR92GDD_USAGE','helmert_transformation','IGNF','TSG601_REUN49G_TO_RGR92GDD','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601_REUN47G_TO_RGR92GDD','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','REUN47G','IGNF','RGR92GDD',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104',-32.3241,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_REUN47G_TO_RGR92GDD_USAGE','helmert_transformation','IGNF','TSG601_REUN47G_TO_RGR92GDD','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601_REUN49G_TO_RGR92G','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','REUN49G','IGNF','RGR92G',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104',-32.3241,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_REUN49G_TO_RGR92G_USAGE','helmert_transformation','IGNF','TSG601_REUN49G_TO_RGR92G','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG601_REUN47G_TO_RGR92G','REUNION-PITON DES NEIGES vers RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','REUN47G','IGNF','RGR92G',NULL,789.524,-626.486,-89.904,'EPSG','9001',0.6006,76.7946,-10.5788,'EPSG','9104',-32.3241,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG601_REUN47G_TO_RGR92G_USAGE','helmert_transformation','IGNF','TSG601_REUN47G_TO_RGR92G','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','REUN49','IGNF','WGS84',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_USAGE','helmert_transformation','IGNF','TSG587','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN49_RRAF91','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','REUN49','IGNF','RRAF91',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN49_RRAF91_USAGE','helmert_transformation','IGNF','TSG587_REUN49_RRAF91','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN49_4978','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','REUN49','EPSG','4978',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN49_4978_USAGE','helmert_transformation','IGNF','TSG587_REUN49_4978','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47_WGS84','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','REUN47','IGNF','WGS84',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47_WGS84_USAGE','helmert_transformation','IGNF','TSG587_REUN47_WGS84','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47_RRAF91','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','REUN47','IGNF','RRAF91',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47_RRAF91_USAGE','helmert_transformation','IGNF','TSG587_REUN47_RRAF91','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47_4978','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','REUN47','EPSG','4978',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47_4978_USAGE','helmert_transformation','IGNF','TSG587_REUN47_4978','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47GEO_TO_WGS84GEODD','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','REUN47GEO','IGNF','WGS84GEODD',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG587_REUN47GEO_TO_WGS84GEODD','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47GEO_TO_WGS84GEO','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','REUN47GEO','IGNF','WGS84GEO',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG587_REUN47GEO_TO_WGS84GEO','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47GEO_TO_WGS84RRAFGEO','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','REUN47GEO','IGNF','WGS84RRAFGEO',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG587_REUN47GEO_TO_WGS84RRAFGEO','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN49G_TO_WGS84GDD','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','REUN49G','IGNF','WGS84GDD',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN49G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG587_REUN49G_TO_WGS84GDD','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47G_TO_WGS84GDD','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','REUN47G','IGNF','WGS84GDD',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG587_REUN47G_TO_WGS84GDD','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN49G_TO_WGS84G','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','REUN49G','IGNF','WGS84G',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN49G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG587_REUN49G_TO_WGS84G','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN49G_TO_4326','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','REUN49G','EPSG','4326',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN49G_TO_4326_USAGE','helmert_transformation','IGNF','TSG587_REUN49G_TO_4326','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47G_TO_WGS84G','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','REUN47G','IGNF','WGS84G',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG587_REUN47G_TO_WGS84G','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG587_REUN47G_TO_4326','REUNION-PITON DES NEIGES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','REUN47G','EPSG','4326',NULL,94,-948,-1262,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG587_REUN47G_TO_4326_USAGE','helmert_transformation','IGNF','TSG587_REUN47G_TO_4326','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGF93','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_USAGE','helmert_transformation','IGNF','TSG1207','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93_RRAF91','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGF93','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93_RRAF91_USAGE','helmert_transformation','IGNF','TSG1207_RGF93_RRAF91','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93_4978','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGF93','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93_4978_USAGE','helmert_transformation','IGNF','TSG1207_RGF93_4978','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GEODD_TO_WGS84GEODD','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGF93GEODD','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GEODD_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GEODD_TO_WGS84GEODD','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GEODD_TO_WGS84GEO','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGF93GEODD','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GEODD_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GEODD_TO_WGS84GEO','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GEODD_TO_WGS84RRAFGEO','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGF93GEODD','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GEODD_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GEODD_TO_WGS84RRAFGEO','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GDD_TO_WGS84GDD','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93GDD','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GDD_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GDD_TO_WGS84GDD','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GDD_TO_WGS84G','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93GDD','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GDD_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GDD_TO_WGS84G','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GDD_TO_4326','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93GDD','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GDD_TO_4326_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GDD_TO_4326','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GEO_TO_WGS84GEODD','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGF93GEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GEO_TO_WGS84GEODD','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GEO_TO_WGS84GEO','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGF93GEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GEO_TO_WGS84GEO','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93GEO_TO_WGS84RRAFGEO','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGF93GEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1207_RGF93GEO_TO_WGS84RRAFGEO','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93G_TO_WGS84GDD','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93G','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1207_RGF93G_TO_WGS84GDD','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93G_TO_WGS84G','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93G','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1207_RGF93G_TO_WGS84G','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1207_RGF93G_TO_4326','RGF93 (ETRS89) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93G','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1207_RGF93G_TO_4326_USAGE','helmert_transformation','IGNF','TSG1207_RGF93G_TO_4326','IGNF','143','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGFG95','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_USAGE','helmert_transformation','IGNF','TSG1211','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95_RRAF91','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGFG95','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95_RRAF91_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95_RRAF91','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95_4978','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGFG95','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95_4978_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95_4978','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GDD_TO_WGS84GDD','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGFG95GDD','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GDD_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GDD_TO_WGS84GDD','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GDD_TO_WGS84G','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGFG95GDD','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GDD_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GDD_TO_WGS84G','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GDD_TO_4326','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGFG95GDD','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GDD_TO_4326_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GDD_TO_4326','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GEODD_TO_WGS84GEODD','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGFG95GEODD','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GEODD_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GEODD_TO_WGS84GEODD','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GEODD_TO_WGS84GEO','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGFG95GEODD','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GEODD_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GEODD_TO_WGS84GEO','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GEODD_TO_WGS84RRAFGEO','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGFG95GEODD','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GEODD_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GEODD_TO_WGS84RRAFGEO','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95G_TO_WGS84GDD','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGFG95G','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95G_TO_WGS84GDD','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95G_TO_WGS84G','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGFG95G','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95G_TO_WGS84G','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95G_TO_4326','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGFG95G','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95G_TO_4326_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95G_TO_4326','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GEO_TO_WGS84GEODD','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGFG95GEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GEO_TO_WGS84GEODD','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GEO_TO_WGS84GEO','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGFG95GEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GEO_TO_WGS84GEO','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1211_RGFG95GEO_TO_WGS84RRAFGEO','RGFG95 (RESEAU GEODESIQUE FRANCAIS DE GUYANE 1995) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGFG95GEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1211_RGFG95GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1211_RGFG95GEO_TO_WGS84RRAFGEO','IGNF','10','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGM04','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_USAGE','helmert_transformation','IGNF','TSG1208','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04_RRAF91','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGM04','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04_RRAF91_USAGE','helmert_transformation','IGNF','TSG1208_RGM04_RRAF91','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04_4978','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGM04','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04_4978_USAGE','helmert_transformation','IGNF','TSG1208_RGM04_4978','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GEODD_TO_WGS84GEODD','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGM04GEODD','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GEODD_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GEODD_TO_WGS84GEODD','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GEODD_TO_WGS84GEO','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGM04GEODD','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GEODD_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GEODD_TO_WGS84GEO','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GEODD_TO_WGS84RRAFGEO','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGM04GEODD','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GEODD_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GEODD_TO_WGS84RRAFGEO','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GDD_TO_WGS84GDD','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGM04GDD','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GDD_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GDD_TO_WGS84GDD','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GDD_TO_WGS84G','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGM04GDD','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GDD_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GDD_TO_WGS84G','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GDD_TO_4326','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGM04GDD','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GDD_TO_4326_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GDD_TO_4326','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04G_TO_WGS84GDD','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGM04G','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1208_RGM04G_TO_WGS84GDD','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04G_TO_WGS84G','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGM04G','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1208_RGM04G_TO_WGS84G','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04G_TO_4326','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGM04G','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04G_TO_4326_USAGE','helmert_transformation','IGNF','TSG1208_RGM04G_TO_4326','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GEO_TO_WGS84GEODD','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGM04GEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GEO_TO_WGS84GEODD','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GEO_TO_WGS84GEO','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGM04GEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GEO_TO_WGS84GEO','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1208_RGM04GEO_TO_WGS84RRAFGEO','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGM04GEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1208_RGM04GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1208_RGM04GEO_TO_WGS84RRAFGEO','IGNF','89','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGPF','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_USAGE','helmert_transformation','IGNF','TSG1213','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPF_RRAF91','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGPF','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPF_RRAF91_USAGE','helmert_transformation','IGNF','TSG1213_RGPF_RRAF91','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPF_4978','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGPF','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPF_4978_USAGE','helmert_transformation','IGNF','TSG1213_RGPF_4978','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFGDD_TO_WGS84GDD','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGPFGDD','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFGDD_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1213_RGPFGDD_TO_WGS84GDD','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFGDD_TO_WGS84G','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGPFGDD','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFGDD_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1213_RGPFGDD_TO_WGS84G','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFGDD_TO_4326','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGPFGDD','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFGDD_TO_4326_USAGE','helmert_transformation','IGNF','TSG1213_RGPFGDD_TO_4326','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFGEO_TO_WGS84GEODD','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGPFGEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFGEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1213_RGPFGEO_TO_WGS84GEODD','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFGEO_TO_WGS84GEO','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGPFGEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFGEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1213_RGPFGEO_TO_WGS84GEO','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFGEO_TO_WGS84RRAFGEO','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGPFGEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFGEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1213_RGPFGEO_TO_WGS84RRAFGEO','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFG_TO_WGS84GDD','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGPFG','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1213_RGPFG_TO_WGS84GDD','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFG_TO_WGS84G','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGPFG','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1213_RGPFG_TO_WGS84G','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1213_RGPFG_TO_4326','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGPFG','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1213_RGPFG_TO_4326_USAGE','helmert_transformation','IGNF','TSG1213_RGPFG_TO_4326','IGNF','59','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RGR92','IGNF','REUN49',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104', 32.2083,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_USAGE','helmert_transformation','IGNF','TSG355','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355_RGR92_REUN47','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RGR92','IGNF','REUN47',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104', 32.2083,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_RGR92_REUN47_USAGE','helmert_transformation','IGNF','TSG355_RGR92_REUN47','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355_RGR92GEODD_TO_REUN47GEO','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RGR92GEODD','IGNF','REUN47GEO',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104',32.2083,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_RGR92GEODD_TO_REUN47GEO_USAGE','helmert_transformation','IGNF','TSG355_RGR92GEODD_TO_REUN47GEO','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355_RGR92GDD_TO_REUN49G','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RGR92GDD','IGNF','REUN49G',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104',32.2083,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_RGR92GDD_TO_REUN49G_USAGE','helmert_transformation','IGNF','TSG355_RGR92GDD_TO_REUN49G','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355_RGR92GDD_TO_REUN47G','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RGR92GDD','IGNF','REUN47G',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104',32.2083,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_RGR92GDD_TO_REUN47G_USAGE','helmert_transformation','IGNF','TSG355_RGR92GDD_TO_REUN47G','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355_RGR92GEO_TO_REUN47GEO','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RGR92GEO','IGNF','REUN47GEO',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104',32.2083,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_RGR92GEO_TO_REUN47GEO_USAGE','helmert_transformation','IGNF','TSG355_RGR92GEO_TO_REUN47GEO','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355_RGR92G_TO_REUN49G','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RGR92G','IGNF','REUN49G',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104',32.2083,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_RGR92G_TO_REUN49G_USAGE','helmert_transformation','IGNF','TSG355_RGR92G_TO_REUN49G','IGNF','56','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG355_RGR92G_TO_REUN47G','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers REUNION-PITON DES NEIGES',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RGR92G','IGNF','REUN47G',NULL,-789.990,627.333,89.685,'EPSG','9001',-0.6072,-76.8019,10.5680,'EPSG','9104',32.2083,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG355_RGR92G_TO_REUN47G_USAGE','helmert_transformation','IGNF','TSG355_RGR92G_TO_REUN47G','IGNF','56','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','148','REUNION','REUNION',-21.42,-20.75,55.17,55.92,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGR92','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_USAGE','helmert_transformation','IGNF','TSG731','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92_RRAF91','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGR92','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92_RRAF91_USAGE','helmert_transformation','IGNF','TSG731_RGR92_RRAF91','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92_4978','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGR92','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92_4978_USAGE','helmert_transformation','IGNF','TSG731_RGR92_4978','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GEODD_TO_WGS84GEODD','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGR92GEODD','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GEODD_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG731_RGR92GEODD_TO_WGS84GEODD','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GEODD_TO_WGS84GEO','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGR92GEODD','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GEODD_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG731_RGR92GEODD_TO_WGS84GEO','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GEODD_TO_WGS84RRAFGEO','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGR92GEODD','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GEODD_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG731_RGR92GEODD_TO_WGS84RRAFGEO','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GDD_TO_WGS84GDD','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGR92GDD','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GDD_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG731_RGR92GDD_TO_WGS84GDD','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GDD_TO_WGS84G','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGR92GDD','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GDD_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG731_RGR92GDD_TO_WGS84G','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GDD_TO_4326','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGR92GDD','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GDD_TO_4326_USAGE','helmert_transformation','IGNF','TSG731_RGR92GDD_TO_4326','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GEO_TO_WGS84GEODD','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGR92GEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG731_RGR92GEO_TO_WGS84GEODD','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GEO_TO_WGS84GEO','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGR92GEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG731_RGR92GEO_TO_WGS84GEO','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92GEO_TO_WGS84RRAFGEO','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGR92GEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG731_RGR92GEO_TO_WGS84RRAFGEO','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92G_TO_WGS84GDD','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGR92G','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG731_RGR92G_TO_WGS84GDD','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92G_TO_WGS84G','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGR92G','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG731_RGR92G_TO_WGS84G','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG731_RGR92G_TO_4326','RGR92 (RESEAU GEODESIQUE DE LA REUNION 1992) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGR92G','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG731_RGR92G_TO_4326_USAGE','helmert_transformation','IGNF','TSG731_RGR92G_TO_4326','IGNF','148','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGSPM06','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_USAGE','helmert_transformation','IGNF','TSG1209','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06_RRAF91','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGSPM06','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06_RRAF91_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06_RRAF91','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06_4978','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGSPM06','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06_4978_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06_4978','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GDD_TO_WGS84GDD','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGSPM06GDD','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GDD_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GDD_TO_WGS84GDD','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GDD_TO_WGS84G','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGSPM06GDD','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GDD_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GDD_TO_WGS84G','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GDD_TO_4326','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGSPM06GDD','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GDD_TO_4326_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GDD_TO_4326','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GEODD_TO_WGS84GEODD','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGSPM06GEODD','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GEODD_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GEODD_TO_WGS84GEODD','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GEODD_TO_WGS84GEO','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGSPM06GEODD','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GEODD_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GEODD_TO_WGS84GEO','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GEODD_TO_WGS84RRAFGEO','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGSPM06GEODD','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GEODD_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GEODD_TO_WGS84RRAFGEO','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GEO_TO_WGS84GEODD','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGSPM06GEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GEO_TO_WGS84GEODD','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GEO_TO_WGS84GEO','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGSPM06GEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GEO_TO_WGS84GEO','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06GEO_TO_WGS84RRAFGEO','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGSPM06GEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06GEO_TO_WGS84RRAFGEO','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06G_TO_WGS84GDD','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGSPM06G','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06G_TO_WGS84GDD','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06G_TO_WGS84G','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGSPM06G','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06G_TO_WGS84G','IGNF','60','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1209_RGSPM06G_TO_4326','RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGSPM06G','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1209_RGSPM06G_TO_4326_USAGE','helmert_transformation','IGNF','TSG1209_RGSPM06G_TO_4326','IGNF','60','IGNF','12'); INSERT INTO "extent" VALUES('IGNF','149','TAAF','TAAF',-90,-11,39,142,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGTAAF07','IGNF','WGS84',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_USAGE','helmert_transformation','IGNF','TSG1210','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07_RRAF91','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGTAAF07','IGNF','RRAF91',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07_RRAF91_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07_RRAF91','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07_4978','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGTAAF07','EPSG','4978',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07_4978_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07_4978','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAFGEODD_TO_WGS84GEODD','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGTAAFGEODD','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAFGEODD_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAFGEODD_TO_WGS84GEODD','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAFGEODD_TO_WGS84GEO','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGTAAFGEODD','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAFGEODD_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAFGEODD_TO_WGS84GEO','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAFGEODD_TO_WGS84RRAFGEO','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGTAAFGEODD','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAFGEODD_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAFGEODD_TO_WGS84RRAFGEO','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07GDD_TO_WGS84GDD','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGTAAF07GDD','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07GDD_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07GDD_TO_WGS84GDD','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07GDD_TO_WGS84G','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGTAAF07GDD','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07GDD_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07GDD_TO_WGS84G','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07GDD_TO_4326','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGTAAF07GDD','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07GDD_TO_4326_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07GDD_TO_4326','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAFGEO_TO_WGS84GEODD','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGTAAFGEO','IGNF','WGS84GEODD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAFGEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAFGEO_TO_WGS84GEODD','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAFGEO_TO_WGS84GEO','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGTAAFGEO','IGNF','WGS84GEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAFGEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAFGEO_TO_WGS84GEO','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAFGEO_TO_WGS84RRAFGEO','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','RGTAAFGEO','IGNF','WGS84RRAFGEO',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAFGEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAFGEO_TO_WGS84RRAFGEO','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07G_TO_WGS84GDD','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGTAAF07G','IGNF','WGS84GDD',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07G_TO_WGS84GDD','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07G_TO_WGS84G','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGTAAF07G','IGNF','WGS84G',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07G_TO_WGS84G','IGNF','149','IGNF','12'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1210_RGTAAF07G_TO_4326','RGTAAF07 (RESEAU GEODESIQUE DES TAAF 2007) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGTAAF07G','EPSG','4326',NULL,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1210_RGTAAF07G_TO_4326_USAGE','helmert_transformation','IGNF','TSG1210_RGTAAF07G_TO_4326','IGNF','149','IGNF','12'); INSERT INTO "extent" VALUES('IGNF','150','RURUTU - AUSTRALES','RURUTU - AUSTRALES',-22.58,-22.25,-151.5,-151.33,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RUSAT84','IGNF','WGS84',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_USAGE','helmert_transformation','IGNF','TSG752','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_RUSAT84_RRAF91','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RUSAT84','IGNF','RRAF91',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_RUSAT84_RRAF91_USAGE','helmert_transformation','IGNF','TSG752_RUSAT84_RRAF91','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_RUSAT84_4978','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RUSAT84','EPSG','4978',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_RUSAT84_4978_USAGE','helmert_transformation','IGNF','TSG752_RUSAT84_4978','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_SAT84_WGS84','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','SAT84','IGNF','WGS84',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_SAT84_WGS84_USAGE','helmert_transformation','IGNF','TSG752_SAT84_WGS84','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_SAT84_RRAF91','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','SAT84','IGNF','RRAF91',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_SAT84_RRAF91_USAGE','helmert_transformation','IGNF','TSG752_SAT84_RRAF91','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_SAT84_4978','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','SAT84','EPSG','4978',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_SAT84_4978_USAGE','helmert_transformation','IGNF','TSG752_SAT84_4978','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_RUSAT84G_TO_WGS84GDD','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RUSAT84G','IGNF','WGS84GDD',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_RUSAT84G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG752_RUSAT84G_TO_WGS84GDD','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_SAT84G_TO_WGS84GDD','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','SAT84G','IGNF','WGS84GDD',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_SAT84G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG752_SAT84G_TO_WGS84GDD','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_RUSAT84G_TO_WGS84G','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RUSAT84G','IGNF','WGS84G',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_RUSAT84G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG752_RUSAT84G_TO_WGS84G','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_RUSAT84G_TO_4326','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RUSAT84G','EPSG','4326',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_RUSAT84G_TO_4326_USAGE','helmert_transformation','IGNF','TSG752_RUSAT84G_TO_4326','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_SAT84G_TO_WGS84G','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','SAT84G','IGNF','WGS84G',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_SAT84G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG752_SAT84G_TO_WGS84G','IGNF','150','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG752_SAT84G_TO_4326','SAT84 (RURUTU) ILES AUSTRALES vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','SAT84G','EPSG','4326',NULL,202.13,174.60,-15.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG752_SAT84G_TO_4326_USAGE','helmert_transformation','IGNF','TSG752_SAT84G_TO_4326','IGNF','150','IGNF','5'); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1159','RGM04 (RESEAU GEODESIQUE DE MAYOTTE 2004) vers SHOM 1953 (MAYOTTE)',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGM04GEODD','IGNF','MAYO53',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggm04v1.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1159_USAGE','grid_transformation','IGNF','TSG1159','IGNF','89','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG795','ST-PIERRE-ET-MIQUELON 1950 vers RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','STPM50','IGNF','RGSPM06',NULL,-95.593,573.763,173.442,'EPSG','9001',-0.9602,1.2510,-1.3918,'EPSG','9104', 42.6265,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG795_USAGE','helmert_transformation','IGNF','TSG795','IGNF','60','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG795_STPM50GEO_TO_RGSPM06GEODD','ST-PIERRE-ET-MIQUELON 1950 vers RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','STPM50GEO','IGNF','RGSPM06GEODD',NULL,-95.593,573.763,173.442,'EPSG','9001',-0.9602,1.2510,-1.3918,'EPSG','9104',42.6265,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG795_STPM50GEO_TO_RGSPM06GEODD_USAGE','helmert_transformation','IGNF','TSG795_STPM50GEO_TO_RGSPM06GEODD','IGNF','60','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG795_STPM50GEO_TO_RGSPM06GEO','ST-PIERRE-ET-MIQUELON 1950 vers RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','STPM50GEO','IGNF','RGSPM06GEO',NULL,-95.593,573.763,173.442,'EPSG','9001',-0.9602,1.2510,-1.3918,'EPSG','9104',42.6265,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG795_STPM50GEO_TO_RGSPM06GEO_USAGE','helmert_transformation','IGNF','TSG795_STPM50GEO_TO_RGSPM06GEO','IGNF','60','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG795_STPM50G_TO_RGSPM06GDD','ST-PIERRE-ET-MIQUELON 1950 vers RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','STPM50G','IGNF','RGSPM06GDD',NULL,-95.593,573.763,173.442,'EPSG','9001',-0.9602,1.2510,-1.3918,'EPSG','9104',42.6265,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG795_STPM50G_TO_RGSPM06GDD_USAGE','helmert_transformation','IGNF','TSG795_STPM50G_TO_RGSPM06GDD','IGNF','60','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG795_STPM50G_TO_RGSPM06G','ST-PIERRE-ET-MIQUELON 1950 vers RGSPM06 (RESEAU GEODESIQUE DE SAINT-PIERRE-ET-MIQUELON 2006)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','STPM50G','IGNF','RGSPM06G',NULL,-95.593,573.763,173.442,'EPSG','9001',-0.9602,1.2510,-1.3918,'EPSG','9104',42.6265,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG795_STPM50G_TO_RGSPM06G_USAGE','helmert_transformation','IGNF','TSG795_STPM50G_TO_RGSPM06G','IGNF','60','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','151','SAINT-PIERRE ET MIQUELON','SAINT-PIERRE ET MIQUELON',46.7,47.2,-56.49,-56.1,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','STPM50','IGNF','WGS84',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_USAGE','helmert_transformation','IGNF','TSG812','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50_RRAF91','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','STPM50','IGNF','RRAF91',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50_RRAF91_USAGE','helmert_transformation','IGNF','TSG812_STPM50_RRAF91','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50_4978','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','STPM50','EPSG','4978',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50_4978_USAGE','helmert_transformation','IGNF','TSG812_STPM50_4978','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50GEO_TO_WGS84GEODD','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','STPM50GEO','IGNF','WGS84GEODD',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG812_STPM50GEO_TO_WGS84GEODD','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50GEO_TO_WGS84GEO','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','STPM50GEO','IGNF','WGS84GEO',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG812_STPM50GEO_TO_WGS84GEO','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50GEO_TO_WGS84RRAFGEO','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','STPM50GEO','IGNF','WGS84RRAFGEO',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG812_STPM50GEO_TO_WGS84RRAFGEO','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50G_TO_WGS84GDD','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','STPM50G','IGNF','WGS84GDD',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG812_STPM50G_TO_WGS84GDD','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50G_TO_WGS84G','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','STPM50G','IGNF','WGS84G',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG812_STPM50G_TO_WGS84G','IGNF','151','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG812_STPM50G_TO_4326','ST-PIERRE-ET-MIQUELON 1950 vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','STPM50G','EPSG','4326',NULL,11.363,424.148,373.130,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG812_STPM50G_TO_4326_USAGE','helmert_transformation','IGNF','TSG812_STPM50G_TO_4326','IGNF','151','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','152','BORA BORA, HUAHINE, RAIATEA, TAHAA','BORA BORA, HUAHINE, RAIATEA, TAHAA',-17,-16.25,-152,-150.75,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1004','TAHAA vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','TAHAA','IGNF','RGPF',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104', 1.3746,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1004_USAGE','helmert_transformation','IGNF','TSG1004','IGNF','152','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1004_TAHAAG_TO_RGPFGDD','TAHAA vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAAG','IGNF','RGPFGDD',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1004_TAHAAG_TO_RGPFGDD_USAGE','helmert_transformation','IGNF','TSG1004_TAHAAG_TO_RGPFGDD','IGNF','152','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1004_TAHAAG_TO_RGPFG','TAHAA vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','TAHAAG','IGNF','RGPFG',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1004_TAHAAG_TO_RGPFG_USAGE','helmert_transformation','IGNF','TSG1004_TAHAAG_TO_RGPFG','IGNF','152','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG1004_TAHAAGEO_TO_RGPFGEO','TAHAA vers RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','TAHAAGEO','IGNF','RGPFGEO',NULL,72.438,345.918,79.486,'EPSG','9001',-1.6045,-0.8823,-0.5565,'EPSG','9104',1.3746,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1004_TAHAAGEO_TO_RGPFGEO_USAGE','helmert_transformation','IGNF','TSG1004_TAHAAGEO_TO_RGPFGEO','IGNF','152','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','153','TAHAA-ILES DE LA SOCIETE','TAHAA-ILES DE LA SOCIETE',-16.7,-16.53,-151.58,-151.38,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595','TAHAA vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHAA','IGNF','WGS84',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_USAGE','helmert_transformation','IGNF','TSG595','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAA_RRAF91','TAHAA vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHAA','IGNF','RRAF91',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAA_RRAF91_USAGE','helmert_transformation','IGNF','TSG595_TAHAA_RRAF91','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAA_4978','TAHAA vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHAA','EPSG','4978',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAA_4978_USAGE','helmert_transformation','IGNF','TSG595_TAHAA_4978','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAAG_TO_WGS84GDD','TAHAA vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHAAG','IGNF','WGS84GDD',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAAG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG595_TAHAAG_TO_WGS84GDD','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAAG_TO_WGS84G','TAHAA vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHAAG','IGNF','WGS84G',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAAG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG595_TAHAAG_TO_WGS84G','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAAG_TO_4326','TAHAA vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHAAG','EPSG','4326',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAAG_TO_4326_USAGE','helmert_transformation','IGNF','TSG595_TAHAAG_TO_4326','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAAGEO_TO_WGS84GEODD','TAHAA vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TAHAAGEO','IGNF','WGS84GEODD',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAAGEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG595_TAHAAGEO_TO_WGS84GEODD','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAAGEO_TO_WGS84GEO','TAHAA vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TAHAAGEO','IGNF','WGS84GEO',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAAGEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG595_TAHAAGEO_TO_WGS84GEO','IGNF','153','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG595_TAHAAGEO_TO_WGS84RRAFGEO','TAHAA vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','TAHAAGEO','IGNF','WGS84RRAFGEO',NULL,65,342,77,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG595_TAHAAGEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG595_TAHAAGEO_TO_WGS84RRAFGEO','IGNF','153','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','154','ILE DE TAHAA','ILE DE TAHAA',-16.75,-16.5,-151.75,-151.25,0); INSERT INTO "grid_transformation" VALUES('IGNF','TSG1141','RGPF (RESEAU GEODESIQUE DE POLYNESIE FRANCAISE) vers TAHAA_SAU 2001',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','IGNF','RGPFGEO','IGNF','TAHAA01',NULL,'EPSG','8666','Geoid (height correction) model file','http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Tahaa.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG1141_USAGE','grid_transformation','IGNF','TSG1141','IGNF','154','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','155','TAHITI','TAHITI',-18,-17,-150,-149,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG594','TAHITI-TERME NORD vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHI51','IGNF','WGS84',NULL,162,117,154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG594_USAGE','helmert_transformation','IGNF','TSG594','IGNF','155','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG594_TAHI51_RRAF91','TAHITI-TERME NORD vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHI51','IGNF','RRAF91',NULL,162,117,154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG594_TAHI51_RRAF91_USAGE','helmert_transformation','IGNF','TSG594_TAHI51_RRAF91','IGNF','155','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG594_TAHI51_4978','TAHITI-TERME NORD vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TAHI51','EPSG','4978',NULL,162,117,154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG594_TAHI51_4978_USAGE','helmert_transformation','IGNF','TSG594_TAHI51_4978','IGNF','155','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG594_TAHI51G_TO_WGS84GDD','TAHITI-TERME NORD vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHI51G','IGNF','WGS84GDD',NULL,162,117,154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG594_TAHI51G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG594_TAHI51G_TO_WGS84GDD','IGNF','155','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG594_TAHI51G_TO_WGS84G','TAHITI-TERME NORD vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHI51G','IGNF','WGS84G',NULL,162,117,154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG594_TAHI51G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG594_TAHI51G_TO_WGS84G','IGNF','155','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG594_TAHI51G_TO_4326','TAHITI-TERME NORD vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TAHI51G','EPSG','4326',NULL,162,117,154,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG594_TAHI51G_TO_4326_USAGE','helmert_transformation','IGNF','TSG594_TAHI51G_TO_4326','IGNF','155','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','156','VANUATU - ILE TANNA','VANUATU - ILE TANNA',-19.67,-19.08,169.17,169.83,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG675','TANNA BLOC SUD vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TANNA','IGNF','WGS84',NULL,-139,-967,436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG675_USAGE','helmert_transformation','IGNF','TSG675','IGNF','156','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG675_TANNA_RRAF91','TANNA BLOC SUD vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TANNA','IGNF','RRAF91',NULL,-139,-967,436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG675_TANNA_RRAF91_USAGE','helmert_transformation','IGNF','TSG675_TANNA_RRAF91','IGNF','156','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG675_TANNA_4978','TANNA BLOC SUD vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','TANNA','EPSG','4978',NULL,-139,-967,436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG675_TANNA_4978_USAGE','helmert_transformation','IGNF','TSG675_TANNA_4978','IGNF','156','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG675_TANNAG_TO_WGS84GDD','TANNA BLOC SUD vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TANNAG','IGNF','WGS84GDD',NULL,-139,-967,436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG675_TANNAG_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG675_TANNAG_TO_WGS84GDD','IGNF','156','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG675_TANNAG_TO_WGS84G','TANNA BLOC SUD vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TANNAG','IGNF','WGS84G',NULL,-139,-967,436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG675_TANNAG_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG675_TANNAG_TO_WGS84G','IGNF','156','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG675_TANNAG_TO_4326','TANNA BLOC SUD vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','TANNAG','EPSG','4326',NULL,-139,-967,436,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG675_TANNAG_TO_4326_USAGE','helmert_transformation','IGNF','TSG675_TANNAG_TO_4326','IGNF','156','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','157','WALLIS ET FUTUNA','WALLIS ET FUTUNA',-13.42,-13.17,-176.3,-176.1,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','WALL78','IGNF','WGS84',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_USAGE','helmert_transformation','IGNF','TSG609','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78_RRAF91','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','WALL78','IGNF','RRAF91',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78_RRAF91_USAGE','helmert_transformation','IGNF','TSG609_WALL78_RRAF91','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78_4978','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','WALL78','EPSG','4978',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78_4978_USAGE','helmert_transformation','IGNF','TSG609_WALL78_4978','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78GEO_TO_WGS84GEODD','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','WALL78GEO','IGNF','WGS84GEODD',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78GEO_TO_WGS84GEODD_USAGE','helmert_transformation','IGNF','TSG609_WALL78GEO_TO_WGS84GEODD','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78GEO_TO_WGS84GEO','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','WALL78GEO','IGNF','WGS84GEO',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78GEO_TO_WGS84GEO_USAGE','helmert_transformation','IGNF','TSG609_WALL78GEO_TO_WGS84GEO','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78GEO_TO_WGS84RRAFGEO','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','1035','Geocentric translations (geog3D domain)','IGNF','WALL78GEO','IGNF','WGS84RRAFGEO',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78GEO_TO_WGS84RRAFGEO_USAGE','helmert_transformation','IGNF','TSG609_WALL78GEO_TO_WGS84RRAFGEO','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78G_TO_WGS84GDD','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','WALL78G','IGNF','WGS84GDD',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78G_TO_WGS84GDD_USAGE','helmert_transformation','IGNF','TSG609_WALL78G_TO_WGS84GDD','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78G_TO_WGS84G','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','WALL78G','IGNF','WGS84G',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78G_TO_WGS84G_USAGE','helmert_transformation','IGNF','TSG609_WALL78G_TO_WGS84G','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG609_WALL78G_TO_4326','WALLIS-UVEA SHOM 1978 (MOP1978) vers WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','WALL78G','EPSG','4326',NULL,253,-133,-127,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG609_WALL78G_TO_4326_USAGE','helmert_transformation','IGNF','TSG609_WALL78G_TO_4326','IGNF','157','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RRAF','IGNF','RGAF09',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104', 0.2829,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_USAGE','helmert_transformation','IGNF','TSG818','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_WGS84GUAD_RGAF09','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','WGS84GUAD','IGNF','RGAF09',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104', 0.2829,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_WGS84GUAD_RGAF09_USAGE','helmert_transformation','IGNF','TSG818_WGS84GUAD_RGAF09','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFGDD_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFGDD','IGNF','RGAF09GDD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFGDD_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG818_RRAFGDD_TO_RGAF09GDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_WGS84MARTGDD_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTGDD','IGNF','RGAF09GDD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_WGS84MARTGDD_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG818_WGS84MARTGDD_TO_RGAF09GDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFGDD_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFGDD','IGNF','RGAF09G',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFGDD_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG818_RRAFGDD_TO_RGAF09G','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_WGS84MARTGDD_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTGDD','IGNF','RGAF09G',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_WGS84MARTGDD_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG818_WGS84MARTGDD_TO_RGAF09G','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFGEODD_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEODD','IGNF','RGAF09GEODD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFGEODD_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG818_RRAFGEODD_TO_RGAF09GEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_W84MARTGEODD_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','W84MARTGEODD','IGNF','RGAF09GEODD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_W84MARTGEODD_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG818_W84MARTGEODD_TO_RGAF09GEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFGEODD_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEODD','IGNF','RGAF09GEO',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFGEODD_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG818_RRAFGEODD_TO_RGAF09GEO','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_W84MARTGEODD_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','W84MARTGEODD','IGNF','RGAF09GEO',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_W84MARTGEODD_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG818_W84MARTGEODD_TO_RGAF09GEO','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFGEO_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEO','IGNF','RGAF09GEODD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFGEO_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG818_RRAFGEO_TO_RGAF09GEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_WGS84GUADGEO_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','WGS84GUADGEO','IGNF','RGAF09GEODD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_WGS84GUADGEO_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG818_WGS84GUADGEO_TO_RGAF09GEODD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFGEO_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEO','IGNF','RGAF09GEO',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFGEO_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG818_RRAFGEO_TO_RGAF09GEO','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_WGS84GUADGEO_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','WGS84GUADGEO','IGNF','RGAF09GEO',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_WGS84GUADGEO_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG818_WGS84GUADGEO_TO_RGAF09GEO','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFG_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFG','IGNF','RGAF09GDD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFG_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG818_RRAFG_TO_RGAF09GDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_WGS84MARTG_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTG','IGNF','RGAF09GDD',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_WGS84MARTG_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG818_WGS84MARTG_TO_RGAF09GDD','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_RRAFG_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFG','IGNF','RGAF09G',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_RRAFG_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG818_RRAFG_TO_RGAF09G','IGNF','39','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG818_WGS84MARTG_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTG','IGNF','RGAF09G',NULL,0.7696,-0.8692,-12.0631,'EPSG','9001',-0.32511,-0.21041,-0.02390,'EPSG','9104',0.2829,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG818_WGS84MARTG_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG818_WGS84MARTG_TO_RGAF09G','IGNF','39','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','158','SAINT-MARTIN ET SAINT-BARTHELEMY','SAINT-MARTIN ET SAINT-BARTHELEMY',17.82,18.18,-63.18,-62.25,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RRAF','IGNF','RGAF09',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104', -0.4067,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_USAGE','helmert_transformation','IGNF','TSG819','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_WGS84GUAD_RGAF09','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','WGS84GUAD','IGNF','RGAF09',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104', -0.4067,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_WGS84GUAD_RGAF09_USAGE','helmert_transformation','IGNF','TSG819_WGS84GUAD_RGAF09','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFGDD_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFGDD','IGNF','RGAF09GDD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFGDD_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG819_RRAFGDD_TO_RGAF09GDD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_WGS84MARTGDD_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTGDD','IGNF','RGAF09GDD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_WGS84MARTGDD_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG819_WGS84MARTGDD_TO_RGAF09GDD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFGDD_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFGDD','IGNF','RGAF09G',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFGDD_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG819_RRAFGDD_TO_RGAF09G','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_WGS84MARTGDD_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTGDD','IGNF','RGAF09G',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_WGS84MARTGDD_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG819_WGS84MARTGDD_TO_RGAF09G','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFGEODD_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEODD','IGNF','RGAF09GEODD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFGEODD_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG819_RRAFGEODD_TO_RGAF09GEODD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_W84MARTGEODD_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','W84MARTGEODD','IGNF','RGAF09GEODD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_W84MARTGEODD_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG819_W84MARTGEODD_TO_RGAF09GEODD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFGEODD_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEODD','IGNF','RGAF09GEO',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFGEODD_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG819_RRAFGEODD_TO_RGAF09GEO','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_W84MARTGEODD_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','W84MARTGEODD','IGNF','RGAF09GEO',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_W84MARTGEODD_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG819_W84MARTGEODD_TO_RGAF09GEO','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFGEO_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEO','IGNF','RGAF09GEODD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFGEO_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG819_RRAFGEO_TO_RGAF09GEODD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_WGS84GUADGEO_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','WGS84GUADGEO','IGNF','RGAF09GEODD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_WGS84GUADGEO_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG819_WGS84GUADGEO_TO_RGAF09GEODD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFGEO_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEO','IGNF','RGAF09GEO',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFGEO_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG819_RRAFGEO_TO_RGAF09GEO','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_WGS84GUADGEO_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','WGS84GUADGEO','IGNF','RGAF09GEO',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_WGS84GUADGEO_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG819_WGS84GUADGEO_TO_RGAF09GEO','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFG_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFG','IGNF','RGAF09GDD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFG_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG819_RRAFG_TO_RGAF09GDD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_WGS84MARTG_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTG','IGNF','RGAF09GDD',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_WGS84MARTG_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG819_WGS84MARTG_TO_RGAF09GDD','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_RRAFG_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFG','IGNF','RGAF09G',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_RRAFG_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG819_RRAFG_TO_RGAF09G','IGNF','158','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG819_WGS84MARTG_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTG','IGNF','RGAF09G',NULL,14.6642,5.2493,0.1981,'EPSG','9001',-0.06838,0.09141,-0.58131,'EPSG','9104',-0.4067,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG819_WGS84MARTG_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG819_WGS84MARTG_TO_RGAF09G','IGNF','158','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','159','GUADELOUPE','GUADELOUPE',15.82,16.6,-61.83,-60.77,0); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','RRAF','IGNF','RGAF09',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104', 0.2387,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_USAGE','helmert_transformation','IGNF','TSG820','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_WGS84GUAD_RGAF09','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1033','Position Vector transformation (geocentric domain)','IGNF','WGS84GUAD','IGNF','RGAF09',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104', 0.2387,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_WGS84GUAD_RGAF09_USAGE','helmert_transformation','IGNF','TSG820_WGS84GUAD_RGAF09','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFGDD_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFGDD','IGNF','RGAF09GDD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFGDD_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG820_RRAFGDD_TO_RGAF09GDD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_WGS84MARTGDD_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTGDD','IGNF','RGAF09GDD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_WGS84MARTGDD_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG820_WGS84MARTGDD_TO_RGAF09GDD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFGDD_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFGDD','IGNF','RGAF09G',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFGDD_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG820_RRAFGDD_TO_RGAF09G','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_WGS84MARTGDD_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTGDD','IGNF','RGAF09G',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_WGS84MARTGDD_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG820_WGS84MARTGDD_TO_RGAF09G','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFGEODD_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEODD','IGNF','RGAF09GEODD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFGEODD_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG820_RRAFGEODD_TO_RGAF09GEODD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_W84MARTGEODD_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','W84MARTGEODD','IGNF','RGAF09GEODD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_W84MARTGEODD_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG820_W84MARTGEODD_TO_RGAF09GEODD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFGEODD_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEODD','IGNF','RGAF09GEO',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFGEODD_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG820_RRAFGEODD_TO_RGAF09GEO','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_W84MARTGEODD_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','W84MARTGEODD','IGNF','RGAF09GEO',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_W84MARTGEODD_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG820_W84MARTGEODD_TO_RGAF09GEO','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFGEO_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEO','IGNF','RGAF09GEODD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFGEO_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG820_RRAFGEO_TO_RGAF09GEODD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_WGS84GUADGEO_TO_RGAF09GEODD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','WGS84GUADGEO','IGNF','RGAF09GEODD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_WGS84GUADGEO_TO_RGAF09GEODD_USAGE','helmert_transformation','IGNF','TSG820_WGS84GUADGEO_TO_RGAF09GEODD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFGEO_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','RRAFGEO','IGNF','RGAF09GEO',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFGEO_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG820_RRAFGEO_TO_RGAF09GEO','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_WGS84GUADGEO_TO_RGAF09GEO','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','1037','Geocentric translations (geog3D domain)','IGNF','WGS84GUADGEO','IGNF','RGAF09GEO',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_WGS84GUADGEO_TO_RGAF09GEO_USAGE','helmert_transformation','IGNF','TSG820_WGS84GUADGEO_TO_RGAF09GEO','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFG_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFG','IGNF','RGAF09GDD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFG_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG820_RRAFG_TO_RGAF09GDD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_WGS84MARTG_TO_RGAF09GDD','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTG','IGNF','RGAF09GDD',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_WGS84MARTG_TO_RGAF09GDD_USAGE','helmert_transformation','IGNF','TSG820_WGS84MARTG_TO_RGAF09GDD','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_RRAFG_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','RRAFG','IGNF','RGAF09G',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_RRAFG_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG820_RRAFG_TO_RGAF09G','IGNF','159','IGNF','5'); INSERT INTO "helmert_transformation" VALUES('IGNF','TSG820_WGS84MARTG_TO_RGAF09G','WGS 84 (RRAF) vers RGAF09 (RESEAU GEODESIQUE DES ANTILLES FRANCAISES 2009)',NULL,'EPSG','9606','Position Vector transformation (geog2D domain)','IGNF','WGS84MARTG','IGNF','RGAF09G',NULL,1.2239,2.4156,-1.7598,'EPSG','9001',0.03800,-0.16101,-0.04925,'EPSG','9104',0.2387,'EPSG', '9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG820_WGS84MARTG_TO_RGAF09G_USAGE','helmert_transformation','IGNF','TSG820_WGS84MARTG_TO_RGAF09G','IGNF','159','IGNF','5'); INSERT INTO "conversion" VALUES('IGNF','PRC0307248','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC034338','UTM SUD FUSEAU 43',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9813548','EQUIRECTANGULAIRE AMSTERDAM SAINT-PAUL',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-38.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306336','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306251','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9814568','EQUIRECTANGULAIRE ANTILLES FRANCAISES',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',15.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306554','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC060623','BONNE FRANCE - ETAT MAJOR',NULL,'EPSG','9827','Bonne','EPSG','8801','Latitude of natural origin',50.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0338366','UTM SUD FUSEAU 38',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0212179','UTM NORD FUSEAU 12',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-111.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0338118','UTM SUD FUSEAU 38',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC033935','UTM SUD FUSEAU 39',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9801422','EQUIRECTANGULAIRE CROZET',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-46.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0221400','UTM NORD FUSEAU 21',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0222401','UTM NORD FUSEAU 22',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0221137','UTM NORD FUSEAU 21',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0222138','UTM NORD FUSEAU 22',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC023086','UTM NORD FUSEAU 30',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC023288','UTM NORD FUSEAU 32',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC023187','UTM NORD FUSEAU 31',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0359176','UTM SUD FUSEAU 59',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC991495','ETRS89 LAMBERT AZIMUTHAL EQUAL AREA (LAEA)',NULL,'EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',10.0,'EPSG','9102','EPSG','8806','False easting',4321000.0,'EPSG','9001','EPSG','8807','False northing',3210000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC813596','ETRS89 LAMBERT CONFORMAL CONIC',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',52.0,'EPSG','9102','EPSG','8822','Longitude of false origin',10.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',35.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',65.0,'EPSG','9102','EPSG','8826','Easting at false origin',4000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2800000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC022697','UTM NORD FUSEAU 26',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC022798','UTM NORD FUSEAU 27',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC022899','UTM NORD FUSEAU 28',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0229100','UTM NORD FUSEAU 29',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0230101','UTM NORD FUSEAU 30',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0231102','UTM NORD FUSEAU 31',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0232103','UTM NORD FUSEAU 32',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0233104','UTM NORD FUSEAU 33',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0234105','UTM NORD FUSEAU 34',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',21.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0235106','UTM NORD FUSEAU 35',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',27.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0236107','UTM NORD FUSEAU 36',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0237108','UTM NORD FUSEAU 37',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0238109','UTM NORD FUSEAU 38',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0701121','MERCATOR DIRECTE',NULL,'EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20000000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0337572','UTM SUD FUSEAU 37',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306261','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307269','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307272','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307275','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307278','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307264','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9802423','EQUIRECTANGULAIRE FRANCE',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',46.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0701124','MERCATOR DIRECTE',NULL,'EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20000000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0338125','UTM SUD FUSEAU 38',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358566','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0220150','UTM NORD FUSEAU 20',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0220147','UTM NORD FUSEAU 20',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9805425','EQUIRECTANGULAIRE GUYANE',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',4.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307283','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307286','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307289','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307292','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307235','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307238','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307241','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030567','UTM SUD FUSEAU 5',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0149208','LAMBERT NOUVELLE-CALEDONIE',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-21.5,'EPSG','9102','EPSG','8822','Longitude of false origin',166.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-20.666666666666668,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-22.333333333333332,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358209','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0338564','UTM SUD FUSEAU 38',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030664','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC034219','UTM SUD FUSEAU 42',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9812426','EQUIRECTANGULAIRE KERGUELEN',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-49.5,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC013591','LAMBERT NORD DE GUERRE',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',55.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',6.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99950908,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358182','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307295','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0308230','UTM SUD FUSEAU 8',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358186','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0220144','UTM NORD FUSEAU 20',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030582','UTM SUD FUSEAU 5',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9807428','EQUIRECTANGULAIRE MAYOTTE',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-12.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030858','UTM SUD FUSEAU 8',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030679','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307307','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307303','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307298','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9203409','LAMBERT NOUMEA 2',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-22.26972222222222,'EPSG','9102','EPSG','8822','Longitude of false origin',166.4425,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-22.244722222222222,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-22.294722222222223,'EPSG','9102','EPSG','8826','Easting at false origin',8.313,'EPSG','9001','EPSG','8827','Northing at false origin',-2.354,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9809429','EQUIRECTANGULAIRE N. CALEDONIE',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-22.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0406569','GAUSS-KRUGER (G-K) LUXEMBOURG',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.833333333333336,'EPSG','9102','EPSG','8802','Longitude of natural origin',6.166666666666667,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC011814','LAMBERT GRAND CHAMP',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',0.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC01015','LAMBERT I NORD',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',55.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99987734,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC01316','LAMBERT I CARTO',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',55.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99987734,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC01027','LAMBERT II CENTRE',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99987742,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC01328','LAMBERT II CARTO',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99987742,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC012013','LAMBERT II ETENDU',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',52.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99987742,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC01039','LAMBERT III SUD',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.9998775,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC013310','LAMBERT III CARTO',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',49.0,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.9998775,'EPSG','9201','EPSG','8806','False easting',600000.0,'EPSG','9001','EPSG','8807','False northing',3200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC010411','LAMBERT IV CORSE',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.85,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99994471,'EPSG','9201','EPSG','8806','False easting',234.358,'EPSG','9001','EPSG','8807','False northing',185861.369,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC013412','LAMBERT IV CARTO',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',46.85,'EPSG','9105','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9105','EPSG','8805','Scale factor at natural origin',0.99994471,'EPSG','9201','EPSG','8806','False easting',234.358,'EPSG','9001','EPSG','8807','False northing',4185861.369,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307212','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358195','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0508542','GAUSS LABORDE REUNION',NULL,'PROJ','gstm','Gauss Schreiber Transverse Mercator','EPSG','8801','Latitude of natural origin',-21.116666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',55.53333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',160000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0508546','GAUSS LABORDE REUNION',NULL,'PROJ','gstm','Gauss Schreiber Transverse Mercator','EPSG','8801','Latitude of natural origin',-21.116666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',55.53333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',160000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9811430','EQUIRECTANGULAIRE POLYNESIE',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-15.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306215','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306218','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306311','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306314','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306317','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0301588','UTM SUD FUSEAU 1',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0508114','GAUSS LABORDE REUNION',NULL,'PROJ','gstm','Gauss Schreiber Transverse Mercator','EPSG','8801','Latitude of natural origin',-21.116666666666667,'EPSG','9102','EPSG','8802','Longitude of natural origin',55.53333333333333,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',160000.0,'EPSG','9001','EPSG','8807','False northing',50000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9806431','EQUIRECTANGULAIRE LA REUNION',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-21.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0220527','UTM NORD FUSEAU 20',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8142383','CC42 (CONIQUE CONFORME ZONE 1)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',41.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',42.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8143384','CC43 (CONIQUE CONFORME ZONE 2)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',43.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',42.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',43.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',2200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8144385','CC44 (CONIQUE CONFORME ZONE 3)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',44.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',44.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',3200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8145386','CC45 (CONIQUE CONFORME ZONE 4)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',45.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',45.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',4200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8146387','CC46 (CONIQUE CONFORME ZONE 5)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',45.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',46.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',5200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8147388','CC47 (CONIQUE CONFORME ZONE 6)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',47.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',46.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',47.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8148389','CC48 (CONIQUE CONFORME ZONE 7)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',48.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',47.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',7200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8149390','CC49 (CONIQUE CONFORME ZONE 8)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',49.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',48.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',8200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC8150391','CC50 (CONIQUE CONFORME ZONE 9)',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',50.0,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',49.25,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',50.75,'EPSG','9102','EPSG','8826','Easting at false origin',1700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',9200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC014052','LAMBERT-93',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',46.5,'EPSG','9102','EPSG','8822','Longitude of false origin',3.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',49.0,'EPSG','9102','EPSG','8826','Easting at false origin',700000.0,'EPSG','9001','EPSG','8827','Northing at false origin',6600000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0231393','UTM NORD FUSEAU 31',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0232394','UTM NORD FUSEAU 32',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0230392','UTM NORD FUSEAU 30',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0221157','UTM NORD FUSEAU 21',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0222158','UTM NORD FUSEAU 22',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0338372','UTM SUD FUSEAU 38',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',45.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0149202','LAMBERT NOUVELLE-CALEDONIE',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',-21.5,'EPSG','9102','EPSG','8822','Longitude of false origin',166.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-20.666666666666668,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-22.333333333333332,'EPSG','9102','EPSG','8826','Easting at false origin',400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0357203','UTM SUD FUSEAU 57',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358204','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0359205','UTM SUD FUSEAU 59',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030574','UTM SUD FUSEAU 5',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030675','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030776','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0308576','UTM SUD FUSEAU 8',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0340361','UTM SUD FUSEAU 40',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0221378','UTM NORD FUSEAU 21',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0337418','UTM SUD FUSEAU 37',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',39.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0339419','UTM SUD FUSEAU 39',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0342420','UTM SUD FUSEAU 42',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0343421','UTM SUD FUSEAU 43',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0353563','UTM SUD FUSEAU 53',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',135.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0220170','UTM NORD FUSEAU 20',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-63.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030570','UTM SUD FUSEAU 5',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC034341','UTM SUD FUSEAU 43',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9808432','EQUIRECTANGULAIRE SPM',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',47.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358407','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0358405','UTM SUD FUSEAU 58',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0221141','UTM NORD FUSEAU 21',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-57.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0305187','UTM SUD FUSEAU 5',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-153.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030655','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306172','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306320','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0359190','UTM SUD FUSEAU 59',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',171.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC090126','STEREOGRAPHIQUE POLAIRE SUD TERRE-ADELIE (TANGENTE)',NULL,'EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',-90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',140.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.960272946,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',-2299363.482,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030661','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306323','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306585','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306326','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0701131','MERCATOR DIRECTE',NULL,'EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20000000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306330','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307331','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0306227','UTM SUD FUSEAU 6',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-147.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0307308','UTM SUD FUSEAU 7',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-141.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9810433','EQUIRECTANGULAIRE WALLISFUTUNA',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',-14.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030144','UTM SUD FUSEAU 1',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC030147','UTM SUD FUSEAU 1',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0230345','UTM NORD FUSEAU 30',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0231346','UTM NORD FUSEAU 31',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0232348','UTM NORD FUSEAU 32',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0301545','UTM SUD FUSEAU 1',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC7001567','MILLER GEOPORTAIL',NULL,'PROJ','mill','PROJ mill',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0230353','UTM NORD FUSEAU 30',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0231354','UTM NORD FUSEAU 31',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0232355','UTM NORD FUSEAU 32',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',9.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0301550','UTM SUD FUSEAU 1',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-177.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0339578','UTM SUD FUSEAU 39',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',51.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0342579','UTM SUD FUSEAU 42',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',69.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC0343580','UTM SUD FUSEAU 43',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',75.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "conversion" VALUES('IGNF','PRC9601581','PSEUDO MERCATOR (POPULAR VISUALISATION)',NULL,'EPSG','1024','Popular Visualisation Pseudo Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "extent" VALUES('IGNF','160','AMANU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','AMANU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-18,-17.58,-141,-140.58,0); INSERT INTO "projected_crs" VALUES('IGNF','AMANU63UTM7S','Amanu (MHPF 1963) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','AMANU63G','IGNF','PRC0307248',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMANU63UTM7S_USAGE','projected_crs','IGNF','AMANU63UTM7S','IGNF','160','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','161','ILE AMSTERDAM - UTM SUD FUSEAU 43','ILE AMSTERDAM - UTM SUD FUSEAU 43',-37.92,-37.75,77.45,77.63,0); INSERT INTO "projected_crs" VALUES('IGNF','AMST63UTM43S','Amsterdam 1963 UTM Sud fuseau 43',NULL,'EPSG','4499','IGNF','AMST63G','IGNF','PRC034338',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'AMST63UTM43S_USAGE','projected_crs','IGNF','AMST63UTM43S','IGNF','161','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','162','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ILES AMSTERDAM ET SAINT-PAUL','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ILES AMSTERDAM ET SAINT-PAUL',-38.77,-37.75,77.45,77.63,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84EQGPASP','Amsterdam Saint-Paul projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9813548',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84EQGPASP_USAGE','projected_crs','IGNF','WGS84EQGPASP','IGNF','162','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALASP','Amsterdam Saint-Paul projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9813548',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALASP_USAGE','projected_crs','IGNF','GEOPORTALASP','IGNF','162','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','163','ANAA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6','ANAA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6',-17.5,-17.32,-145.6,-145.37,0); INSERT INTO "projected_crs" VALUES('IGNF','ANAA92UTM6S','Anaa (MOP92) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','ANAA92G','IGNF','PRC0306336',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ANAA92UTM6S_USAGE','projected_crs','IGNF','ANAA92UTM6S','IGNF','163','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','ANAA47UTM6S','Anaa (SHM 1947) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','ANAA47G','IGNF','PRC0306251',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ANAA47UTM6S_USAGE','projected_crs','IGNF','ANAA47UTM6S','IGNF','163','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','164','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ANTILLES FRANCAISES','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ANTILLES FRANCAISES',14.25,18.2,-63.2,-60.73,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84GPAF','ANTILLES FRANCAISES PROJECTION GEOPORTAIL',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9814568',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GPAF_USAGE','projected_crs','IGNF','WGS84GPAF','IGNF','164','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALANF','ANTILLES FRANCAISES PROJECTION GEOPORTAIL',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9814568',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALANF_USAGE','projected_crs','IGNF','GEOPORTALANF','IGNF','164','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','165','APATAKI (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6','APATAKI (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6',-15.63,-15.29,-146.46,-146.18,0); INSERT INTO "projected_crs" VALUES('IGNF','APAT80UTM6S','Apataki (Cadastre 1980) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','APAT80G','IGNF','PRC0306554',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT80UTM6S_USAGE','projected_crs','IGNF','APAT80UTM6S','IGNF','165','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','ATIGBONNE','ATIG Bonne France Etat Major',NULL,'EPSG','4499','IGNF','ATIGG','IGNF','PRC060623',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ATIGBONNE_USAGE','projected_crs','IGNF','ATIGBONNE','IGNF','4','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','166','ILE DE MAYOTTE - UTM SUD FUSEAU 38','ILE DE MAYOTTE - UTM SUD FUSEAU 38',-13.05,-12.5,44.95,45.4,0); INSERT INTO "projected_crs" VALUES('IGNF','CAD97UTM38S','Cadastre 1997 UTM Sud fuseau 38',NULL,'EPSG','4499','IGNF','CAD97G','IGNF','PRC0338366',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CAD97UTM38S_USAGE','projected_crs','IGNF','CAD97UTM38S','IGNF','166','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','167','ILE CLIPPERTON - UTM NORD FUSEAU 12','ILE CLIPPERTON - UTM NORD FUSEAU 12',10.17,10.5,-109.5,-109,0); INSERT INTO "projected_crs" VALUES('IGNF','CLIP67UTM12','Clipperton 1967 UTM Nord fuseau 12',NULL,'EPSG','4499','IGNF','CLIP67G','IGNF','PRC0212179',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CLIP67UTM12_USAGE','projected_crs','IGNF','CLIP67UTM12','IGNF','167','IGNF','10'); INSERT INTO "projected_crs" VALUES('IGNF','CLIP57UTM12','Clipperton 1967 UTM Nord fuseau 12',NULL,'EPSG','4499','IGNF','CLIP67G','IGNF','PRC0212179',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CLIP57UTM12_USAGE','projected_crs','IGNF','CLIP57UTM12','IGNF','167','IGNF','10'); INSERT INTO "projected_crs" VALUES('IGNF','MAYO50UTM38S','Combani UTM Sud fuseau 38',NULL,'EPSG','4499','IGNF','MAYO50G','IGNF','PRC0338118',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAYO50UTM38S_USAGE','projected_crs','IGNF','MAYO50UTM38S','IGNF','166','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','168','ILES CROZET (ARCHIPEL) - UTM SUD FUSEAU 39','ILES CROZET (ARCHIPEL) - UTM SUD FUSEAU 39',-46.75,-45.75,50,52.5,0); INSERT INTO "projected_crs" VALUES('IGNF','CROZ63UTM39S','CROZET POSSESSION 1963 UTM SUD FUSEAU 39',NULL,'EPSG','4499','IGNF','CROZ63G','IGNF','PRC033935',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CROZ63UTM39S_USAGE','projected_crs','IGNF','CROZ63UTM39S','IGNF','168','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','169','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ILES CROZET (ARCHIPEL)','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ILES CROZET (ARCHIPEL)',-46.75,-45.75,50,52.5,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84EQGPCRZ','Crozet projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9801422',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84EQGPCRZ_USAGE','projected_crs','IGNF','WGS84EQGPCRZ','IGNF','169','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALCRZ','Crozet projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9801422',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALCRZ_USAGE','projected_crs','IGNF','GEOPORTALCRZ','IGNF','169','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','170','GUYANE FRANCAISE - UTM NORD FUSEAU 21','GUYANE FRANCAISE - UTM NORD FUSEAU 21',2.05,5.95,-54.95,-54,0); INSERT INTO "projected_crs" VALUES('IGNF','C67IG95UTM21','CSG67(IGN 1995) UTM Nord fuseau 21',NULL,'EPSG','4499','IGNF','C67IG95G','IGNF','PRC0221400',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'C67IG95UTM21_USAGE','projected_crs','IGNF','C67IG95UTM21','IGNF','170','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','171','GUYANE FRANCAISE - UTM NORD FUSEAU 22','GUYANE FRANCAISE - UTM NORD FUSEAU 22',2.05,5.95,-54,-51.05,0); INSERT INTO "projected_crs" VALUES('IGNF','C67IG95UTM22','CSG67 (IGN 1995) UTM Nord fuseau 22',NULL,'EPSG','4499','IGNF','C67IG95G','IGNF','PRC0222401',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'C67IG95UTM22_USAGE','projected_crs','IGNF','C67IG95UTM22','IGNF','171','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','CSG67UTM21','CSG67 UTM Nord fuseau 21',NULL,'EPSG','4499','IGNF','CSG67G','IGNF','PRC0221137',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CSG67UTM21_USAGE','projected_crs','IGNF','CSG67UTM21','IGNF','170','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','CSG67UTM22','CSG67 UTM Nord fuseau 22',NULL,'EPSG','4499','IGNF','CSG67G','IGNF','PRC0222138',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'CSG67UTM22_USAGE','projected_crs','IGNF','CSG67UTM22','IGNF','171','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','172','EUROPE DE L''OUEST ED50 - UTM NORD FUSEAU 30','EUROPE DE L''OUEST ED50 - UTM NORD FUSEAU 30',34,72,-6,0,0); INSERT INTO "projected_crs" VALUES('IGNF','ED50UTM30','ED50 UTM fuseau 30',NULL,'EPSG','4499','IGNF','ED50G','IGNF','PRC023086',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM30_USAGE','projected_crs','IGNF','ED50UTM30','IGNF','172','IGNF','11'); INSERT INTO "projected_crs" VALUES('IGNF','UTM30','ED50 UTM fuseau 30',NULL,'EPSG','4499','IGNF','ED50G','IGNF','PRC023086',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM30_USAGE','projected_crs','IGNF','UTM30','IGNF','172','IGNF','11'); INSERT INTO "extent" VALUES('IGNF','173','EUROPE DE L''OUEST ED50 - UTM NORD FUSEAU 32','EUROPE DE L''OUEST ED50 - UTM NORD FUSEAU 32',34,72,6,12,0); INSERT INTO "projected_crs" VALUES('IGNF','ED50UTM32','ED50 UTM fuseau 32',NULL,'EPSG','4499','IGNF','ED50G','IGNF','PRC023288',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM32_USAGE','projected_crs','IGNF','ED50UTM32','IGNF','173','IGNF','11'); INSERT INTO "projected_crs" VALUES('IGNF','UTM32','ED50 UTM fuseau 32',NULL,'EPSG','4499','IGNF','ED50G','IGNF','PRC023288',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM32_USAGE','projected_crs','IGNF','UTM32','IGNF','173','IGNF','11'); INSERT INTO "extent" VALUES('IGNF','174','EUROPE DE L''OUEST ED50 - UTM NORD FUSEAU 31','EUROPE DE L''OUEST ED50 - UTM NORD FUSEAU 31',34,72,0,6,0); INSERT INTO "projected_crs" VALUES('IGNF','ED50UTM31','ED50 UTM NORD FUSEAU 31',NULL,'EPSG','4499','IGNF','ED50G','IGNF','PRC023187',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM31_USAGE','projected_crs','IGNF','ED50UTM31','IGNF','174','IGNF','11'); INSERT INTO "projected_crs" VALUES('IGNF','UTM31','ED50 UTM NORD FUSEAU 31',NULL,'EPSG','4499','IGNF','ED50G','IGNF','PRC023187',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM31_USAGE','projected_crs','IGNF','UTM31','IGNF','174','IGNF','11'); INSERT INTO "extent" VALUES('IGNF','175','EFATE (ARCHIPEL DU VANUATU) - UTM SUD FUSEAU 59','EFATE (ARCHIPEL DU VANUATU) - UTM SUD FUSEAU 59',-18,-17.25,168,168.67,0); INSERT INTO "projected_crs" VALUES('IGNF','EFAT57UTM59S','Efate UTM Sud fuseau 59',NULL,'EPSG','4499','IGNF','EFATE57G','IGNF','PRC0359176',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EFAT57UTM59S_USAGE','projected_crs','IGNF','EFAT57UTM59S','IGNF','175','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','EFATE57UT59S','Efate UTM Sud fuseau 59',NULL,'EPSG','4499','IGNF','EFATE57G','IGNF','PRC0359176',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EFATE57UT59S_USAGE','projected_crs','IGNF','EFATE57UT59S','IGNF','175','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89LAEA','ETRS89 Lambert Azimutal Equal Area',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC991495',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89LAEA_USAGE','projected_crs','IGNF','ETRS89LAEA','IGNF','14','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89LCC','ETRS89 Lambert Conformal Conic',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC813596',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89LCC_USAGE','projected_crs','IGNF','ETRS89LCC','IGNF','14','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','176','EUROPE (ETRS89) - UTM NORD FUSEAU 26','EUROPE (ETRS89) - UTM NORD FUSEAU 26',27.5,71.5,-25,-24,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM26','ETRS89 UTM Nord fuseau 26',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC022697',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM26_USAGE','projected_crs','IGNF','ETRS89UTM26','IGNF','176','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM26ETRS89','ETRS89 UTM Nord fuseau 26',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC022697',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM26ETRS89_USAGE','projected_crs','IGNF','UTM26ETRS89','IGNF','176','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','177','EUROPE (ETRS89) - UTM NORD FUSEAU 27','EUROPE (ETRS89) - UTM NORD FUSEAU 27',27.5,71.5,-24,-18,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM27','ETRS89 UTM Nord fuseau 27',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC022798',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM27_USAGE','projected_crs','IGNF','ETRS89UTM27','IGNF','177','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM27ETRS89','ETRS89 UTM Nord fuseau 27',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC022798',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM27ETRS89_USAGE','projected_crs','IGNF','UTM27ETRS89','IGNF','177','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','178','EUROPE (ETRS89) - UTM NORD FUSEAU 28','EUROPE (ETRS89) - UTM NORD FUSEAU 28',27.5,71.5,-18,-12,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM28','ETRS89 UTM Nord fuseau 28',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC022899',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM28_USAGE','projected_crs','IGNF','ETRS89UTM28','IGNF','178','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM28ETRS89','ETRS89 UTM Nord fuseau 28',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC022899',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM28ETRS89_USAGE','projected_crs','IGNF','UTM28ETRS89','IGNF','178','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','179','EUROPE (ETRS89) - UTM NORD FUSEAU 29','EUROPE (ETRS89) - UTM NORD FUSEAU 29',27.5,71.5,-12,-6,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM29','ETRS89 UTM Nord fuseau 29',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0229100',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM29_USAGE','projected_crs','IGNF','ETRS89UTM29','IGNF','179','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM29ETRS89','ETRS89 UTM Nord fuseau 29',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0229100',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM29ETRS89_USAGE','projected_crs','IGNF','UTM29ETRS89','IGNF','179','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','180','EUROPE (ETRS89) - UTM NORD FUSEAU 30','EUROPE (ETRS89) - UTM NORD FUSEAU 30',27.5,71.5,-6,0,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM30','ETRS89 UTM Nord fuseau 30',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0230101',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM30_USAGE','projected_crs','IGNF','ETRS89UTM30','IGNF','180','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM30ETRS89','ETRS89 UTM Nord fuseau 30',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0230101',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM30ETRS89_USAGE','projected_crs','IGNF','UTM30ETRS89','IGNF','180','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','181','EUROPE (ETRS89) - UTM NORD FUSEAU 31','EUROPE (ETRS89) - UTM NORD FUSEAU 31',27.5,71.5,0,6,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM31','ETRS89 UTM Nord fuseau 31',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0231102',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM31_USAGE','projected_crs','IGNF','ETRS89UTM31','IGNF','181','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM31ETRS89','ETRS89 UTM Nord fuseau 31',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0231102',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM31ETRS89_USAGE','projected_crs','IGNF','UTM31ETRS89','IGNF','181','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','182','EUROPE (ETRS89) - UTM NORD FUSEAU 32','EUROPE (ETRS89) - UTM NORD FUSEAU 32',27.5,71.5,6,12,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM32','ETRS89 UTM Nord fuseau 32',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0232103',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM32_USAGE','projected_crs','IGNF','ETRS89UTM32','IGNF','182','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM32ETRS89','ETRS89 UTM Nord fuseau 32',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0232103',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM32ETRS89_USAGE','projected_crs','IGNF','UTM32ETRS89','IGNF','182','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','183','EUROPE (ETRS89) - UTM NORD FUSEAU 33','EUROPE (ETRS89) - UTM NORD FUSEAU 33',27.5,71.5,12,18,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM33','ETRS89 UTM Nord fuseau 33',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0233104',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM33_USAGE','projected_crs','IGNF','ETRS89UTM33','IGNF','183','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM33ETRS89','ETRS89 UTM Nord fuseau 33',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0233104',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM33ETRS89_USAGE','projected_crs','IGNF','UTM33ETRS89','IGNF','183','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','184','EUROPE (ETRS89) - UTM NORD FUSEAU 34','EUROPE (ETRS89) - UTM NORD FUSEAU 34',27.5,71.5,18,24,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM34','ETRS89 UTM Nord fuseau 34',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0234105',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM34_USAGE','projected_crs','IGNF','ETRS89UTM34','IGNF','184','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM34ETRS89','ETRS89 UTM Nord fuseau 34',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0234105',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM34ETRS89_USAGE','projected_crs','IGNF','UTM34ETRS89','IGNF','184','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','185','EUROPE (ETRS89) - UTM NORD FUSEAU 35','EUROPE (ETRS89) - UTM NORD FUSEAU 35',27.5,71.5,24,30,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM35','ETRS89 UTM Nord fuseau 35',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0235106',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM35_USAGE','projected_crs','IGNF','ETRS89UTM35','IGNF','185','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM35ETRS89','ETRS89 UTM Nord fuseau 35',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0235106',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM35ETRS89_USAGE','projected_crs','IGNF','UTM35ETRS89','IGNF','185','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','186','EUROPE (ETRS89) - UTM NORD FUSEAU 36','EUROPE (ETRS89) - UTM NORD FUSEAU 36',27.5,71.5,30,36,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM36','ETRS89 UTM Nord fuseau 36',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0236107',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM36_USAGE','projected_crs','IGNF','ETRS89UTM36','IGNF','186','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM36ETRS89','ETRS89 UTM Nord fuseau 36',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0236107',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM36ETRS89_USAGE','projected_crs','IGNF','UTM36ETRS89','IGNF','186','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','187','EUROPE (ETRS89) - UTM NORD FUSEAU 37','EUROPE (ETRS89) - UTM NORD FUSEAU 37',27.5,71.5,36,42,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM37','ETRS89 UTM Nord fuseau 37',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0237108',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM37_USAGE','projected_crs','IGNF','ETRS89UTM37','IGNF','187','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM37ETRS89','ETRS89 UTM Nord fuseau 37',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0237108',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM37ETRS89_USAGE','projected_crs','IGNF','UTM37ETRS89','IGNF','187','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','188','EUROPE (ETRS89) - UTM NORD FUSEAU 38','EUROPE (ETRS89) - UTM NORD FUSEAU 38',27.5,71.5,42,45.5,0); INSERT INTO "projected_crs" VALUES('IGNF','ETRS89UTM38','ETRS89 UTM Nord fuseau 38',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0238109',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM38_USAGE','projected_crs','IGNF','ETRS89UTM38','IGNF','188','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM38ETRS89','ETRS89 UTM Nord fuseau 38',NULL,'EPSG','4499','IGNF','ETRS89G','IGNF','PRC0238109',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM38ETRS89_USAGE','projected_crs','IGNF','UTM38ETRS89','IGNF','188','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','189','ILE EUROPA - MERCATOR DIRECTE','ILE EUROPA - MERCATOR DIRECTE',-22.33,-22,40.25,40.5,0); INSERT INTO "projected_crs" VALUES('IGNF','EUROPA54MD','Europa Mercator directe',NULL,'EPSG','4499','IGNF','EUROPA54G','IGNF','PRC0701121',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EUROPA54MD_USAGE','projected_crs','IGNF','EUROPA54MD','IGNF','189','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','EURO54UTM37S','EUROPA MHM 1954 UTM SUD FUSEAU 37',NULL,'EPSG','4499','IGNF','EUROPA54G','IGNF','PRC0337572',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'EURO54UTM37S_USAGE','projected_crs','IGNF','EURO54UTM37S','IGNF','15','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','190','FAKARAVA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6','FAKARAVA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6',-16.58,-16,-146,-145.25,0); INSERT INTO "projected_crs" VALUES('IGNF','FAKA50UTM6S','Fakarava (SHM 1947-1950) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','FAKA50G','IGNF','PRC0306261',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FAKA50UTM6S_USAGE','projected_crs','IGNF','FAKA50UTM6S','IGNF','190','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','191','FANGATAUFA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','FANGATAUFA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-22.33,-22.15,-138.83,-138.58,0); INSERT INTO "projected_crs" VALUES('IGNF','FANGA64UTM7S','Fangataufa (MHPF 1964) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','FANGA64G','IGNF','PRC0307269',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA64UTM7S_USAGE','projected_crs','IGNF','FANGA64UTM7S','IGNF','191','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','FANG651UTM7S','Fangataufa (MHPF 1965-1) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','FANG651G','IGNF','PRC0307272',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANG651UTM7S_USAGE','projected_crs','IGNF','FANG651UTM7S','IGNF','191','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','FANGA651U7S','Fangataufa (MHPF 1965-1) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','FANG651G','IGNF','PRC0307272',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA651U7S_USAGE','projected_crs','IGNF','FANGA651U7S','IGNF','191','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','FANG652UTM7S','Fangataufa (MHPF 1965-2) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','FANG652G','IGNF','PRC0307275',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANG652UTM7S_USAGE','projected_crs','IGNF','FANG652UTM7S','IGNF','191','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','FANGA652U7S','Fangataufa (MHPF 1965-2) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','FANG652G','IGNF','PRC0307275',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA652U7S_USAGE','projected_crs','IGNF','FANGA652U7S','IGNF','191','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','FANGA66UTM7S','Fangataufa (MHPF 1966) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','FANGA66G','IGNF','PRC0307278',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA66UTM7S_USAGE','projected_crs','IGNF','FANGA66UTM7S','IGNF','191','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','FANGA84UTM7S','Fangataufa (MOP84) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','FANGA84G','IGNF','PRC0307264',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'FANGA84UTM7S_USAGE','projected_crs','IGNF','FANGA84UTM7S','IGNF','191','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RGF93EQGPFR','France Metropolitaine projection Geoportail',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC9802423',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93EQGPFR_USAGE','projected_crs','IGNF','RGF93EQGPFR','IGNF','4','IGNF','6'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALFXX','France Metropolitaine projection Geoportail',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC9802423',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALFXX_USAGE','projected_crs','IGNF','GEOPORTALFXX','IGNF','4','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','192','ILES GLORIEUSES - MERCATOR DIRECTE','ILES GLORIEUSES - MERCATOR DIRECTE',-11.62,-11.43,47.25,47.47,0); INSERT INTO "projected_crs" VALUES('IGNF','GLOR77MD','Glorieuses Mercator directe',NULL,'EPSG','4499','IGNF','GLOR77G','IGNF','PRC0701124',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77MD_USAGE','projected_crs','IGNF','GLOR77MD','IGNF','192','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','193','ILES GLORIEUSES - UTM SUD FUSEAU 38','ILES GLORIEUSES - UTM SUD FUSEAU 38',-11.62,-11.43,47.25,47.47,0); INSERT INTO "projected_crs" VALUES('IGNF','GLOR77UTM38S','GLORIEUSES MHG 1977 UTM SUD FUSEAU 38',NULL,'EPSG','4499','IGNF','GLOR77G','IGNF','PRC0338125',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77UTM38S_USAGE','projected_crs','IGNF','GLOR77UTM38S','IGNF','193','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','194','GRANDE TERRE (NOUVELLE-CALEDONIE) - UTM SUD FUSEAU 58','GRANDE TERRE (NOUVELLE-CALEDONIE) - UTM SUD FUSEAU 58',-22.75,-19.5,163.5,167.67,0); INSERT INTO "projected_crs" VALUES('IGNF','GTN51UTM58S','GOMEN TERME NORD 1951 UTM SUD FUSEAU 58',NULL,'EPSG','4499','IGNF','GTN51G','IGNF','PRC0358566',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GTN51UTM58S_USAGE','projected_crs','IGNF','GTN51UTM58S','IGNF','194','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','NC51UTM58S','GOMEN TERME NORD 1951 UTM SUD FUSEAU 58',NULL,'EPSG','4499','IGNF','GTN51G','IGNF','PRC0358566',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NC51UTM58S_USAGE','projected_crs','IGNF','NC51UTM58S','IGNF','194','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','195','ILES DE SAINT-MARTIN ET SAINT-BARTHELEMY (GUADELOUPE) - UTM NORD FUSEAU 20','ILES DE SAINT-MARTIN ET SAINT-BARTHELEMY (GUADELOUPE) - UTM NORD FUSEAU 20',17.82,18.18,-63.18,-62.25,0); INSERT INTO "projected_crs" VALUES('IGNF','GUADFMUTM20','Guadeloupe Fort-Marigot UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','GUADFMG','IGNF','PRC0220150',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADFMUTM20_USAGE','projected_crs','IGNF','GUADFMUTM20','IGNF','195','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','GUADFM49U20','Guadeloupe Fort-Marigot UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','GUADFMG','IGNF','PRC0220150',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADFM49U20_USAGE','projected_crs','IGNF','GUADFM49U20','IGNF','195','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','196','GRANDE-TERRE, BASSE-TERRE, MARIE-GALANTE, LA DESIRADE, LES SAINTES (GUADELOUPE) - UTM NORD FUSEAU 20','GRANDE-TERRE, BASSE-TERRE, MARIE-GALANTE, LA DESIRADE, LES SAINTES (GUADELOUPE) - UTM NORD FUSEAU 20',15.82,16.6,-61.83,-60.77,0); INSERT INTO "projected_crs" VALUES('IGNF','GUADANNUTM20','Guadeloupe Ste Anne UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','GUADANNG','IGNF','PRC0220147',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNUTM20_USAGE','projected_crs','IGNF','GUADANNUTM20','IGNF','196','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','GUAD48UTM20','Guadeloupe Ste Anne UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','GUADANNG','IGNF','PRC0220147',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GUAD48UTM20_USAGE','projected_crs','IGNF','GUAD48UTM20','IGNF','196','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RGFG95EQGPGU','Guyane Francaise projection Geoportail',NULL,'EPSG','4499','IGNF','RGFG95G','IGNF','PRC9805425',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95EQGPGU_USAGE','projected_crs','IGNF','RGFG95EQGPGU','IGNF','10','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALGUF','Guyane Francaise projection Geoportail',NULL,'EPSG','4499','IGNF','RGFG95G','IGNF','PRC9805425',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALGUF_USAGE','projected_crs','IGNF','GEOPORTALGUF','IGNF','10','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','197','HAO ET AMANU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','HAO ET AMANU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-18.5,-17.58,-141.17,-140.58,0); INSERT INTO "projected_crs" VALUES('IGNF','HAOAM67UTM7S','Hao Amanu (MHPF 1967) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','HAOAM67G','IGNF','PRC0307283',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAOAM67UTM7S_USAGE','projected_crs','IGNF','HAOAM67UTM7S','IGNF','197','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','HAO67UTM7S','Hao Amanu (MHPF 1967) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','HAOAM67G','IGNF','PRC0307283',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAO67UTM7S_USAGE','projected_crs','IGNF','HAO67UTM7S','IGNF','197','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','198','HAO (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','HAO (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-18.5,-18,-141.17,-140.58,0); INSERT INTO "projected_crs" VALUES('IGNF','HAO58UTM7S','Hao (MHPF 1958) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','HAO58G','IGNF','PRC0307286',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HAO58UTM7S_USAGE','projected_crs','IGNF','HAO58UTM7S','IGNF','198','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','199','HARAIKI (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','HARAIKI (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-17.58,-17.42,-143.58,-143.33,0); INSERT INTO "projected_crs" VALUES('IGNF','HARA49UTM7S','Haraiki (SHM 1949) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','HARA49G','IGNF','PRC0307289',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HARA49UTM7S_USAGE','projected_crs','IGNF','HARA49UTM7S','IGNF','199','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','200','HIKUERU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','HIKUERU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-17.83,-17.42,-142.83,-142.42,0); INSERT INTO "projected_crs" VALUES('IGNF','HIKU50UTM7S','Hikueru (SHM 1947-1950) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','HIKU50G','IGNF','PRC0307292',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIKU50UTM7S_USAGE','projected_crs','IGNF','HIKU50UTM7S','IGNF','200','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','201','HIVA OA (ARCHIPEL DES MARQUISES) - UTM SUD FUSEAU 7','HIVA OA (ARCHIPEL DES MARQUISES) - UTM SUD FUSEAU 7',-9.87,-9.6,-139.25,-138.58,0); INSERT INTO "projected_crs" VALUES('IGNF','HIVA60UTM7S','Hiva Oa (MHPF 1960) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','HIVA60G','IGNF','PRC0307235',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIVA60UTM7S_USAGE','projected_crs','IGNF','HIVA60UTM7S','IGNF','201','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','HIVA67UTM7S','Hiva Oa (MHPF 1967) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','HIVA67G','IGNF','PRC0307238',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'HIVA67UTM7S_USAGE','projected_crs','IGNF','HIVA67UTM7S','IGNF','201','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','202','HIVA OA, TAHUATA, MOHOTANI (ARCHIPEL DES MARQUISES) - UTM SUD FUSEAU 7','HIVA OA, TAHUATA, MOHOTANI (ARCHIPEL DES MARQUISES) - UTM SUD FUSEAU 7',-9.88,-9.65,-139.2,-138.75,0); INSERT INTO "projected_crs" VALUES('IGNF','ATUO63UTM7S','IGN 1963 UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','ATUO63G','IGNF','PRC0307241',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ATUO63UTM7S_USAGE','projected_crs','IGNF','ATUO63UTM7S','IGNF','202','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','IGN63UTM7S','IGN 1963 UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','ATUO63G','IGNF','PRC0307241',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN63UTM7S_USAGE','projected_crs','IGNF','IGN63UTM7S','IGNF','202','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','203','RAIATEA, TAHAA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 5','RAIATEA, TAHAA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 5',-17,-16.5,-151.67,-151.33,0); INSERT INTO "projected_crs" VALUES('IGNF','TAHAA53UTM5S','IGN53 Societe UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','TAHAA53G','IGNF','PRC030567',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53UTM5S_USAGE','projected_crs','IGNF','TAHAA53UTM5S','IGNF','203','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RAIA53UTM5S','IGN53 Societe UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','TAHAA53G','IGNF','PRC030567',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIA53UTM5S_USAGE','projected_crs','IGNF','RAIA53UTM5S','IGNF','203','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','204','GRANDE TERRE (NOUVELLE-CALEDONIE) - NOUVELLE-CALEDONIE','GRANDE TERRE (NOUVELLE-CALEDONIE) - NOUVELLE-CALEDONIE',-22.75,-19.5,163.5,167.67,0); INSERT INTO "projected_crs" VALUES('IGNF','IGN72LAMBNC','IGN72 Lambert Nouvelle-Caledonie',NULL,'EPSG','4400','IGNF','IGN72G','IGNF','PRC0149208',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN72LAMBNC_USAGE','projected_crs','IGNF','IGN72LAMBNC','IGNF','204','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','IGN72LAM','IGN72 Lambert Nouvelle-Caledonie',NULL,'EPSG','4400','IGNF','IGN72G','IGNF','PRC0149208',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN72LAM_USAGE','projected_crs','IGNF','IGN72LAM','IGNF','204','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','IGN72UTM58S','IGN72 UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','IGN72G','IGNF','PRC0358209',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'IGN72UTM58S_USAGE','projected_crs','IGNF','IGN72UTM58S','IGNF','194','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','205','ILE JUAN DE NOVA - UTM SUD FUSEAU 38','ILE JUAN DE NOVA - UTM SUD FUSEAU 38',-17.17,-17,42.67,42.83,0); INSERT INTO "projected_crs" VALUES('IGNF','NOVA53UTM38S','JUAN DE NOVA MHM 1953 UTM SUD FUSEAU 38',NULL,'EPSG','4499','IGNF','NOVA53G','IGNF','PRC0338564',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NOVA53UTM38S_USAGE','projected_crs','IGNF','NOVA53UTM38S','IGNF','205','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','206','KAUHEI (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6','KAUHEI (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6',-16,-15.67,-145.33,-145,0); INSERT INTO "projected_crs" VALUES('IGNF','KAUE70UTM6S','Kauehi (MHPF70) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','KAUE70G','IGNF','PRC030664',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KAUE70UTM6S_USAGE','projected_crs','IGNF','KAUE70UTM6S','IGNF','206','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','207','KERGUELEN - UTM SUD FUSEAU 42','KERGUELEN - UTM SUD FUSEAU 42',-50.5,-48,67,71,0); INSERT INTO "projected_crs" VALUES('IGNF','KERG62UTM42S','KERGUELEN K0 IGN 1962 UTM SUD FUSEAU 42',NULL,'EPSG','4499','IGNF','KERG62G','IGNF','PRC034219',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'KERG62UTM42S_USAGE','projected_crs','IGNF','KERG62UTM42S','IGNF','207','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','208','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - KERGUELEN','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - KERGUELEN',-50.5,-48,67,71,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84EQGPKER','Kerguelen projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9812426',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84EQGPKER_USAGE','projected_crs','IGNF','WGS84EQGPKER','IGNF','208','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALKER','Kerguelen projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9812426',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALKER_USAGE','projected_crs','IGNF','GEOPORTALKER','IGNF','208','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','LNGLNG','Lambert Nord de Guerre Lambert Nord de Guerre',NULL,'EPSG','4499','IGNF','LNGPGG','IGNF','PRC013591',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LNGLNG_USAGE','projected_crs','IGNF','LNGLNG','EPSG','1262','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','SYSLN','Lambert Nord de Guerre Lambert Nord de Guerre',NULL,'EPSG','4499','IGNF','LNGPGG','IGNF','PRC013591',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'SYSLN_USAGE','projected_crs','IGNF','SYSLN','EPSG','1262','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','209','LIFOU (ILES LOYAUTE) - UTM SUD FUSEAU 58','LIFOU (ILES LOYAUTE) - UTM SUD FUSEAU 58',-21.22,-20.65,166.96,167.51,0); INSERT INTO "projected_crs" VALUES('IGNF','LIFOU56UT58S','Lifou IGN 56 UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','LIFOU56G','IGNF','PRC0358182',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LIFOU56UT58S_USAGE','projected_crs','IGNF','LIFOU56UT58S','IGNF','209','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','210','MAKEMO (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','MAKEMO (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-16.83,-16.33,-144,-143.33,0); INSERT INTO "projected_crs" VALUES('IGNF','MAKE50UTM7S','Makemo (SHM 1947-1950) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','MAKE50G','IGNF','PRC0307295',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAKE50UTM7S_USAGE','projected_crs','IGNF','MAKE50UTM7S','IGNF','210','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','211','MANGAREVA (ILES GAMBIER) - UTM SUD FUSEAU 8','MANGAREVA (ILES GAMBIER) - UTM SUD FUSEAU 8',-23.45,-22.83,-135.33,-134.58,0); INSERT INTO "projected_crs" VALUES('IGNF','MANGA51UTM8S','Mangareva 1951 UTM Sud fuseau 8',NULL,'EPSG','4499','IGNF','MANGA51G','IGNF','PRC0308230',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MANGA51UTM8S_USAGE','projected_crs','IGNF','MANGA51UTM8S','IGNF','211','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','MANGA51U8S','Mangareva 1951 UTM Sud fuseau 8',NULL,'EPSG','4499','IGNF','MANGA51G','IGNF','PRC0308230',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MANGA51U8S_USAGE','projected_crs','IGNF','MANGA51U8S','IGNF','211','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','212','MARE (ILES LOYAUTE) - UTM SUD FUSEAU 58','MARE (ILES LOYAUTE) - UTM SUD FUSEAU 58',-21.69,-21.29,167.69,168,0); INSERT INTO "projected_crs" VALUES('IGNF','MARE53UTM58S','Mare IGN53 UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','MARE53G','IGNF','PRC0358186',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARE53UTM58S_USAGE','projected_crs','IGNF','MARE53UTM58S','IGNF','212','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','213','MARTINIQUE - UTM NORD FUSEAU 20','MARTINIQUE - UTM NORD FUSEAU 20',14.27,15,-61.25,-60.75,0); INSERT INTO "projected_crs" VALUES('IGNF','MARTFDUTM20','Martinique Fort-Desaix UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','MARTFDG','IGNF','PRC0220144',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MARTFDUTM20_USAGE','projected_crs','IGNF','MARTFDUTM20','IGNF','213','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','MART38UTM20','Martinique Fort-Desaix UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','MARTFDG','IGNF','PRC0220144',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MART38UTM20_USAGE','projected_crs','IGNF','MART38UTM20','IGNF','213','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','214','MAUPITI - UTM SUD FUSEAU 5','MAUPITI - UTM SUD FUSEAU 5',-16.75,-16.25,-152.5,-152,0); INSERT INTO "projected_crs" VALUES('IGNF','MAUPITIUTM5S','Maupiti (MOP 1983) UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','MAUPITIG','IGNF','PRC030582',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MAUPITIUTM5S_USAGE','projected_crs','IGNF','MAUPITIUTM5S','IGNF','214','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RGM04EQGPMYT','Mayotte projection Geoportail',NULL,'EPSG','4499','IGNF','RGM04G','IGNF','PRC9807428',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGM04EQGPMYT_USAGE','projected_crs','IGNF','RGM04EQGPMYT','IGNF','5','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALMYT','Mayotte projection Geoportail',NULL,'EPSG','4499','IGNF','RGM04G','IGNF','PRC9807428',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALMYT_USAGE','projected_crs','IGNF','GEOPORTALMYT','IGNF','5','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','215','MANGAREVA, AGAKAUITAI, AUKENA, MEKIRO (ILES GAMBIER) - UTM SUD FUSEAU 8','MANGAREVA, AGAKAUITAI, AUKENA, MEKIRO (ILES GAMBIER) - UTM SUD FUSEAU 8',-23.18,-23.07,-135.04,-134.89,0); INSERT INTO "projected_crs" VALUES('IGNF','MHPF67UTM8S','MHPF 1967 UTM SUD FUSEAU 8',NULL,'EPSG','4499','IGNF','MHPF67G','IGNF','PRC030858',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MHPF67UTM8S_USAGE','projected_crs','IGNF','MHPF67UTM8S','IGNF','215','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','216','MOOREA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 6','MOOREA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 6',-17.75,-17.25,-150,-149.75,0); INSERT INTO "projected_crs" VALUES('IGNF','MOORE87UTM6S','Moorea 1987 UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','MOOREA87G','IGNF','PRC030679',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOORE87UTM6S_USAGE','projected_crs','IGNF','MOORE87UTM6S','IGNF','216','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','MOOREA87U6S','Moorea 1987 UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','MOOREA87G','IGNF','PRC030679',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOOREA87U6S_USAGE','projected_crs','IGNF','MOOREA87U6S','IGNF','216','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','217','MURUROA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','MURUROA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-22,-21.67,-139.17,-138.58,0); INSERT INTO "projected_crs" VALUES('IGNF','MURU78UTM7S','Mururoa (IGN 1978) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','MURU78G','IGNF','PRC0307307',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU78UTM7S_USAGE','projected_crs','IGNF','MURU78UTM7S','IGNF','217','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','MURU62UTM7S','Mururoa (MHOI 1962) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','MURU62G','IGNF','PRC0307303',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU62UTM7S_USAGE','projected_crs','IGNF','MURU62UTM7S','IGNF','217','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','MURU59UTM7S','Mururoa (MHPF 1959) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','MURU59G','IGNF','PRC0307298',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MURU59UTM7S_USAGE','projected_crs','IGNF','MURU59UTM7S','IGNF','217','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','NEA74LBTNM2','NEA74 NOUMEA Lambert Noumea 2',NULL,'EPSG','4499','IGNF','NEA74G','IGNF','PRC9203409',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NEA74LBTNM2_USAGE','projected_crs','IGNF','NEA74LBTNM2','IGNF','44','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RGNC91EQGPNC','Nouvelle Caledonie projection Geoportail',NULL,'EPSG','4499','IGNF','RGNCG','IGNF','PRC9809429',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNC91EQGPNC_USAGE','projected_crs','IGNF','RGNC91EQGPNC','IGNF','58','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALNCL','Nouvelle Caledonie projection Geoportail',NULL,'EPSG','4499','IGNF','RGNCG','IGNF','PRC9809429',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALNCL_USAGE','projected_crs','IGNF','GEOPORTALNCL','IGNF','58','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','LURESGKL','NOUVELLE TRIANGULATION DU DUCHE DU LUXEMBOURG GAUSS KRUGER LUXEMBOURG',NULL,'EPSG','4530','IGNF','LURESG','IGNF','PRC0406569',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LURESGKL_USAGE','projected_crs','IGNF','LURESGKL','IGNF','45','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','LUXGAUSSK','NOUVELLE TRIANGULATION DU DUCHE DU LUXEMBOURG GAUSS KRUGER LUXEMBOURG',NULL,'EPSG','4530','IGNF','LURESG','IGNF','PRC0406569',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LUXGAUSSK_USAGE','projected_crs','IGNF','LUXGAUSSK','IGNF','45','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','218','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT GRAND CHAMP','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT GRAND CHAMP',41.310015543796,51.299958070717,-4.05379920354209,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMBGC','NTF Lambert Grand Champ',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC011814',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMBGC_USAGE','projected_crs','IGNF','NTFLAMBGC','IGNF','218','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMBGC','NTF Lambert Grand Champ',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC011814',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMBGC_USAGE','projected_crs','IGNF','LAMBGC','IGNF','218','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','219','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT I NORD','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT I NORD',48.1498888194584,51.299958070717,-4.05379920354209,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB1','NTF Lambert I',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01015',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB1_USAGE','projected_crs','IGNF','NTFLAMB1','IGNF','219','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB1','NTF Lambert I',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01015',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB1_USAGE','projected_crs','IGNF','LAMB1','IGNF','219','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','220','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT I CARTO','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT I CARTO',48.1498888194584,51.299958070717,-4.05379920354209,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB1C','NTF Lambert I carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01316',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB1C_USAGE','projected_crs','IGNF','NTFLAMB1C','IGNF','220','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB1C','NTF Lambert I carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01316',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB1C_USAGE','projected_crs','IGNF','LAMB1C','IGNF','220','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','221','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT II CENTRE','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT II CENTRE',45.4499226513968,48.1499671938551,-4.05373473460064,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB2','NTF Lambert II',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01027',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2_USAGE','projected_crs','IGNF','NTFLAMB2','IGNF','221','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB2','NTF Lambert II',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01027',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB2_USAGE','projected_crs','IGNF','LAMB2','IGNF','221','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','222','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT II CARTO','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT II CARTO',45.4499226513968,48.1499671938551,-4.05373473460064,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB2C','NTF Lambert II carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01328',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2C_USAGE','projected_crs','IGNF','NTFLAMB2C','IGNF','222','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB2C','NTF Lambert II carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01328',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB2C_USAGE','projected_crs','IGNF','LAMB2C','IGNF','222','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','223','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT II ETENDU','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT II ETENDU',41.310015543796,50.8499576445959,-4.05378927743516,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB2E','NTF Lambert II etendu',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC012013',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2E_USAGE','projected_crs','IGNF','NTFLAMB2E','IGNF','223','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMBE','NTF Lambert II etendu',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC012013',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMBE_USAGE','projected_crs','IGNF','LAMBE','IGNF','223','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','224','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT III SUD','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT III SUD',42.2999888396489,45.4499976673229,-4.05368768512203,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB3','NTF Lambert III',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01039',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB3_USAGE','projected_crs','IGNF','NTFLAMB3','IGNF','224','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB3','NTF Lambert III',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC01039',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB3_USAGE','projected_crs','IGNF','LAMB3','IGNF','224','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','225','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT III CARTO','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT III CARTO',42.2999888396489,45.4499976673229,-4.05368768512203,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB3C','NTF Lambert III carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC013310',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB3C_USAGE','projected_crs','IGNF','NTFLAMB3C','IGNF','225','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB3C','NTF Lambert III carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC013310',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB3C_USAGE','projected_crs','IGNF','LAMB3C','IGNF','225','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','226','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT IV CORSE','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT IV CORSE',41.3100821709321,43.0200472881681,7.7367772754414,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB4','NTF Lambert IV',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC010411',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB4_USAGE','projected_crs','IGNF','NTFLAMB4','IGNF','226','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB4','NTF Lambert IV',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC010411',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB4_USAGE','projected_crs','IGNF','LAMB4','IGNF','226','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','227','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT IV CARTO','FRANCE METROPOLITAINE (CORSE COMPRISE) - LAMBERT IV CARTO',41.3100821709321,43.0200472881681,7.7367772754414,10,0); INSERT INTO "projected_crs" VALUES('IGNF','NTFLAMB4C','NTF Lambert IV carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC013412',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB4C_USAGE','projected_crs','IGNF','NTFLAMB4C','IGNF','227','IGNF','9'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB4C','NTF Lambert IV carto',NULL,'EPSG','4499','IGNF','NTFPGRAD','IGNF','PRC013412',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB4C_USAGE','projected_crs','IGNF','LAMB4C','IGNF','227','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','228','NUKU HIVA, UA HUKA ET UA POU (ARCHIPEL DES MARQUISES) - UTM SUD FUSEAU 7','NUKU HIVA, UA HUKA ET UA POU (ARCHIPEL DES MARQUISES) - UTM SUD FUSEAU 7',-9.5,-8.77,-140.27,-139.48,0); INSERT INTO "projected_crs" VALUES('IGNF','NUKU72UTM7S','Nuku Hiva UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','NUKU72G','IGNF','PRC0307212',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NUKU72UTM7S_USAGE','projected_crs','IGNF','NUKU72UTM7S','IGNF','228','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','NUKU72U7S','Nuku Hiva UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','NUKU72G','IGNF','PRC0307212',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'NUKU72U7S_USAGE','projected_crs','IGNF','NUKU72U7S','IGNF','228','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','229','OUVEA (ILES LOYAUTE) - UTM SUD FUSEAU 58','OUVEA (ILES LOYAUTE) - UTM SUD FUSEAU 58',-20.78,-20.25,166.11,166.71,0); INSERT INTO "projected_crs" VALUES('IGNF','OUVE72UTM58S','Ouvea MHNC 1972 UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','OUVE72G','IGNF','PRC0358195',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'OUVE72UTM58S_USAGE','projected_crs','IGNF','OUVE72UTM58S','IGNF','229','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','OUVEA72U58S','Ouvea MHNC 1972 UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','OUVE72G','IGNF','PRC0358195',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'OUVEA72U58S_USAGE','projected_crs','IGNF','OUVEA72U58S','IGNF','229','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','230','ILE DE LA REUNION - GAUSS LABORDE REUNION','ILE DE LA REUNION - GAUSS LABORDE REUNION',-21.42,-20.76,55.17,55.92,0); INSERT INTO "projected_crs" VALUES('IGNF','PDN92GAUSSL','Piton des Neiges (1992) Gauss Laborde Reunion',NULL,'EPSG','4499','IGNF','PDN92G','IGNF','PRC0508542',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PDN92GAUSSL_USAGE','projected_crs','IGNF','PDN92GAUSSL','IGNF','230','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','PDN08GAUSSL','Piton des Neiges (2008) Gauss Laborde Reunion',NULL,'EPSG','4499','IGNF','PDN08G','IGNF','PRC0508546',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PDN08GAUSSL_USAGE','projected_crs','IGNF','PDN08GAUSSL','IGNF','230','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RGPFEQGPPF','Polynesie Francaise projection Geoportail',NULL,'EPSG','4499','IGNF','RGPFG','IGNF','PRC9811430',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFEQGPPF_USAGE','projected_crs','IGNF','RGPFEQGPPF','IGNF','59','IGNF','6'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALPYF','Polynesie Francaise projection Geoportail',NULL,'EPSG','4499','IGNF','RGPFG','IGNF','PRC9811430',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALPYF_USAGE','projected_crs','IGNF','GEOPORTALPYF','IGNF','59','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','231','RAIVAVAE (ARCHIPEL DES AUSTRALES) - UTM SUD FUSEAU 6','RAIVAVAE (ARCHIPEL DES AUSTRALES) - UTM SUD FUSEAU 6',-23.92,-23.75,-147.75,-147.58,0); INSERT INTO "projected_crs" VALUES('IGNF','RAIV54UTM6S','Raivavae (Cadastre) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RAIV54G','IGNF','PRC0306215',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIV54UTM6S_USAGE','projected_crs','IGNF','RAIV54UTM6S','IGNF','231','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RAIV66UTM6S','Raivavae (MHPF 1966) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RAIV66G','IGNF','PRC0306218',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RAIV66UTM6S_USAGE','projected_crs','IGNF','RAIV66UTM6S','IGNF','231','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','232','RANGIROA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6','RANGIROA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6',-14.83,-14.42,-148,-147.15,0); INSERT INTO "projected_crs" VALUES('IGNF','RANGI47UTM6S','Rangiroa (MGT 1947) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RANGI47G','IGNF','PRC0306311',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI47UTM6S_USAGE','projected_crs','IGNF','RANGI47UTM6S','IGNF','232','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RANGI47U6S','Rangiroa (MGT 1947) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RANGI47G','IGNF','PRC0306311',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI47U6S_USAGE','projected_crs','IGNF','RANGI47U6S','IGNF','232','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RANGI59UTM6S','Rangiroa (MHPF 1959) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RANGI59G','IGNF','PRC0306314',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI59UTM6S_USAGE','projected_crs','IGNF','RANGI59UTM6S','IGNF','232','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RANGI59U6S','Rangiroa (MHPF 1959) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RANGI59G','IGNF','PRC0306314',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI59U6S_USAGE','projected_crs','IGNF','RANGI59U6S','IGNF','232','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RANGI68UTM6S','Rangiroa (MHPF 1966-68) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RANGI68G','IGNF','PRC0306317',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI68UTM6S_USAGE','projected_crs','IGNF','RANGI68UTM6S','IGNF','232','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RANGI68U6S','Rangiroa (MHPF 1966-68) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RANGI68G','IGNF','PRC0306317',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RANGI68U6S_USAGE','projected_crs','IGNF','RANGI68U6S','IGNF','232','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','233','ILES WALLIS, FUTUNA ET ALOFI - UTM SUD FUSEAU 1','ILES WALLIS, FUTUNA ET ALOFI - UTM SUD FUSEAU 1',-14.39,-13.16,-179.98,-176.3,0); INSERT INTO "projected_crs" VALUES('IGNF','RGWF96UTM1S','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 UTM SUD FUSEAU 1',NULL,'EPSG','4499','IGNF','RGWF96GEO','IGNF','PRC0301588',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96UTM1S_USAGE','projected_crs','IGNF','RGWF96UTM1S','IGNF','233','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','REUN49GAUSSL','Reunion Piton des Neiges Gauss Laborde',NULL,'EPSG','4499','IGNF','REUN49G','IGNF','PRC0508114',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'REUN49GAUSSL_USAGE','projected_crs','IGNF','REUN49GAUSSL','IGNF','230','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','REUN47GAUSSL','Reunion Piton des Neiges Gauss Laborde',NULL,'EPSG','4499','IGNF','REUN49G','IGNF','PRC0508114',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'REUN47GAUSSL_USAGE','projected_crs','IGNF','REUN47GAUSSL','IGNF','230','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RGR92EQGPREU','Reunion projection Geoportail',NULL,'EPSG','4499','IGNF','RGR92G','IGNF','PRC9806431',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGR92EQGPREU_USAGE','projected_crs','IGNF','RGR92EQGPREU','IGNF','56','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALREU','Reunion projection Geoportail',NULL,'EPSG','4499','IGNF','RGR92G','IGNF','PRC9806431',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALREU_USAGE','projected_crs','IGNF','GEOPORTALREU','IGNF','56','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','234','ANTILLES FRANCAISES - UTM NORD FUSEAU 20','ANTILLES FRANCAISES - UTM NORD FUSEAU 20',14.25,18.2,-63.2,-60.73,0); INSERT INTO "projected_crs" VALUES('IGNF','RGAF09UTM20','RGAF09 UTM Nord Fuseau 20',NULL,'EPSG','4499','IGNF','RGAF09G','IGNF','PRC0220527',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20_USAGE','projected_crs','IGNF','RGAF09UTM20','IGNF','234','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','235','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC42 (CONIQUE CONFORME ZONE 1)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC42 (CONIQUE CONFORME ZONE 1)',41,43,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC42','RGF93 CC42 zone 1',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8142383',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC42_USAGE','projected_crs','IGNF','RGF93CC42','IGNF','235','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','236','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC43 (CONIQUE CONFORME ZONE 2)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC43 (CONIQUE CONFORME ZONE 2)',42,44,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC43','RGF93 CC43 zone 2',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8143384',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC43_USAGE','projected_crs','IGNF','RGF93CC43','IGNF','236','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','237','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC44 (CONIQUE CONFORME ZONE 3)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC44 (CONIQUE CONFORME ZONE 3)',43,45,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC44','RGF93 CC44 zone 3',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8144385',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC44_USAGE','projected_crs','IGNF','RGF93CC44','IGNF','237','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','238','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC45 (CONIQUE CONFORME ZONE 4)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC45 (CONIQUE CONFORME ZONE 4)',44,46,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC45','RGF93 CC45 zone 4',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8145386',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC45_USAGE','projected_crs','IGNF','RGF93CC45','IGNF','238','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','239','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC46 (CONIQUE CONFORME ZONE 5)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC46 (CONIQUE CONFORME ZONE 5)',45,47,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC46','RGF93 CC46 zone 5',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8146387',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC46_USAGE','projected_crs','IGNF','RGF93CC46','IGNF','239','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','240','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC47 (CONIQUE CONFORME ZONE 6)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC47 (CONIQUE CONFORME ZONE 6)',46,48,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC47','RGF93 CC47 zone 6',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8147388',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC47_USAGE','projected_crs','IGNF','RGF93CC47','IGNF','240','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','241','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC48 (CONIQUE CONFORME ZONE 7)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC48 (CONIQUE CONFORME ZONE 7)',47,49,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC48','RGF93 CC48 zone 7',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8148389',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC48_USAGE','projected_crs','IGNF','RGF93CC48','IGNF','241','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','242','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC49 (CONIQUE CONFORME ZONE 8)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC49 (CONIQUE CONFORME ZONE 8)',48,50,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC49','RGF93 CC49 zone 8',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8149390',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC49_USAGE','projected_crs','IGNF','RGF93CC49','IGNF','242','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','243','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC50 (CONIQUE CONFORME ZONE 9)','FRANCE METROPOLITAINE (CORSE COMPRISE) - CC50 (CONIQUE CONFORME ZONE 9)',49,51,-5.5,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93CC50','RGF93 CC50 zone 9',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC8150391',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC50_USAGE','projected_crs','IGNF','RGF93CC50','IGNF','243','IGNF','10'); INSERT INTO "projected_crs" VALUES('IGNF','RGF93LAMB93','RGF93 Lambert 93',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC014052',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93LAMB93_USAGE','projected_crs','IGNF','RGF93LAMB93','IGNF','4','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','LAMB93','RGF93 Lambert 93',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC014052',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'LAMB93_USAGE','projected_crs','IGNF','LAMB93','IGNF','4','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','244','FRANCE METROPOLITAINE (CORSE COMPRISE) - UTM NORD FUSEAU 31','FRANCE METROPOLITAINE (CORSE COMPRISE) - UTM NORD FUSEAU 31',41,52,0,6,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93UTM31','RGF93 UTM fuseau 31',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC0231393',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93UTM31_USAGE','projected_crs','IGNF','RGF93UTM31','IGNF','244','IGNF','6'); INSERT INTO "projected_crs" VALUES('IGNF','UTM31RGF93','RGF93 UTM fuseau 31',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC0231393',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM31RGF93_USAGE','projected_crs','IGNF','UTM31RGF93','IGNF','244','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','245','FRANCE METROPOLITAINE (CORSE COMPRISE) - UTM NORD FUSEAU 32','FRANCE METROPOLITAINE (CORSE COMPRISE) - UTM NORD FUSEAU 32',41,52,6,10,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93UTM32','RGF93 UTM fuseau 32',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC0232394',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93UTM32_USAGE','projected_crs','IGNF','RGF93UTM32','IGNF','245','IGNF','6'); INSERT INTO "projected_crs" VALUES('IGNF','UTM32RGF93','RGF93 UTM fuseau 32',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC0232394',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM32RGF93_USAGE','projected_crs','IGNF','UTM32RGF93','IGNF','245','IGNF','6'); INSERT INTO "extent" VALUES('IGNF','246','FRANCE METROPOLITAINE (CORSE COMPRISE) - UTM NORD FUSEAU 30','FRANCE METROPOLITAINE (CORSE COMPRISE) - UTM NORD FUSEAU 30',41,52,-5.5,0,0); INSERT INTO "projected_crs" VALUES('IGNF','RGF93UTM30','RGF93 UTM NORD FUSEAU 30',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC0230392',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGF93UTM30_USAGE','projected_crs','IGNF','RGF93UTM30','IGNF','246','IGNF','6'); INSERT INTO "projected_crs" VALUES('IGNF','UTM30RGF93','RGF93 UTM NORD FUSEAU 30',NULL,'EPSG','4499','IGNF','RGF93G','IGNF','PRC0230392',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM30RGF93_USAGE','projected_crs','IGNF','UTM30RGF93','IGNF','246','IGNF','6'); INSERT INTO "projected_crs" VALUES('IGNF','RGFG95UTM21','RGFG95 UTM Nord f.21',NULL,'EPSG','4499','IGNF','RGFG95G','IGNF','PRC0221157',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95UTM21_USAGE','projected_crs','IGNF','RGFG95UTM21','IGNF','170','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','UTM21RGFG95','RGFG95 UTM Nord f.21',NULL,'EPSG','4499','IGNF','RGFG95G','IGNF','PRC0221157',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM21RGFG95_USAGE','projected_crs','IGNF','UTM21RGFG95','IGNF','170','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','RGFG95UTM22','RGFG95 UTM Nord f.22',NULL,'EPSG','4499','IGNF','RGFG95G','IGNF','PRC0222158',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95UTM22_USAGE','projected_crs','IGNF','RGFG95UTM22','IGNF','171','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','UTM22RGFG95','RGFG95 UTM Nord f.22',NULL,'EPSG','4499','IGNF','RGFG95G','IGNF','PRC0222158',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM22RGFG95_USAGE','projected_crs','IGNF','UTM22RGFG95','IGNF','171','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','RGM04UTM38S','RGM04 UTM Sud fuseau 38',NULL,'EPSG','4499','IGNF','RGM04G','IGNF','PRC0338372',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGM04UTM38S_USAGE','projected_crs','IGNF','RGM04UTM38S','IGNF','166','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','RGNCLAMBNC','RGNC Lambert Nouvelle-Caledonie',NULL,'EPSG','4499','IGNF','RGNCG','IGNF','PRC0149202',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCLAMBNC_USAGE','projected_crs','IGNF','RGNCLAMBNC','IGNF','58','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','RGNCLAM','RGNC Lambert Nouvelle-Caledonie',NULL,'EPSG','4499','IGNF','RGNCG','IGNF','PRC0149202',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCLAM_USAGE','projected_crs','IGNF','RGNCLAM','IGNF','58','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','247','NOUVELLE-CALEDONIE - UTM SUD FUSEAU 57','NOUVELLE-CALEDONIE - UTM SUD FUSEAU 57',-26.65,-14.6,156.1,162,0); INSERT INTO "projected_crs" VALUES('IGNF','RGNCUTM57S','RGNC UTM Sud fuseau 57',NULL,'EPSG','4499','IGNF','RGNCG','IGNF','PRC0357203',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCUTM57S_USAGE','projected_crs','IGNF','RGNCUTM57S','IGNF','247','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','248','NOUVELLE-CALEDONIE - UTM SUD FUSEAU 58','NOUVELLE-CALEDONIE - UTM SUD FUSEAU 58',-26.65,-14.6,162,168,0); INSERT INTO "projected_crs" VALUES('IGNF','RGNCUTM58S','RGNC UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','RGNCG','IGNF','PRC0358204',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCUTM58S_USAGE','projected_crs','IGNF','RGNCUTM58S','IGNF','248','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','249','NOUVELLE-CALEDONIE - UTM SUD FUSEAU 59','NOUVELLE-CALEDONIE - UTM SUD FUSEAU 59',-26.65,-14.6,168,174,0); INSERT INTO "projected_crs" VALUES('IGNF','RGNCUTM59S','RGNC UTM Sud fuseau 59',NULL,'EPSG','4499','IGNF','RGNCG','IGNF','PRC0359205',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGNCUTM59S_USAGE','projected_crs','IGNF','RGNCUTM59S','IGNF','249','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','250','POLYNESIE FRANCAISE - UTM SUD FUSEAU 5','POLYNESIE FRANCAISE - UTM SUD FUSEAU 5',-28,-7,-156,-150,0); INSERT INTO "projected_crs" VALUES('IGNF','RGPFUTM5S','RGPF UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','RGPFG','IGNF','PRC030574',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM5S_USAGE','projected_crs','IGNF','RGPFUTM5S','IGNF','250','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','251','POLYNESIE FRANCAISE - UTM SUD FUSEAU 6','POLYNESIE FRANCAISE - UTM SUD FUSEAU 6',-28,-7,-150,-144,0); INSERT INTO "projected_crs" VALUES('IGNF','RGPFUTM6S','RGPF UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','RGPFG','IGNF','PRC030675',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM6S_USAGE','projected_crs','IGNF','RGPFUTM6S','IGNF','251','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','252','POLYNESIE FRANCAISE - UTM SUD FUSEAU 7','POLYNESIE FRANCAISE - UTM SUD FUSEAU 7',-28,-7,-144,-138,0); INSERT INTO "projected_crs" VALUES('IGNF','RGPFUTM7S','RGPF UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','RGPFG','IGNF','PRC030776',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM7S_USAGE','projected_crs','IGNF','RGPFUTM7S','IGNF','252','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','253','POLYNESIE FRANCAISE - UTM SUD FUSEAU 8','POLYNESIE FRANCAISE - UTM SUD FUSEAU 8',-28,-7,-138,-134,0); INSERT INTO "projected_crs" VALUES('IGNF','RGPFUTM8S','RGPF UTM SUD FUSEAU 8',NULL,'EPSG','4499','IGNF','RGPFG','IGNF','PRC0308576',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM8S_USAGE','projected_crs','IGNF','RGPFUTM8S','IGNF','253','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','254','ILE DE LA REUNION - UTM SUD FUSEAU 40','ILE DE LA REUNION - UTM SUD FUSEAU 40',-21.42,-20.75,55.17,55.92,0); INSERT INTO "projected_crs" VALUES('IGNF','RGR92UTM40S','RGR92 UTM 40 Sud',NULL,'EPSG','4499','IGNF','RGR92G','IGNF','PRC0340361',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGR92UTM40S_USAGE','projected_crs','IGNF','RGR92UTM40S','IGNF','254','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','255','SAINT-PIERRE-ET-MIQUELON - UTM NORD FUSEAU 21','SAINT-PIERRE-ET-MIQUELON - UTM NORD FUSEAU 21',46.7,47.2,-56.49,-56.1,0); INSERT INTO "projected_crs" VALUES('IGNF','RGSPM06U21','RGSPM06 UTM Nord fuseau 21',NULL,'EPSG','4499','IGNF','RGSPM06G','IGNF','PRC0221378',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06U21_USAGE','projected_crs','IGNF','RGSPM06U21','IGNF','255','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','RGTAAFUTM37S','RGTAAF07 UTM Sud fuseau 37',NULL,'EPSG','4499','IGNF','RGTAAF07G','IGNF','PRC0337418',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFUTM37S_USAGE','projected_crs','IGNF','RGTAAFUTM37S','IGNF','61','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','256','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF) - UTM SUD FUSEAU 39','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF) - UTM SUD FUSEAU 39',-80,-11,48,54,0); INSERT INTO "projected_crs" VALUES('IGNF','RGTAAFUTM39S','RGTAAF07 UTM Sud fuseau 39',NULL,'EPSG','4499','IGNF','RGTAAF07G','IGNF','PRC0339419',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFUTM39S_USAGE','projected_crs','IGNF','RGTAAFUTM39S','IGNF','256','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','257','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF) - UTM SUD FUSEAU 42','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF) - UTM SUD FUSEAU 42',-80,-11,66,72,0); INSERT INTO "projected_crs" VALUES('IGNF','RGTAAFUTM42S','RGTAAF07 UTM Sud fuseau 42',NULL,'EPSG','4499','IGNF','RGTAAF07G','IGNF','PRC0342420',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFUTM42S_USAGE','projected_crs','IGNF','RGTAAFUTM42S','IGNF','257','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','258','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF) - UTM SUD FUSEAU 43','TERRES AUSTRALES ET ANTARCTIQUES FRANCAISES (TAAF) - UTM SUD FUSEAU 43',-80,-11,72,78,0); INSERT INTO "projected_crs" VALUES('IGNF','RGTAAFUTM43S','RGTAAF07 UTM Sud fuseau 43',NULL,'EPSG','4499','IGNF','RGTAAF07G','IGNF','PRC0343421',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFUTM43S_USAGE','projected_crs','IGNF','RGTAAFUTM43S','IGNF','258','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','RGTAAFUTM53S','RGTAAF07 UTM SUD FUSEAU 53',NULL,'EPSG','4499','IGNF','RGTAAF07G','IGNF','PRC0353563',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFUTM53S_USAGE','projected_crs','IGNF','RGTAAFUTM53S','IGNF','61','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','RRAFUTM20','RRAF UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','RRAFG','IGNF','PRC0220170',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20_USAGE','projected_crs','IGNF','RRAFUTM20','IGNF','234','IGNF','4'); INSERT INTO "projected_crs" VALUES('IGNF','UTM20W84MART','RRAF UTM Nord fuseau 20',NULL,'EPSG','4499','IGNF','RRAFG','IGNF','PRC0220170',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM20W84MART_USAGE','projected_crs','IGNF','UTM20W84MART','IGNF','234','IGNF','4'); INSERT INTO "extent" VALUES('IGNF','259','RURUTU (ARCHIPEL DES AUSTRALES) - UTM SUD FUSEAU 5','RURUTU (ARCHIPEL DES AUSTRALES) - UTM SUD FUSEAU 5',-22.58,-22.25,-151.5,-151.33,0); INSERT INTO "projected_crs" VALUES('IGNF','RUSAT84UTM5S','Rurutu (SAT84) UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','RUSAT84G','IGNF','PRC030570',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RUSAT84UTM5S_USAGE','projected_crs','IGNF','RUSAT84UTM5S','IGNF','259','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','SAT84UTM5S','Rurutu (SAT84) UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','RUSAT84G','IGNF','PRC030570',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'SAT84UTM5S_USAGE','projected_crs','IGNF','SAT84UTM5S','IGNF','259','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','260','ILE SAINT-PAUL - UTM SUD FUSEAU 43','ILE SAINT-PAUL - UTM SUD FUSEAU 43',-38.77,-38.67,77.48,77.58,0); INSERT INTO "projected_crs" VALUES('IGNF','STPL69UTM43S','Saint-Paul UTM Sud fuseau 43',NULL,'EPSG','4499','IGNF','STPL69G','IGNF','PRC034341',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPL69UTM43S_USAGE','projected_crs','IGNF','STPL69UTM43S','IGNF','260','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','RGSPM06EQGP','Saint-Pierre-et-Miquelon Geoportail',NULL,'EPSG','4499','IGNF','RGSPM06G','IGNF','PRC9808432',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06EQGP_USAGE','projected_crs','IGNF','RGSPM06EQGP','IGNF','60','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALSPM','Saint-Pierre-et-Miquelon Geoportail',NULL,'EPSG','4499','IGNF','RGSPM06G','IGNF','PRC9808432',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALSPM_USAGE','projected_crs','IGNF','GEOPORTALSPM','IGNF','60','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','261','ILE DES PINS (NOUVELLE-CALEDONIE) - UTM SUD FUSEAU 58','ILE DES PINS (NOUVELLE-CALEDONIE) - UTM SUD FUSEAU 58',-22.8,-22.44,167.29,167.62,0); INSERT INTO "projected_crs" VALUES('IGNF','ST84UTM58S','ST 84 ILE DES PINS UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','ST84G','IGNF','PRC0358407',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ST84UTM58S_USAGE','projected_crs','IGNF','ST84UTM58S','IGNF','261','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','ST87UTM58S','ST 87 OUVEA UTM Sud fuseau 58',NULL,'EPSG','4499','IGNF','ST87G','IGNF','PRC0358405',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'ST87UTM58S_USAGE','projected_crs','IGNF','ST87UTM58S','IGNF','229','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','STPM50UTM21','St-Pierre-et-Miquelon UTM Nord f.21',NULL,'EPSG','4499','IGNF','STPM50G','IGNF','PRC0221141',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'STPM50UTM21_USAGE','projected_crs','IGNF','STPM50UTM21','IGNF','255','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','262','TAHAA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 5','TAHAA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 5',-16.7,-16.53,-151.58,-151.38,0); INSERT INTO "projected_crs" VALUES('IGNF','TAHAAUTM5S','Tahaa UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','TAHAAG','IGNF','PRC0305187',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAAUTM5S_USAGE','projected_crs','IGNF','TAHAAUTM5S','IGNF','262','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','TAHAAUTM05S','Tahaa UTM Sud fuseau 5',NULL,'EPSG','4499','IGNF','TAHAAG','IGNF','PRC0305187',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHAAUTM05S_USAGE','projected_crs','IGNF','TAHAAUTM05S','IGNF','262','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','263','TAHITI (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 6','TAHITI (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 6',-18,-17,-150,-149,0); INSERT INTO "projected_crs" VALUES('IGNF','TAHI79UTM6S','Tahiti (IGN79) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TAHI79G','IGNF','PRC030655',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI79UTM6S_USAGE','projected_crs','IGNF','TAHI79UTM6S','IGNF','263','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','TAHI51UTM6S','TAHITI TERME NORD UTM SUD FUSEAU 6',NULL,'EPSG','4499','IGNF','TAHI51G','IGNF','PRC0306172',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI51UTM6S_USAGE','projected_crs','IGNF','TAHI51UTM6S','IGNF','263','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','TAHI51UTM06S','TAHITI TERME NORD UTM SUD FUSEAU 6',NULL,'EPSG','4499','IGNF','TAHI51G','IGNF','PRC0306172',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAHI51UTM06S_USAGE','projected_crs','IGNF','TAHI51UTM06S','IGNF','263','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','264','TAKAROA ET TAKAPOTO (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6','TAKAROA ET TAKAPOTO (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6',-14.75,-14.25,-145.33,-144.75,0); INSERT INTO "projected_crs" VALUES('IGNF','TAKA69UTM6S','Takaroa Takapoto (SHM 1969) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TAKA69G','IGNF','PRC0306320',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TAKA69UTM6S_USAGE','projected_crs','IGNF','TAKA69UTM6S','IGNF','264','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','265','TANNA (ARCHIPEL DU VANUATU) - UTM SUD FUSEAU 59','TANNA (ARCHIPEL DU VANUATU) - UTM SUD FUSEAU 59',-19.67,-19.08,169.17,169.83,0); INSERT INTO "projected_crs" VALUES('IGNF','TANNAUTM59S','Tanna UTM Sud fuseau 59',NULL,'EPSG','4499','IGNF','TANNAG','IGNF','PRC0359190',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TANNAUTM59S_USAGE','projected_crs','IGNF','TANNAUTM59S','IGNF','265','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','266','ARCHIPEL POINTE GEOLOGIE (TERRE ADELIE) - STEREOGRAPHIQUE POLAIRE SUD TERRE ADELIE','ARCHIPEL POINTE GEOLOGIE (TERRE ADELIE) - STEREOGRAPHIQUE POLAIRE SUD TERRE ADELIE',-66.72,-66.6,139.67,140.12,0); INSERT INTO "projected_crs" VALUES('IGNF','PGP50STEREPS','TERRE ADELIE POINTE GEOLOGIE PERROUD STEREO POLAIRE SUD (TANGENTE)',NULL,'EPSG','4499','IGNF','PGP50G','IGNF','PRC090126',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'PGP50STEREPS_USAGE','projected_crs','IGNF','PGP50STEREPS','IGNF','266','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','TERA50STEREO','TERRE ADELIE POINTE GEOLOGIE PERROUD STEREO POLAIRE SUD (TANGENTE)',NULL,'EPSG','4499','IGNF','PGP50G','IGNF','PRC090126',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TERA50STEREO_USAGE','projected_crs','IGNF','TERA50STEREO','IGNF','266','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','267','TETIAROA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 6','TETIAROA (ARCHIPEL DE LA SOCIETE) - UTM SUD FUSEAU 6',-17.1,-17.02,-149.6,-149.53,0); INSERT INTO "projected_crs" VALUES('IGNF','TETIA90UTM6S','Tetiaroa (MOP90) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TETIA90G','IGNF','PRC030661',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TETIA90UTM6S_USAGE','projected_crs','IGNF','TETIA90UTM6S','IGNF','267','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','MOP90UTM6S','Tetiaroa (MOP90) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TETIA90G','IGNF','PRC030661',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MOP90UTM6S_USAGE','projected_crs','IGNF','MOP90UTM6S','IGNF','267','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','268','TIKEHAU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6','TIKEHAU (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 6',-15.2,-14.83,-148.5,-148,0); INSERT INTO "projected_crs" VALUES('IGNF','TIKE60UTM6S','Tikehau (MHPF 1960) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TIKE60G','IGNF','PRC0306323',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE60UTM6S_USAGE','projected_crs','IGNF','TIKE60UTM6S','IGNF','268','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','TIKE88UTM6S','TIKEHAU (MOP88) UTM SUD FUSEAU 6',NULL,'EPSG','4499','IGNF','TIKE88G','IGNF','PRC0306585',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE88UTM6S_USAGE','projected_crs','IGNF','TIKE88UTM6S','IGNF','268','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','TIKE50UTM6S','Tikehau (SHM 1947-1950) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TIKE50G','IGNF','PRC0306326',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TIKE50UTM6S_USAGE','projected_crs','IGNF','TIKE50UTM6S','IGNF','268','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','269','ILE TROMELIN - MERCATOR DIRECTE','ILE TROMELIN - MERCATOR DIRECTE',-15.9,-15.87,54.51,54.53,0); INSERT INTO "projected_crs" VALUES('IGNF','TROM56MD','TROMELIN SGM 1956 MERCATOR DIRECTE',NULL,'EPSG','4499','IGNF','TROM56G','IGNF','PRC0701131',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TROM56MD_USAGE','projected_crs','IGNF','TROM56MD','IGNF','269','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','270','APATAKI, RAPA et HAO - UTM SUD FUSEAU 6','APATAKI, RAPA et HAO - UTM SUD FUSEAU 6',-27.75,-15.293,-146.4644,-144,0); INSERT INTO "projected_crs" VALUES('IGNF','TUAM86UTM6S','Tuamotu (MOP86) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TUAM86G','IGNF','PRC0306330',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUAM86UTM6S_USAGE','projected_crs','IGNF','TUAM86UTM6S','IGNF','270','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','APAT86UTM6S','Tuamotu (MOP86) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TUAM86G','IGNF','PRC0306330',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT86UTM6S_USAGE','projected_crs','IGNF','APAT86UTM6S','IGNF','270','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','271','APATAKI, RAPA et HAO - UTM SUD FUSEAU 7','APATAKI, RAPA et HAO - UTM SUD FUSEAU 7',-27.75,-15.293,-144,-140.5833,0); INSERT INTO "projected_crs" VALUES('IGNF','TUAM86UTM7S','Tuamotu (MOP86) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','TUAM86G','IGNF','PRC0307331',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUAM86UTM7S_USAGE','projected_crs','IGNF','TUAM86UTM7S','IGNF','271','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','APAT86UTM7S','Tuamotu (MOP86) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','TUAM86G','IGNF','PRC0307331',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'APAT86UTM7S_USAGE','projected_crs','IGNF','APAT86UTM7S','IGNF','271','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','272','TUBUAI (ARCHIPEL DES AUSTRALES) - UTM SUD FUSEAU 6','TUBUAI (ARCHIPEL DES AUSTRALES) - UTM SUD FUSEAU 6',-23.45,-23.25,-149.58,-149.33,0); INSERT INTO "projected_crs" VALUES('IGNF','TUBU69UTM6S','Tubuai (MHPF 1969) UTM Sud fuseau 6',NULL,'EPSG','4499','IGNF','TUBU69G','IGNF','PRC0306227',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TUBU69UTM6S_USAGE','projected_crs','IGNF','TUBU69UTM6S','IGNF','272','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','273','TUREIA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7','TUREIA (ARCHIPEL DES TUAMOTU) - UTM SUD FUSEAU 7',-21,-20.67,-139.83,-138.83,0); INSERT INTO "projected_crs" VALUES('IGNF','TURI69UTM7S','Tureia (SHM 1969) UTM Sud fuseau 7',NULL,'EPSG','4499','IGNF','TURI69G','IGNF','PRC0307308',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'TURI69UTM7S_USAGE','projected_crs','IGNF','TURI69UTM7S','IGNF','273','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','274','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ILES WALLIS, FUTUNA ET ALOFI','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - ILES WALLIS, FUTUNA ET ALOFI',-14.39,-13.16,-179.98,-176.3,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84EQGPWF','Wallis et Futuna projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9810433',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84EQGPWF_USAGE','projected_crs','IGNF','WGS84EQGPWF','IGNF','274','IGNF','5'); INSERT INTO "projected_crs" VALUES('IGNF','GEOPORTALWLF','Wallis et Futuna projection Geoportail',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC9810433',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'GEOPORTALWLF_USAGE','projected_crs','IGNF','GEOPORTALWLF','IGNF','274','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','275','ILE D''UVEA (WALLIS) - UTM SUD FUSEAU 1','ILE D''UVEA (WALLIS) - UTM SUD FUSEAU 1',-13.42,-13.17,-176.3,-176.1,0); INSERT INTO "projected_crs" VALUES('IGNF','WALL76UTM1S','Wallis (MOP 1976) UTM Sud fuseau 1',NULL,'EPSG','4499','IGNF','WALL76G','IGNF','PRC030144',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WALL76UTM1S_USAGE','projected_crs','IGNF','WALL76UTM1S','IGNF','275','IGNF','2'); INSERT INTO "projected_crs" VALUES('IGNF','WALL78UTM1S','Wallis (MOP 1978) UTM Sud fuseau 1',NULL,'EPSG','4499','IGNF','WALL78G','IGNF','PRC030147',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WALL78UTM1S_USAGE','projected_crs','IGNF','WALL78UTM1S','IGNF','275','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','276','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM NORD FUSEAU 30','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM NORD FUSEAU 30',0,80,-6,0,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS72UTM30','WGS72 UTM fuseau 30',NULL,'EPSG','4499','IGNF','WGS72G','IGNF','PRC0230345',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM30_USAGE','projected_crs','IGNF','WGS72UTM30','IGNF','276','IGNF','7'); INSERT INTO "projected_crs" VALUES('IGNF','UTM30W72','WGS72 UTM fuseau 30',NULL,'EPSG','4499','IGNF','WGS72G','IGNF','PRC0230345',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM30W72_USAGE','projected_crs','IGNF','UTM30W72','IGNF','276','IGNF','7'); INSERT INTO "extent" VALUES('IGNF','277','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM NORD FUSEAU 31','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM NORD FUSEAU 31',0,80,0,6,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS72UTM31','WGS72 UTM fuseau 31',NULL,'EPSG','4499','IGNF','WGS72G','IGNF','PRC0231346',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM31_USAGE','projected_crs','IGNF','WGS72UTM31','IGNF','277','IGNF','7'); INSERT INTO "projected_crs" VALUES('IGNF','UTM31W72','WGS72 UTM fuseau 31',NULL,'EPSG','4499','IGNF','WGS72G','IGNF','PRC0231346',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM31W72_USAGE','projected_crs','IGNF','UTM31W72','IGNF','277','IGNF','7'); INSERT INTO "extent" VALUES('IGNF','278','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM NORD FUSEAU 32','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM NORD FUSEAU 32',0,80,6,12,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS72UTM32','WGS72 UTM fuseau 32',NULL,'EPSG','4499','IGNF','WGS72G','IGNF','PRC0232348',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM32_USAGE','projected_crs','IGNF','WGS72UTM32','IGNF','278','IGNF','7'); INSERT INTO "projected_crs" VALUES('IGNF','UTM32W72','WGS72 UTM fuseau 32',NULL,'EPSG','4499','IGNF','WGS72G','IGNF','PRC0232348',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM32W72_USAGE','projected_crs','IGNF','UTM32W72','IGNF','278','IGNF','7'); INSERT INTO "extent" VALUES('IGNF','279','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 1','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 1',-80,0,-180,-174,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS72UTM1S','WGS72 UTM Sud Fuseau 1',NULL,'EPSG','4499','IGNF','WGS72G','IGNF','PRC0301545',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM1S_USAGE','projected_crs','IGNF','WGS72UTM1S','IGNF','279','IGNF','10'); INSERT INTO "projected_crs" VALUES('IGNF','WGS84MILLGP','WGS84 PROJECTION MILLER GEOPORTAIL',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC7001567',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84MILLGP_USAGE','projected_crs','IGNF','WGS84MILLGP','IGNF','75','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','MILLER','WGS84 PROJECTION MILLER GEOPORTAIL',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC7001567',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'MILLER_USAGE','projected_crs','IGNF','MILLER','IGNF','75','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','WGS84UTM30','WGS84 UTM fuseau 30',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0230353',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM30_USAGE','projected_crs','IGNF','WGS84UTM30','IGNF','276','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','UTM30W84','WGS84 UTM fuseau 30',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0230353',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM30W84_USAGE','projected_crs','IGNF','UTM30W84','IGNF','276','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','WGS84UTM31','WGS84 UTM fuseau 31',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0231354',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM31_USAGE','projected_crs','IGNF','WGS84UTM31','IGNF','277','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','UTM31W84','WGS84 UTM fuseau 31',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0231354',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM31W84_USAGE','projected_crs','IGNF','UTM31W84','IGNF','277','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','WGS84UTM32','WGS84 UTM NORD FUSEAU 32',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0232355',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM32_USAGE','projected_crs','IGNF','WGS84UTM32','IGNF','278','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','UTM32W84','WGS84 UTM NORD FUSEAU 32',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0232355',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM32W84_USAGE','projected_crs','IGNF','UTM32W84','IGNF','278','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','WGS84UTM1S','WGS84 UTM Sud Fuseau 1',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0301550',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM1S_USAGE','projected_crs','IGNF','WGS84UTM1S','IGNF','279','IGNF','8'); INSERT INTO "projected_crs" VALUES('IGNF','UTM01SW84','WGS84 UTM Sud Fuseau 1',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0301550',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM01SW84_USAGE','projected_crs','IGNF','UTM01SW84','IGNF','279','IGNF','8'); INSERT INTO "extent" VALUES('IGNF','280','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 39','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 39',-80,0,48,54,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84UTM39S','WGS84 UTM SUD FUSEAU 39',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0339578',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM39S_USAGE','projected_crs','IGNF','WGS84UTM39S','IGNF','280','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM39SW84','WGS84 UTM SUD FUSEAU 39',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0339578',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM39SW84_USAGE','projected_crs','IGNF','UTM39SW84','IGNF','280','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','281','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 42','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 42',-80,0,66,72,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84UTM42S','WGS84 UTM SUD FUSEAU 42',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0342579',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM42S_USAGE','projected_crs','IGNF','WGS84UTM42S','IGNF','281','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM42SW84','WGS84 UTM SUD FUSEAU 42',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0342579',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM42SW84_USAGE','projected_crs','IGNF','UTM42SW84','IGNF','281','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','282','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 43','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - UTM SUD FUSEAU 43',-80,0,72,78,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84UTM43S','WGS84 UTM SUD FUSEAU 43',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0343580',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM43S_USAGE','projected_crs','IGNF','WGS84UTM43S','IGNF','282','IGNF','3'); INSERT INTO "projected_crs" VALUES('IGNF','UTM43SW84','WGS84 UTM SUD FUSEAU 43',NULL,'EPSG','4499','IGNF','WGS84G','IGNF','PRC0343580',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'UTM43SW84_USAGE','projected_crs','IGNF','UTM43SW84','IGNF','282','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','283','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - PSEUDO MERCATOR (POPULAR VISUALISATION)','PLANETE TERRE ET SON ENVIRONNEMENT PROCHE - PSEUDO MERCATOR (POPULAR VISUALISATION)',-85,85,-180,180,0); INSERT INTO "projected_crs" VALUES('IGNF','WGS84WMSV','WGS84 WEB MERCATOR SPHERIQUE (VISUALISATION)',NULL,'EPSG','4400','IGNF','WGS84G','IGNF','PRC9601581',NULL,0); INSERT INTO "usage" VALUES('IGNF', 'WGS84WMSV_USAGE','projected_crs','IGNF','WGS84WMSV','IGNF','283','IGNF','8'); INSERT INTO "compound_crs" VALUES('IGNF','ATIGBONNE.BOURD','ATIG Bonne France Etat Major et NGF-BOURDALOUE',NULL,'IGNF','ATIGBONNE','IGNF','BOURD',0); INSERT INTO "usage" VALUES('IGNF', 'ATIGBONNE.BOURD_USAGE','compound_crs','IGNF','ATIGBONNE.BOURD','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ATIGBONNE.NGF84','ATIG Bonne France Etat Major et NGF-LALLEMAND',NULL,'IGNF','ATIGBONNE','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'ATIGBONNE.NGF84_USAGE','compound_crs','IGNF','ATIGBONNE.NGF84','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ATIGG.BOURD','ATIG geographiques grades Paris (gr) et NGF-BOURDALOUE',NULL,'IGNF','ATIGG','IGNF','BOURD',0); INSERT INTO "usage" VALUES('IGNF', 'ATIGG.BOURD_USAGE','compound_crs','IGNF','ATIGG.BOURD','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ATIGG.NGF84','ATIG geographiques grades Paris (gr) et NGF-LALLEMAND',NULL,'IGNF','ATIGG','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'ATIGG.NGF84_USAGE','compound_crs','IGNF','ATIGG.NGF84','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','CAD97G.MAYO53','Cadastre 1997 geographiques (dms) et SHOM 1953 (MAYOTTE)',NULL,'IGNF','CAD97G','IGNF','MAYO53',0); INSERT INTO "usage" VALUES('IGNF', 'CAD97G.MAYO53_USAGE','compound_crs','IGNF','CAD97G.MAYO53','IGNF','5','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','CAD97UTM38S.MAYO53','Cadastre 1997 UTM Sud fuseau 38 et SHOM 1953 (MAYOTTE)',NULL,'IGNF','CAD97UTM38S','IGNF','MAYO53',0); INSERT INTO "usage" VALUES('IGNF', 'CAD97UTM38S.MAYO53_USAGE','compound_crs','IGNF','CAD97UTM38S.MAYO53','IGNF','5','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MAYO50G.MAYO53','Combani triangulation IGN 1950 geographiques (dms) et SHOM 1953 (MAYOTTE)',NULL,'IGNF','MAYO50G','IGNF','MAYO53',0); INSERT INTO "usage" VALUES('IGNF', 'MAYO50G.MAYO53_USAGE','compound_crs','IGNF','MAYO50G.MAYO53','IGNF','5','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MAYO50UTM38S.MAYO53','Combani UTM Sud fuseau 38 et SHOM 1953 (MAYOTTE)',NULL,'IGNF','MAYO50UTM38S','IGNF','MAYO53',0); INSERT INTO "usage" VALUES('IGNF', 'MAYO50UTM38S.MAYO53_USAGE','compound_crs','IGNF','MAYO50UTM38S.MAYO53','IGNF','5','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','CSG67G.GUYA77','CSG67 geographiques (dms) et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','CSG67G','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'CSG67G.GUYA77_USAGE','compound_crs','IGNF','CSG67G.GUYA77','IGNF','10','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','C67IG95G.GUYA77','CSG67 (IGN 1995) geographiques (dms) et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','C67IG95G','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'C67IG95G.GUYA77_USAGE','compound_crs','IGNF','C67IG95G.GUYA77','IGNF','10','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','C67IG95UTM21.GUYA77','CSG67(IGN 1995) UTM Nord fuseau 21 et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','C67IG95UTM21','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'C67IG95UTM21.GUYA77_USAGE','compound_crs','IGNF','C67IG95UTM21.GUYA77','IGNF','170','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','C67IG95UTM22.GUYA77','CSG67 (IGN 1995) UTM Nord fuseau 22 et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','C67IG95UTM22','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'C67IG95UTM22.GUYA77_USAGE','compound_crs','IGNF','C67IG95UTM22.GUYA77','IGNF','171','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','CSG67UTM21.GUYA77','CSG67 UTM Nord fuseau 21 et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','CSG67UTM21','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'CSG67UTM21.GUYA77_USAGE','compound_crs','IGNF','CSG67UTM21.GUYA77','IGNF','170','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','CSG67UTM22.GUYA77','CSG67 UTM Nord fuseau 22 et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','CSG67UTM22','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'CSG67UTM22.GUYA77_USAGE','compound_crs','IGNF','CSG67UTM22.GUYA77','IGNF','171','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','ED50G.IGN69','ED50 geographiques (dms) et NGF-IGN 1969',NULL,'IGNF','ED50G','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'ED50G.IGN69_USAGE','compound_crs','IGNF','ED50G.IGN69','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ED50G.IGN78C','ED50 geographiques (dms) et NGF-IGN 1978',NULL,'IGNF','ED50G','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'ED50G.IGN78C_USAGE','compound_crs','IGNF','ED50G.IGN78C','IGNF','86','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','ED50G.NGF84','ED50 geographiques (dms) et NGF-LALLEMAND',NULL,'IGNF','ED50G','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'ED50G.NGF84_USAGE','compound_crs','IGNF','ED50G.NGF84','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ED50G.NGC48','ED50 geographiques (dms) et NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'IGNF','ED50G','IGNF','NGC48',0); INSERT INTO "usage" VALUES('IGNF', 'ED50G.NGC48_USAGE','compound_crs','IGNF','ED50G.NGC48','IGNF','86','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','284','FRANCE CONTINENTALE (CORSE EXCLUE) - UTM NORD FUSEAU 30','FRANCE CONTINENTALE (CORSE EXCLUE) - UTM NORD FUSEAU 30',42,51.5,-5.5,0,0); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM30.IGN69','ED50 UTM fuseau 30 et NGF-IGN 1969',NULL,'IGNF','ED50UTM30','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM30.IGN69_USAGE','compound_crs','IGNF','ED50UTM30.IGN69','IGNF','284','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM30.NGF84','ED50 UTM fuseau 30 et NGF-LALLEMAND',NULL,'IGNF','ED50UTM30','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM30.NGF84_USAGE','compound_crs','IGNF','ED50UTM30.NGF84','IGNF','284','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','285','FRANCE CONTINENTALE (CORSE EXCLUE) - UTM NORD FUSEAU 32','FRANCE CONTINENTALE (CORSE EXCLUE) - UTM NORD FUSEAU 32',42,51.5,6,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM32.IGN69','ED50 UTM fuseau 32 et NGF-IGN 1969',NULL,'IGNF','ED50UTM32','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM32.IGN69_USAGE','compound_crs','IGNF','ED50UTM32.IGN69','IGNF','285','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM32.IGN78C','ED50 UTM fuseau 32 et NGF-IGN 1978',NULL,'IGNF','ED50UTM32','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM32.IGN78C_USAGE','compound_crs','IGNF','ED50UTM32.IGN78C','IGNF','86','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM32.NGF84','ED50 UTM fuseau 32 et NGF-LALLEMAND',NULL,'IGNF','ED50UTM32','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM32.NGF84_USAGE','compound_crs','IGNF','ED50UTM32.NGF84','IGNF','285','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM32.NGC48','ED50 UTM fuseau 32 et NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'IGNF','ED50UTM32','IGNF','NGC48',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM32.NGC48_USAGE','compound_crs','IGNF','ED50UTM32.NGC48','IGNF','86','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','286','FRANCE CONTINENTALE (CORSE EXCLUE) - UTM NORD FUSEAU 31','FRANCE CONTINENTALE (CORSE EXCLUE) - UTM NORD FUSEAU 31',42,51.5,0,6,0); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM31.IGN69','ED50 UTM NORD FUSEAU 31 et NGF-IGN 1969',NULL,'IGNF','ED50UTM31','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM31.IGN69_USAGE','compound_crs','IGNF','ED50UTM31.IGN69','IGNF','286','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ED50UTM31.NGF84','ED50 UTM NORD FUSEAU 31 et NGF-LALLEMAND',NULL,'IGNF','ED50UTM31','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'ED50UTM31.NGF84_USAGE','compound_crs','IGNF','ED50UTM31.NGF84','IGNF','286','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89G.EVRF2000','ETRS89 geographiques (dms) et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89G','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89G.EVRF2000_USAGE','compound_crs','IGNF','ETRS89G.EVRF2000','IGNF','77','IGNF','3'); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89LAEA.EVRF2000','ETRS89 Lambert Azimutal Equal Area et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89LAEA','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89LAEA.EVRF2000_USAGE','compound_crs','IGNF','ETRS89LAEA.EVRF2000','IGNF','77','IGNF','3'); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89LCC.EVRF2000','ETRS89 Lambert Conformal Conic et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89LCC','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89LCC.EVRF2000_USAGE','compound_crs','IGNF','ETRS89LCC.EVRF2000','IGNF','77','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','287','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 29','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 29',36,71.2,-10,-6,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM29.EVRF2000','ETRS89 UTM Nord fuseau 29 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM29','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM29.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM29.EVRF2000','IGNF','287','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','288','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 30','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 30',36,71.2,-6,0,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM30.EVRF2000','ETRS89 UTM Nord fuseau 30 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM30','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM30.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM30.EVRF2000','IGNF','288','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','289','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 31','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 31',36,71.2,0,6,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM31.EVRF2000','ETRS89 UTM Nord fuseau 31 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM31','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM31.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM31.EVRF2000','IGNF','289','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','290','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 32','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 32',36,71.2,6,12,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM32.EVRF2000','ETRS89 UTM Nord fuseau 32 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM32','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM32.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM32.EVRF2000','IGNF','290','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','291','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 33','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 33',36,71.2,12,18,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM33.EVRF2000','ETRS89 UTM Nord fuseau 33 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM33','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM33.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM33.EVRF2000','IGNF','291','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','292','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 34','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 34',36,71.2,18,24,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM34.EVRF2000','ETRS89 UTM Nord fuseau 34 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM34','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM34.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM34.EVRF2000','IGNF','292','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','293','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 35','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 35',36,71.2,24,30,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM35.EVRF2000','ETRS89 UTM Nord fuseau 35 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM35','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM35.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM35.EVRF2000','IGNF','293','IGNF','3'); INSERT INTO "extent" VALUES('IGNF','294','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 36','EUROPE (RESEAU VERTICAL UNIFIE) - UTM NORD FUSEAU 36',36,71.2,30,32,0); INSERT INTO "compound_crs" VALUES('IGNF','ETRS89UTM36.EVRF2000','ETRS89 UTM Nord fuseau 36 et EVRF2000 (UELN-95/98)(EUROPEAN VERTICAL REFERENCE FRAME)',NULL,'IGNF','ETRS89UTM36','IGNF','EVRF2000',0); INSERT INTO "usage" VALUES('IGNF', 'ETRS89UTM36.EVRF2000_USAGE','compound_crs','IGNF','ETRS89UTM36.EVRF2000','IGNF','294','IGNF','3'); INSERT INTO "compound_crs" VALUES('IGNF','GLOR77G.GLOR77','Glorieuses geographiques (dms) et SHOM 1977 (ILES GLORIEUSES - CANAL DE MOZAMBIQUE)',NULL,'IGNF','GLOR77G','IGNF','GLOR77',0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77G.GLOR77_USAGE','compound_crs','IGNF','GLOR77G.GLOR77','IGNF','20','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GLOR77MD.GLOR77','Glorieuses Mercator directe et SHOM 1977 (ILES GLORIEUSES - CANAL DE MOZAMBIQUE)',NULL,'IGNF','GLOR77MD','IGNF','GLOR77',0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77MD.GLOR77_USAGE','compound_crs','IGNF','GLOR77MD.GLOR77','IGNF','20','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GLOR77UTM38S.GLOR77','GLORIEUSES MHG 1977 UTM SUD FUSEAU 38 et SHOM 1977 (ILES GLORIEUSES - CANAL DE MOZAMBIQUE)',NULL,'IGNF','GLOR77UTM38S','IGNF','GLOR77',0); INSERT INTO "usage" VALUES('IGNF', 'GLOR77UTM38S.GLOR77_USAGE','compound_crs','IGNF','GLOR77UTM38S.GLOR77','IGNF','20','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADFMG.GUAD88SB','Guadeloupe Fort-Marigot geographiques (dms) et IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'IGNF','GUADFMG','IGNF','GUAD88SB',0); INSERT INTO "usage" VALUES('IGNF', 'GUADFMG.GUAD88SB_USAGE','compound_crs','IGNF','GUADFMG.GUAD88SB','IGNF','82','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADFMG.GUAD88SM','Guadeloupe Fort-Marigot geographiques (dms) et IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'IGNF','GUADFMG','IGNF','GUAD88SM',0); INSERT INTO "usage" VALUES('IGNF', 'GUADFMG.GUAD88SM_USAGE','compound_crs','IGNF','GUADFMG.GUAD88SM','IGNF','83','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADFMUTM20.GUAD88SB','Guadeloupe Fort-Marigot UTM Nord fuseau 20 et IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'IGNF','GUADFMUTM20','IGNF','GUAD88SB',0); INSERT INTO "usage" VALUES('IGNF', 'GUADFMUTM20.GUAD88SB_USAGE','compound_crs','IGNF','GUADFMUTM20.GUAD88SB','IGNF','82','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADFMUTM20.GUAD88SM','Guadeloupe Fort-Marigot UTM Nord fuseau 20 et IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'IGNF','GUADFMUTM20','IGNF','GUAD88SM',0); INSERT INTO "usage" VALUES('IGNF', 'GUADFMUTM20.GUAD88SM_USAGE','compound_crs','IGNF','GUADFMUTM20.GUAD88SM','IGNF','83','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNG.GUAD88','Guadeloupe Sainte-Anne geographiques (dms) et IGN 1988 (GUADELOUPE)',NULL,'IGNF','GUADANNG','IGNF','GUAD88',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNG.GUAD88_USAGE','compound_crs','IGNF','GUADANNG.GUAD88','IGNF','79','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNG.GUAD88LS','Guadeloupe Sainte-Anne geographiques (dms) et IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'IGNF','GUADANNG','IGNF','GUAD88LS',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNG.GUAD88LS_USAGE','compound_crs','IGNF','GUADANNG.GUAD88LS','IGNF','80','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNG.GUAD88MG','Guadeloupe Sainte-Anne geographiques (dms) et IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'IGNF','GUADANNG','IGNF','GUAD88MG',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNG.GUAD88MG_USAGE','compound_crs','IGNF','GUADANNG.GUAD88MG','IGNF','81','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNG.GUAD92LD','Guadeloupe Sainte-Anne geographiques (dms) et IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','GUADANNG','IGNF','GUAD92LD',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNG.GUAD92LD_USAGE','compound_crs','IGNF','GUADANNG.GUAD92LD','IGNF','84','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNUTM20.GUAD88','Guadeloupe Ste Anne UTM Nord fuseau 20 et IGN 1988 (GUADELOUPE)',NULL,'IGNF','GUADANNUTM20','IGNF','GUAD88',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNUTM20.GUAD88_USAGE','compound_crs','IGNF','GUADANNUTM20.GUAD88','IGNF','79','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNUTM20.GUAD88LS','Guadeloupe Ste Anne UTM Nord fuseau 20 et IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'IGNF','GUADANNUTM20','IGNF','GUAD88LS',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNUTM20.GUAD88LS_USAGE','compound_crs','IGNF','GUADANNUTM20.GUAD88LS','IGNF','80','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNUTM20.GUAD88MG','Guadeloupe Ste Anne UTM Nord fuseau 20 et IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'IGNF','GUADANNUTM20','IGNF','GUAD88MG',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNUTM20.GUAD88MG_USAGE','compound_crs','IGNF','GUADANNUTM20.GUAD88MG','IGNF','81','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','GUADANNUTM20.GUAD92LD','Guadeloupe Ste Anne UTM Nord fuseau 20 et IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','GUADANNUTM20','IGNF','GUAD92LD',0); INSERT INTO "usage" VALUES('IGNF', 'GUADANNUTM20.GUAD92LD_USAGE','compound_crs','IGNF','GUADANNUTM20.GUAD92LD','IGNF','84','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAA53G.BORA01','IGN53 Societe geographiques (dms) et BORA_SAU 2001',NULL,'IGNF','TAHAA53G','IGNF','BORA01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53G.BORA01_USAGE','compound_crs','IGNF','TAHAA53G.BORA01','IGNF','76','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAA53G.HUAH01','IGN53 Societe geographiques (dms) et HUAHINE_SAU 2001',NULL,'IGNF','TAHAA53G','IGNF','HUAH01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53G.HUAH01_USAGE','compound_crs','IGNF','TAHAA53G.HUAH01','IGNF','51','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAA53G.RAIA01','IGN53 Societe geographiques (dms) et RAIATEA_SAU 2001',NULL,'IGNF','TAHAA53G','IGNF','RAIA01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53G.RAIA01_USAGE','compound_crs','IGNF','TAHAA53G.RAIA01','IGNF','51','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAA53UTM5S.BORA01','IGN53 Societe UTM Sud fuseau 5 et BORA_SAU 2001',NULL,'IGNF','TAHAA53UTM5S','IGNF','BORA01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53UTM5S.BORA01_USAGE','compound_crs','IGNF','TAHAA53UTM5S.BORA01','IGNF','76','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAA53UTM5S.HUAH01','IGN53 Societe UTM Sud fuseau 5 et HUAHINE_SAU 2001',NULL,'IGNF','TAHAA53UTM5S','IGNF','HUAH01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53UTM5S.HUAH01_USAGE','compound_crs','IGNF','TAHAA53UTM5S.HUAH01','IGNF','51','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAA53UTM5S.RAIA01','IGN53 Societe UTM Sud fuseau 5 et RAIATEA_SAU 2001',NULL,'IGNF','TAHAA53UTM5S','IGNF','RAIA01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAA53UTM5S.RAIA01_USAGE','compound_crs','IGNF','TAHAA53UTM5S.RAIA01','IGNF','51','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','IGN72G.NCAL69','IGN72 geographiques (dms) et NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,'IGNF','IGN72G','IGNF','NCAL69',0); INSERT INTO "usage" VALUES('IGNF', 'IGN72G.NCAL69_USAGE','compound_crs','IGNF','IGN72G.NCAL69','IGNF','21','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','IGN72UTM58S.NCAL69','IGN72 UTM Sud fuseau 58 et NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,'IGNF','IGN72UTM58S','IGNF','NCAL69',0); INSERT INTO "usage" VALUES('IGNF', 'IGN72UTM58S.NCAL69_USAGE','compound_crs','IGNF','IGN72UTM58S.NCAL69','IGNF','21','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','KERG62G.KERG62','Kerguelen geographiques (dms) et IGN 1962 (KERGUELEN)',NULL,'IGNF','KERG62G','IGNF','KERG62',0); INSERT INTO "usage" VALUES('IGNF', 'KERG62G.KERG62_USAGE','compound_crs','IGNF','KERG62G.KERG62','IGNF','34','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','KERG62UTM42S.KERG62','KERGUELEN K0 IGN 1962 UTM SUD FUSEAU 42 et IGN 1962 (KERGUELEN)',NULL,'IGNF','KERG62UTM42S','IGNF','KERG62',0); INSERT INTO "usage" VALUES('IGNF', 'KERG62UTM42S.KERG62_USAGE','compound_crs','IGNF','KERG62UTM42S.KERG62','IGNF','34','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','LIFOU56G.LIFOU91','Lifou IGN 56 geographiques (dms) et NIVELLEMENT GENERAL DE LIFOU (IGN 1991 LF)',NULL,'IGNF','LIFOU56G','IGNF','LIFOU91',0); INSERT INTO "usage" VALUES('IGNF', 'LIFOU56G.LIFOU91_USAGE','compound_crs','IGNF','LIFOU56G.LIFOU91','IGNF','35','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','LIFOU56UT58S.LIFOU91','Lifou IGN 56 UTM Sud fuseau 58 et NIVELLEMENT GENERAL DE LIFOU (IGN 1991 LF)',NULL,'IGNF','LIFOU56UT58S','IGNF','LIFOU91',0); INSERT INTO "usage" VALUES('IGNF', 'LIFOU56UT58S.LIFOU91_USAGE','compound_crs','IGNF','LIFOU56UT58S.LIFOU91','IGNF','35','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MARE53G.MARE91','Mare IGN53 geographiques (dms) et NIVELLEMENT GENERAL DE MARE (IGN 1991 MR)',NULL,'IGNF','MARE53G','IGNF','MARE91',0); INSERT INTO "usage" VALUES('IGNF', 'MARE53G.MARE91_USAGE','compound_crs','IGNF','MARE53G.MARE91','IGNF','38','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MARE53UTM58S.MARE91','Mare IGN53 UTM Sud fuseau 58 et NIVELLEMENT GENERAL DE MARE (IGN 1991 MR)',NULL,'IGNF','MARE53UTM58S','IGNF','MARE91',0); INSERT INTO "usage" VALUES('IGNF', 'MARE53UTM58S.MARE91_USAGE','compound_crs','IGNF','MARE53UTM58S.MARE91','IGNF','212','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MARTFDG.MART87','Martinique Fort-Desaix geographiques (dms) et IGN 1987 (MARTINIQUE)',NULL,'IGNF','MARTFDG','IGNF','MART87',0); INSERT INTO "usage" VALUES('IGNF', 'MARTFDG.MART87_USAGE','compound_crs','IGNF','MARTFDG.MART87','IGNF','39','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','MARTFDUTM20.MART87','Martinique Fort-Desaix UTM Nord fuseau 20 et IGN 1987 (MARTINIQUE)',NULL,'IGNF','MARTFDUTM20','IGNF','MART87',0); INSERT INTO "usage" VALUES('IGNF', 'MARTFDUTM20.MART87_USAGE','compound_crs','IGNF','MARTFDUTM20.MART87','IGNF','39','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','MAUPITIG.MAUPITI01','Maupiti (MOP 1983) geographiques (dms) et MAUPITI_SAU 2001',NULL,'IGNF','MAUPITIG','IGNF','MAUPITI01',0); INSERT INTO "usage" VALUES('IGNF', 'MAUPITIG.MAUPITI01_USAGE','compound_crs','IGNF','MAUPITIG.MAUPITI01','IGNF','40','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MAUPITIUTM5S.MAUPITI01','Maupiti (MOP 1983) UTM Sud fuseau 5 et MAUPITI_SAU 2001',NULL,'IGNF','MAUPITIUTM5S','IGNF','MAUPITI01',0); INSERT INTO "usage" VALUES('IGNF', 'MAUPITIUTM5S.MAUPITI01_USAGE','compound_crs','IGNF','MAUPITIUTM5S.MAUPITI01','IGNF','40','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MOOREA87G.MOOREA81','Moorea 1987 geographiques (dms) et MOOREA 1981 (MOOREA_SAU 2001)',NULL,'IGNF','MOOREA87G','IGNF','MOOREA81',0); INSERT INTO "usage" VALUES('IGNF', 'MOOREA87G.MOOREA81_USAGE','compound_crs','IGNF','MOOREA87G.MOOREA81','IGNF','42','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','MOORE87UTM6S.MOOREA81','Moorea 1987 UTM Sud fuseau 6 et MOOREA 1981 (MOOREA_SAU 2001)',NULL,'IGNF','MOORE87UTM6S','IGNF','MOOREA81',0); INSERT INTO "usage" VALUES('IGNF', 'MOORE87UTM6S.MOOREA81_USAGE','compound_crs','IGNF','MOORE87UTM6S.MOOREA81','IGNF','42','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','NEA74G.NCAL69','NEA74 NOUMEA geographiques (dms) et NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,'IGNF','NEA74G','IGNF','NCAL69',0); INSERT INTO "usage" VALUES('IGNF', 'NEA74G.NCAL69_USAGE','compound_crs','IGNF','NEA74G.NCAL69','IGNF','44','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','NEA74LBTNM2.NCAL69','NEA74 NOUMEA Lambert Noumea 2 et NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,'IGNF','NEA74LBTNM2','IGNF','NCAL69',0); INSERT INTO "usage" VALUES('IGNF', 'NEA74LBTNM2.NCAL69_USAGE','compound_crs','IGNF','NEA74LBTNM2.NCAL69','IGNF','44','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','LURESGKL.NNLUX','NOUVELLE TRIANGULATION DU DUCHE DU LUXEMBOURG GAUSS KRUGER LUXEMBOURG et NIVELLEMENT GENERAL DU LUXEMBOURG',NULL,'IGNF','LURESGKL','IGNF','NNLUX',0); INSERT INTO "usage" VALUES('IGNF', 'LURESGKL.NNLUX_USAGE','compound_crs','IGNF','LURESGKL.NNLUX','IGNF','45','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','NTFPGRAD.BOURD','NTF geographiques Paris (gr) et NGF-BOURDALOUE',NULL,'IGNF','NTFPGRAD','IGNF','BOURD',0); INSERT INTO "usage" VALUES('IGNF', 'NTFPGRAD.BOURD_USAGE','compound_crs','IGNF','NTFPGRAD.BOURD','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFPGRAD.IGN69','NTF geographiques Paris (gr) et NGF-IGN 1969',NULL,'IGNF','NTFPGRAD','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFPGRAD.IGN69_USAGE','compound_crs','IGNF','NTFPGRAD.IGN69','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFPGRAD.IGN78C','NTF geographiques Paris (gr) et NGF-IGN 1978',NULL,'IGNF','NTFPGRAD','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'NTFPGRAD.IGN78C_USAGE','compound_crs','IGNF','NTFPGRAD.IGN78C','IGNF','86','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','NTFPGRAD.NGF84','NTF geographiques Paris (gr) et NGF-LALLEMAND',NULL,'IGNF','NTFPGRAD','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'NTFPGRAD.NGF84_USAGE','compound_crs','IGNF','NTFPGRAD.NGF84','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFPGRAD.NGC48','NTF geographiques Paris (gr) et NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'IGNF','NTFPGRAD','IGNF','NGC48',0); INSERT INTO "usage" VALUES('IGNF', 'NTFPGRAD.NGC48_USAGE','compound_crs','IGNF','NTFPGRAD.NGC48','IGNF','86','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','295','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT I CARTO','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT I CARTO',48.1498888194584,51.2999493112821,-4.05379920354209,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB1C.IGN69','NTF Lambert I carto et NGF-IGN 1969',NULL,'IGNF','NTFLAMB1C','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB1C.IGN69_USAGE','compound_crs','IGNF','NTFLAMB1C.IGN69','IGNF','295','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','296','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT I NORD','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT I NORD',48.1498888194584,51.2999493112821,-4.05379920354209,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB1.BOURD','NTF Lambert I et NGF-BOURDALOUE',NULL,'IGNF','NTFLAMB1','IGNF','BOURD',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB1.BOURD_USAGE','compound_crs','IGNF','NTFLAMB1.BOURD','IGNF','296','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB1.IGN69','NTF Lambert I et NGF-IGN 1969',NULL,'IGNF','NTFLAMB1','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB1.IGN69_USAGE','compound_crs','IGNF','NTFLAMB1.IGN69','IGNF','296','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB1.NGF84','NTF Lambert I et NGF-LALLEMAND',NULL,'IGNF','NTFLAMB1','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB1.NGF84_USAGE','compound_crs','IGNF','NTFLAMB1.NGF84','IGNF','296','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','297','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT II CARTO','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT II CARTO',45.4499226513968,48.1499588287054,-4.05373473460064,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2C.IGN69','NTF Lambert II carto et NGF-IGN 1969',NULL,'IGNF','NTFLAMB2C','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2C.IGN69_USAGE','compound_crs','IGNF','NTFLAMB2C.IGN69','IGNF','297','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','298','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT II ETENDU','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT II ETENDU',42,50.8499489398734,-4.05378927743516,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2E.BOURD','NTF Lambert II etendu et NGF-BOURDALOUE',NULL,'IGNF','NTFLAMB2E','IGNF','BOURD',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2E.BOURD_USAGE','compound_crs','IGNF','NTFLAMB2E.BOURD','IGNF','298','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2E.IGN69','NTF Lambert II etendu et NGF-IGN 1969',NULL,'IGNF','NTFLAMB2E','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2E.IGN69_USAGE','compound_crs','IGNF','NTFLAMB2E.IGN69','IGNF','298','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','299','CORSE - LAMBERT II ETENDU','CORSE - LAMBERT II ETENDU',41.3100751867312,43.5,8,10,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2E.IGN78C','NTF Lambert II etendu et NGF-IGN 1978',NULL,'IGNF','NTFLAMB2E','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2E.IGN78C_USAGE','compound_crs','IGNF','NTFLAMB2E.IGN78C','IGNF','299','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2E.NGF84','NTF Lambert II etendu et NGF-LALLEMAND',NULL,'IGNF','NTFLAMB2E','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2E.NGF84_USAGE','compound_crs','IGNF','NTFLAMB2E.NGF84','IGNF','298','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2E.NGC48','NTF Lambert II etendu et NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'IGNF','NTFLAMB2E','IGNF','NGC48',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2E.NGC48_USAGE','compound_crs','IGNF','NTFLAMB2E.NGC48','IGNF','299','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','300','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT II CENTRE','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT II CENTRE',45.4499226513968,48.1499588287054,-4.05373473460064,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2.BOURD','NTF Lambert II et NGF-BOURDALOUE',NULL,'IGNF','NTFLAMB2','IGNF','BOURD',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2.BOURD_USAGE','compound_crs','IGNF','NTFLAMB2.BOURD','IGNF','300','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2.IGN69','NTF Lambert II et NGF-IGN 1969',NULL,'IGNF','NTFLAMB2','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2.IGN69_USAGE','compound_crs','IGNF','NTFLAMB2.IGN69','IGNF','300','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB2.NGF84','NTF Lambert II et NGF-LALLEMAND',NULL,'IGNF','NTFLAMB2','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB2.NGF84_USAGE','compound_crs','IGNF','NTFLAMB2.NGF84','IGNF','300','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','301','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT III CARTO','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT III CARTO',42.2999888396489,45.4499896606067,-4.05368768512203,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB3C.IGN69','NTF Lambert III carto et NGF-IGN 1969',NULL,'IGNF','NTFLAMB3C','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB3C.IGN69_USAGE','compound_crs','IGNF','NTFLAMB3C.IGN69','IGNF','301','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','302','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT III SUD','FRANCE CONTINENTALE (CORSE EXCLUE) - LAMBERT III SUD',42.2999888396489,45.4499896606067,-4.05368768512203,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB3.BOURD','NTF Lambert III et NGF-BOURDALOUE',NULL,'IGNF','NTFLAMB3','IGNF','BOURD',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB3.BOURD_USAGE','compound_crs','IGNF','NTFLAMB3.BOURD','IGNF','302','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB3.IGN69','NTF Lambert III et NGF-IGN 1969',NULL,'IGNF','NTFLAMB3','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB3.IGN69_USAGE','compound_crs','IGNF','NTFLAMB3.IGN69','IGNF','302','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB3.NGF84','NTF Lambert III et NGF-LALLEMAND',NULL,'IGNF','NTFLAMB3','IGNF','NGF84',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB3.NGF84_USAGE','compound_crs','IGNF','NTFLAMB3.NGF84','IGNF','302','IGNF','9'); INSERT INTO "extent" VALUES('IGNF','303','CORSE - LAMBERT IV CARTO','CORSE - LAMBERT IV CARTO',41.3100829886572,43.0200472881681,8,10,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB4C.IGN78C','NTF Lambert IV carto et NGF-IGN 1978',NULL,'IGNF','NTFLAMB4C','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB4C.IGN78C_USAGE','compound_crs','IGNF','NTFLAMB4C.IGN78C','IGNF','303','IGNF','2'); INSERT INTO "extent" VALUES('IGNF','304','CORSE - LAMBERT IV CORSE','CORSE - LAMBERT IV CORSE',41.3100829886572,43.0200472881681,8,10,0); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB4.IGN78C','NTF Lambert IV et NGF-IGN 1978',NULL,'IGNF','NTFLAMB4','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB4.IGN78C_USAGE','compound_crs','IGNF','NTFLAMB4.IGN78C','IGNF','304','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','NTFLAMB4.NGC48','NTF Lambert IV et NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'IGNF','NTFLAMB4','IGNF','NGC48',0); INSERT INTO "usage" VALUES('IGNF', 'NTFLAMB4.NGC48_USAGE','compound_crs','IGNF','NTFLAMB4.NGC48','IGNF','304','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','PDN92GAUSSL.REUN89','Piton des Neiges (1992) Gauss Laborde Reunion et IGN 1989 (REUNION)',NULL,'IGNF','PDN92GAUSSL','IGNF','REUN89',0); INSERT INTO "usage" VALUES('IGNF', 'PDN92GAUSSL.REUN89_USAGE','compound_crs','IGNF','PDN92GAUSSL.REUN89','IGNF','230','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','PDN08GAUSSL.REUN89','Piton des Neiges (2008) Gauss Laborde Reunion et IGN 1989 (REUNION)',NULL,'IGNF','PDN08GAUSSL','IGNF','REUN89',0); INSERT INTO "usage" VALUES('IGNF', 'PDN08GAUSSL.REUN89_USAGE','compound_crs','IGNF','PDN08GAUSSL.REUN89','IGNF','230','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','RGWF96GEO.FUTUNA1997','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 GEOGRAPHIQUES (DMS) et NGWF ILES HORN (FUTUNA ET ALOFI)',NULL,'IGNF','RGWF96G','IGNF','FUTUNA1997',0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96GEO.FUTUNA1997_USAGE','compound_crs','IGNF','RGWF96GEO.FUTUNA1997','IGNF','87','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGWF96GEO.WALLIS96','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 GEOGRAPHIQUES (DMS) et NGWF WALLIS (MOP 1996)',NULL,'IGNF','RGWF96G','IGNF','WALLIS96',0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96GEO.WALLIS96_USAGE','compound_crs','IGNF','RGWF96GEO.WALLIS96','IGNF','74','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGWF96UTM1S.FUTUNA1997','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 UTM SUD FUSEAU 1 et NGWF ILES HORN (FUTUNA ET ALOFI)',NULL,'IGNF','RGWF96UTM1S','IGNF','FUTUNA1997',0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96UTM1S.FUTUNA1997_USAGE','compound_crs','IGNF','RGWF96UTM1S.FUTUNA1997','IGNF','87','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGWF96UTM1S.WALLIS96','RESEAU GEODESIQUE DE WALLIS ET FUTUNA 1996 UTM SUD FUSEAU 1 et NGWF WALLIS (MOP 1996)',NULL,'IGNF','RGWF96UTM1S','IGNF','WALLIS96',0); INSERT INTO "usage" VALUES('IGNF', 'RGWF96UTM1S.WALLIS96_USAGE','compound_crs','IGNF','RGWF96UTM1S.WALLIS96','IGNF','74','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','REUN49GAUSSL.REUN89','Reunion Piton des Neiges Gauss Laborde et IGN 1989 (REUNION)',NULL,'IGNF','REUN49GAUSSL','IGNF','REUN89',0); INSERT INTO "usage" VALUES('IGNF', 'REUN49GAUSSL.REUN89_USAGE','compound_crs','IGNF','REUN49GAUSSL.REUN89','IGNF','230','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','REUN49G.REUN89','Reunion Piton des Neiges geographiques (dms) et IGN 1989 (REUNION)',NULL,'IGNF','REUN49G','IGNF','REUN89',0); INSERT INTO "usage" VALUES('IGNF', 'REUN49G.REUN89_USAGE','compound_crs','IGNF','REUN49G.REUN89','IGNF','56','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.MART87','RGAF09 geographiques (dd) et IGN 1987 (MARTINIQUE)',NULL,'IGNF','RGAF09GDD','IGNF','MART87',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.MART87_USAGE','compound_crs','IGNF','RGAF09GDD.MART87','IGNF','39','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.GUAD88','RGAF09 geographiques (dd) et IGN 1988 (GUADELOUPE)',NULL,'IGNF','RGAF09GDD','IGNF','GUAD88',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.GUAD88_USAGE','compound_crs','IGNF','RGAF09GDD.GUAD88','IGNF','79','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.GUAD88LS','RGAF09 geographiques (dd) et IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'IGNF','RGAF09GDD','IGNF','GUAD88LS',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.GUAD88LS_USAGE','compound_crs','IGNF','RGAF09GDD.GUAD88LS','IGNF','80','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.GUAD88MG','RGAF09 geographiques (dd) et IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'IGNF','RGAF09GDD','IGNF','GUAD88MG',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.GUAD88MG_USAGE','compound_crs','IGNF','RGAF09GDD.GUAD88MG','IGNF','81','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.GUAD88SB','RGAF09 geographiques (dd) et IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'IGNF','RGAF09GDD','IGNF','GUAD88SB',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.GUAD88SB_USAGE','compound_crs','IGNF','RGAF09GDD.GUAD88SB','IGNF','82','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.GUAD88SM','RGAF09 geographiques (dd) et IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'IGNF','RGAF09GDD','IGNF','GUAD88SM',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.GUAD88SM_USAGE','compound_crs','IGNF','RGAF09GDD.GUAD88SM','IGNF','83','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.GUAD92LD','RGAF09 geographiques (dd) et IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RGAF09GDD','IGNF','GUAD92LD',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.GUAD92LD_USAGE','compound_crs','IGNF','RGAF09GDD.GUAD92LD','IGNF','84','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09GDD.GUAD2008LD','RGAF09 geographiques (dd) et IGN 2008 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RGAF09GDD','IGNF','GUAD2008LD',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09GDD.GUAD2008LD_USAGE','compound_crs','IGNF','RGAF09GDD.GUAD2008LD','IGNF','84','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.MART87','RGAF09 geographiques (dms) et IGN 1987 (MARTINIQUE)',NULL,'IGNF','RGAF09G','IGNF','MART87',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.MART87_USAGE','compound_crs','IGNF','RGAF09G.MART87','IGNF','39','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.GUAD88','RGAF09 geographiques (dms) et IGN 1988 (GUADELOUPE)',NULL,'IGNF','RGAF09G','IGNF','GUAD88',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.GUAD88_USAGE','compound_crs','IGNF','RGAF09G.GUAD88','IGNF','79','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.GUAD88LS','RGAF09 geographiques (dms) et IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'IGNF','RGAF09G','IGNF','GUAD88LS',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.GUAD88LS_USAGE','compound_crs','IGNF','RGAF09G.GUAD88LS','IGNF','80','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.GUAD88MG','RGAF09 geographiques (dms) et IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'IGNF','RGAF09G','IGNF','GUAD88MG',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.GUAD88MG_USAGE','compound_crs','IGNF','RGAF09G.GUAD88MG','IGNF','81','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.GUAD88SB','RGAF09 geographiques (dms) et IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'IGNF','RGAF09G','IGNF','GUAD88SB',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.GUAD88SB_USAGE','compound_crs','IGNF','RGAF09G.GUAD88SB','IGNF','82','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.GUAD88SM','RGAF09 geographiques (dms) et IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'IGNF','RGAF09G','IGNF','GUAD88SM',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.GUAD88SM_USAGE','compound_crs','IGNF','RGAF09G.GUAD88SM','IGNF','83','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.GUAD92LD','RGAF09 geographiques (dms) et IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RGAF09G','IGNF','GUAD92LD',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.GUAD92LD_USAGE','compound_crs','IGNF','RGAF09G.GUAD92LD','IGNF','84','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09G.GUAD2008LD','RGAF09 geographiques (dms) et IGN 2008 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RGAF09G','IGNF','GUAD2008LD',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09G.GUAD2008LD_USAGE','compound_crs','IGNF','RGAF09G.GUAD2008LD','IGNF','84','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.MART87','RGAF09 UTM Nord Fuseau 20 et IGN 1987 (MARTINIQUE)',NULL,'IGNF','RGAF09UTM20','IGNF','MART87',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.MART87_USAGE','compound_crs','IGNF','RGAF09UTM20.MART87','IGNF','39','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.GUAD88','RGAF09 UTM Nord Fuseau 20 et IGN 1988 (GUADELOUPE)',NULL,'IGNF','RGAF09UTM20','IGNF','GUAD88',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.GUAD88_USAGE','compound_crs','IGNF','RGAF09UTM20.GUAD88','IGNF','79','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.GUAD88LS','RGAF09 UTM Nord Fuseau 20 et IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'IGNF','RGAF09UTM20','IGNF','GUAD88LS',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.GUAD88LS_USAGE','compound_crs','IGNF','RGAF09UTM20.GUAD88LS','IGNF','80','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.GUAD88MG','RGAF09 UTM Nord Fuseau 20 et IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'IGNF','RGAF09UTM20','IGNF','GUAD88MG',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.GUAD88MG_USAGE','compound_crs','IGNF','RGAF09UTM20.GUAD88MG','IGNF','81','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.GUAD88SB','RGAF09 UTM Nord Fuseau 20 et IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'IGNF','RGAF09UTM20','IGNF','GUAD88SB',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.GUAD88SB_USAGE','compound_crs','IGNF','RGAF09UTM20.GUAD88SB','IGNF','82','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.GUAD88SM','RGAF09 UTM Nord Fuseau 20 et IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'IGNF','RGAF09UTM20','IGNF','GUAD88SM',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.GUAD88SM_USAGE','compound_crs','IGNF','RGAF09UTM20.GUAD88SM','IGNF','83','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.GUAD92LD','RGAF09 UTM Nord Fuseau 20 et IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RGAF09UTM20','IGNF','GUAD92LD',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.GUAD92LD_USAGE','compound_crs','IGNF','RGAF09UTM20.GUAD92LD','IGNF','84','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','RGAF09UTM20.GUAD2008LD','RGAF09 UTM Nord Fuseau 20 et IGN 2008 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RGAF09UTM20','IGNF','GUAD2008LD',0); INSERT INTO "usage" VALUES('IGNF', 'RGAF09UTM20.GUAD2008LD_USAGE','compound_crs','IGNF','RGAF09UTM20.GUAD2008LD','IGNF','84','IGNF','5'); INSERT INTO "extent" VALUES('IGNF','305','FRANCE CONTINENTALE (CORSE EXCLUE) - CC42 (CONIQUE CONFORME ZONE 1)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC42 (CONIQUE CONFORME ZONE 1)',42,43,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC42.IGN69','RGF93 CC42 zone 1 et NGF-IGN 1969',NULL,'IGNF','RGF93CC42','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC42.IGN69_USAGE','compound_crs','IGNF','RGF93CC42.IGN69','IGNF','305','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','306','CORSE - CC42 (CONIQUE CONFORME ZONE 1)','CORSE - CC42 (CONIQUE CONFORME ZONE 1)',41.2,43,8,10,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC42.IGN78C','RGF93 CC42 zone 1 et NGF-IGN 1978',NULL,'IGNF','RGF93CC42','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC42.IGN78C_USAGE','compound_crs','IGNF','RGF93CC42.IGN78C','IGNF','306','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','307','FRANCE CONTINENTALE (CORSE EXCLUE) - CC43 (CONIQUE CONFORME ZONE 2)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC43 (CONIQUE CONFORME ZONE 2)',42,44,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC43.IGN69','RGF93 CC43 zone 2 et NGF-IGN 1969',NULL,'IGNF','RGF93CC43','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC43.IGN69_USAGE','compound_crs','IGNF','RGF93CC43.IGN69','IGNF','307','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','308','CORSE - CC43 (CONIQUE CONFORME ZONE 2)','CORSE - CC43 (CONIQUE CONFORME ZONE 2)',42,43.5,8,10,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC43.IGN78C','RGF93 CC43 zone 2 et NGF-IGN 1978',NULL,'IGNF','RGF93CC43','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC43.IGN78C_USAGE','compound_crs','IGNF','RGF93CC43.IGN78C','IGNF','308','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','309','FRANCE CONTINENTALE (CORSE EXCLUE) - CC44 (CONIQUE CONFORME ZONE 3)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC44 (CONIQUE CONFORME ZONE 3)',43,45,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC44.IGN69','RGF93 CC44 zone 3 et NGF-IGN 1969',NULL,'IGNF','RGF93CC44','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC44.IGN69_USAGE','compound_crs','IGNF','RGF93CC44.IGN69','IGNF','309','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','310','FRANCE CONTINENTALE (CORSE EXCLUE) - CC45 (CONIQUE CONFORME ZONE 4)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC45 (CONIQUE CONFORME ZONE 4)',44,46,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC45.IGN69','RGF93 CC45 zone 4 et NGF-IGN 1969',NULL,'IGNF','RGF93CC45','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC45.IGN69_USAGE','compound_crs','IGNF','RGF93CC45.IGN69','IGNF','310','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','311','FRANCE CONTINENTALE (CORSE EXCLUE) - CC46 (CONIQUE CONFORME ZONE 5)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC46 (CONIQUE CONFORME ZONE 5)',45,47,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC46.IGN69','RGF93 CC46 zone 5 et NGF-IGN 1969',NULL,'IGNF','RGF93CC46','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC46.IGN69_USAGE','compound_crs','IGNF','RGF93CC46.IGN69','IGNF','311','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','312','FRANCE CONTINENTALE (CORSE EXCLUE) - CC47 (CONIQUE CONFORME ZONE 6)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC47 (CONIQUE CONFORME ZONE 6)',46,48,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC47.IGN69','RGF93 CC47 zone 6 et NGF-IGN 1969',NULL,'IGNF','RGF93CC47','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC47.IGN69_USAGE','compound_crs','IGNF','RGF93CC47.IGN69','IGNF','312','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','313','FRANCE CONTINENTALE (CORSE EXCLUE) - CC48 (CONIQUE CONFORME ZONE 7)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC48 (CONIQUE CONFORME ZONE 7)',47,49,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC48.IGN69','RGF93 CC48 zone 7 et NGF-IGN 1969',NULL,'IGNF','RGF93CC48','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC48.IGN69_USAGE','compound_crs','IGNF','RGF93CC48.IGN69','IGNF','313','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','314','FRANCE CONTINENTALE (CORSE EXCLUE) - CC49 (CONIQUE CONFORME ZONE 8)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC49 (CONIQUE CONFORME ZONE 8)',48,50,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC49.IGN69','RGF93 CC49 zone 8 et NGF-IGN 1969',NULL,'IGNF','RGF93CC49','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC49.IGN69_USAGE','compound_crs','IGNF','RGF93CC49.IGN69','IGNF','314','IGNF','10'); INSERT INTO "extent" VALUES('IGNF','315','FRANCE CONTINENTALE (CORSE EXCLUE) - CC50 (CONIQUE CONFORME ZONE 9)','FRANCE CONTINENTALE (CORSE EXCLUE) - CC50 (CONIQUE CONFORME ZONE 9)',49,51,-5.5,8.5,0); INSERT INTO "compound_crs" VALUES('IGNF','RGF93CC50.IGN69','RGF93 CC50 zone 9 et NGF-IGN 1969',NULL,'IGNF','RGF93CC50','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93CC50.IGN69_USAGE','compound_crs','IGNF','RGF93CC50.IGN69','IGNF','315','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93G.IGN69','RGF93 geographiques (dms) et NGF-IGN 1969',NULL,'IGNF','RGF93G','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93G.IGN69_USAGE','compound_crs','IGNF','RGF93G.IGN69','IGNF','85','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93G.IGN78C','RGF93 geographiques (dms) et NGF-IGN 1978',NULL,'IGNF','RGF93G','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93G.IGN78C_USAGE','compound_crs','IGNF','RGF93G.IGN78C','IGNF','86','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93LAMB93.IGN69','RGF93 Lambert 93 et NGF-IGN 1969',NULL,'IGNF','RGF93LAMB93','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93LAMB93.IGN69_USAGE','compound_crs','IGNF','RGF93LAMB93.IGN69','IGNF','85','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93LAMB93.IGN78C','RGF93 Lambert 93 et NGF-IGN 1978',NULL,'IGNF','RGF93LAMB93','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93LAMB93.IGN78C_USAGE','compound_crs','IGNF','RGF93LAMB93.IGN78C','IGNF','86','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93UTM31.IGN69','RGF93 UTM fuseau 31 et NGF-IGN 1969',NULL,'IGNF','RGF93UTM31','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93UTM31.IGN69_USAGE','compound_crs','IGNF','RGF93UTM31.IGN69','IGNF','286','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93UTM32.IGN69','RGF93 UTM fuseau 32 et NGF-IGN 1969',NULL,'IGNF','RGF93UTM32','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93UTM32.IGN69_USAGE','compound_crs','IGNF','RGF93UTM32.IGN69','IGNF','285','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93UTM32.IGN78C','RGF93 UTM fuseau 32 et NGF-IGN 1978',NULL,'IGNF','RGF93UTM32','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93UTM32.IGN78C_USAGE','compound_crs','IGNF','RGF93UTM32.IGN78C','IGNF','86','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGF93UTM30.IGN69','RGF93 UTM NORD FUSEAU 30 et NGF-IGN 1969',NULL,'IGNF','RGF93UTM30','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'RGF93UTM30.IGN69_USAGE','compound_crs','IGNF','RGF93UTM30.IGN69','IGNF','284','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGFG95G.GUYA77','RGFG95 geographiques (dms) et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','RGFG95G','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95G.GUYA77_USAGE','compound_crs','IGNF','RGFG95G.GUYA77','IGNF','10','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGFG95UTM21.GUYA77','RGFG95 UTM Nord f.21 et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','RGFG95UTM21','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95UTM21.GUYA77_USAGE','compound_crs','IGNF','RGFG95UTM21.GUYA77','IGNF','170','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','RGFG95UTM22.GUYA77','RGFG95 UTM Nord f.22 et NIVELLEMENT GENERAL DE GUYANE (NGG) 1977',NULL,'IGNF','RGFG95UTM22','IGNF','GUYA77',0); INSERT INTO "usage" VALUES('IGNF', 'RGFG95UTM22.GUYA77_USAGE','compound_crs','IGNF','RGFG95UTM22.GUYA77','IGNF','171','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGM04GDD.MAYO53','RGM04 geographiques (dd) et SHOM 1953 (MAYOTTE)',NULL,'IGNF','RGM04GDD','IGNF','MAYO53',0); INSERT INTO "usage" VALUES('IGNF', 'RGM04GDD.MAYO53_USAGE','compound_crs','IGNF','RGM04GDD.MAYO53','IGNF','5','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGM04G.MAYO53','RGM04 geographiques (dms) et SHOM 1953 (MAYOTTE)',NULL,'IGNF','RGM04G','IGNF','MAYO53',0); INSERT INTO "usage" VALUES('IGNF', 'RGM04G.MAYO53_USAGE','compound_crs','IGNF','RGM04G.MAYO53','IGNF','5','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGM04UTM38S.MAYO53','RGM04 UTM Sud fuseau 38 et SHOM 1953 (MAYOTTE)',NULL,'IGNF','RGM04UTM38S','IGNF','MAYO53',0); INSERT INTO "usage" VALUES('IGNF', 'RGM04UTM38S.MAYO53_USAGE','compound_crs','IGNF','RGM04UTM38S.MAYO53','IGNF','5','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCG.LIFOU91','RGNC geographiques (dms) et NIVELLEMENT GENERAL DE LIFOU (IGN 1991 LF)',NULL,'IGNF','RGNCG','IGNF','LIFOU91',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCG.LIFOU91_USAGE','compound_crs','IGNF','RGNCG.LIFOU91','IGNF','35','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCG.MARE91','RGNC geographiques (dms) et NIVELLEMENT GENERAL DE MARE (IGN 1991 MR)',NULL,'IGNF','RGNCG','IGNF','MARE91',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCG.MARE91_USAGE','compound_crs','IGNF','RGNCG.MARE91','IGNF','38','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCG.NCAL69','RGNC geographiques (dms) et NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,'IGNF','RGNCG','IGNF','NCAL69',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCG.NCAL69_USAGE','compound_crs','IGNF','RGNCG.NCAL69','IGNF','21','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCG.PINS78','RGNC geographiques (dms) et SHOM 1978 (ILE DES PINS)',NULL,'IGNF','RGNCG','IGNF','PINS78',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCG.PINS78_USAGE','compound_crs','IGNF','RGNCG.PINS78','IGNF','31','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCLAMBNC.LIFOU91','RGNC Lambert Nouvelle-Caledonie et NIVELLEMENT GENERAL DE LIFOU (IGN 1991 LF)',NULL,'IGNF','RGNCLAMBNC','IGNF','LIFOU91',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCLAMBNC.LIFOU91_USAGE','compound_crs','IGNF','RGNCLAMBNC.LIFOU91','IGNF','35','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCLAMBNC.MARE91','RGNC Lambert Nouvelle-Caledonie et NIVELLEMENT GENERAL DE MARE (IGN 1991 MR)',NULL,'IGNF','RGNCLAMBNC','IGNF','MARE91',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCLAMBNC.MARE91_USAGE','compound_crs','IGNF','RGNCLAMBNC.MARE91','IGNF','38','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCLAMBNC.NCAL69','RGNC Lambert Nouvelle-Caledonie et NIVELLEMENT GENERAL DE NOUVELLE-CALEDONIE (NGNC)',NULL,'IGNF','RGNCLAMBNC','IGNF','NCAL69',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCLAMBNC.NCAL69_USAGE','compound_crs','IGNF','RGNCLAMBNC.NCAL69','IGNF','21','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGNCLAMBNC.PINS78','RGNC Lambert Nouvelle-Caledonie et SHOM 1978 (ILE DES PINS)',NULL,'IGNF','RGNCLAMBNC','IGNF','PINS78',0); INSERT INTO "usage" VALUES('IGNF', 'RGNCLAMBNC.PINS78_USAGE','compound_crs','IGNF','RGNCLAMBNC.PINS78','IGNF','31','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFG.BORA01','RGPF geographiques (dms) et BORA_SAU 2001',NULL,'IGNF','RGPFG','IGNF','BORA01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFG.BORA01_USAGE','compound_crs','IGNF','RGPFG.BORA01','IGNF','76','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFG.HUAH01','RGPF geographiques (dms) et HUAHINE_SAU 2001',NULL,'IGNF','RGPFG','IGNF','HUAH01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFG.HUAH01_USAGE','compound_crs','IGNF','RGPFG.HUAH01','IGNF','78','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFG.MAUPITI01','RGPF geographiques (dms) et MAUPITI_SAU 2001',NULL,'IGNF','RGPFG','IGNF','MAUPITI01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFG.MAUPITI01_USAGE','compound_crs','IGNF','RGPFG.MAUPITI01','IGNF','40','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFG.MOOREA81','RGPF geographiques (dms) et MOOREA 1981 (MOOREA_SAU 2001)',NULL,'IGNF','RGPFG','IGNF','MOOREA81',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFG.MOOREA81_USAGE','compound_crs','IGNF','RGPFG.MOOREA81','IGNF','42','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFG.RAIA01','RGPF geographiques (dms) et RAIATEA_SAU 2001',NULL,'IGNF','RGPFG','IGNF','RAIA01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFG.RAIA01_USAGE','compound_crs','IGNF','RGPFG.RAIA01','IGNF','51','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFG.TAHAA01','RGPF geographiques (dms) et TAHAA_SAU 2001',NULL,'IGNF','RGPFG','IGNF','TAHAA01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFG.TAHAA01_USAGE','compound_crs','IGNF','RGPFG.TAHAA01','IGNF','64','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFUTM5S.BORA01','RGPF UTM Sud fuseau 5 et BORA_SAU 2001',NULL,'IGNF','RGPFUTM5S','IGNF','BORA01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM5S.BORA01_USAGE','compound_crs','IGNF','RGPFUTM5S.BORA01','IGNF','76','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFUTM5S.HUAH01','RGPF UTM Sud fuseau 5 et HUAHINE_SAU 2001',NULL,'IGNF','RGPFUTM5S','IGNF','HUAH01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM5S.HUAH01_USAGE','compound_crs','IGNF','RGPFUTM5S.HUAH01','IGNF','78','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFUTM5S.MAUPITI01','RGPF UTM Sud fuseau 5 et MAUPITI_SAU 2001',NULL,'IGNF','RGPFUTM5S','IGNF','MAUPITI01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM5S.MAUPITI01_USAGE','compound_crs','IGNF','RGPFUTM5S.MAUPITI01','IGNF','40','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFUTM5S.RAIA01','RGPF UTM Sud fuseau 5 et RAIATEA_SAU 2001',NULL,'IGNF','RGPFUTM5S','IGNF','RAIA01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM5S.RAIA01_USAGE','compound_crs','IGNF','RGPFUTM5S.RAIA01','IGNF','51','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFUTM5S.TAHAA01','RGPF UTM Sud fuseau 5 et TAHAA_SAU 2001',NULL,'IGNF','RGPFUTM5S','IGNF','TAHAA01',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM5S.TAHAA01_USAGE','compound_crs','IGNF','RGPFUTM5S.TAHAA01','IGNF','64','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGPFUTM6S.MOOREA81','RGPF UTM Sud fuseau 6 et MOOREA 1981 (MOOREA_SAU 2001)',NULL,'IGNF','RGPFUTM6S','IGNF','MOOREA81',0); INSERT INTO "usage" VALUES('IGNF', 'RGPFUTM6S.MOOREA81_USAGE','compound_crs','IGNF','RGPFUTM6S.MOOREA81','IGNF','42','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RGR92G.REUN89','RGR92 geographiques (dms) et IGN 1989 (REUNION)',NULL,'IGNF','RGR92G','IGNF','REUN89',0); INSERT INTO "usage" VALUES('IGNF', 'RGR92G.REUN89_USAGE','compound_crs','IGNF','RGR92G.REUN89','IGNF','56','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGR92UTM40S.REUN89','RGR92 UTM 40 Sud et IGN 1989 (REUNION)',NULL,'IGNF','RGR92UTM40S','IGNF','REUN89',0); INSERT INTO "usage" VALUES('IGNF', 'RGR92UTM40S.REUN89_USAGE','compound_crs','IGNF','RGR92UTM40S.REUN89','IGNF','56','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGSPM06G.STPM50','RGSPM06 geographiques (dms) et DANGER 1950 (SAINT-PIERRE-ET-MIQUELON)',NULL,'IGNF','RGSPM06G','IGNF','STPM50_V',0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06G.STPM50_USAGE','compound_crs','IGNF','RGSPM06G.STPM50','IGNF','60','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGSPM06U21.STPM50','RGSPM06 UTM Nord fuseau 21 et DANGER 1950 (SAINT-PIERRE-ET-MIQUELON)',NULL,'IGNF','RGSPM06U21','IGNF','STPM50_V',0); INSERT INTO "usage" VALUES('IGNF', 'RGSPM06U21.STPM50_USAGE','compound_crs','IGNF','RGSPM06U21.STPM50','IGNF','60','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGTAAF07GDD.KERG62','RGTAAF07 geographiques (dd) et IGN 1962 (KERGUELEN)',NULL,'IGNF','RGTAAF07GDD','IGNF','KERG62',0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAF07GDD.KERG62_USAGE','compound_crs','IGNF','RGTAAF07GDD.KERG62','IGNF','34','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGTAAF07G.KERG62','RGTAAF07 geographiques (dms) et IGN 1962 (KERGUELEN)',NULL,'IGNF','RGTAAF07G','IGNF','KERG62',0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAF07G.KERG62_USAGE','compound_crs','IGNF','RGTAAF07G.KERG62','IGNF','34','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RGTAAFUTM42S.KERG62','RGTAAF07 UTM Sud fuseau 42 et IGN 1962 (KERGUELEN)',NULL,'IGNF','RGTAAFUTM42S','IGNF','KERG62',0); INSERT INTO "usage" VALUES('IGNF', 'RGTAAFUTM42S.KERG62_USAGE','compound_crs','IGNF','RGTAAFUTM42S.KERG62','IGNF','34','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFG.MART87','RRAF geographiques (dms) et IGN 1987 (MARTINIQUE)',NULL,'IGNF','RRAFG','IGNF','MART87',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG.MART87_USAGE','compound_crs','IGNF','RRAFG.MART87','IGNF','39','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFG.GUAD88','RRAF geographiques (dms) et IGN 1988 (GUADELOUPE)',NULL,'IGNF','RRAFG','IGNF','GUAD88',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG.GUAD88_USAGE','compound_crs','IGNF','RRAFG.GUAD88','IGNF','79','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFG.GUAD88LS','RRAF geographiques (dms) et IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'IGNF','RRAFG','IGNF','GUAD88LS',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG.GUAD88LS_USAGE','compound_crs','IGNF','RRAFG.GUAD88LS','IGNF','80','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFG.GUAD88MG','RRAF geographiques (dms) et IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'IGNF','RRAFG','IGNF','GUAD88MG',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG.GUAD88MG_USAGE','compound_crs','IGNF','RRAFG.GUAD88MG','IGNF','81','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFG.GUAD88SB','RRAF geographiques (dms) et IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'IGNF','RRAFG','IGNF','GUAD88SB',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG.GUAD88SB_USAGE','compound_crs','IGNF','RRAFG.GUAD88SB','IGNF','82','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFG.GUAD88SM','RRAF geographiques (dms) et IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'IGNF','RRAFG','IGNF','GUAD88SM',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG.GUAD88SM_USAGE','compound_crs','IGNF','RRAFG.GUAD88SM','IGNF','83','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFG.GUAD92LD','RRAF geographiques (dms) et IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RRAFG','IGNF','GUAD92LD',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFG.GUAD92LD_USAGE','compound_crs','IGNF','RRAFG.GUAD92LD','IGNF','84','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFUTM20.MART87','RRAF UTM Nord fuseau 20 et IGN 1987 (MARTINIQUE)',NULL,'IGNF','RRAFUTM20','IGNF','MART87',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20.MART87_USAGE','compound_crs','IGNF','RRAFUTM20.MART87','IGNF','39','IGNF','4'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFUTM20.GUAD88','RRAF UTM Nord fuseau 20 et IGN 1988 (GUADELOUPE)',NULL,'IGNF','RRAFUTM20','IGNF','GUAD88',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20.GUAD88_USAGE','compound_crs','IGNF','RRAFUTM20.GUAD88','IGNF','79','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFUTM20.GUAD88LS','RRAF UTM Nord fuseau 20 et IGN 1988 LS (GUADELOUPE / LES SAINTES)',NULL,'IGNF','RRAFUTM20','IGNF','GUAD88LS',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20.GUAD88LS_USAGE','compound_crs','IGNF','RRAFUTM20.GUAD88LS','IGNF','80','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFUTM20.GUAD88MG','RRAF UTM Nord fuseau 20 et IGN 1988 MG (GUADELOUPE / MARIE-GALANTE)',NULL,'IGNF','RRAFUTM20','IGNF','GUAD88MG',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20.GUAD88MG_USAGE','compound_crs','IGNF','RRAFUTM20.GUAD88MG','IGNF','81','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFUTM20.GUAD88SB','RRAF UTM Nord fuseau 20 et IGN 1988 SB (GUADELOUPE / SAINT-BARTHELEMY)',NULL,'IGNF','RRAFUTM20','IGNF','GUAD88SB',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20.GUAD88SB_USAGE','compound_crs','IGNF','RRAFUTM20.GUAD88SB','IGNF','82','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFUTM20.GUAD88SM','RRAF UTM Nord fuseau 20 et IGN 1988 SM (GUADELOUPE / SAINT-MARTIN)',NULL,'IGNF','RRAFUTM20','IGNF','GUAD88SM',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20.GUAD88SM_USAGE','compound_crs','IGNF','RRAFUTM20.GUAD88SM','IGNF','83','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','RRAFUTM20.GUAD92LD','RRAF UTM Nord fuseau 20 et IGN 1992 LD (GUADELOUPE / LA DESIRADE)',NULL,'IGNF','RRAFUTM20','IGNF','GUAD92LD',0); INSERT INTO "usage" VALUES('IGNF', 'RRAFUTM20.GUAD92LD_USAGE','compound_crs','IGNF','RRAFUTM20.GUAD92LD','IGNF','84','IGNF','10'); INSERT INTO "compound_crs" VALUES('IGNF','ST84G.PINS78','ST 84 ILE DES PINS geographiques (dms) et SHOM 1978 (ILE DES PINS)',NULL,'IGNF','ST84G','IGNF','PINS78',0); INSERT INTO "usage" VALUES('IGNF', 'ST84G.PINS78_USAGE','compound_crs','IGNF','ST84G.PINS78','IGNF','31','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','ST84UTM58S.PINS78','ST 84 ILE DES PINS UTM Sud fuseau 58 et SHOM 1978 (ILE DES PINS)',NULL,'IGNF','ST84UTM58S','IGNF','PINS78',0); INSERT INTO "usage" VALUES('IGNF', 'ST84UTM58S.PINS78_USAGE','compound_crs','IGNF','ST84UTM58S.PINS78','IGNF','31','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','STPM50UTM21.STPM50','St-Pierre-et-Miquelon UTM Nord f.21 et DANGER 1950 (SAINT-PIERRE-ET-MIQUELON)',NULL,'IGNF','STPM50UTM21','IGNF','STPM50_V',0); INSERT INTO "usage" VALUES('IGNF', 'STPM50UTM21.STPM50_USAGE','compound_crs','IGNF','STPM50UTM21.STPM50','IGNF','60','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','STPM50G.STPM50','St Pierre Miquelon 1950 geographiques (dms) et DANGER 1950 (SAINT-PIERRE-ET-MIQUELON)',NULL,'IGNF','STPM50G','IGNF','STPM50_V',0); INSERT INTO "usage" VALUES('IGNF', 'STPM50G.STPM50_USAGE','compound_crs','IGNF','STPM50G.STPM50','IGNF','60','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAAG.TAHAA01','Tahaa geographiques (dms) et TAHAA_SAU 2001',NULL,'IGNF','TAHAAG','IGNF','TAHAA01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAAG.TAHAA01_USAGE','compound_crs','IGNF','TAHAAG.TAHAA01','IGNF','64','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHAAUTM5S.TAHAA01','Tahaa UTM Sud fuseau 5 et TAHAA_SAU 2001',NULL,'IGNF','TAHAAUTM5S','IGNF','TAHAA01',0); INSERT INTO "usage" VALUES('IGNF', 'TAHAAUTM5S.TAHAA01_USAGE','compound_crs','IGNF','TAHAAUTM5S.TAHAA01','IGNF','64','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHI79G.TAHITI66','Tahiti (IGN79) geographiques (dms) et IGN 1966 (TAHITI)',NULL,'IGNF','TAHI79G','IGNF','TAHITI66',0); INSERT INTO "usage" VALUES('IGNF', 'TAHI79G.TAHITI66_USAGE','compound_crs','IGNF','TAHI79G.TAHITI66','IGNF','65','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHI79UTM6S.TAHITI66','Tahiti (IGN79) UTM Sud fuseau 6 et IGN 1966 (TAHITI)',NULL,'IGNF','TAHI79UTM6S','IGNF','TAHITI66',0); INSERT INTO "usage" VALUES('IGNF', 'TAHI79UTM6S.TAHITI66_USAGE','compound_crs','IGNF','TAHI79UTM6S.TAHITI66','IGNF','65','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','TAHI51UTM6S.TAHITI66','TAHITI TERME NORD UTM SUD FUSEAU 6 et IGN 1966 (TAHITI)',NULL,'IGNF','TAHI51UTM6S','IGNF','TAHITI66',0); INSERT INTO "usage" VALUES('IGNF', 'TAHI51UTM6S.TAHITI66_USAGE','compound_crs','IGNF','TAHI51UTM6S.TAHITI66','IGNF','65','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WALL76G.WALLIS96','Wallis (MOP 1976) geographiques (dms) et NGWF WALLIS (MOP 1996)',NULL,'IGNF','WALL76G','IGNF','WALLIS96',0); INSERT INTO "usage" VALUES('IGNF', 'WALL76G.WALLIS96_USAGE','compound_crs','IGNF','WALL76G.WALLIS96','IGNF','74','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WALL76UTM1S.WALLIS96','Wallis (MOP 1976) UTM Sud fuseau 1 et NGWF WALLIS (MOP 1996)',NULL,'IGNF','WALL76UTM1S','IGNF','WALLIS96',0); INSERT INTO "usage" VALUES('IGNF', 'WALL76UTM1S.WALLIS96_USAGE','compound_crs','IGNF','WALL76UTM1S.WALLIS96','IGNF','74','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WALL78G.WALLIS96','Wallis (MOP 1978) geographiques (dms) et NGWF WALLIS (MOP 1996)',NULL,'IGNF','WALL78G','IGNF','WALLIS96',0); INSERT INTO "usage" VALUES('IGNF', 'WALL78G.WALLIS96_USAGE','compound_crs','IGNF','WALL78G.WALLIS96','IGNF','74','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WALL78UTM1S.WALLIS96','Wallis (MOP 1978) UTM Sud fuseau 1 et NGWF WALLIS (MOP 1996)',NULL,'IGNF','WALL78UTM1S','IGNF','WALLIS96',0); INSERT INTO "usage" VALUES('IGNF', 'WALL78UTM1S.WALLIS96_USAGE','compound_crs','IGNF','WALL78UTM1S.WALLIS96','IGNF','74','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72G.IGN69','WGS72 geographiques (dms) et NGF-IGN 1969',NULL,'IGNF','WGS72G','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72G.IGN69_USAGE','compound_crs','IGNF','WGS72G.IGN69','IGNF','85','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72G.IGN78C','WGS72 geographiques (dms) et NGF-IGN 1978',NULL,'IGNF','WGS72G','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72G.IGN78C_USAGE','compound_crs','IGNF','WGS72G.IGN78C','IGNF','86','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72G.NGC48','WGS72 geographiques (dms) et NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'IGNF','WGS72G','IGNF','NGC48',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72G.NGC48_USAGE','compound_crs','IGNF','WGS72G.NGC48','IGNF','86','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72UTM30.IGN69','WGS72 UTM fuseau 30 et NGF-IGN 1969',NULL,'IGNF','WGS72UTM30','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM30.IGN69_USAGE','compound_crs','IGNF','WGS72UTM30.IGN69','IGNF','284','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72UTM31.IGN69','WGS72 UTM fuseau 31 et NGF-IGN 1969',NULL,'IGNF','WGS72UTM31','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM31.IGN69_USAGE','compound_crs','IGNF','WGS72UTM31.IGN69','IGNF','286','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72UTM32.IGN69','WGS72 UTM fuseau 32 et NGF-IGN 1969',NULL,'IGNF','WGS72UTM32','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM32.IGN69_USAGE','compound_crs','IGNF','WGS72UTM32.IGN69','IGNF','285','IGNF','9'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72UTM32.IGN78C','WGS72 UTM fuseau 32 et NGF-IGN 1978',NULL,'IGNF','WGS72UTM32','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM32.IGN78C_USAGE','compound_crs','IGNF','WGS72UTM32.IGN78C','IGNF','86','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WGS72UTM32.NGC48','WGS72 UTM fuseau 32 et NIVELLEMENT GENERAL DE LA CORSE (NGC)',NULL,'IGNF','WGS72UTM32','IGNF','NGC48',0); INSERT INTO "usage" VALUES('IGNF', 'WGS72UTM32.NGC48_USAGE','compound_crs','IGNF','WGS72UTM32.NGC48','IGNF','86','IGNF','2'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84GDD.IGN69','WGS84 geographiques (dd) et NGF-IGN 1969',NULL,'IGNF','WGS84GDD','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GDD.IGN69_USAGE','compound_crs','IGNF','WGS84GDD.IGN69','IGNF','85','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84GDD.IGN78C','WGS84 geographiques (dd) et NGF-IGN 1978',NULL,'IGNF','WGS84GDD','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84GDD.IGN78C_USAGE','compound_crs','IGNF','WGS84GDD.IGN78C','IGNF','86','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84G.IGN69','WGS84 geographiques (dms) et NGF-IGN 1969',NULL,'IGNF','WGS84G','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84G.IGN69_USAGE','compound_crs','IGNF','WGS84G.IGN69','IGNF','85','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84G.IGN78C','WGS84 geographiques (dms) et NGF-IGN 1978',NULL,'IGNF','WGS84G','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84G.IGN78C_USAGE','compound_crs','IGNF','WGS84G.IGN78C','IGNF','86','IGNF','5'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84UTM30.IGN69','WGS84 UTM fuseau 30 et NGF-IGN 1969',NULL,'IGNF','WGS84UTM30','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM30.IGN69_USAGE','compound_crs','IGNF','WGS84UTM30.IGN69','IGNF','284','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84UTM31.IGN69','WGS84 UTM fuseau 31 et NGF-IGN 1969',NULL,'IGNF','WGS84UTM31','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM31.IGN69_USAGE','compound_crs','IGNF','WGS84UTM31.IGN69','IGNF','286','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84UTM32.IGN69','WGS84 UTM NORD FUSEAU 32 et NGF-IGN 1969',NULL,'IGNF','WGS84UTM32','IGNF','IGN69',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM32.IGN69_USAGE','compound_crs','IGNF','WGS84UTM32.IGN69','IGNF','285','IGNF','6'); INSERT INTO "compound_crs" VALUES('IGNF','WGS84UTM32.IGN78C','WGS84 UTM NORD FUSEAU 32 et NGF-IGN 1978',NULL,'IGNF','WGS84UTM32','IGNF','IGN78C',0); INSERT INTO "usage" VALUES('IGNF', 'WGS84UTM32.IGN78C_USAGE','compound_crs','IGNF','WGS84UTM32.IGN78C','IGNF','86','IGNF','5'); --- Grid alternatives INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('ntf_r93.gsb', -- as referenced by the IGNF registry 'fr_ign_ntf_r93.tif', 'ntf_r93.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/fr_ign_ntf_r93.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAF09.mnt', -- as referenced by the IGNF registry 'fr_ign_RAF09.tif', 'RAF09.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RAF09.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAF18.mnt', -- as referenced by the IGNF registry 'fr_ign_RAF18.tif', 'RAF18.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RAF18.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_lsv2.txt', -- as referenced by the IGNF registry 'fr_ign_ggg00_lsv2.tif', 'ggg00_lsv2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggg00_lsv2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_sbv2.txt', -- as referenced by the IGNF registry 'fr_ign_ggg00_sbv2.tif', 'ggg00_sbv2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggg00_sbv2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_smv2.txt', -- as referenced by the IGNF registry 'fr_ign_ggg00_smv2.tif', 'ggg00_smv2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggg00_smv2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00v2.txt', -- as referenced by the IGNF registry 'fr_ign_ggg00v2.tif', 'ggg00v2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggg00v2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggm00v2.txt', -- as referenced by the IGNF registry 'fr_ign_ggm00v2.tif', 'ggm00v2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggm00v2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAGTBT2016.mnt', -- as referenced by the IGNF registry 'fr_ign_RAGTBT2016.tif', 'RAGTBT2016.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RAGTBT2016.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALD2016.mnt', -- as referenced by the IGNF registry 'fr_ign_RALD2016.tif', 'RALD2016.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RALD2016.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALDW842016.mnt', -- as referenced by the IGNF registry 'fr_ign_RALDW842016.tif', 'RALDW842016.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RALDW842016.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALS2016.mnt', -- as referenced by the IGNF registry 'fr_ign_RALS2016.tif', 'RALS2016.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RALS2016.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMART2016.mnt', -- as referenced by the IGNF registry 'fr_ign_RAMART2016.tif', 'RAMART2016.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RAMART2016.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMG2016.mnt', -- as referenced by the IGNF registry 'fr_ign_RAMG2016.tif', 'RAMG2016.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RAMG2016.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAR07_bl.gra', -- as referenced by the IGNF registry 'fr_ign_RAR07_bl.tif', 'RAR07_bl.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RAR07_bl.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sbv2.mnt', -- as referenced by the IGNF registry 'fr_ign_gg10_sbv2.tif', 'gg10_sbv2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_gg10_sbv2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_smv2.mnt', -- as referenced by the IGNF registry 'fr_ign_gg10_smv2.tif', 'gg10_smv2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_gg10_smv2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggguy15.mnt', -- as referenced by the IGNF registry 'fr_ign_ggguy15.tif', 'ggguy15.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggguy15.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggker08v2.mnt', -- as referenced by the IGNF registry 'fr_ign_ggker08v2.tif', 'ggker08v2.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggker08v2.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggm04v1.mnt', -- as referenced by the IGNF registry 'fr_ign_ggm04v1.tif', 'ggm04v1.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggm04v1.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Bora.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf02-Bora.tif', 'ggpf02-Bora.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf02-Bora.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Huahine.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf02-Huahine.tif', 'ggpf02-Huahine.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf02-Huahine.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Maupiti.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf02-Maupiti.tif', 'ggpf02-Maupiti.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf02-Maupiti.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Raiatea.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf02-Raiatea.tif', 'ggpf02-Raiatea.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf02-Raiatea.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Tahaa.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf02-Tahaa.tif', 'ggpf02-Tahaa.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf02-Tahaa.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf08-Fakarava.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf08-Fakarava.tif', 'ggpf08-Fakarava.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf08-Fakarava.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf10-Moorea.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf10-Moorea.tif', 'ggpf10-Moorea.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf10-Moorea.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf10-Tahiti.mnt', -- as referenced by the IGNF registry 'fr_ign_ggpf10-Tahiti.tif', 'ggpf10-Tahiti.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggpf10-Tahiti.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggspm06v1.mnt', -- as referenced by the IGNF registry 'fr_ign_ggspm06v1.tif', 'ggspm06v1.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_ggspm06v1.tif', 1, 1, NULL); INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('https://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAC09.mnt', -- as referenced by the IGNF registry 'fr_ign_RAC09.tif', 'RAC09.gtx', 'GTiff', 'geoid_like', 0, NULL, 'https://cdn.proj.org/fr_ign_RAC09.tif', 1, 1, NULL); --- Null transformations between RRAF and WGS84 adapted from EPSG INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RRAF_TO_EPSG_4978','RRAF to WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RRAF','EPSG','4978',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ', 'IGNF_RRAF_TO_EPSG_4978_USAGE','helmert_transformation','PROJ','IGNF_RRAF_TO_EPSG_4978','IGNF','57','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RRAFG_TO_EPSG_4326','RRAFG to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RRAFG','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ', 'IGNF_RRAFG_TO_EPSG_4326_USAGE','helmert_transformation','PROJ','IGNF_RRAFG_TO_EPSG_4326','IGNF','57','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RRAFGDD_TO_EPSG_4326','RRAFGDD to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RRAFGDD','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ', 'IGNF_RRAFGDD_TO_EPSG_4326_USAGE','helmert_transformation','PROJ','IGNF_RRAFGDD_TO_EPSG_4326','IGNF','57','EPSG','1024'); --- Null transformations between RGF93 and WGS84 adapted from EPSG INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RGF93_TO_EPSG_4978','RGF93 to WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGF93','EPSG','4978',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ', 'IGNF_RGF93_TO_EPSG_4978_USAGE','helmert_transformation','PROJ','IGNF_RGF93_TO_EPSG_4978','IGNF','4','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RGF93G_TO_EPSG_4326','RGF93G to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93G','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ', 'IGNF_RGF93G_TO_EPSG_4326_USAGE','helmert_transformation','PROJ','IGNF_RGF93G_TO_EPSG_4326','IGNF','4','EPSG','1024'); INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RGF93GDD_TO_EPSG_4326','RGF93GDD to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93GDD','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ', 'IGNF_RGF93GDD_TO_EPSG_4326_USAGE','helmert_transformation','PROJ','IGNF_RGF93GDD_TO_EPSG_4326','IGNF','4','EPSG','1024'); --- Concatenated operations INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G','Nouvelle Triangulation Francaise Paris grades to ED50G',NULL,'IGNF','NTFPGRAD','IGNF','ED50G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFPGRAD_TO_ED50G_USAGE','concatenated_operation','IGNF','TSG62_NTFPGRAD_TO_ED50G','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G',1,'IGNF','TSG1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G',2,'IGNF','TSG62_NTFG_TO_ED50G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFP_TO_ED50G','Nouvelle Triangulation Francaise Paris grades to ED50G',NULL,'IGNF','NTFP','IGNF','ED50G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFP_TO_ED50G_USAGE','concatenated_operation','IGNF','TSG62_NTFP_TO_ED50G','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50G',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50G',2,'IGNF','TSG62_NTFG_TO_ED50G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO','Nouvelle Triangulation Francaise Paris grades to ED50GEO',NULL,'IGNF','NTFPGRAD','IGNF','ED50GEO',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFPGRAD_TO_ED50GEO_USAGE','concatenated_operation','IGNF','TSG62_NTFPGRAD_TO_ED50GEO','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO',1,'IGNF','TSG1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO',2,'IGNF','TSG62_NTFG_TO_ED50GEO',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO','Nouvelle Triangulation Francaise Paris grades to ED50GEO',NULL,'IGNF','NTFP','IGNF','ED50GEO',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFP_TO_ED50GEO_USAGE','concatenated_operation','IGNF','TSG62_NTFP_TO_ED50GEO','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO',2,'IGNF','TSG62_NTFG_TO_ED50GEO',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD','Nouvelle Triangulation Francaise Paris grades to WGS84GDD',NULL,'IGNF','NTFPGRAD','IGNF','WGS84GDD',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFPGRAD_TO_WGS84GDD_USAGE','concatenated_operation','IGNF','TSG399_NTFPGRAD_TO_WGS84GDD','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD',1,'IGNF','TSG1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD',2,'IGNF','TSG399_NTFG_TO_WGS84GDD',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD','Nouvelle Triangulation Francaise Paris grades to WGS84GDD',NULL,'IGNF','NTFP','IGNF','WGS84GDD',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFP_TO_WGS84GDD_USAGE','concatenated_operation','IGNF','TSG399_NTFP_TO_WGS84GDD','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD',2,'IGNF','TSG399_NTFG_TO_WGS84GDD',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G','Nouvelle Triangulation Francaise Paris grades to WGS84G',NULL,'IGNF','NTFPGRAD','IGNF','WGS84G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFPGRAD_TO_WGS84G_USAGE','concatenated_operation','IGNF','TSG399_NTFPGRAD_TO_WGS84G','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G',1,'IGNF','TSG1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G',2,'IGNF','TSG399_NTFG_TO_WGS84G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFP_TO_WGS84G','Nouvelle Triangulation Francaise Paris grades to WGS84G',NULL,'IGNF','NTFP','IGNF','WGS84G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFP_TO_WGS84G_USAGE','concatenated_operation','IGNF','TSG399_NTFP_TO_WGS84G','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84G',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84G',2,'IGNF','TSG399_NTFG_TO_WGS84G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326','Nouvelle Triangulation Francaise Paris grades to 4326',NULL,'IGNF','NTFPGRAD','EPSG','4326',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFPGRAD_TO_4326_USAGE','concatenated_operation','IGNF','TSG399_NTFPGRAD_TO_4326','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326',1,'IGNF','TSG1240',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326',2,'IGNF','TSG399_NTFG_TO_4326',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFP_TO_4326','Nouvelle Triangulation Francaise Paris grades to 4326',NULL,'IGNF','NTFP','EPSG','4326',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFP_TO_4326_USAGE','concatenated_operation','IGNF','TSG399_NTFP_TO_4326','IGNF','91','IGNF','6'); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_4326',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_4326',2,'IGNF','TSG399_NTFG_TO_4326',NULL); proj-9.6.0/data/sql/metadata.sql000664 001754 001755 00000001752 14764566077 016437 0ustar00e012349e012349000000 000000 -- Version of the database structure. -- The major number indicates an incompatible change (e.g. table or column -- removed or renamed). -- The minor number is incremented if a backward compatible change done, that -- is the new database can still work with an older PROJ version. -- When updating those numbers, the DATABASE_LAYOUT_VERSION_MAJOR and -- DATABASE_LAYOUT_VERSION_MINOR constants in src/iso19111/factory.cpp must be -- updated as well. INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MAJOR', 1); INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 5); INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v12.004'); INSERT INTO "metadata" VALUES('EPSG.DATE', '2025-03-02'); -- The value of ${PROJ_VERSION} is substituted at build time by the actual -- value. INSERT INTO "metadata" VALUES('PROJ.VERSION', '${PROJ_VERSION}'); -- Version of the PROJ-data package with which this database is the most -- compatible. INSERT INTO "metadata" VALUES('PROJ_DATA.VERSION', '1.21'); proj-9.6.0/data/sql/nadcon5_concatenated_operations.sql000664 001754 001755 00000111016 14764566077 023154 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_nadcon5_concatenated_operations.py. DO NOT EDIT ! -- Concatenated accuracy is sqrt(sum of squared accuracies) (confirmed by NGS to be a valid way) INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS','NAD27 to NAD83(HARN) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4152',0.16,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_HARN_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS','NAD27 to NAD83(FBN) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','8860',0.17,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',3,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_FBN_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS','NAD27 to NAD83(NSRS2007) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4759',0.17,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',3,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',4,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_NSRS2007_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS','NAD27 to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','6318',0.18,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',3,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',4,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',5,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS','NAD83 to NAD83(FBN) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','8860',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS',1,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS',2,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_FBN_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS','NAD83 to NAD83(NSRS2007) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','4759',0.09,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',3,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_NSRS2007_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS','NAD83 to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6318',0.1,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',1,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',2,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',3,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',4,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS','NAD83(HARN) to NAD83(NSRS2007) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','4759',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS','NAD83(HARN) to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6318',0.09,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',1,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',2,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',3,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS','NAD83(FBN) to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','8860','EPSG','6318',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS',1,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS',2,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD83_FBN_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA','NAD27 to NAD83(HARN) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4152',0.52,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA',1,'EPSG','8549','forward'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA',2,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_HARN_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA','NAD27 to NAD83(NSRS2007) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4759',0.52,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',1,'EPSG','8549','forward'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',2,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',3,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA','NAD27 to NAD83(2011) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','6318',0.53,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',1,'EPSG','8549','forward'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',2,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',3,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',4,'EPSG','8552','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_2011_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA','NAD83 to NAD83(NSRS2007) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','4759',0.16,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA',1,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA',2,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA','NAD83 to NAD83(2011) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6318',0.17,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',1,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',2,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',3,'EPSG','8552','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_2011_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA','NAD83(HARN) to NAD83(2011) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6318',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA',1,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA',2,'EPSG','8552','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII','Old Hawaiian to NAD83(HARN) (NADCON5, Hawaii)','Transformation based on concatenation of NADCON5 transformations','EPSG','4135','EPSG','4152',0.21,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII',1,'EPSG','8561','forward'); -- Old Hawaiian to NAD83 (EPSG:8561), 0.2 m INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII',2,'EPSG','8660','forward'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m INSERT INTO usage VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII_USAGE','concatenated_operation','PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII', 'EPSG','1334', -- extent: Hawaii 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII','Old Hawaiian to NAD83(PA11) (NADCON5, Hawaii)','Transformation based on concatenation of NADCON5 transformations','EPSG','4135','EPSG','6322',0.21,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',1,'EPSG','8561','forward'); -- Old Hawaiian to NAD83 (EPSG:8561), 0.2 m INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',2,'EPSG','8660','forward'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',3,'EPSG','8661','forward'); -- NAD83(HARN) to NAD83(PA11) (EPSG:8661), 0.05 m INSERT INTO usage VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII_USAGE','concatenated_operation','PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII', 'EPSG','1334', -- extent: Hawaii 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII','NAD83 to NAD83(PA11) (NADCON5, Hawaii)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6322',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII',1,'EPSG','8660','forward'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII',2,'EPSG','8661','forward'); -- NAD83(HARN) to NAD83(PA11) (EPSG:8661), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_PA11_HAWAII', 'EPSG','1334', -- extent: Hawaii 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI','Puerto Rico to NAD83(HARN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','4152',0.21,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI','Puerto Rico to NAD83(HARN Corrected) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','8545',0.22,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI','Puerto Rico to NAD83(FBN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','8860',0.22,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',4,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI','Puerto Rico to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','4759',0.23,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',4,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',5,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI','Puerto Rico to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','6318',0.23,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',4,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',5,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',6,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI','NAD83 to NAD83(HARN Corrected) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','8545',0.16,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI','NAD83 to NAD83(FBN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','8860',0.17,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',3,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_FBN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI','NAD83 to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','4759',0.17,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',3,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',4,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI','NAD83 to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6318',0.18,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',3,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',4,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',5,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI','NAD83(HARN) to NAD83(FBN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','8860',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI',1,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI',2,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI','NAD83(HARN) to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','4759',0.09,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',1,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',3,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI','NAD83(HARN) to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6318',0.1,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',1,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',2,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',3,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',4,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI','NAD83(HARN Corrected) to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','8545','EPSG','4759',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI','NAD83(HARN Corrected) to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','8545','EPSG','6318',0.09,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',1,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',2,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',3,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI','NAD83(FBN) to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','8860','EPSG','6318',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI',1,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI',2,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_FBN_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS','American Samoa 1962 to NAD83(FBN) (NADCON5, AS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4169','EPSG','8860',5.0,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS',1,'EPSG','8662','forward'); -- American Samoa 1962 to NAD83(HARN) (EPSG:8662), 5.0 m INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS',2,'EPSG','8863','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m INSERT INTO usage VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS_USAGE','concatenated_operation','PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS', 'EPSG','3110', -- extent: AS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS','American Samoa 1962 to NAD83(PA11) (NADCON5, AS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4169','EPSG','6322',5.0,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',1,'EPSG','8662','forward'); -- American Samoa 1962 to NAD83(HARN) (EPSG:8662), 5.0 m INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',2,'EPSG','8863','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',3,'EPSG','8864','forward'); -- NAD83(FBN) to NAD83(PA11) (EPSG:8864), 0.05 m INSERT INTO usage VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS_USAGE','concatenated_operation','PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS', 'EPSG','3110', -- extent: AS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS','NAD83(HARN) to NAD83(PA11) (NADCON5, AS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6322',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS',1,'EPSG','8863','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS',2,'EPSG','8864','forward'); -- NAD83(FBN) to NAD83(PA11) (EPSG:8864), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_PA11_AS', 'EPSG','3110', -- extent: AS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM','Guam 1963 to NAD83(FBN) (NADCON5, GUAM)','Transformation based on concatenation of NADCON5 transformations','EPSG','4675','EPSG','8860',5.0,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM',1,'EPSG','8665','forward'); -- Guam 1963 to NAD83(HARN) (EPSG:8665), 5.0 m INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM',2,'EPSG','8865','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m INSERT INTO usage VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM_USAGE','concatenated_operation','PROJ','GUAM_1963_TO_NAD83_FBN_GUAM', 'EPSG','4525', -- extent: GUAM 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM','Guam 1963 to NAD83(MA11) (NADCON5, GUAM)','Transformation based on concatenation of NADCON5 transformations','EPSG','4675','EPSG','6325',5.0,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',1,'EPSG','8665','forward'); -- Guam 1963 to NAD83(HARN) (EPSG:8665), 5.0 m INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',2,'EPSG','8865','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',3,'EPSG','8866','forward'); -- NAD83(FBN) to NAD83(MA11) (EPSG:8866), 0.05 m INSERT INTO usage VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM_USAGE','concatenated_operation','PROJ','GUAM_1963_TO_NAD83_MA11_GUAM', 'EPSG','4525', -- extent: GUAM 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM','NAD83(HARN) to NAD83(MA11) (NADCON5, GUAM)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6325',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM',1,'EPSG','8865','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM',2,'EPSG','8866','forward'); -- NAD83(FBN) to NAD83(MA11) (EPSG:8866), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM', 'EPSG','4525', -- extent: GUAM 'EPSG','1027' -- scope: Geodesy ); proj-9.6.0/data/sql/nkg.sql000664 001754 001755 00000245342 14764566077 015443 0ustar00e012349e012349000000 000000 INSERT INTO "metadata" VALUES('NKG.SOURCE', 'https://github.com/NordicGeodesy/NordicTransformations'); INSERT INTO "metadata" VALUES('NKG.VERSION', '1.0.w'); INSERT INTO "metadata" VALUES('NKG.DATE', '2025-02-13'); -- extent for NKG2008 transformations INSERT INTO "extent" VALUES( 'NKG','EXTENT_2008', -- extend auth+code 'Nordic and Baltic countries', -- name 'Denmark; Estonia; Finland; Latvia; Lithuania; Norway; Sweden', -- description 53.0, -- south latitude 73.0, -- north latitude 3.0, -- west longitude 40.0, -- east longitude 0 ); -- extent for NKG2020 transformations INSERT INTO "extent" VALUES( 'NKG','EXTENT_2020', -- extend auth+code 'Nordic and Baltic countries', -- name 'Denmark; Estonia; Finland; Latvia; Lithuania; Norway; Sweden', -- description 50.0, -- south latitude 75.0, -- north latitude 0.0, -- west longitude 49.0, -- east longitude 0 ); -- Scope for both NKG2008 and NKG2020 transformations INSERT INTO "scope" VALUES ( 'NKG', 'SCOPE_GENERIC', -- scope auth+code 'Geodesy. High accuracy ETRS89 transformations', -- scope 0 --deprecated ); ------------------------------------------------------- -- DATUM+CRS: NKG_ETRF00 ------------------------------------------------------- INSERT INTO "geodetic_datum" VALUES ( 'NKG','DATUM_NKG_ETRF00', -- auth+code 'NKG_ETRF00', -- name NULL, -- description 'EPSG','7019', -- ellipsoid auth+code 'EPSG','8901', -- prime meridian auth+code '2016-03-16', -- publication date 2000.0, -- frame reference epoch NULL, -- ensemble accuracy NULL, -- anchor NULL, -- anchor_epoch 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG','5007', 'geodetic_datum', 'NKG','DATUM_NKG_ETRF00', 'NKG','EXTENT_2008', -- extend auth+code 'NKG','SCOPE_GENERIC' -- scope auth+code ); -- Add CRS entry for NKG common frame ETRF_NKG00 INSERT INTO "geodetic_crs" VALUES( 'NKG','ETRF00', -- CRS auth+code 'NKG_ETRF00', -- name 'NKG Common reference frame 2000', -- description 'geocentric', -- type 'EPSG','6500', -- CRS type auth+code: ECEF 'NKG','DATUM_NKG_ETRF00', -- datum auth+code NULL, -- text definition 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5101', -- usage auth+code 'geodetic_crs', -- object_table_name 'NKG', 'ETRF00', -- object auth+code 'NKG', 'EXTENT_2008', -- extent auth+code 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- DATUM+CRS: NKG_ETRF14 ------------------------------------------------------- INSERT INTO "geodetic_datum" VALUES ( 'NKG','DATUM_NKG_ETRF14', -- auth+code 'NKG_ETRF14', -- name NULL, -- description 'EPSG','7019', -- ellipsoid auth+code 'EPSG','8901', -- prime meridian auth+code '2021-03-01', -- publication date 2000.0, -- frame reference epoch NULL, -- ensemble accuracy NULL, -- anchor NULL, -- anchor_epoch 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG','5033', 'geodetic_datum', 'NKG','DATUM_NKG_ETRF14', 'NKG','EXTENT_2020', -- extend auth+code 'NKG','SCOPE_GENERIC' -- scope auth+code ); -- Add CRS entry for NKG common frame ETRF_NKG00 INSERT INTO "geodetic_crs" VALUES( 'NKG','ETRF14', -- CRS auth+code 'NKG_ETRF14', -- name 'NKG Common reference frame 2014', -- description 'geocentric', -- type 'EPSG','6500', -- CRS type auth+code: ECEF 'NKG','DATUM_NKG_ETRF14', -- datum auth+code NULL, -- text definition 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5102', -- usage auth+code 'geodetic_crs', -- object_table_name 'NKG', 'ETRF14', -- object auth+code 'NKG', 'EXTENT_2020', -- extent auth+code 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> NKG_ETRF00 ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_NKG_ETRF00', -- operation auth+code 'ITRF2000 to NKG_ETRF00', -- name 'Time-dependent transformation from ITRF2000 to NKG_ETRF00', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'NKG', 'ETRF00',-- target_crs: NKG_ETRF00 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG','NKG_ETRF00_TO_ETRF2000', -- operation auth+code 'NKG_ETRF00 to ETRF2000', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+code '+proj=deformation +t_epoch=2000.0 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','7930', -- target_crs: ETRF2000 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5003', -- usage auth+code 'other_transformation', -- object_table_name 'NKG','NKG_ETRF00_TO_ETRF2000', -- object auth+code 'NKG','EXTENT_2008', -- extent auth+code 'NKG','SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_NKG_ETRF00', 2, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_NKG_ETRF00', 3, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse') ; INSERT INTO "usage" VALUES ( 'NKG', '5001', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_NKG_ETRF00', -- object auth+code 'NKG', 'EXTENT_2008', -- extent auth+code 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> NKG_ETRF14 ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_NKG_ETRF14', -- operation auth+code 'ITRF2014 to NKG_ETRF14', -- name 'Time-dependent transformation from ITRF2014 to NKG_ETRF14', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'NKG', 'ETRF14',-- target_crs: NKG_ETRF14 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG','NKG_ETRF14_TO_ETRF2014', -- operation auth+code 'NKG_ETRF14 to ETRF2014', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+code '+proj=deformation +t_epoch=2000.0 +grids=eur_nkg_nkgrf17vel.tif', 'NKG', 'ETRF14',-- source_crs: NKG_ETRF14 'EPSG','8401', -- target_crs: ETRF2014 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5034', -- usage auth+code 'other_transformation', -- object_table_name 'NKG','NKG_ETRF14_TO_ETRF2014', -- object auth+code 'NKG','EXTENT_2020', -- extent auth+code 'NKG','SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_NKG_ETRF14', 2, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_NKG_ETRF14', 3, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse') ; INSERT INTO "usage" VALUES ( 'NKG', '5035', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_NKG_ETRF14', -- object auth+code 'NKG', 'EXTENT_2020', -- extent auth+code 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------------- -- Intermediate transformations: NKG_ETRF00 -> ETRFyy@2000.00 ------------------------------------------------------------- -- DK INSERT INTO "helmert_transformation" VALUES ( 'NKG','P1_2008_DK', -- operation auth+code 'NKG_ETRF00 to ETRF92@2000.0', -- name 'Transformation from NKG_ETRF00 to ETRF92, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF00', -- source auth+code 'EPSG','7920', -- target auth+code 0.005, -- accuracy 0.03863, -- x 0.147, -- y 0.02776, -- z 'EPSG','9001', 0.00617753, -- rx 5.064e-05, -- ry 4.729e-05, -- rz 'EPSG','9104', -0.009420, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2008', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5004', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','P1_2008_DK', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- EE INSERT INTO "helmert_transformation" VALUES ( 'NKG','P1_2008_EE', -- operation auth+code 'NKG_ETRF00 to ETRF96@2000.0 (Estonia)', -- name 'Transformation from NKG_ETRF00 to ETRF96, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF00', -- source auth+code 'EPSG','7926', -- target auth+code 0.005, -- accuracy 0.12194, -- x 0.02225, -- y -0.03541, -- z 'EPSG','9001', 0.00227196, -- rx -0.00323934, -- ry 0.00247008, -- rz 'EPSG','9104', -0.005626, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2008', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5008', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','P1_2008_EE', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- FI INSERT INTO "helmert_transformation" VALUES ( 'NKG','P1_2008_FI', -- operation auth+code 'NKG_ETRF00 to ETRF96@2000.0 (Finland)', -- name 'Transformation from NKG_ETRF00 to ETRF96, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF00', -- source auth+code 'EPSG','7926', -- target auth+code 0.005, -- accuracy 0.07251, -- x -0.13019, -- y -0.11323, -- z 'EPSG','9001', -0.00157399, -- rx -0.00308833, -- ry 0.00410332, -- rz 'EPSG','9104', 0.013012, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2008', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5009', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','P1_2008_FI', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- LV INSERT INTO "helmert_transformation" VALUES ( 'NKG','P1_2008_LV', -- operation auth+code 'NKG_ETRF00 to ETRF89@2000.0', -- name 'Transformation from NKG_ETRF00 to ETRF89, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF00', -- source auth+code 'EPSG','7914', -- target auth+code 0.02, -- accuracy 0.41812, -- x -0.78105, -- y -0.01335, -- z 'EPSG','9001', -0.0216436, -- rx -0.0115184, -- ry 0.01719911, -- rz 'EPSG','9104', 0.000757, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2008', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5010', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','P1_2008_LV', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- LT INSERT INTO "helmert_transformation" VALUES ( 'NKG','P1_2008_LT', -- operation auth+code 'NKG_ETRF00 to ETRF2000@2000.0', -- name 'Transformation from NKG_ETRF00 to ETRF2000, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF00', -- source auth+code 'EPSG','7930', -- target auth+code 0.01, -- accuracy 0.05692, -- x 0.115495, -- y -0.00078, -- z 'EPSG','9001', 0.00314291, -- rx -0.00147975, -- ry -0.00134758, -- rz 'EPSG','9104', -0.006182, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2008', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5011', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','P1_2008_LT', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- NO INSERT INTO "helmert_transformation" VALUES ( 'NKG','P1_2008_NO', -- operation auth+code 'NKG_ETRF00 to ETRF93@2000.0', -- name 'Transformation from NKG_ETRF00 to ETRF93, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF00', -- source auth+code 'EPSG','7922', -- target auth+code 0.005, -- accuracy -0.13116, -- x -0.02817, -- y 0.02036, -- z 'EPSG','9001', -0.00038674, -- rx 0.00408947, -- ry 0.00103588, -- rz 'EPSG','9104', 0.006569, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2008', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5012', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','P1_2008_NO', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- SE INSERT INTO "helmert_transformation" VALUES ( 'NKG','P1_2008_SE', -- operation auth+code 'NKG_ETRF00 to ETRF97@2000.0', -- name 'Transformation from NKG_ETRF00 to ETRF97, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF00', -- source auth+code 'EPSG','7928', -- target auth+code 0.005, -- accuracy -0.01642, -- x -0.00064, -- y -0.0305, -- z 'EPSG','9001', 0.00187431, -- rx 0.00046382, -- ry 0.00228487, -- rz 'EPSG','9104', 0.001861, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2008', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5014', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','P1_2008_SE', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); ------------------------------------------------------------- -- Intermediate transformations: NKG_ETRF14 -> ETRFyy@2000.00 ------------------------------------------------------------- -- DK INSERT INTO "helmert_transformation" VALUES ( 'NKG','PAR_2020_DK', -- operation auth+code 'NKG_ETRF14 to ETRF92@2000.0', -- name 'Transformation from NKG_ETRF14 to ETRF92, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF14', -- source auth+code 'EPSG','7920', -- target auth+code 0.005, -- accuracy 0.66818, -- x 0.04453, -- y -0.45049, -- z 'EPSG','9001', 0.00312883, -- rx -0.02373423, -- ry 0.00442969, -- rz 'EPSG','9104', -0.003136, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2020', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5036', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','PAR_2020_DK', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- EE INSERT INTO "helmert_transformation" VALUES ( 'NKG','PAR_2020_EE', -- operation auth+code 'NKG_ETRF14 to ETRF96@2000.0 (Estonia)', -- name 'Transformation from NKG_ETRF14 to ETRF96, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF14', -- source auth+code 'EPSG','7926', -- target auth+code 0.005, -- accuracy -0.05027, -- x -0.11595, -- y 0.03012, -- z 'EPSG','9001', -0.00310814, -- rx 0.00457237, -- ry 0.00472406, -- rz 'EPSG','9104', 0.003191, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2020', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5037', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','PAR_2020_EE', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- FI INSERT INTO "helmert_transformation" VALUES ( 'NKG','PAR_2020_FI', -- operation auth+code 'NKG_ETRF14 to ETRF96@2000.0 (Finland)', -- name 'Transformation from NKG_ETRF14 to ETRF96, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF14', -- source auth+code 'EPSG','7926', -- target auth+code 0.005, -- accuracy 0.15651, -- x -0.10993, -- y -0.10935, -- z 'EPSG','9001', -0.00312861, -- rx -0.00378935, -- ry 0.00403512, -- rz 'EPSG','9104', 0.00529, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2020', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5038', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','PAR_2020_FI', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- LV INSERT INTO "helmert_transformation" VALUES ( 'NKG','PAR_2020_LV', -- operation auth+code 'NKG_ETRF14 to ETRF89@2000.0', -- name 'Transformation from NKG_ETRF14 to ETRF89, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF14', -- source auth+code 'EPSG','7914', -- target auth+code 0.01, -- accuracy 0.09745, -- x -0.69388, -- y 0.52901, -- z 'EPSG','9001', -0.0192069, -- rx 0.01043272, -- ry 0.02327169, -- rz 'EPSG','9104', -0.049663, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2020', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5039', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','PAR_2020_LV', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- LT INSERT INTO "helmert_transformation" VALUES ( 'NKG','PAR_2020_LT', -- operation auth+code 'NKG_ETRF14 to ETRF2000@2000.0', -- name 'Transformation from NKG_ETRF14 to ETRF2000, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF14', -- source auth+code 'EPSG','7930', -- target auth+code 0.015, -- accuracy 0.36749, -- x 0.14351, -- y -0.18472, -- z 'EPSG','9001', 0.0047914, -- rx -0.01027566, -- ry 0.00276102, -- rz 'EPSG','9104', -0.003684, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2020', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5040', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','PAR_2020_LT', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); -- NO INSERT INTO "helmert_transformation" VALUES ( 'NKG','PAR_2020_NO', -- operation auth+code 'NKG_ETRF14 to ETRF93@2000.0 (Helmert)', -- name 'Transformation from NKG_ETRF14 to ETRF93, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF14', -- source auth+code 'EPSG','7922', -- target auth+code 0.01, -- accuracy -0.05172, -- x 0.13747, -- y -0.01648, -- z 'EPSG','9001', 0.00268452, -- rx 0.00329165, -- ry -0.00116569, -- rz 'EPSG','9104', 0.002583, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2020', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5041', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','PAR_2020_NO', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'NKG_ETRF14_ETRF93_2000', -- object auth+code 'NKG_ETRF14 to ETRF93@2000.0 (Gridshift)', -- name 'Transformation from NKG_ETRF14 to ETRF93, at transformation reference epoch 2000.0', -- description / remark 'PROJ', 'PROJString', '+proj=xyzgridshift +grids=no_kv_NKGETRF14_EPSG7922_2000.tif', 'NKG','ETRF14', -- source auth+code 'EPSG','7922', -- target auth+code 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5064', 'other_transformation', 'NKG', 'NKG_ETRF14_ETRF93_2000', 'EPSG', '1352', 'NKG', 'SCOPE_GENERIC' ); -- SE INSERT INTO "helmert_transformation" VALUES ( 'NKG','PAR_2020_SE', -- operation auth+code 'NKG_ETRF14 to ETRF97@2000.0', -- name 'Transformation from NKG_ETRF14 to ETRF97, at transformation reference epoch 2000.0', -- description / remark 'EPSG','1033', -- method auth+code 'Position Vector transformation (geocentric domain)', 'NKG','ETRF14', -- source auth+code 'EPSG','7928', -- target auth+code 0.005, -- accuracy 0.03054, -- x 0.04606, -- y -0.07944, -- z 'EPSG','9001', 0.00141958, -- rx 0.00015132, -- ry 0.00150337, -- rz 'EPSG','9104', 0.003002, -- s 'EPSG','9202', NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 'NKG 2020', -- operation version 0 ); INSERT INTO "usage" VALUES ( 'NKG', '5042', -- usage auth+code 'helmert_transformation', -- object_table_name 'NKG','PAR_2020_SE', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); ------------------------------------------------------- -- Transformation: NKG_ETRF00 -> ETRF92@1994.704 (DK) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'ETRF92_2000_TO_ETRF92_1994',-- object auth+code 'ETRF92@2000.0 to ETRF92@1994.704 using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-5.296 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7920', -- source_crs: ETRF92@2000.0 'EPSG','4936', -- target_crs: ETRS89 (DK) 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5005', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF92_2000_TO_ETRF92_1994', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF00_TO_DK', -- operation auth+code 'NKG_ETRF00 to ETRS89(DK)', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF92@1994.704', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (DK) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF00_TO_DK', 1, 'NKG', 'P1_2008_DK', 'forward'), ('NKG', 'ETRF00_TO_DK', 2, 'NKG', 'ETRF92_2000_TO_ETRF92_1994', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5006', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_DK', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> ETRF92@1994.704 (DK) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_DK', -- operation auth+code 'ITRF2000 to ETRS89(DK)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89(DK)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '4936', -- target_crs: ETRS89(DK) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_DK', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_DK', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_DK', 3, 'NKG', 'P1_2008_DK', 'forward'), ('NKG', 'ITRF2000_TO_DK', 4, 'NKG', 'ETRF92_2000_TO_ETRF92_1994', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5013', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_DK', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: NKG_ETRF00 -> ETRF96@1997.56 (EE) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'ETRF96_2000_TO_ETRF96_1997_56',-- object auth+code 'ETRF96@2000.0 to ETRF96@1997.56 using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-2.44 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7926', -- source_crs: ETRF96@2000.0 'EPSG','4936', -- target_crs: ETRS89 (EE) 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5015', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF96_2000_TO_ETRF96_1997_56', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF00_TO_EE', -- operation auth+code 'NKG_ETRF00 to ETRS89 (EUREF-EST97)', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF96@1997.56', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (EE) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF00_TO_EE', 1, 'NKG', 'P1_2008_EE', 'forward'), ('NKG', 'ETRF00_TO_EE', 2, 'NKG', 'ETRF96_2000_TO_ETRF96_1997_56', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5016', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_EE', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> ETRF96@1997.56 (EE) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_EE', -- operation auth+code 'ITRF2000 to ETRS89(EE)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89 (EUREF-EST97)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '4936', -- target_crs: ETRS89(EE) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_EE', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_EE', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_EE', 3, 'NKG', 'P1_2008_EE', 'forward'), ('NKG', 'ITRF2000_TO_EE', 4, 'NKG', 'ETRF96_2000_TO_ETRF96_1997_56', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5017', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_EE', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: NKG_ETRF00 -> ETRF96@1997.0 (FI) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES ( 'NKG', 'ETRF96_2000_TO_ETRF96_1997',-- object auth+code 'ETRF96@2000.0 to ETRF96@1997.0 using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-3.0 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7926', -- source_crs: ETRF96@2000.0 'EPSG','4936', -- target_crs: ETRS89 (FI) 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ), ( 'NKG', 'ETRF96_2000_TO_ETRF96_1997_EUREF-FIN',-- object auth+code 'ETRF96@2000.0 to ETRF96@1997.0 (EUREF-FIN) using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-3.0 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7926', -- source_crs: ETRF96@2000.0 'EPSG','10688', -- target_crs: EUREF-FIN 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5018', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF96_2000_TO_ETRF96_1997', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ), ( 'NKG', '50181', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF96_2000_TO_ETRF96_1997_EUREF-FIN', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ETRF00_TO_FI', -- operation auth+code 'NKG_ETRF00 to ETRS89 (FI)', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF96@1997.0', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (FI) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ), ( 'NKG', 'ETRF00_TO_EUREF-FIN', -- operation auth+code 'NKG_ETRF00 to ETRS89 (EUREF-FIN)', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF96@1997.0 (EUREF-FIN)', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','10688', -- target_crs: EUREF-FIN 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ) ; INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF00_TO_FI', 1, 'NKG', 'P1_2008_FI', 'forward'), ('NKG', 'ETRF00_TO_FI', 2, 'NKG', 'ETRF96_2000_TO_ETRF96_1997', 'forward'), ('NKG', 'ETRF00_TO_EUREF-FIN', 1, 'NKG', 'P1_2008_FI', 'forward'), ('NKG', 'ETRF00_TO_EUREF-FIN', 2, 'NKG', 'ETRF96_2000_TO_ETRF96_1997_EUREF-FIN', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5019', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_FI', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ), ( 'NKG', '50191', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_EUREF-FIN', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> ETRF96@1997.0 (FI) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_FI', -- operation auth+code 'ITRF2000 to ETRS89 (EUREF-FIN)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89 (EUREF-FIN)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '4936', -- target_crs: ETRS89(FI) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ), ( 'NKG', 'ITRF2000_TO_FI_EUREF-FIN', -- operation auth+code 'ITRF2000 to EUREF-FIN (ETRS89)', -- name 'Time-dependent transformation from ITRF2014 to EUREF-FIN (ETRS89)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '10688',-- target_crs: EUREF-FIN 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_FI', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_FI', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_FI', 3, 'NKG', 'P1_2008_FI', 'forward'), ('NKG', 'ITRF2000_TO_FI', 4, 'NKG', 'ETRF96_2000_TO_ETRF96_1997', 'forward'), ('NKG', 'ITRF2000_TO_FI_EUREF-FIN', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_FI_EUREF-FIN', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_FI_EUREF-FIN', 3, 'NKG', 'P1_2008_FI', 'forward'), ('NKG', 'ITRF2000_TO_FI_EUREF-FIN', 4, 'NKG', 'ETRF96_2000_TO_ETRF96_1997_EUREF-FIN', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5020', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_FI', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ), ( 'NKG', '50201', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_FI_EUREF-FIN', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: NKG_ETRF00 -> ETRF89@1992.75 (LV) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'ETRF89_2000_TO_ETRF89_1992',-- object auth+code 'ETRF89@2000.0 to ETRF89@1992.75 using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-7.25 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7914', -- source_crs: ETRF89@2000.0 'EPSG','4948', -- target_crs: LKS-92 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5021', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF89_2000_TO_ETRF89_1992', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF00_TO_LV', -- operation auth+code 'NKG_ETRF00 to ETRS89 (LKS-92)', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF89@1992.75', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','4948', -- target_crs: LKS-92 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF00_TO_LV', 1, 'NKG', 'P1_2008_LV', 'forward'), ('NKG', 'ETRF00_TO_LV', 2, 'NKG', 'ETRF89_2000_TO_ETRF89_1992', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5022', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_LV', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> ETRF89@1992.75 (LV) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_LV', -- operation auth+code 'ITRF2000 to ETRS89 (LKS-92)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89 (LKS-92)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '4948', -- target_crs: LKS-92 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_LV', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_LV', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_LV', 3, 'NKG', 'P1_2008_LV', 'forward'), ('NKG', 'ITRF2000_TO_LV', 4, 'NKG', 'ETRF89_2000_TO_ETRF89_1992', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5023', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_LV', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: NKG_ETRF00 -> ETRF2000@2003.75 (LT) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'ETRF2000_2000_TO_ETRF_2000_2003',-- object auth+code 'ETRF2000@2000.0 to ETRF2000@2003.75 using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=3.75 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7930', -- source_crs: ETRF2000@2000.0 'EPSG','4950', -- target_crs: LKS94 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5024', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF2000_2000_TO_ETRF_2000_2003', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF00_TO_LT', -- operation auth+code 'NKG_ETRF00 to LKS94', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF2000@2003.75', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','4950', -- target_crs: LKS94 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF00_TO_LT', 1, 'NKG', 'P1_2008_LT', 'forward'), ('NKG', 'ETRF00_TO_LT', 2, 'NKG', 'ETRF2000_2000_TO_ETRF_2000_2003', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5025', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_LT', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> ETRF2000@2003.75 (LT) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_LT', -- operation auth+code 'ITRF2000 to ETRS89(LT)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89(LT)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '4950', -- target_crs: LKS94 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_LT', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_LT', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_LT', 3, 'NKG', 'P1_2008_LT', 'forward'), ('NKG', 'ITRF2000_TO_LT', 4, 'NKG', 'ETRF2000_2000_TO_ETRF_2000_2003', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5026', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_LT', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: NKG_ETRF00 -> ETRF93@1995.0 (NO) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'ETRF93_2000_TO_ETRF93_1995',-- object auth+code 'ETRF93@2000.0 to ETRF93@1995.0 using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-5 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7922', -- source_crs: ETRF93@2000.0 'EPSG','4936', -- target_crs: ETRS89 (NO) 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5027', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF93_2000_TO_ETRF93_1995', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF00_TO_NO', -- operation auth+code 'NKG_ETRF00 to ETRS89(NO)', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF93@1995.0', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (NO) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF00_TO_NO', 1, 'NKG', 'P1_2008_NO', 'forward'), ('NKG', 'ETRF00_TO_NO', 2, 'NKG', 'ETRF93_2000_TO_ETRF93_1995', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5028', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_NO', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> ETRF93@1995.0 (NO) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_NO', -- operation auth+code 'ITRF2000 to ETRS89(NO)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89(NO)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '4936', -- target_crs: ETRS89(NO) 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_NO', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_NO', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_NO', 3, 'NKG', 'P1_2008_NO', 'forward'), ('NKG', 'ITRF2000_TO_NO', 4, 'NKG', 'ETRF93_2000_TO_ETRF93_1995', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5029', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_NO', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: NKG_ETRF00 -> ETRF97@1999.5 (SE) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'ETRF97_2000_TO_ETRF97_1999',-- object auth+code 'ETRF97@2000.0 to ETRF97@1999.5 using nkgrf03vel_realigned', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-0.5 +grids=eur_nkg_nkgrf03vel_realigned.tif', 'EPSG','7928', -- source_crs: ETRF97@2000.0 'EPSG','4976', -- target_crs: SWEREF99 0.005, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5030', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'ETRF97_2000_TO_ETRF97_1999', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF00_TO_SE', -- operation auth+code 'NKG_ETRF00 to SWEREF99', -- name 'Transformation from NKG_ETRF00@2000.0 to ETRF97@1999.5', -- description 'NKG', 'ETRF00',-- source_crs: NKG_ETRF00 'EPSG','4976', -- target_crs: SWEREF99 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF00_TO_SE', 1, 'NKG', 'P1_2008_SE', 'forward'), ('NKG', 'ETRF00_TO_SE', 2, 'NKG', 'ETRF97_2000_TO_ETRF97_1999', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5031', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF00_TO_SE', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2000 -> ETRF97@1999.5 (SE) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2000_TO_SE', -- operation auth+code 'ITRF2000 to ETRS89(SE)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89(SE)', -- description 'EPSG', '4919', -- source_crs: ITRF2000 'EPSG', '4976', -- target_crs: SWEREF99 0.01, -- accuracy 'NKG 2008', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2000_TO_SE', 1, 'EPSG', '7941', 'forward'), -- ITRF2000 -> ETRF2000 ('NKG', 'ITRF2000_TO_SE', 2, 'NKG', 'NKG_ETRF00_TO_ETRF2000', 'reverse'), ('NKG', 'ITRF2000_TO_SE', 3, 'NKG', 'P1_2008_SE', 'forward'), ('NKG', 'ITRF2000_TO_SE', 4, 'NKG', 'ETRF97_2000_TO_ETRF97_1999', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5032', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2000_TO_SE', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: NKG_ETRF14 -> ETRF92@1994.704 (DK) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'DK_2020_INTRAPLATE', -- object auth+code 'ETRF92@2000.0 to ETRF92@1994.704 using nkgrf17vel', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=15.829 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7920', -- source_crs: ETRF92@2000.0 'EPSG','4936', -- target_crs: ETRS89 (DK) 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5043', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'DK_2020_INTRAPLATE', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF14_TO_DK', -- operation auth+code 'NKG_ETRF14 to ETRS89(DK)', -- name 'Transformation from NKG_ETRF14@2000.0 to ETRF92@1994.704', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (DK) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF14_TO_DK', 1, 'NKG', 'PAR_2020_DK', 'forward'), ('NKG', 'ETRF14_TO_DK', 2, 'NKG', 'DK_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5044', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_DK', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> ETRF92@1994.704 (DK) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_DK', -- operation auth+code 'ITRF2014 to ETRS89(DK)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89(DK)', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '4936', -- target_crs: ETRS89(DK) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_DK', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_DK', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_DK', 3, 'NKG', 'PAR_2020_DK', 'forward'), ('NKG', 'ITRF2014_TO_DK', 4, 'NKG', 'DK_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5045', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_DK', -- object auth+code 'EPSG', '1080', -- extent: Denmark - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "supersession" VALUES ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_DK', 'concatenated_operation', 'NKG', 'ITRF2014_TO_DK', 'NKG', 0 ); ------------------------------------------------------- -- Transformation: NKG_ETRF14 -> ETRF96@1997.56 (EE) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'EE_2020_INTRAPLATE',-- object auth+code 'ETRF96@2000.0 to ETRF96@1997.56 using nkgrf17vel', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-2.44 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7926', -- source_crs: ETRF96@2000.0 'EPSG','4936', -- target_crs: ETRS89 (EE) 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5046', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'EE_2020_INTRAPLATE', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF14_TO_EE', -- operation auth+code 'NKG_ETRF14 to ETRS89 (EUREF-EST97)', -- name 'Transformation from NKG_ETRF14@2000.0 to ETRF96@1997.56', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (EE) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF14_TO_EE', 1, 'NKG', 'PAR_2020_EE', 'forward'), ('NKG', 'ETRF14_TO_EE', 2, 'NKG', 'EE_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5047', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_EE', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> ETRF96@1997.56 (EE) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_EE', -- operation auth+code 'ITRF2014 to ETRS89 (EUREF-EST97)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89 (EUREF-EST97)', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '4936', -- target_crs: ETRS89(EE) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_EE', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_EE', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_EE', 3, 'NKG', 'PAR_2020_EE', 'forward'), ('NKG', 'ITRF2014_TO_EE', 4, 'NKG', 'EE_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5048', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_EE', -- object auth+code 'EPSG', '1090', -- extent: Estonia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "supersession" VALUES ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_EE', 'concatenated_operation', 'NKG', 'ITRF2014_TO_EE', 'NKG', 0 ); ------------------------------------------------------- -- Transformation: NKG_ETRF14 -> ETRF96@1997.0 (FI) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'FI_2020_INTRAPLATE',-- object auth+code 'ETRF96@2000.0 to ETRF96@1997.0 using nkgrf17vel', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-3 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7926', -- source_crs: ETRF96@2000.0 'EPSG','4936', -- target_crs: ETRS89 (FI) 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ), ( 'NKG', 'FI_2020_INTRAPLATE_EUREF-FIN',-- object auth+code 'ETRF96@2000.0 to ETRF96@1997.0 using nkgrf17vel (EUREF-FIN)', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-3 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7926', -- source_crs: ETRF96@2000.0 'EPSG','10688', -- target_crs: EUREF-FIN 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5049', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'FI_2020_INTRAPLATE', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ), ( 'NKG', '50491', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'FI_2020_INTRAPLATE_EUREF-FIN', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF14_TO_FI', -- operation auth+code 'NKG_ETRF14 to ETRS89 (FI)', -- name 'Transformation from NKG_ETRF14@2000.0 to ETRF96@1997.0', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (FI) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ), ( 'NKG', 'ETRF14_TO_FI_EUREF-FIN', -- operation auth+code 'NKG_ETRF14 to ETRS89 (EUREF-FIN)', -- name 'Transformation from NKG_ETRF14@2000.0 to ETRF96@1997.0 (EUREF-FIN)', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','10688', -- target_crs: EUREF-FIN 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF14_TO_FI', 1, 'NKG', 'PAR_2020_FI', 'forward'), ('NKG', 'ETRF14_TO_FI', 2, 'NKG', 'FI_2020_INTRAPLATE', 'forward'), ('NKG', 'ETRF14_TO_FI_EUREF-FIN', 1, 'NKG', 'PAR_2020_FI', 'forward'), ('NKG', 'ETRF14_TO_FI_EUREF-FIN', 2, 'NKG', 'FI_2020_INTRAPLATE_EUREF-FIN', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5050', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_FI', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ), ( 'NKG', '50501', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_FI_EUREF-FIN', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> ETRF96@1997.0 (FI) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_FI', -- operation auth+code 'ITRF2014 to ETRS89(FI))', -- name 'Time-dependent transformation from ITRF2014 to ETRS89', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '4936', -- target_crs: ETRS89(FI) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ), ( 'NKG', 'ITRF2014_TO_FI_EUREF-FIN', -- operation auth+code 'ITRF2014 to ETRS89 (EUREF-FIN)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89 (EUREF-FIN)', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '10688',-- target_crs: EUREF-FIN 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_FI', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_FI', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_FI', 3, 'NKG', 'PAR_2020_FI', 'forward'), ('NKG', 'ITRF2014_TO_FI', 4, 'NKG', 'FI_2020_INTRAPLATE', 'forward'), ('NKG', 'ITRF2014_TO_FI_EUREF-FIN', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_FI_EUREF-FIN', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_FI_EUREF-FIN', 3, 'NKG', 'PAR_2020_FI', 'forward'), ('NKG', 'ITRF2014_TO_FI_EUREF-FIN', 4, 'NKG', 'FI_2020_INTRAPLATE_EUREF-FIN', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5051', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_FI', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ), ( 'NKG', '50511', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_FI_EUREF-FIN', -- object auth+code 'EPSG', '1095', -- extent: Finland - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "supersession" VALUES ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_FI', 'concatenated_operation', 'NKG', 'ITRF2014_TO_FI', 'NKG', 0 ), ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_FI_EUREF-FIN', 'concatenated_operation', 'NKG', 'ITRF2014_TO_FI_EUREF-FIN', 'NKG', 0 ); ------------------------------------------------------- -- Transformation: NKG_ETRF14 -> ETRF89@1992.75 (LV) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'LV_2020_INTRAPLATE', -- object auth+code 'ETRF89@2000.0 to ETRF89@1992.75 (LKS-92) using nkgrf17vel', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-7.25 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7914', -- source_crs: ETRF89@2000.0 'EPSG','4948', -- target_crs: LKS-92 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5052', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'LV_2020_INTRAPLATE', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF14_TO_LV', -- operation auth+code 'NKG_ETRF14 to ETRS89 (LKS-92)', -- name 'Transformation from NKG_ETRF14@2000.0 to ETRF89@1992.75', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','4948', -- target_crs: LKS-92 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF14_TO_LV', 1, 'NKG', 'PAR_2020_LV', 'forward'), ('NKG', 'ETRF14_TO_LV', 2, 'NKG', 'LV_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5053', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_LV', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> ETRF89@1992.75 (LV) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_LV', -- operation auth+code 'ITRF2014 to ETRS89 (LKS-92)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89 (LKS-92)', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '4948', -- target_crs: LKS-92 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_LV', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_LV', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_LV', 3, 'NKG', 'PAR_2020_LV', 'forward'), ('NKG', 'ITRF2014_TO_LV', 4, 'NKG', 'LV_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5054', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_LV', -- object auth+code 'EPSG', '1139', -- extent: Latvia - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "supersession" VALUES ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_LV', 'concatenated_operation', 'NKG', 'ITRF2014_TO_LV', 'NKG', 0 ); ------------------------------------------------------- -- Transformation: NKG_ETRF14 -> ETRF2000@2003.75 (LT) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'LT_2020_INTRAPLATE', -- object auth+code 'ETRF2000@2000.0 to ETRF2000@2003.75 (LKS94) using nkgrf17vel', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=3.75 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7930', -- source_crs: ETRF2000@2000.0 'EPSG','4950', -- target_crs: LKS94 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5055', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'LT_2020_INTRAPLATE', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF14_TO_LT', -- operation auth+code 'NKG_ETRF14 to LKS94', -- name 'Transformation from NKG_ETRF14@2000.0 to ETRF2000@2003.75 (LKS94)', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','4950', -- target_crs: LKS94 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF14_TO_LT', 1, 'NKG', 'PAR_2020_LT', 'forward'), ('NKG', 'ETRF14_TO_LT', 2, 'NKG', 'LT_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5056', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_LT', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> ETRF2000@2003.75 (LT) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_LT', -- operation auth+code 'ITRF2014 to ETRS89(LT)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89(LT)', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '4950', -- target_crs: LKS94 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_LT', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_LT', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_LT', 3, 'NKG', 'PAR_2020_LT', 'forward'), ('NKG', 'ITRF2014_TO_LT', 4, 'NKG', 'LT_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5057', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_LT', -- object auth+code 'EPSG', '1145', -- extent: Lithuania - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "supersession" VALUES ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_LT', 'concatenated_operation', 'NKG', 'ITRF2014_TO_LT', 'NKG', 0 ); ------------------------------------------------------- -- Transformation: NKG_ETRF14 -> ETRF93@1995.0 (NO) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'NO_2020_INTRAPLATE', -- object auth+code 'ETRF93@2000.0 to ETRF93@1995.0 using nkgrf17vel', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-5 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7922', -- source_crs: ETRF93@2000.0 'EPSG','4936', -- target_crs: ETRS89 (NO) 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5058', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'NO_2020_INTRAPLATE', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF14_TO_NO', -- operation auth+code 'NKG_ETRF14 to ETRS89(NO)', -- name 'Transformation from NKG_ETRF14@2000.0 to ETRF93@1995.0', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','4936', -- target_crs: ETRS89 (NO) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF14_TO_NO', 1, 'NKG', 'PAR_2020_NO', 'forward'), ('NKG', 'ETRF14_TO_NO', 2, 'NKG', 'NO_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5059', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_NO', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> ETRF93@1995.0 (NO) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_NO', -- operation auth+code 'ITRF2014 to ETRS89(NO)', -- name 'Time-dependent transformation from ITRF2014 to ETRS89(NO)', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '4936', -- target_crs: ETRS89(NO) 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_NO', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_NO', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_NO', 3, 'NKG', 'NKG_ETRF14_ETRF93_2000', 'forward'), ('NKG', 'ITRF2014_TO_NO', 4, 'NKG', 'NO_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5060', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_NO', -- object auth+code 'EPSG', '1352', -- extent: Norway - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "supersession" VALUES ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_NO', 'concatenated_operation', 'NKG', 'ITRF2014_TO_NO', 'NKG', 0 ); ------------------------------------------------------- -- Transformation: NKG_ETRF14 -> ETRF97@1999.5 (SE) ------------------------------------------------------- INSERT INTO "other_transformation" ( auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, operation_version, deprecated ) VALUES( 'NKG', 'SE_2020_INTRAPLATE',-- object auth+code 'ETRF97@2000.0 to ETRF97@1999.5 using nkgrf17vel', -- name NULL, -- description 'PROJ', 'PROJString', -- method auth+cod '+proj=deformation +dt=-0.5 +grids=eur_nkg_nkgrf17vel.tif', 'EPSG','7928', -- source_crs: ETRF97@2000.0 'EPSG','4976', -- target_crs: SWEREF99 0.005, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "usage" VALUES ( 'NKG', '5061', -- usage auth+code 'other_transformation', -- object_table_name 'NKG', 'SE_2020_INTRAPLATE', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope ); INSERT INTO "concatenated_operation" VALUES( 'NKG', 'ETRF14_TO_SE', -- operation auth+code 'NKG_ETRF14 to SWEREF99', -- name 'Transformation from NKG_ETRF14@2000.0 to SWEREF99 (ETRF97@1999.5)', -- description 'NKG', 'ETRF14',-- source_crs: NKG_ETRF00 'EPSG','4976', -- target_crs: SWEREF99 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ETRF14_TO_SE', 1, 'NKG', 'PAR_2020_SE', 'forward'), ('NKG', 'ETRF14_TO_SE', 2, 'NKG', 'SE_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5062', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ETRF14_TO_SE', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); ------------------------------------------------------- -- Transformation: ITRF2014 -> ETRF97@1999.5 (SE) ------------------------------------------------------- INSERT INTO "concatenated_operation" VALUES ( 'NKG', 'ITRF2014_TO_SE', -- operation auth+code 'ITRF2014 to ETRS89(SE)', -- name 'Time-dependent transformation from ITRF2014 to SWEREF99', -- description 'EPSG', '7789', -- source_crs: ITRF2014 'EPSG', '4976', -- target_crs: SWEREF99 0.01, -- accuracy 'NKG 2020', -- operation_version 0 -- deprecated ); INSERT INTO "concatenated_operation_step" ( operation_auth_name, operation_code, step_number, step_auth_name, step_code, step_direction ) VALUES ('NKG', 'ITRF2014_TO_SE', 1, 'EPSG', '8366', 'forward'), -- ITRF2014 -> ETRF2014 ('NKG', 'ITRF2014_TO_SE', 2, 'NKG', 'NKG_ETRF14_TO_ETRF2014', 'reverse'), ('NKG', 'ITRF2014_TO_SE', 3, 'NKG', 'PAR_2020_SE', 'forward'), ('NKG', 'ITRF2014_TO_SE', 4, 'NKG', 'SE_2020_INTRAPLATE', 'forward') ; INSERT INTO "usage" VALUES ( 'NKG', '5063', -- usage auth+code 'concatenated_operation', -- object_table_name 'NKG', 'ITRF2014_TO_SE', -- object auth+code 'EPSG', '1225', -- extent: Sweden - onshore and offshore 'NKG', 'SCOPE_GENERIC' -- scope auth+code ); INSERT INTO "supersession" VALUES ( 'concatenated_operation', 'NKG', 'ITRF2000_TO_SE', 'concatenated_operation', 'NKG', 'ITRF2014_TO_SE', 'NKG', 0 ); proj-9.6.0/data/sql/nkg_post_customizations.sql000664 001754 001755 00000000553 14764566077 021654 0ustar00e012349e012349000000 000000 -- Append NKG to authority references UPDATE authority_to_authority_preference SET allowed_authorities = allowed_authorities || ',NKG' WHERE source_auth_name = 'EPSG' AND target_auth_name = 'EPSG'; INSERT INTO "authority_to_authority_preference" (source_auth_name,target_auth_name, allowed_authorities) VALUES ('NKG', 'EPSG', 'NKG,PROJ,EPSG'); proj-9.6.0/data/sql/nrcan.sql000664 001754 001755 00000711340 14764566077 015761 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_nrcan.py. DO NOT EDIT ! INSERT INTO "grid_transformation" VALUES('NRCAN','HT2_1997_NAD83CSRSV7','NAD83(CSRS)v7 to CGVD28 height',NULL,'EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8254','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_1997.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000',0); INSERT INTO "usage" VALUES('NRCAN','USAGE_HT2_1997_NAD83CSRSV7','grid_transformation','NRCAN','HT2_1997_NAD83CSRSV7','EPSG','1289','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('NRCAN','HT2_2002_NAD83CSRSV7','NAD83(CSRS)v7 to CGVD28 height',NULL,'EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8254','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_2002v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2002',0); INSERT INTO "usage" VALUES('NRCAN','USAGE_HT2_2002_NAD83CSRSV7','grid_transformation','NRCAN','HT2_2002_NAD83CSRSV7','EPSG','1289','EPSG','1133'); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM1_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 1", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 1", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -53, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 1 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland - onshore east of 54\u00b030''W.", "bbox": {"south_latitude": 46.56, "west_longitude": -54.5, "north_latitude": 49.89, "east_longitude": -52.54}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM2_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 2", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 2", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -56, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 2 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland and Labrador between 57\u00b030''W and 54\u00b030''W.", "bbox": {"south_latitude": 46.81, "west_longitude": -57.5, "north_latitude": 54.71, "east_longitude": -54.49}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM3_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 3", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 3", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -58.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 3 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland west of 57\u00b030''W.", "bbox": {"south_latitude": 47.5, "west_longitude": -59.48, "north_latitude": 50.54, "east_longitude": -57.5}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM4_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 4", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 4", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -61.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 4 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador between 63\u00b0W and 60\u00b0W.", "bbox": {"south_latitude": 52, "west_longitude": -63, "north_latitude": 58.92, "east_longitude": -60}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM5_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 5", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 5", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -64.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 5 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - 66\u00b0W to 63\u00b0W.", "bbox": {"south_latitude": 51.58, "west_longitude": -66, "north_latitude": 60.52, "east_longitude": -63}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM6_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 6", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 6", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -67.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 6 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - west of 66\u00b0W.", "bbox": {"south_latitude": 52.05, "west_longitude": -67.81, "north_latitude": 55.34, "east_longitude": -66}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM7_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 7", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 7", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -70.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 7 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Quebec - between 72\u00b0W and 69\u00b0W.", "bbox": {"south_latitude": 45.01, "west_longitude": -72, "north_latitude": 61.8, "east_longitude": -69}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM8_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 8", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 8", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -73.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 8 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - east of 75\u00b0W.", "bbox": {"south_latitude": 44.98, "west_longitude": -75, "north_latitude": 45.65, "east_longitude": -74.35}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM9_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 9", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 9", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -76.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 9 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 78\u00b0W and 75\u00b0W.", "bbox": {"south_latitude": 43.63, "west_longitude": -78, "north_latitude": 46.25, "east_longitude": -75}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM10_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 10", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 10", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -79.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 10 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 81\u00b0W and 78\u00b0W: south of 46\u00b0N in area to west of 80\u00b015''W, south of 47\u00b0N in area between 80\u00b015''W and 79\u00b030''W, entire province between 79\u00b030''W and 78\u00b0W.", "bbox": {"south_latitude": 42.26, "west_longitude": -81, "north_latitude": 47.33, "east_longitude": -77.99}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM11_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 11", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 11", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -82.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 11 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - south of 46\u00b0N and west of 81\u00b0W.", "bbox": {"south_latitude": 41.67, "west_longitude": -83.6, "north_latitude": 46, "east_longitude": -81}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM12_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 12", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 12", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -81, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 12 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 82\u00b030''W and 79\u00b030''W: north of 46\u00b0N in area between 82\u00b030''W and 80\u00b015''W, north of 47\u00b0N in area between 80\u00b015''W and 79\u00b030''W.", "bbox": {"south_latitude": 46, "west_longitude": -82.5, "north_latitude": 55.21, "east_longitude": -79.5}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM13_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 13", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 13", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -84, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 13 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 85\u00b030''W and 82\u00b030''W and north of 46\u00b0N.", "bbox": {"south_latitude": 46, "west_longitude": -85.5, "north_latitude": 55.59, "east_longitude": -82.5}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM14_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 14", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 14", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -87, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 14 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 88\u00b030''W and 85\u00b030''W.", "bbox": {"south_latitude": 47.17, "west_longitude": -88.5, "north_latitude": 56.7, "east_longitude": -85.5}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM15_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 15", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 15", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -90, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 15 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 91\u00b030''W and 88\u00b030''W.", "bbox": {"south_latitude": 47.97, "west_longitude": -91.5, "north_latitude": 56.9, "east_longitude": -88.5}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM16_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 16", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 16", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -93, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 16 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 94\u00b030''W and 91\u00b030''W.", "bbox": {"south_latitude": 48.06, "west_longitude": -94.5, "north_latitude": 55.2, "east_longitude": -91.5}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM17_HT2_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 17", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 17", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -96, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_1997", "id": {"authority": "NRCAN", "code": "HT2_1997_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 17 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - west of 94\u00b030''W.", "bbox": {"south_latitude": 48.69, "west_longitude": -95.16, "north_latitude": 53.24, "east_longitude": -94.5}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM1_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 1", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 1", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -53, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 1 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland - onshore east of 54\u00b030''W.", "bbox": {"south_latitude": 46.56, "west_longitude": -54.5, "north_latitude": 49.89, "east_longitude": -52.54}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM2_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 2", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 2", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -56, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 2 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland and Labrador between 57\u00b030''W and 54\u00b030''W.", "bbox": {"south_latitude": 46.81, "west_longitude": -57.5, "north_latitude": 54.71, "east_longitude": -54.49}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM3_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 3", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 3", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -58.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 3 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland west of 57\u00b030''W.", "bbox": {"south_latitude": 47.5, "west_longitude": -59.48, "north_latitude": 50.54, "east_longitude": -57.5}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM4_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 4", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 4", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -61.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 4 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador between 63\u00b0W and 60\u00b0W.", "bbox": {"south_latitude": 52, "west_longitude": -63, "north_latitude": 58.92, "east_longitude": -60}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM5_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 5", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 5", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -64.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 5 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - 66\u00b0W to 63\u00b0W.", "bbox": {"south_latitude": 51.58, "west_longitude": -66, "north_latitude": 60.52, "east_longitude": -63}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM6_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 6", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 6", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -67.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 6 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - west of 66\u00b0W.", "bbox": {"south_latitude": 52.05, "west_longitude": -67.81, "north_latitude": 55.34, "east_longitude": -66}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM7_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 7", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 7", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -70.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 7 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Quebec - between 72\u00b0W and 69\u00b0W.", "bbox": {"south_latitude": 45.01, "west_longitude": -72, "north_latitude": 61.8, "east_longitude": -69}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM8_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 8", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 8", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -73.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 8 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - east of 75\u00b0W.", "bbox": {"south_latitude": 44.98, "west_longitude": -75, "north_latitude": 45.65, "east_longitude": -74.35}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM9_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 9", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 9", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -76.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 9 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 78\u00b0W and 75\u00b0W.", "bbox": {"south_latitude": 43.63, "west_longitude": -78, "north_latitude": 46.25, "east_longitude": -75}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM10_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 10", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 10", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -79.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 10 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 81\u00b0W and 78\u00b0W: south of 46\u00b0N in area to west of 80\u00b015''W, south of 47\u00b0N in area between 80\u00b015''W and 79\u00b030''W, entire province between 79\u00b030''W and 78\u00b0W.", "bbox": {"south_latitude": 42.26, "west_longitude": -81, "north_latitude": 47.33, "east_longitude": -77.99}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM11_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 11", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 11", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -82.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 11 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - south of 46\u00b0N and west of 81\u00b0W.", "bbox": {"south_latitude": 41.67, "west_longitude": -83.6, "north_latitude": 46, "east_longitude": -81}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM12_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 12", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 12", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -81, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 12 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 82\u00b030''W and 79\u00b030''W: north of 46\u00b0N in area between 82\u00b030''W and 80\u00b015''W, north of 47\u00b0N in area between 80\u00b015''W and 79\u00b030''W.", "bbox": {"south_latitude": 46, "west_longitude": -82.5, "north_latitude": 55.21, "east_longitude": -79.5}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM13_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 13", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 13", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -84, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 13 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 85\u00b030''W and 82\u00b030''W and north of 46\u00b0N.", "bbox": {"south_latitude": 46, "west_longitude": -85.5, "north_latitude": 55.59, "east_longitude": -82.5}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM14_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 14", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 14", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -87, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 14 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 88\u00b030''W and 85\u00b030''W.", "bbox": {"south_latitude": 47.17, "west_longitude": -88.5, "north_latitude": 56.7, "east_longitude": -85.5}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM15_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 15", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 15", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -90, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 15 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 91\u00b030''W and 88\u00b030''W.", "bbox": {"south_latitude": 47.97, "west_longitude": -91.5, "north_latitude": 56.9, "east_longitude": -88.5}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM16_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 16", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 16", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -93, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 16 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 94\u00b030''W and 91\u00b030''W.", "bbox": {"south_latitude": 48.06, "west_longitude": -94.5, "north_latitude": 55.2, "east_longitude": -91.5}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM17_HT2_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 17", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 17", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -96, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2002", "id": {"authority": "NRCAN", "code": "HT2_2002_NAD83CSRSV7"}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 17 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - west of 94\u00b030''W.", "bbox": {"south_latitude": 48.69, "west_longitude": -95.16, "north_latitude": 53.24, "east_longitude": -94.5}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM1_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 1", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 1", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -53, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 1 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland - onshore east of 54\u00b030''W.", "bbox": {"south_latitude": 46.56, "west_longitude": -54.5, "north_latitude": 49.89, "east_longitude": -52.54}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM2_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 2", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 2", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -56, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 2 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland and Labrador between 57\u00b030''W and 54\u00b030''W.", "bbox": {"south_latitude": 46.81, "west_longitude": -57.5, "north_latitude": 54.71, "east_longitude": -54.49}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM3_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 3", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 3", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -58.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 3 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland west of 57\u00b030''W.", "bbox": {"south_latitude": 47.5, "west_longitude": -59.48, "north_latitude": 50.54, "east_longitude": -57.5}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM4_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 4", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 4", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -61.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 4 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador between 63\u00b0W and 60\u00b0W.", "bbox": {"south_latitude": 52, "west_longitude": -63, "north_latitude": 58.92, "east_longitude": -60}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM5_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 5", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 5", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -64.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 5 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - 66\u00b0W to 63\u00b0W.", "bbox": {"south_latitude": 51.58, "west_longitude": -66, "north_latitude": 60.52, "east_longitude": -63}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM6_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 6", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 6", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -67.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 6 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - west of 66\u00b0W.", "bbox": {"south_latitude": 52.05, "west_longitude": -67.81, "north_latitude": 55.34, "east_longitude": -66}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM7_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 7", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 7", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -70.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 7 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Quebec - between 72\u00b0W and 69\u00b0W.", "bbox": {"south_latitude": 45.01, "west_longitude": -72, "north_latitude": 61.8, "east_longitude": -69}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM8_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 8", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 8", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -73.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 8 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - east of 75\u00b0W.", "bbox": {"south_latitude": 44.98, "west_longitude": -75, "north_latitude": 45.65, "east_longitude": -74.35}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM9_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 9", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 9", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -76.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 9 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 78\u00b0W and 75\u00b0W.", "bbox": {"south_latitude": 43.63, "west_longitude": -78, "north_latitude": 46.25, "east_longitude": -75}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM10_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 10", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 10", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -79.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 10 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 81\u00b0W and 78\u00b0W: south of 46\u00b0N in area to west of 80\u00b015''W, south of 47\u00b0N in area between 80\u00b015''W and 79\u00b030''W, entire province between 79\u00b030''W and 78\u00b0W.", "bbox": {"south_latitude": 42.26, "west_longitude": -81, "north_latitude": 47.33, "east_longitude": -77.99}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM11_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 11", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 11", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -82.5, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 11 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - south of 46\u00b0N and west of 81\u00b0W.", "bbox": {"south_latitude": 41.67, "west_longitude": -83.6, "north_latitude": 46, "east_longitude": -81}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM12_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 12", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 12", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -81, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 12 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 82\u00b030''W and 79\u00b030''W: north of 46\u00b0N in area between 82\u00b030''W and 80\u00b015''W, north of 47\u00b0N in area between 80\u00b015''W and 79\u00b030''W.", "bbox": {"south_latitude": 46, "west_longitude": -82.5, "north_latitude": 55.21, "east_longitude": -79.5}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM13_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 13", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 13", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -84, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 13 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 85\u00b030''W and 82\u00b030''W and north of 46\u00b0N.", "bbox": {"south_latitude": 46, "west_longitude": -85.5, "north_latitude": 55.59, "east_longitude": -82.5}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM14_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 14", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 14", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -87, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 14 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 88\u00b030''W and 85\u00b030''W.", "bbox": {"south_latitude": 47.17, "west_longitude": -88.5, "north_latitude": 56.7, "east_longitude": -85.5}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM15_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 15", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 15", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -90, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 15 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 91\u00b030''W and 88\u00b030''W.", "bbox": {"south_latitude": 47.97, "west_longitude": -91.5, "north_latitude": 56.9, "east_longitude": -88.5}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM16_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 16", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 16", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -93, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 16 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 94\u00b030''W and 91\u00b030''W.", "bbox": {"south_latitude": 48.06, "west_longitude": -94.5, "north_latitude": 55.2, "east_longitude": -91.5}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM17_HT2_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone 17", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "MTM zone 17", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -96, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 304800, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD28 height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "geoid_model": {"name": "HT2_2010", "id": {"authority": "EPSG", "code": 9987}}, "id": {"authority": "EPSG", "code": 5713}}], "name": "NAD83(CSRS)v7 / MTM zone 17 + CGVD28 height", "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - west of 94\u00b030''W.", "bbox": {"south_latitude": 48.69, "west_longitude": -95.16, "north_latitude": 53.24, "east_longitude": -94.5}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM7_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 7", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 7N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -141, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 7 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada west of 138\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Yukon.", "bbox": {"south_latitude": 52.05, "west_longitude": -141.01, "north_latitude": 72.53, "east_longitude": -138}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM8_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 8", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 8N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -135, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 8 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138\u00b0W and 132\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM9_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 9", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 9N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -129, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 9 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138\u00b0W and 132\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM10_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 10", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 10N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -123, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 10 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 126\u00b0W and 120\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.13, "west_longitude": -126, "north_latitude": 81.8, "east_longitude": -120}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM11_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 11", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 11N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -117, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 11 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 120\u00b0W and 114\u00b0W onshore and offshore - Alberta, British Columbia, Northwest Territories, Nunavut.", "bbox": {"south_latitude": 48.99, "west_longitude": -120, "north_latitude": 83.5, "east_longitude": -114}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM12_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 12", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 12N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -111, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 12 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 114\u00b0W and 108\u00b0W onshore and offshore - Alberta, Northwest Territories, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -114, "north_latitude": 84, "east_longitude": -108}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM13_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 13", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 13N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -105, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 13 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 108\u00b0W and 102\u00b0W onshore and offshore - Northwest Territories, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -108, "north_latitude": 84, "east_longitude": -102}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM14_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 14", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 14N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -99, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 14 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 102\u00b0W and 96\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -102, "north_latitude": 84, "east_longitude": -96}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM15_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 15", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 15N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -93, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 15 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 96\u00b0W and 90\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Ontario.", "bbox": {"south_latitude": 48.03, "west_longitude": -96, "north_latitude": 84, "east_longitude": -90}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM16_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 16", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 16N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -87, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 16 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 90\u00b0W and 84\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Ontario.", "bbox": {"south_latitude": 46.11, "west_longitude": -90, "north_latitude": 84, "east_longitude": -84}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM17_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 17", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 17N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -81, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 17 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 84\u00b0W and 78\u00b0W, onshore and offshore south of 84\u00b0N - Nunavut, Ontario and Quebec.", "bbox": {"south_latitude": 41.67, "west_longitude": -84, "north_latitude": 84, "east_longitude": -78}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM18_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 18", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 18N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -75, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 18 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 78\u00b0W and 72\u00b0W, onshore and offshore south of 84\u00b0N - Nunavut, Ontario and Quebec.", "bbox": {"south_latitude": 43.63, "west_longitude": -78, "north_latitude": 84, "east_longitude": -72}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM19_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 19", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 19N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -69, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 19 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 72\u00b0W and 66\u00b0W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Quebec.", "bbox": {"south_latitude": 40.8, "west_longitude": -72, "north_latitude": 84, "east_longitude": -66}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM20_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 20", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 20N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -63, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 20 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 66\u00b0W and 60\u00b0W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Prince Edward Island, Quebec.", "bbox": {"south_latitude": 40.04, "west_longitude": -66, "north_latitude": 84, "east_longitude": -60}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM21_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 21", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 21N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -57, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 21 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 60\u00b0W and 54\u00b0W - Newfoundland and Labrador; Nunavut; Quebec.", "bbox": {"south_latitude": 38.56, "west_longitude": -60, "north_latitude": 84, "east_longitude": -54}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM22_CGVD2013_1997', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 22", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 22N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -51, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20035}}], "name": "NAD83(CSRS)v7 / UTM zone 22 + CGVD2013a(1997) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 54\u00b0W and 48\u00b0W onshore and offshore - Newfoundland and Labrador.", "bbox": {"south_latitude": 39.5, "west_longitude": -54, "north_latitude": 57.65, "east_longitude": -47.99}}', 1997.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM7_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 7", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 7N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -141, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 7 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada west of 138\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Yukon.", "bbox": {"south_latitude": 52.05, "west_longitude": -141.01, "north_latitude": 72.53, "east_longitude": -138}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM8_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 8", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 8N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -135, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 8 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138\u00b0W and 132\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM9_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 9", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 9N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -129, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 9 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138\u00b0W and 132\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM10_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 10", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 10N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -123, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 10 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 126\u00b0W and 120\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.13, "west_longitude": -126, "north_latitude": 81.8, "east_longitude": -120}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM11_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 11", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 11N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -117, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 11 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 120\u00b0W and 114\u00b0W onshore and offshore - Alberta, British Columbia, Northwest Territories, Nunavut.", "bbox": {"south_latitude": 48.99, "west_longitude": -120, "north_latitude": 83.5, "east_longitude": -114}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM12_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 12", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 12N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -111, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 12 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 114\u00b0W and 108\u00b0W onshore and offshore - Alberta, Northwest Territories, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -114, "north_latitude": 84, "east_longitude": -108}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM13_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 13", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 13N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -105, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 13 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 108\u00b0W and 102\u00b0W onshore and offshore - Northwest Territories, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -108, "north_latitude": 84, "east_longitude": -102}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM14_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 14", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 14N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -99, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 14 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 102\u00b0W and 96\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -102, "north_latitude": 84, "east_longitude": -96}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM15_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 15", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 15N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -93, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 15 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 96\u00b0W and 90\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Ontario.", "bbox": {"south_latitude": 48.03, "west_longitude": -96, "north_latitude": 84, "east_longitude": -90}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM16_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 16", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 16N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -87, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 16 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 90\u00b0W and 84\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Ontario.", "bbox": {"south_latitude": 46.11, "west_longitude": -90, "north_latitude": 84, "east_longitude": -84}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM17_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 17", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 17N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -81, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 17 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 84\u00b0W and 78\u00b0W, onshore and offshore south of 84\u00b0N - Nunavut, Ontario and Quebec.", "bbox": {"south_latitude": 41.67, "west_longitude": -84, "north_latitude": 84, "east_longitude": -78}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM18_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 18", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 18N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -75, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 18 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 78\u00b0W and 72\u00b0W, onshore and offshore south of 84\u00b0N - Nunavut, Ontario and Quebec.", "bbox": {"south_latitude": 43.63, "west_longitude": -78, "north_latitude": 84, "east_longitude": -72}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM19_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 19", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 19N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -69, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 19 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 72\u00b0W and 66\u00b0W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Quebec.", "bbox": {"south_latitude": 40.8, "west_longitude": -72, "north_latitude": 84, "east_longitude": -66}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM20_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 20", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 20N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -63, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 20 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 66\u00b0W and 60\u00b0W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Prince Edward Island, Quebec.", "bbox": {"south_latitude": 40.04, "west_longitude": -66, "north_latitude": 84, "east_longitude": -60}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM21_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 21", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 21N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -57, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 21 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 60\u00b0W and 54\u00b0W - Newfoundland and Labrador; Nunavut; Quebec.", "bbox": {"south_latitude": 38.56, "west_longitude": -60, "north_latitude": 84, "east_longitude": -54}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM22_CGVD2013_2002', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 22", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 22N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -51, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 20034}}], "name": "NAD83(CSRS)v7 / UTM zone 22 + CGVD2013a(2002) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 54\u00b0W and 48\u00b0W onshore and offshore - Newfoundland and Labrador.", "bbox": {"south_latitude": 39.5, "west_longitude": -54, "north_latitude": 57.65, "east_longitude": -47.99}}', 2002.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM7_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 7", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 7N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -141, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 7 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada west of 138\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Yukon.", "bbox": {"south_latitude": 52.05, "west_longitude": -141.01, "north_latitude": 72.53, "east_longitude": -138}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM8_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 8", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 8N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -135, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 8 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138\u00b0W and 132\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM9_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 9", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 9N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -129, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 9 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138\u00b0W and 132\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM10_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 10", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 10N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -123, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 10 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 126\u00b0W and 120\u00b0W, onshore and offshore south of 84\u00b0N - British Columbia, Northwest Territories, Yukon.", "bbox": {"south_latitude": 48.13, "west_longitude": -126, "north_latitude": 81.8, "east_longitude": -120}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM11_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 11", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 11N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -117, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 11 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 120\u00b0W and 114\u00b0W onshore and offshore - Alberta, British Columbia, Northwest Territories, Nunavut.", "bbox": {"south_latitude": 48.99, "west_longitude": -120, "north_latitude": 83.5, "east_longitude": -114}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM12_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 12", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 12N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -111, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 12 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 114\u00b0W and 108\u00b0W onshore and offshore - Alberta, Northwest Territories, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -114, "north_latitude": 84, "east_longitude": -108}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM13_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 13", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 13N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -105, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 13 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 108\u00b0W and 102\u00b0W onshore and offshore - Northwest Territories, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -108, "north_latitude": 84, "east_longitude": -102}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM14_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 14", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 14N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -99, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 14 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 102\u00b0W and 96\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Saskatchewan.", "bbox": {"south_latitude": 48.99, "west_longitude": -102, "north_latitude": 84, "east_longitude": -96}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM15_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 15", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 15N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -93, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 15 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 96\u00b0W and 90\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Ontario.", "bbox": {"south_latitude": 48.03, "west_longitude": -96, "north_latitude": 84, "east_longitude": -90}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM16_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 16", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 16N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -87, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 16 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 90\u00b0W and 84\u00b0W, onshore and offshore south of 84\u00b0N - Manitoba, Nunavut, Ontario.", "bbox": {"south_latitude": 46.11, "west_longitude": -90, "north_latitude": 84, "east_longitude": -84}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM17_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 17", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 17N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -81, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 17 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 84\u00b0W and 78\u00b0W, onshore and offshore south of 84\u00b0N - Nunavut, Ontario and Quebec.", "bbox": {"south_latitude": 41.67, "west_longitude": -84, "north_latitude": 84, "east_longitude": -78}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM18_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 18", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 18N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -75, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 18 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 78\u00b0W and 72\u00b0W, onshore and offshore south of 84\u00b0N - Nunavut, Ontario and Quebec.", "bbox": {"south_latitude": 43.63, "west_longitude": -78, "north_latitude": 84, "east_longitude": -72}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM19_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 19", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 19N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -69, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 19 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 72\u00b0W and 66\u00b0W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Quebec.", "bbox": {"south_latitude": 40.8, "west_longitude": -72, "north_latitude": 84, "east_longitude": -66}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM20_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 20", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 20N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -63, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 20 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 66\u00b0W and 60\u00b0W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Prince Edward Island, Quebec.", "bbox": {"south_latitude": 40.04, "west_longitude": -66, "north_latitude": 84, "east_longitude": -60}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM21_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 21", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 21N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -57, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 21 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 60\u00b0W and 54\u00b0W - Newfoundland and Labrador; Nunavut; Quebec.", "bbox": {"south_latitude": 38.56, "west_longitude": -60, "north_latitude": 84, "east_longitude": -54}}', 2010.0, 0); INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM22_CGVD2013_2010', NULL, NULL, NULL, '{"type": "CompoundCRS", "components": [{"type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone 22", "base_crs": {"name": "NAD83(CSRS)v7", "datum": {"type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": {"name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101}}, "coordinate_system": {"subtype": "ellipsoidal", "axis": [{"name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree"}, {"name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree"}]}}, "conversion": {"name": "UTM zone 22N", "method": {"name": "Transverse Mercator", "id": {"authority": "EPSG", "code": 9807}}, "parameters": [{"name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": {"authority": "EPSG", "code": 8801}}, {"name": "Longitude of natural origin", "value": -51, "unit": "degree", "id": {"authority": "EPSG", "code": 8802}}, {"name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": {"authority": "EPSG", "code": 8805}}, {"name": "False easting", "value": 500000, "unit": "metre", "id": {"authority": "EPSG", "code": 8806}}, {"name": "False northing", "value": 0, "unit": "metre", "id": {"authority": "EPSG", "code": 8807}}]}, "coordinate_system": {"subtype": "Cartesian", "axis": [{"name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre"}, {"name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre"}]}}, {"type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": {"type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010"}, "coordinate_system": {"subtype": "vertical", "axis": [{"name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre"}]}, "id": {"authority": "EPSG", "code": 9245}}], "name": "NAD83(CSRS)v7 / UTM zone 22 + CGVD2013a(2010) height", "scope": "Engineering survey, topographic mapping.", "area": "Canada between 54\u00b0W and 48\u00b0W onshore and offshore - Newfoundland and Labrador.", "bbox": {"south_latitude": 39.5, "west_longitude": -54, "north_latitude": 57.65, "east_longitude": -47.99}}', 2010.0, 0); proj-9.6.0/data/sql/other_transformation.sql000664 001754 001755 00001261153 14764566077 021132 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_MALIN_HEAD_HEIGHT','BI height to Malin Head height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5731',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_MALIN_HEAD_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_MALIN_HEAD_HEIGHT','EPSG','1305','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_BELFAST_HEIGHT','BI height to Belfast height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5732',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_BELFAST_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_BELFAST_HEIGHT','EPSG','2530','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_ODN_HEIGHT','BI height to ODN height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5701',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_ODN_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_ODN_HEIGHT','EPSG','2792','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_ODN_OFFSHORE_HEIGHT','BI height to ODN (Offshore) height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','7707',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_ODN_OFFSHORE_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_ODN_OFFSHORE_HEIGHT','EPSG','4391','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_ODN_ORKNEY_HEIGHT','BI height to ODN Orkney height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5740',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_ODN_ORKNEY_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_ODN_ORKNEY_HEIGHT','EPSG','2793','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_LERWICK_HEIGHT','BI height to Lerwick height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5742',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_LERWICK_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_LERWICK_HEIGHT','EPSG','2795','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_STORNOWAY_HEIGHT','BI height to Stornoway height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5746',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_STORNOWAY_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_STORNOWAY_HEIGHT','EPSG','2799','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_DOUGLAS_HEIGHT','BI height to Douglas height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5750',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_DOUGLAS_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_DOUGLAS_HEIGHT','EPSG','2803','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','BI_HEIGHT_TO_ST_MARYS_HEIGHT','BI height to St. Marys height','Accuracy 0.4 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','9451','EPSG','5749',0.4,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','BI_HEIGHT_TO_ST_MARYS_HEIGHT_USAGE','other_transformation','PROJ','BI_HEIGHT_TO_ST_MARYS_HEIGHT','EPSG','2802','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2000_HEIGHT','DVR90 height to DVR90(2000) height','Accuracy 0.05 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','5799','EPSG','10482',0.05,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2000_HEIGHT_USAGE','other_transformation','PROJ','DVR90_HEIGHT_TO_DVR90_2000_HEIGHT','EPSG','3237','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2002_HEIGHT','DVR90 height to DVR90(2002) height','Accuracy 0.05 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','5799','EPSG','10483',0.05,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2002_HEIGHT_USAGE','other_transformation','PROJ','DVR90_HEIGHT_TO_DVR90_2002_HEIGHT','EPSG','3237','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2013_HEIGHT','DVR90 height to DVR90(2013) height','Accuracy 0.05 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','5799','EPSG','10484',0.05,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2013_HEIGHT_USAGE','other_transformation','PROJ','DVR90_HEIGHT_TO_DVR90_2013_HEIGHT','EPSG','3237','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2023_HEIGHT','DVR90 height to DVR90(2023) height','Accuracy 0.05 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','5799','EPSG','10485',0.05,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DVR90_HEIGHT_TO_DVR90_2023_HEIGHT_USAGE','other_transformation','PROJ','DVR90_HEIGHT_TO_DVR90_2023_HEIGHT','EPSG','3237','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DKMSL_DEPTH_TO_DKMSL_2022_DEPTH','DKMSL depth to DKMSL(2022) depth','Accuracy 0.5 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','10551','EPSG','10547',0.5,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DKMSL_DEPTH_TO_DKMSL_2022_DEPTH_USAGE','other_transformation','PROJ','DKMSL_DEPTH_TO_DKMSL_2022_DEPTH','EPSG','4756','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DKMSL_DEPTH_TO_DKMSL_2023_DEPTH','DKMSL depth to DKMSL(2023) depth','Accuracy 0.5 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','10551','EPSG','10549',0.5,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DKMSL_DEPTH_TO_DKMSL_2023_DEPTH_USAGE','other_transformation','PROJ','DKMSL_DEPTH_TO_DKMSL_2023_DEPTH','EPSG','4756','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2022_DEPTH','DKLAT depth to DKLAT(2022) depth','Accuracy 0.5 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','10552','EPSG','10548',0.5,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2022_DEPTH_USAGE','other_transformation','PROJ','DKLAT_DEPTH_TO_DKLAT_2022_DEPTH','EPSG','4756','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2023_DEPTH','DKLAT depth to DKLAT(2023) depth','Accuracy 0.5 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','10552','EPSG','10550',0.5,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0); INSERT INTO "usage" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2023_DEPTH_USAGE','other_transformation','PROJ','DKLAT_DEPTH_TO_DKLAT_2023_DEPTH','EPSG','4756','EPSG','1024'); INSERT INTO "other_transformation" VALUES('EPSG','1035','Astra Minas to Campo Inchauspe / Argentina 2 (1)','Scale provided by information source as 0 ppm, corresponding to a scale factor for source CRS equal to 1 as used in this record.','EPSG','9621','Similarity transformation','EPSG','5800','EPSG','22192',5.0,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',2610200.48,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',4905282.73,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',271.053,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IHS-Arg ComRiv',0); INSERT INTO "usage" VALUES('EPSG','14423','other_transformation','EPSG','1035','EPSG','4614','EPSG','1136'); INSERT INTO "other_transformation" VALUES('EPSG','1072','Palestine 1923 / Israeli CS to Israel 1993 / Israeli TM (1)','Accuracy: 1m to north and 10m to south of east-west line through Beersheba (31°15''N). For more accurate transformation contact Survey of Israel.','EPSG','9656','Cartesian Grid Offsets','EPSG','28193','EPSG','2039',3.0,'EPSG','8728','Easting offset',50000.0,'EPSG','9001','EPSG','8729','Northing offset',-500000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SoI-Isr',0); INSERT INTO "usage" VALUES('EPSG','14561','other_transformation','EPSG','1072','EPSG','2603','EPSG','1153'); INSERT INTO "other_transformation" VALUES('EPSG','1258','Bogota 1975 (Bogota) to Bogota 1975 (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4802','EPSG','4218',NULL,'EPSG','8602','Longitude offset',-74.04513,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col',1); INSERT INTO "usage" VALUES('EPSG','8179','other_transformation','EPSG','1258','EPSG','1070','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1259','Lisbon (Lisbon) to Lisbon (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4803','EPSG','4207',NULL,'EPSG','8602','Longitude offset',-9.0754862,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGC-Prt',1); INSERT INTO "usage" VALUES('EPSG','8180','other_transformation','EPSG','1259','EPSG','1294','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1260','Makassar (Jakarta) to Makassar (1)','','EPSG','9601','Longitude rotation','EPSG','4804','EPSG','4257',0.0,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Sulawesi',0); INSERT INTO "usage" VALUES('EPSG','8181','other_transformation','EPSG','1260','EPSG','1316','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1261','MGI (Ferro) to MGI (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4805','EPSG','4312',NULL,'EPSG','8602','Longitude offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut balk',1); INSERT INTO "usage" VALUES('EPSG','8182','other_transformation','EPSG','1261','EPSG','1166','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1262','Monte Mario (Rome) to Monte Mario (1)','','EPSG','9601','Longitude rotation','EPSG','4806','EPSG','4265',0.0,'EPSG','8602','Longitude offset',12.27084,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ita',0); INSERT INTO "usage" VALUES('EPSG','8183','other_transformation','EPSG','1262','EPSG','3343','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1263','Padang (Jakarta) to Padang (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4808','EPSG','4280',NULL,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Sumatra',1); INSERT INTO "usage" VALUES('EPSG','8184','other_transformation','EPSG','1263','EPSG','1355','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1264','BD50 (Brussels) to BD50 (1)','','EPSG','9601','Longitude rotation','EPSG','4809','EPSG','4215',0.0,'EPSG','8602','Longitude offset',4.220471,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Bel',0); INSERT INTO "usage" VALUES('EPSG','8185','other_transformation','EPSG','1264','EPSG','1347','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1265','Tananarive (Paris) to Tananarive (1)','','EPSG','9601','Longitude rotation','EPSG','4810','EPSG','4297',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Mdg',0); INSERT INTO "usage" VALUES('EPSG','8186','other_transformation','EPSG','1265','EPSG','3273','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1266','Voirol 1875 (Paris) to Voirol 1875 (1)','','EPSG','9601','Longitude rotation','EPSG','4811','EPSG','4304',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Dza',0); INSERT INTO "usage" VALUES('EPSG','8187','other_transformation','EPSG','1266','EPSG','1365','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1268','Batavia (Jakarta) to Batavia (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4813','EPSG','4211',NULL,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Java',1); INSERT INTO "usage" VALUES('EPSG','8189','other_transformation','EPSG','1268','EPSG','1285','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1269','RT38 (Stockholm) to RT38 (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4814','EPSG','4308',NULL,'EPSG','8602','Longitude offset',18.03298,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Swe',1); INSERT INTO "usage" VALUES('EPSG','8190','other_transformation','EPSG','1269','EPSG','1225','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1270','Greek (Athens) to Greek (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4815','EPSG','4120',NULL,'EPSG','8602','Longitude offset',23.4258815,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NTU-Grc',1); INSERT INTO "usage" VALUES('EPSG','8191','other_transformation','EPSG','1270','EPSG','1106','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1335','Tokyo to WGS 84 (6)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','4301','EPSG','4326',2.0,'EPSG','8601','Latitude offset',7.92,'EPSG','9108','EPSG','8602','Longitude offset',-13.88,'EPSG','9104','EPSG','8604','Geoid height',26.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 452141',1); INSERT INTO "usage" VALUES('EPSG','8256','other_transformation','EPSG','1335','EPSG','2425','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1336','Tokyo + JSLD to WGS 84 (7)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',7.94,'EPSG','9104','EPSG','8602','Longitude offset',-13.97,'EPSG','9104','EPSG','8604','Geoid height',26.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 452142',1); INSERT INTO "usage" VALUES('EPSG','8257','other_transformation','EPSG','1336','EPSG','2426','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1337','Tokyo + JSLD to WGS 84 (8)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.1,'EPSG','9104','EPSG','8602','Longitude offset',-13.81,'EPSG','9104','EPSG','8604','Geoid height',27.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 444141',1); INSERT INTO "usage" VALUES('EPSG','8258','other_transformation','EPSG','1337','EPSG','2427','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1338','Tokyo + JSLD to WGS 84 (9)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.15,'EPSG','9104','EPSG','8602','Longitude offset',-13.95,'EPSG','9104','EPSG','8604','Geoid height',28.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 444142',1); INSERT INTO "usage" VALUES('EPSG','8259','other_transformation','EPSG','1338','EPSG','2428','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1339','Tokyo + JSLD to WGS 84 (10)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.37,'EPSG','9104','EPSG','8602','Longitude offset',-13.65,'EPSG','9104','EPSG','8604','Geoid height',29.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440141',1); INSERT INTO "usage" VALUES('EPSG','8260','other_transformation','EPSG','1339','EPSG','2429','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1340','Tokyo + JSLD to WGS 84 (11)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.44,'EPSG','9104','EPSG','8602','Longitude offset',-13.87,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440142',1); INSERT INTO "usage" VALUES('EPSG','8261','other_transformation','EPSG','1340','EPSG','2430','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1341','Tokyo + JSLD to WGS 84 (12)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.61,'EPSG','9104','EPSG','8602','Longitude offset',-14.08,'EPSG','9104','EPSG','8604','Geoid height',30.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440143',1); INSERT INTO "usage" VALUES('EPSG','8262','other_transformation','EPSG','1341','EPSG','2431','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1342','Tokyo + JSLD to WGS 84 (13)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.73,'EPSG','9104','EPSG','8602','Longitude offset',-14.3,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440144',1); INSERT INTO "usage" VALUES('EPSG','8263','other_transformation','EPSG','1342','EPSG','2432','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1343','Tokyo + JSLD to WGS 84 (14)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.63,'EPSG','9104','EPSG','8602','Longitude offset',-13.49,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432141',1); INSERT INTO "usage" VALUES('EPSG','8264','other_transformation','EPSG','1343','EPSG','2433','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1344','Tokyo + JSLD to WGS 84 (15)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.71,'EPSG','9104','EPSG','8602','Longitude offset',-13.73,'EPSG','9104','EPSG','8604','Geoid height',31.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432142',1); INSERT INTO "usage" VALUES('EPSG','8265','other_transformation','EPSG','1344','EPSG','2434','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1345','Tokyo + JSLD to WGS 84 (16)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.84,'EPSG','9104','EPSG','8602','Longitude offset',-14.03,'EPSG','9104','EPSG','8604','Geoid height',31.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432143',1); INSERT INTO "usage" VALUES('EPSG','8266','other_transformation','EPSG','1345','EPSG','2435','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1346','Tokyo + JSLD to WGS 84 (17)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.98,'EPSG','9104','EPSG','8602','Longitude offset',-14.33,'EPSG','9104','EPSG','8604','Geoid height',32.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432144',1); INSERT INTO "usage" VALUES('EPSG','8267','other_transformation','EPSG','1346','EPSG','2436','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1347','Tokyo + JSLD to WGS 84 (18)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.1,'EPSG','9104','EPSG','8602','Longitude offset',-14.56,'EPSG','9104','EPSG','8604','Geoid height',32.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432145',1); INSERT INTO "usage" VALUES('EPSG','8268','other_transformation','EPSG','1347','EPSG','2437','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1348','Tokyo + JSLD to WGS 84 (19)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.79,'EPSG','9104','EPSG','8602','Longitude offset',-13.0,'EPSG','9104','EPSG','8604','Geoid height',33.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424140',1); INSERT INTO "usage" VALUES('EPSG','8269','other_transformation','EPSG','1348','EPSG','2438','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1349','Tokyo + JSLD to WGS 84 (20)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.84,'EPSG','9104','EPSG','8602','Longitude offset',-13.31,'EPSG','9104','EPSG','8604','Geoid height',31.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424141',1); INSERT INTO "usage" VALUES('EPSG','8270','other_transformation','EPSG','1349','EPSG','2439','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1350','Tokyo + JSLD to WGS 84 (21)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.98,'EPSG','9104','EPSG','8602','Longitude offset',-13.59,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424142',1); INSERT INTO "usage" VALUES('EPSG','8271','other_transformation','EPSG','1350','EPSG','2440','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1351','Tokyo + JSLD to WGS 84 (22)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.1,'EPSG','9104','EPSG','8602','Longitude offset',-13.91,'EPSG','9104','EPSG','8604','Geoid height',29.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424143',1); INSERT INTO "usage" VALUES('EPSG','8272','other_transformation','EPSG','1351','EPSG','2441','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1352','Tokyo + JSLD to WGS 84 (23)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.17,'EPSG','9104','EPSG','8602','Longitude offset',-14.27,'EPSG','9104','EPSG','8604','Geoid height',31.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424144',1); INSERT INTO "usage" VALUES('EPSG','8273','other_transformation','EPSG','1352','EPSG','2442','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1353','Tokyo + JSLD to WGS 84 (24)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.23,'EPSG','9104','EPSG','8602','Longitude offset',-14.52,'EPSG','9104','EPSG','8604','Geoid height',31.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424145',1); INSERT INTO "usage" VALUES('EPSG','8274','other_transformation','EPSG','1353','EPSG','2443','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1354','Tokyo + JSLD to WGS 84 (25)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.9,'EPSG','9104','EPSG','8602','Longitude offset',-12.68,'EPSG','9104','EPSG','8604','Geoid height',34.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420139',1); INSERT INTO "usage" VALUES('EPSG','8275','other_transformation','EPSG','1354','EPSG','2444','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1355','Tokyo + JSLD to WGS 84 (26)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',8.99,'EPSG','9104','EPSG','8602','Longitude offset',-12.8,'EPSG','9104','EPSG','8604','Geoid height',34.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420140',1); INSERT INTO "usage" VALUES('EPSG','8276','other_transformation','EPSG','1355','EPSG','2445','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1356','Tokyo + JSLD to WGS 84 (27)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.0,'EPSG','9104','EPSG','8602','Longitude offset',-13.07,'EPSG','9104','EPSG','8604','Geoid height',31.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420141',1); INSERT INTO "usage" VALUES('EPSG','8277','other_transformation','EPSG','1356','EPSG','2446','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1357','Tokyo + JSLD to WGS 84 (28)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.21,'EPSG','9104','EPSG','8602','Longitude offset',-13.51,'EPSG','9104','EPSG','8604','Geoid height',27.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420142',1); INSERT INTO "usage" VALUES('EPSG','8278','other_transformation','EPSG','1357','EPSG','2447','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1358','Tokyo + JSLD to WGS 84 (29)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.33,'EPSG','9104','EPSG','8602','Longitude offset',-13.66,'EPSG','9104','EPSG','8604','Geoid height',23.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420143',1); INSERT INTO "usage" VALUES('EPSG','8279','other_transformation','EPSG','1358','EPSG','2448','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1359','Tokyo + JSLD to WGS 84 (30)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.25,'EPSG','9104','EPSG','8602','Longitude offset',-12.72,'EPSG','9104','EPSG','8604','Geoid height',34.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 412140',1); INSERT INTO "usage" VALUES('EPSG','8280','other_transformation','EPSG','1359','EPSG','2449','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1360','Tokyo + JSLD to WGS 84 (31)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.39,'EPSG','9104','EPSG','8602','Longitude offset',-12.91,'EPSG','9104','EPSG','8604','Geoid height',31.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 412141',1); INSERT INTO "usage" VALUES('EPSG','8281','other_transformation','EPSG','1360','EPSG','2450','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1361','Tokyo + JSLD to WGS 84 (32)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.55,'EPSG','9104','EPSG','8602','Longitude offset',-12.63,'EPSG','9104','EPSG','8604','Geoid height',35.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 404140',1); INSERT INTO "usage" VALUES('EPSG','8282','other_transformation','EPSG','1361','EPSG','2451','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1362','Tokyo + JSLD to WGS 84 (33)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.62,'EPSG','9104','EPSG','8602','Longitude offset',-12.82,'EPSG','9104','EPSG','8604','Geoid height',34.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 404141',1); INSERT INTO "usage" VALUES('EPSG','8283','other_transformation','EPSG','1362','EPSG','2452','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1363','Tokyo + JSLD to WGS 84 (34)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.81,'EPSG','9104','EPSG','8602','Longitude offset',-12.29,'EPSG','9104','EPSG','8604','Geoid height',36.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 400139',1); INSERT INTO "usage" VALUES('EPSG','8284','other_transformation','EPSG','1363','EPSG','2453','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1364','Tokyo + JSLD to WGS 84 (35)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.81,'EPSG','9104','EPSG','8602','Longitude offset',-12.45,'EPSG','9104','EPSG','8604','Geoid height',37.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 400140',1); INSERT INTO "usage" VALUES('EPSG','8285','other_transformation','EPSG','1364','EPSG','2454','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1365','Tokyo + JSLD to WGS 84 (36)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.92,'EPSG','9104','EPSG','8602','Longitude offset',-12.79,'EPSG','9104','EPSG','8604','Geoid height',38.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 400141',1); INSERT INTO "usage" VALUES('EPSG','8286','other_transformation','EPSG','1365','EPSG','2455','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1366','Tokyo + JSLD to WGS 84 (37)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',9.91,'EPSG','9104','EPSG','8602','Longitude offset',-12.21,'EPSG','9104','EPSG','8604','Geoid height',36.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 392139',1); INSERT INTO "usage" VALUES('EPSG','8287','other_transformation','EPSG','1366','EPSG','2456','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1367','Tokyo + JSLD to WGS 84 (38)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.08,'EPSG','9104','EPSG','8602','Longitude offset',-12.35,'EPSG','9104','EPSG','8604','Geoid height',39.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 392140',1); INSERT INTO "usage" VALUES('EPSG','8288','other_transformation','EPSG','1367','EPSG','2457','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1368','Tokyo + JSLD to WGS 84 (39)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.19,'EPSG','9104','EPSG','8602','Longitude offset',-12.74,'EPSG','9104','EPSG','8604','Geoid height',40.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 392141',1); INSERT INTO "usage" VALUES('EPSG','8289','other_transformation','EPSG','1368','EPSG','2458','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1369','Tokyo + JSLD to WGS 84 (40)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.29,'EPSG','9104','EPSG','8602','Longitude offset',-12.13,'EPSG','9104','EPSG','8604','Geoid height',38.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 384139',1); INSERT INTO "usage" VALUES('EPSG','8290','other_transformation','EPSG','1369','EPSG','2459','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1370','Tokyo + JSLD to WGS 84 (41)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.33,'EPSG','9104','EPSG','8602','Longitude offset',-12.27,'EPSG','9104','EPSG','8604','Geoid height',40.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 384140',1); INSERT INTO "usage" VALUES('EPSG','8291','other_transformation','EPSG','1370','EPSG','2460','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1371','Tokyo + JSLD to WGS 84 (42)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.45,'EPSG','9104','EPSG','8602','Longitude offset',-12.61,'EPSG','9104','EPSG','8604','Geoid height',41.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 384141',1); INSERT INTO "usage" VALUES('EPSG','8292','other_transformation','EPSG','1371','EPSG','2461','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1372','Tokyo + JSLD to WGS 84 (43)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.54,'EPSG','9104','EPSG','8602','Longitude offset',-11.96,'EPSG','9104','EPSG','8604','Geoid height',39.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 380139',1); INSERT INTO "usage" VALUES('EPSG','8293','other_transformation','EPSG','1372','EPSG','2462','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1373','Tokyo + JSLD to WGS 84 (44)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.65,'EPSG','9104','EPSG','8602','Longitude offset',-12.27,'EPSG','9104','EPSG','8604','Geoid height',41.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 380140',1); INSERT INTO "usage" VALUES('EPSG','8294','other_transformation','EPSG','1373','EPSG','2463','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1374','Tokyo + JSLD to WGS 84 (45)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.67,'EPSG','9104','EPSG','8602','Longitude offset',-12.5,'EPSG','9104','EPSG','8604','Geoid height',41.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 380141',1); INSERT INTO "usage" VALUES('EPSG','8295','other_transformation','EPSG','1374','EPSG','2464','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1375','Tokyo + JSLD to WGS 84 (46)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.67,'EPSG','9104','EPSG','8602','Longitude offset',-10.86,'EPSG','9104','EPSG','8604','Geoid height',38.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372136',1); INSERT INTO "usage" VALUES('EPSG','8296','other_transformation','EPSG','1375','EPSG','2465','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1376','Tokyo + JSLD to WGS 84 (47)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.68,'EPSG','9104','EPSG','8602','Longitude offset',-10.97,'EPSG','9104','EPSG','8604','Geoid height',36.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372137',1); INSERT INTO "usage" VALUES('EPSG','8297','other_transformation','EPSG','1376','EPSG','2466','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1377','Tokyo + JSLD to WGS 84 (48)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.8,'EPSG','9104','EPSG','8602','Longitude offset',-11.53,'EPSG','9104','EPSG','8604','Geoid height',39.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372138',1); INSERT INTO "usage" VALUES('EPSG','8298','other_transformation','EPSG','1377','EPSG','2467','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1378','Tokyo + JSLD to WGS 84 (49)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.8,'EPSG','9104','EPSG','8602','Longitude offset',-11.73,'EPSG','9104','EPSG','8604','Geoid height',40.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372139',1); INSERT INTO "usage" VALUES('EPSG','8299','other_transformation','EPSG','1378','EPSG','2468','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1379','Tokyo + JSLD to WGS 84 (50)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.92,'EPSG','9104','EPSG','8602','Longitude offset',-12.16,'EPSG','9104','EPSG','8604','Geoid height',42.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372140',1); INSERT INTO "usage" VALUES('EPSG','8300','other_transformation','EPSG','1379','EPSG','2469','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1380','Tokyo + JSLD to WGS 84 (51)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.0,'EPSG','9104','EPSG','8602','Longitude offset',-12.25,'EPSG','9104','EPSG','8604','Geoid height',41.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372141',1); INSERT INTO "usage" VALUES('EPSG','8301','other_transformation','EPSG','1380','EPSG','2470','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1381','Tokyo + JSLD to WGS 84 (52)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.83,'EPSG','9104','EPSG','8602','Longitude offset',-10.77,'EPSG','9104','EPSG','8604','Geoid height',36.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364136',1); INSERT INTO "usage" VALUES('EPSG','8302','other_transformation','EPSG','1381','EPSG','2471','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1382','Tokyo + JSLD to WGS 84 (53)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.95,'EPSG','9104','EPSG','8602','Longitude offset',-11.0,'EPSG','9104','EPSG','8604','Geoid height',38.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364137',1); INSERT INTO "usage" VALUES('EPSG','8303','other_transformation','EPSG','1382','EPSG','2472','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1383','Tokyo + JSLD to WGS 84 (54)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',10.97,'EPSG','9104','EPSG','8602','Longitude offset',-11.34,'EPSG','9104','EPSG','8604','Geoid height',40.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364138',1); INSERT INTO "usage" VALUES('EPSG','8304','other_transformation','EPSG','1383','EPSG','2473','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1384','Tokyo + JSLD to WGS 84 (55)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.04,'EPSG','9104','EPSG','8602','Longitude offset',-11.69,'EPSG','9104','EPSG','8604','Geoid height',43.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364139',1); INSERT INTO "usage" VALUES('EPSG','8305','other_transformation','EPSG','1384','EPSG','2474','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1385','Tokyo + JSLD to WGS 84 (56)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.17,'EPSG','9104','EPSG','8602','Longitude offset',-12.05,'EPSG','9104','EPSG','8604','Geoid height',42.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364140',1); INSERT INTO "usage" VALUES('EPSG','8306','other_transformation','EPSG','1385','EPSG','2475','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1386','Tokyo + JSLD to WGS 84 (57)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.11,'EPSG','9104','EPSG','8602','Longitude offset',-10.59,'EPSG','9104','EPSG','8604','Geoid height',37.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360136',1); INSERT INTO "usage" VALUES('EPSG','8307','other_transformation','EPSG','1386','EPSG','2476','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1387','Tokyo + JSLD to WGS 84 (58)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.16,'EPSG','9104','EPSG','8602','Longitude offset',-10.97,'EPSG','9104','EPSG','8604','Geoid height',40.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360137',1); INSERT INTO "usage" VALUES('EPSG','8308','other_transformation','EPSG','1387','EPSG','2477','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1388','Tokyo + JSLD to WGS 84 (59)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.29,'EPSG','9104','EPSG','8602','Longitude offset',-11.23,'EPSG','9104','EPSG','8604','Geoid height',42.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360138',1); INSERT INTO "usage" VALUES('EPSG','8309','other_transformation','EPSG','1388','EPSG','2478','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1389','Tokyo + JSLD to WGS 84 (60)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.36,'EPSG','9104','EPSG','8602','Longitude offset',-11.59,'EPSG','9104','EPSG','8604','Geoid height',42.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360139',1); INSERT INTO "usage" VALUES('EPSG','8310','other_transformation','EPSG','1389','EPSG','2479','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1390','Tokyo + JSLD to WGS 84 (61)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.44,'EPSG','9104','EPSG','8602','Longitude offset',-11.88,'EPSG','9104','EPSG','8604','Geoid height',40.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360140',1); INSERT INTO "usage" VALUES('EPSG','8311','other_transformation','EPSG','1390','EPSG','2480','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1391','Tokyo + JSLD to WGS 84 (62)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.27,'EPSG','9104','EPSG','8602','Longitude offset',-9.31,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352132',1); INSERT INTO "usage" VALUES('EPSG','8312','other_transformation','EPSG','1391','EPSG','2481','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1392','Tokyo + JSLD to WGS 84 (63)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.33,'EPSG','9104','EPSG','8602','Longitude offset',-9.52,'EPSG','9104','EPSG','8604','Geoid height',33.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352133',1); INSERT INTO "usage" VALUES('EPSG','8313','other_transformation','EPSG','1392','EPSG','2482','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1393','Tokyo + JSLD to WGS 84 (64)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.38,'EPSG','9104','EPSG','8602','Longitude offset',-9.86,'EPSG','9104','EPSG','8604','Geoid height',34.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352134',1); INSERT INTO "usage" VALUES('EPSG','8314','other_transformation','EPSG','1393','EPSG','2483','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1394','Tokyo + JSLD to WGS 84 (65)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.41,'EPSG','9104','EPSG','8602','Longitude offset',-10.14,'EPSG','9104','EPSG','8604','Geoid height',35.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352135',1); INSERT INTO "usage" VALUES('EPSG','8315','other_transformation','EPSG','1394','EPSG','2484','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1395','Tokyo + JSLD to WGS 84 (66)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.39,'EPSG','9104','EPSG','8602','Longitude offset',-10.52,'EPSG','9104','EPSG','8604','Geoid height',37.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352136',1); INSERT INTO "usage" VALUES('EPSG','8316','other_transformation','EPSG','1395','EPSG','2485','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1396','Tokyo + JSLD to WGS 84 (67)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.49,'EPSG','9104','EPSG','8602','Longitude offset',-10.83,'EPSG','9104','EPSG','8604','Geoid height',39.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352137',1); INSERT INTO "usage" VALUES('EPSG','8317','other_transformation','EPSG','1396','EPSG','2486','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1397','Tokyo + JSLD to WGS 84 (68)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.58,'EPSG','9104','EPSG','8602','Longitude offset',-11.21,'EPSG','9104','EPSG','8604','Geoid height',41.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352138',1); INSERT INTO "usage" VALUES('EPSG','8318','other_transformation','EPSG','1397','EPSG','2487','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1398','Tokyo + JSLD to WGS 84 (69)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.65,'EPSG','9104','EPSG','8602','Longitude offset',-11.53,'EPSG','9104','EPSG','8604','Geoid height',38.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352139',1); INSERT INTO "usage" VALUES('EPSG','8319','other_transformation','EPSG','1398','EPSG','2488','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1399','Tokyo + JSLD to WGS 84 (70)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.72,'EPSG','9104','EPSG','8602','Longitude offset',-11.8,'EPSG','9104','EPSG','8604','Geoid height',34.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352140',1); INSERT INTO "usage" VALUES('EPSG','8320','other_transformation','EPSG','1399','EPSG','2489','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1400','Tokyo + JSLD to WGS 84 (71)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.44,'EPSG','9104','EPSG','8602','Longitude offset',-9.21,'EPSG','9104','EPSG','8604','Geoid height',32.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344132',1); INSERT INTO "usage" VALUES('EPSG','8321','other_transformation','EPSG','1400','EPSG','2490','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1401','Tokyo + JSLD to WGS 84 (72)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.47,'EPSG','9104','EPSG','8602','Longitude offset',-9.52,'EPSG','9104','EPSG','8604','Geoid height',35.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344133',1); INSERT INTO "usage" VALUES('EPSG','8322','other_transformation','EPSG','1401','EPSG','2491','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1402','Tokyo + JSLD to WGS 84 (73)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.55,'EPSG','9104','EPSG','8602','Longitude offset',-9.8,'EPSG','9104','EPSG','8604','Geoid height',35.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344134',1); INSERT INTO "usage" VALUES('EPSG','8323','other_transformation','EPSG','1402','EPSG','2492','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1403','Tokyo + JSLD to WGS 84 (74)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.61,'EPSG','9104','EPSG','8602','Longitude offset',-10.12,'EPSG','9104','EPSG','8604','Geoid height',35.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344135',1); INSERT INTO "usage" VALUES('EPSG','8324','other_transformation','EPSG','1403','EPSG','2493','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1404','Tokyo + JSLD to WGS 84 (75)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.66,'EPSG','9104','EPSG','8602','Longitude offset',-10.47,'EPSG','9104','EPSG','8604','Geoid height',37.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344136',1); INSERT INTO "usage" VALUES('EPSG','8325','other_transformation','EPSG','1404','EPSG','2494','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1405','Tokyo + JSLD to WGS 84 (76)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.78,'EPSG','9104','EPSG','8602','Longitude offset',-10.79,'EPSG','9104','EPSG','8604','Geoid height',39.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344137',1); INSERT INTO "usage" VALUES('EPSG','8326','other_transformation','EPSG','1405','EPSG','2495','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1406','Tokyo + JSLD to WGS 84 (77)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.85,'EPSG','9104','EPSG','8602','Longitude offset',-11.13,'EPSG','9104','EPSG','8604','Geoid height',39.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344138',1); INSERT INTO "usage" VALUES('EPSG','8327','other_transformation','EPSG','1406','EPSG','2496','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1407','Tokyo + JSLD to WGS 84 (78)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.9,'EPSG','9104','EPSG','8602','Longitude offset',-11.47,'EPSG','9104','EPSG','8604','Geoid height',36.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344139',1); INSERT INTO "usage" VALUES('EPSG','8328','other_transformation','EPSG','1407','EPSG','2497','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1408','Tokyo + JSLD to WGS 84 (79)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.91,'EPSG','9104','EPSG','8602','Longitude offset',-11.69,'EPSG','9104','EPSG','8604','Geoid height',33.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344140',1); INSERT INTO "usage" VALUES('EPSG','8329','other_transformation','EPSG','1408','EPSG','2498','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1409','Tokyo + JSLD to WGS 84 (80)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.65,'EPSG','9104','EPSG','8602','Longitude offset',-8.59,'EPSG','9104','EPSG','8604','Geoid height',29.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340130',1); INSERT INTO "usage" VALUES('EPSG','8330','other_transformation','EPSG','1409','EPSG','2499','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1410','Tokyo + JSLD to WGS 84 (81)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.68,'EPSG','9104','EPSG','8602','Longitude offset',-8.8,'EPSG','9104','EPSG','8604','Geoid height',30.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340131',1); INSERT INTO "usage" VALUES('EPSG','8331','other_transformation','EPSG','1410','EPSG','2500','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1411','Tokyo + JSLD to WGS 84 (82)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.73,'EPSG','9104','EPSG','8602','Longitude offset',-9.04,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340132',1); INSERT INTO "usage" VALUES('EPSG','8332','other_transformation','EPSG','1411','EPSG','2501','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1412','Tokyo + JSLD to WGS 84 (83)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.72,'EPSG','9104','EPSG','8602','Longitude offset',-9.48,'EPSG','9104','EPSG','8604','Geoid height',35.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340133',1); INSERT INTO "usage" VALUES('EPSG','8333','other_transformation','EPSG','1412','EPSG','2502','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1413','Tokyo + JSLD to WGS 84 (84)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.81,'EPSG','9104','EPSG','8602','Longitude offset',9.74,'EPSG','9104','EPSG','8604','Geoid height',35.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340134',1); INSERT INTO "usage" VALUES('EPSG','8334','other_transformation','EPSG','1413','EPSG','2503','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1414','Tokyo + JSLD to WGS 84 (85)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.88,'EPSG','9104','EPSG','8602','Longitude offset',-10.1,'EPSG','9104','EPSG','8604','Geoid height',37.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340135',1); INSERT INTO "usage" VALUES('EPSG','8335','other_transformation','EPSG','1414','EPSG','2504','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1415','Tokyo + JSLD to WGS 84 (86)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.91,'EPSG','9104','EPSG','8602','Longitude offset',-10.35,'EPSG','9104','EPSG','8604','Geoid height',37.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340136',1); INSERT INTO "usage" VALUES('EPSG','8336','other_transformation','EPSG','1415','EPSG','2505','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1416','Tokyo + JSLD to WGS 84 (87)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.9,'EPSG','9104','EPSG','8602','Longitude offset',-10.7,'EPSG','9104','EPSG','8604','Geoid height',39.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340137',1); INSERT INTO "usage" VALUES('EPSG','8337','other_transformation','EPSG','1416','EPSG','2506','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1417','Tokyo + JSLD to WGS 84 (88)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.02,'EPSG','9104','EPSG','8602','Longitude offset',-11.09,'EPSG','9104','EPSG','8604','Geoid height',38.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340138',1); INSERT INTO "usage" VALUES('EPSG','8338','other_transformation','EPSG','1417','EPSG','2507','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1418','Tokyo + JSLD to WGS 84 (89)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.87,'EPSG','9104','EPSG','8602','Longitude offset',-8.23,'EPSG','9104','EPSG','8604','Geoid height',29.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332129',1); INSERT INTO "usage" VALUES('EPSG','8339','other_transformation','EPSG','1418','EPSG','2508','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1419','Tokyo + JSLD to WGS 84 (90)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.84,'EPSG','9104','EPSG','8602','Longitude offset',-8.44,'EPSG','9104','EPSG','8604','Geoid height',30.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332130',1); INSERT INTO "usage" VALUES('EPSG','8340','other_transformation','EPSG','1419','EPSG','2509','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1420','Tokyo + JSLD to WGS 84 (91)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.94,'EPSG','9104','EPSG','8602','Longitude offset',-8.71,'EPSG','9104','EPSG','8604','Geoid height',30.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332131',1); INSERT INTO "usage" VALUES('EPSG','8341','other_transformation','EPSG','1420','EPSG','2510','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1421','Tokyo + JSLD to WGS 84 (92)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',11.99,'EPSG','9104','EPSG','8602','Longitude offset',-9.02,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332132',1); INSERT INTO "usage" VALUES('EPSG','8342','other_transformation','EPSG','1421','EPSG','2511','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1422','Tokyo + JSLD to WGS 84 (93)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.05,'EPSG','9104','EPSG','8602','Longitude offset',-9.36,'EPSG','9104','EPSG','8604','Geoid height',35.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332133',1); INSERT INTO "usage" VALUES('EPSG','8343','other_transformation','EPSG','1422','EPSG','2512','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1423','Tokyo + JSLD to WGS 84 (94)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.1,'EPSG','9104','EPSG','8602','Longitude offset',-9.64,'EPSG','9104','EPSG','8604','Geoid height',35.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332134',1); INSERT INTO "usage" VALUES('EPSG','8344','other_transformation','EPSG','1423','EPSG','2513','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1424','Tokyo + JSLD to WGS 84 (95)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.1,'EPSG','9104','EPSG','8602','Longitude offset',-10.08,'EPSG','9104','EPSG','8604','Geoid height',37.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332135',1); INSERT INTO "usage" VALUES('EPSG','8345','other_transformation','EPSG','1424','EPSG','2514','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1425','Tokyo + JSLD to WGS 84 (96)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.07,'EPSG','9104','EPSG','8602','Longitude offset',-10.25,'EPSG','9104','EPSG','8604','Geoid height',37.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332136',1); INSERT INTO "usage" VALUES('EPSG','8346','other_transformation','EPSG','1425','EPSG','2515','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1426','Tokyo + JSLD to WGS 84 (97)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.0,'EPSG','9104','EPSG','8602','Longitude offset',-8.15,'EPSG','9104','EPSG','8604','Geoid height',32.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324129',1); INSERT INTO "usage" VALUES('EPSG','8347','other_transformation','EPSG','1426','EPSG','2516','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1427','Tokyo + JSLD to WGS 84 (98)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.06,'EPSG','9104','EPSG','8602','Longitude offset',-8.38,'EPSG','9104','EPSG','8604','Geoid height',31.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324130',1); INSERT INTO "usage" VALUES('EPSG','8348','other_transformation','EPSG','1427','EPSG','2517','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1428','Tokyo + JSLD to WGS 84 (99)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.17,'EPSG','9104','EPSG','8602','Longitude offset',-8.69,'EPSG','9104','EPSG','8604','Geoid height',30.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324131',1); INSERT INTO "usage" VALUES('EPSG','8349','other_transformation','EPSG','1428','EPSG','2518','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1429','Tokyo + JSLD to WGS 84 (100)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.23,'EPSG','9104','EPSG','8602','Longitude offset',-8.99,'EPSG','9104','EPSG','8604','Geoid height',31.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324132',1); INSERT INTO "usage" VALUES('EPSG','8350','other_transformation','EPSG','1429','EPSG','2519','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1430','Tokyo + JSLD to WGS 84 (101)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.21,'EPSG','9104','EPSG','8602','Longitude offset',-9.21,'EPSG','9104','EPSG','8604','Geoid height',34.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324133',1); INSERT INTO "usage" VALUES('EPSG','8351','other_transformation','EPSG','1430','EPSG','2520','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1431','Tokyo + JSLD to WGS 84 (102)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.28,'EPSG','9104','EPSG','8602','Longitude offset',-9.6,'EPSG','9104','EPSG','8604','Geoid height',33.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324134',1); INSERT INTO "usage" VALUES('EPSG','8352','other_transformation','EPSG','1431','EPSG','2521','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1432','Tokyo + JSLD to WGS 84 (103)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.28,'EPSG','9104','EPSG','8602','Longitude offset',-8.25,'EPSG','9104','EPSG','8604','Geoid height',31.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 320130',1); INSERT INTO "usage" VALUES('EPSG','8353','other_transformation','EPSG','1432','EPSG','2522','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1433','Tokyo + JSLD to WGS 84 (104)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.37,'EPSG','9104','EPSG','8602','Longitude offset',-8.55,'EPSG','9104','EPSG','8604','Geoid height',29.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 320131',1); INSERT INTO "usage" VALUES('EPSG','8354','other_transformation','EPSG','1433','EPSG','2523','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1434','Tokyo + JSLD to WGS 84 (105)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.53,'EPSG','9104','EPSG','8602','Longitude offset',-8.21,'EPSG','9104','EPSG','8604','Geoid height',31.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 320132',1); INSERT INTO "usage" VALUES('EPSG','8355','other_transformation','EPSG','1434','EPSG','2524','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1435','Tokyo + JSLD to WGS 84 (106)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.57,'EPSG','9104','EPSG','8602','Longitude offset',-8.4,'EPSG','9104','EPSG','8604','Geoid height',28.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 312130',1); INSERT INTO "usage" VALUES('EPSG','8356','other_transformation','EPSG','1435','EPSG','2525','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1436','Tokyo + JSLD to WGS 84 (107)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',12.71,'EPSG','9104','EPSG','8602','Longitude offset',-8.17,'EPSG','9104','EPSG','8604','Geoid height',29.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 312131',1); INSERT INTO "usage" VALUES('EPSG','8357','other_transformation','EPSG','1436','EPSG','2526','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1447','Anguilla 1957 to WGS 84 (1)','','EPSG','9619','Geographic2D offsets','EPSG','4600','EPSG','4326',10.0,'EPSG','8601','Latitude offset',-18.0,'EPSG','9104','EPSG','8602','Longitude offset',4.4,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DOS-Aia',0); INSERT INTO "usage" VALUES('EPSG','8368','other_transformation','EPSG','1447','EPSG','3214','EPSG','1024'); INSERT INTO "other_transformation" VALUES('EPSG','1452','D48 / GK to D96 / TM (1)','Information source gives rotation angle of source CRS axes as 359.9990153250° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-378.752,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.395,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000126775,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.000984675,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 1',1); INSERT INTO "usage" VALUES('EPSG','8373','other_transformation','EPSG','1452','EPSG','2578','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','1453','D48 / GK to D96 / TM (2)','Information source gives rotation angle of source CRS axes as 359.9987988952° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-380.322,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',494.216,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.000015768,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0012011048,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 2',1); INSERT INTO "usage" VALUES('EPSG','8374','other_transformation','EPSG','1453','EPSG','2579','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','1465','D48 / GK to D96 / TM (3)','Information source gives rotation angle of source CRS axes as 359.9990080921° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-382.19,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',492.412,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000210585,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0009919079,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 3',1); INSERT INTO "usage" VALUES('EPSG','8386','other_transformation','EPSG','1465','EPSG','2582','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','1466','NGO 1948 (Oslo) to NGO1948 (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4817','EPSG','4273',NULL,'EPSG','8602','Longitude offset',10.43225,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGO-Nor',1); INSERT INTO "usage" VALUES('EPSG','8387','other_transformation','EPSG','1466','EPSG','1352','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1467','NTF (Paris) to NTF (Greenwich) (1)','','EPSG','9601','Longitude rotation','EPSG','4807','EPSG','4275',NULL,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',1); INSERT INTO "usage" VALUES('EPSG','8388','other_transformation','EPSG','1467','EPSG','1096','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1468','NTF (Paris) to NTF (Greenwich) (2)','OGP prefers value from IGN Paris (code 1467).','EPSG','9601','Longitude rotation','EPSG','4807','EPSG','4275',NULL,'EPSG','8602','Longitude offset',2.201395,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RGS',1); INSERT INTO "usage" VALUES('EPSG','8389','other_transformation','EPSG','1468','EPSG','1096','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1519','Bern 1898 (Bern) to CH1903 (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4801','EPSG','4149',NULL,'EPSG','8602','Longitude offset',7.26225,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH',1); INSERT INTO "usage" VALUES('EPSG','8440','other_transformation','EPSG','1519','EPSG','1286','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1535','D48 / GK to D96 / TM (4)','Information source gives rotation angle of source CRS axes as 359.9991387616° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-377.487,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',492.209,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000103303,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0008612384,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 4',1); INSERT INTO "usage" VALUES('EPSG','8456','other_transformation','EPSG','1535','EPSG','2583','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','1636','D48 / GK to D96 / TM (5)','Information source gives rotation angle of source CRS axes as 359.9988083326° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-383.677,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.408,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.000023822,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0011916674,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 5',1); INSERT INTO "usage" VALUES('EPSG','8557','other_transformation','EPSG','1636','EPSG','3348','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','1637','D48 / GK to D96 / TM (6)','Information source gives rotation angle of source CRS axes as 359.9985894280° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-379.867,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.342,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000139529,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.001410572,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 6',1); INSERT INTO "usage" VALUES('EPSG','8558','other_transformation','EPSG','1637','EPSG','2422','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','1755','Bogota 1975 (Bogota) to Bogota 1975 (1)','','EPSG','9601','Longitude rotation','EPSG','4802','EPSG','4218',0.0,'EPSG','8602','Longitude offset',-74.04513,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col',0); INSERT INTO "usage" VALUES('EPSG','8676','other_transformation','EPSG','1755','EPSG','3229','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1756','Lisbon (Lisbon) to Lisbon (1)','','EPSG','9601','Longitude rotation','EPSG','4803','EPSG','4207',0.0,'EPSG','8602','Longitude offset',-9.0754862,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGC-Prt',0); INSERT INTO "usage" VALUES('EPSG','8677','other_transformation','EPSG','1756','EPSG','1294','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1757','MGI (Ferro) to MGI (1)','','EPSG','9601','Longitude rotation','EPSG','4805','EPSG','4312',0.0,'EPSG','8602','Longitude offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut balk',1); INSERT INTO "usage" VALUES('EPSG','8678','other_transformation','EPSG','1757','EPSG','1321','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1758','Padang (Jakarta) to Padang (1)','','EPSG','9601','Longitude rotation','EPSG','4808','EPSG','4280',0.0,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Sumatra',1); INSERT INTO "usage" VALUES('EPSG','8679','other_transformation','EPSG','1758','EPSG','1355','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1759','Batavia (Jakarta) to Batavia (1)','','EPSG','9601','Longitude rotation','EPSG','4813','EPSG','4211',0.0,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Java',0); INSERT INTO "usage" VALUES('EPSG','8680','other_transformation','EPSG','1759','EPSG','1285','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1760','RT38 (Stockholm) to RT38 (1)','','EPSG','9601','Longitude rotation','EPSG','4814','EPSG','4308',0.0,'EPSG','8602','Longitude offset',18.03298,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Swe',0); INSERT INTO "usage" VALUES('EPSG','8681','other_transformation','EPSG','1760','EPSG','3313','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1761','Greek (Athens) to Greek (1)','','EPSG','9601','Longitude rotation','EPSG','4815','EPSG','4120',0.0,'EPSG','8602','Longitude offset',23.4258815,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NTU-Grc',0); INSERT INTO "usage" VALUES('EPSG','8682','other_transformation','EPSG','1761','EPSG','3254','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1762','NGO 1948 (Oslo) to NGO1948 (1)','','EPSG','9601','Longitude rotation','EPSG','4817','EPSG','4273',0.0,'EPSG','8602','Longitude offset',10.43225,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGO-Nor',0); INSERT INTO "usage" VALUES('EPSG','8683','other_transformation','EPSG','1762','EPSG','1352','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1763','NTF (Paris) to NTF (1)','','EPSG','9601','Longitude rotation','EPSG','4807','EPSG','4275',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8684','other_transformation','EPSG','1763','EPSG','3694','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1764','NTF (Paris) to NTF (2)','OGP prefers value from IGN Paris (code 1763).','EPSG','9601','Longitude rotation','EPSG','4807','EPSG','4275',0.0,'EPSG','8602','Longitude offset',2.201395,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RGS',0); INSERT INTO "usage" VALUES('EPSG','8685','other_transformation','EPSG','1764','EPSG','3694','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1765','CH1903 (Bern) to CH1903 (1)','','EPSG','9601','Longitude rotation','EPSG','4801','EPSG','4149',0.0,'EPSG','8602','Longitude offset',7.26225,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BfL-CH',0); INSERT INTO "usage" VALUES('EPSG','8686','other_transformation','EPSG','1765','EPSG','1286','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1827','Tokyo + JSLD to WGS 84 (6)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4326',1.0,'EPSG','8601','Latitude offset',7.92,'EPSG','9104','EPSG','8602','Longitude offset',-13.88,'EPSG','9104','EPSG','8604','Geoid height',26.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 452141',1); INSERT INTO "usage" VALUES('EPSG','8748','other_transformation','EPSG','1827','EPSG','2425','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','1881','Carthage (Paris) to Carthage (1)','','EPSG','9601','Longitude rotation','EPSG','4816','EPSG','4223',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',0); INSERT INTO "usage" VALUES('EPSG','8802','other_transformation','EPSG','1881','EPSG','1618','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1882','Nord Sahara 1959 (Paris) to Nord Sahara 1959 (1)','','EPSG','9601','Longitude rotation','EPSG','4819','EPSG','4307',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Fra',1); INSERT INTO "usage" VALUES('EPSG','8803','other_transformation','EPSG','1882','EPSG','1026','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1883','Segara (Jakarta) to Segara (1)','','EPSG','9601','Longitude rotation','EPSG','4820','EPSG','4613',0.0,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Kal E',0); INSERT INTO "usage" VALUES('EPSG','8804','other_transformation','EPSG','1883','EPSG','1360','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1884','S-JTSK (Ferro) to S-JTSK (1)','','EPSG','9601','Longitude rotation','EPSG','4818','EPSG','4156',0.0,'EPSG','8602','Longitude offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Cze',0); INSERT INTO "usage" VALUES('EPSG','8805','other_transformation','EPSG','1884','EPSG','1306','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1891','Greek to GGRS87 (1)','More accurate polynomial transformations between Greek / Hatt projection zones and GGRS87 / Greek Grid are available from the Military Geographic Service.','EPSG','9619','Geographic2D offsets','EPSG','4120','EPSG','4121',5.0,'EPSG','8601','Latitude offset',-5.86,'EPSG','9104','EPSG','8602','Longitude offset',0.28,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HGS-Grc',0); INSERT INTO "usage" VALUES('EPSG','8812','other_transformation','EPSG','1891','EPSG','3254','EPSG','1045'); INSERT INTO "other_transformation" VALUES('EPSG','1991','Lisbon 1890 (Lisbon) to Lisbon 1890 (1)','','EPSG','9601','Longitude rotation','EPSG','4904','EPSG','4666',0.0,'EPSG','8602','Longitude offset',-9.0754862,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CGC-Prt',0); INSERT INTO "usage" VALUES('EPSG','8912','other_transformation','EPSG','1991','EPSG','1294','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','2181','D48 / GK to D96 / TM (7)','Information source gives rotation angle of source CRS axes as 359.9989361857° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-378.706,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.722,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000128479,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0010638143,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 7',1); INSERT INTO "usage" VALUES('EPSG','8921','other_transformation','EPSG','2181','EPSG','3349','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2182','D48 / GK to D96 / TM (8)','Information source gives rotation angle of source CRS axes as 359.9990279960° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-376.275,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.231,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000076601,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.000972004,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 8',1); INSERT INTO "usage" VALUES('EPSG','8922','other_transformation','EPSG','2182','EPSG','3350','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2183','D48 / GK to D96 / TM (9)','Information source gives rotation angle of source CRS axes as 359.9984713141° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-379.883,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',497.465,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000132379,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0015286859,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 9',1); INSERT INTO "usage" VALUES('EPSG','8923','other_transformation','EPSG','2183','EPSG','2580','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2184','D48 / GK to D96 / TM (10)','Information source gives rotation angle of source CRS axes as 359.9984602820° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-380.127,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',497.52,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000138184,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.001539718,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 10',1); INSERT INTO "usage" VALUES('EPSG','8924','other_transformation','EPSG','2184','EPSG','3345','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2185','D48 / GK to D96 / TM (11)','Information source gives rotation angle of source CRS axes as 359.9982890576° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-377.965,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',499.354,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000089352,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0017109424,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 11',1); INSERT INTO "usage" VALUES('EPSG','8925','other_transformation','EPSG','2185','EPSG','2581','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2186','D48 / GK to D96 / TM (12)','Information source gives rotation angle of source CRS axes as 359.9995848956° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-384.455,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',487.979,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000246653,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0004151044,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 12',1); INSERT INTO "usage" VALUES('EPSG','8926','other_transformation','EPSG','2186','EPSG','3351','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2187','D48 / GK to D96 / TM (13)','Information source gives rotation angle of source CRS axes as 359.9978086208° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-384.415,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',502.308,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000190161,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0021913792,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 13',1); INSERT INTO "usage" VALUES('EPSG','8927','other_transformation','EPSG','2187','EPSG','3352','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2293','D48 / GK to D96 / TM (14)','Information source gives rotation angle of source CRS axes as 359.9986330172° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-380.84,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',495.612,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000158378,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0013669828,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 14',1); INSERT INTO "usage" VALUES('EPSG','8928','other_transformation','EPSG','2293','EPSG','3353','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','2974','D48 / GK to D96 / TM (15)','Information source gives rotation angle of source CRS axes as 359.9986660539° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-377.812,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.076,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000100475,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0013339461,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 15',1); INSERT INTO "usage" VALUES('EPSG','8929','other_transformation','EPSG','2974','EPSG','3354','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3792','D48 / GK to D96 / TM (16)','Information source gives rotation angle of source CRS axes as 359.9988835539° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-379.658,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.837,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000140367,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0011164461,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 16',1); INSERT INTO "usage" VALUES('EPSG','8930','other_transformation','EPSG','3792','EPSG','3560','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3803','D48 / GK to D96 / TM (17)','Information source gives rotation angle of source CRS axes as 359.9985599438° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-382.138,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.819,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000177148,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0014400562,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 17',1); INSERT INTO "usage" VALUES('EPSG','8931','other_transformation','EPSG','3803','EPSG','3347','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3804','D48 / GK to D96 / TM (18)','Information source gives rotation angle of source CRS axes as 359.9993228929° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-375.995,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',490.833,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000073161,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0006771071,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 18',1); INSERT INTO "usage" VALUES('EPSG','8932','other_transformation','EPSG','3804','EPSG','2584','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3805','D48 / GK to D96 / TM (19)','Information source gives rotation angle of source CRS axes as 359.9975573682° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-381.28,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',505.983,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000118449,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0024426318,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 19',1); INSERT INTO "usage" VALUES('EPSG','8933','other_transformation','EPSG','3805','EPSG','2585','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3806','D48 / GK to D96 / TM (20)','Information source gives rotation angle of source CRS axes as 359.9981683819° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-374.256,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',501.885,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000013456,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0018316181,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 20',1); INSERT INTO "usage" VALUES('EPSG','8934','other_transformation','EPSG','3806','EPSG','2877','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3807','D48 / GK to D96 / TM (21)','Information source gives rotation angle of source CRS axes as 359.9987926666° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-371.329,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.151,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999980009,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0012073334,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 21',1); INSERT INTO "usage" VALUES('EPSG','8935','other_transformation','EPSG','3807','EPSG','2586','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3808','D48 / GK to D96 / TM (22)','Information source gives rotation angle of source CRS axes as 359.9978515930° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-372.573,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',505.578,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999970275,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.002148407,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 22',1); INSERT INTO "usage" VALUES('EPSG','8936','other_transformation','EPSG','3808','EPSG','2587','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3809','D48 / GK to D96 / TM (23)','Information source gives rotation angle of source CRS axes as 359.9980774015° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-371.849,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',503.318,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999967297,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0019225985,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 23',1); INSERT INTO "usage" VALUES('EPSG','8937','other_transformation','EPSG','3809','EPSG','2878','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3810','D48 / GK to D96 / TM (24)','Information source gives rotation angle of source CRS axes as 359.9979842399° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3787','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-371.498,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',504.461,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999956084,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0020157601,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 24',1); INSERT INTO "usage" VALUES('EPSG','8938','other_transformation','EPSG','3810','EPSG','3346','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3895','MGI (Ferro) to MGI (1)','See tfm code 3913 for longitude rotation applied in former Yugoslavia.','EPSG','9601','Longitude rotation','EPSG','4805','EPSG','4312',0.0,'EPSG','8602','Longitude offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut',0); INSERT INTO "usage" VALUES('EPSG','8964','other_transformation','EPSG','3895','EPSG','1037','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','3913','MGI (Ferro) to MGI 1901 (1)','Uses Albrecht 1902 value. See tfm code 3895 for longitude rotation applied in Austria.','EPSG','9601','Longitude rotation','EPSG','4805','EPSG','3906',1.0,'EPSG','8602','Longitude offset',-17.394602,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Yug',0); INSERT INTO "usage" VALUES('EPSG','8971','other_transformation','EPSG','3913','EPSG','2370','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','3929','D48/GK to D96/TM (1)','Information source gives rotation angle of source CRS axes as 359.9990153250° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-378.752,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.395,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000126775,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.000984675,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 1',0); INSERT INTO "usage" VALUES('EPSG','8986','other_transformation','EPSG','3929','EPSG','2578','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3930','D48/GK to D96/TM (2)','Information source gives rotation angle of source CRS axes as 359.9987988952° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-380.322,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',494.216,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.000015768,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0012011048,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 2',0); INSERT INTO "usage" VALUES('EPSG','8987','other_transformation','EPSG','3930','EPSG','2579','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3931','D48/GK to D96/TM (3)','Information source gives rotation angle of source CRS axes as 359.9990080921° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-382.19,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',492.412,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000210585,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0009919079,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 3',0); INSERT INTO "usage" VALUES('EPSG','8988','other_transformation','EPSG','3931','EPSG','2582','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3932','D48/GK to D96/TM (4)','Information source gives rotation angle of source CRS axes as 359.9991387616° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-377.487,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',492.209,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000103303,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0008612384,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 4',0); INSERT INTO "usage" VALUES('EPSG','8989','other_transformation','EPSG','3932','EPSG','2583','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3933','D48/GK to D96/TM (5)','Information source gives rotation angle of source CRS axes as 359.9988083326° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-383.677,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.408,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.000023822,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0011916674,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 5',0); INSERT INTO "usage" VALUES('EPSG','8990','other_transformation','EPSG','3933','EPSG','3348','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3934','D48/GK to D96/TM (6)','Information source gives rotation angle of source CRS axes as 359.9985894280° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-379.867,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.342,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000139529,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.001410572,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 6',0); INSERT INTO "usage" VALUES('EPSG','8991','other_transformation','EPSG','3934','EPSG','2422','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3935','D48/GK to D96/TM (7)','Information source gives rotation angle of source CRS axes as 359.9989361857° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-378.706,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.722,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000128479,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0010638143,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 7',0); INSERT INTO "usage" VALUES('EPSG','8992','other_transformation','EPSG','3935','EPSG','3349','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3936','D48/GK to D96/TM (8)','Information source gives rotation angle of source CRS axes as 359.9990279960° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-376.275,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.231,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000076601,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.000972004,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 8',0); INSERT INTO "usage" VALUES('EPSG','8993','other_transformation','EPSG','3936','EPSG','3350','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3937','D48/GK to D96/TM (9)','Information source gives rotation angle of source CRS axes as 359.9984713141° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-379.883,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',497.465,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000132379,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0015286859,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 9',0); INSERT INTO "usage" VALUES('EPSG','8994','other_transformation','EPSG','3937','EPSG','2580','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3938','D48/GK to D96/TM (10)','Information source gives rotation angle of source CRS axes as 359.9984602820° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-380.127,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',497.52,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000138184,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.001539718,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 10',0); INSERT INTO "usage" VALUES('EPSG','8995','other_transformation','EPSG','3938','EPSG','3345','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3939','D48/GK to D96/TM (11)','Information source gives rotation angle of source CRS axes as 359.9982890576° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-377.965,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',499.354,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000089352,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0017109424,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 11',0); INSERT INTO "usage" VALUES('EPSG','8996','other_transformation','EPSG','3939','EPSG','2581','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3940','D48/GK to D96/TM (12)','Information source gives rotation angle of source CRS axes as 359.9995848956° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-384.455,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',487.979,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000246653,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0004151044,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 12',0); INSERT INTO "usage" VALUES('EPSG','8997','other_transformation','EPSG','3940','EPSG','3351','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3941','D48/GK to D96/TM (13)','Information source gives rotation angle of source CRS axes as 359.9978086208° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-384.415,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',502.308,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000190161,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0021913792,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 13',0); INSERT INTO "usage" VALUES('EPSG','8998','other_transformation','EPSG','3941','EPSG','3352','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3951','D48/GK to D96/TM (14)','Information source gives rotation angle of source CRS axes as 359.9986330172° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-380.84,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',495.612,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000158378,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0013669828,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 14',0); INSERT INTO "usage" VALUES('EPSG','8999','other_transformation','EPSG','3951','EPSG','3353','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3952','D48/GK to D96/TM (15)','Information source gives rotation angle of source CRS axes as 359.9986660539° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-377.812,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.076,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000100475,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0013339461,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 15',0); INSERT INTO "usage" VALUES('EPSG','9000','other_transformation','EPSG','3952','EPSG','3354','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3953','D48/GK to D96/TM (16)','Information source gives rotation angle of source CRS axes as 359.9988835539° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-379.658,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',493.837,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000140367,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0011164461,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 16',0); INSERT INTO "usage" VALUES('EPSG','9001','other_transformation','EPSG','3953','EPSG','3560','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3954','D48/GK to D96/TM (17)','Information source gives rotation angle of source CRS axes as 359.9985599438° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-382.138,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.819,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000177148,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0014400562,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 17',0); INSERT INTO "usage" VALUES('EPSG','9002','other_transformation','EPSG','3954','EPSG','3347','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3955','D48/GK to D96/TM (18)','Information source gives rotation angle of source CRS axes as 359.9993228929° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-375.995,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',490.833,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000073161,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0006771071,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 18',0); INSERT INTO "usage" VALUES('EPSG','9003','other_transformation','EPSG','3955','EPSG','2584','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3956','D48/GK to D96/TM (19)','Information source gives rotation angle of source CRS axes as 359.9975573682° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-381.28,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',505.983,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000118449,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0024426318,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 19',0); INSERT INTO "usage" VALUES('EPSG','9004','other_transformation','EPSG','3956','EPSG','2585','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3957','D48/GK to D96/TM (20)','Information source gives rotation angle of source CRS axes as 359.9981683819° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-374.256,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',501.885,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000013456,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0018316181,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 20',0); INSERT INTO "usage" VALUES('EPSG','9005','other_transformation','EPSG','3957','EPSG','2877','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3958','D48/GK to D96/TM (21)','Information source gives rotation angle of source CRS axes as 359.9987926666° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-371.329,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',496.151,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999980009,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0012073334,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 21',0); INSERT INTO "usage" VALUES('EPSG','9006','other_transformation','EPSG','3958','EPSG','2586','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3959','D48/GK to D96/TM (22)','Information source gives rotation angle of source CRS axes as 359.9978515930° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-372.573,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',505.578,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999970275,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.002148407,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 22',0); INSERT INTO "usage" VALUES('EPSG','9007','other_transformation','EPSG','3959','EPSG','2587','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3960','D48/GK to D96/TM (23)','Information source gives rotation angle of source CRS axes as 359.9980774015° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-371.849,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',503.318,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999967297,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0019225985,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 23',0); INSERT INTO "usage" VALUES('EPSG','9008','other_transformation','EPSG','3960','EPSG','2878','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3961','D48/GK to D96/TM (24)','Information source gives rotation angle of source CRS axes as 359.9979842399° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-371.498,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',504.461,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999956084,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0020157601,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 24',0); INSERT INTO "usage" VALUES('EPSG','9009','other_transformation','EPSG','3961','EPSG','3346','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','4072','Karbala 1979 / UTM zone 38N to IGRS / UTM zone 38N (1)','Used on a temporary basis prior to development of IRQCON. See also Karbala 1979 to WGS 84 (2) (tfm code 5076) for an equivalent tfm using geocentric translations.','EPSG','9656','Cartesian Grid Offsets','EPSG','3392','EPSG','3891',3.0,'EPSG','8728','Easting offset',-287.54,'EPSG','9001','EPSG','8729','Northing offset',278.25,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MWR-Irq prov 2007',0); INSERT INTO "usage" VALUES('EPSG','9034','other_transformation','EPSG','4072','EPSG','3702','EPSG','1239'); INSERT INTO "other_transformation" VALUES('EPSG','4441','NZVD2009 height to One Tree Point 1964 height (1)','Accuracy 0.03m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5767',0.03,'EPSG','8603','Vertical Offset',0.06,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ ONTP',0); INSERT INTO "usage" VALUES('EPSG','9076','other_transformation','EPSG','4441','EPSG','3762','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4442','NZVD2009 height to Auckland 1946 height (1)','Accuracy 0.05m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5759',0.05,'EPSG','8603','Vertical Offset',0.34,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ AUCK',0); INSERT INTO "usage" VALUES('EPSG','9077','other_transformation','EPSG','4442','EPSG','3764','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4443','NZVD2009 height to Moturiki 1953 height (1)','Accuracy 0.06m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5764',0.06,'EPSG','8603','Vertical Offset',0.24,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ MOTU',0); INSERT INTO "usage" VALUES('EPSG','9078','other_transformation','EPSG','4443','EPSG','3768','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4444','NZVD2009 height to Nelson 1955 height (1)','Accuracy 0.07m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5766',0.07,'EPSG','8603','Vertical Offset',0.29,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ NELS',0); INSERT INTO "usage" VALUES('EPSG','9079','other_transformation','EPSG','4444','EPSG','3802','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4445','NZVD2009 height to Gisborne 1926 height (1)','Accuracy 0.02m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5762',0.02,'EPSG','8603','Vertical Offset',0.34,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ GISB',0); INSERT INTO "usage" VALUES('EPSG','9080','other_transformation','EPSG','4445','EPSG','3771','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4446','NZVD2009 height to Napier 1962 height (1)','Accuracy 0.05m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5765',0.05,'EPSG','8603','Vertical Offset',0.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ NAPI',0); INSERT INTO "usage" VALUES('EPSG','9081','other_transformation','EPSG','4446','EPSG','3772','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4447','NZVD2009 height to Taranaki 1970 height (1)','Accuracy 0.05m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5769',0.05,'EPSG','8603','Vertical Offset',0.32,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ TARA',0); INSERT INTO "usage" VALUES('EPSG','9082','other_transformation','EPSG','4447','EPSG','3769','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4448','NZVD2009 height to Wellington 1953 height (1)','Accuracy 0.04m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5770',0.04,'EPSG','8603','Vertical Offset',0.44,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ WELL',0); INSERT INTO "usage" VALUES('EPSG','9083','other_transformation','EPSG','4448','EPSG','3773','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4449','NZVD2009 height to Lyttelton 1937 height (1)','Accuracy 0.09m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5763',0.09,'EPSG','8603','Vertical Offset',0.47,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ LYTT',0); INSERT INTO "usage" VALUES('EPSG','9084','other_transformation','EPSG','4449','EPSG','3804','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4450','NZVD2009 height to Dunedin 1958 height (1)','Accuracy 0.07m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5761',0.07,'EPSG','8603','Vertical Offset',0.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ DUNE',0); INSERT INTO "usage" VALUES('EPSG','9085','other_transformation','EPSG','4450','EPSG','3803','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4451','NZVD2009 height to Bluff 1955 height (1)','Accuracy 0.05m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5760',0.05,'EPSG','8603','Vertical Offset',0.36,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ BLUF',0); INSERT INTO "usage" VALUES('EPSG','9086','other_transformation','EPSG','4451','EPSG','3801','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4452','NZVD2009 height to Stewart Island 1977 height (1)','Accuracy 0.15m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5772',0.15,'EPSG','8603','Vertical Offset',0.39,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ STIS',0); INSERT INTO "usage" VALUES('EPSG','9087','other_transformation','EPSG','4452','EPSG','3338','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4453','NZVD2009 height to Dunedin-Bluff 1960 height (1)','Accuracy 0.04m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','4458',0.04,'EPSG','8603','Vertical Offset',0.38,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ DUBL',0); INSERT INTO "usage" VALUES('EPSG','9088','other_transformation','EPSG','4453','EPSG','3806','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4651','ODN height to EVRF2000 height (1)','Determined at 31 points. RMS residual 0.026m, maximum residual 0.080m.','EPSG','1046','Vertical Offset and Slope','EPSG','5701','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',54.35,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',-2.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.07,'EPSG','9001','EPSG','8730','Inclination in latitude',0.044,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Gbr',0); INSERT INTO "usage" VALUES('EPSG','9118','other_transformation','EPSG','4651','EPSG','2792','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5045','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (4)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-347, dY=180 and dZ=156m. Other maps give different values - see tfm code 5081','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',372.0,'EPSG','9001','EPSG','8729','Northing offset',196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 3',1); INSERT INTO "usage" VALUES('EPSG','9184','other_transformation','EPSG','5045','EPSG','3719','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5046','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (12)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-319, dY=185 and dZ=188m. Other maps give different values - see tfm code 5089.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',229.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 14',1); INSERT INTO "usage" VALUES('EPSG','9185','other_transformation','EPSG','5046','EPSG','3728','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5047','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (13)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-306, dY=196 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 13',1); INSERT INTO "usage" VALUES('EPSG','9186','other_transformation','EPSG','5047','EPSG','3729','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5076','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (18)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-329, dY=176 and dZ=151m. Other maps give different values - see tfm code 5092.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 17',1); INSERT INTO "usage" VALUES('EPSG','9210','other_transformation','EPSG','5076','EPSG','3704','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5079','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (1)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-346, dY=216 and dZ=156m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',386.0,'EPSG','9001','EPSG','8729','Northing offset',204.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 1',1); INSERT INTO "usage" VALUES('EPSG','9213','other_transformation','EPSG','5079','EPSG','3714','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5080','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (2)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-351, dY=190 and dZ=171m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',383.0,'EPSG','9001','EPSG','8729','Northing offset',205.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 2',1); INSERT INTO "usage" VALUES('EPSG','9214','other_transformation','EPSG','5080','EPSG','3717','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5081','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (3)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-351, dY=184 and dZ=156m. Other maps give different values - see tfm code 5045.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',378.0,'EPSG','9001','EPSG','8729','Northing offset',196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 3',1); INSERT INTO "usage" VALUES('EPSG','9215','other_transformation','EPSG','5081','EPSG','3719','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5082','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (5)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations fromn Nahrwan 1967 to Karbala 1979 of dX=-337, dY=192 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',375.0,'EPSG','9001','EPSG','8729','Northing offset',200.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 5',1); INSERT INTO "usage" VALUES('EPSG','9216','other_transformation','EPSG','5082','EPSG','3701','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5083','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (6)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-335, dY=181 and dZ=183m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',365.0,'EPSG','9001','EPSG','8729','Northing offset',196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 6',1); INSERT INTO "usage" VALUES('EPSG','9217','other_transformation','EPSG','5083','EPSG','3715','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5084','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (7)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-345, dY=182 and dZ=152m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',373.0,'EPSG','9001','EPSG','8729','Northing offset',191.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 7',1); INSERT INTO "usage" VALUES('EPSG','9218','other_transformation','EPSG','5084','EPSG','3718','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5085','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (8)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-313, dY=203 and dZ=173m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 8',1); INSERT INTO "usage" VALUES('EPSG','9219','other_transformation','EPSG','5085','EPSG','3722','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5086','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (9)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-320 dY=197 and dZ=167m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 9',1); INSERT INTO "usage" VALUES('EPSG','9220','other_transformation','EPSG','5086','EPSG','3723','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5087','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (10)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-323, dY=179 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',200.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 10',1); INSERT INTO "usage" VALUES('EPSG','9221','other_transformation','EPSG','5087','EPSG','3724','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5088','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (11)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-330, dY=176 and dZ=162m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',195.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 11',1); INSERT INTO "usage" VALUES('EPSG','9222','other_transformation','EPSG','5088','EPSG','3725','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5089','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (14)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-325, dY=192 and dZ=188m. Other maps give different values - see tfm code 5046.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',229.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 14',1); INSERT INTO "usage" VALUES('EPSG','9223','other_transformation','EPSG','5089','EPSG','3728','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5090','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (15)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-322, dY=178 and dZ=182m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',208.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 15',1); INSERT INTO "usage" VALUES('EPSG','9224','other_transformation','EPSG','5090','EPSG','3709','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5091','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (16)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-325, dY=163 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 16',1); INSERT INTO "usage" VALUES('EPSG','9225','other_transformation','EPSG','5091','EPSG','3695','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5092','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (17)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-338, dY=166 and dZ=173m. Other maps give different values - see tfm code 5076.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',211.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 17',1); INSERT INTO "usage" VALUES('EPSG','9226','other_transformation','EPSG','5092','EPSG','3704','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5093','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (19)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-303, dY=185 and dZ=163m. Other maps give different values - see tfm code 5098.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',183.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 19',1); INSERT INTO "usage" VALUES('EPSG','9227','other_transformation','EPSG','5093','EPSG','3706','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5094','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (20)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-319, dY=186 and dZ=160m. Other maps give different values - see tfm code 5099.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',186.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 20',1); INSERT INTO "usage" VALUES('EPSG','9228','other_transformation','EPSG','5094','EPSG','3708','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5095','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (21)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-324, dY=178 and dZ=154m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',185.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 21',1); INSERT INTO "usage" VALUES('EPSG','9229','other_transformation','EPSG','5095','EPSG','3710','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5096','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (24)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-313, dY=193 and dZ=153m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',175.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 24',1); INSERT INTO "usage" VALUES('EPSG','9230','other_transformation','EPSG','5096','EPSG','3711','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5097','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (25)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-308, dY=177 and dZ=146m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',343.0,'EPSG','9001','EPSG','8729','Northing offset',175.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 25',1); INSERT INTO "usage" VALUES('EPSG','9231','other_transformation','EPSG','5097','EPSG','3712','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5098','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (22)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-304, dY=184 and dZ=166m. Other maps give different values - see tfm code 5093.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',186.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 19',1); INSERT INTO "usage" VALUES('EPSG','9232','other_transformation','EPSG','5098','EPSG','3706','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5099','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (23)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-320, dY=185 and dZ=162m. Other maps give different values - see tfm code 5094.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 20',1); INSERT INTO "usage" VALUES('EPSG','9233','other_transformation','EPSG','5099','EPSG','3708','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','5133','Tokyo 1892 to Tokyo (1)','Caused by redetermination of longitude of Tokyo datum fundamental point in 1918.','EPSG','9601','Longitude rotation','EPSG','5132','EPSG','4301',0.0,'EPSG','8602','Longitude offset',10.405,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn',0); INSERT INTO "usage" VALUES('EPSG','9240','other_transformation','EPSG','5133','EPSG','1364','EPSG','1027'); INSERT INTO "other_transformation" VALUES('EPSG','5134','Tokyo 1892 to Korean 1985 (1)','Caused by redetermination of longitude of Tokyo datum origin in 1918. Korean 1985 is based on the 1918 determination.','EPSG','9601','Longitude rotation','EPSG','5132','EPSG','4162',0.0,'EPSG','8602','Longitude offset',10.405,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Kor',0); INSERT INTO "usage" VALUES('EPSG','9241','other_transformation','EPSG','5134','EPSG','3266','EPSG','1027'); INSERT INTO "other_transformation" VALUES('EPSG','5166','ED50 / UTM zone 31N to ETRS89 / UTM zone 31N (1)','ICC publishes as two tfms, code 100800400 for ED50 to ETRS89 and code 800100400 for reverse when ordinate 1 = 129.547m, ordinate 2 = 208.186m, dS = 0.9999984496 and rotation = -1.56504". See ED50 to ETRS89 (14) (code 5661) for emulation using NTv2.','EPSG','9621','Similarity transformation','EPSG','23031','EPSG','25831',0.05,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-129.549,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',-208.185,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',1.0000015504,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',1.56504,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICC-Esp Cat',0); INSERT INTO "usage" VALUES('EPSG','9273','other_transformation','EPSG','5166','EPSG','3732','EPSG','1079'); INSERT INTO "other_transformation" VALUES('EPSG','5196','HVRS71 height to EVRF2000 height (1)','Determined at 46 points. RMS residual 0.008m, maximum residual 0.016m.','EPSG','1046','Vertical Offset and Slope','EPSG','5610','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',45.21,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',16.22,'EPSG','9110','EPSG','8603','Vertical Offset',-0.343,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.007,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.016,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hrv',0); INSERT INTO "usage" VALUES('EPSG','9279','other_transformation','EPSG','5196','EPSG','3234','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5197','HVRS71 height to EVRF2007 height (1)','Determined at 46 points. RMS residual 0.008m, maximum residual 0.017m.','EPSG','1046','Vertical Offset and Slope','EPSG','5610','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',45.21,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',16.22,'EPSG','9110','EPSG','8603','Vertical Offset',-0.313,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.016,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.018,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hrv',0); INSERT INTO "usage" VALUES('EPSG','9280','other_transformation','EPSG','5197','EPSG','3234','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5198','Ostend height to EVRF2000 height (1)','Determined at 4 points. RMS residual 0.002m, maximum residual 0.002m.','EPSG','1046','Vertical Offset and Slope','EPSG','5710','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',50.43,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',4.46,'EPSG','9110','EPSG','8603','Vertical Offset',-2.311,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.016,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel',0); INSERT INTO "usage" VALUES('EPSG','9281','other_transformation','EPSG','5198','EPSG','1347','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5199','Ostend height to EVRF2007 height (1)','Determined at 4 points. RMS residual 0.002m, maximum residual 0.002m.','EPSG','1046','Vertical Offset and Slope','EPSG','5710','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',50.43,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',4.46,'EPSG','9110','EPSG','8603','Vertical Offset',-2.317,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.031,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel',0); INSERT INTO "usage" VALUES('EPSG','9282','other_transformation','EPSG','5199','EPSG','1347','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5200','Baltic 1982 height to EVRF2007 height (1)','Determined at 58 points. RMS residual 0.002m, maximum residual 0.005m.','EPSG','1046','Vertical Offset and Slope','EPSG','5786','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.373,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.2236,'EPSG','9110','EPSG','8603','Vertical Offset',0.228,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.009,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.003,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr',0); INSERT INTO "usage" VALUES('EPSG','9283','other_transformation','EPSG','5200','EPSG','3224','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5201','Baltic 1957 height to EVRF2000 height (4)','Determined at 53 points. RMS residual 0.014m, maximum residual 0.035m.','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.116,'EPSG','9001','EPSG','8730','Inclination in latitude',0.036,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); INSERT INTO "usage" VALUES('EPSG','9284','other_transformation','EPSG','5201','EPSG','1079','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5202','Baltic 1957 height to EVRF2007 height (1)','Determined at 60 points. RMS residual 0.011m, maximum residual 0.025m.','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.13,'EPSG','9001','EPSG','8730','Inclination in latitude',0.026,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); INSERT INTO "usage" VALUES('EPSG','9285','other_transformation','EPSG','5202','EPSG','1079','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5203','Baltic 1977 height to EVRF2007 height (2)','Determined at 52 points. RMS residual 0.004m, maximum residual 0.007m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',58.42,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.52,'EPSG','9110','EPSG','8603','Vertical Offset',0.195,'EPSG','9001','EPSG','8730','Inclination in latitude',0.009,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.013,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Est',0); INSERT INTO "usage" VALUES('EPSG','9286','other_transformation','EPSG','5203','EPSG','3246','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5204','Baltic 1977 height to EVRF2007 height (3)','Determined at 30 points. RMS residual 0.013m, maximum residual 0.022m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',55.18,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.01,'EPSG','9110','EPSG','8603','Vertical Offset',0.121,'EPSG','9001','EPSG','8730','Inclination in latitude',0.053,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ltu',0); INSERT INTO "usage" VALUES('EPSG','9287','other_transformation','EPSG','5204','EPSG','3272','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5205','Constanta height to EVRF2000 height (1)','Determined at 46 points. RMS residual 0.002m, maximum residual 0.009m.','EPSG','1046','Vertical Offset and Slope','EPSG','5781','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.01,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.49,'EPSG','9110','EPSG','8603','Vertical Offset',0.028,'EPSG','9001','EPSG','8730','Inclination in latitude',0.002,'EPSG','9104','EPSG','8731','Inclination in longitude',0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou',0); INSERT INTO "usage" VALUES('EPSG','9288','other_transformation','EPSG','5205','EPSG','3295','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5206','Constanta height to EVRF2007 height (1)','Determined at 48 points. RMS residual 0.004m, maximum residual 0.013m.','EPSG','1046','Vertical Offset and Slope','EPSG','5781','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.01,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.49,'EPSG','9110','EPSG','8603','Vertical Offset',0.062,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.005,'EPSG','9104','EPSG','8731','Inclination in longitude',0.008,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou',0); INSERT INTO "usage" VALUES('EPSG','9289','other_transformation','EPSG','5206','EPSG','3295','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5207','LN02 height to EVRF2007 height (1)','Determined at 240 points. RMS residual 0.031m, maximum residual 0.085m','EPSG','1046','Vertical Offset and Slope','EPSG','5728','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.11,'EPSG','9110','EPSG','8603','Vertical Offset',-0.225,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.221,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.033,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che',0); INSERT INTO "usage" VALUES('EPSG','9290','other_transformation','EPSG','5207','EPSG','1286','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5208','RH2000 height to EVRF2007 height (1)','Determined at 3353 points. RMS residual 0.001m, maximum residual 0.004m.','EPSG','1046','Vertical Offset and Slope','EPSG','5613','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',61.54,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.48,'EPSG','9110','EPSG','8603','Vertical Offset',-0.008,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.0006,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.0003,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe',0); INSERT INTO "usage" VALUES('EPSG','9291','other_transformation','EPSG','5208','EPSG','3313','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5209','Baltic 1977 height to EVRF2000 height (5)','Determined at 123 points. RMS residual 0.007m, maximum residual 0.022m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.58,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.53,'EPSG','9110','EPSG','8603','Vertical Offset',0.105,'EPSG','9001','EPSG','8730','Inclination in latitude',0.0,'EPSG','9104','EPSG','8731','Inclination in longitude',0.004,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva',0); INSERT INTO "usage" VALUES('EPSG','9292','other_transformation','EPSG','5209','EPSG','3268','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5210','Baltic 1977 height to EVRF2007 height (4)','Determined at 122 points. RMS residual 0.007m, maximum residual 0.019m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.58,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.53,'EPSG','9110','EPSG','8603','Vertical Offset',0.154,'EPSG','9001','EPSG','8730','Inclination in latitude',0.016,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.012,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva',0); INSERT INTO "usage" VALUES('EPSG','9293','other_transformation','EPSG','5210','EPSG','3268','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5211','DHHN92 height to EVRF2007 height (1)','Determined at 427 points. RMS residual 0.002m, maximum residual 0.007m.','EPSG','1046','Vertical Offset and Slope','EPSG','5783','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',10.13,'EPSG','9110','EPSG','8603','Vertical Offset',0.015,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.01,'EPSG','9104','EPSG','8731','Inclination in longitude',0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu',0); INSERT INTO "usage" VALUES('EPSG','9294','other_transformation','EPSG','5211','EPSG','3339','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5212','DHHN85 height to EVRF2007 height (1)','Determined at 357 points. RMS residual 0.004m, maximum residual 0.012m.','EPSG','1046','Vertical Offset and Slope','EPSG','5784','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.4,'EPSG','9110','EPSG','8603','Vertical Offset',0.017,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.011,'EPSG','9104','EPSG','8731','Inclination in longitude',0.005,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu W',0); INSERT INTO "usage" VALUES('EPSG','9295','other_transformation','EPSG','5212','EPSG','2326','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5213','Genoa 1942 height to EVRF2000 height (1)','Determined at 40 points. RMS residual 0.035m, maximum residual 0.086m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.35,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',12.58,'EPSG','9110','EPSG','8603','Vertical Offset',-0.309,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.03,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita pen',0); INSERT INTO "usage" VALUES('EPSG','9296','other_transformation','EPSG','5213','EPSG','2372','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5215','Genoa 1942 height to EVRF2007 height (1)','Determined at 47 points. RMS residual 0.035m, maximum residual 0.088m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.35,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',12.58,'EPSG','9110','EPSG','8603','Vertical Offset',-0.259,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.036,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita pen',0); INSERT INTO "usage" VALUES('EPSG','9297','other_transformation','EPSG','5215','EPSG','2372','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5216','Genoa 1942 height to EVRF2000 height (2)','Determined at 4 points. RMS residual 0.026m, maximum residual 0.020m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',37.3,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.18,'EPSG','9110','EPSG','8603','Vertical Offset',-0.402,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.079,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita Sci',0); INSERT INTO "usage" VALUES('EPSG','9298','other_transformation','EPSG','5216','EPSG','2340','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5217','Genoa 1942 height to EVRF2007 height (2)','Determined at 6 points. RMS residual 0.021m, maximum residual 0.032m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',37.3,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.18,'EPSG','9110','EPSG','8603','Vertical Offset',-0.333,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.051,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita Sci',0); INSERT INTO "usage" VALUES('EPSG','9299','other_transformation','EPSG','5217','EPSG','2340','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5238','S-JTSK/05 (Ferro) to S-JTSK/05 (1)','','EPSG','9601','Longitude rotation','EPSG','5229','EPSG','5228',0.0,'EPSG','8602','Longitude offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cze',0); INSERT INTO "usage" VALUES('EPSG','9310','other_transformation','EPSG','5238','EPSG','1079','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','5241','S-JTSK to S-JTSK/05 (1)','S-JTSK/05 is derived from the R05 realisation of ETRS89 and constrained to be coincident with S-JTSK.','EPSG','9619','Geographic2D offsets','EPSG','4156','EPSG','5228',0.0,'EPSG','8601','Latitude offset',0.0,'EPSG','9104','EPSG','8602','Longitude offset',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CUZK-Cze',0); INSERT INTO "usage" VALUES('EPSG','9313','other_transformation','EPSG','5241','EPSG','1079','EPSG','1113'); INSERT INTO "other_transformation" VALUES('EPSG','5400','Baltic height to Caspian depth (1)','Baltic datum plane is 28m above Caspian datum plane.','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5706',0.0,'EPSG','8603','Vertical Offset',-28.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Caspian Sea',1); INSERT INTO "usage" VALUES('EPSG','9368','other_transformation','EPSG','5400','EPSG','1291','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','5401','Belfast to Malin Head','Belfast datum is 37mm above Malin Head datum.','EPSG','9616','Vertical Offset','EPSG','5732','EPSG','5731',0.01,'EPSG','8603','Vertical Offset',-0.037,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSNI-Gbr NI',1); INSERT INTO "usage" VALUES('EPSG','9369','other_transformation','EPSG','5401','EPSG','1305','EPSG','1208'); INSERT INTO "other_transformation" VALUES('EPSG','5402','Baltic height to AIOC95 depth (1)','Baltic datum plane is 26.3m above AIOC95 datum plane.','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5734',0.0,'EPSG','8603','Vertical Offset',-26.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'AIOC95-Aze',1); INSERT INTO "usage" VALUES('EPSG','9370','other_transformation','EPSG','5402','EPSG','2592','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5403','AIOC95 depth to Caspian depth (1)','The AIOC95 vertical reference surface is 1.7m above the Caspian vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5734','EPSG','5706',0.0,'EPSG','8603','Vertical Offset',-1.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'AIOC95-Aze',0); INSERT INTO "usage" VALUES('EPSG','9371','other_transformation','EPSG','5403','EPSG','2592','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','5404','Baltic to Black Sea (1)','Baltic datum is 0.4m above Black Sea datum.','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5735',0.0,'EPSG','8603','Vertical Offset',-0.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Black Sea',1); INSERT INTO "usage" VALUES('EPSG','9372','other_transformation','EPSG','5404','EPSG','1102','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5405','Hong Kong Principal height to Hong Kong Chart depth (1)','HKPD is 0.146m above chart datum.','EPSG','9616','Vertical Offset','EPSG','5738','EPSG','5739',0.0,'EPSG','8603','Vertical Offset',0.146,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SMO-HK',1); INSERT INTO "usage" VALUES('EPSG','9373','other_transformation','EPSG','5405','EPSG','1118','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','5406','Belfast to Malin Head (1)','Belfast datum is 37mm below Malin Head datum.','EPSG','9616','Vertical Offset','EPSG','5732','EPSG','5731',0.01,'EPSG','8603','Vertical Offset',0.037,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSNI-Gbr NI',1); INSERT INTO "usage" VALUES('EPSG','9374','other_transformation','EPSG','5406','EPSG','1305','EPSG','1208'); INSERT INTO "other_transformation" VALUES('EPSG','5407','Poolbeg to Malin Head (1)','Poolbeg datum is 2.7m below Malin Head datum. Transformations are subject to localised anomalies.','EPSG','9616','Vertical Offset','EPSG','5754','EPSG','5731',0.1,'EPSG','8603','Vertical Offset',2.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire',1); INSERT INTO "usage" VALUES('EPSG','9375','other_transformation','EPSG','5407','EPSG','1305','EPSG','1142'); INSERT INTO "other_transformation" VALUES('EPSG','5408','Poolbeg to Belfast (1)','Poolbeg datum is 2.7m below Belfast datum. Transformations are subject to localised anomalies.','EPSG','9616','Vertical Offset','EPSG','5754','EPSG','5732',0.1,'EPSG','8603','Vertical Offset',2.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSNI-Gbr NI',1); INSERT INTO "usage" VALUES('EPSG','9376','other_transformation','EPSG','5408','EPSG','1305','EPSG','1208'); INSERT INTO "other_transformation" VALUES('EPSG','5412','KOC CD to Kuwait PWD (1)','Construction datum is 0.49m below PWD datum.','EPSG','9616','Vertical Offset','EPSG','5790','EPSG','5788',0.1,'EPSG','8603','Vertical Offset',0.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',1); INSERT INTO "usage" VALUES('EPSG','9380','other_transformation','EPSG','5412','EPSG','1136','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5413','KOC CD height to KOC WD depth (1)','Construction Datum datum plane is 4.74m (15.55ft) below Well Datum datum plane.','EPSG','9616','Vertical Offset','EPSG','5790','EPSG','5789',0.1,'EPSG','8603','Vertical Offset',4.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',1); INSERT INTO "usage" VALUES('EPSG','9381','other_transformation','EPSG','5413','EPSG','3267','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5414','KOC WD to Kuwait PWD (1)','Well datum is 4.25m above PWD datum.','EPSG','9616','Vertical Offset','EPSG','5789','EPSG','5788',0.1,'EPSG','8603','Vertical Offset',-4.25,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',1); INSERT INTO "usage" VALUES('EPSG','9382','other_transformation','EPSG','5414','EPSG','1136','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5415','GHA height to EVRF2000 height (1)','Determined at 114 points. RMS residual 0.031m, maximum residual 0.061m.','EPSG','1046','Vertical Offset and Slope','EPSG','5778','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',47.32,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.27,'EPSG','9110','EPSG','8603','Vertical Offset',-0.356,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.057,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.058,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut',0); INSERT INTO "usage" VALUES('EPSG','9383','other_transformation','EPSG','5415','EPSG','1037','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5416','Baltic 1982 height to EVRF2000 height (1)','Determined at 36 points. RMS residual 0.002m, maximum residual 0.006m.','EPSG','1046','Vertical Offset and Slope','EPSG','5786','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.373,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.2236,'EPSG','9110','EPSG','8603','Vertical Offset',0.182,'EPSG','9001','EPSG','8730','Inclination in latitude',0.001,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.004,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr',0); INSERT INTO "usage" VALUES('EPSG','9384','other_transformation','EPSG','5416','EPSG','3224','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5417','DNN height to EVRF2000 height (1)','Determined at 707 points. RMS residual 0.003m, maximum residual 0.009m.','EPSG','1046','Vertical Offset and Slope','EPSG','5733','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.02,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',9.14,'EPSG','9110','EPSG','8603','Vertical Offset',0.011,'EPSG','9001','EPSG','8730','Inclination in latitude',0.003,'EPSG','9104','EPSG','8731','Inclination in longitude',0.011,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Den',0); INSERT INTO "usage" VALUES('EPSG','9385','other_transformation','EPSG','5417','EPSG','3237','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5419','NGF-IGN69 height to EVRF2000 height (1)','Determined at 8 points. RMS residual 0.005m, maximum residual 0.010m. The IGN69 vertical reference surface is below the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5720','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',-0.486,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Fra',0); INSERT INTO "usage" VALUES('EPSG','9387','other_transformation','EPSG','5419','EPSG','1326','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5420','DHHN92 height to EVRF2000 height (1)','Determined at 443 points. RMS residual 0.002m, maximum residual 0.007m.','EPSG','1046','Vertical Offset and Slope','EPSG','5783','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',10.13,'EPSG','9110','EPSG','8603','Vertical Offset',0.014,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.001,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu',0); INSERT INTO "usage" VALUES('EPSG','9388','other_transformation','EPSG','5420','EPSG','3339','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5421','DHHN85 height to EVRF2000 height (1)','Determined at 363 points. RMS residual 0.004m, maximum residual 0.026m.','EPSG','1046','Vertical Offset and Slope','EPSG','5784','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.4,'EPSG','9110','EPSG','8603','Vertical Offset',0.017,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.002,'EPSG','9104','EPSG','8731','Inclination in longitude',0.003,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu W',0); INSERT INTO "usage" VALUES('EPSG','9389','other_transformation','EPSG','5421','EPSG','2326','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5422','SNN76 height to EVRF2000 height (1)','Determined at 73 points. RMS residual 0.004m, maximum residual 0.011m.','EPSG','1046','Vertical Offset and Slope','EPSG','5785','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',52.32,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',13.1,'EPSG','9110','EPSG','8603','Vertical Offset',0.157,'EPSG','9001','EPSG','8730','Inclination in latitude',0.007,'EPSG','9104','EPSG','8731','Inclination in longitude',0.005,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu E',0); INSERT INTO "usage" VALUES('EPSG','9390','other_transformation','EPSG','5422','EPSG','1343','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5424','EOMA 1980 height to EVRF2000 height (1)','Determined at 35 points. RMS residual 0.003m.','EPSG','1046','Vertical Offset and Slope','EPSG','5787','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.59,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',19.35,'EPSG','9110','EPSG','8603','Vertical Offset',0.14,'EPSG','9001','EPSG','8730','Inclination in latitude',0.008,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hun',0); INSERT INTO "usage" VALUES('EPSG','9392','other_transformation','EPSG','5424','EPSG','1119','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5425','NAP height to EVRF2000 height (1)','Determined at 757 points. RMS residual 0.002m, maximum residual 0.021m. The NAP vertical reference surface is below the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5709','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',-0.005,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Nld',0); INSERT INTO "usage" VALUES('EPSG','9393','other_transformation','EPSG','5425','EPSG','1275','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5426','NN54 height to EVRF2000 height (1)','Determined at 117 points. RMS residual 0.037m, maximum residual 0.076m.','EPSG','1046','Vertical Offset and Slope','EPSG','5776','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',62.56,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',11.1,'EPSG','9110','EPSG','8603','Vertical Offset',-0.001,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.01,'EPSG','9104','EPSG','8731','Inclination in longitude',0.034,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Nor',0); INSERT INTO "usage" VALUES('EPSG','9394','other_transformation','EPSG','5426','EPSG','1352','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5427','Cascais height to EVRF2000 height (1)','Determined at 5 points. RMS residual 0.013m, maximum residual 0.021m. The Cascais vertical reference surface is below the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5780','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',-0.315,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Prt',0); INSERT INTO "usage" VALUES('EPSG','9395','other_transformation','EPSG','5427','EPSG','1294','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5428','SVS2000 height to EVRF2000 height (1)','Determined at 9 points. RMS residual 0.003m, maximum residual 0.004m.','EPSG','1046','Vertical Offset and Slope','EPSG','5779','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.0,'EPSG','9102','EPSG','8618','Ordinate 2 of evaluation point',15.0,'EPSG','9102','EPSG','8603','Vertical Offset',-0.411,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.033,'EPSG','9104','EPSG','8731','Inclination in longitude',0.008,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn',0); INSERT INTO "usage" VALUES('EPSG','9396','other_transformation','EPSG','5428','EPSG','3307','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5429','Alicante height to EVRF2000 height (1)','Determined at 70 points. RMS residual 0.010m.','EPSG','1046','Vertical Offset and Slope','EPSG','5782','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',40.462,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',-3.3935,'EPSG','9110','EPSG','8603','Vertical Offset',-0.486,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.003,'EPSG','9104','EPSG','8731','Inclination in longitude',0.006,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Esp',0); INSERT INTO "usage" VALUES('EPSG','9397','other_transformation','EPSG','5429','EPSG','4188','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5430','RH70 height to EVRF2000 height (1)','Determined at 21 points. RMS residual 0.011m, maximum residual 0.023m. Not recognised by National Land Survey of Sweden. No longer supported by information source.','EPSG','1046','Vertical Offset and Slope','EPSG','5718','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',64.0,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',16.14,'EPSG','9110','EPSG','8603','Vertical Offset',0.005,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.012,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe',0); INSERT INTO "usage" VALUES('EPSG','9398','other_transformation','EPSG','5430','EPSG','3313','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5431','LN02 height to EVRF2000 height (1)','Determined at 225 points. RMS residual 0.033m, maximum residual 0.094m','EPSG','1046','Vertical Offset and Slope','EPSG','5728','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.11,'EPSG','9110','EPSG','8603','Vertical Offset',-0.245,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.21,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.032,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che',0); INSERT INTO "usage" VALUES('EPSG','9399','other_transformation','EPSG','5431','EPSG','1286','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5432','N60 height to EVRF2000 height (1)','Determined at 66 points. RMS residual 0.003m, maximum residual 0.009m. The N60 vertical reference surface is above the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5717','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',0.213,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Fin',0); INSERT INTO "usage" VALUES('EPSG','9400','other_transformation','EPSG','5432','EPSG','3333','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5435','Baltic 1957 height to EVRF2000 height (3)','Determined at 3 points. RMS residual 0.002m, maximum residual 0.001m.','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',48.38,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',19.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.122,'EPSG','9001','EPSG','8730','Inclination in latitude',0.02,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svk',0); INSERT INTO "usage" VALUES('EPSG','9403','other_transformation','EPSG','5435','EPSG','1211','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5436','Baltic 1977 height to EVRF2000 height (1)','Determined at 36 points. RMS residual 0.003m, maximum residual 0.005m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',58.42,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.52,'EPSG','9110','EPSG','8603','Vertical Offset',0.133,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.014,'EPSG','9104','EPSG','8731','Inclination in longitude',0.005,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Est',0); INSERT INTO "usage" VALUES('EPSG','9404','other_transformation','EPSG','5436','EPSG','3246','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5437','Baltic 1977 height to EVRF2000 height (2)','Determined at 46 points. RMS residual 0.002m, maximum residual 0.003m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',55.18,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.01,'EPSG','9110','EPSG','8603','Vertical Offset',0.102,'EPSG','9001','EPSG','8730','Inclination in latitude',0.0,'EPSG','9104','EPSG','8731','Inclination in longitude',0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ltu',0); INSERT INTO "usage" VALUES('EPSG','9405','other_transformation','EPSG','5437','EPSG','3272','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5438','Baltic 1977 height to Caspian height (1)','Baltic 1977 vertical reference surface is 28m above Caspian vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5611',0.0,'EPSG','8603','Vertical Offset',28.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Caspian Sea',0); INSERT INTO "usage" VALUES('EPSG','9406','other_transformation','EPSG','5438','EPSG','1291','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5440','Baltic 1977 depth to Caspian depth (1)','The Baltic 1977 vertical reference surface is 28m above the Caspian vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5612','EPSG','5706',0.0,'EPSG','8603','Vertical Offset',-28.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Caspian Sea',0); INSERT INTO "usage" VALUES('EPSG','9408','other_transformation','EPSG','5440','EPSG','1291','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5441','Baltic depth to Caspian height (1)','The Baltic vertical reference surface is 28m above the Caspian vetyical reference surface.','EPSG','9616','Vertical Offset','EPSG','5612','EPSG','5611',0.0,'EPSG','8603','Vertical Offset',28.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Caspian Sea',1); INSERT INTO "usage" VALUES('EPSG','9409','other_transformation','EPSG','5441','EPSG','1291','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','5442','Baltic height to Baltic depth (1)','','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5612',0.0,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-FSU',1); INSERT INTO "usage" VALUES('EPSG','9410','other_transformation','EPSG','5442','EPSG','1284','EPSG','1212'); INSERT INTO "other_transformation" VALUES('EPSG','5443','Baltic 1977 height to AIOC95 height (1)','Baltic 1977 vertical reference surface is 26.3m above AIOC95 surface.','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5797',0.0,'EPSG','8603','Vertical Offset',26.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'AIOC95-Aze',0); INSERT INTO "usage" VALUES('EPSG','9411','other_transformation','EPSG','5443','EPSG','2592','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5445','Baltic 1977 depth to AIOC95 depth (1)','The Baltic 1977 vertical reference surface is 26.3m above the AIOC95 surface.','EPSG','9616','Vertical Offset','EPSG','5612','EPSG','5734',0.0,'EPSG','8603','Vertical Offset',-26.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'AIOC95-Aze',0); INSERT INTO "usage" VALUES('EPSG','9413','other_transformation','EPSG','5445','EPSG','2592','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','5446','Baltic depth to AIOC95 height (1)','Baltic datum plane is 26.3m above AIOC95 datum plane.','EPSG','9616','Vertical Offset','EPSG','5612','EPSG','5797',0.0,'EPSG','8603','Vertical Offset',26.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'AIOC95-Aze',1); INSERT INTO "usage" VALUES('EPSG','9414','other_transformation','EPSG','5446','EPSG','2592','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5447','Baltic 1977 height to Black Sea height (1)','Baltic 1977 vertical reference surface is 0.4m above Black Sea surface.','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5735',0.0,'EPSG','8603','Vertical Offset',0.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Black Sea',0); INSERT INTO "usage" VALUES('EPSG','9415','other_transformation','EPSG','5447','EPSG','3251','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5448','Poolbeg height to Malin Head height (1)','Poolbeg datum plane is 2.7m below Malin Head datum plane. Transformations are subject to localised anomalies.','EPSG','9616','Vertical Offset','EPSG','5754','EPSG','5731',0.1,'EPSG','8603','Vertical Offset',-2.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire',1); INSERT INTO "usage" VALUES('EPSG','9416','other_transformation','EPSG','5448','EPSG','1305','EPSG','1142'); INSERT INTO "other_transformation" VALUES('EPSG','5449','Poolbeg height to Belfast height (1)','Poolbeg datum plane is 2.7m below Belfast datum plane. Transformations are subject to localised anomalies.','EPSG','9616','Vertical Offset','EPSG','5754','EPSG','5732',0.1,'EPSG','8603','Vertical Offset',-2.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSNI-Gbr NI',1); INSERT INTO "usage" VALUES('EPSG','9417','other_transformation','EPSG','5449','EPSG','2530','EPSG','1208'); INSERT INTO "other_transformation" VALUES('EPSG','5450','KOC CD height to Kuwait PWD height (1)','The KOC CD vertical reference surface is 0.49m below the PWD surface.','EPSG','9616','Vertical Offset','EPSG','5790','EPSG','5788',0.1,'EPSG','8603','Vertical Offset',-0.49,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',0); INSERT INTO "usage" VALUES('EPSG','9418','other_transformation','EPSG','5450','EPSG','3267','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5452','Belfast height to Malin Head height (1)','Belfast vertical reference surface is 37mm below Malin Head surface.','EPSG','9616','Vertical Offset','EPSG','5732','EPSG','5731',0.01,'EPSG','8603','Vertical Offset',-0.037,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSNI-Gbr NI',0); INSERT INTO "usage" VALUES('EPSG','9419','other_transformation','EPSG','5452','EPSG','2530','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5453','KOC CD height to KOC WD depth (ft) (1)','Construction Datum datum plane is 4.74m (15.55ft) below Well Datum datum plane.','EPSG','9616','Vertical Offset','EPSG','5790','EPSG','5614',0.1,'EPSG','8603','Vertical Offset',15.55,'EPSG','9002',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',1); INSERT INTO "usage" VALUES('EPSG','9420','other_transformation','EPSG','5453','EPSG','3267','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','5454','HKPD height to HKCD depth (1)','HKPD datum plane is 0.146m above HKCD datum plane.','EPSG','9616','Vertical Offset','EPSG','5738','EPSG','5739',0.0,'EPSG','8603','Vertical Offset',-0.146,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SMO-HK',1); INSERT INTO "usage" VALUES('EPSG','9421','other_transformation','EPSG','5454','EPSG','1118','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','5455','KOC WD depth to Kuwait PWD height (1)','Well Datum datum plane is 4.25m above PWD datum plane.','EPSG','9616','Vertical Offset','EPSG','5789','EPSG','5788',0.1,'EPSG','8603','Vertical Offset',4.25,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',1); INSERT INTO "usage" VALUES('EPSG','9422','other_transformation','EPSG','5455','EPSG','3267','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5557','GHA height to EVRF2007 height (1)','Determined at 108 points. RMS residual 0.032m, maximum residual 0.063m.','EPSG','1046','Vertical Offset and Slope','EPSG','5778','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',47.32,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.27,'EPSG','9110','EPSG','8603','Vertical Offset',-0.335,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.065,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.06,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut',0); INSERT INTO "usage" VALUES('EPSG','9471','other_transformation','EPSG','5557','EPSG','1037','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','6699','JGD2000 (vertical) height to JGD2011 (vertical) height (1)','Excludes areas of eastern Honshu affected by 2008 Iwate-Miyagi and 2011 Tohoku earthquakes (Aomori, Iwate, Miyagi, Akita, Yamagata, Fukushima and Ibaraki prefectures).','EPSG','9616','Vertical Offset','EPSG','6694','EPSG','6695',0.01,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn ex E Honshu',0); INSERT INTO "usage" VALUES('EPSG','9735','other_transformation','EPSG','6699','EPSG','4165','EPSG','1235'); INSERT INTO "other_transformation" VALUES('EPSG','6724','CIG85 to GDA94 / MGA zone 48','Accuracy estimated as sub-metre in northeast of island and variable up to 8m in west and south.','EPSG','9656','Cartesian Grid Offsets','EPSG','6715','EPSG','28348',5.0,'EPSG','8728','Easting offset',550015.0,'EPSG','9001','EPSG','8729','Northing offset',8780001.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GA-Cxr',0); INSERT INTO "usage" VALUES('EPSG','9747','other_transformation','EPSG','6724','EPSG','4169','EPSG','1153'); INSERT INTO "other_transformation" VALUES('EPSG','7008','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (1)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-346, dY=216 and dZ=156m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',386.0,'EPSG','9001','EPSG','8729','Northing offset',204.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 1',0); INSERT INTO "usage" VALUES('EPSG','9886','other_transformation','EPSG','7008','EPSG','3714','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7009','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (2)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-351, dY=190 and dZ=171m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',383.0,'EPSG','9001','EPSG','8729','Northing offset',205.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 2',0); INSERT INTO "usage" VALUES('EPSG','9887','other_transformation','EPSG','7009','EPSG','3717','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7010','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (3)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-351, dY=184 and dZ=156m. Other maps give different values - see tfm code 7011.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',378.0,'EPSG','9001','EPSG','8729','Northing offset',196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 3',0); INSERT INTO "usage" VALUES('EPSG','9888','other_transformation','EPSG','7010','EPSG','3719','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7011','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (4)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-347, dY=180 and dZ=156m. Other maps give different values - see tfm code 7010.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',372.0,'EPSG','9001','EPSG','8729','Northing offset',196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 3',0); INSERT INTO "usage" VALUES('EPSG','9889','other_transformation','EPSG','7011','EPSG','3719','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7012','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (5)','May be emulated using geocentric translations fromn Nahrwan 1934 to Karbala 1979 of dX=-337, dY=192 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',375.0,'EPSG','9001','EPSG','8729','Northing offset',200.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 5',0); INSERT INTO "usage" VALUES('EPSG','9890','other_transformation','EPSG','7012','EPSG','3701','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7013','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (6)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-335, dY=181 and dZ=183m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',365.0,'EPSG','9001','EPSG','8729','Northing offset',196.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 6',0); INSERT INTO "usage" VALUES('EPSG','9891','other_transformation','EPSG','7013','EPSG','3715','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7014','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (7)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-345, dY=182 and dZ=152m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',373.0,'EPSG','9001','EPSG','8729','Northing offset',191.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 7',0); INSERT INTO "usage" VALUES('EPSG','9892','other_transformation','EPSG','7014','EPSG','3718','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7015','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (8)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-313, dY=203 and dZ=173m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 8',0); INSERT INTO "usage" VALUES('EPSG','9893','other_transformation','EPSG','7015','EPSG','3722','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7016','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (9)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-320 dY=197 and dZ=167m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 9',0); INSERT INTO "usage" VALUES('EPSG','9894','other_transformation','EPSG','7016','EPSG','3723','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7017','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (10)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-323, dY=179 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',200.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 10',0); INSERT INTO "usage" VALUES('EPSG','9895','other_transformation','EPSG','7017','EPSG','3724','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7018','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (11)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-330, dY=176 and dZ=162m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',195.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 11',0); INSERT INTO "usage" VALUES('EPSG','9896','other_transformation','EPSG','7018','EPSG','3725','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7019','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (12)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-319, dY=185 and dZ=188m. Other maps give different values - see tfm code 7021.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',229.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 14',0); INSERT INTO "usage" VALUES('EPSG','9897','other_transformation','EPSG','7019','EPSG','3728','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7020','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (13)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-306, dY=196 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 13',0); INSERT INTO "usage" VALUES('EPSG','9898','other_transformation','EPSG','7020','EPSG','3729','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7021','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (14)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-325, dY=192 and dZ=188m. Other maps give different values - see tfm code 7019.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',229.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 14',0); INSERT INTO "usage" VALUES('EPSG','9899','other_transformation','EPSG','7021','EPSG','3728','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7022','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (15)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-322, dY=178 and dZ=182m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',208.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 15',0); INSERT INTO "usage" VALUES('EPSG','9900','other_transformation','EPSG','7022','EPSG','3709','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7023','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (16)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-325, dY=163 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 16',0); INSERT INTO "usage" VALUES('EPSG','9901','other_transformation','EPSG','7023','EPSG','3695','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7024','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (17)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-338, dY=166 and dZ=173m. Other maps give different values - see tfm code 7025.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',211.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 17',0); INSERT INTO "usage" VALUES('EPSG','9902','other_transformation','EPSG','7024','EPSG','3704','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7025','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (18)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-329, dY=176 and dZ=151m. Other maps give different values - see tfm code 7024.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 17',0); INSERT INTO "usage" VALUES('EPSG','9903','other_transformation','EPSG','7025','EPSG','3704','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7026','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (19)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-303, dY=185 and dZ=163m. Other maps give different values - see tfm code 7029.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',183.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 19',0); INSERT INTO "usage" VALUES('EPSG','9904','other_transformation','EPSG','7026','EPSG','3706','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7027','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (20)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-319, dY=186 and dZ=160m. Other maps give different values - see tfm code 7030.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',186.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 20',0); INSERT INTO "usage" VALUES('EPSG','9905','other_transformation','EPSG','7027','EPSG','3708','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7028','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (21)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-324, dY=178 and dZ=154m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',185.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 21',0); INSERT INTO "usage" VALUES('EPSG','9906','other_transformation','EPSG','7028','EPSG','3710','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7029','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (22)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-304, dY=184 and dZ=166m. Other maps give different values - see tfm code 7026.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',186.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 19',0); INSERT INTO "usage" VALUES('EPSG','9907','other_transformation','EPSG','7029','EPSG','3706','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7030','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (23)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-320, dY=185 and dZ=162m. Other maps give different values - see tfm code 7027.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map A sheet 20',0); INSERT INTO "usage" VALUES('EPSG','9908','other_transformation','EPSG','7030','EPSG','3708','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7031','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (24)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-313, dY=193 and dZ=153m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',175.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 24',0); INSERT INTO "usage" VALUES('EPSG','9909','other_transformation','EPSG','7031','EPSG','3711','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7032','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (25)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-308, dY=177 and dZ=146m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',343.0,'EPSG','9001','EPSG','8729','Northing offset',175.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MoO-Irq map B sheet 25',0); INSERT INTO "usage" VALUES('EPSG','9910','other_transformation','EPSG','7032','EPSG','3712','EPSG','1082'); INSERT INTO "other_transformation" VALUES('EPSG','7653','EGM96 height to Kumul 34 height (1)','Defines Kumul 34 heights.','EPSG','9616','Vertical Offset','EPSG','5773','EPSG','7651',0.0,'EPSG','8603','Vertical Offset',-0.87,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Kumul34',0); INSERT INTO "usage" VALUES('EPSG','10195','other_transformation','EPSG','7653','EPSG','4013','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','7654','EGM2008 height to Kiunga height (1)','Defines Kiunga heights.','EPSG','9616','Vertical Offset','EPSG','3855','EPSG','7652',0.0,'EPSG','8603','Vertical Offset',-3.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Kiunga',0); INSERT INTO "usage" VALUES('EPSG','10196','other_transformation','EPSG','7654','EPSG','4383','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','7701','Latvia 2000 height to EVRF2007 height (1)','Determined at 82 points. RMS residual 0.010, maximum residual 0.019m.','EPSG','1046','Vertical Offset and Slope','EPSG','7700','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.58,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.53,'EPSG','9110','EPSG','8603','Vertical Offset',0.003,'EPSG','9001','EPSG','8730','Inclination in latitude',0.0,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0074,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva',0); INSERT INTO "usage" VALUES('EPSG','10216','other_transformation','EPSG','7701','EPSG','3268','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','7838','DHHN2016 height to EVRF2007 height (1)','Determined at 425 points. RMS residual 0.017m, maximum residual 0.061m.','EPSG','1046','Vertical Offset and Slope','EPSG','7837','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',10.13,'EPSG','9110','EPSG','8603','Vertical Offset',0.014,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.01,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu',0); INSERT INTO "usage" VALUES('EPSG','10292','other_transformation','EPSG','7838','EPSG','3339','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','7873','EGM96 height to POM96 height (1)','Defines POM96 heights.','EPSG','9616','Vertical Offset','EPSG','5773','EPSG','7832',0.0,'EPSG','8603','Vertical Offset',-1.58,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Gulf-Cen',0); INSERT INTO "usage" VALUES('EPSG','10307','other_transformation','EPSG','7873','EPSG','4425','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','7874','EGM2008 height to POM08 height (1)','Defines POM08 heights.','EPSG','9616','Vertical Offset','EPSG','3855','EPSG','7841',0.0,'EPSG','8603','Vertical Offset',-0.93,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Gulf-Cen',0); INSERT INTO "usage" VALUES('EPSG','10308','other_transformation','EPSG','7874','EPSG','4425','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','7963','Poolbeg height (ft(Br36)) to Poolbeg height (m)','Change of unit from British foot (1936) [ft(BR36)] to metre.','EPSG','1069','Change of Vertical Unit','EPSG','5754','EPSG','7962',NULL,'EPSG','1051','Unit conversion scalar',0.3048007491,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10347','other_transformation','EPSG','7963','EPSG','1305','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','7964','Poolbeg height (m) to Malin Head height (1)','Poolbeg vertical reference surface is 2.7m below Malin Head surface. Nominal accuracy 0.1m but transformations are subject to localised anomalies.','EPSG','9616','Vertical Offset','EPSG','7962','EPSG','5731',0.1,'EPSG','8603','Vertical Offset',-2.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire',0); INSERT INTO "usage" VALUES('EPSG','10348','other_transformation','EPSG','7964','EPSG','1305','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','7966','Poolbeg height (m) to Belfast height (1)','Poolbeg vertical reference surface is 2.7m below Belfast surface. Nominal accuracy 0.1m but transformations are subject to localised anomalies.','EPSG','9616','Vertical Offset','EPSG','7962','EPSG','5732',0.1,'EPSG','8603','Vertical Offset',-2.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire',0); INSERT INTO "usage" VALUES('EPSG','10350','other_transformation','EPSG','7966','EPSG','2530','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','7972','NGVD29 height (ftUS) to NGVD29 height (m)','Change of unit from US survey foot (ftUS) to metre. 1 ftUS = (12/39.37)m ≈ 0.304800609601219m.','EPSG','1069','Change of Vertical Unit','EPSG','5702','EPSG','7968',NULL,'EPSG','1051','Unit conversion scalar',0.304800609601219,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10355','other_transformation','EPSG','7972','EPSG','1323','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','7977','HKPD depth to HKCD depth (1)','The HKPD vertical reference surface is 0.146m above the HKCD surface.','EPSG','9616','Vertical Offset','EPSG','7976','EPSG','5739',0.0,'EPSG','8603','Vertical Offset',-0.146,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SMO-HK',0); INSERT INTO "usage" VALUES('EPSG','10359','other_transformation','EPSG','7977','EPSG','3335','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','7978','NGVD29 height (ftUS) to NGVD29 depth (ftUS)','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5702','EPSG','6359',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10360','other_transformation','EPSG','7978','EPSG','1323','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','7980','KOC CD height to KOC WD height (1)','The KOC CD vertical reference surface is 4.74m (15.55ft) below KOC WD surface.','EPSG','9616','Vertical Offset','EPSG','5790','EPSG','7979',0.1,'EPSG','8603','Vertical Offset',-4.74,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',0); INSERT INTO "usage" VALUES('EPSG','10361','other_transformation','EPSG','7980','EPSG','3267','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','7981','Kuwait PWD height to KOC WD height (1)','The KOC WD vertical reference surface is 4.25m above the Kuwait PWD surface.','EPSG','9616','Vertical Offset','EPSG','5788','EPSG','7979',0.1,'EPSG','8603','Vertical Offset',-4.25,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',0); INSERT INTO "usage" VALUES('EPSG','10362','other_transformation','EPSG','7981','EPSG','3267','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','7982','HKPD height to HKPD depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5738','EPSG','7976',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10363','other_transformation','EPSG','7982','EPSG','3334','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','7984','KOC WD height to KOC WD depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','7979','EPSG','5789',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10365','other_transformation','EPSG','7984','EPSG','3267','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','7985','KOC WD depth to KOC WD depth (ft)','Change of unit from metre to International foot (ft). 1ft = 0.3048m.','EPSG','1069','Change of Vertical Unit','EPSG','5789','EPSG','5614',NULL,'EPSG','1051','Unit conversion scalar',3.28083989501312,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10366','other_transformation','EPSG','7985','EPSG','3267','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','7988','NAVD88 height to NAVD88 height (ftUS)','Change of unit from metre to US survey foot. 1 ftUS = (12/39.37)m ≈ 0.304800609601219m.','EPSG','1069','Change of Vertical Unit','EPSG','5703','EPSG','6360',NULL,'EPSG','1051','Unit conversion scalar',3.28083333333333,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10369','other_transformation','EPSG','7988','EPSG','3664','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','7989','NAVD88 height to NAVD88 depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5703','EPSG','6357',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10370','other_transformation','EPSG','7989','EPSG','4161','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','7990','NAVD88 height (ftUS) to NAVD88 depth (ftUS)','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','6360','EPSG','6358',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10371','other_transformation','EPSG','7990','EPSG','3664','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8038','Instantaneous Water Level height to Instantaneous Water Level depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5829','EPSG','5831',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10395','other_transformation','EPSG','8038','EPSG','1262','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8039','MSL height to MSL depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5714','EPSG','5715',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10396','other_transformation','EPSG','8039','EPSG','1262','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8054','MSL height to MSL height (ft)','Change of unit from metre to International foot (ft). 1ft = 0.3048m.','EPSG','1069','Change of Vertical Unit','EPSG','5714','EPSG','8050',NULL,'EPSG','1051','Unit conversion scalar',3.28083989501312,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10403','other_transformation','EPSG','8054','EPSG','1262','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','8055','MSL height to MSL height (ftUS)','Change of unit from metre to US survey foot (ftUS). 1 ftUS = (12/39.37)m ≈ 0.304800609601219m.','EPSG','1069','Change of Vertical Unit','EPSG','5714','EPSG','8052',NULL,'EPSG','1051','Unit conversion scalar',3.28083333333333,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10404','other_transformation','EPSG','8055','EPSG','1245','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','8056','MSL depth to MSL depth (ft)','Change of unit from metre to International foot (ft). 1ft = 0.3048m.','EPSG','1069','Change of Vertical Unit','EPSG','5715','EPSG','8051',NULL,'EPSG','1051','Unit conversion scalar',3.28083989501312,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10405','other_transformation','EPSG','8056','EPSG','1262','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','8057','MSL depth to MSL depth (ftUS)','Change of unit from metre to US survey foot (ftUS). 1 ftUS = (12/39.37)m ≈ 0.304800609601219m.','EPSG','1069','Change of Vertical Unit','EPSG','5715','EPSG','8053',NULL,'EPSG','1051','Unit conversion scalar',3.28083333333333,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10406','other_transformation','EPSG','8057','EPSG','1245','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','8060','Baltic 1977 height to Baltic 1977 depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5705','EPSG','5612',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10407','other_transformation','EPSG','8060','EPSG','2423','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8229','NAVD88 height to NAVD88 height (ft)','Change of unit from metre to International foot (ft). 1ft = 0.3048. For States which have adopted International feet for their State Plane coordinate systems.','EPSG','1069','Change of Vertical Unit','EPSG','5703','EPSG','8228',NULL,'EPSG','1051','Unit conversion scalar',3.28083989501312,'EPSG','9201',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10445','other_transformation','EPSG','8229','EPSG','4464','EPSG','1101'); INSERT INTO "other_transformation" VALUES('EPSG','8354','Black Sea height to Black Sea depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5735','EPSG','5336',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10504','other_transformation','EPSG','8354','EPSG','3251','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8355','AIOC95 height to AIOC95 depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5797','EPSG','5734',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10505','other_transformation','EPSG','8355','EPSG','2592','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8356','Caspian height to Caspian depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','5611','EPSG','5706',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10506','other_transformation','EPSG','8356','EPSG','1291','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8359','Baltic 1957 height to Baltic 1957 depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','8357','EPSG','8358',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10507','other_transformation','EPSG','8359','EPSG','1306','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','9041','ISN2004 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that ISN2004 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5638','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Isl 2004',0); INSERT INTO "usage" VALUES('EPSG','10877','other_transformation','EPSG','9041','EPSG','1120','EPSG','1088'); INSERT INTO "other_transformation" VALUES('EPSG','9042','ISN2004 / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that ISN2004 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5639','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Isl 2004',0); INSERT INTO "usage" VALUES('EPSG','10878','other_transformation','EPSG','9042','EPSG','1120','EPSG','1087'); INSERT INTO "other_transformation" VALUES('EPSG','9043','ISN2016 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that ISN2016 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','9039','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Isl',0); INSERT INTO "usage" VALUES('EPSG','10879','other_transformation','EPSG','9043','EPSG','1120','EPSG','1088'); INSERT INTO "other_transformation" VALUES('EPSG','9044','ISN2016 / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that ISN2016 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','9040','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Isl 2016',0); INSERT INTO "usage" VALUES('EPSG','10880','other_transformation','EPSG','9044','EPSG','1120','EPSG','1087'); INSERT INTO "other_transformation" VALUES('EPSG','9045','PTRA08 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that PTRA08 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5633','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Prt Azores-Madeira',0); INSERT INTO "usage" VALUES('EPSG','10881','other_transformation','EPSG','9045','EPSG','3670','EPSG','1088'); INSERT INTO "other_transformation" VALUES('EPSG','9046','PTRA08 / LCC Europe to ETRS89 / LCC Europe (1)','Assumes that PTRA08 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5632','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Prt Azores-Madeira',0); INSERT INTO "usage" VALUES('EPSG','10882','other_transformation','EPSG','9046','EPSG','3670','EPSG','1087'); INSERT INTO "other_transformation" VALUES('EPSG','9047','REGCAN95 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that REGCAN95 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5635','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Esp Canary',0); INSERT INTO "usage" VALUES('EPSG','10883','other_transformation','EPSG','9047','EPSG','3199','EPSG','1088'); INSERT INTO "other_transformation" VALUES('EPSG','9048','REGCAN95 / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that REGCAN95 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5634','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Esp Canary',0); INSERT INTO "usage" VALUES('EPSG','10884','other_transformation','EPSG','9048','EPSG','3199','EPSG','1087'); INSERT INTO "other_transformation" VALUES('EPSG','9049','TUREF / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that TUREF and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5636','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Tur',0); INSERT INTO "usage" VALUES('EPSG','10885','other_transformation','EPSG','9049','EPSG','1237','EPSG','1088'); INSERT INTO "other_transformation" VALUES('EPSG','9050','TUREF / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that TUREF and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5637','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Tur',0); INSERT INTO "usage" VALUES('EPSG','10886','other_transformation','EPSG','9050','EPSG','1237','EPSG','1087'); INSERT INTO "other_transformation" VALUES('EPSG','9371','Vienna height to GHA height (1)','Defines Wiener Null surface. GHA vertical reference surface is 156.68m below Wiener Null surface.','EPSG','9616','Vertical Offset','EPSG','8881','EPSG','5778',0.0,'EPSG','8603','Vertical Offset',156.68,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut Wien',0); INSERT INTO "usage" VALUES('EPSG','13986','other_transformation','EPSG','9371','EPSG','4585','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9446','ODN height to EVRF2019 mean-tide height (1)','Determined at Channel Tunnel portal.','EPSG','9616','Vertical Offset','EPSG','5701','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.173,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Gbr 2019m',1); INSERT INTO "usage" VALUES('EPSG','14104','other_transformation','EPSG','9446','EPSG','2792','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9447','Antalya height to EVRF2019 mean-tide height (1)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.446,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019m',1); INSERT INTO "usage" VALUES('EPSG','14105','other_transformation','EPSG','9447','EPSG','3322','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9448','Antalya height to EVRF2019 height (1)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9389',0.02,'EPSG','8603','Vertical Offset',-0.392,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019z',1); INSERT INTO "usage" VALUES('EPSG','14106','other_transformation','EPSG','9448','EPSG','3322','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9551','Antalya height to EVRF2019 height (2)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9389',0.02,'EPSG','8603','Vertical Offset',-0.394,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019z 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14651','other_transformation','EPSG','9551','EPSG','3322','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9552','Antalya height to EVRF2019 mean-tide height (2)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.448,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14650','other_transformation','EPSG','9552','EPSG','3322','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9562','ODN height to EVRF2019 mean-tide height (2)','Determined at Channel Tunnel portal.','EPSG','9616','Vertical Offset','EPSG','5701','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Gbr 2019m 2020-09',0); INSERT INTO "usage" VALUES('EPSG','14640','other_transformation','EPSG','9562','EPSG','2792','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9726','Genoa 1942 height to Catania 1965 height (1)','','EPSG','9616','Vertical Offset','EPSG','5214','EPSG','9721',0.01,'EPSG','8603','Vertical Offset',0.141,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGMI-Ita Sicily',0); INSERT INTO "usage" VALUES('EPSG','15279','other_transformation','EPSG','9726','EPSG','2340','EPSG','1184'); INSERT INTO "other_transformation" VALUES('EPSG','9744','Baltic 1957 height to EVRF2019 mean-tide height (1)','Determined at 242 points. RMS residual 0.012m, maximum residual 0.028m. Approximates the official transformation available through the CUZK transformation service at https://geoportal.cuzk.cz/ for comparison with transformation to EVRF2007 (CT 5202).','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','9390',0.01,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.13,'EPSG','9001','EPSG','8730','Inclination in latitude',0.036,'EPSG','9104','EPSG','8731','Inclination in longitude',0.006,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); INSERT INTO "usage" VALUES('EPSG','15350','other_transformation','EPSG','9744','EPSG','1079','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9745','Baltic 1957 height to EVRF2019 height (1)','Determined at 242 points. RMS residual 0.012m, maximum residual 0.029m. Approximates the official transformation available through the CUZK transformation service at https://geoportal.cuzk.cz/ for comparison with transformation to EVRF2007 (CT 5202).','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','9389',0.01,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.142,'EPSG','9001','EPSG','8730','Inclination in latitude',0.026,'EPSG','9104','EPSG','8731','Inclination in longitude',0.006,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); INSERT INTO "usage" VALUES('EPSG','15351','other_transformation','EPSG','9745','EPSG','1079','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','10087','Jamaica 1875 / Jamaica (Old Grid) to JAD69 / Jamaica National Grid (1)','Derived by least squares fit at primary triangulation stations. Accuracy will be less outside of this network due to extrapolation.','EPSG','9624','Affine parametric transformation','EPSG','24100','EPSG','24200',1.5,'EPSG','8623','A0',82357.457,'EPSG','9001','EPSG','8624','A1',0.304794369,'EPSG','9203','EPSG','8625','A2',1.5417425e-05,'EPSG','9203','EPSG','8639','B0',28091.324,'EPSG','9001','EPSG','8640','B1',-1.5417425e-05,'EPSG','9203','EPSG','8641','B2',0.304794369,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',0); INSERT INTO "usage" VALUES('EPSG','11088','other_transformation','EPSG','10087','EPSG','3342','EPSG','1153'); INSERT INTO "other_transformation" VALUES('EPSG','10088','JAD69 / Jamaica National Grid to Jamaica 1875 / Jamaica (Old Grid) (1)','Derived by least squares fit at primary triangulation stations. Accuracy will be less outside of this network due to extrapolation.','EPSG','9624','Affine parametric transformation','EPSG','24200','EPSG','24100',1.5,'EPSG','8623','A0',-270201.96,'EPSG','9005','EPSG','8624','A1',0.00016595792,'EPSG','9203','EPSG','8625','A2',3.2809005,'EPSG','9203','EPSG','8639','B0',-92178.51,'EPSG','9005','EPSG','8640','B1',3.2809005,'EPSG','9203','EPSG','8641','B2',-0.00016595792,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',1); INSERT INTO "usage" VALUES('EPSG','11089','other_transformation','EPSG','10088','EPSG','3342','EPSG','1153'); INSERT INTO "other_transformation" VALUES('EPSG','10095','Mauritania 1999 / UTM zone 28N to WGS 84 / UTM zone 28N (1)','Parameter values consistent with the OGP Affine parametric transformation method derived by OGP from the published Helmert 2D parameter values.','EPSG','9624','Affine parametric transformation','EPSG','3103','EPSG','32628',40.0,'EPSG','8623','A0',NULL,'EPSG',NULL,'EPSG','8624','A1',NULL,'EPSG',NULL,'EPSG','8625','A2',NULL,'EPSG',NULL,'EPSG','8639','B0',NULL,'EPSG',NULL,'EPSG','8640','B1',NULL,'EPSG',NULL,'EPSG','8641','B2',NULL,'EPSG',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MMI-Mau W',1); INSERT INTO "usage" VALUES('EPSG','11096','other_transformation','EPSG','10095','EPSG','2971','EPSG','1249'); INSERT INTO "other_transformation" VALUES('EPSG','10096','Mauritania 1999 / UTM zone 29N to WGS 84 / UTM zone 29N (1)','Parameter values consistent with the OGP Affine parametric transformation method derived by OGP from the published Helmert 2D parameter values.','EPSG','9624','Affine parametric transformation','EPSG','3104','EPSG','32629',40.0,'EPSG','8623','A0',NULL,'EPSG',NULL,'EPSG','8624','A1',NULL,'EPSG',NULL,'EPSG','8625','A2',NULL,'EPSG',NULL,'EPSG','8639','B0',NULL,'EPSG',NULL,'EPSG','8640','B1',NULL,'EPSG',NULL,'EPSG','8641','B2',NULL,'EPSG',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MMI-Mau C',1); INSERT INTO "usage" VALUES('EPSG','11097','other_transformation','EPSG','10096','EPSG','2970','EPSG','1249'); INSERT INTO "other_transformation" VALUES('EPSG','10097','Mauritania 1999 / UTM zone 30N to WGS 84 / UTM zone 30N (1)','Parameter values consistent with the OGP Affine parametric transformation method derived by OGP from the published Helmert 2D parameter values.','EPSG','9624','Affine parametric transformation','EPSG','3105','EPSG','32630',40.0,'EPSG','8623','A0',NULL,'EPSG',NULL,'EPSG','8624','A1',NULL,'EPSG',NULL,'EPSG','8625','A2',NULL,'EPSG',NULL,'EPSG','8639','B0',NULL,'EPSG',NULL,'EPSG','8640','B1',NULL,'EPSG',NULL,'EPSG','8641','B2',NULL,'EPSG',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MMI-Mau E',1); INSERT INTO "usage" VALUES('EPSG','11098','other_transformation','EPSG','10097','EPSG','2969','EPSG','1249'); INSERT INTO "other_transformation" VALUES('EPSG','10216','MAGNA-SIRGAS / Col FW to MAGNA-SIRGAS 2018 / Col FW (5)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3114','EPSG','11114',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Col FW',0); INSERT INTO "usage" VALUES('EPSG','19033','other_transformation','EPSG','10216','EPSG','3091','EPSG','1142'); INSERT INTO "other_transformation" VALUES('EPSG','10221','MAGNA-SIRGAS / Col W to MAGNA-SIRGAS 2018 / Col W (4)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3115','EPSG','11115',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Col W',0); INSERT INTO "usage" VALUES('EPSG','19032','other_transformation','EPSG','10221','EPSG','3090','EPSG','1142'); INSERT INTO "other_transformation" VALUES('EPSG','10242','MAGNA-SIRGAS / Col Bog to MAGNA-SIRGAS 2018 / Col Bog (3)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3116','EPSG','11116',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Col Bog',0); INSERT INTO "usage" VALUES('EPSG','19034','other_transformation','EPSG','10242','EPSG','1599','EPSG','1208'); INSERT INTO "other_transformation" VALUES('EPSG','10243','MAGNA-SIRGAS / Col EC to MAGNA-SIRGAS 2018 / Col EC (2)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3117','EPSG','11117',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Col EC',0); INSERT INTO "usage" VALUES('EPSG','19035','other_transformation','EPSG','10243','EPSG','1600','EPSG','1142'); INSERT INTO "other_transformation" VALUES('EPSG','10244','MAGNA-SIRGAS / Col E to MAGNA-SIRGAS 2018 / Col E (1)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3118','EPSG','11118',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Col E',0); INSERT INTO "usage" VALUES('EPSG','19036','other_transformation','EPSG','10244','EPSG','1601','EPSG','1142'); INSERT INTO "other_transformation" VALUES('EPSG','10380','Cascais depth to ZH Portugal depth (1)','The Zero Hidrografico (CD Portugal) surface is defined to be 2.0m below the Cascais vertical reference surface offshore mainland Portugal and 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon (see CT 10381).','EPSG','9616','Vertical Offset','EPSG','10364','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-2.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por mainland',0); INSERT INTO "usage" VALUES('EPSG','20316','other_transformation','EPSG','10380','EPSG','4691','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10381','Cascais depth to ZH Portugal depth (2)','The Zero Hidrografico surface is defined to be 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon and 2.0m below the Cascais vertical reference surface offshore mainland Portugal (see CT 10380). ','EPSG','9616','Vertical Offset','EPSG','10364','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-2.08,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Tagus',0); INSERT INTO "usage" VALUES('EPSG','20317','other_transformation','EPSG','10381','EPSG','4692','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10382','Cais da Pontinha depth to ZH Portugal depth (1)','Offshore of Madeira, Desertas and Selvagens islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.4m below the Cais da Pontinha vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10370','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Madeira',0); INSERT INTO "usage" VALUES('EPSG','20318','other_transformation','EPSG','10382','EPSG','4695','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10383','Cais da Vila depth to ZH Portugal depth (1)','Offshore of Porto Santo island the Zero Hidrografico (CD Portugal) surface is defined to be 1.4m below the Cais da Vila vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10371','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Porto Santo',0); INSERT INTO "usage" VALUES('EPSG','20029','other_transformation','EPSG','10383','EPSG','4696','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10384','Santa Cruz das Flores depth to ZH Portugal depth (1)','Offshore of Flores and Corvo islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Santa Cruz das Flores vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10372','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Flores',0); INSERT INTO "usage" VALUES('EPSG','20030','other_transformation','EPSG','10384','EPSG','4697','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10385','Horta depth to ZH Portugal depth (1)','Offshore of Faial island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Horta vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10373','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Faial',0); INSERT INTO "usage" VALUES('EPSG','20031','other_transformation','EPSG','10385','EPSG','4698','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10386','Cais da Madalena depth to ZH Portugal depth (1)','Offshore of Pico island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Madalena vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10374','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Pico',0); INSERT INTO "usage" VALUES('EPSG','20032','other_transformation','EPSG','10386','EPSG','4699','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10387','Cais das Velas depth to ZH Portugal depth (1)','Offshore of S. Jorge island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais das Velas vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10375','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por S Jorge',0); INSERT INTO "usage" VALUES('EPSG','20082','other_transformation','EPSG','10387','EPSG','4700','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10388','Santa Cruz da Graciosa depth to ZH Portugal depth (1)','Offshore of Graciosa island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Santa Cruz da Graciosa vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10376','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Graciosa',0); INSERT INTO "usage" VALUES('EPSG','20034','other_transformation','EPSG','10388','EPSG','4734','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10389','Cais da Figueirinha depth to ZH Portugal depth (1)','Offshore of Terceira island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Figueirinha vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10377','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Terceira',0); INSERT INTO "usage" VALUES('EPSG','20035','other_transformation','EPSG','10389','EPSG','4735','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10390','Ponta Delgada depth to ZH Portugal depth (1)','Offshore of S. Miguel island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Ponta Delgada vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10378','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por S Miguel',0); INSERT INTO "usage" VALUES('EPSG','20083','other_transformation','EPSG','10390','EPSG','4736','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10391','Cais da Vila do Porto depth to ZH Portugal depth (1)','Offshore of Santa Maria and Formigas islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Vila do Porto vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10379','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IH-Por Santa Maria',0); INSERT INTO "usage" VALUES('EPSG','20101','other_transformation','EPSG','10391','EPSG','4737','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10517','NAD83(2011) / Adjusted Jackson (ftUS) to NAD83(HARN) / WISCRS Jackson (ftUS) (1)','','EPSG','9656','Cartesian Grid Offsets','EPSG','10516','EPSG','8162',0.1,'EPSG','8728','Easting offset',0.0,'EPSG','9003','EPSG','8729','Northing offset',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',0); INSERT INTO "usage" VALUES('EPSG','20745','other_transformation','EPSG','10517','EPSG','4343','EPSG','1026'); INSERT INTO "other_transformation" VALUES('EPSG','10620','CGVD28 height to CGVD28(HTv2.0) height (1)','Null transformation. CGVD28 is defined by the levelling network. CGVD28(HTv2.0) is defined by the Height Transformation (HT) v2.0 hybrid geoid model at epoch 1997.0 (transformation from NAD83(CSRS)v3 to CGVD28, CT code 9983).','EPSG','9616','Vertical Offset','EPSG','5713','EPSG','10588',0.05,'EPSG','8603','Vertical Offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NR-Can HT2 1997',0); INSERT INTO "usage" VALUES('EPSG','21592','other_transformation','EPSG','10620','EPSG','1289','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','10657','Saba to Saba height (1)','Vertical component of official transformation BESTRANS2020. For reversible alternative to this transformation see Saba to Saba + Saba height (1) (code 10658).','EPSG','1136','Geographic3D to GravityRelatedHeight','EPSG','10635','EPSG','10642',0.2,'EPSG','8604','Geoid height',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes Saba 2020',0); INSERT INTO "usage" VALUES('EPSG','21854','other_transformation','EPSG','10657','EPSG','4757','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','10658','Saba to Saba + Saba height (1)','Reversible alternative to Saba to Saba height (1) (code 10657). Vertical component of official transformation BESTRANS2020.','EPSG','1131','Geog3D to Geog2D+GravityRelatedHeight','EPSG','10635','EPSG','10643',0.2,'EPSG','8604','Geoid height',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes Saba 2020',0); INSERT INTO "usage" VALUES('EPSG','21855','other_transformation','EPSG','10658','EPSG','4757','EPSG','1270'); INSERT INTO "other_transformation" VALUES('EPSG','10752','Sint Eustatius to Sint Eustatius height (1)','Vertical component of official transformation BESTRANS2020. For reversible alternative to this transformation see Sint Eustasius to Sint Eustasius + Sint Eustasius height (1) (code 10753).','EPSG','1136','Geographic3D to GravityRelatedHeight','EPSG','10735','EPSG','10740',0.2,'EPSG','8604','Geoid height',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes SEu 2020',0); INSERT INTO "usage" VALUES('EPSG','22302','other_transformation','EPSG','10752','EPSG','4788','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','10753','Sint Eustatius to Sint Eustatius + Sint Eustatius height (1)','Reversible alternative to Sint Eustatius to Sint Eustatius height (1) (code 10752). Vertical component of official transformation BESTRANS2020.','EPSG','1131','Geog3D to Geog2D+GravityRelatedHeight','EPSG','10735','EPSG','10741',0.2,'EPSG','8604','Geoid height',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Bes SEu 2020',0); INSERT INTO "usage" VALUES('EPSG','22380','other_transformation','EPSG','10753','EPSG','4788','EPSG','1270'); INSERT INTO "other_transformation" VALUES('EPSG','15487','TWD67 / TM2 zone 121 to TWD97 / TM2 zone 121 (1)','Derived at Hu Tzu Shan (23°59''N, 120°58''E). Residuals increase to maximum of 6.4m as distance increases from this point.','EPSG','9656','Cartesian Grid Offsets','EPSG','3828','EPSG','3826',7.0,'EPSG','8728','Easting offset',828.589,'EPSG','9001','EPSG','8729','Northing offset',-206.915,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'asafi-Twn',0); INSERT INTO "usage" VALUES('EPSG','11498','other_transformation','EPSG','15487','EPSG','3982','EPSG','1045'); INSERT INTO "other_transformation" VALUES('EPSG','15596','Tokyo + JSLD height to WGS 84 (7)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',7.94,'EPSG','9104','EPSG','8602','Longitude offset',-13.97,'EPSG','9104','EPSG','8604','Geoid height',26.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 452142',0); INSERT INTO "usage" VALUES('EPSG','11607','other_transformation','EPSG','15596','EPSG','2426','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15597','Tokyo + JSLD height to WGS 84 (8)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.1,'EPSG','9104','EPSG','8602','Longitude offset',-13.81,'EPSG','9104','EPSG','8604','Geoid height',27.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 444141',0); INSERT INTO "usage" VALUES('EPSG','11608','other_transformation','EPSG','15597','EPSG','2427','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15598','Tokyo + JSLD height to WGS 84 (9)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.15,'EPSG','9104','EPSG','8602','Longitude offset',-13.95,'EPSG','9104','EPSG','8604','Geoid height',28.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 444142',0); INSERT INTO "usage" VALUES('EPSG','11609','other_transformation','EPSG','15598','EPSG','2428','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15599','Tokyo + JSLD height to WGS 84 (10)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.37,'EPSG','9104','EPSG','8602','Longitude offset',-13.65,'EPSG','9104','EPSG','8604','Geoid height',29.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440141',0); INSERT INTO "usage" VALUES('EPSG','11610','other_transformation','EPSG','15599','EPSG','2429','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15600','Tokyo + JSLD height to WGS 84 (11)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.44,'EPSG','9104','EPSG','8602','Longitude offset',-13.87,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440142',0); INSERT INTO "usage" VALUES('EPSG','11611','other_transformation','EPSG','15600','EPSG','2430','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15601','Tokyo + JSLD height to WGS 84 (12)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.61,'EPSG','9104','EPSG','8602','Longitude offset',-14.08,'EPSG','9104','EPSG','8604','Geoid height',30.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440143',0); INSERT INTO "usage" VALUES('EPSG','11612','other_transformation','EPSG','15601','EPSG','2431','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15602','Tokyo + JSLD height to WGS 84 (13)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.73,'EPSG','9104','EPSG','8602','Longitude offset',-14.3,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 440144',0); INSERT INTO "usage" VALUES('EPSG','11613','other_transformation','EPSG','15602','EPSG','2432','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15603','Tokyo + JSLD height to WGS 84 (14)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.63,'EPSG','9104','EPSG','8602','Longitude offset',-13.49,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432141',0); INSERT INTO "usage" VALUES('EPSG','11614','other_transformation','EPSG','15603','EPSG','2433','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15604','Tokyo + JSLD height to WGS 84 (15)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.71,'EPSG','9104','EPSG','8602','Longitude offset',-13.73,'EPSG','9104','EPSG','8604','Geoid height',31.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432142',0); INSERT INTO "usage" VALUES('EPSG','11615','other_transformation','EPSG','15604','EPSG','2434','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15605','Tokyo + JSLD height to WGS 84 (16)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.84,'EPSG','9104','EPSG','8602','Longitude offset',-14.03,'EPSG','9104','EPSG','8604','Geoid height',31.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432143',0); INSERT INTO "usage" VALUES('EPSG','11616','other_transformation','EPSG','15605','EPSG','2435','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15606','Tokyo + JSLD height to WGS 84 (17)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.98,'EPSG','9104','EPSG','8602','Longitude offset',-14.33,'EPSG','9104','EPSG','8604','Geoid height',32.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432144',0); INSERT INTO "usage" VALUES('EPSG','11617','other_transformation','EPSG','15606','EPSG','2436','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15607','Tokyo + JSLD height to WGS 84 (18)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.1,'EPSG','9104','EPSG','8602','Longitude offset',-14.56,'EPSG','9104','EPSG','8604','Geoid height',32.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 432145',0); INSERT INTO "usage" VALUES('EPSG','11618','other_transformation','EPSG','15607','EPSG','2437','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15608','Tokyo + JSLD height to WGS 84 (19)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.79,'EPSG','9104','EPSG','8602','Longitude offset',-13.0,'EPSG','9104','EPSG','8604','Geoid height',33.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424140',0); INSERT INTO "usage" VALUES('EPSG','11619','other_transformation','EPSG','15608','EPSG','2438','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15609','Tokyo + JSLD height to WGS 84 (20)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.84,'EPSG','9104','EPSG','8602','Longitude offset',-13.31,'EPSG','9104','EPSG','8604','Geoid height',31.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424141',0); INSERT INTO "usage" VALUES('EPSG','11620','other_transformation','EPSG','15609','EPSG','2439','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15610','Tokyo + JSLD height to WGS 84 (21)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.98,'EPSG','9104','EPSG','8602','Longitude offset',-13.59,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424142',0); INSERT INTO "usage" VALUES('EPSG','11621','other_transformation','EPSG','15610','EPSG','2440','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15611','Tokyo + JSLD height to WGS 84 (22)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.1,'EPSG','9104','EPSG','8602','Longitude offset',-13.91,'EPSG','9104','EPSG','8604','Geoid height',29.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424143',0); INSERT INTO "usage" VALUES('EPSG','11622','other_transformation','EPSG','15611','EPSG','2441','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15612','Tokyo + JSLD height to WGS 84 (23)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.17,'EPSG','9104','EPSG','8602','Longitude offset',-14.27,'EPSG','9104','EPSG','8604','Geoid height',31.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424144',0); INSERT INTO "usage" VALUES('EPSG','11623','other_transformation','EPSG','15612','EPSG','2442','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15613','Tokyo + JSLD height to WGS 84 (24)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.23,'EPSG','9104','EPSG','8602','Longitude offset',-14.52,'EPSG','9104','EPSG','8604','Geoid height',31.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 424145',0); INSERT INTO "usage" VALUES('EPSG','11624','other_transformation','EPSG','15613','EPSG','2443','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15614','Tokyo + JSLD height to WGS 84 (25)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.9,'EPSG','9104','EPSG','8602','Longitude offset',-12.68,'EPSG','9104','EPSG','8604','Geoid height',34.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420139',0); INSERT INTO "usage" VALUES('EPSG','11625','other_transformation','EPSG','15614','EPSG','2444','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15615','Tokyo + JSLD height to WGS 84 (26)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.99,'EPSG','9104','EPSG','8602','Longitude offset',-12.8,'EPSG','9104','EPSG','8604','Geoid height',34.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420140',0); INSERT INTO "usage" VALUES('EPSG','11626','other_transformation','EPSG','15615','EPSG','2445','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15616','Tokyo + JSLD height to WGS 84 (27)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.0,'EPSG','9104','EPSG','8602','Longitude offset',-13.07,'EPSG','9104','EPSG','8604','Geoid height',31.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420141',0); INSERT INTO "usage" VALUES('EPSG','11627','other_transformation','EPSG','15616','EPSG','2446','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15617','Tokyo + JSLD height to WGS 84 (28)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.21,'EPSG','9104','EPSG','8602','Longitude offset',-13.51,'EPSG','9104','EPSG','8604','Geoid height',27.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420142',0); INSERT INTO "usage" VALUES('EPSG','11628','other_transformation','EPSG','15617','EPSG','2447','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15618','Tokyo + JSLD height to WGS 84 (29)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.33,'EPSG','9104','EPSG','8602','Longitude offset',-13.66,'EPSG','9104','EPSG','8604','Geoid height',23.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 420143',0); INSERT INTO "usage" VALUES('EPSG','11629','other_transformation','EPSG','15618','EPSG','2448','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15619','Tokyo + JSLD height to WGS 84 (30)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.25,'EPSG','9104','EPSG','8602','Longitude offset',-12.72,'EPSG','9104','EPSG','8604','Geoid height',34.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 412140',0); INSERT INTO "usage" VALUES('EPSG','11630','other_transformation','EPSG','15619','EPSG','2449','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15620','Tokyo + JSLD height to WGS 84 (31)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.39,'EPSG','9104','EPSG','8602','Longitude offset',-12.91,'EPSG','9104','EPSG','8604','Geoid height',31.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 412141',0); INSERT INTO "usage" VALUES('EPSG','11631','other_transformation','EPSG','15620','EPSG','2450','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15621','Tokyo + JSLD height to WGS 84 (32)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.55,'EPSG','9104','EPSG','8602','Longitude offset',-12.63,'EPSG','9104','EPSG','8604','Geoid height',35.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 404140',0); INSERT INTO "usage" VALUES('EPSG','11632','other_transformation','EPSG','15621','EPSG','2451','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15622','Tokyo + JSLD height to WGS 84 (33)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.62,'EPSG','9104','EPSG','8602','Longitude offset',-12.82,'EPSG','9104','EPSG','8604','Geoid height',34.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 404141',0); INSERT INTO "usage" VALUES('EPSG','11633','other_transformation','EPSG','15622','EPSG','2452','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15623','Tokyo + JSLD height to WGS 84 (34)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.81,'EPSG','9104','EPSG','8602','Longitude offset',-12.29,'EPSG','9104','EPSG','8604','Geoid height',36.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 400139',0); INSERT INTO "usage" VALUES('EPSG','11634','other_transformation','EPSG','15623','EPSG','2453','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15624','Tokyo + JSLD height to WGS 84 (35)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.81,'EPSG','9104','EPSG','8602','Longitude offset',-12.45,'EPSG','9104','EPSG','8604','Geoid height',37.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 400140',0); INSERT INTO "usage" VALUES('EPSG','11635','other_transformation','EPSG','15624','EPSG','2454','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15625','Tokyo + JSLD height to WGS 84 (36)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.92,'EPSG','9104','EPSG','8602','Longitude offset',-12.79,'EPSG','9104','EPSG','8604','Geoid height',38.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 400141',0); INSERT INTO "usage" VALUES('EPSG','11636','other_transformation','EPSG','15625','EPSG','2455','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15626','Tokyo + JSLD height to WGS 84 (37)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',9.91,'EPSG','9104','EPSG','8602','Longitude offset',-12.21,'EPSG','9104','EPSG','8604','Geoid height',36.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 392139',0); INSERT INTO "usage" VALUES('EPSG','11637','other_transformation','EPSG','15626','EPSG','2456','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15627','Tokyo + JSLD height to WGS 84 (38)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.08,'EPSG','9104','EPSG','8602','Longitude offset',-12.35,'EPSG','9104','EPSG','8604','Geoid height',39.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 392140',0); INSERT INTO "usage" VALUES('EPSG','11638','other_transformation','EPSG','15627','EPSG','2457','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15628','Tokyo + JSLD height to WGS 84 (39)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.19,'EPSG','9104','EPSG','8602','Longitude offset',-12.74,'EPSG','9104','EPSG','8604','Geoid height',40.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 392141',0); INSERT INTO "usage" VALUES('EPSG','11639','other_transformation','EPSG','15628','EPSG','2458','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15629','Tokyo + JSLD height to WGS 84 (40)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.29,'EPSG','9104','EPSG','8602','Longitude offset',-12.13,'EPSG','9104','EPSG','8604','Geoid height',38.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 384139',0); INSERT INTO "usage" VALUES('EPSG','11640','other_transformation','EPSG','15629','EPSG','2459','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15630','Tokyo + JSLD height to WGS 84 (41)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.33,'EPSG','9104','EPSG','8602','Longitude offset',-12.27,'EPSG','9104','EPSG','8604','Geoid height',40.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 384140',0); INSERT INTO "usage" VALUES('EPSG','11641','other_transformation','EPSG','15630','EPSG','2460','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15631','Tokyo + JSLD height to WGS 84 (42)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.45,'EPSG','9104','EPSG','8602','Longitude offset',-12.61,'EPSG','9104','EPSG','8604','Geoid height',41.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 384141',0); INSERT INTO "usage" VALUES('EPSG','11642','other_transformation','EPSG','15631','EPSG','2461','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15632','Tokyo + JSLD height to WGS 84 (43)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.54,'EPSG','9104','EPSG','8602','Longitude offset',-11.96,'EPSG','9104','EPSG','8604','Geoid height',39.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 380139',0); INSERT INTO "usage" VALUES('EPSG','11643','other_transformation','EPSG','15632','EPSG','2462','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15633','Tokyo + JSLD height to WGS 84 (44)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.65,'EPSG','9104','EPSG','8602','Longitude offset',-12.27,'EPSG','9104','EPSG','8604','Geoid height',41.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 380140',0); INSERT INTO "usage" VALUES('EPSG','11644','other_transformation','EPSG','15633','EPSG','2463','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15634','Tokyo + JSLD height to WGS 84 (45)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.67,'EPSG','9104','EPSG','8602','Longitude offset',-12.5,'EPSG','9104','EPSG','8604','Geoid height',41.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 380141',0); INSERT INTO "usage" VALUES('EPSG','11645','other_transformation','EPSG','15634','EPSG','2464','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15635','Tokyo + JSLD height to WGS 84 (46)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.67,'EPSG','9104','EPSG','8602','Longitude offset',-10.86,'EPSG','9104','EPSG','8604','Geoid height',38.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372136',0); INSERT INTO "usage" VALUES('EPSG','11646','other_transformation','EPSG','15635','EPSG','2465','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15636','Tokyo + JSLD height to WGS 84 (47)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.68,'EPSG','9104','EPSG','8602','Longitude offset',-10.97,'EPSG','9104','EPSG','8604','Geoid height',36.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372137',0); INSERT INTO "usage" VALUES('EPSG','11647','other_transformation','EPSG','15636','EPSG','2466','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15637','Tokyo + JSLD height to WGS 84 (48)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.8,'EPSG','9104','EPSG','8602','Longitude offset',-11.53,'EPSG','9104','EPSG','8604','Geoid height',39.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372138',0); INSERT INTO "usage" VALUES('EPSG','11648','other_transformation','EPSG','15637','EPSG','2467','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15638','Tokyo + JSLD height to WGS 84 (49)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.8,'EPSG','9104','EPSG','8602','Longitude offset',-11.73,'EPSG','9104','EPSG','8604','Geoid height',40.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372139',0); INSERT INTO "usage" VALUES('EPSG','11649','other_transformation','EPSG','15638','EPSG','2468','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15639','Tokyo + JSLD height to WGS 84 (50)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.92,'EPSG','9104','EPSG','8602','Longitude offset',-12.16,'EPSG','9104','EPSG','8604','Geoid height',42.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372140',0); INSERT INTO "usage" VALUES('EPSG','11650','other_transformation','EPSG','15639','EPSG','2469','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15640','Tokyo + JSLD height to WGS 84 (51)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.0,'EPSG','9104','EPSG','8602','Longitude offset',-12.25,'EPSG','9104','EPSG','8604','Geoid height',41.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 372141',0); INSERT INTO "usage" VALUES('EPSG','11651','other_transformation','EPSG','15640','EPSG','2470','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15641','Tokyo + JSLD height to WGS 84 (52)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.83,'EPSG','9104','EPSG','8602','Longitude offset',-10.77,'EPSG','9104','EPSG','8604','Geoid height',36.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364136',0); INSERT INTO "usage" VALUES('EPSG','11652','other_transformation','EPSG','15641','EPSG','2471','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15642','Tokyo + JSLD height to WGS 84 (53)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.95,'EPSG','9104','EPSG','8602','Longitude offset',-11.0,'EPSG','9104','EPSG','8604','Geoid height',38.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364137',0); INSERT INTO "usage" VALUES('EPSG','11653','other_transformation','EPSG','15642','EPSG','2472','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15643','Tokyo + JSLD height to WGS 84 (54)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',10.97,'EPSG','9104','EPSG','8602','Longitude offset',-11.34,'EPSG','9104','EPSG','8604','Geoid height',40.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364138',0); INSERT INTO "usage" VALUES('EPSG','11654','other_transformation','EPSG','15643','EPSG','2473','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15644','Tokyo + JSLD height to WGS 84 (55)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.04,'EPSG','9104','EPSG','8602','Longitude offset',-11.69,'EPSG','9104','EPSG','8604','Geoid height',43.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364139',0); INSERT INTO "usage" VALUES('EPSG','11655','other_transformation','EPSG','15644','EPSG','2474','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15645','Tokyo + JSLD height to WGS 84 (56)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.17,'EPSG','9104','EPSG','8602','Longitude offset',-12.05,'EPSG','9104','EPSG','8604','Geoid height',42.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 364140',0); INSERT INTO "usage" VALUES('EPSG','11656','other_transformation','EPSG','15645','EPSG','2475','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15646','Tokyo + JSLD height to WGS 84 (57)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.11,'EPSG','9104','EPSG','8602','Longitude offset',-10.59,'EPSG','9104','EPSG','8604','Geoid height',37.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360136',0); INSERT INTO "usage" VALUES('EPSG','11657','other_transformation','EPSG','15646','EPSG','2476','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15647','Tokyo + JSLD height to WGS 84 (58)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.16,'EPSG','9104','EPSG','8602','Longitude offset',-10.97,'EPSG','9104','EPSG','8604','Geoid height',40.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360137',0); INSERT INTO "usage" VALUES('EPSG','11658','other_transformation','EPSG','15647','EPSG','2477','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15648','Tokyo + JSLD height to WGS 84 (59)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.29,'EPSG','9104','EPSG','8602','Longitude offset',-11.23,'EPSG','9104','EPSG','8604','Geoid height',42.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360138',0); INSERT INTO "usage" VALUES('EPSG','11659','other_transformation','EPSG','15648','EPSG','2478','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15649','Tokyo + JSLD height to WGS 84 (60)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.36,'EPSG','9104','EPSG','8602','Longitude offset',-11.59,'EPSG','9104','EPSG','8604','Geoid height',42.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360139',0); INSERT INTO "usage" VALUES('EPSG','11660','other_transformation','EPSG','15649','EPSG','2479','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15650','Tokyo + JSLD height to WGS 84 (61)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.44,'EPSG','9104','EPSG','8602','Longitude offset',-11.88,'EPSG','9104','EPSG','8604','Geoid height',40.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 360140',0); INSERT INTO "usage" VALUES('EPSG','11661','other_transformation','EPSG','15650','EPSG','2480','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15651','Tokyo + JSLD height to WGS 84 (62)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.27,'EPSG','9104','EPSG','8602','Longitude offset',-9.31,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352132',0); INSERT INTO "usage" VALUES('EPSG','11662','other_transformation','EPSG','15651','EPSG','2481','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15652','Tokyo + JSLD height to WGS 84 (63)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.33,'EPSG','9104','EPSG','8602','Longitude offset',-9.52,'EPSG','9104','EPSG','8604','Geoid height',33.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352133',0); INSERT INTO "usage" VALUES('EPSG','11663','other_transformation','EPSG','15652','EPSG','2482','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15653','Tokyo + JSLD height to WGS 84 (64)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.38,'EPSG','9104','EPSG','8602','Longitude offset',-9.86,'EPSG','9104','EPSG','8604','Geoid height',34.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352134',0); INSERT INTO "usage" VALUES('EPSG','11664','other_transformation','EPSG','15653','EPSG','2483','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15654','Tokyo + JSLD height to WGS 84 (65)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.41,'EPSG','9104','EPSG','8602','Longitude offset',-10.14,'EPSG','9104','EPSG','8604','Geoid height',35.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352135',0); INSERT INTO "usage" VALUES('EPSG','11665','other_transformation','EPSG','15654','EPSG','2484','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15655','Tokyo + JSLD height to WGS 84 (66)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.39,'EPSG','9104','EPSG','8602','Longitude offset',-10.52,'EPSG','9104','EPSG','8604','Geoid height',37.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352136',0); INSERT INTO "usage" VALUES('EPSG','11666','other_transformation','EPSG','15655','EPSG','2485','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15656','Tokyo + JSLD height to WGS 84 (67)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.49,'EPSG','9104','EPSG','8602','Longitude offset',-10.83,'EPSG','9104','EPSG','8604','Geoid height',39.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352137',0); INSERT INTO "usage" VALUES('EPSG','11667','other_transformation','EPSG','15656','EPSG','2486','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15657','Tokyo + JSLD height to WGS 84 (68)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.58,'EPSG','9104','EPSG','8602','Longitude offset',-11.21,'EPSG','9104','EPSG','8604','Geoid height',41.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352138',0); INSERT INTO "usage" VALUES('EPSG','11668','other_transformation','EPSG','15657','EPSG','2487','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15658','Tokyo + JSLD height to WGS 84 (69)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.65,'EPSG','9104','EPSG','8602','Longitude offset',-11.53,'EPSG','9104','EPSG','8604','Geoid height',38.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352139',0); INSERT INTO "usage" VALUES('EPSG','11669','other_transformation','EPSG','15658','EPSG','2488','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15659','Tokyo + JSLD height to WGS 84 (70)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.72,'EPSG','9104','EPSG','8602','Longitude offset',-11.8,'EPSG','9104','EPSG','8604','Geoid height',34.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 352140',0); INSERT INTO "usage" VALUES('EPSG','11670','other_transformation','EPSG','15659','EPSG','2489','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15660','Tokyo + JSLD height to WGS 84 (71)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.44,'EPSG','9104','EPSG','8602','Longitude offset',-9.21,'EPSG','9104','EPSG','8604','Geoid height',32.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344132',0); INSERT INTO "usage" VALUES('EPSG','11671','other_transformation','EPSG','15660','EPSG','2490','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15661','Tokyo + JSLD height to WGS 84 (72)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.47,'EPSG','9104','EPSG','8602','Longitude offset',-9.52,'EPSG','9104','EPSG','8604','Geoid height',35.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344133',0); INSERT INTO "usage" VALUES('EPSG','11672','other_transformation','EPSG','15661','EPSG','2491','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15662','Tokyo + JSLD height to WGS 84 (73)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.55,'EPSG','9104','EPSG','8602','Longitude offset',-9.8,'EPSG','9104','EPSG','8604','Geoid height',35.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344134',0); INSERT INTO "usage" VALUES('EPSG','11673','other_transformation','EPSG','15662','EPSG','2492','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15663','Tokyo + JSLD height to WGS 84 (74)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.61,'EPSG','9104','EPSG','8602','Longitude offset',-10.12,'EPSG','9104','EPSG','8604','Geoid height',35.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344135',0); INSERT INTO "usage" VALUES('EPSG','11674','other_transformation','EPSG','15663','EPSG','2493','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15664','Tokyo + JSLD height to WGS 84 (75)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.66,'EPSG','9104','EPSG','8602','Longitude offset',-10.47,'EPSG','9104','EPSG','8604','Geoid height',37.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344136',0); INSERT INTO "usage" VALUES('EPSG','11675','other_transformation','EPSG','15664','EPSG','2494','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15665','Tokyo + JSLD height to WGS 84 (76)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.78,'EPSG','9104','EPSG','8602','Longitude offset',-10.79,'EPSG','9104','EPSG','8604','Geoid height',39.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344137',0); INSERT INTO "usage" VALUES('EPSG','11676','other_transformation','EPSG','15665','EPSG','2495','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15666','Tokyo + JSLD height to WGS 84 (77)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.85,'EPSG','9104','EPSG','8602','Longitude offset',-11.13,'EPSG','9104','EPSG','8604','Geoid height',39.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344138',0); INSERT INTO "usage" VALUES('EPSG','11677','other_transformation','EPSG','15666','EPSG','2496','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15667','Tokyo + JSLD height to WGS 84 (78)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.9,'EPSG','9104','EPSG','8602','Longitude offset',-11.47,'EPSG','9104','EPSG','8604','Geoid height',36.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344139',0); INSERT INTO "usage" VALUES('EPSG','11678','other_transformation','EPSG','15667','EPSG','2497','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15668','Tokyo + JSLD height to WGS 84 (79)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.91,'EPSG','9104','EPSG','8602','Longitude offset',-11.69,'EPSG','9104','EPSG','8604','Geoid height',33.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 344140',0); INSERT INTO "usage" VALUES('EPSG','11679','other_transformation','EPSG','15668','EPSG','2498','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15669','Tokyo + JSLD height to WGS 84 (80)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.65,'EPSG','9104','EPSG','8602','Longitude offset',-8.59,'EPSG','9104','EPSG','8604','Geoid height',29.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340130',0); INSERT INTO "usage" VALUES('EPSG','11680','other_transformation','EPSG','15669','EPSG','2499','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15670','Tokyo + JSLD height to WGS 84 (81)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.68,'EPSG','9104','EPSG','8602','Longitude offset',-8.8,'EPSG','9104','EPSG','8604','Geoid height',30.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340131',0); INSERT INTO "usage" VALUES('EPSG','11681','other_transformation','EPSG','15670','EPSG','2500','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15671','Tokyo + JSLD height to WGS 84 (82)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.73,'EPSG','9104','EPSG','8602','Longitude offset',-9.04,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340132',0); INSERT INTO "usage" VALUES('EPSG','11682','other_transformation','EPSG','15671','EPSG','2501','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15672','Tokyo + JSLD height to WGS 84 (83)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.72,'EPSG','9104','EPSG','8602','Longitude offset',-9.48,'EPSG','9104','EPSG','8604','Geoid height',35.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340133',0); INSERT INTO "usage" VALUES('EPSG','11683','other_transformation','EPSG','15672','EPSG','2502','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15673','Tokyo + JSLD height to WGS 84 (84)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.81,'EPSG','9104','EPSG','8602','Longitude offset',9.74,'EPSG','9104','EPSG','8604','Geoid height',35.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340134',0); INSERT INTO "usage" VALUES('EPSG','11684','other_transformation','EPSG','15673','EPSG','2503','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15674','Tokyo + JSLD height to WGS 84 (85)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.88,'EPSG','9104','EPSG','8602','Longitude offset',-10.1,'EPSG','9104','EPSG','8604','Geoid height',37.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340135',0); INSERT INTO "usage" VALUES('EPSG','11685','other_transformation','EPSG','15674','EPSG','2504','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15675','Tokyo + JSLD height to WGS 84 (86)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.91,'EPSG','9104','EPSG','8602','Longitude offset',-10.35,'EPSG','9104','EPSG','8604','Geoid height',37.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340136',0); INSERT INTO "usage" VALUES('EPSG','11686','other_transformation','EPSG','15675','EPSG','2505','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15676','Tokyo + JSLD height to WGS 84 (87)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.9,'EPSG','9104','EPSG','8602','Longitude offset',-10.7,'EPSG','9104','EPSG','8604','Geoid height',39.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340137',0); INSERT INTO "usage" VALUES('EPSG','11687','other_transformation','EPSG','15676','EPSG','2506','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15677','Tokyo + JSLD height to WGS 84 (88)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.02,'EPSG','9104','EPSG','8602','Longitude offset',-11.09,'EPSG','9104','EPSG','8604','Geoid height',38.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 340138',0); INSERT INTO "usage" VALUES('EPSG','11688','other_transformation','EPSG','15677','EPSG','2507','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15678','Tokyo + JSLD height to WGS 84 (89)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.87,'EPSG','9104','EPSG','8602','Longitude offset',-8.23,'EPSG','9104','EPSG','8604','Geoid height',29.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332129',0); INSERT INTO "usage" VALUES('EPSG','11689','other_transformation','EPSG','15678','EPSG','2508','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15679','Tokyo + JSLD height to WGS 84 (90)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.84,'EPSG','9104','EPSG','8602','Longitude offset',-8.44,'EPSG','9104','EPSG','8604','Geoid height',30.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332130',0); INSERT INTO "usage" VALUES('EPSG','11690','other_transformation','EPSG','15679','EPSG','2509','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15680','Tokyo + JSLD height to WGS 84 (91)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.94,'EPSG','9104','EPSG','8602','Longitude offset',-8.71,'EPSG','9104','EPSG','8604','Geoid height',30.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332131',0); INSERT INTO "usage" VALUES('EPSG','11691','other_transformation','EPSG','15680','EPSG','2510','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15681','Tokyo + JSLD height to WGS 84 (92)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',11.99,'EPSG','9104','EPSG','8602','Longitude offset',-9.02,'EPSG','9104','EPSG','8604','Geoid height',30.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332132',0); INSERT INTO "usage" VALUES('EPSG','11692','other_transformation','EPSG','15681','EPSG','2511','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15682','Tokyo + JSLD height to WGS 84 (93)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.05,'EPSG','9104','EPSG','8602','Longitude offset',-9.36,'EPSG','9104','EPSG','8604','Geoid height',35.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332133',0); INSERT INTO "usage" VALUES('EPSG','11693','other_transformation','EPSG','15682','EPSG','2512','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15683','Tokyo + JSLD height to WGS 84 (94)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.1,'EPSG','9104','EPSG','8602','Longitude offset',-9.64,'EPSG','9104','EPSG','8604','Geoid height',35.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332134',0); INSERT INTO "usage" VALUES('EPSG','11694','other_transformation','EPSG','15683','EPSG','2513','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15684','Tokyo + JSLD height to WGS 84 (95)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.1,'EPSG','9104','EPSG','8602','Longitude offset',-10.08,'EPSG','9104','EPSG','8604','Geoid height',37.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332135',0); INSERT INTO "usage" VALUES('EPSG','11695','other_transformation','EPSG','15684','EPSG','2514','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15685','Tokyo + JSLD height to WGS 84 (96)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.07,'EPSG','9104','EPSG','8602','Longitude offset',-10.25,'EPSG','9104','EPSG','8604','Geoid height',37.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 332136',0); INSERT INTO "usage" VALUES('EPSG','11696','other_transformation','EPSG','15685','EPSG','2515','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15686','Tokyo + JSLD height to WGS 84 (97)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.0,'EPSG','9104','EPSG','8602','Longitude offset',-8.15,'EPSG','9104','EPSG','8604','Geoid height',32.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324129',0); INSERT INTO "usage" VALUES('EPSG','11697','other_transformation','EPSG','15686','EPSG','2516','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15687','Tokyo + JSLD height to WGS 84 (98)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.06,'EPSG','9104','EPSG','8602','Longitude offset',-8.38,'EPSG','9104','EPSG','8604','Geoid height',31.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324130',0); INSERT INTO "usage" VALUES('EPSG','11698','other_transformation','EPSG','15687','EPSG','2517','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15688','Tokyo + JSLD height to WGS 84 (99)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.17,'EPSG','9104','EPSG','8602','Longitude offset',-8.69,'EPSG','9104','EPSG','8604','Geoid height',30.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324131',0); INSERT INTO "usage" VALUES('EPSG','11699','other_transformation','EPSG','15688','EPSG','2518','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15689','Tokyo + JSLD height to WGS 84 (100)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.23,'EPSG','9104','EPSG','8602','Longitude offset',-8.99,'EPSG','9104','EPSG','8604','Geoid height',31.7,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324132',0); INSERT INTO "usage" VALUES('EPSG','11700','other_transformation','EPSG','15689','EPSG','2519','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15690','Tokyo + JSLD height to WGS 84 (101)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.21,'EPSG','9104','EPSG','8602','Longitude offset',-9.21,'EPSG','9104','EPSG','8604','Geoid height',34.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324133',0); INSERT INTO "usage" VALUES('EPSG','11701','other_transformation','EPSG','15690','EPSG','2520','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15691','Tokyo + JSLD height to WGS 84 (102)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.28,'EPSG','9104','EPSG','8602','Longitude offset',-9.6,'EPSG','9104','EPSG','8604','Geoid height',33.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 324134',0); INSERT INTO "usage" VALUES('EPSG','11702','other_transformation','EPSG','15691','EPSG','2521','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15692','Tokyo + JSLD height to WGS 84 (103)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.28,'EPSG','9104','EPSG','8602','Longitude offset',-8.25,'EPSG','9104','EPSG','8604','Geoid height',31.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 320130',0); INSERT INTO "usage" VALUES('EPSG','11703','other_transformation','EPSG','15692','EPSG','2522','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15693','Tokyo + JSLD height to WGS 84 (104)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.37,'EPSG','9104','EPSG','8602','Longitude offset',-8.55,'EPSG','9104','EPSG','8604','Geoid height',29.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 320131',0); INSERT INTO "usage" VALUES('EPSG','11704','other_transformation','EPSG','15693','EPSG','2523','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15694','Tokyo + JSLD height to WGS 84 (105)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.53,'EPSG','9104','EPSG','8602','Longitude offset',-8.21,'EPSG','9104','EPSG','8604','Geoid height',31.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 320132',0); INSERT INTO "usage" VALUES('EPSG','11705','other_transformation','EPSG','15694','EPSG','2524','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15695','Tokyo + JSLD height to WGS 84 (106)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.57,'EPSG','9104','EPSG','8602','Longitude offset',-8.4,'EPSG','9104','EPSG','8604','Geoid height',28.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 312130',0); INSERT INTO "usage" VALUES('EPSG','11706','other_transformation','EPSG','15695','EPSG','2525','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15696','Tokyo + JSLD height to WGS 84 (107)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',12.71,'EPSG','9104','EPSG','8602','Longitude offset',-8.17,'EPSG','9104','EPSG','8604','Geoid height',29.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 312131',0); INSERT INTO "usage" VALUES('EPSG','11707','other_transformation','EPSG','15696','EPSG','2526','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15697','Tokyo + JSLD height to WGS 84 (6)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',7.92,'EPSG','9104','EPSG','8602','Longitude offset',-13.88,'EPSG','9104','EPSG','8604','Geoid height',26.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 452141',0); INSERT INTO "usage" VALUES('EPSG','11708','other_transformation','EPSG','15697','EPSG','2425','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15747','Tombak LNG Plant Grid to Nakhl-e Ghanem / UTM zone 39N (1)','','EPSG','9621','Similarity transformation','EPSG','5817','EPSG','3307',0.0,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',611267.2865,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',3046565.8255,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9997728332,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',315.0,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Tot-Irn',0); INSERT INTO "usage" VALUES('EPSG','11758','other_transformation','EPSG','15747','EPSG','3141','EPSG','1029'); INSERT INTO "other_transformation" VALUES('EPSG','15857','IGN Astro 1960 / UTM zone 28N to Mauritania 1999 / UTM zone 28N (1)','Parameter values consistent with the OGP Affine parametric transformation method derived by OGP from the published Helmert 2D parameter values. May be used for transformations to WGS 84 - see tfm code 15861.','EPSG','9624','Affine parametric transformation','EPSG','3367','EPSG','3343',40.0,'EPSG','8623','A0',-532.876,'EPSG','9001','EPSG','8624','A1',1.00017216658401,'EPSG','9203','EPSG','8625','A2',9.029305555e-05,'EPSG','9203','EPSG','8639','B0',-34.015,'EPSG','9001','EPSG','8640','B1',-9.029305555e-05,'EPSG','9203','EPSG','8641','B2',1.00017216658401,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MMI-Mau W',0); INSERT INTO "usage" VALUES('EPSG','11868','other_transformation','EPSG','15857','EPSG','2971','EPSG','1249'); INSERT INTO "other_transformation" VALUES('EPSG','15858','IGN Astro 1960 / UTM zone 29N to Mauritania 1999 / UTM zone 29N (1)','Parameter values consistent with the OGP Affine parametric transformation method derived by OGP from the published Helmert 2D parameter values. May be used for transformations to WGS 84 - see tfm code 15862.','EPSG','9624','Affine parametric transformation','EPSG','3368','EPSG','3344',40.0,'EPSG','8623','A0',-409.264,'EPSG','9001','EPSG','8624','A1',1.00017432259949,'EPSG','9203','EPSG','8625','A2',9.14562824e-05,'EPSG','9203','EPSG','8639','B0',-88.803,'EPSG','9001','EPSG','8640','B1',-9.14562824e-05,'EPSG','9203','EPSG','8641','B2',1.00017432259949,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MMI-Mau C',0); INSERT INTO "usage" VALUES('EPSG','11869','other_transformation','EPSG','15858','EPSG','2970','EPSG','1249'); INSERT INTO "other_transformation" VALUES('EPSG','15859','IGN Astro 1960 / UTM zone 30N to Mauritania 1999 / UTM zone 30N (1)','Parameter values consistent with the OGP Affine parametric transformation method derived by OGP from the published Helmert 2D parameter values. May be used for transformations to WGS 84 - see tfm code 15863.','EPSG','9624','Affine parametric transformation','EPSG','3369','EPSG','3345',40.0,'EPSG','8623','A0',-286.351,'EPSG','9001','EPSG','8624','A1',1.0001754456884,'EPSG','9203','EPSG','8625','A2',9.270672363e-05,'EPSG','9203','EPSG','8639','B0',-146.722,'EPSG','9001','EPSG','8640','B1',-9.270672363e-05,'EPSG','9203','EPSG','8641','B2',1.0001754456884,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MMI-Mau E',0); INSERT INTO "usage" VALUES('EPSG','11870','other_transformation','EPSG','15859','EPSG','2969','EPSG','1249'); INSERT INTO "other_transformation" VALUES('EPSG','15861','IGN Astro 1960 / UTM zone 28N to WGS 84 / UTM zone 28N (1)','Transformation taken from IGN Astro 1960 / UTM zone 28N to Mauritania 1999 / UTM zone 28N (1) (tfm code 15857) assuming that Mauritania 1999 is equivalent to WGS 84 within the accuracy of this tfm.','EPSG','9624','Affine parametric transformation','EPSG','3367','EPSG','32628',40.0,'EPSG','8623','A0',-532.876,'EPSG','9001','EPSG','8624','A1',1.000172166584,'EPSG','9203','EPSG','8625','A2',9.029305555e-05,'EPSG','9203','EPSG','8639','B0',-34.015,'EPSG','9001','EPSG','8640','B1',-9.029305555e-05,'EPSG','9203','EPSG','8641','B2',1.000172166584,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mau W',0); INSERT INTO "usage" VALUES('EPSG','11872','other_transformation','EPSG','15861','EPSG','2971','EPSG','1252'); INSERT INTO "other_transformation" VALUES('EPSG','15862','IGN Astro 1960 / UTM zone 29N to WGS 84 / UTM zone 29N (1)','Transformation taken from IGN Astro 1960 / UTM zone 29N to Mauritania 1999 / UTM zone 29N (1) (tfm code 15858) assuming that Mauritania 1999 is equivalent to WGS 84 within the accuracy of this tfm.','EPSG','9624','Affine parametric transformation','EPSG','3368','EPSG','32629',1.0,'EPSG','8623','A0',-409.264,'EPSG','9001','EPSG','8624','A1',1.0001743225995,'EPSG','9203','EPSG','8625','A2',9.14562824e-05,'EPSG','9203','EPSG','8639','B0',-88.803,'EPSG','9001','EPSG','8640','B1',-9.14562824e-05,'EPSG','9203','EPSG','8641','B2',1.0001743225995,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mau C',0); INSERT INTO "usage" VALUES('EPSG','11873','other_transformation','EPSG','15862','EPSG','2970','EPSG','1252'); INSERT INTO "other_transformation" VALUES('EPSG','15863','IGN Astro 1960 / UTM zone 30N to WGS 84 / UTM zone 30N (1)','Transformation taken from IGN Astro 1960 / UTM zone 30N to Mauritania 1999 / UTM zone 30N (1) (tfm code 15859) assuming that Mauritania 1999 is equivalent to WGS 84 within the accuracy of this tfm.','EPSG','9624','Affine parametric transformation','EPSG','3369','EPSG','32630',1.0,'EPSG','8623','A0',-286.351,'EPSG','9001','EPSG','8624','A1',1.0001754456884,'EPSG','9203','EPSG','8625','A2',9.270672363e-05,'EPSG','9203','EPSG','8639','B0',-146.722,'EPSG','9001','EPSG','8640','B1',-9.270672363e-05,'EPSG','9203','EPSG','8641','B2',1.0001754456884,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mau E',0); INSERT INTO "usage" VALUES('EPSG','11874','other_transformation','EPSG','15863','EPSG','2969','EPSG','1252'); INSERT INTO "other_transformation" VALUES('EPSG','15922','Kertau 1968 / Singapore Grid to SVY21 / Singapore TM (1)','SLA used several affine transformations for migration of legacy data. These are not publicly available.','EPSG','9656','Cartesian Grid Offsets','EPSG','24500','EPSG','3414',2.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing offset',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-SGP',0); INSERT INTO "usage" VALUES('EPSG','11933','other_transformation','EPSG','15922','EPSG','1210','EPSG','1042'); proj-9.6.0/data/sql/other_transformation_custom.sql000664 001754 001755 00000004410 14764566077 022512 0ustar00e012349e012349000000 000000 -- This file is hand generated. -- Norway triangulated files INSERT INTO other_transformation VALUES( 'PROJ','NGO48_TO_ETRS89NO','NGO 1948 to ETRS89 (2)', 'Transformation based on a triangulated irregular network', 'PROJ','PROJString', '+proj=pipeline ' || '+step +proj=axisswap +order=2,1 ' || '+step +proj=tinshift +file=no_kv_ETRS89NO_NGO48_TIN.json +inv ' || '+step +proj=axisswap +order=2,1', 'EPSG','4273', 'EPSG','4258', 0.1, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','NGO48_TO_ETRS89NO_USAGE','other_transformation','PROJ','NGO48_TO_ETRS89NO','EPSG','1352','EPSG','1031'); -- Finland triangulated files INSERT INTO "concatenated_operation" VALUES('PROJ','KKJ_TO_ETRS89','KKJ to ETRS89 (using EPSG:10703)','Transformation based on a triangulated irregular network','EPSG','4123','EPSG','4258',NULL,NULL,0); INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',1,'EPSG','18193','forward'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',2,'EPSG','10703','forward'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',3,'EPSG','16065','reverse'); INSERT INTO "usage" VALUES( 'PROJ', 'KKJ_TO_ETRS89_USAGE', 'concatenated_operation', 'PROJ', 'KKJ_TO_ETRS89', 'EPSG','3333', -- extent 'EPSG','1024' -- unknown ); INSERT INTO "concatenated_operation" VALUES('PROJ','KKJ_TO_EUREF_FIN','KKJ to EUREF-FIN (using EPSG:10703)','Transformation based on a triangulated irregular network','EPSG','4123','EPSG','10690',NULL,NULL,0); INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',1,'EPSG','18193','forward'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',2,'EPSG','10703','forward'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',3,'EPSG','16065','reverse'); INSERT INTO "usage" VALUES( 'PROJ', 'KKJ_TO_EUREF_FIN_USAGE', 'concatenated_operation', 'PROJ', 'KKJ_TO_EUREF_FIN', 'EPSG','3333', -- extent 'EPSG','1024' -- unknown ); proj-9.6.0/data/sql/prime_meridian.sql000664 001754 001755 00000002532 14764566077 017640 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "prime_meridian" VALUES('EPSG','1026','Copenhagen',12.34399,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8901','Greenwich',0.0,'EPSG','9102',0); INSERT INTO "prime_meridian" VALUES('EPSG','8902','Lisbon',-9.0754862,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8903','Paris',2.5969213,'EPSG','9105',0); INSERT INTO "prime_meridian" VALUES('EPSG','8904','Bogota',-74.04513,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8905','Madrid',-3.411455,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8906','Rome',12.27084,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8907','Bern',7.26225,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8908','Jakarta',106.482779,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8909','Ferro',-17.4,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8910','Brussels',4.220471,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8911','Stockholm',18.03298,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8912','Athens',23.4258815,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8913','Oslo',10.43225,'EPSG','9110',0); INSERT INTO "prime_meridian" VALUES('EPSG','8914','Paris RGS',2.201395,'EPSG','9110',0); proj-9.6.0/data/sql/proj_db_table_defs.sql000664 001754 001755 00000156657 14764566077 020465 0ustar00e012349e012349000000 000000 --- Table structures -- Note on the INTEGER_OR_TEXT data type. This is a "non-standard" type -- declaration, but this is perfectly legal as SQLite is loosely typed. -- As this declaration contains the string INT, it is assigned INTEGER affinity. -- Which means that values provided either as text (that contains integer value) -- or integer will be stored as integers, whereas text values will be stored as -- text. See paragraph 3 and 3.1 of https://www.sqlite.org/datatype3.html. -- The "INTEGER_OR_TEXT" name is a hint for the user, and software like -- GDAL (>= 3.3) to expose the column as string... -- The effect of using this rather than TEXT is making the DB size go from -- 9 MB to 8.4. CREATE TABLE metadata( key TEXT NOT NULL PRIMARY KEY CHECK (length(key) >= 1), value TEXT NOT NULL ) WITHOUT ROWID; CREATE TABLE unit_of_measure( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), type TEXT NOT NULL CHECK (type IN ('length', 'angle', 'scale', 'time')), conv_factor FLOAT, proj_short_name TEXT, -- PROJ string name, like 'm', 'ft'. Might be NULL deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_unit_of_measure PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE celestial_body ( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), semi_major_axis FLOAT NOT NULL CHECK (semi_major_axis > 0), -- approximate (in metre) CONSTRAINT pk_celestial_body PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE ellipsoid ( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, celestial_body_auth_name TEXT NOT NULL, celestial_body_code INTEGER_OR_TEXT NOT NULL, semi_major_axis FLOAT NOT NULL CHECK (semi_major_axis > 0), uom_auth_name TEXT NOT NULL, uom_code INTEGER_OR_TEXT NOT NULL, inv_flattening FLOAT CHECK (inv_flattening = 0 OR inv_flattening >= 1.0), semi_minor_axis FLOAT CHECK (semi_minor_axis > 0 AND semi_minor_axis <= semi_major_axis), deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_ellipsoid PRIMARY KEY (auth_name, code), CONSTRAINT fk_ellipsoid_celestial_body FOREIGN KEY (celestial_body_auth_name, celestial_body_code) REFERENCES celestial_body(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_ellipsoid_unit_of_measure FOREIGN KEY (uom_auth_name, uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT check_ellipsoid_inv_flattening_semi_minor_mutually_exclusive CHECK ((inv_flattening IS NULL AND semi_minor_axis IS NOT NULL) OR (inv_flattening IS NOT NULL AND semi_minor_axis IS NULL)) ) WITHOUT ROWID; CREATE TABLE extent( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT NOT NULL, south_lat FLOAT CHECK (south_lat BETWEEN -90 AND 90), north_lat FLOAT CHECK (north_lat BETWEEN -90 AND 90), west_lon FLOAT CHECK (west_lon BETWEEN -180 AND 180), east_lon FLOAT CHECK (east_lon BETWEEN -180 AND 180), deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_extent PRIMARY KEY (auth_name, code), CONSTRAINT check_extent_lat CHECK (south_lat <= north_lat) ) WITHOUT ROWID; CREATE TABLE scope( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), scope TEXT NOT NULL CHECK (length(scope) >= 1), deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_scope PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE usage( auth_name TEXT CHECK (auth_name IS NULL OR length(auth_name) >= 1), code INTEGER_OR_TEXT CHECK (code IS NULL OR length(code) >= 1), object_table_name TEXT NOT NULL CHECK (object_table_name IN ( 'geodetic_datum', 'vertical_datum', 'engineering_datum', 'geodetic_crs', 'projected_crs', 'vertical_crs', 'compound_crs', 'engineering_crs', 'conversion', 'grid_transformation', 'helmert_transformation', 'other_transformation', 'concatenated_operation')), object_auth_name TEXT NOT NULL, object_code INTEGER_OR_TEXT NOT NULL, extent_auth_name TEXT NOT NULL, extent_code INTEGER_OR_TEXT NOT NULL, scope_auth_name TEXT NOT NULL, scope_code INTEGER_OR_TEXT NOT NULL, CONSTRAINT pk_usage PRIMARY KEY (auth_name, code), CONSTRAINT fk_usage_extent FOREIGN KEY (extent_auth_name, extent_code) REFERENCES extent(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_usage_scope FOREIGN KEY (scope_auth_name, scope_code) REFERENCES scope(auth_name, code) ON DELETE CASCADE ); CREATE INDEX idx_usage_object ON usage(object_table_name, object_auth_name, object_code); CREATE TABLE prime_meridian( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), longitude FLOAT NOT NULL CHECK (longitude BETWEEN -180 AND 180), uom_auth_name TEXT NOT NULL, uom_code INTEGER_OR_TEXT NOT NULL, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_prime_meridian PRIMARY KEY (auth_name, code), CONSTRAINT fk_prime_meridian_unit_of_measure FOREIGN KEY (uom_auth_name, uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE TABLE geodetic_datum ( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, ellipsoid_auth_name TEXT NOT NULL, ellipsoid_code INTEGER_OR_TEXT NOT NULL, prime_meridian_auth_name TEXT NOT NULL, prime_meridian_code INTEGER_OR_TEXT NOT NULL, publication_date TEXT, --- YYYY-MM-DD format frame_reference_epoch FLOAT, --- only set for dynamic datum, and should be set when it is a dynamic datum ensemble_accuracy FLOAT CHECK (ensemble_accuracy IS NULL OR ensemble_accuracy > 0), --- only for a datum ensemble. and should be set when it is a datum ensemble anchor TEXT, anchor_epoch FLOAT, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_geodetic_datum PRIMARY KEY (auth_name, code), CONSTRAINT fk_geodetic_datum_ellipsoid FOREIGN KEY (ellipsoid_auth_name, ellipsoid_code) REFERENCES ellipsoid(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_geodetic_datum_prime_meridian FOREIGN KEY (prime_meridian_auth_name, prime_meridian_code) REFERENCES prime_meridian(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE TABLE geodetic_datum_ensemble_member ( ensemble_auth_name TEXT NOT NULL, ensemble_code INTEGER_OR_TEXT NOT NULL, member_auth_name TEXT NOT NULL, member_code INTEGER_OR_TEXT NOT NULL, sequence INTEGER NOT NULL CHECK (sequence >= 1), CONSTRAINT fk_geodetic_datum_ensemble_member_ensemble FOREIGN KEY (ensemble_auth_name, ensemble_code) REFERENCES geodetic_datum(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_geodetic_datum_ensemble_member_ensemble_member FOREIGN KEY (member_auth_name, member_code) REFERENCES geodetic_datum(auth_name, code) ON DELETE CASCADE, CONSTRAINT unique_geodetic_datum_ensemble_member UNIQUE (ensemble_auth_name, ensemble_code, sequence) ); CREATE TABLE vertical_datum ( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, publication_date TEXT CHECK (NULL OR length(publication_date) = 10), --- YYYY-MM-DD format frame_reference_epoch FLOAT, --- only set for dynamic datum, and should be set when it is a dynamic datum ensemble_accuracy FLOAT CHECK (ensemble_accuracy IS NULL OR ensemble_accuracy > 0), --- only for a datum ensemble. and should be set when it is a datum ensemble anchor TEXT, anchor_epoch FLOAT, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_vertical_datum PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE vertical_datum_ensemble_member ( ensemble_auth_name TEXT NOT NULL, ensemble_code INTEGER_OR_TEXT NOT NULL, member_auth_name TEXT NOT NULL, member_code INTEGER_OR_TEXT NOT NULL, sequence INTEGER NOT NULL CHECK (sequence >= 1), CONSTRAINT fk_vertical_datum_ensemble_member_ensemble FOREIGN KEY (ensemble_auth_name, ensemble_code) REFERENCES vertical_datum(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_vertical_datum_ensemble_member_ensemble_member FOREIGN KEY (member_auth_name, member_code) REFERENCES vertical_datum(auth_name, code) ON DELETE CASCADE, CONSTRAINT unique_vertical_datum_ensemble_member UNIQUE (ensemble_auth_name, ensemble_code, sequence) ); CREATE TABLE engineering_datum ( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), publication_date TEXT, --- YYYY-MM-DD format anchor TEXT, anchor_epoch FLOAT, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_engineering_datum PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE coordinate_system( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), type TEXT NOT NULL CHECK (type IN ('Cartesian', 'vertical', 'ellipsoidal', 'spherical', 'ordinal')), dimension SMALLINT NOT NULL CHECK (dimension BETWEEN 1 AND 3), CONSTRAINT pk_coordinate_system PRIMARY KEY (auth_name, code), CONSTRAINT check_cs_vertical CHECK (type != 'vertical' OR dimension = 1), CONSTRAINT check_cs_cartesian CHECK (type != 'Cartesian' OR dimension IN (2,3)), CONSTRAINT check_cs_ellipsoidal CHECK (type != 'ellipsoidal' OR dimension IN (2,3)) ); CREATE TABLE axis( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), abbrev TEXT NOT NULL, orientation TEXT NOT NULL, coordinate_system_auth_name TEXT NOT NULL, coordinate_system_code INTEGER_OR_TEXT NOT NULL, coordinate_system_order SMALLINT NOT NULL CHECK (coordinate_system_order BETWEEN 1 AND 3), uom_auth_name TEXT, uom_code INTEGER_OR_TEXT, CONSTRAINT pk_axis PRIMARY KEY (auth_name, code), CONSTRAINT fk_axis_coordinate_system FOREIGN KEY (coordinate_system_auth_name, coordinate_system_code) REFERENCES coordinate_system(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_axis_unit_of_measure FOREIGN KEY (uom_auth_name, uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE TABLE geodetic_crs( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, type TEXT NOT NULL CHECK (type IN ('geographic 2D', 'geographic 3D', 'geocentric', 'other')), coordinate_system_auth_name TEXT, coordinate_system_code INTEGER_OR_TEXT, datum_auth_name TEXT, datum_code INTEGER_OR_TEXT, text_definition TEXT, -- PROJ string or WKT string. Use of this is discouraged as prone to definition ambiguities deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_geodetic_crs PRIMARY KEY (auth_name, code), CONSTRAINT fk_geodetic_crs_coordinate_system FOREIGN KEY (coordinate_system_auth_name, coordinate_system_code) REFERENCES coordinate_system(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_geodetic_crs_datum FOREIGN KEY (datum_auth_name, datum_code) REFERENCES geodetic_datum(auth_name, code) ON DELETE CASCADE, CONSTRAINT check_geodetic_crs_cs CHECK (NOT ((coordinate_system_auth_name IS NULL OR coordinate_system_code IS NULL) AND text_definition IS NULL)), CONSTRAINT check_geodetic_crs_cs_bis CHECK (NOT ((NOT(coordinate_system_auth_name IS NULL OR coordinate_system_code IS NULL)) AND text_definition IS NOT NULL)), CONSTRAINT check_geodetic_crs_datum CHECK (NOT ((datum_auth_name IS NULL OR datum_code IS NULL) AND text_definition IS NULL)), CONSTRAINT check_geodetic_crs_datum_bis CHECK (NOT ((NOT(datum_auth_name IS NULL OR datum_code IS NULL)) AND text_definition IS NOT NULL)) ) WITHOUT ROWID; CREATE TABLE vertical_crs( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, coordinate_system_auth_name TEXT NOT NULL, coordinate_system_code INTEGER_OR_TEXT NOT NULL, datum_auth_name TEXT NOT NULL, datum_code INTEGER_OR_TEXT NOT NULL, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_vertical_crs PRIMARY KEY (auth_name, code), CONSTRAINT fk_vertical_crs_coordinate_system FOREIGN KEY (coordinate_system_auth_name, coordinate_system_code) REFERENCES coordinate_system(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_vertical_crs_datum FOREIGN KEY (datum_auth_name, datum_code) REFERENCES vertical_datum(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE TABLE engineering_crs( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, coordinate_system_auth_name TEXT NOT NULL, coordinate_system_code INTEGER_OR_TEXT NOT NULL, datum_auth_name TEXT NOT NULL, datum_code INTEGER_OR_TEXT NOT NULL, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_engineering_crs PRIMARY KEY (auth_name, code), CONSTRAINT fk_engineering_crs_coordinate_system FOREIGN KEY (coordinate_system_auth_name, coordinate_system_code) REFERENCES coordinate_system(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_engineering_crs_datum FOREIGN KEY (datum_auth_name, datum_code) REFERENCES engineering_datum(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; -- Authorities provided by the upstream PROJ -- This is used to check unicity of object names CREATE TABLE builtin_authorities(auth_name TEXT NOT NULL PRIMARY KEY) WITHOUT ROWID; INSERT INTO builtin_authorities VALUES ('EPSG'), ('ESRI'), ('IAU_2015'), ('IGNF'), ('NKG'), ('NRCAN'), ('OGC'), ('PROJ') ; CREATE TABLE conversion_method( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), CONSTRAINT pk_conversion_method PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE conversion_param( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), CONSTRAINT pk_conversion_param PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE conversion_table( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, method_auth_name TEXT CHECK (method_auth_name IS NULL OR length(method_auth_name) >= 1), method_code INTEGER_OR_TEXT CHECK (method_code IS NULL OR length(method_code) >= 1), -- method_name TEXT, param1_auth_name TEXT, param1_code INTEGER_OR_TEXT, -- param1_name TEXT, param1_value FLOAT, param1_uom_auth_name TEXT, param1_uom_code INTEGER_OR_TEXT, param2_auth_name TEXT, param2_code INTEGER_OR_TEXT, --param2_name TEXT, param2_value FLOAT, param2_uom_auth_name TEXT, param2_uom_code INTEGER_OR_TEXT, param3_auth_name TEXT, param3_code INTEGER_OR_TEXT, --param3_name TEXT, param3_value FLOAT, param3_uom_auth_name TEXT, param3_uom_code INTEGER_OR_TEXT, param4_auth_name TEXT, param4_code INTEGER_OR_TEXT, --param4_name TEXT, param4_value FLOAT, param4_uom_auth_name TEXT, param4_uom_code INTEGER_OR_TEXT, param5_auth_name TEXT, param5_code INTEGER_OR_TEXT, --param5_name TEXT, param5_value FLOAT, param5_uom_auth_name TEXT, param5_uom_code INTEGER_OR_TEXT, param6_auth_name TEXT, param6_code INTEGER_OR_TEXT, --param6_name TEXT, param6_value FLOAT, param6_uom_auth_name TEXT, param6_uom_code INTEGER_OR_TEXT, param7_auth_name TEXT, param7_code INTEGER_OR_TEXT, --param7_name TEXT, param7_value FLOAT, param7_uom_auth_name TEXT, param7_uom_code INTEGER_OR_TEXT, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_conversion PRIMARY KEY (auth_name, code), CONSTRAINT fk_conversion_method FOREIGN KEY (method_auth_name, method_code) REFERENCES conversion_method(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_conversion_coordinate_operation FOREIGN KEY (auth_name, code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_conversion_param1_uom FOREIGN KEY (param1_uom_auth_name, param1_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_conversion_param2_uom FOREIGN KEY (param2_uom_auth_name, param2_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_conversion_param3_uom FOREIGN KEY (param3_uom_auth_name, param3_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_conversion_param4_uom FOREIGN KEY (param4_uom_auth_name, param4_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_conversion_param5_uom FOREIGN KEY (param5_uom_auth_name, param5_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_conversion_param6_uom FOREIGN KEY (param6_uom_auth_name, param6_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_conversion_param7_uom FOREIGN KEY (param7_uom_auth_name, param7_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE VIEW conversion AS SELECT c.auth_name, c.code, c.name, c.description, c.method_auth_name, c.method_code, m.name AS method_name, c.param1_auth_name, c.param1_code, param1.name AS param1_name, c.param1_value, c.param1_uom_auth_name, c.param1_uom_code, c.param2_auth_name, c.param2_code, param2.name AS param2_name, c.param2_value, c.param2_uom_auth_name, c.param2_uom_code, c.param3_auth_name, c.param3_code, param3.name AS param3_name, c.param3_value, c.param3_uom_auth_name, c.param3_uom_code, c.param4_auth_name, c.param4_code, param4.name AS param4_name, c.param4_value, c.param4_uom_auth_name, c.param4_uom_code, c.param5_auth_name, c.param5_code, param5.name AS param5_name, c.param5_value, c.param5_uom_auth_name, c.param5_uom_code, c.param6_auth_name, c.param6_code, param6.name AS param6_name, c.param6_value, c.param6_uom_auth_name, c.param6_uom_code, c.param7_auth_name, c.param7_code, param7.name AS param7_name, c.param7_value, c.param7_uom_auth_name, c.param7_uom_code, c.deprecated FROM conversion_table c LEFT JOIN conversion_method m ON c.method_auth_name = m.auth_name AND c.method_code = m.code LEFT JOIN conversion_param param1 ON c.param1_auth_name = param1.auth_name AND c.param1_code = param1.code LEFT JOIN conversion_param param2 ON c.param2_auth_name = param2.auth_name AND c.param2_code = param2.code LEFT JOIN conversion_param param3 ON c.param3_auth_name = param3.auth_name AND c.param3_code = param3.code LEFT JOIN conversion_param param4 ON c.param4_auth_name = param4.auth_name AND c.param4_code = param4.code LEFT JOIN conversion_param param5 ON c.param5_auth_name = param5.auth_name AND c.param5_code = param5.code LEFT JOIN conversion_param param6 ON c.param6_auth_name = param6.auth_name AND c.param6_code = param6.code LEFT JOIN conversion_param param7 ON c.param7_auth_name = param7.auth_name AND c.param7_code = param7.code ; CREATE TRIGGER conversion_insert_trigger_method INSTEAD OF INSERT ON conversion WHEN NOT EXISTS (SELECT 1 FROM conversion_method m WHERE m.auth_name = NEW.method_auth_name AND m.code = NEW.method_code AND m.name = NEW.method_name) BEGIN INSERT INTO conversion_method VALUES (NEW.method_auth_name, NEW.method_code, NEW.method_name); END; CREATE TRIGGER conversion_insert_trigger_param1 INSTEAD OF INSERT ON conversion WHEN NEW.param1_auth_name is NOT NULL AND NOT EXISTS (SELECT 1 FROM conversion_param p WHERE p.auth_name = NEW.param1_auth_name AND p.code = NEW.param1_code AND p.name = NEW.param1_name) BEGIN INSERT INTO conversion_param VALUES (NEW.param1_auth_name, NEW.param1_code, NEW.param1_name); END; CREATE TRIGGER conversion_insert_trigger_param2 INSTEAD OF INSERT ON conversion WHEN NEW.param2_auth_name is NOT NULL AND NOT EXISTS (SELECT 1 FROM conversion_param p WHERE p.auth_name = NEW.param2_auth_name AND p.code = NEW.param2_code AND p.name = NEW.param2_name) BEGIN INSERT INTO conversion_param VALUES (NEW.param2_auth_name, NEW.param2_code, NEW.param2_name); END; CREATE TRIGGER conversion_insert_trigger_param3 INSTEAD OF INSERT ON conversion WHEN NEW.param3_auth_name is NOT NULL AND NOT EXISTS (SELECT 1 FROM conversion_param p WHERE p.auth_name = NEW.param3_auth_name AND p.code = NEW.param3_code AND p.name = NEW.param3_name) BEGIN INSERT INTO conversion_param VALUES (NEW.param3_auth_name, NEW.param3_code, NEW.param3_name); END; CREATE TRIGGER conversion_insert_trigger_param4 INSTEAD OF INSERT ON conversion WHEN NEW.param4_auth_name is NOT NULL AND NOT EXISTS (SELECT 1 FROM conversion_param p WHERE p.auth_name = NEW.param4_auth_name AND p.code = NEW.param4_code AND p.name = NEW.param4_name) BEGIN INSERT INTO conversion_param VALUES (NEW.param4_auth_name, NEW.param4_code, NEW.param4_name); END; CREATE TRIGGER conversion_insert_trigger_param5 INSTEAD OF INSERT ON conversion WHEN NEW.param5_auth_name is NOT NULL AND NOT EXISTS (SELECT 1 FROM conversion_param p WHERE p.auth_name = NEW.param5_auth_name AND p.code = NEW.param5_code AND p.name = NEW.param5_name) BEGIN INSERT INTO conversion_param VALUES (NEW.param5_auth_name, NEW.param5_code, NEW.param5_name); END; CREATE TRIGGER conversion_insert_trigger_param6 INSTEAD OF INSERT ON conversion WHEN NEW.param6_auth_name is NOT NULL AND NOT EXISTS (SELECT 1 FROM conversion_param p WHERE p.auth_name = NEW.param6_auth_name AND p.code = NEW.param6_code AND p.name = NEW.param6_name) BEGIN INSERT INTO conversion_param VALUES (NEW.param6_auth_name, NEW.param6_code, NEW.param6_name); END; CREATE TRIGGER conversion_insert_trigger_param7 INSTEAD OF INSERT ON conversion WHEN NEW.param7_auth_name is NOT NULL AND NOT EXISTS (SELECT 1 FROM conversion_param p WHERE p.auth_name = NEW.param7_auth_name AND p.code = NEW.param7_code AND p.name = NEW.param7_name) BEGIN INSERT INTO conversion_param VALUES (NEW.param7_auth_name, NEW.param7_code, NEW.param7_name); END; CREATE TRIGGER conversion_insert_trigger_insert_into_conversion_table INSTEAD OF INSERT ON conversion BEGIN INSERT INTO conversion_table VALUES ( NEW.auth_name, NEW.code, NEW.name, NEW.description, NEW.method_auth_name, NEW.method_code, --NEW.method_name, NEW.param1_auth_name, NEW.param1_code, --NEW.param1_name, NEW.param1_value, NEW.param1_uom_auth_name, NEW.param1_uom_code, NEW.param2_auth_name, NEW.param2_code, --NEW.param2_name, NEW.param2_value, NEW.param2_uom_auth_name, NEW.param2_uom_code, NEW.param3_auth_name, NEW.param3_code, --NEW.param3_name, NEW.param3_value, NEW.param3_uom_auth_name, NEW.param3_uom_code, NEW.param4_auth_name, NEW.param4_code, --NEW.param4_name, NEW.param4_value, NEW.param4_uom_auth_name, NEW.param4_uom_code, NEW.param5_auth_name, NEW.param5_code, --NEW.param5_name, NEW.param5_value, NEW.param5_uom_auth_name, NEW.param5_uom_code, NEW.param6_auth_name, NEW.param6_code, --NEW.param6_name, NEW.param6_value, NEW.param6_uom_auth_name, NEW.param6_uom_code, NEW.param7_auth_name, NEW.param7_code, --NEW.param7_name, NEW.param7_value, NEW.param7_uom_auth_name, NEW.param7_uom_code, NEW.deprecated ); END; CREATE TABLE projected_crs( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, coordinate_system_auth_name TEXT, coordinate_system_code INTEGER_OR_TEXT, geodetic_crs_auth_name TEXT, geodetic_crs_code INTEGER_OR_TEXT, conversion_auth_name TEXT, conversion_code INTEGER_OR_TEXT, text_definition TEXT, -- PROJ string or WKT string. Use of this is discouraged as prone to definition ambiguities deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_projected_crs PRIMARY KEY (auth_name, code), CONSTRAINT fk_projected_crs_coordinate_system FOREIGN KEY (coordinate_system_auth_name, coordinate_system_code) REFERENCES coordinate_system(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_projected_crs_geodetic_crs FOREIGN KEY (geodetic_crs_auth_name, geodetic_crs_code) REFERENCES geodetic_crs(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_projected_crs_conversion FOREIGN KEY (conversion_auth_name, conversion_code) REFERENCES conversion_table(auth_name, code) ON DELETE CASCADE, CONSTRAINT check_projected_crs_cs CHECK (NOT((coordinate_system_auth_name IS NULL OR coordinate_system_code IS NULL) AND text_definition IS NULL)), CONSTRAINT check_projected_crs_cs_bis CHECK (NOT((NOT(coordinate_system_auth_name IS NULL OR coordinate_system_code IS NULL)) AND text_definition IS NOT NULL)), CONSTRAINT check_projected_crs_geodetic_crs CHECK (NOT((geodetic_crs_auth_name IS NULL OR geodetic_crs_code IS NULL) AND text_definition IS NULL)), CONSTRAINT check_projected_crs_conversion CHECK (NOT((NOT(conversion_auth_name IS NULL OR conversion_code IS NULL)) AND text_definition IS NOT NULL)) ) WITHOUT ROWID; CREATE TABLE compound_crs( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, horiz_crs_auth_name TEXT NOT NULL, horiz_crs_code INTEGER_OR_TEXT NOT NULL, vertical_crs_auth_name TEXT NOT NULL, vertical_crs_code INTEGER_OR_TEXT NOT NULL, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_compound_crs PRIMARY KEY (auth_name, code), CONSTRAINT fk_compound_crs_vertical_crs FOREIGN KEY (vertical_crs_auth_name, vertical_crs_code) REFERENCES vertical_crs(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE TABLE coordinate_metadata( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), description TEXT, crs_auth_name TEXT, crs_code INTEGER_OR_TEXT, crs_text_definition TEXT, -- WKT string or PROJJSON string. Mutually exclusive with (crs_auth_name, crs_code) coordinate_epoch DOUBLE, -- may be NULL deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_coordinate_metadata PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE coordinate_operation_method( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), CONSTRAINT pk_coordinate_operation_method PRIMARY KEY (auth_name, code) ) WITHOUT ROWID; CREATE TABLE helmert_transformation_table( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, method_auth_name TEXT NOT NULL CHECK (length(method_auth_name) >= 1), method_code INTEGER_OR_TEXT NOT NULL CHECK (length(method_code) >= 1), --method_name TEXT NOT NULL CHECK (length(method_name) >= 2), source_crs_auth_name TEXT NOT NULL, source_crs_code INTEGER_OR_TEXT NOT NULL, target_crs_auth_name TEXT NOT NULL, target_crs_code INTEGER_OR_TEXT NOT NULL, accuracy FLOAT CHECK (accuracy >= 0), tx FLOAT NOT NULL, ty FLOAT NOT NULL, tz FLOAT NOT NULL, translation_uom_auth_name TEXT NOT NULL, translation_uom_code INTEGER_OR_TEXT NOT NULL, rx FLOAT, ry FLOAT, rz FLOAT, rotation_uom_auth_name TEXT, rotation_uom_code INTEGER_OR_TEXT, scale_difference FLOAT, scale_difference_uom_auth_name TEXT, scale_difference_uom_code INTEGER_OR_TEXT, rate_tx FLOAT, rate_ty FLOAT, rate_tz FLOAT, rate_translation_uom_auth_name TEXT, rate_translation_uom_code INTEGER_OR_TEXT, rate_rx FLOAT, rate_ry FLOAT, rate_rz FLOAT, rate_rotation_uom_auth_name TEXT, rate_rotation_uom_code INTEGER_OR_TEXT, rate_scale_difference FLOAT, rate_scale_difference_uom_auth_name TEXT, rate_scale_difference_uom_code INTEGER_OR_TEXT, epoch FLOAT, epoch_uom_auth_name TEXT, epoch_uom_code INTEGER_OR_TEXT, px FLOAT, -- Pivot / evaluation point for Molodensky-Badekas py FLOAT, pz FLOAT, pivot_uom_auth_name TEXT, pivot_uom_code INTEGER_OR_TEXT, operation_version TEXT, -- normally mandatory in OGC Topic 2 but optional here deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_helmert_transformation PRIMARY KEY (auth_name, code), CONSTRAINT fk_helmert_transformation_source_crs FOREIGN KEY (source_crs_auth_name, source_crs_code) REFERENCES geodetic_crs(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_transformation_target_crs FOREIGN KEY (target_crs_auth_name, target_crs_code) REFERENCES geodetic_crs(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_transformation_method FOREIGN KEY (method_auth_name, method_code) REFERENCES coordinate_operation_method(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_helmert_transformation_coordinate_operation FOREIGN KEY (auth_name, code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_translation_uom FOREIGN KEY (translation_uom_auth_name, translation_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_rotation_uom FOREIGN KEY (rotation_uom_auth_name, rotation_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_scale_difference_uom FOREIGN KEY (scale_difference_uom_auth_name, scale_difference_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_rate_translation_uom FOREIGN KEY (rate_translation_uom_auth_name, rate_translation_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_rate_rotation_uom FOREIGN KEY (rate_rotation_uom_auth_name, rate_rotation_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_rate_scale_difference_uom FOREIGN KEY (rate_scale_difference_uom_auth_name, rate_scale_difference_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_epoch_uom FOREIGN KEY (epoch_uom_auth_name, epoch_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_helmert_pivot_uom FOREIGN KEY (pivot_uom_auth_name, pivot_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE VIEW helmert_transformation AS SELECT h.auth_name, h.code, h.name, h.description, h.method_auth_name, h.method_code, m.name AS method_name, h.source_crs_auth_name, h.source_crs_code, h.target_crs_auth_name, h.target_crs_code, h.accuracy, h.tx, h.ty, h.tz, h.translation_uom_auth_name, h.translation_uom_code, h.rx, h.ry, h.rz, h.rotation_uom_auth_name, h.rotation_uom_code, h.scale_difference, h.scale_difference_uom_auth_name, h.scale_difference_uom_code, h.rate_tx, h.rate_ty, h.rate_tz, h.rate_translation_uom_auth_name, h.rate_translation_uom_code, h.rate_rx, h.rate_ry, h.rate_rz, h.rate_rotation_uom_auth_name, h.rate_rotation_uom_code, h.rate_scale_difference, h.rate_scale_difference_uom_auth_name, h.rate_scale_difference_uom_code, h.epoch, h.epoch_uom_auth_name, h.epoch_uom_code, h.px, h.py, h.pz, h.pivot_uom_auth_name, h.pivot_uom_code, h.operation_version, h.deprecated FROM helmert_transformation_table h LEFT JOIN coordinate_operation_method m ON h.method_auth_name = m.auth_name AND h.method_code = m.code ; CREATE TRIGGER helmert_transformation_insert_trigger_method INSTEAD OF INSERT ON helmert_transformation WHEN NOT EXISTS (SELECT 1 FROM coordinate_operation_method m WHERE m.auth_name = NEW.method_auth_name AND m.code = NEW.method_code AND m.name = NEW.method_name) BEGIN INSERT INTO coordinate_operation_method VALUES (NEW.method_auth_name, NEW.method_code, NEW.method_name); END; CREATE TRIGGER helmert_transformation_insert_trigger_into_helmert_transformation_table INSTEAD OF INSERT ON helmert_transformation BEGIN INSERT INTO helmert_transformation_table VALUES ( NEW.auth_name, NEW.code, NEW.name, NEW.description, NEW.method_auth_name, NEW.method_code, -- method_name NEW.source_crs_auth_name, NEW.source_crs_code, NEW.target_crs_auth_name, NEW.target_crs_code, NEW.accuracy, NEW.tx, NEW.ty, NEW.tz, NEW.translation_uom_auth_name, NEW.translation_uom_code, NEW.rx, NEW.ry, NEW.rz, NEW.rotation_uom_auth_name, NEW.rotation_uom_code, NEW.scale_difference, NEW.scale_difference_uom_auth_name, NEW.scale_difference_uom_code, NEW.rate_tx, NEW.rate_ty, NEW.rate_tz, NEW.rate_translation_uom_auth_name, NEW.rate_translation_uom_code, NEW.rate_rx, NEW.rate_ry, NEW.rate_rz, NEW.rate_rotation_uom_auth_name, NEW.rate_rotation_uom_code, NEW.rate_scale_difference, NEW.rate_scale_difference_uom_auth_name, NEW.rate_scale_difference_uom_code, NEW.epoch, NEW.epoch_uom_auth_name, NEW.epoch_uom_code, NEW.px, NEW.py, NEW.pz, NEW.pivot_uom_auth_name, NEW.pivot_uom_code, NEW.operation_version, NEW.deprecated ); END; CREATE TABLE grid_transformation( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, method_auth_name TEXT NOT NULL CHECK (length(method_auth_name) >= 1), method_code INTEGER_OR_TEXT NOT NULL CHECK (length(method_code) >= 1), method_name TEXT NOT NULL CHECK (length(method_name) >= 2), source_crs_auth_name TEXT NOT NULL, source_crs_code INTEGER_OR_TEXT NOT NULL, target_crs_auth_name TEXT NOT NULL, target_crs_code INTEGER_OR_TEXT NOT NULL, accuracy FLOAT CHECK (accuracy >= 0), grid_param_auth_name TEXT NOT NULL, grid_param_code INTEGER_OR_TEXT NOT NULL, grid_param_name TEXT NOT NULL, grid_name TEXT NOT NULL, grid2_param_auth_name TEXT, grid2_param_code INTEGER_OR_TEXT, grid2_param_name TEXT, grid2_name TEXT, interpolation_crs_auth_name TEXT, interpolation_crs_code INTEGER_OR_TEXT, operation_version TEXT, -- normally mandatory in OGC Topic 2 but optional here deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_grid_transformation PRIMARY KEY (auth_name, code) --CONSTRAINT fk_grid_transformation_coordinate_operation FOREIGN KEY (auth_name, code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_grid_transformation_source_crs FOREIGN KEY (source_crs_auth_name, source_crs_code) REFERENCES crs(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_grid_transformation_target_crs FOREIGN KEY (target_crs_auth_name, target_crs_code) REFERENCES crs(auth_name, code) ON DELETE CASCADE, -- CONSTRAINT fk_grid_transformation_interpolation_crs FOREIGN KEY (interpolation_crs_auth_name, interpolation_crs_code) REFERENCES crs_view(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; -- Table that describe packages/archives that contain several grids CREATE TABLE grid_packages( package_name TEXT NOT NULL NULL PRIMARY KEY, -- package name that contains the file description TEXT, url TEXT, -- optional URL where to download the PROJ grid direct_download BOOLEAN CHECK (direct_download IN (0, 1)), -- whether the URL can be used directly (if 0, authentication etc mightbe needed) open_license BOOLEAN CHECK (open_license IN (0, 1)) ) WITHOUT ROWID; -- Table that contain alternative names for original grid names coming from the authority CREATE TABLE grid_alternatives( original_grid_name TEXT NOT NULL PRIMARY KEY, -- original grid name (e.g. Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz). For LOS/LAS format, the .las files proj_grid_name TEXT NOT NULL, -- PROJ >= 7 grid name (e.g us_nga_egm08_25.tif) old_proj_grid_name TEXT, -- PROJ < 7 grid name (e.g egm08_25.gtx) proj_grid_format TEXT NOT NULL, -- 'GTiff', 'GTX', 'NTv2', JSON proj_method TEXT NOT NULL, -- gridshift, hgridshift, vgridshift, geoid_like, geocentricoffset, tinshift or velocity_grid inverse_direction BOOLEAN NOT NULL CHECK (inverse_direction IN (0, 1)), -- whether the PROJ grid direction is reversed w.r.t to the authority one (TRUE in that case) package_name TEXT, -- no longer used. Must be NULL url TEXT, -- optional URL where to download the PROJ grid direct_download BOOLEAN CHECK (direct_download IN (0, 1)), -- whether the URL can be used directly (if 0, authentication etc might be needed) open_license BOOLEAN CHECK (open_license IN (0, 1)), directory TEXT, -- optional directory where the file might be located CONSTRAINT fk_grid_alternatives_grid_packages FOREIGN KEY (package_name) REFERENCES grid_packages(package_name) ON DELETE CASCADE, CONSTRAINT check_grid_alternatives_grid_fromat CHECK (proj_grid_format IN ('GTiff', 'GTX', 'NTv2', 'JSON')), CONSTRAINT check_grid_alternatives_proj_method CHECK (proj_method IN ('gridshift', 'hgridshift', 'vgridshift', 'geoid_like', 'geocentricoffset', 'tinshift', 'velocity_grid', 'defmodel')), CONSTRAINT check_grid_alternatives_inverse_direction CHECK (NOT(proj_method = 'geoid_like' AND inverse_direction = 1)), CONSTRAINT check_grid_alternatives_package_name CHECK (package_name IS NULL), CONSTRAINT check_grid_alternatives_direct_download_url CHECK (NOT(direct_download IS NULL AND url IS NOT NULL)), CONSTRAINT check_grid_alternatives_open_license_url CHECK (NOT(open_license IS NULL AND url IS NOT NULL)), CONSTRAINT check_grid_alternatives_constraint_cdn CHECK (NOT(url LIKE 'https://cdn.proj.org/%' AND (direct_download = 0 OR open_license = 0 OR url != 'https://cdn.proj.org/' || proj_grid_name))), CONSTRAINT check_grid_alternatives_tinshift CHECK ((proj_grid_format != 'JSON' AND proj_method != 'tinshift') OR (proj_grid_format = 'JSON' AND proj_method = 'tinshift')) ) WITHOUT ROWID; CREATE INDEX idx_grid_alternatives_proj_grid_name ON grid_alternatives(proj_grid_name); CREATE INDEX idx_grid_alternatives_old_proj_grid_name ON grid_alternatives(old_proj_grid_name); CREATE TABLE other_transformation( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, -- if method_auth_name = 'PROJ', method_code can be 'PROJString' for a -- PROJ string and then method_name is a PROJ string (typically a pipeline) -- if method_auth_name = 'PROJ', method_code can be 'WKT' for a -- PROJ string and then method_name is a WKT string (CoordinateOperation) method_auth_name TEXT NOT NULL CHECK (length(method_auth_name) >= 1), method_code INTEGER_OR_TEXT NOT NULL CHECK (length(method_code) >= 1), method_name TEXT NOT NULL CHECK (length(method_name) >= 2), source_crs_auth_name TEXT NOT NULL, source_crs_code INTEGER_OR_TEXT NOT NULL, target_crs_auth_name TEXT NOT NULL, target_crs_code INTEGER_OR_TEXT NOT NULL, accuracy FLOAT CHECK (accuracy >= 0), param1_auth_name TEXT, param1_code INTEGER_OR_TEXT, param1_name TEXT, param1_value FLOAT, param1_uom_auth_name TEXT, param1_uom_code INTEGER_OR_TEXT, param2_auth_name TEXT, param2_code INTEGER_OR_TEXT, param2_name TEXT, param2_value FLOAT, param2_uom_auth_name TEXT, param2_uom_code INTEGER_OR_TEXT, param3_auth_name TEXT, param3_code INTEGER_OR_TEXT, param3_name TEXT, param3_value FLOAT, param3_uom_auth_name TEXT, param3_uom_code INTEGER_OR_TEXT, param4_auth_name TEXT, param4_code INTEGER_OR_TEXT, param4_name TEXT, param4_value FLOAT, param4_uom_auth_name TEXT, param4_uom_code INTEGER_OR_TEXT, param5_auth_name TEXT, param5_code INTEGER_OR_TEXT, param5_name TEXT, param5_value FLOAT, param5_uom_auth_name TEXT, param5_uom_code INTEGER_OR_TEXT, param6_auth_name TEXT, param6_code INTEGER_OR_TEXT, param6_name TEXT, param6_value FLOAT, param6_uom_auth_name TEXT, param6_uom_code INTEGER_OR_TEXT, param7_auth_name TEXT, param7_code INTEGER_OR_TEXT, param7_name TEXT, param7_value FLOAT, param7_uom_auth_name TEXT, param7_uom_code INTEGER_OR_TEXT, interpolation_crs_auth_name TEXT, interpolation_crs_code INTEGER_OR_TEXT, operation_version TEXT, -- normally mandatory in OGC Topic 2 but optional here deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_other_transformation PRIMARY KEY (auth_name, code), --CONSTRAINT fk_other_transformation_coordinate_operation FOREIGN KEY (auth_name, code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_other_transformation_source_crs FOREIGN1 KEY (source_crs_auth_name, source_crs_code) REFERENCES crs(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_other_transformation_target_crs FOREIGN KEY (target_crs_auth_name, target_crs_code) REFERENCES crs(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_param1_uom FOREIGN KEY (param1_uom_auth_name, param1_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_param2_uom FOREIGN KEY (param2_uom_auth_name, param2_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_param3_uom FOREIGN KEY (param3_uom_auth_name, param3_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_param4_uom FOREIGN KEY (param4_uom_auth_name, param4_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_param5_uom FOREIGN KEY (param5_uom_auth_name, param5_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_param6_uom FOREIGN KEY (param6_uom_auth_name, param6_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_param7_uom FOREIGN KEY (param7_uom_auth_name, param7_uom_code) REFERENCES unit_of_measure(auth_name, code) ON DELETE CASCADE, CONSTRAINT fk_other_transformation_interpolation_crs FOREIGN KEY (interpolation_crs_auth_name, interpolation_crs_code) REFERENCES geodetic_crs(auth_name, code) ON DELETE CASCADE, CONSTRAINT check_other_transformation_method CHECK (NOT (method_auth_name = 'PROJ' AND method_code NOT IN ('PROJString', 'WKT'))) ) WITHOUT ROWID; -- Note: in EPSG, the steps might be to be chained in reverse order, so we cannot -- enforce that source_crs_code == step1.source_crs_code etc CREATE TABLE concatenated_operation( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, source_crs_auth_name TEXT NOT NULL, source_crs_code INTEGER_OR_TEXT NOT NULL, target_crs_auth_name TEXT NOT NULL, target_crs_code INTEGER_OR_TEXT NOT NULL, accuracy FLOAT CHECK (accuracy >= 0), operation_version TEXT, -- normally mandatory in OGC Topic 2 but optional here deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_concatenated_operation PRIMARY KEY (auth_name, code) --CONSTRAINT fk_concatenated_operation_coordinate_operation FOREIGN KEY (auth_name, code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_concatenated_operation_source_crs FOREIGN KEY (source_crs_auth_name, source_crs_code) REFERENCES crs(auth_name, code) ON DELETE CASCADE, --CONSTRAINT fk_concatenated_operation_target_crs FOREIGN KEY (target_crs_auth_name, target_crs_code) REFERENCES crs(auth_name, code) ON DELETE CASCADE, ) WITHOUT ROWID; CREATE TABLE concatenated_operation_step( operation_auth_name TEXT NOT NULL CHECK (length(operation_auth_name) >= 1), operation_code INTEGER_OR_TEXT NOT NULL CHECK (length(operation_code) >= 1), step_number INTEGER NOT NULL CHECK (step_number >= 1), step_auth_name TEXT NOT NULL CHECK (length(step_auth_name) >= 1), step_code INTEGER_OR_TEXT NOT NULL CHECK (length(step_code) >= 1), step_direction TEXT DEFAULT NULL CHECK (step_direction IS NULL OR step_direction IN ('forward', 'reverse')), -- much needed extension to OGC Topic 2 ! If setting the direction on one step, it must be set on all steps. CONSTRAINT pk_concatenated_operation_step PRIMARY KEY (operation_auth_name, operation_code, step_number) --CONSTRAINT fk_concatenated_operation_step_to_operation FOREIGN KEY (step_auth_name, step_code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE TABLE geoid_model( name TEXT NOT NULL, operation_auth_name TEXT NOT NULL, operation_code INTEGER_OR_TEXT NOT NULL, CONSTRAINT pk_geoid_model PRIMARY KEY (name, operation_auth_name, operation_code) -- CONSTRAINT fk_geoid_model_operation FOREIGN KEY (operation_auth_name, operation_code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE ) WITHOUT ROWID; CREATE TABLE alias_name( table_name TEXT NOT NULL CHECK (table_name IN ( 'unit_of_measure', 'celestial_body', 'ellipsoid', 'extent', 'prime_meridian', 'geodetic_datum', 'vertical_datum', 'engineering_datum', 'geodetic_crs', 'projected_crs', 'vertical_crs', 'compound_crs', 'engineering_crs', 'conversion', 'grid_transformation', 'helmert_transformation', 'other_transformation', 'concatenated_operation')), auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code INTEGER_OR_TEXT NOT NULL CHECK (length(code) >= 1), alt_name TEXT NOT NULL CHECK (length(alt_name) >= 2), source TEXT ); CREATE INDEX idx_alias_name_code ON alias_name(code); -- For EPSG, used to track superseded coordinate operations. CREATE TABLE supersession( superseded_table_name TEXT NOT NULL CHECK (superseded_table_name IN ( 'unit_of_measure', 'celestial_body', 'ellipsoid', 'extent', 'prime_meridian', 'geodetic_datum', 'vertical_datum', 'engineering_datum', 'geodetic_crs', 'projected_crs', 'vertical_crs', 'compound_crs', 'engineering_crs', 'conversion', 'grid_transformation', 'helmert_transformation', 'other_transformation', 'concatenated_operation')), superseded_auth_name TEXT NOT NULL, superseded_code INTEGER_OR_TEXT NOT NULL, replacement_table_name TEXT NOT NULL CHECK (replacement_table_name IN ( 'unit_of_measure', 'celestial_body', 'ellipsoid', 'extent', 'prime_meridian', 'geodetic_datum', 'vertical_datum', 'engineering_datum', 'geodetic_crs', 'projected_crs', 'vertical_crs', 'compound_crs', 'engineering_crs', 'conversion', 'grid_transformation', 'helmert_transformation', 'other_transformation', 'concatenated_operation')), replacement_auth_name TEXT NOT NULL, replacement_code INTEGER_OR_TEXT NOT NULL, source TEXT, same_source_target_crs BOOLEAN NOT NULL CHECK (same_source_target_crs IN (0, 1)) -- for transformations, whether the (source_crs, target_crs) of the replacement transfrm is the same as the superseded one ); CREATE INDEX idx_supersession ON supersession(superseded_table_name, superseded_auth_name, superseded_code); CREATE TABLE deprecation( table_name TEXT NOT NULL CHECK (table_name IN ( 'unit_of_measure', 'celestial_body', 'ellipsoid', 'extent', 'prime_meridian', 'geodetic_datum', 'vertical_datum', 'engineering_datum', 'geodetic_crs', 'projected_crs', 'vertical_crs', 'compound_crs', 'engineering_crs', 'conversion', 'grid_transformation', 'helmert_transformation', 'other_transformation', 'concatenated_operation')), deprecated_auth_name TEXT NOT NULL, deprecated_code INTEGER_OR_TEXT NOT NULL, replacement_auth_name TEXT NOT NULL, replacement_code INTEGER_OR_TEXT NOT NULL, source TEXT ); CREATE VIEW coordinate_operation_view AS SELECT CAST('grid_transformation' AS TEXT) AS table_name, auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, deprecated FROM grid_transformation UNION ALL SELECT CAST('helmert_transformation' AS TEXT) AS table_name, auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, deprecated FROM helmert_transformation UNION ALL SELECT CAST('other_transformation' AS TEXT) AS table_name, auth_name, code, name, description, method_auth_name, method_code, method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, deprecated FROM other_transformation UNION ALL SELECT CAST('concatenated_operation' AS TEXT) AS table_name, auth_name, code, name, description, CAST(NULL AS TEXT) as method_auth_name, CAST(NULL AS INTEGER_OR_TEXT) as method_code, CAST(NULL AS TEXT) as method_name, source_crs_auth_name, source_crs_code, target_crs_auth_name, target_crs_code, accuracy, deprecated FROM concatenated_operation ; CREATE VIEW coordinate_operation_with_conversion_view AS SELECT auth_name, code, name, description, table_name AS type, deprecated FROM coordinate_operation_view UNION ALL SELECT auth_name, code, name, description, CAST('conversion' AS TEXT) AS type, deprecated FROM conversion_table; CREATE VIEW crs_view AS SELECT CAST('geodetic_crs' AS TEXT) AS table_name, auth_name, code, name, type, description, deprecated FROM geodetic_crs UNION ALL SELECT CAST('projected_crs' AS TEXT) AS table_name, auth_name, code, name, CAST('projected' AS TEXT), description, deprecated FROM projected_crs UNION ALL SELECT CAST('vertical_crs' AS TEXT) AS table_name, auth_name, code, name, CAST('vertical' AS TEXT), description, deprecated FROM vertical_crs UNION ALL SELECT CAST('compound_crs' AS TEXT) AS table_name, auth_name, code, name, CAST('compound' AS TEXT), description, deprecated FROM compound_crs UNION ALL SELECT CAST('engineering_crs' AS TEXT) AS table_name, auth_name, code, name, CAST('engineering' AS TEXT), description, deprecated FROM engineering_crs ; CREATE VIEW object_view AS SELECT CAST('unit_of_measure' AS TEXT) AS table_name, auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM unit_of_measure UNION ALL SELECT CAST('celestial_body' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, CAST(0 AS BOOLEAN) AS deprecated FROM celestial_body UNION ALL SELECT CAST('ellipsoid' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM ellipsoid UNION ALL SELECT CAST('extent' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM extent UNION ALL SELECT CAST('prime_meridian' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM prime_meridian UNION ALL SELECT CAST('geodetic_datum' AS TEXT), auth_name, code, name, CAST(CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END AS TEXT), deprecated FROM geodetic_datum UNION ALL SELECT CAST('vertical_datum' AS TEXT), auth_name, code, name, CAST(CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END AS TEXT), deprecated FROM vertical_datum UNION ALL SELECT CAST('engineering_datum' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM engineering_datum UNION ALL SELECT CAST('axis' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, CAST(0 AS BOOLEAN) AS deprecated FROM axis UNION ALL SELECT table_name, auth_name, code, name, type, deprecated FROM crs_view UNION ALL SELECT CAST('conversion' AS TEXT), auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM conversion_table UNION ALL SELECT table_name, auth_name, code, name, CAST(NULL AS TEXT) as type, deprecated FROM coordinate_operation_view ; CREATE VIEW authority_list AS SELECT DISTINCT auth_name FROM unit_of_measure UNION SELECT DISTINCT auth_name FROM celestial_body UNION SELECT DISTINCT auth_name FROM ellipsoid UNION SELECT DISTINCT auth_name FROM extent UNION SELECT DISTINCT auth_name FROM scope UNION SELECT DISTINCT auth_name FROM usage WHERE auth_name IS NOT NULL UNION SELECT DISTINCT auth_name FROM prime_meridian UNION SELECT DISTINCT auth_name FROM geodetic_datum UNION SELECT DISTINCT auth_name FROM vertical_datum UNION SELECT DISTINCT auth_name FROM engineering_datum UNION SELECT DISTINCT auth_name FROM axis UNION SELECT DISTINCT auth_name FROM crs_view UNION SELECT DISTINCT auth_name FROM coordinate_operation_view ; -- Define the allowed authorities, and their precedence, when researching a -- coordinate operation CREATE TABLE authority_to_authority_preference( source_auth_name TEXT NOT NULL, -- 'any' for any source target_auth_name TEXT NOT NULL, -- 'any' for any target allowed_authorities TEXT NOT NULL, -- for example 'PROJ,EPSG,any' CONSTRAINT unique_authority_to_authority_preference UNIQUE (source_auth_name, target_auth_name) ); -- Map 'IAU_2015' to auth_name=IAU and version=2015 CREATE TABLE versioned_auth_name_mapping( versioned_auth_name TEXT NOT NULL PRIMARY KEY, auth_name TEXT NOT NULL, version TEXT NOT NULL, priority INTEGER NOT NULL, CONSTRAINT unique_auth_name_version UNIQUE (auth_name, version), CONSTRAINT unique_auth_name_priority UNIQUE (auth_name, priority) ); proj-9.6.0/data/sql/projected_crs.sql000664 001754 001755 00005131660 14764566077 017514 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "projected_crs" VALUES('EPSG','2000','Anguilla 1957 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4600','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1024','projected_crs','EPSG','2000','EPSG','3214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2001','Antigua 1943 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4601','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1025','projected_crs','EPSG','2001','EPSG','1273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2002','Dominica 1945 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4602','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1026','projected_crs','EPSG','2002','EPSG','3239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2003','Grenada 1953 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4603','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1027','projected_crs','EPSG','2003','EPSG','1551','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2004','Montserrat 1958 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4604','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1028','projected_crs','EPSG','2004','EPSG','3279','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2005','St. Kitts 1955 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4605','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1029','projected_crs','EPSG','2005','EPSG','3297','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2006','St. Lucia 1955 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4606','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1030','projected_crs','EPSG','2006','EPSG','3298','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2007','St. Vincent 45 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4607','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1031','projected_crs','EPSG','2007','EPSG','3300','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2008','NAD27(CGQ77) / SCoPQ zone 2',NULL,'EPSG','4499','EPSG','4609','EPSG','17700',NULL,1); INSERT INTO "usage" VALUES('EPSG','1032','projected_crs','EPSG','2008','EPSG','1420','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2009','NAD27(CGQ77) / SCoPQ zone 3',NULL,'EPSG','4499','EPSG','4609','EPSG','17703',NULL,0); INSERT INTO "usage" VALUES('EPSG','1033','projected_crs','EPSG','2009','EPSG','1446','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2010','NAD27(CGQ77) / SCoPQ zone 4',NULL,'EPSG','4499','EPSG','4609','EPSG','17704',NULL,0); INSERT INTO "usage" VALUES('EPSG','1034','projected_crs','EPSG','2010','EPSG','1422','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2011','NAD27(CGQ77) / SCoPQ zone 5',NULL,'EPSG','4499','EPSG','4609','EPSG','17705',NULL,0); INSERT INTO "usage" VALUES('EPSG','1035','projected_crs','EPSG','2011','EPSG','1423','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2012','NAD27(CGQ77) / SCoPQ zone 6',NULL,'EPSG','4499','EPSG','4609','EPSG','17706',NULL,0); INSERT INTO "usage" VALUES('EPSG','1036','projected_crs','EPSG','2012','EPSG','1424','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2013','NAD27(CGQ77) / SCoPQ zone 7',NULL,'EPSG','4499','EPSG','4609','EPSG','17707',NULL,0); INSERT INTO "usage" VALUES('EPSG','1037','projected_crs','EPSG','2013','EPSG','1425','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2014','NAD27(CGQ77) / SCoPQ zone 8',NULL,'EPSG','4499','EPSG','4609','EPSG','17708',NULL,0); INSERT INTO "usage" VALUES('EPSG','1038','projected_crs','EPSG','2014','EPSG','1426','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2015','NAD27(CGQ77) / SCoPQ zone 9',NULL,'EPSG','4499','EPSG','4609','EPSG','17709',NULL,0); INSERT INTO "usage" VALUES('EPSG','1039','projected_crs','EPSG','2015','EPSG','1427','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2016','NAD27(CGQ77) / SCoPQ zone 10',NULL,'EPSG','4499','EPSG','4609','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','1040','projected_crs','EPSG','2016','EPSG','1428','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2017','NAD27(76) / MTM zone 8',NULL,'EPSG','4499','EPSG','4608','EPSG','17708',NULL,0); INSERT INTO "usage" VALUES('EPSG','1041','projected_crs','EPSG','2017','EPSG','1429','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2018','NAD27(76) / MTM zone 9',NULL,'EPSG','4499','EPSG','4608','EPSG','17709',NULL,0); INSERT INTO "usage" VALUES('EPSG','1042','projected_crs','EPSG','2018','EPSG','1430','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2019','NAD27(76) / MTM zone 10',NULL,'EPSG','4499','EPSG','4608','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','1043','projected_crs','EPSG','2019','EPSG','1431','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2020','NAD27(76) / MTM zone 11',NULL,'EPSG','4400','EPSG','4608','EPSG','17711',NULL,0); INSERT INTO "usage" VALUES('EPSG','1044','projected_crs','EPSG','2020','EPSG','1432','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2021','NAD27(76) / MTM zone 12',NULL,'EPSG','4400','EPSG','4608','EPSG','17712',NULL,0); INSERT INTO "usage" VALUES('EPSG','1045','projected_crs','EPSG','2021','EPSG','1433','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2022','NAD27(76) / MTM zone 13',NULL,'EPSG','4400','EPSG','4608','EPSG','17713',NULL,0); INSERT INTO "usage" VALUES('EPSG','1046','projected_crs','EPSG','2022','EPSG','1434','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2023','NAD27(76) / MTM zone 14',NULL,'EPSG','4400','EPSG','4608','EPSG','17714',NULL,0); INSERT INTO "usage" VALUES('EPSG','1047','projected_crs','EPSG','2023','EPSG','1435','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2024','NAD27(76) / MTM zone 15',NULL,'EPSG','4400','EPSG','4608','EPSG','17715',NULL,0); INSERT INTO "usage" VALUES('EPSG','1048','projected_crs','EPSG','2024','EPSG','1436','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2025','NAD27(76) / MTM zone 16',NULL,'EPSG','4400','EPSG','4608','EPSG','17716',NULL,0); INSERT INTO "usage" VALUES('EPSG','1049','projected_crs','EPSG','2025','EPSG','1437','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2026','NAD27(76) / MTM zone 17',NULL,'EPSG','4400','EPSG','4608','EPSG','17717',NULL,0); INSERT INTO "usage" VALUES('EPSG','1050','projected_crs','EPSG','2026','EPSG','1438','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2027','NAD27(76) / UTM zone 15N',NULL,'EPSG','4400','EPSG','4608','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','1051','projected_crs','EPSG','2027','EPSG','1439','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2028','NAD27(76) / UTM zone 16N',NULL,'EPSG','4400','EPSG','4608','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','1052','projected_crs','EPSG','2028','EPSG','1440','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2029','NAD27(76) / UTM zone 17N',NULL,'EPSG','4400','EPSG','4608','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','1053','projected_crs','EPSG','2029','EPSG','1441','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2030','NAD27(76) / UTM zone 18N',NULL,'EPSG','4400','EPSG','4608','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','1054','projected_crs','EPSG','2030','EPSG','1442','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2031','NAD27(CGQ77) / UTM zone 17N',NULL,'EPSG','4400','EPSG','4609','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','1055','projected_crs','EPSG','2031','EPSG','1428','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2032','NAD27(CGQ77) / UTM zone 18N',NULL,'EPSG','4400','EPSG','4609','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','1056','projected_crs','EPSG','2032','EPSG','1443','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2033','NAD27(CGQ77) / UTM zone 19N',NULL,'EPSG','4400','EPSG','4609','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','1057','projected_crs','EPSG','2033','EPSG','1444','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2034','NAD27(CGQ77) / UTM zone 20N',NULL,'EPSG','4400','EPSG','4609','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1058','projected_crs','EPSG','2034','EPSG','1445','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2035','NAD27(CGQ77) / UTM zone 21N',NULL,'EPSG','4400','EPSG','4609','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','1059','projected_crs','EPSG','2035','EPSG','1446','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2036','NAD83(CSRS98) / New Brunswick Stereo',NULL,'EPSG','4500','EPSG','4140','EPSG','19946',NULL,1); INSERT INTO "usage" VALUES('EPSG','1060','projected_crs','EPSG','2036','EPSG','1447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2037','NAD83(CSRS98) / UTM zone 19N',NULL,'EPSG','4400','EPSG','4140','EPSG','16019',NULL,1); INSERT INTO "usage" VALUES('EPSG','1061','projected_crs','EPSG','2037','EPSG','1448','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2038','NAD83(CSRS98) / UTM zone 20N',NULL,'EPSG','4400','EPSG','4140','EPSG','16020',NULL,1); INSERT INTO "usage" VALUES('EPSG','1062','projected_crs','EPSG','2038','EPSG','1449','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2039','Israel 1993 / Israeli TM Grid',NULL,'EPSG','4400','EPSG','4141','EPSG','18204',NULL,0); INSERT INTO "usage" VALUES('EPSG','1063','projected_crs','EPSG','2039','EPSG','2603','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2040','Locodjo 1965 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4142','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','1064','projected_crs','EPSG','2040','EPSG','1450','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2041','Abidjan 1987 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4143','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','1065','projected_crs','EPSG','2041','EPSG','1450','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2042','Locodjo 1965 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4142','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','1066','projected_crs','EPSG','2042','EPSG','1451','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2043','Abidjan 1987 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4143','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','1067','projected_crs','EPSG','2043','EPSG','1451','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2044','Hanoi 1972 / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4147','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','1068','projected_crs','EPSG','2044','EPSG','1452','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2045','Hanoi 1972 / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4147','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','1069','projected_crs','EPSG','2045','EPSG','1453','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2046','Hartebeesthoek94 / Lo15',NULL,'EPSG','6503','EPSG','4148','EPSG','17515',NULL,0); INSERT INTO "usage" VALUES('EPSG','1070','projected_crs','EPSG','2046','EPSG','1454','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2047','Hartebeesthoek94 / Lo17',NULL,'EPSG','6503','EPSG','4148','EPSG','17517',NULL,0); INSERT INTO "usage" VALUES('EPSG','1071','projected_crs','EPSG','2047','EPSG','1455','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2048','Hartebeesthoek94 / Lo19',NULL,'EPSG','6503','EPSG','4148','EPSG','17519',NULL,0); INSERT INTO "usage" VALUES('EPSG','1072','projected_crs','EPSG','2048','EPSG','1456','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2049','Hartebeesthoek94 / Lo21',NULL,'EPSG','6503','EPSG','4148','EPSG','17521',NULL,0); INSERT INTO "usage" VALUES('EPSG','1073','projected_crs','EPSG','2049','EPSG','1457','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2050','Hartebeesthoek94 / Lo23',NULL,'EPSG','6503','EPSG','4148','EPSG','17523',NULL,0); INSERT INTO "usage" VALUES('EPSG','1074','projected_crs','EPSG','2050','EPSG','1458','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2051','Hartebeesthoek94 / Lo25',NULL,'EPSG','6503','EPSG','4148','EPSG','17525',NULL,0); INSERT INTO "usage" VALUES('EPSG','1075','projected_crs','EPSG','2051','EPSG','1459','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2052','Hartebeesthoek94 / Lo27',NULL,'EPSG','6503','EPSG','4148','EPSG','17527',NULL,0); INSERT INTO "usage" VALUES('EPSG','1076','projected_crs','EPSG','2052','EPSG','1460','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2053','Hartebeesthoek94 / Lo29',NULL,'EPSG','6503','EPSG','4148','EPSG','17529',NULL,0); INSERT INTO "usage" VALUES('EPSG','1077','projected_crs','EPSG','2053','EPSG','1461','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2054','Hartebeesthoek94 / Lo31',NULL,'EPSG','6503','EPSG','4148','EPSG','17531',NULL,0); INSERT INTO "usage" VALUES('EPSG','1078','projected_crs','EPSG','2054','EPSG','1462','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2055','Hartebeesthoek94 / Lo33',NULL,'EPSG','6503','EPSG','4148','EPSG','17533',NULL,0); INSERT INTO "usage" VALUES('EPSG','1079','projected_crs','EPSG','2055','EPSG','1463','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2056','CH1903+ / LV95',NULL,'EPSG','4400','EPSG','4150','EPSG','19950',NULL,0); INSERT INTO "usage" VALUES('EPSG','1080','projected_crs','EPSG','2056','EPSG','1286','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2057','Rassadiran / Nakhl e Taqi',NULL,'EPSG','4400','EPSG','4153','EPSG','19951',NULL,0); INSERT INTO "usage" VALUES('EPSG','1081','projected_crs','EPSG','2057','EPSG','1338','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','2058','ED50(ED77) / UTM zone 38N',NULL,'EPSG','4400','EPSG','4154','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','1082','projected_crs','EPSG','2058','EPSG','1464','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2059','ED50(ED77) / UTM zone 39N',NULL,'EPSG','4400','EPSG','4154','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','1083','projected_crs','EPSG','2059','EPSG','1465','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2060','ED50(ED77) / UTM zone 40N',NULL,'EPSG','4400','EPSG','4154','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','1084','projected_crs','EPSG','2060','EPSG','1466','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2061','ED50(ED77) / UTM zone 41N',NULL,'EPSG','4400','EPSG','4154','EPSG','16041',NULL,0); INSERT INTO "usage" VALUES('EPSG','1085','projected_crs','EPSG','2061','EPSG','1467','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2062','Madrid 1870 (Madrid) / Spain LCC',NULL,'EPSG','4499','EPSG','4903','EPSG','19921',NULL,0); INSERT INTO "usage" VALUES('EPSG','14190','projected_crs','EPSG','2062','EPSG','2366','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2063','Dabola 1981 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4315','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('EPSG','1087','projected_crs','EPSG','2063','EPSG','1468','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2064','Dabola 1981 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4315','EPSG','16029',NULL,1); INSERT INTO "usage" VALUES('EPSG','1088','projected_crs','EPSG','2064','EPSG','1469','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2065','S-JTSK (Ferro) / Krovak',NULL,'EPSG','6501','EPSG','4818','EPSG','19952',NULL,0); INSERT INTO "usage" VALUES('EPSG','1089','projected_crs','EPSG','2065','EPSG','1306','EPSG','1094'); INSERT INTO "projected_crs" VALUES('EPSG','2066','Mount Dillon / Tobago Grid',NULL,'EPSG','4407','EPSG','4157','EPSG','19924',NULL,0); INSERT INTO "usage" VALUES('EPSG','1090','projected_crs','EPSG','2066','EPSG','1322','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2067','Naparima 1955 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4158','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1091','projected_crs','EPSG','2067','EPSG','3143','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2068','ELD79 / Libya zone 5',NULL,'EPSG','4499','EPSG','4159','EPSG','18240',NULL,0); INSERT INTO "usage" VALUES('EPSG','1092','projected_crs','EPSG','2068','EPSG','1470','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2069','ELD79 / Libya zone 6',NULL,'EPSG','4499','EPSG','4159','EPSG','18241',NULL,0); INSERT INTO "usage" VALUES('EPSG','1093','projected_crs','EPSG','2069','EPSG','1471','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2070','ELD79 / Libya zone 7',NULL,'EPSG','4499','EPSG','4159','EPSG','18242',NULL,0); INSERT INTO "usage" VALUES('EPSG','1094','projected_crs','EPSG','2070','EPSG','1472','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2071','ELD79 / Libya zone 8',NULL,'EPSG','4499','EPSG','4159','EPSG','18243',NULL,0); INSERT INTO "usage" VALUES('EPSG','1095','projected_crs','EPSG','2071','EPSG','1473','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2072','ELD79 / Libya zone 9',NULL,'EPSG','4499','EPSG','4159','EPSG','18244',NULL,0); INSERT INTO "usage" VALUES('EPSG','1096','projected_crs','EPSG','2072','EPSG','1474','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2073','ELD79 / Libya zone 10',NULL,'EPSG','4499','EPSG','4159','EPSG','18245',NULL,0); INSERT INTO "usage" VALUES('EPSG','1097','projected_crs','EPSG','2073','EPSG','1475','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2074','ELD79 / Libya zone 11',NULL,'EPSG','4499','EPSG','4159','EPSG','18246',NULL,0); INSERT INTO "usage" VALUES('EPSG','1098','projected_crs','EPSG','2074','EPSG','1476','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2075','ELD79 / Libya zone 12',NULL,'EPSG','4499','EPSG','4159','EPSG','18247',NULL,0); INSERT INTO "usage" VALUES('EPSG','1099','projected_crs','EPSG','2075','EPSG','1477','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2076','ELD79 / Libya zone 13',NULL,'EPSG','4499','EPSG','4159','EPSG','18248',NULL,0); INSERT INTO "usage" VALUES('EPSG','1100','projected_crs','EPSG','2076','EPSG','1478','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2077','ELD79 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4159','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1101','projected_crs','EPSG','2077','EPSG','1479','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2078','ELD79 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4159','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','1102','projected_crs','EPSG','2078','EPSG','1480','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2079','ELD79 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4159','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','1103','projected_crs','EPSG','2079','EPSG','1481','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2080','ELD79 / UTM zone 35N',NULL,'EPSG','4400','EPSG','4159','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','1104','projected_crs','EPSG','2080','EPSG','1478','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2081','Chos Malal 1914 / Argentina 2',NULL,'EPSG','4530','EPSG','4160','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1105','projected_crs','EPSG','2081','EPSG','1483','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2082','Pampa del Castillo / Argentina 2',NULL,'EPSG','4530','EPSG','4161','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1106','projected_crs','EPSG','2082','EPSG','1484','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2083','Hito XVIII 1963 / Argentina 2',NULL,'EPSG','4530','EPSG','4254','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1107','projected_crs','EPSG','2083','EPSG','1485','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2084','Hito XVIII 1963 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4254','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','1108','projected_crs','EPSG','2084','EPSG','2596','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2085','NAD27 / Cuba Norte',NULL,'EPSG','4532','EPSG','4267','EPSG','18061',NULL,1); INSERT INTO "usage" VALUES('EPSG','1109','projected_crs','EPSG','2085','EPSG','1487','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2086','NAD27 / Cuba Sur',NULL,'EPSG','4532','EPSG','4267','EPSG','18062',NULL,1); INSERT INTO "usage" VALUES('EPSG','1110','projected_crs','EPSG','2086','EPSG','1488','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2087','ELD79 / TM 12 NE',NULL,'EPSG','4400','EPSG','4159','EPSG','16412',NULL,0); INSERT INTO "usage" VALUES('EPSG','1111','projected_crs','EPSG','2087','EPSG','1482','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2088','Carthage / TM 11 NE',NULL,'EPSG','4400','EPSG','4223','EPSG','16411',NULL,0); INSERT INTO "usage" VALUES('EPSG','1112','projected_crs','EPSG','2088','EPSG','1489','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2089','Yemen NGN96 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4163','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','1113','projected_crs','EPSG','2089','EPSG','1490','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2090','Yemen NGN96 / UTM zone 39N',NULL,'EPSG','4400','EPSG','4163','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','1114','projected_crs','EPSG','2090','EPSG','1491','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2091','South Yemen / Gauss Kruger zone 8',NULL,'EPSG','4530','EPSG','4164','EPSG','16208',NULL,1); INSERT INTO "usage" VALUES('EPSG','1115','projected_crs','EPSG','2091','EPSG','1492','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2092','South Yemen / Gauss Kruger zone 9',NULL,'EPSG','4530','EPSG','4164','EPSG','16209',NULL,1); INSERT INTO "usage" VALUES('EPSG','1116','projected_crs','EPSG','2092','EPSG','1493','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2093','Hanoi 1972 / GK 106 NE',NULL,'EPSG','4530','EPSG','4147','EPSG','16586',NULL,0); INSERT INTO "usage" VALUES('EPSG','1117','projected_crs','EPSG','2093','EPSG','1494','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2094','WGS 72BE / TM 106 NE',NULL,'EPSG','4400','EPSG','4324','EPSG','16506',NULL,0); INSERT INTO "usage" VALUES('EPSG','1118','projected_crs','EPSG','2094','EPSG','1495','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2095','Bissau / UTM zone 28N',NULL,'EPSG','4400','EPSG','4165','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','1119','projected_crs','EPSG','2095','EPSG','3258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2096','Korean 1985 / East Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','18251',NULL,0); INSERT INTO "usage" VALUES('EPSG','1120','projected_crs','EPSG','2096','EPSG','1496','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2097','Korean 1985 / Central Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','18252',NULL,0); INSERT INTO "usage" VALUES('EPSG','1121','projected_crs','EPSG','2097','EPSG','3730','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2098','Korean 1985 / West Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','18253',NULL,0); INSERT INTO "usage" VALUES('EPSG','1122','projected_crs','EPSG','2098','EPSG','1498','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2099','Qatar 1948 / Qatar Grid',NULL,'EPSG','4400','EPSG','4286','EPSG','19953',NULL,0); INSERT INTO "usage" VALUES('EPSG','1123','projected_crs','EPSG','2099','EPSG','1346','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2100','GGRS87 / Greek Grid',NULL,'EPSG','4400','EPSG','4121','EPSG','19930',NULL,0); INSERT INTO "usage" VALUES('EPSG','1124','projected_crs','EPSG','2100','EPSG','3254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2101','Lake / Maracaibo Grid M1',NULL,'EPSG','4499','EPSG','4249','EPSG','18260',NULL,0); INSERT INTO "usage" VALUES('EPSG','1125','projected_crs','EPSG','2101','EPSG','1319','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2102','Lake / Maracaibo Grid',NULL,'EPSG','4499','EPSG','4249','EPSG','18261',NULL,0); INSERT INTO "usage" VALUES('EPSG','1126','projected_crs','EPSG','2102','EPSG','1319','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2103','Lake / Maracaibo Grid M3',NULL,'EPSG','4499','EPSG','4249','EPSG','18262',NULL,0); INSERT INTO "usage" VALUES('EPSG','1127','projected_crs','EPSG','2103','EPSG','1319','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2104','Lake / Maracaibo La Rosa Grid',NULL,'EPSG','4499','EPSG','4249','EPSG','18263',NULL,0); INSERT INTO "usage" VALUES('EPSG','1128','projected_crs','EPSG','2104','EPSG','1499','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2105','NZGD2000 / Mount Eden 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17931',NULL,0); INSERT INTO "usage" VALUES('EPSG','1129','projected_crs','EPSG','2105','EPSG','3781','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2106','NZGD2000 / Bay of Plenty 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17932',NULL,0); INSERT INTO "usage" VALUES('EPSG','1130','projected_crs','EPSG','2106','EPSG','3779','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2107','NZGD2000 / Poverty Bay 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17933',NULL,0); INSERT INTO "usage" VALUES('EPSG','1131','projected_crs','EPSG','2107','EPSG','3780','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2108','NZGD2000 / Hawkes Bay 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17934',NULL,0); INSERT INTO "usage" VALUES('EPSG','1132','projected_crs','EPSG','2108','EPSG','3772','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2109','NZGD2000 / Taranaki 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17935',NULL,0); INSERT INTO "usage" VALUES('EPSG','1133','projected_crs','EPSG','2109','EPSG','3777','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2110','NZGD2000 / Tuhirangi 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17936',NULL,0); INSERT INTO "usage" VALUES('EPSG','1134','projected_crs','EPSG','2110','EPSG','3778','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2111','NZGD2000 / Wanganui 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17937',NULL,0); INSERT INTO "usage" VALUES('EPSG','1135','projected_crs','EPSG','2111','EPSG','3776','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2112','NZGD2000 / Wairarapa 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17938',NULL,0); INSERT INTO "usage" VALUES('EPSG','1136','projected_crs','EPSG','2112','EPSG','3775','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2113','NZGD2000 / Wellington 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17939',NULL,0); INSERT INTO "usage" VALUES('EPSG','1137','projected_crs','EPSG','2113','EPSG','3774','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2114','NZGD2000 / Collingwood 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17940',NULL,0); INSERT INTO "usage" VALUES('EPSG','1138','projected_crs','EPSG','2114','EPSG','3782','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2115','NZGD2000 / Nelson 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17941',NULL,0); INSERT INTO "usage" VALUES('EPSG','1139','projected_crs','EPSG','2115','EPSG','3784','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2116','NZGD2000 / Karamea 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17942',NULL,0); INSERT INTO "usage" VALUES('EPSG','1140','projected_crs','EPSG','2116','EPSG','3783','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2117','NZGD2000 / Buller 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17943',NULL,0); INSERT INTO "usage" VALUES('EPSG','1141','projected_crs','EPSG','2117','EPSG','3786','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2118','NZGD2000 / Grey 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17944',NULL,0); INSERT INTO "usage" VALUES('EPSG','1142','projected_crs','EPSG','2118','EPSG','3787','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2119','NZGD2000 / Amuri 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17945',NULL,0); INSERT INTO "usage" VALUES('EPSG','1143','projected_crs','EPSG','2119','EPSG','3788','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2120','NZGD2000 / Marlborough 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17946',NULL,0); INSERT INTO "usage" VALUES('EPSG','1144','projected_crs','EPSG','2120','EPSG','3785','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2121','NZGD2000 / Hokitika 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17947',NULL,0); INSERT INTO "usage" VALUES('EPSG','1145','projected_crs','EPSG','2121','EPSG','3789','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2122','NZGD2000 / Okarito 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17948',NULL,0); INSERT INTO "usage" VALUES('EPSG','1146','projected_crs','EPSG','2122','EPSG','3791','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2123','NZGD2000 / Jacksons Bay 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17949',NULL,0); INSERT INTO "usage" VALUES('EPSG','1147','projected_crs','EPSG','2123','EPSG','3794','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2124','NZGD2000 / Mount Pleasant 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17950',NULL,0); INSERT INTO "usage" VALUES('EPSG','1148','projected_crs','EPSG','2124','EPSG','3790','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2125','NZGD2000 / Gawler 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17951',NULL,0); INSERT INTO "usage" VALUES('EPSG','1149','projected_crs','EPSG','2125','EPSG','3792','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2126','NZGD2000 / Timaru 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17952',NULL,0); INSERT INTO "usage" VALUES('EPSG','1150','projected_crs','EPSG','2126','EPSG','3793','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2127','NZGD2000 / Lindis Peak 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17953',NULL,0); INSERT INTO "usage" VALUES('EPSG','1151','projected_crs','EPSG','2127','EPSG','3795','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2128','NZGD2000 / Mount Nicholas 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17954',NULL,0); INSERT INTO "usage" VALUES('EPSG','1152','projected_crs','EPSG','2128','EPSG','3797','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2129','NZGD2000 / Mount York 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17955',NULL,0); INSERT INTO "usage" VALUES('EPSG','1153','projected_crs','EPSG','2129','EPSG','3799','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2130','NZGD2000 / Observation Point 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17956',NULL,0); INSERT INTO "usage" VALUES('EPSG','1154','projected_crs','EPSG','2130','EPSG','3796','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2131','NZGD2000 / North Taieri 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17957',NULL,0); INSERT INTO "usage" VALUES('EPSG','1155','projected_crs','EPSG','2131','EPSG','3798','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2132','NZGD2000 / Bluff 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17958',NULL,0); INSERT INTO "usage" VALUES('EPSG','1156','projected_crs','EPSG','2132','EPSG','3800','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','2133','NZGD2000 / UTM zone 58S',NULL,'EPSG','4400','EPSG','4167','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','1157','projected_crs','EPSG','2133','EPSG','1502','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2134','NZGD2000 / UTM zone 59S',NULL,'EPSG','4400','EPSG','4167','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','1158','projected_crs','EPSG','2134','EPSG','1503','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2135','NZGD2000 / UTM zone 60S',NULL,'EPSG','4400','EPSG','4167','EPSG','16160',NULL,0); INSERT INTO "usage" VALUES('EPSG','1159','projected_crs','EPSG','2135','EPSG','1504','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2136','Accra / Ghana National Grid',NULL,'EPSG','4404','EPSG','4168','EPSG','19959',NULL,0); INSERT INTO "usage" VALUES('EPSG','1160','projected_crs','EPSG','2136','EPSG','3252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2137','Accra / TM 1 NW',NULL,'EPSG','4400','EPSG','4168','EPSG','17001',NULL,0); INSERT INTO "usage" VALUES('EPSG','1161','projected_crs','EPSG','2137','EPSG','1505','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2138','NAD27(CGQ77) / Quebec Lambert',NULL,'EPSG','4499','EPSG','4609','EPSG','19944',NULL,0); INSERT INTO "usage" VALUES('EPSG','1162','projected_crs','EPSG','2138','EPSG','1368','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','2139','NAD83(CSRS98) / SCoPQ zone 2',NULL,'EPSG','4499','EPSG','4140','EPSG','17700',NULL,1); INSERT INTO "usage" VALUES('EPSG','1163','projected_crs','EPSG','2139','EPSG','1420','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2140','NAD83(CSRS98) / MTM zone 3',NULL,'EPSG','4496','EPSG','4140','EPSG','17703',NULL,1); INSERT INTO "usage" VALUES('EPSG','1164','projected_crs','EPSG','2140','EPSG','1421','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2141','NAD83(CSRS98) / MTM zone 4',NULL,'EPSG','4496','EPSG','4140','EPSG','17704',NULL,1); INSERT INTO "usage" VALUES('EPSG','1165','projected_crs','EPSG','2141','EPSG','1422','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2142','NAD83(CSRS98) / MTM zone 5',NULL,'EPSG','4496','EPSG','4140','EPSG','17705',NULL,1); INSERT INTO "usage" VALUES('EPSG','1166','projected_crs','EPSG','2142','EPSG','1423','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2143','NAD83(CSRS98) / MTM zone 6',NULL,'EPSG','4496','EPSG','4140','EPSG','17706',NULL,1); INSERT INTO "usage" VALUES('EPSG','1167','projected_crs','EPSG','2143','EPSG','1424','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2144','NAD83(CSRS98) / MTM zone 7',NULL,'EPSG','4496','EPSG','4140','EPSG','17707',NULL,1); INSERT INTO "usage" VALUES('EPSG','1168','projected_crs','EPSG','2144','EPSG','1425','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2145','NAD83(CSRS98) / MTM zone 8',NULL,'EPSG','4496','EPSG','4140','EPSG','17708',NULL,1); INSERT INTO "usage" VALUES('EPSG','1169','projected_crs','EPSG','2145','EPSG','1426','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2146','NAD83(CSRS98) / MTM zone 9',NULL,'EPSG','4496','EPSG','4140','EPSG','17709',NULL,1); INSERT INTO "usage" VALUES('EPSG','1170','projected_crs','EPSG','2146','EPSG','1427','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2147','NAD83(CSRS98) / MTM zone 10',NULL,'EPSG','4496','EPSG','4140','EPSG','17710',NULL,1); INSERT INTO "usage" VALUES('EPSG','1171','projected_crs','EPSG','2147','EPSG','1428','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2148','NAD83(CSRS98) / UTM zone 21N',NULL,'EPSG','4400','EPSG','4140','EPSG','16021',NULL,1); INSERT INTO "usage" VALUES('EPSG','1172','projected_crs','EPSG','2148','EPSG','1446','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2149','NAD83(CSRS98) / UTM zone 18N',NULL,'EPSG','4400','EPSG','4140','EPSG','16018',NULL,1); INSERT INTO "usage" VALUES('EPSG','1173','projected_crs','EPSG','2149','EPSG','1443','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2150','NAD83(CSRS98) / UTM zone 17N',NULL,'EPSG','4400','EPSG','4140','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('EPSG','1174','projected_crs','EPSG','2150','EPSG','1428','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2151','NAD83(CSRS98) / UTM zone 13N',NULL,'EPSG','4400','EPSG','4140','EPSG','16013',NULL,1); INSERT INTO "usage" VALUES('EPSG','1175','projected_crs','EPSG','2151','EPSG','1506','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2152','NAD83(CSRS98) / UTM zone 12N',NULL,'EPSG','4400','EPSG','4140','EPSG','16012',NULL,1); INSERT INTO "usage" VALUES('EPSG','1176','projected_crs','EPSG','2152','EPSG','1507','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2153','NAD83(CSRS98) / UTM zone 11N',NULL,'EPSG','4400','EPSG','4140','EPSG','16011',NULL,1); INSERT INTO "usage" VALUES('EPSG','1177','projected_crs','EPSG','2153','EPSG','1508','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2154','RGF93 v1 / Lambert-93',NULL,'EPSG','4499','EPSG','4171','EPSG','18085',NULL,0); INSERT INTO "usage" VALUES('EPSG','1178','projected_crs','EPSG','2154','EPSG','1096','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2155','American Samoa 1962 / American Samoa Lambert',NULL,'EPSG','4497','EPSG','4169','EPSG','15300',NULL,1); INSERT INTO "usage" VALUES('EPSG','1179','projected_crs','EPSG','2155','EPSG','1027','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2156','NAD83(HARN) / UTM zone 59S',NULL,'EPSG','4400','EPSG','4152','EPSG','16159',NULL,1); INSERT INTO "usage" VALUES('EPSG','1180','projected_crs','EPSG','2156','EPSG','1027','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2157','IRENET95 / Irish Transverse Mercator',NULL,'EPSG','4400','EPSG','4173','EPSG','19962',NULL,0); INSERT INTO "usage" VALUES('EPSG','1181','projected_crs','EPSG','2157','EPSG','1305','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2158','IRENET95 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4173','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','1182','projected_crs','EPSG','2158','EPSG','1305','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2159','Sierra Leone 1924 / New Colony Grid',NULL,'EPSG','4404','EPSG','4174','EPSG','19963',NULL,0); INSERT INTO "usage" VALUES('EPSG','1183','projected_crs','EPSG','2159','EPSG','1342','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2160','Sierra Leone 1924 / New War Office Grid',NULL,'EPSG','4404','EPSG','4174','EPSG','19964',NULL,0); INSERT INTO "usage" VALUES('EPSG','1184','projected_crs','EPSG','2160','EPSG','1342','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2161','Sierra Leone 1968 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4175','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','1185','projected_crs','EPSG','2161','EPSG','1509','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2162','Sierra Leone 1968 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4175','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','1186','projected_crs','EPSG','2162','EPSG','1510','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2163','US National Atlas Equal Area',NULL,'EPSG','4499','EPSG','4052','EPSG','3899',NULL,1); INSERT INTO "usage" VALUES('EPSG','1187','projected_crs','EPSG','2163','EPSG','1245','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','2164','Locodjo 1965 / TM 5 NW',NULL,'EPSG','4400','EPSG','4142','EPSG','17005',NULL,0); INSERT INTO "usage" VALUES('EPSG','1188','projected_crs','EPSG','2164','EPSG','2296','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2165','Abidjan 1987 / TM 5 NW',NULL,'EPSG','4400','EPSG','4143','EPSG','17005',NULL,0); INSERT INTO "usage" VALUES('EPSG','1189','projected_crs','EPSG','2165','EPSG','2296','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2166','Pulkovo 1942(83) / Gauss Kruger zone 3',NULL,'EPSG','4530','EPSG','4178','EPSG','16263',NULL,1); INSERT INTO "usage" VALUES('EPSG','1190','projected_crs','EPSG','2166','EPSG','1512','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','2167','Pulkovo 1942(83) / Gauss Kruger zone 4',NULL,'EPSG','4530','EPSG','4178','EPSG','16264',NULL,1); INSERT INTO "usage" VALUES('EPSG','1191','projected_crs','EPSG','2167','EPSG','1513','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','2168','Pulkovo 1942(83) / Gauss Kruger zone 5',NULL,'EPSG','4530','EPSG','4178','EPSG','16265',NULL,1); INSERT INTO "usage" VALUES('EPSG','1192','projected_crs','EPSG','2168','EPSG','1512','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','2169','LUREF / Luxembourg TM',NULL,'EPSG','4530','EPSG','4181','EPSG','19966',NULL,0); INSERT INTO "usage" VALUES('EPSG','1193','projected_crs','EPSG','2169','EPSG','1146','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2170','MGI / Slovenia Grid',NULL,'EPSG','4530','EPSG','4312','EPSG','19967',NULL,1); INSERT INTO "usage" VALUES('EPSG','1194','projected_crs','EPSG','2170','EPSG','1212','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2171','Pulkovo 1942(58) / Poland zone I',NULL,'EPSG','4530','EPSG','4179','EPSG','18281',NULL,1); INSERT INTO "usage" VALUES('EPSG','1195','projected_crs','EPSG','2171','EPSG','1515','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2172','Pulkovo 1942(58) / Poland zone II',NULL,'EPSG','4530','EPSG','4179','EPSG','18282',NULL,0); INSERT INTO "usage" VALUES('EPSG','1196','projected_crs','EPSG','2172','EPSG','1516','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2173','Pulkovo 1942(58) / Poland zone III',NULL,'EPSG','4530','EPSG','4179','EPSG','18283',NULL,0); INSERT INTO "usage" VALUES('EPSG','1197','projected_crs','EPSG','2173','EPSG','1517','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2174','Pulkovo 1942(58) / Poland zone IV',NULL,'EPSG','4530','EPSG','4179','EPSG','18284',NULL,0); INSERT INTO "usage" VALUES('EPSG','1198','projected_crs','EPSG','2174','EPSG','1518','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2175','Pulkovo 1942(58) / Poland zone V',NULL,'EPSG','4530','EPSG','4179','EPSG','18285',NULL,0); INSERT INTO "usage" VALUES('EPSG','1199','projected_crs','EPSG','2175','EPSG','1519','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2176','ETRF2000-PL / CS2000/15',NULL,'EPSG','4531','EPSG','9702','EPSG','18305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1200','projected_crs','EPSG','2176','EPSG','1520','EPSG','1061'); INSERT INTO "projected_crs" VALUES('EPSG','2177','ETRF2000-PL / CS2000/18',NULL,'EPSG','4531','EPSG','9702','EPSG','18306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1201','projected_crs','EPSG','2177','EPSG','1521','EPSG','1061'); INSERT INTO "projected_crs" VALUES('EPSG','2178','ETRF2000-PL / CS2000/21',NULL,'EPSG','4531','EPSG','9702','EPSG','18307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1202','projected_crs','EPSG','2178','EPSG','1522','EPSG','1061'); INSERT INTO "projected_crs" VALUES('EPSG','2179','ETRF2000-PL / CS2000/24',NULL,'EPSG','4531','EPSG','9702','EPSG','18308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1203','projected_crs','EPSG','2179','EPSG','1523','EPSG','1061'); INSERT INTO "projected_crs" VALUES('EPSG','2180','ETRF2000-PL / CS92',NULL,'EPSG','4531','EPSG','9702','EPSG','18300',NULL,0); INSERT INTO "usage" VALUES('EPSG','1204','projected_crs','EPSG','2180','EPSG','1192','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','2188','Azores Occidental 1939 / UTM zone 25N',NULL,'EPSG','4400','EPSG','4182','EPSG','16025',NULL,0); INSERT INTO "usage" VALUES('EPSG','1205','projected_crs','EPSG','2188','EPSG','1344','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2189','Azores Central 1948 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4183','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','1206','projected_crs','EPSG','2189','EPSG','1301','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2190','Azores Oriental 1940 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4184','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','1207','projected_crs','EPSG','2190','EPSG','1345','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2191','Madeira 1936 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4185','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('EPSG','1208','projected_crs','EPSG','2191','EPSG','1314','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2192','ED50 / France EuroLambert',NULL,'EPSG','4499','EPSG','4230','EPSG','18086',NULL,1); INSERT INTO "usage" VALUES('EPSG','1209','projected_crs','EPSG','2192','EPSG','1326','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2193','NZGD2000 / New Zealand Transverse Mercator 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','19971',NULL,0); INSERT INTO "usage" VALUES('EPSG','1210','projected_crs','EPSG','2193','EPSG','3973','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2194','American Samoa 1962 / American Samoa Lambert',NULL,'EPSG','4497','EPSG','4169','EPSG','15301',NULL,1); INSERT INTO "usage" VALUES('EPSG','1211','projected_crs','EPSG','2194','EPSG','1027','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2195','NAD83(HARN) / UTM zone 2S',NULL,'EPSG','4400','EPSG','4152','EPSG','16102',NULL,0); INSERT INTO "usage" VALUES('EPSG','1212','projected_crs','EPSG','2195','EPSG','3110','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2196','ETRS89 / Kp2000 Jutland',NULL,'EPSG','4400','EPSG','4258','EPSG','18401',NULL,0); INSERT INTO "usage" VALUES('EPSG','1213','projected_crs','EPSG','2196','EPSG','2531','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2197','ETRS89 / Kp2000 Zealand',NULL,'EPSG','4400','EPSG','4258','EPSG','18402',NULL,0); INSERT INTO "usage" VALUES('EPSG','1214','projected_crs','EPSG','2197','EPSG','2532','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2198','ETRS89 / Kp2000 Bornholm',NULL,'EPSG','4400','EPSG','4258','EPSG','18403',NULL,0); INSERT INTO "usage" VALUES('EPSG','1215','projected_crs','EPSG','2198','EPSG','2533','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2199','Albanian 1987 / Gauss Kruger zone 4',NULL,'EPSG','4530','EPSG','4191','EPSG','16204',NULL,1); INSERT INTO "usage" VALUES('EPSG','1216','projected_crs','EPSG','2199','EPSG','1025','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','2200','ATS77 / New Brunswick Stereographic (ATS77)',NULL,'EPSG','4500','EPSG','4122','EPSG','19945',NULL,0); INSERT INTO "usage" VALUES('EPSG','1217','projected_crs','EPSG','2200','EPSG','1447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2201','REGVEN / UTM zone 18N',NULL,'EPSG','4400','EPSG','4189','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','1218','projected_crs','EPSG','2201','EPSG','1693','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2202','REGVEN / UTM zone 19N',NULL,'EPSG','4400','EPSG','4189','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','1219','projected_crs','EPSG','2202','EPSG','3859','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2203','REGVEN / UTM zone 20N',NULL,'EPSG','4400','EPSG','4189','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1220','projected_crs','EPSG','2203','EPSG','3858','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2204','NAD27 / Tennessee',NULL,'EPSG','4497','EPSG','4267','EPSG','15302',NULL,0); INSERT INTO "usage" VALUES('EPSG','1221','projected_crs','EPSG','2204','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2205','NAD83 / Kentucky North',NULL,'EPSG','4499','EPSG','4269','EPSG','15303',NULL,0); INSERT INTO "usage" VALUES('EPSG','1222','projected_crs','EPSG','2205','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2206','ED50 / 3-degree Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','4230','EPSG','16269',NULL,0); INSERT INTO "usage" VALUES('EPSG','1223','projected_crs','EPSG','2206','EPSG','1524','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2207','ED50 / 3-degree Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','4230','EPSG','16270',NULL,0); INSERT INTO "usage" VALUES('EPSG','1224','projected_crs','EPSG','2207','EPSG','1525','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2208','ED50 / 3-degree Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','4230','EPSG','16271',NULL,0); INSERT INTO "usage" VALUES('EPSG','1225','projected_crs','EPSG','2208','EPSG','1526','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2209','ED50 / 3-degree Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','4230','EPSG','16272',NULL,0); INSERT INTO "usage" VALUES('EPSG','1226','projected_crs','EPSG','2209','EPSG','1527','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2210','ED50 / 3-degree Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4230','EPSG','16273',NULL,0); INSERT INTO "usage" VALUES('EPSG','1227','projected_crs','EPSG','2210','EPSG','1528','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2211','ED50 / 3-degree Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4230','EPSG','16274',NULL,0); INSERT INTO "usage" VALUES('EPSG','1228','projected_crs','EPSG','2211','EPSG','1529','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2212','ED50 / 3-degree Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4230','EPSG','16275',NULL,0); INSERT INTO "usage" VALUES('EPSG','1229','projected_crs','EPSG','2212','EPSG','1530','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','2213','ETRS89 / TM 30 NE',NULL,'EPSG','4400','EPSG','4258','EPSG','16430',NULL,0); INSERT INTO "usage" VALUES('EPSG','1230','projected_crs','EPSG','2213','EPSG','2546','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2214','Douala 1948 / AOF west',NULL,'EPSG','4400','EPSG','4192','EPSG','18415',NULL,1); INSERT INTO "usage" VALUES('EPSG','1231','projected_crs','EPSG','2214','EPSG','2555','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','2215','Manoca 1962 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4193','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1232','projected_crs','EPSG','2215','EPSG','2555','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2216','Qornoq 1927 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4194','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','1233','projected_crs','EPSG','2216','EPSG','2573','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2217','Qornoq 1927 / UTM zone 23N',NULL,'EPSG','4400','EPSG','4194','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','1234','projected_crs','EPSG','2217','EPSG','2572','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2218','Scoresbysund 1952 / Greenland zone 5 east',NULL,'EPSG','1031','EPSG','4195','EPSG','18425',NULL,0); INSERT INTO "usage" VALUES('EPSG','1235','projected_crs','EPSG','2218','EPSG','3370','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2219','ATS77 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4122','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','1236','projected_crs','EPSG','2219','EPSG','1531','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2220','ATS77 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4122','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1237','projected_crs','EPSG','2220','EPSG','1532','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2221','Scoresbysund 1952 / Greenland zone 6 east',NULL,'EPSG','1031','EPSG','4195','EPSG','18426',NULL,0); INSERT INTO "usage" VALUES('EPSG','1238','projected_crs','EPSG','2221','EPSG','3369','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2222','NAD83 / Arizona East (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15304',NULL,0); INSERT INTO "usage" VALUES('EPSG','1239','projected_crs','EPSG','2222','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2223','NAD83 / Arizona Central (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1240','projected_crs','EPSG','2223','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2224','NAD83 / Arizona West (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1241','projected_crs','EPSG','2224','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2225','NAD83 / California zone 1 (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1242','projected_crs','EPSG','2225','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2226','NAD83 / California zone 2 (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1243','projected_crs','EPSG','2226','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2227','NAD83 / California zone 3 (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15309',NULL,0); INSERT INTO "usage" VALUES('EPSG','1244','projected_crs','EPSG','2227','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2228','NAD83 / California zone 4 (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15310',NULL,0); INSERT INTO "usage" VALUES('EPSG','1245','projected_crs','EPSG','2228','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2229','NAD83 / California zone 5 (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15311',NULL,0); INSERT INTO "usage" VALUES('EPSG','1246','projected_crs','EPSG','2229','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2230','NAD83 / California zone 6 (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15312',NULL,0); INSERT INTO "usage" VALUES('EPSG','1247','projected_crs','EPSG','2230','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2231','NAD83 / Colorado North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1248','projected_crs','EPSG','2231','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2232','NAD83 / Colorado Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1249','projected_crs','EPSG','2232','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2233','NAD83 / Colorado South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1250','projected_crs','EPSG','2233','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2234','NAD83 / Connecticut (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1251','projected_crs','EPSG','2234','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2235','NAD83 / Delaware (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1252','projected_crs','EPSG','2235','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2236','NAD83 / Florida East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1253','projected_crs','EPSG','2236','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2237','NAD83 / Florida West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1254','projected_crs','EPSG','2237','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2238','NAD83 / Florida North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1255','projected_crs','EPSG','2238','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2239','NAD83 / Georgia East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1256','projected_crs','EPSG','2239','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2240','NAD83 / Georgia West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1257','projected_crs','EPSG','2240','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2241','NAD83 / Idaho East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1258','projected_crs','EPSG','2241','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2242','NAD83 / Idaho Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15324',NULL,0); INSERT INTO "usage" VALUES('EPSG','1259','projected_crs','EPSG','2242','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2243','NAD83 / Idaho West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15325',NULL,0); INSERT INTO "usage" VALUES('EPSG','1260','projected_crs','EPSG','2243','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2244','NAD83 / Indiana East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15326',NULL,1); INSERT INTO "usage" VALUES('EPSG','1261','projected_crs','EPSG','2244','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2245','NAD83 / Indiana West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15327',NULL,1); INSERT INTO "usage" VALUES('EPSG','1262','projected_crs','EPSG','2245','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2246','NAD83 / Kentucky North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15328',NULL,0); INSERT INTO "usage" VALUES('EPSG','1263','projected_crs','EPSG','2246','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2247','NAD83 / Kentucky South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15329',NULL,0); INSERT INTO "usage" VALUES('EPSG','1264','projected_crs','EPSG','2247','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2248','NAD83 / Maryland (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15330',NULL,0); INSERT INTO "usage" VALUES('EPSG','1265','projected_crs','EPSG','2248','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2249','NAD83 / Massachusetts Mainland (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1266','projected_crs','EPSG','2249','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2250','NAD83 / Massachusetts Island (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1267','projected_crs','EPSG','2250','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2251','NAD83 / Michigan North (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15333',NULL,0); INSERT INTO "usage" VALUES('EPSG','1268','projected_crs','EPSG','2251','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2252','NAD83 / Michigan Central (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15334',NULL,0); INSERT INTO "usage" VALUES('EPSG','1269','projected_crs','EPSG','2252','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2253','NAD83 / Michigan South (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15335',NULL,0); INSERT INTO "usage" VALUES('EPSG','1270','projected_crs','EPSG','2253','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2254','NAD83 / Mississippi East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15336',NULL,0); INSERT INTO "usage" VALUES('EPSG','1271','projected_crs','EPSG','2254','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2255','NAD83 / Mississippi West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15337',NULL,0); INSERT INTO "usage" VALUES('EPSG','1272','projected_crs','EPSG','2255','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2256','NAD83 / Montana (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15338',NULL,0); INSERT INTO "usage" VALUES('EPSG','1273','projected_crs','EPSG','2256','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2257','NAD83 / New Mexico East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15339',NULL,0); INSERT INTO "usage" VALUES('EPSG','1274','projected_crs','EPSG','2257','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2258','NAD83 / New Mexico Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15340',NULL,0); INSERT INTO "usage" VALUES('EPSG','1275','projected_crs','EPSG','2258','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2259','NAD83 / New Mexico West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15341',NULL,0); INSERT INTO "usage" VALUES('EPSG','1276','projected_crs','EPSG','2259','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2260','NAD83 / New York East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15342',NULL,0); INSERT INTO "usage" VALUES('EPSG','1277','projected_crs','EPSG','2260','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2261','NAD83 / New York Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15343',NULL,0); INSERT INTO "usage" VALUES('EPSG','1278','projected_crs','EPSG','2261','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2262','NAD83 / New York West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15344',NULL,0); INSERT INTO "usage" VALUES('EPSG','1279','projected_crs','EPSG','2262','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2263','NAD83 / New York Long Island (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15345',NULL,0); INSERT INTO "usage" VALUES('EPSG','1280','projected_crs','EPSG','2263','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2264','NAD83 / North Carolina (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15346',NULL,0); INSERT INTO "usage" VALUES('EPSG','1281','projected_crs','EPSG','2264','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2265','NAD83 / North Dakota North (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15347',NULL,0); INSERT INTO "usage" VALUES('EPSG','1282','projected_crs','EPSG','2265','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2266','NAD83 / North Dakota South (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15348',NULL,0); INSERT INTO "usage" VALUES('EPSG','1283','projected_crs','EPSG','2266','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2267','NAD83 / Oklahoma North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15349',NULL,0); INSERT INTO "usage" VALUES('EPSG','1284','projected_crs','EPSG','2267','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2268','NAD83 / Oklahoma South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15350',NULL,0); INSERT INTO "usage" VALUES('EPSG','1285','projected_crs','EPSG','2268','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2269','NAD83 / Oregon North (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15351',NULL,0); INSERT INTO "usage" VALUES('EPSG','1286','projected_crs','EPSG','2269','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2270','NAD83 / Oregon South (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15352',NULL,0); INSERT INTO "usage" VALUES('EPSG','1287','projected_crs','EPSG','2270','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2271','NAD83 / Pennsylvania North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15353',NULL,0); INSERT INTO "usage" VALUES('EPSG','1288','projected_crs','EPSG','2271','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2272','NAD83 / Pennsylvania South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15354',NULL,0); INSERT INTO "usage" VALUES('EPSG','1289','projected_crs','EPSG','2272','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2273','NAD83 / South Carolina (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15355',NULL,0); INSERT INTO "usage" VALUES('EPSG','1290','projected_crs','EPSG','2273','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2274','NAD83 / Tennessee (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15356',NULL,0); INSERT INTO "usage" VALUES('EPSG','1291','projected_crs','EPSG','2274','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2275','NAD83 / Texas North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15357',NULL,0); INSERT INTO "usage" VALUES('EPSG','1292','projected_crs','EPSG','2275','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2276','NAD83 / Texas North Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15358',NULL,0); INSERT INTO "usage" VALUES('EPSG','1293','projected_crs','EPSG','2276','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2277','NAD83 / Texas Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15359',NULL,0); INSERT INTO "usage" VALUES('EPSG','1294','projected_crs','EPSG','2277','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2278','NAD83 / Texas South Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15360',NULL,0); INSERT INTO "usage" VALUES('EPSG','1295','projected_crs','EPSG','2278','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2279','NAD83 / Texas South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15361',NULL,0); INSERT INTO "usage" VALUES('EPSG','1296','projected_crs','EPSG','2279','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2280','NAD83 / Utah North (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15362',NULL,0); INSERT INTO "usage" VALUES('EPSG','1297','projected_crs','EPSG','2280','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2281','NAD83 / Utah Central (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15363',NULL,0); INSERT INTO "usage" VALUES('EPSG','1298','projected_crs','EPSG','2281','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2282','NAD83 / Utah South (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15364',NULL,0); INSERT INTO "usage" VALUES('EPSG','1299','projected_crs','EPSG','2282','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2283','NAD83 / Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15365',NULL,0); INSERT INTO "usage" VALUES('EPSG','1300','projected_crs','EPSG','2283','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2284','NAD83 / Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15366',NULL,0); INSERT INTO "usage" VALUES('EPSG','1301','projected_crs','EPSG','2284','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2285','NAD83 / Washington North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15367',NULL,0); INSERT INTO "usage" VALUES('EPSG','1302','projected_crs','EPSG','2285','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2286','NAD83 / Washington South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15368',NULL,0); INSERT INTO "usage" VALUES('EPSG','1303','projected_crs','EPSG','2286','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2287','NAD83 / Wisconsin North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15369',NULL,0); INSERT INTO "usage" VALUES('EPSG','1304','projected_crs','EPSG','2287','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2288','NAD83 / Wisconsin Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15370',NULL,0); INSERT INTO "usage" VALUES('EPSG','1305','projected_crs','EPSG','2288','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2289','NAD83 / Wisconsin South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15371',NULL,0); INSERT INTO "usage" VALUES('EPSG','1306','projected_crs','EPSG','2289','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2290','ATS77 / Prince Edward Isl. Stereographic (ATS77)',NULL,'EPSG','4496','EPSG','4122','EPSG','19933',NULL,0); INSERT INTO "usage" VALUES('EPSG','1307','projected_crs','EPSG','2290','EPSG','1533','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2291','NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83)',NULL,'EPSG','4496','EPSG','4122','EPSG','19960',NULL,1); INSERT INTO "usage" VALUES('EPSG','1308','projected_crs','EPSG','2291','EPSG','1533','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2292','NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83)',NULL,'EPSG','4496','EPSG','4140','EPSG','19960',NULL,1); INSERT INTO "usage" VALUES('EPSG','1309','projected_crs','EPSG','2292','EPSG','1533','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2294','ATS77 / MTM Nova Scotia zone 4',NULL,'EPSG','4400','EPSG','4122','EPSG','17794',NULL,0); INSERT INTO "usage" VALUES('EPSG','1310','projected_crs','EPSG','2294','EPSG','1534','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2295','ATS77 / MTM Nova Scotia zone 5',NULL,'EPSG','4400','EPSG','4122','EPSG','17795',NULL,0); INSERT INTO "usage" VALUES('EPSG','1311','projected_crs','EPSG','2295','EPSG','1535','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2296','Ammassalik 1958 / Greenland zone 7 east',NULL,'EPSG','1031','EPSG','4196','EPSG','18427',NULL,0); INSERT INTO "usage" VALUES('EPSG','1312','projected_crs','EPSG','2296','EPSG','2571','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2297','Qornoq 1927 / Greenland zone 1 east',NULL,'EPSG','4501','EPSG','4194','EPSG','18421',NULL,1); INSERT INTO "usage" VALUES('EPSG','1313','projected_crs','EPSG','2297','EPSG','2556','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2298','Qornoq 1927 / Greenland zone 2 east',NULL,'EPSG','4501','EPSG','4194','EPSG','18422',NULL,1); INSERT INTO "usage" VALUES('EPSG','1314','projected_crs','EPSG','2298','EPSG','2557','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2299','Qornoq 1927 / Greenland zone 2 west',NULL,'EPSG','1031','EPSG','4194','EPSG','18432',NULL,0); INSERT INTO "usage" VALUES('EPSG','1315','projected_crs','EPSG','2299','EPSG','3368','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2300','Qornoq 1927 / Greenland zone 3 east',NULL,'EPSG','4501','EPSG','4194','EPSG','18423',NULL,1); INSERT INTO "usage" VALUES('EPSG','1316','projected_crs','EPSG','2300','EPSG','2558','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2301','Qornoq 1927 / Greenland zone 3 west',NULL,'EPSG','1031','EPSG','4194','EPSG','18433',NULL,0); INSERT INTO "usage" VALUES('EPSG','1317','projected_crs','EPSG','2301','EPSG','3367','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2302','Qornoq 1927 / Greenland zone 4 east',NULL,'EPSG','4501','EPSG','4194','EPSG','18424',NULL,1); INSERT INTO "usage" VALUES('EPSG','1318','projected_crs','EPSG','2302','EPSG','2559','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2303','Qornoq 1927 / Greenland zone 4 west',NULL,'EPSG','1031','EPSG','4194','EPSG','18434',NULL,0); INSERT INTO "usage" VALUES('EPSG','1319','projected_crs','EPSG','2303','EPSG','3366','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2304','Qornoq 1927 / Greenland zone 5 west',NULL,'EPSG','1031','EPSG','4194','EPSG','18435',NULL,0); INSERT INTO "usage" VALUES('EPSG','1320','projected_crs','EPSG','2304','EPSG','3365','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2305','Qornoq 1927 / Greenland zone 6 west',NULL,'EPSG','1031','EPSG','4194','EPSG','18436',NULL,0); INSERT INTO "usage" VALUES('EPSG','1321','projected_crs','EPSG','2305','EPSG','3364','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2306','Qornoq 1927 / Greenland zone 7 west',NULL,'EPSG','1031','EPSG','4194','EPSG','18437',NULL,0); INSERT INTO "usage" VALUES('EPSG','1322','projected_crs','EPSG','2306','EPSG','3363','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2307','Qornoq 1927 / Greenland zone 8 east',NULL,'EPSG','1031','EPSG','4194','EPSG','18428',NULL,0); INSERT INTO "usage" VALUES('EPSG','1323','projected_crs','EPSG','2307','EPSG','3846','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2308','Batavia / TM 109 SE',NULL,'EPSG','4400','EPSG','4211','EPSG','16709',NULL,0); INSERT INTO "usage" VALUES('EPSG','1324','projected_crs','EPSG','2308','EPSG','2577','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2309','WGS 84 / TM 116 SE',NULL,'EPSG','4400','EPSG','4326','EPSG','16716',NULL,0); INSERT INTO "usage" VALUES('EPSG','1325','projected_crs','EPSG','2309','EPSG','2588','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2310','WGS 84 / TM 132 SE',NULL,'EPSG','4400','EPSG','4326','EPSG','16732',NULL,0); INSERT INTO "usage" VALUES('EPSG','1326','projected_crs','EPSG','2310','EPSG','2589','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2311','WGS 84 / TM 6 NE',NULL,'EPSG','4400','EPSG','4326','EPSG','16406',NULL,0); INSERT INTO "usage" VALUES('EPSG','1327','projected_crs','EPSG','2311','EPSG','2981','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2312','Garoua / UTM zone 33N',NULL,'EPSG','4400','EPSG','4197','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','1328','projected_crs','EPSG','2312','EPSG','2590','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2313','Kousseri / UTM zone 33N',NULL,'EPSG','4400','EPSG','4198','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','1329','projected_crs','EPSG','2313','EPSG','2591','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2314','Trinidad 1903 / Trinidad Grid (ftCla)',NULL,'EPSG','4403','EPSG','4302','EPSG','19975',NULL,0); INSERT INTO "usage" VALUES('EPSG','1330','projected_crs','EPSG','2314','EPSG','1339','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2315','Campo Inchauspe / UTM zone 19S',NULL,'EPSG','4400','EPSG','4221','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','1331','projected_crs','EPSG','2315','EPSG','2596','EPSG','1216'); INSERT INTO "projected_crs" VALUES('EPSG','2316','Campo Inchauspe / UTM zone 20S',NULL,'EPSG','4400','EPSG','4221','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','1332','projected_crs','EPSG','2316','EPSG','2597','EPSG','1216'); INSERT INTO "projected_crs" VALUES('EPSG','2317','PSAD56 / ICN Regional',NULL,'EPSG','4499','EPSG','4248','EPSG','19976',NULL,0); INSERT INTO "usage" VALUES('EPSG','1333','projected_crs','EPSG','2317','EPSG','3327','EPSG','1242'); INSERT INTO "projected_crs" VALUES('EPSG','2318','Ain el Abd / Aramco Lambert',NULL,'EPSG','4400','EPSG','4204','EPSG','19977',NULL,0); INSERT INTO "usage" VALUES('EPSG','1334','projected_crs','EPSG','2318','EPSG','3303','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2319','ED50 / TM27',NULL,'EPSG','4530','EPSG','4230','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1335','projected_crs','EPSG','2319','EPSG','1524','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2320','ED50 / TM30',NULL,'EPSG','4530','EPSG','4230','EPSG','16370',NULL,0); INSERT INTO "usage" VALUES('EPSG','1336','projected_crs','EPSG','2320','EPSG','1525','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2321','ED50 / TM33',NULL,'EPSG','4530','EPSG','4230','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1337','projected_crs','EPSG','2321','EPSG','1526','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2322','ED50 / TM36',NULL,'EPSG','4530','EPSG','4230','EPSG','16372',NULL,0); INSERT INTO "usage" VALUES('EPSG','1338','projected_crs','EPSG','2322','EPSG','1527','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2323','ED50 / TM39',NULL,'EPSG','4530','EPSG','4230','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1339','projected_crs','EPSG','2323','EPSG','1528','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2324','ED50 / TM42',NULL,'EPSG','4530','EPSG','4230','EPSG','16374',NULL,0); INSERT INTO "usage" VALUES('EPSG','1340','projected_crs','EPSG','2324','EPSG','1529','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2325','ED50 / TM45',NULL,'EPSG','4530','EPSG','4230','EPSG','16308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1341','projected_crs','EPSG','2325','EPSG','1530','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2326','Hong Kong 1980 Grid System',NULL,'EPSG','4500','EPSG','4611','EPSG','19978',NULL,0); INSERT INTO "usage" VALUES('EPSG','1342','projected_crs','EPSG','2326','EPSG','1118','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2327','Xian 1980 / Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4610','EPSG','16213',NULL,0); INSERT INTO "usage" VALUES('EPSG','1343','projected_crs','EPSG','2327','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2328','Xian 1980 / Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4610','EPSG','16214',NULL,0); INSERT INTO "usage" VALUES('EPSG','1344','projected_crs','EPSG','2328','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2329','Xian 1980 / Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4610','EPSG','16215',NULL,0); INSERT INTO "usage" VALUES('EPSG','1345','projected_crs','EPSG','2329','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2330','Xian 1980 / Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4610','EPSG','16216',NULL,0); INSERT INTO "usage" VALUES('EPSG','1346','projected_crs','EPSG','2330','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2331','Xian 1980 / Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4610','EPSG','16217',NULL,0); INSERT INTO "usage" VALUES('EPSG','1347','projected_crs','EPSG','2331','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2332','Xian 1980 / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4610','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','1348','projected_crs','EPSG','2332','EPSG','1592','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2333','Xian 1980 / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4610','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','1349','projected_crs','EPSG','2333','EPSG','1593','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2334','Xian 1980 / Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4610','EPSG','16220',NULL,0); INSERT INTO "usage" VALUES('EPSG','1350','projected_crs','EPSG','2334','EPSG','1594','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2335','Xian 1980 / Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4610','EPSG','16221',NULL,0); INSERT INTO "usage" VALUES('EPSG','1351','projected_crs','EPSG','2335','EPSG','1595','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2336','Xian 1980 / Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4610','EPSG','16222',NULL,0); INSERT INTO "usage" VALUES('EPSG','1352','projected_crs','EPSG','2336','EPSG','1596','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2337','Xian 1980 / Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4610','EPSG','16223',NULL,0); INSERT INTO "usage" VALUES('EPSG','1353','projected_crs','EPSG','2337','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2338','Xian 1980 / Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4610','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1354','projected_crs','EPSG','2338','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2339','Xian 1980 / Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4610','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1355','projected_crs','EPSG','2339','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2340','Xian 1980 / Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4610','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1356','projected_crs','EPSG','2340','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2341','Xian 1980 / Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4610','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1357','projected_crs','EPSG','2341','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2342','Xian 1980 / Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4610','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1358','projected_crs','EPSG','2342','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2343','Xian 1980 / Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4610','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1359','projected_crs','EPSG','2343','EPSG','1592','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2344','Xian 1980 / Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4610','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1360','projected_crs','EPSG','2344','EPSG','1593','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2345','Xian 1980 / Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4610','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1361','projected_crs','EPSG','2345','EPSG','1594','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2346','Xian 1980 / Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4610','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1362','projected_crs','EPSG','2346','EPSG','1595','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2347','Xian 1980 / Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4610','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1363','projected_crs','EPSG','2347','EPSG','1596','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2348','Xian 1980 / Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4610','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1364','projected_crs','EPSG','2348','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2349','Xian 1980 / 3-degree Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4610','EPSG','16285',NULL,0); INSERT INTO "usage" VALUES('EPSG','1365','projected_crs','EPSG','2349','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2350','Xian 1980 / 3-degree Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4610','EPSG','16286',NULL,0); INSERT INTO "usage" VALUES('EPSG','1366','projected_crs','EPSG','2350','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2351','Xian 1980 / 3-degree Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4610','EPSG','16287',NULL,0); INSERT INTO "usage" VALUES('EPSG','1367','projected_crs','EPSG','2351','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2352','Xian 1980 / 3-degree Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4610','EPSG','16288',NULL,0); INSERT INTO "usage" VALUES('EPSG','1368','projected_crs','EPSG','2352','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2353','Xian 1980 / 3-degree Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4610','EPSG','16289',NULL,0); INSERT INTO "usage" VALUES('EPSG','1369','projected_crs','EPSG','2353','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2354','Xian 1980 / 3-degree Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4610','EPSG','16290',NULL,0); INSERT INTO "usage" VALUES('EPSG','1370','projected_crs','EPSG','2354','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2355','Xian 1980 / 3-degree Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4610','EPSG','16291',NULL,0); INSERT INTO "usage" VALUES('EPSG','1371','projected_crs','EPSG','2355','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2356','Xian 1980 / 3-degree Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4610','EPSG','16292',NULL,0); INSERT INTO "usage" VALUES('EPSG','1372','projected_crs','EPSG','2356','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2357','Xian 1980 / 3-degree Gauss-Kruger zone 33',NULL,'EPSG','4530','EPSG','4610','EPSG','16293',NULL,0); INSERT INTO "usage" VALUES('EPSG','1373','projected_crs','EPSG','2357','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2358','Xian 1980 / 3-degree Gauss-Kruger zone 34',NULL,'EPSG','4530','EPSG','4610','EPSG','16294',NULL,0); INSERT INTO "usage" VALUES('EPSG','1374','projected_crs','EPSG','2358','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2359','Xian 1980 / 3-degree Gauss-Kruger zone 35',NULL,'EPSG','4530','EPSG','4610','EPSG','16295',NULL,0); INSERT INTO "usage" VALUES('EPSG','1375','projected_crs','EPSG','2359','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2360','Xian 1980 / 3-degree Gauss-Kruger zone 36',NULL,'EPSG','4530','EPSG','4610','EPSG','16296',NULL,0); INSERT INTO "usage" VALUES('EPSG','1376','projected_crs','EPSG','2360','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2361','Xian 1980 / 3-degree Gauss-Kruger zone 37',NULL,'EPSG','4530','EPSG','4610','EPSG','16297',NULL,0); INSERT INTO "usage" VALUES('EPSG','1377','projected_crs','EPSG','2361','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2362','Xian 1980 / 3-degree Gauss-Kruger zone 38',NULL,'EPSG','4530','EPSG','4610','EPSG','16298',NULL,0); INSERT INTO "usage" VALUES('EPSG','1378','projected_crs','EPSG','2362','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2363','Xian 1980 / 3-degree Gauss-Kruger zone 39',NULL,'EPSG','4530','EPSG','4610','EPSG','16299',NULL,0); INSERT INTO "usage" VALUES('EPSG','1379','projected_crs','EPSG','2363','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2364','Xian 1980 / 3-degree Gauss-Kruger zone 40',NULL,'EPSG','4530','EPSG','4610','EPSG','16070',NULL,0); INSERT INTO "usage" VALUES('EPSG','1380','projected_crs','EPSG','2364','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2365','Xian 1980 / 3-degree Gauss-Kruger zone 41',NULL,'EPSG','4530','EPSG','4610','EPSG','16071',NULL,0); INSERT INTO "usage" VALUES('EPSG','1381','projected_crs','EPSG','2365','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2366','Xian 1980 / 3-degree Gauss-Kruger zone 42',NULL,'EPSG','4530','EPSG','4610','EPSG','16072',NULL,0); INSERT INTO "usage" VALUES('EPSG','1382','projected_crs','EPSG','2366','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2367','Xian 1980 / 3-degree Gauss-Kruger zone 43',NULL,'EPSG','4530','EPSG','4610','EPSG','16073',NULL,0); INSERT INTO "usage" VALUES('EPSG','1383','projected_crs','EPSG','2367','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2368','Xian 1980 / 3-degree Gauss-Kruger zone 44',NULL,'EPSG','4530','EPSG','4610','EPSG','16074',NULL,0); INSERT INTO "usage" VALUES('EPSG','1384','projected_crs','EPSG','2368','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2369','Xian 1980 / 3-degree Gauss-Kruger zone 45',NULL,'EPSG','4530','EPSG','4610','EPSG','16075',NULL,0); INSERT INTO "usage" VALUES('EPSG','1385','projected_crs','EPSG','2369','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2370','Xian 1980 / 3-degree Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4610','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1386','projected_crs','EPSG','2370','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2371','Xian 1980 / 3-degree Gauss-Kruger CM 78E',NULL,'EPSG','4530','EPSG','4610','EPSG','16386',NULL,0); INSERT INTO "usage" VALUES('EPSG','1387','projected_crs','EPSG','2371','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2372','Xian 1980 / 3-degree Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4610','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1388','projected_crs','EPSG','2372','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2373','Xian 1980 / 3-degree Gauss-Kruger CM 84E',NULL,'EPSG','4530','EPSG','4610','EPSG','16388',NULL,0); INSERT INTO "usage" VALUES('EPSG','1389','projected_crs','EPSG','2373','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2374','Xian 1980 / 3-degree Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4610','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1390','projected_crs','EPSG','2374','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2375','Xian 1980 / 3-degree Gauss-Kruger CM 90E',NULL,'EPSG','4530','EPSG','4610','EPSG','16390',NULL,0); INSERT INTO "usage" VALUES('EPSG','1391','projected_crs','EPSG','2375','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2376','Xian 1980 / 3-degree Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4610','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1392','projected_crs','EPSG','2376','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2377','Xian 1980 / 3-degree Gauss-Kruger CM 96E',NULL,'EPSG','4530','EPSG','4610','EPSG','16392',NULL,0); INSERT INTO "usage" VALUES('EPSG','1393','projected_crs','EPSG','2377','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2378','Xian 1980 / 3-degree Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4610','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1394','projected_crs','EPSG','2378','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2379','Xian 1980 / 3-degree Gauss-Kruger CM 102E',NULL,'EPSG','4530','EPSG','4610','EPSG','16394',NULL,0); INSERT INTO "usage" VALUES('EPSG','1395','projected_crs','EPSG','2379','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2380','Xian 1980 / 3-degree Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4610','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1396','projected_crs','EPSG','2380','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2381','Xian 1980 / 3-degree Gauss-Kruger CM 108E',NULL,'EPSG','4530','EPSG','4610','EPSG','16396',NULL,0); INSERT INTO "usage" VALUES('EPSG','1397','projected_crs','EPSG','2381','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2382','Xian 1980 / 3-degree Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4610','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1398','projected_crs','EPSG','2382','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2383','Xian 1980 / 3-degree Gauss-Kruger CM 114E',NULL,'EPSG','4530','EPSG','4610','EPSG','16398',NULL,0); INSERT INTO "usage" VALUES('EPSG','1399','projected_crs','EPSG','2383','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2384','Xian 1980 / 3-degree Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4610','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1400','projected_crs','EPSG','2384','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2385','Xian 1980 / 3-degree Gauss-Kruger CM 120E',NULL,'EPSG','4530','EPSG','4610','EPSG','16170',NULL,0); INSERT INTO "usage" VALUES('EPSG','1401','projected_crs','EPSG','2385','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2386','Xian 1980 / 3-degree Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4610','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1402','projected_crs','EPSG','2386','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2387','Xian 1980 / 3-degree Gauss-Kruger CM 126E',NULL,'EPSG','4530','EPSG','4610','EPSG','16172',NULL,0); INSERT INTO "usage" VALUES('EPSG','1403','projected_crs','EPSG','2387','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2388','Xian 1980 / 3-degree Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4610','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1404','projected_crs','EPSG','2388','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2389','Xian 1980 / 3-degree Gauss-Kruger CM 132E',NULL,'EPSG','4530','EPSG','4610','EPSG','16174',NULL,0); INSERT INTO "usage" VALUES('EPSG','1405','projected_crs','EPSG','2389','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2390','Xian 1980 / 3-degree Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4610','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1406','projected_crs','EPSG','2390','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2391','KKJ / Finland zone 1',NULL,'EPSG','4530','EPSG','4123','EPSG','18191',NULL,0); INSERT INTO "usage" VALUES('EPSG','1407','projected_crs','EPSG','2391','EPSG','1536','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2392','KKJ / Finland zone 2',NULL,'EPSG','4530','EPSG','4123','EPSG','18192',NULL,0); INSERT INTO "usage" VALUES('EPSG','1408','projected_crs','EPSG','2392','EPSG','1537','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2393','KKJ / Finland Uniform Coordinate System',NULL,'EPSG','4530','EPSG','4123','EPSG','18193',NULL,0); INSERT INTO "usage" VALUES('EPSG','1409','projected_crs','EPSG','2393','EPSG','1538','EPSG','1208'); INSERT INTO "usage" VALUES('EPSG','1410','projected_crs','EPSG','2393','EPSG','3333','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','2394','KKJ / Finland zone 4',NULL,'EPSG','4530','EPSG','4123','EPSG','18194',NULL,0); INSERT INTO "usage" VALUES('EPSG','1411','projected_crs','EPSG','2394','EPSG','1539','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2395','South Yemen / Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4164','EPSG','16208',NULL,0); INSERT INTO "usage" VALUES('EPSG','1412','projected_crs','EPSG','2395','EPSG','1492','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2396','South Yemen / Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','4164','EPSG','16209',NULL,0); INSERT INTO "usage" VALUES('EPSG','1413','projected_crs','EPSG','2396','EPSG','1493','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2397','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3',NULL,'EPSG','4530','EPSG','4178','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','1414','projected_crs','EPSG','2397','EPSG','1512','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','2398','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4178','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','1415','projected_crs','EPSG','2398','EPSG','1513','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','2399','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4178','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','1416','projected_crs','EPSG','2399','EPSG','1514','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','2400','RT90 2.5 gon W',NULL,'EPSG','4530','EPSG','4124','EPSG','19929',NULL,1); INSERT INTO "usage" VALUES('EPSG','1417','projected_crs','EPSG','2400','EPSG','1225','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','2401','Beijing 1954 / 3-degree Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4214','EPSG','16285',NULL,0); INSERT INTO "usage" VALUES('EPSG','1418','projected_crs','EPSG','2401','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2402','Beijing 1954 / 3-degree Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4214','EPSG','16286',NULL,0); INSERT INTO "usage" VALUES('EPSG','1419','projected_crs','EPSG','2402','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2403','Beijing 1954 / 3-degree Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4214','EPSG','16287',NULL,0); INSERT INTO "usage" VALUES('EPSG','1420','projected_crs','EPSG','2403','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2404','Beijing 1954 / 3-degree Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4214','EPSG','16288',NULL,0); INSERT INTO "usage" VALUES('EPSG','1421','projected_crs','EPSG','2404','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2405','Beijing 1954 / 3-degree Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4214','EPSG','16289',NULL,0); INSERT INTO "usage" VALUES('EPSG','1422','projected_crs','EPSG','2405','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2406','Beijing 1954 / 3-degree Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4214','EPSG','16290',NULL,0); INSERT INTO "usage" VALUES('EPSG','1423','projected_crs','EPSG','2406','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2407','Beijing 1954 / 3-degree Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4214','EPSG','16291',NULL,0); INSERT INTO "usage" VALUES('EPSG','1424','projected_crs','EPSG','2407','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2408','Beijing 1954 / 3-degree Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4214','EPSG','16292',NULL,0); INSERT INTO "usage" VALUES('EPSG','1425','projected_crs','EPSG','2408','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2409','Beijing 1954 / 3-degree Gauss-Kruger zone 33',NULL,'EPSG','4530','EPSG','4214','EPSG','16293',NULL,0); INSERT INTO "usage" VALUES('EPSG','1426','projected_crs','EPSG','2409','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2410','Beijing 1954 / 3-degree Gauss-Kruger zone 34',NULL,'EPSG','4530','EPSG','4214','EPSG','16294',NULL,0); INSERT INTO "usage" VALUES('EPSG','1427','projected_crs','EPSG','2410','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2411','Beijing 1954 / 3-degree Gauss-Kruger zone 35',NULL,'EPSG','4530','EPSG','4214','EPSG','16295',NULL,0); INSERT INTO "usage" VALUES('EPSG','1428','projected_crs','EPSG','2411','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2412','Beijing 1954 / 3-degree Gauss-Kruger zone 36',NULL,'EPSG','4530','EPSG','4214','EPSG','16296',NULL,0); INSERT INTO "usage" VALUES('EPSG','1429','projected_crs','EPSG','2412','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2413','Beijing 1954 / 3-degree Gauss-Kruger zone 37',NULL,'EPSG','4530','EPSG','4214','EPSG','16297',NULL,0); INSERT INTO "usage" VALUES('EPSG','1430','projected_crs','EPSG','2413','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2414','Beijing 1954 / 3-degree Gauss-Kruger zone 38',NULL,'EPSG','4530','EPSG','4214','EPSG','16298',NULL,0); INSERT INTO "usage" VALUES('EPSG','1431','projected_crs','EPSG','2414','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2415','Beijing 1954 / 3-degree Gauss-Kruger zone 39',NULL,'EPSG','4530','EPSG','4214','EPSG','16299',NULL,0); INSERT INTO "usage" VALUES('EPSG','1432','projected_crs','EPSG','2415','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2416','Beijing 1954 / 3-degree Gauss-Kruger zone 40',NULL,'EPSG','4530','EPSG','4214','EPSG','16070',NULL,0); INSERT INTO "usage" VALUES('EPSG','1433','projected_crs','EPSG','2416','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2417','Beijing 1954 / 3-degree Gauss-Kruger zone 41',NULL,'EPSG','4530','EPSG','4214','EPSG','16071',NULL,0); INSERT INTO "usage" VALUES('EPSG','1434','projected_crs','EPSG','2417','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2418','Beijing 1954 / 3-degree Gauss-Kruger zone 42',NULL,'EPSG','4530','EPSG','4214','EPSG','16072',NULL,0); INSERT INTO "usage" VALUES('EPSG','1435','projected_crs','EPSG','2418','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2419','Beijing 1954 / 3-degree Gauss-Kruger zone 43',NULL,'EPSG','4530','EPSG','4214','EPSG','16073',NULL,0); INSERT INTO "usage" VALUES('EPSG','1436','projected_crs','EPSG','2419','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2420','Beijing 1954 / 3-degree Gauss-Kruger zone 44',NULL,'EPSG','4530','EPSG','4214','EPSG','16074',NULL,0); INSERT INTO "usage" VALUES('EPSG','1437','projected_crs','EPSG','2420','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2421','Beijing 1954 / 3-degree Gauss-Kruger zone 45',NULL,'EPSG','4530','EPSG','4214','EPSG','16075',NULL,0); INSERT INTO "usage" VALUES('EPSG','1438','projected_crs','EPSG','2421','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2422','Beijing 1954 / 3-degree Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4214','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1439','projected_crs','EPSG','2422','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2423','Beijing 1954 / 3-degree Gauss-Kruger CM 78E',NULL,'EPSG','4530','EPSG','4214','EPSG','16386',NULL,0); INSERT INTO "usage" VALUES('EPSG','1440','projected_crs','EPSG','2423','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2424','Beijing 1954 / 3-degree Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4214','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1441','projected_crs','EPSG','2424','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2425','Beijing 1954 / 3-degree Gauss-Kruger CM 84E',NULL,'EPSG','4530','EPSG','4214','EPSG','16388',NULL,0); INSERT INTO "usage" VALUES('EPSG','1442','projected_crs','EPSG','2425','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2426','Beijing 1954 / 3-degree Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4214','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1443','projected_crs','EPSG','2426','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2427','Beijing 1954 / 3-degree Gauss-Kruger CM 90E',NULL,'EPSG','4530','EPSG','4214','EPSG','16390',NULL,0); INSERT INTO "usage" VALUES('EPSG','1444','projected_crs','EPSG','2427','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2428','Beijing 1954 / 3-degree Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4214','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1445','projected_crs','EPSG','2428','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2429','Beijing 1954 / 3-degree Gauss-Kruger CM 96E',NULL,'EPSG','4530','EPSG','4214','EPSG','16392',NULL,0); INSERT INTO "usage" VALUES('EPSG','1446','projected_crs','EPSG','2429','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2430','Beijing 1954 / 3-degree Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4214','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1447','projected_crs','EPSG','2430','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2431','Beijing 1954 / 3-degree Gauss-Kruger CM 102E',NULL,'EPSG','4530','EPSG','4214','EPSG','16394',NULL,0); INSERT INTO "usage" VALUES('EPSG','1448','projected_crs','EPSG','2431','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2432','Beijing 1954 / 3-degree Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4214','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1449','projected_crs','EPSG','2432','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2433','Beijing 1954 / 3-degree Gauss-Kruger CM 108E',NULL,'EPSG','4530','EPSG','4214','EPSG','16396',NULL,0); INSERT INTO "usage" VALUES('EPSG','1450','projected_crs','EPSG','2433','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2434','Beijing 1954 / 3-degree Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4214','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1451','projected_crs','EPSG','2434','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2435','Beijing 1954 / 3-degree Gauss-Kruger CM 114E',NULL,'EPSG','4530','EPSG','4214','EPSG','16398',NULL,0); INSERT INTO "usage" VALUES('EPSG','1452','projected_crs','EPSG','2435','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2436','Beijing 1954 / 3-degree Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4214','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1453','projected_crs','EPSG','2436','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2437','Beijing 1954 / 3-degree Gauss-Kruger CM 120E',NULL,'EPSG','4530','EPSG','4214','EPSG','16170',NULL,0); INSERT INTO "usage" VALUES('EPSG','1454','projected_crs','EPSG','2437','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2438','Beijing 1954 / 3-degree Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4214','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1455','projected_crs','EPSG','2438','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2439','Beijing 1954 / 3-degree Gauss-Kruger CM 126E',NULL,'EPSG','4530','EPSG','4214','EPSG','16172',NULL,0); INSERT INTO "usage" VALUES('EPSG','1456','projected_crs','EPSG','2439','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2440','Beijing 1954 / 3-degree Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4214','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1457','projected_crs','EPSG','2440','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2441','Beijing 1954 / 3-degree Gauss-Kruger CM 132E',NULL,'EPSG','4530','EPSG','4214','EPSG','16174',NULL,0); INSERT INTO "usage" VALUES('EPSG','1458','projected_crs','EPSG','2441','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2442','Beijing 1954 / 3-degree Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4214','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1459','projected_crs','EPSG','2442','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2443','JGD2000 / Japan Plane Rectangular CS I',NULL,'EPSG','4530','EPSG','4612','EPSG','17801',NULL,0); INSERT INTO "usage" VALUES('EPSG','1460','projected_crs','EPSG','2443','EPSG','1854','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2444','JGD2000 / Japan Plane Rectangular CS II',NULL,'EPSG','4530','EPSG','4612','EPSG','17802',NULL,0); INSERT INTO "usage" VALUES('EPSG','1461','projected_crs','EPSG','2444','EPSG','1855','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2445','JGD2000 / Japan Plane Rectangular CS III',NULL,'EPSG','4530','EPSG','4612','EPSG','17803',NULL,0); INSERT INTO "usage" VALUES('EPSG','1462','projected_crs','EPSG','2445','EPSG','1856','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2446','JGD2000 / Japan Plane Rectangular CS IV',NULL,'EPSG','4530','EPSG','4612','EPSG','17804',NULL,0); INSERT INTO "usage" VALUES('EPSG','1463','projected_crs','EPSG','2446','EPSG','1857','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2447','JGD2000 / Japan Plane Rectangular CS V',NULL,'EPSG','4530','EPSG','4612','EPSG','17805',NULL,0); INSERT INTO "usage" VALUES('EPSG','1464','projected_crs','EPSG','2447','EPSG','1858','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2448','JGD2000 / Japan Plane Rectangular CS VI',NULL,'EPSG','4530','EPSG','4612','EPSG','17806',NULL,0); INSERT INTO "usage" VALUES('EPSG','1465','projected_crs','EPSG','2448','EPSG','1859','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2449','JGD2000 / Japan Plane Rectangular CS VII',NULL,'EPSG','4530','EPSG','4612','EPSG','17807',NULL,0); INSERT INTO "usage" VALUES('EPSG','1466','projected_crs','EPSG','2449','EPSG','1860','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2450','JGD2000 / Japan Plane Rectangular CS VIII',NULL,'EPSG','4530','EPSG','4612','EPSG','17808',NULL,0); INSERT INTO "usage" VALUES('EPSG','1467','projected_crs','EPSG','2450','EPSG','1861','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2451','JGD2000 / Japan Plane Rectangular CS IX',NULL,'EPSG','4530','EPSG','4612','EPSG','17809',NULL,0); INSERT INTO "usage" VALUES('EPSG','1468','projected_crs','EPSG','2451','EPSG','1862','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2452','JGD2000 / Japan Plane Rectangular CS X',NULL,'EPSG','4530','EPSG','4612','EPSG','17810',NULL,0); INSERT INTO "usage" VALUES('EPSG','1469','projected_crs','EPSG','2452','EPSG','1863','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2453','JGD2000 / Japan Plane Rectangular CS XI',NULL,'EPSG','4530','EPSG','4612','EPSG','17811',NULL,0); INSERT INTO "usage" VALUES('EPSG','1470','projected_crs','EPSG','2453','EPSG','1864','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2454','JGD2000 / Japan Plane Rectangular CS XII',NULL,'EPSG','4530','EPSG','4612','EPSG','17812',NULL,0); INSERT INTO "usage" VALUES('EPSG','1471','projected_crs','EPSG','2454','EPSG','1865','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2455','JGD2000 / Japan Plane Rectangular CS XIII',NULL,'EPSG','4530','EPSG','4612','EPSG','17813',NULL,0); INSERT INTO "usage" VALUES('EPSG','1472','projected_crs','EPSG','2455','EPSG','1866','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2456','JGD2000 / Japan Plane Rectangular CS XIV',NULL,'EPSG','4530','EPSG','4612','EPSG','17814',NULL,0); INSERT INTO "usage" VALUES('EPSG','1473','projected_crs','EPSG','2456','EPSG','1867','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2457','JGD2000 / Japan Plane Rectangular CS XV',NULL,'EPSG','4530','EPSG','4612','EPSG','17815',NULL,0); INSERT INTO "usage" VALUES('EPSG','1474','projected_crs','EPSG','2457','EPSG','1868','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2458','JGD2000 / Japan Plane Rectangular CS XVI',NULL,'EPSG','4530','EPSG','4612','EPSG','17816',NULL,0); INSERT INTO "usage" VALUES('EPSG','1475','projected_crs','EPSG','2458','EPSG','1869','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2459','JGD2000 / Japan Plane Rectangular CS XVII',NULL,'EPSG','4530','EPSG','4612','EPSG','17817',NULL,0); INSERT INTO "usage" VALUES('EPSG','1476','projected_crs','EPSG','2459','EPSG','1870','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2460','JGD2000 / Japan Plane Rectangular CS XVIII',NULL,'EPSG','4530','EPSG','4612','EPSG','17818',NULL,0); INSERT INTO "usage" VALUES('EPSG','1477','projected_crs','EPSG','2460','EPSG','1871','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2461','JGD2000 / Japan Plane Rectangular CS XIX',NULL,'EPSG','4530','EPSG','4612','EPSG','17819',NULL,0); INSERT INTO "usage" VALUES('EPSG','1478','projected_crs','EPSG','2461','EPSG','1872','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','2462','Albanian 1987 / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4191','EPSG','16204',NULL,0); INSERT INTO "usage" VALUES('EPSG','1479','projected_crs','EPSG','2462','EPSG','3212','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','2463','Pulkovo 1995 / Gauss-Kruger CM 21E',NULL,'EPSG','4530','EPSG','4200','EPSG','16304',NULL,0); INSERT INTO "usage" VALUES('EPSG','1480','projected_crs','EPSG','2463','EPSG','1763','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2464','Pulkovo 1995 / Gauss-Kruger CM 27E',NULL,'EPSG','4530','EPSG','4200','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1481','projected_crs','EPSG','2464','EPSG','1764','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2465','Pulkovo 1995 / Gauss-Kruger CM 33E',NULL,'EPSG','4530','EPSG','4200','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1482','projected_crs','EPSG','2465','EPSG','1765','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2466','Pulkovo 1995 / Gauss-Kruger CM 39E',NULL,'EPSG','4530','EPSG','4200','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1483','projected_crs','EPSG','2466','EPSG','1766','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2467','Pulkovo 1995 / Gauss-Kruger CM 45E',NULL,'EPSG','4530','EPSG','4200','EPSG','16308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1484','projected_crs','EPSG','2467','EPSG','1767','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2468','Pulkovo 1995 / Gauss-Kruger CM 51E',NULL,'EPSG','4530','EPSG','4200','EPSG','16309',NULL,0); INSERT INTO "usage" VALUES('EPSG','1485','projected_crs','EPSG','2468','EPSG','1768','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2469','Pulkovo 1995 / Gauss-Kruger CM 57E',NULL,'EPSG','4530','EPSG','4200','EPSG','16310',NULL,0); INSERT INTO "usage" VALUES('EPSG','1486','projected_crs','EPSG','2469','EPSG','1769','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2470','Pulkovo 1995 / Gauss-Kruger CM 63E',NULL,'EPSG','4530','EPSG','4200','EPSG','16311',NULL,0); INSERT INTO "usage" VALUES('EPSG','1487','projected_crs','EPSG','2470','EPSG','1770','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2471','Pulkovo 1995 / Gauss-Kruger CM 69E',NULL,'EPSG','4530','EPSG','4200','EPSG','16312',NULL,0); INSERT INTO "usage" VALUES('EPSG','1488','projected_crs','EPSG','2471','EPSG','1771','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2472','Pulkovo 1995 / Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4200','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1489','projected_crs','EPSG','2472','EPSG','1772','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2473','Pulkovo 1995 / Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4200','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1490','projected_crs','EPSG','2473','EPSG','1773','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2474','Pulkovo 1995 / Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4200','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1491','projected_crs','EPSG','2474','EPSG','1774','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2475','Pulkovo 1995 / Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4200','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1492','projected_crs','EPSG','2475','EPSG','1775','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2476','Pulkovo 1995 / Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4200','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1493','projected_crs','EPSG','2476','EPSG','1776','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2477','Pulkovo 1995 / Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4200','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1494','projected_crs','EPSG','2477','EPSG','1777','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2478','Pulkovo 1995 / Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4200','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1495','projected_crs','EPSG','2478','EPSG','1778','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2479','Pulkovo 1995 / Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4200','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1496','projected_crs','EPSG','2479','EPSG','1779','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2480','Pulkovo 1995 / Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4200','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1497','projected_crs','EPSG','2480','EPSG','1780','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2481','Pulkovo 1995 / Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4200','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1498','projected_crs','EPSG','2481','EPSG','1781','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2482','Pulkovo 1995 / Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4200','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1499','projected_crs','EPSG','2482','EPSG','1782','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2483','Pulkovo 1995 / Gauss-Kruger CM 141E',NULL,'EPSG','4530','EPSG','4200','EPSG','16324',NULL,0); INSERT INTO "usage" VALUES('EPSG','1500','projected_crs','EPSG','2483','EPSG','1783','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2484','Pulkovo 1995 / Gauss-Kruger CM 147E',NULL,'EPSG','4530','EPSG','4200','EPSG','16325',NULL,0); INSERT INTO "usage" VALUES('EPSG','1501','projected_crs','EPSG','2484','EPSG','1784','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2485','Pulkovo 1995 / Gauss-Kruger CM 153E',NULL,'EPSG','4530','EPSG','4200','EPSG','16326',NULL,0); INSERT INTO "usage" VALUES('EPSG','1502','projected_crs','EPSG','2485','EPSG','1785','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2486','Pulkovo 1995 / Gauss-Kruger CM 159E',NULL,'EPSG','4530','EPSG','4200','EPSG','16327',NULL,0); INSERT INTO "usage" VALUES('EPSG','1503','projected_crs','EPSG','2486','EPSG','1786','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2487','Pulkovo 1995 / Gauss-Kruger CM 165E',NULL,'EPSG','4530','EPSG','4200','EPSG','16328',NULL,0); INSERT INTO "usage" VALUES('EPSG','1504','projected_crs','EPSG','2487','EPSG','1787','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2488','Pulkovo 1995 / Gauss-Kruger CM 171E',NULL,'EPSG','4530','EPSG','4200','EPSG','16329',NULL,0); INSERT INTO "usage" VALUES('EPSG','1505','projected_crs','EPSG','2488','EPSG','1788','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2489','Pulkovo 1995 / Gauss-Kruger CM 177E',NULL,'EPSG','4530','EPSG','4200','EPSG','16330',NULL,0); INSERT INTO "usage" VALUES('EPSG','1506','projected_crs','EPSG','2489','EPSG','1789','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2490','Pulkovo 1995 / Gauss-Kruger CM 177W',NULL,'EPSG','4530','EPSG','4200','EPSG','16331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1507','projected_crs','EPSG','2490','EPSG','1790','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2491','Pulkovo 1995 / Gauss-Kruger CM 171W',NULL,'EPSG','4530','EPSG','4200','EPSG','16332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1508','projected_crs','EPSG','2491','EPSG','1791','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2492','Pulkovo 1942 / Gauss-Kruger CM 9E',NULL,'EPSG','4530','EPSG','4284','EPSG','16302',NULL,1); INSERT INTO "usage" VALUES('EPSG','1509','projected_crs','EPSG','2492','EPSG','1805','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','2493','Pulkovo 1942 / Gauss-Kruger CM 15E',NULL,'EPSG','4530','EPSG','4284','EPSG','16303',NULL,1); INSERT INTO "usage" VALUES('EPSG','1510','projected_crs','EPSG','2493','EPSG','1792','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','2494','Pulkovo 1942 / Gauss-Kruger CM 21E',NULL,'EPSG','4530','EPSG','4284','EPSG','16304',NULL,0); INSERT INTO "usage" VALUES('EPSG','1511','projected_crs','EPSG','2494','EPSG','1793','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2495','Pulkovo 1942 / Gauss-Kruger CM 27E',NULL,'EPSG','4530','EPSG','4284','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1512','projected_crs','EPSG','2495','EPSG','1794','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2496','Pulkovo 1942 / Gauss-Kruger CM 33E',NULL,'EPSG','4530','EPSG','4284','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1513','projected_crs','EPSG','2496','EPSG','1795','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2497','Pulkovo 1942 / Gauss-Kruger CM 39E',NULL,'EPSG','4530','EPSG','4284','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1514','projected_crs','EPSG','2497','EPSG','1796','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2498','Pulkovo 1942 / Gauss-Kruger CM 45E',NULL,'EPSG','4530','EPSG','4284','EPSG','16308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1515','projected_crs','EPSG','2498','EPSG','1797','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2499','Pulkovo 1942 / Gauss-Kruger CM 51E',NULL,'EPSG','4530','EPSG','4284','EPSG','16309',NULL,0); INSERT INTO "usage" VALUES('EPSG','1516','projected_crs','EPSG','2499','EPSG','1798','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2500','Pulkovo 1942 / Gauss-Kruger CM 57E',NULL,'EPSG','4530','EPSG','4284','EPSG','16310',NULL,0); INSERT INTO "usage" VALUES('EPSG','1517','projected_crs','EPSG','2500','EPSG','1799','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2501','Pulkovo 1942 / Gauss-Kruger CM 63E',NULL,'EPSG','4530','EPSG','4284','EPSG','16311',NULL,0); INSERT INTO "usage" VALUES('EPSG','1518','projected_crs','EPSG','2501','EPSG','1800','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2502','Pulkovo 1942 / Gauss-Kruger CM 69E',NULL,'EPSG','4530','EPSG','4284','EPSG','16312',NULL,0); INSERT INTO "usage" VALUES('EPSG','1519','projected_crs','EPSG','2502','EPSG','1801','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2503','Pulkovo 1942 / Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4284','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1520','projected_crs','EPSG','2503','EPSG','1802','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2504','Pulkovo 1942 / Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4284','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1521','projected_crs','EPSG','2504','EPSG','1803','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2505','Pulkovo 1942 / Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4284','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1522','projected_crs','EPSG','2505','EPSG','1804','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2506','Pulkovo 1942 / Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4284','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1523','projected_crs','EPSG','2506','EPSG','1775','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2507','Pulkovo 1942 / Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4284','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1524','projected_crs','EPSG','2507','EPSG','1776','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2508','Pulkovo 1942 / Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4284','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1525','projected_crs','EPSG','2508','EPSG','1777','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2509','Pulkovo 1942 / Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4284','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1526','projected_crs','EPSG','2509','EPSG','1778','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2510','Pulkovo 1942 / Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4284','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1527','projected_crs','EPSG','2510','EPSG','1779','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2511','Pulkovo 1942 / Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4284','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1528','projected_crs','EPSG','2511','EPSG','1780','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2512','Pulkovo 1942 / Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4284','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1529','projected_crs','EPSG','2512','EPSG','1781','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2513','Pulkovo 1942 / Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4284','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1530','projected_crs','EPSG','2513','EPSG','1782','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2514','Pulkovo 1942 / Gauss-Kruger CM 141E',NULL,'EPSG','4530','EPSG','4284','EPSG','16324',NULL,0); INSERT INTO "usage" VALUES('EPSG','1531','projected_crs','EPSG','2514','EPSG','1783','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2515','Pulkovo 1942 / Gauss-Kruger CM 147E',NULL,'EPSG','4530','EPSG','4284','EPSG','16325',NULL,0); INSERT INTO "usage" VALUES('EPSG','1532','projected_crs','EPSG','2515','EPSG','1784','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2516','Pulkovo 1942 / Gauss-Kruger CM 153E',NULL,'EPSG','4530','EPSG','4284','EPSG','16326',NULL,0); INSERT INTO "usage" VALUES('EPSG','1533','projected_crs','EPSG','2516','EPSG','1785','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2517','Pulkovo 1942 / Gauss-Kruger CM 159E',NULL,'EPSG','4530','EPSG','4284','EPSG','16327',NULL,0); INSERT INTO "usage" VALUES('EPSG','1534','projected_crs','EPSG','2517','EPSG','1786','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2518','Pulkovo 1942 / Gauss-Kruger CM 165E',NULL,'EPSG','4530','EPSG','4284','EPSG','16328',NULL,0); INSERT INTO "usage" VALUES('EPSG','1535','projected_crs','EPSG','2518','EPSG','1787','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2519','Pulkovo 1942 / Gauss-Kruger CM 171E',NULL,'EPSG','4530','EPSG','4284','EPSG','16329',NULL,0); INSERT INTO "usage" VALUES('EPSG','1536','projected_crs','EPSG','2519','EPSG','1788','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2520','Pulkovo 1942 / Gauss-Kruger CM 177E',NULL,'EPSG','4530','EPSG','4284','EPSG','16330',NULL,0); INSERT INTO "usage" VALUES('EPSG','1537','projected_crs','EPSG','2520','EPSG','1789','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2521','Pulkovo 1942 / Gauss-Kruger CM 177W',NULL,'EPSG','4530','EPSG','4284','EPSG','16331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1538','projected_crs','EPSG','2521','EPSG','1790','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2522','Pulkovo 1942 / Gauss-Kruger CM 171W',NULL,'EPSG','4530','EPSG','4284','EPSG','16332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1539','projected_crs','EPSG','2522','EPSG','1791','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2523','Pulkovo 1942 / 3-degree Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','4284','EPSG','16267',NULL,0); INSERT INTO "usage" VALUES('EPSG','1540','projected_crs','EPSG','2523','EPSG','2653','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2524','Pulkovo 1942 / 3-degree Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4284','EPSG','16268',NULL,0); INSERT INTO "usage" VALUES('EPSG','1541','projected_crs','EPSG','2524','EPSG','2654','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2525','Pulkovo 1942 / 3-degree Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','4284','EPSG','16269',NULL,0); INSERT INTO "usage" VALUES('EPSG','1542','projected_crs','EPSG','2525','EPSG','2655','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2526','Pulkovo 1942 / 3-degree Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','4284','EPSG','16270',NULL,0); INSERT INTO "usage" VALUES('EPSG','1543','projected_crs','EPSG','2526','EPSG','2656','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2527','Pulkovo 1942 / 3-degree Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','4284','EPSG','16271',NULL,0); INSERT INTO "usage" VALUES('EPSG','1544','projected_crs','EPSG','2527','EPSG','2657','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2528','Pulkovo 1942 / 3-degree Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','4284','EPSG','16272',NULL,0); INSERT INTO "usage" VALUES('EPSG','1545','projected_crs','EPSG','2528','EPSG','2658','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2529','Pulkovo 1942 / 3-degree Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4284','EPSG','16273',NULL,0); INSERT INTO "usage" VALUES('EPSG','1546','projected_crs','EPSG','2529','EPSG','2659','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2530','Pulkovo 1942 / 3-degree Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4284','EPSG','16274',NULL,0); INSERT INTO "usage" VALUES('EPSG','1547','projected_crs','EPSG','2530','EPSG','2660','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2531','Pulkovo 1942 / 3-degree Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4284','EPSG','16275',NULL,0); INSERT INTO "usage" VALUES('EPSG','1548','projected_crs','EPSG','2531','EPSG','2661','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2532','Pulkovo 1942 / 3-degree Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4284','EPSG','16276',NULL,0); INSERT INTO "usage" VALUES('EPSG','1549','projected_crs','EPSG','2532','EPSG','2662','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2533','Pulkovo 1942 / 3-degree Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4284','EPSG','16277',NULL,0); INSERT INTO "usage" VALUES('EPSG','1550','projected_crs','EPSG','2533','EPSG','2663','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2534','Pulkovo 1942 / 3-degree Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4284','EPSG','16278',NULL,0); INSERT INTO "usage" VALUES('EPSG','1551','projected_crs','EPSG','2534','EPSG','2664','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2535','Pulkovo 1942 / 3-degree Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4284','EPSG','16279',NULL,0); INSERT INTO "usage" VALUES('EPSG','1552','projected_crs','EPSG','2535','EPSG','2665','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2536','Pulkovo 1942 / 3-degree Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4284','EPSG','16280',NULL,0); INSERT INTO "usage" VALUES('EPSG','1553','projected_crs','EPSG','2536','EPSG','2666','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2537','Pulkovo 1942 / 3-degree Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4284','EPSG','16281',NULL,0); INSERT INTO "usage" VALUES('EPSG','1554','projected_crs','EPSG','2537','EPSG','2667','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2538','Pulkovo 1942 / 3-degree Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4284','EPSG','16282',NULL,0); INSERT INTO "usage" VALUES('EPSG','1555','projected_crs','EPSG','2538','EPSG','2668','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2539','Pulkovo 1942 / 3-degree Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4284','EPSG','16283',NULL,0); INSERT INTO "usage" VALUES('EPSG','1556','projected_crs','EPSG','2539','EPSG','2669','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2540','Pulkovo 1942 / 3-degree Gauss-Kruger zone 24',NULL,'EPSG','4530','EPSG','4284','EPSG','16284',NULL,0); INSERT INTO "usage" VALUES('EPSG','1557','projected_crs','EPSG','2540','EPSG','2670','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2541','Pulkovo 1942 / 3-degree Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4284','EPSG','16285',NULL,0); INSERT INTO "usage" VALUES('EPSG','1558','projected_crs','EPSG','2541','EPSG','2671','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2542','Pulkovo 1942 / 3-degree Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4284','EPSG','16286',NULL,0); INSERT INTO "usage" VALUES('EPSG','1559','projected_crs','EPSG','2542','EPSG','2672','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2543','Pulkovo 1942 / 3-degree Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4284','EPSG','16287',NULL,0); INSERT INTO "usage" VALUES('EPSG','1560','projected_crs','EPSG','2543','EPSG','2673','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2544','Pulkovo 1942 / 3-degree Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4284','EPSG','16288',NULL,0); INSERT INTO "usage" VALUES('EPSG','1561','projected_crs','EPSG','2544','EPSG','2674','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2545','Pulkovo 1942 / 3-degree Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4284','EPSG','16289',NULL,0); INSERT INTO "usage" VALUES('EPSG','1562','projected_crs','EPSG','2545','EPSG','2675','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2546','Pulkovo 1942 / 3-degree Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4284','EPSG','16290',NULL,0); INSERT INTO "usage" VALUES('EPSG','1563','projected_crs','EPSG','2546','EPSG','2676','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2547','Pulkovo 1942 / 3-degree Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4284','EPSG','16291',NULL,0); INSERT INTO "usage" VALUES('EPSG','1564','projected_crs','EPSG','2547','EPSG','2677','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2548','Pulkovo 1942 / 3-degree Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4284','EPSG','16292',NULL,0); INSERT INTO "usage" VALUES('EPSG','1565','projected_crs','EPSG','2548','EPSG','2678','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2549','Pulkovo 1942 / 3-degree Gauss-Kruger zone 33',NULL,'EPSG','4530','EPSG','4284','EPSG','16293',NULL,0); INSERT INTO "usage" VALUES('EPSG','1566','projected_crs','EPSG','2549','EPSG','2679','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2550','Samboja / UTM zone 50S',NULL,'EPSG','4400','EPSG','4125','EPSG','16150',NULL,1); INSERT INTO "usage" VALUES('EPSG','1567','projected_crs','EPSG','2550','EPSG','1328','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2551','Pulkovo 1942 / 3-degree Gauss-Kruger zone 34',NULL,'EPSG','4530','EPSG','4284','EPSG','16294',NULL,0); INSERT INTO "usage" VALUES('EPSG','1568','projected_crs','EPSG','2551','EPSG','2680','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2552','Pulkovo 1942 / 3-degree Gauss-Kruger zone 35',NULL,'EPSG','4530','EPSG','4284','EPSG','16295',NULL,0); INSERT INTO "usage" VALUES('EPSG','1569','projected_crs','EPSG','2552','EPSG','2681','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2553','Pulkovo 1942 / 3-degree Gauss-Kruger zone 36',NULL,'EPSG','4530','EPSG','4284','EPSG','16296',NULL,0); INSERT INTO "usage" VALUES('EPSG','1570','projected_crs','EPSG','2553','EPSG','2682','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2554','Pulkovo 1942 / 3-degree Gauss-Kruger zone 37',NULL,'EPSG','4530','EPSG','4284','EPSG','16297',NULL,0); INSERT INTO "usage" VALUES('EPSG','1571','projected_crs','EPSG','2554','EPSG','2683','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2555','Pulkovo 1942 / 3-degree Gauss-Kruger zone 38',NULL,'EPSG','4530','EPSG','4284','EPSG','16298',NULL,0); INSERT INTO "usage" VALUES('EPSG','1572','projected_crs','EPSG','2555','EPSG','2684','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2556','Pulkovo 1942 / 3-degree Gauss-Kruger zone 39',NULL,'EPSG','4530','EPSG','4284','EPSG','16299',NULL,0); INSERT INTO "usage" VALUES('EPSG','1573','projected_crs','EPSG','2556','EPSG','2685','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2557','Pulkovo 1942 / 3-degree Gauss-Kruger zone 40',NULL,'EPSG','4530','EPSG','4284','EPSG','16070',NULL,0); INSERT INTO "usage" VALUES('EPSG','1574','projected_crs','EPSG','2557','EPSG','2686','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2558','Pulkovo 1942 / 3-degree Gauss-Kruger zone 41',NULL,'EPSG','4530','EPSG','4284','EPSG','16071',NULL,0); INSERT INTO "usage" VALUES('EPSG','1575','projected_crs','EPSG','2558','EPSG','2687','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2559','Pulkovo 1942 / 3-degree Gauss-Kruger zone 42',NULL,'EPSG','4530','EPSG','4284','EPSG','16072',NULL,0); INSERT INTO "usage" VALUES('EPSG','1576','projected_crs','EPSG','2559','EPSG','2688','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2560','Pulkovo 1942 / 3-degree Gauss-Kruger zone 43',NULL,'EPSG','4530','EPSG','4284','EPSG','16073',NULL,0); INSERT INTO "usage" VALUES('EPSG','1577','projected_crs','EPSG','2560','EPSG','2689','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2561','Pulkovo 1942 / 3-degree Gauss-Kruger zone 44',NULL,'EPSG','4530','EPSG','4284','EPSG','16074',NULL,0); INSERT INTO "usage" VALUES('EPSG','1578','projected_crs','EPSG','2561','EPSG','2690','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2562','Pulkovo 1942 / 3-degree Gauss-Kruger zone 45',NULL,'EPSG','4530','EPSG','4284','EPSG','16075',NULL,0); INSERT INTO "usage" VALUES('EPSG','1579','projected_crs','EPSG','2562','EPSG','2691','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2563','Pulkovo 1942 / 3-degree Gauss-Kruger zone 46',NULL,'EPSG','4530','EPSG','4284','EPSG','16076',NULL,0); INSERT INTO "usage" VALUES('EPSG','1580','projected_crs','EPSG','2563','EPSG','2692','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2564','Pulkovo 1942 / 3-degree Gauss-Kruger zone 47',NULL,'EPSG','4530','EPSG','4284','EPSG','16077',NULL,0); INSERT INTO "usage" VALUES('EPSG','1581','projected_crs','EPSG','2564','EPSG','2693','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2565','Pulkovo 1942 / 3-degree Gauss-Kruger zone 48',NULL,'EPSG','4530','EPSG','4284','EPSG','16078',NULL,0); INSERT INTO "usage" VALUES('EPSG','1582','projected_crs','EPSG','2565','EPSG','2694','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2566','Pulkovo 1942 / 3-degree Gauss-Kruger zone 49',NULL,'EPSG','4530','EPSG','4284','EPSG','16079',NULL,0); INSERT INTO "usage" VALUES('EPSG','1583','projected_crs','EPSG','2566','EPSG','2695','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2567','Pulkovo 1942 / 3-degree Gauss-Kruger zone 50',NULL,'EPSG','4530','EPSG','4284','EPSG','16080',NULL,0); INSERT INTO "usage" VALUES('EPSG','1584','projected_crs','EPSG','2567','EPSG','2696','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2568','Pulkovo 1942 / 3-degree Gauss-Kruger zone 51',NULL,'EPSG','4530','EPSG','4284','EPSG','16081',NULL,0); INSERT INTO "usage" VALUES('EPSG','1585','projected_crs','EPSG','2568','EPSG','2697','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2569','Pulkovo 1942 / 3-degree Gauss-Kruger zone 52',NULL,'EPSG','4530','EPSG','4284','EPSG','16082',NULL,0); INSERT INTO "usage" VALUES('EPSG','1586','projected_crs','EPSG','2569','EPSG','2698','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2570','Pulkovo 1942 / 3-degree Gauss-Kruger zone 53',NULL,'EPSG','4530','EPSG','4284','EPSG','16083',NULL,0); INSERT INTO "usage" VALUES('EPSG','1587','projected_crs','EPSG','2570','EPSG','2699','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2571','Pulkovo 1942 / 3-degree Gauss-Kruger zone 54',NULL,'EPSG','4530','EPSG','4284','EPSG','16084',NULL,0); INSERT INTO "usage" VALUES('EPSG','1588','projected_crs','EPSG','2571','EPSG','2700','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2572','Pulkovo 1942 / 3-degree Gauss-Kruger zone 55',NULL,'EPSG','4530','EPSG','4284','EPSG','16085',NULL,0); INSERT INTO "usage" VALUES('EPSG','1589','projected_crs','EPSG','2572','EPSG','2701','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2573','Pulkovo 1942 / 3-degree Gauss-Kruger zone 56',NULL,'EPSG','4530','EPSG','4284','EPSG','16086',NULL,0); INSERT INTO "usage" VALUES('EPSG','1590','projected_crs','EPSG','2573','EPSG','2702','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2574','Pulkovo 1942 / 3-degree Gauss-Kruger zone 57',NULL,'EPSG','4530','EPSG','4284','EPSG','16087',NULL,0); INSERT INTO "usage" VALUES('EPSG','1591','projected_crs','EPSG','2574','EPSG','2703','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2575','Pulkovo 1942 / 3-degree Gauss-Kruger zone 58',NULL,'EPSG','4530','EPSG','4284','EPSG','16088',NULL,0); INSERT INTO "usage" VALUES('EPSG','1592','projected_crs','EPSG','2575','EPSG','2704','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2576','Pulkovo 1942 / 3-degree Gauss-Kruger zone 59',NULL,'EPSG','4530','EPSG','4284','EPSG','16089',NULL,0); INSERT INTO "usage" VALUES('EPSG','1593','projected_crs','EPSG','2576','EPSG','2705','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2577','Pulkovo 1942 / 3-degree Gauss-Kruger zone 60',NULL,'EPSG','4530','EPSG','4284','EPSG','16090',NULL,1); INSERT INTO "usage" VALUES('EPSG','1594','projected_crs','EPSG','2577','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2578','Pulkovo 1942 / 3-degree Gauss-Kruger zone 61',NULL,'EPSG','4530','EPSG','4284','EPSG','16091',NULL,0); INSERT INTO "usage" VALUES('EPSG','1595','projected_crs','EPSG','2578','EPSG','2707','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2579','Pulkovo 1942 / 3-degree Gauss-Kruger zone 62',NULL,'EPSG','4530','EPSG','4284','EPSG','16092',NULL,0); INSERT INTO "usage" VALUES('EPSG','1596','projected_crs','EPSG','2579','EPSG','2708','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2580','Pulkovo 1942 / 3-degree Gauss-Kruger zone 63',NULL,'EPSG','4530','EPSG','4284','EPSG','16093',NULL,0); INSERT INTO "usage" VALUES('EPSG','1597','projected_crs','EPSG','2580','EPSG','2709','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2581','Pulkovo 1942 / 3-degree Gauss-Kruger zone 64',NULL,'EPSG','4530','EPSG','4284','EPSG','16094',NULL,0); INSERT INTO "usage" VALUES('EPSG','1598','projected_crs','EPSG','2581','EPSG','2710','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2582','Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E',NULL,'EPSG','4530','EPSG','4284','EPSG','16304',NULL,0); INSERT INTO "usage" VALUES('EPSG','1599','projected_crs','EPSG','2582','EPSG','2653','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2583','Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E',NULL,'EPSG','4530','EPSG','4284','EPSG','16368',NULL,0); INSERT INTO "usage" VALUES('EPSG','1600','projected_crs','EPSG','2583','EPSG','2654','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2584','Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E',NULL,'EPSG','4530','EPSG','4284','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1601','projected_crs','EPSG','2584','EPSG','2655','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2585','Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E',NULL,'EPSG','4530','EPSG','4284','EPSG','16370',NULL,0); INSERT INTO "usage" VALUES('EPSG','1602','projected_crs','EPSG','2585','EPSG','2656','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2586','Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E',NULL,'EPSG','4530','EPSG','4284','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1603','projected_crs','EPSG','2586','EPSG','2657','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2587','Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E',NULL,'EPSG','4530','EPSG','4284','EPSG','16372',NULL,0); INSERT INTO "usage" VALUES('EPSG','1604','projected_crs','EPSG','2587','EPSG','2658','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2588','Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E',NULL,'EPSG','4530','EPSG','4284','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1605','projected_crs','EPSG','2588','EPSG','2659','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2589','Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E',NULL,'EPSG','4530','EPSG','4284','EPSG','16374',NULL,0); INSERT INTO "usage" VALUES('EPSG','1606','projected_crs','EPSG','2589','EPSG','2660','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2590','Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E',NULL,'EPSG','4530','EPSG','4284','EPSG','16308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1607','projected_crs','EPSG','2590','EPSG','2661','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2591','Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E',NULL,'EPSG','4530','EPSG','4284','EPSG','16376',NULL,0); INSERT INTO "usage" VALUES('EPSG','1608','projected_crs','EPSG','2591','EPSG','2662','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2592','Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E',NULL,'EPSG','4530','EPSG','4284','EPSG','16309',NULL,0); INSERT INTO "usage" VALUES('EPSG','1609','projected_crs','EPSG','2592','EPSG','2663','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2593','Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E',NULL,'EPSG','4530','EPSG','4284','EPSG','16378',NULL,0); INSERT INTO "usage" VALUES('EPSG','1610','projected_crs','EPSG','2593','EPSG','2664','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2594','Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E',NULL,'EPSG','4530','EPSG','4284','EPSG','16310',NULL,0); INSERT INTO "usage" VALUES('EPSG','1611','projected_crs','EPSG','2594','EPSG','2665','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2595','Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E',NULL,'EPSG','4530','EPSG','4284','EPSG','16380',NULL,0); INSERT INTO "usage" VALUES('EPSG','1612','projected_crs','EPSG','2595','EPSG','2666','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2596','Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E',NULL,'EPSG','4530','EPSG','4284','EPSG','16311',NULL,0); INSERT INTO "usage" VALUES('EPSG','1613','projected_crs','EPSG','2596','EPSG','2667','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2597','Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E',NULL,'EPSG','4530','EPSG','4284','EPSG','16382',NULL,0); INSERT INTO "usage" VALUES('EPSG','1614','projected_crs','EPSG','2597','EPSG','2668','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2598','Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E',NULL,'EPSG','4530','EPSG','4284','EPSG','16312',NULL,0); INSERT INTO "usage" VALUES('EPSG','1615','projected_crs','EPSG','2598','EPSG','2669','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2599','Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E',NULL,'EPSG','4530','EPSG','4284','EPSG','16384',NULL,0); INSERT INTO "usage" VALUES('EPSG','1616','projected_crs','EPSG','2599','EPSG','2670','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2600','Lietuvos Koordinoei Sistema 1994',NULL,'EPSG','4530','EPSG','4669','EPSG','19934',NULL,1); INSERT INTO "usage" VALUES('EPSG','1617','projected_crs','EPSG','2600','EPSG','1145','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2601','Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4284','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1618','projected_crs','EPSG','2601','EPSG','2671','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2602','Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E',NULL,'EPSG','4530','EPSG','4284','EPSG','16386',NULL,0); INSERT INTO "usage" VALUES('EPSG','1619','projected_crs','EPSG','2602','EPSG','2672','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2603','Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4284','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1620','projected_crs','EPSG','2603','EPSG','2673','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2604','Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E',NULL,'EPSG','4530','EPSG','4284','EPSG','16388',NULL,0); INSERT INTO "usage" VALUES('EPSG','1621','projected_crs','EPSG','2604','EPSG','2674','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2605','Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4284','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1622','projected_crs','EPSG','2605','EPSG','2675','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2606','Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E',NULL,'EPSG','4530','EPSG','4284','EPSG','16390',NULL,0); INSERT INTO "usage" VALUES('EPSG','1623','projected_crs','EPSG','2606','EPSG','2676','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2607','Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4284','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1624','projected_crs','EPSG','2607','EPSG','2677','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2608','Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E',NULL,'EPSG','4530','EPSG','4284','EPSG','16392',NULL,0); INSERT INTO "usage" VALUES('EPSG','1625','projected_crs','EPSG','2608','EPSG','2678','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2609','Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4284','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1626','projected_crs','EPSG','2609','EPSG','2679','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2610','Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E',NULL,'EPSG','4530','EPSG','4284','EPSG','16394',NULL,0); INSERT INTO "usage" VALUES('EPSG','1627','projected_crs','EPSG','2610','EPSG','2680','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2611','Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4284','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1628','projected_crs','EPSG','2611','EPSG','2681','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2612','Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E',NULL,'EPSG','4530','EPSG','4284','EPSG','16396',NULL,0); INSERT INTO "usage" VALUES('EPSG','1629','projected_crs','EPSG','2612','EPSG','2682','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2613','Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4284','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1630','projected_crs','EPSG','2613','EPSG','2683','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2614','Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E',NULL,'EPSG','4530','EPSG','4284','EPSG','16398',NULL,0); INSERT INTO "usage" VALUES('EPSG','1631','projected_crs','EPSG','2614','EPSG','2684','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2615','Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4284','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1632','projected_crs','EPSG','2615','EPSG','2685','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2616','Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E',NULL,'EPSG','4530','EPSG','4284','EPSG','16170',NULL,0); INSERT INTO "usage" VALUES('EPSG','1633','projected_crs','EPSG','2616','EPSG','2686','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2617','Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4284','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1634','projected_crs','EPSG','2617','EPSG','2687','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2618','Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E',NULL,'EPSG','4530','EPSG','4284','EPSG','16172',NULL,0); INSERT INTO "usage" VALUES('EPSG','1635','projected_crs','EPSG','2618','EPSG','2688','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2619','Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4284','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1636','projected_crs','EPSG','2619','EPSG','2689','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2620','Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E',NULL,'EPSG','4530','EPSG','4284','EPSG','16174',NULL,0); INSERT INTO "usage" VALUES('EPSG','1637','projected_crs','EPSG','2620','EPSG','2690','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2621','Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4284','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1638','projected_crs','EPSG','2621','EPSG','2691','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2622','Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E',NULL,'EPSG','4530','EPSG','4284','EPSG','16176',NULL,0); INSERT INTO "usage" VALUES('EPSG','1639','projected_crs','EPSG','2622','EPSG','2692','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2623','Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E',NULL,'EPSG','4530','EPSG','4284','EPSG','16324',NULL,0); INSERT INTO "usage" VALUES('EPSG','1640','projected_crs','EPSG','2623','EPSG','2693','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2624','Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E',NULL,'EPSG','4530','EPSG','4284','EPSG','16178',NULL,0); INSERT INTO "usage" VALUES('EPSG','1641','projected_crs','EPSG','2624','EPSG','2694','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2625','Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E',NULL,'EPSG','4530','EPSG','4284','EPSG','16325',NULL,0); INSERT INTO "usage" VALUES('EPSG','1642','projected_crs','EPSG','2625','EPSG','2695','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2626','Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E',NULL,'EPSG','4530','EPSG','4284','EPSG','16180',NULL,0); INSERT INTO "usage" VALUES('EPSG','1643','projected_crs','EPSG','2626','EPSG','2696','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2627','Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E',NULL,'EPSG','4530','EPSG','4284','EPSG','16326',NULL,0); INSERT INTO "usage" VALUES('EPSG','1644','projected_crs','EPSG','2627','EPSG','2697','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2628','Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E',NULL,'EPSG','4530','EPSG','4284','EPSG','16182',NULL,0); INSERT INTO "usage" VALUES('EPSG','1645','projected_crs','EPSG','2628','EPSG','2698','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2629','Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E',NULL,'EPSG','4530','EPSG','4284','EPSG','16327',NULL,0); INSERT INTO "usage" VALUES('EPSG','1646','projected_crs','EPSG','2629','EPSG','2699','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2630','Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E',NULL,'EPSG','4530','EPSG','4284','EPSG','16184',NULL,0); INSERT INTO "usage" VALUES('EPSG','1647','projected_crs','EPSG','2630','EPSG','2700','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2631','Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E',NULL,'EPSG','4530','EPSG','4284','EPSG','16328',NULL,0); INSERT INTO "usage" VALUES('EPSG','1648','projected_crs','EPSG','2631','EPSG','2701','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2632','Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E',NULL,'EPSG','4530','EPSG','4284','EPSG','16186',NULL,0); INSERT INTO "usage" VALUES('EPSG','1649','projected_crs','EPSG','2632','EPSG','2702','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2633','Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E',NULL,'EPSG','4530','EPSG','4284','EPSG','16329',NULL,0); INSERT INTO "usage" VALUES('EPSG','1650','projected_crs','EPSG','2633','EPSG','2703','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2634','Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E',NULL,'EPSG','4530','EPSG','4284','EPSG','16188',NULL,0); INSERT INTO "usage" VALUES('EPSG','1651','projected_crs','EPSG','2634','EPSG','2704','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2635','Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E',NULL,'EPSG','4530','EPSG','4284','EPSG','16330',NULL,0); INSERT INTO "usage" VALUES('EPSG','1652','projected_crs','EPSG','2635','EPSG','2705','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2636','Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E',NULL,'EPSG','4530','EPSG','4284','EPSG','16190',NULL,0); INSERT INTO "usage" VALUES('EPSG','1653','projected_crs','EPSG','2636','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2637','Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W',NULL,'EPSG','4530','EPSG','4284','EPSG','16331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1654','projected_crs','EPSG','2637','EPSG','2707','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2638','Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W',NULL,'EPSG','4530','EPSG','4284','EPSG','16192',NULL,0); INSERT INTO "usage" VALUES('EPSG','1655','projected_crs','EPSG','2638','EPSG','2708','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2639','Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W',NULL,'EPSG','4530','EPSG','4284','EPSG','16332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1656','projected_crs','EPSG','2639','EPSG','2709','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2640','Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W',NULL,'EPSG','4530','EPSG','4284','EPSG','16194',NULL,0); INSERT INTO "usage" VALUES('EPSG','1657','projected_crs','EPSG','2640','EPSG','2710','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2641','Pulkovo 1995 / 3-degree Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','4200','EPSG','16267',NULL,0); INSERT INTO "usage" VALUES('EPSG','1658','projected_crs','EPSG','2641','EPSG','2747','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2642','Pulkovo 1995 / 3-degree Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4200','EPSG','16268',NULL,0); INSERT INTO "usage" VALUES('EPSG','1659','projected_crs','EPSG','2642','EPSG','2748','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2643','Pulkovo 1995 / 3-degree Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','4200','EPSG','16269',NULL,0); INSERT INTO "usage" VALUES('EPSG','1660','projected_crs','EPSG','2643','EPSG','2749','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2644','Pulkovo 1995 / 3-degree Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','4200','EPSG','16270',NULL,0); INSERT INTO "usage" VALUES('EPSG','1661','projected_crs','EPSG','2644','EPSG','2750','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2645','Pulkovo 1995 / 3-degree Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','4200','EPSG','16271',NULL,0); INSERT INTO "usage" VALUES('EPSG','1662','projected_crs','EPSG','2645','EPSG','2751','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2646','Pulkovo 1995 / 3-degree Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','4200','EPSG','16272',NULL,0); INSERT INTO "usage" VALUES('EPSG','1663','projected_crs','EPSG','2646','EPSG','2752','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2647','Pulkovo 1995 / 3-degree Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4200','EPSG','16273',NULL,0); INSERT INTO "usage" VALUES('EPSG','1664','projected_crs','EPSG','2647','EPSG','2753','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2648','Pulkovo 1995 / 3-degree Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4200','EPSG','16274',NULL,0); INSERT INTO "usage" VALUES('EPSG','1665','projected_crs','EPSG','2648','EPSG','2754','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2649','Pulkovo 1995 / 3-degree Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4200','EPSG','16275',NULL,0); INSERT INTO "usage" VALUES('EPSG','1666','projected_crs','EPSG','2649','EPSG','2755','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2650','Pulkovo 1995 / 3-degree Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4200','EPSG','16276',NULL,0); INSERT INTO "usage" VALUES('EPSG','1667','projected_crs','EPSG','2650','EPSG','2756','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2651','Pulkovo 1995 / 3-degree Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4200','EPSG','16277',NULL,0); INSERT INTO "usage" VALUES('EPSG','1668','projected_crs','EPSG','2651','EPSG','2757','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2652','Pulkovo 1995 / 3-degree Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4200','EPSG','16278',NULL,0); INSERT INTO "usage" VALUES('EPSG','1669','projected_crs','EPSG','2652','EPSG','2758','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2653','Pulkovo 1995 / 3-degree Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4200','EPSG','16279',NULL,0); INSERT INTO "usage" VALUES('EPSG','1670','projected_crs','EPSG','2653','EPSG','2759','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2654','Pulkovo 1995 / 3-degree Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4200','EPSG','16280',NULL,0); INSERT INTO "usage" VALUES('EPSG','1671','projected_crs','EPSG','2654','EPSG','2760','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2655','Pulkovo 1995 / 3-degree Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4200','EPSG','16281',NULL,0); INSERT INTO "usage" VALUES('EPSG','1672','projected_crs','EPSG','2655','EPSG','2761','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2656','Pulkovo 1995 / 3-degree Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4200','EPSG','16282',NULL,0); INSERT INTO "usage" VALUES('EPSG','1673','projected_crs','EPSG','2656','EPSG','2762','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2657','Pulkovo 1995 / 3-degree Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4200','EPSG','16283',NULL,0); INSERT INTO "usage" VALUES('EPSG','1674','projected_crs','EPSG','2657','EPSG','2763','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2658','Pulkovo 1995 / 3-degree Gauss-Kruger zone 24',NULL,'EPSG','4530','EPSG','4200','EPSG','16284',NULL,0); INSERT INTO "usage" VALUES('EPSG','1675','projected_crs','EPSG','2658','EPSG','2764','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2659','Pulkovo 1995 / 3-degree Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4200','EPSG','16285',NULL,0); INSERT INTO "usage" VALUES('EPSG','1676','projected_crs','EPSG','2659','EPSG','2765','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2660','Pulkovo 1995 / 3-degree Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4200','EPSG','16286',NULL,0); INSERT INTO "usage" VALUES('EPSG','1677','projected_crs','EPSG','2660','EPSG','2766','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2661','Pulkovo 1995 / 3-degree Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4200','EPSG','16287',NULL,0); INSERT INTO "usage" VALUES('EPSG','1678','projected_crs','EPSG','2661','EPSG','2767','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2662','Pulkovo 1995 / 3-degree Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4200','EPSG','16288',NULL,0); INSERT INTO "usage" VALUES('EPSG','1679','projected_crs','EPSG','2662','EPSG','2768','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2663','Pulkovo 1995 / 3-degree Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4200','EPSG','16289',NULL,0); INSERT INTO "usage" VALUES('EPSG','1680','projected_crs','EPSG','2663','EPSG','2769','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2664','Pulkovo 1995 / 3-degree Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4200','EPSG','16290',NULL,0); INSERT INTO "usage" VALUES('EPSG','1681','projected_crs','EPSG','2664','EPSG','2676','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2665','Pulkovo 1995 / 3-degree Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4200','EPSG','16291',NULL,0); INSERT INTO "usage" VALUES('EPSG','1682','projected_crs','EPSG','2665','EPSG','2677','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2666','Pulkovo 1995 / 3-degree Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4200','EPSG','16292',NULL,0); INSERT INTO "usage" VALUES('EPSG','1683','projected_crs','EPSG','2666','EPSG','2678','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2667','Pulkovo 1995 / 3-degree Gauss-Kruger zone 33',NULL,'EPSG','4530','EPSG','4200','EPSG','16293',NULL,0); INSERT INTO "usage" VALUES('EPSG','1684','projected_crs','EPSG','2667','EPSG','2679','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2668','Pulkovo 1995 / 3-degree Gauss-Kruger zone 34',NULL,'EPSG','4530','EPSG','4200','EPSG','16294',NULL,0); INSERT INTO "usage" VALUES('EPSG','1685','projected_crs','EPSG','2668','EPSG','2680','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2669','Pulkovo 1995 / 3-degree Gauss-Kruger zone 35',NULL,'EPSG','4530','EPSG','4200','EPSG','16295',NULL,0); INSERT INTO "usage" VALUES('EPSG','1686','projected_crs','EPSG','2669','EPSG','2681','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2670','Pulkovo 1995 / 3-degree Gauss-Kruger zone 36',NULL,'EPSG','4530','EPSG','4200','EPSG','16296',NULL,0); INSERT INTO "usage" VALUES('EPSG','1687','projected_crs','EPSG','2670','EPSG','2682','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2671','Pulkovo 1995 / 3-degree Gauss-Kruger zone 37',NULL,'EPSG','4530','EPSG','4200','EPSG','16297',NULL,0); INSERT INTO "usage" VALUES('EPSG','1688','projected_crs','EPSG','2671','EPSG','2683','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2672','Pulkovo 1995 / 3-degree Gauss-Kruger zone 38',NULL,'EPSG','4530','EPSG','4200','EPSG','16298',NULL,0); INSERT INTO "usage" VALUES('EPSG','1689','projected_crs','EPSG','2672','EPSG','2684','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2673','Pulkovo 1995 / 3-degree Gauss-Kruger zone 39',NULL,'EPSG','4530','EPSG','4200','EPSG','16299',NULL,0); INSERT INTO "usage" VALUES('EPSG','1690','projected_crs','EPSG','2673','EPSG','2685','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2674','Pulkovo 1995 / 3-degree Gauss-Kruger zone 40',NULL,'EPSG','4530','EPSG','4200','EPSG','16070',NULL,0); INSERT INTO "usage" VALUES('EPSG','1691','projected_crs','EPSG','2674','EPSG','2686','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2675','Pulkovo 1995 / 3-degree Gauss-Kruger zone 41',NULL,'EPSG','4530','EPSG','4200','EPSG','16071',NULL,0); INSERT INTO "usage" VALUES('EPSG','1692','projected_crs','EPSG','2675','EPSG','2687','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2676','Pulkovo 1995 / 3-degree Gauss-Kruger zone 42',NULL,'EPSG','4530','EPSG','4200','EPSG','16072',NULL,0); INSERT INTO "usage" VALUES('EPSG','1693','projected_crs','EPSG','2676','EPSG','2688','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2677','Pulkovo 1995 / 3-degree Gauss-Kruger zone 43',NULL,'EPSG','4530','EPSG','4200','EPSG','16073',NULL,0); INSERT INTO "usage" VALUES('EPSG','1694','projected_crs','EPSG','2677','EPSG','2689','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2678','Pulkovo 1995 / 3-degree Gauss-Kruger zone 44',NULL,'EPSG','4530','EPSG','4200','EPSG','16074',NULL,0); INSERT INTO "usage" VALUES('EPSG','1695','projected_crs','EPSG','2678','EPSG','2690','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2679','Pulkovo 1995 / 3-degree Gauss-Kruger zone 45',NULL,'EPSG','4530','EPSG','4200','EPSG','16075',NULL,0); INSERT INTO "usage" VALUES('EPSG','1696','projected_crs','EPSG','2679','EPSG','2691','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2680','Pulkovo 1995 / 3-degree Gauss-Kruger zone 46',NULL,'EPSG','4530','EPSG','4200','EPSG','16076',NULL,0); INSERT INTO "usage" VALUES('EPSG','1697','projected_crs','EPSG','2680','EPSG','2692','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2681','Pulkovo 1995 / 3-degree Gauss-Kruger zone 47',NULL,'EPSG','4530','EPSG','4200','EPSG','16077',NULL,0); INSERT INTO "usage" VALUES('EPSG','1698','projected_crs','EPSG','2681','EPSG','2693','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2682','Pulkovo 1995 / 3-degree Gauss-Kruger zone 48',NULL,'EPSG','4530','EPSG','4200','EPSG','16078',NULL,0); INSERT INTO "usage" VALUES('EPSG','1699','projected_crs','EPSG','2682','EPSG','2694','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2683','Pulkovo 1995 / 3-degree Gauss-Kruger zone 49',NULL,'EPSG','4530','EPSG','4200','EPSG','16079',NULL,0); INSERT INTO "usage" VALUES('EPSG','1700','projected_crs','EPSG','2683','EPSG','2695','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2684','Pulkovo 1995 / 3-degree Gauss-Kruger zone 50',NULL,'EPSG','4530','EPSG','4200','EPSG','16080',NULL,0); INSERT INTO "usage" VALUES('EPSG','1701','projected_crs','EPSG','2684','EPSG','2696','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2685','Pulkovo 1995 / 3-degree Gauss-Kruger zone 51',NULL,'EPSG','4530','EPSG','4200','EPSG','16081',NULL,0); INSERT INTO "usage" VALUES('EPSG','1702','projected_crs','EPSG','2685','EPSG','2697','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2686','Pulkovo 1995 / 3-degree Gauss-Kruger zone 52',NULL,'EPSG','4530','EPSG','4200','EPSG','16082',NULL,0); INSERT INTO "usage" VALUES('EPSG','1703','projected_crs','EPSG','2686','EPSG','2698','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2687','Pulkovo 1995 / 3-degree Gauss-Kruger zone 53',NULL,'EPSG','4530','EPSG','4200','EPSG','16083',NULL,0); INSERT INTO "usage" VALUES('EPSG','1704','projected_crs','EPSG','2687','EPSG','2699','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2688','Pulkovo 1995 / 3-degree Gauss-Kruger zone 54',NULL,'EPSG','4530','EPSG','4200','EPSG','16084',NULL,0); INSERT INTO "usage" VALUES('EPSG','1705','projected_crs','EPSG','2688','EPSG','2700','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2689','Pulkovo 1995 / 3-degree Gauss-Kruger zone 55',NULL,'EPSG','4530','EPSG','4200','EPSG','16085',NULL,0); INSERT INTO "usage" VALUES('EPSG','1706','projected_crs','EPSG','2689','EPSG','2701','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2690','Pulkovo 1995 / 3-degree Gauss-Kruger zone 56',NULL,'EPSG','4530','EPSG','4200','EPSG','16086',NULL,0); INSERT INTO "usage" VALUES('EPSG','1707','projected_crs','EPSG','2690','EPSG','2702','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2691','Pulkovo 1995 / 3-degree Gauss-Kruger zone 57',NULL,'EPSG','4530','EPSG','4200','EPSG','16087',NULL,0); INSERT INTO "usage" VALUES('EPSG','1708','projected_crs','EPSG','2691','EPSG','2703','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2692','Pulkovo 1995 / 3-degree Gauss-Kruger zone 58',NULL,'EPSG','4530','EPSG','4200','EPSG','16088',NULL,0); INSERT INTO "usage" VALUES('EPSG','1709','projected_crs','EPSG','2692','EPSG','2704','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2693','Pulkovo 1995 / 3-degree Gauss-Kruger zone 59',NULL,'EPSG','4530','EPSG','4200','EPSG','16089',NULL,0); INSERT INTO "usage" VALUES('EPSG','1710','projected_crs','EPSG','2693','EPSG','2705','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2694','Pulkovo 1995 / 3-degree Gauss-Kruger zone 60',NULL,'EPSG','4530','EPSG','4200','EPSG','16090',NULL,1); INSERT INTO "usage" VALUES('EPSG','1711','projected_crs','EPSG','2694','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2695','Pulkovo 1995 / 3-degree Gauss-Kruger zone 61',NULL,'EPSG','4530','EPSG','4200','EPSG','16091',NULL,0); INSERT INTO "usage" VALUES('EPSG','1712','projected_crs','EPSG','2695','EPSG','2707','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2696','Pulkovo 1995 / 3-degree Gauss-Kruger zone 62',NULL,'EPSG','4530','EPSG','4200','EPSG','16092',NULL,0); INSERT INTO "usage" VALUES('EPSG','1713','projected_crs','EPSG','2696','EPSG','2708','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2697','Pulkovo 1995 / 3-degree Gauss-Kruger zone 63',NULL,'EPSG','4530','EPSG','4200','EPSG','16093',NULL,0); INSERT INTO "usage" VALUES('EPSG','1714','projected_crs','EPSG','2697','EPSG','2709','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2698','Pulkovo 1995 / 3-degree Gauss-Kruger zone 64',NULL,'EPSG','4530','EPSG','4200','EPSG','16094',NULL,0); INSERT INTO "usage" VALUES('EPSG','1715','projected_crs','EPSG','2698','EPSG','2710','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2699','Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E',NULL,'EPSG','4530','EPSG','4200','EPSG','16304',NULL,0); INSERT INTO "usage" VALUES('EPSG','1716','projected_crs','EPSG','2699','EPSG','2747','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2700','Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E',NULL,'EPSG','4530','EPSG','4200','EPSG','16368',NULL,0); INSERT INTO "usage" VALUES('EPSG','1717','projected_crs','EPSG','2700','EPSG','2748','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2701','Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E',NULL,'EPSG','4530','EPSG','4200','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1718','projected_crs','EPSG','2701','EPSG','2749','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2702','Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E',NULL,'EPSG','4530','EPSG','4200','EPSG','16370',NULL,0); INSERT INTO "usage" VALUES('EPSG','1719','projected_crs','EPSG','2702','EPSG','2750','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2703','Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E',NULL,'EPSG','4530','EPSG','4200','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1720','projected_crs','EPSG','2703','EPSG','2751','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2704','Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E',NULL,'EPSG','4530','EPSG','4200','EPSG','16372',NULL,0); INSERT INTO "usage" VALUES('EPSG','1721','projected_crs','EPSG','2704','EPSG','2752','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2705','Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E',NULL,'EPSG','4530','EPSG','4200','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1722','projected_crs','EPSG','2705','EPSG','2753','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2706','Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E',NULL,'EPSG','4530','EPSG','4200','EPSG','16374',NULL,0); INSERT INTO "usage" VALUES('EPSG','1723','projected_crs','EPSG','2706','EPSG','2754','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2707','Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E',NULL,'EPSG','4530','EPSG','4200','EPSG','16308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1724','projected_crs','EPSG','2707','EPSG','2755','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2708','Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E',NULL,'EPSG','4530','EPSG','4200','EPSG','16376',NULL,0); INSERT INTO "usage" VALUES('EPSG','1725','projected_crs','EPSG','2708','EPSG','2756','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2709','Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E',NULL,'EPSG','4530','EPSG','4200','EPSG','16309',NULL,0); INSERT INTO "usage" VALUES('EPSG','1726','projected_crs','EPSG','2709','EPSG','2757','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2710','Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E',NULL,'EPSG','4530','EPSG','4200','EPSG','16378',NULL,0); INSERT INTO "usage" VALUES('EPSG','1727','projected_crs','EPSG','2710','EPSG','2758','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2711','Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E',NULL,'EPSG','4530','EPSG','4200','EPSG','16310',NULL,0); INSERT INTO "usage" VALUES('EPSG','1728','projected_crs','EPSG','2711','EPSG','2759','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2712','Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E',NULL,'EPSG','4530','EPSG','4200','EPSG','16380',NULL,0); INSERT INTO "usage" VALUES('EPSG','1729','projected_crs','EPSG','2712','EPSG','2760','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2713','Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E',NULL,'EPSG','4530','EPSG','4200','EPSG','16311',NULL,0); INSERT INTO "usage" VALUES('EPSG','1730','projected_crs','EPSG','2713','EPSG','2761','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2714','Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E',NULL,'EPSG','4530','EPSG','4200','EPSG','16382',NULL,0); INSERT INTO "usage" VALUES('EPSG','1731','projected_crs','EPSG','2714','EPSG','2762','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2715','Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E',NULL,'EPSG','4530','EPSG','4200','EPSG','16312',NULL,0); INSERT INTO "usage" VALUES('EPSG','1732','projected_crs','EPSG','2715','EPSG','2763','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2716','Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E',NULL,'EPSG','4530','EPSG','4200','EPSG','16384',NULL,0); INSERT INTO "usage" VALUES('EPSG','1733','projected_crs','EPSG','2716','EPSG','2764','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2717','Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4200','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1734','projected_crs','EPSG','2717','EPSG','2765','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2718','Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E',NULL,'EPSG','4530','EPSG','4200','EPSG','16386',NULL,0); INSERT INTO "usage" VALUES('EPSG','1735','projected_crs','EPSG','2718','EPSG','2766','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2719','Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4200','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1736','projected_crs','EPSG','2719','EPSG','2767','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2720','Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E',NULL,'EPSG','4530','EPSG','4200','EPSG','16388',NULL,0); INSERT INTO "usage" VALUES('EPSG','1737','projected_crs','EPSG','2720','EPSG','2768','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2721','Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4200','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1738','projected_crs','EPSG','2721','EPSG','2769','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2722','Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E',NULL,'EPSG','4530','EPSG','4200','EPSG','16390',NULL,0); INSERT INTO "usage" VALUES('EPSG','1739','projected_crs','EPSG','2722','EPSG','2676','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2723','Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4200','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1740','projected_crs','EPSG','2723','EPSG','2677','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2724','Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E',NULL,'EPSG','4530','EPSG','4200','EPSG','16392',NULL,0); INSERT INTO "usage" VALUES('EPSG','1741','projected_crs','EPSG','2724','EPSG','2678','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2725','Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4200','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1742','projected_crs','EPSG','2725','EPSG','2679','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2726','Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E',NULL,'EPSG','4530','EPSG','4200','EPSG','16394',NULL,0); INSERT INTO "usage" VALUES('EPSG','1743','projected_crs','EPSG','2726','EPSG','2680','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2727','Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4200','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1744','projected_crs','EPSG','2727','EPSG','2681','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2728','Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E',NULL,'EPSG','4530','EPSG','4200','EPSG','16396',NULL,0); INSERT INTO "usage" VALUES('EPSG','1745','projected_crs','EPSG','2728','EPSG','2682','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2729','Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4200','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1746','projected_crs','EPSG','2729','EPSG','2683','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2730','Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E',NULL,'EPSG','4530','EPSG','4200','EPSG','16398',NULL,0); INSERT INTO "usage" VALUES('EPSG','1747','projected_crs','EPSG','2730','EPSG','2684','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2731','Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4200','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1748','projected_crs','EPSG','2731','EPSG','2685','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2732','Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E',NULL,'EPSG','4530','EPSG','4200','EPSG','16170',NULL,0); INSERT INTO "usage" VALUES('EPSG','1749','projected_crs','EPSG','2732','EPSG','2686','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2733','Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4200','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1750','projected_crs','EPSG','2733','EPSG','2687','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2734','Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E',NULL,'EPSG','4530','EPSG','4200','EPSG','16172',NULL,0); INSERT INTO "usage" VALUES('EPSG','1751','projected_crs','EPSG','2734','EPSG','2688','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2735','Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4200','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1752','projected_crs','EPSG','2735','EPSG','2689','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2736','Tete / UTM zone 36S',NULL,'EPSG','4400','EPSG','4127','EPSG','16136',NULL,0); INSERT INTO "usage" VALUES('EPSG','1753','projected_crs','EPSG','2736','EPSG','1540','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2737','Tete / UTM zone 37S',NULL,'EPSG','4400','EPSG','4127','EPSG','16137',NULL,0); INSERT INTO "usage" VALUES('EPSG','1754','projected_crs','EPSG','2737','EPSG','1541','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2738','Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E',NULL,'EPSG','4530','EPSG','4200','EPSG','16174',NULL,0); INSERT INTO "usage" VALUES('EPSG','1755','projected_crs','EPSG','2738','EPSG','2690','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2739','Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4200','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1756','projected_crs','EPSG','2739','EPSG','2691','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2740','Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E',NULL,'EPSG','4530','EPSG','4200','EPSG','16176',NULL,0); INSERT INTO "usage" VALUES('EPSG','1757','projected_crs','EPSG','2740','EPSG','2692','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2741','Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E',NULL,'EPSG','4530','EPSG','4200','EPSG','16324',NULL,0); INSERT INTO "usage" VALUES('EPSG','1758','projected_crs','EPSG','2741','EPSG','2693','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2742','Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E',NULL,'EPSG','4530','EPSG','4200','EPSG','16178',NULL,0); INSERT INTO "usage" VALUES('EPSG','1759','projected_crs','EPSG','2742','EPSG','2694','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2743','Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E',NULL,'EPSG','4530','EPSG','4200','EPSG','16325',NULL,0); INSERT INTO "usage" VALUES('EPSG','1760','projected_crs','EPSG','2743','EPSG','2695','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2744','Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E',NULL,'EPSG','4530','EPSG','4200','EPSG','16180',NULL,0); INSERT INTO "usage" VALUES('EPSG','1761','projected_crs','EPSG','2744','EPSG','2696','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2745','Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E',NULL,'EPSG','4530','EPSG','4200','EPSG','16326',NULL,0); INSERT INTO "usage" VALUES('EPSG','1762','projected_crs','EPSG','2745','EPSG','2697','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2746','Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E',NULL,'EPSG','4530','EPSG','4200','EPSG','16182',NULL,0); INSERT INTO "usage" VALUES('EPSG','1763','projected_crs','EPSG','2746','EPSG','2698','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2747','Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E',NULL,'EPSG','4530','EPSG','4200','EPSG','16327',NULL,0); INSERT INTO "usage" VALUES('EPSG','1764','projected_crs','EPSG','2747','EPSG','2699','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2748','Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E',NULL,'EPSG','4530','EPSG','4200','EPSG','16184',NULL,0); INSERT INTO "usage" VALUES('EPSG','1765','projected_crs','EPSG','2748','EPSG','2700','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2749','Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E',NULL,'EPSG','4530','EPSG','4200','EPSG','16328',NULL,0); INSERT INTO "usage" VALUES('EPSG','1766','projected_crs','EPSG','2749','EPSG','2701','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2750','Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E',NULL,'EPSG','4530','EPSG','4200','EPSG','16186',NULL,0); INSERT INTO "usage" VALUES('EPSG','1767','projected_crs','EPSG','2750','EPSG','2702','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2751','Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E',NULL,'EPSG','4530','EPSG','4200','EPSG','16329',NULL,0); INSERT INTO "usage" VALUES('EPSG','1768','projected_crs','EPSG','2751','EPSG','2703','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2752','Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E',NULL,'EPSG','4530','EPSG','4200','EPSG','16188',NULL,0); INSERT INTO "usage" VALUES('EPSG','1769','projected_crs','EPSG','2752','EPSG','2704','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2753','Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E',NULL,'EPSG','4530','EPSG','4200','EPSG','16330',NULL,0); INSERT INTO "usage" VALUES('EPSG','1770','projected_crs','EPSG','2753','EPSG','2705','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2754','Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E',NULL,'EPSG','4530','EPSG','4200','EPSG','16190',NULL,0); INSERT INTO "usage" VALUES('EPSG','1771','projected_crs','EPSG','2754','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2755','Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W',NULL,'EPSG','4530','EPSG','4200','EPSG','16331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1772','projected_crs','EPSG','2755','EPSG','2707','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2756','Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W',NULL,'EPSG','4530','EPSG','4200','EPSG','16192',NULL,0); INSERT INTO "usage" VALUES('EPSG','1773','projected_crs','EPSG','2756','EPSG','2708','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2757','Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W',NULL,'EPSG','4530','EPSG','4200','EPSG','16332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1774','projected_crs','EPSG','2757','EPSG','2709','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2758','Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W',NULL,'EPSG','4530','EPSG','4200','EPSG','16194',NULL,0); INSERT INTO "usage" VALUES('EPSG','1775','projected_crs','EPSG','2758','EPSG','2710','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2759','NAD83(HARN) / Alabama East',NULL,'EPSG','4499','EPSG','4152','EPSG','10131',NULL,0); INSERT INTO "usage" VALUES('EPSG','1776','projected_crs','EPSG','2759','EPSG','2154','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2760','NAD83(HARN) / Alabama West',NULL,'EPSG','4499','EPSG','4152','EPSG','10132',NULL,0); INSERT INTO "usage" VALUES('EPSG','1777','projected_crs','EPSG','2760','EPSG','2155','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2761','NAD83(HARN) / Arizona East',NULL,'EPSG','4499','EPSG','4152','EPSG','10231',NULL,0); INSERT INTO "usage" VALUES('EPSG','1778','projected_crs','EPSG','2761','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2762','NAD83(HARN) / Arizona Central',NULL,'EPSG','4499','EPSG','4152','EPSG','10232',NULL,0); INSERT INTO "usage" VALUES('EPSG','1779','projected_crs','EPSG','2762','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2763','NAD83(HARN) / Arizona West',NULL,'EPSG','4499','EPSG','4152','EPSG','10233',NULL,0); INSERT INTO "usage" VALUES('EPSG','1780','projected_crs','EPSG','2763','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2764','NAD83(HARN) / Arkansas North',NULL,'EPSG','4499','EPSG','4152','EPSG','10331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1781','projected_crs','EPSG','2764','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2765','NAD83(HARN) / Arkansas South',NULL,'EPSG','4499','EPSG','4152','EPSG','10332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1782','projected_crs','EPSG','2765','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2766','NAD83(HARN) / California zone 1',NULL,'EPSG','4499','EPSG','4152','EPSG','10431',NULL,0); INSERT INTO "usage" VALUES('EPSG','1783','projected_crs','EPSG','2766','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2767','NAD83(HARN) / California zone 2',NULL,'EPSG','4499','EPSG','4152','EPSG','10432',NULL,0); INSERT INTO "usage" VALUES('EPSG','1784','projected_crs','EPSG','2767','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2768','NAD83(HARN) / California zone 3',NULL,'EPSG','4499','EPSG','4152','EPSG','10433',NULL,0); INSERT INTO "usage" VALUES('EPSG','1785','projected_crs','EPSG','2768','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2769','NAD83(HARN) / California zone 4',NULL,'EPSG','4499','EPSG','4152','EPSG','10434',NULL,0); INSERT INTO "usage" VALUES('EPSG','1786','projected_crs','EPSG','2769','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2770','NAD83(HARN) / California zone 5',NULL,'EPSG','4499','EPSG','4152','EPSG','10435',NULL,0); INSERT INTO "usage" VALUES('EPSG','1787','projected_crs','EPSG','2770','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2771','NAD83(HARN) / California zone 6',NULL,'EPSG','4499','EPSG','4152','EPSG','10436',NULL,0); INSERT INTO "usage" VALUES('EPSG','1788','projected_crs','EPSG','2771','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2772','NAD83(HARN) / Colorado North',NULL,'EPSG','4499','EPSG','4152','EPSG','10531',NULL,0); INSERT INTO "usage" VALUES('EPSG','1789','projected_crs','EPSG','2772','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2773','NAD83(HARN) / Colorado Central',NULL,'EPSG','4499','EPSG','4152','EPSG','10532',NULL,0); INSERT INTO "usage" VALUES('EPSG','1790','projected_crs','EPSG','2773','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2774','NAD83(HARN) / Colorado South',NULL,'EPSG','4499','EPSG','4152','EPSG','10533',NULL,0); INSERT INTO "usage" VALUES('EPSG','1791','projected_crs','EPSG','2774','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2775','NAD83(HARN) / Connecticut',NULL,'EPSG','4499','EPSG','4152','EPSG','10630',NULL,0); INSERT INTO "usage" VALUES('EPSG','1792','projected_crs','EPSG','2775','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2776','NAD83(HARN) / Delaware',NULL,'EPSG','4499','EPSG','4152','EPSG','10730',NULL,0); INSERT INTO "usage" VALUES('EPSG','1793','projected_crs','EPSG','2776','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2777','NAD83(HARN) / Florida East',NULL,'EPSG','4499','EPSG','4152','EPSG','10931',NULL,0); INSERT INTO "usage" VALUES('EPSG','1794','projected_crs','EPSG','2777','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2778','NAD83(HARN) / Florida West',NULL,'EPSG','4499','EPSG','4152','EPSG','10932',NULL,0); INSERT INTO "usage" VALUES('EPSG','1795','projected_crs','EPSG','2778','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2779','NAD83(HARN) / Florida North',NULL,'EPSG','4499','EPSG','4152','EPSG','10933',NULL,0); INSERT INTO "usage" VALUES('EPSG','1796','projected_crs','EPSG','2779','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2780','NAD83(HARN) / Georgia East',NULL,'EPSG','4499','EPSG','4152','EPSG','11031',NULL,0); INSERT INTO "usage" VALUES('EPSG','1797','projected_crs','EPSG','2780','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2781','NAD83(HARN) / Georgia West',NULL,'EPSG','4499','EPSG','4152','EPSG','11032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1798','projected_crs','EPSG','2781','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2782','NAD83(HARN) / Hawaii zone 1',NULL,'EPSG','4499','EPSG','4152','EPSG','15131',NULL,0); INSERT INTO "usage" VALUES('EPSG','1799','projected_crs','EPSG','2782','EPSG','1546','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2783','NAD83(HARN) / Hawaii zone 2',NULL,'EPSG','4499','EPSG','4152','EPSG','15132',NULL,0); INSERT INTO "usage" VALUES('EPSG','1800','projected_crs','EPSG','2783','EPSG','1547','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2784','NAD83(HARN) / Hawaii zone 3',NULL,'EPSG','4499','EPSG','4152','EPSG','15133',NULL,0); INSERT INTO "usage" VALUES('EPSG','1801','projected_crs','EPSG','2784','EPSG','1548','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2785','NAD83(HARN) / Hawaii zone 4',NULL,'EPSG','4499','EPSG','4152','EPSG','15134',NULL,0); INSERT INTO "usage" VALUES('EPSG','1802','projected_crs','EPSG','2785','EPSG','1549','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2786','NAD83(HARN) / Hawaii zone 5',NULL,'EPSG','4499','EPSG','4152','EPSG','15135',NULL,0); INSERT INTO "usage" VALUES('EPSG','1803','projected_crs','EPSG','2786','EPSG','1550','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2787','NAD83(HARN) / Idaho East',NULL,'EPSG','4499','EPSG','4152','EPSG','11131',NULL,0); INSERT INTO "usage" VALUES('EPSG','1804','projected_crs','EPSG','2787','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2788','NAD83(HARN) / Idaho Central',NULL,'EPSG','4499','EPSG','4152','EPSG','11132',NULL,0); INSERT INTO "usage" VALUES('EPSG','1805','projected_crs','EPSG','2788','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2789','NAD83(HARN) / Idaho West',NULL,'EPSG','4499','EPSG','4152','EPSG','11133',NULL,0); INSERT INTO "usage" VALUES('EPSG','1806','projected_crs','EPSG','2789','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2790','NAD83(HARN) / Illinois East',NULL,'EPSG','4499','EPSG','4152','EPSG','11231',NULL,0); INSERT INTO "usage" VALUES('EPSG','1807','projected_crs','EPSG','2790','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2791','NAD83(HARN) / Illinois West',NULL,'EPSG','4499','EPSG','4152','EPSG','11232',NULL,0); INSERT INTO "usage" VALUES('EPSG','1808','projected_crs','EPSG','2791','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2792','NAD83(HARN) / Indiana East',NULL,'EPSG','4499','EPSG','4152','EPSG','11331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1809','projected_crs','EPSG','2792','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2793','NAD83(HARN) / Indiana West',NULL,'EPSG','4499','EPSG','4152','EPSG','11332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1810','projected_crs','EPSG','2793','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2794','NAD83(HARN) / Iowa North',NULL,'EPSG','4499','EPSG','4152','EPSG','11431',NULL,0); INSERT INTO "usage" VALUES('EPSG','1811','projected_crs','EPSG','2794','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2795','NAD83(HARN) / Iowa South',NULL,'EPSG','4499','EPSG','4152','EPSG','11432',NULL,0); INSERT INTO "usage" VALUES('EPSG','1812','projected_crs','EPSG','2795','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2796','NAD83(HARN) / Kansas North',NULL,'EPSG','4499','EPSG','4152','EPSG','11531',NULL,0); INSERT INTO "usage" VALUES('EPSG','1813','projected_crs','EPSG','2796','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2797','NAD83(HARN) / Kansas South',NULL,'EPSG','4499','EPSG','4152','EPSG','11532',NULL,0); INSERT INTO "usage" VALUES('EPSG','1814','projected_crs','EPSG','2797','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2798','NAD83(HARN) / Kentucky North',NULL,'EPSG','4499','EPSG','4152','EPSG','15303',NULL,0); INSERT INTO "usage" VALUES('EPSG','1815','projected_crs','EPSG','2798','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2799','NAD83(HARN) / Kentucky South',NULL,'EPSG','4499','EPSG','4152','EPSG','11632',NULL,0); INSERT INTO "usage" VALUES('EPSG','1816','projected_crs','EPSG','2799','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2800','NAD83(HARN) / Louisiana North',NULL,'EPSG','4499','EPSG','4152','EPSG','11731',NULL,0); INSERT INTO "usage" VALUES('EPSG','1817','projected_crs','EPSG','2800','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2801','NAD83(HARN) / Louisiana South',NULL,'EPSG','4499','EPSG','4152','EPSG','11732',NULL,0); INSERT INTO "usage" VALUES('EPSG','1818','projected_crs','EPSG','2801','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2802','NAD83(HARN) / Maine East',NULL,'EPSG','4499','EPSG','4152','EPSG','11831',NULL,0); INSERT INTO "usage" VALUES('EPSG','1819','projected_crs','EPSG','2802','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2803','NAD83(HARN) / Maine West',NULL,'EPSG','4499','EPSG','4152','EPSG','11832',NULL,0); INSERT INTO "usage" VALUES('EPSG','1820','projected_crs','EPSG','2803','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2804','NAD83(HARN) / Maryland',NULL,'EPSG','4499','EPSG','4152','EPSG','11930',NULL,0); INSERT INTO "usage" VALUES('EPSG','1821','projected_crs','EPSG','2804','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2805','NAD83(HARN) / Massachusetts Mainland',NULL,'EPSG','4499','EPSG','4152','EPSG','12031',NULL,0); INSERT INTO "usage" VALUES('EPSG','1822','projected_crs','EPSG','2805','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2806','NAD83(HARN) / Massachusetts Island',NULL,'EPSG','4499','EPSG','4152','EPSG','12032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1823','projected_crs','EPSG','2806','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2807','NAD83(HARN) / Michigan North',NULL,'EPSG','4499','EPSG','4152','EPSG','12141',NULL,0); INSERT INTO "usage" VALUES('EPSG','1824','projected_crs','EPSG','2807','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2808','NAD83(HARN) / Michigan Central',NULL,'EPSG','4499','EPSG','4152','EPSG','12142',NULL,0); INSERT INTO "usage" VALUES('EPSG','1825','projected_crs','EPSG','2808','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2809','NAD83(HARN) / Michigan South',NULL,'EPSG','4499','EPSG','4152','EPSG','12143',NULL,0); INSERT INTO "usage" VALUES('EPSG','1826','projected_crs','EPSG','2809','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2810','NAD83(HARN) / Minnesota North',NULL,'EPSG','4499','EPSG','4152','EPSG','12231',NULL,0); INSERT INTO "usage" VALUES('EPSG','1827','projected_crs','EPSG','2810','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2811','NAD83(HARN) / Minnesota Central',NULL,'EPSG','4499','EPSG','4152','EPSG','12232',NULL,0); INSERT INTO "usage" VALUES('EPSG','1828','projected_crs','EPSG','2811','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2812','NAD83(HARN) / Minnesota South',NULL,'EPSG','4499','EPSG','4152','EPSG','12233',NULL,0); INSERT INTO "usage" VALUES('EPSG','1829','projected_crs','EPSG','2812','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2813','NAD83(HARN) / Mississippi East',NULL,'EPSG','4499','EPSG','4152','EPSG','12331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1830','projected_crs','EPSG','2813','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2814','NAD83(HARN) / Mississippi West',NULL,'EPSG','4499','EPSG','4152','EPSG','12332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1831','projected_crs','EPSG','2814','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2815','NAD83(HARN) / Missouri East',NULL,'EPSG','4499','EPSG','4152','EPSG','12431',NULL,0); INSERT INTO "usage" VALUES('EPSG','1832','projected_crs','EPSG','2815','EPSG','2219','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2816','NAD83(HARN) / Missouri Central',NULL,'EPSG','4499','EPSG','4152','EPSG','12432',NULL,0); INSERT INTO "usage" VALUES('EPSG','1833','projected_crs','EPSG','2816','EPSG','2218','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2817','NAD83(HARN) / Missouri West',NULL,'EPSG','4499','EPSG','4152','EPSG','12433',NULL,0); INSERT INTO "usage" VALUES('EPSG','1834','projected_crs','EPSG','2817','EPSG','2220','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2818','NAD83(HARN) / Montana',NULL,'EPSG','4499','EPSG','4152','EPSG','12530',NULL,0); INSERT INTO "usage" VALUES('EPSG','1835','projected_crs','EPSG','2818','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2819','NAD83(HARN) / Nebraska',NULL,'EPSG','4499','EPSG','4152','EPSG','12630',NULL,0); INSERT INTO "usage" VALUES('EPSG','1836','projected_crs','EPSG','2819','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2820','NAD83(HARN) / Nevada East',NULL,'EPSG','4499','EPSG','4152','EPSG','12731',NULL,0); INSERT INTO "usage" VALUES('EPSG','1837','projected_crs','EPSG','2820','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2821','NAD83(HARN) / Nevada Central',NULL,'EPSG','4499','EPSG','4152','EPSG','12732',NULL,0); INSERT INTO "usage" VALUES('EPSG','1838','projected_crs','EPSG','2821','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2822','NAD83(HARN) / Nevada West',NULL,'EPSG','4499','EPSG','4152','EPSG','12733',NULL,0); INSERT INTO "usage" VALUES('EPSG','1839','projected_crs','EPSG','2822','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2823','NAD83(HARN) / New Hampshire',NULL,'EPSG','4499','EPSG','4152','EPSG','12830',NULL,0); INSERT INTO "usage" VALUES('EPSG','1840','projected_crs','EPSG','2823','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2824','NAD83(HARN) / New Jersey',NULL,'EPSG','4499','EPSG','4152','EPSG','12930',NULL,0); INSERT INTO "usage" VALUES('EPSG','1841','projected_crs','EPSG','2824','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2825','NAD83(HARN) / New Mexico East',NULL,'EPSG','4499','EPSG','4152','EPSG','13031',NULL,0); INSERT INTO "usage" VALUES('EPSG','1842','projected_crs','EPSG','2825','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2826','NAD83(HARN) / New Mexico Central',NULL,'EPSG','4499','EPSG','4152','EPSG','13032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1843','projected_crs','EPSG','2826','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2827','NAD83(HARN) / New Mexico West',NULL,'EPSG','4499','EPSG','4152','EPSG','13033',NULL,0); INSERT INTO "usage" VALUES('EPSG','1844','projected_crs','EPSG','2827','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2828','NAD83(HARN) / New York East',NULL,'EPSG','4499','EPSG','4152','EPSG','13131',NULL,0); INSERT INTO "usage" VALUES('EPSG','1845','projected_crs','EPSG','2828','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2829','NAD83(HARN) / New York Central',NULL,'EPSG','4499','EPSG','4152','EPSG','13132',NULL,0); INSERT INTO "usage" VALUES('EPSG','1846','projected_crs','EPSG','2829','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2830','NAD83(HARN) / New York West',NULL,'EPSG','4499','EPSG','4152','EPSG','13133',NULL,0); INSERT INTO "usage" VALUES('EPSG','1847','projected_crs','EPSG','2830','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2831','NAD83(HARN) / New York Long Island',NULL,'EPSG','4499','EPSG','4152','EPSG','13134',NULL,0); INSERT INTO "usage" VALUES('EPSG','1848','projected_crs','EPSG','2831','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2832','NAD83(HARN) / North Dakota North',NULL,'EPSG','4499','EPSG','4152','EPSG','13331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1849','projected_crs','EPSG','2832','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2833','NAD83(HARN) / North Dakota South',NULL,'EPSG','4499','EPSG','4152','EPSG','13332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1850','projected_crs','EPSG','2833','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2834','NAD83(HARN) / Ohio North',NULL,'EPSG','4499','EPSG','4152','EPSG','13431',NULL,0); INSERT INTO "usage" VALUES('EPSG','1851','projected_crs','EPSG','2834','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2835','NAD83(HARN) / Ohio South',NULL,'EPSG','4499','EPSG','4152','EPSG','13432',NULL,0); INSERT INTO "usage" VALUES('EPSG','1852','projected_crs','EPSG','2835','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2836','NAD83(HARN) / Oklahoma North',NULL,'EPSG','4499','EPSG','4152','EPSG','13531',NULL,0); INSERT INTO "usage" VALUES('EPSG','1853','projected_crs','EPSG','2836','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2837','NAD83(HARN) / Oklahoma South',NULL,'EPSG','4499','EPSG','4152','EPSG','13532',NULL,0); INSERT INTO "usage" VALUES('EPSG','1854','projected_crs','EPSG','2837','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2838','NAD83(HARN) / Oregon North',NULL,'EPSG','4499','EPSG','4152','EPSG','13631',NULL,0); INSERT INTO "usage" VALUES('EPSG','1855','projected_crs','EPSG','2838','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2839','NAD83(HARN) / Oregon South',NULL,'EPSG','4499','EPSG','4152','EPSG','13632',NULL,0); INSERT INTO "usage" VALUES('EPSG','1856','projected_crs','EPSG','2839','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2840','NAD83(HARN) / Rhode Island',NULL,'EPSG','4499','EPSG','4152','EPSG','13830',NULL,0); INSERT INTO "usage" VALUES('EPSG','1857','projected_crs','EPSG','2840','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2841','NAD83(HARN) / South Dakota North',NULL,'EPSG','4499','EPSG','4152','EPSG','14031',NULL,0); INSERT INTO "usage" VALUES('EPSG','1858','projected_crs','EPSG','2841','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2842','NAD83(HARN) / South Dakota South',NULL,'EPSG','4499','EPSG','4152','EPSG','14032',NULL,0); INSERT INTO "usage" VALUES('EPSG','1859','projected_crs','EPSG','2842','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2843','NAD83(HARN) / Tennessee',NULL,'EPSG','4499','EPSG','4152','EPSG','14130',NULL,0); INSERT INTO "usage" VALUES('EPSG','1860','projected_crs','EPSG','2843','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2844','NAD83(HARN) / Texas North',NULL,'EPSG','4499','EPSG','4152','EPSG','14231',NULL,0); INSERT INTO "usage" VALUES('EPSG','1861','projected_crs','EPSG','2844','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2845','NAD83(HARN) / Texas North Central',NULL,'EPSG','4499','EPSG','4152','EPSG','14232',NULL,0); INSERT INTO "usage" VALUES('EPSG','1862','projected_crs','EPSG','2845','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2846','NAD83(HARN) / Texas Central',NULL,'EPSG','4499','EPSG','4152','EPSG','14233',NULL,0); INSERT INTO "usage" VALUES('EPSG','1863','projected_crs','EPSG','2846','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2847','NAD83(HARN) / Texas South Central',NULL,'EPSG','4499','EPSG','4152','EPSG','14234',NULL,0); INSERT INTO "usage" VALUES('EPSG','1864','projected_crs','EPSG','2847','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2848','NAD83(HARN) / Texas South',NULL,'EPSG','4499','EPSG','4152','EPSG','14235',NULL,0); INSERT INTO "usage" VALUES('EPSG','1865','projected_crs','EPSG','2848','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2849','NAD83(HARN) / Utah North',NULL,'EPSG','4499','EPSG','4152','EPSG','14331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1866','projected_crs','EPSG','2849','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2850','NAD83(HARN) / Utah Central',NULL,'EPSG','4499','EPSG','4152','EPSG','14332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1867','projected_crs','EPSG','2850','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2851','NAD83(HARN) / Utah South',NULL,'EPSG','4499','EPSG','4152','EPSG','14333',NULL,0); INSERT INTO "usage" VALUES('EPSG','1868','projected_crs','EPSG','2851','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2852','NAD83(HARN) / Vermont',NULL,'EPSG','4499','EPSG','4152','EPSG','14430',NULL,0); INSERT INTO "usage" VALUES('EPSG','1869','projected_crs','EPSG','2852','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2853','NAD83(HARN) / Virginia North',NULL,'EPSG','4499','EPSG','4152','EPSG','14531',NULL,0); INSERT INTO "usage" VALUES('EPSG','1870','projected_crs','EPSG','2853','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2854','NAD83(HARN) / Virginia South',NULL,'EPSG','4499','EPSG','4152','EPSG','14532',NULL,0); INSERT INTO "usage" VALUES('EPSG','1871','projected_crs','EPSG','2854','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2855','NAD83(HARN) / Washington North',NULL,'EPSG','4499','EPSG','4152','EPSG','14631',NULL,0); INSERT INTO "usage" VALUES('EPSG','1872','projected_crs','EPSG','2855','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2856','NAD83(HARN) / Washington South',NULL,'EPSG','4499','EPSG','4152','EPSG','14632',NULL,0); INSERT INTO "usage" VALUES('EPSG','1873','projected_crs','EPSG','2856','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2857','NAD83(HARN) / West Virginia North',NULL,'EPSG','4499','EPSG','4152','EPSG','14731',NULL,0); INSERT INTO "usage" VALUES('EPSG','1874','projected_crs','EPSG','2857','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2858','NAD83(HARN) / West Virginia South',NULL,'EPSG','4499','EPSG','4152','EPSG','14732',NULL,0); INSERT INTO "usage" VALUES('EPSG','1875','projected_crs','EPSG','2858','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2859','NAD83(HARN) / Wisconsin North',NULL,'EPSG','4499','EPSG','4152','EPSG','14831',NULL,0); INSERT INTO "usage" VALUES('EPSG','1876','projected_crs','EPSG','2859','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2860','NAD83(HARN) / Wisconsin Central',NULL,'EPSG','4499','EPSG','4152','EPSG','14832',NULL,0); INSERT INTO "usage" VALUES('EPSG','1877','projected_crs','EPSG','2860','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2861','NAD83(HARN) / Wisconsin South',NULL,'EPSG','4499','EPSG','4152','EPSG','14833',NULL,0); INSERT INTO "usage" VALUES('EPSG','1878','projected_crs','EPSG','2861','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2862','NAD83(HARN) / Wyoming East',NULL,'EPSG','4499','EPSG','4152','EPSG','14931',NULL,0); INSERT INTO "usage" VALUES('EPSG','1879','projected_crs','EPSG','2862','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2863','NAD83(HARN) / Wyoming East Central',NULL,'EPSG','4499','EPSG','4152','EPSG','14932',NULL,0); INSERT INTO "usage" VALUES('EPSG','1880','projected_crs','EPSG','2863','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2864','NAD83(HARN) / Wyoming West Central',NULL,'EPSG','4499','EPSG','4152','EPSG','14933',NULL,0); INSERT INTO "usage" VALUES('EPSG','1881','projected_crs','EPSG','2864','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2865','NAD83(HARN) / Wyoming West',NULL,'EPSG','4499','EPSG','4152','EPSG','14934',NULL,0); INSERT INTO "usage" VALUES('EPSG','1882','projected_crs','EPSG','2865','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2866','NAD83(HARN) / Puerto Rico and Virgin Is.',NULL,'EPSG','4499','EPSG','4152','EPSG','15230',NULL,0); INSERT INTO "usage" VALUES('EPSG','1883','projected_crs','EPSG','2866','EPSG','3634','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2867','NAD83(HARN) / Arizona East (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15304',NULL,0); INSERT INTO "usage" VALUES('EPSG','1884','projected_crs','EPSG','2867','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2868','NAD83(HARN) / Arizona Central (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15305',NULL,0); INSERT INTO "usage" VALUES('EPSG','1885','projected_crs','EPSG','2868','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2869','NAD83(HARN) / Arizona West (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15306',NULL,0); INSERT INTO "usage" VALUES('EPSG','1886','projected_crs','EPSG','2869','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2870','NAD83(HARN) / California zone 1 (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15307',NULL,0); INSERT INTO "usage" VALUES('EPSG','1887','projected_crs','EPSG','2870','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2871','NAD83(HARN) / California zone 2 (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15308',NULL,0); INSERT INTO "usage" VALUES('EPSG','1888','projected_crs','EPSG','2871','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2872','NAD83(HARN) / California zone 3 (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15309',NULL,0); INSERT INTO "usage" VALUES('EPSG','1889','projected_crs','EPSG','2872','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2873','NAD83(HARN) / California zone 4 (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15310',NULL,0); INSERT INTO "usage" VALUES('EPSG','1890','projected_crs','EPSG','2873','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2874','NAD83(HARN) / California zone 5 (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15311',NULL,0); INSERT INTO "usage" VALUES('EPSG','1891','projected_crs','EPSG','2874','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2875','NAD83(HARN) / California zone 6 (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15312',NULL,0); INSERT INTO "usage" VALUES('EPSG','1892','projected_crs','EPSG','2875','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2876','NAD83(HARN) / Colorado North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15313',NULL,0); INSERT INTO "usage" VALUES('EPSG','1893','projected_crs','EPSG','2876','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2877','NAD83(HARN) / Colorado Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15314',NULL,0); INSERT INTO "usage" VALUES('EPSG','1894','projected_crs','EPSG','2877','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2878','NAD83(HARN) / Colorado South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15315',NULL,0); INSERT INTO "usage" VALUES('EPSG','1895','projected_crs','EPSG','2878','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2879','NAD83(HARN) / Connecticut (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15316',NULL,0); INSERT INTO "usage" VALUES('EPSG','1896','projected_crs','EPSG','2879','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2880','NAD83(HARN) / Delaware (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15317',NULL,0); INSERT INTO "usage" VALUES('EPSG','1897','projected_crs','EPSG','2880','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2881','NAD83(HARN) / Florida East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15318',NULL,0); INSERT INTO "usage" VALUES('EPSG','1898','projected_crs','EPSG','2881','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2882','NAD83(HARN) / Florida West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15319',NULL,0); INSERT INTO "usage" VALUES('EPSG','1899','projected_crs','EPSG','2882','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2883','NAD83(HARN) / Florida North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15320',NULL,0); INSERT INTO "usage" VALUES('EPSG','1900','projected_crs','EPSG','2883','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2884','NAD83(HARN) / Georgia East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15321',NULL,0); INSERT INTO "usage" VALUES('EPSG','1901','projected_crs','EPSG','2884','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2885','NAD83(HARN) / Georgia West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15322',NULL,0); INSERT INTO "usage" VALUES('EPSG','1902','projected_crs','EPSG','2885','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2886','NAD83(HARN) / Idaho East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15323',NULL,0); INSERT INTO "usage" VALUES('EPSG','1903','projected_crs','EPSG','2886','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2887','NAD83(HARN) / Idaho Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15324',NULL,0); INSERT INTO "usage" VALUES('EPSG','1904','projected_crs','EPSG','2887','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2888','NAD83(HARN) / Idaho West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15325',NULL,0); INSERT INTO "usage" VALUES('EPSG','1905','projected_crs','EPSG','2888','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2889','NAD83(HARN) / Indiana East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15326',NULL,1); INSERT INTO "usage" VALUES('EPSG','1906','projected_crs','EPSG','2889','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2890','NAD83(HARN) / Indiana West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15327',NULL,1); INSERT INTO "usage" VALUES('EPSG','1907','projected_crs','EPSG','2890','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2891','NAD83(HARN) / Kentucky North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15328',NULL,0); INSERT INTO "usage" VALUES('EPSG','1908','projected_crs','EPSG','2891','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2892','NAD83(HARN) / Kentucky South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15329',NULL,0); INSERT INTO "usage" VALUES('EPSG','1909','projected_crs','EPSG','2892','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2893','NAD83(HARN) / Maryland (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15330',NULL,0); INSERT INTO "usage" VALUES('EPSG','1910','projected_crs','EPSG','2893','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2894','NAD83(HARN) / Massachusetts Mainland (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15331',NULL,0); INSERT INTO "usage" VALUES('EPSG','1911','projected_crs','EPSG','2894','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2895','NAD83(HARN) / Massachusetts Island (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15332',NULL,0); INSERT INTO "usage" VALUES('EPSG','1912','projected_crs','EPSG','2895','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2896','NAD83(HARN) / Michigan North (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15333',NULL,0); INSERT INTO "usage" VALUES('EPSG','1913','projected_crs','EPSG','2896','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2897','NAD83(HARN) / Michigan Central (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15334',NULL,0); INSERT INTO "usage" VALUES('EPSG','1914','projected_crs','EPSG','2897','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2898','NAD83(HARN) / Michigan South (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15335',NULL,0); INSERT INTO "usage" VALUES('EPSG','1915','projected_crs','EPSG','2898','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2899','NAD83(HARN) / Mississippi East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15336',NULL,0); INSERT INTO "usage" VALUES('EPSG','1916','projected_crs','EPSG','2899','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2900','NAD83(HARN) / Mississippi West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15337',NULL,0); INSERT INTO "usage" VALUES('EPSG','1917','projected_crs','EPSG','2900','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2901','NAD83(HARN) / Montana (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15338',NULL,0); INSERT INTO "usage" VALUES('EPSG','1918','projected_crs','EPSG','2901','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2902','NAD83(HARN) / New Mexico East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15339',NULL,0); INSERT INTO "usage" VALUES('EPSG','1919','projected_crs','EPSG','2902','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2903','NAD83(HARN) / New Mexico Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15340',NULL,0); INSERT INTO "usage" VALUES('EPSG','1920','projected_crs','EPSG','2903','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2904','NAD83(HARN) / New Mexico West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15341',NULL,0); INSERT INTO "usage" VALUES('EPSG','1921','projected_crs','EPSG','2904','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2905','NAD83(HARN) / New York East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15342',NULL,0); INSERT INTO "usage" VALUES('EPSG','1922','projected_crs','EPSG','2905','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2906','NAD83(HARN) / New York Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15343',NULL,0); INSERT INTO "usage" VALUES('EPSG','1923','projected_crs','EPSG','2906','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2907','NAD83(HARN) / New York West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15344',NULL,0); INSERT INTO "usage" VALUES('EPSG','1924','projected_crs','EPSG','2907','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2908','NAD83(HARN) / New York Long Island (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15345',NULL,0); INSERT INTO "usage" VALUES('EPSG','1925','projected_crs','EPSG','2908','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2909','NAD83(HARN) / North Dakota North (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15347',NULL,0); INSERT INTO "usage" VALUES('EPSG','1926','projected_crs','EPSG','2909','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2910','NAD83(HARN) / North Dakota South (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15348',NULL,0); INSERT INTO "usage" VALUES('EPSG','1927','projected_crs','EPSG','2910','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2911','NAD83(HARN) / Oklahoma North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15349',NULL,0); INSERT INTO "usage" VALUES('EPSG','1928','projected_crs','EPSG','2911','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2912','NAD83(HARN) / Oklahoma South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15350',NULL,0); INSERT INTO "usage" VALUES('EPSG','1929','projected_crs','EPSG','2912','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2913','NAD83(HARN) / Oregon North (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15351',NULL,0); INSERT INTO "usage" VALUES('EPSG','1930','projected_crs','EPSG','2913','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2914','NAD83(HARN) / Oregon South (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15352',NULL,0); INSERT INTO "usage" VALUES('EPSG','1931','projected_crs','EPSG','2914','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2915','NAD83(HARN) / Tennessee (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15356',NULL,0); INSERT INTO "usage" VALUES('EPSG','1932','projected_crs','EPSG','2915','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2916','NAD83(HARN) / Texas North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15357',NULL,0); INSERT INTO "usage" VALUES('EPSG','1933','projected_crs','EPSG','2916','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2917','NAD83(HARN) / Texas North Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15358',NULL,0); INSERT INTO "usage" VALUES('EPSG','1934','projected_crs','EPSG','2917','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2918','NAD83(HARN) / Texas Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15359',NULL,0); INSERT INTO "usage" VALUES('EPSG','1935','projected_crs','EPSG','2918','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2919','NAD83(HARN) / Texas South Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15360',NULL,0); INSERT INTO "usage" VALUES('EPSG','1936','projected_crs','EPSG','2919','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2920','NAD83(HARN) / Texas South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15361',NULL,0); INSERT INTO "usage" VALUES('EPSG','1937','projected_crs','EPSG','2920','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2921','NAD83(HARN) / Utah North (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15362',NULL,0); INSERT INTO "usage" VALUES('EPSG','1938','projected_crs','EPSG','2921','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2922','NAD83(HARN) / Utah Central (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15363',NULL,0); INSERT INTO "usage" VALUES('EPSG','1939','projected_crs','EPSG','2922','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2923','NAD83(HARN) / Utah South (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15364',NULL,0); INSERT INTO "usage" VALUES('EPSG','1940','projected_crs','EPSG','2923','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2924','NAD83(HARN) / Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15365',NULL,0); INSERT INTO "usage" VALUES('EPSG','1941','projected_crs','EPSG','2924','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2925','NAD83(HARN) / Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15366',NULL,0); INSERT INTO "usage" VALUES('EPSG','1942','projected_crs','EPSG','2925','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2926','NAD83(HARN) / Washington North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15367',NULL,0); INSERT INTO "usage" VALUES('EPSG','1943','projected_crs','EPSG','2926','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2927','NAD83(HARN) / Washington South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15368',NULL,0); INSERT INTO "usage" VALUES('EPSG','1944','projected_crs','EPSG','2927','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2928','NAD83(HARN) / Wisconsin North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15369',NULL,0); INSERT INTO "usage" VALUES('EPSG','1945','projected_crs','EPSG','2928','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2929','NAD83(HARN) / Wisconsin Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15370',NULL,0); INSERT INTO "usage" VALUES('EPSG','1946','projected_crs','EPSG','2929','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2930','NAD83(HARN) / Wisconsin South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15371',NULL,0); INSERT INTO "usage" VALUES('EPSG','1947','projected_crs','EPSG','2930','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2931','Beduaram / TM 13 NE',NULL,'EPSG','4499','EPSG','4213','EPSG','16413',NULL,0); INSERT INTO "usage" VALUES('EPSG','1948','projected_crs','EPSG','2931','EPSG','2771','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','2932','QND95 / Qatar National Grid',NULL,'EPSG','4400','EPSG','4614','EPSG','19919',NULL,0); INSERT INTO "usage" VALUES('EPSG','1949','projected_crs','EPSG','2932','EPSG','1346','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2933','Segara / UTM zone 50S',NULL,'EPSG','4400','EPSG','4613','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','1950','projected_crs','EPSG','2933','EPSG','1328','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2934','Segara (Jakarta) / NEIEZ',NULL,'EPSG','4499','EPSG','4820','EPSG','19905',NULL,1); INSERT INTO "usage" VALUES('EPSG','1951','projected_crs','EPSG','2934','EPSG','1360','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2935','Pulkovo 1942 / CS63 zone A1',NULL,'EPSG','4530','EPSG','4284','EPSG','18441',NULL,0); INSERT INTO "usage" VALUES('EPSG','1952','projected_crs','EPSG','2935','EPSG','2772','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2936','Pulkovo 1942 / CS63 zone A2',NULL,'EPSG','4530','EPSG','4284','EPSG','18442',NULL,0); INSERT INTO "usage" VALUES('EPSG','1953','projected_crs','EPSG','2936','EPSG','2773','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2937','Pulkovo 1942 / CS63 zone A3',NULL,'EPSG','4530','EPSG','4284','EPSG','18443',NULL,0); INSERT INTO "usage" VALUES('EPSG','1954','projected_crs','EPSG','2937','EPSG','2774','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2938','Pulkovo 1942 / CS63 zone A4',NULL,'EPSG','4530','EPSG','4284','EPSG','18444',NULL,0); INSERT INTO "usage" VALUES('EPSG','1955','projected_crs','EPSG','2938','EPSG','2775','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2939','Pulkovo 1942 / CS63 zone K2',NULL,'EPSG','4530','EPSG','4284','EPSG','18446',NULL,0); INSERT INTO "usage" VALUES('EPSG','1956','projected_crs','EPSG','2939','EPSG','2776','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2940','Pulkovo 1942 / CS63 zone K3',NULL,'EPSG','4530','EPSG','4284','EPSG','18447',NULL,0); INSERT INTO "usage" VALUES('EPSG','1957','projected_crs','EPSG','2940','EPSG','2777','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2941','Pulkovo 1942 / CS63 zone K4',NULL,'EPSG','4530','EPSG','4284','EPSG','18448',NULL,0); INSERT INTO "usage" VALUES('EPSG','1958','projected_crs','EPSG','2941','EPSG','2778','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','2942','Porto Santo / UTM zone 28N',NULL,'EPSG','4400','EPSG','4615','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','1959','projected_crs','EPSG','2942','EPSG','1314','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2943','Selvagem Grande / UTM zone 28N',NULL,'EPSG','4400','EPSG','4616','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','1960','projected_crs','EPSG','2943','EPSG','2779','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','2944','NAD83(CSRS) / SCoPQ zone 2',NULL,'EPSG','4499','EPSG','4617','EPSG','17700',NULL,1); INSERT INTO "usage" VALUES('EPSG','1961','projected_crs','EPSG','2944','EPSG','1420','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2945','NAD83(CSRS) / MTM zone 3',NULL,'EPSG','4496','EPSG','4617','EPSG','17703',NULL,0); INSERT INTO "usage" VALUES('EPSG','1962','projected_crs','EPSG','2945','EPSG','2290','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2946','NAD83(CSRS) / MTM zone 4',NULL,'EPSG','4496','EPSG','4617','EPSG','17704',NULL,0); INSERT INTO "usage" VALUES('EPSG','1963','projected_crs','EPSG','2946','EPSG','2276','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2947','NAD83(CSRS) / MTM zone 5',NULL,'EPSG','4496','EPSG','4617','EPSG','17705',NULL,0); INSERT INTO "usage" VALUES('EPSG','1964','projected_crs','EPSG','2947','EPSG','2277','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2948','NAD83(CSRS) / MTM zone 6',NULL,'EPSG','4496','EPSG','4617','EPSG','17706',NULL,0); INSERT INTO "usage" VALUES('EPSG','1965','projected_crs','EPSG','2948','EPSG','2278','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2949','NAD83(CSRS) / MTM zone 7',NULL,'EPSG','4496','EPSG','4617','EPSG','17707',NULL,0); INSERT INTO "usage" VALUES('EPSG','1966','projected_crs','EPSG','2949','EPSG','1425','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2950','NAD83(CSRS) / MTM zone 8',NULL,'EPSG','4496','EPSG','4617','EPSG','17708',NULL,0); INSERT INTO "usage" VALUES('EPSG','1967','projected_crs','EPSG','2950','EPSG','2279','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2951','NAD83(CSRS) / MTM zone 9',NULL,'EPSG','4496','EPSG','4617','EPSG','17709',NULL,0); INSERT INTO "usage" VALUES('EPSG','1968','projected_crs','EPSG','2951','EPSG','2280','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2952','NAD83(CSRS) / MTM zone 10',NULL,'EPSG','4496','EPSG','4617','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','1969','projected_crs','EPSG','2952','EPSG','2281','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2953','NAD83(CSRS) / New Brunswick Stereographic',NULL,'EPSG','4500','EPSG','4617','EPSG','19946',NULL,0); INSERT INTO "usage" VALUES('EPSG','1970','projected_crs','EPSG','2953','EPSG','1447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2954','NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83)',NULL,'EPSG','4496','EPSG','4617','EPSG','19960',NULL,0); INSERT INTO "usage" VALUES('EPSG','1971','projected_crs','EPSG','2954','EPSG','1533','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2955','NAD83(CSRS) / UTM zone 11N',NULL,'EPSG','4400','EPSG','4617','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','1972','projected_crs','EPSG','2955','EPSG','3528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2956','NAD83(CSRS) / UTM zone 12N',NULL,'EPSG','4400','EPSG','4617','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','1973','projected_crs','EPSG','2956','EPSG','3527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2957','NAD83(CSRS) / UTM zone 13N',NULL,'EPSG','4400','EPSG','4617','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','1974','projected_crs','EPSG','2957','EPSG','3526','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2958','NAD83(CSRS) / UTM zone 17N',NULL,'EPSG','4400','EPSG','4617','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','1975','projected_crs','EPSG','2958','EPSG','3416','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2959','NAD83(CSRS) / UTM zone 18N',NULL,'EPSG','4400','EPSG','4617','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','1976','projected_crs','EPSG','2959','EPSG','3417','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2960','NAD83(CSRS) / UTM zone 19N',NULL,'EPSG','4400','EPSG','4617','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','1977','projected_crs','EPSG','2960','EPSG','3524','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2961','NAD83(CSRS) / UTM zone 20N',NULL,'EPSG','4400','EPSG','4617','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1978','projected_crs','EPSG','2961','EPSG','3525','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2962','NAD83(CSRS) / UTM zone 21N',NULL,'EPSG','4400','EPSG','4617','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','1979','projected_crs','EPSG','2962','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2963','Lisbon 1890 (Lisbon) / Portugal Bonne',NULL,'EPSG','6509','EPSG','4904','EPSG','19979',NULL,0); INSERT INTO "usage" VALUES('EPSG','1980','projected_crs','EPSG','2963','EPSG','1294','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','2964','NAD27 / Alaska Albers',NULL,'EPSG','4497','EPSG','4267','EPSG','15020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1981','projected_crs','EPSG','2964','EPSG','1330','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','2965','NAD83 / Indiana East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15372',NULL,0); INSERT INTO "usage" VALUES('EPSG','1982','projected_crs','EPSG','2965','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2966','NAD83 / Indiana West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15373',NULL,0); INSERT INTO "usage" VALUES('EPSG','1983','projected_crs','EPSG','2966','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2967','NAD83(HARN) / Indiana East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15372',NULL,0); INSERT INTO "usage" VALUES('EPSG','1984','projected_crs','EPSG','2967','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2968','NAD83(HARN) / Indiana West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15373',NULL,0); INSERT INTO "usage" VALUES('EPSG','1985','projected_crs','EPSG','2968','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2969','Fort Marigot / UTM zone 20N',NULL,'EPSG','4400','EPSG','4621','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1986','projected_crs','EPSG','2969','EPSG','2828','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2970','Guadeloupe 1948 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4622','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1987','projected_crs','EPSG','2970','EPSG','2829','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2971','CSG67 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4623','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','1988','projected_crs','EPSG','2971','EPSG','3766','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2972','RGFG95 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4624','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','1989','projected_crs','EPSG','2972','EPSG','3144','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2973','Martinique 1938 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4625','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','1990','projected_crs','EPSG','2973','EPSG','3276','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2975','RGR92 / UTM zone 40S',NULL,'EPSG','4400','EPSG','4627','EPSG','16140',NULL,0); INSERT INTO "usage" VALUES('EPSG','1991','projected_crs','EPSG','2975','EPSG','3911','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2976','Tahiti 52 / UTM zone 6S',NULL,'EPSG','4400','EPSG','4628','EPSG','16106',NULL,0); INSERT INTO "usage" VALUES('EPSG','1992','projected_crs','EPSG','2976','EPSG','2811','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2977','Tahaa 54 / UTM zone 5S',NULL,'EPSG','4400','EPSG','4629','EPSG','16105',NULL,0); INSERT INTO "usage" VALUES('EPSG','1993','projected_crs','EPSG','2977','EPSG','2812','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2978','IGN72 Nuku Hiva / UTM zone 7S',NULL,'EPSG','4400','EPSG','4630','EPSG','16107',NULL,0); INSERT INTO "usage" VALUES('EPSG','1994','projected_crs','EPSG','2978','EPSG','3129','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2979','K0 1949 / UTM zone 42S',NULL,'EPSG','4400','EPSG','4631','EPSG','16142',NULL,1); INSERT INTO "usage" VALUES('EPSG','1995','projected_crs','EPSG','2979','EPSG','2816','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2980','Combani 1950 / UTM zone 38S',NULL,'EPSG','4400','EPSG','4632','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','1996','projected_crs','EPSG','2980','EPSG','3340','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2981','IGN56 Lifou / UTM zone 58S',NULL,'EPSG','4400','EPSG','4633','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','1997','projected_crs','EPSG','2981','EPSG','2814','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2982','IGN72 Grand Terre / UTM zone 58S',NULL,'EPSG','4400','EPSG','4634','EPSG','16158',NULL,1); INSERT INTO "usage" VALUES('EPSG','1998','projected_crs','EPSG','2982','EPSG','2822','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2983','ST87 Ouvea / UTM zone 58S',NULL,'EPSG','4400','EPSG','4635','EPSG','16158',NULL,1); INSERT INTO "usage" VALUES('EPSG','1999','projected_crs','EPSG','2983','EPSG','2813','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2984','RGNC 1991 / Lambert New Caledonia',NULL,'EPSG','4499','EPSG','4645','EPSG','19981',NULL,1); INSERT INTO "usage" VALUES('EPSG','2000','projected_crs','EPSG','2984','EPSG','1174','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2985','Petrels 1972 / Terre Adelie Polar Stereographic',NULL,'EPSG','1025','EPSG','4636','EPSG','19983',NULL,0); INSERT INTO "usage" VALUES('EPSG','2001','projected_crs','EPSG','2985','EPSG','2817','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2986','Perroud 1950 / Terre Adelie Polar Stereographic',NULL,'EPSG','1025','EPSG','4637','EPSG','19983',NULL,0); INSERT INTO "usage" VALUES('EPSG','2002','projected_crs','EPSG','2986','EPSG','2818','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2987','Saint Pierre et Miquelon 1950 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4638','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','2003','projected_crs','EPSG','2987','EPSG','3299','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2988','MOP78 / UTM zone 1S',NULL,'EPSG','4400','EPSG','4639','EPSG','16101',NULL,0); INSERT INTO "usage" VALUES('EPSG','2004','projected_crs','EPSG','2988','EPSG','2815','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2989','RRAF 1991 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4640','EPSG','16020',NULL,1); INSERT INTO "usage" VALUES('EPSG','2005','projected_crs','EPSG','2989','EPSG','2824','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2990','Reunion 1947 / TM Reunion',NULL,'EPSG','4499','EPSG','4626','EPSG','19982',NULL,1); INSERT INTO "usage" VALUES('EPSG','2006','projected_crs','EPSG','2990','EPSG','3337','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2991','NAD83 / Oregon LCC (m)',NULL,'EPSG','4499','EPSG','4269','EPSG','13633',NULL,0); INSERT INTO "usage" VALUES('EPSG','2007','projected_crs','EPSG','2991','EPSG','1406','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','2992','NAD83 / Oregon GIC Lambert (ft)',NULL,'EPSG','4495','EPSG','4269','EPSG','15374',NULL,0); INSERT INTO "usage" VALUES('EPSG','2008','projected_crs','EPSG','2992','EPSG','1406','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','2993','NAD83(HARN) / Oregon LCC (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','13633',NULL,0); INSERT INTO "usage" VALUES('EPSG','2009','projected_crs','EPSG','2993','EPSG','1406','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','2994','NAD83(HARN) / Oregon GIC Lambert (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15374',NULL,0); INSERT INTO "usage" VALUES('EPSG','2010','projected_crs','EPSG','2994','EPSG','1406','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','2995','IGN53 Mare / UTM zone 58S',NULL,'EPSG','4400','EPSG','4641','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','2011','projected_crs','EPSG','2995','EPSG','3434','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2996','ST84 Ile des Pins / UTM zone 58S',NULL,'EPSG','4400','EPSG','4642','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','2012','projected_crs','EPSG','2996','EPSG','2820','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2997','ST71 Belep / UTM zone 58S',NULL,'EPSG','4400','EPSG','4643','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','2013','projected_crs','EPSG','2997','EPSG','2821','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2998','NEA74 Noumea / UTM zone 58S',NULL,'EPSG','4400','EPSG','4644','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','2014','projected_crs','EPSG','2998','EPSG','2823','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','2999','Grand Comoros / UTM zone 38S',NULL,'EPSG','4400','EPSG','4646','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','2015','projected_crs','EPSG','2999','EPSG','2807','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3000','Segara / NEIEZ',NULL,'EPSG','4499','EPSG','4613','EPSG','19905',NULL,0); INSERT INTO "usage" VALUES('EPSG','2016','projected_crs','EPSG','3000','EPSG','1360','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3001','Batavia / NEIEZ',NULL,'EPSG','4499','EPSG','4211','EPSG','19905',NULL,0); INSERT INTO "usage" VALUES('EPSG','2017','projected_crs','EPSG','3001','EPSG','1285','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3002','Makassar / NEIEZ',NULL,'EPSG','4499','EPSG','4257','EPSG','19905',NULL,0); INSERT INTO "usage" VALUES('EPSG','2018','projected_crs','EPSG','3002','EPSG','1316','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3003','Monte Mario / Italy zone 1',NULL,'EPSG','4499','EPSG','4265','EPSG','18121',NULL,0); INSERT INTO "usage" VALUES('EPSG','2019','projected_crs','EPSG','3003','EPSG','1718','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3004','Monte Mario / Italy zone 2',NULL,'EPSG','4499','EPSG','4265','EPSG','18122',NULL,0); INSERT INTO "usage" VALUES('EPSG','2020','projected_crs','EPSG','3004','EPSG','1719','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3005','NAD83 / BC Albers',NULL,'EPSG','4400','EPSG','4269','EPSG','19984',NULL,0); INSERT INTO "usage" VALUES('EPSG','2021','projected_crs','EPSG','3005','EPSG','2832','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3006','SWEREF99 TM',NULL,'EPSG','4500','EPSG','4619','EPSG','17333',NULL,0); INSERT INTO "usage" VALUES('EPSG','2022','projected_crs','EPSG','3006','EPSG','1225','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3007','SWEREF99 12 00',NULL,'EPSG','4500','EPSG','4619','EPSG','17321',NULL,0); INSERT INTO "usage" VALUES('EPSG','2023','projected_crs','EPSG','3007','EPSG','2833','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3008','SWEREF99 13 30',NULL,'EPSG','4500','EPSG','4619','EPSG','17322',NULL,0); INSERT INTO "usage" VALUES('EPSG','2024','projected_crs','EPSG','3008','EPSG','2834','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3009','SWEREF99 15 00',NULL,'EPSG','4500','EPSG','4619','EPSG','17323',NULL,0); INSERT INTO "usage" VALUES('EPSG','2025','projected_crs','EPSG','3009','EPSG','2835','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3010','SWEREF99 16 30',NULL,'EPSG','4500','EPSG','4619','EPSG','17324',NULL,0); INSERT INTO "usage" VALUES('EPSG','2026','projected_crs','EPSG','3010','EPSG','2836','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3011','SWEREF99 18 00',NULL,'EPSG','4500','EPSG','4619','EPSG','17325',NULL,0); INSERT INTO "usage" VALUES('EPSG','2027','projected_crs','EPSG','3011','EPSG','2837','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3012','SWEREF99 14 15',NULL,'EPSG','4500','EPSG','4619','EPSG','17326',NULL,0); INSERT INTO "usage" VALUES('EPSG','2028','projected_crs','EPSG','3012','EPSG','2838','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3013','SWEREF99 15 45',NULL,'EPSG','4500','EPSG','4619','EPSG','17327',NULL,0); INSERT INTO "usage" VALUES('EPSG','2029','projected_crs','EPSG','3013','EPSG','2839','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3014','SWEREF99 17 15',NULL,'EPSG','4500','EPSG','4619','EPSG','17328',NULL,0); INSERT INTO "usage" VALUES('EPSG','2030','projected_crs','EPSG','3014','EPSG','2840','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3015','SWEREF99 18 45',NULL,'EPSG','4500','EPSG','4619','EPSG','17329',NULL,0); INSERT INTO "usage" VALUES('EPSG','2031','projected_crs','EPSG','3015','EPSG','2841','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3016','SWEREF99 20 15',NULL,'EPSG','4500','EPSG','4619','EPSG','17330',NULL,0); INSERT INTO "usage" VALUES('EPSG','2032','projected_crs','EPSG','3016','EPSG','2842','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3017','SWEREF99 21 45',NULL,'EPSG','4500','EPSG','4619','EPSG','17331',NULL,0); INSERT INTO "usage" VALUES('EPSG','2033','projected_crs','EPSG','3017','EPSG','2843','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3018','SWEREF99 23 15',NULL,'EPSG','4500','EPSG','4619','EPSG','17332',NULL,0); INSERT INTO "usage" VALUES('EPSG','2034','projected_crs','EPSG','3018','EPSG','2844','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3019','RT90 7.5 gon V',NULL,'EPSG','4530','EPSG','4124','EPSG','17334',NULL,0); INSERT INTO "usage" VALUES('EPSG','2035','projected_crs','EPSG','3019','EPSG','2845','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3020','RT90 5 gon V',NULL,'EPSG','4530','EPSG','4124','EPSG','17335',NULL,0); INSERT INTO "usage" VALUES('EPSG','2036','projected_crs','EPSG','3020','EPSG','2846','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3021','RT90 2.5 gon V',NULL,'EPSG','4530','EPSG','4124','EPSG','19929',NULL,0); INSERT INTO "usage" VALUES('EPSG','2037','projected_crs','EPSG','3021','EPSG','2847','EPSG','1055'); INSERT INTO "usage" VALUES('EPSG','2038','projected_crs','EPSG','3021','EPSG','3313','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3022','RT90 0 gon',NULL,'EPSG','4530','EPSG','4124','EPSG','17336',NULL,0); INSERT INTO "usage" VALUES('EPSG','2039','projected_crs','EPSG','3022','EPSG','2848','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3023','RT90 2.5 gon O',NULL,'EPSG','4530','EPSG','4124','EPSG','17337',NULL,0); INSERT INTO "usage" VALUES('EPSG','2040','projected_crs','EPSG','3023','EPSG','2849','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3024','RT90 5 gon O',NULL,'EPSG','4530','EPSG','4124','EPSG','17338',NULL,0); INSERT INTO "usage" VALUES('EPSG','2041','projected_crs','EPSG','3024','EPSG','2850','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3025','RT38 7.5 gon V',NULL,'EPSG','4530','EPSG','4308','EPSG','17334',NULL,0); INSERT INTO "usage" VALUES('EPSG','2042','projected_crs','EPSG','3025','EPSG','2845','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3026','RT38 5 gon V',NULL,'EPSG','4530','EPSG','4308','EPSG','17335',NULL,0); INSERT INTO "usage" VALUES('EPSG','2043','projected_crs','EPSG','3026','EPSG','2846','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3027','RT38 2.5 gon V',NULL,'EPSG','4530','EPSG','4308','EPSG','19929',NULL,0); INSERT INTO "usage" VALUES('EPSG','2044','projected_crs','EPSG','3027','EPSG','2847','EPSG','1055'); INSERT INTO "usage" VALUES('EPSG','2045','projected_crs','EPSG','3027','EPSG','3313','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3028','RT38 0 gon',NULL,'EPSG','4530','EPSG','4308','EPSG','17336',NULL,0); INSERT INTO "usage" VALUES('EPSG','2046','projected_crs','EPSG','3028','EPSG','2848','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3029','RT38 2.5 gon O',NULL,'EPSG','4530','EPSG','4308','EPSG','17337',NULL,0); INSERT INTO "usage" VALUES('EPSG','2047','projected_crs','EPSG','3029','EPSG','2849','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3030','RT38 5 gon O',NULL,'EPSG','4530','EPSG','4308','EPSG','17338',NULL,0); INSERT INTO "usage" VALUES('EPSG','2048','projected_crs','EPSG','3030','EPSG','2850','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3031','WGS 84 / Antarctic Polar Stereographic',NULL,'EPSG','4490','EPSG','4326','EPSG','19992',NULL,0); INSERT INTO "usage" VALUES('EPSG','2049','projected_crs','EPSG','3031','EPSG','1031','EPSG','1254'); INSERT INTO "projected_crs" VALUES('EPSG','3032','WGS 84 / Australian Antarctic Polar Stereographic',NULL,'EPSG','4489','EPSG','4326','EPSG','19993',NULL,0); INSERT INTO "usage" VALUES('EPSG','2050','projected_crs','EPSG','3032','EPSG','1278','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3033','WGS 84 / Australian Antarctic Lambert',NULL,'EPSG','4400','EPSG','4326','EPSG','19994',NULL,0); INSERT INTO "usage" VALUES('EPSG','2051','projected_crs','EPSG','3033','EPSG','2880','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3034','ETRS89-extended / LCC Europe',NULL,'EPSG','4500','EPSG','4258','EPSG','19985',NULL,0); INSERT INTO "usage" VALUES('EPSG','2052','projected_crs','EPSG','3034','EPSG','2881','EPSG','1107'); INSERT INTO "projected_crs" VALUES('EPSG','3035','ETRS89-extended / LAEA Europe',NULL,'EPSG','4532','EPSG','4258','EPSG','19986',NULL,0); INSERT INTO "usage" VALUES('EPSG','2053','projected_crs','EPSG','3035','EPSG','2881','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','3036','Moznet / UTM zone 36S',NULL,'EPSG','4400','EPSG','4130','EPSG','16136',NULL,0); INSERT INTO "usage" VALUES('EPSG','2054','projected_crs','EPSG','3036','EPSG','3929','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3037','Moznet / UTM zone 37S',NULL,'EPSG','4400','EPSG','4130','EPSG','16137',NULL,0); INSERT INTO "usage" VALUES('EPSG','2055','projected_crs','EPSG','3037','EPSG','3931','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3038','ETRS89 / TM26',NULL,'EPSG','4500','EPSG','4258','EPSG','16026',NULL,1); INSERT INTO "usage" VALUES('EPSG','2056','projected_crs','EPSG','3038','EPSG','2855','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3039','ETRS89 / TM27',NULL,'EPSG','4500','EPSG','4258','EPSG','16027',NULL,1); INSERT INTO "usage" VALUES('EPSG','2057','projected_crs','EPSG','3039','EPSG','2856','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3040','ETRS89 / UTM zone 28N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2058','projected_crs','EPSG','3040','EPSG','2122','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3041','ETRS89 / UTM zone 29N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2059','projected_crs','EPSG','3041','EPSG','4766','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3042','ETRS89 / UTM zone 30N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','2060','projected_crs','EPSG','3042','EPSG','4767','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3043','ETRS89 / UTM zone 31N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','2061','projected_crs','EPSG','3043','EPSG','4768','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3044','ETRS89 / UTM zone 32N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2062','projected_crs','EPSG','3044','EPSG','4769','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3045','ETRS89 / UTM zone 33N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2063','projected_crs','EPSG','3045','EPSG','4770','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3046','ETRS89 / UTM zone 34N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','2064','projected_crs','EPSG','3046','EPSG','4771','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3047','ETRS89 / UTM zone 35N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','2065','projected_crs','EPSG','3047','EPSG','4772','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3048','ETRS89 / UTM zone 36N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','2066','projected_crs','EPSG','3048','EPSG','4773','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3049','ETRS89 / UTM zone 37N (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','2067','projected_crs','EPSG','3049','EPSG','2131','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3050','ETRS89 / TM38',NULL,'EPSG','4500','EPSG','4258','EPSG','16038',NULL,1); INSERT INTO "usage" VALUES('EPSG','2068','projected_crs','EPSG','3050','EPSG','2867','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3051','ETRS89 / TM39',NULL,'EPSG','4500','EPSG','4258','EPSG','16039',NULL,1); INSERT INTO "usage" VALUES('EPSG','2069','projected_crs','EPSG','3051','EPSG','2868','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3052','Reykjavik 1900 / Lambert 1900',NULL,'EPSG','4491','EPSG','4657','EPSG','19987',NULL,0); INSERT INTO "usage" VALUES('EPSG','2070','projected_crs','EPSG','3052','EPSG','3262','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3053','Hjorsey 1955 / Lambert 1955',NULL,'EPSG','4491','EPSG','4658','EPSG','19988',NULL,0); INSERT INTO "usage" VALUES('EPSG','2071','projected_crs','EPSG','3053','EPSG','3262','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3054','Hjorsey 1955 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4658','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','2072','projected_crs','EPSG','3054','EPSG','2851','EPSG','1063'); INSERT INTO "projected_crs" VALUES('EPSG','3055','Hjorsey 1955 / UTM zone 27N',NULL,'EPSG','4400','EPSG','4658','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','2073','projected_crs','EPSG','3055','EPSG','2852','EPSG','1063'); INSERT INTO "projected_crs" VALUES('EPSG','3056','Hjorsey 1955 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4658','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2074','projected_crs','EPSG','3056','EPSG','2853','EPSG','1063'); INSERT INTO "projected_crs" VALUES('EPSG','3057','ISN93 / Lambert 1993',NULL,'EPSG','4499','EPSG','4659','EPSG','19989',NULL,0); INSERT INTO "usage" VALUES('EPSG','2075','projected_crs','EPSG','3057','EPSG','1120','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3058','Helle 1954 / Jan Mayen Grid',NULL,'EPSG','4531','EPSG','4660','EPSG','19991',NULL,0); INSERT INTO "usage" VALUES('EPSG','2076','projected_crs','EPSG','3058','EPSG','2869','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3059','LKS-92 / Latvia TM',NULL,'EPSG','4530','EPSG','4661','EPSG','19990',NULL,0); INSERT INTO "usage" VALUES('EPSG','2077','projected_crs','EPSG','3059','EPSG','1139','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3060','IGN72 Grande Terre / UTM zone 58S',NULL,'EPSG','4400','EPSG','4662','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','2078','projected_crs','EPSG','3060','EPSG','2822','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3061','Porto Santo 1995 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4663','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2079','projected_crs','EPSG','3061','EPSG','1314','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3062','Azores Oriental 1995 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4664','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','2080','projected_crs','EPSG','3062','EPSG','1345','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3063','Azores Central 1995 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4665','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','2081','projected_crs','EPSG','3063','EPSG','1301','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3064','IGM95 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4670','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','14405','projected_crs','EPSG','3064','EPSG','1718','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','3065','IGM95 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4670','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','14406','projected_crs','EPSG','3065','EPSG','4186','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','3066','ED50 / Jordan TM',NULL,'EPSG','4400','EPSG','4230','EPSG','19995',NULL,0); INSERT INTO "usage" VALUES('EPSG','2084','projected_crs','EPSG','3066','EPSG','1130','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3067','EUREF-FIN / TM35FIN(E,N)',NULL,'EPSG','4400','EPSG','10690','EPSG','16065',NULL,0); INSERT INTO "usage" VALUES('EPSG','2085','projected_crs','EPSG','3067','EPSG','1095','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21990','projected_crs','EPSG','3067','EPSG','4782','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','3068','DHDN / Soldner Berlin',NULL,'EPSG','4531','EPSG','4314','EPSG','19996',NULL,0); INSERT INTO "usage" VALUES('EPSG','2086','projected_crs','EPSG','3068','EPSG','2898','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3069','NAD27 / Wisconsin Transverse Mercator',NULL,'EPSG','4499','EPSG','4267','EPSG','14811',NULL,0); INSERT INTO "usage" VALUES('EPSG','2087','projected_crs','EPSG','3069','EPSG','1418','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3070','NAD83 / Wisconsin Transverse Mercator',NULL,'EPSG','4499','EPSG','4269','EPSG','14841',NULL,0); INSERT INTO "usage" VALUES('EPSG','2088','projected_crs','EPSG','3070','EPSG','1418','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3071','NAD83(HARN) / Wisconsin Transverse Mercator',NULL,'EPSG','4499','EPSG','4152','EPSG','14841',NULL,0); INSERT INTO "usage" VALUES('EPSG','2089','projected_crs','EPSG','3071','EPSG','1418','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3072','NAD83 / Maine CS2000 East',NULL,'EPSG','4499','EPSG','4269','EPSG','11851',NULL,0); INSERT INTO "usage" VALUES('EPSG','2090','projected_crs','EPSG','3072','EPSG','2960','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3073','NAD83 / Maine CS2000 Central',NULL,'EPSG','4499','EPSG','4269','EPSG','11852',NULL,1); INSERT INTO "usage" VALUES('EPSG','2091','projected_crs','EPSG','3073','EPSG','2959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3074','NAD83 / Maine CS2000 West',NULL,'EPSG','4499','EPSG','4269','EPSG','11853',NULL,0); INSERT INTO "usage" VALUES('EPSG','2092','projected_crs','EPSG','3074','EPSG','2958','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3075','NAD83(HARN) / Maine CS2000 East',NULL,'EPSG','4499','EPSG','4152','EPSG','11851',NULL,0); INSERT INTO "usage" VALUES('EPSG','2093','projected_crs','EPSG','3075','EPSG','2960','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3076','NAD83(HARN) / Maine CS2000 Central',NULL,'EPSG','4499','EPSG','4152','EPSG','11852',NULL,1); INSERT INTO "usage" VALUES('EPSG','2094','projected_crs','EPSG','3076','EPSG','2959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3077','NAD83(HARN) / Maine CS2000 West',NULL,'EPSG','4499','EPSG','4152','EPSG','11853',NULL,0); INSERT INTO "usage" VALUES('EPSG','2095','projected_crs','EPSG','3077','EPSG','2958','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3078','NAD83 / Michigan Oblique Mercator',NULL,'EPSG','4499','EPSG','4269','EPSG','12150',NULL,0); INSERT INTO "usage" VALUES('EPSG','2096','projected_crs','EPSG','3078','EPSG','1391','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3079','NAD83(HARN) / Michigan Oblique Mercator',NULL,'EPSG','4499','EPSG','4152','EPSG','12150',NULL,0); INSERT INTO "usage" VALUES('EPSG','2097','projected_crs','EPSG','3079','EPSG','1391','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3080','NAD27 / Shackleford',NULL,'EPSG','4495','EPSG','4267','EPSG','14252',NULL,0); INSERT INTO "usage" VALUES('EPSG','2098','projected_crs','EPSG','3080','EPSG','1412','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3081','NAD83 / Texas State Mapping System',NULL,'EPSG','4499','EPSG','4269','EPSG','14251',NULL,0); INSERT INTO "usage" VALUES('EPSG','2099','projected_crs','EPSG','3081','EPSG','1412','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3082','NAD83 / Texas Centric Lambert Conformal',NULL,'EPSG','4499','EPSG','4269','EPSG','14253',NULL,0); INSERT INTO "usage" VALUES('EPSG','2100','projected_crs','EPSG','3082','EPSG','1412','EPSG','1221'); INSERT INTO "projected_crs" VALUES('EPSG','3083','NAD83 / Texas Centric Albers Equal Area',NULL,'EPSG','4499','EPSG','4269','EPSG','14254',NULL,0); INSERT INTO "usage" VALUES('EPSG','2101','projected_crs','EPSG','3083','EPSG','1412','EPSG','1222'); INSERT INTO "projected_crs" VALUES('EPSG','3084','NAD83(HARN) / Texas Centric Lambert Conformal',NULL,'EPSG','4499','EPSG','4152','EPSG','14253',NULL,0); INSERT INTO "usage" VALUES('EPSG','2102','projected_crs','EPSG','3084','EPSG','1412','EPSG','1221'); INSERT INTO "projected_crs" VALUES('EPSG','3085','NAD83(HARN) / Texas Centric Albers Equal Area',NULL,'EPSG','4499','EPSG','4152','EPSG','14254',NULL,0); INSERT INTO "usage" VALUES('EPSG','2103','projected_crs','EPSG','3085','EPSG','1412','EPSG','1222'); INSERT INTO "projected_crs" VALUES('EPSG','3086','NAD83 / Florida GDL Albers',NULL,'EPSG','4499','EPSG','4269','EPSG','10934',NULL,0); INSERT INTO "usage" VALUES('EPSG','2104','projected_crs','EPSG','3086','EPSG','1379','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3087','NAD83(HARN) / Florida GDL Albers',NULL,'EPSG','4499','EPSG','4152','EPSG','10934',NULL,0); INSERT INTO "usage" VALUES('EPSG','2105','projected_crs','EPSG','3087','EPSG','1379','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3088','NAD83 / Kentucky Single Zone',NULL,'EPSG','4499','EPSG','4269','EPSG','11630',NULL,0); INSERT INTO "usage" VALUES('EPSG','2106','projected_crs','EPSG','3088','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3089','NAD83 / Kentucky Single Zone (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15375',NULL,0); INSERT INTO "usage" VALUES('EPSG','2107','projected_crs','EPSG','3089','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3090','NAD83(HARN) / Kentucky Single Zone',NULL,'EPSG','4499','EPSG','4152','EPSG','11630',NULL,0); INSERT INTO "usage" VALUES('EPSG','2108','projected_crs','EPSG','3090','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3091','NAD83(HARN) / Kentucky Single Zone (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15375',NULL,0); INSERT INTO "usage" VALUES('EPSG','2109','projected_crs','EPSG','3091','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3092','Tokyo / UTM zone 51N',NULL,'EPSG','4400','EPSG','4301','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','2110','projected_crs','EPSG','3092','EPSG','2951','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3093','Tokyo / UTM zone 52N',NULL,'EPSG','4400','EPSG','4301','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','2111','projected_crs','EPSG','3093','EPSG','2952','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3094','Tokyo / UTM zone 53N',NULL,'EPSG','4400','EPSG','4301','EPSG','16053',NULL,0); INSERT INTO "usage" VALUES('EPSG','2112','projected_crs','EPSG','3094','EPSG','2953','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3095','Tokyo / UTM zone 54N',NULL,'EPSG','4400','EPSG','4301','EPSG','16054',NULL,0); INSERT INTO "usage" VALUES('EPSG','2113','projected_crs','EPSG','3095','EPSG','2954','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3096','Tokyo / UTM zone 55N',NULL,'EPSG','4400','EPSG','4301','EPSG','16055',NULL,0); INSERT INTO "usage" VALUES('EPSG','2114','projected_crs','EPSG','3096','EPSG','2955','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3097','JGD2000 / UTM zone 51N',NULL,'EPSG','4400','EPSG','4612','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','2115','projected_crs','EPSG','3097','EPSG','3959','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3098','JGD2000 / UTM zone 52N',NULL,'EPSG','4400','EPSG','4612','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','2116','projected_crs','EPSG','3098','EPSG','3960','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3099','JGD2000 / UTM zone 53N',NULL,'EPSG','4400','EPSG','4612','EPSG','16053',NULL,0); INSERT INTO "usage" VALUES('EPSG','2117','projected_crs','EPSG','3099','EPSG','3961','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3100','JGD2000 / UTM zone 54N',NULL,'EPSG','4400','EPSG','4612','EPSG','16054',NULL,0); INSERT INTO "usage" VALUES('EPSG','2118','projected_crs','EPSG','3100','EPSG','3962','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3101','JGD2000 / UTM zone 55N',NULL,'EPSG','4400','EPSG','4612','EPSG','16055',NULL,0); INSERT INTO "usage" VALUES('EPSG','2119','projected_crs','EPSG','3101','EPSG','3963','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3102','American Samoa 1962 / American Samoa Lambert',NULL,'EPSG','4497','EPSG','4169','EPSG','15376',NULL,0); INSERT INTO "usage" VALUES('EPSG','2120','projected_crs','EPSG','3102','EPSG','3109','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3103','Mauritania 1999 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4681','EPSG','16028',NULL,1); INSERT INTO "usage" VALUES('EPSG','2121','projected_crs','EPSG','3103','EPSG','2971','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3104','Mauritania 1999 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4681','EPSG','16029',NULL,1); INSERT INTO "usage" VALUES('EPSG','2122','projected_crs','EPSG','3104','EPSG','2970','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3105','Mauritania 1999 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4681','EPSG','16030',NULL,1); INSERT INTO "usage" VALUES('EPSG','2123','projected_crs','EPSG','3105','EPSG','2969','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3106','Gulshan 303 / TM 90 NE',NULL,'EPSG','4400','EPSG','4682','EPSG','16490',NULL,0); INSERT INTO "usage" VALUES('EPSG','2124','projected_crs','EPSG','3106','EPSG','3217','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','14846','projected_crs','EPSG','3106','EPSG','1041','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3107','GDA94 / SA Lambert',NULL,'EPSG','4400','EPSG','4283','EPSG','17359',NULL,0); INSERT INTO "usage" VALUES('EPSG','2125','projected_crs','EPSG','3107','EPSG','2986','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3108','ETRS89 / Guernsey Grid',NULL,'EPSG','4400','EPSG','4258','EPSG','19998',NULL,0); INSERT INTO "usage" VALUES('EPSG','2126','projected_crs','EPSG','3108','EPSG','2989','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3109','ETRS89 / Jersey Transverse Mercator',NULL,'EPSG','4400','EPSG','4258','EPSG','19999',NULL,0); INSERT INTO "usage" VALUES('EPSG','2127','projected_crs','EPSG','3109','EPSG','2988','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3110','AGD66 / Vicgrid66',NULL,'EPSG','4400','EPSG','4202','EPSG','17360',NULL,0); INSERT INTO "usage" VALUES('EPSG','2128','projected_crs','EPSG','3110','EPSG','2285','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3111','GDA94 / Vicgrid',NULL,'EPSG','4400','EPSG','4283','EPSG','17361',NULL,0); INSERT INTO "usage" VALUES('EPSG','2129','projected_crs','EPSG','3111','EPSG','2285','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3112','GDA94 / Geoscience Australia Lambert',NULL,'EPSG','4400','EPSG','4283','EPSG','17362',NULL,0); INSERT INTO "usage" VALUES('EPSG','2130','projected_crs','EPSG','3112','EPSG','2575','EPSG','1236'); INSERT INTO "projected_crs" VALUES('EPSG','3113','GDA94 / BCSG02',NULL,'EPSG','4400','EPSG','4283','EPSG','17363',NULL,0); INSERT INTO "usage" VALUES('EPSG','2131','projected_crs','EPSG','3113','EPSG','2990','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','3114','MAGNA-SIRGAS / Colombia Far West zone',NULL,'EPSG','4500','EPSG','4686','EPSG','18055',NULL,0); INSERT INTO "usage" VALUES('EPSG','2132','projected_crs','EPSG','3114','EPSG','3091','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3115','MAGNA-SIRGAS / Colombia West zone',NULL,'EPSG','4500','EPSG','4686','EPSG','18056',NULL,0); INSERT INTO "usage" VALUES('EPSG','2133','projected_crs','EPSG','3115','EPSG','3090','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3116','MAGNA-SIRGAS / Colombia Bogota zone',NULL,'EPSG','4500','EPSG','4686','EPSG','18057',NULL,0); INSERT INTO "usage" VALUES('EPSG','2134','projected_crs','EPSG','3116','EPSG','1599','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','3117','MAGNA-SIRGAS / Colombia East Central zone',NULL,'EPSG','4500','EPSG','4686','EPSG','18058',NULL,0); INSERT INTO "usage" VALUES('EPSG','2136','projected_crs','EPSG','3117','EPSG','1600','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3118','MAGNA-SIRGAS / Colombia East zone',NULL,'EPSG','4500','EPSG','4686','EPSG','18059',NULL,0); INSERT INTO "usage" VALUES('EPSG','2137','projected_crs','EPSG','3118','EPSG','1601','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3119','Douala 1948 / AEF west',NULL,'EPSG','4400','EPSG','4192','EPSG','18415',NULL,0); INSERT INTO "usage" VALUES('EPSG','2138','projected_crs','EPSG','3119','EPSG','2555','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3120','Pulkovo 1942(58) / Poland zone I',NULL,'EPSG','4530','EPSG','4179','EPSG','18280',NULL,0); INSERT INTO "usage" VALUES('EPSG','2139','projected_crs','EPSG','3120','EPSG','1515','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3121','PRS92 / Philippines zone 1',NULL,'EPSG','4499','EPSG','4683','EPSG','18171',NULL,0); INSERT INTO "usage" VALUES('EPSG','2140','projected_crs','EPSG','3121','EPSG','1698','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3122','PRS92 / Philippines zone 2',NULL,'EPSG','4499','EPSG','4683','EPSG','18172',NULL,0); INSERT INTO "usage" VALUES('EPSG','2141','projected_crs','EPSG','3122','EPSG','1699','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3123','PRS92 / Philippines zone 3',NULL,'EPSG','4499','EPSG','4683','EPSG','18173',NULL,0); INSERT INTO "usage" VALUES('EPSG','2142','projected_crs','EPSG','3123','EPSG','1700','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3124','PRS92 / Philippines zone 4',NULL,'EPSG','4499','EPSG','4683','EPSG','18174',NULL,0); INSERT INTO "usage" VALUES('EPSG','2143','projected_crs','EPSG','3124','EPSG','1701','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3125','PRS92 / Philippines zone 5',NULL,'EPSG','4499','EPSG','4683','EPSG','18175',NULL,0); INSERT INTO "usage" VALUES('EPSG','2144','projected_crs','EPSG','3125','EPSG','1702','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3126','EUREF-FIN / ETRS-GK19FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18183',NULL,0); INSERT INTO "usage" VALUES('EPSG','2145','projected_crs','EPSG','3126','EPSG','3092','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3127','EUREF-FIN / ETRS-GK20FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18184',NULL,0); INSERT INTO "usage" VALUES('EPSG','2146','projected_crs','EPSG','3127','EPSG','3093','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3128','EUREF-FIN / ETRS-GK21FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18185',NULL,0); INSERT INTO "usage" VALUES('EPSG','2147','projected_crs','EPSG','3128','EPSG','3094','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3129','EUREF-FIN / ETRS-GK22FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18186',NULL,0); INSERT INTO "usage" VALUES('EPSG','2148','projected_crs','EPSG','3129','EPSG','3095','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3130','EUREF-FIN / ETRS-GK23FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18187',NULL,0); INSERT INTO "usage" VALUES('EPSG','2149','projected_crs','EPSG','3130','EPSG','3096','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3131','EUREF-FIN / ETRS-GK24FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18188',NULL,0); INSERT INTO "usage" VALUES('EPSG','2150','projected_crs','EPSG','3131','EPSG','3097','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3132','EUREF-FIN / ETRS-GK25FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18189',NULL,0); INSERT INTO "usage" VALUES('EPSG','2151','projected_crs','EPSG','3132','EPSG','3098','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3133','EUREF-FIN / ETRS-GK26FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18190',NULL,0); INSERT INTO "usage" VALUES('EPSG','2152','projected_crs','EPSG','3133','EPSG','3099','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3134','EUREF-FIN / ETRS-GK27FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18195',NULL,0); INSERT INTO "usage" VALUES('EPSG','2153','projected_crs','EPSG','3134','EPSG','3100','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3135','EUREF-FIN / ETRS-GK28FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18196',NULL,0); INSERT INTO "usage" VALUES('EPSG','2154','projected_crs','EPSG','3135','EPSG','3101','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3136','EUREF-FIN / ETRS-GK29FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18197',NULL,0); INSERT INTO "usage" VALUES('EPSG','2155','projected_crs','EPSG','3136','EPSG','3102','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3137','EUREF-FIN / ETRS-GK30FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18198',NULL,0); INSERT INTO "usage" VALUES('EPSG','2156','projected_crs','EPSG','3137','EPSG','3103','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3138','EUREF-FIN / ETRS-GK31FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','18199',NULL,0); INSERT INTO "usage" VALUES('EPSG','2157','projected_crs','EPSG','3138','EPSG','3104','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3139','Vanua Levu 1915 / Vanua Levu Grid',NULL,'EPSG','4533','EPSG','4748','EPSG','19878',NULL,0); INSERT INTO "usage" VALUES('EPSG','2158','projected_crs','EPSG','3139','EPSG','3401','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3140','Viti Levu 1912 / Viti Levu Grid',NULL,'EPSG','4533','EPSG','4752','EPSG','19879',NULL,0); INSERT INTO "usage" VALUES('EPSG','2159','projected_crs','EPSG','3140','EPSG','3195','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3141','Fiji 1956 / UTM zone 60S',NULL,'EPSG','4400','EPSG','4721','EPSG','16160',NULL,0); INSERT INTO "usage" VALUES('EPSG','2160','projected_crs','EPSG','3141','EPSG','3399','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3142','Fiji 1956 / UTM zone 1S',NULL,'EPSG','4400','EPSG','4721','EPSG','16101',NULL,0); INSERT INTO "usage" VALUES('EPSG','2161','projected_crs','EPSG','3142','EPSG','3400','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3143','Fiji 1986 / Fiji Map Grid',NULL,'EPSG','4400','EPSG','4720','EPSG','19880',NULL,1); INSERT INTO "usage" VALUES('EPSG','2162','projected_crs','EPSG','3143','EPSG','1094','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3144','FD54 / Faroe Lambert',NULL,'EPSG','1031','EPSG','4741','EPSG','19870',NULL,0); INSERT INTO "usage" VALUES('EPSG','2163','projected_crs','EPSG','3144','EPSG','3248','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3145','ETRS89 / Faroe Lambert',NULL,'EPSG','1031','EPSG','4258','EPSG','19870',NULL,0); INSERT INTO "usage" VALUES('EPSG','2164','projected_crs','EPSG','3145','EPSG','3248','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3146','Pulkovo 1942 / 3-degree Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','4284','EPSG','16266',NULL,1); INSERT INTO "usage" VALUES('EPSG','2165','projected_crs','EPSG','3146','EPSG','3403','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3147','Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E',NULL,'EPSG','4530','EPSG','4284','EPSG','16366',NULL,1); INSERT INTO "usage" VALUES('EPSG','2166','projected_crs','EPSG','3147','EPSG','3403','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3148','Indian 1960 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4131','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','2167','projected_crs','EPSG','3148','EPSG','1542','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3149','Indian 1960 / UTM zone 49N',NULL,'EPSG','4400','EPSG','4131','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','2168','projected_crs','EPSG','3149','EPSG','1453','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3150','Pulkovo 1995 / 3-degree Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','4200','EPSG','16266',NULL,1); INSERT INTO "usage" VALUES('EPSG','2169','projected_crs','EPSG','3150','EPSG','3403','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3151','Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E',NULL,'EPSG','4530','EPSG','4200','EPSG','16366',NULL,1); INSERT INTO "usage" VALUES('EPSG','2170','projected_crs','EPSG','3151','EPSG','3403','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3152','ST74',NULL,'EPSG','4531','EPSG','4619','EPSG','19876',NULL,0); INSERT INTO "usage" VALUES('EPSG','2171','projected_crs','EPSG','3152','EPSG','3408','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3153','NAD83(CSRS) / BC Albers',NULL,'EPSG','4400','EPSG','4617','EPSG','19984',NULL,0); INSERT INTO "usage" VALUES('EPSG','2172','projected_crs','EPSG','3153','EPSG','2832','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3154','NAD83(CSRS) / UTM zone 7N',NULL,'EPSG','4400','EPSG','4617','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','2173','projected_crs','EPSG','3154','EPSG','3409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3155','NAD83(CSRS) / UTM zone 8N',NULL,'EPSG','4400','EPSG','4617','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','2174','projected_crs','EPSG','3155','EPSG','3410','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3156','NAD83(CSRS) / UTM zone 9N',NULL,'EPSG','4400','EPSG','4617','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','2175','projected_crs','EPSG','3156','EPSG','3411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3157','NAD83(CSRS) / UTM zone 10N',NULL,'EPSG','4400','EPSG','4617','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','2176','projected_crs','EPSG','3157','EPSG','3412','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3158','NAD83(CSRS) / UTM zone 14N',NULL,'EPSG','4400','EPSG','4617','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','2177','projected_crs','EPSG','3158','EPSG','3413','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3159','NAD83(CSRS) / UTM zone 15N',NULL,'EPSG','4400','EPSG','4617','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','2178','projected_crs','EPSG','3159','EPSG','3414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3160','NAD83(CSRS) / UTM zone 16N',NULL,'EPSG','4400','EPSG','4617','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','2179','projected_crs','EPSG','3160','EPSG','3415','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3161','NAD83 / Ontario MNR Lambert',NULL,'EPSG','4400','EPSG','4269','EPSG','19875',NULL,0); INSERT INTO "usage" VALUES('EPSG','2180','projected_crs','EPSG','3161','EPSG','1367','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3162','NAD83(CSRS) / Ontario MNR Lambert',NULL,'EPSG','4400','EPSG','4617','EPSG','19875',NULL,0); INSERT INTO "usage" VALUES('EPSG','2181','projected_crs','EPSG','3162','EPSG','1367','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3163','RGNC91-93 / Lambert New Caledonia',NULL,'EPSG','4499','EPSG','4749','EPSG','19981',NULL,0); INSERT INTO "usage" VALUES('EPSG','2182','projected_crs','EPSG','3163','EPSG','3430','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3164','ST87 Ouvea / UTM zone 58S',NULL,'EPSG','4400','EPSG','4750','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','2183','projected_crs','EPSG','3164','EPSG','2813','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3165','NEA74 Noumea / Noumea Lambert',NULL,'EPSG','4499','EPSG','4644','EPSG','19873',NULL,0); INSERT INTO "usage" VALUES('EPSG','2184','projected_crs','EPSG','3165','EPSG','2823','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3166','NEA74 Noumea / Noumea Lambert 2',NULL,'EPSG','4499','EPSG','4644','EPSG','19874',NULL,0); INSERT INTO "usage" VALUES('EPSG','2185','projected_crs','EPSG','3166','EPSG','2823','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3167','Kertau (RSO) / RSO Malaya (ch)',NULL,'EPSG','4410','EPSG','4751','EPSG','19871',NULL,0); INSERT INTO "usage" VALUES('EPSG','2186','projected_crs','EPSG','3167','EPSG','1690','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3168','Kertau (RSO) / RSO Malaya (m)',NULL,'EPSG','4400','EPSG','4751','EPSG','19872',NULL,0); INSERT INTO "usage" VALUES('EPSG','2187','projected_crs','EPSG','3168','EPSG','1690','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3169','RGNC91-93 / UTM zone 57S',NULL,'EPSG','4400','EPSG','4749','EPSG','16157',NULL,0); INSERT INTO "usage" VALUES('EPSG','2188','projected_crs','EPSG','3169','EPSG','3431','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3170','RGNC91-93 / UTM zone 58S',NULL,'EPSG','4400','EPSG','4749','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','2189','projected_crs','EPSG','3170','EPSG','3432','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3171','RGNC91-93 / UTM zone 59S',NULL,'EPSG','4400','EPSG','4749','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','2190','projected_crs','EPSG','3171','EPSG','3433','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3172','IGN53 Mare / UTM zone 59S',NULL,'EPSG','4400','EPSG','4641','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','2191','projected_crs','EPSG','3172','EPSG','3435','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3173','fk89 / Faroe Lambert FK89',NULL,'EPSG','1031','EPSG','4753','EPSG','19877',NULL,0); INSERT INTO "usage" VALUES('EPSG','2192','projected_crs','EPSG','3173','EPSG','3248','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3174','NAD83 / Great Lakes Albers',NULL,'EPSG','4499','EPSG','4269','EPSG','15397',NULL,0); INSERT INTO "usage" VALUES('EPSG','2193','projected_crs','EPSG','3174','EPSG','3467','EPSG','1052'); INSERT INTO "projected_crs" VALUES('EPSG','3175','NAD83 / Great Lakes and St Lawrence Albers',NULL,'EPSG','4499','EPSG','4269','EPSG','15398',NULL,0); INSERT INTO "usage" VALUES('EPSG','2194','projected_crs','EPSG','3175','EPSG','3468','EPSG','1052'); INSERT INTO "projected_crs" VALUES('EPSG','3176','Indian 1960 / TM 106 NE',NULL,'EPSG','4400','EPSG','4131','EPSG','16506',NULL,0); INSERT INTO "usage" VALUES('EPSG','2195','projected_crs','EPSG','3176','EPSG','1495','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3177','LGD2006 / Libya TM',NULL,'EPSG','4499','EPSG','4754','EPSG','18319',NULL,0); INSERT INTO "usage" VALUES('EPSG','2196','projected_crs','EPSG','3177','EPSG','1143','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3178','GR96 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4747','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','2197','projected_crs','EPSG','3178','EPSG','3449','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3179','GR96 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4747','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','2198','projected_crs','EPSG','3179','EPSG','3450','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3180','GR96 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4747','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','2199','projected_crs','EPSG','3180','EPSG','3451','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3181','GR96 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4747','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','2200','projected_crs','EPSG','3181','EPSG','3452','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3182','GR96 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4747','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','2201','projected_crs','EPSG','3182','EPSG','3453','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3183','GR96 / UTM zone 23N',NULL,'EPSG','4400','EPSG','4747','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','2202','projected_crs','EPSG','3183','EPSG','3454','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3184','GR96 / UTM zone 24N',NULL,'EPSG','4400','EPSG','4747','EPSG','16024',NULL,0); INSERT INTO "usage" VALUES('EPSG','2203','projected_crs','EPSG','3184','EPSG','3455','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3185','GR96 / UTM zone 25N',NULL,'EPSG','4400','EPSG','4747','EPSG','16025',NULL,0); INSERT INTO "usage" VALUES('EPSG','2204','projected_crs','EPSG','3185','EPSG','3456','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3186','GR96 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4747','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','2205','projected_crs','EPSG','3186','EPSG','3457','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3187','GR96 / UTM zone 27N',NULL,'EPSG','4400','EPSG','4747','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','2206','projected_crs','EPSG','3187','EPSG','3458','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3188','GR96 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4747','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2207','projected_crs','EPSG','3188','EPSG','3459','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3189','GR96 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4747','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2208','projected_crs','EPSG','3189','EPSG','3460','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3190','LGD2006 / Libya TM zone 5',NULL,'EPSG','4499','EPSG','4754','EPSG','18310',NULL,0); INSERT INTO "usage" VALUES('EPSG','2209','projected_crs','EPSG','3190','EPSG','1470','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3191','LGD2006 / Libya TM zone 6',NULL,'EPSG','4499','EPSG','4754','EPSG','18311',NULL,0); INSERT INTO "usage" VALUES('EPSG','2210','projected_crs','EPSG','3191','EPSG','1471','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3192','LGD2006 / Libya TM zone 7',NULL,'EPSG','4499','EPSG','4754','EPSG','18312',NULL,0); INSERT INTO "usage" VALUES('EPSG','2211','projected_crs','EPSG','3192','EPSG','1472','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3193','LGD2006 / Libya TM zone 8',NULL,'EPSG','4499','EPSG','4754','EPSG','18313',NULL,0); INSERT INTO "usage" VALUES('EPSG','2212','projected_crs','EPSG','3193','EPSG','1473','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3194','LGD2006 / Libya TM zone 9',NULL,'EPSG','4499','EPSG','4754','EPSG','18314',NULL,0); INSERT INTO "usage" VALUES('EPSG','2213','projected_crs','EPSG','3194','EPSG','1474','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3195','LGD2006 / Libya TM zone 10',NULL,'EPSG','4499','EPSG','4754','EPSG','18315',NULL,0); INSERT INTO "usage" VALUES('EPSG','2214','projected_crs','EPSG','3195','EPSG','1475','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3196','LGD2006 / Libya TM zone 11',NULL,'EPSG','4499','EPSG','4754','EPSG','18316',NULL,0); INSERT INTO "usage" VALUES('EPSG','2215','projected_crs','EPSG','3196','EPSG','1476','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3197','LGD2006 / Libya TM zone 12',NULL,'EPSG','4499','EPSG','4754','EPSG','18317',NULL,0); INSERT INTO "usage" VALUES('EPSG','2216','projected_crs','EPSG','3197','EPSG','1477','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3198','LGD2006 / Libya TM zone 13',NULL,'EPSG','4499','EPSG','4754','EPSG','18318',NULL,0); INSERT INTO "usage" VALUES('EPSG','2217','projected_crs','EPSG','3198','EPSG','1478','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','3199','LGD2006 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4754','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2218','projected_crs','EPSG','3199','EPSG','3949','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3200','FD58 / Iraq zone',NULL,'EPSG','4400','EPSG','4132','EPSG','19906',NULL,0); INSERT INTO "usage" VALUES('EPSG','2219','projected_crs','EPSG','3200','EPSG','1300','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3201','LGD2006 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4754','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2220','projected_crs','EPSG','3201','EPSG','3950','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3202','LGD2006 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4754','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','2221','projected_crs','EPSG','3202','EPSG','3951','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3203','LGD2006 / UTM zone 35N',NULL,'EPSG','4400','EPSG','4754','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','2222','projected_crs','EPSG','3203','EPSG','3941','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3204','WGS 84 / SCAR IMW SP19-20',NULL,'EPSG','4400','EPSG','4326','EPSG','17204',NULL,0); INSERT INTO "usage" VALUES('EPSG','2223','projected_crs','EPSG','3204','EPSG','2991','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3205','WGS 84 / SCAR IMW SP21-22',NULL,'EPSG','4400','EPSG','4326','EPSG','17205',NULL,0); INSERT INTO "usage" VALUES('EPSG','2224','projected_crs','EPSG','3205','EPSG','2992','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3206','WGS 84 / SCAR IMW SP23-24',NULL,'EPSG','4400','EPSG','4326','EPSG','17206',NULL,0); INSERT INTO "usage" VALUES('EPSG','2225','projected_crs','EPSG','3206','EPSG','2993','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3207','WGS 84 / SCAR IMW SQ01-02',NULL,'EPSG','4400','EPSG','4326','EPSG','17207',NULL,0); INSERT INTO "usage" VALUES('EPSG','2226','projected_crs','EPSG','3207','EPSG','2994','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3208','WGS 84 / SCAR IMW SQ19-20',NULL,'EPSG','4400','EPSG','4326','EPSG','17208',NULL,0); INSERT INTO "usage" VALUES('EPSG','2227','projected_crs','EPSG','3208','EPSG','2995','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3209','WGS 84 / SCAR IMW SQ21-22',NULL,'EPSG','4400','EPSG','4326','EPSG','17209',NULL,0); INSERT INTO "usage" VALUES('EPSG','2228','projected_crs','EPSG','3209','EPSG','2996','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3210','WGS 84 / SCAR IMW SQ37-38',NULL,'EPSG','4400','EPSG','4326','EPSG','17210',NULL,0); INSERT INTO "usage" VALUES('EPSG','2229','projected_crs','EPSG','3210','EPSG','2997','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3211','WGS 84 / SCAR IMW SQ39-40',NULL,'EPSG','4400','EPSG','4326','EPSG','17211',NULL,0); INSERT INTO "usage" VALUES('EPSG','2230','projected_crs','EPSG','3211','EPSG','2998','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3212','WGS 84 / SCAR IMW SQ41-42',NULL,'EPSG','4400','EPSG','4326','EPSG','17212',NULL,0); INSERT INTO "usage" VALUES('EPSG','2231','projected_crs','EPSG','3212','EPSG','2999','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3213','WGS 84 / SCAR IMW SQ43-44',NULL,'EPSG','4400','EPSG','4326','EPSG','17213',NULL,0); INSERT INTO "usage" VALUES('EPSG','2232','projected_crs','EPSG','3213','EPSG','3000','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3214','WGS 84 / SCAR IMW SQ45-46',NULL,'EPSG','4400','EPSG','4326','EPSG','17214',NULL,0); INSERT INTO "usage" VALUES('EPSG','2233','projected_crs','EPSG','3214','EPSG','3001','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3215','WGS 84 / SCAR IMW SQ47-48',NULL,'EPSG','4400','EPSG','4326','EPSG','17215',NULL,0); INSERT INTO "usage" VALUES('EPSG','2234','projected_crs','EPSG','3215','EPSG','3002','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3216','WGS 84 / SCAR IMW SQ49-50',NULL,'EPSG','4400','EPSG','4326','EPSG','17216',NULL,0); INSERT INTO "usage" VALUES('EPSG','2235','projected_crs','EPSG','3216','EPSG','3003','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3217','WGS 84 / SCAR IMW SQ51-52',NULL,'EPSG','4400','EPSG','4326','EPSG','17217',NULL,0); INSERT INTO "usage" VALUES('EPSG','2236','projected_crs','EPSG','3217','EPSG','3004','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3218','WGS 84 / SCAR IMW SQ53-54',NULL,'EPSG','4400','EPSG','4326','EPSG','17218',NULL,0); INSERT INTO "usage" VALUES('EPSG','2237','projected_crs','EPSG','3218','EPSG','3005','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3219','WGS 84 / SCAR IMW SQ55-56',NULL,'EPSG','4400','EPSG','4326','EPSG','17219',NULL,0); INSERT INTO "usage" VALUES('EPSG','2238','projected_crs','EPSG','3219','EPSG','3006','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3220','WGS 84 / SCAR IMW SQ57-58',NULL,'EPSG','4400','EPSG','4326','EPSG','17220',NULL,0); INSERT INTO "usage" VALUES('EPSG','2239','projected_crs','EPSG','3220','EPSG','3007','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3221','WGS 84 / SCAR IMW SR13-14',NULL,'EPSG','4400','EPSG','4326','EPSG','17221',NULL,0); INSERT INTO "usage" VALUES('EPSG','2240','projected_crs','EPSG','3221','EPSG','3008','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3222','WGS 84 / SCAR IMW SR15-16',NULL,'EPSG','4400','EPSG','4326','EPSG','17222',NULL,0); INSERT INTO "usage" VALUES('EPSG','2241','projected_crs','EPSG','3222','EPSG','3009','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3223','WGS 84 / SCAR IMW SR17-18',NULL,'EPSG','4400','EPSG','4326','EPSG','17223',NULL,0); INSERT INTO "usage" VALUES('EPSG','2242','projected_crs','EPSG','3223','EPSG','3010','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3224','WGS 84 / SCAR IMW SR19-20',NULL,'EPSG','4400','EPSG','4326','EPSG','17224',NULL,0); INSERT INTO "usage" VALUES('EPSG','2243','projected_crs','EPSG','3224','EPSG','3011','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3225','WGS 84 / SCAR IMW SR27-28',NULL,'EPSG','4400','EPSG','4326','EPSG','17225',NULL,0); INSERT INTO "usage" VALUES('EPSG','2244','projected_crs','EPSG','3225','EPSG','3012','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3226','WGS 84 / SCAR IMW SR29-30',NULL,'EPSG','4400','EPSG','4326','EPSG','17226',NULL,0); INSERT INTO "usage" VALUES('EPSG','2245','projected_crs','EPSG','3226','EPSG','3013','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3227','WGS 84 / SCAR IMW SR31-32',NULL,'EPSG','4400','EPSG','4326','EPSG','17227',NULL,0); INSERT INTO "usage" VALUES('EPSG','2246','projected_crs','EPSG','3227','EPSG','3014','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3228','WGS 84 / SCAR IMW SR33-34',NULL,'EPSG','4400','EPSG','4326','EPSG','17228',NULL,0); INSERT INTO "usage" VALUES('EPSG','2247','projected_crs','EPSG','3228','EPSG','3015','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3229','WGS 84 / SCAR IMW SR35-36',NULL,'EPSG','4400','EPSG','4326','EPSG','17229',NULL,0); INSERT INTO "usage" VALUES('EPSG','2248','projected_crs','EPSG','3229','EPSG','3016','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3230','WGS 84 / SCAR IMW SR37-38',NULL,'EPSG','4400','EPSG','4326','EPSG','17230',NULL,0); INSERT INTO "usage" VALUES('EPSG','2249','projected_crs','EPSG','3230','EPSG','3017','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3231','WGS 84 / SCAR IMW SR39-40',NULL,'EPSG','4400','EPSG','4326','EPSG','17231',NULL,0); INSERT INTO "usage" VALUES('EPSG','2250','projected_crs','EPSG','3231','EPSG','3018','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3232','WGS 84 / SCAR IMW SR41-42',NULL,'EPSG','4400','EPSG','4326','EPSG','17232',NULL,0); INSERT INTO "usage" VALUES('EPSG','2251','projected_crs','EPSG','3232','EPSG','3019','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3233','WGS 84 / SCAR IMW SR43-44',NULL,'EPSG','4400','EPSG','4326','EPSG','17233',NULL,0); INSERT INTO "usage" VALUES('EPSG','2252','projected_crs','EPSG','3233','EPSG','3020','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3234','WGS 84 / SCAR IMW SR45-46',NULL,'EPSG','4400','EPSG','4326','EPSG','17234',NULL,0); INSERT INTO "usage" VALUES('EPSG','2253','projected_crs','EPSG','3234','EPSG','3021','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3235','WGS 84 / SCAR IMW SR47-48',NULL,'EPSG','4400','EPSG','4326','EPSG','17235',NULL,0); INSERT INTO "usage" VALUES('EPSG','2254','projected_crs','EPSG','3235','EPSG','3022','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3236','WGS 84 / SCAR IMW SR49-50',NULL,'EPSG','4400','EPSG','4326','EPSG','17236',NULL,0); INSERT INTO "usage" VALUES('EPSG','2255','projected_crs','EPSG','3236','EPSG','3023','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3237','WGS 84 / SCAR IMW SR51-52',NULL,'EPSG','4400','EPSG','4326','EPSG','17237',NULL,0); INSERT INTO "usage" VALUES('EPSG','2256','projected_crs','EPSG','3237','EPSG','3024','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3238','WGS 84 / SCAR IMW SR53-54',NULL,'EPSG','4400','EPSG','4326','EPSG','17238',NULL,0); INSERT INTO "usage" VALUES('EPSG','2257','projected_crs','EPSG','3238','EPSG','3025','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3239','WGS 84 / SCAR IMW SR55-56',NULL,'EPSG','4400','EPSG','4326','EPSG','17239',NULL,0); INSERT INTO "usage" VALUES('EPSG','2258','projected_crs','EPSG','3239','EPSG','3026','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3240','WGS 84 / SCAR IMW SR57-58',NULL,'EPSG','4400','EPSG','4326','EPSG','17240',NULL,0); INSERT INTO "usage" VALUES('EPSG','2259','projected_crs','EPSG','3240','EPSG','3027','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3241','WGS 84 / SCAR IMW SR59-60',NULL,'EPSG','4400','EPSG','4326','EPSG','17241',NULL,0); INSERT INTO "usage" VALUES('EPSG','2260','projected_crs','EPSG','3241','EPSG','3028','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3242','WGS 84 / SCAR IMW SS04-06',NULL,'EPSG','4400','EPSG','4326','EPSG','17242',NULL,0); INSERT INTO "usage" VALUES('EPSG','2261','projected_crs','EPSG','3242','EPSG','3029','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3243','WGS 84 / SCAR IMW SS07-09',NULL,'EPSG','4400','EPSG','4326','EPSG','17243',NULL,0); INSERT INTO "usage" VALUES('EPSG','2262','projected_crs','EPSG','3243','EPSG','3030','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3244','WGS 84 / SCAR IMW SS10-12',NULL,'EPSG','4400','EPSG','4326','EPSG','17244',NULL,0); INSERT INTO "usage" VALUES('EPSG','2263','projected_crs','EPSG','3244','EPSG','3031','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3245','WGS 84 / SCAR IMW SS13-15',NULL,'EPSG','4400','EPSG','4326','EPSG','17245',NULL,0); INSERT INTO "usage" VALUES('EPSG','2264','projected_crs','EPSG','3245','EPSG','3032','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3246','WGS 84 / SCAR IMW SS16-18',NULL,'EPSG','4400','EPSG','4326','EPSG','17246',NULL,0); INSERT INTO "usage" VALUES('EPSG','2265','projected_crs','EPSG','3246','EPSG','3033','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3247','WGS 84 / SCAR IMW SS19-21',NULL,'EPSG','4400','EPSG','4326','EPSG','17247',NULL,0); INSERT INTO "usage" VALUES('EPSG','2266','projected_crs','EPSG','3247','EPSG','3034','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3248','WGS 84 / SCAR IMW SS25-27',NULL,'EPSG','4400','EPSG','4326','EPSG','17248',NULL,0); INSERT INTO "usage" VALUES('EPSG','2267','projected_crs','EPSG','3248','EPSG','3035','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3249','WGS 84 / SCAR IMW SS28-30',NULL,'EPSG','4400','EPSG','4326','EPSG','17249',NULL,0); INSERT INTO "usage" VALUES('EPSG','2268','projected_crs','EPSG','3249','EPSG','3036','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3250','WGS 84 / SCAR IMW SS31-33',NULL,'EPSG','4400','EPSG','4326','EPSG','17250',NULL,0); INSERT INTO "usage" VALUES('EPSG','2269','projected_crs','EPSG','3250','EPSG','3037','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3251','WGS 84 / SCAR IMW SS34-36',NULL,'EPSG','4400','EPSG','4326','EPSG','17251',NULL,0); INSERT INTO "usage" VALUES('EPSG','2270','projected_crs','EPSG','3251','EPSG','3038','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3252','WGS 84 / SCAR IMW SS37-39',NULL,'EPSG','4400','EPSG','4326','EPSG','17252',NULL,0); INSERT INTO "usage" VALUES('EPSG','2271','projected_crs','EPSG','3252','EPSG','3039','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3253','WGS 84 / SCAR IMW SS40-42',NULL,'EPSG','4400','EPSG','4326','EPSG','17253',NULL,0); INSERT INTO "usage" VALUES('EPSG','2272','projected_crs','EPSG','3253','EPSG','3040','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3254','WGS 84 / SCAR IMW SS43-45',NULL,'EPSG','4400','EPSG','4326','EPSG','17254',NULL,0); INSERT INTO "usage" VALUES('EPSG','2273','projected_crs','EPSG','3254','EPSG','3041','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3255','WGS 84 / SCAR IMW SS46-48',NULL,'EPSG','4400','EPSG','4326','EPSG','17255',NULL,0); INSERT INTO "usage" VALUES('EPSG','2274','projected_crs','EPSG','3255','EPSG','3042','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3256','WGS 84 / SCAR IMW SS49-51',NULL,'EPSG','4400','EPSG','4326','EPSG','17256',NULL,0); INSERT INTO "usage" VALUES('EPSG','2275','projected_crs','EPSG','3256','EPSG','3043','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3257','WGS 84 / SCAR IMW SS52-54',NULL,'EPSG','4400','EPSG','4326','EPSG','17257',NULL,0); INSERT INTO "usage" VALUES('EPSG','2276','projected_crs','EPSG','3257','EPSG','3044','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3258','WGS 84 / SCAR IMW SS55-57',NULL,'EPSG','4400','EPSG','4326','EPSG','17258',NULL,0); INSERT INTO "usage" VALUES('EPSG','2277','projected_crs','EPSG','3258','EPSG','3045','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3259','WGS 84 / SCAR IMW SS58-60',NULL,'EPSG','4400','EPSG','4326','EPSG','17259',NULL,0); INSERT INTO "usage" VALUES('EPSG','2278','projected_crs','EPSG','3259','EPSG','3046','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3260','WGS 84 / SCAR IMW ST01-04',NULL,'EPSG','4400','EPSG','4326','EPSG','17260',NULL,0); INSERT INTO "usage" VALUES('EPSG','2279','projected_crs','EPSG','3260','EPSG','3047','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3261','WGS 84 / SCAR IMW ST05-08',NULL,'EPSG','4400','EPSG','4326','EPSG','17261',NULL,0); INSERT INTO "usage" VALUES('EPSG','2280','projected_crs','EPSG','3261','EPSG','3048','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3262','WGS 84 / SCAR IMW ST09-12',NULL,'EPSG','4400','EPSG','4326','EPSG','17262',NULL,0); INSERT INTO "usage" VALUES('EPSG','2281','projected_crs','EPSG','3262','EPSG','3049','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3263','WGS 84 / SCAR IMW ST13-16',NULL,'EPSG','4400','EPSG','4326','EPSG','17263',NULL,0); INSERT INTO "usage" VALUES('EPSG','2282','projected_crs','EPSG','3263','EPSG','3050','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3264','WGS 84 / SCAR IMW ST17-20',NULL,'EPSG','4400','EPSG','4326','EPSG','17264',NULL,0); INSERT INTO "usage" VALUES('EPSG','2283','projected_crs','EPSG','3264','EPSG','3051','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3265','WGS 84 / SCAR IMW ST21-24',NULL,'EPSG','4400','EPSG','4326','EPSG','17265',NULL,0); INSERT INTO "usage" VALUES('EPSG','2284','projected_crs','EPSG','3265','EPSG','3052','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3266','WGS 84 / SCAR IMW ST25-28',NULL,'EPSG','4400','EPSG','4326','EPSG','17266',NULL,0); INSERT INTO "usage" VALUES('EPSG','2285','projected_crs','EPSG','3266','EPSG','3053','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3267','WGS 84 / SCAR IMW ST29-32',NULL,'EPSG','4400','EPSG','4326','EPSG','17267',NULL,0); INSERT INTO "usage" VALUES('EPSG','2286','projected_crs','EPSG','3267','EPSG','3054','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3268','WGS 84 / SCAR IMW ST33-36',NULL,'EPSG','4400','EPSG','4326','EPSG','17268',NULL,0); INSERT INTO "usage" VALUES('EPSG','2287','projected_crs','EPSG','3268','EPSG','3055','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3269','WGS 84 / SCAR IMW ST37-40',NULL,'EPSG','4400','EPSG','4326','EPSG','17269',NULL,0); INSERT INTO "usage" VALUES('EPSG','2288','projected_crs','EPSG','3269','EPSG','3056','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3270','WGS 84 / SCAR IMW ST41-44',NULL,'EPSG','4400','EPSG','4326','EPSG','17270',NULL,0); INSERT INTO "usage" VALUES('EPSG','2289','projected_crs','EPSG','3270','EPSG','3057','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3271','WGS 84 / SCAR IMW ST45-48',NULL,'EPSG','4400','EPSG','4326','EPSG','17271',NULL,0); INSERT INTO "usage" VALUES('EPSG','2290','projected_crs','EPSG','3271','EPSG','3058','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3272','WGS 84 / SCAR IMW ST49-52',NULL,'EPSG','4400','EPSG','4326','EPSG','17272',NULL,0); INSERT INTO "usage" VALUES('EPSG','2291','projected_crs','EPSG','3272','EPSG','3059','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3273','WGS 84 / SCAR IMW ST53-56',NULL,'EPSG','4400','EPSG','4326','EPSG','17273',NULL,0); INSERT INTO "usage" VALUES('EPSG','2292','projected_crs','EPSG','3273','EPSG','3060','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3274','WGS 84 / SCAR IMW ST57-60',NULL,'EPSG','4400','EPSG','4326','EPSG','17274',NULL,0); INSERT INTO "usage" VALUES('EPSG','2293','projected_crs','EPSG','3274','EPSG','3061','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3275','WGS 84 / SCAR IMW SU01-05',NULL,'EPSG','4471','EPSG','4326','EPSG','17275',NULL,0); INSERT INTO "usage" VALUES('EPSG','2294','projected_crs','EPSG','3275','EPSG','3062','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3276','WGS 84 / SCAR IMW SU06-10',NULL,'EPSG','4473','EPSG','4326','EPSG','17276',NULL,0); INSERT INTO "usage" VALUES('EPSG','2295','projected_crs','EPSG','3276','EPSG','3063','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3277','WGS 84 / SCAR IMW SU11-15',NULL,'EPSG','4474','EPSG','4326','EPSG','17277',NULL,0); INSERT INTO "usage" VALUES('EPSG','2296','projected_crs','EPSG','3277','EPSG','3064','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3278','WGS 84 / SCAR IMW SU16-20',NULL,'EPSG','4476','EPSG','4326','EPSG','17278',NULL,0); INSERT INTO "usage" VALUES('EPSG','2297','projected_crs','EPSG','3278','EPSG','3065','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3279','WGS 84 / SCAR IMW SU21-25',NULL,'EPSG','4477','EPSG','4326','EPSG','17279',NULL,0); INSERT INTO "usage" VALUES('EPSG','2298','projected_crs','EPSG','3279','EPSG','3066','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3280','WGS 84 / SCAR IMW SU26-30',NULL,'EPSG','4479','EPSG','4326','EPSG','17280',NULL,0); INSERT INTO "usage" VALUES('EPSG','2299','projected_crs','EPSG','3280','EPSG','3067','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3281','WGS 84 / SCAR IMW SU31-35',NULL,'EPSG','4480','EPSG','4326','EPSG','17281',NULL,0); INSERT INTO "usage" VALUES('EPSG','2300','projected_crs','EPSG','3281','EPSG','3068','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3282','WGS 84 / SCAR IMW SU36-40',NULL,'EPSG','4482','EPSG','4326','EPSG','17282',NULL,0); INSERT INTO "usage" VALUES('EPSG','2301','projected_crs','EPSG','3282','EPSG','3069','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3283','WGS 84 / SCAR IMW SU41-45',NULL,'EPSG','4483','EPSG','4326','EPSG','17283',NULL,0); INSERT INTO "usage" VALUES('EPSG','2302','projected_crs','EPSG','3283','EPSG','3070','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3284','WGS 84 / SCAR IMW SU46-50',NULL,'EPSG','4485','EPSG','4326','EPSG','17284',NULL,0); INSERT INTO "usage" VALUES('EPSG','2303','projected_crs','EPSG','3284','EPSG','3071','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3285','WGS 84 / SCAR IMW SU51-55',NULL,'EPSG','4486','EPSG','4326','EPSG','17285',NULL,0); INSERT INTO "usage" VALUES('EPSG','2304','projected_crs','EPSG','3285','EPSG','3072','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3286','WGS 84 / SCAR IMW SU56-60',NULL,'EPSG','4488','EPSG','4326','EPSG','17286',NULL,0); INSERT INTO "usage" VALUES('EPSG','2305','projected_crs','EPSG','3286','EPSG','3073','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3287','WGS 84 / SCAR IMW SV01-10',NULL,'EPSG','4472','EPSG','4326','EPSG','17287',NULL,0); INSERT INTO "usage" VALUES('EPSG','2306','projected_crs','EPSG','3287','EPSG','3074','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3288','WGS 84 / SCAR IMW SV11-20',NULL,'EPSG','4475','EPSG','4326','EPSG','17288',NULL,0); INSERT INTO "usage" VALUES('EPSG','2307','projected_crs','EPSG','3288','EPSG','3075','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3289','WGS 84 / SCAR IMW SV21-30',NULL,'EPSG','4478','EPSG','4326','EPSG','17289',NULL,0); INSERT INTO "usage" VALUES('EPSG','2308','projected_crs','EPSG','3289','EPSG','3076','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3290','WGS 84 / SCAR IMW SV31-40',NULL,'EPSG','4481','EPSG','4326','EPSG','17290',NULL,0); INSERT INTO "usage" VALUES('EPSG','2309','projected_crs','EPSG','3290','EPSG','3077','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3291','WGS 84 / SCAR IMW SV41-50',NULL,'EPSG','4484','EPSG','4326','EPSG','17291',NULL,0); INSERT INTO "usage" VALUES('EPSG','2310','projected_crs','EPSG','3291','EPSG','3078','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3292','WGS 84 / SCAR IMW SV51-60',NULL,'EPSG','4487','EPSG','4326','EPSG','17292',NULL,0); INSERT INTO "usage" VALUES('EPSG','2311','projected_crs','EPSG','3292','EPSG','3079','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3293','WGS 84 / SCAR IMW SW01-60',NULL,'EPSG','4490','EPSG','4326','EPSG','17293',NULL,0); INSERT INTO "usage" VALUES('EPSG','2312','projected_crs','EPSG','3293','EPSG','3080','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3294','WGS 84 / USGS Transantarctic Mountains',NULL,'EPSG','4400','EPSG','4326','EPSG','17294',NULL,0); INSERT INTO "usage" VALUES('EPSG','2313','projected_crs','EPSG','3294','EPSG','3081','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3295','Guam 1963 / Yap Islands',NULL,'EPSG','4499','EPSG','4675','EPSG','15399',NULL,0); INSERT INTO "usage" VALUES('EPSG','2314','projected_crs','EPSG','3295','EPSG','3108','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3296','RGPF / UTM zone 5S',NULL,'EPSG','4400','EPSG','4687','EPSG','16105',NULL,0); INSERT INTO "usage" VALUES('EPSG','2315','projected_crs','EPSG','3296','EPSG','3120','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3297','RGPF / UTM zone 6S',NULL,'EPSG','4400','EPSG','4687','EPSG','16106',NULL,0); INSERT INTO "usage" VALUES('EPSG','2316','projected_crs','EPSG','3297','EPSG','3121','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3298','RGPF / UTM zone 7S',NULL,'EPSG','4400','EPSG','4687','EPSG','16107',NULL,0); INSERT INTO "usage" VALUES('EPSG','2317','projected_crs','EPSG','3298','EPSG','3122','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3299','RGPF / UTM zone 8S',NULL,'EPSG','4400','EPSG','4687','EPSG','16108',NULL,0); INSERT INTO "usage" VALUES('EPSG','2318','projected_crs','EPSG','3299','EPSG','3123','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3300','Estonian Coordinate System of 1992',NULL,'EPSG','4530','EPSG','4133','EPSG','19938',NULL,0); INSERT INTO "usage" VALUES('EPSG','2319','projected_crs','EPSG','3300','EPSG','3246','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','3301','Estonian Coordinate System of 1997',NULL,'EPSG','4530','EPSG','4180','EPSG','19938',NULL,0); INSERT INTO "usage" VALUES('EPSG','2320','projected_crs','EPSG','3301','EPSG','1090','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','3302','IGN63 Hiva Oa / UTM zone 7S',NULL,'EPSG','4400','EPSG','4689','EPSG','16107',NULL,0); INSERT INTO "usage" VALUES('EPSG','2321','projected_crs','EPSG','3302','EPSG','3130','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3303','Fatu Iva 72 / UTM zone 7S',NULL,'EPSG','4400','EPSG','4688','EPSG','16107',NULL,0); INSERT INTO "usage" VALUES('EPSG','2322','projected_crs','EPSG','3303','EPSG','3133','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3304','Tahiti 79 / UTM zone 6S',NULL,'EPSG','4400','EPSG','4690','EPSG','16106',NULL,0); INSERT INTO "usage" VALUES('EPSG','2323','projected_crs','EPSG','3304','EPSG','3124','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3305','Moorea 87 / UTM zone 6S',NULL,'EPSG','4400','EPSG','4691','EPSG','16106',NULL,0); INSERT INTO "usage" VALUES('EPSG','2324','projected_crs','EPSG','3305','EPSG','3125','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3306','Maupiti 83 / UTM zone 5S',NULL,'EPSG','4400','EPSG','4692','EPSG','16105',NULL,0); INSERT INTO "usage" VALUES('EPSG','2325','projected_crs','EPSG','3306','EPSG','3126','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3307','Nakhl-e Ghanem / UTM zone 39N',NULL,'EPSG','4400','EPSG','4693','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','2326','projected_crs','EPSG','3307','EPSG','2362','EPSG','1140'); INSERT INTO "projected_crs" VALUES('EPSG','3308','GDA94 / NSW Lambert',NULL,'EPSG','4400','EPSG','4283','EPSG','17364',NULL,0); INSERT INTO "usage" VALUES('EPSG','2327','projected_crs','EPSG','3308','EPSG','3139','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3309','NAD27 / California Albers',NULL,'EPSG','4499','EPSG','4267','EPSG','10420',NULL,0); INSERT INTO "usage" VALUES('EPSG','2328','projected_crs','EPSG','3309','EPSG','1375','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3310','NAD83 / California Albers',NULL,'EPSG','4499','EPSG','4269','EPSG','10420',NULL,0); INSERT INTO "usage" VALUES('EPSG','2329','projected_crs','EPSG','3310','EPSG','1375','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3311','NAD83(HARN) / California Albers',NULL,'EPSG','4499','EPSG','4152','EPSG','10420',NULL,0); INSERT INTO "usage" VALUES('EPSG','2330','projected_crs','EPSG','3311','EPSG','1375','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3312','CSG67 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4623','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','2331','projected_crs','EPSG','3312','EPSG','3765','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3313','RGFG95 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4624','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','2332','projected_crs','EPSG','3313','EPSG','3145','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3314','Katanga 1955 / Katanga Lambert',NULL,'EPSG','4400','EPSG','4695','EPSG','17401',NULL,1); INSERT INTO "usage" VALUES('EPSG','2333','projected_crs','EPSG','3314','EPSG','3147','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3315','Katanga 1955 / Katanga TM',NULL,'EPSG','4400','EPSG','4695','EPSG','17402',NULL,1); INSERT INTO "usage" VALUES('EPSG','2334','projected_crs','EPSG','3315','EPSG','3147','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3316','Kasai 1953 / Congo TM zone 22',NULL,'EPSG','4400','EPSG','4696','EPSG','17422',NULL,0); INSERT INTO "usage" VALUES('EPSG','2335','projected_crs','EPSG','3316','EPSG','4587','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3317','Kasai 1953 / Congo TM zone 24',NULL,'EPSG','4400','EPSG','4696','EPSG','17424',NULL,0); INSERT INTO "usage" VALUES('EPSG','2336','projected_crs','EPSG','3317','EPSG','3164','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3318','IGC 1962 / Congo TM zone 12',NULL,'EPSG','4400','EPSG','4697','EPSG','17412',NULL,0); INSERT INTO "usage" VALUES('EPSG','2337','projected_crs','EPSG','3318','EPSG','3150','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3319','IGC 1962 / Congo TM zone 14',NULL,'EPSG','4400','EPSG','4697','EPSG','17414',NULL,0); INSERT INTO "usage" VALUES('EPSG','2338','projected_crs','EPSG','3319','EPSG','3151','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3320','IGC 1962 / Congo TM zone 16',NULL,'EPSG','4400','EPSG','4697','EPSG','17416',NULL,0); INSERT INTO "usage" VALUES('EPSG','2339','projected_crs','EPSG','3320','EPSG','3160','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3321','IGC 1962 / Congo TM zone 18',NULL,'EPSG','4400','EPSG','4697','EPSG','17418',NULL,0); INSERT INTO "usage" VALUES('EPSG','2340','projected_crs','EPSG','3321','EPSG','3161','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3322','IGC 1962 / Congo TM zone 20',NULL,'EPSG','4400','EPSG','4697','EPSG','17420',NULL,0); INSERT INTO "usage" VALUES('EPSG','2341','projected_crs','EPSG','3322','EPSG','3162','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3323','IGC 1962 / Congo TM zone 22',NULL,'EPSG','4400','EPSG','4697','EPSG','17422',NULL,0); INSERT INTO "usage" VALUES('EPSG','2342','projected_crs','EPSG','3323','EPSG','3163','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3324','IGC 1962 / Congo TM zone 24',NULL,'EPSG','4400','EPSG','4697','EPSG','17424',NULL,0); INSERT INTO "usage" VALUES('EPSG','2343','projected_crs','EPSG','3324','EPSG','3164','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3325','IGC 1962 / Congo TM zone 26',NULL,'EPSG','4400','EPSG','4697','EPSG','17426',NULL,0); INSERT INTO "usage" VALUES('EPSG','2344','projected_crs','EPSG','3325','EPSG','3165','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3326','IGC 1962 / Congo TM zone 28',NULL,'EPSG','4400','EPSG','4697','EPSG','17428',NULL,0); INSERT INTO "usage" VALUES('EPSG','2345','projected_crs','EPSG','3326','EPSG','3166','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3327','IGC 1962 / Congo TM zone 30',NULL,'EPSG','4400','EPSG','4697','EPSG','17430',NULL,0); INSERT INTO "usage" VALUES('EPSG','2346','projected_crs','EPSG','3327','EPSG','3167','EPSG','1057'); INSERT INTO "projected_crs" VALUES('EPSG','3328','Pulkovo 1942(58) / GUGiK-80',NULL,'EPSG','4530','EPSG','4179','EPSG','18286',NULL,0); INSERT INTO "usage" VALUES('EPSG','2347','projected_crs','EPSG','3328','EPSG','3293','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3329','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4179','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','2348','projected_crs','EPSG','3329','EPSG','3580','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3330','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','4179','EPSG','16266',NULL,0); INSERT INTO "usage" VALUES('EPSG','2349','projected_crs','EPSG','3330','EPSG','3581','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3331','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','4179','EPSG','16267',NULL,0); INSERT INTO "usage" VALUES('EPSG','2350','projected_crs','EPSG','3331','EPSG','3583','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3332','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4179','EPSG','16268',NULL,0); INSERT INTO "usage" VALUES('EPSG','2351','projected_crs','EPSG','3332','EPSG','3585','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3333','Pulkovo 1942(58) / Gauss-Kruger zone 3',NULL,'EPSG','4530','EPSG','4179','EPSG','16203',NULL,0); INSERT INTO "usage" VALUES('EPSG','2352','projected_crs','EPSG','3333','EPSG','1792','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3334','Pulkovo 1942(58) / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4179','EPSG','16204',NULL,0); INSERT INTO "usage" VALUES('EPSG','2353','projected_crs','EPSG','3334','EPSG','3577','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3335','Pulkovo 1942(58) / Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4179','EPSG','16205',NULL,0); INSERT INTO "usage" VALUES('EPSG','2354','projected_crs','EPSG','3335','EPSG','3579','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3336','IGN 1962 Kerguelen / UTM zone 42S',NULL,'EPSG','4400','EPSG','4698','EPSG','16142',NULL,0); INSERT INTO "usage" VALUES('EPSG','2355','projected_crs','EPSG','3336','EPSG','2816','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3337','Le Pouce 1934 / Mauritius Grid',NULL,'EPSG','4400','EPSG','4699','EPSG','19899',NULL,0); INSERT INTO "usage" VALUES('EPSG','2356','projected_crs','EPSG','3337','EPSG','3209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3338','NAD83 / Alaska Albers',NULL,'EPSG','4499','EPSG','4269','EPSG','15021',NULL,0); INSERT INTO "usage" VALUES('EPSG','2357','projected_crs','EPSG','3338','EPSG','1330','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3339','IGCB 1955 / Congo TM zone 12',NULL,'EPSG','4400','EPSG','4701','EPSG','17412',NULL,0); INSERT INTO "usage" VALUES('EPSG','2358','projected_crs','EPSG','3339','EPSG','3150','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3340','IGCB 1955 / Congo TM zone 14',NULL,'EPSG','4400','EPSG','4701','EPSG','17414',NULL,0); INSERT INTO "usage" VALUES('EPSG','2359','projected_crs','EPSG','3340','EPSG','3151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3341','IGCB 1955 / Congo TM zone 16',NULL,'EPSG','4400','EPSG','4701','EPSG','17416',NULL,0); INSERT INTO "usage" VALUES('EPSG','2360','projected_crs','EPSG','3341','EPSG','4012','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3342','IGCB 1955 / UTM zone 33S',NULL,'EPSG','4400','EPSG','4701','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','2361','projected_crs','EPSG','3342','EPSG','3171','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3343','Mauritania 1999 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4702','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2362','projected_crs','EPSG','3343','EPSG','3938','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3344','Mauritania 1999 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4702','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2363','projected_crs','EPSG','3344','EPSG','2970','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3345','Mauritania 1999 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4702','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','2364','projected_crs','EPSG','3345','EPSG','2969','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3346','LKS94 / Lithuania TM',NULL,'EPSG','4530','EPSG','4669','EPSG','19934',NULL,0); INSERT INTO "usage" VALUES('EPSG','2365','projected_crs','EPSG','3346','EPSG','1145','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3347','NAD83 / Statistics Canada Lambert',NULL,'EPSG','4400','EPSG','4269','EPSG','19897',NULL,0); INSERT INTO "usage" VALUES('EPSG','2366','projected_crs','EPSG','3347','EPSG','1061','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3348','NAD83(CSRS) / Statistics Canada Lambert',NULL,'EPSG','4400','EPSG','4617','EPSG','19897',NULL,0); INSERT INTO "usage" VALUES('EPSG','2367','projected_crs','EPSG','3348','EPSG','1061','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3349','WGS 84 / PDC Mercator',NULL,'EPSG','4400','EPSG','4326','EPSG','19898',NULL,1); INSERT INTO "usage" VALUES('EPSG','2368','projected_crs','EPSG','3349','EPSG','3172','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3350','Pulkovo 1942 / CS63 zone C0',NULL,'EPSG','4530','EPSG','4284','EPSG','18450',NULL,0); INSERT INTO "usage" VALUES('EPSG','2369','projected_crs','EPSG','3350','EPSG','3173','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3351','Pulkovo 1942 / CS63 zone C1',NULL,'EPSG','4530','EPSG','4284','EPSG','18451',NULL,0); INSERT INTO "usage" VALUES('EPSG','2370','projected_crs','EPSG','3351','EPSG','3174','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3352','Pulkovo 1942 / CS63 zone C2',NULL,'EPSG','4530','EPSG','4284','EPSG','18452',NULL,0); INSERT INTO "usage" VALUES('EPSG','2371','projected_crs','EPSG','3352','EPSG','3175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3353','Mhast (onshore) / UTM zone 32S',NULL,'EPSG','4400','EPSG','4704','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','2372','projected_crs','EPSG','3353','EPSG','3179','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3354','Mhast (offshore) / UTM zone 32S',NULL,'EPSG','4400','EPSG','4705','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','2373','projected_crs','EPSG','3354','EPSG','3180','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3355','Egypt Gulf of Suez S-650 TL / Red Belt',NULL,'EPSG','4400','EPSG','4706','EPSG','18072',NULL,0); INSERT INTO "usage" VALUES('EPSG','2374','projected_crs','EPSG','3355','EPSG','2341','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3356','Grand Cayman 1959 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4723','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('EPSG','2375','projected_crs','EPSG','3356','EPSG','3185','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3357','Little Cayman 1961 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4726','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('EPSG','2376','projected_crs','EPSG','3357','EPSG','3186','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3358','NAD83(HARN) / North Carolina',NULL,'EPSG','4499','EPSG','4152','EPSG','13230',NULL,0); INSERT INTO "usage" VALUES('EPSG','2377','projected_crs','EPSG','3358','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3359','NAD83(HARN) / North Carolina (ftUS)',NULL,'EPSG','4495','EPSG','4152','EPSG','15346',NULL,1); INSERT INTO "usage" VALUES('EPSG','2378','projected_crs','EPSG','3359','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3360','NAD83(HARN) / South Carolina',NULL,'EPSG','4499','EPSG','4152','EPSG','13930',NULL,0); INSERT INTO "usage" VALUES('EPSG','2379','projected_crs','EPSG','3360','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3361','NAD83(HARN) / South Carolina (ft)',NULL,'EPSG','4495','EPSG','4152','EPSG','15355',NULL,0); INSERT INTO "usage" VALUES('EPSG','2380','projected_crs','EPSG','3361','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3362','NAD83(HARN) / Pennsylvania North',NULL,'EPSG','4499','EPSG','4152','EPSG','13731',NULL,0); INSERT INTO "usage" VALUES('EPSG','2381','projected_crs','EPSG','3362','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3363','NAD83(HARN) / Pennsylvania North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15353',NULL,0); INSERT INTO "usage" VALUES('EPSG','2382','projected_crs','EPSG','3363','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3364','NAD83(HARN) / Pennsylvania South',NULL,'EPSG','4499','EPSG','4152','EPSG','13732',NULL,0); INSERT INTO "usage" VALUES('EPSG','2383','projected_crs','EPSG','3364','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3365','NAD83(HARN) / Pennsylvania South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15354',NULL,0); INSERT INTO "usage" VALUES('EPSG','2384','projected_crs','EPSG','3365','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3366','Hong Kong 1963 Grid System',NULL,'EPSG','4500','EPSG','4738','EPSG','19896',NULL,1); INSERT INTO "usage" VALUES('EPSG','2385','projected_crs','EPSG','3366','EPSG','1118','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3367','IGN Astro 1960 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4700','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2386','projected_crs','EPSG','3367','EPSG','2971','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3368','IGN Astro 1960 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4700','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2387','projected_crs','EPSG','3368','EPSG','2970','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3369','IGN Astro 1960 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4700','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','2388','projected_crs','EPSG','3369','EPSG','2969','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3370','NAD27 / UTM zone 59N',NULL,'EPSG','4400','EPSG','4267','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('EPSG','2389','projected_crs','EPSG','3370','EPSG','3372','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3371','NAD27 / UTM zone 60N',NULL,'EPSG','4400','EPSG','4267','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('EPSG','2390','projected_crs','EPSG','3371','EPSG','3373','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3372','NAD83 / UTM zone 59N',NULL,'EPSG','4400','EPSG','4269','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('EPSG','2391','projected_crs','EPSG','3372','EPSG','3372','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3373','NAD83 / UTM zone 60N',NULL,'EPSG','4400','EPSG','4269','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('EPSG','2392','projected_crs','EPSG','3373','EPSG','3373','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3374','FD54 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4741','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2393','projected_crs','EPSG','3374','EPSG','3248','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3375','GDM2000 / Peninsula RSO',NULL,'EPSG','4400','EPSG','4742','EPSG','19895',NULL,0); INSERT INTO "usage" VALUES('EPSG','2394','projected_crs','EPSG','3375','EPSG','3955','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3376','GDM2000 / East Malaysia BRSO',NULL,'EPSG','4400','EPSG','4742','EPSG','19894',NULL,0); INSERT INTO "usage" VALUES('EPSG','2395','projected_crs','EPSG','3376','EPSG','3977','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3377','GDM2000 / Johor Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19893',NULL,0); INSERT INTO "usage" VALUES('EPSG','2396','projected_crs','EPSG','3377','EPSG','3376','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3378','GDM2000 / Sembilan and Melaka Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19892',NULL,0); INSERT INTO "usage" VALUES('EPSG','2397','projected_crs','EPSG','3378','EPSG','3377','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3379','GDM2000 / Pahang Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19891',NULL,0); INSERT INTO "usage" VALUES('EPSG','2398','projected_crs','EPSG','3379','EPSG','3378','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3380','GDM2000 / Selangor Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19890',NULL,0); INSERT INTO "usage" VALUES('EPSG','2399','projected_crs','EPSG','3380','EPSG','3379','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3381','GDM2000 / Terengganu Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19889',NULL,0); INSERT INTO "usage" VALUES('EPSG','2400','projected_crs','EPSG','3381','EPSG','3380','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3382','GDM2000 / Pinang Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19888',NULL,0); INSERT INTO "usage" VALUES('EPSG','2401','projected_crs','EPSG','3382','EPSG','3381','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3383','GDM2000 / Kedah and Perlis Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19887',NULL,0); INSERT INTO "usage" VALUES('EPSG','2402','projected_crs','EPSG','3383','EPSG','3382','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3384','GDM2000 / Perak Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19886',NULL,0); INSERT INTO "usage" VALUES('EPSG','2403','projected_crs','EPSG','3384','EPSG','3383','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3385','GDM2000 / Kelantan Grid',NULL,'EPSG','4400','EPSG','4742','EPSG','19885',NULL,0); INSERT INTO "usage" VALUES('EPSG','2404','projected_crs','EPSG','3385','EPSG','3384','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3386','KKJ / Finland zone 0',NULL,'EPSG','4530','EPSG','4123','EPSG','18180',NULL,0); INSERT INTO "usage" VALUES('EPSG','2405','projected_crs','EPSG','3386','EPSG','3092','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3387','KKJ / Finland zone 5',NULL,'EPSG','4530','EPSG','4123','EPSG','18205',NULL,0); INSERT INTO "usage" VALUES('EPSG','2406','projected_crs','EPSG','3387','EPSG','3385','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3388','Pulkovo 1942 / Caspian Sea Mercator',NULL,'EPSG','4534','EPSG','4284','EPSG','19884',NULL,0); INSERT INTO "usage" VALUES('EPSG','2407','projected_crs','EPSG','3388','EPSG','1291','EPSG','1198'); INSERT INTO "projected_crs" VALUES('EPSG','3389','Pulkovo 1942 / 3-degree Gauss-Kruger zone 60',NULL,'EPSG','4530','EPSG','4284','EPSG','16099',NULL,0); INSERT INTO "usage" VALUES('EPSG','2408','projected_crs','EPSG','3389','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3390','Pulkovo 1995 / 3-degree Gauss-Kruger zone 60',NULL,'EPSG','4530','EPSG','4200','EPSG','16099',NULL,0); INSERT INTO "usage" VALUES('EPSG','2409','projected_crs','EPSG','3390','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3391','Karbala 1979 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4743','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','2410','projected_crs','EPSG','3391','EPSG','3387','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3392','Karbala 1979 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4743','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','2411','projected_crs','EPSG','3392','EPSG','3388','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3393','Karbala 1979 / UTM zone 39N',NULL,'EPSG','4400','EPSG','4743','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','2412','projected_crs','EPSG','3393','EPSG','3389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3394','Nahrwan 1934 / Iraq zone',NULL,'EPSG','4400','EPSG','4744','EPSG','19906',NULL,0); INSERT INTO "usage" VALUES('EPSG','2413','projected_crs','EPSG','3394','EPSG','4238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3395','WGS 84 / World Mercator',NULL,'EPSG','4400','EPSG','4326','EPSG','19883',NULL,0); INSERT INTO "usage" VALUES('EPSG','2414','projected_crs','EPSG','3395','EPSG','3391','EPSG','1228'); INSERT INTO "projected_crs" VALUES('EPSG','3396','PD/83 / 3-degree Gauss-Kruger zone 3',NULL,'EPSG','4530','EPSG','4746','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','2415','projected_crs','EPSG','3396','EPSG','3392','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','3397','PD/83 / 3-degree Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4746','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','2416','projected_crs','EPSG','3397','EPSG','3393','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','3398','RD/83 / 3-degree Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4745','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','2417','projected_crs','EPSG','3398','EPSG','3395','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','3399','RD/83 / 3-degree Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4745','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','2418','projected_crs','EPSG','3399','EPSG','3394','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','3400','NAD83 / Alberta 10-TM (Forest)',NULL,'EPSG','4400','EPSG','4269','EPSG','19881',NULL,0); INSERT INTO "usage" VALUES('EPSG','2419','projected_crs','EPSG','3400','EPSG','2376','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3401','NAD83 / Alberta 10-TM (Resource)',NULL,'EPSG','4400','EPSG','4269','EPSG','19882',NULL,0); INSERT INTO "usage" VALUES('EPSG','2420','projected_crs','EPSG','3401','EPSG','2376','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3402','NAD83(CSRS) / Alberta 10-TM (Forest)',NULL,'EPSG','4400','EPSG','4617','EPSG','19881',NULL,0); INSERT INTO "usage" VALUES('EPSG','2421','projected_crs','EPSG','3402','EPSG','2376','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3403','NAD83(CSRS) / Alberta 10-TM (Resource)',NULL,'EPSG','4400','EPSG','4617','EPSG','19882',NULL,0); INSERT INTO "usage" VALUES('EPSG','2422','projected_crs','EPSG','3403','EPSG','2376','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3404','NAD83(HARN) / North Carolina (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15346',NULL,0); INSERT INTO "usage" VALUES('EPSG','2423','projected_crs','EPSG','3404','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3405','VN-2000 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4756','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','2424','projected_crs','EPSG','3405','EPSG','1452','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3406','VN-2000 / UTM zone 49N',NULL,'EPSG','4400','EPSG','4756','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','2425','projected_crs','EPSG','3406','EPSG','1453','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3407','Hong Kong 1963 Grid System',NULL,'EPSG','4502','EPSG','4738','EPSG','19896',NULL,0); INSERT INTO "usage" VALUES('EPSG','2426','projected_crs','EPSG','3407','EPSG','1118','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3408','NSIDC EASE-Grid North',NULL,'EPSG','4469','EPSG','10346','EPSG','3897',NULL,0); INSERT INTO "usage" VALUES('EPSG','2427','projected_crs','EPSG','3408','EPSG','3475','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','3409','NSIDC EASE-Grid South',NULL,'EPSG','4470','EPSG','10346','EPSG','3898',NULL,0); INSERT INTO "usage" VALUES('EPSG','2428','projected_crs','EPSG','3409','EPSG','3474','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','3410','NSIDC EASE-Grid Global',NULL,'EPSG','4499','EPSG','10346','EPSG','19869',NULL,0); INSERT INTO "usage" VALUES('EPSG','2429','projected_crs','EPSG','3410','EPSG','3463','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','3411','NSIDC Sea Ice Polar Stereographic North',NULL,'EPSG','4468','EPSG','10345','EPSG','19865',NULL,0); INSERT INTO "usage" VALUES('EPSG','2430','projected_crs','EPSG','3411','EPSG','1996','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3412','NSIDC Sea Ice Polar Stereographic South',NULL,'EPSG','4470','EPSG','10345','EPSG','19866',NULL,0); INSERT INTO "usage" VALUES('EPSG','2431','projected_crs','EPSG','3412','EPSG','1997','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3413','WGS 84 / NSIDC Sea Ice Polar Stereographic North',NULL,'EPSG','4468','EPSG','4326','EPSG','19865',NULL,0); INSERT INTO "usage" VALUES('EPSG','2432','projected_crs','EPSG','3413','EPSG','1996','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3414','SVY21 / Singapore TM',NULL,'EPSG','4500','EPSG','4757','EPSG','19864',NULL,0); INSERT INTO "usage" VALUES('EPSG','2433','projected_crs','EPSG','3414','EPSG','1210','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3415','WGS 72BE / South China Sea Lambert',NULL,'EPSG','4400','EPSG','4324','EPSG','19863',NULL,0); INSERT INTO "usage" VALUES('EPSG','2434','projected_crs','EPSG','3415','EPSG','3470','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3416','ETRS89 / Austria Lambert',NULL,'EPSG','4530','EPSG','4258','EPSG','19947',NULL,0); INSERT INTO "usage" VALUES('EPSG','2435','projected_crs','EPSG','3416','EPSG','1037','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3417','NAD83 / Iowa North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15377',NULL,0); INSERT INTO "usage" VALUES('EPSG','2436','projected_crs','EPSG','3417','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3418','NAD83 / Iowa South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15378',NULL,0); INSERT INTO "usage" VALUES('EPSG','2437','projected_crs','EPSG','3418','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3419','NAD83 / Kansas North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15379',NULL,0); INSERT INTO "usage" VALUES('EPSG','2438','projected_crs','EPSG','3419','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3420','NAD83 / Kansas South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15380',NULL,0); INSERT INTO "usage" VALUES('EPSG','2439','projected_crs','EPSG','3420','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3421','NAD83 / Nevada East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15381',NULL,0); INSERT INTO "usage" VALUES('EPSG','2440','projected_crs','EPSG','3421','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3422','NAD83 / Nevada Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15382',NULL,0); INSERT INTO "usage" VALUES('EPSG','2441','projected_crs','EPSG','3422','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3423','NAD83 / Nevada West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15383',NULL,0); INSERT INTO "usage" VALUES('EPSG','2442','projected_crs','EPSG','3423','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3424','NAD83 / New Jersey (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15384',NULL,0); INSERT INTO "usage" VALUES('EPSG','2443','projected_crs','EPSG','3424','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3425','NAD83(HARN) / Iowa North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15377',NULL,0); INSERT INTO "usage" VALUES('EPSG','2444','projected_crs','EPSG','3425','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3426','NAD83(HARN) / Iowa South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15378',NULL,0); INSERT INTO "usage" VALUES('EPSG','2445','projected_crs','EPSG','3426','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3427','NAD83(HARN) / Kansas North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15379',NULL,0); INSERT INTO "usage" VALUES('EPSG','2446','projected_crs','EPSG','3427','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3428','NAD83(HARN) / Kansas South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15380',NULL,0); INSERT INTO "usage" VALUES('EPSG','2447','projected_crs','EPSG','3428','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3429','NAD83(HARN) / Nevada East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15381',NULL,0); INSERT INTO "usage" VALUES('EPSG','2448','projected_crs','EPSG','3429','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3430','NAD83(HARN) / Nevada Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15382',NULL,0); INSERT INTO "usage" VALUES('EPSG','2449','projected_crs','EPSG','3430','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3431','NAD83(HARN) / Nevada West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15383',NULL,0); INSERT INTO "usage" VALUES('EPSG','2450','projected_crs','EPSG','3431','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3432','NAD83(HARN) / New Jersey (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15384',NULL,0); INSERT INTO "usage" VALUES('EPSG','2451','projected_crs','EPSG','3432','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3433','NAD83 / Arkansas North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15385',NULL,0); INSERT INTO "usage" VALUES('EPSG','2452','projected_crs','EPSG','3433','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3434','NAD83 / Arkansas South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15386',NULL,0); INSERT INTO "usage" VALUES('EPSG','2453','projected_crs','EPSG','3434','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3435','NAD83 / Illinois East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15387',NULL,0); INSERT INTO "usage" VALUES('EPSG','2454','projected_crs','EPSG','3435','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3436','NAD83 / Illinois West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15388',NULL,0); INSERT INTO "usage" VALUES('EPSG','2455','projected_crs','EPSG','3436','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3437','NAD83 / New Hampshire (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15389',NULL,0); INSERT INTO "usage" VALUES('EPSG','2456','projected_crs','EPSG','3437','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3438','NAD83 / Rhode Island (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15390',NULL,0); INSERT INTO "usage" VALUES('EPSG','2457','projected_crs','EPSG','3438','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3439','PSD93 / UTM zone 39N',NULL,'EPSG','4400','EPSG','4134','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','2458','projected_crs','EPSG','3439','EPSG','1544','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3440','PSD93 / UTM zone 40N',NULL,'EPSG','4400','EPSG','4134','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','2459','projected_crs','EPSG','3440','EPSG','1545','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','3441','NAD83(HARN) / Arkansas North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15385',NULL,0); INSERT INTO "usage" VALUES('EPSG','2460','projected_crs','EPSG','3441','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3442','NAD83(HARN) / Arkansas South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15386',NULL,0); INSERT INTO "usage" VALUES('EPSG','2461','projected_crs','EPSG','3442','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3443','NAD83(HARN) / Illinois East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15387',NULL,0); INSERT INTO "usage" VALUES('EPSG','2462','projected_crs','EPSG','3443','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3444','NAD83(HARN) / Illinois West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15388',NULL,0); INSERT INTO "usage" VALUES('EPSG','2463','projected_crs','EPSG','3444','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3445','NAD83(HARN) / New Hampshire (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15389',NULL,0); INSERT INTO "usage" VALUES('EPSG','2464','projected_crs','EPSG','3445','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3446','NAD83(HARN) / Rhode Island (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15390',NULL,0); INSERT INTO "usage" VALUES('EPSG','2465','projected_crs','EPSG','3446','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3447','ETRS89 / Belgian Lambert 2005',NULL,'EPSG','4499','EPSG','4258','EPSG','19862',NULL,0); INSERT INTO "usage" VALUES('EPSG','2466','projected_crs','EPSG','3447','EPSG','1347','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3448','JAD2001 / Jamaica Metric Grid',NULL,'EPSG','4400','EPSG','4758','EPSG','19860',NULL,0); INSERT INTO "usage" VALUES('EPSG','2467','projected_crs','EPSG','3448','EPSG','3342','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','3449','JAD2001 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4758','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','2468','projected_crs','EPSG','3449','EPSG','3478','EPSG','1201'); INSERT INTO "projected_crs" VALUES('EPSG','3450','JAD2001 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4758','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','2469','projected_crs','EPSG','3450','EPSG','3479','EPSG','1201'); INSERT INTO "projected_crs" VALUES('EPSG','3451','NAD83 / Louisiana North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15391',NULL,0); INSERT INTO "usage" VALUES('EPSG','2470','projected_crs','EPSG','3451','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3452','NAD83 / Louisiana South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15392',NULL,0); INSERT INTO "usage" VALUES('EPSG','2471','projected_crs','EPSG','3452','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3453','NAD83 / Louisiana Offshore (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15393',NULL,0); INSERT INTO "usage" VALUES('EPSG','2472','projected_crs','EPSG','3453','EPSG','1387','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3454','NAD83 / South Dakota North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15395',NULL,1); INSERT INTO "usage" VALUES('EPSG','2473','projected_crs','EPSG','3454','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3455','NAD83 / South Dakota South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15395',NULL,0); INSERT INTO "usage" VALUES('EPSG','2474','projected_crs','EPSG','3455','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3456','NAD83(HARN) / Louisiana North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15391',NULL,0); INSERT INTO "usage" VALUES('EPSG','2475','projected_crs','EPSG','3456','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3457','NAD83(HARN) / Louisiana South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15392',NULL,0); INSERT INTO "usage" VALUES('EPSG','2476','projected_crs','EPSG','3457','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3458','NAD83(HARN) / South Dakota North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15394',NULL,0); INSERT INTO "usage" VALUES('EPSG','2477','projected_crs','EPSG','3458','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3459','NAD83(HARN) / South Dakota South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15395',NULL,0); INSERT INTO "usage" VALUES('EPSG','2478','projected_crs','EPSG','3459','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3460','Fiji 1986 / Fiji Map Grid',NULL,'EPSG','4400','EPSG','4720','EPSG','19859',NULL,0); INSERT INTO "usage" VALUES('EPSG','2479','projected_crs','EPSG','3460','EPSG','1094','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3461','Dabola 1981 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4155','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2480','projected_crs','EPSG','3461','EPSG','1468','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3462','Dabola 1981 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4155','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','2481','projected_crs','EPSG','3462','EPSG','1469','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3463','NAD83 / Maine CS2000 Central',NULL,'EPSG','4499','EPSG','4269','EPSG','11854',NULL,0); INSERT INTO "usage" VALUES('EPSG','2482','projected_crs','EPSG','3463','EPSG','2959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3464','NAD83(HARN) / Maine CS2000 Central',NULL,'EPSG','4499','EPSG','4152','EPSG','11854',NULL,0); INSERT INTO "usage" VALUES('EPSG','2483','projected_crs','EPSG','3464','EPSG','2959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3465','NAD83(NSRS2007) / Alabama East',NULL,'EPSG','4499','EPSG','4759','EPSG','10131',NULL,0); INSERT INTO "usage" VALUES('EPSG','2484','projected_crs','EPSG','3465','EPSG','2154','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3466','NAD83(NSRS2007) / Alabama West',NULL,'EPSG','4499','EPSG','4759','EPSG','10132',NULL,0); INSERT INTO "usage" VALUES('EPSG','2485','projected_crs','EPSG','3466','EPSG','2155','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3467','NAD83(NSRS2007) / Alaska Albers',NULL,'EPSG','4499','EPSG','4759','EPSG','15021',NULL,0); INSERT INTO "usage" VALUES('EPSG','2486','projected_crs','EPSG','3467','EPSG','1330','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3468','NAD83(NSRS2007) / Alaska zone 1',NULL,'EPSG','4499','EPSG','4759','EPSG','15031',NULL,0); INSERT INTO "usage" VALUES('EPSG','2487','projected_crs','EPSG','3468','EPSG','2156','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3469','NAD83(NSRS2007) / Alaska zone 2',NULL,'EPSG','4499','EPSG','4759','EPSG','15032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2488','projected_crs','EPSG','3469','EPSG','2158','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3470','NAD83(NSRS2007) / Alaska zone 3',NULL,'EPSG','4499','EPSG','4759','EPSG','15033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2489','projected_crs','EPSG','3470','EPSG','2159','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3471','NAD83(NSRS2007) / Alaska zone 4',NULL,'EPSG','4499','EPSG','4759','EPSG','15034',NULL,0); INSERT INTO "usage" VALUES('EPSG','2490','projected_crs','EPSG','3471','EPSG','2160','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3472','NAD83(NSRS2007) / Alaska zone 5',NULL,'EPSG','4499','EPSG','4759','EPSG','15035',NULL,0); INSERT INTO "usage" VALUES('EPSG','2491','projected_crs','EPSG','3472','EPSG','2161','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3473','NAD83(NSRS2007) / Alaska zone 6',NULL,'EPSG','4499','EPSG','4759','EPSG','15036',NULL,0); INSERT INTO "usage" VALUES('EPSG','2492','projected_crs','EPSG','3473','EPSG','2162','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3474','NAD83(NSRS2007) / Alaska zone 7',NULL,'EPSG','4499','EPSG','4759','EPSG','15037',NULL,0); INSERT INTO "usage" VALUES('EPSG','2493','projected_crs','EPSG','3474','EPSG','2163','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3475','NAD83(NSRS2007) / Alaska zone 8',NULL,'EPSG','4499','EPSG','4759','EPSG','15038',NULL,0); INSERT INTO "usage" VALUES('EPSG','2494','projected_crs','EPSG','3475','EPSG','2164','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3476','NAD83(NSRS2007) / Alaska zone 9',NULL,'EPSG','4499','EPSG','4759','EPSG','15039',NULL,0); INSERT INTO "usage" VALUES('EPSG','2495','projected_crs','EPSG','3476','EPSG','2165','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3477','NAD83(NSRS2007) / Alaska zone 10',NULL,'EPSG','4499','EPSG','4759','EPSG','15040',NULL,0); INSERT INTO "usage" VALUES('EPSG','2496','projected_crs','EPSG','3477','EPSG','2157','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3478','NAD83(NSRS2007) / Arizona Central',NULL,'EPSG','4499','EPSG','4759','EPSG','10232',NULL,0); INSERT INTO "usage" VALUES('EPSG','2497','projected_crs','EPSG','3478','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3479','NAD83(NSRS2007) / Arizona Central (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15305',NULL,0); INSERT INTO "usage" VALUES('EPSG','2498','projected_crs','EPSG','3479','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3480','NAD83(NSRS2007) / Arizona East',NULL,'EPSG','4499','EPSG','4759','EPSG','10231',NULL,0); INSERT INTO "usage" VALUES('EPSG','2499','projected_crs','EPSG','3480','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3481','NAD83(NSRS2007) / Arizona East (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15304',NULL,0); INSERT INTO "usage" VALUES('EPSG','2500','projected_crs','EPSG','3481','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3482','NAD83(NSRS2007) / Arizona West',NULL,'EPSG','4499','EPSG','4759','EPSG','10233',NULL,0); INSERT INTO "usage" VALUES('EPSG','2501','projected_crs','EPSG','3482','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3483','NAD83(NSRS2007) / Arizona West (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15306',NULL,0); INSERT INTO "usage" VALUES('EPSG','2502','projected_crs','EPSG','3483','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3484','NAD83(NSRS2007) / Arkansas North',NULL,'EPSG','4499','EPSG','4759','EPSG','10331',NULL,0); INSERT INTO "usage" VALUES('EPSG','2503','projected_crs','EPSG','3484','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3485','NAD83(NSRS2007) / Arkansas North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15385',NULL,0); INSERT INTO "usage" VALUES('EPSG','2504','projected_crs','EPSG','3485','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3486','NAD83(NSRS2007) / Arkansas South',NULL,'EPSG','4499','EPSG','4759','EPSG','10332',NULL,0); INSERT INTO "usage" VALUES('EPSG','2505','projected_crs','EPSG','3486','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3487','NAD83(NSRS2007) / Arkansas South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15386',NULL,0); INSERT INTO "usage" VALUES('EPSG','2506','projected_crs','EPSG','3487','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3488','NAD83(NSRS2007) / California Albers',NULL,'EPSG','4499','EPSG','4759','EPSG','10420',NULL,0); INSERT INTO "usage" VALUES('EPSG','2507','projected_crs','EPSG','3488','EPSG','1375','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3489','NAD83(NSRS2007) / California zone 1',NULL,'EPSG','4499','EPSG','4759','EPSG','10431',NULL,0); INSERT INTO "usage" VALUES('EPSG','2508','projected_crs','EPSG','3489','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3490','NAD83(NSRS2007) / California zone 1 (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15307',NULL,0); INSERT INTO "usage" VALUES('EPSG','2509','projected_crs','EPSG','3490','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3491','NAD83(NSRS2007) / California zone 2',NULL,'EPSG','4499','EPSG','4759','EPSG','10432',NULL,0); INSERT INTO "usage" VALUES('EPSG','2510','projected_crs','EPSG','3491','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3492','NAD83(NSRS2007) / California zone 2 (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15308',NULL,0); INSERT INTO "usage" VALUES('EPSG','2511','projected_crs','EPSG','3492','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3493','NAD83(NSRS2007) / California zone 3',NULL,'EPSG','4499','EPSG','4759','EPSG','10433',NULL,0); INSERT INTO "usage" VALUES('EPSG','2512','projected_crs','EPSG','3493','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3494','NAD83(NSRS2007) / California zone 3 (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15309',NULL,0); INSERT INTO "usage" VALUES('EPSG','2513','projected_crs','EPSG','3494','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3495','NAD83(NSRS2007) / California zone 4',NULL,'EPSG','4499','EPSG','4759','EPSG','10434',NULL,0); INSERT INTO "usage" VALUES('EPSG','2514','projected_crs','EPSG','3495','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3496','NAD83(NSRS2007) / California zone 4 (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15310',NULL,0); INSERT INTO "usage" VALUES('EPSG','2515','projected_crs','EPSG','3496','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3497','NAD83(NSRS2007) / California zone 5',NULL,'EPSG','4499','EPSG','4759','EPSG','10435',NULL,0); INSERT INTO "usage" VALUES('EPSG','2516','projected_crs','EPSG','3497','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3498','NAD83(NSRS2007) / California zone 5 (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15311',NULL,0); INSERT INTO "usage" VALUES('EPSG','2517','projected_crs','EPSG','3498','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3499','NAD83(NSRS2007) / California zone 6',NULL,'EPSG','4499','EPSG','4759','EPSG','10436',NULL,0); INSERT INTO "usage" VALUES('EPSG','2518','projected_crs','EPSG','3499','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3500','NAD83(NSRS2007) / California zone 6 (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15312',NULL,0); INSERT INTO "usage" VALUES('EPSG','2519','projected_crs','EPSG','3500','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3501','NAD83(NSRS2007) / Colorado Central',NULL,'EPSG','4499','EPSG','4759','EPSG','10532',NULL,0); INSERT INTO "usage" VALUES('EPSG','2520','projected_crs','EPSG','3501','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3502','NAD83(NSRS2007) / Colorado Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15314',NULL,0); INSERT INTO "usage" VALUES('EPSG','2521','projected_crs','EPSG','3502','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3503','NAD83(NSRS2007) / Colorado North',NULL,'EPSG','4499','EPSG','4759','EPSG','10531',NULL,0); INSERT INTO "usage" VALUES('EPSG','2522','projected_crs','EPSG','3503','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3504','NAD83(NSRS2007) / Colorado North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15313',NULL,0); INSERT INTO "usage" VALUES('EPSG','2523','projected_crs','EPSG','3504','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3505','NAD83(NSRS2007) / Colorado South',NULL,'EPSG','4499','EPSG','4759','EPSG','10533',NULL,0); INSERT INTO "usage" VALUES('EPSG','2524','projected_crs','EPSG','3505','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3506','NAD83(NSRS2007) / Colorado South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15315',NULL,0); INSERT INTO "usage" VALUES('EPSG','2525','projected_crs','EPSG','3506','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3507','NAD83(NSRS2007) / Connecticut',NULL,'EPSG','4499','EPSG','4759','EPSG','10630',NULL,0); INSERT INTO "usage" VALUES('EPSG','2526','projected_crs','EPSG','3507','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3508','NAD83(NSRS2007) / Connecticut (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15316',NULL,0); INSERT INTO "usage" VALUES('EPSG','2527','projected_crs','EPSG','3508','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3509','NAD83(NSRS2007) / Delaware',NULL,'EPSG','4499','EPSG','4759','EPSG','10730',NULL,0); INSERT INTO "usage" VALUES('EPSG','2528','projected_crs','EPSG','3509','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3510','NAD83(NSRS2007) / Delaware (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15317',NULL,0); INSERT INTO "usage" VALUES('EPSG','2529','projected_crs','EPSG','3510','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3511','NAD83(NSRS2007) / Florida East',NULL,'EPSG','4499','EPSG','4759','EPSG','10931',NULL,0); INSERT INTO "usage" VALUES('EPSG','2530','projected_crs','EPSG','3511','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3512','NAD83(NSRS2007) / Florida East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15318',NULL,0); INSERT INTO "usage" VALUES('EPSG','2531','projected_crs','EPSG','3512','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3513','NAD83(NSRS2007) / Florida GDL Albers',NULL,'EPSG','4499','EPSG','4759','EPSG','10934',NULL,0); INSERT INTO "usage" VALUES('EPSG','2532','projected_crs','EPSG','3513','EPSG','1379','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3514','NAD83(NSRS2007) / Florida North',NULL,'EPSG','4499','EPSG','4759','EPSG','10933',NULL,0); INSERT INTO "usage" VALUES('EPSG','2533','projected_crs','EPSG','3514','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3515','NAD83(NSRS2007) / Florida North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15320',NULL,0); INSERT INTO "usage" VALUES('EPSG','2534','projected_crs','EPSG','3515','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3516','NAD83(NSRS2007) / Florida West',NULL,'EPSG','4499','EPSG','4759','EPSG','10932',NULL,0); INSERT INTO "usage" VALUES('EPSG','2535','projected_crs','EPSG','3516','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3517','NAD83(NSRS2007) / Florida West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15319',NULL,0); INSERT INTO "usage" VALUES('EPSG','2536','projected_crs','EPSG','3517','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3518','NAD83(NSRS2007) / Georgia East',NULL,'EPSG','4499','EPSG','4759','EPSG','11031',NULL,0); INSERT INTO "usage" VALUES('EPSG','2537','projected_crs','EPSG','3518','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3519','NAD83(NSRS2007) / Georgia East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15321',NULL,0); INSERT INTO "usage" VALUES('EPSG','2538','projected_crs','EPSG','3519','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3520','NAD83(NSRS2007) / Georgia West',NULL,'EPSG','4499','EPSG','4759','EPSG','11032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2539','projected_crs','EPSG','3520','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3521','NAD83(NSRS2007) / Georgia West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15322',NULL,0); INSERT INTO "usage" VALUES('EPSG','2540','projected_crs','EPSG','3521','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3522','NAD83(NSRS2007) / Idaho Central',NULL,'EPSG','4499','EPSG','4759','EPSG','11132',NULL,0); INSERT INTO "usage" VALUES('EPSG','2541','projected_crs','EPSG','3522','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3523','NAD83(NSRS2007) / Idaho Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15324',NULL,0); INSERT INTO "usage" VALUES('EPSG','2542','projected_crs','EPSG','3523','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3524','NAD83(NSRS2007) / Idaho East',NULL,'EPSG','4499','EPSG','4759','EPSG','11131',NULL,0); INSERT INTO "usage" VALUES('EPSG','2543','projected_crs','EPSG','3524','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3525','NAD83(NSRS2007) / Idaho East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15323',NULL,0); INSERT INTO "usage" VALUES('EPSG','2544','projected_crs','EPSG','3525','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3526','NAD83(NSRS2007) / Idaho West',NULL,'EPSG','4499','EPSG','4759','EPSG','11133',NULL,0); INSERT INTO "usage" VALUES('EPSG','2545','projected_crs','EPSG','3526','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3527','NAD83(NSRS2007) / Idaho West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15325',NULL,0); INSERT INTO "usage" VALUES('EPSG','2546','projected_crs','EPSG','3527','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3528','NAD83(NSRS2007) / Illinois East',NULL,'EPSG','4499','EPSG','4759','EPSG','11231',NULL,0); INSERT INTO "usage" VALUES('EPSG','2547','projected_crs','EPSG','3528','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3529','NAD83(NSRS2007) / Illinois East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15387',NULL,0); INSERT INTO "usage" VALUES('EPSG','2548','projected_crs','EPSG','3529','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3530','NAD83(NSRS2007) / Illinois West',NULL,'EPSG','4499','EPSG','4759','EPSG','11232',NULL,0); INSERT INTO "usage" VALUES('EPSG','2549','projected_crs','EPSG','3530','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3531','NAD83(NSRS2007) / Illinois West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15388',NULL,0); INSERT INTO "usage" VALUES('EPSG','2550','projected_crs','EPSG','3531','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3532','NAD83(NSRS2007) / Indiana East',NULL,'EPSG','4499','EPSG','4759','EPSG','11331',NULL,0); INSERT INTO "usage" VALUES('EPSG','2551','projected_crs','EPSG','3532','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3533','NAD83(NSRS2007) / Indiana East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15372',NULL,0); INSERT INTO "usage" VALUES('EPSG','2552','projected_crs','EPSG','3533','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3534','NAD83(NSRS2007) / Indiana West',NULL,'EPSG','4499','EPSG','4759','EPSG','11332',NULL,0); INSERT INTO "usage" VALUES('EPSG','2553','projected_crs','EPSG','3534','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3535','NAD83(NSRS2007) / Indiana West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15373',NULL,0); INSERT INTO "usage" VALUES('EPSG','2554','projected_crs','EPSG','3535','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3536','NAD83(NSRS2007) / Iowa North',NULL,'EPSG','4499','EPSG','4759','EPSG','11431',NULL,0); INSERT INTO "usage" VALUES('EPSG','2555','projected_crs','EPSG','3536','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3537','NAD83(NSRS2007) / Iowa North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15377',NULL,0); INSERT INTO "usage" VALUES('EPSG','2556','projected_crs','EPSG','3537','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3538','NAD83(NSRS2007) / Iowa South',NULL,'EPSG','4499','EPSG','4759','EPSG','11432',NULL,0); INSERT INTO "usage" VALUES('EPSG','2557','projected_crs','EPSG','3538','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3539','NAD83(NSRS2007) / Iowa South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15378',NULL,0); INSERT INTO "usage" VALUES('EPSG','2558','projected_crs','EPSG','3539','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3540','NAD83(NSRS2007) / Kansas North',NULL,'EPSG','4499','EPSG','4759','EPSG','11531',NULL,0); INSERT INTO "usage" VALUES('EPSG','2559','projected_crs','EPSG','3540','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3541','NAD83(NSRS2007) / Kansas North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15379',NULL,0); INSERT INTO "usage" VALUES('EPSG','2560','projected_crs','EPSG','3541','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3542','NAD83(NSRS2007) / Kansas South',NULL,'EPSG','4499','EPSG','4759','EPSG','11532',NULL,0); INSERT INTO "usage" VALUES('EPSG','2561','projected_crs','EPSG','3542','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3543','NAD83(NSRS2007) / Kansas South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15380',NULL,0); INSERT INTO "usage" VALUES('EPSG','2562','projected_crs','EPSG','3543','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3544','NAD83(NSRS2007) / Kentucky North',NULL,'EPSG','4499','EPSG','4759','EPSG','15303',NULL,0); INSERT INTO "usage" VALUES('EPSG','2563','projected_crs','EPSG','3544','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3545','NAD83(NSRS2007) / Kentucky North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15328',NULL,0); INSERT INTO "usage" VALUES('EPSG','2564','projected_crs','EPSG','3545','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3546','NAD83(NSRS2007) / Kentucky Single Zone',NULL,'EPSG','4499','EPSG','4759','EPSG','11630',NULL,0); INSERT INTO "usage" VALUES('EPSG','2565','projected_crs','EPSG','3546','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3547','NAD83(NSRS2007) / Kentucky Single Zone (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15375',NULL,0); INSERT INTO "usage" VALUES('EPSG','2566','projected_crs','EPSG','3547','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3548','NAD83(NSRS2007) / Kentucky South',NULL,'EPSG','4499','EPSG','4759','EPSG','11632',NULL,0); INSERT INTO "usage" VALUES('EPSG','2567','projected_crs','EPSG','3548','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3549','NAD83(NSRS2007) / Kentucky South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15329',NULL,0); INSERT INTO "usage" VALUES('EPSG','2568','projected_crs','EPSG','3549','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3550','NAD83(NSRS2007) / Louisiana North',NULL,'EPSG','4499','EPSG','4759','EPSG','11731',NULL,0); INSERT INTO "usage" VALUES('EPSG','2569','projected_crs','EPSG','3550','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3551','NAD83(NSRS2007) / Louisiana North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15391',NULL,0); INSERT INTO "usage" VALUES('EPSG','2570','projected_crs','EPSG','3551','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3552','NAD83(NSRS2007) / Louisiana South',NULL,'EPSG','4499','EPSG','4759','EPSG','11732',NULL,0); INSERT INTO "usage" VALUES('EPSG','2571','projected_crs','EPSG','3552','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3553','NAD83(NSRS2007) / Louisiana South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15392',NULL,0); INSERT INTO "usage" VALUES('EPSG','2572','projected_crs','EPSG','3553','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3554','NAD83(NSRS2007) / Maine CS2000 Central',NULL,'EPSG','4499','EPSG','4759','EPSG','11854',NULL,0); INSERT INTO "usage" VALUES('EPSG','2573','projected_crs','EPSG','3554','EPSG','2959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3555','NAD83(NSRS2007) / Maine CS2000 East',NULL,'EPSG','4499','EPSG','4759','EPSG','11851',NULL,0); INSERT INTO "usage" VALUES('EPSG','2574','projected_crs','EPSG','3555','EPSG','2960','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3556','NAD83(NSRS2007) / Maine CS2000 West',NULL,'EPSG','4499','EPSG','4759','EPSG','11853',NULL,0); INSERT INTO "usage" VALUES('EPSG','2575','projected_crs','EPSG','3556','EPSG','2958','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3557','NAD83(NSRS2007) / Maine East',NULL,'EPSG','4499','EPSG','4759','EPSG','11831',NULL,0); INSERT INTO "usage" VALUES('EPSG','2576','projected_crs','EPSG','3557','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3558','NAD83(NSRS2007) / Maine West',NULL,'EPSG','4499','EPSG','4759','EPSG','11832',NULL,0); INSERT INTO "usage" VALUES('EPSG','2577','projected_crs','EPSG','3558','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3559','NAD83(NSRS2007) / Maryland',NULL,'EPSG','4499','EPSG','4759','EPSG','11930',NULL,0); INSERT INTO "usage" VALUES('EPSG','2578','projected_crs','EPSG','3559','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3560','NAD83 / Utah North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15297',NULL,0); INSERT INTO "usage" VALUES('EPSG','2579','projected_crs','EPSG','3560','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3561','Old Hawaiian / Hawaii zone 1',NULL,'EPSG','4497','EPSG','4135','EPSG','15101',NULL,0); INSERT INTO "usage" VALUES('EPSG','2580','projected_crs','EPSG','3561','EPSG','1546','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3562','Old Hawaiian / Hawaii zone 2',NULL,'EPSG','4497','EPSG','4135','EPSG','15102',NULL,0); INSERT INTO "usage" VALUES('EPSG','2581','projected_crs','EPSG','3562','EPSG','1547','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3563','Old Hawaiian / Hawaii zone 3',NULL,'EPSG','4497','EPSG','4135','EPSG','15103',NULL,0); INSERT INTO "usage" VALUES('EPSG','2582','projected_crs','EPSG','3563','EPSG','1548','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3564','Old Hawaiian / Hawaii zone 4',NULL,'EPSG','4497','EPSG','4135','EPSG','15104',NULL,0); INSERT INTO "usage" VALUES('EPSG','2583','projected_crs','EPSG','3564','EPSG','1549','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3565','Old Hawaiian / Hawaii zone 5',NULL,'EPSG','4497','EPSG','4135','EPSG','15105',NULL,0); INSERT INTO "usage" VALUES('EPSG','2584','projected_crs','EPSG','3565','EPSG','1550','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3566','NAD83 / Utah Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15298',NULL,0); INSERT INTO "usage" VALUES('EPSG','2585','projected_crs','EPSG','3566','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3567','NAD83 / Utah South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15299',NULL,0); INSERT INTO "usage" VALUES('EPSG','2586','projected_crs','EPSG','3567','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3568','NAD83(HARN) / Utah North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15297',NULL,0); INSERT INTO "usage" VALUES('EPSG','2587','projected_crs','EPSG','3568','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3569','NAD83(HARN) / Utah Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15298',NULL,0); INSERT INTO "usage" VALUES('EPSG','2588','projected_crs','EPSG','3569','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3570','NAD83(HARN) / Utah South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15299',NULL,0); INSERT INTO "usage" VALUES('EPSG','2589','projected_crs','EPSG','3570','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3571','WGS 84 / North Pole LAEA Bering Sea',NULL,'EPSG','4464','EPSG','4326','EPSG','17295',NULL,0); INSERT INTO "usage" VALUES('EPSG','2590','projected_crs','EPSG','3571','EPSG','3480','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3572','WGS 84 / North Pole LAEA Alaska',NULL,'EPSG','4467','EPSG','4326','EPSG','17296',NULL,0); INSERT INTO "usage" VALUES('EPSG','2591','projected_crs','EPSG','3572','EPSG','3480','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3573','WGS 84 / North Pole LAEA Canada',NULL,'EPSG','4466','EPSG','4326','EPSG','17297',NULL,0); INSERT INTO "usage" VALUES('EPSG','2592','projected_crs','EPSG','3573','EPSG','3480','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3574','WGS 84 / North Pole LAEA Atlantic',NULL,'EPSG','4465','EPSG','4326','EPSG','17298',NULL,0); INSERT INTO "usage" VALUES('EPSG','2593','projected_crs','EPSG','3574','EPSG','3480','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3575','WGS 84 / North Pole LAEA Europe',NULL,'EPSG','4463','EPSG','4326','EPSG','17299',NULL,0); INSERT INTO "usage" VALUES('EPSG','2594','projected_crs','EPSG','3575','EPSG','3480','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3576','WGS 84 / North Pole LAEA Russia',NULL,'EPSG','1035','EPSG','4326','EPSG','17300',NULL,0); INSERT INTO "usage" VALUES('EPSG','2595','projected_crs','EPSG','3576','EPSG','3480','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3577','GDA94 / Australian Albers',NULL,'EPSG','4400','EPSG','4283','EPSG','17365',NULL,0); INSERT INTO "usage" VALUES('EPSG','2596','projected_crs','EPSG','3577','EPSG','2575','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','3578','NAD83 / Yukon Albers',NULL,'EPSG','4400','EPSG','4269','EPSG','19858',NULL,0); INSERT INTO "usage" VALUES('EPSG','2597','projected_crs','EPSG','3578','EPSG','2417','EPSG','1238'); INSERT INTO "projected_crs" VALUES('EPSG','3579','NAD83(CSRS) / Yukon Albers',NULL,'EPSG','4400','EPSG','4617','EPSG','19858',NULL,0); INSERT INTO "usage" VALUES('EPSG','2598','projected_crs','EPSG','3579','EPSG','2417','EPSG','1238'); INSERT INTO "projected_crs" VALUES('EPSG','3580','NAD83 / NWT Lambert',NULL,'EPSG','4400','EPSG','4269','EPSG','19857',NULL,0); INSERT INTO "usage" VALUES('EPSG','2599','projected_crs','EPSG','3580','EPSG','3481','EPSG','1238'); INSERT INTO "projected_crs" VALUES('EPSG','3581','NAD83(CSRS) / NWT Lambert',NULL,'EPSG','4400','EPSG','4617','EPSG','19857',NULL,0); INSERT INTO "usage" VALUES('EPSG','2600','projected_crs','EPSG','3581','EPSG','3481','EPSG','1238'); INSERT INTO "projected_crs" VALUES('EPSG','3582','NAD83(NSRS2007) / Maryland (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15330',NULL,0); INSERT INTO "usage" VALUES('EPSG','2601','projected_crs','EPSG','3582','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3583','NAD83(NSRS2007) / Massachusetts Island',NULL,'EPSG','4499','EPSG','4759','EPSG','12032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2602','projected_crs','EPSG','3583','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3584','NAD83(NSRS2007) / Massachusetts Island (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15332',NULL,0); INSERT INTO "usage" VALUES('EPSG','2603','projected_crs','EPSG','3584','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3585','NAD83(NSRS2007) / Massachusetts Mainland',NULL,'EPSG','4499','EPSG','4759','EPSG','12031',NULL,0); INSERT INTO "usage" VALUES('EPSG','2604','projected_crs','EPSG','3585','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3586','NAD83(NSRS2007) / Massachusetts Mainland (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15331',NULL,0); INSERT INTO "usage" VALUES('EPSG','2605','projected_crs','EPSG','3586','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3587','NAD83(NSRS2007) / Michigan Central',NULL,'EPSG','4499','EPSG','4759','EPSG','12142',NULL,0); INSERT INTO "usage" VALUES('EPSG','2606','projected_crs','EPSG','3587','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3588','NAD83(NSRS2007) / Michigan Central (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15334',NULL,0); INSERT INTO "usage" VALUES('EPSG','2607','projected_crs','EPSG','3588','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3589','NAD83(NSRS2007) / Michigan North',NULL,'EPSG','4499','EPSG','4759','EPSG','12141',NULL,0); INSERT INTO "usage" VALUES('EPSG','2608','projected_crs','EPSG','3589','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3590','NAD83(NSRS2007) / Michigan North (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15333',NULL,0); INSERT INTO "usage" VALUES('EPSG','2609','projected_crs','EPSG','3590','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3591','NAD83(NSRS2007) / Michigan Oblique Mercator',NULL,'EPSG','4499','EPSG','4759','EPSG','12150',NULL,0); INSERT INTO "usage" VALUES('EPSG','2610','projected_crs','EPSG','3591','EPSG','1391','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3592','NAD83(NSRS2007) / Michigan South',NULL,'EPSG','4499','EPSG','4759','EPSG','12143',NULL,0); INSERT INTO "usage" VALUES('EPSG','2611','projected_crs','EPSG','3592','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3593','NAD83(NSRS2007) / Michigan South (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15335',NULL,0); INSERT INTO "usage" VALUES('EPSG','2612','projected_crs','EPSG','3593','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3594','NAD83(NSRS2007) / Minnesota Central',NULL,'EPSG','4499','EPSG','4759','EPSG','12232',NULL,0); INSERT INTO "usage" VALUES('EPSG','2613','projected_crs','EPSG','3594','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3595','NAD83(NSRS2007) / Minnesota North',NULL,'EPSG','4499','EPSG','4759','EPSG','12231',NULL,0); INSERT INTO "usage" VALUES('EPSG','2614','projected_crs','EPSG','3595','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3596','NAD83(NSRS2007) / Minnesota South',NULL,'EPSG','4499','EPSG','4759','EPSG','12233',NULL,0); INSERT INTO "usage" VALUES('EPSG','2615','projected_crs','EPSG','3596','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3597','NAD83(NSRS2007) / Mississippi East',NULL,'EPSG','4499','EPSG','4759','EPSG','12331',NULL,0); INSERT INTO "usage" VALUES('EPSG','2616','projected_crs','EPSG','3597','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3598','NAD83(NSRS2007) / Mississippi East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15336',NULL,0); INSERT INTO "usage" VALUES('EPSG','2617','projected_crs','EPSG','3598','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3599','NAD83(NSRS2007) / Mississippi West',NULL,'EPSG','4499','EPSG','4759','EPSG','12332',NULL,0); INSERT INTO "usage" VALUES('EPSG','2618','projected_crs','EPSG','3599','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3600','NAD83(NSRS2007) / Mississippi West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15337',NULL,0); INSERT INTO "usage" VALUES('EPSG','2619','projected_crs','EPSG','3600','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3601','NAD83(NSRS2007) / Missouri Central',NULL,'EPSG','4499','EPSG','4759','EPSG','12432',NULL,0); INSERT INTO "usage" VALUES('EPSG','2620','projected_crs','EPSG','3601','EPSG','2218','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3602','NAD83(NSRS2007) / Missouri East',NULL,'EPSG','4499','EPSG','4759','EPSG','12431',NULL,0); INSERT INTO "usage" VALUES('EPSG','2621','projected_crs','EPSG','3602','EPSG','2219','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3603','NAD83(NSRS2007) / Missouri West',NULL,'EPSG','4499','EPSG','4759','EPSG','12433',NULL,0); INSERT INTO "usage" VALUES('EPSG','2622','projected_crs','EPSG','3603','EPSG','2220','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3604','NAD83(NSRS2007) / Montana',NULL,'EPSG','4499','EPSG','4759','EPSG','12530',NULL,0); INSERT INTO "usage" VALUES('EPSG','2623','projected_crs','EPSG','3604','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3605','NAD83(NSRS2007) / Montana (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15338',NULL,0); INSERT INTO "usage" VALUES('EPSG','2624','projected_crs','EPSG','3605','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3606','NAD83(NSRS2007) / Nebraska',NULL,'EPSG','4499','EPSG','4759','EPSG','12630',NULL,0); INSERT INTO "usage" VALUES('EPSG','2625','projected_crs','EPSG','3606','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3607','NAD83(NSRS2007) / Nevada Central',NULL,'EPSG','4499','EPSG','4759','EPSG','12732',NULL,0); INSERT INTO "usage" VALUES('EPSG','2626','projected_crs','EPSG','3607','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3608','NAD83(NSRS2007) / Nevada Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15382',NULL,0); INSERT INTO "usage" VALUES('EPSG','2627','projected_crs','EPSG','3608','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3609','NAD83(NSRS2007) / Nevada East',NULL,'EPSG','4499','EPSG','4759','EPSG','12731',NULL,0); INSERT INTO "usage" VALUES('EPSG','2628','projected_crs','EPSG','3609','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3610','NAD83(NSRS2007) / Nevada East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15381',NULL,0); INSERT INTO "usage" VALUES('EPSG','2629','projected_crs','EPSG','3610','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3611','NAD83(NSRS2007) / Nevada West',NULL,'EPSG','4499','EPSG','4759','EPSG','12733',NULL,0); INSERT INTO "usage" VALUES('EPSG','2630','projected_crs','EPSG','3611','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3612','NAD83(NSRS2007) / Nevada West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15383',NULL,0); INSERT INTO "usage" VALUES('EPSG','2631','projected_crs','EPSG','3612','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3613','NAD83(NSRS2007) / New Hampshire',NULL,'EPSG','4499','EPSG','4759','EPSG','12830',NULL,0); INSERT INTO "usage" VALUES('EPSG','2632','projected_crs','EPSG','3613','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3614','NAD83(NSRS2007) / New Hampshire (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15389',NULL,0); INSERT INTO "usage" VALUES('EPSG','2633','projected_crs','EPSG','3614','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3615','NAD83(NSRS2007) / New Jersey',NULL,'EPSG','4499','EPSG','4759','EPSG','12930',NULL,0); INSERT INTO "usage" VALUES('EPSG','2634','projected_crs','EPSG','3615','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3616','NAD83(NSRS2007) / New Jersey (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15384',NULL,0); INSERT INTO "usage" VALUES('EPSG','2635','projected_crs','EPSG','3616','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3617','NAD83(NSRS2007) / New Mexico Central',NULL,'EPSG','4499','EPSG','4759','EPSG','13032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2636','projected_crs','EPSG','3617','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3618','NAD83(NSRS2007) / New Mexico Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15340',NULL,0); INSERT INTO "usage" VALUES('EPSG','2637','projected_crs','EPSG','3618','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3619','NAD83(NSRS2007) / New Mexico East',NULL,'EPSG','4499','EPSG','4759','EPSG','13031',NULL,0); INSERT INTO "usage" VALUES('EPSG','2638','projected_crs','EPSG','3619','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3620','NAD83(NSRS2007) / New Mexico East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15339',NULL,0); INSERT INTO "usage" VALUES('EPSG','2639','projected_crs','EPSG','3620','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3621','NAD83(NSRS2007) / New Mexico West',NULL,'EPSG','4499','EPSG','4759','EPSG','13033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2640','projected_crs','EPSG','3621','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3622','NAD83(NSRS2007) / New Mexico West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15341',NULL,0); INSERT INTO "usage" VALUES('EPSG','2641','projected_crs','EPSG','3622','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3623','NAD83(NSRS2007) / New York Central',NULL,'EPSG','4499','EPSG','4759','EPSG','13132',NULL,0); INSERT INTO "usage" VALUES('EPSG','2642','projected_crs','EPSG','3623','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3624','NAD83(NSRS2007) / New York Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15343',NULL,0); INSERT INTO "usage" VALUES('EPSG','2643','projected_crs','EPSG','3624','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3625','NAD83(NSRS2007) / New York East',NULL,'EPSG','4499','EPSG','4759','EPSG','13131',NULL,0); INSERT INTO "usage" VALUES('EPSG','2644','projected_crs','EPSG','3625','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3626','NAD83(NSRS2007) / New York East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15342',NULL,0); INSERT INTO "usage" VALUES('EPSG','2645','projected_crs','EPSG','3626','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3627','NAD83(NSRS2007) / New York Long Island',NULL,'EPSG','4499','EPSG','4759','EPSG','13134',NULL,0); INSERT INTO "usage" VALUES('EPSG','2646','projected_crs','EPSG','3627','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3628','NAD83(NSRS2007) / New York Long Island (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15345',NULL,0); INSERT INTO "usage" VALUES('EPSG','2647','projected_crs','EPSG','3628','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3629','NAD83(NSRS2007) / New York West',NULL,'EPSG','4499','EPSG','4759','EPSG','13133',NULL,0); INSERT INTO "usage" VALUES('EPSG','2648','projected_crs','EPSG','3629','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3630','NAD83(NSRS2007) / New York West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15344',NULL,0); INSERT INTO "usage" VALUES('EPSG','2649','projected_crs','EPSG','3630','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3631','NAD83(NSRS2007) / North Carolina',NULL,'EPSG','4499','EPSG','4759','EPSG','13230',NULL,0); INSERT INTO "usage" VALUES('EPSG','2650','projected_crs','EPSG','3631','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3632','NAD83(NSRS2007) / North Carolina (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15346',NULL,0); INSERT INTO "usage" VALUES('EPSG','2651','projected_crs','EPSG','3632','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3633','NAD83(NSRS2007) / North Dakota North',NULL,'EPSG','4499','EPSG','4759','EPSG','13331',NULL,0); INSERT INTO "usage" VALUES('EPSG','2652','projected_crs','EPSG','3633','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3634','NAD83(NSRS2007) / North Dakota North (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15347',NULL,0); INSERT INTO "usage" VALUES('EPSG','2653','projected_crs','EPSG','3634','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3635','NAD83(NSRS2007) / North Dakota South',NULL,'EPSG','4499','EPSG','4759','EPSG','13332',NULL,0); INSERT INTO "usage" VALUES('EPSG','2654','projected_crs','EPSG','3635','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3636','NAD83(NSRS2007) / North Dakota South (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15348',NULL,0); INSERT INTO "usage" VALUES('EPSG','2655','projected_crs','EPSG','3636','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3637','NAD83(NSRS2007) / Ohio North',NULL,'EPSG','4499','EPSG','4759','EPSG','13431',NULL,0); INSERT INTO "usage" VALUES('EPSG','2656','projected_crs','EPSG','3637','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3638','NAD83(NSRS2007) / Ohio South',NULL,'EPSG','4499','EPSG','4759','EPSG','13432',NULL,0); INSERT INTO "usage" VALUES('EPSG','2657','projected_crs','EPSG','3638','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3639','NAD83(NSRS2007) / Oklahoma North',NULL,'EPSG','4499','EPSG','4759','EPSG','13531',NULL,0); INSERT INTO "usage" VALUES('EPSG','2658','projected_crs','EPSG','3639','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3640','NAD83(NSRS2007) / Oklahoma North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15349',NULL,0); INSERT INTO "usage" VALUES('EPSG','2659','projected_crs','EPSG','3640','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3641','NAD83(NSRS2007) / Oklahoma South',NULL,'EPSG','4499','EPSG','4759','EPSG','13532',NULL,0); INSERT INTO "usage" VALUES('EPSG','2660','projected_crs','EPSG','3641','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3642','NAD83(NSRS2007) / Oklahoma South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15350',NULL,0); INSERT INTO "usage" VALUES('EPSG','2661','projected_crs','EPSG','3642','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3643','NAD83(NSRS2007) / Oregon LCC (m)',NULL,'EPSG','4499','EPSG','4759','EPSG','13633',NULL,0); INSERT INTO "usage" VALUES('EPSG','2662','projected_crs','EPSG','3643','EPSG','1406','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','3644','NAD83(NSRS2007) / Oregon GIC Lambert (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15374',NULL,0); INSERT INTO "usage" VALUES('EPSG','2663','projected_crs','EPSG','3644','EPSG','1406','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3645','NAD83(NSRS2007) / Oregon North',NULL,'EPSG','4499','EPSG','4759','EPSG','13631',NULL,0); INSERT INTO "usage" VALUES('EPSG','2664','projected_crs','EPSG','3645','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3646','NAD83(NSRS2007) / Oregon North (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15351',NULL,0); INSERT INTO "usage" VALUES('EPSG','2665','projected_crs','EPSG','3646','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3647','NAD83(NSRS2007) / Oregon South',NULL,'EPSG','4499','EPSG','4759','EPSG','13632',NULL,0); INSERT INTO "usage" VALUES('EPSG','2666','projected_crs','EPSG','3647','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3648','NAD83(NSRS2007) / Oregon South (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15352',NULL,0); INSERT INTO "usage" VALUES('EPSG','2667','projected_crs','EPSG','3648','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3649','NAD83(NSRS2007) / Pennsylvania North',NULL,'EPSG','4499','EPSG','4759','EPSG','13731',NULL,0); INSERT INTO "usage" VALUES('EPSG','2668','projected_crs','EPSG','3649','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3650','NAD83(NSRS2007) / Pennsylvania North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15353',NULL,0); INSERT INTO "usage" VALUES('EPSG','2669','projected_crs','EPSG','3650','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3651','NAD83(NSRS2007) / Pennsylvania South',NULL,'EPSG','4499','EPSG','4759','EPSG','13732',NULL,0); INSERT INTO "usage" VALUES('EPSG','2670','projected_crs','EPSG','3651','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3652','NAD83(NSRS2007) / Pennsylvania South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15354',NULL,0); INSERT INTO "usage" VALUES('EPSG','2671','projected_crs','EPSG','3652','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3653','NAD83(NSRS2007) / Rhode Island',NULL,'EPSG','4499','EPSG','4759','EPSG','13830',NULL,0); INSERT INTO "usage" VALUES('EPSG','2672','projected_crs','EPSG','3653','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3654','NAD83(NSRS2007) / Rhode Island (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15390',NULL,0); INSERT INTO "usage" VALUES('EPSG','2673','projected_crs','EPSG','3654','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3655','NAD83(NSRS2007) / South Carolina',NULL,'EPSG','4499','EPSG','4759','EPSG','13930',NULL,0); INSERT INTO "usage" VALUES('EPSG','2674','projected_crs','EPSG','3655','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3656','NAD83(NSRS2007) / South Carolina (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15355',NULL,0); INSERT INTO "usage" VALUES('EPSG','2675','projected_crs','EPSG','3656','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3657','NAD83(NSRS2007) / South Dakota North',NULL,'EPSG','4499','EPSG','4759','EPSG','14031',NULL,0); INSERT INTO "usage" VALUES('EPSG','2676','projected_crs','EPSG','3657','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3658','NAD83(NSRS2007) / South Dakota North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15394',NULL,0); INSERT INTO "usage" VALUES('EPSG','2677','projected_crs','EPSG','3658','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3659','NAD83(NSRS2007) / South Dakota South',NULL,'EPSG','4499','EPSG','4759','EPSG','14032',NULL,0); INSERT INTO "usage" VALUES('EPSG','2678','projected_crs','EPSG','3659','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3660','NAD83(NSRS2007) / South Dakota South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15395',NULL,0); INSERT INTO "usage" VALUES('EPSG','2679','projected_crs','EPSG','3660','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3661','NAD83(NSRS2007) / Tennessee',NULL,'EPSG','4499','EPSG','4759','EPSG','14130',NULL,0); INSERT INTO "usage" VALUES('EPSG','2680','projected_crs','EPSG','3661','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3662','NAD83(NSRS2007) / Tennessee (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15356',NULL,0); INSERT INTO "usage" VALUES('EPSG','2681','projected_crs','EPSG','3662','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3663','NAD83(NSRS2007) / Texas Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14233',NULL,0); INSERT INTO "usage" VALUES('EPSG','2682','projected_crs','EPSG','3663','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3664','NAD83(NSRS2007) / Texas Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15359',NULL,0); INSERT INTO "usage" VALUES('EPSG','2683','projected_crs','EPSG','3664','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3665','NAD83(NSRS2007) / Texas Centric Albers Equal Area',NULL,'EPSG','4499','EPSG','4759','EPSG','14254',NULL,0); INSERT INTO "usage" VALUES('EPSG','2684','projected_crs','EPSG','3665','EPSG','1412','EPSG','1222'); INSERT INTO "projected_crs" VALUES('EPSG','3666','NAD83(NSRS2007) / Texas Centric Lambert Conformal',NULL,'EPSG','4499','EPSG','4759','EPSG','14253',NULL,0); INSERT INTO "usage" VALUES('EPSG','2685','projected_crs','EPSG','3666','EPSG','1412','EPSG','1221'); INSERT INTO "projected_crs" VALUES('EPSG','3667','NAD83(NSRS2007) / Texas North',NULL,'EPSG','4499','EPSG','4759','EPSG','14231',NULL,0); INSERT INTO "usage" VALUES('EPSG','2686','projected_crs','EPSG','3667','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3668','NAD83(NSRS2007) / Texas North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15357',NULL,0); INSERT INTO "usage" VALUES('EPSG','2687','projected_crs','EPSG','3668','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3669','NAD83(NSRS2007) / Texas North Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14232',NULL,0); INSERT INTO "usage" VALUES('EPSG','2688','projected_crs','EPSG','3669','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3670','NAD83(NSRS2007) / Texas North Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15358',NULL,0); INSERT INTO "usage" VALUES('EPSG','2689','projected_crs','EPSG','3670','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3671','NAD83(NSRS2007) / Texas South',NULL,'EPSG','4499','EPSG','4759','EPSG','14235',NULL,0); INSERT INTO "usage" VALUES('EPSG','2690','projected_crs','EPSG','3671','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3672','NAD83(NSRS2007) / Texas South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15361',NULL,0); INSERT INTO "usage" VALUES('EPSG','2691','projected_crs','EPSG','3672','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3673','NAD83(NSRS2007) / Texas South Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14234',NULL,0); INSERT INTO "usage" VALUES('EPSG','2692','projected_crs','EPSG','3673','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3674','NAD83(NSRS2007) / Texas South Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15360',NULL,0); INSERT INTO "usage" VALUES('EPSG','2693','projected_crs','EPSG','3674','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3675','NAD83(NSRS2007) / Utah Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14332',NULL,0); INSERT INTO "usage" VALUES('EPSG','2694','projected_crs','EPSG','3675','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3676','NAD83(NSRS2007) / Utah Central (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15363',NULL,0); INSERT INTO "usage" VALUES('EPSG','2695','projected_crs','EPSG','3676','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3677','NAD83(NSRS2007) / Utah Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15298',NULL,0); INSERT INTO "usage" VALUES('EPSG','2696','projected_crs','EPSG','3677','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3678','NAD83(NSRS2007) / Utah North',NULL,'EPSG','4499','EPSG','4759','EPSG','14331',NULL,0); INSERT INTO "usage" VALUES('EPSG','2697','projected_crs','EPSG','3678','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3679','NAD83(NSRS2007) / Utah North (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15362',NULL,0); INSERT INTO "usage" VALUES('EPSG','2698','projected_crs','EPSG','3679','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3680','NAD83(NSRS2007) / Utah North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15297',NULL,0); INSERT INTO "usage" VALUES('EPSG','2699','projected_crs','EPSG','3680','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3681','NAD83(NSRS2007) / Utah South',NULL,'EPSG','4499','EPSG','4759','EPSG','14333',NULL,0); INSERT INTO "usage" VALUES('EPSG','2700','projected_crs','EPSG','3681','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3682','NAD83(NSRS2007) / Utah South (ft)',NULL,'EPSG','4495','EPSG','4759','EPSG','15364',NULL,0); INSERT INTO "usage" VALUES('EPSG','2701','projected_crs','EPSG','3682','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3683','NAD83(NSRS2007) / Utah South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15299',NULL,0); INSERT INTO "usage" VALUES('EPSG','2702','projected_crs','EPSG','3683','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3684','NAD83(NSRS2007) / Vermont',NULL,'EPSG','4499','EPSG','4759','EPSG','14430',NULL,0); INSERT INTO "usage" VALUES('EPSG','2703','projected_crs','EPSG','3684','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3685','NAD83(NSRS2007) / Virginia North',NULL,'EPSG','4499','EPSG','4759','EPSG','14531',NULL,0); INSERT INTO "usage" VALUES('EPSG','2704','projected_crs','EPSG','3685','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3686','NAD83(NSRS2007) / Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15365',NULL,0); INSERT INTO "usage" VALUES('EPSG','2705','projected_crs','EPSG','3686','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3687','NAD83(NSRS2007) / Virginia South',NULL,'EPSG','4499','EPSG','4759','EPSG','14532',NULL,0); INSERT INTO "usage" VALUES('EPSG','2706','projected_crs','EPSG','3687','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3688','NAD83(NSRS2007) / Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15366',NULL,0); INSERT INTO "usage" VALUES('EPSG','2707','projected_crs','EPSG','3688','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3689','NAD83(NSRS2007) / Washington North',NULL,'EPSG','4499','EPSG','4759','EPSG','14631',NULL,0); INSERT INTO "usage" VALUES('EPSG','2708','projected_crs','EPSG','3689','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3690','NAD83(NSRS2007) / Washington North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15367',NULL,0); INSERT INTO "usage" VALUES('EPSG','2709','projected_crs','EPSG','3690','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3691','NAD83(NSRS2007) / Washington South',NULL,'EPSG','4499','EPSG','4759','EPSG','14632',NULL,0); INSERT INTO "usage" VALUES('EPSG','2710','projected_crs','EPSG','3691','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3692','NAD83(NSRS2007) / Washington South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15368',NULL,0); INSERT INTO "usage" VALUES('EPSG','2711','projected_crs','EPSG','3692','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3693','NAD83(NSRS2007) / West Virginia North',NULL,'EPSG','4499','EPSG','4759','EPSG','14731',NULL,0); INSERT INTO "usage" VALUES('EPSG','2712','projected_crs','EPSG','3693','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3694','NAD83(NSRS2007) / West Virginia South',NULL,'EPSG','4499','EPSG','4759','EPSG','14732',NULL,0); INSERT INTO "usage" VALUES('EPSG','2713','projected_crs','EPSG','3694','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3695','NAD83(NSRS2007) / Wisconsin Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14832',NULL,0); INSERT INTO "usage" VALUES('EPSG','2714','projected_crs','EPSG','3695','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3696','NAD83(NSRS2007) / Wisconsin Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15370',NULL,0); INSERT INTO "usage" VALUES('EPSG','2715','projected_crs','EPSG','3696','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3697','NAD83(NSRS2007) / Wisconsin North',NULL,'EPSG','4499','EPSG','4759','EPSG','14831',NULL,0); INSERT INTO "usage" VALUES('EPSG','2716','projected_crs','EPSG','3697','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3698','NAD83(NSRS2007) / Wisconsin North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15369',NULL,0); INSERT INTO "usage" VALUES('EPSG','2717','projected_crs','EPSG','3698','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3699','NAD83(NSRS2007) / Wisconsin South',NULL,'EPSG','4499','EPSG','4759','EPSG','14833',NULL,0); INSERT INTO "usage" VALUES('EPSG','2718','projected_crs','EPSG','3699','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3700','NAD83(NSRS2007) / Wisconsin South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15371',NULL,0); INSERT INTO "usage" VALUES('EPSG','2719','projected_crs','EPSG','3700','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3701','NAD83(NSRS2007) / Wisconsin Transverse Mercator',NULL,'EPSG','4499','EPSG','4759','EPSG','14841',NULL,0); INSERT INTO "usage" VALUES('EPSG','2720','projected_crs','EPSG','3701','EPSG','1418','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3702','NAD83(NSRS2007) / Wyoming East',NULL,'EPSG','4499','EPSG','4759','EPSG','14931',NULL,0); INSERT INTO "usage" VALUES('EPSG','2721','projected_crs','EPSG','3702','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3703','NAD83(NSRS2007) / Wyoming East Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14932',NULL,0); INSERT INTO "usage" VALUES('EPSG','2722','projected_crs','EPSG','3703','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3704','NAD83(NSRS2007) / Wyoming West Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14933',NULL,0); INSERT INTO "usage" VALUES('EPSG','2723','projected_crs','EPSG','3704','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3705','NAD83(NSRS2007) / Wyoming West',NULL,'EPSG','4499','EPSG','4759','EPSG','14934',NULL,0); INSERT INTO "usage" VALUES('EPSG','2724','projected_crs','EPSG','3705','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3706','NAD83(NSRS2007) / UTM zone 59N',NULL,'EPSG','4400','EPSG','4759','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('EPSG','2725','projected_crs','EPSG','3706','EPSG','3372','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3707','NAD83(NSRS2007) / UTM zone 60N',NULL,'EPSG','4400','EPSG','4759','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('EPSG','2726','projected_crs','EPSG','3707','EPSG','3373','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3708','NAD83(NSRS2007) / UTM zone 1N',NULL,'EPSG','4400','EPSG','4759','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('EPSG','2727','projected_crs','EPSG','3708','EPSG','3374','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3709','NAD83(NSRS2007) / UTM zone 2N',NULL,'EPSG','4400','EPSG','4759','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('EPSG','2728','projected_crs','EPSG','3709','EPSG','3375','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3710','NAD83(NSRS2007) / UTM zone 3N',NULL,'EPSG','4400','EPSG','4759','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('EPSG','2729','projected_crs','EPSG','3710','EPSG','2133','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3711','NAD83(NSRS2007) / UTM zone 4N',NULL,'EPSG','4400','EPSG','4759','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','2730','projected_crs','EPSG','3711','EPSG','2134','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3712','NAD83(NSRS2007) / UTM zone 5N',NULL,'EPSG','4400','EPSG','4759','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','2731','projected_crs','EPSG','3712','EPSG','2135','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3713','NAD83(NSRS2007) / UTM zone 6N',NULL,'EPSG','4400','EPSG','4759','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('EPSG','2732','projected_crs','EPSG','3713','EPSG','2136','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3714','NAD83(NSRS2007) / UTM zone 7N',NULL,'EPSG','4400','EPSG','4759','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','2733','projected_crs','EPSG','3714','EPSG','3494','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3715','NAD83(NSRS2007) / UTM zone 8N',NULL,'EPSG','4400','EPSG','4759','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','2734','projected_crs','EPSG','3715','EPSG','3495','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3716','NAD83(NSRS2007) / UTM zone 9N',NULL,'EPSG','4400','EPSG','4759','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','2735','projected_crs','EPSG','3716','EPSG','3496','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3717','NAD83(NSRS2007) / UTM zone 10N',NULL,'EPSG','4400','EPSG','4759','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','2736','projected_crs','EPSG','3717','EPSG','3497','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3718','NAD83(NSRS2007) / UTM zone 11N',NULL,'EPSG','4400','EPSG','4759','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','2737','projected_crs','EPSG','3718','EPSG','3498','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3719','NAD83(NSRS2007) / UTM zone 12N',NULL,'EPSG','4400','EPSG','4759','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','2738','projected_crs','EPSG','3719','EPSG','3499','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3720','NAD83(NSRS2007) / UTM zone 13N',NULL,'EPSG','4400','EPSG','4759','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','2739','projected_crs','EPSG','3720','EPSG','3500','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3721','NAD83(NSRS2007) / UTM zone 14N',NULL,'EPSG','4400','EPSG','4759','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','2740','projected_crs','EPSG','3721','EPSG','3501','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3722','NAD83(NSRS2007) / UTM zone 15N',NULL,'EPSG','4400','EPSG','4759','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','2741','projected_crs','EPSG','3722','EPSG','3502','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3723','NAD83(NSRS2007) / UTM zone 16N',NULL,'EPSG','4400','EPSG','4759','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','2742','projected_crs','EPSG','3723','EPSG','3503','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3724','NAD83(NSRS2007) / UTM zone 17N',NULL,'EPSG','4400','EPSG','4759','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','2743','projected_crs','EPSG','3724','EPSG','3504','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3725','NAD83(NSRS2007) / UTM zone 18N',NULL,'EPSG','4400','EPSG','4759','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','2744','projected_crs','EPSG','3725','EPSG','3505','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3726','NAD83(NSRS2007) / UTM zone 19N',NULL,'EPSG','4400','EPSG','4759','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','2745','projected_crs','EPSG','3726','EPSG','3506','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3727','Reunion 1947 / TM Reunion',NULL,'EPSG','4499','EPSG','4626','EPSG','19856',NULL,0); INSERT INTO "usage" VALUES('EPSG','2746','projected_crs','EPSG','3727','EPSG','3337','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3728','NAD83(NSRS2007) / Ohio North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','13433',NULL,0); INSERT INTO "usage" VALUES('EPSG','2747','projected_crs','EPSG','3728','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3729','NAD83(NSRS2007) / Ohio South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','13434',NULL,0); INSERT INTO "usage" VALUES('EPSG','2748','projected_crs','EPSG','3729','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3730','NAD83(NSRS2007) / Wyoming East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','14935',NULL,0); INSERT INTO "usage" VALUES('EPSG','2749','projected_crs','EPSG','3730','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3731','NAD83(NSRS2007) / Wyoming East Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','14936',NULL,0); INSERT INTO "usage" VALUES('EPSG','2750','projected_crs','EPSG','3731','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3732','NAD83(NSRS2007) / Wyoming West Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','14937',NULL,0); INSERT INTO "usage" VALUES('EPSG','2751','projected_crs','EPSG','3732','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3733','NAD83(NSRS2007) / Wyoming West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','14938',NULL,0); INSERT INTO "usage" VALUES('EPSG','2752','projected_crs','EPSG','3733','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3734','NAD83 / Ohio North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','13433',NULL,0); INSERT INTO "usage" VALUES('EPSG','2753','projected_crs','EPSG','3734','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3735','NAD83 / Ohio South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','13434',NULL,0); INSERT INTO "usage" VALUES('EPSG','2754','projected_crs','EPSG','3735','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3736','NAD83 / Wyoming East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','14935',NULL,0); INSERT INTO "usage" VALUES('EPSG','2755','projected_crs','EPSG','3736','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3737','NAD83 / Wyoming East Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','14936',NULL,0); INSERT INTO "usage" VALUES('EPSG','2756','projected_crs','EPSG','3737','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3738','NAD83 / Wyoming West Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','14937',NULL,0); INSERT INTO "usage" VALUES('EPSG','2757','projected_crs','EPSG','3738','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3739','NAD83 / Wyoming West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','14938',NULL,0); INSERT INTO "usage" VALUES('EPSG','2758','projected_crs','EPSG','3739','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3740','NAD83(HARN) / UTM zone 10N',NULL,'EPSG','4400','EPSG','4152','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','2759','projected_crs','EPSG','3740','EPSG','3857','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3741','NAD83(HARN) / UTM zone 11N',NULL,'EPSG','4400','EPSG','4152','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','2760','projected_crs','EPSG','3741','EPSG','3852','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3742','NAD83(HARN) / UTM zone 12N',NULL,'EPSG','4400','EPSG','4152','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','2761','projected_crs','EPSG','3742','EPSG','3499','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3743','NAD83(HARN) / UTM zone 13N',NULL,'EPSG','4400','EPSG','4152','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','2762','projected_crs','EPSG','3743','EPSG','3500','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3744','NAD83(HARN) / UTM zone 14N',NULL,'EPSG','4400','EPSG','4152','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','2763','projected_crs','EPSG','3744','EPSG','3860','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3745','NAD83(HARN) / UTM zone 15N',NULL,'EPSG','4400','EPSG','4152','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','2764','projected_crs','EPSG','3745','EPSG','3861','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3746','NAD83(HARN) / UTM zone 16N',NULL,'EPSG','4400','EPSG','4152','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','2765','projected_crs','EPSG','3746','EPSG','3862','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3747','NAD83(HARN) / UTM zone 17N',NULL,'EPSG','4400','EPSG','4152','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','2766','projected_crs','EPSG','3747','EPSG','3863','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3748','NAD83(HARN) / UTM zone 18N',NULL,'EPSG','4400','EPSG','4152','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','2767','projected_crs','EPSG','3748','EPSG','3868','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3749','NAD83(HARN) / UTM zone 19N',NULL,'EPSG','4400','EPSG','4152','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','2768','projected_crs','EPSG','3749','EPSG','3871','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3750','NAD83(HARN) / UTM zone 4N',NULL,'EPSG','4400','EPSG','4152','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','2769','projected_crs','EPSG','3750','EPSG','3488','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3751','NAD83(HARN) / UTM zone 5N',NULL,'EPSG','4400','EPSG','4152','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','2770','projected_crs','EPSG','3751','EPSG','3491','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3752','WGS 84 / Mercator 41',NULL,'EPSG','4499','EPSG','4326','EPSG','19855',NULL,1); INSERT INTO "usage" VALUES('EPSG','2771','projected_crs','EPSG','3752','EPSG','3508','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3753','NAD83(HARN) / Ohio North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','13433',NULL,0); INSERT INTO "usage" VALUES('EPSG','2772','projected_crs','EPSG','3753','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3754','NAD83(HARN) / Ohio South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','13434',NULL,0); INSERT INTO "usage" VALUES('EPSG','2773','projected_crs','EPSG','3754','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3755','NAD83(HARN) / Wyoming East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','14935',NULL,0); INSERT INTO "usage" VALUES('EPSG','2774','projected_crs','EPSG','3755','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3756','NAD83(HARN) / Wyoming East Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','14936',NULL,0); INSERT INTO "usage" VALUES('EPSG','2775','projected_crs','EPSG','3756','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3757','NAD83(HARN) / Wyoming West Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','14937',NULL,0); INSERT INTO "usage" VALUES('EPSG','2776','projected_crs','EPSG','3757','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3758','NAD83(HARN) / Wyoming West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','14938',NULL,0); INSERT INTO "usage" VALUES('EPSG','2777','projected_crs','EPSG','3758','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3759','NAD83 / Hawaii zone 3 (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15138',NULL,0); INSERT INTO "usage" VALUES('EPSG','2778','projected_crs','EPSG','3759','EPSG','1548','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3760','NAD83(HARN) / Hawaii zone 3 (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15138',NULL,0); INSERT INTO "usage" VALUES('EPSG','2779','projected_crs','EPSG','3760','EPSG','1548','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3761','NAD83(CSRS) / UTM zone 22N',NULL,'EPSG','4400','EPSG','4617','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','2780','projected_crs','EPSG','3761','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3762','WGS 84 / South Georgia Lambert',NULL,'EPSG','4400','EPSG','4326','EPSG','19854',NULL,0); INSERT INTO "usage" VALUES('EPSG','2781','projected_crs','EPSG','3762','EPSG','3529','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','3763','ETRS89 / Portugal TM06',NULL,'EPSG','4499','EPSG','4258','EPSG','19853',NULL,0); INSERT INTO "usage" VALUES('EPSG','2782','projected_crs','EPSG','3763','EPSG','1294','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','3764','NZGD2000 / Chatham Island Circuit 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17959',NULL,0); INSERT INTO "usage" VALUES('EPSG','2783','projected_crs','EPSG','3764','EPSG','2889','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','3765','HTRS96 / Croatia TM',NULL,'EPSG','4400','EPSG','4761','EPSG','19851',NULL,0); INSERT INTO "usage" VALUES('EPSG','2784','projected_crs','EPSG','3765','EPSG','3234','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3766','HTRS96 / Croatia LCC',NULL,'EPSG','4400','EPSG','4761','EPSG','19852',NULL,0); INSERT INTO "usage" VALUES('EPSG','2785','projected_crs','EPSG','3766','EPSG','1076','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3767','HTRS96 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4761','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','2786','projected_crs','EPSG','3767','EPSG','3539','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3768','HTRS96 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4761','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','2787','projected_crs','EPSG','3768','EPSG','3538','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3769','Bermuda 1957 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4216','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','2788','projected_crs','EPSG','3769','EPSG','3221','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','3770','BDA2000 / Bermuda 2000 National Grid',NULL,'EPSG','4400','EPSG','4762','EPSG','19849',NULL,0); INSERT INTO "usage" VALUES('EPSG','2789','projected_crs','EPSG','3770','EPSG','1047','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','3771','NAD27 / Alberta 3TM ref merid 111 W',NULL,'EPSG','4400','EPSG','4267','EPSG','17722',NULL,0); INSERT INTO "usage" VALUES('EPSG','2790','projected_crs','EPSG','3771','EPSG','3543','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3772','NAD27 / Alberta 3TM ref merid 114 W',NULL,'EPSG','4400','EPSG','4267','EPSG','17723',NULL,0); INSERT INTO "usage" VALUES('EPSG','2791','projected_crs','EPSG','3772','EPSG','3542','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3773','NAD27 / Alberta 3TM ref merid 117 W',NULL,'EPSG','4400','EPSG','4267','EPSG','17724',NULL,0); INSERT INTO "usage" VALUES('EPSG','2792','projected_crs','EPSG','3773','EPSG','3541','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3774','NAD27 / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','4267','EPSG','17725',NULL,1); INSERT INTO "usage" VALUES('EPSG','2793','projected_crs','EPSG','3774','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3775','NAD83 / Alberta 3TM ref merid 111 W',NULL,'EPSG','4400','EPSG','4269','EPSG','17722',NULL,0); INSERT INTO "usage" VALUES('EPSG','2794','projected_crs','EPSG','3775','EPSG','3543','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3776','NAD83 / Alberta 3TM ref merid 114 W',NULL,'EPSG','4400','EPSG','4269','EPSG','17723',NULL,0); INSERT INTO "usage" VALUES('EPSG','2795','projected_crs','EPSG','3776','EPSG','3542','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3777','NAD83 / Alberta 3TM ref merid 117 W',NULL,'EPSG','4400','EPSG','4269','EPSG','17724',NULL,0); INSERT INTO "usage" VALUES('EPSG','2796','projected_crs','EPSG','3777','EPSG','3541','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3778','NAD83 / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','4269','EPSG','17725',NULL,1); INSERT INTO "usage" VALUES('EPSG','2797','projected_crs','EPSG','3778','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3779','NAD83(CSRS) / Alberta 3TM ref merid 111 W',NULL,'EPSG','4400','EPSG','4617','EPSG','17722',NULL,0); INSERT INTO "usage" VALUES('EPSG','2798','projected_crs','EPSG','3779','EPSG','3543','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3780','NAD83(CSRS) / Alberta 3TM ref merid 114 W',NULL,'EPSG','4400','EPSG','4617','EPSG','17723',NULL,0); INSERT INTO "usage" VALUES('EPSG','2799','projected_crs','EPSG','3780','EPSG','3542','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3781','NAD83(CSRS) / Alberta 3TM ref merid 117 W',NULL,'EPSG','4400','EPSG','4617','EPSG','17724',NULL,0); INSERT INTO "usage" VALUES('EPSG','2800','projected_crs','EPSG','3781','EPSG','3541','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3782','NAD83(CSRS) / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','4617','EPSG','17725',NULL,1); INSERT INTO "usage" VALUES('EPSG','2801','projected_crs','EPSG','3782','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3783','Pitcairn 2006 / Pitcairn TM 2006',NULL,'EPSG','4400','EPSG','4763','EPSG','19848',NULL,0); INSERT INTO "usage" VALUES('EPSG','2802','projected_crs','EPSG','3783','EPSG','3208','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3784','Pitcairn 1967 / UTM zone 9S',NULL,'EPSG','4400','EPSG','4729','EPSG','16109',NULL,0); INSERT INTO "usage" VALUES('EPSG','2803','projected_crs','EPSG','3784','EPSG','3208','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','3785','Popular Visualisation CRS / Mercator',NULL,'EPSG','4499','EPSG','4055','EPSG','19847',NULL,1); INSERT INTO "usage" VALUES('EPSG','2804','projected_crs','EPSG','3785','EPSG','3544','EPSG','1098'); INSERT INTO "projected_crs" VALUES('EPSG','3786','World Equidistant Cylindrical (Sphere)',NULL,'EPSG','4499','EPSG','4047','EPSG','19968',NULL,1); INSERT INTO "usage" VALUES('EPSG','2805','projected_crs','EPSG','3786','EPSG','1262','EPSG','1098'); INSERT INTO "projected_crs" VALUES('EPSG','3787','MGI / Slovene National Grid',NULL,'EPSG','4498','EPSG','4312','EPSG','19845',NULL,1); INSERT INTO "usage" VALUES('EPSG','2806','projected_crs','EPSG','3787','EPSG','1212','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3788','NZGD2000 / Auckland Islands TM 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17960',NULL,0); INSERT INTO "usage" VALUES('EPSG','2807','projected_crs','EPSG','3788','EPSG','3554','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3789','NZGD2000 / Campbell Island TM 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17961',NULL,0); INSERT INTO "usage" VALUES('EPSG','2808','projected_crs','EPSG','3789','EPSG','3555','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3790','NZGD2000 / Antipodes Islands TM 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17962',NULL,0); INSERT INTO "usage" VALUES('EPSG','2809','projected_crs','EPSG','3790','EPSG','3556','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3791','NZGD2000 / Raoul Island TM 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17963',NULL,0); INSERT INTO "usage" VALUES('EPSG','2810','projected_crs','EPSG','3791','EPSG','3557','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3793','NZGD2000 / Chatham Islands TM 2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17965',NULL,0); INSERT INTO "usage" VALUES('EPSG','2811','projected_crs','EPSG','3793','EPSG','2889','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3794','Slovenia 1996 / Slovene National Grid',NULL,'EPSG','4400','EPSG','4765','EPSG','19845',NULL,0); INSERT INTO "usage" VALUES('EPSG','2812','projected_crs','EPSG','3794','EPSG','1212','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3795','NAD27 / Cuba Norte',NULL,'EPSG','4532','EPSG','4267','EPSG','18063',NULL,0); INSERT INTO "usage" VALUES('EPSG','2813','projected_crs','EPSG','3795','EPSG','1487','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3796','NAD27 / Cuba Sur',NULL,'EPSG','4532','EPSG','4267','EPSG','18064',NULL,0); INSERT INTO "usage" VALUES('EPSG','2814','projected_crs','EPSG','3796','EPSG','1488','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3797','NAD27 / MTQ Lambert',NULL,'EPSG','4499','EPSG','4267','EPSG','19844',NULL,0); INSERT INTO "usage" VALUES('EPSG','2815','projected_crs','EPSG','3797','EPSG','1368','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3798','NAD83 / MTQ Lambert',NULL,'EPSG','4499','EPSG','4269','EPSG','19844',NULL,0); INSERT INTO "usage" VALUES('EPSG','2816','projected_crs','EPSG','3798','EPSG','1368','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3799','NAD83(CSRS) / MTQ Lambert',NULL,'EPSG','4499','EPSG','4617','EPSG','19844',NULL,0); INSERT INTO "usage" VALUES('EPSG','2817','projected_crs','EPSG','3799','EPSG','1368','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','3800','NAD27 / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','4267','EPSG','17726',NULL,0); INSERT INTO "usage" VALUES('EPSG','2818','projected_crs','EPSG','3800','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3801','NAD83 / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','4269','EPSG','17726',NULL,0); INSERT INTO "usage" VALUES('EPSG','2819','projected_crs','EPSG','3801','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3802','NAD83(CSRS) / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','4617','EPSG','17726',NULL,0); INSERT INTO "usage" VALUES('EPSG','2820','projected_crs','EPSG','3802','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','3812','ETRS89 / Belgian Lambert 2008',NULL,'EPSG','4499','EPSG','4258','EPSG','3811',NULL,0); INSERT INTO "usage" VALUES('EPSG','2821','projected_crs','EPSG','3812','EPSG','1347','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3814','NAD83 / Mississippi TM',NULL,'EPSG','4499','EPSG','4269','EPSG','3813',NULL,0); INSERT INTO "usage" VALUES('EPSG','2822','projected_crs','EPSG','3814','EPSG','1393','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3815','NAD83(HARN) / Mississippi TM',NULL,'EPSG','4499','EPSG','4152','EPSG','3813',NULL,0); INSERT INTO "usage" VALUES('EPSG','2823','projected_crs','EPSG','3815','EPSG','1393','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3816','NAD83(NSRS2007) / Mississippi TM',NULL,'EPSG','4499','EPSG','4759','EPSG','3813',NULL,0); INSERT INTO "usage" VALUES('EPSG','2824','projected_crs','EPSG','3816','EPSG','1393','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3825','TWD97 / TM2 zone 119',NULL,'EPSG','4499','EPSG','3824','EPSG','3818',NULL,0); INSERT INTO "usage" VALUES('EPSG','2830','projected_crs','EPSG','3825','EPSG','3563','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3826','TWD97 / TM2 zone 121',NULL,'EPSG','4499','EPSG','3824','EPSG','3820',NULL,0); INSERT INTO "usage" VALUES('EPSG','2831','projected_crs','EPSG','3826','EPSG','3562','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3827','TWD67 / TM2 zone 119',NULL,'EPSG','4499','EPSG','3821','EPSG','3818',NULL,0); INSERT INTO "usage" VALUES('EPSG','2832','projected_crs','EPSG','3827','EPSG','3591','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3828','TWD67 / TM2 zone 121',NULL,'EPSG','4499','EPSG','3821','EPSG','3820',NULL,0); INSERT INTO "usage" VALUES('EPSG','2833','projected_crs','EPSG','3828','EPSG','3982','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3829','Hu Tzu Shan 1950 / UTM zone 51N',NULL,'EPSG','4400','EPSG','4236','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','2834','projected_crs','EPSG','3829','EPSG','3315','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3832','WGS 84 / PDC Mercator',NULL,'EPSG','4400','EPSG','4326','EPSG','3831',NULL,0); INSERT INTO "usage" VALUES('EPSG','2835','projected_crs','EPSG','3832','EPSG','3172','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','3833','Pulkovo 1942(58) / Gauss-Kruger zone 2',NULL,'EPSG','4530','EPSG','4179','EPSG','16202',NULL,0); INSERT INTO "usage" VALUES('EPSG','2836','projected_crs','EPSG','3833','EPSG','3575','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3834','Pulkovo 1942(83) / Gauss-Kruger zone 2',NULL,'EPSG','4530','EPSG','4178','EPSG','16202',NULL,0); INSERT INTO "usage" VALUES('EPSG','2837','projected_crs','EPSG','3834','EPSG','3575','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3835','Pulkovo 1942(83) / Gauss-Kruger zone 3',NULL,'EPSG','4530','EPSG','4178','EPSG','16203',NULL,0); INSERT INTO "usage" VALUES('EPSG','2838','projected_crs','EPSG','3835','EPSG','3576','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3836','Pulkovo 1942(83) / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4178','EPSG','16204',NULL,0); INSERT INTO "usage" VALUES('EPSG','2839','projected_crs','EPSG','3836','EPSG','3578','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3837','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3',NULL,'EPSG','4530','EPSG','4179','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','2840','projected_crs','EPSG','3837','EPSG','1512','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3838','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4179','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','2841','projected_crs','EPSG','3838','EPSG','1513','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3839','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','4179','EPSG','16269',NULL,0); INSERT INTO "usage" VALUES('EPSG','2842','projected_crs','EPSG','3839','EPSG','3587','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3840','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','4179','EPSG','16270',NULL,0); INSERT INTO "usage" VALUES('EPSG','2843','projected_crs','EPSG','3840','EPSG','3588','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3841','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','4178','EPSG','16266',NULL,0); INSERT INTO "usage" VALUES('EPSG','2844','projected_crs','EPSG','3841','EPSG','3582','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3842','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','4178','EPSG','16266',NULL,1); INSERT INTO "usage" VALUES('EPSG','2845','projected_crs','EPSG','3842','EPSG','3584','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3843','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4178','EPSG','16266',NULL,1); INSERT INTO "usage" VALUES('EPSG','2846','projected_crs','EPSG','3843','EPSG','3586','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3844','Pulkovo 1942(58) / Stereo70',NULL,'EPSG','4530','EPSG','4179','EPSG','19926',NULL,0); INSERT INTO "usage" VALUES('EPSG','2847','projected_crs','EPSG','3844','EPSG','1197','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','3845','SWEREF99 / RT90 7.5 gon V emulation',NULL,'EPSG','4530','EPSG','4619','EPSG','17339',NULL,0); INSERT INTO "usage" VALUES('EPSG','2848','projected_crs','EPSG','3845','EPSG','2845','EPSG','1230'); INSERT INTO "projected_crs" VALUES('EPSG','3846','SWEREF99 / RT90 5 gon V emulation',NULL,'EPSG','4530','EPSG','4619','EPSG','17340',NULL,0); INSERT INTO "usage" VALUES('EPSG','2849','projected_crs','EPSG','3846','EPSG','2846','EPSG','1230'); INSERT INTO "projected_crs" VALUES('EPSG','3847','SWEREF99 / RT90 2.5 gon V emulation',NULL,'EPSG','4530','EPSG','4619','EPSG','17341',NULL,0); INSERT INTO "usage" VALUES('EPSG','2850','projected_crs','EPSG','3847','EPSG','2847','EPSG','1230'); INSERT INTO "projected_crs" VALUES('EPSG','3848','SWEREF99 / RT90 0 gon emulation',NULL,'EPSG','4530','EPSG','4619','EPSG','17342',NULL,0); INSERT INTO "usage" VALUES('EPSG','2851','projected_crs','EPSG','3848','EPSG','2848','EPSG','1230'); INSERT INTO "projected_crs" VALUES('EPSG','3849','SWEREF99 / RT90 2.5 gon O emulation',NULL,'EPSG','4530','EPSG','4619','EPSG','17343',NULL,0); INSERT INTO "usage" VALUES('EPSG','2852','projected_crs','EPSG','3849','EPSG','2849','EPSG','1230'); INSERT INTO "projected_crs" VALUES('EPSG','3850','SWEREF99 / RT90 5 gon O emulation',NULL,'EPSG','4530','EPSG','4619','EPSG','17344',NULL,0); INSERT INTO "usage" VALUES('EPSG','2853','projected_crs','EPSG','3850','EPSG','2850','EPSG','1230'); INSERT INTO "projected_crs" VALUES('EPSG','3851','NZGD2000 / NZCS2000',NULL,'EPSG','4500','EPSG','4167','EPSG','17964',NULL,0); INSERT INTO "usage" VALUES('EPSG','2854','projected_crs','EPSG','3851','EPSG','3593','EPSG','1026'); INSERT INTO "projected_crs" VALUES('EPSG','3852','RSRGD2000 / DGLC2000',NULL,'EPSG','4500','EPSG','4764','EPSG','17966',NULL,0); INSERT INTO "usage" VALUES('EPSG','2855','projected_crs','EPSG','3852','EPSG','3592','EPSG','1236'); INSERT INTO "projected_crs" VALUES('EPSG','3854','County ST74',NULL,'EPSG','4531','EPSG','4619','EPSG','3853',NULL,0); INSERT INTO "usage" VALUES('EPSG','2856','projected_crs','EPSG','3854','EPSG','3608','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3857','WGS 84 / Pseudo-Mercator',NULL,'EPSG','4499','EPSG','4326','EPSG','3856',NULL,0); INSERT INTO "usage" VALUES('EPSG','2858','projected_crs','EPSG','3857','EPSG','3544','EPSG','1098'); INSERT INTO "projected_crs" VALUES('EPSG','3873','EUREF-FIN / GK19FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3860',NULL,0); INSERT INTO "usage" VALUES('EPSG','2859','projected_crs','EPSG','3873','EPSG','3595','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3874','EUREF-FIN / GK20FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3861',NULL,0); INSERT INTO "usage" VALUES('EPSG','2860','projected_crs','EPSG','3874','EPSG','3596','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3875','EUREF-FIN / GK21FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3862',NULL,0); INSERT INTO "usage" VALUES('EPSG','2861','projected_crs','EPSG','3875','EPSG','3597','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3876','EUREF-FIN / GK22FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3863',NULL,0); INSERT INTO "usage" VALUES('EPSG','2862','projected_crs','EPSG','3876','EPSG','3598','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3877','EUREF-FIN / GK23FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3864',NULL,0); INSERT INTO "usage" VALUES('EPSG','2863','projected_crs','EPSG','3877','EPSG','3599','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3878','EUREF-FIN / GK24FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3865',NULL,0); INSERT INTO "usage" VALUES('EPSG','2864','projected_crs','EPSG','3878','EPSG','3600','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3879','EUREF-FIN / GK25FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3866',NULL,0); INSERT INTO "usage" VALUES('EPSG','2865','projected_crs','EPSG','3879','EPSG','3601','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3880','EUREF-FIN / GK26FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3867',NULL,0); INSERT INTO "usage" VALUES('EPSG','2866','projected_crs','EPSG','3880','EPSG','3602','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3881','EUREF-FIN / GK27FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3868',NULL,0); INSERT INTO "usage" VALUES('EPSG','2867','projected_crs','EPSG','3881','EPSG','3603','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3882','EUREF-FIN / GK28FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3869',NULL,0); INSERT INTO "usage" VALUES('EPSG','2868','projected_crs','EPSG','3882','EPSG','3604','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3883','EUREF-FIN / GK29FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3870',NULL,0); INSERT INTO "usage" VALUES('EPSG','2869','projected_crs','EPSG','3883','EPSG','3605','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3884','EUREF-FIN / GK30FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3871',NULL,0); INSERT INTO "usage" VALUES('EPSG','2870','projected_crs','EPSG','3884','EPSG','3606','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3885','EUREF-FIN / GK31FIN',NULL,'EPSG','4500','EPSG','10690','EPSG','3872',NULL,0); INSERT INTO "usage" VALUES('EPSG','2871','projected_crs','EPSG','3885','EPSG','3607','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','3890','IGRS / UTM zone 37N',NULL,'EPSG','4400','EPSG','3889','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','2876','projected_crs','EPSG','3890','EPSG','3387','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3891','IGRS / UTM zone 38N',NULL,'EPSG','4400','EPSG','3889','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','2877','projected_crs','EPSG','3891','EPSG','3388','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3892','IGRS / UTM zone 39N',NULL,'EPSG','4400','EPSG','3889','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','2878','projected_crs','EPSG','3892','EPSG','3956','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3893','ED50 / Iraq National Grid',NULL,'EPSG','4400','EPSG','4230','EPSG','19907',NULL,0); INSERT INTO "usage" VALUES('EPSG','2879','projected_crs','EPSG','3893','EPSG','3625','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','3907','MGI 1901 / Balkans zone 5',NULL,'EPSG','4530','EPSG','3906','EPSG','18275',NULL,1); INSERT INTO "usage" VALUES('EPSG','2885','projected_crs','EPSG','3907','EPSG','1709','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3908','MGI 1901 / Balkans zone 6',NULL,'EPSG','4530','EPSG','3906','EPSG','18276',NULL,1); INSERT INTO "usage" VALUES('EPSG','2886','projected_crs','EPSG','3908','EPSG','1710','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3909','MGI 1901 / Balkans zone 7',NULL,'EPSG','4530','EPSG','3906','EPSG','18277',NULL,1); INSERT INTO "usage" VALUES('EPSG','2887','projected_crs','EPSG','3909','EPSG','1711','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3910','MGI 1901 / Balkans zone 8',NULL,'EPSG','4530','EPSG','3906','EPSG','18278',NULL,1); INSERT INTO "usage" VALUES('EPSG','2888','projected_crs','EPSG','3910','EPSG','1712','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3911','MGI 1901 / Slovenia Grid',NULL,'EPSG','4530','EPSG','3906','EPSG','19967',NULL,1); INSERT INTO "usage" VALUES('EPSG','2889','projected_crs','EPSG','3911','EPSG','1212','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3912','MGI 1901 / Slovene National Grid',NULL,'EPSG','4498','EPSG','3906','EPSG','19845',NULL,0); INSERT INTO "usage" VALUES('EPSG','2890','projected_crs','EPSG','3912','EPSG','1212','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','3920','Puerto Rico / UTM zone 20N',NULL,'EPSG','4400','EPSG','4139','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','2891','projected_crs','EPSG','3920','EPSG','3329','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3942','RGF93 v1 / CC42',NULL,'EPSG','4499','EPSG','4171','EPSG','18101',NULL,0); INSERT INTO "usage" VALUES('EPSG','2892','projected_crs','EPSG','3942','EPSG','3545','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3943','RGF93 v1 / CC43',NULL,'EPSG','4499','EPSG','4171','EPSG','18102',NULL,0); INSERT INTO "usage" VALUES('EPSG','2893','projected_crs','EPSG','3943','EPSG','3546','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3944','RGF93 v1 / CC44',NULL,'EPSG','4499','EPSG','4171','EPSG','18103',NULL,0); INSERT INTO "usage" VALUES('EPSG','2894','projected_crs','EPSG','3944','EPSG','3547','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3945','RGF93 v1 / CC45',NULL,'EPSG','4499','EPSG','4171','EPSG','18104',NULL,0); INSERT INTO "usage" VALUES('EPSG','2895','projected_crs','EPSG','3945','EPSG','3548','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3946','RGF93 v1 / CC46',NULL,'EPSG','4499','EPSG','4171','EPSG','18105',NULL,0); INSERT INTO "usage" VALUES('EPSG','2896','projected_crs','EPSG','3946','EPSG','3549','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3947','RGF93 v1 / CC47',NULL,'EPSG','4499','EPSG','4171','EPSG','18106',NULL,0); INSERT INTO "usage" VALUES('EPSG','2897','projected_crs','EPSG','3947','EPSG','3550','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3948','RGF93 v1 / CC48',NULL,'EPSG','4499','EPSG','4171','EPSG','18107',NULL,0); INSERT INTO "usage" VALUES('EPSG','2898','projected_crs','EPSG','3948','EPSG','3551','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3949','RGF93 v1 / CC49',NULL,'EPSG','4499','EPSG','4171','EPSG','18108',NULL,0); INSERT INTO "usage" VALUES('EPSG','2899','projected_crs','EPSG','3949','EPSG','3552','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3950','RGF93 v1 / CC50',NULL,'EPSG','4499','EPSG','4171','EPSG','18109',NULL,0); INSERT INTO "usage" VALUES('EPSG','2900','projected_crs','EPSG','3950','EPSG','3553','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3968','NAD83 / Virginia Lambert',NULL,'EPSG','4499','EPSG','4269','EPSG','3967',NULL,0); INSERT INTO "usage" VALUES('EPSG','2901','projected_crs','EPSG','3968','EPSG','1415','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3969','NAD83(HARN) / Virginia Lambert',NULL,'EPSG','4499','EPSG','4152','EPSG','3967',NULL,0); INSERT INTO "usage" VALUES('EPSG','2902','projected_crs','EPSG','3969','EPSG','1415','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3970','NAD83(NSRS2007) / Virginia Lambert',NULL,'EPSG','4499','EPSG','4759','EPSG','3967',NULL,0); INSERT INTO "usage" VALUES('EPSG','2903','projected_crs','EPSG','3970','EPSG','1415','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','3973','WGS 84 / NSIDC EASE-Grid North',NULL,'EPSG','4469','EPSG','4326','EPSG','3897',NULL,1); INSERT INTO "usage" VALUES('EPSG','2904','projected_crs','EPSG','3973','EPSG','3475','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','3974','WGS 84 / NSIDC EASE-Grid South',NULL,'EPSG','4470','EPSG','4326','EPSG','3898',NULL,1); INSERT INTO "usage" VALUES('EPSG','2905','projected_crs','EPSG','3974','EPSG','3474','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','3975','WGS 84 / NSIDC EASE-Grid Global',NULL,'EPSG','4499','EPSG','4326','EPSG','19869',NULL,1); INSERT INTO "usage" VALUES('EPSG','2906','projected_crs','EPSG','3975','EPSG','3463','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','3976','WGS 84 / NSIDC Sea Ice Polar Stereographic South',NULL,'EPSG','4470','EPSG','4326','EPSG','19866',NULL,0); INSERT INTO "usage" VALUES('EPSG','2907','projected_crs','EPSG','3976','EPSG','1997','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3978','NAD83 / Canada Atlas Lambert',NULL,'EPSG','4400','EPSG','4269','EPSG','3977',NULL,0); INSERT INTO "usage" VALUES('EPSG','2908','projected_crs','EPSG','3978','EPSG','1061','EPSG','1045'); INSERT INTO "projected_crs" VALUES('EPSG','3979','NAD83(CSRS) / Canada Atlas Lambert',NULL,'EPSG','4400','EPSG','4617','EPSG','3977',NULL,0); INSERT INTO "usage" VALUES('EPSG','2909','projected_crs','EPSG','3979','EPSG','1061','EPSG','1045'); INSERT INTO "projected_crs" VALUES('EPSG','3985','Katanga 1955 / Katanga Lambert',NULL,'EPSG','4499','EPSG','4695','EPSG','3980',NULL,1); INSERT INTO "usage" VALUES('EPSG','2910','projected_crs','EPSG','3985','EPSG','3147','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3986','Katanga 1955 / Katanga Gauss zone A',NULL,'EPSG','4499','EPSG','4695','EPSG','3981',NULL,0); INSERT INTO "usage" VALUES('EPSG','2911','projected_crs','EPSG','3986','EPSG','3612','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3987','Katanga 1955 / Katanga Gauss zone B',NULL,'EPSG','4499','EPSG','4695','EPSG','3982',NULL,0); INSERT INTO "usage" VALUES('EPSG','2912','projected_crs','EPSG','3987','EPSG','3611','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3988','Katanga 1955 / Katanga Gauss zone C',NULL,'EPSG','4499','EPSG','4695','EPSG','3983',NULL,0); INSERT INTO "usage" VALUES('EPSG','2913','projected_crs','EPSG','3988','EPSG','3610','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3989','Katanga 1955 / Katanga Gauss zone D',NULL,'EPSG','4499','EPSG','4695','EPSG','3984',NULL,0); INSERT INTO "usage" VALUES('EPSG','2914','projected_crs','EPSG','3989','EPSG','3609','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','3991','Puerto Rico State Plane CS of 1927',NULL,'EPSG','4497','EPSG','4139','EPSG','15201',NULL,0); INSERT INTO "usage" VALUES('EPSG','2915','projected_crs','EPSG','3991','EPSG','3294','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3992','Puerto Rico / St. Croix',NULL,'EPSG','4497','EPSG','4139','EPSG','15202',NULL,0); INSERT INTO "usage" VALUES('EPSG','2916','projected_crs','EPSG','3992','EPSG','3330','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','3993','Guam 1963 / Guam SPCS',NULL,'EPSG','4499','EPSG','4675','EPSG','15400',NULL,0); INSERT INTO "usage" VALUES('EPSG','2917','projected_crs','EPSG','3993','EPSG','3255','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','3994','WGS 84 / Mercator 41',NULL,'EPSG','4499','EPSG','4326','EPSG','19843',NULL,0); INSERT INTO "usage" VALUES('EPSG','2918','projected_crs','EPSG','3994','EPSG','3508','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','3995','WGS 84 / Arctic Polar Stereographic',NULL,'EPSG','4469','EPSG','4326','EPSG','19842',NULL,0); INSERT INTO "usage" VALUES('EPSG','2919','projected_crs','EPSG','3995','EPSG','1996','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','3996','WGS 84 / IBCAO Polar Stereographic',NULL,'EPSG','4469','EPSG','4326','EPSG','19840',NULL,0); INSERT INTO "usage" VALUES('EPSG','2920','projected_crs','EPSG','3996','EPSG','1996','EPSG','1198'); INSERT INTO "projected_crs" VALUES('EPSG','3997','WGS 84 / Dubai Local TM',NULL,'EPSG','4400','EPSG','4326','EPSG','19839',NULL,0); INSERT INTO "usage" VALUES('EPSG','2921','projected_crs','EPSG','3997','EPSG','3531','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4026','MOLDREF99 / Moldova TM',NULL,'EPSG','4530','EPSG','4023','EPSG','3999',NULL,0); INSERT INTO "usage" VALUES('EPSG','2948','projected_crs','EPSG','4026','EPSG','1162','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4037','WGS 84 / TMzn35N',NULL,'EPSG','4500','EPSG','4326','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','2959','projected_crs','EPSG','4037','EPSG','3615','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','4038','WGS 84 / TMzn36N',NULL,'EPSG','4500','EPSG','4326','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','2960','projected_crs','EPSG','4038','EPSG','3616','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','4048','RGRDC 2005 / Congo TM zone 12',NULL,'EPSG','4499','EPSG','4046','EPSG','17412',NULL,0); INSERT INTO "usage" VALUES('EPSG','2970','projected_crs','EPSG','4048','EPSG','3937','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4049','RGRDC 2005 / Congo TM zone 14',NULL,'EPSG','4499','EPSG','4046','EPSG','17414',NULL,0); INSERT INTO "usage" VALUES('EPSG','2971','projected_crs','EPSG','4049','EPSG','3151','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4050','RGRDC 2005 / Congo TM zone 16',NULL,'EPSG','4499','EPSG','4046','EPSG','17416',NULL,0); INSERT INTO "usage" VALUES('EPSG','2972','projected_crs','EPSG','4050','EPSG','3617','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4051','RGRDC 2005 / Congo TM zone 18',NULL,'EPSG','4499','EPSG','4046','EPSG','17418',NULL,0); INSERT INTO "usage" VALUES('EPSG','2973','projected_crs','EPSG','4051','EPSG','3618','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4056','RGRDC 2005 / Congo TM zone 20',NULL,'EPSG','4499','EPSG','4046','EPSG','17420',NULL,0); INSERT INTO "usage" VALUES('EPSG','2978','projected_crs','EPSG','4056','EPSG','3620','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4057','RGRDC 2005 / Congo TM zone 22',NULL,'EPSG','4499','EPSG','4046','EPSG','17422',NULL,0); INSERT INTO "usage" VALUES('EPSG','2979','projected_crs','EPSG','4057','EPSG','3621','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4058','RGRDC 2005 / Congo TM zone 24',NULL,'EPSG','4499','EPSG','4046','EPSG','17424',NULL,0); INSERT INTO "usage" VALUES('EPSG','2980','projected_crs','EPSG','4058','EPSG','3622','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4059','RGRDC 2005 / Congo TM zone 26',NULL,'EPSG','4499','EPSG','4046','EPSG','17426',NULL,0); INSERT INTO "usage" VALUES('EPSG','2981','projected_crs','EPSG','4059','EPSG','3623','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4060','RGRDC 2005 / Congo TM zone 28',NULL,'EPSG','4499','EPSG','4046','EPSG','17428',NULL,0); INSERT INTO "usage" VALUES('EPSG','2982','projected_crs','EPSG','4060','EPSG','3624','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','4061','RGRDC 2005 / UTM zone 33S',NULL,'EPSG','4499','EPSG','4046','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','2983','projected_crs','EPSG','4061','EPSG','3626','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','4062','RGRDC 2005 / UTM zone 34S',NULL,'EPSG','4499','EPSG','4046','EPSG','16134',NULL,0); INSERT INTO "usage" VALUES('EPSG','2984','projected_crs','EPSG','4062','EPSG','3627','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','4063','RGRDC 2005 / UTM zone 35S',NULL,'EPSG','4499','EPSG','4046','EPSG','16135',NULL,0); INSERT INTO "usage" VALUES('EPSG','2985','projected_crs','EPSG','4063','EPSG','3628','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','4071','Chua / UTM zone 23S',NULL,'EPSG','4400','EPSG','4224','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','2986','projected_crs','EPSG','4071','EPSG','3619','EPSG','1143'); INSERT INTO "projected_crs" VALUES('EPSG','4082','REGCAN95 / UTM zone 27N',NULL,'EPSG','4400','EPSG','4081','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','2993','projected_crs','EPSG','4082','EPSG','3629','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4083','REGCAN95 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4081','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','2994','projected_crs','EPSG','4083','EPSG','3630','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4087','WGS 84 / World Equidistant Cylindrical',NULL,'EPSG','4499','EPSG','4326','EPSG','4085',NULL,0); INSERT INTO "usage" VALUES('EPSG','2995','projected_crs','EPSG','4087','EPSG','1262','EPSG','1191'); INSERT INTO "projected_crs" VALUES('EPSG','4088','World Equidistant Cylindrical (Sphere)',NULL,'EPSG','4499','EPSG','4047','EPSG','4086',NULL,1); INSERT INTO "usage" VALUES('EPSG','2996','projected_crs','EPSG','4088','EPSG','1262','EPSG','1098'); INSERT INTO "projected_crs" VALUES('EPSG','4093','ETRS89 / DKTM1',NULL,'EPSG','4400','EPSG','4258','EPSG','4089',NULL,0); INSERT INTO "usage" VALUES('EPSG','2997','projected_crs','EPSG','4093','EPSG','3631','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4094','ETRS89 / DKTM2',NULL,'EPSG','4400','EPSG','4258','EPSG','4090',NULL,0); INSERT INTO "usage" VALUES('EPSG','2998','projected_crs','EPSG','4094','EPSG','3632','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4095','ETRS89 / DKTM3',NULL,'EPSG','4400','EPSG','4258','EPSG','4091',NULL,0); INSERT INTO "usage" VALUES('EPSG','2999','projected_crs','EPSG','4095','EPSG','2532','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4096','ETRS89 / DKTM4',NULL,'EPSG','4400','EPSG','4258','EPSG','4092',NULL,0); INSERT INTO "usage" VALUES('EPSG','3000','projected_crs','EPSG','4096','EPSG','2533','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4217','NAD83 / BLM 59N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4186',NULL,0); INSERT INTO "usage" VALUES('EPSG','3099','projected_crs','EPSG','4217','EPSG','3372','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4390','Kertau 1968 / Johor Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4114',NULL,0); INSERT INTO "usage" VALUES('EPSG','3266','projected_crs','EPSG','4390','EPSG','3376','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4391','Kertau 1968 / Sembilan and Melaka Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4115',NULL,0); INSERT INTO "usage" VALUES('EPSG','3267','projected_crs','EPSG','4391','EPSG','3377','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4392','Kertau 1968 / Pahang Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4116',NULL,0); INSERT INTO "usage" VALUES('EPSG','3268','projected_crs','EPSG','4392','EPSG','3378','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4393','Kertau 1968 / Selangor Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4117',NULL,0); INSERT INTO "usage" VALUES('EPSG','3269','projected_crs','EPSG','4393','EPSG','3379','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4394','Kertau 1968 / Terengganu Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4177',NULL,0); INSERT INTO "usage" VALUES('EPSG','3270','projected_crs','EPSG','4394','EPSG','3380','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4395','Kertau 1968 / Pinang Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4305',NULL,0); INSERT INTO "usage" VALUES('EPSG','3271','projected_crs','EPSG','4395','EPSG','3381','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4396','Kertau 1968 / Kedah and Perlis Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4320',NULL,0); INSERT INTO "usage" VALUES('EPSG','3272','projected_crs','EPSG','4396','EPSG','3382','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4397','Kertau 1968 / Perak Revised Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4321',NULL,0); INSERT INTO "usage" VALUES('EPSG','3273','projected_crs','EPSG','4397','EPSG','3383','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4398','Kertau 1968 / Kelantan Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','4323',NULL,0); INSERT INTO "usage" VALUES('EPSG','3274','projected_crs','EPSG','4398','EPSG','3384','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4399','NAD27 / BLM 59N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4186',NULL,0); INSERT INTO "usage" VALUES('EPSG','3275','projected_crs','EPSG','4399','EPSG','3372','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4400','NAD27 / BLM 60N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4187',NULL,0); INSERT INTO "usage" VALUES('EPSG','3276','projected_crs','EPSG','4400','EPSG','3373','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4401','NAD27 / BLM 1N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4101',NULL,0); INSERT INTO "usage" VALUES('EPSG','3277','projected_crs','EPSG','4401','EPSG','3374','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4402','NAD27 / BLM 2N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4102',NULL,0); INSERT INTO "usage" VALUES('EPSG','3278','projected_crs','EPSG','4402','EPSG','3375','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4403','NAD27 / BLM 3N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4103',NULL,0); INSERT INTO "usage" VALUES('EPSG','3279','projected_crs','EPSG','4403','EPSG','2133','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4404','NAD27 / BLM 4N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4104',NULL,0); INSERT INTO "usage" VALUES('EPSG','3280','projected_crs','EPSG','4404','EPSG','2134','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4405','NAD27 / BLM 5N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4105',NULL,0); INSERT INTO "usage" VALUES('EPSG','3281','projected_crs','EPSG','4405','EPSG','2135','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4406','NAD27 / BLM 6N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4106',NULL,0); INSERT INTO "usage" VALUES('EPSG','3282','projected_crs','EPSG','4406','EPSG','2136','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4407','NAD27 / BLM 7N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4107',NULL,0); INSERT INTO "usage" VALUES('EPSG','3283','projected_crs','EPSG','4407','EPSG','3494','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4408','NAD27 / BLM 8N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4108',NULL,0); INSERT INTO "usage" VALUES('EPSG','3284','projected_crs','EPSG','4408','EPSG','3495','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4409','NAD27 / BLM 9N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4109',NULL,0); INSERT INTO "usage" VALUES('EPSG','3285','projected_crs','EPSG','4409','EPSG','3496','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4410','NAD27 / BLM 10N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4110',NULL,0); INSERT INTO "usage" VALUES('EPSG','3286','projected_crs','EPSG','4410','EPSG','3497','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4411','NAD27 / BLM 11N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4111',NULL,0); INSERT INTO "usage" VALUES('EPSG','3287','projected_crs','EPSG','4411','EPSG','3498','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4412','NAD27 / BLM 12N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4112',NULL,0); INSERT INTO "usage" VALUES('EPSG','3288','projected_crs','EPSG','4412','EPSG','3499','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4413','NAD27 / BLM 13N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4113',NULL,0); INSERT INTO "usage" VALUES('EPSG','3289','projected_crs','EPSG','4413','EPSG','3500','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4414','NAD83(HARN) / Guam Map Grid',NULL,'EPSG','4499','EPSG','4152','EPSG','4325',NULL,0); INSERT INTO "usage" VALUES('EPSG','3290','projected_crs','EPSG','4414','EPSG','3255','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','4415','Katanga 1955 / Katanga Lambert',NULL,'EPSG','4499','EPSG','4695','EPSG','4416',NULL,0); INSERT INTO "usage" VALUES('EPSG','3291','projected_crs','EPSG','4415','EPSG','3147','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','4417','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','4178','EPSG','16267',NULL,0); INSERT INTO "usage" VALUES('EPSG','3292','projected_crs','EPSG','4417','EPSG','3584','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','4418','NAD27 / BLM 18N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4118',NULL,0); INSERT INTO "usage" VALUES('EPSG','3293','projected_crs','EPSG','4418','EPSG','3505','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4419','NAD27 / BLM 19N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','4119',NULL,0); INSERT INTO "usage" VALUES('EPSG','3294','projected_crs','EPSG','4419','EPSG','3506','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4420','NAD83 / BLM 60N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4187',NULL,0); INSERT INTO "usage" VALUES('EPSG','3295','projected_crs','EPSG','4420','EPSG','3373','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4421','NAD83 / BLM 1N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4101',NULL,0); INSERT INTO "usage" VALUES('EPSG','3296','projected_crs','EPSG','4421','EPSG','3374','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4422','NAD83 / BLM 2N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4102',NULL,0); INSERT INTO "usage" VALUES('EPSG','3297','projected_crs','EPSG','4422','EPSG','3375','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4423','NAD83 / BLM 3N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4103',NULL,0); INSERT INTO "usage" VALUES('EPSG','3298','projected_crs','EPSG','4423','EPSG','2133','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4424','NAD83 / BLM 4N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4104',NULL,0); INSERT INTO "usage" VALUES('EPSG','3299','projected_crs','EPSG','4424','EPSG','2134','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4425','NAD83 / BLM 5N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4105',NULL,0); INSERT INTO "usage" VALUES('EPSG','3300','projected_crs','EPSG','4425','EPSG','2135','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4426','NAD83 / BLM 6N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4106',NULL,0); INSERT INTO "usage" VALUES('EPSG','3301','projected_crs','EPSG','4426','EPSG','2136','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4427','NAD83 / BLM 7N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4107',NULL,0); INSERT INTO "usage" VALUES('EPSG','3302','projected_crs','EPSG','4427','EPSG','3494','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4428','NAD83 / BLM 8N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4108',NULL,0); INSERT INTO "usage" VALUES('EPSG','3303','projected_crs','EPSG','4428','EPSG','3495','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4429','NAD83 / BLM 9N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4109',NULL,0); INSERT INTO "usage" VALUES('EPSG','3304','projected_crs','EPSG','4429','EPSG','3496','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4430','NAD83 / BLM 10N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4110',NULL,0); INSERT INTO "usage" VALUES('EPSG','3305','projected_crs','EPSG','4430','EPSG','3497','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4431','NAD83 / BLM 11N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4111',NULL,0); INSERT INTO "usage" VALUES('EPSG','3306','projected_crs','EPSG','4431','EPSG','3498','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4432','NAD83 / BLM 12N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4112',NULL,0); INSERT INTO "usage" VALUES('EPSG','3307','projected_crs','EPSG','4432','EPSG','3499','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4433','NAD83 / BLM 13N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4113',NULL,0); INSERT INTO "usage" VALUES('EPSG','3308','projected_crs','EPSG','4433','EPSG','3500','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4434','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4178','EPSG','16268',NULL,0); INSERT INTO "usage" VALUES('EPSG','3309','projected_crs','EPSG','4434','EPSG','3586','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','4437','NAD83(NSRS2007) / Puerto Rico and Virgin Is.',NULL,'EPSG','4499','EPSG','4759','EPSG','15230',NULL,0); INSERT INTO "usage" VALUES('EPSG','3310','projected_crs','EPSG','4437','EPSG','3634','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4438','NAD83 / BLM 18N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4118',NULL,0); INSERT INTO "usage" VALUES('EPSG','3311','projected_crs','EPSG','4438','EPSG','3505','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4439','NAD83 / BLM 19N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','4119',NULL,0); INSERT INTO "usage" VALUES('EPSG','3312','projected_crs','EPSG','4439','EPSG','3506','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','4455','NAD27 / Pennsylvania South',NULL,'EPSG','4497','EPSG','4267','EPSG','4436',NULL,0); INSERT INTO "usage" VALUES('EPSG','3314','projected_crs','EPSG','4455','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4456','NAD27 / New York Long Island',NULL,'EPSG','4497','EPSG','4267','EPSG','4454',NULL,0); INSERT INTO "usage" VALUES('EPSG','3315','projected_crs','EPSG','4456','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4457','NAD83 / South Dakota North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15394',NULL,0); INSERT INTO "usage" VALUES('EPSG','3316','projected_crs','EPSG','4457','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4462','WGS 84 / Australian Centre for Remote Sensing Lambert',NULL,'EPSG','4400','EPSG','4326','EPSG','4460',NULL,0); INSERT INTO "usage" VALUES('EPSG','3318','projected_crs','EPSG','4462','EPSG','2575','EPSG','1047'); INSERT INTO "projected_crs" VALUES('EPSG','4467','RGSPM06 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4463','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','3322','projected_crs','EPSG','4467','EPSG','1220','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4471','RGM04 / UTM zone 38S',NULL,'EPSG','4400','EPSG','4470','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','3326','projected_crs','EPSG','4471','EPSG','1159','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4474','Cadastre 1997 / UTM zone 38S',NULL,'EPSG','4400','EPSG','4632','EPSG','16138',NULL,1); INSERT INTO "usage" VALUES('EPSG','3329','projected_crs','EPSG','4474','EPSG','3340','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','4484','Mexico ITRF92 / UTM zone 11N',NULL,'EPSG','4400','EPSG','4483','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','3336','projected_crs','EPSG','4484','EPSG','3423','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4485','Mexico ITRF92 / UTM zone 12N',NULL,'EPSG','4400','EPSG','4483','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','3337','projected_crs','EPSG','4485','EPSG','3424','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4486','Mexico ITRF92 / UTM zone 13N',NULL,'EPSG','4400','EPSG','4483','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','3338','projected_crs','EPSG','4486','EPSG','3425','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4487','Mexico ITRF92 / UTM zone 14N',NULL,'EPSG','4400','EPSG','4483','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','3339','projected_crs','EPSG','4487','EPSG','3426','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4488','Mexico ITRF92 / UTM zone 15N',NULL,'EPSG','4400','EPSG','4483','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','3340','projected_crs','EPSG','4488','EPSG','3633','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4489','Mexico ITRF92 / UTM zone 16N',NULL,'EPSG','4400','EPSG','4483','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','3341','projected_crs','EPSG','4489','EPSG','3635','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4491','CGCS2000 / Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4490','EPSG','16213',NULL,0); INSERT INTO "usage" VALUES('EPSG','3343','projected_crs','EPSG','4491','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4492','CGCS2000 / Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4490','EPSG','16214',NULL,0); INSERT INTO "usage" VALUES('EPSG','3344','projected_crs','EPSG','4492','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4493','CGCS2000 / Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4490','EPSG','16215',NULL,0); INSERT INTO "usage" VALUES('EPSG','3345','projected_crs','EPSG','4493','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4494','CGCS2000 / Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4490','EPSG','16216',NULL,0); INSERT INTO "usage" VALUES('EPSG','3346','projected_crs','EPSG','4494','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4495','CGCS2000 / Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4490','EPSG','16217',NULL,0); INSERT INTO "usage" VALUES('EPSG','3347','projected_crs','EPSG','4495','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4496','CGCS2000 / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4490','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','3348','projected_crs','EPSG','4496','EPSG','3944','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4497','CGCS2000 / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4490','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','3349','projected_crs','EPSG','4497','EPSG','3945','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4498','CGCS2000 / Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4490','EPSG','16220',NULL,0); INSERT INTO "usage" VALUES('EPSG','3350','projected_crs','EPSG','4498','EPSG','3946','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4499','CGCS2000 / Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4490','EPSG','16221',NULL,0); INSERT INTO "usage" VALUES('EPSG','3351','projected_crs','EPSG','4499','EPSG','3947','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4500','CGCS2000 / Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4490','EPSG','16222',NULL,0); INSERT INTO "usage" VALUES('EPSG','3352','projected_crs','EPSG','4500','EPSG','3948','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4501','CGCS2000 / Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4490','EPSG','16223',NULL,0); INSERT INTO "usage" VALUES('EPSG','3353','projected_crs','EPSG','4501','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4502','CGCS2000 / Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4490','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','3354','projected_crs','EPSG','4502','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4503','CGCS2000 / Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4490','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','3355','projected_crs','EPSG','4503','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4504','CGCS2000 / Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4490','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','3356','projected_crs','EPSG','4504','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4505','CGCS2000 / Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4490','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','3357','projected_crs','EPSG','4505','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4506','CGCS2000 / Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4490','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','3358','projected_crs','EPSG','4506','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4507','CGCS2000 / Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4490','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','3359','projected_crs','EPSG','4507','EPSG','3944','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4508','CGCS2000 / Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4490','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','3360','projected_crs','EPSG','4508','EPSG','3945','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4509','CGCS2000 / Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4490','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','3361','projected_crs','EPSG','4509','EPSG','3946','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4510','CGCS2000 / Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4490','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','3362','projected_crs','EPSG','4510','EPSG','3947','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4511','CGCS2000 / Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4490','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','3363','projected_crs','EPSG','4511','EPSG','3948','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4512','CGCS2000 / Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4490','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','3364','projected_crs','EPSG','4512','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4513','CGCS2000 / 3-degree Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4490','EPSG','16285',NULL,0); INSERT INTO "usage" VALUES('EPSG','3365','projected_crs','EPSG','4513','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4514','CGCS2000 / 3-degree Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4490','EPSG','16286',NULL,0); INSERT INTO "usage" VALUES('EPSG','3366','projected_crs','EPSG','4514','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4515','CGCS2000 / 3-degree Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4490','EPSG','16287',NULL,0); INSERT INTO "usage" VALUES('EPSG','3367','projected_crs','EPSG','4515','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4516','CGCS2000 / 3-degree Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4490','EPSG','16288',NULL,0); INSERT INTO "usage" VALUES('EPSG','3368','projected_crs','EPSG','4516','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4517','CGCS2000 / 3-degree Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4490','EPSG','16289',NULL,0); INSERT INTO "usage" VALUES('EPSG','3369','projected_crs','EPSG','4517','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4518','CGCS2000 / 3-degree Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4490','EPSG','16290',NULL,0); INSERT INTO "usage" VALUES('EPSG','3370','projected_crs','EPSG','4518','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4519','CGCS2000 / 3-degree Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4490','EPSG','16291',NULL,0); INSERT INTO "usage" VALUES('EPSG','3371','projected_crs','EPSG','4519','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4520','CGCS2000 / 3-degree Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4490','EPSG','16292',NULL,0); INSERT INTO "usage" VALUES('EPSG','3372','projected_crs','EPSG','4520','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4521','CGCS2000 / 3-degree Gauss-Kruger zone 33',NULL,'EPSG','4530','EPSG','4490','EPSG','16293',NULL,0); INSERT INTO "usage" VALUES('EPSG','3373','projected_crs','EPSG','4521','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4522','CGCS2000 / 3-degree Gauss-Kruger zone 34',NULL,'EPSG','4530','EPSG','4490','EPSG','16294',NULL,0); INSERT INTO "usage" VALUES('EPSG','3374','projected_crs','EPSG','4522','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4523','CGCS2000 / 3-degree Gauss-Kruger zone 35',NULL,'EPSG','4530','EPSG','4490','EPSG','16295',NULL,0); INSERT INTO "usage" VALUES('EPSG','3375','projected_crs','EPSG','4523','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4524','CGCS2000 / 3-degree Gauss-Kruger zone 36',NULL,'EPSG','4530','EPSG','4490','EPSG','16296',NULL,0); INSERT INTO "usage" VALUES('EPSG','3376','projected_crs','EPSG','4524','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4525','CGCS2000 / 3-degree Gauss-Kruger zone 37',NULL,'EPSG','4530','EPSG','4490','EPSG','16297',NULL,0); INSERT INTO "usage" VALUES('EPSG','3377','projected_crs','EPSG','4525','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4526','CGCS2000 / 3-degree Gauss-Kruger zone 38',NULL,'EPSG','4530','EPSG','4490','EPSG','16298',NULL,0); INSERT INTO "usage" VALUES('EPSG','3378','projected_crs','EPSG','4526','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4527','CGCS2000 / 3-degree Gauss-Kruger zone 39',NULL,'EPSG','4530','EPSG','4490','EPSG','16299',NULL,0); INSERT INTO "usage" VALUES('EPSG','3379','projected_crs','EPSG','4527','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4528','CGCS2000 / 3-degree Gauss-Kruger zone 40',NULL,'EPSG','4530','EPSG','4490','EPSG','16070',NULL,0); INSERT INTO "usage" VALUES('EPSG','3380','projected_crs','EPSG','4528','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4529','CGCS2000 / 3-degree Gauss-Kruger zone 41',NULL,'EPSG','4530','EPSG','4490','EPSG','16071',NULL,0); INSERT INTO "usage" VALUES('EPSG','3381','projected_crs','EPSG','4529','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4530','CGCS2000 / 3-degree Gauss-Kruger zone 42',NULL,'EPSG','4530','EPSG','4490','EPSG','16072',NULL,0); INSERT INTO "usage" VALUES('EPSG','3382','projected_crs','EPSG','4530','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4531','CGCS2000 / 3-degree Gauss-Kruger zone 43',NULL,'EPSG','4530','EPSG','4490','EPSG','16073',NULL,0); INSERT INTO "usage" VALUES('EPSG','3383','projected_crs','EPSG','4531','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4532','CGCS2000 / 3-degree Gauss-Kruger zone 44',NULL,'EPSG','4530','EPSG','4490','EPSG','16074',NULL,0); INSERT INTO "usage" VALUES('EPSG','3384','projected_crs','EPSG','4532','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4533','CGCS2000 / 3-degree Gauss-Kruger zone 45',NULL,'EPSG','4530','EPSG','4490','EPSG','16075',NULL,0); INSERT INTO "usage" VALUES('EPSG','3385','projected_crs','EPSG','4533','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4534','CGCS2000 / 3-degree Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4490','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','3386','projected_crs','EPSG','4534','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4535','CGCS2000 / 3-degree Gauss-Kruger CM 78E',NULL,'EPSG','4530','EPSG','4490','EPSG','16386',NULL,0); INSERT INTO "usage" VALUES('EPSG','3387','projected_crs','EPSG','4535','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4536','CGCS2000 / 3-degree Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4490','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','3388','projected_crs','EPSG','4536','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4537','CGCS2000 / 3-degree Gauss-Kruger CM 84E',NULL,'EPSG','4530','EPSG','4490','EPSG','16388',NULL,0); INSERT INTO "usage" VALUES('EPSG','3389','projected_crs','EPSG','4537','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4538','CGCS2000 / 3-degree Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4490','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','3390','projected_crs','EPSG','4538','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4539','CGCS2000 / 3-degree Gauss-Kruger CM 90E',NULL,'EPSG','4530','EPSG','4490','EPSG','16390',NULL,0); INSERT INTO "usage" VALUES('EPSG','3391','projected_crs','EPSG','4539','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4540','CGCS2000 / 3-degree Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4490','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','3392','projected_crs','EPSG','4540','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4541','CGCS2000 / 3-degree Gauss-Kruger CM 96E',NULL,'EPSG','4530','EPSG','4490','EPSG','16392',NULL,0); INSERT INTO "usage" VALUES('EPSG','3393','projected_crs','EPSG','4541','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4542','CGCS2000 / 3-degree Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4490','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','3394','projected_crs','EPSG','4542','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4543','CGCS2000 / 3-degree Gauss-Kruger CM 102E',NULL,'EPSG','4530','EPSG','4490','EPSG','16394',NULL,0); INSERT INTO "usage" VALUES('EPSG','3395','projected_crs','EPSG','4543','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4544','CGCS2000 / 3-degree Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4490','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','3396','projected_crs','EPSG','4544','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4545','CGCS2000 / 3-degree Gauss-Kruger CM 108E',NULL,'EPSG','4530','EPSG','4490','EPSG','16396',NULL,0); INSERT INTO "usage" VALUES('EPSG','3397','projected_crs','EPSG','4545','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4546','CGCS2000 / 3-degree Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4490','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','3398','projected_crs','EPSG','4546','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4547','CGCS2000 / 3-degree Gauss-Kruger CM 114E',NULL,'EPSG','4530','EPSG','4490','EPSG','16398',NULL,0); INSERT INTO "usage" VALUES('EPSG','3399','projected_crs','EPSG','4547','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4548','CGCS2000 / 3-degree Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4490','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','3400','projected_crs','EPSG','4548','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4549','CGCS2000 / 3-degree Gauss-Kruger CM 120E',NULL,'EPSG','4530','EPSG','4490','EPSG','16170',NULL,0); INSERT INTO "usage" VALUES('EPSG','3401','projected_crs','EPSG','4549','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4550','CGCS2000 / 3-degree Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4490','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','3402','projected_crs','EPSG','4550','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4551','CGCS2000 / 3-degree Gauss-Kruger CM 126E',NULL,'EPSG','4530','EPSG','4490','EPSG','16172',NULL,0); INSERT INTO "usage" VALUES('EPSG','3403','projected_crs','EPSG','4551','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4552','CGCS2000 / 3-degree Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4490','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','3404','projected_crs','EPSG','4552','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4553','CGCS2000 / 3-degree Gauss-Kruger CM 132E',NULL,'EPSG','4530','EPSG','4490','EPSG','16174',NULL,0); INSERT INTO "usage" VALUES('EPSG','3405','projected_crs','EPSG','4553','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4554','CGCS2000 / 3-degree Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4490','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','3406','projected_crs','EPSG','4554','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4559','RRAF 1991 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4558','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','3411','projected_crs','EPSG','4559','EPSG','3825','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','4568','New Beijing / Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4555','EPSG','16213',NULL,0); INSERT INTO "usage" VALUES('EPSG','3412','projected_crs','EPSG','4568','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4569','New Beijing / Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4555','EPSG','16214',NULL,0); INSERT INTO "usage" VALUES('EPSG','3413','projected_crs','EPSG','4569','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4570','New Beijing / Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4555','EPSG','16215',NULL,0); INSERT INTO "usage" VALUES('EPSG','3414','projected_crs','EPSG','4570','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4571','New Beijing / Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4555','EPSG','16216',NULL,0); INSERT INTO "usage" VALUES('EPSG','3415','projected_crs','EPSG','4571','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4572','New Beijing / Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4555','EPSG','16217',NULL,0); INSERT INTO "usage" VALUES('EPSG','3416','projected_crs','EPSG','4572','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4573','New Beijing / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4555','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','3417','projected_crs','EPSG','4573','EPSG','1592','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4574','New Beijing / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4555','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','3418','projected_crs','EPSG','4574','EPSG','1593','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4575','New Beijing / Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4555','EPSG','16220',NULL,0); INSERT INTO "usage" VALUES('EPSG','3419','projected_crs','EPSG','4575','EPSG','1594','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4576','New Beijing / Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4555','EPSG','16221',NULL,0); INSERT INTO "usage" VALUES('EPSG','3420','projected_crs','EPSG','4576','EPSG','1595','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4577','New Beijing / Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4555','EPSG','16222',NULL,0); INSERT INTO "usage" VALUES('EPSG','3421','projected_crs','EPSG','4577','EPSG','1596','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4578','New Beijing / Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4555','EPSG','16223',NULL,0); INSERT INTO "usage" VALUES('EPSG','3422','projected_crs','EPSG','4578','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4579','New Beijing / Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4555','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','3423','projected_crs','EPSG','4579','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4580','New Beijing / Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4555','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','3424','projected_crs','EPSG','4580','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4581','New Beijing / Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4555','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','3425','projected_crs','EPSG','4581','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4582','New Beijing / Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4555','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','3426','projected_crs','EPSG','4582','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4583','New Beijing / Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4555','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','3427','projected_crs','EPSG','4583','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4584','New Beijing / Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4555','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','3428','projected_crs','EPSG','4584','EPSG','1592','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4585','New Beijing / Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4555','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','3429','projected_crs','EPSG','4585','EPSG','1593','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4586','New Beijing / Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4555','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','3430','projected_crs','EPSG','4586','EPSG','1594','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4587','New Beijing / Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4555','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','3431','projected_crs','EPSG','4587','EPSG','1595','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4588','New Beijing / Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4555','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','3432','projected_crs','EPSG','4588','EPSG','1596','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4589','New Beijing / Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4555','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','3433','projected_crs','EPSG','4589','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4647','ETRS89 / UTM zone 32N (zE-N)',NULL,'EPSG','4400','EPSG','4258','EPSG','4648',NULL,0); INSERT INTO "usage" VALUES('EPSG','3481','projected_crs','EPSG','4647','EPSG','2861','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','4652','New Beijing / 3-degree Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4555','EPSG','16285',NULL,0); INSERT INTO "usage" VALUES('EPSG','3482','projected_crs','EPSG','4652','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4653','New Beijing / 3-degree Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4555','EPSG','16286',NULL,0); INSERT INTO "usage" VALUES('EPSG','3483','projected_crs','EPSG','4653','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4654','New Beijing / 3-degree Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4555','EPSG','16287',NULL,0); INSERT INTO "usage" VALUES('EPSG','3484','projected_crs','EPSG','4654','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4655','New Beijing / 3-degree Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4555','EPSG','16288',NULL,0); INSERT INTO "usage" VALUES('EPSG','3485','projected_crs','EPSG','4655','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4656','New Beijing / 3-degree Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4555','EPSG','16289',NULL,0); INSERT INTO "usage" VALUES('EPSG','3486','projected_crs','EPSG','4656','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4766','New Beijing / 3-degree Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4555','EPSG','16290',NULL,0); INSERT INTO "usage" VALUES('EPSG','3596','projected_crs','EPSG','4766','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4767','New Beijing / 3-degree Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4555','EPSG','16291',NULL,0); INSERT INTO "usage" VALUES('EPSG','3597','projected_crs','EPSG','4767','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4768','New Beijing / 3-degree Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4555','EPSG','16292',NULL,0); INSERT INTO "usage" VALUES('EPSG','3598','projected_crs','EPSG','4768','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4769','New Beijing / 3-degree Gauss-Kruger zone 33',NULL,'EPSG','4530','EPSG','4555','EPSG','16293',NULL,0); INSERT INTO "usage" VALUES('EPSG','3599','projected_crs','EPSG','4769','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4770','New Beijing / 3-degree Gauss-Kruger zone 34',NULL,'EPSG','4530','EPSG','4555','EPSG','16294',NULL,0); INSERT INTO "usage" VALUES('EPSG','3600','projected_crs','EPSG','4770','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4771','New Beijing / 3-degree Gauss-Kruger zone 35',NULL,'EPSG','4530','EPSG','4555','EPSG','16295',NULL,0); INSERT INTO "usage" VALUES('EPSG','3601','projected_crs','EPSG','4771','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4772','New Beijing / 3-degree Gauss-Kruger zone 36',NULL,'EPSG','4530','EPSG','4555','EPSG','16296',NULL,0); INSERT INTO "usage" VALUES('EPSG','3602','projected_crs','EPSG','4772','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4773','New Beijing / 3-degree Gauss-Kruger zone 37',NULL,'EPSG','4530','EPSG','4555','EPSG','16297',NULL,0); INSERT INTO "usage" VALUES('EPSG','3603','projected_crs','EPSG','4773','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4774','New Beijing / 3-degree Gauss-Kruger zone 38',NULL,'EPSG','4530','EPSG','4555','EPSG','16298',NULL,0); INSERT INTO "usage" VALUES('EPSG','3604','projected_crs','EPSG','4774','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4775','New Beijing / 3-degree Gauss-Kruger zone 39',NULL,'EPSG','4530','EPSG','4555','EPSG','16299',NULL,0); INSERT INTO "usage" VALUES('EPSG','3605','projected_crs','EPSG','4775','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4776','New Beijing / 3-degree Gauss-Kruger zone 40',NULL,'EPSG','4530','EPSG','4555','EPSG','16070',NULL,0); INSERT INTO "usage" VALUES('EPSG','3606','projected_crs','EPSG','4776','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4777','New Beijing / 3-degree Gauss-Kruger zone 41',NULL,'EPSG','4530','EPSG','4555','EPSG','16071',NULL,0); INSERT INTO "usage" VALUES('EPSG','3607','projected_crs','EPSG','4777','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4778','New Beijing / 3-degree Gauss-Kruger zone 42',NULL,'EPSG','4530','EPSG','4555','EPSG','16072',NULL,0); INSERT INTO "usage" VALUES('EPSG','3608','projected_crs','EPSG','4778','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4779','New Beijing / 3-degree Gauss-Kruger zone 43',NULL,'EPSG','4530','EPSG','4555','EPSG','16073',NULL,0); INSERT INTO "usage" VALUES('EPSG','3609','projected_crs','EPSG','4779','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4780','New Beijing / 3-degree Gauss-Kruger zone 44',NULL,'EPSG','4530','EPSG','4555','EPSG','16074',NULL,0); INSERT INTO "usage" VALUES('EPSG','3610','projected_crs','EPSG','4780','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4781','New Beijing / 3-degree Gauss-Kruger zone 45',NULL,'EPSG','4530','EPSG','4555','EPSG','16075',NULL,0); INSERT INTO "usage" VALUES('EPSG','3611','projected_crs','EPSG','4781','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4782','New Beijing / 3-degree Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4555','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','3612','projected_crs','EPSG','4782','EPSG','2711','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4783','New Beijing / 3-degree Gauss-Kruger CM 78E',NULL,'EPSG','4530','EPSG','4555','EPSG','16386',NULL,0); INSERT INTO "usage" VALUES('EPSG','3613','projected_crs','EPSG','4783','EPSG','2712','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4784','New Beijing / 3-degree Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4555','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','3614','projected_crs','EPSG','4784','EPSG','2713','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4785','New Beijing / 3-degree Gauss-Kruger CM 84E',NULL,'EPSG','4530','EPSG','4555','EPSG','16388',NULL,0); INSERT INTO "usage" VALUES('EPSG','3615','projected_crs','EPSG','4785','EPSG','2714','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4786','New Beijing / 3-degree Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4555','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','3616','projected_crs','EPSG','4786','EPSG','2715','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4787','New Beijing / 3-degree Gauss-Kruger CM 90E',NULL,'EPSG','4530','EPSG','4555','EPSG','16390',NULL,0); INSERT INTO "usage" VALUES('EPSG','3617','projected_crs','EPSG','4787','EPSG','2716','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4788','New Beijing / 3-degree Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4555','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','3618','projected_crs','EPSG','4788','EPSG','2717','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4789','New Beijing / 3-degree Gauss-Kruger CM 96E',NULL,'EPSG','4530','EPSG','4555','EPSG','16392',NULL,0); INSERT INTO "usage" VALUES('EPSG','3619','projected_crs','EPSG','4789','EPSG','2718','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4790','New Beijing / 3-degree Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4555','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','3620','projected_crs','EPSG','4790','EPSG','2719','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4791','New Beijing / 3-degree Gauss-Kruger CM 102E',NULL,'EPSG','4530','EPSG','4555','EPSG','16394',NULL,0); INSERT INTO "usage" VALUES('EPSG','3621','projected_crs','EPSG','4791','EPSG','2720','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4792','New Beijing / 3-degree Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4555','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','3622','projected_crs','EPSG','4792','EPSG','2721','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4793','New Beijing / 3-degree Gauss-Kruger CM 108E',NULL,'EPSG','4530','EPSG','4555','EPSG','16396',NULL,0); INSERT INTO "usage" VALUES('EPSG','3623','projected_crs','EPSG','4793','EPSG','2722','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4794','New Beijing / 3-degree Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4555','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','3624','projected_crs','EPSG','4794','EPSG','2723','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4795','New Beijing / 3-degree Gauss-Kruger CM 114E',NULL,'EPSG','4530','EPSG','4555','EPSG','16398',NULL,0); INSERT INTO "usage" VALUES('EPSG','3625','projected_crs','EPSG','4795','EPSG','2724','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4796','New Beijing / 3-degree Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4555','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','3626','projected_crs','EPSG','4796','EPSG','2725','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4797','New Beijing / 3-degree Gauss-Kruger CM 120E',NULL,'EPSG','4530','EPSG','4555','EPSG','16170',NULL,0); INSERT INTO "usage" VALUES('EPSG','3627','projected_crs','EPSG','4797','EPSG','2726','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4798','New Beijing / 3-degree Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4555','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','3628','projected_crs','EPSG','4798','EPSG','2727','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4799','New Beijing / 3-degree Gauss-Kruger CM 126E',NULL,'EPSG','4530','EPSG','4555','EPSG','16172',NULL,0); INSERT INTO "usage" VALUES('EPSG','3629','projected_crs','EPSG','4799','EPSG','2728','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4800','New Beijing / 3-degree Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4555','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','3630','projected_crs','EPSG','4800','EPSG','2729','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4812','New Beijing / 3-degree Gauss-Kruger CM 132E',NULL,'EPSG','4530','EPSG','4555','EPSG','16174',NULL,0); INSERT INTO "usage" VALUES('EPSG','3642','projected_crs','EPSG','4812','EPSG','2730','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4822','New Beijing / 3-degree Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4555','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','3652','projected_crs','EPSG','4822','EPSG','2731','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','4826','WGS 84 / Cape Verde National',NULL,'EPSG','1024','EPSG','4326','EPSG','4825',NULL,0); INSERT INTO "usage" VALUES('EPSG','3655','projected_crs','EPSG','4826','EPSG','1062','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','4839','ETRS89 / LCC Germany (N-E)',NULL,'EPSG','4500','EPSG','4258','EPSG','4838',NULL,0); INSERT INTO "usage" VALUES('EPSG','3656','projected_crs','EPSG','4839','EPSG','3339','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','4855','ETRS89 / NTM zone 5',NULL,'EPSG','4500','EPSG','4258','EPSG','4845',NULL,1); INSERT INTO "usage" VALUES('EPSG','3657','projected_crs','EPSG','4855','EPSG','3636','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4856','ETRS89 / NTM zone 6',NULL,'EPSG','4500','EPSG','4258','EPSG','4846',NULL,1); INSERT INTO "usage" VALUES('EPSG','3658','projected_crs','EPSG','4856','EPSG','3639','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4857','ETRS89 / NTM zone 7',NULL,'EPSG','4500','EPSG','4258','EPSG','4847',NULL,1); INSERT INTO "usage" VALUES('EPSG','3659','projected_crs','EPSG','4857','EPSG','3647','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4858','ETRS89 / NTM zone 8',NULL,'EPSG','4500','EPSG','4258','EPSG','4848',NULL,1); INSERT INTO "usage" VALUES('EPSG','3660','projected_crs','EPSG','4858','EPSG','3648','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4859','ETRS89 / NTM zone 9',NULL,'EPSG','4500','EPSG','4258','EPSG','4849',NULL,1); INSERT INTO "usage" VALUES('EPSG','3661','projected_crs','EPSG','4859','EPSG','3649','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4860','ETRS89 / NTM zone 10',NULL,'EPSG','4500','EPSG','4258','EPSG','4850',NULL,1); INSERT INTO "usage" VALUES('EPSG','3662','projected_crs','EPSG','4860','EPSG','3650','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4861','ETRS89 / NTM zone 11',NULL,'EPSG','4500','EPSG','4258','EPSG','4851',NULL,1); INSERT INTO "usage" VALUES('EPSG','3663','projected_crs','EPSG','4861','EPSG','3651','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4862','ETRS89 / NTM zone 12',NULL,'EPSG','4500','EPSG','4258','EPSG','4852',NULL,1); INSERT INTO "usage" VALUES('EPSG','3664','projected_crs','EPSG','4862','EPSG','3653','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4863','ETRS89 / NTM zone 13',NULL,'EPSG','4500','EPSG','4258','EPSG','4853',NULL,1); INSERT INTO "usage" VALUES('EPSG','3665','projected_crs','EPSG','4863','EPSG','3654','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4864','ETRS89 / NTM zone 14',NULL,'EPSG','4500','EPSG','4258','EPSG','4854',NULL,1); INSERT INTO "usage" VALUES('EPSG','3666','projected_crs','EPSG','4864','EPSG','3655','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4865','ETRS89 / NTM zone 15',NULL,'EPSG','4500','EPSG','4258','EPSG','4841',NULL,1); INSERT INTO "usage" VALUES('EPSG','3667','projected_crs','EPSG','4865','EPSG','3656','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4866','ETRS89 / NTM zone 16',NULL,'EPSG','4500','EPSG','4258','EPSG','4842',NULL,1); INSERT INTO "usage" VALUES('EPSG','3668','projected_crs','EPSG','4866','EPSG','3657','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4867','ETRS89 / NTM zone 17',NULL,'EPSG','4500','EPSG','4258','EPSG','4843',NULL,1); INSERT INTO "usage" VALUES('EPSG','3669','projected_crs','EPSG','4867','EPSG','3658','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4868','ETRS89 / NTM zone 18',NULL,'EPSG','4500','EPSG','4258','EPSG','4844',NULL,1); INSERT INTO "usage" VALUES('EPSG','3670','projected_crs','EPSG','4868','EPSG','3660','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4869','ETRS89 / NTM zone 19',NULL,'EPSG','4500','EPSG','4258','EPSG','4881',NULL,1); INSERT INTO "usage" VALUES('EPSG','3671','projected_crs','EPSG','4869','EPSG','3661','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4870','ETRS89 / NTM zone 20',NULL,'EPSG','4500','EPSG','4258','EPSG','5000',NULL,1); INSERT INTO "usage" VALUES('EPSG','3672','projected_crs','EPSG','4870','EPSG','3662','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4871','ETRS89 / NTM zone 21',NULL,'EPSG','4500','EPSG','4258','EPSG','5001',NULL,1); INSERT INTO "usage" VALUES('EPSG','3673','projected_crs','EPSG','4871','EPSG','3663','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4872','ETRS89 / NTM zone 22',NULL,'EPSG','4500','EPSG','4258','EPSG','5002',NULL,1); INSERT INTO "usage" VALUES('EPSG','3674','projected_crs','EPSG','4872','EPSG','3665','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4873','ETRS89 / NTM zone 23',NULL,'EPSG','4500','EPSG','4258','EPSG','5003',NULL,1); INSERT INTO "usage" VALUES('EPSG','3675','projected_crs','EPSG','4873','EPSG','3667','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4874','ETRS89 / NTM zone 24',NULL,'EPSG','4500','EPSG','4258','EPSG','5004',NULL,1); INSERT INTO "usage" VALUES('EPSG','3676','projected_crs','EPSG','4874','EPSG','3668','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4875','ETRS89 / NTM zone 25',NULL,'EPSG','4500','EPSG','4258','EPSG','5005',NULL,1); INSERT INTO "usage" VALUES('EPSG','3677','projected_crs','EPSG','4875','EPSG','3669','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4876','ETRS89 / NTM zone 26',NULL,'EPSG','4500','EPSG','4258','EPSG','5006',NULL,1); INSERT INTO "usage" VALUES('EPSG','3678','projected_crs','EPSG','4876','EPSG','3671','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4877','ETRS89 / NTM zone 27',NULL,'EPSG','4500','EPSG','4258','EPSG','5007',NULL,1); INSERT INTO "usage" VALUES('EPSG','3679','projected_crs','EPSG','4877','EPSG','3672','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4878','ETRS89 / NTM zone 28',NULL,'EPSG','4500','EPSG','4258','EPSG','5008',NULL,1); INSERT INTO "usage" VALUES('EPSG','3680','projected_crs','EPSG','4878','EPSG','3673','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4879','ETRS89 / NTM zone 29',NULL,'EPSG','4500','EPSG','4258','EPSG','5009',NULL,1); INSERT INTO "usage" VALUES('EPSG','3681','projected_crs','EPSG','4879','EPSG','3674','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','4880','ETRS89 / NTM zone 30',NULL,'EPSG','4500','EPSG','4258','EPSG','5010',NULL,1); INSERT INTO "usage" VALUES('EPSG','3682','projected_crs','EPSG','4880','EPSG','3676','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5014','PTRA08 / UTM zone 25N',NULL,'EPSG','4400','EPSG','5013','EPSG','16025',NULL,0); INSERT INTO "usage" VALUES('EPSG','3803','projected_crs','EPSG','5014','EPSG','3682','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5015','PTRA08 / UTM zone 26N',NULL,'EPSG','4400','EPSG','5013','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','3804','projected_crs','EPSG','5015','EPSG','3677','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5016','PTRA08 / UTM zone 28N',NULL,'EPSG','4400','EPSG','5013','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','3805','projected_crs','EPSG','5016','EPSG','3678','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5017','Lisbon 1890 / Portugal Bonne New',NULL,'EPSG','6509','EPSG','4666','EPSG','5019',NULL,0); INSERT INTO "usage" VALUES('EPSG','3806','projected_crs','EPSG','5017','EPSG','1294','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5018','Lisbon / Portuguese Grid New',NULL,'EPSG','4499','EPSG','4207','EPSG','5020',NULL,0); INSERT INTO "usage" VALUES('EPSG','3807','projected_crs','EPSG','5018','EPSG','1294','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5041','WGS 84 / UPS North (E,N)',NULL,'EPSG','1026','EPSG','4326','EPSG','16061',NULL,0); INSERT INTO "usage" VALUES('EPSG','3808','projected_crs','EPSG','5041','EPSG','1996','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','5042','WGS 84 / UPS South (E,N)',NULL,'EPSG','1027','EPSG','4326','EPSG','16161',NULL,0); INSERT INTO "usage" VALUES('EPSG','3809','projected_crs','EPSG','5042','EPSG','1997','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','5048','EUREF-FIN / TM35FIN(N,E)',NULL,'EPSG','4500','EPSG','10690','EPSG','16065',NULL,0); INSERT INTO "usage" VALUES('EPSG','3810','projected_crs','EPSG','5048','EPSG','1095','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5069','NAD27 / Conus Albers',NULL,'EPSG','4499','EPSG','4267','EPSG','5068',NULL,0); INSERT INTO "usage" VALUES('EPSG','3811','projected_crs','EPSG','5069','EPSG','1323','EPSG','1109'); INSERT INTO "projected_crs" VALUES('EPSG','5070','NAD83 / Conus Albers',NULL,'EPSG','4499','EPSG','4269','EPSG','5068',NULL,0); INSERT INTO "usage" VALUES('EPSG','3812','projected_crs','EPSG','5070','EPSG','1323','EPSG','1109'); INSERT INTO "projected_crs" VALUES('EPSG','5071','NAD83(HARN) / Conus Albers',NULL,'EPSG','4499','EPSG','4152','EPSG','5068',NULL,0); INSERT INTO "usage" VALUES('EPSG','3813','projected_crs','EPSG','5071','EPSG','1323','EPSG','1109'); INSERT INTO "projected_crs" VALUES('EPSG','5072','NAD83(NSRS2007) / Conus Albers',NULL,'EPSG','4499','EPSG','4759','EPSG','5068',NULL,0); INSERT INTO "usage" VALUES('EPSG','3814','projected_crs','EPSG','5072','EPSG','1323','EPSG','1109'); INSERT INTO "projected_crs" VALUES('EPSG','5105','ETRS89 / NTM zone 5',NULL,'EPSG','4500','EPSG','4258','EPSG','5135',NULL,0); INSERT INTO "usage" VALUES('EPSG','3815','projected_crs','EPSG','5105','EPSG','3636','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5106','ETRS89 / NTM zone 6',NULL,'EPSG','4500','EPSG','4258','EPSG','5136',NULL,0); INSERT INTO "usage" VALUES('EPSG','3816','projected_crs','EPSG','5106','EPSG','3639','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5107','ETRS89 / NTM zone 7',NULL,'EPSG','4500','EPSG','4258','EPSG','5137',NULL,0); INSERT INTO "usage" VALUES('EPSG','3817','projected_crs','EPSG','5107','EPSG','3647','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5108','ETRS89 / NTM zone 8',NULL,'EPSG','4500','EPSG','4258','EPSG','5138',NULL,0); INSERT INTO "usage" VALUES('EPSG','3818','projected_crs','EPSG','5108','EPSG','3648','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5109','ETRS89 / NTM zone 9',NULL,'EPSG','4500','EPSG','4258','EPSG','5139',NULL,0); INSERT INTO "usage" VALUES('EPSG','3819','projected_crs','EPSG','5109','EPSG','3649','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5110','ETRS89 / NTM zone 10',NULL,'EPSG','4500','EPSG','4258','EPSG','5140',NULL,0); INSERT INTO "usage" VALUES('EPSG','3820','projected_crs','EPSG','5110','EPSG','3650','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5111','ETRS89 / NTM zone 11',NULL,'EPSG','4500','EPSG','4258','EPSG','5141',NULL,0); INSERT INTO "usage" VALUES('EPSG','3821','projected_crs','EPSG','5111','EPSG','3651','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5112','ETRS89 / NTM zone 12',NULL,'EPSG','4500','EPSG','4258','EPSG','5142',NULL,0); INSERT INTO "usage" VALUES('EPSG','3822','projected_crs','EPSG','5112','EPSG','3653','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5113','ETRS89 / NTM zone 13',NULL,'EPSG','4500','EPSG','4258','EPSG','5143',NULL,0); INSERT INTO "usage" VALUES('EPSG','3823','projected_crs','EPSG','5113','EPSG','3654','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5114','ETRS89 / NTM zone 14',NULL,'EPSG','4500','EPSG','4258','EPSG','5144',NULL,0); INSERT INTO "usage" VALUES('EPSG','3824','projected_crs','EPSG','5114','EPSG','3655','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5115','ETRS89 / NTM zone 15',NULL,'EPSG','4500','EPSG','4258','EPSG','5145',NULL,0); INSERT INTO "usage" VALUES('EPSG','3825','projected_crs','EPSG','5115','EPSG','3656','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5116','ETRS89 / NTM zone 16',NULL,'EPSG','4500','EPSG','4258','EPSG','5146',NULL,0); INSERT INTO "usage" VALUES('EPSG','3826','projected_crs','EPSG','5116','EPSG','3657','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5117','ETRS89 / NTM zone 17',NULL,'EPSG','4500','EPSG','4258','EPSG','5147',NULL,0); INSERT INTO "usage" VALUES('EPSG','3827','projected_crs','EPSG','5117','EPSG','3658','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5118','ETRS89 / NTM zone 18',NULL,'EPSG','4500','EPSG','4258','EPSG','5148',NULL,0); INSERT INTO "usage" VALUES('EPSG','3828','projected_crs','EPSG','5118','EPSG','3660','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5119','ETRS89 / NTM zone 19',NULL,'EPSG','4500','EPSG','4258','EPSG','5149',NULL,0); INSERT INTO "usage" VALUES('EPSG','3829','projected_crs','EPSG','5119','EPSG','3661','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5120','ETRS89 / NTM zone 20',NULL,'EPSG','4500','EPSG','4258','EPSG','5150',NULL,0); INSERT INTO "usage" VALUES('EPSG','3830','projected_crs','EPSG','5120','EPSG','3662','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5121','ETRS89 / NTM zone 21',NULL,'EPSG','4500','EPSG','4258','EPSG','5151',NULL,0); INSERT INTO "usage" VALUES('EPSG','3831','projected_crs','EPSG','5121','EPSG','3663','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5122','ETRS89 / NTM zone 22',NULL,'EPSG','4500','EPSG','4258','EPSG','5152',NULL,0); INSERT INTO "usage" VALUES('EPSG','3832','projected_crs','EPSG','5122','EPSG','3665','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5123','ETRS89 / NTM zone 23',NULL,'EPSG','4500','EPSG','4258','EPSG','5153',NULL,0); INSERT INTO "usage" VALUES('EPSG','3833','projected_crs','EPSG','5123','EPSG','3667','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5124','ETRS89 / NTM zone 24',NULL,'EPSG','4500','EPSG','4258','EPSG','5154',NULL,0); INSERT INTO "usage" VALUES('EPSG','3834','projected_crs','EPSG','5124','EPSG','3668','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5125','ETRS89 / NTM zone 25',NULL,'EPSG','4500','EPSG','4258','EPSG','5155',NULL,0); INSERT INTO "usage" VALUES('EPSG','3835','projected_crs','EPSG','5125','EPSG','3669','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5126','ETRS89 / NTM zone 26',NULL,'EPSG','4500','EPSG','4258','EPSG','5156',NULL,0); INSERT INTO "usage" VALUES('EPSG','3836','projected_crs','EPSG','5126','EPSG','3671','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5127','ETRS89 / NTM zone 27',NULL,'EPSG','4500','EPSG','4258','EPSG','5157',NULL,0); INSERT INTO "usage" VALUES('EPSG','3837','projected_crs','EPSG','5127','EPSG','3672','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5128','ETRS89 / NTM zone 28',NULL,'EPSG','4500','EPSG','4258','EPSG','5158',NULL,0); INSERT INTO "usage" VALUES('EPSG','3838','projected_crs','EPSG','5128','EPSG','3673','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5129','ETRS89 / NTM zone 29',NULL,'EPSG','4500','EPSG','4258','EPSG','5159',NULL,0); INSERT INTO "usage" VALUES('EPSG','3839','projected_crs','EPSG','5129','EPSG','3674','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5130','ETRS89 / NTM zone 30',NULL,'EPSG','4500','EPSG','4258','EPSG','5160',NULL,0); INSERT INTO "usage" VALUES('EPSG','3840','projected_crs','EPSG','5130','EPSG','3676','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5167','Korean 1985 / East Sea Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','5049',NULL,0); INSERT INTO "usage" VALUES('EPSG','3842','projected_crs','EPSG','5167','EPSG','3720','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5168','Korean 1985 / Central Belt Jeju',NULL,'EPSG','4530','EPSG','4162','EPSG','5131',NULL,0); INSERT INTO "usage" VALUES('EPSG','3843','projected_crs','EPSG','5168','EPSG','3721','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5169','Tokyo 1892 / Korea West Belt',NULL,'EPSG','4530','EPSG','5132','EPSG','18253',NULL,0); INSERT INTO "usage" VALUES('EPSG','3844','projected_crs','EPSG','5169','EPSG','3713','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5170','Tokyo 1892 / Korea Central Belt',NULL,'EPSG','4530','EPSG','5132','EPSG','18252',NULL,0); INSERT INTO "usage" VALUES('EPSG','3845','projected_crs','EPSG','5170','EPSG','3716','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5171','Tokyo 1892 / Korea East Belt',NULL,'EPSG','4530','EPSG','5132','EPSG','18251',NULL,0); INSERT INTO "usage" VALUES('EPSG','3846','projected_crs','EPSG','5171','EPSG','3726','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5172','Tokyo 1892 / Korea East Sea Belt',NULL,'EPSG','4530','EPSG','5132','EPSG','5049',NULL,0); INSERT INTO "usage" VALUES('EPSG','3847','projected_crs','EPSG','5172','EPSG','3727','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5173','Korean 1985 / Modified West Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','5161',NULL,0); INSERT INTO "usage" VALUES('EPSG','3848','projected_crs','EPSG','5173','EPSG','1498','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5174','Korean 1985 / Modified Central Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','5162',NULL,0); INSERT INTO "usage" VALUES('EPSG','3849','projected_crs','EPSG','5174','EPSG','3730','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5175','Korean 1985 / Modified Central Belt Jeju',NULL,'EPSG','4530','EPSG','4162','EPSG','5163',NULL,0); INSERT INTO "usage" VALUES('EPSG','3850','projected_crs','EPSG','5175','EPSG','3721','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5176','Korean 1985 / Modified East Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','5164',NULL,0); INSERT INTO "usage" VALUES('EPSG','3851','projected_crs','EPSG','5176','EPSG','1496','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5177','Korean 1985 / Modified East Sea Belt',NULL,'EPSG','4530','EPSG','4162','EPSG','5165',NULL,0); INSERT INTO "usage" VALUES('EPSG','3852','projected_crs','EPSG','5177','EPSG','3720','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5178','Korean 1985 / Unified CS',NULL,'EPSG','4530','EPSG','4162','EPSG','5100',NULL,0); INSERT INTO "usage" VALUES('EPSG','3853','projected_crs','EPSG','5178','EPSG','3266','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','5179','KGD2002 / Unified CS',NULL,'EPSG','4530','EPSG','4737','EPSG','5100',NULL,0); INSERT INTO "usage" VALUES('EPSG','3854','projected_crs','EPSG','5179','EPSG','1135','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','5180','KGD2002 / West Belt',NULL,'EPSG','4530','EPSG','4737','EPSG','18253',NULL,0); INSERT INTO "usage" VALUES('EPSG','3855','projected_crs','EPSG','5180','EPSG','1498','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5181','KGD2002 / Central Belt',NULL,'EPSG','4530','EPSG','4737','EPSG','18252',NULL,0); INSERT INTO "usage" VALUES('EPSG','3856','projected_crs','EPSG','5181','EPSG','3730','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5182','KGD2002 / Central Belt Jeju',NULL,'EPSG','4530','EPSG','4737','EPSG','5131',NULL,0); INSERT INTO "usage" VALUES('EPSG','3857','projected_crs','EPSG','5182','EPSG','3721','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5183','KGD2002 / East Belt',NULL,'EPSG','4530','EPSG','4737','EPSG','18251',NULL,0); INSERT INTO "usage" VALUES('EPSG','3858','projected_crs','EPSG','5183','EPSG','1496','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5184','KGD2002 / East Sea Belt',NULL,'EPSG','4530','EPSG','4737','EPSG','5049',NULL,0); INSERT INTO "usage" VALUES('EPSG','3859','projected_crs','EPSG','5184','EPSG','3720','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5185','KGD2002 / West Belt 2010',NULL,'EPSG','4530','EPSG','4737','EPSG','5101',NULL,0); INSERT INTO "usage" VALUES('EPSG','3860','projected_crs','EPSG','5185','EPSG','1498','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','5186','KGD2002 / Central Belt 2010',NULL,'EPSG','4530','EPSG','4737','EPSG','5102',NULL,0); INSERT INTO "usage" VALUES('EPSG','3861','projected_crs','EPSG','5186','EPSG','1497','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','5187','KGD2002 / East Belt 2010',NULL,'EPSG','4530','EPSG','4737','EPSG','5103',NULL,0); INSERT INTO "usage" VALUES('EPSG','3862','projected_crs','EPSG','5187','EPSG','1496','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','5188','KGD2002 / East Sea Belt 2010',NULL,'EPSG','4530','EPSG','4737','EPSG','5104',NULL,0); INSERT INTO "usage" VALUES('EPSG','3863','projected_crs','EPSG','5188','EPSG','3720','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','5221','S-JTSK (Ferro) / Krovak East North',NULL,'EPSG','4499','EPSG','4818','EPSG','5218',NULL,0); INSERT INTO "usage" VALUES('EPSG','3867','projected_crs','EPSG','5221','EPSG','1306','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5223','WGS 84 / Gabon TM',NULL,'EPSG','4499','EPSG','4326','EPSG','5222',NULL,0); INSERT INTO "usage" VALUES('EPSG','3868','projected_crs','EPSG','5223','EPSG','3249','EPSG','1165'); INSERT INTO "projected_crs" VALUES('EPSG','5224','S-JTSK/05 (Ferro) / Modified Krovak',NULL,'EPSG','6501','EPSG','5229','EPSG','5219',NULL,0); INSERT INTO "usage" VALUES('EPSG','3869','projected_crs','EPSG','5224','EPSG','1079','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5225','S-JTSK/05 (Ferro) / Modified Krovak East North',NULL,'EPSG','4499','EPSG','5229','EPSG','5220',NULL,0); INSERT INTO "usage" VALUES('EPSG','3870','projected_crs','EPSG','5225','EPSG','1079','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5234','Kandawala / Sri Lanka Grid',NULL,'EPSG','4400','EPSG','4244','EPSG','5231',NULL,0); INSERT INTO "usage" VALUES('EPSG','3874','projected_crs','EPSG','5234','EPSG','3310','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5235','SLD99 / Sri Lanka Grid 1999',NULL,'EPSG','4400','EPSG','5233','EPSG','5232',NULL,0); INSERT INTO "usage" VALUES('EPSG','3875','projected_crs','EPSG','5235','EPSG','3310','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5243','ETRS89 / LCC Germany (E-N)',NULL,'EPSG','4400','EPSG','4258','EPSG','4838',NULL,0); INSERT INTO "usage" VALUES('EPSG','3877','projected_crs','EPSG','5243','EPSG','3339','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','5247','GDBD2009 / Brunei BRSO',NULL,'EPSG','4400','EPSG','5246','EPSG','19894',NULL,0); INSERT INTO "usage" VALUES('EPSG','3881','projected_crs','EPSG','5247','EPSG','1055','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5253','TUREF / TM27',NULL,'EPSG','4530','EPSG','5252','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','3885','projected_crs','EPSG','5253','EPSG','1524','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5254','TUREF / TM30',NULL,'EPSG','4530','EPSG','5252','EPSG','16370',NULL,0); INSERT INTO "usage" VALUES('EPSG','3886','projected_crs','EPSG','5254','EPSG','1525','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5255','TUREF / TM33',NULL,'EPSG','4530','EPSG','5252','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','3887','projected_crs','EPSG','5255','EPSG','1526','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5256','TUREF / TM36',NULL,'EPSG','4530','EPSG','5252','EPSG','16372',NULL,0); INSERT INTO "usage" VALUES('EPSG','3888','projected_crs','EPSG','5256','EPSG','1527','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5257','TUREF / TM39',NULL,'EPSG','4530','EPSG','5252','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','3889','projected_crs','EPSG','5257','EPSG','1528','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5258','TUREF / TM42',NULL,'EPSG','4530','EPSG','5252','EPSG','16374',NULL,0); INSERT INTO "usage" VALUES('EPSG','3890','projected_crs','EPSG','5258','EPSG','1529','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5259','TUREF / TM45',NULL,'EPSG','4530','EPSG','5252','EPSG','16308',NULL,0); INSERT INTO "usage" VALUES('EPSG','3891','projected_crs','EPSG','5259','EPSG','1530','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5266','DRUKREF 03 / Bhutan National Grid',NULL,'EPSG','4400','EPSG','5264','EPSG','5265',NULL,0); INSERT INTO "usage" VALUES('EPSG','3895','projected_crs','EPSG','5266','EPSG','1048','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5269','TUREF / 3-degree Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','5252','EPSG','16269',NULL,0); INSERT INTO "usage" VALUES('EPSG','3896','projected_crs','EPSG','5269','EPSG','1524','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','5270','TUREF / 3-degree Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','5252','EPSG','16270',NULL,0); INSERT INTO "usage" VALUES('EPSG','3897','projected_crs','EPSG','5270','EPSG','1525','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','5271','TUREF / 3-degree Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','5252','EPSG','16271',NULL,0); INSERT INTO "usage" VALUES('EPSG','3898','projected_crs','EPSG','5271','EPSG','1526','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','5272','TUREF / 3-degree Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','5252','EPSG','16272',NULL,0); INSERT INTO "usage" VALUES('EPSG','3899','projected_crs','EPSG','5272','EPSG','1527','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','5273','TUREF / 3-degree Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','5252','EPSG','16273',NULL,0); INSERT INTO "usage" VALUES('EPSG','3900','projected_crs','EPSG','5273','EPSG','1528','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','5274','TUREF / 3-degree Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','5252','EPSG','16274',NULL,0); INSERT INTO "usage" VALUES('EPSG','3901','projected_crs','EPSG','5274','EPSG','1529','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','5275','TUREF / 3-degree Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','5252','EPSG','16275',NULL,0); INSERT INTO "usage" VALUES('EPSG','3902','projected_crs','EPSG','5275','EPSG','1530','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','5292','DRUKREF 03 / Bumthang TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5268',NULL,0); INSERT INTO "usage" VALUES('EPSG','3903','projected_crs','EPSG','5292','EPSG','3734','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5293','DRUKREF 03 / Chhukha TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5276',NULL,0); INSERT INTO "usage" VALUES('EPSG','3904','projected_crs','EPSG','5293','EPSG','3737','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5294','DRUKREF 03 / Dagana TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5277',NULL,0); INSERT INTO "usage" VALUES('EPSG','3905','projected_crs','EPSG','5294','EPSG','3738','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5295','DRUKREF 03 / Gasa TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5278',NULL,0); INSERT INTO "usage" VALUES('EPSG','3906','projected_crs','EPSG','5295','EPSG','3740','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5296','DRUKREF 03 / Ha TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5279',NULL,0); INSERT INTO "usage" VALUES('EPSG','3907','projected_crs','EPSG','5296','EPSG','3742','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5297','DRUKREF 03 / Lhuentse TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5280',NULL,0); INSERT INTO "usage" VALUES('EPSG','3908','projected_crs','EPSG','5297','EPSG','3743','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5298','DRUKREF 03 / Mongar TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5281',NULL,0); INSERT INTO "usage" VALUES('EPSG','3909','projected_crs','EPSG','5298','EPSG','3745','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5299','DRUKREF 03 / Paro TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5282',NULL,0); INSERT INTO "usage" VALUES('EPSG','3910','projected_crs','EPSG','5299','EPSG','3746','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5300','DRUKREF 03 / Pemagatshel TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5283',NULL,0); INSERT INTO "usage" VALUES('EPSG','3911','projected_crs','EPSG','5300','EPSG','3747','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5301','DRUKREF 03 / Punakha TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5313',NULL,0); INSERT INTO "usage" VALUES('EPSG','3912','projected_crs','EPSG','5301','EPSG','3749','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5302','DRUKREF 03 / Samdrup Jongkhar TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5285',NULL,0); INSERT INTO "usage" VALUES('EPSG','3913','projected_crs','EPSG','5302','EPSG','3750','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5303','DRUKREF 03 / Samtse TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5286',NULL,0); INSERT INTO "usage" VALUES('EPSG','3914','projected_crs','EPSG','5303','EPSG','3751','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5304','DRUKREF 03 / Sarpang TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5287',NULL,0); INSERT INTO "usage" VALUES('EPSG','3915','projected_crs','EPSG','5304','EPSG','3752','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5305','DRUKREF 03 / Thimphu TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5312',NULL,0); INSERT INTO "usage" VALUES('EPSG','3916','projected_crs','EPSG','5305','EPSG','3753','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5306','DRUKREF 03 / Trashigang TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5289',NULL,0); INSERT INTO "usage" VALUES('EPSG','3917','projected_crs','EPSG','5306','EPSG','3754','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5307','DRUKREF 03 / Trongsa TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5290',NULL,0); INSERT INTO "usage" VALUES('EPSG','3918','projected_crs','EPSG','5307','EPSG','3755','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5308','DRUKREF 03 / Tsirang TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5284',NULL,0); INSERT INTO "usage" VALUES('EPSG','3919','projected_crs','EPSG','5308','EPSG','3757','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5309','DRUKREF 03 / Wangdue Phodrang TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5288',NULL,0); INSERT INTO "usage" VALUES('EPSG','3920','projected_crs','EPSG','5309','EPSG','3758','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5310','DRUKREF 03 / Yangtse TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5314',NULL,0); INSERT INTO "usage" VALUES('EPSG','3921','projected_crs','EPSG','5310','EPSG','3760','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5311','DRUKREF 03 / Zhemgang TM',NULL,'EPSG','4400','EPSG','5264','EPSG','5291',NULL,0); INSERT INTO "usage" VALUES('EPSG','3922','projected_crs','EPSG','5311','EPSG','3761','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5316','ETRS89 / Faroe TM',NULL,'EPSG','4400','EPSG','4258','EPSG','5315',NULL,0); INSERT INTO "usage" VALUES('EPSG','3923','projected_crs','EPSG','5316','EPSG','1093','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','5320','NAD83 / Teranet Ontario Lambert',NULL,'EPSG','4499','EPSG','4269','EPSG','5319',NULL,0); INSERT INTO "usage" VALUES('EPSG','3926','projected_crs','EPSG','5320','EPSG','1367','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','5321','NAD83(CSRS) / Teranet Ontario Lambert',NULL,'EPSG','4499','EPSG','4617','EPSG','5319',NULL,0); INSERT INTO "usage" VALUES('EPSG','3927','projected_crs','EPSG','5321','EPSG','1367','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','5325','ISN2004 / Lambert 2004',NULL,'EPSG','4499','EPSG','5324','EPSG','5326',NULL,0); INSERT INTO "usage" VALUES('EPSG','3931','projected_crs','EPSG','5325','EPSG','1120','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','5329','Segara (Jakarta) / NEIEZ',NULL,'EPSG','4499','EPSG','4820','EPSG','5328',NULL,0); INSERT INTO "usage" VALUES('EPSG','3932','projected_crs','EPSG','5329','EPSG','1360','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','5330','Batavia (Jakarta) / NEIEZ',NULL,'EPSG','4499','EPSG','4813','EPSG','5328',NULL,0); INSERT INTO "usage" VALUES('EPSG','3933','projected_crs','EPSG','5330','EPSG','1285','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','5331','Makassar (Jakarta) / NEIEZ',NULL,'EPSG','4499','EPSG','4804','EPSG','5328',NULL,0); INSERT INTO "usage" VALUES('EPSG','3934','projected_crs','EPSG','5331','EPSG','1316','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','5337','Aratu / UTM zone 25S',NULL,'EPSG','4400','EPSG','4208','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','3937','projected_crs','EPSG','5337','EPSG','3808','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','5343','POSGAR 2007 / Argentina 1',NULL,'EPSG','4530','EPSG','5340','EPSG','18031',NULL,0); INSERT INTO "usage" VALUES('EPSG','3941','projected_crs','EPSG','5343','EPSG','1608','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5344','POSGAR 2007 / Argentina 2',NULL,'EPSG','4530','EPSG','5340','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','3942','projected_crs','EPSG','5344','EPSG','1609','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5345','POSGAR 2007 / Argentina 3',NULL,'EPSG','4530','EPSG','5340','EPSG','18033',NULL,0); INSERT INTO "usage" VALUES('EPSG','3943','projected_crs','EPSG','5345','EPSG','1610','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5346','POSGAR 2007 / Argentina 4',NULL,'EPSG','4530','EPSG','5340','EPSG','18034',NULL,0); INSERT INTO "usage" VALUES('EPSG','3944','projected_crs','EPSG','5346','EPSG','1611','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5347','POSGAR 2007 / Argentina 5',NULL,'EPSG','4530','EPSG','5340','EPSG','18035',NULL,0); INSERT INTO "usage" VALUES('EPSG','3945','projected_crs','EPSG','5347','EPSG','1612','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5348','POSGAR 2007 / Argentina 6',NULL,'EPSG','4530','EPSG','5340','EPSG','18036',NULL,0); INSERT INTO "usage" VALUES('EPSG','3946','projected_crs','EPSG','5348','EPSG','1613','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5349','POSGAR 2007 / Argentina 7',NULL,'EPSG','4530','EPSG','5340','EPSG','18037',NULL,0); INSERT INTO "usage" VALUES('EPSG','3947','projected_crs','EPSG','5349','EPSG','1614','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5355','MARGEN / UTM zone 20S',NULL,'EPSG','4400','EPSG','5354','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','3951','projected_crs','EPSG','5355','EPSG','1761','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5356','MARGEN / UTM zone 19S',NULL,'EPSG','4400','EPSG','5354','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','3952','projected_crs','EPSG','5356','EPSG','3827','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5357','MARGEN / UTM zone 21S',NULL,'EPSG','4400','EPSG','5354','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','3953','projected_crs','EPSG','5357','EPSG','3733','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5361','SIRGAS-Chile 2002 / UTM zone 19S',NULL,'EPSG','4400','EPSG','5360','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','3957','projected_crs','EPSG','5361','EPSG','3811','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5362','SIRGAS-Chile 2002 / UTM zone 18S',NULL,'EPSG','4400','EPSG','5360','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','3958','projected_crs','EPSG','5362','EPSG','3829','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5367','CR05 / CRTM05',NULL,'EPSG','4500','EPSG','5365','EPSG','5366',NULL,0); INSERT INTO "usage" VALUES('EPSG','3962','projected_crs','EPSG','5367','EPSG','3849','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5382','SIRGAS-ROU98 / UTM zone 21S',NULL,'EPSG','4400','EPSG','5381','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','3972','projected_crs','EPSG','5382','EPSG','3826','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5383','SIRGAS-ROU98 / UTM zone 22S',NULL,'EPSG','4400','EPSG','5381','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','3973','projected_crs','EPSG','5383','EPSG','3828','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5387','Peru96 / UTM zone 18S',NULL,'EPSG','4400','EPSG','5373','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','3974','projected_crs','EPSG','5387','EPSG','3838','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5388','Peru96 / UTM zone 17S',NULL,'EPSG','4400','EPSG','5373','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('EPSG','3975','projected_crs','EPSG','5388','EPSG','3837','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5389','Peru96 / UTM zone 19S',NULL,'EPSG','4400','EPSG','5373','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','3976','projected_crs','EPSG','5389','EPSG','3836','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5396','SIRGAS 2000 / UTM zone 26S',NULL,'EPSG','4400','EPSG','4674','EPSG','16126',NULL,0); INSERT INTO "usage" VALUES('EPSG','3980','projected_crs','EPSG','5396','EPSG','3842','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5456','Ocotepeque 1935 / Costa Rica Norte',NULL,'EPSG','4499','EPSG','5451','EPSG','5390',NULL,0); INSERT INTO "usage" VALUES('EPSG','3982','projected_crs','EPSG','5456','EPSG','3869','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5457','Ocotepeque 1935 / Costa Rica Sur',NULL,'EPSG','4499','EPSG','5451','EPSG','5394',NULL,0); INSERT INTO "usage" VALUES('EPSG','3983','projected_crs','EPSG','5457','EPSG','3870','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5458','Ocotepeque 1935 / Guatemala Norte',NULL,'EPSG','4499','EPSG','4267','EPSG','18211',NULL,1); INSERT INTO "usage" VALUES('EPSG','3984','projected_crs','EPSG','5458','EPSG','2120','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5459','Ocotepeque 1935 / Guatemala Sur',NULL,'EPSG','4499','EPSG','5451','EPSG','18212',NULL,0); INSERT INTO "usage" VALUES('EPSG','3985','projected_crs','EPSG','5459','EPSG','2121','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5460','Ocotepeque 1935 / El Salvador Lambert',NULL,'EPSG','4499','EPSG','5451','EPSG','5399',NULL,0); INSERT INTO "usage" VALUES('EPSG','3986','projected_crs','EPSG','5460','EPSG','3243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5461','Ocotepeque 1935 / Nicaragua Norte',NULL,'EPSG','4499','EPSG','5451','EPSG','5439',NULL,0); INSERT INTO "usage" VALUES('EPSG','3987','projected_crs','EPSG','5461','EPSG','3844','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5462','Ocotepeque 1935 / Nicaragua Sur',NULL,'EPSG','4499','EPSG','5451','EPSG','5444',NULL,0); INSERT INTO "usage" VALUES('EPSG','3988','projected_crs','EPSG','5462','EPSG','3847','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5463','SAD69 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4618','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','3989','projected_crs','EPSG','5463','EPSG','3830','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5466','Sibun Gorge 1922 / Colony Grid',NULL,'EPSG','4499','EPSG','5464','EPSG','5465',NULL,1); INSERT INTO "usage" VALUES('EPSG','3991','projected_crs','EPSG','5466','EPSG','3219','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5469','Panama-Colon 1911 / Panama Lambert',NULL,'EPSG','4499','EPSG','5467','EPSG','5468',NULL,0); INSERT INTO "usage" VALUES('EPSG','3993','projected_crs','EPSG','5469','EPSG','3290','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5472','Panama-Colon 1911 / Panama Polyconic',NULL,'EPSG','1028','EPSG','5467','EPSG','5471',NULL,0); INSERT INTO "usage" VALUES('EPSG','3994','projected_crs','EPSG','5472','EPSG','3290','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5479','RSRGD2000 / MSLC2000',NULL,'EPSG','4500','EPSG','4764','EPSG','5475',NULL,0); INSERT INTO "usage" VALUES('EPSG','3995','projected_crs','EPSG','5479','EPSG','3853','EPSG','1236'); INSERT INTO "projected_crs" VALUES('EPSG','5480','RSRGD2000 / BCLC2000',NULL,'EPSG','4500','EPSG','4764','EPSG','5476',NULL,0); INSERT INTO "usage" VALUES('EPSG','3996','projected_crs','EPSG','5480','EPSG','3854','EPSG','1236'); INSERT INTO "projected_crs" VALUES('EPSG','5481','RSRGD2000 / PCLC2000',NULL,'EPSG','4500','EPSG','4764','EPSG','5477',NULL,0); INSERT INTO "usage" VALUES('EPSG','3997','projected_crs','EPSG','5481','EPSG','3855','EPSG','1236'); INSERT INTO "projected_crs" VALUES('EPSG','5482','RSRGD2000 / RSPS2000',NULL,'EPSG','1044','EPSG','4764','EPSG','5478',NULL,0); INSERT INTO "usage" VALUES('EPSG','3998','projected_crs','EPSG','5482','EPSG','3856','EPSG','1236'); INSERT INTO "projected_crs" VALUES('EPSG','5490','RGAF09 / UTM zone 20N',NULL,'EPSG','4400','EPSG','5489','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','4002','projected_crs','EPSG','5490','EPSG','3825','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5513','S-JTSK / Krovak',NULL,'EPSG','6501','EPSG','4156','EPSG','5509',NULL,0); INSERT INTO "usage" VALUES('EPSG','4006','projected_crs','EPSG','5513','EPSG','1306','EPSG','1095'); INSERT INTO "projected_crs" VALUES('EPSG','5514','S-JTSK / Krovak East North',NULL,'EPSG','4499','EPSG','4156','EPSG','5510',NULL,0); INSERT INTO "usage" VALUES('EPSG','4007','projected_crs','EPSG','5514','EPSG','1306','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5515','S-JTSK/05 / Modified Krovak',NULL,'EPSG','6501','EPSG','5228','EPSG','5511',NULL,0); INSERT INTO "usage" VALUES('EPSG','4008','projected_crs','EPSG','5515','EPSG','1079','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5516','S-JTSK/05 / Modified Krovak East North',NULL,'EPSG','4499','EPSG','5228','EPSG','5512',NULL,0); INSERT INTO "usage" VALUES('EPSG','4009','projected_crs','EPSG','5516','EPSG','1079','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5518','CI1971 / Chatham Islands Map Grid',NULL,'EPSG','4500','EPSG','4672','EPSG','5517',NULL,0); INSERT INTO "usage" VALUES('EPSG','4010','projected_crs','EPSG','5518','EPSG','2889','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','5519','CI1979 / Chatham Islands Map Grid',NULL,'EPSG','4500','EPSG','4673','EPSG','5517',NULL,0); INSERT INTO "usage" VALUES('EPSG','4011','projected_crs','EPSG','5519','EPSG','2889','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','5520','DHDN / 3-degree Gauss-Kruger zone 1',NULL,'EPSG','4530','EPSG','4314','EPSG','16261',NULL,0); INSERT INTO "usage" VALUES('EPSG','4012','projected_crs','EPSG','5520','EPSG','3892','EPSG','1190'); INSERT INTO "projected_crs" VALUES('EPSG','5523','WGS 84 / Gabon TM 2011',NULL,'EPSG','4499','EPSG','4326','EPSG','5522',NULL,0); INSERT INTO "usage" VALUES('EPSG','4013','projected_crs','EPSG','5523','EPSG','1100','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5530','SAD69(96) / Brazil Polyconic',NULL,'EPSG','4499','EPSG','5527','EPSG','19941',NULL,0); INSERT INTO "usage" VALUES('EPSG','4016','projected_crs','EPSG','5530','EPSG','1053','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','5531','SAD69(96) / UTM zone 21S',NULL,'EPSG','4400','EPSG','5527','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','4017','projected_crs','EPSG','5531','EPSG','3881','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5532','SAD69(96) / UTM zone 22S',NULL,'EPSG','4400','EPSG','4618','EPSG','16122',NULL,1); INSERT INTO "usage" VALUES('EPSG','4018','projected_crs','EPSG','5532','EPSG','3878','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5533','SAD69(96) / UTM zone 23S',NULL,'EPSG','4400','EPSG','5527','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','4019','projected_crs','EPSG','5533','EPSG','3445','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5534','SAD69(96) / UTM zone 24S',NULL,'EPSG','4400','EPSG','5527','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','4020','projected_crs','EPSG','5534','EPSG','3446','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5535','SAD69(96) / UTM zone 25S',NULL,'EPSG','4400','EPSG','5527','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','4021','projected_crs','EPSG','5535','EPSG','3447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5536','Corrego Alegre 1961 / UTM zone 21S',NULL,'EPSG','4400','EPSG','5524','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','4022','projected_crs','EPSG','5536','EPSG','4574','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5537','Corrego Alegre 1961 / UTM zone 22S',NULL,'EPSG','4400','EPSG','5524','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','4023','projected_crs','EPSG','5537','EPSG','4576','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5538','Corrego Alegre 1961 / UTM zone 23S',NULL,'EPSG','4400','EPSG','5524','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','4024','projected_crs','EPSG','5538','EPSG','3177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5539','Corrego Alegre 1961 / UTM zone 24S',NULL,'EPSG','4400','EPSG','5524','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','4025','projected_crs','EPSG','5539','EPSG','3877','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5550','PNG94 / PNGMG94 zone 54',NULL,'EPSG','4400','EPSG','5546','EPSG','5547',NULL,0); INSERT INTO "usage" VALUES('EPSG','4029','projected_crs','EPSG','5550','EPSG','3882','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5551','PNG94 / PNGMG94 zone 55',NULL,'EPSG','4400','EPSG','5546','EPSG','5548',NULL,0); INSERT INTO "usage" VALUES('EPSG','4030','projected_crs','EPSG','5551','EPSG','3885','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5552','PNG94 / PNGMG94 zone 56',NULL,'EPSG','4400','EPSG','5546','EPSG','5549',NULL,0); INSERT INTO "usage" VALUES('EPSG','4031','projected_crs','EPSG','5552','EPSG','3888','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','5559','Ocotepeque 1935 / Guatemala Norte',NULL,'EPSG','4499','EPSG','5451','EPSG','18211',NULL,0); INSERT INTO "usage" VALUES('EPSG','4036','projected_crs','EPSG','5559','EPSG','2120','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5562','UCS-2000 / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','5561','EPSG','16204',NULL,0); INSERT INTO "usage" VALUES('EPSG','4039','projected_crs','EPSG','5562','EPSG','3895','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5563','UCS-2000 / Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','5561','EPSG','16205',NULL,0); INSERT INTO "usage" VALUES('EPSG','4040','projected_crs','EPSG','5563','EPSG','3898','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5564','UCS-2000 / Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','5561','EPSG','16206',NULL,0); INSERT INTO "usage" VALUES('EPSG','4041','projected_crs','EPSG','5564','EPSG','3903','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5565','UCS-2000 / Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','5561','EPSG','16207',NULL,0); INSERT INTO "usage" VALUES('EPSG','4042','projected_crs','EPSG','5565','EPSG','3905','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5566','UCS-2000 / Gauss-Kruger CM 21E',NULL,'EPSG','4530','EPSG','5561','EPSG','16304',NULL,0); INSERT INTO "usage" VALUES('EPSG','4043','projected_crs','EPSG','5566','EPSG','3895','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5567','UCS-2000 / Gauss-Kruger CM 27E',NULL,'EPSG','4530','EPSG','5561','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','4044','projected_crs','EPSG','5567','EPSG','3898','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5568','UCS-2000 / Gauss-Kruger CM 33E',NULL,'EPSG','4530','EPSG','5561','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','4045','projected_crs','EPSG','5568','EPSG','3903','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5569','UCS-2000 / Gauss-Kruger CM 39E',NULL,'EPSG','4530','EPSG','5561','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','4046','projected_crs','EPSG','5569','EPSG','3905','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','5570','UCS-2000 / 3-degree Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','5561','EPSG','16267',NULL,1); INSERT INTO "usage" VALUES('EPSG','4047','projected_crs','EPSG','5570','EPSG','3906','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5571','UCS-2000 / 3-degree Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','5561','EPSG','16268',NULL,1); INSERT INTO "usage" VALUES('EPSG','4048','projected_crs','EPSG','5571','EPSG','3907','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5572','UCS-2000 / 3-degree Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','5561','EPSG','16269',NULL,1); INSERT INTO "usage" VALUES('EPSG','4049','projected_crs','EPSG','5572','EPSG','3908','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5573','UCS-2000 / 3-degree Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','5561','EPSG','16270',NULL,1); INSERT INTO "usage" VALUES('EPSG','4050','projected_crs','EPSG','5573','EPSG','3909','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5574','UCS-2000 / 3-degree Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','5561','EPSG','16271',NULL,1); INSERT INTO "usage" VALUES('EPSG','4051','projected_crs','EPSG','5574','EPSG','3910','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5575','UCS-2000 / 3-degree Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','5561','EPSG','16272',NULL,1); INSERT INTO "usage" VALUES('EPSG','4052','projected_crs','EPSG','5575','EPSG','3912','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5576','UCS-2000 / 3-degree Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','5561','EPSG','16273',NULL,1); INSERT INTO "usage" VALUES('EPSG','4053','projected_crs','EPSG','5576','EPSG','3913','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5577','UCS-2000 / 3-degree Gauss-Kruger CM 21E',NULL,'EPSG','4530','EPSG','5561','EPSG','16304',NULL,1); INSERT INTO "usage" VALUES('EPSG','4054','projected_crs','EPSG','5577','EPSG','3906','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5578','UCS-2000 / 3-degree Gauss-Kruger CM 24E',NULL,'EPSG','4530','EPSG','5561','EPSG','16368',NULL,1); INSERT INTO "usage" VALUES('EPSG','4055','projected_crs','EPSG','5578','EPSG','3907','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5579','UCS-2000 / 3-degree Gauss-Kruger CM 27E',NULL,'EPSG','4530','EPSG','5561','EPSG','16305',NULL,1); INSERT INTO "usage" VALUES('EPSG','4056','projected_crs','EPSG','5579','EPSG','3908','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5580','UCS-2000 / 3-degree Gauss-Kruger CM 30E',NULL,'EPSG','4530','EPSG','5561','EPSG','16370',NULL,1); INSERT INTO "usage" VALUES('EPSG','4057','projected_crs','EPSG','5580','EPSG','3909','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5581','UCS-2000 / 3-degree Gauss-Kruger CM 33E',NULL,'EPSG','4530','EPSG','5561','EPSG','16306',NULL,1); INSERT INTO "usage" VALUES('EPSG','4058','projected_crs','EPSG','5581','EPSG','3910','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5582','UCS-2000 / 3-degree Gauss-Kruger CM 36E',NULL,'EPSG','4530','EPSG','5561','EPSG','16372',NULL,1); INSERT INTO "usage" VALUES('EPSG','4059','projected_crs','EPSG','5582','EPSG','3912','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5583','UCS-2000 / 3-degree Gauss-Kruger CM 39E',NULL,'EPSG','4530','EPSG','5561','EPSG','16307',NULL,1); INSERT INTO "usage" VALUES('EPSG','4060','projected_crs','EPSG','5583','EPSG','3913','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5588','NAD27 / New Brunswick Stereographic (NAD27)',NULL,'EPSG','1029','EPSG','4267','EPSG','5587',NULL,0); INSERT INTO "usage" VALUES('EPSG','4061','projected_crs','EPSG','5588','EPSG','1447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5589','Sibun Gorge 1922 / Colony Grid',NULL,'EPSG','4403','EPSG','5464','EPSG','5465',NULL,0); INSERT INTO "usage" VALUES('EPSG','4062','projected_crs','EPSG','5589','EPSG','3219','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5596','FEH2010 / Fehmarnbelt TM',NULL,'EPSG','4400','EPSG','5593','EPSG','5595',NULL,0); INSERT INTO "usage" VALUES('EPSG','4066','projected_crs','EPSG','5596','EPSG','3889','EPSG','1139'); INSERT INTO "projected_crs" VALUES('EPSG','5623','NAD27 / Michigan East',NULL,'EPSG','4497','EPSG','4267','EPSG','12101',NULL,0); INSERT INTO "usage" VALUES('EPSG','4091','projected_crs','EPSG','5623','EPSG','1720','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5624','NAD27 / Michigan Old Central',NULL,'EPSG','4497','EPSG','4267','EPSG','12102',NULL,0); INSERT INTO "usage" VALUES('EPSG','4092','projected_crs','EPSG','5624','EPSG','1721','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5625','NAD27 / Michigan West',NULL,'EPSG','4497','EPSG','4267','EPSG','12103',NULL,0); INSERT INTO "usage" VALUES('EPSG','4093','projected_crs','EPSG','5625','EPSG','3652','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5627','ED50 / TM 6 NE',NULL,'EPSG','4400','EPSG','4230','EPSG','16406',NULL,0); INSERT INTO "usage" VALUES('EPSG','4094','projected_crs','EPSG','5627','EPSG','3897','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','5629','Moznet / UTM zone 38S',NULL,'EPSG','4400','EPSG','4130','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','4096','projected_crs','EPSG','5629','EPSG','1541','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5631','Pulkovo 1942(58) / Gauss-Kruger zone 2 (E-N)',NULL,'EPSG','4400','EPSG','4179','EPSG','16202',NULL,0); INSERT INTO "usage" VALUES('EPSG','4097','projected_crs','EPSG','5631','EPSG','3575','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5632','PTRA08 / LCC Europe',NULL,'EPSG','4500','EPSG','5013','EPSG','19985',NULL,0); INSERT INTO "usage" VALUES('EPSG','4098','projected_crs','EPSG','5632','EPSG','3670','EPSG','1107'); INSERT INTO "projected_crs" VALUES('EPSG','5633','PTRA08 / LAEA Europe',NULL,'EPSG','4532','EPSG','5013','EPSG','19986',NULL,0); INSERT INTO "usage" VALUES('EPSG','4099','projected_crs','EPSG','5633','EPSG','3670','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','5634','REGCAN95 / LCC Europe',NULL,'EPSG','4500','EPSG','4081','EPSG','19985',NULL,0); INSERT INTO "usage" VALUES('EPSG','4100','projected_crs','EPSG','5634','EPSG','3199','EPSG','1107'); INSERT INTO "projected_crs" VALUES('EPSG','5635','REGCAN95 / LAEA Europe',NULL,'EPSG','4500','EPSG','4081','EPSG','19986',NULL,0); INSERT INTO "usage" VALUES('EPSG','4101','projected_crs','EPSG','5635','EPSG','3199','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','5636','TUREF / LAEA Europe',NULL,'EPSG','4532','EPSG','5252','EPSG','19986',NULL,0); INSERT INTO "usage" VALUES('EPSG','4102','projected_crs','EPSG','5636','EPSG','1237','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','5637','TUREF / LCC Europe',NULL,'EPSG','4500','EPSG','5252','EPSG','19985',NULL,0); INSERT INTO "usage" VALUES('EPSG','4103','projected_crs','EPSG','5637','EPSG','1237','EPSG','1107'); INSERT INTO "projected_crs" VALUES('EPSG','5638','ISN2004 / LAEA Europe',NULL,'EPSG','4532','EPSG','5324','EPSG','19986',NULL,0); INSERT INTO "usage" VALUES('EPSG','4104','projected_crs','EPSG','5638','EPSG','1120','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','5639','ISN2004 / LCC Europe',NULL,'EPSG','4500','EPSG','5324','EPSG','19985',NULL,0); INSERT INTO "usage" VALUES('EPSG','4105','projected_crs','EPSG','5639','EPSG','1120','EPSG','1107'); INSERT INTO "projected_crs" VALUES('EPSG','5641','SIRGAS 2000 / Brazil Mercator',NULL,'EPSG','4499','EPSG','4674','EPSG','5640',NULL,0); INSERT INTO "usage" VALUES('EPSG','4106','projected_crs','EPSG','5641','EPSG','3896','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','5643','ED50 / SPBA LCC',NULL,'EPSG','4400','EPSG','4230','EPSG','5642',NULL,0); INSERT INTO "usage" VALUES('EPSG','4107','projected_crs','EPSG','5643','EPSG','3899','EPSG','1190'); INSERT INTO "projected_crs" VALUES('EPSG','5644','RGR92 / UTM zone 39S',NULL,'EPSG','4400','EPSG','4627','EPSG','16139',NULL,0); INSERT INTO "usage" VALUES('EPSG','4108','projected_crs','EPSG','5644','EPSG','3915','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5646','NAD83 / Vermont (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','5645',NULL,0); INSERT INTO "usage" VALUES('EPSG','4109','projected_crs','EPSG','5646','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5649','ETRS89 / UTM zone 31N (zE-N)',NULL,'EPSG','4400','EPSG','4258','EPSG','5647',NULL,0); INSERT INTO "usage" VALUES('EPSG','4110','projected_crs','EPSG','5649','EPSG','2860','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5650','ETRS89 / UTM zone 33N (zE-N)',NULL,'EPSG','4400','EPSG','4258','EPSG','5648',NULL,0); INSERT INTO "usage" VALUES('EPSG','4111','projected_crs','EPSG','5650','EPSG','2862','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5651','ETRS89 / UTM zone 31N (N-zE)',NULL,'EPSG','4500','EPSG','4258','EPSG','5647',NULL,0); INSERT INTO "usage" VALUES('EPSG','4112','projected_crs','EPSG','5651','EPSG','2860','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5652','ETRS89 / UTM zone 32N (N-zE)',NULL,'EPSG','4500','EPSG','4258','EPSG','4648',NULL,0); INSERT INTO "usage" VALUES('EPSG','4113','projected_crs','EPSG','5652','EPSG','2861','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5653','ETRS89 / UTM zone 33N (N-zE)',NULL,'EPSG','4500','EPSG','4258','EPSG','5648',NULL,0); INSERT INTO "usage" VALUES('EPSG','4114','projected_crs','EPSG','5653','EPSG','2862','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5654','NAD83(HARN) / Vermont (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','5645',NULL,0); INSERT INTO "usage" VALUES('EPSG','4115','projected_crs','EPSG','5654','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5655','NAD83(NSRS2007) / Vermont (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','5645',NULL,0); INSERT INTO "usage" VALUES('EPSG','4116','projected_crs','EPSG','5655','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5659','Monte Mario / TM Emilia-Romagna',NULL,'EPSG','4499','EPSG','4265','EPSG','5658',NULL,0); INSERT INTO "usage" VALUES('EPSG','4117','projected_crs','EPSG','5659','EPSG','4035','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5663','Pulkovo 1942(58) / Gauss-Kruger zone 3 (E-N)',NULL,'EPSG','4400','EPSG','4179','EPSG','16203',NULL,0); INSERT INTO "usage" VALUES('EPSG','4118','projected_crs','EPSG','5663','EPSG','1792','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5664','Pulkovo 1942(83) / Gauss-Kruger zone 2 (E-N)',NULL,'EPSG','4400','EPSG','4178','EPSG','16202',NULL,0); INSERT INTO "usage" VALUES('EPSG','4119','projected_crs','EPSG','5664','EPSG','3575','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5665','Pulkovo 1942(83) / Gauss-Kruger zone 3 (E-N)',NULL,'EPSG','4400','EPSG','4178','EPSG','16203',NULL,0); INSERT INTO "usage" VALUES('EPSG','4120','projected_crs','EPSG','5665','EPSG','3576','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5666','PD/83 / 3-degree Gauss-Kruger zone 3 (E-N)',NULL,'EPSG','4400','EPSG','4746','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','4121','projected_crs','EPSG','5666','EPSG','3392','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5667','PD/83 / 3-degree Gauss-Kruger zone 4 (E-N)',NULL,'EPSG','4400','EPSG','4746','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','4122','projected_crs','EPSG','5667','EPSG','3393','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5668','RD/83 / 3-degree Gauss-Kruger zone 4 (E-N)',NULL,'EPSG','4400','EPSG','4745','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','4123','projected_crs','EPSG','5668','EPSG','3395','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5669','RD/83 / 3-degree Gauss-Kruger zone 5 (E-N)',NULL,'EPSG','4400','EPSG','4745','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','4124','projected_crs','EPSG','5669','EPSG','3394','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5670','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3 (E-N)',NULL,'EPSG','4400','EPSG','4179','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','4125','projected_crs','EPSG','5670','EPSG','1512','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5671','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4 (E-N)',NULL,'EPSG','4400','EPSG','4179','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','4126','projected_crs','EPSG','5671','EPSG','1513','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5672','Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5 (E-N)',NULL,'EPSG','4400','EPSG','4179','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','4127','projected_crs','EPSG','5672','EPSG','3580','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5673','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3 (E-N)',NULL,'EPSG','4400','EPSG','4178','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','4128','projected_crs','EPSG','5673','EPSG','1512','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5674','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4 (E-N)',NULL,'EPSG','4400','EPSG','4178','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','4129','projected_crs','EPSG','5674','EPSG','1513','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5675','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5 (E-N)',NULL,'EPSG','4400','EPSG','4178','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','4130','projected_crs','EPSG','5675','EPSG','1514','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','5676','DHDN / 3-degree Gauss-Kruger zone 2 (E-N)',NULL,'EPSG','4400','EPSG','4314','EPSG','16262',NULL,0); INSERT INTO "usage" VALUES('EPSG','4131','projected_crs','EPSG','5676','EPSG','1624','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5677','DHDN / 3-degree Gauss-Kruger zone 3 (E-N)',NULL,'EPSG','4400','EPSG','4314','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','4132','projected_crs','EPSG','5677','EPSG','1625','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5678','DHDN / 3-degree Gauss-Kruger zone 4 (E-N)',NULL,'EPSG','4400','EPSG','4314','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','4133','projected_crs','EPSG','5678','EPSG','1626','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5679','DHDN / 3-degree Gauss-Kruger zone 5 (E-N)',NULL,'EPSG','4400','EPSG','4314','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','4134','projected_crs','EPSG','5679','EPSG','1627','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5680','DHDN / 3-degree Gauss-Kruger zone 1 (E-N)',NULL,'EPSG','4400','EPSG','4314','EPSG','16261',NULL,0); INSERT INTO "usage" VALUES('EPSG','4135','projected_crs','EPSG','5680','EPSG','3892','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','5682','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N)',NULL,'EPSG','4400','EPSG','5681','EPSG','16262',NULL,0); INSERT INTO "usage" VALUES('EPSG','4137','projected_crs','EPSG','5682','EPSG','1624','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','5683','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N)',NULL,'EPSG','4400','EPSG','5681','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','4138','projected_crs','EPSG','5683','EPSG','3993','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','5684','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N)',NULL,'EPSG','4400','EPSG','5681','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','4139','projected_crs','EPSG','5684','EPSG','3996','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','5685','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N)',NULL,'EPSG','4400','EPSG','5681','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','4140','projected_crs','EPSG','5685','EPSG','3998','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','5700','NZGD2000 / UTM zone 1S',NULL,'EPSG','4400','EPSG','4167','EPSG','16101',NULL,0); INSERT INTO "usage" VALUES('EPSG','4143','projected_crs','EPSG','5700','EPSG','3992','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','5825','AGD66 / ACT Standard Grid',NULL,'EPSG','4400','EPSG','4202','EPSG','5824',NULL,0); INSERT INTO "usage" VALUES('EPSG','4265','projected_crs','EPSG','5825','EPSG','2283','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5836','Yemen NGN96 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4163','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','4274','projected_crs','EPSG','5836','EPSG','4006','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5837','Yemen NGN96 / UTM zone 40N',NULL,'EPSG','4400','EPSG','4163','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','4275','projected_crs','EPSG','5837','EPSG','4002','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5839','Peru96 / UTM zone 17S',NULL,'EPSG','4400','EPSG','5373','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','4276','projected_crs','EPSG','5839','EPSG','3837','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5842','WGS 84 / TM 12 SE',NULL,'EPSG','4400','EPSG','4326','EPSG','16612',NULL,0); INSERT INTO "usage" VALUES('EPSG','4277','projected_crs','EPSG','5842','EPSG','4025','EPSG','1080'); INSERT INTO "projected_crs" VALUES('EPSG','5844','RGRDC 2005 / Congo TM zone 30',NULL,'EPSG','4499','EPSG','4046','EPSG','17430',NULL,0); INSERT INTO "usage" VALUES('EPSG','4279','projected_crs','EPSG','5844','EPSG','4018','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','5858','SAD69(96) / UTM zone 22S',NULL,'EPSG','4400','EPSG','5527','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','4293','projected_crs','EPSG','5858','EPSG','3878','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5875','SAD69(96) / UTM zone 18S',NULL,'EPSG','4400','EPSG','5527','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','4309','projected_crs','EPSG','5875','EPSG','4023','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5876','SAD69(96) / UTM zone 19S',NULL,'EPSG','4400','EPSG','5527','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','4310','projected_crs','EPSG','5876','EPSG','4024','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5877','SAD69(96) / UTM zone 20S',NULL,'EPSG','4400','EPSG','5527','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','4311','projected_crs','EPSG','5877','EPSG','4026','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','5879','Cadastre 1997 / UTM zone 38S',NULL,'EPSG','4400','EPSG','4475','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','4312','projected_crs','EPSG','5879','EPSG','3340','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','5880','SIRGAS 2000 / Brazil Polyconic',NULL,'EPSG','4499','EPSG','4674','EPSG','19941',NULL,0); INSERT INTO "usage" VALUES('EPSG','4313','projected_crs','EPSG','5880','EPSG','1053','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','5887','TGD2005 / Tonga Map Grid',NULL,'EPSG','4400','EPSG','5886','EPSG','5883',NULL,0); INSERT INTO "usage" VALUES('EPSG','4317','projected_crs','EPSG','5887','EPSG','1234','EPSG','1181'); INSERT INTO "projected_crs" VALUES('EPSG','5890','JAXA Snow Depth Polar Stereographic North',NULL,'EPSG','1035','EPSG','4054','EPSG','5889',NULL,1); INSERT INTO "usage" VALUES('EPSG','4318','projected_crs','EPSG','5890','EPSG','1996','EPSG','1040'); INSERT INTO "projected_crs" VALUES('EPSG','5896','VN-2000 / TM-3 zone 481',NULL,'EPSG','4400','EPSG','4756','EPSG','5892',NULL,0); INSERT INTO "usage" VALUES('EPSG','4319','projected_crs','EPSG','5896','EPSG','4193','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','5897','VN-2000 / TM-3 zone 482',NULL,'EPSG','4400','EPSG','4756','EPSG','5893',NULL,0); INSERT INTO "usage" VALUES('EPSG','4320','projected_crs','EPSG','5897','EPSG','4215','EPSG','1208'); INSERT INTO "usage" VALUES('EPSG','4321','projected_crs','EPSG','5897','EPSG','4547','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','5898','VN-2000 / TM-3 zone 491',NULL,'EPSG','4400','EPSG','4756','EPSG','5894',NULL,0); INSERT INTO "usage" VALUES('EPSG','4322','projected_crs','EPSG','5898','EPSG','4217','EPSG','1208'); INSERT INTO "usage" VALUES('EPSG','4323','projected_crs','EPSG','5898','EPSG','4558','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','5899','VN-2000 / TM-3 107-45',NULL,'EPSG','4400','EPSG','4756','EPSG','5895',NULL,0); INSERT INTO "usage" VALUES('EPSG','4324','projected_crs','EPSG','5899','EPSG','4218','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','5921','WGS 84 / EPSG Arctic Regional zone A1',NULL,'EPSG','4400','EPSG','4326','EPSG','5906',NULL,0); INSERT INTO "usage" VALUES('EPSG','4325','projected_crs','EPSG','5921','EPSG','4019','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5922','WGS 84 / EPSG Arctic Regional zone A2',NULL,'EPSG','4400','EPSG','4326','EPSG','5907',NULL,0); INSERT INTO "usage" VALUES('EPSG','4326','projected_crs','EPSG','5922','EPSG','4027','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5923','WGS 84 / EPSG Arctic Regional zone A3',NULL,'EPSG','4400','EPSG','4326','EPSG','5908',NULL,0); INSERT INTO "usage" VALUES('EPSG','4327','projected_crs','EPSG','5923','EPSG','4028','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5924','WGS 84 / EPSG Arctic Regional zone A4',NULL,'EPSG','4400','EPSG','4326','EPSG','5909',NULL,0); INSERT INTO "usage" VALUES('EPSG','4328','projected_crs','EPSG','5924','EPSG','4029','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5925','WGS 84 / EPSG Arctic Regional zone A5',NULL,'EPSG','4400','EPSG','4326','EPSG','5910',NULL,0); INSERT INTO "usage" VALUES('EPSG','4329','projected_crs','EPSG','5925','EPSG','4031','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5926','WGS 84 / EPSG Arctic Regional zone B1',NULL,'EPSG','4400','EPSG','4326','EPSG','5911',NULL,0); INSERT INTO "usage" VALUES('EPSG','4330','projected_crs','EPSG','5926','EPSG','4032','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5927','WGS 84 / EPSG Arctic Regional zone B2',NULL,'EPSG','4400','EPSG','4326','EPSG','5912',NULL,0); INSERT INTO "usage" VALUES('EPSG','4331','projected_crs','EPSG','5927','EPSG','4033','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5928','WGS 84 / EPSG Arctic Regional zone B3',NULL,'EPSG','4400','EPSG','4326','EPSG','5913',NULL,0); INSERT INTO "usage" VALUES('EPSG','4332','projected_crs','EPSG','5928','EPSG','4034','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5929','WGS 84 / EPSG Arctic Regional zone B4',NULL,'EPSG','4400','EPSG','4326','EPSG','5914',NULL,0); INSERT INTO "usage" VALUES('EPSG','4333','projected_crs','EPSG','5929','EPSG','4037','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5930','WGS 84 / EPSG Arctic Regional zone B5',NULL,'EPSG','4400','EPSG','4326','EPSG','5915',NULL,0); INSERT INTO "usage" VALUES('EPSG','4334','projected_crs','EPSG','5930','EPSG','4038','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5931','WGS 84 / EPSG Arctic Regional zone C1',NULL,'EPSG','4400','EPSG','4326','EPSG','5916',NULL,0); INSERT INTO "usage" VALUES('EPSG','4335','projected_crs','EPSG','5931','EPSG','4040','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5932','WGS 84 / EPSG Arctic Regional zone C2',NULL,'EPSG','4400','EPSG','4326','EPSG','5917',NULL,0); INSERT INTO "usage" VALUES('EPSG','4336','projected_crs','EPSG','5932','EPSG','4041','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5933','WGS 84 / EPSG Arctic Regional zone C3',NULL,'EPSG','4400','EPSG','4326','EPSG','5918',NULL,0); INSERT INTO "usage" VALUES('EPSG','4337','projected_crs','EPSG','5933','EPSG','4042','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5934','WGS 84 / EPSG Arctic Regional zone C4',NULL,'EPSG','4400','EPSG','4326','EPSG','5919',NULL,0); INSERT INTO "usage" VALUES('EPSG','4338','projected_crs','EPSG','5934','EPSG','4043','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5935','WGS 84 / EPSG Arctic Regional zone C5',NULL,'EPSG','4400','EPSG','4326','EPSG','5920',NULL,0); INSERT INTO "usage" VALUES('EPSG','4339','projected_crs','EPSG','5935','EPSG','4045','EPSG','1246'); INSERT INTO "projected_crs" VALUES('EPSG','5936','WGS 84 / EPSG Alaska Polar Stereographic',NULL,'EPSG','4467','EPSG','4326','EPSG','5901',NULL,0); INSERT INTO "usage" VALUES('EPSG','4340','projected_crs','EPSG','5936','EPSG','1996','EPSG','1071'); INSERT INTO "projected_crs" VALUES('EPSG','5937','WGS 84 / EPSG Canada Polar Stereographic',NULL,'EPSG','4466','EPSG','4326','EPSG','5902',NULL,0); INSERT INTO "usage" VALUES('EPSG','4341','projected_crs','EPSG','5937','EPSG','1996','EPSG','1072'); INSERT INTO "projected_crs" VALUES('EPSG','5938','WGS 84 / EPSG Greenland Polar Stereographic',NULL,'EPSG','1036','EPSG','4326','EPSG','5903',NULL,0); INSERT INTO "usage" VALUES('EPSG','4342','projected_crs','EPSG','5938','EPSG','1996','EPSG','1073'); INSERT INTO "projected_crs" VALUES('EPSG','5939','WGS 84 / EPSG Norway Polar Stereographic',NULL,'EPSG','1037','EPSG','4326','EPSG','5904',NULL,0); INSERT INTO "usage" VALUES('EPSG','4343','projected_crs','EPSG','5939','EPSG','1996','EPSG','1074'); INSERT INTO "projected_crs" VALUES('EPSG','5940','WGS 84 / EPSG Russia Polar Stereographic',NULL,'EPSG','1038','EPSG','4326','EPSG','5905',NULL,0); INSERT INTO "usage" VALUES('EPSG','4344','projected_crs','EPSG','5940','EPSG','1996','EPSG','1075'); INSERT INTO "projected_crs" VALUES('EPSG','6050','GR96 / EPSG Arctic zone 1-25',NULL,'EPSG','4400','EPSG','4747','EPSG','5979',NULL,0); INSERT INTO "usage" VALUES('EPSG','4379','projected_crs','EPSG','6050','EPSG','4048','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6051','GR96 / EPSG Arctic zone 2-18',NULL,'EPSG','4400','EPSG','4747','EPSG','5987',NULL,0); INSERT INTO "usage" VALUES('EPSG','4380','projected_crs','EPSG','6051','EPSG','4039','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6052','GR96 / EPSG Arctic zone 2-20',NULL,'EPSG','4400','EPSG','4747','EPSG','5988',NULL,0); INSERT INTO "usage" VALUES('EPSG','4381','projected_crs','EPSG','6052','EPSG','4046','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6053','GR96 / EPSG Arctic zone 3-29',NULL,'EPSG','4400','EPSG','4747','EPSG','6002',NULL,0); INSERT INTO "usage" VALUES('EPSG','4382','projected_crs','EPSG','6053','EPSG','4073','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6054','GR96 / EPSG Arctic zone 3-31',NULL,'EPSG','4400','EPSG','4747','EPSG','6003',NULL,0); INSERT INTO "usage" VALUES('EPSG','4383','projected_crs','EPSG','6054','EPSG','4074','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6055','GR96 / EPSG Arctic zone 3-33',NULL,'EPSG','4400','EPSG','4747','EPSG','6004',NULL,0); INSERT INTO "usage" VALUES('EPSG','4384','projected_crs','EPSG','6055','EPSG','4075','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6056','GR96 / EPSG Arctic zone 4-20',NULL,'EPSG','4400','EPSG','4747','EPSG','6009',NULL,0); INSERT INTO "usage" VALUES('EPSG','4385','projected_crs','EPSG','6056','EPSG','4080','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6057','GR96 / EPSG Arctic zone 4-22',NULL,'EPSG','4400','EPSG','4747','EPSG','6010',NULL,0); INSERT INTO "usage" VALUES('EPSG','4386','projected_crs','EPSG','6057','EPSG','4081','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6058','GR96 / EPSG Arctic zone 4-24',NULL,'EPSG','4400','EPSG','4747','EPSG','6011',NULL,0); INSERT INTO "usage" VALUES('EPSG','4387','projected_crs','EPSG','6058','EPSG','4082','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6059','GR96 / EPSG Arctic zone 5-41',NULL,'EPSG','4400','EPSG','4747','EPSG','6035',NULL,0); INSERT INTO "usage" VALUES('EPSG','4388','projected_crs','EPSG','6059','EPSG','4106','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6060','GR96 / EPSG Arctic zone 5-43',NULL,'EPSG','4400','EPSG','4747','EPSG','6036',NULL,0); INSERT INTO "usage" VALUES('EPSG','4389','projected_crs','EPSG','6060','EPSG','4107','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6061','GR96 / EPSG Arctic zone 5-45',NULL,'EPSG','4400','EPSG','4747','EPSG','6037',NULL,0); INSERT INTO "usage" VALUES('EPSG','4390','projected_crs','EPSG','6061','EPSG','4108','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6062','GR96 / EPSG Arctic zone 6-26',NULL,'EPSG','4400','EPSG','4747','EPSG','6045',NULL,0); INSERT INTO "usage" VALUES('EPSG','4391','projected_crs','EPSG','6062','EPSG','4116','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6063','GR96 / EPSG Arctic zone 6-28',NULL,'EPSG','4400','EPSG','4747','EPSG','6046',NULL,0); INSERT INTO "usage" VALUES('EPSG','4392','projected_crs','EPSG','6063','EPSG','4117','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6064','GR96 / EPSG Arctic zone 6-30',NULL,'EPSG','4400','EPSG','4747','EPSG','6047',NULL,0); INSERT INTO "usage" VALUES('EPSG','4393','projected_crs','EPSG','6064','EPSG','4118','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6065','GR96 / EPSG Arctic zone 7-11',NULL,'EPSG','4400','EPSG','4747','EPSG','6048',NULL,0); INSERT INTO "usage" VALUES('EPSG','4394','projected_crs','EPSG','6065','EPSG','4119','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6066','GR96 / EPSG Arctic zone 7-13',NULL,'EPSG','4400','EPSG','4747','EPSG','6049',NULL,0); INSERT INTO "usage" VALUES('EPSG','4395','projected_crs','EPSG','6066','EPSG','4120','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6067','GR96 / EPSG Arctic zone 8-20',NULL,'EPSG','4400','EPSG','4747','EPSG','5943',NULL,0); INSERT INTO "usage" VALUES('EPSG','4396','projected_crs','EPSG','6067','EPSG','4123','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6068','GR96 / EPSG Arctic zone 8-22',NULL,'EPSG','4400','EPSG','4747','EPSG','5944',NULL,0); INSERT INTO "usage" VALUES('EPSG','4397','projected_crs','EPSG','6068','EPSG','4124','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6069','ETRS89 / EPSG Arctic zone 2-22',NULL,'EPSG','4400','EPSG','4258','EPSG','5989',NULL,0); INSERT INTO "usage" VALUES('EPSG','4398','projected_crs','EPSG','6069','EPSG','4053','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6070','ETRS89 / EPSG Arctic zone 3-11',NULL,'EPSG','4400','EPSG','4258','EPSG','5993',NULL,0); INSERT INTO "usage" VALUES('EPSG','4399','projected_crs','EPSG','6070','EPSG','4058','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6071','ETRS89 / EPSG Arctic zone 4-26',NULL,'EPSG','4400','EPSG','4258','EPSG','6012',NULL,0); INSERT INTO "usage" VALUES('EPSG','4400','projected_crs','EPSG','6071','EPSG','4083','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6072','ETRS89 / EPSG Arctic zone 4-28',NULL,'EPSG','4400','EPSG','4258','EPSG','6013',NULL,0); INSERT INTO "usage" VALUES('EPSG','4401','projected_crs','EPSG','6072','EPSG','4084','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6073','ETRS89 / EPSG Arctic zone 5-11',NULL,'EPSG','4400','EPSG','4258','EPSG','6020',NULL,0); INSERT INTO "usage" VALUES('EPSG','4402','projected_crs','EPSG','6073','EPSG','4091','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6074','ETRS89 / EPSG Arctic zone 5-13',NULL,'EPSG','4400','EPSG','4258','EPSG','6021',NULL,0); INSERT INTO "usage" VALUES('EPSG','4403','projected_crs','EPSG','6074','EPSG','4092','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6075','WGS 84 / EPSG Arctic zone 2-24',NULL,'EPSG','4400','EPSG','4326','EPSG','5990',NULL,0); INSERT INTO "usage" VALUES('EPSG','4404','projected_crs','EPSG','6075','EPSG','4054','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6076','WGS 84 / EPSG Arctic zone 2-26',NULL,'EPSG','4400','EPSG','4326','EPSG','5991',NULL,0); INSERT INTO "usage" VALUES('EPSG','4405','projected_crs','EPSG','6076','EPSG','4055','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6077','WGS 84 / EPSG Arctic zone 3-13',NULL,'EPSG','4400','EPSG','4326','EPSG','5994',NULL,0); INSERT INTO "usage" VALUES('EPSG','4406','projected_crs','EPSG','6077','EPSG','4059','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6078','WGS 84 / EPSG Arctic zone 3-15',NULL,'EPSG','4400','EPSG','4326','EPSG','5995',NULL,0); INSERT INTO "usage" VALUES('EPSG','4407','projected_crs','EPSG','6078','EPSG','4060','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6079','WGS 84 / EPSG Arctic zone 3-17',NULL,'EPSG','4400','EPSG','4326','EPSG','5996',NULL,0); INSERT INTO "usage" VALUES('EPSG','4408','projected_crs','EPSG','6079','EPSG','4061','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6080','WGS 84 / EPSG Arctic zone 3-19',NULL,'EPSG','4400','EPSG','4326','EPSG','5997',NULL,0); INSERT INTO "usage" VALUES('EPSG','4409','projected_crs','EPSG','6080','EPSG','4062','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6081','WGS 84 / EPSG Arctic zone 4-30',NULL,'EPSG','4400','EPSG','4326','EPSG','6014',NULL,0); INSERT INTO "usage" VALUES('EPSG','4410','projected_crs','EPSG','6081','EPSG','4085','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6082','WGS 84 / EPSG Arctic zone 4-32',NULL,'EPSG','4400','EPSG','4326','EPSG','6015',NULL,0); INSERT INTO "usage" VALUES('EPSG','4411','projected_crs','EPSG','6082','EPSG','4086','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6083','WGS 84 / EPSG Arctic zone 4-34',NULL,'EPSG','4400','EPSG','4326','EPSG','6016',NULL,0); INSERT INTO "usage" VALUES('EPSG','4412','projected_crs','EPSG','6083','EPSG','4087','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6084','WGS 84 / EPSG Arctic zone 4-36',NULL,'EPSG','4400','EPSG','4326','EPSG','6017',NULL,0); INSERT INTO "usage" VALUES('EPSG','4413','projected_crs','EPSG','6084','EPSG','4088','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6085','WGS 84 / EPSG Arctic zone 4-38',NULL,'EPSG','4400','EPSG','4326','EPSG','6018',NULL,0); INSERT INTO "usage" VALUES('EPSG','4414','projected_crs','EPSG','6085','EPSG','4089','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6086','WGS 84 / EPSG Arctic zone 4-40',NULL,'EPSG','4400','EPSG','4326','EPSG','6019',NULL,0); INSERT INTO "usage" VALUES('EPSG','4415','projected_crs','EPSG','6086','EPSG','4090','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6087','WGS 84 / EPSG Arctic zone 5-15',NULL,'EPSG','4400','EPSG','4326','EPSG','6022',NULL,0); INSERT INTO "usage" VALUES('EPSG','4416','projected_crs','EPSG','6087','EPSG','4093','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6088','WGS 84 / EPSG Arctic zone 5-17',NULL,'EPSG','4400','EPSG','4326','EPSG','6023',NULL,0); INSERT INTO "usage" VALUES('EPSG','4417','projected_crs','EPSG','6088','EPSG','4094','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6089','WGS 84 / EPSG Arctic zone 5-19',NULL,'EPSG','4400','EPSG','4326','EPSG','6024',NULL,0); INSERT INTO "usage" VALUES('EPSG','4418','projected_crs','EPSG','6089','EPSG','4095','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6090','WGS 84 / EPSG Arctic zone 5-21',NULL,'EPSG','4400','EPSG','4326','EPSG','6025',NULL,0); INSERT INTO "usage" VALUES('EPSG','4419','projected_crs','EPSG','6090','EPSG','4096','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6091','WGS 84 / EPSG Arctic zone 5-23',NULL,'EPSG','4400','EPSG','4326','EPSG','6026',NULL,0); INSERT INTO "usage" VALUES('EPSG','4420','projected_crs','EPSG','6091','EPSG','4097','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6092','WGS 84 / EPSG Arctic zone 5-25',NULL,'EPSG','4400','EPSG','4326','EPSG','6027',NULL,0); INSERT INTO "usage" VALUES('EPSG','4421','projected_crs','EPSG','6092','EPSG','4098','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6093','WGS 84 / EPSG Arctic zone 5-27',NULL,'EPSG','4400','EPSG','4326','EPSG','6028',NULL,0); INSERT INTO "usage" VALUES('EPSG','4422','projected_crs','EPSG','6093','EPSG','4099','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6094','NAD83(NSRS2007) / EPSG Arctic zone 5-29',NULL,'EPSG','4400','EPSG','4759','EPSG','6029',NULL,0); INSERT INTO "usage" VALUES('EPSG','4423','projected_crs','EPSG','6094','EPSG','4100','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6095','NAD83(NSRS2007) / EPSG Arctic zone 5-31',NULL,'EPSG','4400','EPSG','4759','EPSG','6030',NULL,0); INSERT INTO "usage" VALUES('EPSG','4424','projected_crs','EPSG','6095','EPSG','4101','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6096','NAD83(NSRS2007) / EPSG Arctic zone 6-14',NULL,'EPSG','4400','EPSG','4759','EPSG','6039',NULL,0); INSERT INTO "usage" VALUES('EPSG','4425','projected_crs','EPSG','6096','EPSG','4110','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6097','NAD83(NSRS2007) / EPSG Arctic zone 6-16',NULL,'EPSG','4400','EPSG','4759','EPSG','6040',NULL,0); INSERT INTO "usage" VALUES('EPSG','4426','projected_crs','EPSG','6097','EPSG','4111','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6098','NAD83(CSRS) / EPSG Arctic zone 1-23',NULL,'EPSG','4400','EPSG','4617','EPSG','5978',NULL,0); INSERT INTO "usage" VALUES('EPSG','4427','projected_crs','EPSG','6098','EPSG','4047','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6099','NAD83(CSRS) / EPSG Arctic zone 2-14',NULL,'EPSG','4400','EPSG','4617','EPSG','5985',NULL,0); INSERT INTO "usage" VALUES('EPSG','4428','projected_crs','EPSG','6099','EPSG','4030','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6100','NAD83(CSRS) / EPSG Arctic zone 2-16',NULL,'EPSG','4400','EPSG','4617','EPSG','5986',NULL,0); INSERT INTO "usage" VALUES('EPSG','4429','projected_crs','EPSG','6100','EPSG','4036','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6101','NAD83(CSRS) / EPSG Arctic zone 3-25',NULL,'EPSG','4400','EPSG','4617','EPSG','6000',NULL,0); INSERT INTO "usage" VALUES('EPSG','4430','projected_crs','EPSG','6101','EPSG','4065','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6102','NAD83(CSRS) / EPSG Arctic zone 3-27',NULL,'EPSG','4400','EPSG','4617','EPSG','6001',NULL,0); INSERT INTO "usage" VALUES('EPSG','4431','projected_crs','EPSG','6102','EPSG','4070','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6103','NAD83(CSRS) / EPSG Arctic zone 3-29',NULL,'EPSG','4400','EPSG','4617','EPSG','6002',NULL,0); INSERT INTO "usage" VALUES('EPSG','4432','projected_crs','EPSG','6103','EPSG','4072','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6104','NAD83(CSRS) / EPSG Arctic zone 4-14',NULL,'EPSG','4400','EPSG','4617','EPSG','6006',NULL,0); INSERT INTO "usage" VALUES('EPSG','4433','projected_crs','EPSG','6104','EPSG','4077','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6105','NAD83(CSRS) / EPSG Arctic zone 4-16',NULL,'EPSG','4400','EPSG','4617','EPSG','6007',NULL,0); INSERT INTO "usage" VALUES('EPSG','4434','projected_crs','EPSG','6105','EPSG','4078','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6106','NAD83(CSRS) / EPSG Arctic zone 4-18',NULL,'EPSG','4400','EPSG','4617','EPSG','6008',NULL,0); INSERT INTO "usage" VALUES('EPSG','4435','projected_crs','EPSG','6106','EPSG','4079','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6107','NAD83(CSRS) / EPSG Arctic zone 5-33',NULL,'EPSG','4400','EPSG','4617','EPSG','6031',NULL,0); INSERT INTO "usage" VALUES('EPSG','4436','projected_crs','EPSG','6107','EPSG','4102','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6108','NAD83(CSRS) / EPSG Arctic zone 5-35',NULL,'EPSG','4400','EPSG','4617','EPSG','6032',NULL,0); INSERT INTO "usage" VALUES('EPSG','4437','projected_crs','EPSG','6108','EPSG','4103','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6109','NAD83(CSRS) / EPSG Arctic zone 5-37',NULL,'EPSG','4400','EPSG','4617','EPSG','6033',NULL,0); INSERT INTO "usage" VALUES('EPSG','4438','projected_crs','EPSG','6109','EPSG','4104','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6110','NAD83(CSRS) / EPSG Arctic zone 5-39',NULL,'EPSG','4400','EPSG','4617','EPSG','6034',NULL,0); INSERT INTO "usage" VALUES('EPSG','4439','projected_crs','EPSG','6110','EPSG','4105','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6111','NAD83(CSRS) / EPSG Arctic zone 6-18',NULL,'EPSG','4400','EPSG','4617','EPSG','6041',NULL,0); INSERT INTO "usage" VALUES('EPSG','4440','projected_crs','EPSG','6111','EPSG','4112','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6112','NAD83(CSRS) / EPSG Arctic zone 6-20',NULL,'EPSG','4400','EPSG','4617','EPSG','6042',NULL,0); INSERT INTO "usage" VALUES('EPSG','4441','projected_crs','EPSG','6112','EPSG','4113','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6113','NAD83(CSRS) / EPSG Arctic zone 6-22',NULL,'EPSG','4400','EPSG','4617','EPSG','6043',NULL,0); INSERT INTO "usage" VALUES('EPSG','4442','projected_crs','EPSG','6113','EPSG','4114','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6114','NAD83(CSRS) / EPSG Arctic zone 6-24',NULL,'EPSG','4400','EPSG','4617','EPSG','6044',NULL,0); INSERT INTO "usage" VALUES('EPSG','4443','projected_crs','EPSG','6114','EPSG','4115','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6115','WGS 84 / EPSG Arctic zone 1-27',NULL,'EPSG','4400','EPSG','4326','EPSG','5980',NULL,0); INSERT INTO "usage" VALUES('EPSG','4444','projected_crs','EPSG','6115','EPSG','4049','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6116','WGS 84 / EPSG Arctic zone 1-29',NULL,'EPSG','4400','EPSG','4326','EPSG','5981',NULL,0); INSERT INTO "usage" VALUES('EPSG','4445','projected_crs','EPSG','6116','EPSG','4050','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6117','WGS 84 / EPSG Arctic zone 1-31',NULL,'EPSG','4400','EPSG','4326','EPSG','5982',NULL,0); INSERT INTO "usage" VALUES('EPSG','4446','projected_crs','EPSG','6117','EPSG','4051','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6118','WGS 84 / EPSG Arctic zone 1-21',NULL,'EPSG','4400','EPSG','4326','EPSG','5977',NULL,0); INSERT INTO "usage" VALUES('EPSG','4447','projected_crs','EPSG','6118','EPSG','4044','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6119','WGS 84 / EPSG Arctic zone 2-28',NULL,'EPSG','4400','EPSG','4326','EPSG','5992',NULL,0); INSERT INTO "usage" VALUES('EPSG','4448','projected_crs','EPSG','6119','EPSG','4056','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6120','WGS 84 / EPSG Arctic zone 2-10',NULL,'EPSG','4400','EPSG','4326','EPSG','5983',NULL,0); INSERT INTO "usage" VALUES('EPSG','4449','projected_crs','EPSG','6120','EPSG','4057','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6121','WGS 84 / EPSG Arctic zone 2-12',NULL,'EPSG','4400','EPSG','4326','EPSG','5984',NULL,0); INSERT INTO "usage" VALUES('EPSG','4450','projected_crs','EPSG','6121','EPSG','4052','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6122','WGS 84 / EPSG Arctic zone 3-21',NULL,'EPSG','4400','EPSG','4326','EPSG','5998',NULL,0); INSERT INTO "usage" VALUES('EPSG','4451','projected_crs','EPSG','6122','EPSG','4063','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6123','WGS 84 / EPSG Arctic zone 3-23',NULL,'EPSG','4400','EPSG','4326','EPSG','5999',NULL,0); INSERT INTO "usage" VALUES('EPSG','4452','projected_crs','EPSG','6123','EPSG','4064','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6124','WGS 84 / EPSG Arctic zone 4-12',NULL,'EPSG','4400','EPSG','4326','EPSG','6005',NULL,0); INSERT INTO "usage" VALUES('EPSG','4453','projected_crs','EPSG','6124','EPSG','4076','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6125','ETRS89 / EPSG Arctic zone 5-47',NULL,'EPSG','4400','EPSG','4258','EPSG','6038',NULL,0); INSERT INTO "usage" VALUES('EPSG','4454','projected_crs','EPSG','6125','EPSG','4109','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6128','Grand Cayman National Grid 1959',NULL,'EPSG','1039','EPSG','4723','EPSG','6127',NULL,0); INSERT INTO "usage" VALUES('EPSG','4455','projected_crs','EPSG','6128','EPSG','3185','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','6129','Sister Islands National Grid 1961',NULL,'EPSG','1039','EPSG','4726','EPSG','6127',NULL,0); INSERT INTO "usage" VALUES('EPSG','4456','projected_crs','EPSG','6129','EPSG','3186','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','6141','Cayman Islands National Grid 2011',NULL,'EPSG','1039','EPSG','6135','EPSG','6126',NULL,1); INSERT INTO "usage" VALUES('EPSG','4463','projected_crs','EPSG','6141','EPSG','1063','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','6200','NAD27 / Michigan North',NULL,'EPSG','4497','EPSG','4267','EPSG','6197',NULL,1); INSERT INTO "usage" VALUES('EPSG','4508','projected_crs','EPSG','6200','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6201','NAD27 / Michigan Central',NULL,'EPSG','4497','EPSG','4267','EPSG','6198',NULL,0); INSERT INTO "usage" VALUES('EPSG','4509','projected_crs','EPSG','6201','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6202','NAD27 / Michigan South',NULL,'EPSG','4497','EPSG','4267','EPSG','6199',NULL,0); INSERT INTO "usage" VALUES('EPSG','4510','projected_crs','EPSG','6202','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6204','Macedonia State Coordinate System',NULL,'EPSG','4498','EPSG','3906','EPSG','6203',NULL,0); INSERT INTO "usage" VALUES('EPSG','4511','projected_crs','EPSG','6204','EPSG','1148','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6210','SIRGAS 2000 / UTM zone 23N',NULL,'EPSG','4400','EPSG','4674','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','4513','projected_crs','EPSG','6210','EPSG','4129','EPSG','1216'); INSERT INTO "projected_crs" VALUES('EPSG','6211','SIRGAS 2000 / UTM zone 24N',NULL,'EPSG','4400','EPSG','4674','EPSG','16024',NULL,0); INSERT INTO "usage" VALUES('EPSG','4514','projected_crs','EPSG','6211','EPSG','4133','EPSG','1216'); INSERT INTO "projected_crs" VALUES('EPSG','6244','MAGNA-SIRGAS / Arauca urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6212',NULL,0); INSERT INTO "usage" VALUES('EPSG','4515','projected_crs','EPSG','6244','EPSG','4122','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6245','MAGNA-SIRGAS / Armenia urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6213',NULL,0); INSERT INTO "usage" VALUES('EPSG','4516','projected_crs','EPSG','6245','EPSG','4132','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6246','MAGNA-SIRGAS / Barranquilla urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6214',NULL,0); INSERT INTO "usage" VALUES('EPSG','4517','projected_crs','EPSG','6246','EPSG','4134','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6247','MAGNA-SIRGAS / Bogota urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6215',NULL,0); INSERT INTO "usage" VALUES('EPSG','4518','projected_crs','EPSG','6247','EPSG','4135','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6248','MAGNA-SIRGAS / Bucaramanga urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6216',NULL,0); INSERT INTO "usage" VALUES('EPSG','4519','projected_crs','EPSG','6248','EPSG','4136','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6249','MAGNA-SIRGAS / Cali urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6217',NULL,0); INSERT INTO "usage" VALUES('EPSG','4520','projected_crs','EPSG','6249','EPSG','4137','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6250','MAGNA-SIRGAS / Cartagena urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6218',NULL,0); INSERT INTO "usage" VALUES('EPSG','4521','projected_crs','EPSG','6250','EPSG','4138','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6251','MAGNA-SIRGAS / Cucuta urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6219',NULL,0); INSERT INTO "usage" VALUES('EPSG','4522','projected_crs','EPSG','6251','EPSG','4139','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6252','MAGNA-SIRGAS / Florencia urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6220',NULL,0); INSERT INTO "usage" VALUES('EPSG','4523','projected_crs','EPSG','6252','EPSG','4140','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6253','MAGNA-SIRGAS / Ibague urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6221',NULL,0); INSERT INTO "usage" VALUES('EPSG','4524','projected_crs','EPSG','6253','EPSG','4141','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6254','MAGNA-SIRGAS / Inirida urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6222',NULL,0); INSERT INTO "usage" VALUES('EPSG','4525','projected_crs','EPSG','6254','EPSG','4142','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6255','MAGNA-SIRGAS / Leticia urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6223',NULL,0); INSERT INTO "usage" VALUES('EPSG','4526','projected_crs','EPSG','6255','EPSG','4143','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6256','MAGNA-SIRGAS / Manizales urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6224',NULL,0); INSERT INTO "usage" VALUES('EPSG','4527','projected_crs','EPSG','6256','EPSG','4144','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6257','MAGNA-SIRGAS / Medellin urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6225',NULL,0); INSERT INTO "usage" VALUES('EPSG','4528','projected_crs','EPSG','6257','EPSG','4145','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6258','MAGNA-SIRGAS / Mitu urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6226',NULL,0); INSERT INTO "usage" VALUES('EPSG','4529','projected_crs','EPSG','6258','EPSG','4146','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6259','MAGNA-SIRGAS / Mocoa urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6227',NULL,0); INSERT INTO "usage" VALUES('EPSG','4530','projected_crs','EPSG','6259','EPSG','4147','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6260','MAGNA-SIRGAS / Monteria urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6228',NULL,0); INSERT INTO "usage" VALUES('EPSG','4531','projected_crs','EPSG','6260','EPSG','4148','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6261','MAGNA-SIRGAS / Neiva urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6229',NULL,0); INSERT INTO "usage" VALUES('EPSG','4532','projected_crs','EPSG','6261','EPSG','4149','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6262','MAGNA-SIRGAS / Pasto urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6230',NULL,0); INSERT INTO "usage" VALUES('EPSG','4533','projected_crs','EPSG','6262','EPSG','4150','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6263','MAGNA-SIRGAS / Pereira urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6231',NULL,0); INSERT INTO "usage" VALUES('EPSG','4534','projected_crs','EPSG','6263','EPSG','4151','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6264','MAGNA-SIRGAS / Popayan urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6232',NULL,0); INSERT INTO "usage" VALUES('EPSG','4535','projected_crs','EPSG','6264','EPSG','4152','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6265','MAGNA-SIRGAS / Puerto Carreno urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6233',NULL,0); INSERT INTO "usage" VALUES('EPSG','4536','projected_crs','EPSG','6265','EPSG','4153','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6266','MAGNA-SIRGAS / Quibdo urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6234',NULL,0); INSERT INTO "usage" VALUES('EPSG','4537','projected_crs','EPSG','6266','EPSG','4154','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6267','MAGNA-SIRGAS / Riohacha urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6235',NULL,0); INSERT INTO "usage" VALUES('EPSG','4538','projected_crs','EPSG','6267','EPSG','4155','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6268','MAGNA-SIRGAS / San Andres urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6236',NULL,0); INSERT INTO "usage" VALUES('EPSG','4539','projected_crs','EPSG','6268','EPSG','4156','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6269','MAGNA-SIRGAS / San Jose del Guaviare urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6237',NULL,0); INSERT INTO "usage" VALUES('EPSG','4540','projected_crs','EPSG','6269','EPSG','4157','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6270','MAGNA-SIRGAS / Santa Marta urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6238',NULL,0); INSERT INTO "usage" VALUES('EPSG','4541','projected_crs','EPSG','6270','EPSG','4128','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6271','MAGNA-SIRGAS / Sucre urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6239',NULL,0); INSERT INTO "usage" VALUES('EPSG','4542','projected_crs','EPSG','6271','EPSG','4130','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6272','MAGNA-SIRGAS / Tunja urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6240',NULL,0); INSERT INTO "usage" VALUES('EPSG','4543','projected_crs','EPSG','6272','EPSG','4131','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6273','MAGNA-SIRGAS / Valledupar urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6241',NULL,0); INSERT INTO "usage" VALUES('EPSG','4544','projected_crs','EPSG','6273','EPSG','4158','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6274','MAGNA-SIRGAS / Villavicencio urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6242',NULL,0); INSERT INTO "usage" VALUES('EPSG','4545','projected_crs','EPSG','6274','EPSG','4159','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6275','MAGNA-SIRGAS / Yopal urban grid',NULL,'EPSG','4500','EPSG','4686','EPSG','6243',NULL,0); INSERT INTO "usage" VALUES('EPSG','4546','projected_crs','EPSG','6275','EPSG','4160','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6307','NAD83(CORS96) / Puerto Rico and Virgin Is.',NULL,'EPSG','4499','EPSG','6783','EPSG','15230',NULL,0); INSERT INTO "usage" VALUES('EPSG','4547','projected_crs','EPSG','6307','EPSG','3634','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6312','CGRS93 / Cyprus Local Transverse Mercator',NULL,'EPSG','4400','EPSG','6311','EPSG','6308',NULL,0); INSERT INTO "usage" VALUES('EPSG','4551','projected_crs','EPSG','6312','EPSG','3236','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6316','MGI 1901 / Balkans zone 7',NULL,'EPSG','4498','EPSG','3906','EPSG','18277',NULL,0); INSERT INTO "usage" VALUES('EPSG','4552','projected_crs','EPSG','6316','EPSG','1711','EPSG','1092'); INSERT INTO "usage" VALUES('EPSG','17354','projected_crs','EPSG','6316','EPSG','1148','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','6328','NAD83(2011) / UTM zone 59N',NULL,'EPSG','4400','EPSG','6318','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('EPSG','4562','projected_crs','EPSG','6328','EPSG','3372','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6329','NAD83(2011) / UTM zone 60N',NULL,'EPSG','4400','EPSG','6318','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('EPSG','4563','projected_crs','EPSG','6329','EPSG','3373','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6330','NAD83(2011) / UTM zone 1N',NULL,'EPSG','4400','EPSG','6318','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('EPSG','4564','projected_crs','EPSG','6330','EPSG','3374','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6331','NAD83(2011) / UTM zone 2N',NULL,'EPSG','4400','EPSG','6318','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('EPSG','4565','projected_crs','EPSG','6331','EPSG','3375','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6332','NAD83(2011) / UTM zone 3N',NULL,'EPSG','4400','EPSG','6318','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('EPSG','4566','projected_crs','EPSG','6332','EPSG','2133','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6333','NAD83(2011) / UTM zone 4N',NULL,'EPSG','4400','EPSG','6318','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','4567','projected_crs','EPSG','6333','EPSG','2134','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6334','NAD83(2011) / UTM zone 5N',NULL,'EPSG','4400','EPSG','6318','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','4568','projected_crs','EPSG','6334','EPSG','2135','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6335','NAD83(2011) / UTM zone 6N',NULL,'EPSG','4400','EPSG','6318','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('EPSG','4569','projected_crs','EPSG','6335','EPSG','2136','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6336','NAD83(2011) / UTM zone 7N',NULL,'EPSG','4400','EPSG','6318','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','4570','projected_crs','EPSG','6336','EPSG','3494','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6337','NAD83(2011) / UTM zone 8N',NULL,'EPSG','4400','EPSG','6318','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','4571','projected_crs','EPSG','6337','EPSG','3495','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6338','NAD83(2011) / UTM zone 9N',NULL,'EPSG','4400','EPSG','6318','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','4572','projected_crs','EPSG','6338','EPSG','3496','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6339','NAD83(2011) / UTM zone 10N',NULL,'EPSG','4400','EPSG','6318','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','4573','projected_crs','EPSG','6339','EPSG','3497','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6340','NAD83(2011) / UTM zone 11N',NULL,'EPSG','4400','EPSG','6318','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','4574','projected_crs','EPSG','6340','EPSG','3498','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6341','NAD83(2011) / UTM zone 12N',NULL,'EPSG','4400','EPSG','6318','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','4575','projected_crs','EPSG','6341','EPSG','3499','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6342','NAD83(2011) / UTM zone 13N',NULL,'EPSG','4400','EPSG','6318','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','4576','projected_crs','EPSG','6342','EPSG','3500','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6343','NAD83(2011) / UTM zone 14N',NULL,'EPSG','4400','EPSG','6318','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','4577','projected_crs','EPSG','6343','EPSG','3501','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6344','NAD83(2011) / UTM zone 15N',NULL,'EPSG','4400','EPSG','6318','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','4578','projected_crs','EPSG','6344','EPSG','3502','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6345','NAD83(2011) / UTM zone 16N',NULL,'EPSG','4400','EPSG','6318','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','4579','projected_crs','EPSG','6345','EPSG','3503','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6346','NAD83(2011) / UTM zone 17N',NULL,'EPSG','4400','EPSG','6318','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','4580','projected_crs','EPSG','6346','EPSG','3504','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6347','NAD83(2011) / UTM zone 18N',NULL,'EPSG','4400','EPSG','6318','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','4581','projected_crs','EPSG','6347','EPSG','3505','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6348','NAD83(2011) / UTM zone 19N',NULL,'EPSG','4400','EPSG','6318','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','4582','projected_crs','EPSG','6348','EPSG','3506','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6350','NAD83(2011) / Conus Albers',NULL,'EPSG','4499','EPSG','6318','EPSG','5068',NULL,0); INSERT INTO "usage" VALUES('EPSG','4584','projected_crs','EPSG','6350','EPSG','1323','EPSG','1109'); INSERT INTO "projected_crs" VALUES('EPSG','6351','NAD83(2011) / EPSG Arctic zone 5-29',NULL,'EPSG','4400','EPSG','6318','EPSG','6029',NULL,0); INSERT INTO "usage" VALUES('EPSG','4585','projected_crs','EPSG','6351','EPSG','4100','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6352','NAD83(2011) / EPSG Arctic zone 5-31',NULL,'EPSG','4400','EPSG','6318','EPSG','6030',NULL,0); INSERT INTO "usage" VALUES('EPSG','4586','projected_crs','EPSG','6352','EPSG','4101','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6353','NAD83(2011) / EPSG Arctic zone 6-14',NULL,'EPSG','4400','EPSG','6318','EPSG','6039',NULL,0); INSERT INTO "usage" VALUES('EPSG','4587','projected_crs','EPSG','6353','EPSG','4110','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6354','NAD83(2011) / EPSG Arctic zone 6-16',NULL,'EPSG','4400','EPSG','6318','EPSG','6040',NULL,0); INSERT INTO "usage" VALUES('EPSG','4588','projected_crs','EPSG','6354','EPSG','4111','EPSG','1148'); INSERT INTO "projected_crs" VALUES('EPSG','6355','NAD83(2011) / Alabama East',NULL,'EPSG','4499','EPSG','6318','EPSG','10131',NULL,0); INSERT INTO "usage" VALUES('EPSG','4589','projected_crs','EPSG','6355','EPSG','2154','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6356','NAD83(2011) / Alabama West',NULL,'EPSG','4499','EPSG','6318','EPSG','10132',NULL,0); INSERT INTO "usage" VALUES('EPSG','4590','projected_crs','EPSG','6356','EPSG','2155','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6362','Mexico ITRF92 / LCC',NULL,'EPSG','4500','EPSG','4483','EPSG','6361',NULL,0); INSERT INTO "usage" VALUES('EPSG','4595','projected_crs','EPSG','6362','EPSG','1160','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6366','Mexico ITRF2008 / UTM zone 11N',NULL,'EPSG','4400','EPSG','6365','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','4599','projected_crs','EPSG','6366','EPSG','3423','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6367','Mexico ITRF2008 / UTM zone 12N',NULL,'EPSG','4400','EPSG','6365','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','4600','projected_crs','EPSG','6367','EPSG','3424','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6368','Mexico ITRF2008 / UTM zone 13N',NULL,'EPSG','4400','EPSG','6365','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','4601','projected_crs','EPSG','6368','EPSG','3425','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6369','Mexico ITRF2008 / UTM zone 14N',NULL,'EPSG','4400','EPSG','6365','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','4602','projected_crs','EPSG','6369','EPSG','3426','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6370','Mexico ITRF2008 / UTM zone 15N',NULL,'EPSG','4400','EPSG','6365','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','4603','projected_crs','EPSG','6370','EPSG','3633','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6371','Mexico ITRF2008 / UTM zone 16N',NULL,'EPSG','4400','EPSG','6365','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','4604','projected_crs','EPSG','6371','EPSG','3635','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6372','Mexico ITRF2008 / LCC',NULL,'EPSG','4500','EPSG','6365','EPSG','6361',NULL,0); INSERT INTO "usage" VALUES('EPSG','4605','projected_crs','EPSG','6372','EPSG','1160','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6381','UCS-2000 / Ukraine TM zone 7',NULL,'EPSG','4530','EPSG','5561','EPSG','6374',NULL,0); INSERT INTO "usage" VALUES('EPSG','4606','projected_crs','EPSG','6381','EPSG','3906','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6382','UCS-2000 / Ukraine TM zone 8',NULL,'EPSG','4530','EPSG','5561','EPSG','6375',NULL,0); INSERT INTO "usage" VALUES('EPSG','4607','projected_crs','EPSG','6382','EPSG','3907','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6383','UCS-2000 / Ukraine TM zone 9',NULL,'EPSG','4530','EPSG','5561','EPSG','6376',NULL,0); INSERT INTO "usage" VALUES('EPSG','4608','projected_crs','EPSG','6383','EPSG','3908','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6384','UCS-2000 / Ukraine TM zone 10',NULL,'EPSG','4530','EPSG','5561','EPSG','6377',NULL,0); INSERT INTO "usage" VALUES('EPSG','4609','projected_crs','EPSG','6384','EPSG','3909','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6385','UCS-2000 / Ukraine TM zone 11',NULL,'EPSG','4530','EPSG','5561','EPSG','6378',NULL,0); INSERT INTO "usage" VALUES('EPSG','4610','projected_crs','EPSG','6385','EPSG','3910','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6386','UCS-2000 / Ukraine TM zone 12',NULL,'EPSG','4530','EPSG','5561','EPSG','6379',NULL,0); INSERT INTO "usage" VALUES('EPSG','4611','projected_crs','EPSG','6386','EPSG','3912','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6387','UCS-2000 / Ukraine TM zone 13',NULL,'EPSG','4530','EPSG','5561','EPSG','6380',NULL,0); INSERT INTO "usage" VALUES('EPSG','4612','projected_crs','EPSG','6387','EPSG','3913','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','6391','Cayman Islands National Grid 2011',NULL,'EPSG','1039','EPSG','6135','EPSG','6390',NULL,0); INSERT INTO "usage" VALUES('EPSG','4613','projected_crs','EPSG','6391','EPSG','1063','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','6393','NAD83(2011) / Alaska Albers',NULL,'EPSG','4499','EPSG','6318','EPSG','15021',NULL,0); INSERT INTO "usage" VALUES('EPSG','4614','projected_crs','EPSG','6393','EPSG','1330','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6394','NAD83(2011) / Alaska zone 1',NULL,'EPSG','4499','EPSG','6318','EPSG','15031',NULL,0); INSERT INTO "usage" VALUES('EPSG','4615','projected_crs','EPSG','6394','EPSG','2156','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6395','NAD83(2011) / Alaska zone 2',NULL,'EPSG','4499','EPSG','6318','EPSG','15032',NULL,0); INSERT INTO "usage" VALUES('EPSG','4616','projected_crs','EPSG','6395','EPSG','2158','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6396','NAD83(2011) / Alaska zone 3',NULL,'EPSG','4499','EPSG','6318','EPSG','15033',NULL,0); INSERT INTO "usage" VALUES('EPSG','4617','projected_crs','EPSG','6396','EPSG','2159','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6397','NAD83(2011) / Alaska zone 4',NULL,'EPSG','4499','EPSG','6318','EPSG','15034',NULL,0); INSERT INTO "usage" VALUES('EPSG','4618','projected_crs','EPSG','6397','EPSG','2160','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6398','NAD83(2011) / Alaska zone 5',NULL,'EPSG','4499','EPSG','6318','EPSG','15035',NULL,0); INSERT INTO "usage" VALUES('EPSG','4619','projected_crs','EPSG','6398','EPSG','2161','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6399','NAD83(2011) / Alaska zone 6',NULL,'EPSG','4499','EPSG','6318','EPSG','15036',NULL,0); INSERT INTO "usage" VALUES('EPSG','4620','projected_crs','EPSG','6399','EPSG','2162','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6400','NAD83(2011) / Alaska zone 7',NULL,'EPSG','4499','EPSG','6318','EPSG','15037',NULL,0); INSERT INTO "usage" VALUES('EPSG','4621','projected_crs','EPSG','6400','EPSG','2163','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6401','NAD83(2011) / Alaska zone 8',NULL,'EPSG','4499','EPSG','6318','EPSG','15038',NULL,0); INSERT INTO "usage" VALUES('EPSG','4622','projected_crs','EPSG','6401','EPSG','2164','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6402','NAD83(2011) / Alaska zone 9',NULL,'EPSG','4499','EPSG','6318','EPSG','15039',NULL,0); INSERT INTO "usage" VALUES('EPSG','4623','projected_crs','EPSG','6402','EPSG','2165','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6403','NAD83(2011) / Alaska zone 10',NULL,'EPSG','4499','EPSG','6318','EPSG','15040',NULL,0); INSERT INTO "usage" VALUES('EPSG','4624','projected_crs','EPSG','6403','EPSG','2157','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6404','NAD83(2011) / Arizona Central',NULL,'EPSG','4499','EPSG','6318','EPSG','10232',NULL,0); INSERT INTO "usage" VALUES('EPSG','4625','projected_crs','EPSG','6404','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6405','NAD83(2011) / Arizona Central (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15305',NULL,0); INSERT INTO "usage" VALUES('EPSG','4626','projected_crs','EPSG','6405','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6406','NAD83(2011) / Arizona East',NULL,'EPSG','4499','EPSG','6318','EPSG','10231',NULL,0); INSERT INTO "usage" VALUES('EPSG','4627','projected_crs','EPSG','6406','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6407','NAD83(2011) / Arizona East (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15304',NULL,0); INSERT INTO "usage" VALUES('EPSG','4628','projected_crs','EPSG','6407','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6408','NAD83(2011) / Arizona West',NULL,'EPSG','4499','EPSG','6318','EPSG','10233',NULL,0); INSERT INTO "usage" VALUES('EPSG','4629','projected_crs','EPSG','6408','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6409','NAD83(2011) / Arizona West (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15306',NULL,0); INSERT INTO "usage" VALUES('EPSG','4630','projected_crs','EPSG','6409','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6410','NAD83(2011) / Arkansas North',NULL,'EPSG','4499','EPSG','6318','EPSG','10331',NULL,0); INSERT INTO "usage" VALUES('EPSG','4631','projected_crs','EPSG','6410','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6411','NAD83(2011) / Arkansas North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15385',NULL,0); INSERT INTO "usage" VALUES('EPSG','4632','projected_crs','EPSG','6411','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6412','NAD83(2011) / Arkansas South',NULL,'EPSG','4499','EPSG','6318','EPSG','10332',NULL,0); INSERT INTO "usage" VALUES('EPSG','4633','projected_crs','EPSG','6412','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6413','NAD83(2011) / Arkansas South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15386',NULL,0); INSERT INTO "usage" VALUES('EPSG','4634','projected_crs','EPSG','6413','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6414','NAD83(2011) / California Albers',NULL,'EPSG','4499','EPSG','6318','EPSG','10420',NULL,0); INSERT INTO "usage" VALUES('EPSG','4635','projected_crs','EPSG','6414','EPSG','1375','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6415','NAD83(2011) / California zone 1',NULL,'EPSG','4499','EPSG','6318','EPSG','10431',NULL,0); INSERT INTO "usage" VALUES('EPSG','4636','projected_crs','EPSG','6415','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6416','NAD83(2011) / California zone 1 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15307',NULL,0); INSERT INTO "usage" VALUES('EPSG','4637','projected_crs','EPSG','6416','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6417','NAD83(2011) / California zone 2',NULL,'EPSG','4499','EPSG','6318','EPSG','10432',NULL,0); INSERT INTO "usage" VALUES('EPSG','4638','projected_crs','EPSG','6417','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6418','NAD83(2011) / California zone 2 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15308',NULL,0); INSERT INTO "usage" VALUES('EPSG','4639','projected_crs','EPSG','6418','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6419','NAD83(2011) / California zone 3',NULL,'EPSG','4499','EPSG','6318','EPSG','10433',NULL,0); INSERT INTO "usage" VALUES('EPSG','4640','projected_crs','EPSG','6419','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6420','NAD83(2011) / California zone 3 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15309',NULL,0); INSERT INTO "usage" VALUES('EPSG','4641','projected_crs','EPSG','6420','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6421','NAD83(2011) / California zone 4',NULL,'EPSG','4499','EPSG','6318','EPSG','10434',NULL,0); INSERT INTO "usage" VALUES('EPSG','4642','projected_crs','EPSG','6421','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6422','NAD83(2011) / California zone 4 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15310',NULL,0); INSERT INTO "usage" VALUES('EPSG','4643','projected_crs','EPSG','6422','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6423','NAD83(2011) / California zone 5',NULL,'EPSG','4499','EPSG','6318','EPSG','10435',NULL,0); INSERT INTO "usage" VALUES('EPSG','4644','projected_crs','EPSG','6423','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6424','NAD83(2011) / California zone 5 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15311',NULL,0); INSERT INTO "usage" VALUES('EPSG','4645','projected_crs','EPSG','6424','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6425','NAD83(2011) / California zone 6',NULL,'EPSG','4499','EPSG','6318','EPSG','10436',NULL,0); INSERT INTO "usage" VALUES('EPSG','4646','projected_crs','EPSG','6425','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6426','NAD83(2011) / California zone 6 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15312',NULL,0); INSERT INTO "usage" VALUES('EPSG','4647','projected_crs','EPSG','6426','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6427','NAD83(2011) / Colorado Central',NULL,'EPSG','4499','EPSG','6318','EPSG','10532',NULL,0); INSERT INTO "usage" VALUES('EPSG','4648','projected_crs','EPSG','6427','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6428','NAD83(2011) / Colorado Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15314',NULL,0); INSERT INTO "usage" VALUES('EPSG','4649','projected_crs','EPSG','6428','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6429','NAD83(2011) / Colorado North',NULL,'EPSG','4499','EPSG','6318','EPSG','10531',NULL,0); INSERT INTO "usage" VALUES('EPSG','4650','projected_crs','EPSG','6429','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6430','NAD83(2011) / Colorado North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15313',NULL,0); INSERT INTO "usage" VALUES('EPSG','4651','projected_crs','EPSG','6430','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6431','NAD83(2011) / Colorado South',NULL,'EPSG','4499','EPSG','6318','EPSG','10533',NULL,0); INSERT INTO "usage" VALUES('EPSG','4652','projected_crs','EPSG','6431','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6432','NAD83(2011) / Colorado South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15315',NULL,0); INSERT INTO "usage" VALUES('EPSG','4653','projected_crs','EPSG','6432','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6433','NAD83(2011) / Connecticut',NULL,'EPSG','4499','EPSG','6318','EPSG','10630',NULL,0); INSERT INTO "usage" VALUES('EPSG','4654','projected_crs','EPSG','6433','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6434','NAD83(2011) / Connecticut (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15316',NULL,0); INSERT INTO "usage" VALUES('EPSG','4655','projected_crs','EPSG','6434','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6435','NAD83(2011) / Delaware',NULL,'EPSG','4499','EPSG','6318','EPSG','10730',NULL,0); INSERT INTO "usage" VALUES('EPSG','4656','projected_crs','EPSG','6435','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6436','NAD83(2011) / Delaware (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15317',NULL,0); INSERT INTO "usage" VALUES('EPSG','4657','projected_crs','EPSG','6436','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6437','NAD83(2011) / Florida East',NULL,'EPSG','4499','EPSG','6318','EPSG','10931',NULL,0); INSERT INTO "usage" VALUES('EPSG','4658','projected_crs','EPSG','6437','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6438','NAD83(2011) / Florida East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15318',NULL,0); INSERT INTO "usage" VALUES('EPSG','4659','projected_crs','EPSG','6438','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6439','NAD83(2011) / Florida GDL Albers',NULL,'EPSG','4499','EPSG','6318','EPSG','10934',NULL,0); INSERT INTO "usage" VALUES('EPSG','4660','projected_crs','EPSG','6439','EPSG','1379','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6440','NAD83(2011) / Florida North',NULL,'EPSG','4499','EPSG','6318','EPSG','10933',NULL,0); INSERT INTO "usage" VALUES('EPSG','4661','projected_crs','EPSG','6440','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6441','NAD83(2011) / Florida North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15320',NULL,0); INSERT INTO "usage" VALUES('EPSG','4662','projected_crs','EPSG','6441','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6442','NAD83(2011) / Florida West',NULL,'EPSG','4499','EPSG','6318','EPSG','10932',NULL,0); INSERT INTO "usage" VALUES('EPSG','4663','projected_crs','EPSG','6442','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6443','NAD83(2011) / Florida West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15319',NULL,0); INSERT INTO "usage" VALUES('EPSG','4664','projected_crs','EPSG','6443','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6444','NAD83(2011) / Georgia East',NULL,'EPSG','4499','EPSG','6318','EPSG','11031',NULL,0); INSERT INTO "usage" VALUES('EPSG','4665','projected_crs','EPSG','6444','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6445','NAD83(2011) / Georgia East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15321',NULL,0); INSERT INTO "usage" VALUES('EPSG','4666','projected_crs','EPSG','6445','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6446','NAD83(2011) / Georgia West',NULL,'EPSG','4499','EPSG','6318','EPSG','11032',NULL,0); INSERT INTO "usage" VALUES('EPSG','4667','projected_crs','EPSG','6446','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6447','NAD83(2011) / Georgia West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15322',NULL,0); INSERT INTO "usage" VALUES('EPSG','4668','projected_crs','EPSG','6447','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6448','NAD83(2011) / Idaho Central',NULL,'EPSG','4499','EPSG','6318','EPSG','11132',NULL,0); INSERT INTO "usage" VALUES('EPSG','4669','projected_crs','EPSG','6448','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6449','NAD83(2011) / Idaho Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15324',NULL,0); INSERT INTO "usage" VALUES('EPSG','4670','projected_crs','EPSG','6449','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6450','NAD83(2011) / Idaho East',NULL,'EPSG','4499','EPSG','6318','EPSG','11131',NULL,0); INSERT INTO "usage" VALUES('EPSG','4671','projected_crs','EPSG','6450','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6451','NAD83(2011) / Idaho East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15323',NULL,0); INSERT INTO "usage" VALUES('EPSG','4672','projected_crs','EPSG','6451','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6452','NAD83(2011) / Idaho West',NULL,'EPSG','4499','EPSG','6318','EPSG','11133',NULL,0); INSERT INTO "usage" VALUES('EPSG','4673','projected_crs','EPSG','6452','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6453','NAD83(2011) / Idaho West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15325',NULL,0); INSERT INTO "usage" VALUES('EPSG','4674','projected_crs','EPSG','6453','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6454','NAD83(2011) / Illinois East',NULL,'EPSG','4499','EPSG','6318','EPSG','11231',NULL,0); INSERT INTO "usage" VALUES('EPSG','4675','projected_crs','EPSG','6454','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6455','NAD83(2011) / Illinois East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15387',NULL,0); INSERT INTO "usage" VALUES('EPSG','4676','projected_crs','EPSG','6455','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6456','NAD83(2011) / Illinois West',NULL,'EPSG','4499','EPSG','6318','EPSG','11232',NULL,0); INSERT INTO "usage" VALUES('EPSG','4677','projected_crs','EPSG','6456','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6457','NAD83(2011) / Illinois West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15388',NULL,0); INSERT INTO "usage" VALUES('EPSG','4678','projected_crs','EPSG','6457','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6458','NAD83(2011) / Indiana East',NULL,'EPSG','4499','EPSG','6318','EPSG','11331',NULL,0); INSERT INTO "usage" VALUES('EPSG','4679','projected_crs','EPSG','6458','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6459','NAD83(2011) / Indiana East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15372',NULL,0); INSERT INTO "usage" VALUES('EPSG','4680','projected_crs','EPSG','6459','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6460','NAD83(2011) / Indiana West',NULL,'EPSG','4499','EPSG','6318','EPSG','11332',NULL,0); INSERT INTO "usage" VALUES('EPSG','4681','projected_crs','EPSG','6460','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6461','NAD83(2011) / Indiana West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15373',NULL,0); INSERT INTO "usage" VALUES('EPSG','4682','projected_crs','EPSG','6461','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6462','NAD83(2011) / Iowa North',NULL,'EPSG','4499','EPSG','6318','EPSG','11431',NULL,0); INSERT INTO "usage" VALUES('EPSG','4683','projected_crs','EPSG','6462','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6463','NAD83(2011) / Iowa North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15377',NULL,0); INSERT INTO "usage" VALUES('EPSG','4684','projected_crs','EPSG','6463','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6464','NAD83(2011) / Iowa South',NULL,'EPSG','4499','EPSG','6318','EPSG','11432',NULL,0); INSERT INTO "usage" VALUES('EPSG','4685','projected_crs','EPSG','6464','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6465','NAD83(2011) / Iowa South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15378',NULL,0); INSERT INTO "usage" VALUES('EPSG','4686','projected_crs','EPSG','6465','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6466','NAD83(2011) / Kansas North',NULL,'EPSG','4499','EPSG','6318','EPSG','11531',NULL,0); INSERT INTO "usage" VALUES('EPSG','4687','projected_crs','EPSG','6466','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6467','NAD83(2011) / Kansas North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15379',NULL,0); INSERT INTO "usage" VALUES('EPSG','4688','projected_crs','EPSG','6467','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6468','NAD83(2011) / Kansas South',NULL,'EPSG','4499','EPSG','6318','EPSG','11532',NULL,0); INSERT INTO "usage" VALUES('EPSG','4689','projected_crs','EPSG','6468','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6469','NAD83(2011) / Kansas South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15380',NULL,0); INSERT INTO "usage" VALUES('EPSG','4690','projected_crs','EPSG','6469','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6470','NAD83(2011) / Kentucky North',NULL,'EPSG','4499','EPSG','6318','EPSG','15303',NULL,0); INSERT INTO "usage" VALUES('EPSG','4691','projected_crs','EPSG','6470','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6471','NAD83(2011) / Kentucky North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15328',NULL,0); INSERT INTO "usage" VALUES('EPSG','4692','projected_crs','EPSG','6471','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6472','NAD83(2011) / Kentucky Single Zone',NULL,'EPSG','4499','EPSG','6318','EPSG','11630',NULL,0); INSERT INTO "usage" VALUES('EPSG','4693','projected_crs','EPSG','6472','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6473','NAD83(2011) / Kentucky Single Zone (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15375',NULL,0); INSERT INTO "usage" VALUES('EPSG','4694','projected_crs','EPSG','6473','EPSG','1386','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6474','NAD83(2011) / Kentucky South',NULL,'EPSG','4499','EPSG','6318','EPSG','11632',NULL,0); INSERT INTO "usage" VALUES('EPSG','4695','projected_crs','EPSG','6474','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6475','NAD83(2011) / Kentucky South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15329',NULL,0); INSERT INTO "usage" VALUES('EPSG','4696','projected_crs','EPSG','6475','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6476','NAD83(2011) / Louisiana North',NULL,'EPSG','4499','EPSG','6318','EPSG','11731',NULL,0); INSERT INTO "usage" VALUES('EPSG','4697','projected_crs','EPSG','6476','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6477','NAD83(2011) / Louisiana North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15391',NULL,0); INSERT INTO "usage" VALUES('EPSG','4698','projected_crs','EPSG','6477','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6478','NAD83(2011) / Louisiana South',NULL,'EPSG','4499','EPSG','6318','EPSG','11732',NULL,0); INSERT INTO "usage" VALUES('EPSG','4699','projected_crs','EPSG','6478','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6479','NAD83(2011) / Louisiana South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15392',NULL,0); INSERT INTO "usage" VALUES('EPSG','4700','projected_crs','EPSG','6479','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6480','NAD83(2011) / Maine CS2000 Central',NULL,'EPSG','4499','EPSG','6318','EPSG','11854',NULL,0); INSERT INTO "usage" VALUES('EPSG','4701','projected_crs','EPSG','6480','EPSG','2959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6481','NAD83(2011) / Maine CS2000 East',NULL,'EPSG','4499','EPSG','6318','EPSG','11851',NULL,0); INSERT INTO "usage" VALUES('EPSG','4702','projected_crs','EPSG','6481','EPSG','2960','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6482','NAD83(2011) / Maine CS2000 West',NULL,'EPSG','4499','EPSG','6318','EPSG','11853',NULL,0); INSERT INTO "usage" VALUES('EPSG','4703','projected_crs','EPSG','6482','EPSG','2958','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6483','NAD83(2011) / Maine East',NULL,'EPSG','4499','EPSG','6318','EPSG','11831',NULL,0); INSERT INTO "usage" VALUES('EPSG','4704','projected_crs','EPSG','6483','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6484','NAD83(2011) / Maine East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','11833',NULL,0); INSERT INTO "usage" VALUES('EPSG','4705','projected_crs','EPSG','6484','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6485','NAD83(2011) / Maine West',NULL,'EPSG','4499','EPSG','6318','EPSG','11832',NULL,0); INSERT INTO "usage" VALUES('EPSG','4706','projected_crs','EPSG','6485','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6486','NAD83(2011) / Maine West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','11834',NULL,0); INSERT INTO "usage" VALUES('EPSG','4707','projected_crs','EPSG','6486','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6487','NAD83(2011) / Maryland',NULL,'EPSG','4499','EPSG','6318','EPSG','11930',NULL,0); INSERT INTO "usage" VALUES('EPSG','4708','projected_crs','EPSG','6487','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6488','NAD83(2011) / Maryland (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15330',NULL,0); INSERT INTO "usage" VALUES('EPSG','4709','projected_crs','EPSG','6488','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6489','NAD83(2011) / Massachusetts Island',NULL,'EPSG','4499','EPSG','6318','EPSG','12032',NULL,0); INSERT INTO "usage" VALUES('EPSG','4710','projected_crs','EPSG','6489','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6490','NAD83(2011) / Massachusetts Island (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15332',NULL,0); INSERT INTO "usage" VALUES('EPSG','4711','projected_crs','EPSG','6490','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6491','NAD83(2011) / Massachusetts Mainland',NULL,'EPSG','4499','EPSG','6318','EPSG','12031',NULL,0); INSERT INTO "usage" VALUES('EPSG','4712','projected_crs','EPSG','6491','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6492','NAD83(2011) / Massachusetts Mainland (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15331',NULL,0); INSERT INTO "usage" VALUES('EPSG','4713','projected_crs','EPSG','6492','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6493','NAD83(2011) / Michigan Central',NULL,'EPSG','4499','EPSG','6318','EPSG','12142',NULL,0); INSERT INTO "usage" VALUES('EPSG','4714','projected_crs','EPSG','6493','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6494','NAD83(2011) / Michigan Central (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15334',NULL,0); INSERT INTO "usage" VALUES('EPSG','4715','projected_crs','EPSG','6494','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6495','NAD83(2011) / Michigan North',NULL,'EPSG','4499','EPSG','6318','EPSG','12141',NULL,0); INSERT INTO "usage" VALUES('EPSG','4716','projected_crs','EPSG','6495','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6496','NAD83(2011) / Michigan North (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15333',NULL,0); INSERT INTO "usage" VALUES('EPSG','4717','projected_crs','EPSG','6496','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6497','NAD83(2011) / Michigan Oblique Mercator',NULL,'EPSG','4499','EPSG','6318','EPSG','12150',NULL,0); INSERT INTO "usage" VALUES('EPSG','4718','projected_crs','EPSG','6497','EPSG','1391','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6498','NAD83(2011) / Michigan South',NULL,'EPSG','4499','EPSG','6318','EPSG','12143',NULL,0); INSERT INTO "usage" VALUES('EPSG','4719','projected_crs','EPSG','6498','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6499','NAD83(2011) / Michigan South (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15335',NULL,0); INSERT INTO "usage" VALUES('EPSG','4720','projected_crs','EPSG','6499','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6500','NAD83(2011) / Minnesota Central',NULL,'EPSG','4499','EPSG','6318','EPSG','12232',NULL,0); INSERT INTO "usage" VALUES('EPSG','4721','projected_crs','EPSG','6500','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6501','NAD83(2011) / Minnesota Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','12235',NULL,0); INSERT INTO "usage" VALUES('EPSG','4722','projected_crs','EPSG','6501','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6502','NAD83(2011) / Minnesota North',NULL,'EPSG','4499','EPSG','6318','EPSG','12231',NULL,0); INSERT INTO "usage" VALUES('EPSG','4723','projected_crs','EPSG','6502','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6503','NAD83(2011) / Minnesota North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','12234',NULL,0); INSERT INTO "usage" VALUES('EPSG','4724','projected_crs','EPSG','6503','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6504','NAD83(2011) / Minnesota South',NULL,'EPSG','4499','EPSG','6318','EPSG','12233',NULL,0); INSERT INTO "usage" VALUES('EPSG','4725','projected_crs','EPSG','6504','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6505','NAD83(2011) / Minnesota South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','12236',NULL,0); INSERT INTO "usage" VALUES('EPSG','4726','projected_crs','EPSG','6505','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6506','NAD83(2011) / Mississippi East',NULL,'EPSG','4499','EPSG','6318','EPSG','12331',NULL,0); INSERT INTO "usage" VALUES('EPSG','4727','projected_crs','EPSG','6506','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6507','NAD83(2011) / Mississippi East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15336',NULL,0); INSERT INTO "usage" VALUES('EPSG','4728','projected_crs','EPSG','6507','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6508','NAD83(2011) / Mississippi TM',NULL,'EPSG','4499','EPSG','6318','EPSG','3813',NULL,0); INSERT INTO "usage" VALUES('EPSG','4729','projected_crs','EPSG','6508','EPSG','1393','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6509','NAD83(2011) / Mississippi West',NULL,'EPSG','4499','EPSG','6318','EPSG','12332',NULL,0); INSERT INTO "usage" VALUES('EPSG','4730','projected_crs','EPSG','6509','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6510','NAD83(2011) / Mississippi West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15337',NULL,0); INSERT INTO "usage" VALUES('EPSG','4731','projected_crs','EPSG','6510','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6511','NAD83(2011) / Missouri Central',NULL,'EPSG','4499','EPSG','6318','EPSG','12432',NULL,0); INSERT INTO "usage" VALUES('EPSG','4732','projected_crs','EPSG','6511','EPSG','2218','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6512','NAD83(2011) / Missouri East',NULL,'EPSG','4499','EPSG','6318','EPSG','12431',NULL,0); INSERT INTO "usage" VALUES('EPSG','4733','projected_crs','EPSG','6512','EPSG','2219','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6513','NAD83(2011) / Missouri West',NULL,'EPSG','4499','EPSG','6318','EPSG','12433',NULL,0); INSERT INTO "usage" VALUES('EPSG','4734','projected_crs','EPSG','6513','EPSG','2220','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6514','NAD83(2011) / Montana',NULL,'EPSG','4499','EPSG','6318','EPSG','12530',NULL,0); INSERT INTO "usage" VALUES('EPSG','4735','projected_crs','EPSG','6514','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6515','NAD83(2011) / Montana (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15338',NULL,0); INSERT INTO "usage" VALUES('EPSG','4736','projected_crs','EPSG','6515','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6516','NAD83(2011) / Nebraska',NULL,'EPSG','4499','EPSG','6318','EPSG','12630',NULL,0); INSERT INTO "usage" VALUES('EPSG','4737','projected_crs','EPSG','6516','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6517','NAD83(2011) / Nebraska (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15396',NULL,1); INSERT INTO "usage" VALUES('EPSG','4738','projected_crs','EPSG','6517','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6518','NAD83(2011) / Nevada Central',NULL,'EPSG','4499','EPSG','6318','EPSG','12732',NULL,0); INSERT INTO "usage" VALUES('EPSG','4739','projected_crs','EPSG','6518','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6519','NAD83(2011) / Nevada Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15382',NULL,0); INSERT INTO "usage" VALUES('EPSG','4740','projected_crs','EPSG','6519','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6520','NAD83(2011) / Nevada East',NULL,'EPSG','4499','EPSG','6318','EPSG','12731',NULL,0); INSERT INTO "usage" VALUES('EPSG','4741','projected_crs','EPSG','6520','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6521','NAD83(2011) / Nevada East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15381',NULL,0); INSERT INTO "usage" VALUES('EPSG','4742','projected_crs','EPSG','6521','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6522','NAD83(2011) / Nevada West',NULL,'EPSG','4499','EPSG','6318','EPSG','12733',NULL,0); INSERT INTO "usage" VALUES('EPSG','4743','projected_crs','EPSG','6522','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6523','NAD83(2011) / Nevada West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15383',NULL,0); INSERT INTO "usage" VALUES('EPSG','4744','projected_crs','EPSG','6523','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6524','NAD83(2011) / New Hampshire',NULL,'EPSG','4499','EPSG','6318','EPSG','12830',NULL,0); INSERT INTO "usage" VALUES('EPSG','4745','projected_crs','EPSG','6524','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6525','NAD83(2011) / New Hampshire (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15389',NULL,0); INSERT INTO "usage" VALUES('EPSG','4746','projected_crs','EPSG','6525','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6526','NAD83(2011) / New Jersey',NULL,'EPSG','4499','EPSG','6318','EPSG','12930',NULL,0); INSERT INTO "usage" VALUES('EPSG','4747','projected_crs','EPSG','6526','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6527','NAD83(2011) / New Jersey (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15384',NULL,0); INSERT INTO "usage" VALUES('EPSG','4748','projected_crs','EPSG','6527','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6528','NAD83(2011) / New Mexico Central',NULL,'EPSG','4499','EPSG','6318','EPSG','13032',NULL,0); INSERT INTO "usage" VALUES('EPSG','4749','projected_crs','EPSG','6528','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6529','NAD83(2011) / New Mexico Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15340',NULL,0); INSERT INTO "usage" VALUES('EPSG','4750','projected_crs','EPSG','6529','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6530','NAD83(2011) / New Mexico East',NULL,'EPSG','4499','EPSG','6318','EPSG','13031',NULL,0); INSERT INTO "usage" VALUES('EPSG','4751','projected_crs','EPSG','6530','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6531','NAD83(2011) / New Mexico East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15339',NULL,0); INSERT INTO "usage" VALUES('EPSG','4752','projected_crs','EPSG','6531','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6532','NAD83(2011) / New Mexico West',NULL,'EPSG','4499','EPSG','6318','EPSG','13033',NULL,0); INSERT INTO "usage" VALUES('EPSG','4753','projected_crs','EPSG','6532','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6533','NAD83(2011) / New Mexico West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15341',NULL,0); INSERT INTO "usage" VALUES('EPSG','4754','projected_crs','EPSG','6533','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6534','NAD83(2011) / New York Central',NULL,'EPSG','4499','EPSG','6318','EPSG','13132',NULL,0); INSERT INTO "usage" VALUES('EPSG','4755','projected_crs','EPSG','6534','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6535','NAD83(2011) / New York Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15343',NULL,0); INSERT INTO "usage" VALUES('EPSG','4756','projected_crs','EPSG','6535','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6536','NAD83(2011) / New York East',NULL,'EPSG','4499','EPSG','6318','EPSG','13131',NULL,0); INSERT INTO "usage" VALUES('EPSG','4757','projected_crs','EPSG','6536','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6537','NAD83(2011) / New York East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15342',NULL,0); INSERT INTO "usage" VALUES('EPSG','4758','projected_crs','EPSG','6537','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6538','NAD83(2011) / New York Long Island',NULL,'EPSG','4499','EPSG','6318','EPSG','13134',NULL,0); INSERT INTO "usage" VALUES('EPSG','4759','projected_crs','EPSG','6538','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6539','NAD83(2011) / New York Long Island (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15345',NULL,0); INSERT INTO "usage" VALUES('EPSG','4760','projected_crs','EPSG','6539','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6540','NAD83(2011) / New York West',NULL,'EPSG','4499','EPSG','6318','EPSG','13133',NULL,0); INSERT INTO "usage" VALUES('EPSG','4761','projected_crs','EPSG','6540','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6541','NAD83(2011) / New York West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15344',NULL,0); INSERT INTO "usage" VALUES('EPSG','4762','projected_crs','EPSG','6541','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6542','NAD83(2011) / North Carolina',NULL,'EPSG','4499','EPSG','6318','EPSG','13230',NULL,0); INSERT INTO "usage" VALUES('EPSG','4763','projected_crs','EPSG','6542','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6543','NAD83(2011) / North Carolina (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15346',NULL,0); INSERT INTO "usage" VALUES('EPSG','4764','projected_crs','EPSG','6543','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6544','NAD83(2011) / North Dakota North',NULL,'EPSG','4499','EPSG','6318','EPSG','13331',NULL,0); INSERT INTO "usage" VALUES('EPSG','4765','projected_crs','EPSG','6544','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6545','NAD83(2011) / North Dakota North (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15347',NULL,0); INSERT INTO "usage" VALUES('EPSG','4766','projected_crs','EPSG','6545','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6546','NAD83(2011) / North Dakota South',NULL,'EPSG','4499','EPSG','6318','EPSG','13332',NULL,0); INSERT INTO "usage" VALUES('EPSG','4767','projected_crs','EPSG','6546','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6547','NAD83(2011) / North Dakota South (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15348',NULL,0); INSERT INTO "usage" VALUES('EPSG','4768','projected_crs','EPSG','6547','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6548','NAD83(2011) / Ohio North',NULL,'EPSG','4499','EPSG','6318','EPSG','13431',NULL,0); INSERT INTO "usage" VALUES('EPSG','4769','projected_crs','EPSG','6548','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6549','NAD83(2011) / Ohio North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','13433',NULL,0); INSERT INTO "usage" VALUES('EPSG','4770','projected_crs','EPSG','6549','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6550','NAD83(2011) / Ohio South',NULL,'EPSG','4499','EPSG','6318','EPSG','13432',NULL,0); INSERT INTO "usage" VALUES('EPSG','4771','projected_crs','EPSG','6550','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6551','NAD83(2011) / Ohio South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','13434',NULL,0); INSERT INTO "usage" VALUES('EPSG','4772','projected_crs','EPSG','6551','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6552','NAD83(2011) / Oklahoma North',NULL,'EPSG','4499','EPSG','6318','EPSG','13531',NULL,0); INSERT INTO "usage" VALUES('EPSG','4773','projected_crs','EPSG','6552','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6553','NAD83(2011) / Oklahoma North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15349',NULL,0); INSERT INTO "usage" VALUES('EPSG','4774','projected_crs','EPSG','6553','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6554','NAD83(2011) / Oklahoma South',NULL,'EPSG','4499','EPSG','6318','EPSG','13532',NULL,0); INSERT INTO "usage" VALUES('EPSG','4775','projected_crs','EPSG','6554','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6555','NAD83(2011) / Oklahoma South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15350',NULL,0); INSERT INTO "usage" VALUES('EPSG','4776','projected_crs','EPSG','6555','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6556','NAD83(2011) / Oregon LCC (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','13633',NULL,0); INSERT INTO "usage" VALUES('EPSG','4777','projected_crs','EPSG','6556','EPSG','1406','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','6557','NAD83(2011) / Oregon GIC Lambert (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15374',NULL,0); INSERT INTO "usage" VALUES('EPSG','4778','projected_crs','EPSG','6557','EPSG','1406','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6558','NAD83(2011) / Oregon North',NULL,'EPSG','4499','EPSG','6318','EPSG','13631',NULL,0); INSERT INTO "usage" VALUES('EPSG','4779','projected_crs','EPSG','6558','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6559','NAD83(2011) / Oregon North (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15351',NULL,0); INSERT INTO "usage" VALUES('EPSG','4780','projected_crs','EPSG','6559','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6560','NAD83(2011) / Oregon South',NULL,'EPSG','4499','EPSG','6318','EPSG','13632',NULL,0); INSERT INTO "usage" VALUES('EPSG','4781','projected_crs','EPSG','6560','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6561','NAD83(2011) / Oregon South (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15352',NULL,0); INSERT INTO "usage" VALUES('EPSG','4782','projected_crs','EPSG','6561','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6562','NAD83(2011) / Pennsylvania North',NULL,'EPSG','4499','EPSG','6318','EPSG','13731',NULL,0); INSERT INTO "usage" VALUES('EPSG','4783','projected_crs','EPSG','6562','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6563','NAD83(2011) / Pennsylvania North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15353',NULL,0); INSERT INTO "usage" VALUES('EPSG','4784','projected_crs','EPSG','6563','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6564','NAD83(2011) / Pennsylvania South',NULL,'EPSG','4499','EPSG','6318','EPSG','13732',NULL,0); INSERT INTO "usage" VALUES('EPSG','4785','projected_crs','EPSG','6564','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6565','NAD83(2011) / Pennsylvania South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15354',NULL,0); INSERT INTO "usage" VALUES('EPSG','4786','projected_crs','EPSG','6565','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6566','NAD83(2011) / Puerto Rico and Virgin Is.',NULL,'EPSG','4499','EPSG','6318','EPSG','15230',NULL,0); INSERT INTO "usage" VALUES('EPSG','4787','projected_crs','EPSG','6566','EPSG','3634','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6567','NAD83(2011) / Rhode Island',NULL,'EPSG','4499','EPSG','6318','EPSG','13830',NULL,0); INSERT INTO "usage" VALUES('EPSG','4788','projected_crs','EPSG','6567','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6568','NAD83(2011) / Rhode Island (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15390',NULL,0); INSERT INTO "usage" VALUES('EPSG','4789','projected_crs','EPSG','6568','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6569','NAD83(2011) / South Carolina',NULL,'EPSG','4499','EPSG','6318','EPSG','13930',NULL,0); INSERT INTO "usage" VALUES('EPSG','4790','projected_crs','EPSG','6569','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6570','NAD83(2011) / South Carolina (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','15355',NULL,0); INSERT INTO "usage" VALUES('EPSG','4791','projected_crs','EPSG','6570','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6571','NAD83(2011) / South Dakota North',NULL,'EPSG','4499','EPSG','6318','EPSG','14031',NULL,0); INSERT INTO "usage" VALUES('EPSG','4792','projected_crs','EPSG','6571','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6572','NAD83(2011) / South Dakota North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15394',NULL,0); INSERT INTO "usage" VALUES('EPSG','4793','projected_crs','EPSG','6572','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6573','NAD83(2011) / South Dakota South',NULL,'EPSG','4499','EPSG','6318','EPSG','14032',NULL,0); INSERT INTO "usage" VALUES('EPSG','4794','projected_crs','EPSG','6573','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6574','NAD83(2011) / South Dakota South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15395',NULL,0); INSERT INTO "usage" VALUES('EPSG','4795','projected_crs','EPSG','6574','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6575','NAD83(2011) / Tennessee',NULL,'EPSG','4499','EPSG','6318','EPSG','14130',NULL,0); INSERT INTO "usage" VALUES('EPSG','4796','projected_crs','EPSG','6575','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6576','NAD83(2011) / Tennessee (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15356',NULL,0); INSERT INTO "usage" VALUES('EPSG','4797','projected_crs','EPSG','6576','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6577','NAD83(2011) / Texas Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14233',NULL,0); INSERT INTO "usage" VALUES('EPSG','4798','projected_crs','EPSG','6577','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6578','NAD83(2011) / Texas Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15359',NULL,0); INSERT INTO "usage" VALUES('EPSG','4799','projected_crs','EPSG','6578','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6579','NAD83(2011) / Texas Centric Albers Equal Area',NULL,'EPSG','4499','EPSG','6318','EPSG','14254',NULL,0); INSERT INTO "usage" VALUES('EPSG','4800','projected_crs','EPSG','6579','EPSG','1412','EPSG','1222'); INSERT INTO "projected_crs" VALUES('EPSG','6580','NAD83(2011) / Texas Centric Lambert Conformal',NULL,'EPSG','4499','EPSG','6318','EPSG','14253',NULL,0); INSERT INTO "usage" VALUES('EPSG','4801','projected_crs','EPSG','6580','EPSG','1412','EPSG','1221'); INSERT INTO "projected_crs" VALUES('EPSG','6581','NAD83(2011) / Texas North',NULL,'EPSG','4499','EPSG','6318','EPSG','14231',NULL,0); INSERT INTO "usage" VALUES('EPSG','4802','projected_crs','EPSG','6581','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6582','NAD83(2011) / Texas North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15357',NULL,0); INSERT INTO "usage" VALUES('EPSG','4803','projected_crs','EPSG','6582','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6583','NAD83(2011) / Texas North Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14232',NULL,0); INSERT INTO "usage" VALUES('EPSG','4804','projected_crs','EPSG','6583','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6584','NAD83(2011) / Texas North Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15358',NULL,0); INSERT INTO "usage" VALUES('EPSG','4805','projected_crs','EPSG','6584','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6585','NAD83(2011) / Texas South',NULL,'EPSG','4499','EPSG','6318','EPSG','14235',NULL,0); INSERT INTO "usage" VALUES('EPSG','4806','projected_crs','EPSG','6585','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6586','NAD83(2011) / Texas South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15361',NULL,0); INSERT INTO "usage" VALUES('EPSG','4807','projected_crs','EPSG','6586','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6587','NAD83(2011) / Texas South Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14234',NULL,0); INSERT INTO "usage" VALUES('EPSG','4808','projected_crs','EPSG','6587','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6588','NAD83(2011) / Texas South Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15360',NULL,0); INSERT INTO "usage" VALUES('EPSG','4809','projected_crs','EPSG','6588','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6589','NAD83(2011) / Vermont',NULL,'EPSG','4499','EPSG','6318','EPSG','14430',NULL,0); INSERT INTO "usage" VALUES('EPSG','4810','projected_crs','EPSG','6589','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6590','NAD83(2011) / Vermont (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','5645',NULL,0); INSERT INTO "usage" VALUES('EPSG','4811','projected_crs','EPSG','6590','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6591','NAD83(2011) / Virginia Lambert',NULL,'EPSG','4499','EPSG','6318','EPSG','3967',NULL,0); INSERT INTO "usage" VALUES('EPSG','4812','projected_crs','EPSG','6591','EPSG','1415','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6592','NAD83(2011) / Virginia North',NULL,'EPSG','4499','EPSG','6318','EPSG','14531',NULL,0); INSERT INTO "usage" VALUES('EPSG','4813','projected_crs','EPSG','6592','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6593','NAD83(2011) / Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15365',NULL,0); INSERT INTO "usage" VALUES('EPSG','4814','projected_crs','EPSG','6593','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6594','NAD83(2011) / Virginia South',NULL,'EPSG','4499','EPSG','6318','EPSG','14532',NULL,0); INSERT INTO "usage" VALUES('EPSG','4815','projected_crs','EPSG','6594','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6595','NAD83(2011) / Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15366',NULL,0); INSERT INTO "usage" VALUES('EPSG','4816','projected_crs','EPSG','6595','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6596','NAD83(2011) / Washington North',NULL,'EPSG','4499','EPSG','6318','EPSG','14631',NULL,0); INSERT INTO "usage" VALUES('EPSG','4817','projected_crs','EPSG','6596','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6597','NAD83(2011) / Washington North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15367',NULL,0); INSERT INTO "usage" VALUES('EPSG','4818','projected_crs','EPSG','6597','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6598','NAD83(2011) / Washington South',NULL,'EPSG','4499','EPSG','6318','EPSG','14632',NULL,0); INSERT INTO "usage" VALUES('EPSG','4819','projected_crs','EPSG','6598','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6599','NAD83(2011) / Washington South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15368',NULL,0); INSERT INTO "usage" VALUES('EPSG','4820','projected_crs','EPSG','6599','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6600','NAD83(2011) / West Virginia North',NULL,'EPSG','4499','EPSG','6318','EPSG','14731',NULL,0); INSERT INTO "usage" VALUES('EPSG','4821','projected_crs','EPSG','6600','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6601','NAD83(2011) / West Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','14735',NULL,0); INSERT INTO "usage" VALUES('EPSG','4822','projected_crs','EPSG','6601','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6602','NAD83(2011) / West Virginia South',NULL,'EPSG','4499','EPSG','6318','EPSG','14732',NULL,0); INSERT INTO "usage" VALUES('EPSG','4823','projected_crs','EPSG','6602','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6603','NAD83(2011) / West Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','14736',NULL,0); INSERT INTO "usage" VALUES('EPSG','4824','projected_crs','EPSG','6603','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6604','NAD83(2011) / Wisconsin Central',NULL,'EPSG','4499','EPSG','4759','EPSG','14832',NULL,1); INSERT INTO "usage" VALUES('EPSG','4825','projected_crs','EPSG','6604','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6605','NAD83(2011) / Wisconsin Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15370',NULL,0); INSERT INTO "usage" VALUES('EPSG','4826','projected_crs','EPSG','6605','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6606','NAD83(2011) / Wisconsin North',NULL,'EPSG','4499','EPSG','6318','EPSG','14831',NULL,0); INSERT INTO "usage" VALUES('EPSG','4827','projected_crs','EPSG','6606','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6607','NAD83(2011) / Wisconsin North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15369',NULL,0); INSERT INTO "usage" VALUES('EPSG','4828','projected_crs','EPSG','6607','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6608','NAD83(2011) / Wisconsin South',NULL,'EPSG','4499','EPSG','6318','EPSG','14833',NULL,0); INSERT INTO "usage" VALUES('EPSG','4829','projected_crs','EPSG','6608','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6609','NAD83(2011) / Wisconsin South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15371',NULL,0); INSERT INTO "usage" VALUES('EPSG','4830','projected_crs','EPSG','6609','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6610','NAD83(2011) / Wisconsin Transverse Mercator',NULL,'EPSG','4499','EPSG','6318','EPSG','14841',NULL,0); INSERT INTO "usage" VALUES('EPSG','4831','projected_crs','EPSG','6610','EPSG','1418','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6611','NAD83(2011) / Wyoming East',NULL,'EPSG','4499','EPSG','6318','EPSG','14931',NULL,0); INSERT INTO "usage" VALUES('EPSG','4832','projected_crs','EPSG','6611','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6612','NAD83(2011) / Wyoming East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','14935',NULL,0); INSERT INTO "usage" VALUES('EPSG','4833','projected_crs','EPSG','6612','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6613','NAD83(2011) / Wyoming East Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14932',NULL,0); INSERT INTO "usage" VALUES('EPSG','4834','projected_crs','EPSG','6613','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6614','NAD83(2011) / Wyoming East Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','14936',NULL,0); INSERT INTO "usage" VALUES('EPSG','4835','projected_crs','EPSG','6614','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6615','NAD83(2011) / Wyoming West',NULL,'EPSG','4499','EPSG','6318','EPSG','14934',NULL,0); INSERT INTO "usage" VALUES('EPSG','4836','projected_crs','EPSG','6615','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6616','NAD83(2011) / Wyoming West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','14938',NULL,0); INSERT INTO "usage" VALUES('EPSG','4837','projected_crs','EPSG','6616','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6617','NAD83(2011) / Wyoming West Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14933',NULL,0); INSERT INTO "usage" VALUES('EPSG','4838','projected_crs','EPSG','6617','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6618','NAD83(2011) / Wyoming West Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','14937',NULL,0); INSERT INTO "usage" VALUES('EPSG','4839','projected_crs','EPSG','6618','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6619','NAD83(2011) / Utah Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14332',NULL,0); INSERT INTO "usage" VALUES('EPSG','4840','projected_crs','EPSG','6619','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6620','NAD83(2011) / Utah North',NULL,'EPSG','4499','EPSG','6318','EPSG','14331',NULL,0); INSERT INTO "usage" VALUES('EPSG','4841','projected_crs','EPSG','6620','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6621','NAD83(2011) / Utah South',NULL,'EPSG','4499','EPSG','6318','EPSG','14333',NULL,0); INSERT INTO "usage" VALUES('EPSG','4842','projected_crs','EPSG','6621','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6622','NAD83(CSRS)v2 / Quebec Lambert',NULL,'EPSG','4499','EPSG','8237','EPSG','19944',NULL,0); INSERT INTO "usage" VALUES('EPSG','4843','projected_crs','EPSG','6622','EPSG','1368','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6623','NAD83 / Quebec Albers',NULL,'EPSG','4499','EPSG','4269','EPSG','6645',NULL,0); INSERT INTO "usage" VALUES('EPSG','4844','projected_crs','EPSG','6623','EPSG','1368','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','6624','NAD83(CSRS)v2 / Quebec Albers',NULL,'EPSG','4499','EPSG','8237','EPSG','6645',NULL,0); INSERT INTO "usage" VALUES('EPSG','4845','projected_crs','EPSG','6624','EPSG','1368','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','6625','NAD83(2011) / Utah Central (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15298',NULL,0); INSERT INTO "usage" VALUES('EPSG','4846','projected_crs','EPSG','6625','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6626','NAD83(2011) / Utah North (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15297',NULL,0); INSERT INTO "usage" VALUES('EPSG','4847','projected_crs','EPSG','6626','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6627','NAD83(2011) / Utah South (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15299',NULL,0); INSERT INTO "usage" VALUES('EPSG','4848','projected_crs','EPSG','6627','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6628','NAD83(PA11) / Hawaii zone 1',NULL,'EPSG','4499','EPSG','6322','EPSG','15131',NULL,0); INSERT INTO "usage" VALUES('EPSG','4849','projected_crs','EPSG','6628','EPSG','1546','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6629','NAD83(PA11) / Hawaii zone 2',NULL,'EPSG','4499','EPSG','6322','EPSG','15132',NULL,0); INSERT INTO "usage" VALUES('EPSG','4850','projected_crs','EPSG','6629','EPSG','1547','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6630','NAD83(PA11) / Hawaii zone 3',NULL,'EPSG','4499','EPSG','6322','EPSG','15133',NULL,0); INSERT INTO "usage" VALUES('EPSG','4851','projected_crs','EPSG','6630','EPSG','1548','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6631','NAD83(PA11) / Hawaii zone 4',NULL,'EPSG','4499','EPSG','6322','EPSG','15134',NULL,0); INSERT INTO "usage" VALUES('EPSG','4852','projected_crs','EPSG','6631','EPSG','1549','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6632','NAD83(PA11) / Hawaii zone 5',NULL,'EPSG','4499','EPSG','6322','EPSG','15135',NULL,0); INSERT INTO "usage" VALUES('EPSG','4853','projected_crs','EPSG','6632','EPSG','1550','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6633','NAD83(PA11) / Hawaii zone 3 (ftUS)',NULL,'EPSG','4497','EPSG','6322','EPSG','15138',NULL,0); INSERT INTO "usage" VALUES('EPSG','4854','projected_crs','EPSG','6633','EPSG','1548','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6634','NAD83(PA11) / UTM zone 4N',NULL,'EPSG','4400','EPSG','6322','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','4855','projected_crs','EPSG','6634','EPSG','3488','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6635','NAD83(PA11) / UTM zone 5N',NULL,'EPSG','4400','EPSG','6322','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','4856','projected_crs','EPSG','6635','EPSG','3491','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6636','NAD83(PA11) / UTM zone 2S',NULL,'EPSG','4400','EPSG','6322','EPSG','16102',NULL,0); INSERT INTO "usage" VALUES('EPSG','4857','projected_crs','EPSG','6636','EPSG','3110','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6637','NAD83(MA11) / Guam Map Grid',NULL,'EPSG','4499','EPSG','6325','EPSG','4325',NULL,0); INSERT INTO "usage" VALUES('EPSG','4858','projected_crs','EPSG','6637','EPSG','3255','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6646','Karbala 1979 / Iraq National Grid',NULL,'EPSG','4400','EPSG','4743','EPSG','19907',NULL,0); INSERT INTO "usage" VALUES('EPSG','4866','projected_crs','EPSG','6646','EPSG','3625','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','6669','JGD2011 / Japan Plane Rectangular CS I',NULL,'EPSG','4530','EPSG','6668','EPSG','17801',NULL,0); INSERT INTO "usage" VALUES('EPSG','4888','projected_crs','EPSG','6669','EPSG','1854','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6670','JGD2011 / Japan Plane Rectangular CS II',NULL,'EPSG','4530','EPSG','6668','EPSG','17802',NULL,0); INSERT INTO "usage" VALUES('EPSG','4889','projected_crs','EPSG','6670','EPSG','1855','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6671','JGD2011 / Japan Plane Rectangular CS III',NULL,'EPSG','4530','EPSG','6668','EPSG','17803',NULL,0); INSERT INTO "usage" VALUES('EPSG','4890','projected_crs','EPSG','6671','EPSG','1856','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6672','JGD2011 / Japan Plane Rectangular CS IV',NULL,'EPSG','4530','EPSG','6668','EPSG','17804',NULL,0); INSERT INTO "usage" VALUES('EPSG','4891','projected_crs','EPSG','6672','EPSG','1857','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6673','JGD2011 / Japan Plane Rectangular CS V',NULL,'EPSG','4530','EPSG','6668','EPSG','17805',NULL,0); INSERT INTO "usage" VALUES('EPSG','4892','projected_crs','EPSG','6673','EPSG','1858','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6674','JGD2011 / Japan Plane Rectangular CS VI',NULL,'EPSG','4530','EPSG','6668','EPSG','17806',NULL,0); INSERT INTO "usage" VALUES('EPSG','4893','projected_crs','EPSG','6674','EPSG','1859','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6675','JGD2011 / Japan Plane Rectangular CS VII',NULL,'EPSG','4530','EPSG','6668','EPSG','17807',NULL,0); INSERT INTO "usage" VALUES('EPSG','4894','projected_crs','EPSG','6675','EPSG','1860','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6676','JGD2011 / Japan Plane Rectangular CS VIII',NULL,'EPSG','4530','EPSG','6668','EPSG','17808',NULL,0); INSERT INTO "usage" VALUES('EPSG','4895','projected_crs','EPSG','6676','EPSG','1861','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6677','JGD2011 / Japan Plane Rectangular CS IX',NULL,'EPSG','4530','EPSG','6668','EPSG','17809',NULL,0); INSERT INTO "usage" VALUES('EPSG','4896','projected_crs','EPSG','6677','EPSG','1862','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6678','JGD2011 / Japan Plane Rectangular CS X',NULL,'EPSG','4530','EPSG','6668','EPSG','17810',NULL,0); INSERT INTO "usage" VALUES('EPSG','4897','projected_crs','EPSG','6678','EPSG','1863','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6679','JGD2011 / Japan Plane Rectangular CS XI',NULL,'EPSG','4530','EPSG','6668','EPSG','17811',NULL,0); INSERT INTO "usage" VALUES('EPSG','4898','projected_crs','EPSG','6679','EPSG','1864','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6680','JGD2011 / Japan Plane Rectangular CS XII',NULL,'EPSG','4530','EPSG','6668','EPSG','17812',NULL,0); INSERT INTO "usage" VALUES('EPSG','4899','projected_crs','EPSG','6680','EPSG','1865','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6681','JGD2011 / Japan Plane Rectangular CS XIII',NULL,'EPSG','4530','EPSG','6668','EPSG','17813',NULL,0); INSERT INTO "usage" VALUES('EPSG','4900','projected_crs','EPSG','6681','EPSG','1866','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6682','JGD2011 / Japan Plane Rectangular CS XIV',NULL,'EPSG','4530','EPSG','6668','EPSG','17814',NULL,0); INSERT INTO "usage" VALUES('EPSG','4901','projected_crs','EPSG','6682','EPSG','1867','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6683','JGD2011 / Japan Plane Rectangular CS XV',NULL,'EPSG','4530','EPSG','6668','EPSG','17815',NULL,0); INSERT INTO "usage" VALUES('EPSG','4902','projected_crs','EPSG','6683','EPSG','1868','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6684','JGD2011 / Japan Plane Rectangular CS XVI',NULL,'EPSG','4530','EPSG','6668','EPSG','17816',NULL,0); INSERT INTO "usage" VALUES('EPSG','4903','projected_crs','EPSG','6684','EPSG','1869','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6685','JGD2011 / Japan Plane Rectangular CS XVII',NULL,'EPSG','4530','EPSG','6668','EPSG','17817',NULL,0); INSERT INTO "usage" VALUES('EPSG','4904','projected_crs','EPSG','6685','EPSG','1870','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6686','JGD2011 / Japan Plane Rectangular CS XVIII',NULL,'EPSG','4530','EPSG','6668','EPSG','17818',NULL,0); INSERT INTO "usage" VALUES('EPSG','4905','projected_crs','EPSG','6686','EPSG','1871','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6687','JGD2011 / Japan Plane Rectangular CS XIX',NULL,'EPSG','4530','EPSG','6668','EPSG','17819',NULL,0); INSERT INTO "usage" VALUES('EPSG','4906','projected_crs','EPSG','6687','EPSG','1872','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6688','JGD2011 / UTM zone 51N',NULL,'EPSG','4400','EPSG','6668','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','4907','projected_crs','EPSG','6688','EPSG','3959','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6689','JGD2011 / UTM zone 52N',NULL,'EPSG','4400','EPSG','6668','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','4908','projected_crs','EPSG','6689','EPSG','3960','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6690','JGD2011 / UTM zone 53N',NULL,'EPSG','4400','EPSG','6668','EPSG','16053',NULL,0); INSERT INTO "usage" VALUES('EPSG','4909','projected_crs','EPSG','6690','EPSG','3961','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6691','JGD2011 / UTM zone 54N',NULL,'EPSG','4400','EPSG','6668','EPSG','16054',NULL,0); INSERT INTO "usage" VALUES('EPSG','4910','projected_crs','EPSG','6691','EPSG','3962','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6692','JGD2011 / UTM zone 55N',NULL,'EPSG','4400','EPSG','6668','EPSG','16055',NULL,0); INSERT INTO "usage" VALUES('EPSG','4911','projected_crs','EPSG','6692','EPSG','3963','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','6703','WGS 84 / TM 60 SW',NULL,'EPSG','4400','EPSG','4326','EPSG','6702',NULL,0); INSERT INTO "usage" VALUES('EPSG','4918','projected_crs','EPSG','6703','EPSG','4172','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','6707','RDN2008 / UTM zone 32N (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','14415','projected_crs','EPSG','6707','EPSG','1718','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6708','RDN2008 / UTM zone 33N (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','14414','projected_crs','EPSG','6708','EPSG','4186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6709','RDN2008 / UTM zone 34N (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','14416','projected_crs','EPSG','6709','EPSG','4187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6720','WGS 84 / CIG92',NULL,'EPSG','4400','EPSG','4326','EPSG','6716',NULL,0); INSERT INTO "usage" VALUES('EPSG','4926','projected_crs','EPSG','6720','EPSG','4169','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6721','GDA94 / CIG94',NULL,'EPSG','4400','EPSG','4283','EPSG','6717',NULL,0); INSERT INTO "usage" VALUES('EPSG','4927','projected_crs','EPSG','6721','EPSG','4169','EPSG','1093'); INSERT INTO "projected_crs" VALUES('EPSG','6722','WGS 84 / CKIG92',NULL,'EPSG','4400','EPSG','4326','EPSG','6718',NULL,0); INSERT INTO "usage" VALUES('EPSG','4928','projected_crs','EPSG','6722','EPSG','1069','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6723','GDA94 / CKIG94',NULL,'EPSG','4400','EPSG','4283','EPSG','6719',NULL,0); INSERT INTO "usage" VALUES('EPSG','4929','projected_crs','EPSG','6723','EPSG','1069','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','6732','GDA94 / MGA zone 41',NULL,'EPSG','4400','EPSG','4283','EPSG','6725',NULL,1); INSERT INTO "usage" VALUES('EPSG','4930','projected_crs','EPSG','6732','EPSG','4173','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6733','GDA94 / MGA zone 42',NULL,'EPSG','4400','EPSG','4283','EPSG','6726',NULL,1); INSERT INTO "usage" VALUES('EPSG','4931','projected_crs','EPSG','6733','EPSG','4181','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6734','GDA94 / MGA zone 43',NULL,'EPSG','4400','EPSG','4283','EPSG','6727',NULL,1); INSERT INTO "usage" VALUES('EPSG','4932','projected_crs','EPSG','6734','EPSG','4184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6735','GDA94 / MGA zone 44',NULL,'EPSG','4400','EPSG','4283','EPSG','6728',NULL,1); INSERT INTO "usage" VALUES('EPSG','4933','projected_crs','EPSG','6735','EPSG','4185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6736','GDA94 / MGA zone 46',NULL,'EPSG','4400','EPSG','4283','EPSG','6729',NULL,0); INSERT INTO "usage" VALUES('EPSG','4934','projected_crs','EPSG','6736','EPSG','4189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6737','GDA94 / MGA zone 47',NULL,'EPSG','4400','EPSG','4283','EPSG','6730',NULL,0); INSERT INTO "usage" VALUES('EPSG','4935','projected_crs','EPSG','6737','EPSG','4190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6738','GDA94 / MGA zone 59',NULL,'EPSG','4400','EPSG','4283','EPSG','6731',NULL,0); INSERT INTO "usage" VALUES('EPSG','4936','projected_crs','EPSG','6738','EPSG','4179','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6784','NAD83(CORS96) / Oregon Baker zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6741',NULL,0); INSERT INTO "usage" VALUES('EPSG','4940','projected_crs','EPSG','6784','EPSG','4180','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6785','NAD83(CORS96) / Oregon Baker zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6742',NULL,0); INSERT INTO "usage" VALUES('EPSG','4941','projected_crs','EPSG','6785','EPSG','4180','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6786','NAD83(2011) / Oregon Baker zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6741',NULL,0); INSERT INTO "usage" VALUES('EPSG','4942','projected_crs','EPSG','6786','EPSG','4180','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6787','NAD83(2011) / Oregon Baker zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6742',NULL,0); INSERT INTO "usage" VALUES('EPSG','4943','projected_crs','EPSG','6787','EPSG','4180','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6788','NAD83(CORS96) / Oregon Bend-Klamath Falls zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6743',NULL,0); INSERT INTO "usage" VALUES('EPSG','4944','projected_crs','EPSG','6788','EPSG','4192','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6789','NAD83(CORS96) / Oregon Bend-Klamath Falls zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6744',NULL,0); INSERT INTO "usage" VALUES('EPSG','4945','projected_crs','EPSG','6789','EPSG','4192','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6790','NAD83(2011) / Oregon Bend-Klamath Falls zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6743',NULL,0); INSERT INTO "usage" VALUES('EPSG','4946','projected_crs','EPSG','6790','EPSG','4192','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6791','NAD83(2011) / Oregon Bend-Klamath Falls zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6744',NULL,0); INSERT INTO "usage" VALUES('EPSG','4947','projected_crs','EPSG','6791','EPSG','4192','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6792','NAD83(CORS96) / Oregon Bend-Redmond-Prineville zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6745',NULL,0); INSERT INTO "usage" VALUES('EPSG','4948','projected_crs','EPSG','6792','EPSG','4195','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6793','NAD83(CORS96) / Oregon Bend-Redmond-Prineville zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6746',NULL,0); INSERT INTO "usage" VALUES('EPSG','4949','projected_crs','EPSG','6793','EPSG','4195','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6794','NAD83(2011) / Oregon Bend-Redmond-Prineville zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6745',NULL,0); INSERT INTO "usage" VALUES('EPSG','4950','projected_crs','EPSG','6794','EPSG','4195','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6795','NAD83(2011) / Oregon Bend-Redmond-Prineville zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6746',NULL,0); INSERT INTO "usage" VALUES('EPSG','4951','projected_crs','EPSG','6795','EPSG','4195','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6796','NAD83(CORS96) / Oregon Bend-Burns zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6747',NULL,0); INSERT INTO "usage" VALUES('EPSG','4952','projected_crs','EPSG','6796','EPSG','4182','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6797','NAD83(CORS96) / Oregon Bend-Burns zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6748',NULL,0); INSERT INTO "usage" VALUES('EPSG','4953','projected_crs','EPSG','6797','EPSG','4182','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6798','NAD83(2011) / Oregon Bend-Burns zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6747',NULL,0); INSERT INTO "usage" VALUES('EPSG','4954','projected_crs','EPSG','6798','EPSG','4182','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6799','NAD83(2011) / Oregon Bend-Burns zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6748',NULL,0); INSERT INTO "usage" VALUES('EPSG','4955','projected_crs','EPSG','6799','EPSG','4182','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6800','NAD83(CORS96) / Oregon Canyonville-Grants Pass zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6749',NULL,0); INSERT INTO "usage" VALUES('EPSG','4956','projected_crs','EPSG','6800','EPSG','4199','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6801','NAD83(CORS96) / Oregon Canyonville-Grants Pass zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6750',NULL,0); INSERT INTO "usage" VALUES('EPSG','4957','projected_crs','EPSG','6801','EPSG','4199','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6802','NAD83(2011) / Oregon Canyonville-Grants Pass zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6749',NULL,0); INSERT INTO "usage" VALUES('EPSG','4958','projected_crs','EPSG','6802','EPSG','4199','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6803','NAD83(2011) / Oregon Canyonville-Grants Pass zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6750',NULL,0); INSERT INTO "usage" VALUES('EPSG','4959','projected_crs','EPSG','6803','EPSG','4199','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6804','NAD83(CORS96) / Oregon Columbia River East zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6751',NULL,0); INSERT INTO "usage" VALUES('EPSG','4960','projected_crs','EPSG','6804','EPSG','4200','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6805','NAD83(CORS96) / Oregon Columbia River East zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6752',NULL,0); INSERT INTO "usage" VALUES('EPSG','4961','projected_crs','EPSG','6805','EPSG','4200','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6806','NAD83(2011) / Oregon Columbia River East zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6751',NULL,0); INSERT INTO "usage" VALUES('EPSG','4962','projected_crs','EPSG','6806','EPSG','4200','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6807','NAD83(2011) / Oregon Columbia River East zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6752',NULL,0); INSERT INTO "usage" VALUES('EPSG','4963','projected_crs','EPSG','6807','EPSG','4200','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6808','NAD83(CORS96) / Oregon Columbia River West zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6753',NULL,0); INSERT INTO "usage" VALUES('EPSG','4964','projected_crs','EPSG','6808','EPSG','4202','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6809','NAD83(CORS96) / Oregon Columbia River West zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6754',NULL,0); INSERT INTO "usage" VALUES('EPSG','4965','projected_crs','EPSG','6809','EPSG','4202','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6810','NAD83(2011) / Oregon Columbia River West zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6753',NULL,0); INSERT INTO "usage" VALUES('EPSG','4966','projected_crs','EPSG','6810','EPSG','4202','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6811','NAD83(2011) / Oregon Columbia River West zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6754',NULL,0); INSERT INTO "usage" VALUES('EPSG','4967','projected_crs','EPSG','6811','EPSG','4202','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6812','NAD83(CORS96) / Oregon Cottage Grove-Canyonville zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6755',NULL,0); INSERT INTO "usage" VALUES('EPSG','4968','projected_crs','EPSG','6812','EPSG','4203','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6813','NAD83(CORS96) / Oregon Cottage Grove-Canyonville zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6756',NULL,0); INSERT INTO "usage" VALUES('EPSG','4969','projected_crs','EPSG','6813','EPSG','4203','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6814','NAD83(2011) / Oregon Cottage Grove-Canyonville zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6755',NULL,0); INSERT INTO "usage" VALUES('EPSG','4970','projected_crs','EPSG','6814','EPSG','4203','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6815','NAD83(2011) / Oregon Cottage Grove-Canyonville zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6756',NULL,0); INSERT INTO "usage" VALUES('EPSG','4971','projected_crs','EPSG','6815','EPSG','4203','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6816','NAD83(CORS96) / Oregon Dufur-Madras zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6757',NULL,0); INSERT INTO "usage" VALUES('EPSG','4972','projected_crs','EPSG','6816','EPSG','4204','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6817','NAD83(CORS96) / Oregon Dufur-Madras zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6758',NULL,0); INSERT INTO "usage" VALUES('EPSG','4973','projected_crs','EPSG','6817','EPSG','4204','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6818','NAD83(2011) / Oregon Dufur-Madras zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6757',NULL,0); INSERT INTO "usage" VALUES('EPSG','4974','projected_crs','EPSG','6818','EPSG','4204','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6819','NAD83(2011) / Oregon Dufur-Madras zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6758',NULL,0); INSERT INTO "usage" VALUES('EPSG','4975','projected_crs','EPSG','6819','EPSG','4204','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6820','NAD83(CORS96) / Oregon Eugene zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6759',NULL,0); INSERT INTO "usage" VALUES('EPSG','4976','projected_crs','EPSG','6820','EPSG','4197','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6821','NAD83(CORS96) / Oregon Eugene zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6760',NULL,0); INSERT INTO "usage" VALUES('EPSG','4977','projected_crs','EPSG','6821','EPSG','4197','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6822','NAD83(2011) / Oregon Eugene zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6759',NULL,0); INSERT INTO "usage" VALUES('EPSG','4978','projected_crs','EPSG','6822','EPSG','4197','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6823','NAD83(2011) / Oregon Eugene zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6760',NULL,0); INSERT INTO "usage" VALUES('EPSG','4979','projected_crs','EPSG','6823','EPSG','4197','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6824','NAD83(CORS96) / Oregon Grants Pass-Ashland zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6761',NULL,0); INSERT INTO "usage" VALUES('EPSG','4980','projected_crs','EPSG','6824','EPSG','4198','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6825','NAD83(CORS96) / Oregon Grants Pass-Ashland zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6762',NULL,0); INSERT INTO "usage" VALUES('EPSG','4981','projected_crs','EPSG','6825','EPSG','4198','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6826','NAD83(2011) / Oregon Grants Pass-Ashland zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6761',NULL,0); INSERT INTO "usage" VALUES('EPSG','4982','projected_crs','EPSG','6826','EPSG','4198','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6827','NAD83(2011) / Oregon Grants Pass-Ashland zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6762',NULL,0); INSERT INTO "usage" VALUES('EPSG','4983','projected_crs','EPSG','6827','EPSG','4198','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6828','NAD83(CORS96) / Oregon Gresham-Warm Springs zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6763',NULL,0); INSERT INTO "usage" VALUES('EPSG','4984','projected_crs','EPSG','6828','EPSG','4201','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6829','NAD83(CORS96) / Oregon Gresham-Warm Springs zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6764',NULL,0); INSERT INTO "usage" VALUES('EPSG','4985','projected_crs','EPSG','6829','EPSG','4201','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6830','NAD83(2011) / Oregon Gresham-Warm Springs zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6763',NULL,0); INSERT INTO "usage" VALUES('EPSG','4986','projected_crs','EPSG','6830','EPSG','4201','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6831','NAD83(2011) / Oregon Gresham-Warm Springs zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6764',NULL,0); INSERT INTO "usage" VALUES('EPSG','4987','projected_crs','EPSG','6831','EPSG','4201','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6832','NAD83(CORS96) / Oregon La Grande zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6765',NULL,0); INSERT INTO "usage" VALUES('EPSG','4988','projected_crs','EPSG','6832','EPSG','4206','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6833','NAD83(CORS96) / Oregon La Grande zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6766',NULL,0); INSERT INTO "usage" VALUES('EPSG','4989','projected_crs','EPSG','6833','EPSG','4206','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6834','NAD83(2011) / Oregon La Grande zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6765',NULL,0); INSERT INTO "usage" VALUES('EPSG','4990','projected_crs','EPSG','6834','EPSG','4206','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6835','NAD83(2011) / Oregon La Grande zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6766',NULL,0); INSERT INTO "usage" VALUES('EPSG','4991','projected_crs','EPSG','6835','EPSG','4206','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6836','NAD83(CORS96) / Oregon Ontario zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6767',NULL,0); INSERT INTO "usage" VALUES('EPSG','4992','projected_crs','EPSG','6836','EPSG','4207','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6837','NAD83(CORS96) / Oregon Ontario zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6768',NULL,0); INSERT INTO "usage" VALUES('EPSG','4993','projected_crs','EPSG','6837','EPSG','4207','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6838','NAD83(2011) / Oregon Ontario zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6767',NULL,0); INSERT INTO "usage" VALUES('EPSG','4994','projected_crs','EPSG','6838','EPSG','4207','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6839','NAD83(2011) / Oregon Ontario zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6768',NULL,0); INSERT INTO "usage" VALUES('EPSG','4995','projected_crs','EPSG','6839','EPSG','4207','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6840','NAD83(CORS96) / Oregon Coast zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6769',NULL,0); INSERT INTO "usage" VALUES('EPSG','4996','projected_crs','EPSG','6840','EPSG','4208','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6841','NAD83(CORS96) / Oregon Coast zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6770',NULL,0); INSERT INTO "usage" VALUES('EPSG','4997','projected_crs','EPSG','6841','EPSG','4208','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6842','NAD83(2011) / Oregon Coast zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6769',NULL,0); INSERT INTO "usage" VALUES('EPSG','4998','projected_crs','EPSG','6842','EPSG','4208','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6843','NAD83(2011) / Oregon Coast zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6770',NULL,0); INSERT INTO "usage" VALUES('EPSG','4999','projected_crs','EPSG','6843','EPSG','4208','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6844','NAD83(CORS96) / Oregon Pendleton zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6771',NULL,0); INSERT INTO "usage" VALUES('EPSG','5000','projected_crs','EPSG','6844','EPSG','4209','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6845','NAD83(CORS96) / Oregon Pendleton zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6772',NULL,0); INSERT INTO "usage" VALUES('EPSG','5001','projected_crs','EPSG','6845','EPSG','4209','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6846','NAD83(2011) / Oregon Pendleton zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6771',NULL,0); INSERT INTO "usage" VALUES('EPSG','5002','projected_crs','EPSG','6846','EPSG','4209','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6847','NAD83(2011) / Oregon Pendleton zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6772',NULL,0); INSERT INTO "usage" VALUES('EPSG','5003','projected_crs','EPSG','6847','EPSG','4209','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6848','NAD83(CORS96) / Oregon Pendleton-La Grande zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6773',NULL,0); INSERT INTO "usage" VALUES('EPSG','5004','projected_crs','EPSG','6848','EPSG','4210','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6849','NAD83(CORS96) / Oregon Pendleton-La Grande zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6774',NULL,0); INSERT INTO "usage" VALUES('EPSG','5005','projected_crs','EPSG','6849','EPSG','4210','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6850','NAD83(2011) / Oregon Pendleton-La Grande zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6773',NULL,0); INSERT INTO "usage" VALUES('EPSG','5006','projected_crs','EPSG','6850','EPSG','4210','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6851','NAD83(2011) / Oregon Pendleton-La Grande zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6774',NULL,0); INSERT INTO "usage" VALUES('EPSG','5007','projected_crs','EPSG','6851','EPSG','4210','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6852','NAD83(CORS96) / Oregon Portland zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6775',NULL,0); INSERT INTO "usage" VALUES('EPSG','5008','projected_crs','EPSG','6852','EPSG','4211','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6853','NAD83(CORS96) / Oregon Portland zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6776',NULL,0); INSERT INTO "usage" VALUES('EPSG','5009','projected_crs','EPSG','6853','EPSG','4211','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6854','NAD83(2011) / Oregon Portland zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6775',NULL,0); INSERT INTO "usage" VALUES('EPSG','5010','projected_crs','EPSG','6854','EPSG','4211','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6855','NAD83(2011) / Oregon Portland zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6776',NULL,0); INSERT INTO "usage" VALUES('EPSG','5011','projected_crs','EPSG','6855','EPSG','4211','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6856','NAD83(CORS96) / Oregon Salem zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6777',NULL,0); INSERT INTO "usage" VALUES('EPSG','5012','projected_crs','EPSG','6856','EPSG','4212','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6857','NAD83(CORS96) / Oregon Salem zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6778',NULL,0); INSERT INTO "usage" VALUES('EPSG','5013','projected_crs','EPSG','6857','EPSG','4212','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6858','NAD83(2011) / Oregon Salem zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6777',NULL,0); INSERT INTO "usage" VALUES('EPSG','5014','projected_crs','EPSG','6858','EPSG','4212','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6859','NAD83(2011) / Oregon Salem zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6778',NULL,0); INSERT INTO "usage" VALUES('EPSG','5015','projected_crs','EPSG','6859','EPSG','4212','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6860','NAD83(CORS96) / Oregon Santiam Pass zone (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','6779',NULL,0); INSERT INTO "usage" VALUES('EPSG','5016','projected_crs','EPSG','6860','EPSG','4213','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6861','NAD83(CORS96) / Oregon Santiam Pass zone (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','6780',NULL,0); INSERT INTO "usage" VALUES('EPSG','5017','projected_crs','EPSG','6861','EPSG','4213','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6862','NAD83(2011) / Oregon Santiam Pass zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','6779',NULL,0); INSERT INTO "usage" VALUES('EPSG','5018','projected_crs','EPSG','6862','EPSG','4213','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6863','NAD83(2011) / Oregon Santiam Pass zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','6780',NULL,0); INSERT INTO "usage" VALUES('EPSG','5019','projected_crs','EPSG','6863','EPSG','4213','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','6867','NAD83(CORS96) / Oregon LCC (m)',NULL,'EPSG','4499','EPSG','6783','EPSG','13633',NULL,0); INSERT INTO "usage" VALUES('EPSG','5020','projected_crs','EPSG','6867','EPSG','1406','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','6868','NAD83(CORS96) / Oregon GIC Lambert (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','15374',NULL,0); INSERT INTO "usage" VALUES('EPSG','5021','projected_crs','EPSG','6868','EPSG','1406','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','6870','ETRS89 / Albania TM 2010',NULL,'EPSG','4530','EPSG','4258','EPSG','6869',NULL,0); INSERT INTO "usage" VALUES('EPSG','5022','projected_crs','EPSG','6870','EPSG','3212','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6875','RDN2008 / Italy zone (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','6877',NULL,0); INSERT INTO "usage" VALUES('EPSG','14417','projected_crs','EPSG','6875','EPSG','1127','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6876','RDN2008 / Zone 12 (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','6878',NULL,0); INSERT INTO "usage" VALUES('EPSG','14418','projected_crs','EPSG','6876','EPSG','1127','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6879','NAD83(2011) / Wisconsin Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14832',NULL,0); INSERT INTO "usage" VALUES('EPSG','5026','projected_crs','EPSG','6879','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6880','NAD83(2011) / Nebraska (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15396',NULL,0); INSERT INTO "usage" VALUES('EPSG','5027','projected_crs','EPSG','6880','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6884','NAD83(CORS96) / Oregon North',NULL,'EPSG','4499','EPSG','6783','EPSG','13631',NULL,0); INSERT INTO "usage" VALUES('EPSG','5031','projected_crs','EPSG','6884','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6885','NAD83(CORS96) / Oregon North (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','15351',NULL,0); INSERT INTO "usage" VALUES('EPSG','5032','projected_crs','EPSG','6885','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6886','NAD83(CORS96) / Oregon South',NULL,'EPSG','4499','EPSG','6783','EPSG','13632',NULL,0); INSERT INTO "usage" VALUES('EPSG','5033','projected_crs','EPSG','6886','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6887','NAD83(CORS96) / Oregon South (ft)',NULL,'EPSG','4495','EPSG','6783','EPSG','15352',NULL,0); INSERT INTO "usage" VALUES('EPSG','5034','projected_crs','EPSG','6887','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6915','South East Island 1943 / UTM zone 40N',NULL,'EPSG','4400','EPSG','6892','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','5038','projected_crs','EPSG','6915','EPSG','4183','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6922','NAD83 / Kansas LCC',NULL,'EPSG','4499','EPSG','4269','EPSG','6920',NULL,0); INSERT INTO "usage" VALUES('EPSG','5041','projected_crs','EPSG','6922','EPSG','1385','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6923','NAD83 / Kansas LCC (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','6921',NULL,0); INSERT INTO "usage" VALUES('EPSG','5042','projected_crs','EPSG','6923','EPSG','1385','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6924','NAD83(2011) / Kansas LCC',NULL,'EPSG','4499','EPSG','6318','EPSG','6920',NULL,0); INSERT INTO "usage" VALUES('EPSG','5043','projected_crs','EPSG','6924','EPSG','1385','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6925','NAD83(2011) / Kansas LCC (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','6921',NULL,0); INSERT INTO "usage" VALUES('EPSG','5044','projected_crs','EPSG','6925','EPSG','1385','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6931','WGS 84 / NSIDC EASE-Grid 2.0 North',NULL,'EPSG','4469','EPSG','4326','EPSG','6929',NULL,0); INSERT INTO "usage" VALUES('EPSG','5046','projected_crs','EPSG','6931','EPSG','3475','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','6932','WGS 84 / NSIDC EASE-Grid 2.0 South',NULL,'EPSG','4470','EPSG','4326','EPSG','6930',NULL,0); INSERT INTO "usage" VALUES('EPSG','5047','projected_crs','EPSG','6932','EPSG','3474','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','6933','WGS 84 / NSIDC EASE-Grid 2.0 Global',NULL,'EPSG','4499','EPSG','4326','EPSG','6928',NULL,0); INSERT INTO "usage" VALUES('EPSG','5048','projected_crs','EPSG','6933','EPSG','3463','EPSG','1195'); INSERT INTO "projected_crs" VALUES('EPSG','6956','VN-2000 / TM-3 zone 481',NULL,'EPSG','4400','EPSG','4756','EPSG','6952',NULL,1); INSERT INTO "usage" VALUES('EPSG','5050','projected_crs','EPSG','6956','EPSG','4193','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','6957','VN-2000 / TM-3 zone 482',NULL,'EPSG','4400','EPSG','4756','EPSG','6953',NULL,1); INSERT INTO "usage" VALUES('EPSG','5051','projected_crs','EPSG','6957','EPSG','4215','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','6958','VN-2000 / TM-3 zone 491',NULL,'EPSG','4400','EPSG','4756','EPSG','6954',NULL,1); INSERT INTO "usage" VALUES('EPSG','5052','projected_crs','EPSG','6958','EPSG','4217','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','6959','VN-2000 / TM-3 Da Nang zone',NULL,'EPSG','4400','EPSG','4756','EPSG','6955',NULL,1); INSERT INTO "usage" VALUES('EPSG','5053','projected_crs','EPSG','6959','EPSG','4218','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','6962','ETRS89 / Albania LCC 2010',NULL,'EPSG','4530','EPSG','4258','EPSG','6961',NULL,0); INSERT INTO "usage" VALUES('EPSG','5054','projected_crs','EPSG','6962','EPSG','3212','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','6966','NAD27 / Michigan North',NULL,'EPSG','4497','EPSG','4267','EPSG','6965',NULL,0); INSERT INTO "usage" VALUES('EPSG','5055','projected_crs','EPSG','6966','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','6984','Israeli Grid 05',NULL,'EPSG','4400','EPSG','6983','EPSG','18204',NULL,0); INSERT INTO "usage" VALUES('EPSG','5062','projected_crs','EPSG','6984','EPSG','2603','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6991','Israeli Grid 05/12',NULL,'EPSG','4400','EPSG','6990','EPSG','18204',NULL,0); INSERT INTO "usage" VALUES('EPSG','5069','projected_crs','EPSG','6991','EPSG','2603','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','6996','NAD83(2011) / San Francisco CS13',NULL,'EPSG','4499','EPSG','6318','EPSG','6994',NULL,1); INSERT INTO "usage" VALUES('EPSG','5070','projected_crs','EPSG','6996','EPSG','4228','EPSG','1194'); INSERT INTO "projected_crs" VALUES('EPSG','6997','NAD83(2011) / San Francisco CS13 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','6995',NULL,1); INSERT INTO "usage" VALUES('EPSG','5071','projected_crs','EPSG','6997','EPSG','4228','EPSG','1194'); INSERT INTO "projected_crs" VALUES('EPSG','7005','Nahrwan 1934 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4744','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','5072','projected_crs','EPSG','7005','EPSG','3387','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7006','Nahrwan 1934 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4744','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','5073','projected_crs','EPSG','7006','EPSG','3388','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7007','Nahrwan 1934 / UTM zone 39N',NULL,'EPSG','4400','EPSG','4744','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','5074','projected_crs','EPSG','7007','EPSG','3956','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7057','NAD83(2011) / IaRCS zone 1',NULL,'EPSG','4497','EPSG','6318','EPSG','7043',NULL,0); INSERT INTO "usage" VALUES('EPSG','5084','projected_crs','EPSG','7057','EPSG','4164','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7058','NAD83(2011) / IaRCS zone 2',NULL,'EPSG','4497','EPSG','6318','EPSG','7044',NULL,0); INSERT INTO "usage" VALUES('EPSG','5085','projected_crs','EPSG','7058','EPSG','4219','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7059','NAD83(2011) / IaRCS zone 3',NULL,'EPSG','4497','EPSG','6318','EPSG','7045',NULL,0); INSERT INTO "usage" VALUES('EPSG','5086','projected_crs','EPSG','7059','EPSG','4230','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7060','NAD83(2011) / IaRCS zone 4',NULL,'EPSG','4497','EPSG','6318','EPSG','7046',NULL,0); INSERT INTO "usage" VALUES('EPSG','5087','projected_crs','EPSG','7060','EPSG','4233','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7061','NAD83(2011) / IaRCS zone 5',NULL,'EPSG','4497','EPSG','6318','EPSG','7047',NULL,0); INSERT INTO "usage" VALUES('EPSG','5088','projected_crs','EPSG','7061','EPSG','4234','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7062','NAD83(2011) / IaRCS zone 6',NULL,'EPSG','4497','EPSG','6318','EPSG','7048',NULL,0); INSERT INTO "usage" VALUES('EPSG','5089','projected_crs','EPSG','7062','EPSG','4235','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7063','NAD83(2011) / IaRCS zone 7',NULL,'EPSG','4497','EPSG','6318','EPSG','7049',NULL,0); INSERT INTO "usage" VALUES('EPSG','5090','projected_crs','EPSG','7063','EPSG','4236','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7064','NAD83(2011) / IaRCS zone 8',NULL,'EPSG','4497','EPSG','6318','EPSG','7050',NULL,0); INSERT INTO "usage" VALUES('EPSG','5091','projected_crs','EPSG','7064','EPSG','4237','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7065','NAD83(2011) / IaRCS zone 9',NULL,'EPSG','4497','EPSG','6318','EPSG','7051',NULL,0); INSERT INTO "usage" VALUES('EPSG','5092','projected_crs','EPSG','7065','EPSG','4239','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7066','NAD83(2011) / IaRCS zone 10',NULL,'EPSG','4497','EPSG','6318','EPSG','7052',NULL,0); INSERT INTO "usage" VALUES('EPSG','5093','projected_crs','EPSG','7066','EPSG','4240','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7067','NAD83(2011) / IaRCS zone 11',NULL,'EPSG','4497','EPSG','6318','EPSG','7053',NULL,0); INSERT INTO "usage" VALUES('EPSG','5094','projected_crs','EPSG','7067','EPSG','4241','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7068','NAD83(2011) / IaRCS zone 12',NULL,'EPSG','4497','EPSG','6318','EPSG','7054',NULL,0); INSERT INTO "usage" VALUES('EPSG','5095','projected_crs','EPSG','7068','EPSG','4242','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7069','NAD83(2011) / IaRCS zone 13',NULL,'EPSG','4497','EPSG','6318','EPSG','7055',NULL,0); INSERT INTO "usage" VALUES('EPSG','5096','projected_crs','EPSG','7069','EPSG','4243','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7070','NAD83(2011) / IaRCS zone 14',NULL,'EPSG','4497','EPSG','6318','EPSG','7056',NULL,0); INSERT INTO "usage" VALUES('EPSG','5097','projected_crs','EPSG','7070','EPSG','4244','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','7074','RGTAAF07 / UTM zone 37S',NULL,'EPSG','4400','EPSG','7073','EPSG','16137',NULL,0); INSERT INTO "usage" VALUES('EPSG','5101','projected_crs','EPSG','7074','EPSG','3934','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7075','RGTAAF07 / UTM zone 38S',NULL,'EPSG','4400','EPSG','7073','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','5102','projected_crs','EPSG','7075','EPSG','4245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7076','RGTAAF07 / UTM zone 39S',NULL,'EPSG','4400','EPSG','7073','EPSG','16139',NULL,0); INSERT INTO "usage" VALUES('EPSG','5103','projected_crs','EPSG','7076','EPSG','4247','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7077','RGTAAF07 / UTM zone 40S',NULL,'EPSG','4400','EPSG','7073','EPSG','16140',NULL,0); INSERT INTO "usage" VALUES('EPSG','5104','projected_crs','EPSG','7077','EPSG','4248','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7078','RGTAAF07 / UTM zone 41S',NULL,'EPSG','4400','EPSG','7073','EPSG','16141',NULL,0); INSERT INTO "usage" VALUES('EPSG','5105','projected_crs','EPSG','7078','EPSG','4249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7079','RGTAAF07 / UTM zone 42S',NULL,'EPSG','4400','EPSG','7073','EPSG','16142',NULL,0); INSERT INTO "usage" VALUES('EPSG','5106','projected_crs','EPSG','7079','EPSG','4250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7080','RGTAAF07 / UTM zone 43S',NULL,'EPSG','4400','EPSG','7073','EPSG','16143',NULL,0); INSERT INTO "usage" VALUES('EPSG','5107','projected_crs','EPSG','7080','EPSG','4251','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7081','RGTAAF07 / UTM zone 44S',NULL,'EPSG','4400','EPSG','7073','EPSG','16144',NULL,0); INSERT INTO "usage" VALUES('EPSG','5108','projected_crs','EPSG','7081','EPSG','4252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7082','RGTAAF07 / Terre Adelie Polar Stereographic',NULL,'EPSG','4400','EPSG','7073','EPSG','19983',NULL,1); INSERT INTO "usage" VALUES('EPSG','5109','projected_crs','EPSG','7082','EPSG','2818','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7109','NAD83(2011) / RMTCRS St Mary (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7089',NULL,0); INSERT INTO "usage" VALUES('EPSG','5115','projected_crs','EPSG','7109','EPSG','4310','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7110','NAD83(2011) / RMTCRS Blackfeet (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7091',NULL,0); INSERT INTO "usage" VALUES('EPSG','5116','projected_crs','EPSG','7110','EPSG','4311','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7111','NAD83(2011) / RMTCRS Milk River (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7093',NULL,0); INSERT INTO "usage" VALUES('EPSG','5117','projected_crs','EPSG','7111','EPSG','4312','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7112','NAD83(2011) / RMTCRS Fort Belknap (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7095',NULL,0); INSERT INTO "usage" VALUES('EPSG','5118','projected_crs','EPSG','7112','EPSG','4313','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7113','NAD83(2011) / RMTCRS Fort Peck Assiniboine (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7097',NULL,0); INSERT INTO "usage" VALUES('EPSG','5119','projected_crs','EPSG','7113','EPSG','4314','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7114','NAD83(2011) / RMTCRS Fort Peck Sioux (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7099',NULL,0); INSERT INTO "usage" VALUES('EPSG','5120','projected_crs','EPSG','7114','EPSG','4315','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7115','NAD83(2011) / RMTCRS Crow (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7101',NULL,0); INSERT INTO "usage" VALUES('EPSG','5121','projected_crs','EPSG','7115','EPSG','4316','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7116','NAD83(2011) / RMTCRS Bobcat (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7103',NULL,0); INSERT INTO "usage" VALUES('EPSG','5122','projected_crs','EPSG','7116','EPSG','4317','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7117','NAD83(2011) / RMTCRS Billings (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7105',NULL,0); INSERT INTO "usage" VALUES('EPSG','5123','projected_crs','EPSG','7117','EPSG','4318','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7118','NAD83(2011) / RMTCRS Wind River (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7107',NULL,0); INSERT INTO "usage" VALUES('EPSG','5124','projected_crs','EPSG','7118','EPSG','4319','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7119','NAD83(2011) / RMTCRS St Mary (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7090',NULL,0); INSERT INTO "usage" VALUES('EPSG','5125','projected_crs','EPSG','7119','EPSG','4310','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7120','NAD83(2011) / RMTCRS Blackfeet (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7092',NULL,0); INSERT INTO "usage" VALUES('EPSG','5126','projected_crs','EPSG','7120','EPSG','4311','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7121','NAD83(2011) / RMTCRS Milk River (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7094',NULL,0); INSERT INTO "usage" VALUES('EPSG','5127','projected_crs','EPSG','7121','EPSG','4312','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7122','NAD83(2011) / RMTCRS Fort Belknap (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7096',NULL,0); INSERT INTO "usage" VALUES('EPSG','5128','projected_crs','EPSG','7122','EPSG','4313','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7123','NAD83(2011) / RMTCRS Fort Peck Assiniboine (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7098',NULL,0); INSERT INTO "usage" VALUES('EPSG','5129','projected_crs','EPSG','7123','EPSG','4314','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7124','NAD83(2011) / RMTCRS Fort Peck Sioux (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7100',NULL,0); INSERT INTO "usage" VALUES('EPSG','5130','projected_crs','EPSG','7124','EPSG','4315','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7125','NAD83(2011) / RMTCRS Crow (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7102',NULL,0); INSERT INTO "usage" VALUES('EPSG','5131','projected_crs','EPSG','7125','EPSG','4316','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7126','NAD83(2011) / RMTCRS Bobcat (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7104',NULL,0); INSERT INTO "usage" VALUES('EPSG','5132','projected_crs','EPSG','7126','EPSG','4317','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7127','NAD83(2011) / RMTCRS Billings (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','7106',NULL,0); INSERT INTO "usage" VALUES('EPSG','5133','projected_crs','EPSG','7127','EPSG','4318','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7128','NAD83(2011) / RMTCRS Wind River (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7108',NULL,0); INSERT INTO "usage" VALUES('EPSG','5134','projected_crs','EPSG','7128','EPSG','4319','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7131','NAD83(2011) / San Francisco CS13',NULL,'EPSG','4499','EPSG','6318','EPSG','7129',NULL,0); INSERT INTO "usage" VALUES('EPSG','5135','projected_crs','EPSG','7131','EPSG','4228','EPSG','1194'); INSERT INTO "projected_crs" VALUES('EPSG','7132','NAD83(2011) / San Francisco CS13 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7130',NULL,0); INSERT INTO "usage" VALUES('EPSG','5136','projected_crs','EPSG','7132','EPSG','4228','EPSG','1194'); INSERT INTO "projected_crs" VALUES('EPSG','7142','Palestine 1923 / Palestine Grid modified',NULL,'EPSG','4400','EPSG','4281','EPSG','7141',NULL,0); INSERT INTO "usage" VALUES('EPSG','5144','projected_crs','EPSG','7142','EPSG','1356','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7257','NAD83(2011) / InGCS Adams (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7143',NULL,0); INSERT INTO "usage" VALUES('EPSG','5145','projected_crs','EPSG','7257','EPSG','4289','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7258','NAD83(2011) / InGCS Adams (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7144',NULL,0); INSERT INTO "usage" VALUES('EPSG','5146','projected_crs','EPSG','7258','EPSG','4289','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7259','NAD83(2011) / InGCS Allen (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7145',NULL,0); INSERT INTO "usage" VALUES('EPSG','5147','projected_crs','EPSG','7259','EPSG','4285','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7260','NAD83(2011) / InGCS Allen (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7146',NULL,0); INSERT INTO "usage" VALUES('EPSG','5148','projected_crs','EPSG','7260','EPSG','4285','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7261','NAD83(2011) / InGCS Bartholomew (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7147',NULL,0); INSERT INTO "usage" VALUES('EPSG','5149','projected_crs','EPSG','7261','EPSG','4302','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7262','NAD83(2011) / InGCS Bartholomew (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7148',NULL,0); INSERT INTO "usage" VALUES('EPSG','5150','projected_crs','EPSG','7262','EPSG','4302','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7263','NAD83(2011) / InGCS Benton (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7149',NULL,0); INSERT INTO "usage" VALUES('EPSG','5151','projected_crs','EPSG','7263','EPSG','4256','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7264','NAD83(2011) / InGCS Benton (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7150',NULL,0); INSERT INTO "usage" VALUES('EPSG','5152','projected_crs','EPSG','7264','EPSG','4256','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7265','NAD83(2011) / InGCS Blackford-Delaware (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7151',NULL,0); INSERT INTO "usage" VALUES('EPSG','5153','projected_crs','EPSG','7265','EPSG','4291','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7266','NAD83(2011) / InGCS Blackford-Delaware (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7152',NULL,0); INSERT INTO "usage" VALUES('EPSG','5154','projected_crs','EPSG','7266','EPSG','4291','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7267','NAD83(2011) / InGCS Boone-Hendricks (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7153',NULL,0); INSERT INTO "usage" VALUES('EPSG','5155','projected_crs','EPSG','7267','EPSG','4263','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7268','NAD83(2011) / InGCS Boone-Hendricks (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7154',NULL,0); INSERT INTO "usage" VALUES('EPSG','5156','projected_crs','EPSG','7268','EPSG','4263','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7269','NAD83(2011) / InGCS Brown (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7155',NULL,0); INSERT INTO "usage" VALUES('EPSG','5157','projected_crs','EPSG','7269','EPSG','4301','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7270','NAD83(2011) / InGCS Brown (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7156',NULL,0); INSERT INTO "usage" VALUES('EPSG','5158','projected_crs','EPSG','7270','EPSG','4301','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7271','NAD83(2011) / InGCS Carroll (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7157',NULL,0); INSERT INTO "usage" VALUES('EPSG','5159','projected_crs','EPSG','7271','EPSG','4258','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7272','NAD83(2011) / InGCS Carroll (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7158',NULL,0); INSERT INTO "usage" VALUES('EPSG','5160','projected_crs','EPSG','7272','EPSG','4258','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7273','NAD83(2011) / InGCS Cass (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7159',NULL,0); INSERT INTO "usage" VALUES('EPSG','5161','projected_crs','EPSG','7273','EPSG','4286','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7274','NAD83(2011) / InGCS Cass (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7160',NULL,0); INSERT INTO "usage" VALUES('EPSG','5162','projected_crs','EPSG','7274','EPSG','4286','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7275','NAD83(2011) / InGCS Clark-Floyd-Scott (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7161',NULL,0); INSERT INTO "usage" VALUES('EPSG','5163','projected_crs','EPSG','7275','EPSG','4308','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7276','NAD83(2011) / InGCS Clark-Floyd-Scott (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7162',NULL,0); INSERT INTO "usage" VALUES('EPSG','5164','projected_crs','EPSG','7276','EPSG','4308','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7277','NAD83(2011) / InGCS Clay (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7163',NULL,0); INSERT INTO "usage" VALUES('EPSG','5165','projected_crs','EPSG','7277','EPSG','4265','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7278','NAD83(2011) / InGCS Clay (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7164',NULL,0); INSERT INTO "usage" VALUES('EPSG','5166','projected_crs','EPSG','7278','EPSG','4265','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7279','NAD83(2011) / InGCS Clinton (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7165',NULL,0); INSERT INTO "usage" VALUES('EPSG','5167','projected_crs','EPSG','7279','EPSG','4260','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7280','NAD83(2011) / InGCS Clinton (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7166',NULL,0); INSERT INTO "usage" VALUES('EPSG','5168','projected_crs','EPSG','7280','EPSG','4260','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7281','NAD83(2011) / InGCS Crawford-Lawrence-Orange (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7167',NULL,0); INSERT INTO "usage" VALUES('EPSG','5169','projected_crs','EPSG','7281','EPSG','4272','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7282','NAD83(2011) / InGCS Crawford-Lawrence-Orange (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7168',NULL,0); INSERT INTO "usage" VALUES('EPSG','5170','projected_crs','EPSG','7282','EPSG','4272','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7283','NAD83(2011) / InGCS Daviess-Greene (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7169',NULL,0); INSERT INTO "usage" VALUES('EPSG','5171','projected_crs','EPSG','7283','EPSG','4269','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7284','NAD83(2011) / InGCS Daviess-Greene (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7170',NULL,0); INSERT INTO "usage" VALUES('EPSG','5172','projected_crs','EPSG','7284','EPSG','4269','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7285','NAD83(2011) / InGCS Dearborn-Ohio-Switzerland (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7171',NULL,0); INSERT INTO "usage" VALUES('EPSG','5173','projected_crs','EPSG','7285','EPSG','4306','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7286','NAD83(2011) / InGCS Dearborn-Ohio-Switzerland (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7172',NULL,0); INSERT INTO "usage" VALUES('EPSG','5174','projected_crs','EPSG','7286','EPSG','4306','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7287','NAD83(2011) / InGCS Decatur-Rush (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7173',NULL,0); INSERT INTO "usage" VALUES('EPSG','5175','projected_crs','EPSG','7287','EPSG','4299','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7288','NAD83(2011) / InGCS Decatur-Rush (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7174',NULL,0); INSERT INTO "usage" VALUES('EPSG','5176','projected_crs','EPSG','7288','EPSG','4299','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7289','NAD83(2011) / InGCS DeKalb (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7175',NULL,0); INSERT INTO "usage" VALUES('EPSG','5177','projected_crs','EPSG','7289','EPSG','4283','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7290','NAD83(2011) / InGCS DeKalb (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7176',NULL,0); INSERT INTO "usage" VALUES('EPSG','5178','projected_crs','EPSG','7290','EPSG','4283','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7291','NAD83(2011) / InGCS Dubois-Martin (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7177',NULL,0); INSERT INTO "usage" VALUES('EPSG','5179','projected_crs','EPSG','7291','EPSG','4271','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7292','NAD83(2011) / InGCS Dubois-Martin (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7178',NULL,0); INSERT INTO "usage" VALUES('EPSG','5180','projected_crs','EPSG','7292','EPSG','4271','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7293','NAD83(2011) / InGCS Elkhart-Kosciusko-Wabash (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7179',NULL,0); INSERT INTO "usage" VALUES('EPSG','5181','projected_crs','EPSG','7293','EPSG','4280','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7294','NAD83(2011) / InGCS Elkhart-Kosciusko-Wabash (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7180',NULL,0); INSERT INTO "usage" VALUES('EPSG','5182','projected_crs','EPSG','7294','EPSG','4280','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7295','NAD83(2011) / InGCS Fayette-Franklin-Union (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7181',NULL,0); INSERT INTO "usage" VALUES('EPSG','5183','projected_crs','EPSG','7295','EPSG','4300','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7296','NAD83(2011) / InGCS Fayette-Franklin-Union (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7182',NULL,0); INSERT INTO "usage" VALUES('EPSG','5184','projected_crs','EPSG','7296','EPSG','4300','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7297','NAD83(2011) / InGCS Fountain-Warren (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7183',NULL,0); INSERT INTO "usage" VALUES('EPSG','5185','projected_crs','EPSG','7297','EPSG','4259','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7298','NAD83(2011) / InGCS Fountain-Warren (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7184',NULL,0); INSERT INTO "usage" VALUES('EPSG','5186','projected_crs','EPSG','7298','EPSG','4259','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7299','NAD83(2011) / InGCS Fulton-Marshall-St. Joseph (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7185',NULL,0); INSERT INTO "usage" VALUES('EPSG','5187','projected_crs','EPSG','7299','EPSG','4279','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7300','NAD83(2011) / InGCS Fulton-Marshall-St. Joseph (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7186',NULL,0); INSERT INTO "usage" VALUES('EPSG','5188','projected_crs','EPSG','7300','EPSG','4279','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7301','NAD83(2011) / InGCS Gibson (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7187',NULL,0); INSERT INTO "usage" VALUES('EPSG','5189','projected_crs','EPSG','7301','EPSG','4273','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7302','NAD83(2011) / InGCS Gibson (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7188',NULL,0); INSERT INTO "usage" VALUES('EPSG','5190','projected_crs','EPSG','7302','EPSG','4273','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7303','NAD83(2011) / InGCS Grant (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7189',NULL,0); INSERT INTO "usage" VALUES('EPSG','5191','projected_crs','EPSG','7303','EPSG','4290','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7304','NAD83(2011) / InGCS Grant (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7190',NULL,0); INSERT INTO "usage" VALUES('EPSG','5192','projected_crs','EPSG','7304','EPSG','4290','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7305','NAD83(2011) / InGCS Hamilton-Tipton (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7191',NULL,0); INSERT INTO "usage" VALUES('EPSG','5193','projected_crs','EPSG','7305','EPSG','4293','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7306','NAD83(2011) / InGCS Hamilton-Tipton (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7192',NULL,0); INSERT INTO "usage" VALUES('EPSG','5194','projected_crs','EPSG','7306','EPSG','4293','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7307','NAD83(2011) / InGCS Hancock-Madison (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7193',NULL,0); INSERT INTO "usage" VALUES('EPSG','5195','projected_crs','EPSG','7307','EPSG','4294','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7308','NAD83(2011) / InGCS Hancock-Madison (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7194',NULL,0); INSERT INTO "usage" VALUES('EPSG','5196','projected_crs','EPSG','7308','EPSG','4294','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7309','NAD83(2011) / InGCS Harrison-Washington (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7195',NULL,0); INSERT INTO "usage" VALUES('EPSG','5197','projected_crs','EPSG','7309','EPSG','4307','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7310','NAD83(2011) / InGCS Harrison-Washington (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7196',NULL,0); INSERT INTO "usage" VALUES('EPSG','5198','projected_crs','EPSG','7310','EPSG','4307','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7311','NAD83(2011) / InGCS Henry (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7197',NULL,0); INSERT INTO "usage" VALUES('EPSG','5199','projected_crs','EPSG','7311','EPSG','4296','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7312','NAD83(2011) / InGCS Henry (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7198',NULL,0); INSERT INTO "usage" VALUES('EPSG','5200','projected_crs','EPSG','7312','EPSG','4296','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7313','NAD83(2011) / InGCS Howard-Miami (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7199',NULL,0); INSERT INTO "usage" VALUES('EPSG','5201','projected_crs','EPSG','7313','EPSG','4287','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7314','NAD83(2011) / InGCS Howard-Miami (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7200',NULL,0); INSERT INTO "usage" VALUES('EPSG','5202','projected_crs','EPSG','7314','EPSG','4287','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7315','NAD83(2011) / InGCS Huntington-Whitley (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7201',NULL,0); INSERT INTO "usage" VALUES('EPSG','5203','projected_crs','EPSG','7315','EPSG','4284','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7316','NAD83(2011) / InGCS Huntington-Whitley (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7202',NULL,0); INSERT INTO "usage" VALUES('EPSG','5204','projected_crs','EPSG','7316','EPSG','4284','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7317','NAD83(2011) / InGCS Jackson (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7203',NULL,0); INSERT INTO "usage" VALUES('EPSG','5205','projected_crs','EPSG','7317','EPSG','4303','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7318','NAD83(2011) / InGCS Jackson (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7204',NULL,0); INSERT INTO "usage" VALUES('EPSG','5206','projected_crs','EPSG','7318','EPSG','4303','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7319','NAD83(2011) / InGCS Jasper-Porter (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7205',NULL,0); INSERT INTO "usage" VALUES('EPSG','5207','projected_crs','EPSG','7319','EPSG','4254','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7320','NAD83(2011) / InGCS Jasper-Porter (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7206',NULL,0); INSERT INTO "usage" VALUES('EPSG','5208','projected_crs','EPSG','7320','EPSG','4254','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7321','NAD83(2011) / InGCS Jay (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7207',NULL,0); INSERT INTO "usage" VALUES('EPSG','5209','projected_crs','EPSG','7321','EPSG','4292','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7322','NAD83(2011) / InGCS Jay (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7208',NULL,0); INSERT INTO "usage" VALUES('EPSG','5210','projected_crs','EPSG','7322','EPSG','4292','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7323','NAD83(2011) / InGCS Jefferson (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7209',NULL,0); INSERT INTO "usage" VALUES('EPSG','5211','projected_crs','EPSG','7323','EPSG','4309','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7324','NAD83(2011) / InGCS Jefferson (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7210',NULL,0); INSERT INTO "usage" VALUES('EPSG','5212','projected_crs','EPSG','7324','EPSG','4309','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7325','NAD83(2011) / InGCS Jennings (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7211',NULL,0); INSERT INTO "usage" VALUES('EPSG','5213','projected_crs','EPSG','7325','EPSG','4304','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7326','NAD83(2011) / InGCS Jennings (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7212',NULL,0); INSERT INTO "usage" VALUES('EPSG','5214','projected_crs','EPSG','7326','EPSG','4304','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7327','NAD83(2011) / InGCS Johnson-Marion (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7213',NULL,0); INSERT INTO "usage" VALUES('EPSG','5215','projected_crs','EPSG','7327','EPSG','4297','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7328','NAD83(2011) / InGCS Johnson-Marion (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7214',NULL,0); INSERT INTO "usage" VALUES('EPSG','5216','projected_crs','EPSG','7328','EPSG','4297','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7329','NAD83(2011) / InGCS Knox (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7215',NULL,0); INSERT INTO "usage" VALUES('EPSG','5217','projected_crs','EPSG','7329','EPSG','4270','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7330','NAD83(2011) / InGCS Knox (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7216',NULL,0); INSERT INTO "usage" VALUES('EPSG','5218','projected_crs','EPSG','7330','EPSG','4270','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7331','NAD83(2011) / InGCS LaGrange-Noble (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7217',NULL,0); INSERT INTO "usage" VALUES('EPSG','5219','projected_crs','EPSG','7331','EPSG','4281','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7332','NAD83(2011) / InGCS LaGrange-Noble (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7218',NULL,0); INSERT INTO "usage" VALUES('EPSG','5220','projected_crs','EPSG','7332','EPSG','4281','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7333','NAD83(2011) / InGCS Lake-Newton (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7219',NULL,0); INSERT INTO "usage" VALUES('EPSG','5221','projected_crs','EPSG','7333','EPSG','4253','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7334','NAD83(2011) / InGCS Lake-Newton (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7220',NULL,0); INSERT INTO "usage" VALUES('EPSG','5222','projected_crs','EPSG','7334','EPSG','4253','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7335','NAD83(2011) / InGCS LaPorte-Pulaski-Starke (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7221',NULL,0); INSERT INTO "usage" VALUES('EPSG','5223','projected_crs','EPSG','7335','EPSG','4255','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7336','NAD83(2011) / InGCS LaPorte-Pulaski-Starke (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7222',NULL,0); INSERT INTO "usage" VALUES('EPSG','5224','projected_crs','EPSG','7336','EPSG','4255','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7337','NAD83(2011) / InGCS Monroe-Morgan (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7223',NULL,0); INSERT INTO "usage" VALUES('EPSG','5225','projected_crs','EPSG','7337','EPSG','4267','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7338','NAD83(2011) / InGCS Monroe-Morgan (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7224',NULL,0); INSERT INTO "usage" VALUES('EPSG','5226','projected_crs','EPSG','7338','EPSG','4267','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7339','NAD83(2011) / InGCS Montgomery-Putnam (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7225',NULL,0); INSERT INTO "usage" VALUES('EPSG','5227','projected_crs','EPSG','7339','EPSG','4262','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7340','NAD83(2011) / InGCS Montgomery-Putnam (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7226',NULL,0); INSERT INTO "usage" VALUES('EPSG','5228','projected_crs','EPSG','7340','EPSG','4262','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7341','NAD83(2011) / InGCS Owen (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7227',NULL,0); INSERT INTO "usage" VALUES('EPSG','5229','projected_crs','EPSG','7341','EPSG','4266','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7342','NAD83(2011) / InGCS Owen (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7228',NULL,0); INSERT INTO "usage" VALUES('EPSG','5230','projected_crs','EPSG','7342','EPSG','4266','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7343','NAD83(2011) / InGCS Parke-Vermillion (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7229',NULL,0); INSERT INTO "usage" VALUES('EPSG','5231','projected_crs','EPSG','7343','EPSG','4261','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7344','NAD83(2011) / InGCS Parke-Vermillion (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7230',NULL,0); INSERT INTO "usage" VALUES('EPSG','5232','projected_crs','EPSG','7344','EPSG','4261','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7345','NAD83(2011) / InGCS Perry (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7231',NULL,0); INSERT INTO "usage" VALUES('EPSG','5233','projected_crs','EPSG','7345','EPSG','4278','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7346','NAD83(2011) / InGCS Perry (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7232',NULL,0); INSERT INTO "usage" VALUES('EPSG','5234','projected_crs','EPSG','7346','EPSG','4278','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7347','NAD83(2011) / InGCS Pike-Warrick (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7233',NULL,0); INSERT INTO "usage" VALUES('EPSG','5235','projected_crs','EPSG','7347','EPSG','4274','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7348','NAD83(2011) / InGCS Pike-Warrick (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7234',NULL,0); INSERT INTO "usage" VALUES('EPSG','5236','projected_crs','EPSG','7348','EPSG','4274','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7349','NAD83(2011) / InGCS Posey (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7235',NULL,0); INSERT INTO "usage" VALUES('EPSG','5237','projected_crs','EPSG','7349','EPSG','4275','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7350','NAD83(2011) / InGCS Posey (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7236',NULL,0); INSERT INTO "usage" VALUES('EPSG','5238','projected_crs','EPSG','7350','EPSG','4275','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7351','NAD83(2011) / InGCS Randolph-Wayne (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7237',NULL,0); INSERT INTO "usage" VALUES('EPSG','5239','projected_crs','EPSG','7351','EPSG','4295','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7352','NAD83(2011) / InGCS Randolph-Wayne (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7238',NULL,0); INSERT INTO "usage" VALUES('EPSG','5240','projected_crs','EPSG','7352','EPSG','4295','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7353','NAD83(2011) / InGCS Ripley (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7239',NULL,0); INSERT INTO "usage" VALUES('EPSG','5241','projected_crs','EPSG','7353','EPSG','4305','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7354','NAD83(2011) / InGCS Ripley (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7240',NULL,0); INSERT INTO "usage" VALUES('EPSG','5242','projected_crs','EPSG','7354','EPSG','4305','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7355','NAD83(2011) / InGCS Shelby (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7241',NULL,0); INSERT INTO "usage" VALUES('EPSG','5243','projected_crs','EPSG','7355','EPSG','4298','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7356','NAD83(2011) / InGCS Shelby (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7242',NULL,0); INSERT INTO "usage" VALUES('EPSG','5244','projected_crs','EPSG','7356','EPSG','4298','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7357','NAD83(2011) / InGCS Spencer (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7243',NULL,0); INSERT INTO "usage" VALUES('EPSG','5245','projected_crs','EPSG','7357','EPSG','4277','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7358','NAD83(2011) / InGCS Spencer (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7244',NULL,0); INSERT INTO "usage" VALUES('EPSG','5246','projected_crs','EPSG','7358','EPSG','4277','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7359','NAD83(2011) / InGCS Steuben (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7245',NULL,0); INSERT INTO "usage" VALUES('EPSG','5247','projected_crs','EPSG','7359','EPSG','4282','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7360','NAD83(2011) / InGCS Steuben (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7246',NULL,0); INSERT INTO "usage" VALUES('EPSG','5248','projected_crs','EPSG','7360','EPSG','4282','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7361','NAD83(2011) / InGCS Sullivan (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7247',NULL,0); INSERT INTO "usage" VALUES('EPSG','5249','projected_crs','EPSG','7361','EPSG','4268','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7362','NAD83(2011) / InGCS Sullivan (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7248',NULL,0); INSERT INTO "usage" VALUES('EPSG','5250','projected_crs','EPSG','7362','EPSG','4268','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7363','NAD83(2011) / InGCS Tippecanoe-White (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7249',NULL,0); INSERT INTO "usage" VALUES('EPSG','5251','projected_crs','EPSG','7363','EPSG','4257','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7364','NAD83(2011) / InGCS Tippecanoe-White (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7250',NULL,0); INSERT INTO "usage" VALUES('EPSG','5252','projected_crs','EPSG','7364','EPSG','4257','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7365','NAD83(2011) / InGCS Vanderburgh (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7251',NULL,0); INSERT INTO "usage" VALUES('EPSG','5253','projected_crs','EPSG','7365','EPSG','4276','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7366','NAD83(2011) / InGCS Vanderburgh (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7252',NULL,0); INSERT INTO "usage" VALUES('EPSG','5254','projected_crs','EPSG','7366','EPSG','4276','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7367','NAD83(2011) / InGCS Vigo (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7253',NULL,0); INSERT INTO "usage" VALUES('EPSG','5255','projected_crs','EPSG','7367','EPSG','4264','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7368','NAD83(2011) / InGCS Vigo (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7254',NULL,0); INSERT INTO "usage" VALUES('EPSG','5256','projected_crs','EPSG','7368','EPSG','4264','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7369','NAD83(2011) / InGCS Wells (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7255',NULL,0); INSERT INTO "usage" VALUES('EPSG','5257','projected_crs','EPSG','7369','EPSG','4288','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7370','NAD83(2011) / InGCS Wells (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7256',NULL,0); INSERT INTO "usage" VALUES('EPSG','5258','projected_crs','EPSG','7370','EPSG','4288','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7374','ONGD14 / UTM zone 39N',NULL,'EPSG','4400','EPSG','7373','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','5262','projected_crs','EPSG','7374','EPSG','4322','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','7375','ONGD14 / UTM zone 40N',NULL,'EPSG','4400','EPSG','7373','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','5263','projected_crs','EPSG','7375','EPSG','4323','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','7376','ONGD14 / UTM zone 41N',NULL,'EPSG','4400','EPSG','7373','EPSG','16041',NULL,0); INSERT INTO "usage" VALUES('EPSG','5264','projected_crs','EPSG','7376','EPSG','4324','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','7528','NAD83(2011) / WISCRS Adams and Juneau (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7484',NULL,0); INSERT INTO "usage" VALUES('EPSG','5291','projected_crs','EPSG','7528','EPSG','4360','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7529','NAD83(2011) / WISCRS Ashland (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7378',NULL,0); INSERT INTO "usage" VALUES('EPSG','5292','projected_crs','EPSG','7529','EPSG','4320','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7530','NAD83(2011) / WISCRS Barron (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7426',NULL,0); INSERT INTO "usage" VALUES('EPSG','5293','projected_crs','EPSG','7530','EPSG','4331','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7531','NAD83(2011) / WISCRS Bayfield (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7380',NULL,0); INSERT INTO "usage" VALUES('EPSG','5294','projected_crs','EPSG','7531','EPSG','4321','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7532','NAD83(2011) / WISCRS Brown (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7428',NULL,0); INSERT INTO "usage" VALUES('EPSG','5295','projected_crs','EPSG','7532','EPSG','4336','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7533','NAD83(2011) / WISCRS Buffalo (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7430',NULL,0); INSERT INTO "usage" VALUES('EPSG','5296','projected_crs','EPSG','7533','EPSG','4337','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7534','NAD83(2011) / WISCRS Burnett (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7382',NULL,0); INSERT INTO "usage" VALUES('EPSG','5297','projected_crs','EPSG','7534','EPSG','4325','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7535','NAD83(2011) / WISCRS Calumet, Fond du Lac, Outagamie and Winnebago (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7486',NULL,0); INSERT INTO "usage" VALUES('EPSG','5298','projected_crs','EPSG','7535','EPSG','4361','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7536','NAD83(2011) / WISCRS Chippewa (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7432',NULL,0); INSERT INTO "usage" VALUES('EPSG','5299','projected_crs','EPSG','7536','EPSG','4338','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7537','NAD83(2011) / WISCRS Clark (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7434',NULL,0); INSERT INTO "usage" VALUES('EPSG','5300','projected_crs','EPSG','7537','EPSG','4339','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7538','NAD83(2011) / WISCRS Columbia (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7488',NULL,0); INSERT INTO "usage" VALUES('EPSG','5301','projected_crs','EPSG','7538','EPSG','4362','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7539','NAD83(2011) / WISCRS Crawford (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7490',NULL,0); INSERT INTO "usage" VALUES('EPSG','5302','projected_crs','EPSG','7539','EPSG','4363','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7540','NAD83(2011) / WISCRS Dane (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7492',NULL,0); INSERT INTO "usage" VALUES('EPSG','5303','projected_crs','EPSG','7540','EPSG','4364','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7541','NAD83(2011) / WISCRS Dodge and Jefferson (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7494',NULL,0); INSERT INTO "usage" VALUES('EPSG','5304','projected_crs','EPSG','7541','EPSG','4365','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7542','NAD83(2011) / WISCRS Door (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7436',NULL,0); INSERT INTO "usage" VALUES('EPSG','5305','projected_crs','EPSG','7542','EPSG','4340','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7543','NAD83(2011) / WISCRS Douglas (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7384',NULL,0); INSERT INTO "usage" VALUES('EPSG','5306','projected_crs','EPSG','7543','EPSG','4326','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7544','NAD83(2011) / WISCRS Dunn (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7438',NULL,0); INSERT INTO "usage" VALUES('EPSG','5307','projected_crs','EPSG','7544','EPSG','4341','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7545','NAD83(2011) / WISCRS Eau Claire (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7440',NULL,0); INSERT INTO "usage" VALUES('EPSG','5308','projected_crs','EPSG','7545','EPSG','4342','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7546','NAD83(2011) / WISCRS Florence (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7386',NULL,0); INSERT INTO "usage" VALUES('EPSG','5309','projected_crs','EPSG','7546','EPSG','4327','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7547','NAD83(2011) / WISCRS Forest (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7388',NULL,0); INSERT INTO "usage" VALUES('EPSG','5310','projected_crs','EPSG','7547','EPSG','4328','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7548','NAD83(2011) / WISCRS Grant (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7496',NULL,0); INSERT INTO "usage" VALUES('EPSG','5311','projected_crs','EPSG','7548','EPSG','4366','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7549','NAD83(2011) / WISCRS Green and Lafayette (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7498',NULL,0); INSERT INTO "usage" VALUES('EPSG','5312','projected_crs','EPSG','7549','EPSG','4367','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7550','NAD83(2011) / WISCRS Green Lake and Marquette (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7500',NULL,0); INSERT INTO "usage" VALUES('EPSG','5313','projected_crs','EPSG','7550','EPSG','4368','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7551','NAD83(2011) / WISCRS Iowa (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7502',NULL,0); INSERT INTO "usage" VALUES('EPSG','5314','projected_crs','EPSG','7551','EPSG','4369','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7552','NAD83(2011) / WISCRS Iron (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7390',NULL,0); INSERT INTO "usage" VALUES('EPSG','5315','projected_crs','EPSG','7552','EPSG','4329','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7553','NAD83(2011) / WISCRS Jackson (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7450',NULL,0); INSERT INTO "usage" VALUES('EPSG','5316','projected_crs','EPSG','7553','EPSG','4343','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7554','NAD83(2011) / WISCRS Kenosha, Milwaukee, Ozaukee and Racine (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7504',NULL,0); INSERT INTO "usage" VALUES('EPSG','5317','projected_crs','EPSG','7554','EPSG','4370','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7555','NAD83(2011) / WISCRS Kewaunee, Manitowoc and Sheboygan (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7506',NULL,0); INSERT INTO "usage" VALUES('EPSG','5318','projected_crs','EPSG','7555','EPSG','4371','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7556','NAD83(2011) / WISCRS La Crosse (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7508',NULL,0); INSERT INTO "usage" VALUES('EPSG','5319','projected_crs','EPSG','7556','EPSG','4372','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7557','NAD83(2011) / WISCRS Langlade (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7452',NULL,0); INSERT INTO "usage" VALUES('EPSG','5320','projected_crs','EPSG','7557','EPSG','4344','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7558','NAD83(2011) / WISCRS Lincoln (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7454',NULL,0); INSERT INTO "usage" VALUES('EPSG','5321','projected_crs','EPSG','7558','EPSG','4345','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7559','NAD83(2011) / WISCRS Marathon (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7456',NULL,0); INSERT INTO "usage" VALUES('EPSG','5322','projected_crs','EPSG','7559','EPSG','4346','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7560','NAD83(2011) / WISCRS Marinette (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7458',NULL,0); INSERT INTO "usage" VALUES('EPSG','5323','projected_crs','EPSG','7560','EPSG','4347','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7561','NAD83(2011) / WISCRS Menominee (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7460',NULL,0); INSERT INTO "usage" VALUES('EPSG','5324','projected_crs','EPSG','7561','EPSG','4348','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7562','NAD83(2011) / WISCRS Monroe (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7510',NULL,0); INSERT INTO "usage" VALUES('EPSG','5325','projected_crs','EPSG','7562','EPSG','4373','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7563','NAD83(2011) / WISCRS Oconto (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7462',NULL,0); INSERT INTO "usage" VALUES('EPSG','5326','projected_crs','EPSG','7563','EPSG','4349','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7564','NAD83(2011) / WISCRS Oneida (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7392',NULL,0); INSERT INTO "usage" VALUES('EPSG','5327','projected_crs','EPSG','7564','EPSG','4330','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7565','NAD83(2011) / WISCRS Pepin and Pierce (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7464',NULL,0); INSERT INTO "usage" VALUES('EPSG','5328','projected_crs','EPSG','7565','EPSG','4350','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7566','NAD83(2011) / WISCRS Polk (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7466',NULL,0); INSERT INTO "usage" VALUES('EPSG','5329','projected_crs','EPSG','7566','EPSG','4351','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7567','NAD83(2011) / WISCRS Portage (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7468',NULL,0); INSERT INTO "usage" VALUES('EPSG','5330','projected_crs','EPSG','7567','EPSG','4352','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7568','NAD83(2011) / WISCRS Price (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7394',NULL,0); INSERT INTO "usage" VALUES('EPSG','5331','projected_crs','EPSG','7568','EPSG','4332','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7569','NAD83(2011) / WISCRS Richland (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7512',NULL,0); INSERT INTO "usage" VALUES('EPSG','5332','projected_crs','EPSG','7569','EPSG','4374','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7570','NAD83(2011) / WISCRS Rock (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7514',NULL,0); INSERT INTO "usage" VALUES('EPSG','5333','projected_crs','EPSG','7570','EPSG','4375','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7571','NAD83(2011) / WISCRS Rusk (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7470',NULL,0); INSERT INTO "usage" VALUES('EPSG','5334','projected_crs','EPSG','7571','EPSG','4353','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7572','NAD83(2011) / WISCRS Sauk (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7516',NULL,0); INSERT INTO "usage" VALUES('EPSG','5335','projected_crs','EPSG','7572','EPSG','4376','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7573','NAD83(2011) / WISCRS Sawyer (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7396',NULL,0); INSERT INTO "usage" VALUES('EPSG','5336','projected_crs','EPSG','7573','EPSG','4333','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7574','NAD83(2011) / WISCRS Shawano (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7472',NULL,0); INSERT INTO "usage" VALUES('EPSG','5337','projected_crs','EPSG','7574','EPSG','4354','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7575','NAD83(2011) / WISCRS St. Croix (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7474',NULL,0); INSERT INTO "usage" VALUES('EPSG','5338','projected_crs','EPSG','7575','EPSG','4355','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7576','NAD83(2011) / WISCRS Taylor (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7476',NULL,0); INSERT INTO "usage" VALUES('EPSG','5339','projected_crs','EPSG','7576','EPSG','4356','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7577','NAD83(2011) / WISCRS Trempealeau (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7478',NULL,0); INSERT INTO "usage" VALUES('EPSG','5340','projected_crs','EPSG','7577','EPSG','4357','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7578','NAD83(2011) / WISCRS Vernon (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7518',NULL,0); INSERT INTO "usage" VALUES('EPSG','5341','projected_crs','EPSG','7578','EPSG','4377','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7579','NAD83(2011) / WISCRS Vilas (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7398',NULL,0); INSERT INTO "usage" VALUES('EPSG','5342','projected_crs','EPSG','7579','EPSG','4334','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7580','NAD83(2011) / WISCRS Walworth (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7520',NULL,0); INSERT INTO "usage" VALUES('EPSG','5343','projected_crs','EPSG','7580','EPSG','4378','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7581','NAD83(2011) / WISCRS Washburn (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7424',NULL,0); INSERT INTO "usage" VALUES('EPSG','5344','projected_crs','EPSG','7581','EPSG','4335','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7582','NAD83(2011) / WISCRS Washington (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7522',NULL,0); INSERT INTO "usage" VALUES('EPSG','5345','projected_crs','EPSG','7582','EPSG','4379','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7583','NAD83(2011) / WISCRS Waukesha (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7524',NULL,0); INSERT INTO "usage" VALUES('EPSG','5346','projected_crs','EPSG','7583','EPSG','4380','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7584','NAD83(2011) / WISCRS Waupaca (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7480',NULL,0); INSERT INTO "usage" VALUES('EPSG','5347','projected_crs','EPSG','7584','EPSG','4358','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7585','NAD83(2011) / WISCRS Waushara (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7526',NULL,0); INSERT INTO "usage" VALUES('EPSG','5348','projected_crs','EPSG','7585','EPSG','4381','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7586','NAD83(2011) / WISCRS Wood (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','7482',NULL,0); INSERT INTO "usage" VALUES('EPSG','5349','projected_crs','EPSG','7586','EPSG','4359','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7587','NAD83(2011) / WISCRS Adams and Juneau (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7485',NULL,0); INSERT INTO "usage" VALUES('EPSG','5350','projected_crs','EPSG','7587','EPSG','4360','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7588','NAD83(2011) / WISCRS Ashland (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7379',NULL,0); INSERT INTO "usage" VALUES('EPSG','5351','projected_crs','EPSG','7588','EPSG','4320','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7589','NAD83(2011) / WISCRS Barron (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7427',NULL,0); INSERT INTO "usage" VALUES('EPSG','5352','projected_crs','EPSG','7589','EPSG','4331','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7590','NAD83(2011) / WISCRS Bayfield (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7381',NULL,0); INSERT INTO "usage" VALUES('EPSG','5353','projected_crs','EPSG','7590','EPSG','4321','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7591','NAD83(2011) / WISCRS Brown (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7429',NULL,0); INSERT INTO "usage" VALUES('EPSG','5354','projected_crs','EPSG','7591','EPSG','4336','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7592','NAD83(2011) / WISCRS Buffalo (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7431',NULL,0); INSERT INTO "usage" VALUES('EPSG','5355','projected_crs','EPSG','7592','EPSG','4337','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7593','NAD83(2011) / WISCRS Burnett (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7383',NULL,0); INSERT INTO "usage" VALUES('EPSG','5356','projected_crs','EPSG','7593','EPSG','4325','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7594','NAD83(2011) / WISCRS Calumet, Fond du Lac, Outagamie and Winnebago (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7487',NULL,0); INSERT INTO "usage" VALUES('EPSG','5357','projected_crs','EPSG','7594','EPSG','4361','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7595','NAD83(2011) / WISCRS Chippewa (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7433',NULL,0); INSERT INTO "usage" VALUES('EPSG','5358','projected_crs','EPSG','7595','EPSG','4338','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7596','NAD83(2011) / WISCRS Clark (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7435',NULL,0); INSERT INTO "usage" VALUES('EPSG','5359','projected_crs','EPSG','7596','EPSG','4339','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7597','NAD83(2011) / WISCRS Columbia (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7489',NULL,0); INSERT INTO "usage" VALUES('EPSG','5360','projected_crs','EPSG','7597','EPSG','4362','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7598','NAD83(2011) / WISCRS Crawford (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7491',NULL,0); INSERT INTO "usage" VALUES('EPSG','5361','projected_crs','EPSG','7598','EPSG','4363','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7599','NAD83(2011) / WISCRS Dane (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7493',NULL,0); INSERT INTO "usage" VALUES('EPSG','5362','projected_crs','EPSG','7599','EPSG','4364','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7600','NAD83(2011) / WISCRS Dodge and Jefferson (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7495',NULL,0); INSERT INTO "usage" VALUES('EPSG','5363','projected_crs','EPSG','7600','EPSG','4365','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7601','NAD83(2011) / WISCRS Door (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7437',NULL,0); INSERT INTO "usage" VALUES('EPSG','5364','projected_crs','EPSG','7601','EPSG','4340','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7602','NAD83(2011) / WISCRS Douglas (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7385',NULL,0); INSERT INTO "usage" VALUES('EPSG','5365','projected_crs','EPSG','7602','EPSG','4326','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7603','NAD83(2011) / WISCRS Dunn (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7439',NULL,0); INSERT INTO "usage" VALUES('EPSG','5366','projected_crs','EPSG','7603','EPSG','4341','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7604','NAD83(2011) / WISCRS Eau Claire (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7441',NULL,0); INSERT INTO "usage" VALUES('EPSG','5367','projected_crs','EPSG','7604','EPSG','4342','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7605','NAD83(2011) / WISCRS Florence (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7387',NULL,0); INSERT INTO "usage" VALUES('EPSG','5368','projected_crs','EPSG','7605','EPSG','4327','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7606','NAD83(2011) / WISCRS Forest (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7389',NULL,0); INSERT INTO "usage" VALUES('EPSG','5369','projected_crs','EPSG','7606','EPSG','4328','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7607','NAD83(2011) / WISCRS Grant (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7497',NULL,0); INSERT INTO "usage" VALUES('EPSG','5370','projected_crs','EPSG','7607','EPSG','4366','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7608','NAD83(2011) / WISCRS Green and Lafayette (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7499',NULL,0); INSERT INTO "usage" VALUES('EPSG','5371','projected_crs','EPSG','7608','EPSG','4367','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7609','NAD83(2011) / WISCRS Green Lake and Marquette (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7501',NULL,0); INSERT INTO "usage" VALUES('EPSG','5372','projected_crs','EPSG','7609','EPSG','4368','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7610','NAD83(2011) / WISCRS Iowa (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7503',NULL,0); INSERT INTO "usage" VALUES('EPSG','5373','projected_crs','EPSG','7610','EPSG','4369','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7611','NAD83(2011) / WISCRS Iron (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7391',NULL,0); INSERT INTO "usage" VALUES('EPSG','5374','projected_crs','EPSG','7611','EPSG','4329','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7612','NAD83(2011) / WISCRS Jackson (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7451',NULL,0); INSERT INTO "usage" VALUES('EPSG','5375','projected_crs','EPSG','7612','EPSG','4343','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7613','NAD83(2011) / WISCRS Kenosha, Milwaukee, Ozaukee and Racine (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7505',NULL,0); INSERT INTO "usage" VALUES('EPSG','5376','projected_crs','EPSG','7613','EPSG','4370','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7614','NAD83(2011) / WISCRS Kewaunee, Manitowoc and Sheboygan (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7507',NULL,0); INSERT INTO "usage" VALUES('EPSG','5377','projected_crs','EPSG','7614','EPSG','4371','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7615','NAD83(2011) / WISCRS La Crosse (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7509',NULL,0); INSERT INTO "usage" VALUES('EPSG','5378','projected_crs','EPSG','7615','EPSG','4372','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7616','NAD83(2011) / WISCRS Langlade (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7453',NULL,0); INSERT INTO "usage" VALUES('EPSG','5379','projected_crs','EPSG','7616','EPSG','4344','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7617','NAD83(2011) / WISCRS Lincoln (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7455',NULL,0); INSERT INTO "usage" VALUES('EPSG','5380','projected_crs','EPSG','7617','EPSG','4345','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7618','NAD83(2011) / WISCRS Marathon (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7457',NULL,0); INSERT INTO "usage" VALUES('EPSG','5381','projected_crs','EPSG','7618','EPSG','4346','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7619','NAD83(2011) / WISCRS Marinette (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7459',NULL,0); INSERT INTO "usage" VALUES('EPSG','5382','projected_crs','EPSG','7619','EPSG','4347','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7620','NAD83(2011) / WISCRS Menominee (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7461',NULL,0); INSERT INTO "usage" VALUES('EPSG','5383','projected_crs','EPSG','7620','EPSG','4348','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7621','NAD83(2011) / WISCRS Monroe (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7511',NULL,0); INSERT INTO "usage" VALUES('EPSG','5384','projected_crs','EPSG','7621','EPSG','4373','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7622','NAD83(2011) / WISCRS Oconto (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7463',NULL,0); INSERT INTO "usage" VALUES('EPSG','5385','projected_crs','EPSG','7622','EPSG','4349','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7623','NAD83(2011) / WISCRS Oneida (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7393',NULL,0); INSERT INTO "usage" VALUES('EPSG','5386','projected_crs','EPSG','7623','EPSG','4330','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7624','NAD83(2011) / WISCRS Pepin and Pierce (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7465',NULL,0); INSERT INTO "usage" VALUES('EPSG','5387','projected_crs','EPSG','7624','EPSG','4350','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7625','NAD83(2011) / WISCRS Polk (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7467',NULL,0); INSERT INTO "usage" VALUES('EPSG','5388','projected_crs','EPSG','7625','EPSG','4351','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7626','NAD83(2011) / WISCRS Portage (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7469',NULL,0); INSERT INTO "usage" VALUES('EPSG','5389','projected_crs','EPSG','7626','EPSG','4352','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7627','NAD83(2011) / WISCRS Price (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7395',NULL,0); INSERT INTO "usage" VALUES('EPSG','5390','projected_crs','EPSG','7627','EPSG','4332','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7628','NAD83(2011) / WISCRS Richland (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7513',NULL,0); INSERT INTO "usage" VALUES('EPSG','5391','projected_crs','EPSG','7628','EPSG','4374','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7629','NAD83(2011) / WISCRS Rock (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7515',NULL,0); INSERT INTO "usage" VALUES('EPSG','5392','projected_crs','EPSG','7629','EPSG','4375','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7630','NAD83(2011) / WISCRS Rusk (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7471',NULL,0); INSERT INTO "usage" VALUES('EPSG','5393','projected_crs','EPSG','7630','EPSG','4353','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7631','NAD83(2011) / WISCRS Sauk (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7517',NULL,0); INSERT INTO "usage" VALUES('EPSG','5394','projected_crs','EPSG','7631','EPSG','4376','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7632','NAD83(2011) / WISCRS Sawyer (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7397',NULL,0); INSERT INTO "usage" VALUES('EPSG','5395','projected_crs','EPSG','7632','EPSG','4333','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7633','NAD83(2011) / WISCRS Shawano (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7473',NULL,0); INSERT INTO "usage" VALUES('EPSG','5396','projected_crs','EPSG','7633','EPSG','4354','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7634','NAD83(2011) / WISCRS St. Croix (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7475',NULL,0); INSERT INTO "usage" VALUES('EPSG','5397','projected_crs','EPSG','7634','EPSG','4355','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7635','NAD83(2011) / WISCRS Taylor (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7477',NULL,0); INSERT INTO "usage" VALUES('EPSG','5398','projected_crs','EPSG','7635','EPSG','4356','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7636','NAD83(2011) / WISCRS Trempealeau (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7479',NULL,0); INSERT INTO "usage" VALUES('EPSG','5399','projected_crs','EPSG','7636','EPSG','4357','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7637','NAD83(2011) / WISCRS Vernon (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7519',NULL,0); INSERT INTO "usage" VALUES('EPSG','5400','projected_crs','EPSG','7637','EPSG','4377','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7638','NAD83(2011) / WISCRS Vilas (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7399',NULL,0); INSERT INTO "usage" VALUES('EPSG','5401','projected_crs','EPSG','7638','EPSG','4334','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7639','NAD83(2011) / WISCRS Walworth (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7521',NULL,0); INSERT INTO "usage" VALUES('EPSG','5402','projected_crs','EPSG','7639','EPSG','4378','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7640','NAD83(2011) / WISCRS Washburn (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7425',NULL,0); INSERT INTO "usage" VALUES('EPSG','5403','projected_crs','EPSG','7640','EPSG','4335','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7641','NAD83(2011) / WISCRS Washington (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7523',NULL,0); INSERT INTO "usage" VALUES('EPSG','5404','projected_crs','EPSG','7641','EPSG','4379','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7642','NAD83(2011) / WISCRS Waukesha (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7525',NULL,0); INSERT INTO "usage" VALUES('EPSG','5405','projected_crs','EPSG','7642','EPSG','4380','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7643','NAD83(2011) / WISCRS Waupaca (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7481',NULL,0); INSERT INTO "usage" VALUES('EPSG','5406','projected_crs','EPSG','7643','EPSG','4358','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7644','NAD83(2011) / WISCRS Waushara (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7527',NULL,0); INSERT INTO "usage" VALUES('EPSG','5407','projected_crs','EPSG','7644','EPSG','4381','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7645','NAD83(2011) / WISCRS Wood (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','7483',NULL,0); INSERT INTO "usage" VALUES('EPSG','5408','projected_crs','EPSG','7645','EPSG','4359','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','7692','Kyrg-06 / zone 1',NULL,'EPSG','4400','EPSG','7686','EPSG','7687',NULL,0); INSERT INTO "usage" VALUES('EPSG','5431','projected_crs','EPSG','7692','EPSG','4385','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','7693','Kyrg-06 / zone 2',NULL,'EPSG','4400','EPSG','7686','EPSG','7688',NULL,0); INSERT INTO "usage" VALUES('EPSG','5432','projected_crs','EPSG','7693','EPSG','4386','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','7694','Kyrg-06 / zone 3',NULL,'EPSG','4400','EPSG','7686','EPSG','7689',NULL,0); INSERT INTO "usage" VALUES('EPSG','5433','projected_crs','EPSG','7694','EPSG','4387','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','7695','Kyrg-06 / zone 4',NULL,'EPSG','4400','EPSG','7686','EPSG','7690',NULL,0); INSERT INTO "usage" VALUES('EPSG','5434','projected_crs','EPSG','7695','EPSG','4388','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','7696','Kyrg-06 / zone 5',NULL,'EPSG','4400','EPSG','7686','EPSG','7691',NULL,0); INSERT INTO "usage" VALUES('EPSG','5435','projected_crs','EPSG','7696','EPSG','4389','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','7755','WGS 84 / India NSF LCC',NULL,'EPSG','4499','EPSG','4326','EPSG','7722',NULL,0); INSERT INTO "usage" VALUES('EPSG','5440','projected_crs','EPSG','7755','EPSG','1121','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7756','WGS 84 / Andhra Pradesh',NULL,'EPSG','4499','EPSG','4326','EPSG','7723',NULL,0); INSERT INTO "usage" VALUES('EPSG','5441','projected_crs','EPSG','7756','EPSG','4394','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7757','WGS 84 / Arunachal Pradesh',NULL,'EPSG','4499','EPSG','4326','EPSG','7724',NULL,0); INSERT INTO "usage" VALUES('EPSG','5442','projected_crs','EPSG','7757','EPSG','4395','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7758','WGS 84 / Assam',NULL,'EPSG','4499','EPSG','4326','EPSG','7725',NULL,0); INSERT INTO "usage" VALUES('EPSG','5443','projected_crs','EPSG','7758','EPSG','4396','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7759','WGS 84 / Bihar',NULL,'EPSG','4499','EPSG','4326','EPSG','7726',NULL,0); INSERT INTO "usage" VALUES('EPSG','5444','projected_crs','EPSG','7759','EPSG','4397','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7760','WGS 84 / Delhi',NULL,'EPSG','4499','EPSG','4326','EPSG','7727',NULL,0); INSERT INTO "usage" VALUES('EPSG','5445','projected_crs','EPSG','7760','EPSG','4422','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7761','WGS 84 / Gujarat',NULL,'EPSG','4499','EPSG','4326','EPSG','7728',NULL,0); INSERT INTO "usage" VALUES('EPSG','5446','projected_crs','EPSG','7761','EPSG','4400','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7762','WGS 84 / Haryana',NULL,'EPSG','4499','EPSG','4326','EPSG','7729',NULL,0); INSERT INTO "usage" VALUES('EPSG','5447','projected_crs','EPSG','7762','EPSG','4401','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7763','WGS 84 / Himachal Pradesh',NULL,'EPSG','4499','EPSG','4326','EPSG','7730',NULL,0); INSERT INTO "usage" VALUES('EPSG','5448','projected_crs','EPSG','7763','EPSG','4402','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7764','WGS 84 / Jammu and Kashmir',NULL,'EPSG','4499','EPSG','4326','EPSG','7731',NULL,0); INSERT INTO "usage" VALUES('EPSG','5449','projected_crs','EPSG','7764','EPSG','4403','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7765','WGS 84 / Jharkhand',NULL,'EPSG','4499','EPSG','4326','EPSG','7732',NULL,0); INSERT INTO "usage" VALUES('EPSG','5450','projected_crs','EPSG','7765','EPSG','4404','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7766','WGS 84 / Madhya Pradesh',NULL,'EPSG','4499','EPSG','4326','EPSG','7733',NULL,0); INSERT INTO "usage" VALUES('EPSG','5451','projected_crs','EPSG','7766','EPSG','4407','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7767','WGS 84 / Maharashtra',NULL,'EPSG','4499','EPSG','4326','EPSG','7734',NULL,0); INSERT INTO "usage" VALUES('EPSG','5452','projected_crs','EPSG','7767','EPSG','4408','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7768','WGS 84 / Manipur',NULL,'EPSG','4499','EPSG','4326','EPSG','7735',NULL,0); INSERT INTO "usage" VALUES('EPSG','5453','projected_crs','EPSG','7768','EPSG','4409','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7769','WGS 84 / Meghalaya',NULL,'EPSG','4499','EPSG','4326','EPSG','7736',NULL,0); INSERT INTO "usage" VALUES('EPSG','5454','projected_crs','EPSG','7769','EPSG','4410','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7770','WGS 84 / Nagaland',NULL,'EPSG','4499','EPSG','4326','EPSG','7737',NULL,0); INSERT INTO "usage" VALUES('EPSG','5455','projected_crs','EPSG','7770','EPSG','4412','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7771','WGS 84 / India Northeast',NULL,'EPSG','4499','EPSG','4326','EPSG','7738',NULL,0); INSERT INTO "usage" VALUES('EPSG','5456','projected_crs','EPSG','7771','EPSG','4392','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7772','WGS 84 / Orissa',NULL,'EPSG','4499','EPSG','4326','EPSG','7739',NULL,0); INSERT INTO "usage" VALUES('EPSG','5457','projected_crs','EPSG','7772','EPSG','4413','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7773','WGS 84 / Punjab',NULL,'EPSG','4499','EPSG','4326','EPSG','7740',NULL,0); INSERT INTO "usage" VALUES('EPSG','5458','projected_crs','EPSG','7773','EPSG','4414','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7774','WGS 84 / Rajasthan',NULL,'EPSG','4499','EPSG','4326','EPSG','7741',NULL,0); INSERT INTO "usage" VALUES('EPSG','5459','projected_crs','EPSG','7774','EPSG','4415','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7775','WGS 84 / Uttar Pradesh',NULL,'EPSG','4499','EPSG','4326','EPSG','7742',NULL,0); INSERT INTO "usage" VALUES('EPSG','5460','projected_crs','EPSG','7775','EPSG','4419','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7776','WGS 84 / Uttaranchal',NULL,'EPSG','4499','EPSG','4326','EPSG','7743',NULL,0); INSERT INTO "usage" VALUES('EPSG','5461','projected_crs','EPSG','7776','EPSG','4420','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7777','WGS 84 / Andaman and Nicobar',NULL,'EPSG','4499','EPSG','4326','EPSG','7744',NULL,0); INSERT INTO "usage" VALUES('EPSG','5462','projected_crs','EPSG','7777','EPSG','4423','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7778','WGS 84 / Chhattisgarh',NULL,'EPSG','4499','EPSG','4326','EPSG','7745',NULL,0); INSERT INTO "usage" VALUES('EPSG','5463','projected_crs','EPSG','7778','EPSG','4398','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7779','WGS 84 / Goa',NULL,'EPSG','4499','EPSG','4326','EPSG','7746',NULL,0); INSERT INTO "usage" VALUES('EPSG','5464','projected_crs','EPSG','7779','EPSG','4399','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7780','WGS 84 / Karnataka',NULL,'EPSG','4499','EPSG','4326','EPSG','7747',NULL,0); INSERT INTO "usage" VALUES('EPSG','5465','projected_crs','EPSG','7780','EPSG','4405','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7781','WGS 84 / Kerala',NULL,'EPSG','4499','EPSG','4326','EPSG','7748',NULL,0); INSERT INTO "usage" VALUES('EPSG','5466','projected_crs','EPSG','7781','EPSG','4406','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7782','WGS 84 / Lakshadweep',NULL,'EPSG','4499','EPSG','4326','EPSG','7749',NULL,0); INSERT INTO "usage" VALUES('EPSG','5467','projected_crs','EPSG','7782','EPSG','4424','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7783','WGS 84 / Mizoram',NULL,'EPSG','4499','EPSG','4326','EPSG','7750',NULL,0); INSERT INTO "usage" VALUES('EPSG','5468','projected_crs','EPSG','7783','EPSG','4411','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7784','WGS 84 / Sikkim',NULL,'EPSG','4499','EPSG','4326','EPSG','7751',NULL,0); INSERT INTO "usage" VALUES('EPSG','5469','projected_crs','EPSG','7784','EPSG','4416','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7785','WGS 84 / Tamil Nadu',NULL,'EPSG','4499','EPSG','4326','EPSG','7752',NULL,0); INSERT INTO "usage" VALUES('EPSG','5470','projected_crs','EPSG','7785','EPSG','4417','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7786','WGS 84 / Tripura',NULL,'EPSG','4499','EPSG','4326','EPSG','7753',NULL,0); INSERT INTO "usage" VALUES('EPSG','5471','projected_crs','EPSG','7786','EPSG','4418','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7787','WGS 84 / West Bengal',NULL,'EPSG','4499','EPSG','4326','EPSG','7754',NULL,0); INSERT INTO "usage" VALUES('EPSG','5472','projected_crs','EPSG','7787','EPSG','4421','EPSG','1219'); INSERT INTO "projected_crs" VALUES('EPSG','7791','RDN2008 / UTM zone 32N',NULL,'EPSG','4400','EPSG','6706','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','5474','projected_crs','EPSG','7791','EPSG','1718','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','7792','RDN2008 / UTM zone 33N',NULL,'EPSG','4400','EPSG','6706','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','5475','projected_crs','EPSG','7792','EPSG','4186','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','7793','RDN2008 / UTM zone 34N',NULL,'EPSG','4400','EPSG','6706','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','5476','projected_crs','EPSG','7793','EPSG','4187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7794','RDN2008 / Italy zone (E-N)',NULL,'EPSG','4400','EPSG','6706','EPSG','6877',NULL,0); INSERT INTO "usage" VALUES('EPSG','5477','projected_crs','EPSG','7794','EPSG','1127','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','7795','RDN2008 / Zone 12 (E-N)',NULL,'EPSG','4400','EPSG','6706','EPSG','6878',NULL,0); INSERT INTO "usage" VALUES('EPSG','5478','projected_crs','EPSG','7795','EPSG','1127','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','7799','BGS2005 / UTM zone 34N (N-E)',NULL,'EPSG','4531','EPSG','7798','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','5482','projected_crs','EPSG','7799','EPSG','4428','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','7800','BGS2005 / UTM zone 35N (N-E)',NULL,'EPSG','4531','EPSG','7798','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','5483','projected_crs','EPSG','7800','EPSG','4427','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','7801','BGS2005 / CCS2005',NULL,'EPSG','4531','EPSG','7798','EPSG','7802',NULL,0); INSERT INTO "usage" VALUES('EPSG','5484','projected_crs','EPSG','7801','EPSG','3224','EPSG','1061'); INSERT INTO "projected_crs" VALUES('EPSG','7803','BGS2005 / UTM zone 34N',NULL,'EPSG','4400','EPSG','7798','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','5485','projected_crs','EPSG','7803','EPSG','4428','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','7804','BGS2005 / UTM zone 35N',NULL,'EPSG','4400','EPSG','7798','EPSG','16034',NULL,1); INSERT INTO "usage" VALUES('EPSG','5486','projected_crs','EPSG','7804','EPSG','4427','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','7805','BGS2005 / UTM zone 36N',NULL,'EPSG','4400','EPSG','7798','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','5487','projected_crs','EPSG','7805','EPSG','4426','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7825','Pulkovo 1942 / CS63 zone X1',NULL,'EPSG','4530','EPSG','4284','EPSG','7818',NULL,0); INSERT INTO "usage" VALUES('EPSG','5490','projected_crs','EPSG','7825','EPSG','4435','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','7826','Pulkovo 1942 / CS63 zone X2',NULL,'EPSG','4530','EPSG','4284','EPSG','7819',NULL,0); INSERT INTO "usage" VALUES('EPSG','5491','projected_crs','EPSG','7826','EPSG','4429','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','7827','Pulkovo 1942 / CS63 zone X3',NULL,'EPSG','4530','EPSG','4284','EPSG','7820',NULL,0); INSERT INTO "usage" VALUES('EPSG','5492','projected_crs','EPSG','7827','EPSG','4430','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','7828','Pulkovo 1942 / CS63 zone X4',NULL,'EPSG','4530','EPSG','4284','EPSG','7821',NULL,0); INSERT INTO "usage" VALUES('EPSG','5493','projected_crs','EPSG','7828','EPSG','4431','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','7829','Pulkovo 1942 / CS63 zone X5',NULL,'EPSG','4530','EPSG','4284','EPSG','7822',NULL,0); INSERT INTO "usage" VALUES('EPSG','5494','projected_crs','EPSG','7829','EPSG','4432','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','7830','Pulkovo 1942 / CS63 zone X6',NULL,'EPSG','4530','EPSG','4284','EPSG','7823',NULL,0); INSERT INTO "usage" VALUES('EPSG','5495','projected_crs','EPSG','7830','EPSG','4433','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','7831','Pulkovo 1942 / CS63 zone X7',NULL,'EPSG','4530','EPSG','4284','EPSG','7824',NULL,0); INSERT INTO "usage" VALUES('EPSG','5496','projected_crs','EPSG','7831','EPSG','4434','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','7845','GDA2020 / GA LCC',NULL,'EPSG','4400','EPSG','7844','EPSG','17362',NULL,0); INSERT INTO "usage" VALUES('EPSG','5504','projected_crs','EPSG','7845','EPSG','2575','EPSG','1236'); INSERT INTO "projected_crs" VALUES('EPSG','7846','GDA2020 / MGA zone 46',NULL,'EPSG','4400','EPSG','7844','EPSG','6729',NULL,0); INSERT INTO "usage" VALUES('EPSG','5505','projected_crs','EPSG','7846','EPSG','4189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7847','GDA2020 / MGA zone 47',NULL,'EPSG','4400','EPSG','7844','EPSG','6730',NULL,0); INSERT INTO "usage" VALUES('EPSG','5506','projected_crs','EPSG','7847','EPSG','4190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7848','GDA2020 / MGA zone 48',NULL,'EPSG','4400','EPSG','7844','EPSG','17348',NULL,0); INSERT INTO "usage" VALUES('EPSG','5507','projected_crs','EPSG','7848','EPSG','4191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7849','GDA2020 / MGA zone 49',NULL,'EPSG','4400','EPSG','7844','EPSG','17349',NULL,0); INSERT INTO "usage" VALUES('EPSG','5508','projected_crs','EPSG','7849','EPSG','4176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7850','GDA2020 / MGA zone 50',NULL,'EPSG','4400','EPSG','7844','EPSG','17350',NULL,0); INSERT INTO "usage" VALUES('EPSG','5509','projected_crs','EPSG','7850','EPSG','4178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7851','GDA2020 / MGA zone 51',NULL,'EPSG','4400','EPSG','7844','EPSG','17351',NULL,0); INSERT INTO "usage" VALUES('EPSG','5510','projected_crs','EPSG','7851','EPSG','1559','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7852','GDA2020 / MGA zone 52',NULL,'EPSG','4400','EPSG','7844','EPSG','17352',NULL,0); INSERT INTO "usage" VALUES('EPSG','5511','projected_crs','EPSG','7852','EPSG','1560','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7853','GDA2020 / MGA zone 53',NULL,'EPSG','4400','EPSG','7844','EPSG','17353',NULL,0); INSERT INTO "usage" VALUES('EPSG','5512','projected_crs','EPSG','7853','EPSG','1561','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7854','GDA2020 / MGA zone 54',NULL,'EPSG','4400','EPSG','7844','EPSG','17354',NULL,0); INSERT INTO "usage" VALUES('EPSG','5513','projected_crs','EPSG','7854','EPSG','1562','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7855','GDA2020 / MGA zone 55',NULL,'EPSG','4400','EPSG','7844','EPSG','17355',NULL,0); INSERT INTO "usage" VALUES('EPSG','5514','projected_crs','EPSG','7855','EPSG','1563','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7856','GDA2020 / MGA zone 56',NULL,'EPSG','4400','EPSG','7844','EPSG','17356',NULL,0); INSERT INTO "usage" VALUES('EPSG','5515','projected_crs','EPSG','7856','EPSG','1564','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7857','GDA2020 / MGA zone 57',NULL,'EPSG','4400','EPSG','7844','EPSG','17357',NULL,0); INSERT INTO "usage" VALUES('EPSG','5516','projected_crs','EPSG','7857','EPSG','4196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7858','GDA2020 / MGA zone 58',NULL,'EPSG','4400','EPSG','7844','EPSG','17358',NULL,0); INSERT INTO "usage" VALUES('EPSG','5517','projected_crs','EPSG','7858','EPSG','4175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7859','GDA2020 / MGA zone 59',NULL,'EPSG','4400','EPSG','7844','EPSG','6731',NULL,0); INSERT INTO "usage" VALUES('EPSG','5518','projected_crs','EPSG','7859','EPSG','4179','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7877','Astro DOS 71 / SHLG71',NULL,'EPSG','4400','EPSG','4710','EPSG','7875',NULL,0); INSERT INTO "usage" VALUES('EPSG','5519','projected_crs','EPSG','7877','EPSG','3183','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','7878','Astro DOS 71 / UTM zone 30S',NULL,'EPSG','4400','EPSG','4710','EPSG','16130',NULL,0); INSERT INTO "usage" VALUES('EPSG','5520','projected_crs','EPSG','7878','EPSG','3183','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','7882','St. Helena Tritan / SHLG(Tritan)',NULL,'EPSG','4400','EPSG','7881','EPSG','7876',NULL,0); INSERT INTO "usage" VALUES('EPSG','5524','projected_crs','EPSG','7882','EPSG','3183','EPSG','1146'); INSERT INTO "projected_crs" VALUES('EPSG','7883','St. Helena Tritan / UTM zone 30S',NULL,'EPSG','4400','EPSG','7881','EPSG','16130',NULL,0); INSERT INTO "usage" VALUES('EPSG','5525','projected_crs','EPSG','7883','EPSG','3183','EPSG','1147'); INSERT INTO "projected_crs" VALUES('EPSG','7887','SHMG2015',NULL,'EPSG','4400','EPSG','7886','EPSG','16130',NULL,0); INSERT INTO "usage" VALUES('EPSG','5529','projected_crs','EPSG','7887','EPSG','3183','EPSG','1147'); INSERT INTO "projected_crs" VALUES('EPSG','7899','GDA2020 / Vicgrid',NULL,'EPSG','4400','EPSG','7844','EPSG','17361',NULL,0); INSERT INTO "usage" VALUES('EPSG','5533','projected_crs','EPSG','7899','EPSG','2285','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','7991','NAD27 / MTM zone 10',NULL,'EPSG','4499','EPSG','4267','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','5572','projected_crs','EPSG','7991','EPSG','1431','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','7992','Malongo 1987 / UTM zone 33S',NULL,'EPSG','4400','EPSG','4259','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','5573','projected_crs','EPSG','7992','EPSG','4447','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','8013','GDA2020 / ALB2020',NULL,'EPSG','4400','EPSG','7844','EPSG','7993',NULL,0); INSERT INTO "usage" VALUES('EPSG','5574','projected_crs','EPSG','8013','EPSG','4439','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8014','GDA2020 / BIO2020',NULL,'EPSG','4400','EPSG','7844','EPSG','7994',NULL,0); INSERT INTO "usage" VALUES('EPSG','5575','projected_crs','EPSG','8014','EPSG','4438','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8015','GDA2020 / BRO2020',NULL,'EPSG','4400','EPSG','7844','EPSG','7995',NULL,0); INSERT INTO "usage" VALUES('EPSG','5576','projected_crs','EPSG','8015','EPSG','4441','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8016','GDA2020 / BCG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','7996',NULL,0); INSERT INTO "usage" VALUES('EPSG','5577','projected_crs','EPSG','8016','EPSG','4437','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8017','GDA2020 / CARN2020',NULL,'EPSG','4400','EPSG','7844','EPSG','7997',NULL,0); INSERT INTO "usage" VALUES('EPSG','5578','projected_crs','EPSG','8017','EPSG','4442','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8018','GDA2020 / CIG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','7998',NULL,0); INSERT INTO "usage" VALUES('EPSG','5579','projected_crs','EPSG','8018','EPSG','4169','EPSG','1093'); INSERT INTO "projected_crs" VALUES('EPSG','8019','GDA2020 / CKIG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','7999',NULL,0); INSERT INTO "usage" VALUES('EPSG','5580','projected_crs','EPSG','8019','EPSG','1069','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8020','GDA2020 / COL2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8000',NULL,0); INSERT INTO "usage" VALUES('EPSG','5581','projected_crs','EPSG','8020','EPSG','4443','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8021','GDA2020 / ESP2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8001',NULL,0); INSERT INTO "usage" VALUES('EPSG','5582','projected_crs','EPSG','8021','EPSG','4445','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8022','GDA2020 / EXM2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8002',NULL,0); INSERT INTO "usage" VALUES('EPSG','5583','projected_crs','EPSG','8022','EPSG','4448','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8023','GDA2020 / GCG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8003',NULL,0); INSERT INTO "usage" VALUES('EPSG','5584','projected_crs','EPSG','8023','EPSG','4449','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8024','GDA2020 / GOLD2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8004',NULL,0); INSERT INTO "usage" VALUES('EPSG','5585','projected_crs','EPSG','8024','EPSG','4436','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8025','GDA2020 / JCG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8005',NULL,0); INSERT INTO "usage" VALUES('EPSG','5586','projected_crs','EPSG','8025','EPSG','4440','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8026','GDA2020 / KALB2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8006',NULL,0); INSERT INTO "usage" VALUES('EPSG','5587','projected_crs','EPSG','8026','EPSG','4444','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8027','GDA2020 / KAR2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8007',NULL,0); INSERT INTO "usage" VALUES('EPSG','5588','projected_crs','EPSG','8027','EPSG','4451','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8028','GDA2020 / KUN2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8008',NULL,0); INSERT INTO "usage" VALUES('EPSG','5589','projected_crs','EPSG','8028','EPSG','4452','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8029','GDA2020 / LCG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8009',NULL,0); INSERT INTO "usage" VALUES('EPSG','5590','projected_crs','EPSG','8029','EPSG','4453','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8030','GDA2020 / MRCG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8010',NULL,0); INSERT INTO "usage" VALUES('EPSG','5591','projected_crs','EPSG','8030','EPSG','4457','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8031','GDA2020 / PCG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8011',NULL,0); INSERT INTO "usage" VALUES('EPSG','5592','projected_crs','EPSG','8031','EPSG','4462','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8032','GDA2020 / PHG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','8012',NULL,0); INSERT INTO "usage" VALUES('EPSG','5593','projected_crs','EPSG','8032','EPSG','4466','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','8035','WGS 84 / TM Zone 20N (ftUS)',NULL,'EPSG','4497','EPSG','4326','EPSG','8033',NULL,0); INSERT INTO "usage" VALUES('EPSG','5594','projected_crs','EPSG','8035','EPSG','4467','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','8036','WGS 84 / TM Zone 21N (ftUS)',NULL,'EPSG','4497','EPSG','4326','EPSG','8034',NULL,0); INSERT INTO "usage" VALUES('EPSG','5595','projected_crs','EPSG','8036','EPSG','4468','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','8044','Gusterberg Grid (Ferro)',NULL,'EPSG','6501','EPSG','8042','EPSG','8040',NULL,0); INSERT INTO "usage" VALUES('EPSG','5598','projected_crs','EPSG','8044','EPSG','4455','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','8045','St. Stephen Grid (Ferro)',NULL,'EPSG','6501','EPSG','8043','EPSG','8041',NULL,0); INSERT INTO "usage" VALUES('EPSG','5599','projected_crs','EPSG','8045','EPSG','4456','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','8058','GDA2020 / NSW Lambert',NULL,'EPSG','4400','EPSG','7844','EPSG','17364',NULL,0); INSERT INTO "usage" VALUES('EPSG','5604','projected_crs','EPSG','8058','EPSG','3139','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','8059','GDA2020 / SA Lambert',NULL,'EPSG','4400','EPSG','7844','EPSG','17359',NULL,0); INSERT INTO "usage" VALUES('EPSG','5605','projected_crs','EPSG','8059','EPSG','2986','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','8065','NAD83(2011) / PCCS zone 1 (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8061',NULL,0); INSERT INTO "usage" VALUES('EPSG','5606','projected_crs','EPSG','8065','EPSG','4472','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','8066','NAD83(2011) / PCCS zone 2 (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8062',NULL,0); INSERT INTO "usage" VALUES('EPSG','5607','projected_crs','EPSG','8066','EPSG','4460','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','8067','NAD83(2011) / PCCS zone 3 (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8063',NULL,0); INSERT INTO "usage" VALUES('EPSG','5608','projected_crs','EPSG','8067','EPSG','4450','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','8068','NAD83(2011) / PCCS zone 4 (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8064',NULL,0); INSERT INTO "usage" VALUES('EPSG','5609','projected_crs','EPSG','8068','EPSG','4473','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','8082','NAD83(CSRS)v6 / MTM NS 2010 zone 4',NULL,'EPSG','4400','EPSG','8252','EPSG','8080',NULL,0); INSERT INTO "usage" VALUES('EPSG','5610','projected_crs','EPSG','8082','EPSG','1534','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8083','NAD83(CSRS)v6 / MTM NS 2010 zone 5',NULL,'EPSG','4400','EPSG','8252','EPSG','8081',NULL,0); INSERT INTO "usage" VALUES('EPSG','5611','projected_crs','EPSG','8083','EPSG','1535','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8088','ISN2016 / Lambert 2016',NULL,'EPSG','4499','EPSG','8086','EPSG','8087',NULL,0); INSERT INTO "usage" VALUES('EPSG','5615','projected_crs','EPSG','8088','EPSG','1120','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','8090','NAD83(HARN) / WISCRS Florence (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7386',NULL,0); INSERT INTO "usage" VALUES('EPSG','5617','projected_crs','EPSG','8090','EPSG','4327','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8091','NAD83(HARN) / WISCRS Florence (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7387',NULL,0); INSERT INTO "usage" VALUES('EPSG','5618','projected_crs','EPSG','8091','EPSG','4327','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8092','NAD83(HARN) / WISCRS Eau Claire (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7440',NULL,0); INSERT INTO "usage" VALUES('EPSG','5619','projected_crs','EPSG','8092','EPSG','4342','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8093','NAD83(HARN) / WISCRS Eau Claire (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7441',NULL,0); INSERT INTO "usage" VALUES('EPSG','5620','projected_crs','EPSG','8093','EPSG','4342','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8095','NAD83(HARN) / WISCRS Wood (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7482',NULL,0); INSERT INTO "usage" VALUES('EPSG','5621','projected_crs','EPSG','8095','EPSG','4359','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8096','NAD83(HARN) / WISCRS Wood (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7483',NULL,0); INSERT INTO "usage" VALUES('EPSG','5622','projected_crs','EPSG','8096','EPSG','4359','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8097','NAD83(HARN) / WISCRS Waushara (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7526',NULL,0); INSERT INTO "usage" VALUES('EPSG','5623','projected_crs','EPSG','8097','EPSG','4381','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8098','NAD83(HARN) / WISCRS Waushara (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7527',NULL,0); INSERT INTO "usage" VALUES('EPSG','5624','projected_crs','EPSG','8098','EPSG','4381','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8099','NAD83(HARN) / WISCRS Waupaca (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7480',NULL,0); INSERT INTO "usage" VALUES('EPSG','5625','projected_crs','EPSG','8099','EPSG','4358','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8100','NAD83(HARN) / WISCRS Waupaca (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7481',NULL,0); INSERT INTO "usage" VALUES('EPSG','5626','projected_crs','EPSG','8100','EPSG','4358','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8101','NAD83(HARN) / WISCRS Waukesha (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7524',NULL,0); INSERT INTO "usage" VALUES('EPSG','5627','projected_crs','EPSG','8101','EPSG','4380','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8102','NAD83(HARN) / WISCRS Waukesha (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7525',NULL,0); INSERT INTO "usage" VALUES('EPSG','5628','projected_crs','EPSG','8102','EPSG','4380','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8103','NAD83(HARN) / WISCRS Washington (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7522',NULL,0); INSERT INTO "usage" VALUES('EPSG','5629','projected_crs','EPSG','8103','EPSG','4379','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8104','NAD83(HARN) / WISCRS Washington (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7523',NULL,0); INSERT INTO "usage" VALUES('EPSG','5630','projected_crs','EPSG','8104','EPSG','4379','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8105','NAD83(HARN) / WISCRS Washburn (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7424',NULL,0); INSERT INTO "usage" VALUES('EPSG','5631','projected_crs','EPSG','8105','EPSG','4335','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8106','NAD83(HARN) / WISCRS Washburn (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7425',NULL,0); INSERT INTO "usage" VALUES('EPSG','5632','projected_crs','EPSG','8106','EPSG','4335','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8107','NAD83(HARN) / WISCRS Walworth (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7520',NULL,0); INSERT INTO "usage" VALUES('EPSG','5633','projected_crs','EPSG','8107','EPSG','4378','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8108','NAD83(HARN) / WISCRS Walworth (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7521',NULL,0); INSERT INTO "usage" VALUES('EPSG','5634','projected_crs','EPSG','8108','EPSG','4378','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8109','NAD83(HARN) / WISCRS Vilas (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7398',NULL,0); INSERT INTO "usage" VALUES('EPSG','5635','projected_crs','EPSG','8109','EPSG','4334','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8110','NAD83(HARN) / WISCRS Vilas (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7399',NULL,0); INSERT INTO "usage" VALUES('EPSG','5636','projected_crs','EPSG','8110','EPSG','4334','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8111','NAD83(HARN) / WISCRS Vernon (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7518',NULL,0); INSERT INTO "usage" VALUES('EPSG','5637','projected_crs','EPSG','8111','EPSG','4377','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8112','NAD83(HARN) / WISCRS Vernon (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7519',NULL,0); INSERT INTO "usage" VALUES('EPSG','5638','projected_crs','EPSG','8112','EPSG','4377','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8113','NAD83(HARN) / WISCRS Trempealeau (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7478',NULL,0); INSERT INTO "usage" VALUES('EPSG','5639','projected_crs','EPSG','8113','EPSG','4357','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8114','NAD83(HARN) / WISCRS Trempealeau (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7479',NULL,0); INSERT INTO "usage" VALUES('EPSG','5640','projected_crs','EPSG','8114','EPSG','4357','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8115','NAD83(HARN) / WISCRS Taylor (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7476',NULL,0); INSERT INTO "usage" VALUES('EPSG','5641','projected_crs','EPSG','8115','EPSG','4356','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8116','NAD83(HARN) / WISCRS Taylor (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7477',NULL,0); INSERT INTO "usage" VALUES('EPSG','5642','projected_crs','EPSG','8116','EPSG','4356','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8117','NAD83(HARN) / WISCRS St. Croix (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7474',NULL,0); INSERT INTO "usage" VALUES('EPSG','5643','projected_crs','EPSG','8117','EPSG','4355','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8118','NAD83(HARN) / WISCRS St. Croix (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7475',NULL,0); INSERT INTO "usage" VALUES('EPSG','5644','projected_crs','EPSG','8118','EPSG','4355','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8119','NAD83(HARN) / WISCRS Shawano (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7472',NULL,0); INSERT INTO "usage" VALUES('EPSG','5645','projected_crs','EPSG','8119','EPSG','4354','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8120','NAD83(HARN) / WISCRS Shawano (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7473',NULL,0); INSERT INTO "usage" VALUES('EPSG','5646','projected_crs','EPSG','8120','EPSG','4354','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8121','NAD83(HARN) / WISCRS Sawyer (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7396',NULL,0); INSERT INTO "usage" VALUES('EPSG','5647','projected_crs','EPSG','8121','EPSG','4333','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8122','NAD83(HARN) / WISCRS Sawyer (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7397',NULL,0); INSERT INTO "usage" VALUES('EPSG','5648','projected_crs','EPSG','8122','EPSG','4333','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8123','NAD83(HARN) / WISCRS Sauk (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7516',NULL,0); INSERT INTO "usage" VALUES('EPSG','5649','projected_crs','EPSG','8123','EPSG','4376','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8124','NAD83(HARN) / WISCRS Sauk (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7517',NULL,0); INSERT INTO "usage" VALUES('EPSG','5650','projected_crs','EPSG','8124','EPSG','4376','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8125','NAD83(HARN) / WISCRS Rusk (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7470',NULL,0); INSERT INTO "usage" VALUES('EPSG','5651','projected_crs','EPSG','8125','EPSG','4353','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8126','NAD83(HARN) / WISCRS Rusk (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7471',NULL,0); INSERT INTO "usage" VALUES('EPSG','5652','projected_crs','EPSG','8126','EPSG','4353','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8127','NAD83(HARN) / WISCRS Rock (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7514',NULL,0); INSERT INTO "usage" VALUES('EPSG','5653','projected_crs','EPSG','8127','EPSG','4375','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8128','NAD83(HARN) / WISCRS Rock (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7515',NULL,0); INSERT INTO "usage" VALUES('EPSG','5654','projected_crs','EPSG','8128','EPSG','4375','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8129','NAD83(HARN) / WISCRS Richland (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7512',NULL,0); INSERT INTO "usage" VALUES('EPSG','5655','projected_crs','EPSG','8129','EPSG','4374','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8130','NAD83(HARN) / WISCRS Richland (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7513',NULL,0); INSERT INTO "usage" VALUES('EPSG','5656','projected_crs','EPSG','8130','EPSG','4374','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8131','NAD83(HARN) / WISCRS Price (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7394',NULL,0); INSERT INTO "usage" VALUES('EPSG','5657','projected_crs','EPSG','8131','EPSG','4332','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8132','NAD83(HARN) / WISCRS Price (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7395',NULL,0); INSERT INTO "usage" VALUES('EPSG','5658','projected_crs','EPSG','8132','EPSG','4332','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8133','NAD83(HARN) / WISCRS Portage (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7468',NULL,0); INSERT INTO "usage" VALUES('EPSG','5659','projected_crs','EPSG','8133','EPSG','4352','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8134','NAD83(HARN) / WISCRS Portage (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7469',NULL,0); INSERT INTO "usage" VALUES('EPSG','5660','projected_crs','EPSG','8134','EPSG','4352','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8135','NAD83(HARN) / WISCRS Polk (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7466',NULL,0); INSERT INTO "usage" VALUES('EPSG','5661','projected_crs','EPSG','8135','EPSG','4351','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8136','NAD83(HARN) / WISCRS Polk (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7467',NULL,0); INSERT INTO "usage" VALUES('EPSG','5662','projected_crs','EPSG','8136','EPSG','4351','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8137','NAD83(HARN) / WISCRS Pepin and Pierce (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7464',NULL,0); INSERT INTO "usage" VALUES('EPSG','5663','projected_crs','EPSG','8137','EPSG','4350','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8138','NAD83(HARN) / WISCRS Pepin and Pierce (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7465',NULL,0); INSERT INTO "usage" VALUES('EPSG','5664','projected_crs','EPSG','8138','EPSG','4350','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8139','NAD83(HARN) / WISCRS Oneida (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7392',NULL,0); INSERT INTO "usage" VALUES('EPSG','5665','projected_crs','EPSG','8139','EPSG','4330','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8140','NAD83(HARN) / WISCRS Oneida (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7393',NULL,0); INSERT INTO "usage" VALUES('EPSG','5666','projected_crs','EPSG','8140','EPSG','4330','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8141','NAD83(HARN) / WISCRS Oconto (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7462',NULL,0); INSERT INTO "usage" VALUES('EPSG','5667','projected_crs','EPSG','8141','EPSG','4349','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8142','NAD83(HARN) / WISCRS Oconto (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7463',NULL,0); INSERT INTO "usage" VALUES('EPSG','5668','projected_crs','EPSG','8142','EPSG','4349','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8143','NAD83(HARN) / WISCRS Monroe (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7510',NULL,0); INSERT INTO "usage" VALUES('EPSG','5669','projected_crs','EPSG','8143','EPSG','4373','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8144','NAD83(HARN) / WISCRS Monroe (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7511',NULL,0); INSERT INTO "usage" VALUES('EPSG','5670','projected_crs','EPSG','8144','EPSG','4373','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8145','NAD83(HARN) / WISCRS Menominee (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7460',NULL,0); INSERT INTO "usage" VALUES('EPSG','5671','projected_crs','EPSG','8145','EPSG','4348','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8146','NAD83(HARN) / WISCRS Menominee (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7461',NULL,0); INSERT INTO "usage" VALUES('EPSG','5672','projected_crs','EPSG','8146','EPSG','4348','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8147','NAD83(HARN) / WISCRS Marinette (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7458',NULL,0); INSERT INTO "usage" VALUES('EPSG','5673','projected_crs','EPSG','8147','EPSG','4347','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8148','NAD83(HARN) / WISCRS Marinette (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7459',NULL,0); INSERT INTO "usage" VALUES('EPSG','5674','projected_crs','EPSG','8148','EPSG','4347','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8149','NAD83(HARN) / WISCRS Marathon (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7456',NULL,0); INSERT INTO "usage" VALUES('EPSG','5675','projected_crs','EPSG','8149','EPSG','4346','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8150','NAD83(HARN) / WISCRS Marathon (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7457',NULL,0); INSERT INTO "usage" VALUES('EPSG','5676','projected_crs','EPSG','8150','EPSG','4346','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8151','NAD83(HARN) / WISCRS Lincoln (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7454',NULL,0); INSERT INTO "usage" VALUES('EPSG','5677','projected_crs','EPSG','8151','EPSG','4345','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8152','NAD83(HARN) / WISCRS Lincoln (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7455',NULL,0); INSERT INTO "usage" VALUES('EPSG','5678','projected_crs','EPSG','8152','EPSG','4345','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8153','NAD83(HARN) / WISCRS Langlade (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7452',NULL,0); INSERT INTO "usage" VALUES('EPSG','5679','projected_crs','EPSG','8153','EPSG','4344','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8154','NAD83(HARN) / WISCRS Langlade (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7453',NULL,0); INSERT INTO "usage" VALUES('EPSG','5680','projected_crs','EPSG','8154','EPSG','4344','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8155','NAD83(HARN) / WISCRS La Crosse (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7508',NULL,0); INSERT INTO "usage" VALUES('EPSG','5681','projected_crs','EPSG','8155','EPSG','4372','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8156','NAD83(HARN) / WISCRS La Crosse (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7509',NULL,0); INSERT INTO "usage" VALUES('EPSG','5682','projected_crs','EPSG','8156','EPSG','4372','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8157','NAD83(HARN) / WISCRS Kewaunee, Manitowoc and Sheboygan (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7506',NULL,0); INSERT INTO "usage" VALUES('EPSG','5683','projected_crs','EPSG','8157','EPSG','4371','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8158','NAD83(HARN) / WISCRS Kewaunee, Manitowoc and Sheboygan (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7507',NULL,0); INSERT INTO "usage" VALUES('EPSG','5684','projected_crs','EPSG','8158','EPSG','4371','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8159','NAD83(HARN) / WISCRS Kenosha, Milwaukee, Ozaukee and Racine (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7504',NULL,0); INSERT INTO "usage" VALUES('EPSG','5685','projected_crs','EPSG','8159','EPSG','4370','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8160','NAD83(HARN) / WISCRS Kenosha, Milwaukee, Ozaukee and Racine (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7505',NULL,0); INSERT INTO "usage" VALUES('EPSG','5686','projected_crs','EPSG','8160','EPSG','4370','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8161','NAD83(HARN) / WISCRS Jackson (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7450',NULL,0); INSERT INTO "usage" VALUES('EPSG','5687','projected_crs','EPSG','8161','EPSG','4343','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8162','NAD83(HARN) / WISCRS Jackson (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7451',NULL,0); INSERT INTO "usage" VALUES('EPSG','5688','projected_crs','EPSG','8162','EPSG','4343','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8163','NAD83(HARN) / WISCRS Iron (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7390',NULL,0); INSERT INTO "usage" VALUES('EPSG','5689','projected_crs','EPSG','8163','EPSG','4329','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8164','NAD83(HARN) / WISCRS Iron (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7391',NULL,0); INSERT INTO "usage" VALUES('EPSG','5690','projected_crs','EPSG','8164','EPSG','4329','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8165','NAD83(HARN) / WISCRS Iowa (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7502',NULL,0); INSERT INTO "usage" VALUES('EPSG','5691','projected_crs','EPSG','8165','EPSG','4369','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8166','NAD83(HARN) / WISCRS Iowa (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7503',NULL,0); INSERT INTO "usage" VALUES('EPSG','5692','projected_crs','EPSG','8166','EPSG','4369','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8167','NAD83(HARN) / WISCRS Green Lake and Marquette (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7500',NULL,0); INSERT INTO "usage" VALUES('EPSG','5693','projected_crs','EPSG','8167','EPSG','4368','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8168','NAD83(HARN) / WISCRS Green Lake and Marquette (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7501',NULL,0); INSERT INTO "usage" VALUES('EPSG','5694','projected_crs','EPSG','8168','EPSG','4368','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8169','NAD83(HARN) / WISCRS Green and Lafayette (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7498',NULL,0); INSERT INTO "usage" VALUES('EPSG','5695','projected_crs','EPSG','8169','EPSG','4367','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8170','NAD83(HARN) / WISCRS Green and Lafayette (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7499',NULL,0); INSERT INTO "usage" VALUES('EPSG','5696','projected_crs','EPSG','8170','EPSG','4367','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8171','NAD83(HARN) / WISCRS Grant (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7496',NULL,0); INSERT INTO "usage" VALUES('EPSG','5697','projected_crs','EPSG','8171','EPSG','4366','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8172','NAD83(HARN) / WISCRS Grant (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7497',NULL,0); INSERT INTO "usage" VALUES('EPSG','5698','projected_crs','EPSG','8172','EPSG','4366','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8173','NAD83(HARN) / WISCRS Forest (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7388',NULL,0); INSERT INTO "usage" VALUES('EPSG','5699','projected_crs','EPSG','8173','EPSG','4328','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8177','NAD83(HARN) / WISCRS Forest (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7389',NULL,0); INSERT INTO "usage" VALUES('EPSG','5700','projected_crs','EPSG','8177','EPSG','4328','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8179','NAD83(HARN) / WISCRS Dunn (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7438',NULL,0); INSERT INTO "usage" VALUES('EPSG','5701','projected_crs','EPSG','8179','EPSG','4341','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8180','NAD83(HARN) / WISCRS Dunn (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7439',NULL,0); INSERT INTO "usage" VALUES('EPSG','5702','projected_crs','EPSG','8180','EPSG','4341','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8181','NAD83(HARN) / WISCRS Douglas (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7384',NULL,0); INSERT INTO "usage" VALUES('EPSG','5703','projected_crs','EPSG','8181','EPSG','4326','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8182','NAD83(HARN) / WISCRS Douglas (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7385',NULL,0); INSERT INTO "usage" VALUES('EPSG','5704','projected_crs','EPSG','8182','EPSG','4326','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8184','NAD83(HARN) / WISCRS Door (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7436',NULL,0); INSERT INTO "usage" VALUES('EPSG','5705','projected_crs','EPSG','8184','EPSG','4340','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8185','NAD83(HARN) / WISCRS Door (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7437',NULL,0); INSERT INTO "usage" VALUES('EPSG','5706','projected_crs','EPSG','8185','EPSG','4340','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8187','NAD83(HARN) / WISCRS Dodge and Jefferson (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7494',NULL,0); INSERT INTO "usage" VALUES('EPSG','5707','projected_crs','EPSG','8187','EPSG','4365','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8189','NAD83(HARN) / WISCRS Dodge and Jefferson (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7495',NULL,0); INSERT INTO "usage" VALUES('EPSG','5708','projected_crs','EPSG','8189','EPSG','4365','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8191','NAD83(HARN) / WISCRS Dane (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7492',NULL,0); INSERT INTO "usage" VALUES('EPSG','5709','projected_crs','EPSG','8191','EPSG','4364','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8193','NAD83(HARN) / WISCRS Dane (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7493',NULL,0); INSERT INTO "usage" VALUES('EPSG','5710','projected_crs','EPSG','8193','EPSG','4364','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8196','NAD83(HARN) / WISCRS Crawford (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7490',NULL,0); INSERT INTO "usage" VALUES('EPSG','5711','projected_crs','EPSG','8196','EPSG','4363','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8197','NAD83(HARN) / WISCRS Crawford (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7491',NULL,0); INSERT INTO "usage" VALUES('EPSG','5712','projected_crs','EPSG','8197','EPSG','4363','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8198','NAD83(HARN) / WISCRS Columbia (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7488',NULL,0); INSERT INTO "usage" VALUES('EPSG','5713','projected_crs','EPSG','8198','EPSG','4362','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8200','NAD83(HARN) / WISCRS Columbia (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7489',NULL,0); INSERT INTO "usage" VALUES('EPSG','5714','projected_crs','EPSG','8200','EPSG','4362','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8201','NAD83(HARN) / WISCRS Clark (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7434',NULL,0); INSERT INTO "usage" VALUES('EPSG','5715','projected_crs','EPSG','8201','EPSG','4339','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8202','NAD83(HARN) / WISCRS Clark (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7435',NULL,0); INSERT INTO "usage" VALUES('EPSG','5716','projected_crs','EPSG','8202','EPSG','4339','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8203','NAD83(HARN) / WISCRS Chippewa (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7432',NULL,0); INSERT INTO "usage" VALUES('EPSG','5717','projected_crs','EPSG','8203','EPSG','4338','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8204','NAD83(HARN) / WISCRS Chippewa (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7433',NULL,0); INSERT INTO "usage" VALUES('EPSG','5718','projected_crs','EPSG','8204','EPSG','4338','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8205','NAD83(HARN) / WISCRS Calumet, Fond du Lac, Outagamie and Winnebago (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7486',NULL,0); INSERT INTO "usage" VALUES('EPSG','5719','projected_crs','EPSG','8205','EPSG','4361','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8206','NAD83(HARN) / WISCRS Calumet, Fond du Lac, Outagamie and Winnebago (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7487',NULL,0); INSERT INTO "usage" VALUES('EPSG','5720','projected_crs','EPSG','8206','EPSG','4361','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8207','NAD83(HARN) / WISCRS Burnett (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7382',NULL,0); INSERT INTO "usage" VALUES('EPSG','5721','projected_crs','EPSG','8207','EPSG','4325','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8208','NAD83(HARN) / WISCRS Burnett (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7383',NULL,0); INSERT INTO "usage" VALUES('EPSG','5722','projected_crs','EPSG','8208','EPSG','4325','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8209','NAD83(HARN) / WISCRS Buffalo (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7430',NULL,0); INSERT INTO "usage" VALUES('EPSG','5723','projected_crs','EPSG','8209','EPSG','4337','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8210','NAD83(HARN) / WISCRS Buffalo (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7431',NULL,0); INSERT INTO "usage" VALUES('EPSG','5724','projected_crs','EPSG','8210','EPSG','4337','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8212','NAD83(HARN) / WISCRS Brown (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7428',NULL,0); INSERT INTO "usage" VALUES('EPSG','5725','projected_crs','EPSG','8212','EPSG','4336','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8213','NAD83(HARN) / WISCRS Brown (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7429',NULL,0); INSERT INTO "usage" VALUES('EPSG','5726','projected_crs','EPSG','8213','EPSG','4336','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8214','NAD83(HARN) / WISCRS Bayfield (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7380',NULL,0); INSERT INTO "usage" VALUES('EPSG','5727','projected_crs','EPSG','8214','EPSG','4321','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8216','NAD83(HARN) / WISCRS Bayfield (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7381',NULL,0); INSERT INTO "usage" VALUES('EPSG','5728','projected_crs','EPSG','8216','EPSG','4321','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8218','NAD83(HARN) / WISCRS Barron (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7426',NULL,0); INSERT INTO "usage" VALUES('EPSG','5729','projected_crs','EPSG','8218','EPSG','4331','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8220','NAD83(HARN) / WISCRS Barron (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7427',NULL,0); INSERT INTO "usage" VALUES('EPSG','5730','projected_crs','EPSG','8220','EPSG','4331','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8222','NAD83(HARN) / WISCRS Ashland (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7378',NULL,0); INSERT INTO "usage" VALUES('EPSG','5731','projected_crs','EPSG','8222','EPSG','4320','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8224','NAD83(HARN) / WISCRS Ashland (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7379',NULL,0); INSERT INTO "usage" VALUES('EPSG','5732','projected_crs','EPSG','8224','EPSG','4320','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8225','NAD83(HARN) / WISCRS Adams and Juneau (m)',NULL,'EPSG','4499','EPSG','4152','EPSG','7484',NULL,0); INSERT INTO "usage" VALUES('EPSG','5733','projected_crs','EPSG','8225','EPSG','4360','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8226','NAD83(HARN) / WISCRS Adams and Juneau (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','7485',NULL,0); INSERT INTO "usage" VALUES('EPSG','5734','projected_crs','EPSG','8226','EPSG','4360','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8311','NAD83(2011) / Oregon Burns-Harper zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8273',NULL,0); INSERT INTO "usage" VALUES('EPSG','5760','projected_crs','EPSG','8311','EPSG','4459','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8312','NAD83(2011) / Oregon Burns-Harper zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8274',NULL,0); INSERT INTO "usage" VALUES('EPSG','5761','projected_crs','EPSG','8312','EPSG','4459','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8313','NAD83(2011) / Oregon Canyon City-Burns zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8275',NULL,0); INSERT INTO "usage" VALUES('EPSG','5762','projected_crs','EPSG','8313','EPSG','4465','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8314','NAD83(2011) / Oregon Canyon City-Burns zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8276',NULL,0); INSERT INTO "usage" VALUES('EPSG','5763','projected_crs','EPSG','8314','EPSG','4465','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8315','NAD83(2011) / Oregon Coast Range North zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8277',NULL,0); INSERT INTO "usage" VALUES('EPSG','5764','projected_crs','EPSG','8315','EPSG','4471','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8316','NAD83(2011) / Oregon Coast Range North zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8278',NULL,0); INSERT INTO "usage" VALUES('EPSG','5765','projected_crs','EPSG','8316','EPSG','4471','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8317','NAD83(2011) / Oregon Dayville-Prairie City zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8279',NULL,0); INSERT INTO "usage" VALUES('EPSG','5766','projected_crs','EPSG','8317','EPSG','4474','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8318','NAD83(2011) / Oregon Dayville-Prairie City zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8280',NULL,0); INSERT INTO "usage" VALUES('EPSG','5767','projected_crs','EPSG','8318','EPSG','4474','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8319','NAD83(2011) / Oregon Denio-Burns zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8281',NULL,0); INSERT INTO "usage" VALUES('EPSG','5768','projected_crs','EPSG','8319','EPSG','4475','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8320','NAD83(2011) / Oregon Denio-Burns zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8282',NULL,0); INSERT INTO "usage" VALUES('EPSG','5769','projected_crs','EPSG','8320','EPSG','4475','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8321','NAD83(2011) / Oregon Halfway zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8283',NULL,0); INSERT INTO "usage" VALUES('EPSG','5770','projected_crs','EPSG','8321','EPSG','4476','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8322','NAD83(2011) / Oregon Halfway zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8284',NULL,0); INSERT INTO "usage" VALUES('EPSG','5771','projected_crs','EPSG','8322','EPSG','4476','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8323','NAD83(2011) / Oregon Medford-Diamond Lake zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8285',NULL,0); INSERT INTO "usage" VALUES('EPSG','5772','projected_crs','EPSG','8323','EPSG','4477','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8324','NAD83(2011) / Oregon Medford-Diamond Lake zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8286',NULL,0); INSERT INTO "usage" VALUES('EPSG','5773','projected_crs','EPSG','8324','EPSG','4477','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8325','NAD83(2011) / Oregon Mitchell zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8287',NULL,0); INSERT INTO "usage" VALUES('EPSG','5774','projected_crs','EPSG','8325','EPSG','4478','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8326','NAD83(2011) / Oregon Mitchell zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8288',NULL,0); INSERT INTO "usage" VALUES('EPSG','5775','projected_crs','EPSG','8326','EPSG','4478','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8327','NAD83(2011) / Oregon North Central zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8289',NULL,0); INSERT INTO "usage" VALUES('EPSG','5776','projected_crs','EPSG','8327','EPSG','4479','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8328','NAD83(2011) / Oregon North Central zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8290',NULL,0); INSERT INTO "usage" VALUES('EPSG','5777','projected_crs','EPSG','8328','EPSG','4479','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8329','NAD83(2011) / Oregon Ochoco Summit zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8291',NULL,0); INSERT INTO "usage" VALUES('EPSG','5778','projected_crs','EPSG','8329','EPSG','4481','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8330','NAD83(2011) / Oregon Ochoco Summit zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8292',NULL,0); INSERT INTO "usage" VALUES('EPSG','5779','projected_crs','EPSG','8330','EPSG','4481','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8331','NAD83(2011) / Oregon Owyhee zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8293',NULL,0); INSERT INTO "usage" VALUES('EPSG','5780','projected_crs','EPSG','8331','EPSG','4482','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8332','NAD83(2011) / Oregon Owyhee zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8294',NULL,0); INSERT INTO "usage" VALUES('EPSG','5781','projected_crs','EPSG','8332','EPSG','4482','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8333','NAD83(2011) / Oregon Pilot Rock-Ukiah zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8295',NULL,0); INSERT INTO "usage" VALUES('EPSG','5782','projected_crs','EPSG','8333','EPSG','4483','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8334','NAD83(2011) / Oregon Pilot Rock-Ukiah zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8296',NULL,0); INSERT INTO "usage" VALUES('EPSG','5783','projected_crs','EPSG','8334','EPSG','4483','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8335','NAD83(2011) / Oregon Prairie City-Brogan zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8297',NULL,0); INSERT INTO "usage" VALUES('EPSG','5784','projected_crs','EPSG','8335','EPSG','4484','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8336','NAD83(2011) / Oregon Prairie City-Brogan zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8298',NULL,0); INSERT INTO "usage" VALUES('EPSG','5785','projected_crs','EPSG','8336','EPSG','4484','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8337','NAD83(2011) / Oregon Riley-Lakeview zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8299',NULL,0); INSERT INTO "usage" VALUES('EPSG','5786','projected_crs','EPSG','8337','EPSG','4458','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8338','NAD83(2011) / Oregon Riley-Lakeview zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8300',NULL,0); INSERT INTO "usage" VALUES('EPSG','5787','projected_crs','EPSG','8338','EPSG','4458','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8339','NAD83(2011) / Oregon Siskiyou Pass zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8301',NULL,0); INSERT INTO "usage" VALUES('EPSG','5788','projected_crs','EPSG','8339','EPSG','4463','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8340','NAD83(2011) / Oregon Siskiyou Pass zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8302',NULL,0); INSERT INTO "usage" VALUES('EPSG','5789','projected_crs','EPSG','8340','EPSG','4463','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8341','NAD83(2011) / Oregon Ukiah-Fox zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8303',NULL,0); INSERT INTO "usage" VALUES('EPSG','5790','projected_crs','EPSG','8341','EPSG','4470','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8342','NAD83(2011) / Oregon Ukiah-Fox zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8304',NULL,0); INSERT INTO "usage" VALUES('EPSG','5791','projected_crs','EPSG','8342','EPSG','4470','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8343','NAD83(2011) / Oregon Wallowa zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8305',NULL,0); INSERT INTO "usage" VALUES('EPSG','5792','projected_crs','EPSG','8343','EPSG','4480','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8344','NAD83(2011) / Oregon Wallowa zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8306',NULL,0); INSERT INTO "usage" VALUES('EPSG','5793','projected_crs','EPSG','8344','EPSG','4480','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8345','NAD83(2011) / Oregon Warner Highway zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8307',NULL,0); INSERT INTO "usage" VALUES('EPSG','5794','projected_crs','EPSG','8345','EPSG','4486','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8346','NAD83(2011) / Oregon Warner Highway zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8308',NULL,0); INSERT INTO "usage" VALUES('EPSG','5795','projected_crs','EPSG','8346','EPSG','4486','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8347','NAD83(2011) / Oregon Willamette Pass zone (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8309',NULL,0); INSERT INTO "usage" VALUES('EPSG','5796','projected_crs','EPSG','8347','EPSG','4488','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8348','NAD83(2011) / Oregon Willamette Pass zone (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','8310',NULL,0); INSERT INTO "usage" VALUES('EPSG','5797','projected_crs','EPSG','8348','EPSG','4488','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8352','S-JTSK [JTSK03] / Krovak',NULL,'EPSG','6501','EPSG','8351','EPSG','5509',NULL,0); INSERT INTO "usage" VALUES('EPSG','5801','projected_crs','EPSG','8352','EPSG','1211','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8353','S-JTSK [JTSK03] / Krovak East North',NULL,'EPSG','4499','EPSG','8351','EPSG','5510',NULL,0); INSERT INTO "usage" VALUES('EPSG','5802','projected_crs','EPSG','8353','EPSG','1211','EPSG','1189'); INSERT INTO "projected_crs" VALUES('EPSG','8379','NAD83 / NCRS Las Vegas (m)',NULL,'EPSG','4499','EPSG','4269','EPSG','8373',NULL,0); INSERT INTO "usage" VALUES('EPSG','5809','projected_crs','EPSG','8379','EPSG','4485','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8380','NAD83 / NCRS Las Vegas (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','8374',NULL,0); INSERT INTO "usage" VALUES('EPSG','5810','projected_crs','EPSG','8380','EPSG','4485','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8381','NAD83 / NCRS Las Vegas high (m)',NULL,'EPSG','4499','EPSG','4269','EPSG','8375',NULL,0); INSERT INTO "usage" VALUES('EPSG','5811','projected_crs','EPSG','8381','EPSG','4487','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8382','NAD83 / NCRS Las Vegas high (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','8376',NULL,0); INSERT INTO "usage" VALUES('EPSG','5812','projected_crs','EPSG','8382','EPSG','4487','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8383','NAD83(2011) / NCRS Las Vegas (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8373',NULL,0); INSERT INTO "usage" VALUES('EPSG','5813','projected_crs','EPSG','8383','EPSG','4485','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8384','NAD83(2011) / NCRS Las Vegas (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','8374',NULL,0); INSERT INTO "usage" VALUES('EPSG','5814','projected_crs','EPSG','8384','EPSG','4485','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8385','NAD83(2011) / NCRS Las Vegas high (m)',NULL,'EPSG','4499','EPSG','6318','EPSG','8375',NULL,0); INSERT INTO "usage" VALUES('EPSG','5815','projected_crs','EPSG','8385','EPSG','4487','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8387','NAD83(2011) / NCRS Las Vegas high (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','8376',NULL,0); INSERT INTO "usage" VALUES('EPSG','5816','projected_crs','EPSG','8387','EPSG','4487','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','8391','GDA94 / WEIPA94',NULL,'EPSG','4400','EPSG','4283','EPSG','8389',NULL,0); INSERT INTO "usage" VALUES('EPSG','5817','projected_crs','EPSG','8391','EPSG','4491','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','8395','ETRS89 / Gauss-Kruger CM 9E',NULL,'EPSG','4400','EPSG','4258','EPSG','16302',NULL,0); INSERT INTO "usage" VALUES('EPSG','5818','projected_crs','EPSG','8395','EPSG','4490','EPSG','1143'); INSERT INTO "projected_crs" VALUES('EPSG','8433','Macao 1920 / Macao Grid',NULL,'EPSG','4500','EPSG','8428','EPSG','8432',NULL,0); INSERT INTO "usage" VALUES('EPSG','5830','projected_crs','EPSG','8433','EPSG','1147','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','8441','Tananarive / Laborde Grid',NULL,'EPSG','4530','EPSG','4297','EPSG','8440',NULL,0); INSERT INTO "usage" VALUES('EPSG','5832','projected_crs','EPSG','8441','EPSG','3273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8455','RGTAAF07 / UTM zone 53S',NULL,'EPSG','4400','EPSG','7073','EPSG','16153',NULL,0); INSERT INTO "usage" VALUES('EPSG','5834','projected_crs','EPSG','8455','EPSG','4489','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8456','RGTAAF07 / UTM zone 54S',NULL,'EPSG','4400','EPSG','7073','EPSG','16154',NULL,0); INSERT INTO "usage" VALUES('EPSG','5835','projected_crs','EPSG','8456','EPSG','4492','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8518','NAD83(2011) / KS RCS zone 1',NULL,'EPSG','4497','EPSG','6318','EPSG','8458',NULL,0); INSERT INTO "usage" VALUES('EPSG','5836','projected_crs','EPSG','8518','EPSG','4495','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8519','NAD83(2011) / KS RCS zone 2',NULL,'EPSG','4497','EPSG','6318','EPSG','8459',NULL,0); INSERT INTO "usage" VALUES('EPSG','5837','projected_crs','EPSG','8519','EPSG','4496','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8520','NAD83(2011) / KS RCS zone 3',NULL,'EPSG','4497','EPSG','6318','EPSG','8490',NULL,0); INSERT INTO "usage" VALUES('EPSG','5838','projected_crs','EPSG','8520','EPSG','4497','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8521','NAD83(2011) / KS RCS zone 4',NULL,'EPSG','4497','EPSG','6318','EPSG','8491',NULL,0); INSERT INTO "usage" VALUES('EPSG','5839','projected_crs','EPSG','8521','EPSG','4494','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8522','NAD83(2011) / KS RCS zone 5',NULL,'EPSG','4497','EPSG','6318','EPSG','8492',NULL,0); INSERT INTO "usage" VALUES('EPSG','5840','projected_crs','EPSG','8522','EPSG','4498','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8523','NAD83(2011) / KS RCS zone 6',NULL,'EPSG','4497','EPSG','6318','EPSG','8493',NULL,0); INSERT INTO "usage" VALUES('EPSG','5841','projected_crs','EPSG','8523','EPSG','4499','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8524','NAD83(2011) / KS RCS zone 7',NULL,'EPSG','4497','EPSG','6318','EPSG','8494',NULL,0); INSERT INTO "usage" VALUES('EPSG','5842','projected_crs','EPSG','8524','EPSG','4500','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8525','NAD83(2011) / KS RCS zone 8',NULL,'EPSG','4497','EPSG','6318','EPSG','8495',NULL,0); INSERT INTO "usage" VALUES('EPSG','5843','projected_crs','EPSG','8525','EPSG','4501','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8526','NAD83(2011) / KS RCS zone 9',NULL,'EPSG','4497','EPSG','6318','EPSG','8498',NULL,0); INSERT INTO "usage" VALUES('EPSG','5844','projected_crs','EPSG','8526','EPSG','4502','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8527','NAD83(2011) / KS RCS zone 10',NULL,'EPSG','4497','EPSG','6318','EPSG','8499',NULL,0); INSERT INTO "usage" VALUES('EPSG','5845','projected_crs','EPSG','8527','EPSG','4503','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8528','NAD83(2011) / KS RCS zone 11',NULL,'EPSG','4497','EPSG','6318','EPSG','8500',NULL,0); INSERT INTO "usage" VALUES('EPSG','5846','projected_crs','EPSG','8528','EPSG','4504','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8529','NAD83(2011) / KS RCS zone 12',NULL,'EPSG','4497','EPSG','6318','EPSG','8501',NULL,0); INSERT INTO "usage" VALUES('EPSG','5847','projected_crs','EPSG','8529','EPSG','4505','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8531','NAD83(2011) / KS RCS zone 13',NULL,'EPSG','4497','EPSG','6318','EPSG','8502',NULL,0); INSERT INTO "usage" VALUES('EPSG','5848','projected_crs','EPSG','8531','EPSG','4506','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8533','NAD83(2011) / KS RCS zone 14',NULL,'EPSG','4497','EPSG','6318','EPSG','8503',NULL,0); INSERT INTO "usage" VALUES('EPSG','5849','projected_crs','EPSG','8533','EPSG','4507','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8534','NAD83(2011) / KS RCS zone 15',NULL,'EPSG','4497','EPSG','6318','EPSG','8504',NULL,0); INSERT INTO "usage" VALUES('EPSG','5850','projected_crs','EPSG','8534','EPSG','4508','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8535','NAD83(2011) / KS RCS zone 16',NULL,'EPSG','4497','EPSG','6318','EPSG','8505',NULL,0); INSERT INTO "usage" VALUES('EPSG','5851','projected_crs','EPSG','8535','EPSG','4509','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8536','NAD83(2011) / KS RCS zone 17',NULL,'EPSG','4497','EPSG','6318','EPSG','8506',NULL,0); INSERT INTO "usage" VALUES('EPSG','5852','projected_crs','EPSG','8536','EPSG','4510','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8538','NAD83(2011) / KS RCS zone 18',NULL,'EPSG','4497','EPSG','6318','EPSG','8507',NULL,0); INSERT INTO "usage" VALUES('EPSG','5853','projected_crs','EPSG','8538','EPSG','4511','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8539','NAD83(2011) / KS RCS zone 19',NULL,'EPSG','4497','EPSG','6318','EPSG','8515',NULL,0); INSERT INTO "usage" VALUES('EPSG','5854','projected_crs','EPSG','8539','EPSG','4512','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8540','NAD83(2011) / KS RCS zone 20',NULL,'EPSG','4497','EPSG','6318','EPSG','8516',NULL,0); INSERT INTO "usage" VALUES('EPSG','5855','projected_crs','EPSG','8540','EPSG','4513','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','8677','MGI 1901 / Balkans zone 5',NULL,'EPSG','4498','EPSG','3906','EPSG','18275',NULL,0); INSERT INTO "usage" VALUES('EPSG','5862','projected_crs','EPSG','8677','EPSG','1709','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8678','MGI 1901 / Balkans zone 6',NULL,'EPSG','4498','EPSG','3906','EPSG','18276',NULL,0); INSERT INTO "usage" VALUES('EPSG','5863','projected_crs','EPSG','8678','EPSG','1710','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8679','MGI 1901 / Balkans zone 8',NULL,'EPSG','4498','EPSG','3906','EPSG','18278',NULL,0); INSERT INTO "usage" VALUES('EPSG','5864','projected_crs','EPSG','8679','EPSG','1712','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8682','SRB_ETRS89 / UTM zone 34N',NULL,'EPSG','4400','EPSG','8685','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','5865','projected_crs','EPSG','8682','EPSG','4543','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8686','MGI 1901 / Slovenia Grid',NULL,'EPSG','4498','EPSG','3906','EPSG','19967',NULL,0); INSERT INTO "usage" VALUES('EPSG','5869','projected_crs','EPSG','8686','EPSG','1212','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8687','Slovenia 1996 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4765','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','5870','projected_crs','EPSG','8687','EPSG','1212','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','8692','NAD83(MA11) / UTM zone 54N',NULL,'EPSG','4400','EPSG','6325','EPSG','16054',NULL,0); INSERT INTO "usage" VALUES('EPSG','5873','projected_crs','EPSG','8692','EPSG','4514','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8693','NAD83(MA11) / UTM zone 55N',NULL,'EPSG','4400','EPSG','6325','EPSG','16055',NULL,0); INSERT INTO "usage" VALUES('EPSG','5874','projected_crs','EPSG','8693','EPSG','4518','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8826','NAD83 / Idaho Transverse Mercator',NULL,'EPSG','4499','EPSG','4269','EPSG','8825',NULL,0); INSERT INTO "usage" VALUES('EPSG','6000','projected_crs','EPSG','8826','EPSG','1381','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','8836','MTRF-2000 / UTM zone 36N',NULL,'EPSG','4400','EPSG','8818','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6001','projected_crs','EPSG','8836','EPSG','4524','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8837','MTRF-2000 / UTM zone 37N',NULL,'EPSG','4400','EPSG','8818','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6002','projected_crs','EPSG','8837','EPSG','4526','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8838','MTRF-2000 / UTM zone 38N',NULL,'EPSG','4400','EPSG','8818','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','6003','projected_crs','EPSG','8838','EPSG','4527','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8839','MTRF-2000 / UTM zone 39N',NULL,'EPSG','4400','EPSG','8818','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','6004','projected_crs','EPSG','8839','EPSG','4528','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8840','MTRF-2000 / UTM zone 40N',NULL,'EPSG','4400','EPSG','8818','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','6005','projected_crs','EPSG','8840','EPSG','3106','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8857','WGS 84 / Equal Earth Greenwich',NULL,'EPSG','4400','EPSG','4326','EPSG','8854',NULL,0); INSERT INTO "usage" VALUES('EPSG','6007','projected_crs','EPSG','8857','EPSG','1262','EPSG','1225'); INSERT INTO "projected_crs" VALUES('EPSG','8858','WGS 84 / Equal Earth Americas',NULL,'EPSG','4400','EPSG','4326','EPSG','8855',NULL,0); INSERT INTO "usage" VALUES('EPSG','6008','projected_crs','EPSG','8858','EPSG','4520','EPSG','1223'); INSERT INTO "projected_crs" VALUES('EPSG','8859','WGS 84 / Equal Earth Asia-Pacific',NULL,'EPSG','4400','EPSG','4326','EPSG','8856',NULL,0); INSERT INTO "usage" VALUES('EPSG','6009','projected_crs','EPSG','8859','EPSG','4523','EPSG','1224'); INSERT INTO "projected_crs" VALUES('EPSG','8903','RGWF96 / UTM zone 1S',NULL,'EPSG','4400','EPSG','8900','EPSG','16101',NULL,0); INSERT INTO "usage" VALUES('EPSG','6019','projected_crs','EPSG','8903','EPSG','1255','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8908','CR-SIRGAS / CRTM05',NULL,'EPSG','4400','EPSG','8907','EPSG','5366',NULL,0); INSERT INTO "usage" VALUES('EPSG','6024','projected_crs','EPSG','8908','EPSG','3232','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','8909','CR-SIRGAS / UTM zone 16N',NULL,'EPSG','4400','EPSG','8907','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','6025','projected_crs','EPSG','8909','EPSG','4532','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','8910','CR-SIRGAS / UTM zone 17N',NULL,'EPSG','4400','EPSG','8907','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','6026','projected_crs','EPSG','8910','EPSG','4531','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','8950','SIRGAS-Chile 2010 / UTM zone 18S',NULL,'EPSG','4400','EPSG','8949','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','6064','projected_crs','EPSG','8950','EPSG','3829','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','8951','SIRGAS-Chile 2010 / UTM zone 19S',NULL,'EPSG','4400','EPSG','8949','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','6065','projected_crs','EPSG','8951','EPSG','3811','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9039','ISN2016 / LAEA Europe',NULL,'EPSG','4532','EPSG','8086','EPSG','19986',NULL,0); INSERT INTO "usage" VALUES('EPSG','6114','projected_crs','EPSG','9039','EPSG','1120','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','9040','ISN2016 / LCC Europe',NULL,'EPSG','4532','EPSG','8086','EPSG','19985',NULL,0); INSERT INTO "usage" VALUES('EPSG','6115','projected_crs','EPSG','9040','EPSG','1120','EPSG','1107'); INSERT INTO "projected_crs" VALUES('EPSG','9141','KOSOVAREF01 / Balkans zone 7',NULL,'EPSG','4400','EPSG','9140','EPSG','18277',NULL,0); INSERT INTO "usage" VALUES('EPSG','6142','projected_crs','EPSG','9141','EPSG','4542','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9149','SIRGAS-Chile 2013 / UTM zone 18S',NULL,'EPSG','4400','EPSG','9148','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','6146','projected_crs','EPSG','9149','EPSG','3829','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9150','SIRGAS-Chile 2013 / UTM zone 19S',NULL,'EPSG','4400','EPSG','9148','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','6147','projected_crs','EPSG','9150','EPSG','3811','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9154','SIRGAS-Chile 2016 / UTM zone 18S',NULL,'EPSG','4400','EPSG','9153','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','6151','projected_crs','EPSG','9154','EPSG','3829','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9155','SIRGAS-Chile 2016 / UTM zone 19S',NULL,'EPSG','4400','EPSG','9153','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','6152','projected_crs','EPSG','9155','EPSG','3811','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9156','RSAO13 / UTM zone 32S',NULL,'EPSG','4400','EPSG','8699','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6153','projected_crs','EPSG','9156','EPSG','4551','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9157','RSAO13 / UTM zone 33S',NULL,'EPSG','4400','EPSG','8699','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','6154','projected_crs','EPSG','9157','EPSG','4555','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9158','RSAO13 / UTM zone 34S',NULL,'EPSG','4400','EPSG','8699','EPSG','16134',NULL,0); INSERT INTO "usage" VALUES('EPSG','6155','projected_crs','EPSG','9158','EPSG','4539','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9159','RSAO13 / TM 12 SE',NULL,'EPSG','4400','EPSG','8699','EPSG','16612',NULL,0); INSERT INTO "usage" VALUES('EPSG','6156','projected_crs','EPSG','9159','EPSG','1604','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9191','WGS 84 / NIWA Albers',NULL,'EPSG','4400','EPSG','4326','EPSG','9190',NULL,0); INSERT INTO "usage" VALUES('EPSG','6160','projected_crs','EPSG','9191','EPSG','3508','EPSG','1247'); INSERT INTO "projected_crs" VALUES('EPSG','9205','VN-2000 / TM-3 103-00',NULL,'EPSG','4400','EPSG','4756','EPSG','9058',NULL,0); INSERT INTO "usage" VALUES('EPSG','6161','projected_crs','EPSG','9205','EPSG','4541','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9206','VN-2000 / TM-3 104-00',NULL,'EPSG','4400','EPSG','4756','EPSG','9192',NULL,0); INSERT INTO "usage" VALUES('EPSG','6162','projected_crs','EPSG','9206','EPSG','4538','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9207','VN-2000 / TM-3 104-30',NULL,'EPSG','4400','EPSG','4756','EPSG','9193',NULL,0); INSERT INTO "usage" VALUES('EPSG','6163','projected_crs','EPSG','9207','EPSG','4545','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9208','VN-2000 / TM-3 104-45',NULL,'EPSG','4400','EPSG','4756','EPSG','9194',NULL,0); INSERT INTO "usage" VALUES('EPSG','6164','projected_crs','EPSG','9208','EPSG','4546','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9209','VN-2000 / TM-3 105-30',NULL,'EPSG','4400','EPSG','4756','EPSG','9195',NULL,0); INSERT INTO "usage" VALUES('EPSG','6165','projected_crs','EPSG','9209','EPSG','4548','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9210','VN-2000 / TM-3 105-45',NULL,'EPSG','4400','EPSG','4756','EPSG','9196',NULL,0); INSERT INTO "usage" VALUES('EPSG','6166','projected_crs','EPSG','9210','EPSG','4549','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9211','VN-2000 / TM-3 106-00',NULL,'EPSG','4400','EPSG','4756','EPSG','9197',NULL,0); INSERT INTO "usage" VALUES('EPSG','6167','projected_crs','EPSG','9211','EPSG','4550','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9212','VN-2000 / TM-3 106-15',NULL,'EPSG','4400','EPSG','4756','EPSG','9198',NULL,0); INSERT INTO "usage" VALUES('EPSG','6168','projected_crs','EPSG','9212','EPSG','4552','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9213','VN-2000 / TM-3 106-30',NULL,'EPSG','4400','EPSG','4756','EPSG','9199',NULL,0); INSERT INTO "usage" VALUES('EPSG','6169','projected_crs','EPSG','9213','EPSG','4553','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9214','VN-2000 / TM-3 107-00',NULL,'EPSG','4400','EPSG','4756','EPSG','9200',NULL,0); INSERT INTO "usage" VALUES('EPSG','6170','projected_crs','EPSG','9214','EPSG','4554','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9215','VN-2000 / TM-3 107-15',NULL,'EPSG','4400','EPSG','4756','EPSG','9201',NULL,0); INSERT INTO "usage" VALUES('EPSG','6171','projected_crs','EPSG','9215','EPSG','4556','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9216','VN-2000 / TM-3 107-30',NULL,'EPSG','4400','EPSG','4756','EPSG','9202',NULL,0); INSERT INTO "usage" VALUES('EPSG','6172','projected_crs','EPSG','9216','EPSG','4557','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9217','VN-2000 / TM-3 108-15',NULL,'EPSG','4400','EPSG','4756','EPSG','9203',NULL,0); INSERT INTO "usage" VALUES('EPSG','6173','projected_crs','EPSG','9217','EPSG','4559','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9218','VN-2000 / TM-3 108-30',NULL,'EPSG','4400','EPSG','4756','EPSG','9204',NULL,0); INSERT INTO "usage" VALUES('EPSG','6174','projected_crs','EPSG','9218','EPSG','4560','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','9221','Hartebeesthoek94 / ZAF BSU Albers 25E',NULL,'EPSG','4500','EPSG','4148','EPSG','9219',NULL,0); INSERT INTO "usage" VALUES('EPSG','6175','projected_crs','EPSG','9221','EPSG','4567','EPSG','1240'); INSERT INTO "projected_crs" VALUES('EPSG','9222','Hartebeesthoek94 / ZAF BSU Albers 44E',NULL,'EPSG','4500','EPSG','4148','EPSG','9220',NULL,0); INSERT INTO "usage" VALUES('EPSG','6176','projected_crs','EPSG','9222','EPSG','4568','EPSG','1240'); INSERT INTO "projected_crs" VALUES('EPSG','9249','Tapi Aike / Argentina 1',NULL,'EPSG','4530','EPSG','9248','EPSG','18031',NULL,0); INSERT INTO "usage" VALUES('EPSG','13902','projected_crs','EPSG','9249','EPSG','4570','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9250','Tapi Aike / Argentina 2',NULL,'EPSG','4530','EPSG','9248','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','13903','projected_crs','EPSG','9250','EPSG','4571','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9252','MMN / Argentina 2',NULL,'EPSG','4530','EPSG','9251','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','13905','projected_crs','EPSG','9252','EPSG','2357','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9254','MMS / Argentina 2',NULL,'EPSG','4530','EPSG','9253','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','13907','projected_crs','EPSG','9254','EPSG','2357','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9265','POSGAR 2007 / UTM zone 19S',NULL,'EPSG','4400','EPSG','5340','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','13909','projected_crs','EPSG','9265','EPSG','2596','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9271','MGI / Austria West',NULL,'EPSG','4530','EPSG','4312','EPSG','9268',NULL,0); INSERT INTO "usage" VALUES('EPSG','13912','projected_crs','EPSG','9271','EPSG','1706','EPSG','1258'); INSERT INTO "projected_crs" VALUES('EPSG','9272','MGI / Austria Central',NULL,'EPSG','4530','EPSG','4312','EPSG','9269',NULL,0); INSERT INTO "usage" VALUES('EPSG','13913','projected_crs','EPSG','9272','EPSG','1707','EPSG','1258'); INSERT INTO "projected_crs" VALUES('EPSG','9273','MGI / Austria East',NULL,'EPSG','4530','EPSG','4312','EPSG','9270',NULL,0); INSERT INTO "usage" VALUES('EPSG','13914','projected_crs','EPSG','9273','EPSG','1708','EPSG','1258'); INSERT INTO "projected_crs" VALUES('EPSG','9284','Pampa del Castillo / Argentina 1',NULL,'EPSG','4530','EPSG','4161','EPSG','18031',NULL,0); INSERT INTO "usage" VALUES('EPSG','13917','projected_crs','EPSG','9284','EPSG','4564','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9285','Pampa del Castillo / Argentina 3',NULL,'EPSG','4530','EPSG','4161','EPSG','18033',NULL,0); INSERT INTO "usage" VALUES('EPSG','13918','projected_crs','EPSG','9285','EPSG','4565','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','9295','ONGD17 / UTM zone 39N',NULL,'EPSG','4400','EPSG','9294','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','13966','projected_crs','EPSG','9295','EPSG','4322','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','9296','ONGD17 / UTM zone 40N',NULL,'EPSG','4400','EPSG','9294','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','13967','projected_crs','EPSG','9296','EPSG','4323','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','9297','ONGD17 / UTM zone 41N',NULL,'EPSG','4400','EPSG','9294','EPSG','16041',NULL,0); INSERT INTO "usage" VALUES('EPSG','13968','projected_crs','EPSG','9297','EPSG','4324','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','9300','HS2 Survey Grid',NULL,'EPSG','4400','EPSG','9299','EPSG','9301',NULL,0); INSERT INTO "usage" VALUES('EPSG','14048','projected_crs','EPSG','9300','EPSG','4582','EPSG','1260'); INSERT INTO "projected_crs" VALUES('EPSG','9311','NAD27 / US National Atlas Equal Area',NULL,'EPSG','4499','EPSG','4267','EPSG','3899',NULL,0); INSERT INTO "usage" VALUES('EPSG','13969','projected_crs','EPSG','9311','EPSG','1245','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','9354','WGS 84 / IBCSO Polar Stereographic',NULL,'EPSG','4470','EPSG','4326','EPSG','9353',NULL,0); INSERT INTO "usage" VALUES('EPSG','13978','projected_crs','EPSG','9354','EPSG','4586','EPSG','1198'); INSERT INTO "projected_crs" VALUES('EPSG','9356','KSA-GRF17 / UTM zone 36N',NULL,'EPSG','4400','EPSG','9333','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','14173','projected_crs','EPSG','9356','EPSG','4524','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9357','KSA-GRF17 / UTM zone 37N',NULL,'EPSG','4400','EPSG','9333','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','14174','projected_crs','EPSG','9357','EPSG','4526','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9358','KSA-GRF17 / UTM zone 38N',NULL,'EPSG','4400','EPSG','9333','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','14175','projected_crs','EPSG','9358','EPSG','4527','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9359','KSA-GRF17 / UTM zone 39N',NULL,'EPSG','4400','EPSG','9333','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','14176','projected_crs','EPSG','9359','EPSG','4528','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9360','KSA-GRF17 / UTM zone 40N',NULL,'EPSG','4400','EPSG','9333','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','14177','projected_crs','EPSG','9360','EPSG','3106','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9367','TPEN11 Grid',NULL,'EPSG','4400','EPSG','9364','EPSG','9366',NULL,0); INSERT INTO "usage" VALUES('EPSG','13975','projected_crs','EPSG','9367','EPSG','4583','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9373','MML07 Grid',NULL,'EPSG','4400','EPSG','9372','EPSG','9370',NULL,0); INSERT INTO "usage" VALUES('EPSG','13996','projected_crs','EPSG','9373','EPSG','4588','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9377','MAGNA-SIRGAS 2018 / Origen-Nacional',NULL,'EPSG','4500','EPSG','20046','EPSG','9376',NULL,0); INSERT INTO "usage" VALUES('EPSG','13998','projected_crs','EPSG','9377','EPSG','1070','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','9387','AbInvA96_2020 Grid',NULL,'EPSG','4400','EPSG','9384','EPSG','9385',NULL,0); INSERT INTO "usage" VALUES('EPSG','14029','projected_crs','EPSG','9387','EPSG','4589','EPSG','1196'); INSERT INTO "projected_crs" VALUES('EPSG','9391','BGS2005 / UTM zone 35N',NULL,'EPSG','4400','EPSG','7798','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','14051','projected_crs','EPSG','9391','EPSG','4427','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','9404','PN68 / UTM zone 27N',NULL,'EPSG','4400','EPSG','9403','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','14043','projected_crs','EPSG','9404','EPSG','4599','EPSG','1178'); INSERT INTO "projected_crs" VALUES('EPSG','9405','PN68 / UTM zone 28N',NULL,'EPSG','4400','EPSG','9403','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','14044','projected_crs','EPSG','9405','EPSG','4600','EPSG','1178'); INSERT INTO "projected_crs" VALUES('EPSG','9406','PN84 / UTM zone 27N',NULL,'EPSG','4400','EPSG','4728','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','14045','projected_crs','EPSG','9406','EPSG','4599','EPSG','1178'); INSERT INTO "projected_crs" VALUES('EPSG','9407','PN84 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4728','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','14046','projected_crs','EPSG','9407','EPSG','4601','EPSG','1178'); INSERT INTO "projected_crs" VALUES('EPSG','9456','GBK19 Grid',NULL,'EPSG','4400','EPSG','9453','EPSG','9455',NULL,0); INSERT INTO "usage" VALUES('EPSG','14131','projected_crs','EPSG','9456','EPSG','4607','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9473','GDA2020 / Australian Albers',NULL,'EPSG','4400','EPSG','7844','EPSG','17365',NULL,0); INSERT INTO "usage" VALUES('EPSG','14155','projected_crs','EPSG','9473','EPSG','2575','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','9476','SRGI2013 / UTM zone 46N',NULL,'EPSG','4400','EPSG','9470','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','14158','projected_crs','EPSG','9476','EPSG','1647','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9477','SRGI2013 / UTM zone 47N',NULL,'EPSG','4400','EPSG','9470','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','14159','projected_crs','EPSG','9477','EPSG','1649','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9478','SRGI2013 / UTM zone 48N',NULL,'EPSG','4400','EPSG','9470','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','14160','projected_crs','EPSG','9478','EPSG','1651','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9479','SRGI2013 / UTM zone 49N',NULL,'EPSG','4400','EPSG','9470','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','14161','projected_crs','EPSG','9479','EPSG','1653','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9480','SRGI2013 / UTM zone 50N',NULL,'EPSG','4400','EPSG','9470','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('EPSG','14162','projected_crs','EPSG','9480','EPSG','1655','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9481','SRGI2013 / UTM zone 51N',NULL,'EPSG','4400','EPSG','9470','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','14163','projected_crs','EPSG','9481','EPSG','1657','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9482','SRGI2013 / UTM zone 52N',NULL,'EPSG','4400','EPSG','9470','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','14164','projected_crs','EPSG','9482','EPSG','1659','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9487','SRGI2013 / UTM zone 47S',NULL,'EPSG','4400','EPSG','9470','EPSG','16147',NULL,0); INSERT INTO "usage" VALUES('EPSG','14165','projected_crs','EPSG','9487','EPSG','1650','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9488','SRGI2013 / UTM zone 48S',NULL,'EPSG','4400','EPSG','9470','EPSG','16148',NULL,0); INSERT INTO "usage" VALUES('EPSG','14166','projected_crs','EPSG','9488','EPSG','1652','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9489','SRGI2013 / UTM zone 49S',NULL,'EPSG','4400','EPSG','9470','EPSG','16149',NULL,0); INSERT INTO "usage" VALUES('EPSG','14167','projected_crs','EPSG','9489','EPSG','1654','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9490','SRGI2013 / UTM zone 50S',NULL,'EPSG','4400','EPSG','9470','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','14168','projected_crs','EPSG','9490','EPSG','1656','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9491','SRGI2013 / UTM zone 51S',NULL,'EPSG','4400','EPSG','9470','EPSG','16151',NULL,0); INSERT INTO "usage" VALUES('EPSG','14169','projected_crs','EPSG','9491','EPSG','1658','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9492','SRGI2013 / UTM zone 52S',NULL,'EPSG','4400','EPSG','9470','EPSG','16152',NULL,0); INSERT INTO "usage" VALUES('EPSG','14170','projected_crs','EPSG','9492','EPSG','1660','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9493','SRGI2013 / UTM zone 53S',NULL,'EPSG','4400','EPSG','9470','EPSG','16153',NULL,0); INSERT INTO "usage" VALUES('EPSG','14171','projected_crs','EPSG','9493','EPSG','1662','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9494','SRGI2013 / UTM zone 54S',NULL,'EPSG','4400','EPSG','9470','EPSG','16154',NULL,0); INSERT INTO "usage" VALUES('EPSG','14172','projected_crs','EPSG','9494','EPSG','1663','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','9498','POSGAR 2007 / CABA 2019',NULL,'EPSG','4530','EPSG','5340','EPSG','9497',NULL,0); INSERT INTO "usage" VALUES('EPSG','14513','projected_crs','EPSG','9498','EPSG','4610','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','9549','LTF2004(C)',NULL,'EPSG','4400','EPSG','9547','EPSG','9548',NULL,0); INSERT INTO "usage" VALUES('EPSG','14928','projected_crs','EPSG','9549','EPSG','4613','EPSG','1271'); INSERT INTO "projected_crs" VALUES('EPSG','9674','NAD83 / USFS R6 Albers',NULL,'EPSG','4400','EPSG','4269','EPSG','9673',NULL,0); INSERT INTO "usage" VALUES('EPSG','14787','projected_crs','EPSG','9674','EPSG','2381','EPSG','1165'); INSERT INTO "projected_crs" VALUES('EPSG','9678','Gulshan 303 / Bangladesh Transverse Mercator',NULL,'EPSG','4400','EPSG','4682','EPSG','9677',NULL,0); INSERT INTO "usage" VALUES('EPSG','14849','projected_crs','EPSG','9678','EPSG','3217','EPSG','1274'); INSERT INTO "projected_crs" VALUES('EPSG','9680','WGS 84 / TM 90 NE',NULL,'EPSG','4400','EPSG','4326','EPSG','16490',NULL,0); INSERT INTO "usage" VALUES('EPSG','14880','projected_crs','EPSG','9680','EPSG','1041','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9697','REDGEOMIN / UTM zone 12S',NULL,'EPSG','4400','EPSG','9696','EPSG','16112',NULL,0); INSERT INTO "usage" VALUES('EPSG','15026','projected_crs','EPSG','9697','EPSG','3188','EPSG','1181'); INSERT INTO "projected_crs" VALUES('EPSG','9698','REDGEOMIN / UTM zone 18S',NULL,'EPSG','4400','EPSG','9696','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','14943','projected_crs','EPSG','9698','EPSG','3829','EPSG','1181'); INSERT INTO "projected_crs" VALUES('EPSG','9699','REDGEOMIN / UTM zone 19S',NULL,'EPSG','4400','EPSG','9696','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','14945','projected_crs','EPSG','9699','EPSG','3811','EPSG','1181'); INSERT INTO "projected_crs" VALUES('EPSG','9709','NAD83(CSRS) / UTM zone 23N',NULL,'EPSG','4400','EPSG','4617','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','15204','projected_crs','EPSG','9709','EPSG','2153','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9712','NAD83 / UTM zone 24N',NULL,'EPSG','4400','EPSG','4269','EPSG','16024',NULL,0); INSERT INTO "usage" VALUES('EPSG','15196','projected_crs','EPSG','9712','EPSG','4617','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9713','NAD83(CSRS) / UTM zone 24N',NULL,'EPSG','4400','EPSG','4617','EPSG','16024',NULL,0); INSERT INTO "usage" VALUES('EPSG','15195','projected_crs','EPSG','9713','EPSG','4617','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9716','IGM95 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4670','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','15325','projected_crs','EPSG','9716','EPSG','4187','EPSG','1027'); INSERT INTO "projected_crs" VALUES('EPSG','9741','EOS21 Grid',NULL,'EPSG','4400','EPSG','9739','EPSG','9738',NULL,0); INSERT INTO "usage" VALUES('EPSG','15317','projected_crs','EPSG','9741','EPSG','4620','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9748','NAD83(2011) / Alabama East (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','9746',NULL,0); INSERT INTO "usage" VALUES('EPSG','15376','projected_crs','EPSG','9748','EPSG','2154','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9749','NAD83(2011) / Alabama West (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','9747',NULL,0); INSERT INTO "usage" VALUES('EPSG','15375','projected_crs','EPSG','9749','EPSG','2155','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9761','ECML14_NB Grid',NULL,'EPSG','4400','EPSG','9758','EPSG','9760',NULL,0); INSERT INTO "usage" VALUES('EPSG','16498','projected_crs','EPSG','9761','EPSG','4621','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9766','EWR2 Grid',NULL,'EPSG','4400','EPSG','9763','EPSG','9765',NULL,0); INSERT INTO "usage" VALUES('EPSG','16509','projected_crs','EPSG','9766','EPSG','4622','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9793','RGF93 v2 / Lambert-93',NULL,'EPSG','4499','EPSG','9777','EPSG','18085',NULL,0); INSERT INTO "usage" VALUES('EPSG','16614','projected_crs','EPSG','9793','EPSG','1096','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9794','RGF93 v2b / Lambert-93',NULL,'EPSG','4499','EPSG','9782','EPSG','18085',NULL,0); INSERT INTO "usage" VALUES('EPSG','16615','projected_crs','EPSG','9794','EPSG','1096','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','9821','UCS-2000 / LCS-32 Kyiv region',NULL,'EPSG','4531','EPSG','5561','EPSG','9796',NULL,0); INSERT INTO "usage" VALUES('EPSG','16867','projected_crs','EPSG','9821','EPSG','4633','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9822','RGF93 v2 / CC42',NULL,'EPSG','4499','EPSG','9777','EPSG','18101',NULL,0); INSERT INTO "usage" VALUES('EPSG','16616','projected_crs','EPSG','9822','EPSG','3545','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9823','RGF93 v2 / CC43',NULL,'EPSG','4499','EPSG','9777','EPSG','18102',NULL,0); INSERT INTO "usage" VALUES('EPSG','16617','projected_crs','EPSG','9823','EPSG','3546','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9824','RGF93 v2 / CC44',NULL,'EPSG','4499','EPSG','9777','EPSG','18103',NULL,0); INSERT INTO "usage" VALUES('EPSG','16618','projected_crs','EPSG','9824','EPSG','3547','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9825','RGF93 v2 / CC45',NULL,'EPSG','4499','EPSG','9777','EPSG','18104',NULL,0); INSERT INTO "usage" VALUES('EPSG','16619','projected_crs','EPSG','9825','EPSG','3548','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9826','RGF93 v2 / CC46',NULL,'EPSG','4499','EPSG','9777','EPSG','18105',NULL,0); INSERT INTO "usage" VALUES('EPSG','16620','projected_crs','EPSG','9826','EPSG','3549','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9827','RGF93 v2 / CC47',NULL,'EPSG','4499','EPSG','9777','EPSG','18106',NULL,0); INSERT INTO "usage" VALUES('EPSG','16621','projected_crs','EPSG','9827','EPSG','3550','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9828','RGF93 v2 / CC48',NULL,'EPSG','4499','EPSG','9777','EPSG','18107',NULL,0); INSERT INTO "usage" VALUES('EPSG','16622','projected_crs','EPSG','9828','EPSG','3551','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9829','RGF93 v2 / CC49',NULL,'EPSG','4499','EPSG','9777','EPSG','18108',NULL,0); INSERT INTO "usage" VALUES('EPSG','16623','projected_crs','EPSG','9829','EPSG','3552','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9830','RGF93 v2 / CC50',NULL,'EPSG','4499','EPSG','9777','EPSG','18109',NULL,0); INSERT INTO "usage" VALUES('EPSG','16624','projected_crs','EPSG','9830','EPSG','3553','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9831','UCS-2000 / LCS-01 Crimea',NULL,'EPSG','4531','EPSG','5561','EPSG','9797',NULL,0); INSERT INTO "usage" VALUES('EPSG','16766','projected_crs','EPSG','9831','EPSG','4648','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9832','UCS-2000 / LCS-05 Vinnytsia',NULL,'EPSG','4531','EPSG','5561','EPSG','9798',NULL,0); INSERT INTO "usage" VALUES('EPSG','16767','projected_crs','EPSG','9832','EPSG','4643','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9833','UCS-2000 / LCS-07 Volyn',NULL,'EPSG','4531','EPSG','5561','EPSG','9799',NULL,0); INSERT INTO "usage" VALUES('EPSG','16768','projected_crs','EPSG','9833','EPSG','4644','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9834','UCS-2000 / LCS-12 Dnipropetrovsk',NULL,'EPSG','4531','EPSG','5561','EPSG','9800',NULL,0); INSERT INTO "usage" VALUES('EPSG','16769','projected_crs','EPSG','9834','EPSG','4627','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9835','UCS-2000 / LCS-14 Donetsk',NULL,'EPSG','4531','EPSG','5561','EPSG','9801',NULL,0); INSERT INTO "usage" VALUES('EPSG','16772','projected_crs','EPSG','9835','EPSG','4628','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9836','UCS-2000 / LCS-18 Zhytomyr',NULL,'EPSG','4531','EPSG','5561','EPSG','9802',NULL,0); INSERT INTO "usage" VALUES('EPSG','16771','projected_crs','EPSG','9836','EPSG','4647','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9837','UCS-2000 / LCS-21 Zakarpattia',NULL,'EPSG','4531','EPSG','5561','EPSG','9803',NULL,0); INSERT INTO "usage" VALUES('EPSG','16773','projected_crs','EPSG','9837','EPSG','4645','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9838','UCS-2000 / LCS-23 Zaporizhzhia',NULL,'EPSG','4531','EPSG','5561','EPSG','9804',NULL,0); INSERT INTO "usage" VALUES('EPSG','16774','projected_crs','EPSG','9838','EPSG','4646','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9839','UCS-2000 / LCS-26 Ivano-Frankivsk',NULL,'EPSG','4531','EPSG','5561','EPSG','9805',NULL,0); INSERT INTO "usage" VALUES('EPSG','16775','projected_crs','EPSG','9839','EPSG','4629','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9840','UCS-2000 / LCS-35 Kirovohrad',NULL,'EPSG','4531','EPSG','5561','EPSG','9806',NULL,0); INSERT INTO "usage" VALUES('EPSG','16776','projected_crs','EPSG','9840','EPSG','4634','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9841','UCS-2000 / LCS-44 Luhansk',NULL,'EPSG','4531','EPSG','5561','EPSG','9807',NULL,0); INSERT INTO "usage" VALUES('EPSG','16777','projected_crs','EPSG','9841','EPSG','4635','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9842','RGF93 v2b / CC42',NULL,'EPSG','4499','EPSG','9782','EPSG','18101',NULL,0); INSERT INTO "usage" VALUES('EPSG','16625','projected_crs','EPSG','9842','EPSG','3545','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9843','RGF93 v2b / CC43',NULL,'EPSG','4499','EPSG','9782','EPSG','18102',NULL,0); INSERT INTO "usage" VALUES('EPSG','16626','projected_crs','EPSG','9843','EPSG','3546','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9844','RGF93 v2b / CC44',NULL,'EPSG','4499','EPSG','9782','EPSG','18103',NULL,0); INSERT INTO "usage" VALUES('EPSG','16627','projected_crs','EPSG','9844','EPSG','3547','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9845','RGF93 v2b / CC45',NULL,'EPSG','4499','EPSG','9782','EPSG','18104',NULL,0); INSERT INTO "usage" VALUES('EPSG','16628','projected_crs','EPSG','9845','EPSG','3548','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9846','RGF93 v2b / CC46',NULL,'EPSG','4499','EPSG','9782','EPSG','18105',NULL,0); INSERT INTO "usage" VALUES('EPSG','16629','projected_crs','EPSG','9846','EPSG','3549','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9847','RGF93 v2b / CC47',NULL,'EPSG','4499','EPSG','9782','EPSG','18106',NULL,0); INSERT INTO "usage" VALUES('EPSG','16630','projected_crs','EPSG','9847','EPSG','3550','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9848','RGF93 v2b / CC48',NULL,'EPSG','4499','EPSG','9782','EPSG','18107',NULL,0); INSERT INTO "usage" VALUES('EPSG','16631','projected_crs','EPSG','9848','EPSG','3551','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9849','RGF93 v2b / CC49',NULL,'EPSG','4499','EPSG','9782','EPSG','18108',NULL,0); INSERT INTO "usage" VALUES('EPSG','16632','projected_crs','EPSG','9849','EPSG','3552','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9850','RGF93 v2b / CC50',NULL,'EPSG','4499','EPSG','9782','EPSG','18109',NULL,0); INSERT INTO "usage" VALUES('EPSG','16633','projected_crs','EPSG','9850','EPSG','3553','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','9851','UCS-2000 / LCS-46 Lviv',NULL,'EPSG','4531','EPSG','5561','EPSG','9808',NULL,0); INSERT INTO "usage" VALUES('EPSG','16778','projected_crs','EPSG','9851','EPSG','4636','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9852','UCS-2000 / LCS-48 Mykolaiv',NULL,'EPSG','4531','EPSG','5561','EPSG','9809',NULL,0); INSERT INTO "usage" VALUES('EPSG','16779','projected_crs','EPSG','9852','EPSG','4637','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9853','UCS-2000 / LCS-51 Odessa',NULL,'EPSG','4531','EPSG','5561','EPSG','9810',NULL,0); INSERT INTO "usage" VALUES('EPSG','16780','projected_crs','EPSG','9853','EPSG','4638','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9854','UCS-2000 / LCS-53 Poltava',NULL,'EPSG','4531','EPSG','5561','EPSG','9811',NULL,0); INSERT INTO "usage" VALUES('EPSG','16786','projected_crs','EPSG','9854','EPSG','4639','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9855','UCS-2000 / LCS-56 Rivne',NULL,'EPSG','4531','EPSG','5561','EPSG','9812',NULL,0); INSERT INTO "usage" VALUES('EPSG','16869','projected_crs','EPSG','9855','EPSG','4640','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9856','UCS-2000 / LCS-59 Sumy',NULL,'EPSG','4531','EPSG','5561','EPSG','9813',NULL,0); INSERT INTO "usage" VALUES('EPSG','16785','projected_crs','EPSG','9856','EPSG','4641','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9857','UCS-2000 / LCS-61 Ternopil',NULL,'EPSG','4531','EPSG','5561','EPSG','9814',NULL,0); INSERT INTO "usage" VALUES('EPSG','16789','projected_crs','EPSG','9857','EPSG','4642','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9858','UCS-2000 / LCS-63 Kharkiv',NULL,'EPSG','4531','EPSG','5561','EPSG','9815',NULL,0); INSERT INTO "usage" VALUES('EPSG','16788','projected_crs','EPSG','9858','EPSG','4630','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9859','UCS-2000 / LCS-65 Kherson',NULL,'EPSG','4531','EPSG','5561','EPSG','9816',NULL,0); INSERT INTO "usage" VALUES('EPSG','16790','projected_crs','EPSG','9859','EPSG','4631','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9860','UCS-2000 / LCS-68 Khmelnytsky',NULL,'EPSG','4531','EPSG','5561','EPSG','9812',NULL,0); INSERT INTO "usage" VALUES('EPSG','16868','projected_crs','EPSG','9860','EPSG','4632','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9861','UCS-2000 / LCS-71 Cherkasy',NULL,'EPSG','4531','EPSG','5561','EPSG','9817',NULL,0); INSERT INTO "usage" VALUES('EPSG','16842','projected_crs','EPSG','9861','EPSG','4624','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9862','UCS-2000 / LCS-73 Chernivtsi',NULL,'EPSG','4531','EPSG','5561','EPSG','9818',NULL,0); INSERT INTO "usage" VALUES('EPSG','16841','projected_crs','EPSG','9862','EPSG','4626','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9863','UCS-2000 / LCS-74 Chernihiv',NULL,'EPSG','4531','EPSG','5561','EPSG','9819',NULL,0); INSERT INTO "usage" VALUES('EPSG','16840','projected_crs','EPSG','9863','EPSG','4625','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9864','UCS-2000 / LCS-80 Kyiv city',NULL,'EPSG','4531','EPSG','5561','EPSG','9796',NULL,0); INSERT INTO "usage" VALUES('EPSG','16922','projected_crs','EPSG','9864','EPSG','4623','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9865','UCS-2000 / LCS-85 Sevastopol',NULL,'EPSG','4531','EPSG','5561','EPSG','9820',NULL,0); INSERT INTO "usage" VALUES('EPSG','16836','projected_crs','EPSG','9865','EPSG','4649','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','9869','MRH21 Grid',NULL,'EPSG','4400','EPSG','9866','EPSG','9868',NULL,0); INSERT INTO "usage" VALUES('EPSG','16939','projected_crs','EPSG','9869','EPSG','4652','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9874','PNG94 / PNGMG94 zone 57',NULL,'EPSG','4400','EPSG','5546','EPSG','9872',NULL,0); INSERT INTO "usage" VALUES('EPSG','16919','projected_crs','EPSG','9874','EPSG','4653','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9875','PNG94 / PNGMG94 zone 58',NULL,'EPSG','4400','EPSG','5546','EPSG','9873',NULL,0); INSERT INTO "usage" VALUES('EPSG','16920','projected_crs','EPSG','9875','EPSG','4654','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','9880','MOLDOR11 Grid',NULL,'EPSG','4400','EPSG','9871','EPSG','9879',NULL,0); INSERT INTO "usage" VALUES('EPSG','16961','projected_crs','EPSG','9880','EPSG','4655','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9895','LUREF / Luxembourg TM (3D)',NULL,'EPSG','1046','EPSG','9893','EPSG','9894',NULL,0); INSERT INTO "usage" VALUES('EPSG','17310','projected_crs','EPSG','9895','EPSG','1146','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','9943','EBBWV14 Grid',NULL,'EPSG','4400','EPSG','9939','EPSG','9942',NULL,0); INSERT INTO "usage" VALUES('EPSG','17349','projected_crs','EPSG','9943','EPSG','4661','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9945','Macedonia State Coordinate System truncated',NULL,'EPSG','4498','EPSG','3906','EPSG','9911',NULL,0); INSERT INTO "usage" VALUES('EPSG','17461','projected_crs','EPSG','9945','EPSG','1148','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','9947','ISN2004 / LAEA Iceland',NULL,'EPSG','4400','EPSG','5324','EPSG','9946',NULL,0); INSERT INTO "usage" VALUES('EPSG','17376','projected_crs','EPSG','9947','EPSG','1120','EPSG','1162'); INSERT INTO "projected_crs" VALUES('EPSG','9967','HULLEE13 Grid',NULL,'EPSG','4400','EPSG','9964','EPSG','9966',NULL,0); INSERT INTO "usage" VALUES('EPSG','17429','projected_crs','EPSG','9967','EPSG','4663','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9972','SCM22 Grid',NULL,'EPSG','4400','EPSG','9969','EPSG','9971',NULL,0); INSERT INTO "usage" VALUES('EPSG','17441','projected_crs','EPSG','9972','EPSG','4665','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','9977','FNL22 Grid',NULL,'EPSG','4400','EPSG','9974','EPSG','9976',NULL,0); INSERT INTO "usage" VALUES('EPSG','17456','projected_crs','EPSG','9977','EPSG','4664','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10160','S34J reconstruction east-orientated',NULL,'EPSG','4400','EPSG','10158','EPSG','10159',NULL,0); INSERT INTO "usage" VALUES('EPSG','19661','projected_crs','EPSG','10160','EPSG','2531','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','10183','DoPw22 Grid',NULL,'EPSG','4400','EPSG','10175','EPSG','10182',NULL,0); INSERT INTO "usage" VALUES('EPSG','18655','projected_crs','EPSG','10183','EPSG','4686','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10188','ShAb07 Grid',NULL,'EPSG','4400','EPSG','10185','EPSG','10187',NULL,0); INSERT INTO "usage" VALUES('EPSG','18667','projected_crs','EPSG','10188','EPSG','4687','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10194','CNH22 Grid',NULL,'EPSG','4400','EPSG','10191','EPSG','10193',NULL,0); INSERT INTO "usage" VALUES('EPSG','18766','projected_crs','EPSG','10194','EPSG','4677','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10199','CWS13 Grid',NULL,'EPSG','4400','EPSG','10196','EPSG','10198',NULL,0); INSERT INTO "usage" VALUES('EPSG','18767','projected_crs','EPSG','10199','EPSG','4678','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10207','DIBA15 Grid',NULL,'EPSG','4400','EPSG','10204','EPSG','10206',NULL,0); INSERT INTO "usage" VALUES('EPSG','18771','projected_crs','EPSG','10207','EPSG','4681','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10212','GWPBS22 Grid',NULL,'EPSG','4400','EPSG','10209','EPSG','10211',NULL,0); INSERT INTO "usage" VALUES('EPSG','18797','projected_crs','EPSG','10212','EPSG','4685','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10217','GWWAB22 Grid',NULL,'EPSG','4400','EPSG','10214','EPSG','10211',NULL,0); INSERT INTO "usage" VALUES('EPSG','18802','projected_crs','EPSG','10217','EPSG','4684','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10222','GWWWA22 Grid',NULL,'EPSG','4400','EPSG','10219','EPSG','10211',NULL,0); INSERT INTO "usage" VALUES('EPSG','18838','projected_crs','EPSG','10222','EPSG','4683','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10227','MALS09 Grid',NULL,'EPSG','4400','EPSG','10224','EPSG','10226',NULL,0); INSERT INTO "usage" VALUES('EPSG','18782','projected_crs','EPSG','10227','EPSG','4682','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10235','OxWo08 Grid',NULL,'EPSG','4400','EPSG','10229','EPSG','10234',NULL,0); INSERT INTO "usage" VALUES('EPSG','18786','projected_crs','EPSG','10235','EPSG','4680','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10240','SYC20 Grid',NULL,'EPSG','4400','EPSG','10237','EPSG','10239',NULL,0); INSERT INTO "usage" VALUES('EPSG','18788','projected_crs','EPSG','10240','EPSG','4679','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10250','S34S reconstruction east-orientated',NULL,'EPSG','4400','EPSG','10249','EPSG','10159',NULL,0); INSERT INTO "usage" VALUES('EPSG','19665','projected_crs','EPSG','10250','EPSG','2532','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','10254','S45B reconstruction east-orientated',NULL,'EPSG','4400','EPSG','10252','EPSG','10253',NULL,0); INSERT INTO "usage" VALUES('EPSG','19674','projected_crs','EPSG','10254','EPSG','2533','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','10258','GS reconstruction east-orientated',NULL,'EPSG','4400','EPSG','10256','EPSG','10257',NULL,0); INSERT INTO "usage" VALUES('EPSG','19709','projected_crs','EPSG','10258','EPSG','4575','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','10262','GSB reconstruction east-orientated',NULL,'EPSG','4400','EPSG','10260','EPSG','10261',NULL,0); INSERT INTO "usage" VALUES('EPSG','19685','projected_crs','EPSG','10262','EPSG','2533','EPSG','1180'); INSERT INTO "projected_crs" VALUES('EPSG','10266','KK reconstruction east-orientated',NULL,'EPSG','4400','EPSG','10265','EPSG','10257',NULL,0); INSERT INTO "usage" VALUES('EPSG','19710','projected_crs','EPSG','10266','EPSG','4693','EPSG','1153'); INSERT INTO "projected_crs" VALUES('EPSG','10270','Ostenfeld reconstruction',NULL,'EPSG','4400','EPSG','10268','EPSG','10269',NULL,0); INSERT INTO "usage" VALUES('EPSG','19698','projected_crs','EPSG','10270','EPSG','4694','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','10275','SMITB20 Grid',NULL,'EPSG','4400','EPSG','10272','EPSG','10274',NULL,0); INSERT INTO "usage" VALUES('EPSG','19178','projected_crs','EPSG','10275','EPSG','4688','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10280','RBEPP12 Grid',NULL,'EPSG','4400','EPSG','10277','EPSG','10279',NULL,0); INSERT INTO "usage" VALUES('EPSG','19184','projected_crs','EPSG','10280','EPSG','4689','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10285','ETRS89/DREF91/2016 / 3-degree Gauss-Kruger zone 3',NULL,'EPSG','4400','EPSG','10284','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','19567','projected_crs','EPSG','10285','EPSG','4490','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','10286','ETRS89/DREF91/2016 / UTM zone 31N (N-zE)',NULL,'EPSG','4500','EPSG','10284','EPSG','5647',NULL,0); INSERT INTO "usage" VALUES('EPSG','19247','projected_crs','EPSG','10286','EPSG','2860','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10287','ETRS89/DREF91/2016 / UTM zone 31N (zE-N)',NULL,'EPSG','4400','EPSG','10284','EPSG','5647',NULL,0); INSERT INTO "usage" VALUES('EPSG','19248','projected_crs','EPSG','10287','EPSG','2860','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10288','ETRS89/DREF91/2016 / UTM zone 32N (N-zE)',NULL,'EPSG','4500','EPSG','10284','EPSG','4648',NULL,0); INSERT INTO "usage" VALUES('EPSG','19249','projected_crs','EPSG','10288','EPSG','2861','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10289','ETRS89/DREF91/2016 / UTM zone 32N (zE-N)',NULL,'EPSG','4400','EPSG','10284','EPSG','4648',NULL,0); INSERT INTO "usage" VALUES('EPSG','19250','projected_crs','EPSG','10289','EPSG','2861','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10290','ETRS89/DREF91/2016 / UTM zone 33N (N-zE)',NULL,'EPSG','4500','EPSG','10284','EPSG','5648',NULL,0); INSERT INTO "usage" VALUES('EPSG','19251','projected_crs','EPSG','10290','EPSG','2862','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10291','ETRS89/DREF91/2016 / UTM zone 33N (zE-N)',NULL,'EPSG','4400','EPSG','10284','EPSG','5648',NULL,0); INSERT INTO "usage" VALUES('EPSG','19252','projected_crs','EPSG','10291','EPSG','2862','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10306','LKS-2020 / Latvia TM',NULL,'EPSG','4530','EPSG','10305','EPSG','19990',NULL,0); INSERT INTO "usage" VALUES('EPSG','19561','projected_crs','EPSG','10306','EPSG','1139','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10314','RGNC15 / Lambert New Caledonia 2015',NULL,'EPSG','4400','EPSG','10310','EPSG','10313',NULL,0); INSERT INTO "usage" VALUES('EPSG','19643','projected_crs','EPSG','10314','EPSG','3430','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','10315','RGNC15 / UTM zone 57S',NULL,'EPSG','4400','EPSG','10310','EPSG','16157',NULL,0); INSERT INTO "usage" VALUES('EPSG','19648','projected_crs','EPSG','10315','EPSG','3431','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','10316','RGNC15 / UTM zone 58S',NULL,'EPSG','4400','EPSG','10310','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','19649','projected_crs','EPSG','10316','EPSG','3432','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','10317','RGNC15 / UTM zone 59S',NULL,'EPSG','4400','EPSG','10310','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','19650','projected_crs','EPSG','10317','EPSG','3433','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','10329','BH_ETRS89 / TM',NULL,'EPSG','4500','EPSG','10328','EPSG','10325',NULL,0); INSERT INTO "usage" VALUES('EPSG','19776','projected_crs','EPSG','10329','EPSG','1050','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10448','GDA94 / ALB94',NULL,'EPSG','4400','EPSG','4283','EPSG','10424',NULL,0); INSERT INTO "usage" VALUES('EPSG','20274','projected_crs','EPSG','10448','EPSG','4439','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10449','GDA94 / BIO94',NULL,'EPSG','4400','EPSG','4283','EPSG','10425',NULL,0); INSERT INTO "usage" VALUES('EPSG','20273','projected_crs','EPSG','10449','EPSG','4438','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10450','GDA94 / BRO94',NULL,'EPSG','4400','EPSG','4283','EPSG','10426',NULL,0); INSERT INTO "usage" VALUES('EPSG','20272','projected_crs','EPSG','10450','EPSG','4441','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10451','GDA94 / BCG94',NULL,'EPSG','4400','EPSG','4283','EPSG','10427',NULL,0); INSERT INTO "usage" VALUES('EPSG','20271','projected_crs','EPSG','10451','EPSG','4437','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10452','GDA94 / CARN94',NULL,'EPSG','4400','EPSG','4283','EPSG','10428',NULL,0); INSERT INTO "usage" VALUES('EPSG','20270','projected_crs','EPSG','10452','EPSG','4442','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10453','GDA94 / COL94',NULL,'EPSG','4400','EPSG','4283','EPSG','10429',NULL,0); INSERT INTO "usage" VALUES('EPSG','20269','projected_crs','EPSG','10453','EPSG','4443','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10454','GDA94 / ESP94',NULL,'EPSG','4400','EPSG','4283','EPSG','10430',NULL,0); INSERT INTO "usage" VALUES('EPSG','20268','projected_crs','EPSG','10454','EPSG','4445','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10455','GDA94 / EXM94',NULL,'EPSG','4400','EPSG','4283','EPSG','10437',NULL,0); INSERT INTO "usage" VALUES('EPSG','20267','projected_crs','EPSG','10455','EPSG','4448','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10456','GDA94 / GCG94',NULL,'EPSG','4400','EPSG','4283','EPSG','10438',NULL,0); INSERT INTO "usage" VALUES('EPSG','20266','projected_crs','EPSG','10456','EPSG','4449','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10457','GDA94 / GOLD94',NULL,'EPSG','4400','EPSG','4283','EPSG','10439',NULL,0); INSERT INTO "usage" VALUES('EPSG','20265','projected_crs','EPSG','10457','EPSG','4436','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10458','GDA94 / JCG94',NULL,'EPSG','4400','EPSG','4283','EPSG','10440',NULL,0); INSERT INTO "usage" VALUES('EPSG','20264','projected_crs','EPSG','10458','EPSG','4440','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10459','GDA94 / KALB94',NULL,'EPSG','4400','EPSG','4283','EPSG','10441',NULL,0); INSERT INTO "usage" VALUES('EPSG','20263','projected_crs','EPSG','10459','EPSG','4444','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10460','GDA94 / KAR94',NULL,'EPSG','4400','EPSG','4283','EPSG','10442',NULL,0); INSERT INTO "usage" VALUES('EPSG','20262','projected_crs','EPSG','10460','EPSG','4451','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10461','GDA94 / KUN94',NULL,'EPSG','4400','EPSG','4283','EPSG','10443',NULL,0); INSERT INTO "usage" VALUES('EPSG','20261','projected_crs','EPSG','10461','EPSG','4452','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10462','GDA94 / LCG94',NULL,'EPSG','4400','EPSG','4283','EPSG','10444',NULL,0); INSERT INTO "usage" VALUES('EPSG','20260','projected_crs','EPSG','10462','EPSG','4453','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10463','GDA94 / MRCG94',NULL,'EPSG','4400','EPSG','4283','EPSG','10445',NULL,0); INSERT INTO "usage" VALUES('EPSG','20259','projected_crs','EPSG','10463','EPSG','4457','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10464','GDA94 / PCG94',NULL,'EPSG','4400','EPSG','4283','EPSG','10446',NULL,0); INSERT INTO "usage" VALUES('EPSG','20258','projected_crs','EPSG','10464','EPSG','4462','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10465','GDA94 / PHG94',NULL,'EPSG','4400','EPSG','4283','EPSG','10447',NULL,0); INSERT INTO "usage" VALUES('EPSG','20257','projected_crs','EPSG','10465','EPSG','4466','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10471','COV23 Grid',NULL,'EPSG','4400','EPSG','10468','EPSG','10470',NULL,0); INSERT INTO "usage" VALUES('EPSG','20313','projected_crs','EPSG','10471','EPSG','4743','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10477','BBT2000 / BBT-TM',NULL,'EPSG','4400','EPSG','10475','EPSG','10476',NULL,0); INSERT INTO "usage" VALUES('EPSG','20341','projected_crs','EPSG','10477','EPSG','4744','EPSG','1285'); INSERT INTO "projected_crs" VALUES('EPSG','10480','NAD83 / TWDB GM',NULL,'EPSG','4499','EPSG','4269','EPSG','10479',NULL,1); INSERT INTO "usage" VALUES('EPSG','20355','projected_crs','EPSG','10480','EPSG','1412','EPSG','1286'); INSERT INTO "projected_crs" VALUES('EPSG','10481','NAD83 / TWDB GM',NULL,'EPSG','4497','EPSG','4269','EPSG','10479',NULL,0); INSERT INTO "usage" VALUES('EPSG','20356','projected_crs','EPSG','10481','EPSG','1412','EPSG','1286'); INSERT INTO "projected_crs" VALUES('EPSG','10516','NAD83(2011) / Adjusted Jackson (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','10515',NULL,0); INSERT INTO "usage" VALUES('EPSG','20747','projected_crs','EPSG','10516','EPSG','4343','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','10592','WGS 84 / GLANCE Africa',NULL,'EPSG','4400','EPSG','4326','EPSG','10591',NULL,0); INSERT INTO "usage" VALUES('EPSG','21204','projected_crs','EPSG','10592','EPSG','4745','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','10594','WGS 84 / GLANCE Asia',NULL,'EPSG','4400','EPSG','4326','EPSG','10593',NULL,0); INSERT INTO "usage" VALUES('EPSG','21206','projected_crs','EPSG','10594','EPSG','4747','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','10596','WGS 84 / GLANCE Europe',NULL,'EPSG','4400','EPSG','4326','EPSG','10595',NULL,0); INSERT INTO "usage" VALUES('EPSG','21316','projected_crs','EPSG','10596','EPSG','4748','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','10598','WGS 84 / GLANCE North America',NULL,'EPSG','4400','EPSG','4326','EPSG','10597',NULL,0); INSERT INTO "usage" VALUES('EPSG','21211','projected_crs','EPSG','10598','EPSG','4749','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','10601','WGS 84 / GLANCE Oceania',NULL,'EPSG','4400','EPSG','4326','EPSG','10599',NULL,0); INSERT INTO "usage" VALUES('EPSG','21213','projected_crs','EPSG','10601','EPSG','4751','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','10603','WGS 84 / GLANCE South America',NULL,'EPSG','4400','EPSG','4326','EPSG','10602',NULL,0); INSERT INTO "usage" VALUES('EPSG','21215','projected_crs','EPSG','10603','EPSG','4750','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','10622','NAD83(2011) / San Francisco SFO-B18 (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','10621',NULL,0); INSERT INTO "usage" VALUES('EPSG','21353','projected_crs','EPSG','10622','EPSG','4529','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','10626','ECML14 Grid',NULL,'EPSG','4400','EPSG','10623','EPSG','10625',NULL,0); INSERT INTO "usage" VALUES('EPSG','21389','projected_crs','EPSG','10626','EPSG','4774','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10632','WC05 Grid',NULL,'EPSG','4400','EPSG','10628','EPSG','10631',NULL,0); INSERT INTO "usage" VALUES('EPSG','21392','projected_crs','EPSG','10632','EPSG','4775','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','10641','Saba DPnet',NULL,'EPSG','1054','EPSG','10636','EPSG','10640',NULL,0); INSERT INTO "usage" VALUES('EPSG','21871','projected_crs','EPSG','10641','EPSG','4757','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10665','SIRGAS 2000 / Porto Alegre TM',NULL,'EPSG','4400','EPSG','4674','EPSG','10664',NULL,0); INSERT INTO "usage" VALUES('EPSG','21625','projected_crs','EPSG','10665','EPSG','4777','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10674','RGM23 / UTM zone 38S',NULL,'EPSG','4400','EPSG','10671','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','21843','projected_crs','EPSG','10674','EPSG','1159','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','10699','EUREF-FIN / UTM zone 34N',NULL,'EPSG','4400','EPSG','10690','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','22020','projected_crs','EPSG','10699','EPSG','4781','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','10702','EUREF-FIN / UTM zone 36N',NULL,'EPSG','4400','EPSG','10690','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','22021','projected_crs','EPSG','10702','EPSG','4783','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','10726','UZGD2024 / UzREF24 zone 40',NULL,'EPSG','4400','EPSG','10725','EPSG','10719',NULL,0); INSERT INTO "usage" VALUES('EPSG','22096','projected_crs','EPSG','10726','EPSG','4784','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','10727','UZGD2024 / UzREF24 zone 41',NULL,'EPSG','4400','EPSG','10725','EPSG','10720',NULL,0); INSERT INTO "usage" VALUES('EPSG','22097','projected_crs','EPSG','10727','EPSG','4785','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','10728','UZGD2024 / UzREF24 zone 42',NULL,'EPSG','4400','EPSG','10725','EPSG','10721',NULL,0); INSERT INTO "usage" VALUES('EPSG','22098','projected_crs','EPSG','10728','EPSG','4786','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','10729','UZGD2024 / UzREF24 zone 43',NULL,'EPSG','4400','EPSG','10725','EPSG','10722',NULL,0); INSERT INTO "usage" VALUES('EPSG','22099','projected_crs','EPSG','10729','EPSG','4787','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','10731','ETRS89/DREF91/2016 / UTM zone 31N',NULL,'EPSG','4400','EPSG','10284','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','20592','projected_crs','EPSG','10731','EPSG','2860','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10732','ETRS89/DREF91/2016 / UTM zone 32N',NULL,'EPSG','4400','EPSG','10284','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','20896','projected_crs','EPSG','10732','EPSG','2861','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10733','ETRS89/DREF91/2016 / UTM zone 33N',NULL,'EPSG','4400','EPSG','10284','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','20594','projected_crs','EPSG','10733','EPSG','2862','EPSG','1054'); INSERT INTO "projected_crs" VALUES('EPSG','10744','Sint Eustatius DPnet short',NULL,'EPSG','1054','EPSG','10736','EPSG','10743',NULL,0); INSERT INTO "usage" VALUES('EPSG','22317','projected_crs','EPSG','10744','EPSG','4788','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10745','Sint Eustatius DPnet long',NULL,'EPSG','1054','EPSG','10736','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','22316','projected_crs','EPSG','10745','EPSG','4788','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10759','Bonaire DPnet',NULL,'EPSG','1054','EPSG','10758','EPSG','10757',NULL,0); INSERT INTO "usage" VALUES('EPSG','22169','projected_crs','EPSG','10759','EPSG','3822','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10773','SIRGAS 2000 / Ribeirao Preto Local TM',NULL,'EPSG','4400','EPSG','4674','EPSG','10772',NULL,0); INSERT INTO "usage" VALUES('EPSG','22381','projected_crs','EPSG','10773','EPSG','4789','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','10788','WGS 84 / Agriculture Canada Albers',NULL,'EPSG','4400','EPSG','4326','EPSG','10751',NULL,1); INSERT INTO "usage" VALUES('EPSG','22473','projected_crs','EPSG','10788','EPSG','4752','EPSG','1292'); INSERT INTO "projected_crs" VALUES('EPSG','10801','LibRef21 / UTM zone 28N',NULL,'EPSG','4400','EPSG','10800','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','22447','projected_crs','EPSG','10801','EPSG','4794','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','10802','LibRef21 / UTM zone 29N',NULL,'EPSG','4400','EPSG','10800','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','22448','projected_crs','EPSG','10802','EPSG','4793','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','10820','WGS 84 / Agriculture Canada Albers',NULL,'EPSG','4400','EPSG','4326','EPSG','10819',NULL,0); INSERT INTO "usage" VALUES('EPSG','22545','projected_crs','EPSG','10820','EPSG','4752','EPSG','1292'); INSERT INTO "projected_crs" VALUES('EPSG','11114','MAGNA-SIRGAS 2018 / Colombia Far West zone',NULL,'EPSG','4500','EPSG','20046','EPSG','18065',NULL,0); INSERT INTO "usage" VALUES('EPSG','18947','projected_crs','EPSG','11114','EPSG','3091','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','11115','MAGNA-SIRGAS 2018 / Colombia West zone',NULL,'EPSG','4500','EPSG','20046','EPSG','18066',NULL,0); INSERT INTO "usage" VALUES('EPSG','18948','projected_crs','EPSG','11115','EPSG','3090','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','11116','MAGNA-SIRGAS 2018 / Colombia Bogota zone',NULL,'EPSG','4500','EPSG','20046','EPSG','18067',NULL,0); INSERT INTO "usage" VALUES('EPSG','19037','projected_crs','EPSG','11116','EPSG','1599','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','11117','MAGNA-SIRGAS 2018 / Colombia East Central zone',NULL,'EPSG','4500','EPSG','20046','EPSG','18068',NULL,0); INSERT INTO "usage" VALUES('EPSG','18950','projected_crs','EPSG','11117','EPSG','1600','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','11118','MAGNA-SIRGAS 2018 / Colombia East zone',NULL,'EPSG','4500','EPSG','20046','EPSG','18069',NULL,0); INSERT INTO "usage" VALUES('EPSG','18951','projected_crs','EPSG','11118','EPSG','1601','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20002','MWC18 Grid',NULL,'EPSG','4400','EPSG','20033','EPSG','10127',NULL,0); INSERT INTO "usage" VALUES('EPSG','18336','projected_crs','EPSG','20002','EPSG','4666','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','20004','Pulkovo 1995 / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4200','EPSG','16204',NULL,0); INSERT INTO "usage" VALUES('EPSG','6177','projected_crs','EPSG','20004','EPSG','1763','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20005','Pulkovo 1995 / Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4200','EPSG','16205',NULL,0); INSERT INTO "usage" VALUES('EPSG','6178','projected_crs','EPSG','20005','EPSG','1764','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20006','Pulkovo 1995 / Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','4200','EPSG','16206',NULL,0); INSERT INTO "usage" VALUES('EPSG','6179','projected_crs','EPSG','20006','EPSG','1765','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20007','Pulkovo 1995 / Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','4200','EPSG','16207',NULL,0); INSERT INTO "usage" VALUES('EPSG','6180','projected_crs','EPSG','20007','EPSG','1766','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20008','Pulkovo 1995 / Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4200','EPSG','16208',NULL,0); INSERT INTO "usage" VALUES('EPSG','6181','projected_crs','EPSG','20008','EPSG','1767','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20009','Pulkovo 1995 / Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','4200','EPSG','16209',NULL,0); INSERT INTO "usage" VALUES('EPSG','6182','projected_crs','EPSG','20009','EPSG','1768','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20010','Pulkovo 1995 / Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','4200','EPSG','16210',NULL,0); INSERT INTO "usage" VALUES('EPSG','6183','projected_crs','EPSG','20010','EPSG','1769','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20011','Pulkovo 1995 / Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','4200','EPSG','16211',NULL,0); INSERT INTO "usage" VALUES('EPSG','6184','projected_crs','EPSG','20011','EPSG','1770','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20012','Pulkovo 1995 / Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','4200','EPSG','16212',NULL,0); INSERT INTO "usage" VALUES('EPSG','6185','projected_crs','EPSG','20012','EPSG','1771','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20013','Pulkovo 1995 / Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4200','EPSG','16213',NULL,0); INSERT INTO "usage" VALUES('EPSG','6186','projected_crs','EPSG','20013','EPSG','1772','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20014','Pulkovo 1995 / Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4200','EPSG','16214',NULL,0); INSERT INTO "usage" VALUES('EPSG','6187','projected_crs','EPSG','20014','EPSG','1773','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20015','Pulkovo 1995 / Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4200','EPSG','16215',NULL,0); INSERT INTO "usage" VALUES('EPSG','6188','projected_crs','EPSG','20015','EPSG','1774','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20016','Pulkovo 1995 / Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4200','EPSG','16216',NULL,0); INSERT INTO "usage" VALUES('EPSG','6189','projected_crs','EPSG','20016','EPSG','1775','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20017','Pulkovo 1995 / Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4200','EPSG','16217',NULL,0); INSERT INTO "usage" VALUES('EPSG','6190','projected_crs','EPSG','20017','EPSG','1776','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20018','Pulkovo 1995 / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4200','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','6191','projected_crs','EPSG','20018','EPSG','1777','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20019','Pulkovo 1995 / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4200','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','6192','projected_crs','EPSG','20019','EPSG','1778','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20020','Pulkovo 1995 / Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4200','EPSG','16220',NULL,0); INSERT INTO "usage" VALUES('EPSG','6193','projected_crs','EPSG','20020','EPSG','1779','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20021','Pulkovo 1995 / Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4200','EPSG','16221',NULL,0); INSERT INTO "usage" VALUES('EPSG','6194','projected_crs','EPSG','20021','EPSG','1780','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20022','Pulkovo 1995 / Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4200','EPSG','16222',NULL,0); INSERT INTO "usage" VALUES('EPSG','6195','projected_crs','EPSG','20022','EPSG','1781','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20023','Pulkovo 1995 / Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4200','EPSG','16223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6196','projected_crs','EPSG','20023','EPSG','1782','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20024','Pulkovo 1995 / Gauss-Kruger zone 24',NULL,'EPSG','4530','EPSG','4200','EPSG','16224',NULL,0); INSERT INTO "usage" VALUES('EPSG','6197','projected_crs','EPSG','20024','EPSG','1783','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20025','Pulkovo 1995 / Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4200','EPSG','16225',NULL,0); INSERT INTO "usage" VALUES('EPSG','6198','projected_crs','EPSG','20025','EPSG','1784','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20026','Pulkovo 1995 / Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4200','EPSG','16226',NULL,0); INSERT INTO "usage" VALUES('EPSG','6199','projected_crs','EPSG','20026','EPSG','1785','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20027','Pulkovo 1995 / Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4200','EPSG','16227',NULL,0); INSERT INTO "usage" VALUES('EPSG','6200','projected_crs','EPSG','20027','EPSG','1786','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20028','Pulkovo 1995 / Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4200','EPSG','16228',NULL,0); INSERT INTO "usage" VALUES('EPSG','6201','projected_crs','EPSG','20028','EPSG','1787','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20029','Pulkovo 1995 / Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4200','EPSG','16229',NULL,0); INSERT INTO "usage" VALUES('EPSG','6202','projected_crs','EPSG','20029','EPSG','1788','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20030','Pulkovo 1995 / Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4200','EPSG','16230',NULL,0); INSERT INTO "usage" VALUES('EPSG','6203','projected_crs','EPSG','20030','EPSG','1789','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20031','Pulkovo 1995 / Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4200','EPSG','16231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6204','projected_crs','EPSG','20031','EPSG','1790','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20032','Pulkovo 1995 / Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4200','EPSG','16232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6205','projected_crs','EPSG','20032','EPSG','1791','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20042','SIRGAS-Chile 2021 / UTM zone 12S',NULL,'EPSG','4400','EPSG','20041','EPSG','16112',NULL,0); INSERT INTO "usage" VALUES('EPSG','18383','projected_crs','EPSG','20042','EPSG','4667','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20047','GDA2020 / BCSG2020',NULL,'EPSG','4400','EPSG','7844','EPSG','10147',NULL,0); INSERT INTO "usage" VALUES('EPSG','18477','projected_crs','EPSG','20047','EPSG','2990','EPSG','1029'); INSERT INTO "projected_crs" VALUES('EPSG','20048','SIRGAS-Chile 2021 / UTM zone 18S',NULL,'EPSG','4400','EPSG','20041','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','18384','projected_crs','EPSG','20048','EPSG','3829','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20049','SIRGAS-Chile 2021 / UTM zone 19S',NULL,'EPSG','4400','EPSG','20041','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','18385','projected_crs','EPSG','20049','EPSG','3811','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20050','NAD83(2011) / Amtrak NECCS21 (ft)',NULL,'EPSG','4495','EPSG','6318','EPSG','10148',NULL,0); INSERT INTO "usage" VALUES('EPSG','18480','projected_crs','EPSG','20050','EPSG','4669','EPSG','1141'); INSERT INTO "projected_crs" VALUES('EPSG','20064','Pulkovo 1995 / Gauss-Kruger 4N',NULL,'EPSG','4530','EPSG','4200','EPSG','16304',NULL,1); INSERT INTO "usage" VALUES('EPSG','6206','projected_crs','EPSG','20064','EPSG','1763','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20065','Pulkovo 1995 / Gauss-Kruger 5N',NULL,'EPSG','4530','EPSG','4200','EPSG','16305',NULL,1); INSERT INTO "usage" VALUES('EPSG','6207','projected_crs','EPSG','20065','EPSG','1764','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20066','Pulkovo 1995 / Gauss-Kruger 6N',NULL,'EPSG','4530','EPSG','4200','EPSG','16306',NULL,1); INSERT INTO "usage" VALUES('EPSG','6208','projected_crs','EPSG','20066','EPSG','1765','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20067','Pulkovo 1995 / Gauss-Kruger 7N',NULL,'EPSG','4530','EPSG','4200','EPSG','16307',NULL,1); INSERT INTO "usage" VALUES('EPSG','6209','projected_crs','EPSG','20067','EPSG','1766','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20068','Pulkovo 1995 / Gauss-Kruger 8N',NULL,'EPSG','4530','EPSG','4200','EPSG','16308',NULL,1); INSERT INTO "usage" VALUES('EPSG','6210','projected_crs','EPSG','20068','EPSG','1767','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20069','Pulkovo 1995 / Gauss-Kruger 9N',NULL,'EPSG','4530','EPSG','4200','EPSG','16309',NULL,1); INSERT INTO "usage" VALUES('EPSG','6211','projected_crs','EPSG','20069','EPSG','1768','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20070','Pulkovo 1995 / Gauss-Kruger 10N',NULL,'EPSG','4530','EPSG','4200','EPSG','16310',NULL,1); INSERT INTO "usage" VALUES('EPSG','6212','projected_crs','EPSG','20070','EPSG','1769','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20071','Pulkovo 1995 / Gauss-Kruger 11N',NULL,'EPSG','4530','EPSG','4200','EPSG','16311',NULL,1); INSERT INTO "usage" VALUES('EPSG','6213','projected_crs','EPSG','20071','EPSG','1770','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20072','Pulkovo 1995 / Gauss-Kruger 12N',NULL,'EPSG','4530','EPSG','4200','EPSG','16312',NULL,1); INSERT INTO "usage" VALUES('EPSG','6214','projected_crs','EPSG','20072','EPSG','1771','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20073','Pulkovo 1995 / Gauss-Kruger 13N',NULL,'EPSG','4530','EPSG','4200','EPSG','16313',NULL,1); INSERT INTO "usage" VALUES('EPSG','6215','projected_crs','EPSG','20073','EPSG','1772','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20074','Pulkovo 1995 / Gauss-Kruger 14N',NULL,'EPSG','4530','EPSG','4200','EPSG','16314',NULL,1); INSERT INTO "usage" VALUES('EPSG','6216','projected_crs','EPSG','20074','EPSG','1773','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20075','Pulkovo 1995 / Gauss-Kruger 15N',NULL,'EPSG','4530','EPSG','4200','EPSG','16315',NULL,1); INSERT INTO "usage" VALUES('EPSG','6217','projected_crs','EPSG','20075','EPSG','1774','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20076','Pulkovo 1995 / Gauss-Kruger 16N',NULL,'EPSG','4530','EPSG','4200','EPSG','16316',NULL,1); INSERT INTO "usage" VALUES('EPSG','6218','projected_crs','EPSG','20076','EPSG','1775','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20077','Pulkovo 1995 / Gauss-Kruger 17N',NULL,'EPSG','4530','EPSG','4200','EPSG','16317',NULL,1); INSERT INTO "usage" VALUES('EPSG','6219','projected_crs','EPSG','20077','EPSG','1776','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20078','Pulkovo 1995 / Gauss-Kruger 18N',NULL,'EPSG','4530','EPSG','4200','EPSG','16318',NULL,1); INSERT INTO "usage" VALUES('EPSG','6220','projected_crs','EPSG','20078','EPSG','1777','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20079','Pulkovo 1995 / Gauss-Kruger 19N',NULL,'EPSG','4530','EPSG','4200','EPSG','16319',NULL,1); INSERT INTO "usage" VALUES('EPSG','6221','projected_crs','EPSG','20079','EPSG','1778','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20080','Pulkovo 1995 / Gauss-Kruger 20N',NULL,'EPSG','4530','EPSG','4200','EPSG','16320',NULL,1); INSERT INTO "usage" VALUES('EPSG','6222','projected_crs','EPSG','20080','EPSG','1779','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20081','Pulkovo 1995 / Gauss-Kruger 21N',NULL,'EPSG','4530','EPSG','4200','EPSG','16321',NULL,1); INSERT INTO "usage" VALUES('EPSG','6223','projected_crs','EPSG','20081','EPSG','1780','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20082','Pulkovo 1995 / Gauss-Kruger 22N',NULL,'EPSG','4530','EPSG','4200','EPSG','16322',NULL,1); INSERT INTO "usage" VALUES('EPSG','6224','projected_crs','EPSG','20082','EPSG','1781','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20083','Pulkovo 1995 / Gauss-Kruger 23N',NULL,'EPSG','4530','EPSG','4200','EPSG','16323',NULL,1); INSERT INTO "usage" VALUES('EPSG','6225','projected_crs','EPSG','20083','EPSG','1782','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20084','Pulkovo 1995 / Gauss-Kruger 24N',NULL,'EPSG','4530','EPSG','4200','EPSG','16324',NULL,1); INSERT INTO "usage" VALUES('EPSG','6226','projected_crs','EPSG','20084','EPSG','1783','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20085','Pulkovo 1995 / Gauss-Kruger 25N',NULL,'EPSG','4530','EPSG','4200','EPSG','16325',NULL,1); INSERT INTO "usage" VALUES('EPSG','6227','projected_crs','EPSG','20085','EPSG','1784','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20086','Pulkovo 1995 / Gauss-Kruger 26N',NULL,'EPSG','4530','EPSG','4200','EPSG','16326',NULL,1); INSERT INTO "usage" VALUES('EPSG','6228','projected_crs','EPSG','20086','EPSG','1785','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20087','Pulkovo 1995 / Gauss-Kruger 27N',NULL,'EPSG','4530','EPSG','4200','EPSG','16327',NULL,1); INSERT INTO "usage" VALUES('EPSG','6229','projected_crs','EPSG','20087','EPSG','1786','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20088','Pulkovo 1995 / Gauss-Kruger 28N',NULL,'EPSG','4530','EPSG','4200','EPSG','16328',NULL,1); INSERT INTO "usage" VALUES('EPSG','6230','projected_crs','EPSG','20088','EPSG','1787','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20089','Pulkovo 1995 / Gauss-Kruger 29N',NULL,'EPSG','4530','EPSG','4200','EPSG','16329',NULL,1); INSERT INTO "usage" VALUES('EPSG','6231','projected_crs','EPSG','20089','EPSG','1788','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20090','Pulkovo 1995 / Gauss-Kruger 30N',NULL,'EPSG','4530','EPSG','4200','EPSG','16330',NULL,1); INSERT INTO "usage" VALUES('EPSG','6232','projected_crs','EPSG','20090','EPSG','1789','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20091','Pulkovo 1995 / Gauss-Kruger 31N',NULL,'EPSG','4530','EPSG','4200','EPSG','16331',NULL,1); INSERT INTO "usage" VALUES('EPSG','6233','projected_crs','EPSG','20091','EPSG','1790','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20092','Pulkovo 1995 / Gauss-Kruger 32N',NULL,'EPSG','4530','EPSG','4200','EPSG','16332',NULL,1); INSERT INTO "usage" VALUES('EPSG','6234','projected_crs','EPSG','20092','EPSG','1791','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','20135','Adindan / UTM zone 35N',NULL,'EPSG','4400','EPSG','4201','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6235','projected_crs','EPSG','20135','EPSG','2827','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20136','Adindan / UTM zone 36N',NULL,'EPSG','4400','EPSG','4201','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6236','projected_crs','EPSG','20136','EPSG','2825','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20137','Adindan / UTM zone 37N',NULL,'EPSG','4400','EPSG','4201','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6237','projected_crs','EPSG','20137','EPSG','1552','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20138','Adindan / UTM zone 38N',NULL,'EPSG','4400','EPSG','4201','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','6238','projected_crs','EPSG','20138','EPSG','1553','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20248','AGD66 / AMG zone 48',NULL,'EPSG','4400','EPSG','4202','EPSG','17448',NULL,1); INSERT INTO "usage" VALUES('EPSG','6239','projected_crs','EPSG','20248','EPSG','1556','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20249','AGD66 / AMG zone 49',NULL,'EPSG','4400','EPSG','4202','EPSG','17449',NULL,0); INSERT INTO "usage" VALUES('EPSG','6240','projected_crs','EPSG','20249','EPSG','1557','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20250','AGD66 / AMG zone 50',NULL,'EPSG','4400','EPSG','4202','EPSG','17450',NULL,0); INSERT INTO "usage" VALUES('EPSG','6241','projected_crs','EPSG','20250','EPSG','1558','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20251','AGD66 / AMG zone 51',NULL,'EPSG','4400','EPSG','4202','EPSG','17451',NULL,0); INSERT INTO "usage" VALUES('EPSG','6242','projected_crs','EPSG','20251','EPSG','1559','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20252','AGD66 / AMG zone 52',NULL,'EPSG','4400','EPSG','4202','EPSG','17452',NULL,0); INSERT INTO "usage" VALUES('EPSG','6243','projected_crs','EPSG','20252','EPSG','1560','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20253','AGD66 / AMG zone 53',NULL,'EPSG','4400','EPSG','4202','EPSG','17453',NULL,0); INSERT INTO "usage" VALUES('EPSG','6244','projected_crs','EPSG','20253','EPSG','1561','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20254','AGD66 / AMG zone 54',NULL,'EPSG','4400','EPSG','4202','EPSG','17454',NULL,0); INSERT INTO "usage" VALUES('EPSG','6245','projected_crs','EPSG','20254','EPSG','1567','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20255','AGD66 / AMG zone 55',NULL,'EPSG','4400','EPSG','4202','EPSG','17455',NULL,0); INSERT INTO "usage" VALUES('EPSG','6246','projected_crs','EPSG','20255','EPSG','1568','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20256','AGD66 / AMG zone 56',NULL,'EPSG','4400','EPSG','4202','EPSG','17456',NULL,0); INSERT INTO "usage" VALUES('EPSG','6247','projected_crs','EPSG','20256','EPSG','2291','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20257','AGD66 / AMG zone 57',NULL,'EPSG','4400','EPSG','4202','EPSG','17457',NULL,0); INSERT INTO "usage" VALUES('EPSG','6248','projected_crs','EPSG','20257','EPSG','1565','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20258','AGD66 / AMG zone 58',NULL,'EPSG','4400','EPSG','4202','EPSG','17458',NULL,0); INSERT INTO "usage" VALUES('EPSG','6249','projected_crs','EPSG','20258','EPSG','1566','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20348','AGD84 / AMG zone 48',NULL,'EPSG','4400','EPSG','4203','EPSG','17448',NULL,1); INSERT INTO "usage" VALUES('EPSG','6250','projected_crs','EPSG','20348','EPSG','1556','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20349','AGD84 / AMG zone 49',NULL,'EPSG','4400','EPSG','4203','EPSG','17449',NULL,0); INSERT INTO "usage" VALUES('EPSG','6251','projected_crs','EPSG','20349','EPSG','1557','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20350','AGD84 / AMG zone 50',NULL,'EPSG','4400','EPSG','4203','EPSG','17450',NULL,0); INSERT INTO "usage" VALUES('EPSG','6252','projected_crs','EPSG','20350','EPSG','1558','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20351','AGD84 / AMG zone 51',NULL,'EPSG','4400','EPSG','4203','EPSG','17451',NULL,0); INSERT INTO "usage" VALUES('EPSG','6253','projected_crs','EPSG','20351','EPSG','1559','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20352','AGD84 / AMG zone 52',NULL,'EPSG','4400','EPSG','4203','EPSG','17452',NULL,0); INSERT INTO "usage" VALUES('EPSG','6254','projected_crs','EPSG','20352','EPSG','3687','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20353','AGD84 / AMG zone 53',NULL,'EPSG','4400','EPSG','4203','EPSG','17453',NULL,0); INSERT INTO "usage" VALUES('EPSG','6255','projected_crs','EPSG','20353','EPSG','3688','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20354','AGD84 / AMG zone 54',NULL,'EPSG','4400','EPSG','4203','EPSG','17454',NULL,0); INSERT INTO "usage" VALUES('EPSG','6256','projected_crs','EPSG','20354','EPSG','3689','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20355','AGD84 / AMG zone 55',NULL,'EPSG','4400','EPSG','4203','EPSG','17455',NULL,0); INSERT INTO "usage" VALUES('EPSG','6257','projected_crs','EPSG','20355','EPSG','3690','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20356','AGD84 / AMG zone 56',NULL,'EPSG','4400','EPSG','4203','EPSG','17456',NULL,0); INSERT INTO "usage" VALUES('EPSG','6258','projected_crs','EPSG','20356','EPSG','3691','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20357','AGD84 / AMG zone 57',NULL,'EPSG','4400','EPSG','4203','EPSG','17457',NULL,1); INSERT INTO "usage" VALUES('EPSG','6259','projected_crs','EPSG','20357','EPSG','1565','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20358','AGD84 / AMG zone 58',NULL,'EPSG','4400','EPSG','4203','EPSG','17458',NULL,1); INSERT INTO "usage" VALUES('EPSG','6260','projected_crs','EPSG','20358','EPSG','1566','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20436','Ain el Abd / UTM zone 36N',NULL,'EPSG','4400','EPSG','4204','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6261','projected_crs','EPSG','20436','EPSG','3107','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20437','Ain el Abd / UTM zone 37N',NULL,'EPSG','4400','EPSG','4204','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6262','projected_crs','EPSG','20437','EPSG','1569','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20438','Ain el Abd / UTM zone 38N',NULL,'EPSG','4400','EPSG','4204','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','6263','projected_crs','EPSG','20438','EPSG','1571','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20439','Ain el Abd / UTM zone 39N',NULL,'EPSG','4400','EPSG','4204','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','6264','projected_crs','EPSG','20439','EPSG','1570','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20440','Ain el Abd / UTM zone 40N',NULL,'EPSG','4400','EPSG','4204','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','6265','projected_crs','EPSG','20440','EPSG','3106','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20499','Ain el Abd / Bahrain Grid',NULL,'EPSG','4400','EPSG','4204','EPSG','19900',NULL,0); INSERT INTO "usage" VALUES('EPSG','6266','projected_crs','EPSG','20499','EPSG','3943','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20538','Afgooye / UTM zone 38N',NULL,'EPSG','4400','EPSG','4205','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','6267','projected_crs','EPSG','20538','EPSG','1554','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20539','Afgooye / UTM zone 39N',NULL,'EPSG','4400','EPSG','4205','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','6268','projected_crs','EPSG','20539','EPSG','1555','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20790','Lisbon (Lisbon) / Portuguese National Grid',NULL,'EPSG','4499','EPSG','4803','EPSG','19936',NULL,0); INSERT INTO "usage" VALUES('EPSG','6269','projected_crs','EPSG','20790','EPSG','1294','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','20791','Lisbon (Lisbon) / Portuguese Grid',NULL,'EPSG','4499','EPSG','4803','EPSG','19969',NULL,0); INSERT INTO "usage" VALUES('EPSG','6270','projected_crs','EPSG','20791','EPSG','1294','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20822','Aratu / UTM zone 22S',NULL,'EPSG','4400','EPSG','4208','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','6271','projected_crs','EPSG','20822','EPSG','1572','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','20823','Aratu / UTM zone 23S',NULL,'EPSG','4400','EPSG','4208','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','6272','projected_crs','EPSG','20823','EPSG','1573','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','20824','Aratu / UTM zone 24S',NULL,'EPSG','4400','EPSG','4208','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','6273','projected_crs','EPSG','20824','EPSG','1574','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','20904','GSK-2011 / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','7683','EPSG','16204',NULL,0); INSERT INTO "usage" VALUES('EPSG','15388','projected_crs','EPSG','20904','EPSG','1763','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20905','GSK-2011 / Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','7683','EPSG','16205',NULL,0); INSERT INTO "usage" VALUES('EPSG','15473','projected_crs','EPSG','20905','EPSG','1764','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20906','GSK-2011 / Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','7683','EPSG','16206',NULL,0); INSERT INTO "usage" VALUES('EPSG','15447','projected_crs','EPSG','20906','EPSG','1765','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20907','GSK-2011 / Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','7683','EPSG','16207',NULL,0); INSERT INTO "usage" VALUES('EPSG','15448','projected_crs','EPSG','20907','EPSG','1766','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20908','GSK-2011 / Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','7683','EPSG','16208',NULL,0); INSERT INTO "usage" VALUES('EPSG','15474','projected_crs','EPSG','20908','EPSG','1767','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20909','GSK-2011 / Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','7683','EPSG','16209',NULL,0); INSERT INTO "usage" VALUES('EPSG','15475','projected_crs','EPSG','20909','EPSG','1768','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20910','GSK-2011 / Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','7683','EPSG','16210',NULL,0); INSERT INTO "usage" VALUES('EPSG','15476','projected_crs','EPSG','20910','EPSG','1769','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20911','GSK-2011 / Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','7683','EPSG','16211',NULL,0); INSERT INTO "usage" VALUES('EPSG','15477','projected_crs','EPSG','20911','EPSG','1770','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20912','GSK-2011 / Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','7683','EPSG','16212',NULL,0); INSERT INTO "usage" VALUES('EPSG','15478','projected_crs','EPSG','20912','EPSG','1771','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20913','GSK-2011 / Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','7683','EPSG','16213',NULL,0); INSERT INTO "usage" VALUES('EPSG','15479','projected_crs','EPSG','20913','EPSG','1772','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20914','GSK-2011 / Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','7683','EPSG','16214',NULL,0); INSERT INTO "usage" VALUES('EPSG','15480','projected_crs','EPSG','20914','EPSG','1773','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20915','GSK-2011 / Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','7683','EPSG','16215',NULL,0); INSERT INTO "usage" VALUES('EPSG','15481','projected_crs','EPSG','20915','EPSG','1774','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20916','GSK-2011 / Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','7683','EPSG','16216',NULL,0); INSERT INTO "usage" VALUES('EPSG','15482','projected_crs','EPSG','20916','EPSG','1775','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20917','GSK-2011 / Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','7683','EPSG','16217',NULL,0); INSERT INTO "usage" VALUES('EPSG','15483','projected_crs','EPSG','20917','EPSG','1776','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20918','GSK-2011 / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','7683','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','15567','projected_crs','EPSG','20918','EPSG','1777','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20919','GSK-2011 / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','7683','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','15485','projected_crs','EPSG','20919','EPSG','1778','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20920','GSK-2011 / Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','7683','EPSG','16220',NULL,0); INSERT INTO "usage" VALUES('EPSG','15487','projected_crs','EPSG','20920','EPSG','1779','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20921','GSK-2011 / Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','7683','EPSG','16221',NULL,0); INSERT INTO "usage" VALUES('EPSG','15488','projected_crs','EPSG','20921','EPSG','1780','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20922','GSK-2011 / Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','7683','EPSG','16222',NULL,0); INSERT INTO "usage" VALUES('EPSG','15489','projected_crs','EPSG','20922','EPSG','1781','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20923','GSK-2011 / Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','7683','EPSG','16223',NULL,0); INSERT INTO "usage" VALUES('EPSG','15490','projected_crs','EPSG','20923','EPSG','1782','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20924','GSK-2011 / Gauss-Kruger zone 24',NULL,'EPSG','4530','EPSG','7683','EPSG','16224',NULL,0); INSERT INTO "usage" VALUES('EPSG','15491','projected_crs','EPSG','20924','EPSG','1783','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20925','GSK-2011 / Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','7683','EPSG','16225',NULL,0); INSERT INTO "usage" VALUES('EPSG','15492','projected_crs','EPSG','20925','EPSG','1784','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20926','GSK-2011 / Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','7683','EPSG','16226',NULL,0); INSERT INTO "usage" VALUES('EPSG','15493','projected_crs','EPSG','20926','EPSG','1785','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20927','GSK-2011 / Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','7683','EPSG','16227',NULL,0); INSERT INTO "usage" VALUES('EPSG','15494','projected_crs','EPSG','20927','EPSG','1786','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20928','GSK-2011 / Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','7683','EPSG','16228',NULL,0); INSERT INTO "usage" VALUES('EPSG','15499','projected_crs','EPSG','20928','EPSG','1787','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20929','GSK-2011 / Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','7683','EPSG','16229',NULL,0); INSERT INTO "usage" VALUES('EPSG','15495','projected_crs','EPSG','20929','EPSG','1788','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20930','GSK-2011 / Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','7683','EPSG','16230',NULL,0); INSERT INTO "usage" VALUES('EPSG','15496','projected_crs','EPSG','20930','EPSG','1789','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20931','GSK-2011 / Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','7683','EPSG','16231',NULL,0); INSERT INTO "usage" VALUES('EPSG','15497','projected_crs','EPSG','20931','EPSG','1790','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20932','GSK-2011 / Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','7683','EPSG','16232',NULL,0); INSERT INTO "usage" VALUES('EPSG','15498','projected_crs','EPSG','20932','EPSG','1791','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','20934','Arc 1950 / UTM zone 34S',NULL,'EPSG','4400','EPSG','4209','EPSG','16134',NULL,0); INSERT INTO "usage" VALUES('EPSG','6274','projected_crs','EPSG','20934','EPSG','1575','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20935','Arc 1950 / UTM zone 35S',NULL,'EPSG','4400','EPSG','4209','EPSG','16135',NULL,0); INSERT INTO "usage" VALUES('EPSG','6275','projected_crs','EPSG','20935','EPSG','1576','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','20936','Arc 1950 / UTM zone 36S',NULL,'EPSG','4400','EPSG','4209','EPSG','16136',NULL,0); INSERT INTO "usage" VALUES('EPSG','6276','projected_crs','EPSG','20936','EPSG','1577','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21004','GSK-2011 / Gauss-Kruger CM 21E',NULL,'EPSG','4530','EPSG','7683','EPSG','16304',NULL,0); INSERT INTO "usage" VALUES('EPSG','15563','projected_crs','EPSG','21004','EPSG','1763','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21005','GSK-2011 / Gauss-Kruger CM 27E',NULL,'EPSG','4530','EPSG','7683','EPSG','16305',NULL,0); INSERT INTO "usage" VALUES('EPSG','15535','projected_crs','EPSG','21005','EPSG','1764','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21006','GSK-2011 / Gauss-Kruger CM 33E',NULL,'EPSG','4530','EPSG','7683','EPSG','16306',NULL,0); INSERT INTO "usage" VALUES('EPSG','15536','projected_crs','EPSG','21006','EPSG','1765','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21007','GSK-2011 / Gauss-Kruger CM 39E',NULL,'EPSG','4530','EPSG','7683','EPSG','16307',NULL,0); INSERT INTO "usage" VALUES('EPSG','15537','projected_crs','EPSG','21007','EPSG','1766','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21008','GSK-2011 / Gauss-Kruger CM 45E',NULL,'EPSG','4530','EPSG','7683','EPSG','16308',NULL,0); INSERT INTO "usage" VALUES('EPSG','15538','projected_crs','EPSG','21008','EPSG','1767','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21009','GSK-2011 / Gauss-Kruger CM 51E',NULL,'EPSG','4530','EPSG','7683','EPSG','16309',NULL,0); INSERT INTO "usage" VALUES('EPSG','15564','projected_crs','EPSG','21009','EPSG','1768','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21010','GSK-2011 / Gauss-Kruger CM 57E',NULL,'EPSG','4530','EPSG','7683','EPSG','16310',NULL,0); INSERT INTO "usage" VALUES('EPSG','15540','projected_crs','EPSG','21010','EPSG','1769','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21011','GSK-2011 / Gauss-Kruger CM 63E',NULL,'EPSG','4530','EPSG','7683','EPSG','16311',NULL,0); INSERT INTO "usage" VALUES('EPSG','15541','projected_crs','EPSG','21011','EPSG','1770','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21012','GSK-2011 / Gauss-Kruger CM 69E',NULL,'EPSG','4530','EPSG','7683','EPSG','16312',NULL,0); INSERT INTO "usage" VALUES('EPSG','15542','projected_crs','EPSG','21012','EPSG','1771','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21013','GSK-2011 / Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','7683','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','15543','projected_crs','EPSG','21013','EPSG','1772','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21014','GSK-2011 / Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','7683','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','15544','projected_crs','EPSG','21014','EPSG','1773','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21015','GSK-2011 / Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','7683','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','15545','projected_crs','EPSG','21015','EPSG','1774','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21016','GSK-2011 / Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','7683','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','15546','projected_crs','EPSG','21016','EPSG','1775','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21017','GSK-2011 / Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','7683','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','15547','projected_crs','EPSG','21017','EPSG','1776','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21018','GSK-2011 / Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','7683','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','15548','projected_crs','EPSG','21018','EPSG','1777','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21019','GSK-2011 / Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','7683','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','15549','projected_crs','EPSG','21019','EPSG','1778','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21020','GSK-2011 / Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','7683','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','15550','projected_crs','EPSG','21020','EPSG','1779','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21021','GSK-2011 / Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','7683','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','15551','projected_crs','EPSG','21021','EPSG','1780','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21022','GSK-2011 / Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','7683','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','15552','projected_crs','EPSG','21022','EPSG','1781','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21023','GSK-2011 / Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','7683','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','15553','projected_crs','EPSG','21023','EPSG','1782','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21024','GSK-2011 / Gauss-Kruger CM 141E',NULL,'EPSG','4530','EPSG','7683','EPSG','16324',NULL,0); INSERT INTO "usage" VALUES('EPSG','15554','projected_crs','EPSG','21024','EPSG','1783','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21025','GSK-2011 / Gauss-Kruger CM 147E',NULL,'EPSG','4530','EPSG','7683','EPSG','16325',NULL,0); INSERT INTO "usage" VALUES('EPSG','15555','projected_crs','EPSG','21025','EPSG','1784','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21026','GSK-2011 / Gauss-Kruger CM 153E',NULL,'EPSG','4530','EPSG','7683','EPSG','16326',NULL,0); INSERT INTO "usage" VALUES('EPSG','15556','projected_crs','EPSG','21026','EPSG','1785','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21027','GSK-2011 / Gauss-Kruger CM 159E',NULL,'EPSG','4530','EPSG','7683','EPSG','16327',NULL,0); INSERT INTO "usage" VALUES('EPSG','15557','projected_crs','EPSG','21027','EPSG','1786','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21028','GSK-2011 / Gauss-Kruger CM 165E',NULL,'EPSG','4530','EPSG','7683','EPSG','16328',NULL,0); INSERT INTO "usage" VALUES('EPSG','15558','projected_crs','EPSG','21028','EPSG','1787','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21029','GSK-2011 / Gauss-Kruger CM 171E',NULL,'EPSG','4530','EPSG','7683','EPSG','16329',NULL,0); INSERT INTO "usage" VALUES('EPSG','15559','projected_crs','EPSG','21029','EPSG','1788','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21030','GSK-2011 / Gauss-Kruger CM 177E',NULL,'EPSG','4530','EPSG','7683','EPSG','16330',NULL,0); INSERT INTO "usage" VALUES('EPSG','15560','projected_crs','EPSG','21030','EPSG','1789','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21031','GSK-2011 / Gauss-Kruger CM 177W',NULL,'EPSG','4530','EPSG','7683','EPSG','16331',NULL,0); INSERT INTO "usage" VALUES('EPSG','15561','projected_crs','EPSG','21031','EPSG','1790','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21032','GSK-2011 / Gauss-Kruger CM 171W',NULL,'EPSG','4530','EPSG','7683','EPSG','16332',NULL,0); INSERT INTO "usage" VALUES('EPSG','15562','projected_crs','EPSG','21032','EPSG','1791','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21035','Arc 1960 / UTM zone 35S',NULL,'EPSG','4400','EPSG','4210','EPSG','16135',NULL,0); INSERT INTO "usage" VALUES('EPSG','6277','projected_crs','EPSG','21035','EPSG','1579','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21036','Arc 1960 / UTM zone 36S',NULL,'EPSG','4400','EPSG','4210','EPSG','16136',NULL,0); INSERT INTO "usage" VALUES('EPSG','6278','projected_crs','EPSG','21036','EPSG','1581','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21037','Arc 1960 / UTM zone 37S',NULL,'EPSG','4400','EPSG','4210','EPSG','16137',NULL,0); INSERT INTO "usage" VALUES('EPSG','6279','projected_crs','EPSG','21037','EPSG','1583','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21095','Arc 1960 / UTM zone 35N',NULL,'EPSG','4400','EPSG','4210','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6280','projected_crs','EPSG','21095','EPSG','1578','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21096','Arc 1960 / UTM zone 36N',NULL,'EPSG','4400','EPSG','4210','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6281','projected_crs','EPSG','21096','EPSG','1580','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21097','Arc 1960 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4210','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6282','projected_crs','EPSG','21097','EPSG','1582','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21100','Batavia (Jakarta) / NEIEZ',NULL,'EPSG','4499','EPSG','4813','EPSG','19905',NULL,1); INSERT INTO "usage" VALUES('EPSG','6283','projected_crs','EPSG','21100','EPSG','1285','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21148','Batavia / UTM zone 48S',NULL,'EPSG','4400','EPSG','4211','EPSG','16148',NULL,0); INSERT INTO "usage" VALUES('EPSG','6284','projected_crs','EPSG','21148','EPSG','1584','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21149','Batavia / UTM zone 49S',NULL,'EPSG','4400','EPSG','4211','EPSG','16149',NULL,0); INSERT INTO "usage" VALUES('EPSG','6285','projected_crs','EPSG','21149','EPSG','1586','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21150','Batavia / UTM zone 50S',NULL,'EPSG','4400','EPSG','4211','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','6286','projected_crs','EPSG','21150','EPSG','1585','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21207','GSK-2011 / GSK 3GK zone 7',NULL,'EPSG','4530','EPSG','7683','EPSG','16907',NULL,0); INSERT INTO "usage" VALUES('EPSG','16450','projected_crs','EPSG','21207','EPSG','2747','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21208','GSK-2011 / GSK 3GK zone 8',NULL,'EPSG','4530','EPSG','7683','EPSG','16908',NULL,0); INSERT INTO "usage" VALUES('EPSG','16452','projected_crs','EPSG','21208','EPSG','2748','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21209','GSK-2011 / GSK 3GK zone 9',NULL,'EPSG','4530','EPSG','7683','EPSG','16909',NULL,0); INSERT INTO "usage" VALUES('EPSG','16453','projected_crs','EPSG','21209','EPSG','2749','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21210','GSK-2011 / GSK 3GK zone 10',NULL,'EPSG','4530','EPSG','7683','EPSG','16910',NULL,0); INSERT INTO "usage" VALUES('EPSG','16454','projected_crs','EPSG','21210','EPSG','2750','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21211','GSK-2011 / GSK 3GK zone 11',NULL,'EPSG','4530','EPSG','7683','EPSG','16911',NULL,0); INSERT INTO "usage" VALUES('EPSG','16455','projected_crs','EPSG','21211','EPSG','2751','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21212','GSK-2011 / GSK 3GK zone 12',NULL,'EPSG','4530','EPSG','7683','EPSG','16912',NULL,0); INSERT INTO "usage" VALUES('EPSG','16456','projected_crs','EPSG','21212','EPSG','2752','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21213','GSK-2011 / GSK 3GK zone 13',NULL,'EPSG','4530','EPSG','7683','EPSG','16913',NULL,0); INSERT INTO "usage" VALUES('EPSG','16457','projected_crs','EPSG','21213','EPSG','2753','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21214','GSK-2011 / GSK 3GK zone 14',NULL,'EPSG','4530','EPSG','7683','EPSG','16914',NULL,0); INSERT INTO "usage" VALUES('EPSG','16458','projected_crs','EPSG','21214','EPSG','2754','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21215','GSK-2011 / GSK 3GK zone 15',NULL,'EPSG','4530','EPSG','7683','EPSG','16915',NULL,0); INSERT INTO "usage" VALUES('EPSG','16459','projected_crs','EPSG','21215','EPSG','2755','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21216','GSK-2011 / GSK 3GK zone 16',NULL,'EPSG','4530','EPSG','7683','EPSG','16916',NULL,0); INSERT INTO "usage" VALUES('EPSG','16460','projected_crs','EPSG','21216','EPSG','2756','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21217','GSK-2011 / GSK 3GK zone 17',NULL,'EPSG','4530','EPSG','7683','EPSG','16917',NULL,0); INSERT INTO "usage" VALUES('EPSG','16461','projected_crs','EPSG','21217','EPSG','2757','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21218','GSK-2011 / GSK 3GK zone 18',NULL,'EPSG','4530','EPSG','7683','EPSG','16918',NULL,0); INSERT INTO "usage" VALUES('EPSG','16462','projected_crs','EPSG','21218','EPSG','2758','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21219','GSK-2011 / GSK 3GK zone 19',NULL,'EPSG','4530','EPSG','7683','EPSG','16919',NULL,0); INSERT INTO "usage" VALUES('EPSG','16463','projected_crs','EPSG','21219','EPSG','2759','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21220','GSK-2011 / GSK 3GK zone 20',NULL,'EPSG','4530','EPSG','7683','EPSG','16920',NULL,0); INSERT INTO "usage" VALUES('EPSG','16464','projected_crs','EPSG','21220','EPSG','2760','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21221','GSK-2011 / GSK 3GK zone 21',NULL,'EPSG','4530','EPSG','7683','EPSG','16921',NULL,0); INSERT INTO "usage" VALUES('EPSG','16465','projected_crs','EPSG','21221','EPSG','2761','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21222','GSK-2011 / GSK 3GK zone 22',NULL,'EPSG','4530','EPSG','7683','EPSG','16922',NULL,0); INSERT INTO "usage" VALUES('EPSG','16420','projected_crs','EPSG','21222','EPSG','2762','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21223','GSK-2011 / GSK 3GK zone 23',NULL,'EPSG','4530','EPSG','7683','EPSG','16923',NULL,0); INSERT INTO "usage" VALUES('EPSG','16421','projected_crs','EPSG','21223','EPSG','2763','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21224','GSK-2011 / GSK 3GK zone 24',NULL,'EPSG','4530','EPSG','7683','EPSG','16924',NULL,0); INSERT INTO "usage" VALUES('EPSG','16422','projected_crs','EPSG','21224','EPSG','2764','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21225','GSK-2011 / GSK 3GK zone 25',NULL,'EPSG','4530','EPSG','7683','EPSG','16925',NULL,0); INSERT INTO "usage" VALUES('EPSG','16423','projected_crs','EPSG','21225','EPSG','2765','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21226','GSK-2011 / GSK 3GK zone 26',NULL,'EPSG','4530','EPSG','7683','EPSG','16926',NULL,0); INSERT INTO "usage" VALUES('EPSG','16424','projected_crs','EPSG','21226','EPSG','2766','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21227','GSK-2011 / GSK 3GK zone 27',NULL,'EPSG','4530','EPSG','7683','EPSG','16927',NULL,0); INSERT INTO "usage" VALUES('EPSG','16425','projected_crs','EPSG','21227','EPSG','2767','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21228','GSK-2011 / GSK 3GK zone 28',NULL,'EPSG','4530','EPSG','7683','EPSG','16928',NULL,0); INSERT INTO "usage" VALUES('EPSG','16426','projected_crs','EPSG','21228','EPSG','2768','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21229','GSK-2011 / GSK 3GK zone 29',NULL,'EPSG','4530','EPSG','7683','EPSG','16929',NULL,0); INSERT INTO "usage" VALUES('EPSG','16501','projected_crs','EPSG','21229','EPSG','2769','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21230','GSK-2011 / GSK 3GK zone 30',NULL,'EPSG','4530','EPSG','7683','EPSG','16930',NULL,0); INSERT INTO "usage" VALUES('EPSG','16502','projected_crs','EPSG','21230','EPSG','2676','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21231','GSK-2011 / GSK 3GK zone 31',NULL,'EPSG','4530','EPSG','7683','EPSG','16931',NULL,0); INSERT INTO "usage" VALUES('EPSG','16442','projected_crs','EPSG','21231','EPSG','2677','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21232','GSK-2011 / GSK 3GK zone 32',NULL,'EPSG','4530','EPSG','7683','EPSG','16932',NULL,0); INSERT INTO "usage" VALUES('EPSG','16443','projected_crs','EPSG','21232','EPSG','2678','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21233','GSK-2011 / GSK 3GK zone 33',NULL,'EPSG','4530','EPSG','7683','EPSG','16933',NULL,0); INSERT INTO "usage" VALUES('EPSG','16444','projected_crs','EPSG','21233','EPSG','2679','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21234','GSK-2011 / GSK 3GK zone 34',NULL,'EPSG','4530','EPSG','7683','EPSG','16934',NULL,0); INSERT INTO "usage" VALUES('EPSG','16445','projected_crs','EPSG','21234','EPSG','2680','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21235','GSK-2011 / GSK 3GK zone 35',NULL,'EPSG','4530','EPSG','7683','EPSG','16935',NULL,0); INSERT INTO "usage" VALUES('EPSG','16446','projected_crs','EPSG','21235','EPSG','2681','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21236','GSK-2011 / GSK 3GK zone 36',NULL,'EPSG','4530','EPSG','7683','EPSG','16936',NULL,0); INSERT INTO "usage" VALUES('EPSG','16447','projected_crs','EPSG','21236','EPSG','2682','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21237','GSK-2011 / GSK 3GK zone 37',NULL,'EPSG','4530','EPSG','7683','EPSG','16937',NULL,0); INSERT INTO "usage" VALUES('EPSG','16392','projected_crs','EPSG','21237','EPSG','2683','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21238','GSK-2011 / GSK 3GK zone 38',NULL,'EPSG','4530','EPSG','7683','EPSG','16938',NULL,0); INSERT INTO "usage" VALUES('EPSG','16393','projected_crs','EPSG','21238','EPSG','2684','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21239','GSK-2011 / GSK 3GK zone 39',NULL,'EPSG','4530','EPSG','7683','EPSG','16939',NULL,0); INSERT INTO "usage" VALUES('EPSG','16394','projected_crs','EPSG','21239','EPSG','2685','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21240','GSK-2011 / GSK 3GK zone 40',NULL,'EPSG','4530','EPSG','7683','EPSG','16940',NULL,0); INSERT INTO "usage" VALUES('EPSG','16395','projected_crs','EPSG','21240','EPSG','2686','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21241','GSK-2011 / GSK 3GK zone 41',NULL,'EPSG','4530','EPSG','7683','EPSG','16941',NULL,0); INSERT INTO "usage" VALUES('EPSG','16396','projected_crs','EPSG','21241','EPSG','2687','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21242','GSK-2011 / GSK 3GK zone 42',NULL,'EPSG','4530','EPSG','7683','EPSG','16942',NULL,0); INSERT INTO "usage" VALUES('EPSG','16397','projected_crs','EPSG','21242','EPSG','2688','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21243','GSK-2011 / GSK 3GK zone 43',NULL,'EPSG','4530','EPSG','7683','EPSG','16943',NULL,0); INSERT INTO "usage" VALUES('EPSG','16398','projected_crs','EPSG','21243','EPSG','2689','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21244','GSK-2011 / GSK 3GK zone 44',NULL,'EPSG','4530','EPSG','7683','EPSG','16944',NULL,0); INSERT INTO "usage" VALUES('EPSG','16399','projected_crs','EPSG','21244','EPSG','2690','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21245','GSK-2011 / GSK 3GK zone 45',NULL,'EPSG','4530','EPSG','7683','EPSG','16945',NULL,0); INSERT INTO "usage" VALUES('EPSG','16400','projected_crs','EPSG','21245','EPSG','2691','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21246','GSK-2011 / GSK 3GK zone 46',NULL,'EPSG','4530','EPSG','7683','EPSG','16946',NULL,0); INSERT INTO "usage" VALUES('EPSG','16401','projected_crs','EPSG','21246','EPSG','2692','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21247','GSK-2011 / GSK 3GK zone 47',NULL,'EPSG','4530','EPSG','7683','EPSG','16947',NULL,0); INSERT INTO "usage" VALUES('EPSG','16402','projected_crs','EPSG','21247','EPSG','2693','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21248','GSK-2011 / GSK 3GK zone 48',NULL,'EPSG','4530','EPSG','7683','EPSG','16948',NULL,0); INSERT INTO "usage" VALUES('EPSG','16403','projected_crs','EPSG','21248','EPSG','2694','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21249','GSK-2011 / GSK 3GK zone 49',NULL,'EPSG','4530','EPSG','7683','EPSG','16949',NULL,0); INSERT INTO "usage" VALUES('EPSG','16404','projected_crs','EPSG','21249','EPSG','2695','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21250','GSK-2011 / GSK 3GK zone 50',NULL,'EPSG','4530','EPSG','7683','EPSG','16950',NULL,0); INSERT INTO "usage" VALUES('EPSG','16405','projected_crs','EPSG','21250','EPSG','2696','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21251','GSK-2011 / GSK 3GK zone 51',NULL,'EPSG','4530','EPSG','7683','EPSG','16951',NULL,0); INSERT INTO "usage" VALUES('EPSG','16365','projected_crs','EPSG','21251','EPSG','2697','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21252','GSK-2011 / GSK 3GK zone 52',NULL,'EPSG','4530','EPSG','7683','EPSG','16952',NULL,0); INSERT INTO "usage" VALUES('EPSG','16366','projected_crs','EPSG','21252','EPSG','2698','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21253','GSK-2011 / GSK 3GK zone 53',NULL,'EPSG','4530','EPSG','7683','EPSG','16953',NULL,0); INSERT INTO "usage" VALUES('EPSG','16367','projected_crs','EPSG','21253','EPSG','2699','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21254','GSK-2011 / GSK 3GK zone 54',NULL,'EPSG','4530','EPSG','7683','EPSG','16954',NULL,0); INSERT INTO "usage" VALUES('EPSG','16368','projected_crs','EPSG','21254','EPSG','2700','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21255','GSK-2011 / GSK 3GK zone 55',NULL,'EPSG','4530','EPSG','7683','EPSG','16955',NULL,0); INSERT INTO "usage" VALUES('EPSG','16369','projected_crs','EPSG','21255','EPSG','2701','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21256','GSK-2011 / GSK 3GK zone 56',NULL,'EPSG','4530','EPSG','7683','EPSG','16956',NULL,0); INSERT INTO "usage" VALUES('EPSG','16370','projected_crs','EPSG','21256','EPSG','2702','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21257','GSK-2011 / GSK 3GK zone 57',NULL,'EPSG','4530','EPSG','7683','EPSG','16957',NULL,0); INSERT INTO "usage" VALUES('EPSG','16371','projected_crs','EPSG','21257','EPSG','2703','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21258','GSK-2011 / GSK 3GK zone 58',NULL,'EPSG','4530','EPSG','7683','EPSG','16958',NULL,0); INSERT INTO "usage" VALUES('EPSG','16372','projected_crs','EPSG','21258','EPSG','2704','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21259','GSK-2011 / GSK 3GK zone 59',NULL,'EPSG','4530','EPSG','7683','EPSG','16959',NULL,0); INSERT INTO "usage" VALUES('EPSG','16373','projected_crs','EPSG','21259','EPSG','2705','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21260','GSK-2011 / GSK 3GK zone 60',NULL,'EPSG','4530','EPSG','7683','EPSG','16960',NULL,0); INSERT INTO "usage" VALUES('EPSG','16375','projected_crs','EPSG','21260','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21261','GSK-2011 / GSK 3GK zone 61',NULL,'EPSG','4530','EPSG','7683','EPSG','16961',NULL,0); INSERT INTO "usage" VALUES('EPSG','16376','projected_crs','EPSG','21261','EPSG','2707','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21262','GSK-2011 / GSK 3GK zone 62',NULL,'EPSG','4530','EPSG','7683','EPSG','16962',NULL,0); INSERT INTO "usage" VALUES('EPSG','16377','projected_crs','EPSG','21262','EPSG','2708','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21263','GSK-2011 / GSK 3GK zone 63',NULL,'EPSG','4530','EPSG','7683','EPSG','16963',NULL,0); INSERT INTO "usage" VALUES('EPSG','16378','projected_crs','EPSG','21263','EPSG','2709','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21264','GSK-2011 / GSK 3GK zone 64',NULL,'EPSG','4530','EPSG','7683','EPSG','16964',NULL,0); INSERT INTO "usage" VALUES('EPSG','16379','projected_crs','EPSG','21264','EPSG','2710','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21291','Barbados 1938 / British West Indies Grid',NULL,'EPSG','4400','EPSG','4212','EPSG','19942',NULL,0); INSERT INTO "usage" VALUES('EPSG','6287','projected_crs','EPSG','21291','EPSG','3218','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','21292','Barbados 1938 / Barbados National Grid',NULL,'EPSG','4400','EPSG','4212','EPSG','19943',NULL,0); INSERT INTO "usage" VALUES('EPSG','6288','projected_crs','EPSG','21292','EPSG','3218','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','21307','GSK-2011 / GSK 3GK CM 21E',NULL,'EPSG','4530','EPSG','7683','EPSG','17107',NULL,0); INSERT INTO "usage" VALUES('EPSG','16451','projected_crs','EPSG','21307','EPSG','2747','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21308','GSK-2011 / GSK 3GK CM 24E',NULL,'EPSG','4530','EPSG','7683','EPSG','17108',NULL,0); INSERT INTO "usage" VALUES('EPSG','16466','projected_crs','EPSG','21308','EPSG','2748','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21309','GSK-2011 / GSK 3GK CM 27E',NULL,'EPSG','4530','EPSG','7683','EPSG','17109',NULL,0); INSERT INTO "usage" VALUES('EPSG','16467','projected_crs','EPSG','21309','EPSG','2749','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21310','GSK-2011 / GSK 3GK CM 30E',NULL,'EPSG','4530','EPSG','7683','EPSG','17110',NULL,0); INSERT INTO "usage" VALUES('EPSG','16468','projected_crs','EPSG','21310','EPSG','2750','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21311','GSK-2011 / GSK 3GK CM 33E',NULL,'EPSG','4530','EPSG','7683','EPSG','17111',NULL,0); INSERT INTO "usage" VALUES('EPSG','16469','projected_crs','EPSG','21311','EPSG','2751','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21312','GSK-2011 / GSK 3GK CM 36E',NULL,'EPSG','4530','EPSG','7683','EPSG','17112',NULL,0); INSERT INTO "usage" VALUES('EPSG','16470','projected_crs','EPSG','21312','EPSG','2752','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21313','GSK-2011 / GSK 3GK CM 39E',NULL,'EPSG','4530','EPSG','7683','EPSG','17113',NULL,0); INSERT INTO "usage" VALUES('EPSG','16479','projected_crs','EPSG','21313','EPSG','2753','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21314','GSK-2011 / GSK 3GK CM 42E',NULL,'EPSG','4530','EPSG','7683','EPSG','17114',NULL,0); INSERT INTO "usage" VALUES('EPSG','16471','projected_crs','EPSG','21314','EPSG','2754','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21315','GSK-2011 / GSK 3GK CM 45E',NULL,'EPSG','4530','EPSG','7683','EPSG','17115',NULL,0); INSERT INTO "usage" VALUES('EPSG','16472','projected_crs','EPSG','21315','EPSG','2755','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21316','GSK-2011 / GSK 3GK CM 48E',NULL,'EPSG','4530','EPSG','7683','EPSG','17116',NULL,0); INSERT INTO "usage" VALUES('EPSG','16473','projected_crs','EPSG','21316','EPSG','2756','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21317','GSK-2011 / GSK 3GK CM 51E',NULL,'EPSG','4530','EPSG','7683','EPSG','17117',NULL,0); INSERT INTO "usage" VALUES('EPSG','16474','projected_crs','EPSG','21317','EPSG','2757','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21318','GSK-2011 / GSK 3GK CM 54E',NULL,'EPSG','4530','EPSG','7683','EPSG','17118',NULL,0); INSERT INTO "usage" VALUES('EPSG','16475','projected_crs','EPSG','21318','EPSG','2758','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21319','GSK-2011 / GSK 3GK CM 57E',NULL,'EPSG','4530','EPSG','7683','EPSG','17119',NULL,0); INSERT INTO "usage" VALUES('EPSG','16476','projected_crs','EPSG','21319','EPSG','2759','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21320','GSK-2011 / GSK 3GK CM 60E',NULL,'EPSG','4530','EPSG','7683','EPSG','17120',NULL,0); INSERT INTO "usage" VALUES('EPSG','16477','projected_crs','EPSG','21320','EPSG','2760','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21321','GSK-2011 / GSK 3GK CM 63E',NULL,'EPSG','4530','EPSG','7683','EPSG','17121',NULL,0); INSERT INTO "usage" VALUES('EPSG','16478','projected_crs','EPSG','21321','EPSG','2761','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21322','GSK-2011 / GSK 3GK CM 66E',NULL,'EPSG','4530','EPSG','7683','EPSG','17122',NULL,0); INSERT INTO "usage" VALUES('EPSG','16448','projected_crs','EPSG','21322','EPSG','2762','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21323','GSK-2011 / GSK 3GK CM 69E',NULL,'EPSG','4530','EPSG','7683','EPSG','17123',NULL,0); INSERT INTO "usage" VALUES('EPSG','16430','projected_crs','EPSG','21323','EPSG','2763','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21324','GSK-2011 / GSK 3GK CM 72E',NULL,'EPSG','4530','EPSG','7683','EPSG','17124',NULL,0); INSERT INTO "usage" VALUES('EPSG','16449','projected_crs','EPSG','21324','EPSG','2764','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21325','GSK-2011 / GSK 3GK CM 75E',NULL,'EPSG','4530','EPSG','7683','EPSG','17125',NULL,0); INSERT INTO "usage" VALUES('EPSG','16431','projected_crs','EPSG','21325','EPSG','2765','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21326','GSK-2011 / GSK 3GK CM 78E',NULL,'EPSG','4530','EPSG','7683','EPSG','17126',NULL,0); INSERT INTO "usage" VALUES('EPSG','16432','projected_crs','EPSG','21326','EPSG','2766','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21327','GSK-2011 / GSK 3GK CM 81E',NULL,'EPSG','4530','EPSG','7683','EPSG','17127',NULL,0); INSERT INTO "usage" VALUES('EPSG','16433','projected_crs','EPSG','21327','EPSG','2767','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21328','GSK-2011 / GSK 3GK CM 84E',NULL,'EPSG','4530','EPSG','7683','EPSG','17128',NULL,0); INSERT INTO "usage" VALUES('EPSG','16434','projected_crs','EPSG','21328','EPSG','2768','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21329','GSK-2011 / GSK 3GK CM 87E',NULL,'EPSG','4530','EPSG','7683','EPSG','17129',NULL,0); INSERT INTO "usage" VALUES('EPSG','16435','projected_crs','EPSG','21329','EPSG','2769','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21330','GSK-2011 / GSK 3GK CM 90E',NULL,'EPSG','4530','EPSG','7683','EPSG','17130',NULL,0); INSERT INTO "usage" VALUES('EPSG','16436','projected_crs','EPSG','21330','EPSG','2676','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21331','GSK-2011 / GSK 3GK CM 93E',NULL,'EPSG','4530','EPSG','7683','EPSG','17131',NULL,0); INSERT INTO "usage" VALUES('EPSG','16437','projected_crs','EPSG','21331','EPSG','2677','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21332','GSK-2011 / GSK 3GK CM 96E',NULL,'EPSG','4530','EPSG','7683','EPSG','17132',NULL,0); INSERT INTO "usage" VALUES('EPSG','16429','projected_crs','EPSG','21332','EPSG','2678','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21333','GSK-2011 / GSK 3GK CM 99E',NULL,'EPSG','4530','EPSG','7683','EPSG','17133',NULL,0); INSERT INTO "usage" VALUES('EPSG','16438','projected_crs','EPSG','21333','EPSG','2679','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21334','GSK-2011 / GSK 3GK CM 102E',NULL,'EPSG','4530','EPSG','7683','EPSG','17134',NULL,0); INSERT INTO "usage" VALUES('EPSG','16439','projected_crs','EPSG','21334','EPSG','2680','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21335','GSK-2011 / GSK 3GK CM 105E',NULL,'EPSG','4530','EPSG','7683','EPSG','17135',NULL,0); INSERT INTO "usage" VALUES('EPSG','16440','projected_crs','EPSG','21335','EPSG','2681','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21336','GSK-2011 / GSK 3GK CM 108E',NULL,'EPSG','4530','EPSG','7683','EPSG','17136',NULL,0); INSERT INTO "usage" VALUES('EPSG','16441','projected_crs','EPSG','21336','EPSG','2682','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21337','GSK-2011 / GSK 3GK CM 111E',NULL,'EPSG','4530','EPSG','7683','EPSG','17137',NULL,0); INSERT INTO "usage" VALUES('EPSG','16406','projected_crs','EPSG','21337','EPSG','2683','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21338','GSK-2011 / GSK 3GK CM 114E',NULL,'EPSG','4530','EPSG','7683','EPSG','17138',NULL,0); INSERT INTO "usage" VALUES('EPSG','16407','projected_crs','EPSG','21338','EPSG','2684','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21339','GSK-2011 / GSK 3GK CM 117E',NULL,'EPSG','4530','EPSG','7683','EPSG','17139',NULL,0); INSERT INTO "usage" VALUES('EPSG','16408','projected_crs','EPSG','21339','EPSG','2685','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21340','GSK-2011 / GSK 3GK CM 120E',NULL,'EPSG','4530','EPSG','7683','EPSG','17140',NULL,0); INSERT INTO "usage" VALUES('EPSG','16409','projected_crs','EPSG','21340','EPSG','2686','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21341','GSK-2011 / GSK 3GK CM 123E',NULL,'EPSG','4530','EPSG','7683','EPSG','17141',NULL,0); INSERT INTO "usage" VALUES('EPSG','16481','projected_crs','EPSG','21341','EPSG','2687','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21342','GSK-2011 / GSK 3GK CM 126E',NULL,'EPSG','4530','EPSG','7683','EPSG','17142',NULL,0); INSERT INTO "usage" VALUES('EPSG','16411','projected_crs','EPSG','21342','EPSG','2688','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21343','GSK-2011 / GSK 3GK CM 129E',NULL,'EPSG','4530','EPSG','7683','EPSG','17143',NULL,0); INSERT INTO "usage" VALUES('EPSG','16412','projected_crs','EPSG','21343','EPSG','2689','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21344','GSK-2011 / GSK 3GK CM 132E',NULL,'EPSG','4530','EPSG','7683','EPSG','17144',NULL,0); INSERT INTO "usage" VALUES('EPSG','16413','projected_crs','EPSG','21344','EPSG','2690','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21345','GSK-2011 / GSK 3GK CM 135E',NULL,'EPSG','4530','EPSG','7683','EPSG','17145',NULL,0); INSERT INTO "usage" VALUES('EPSG','16414','projected_crs','EPSG','21345','EPSG','2691','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21346','GSK-2011 / GSK 3GK CM 138E',NULL,'EPSG','4530','EPSG','7683','EPSG','17146',NULL,0); INSERT INTO "usage" VALUES('EPSG','16415','projected_crs','EPSG','21346','EPSG','2692','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21347','GSK-2011 / GSK 3GK CM 141E',NULL,'EPSG','4530','EPSG','7683','EPSG','17147',NULL,0); INSERT INTO "usage" VALUES('EPSG','16416','projected_crs','EPSG','21347','EPSG','2693','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21348','GSK-2011 / GSK 3GK CM 144E',NULL,'EPSG','4530','EPSG','7683','EPSG','17148',NULL,0); INSERT INTO "usage" VALUES('EPSG','16417','projected_crs','EPSG','21348','EPSG','2694','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21349','GSK-2011 / GSK 3GK CM 147E',NULL,'EPSG','4530','EPSG','7683','EPSG','17149',NULL,0); INSERT INTO "usage" VALUES('EPSG','16418','projected_crs','EPSG','21349','EPSG','2695','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21350','GSK-2011 / GSK 3GK CM 150E',NULL,'EPSG','4530','EPSG','7683','EPSG','17150',NULL,0); INSERT INTO "usage" VALUES('EPSG','16419','projected_crs','EPSG','21350','EPSG','2696','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21351','GSK-2011 / GSK 3GK CM 153E',NULL,'EPSG','4530','EPSG','7683','EPSG','17151',NULL,0); INSERT INTO "usage" VALUES('EPSG','16380','projected_crs','EPSG','21351','EPSG','2697','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21352','GSK-2011 / GSK 3GK CM 156E',NULL,'EPSG','4530','EPSG','7683','EPSG','17152',NULL,0); INSERT INTO "usage" VALUES('EPSG','16381','projected_crs','EPSG','21352','EPSG','2698','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21353','GSK-2011 / GSK 3GK CM 159E',NULL,'EPSG','4530','EPSG','7683','EPSG','17153',NULL,0); INSERT INTO "usage" VALUES('EPSG','16382','projected_crs','EPSG','21353','EPSG','2699','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21354','GSK-2011 / GSK 3GK CM 162E',NULL,'EPSG','4530','EPSG','7683','EPSG','17154',NULL,0); INSERT INTO "usage" VALUES('EPSG','16383','projected_crs','EPSG','21354','EPSG','2700','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21355','GSK-2011 / GSK 3GK CM 165E',NULL,'EPSG','4530','EPSG','7683','EPSG','17155',NULL,0); INSERT INTO "usage" VALUES('EPSG','16384','projected_crs','EPSG','21355','EPSG','2701','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21356','GSK-2011 / GSK 3GK CM 168E',NULL,'EPSG','4530','EPSG','7683','EPSG','17156',NULL,0); INSERT INTO "usage" VALUES('EPSG','16385','projected_crs','EPSG','21356','EPSG','2702','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21357','GSK-2011 / GSK 3GK CM 171E',NULL,'EPSG','4530','EPSG','7683','EPSG','17157',NULL,0); INSERT INTO "usage" VALUES('EPSG','16386','projected_crs','EPSG','21357','EPSG','2703','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21358','GSK-2011 / GSK 3GK CM 174E',NULL,'EPSG','4530','EPSG','7683','EPSG','17158',NULL,0); INSERT INTO "usage" VALUES('EPSG','16374','projected_crs','EPSG','21358','EPSG','2704','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21359','GSK-2011 / GSK 3GK CM 177E',NULL,'EPSG','4530','EPSG','7683','EPSG','17159',NULL,0); INSERT INTO "usage" VALUES('EPSG','16387','projected_crs','EPSG','21359','EPSG','2705','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21360','GSK-2011 / GSK 3GK CM 180E',NULL,'EPSG','4530','EPSG','7683','EPSG','17160',NULL,0); INSERT INTO "usage" VALUES('EPSG','16388','projected_crs','EPSG','21360','EPSG','2706','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21361','GSK-2011 / GSK 3GK CM 177W',NULL,'EPSG','4530','EPSG','7683','EPSG','17161',NULL,0); INSERT INTO "usage" VALUES('EPSG','16389','projected_crs','EPSG','21361','EPSG','2707','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21362','GSK-2011 / GSK 3GK CM 174W',NULL,'EPSG','4530','EPSG','7683','EPSG','17162',NULL,0); INSERT INTO "usage" VALUES('EPSG','16390','projected_crs','EPSG','21362','EPSG','2708','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21363','GSK-2011 / GSK 3GK CM 171W',NULL,'EPSG','4530','EPSG','7683','EPSG','17163',NULL,0); INSERT INTO "usage" VALUES('EPSG','16483','projected_crs','EPSG','21363','EPSG','2709','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21364','GSK-2011 / GSK 3GK CM 168W',NULL,'EPSG','4530','EPSG','7683','EPSG','17164',NULL,0); INSERT INTO "usage" VALUES('EPSG','16484','projected_crs','EPSG','21364','EPSG','2710','EPSG','1055'); INSERT INTO "projected_crs" VALUES('EPSG','21413','Beijing 1954 / Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4214','EPSG','16213',NULL,0); INSERT INTO "usage" VALUES('EPSG','6289','projected_crs','EPSG','21413','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21414','Beijing 1954 / Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4214','EPSG','16214',NULL,0); INSERT INTO "usage" VALUES('EPSG','6290','projected_crs','EPSG','21414','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21415','Beijing 1954 / Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4214','EPSG','16215',NULL,0); INSERT INTO "usage" VALUES('EPSG','6291','projected_crs','EPSG','21415','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21416','Beijing 1954 / Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4214','EPSG','16216',NULL,0); INSERT INTO "usage" VALUES('EPSG','6292','projected_crs','EPSG','21416','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21417','Beijing 1954 / Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4214','EPSG','16217',NULL,0); INSERT INTO "usage" VALUES('EPSG','6293','projected_crs','EPSG','21417','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21418','Beijing 1954 / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4214','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','6294','projected_crs','EPSG','21418','EPSG','1592','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21419','Beijing 1954 / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4214','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','6295','projected_crs','EPSG','21419','EPSG','1593','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21420','Beijing 1954 / Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4214','EPSG','16220',NULL,0); INSERT INTO "usage" VALUES('EPSG','6296','projected_crs','EPSG','21420','EPSG','1594','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21421','Beijing 1954 / Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4214','EPSG','16221',NULL,0); INSERT INTO "usage" VALUES('EPSG','6297','projected_crs','EPSG','21421','EPSG','1595','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21422','Beijing 1954 / Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4214','EPSG','16222',NULL,0); INSERT INTO "usage" VALUES('EPSG','6298','projected_crs','EPSG','21422','EPSG','1596','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21423','Beijing 1954 / Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4214','EPSG','16223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6299','projected_crs','EPSG','21423','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21453','Beijing 1954 / Gauss-Kruger CM 75E',NULL,'EPSG','4530','EPSG','4214','EPSG','16313',NULL,0); INSERT INTO "usage" VALUES('EPSG','6300','projected_crs','EPSG','21453','EPSG','1587','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21454','Beijing 1954 / Gauss-Kruger CM 81E',NULL,'EPSG','4530','EPSG','4214','EPSG','16314',NULL,0); INSERT INTO "usage" VALUES('EPSG','6301','projected_crs','EPSG','21454','EPSG','1588','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21455','Beijing 1954 / Gauss-Kruger CM 87E',NULL,'EPSG','4530','EPSG','4214','EPSG','16315',NULL,0); INSERT INTO "usage" VALUES('EPSG','6302','projected_crs','EPSG','21455','EPSG','1589','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21456','Beijing 1954 / Gauss-Kruger CM 93E',NULL,'EPSG','4530','EPSG','4214','EPSG','16316',NULL,0); INSERT INTO "usage" VALUES('EPSG','6303','projected_crs','EPSG','21456','EPSG','1590','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21457','Beijing 1954 / Gauss-Kruger CM 99E',NULL,'EPSG','4530','EPSG','4214','EPSG','16317',NULL,0); INSERT INTO "usage" VALUES('EPSG','6304','projected_crs','EPSG','21457','EPSG','1591','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21458','Beijing 1954 / Gauss-Kruger CM 105E',NULL,'EPSG','4530','EPSG','4214','EPSG','16318',NULL,0); INSERT INTO "usage" VALUES('EPSG','6305','projected_crs','EPSG','21458','EPSG','1592','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21459','Beijing 1954 / Gauss-Kruger CM 111E',NULL,'EPSG','4530','EPSG','4214','EPSG','16319',NULL,0); INSERT INTO "usage" VALUES('EPSG','6306','projected_crs','EPSG','21459','EPSG','1593','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21460','Beijing 1954 / Gauss-Kruger CM 117E',NULL,'EPSG','4530','EPSG','4214','EPSG','16320',NULL,0); INSERT INTO "usage" VALUES('EPSG','6307','projected_crs','EPSG','21460','EPSG','1594','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21461','Beijing 1954 / Gauss-Kruger CM 123E',NULL,'EPSG','4530','EPSG','4214','EPSG','16321',NULL,0); INSERT INTO "usage" VALUES('EPSG','6308','projected_crs','EPSG','21461','EPSG','1595','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21462','Beijing 1954 / Gauss-Kruger CM 129E',NULL,'EPSG','4530','EPSG','4214','EPSG','16322',NULL,0); INSERT INTO "usage" VALUES('EPSG','6309','projected_crs','EPSG','21462','EPSG','1596','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21463','Beijing 1954 / Gauss-Kruger CM 135E',NULL,'EPSG','4530','EPSG','4214','EPSG','16323',NULL,0); INSERT INTO "usage" VALUES('EPSG','6310','projected_crs','EPSG','21463','EPSG','1597','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','21473','Beijing 1954 / Gauss-Kruger 13N',NULL,'EPSG','4530','EPSG','4214','EPSG','16313',NULL,1); INSERT INTO "usage" VALUES('EPSG','6311','projected_crs','EPSG','21473','EPSG','1587','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21474','Beijing 1954 / Gauss-Kruger 14N',NULL,'EPSG','4530','EPSG','4214','EPSG','16314',NULL,1); INSERT INTO "usage" VALUES('EPSG','6312','projected_crs','EPSG','21474','EPSG','1588','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21475','Beijing 1954 / Gauss-Kruger 15N',NULL,'EPSG','4530','EPSG','4214','EPSG','16315',NULL,1); INSERT INTO "usage" VALUES('EPSG','6313','projected_crs','EPSG','21475','EPSG','1589','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21476','Beijing 1954 / Gauss-Kruger 16N',NULL,'EPSG','4530','EPSG','4214','EPSG','16316',NULL,1); INSERT INTO "usage" VALUES('EPSG','6314','projected_crs','EPSG','21476','EPSG','1590','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21477','Beijing 1954 / Gauss-Kruger 17N',NULL,'EPSG','4530','EPSG','4214','EPSG','16317',NULL,1); INSERT INTO "usage" VALUES('EPSG','6315','projected_crs','EPSG','21477','EPSG','1591','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21478','Beijing 1954 / Gauss-Kruger 18N',NULL,'EPSG','4530','EPSG','4214','EPSG','16318',NULL,1); INSERT INTO "usage" VALUES('EPSG','6316','projected_crs','EPSG','21478','EPSG','1592','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21479','Beijing 1954 / Gauss-Kruger 19N',NULL,'EPSG','4530','EPSG','4214','EPSG','16319',NULL,1); INSERT INTO "usage" VALUES('EPSG','6317','projected_crs','EPSG','21479','EPSG','1593','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21480','Beijing 1954 / Gauss-Kruger 20N',NULL,'EPSG','4530','EPSG','4214','EPSG','16320',NULL,1); INSERT INTO "usage" VALUES('EPSG','6318','projected_crs','EPSG','21480','EPSG','1594','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21481','Beijing 1954 / Gauss-Kruger 21N',NULL,'EPSG','4530','EPSG','4214','EPSG','16321',NULL,1); INSERT INTO "usage" VALUES('EPSG','6319','projected_crs','EPSG','21481','EPSG','1595','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21482','Beijing 1954 / Gauss-Kruger 22N',NULL,'EPSG','4530','EPSG','4214','EPSG','16322',NULL,1); INSERT INTO "usage" VALUES('EPSG','6320','projected_crs','EPSG','21482','EPSG','1596','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21483','Beijing 1954 / Gauss-Kruger 23N',NULL,'EPSG','4530','EPSG','4214','EPSG','16323',NULL,1); INSERT INTO "usage" VALUES('EPSG','6321','projected_crs','EPSG','21483','EPSG','1597','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','21500','BD50 (Brussels) / Belge Lambert 50',NULL,'EPSG','4499','EPSG','4809','EPSG','19901',NULL,0); INSERT INTO "usage" VALUES('EPSG','6322','projected_crs','EPSG','21500','EPSG','1347','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21780','CH1903 (Bern) / LV03C',NULL,'EPSG','4498','EPSG','4801','EPSG','19923',NULL,0); INSERT INTO "usage" VALUES('EPSG','6323','projected_crs','EPSG','21780','EPSG','1286','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21781','CH1903 / LV03',NULL,'EPSG','4498','EPSG','4149','EPSG','19922',NULL,0); INSERT INTO "usage" VALUES('EPSG','6324','projected_crs','EPSG','21781','EPSG','1286','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','21782','CH1903 / LV03C-G',NULL,'EPSG','4498','EPSG','4149','EPSG','19841',NULL,0); INSERT INTO "usage" VALUES('EPSG','6325','projected_crs','EPSG','21782','EPSG','1144','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','21817','Bogota 1975 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4218','EPSG','16017',NULL,1); INSERT INTO "usage" VALUES('EPSG','6326','projected_crs','EPSG','21817','EPSG','1602','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21818','Bogota 1975 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4218','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','6327','projected_crs','EPSG','21818','EPSG','1603','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21891','Bogota 1975 / Colombia West zone',NULL,'EPSG','4499','EPSG','4218','EPSG','18051',NULL,1); INSERT INTO "usage" VALUES('EPSG','6328','projected_crs','EPSG','21891','EPSG','1598','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21892','Bogota 1975 / Colombia Bogota zone',NULL,'EPSG','4499','EPSG','4218','EPSG','18052',NULL,1); INSERT INTO "usage" VALUES('EPSG','6329','projected_crs','EPSG','21892','EPSG','1599','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21893','Bogota 1975 / Colombia East Central zone',NULL,'EPSG','4499','EPSG','4218','EPSG','18053',NULL,1); INSERT INTO "usage" VALUES('EPSG','6330','projected_crs','EPSG','21893','EPSG','1600','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21894','Bogota 1975 / Colombia East',NULL,'EPSG','4499','EPSG','4218','EPSG','18054',NULL,1); INSERT INTO "usage" VALUES('EPSG','6331','projected_crs','EPSG','21894','EPSG','1601','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21896','Bogota 1975 / Colombia West zone',NULL,'EPSG','4530','EPSG','4218','EPSG','18051',NULL,0); INSERT INTO "usage" VALUES('EPSG','6332','projected_crs','EPSG','21896','EPSG','1598','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21897','Bogota 1975 / Colombia Bogota zone',NULL,'EPSG','4530','EPSG','4218','EPSG','18052',NULL,0); INSERT INTO "usage" VALUES('EPSG','6333','projected_crs','EPSG','21897','EPSG','1599','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21898','Bogota 1975 / Colombia East Central zone',NULL,'EPSG','4530','EPSG','4218','EPSG','18053',NULL,0); INSERT INTO "usage" VALUES('EPSG','6334','projected_crs','EPSG','21898','EPSG','1600','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','21899','Bogota 1975 / Colombia East zone',NULL,'EPSG','4530','EPSG','4218','EPSG','18054',NULL,0); INSERT INTO "usage" VALUES('EPSG','6335','projected_crs','EPSG','21899','EPSG','1601','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22032','Camacupa 1948 / UTM zone 32S',NULL,'EPSG','4400','EPSG','4220','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6336','projected_crs','EPSG','22032','EPSG','1606','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22033','Camacupa 1948 / UTM zone 33S',NULL,'EPSG','4400','EPSG','4220','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','6337','projected_crs','EPSG','22033','EPSG','1607','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22091','Camacupa 1948 / TM 11.30 SE',NULL,'EPSG','4400','EPSG','4220','EPSG','16611',NULL,0); INSERT INTO "usage" VALUES('EPSG','6338','projected_crs','EPSG','22091','EPSG','1605','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','22092','Camacupa 1948 / TM 12 SE',NULL,'EPSG','4400','EPSG','4220','EPSG','16612',NULL,0); INSERT INTO "usage" VALUES('EPSG','6339','projected_crs','EPSG','22092','EPSG','1604','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','22171','POSGAR 98 / Argentina 1',NULL,'EPSG','4530','EPSG','4190','EPSG','18031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6340','projected_crs','EPSG','22171','EPSG','1608','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22172','POSGAR 98 / Argentina 2',NULL,'EPSG','4530','EPSG','4190','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6341','projected_crs','EPSG','22172','EPSG','1609','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22173','POSGAR 98 / Argentina 3',NULL,'EPSG','4530','EPSG','4190','EPSG','18033',NULL,0); INSERT INTO "usage" VALUES('EPSG','6342','projected_crs','EPSG','22173','EPSG','1610','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22174','POSGAR 98 / Argentina 4',NULL,'EPSG','4530','EPSG','4190','EPSG','18034',NULL,0); INSERT INTO "usage" VALUES('EPSG','6343','projected_crs','EPSG','22174','EPSG','1611','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22175','POSGAR 98 / Argentina 5',NULL,'EPSG','4530','EPSG','4190','EPSG','18035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6344','projected_crs','EPSG','22175','EPSG','1612','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22176','POSGAR 98 / Argentina 6',NULL,'EPSG','4530','EPSG','4190','EPSG','18036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6345','projected_crs','EPSG','22176','EPSG','1613','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22177','POSGAR 98 / Argentina 7',NULL,'EPSG','4530','EPSG','4190','EPSG','18037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6346','projected_crs','EPSG','22177','EPSG','1614','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22181','POSGAR 94 / Argentina 1',NULL,'EPSG','4530','EPSG','4694','EPSG','18031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6347','projected_crs','EPSG','22181','EPSG','1608','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22182','POSGAR 94 / Argentina 2',NULL,'EPSG','4530','EPSG','4694','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6348','projected_crs','EPSG','22182','EPSG','1609','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22183','POSGAR 94 / Argentina 3',NULL,'EPSG','4530','EPSG','4694','EPSG','18033',NULL,0); INSERT INTO "usage" VALUES('EPSG','6349','projected_crs','EPSG','22183','EPSG','1610','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22184','POSGAR 94 / Argentina 4',NULL,'EPSG','4530','EPSG','4694','EPSG','18034',NULL,0); INSERT INTO "usage" VALUES('EPSG','6350','projected_crs','EPSG','22184','EPSG','1611','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22185','POSGAR 94 / Argentina 5',NULL,'EPSG','4530','EPSG','4694','EPSG','18035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6351','projected_crs','EPSG','22185','EPSG','1612','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22186','POSGAR 94 / Argentina 6',NULL,'EPSG','4530','EPSG','4694','EPSG','18036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6352','projected_crs','EPSG','22186','EPSG','1613','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22187','POSGAR 94 / Argentina 7',NULL,'EPSG','4530','EPSG','4694','EPSG','18037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6353','projected_crs','EPSG','22187','EPSG','1614','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22191','Campo Inchauspe / Argentina 1',NULL,'EPSG','4530','EPSG','4221','EPSG','18031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6354','projected_crs','EPSG','22191','EPSG','1608','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22192','Campo Inchauspe / Argentina 2',NULL,'EPSG','4530','EPSG','4221','EPSG','18032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6355','projected_crs','EPSG','22192','EPSG','4577','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22193','Campo Inchauspe / Argentina 3',NULL,'EPSG','4530','EPSG','4221','EPSG','18033',NULL,0); INSERT INTO "usage" VALUES('EPSG','6356','projected_crs','EPSG','22193','EPSG','4578','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22194','Campo Inchauspe / Argentina 4',NULL,'EPSG','4530','EPSG','4221','EPSG','18034',NULL,0); INSERT INTO "usage" VALUES('EPSG','6357','projected_crs','EPSG','22194','EPSG','4579','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22195','Campo Inchauspe / Argentina 5',NULL,'EPSG','4530','EPSG','4221','EPSG','18035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6358','projected_crs','EPSG','22195','EPSG','1612','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22196','Campo Inchauspe / Argentina 6',NULL,'EPSG','4530','EPSG','4221','EPSG','18036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6359','projected_crs','EPSG','22196','EPSG','1613','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22197','Campo Inchauspe / Argentina 7',NULL,'EPSG','4530','EPSG','4221','EPSG','18037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6360','projected_crs','EPSG','22197','EPSG','1614','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22207','NAD83(CSRS)v2 / UTM zone 7N',NULL,'EPSG','4400','EPSG','8237','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','18003','projected_crs','EPSG','22207','EPSG','3409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22208','NAD83(CSRS)v2 / UTM zone 8N',NULL,'EPSG','4400','EPSG','8237','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','18004','projected_crs','EPSG','22208','EPSG','3410','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22209','NAD83(CSRS)v2 / UTM zone 9N',NULL,'EPSG','4400','EPSG','8237','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','18005','projected_crs','EPSG','22209','EPSG','3411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22210','NAD83(CSRS)v2 / UTM zone 10N',NULL,'EPSG','4400','EPSG','8237','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','18006','projected_crs','EPSG','22210','EPSG','3412','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22211','NAD83(CSRS)v2 / UTM zone 11N',NULL,'EPSG','4400','EPSG','8237','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','18007','projected_crs','EPSG','22211','EPSG','3528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22212','NAD83(CSRS)v2 / UTM zone 12N',NULL,'EPSG','4400','EPSG','8237','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','18008','projected_crs','EPSG','22212','EPSG','3527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22213','NAD83(CSRS)v2 / UTM zone 13N',NULL,'EPSG','4400','EPSG','8237','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','17996','projected_crs','EPSG','22213','EPSG','3526','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','17997','projected_crs','EPSG','22213','EPSG','2375','EPSG','1220'); INSERT INTO "projected_crs" VALUES('EPSG','22214','NAD83(CSRS)v2 / UTM zone 14N',NULL,'EPSG','4400','EPSG','8237','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','17998','projected_crs','EPSG','22214','EPSG','3413','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22215','NAD83(CSRS)v2 / UTM zone 15N',NULL,'EPSG','4400','EPSG','8237','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','17999','projected_crs','EPSG','22215','EPSG','3414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22216','NAD83(CSRS)v2 / UTM zone 16N',NULL,'EPSG','4400','EPSG','8237','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','18000','projected_crs','EPSG','22216','EPSG','3415','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22217','NAD83(CSRS)v2 / UTM zone 17N',NULL,'EPSG','4400','EPSG','8237','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','18001','projected_crs','EPSG','22217','EPSG','3416','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22218','NAD83(CSRS)v2 / UTM zone 18N',NULL,'EPSG','4400','EPSG','8237','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','18002','projected_crs','EPSG','22218','EPSG','3417','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22219','NAD83(CSRS)v2 / UTM zone 19N',NULL,'EPSG','4400','EPSG','8237','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','17992','projected_crs','EPSG','22219','EPSG','3524','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22220','NAD83(CSRS)v2 / UTM zone 20N',NULL,'EPSG','4400','EPSG','8237','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','17993','projected_crs','EPSG','22220','EPSG','3525','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22221','NAD83(CSRS)v2 / UTM zone 21N',NULL,'EPSG','4400','EPSG','8237','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','17994','projected_crs','EPSG','22221','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22222','NAD83(CSRS)v2 / UTM zone 22N',NULL,'EPSG','4400','EPSG','8237','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','17995','projected_crs','EPSG','22222','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22229','RGSH2020 / UTM zone 29N',NULL,'EPSG','4400','EPSG','10299','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','19537','projected_crs','EPSG','22229','EPSG','1735','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','22230','RGSH2020 / UTM zone 30N',NULL,'EPSG','4400','EPSG','10299','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','19538','projected_crs','EPSG','22230','EPSG','3952','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','22231','RGSH2020 / UTM zone 31N',NULL,'EPSG','4400','EPSG','10299','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','19539','projected_crs','EPSG','22231','EPSG','3953','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','22232','RGSH2020 / UTM zone 32N',NULL,'EPSG','4400','EPSG','10299','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','19541','projected_crs','EPSG','22232','EPSG','3954','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','22234','Cape / UTM zone 34S',NULL,'EPSG','4400','EPSG','4222','EPSG','16134',NULL,0); INSERT INTO "usage" VALUES('EPSG','6361','projected_crs','EPSG','22234','EPSG','1615','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22235','Cape / UTM zone 35S',NULL,'EPSG','4400','EPSG','4222','EPSG','16135',NULL,0); INSERT INTO "usage" VALUES('EPSG','6362','projected_crs','EPSG','22235','EPSG','1617','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22236','Cape / UTM zone 36S',NULL,'EPSG','4400','EPSG','4222','EPSG','16136',NULL,1); INSERT INTO "usage" VALUES('EPSG','6363','projected_crs','EPSG','22236','EPSG','1616','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22239','NAD83(CSRS)v2 / PEI Stereographic',NULL,'EPSG','4496','EPSG','8237','EPSG','19960',NULL,0); INSERT INTO "usage" VALUES('EPSG','18015','projected_crs','EPSG','22239','EPSG','1533','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22240','NAD83(CSRS)v2 / NB Stereographic',NULL,'EPSG','4500','EPSG','8237','EPSG','19946',NULL,0); INSERT INTO "usage" VALUES('EPSG','18016','projected_crs','EPSG','22240','EPSG','1447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22243','NAD83(CSRS)v2 / SCoPQ zone 3',NULL,'EPSG','4499','EPSG','8237','EPSG','17703',NULL,0); INSERT INTO "usage" VALUES('EPSG','18017','projected_crs','EPSG','22243','EPSG','1446','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22244','NAD83(CSRS)v2 / SCoPQ zone 4',NULL,'EPSG','4499','EPSG','8237','EPSG','17704',NULL,0); INSERT INTO "usage" VALUES('EPSG','18018','projected_crs','EPSG','22244','EPSG','1422','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22245','NAD83(CSRS)v2 / SCoPQ zone 5',NULL,'EPSG','4499','EPSG','8237','EPSG','17705',NULL,0); INSERT INTO "usage" VALUES('EPSG','18019','projected_crs','EPSG','22245','EPSG','1423','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22246','NAD83(CSRS)v2 / SCoPQ zone 6',NULL,'EPSG','4499','EPSG','8237','EPSG','17706',NULL,0); INSERT INTO "usage" VALUES('EPSG','18020','projected_crs','EPSG','22246','EPSG','1424','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22247','NAD83(CSRS)v2 / SCoPQ zone 7',NULL,'EPSG','4499','EPSG','8237','EPSG','17707',NULL,0); INSERT INTO "usage" VALUES('EPSG','18021','projected_crs','EPSG','22247','EPSG','1425','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22248','NAD83(CSRS)v2 / SCoPQ zone 8',NULL,'EPSG','4499','EPSG','8237','EPSG','17708',NULL,0); INSERT INTO "usage" VALUES('EPSG','18074','projected_crs','EPSG','22248','EPSG','1426','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22249','NAD83(CSRS)v2 / SCoPQ zone 9',NULL,'EPSG','4499','EPSG','8237','EPSG','17709',NULL,0); INSERT INTO "usage" VALUES('EPSG','18076','projected_crs','EPSG','22249','EPSG','1427','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22250','NAD83(CSRS)v2 / SCoPQ zone 10',NULL,'EPSG','4499','EPSG','8237','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','18077','projected_crs','EPSG','22250','EPSG','1428','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22262','NAD83(CSRS)v2 / Alberta 3TM ref merid 111 W',NULL,'EPSG','4400','EPSG','8237','EPSG','17722',NULL,0); INSERT INTO "usage" VALUES('EPSG','18009','projected_crs','EPSG','22262','EPSG','3543','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22263','NAD83(CSRS)v2 / Alberta 3TM ref merid 114 W',NULL,'EPSG','4400','EPSG','8237','EPSG','17723',NULL,0); INSERT INTO "usage" VALUES('EPSG','18010','projected_crs','EPSG','22263','EPSG','3542','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22264','NAD83(CSRS)v2 / Alberta 3TM ref merid 117 W',NULL,'EPSG','4400','EPSG','8237','EPSG','17724',NULL,0); INSERT INTO "usage" VALUES('EPSG','18011','projected_crs','EPSG','22264','EPSG','3541','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22265','NAD83(CSRS)v2 / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','8237','EPSG','17726',NULL,0); INSERT INTO "usage" VALUES('EPSG','18012','projected_crs','EPSG','22265','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22275','Cape / Lo15',NULL,'EPSG','6503','EPSG','4222','EPSG','17515',NULL,0); INSERT INTO "usage" VALUES('EPSG','6364','projected_crs','EPSG','22275','EPSG','1454','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22277','Cape / Lo17',NULL,'EPSG','6503','EPSG','4222','EPSG','17517',NULL,0); INSERT INTO "usage" VALUES('EPSG','6365','projected_crs','EPSG','22277','EPSG','1455','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22279','Cape / Lo19',NULL,'EPSG','6503','EPSG','4222','EPSG','17519',NULL,0); INSERT INTO "usage" VALUES('EPSG','6366','projected_crs','EPSG','22279','EPSG','1456','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22281','Cape / Lo21',NULL,'EPSG','6503','EPSG','4222','EPSG','17521',NULL,0); INSERT INTO "usage" VALUES('EPSG','6367','projected_crs','EPSG','22281','EPSG','1457','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22283','Cape / Lo23',NULL,'EPSG','6503','EPSG','4222','EPSG','17523',NULL,0); INSERT INTO "usage" VALUES('EPSG','6368','projected_crs','EPSG','22283','EPSG','1458','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22285','Cape / Lo25',NULL,'EPSG','6503','EPSG','4222','EPSG','17525',NULL,0); INSERT INTO "usage" VALUES('EPSG','6369','projected_crs','EPSG','22285','EPSG','1459','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22287','Cape / Lo27',NULL,'EPSG','6503','EPSG','4222','EPSG','17527',NULL,0); INSERT INTO "usage" VALUES('EPSG','6370','projected_crs','EPSG','22287','EPSG','1460','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22289','Cape / Lo29',NULL,'EPSG','6503','EPSG','4222','EPSG','17529',NULL,0); INSERT INTO "usage" VALUES('EPSG','6371','projected_crs','EPSG','22289','EPSG','1461','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22291','Cape / Lo31',NULL,'EPSG','6503','EPSG','4222','EPSG','17531',NULL,0); INSERT INTO "usage" VALUES('EPSG','6372','projected_crs','EPSG','22291','EPSG','1462','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22293','Cape / Lo33',NULL,'EPSG','6503','EPSG','4222','EPSG','17533',NULL,0); INSERT INTO "usage" VALUES('EPSG','6373','projected_crs','EPSG','22293','EPSG','1463','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','22300','Carthage (Paris) / Tunisia Mining Grid',NULL,'EPSG','4406','EPSG','4816','EPSG','19937',NULL,0); INSERT INTO "usage" VALUES('EPSG','6374','projected_crs','EPSG','22300','EPSG','1618','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','22307','NAD83(CSRS)v3 / UTM zone 7N',NULL,'EPSG','4400','EPSG','8240','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','17752','projected_crs','EPSG','22307','EPSG','3409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22308','NAD83(CSRS)v3 / UTM zone 8N',NULL,'EPSG','4400','EPSG','8240','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','17834','projected_crs','EPSG','22308','EPSG','3410','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22309','NAD83(CSRS)v3 / UTM zone 9N',NULL,'EPSG','4400','EPSG','8240','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','17771','projected_crs','EPSG','22309','EPSG','3411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22310','NAD83(CSRS)v3 / UTM zone 10N',NULL,'EPSG','4400','EPSG','8240','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','17839','projected_crs','EPSG','22310','EPSG','3412','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22311','NAD83(CSRS)v3 / UTM zone 11N',NULL,'EPSG','4400','EPSG','8240','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','17777','projected_crs','EPSG','22311','EPSG','3528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22312','NAD83(CSRS)v3 / UTM zone 12N',NULL,'EPSG','4400','EPSG','8240','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','17783','projected_crs','EPSG','22312','EPSG','3527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22313','NAD83(CSRS)v3 / UTM zone 13N',NULL,'EPSG','4400','EPSG','8240','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','17789','projected_crs','EPSG','22313','EPSG','3526','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22314','NAD83(CSRS)v3 / UTM zone 14N',NULL,'EPSG','4400','EPSG','8240','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','17795','projected_crs','EPSG','22314','EPSG','3413','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22315','NAD83(CSRS)v3 / UTM zone 15N',NULL,'EPSG','4400','EPSG','8240','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','17801','projected_crs','EPSG','22315','EPSG','3414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22316','NAD83(CSRS)v3 / UTM zone 16N',NULL,'EPSG','4400','EPSG','8240','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','17829','projected_crs','EPSG','22316','EPSG','3415','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22317','NAD83(CSRS)v3 / UTM zone 17N',NULL,'EPSG','4400','EPSG','8240','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','17816','projected_crs','EPSG','22317','EPSG','3416','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22318','NAD83(CSRS)v3 / UTM zone 18N',NULL,'EPSG','4400','EPSG','8240','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','17822','projected_crs','EPSG','22318','EPSG','3417','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22319','NAD83(CSRS)v3 / UTM zone 19N',NULL,'EPSG','4400','EPSG','8240','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','17844','projected_crs','EPSG','22319','EPSG','3524','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22320','NAD83(CSRS)v3 / UTM zone 20N',NULL,'EPSG','4400','EPSG','8240','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','17850','projected_crs','EPSG','22320','EPSG','3525','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22321','NAD83(CSRS)v3 / UTM zone 21N',NULL,'EPSG','4400','EPSG','8240','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','17857','projected_crs','EPSG','22321','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22322','NAD83(CSRS)v3 / UTM zone 22N',NULL,'EPSG','4400','EPSG','8240','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','17863','projected_crs','EPSG','22322','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22332','Carthage / UTM zone 32N',NULL,'EPSG','4400','EPSG','4223','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6375','projected_crs','EPSG','22332','EPSG','1489','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22337','NAD83(CSRS)v3 / MTM NS 1997 zone 5',NULL,'EPSG','4400','EPSG','8240','EPSG','9982',NULL,0); INSERT INTO "usage" VALUES('EPSG','18013','projected_crs','EPSG','22337','EPSG','1535','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22338','NAD83(CSRS)v3 / MTM NS 1997 zone 4',NULL,'EPSG','4400','EPSG','8240','EPSG','9981',NULL,0); INSERT INTO "usage" VALUES('EPSG','18014','projected_crs','EPSG','22338','EPSG','1534','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22348','NAD83(CSRS)v3 / MTM zone 8',NULL,'EPSG','4496','EPSG','8240','EPSG','17708',NULL,0); INSERT INTO "usage" VALUES('EPSG','18071','projected_crs','EPSG','22348','EPSG','1429','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22349','NAD83(CSRS)v3 / MTM zone 9',NULL,'EPSG','4496','EPSG','8240','EPSG','17709',NULL,0); INSERT INTO "usage" VALUES('EPSG','18072','projected_crs','EPSG','22349','EPSG','1430','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22350','NAD83(CSRS)v3 / MTM zone 10',NULL,'EPSG','4496','EPSG','8240','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','18073','projected_crs','EPSG','22350','EPSG','1431','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22351','NAD83(CSRS)v3 / MTM zone 11',NULL,'EPSG','4400','EPSG','8240','EPSG','17711',NULL,0); INSERT INTO "usage" VALUES('EPSG','17639','projected_crs','EPSG','22351','EPSG','1432','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22352','NAD83(CSRS)v3 / MTM zone 12',NULL,'EPSG','4400','EPSG','8240','EPSG','17712',NULL,0); INSERT INTO "usage" VALUES('EPSG','17640','projected_crs','EPSG','22352','EPSG','1433','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22353','NAD83(CSRS)v3 / MTM zone 13',NULL,'EPSG','4400','EPSG','8240','EPSG','17713',NULL,0); INSERT INTO "usage" VALUES('EPSG','17641','projected_crs','EPSG','22353','EPSG','1434','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22354','NAD83(CSRS)v3 / MTM zone 14',NULL,'EPSG','4400','EPSG','8240','EPSG','17714',NULL,0); INSERT INTO "usage" VALUES('EPSG','17642','projected_crs','EPSG','22354','EPSG','1435','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22355','NAD83(CSRS)v3 / MTM zone 15',NULL,'EPSG','4400','EPSG','8240','EPSG','17715',NULL,0); INSERT INTO "usage" VALUES('EPSG','17643','projected_crs','EPSG','22355','EPSG','1436','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22356','NAD83(CSRS)v3 / MTM zone 16',NULL,'EPSG','4400','EPSG','8240','EPSG','17716',NULL,0); INSERT INTO "usage" VALUES('EPSG','17644','projected_crs','EPSG','22356','EPSG','1437','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22357','NAD83(CSRS)v3 / MTM zone 17',NULL,'EPSG','4400','EPSG','8240','EPSG','17717',NULL,0); INSERT INTO "usage" VALUES('EPSG','17645','projected_crs','EPSG','22357','EPSG','1438','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22391','Carthage / Nord Tunisie',NULL,'EPSG','4499','EPSG','4223','EPSG','18181',NULL,0); INSERT INTO "usage" VALUES('EPSG','6376','projected_crs','EPSG','22391','EPSG','1619','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22392','Carthage / Sud Tunisie',NULL,'EPSG','4499','EPSG','4223','EPSG','18182',NULL,0); INSERT INTO "usage" VALUES('EPSG','6377','projected_crs','EPSG','22392','EPSG','1620','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22407','NAD83(CSRS)v4 / UTM zone 7N',NULL,'EPSG','4400','EPSG','8246','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','17761','projected_crs','EPSG','22407','EPSG','3409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22408','NAD83(CSRS)v4 / UTM zone 8N',NULL,'EPSG','4400','EPSG','8246','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','17835','projected_crs','EPSG','22408','EPSG','3410','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22409','NAD83(CSRS)v4 / UTM zone 9N',NULL,'EPSG','4400','EPSG','8246','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','17766','projected_crs','EPSG','22409','EPSG','3411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22410','NAD83(CSRS)v4 / UTM zone 10N',NULL,'EPSG','4400','EPSG','8246','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','17840','projected_crs','EPSG','22410','EPSG','3412','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22411','NAD83(CSRS)v4 / UTM zone 11N',NULL,'EPSG','4400','EPSG','8246','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','17778','projected_crs','EPSG','22411','EPSG','3528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22412','NAD83(CSRS)v4 / UTM zone 12N',NULL,'EPSG','4400','EPSG','8246','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','17784','projected_crs','EPSG','22412','EPSG','3527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22413','NAD83(CSRS)v4 / UTM zone 13N',NULL,'EPSG','4400','EPSG','8246','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','17790','projected_crs','EPSG','22413','EPSG','3526','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22414','NAD83(CSRS)v4 / UTM zone 14N',NULL,'EPSG','4400','EPSG','8246','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','17796','projected_crs','EPSG','22414','EPSG','3413','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22415','NAD83(CSRS)v4 / UTM zone 15N',NULL,'EPSG','4400','EPSG','8246','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','17827','projected_crs','EPSG','22415','EPSG','3414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22416','NAD83(CSRS)v4 / UTM zone 16N',NULL,'EPSG','4400','EPSG','8246','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','17830','projected_crs','EPSG','22416','EPSG','3415','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22417','NAD83(CSRS)v4 / UTM zone 17N',NULL,'EPSG','4400','EPSG','8246','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','17817','projected_crs','EPSG','22417','EPSG','3416','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22418','NAD83(CSRS)v4 / UTM zone 18N',NULL,'EPSG','4400','EPSG','8246','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','17823','projected_crs','EPSG','22418','EPSG','3417','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22419','NAD83(CSRS)v4 / UTM zone 19N',NULL,'EPSG','4400','EPSG','8246','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','17845','projected_crs','EPSG','22419','EPSG','3524','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22420','NAD83(CSRS)v4 / UTM zone 20N',NULL,'EPSG','4400','EPSG','8246','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','17851','projected_crs','EPSG','22420','EPSG','3525','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22421','NAD83(CSRS)v4 / UTM zone 21N',NULL,'EPSG','4400','EPSG','8246','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','17858','projected_crs','EPSG','22421','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22422','NAD83(CSRS)v4 / UTM zone 22N',NULL,'EPSG','4400','EPSG','8246','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','17864','projected_crs','EPSG','22422','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22462','NAD83(CSRS)v4 / Alberta 3TM ref merid 111 W',NULL,'EPSG','4400','EPSG','8246','EPSG','17722',NULL,0); INSERT INTO "usage" VALUES('EPSG','17657','projected_crs','EPSG','22462','EPSG','3543','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22463','NAD83(CSRS)v4 / Alberta 3TM ref merid 114 W',NULL,'EPSG','4400','EPSG','8246','EPSG','17723',NULL,0); INSERT INTO "usage" VALUES('EPSG','17658','projected_crs','EPSG','22463','EPSG','3542','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22464','NAD83(CSRS)v4 / Alberta 3TM ref merid 117 W',NULL,'EPSG','4400','EPSG','8246','EPSG','17724',NULL,0); INSERT INTO "usage" VALUES('EPSG','17659','projected_crs','EPSG','22464','EPSG','3541','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22465','NAD83(CSRS)v4 / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','8246','EPSG','17726',NULL,0); INSERT INTO "usage" VALUES('EPSG','17660','projected_crs','EPSG','22465','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22521','Corrego Alegre 1970-72 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4225','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','6378','projected_crs','EPSG','22521','EPSG','3355','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22522','Corrego Alegre 1970-72 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4225','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','6379','projected_crs','EPSG','22522','EPSG','3176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22523','Corrego Alegre 1970-72 / UTM zone 23S',NULL,'EPSG','4400','EPSG','4225','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','6380','projected_crs','EPSG','22523','EPSG','3177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22524','Corrego Alegre 1970-72 / UTM zone 24S',NULL,'EPSG','4400','EPSG','4225','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','6381','projected_crs','EPSG','22524','EPSG','1818','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22525','Corrego Alegre 1970-72 / UTM zone 25S',NULL,'EPSG','4400','EPSG','4225','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','6382','projected_crs','EPSG','22525','EPSG','3178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22607','NAD83(CSRS)v6 / UTM zone 7N',NULL,'EPSG','4400','EPSG','8252','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','17755','projected_crs','EPSG','22607','EPSG','3409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22608','NAD83(CSRS)v6 / UTM zone 8N',NULL,'EPSG','4400','EPSG','8252','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','17836','projected_crs','EPSG','22608','EPSG','3410','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22609','NAD83(CSRS)v6 / UTM zone 9N',NULL,'EPSG','4400','EPSG','8252','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','17768','projected_crs','EPSG','22609','EPSG','3411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22610','NAD83(CSRS)v6 / UTM zone 10N',NULL,'EPSG','4400','EPSG','8252','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','17841','projected_crs','EPSG','22610','EPSG','3412','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22611','NAD83(CSRS)v6 / UTM zone 11N',NULL,'EPSG','4400','EPSG','8252','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','17779','projected_crs','EPSG','22611','EPSG','3528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22612','NAD83(CSRS)v6 / UTM zone 12N',NULL,'EPSG','4400','EPSG','8252','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','17786','projected_crs','EPSG','22612','EPSG','3527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22613','NAD83(CSRS)v6 / UTM zone 13N',NULL,'EPSG','4400','EPSG','8252','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','17791','projected_crs','EPSG','22613','EPSG','3526','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22614','NAD83(CSRS)v6 / UTM zone 14N',NULL,'EPSG','4400','EPSG','8252','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','17797','projected_crs','EPSG','22614','EPSG','3413','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22615','NAD83(CSRS)v6 / UTM zone 15N',NULL,'EPSG','4400','EPSG','8252','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','17803','projected_crs','EPSG','22615','EPSG','3414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22616','NAD83(CSRS)v6 / UTM zone 16N',NULL,'EPSG','4400','EPSG','8252','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','17831','projected_crs','EPSG','22616','EPSG','3415','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22617','NAD83(CSRS)v6 / UTM zone 17N',NULL,'EPSG','4400','EPSG','8252','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','17818','projected_crs','EPSG','22617','EPSG','3416','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22618','NAD83(CSRS)v6 / UTM zone 18N',NULL,'EPSG','4400','EPSG','8252','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','17824','projected_crs','EPSG','22618','EPSG','3417','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22619','NAD83(CSRS)v6 / UTM zone 19N',NULL,'EPSG','4400','EPSG','8252','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','17846','projected_crs','EPSG','22619','EPSG','3524','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22620','NAD83(CSRS)v6 / UTM zone 20N',NULL,'EPSG','4400','EPSG','8252','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','17852','projected_crs','EPSG','22620','EPSG','3525','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22621','NAD83(CSRS)v6 / UTM zone 21N',NULL,'EPSG','4400','EPSG','8252','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','17859','projected_crs','EPSG','22621','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22622','NAD83(CSRS)v6 / UTM zone 22N',NULL,'EPSG','4400','EPSG','8252','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','17865','projected_crs','EPSG','22622','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22639','NAD83(CSRS)v6 / PEI Stereographic',NULL,'EPSG','4496','EPSG','8252','EPSG','19960',NULL,0); INSERT INTO "usage" VALUES('EPSG','18070','projected_crs','EPSG','22639','EPSG','1533','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22641','NAD83(CSRS)v6 / MTM zone 1',NULL,'EPSG','4496','EPSG','8252','EPSG','17701',NULL,0); INSERT INTO "usage" VALUES('EPSG','17665','projected_crs','EPSG','22641','EPSG','2226','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22642','NAD83(CSRS)v6 / MTM zone 2',NULL,'EPSG','4496','EPSG','8252','EPSG','17702',NULL,0); INSERT INTO "usage" VALUES('EPSG','17666','projected_crs','EPSG','22642','EPSG','2227','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22643','NAD83(CSRS)v6 / MTM zone 3',NULL,'EPSG','4496','EPSG','8252','EPSG','17703',NULL,0); INSERT INTO "usage" VALUES('EPSG','17667','projected_crs','EPSG','22643','EPSG','2275','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22644','NAD83(CSRS)v6 / MTM zone 4',NULL,'EPSG','4496','EPSG','8252','EPSG','17704',NULL,0); INSERT INTO "usage" VALUES('EPSG','17668','projected_crs','EPSG','22644','EPSG','3875','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22645','NAD83(CSRS)v6 / MTM zone 5',NULL,'EPSG','4496','EPSG','8252','EPSG','17705',NULL,0); INSERT INTO "usage" VALUES('EPSG','17669','projected_crs','EPSG','22645','EPSG','3865','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22646','NAD83(CSRS)v6 / MTM zone 6',NULL,'EPSG','4496','EPSG','8252','EPSG','17706',NULL,0); INSERT INTO "usage" VALUES('EPSG','17670','projected_crs','EPSG','22646','EPSG','3880','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22648','NAD83(CSRS)v6 / MTM zone 8',NULL,'EPSG','4496','EPSG','8252','EPSG','17708',NULL,0); INSERT INTO "usage" VALUES('EPSG','17688','projected_crs','EPSG','22648','EPSG','1429','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22649','NAD83(CSRS)v6 / MTM zone 9',NULL,'EPSG','4496','EPSG','8252','EPSG','17709',NULL,0); INSERT INTO "usage" VALUES('EPSG','17689','projected_crs','EPSG','22649','EPSG','1430','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22650','NAD83(CSRS)v6 / MTM zone 10',NULL,'EPSG','4496','EPSG','8252','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','17690','projected_crs','EPSG','22650','EPSG','1431','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22651','NAD83(CSRS)v6 / MTM zone 11',NULL,'EPSG','4400','EPSG','8252','EPSG','17711',NULL,0); INSERT INTO "usage" VALUES('EPSG','17646','projected_crs','EPSG','22651','EPSG','1432','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22652','NAD83(CSRS)v6 / MTM zone 12',NULL,'EPSG','4400','EPSG','8252','EPSG','17712',NULL,0); INSERT INTO "usage" VALUES('EPSG','17647','projected_crs','EPSG','22652','EPSG','1433','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22653','NAD83(CSRS)v6 / MTM zone 13',NULL,'EPSG','4400','EPSG','8252','EPSG','17713',NULL,0); INSERT INTO "usage" VALUES('EPSG','17648','projected_crs','EPSG','22653','EPSG','1434','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22654','NAD83(CSRS)v6 / MTM zone 14',NULL,'EPSG','4400','EPSG','8252','EPSG','17714',NULL,0); INSERT INTO "usage" VALUES('EPSG','17649','projected_crs','EPSG','22654','EPSG','1435','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22655','NAD83(CSRS)v6 / MTM zone 15',NULL,'EPSG','4400','EPSG','8252','EPSG','17715',NULL,0); INSERT INTO "usage" VALUES('EPSG','17650','projected_crs','EPSG','22655','EPSG','1436','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22656','NAD83(CSRS)v6 / MTM zone 16',NULL,'EPSG','4400','EPSG','8252','EPSG','17716',NULL,0); INSERT INTO "usage" VALUES('EPSG','17651','projected_crs','EPSG','22656','EPSG','1437','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22657','NAD83(CSRS)v6 / MTM zone 17',NULL,'EPSG','4400','EPSG','8252','EPSG','17717',NULL,0); INSERT INTO "usage" VALUES('EPSG','17652','projected_crs','EPSG','22657','EPSG','1438','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22700','Deir ez Zor / Levant Zone',NULL,'EPSG','4499','EPSG','4227','EPSG','19940',NULL,0); INSERT INTO "usage" VALUES('EPSG','6383','projected_crs','EPSG','22700','EPSG','1623','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22707','NAD83(CSRS)v7 / UTM zone 7N',NULL,'EPSG','4400','EPSG','8255','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','17756','projected_crs','EPSG','22707','EPSG','3409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22708','NAD83(CSRS)v7 / UTM zone 8N',NULL,'EPSG','4400','EPSG','8255','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','17837','projected_crs','EPSG','22708','EPSG','3410','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22709','NAD83(CSRS)v7 / UTM zone 9N',NULL,'EPSG','4400','EPSG','8255','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','17769','projected_crs','EPSG','22709','EPSG','3411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22710','NAD83(CSRS)v7 / UTM zone 10N',NULL,'EPSG','4400','EPSG','8255','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','17842','projected_crs','EPSG','22710','EPSG','3412','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22711','NAD83(CSRS)v7 / UTM zone 11N',NULL,'EPSG','4400','EPSG','8255','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','17781','projected_crs','EPSG','22711','EPSG','3528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22712','NAD83(CSRS)v7 / UTM zone 12N',NULL,'EPSG','4400','EPSG','8255','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','17785','projected_crs','EPSG','22712','EPSG','3527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22713','NAD83(CSRS)v7 / UTM zone 13N',NULL,'EPSG','4400','EPSG','8255','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','17792','projected_crs','EPSG','22713','EPSG','3526','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22714','NAD83(CSRS)v7 / UTM zone 14N',NULL,'EPSG','4400','EPSG','8255','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','17798','projected_crs','EPSG','22714','EPSG','3413','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22715','NAD83(CSRS)v7 / UTM zone 15N',NULL,'EPSG','4400','EPSG','8255','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','17804','projected_crs','EPSG','22715','EPSG','3414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22716','NAD83(CSRS)v7 / UTM zone 16N',NULL,'EPSG','4400','EPSG','8255','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','17832','projected_crs','EPSG','22716','EPSG','3415','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22717','NAD83(CSRS)v7 / UTM zone 17N',NULL,'EPSG','4400','EPSG','8255','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','17819','projected_crs','EPSG','22717','EPSG','3416','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22718','NAD83(CSRS)v7 / UTM zone 18N',NULL,'EPSG','4400','EPSG','8255','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','17825','projected_crs','EPSG','22718','EPSG','3417','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22719','NAD83(CSRS)v7 / UTM zone 19N',NULL,'EPSG','4400','EPSG','8255','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','17847','projected_crs','EPSG','22719','EPSG','3524','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22720','NAD83(CSRS)v7 / UTM zone 20N',NULL,'EPSG','4400','EPSG','8255','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','17855','projected_crs','EPSG','22720','EPSG','3525','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22721','NAD83(CSRS)v7 / UTM zone 21N',NULL,'EPSG','4400','EPSG','8255','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','17860','projected_crs','EPSG','22721','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22722','NAD83(CSRS)v7 / UTM zone 22N',NULL,'EPSG','4400','EPSG','8255','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','17866','projected_crs','EPSG','22722','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22739','NAD83(CSRS)v7 / PEI Stereographic',NULL,'EPSG','4496','EPSG','8255','EPSG','19960',NULL,0); INSERT INTO "usage" VALUES('EPSG','17675','projected_crs','EPSG','22739','EPSG','1533','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22762','NAD83(CSRS)v7 / Alberta 3TM ref merid 111 W',NULL,'EPSG','4400','EPSG','8255','EPSG','17722',NULL,0); INSERT INTO "usage" VALUES('EPSG','17661','projected_crs','EPSG','22762','EPSG','3543','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22763','NAD83(CSRS)v7 / Alberta 3TM ref merid 114 W',NULL,'EPSG','4400','EPSG','8255','EPSG','17723',NULL,0); INSERT INTO "usage" VALUES('EPSG','17662','projected_crs','EPSG','22763','EPSG','3542','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22764','NAD83(CSRS)v7 / Alberta 3TM ref merid 117 W',NULL,'EPSG','4400','EPSG','8255','EPSG','17724',NULL,0); INSERT INTO "usage" VALUES('EPSG','17663','projected_crs','EPSG','22764','EPSG','3541','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22765','NAD83(CSRS)v7 / Alberta 3TM ref merid 120 W',NULL,'EPSG','4400','EPSG','8255','EPSG','17726',NULL,0); INSERT INTO "usage" VALUES('EPSG','17664','projected_crs','EPSG','22765','EPSG','3540','EPSG','1096'); INSERT INTO "projected_crs" VALUES('EPSG','22770','Deir ez Zor / Syria Lambert',NULL,'EPSG','4499','EPSG','4227','EPSG','19948',NULL,0); INSERT INTO "usage" VALUES('EPSG','6384','projected_crs','EPSG','22770','EPSG','1623','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22780','Deir ez Zor / Levant Stereographic',NULL,'EPSG','4499','EPSG','4227','EPSG','19949',NULL,0); INSERT INTO "usage" VALUES('EPSG','6385','projected_crs','EPSG','22780','EPSG','1623','EPSG','1207'); INSERT INTO "projected_crs" VALUES('EPSG','22807','NAD83(CSRS)v8 / UTM zone 7N',NULL,'EPSG','4400','EPSG','10414','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','20167','projected_crs','EPSG','22807','EPSG','3409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22808','NAD83(CSRS)v8 / UTM zone 8N',NULL,'EPSG','4400','EPSG','10414','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','20168','projected_crs','EPSG','22808','EPSG','3410','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22809','NAD83(CSRS)v8 / UTM zone 9N',NULL,'EPSG','4400','EPSG','10414','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','20169','projected_crs','EPSG','22809','EPSG','3411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22810','NAD83(CSRS)v8 / UTM zone 10N',NULL,'EPSG','4400','EPSG','10414','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','20170','projected_crs','EPSG','22810','EPSG','3412','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22811','NAD83(CSRS)v8 / UTM zone 11N',NULL,'EPSG','4400','EPSG','10414','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','20171','projected_crs','EPSG','22811','EPSG','3528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22812','NAD83(CSRS)v8 / UTM zone 12N',NULL,'EPSG','4400','EPSG','10414','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','20172','projected_crs','EPSG','22812','EPSG','3527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22813','NAD83(CSRS)v8 / UTM zone 13N',NULL,'EPSG','4400','EPSG','10414','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','20173','projected_crs','EPSG','22813','EPSG','3526','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22814','NAD83(CSRS)v8 / UTM zone 14N',NULL,'EPSG','4400','EPSG','10414','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','20174','projected_crs','EPSG','22814','EPSG','3413','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22815','NAD83(CSRS)v8 / UTM zone 15N',NULL,'EPSG','4400','EPSG','10414','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','20175','projected_crs','EPSG','22815','EPSG','3414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22816','NAD83(CSRS)v8 / UTM zone 16N',NULL,'EPSG','4400','EPSG','10414','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','20176','projected_crs','EPSG','22816','EPSG','3415','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22817','NAD83(CSRS)v8 / UTM zone 17N',NULL,'EPSG','4400','EPSG','10414','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','20177','projected_crs','EPSG','22817','EPSG','3416','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22818','NAD83(CSRS)v8 / UTM zone 18N',NULL,'EPSG','4400','EPSG','10414','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','20178','projected_crs','EPSG','22818','EPSG','3417','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22819','NAD83(CSRS)v8 / UTM zone 19N',NULL,'EPSG','4400','EPSG','10414','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','20179','projected_crs','EPSG','22819','EPSG','3524','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22820','NAD83(CSRS)v8 / UTM zone 20N',NULL,'EPSG','4400','EPSG','10414','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','20180','projected_crs','EPSG','22820','EPSG','3525','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22821','NAD83(CSRS)v8 / UTM zone 21N',NULL,'EPSG','4400','EPSG','10414','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','20181','projected_crs','EPSG','22821','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22822','NAD83(CSRS)v8 / UTM zone 22N',NULL,'EPSG','4400','EPSG','10414','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','20182','projected_crs','EPSG','22822','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22832','Douala / UTM zone 32N',NULL,'EPSG','4400','EPSG','4228','EPSG','16032',NULL,1); INSERT INTO "usage" VALUES('EPSG','6386','projected_crs','EPSG','22832','EPSG','1060','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22991','Egypt 1907 / Blue Belt',NULL,'EPSG','4400','EPSG','4229','EPSG','18071',NULL,0); INSERT INTO "usage" VALUES('EPSG','6387','projected_crs','EPSG','22991','EPSG','1642','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','22992','Egypt 1907 / Red Belt',NULL,'EPSG','4400','EPSG','4229','EPSG','18072',NULL,0); INSERT INTO "usage" VALUES('EPSG','6388','projected_crs','EPSG','22992','EPSG','1643','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22993','Egypt 1907 / Purple Belt',NULL,'EPSG','4400','EPSG','4229','EPSG','18073',NULL,0); INSERT INTO "usage" VALUES('EPSG','6389','projected_crs','EPSG','22993','EPSG','1644','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','22994','Egypt 1907 / Extended Purple Belt',NULL,'EPSG','4400','EPSG','4229','EPSG','18074',NULL,0); INSERT INTO "usage" VALUES('EPSG','6390','projected_crs','EPSG','22994','EPSG','1645','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23028','ED50 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4230','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','6391','projected_crs','EPSG','23028','EPSG','1631','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23029','ED50 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4230','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','6392','projected_crs','EPSG','23029','EPSG','1632','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23030','ED50 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4230','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','6393','projected_crs','EPSG','23030','EPSG','1633','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23031','ED50 / UTM zone 31N',NULL,'EPSG','4400','EPSG','4230','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6394','projected_crs','EPSG','23031','EPSG','1634','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23032','ED50 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4230','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6395','projected_crs','EPSG','23032','EPSG','1635','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23033','ED50 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4230','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','6396','projected_crs','EPSG','23033','EPSG','1636','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23034','ED50 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4230','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','6397','projected_crs','EPSG','23034','EPSG','1637','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23035','ED50 / UTM zone 35N',NULL,'EPSG','4400','EPSG','4230','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6398','projected_crs','EPSG','23035','EPSG','1638','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23036','ED50 / UTM zone 36N',NULL,'EPSG','4400','EPSG','4230','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6399','projected_crs','EPSG','23036','EPSG','1639','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23037','ED50 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4230','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6400','projected_crs','EPSG','23037','EPSG','1640','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23038','ED50 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4230','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','6401','projected_crs','EPSG','23038','EPSG','1641','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23090','ED50 / TM 0 N',NULL,'EPSG','4400','EPSG','4230','EPSG','16400',NULL,0); INSERT INTO "usage" VALUES('EPSG','6402','projected_crs','EPSG','23090','EPSG','1629','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','23095','ED50 / TM 5 NE',NULL,'EPSG','4400','EPSG','4230','EPSG','16405',NULL,0); INSERT INTO "usage" VALUES('EPSG','6403','projected_crs','EPSG','23095','EPSG','1630','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','23239','Fahud / UTM zone 39N',NULL,'EPSG','4400','EPSG','4232','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','6404','projected_crs','EPSG','23239','EPSG','1544','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23240','Fahud / UTM zone 40N',NULL,'EPSG','4400','EPSG','4232','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','6405','projected_crs','EPSG','23240','EPSG','4008','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23301','NAD83(2011) / ICS83-Freeport (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11264',NULL,0); INSERT INTO "usage" VALUES('EPSG','19282','projected_crs','EPSG','23301','EPSG','4701','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23302','NAD83(2011) / ICS83-Rockford (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11265',NULL,0); INSERT INTO "usage" VALUES('EPSG','19283','projected_crs','EPSG','23302','EPSG','4702','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23303','NAD83(2011) / ICS83-Aurora (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11233',NULL,0); INSERT INTO "usage" VALUES('EPSG','19284','projected_crs','EPSG','23303','EPSG','4703','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23304','NAD83(2011) / ICS83-Chicago (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11234',NULL,0); INSERT INTO "usage" VALUES('EPSG','19285','projected_crs','EPSG','23304','EPSG','4704','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23305','NAD83(2011) / ICS83-Moline (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11235',NULL,0); INSERT INTO "usage" VALUES('EPSG','19286','projected_crs','EPSG','23305','EPSG','4705','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23306','NAD83(2011) / ICS83-Sterling (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11236',NULL,0); INSERT INTO "usage" VALUES('EPSG','19287','projected_crs','EPSG','23306','EPSG','4706','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23307','NAD83(2011) / ICS83-Ottawa (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11237',NULL,0); INSERT INTO "usage" VALUES('EPSG','19288','projected_crs','EPSG','23307','EPSG','4707','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23308','NAD83(2011) / ICS83-Joliet (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11238',NULL,0); INSERT INTO "usage" VALUES('EPSG','19289','projected_crs','EPSG','23308','EPSG','4708','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23309','NAD83(2011) / ICS83-Monmouth (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11239',NULL,0); INSERT INTO "usage" VALUES('EPSG','19290','projected_crs','EPSG','23309','EPSG','4709','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23310','NAD83(2011) / ICS83-Galesburg (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11240',NULL,0); INSERT INTO "usage" VALUES('EPSG','19291','projected_crs','EPSG','23310','EPSG','4710','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23311','NAD83(2011) / ICS83-Peoria (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11241',NULL,0); INSERT INTO "usage" VALUES('EPSG','19292','projected_crs','EPSG','23311','EPSG','4711','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23312','NAD83(2011) / ICS83-Eureka (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11242',NULL,0); INSERT INTO "usage" VALUES('EPSG','19293','projected_crs','EPSG','23312','EPSG','4712','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23313','NAD83(2011) / ICS83-Bloomington (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11243',NULL,0); INSERT INTO "usage" VALUES('EPSG','19294','projected_crs','EPSG','23313','EPSG','4713','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23314','NAD83(2011) / ICS83-Pontiac (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11244',NULL,0); INSERT INTO "usage" VALUES('EPSG','19295','projected_crs','EPSG','23314','EPSG','4714','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23315','NAD83(2011) / ICS83-Watseka (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11245',NULL,0); INSERT INTO "usage" VALUES('EPSG','19296','projected_crs','EPSG','23315','EPSG','4715','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23316','NAD83(2011) / ICS83-Quincy (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11246',NULL,0); INSERT INTO "usage" VALUES('EPSG','19297','projected_crs','EPSG','23316','EPSG','4716','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23317','NAD83(2011) / ICS83-Macomb (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11247',NULL,0); INSERT INTO "usage" VALUES('EPSG','19298','projected_crs','EPSG','23317','EPSG','4717','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23318','NAD83(2011) / ICS83-Lincoln (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11248',NULL,0); INSERT INTO "usage" VALUES('EPSG','19299','projected_crs','EPSG','23318','EPSG','4718','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23319','NAD83(2011) / ICS83-Decatur (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11249',NULL,0); INSERT INTO "usage" VALUES('EPSG','19300','projected_crs','EPSG','23319','EPSG','4719','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23320','NAD83(2011) / ICS83-Champaign (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11250',NULL,0); INSERT INTO "usage" VALUES('EPSG','19301','projected_crs','EPSG','23320','EPSG','4720','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23321','NAD83(2011) / ICS83-Jacksonville (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11251',NULL,0); INSERT INTO "usage" VALUES('EPSG','19302','projected_crs','EPSG','23321','EPSG','4721','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23322','NAD83(2011) / ICS83-Springfield (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11252',NULL,0); INSERT INTO "usage" VALUES('EPSG','19303','projected_crs','EPSG','23322','EPSG','4722','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23323','NAD83(2011) / ICS83-Charleston (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11253',NULL,0); INSERT INTO "usage" VALUES('EPSG','19304','projected_crs','EPSG','23323','EPSG','4723','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23324','NAD83(2011) / ICS83-Jerseyville (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11254',NULL,0); INSERT INTO "usage" VALUES('EPSG','19305','projected_crs','EPSG','23324','EPSG','4724','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23325','NAD83(2011) / ICS83-Carlinville (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11255',NULL,0); INSERT INTO "usage" VALUES('EPSG','19306','projected_crs','EPSG','23325','EPSG','4725','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23326','NAD83(2011) / ICS83-Taylorville (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11256',NULL,0); INSERT INTO "usage" VALUES('EPSG','19307','projected_crs','EPSG','23326','EPSG','4726','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23327','NAD83(2011) / ICS83-Effingham (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11257',NULL,0); INSERT INTO "usage" VALUES('EPSG','19308','projected_crs','EPSG','23327','EPSG','4727','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23328','NAD83(2011) / ICS83-Robinson (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11258',NULL,0); INSERT INTO "usage" VALUES('EPSG','19309','projected_crs','EPSG','23328','EPSG','4728','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23329','NAD83(2011) / ICS83-Belleville (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11259',NULL,0); INSERT INTO "usage" VALUES('EPSG','19310','projected_crs','EPSG','23329','EPSG','4729','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23330','NAD83(2011) / ICS83-Mount Vernon (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11260',NULL,0); INSERT INTO "usage" VALUES('EPSG','19311','projected_crs','EPSG','23330','EPSG','4730','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23331','NAD83(2011) / ICS83-Olney (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11261',NULL,0); INSERT INTO "usage" VALUES('EPSG','19312','projected_crs','EPSG','23331','EPSG','4731','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23332','NAD83(2011) / ICS83-Carbondale (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11262',NULL,0); INSERT INTO "usage" VALUES('EPSG','19313','projected_crs','EPSG','23332','EPSG','4732','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23333','NAD83(2011) / ICS83-Metropolis (ftUS)',NULL,'EPSG','1053','EPSG','6318','EPSG','11263',NULL,0); INSERT INTO "usage" VALUES('EPSG','19314','projected_crs','EPSG','23333','EPSG','4733','EPSG','1266'); INSERT INTO "projected_crs" VALUES('EPSG','23433','Garoua / UTM zone 33N',NULL,'EPSG','4400','EPSG','4234','EPSG','16033',NULL,1); INSERT INTO "usage" VALUES('EPSG','6406','projected_crs','EPSG','23433','EPSG','1060','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23700','HD72 / EOV',NULL,'EPSG','4498','EPSG','4237','EPSG','19931',NULL,0); INSERT INTO "usage" VALUES('EPSG','6407','projected_crs','EPSG','23700','EPSG','1119','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23830','DGN95 / Indonesia TM-3 zone 46.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17432',NULL,0); INSERT INTO "usage" VALUES('EPSG','6408','projected_crs','EPSG','23830','EPSG','3976','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23831','DGN95 / Indonesia TM-3 zone 47.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17433',NULL,0); INSERT INTO "usage" VALUES('EPSG','6409','projected_crs','EPSG','23831','EPSG','3510','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23832','DGN95 / Indonesia TM-3 zone 47.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17434',NULL,0); INSERT INTO "usage" VALUES('EPSG','6410','projected_crs','EPSG','23832','EPSG','3511','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23833','DGN95 / Indonesia TM-3 zone 48.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17435',NULL,0); INSERT INTO "usage" VALUES('EPSG','6411','projected_crs','EPSG','23833','EPSG','3512','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23834','DGN95 / Indonesia TM-3 zone 48.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17436',NULL,0); INSERT INTO "usage" VALUES('EPSG','6412','projected_crs','EPSG','23834','EPSG','3513','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23835','DGN95 / Indonesia TM-3 zone 49.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17437',NULL,0); INSERT INTO "usage" VALUES('EPSG','6413','projected_crs','EPSG','23835','EPSG','3514','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23836','DGN95 / Indonesia TM-3 zone 49.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17438',NULL,0); INSERT INTO "usage" VALUES('EPSG','6414','projected_crs','EPSG','23836','EPSG','3515','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23837','DGN95 / Indonesia TM-3 zone 50.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17439',NULL,0); INSERT INTO "usage" VALUES('EPSG','6415','projected_crs','EPSG','23837','EPSG','3516','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23838','DGN95 / Indonesia TM-3 zone 50.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17440',NULL,0); INSERT INTO "usage" VALUES('EPSG','6416','projected_crs','EPSG','23838','EPSG','3517','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23839','DGN95 / Indonesia TM-3 zone 51.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17441',NULL,0); INSERT INTO "usage" VALUES('EPSG','6417','projected_crs','EPSG','23839','EPSG','3518','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23840','DGN95 / Indonesia TM-3 zone 51.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17442',NULL,0); INSERT INTO "usage" VALUES('EPSG','6418','projected_crs','EPSG','23840','EPSG','3519','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23841','DGN95 / Indonesia TM-3 zone 52.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17443',NULL,0); INSERT INTO "usage" VALUES('EPSG','6419','projected_crs','EPSG','23841','EPSG','3520','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23842','DGN95 / Indonesia TM-3 zone 52.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17444',NULL,0); INSERT INTO "usage" VALUES('EPSG','6420','projected_crs','EPSG','23842','EPSG','3521','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23843','DGN95 / Indonesia TM-3 zone 53.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17445',NULL,0); INSERT INTO "usage" VALUES('EPSG','6421','projected_crs','EPSG','23843','EPSG','3522','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23844','DGN95 / Indonesia TM-3 zone 53.2',NULL,'EPSG','4499','EPSG','4755','EPSG','17446',NULL,0); INSERT INTO "usage" VALUES('EPSG','6422','projected_crs','EPSG','23844','EPSG','3523','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23845','DGN95 / Indonesia TM-3 zone 54.1',NULL,'EPSG','4499','EPSG','4755','EPSG','17447',NULL,0); INSERT INTO "usage" VALUES('EPSG','6423','projected_crs','EPSG','23845','EPSG','3975','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','23846','ID74 / UTM zone 46N',NULL,'EPSG','4400','EPSG','4238','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','6424','projected_crs','EPSG','23846','EPSG','3976','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23847','ID74 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4238','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','6425','projected_crs','EPSG','23847','EPSG','3978','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23848','ID74 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4238','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','6426','projected_crs','EPSG','23848','EPSG','3979','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23849','ID74 / UTM zone 49N',NULL,'EPSG','4400','EPSG','4238','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','6427','projected_crs','EPSG','23849','EPSG','3980','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23850','ID74 / UTM zone 50N',NULL,'EPSG','4400','EPSG','4238','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('EPSG','6428','projected_crs','EPSG','23850','EPSG','3981','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23851','ID74 / UTM zone 51N',NULL,'EPSG','4400','EPSG','4238','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','6429','projected_crs','EPSG','23851','EPSG','3983','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23852','ID74 / UTM zone 52N',NULL,'EPSG','4400','EPSG','4238','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','6430','projected_crs','EPSG','23852','EPSG','3984','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23853','ID74 / UTM zone 53N',NULL,'EPSG','4400','EPSG','4238','EPSG','16053',NULL,1); INSERT INTO "usage" VALUES('EPSG','6431','projected_crs','EPSG','23853','EPSG','1661','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23866','DGN95 / UTM zone 46N',NULL,'EPSG','4400','EPSG','4755','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','6432','projected_crs','EPSG','23866','EPSG','1647','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23867','DGN95 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4755','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','6433','projected_crs','EPSG','23867','EPSG','1649','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23868','DGN95 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4755','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','6434','projected_crs','EPSG','23868','EPSG','1651','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23869','DGN95 / UTM zone 49N',NULL,'EPSG','4400','EPSG','4755','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','6435','projected_crs','EPSG','23869','EPSG','1653','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23870','DGN95 / UTM zone 50N',NULL,'EPSG','4400','EPSG','4755','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('EPSG','6436','projected_crs','EPSG','23870','EPSG','1655','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23871','DGN95 / UTM zone 51N',NULL,'EPSG','4400','EPSG','4755','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','6437','projected_crs','EPSG','23871','EPSG','1657','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23872','DGN95 / UTM zone 52N',NULL,'EPSG','4400','EPSG','4755','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','6438','projected_crs','EPSG','23872','EPSG','1659','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23877','DGN95 / UTM zone 47S',NULL,'EPSG','4400','EPSG','4755','EPSG','16147',NULL,0); INSERT INTO "usage" VALUES('EPSG','6439','projected_crs','EPSG','23877','EPSG','1650','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23878','DGN95 / UTM zone 48S',NULL,'EPSG','4400','EPSG','4755','EPSG','16148',NULL,0); INSERT INTO "usage" VALUES('EPSG','6440','projected_crs','EPSG','23878','EPSG','1652','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23879','DGN95 / UTM zone 49S',NULL,'EPSG','4400','EPSG','4755','EPSG','16149',NULL,0); INSERT INTO "usage" VALUES('EPSG','6441','projected_crs','EPSG','23879','EPSG','1654','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23880','DGN95 / UTM zone 50S',NULL,'EPSG','4400','EPSG','4755','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','6442','projected_crs','EPSG','23880','EPSG','1656','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23881','DGN95 / UTM zone 51S',NULL,'EPSG','4400','EPSG','4755','EPSG','16151',NULL,0); INSERT INTO "usage" VALUES('EPSG','6443','projected_crs','EPSG','23881','EPSG','1658','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23882','DGN95 / UTM zone 52S',NULL,'EPSG','4400','EPSG','4755','EPSG','16152',NULL,0); INSERT INTO "usage" VALUES('EPSG','6444','projected_crs','EPSG','23882','EPSG','1660','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23883','DGN95 / UTM zone 53S',NULL,'EPSG','4400','EPSG','4755','EPSG','16153',NULL,0); INSERT INTO "usage" VALUES('EPSG','6445','projected_crs','EPSG','23883','EPSG','1662','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23884','DGN95 / UTM zone 54S',NULL,'EPSG','4400','EPSG','4755','EPSG','16154',NULL,0); INSERT INTO "usage" VALUES('EPSG','6446','projected_crs','EPSG','23884','EPSG','1663','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23886','ID74 / UTM zone 46S',NULL,'EPSG','4400','EPSG','4238','EPSG','16146',NULL,1); INSERT INTO "usage" VALUES('EPSG','6447','projected_crs','EPSG','23886','EPSG','1648','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23887','ID74 / UTM zone 47S',NULL,'EPSG','4400','EPSG','4238','EPSG','16147',NULL,0); INSERT INTO "usage" VALUES('EPSG','6448','projected_crs','EPSG','23887','EPSG','3985','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23888','ID74 / UTM zone 48S',NULL,'EPSG','4400','EPSG','4238','EPSG','16148',NULL,0); INSERT INTO "usage" VALUES('EPSG','6449','projected_crs','EPSG','23888','EPSG','3986','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23889','ID74 / UTM zone 49S',NULL,'EPSG','4400','EPSG','4238','EPSG','16149',NULL,0); INSERT INTO "usage" VALUES('EPSG','6450','projected_crs','EPSG','23889','EPSG','3987','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23890','ID74 / UTM zone 50S',NULL,'EPSG','4400','EPSG','4238','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','6451','projected_crs','EPSG','23890','EPSG','3988','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23891','ID74 / UTM zone 51S',NULL,'EPSG','4400','EPSG','4238','EPSG','16151',NULL,0); INSERT INTO "usage" VALUES('EPSG','6452','projected_crs','EPSG','23891','EPSG','3989','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23892','ID74 / UTM zone 52S',NULL,'EPSG','4400','EPSG','4238','EPSG','16152',NULL,0); INSERT INTO "usage" VALUES('EPSG','6453','projected_crs','EPSG','23892','EPSG','3990','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23893','ID74 / UTM zone 53S',NULL,'EPSG','4400','EPSG','4238','EPSG','16153',NULL,0); INSERT INTO "usage" VALUES('EPSG','6454','projected_crs','EPSG','23893','EPSG','3991','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23894','ID74 / UTM zone 54S',NULL,'EPSG','4400','EPSG','4238','EPSG','16154',NULL,0); INSERT INTO "usage" VALUES('EPSG','6455','projected_crs','EPSG','23894','EPSG','3975','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23946','Indian 1954 / UTM zone 46N',NULL,'EPSG','4400','EPSG','4239','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','6456','projected_crs','EPSG','23946','EPSG','1664','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23947','Indian 1954 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4239','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','6457','projected_crs','EPSG','23947','EPSG','1665','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','23948','Indian 1954 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4239','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','6458','projected_crs','EPSG','23948','EPSG','3735','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24047','Indian 1975 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4240','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','6459','projected_crs','EPSG','24047','EPSG','1667','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24048','Indian 1975 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4240','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','6460','projected_crs','EPSG','24048','EPSG','1666','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24100','Jamaica 1875 / Jamaica (Old Grid)',NULL,'EPSG','4403','EPSG','4241','EPSG','19909',NULL,0); INSERT INTO "usage" VALUES('EPSG','6461','projected_crs','EPSG','24100','EPSG','3342','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','24200','JAD69 / Jamaica National Grid',NULL,'EPSG','4400','EPSG','4242','EPSG','19910',NULL,0); INSERT INTO "usage" VALUES('EPSG','6462','projected_crs','EPSG','24200','EPSG','3342','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','24305','Kalianpur 1937 / UTM zone 45N',NULL,'EPSG','4400','EPSG','4144','EPSG','16045',NULL,0); INSERT INTO "usage" VALUES('EPSG','6463','projected_crs','EPSG','24305','EPSG','1674','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24306','Kalianpur 1937 / UTM zone 46N',NULL,'EPSG','4400','EPSG','4144','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','6464','projected_crs','EPSG','24306','EPSG','1675','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24311','Kalianpur 1962 / UTM zone 41N',NULL,'EPSG','4400','EPSG','4145','EPSG','16041',NULL,0); INSERT INTO "usage" VALUES('EPSG','6465','projected_crs','EPSG','24311','EPSG','1687','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24312','Kalianpur 1962 / UTM zone 42N',NULL,'EPSG','4400','EPSG','4145','EPSG','16042',NULL,0); INSERT INTO "usage" VALUES('EPSG','6466','projected_crs','EPSG','24312','EPSG','1688','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24313','Kalianpur 1962 / UTM zone 43N',NULL,'EPSG','4400','EPSG','4145','EPSG','16043',NULL,0); INSERT INTO "usage" VALUES('EPSG','6467','projected_crs','EPSG','24313','EPSG','1689','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24342','Kalianpur 1975 / UTM zone 42N',NULL,'EPSG','4400','EPSG','4146','EPSG','16042',NULL,0); INSERT INTO "usage" VALUES('EPSG','6468','projected_crs','EPSG','24342','EPSG','1679','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24343','Kalianpur 1975 / UTM zone 43N',NULL,'EPSG','4400','EPSG','4146','EPSG','16043',NULL,0); INSERT INTO "usage" VALUES('EPSG','6469','projected_crs','EPSG','24343','EPSG','1680','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24344','Kalianpur 1975 / UTM zone 44N',NULL,'EPSG','4400','EPSG','4146','EPSG','16044',NULL,0); INSERT INTO "usage" VALUES('EPSG','6470','projected_crs','EPSG','24344','EPSG','1681','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24345','Kalianpur 1975 / UTM zone 45N',NULL,'EPSG','4400','EPSG','4146','EPSG','16045',NULL,0); INSERT INTO "usage" VALUES('EPSG','6471','projected_crs','EPSG','24345','EPSG','1682','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24346','Kalianpur 1975 / UTM zone 46N',NULL,'EPSG','4400','EPSG','4146','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','6472','projected_crs','EPSG','24346','EPSG','1683','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24347','Kalianpur 1975 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4146','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','6473','projected_crs','EPSG','24347','EPSG','1684','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24370','Kalianpur 1880 / India zone 0',NULL,'EPSG','4408','EPSG','4243','EPSG','18110',NULL,0); INSERT INTO "usage" VALUES('EPSG','6474','projected_crs','EPSG','24370','EPSG','1668','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24371','Kalianpur 1880 / India zone I',NULL,'EPSG','4408','EPSG','4243','EPSG','18111',NULL,0); INSERT INTO "usage" VALUES('EPSG','6475','projected_crs','EPSG','24371','EPSG','1669','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24372','Kalianpur 1880 / India zone IIa',NULL,'EPSG','4408','EPSG','4243','EPSG','18112',NULL,0); INSERT INTO "usage" VALUES('EPSG','6476','projected_crs','EPSG','24372','EPSG','1670','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24373','Kalianpur 1880 / India zone IIIa',NULL,'EPSG','4408','EPSG','4243','EPSG','18114',NULL,0); INSERT INTO "usage" VALUES('EPSG','6477','projected_crs','EPSG','24373','EPSG','1672','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24374','Kalianpur 1880 / India zone IVa',NULL,'EPSG','4408','EPSG','4243','EPSG','18116',NULL,0); INSERT INTO "usage" VALUES('EPSG','6478','projected_crs','EPSG','24374','EPSG','1673','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24375','Kalianpur 1937 / India zone IIb',NULL,'EPSG','4400','EPSG','4144','EPSG','18238',NULL,0); INSERT INTO "usage" VALUES('EPSG','6479','projected_crs','EPSG','24375','EPSG','3217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24376','Kalianpur 1962 / India zone I',NULL,'EPSG','4400','EPSG','4145','EPSG','18236',NULL,0); INSERT INTO "usage" VALUES('EPSG','6480','projected_crs','EPSG','24376','EPSG','1685','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24377','Kalianpur 1962 / India zone IIa',NULL,'EPSG','4400','EPSG','4145','EPSG','18237',NULL,0); INSERT INTO "usage" VALUES('EPSG','6481','projected_crs','EPSG','24377','EPSG','1686','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24378','Kalianpur 1975 / India zone I',NULL,'EPSG','4400','EPSG','4146','EPSG','18231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6482','projected_crs','EPSG','24378','EPSG','1676','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24379','Kalianpur 1975 / India zone IIa',NULL,'EPSG','4400','EPSG','4146','EPSG','18232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6483','projected_crs','EPSG','24379','EPSG','1677','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24380','Kalianpur 1975 / India zone IIb',NULL,'EPSG','4400','EPSG','4146','EPSG','18235',NULL,0); INSERT INTO "usage" VALUES('EPSG','6484','projected_crs','EPSG','24380','EPSG','1678','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24381','Kalianpur 1975 / India zone IIIa',NULL,'EPSG','4400','EPSG','4146','EPSG','18233',NULL,0); INSERT INTO "usage" VALUES('EPSG','6485','projected_crs','EPSG','24381','EPSG','1672','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24382','Kalianpur 1880 / India zone IIb',NULL,'EPSG','4408','EPSG','4243','EPSG','18113',NULL,0); INSERT INTO "usage" VALUES('EPSG','6486','projected_crs','EPSG','24382','EPSG','1671','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24383','Kalianpur 1975 / India zone IVa',NULL,'EPSG','4400','EPSG','4146','EPSG','18234',NULL,0); INSERT INTO "usage" VALUES('EPSG','6487','projected_crs','EPSG','24383','EPSG','1673','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24500','Kertau 1968 / Singapore Grid',NULL,'EPSG','4400','EPSG','4245','EPSG','19920',NULL,0); INSERT INTO "usage" VALUES('EPSG','6488','projected_crs','EPSG','24500','EPSG','1210','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24547','Kertau 1968 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4245','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','6489','projected_crs','EPSG','24547','EPSG','1691','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24548','Kertau 1968 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4245','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','6490','projected_crs','EPSG','24548','EPSG','1692','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24571','Kertau / R.S.O. Malaya (ch)',NULL,'EPSG','4401','EPSG','4245','EPSG','19935',NULL,1); INSERT INTO "usage" VALUES('EPSG','6491','projected_crs','EPSG','24571','EPSG','1690','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24600','KOC Lambert',NULL,'EPSG','4400','EPSG','4246','EPSG','19906',NULL,0); INSERT INTO "usage" VALUES('EPSG','6492','projected_crs','EPSG','24600','EPSG','3267','EPSG','1216'); INSERT INTO "projected_crs" VALUES('EPSG','24718','La Canoa / UTM zone 18N',NULL,'EPSG','4400','EPSG','4247','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','6493','projected_crs','EPSG','24718','EPSG','1693','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24719','La Canoa / UTM zone 19N',NULL,'EPSG','4400','EPSG','4247','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','6494','projected_crs','EPSG','24719','EPSG','1694','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24720','La Canoa / UTM zone 20N',NULL,'EPSG','4400','EPSG','4247','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','6495','projected_crs','EPSG','24720','EPSG','1695','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24817','PSAD56 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4248','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','6496','projected_crs','EPSG','24817','EPSG','3112','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24818','PSAD56 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4248','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','6497','projected_crs','EPSG','24818','EPSG','1756','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24819','PSAD56 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4248','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','6498','projected_crs','EPSG','24819','EPSG','1758','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24820','PSAD56 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4248','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','6499','projected_crs','EPSG','24820','EPSG','1760','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24821','PSAD56 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4248','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','6500','projected_crs','EPSG','24821','EPSG','1762','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24877','PSAD56 / UTM zone 17S',NULL,'EPSG','4400','EPSG','4248','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','6501','projected_crs','EPSG','24877','EPSG','1755','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24878','PSAD56 / UTM zone 18S',NULL,'EPSG','4400','EPSG','4248','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','6502','projected_crs','EPSG','24878','EPSG','1757','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24879','PSAD56 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4248','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','6503','projected_crs','EPSG','24879','EPSG','1759','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24880','PSAD56 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4248','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','6504','projected_crs','EPSG','24880','EPSG','1761','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24881','PSAD56 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4248','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','6505','projected_crs','EPSG','24881','EPSG','3733','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24882','PSAD56 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4248','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','6506','projected_crs','EPSG','24882','EPSG','1754','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24891','PSAD56 / Peru west zone',NULL,'EPSG','4499','EPSG','4248','EPSG','18161',NULL,0); INSERT INTO "usage" VALUES('EPSG','6507','projected_crs','EPSG','24891','EPSG','1753','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24892','PSAD56 / Peru central zone',NULL,'EPSG','4499','EPSG','4248','EPSG','18162',NULL,0); INSERT INTO "usage" VALUES('EPSG','6508','projected_crs','EPSG','24892','EPSG','1752','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','24893','PSAD56 / Peru east zone',NULL,'EPSG','4499','EPSG','4248','EPSG','18163',NULL,0); INSERT INTO "usage" VALUES('EPSG','6509','projected_crs','EPSG','24893','EPSG','1751','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25000','Leigon / Ghana Metre Grid',NULL,'EPSG','4400','EPSG','4250','EPSG','19904',NULL,0); INSERT INTO "usage" VALUES('EPSG','6510','projected_crs','EPSG','25000','EPSG','1104','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25231','Lome / UTM zone 31N',NULL,'EPSG','4400','EPSG','4252','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6511','projected_crs','EPSG','25231','EPSG','1232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25391','Luzon 1911 / Philippines zone I',NULL,'EPSG','4499','EPSG','4253','EPSG','18171',NULL,0); INSERT INTO "usage" VALUES('EPSG','6512','projected_crs','EPSG','25391','EPSG','3958','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25392','Luzon 1911 / Philippines zone II',NULL,'EPSG','4499','EPSG','4253','EPSG','18172',NULL,0); INSERT INTO "usage" VALUES('EPSG','6513','projected_crs','EPSG','25392','EPSG','3964','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25393','Luzon 1911 / Philippines zone III',NULL,'EPSG','4499','EPSG','4253','EPSG','18173',NULL,0); INSERT INTO "usage" VALUES('EPSG','6514','projected_crs','EPSG','25393','EPSG','3965','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25394','Luzon 1911 / Philippines zone IV',NULL,'EPSG','4499','EPSG','4253','EPSG','18174',NULL,0); INSERT INTO "usage" VALUES('EPSG','6515','projected_crs','EPSG','25394','EPSG','3966','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25395','Luzon 1911 / Philippines zone V',NULL,'EPSG','4499','EPSG','4253','EPSG','18175',NULL,0); INSERT INTO "usage" VALUES('EPSG','6516','projected_crs','EPSG','25395','EPSG','3967','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25700','Makassar (Jakarta) / NEIEZ',NULL,'EPSG','4499','EPSG','4804','EPSG','19905',NULL,1); INSERT INTO "usage" VALUES('EPSG','6517','projected_crs','EPSG','25700','EPSG','1316','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25828','ETRS89 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4258','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','6518','projected_crs','EPSG','25828','EPSG','2122','EPSG','1290'); INSERT INTO "projected_crs" VALUES('EPSG','25829','ETRS89 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4258','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','6519','projected_crs','EPSG','25829','EPSG','2123','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21368','projected_crs','EPSG','25829','EPSG','4765','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25830','ETRS89 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4258','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','6520','projected_crs','EPSG','25830','EPSG','2124','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21361','projected_crs','EPSG','25830','EPSG','4758','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25831','ETRS89 / UTM zone 31N',NULL,'EPSG','4400','EPSG','4258','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6521','projected_crs','EPSG','25831','EPSG','2125','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21362','projected_crs','EPSG','25831','EPSG','4759','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25832','ETRS89 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4258','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6522','projected_crs','EPSG','25832','EPSG','2126','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21363','projected_crs','EPSG','25832','EPSG','4760','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25833','ETRS89 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4258','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','6523','projected_crs','EPSG','25833','EPSG','2127','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21364','projected_crs','EPSG','25833','EPSG','4761','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25834','ETRS89 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4258','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','6524','projected_crs','EPSG','25834','EPSG','2128','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21365','projected_crs','EPSG','25834','EPSG','4762','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25835','ETRS89 / UTM zone 35N',NULL,'EPSG','4400','EPSG','4258','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6525','projected_crs','EPSG','25835','EPSG','2129','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21366','projected_crs','EPSG','25835','EPSG','4763','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25836','ETRS89 / UTM zone 36N',NULL,'EPSG','4400','EPSG','4258','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6526','projected_crs','EPSG','25836','EPSG','2130','EPSG','1142'); INSERT INTO "usage" VALUES('EPSG','21367','projected_crs','EPSG','25836','EPSG','4764','EPSG','1227'); INSERT INTO "projected_crs" VALUES('EPSG','25837','ETRS89 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4258','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6527','projected_crs','EPSG','25837','EPSG','2131','EPSG','1290'); INSERT INTO "projected_crs" VALUES('EPSG','25838','ETRS89 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4258','EPSG','16038',NULL,1); INSERT INTO "usage" VALUES('EPSG','6528','projected_crs','EPSG','25838','EPSG','2132','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','25884','ETRS89 / TM Baltic93',NULL,'EPSG','4530','EPSG','4258','EPSG','19939',NULL,0); INSERT INTO "usage" VALUES('EPSG','6529','projected_crs','EPSG','25884','EPSG','1646','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','25932','Malongo 1987 / UTM zone 32S',NULL,'EPSG','4400','EPSG','4259','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6530','projected_crs','EPSG','25932','EPSG','3180','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','26191','Merchich / Nord Maroc',NULL,'EPSG','4499','EPSG','4261','EPSG','18131',NULL,0); INSERT INTO "usage" VALUES('EPSG','6531','projected_crs','EPSG','26191','EPSG','1703','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26192','Merchich / Sud Maroc',NULL,'EPSG','4499','EPSG','4261','EPSG','18132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6532','projected_crs','EPSG','26192','EPSG','2787','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26193','Merchich / Sahara',NULL,'EPSG','4499','EPSG','4261','EPSG','18133',NULL,1); INSERT INTO "usage" VALUES('EPSG','6533','projected_crs','EPSG','26193','EPSG','1705','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26194','Merchich / Sahara Nord',NULL,'EPSG','4499','EPSG','4261','EPSG','18134',NULL,0); INSERT INTO "usage" VALUES('EPSG','6534','projected_crs','EPSG','26194','EPSG','2788','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26195','Merchich / Sahara Sud',NULL,'EPSG','4499','EPSG','4261','EPSG','18135',NULL,0); INSERT INTO "usage" VALUES('EPSG','6535','projected_crs','EPSG','26195','EPSG','2789','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26237','Massawa / UTM zone 37N',NULL,'EPSG','4400','EPSG','4262','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6536','projected_crs','EPSG','26237','EPSG','1089','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26331','Minna / UTM zone 31N',NULL,'EPSG','4400','EPSG','4263','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6537','projected_crs','EPSG','26331','EPSG','1716','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26332','Minna / UTM zone 32N',NULL,'EPSG','4400','EPSG','4263','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6538','projected_crs','EPSG','26332','EPSG','3812','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26391','Minna / Nigeria West Belt',NULL,'EPSG','4400','EPSG','4263','EPSG','18151',NULL,0); INSERT INTO "usage" VALUES('EPSG','6539','projected_crs','EPSG','26391','EPSG','1715','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26392','Minna / Nigeria Mid Belt',NULL,'EPSG','4400','EPSG','4263','EPSG','18152',NULL,0); INSERT INTO "usage" VALUES('EPSG','6540','projected_crs','EPSG','26392','EPSG','1714','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26393','Minna / Nigeria East Belt',NULL,'EPSG','4400','EPSG','4263','EPSG','18153',NULL,0); INSERT INTO "usage" VALUES('EPSG','6541','projected_crs','EPSG','26393','EPSG','1713','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26432','Mhast / UTM zone 32S',NULL,'EPSG','4400','EPSG','4264','EPSG','16132',NULL,1); INSERT INTO "usage" VALUES('EPSG','6542','projected_crs','EPSG','26432','EPSG','1318','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26591','Monte Mario (Rome) / Italy zone 1',NULL,'EPSG','4499','EPSG','4806','EPSG','18121',NULL,1); INSERT INTO "usage" VALUES('EPSG','6543','projected_crs','EPSG','26591','EPSG','1718','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26592','Monte Mario (Rome) / Italy zone 2',NULL,'EPSG','4499','EPSG','4806','EPSG','18122',NULL,1); INSERT INTO "usage" VALUES('EPSG','6544','projected_crs','EPSG','26592','EPSG','1719','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26632','M''poraloko / UTM zone 32N',NULL,'EPSG','4400','EPSG','4266','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6545','projected_crs','EPSG','26632','EPSG','1696','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26692','M''poraloko / UTM zone 32S',NULL,'EPSG','4400','EPSG','4266','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6546','projected_crs','EPSG','26692','EPSG','1697','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26701','NAD27 / UTM zone 1N',NULL,'EPSG','4400','EPSG','4267','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('EPSG','6547','projected_crs','EPSG','26701','EPSG','3374','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26702','NAD27 / UTM zone 2N',NULL,'EPSG','4400','EPSG','4267','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('EPSG','6548','projected_crs','EPSG','26702','EPSG','3375','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26703','NAD27 / UTM zone 3N',NULL,'EPSG','4400','EPSG','4267','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('EPSG','6549','projected_crs','EPSG','26703','EPSG','2133','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26704','NAD27 / UTM zone 4N',NULL,'EPSG','4400','EPSG','4267','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','6550','projected_crs','EPSG','26704','EPSG','2134','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26705','NAD27 / UTM zone 5N',NULL,'EPSG','4400','EPSG','4267','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','6551','projected_crs','EPSG','26705','EPSG','2135','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26706','NAD27 / UTM zone 6N',NULL,'EPSG','4400','EPSG','4267','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('EPSG','6552','projected_crs','EPSG','26706','EPSG','2136','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26707','NAD27 / UTM zone 7N',NULL,'EPSG','4400','EPSG','4267','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','6553','projected_crs','EPSG','26707','EPSG','2137','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26708','NAD27 / UTM zone 8N',NULL,'EPSG','4400','EPSG','4267','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','6554','projected_crs','EPSG','26708','EPSG','2138','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26709','NAD27 / UTM zone 9N',NULL,'EPSG','4400','EPSG','4267','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','6555','projected_crs','EPSG','26709','EPSG','2139','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26710','NAD27 / UTM zone 10N',NULL,'EPSG','4400','EPSG','4267','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','6556','projected_crs','EPSG','26710','EPSG','2140','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26711','NAD27 / UTM zone 11N',NULL,'EPSG','4400','EPSG','4267','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','6557','projected_crs','EPSG','26711','EPSG','2141','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26712','NAD27 / UTM zone 12N',NULL,'EPSG','4400','EPSG','4267','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','6558','projected_crs','EPSG','26712','EPSG','2142','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26713','NAD27 / UTM zone 13N',NULL,'EPSG','4400','EPSG','4267','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','6559','projected_crs','EPSG','26713','EPSG','2143','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26714','NAD27 / UTM zone 14N',NULL,'EPSG','4400','EPSG','4267','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','6560','projected_crs','EPSG','26714','EPSG','2144','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26715','NAD27 / UTM zone 15N',NULL,'EPSG','4400','EPSG','4267','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','6561','projected_crs','EPSG','26715','EPSG','2145','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26716','NAD27 / UTM zone 16N',NULL,'EPSG','4400','EPSG','4267','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','6562','projected_crs','EPSG','26716','EPSG','2146','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26717','NAD27 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4267','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','6563','projected_crs','EPSG','26717','EPSG','2147','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26718','NAD27 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4267','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','6564','projected_crs','EPSG','26718','EPSG','2148','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26719','NAD27 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4267','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','6565','projected_crs','EPSG','26719','EPSG','2149','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26720','NAD27 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4267','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','6566','projected_crs','EPSG','26720','EPSG','2150','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26721','NAD27 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4267','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','6567','projected_crs','EPSG','26721','EPSG','3891','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26722','NAD27 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4267','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','6568','projected_crs','EPSG','26722','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26729','NAD27 / Alabama East',NULL,'EPSG','4497','EPSG','4267','EPSG','10101',NULL,0); INSERT INTO "usage" VALUES('EPSG','6569','projected_crs','EPSG','26729','EPSG','2154','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26730','NAD27 / Alabama West',NULL,'EPSG','4497','EPSG','4267','EPSG','10102',NULL,0); INSERT INTO "usage" VALUES('EPSG','6570','projected_crs','EPSG','26730','EPSG','2155','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26731','NAD27 / Alaska zone 1',NULL,'EPSG','4497','EPSG','4267','EPSG','15001',NULL,0); INSERT INTO "usage" VALUES('EPSG','6571','projected_crs','EPSG','26731','EPSG','2156','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26732','NAD27 / Alaska zone 2',NULL,'EPSG','4497','EPSG','4267','EPSG','15002',NULL,0); INSERT INTO "usage" VALUES('EPSG','6572','projected_crs','EPSG','26732','EPSG','2158','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26733','NAD27 / Alaska zone 3',NULL,'EPSG','4497','EPSG','4267','EPSG','15003',NULL,0); INSERT INTO "usage" VALUES('EPSG','6573','projected_crs','EPSG','26733','EPSG','2159','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26734','NAD27 / Alaska zone 4',NULL,'EPSG','4497','EPSG','4267','EPSG','15004',NULL,0); INSERT INTO "usage" VALUES('EPSG','6574','projected_crs','EPSG','26734','EPSG','2160','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26735','NAD27 / Alaska zone 5',NULL,'EPSG','4497','EPSG','4267','EPSG','15005',NULL,0); INSERT INTO "usage" VALUES('EPSG','6575','projected_crs','EPSG','26735','EPSG','2161','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26736','NAD27 / Alaska zone 6',NULL,'EPSG','4497','EPSG','4267','EPSG','15006',NULL,0); INSERT INTO "usage" VALUES('EPSG','6576','projected_crs','EPSG','26736','EPSG','2162','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26737','NAD27 / Alaska zone 7',NULL,'EPSG','4497','EPSG','4267','EPSG','15007',NULL,0); INSERT INTO "usage" VALUES('EPSG','6577','projected_crs','EPSG','26737','EPSG','2163','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26738','NAD27 / Alaska zone 8',NULL,'EPSG','4497','EPSG','4267','EPSG','15008',NULL,0); INSERT INTO "usage" VALUES('EPSG','6578','projected_crs','EPSG','26738','EPSG','2164','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26739','NAD27 / Alaska zone 9',NULL,'EPSG','4497','EPSG','4267','EPSG','15009',NULL,0); INSERT INTO "usage" VALUES('EPSG','6579','projected_crs','EPSG','26739','EPSG','2165','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26740','NAD27 / Alaska zone 10',NULL,'EPSG','4497','EPSG','4267','EPSG','15010',NULL,0); INSERT INTO "usage" VALUES('EPSG','6580','projected_crs','EPSG','26740','EPSG','2157','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26741','NAD27 / California zone I',NULL,'EPSG','4497','EPSG','4267','EPSG','10401',NULL,0); INSERT INTO "usage" VALUES('EPSG','6581','projected_crs','EPSG','26741','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26742','NAD27 / California zone II',NULL,'EPSG','4497','EPSG','4267','EPSG','10402',NULL,0); INSERT INTO "usage" VALUES('EPSG','6582','projected_crs','EPSG','26742','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26743','NAD27 / California zone III',NULL,'EPSG','4497','EPSG','4267','EPSG','10403',NULL,0); INSERT INTO "usage" VALUES('EPSG','6583','projected_crs','EPSG','26743','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26744','NAD27 / California zone IV',NULL,'EPSG','4497','EPSG','4267','EPSG','10404',NULL,0); INSERT INTO "usage" VALUES('EPSG','6584','projected_crs','EPSG','26744','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26745','NAD27 / California zone V',NULL,'EPSG','4497','EPSG','4267','EPSG','10405',NULL,0); INSERT INTO "usage" VALUES('EPSG','6585','projected_crs','EPSG','26745','EPSG','2179','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26746','NAD27 / California zone VI',NULL,'EPSG','4497','EPSG','4267','EPSG','10406',NULL,0); INSERT INTO "usage" VALUES('EPSG','6586','projected_crs','EPSG','26746','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26747','NAD27 / California zone VII',NULL,'EPSG','4497','EPSG','4267','EPSG','10407',NULL,1); INSERT INTO "usage" VALUES('EPSG','6587','projected_crs','EPSG','26747','EPSG','2181','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26748','NAD27 / Arizona East',NULL,'EPSG','4497','EPSG','4267','EPSG','10201',NULL,0); INSERT INTO "usage" VALUES('EPSG','6588','projected_crs','EPSG','26748','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26749','NAD27 / Arizona Central',NULL,'EPSG','4497','EPSG','4267','EPSG','10202',NULL,0); INSERT INTO "usage" VALUES('EPSG','6589','projected_crs','EPSG','26749','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26750','NAD27 / Arizona West',NULL,'EPSG','4497','EPSG','4267','EPSG','10203',NULL,0); INSERT INTO "usage" VALUES('EPSG','6590','projected_crs','EPSG','26750','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26751','NAD27 / Arkansas North',NULL,'EPSG','4497','EPSG','4267','EPSG','10301',NULL,0); INSERT INTO "usage" VALUES('EPSG','6591','projected_crs','EPSG','26751','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26752','NAD27 / Arkansas South',NULL,'EPSG','4497','EPSG','4267','EPSG','10302',NULL,0); INSERT INTO "usage" VALUES('EPSG','6592','projected_crs','EPSG','26752','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26753','NAD27 / Colorado North',NULL,'EPSG','4497','EPSG','4267','EPSG','10501',NULL,0); INSERT INTO "usage" VALUES('EPSG','6593','projected_crs','EPSG','26753','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26754','NAD27 / Colorado Central',NULL,'EPSG','4497','EPSG','4267','EPSG','10502',NULL,0); INSERT INTO "usage" VALUES('EPSG','6594','projected_crs','EPSG','26754','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26755','NAD27 / Colorado South',NULL,'EPSG','4497','EPSG','4267','EPSG','10503',NULL,0); INSERT INTO "usage" VALUES('EPSG','6595','projected_crs','EPSG','26755','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26756','NAD27 / Connecticut',NULL,'EPSG','4497','EPSG','4267','EPSG','10600',NULL,0); INSERT INTO "usage" VALUES('EPSG','6596','projected_crs','EPSG','26756','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26757','NAD27 / Delaware',NULL,'EPSG','4497','EPSG','4267','EPSG','10700',NULL,0); INSERT INTO "usage" VALUES('EPSG','6597','projected_crs','EPSG','26757','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26758','NAD27 / Florida East',NULL,'EPSG','4497','EPSG','4267','EPSG','10901',NULL,0); INSERT INTO "usage" VALUES('EPSG','6598','projected_crs','EPSG','26758','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26759','NAD27 / Florida West',NULL,'EPSG','4497','EPSG','4267','EPSG','10902',NULL,0); INSERT INTO "usage" VALUES('EPSG','6599','projected_crs','EPSG','26759','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26760','NAD27 / Florida North',NULL,'EPSG','4497','EPSG','4267','EPSG','10903',NULL,0); INSERT INTO "usage" VALUES('EPSG','6600','projected_crs','EPSG','26760','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26766','NAD27 / Georgia East',NULL,'EPSG','4497','EPSG','4267','EPSG','11001',NULL,0); INSERT INTO "usage" VALUES('EPSG','6601','projected_crs','EPSG','26766','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26767','NAD27 / Georgia West',NULL,'EPSG','4497','EPSG','4267','EPSG','11002',NULL,0); INSERT INTO "usage" VALUES('EPSG','6602','projected_crs','EPSG','26767','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26768','NAD27 / Idaho East',NULL,'EPSG','4497','EPSG','4267','EPSG','11101',NULL,0); INSERT INTO "usage" VALUES('EPSG','6603','projected_crs','EPSG','26768','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26769','NAD27 / Idaho Central',NULL,'EPSG','4497','EPSG','4267','EPSG','11102',NULL,0); INSERT INTO "usage" VALUES('EPSG','6604','projected_crs','EPSG','26769','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26770','NAD27 / Idaho West',NULL,'EPSG','4497','EPSG','4267','EPSG','11103',NULL,0); INSERT INTO "usage" VALUES('EPSG','6605','projected_crs','EPSG','26770','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26771','NAD27 / Illinois East',NULL,'EPSG','4497','EPSG','4267','EPSG','11201',NULL,0); INSERT INTO "usage" VALUES('EPSG','6606','projected_crs','EPSG','26771','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26772','NAD27 / Illinois West',NULL,'EPSG','4497','EPSG','4267','EPSG','11202',NULL,0); INSERT INTO "usage" VALUES('EPSG','6607','projected_crs','EPSG','26772','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26773','NAD27 / Indiana East',NULL,'EPSG','4497','EPSG','4267','EPSG','11301',NULL,0); INSERT INTO "usage" VALUES('EPSG','6608','projected_crs','EPSG','26773','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26774','NAD27 / Indiana West',NULL,'EPSG','4497','EPSG','4267','EPSG','11302',NULL,0); INSERT INTO "usage" VALUES('EPSG','6609','projected_crs','EPSG','26774','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26775','NAD27 / Iowa North',NULL,'EPSG','4497','EPSG','4267','EPSG','11401',NULL,0); INSERT INTO "usage" VALUES('EPSG','6610','projected_crs','EPSG','26775','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26776','NAD27 / Iowa South',NULL,'EPSG','4497','EPSG','4267','EPSG','11402',NULL,0); INSERT INTO "usage" VALUES('EPSG','6611','projected_crs','EPSG','26776','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26777','NAD27 / Kansas North',NULL,'EPSG','4497','EPSG','4267','EPSG','11501',NULL,0); INSERT INTO "usage" VALUES('EPSG','6612','projected_crs','EPSG','26777','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26778','NAD27 / Kansas South',NULL,'EPSG','4497','EPSG','4267','EPSG','11502',NULL,0); INSERT INTO "usage" VALUES('EPSG','6613','projected_crs','EPSG','26778','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26779','NAD27 / Kentucky North',NULL,'EPSG','4497','EPSG','4267','EPSG','11601',NULL,0); INSERT INTO "usage" VALUES('EPSG','6614','projected_crs','EPSG','26779','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26780','NAD27 / Kentucky South',NULL,'EPSG','4497','EPSG','4267','EPSG','11602',NULL,0); INSERT INTO "usage" VALUES('EPSG','6615','projected_crs','EPSG','26780','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26781','NAD27 / Louisiana North',NULL,'EPSG','4497','EPSG','4267','EPSG','11701',NULL,0); INSERT INTO "usage" VALUES('EPSG','6616','projected_crs','EPSG','26781','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26782','NAD27 / Louisiana South',NULL,'EPSG','4497','EPSG','4267','EPSG','11702',NULL,0); INSERT INTO "usage" VALUES('EPSG','6617','projected_crs','EPSG','26782','EPSG','2205','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26783','NAD27 / Maine East',NULL,'EPSG','4497','EPSG','4267','EPSG','11801',NULL,0); INSERT INTO "usage" VALUES('EPSG','6618','projected_crs','EPSG','26783','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26784','NAD27 / Maine West',NULL,'EPSG','4497','EPSG','4267','EPSG','11802',NULL,0); INSERT INTO "usage" VALUES('EPSG','6619','projected_crs','EPSG','26784','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26785','NAD27 / Maryland',NULL,'EPSG','4497','EPSG','4267','EPSG','11900',NULL,0); INSERT INTO "usage" VALUES('EPSG','6620','projected_crs','EPSG','26785','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26786','NAD27 / Massachusetts Mainland',NULL,'EPSG','4497','EPSG','4267','EPSG','12001',NULL,0); INSERT INTO "usage" VALUES('EPSG','6621','projected_crs','EPSG','26786','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26787','NAD27 / Massachusetts Island',NULL,'EPSG','4497','EPSG','4267','EPSG','12002',NULL,0); INSERT INTO "usage" VALUES('EPSG','6622','projected_crs','EPSG','26787','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26791','NAD27 / Minnesota North',NULL,'EPSG','4497','EPSG','4267','EPSG','12201',NULL,0); INSERT INTO "usage" VALUES('EPSG','6623','projected_crs','EPSG','26791','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26792','NAD27 / Minnesota Central',NULL,'EPSG','4497','EPSG','4267','EPSG','12202',NULL,0); INSERT INTO "usage" VALUES('EPSG','6624','projected_crs','EPSG','26792','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26793','NAD27 / Minnesota South',NULL,'EPSG','4497','EPSG','4267','EPSG','12203',NULL,0); INSERT INTO "usage" VALUES('EPSG','6625','projected_crs','EPSG','26793','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26794','NAD27 / Mississippi East',NULL,'EPSG','4497','EPSG','4267','EPSG','12301',NULL,0); INSERT INTO "usage" VALUES('EPSG','6626','projected_crs','EPSG','26794','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26795','NAD27 / Mississippi West',NULL,'EPSG','4497','EPSG','4267','EPSG','12302',NULL,0); INSERT INTO "usage" VALUES('EPSG','6627','projected_crs','EPSG','26795','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26796','NAD27 / Missouri East',NULL,'EPSG','4497','EPSG','4267','EPSG','12401',NULL,0); INSERT INTO "usage" VALUES('EPSG','6628','projected_crs','EPSG','26796','EPSG','2219','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26797','NAD27 / Missouri Central',NULL,'EPSG','4497','EPSG','4267','EPSG','12402',NULL,0); INSERT INTO "usage" VALUES('EPSG','6629','projected_crs','EPSG','26797','EPSG','2218','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26798','NAD27 / Missouri West',NULL,'EPSG','4497','EPSG','4267','EPSG','12403',NULL,0); INSERT INTO "usage" VALUES('EPSG','6630','projected_crs','EPSG','26798','EPSG','2220','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26799','NAD27 / California zone VII',NULL,'EPSG','4497','EPSG','4267','EPSG','10408',NULL,0); INSERT INTO "usage" VALUES('EPSG','6631','projected_crs','EPSG','26799','EPSG','2181','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26801','NAD Michigan / Michigan East',NULL,'EPSG','4497','EPSG','4268','EPSG','12101',NULL,1); INSERT INTO "usage" VALUES('EPSG','6632','projected_crs','EPSG','26801','EPSG','1720','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26802','NAD Michigan / Michigan Old Central',NULL,'EPSG','4497','EPSG','4268','EPSG','12102',NULL,1); INSERT INTO "usage" VALUES('EPSG','6633','projected_crs','EPSG','26802','EPSG','1721','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26803','NAD Michigan / Michigan West',NULL,'EPSG','4497','EPSG','4268','EPSG','12103',NULL,1); INSERT INTO "usage" VALUES('EPSG','6634','projected_crs','EPSG','26803','EPSG','3652','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26811','NAD Michigan / Michigan North',NULL,'EPSG','4497','EPSG','4268','EPSG','12111',NULL,1); INSERT INTO "usage" VALUES('EPSG','6635','projected_crs','EPSG','26811','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26812','NAD Michigan / Michigan Central',NULL,'EPSG','4497','EPSG','4268','EPSG','12112',NULL,1); INSERT INTO "usage" VALUES('EPSG','6636','projected_crs','EPSG','26812','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26813','NAD Michigan / Michigan South',NULL,'EPSG','4497','EPSG','4268','EPSG','12113',NULL,1); INSERT INTO "usage" VALUES('EPSG','6637','projected_crs','EPSG','26813','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26814','NAD83 / Maine East (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','11833',NULL,1); INSERT INTO "usage" VALUES('EPSG','6638','projected_crs','EPSG','26814','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26815','NAD83 / Maine West (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','11834',NULL,1); INSERT INTO "usage" VALUES('EPSG','6639','projected_crs','EPSG','26815','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26819','NAD83 / Minnesota North (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','12234',NULL,1); INSERT INTO "usage" VALUES('EPSG','6640','projected_crs','EPSG','26819','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26820','NAD83 / Minnesota Central (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','12235',NULL,1); INSERT INTO "usage" VALUES('EPSG','6641','projected_crs','EPSG','26820','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26821','NAD83 / Minnesota South (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','12236',NULL,1); INSERT INTO "usage" VALUES('EPSG','6642','projected_crs','EPSG','26821','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26822','NAD83 / Nebraska (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','15396',NULL,1); INSERT INTO "usage" VALUES('EPSG','6643','projected_crs','EPSG','26822','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26823','NAD83 / West Virginia North (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','14733',NULL,1); INSERT INTO "usage" VALUES('EPSG','6644','projected_crs','EPSG','26823','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26824','NAD83 / West Virginia South (ftUS)',NULL,'EPSG','4499','EPSG','4269','EPSG','14734',NULL,1); INSERT INTO "usage" VALUES('EPSG','6645','projected_crs','EPSG','26824','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26825','NAD83(HARN) / Maine East (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','11833',NULL,1); INSERT INTO "usage" VALUES('EPSG','6646','projected_crs','EPSG','26825','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26826','NAD83(HARN) / Maine West (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','11834',NULL,1); INSERT INTO "usage" VALUES('EPSG','6647','projected_crs','EPSG','26826','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26830','NAD83(HARN) / Minnesota North (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','12234',NULL,1); INSERT INTO "usage" VALUES('EPSG','6648','projected_crs','EPSG','26830','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26831','NAD83(HARN) / Minnesota Central (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','12235',NULL,1); INSERT INTO "usage" VALUES('EPSG','6649','projected_crs','EPSG','26831','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26832','NAD83(HARN) / Minnesota South (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','12236',NULL,1); INSERT INTO "usage" VALUES('EPSG','6650','projected_crs','EPSG','26832','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26833','NAD83(HARN) / Nebraska (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','15396',NULL,1); INSERT INTO "usage" VALUES('EPSG','6651','projected_crs','EPSG','26833','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26834','NAD83(HARN) / West Virginia North (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','14733',NULL,1); INSERT INTO "usage" VALUES('EPSG','6652','projected_crs','EPSG','26834','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26835','NAD83(HARN) / West Virginia South (ftUS)',NULL,'EPSG','4499','EPSG','4152','EPSG','14734',NULL,1); INSERT INTO "usage" VALUES('EPSG','6653','projected_crs','EPSG','26835','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26836','NAD83(NSRS2007) / Maine East (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','11833',NULL,1); INSERT INTO "usage" VALUES('EPSG','6654','projected_crs','EPSG','26836','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26837','NAD83(NSRS2007) / Maine West (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','11834',NULL,1); INSERT INTO "usage" VALUES('EPSG','6655','projected_crs','EPSG','26837','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26841','NAD83(NSRS2007) / Minnesota North (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','12234',NULL,1); INSERT INTO "usage" VALUES('EPSG','6656','projected_crs','EPSG','26841','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26842','NAD83(NSRS2007) / Minnesota Central (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','12235',NULL,1); INSERT INTO "usage" VALUES('EPSG','6657','projected_crs','EPSG','26842','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26843','NAD83(NSRS2007) / Minnesota South (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','12236',NULL,1); INSERT INTO "usage" VALUES('EPSG','6658','projected_crs','EPSG','26843','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26844','NAD83(NSRS2007) / Nebraska (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','15396',NULL,1); INSERT INTO "usage" VALUES('EPSG','6659','projected_crs','EPSG','26844','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26845','NAD83(NSRS2007) / West Virginia North (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','14733',NULL,1); INSERT INTO "usage" VALUES('EPSG','6660','projected_crs','EPSG','26845','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26846','NAD83(NSRS2007) / West Virginia South (ftUS)',NULL,'EPSG','4499','EPSG','4759','EPSG','14734',NULL,1); INSERT INTO "usage" VALUES('EPSG','6661','projected_crs','EPSG','26846','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26847','NAD83 / Maine East (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','11833',NULL,0); INSERT INTO "usage" VALUES('EPSG','6662','projected_crs','EPSG','26847','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26848','NAD83 / Maine West (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','11834',NULL,0); INSERT INTO "usage" VALUES('EPSG','6663','projected_crs','EPSG','26848','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26849','NAD83 / Minnesota North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','12234',NULL,0); INSERT INTO "usage" VALUES('EPSG','6664','projected_crs','EPSG','26849','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26850','NAD83 / Minnesota Central (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','12235',NULL,0); INSERT INTO "usage" VALUES('EPSG','6665','projected_crs','EPSG','26850','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26851','NAD83 / Minnesota South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','12236',NULL,0); INSERT INTO "usage" VALUES('EPSG','6666','projected_crs','EPSG','26851','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26852','NAD83 / Nebraska (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15396',NULL,0); INSERT INTO "usage" VALUES('EPSG','6667','projected_crs','EPSG','26852','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26853','NAD83 / West Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','14735',NULL,0); INSERT INTO "usage" VALUES('EPSG','6668','projected_crs','EPSG','26853','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26854','NAD83 / West Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','14736',NULL,0); INSERT INTO "usage" VALUES('EPSG','6669','projected_crs','EPSG','26854','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26855','NAD83(HARN) / Maine East (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','11833',NULL,0); INSERT INTO "usage" VALUES('EPSG','6670','projected_crs','EPSG','26855','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26856','NAD83(HARN) / Maine West (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','11834',NULL,0); INSERT INTO "usage" VALUES('EPSG','6671','projected_crs','EPSG','26856','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26857','NAD83(HARN) / Minnesota North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','12234',NULL,0); INSERT INTO "usage" VALUES('EPSG','6672','projected_crs','EPSG','26857','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26858','NAD83(HARN) / Minnesota Central (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','12235',NULL,0); INSERT INTO "usage" VALUES('EPSG','6673','projected_crs','EPSG','26858','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26859','NAD83(HARN) / Minnesota South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','12236',NULL,0); INSERT INTO "usage" VALUES('EPSG','6674','projected_crs','EPSG','26859','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26860','NAD83(HARN) / Nebraska (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','15396',NULL,0); INSERT INTO "usage" VALUES('EPSG','6675','projected_crs','EPSG','26860','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26861','NAD83(HARN) / West Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','14735',NULL,0); INSERT INTO "usage" VALUES('EPSG','6676','projected_crs','EPSG','26861','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26862','NAD83(HARN) / West Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','4152','EPSG','14736',NULL,0); INSERT INTO "usage" VALUES('EPSG','6677','projected_crs','EPSG','26862','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26863','NAD83(NSRS2007) / Maine East (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','11833',NULL,0); INSERT INTO "usage" VALUES('EPSG','6678','projected_crs','EPSG','26863','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26864','NAD83(NSRS2007) / Maine West (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','11834',NULL,0); INSERT INTO "usage" VALUES('EPSG','6679','projected_crs','EPSG','26864','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26865','NAD83(NSRS2007) / Minnesota North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','12234',NULL,0); INSERT INTO "usage" VALUES('EPSG','6680','projected_crs','EPSG','26865','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26866','NAD83(NSRS2007) / Minnesota Central (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','12235',NULL,0); INSERT INTO "usage" VALUES('EPSG','6681','projected_crs','EPSG','26866','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26867','NAD83(NSRS2007) / Minnesota South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','12236',NULL,0); INSERT INTO "usage" VALUES('EPSG','6682','projected_crs','EPSG','26867','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26868','NAD83(NSRS2007) / Nebraska (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','15396',NULL,0); INSERT INTO "usage" VALUES('EPSG','6683','projected_crs','EPSG','26868','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26869','NAD83(NSRS2007) / West Virginia North (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','14735',NULL,0); INSERT INTO "usage" VALUES('EPSG','6684','projected_crs','EPSG','26869','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26870','NAD83(NSRS2007) / West Virginia South (ftUS)',NULL,'EPSG','4497','EPSG','4759','EPSG','14736',NULL,0); INSERT INTO "usage" VALUES('EPSG','6685','projected_crs','EPSG','26870','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26891','NAD83(CSRS) / MTM zone 11',NULL,'EPSG','4400','EPSG','4617','EPSG','17711',NULL,0); INSERT INTO "usage" VALUES('EPSG','6686','projected_crs','EPSG','26891','EPSG','1432','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26892','NAD83(CSRS) / MTM zone 12',NULL,'EPSG','4400','EPSG','4617','EPSG','17712',NULL,0); INSERT INTO "usage" VALUES('EPSG','6687','projected_crs','EPSG','26892','EPSG','1433','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26893','NAD83(CSRS) / MTM zone 13',NULL,'EPSG','4400','EPSG','4617','EPSG','17713',NULL,0); INSERT INTO "usage" VALUES('EPSG','6688','projected_crs','EPSG','26893','EPSG','1434','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26894','NAD83(CSRS) / MTM zone 14',NULL,'EPSG','4400','EPSG','4617','EPSG','17714',NULL,0); INSERT INTO "usage" VALUES('EPSG','6689','projected_crs','EPSG','26894','EPSG','1435','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26895','NAD83(CSRS) / MTM zone 15',NULL,'EPSG','4400','EPSG','4617','EPSG','17715',NULL,0); INSERT INTO "usage" VALUES('EPSG','6690','projected_crs','EPSG','26895','EPSG','1436','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26896','NAD83(CSRS) / MTM zone 16',NULL,'EPSG','4400','EPSG','4617','EPSG','17716',NULL,0); INSERT INTO "usage" VALUES('EPSG','6691','projected_crs','EPSG','26896','EPSG','1437','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26897','NAD83(CSRS) / MTM zone 17',NULL,'EPSG','4400','EPSG','4617','EPSG','17717',NULL,0); INSERT INTO "usage" VALUES('EPSG','6692','projected_crs','EPSG','26897','EPSG','1438','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26898','NAD83(CSRS) / MTM zone 1',NULL,'EPSG','4496','EPSG','4617','EPSG','17701',NULL,0); INSERT INTO "usage" VALUES('EPSG','6693','projected_crs','EPSG','26898','EPSG','2226','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26899','NAD83(CSRS) / MTM zone 2',NULL,'EPSG','4496','EPSG','4617','EPSG','17702',NULL,0); INSERT INTO "usage" VALUES('EPSG','6694','projected_crs','EPSG','26899','EPSG','2227','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26901','NAD83 / UTM zone 1N',NULL,'EPSG','4400','EPSG','4269','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('EPSG','6695','projected_crs','EPSG','26901','EPSG','3374','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26902','NAD83 / UTM zone 2N',NULL,'EPSG','4400','EPSG','4269','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('EPSG','6696','projected_crs','EPSG','26902','EPSG','3375','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26903','NAD83 / UTM zone 3N',NULL,'EPSG','4400','EPSG','4269','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('EPSG','6697','projected_crs','EPSG','26903','EPSG','2133','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26904','NAD83 / UTM zone 4N',NULL,'EPSG','4400','EPSG','4269','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','6698','projected_crs','EPSG','26904','EPSG','3489','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26905','NAD83 / UTM zone 5N',NULL,'EPSG','4400','EPSG','4269','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','6699','projected_crs','EPSG','26905','EPSG','3492','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26906','NAD83 / UTM zone 6N',NULL,'EPSG','4400','EPSG','4269','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('EPSG','6700','projected_crs','EPSG','26906','EPSG','2136','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26907','NAD83 / UTM zone 7N',NULL,'EPSG','4400','EPSG','4269','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','6701','projected_crs','EPSG','26907','EPSG','3872','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26908','NAD83 / UTM zone 8N',NULL,'EPSG','4400','EPSG','4269','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','6702','projected_crs','EPSG','26908','EPSG','3867','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26909','NAD83 / UTM zone 9N',NULL,'EPSG','4400','EPSG','4269','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','6703','projected_crs','EPSG','26909','EPSG','3866','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26910','NAD83 / UTM zone 10N',NULL,'EPSG','4400','EPSG','4269','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','6704','projected_crs','EPSG','26910','EPSG','3864','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26911','NAD83 / UTM zone 11N',NULL,'EPSG','4400','EPSG','4269','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','6705','projected_crs','EPSG','26911','EPSG','3404','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26912','NAD83 / UTM zone 12N',NULL,'EPSG','4400','EPSG','4269','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','6706','projected_crs','EPSG','26912','EPSG','3405','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26913','NAD83 / UTM zone 13N',NULL,'EPSG','4400','EPSG','4269','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','6707','projected_crs','EPSG','26913','EPSG','3406','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26914','NAD83 / UTM zone 14N',NULL,'EPSG','4400','EPSG','4269','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','6708','projected_crs','EPSG','26914','EPSG','3407','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26915','NAD83 / UTM zone 15N',NULL,'EPSG','4400','EPSG','4269','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','6709','projected_crs','EPSG','26915','EPSG','3114','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26916','NAD83 / UTM zone 16N',NULL,'EPSG','4400','EPSG','4269','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','6710','projected_crs','EPSG','26916','EPSG','3115','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26917','NAD83 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4269','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','6711','projected_crs','EPSG','26917','EPSG','3116','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26918','NAD83 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4269','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','6712','projected_crs','EPSG','26918','EPSG','3117','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26919','NAD83 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4269','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','6713','projected_crs','EPSG','26919','EPSG','3419','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26920','NAD83 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4269','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','6714','projected_crs','EPSG','26920','EPSG','3420','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26921','NAD83 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4269','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','6715','projected_crs','EPSG','26921','EPSG','2151','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26922','NAD83 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4269','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','6716','projected_crs','EPSG','26922','EPSG','2152','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26923','NAD83 / UTM zone 23N',NULL,'EPSG','4400','EPSG','4269','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','6717','projected_crs','EPSG','26923','EPSG','2153','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26929','NAD83 / Alabama East',NULL,'EPSG','4499','EPSG','4269','EPSG','10131',NULL,0); INSERT INTO "usage" VALUES('EPSG','6718','projected_crs','EPSG','26929','EPSG','2154','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26930','NAD83 / Alabama West',NULL,'EPSG','4499','EPSG','4269','EPSG','10132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6719','projected_crs','EPSG','26930','EPSG','2155','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26931','NAD83 / Alaska zone 1',NULL,'EPSG','4499','EPSG','4269','EPSG','15031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6720','projected_crs','EPSG','26931','EPSG','2156','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26932','NAD83 / Alaska zone 2',NULL,'EPSG','4499','EPSG','4269','EPSG','15032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6721','projected_crs','EPSG','26932','EPSG','2158','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26933','NAD83 / Alaska zone 3',NULL,'EPSG','4499','EPSG','4269','EPSG','15033',NULL,0); INSERT INTO "usage" VALUES('EPSG','6722','projected_crs','EPSG','26933','EPSG','2159','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26934','NAD83 / Alaska zone 4',NULL,'EPSG','4499','EPSG','4269','EPSG','15034',NULL,0); INSERT INTO "usage" VALUES('EPSG','6723','projected_crs','EPSG','26934','EPSG','2160','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26935','NAD83 / Alaska zone 5',NULL,'EPSG','4499','EPSG','4269','EPSG','15035',NULL,0); INSERT INTO "usage" VALUES('EPSG','6724','projected_crs','EPSG','26935','EPSG','2161','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26936','NAD83 / Alaska zone 6',NULL,'EPSG','4499','EPSG','4269','EPSG','15036',NULL,0); INSERT INTO "usage" VALUES('EPSG','6725','projected_crs','EPSG','26936','EPSG','2162','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26937','NAD83 / Alaska zone 7',NULL,'EPSG','4499','EPSG','4269','EPSG','15037',NULL,0); INSERT INTO "usage" VALUES('EPSG','6726','projected_crs','EPSG','26937','EPSG','2163','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26938','NAD83 / Alaska zone 8',NULL,'EPSG','4499','EPSG','4269','EPSG','15038',NULL,0); INSERT INTO "usage" VALUES('EPSG','6727','projected_crs','EPSG','26938','EPSG','2164','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26939','NAD83 / Alaska zone 9',NULL,'EPSG','4499','EPSG','4269','EPSG','15039',NULL,0); INSERT INTO "usage" VALUES('EPSG','6728','projected_crs','EPSG','26939','EPSG','2165','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26940','NAD83 / Alaska zone 10',NULL,'EPSG','4499','EPSG','4269','EPSG','15040',NULL,0); INSERT INTO "usage" VALUES('EPSG','6729','projected_crs','EPSG','26940','EPSG','2157','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26941','NAD83 / California zone 1',NULL,'EPSG','4499','EPSG','4269','EPSG','10431',NULL,0); INSERT INTO "usage" VALUES('EPSG','6730','projected_crs','EPSG','26941','EPSG','2175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26942','NAD83 / California zone 2',NULL,'EPSG','4499','EPSG','4269','EPSG','10432',NULL,0); INSERT INTO "usage" VALUES('EPSG','6731','projected_crs','EPSG','26942','EPSG','2176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26943','NAD83 / California zone 3',NULL,'EPSG','4499','EPSG','4269','EPSG','10433',NULL,0); INSERT INTO "usage" VALUES('EPSG','6732','projected_crs','EPSG','26943','EPSG','2177','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26944','NAD83 / California zone 4',NULL,'EPSG','4499','EPSG','4269','EPSG','10434',NULL,0); INSERT INTO "usage" VALUES('EPSG','6733','projected_crs','EPSG','26944','EPSG','2178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26945','NAD83 / California zone 5',NULL,'EPSG','4499','EPSG','4269','EPSG','10435',NULL,0); INSERT INTO "usage" VALUES('EPSG','6734','projected_crs','EPSG','26945','EPSG','2182','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26946','NAD83 / California zone 6',NULL,'EPSG','4499','EPSG','4269','EPSG','10436',NULL,0); INSERT INTO "usage" VALUES('EPSG','6735','projected_crs','EPSG','26946','EPSG','2180','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26948','NAD83 / Arizona East',NULL,'EPSG','4499','EPSG','4269','EPSG','10231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6736','projected_crs','EPSG','26948','EPSG','2167','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26949','NAD83 / Arizona Central',NULL,'EPSG','4499','EPSG','4269','EPSG','10232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6737','projected_crs','EPSG','26949','EPSG','2166','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26950','NAD83 / Arizona West',NULL,'EPSG','4499','EPSG','4269','EPSG','10233',NULL,0); INSERT INTO "usage" VALUES('EPSG','6738','projected_crs','EPSG','26950','EPSG','2168','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26951','NAD83 / Arkansas North',NULL,'EPSG','4499','EPSG','4269','EPSG','10331',NULL,0); INSERT INTO "usage" VALUES('EPSG','6739','projected_crs','EPSG','26951','EPSG','2169','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26952','NAD83 / Arkansas South',NULL,'EPSG','4499','EPSG','4269','EPSG','10332',NULL,0); INSERT INTO "usage" VALUES('EPSG','6740','projected_crs','EPSG','26952','EPSG','2170','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26953','NAD83 / Colorado North',NULL,'EPSG','4499','EPSG','4269','EPSG','10531',NULL,0); INSERT INTO "usage" VALUES('EPSG','6741','projected_crs','EPSG','26953','EPSG','2184','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26954','NAD83 / Colorado Central',NULL,'EPSG','4499','EPSG','4269','EPSG','10532',NULL,0); INSERT INTO "usage" VALUES('EPSG','6742','projected_crs','EPSG','26954','EPSG','2183','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26955','NAD83 / Colorado South',NULL,'EPSG','4499','EPSG','4269','EPSG','10533',NULL,0); INSERT INTO "usage" VALUES('EPSG','6743','projected_crs','EPSG','26955','EPSG','2185','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26956','NAD83 / Connecticut',NULL,'EPSG','4499','EPSG','4269','EPSG','10630',NULL,0); INSERT INTO "usage" VALUES('EPSG','6744','projected_crs','EPSG','26956','EPSG','1377','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26957','NAD83 / Delaware',NULL,'EPSG','4499','EPSG','4269','EPSG','10730',NULL,0); INSERT INTO "usage" VALUES('EPSG','6745','projected_crs','EPSG','26957','EPSG','1378','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26958','NAD83 / Florida East',NULL,'EPSG','4499','EPSG','4269','EPSG','10931',NULL,0); INSERT INTO "usage" VALUES('EPSG','6746','projected_crs','EPSG','26958','EPSG','2186','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26959','NAD83 / Florida West',NULL,'EPSG','4499','EPSG','4269','EPSG','10932',NULL,0); INSERT INTO "usage" VALUES('EPSG','6747','projected_crs','EPSG','26959','EPSG','2188','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26960','NAD83 / Florida North',NULL,'EPSG','4499','EPSG','4269','EPSG','10933',NULL,0); INSERT INTO "usage" VALUES('EPSG','6748','projected_crs','EPSG','26960','EPSG','2187','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26961','NAD83 / Hawaii zone 1',NULL,'EPSG','4499','EPSG','4269','EPSG','15131',NULL,0); INSERT INTO "usage" VALUES('EPSG','6749','projected_crs','EPSG','26961','EPSG','1546','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26962','NAD83 / Hawaii zone 2',NULL,'EPSG','4499','EPSG','4269','EPSG','15132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6750','projected_crs','EPSG','26962','EPSG','1547','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26963','NAD83 / Hawaii zone 3',NULL,'EPSG','4499','EPSG','4269','EPSG','15133',NULL,0); INSERT INTO "usage" VALUES('EPSG','6751','projected_crs','EPSG','26963','EPSG','1548','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26964','NAD83 / Hawaii zone 4',NULL,'EPSG','4499','EPSG','4269','EPSG','15134',NULL,0); INSERT INTO "usage" VALUES('EPSG','6752','projected_crs','EPSG','26964','EPSG','1549','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26965','NAD83 / Hawaii zone 5',NULL,'EPSG','4499','EPSG','4269','EPSG','15135',NULL,0); INSERT INTO "usage" VALUES('EPSG','6753','projected_crs','EPSG','26965','EPSG','1550','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26966','NAD83 / Georgia East',NULL,'EPSG','4499','EPSG','4269','EPSG','11031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6754','projected_crs','EPSG','26966','EPSG','2189','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26967','NAD83 / Georgia West',NULL,'EPSG','4499','EPSG','4269','EPSG','11032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6755','projected_crs','EPSG','26967','EPSG','2190','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26968','NAD83 / Idaho East',NULL,'EPSG','4499','EPSG','4269','EPSG','11131',NULL,0); INSERT INTO "usage" VALUES('EPSG','6756','projected_crs','EPSG','26968','EPSG','2192','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26969','NAD83 / Idaho Central',NULL,'EPSG','4499','EPSG','4269','EPSG','11132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6757','projected_crs','EPSG','26969','EPSG','2191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26970','NAD83 / Idaho West',NULL,'EPSG','4499','EPSG','4269','EPSG','11133',NULL,0); INSERT INTO "usage" VALUES('EPSG','6758','projected_crs','EPSG','26970','EPSG','2193','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26971','NAD83 / Illinois East',NULL,'EPSG','4499','EPSG','4269','EPSG','11231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6759','projected_crs','EPSG','26971','EPSG','2194','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26972','NAD83 / Illinois West',NULL,'EPSG','4499','EPSG','4269','EPSG','11232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6760','projected_crs','EPSG','26972','EPSG','2195','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26973','NAD83 / Indiana East',NULL,'EPSG','4499','EPSG','4269','EPSG','11331',NULL,0); INSERT INTO "usage" VALUES('EPSG','6761','projected_crs','EPSG','26973','EPSG','2196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26974','NAD83 / Indiana West',NULL,'EPSG','4499','EPSG','4269','EPSG','11332',NULL,0); INSERT INTO "usage" VALUES('EPSG','6762','projected_crs','EPSG','26974','EPSG','2197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26975','NAD83 / Iowa North',NULL,'EPSG','4499','EPSG','4269','EPSG','11431',NULL,0); INSERT INTO "usage" VALUES('EPSG','6763','projected_crs','EPSG','26975','EPSG','2198','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26976','NAD83 / Iowa South',NULL,'EPSG','4499','EPSG','4269','EPSG','11432',NULL,0); INSERT INTO "usage" VALUES('EPSG','6764','projected_crs','EPSG','26976','EPSG','2199','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26977','NAD83 / Kansas North',NULL,'EPSG','4499','EPSG','4269','EPSG','11531',NULL,0); INSERT INTO "usage" VALUES('EPSG','6765','projected_crs','EPSG','26977','EPSG','2200','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26978','NAD83 / Kansas South',NULL,'EPSG','4499','EPSG','4269','EPSG','11532',NULL,0); INSERT INTO "usage" VALUES('EPSG','6766','projected_crs','EPSG','26978','EPSG','2201','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26979','NAD83 / Kentucky North',NULL,'EPSG','4499','EPSG','4269','EPSG','11631',NULL,1); INSERT INTO "usage" VALUES('EPSG','6767','projected_crs','EPSG','26979','EPSG','2202','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26980','NAD83 / Kentucky South',NULL,'EPSG','4499','EPSG','4269','EPSG','11632',NULL,0); INSERT INTO "usage" VALUES('EPSG','6768','projected_crs','EPSG','26980','EPSG','2203','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26981','NAD83 / Louisiana North',NULL,'EPSG','4499','EPSG','4269','EPSG','11731',NULL,0); INSERT INTO "usage" VALUES('EPSG','6769','projected_crs','EPSG','26981','EPSG','2204','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26982','NAD83 / Louisiana South',NULL,'EPSG','4499','EPSG','4269','EPSG','11732',NULL,0); INSERT INTO "usage" VALUES('EPSG','6770','projected_crs','EPSG','26982','EPSG','2529','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26983','NAD83 / Maine East',NULL,'EPSG','4499','EPSG','4269','EPSG','11831',NULL,0); INSERT INTO "usage" VALUES('EPSG','6771','projected_crs','EPSG','26983','EPSG','2206','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26984','NAD83 / Maine West',NULL,'EPSG','4499','EPSG','4269','EPSG','11832',NULL,0); INSERT INTO "usage" VALUES('EPSG','6772','projected_crs','EPSG','26984','EPSG','2207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26985','NAD83 / Maryland',NULL,'EPSG','4499','EPSG','4269','EPSG','11930',NULL,0); INSERT INTO "usage" VALUES('EPSG','6773','projected_crs','EPSG','26985','EPSG','1389','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26986','NAD83 / Massachusetts Mainland',NULL,'EPSG','4499','EPSG','4269','EPSG','12031',NULL,0); INSERT INTO "usage" VALUES('EPSG','6774','projected_crs','EPSG','26986','EPSG','2209','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26987','NAD83 / Massachusetts Island',NULL,'EPSG','4499','EPSG','4269','EPSG','12032',NULL,0); INSERT INTO "usage" VALUES('EPSG','6775','projected_crs','EPSG','26987','EPSG','2208','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26988','NAD83 / Michigan North',NULL,'EPSG','4499','EPSG','4269','EPSG','12141',NULL,0); INSERT INTO "usage" VALUES('EPSG','6776','projected_crs','EPSG','26988','EPSG','1723','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26989','NAD83 / Michigan Central',NULL,'EPSG','4499','EPSG','4269','EPSG','12142',NULL,0); INSERT INTO "usage" VALUES('EPSG','6777','projected_crs','EPSG','26989','EPSG','1724','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26990','NAD83 / Michigan South',NULL,'EPSG','4499','EPSG','4269','EPSG','12143',NULL,0); INSERT INTO "usage" VALUES('EPSG','6778','projected_crs','EPSG','26990','EPSG','1725','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26991','NAD83 / Minnesota North',NULL,'EPSG','4499','EPSG','4269','EPSG','12231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6779','projected_crs','EPSG','26991','EPSG','2214','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26992','NAD83 / Minnesota Central',NULL,'EPSG','4499','EPSG','4269','EPSG','12232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6780','projected_crs','EPSG','26992','EPSG','2213','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26993','NAD83 / Minnesota South',NULL,'EPSG','4499','EPSG','4269','EPSG','12233',NULL,0); INSERT INTO "usage" VALUES('EPSG','6781','projected_crs','EPSG','26993','EPSG','2215','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26994','NAD83 / Mississippi East',NULL,'EPSG','4499','EPSG','4269','EPSG','12331',NULL,0); INSERT INTO "usage" VALUES('EPSG','6782','projected_crs','EPSG','26994','EPSG','2216','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26995','NAD83 / Mississippi West',NULL,'EPSG','4499','EPSG','4269','EPSG','12332',NULL,0); INSERT INTO "usage" VALUES('EPSG','6783','projected_crs','EPSG','26995','EPSG','2217','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26996','NAD83 / Missouri East',NULL,'EPSG','4499','EPSG','4269','EPSG','12431',NULL,0); INSERT INTO "usage" VALUES('EPSG','6784','projected_crs','EPSG','26996','EPSG','2219','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26997','NAD83 / Missouri Central',NULL,'EPSG','4499','EPSG','4269','EPSG','12432',NULL,0); INSERT INTO "usage" VALUES('EPSG','6785','projected_crs','EPSG','26997','EPSG','2218','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','26998','NAD83 / Missouri West',NULL,'EPSG','4499','EPSG','4269','EPSG','12433',NULL,0); INSERT INTO "usage" VALUES('EPSG','6786','projected_crs','EPSG','26998','EPSG','2220','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27037','Nahrwan 1967 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4270','EPSG','16037',NULL,1); INSERT INTO "usage" VALUES('EPSG','6787','projected_crs','EPSG','27037','EPSG','3387','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27038','Nahrwan 1967 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4270','EPSG','16038',NULL,1); INSERT INTO "usage" VALUES('EPSG','6788','projected_crs','EPSG','27038','EPSG','3386','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27039','Nahrwan 1967 / UTM zone 39N',NULL,'EPSG','4400','EPSG','4270','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','6789','projected_crs','EPSG','27039','EPSG','1749','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27040','Nahrwan 1967 / UTM zone 40N',NULL,'EPSG','4400','EPSG','4270','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','6790','projected_crs','EPSG','27040','EPSG','1750','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27120','Naparima 1972 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4271','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','6791','projected_crs','EPSG','27120','EPSG','1322','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27200','NZGD49 / New Zealand Map Grid',NULL,'EPSG','4400','EPSG','4272','EPSG','19917',NULL,0); INSERT INTO "usage" VALUES('EPSG','6792','projected_crs','EPSG','27200','EPSG','3973','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27205','NZGD49 / Mount Eden Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17901',NULL,0); INSERT INTO "usage" VALUES('EPSG','6793','projected_crs','EPSG','27205','EPSG','3781','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27206','NZGD49 / Bay of Plenty Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17902',NULL,0); INSERT INTO "usage" VALUES('EPSG','6794','projected_crs','EPSG','27206','EPSG','3779','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27207','NZGD49 / Poverty Bay Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17903',NULL,0); INSERT INTO "usage" VALUES('EPSG','6795','projected_crs','EPSG','27207','EPSG','3780','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27208','NZGD49 / Hawkes Bay Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17904',NULL,0); INSERT INTO "usage" VALUES('EPSG','6796','projected_crs','EPSG','27208','EPSG','3772','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27209','NZGD49 / Taranaki Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17905',NULL,0); INSERT INTO "usage" VALUES('EPSG','6797','projected_crs','EPSG','27209','EPSG','3777','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27210','NZGD49 / Tuhirangi Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17906',NULL,0); INSERT INTO "usage" VALUES('EPSG','6798','projected_crs','EPSG','27210','EPSG','3778','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27211','NZGD49 / Wanganui Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17907',NULL,0); INSERT INTO "usage" VALUES('EPSG','6799','projected_crs','EPSG','27211','EPSG','3776','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27212','NZGD49 / Wairarapa Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17908',NULL,0); INSERT INTO "usage" VALUES('EPSG','6800','projected_crs','EPSG','27212','EPSG','3775','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27213','NZGD49 / Wellington Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17909',NULL,0); INSERT INTO "usage" VALUES('EPSG','6801','projected_crs','EPSG','27213','EPSG','3774','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27214','NZGD49 / Collingwood Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17910',NULL,0); INSERT INTO "usage" VALUES('EPSG','6802','projected_crs','EPSG','27214','EPSG','3782','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27215','NZGD49 / Nelson Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17911',NULL,0); INSERT INTO "usage" VALUES('EPSG','6803','projected_crs','EPSG','27215','EPSG','3784','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27216','NZGD49 / Karamea Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17912',NULL,0); INSERT INTO "usage" VALUES('EPSG','6804','projected_crs','EPSG','27216','EPSG','3783','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27217','NZGD49 / Buller Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17913',NULL,0); INSERT INTO "usage" VALUES('EPSG','6805','projected_crs','EPSG','27217','EPSG','3786','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27218','NZGD49 / Grey Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17914',NULL,0); INSERT INTO "usage" VALUES('EPSG','6806','projected_crs','EPSG','27218','EPSG','3787','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27219','NZGD49 / Amuri Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17915',NULL,0); INSERT INTO "usage" VALUES('EPSG','6807','projected_crs','EPSG','27219','EPSG','3788','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27220','NZGD49 / Marlborough Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17916',NULL,0); INSERT INTO "usage" VALUES('EPSG','6808','projected_crs','EPSG','27220','EPSG','3785','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27221','NZGD49 / Hokitika Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17917',NULL,0); INSERT INTO "usage" VALUES('EPSG','6809','projected_crs','EPSG','27221','EPSG','3789','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27222','NZGD49 / Okarito Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17918',NULL,0); INSERT INTO "usage" VALUES('EPSG','6810','projected_crs','EPSG','27222','EPSG','3791','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27223','NZGD49 / Jacksons Bay Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17919',NULL,0); INSERT INTO "usage" VALUES('EPSG','6811','projected_crs','EPSG','27223','EPSG','3794','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27224','NZGD49 / Mount Pleasant Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17920',NULL,0); INSERT INTO "usage" VALUES('EPSG','6812','projected_crs','EPSG','27224','EPSG','3790','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27225','NZGD49 / Gawler Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17921',NULL,0); INSERT INTO "usage" VALUES('EPSG','6813','projected_crs','EPSG','27225','EPSG','3792','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27226','NZGD49 / Timaru Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17922',NULL,0); INSERT INTO "usage" VALUES('EPSG','6814','projected_crs','EPSG','27226','EPSG','3793','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27227','NZGD49 / Lindis Peak Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17923',NULL,0); INSERT INTO "usage" VALUES('EPSG','6815','projected_crs','EPSG','27227','EPSG','3795','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27228','NZGD49 / Mount Nicholas Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17924',NULL,0); INSERT INTO "usage" VALUES('EPSG','6816','projected_crs','EPSG','27228','EPSG','3797','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27229','NZGD49 / Mount York Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17925',NULL,0); INSERT INTO "usage" VALUES('EPSG','6817','projected_crs','EPSG','27229','EPSG','3799','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27230','NZGD49 / Observation Point Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17926',NULL,0); INSERT INTO "usage" VALUES('EPSG','6818','projected_crs','EPSG','27230','EPSG','3796','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27231','NZGD49 / North Taieri Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17927',NULL,0); INSERT INTO "usage" VALUES('EPSG','6819','projected_crs','EPSG','27231','EPSG','3798','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27232','NZGD49 / Bluff Circuit',NULL,'EPSG','4500','EPSG','4272','EPSG','17928',NULL,0); INSERT INTO "usage" VALUES('EPSG','6820','projected_crs','EPSG','27232','EPSG','3800','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','27258','NZGD49 / UTM zone 58S',NULL,'EPSG','4400','EPSG','4272','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','6821','projected_crs','EPSG','27258','EPSG','3970','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','27259','NZGD49 / UTM zone 59S',NULL,'EPSG','4400','EPSG','4272','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','6822','projected_crs','EPSG','27259','EPSG','3971','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','27260','NZGD49 / UTM zone 60S',NULL,'EPSG','4400','EPSG','4272','EPSG','16160',NULL,0); INSERT INTO "usage" VALUES('EPSG','6823','projected_crs','EPSG','27260','EPSG','3972','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','27291','NZGD49 / North Island Grid',NULL,'EPSG','4409','EPSG','4272','EPSG','18141',NULL,0); INSERT INTO "usage" VALUES('EPSG','6824','projected_crs','EPSG','27291','EPSG','1500','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27292','NZGD49 / South Island Grid',NULL,'EPSG','4409','EPSG','4272','EPSG','18142',NULL,0); INSERT INTO "usage" VALUES('EPSG','6825','projected_crs','EPSG','27292','EPSG','3344','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27391','NGO 1948 (Oslo) / NGO zone I',NULL,'EPSG','4531','EPSG','4817','EPSG','18221',NULL,0); INSERT INTO "usage" VALUES('EPSG','6826','projected_crs','EPSG','27391','EPSG','1741','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27392','NGO 1948 (Oslo) / NGO zone II',NULL,'EPSG','4531','EPSG','4817','EPSG','18222',NULL,0); INSERT INTO "usage" VALUES('EPSG','6827','projected_crs','EPSG','27392','EPSG','1742','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27393','NGO 1948 (Oslo) / NGO zone III',NULL,'EPSG','4531','EPSG','4817','EPSG','18223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6828','projected_crs','EPSG','27393','EPSG','1743','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27394','NGO 1948 (Oslo) / NGO zone IV',NULL,'EPSG','4531','EPSG','4817','EPSG','18224',NULL,0); INSERT INTO "usage" VALUES('EPSG','6829','projected_crs','EPSG','27394','EPSG','1744','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27395','NGO 1948 (Oslo) / NGO zone V',NULL,'EPSG','4531','EPSG','4817','EPSG','18225',NULL,0); INSERT INTO "usage" VALUES('EPSG','6830','projected_crs','EPSG','27395','EPSG','1745','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27396','NGO 1948 (Oslo) / NGO zone VI',NULL,'EPSG','4531','EPSG','4817','EPSG','18226',NULL,0); INSERT INTO "usage" VALUES('EPSG','6831','projected_crs','EPSG','27396','EPSG','1746','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27397','NGO 1948 (Oslo) / NGO zone VII',NULL,'EPSG','4531','EPSG','4817','EPSG','18227',NULL,0); INSERT INTO "usage" VALUES('EPSG','6832','projected_crs','EPSG','27397','EPSG','1747','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27398','NGO 1948 (Oslo) / NGO zone VIII',NULL,'EPSG','4531','EPSG','4817','EPSG','18228',NULL,0); INSERT INTO "usage" VALUES('EPSG','6833','projected_crs','EPSG','27398','EPSG','1748','EPSG','1091'); INSERT INTO "projected_crs" VALUES('EPSG','27429','Datum 73 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4274','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','6834','projected_crs','EPSG','27429','EPSG','1294','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27492','Datum 73 / Modified Portuguese Grid',NULL,'EPSG','4530','EPSG','4274','EPSG','19974',NULL,1); INSERT INTO "usage" VALUES('EPSG','6835','projected_crs','EPSG','27492','EPSG','1294','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27493','Datum 73 / Modified Portuguese Grid',NULL,'EPSG','4499','EPSG','4274','EPSG','19974',NULL,0); INSERT INTO "usage" VALUES('EPSG','6836','projected_crs','EPSG','27493','EPSG','1294','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27500','ATF (Paris) / Nord de Guerre',NULL,'EPSG','4499','EPSG','4901','EPSG','19903',NULL,0); INSERT INTO "usage" VALUES('EPSG','6837','projected_crs','EPSG','27500','EPSG','1369','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27561','NTF (Paris) / Lambert Nord France',NULL,'EPSG','4499','EPSG','4807','EPSG','18091',NULL,0); INSERT INTO "usage" VALUES('EPSG','6838','projected_crs','EPSG','27561','EPSG','1731','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27562','NTF (Paris) / Lambert Centre France',NULL,'EPSG','4499','EPSG','4807','EPSG','18092',NULL,0); INSERT INTO "usage" VALUES('EPSG','6839','projected_crs','EPSG','27562','EPSG','1732','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27563','NTF (Paris) / Lambert Sud France',NULL,'EPSG','4499','EPSG','4807','EPSG','18093',NULL,0); INSERT INTO "usage" VALUES('EPSG','6840','projected_crs','EPSG','27563','EPSG','1733','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27564','NTF (Paris) / Lambert Corse',NULL,'EPSG','4499','EPSG','4807','EPSG','18094',NULL,0); INSERT INTO "usage" VALUES('EPSG','6841','projected_crs','EPSG','27564','EPSG','1327','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27571','NTF (Paris) / Lambert zone I',NULL,'EPSG','4499','EPSG','4807','EPSG','18081',NULL,0); INSERT INTO "usage" VALUES('EPSG','6842','projected_crs','EPSG','27571','EPSG','1731','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27572','NTF (Paris) / Lambert zone II',NULL,'EPSG','4499','EPSG','4807','EPSG','18082',NULL,0); INSERT INTO "usage" VALUES('EPSG','6843','projected_crs','EPSG','27572','EPSG','1734','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27573','NTF (Paris) / Lambert zone III',NULL,'EPSG','4499','EPSG','4807','EPSG','18083',NULL,0); INSERT INTO "usage" VALUES('EPSG','6844','projected_crs','EPSG','27573','EPSG','1733','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27574','NTF (Paris) / Lambert zone IV',NULL,'EPSG','4499','EPSG','4807','EPSG','18084',NULL,0); INSERT INTO "usage" VALUES('EPSG','6845','projected_crs','EPSG','27574','EPSG','1327','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27581','NTF (Paris) / France I',NULL,'EPSG','4499','EPSG','4807','EPSG','18081',NULL,1); INSERT INTO "usage" VALUES('EPSG','6846','projected_crs','EPSG','27581','EPSG','1731','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27582','NTF (Paris) / France II',NULL,'EPSG','4499','EPSG','4807','EPSG','18082',NULL,1); INSERT INTO "usage" VALUES('EPSG','6847','projected_crs','EPSG','27582','EPSG','1734','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27583','NTF (Paris) / France III',NULL,'EPSG','4499','EPSG','4807','EPSG','18083',NULL,1); INSERT INTO "usage" VALUES('EPSG','6848','projected_crs','EPSG','27583','EPSG','1733','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27584','NTF (Paris) / France IV',NULL,'EPSG','4499','EPSG','4807','EPSG','18084',NULL,1); INSERT INTO "usage" VALUES('EPSG','6849','projected_crs','EPSG','27584','EPSG','1327','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27591','NTF (Paris) / Nord France',NULL,'EPSG','4499','EPSG','4807','EPSG','18091',NULL,1); INSERT INTO "usage" VALUES('EPSG','6850','projected_crs','EPSG','27591','EPSG','1731','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27592','NTF (Paris) / Centre France',NULL,'EPSG','4499','EPSG','4807','EPSG','18092',NULL,1); INSERT INTO "usage" VALUES('EPSG','6851','projected_crs','EPSG','27592','EPSG','1732','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27593','NTF (Paris) / Sud France',NULL,'EPSG','4499','EPSG','4807','EPSG','18093',NULL,1); INSERT INTO "usage" VALUES('EPSG','6852','projected_crs','EPSG','27593','EPSG','1733','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27594','NTF (Paris) / Corse',NULL,'EPSG','4499','EPSG','4807','EPSG','18094',NULL,1); INSERT INTO "usage" VALUES('EPSG','6853','projected_crs','EPSG','27594','EPSG','1327','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27700','OSGB36 / British National Grid',NULL,'EPSG','4400','EPSG','4277','EPSG','19916',NULL,0); INSERT INTO "usage" VALUES('EPSG','6854','projected_crs','EPSG','27700','EPSG','4390','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','27701','WGS 84 / Equi7 Africa',NULL,'EPSG','4400','EPSG','4326','EPSG','17771',NULL,0); INSERT INTO "usage" VALUES('EPSG','20884','projected_crs','EPSG','27701','EPSG','4745','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','27702','WGS 84 / Equi7 Antarctica',NULL,'EPSG','1027','EPSG','4326','EPSG','17772',NULL,0); INSERT INTO "usage" VALUES('EPSG','20885','projected_crs','EPSG','27702','EPSG','4746','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','27703','WGS 84 / Equi7 Asia',NULL,'EPSG','4400','EPSG','4326','EPSG','17773',NULL,0); INSERT INTO "usage" VALUES('EPSG','20886','projected_crs','EPSG','27703','EPSG','4747','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','27704','WGS 84 / Equi7 Europe',NULL,'EPSG','4400','EPSG','4326','EPSG','17774',NULL,0); INSERT INTO "usage" VALUES('EPSG','20883','projected_crs','EPSG','27704','EPSG','4748','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','27705','WGS 84 / Equi7 North America',NULL,'EPSG','4400','EPSG','4326','EPSG','17775',NULL,0); INSERT INTO "usage" VALUES('EPSG','20887','projected_crs','EPSG','27705','EPSG','4749','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','27706','WGS 84 / Equi7 Oceania',NULL,'EPSG','4400','EPSG','4326','EPSG','17776',NULL,0); INSERT INTO "usage" VALUES('EPSG','20889','projected_crs','EPSG','27706','EPSG','4751','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','27707','WGS 84 / Equi7 South America',NULL,'EPSG','4400','EPSG','4326','EPSG','17777',NULL,0); INSERT INTO "usage" VALUES('EPSG','20895','projected_crs','EPSG','27707','EPSG','4750','EPSG','1287'); INSERT INTO "projected_crs" VALUES('EPSG','28191','Palestine 1923 / Palestine Grid',NULL,'EPSG','4400','EPSG','4281','EPSG','18201',NULL,0); INSERT INTO "usage" VALUES('EPSG','6855','projected_crs','EPSG','28191','EPSG','1356','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28192','Palestine 1923 / Palestine Belt',NULL,'EPSG','4400','EPSG','4281','EPSG','18202',NULL,0); INSERT INTO "usage" VALUES('EPSG','6856','projected_crs','EPSG','28192','EPSG','1356','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28193','Palestine 1923 / Israeli CS Grid',NULL,'EPSG','4400','EPSG','4281','EPSG','18203',NULL,0); INSERT INTO "usage" VALUES('EPSG','6857','projected_crs','EPSG','28193','EPSG','2603','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28232','Pointe Noire / UTM zone 32S',NULL,'EPSG','4400','EPSG','4282','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','6858','projected_crs','EPSG','28232','EPSG','1072','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28348','GDA94 / MGA zone 48',NULL,'EPSG','4400','EPSG','4283','EPSG','17348',NULL,0); INSERT INTO "usage" VALUES('EPSG','6859','projected_crs','EPSG','28348','EPSG','4191','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28349','GDA94 / MGA zone 49',NULL,'EPSG','4400','EPSG','4283','EPSG','17349',NULL,0); INSERT INTO "usage" VALUES('EPSG','6860','projected_crs','EPSG','28349','EPSG','4176','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28350','GDA94 / MGA zone 50',NULL,'EPSG','4400','EPSG','4283','EPSG','17350',NULL,0); INSERT INTO "usage" VALUES('EPSG','6861','projected_crs','EPSG','28350','EPSG','4178','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28351','GDA94 / MGA zone 51',NULL,'EPSG','4400','EPSG','4283','EPSG','17351',NULL,0); INSERT INTO "usage" VALUES('EPSG','6862','projected_crs','EPSG','28351','EPSG','1559','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28352','GDA94 / MGA zone 52',NULL,'EPSG','4400','EPSG','4283','EPSG','17352',NULL,0); INSERT INTO "usage" VALUES('EPSG','6863','projected_crs','EPSG','28352','EPSG','1560','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28353','GDA94 / MGA zone 53',NULL,'EPSG','4400','EPSG','4283','EPSG','17353',NULL,0); INSERT INTO "usage" VALUES('EPSG','6864','projected_crs','EPSG','28353','EPSG','1561','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28354','GDA94 / MGA zone 54',NULL,'EPSG','4400','EPSG','4283','EPSG','17354',NULL,0); INSERT INTO "usage" VALUES('EPSG','6865','projected_crs','EPSG','28354','EPSG','1562','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28355','GDA94 / MGA zone 55',NULL,'EPSG','4400','EPSG','4283','EPSG','17355',NULL,0); INSERT INTO "usage" VALUES('EPSG','6866','projected_crs','EPSG','28355','EPSG','1563','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28356','GDA94 / MGA zone 56',NULL,'EPSG','4400','EPSG','4283','EPSG','17356',NULL,0); INSERT INTO "usage" VALUES('EPSG','6867','projected_crs','EPSG','28356','EPSG','1564','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28357','GDA94 / MGA zone 57',NULL,'EPSG','4400','EPSG','4283','EPSG','17357',NULL,0); INSERT INTO "usage" VALUES('EPSG','6868','projected_crs','EPSG','28357','EPSG','4196','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28358','GDA94 / MGA zone 58',NULL,'EPSG','4400','EPSG','4283','EPSG','17358',NULL,0); INSERT INTO "usage" VALUES('EPSG','6869','projected_crs','EPSG','28358','EPSG','4175','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28402','Pulkovo 1942 / Gauss-Kruger zone 2',NULL,'EPSG','4530','EPSG','4284','EPSG','16202',NULL,1); INSERT INTO "usage" VALUES('EPSG','6870','projected_crs','EPSG','28402','EPSG','1805','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','28403','Pulkovo 1942 / Gauss-Kruger zone 3',NULL,'EPSG','4530','EPSG','4284','EPSG','16203',NULL,1); INSERT INTO "usage" VALUES('EPSG','6871','projected_crs','EPSG','28403','EPSG','1792','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','28404','Pulkovo 1942 / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4284','EPSG','16204',NULL,0); INSERT INTO "usage" VALUES('EPSG','6872','projected_crs','EPSG','28404','EPSG','1793','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28405','Pulkovo 1942 / Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4284','EPSG','16205',NULL,0); INSERT INTO "usage" VALUES('EPSG','6873','projected_crs','EPSG','28405','EPSG','1794','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28406','Pulkovo 1942 / Gauss-Kruger zone 6',NULL,'EPSG','4530','EPSG','4284','EPSG','16206',NULL,0); INSERT INTO "usage" VALUES('EPSG','6874','projected_crs','EPSG','28406','EPSG','1795','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28407','Pulkovo 1942 / Gauss-Kruger zone 7',NULL,'EPSG','4530','EPSG','4284','EPSG','16207',NULL,0); INSERT INTO "usage" VALUES('EPSG','6875','projected_crs','EPSG','28407','EPSG','1796','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28408','Pulkovo 1942 / Gauss-Kruger zone 8',NULL,'EPSG','4530','EPSG','4284','EPSG','16208',NULL,0); INSERT INTO "usage" VALUES('EPSG','6876','projected_crs','EPSG','28408','EPSG','1797','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28409','Pulkovo 1942 / Gauss-Kruger zone 9',NULL,'EPSG','4530','EPSG','4284','EPSG','16209',NULL,0); INSERT INTO "usage" VALUES('EPSG','6877','projected_crs','EPSG','28409','EPSG','1798','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28410','Pulkovo 1942 / Gauss-Kruger zone 10',NULL,'EPSG','4530','EPSG','4284','EPSG','16210',NULL,0); INSERT INTO "usage" VALUES('EPSG','6878','projected_crs','EPSG','28410','EPSG','1799','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28411','Pulkovo 1942 / Gauss-Kruger zone 11',NULL,'EPSG','4530','EPSG','4284','EPSG','16211',NULL,0); INSERT INTO "usage" VALUES('EPSG','6879','projected_crs','EPSG','28411','EPSG','1800','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28412','Pulkovo 1942 / Gauss-Kruger zone 12',NULL,'EPSG','4530','EPSG','4284','EPSG','16212',NULL,0); INSERT INTO "usage" VALUES('EPSG','6880','projected_crs','EPSG','28412','EPSG','1801','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28413','Pulkovo 1942 / Gauss-Kruger zone 13',NULL,'EPSG','4530','EPSG','4284','EPSG','16213',NULL,0); INSERT INTO "usage" VALUES('EPSG','6881','projected_crs','EPSG','28413','EPSG','1802','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28414','Pulkovo 1942 / Gauss-Kruger zone 14',NULL,'EPSG','4530','EPSG','4284','EPSG','16214',NULL,0); INSERT INTO "usage" VALUES('EPSG','6882','projected_crs','EPSG','28414','EPSG','1803','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28415','Pulkovo 1942 / Gauss-Kruger zone 15',NULL,'EPSG','4530','EPSG','4284','EPSG','16215',NULL,0); INSERT INTO "usage" VALUES('EPSG','6883','projected_crs','EPSG','28415','EPSG','1804','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28416','Pulkovo 1942 / Gauss-Kruger zone 16',NULL,'EPSG','4530','EPSG','4284','EPSG','16216',NULL,0); INSERT INTO "usage" VALUES('EPSG','6884','projected_crs','EPSG','28416','EPSG','1775','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28417','Pulkovo 1942 / Gauss-Kruger zone 17',NULL,'EPSG','4530','EPSG','4284','EPSG','16217',NULL,0); INSERT INTO "usage" VALUES('EPSG','6885','projected_crs','EPSG','28417','EPSG','1776','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28418','Pulkovo 1942 / Gauss-Kruger zone 18',NULL,'EPSG','4530','EPSG','4284','EPSG','16218',NULL,0); INSERT INTO "usage" VALUES('EPSG','6886','projected_crs','EPSG','28418','EPSG','1777','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28419','Pulkovo 1942 / Gauss-Kruger zone 19',NULL,'EPSG','4530','EPSG','4284','EPSG','16219',NULL,0); INSERT INTO "usage" VALUES('EPSG','6887','projected_crs','EPSG','28419','EPSG','1778','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28420','Pulkovo 1942 / Gauss-Kruger zone 20',NULL,'EPSG','4530','EPSG','4284','EPSG','16220',NULL,0); INSERT INTO "usage" VALUES('EPSG','6888','projected_crs','EPSG','28420','EPSG','1779','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28421','Pulkovo 1942 / Gauss-Kruger zone 21',NULL,'EPSG','4530','EPSG','4284','EPSG','16221',NULL,0); INSERT INTO "usage" VALUES('EPSG','6889','projected_crs','EPSG','28421','EPSG','1780','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28422','Pulkovo 1942 / Gauss-Kruger zone 22',NULL,'EPSG','4530','EPSG','4284','EPSG','16222',NULL,0); INSERT INTO "usage" VALUES('EPSG','6890','projected_crs','EPSG','28422','EPSG','1781','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28423','Pulkovo 1942 / Gauss-Kruger zone 23',NULL,'EPSG','4530','EPSG','4284','EPSG','16223',NULL,0); INSERT INTO "usage" VALUES('EPSG','6891','projected_crs','EPSG','28423','EPSG','1782','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28424','Pulkovo 1942 / Gauss-Kruger zone 24',NULL,'EPSG','4530','EPSG','4284','EPSG','16224',NULL,0); INSERT INTO "usage" VALUES('EPSG','6892','projected_crs','EPSG','28424','EPSG','1783','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28425','Pulkovo 1942 / Gauss-Kruger zone 25',NULL,'EPSG','4530','EPSG','4284','EPSG','16225',NULL,0); INSERT INTO "usage" VALUES('EPSG','6893','projected_crs','EPSG','28425','EPSG','1784','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28426','Pulkovo 1942 / Gauss-Kruger zone 26',NULL,'EPSG','4530','EPSG','4284','EPSG','16226',NULL,0); INSERT INTO "usage" VALUES('EPSG','6894','projected_crs','EPSG','28426','EPSG','1785','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28427','Pulkovo 1942 / Gauss-Kruger zone 27',NULL,'EPSG','4530','EPSG','4284','EPSG','16227',NULL,0); INSERT INTO "usage" VALUES('EPSG','6895','projected_crs','EPSG','28427','EPSG','1786','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28428','Pulkovo 1942 / Gauss-Kruger zone 28',NULL,'EPSG','4530','EPSG','4284','EPSG','16228',NULL,0); INSERT INTO "usage" VALUES('EPSG','6896','projected_crs','EPSG','28428','EPSG','1787','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28429','Pulkovo 1942 / Gauss-Kruger zone 29',NULL,'EPSG','4530','EPSG','4284','EPSG','16229',NULL,0); INSERT INTO "usage" VALUES('EPSG','6897','projected_crs','EPSG','28429','EPSG','1788','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28430','Pulkovo 1942 / Gauss-Kruger zone 30',NULL,'EPSG','4530','EPSG','4284','EPSG','16230',NULL,0); INSERT INTO "usage" VALUES('EPSG','6898','projected_crs','EPSG','28430','EPSG','1789','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28431','Pulkovo 1942 / Gauss-Kruger zone 31',NULL,'EPSG','4530','EPSG','4284','EPSG','16231',NULL,0); INSERT INTO "usage" VALUES('EPSG','6899','projected_crs','EPSG','28431','EPSG','1790','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28432','Pulkovo 1942 / Gauss-Kruger zone 32',NULL,'EPSG','4530','EPSG','4284','EPSG','16232',NULL,0); INSERT INTO "usage" VALUES('EPSG','6900','projected_crs','EPSG','28432','EPSG','1791','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','28462','Pulkovo 1942 / Gauss-Kruger 2N',NULL,'EPSG','4530','EPSG','4284','EPSG','16302',NULL,1); INSERT INTO "usage" VALUES('EPSG','6901','projected_crs','EPSG','28462','EPSG','1805','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28463','Pulkovo 1942 / Gauss-Kruger 3N',NULL,'EPSG','4530','EPSG','4284','EPSG','16303',NULL,1); INSERT INTO "usage" VALUES('EPSG','6902','projected_crs','EPSG','28463','EPSG','1792','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','28464','Pulkovo 1942 / Gauss-Kruger 4N',NULL,'EPSG','4530','EPSG','4284','EPSG','16304',NULL,1); INSERT INTO "usage" VALUES('EPSG','6903','projected_crs','EPSG','28464','EPSG','1793','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','28465','Pulkovo 1942 / Gauss-Kruger 5N',NULL,'EPSG','4530','EPSG','4284','EPSG','16305',NULL,1); INSERT INTO "usage" VALUES('EPSG','6904','projected_crs','EPSG','28465','EPSG','1794','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28466','Pulkovo 1942 / Gauss-Kruger 6N',NULL,'EPSG','4530','EPSG','4284','EPSG','16306',NULL,1); INSERT INTO "usage" VALUES('EPSG','6905','projected_crs','EPSG','28466','EPSG','1795','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28467','Pulkovo 1942 / Gauss-Kruger 7N',NULL,'EPSG','4530','EPSG','4284','EPSG','16307',NULL,1); INSERT INTO "usage" VALUES('EPSG','6906','projected_crs','EPSG','28467','EPSG','1796','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28468','Pulkovo 1942 / Gauss-Kruger 8N',NULL,'EPSG','4530','EPSG','4284','EPSG','16308',NULL,1); INSERT INTO "usage" VALUES('EPSG','6907','projected_crs','EPSG','28468','EPSG','1797','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28469','Pulkovo 1942 / Gauss-Kruger 9N',NULL,'EPSG','4530','EPSG','4284','EPSG','16309',NULL,1); INSERT INTO "usage" VALUES('EPSG','6908','projected_crs','EPSG','28469','EPSG','1798','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28470','Pulkovo 1942 / Gauss-Kruger 10N',NULL,'EPSG','4530','EPSG','4284','EPSG','16310',NULL,1); INSERT INTO "usage" VALUES('EPSG','6909','projected_crs','EPSG','28470','EPSG','1799','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28471','Pulkovo 1942 / Gauss-Kruger 11N',NULL,'EPSG','4530','EPSG','4284','EPSG','16311',NULL,1); INSERT INTO "usage" VALUES('EPSG','6910','projected_crs','EPSG','28471','EPSG','1800','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28472','Pulkovo 1942 / Gauss-Kruger 12N',NULL,'EPSG','4530','EPSG','4284','EPSG','16312',NULL,1); INSERT INTO "usage" VALUES('EPSG','6911','projected_crs','EPSG','28472','EPSG','1801','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28473','Pulkovo 1942 / Gauss-Kruger 13N',NULL,'EPSG','4530','EPSG','4284','EPSG','16313',NULL,1); INSERT INTO "usage" VALUES('EPSG','6912','projected_crs','EPSG','28473','EPSG','1802','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28474','Pulkovo 1942 / Gauss-Kruger 14N',NULL,'EPSG','4530','EPSG','4284','EPSG','16314',NULL,1); INSERT INTO "usage" VALUES('EPSG','6913','projected_crs','EPSG','28474','EPSG','1803','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28475','Pulkovo 1942 / Gauss-Kruger 15N',NULL,'EPSG','4530','EPSG','4284','EPSG','16315',NULL,1); INSERT INTO "usage" VALUES('EPSG','6914','projected_crs','EPSG','28475','EPSG','1804','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28476','Pulkovo 1942 / Gauss-Kruger 16N',NULL,'EPSG','4530','EPSG','4284','EPSG','16316',NULL,1); INSERT INTO "usage" VALUES('EPSG','6915','projected_crs','EPSG','28476','EPSG','1775','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28477','Pulkovo 1942 / Gauss-Kruger 17N',NULL,'EPSG','4530','EPSG','4284','EPSG','16317',NULL,1); INSERT INTO "usage" VALUES('EPSG','6916','projected_crs','EPSG','28477','EPSG','1776','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28478','Pulkovo 1942 / Gauss-Kruger 18N',NULL,'EPSG','4530','EPSG','4284','EPSG','16318',NULL,1); INSERT INTO "usage" VALUES('EPSG','6917','projected_crs','EPSG','28478','EPSG','1777','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28479','Pulkovo 1942 / Gauss-Kruger 19N',NULL,'EPSG','4530','EPSG','4284','EPSG','16319',NULL,1); INSERT INTO "usage" VALUES('EPSG','6918','projected_crs','EPSG','28479','EPSG','1778','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28480','Pulkovo 1942 / Gauss-Kruger 20N',NULL,'EPSG','4530','EPSG','4284','EPSG','16320',NULL,1); INSERT INTO "usage" VALUES('EPSG','6919','projected_crs','EPSG','28480','EPSG','1779','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28481','Pulkovo 1942 / Gauss-Kruger 21N',NULL,'EPSG','4530','EPSG','4284','EPSG','16321',NULL,1); INSERT INTO "usage" VALUES('EPSG','6920','projected_crs','EPSG','28481','EPSG','1780','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28482','Pulkovo 1942 / Gauss-Kruger 22N',NULL,'EPSG','4530','EPSG','4284','EPSG','16322',NULL,1); INSERT INTO "usage" VALUES('EPSG','6921','projected_crs','EPSG','28482','EPSG','1781','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28483','Pulkovo 1942 / Gauss-Kruger 23N',NULL,'EPSG','4530','EPSG','4284','EPSG','16323',NULL,1); INSERT INTO "usage" VALUES('EPSG','6922','projected_crs','EPSG','28483','EPSG','1782','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28484','Pulkovo 1942 / Gauss-Kruger 24N',NULL,'EPSG','4530','EPSG','4284','EPSG','16324',NULL,1); INSERT INTO "usage" VALUES('EPSG','6923','projected_crs','EPSG','28484','EPSG','1783','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28485','Pulkovo 1942 / Gauss-Kruger 25N',NULL,'EPSG','4530','EPSG','4284','EPSG','16325',NULL,1); INSERT INTO "usage" VALUES('EPSG','6924','projected_crs','EPSG','28485','EPSG','1784','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28486','Pulkovo 1942 / Gauss-Kruger 26N',NULL,'EPSG','4530','EPSG','4284','EPSG','16326',NULL,1); INSERT INTO "usage" VALUES('EPSG','6925','projected_crs','EPSG','28486','EPSG','1785','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28487','Pulkovo 1942 / Gauss-Kruger 27N',NULL,'EPSG','4530','EPSG','4284','EPSG','16327',NULL,1); INSERT INTO "usage" VALUES('EPSG','6926','projected_crs','EPSG','28487','EPSG','1786','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28488','Pulkovo 1942 / Gauss-Kruger 28N',NULL,'EPSG','4530','EPSG','4284','EPSG','16328',NULL,1); INSERT INTO "usage" VALUES('EPSG','6927','projected_crs','EPSG','28488','EPSG','1787','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28489','Pulkovo 1942 / Gauss-Kruger 29N',NULL,'EPSG','4530','EPSG','4284','EPSG','16329',NULL,1); INSERT INTO "usage" VALUES('EPSG','6928','projected_crs','EPSG','28489','EPSG','1788','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28490','Pulkovo 1942 / Gauss-Kruger 30N',NULL,'EPSG','4530','EPSG','4284','EPSG','16330',NULL,1); INSERT INTO "usage" VALUES('EPSG','6929','projected_crs','EPSG','28490','EPSG','1789','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28491','Pulkovo 1942 / Gauss-Kruger 31N',NULL,'EPSG','4530','EPSG','4284','EPSG','16331',NULL,1); INSERT INTO "usage" VALUES('EPSG','6930','projected_crs','EPSG','28491','EPSG','1790','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28492','Pulkovo 1942 / Gauss-Kruger 32N',NULL,'EPSG','4530','EPSG','4284','EPSG','16332',NULL,1); INSERT INTO "usage" VALUES('EPSG','6931','projected_crs','EPSG','28492','EPSG','1791','EPSG','1209'); INSERT INTO "projected_crs" VALUES('EPSG','28600','Qatar 1974 / Qatar National Grid',NULL,'EPSG','4400','EPSG','4285','EPSG','19919',NULL,0); INSERT INTO "usage" VALUES('EPSG','6932','projected_crs','EPSG','28600','EPSG','1346','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28991','Amersfoort / RD Old',NULL,'EPSG','4499','EPSG','4289','EPSG','19913',NULL,0); INSERT INTO "usage" VALUES('EPSG','6933','projected_crs','EPSG','28991','EPSG','1275','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','28992','Amersfoort / RD New',NULL,'EPSG','4499','EPSG','4289','EPSG','19914',NULL,0); INSERT INTO "usage" VALUES('EPSG','6934','projected_crs','EPSG','28992','EPSG','1275','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29100','SAD69 / Brazil Polyconic',NULL,'EPSG','4499','EPSG','4291','EPSG','19941',NULL,1); INSERT INTO "usage" VALUES('EPSG','6935','projected_crs','EPSG','29100','EPSG','1053','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','29101','SAD69 / Brazil Polyconic',NULL,'EPSG','4499','EPSG','4618','EPSG','19941',NULL,0); INSERT INTO "usage" VALUES('EPSG','6936','projected_crs','EPSG','29101','EPSG','1053','EPSG','1241'); INSERT INTO "projected_crs" VALUES('EPSG','29118','SAD69 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4291','EPSG','16018',NULL,1); INSERT INTO "usage" VALUES('EPSG','6937','projected_crs','EPSG','29118','EPSG','1807','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29119','SAD69 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4291','EPSG','16019',NULL,1); INSERT INTO "usage" VALUES('EPSG','6938','projected_crs','EPSG','29119','EPSG','1809','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29120','SAD69 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4291','EPSG','16020',NULL,1); INSERT INTO "usage" VALUES('EPSG','6939','projected_crs','EPSG','29120','EPSG','1811','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29121','SAD69 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4291','EPSG','16021',NULL,1); INSERT INTO "usage" VALUES('EPSG','6940','projected_crs','EPSG','29121','EPSG','1813','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29122','SAD69 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4291','EPSG','16022',NULL,1); INSERT INTO "usage" VALUES('EPSG','6941','projected_crs','EPSG','29122','EPSG','1815','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29168','SAD69 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4618','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','6942','projected_crs','EPSG','29168','EPSG','3832','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29169','SAD69 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4618','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','6943','projected_crs','EPSG','29169','EPSG','3834','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29170','SAD69 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4618','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','6944','projected_crs','EPSG','29170','EPSG','3839','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29171','SAD69 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4618','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','6945','projected_crs','EPSG','29171','EPSG','3841','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29172','SAD69 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4618','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','6946','projected_crs','EPSG','29172','EPSG','1815','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29177','SAD69 / UTM zone 17S',NULL,'EPSG','4400','EPSG','4291','EPSG','16117',NULL,1); INSERT INTO "usage" VALUES('EPSG','6947','projected_crs','EPSG','29177','EPSG','1806','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29178','SAD69 / UTM zone 18S',NULL,'EPSG','4400','EPSG','4291','EPSG','16118',NULL,1); INSERT INTO "usage" VALUES('EPSG','6948','projected_crs','EPSG','29178','EPSG','1808','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29179','SAD69 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4291','EPSG','16119',NULL,1); INSERT INTO "usage" VALUES('EPSG','6949','projected_crs','EPSG','29179','EPSG','1810','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29180','SAD69 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4291','EPSG','16120',NULL,1); INSERT INTO "usage" VALUES('EPSG','6950','projected_crs','EPSG','29180','EPSG','1812','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29181','SAD69 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4291','EPSG','16121',NULL,1); INSERT INTO "usage" VALUES('EPSG','6951','projected_crs','EPSG','29181','EPSG','1814','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29182','SAD69 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4291','EPSG','16122',NULL,1); INSERT INTO "usage" VALUES('EPSG','6952','projected_crs','EPSG','29182','EPSG','1816','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29183','SAD69 / UTM zone 23S',NULL,'EPSG','4400','EPSG','4291','EPSG','16123',NULL,1); INSERT INTO "usage" VALUES('EPSG','6953','projected_crs','EPSG','29183','EPSG','1817','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29184','SAD69 / UTM zone 24S',NULL,'EPSG','4400','EPSG','4291','EPSG','16124',NULL,1); INSERT INTO "usage" VALUES('EPSG','6954','projected_crs','EPSG','29184','EPSG','1818','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29185','SAD69 / UTM zone 25S',NULL,'EPSG','4400','EPSG','4291','EPSG','16125',NULL,1); INSERT INTO "usage" VALUES('EPSG','6955','projected_crs','EPSG','29185','EPSG','1819','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29187','SAD69 / UTM zone 17S',NULL,'EPSG','4400','EPSG','4618','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','6956','projected_crs','EPSG','29187','EPSG','3831','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29188','SAD69 / UTM zone 18S',NULL,'EPSG','4400','EPSG','4618','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','6957','projected_crs','EPSG','29188','EPSG','3833','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29189','SAD69 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4618','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','6958','projected_crs','EPSG','29189','EPSG','3835','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29190','SAD69 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4618','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','6959','projected_crs','EPSG','29190','EPSG','3840','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29191','SAD69 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4618','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','6960','projected_crs','EPSG','29191','EPSG','1814','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29192','SAD69 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4618','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','6961','projected_crs','EPSG','29192','EPSG','1816','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29193','SAD69 / UTM zone 23S',NULL,'EPSG','4400','EPSG','4618','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','6962','projected_crs','EPSG','29193','EPSG','3445','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29194','SAD69 / UTM zone 24S',NULL,'EPSG','4400','EPSG','4618','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','6963','projected_crs','EPSG','29194','EPSG','3446','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29195','SAD69 / UTM zone 25S',NULL,'EPSG','4400','EPSG','4618','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','6964','projected_crs','EPSG','29195','EPSG','3447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29220','Sapper Hill 1943 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4292','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','6965','projected_crs','EPSG','29220','EPSG','1820','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29221','Sapper Hill 1943 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4292','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','6966','projected_crs','EPSG','29221','EPSG','1821','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29333','Schwarzeck / UTM zone 33S',NULL,'EPSG','4400','EPSG','4293','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','6967','projected_crs','EPSG','29333','EPSG','1822','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29371','Schwarzeck / Lo22/11',NULL,'EPSG','6502','EPSG','4293','EPSG','17611',NULL,0); INSERT INTO "usage" VALUES('EPSG','6968','projected_crs','EPSG','29371','EPSG','1838','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29373','Schwarzeck / Lo22/13',NULL,'EPSG','6502','EPSG','4293','EPSG','17613',NULL,0); INSERT INTO "usage" VALUES('EPSG','6969','projected_crs','EPSG','29373','EPSG','1839','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29375','Schwarzeck / Lo22/15',NULL,'EPSG','6502','EPSG','4293','EPSG','17615',NULL,0); INSERT INTO "usage" VALUES('EPSG','6970','projected_crs','EPSG','29375','EPSG','1840','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29377','Schwarzeck / Lo22/17',NULL,'EPSG','6502','EPSG','4293','EPSG','17617',NULL,0); INSERT INTO "usage" VALUES('EPSG','6971','projected_crs','EPSG','29377','EPSG','1841','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29379','Schwarzeck / Lo22/19',NULL,'EPSG','6502','EPSG','4293','EPSG','17619',NULL,0); INSERT INTO "usage" VALUES('EPSG','6972','projected_crs','EPSG','29379','EPSG','1842','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29381','Schwarzeck / Lo22/21',NULL,'EPSG','6502','EPSG','4293','EPSG','17621',NULL,0); INSERT INTO "usage" VALUES('EPSG','6973','projected_crs','EPSG','29381','EPSG','1843','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29383','Schwarzeck / Lo22/23',NULL,'EPSG','6502','EPSG','4293','EPSG','17623',NULL,0); INSERT INTO "usage" VALUES('EPSG','6974','projected_crs','EPSG','29383','EPSG','1844','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29385','Schwarzeck / Lo22/25',NULL,'EPSG','6502','EPSG','4293','EPSG','17625',NULL,0); INSERT INTO "usage" VALUES('EPSG','6975','projected_crs','EPSG','29385','EPSG','1845','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','29635','Sudan / UTM zone 35N',NULL,'EPSG','4400','EPSG','4296','EPSG','16035',NULL,1); INSERT INTO "usage" VALUES('EPSG','6976','projected_crs','EPSG','29635','EPSG','1846','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29636','Sudan / UTM zone 36N',NULL,'EPSG','4400','EPSG','4296','EPSG','16036',NULL,1); INSERT INTO "usage" VALUES('EPSG','6977','projected_crs','EPSG','29636','EPSG','1847','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29700','Tananarive (Paris) / Laborde Grid',NULL,'EPSG','4499','EPSG','4810','EPSG','19911',NULL,1); INSERT INTO "usage" VALUES('EPSG','6978','projected_crs','EPSG','29700','EPSG','3273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29701','Tananarive (Paris) / Laborde Grid',NULL,'EPSG','4530','EPSG','4810','EPSG','19861',NULL,0); INSERT INTO "usage" VALUES('EPSG','6979','projected_crs','EPSG','29701','EPSG','3273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29702','Tananarive (Paris) / Laborde Grid approximation',NULL,'EPSG','4530','EPSG','4810','EPSG','19911',NULL,0); INSERT INTO "usage" VALUES('EPSG','6980','projected_crs','EPSG','29702','EPSG','3273','EPSG','1211'); INSERT INTO "projected_crs" VALUES('EPSG','29738','Tananarive / UTM zone 38S',NULL,'EPSG','4400','EPSG','4297','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','6981','projected_crs','EPSG','29738','EPSG','1848','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29739','Tananarive / UTM zone 39S',NULL,'EPSG','4400','EPSG','4297','EPSG','16139',NULL,0); INSERT INTO "usage" VALUES('EPSG','6982','projected_crs','EPSG','29739','EPSG','1849','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29849','Timbalai 1948 / UTM zone 49N',NULL,'EPSG','4400','EPSG','4298','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','6983','projected_crs','EPSG','29849','EPSG','1852','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29850','Timbalai 1948 / UTM zone 50N',NULL,'EPSG','4400','EPSG','4298','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('EPSG','6984','projected_crs','EPSG','29850','EPSG','1853','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29871','Timbalai 1948 / RSO Borneo (ch)',NULL,'EPSG','4402','EPSG','4298','EPSG','19956',NULL,0); INSERT INTO "usage" VALUES('EPSG','6985','projected_crs','EPSG','29871','EPSG','1362','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29872','Timbalai 1948 / RSO Borneo (ftSe)',NULL,'EPSG','4405','EPSG','4298','EPSG','19957',NULL,0); INSERT INTO "usage" VALUES('EPSG','6986','projected_crs','EPSG','29872','EPSG','3977','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','29873','Timbalai 1948 / RSO Borneo (m)',NULL,'EPSG','4400','EPSG','4298','EPSG','19958',NULL,0); INSERT INTO "usage" VALUES('EPSG','14397','projected_crs','EPSG','29873','EPSG','1362','EPSG','1149'); INSERT INTO "projected_crs" VALUES('EPSG','29874','Timbalai 1948 / RSO Sarawak LSD (m)',NULL,'EPSG','4400','EPSG','4298','EPSG','19838',NULL,0); INSERT INTO "usage" VALUES('EPSG','14400','projected_crs','EPSG','29874','EPSG','4611','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29900','TM65 / Irish National Grid',NULL,'EPSG','4400','EPSG','4299','EPSG','19908',NULL,1); INSERT INTO "usage" VALUES('EPSG','6988','projected_crs','EPSG','29900','EPSG','1305','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29901','OSNI 1952 / Irish National Grid',NULL,'EPSG','4400','EPSG','4188','EPSG','19973',NULL,0); INSERT INTO "usage" VALUES('EPSG','6989','projected_crs','EPSG','29901','EPSG','2530','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29902','TM65 / Irish Grid',NULL,'EPSG','4400','EPSG','4299','EPSG','19972',NULL,0); INSERT INTO "usage" VALUES('EPSG','6990','projected_crs','EPSG','29902','EPSG','3767','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','29903','TM75 / Irish Grid',NULL,'EPSG','4400','EPSG','4300','EPSG','19972',NULL,0); INSERT INTO "usage" VALUES('EPSG','6991','projected_crs','EPSG','29903','EPSG','1305','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30161','Tokyo / Japan Plane Rectangular CS I',NULL,'EPSG','4530','EPSG','4301','EPSG','17801',NULL,0); INSERT INTO "usage" VALUES('EPSG','6992','projected_crs','EPSG','30161','EPSG','1854','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30162','Tokyo / Japan Plane Rectangular CS II',NULL,'EPSG','4530','EPSG','4301','EPSG','17802',NULL,0); INSERT INTO "usage" VALUES('EPSG','6993','projected_crs','EPSG','30162','EPSG','1855','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30163','Tokyo / Japan Plane Rectangular CS III',NULL,'EPSG','4530','EPSG','4301','EPSG','17803',NULL,0); INSERT INTO "usage" VALUES('EPSG','6994','projected_crs','EPSG','30163','EPSG','1856','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30164','Tokyo / Japan Plane Rectangular CS IV',NULL,'EPSG','4530','EPSG','4301','EPSG','17804',NULL,0); INSERT INTO "usage" VALUES('EPSG','6995','projected_crs','EPSG','30164','EPSG','1857','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30165','Tokyo / Japan Plane Rectangular CS V',NULL,'EPSG','4530','EPSG','4301','EPSG','17805',NULL,0); INSERT INTO "usage" VALUES('EPSG','6996','projected_crs','EPSG','30165','EPSG','1858','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30166','Tokyo / Japan Plane Rectangular CS VI',NULL,'EPSG','4530','EPSG','4301','EPSG','17806',NULL,0); INSERT INTO "usage" VALUES('EPSG','6997','projected_crs','EPSG','30166','EPSG','1859','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30167','Tokyo / Japan Plane Rectangular CS VII',NULL,'EPSG','4530','EPSG','4301','EPSG','17807',NULL,0); INSERT INTO "usage" VALUES('EPSG','6998','projected_crs','EPSG','30167','EPSG','1860','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30168','Tokyo / Japan Plane Rectangular CS VIII',NULL,'EPSG','4530','EPSG','4301','EPSG','17808',NULL,0); INSERT INTO "usage" VALUES('EPSG','6999','projected_crs','EPSG','30168','EPSG','1861','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30169','Tokyo / Japan Plane Rectangular CS IX',NULL,'EPSG','4530','EPSG','4301','EPSG','17809',NULL,0); INSERT INTO "usage" VALUES('EPSG','7000','projected_crs','EPSG','30169','EPSG','1862','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30170','Tokyo / Japan Plane Rectangular CS X',NULL,'EPSG','4530','EPSG','4301','EPSG','17810',NULL,0); INSERT INTO "usage" VALUES('EPSG','7001','projected_crs','EPSG','30170','EPSG','1863','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30171','Tokyo / Japan Plane Rectangular CS XI',NULL,'EPSG','4530','EPSG','4301','EPSG','17811',NULL,0); INSERT INTO "usage" VALUES('EPSG','7002','projected_crs','EPSG','30171','EPSG','1864','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30172','Tokyo / Japan Plane Rectangular CS XII',NULL,'EPSG','4530','EPSG','4301','EPSG','17812',NULL,0); INSERT INTO "usage" VALUES('EPSG','7003','projected_crs','EPSG','30172','EPSG','1865','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30173','Tokyo / Japan Plane Rectangular CS XIII',NULL,'EPSG','4530','EPSG','4301','EPSG','17813',NULL,0); INSERT INTO "usage" VALUES('EPSG','7004','projected_crs','EPSG','30173','EPSG','1866','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30174','Tokyo / Japan Plane Rectangular CS XIV',NULL,'EPSG','4530','EPSG','4301','EPSG','17814',NULL,0); INSERT INTO "usage" VALUES('EPSG','7005','projected_crs','EPSG','30174','EPSG','1867','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30175','Tokyo / Japan Plane Rectangular CS XV',NULL,'EPSG','4530','EPSG','4301','EPSG','17815',NULL,0); INSERT INTO "usage" VALUES('EPSG','7006','projected_crs','EPSG','30175','EPSG','1868','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30176','Tokyo / Japan Plane Rectangular CS XVI',NULL,'EPSG','4530','EPSG','4301','EPSG','17816',NULL,0); INSERT INTO "usage" VALUES('EPSG','7007','projected_crs','EPSG','30176','EPSG','1869','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30177','Tokyo / Japan Plane Rectangular CS XVII',NULL,'EPSG','4530','EPSG','4301','EPSG','17817',NULL,0); INSERT INTO "usage" VALUES('EPSG','7008','projected_crs','EPSG','30177','EPSG','1870','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30178','Tokyo / Japan Plane Rectangular CS XVIII',NULL,'EPSG','4530','EPSG','4301','EPSG','17818',NULL,0); INSERT INTO "usage" VALUES('EPSG','7009','projected_crs','EPSG','30178','EPSG','1871','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30179','Tokyo / Japan Plane Rectangular CS XIX',NULL,'EPSG','4530','EPSG','4301','EPSG','17819',NULL,0); INSERT INTO "usage" VALUES('EPSG','7010','projected_crs','EPSG','30179','EPSG','1872','EPSG','1092'); INSERT INTO "projected_crs" VALUES('EPSG','30200','Trinidad 1903 / Trinidad Grid',NULL,'EPSG','4407','EPSG','4302','EPSG','19925',NULL,0); INSERT INTO "usage" VALUES('EPSG','7011','projected_crs','EPSG','30200','EPSG','1339','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30339','TC(1948) / UTM zone 39N',NULL,'EPSG','4400','EPSG','4303','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','7012','projected_crs','EPSG','30339','EPSG','1850','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','30340','TC(1948) / UTM zone 40N',NULL,'EPSG','4400','EPSG','4303','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','7013','projected_crs','EPSG','30340','EPSG','4022','EPSG','1136'); INSERT INTO "projected_crs" VALUES('EPSG','30491','Voirol 1875 / Nord Algerie (ancienne)',NULL,'EPSG','4499','EPSG','4304','EPSG','18011',NULL,0); INSERT INTO "usage" VALUES('EPSG','7014','projected_crs','EPSG','30491','EPSG','1728','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30492','Voirol 1875 / Sud Algerie (ancienne)',NULL,'EPSG','4499','EPSG','4304','EPSG','18012',NULL,0); INSERT INTO "usage" VALUES('EPSG','7015','projected_crs','EPSG','30492','EPSG','4519','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30493','Voirol 1879 / Nord Algerie (ancienne)',NULL,'EPSG','4499','EPSG','4671','EPSG','18011',NULL,0); INSERT INTO "usage" VALUES('EPSG','7016','projected_crs','EPSG','30493','EPSG','1728','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30494','Voirol 1879 / Sud Algerie (ancienne)',NULL,'EPSG','4499','EPSG','4671','EPSG','18012',NULL,0); INSERT INTO "usage" VALUES('EPSG','7017','projected_crs','EPSG','30494','EPSG','4519','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30729','Nord Sahara 1959 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4307','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','7018','projected_crs','EPSG','30729','EPSG','1735','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30730','Nord Sahara 1959 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4307','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','7019','projected_crs','EPSG','30730','EPSG','3952','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30731','Nord Sahara 1959 / UTM zone 31N',NULL,'EPSG','4400','EPSG','4307','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','7020','projected_crs','EPSG','30731','EPSG','3953','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30732','Nord Sahara 1959 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4307','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','7021','projected_crs','EPSG','30732','EPSG','3954','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30791','Nord Sahara 1959 / Nord Algerie',NULL,'EPSG','4499','EPSG','4307','EPSG','18021',NULL,0); INSERT INTO "usage" VALUES('EPSG','7022','projected_crs','EPSG','30791','EPSG','1728','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30792','Nord Sahara 1959 / Sud Algerie',NULL,'EPSG','4499','EPSG','4307','EPSG','18022',NULL,0); INSERT INTO "usage" VALUES('EPSG','7023','projected_crs','EPSG','30792','EPSG','1729','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','30800','RT38 2.5 gon W',NULL,'EPSG','4530','EPSG','4308','EPSG','19929',NULL,1); INSERT INTO "usage" VALUES('EPSG','7024','projected_crs','EPSG','30800','EPSG','1225','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','31028','Yoff / UTM zone 28N',NULL,'EPSG','4400','EPSG','4310','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','7025','projected_crs','EPSG','31028','EPSG','1207','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31121','Zanderij / UTM zone 21N',NULL,'EPSG','4400','EPSG','4311','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','7026','projected_crs','EPSG','31121','EPSG','1222','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31154','Zanderij / TM 54 NW',NULL,'EPSG','4400','EPSG','4311','EPSG','17054',NULL,0); INSERT INTO "usage" VALUES('EPSG','7027','projected_crs','EPSG','31154','EPSG','1727','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31170','Zanderij / Suriname Old TM',NULL,'EPSG','4400','EPSG','4311','EPSG','19954',NULL,0); INSERT INTO "usage" VALUES('EPSG','7028','projected_crs','EPSG','31170','EPSG','3312','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31171','Zanderij / Suriname TM',NULL,'EPSG','4400','EPSG','4311','EPSG','19955',NULL,0); INSERT INTO "usage" VALUES('EPSG','7029','projected_crs','EPSG','31171','EPSG','3312','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31251','MGI (Ferro) / Austria GK West Zone',NULL,'EPSG','4530','EPSG','4805','EPSG','18001',NULL,0); INSERT INTO "usage" VALUES('EPSG','7030','projected_crs','EPSG','31251','EPSG','1706','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31252','MGI (Ferro) / Austria GK Central Zone',NULL,'EPSG','4530','EPSG','4805','EPSG','18002',NULL,0); INSERT INTO "usage" VALUES('EPSG','7031','projected_crs','EPSG','31252','EPSG','1707','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31253','MGI (Ferro) / Austria GK East Zone',NULL,'EPSG','4530','EPSG','4805','EPSG','18003',NULL,0); INSERT INTO "usage" VALUES('EPSG','7032','projected_crs','EPSG','31253','EPSG','1708','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31254','MGI / Austria GK West',NULL,'EPSG','4530','EPSG','4312','EPSG','18004',NULL,0); INSERT INTO "usage" VALUES('EPSG','7033','projected_crs','EPSG','31254','EPSG','1706','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31255','MGI / Austria GK Central',NULL,'EPSG','4530','EPSG','4312','EPSG','18005',NULL,0); INSERT INTO "usage" VALUES('EPSG','7034','projected_crs','EPSG','31255','EPSG','1707','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31256','MGI / Austria GK East',NULL,'EPSG','4530','EPSG','4312','EPSG','18006',NULL,0); INSERT INTO "usage" VALUES('EPSG','7035','projected_crs','EPSG','31256','EPSG','1708','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31257','MGI / Austria GK M28',NULL,'EPSG','4530','EPSG','4312','EPSG','18007',NULL,0); INSERT INTO "usage" VALUES('EPSG','7036','projected_crs','EPSG','31257','EPSG','1706','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31258','MGI / Austria GK M31',NULL,'EPSG','4530','EPSG','4312','EPSG','18008',NULL,0); INSERT INTO "usage" VALUES('EPSG','7037','projected_crs','EPSG','31258','EPSG','1707','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31259','MGI / Austria GK M34',NULL,'EPSG','4530','EPSG','4312','EPSG','18009',NULL,0); INSERT INTO "usage" VALUES('EPSG','7038','projected_crs','EPSG','31259','EPSG','1708','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31265','MGI / 3-degree Gauss zone 5',NULL,'EPSG','4499','EPSG','4312','EPSG','16265',NULL,1); INSERT INTO "usage" VALUES('EPSG','7039','projected_crs','EPSG','31265','EPSG','1709','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31266','MGI / 3-degree Gauss zone 6',NULL,'EPSG','4499','EPSG','4312','EPSG','16266',NULL,1); INSERT INTO "usage" VALUES('EPSG','7040','projected_crs','EPSG','31266','EPSG','1710','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31267','MGI / 3-degree Gauss zone 7',NULL,'EPSG','4499','EPSG','4312','EPSG','16267',NULL,1); INSERT INTO "usage" VALUES('EPSG','7041','projected_crs','EPSG','31267','EPSG','1711','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31268','MGI / 3-degree Gauss zone 8',NULL,'EPSG','4499','EPSG','4312','EPSG','16268',NULL,1); INSERT INTO "usage" VALUES('EPSG','7042','projected_crs','EPSG','31268','EPSG','1712','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31275','MGI / Balkans zone 5',NULL,'EPSG','4530','EPSG','4312','EPSG','18275',NULL,1); INSERT INTO "usage" VALUES('EPSG','7043','projected_crs','EPSG','31275','EPSG','1709','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31276','MGI / Balkans zone 6',NULL,'EPSG','4530','EPSG','4312','EPSG','18276',NULL,1); INSERT INTO "usage" VALUES('EPSG','7044','projected_crs','EPSG','31276','EPSG','1710','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31277','MGI / Balkans zone 7',NULL,'EPSG','4530','EPSG','4312','EPSG','18277',NULL,1); INSERT INTO "usage" VALUES('EPSG','7045','projected_crs','EPSG','31277','EPSG','1711','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31278','MGI / Balkans zone 8',NULL,'EPSG','4530','EPSG','4312','EPSG','18277',NULL,1); INSERT INTO "usage" VALUES('EPSG','7046','projected_crs','EPSG','31278','EPSG','1712','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31279','MGI / Balkans zone 8',NULL,'EPSG','4530','EPSG','4312','EPSG','18278',NULL,1); INSERT INTO "usage" VALUES('EPSG','7047','projected_crs','EPSG','31279','EPSG','1712','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31281','MGI (Ferro) / Austria West Zone',NULL,'EPSG','4530','EPSG','4805','EPSG','18041',NULL,0); INSERT INTO "usage" VALUES('EPSG','7048','projected_crs','EPSG','31281','EPSG','1706','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','31282','MGI (Ferro) / Austria Central Zone',NULL,'EPSG','4530','EPSG','4805','EPSG','18042',NULL,0); INSERT INTO "usage" VALUES('EPSG','7049','projected_crs','EPSG','31282','EPSG','1707','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','31283','MGI (Ferro) / Austria East Zone',NULL,'EPSG','4530','EPSG','4805','EPSG','18043',NULL,0); INSERT INTO "usage" VALUES('EPSG','7050','projected_crs','EPSG','31283','EPSG','1708','EPSG','1028'); INSERT INTO "projected_crs" VALUES('EPSG','31284','MGI / Austria M28',NULL,'EPSG','4530','EPSG','4312','EPSG','18044',NULL,0); INSERT INTO "usage" VALUES('EPSG','7051','projected_crs','EPSG','31284','EPSG','1706','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31285','MGI / Austria M31',NULL,'EPSG','4530','EPSG','4312','EPSG','18045',NULL,0); INSERT INTO "usage" VALUES('EPSG','7052','projected_crs','EPSG','31285','EPSG','1707','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31286','MGI / Austria M34',NULL,'EPSG','4530','EPSG','4312','EPSG','18046',NULL,0); INSERT INTO "usage" VALUES('EPSG','7053','projected_crs','EPSG','31286','EPSG','1708','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31287','MGI / Austria Lambert',NULL,'EPSG','4530','EPSG','4312','EPSG','19947',NULL,0); INSERT INTO "usage" VALUES('EPSG','7054','projected_crs','EPSG','31287','EPSG','1037','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','31288','MGI (Ferro) / Austria zone M28',NULL,'EPSG','4530','EPSG','4805','EPSG','18047',NULL,0); INSERT INTO "usage" VALUES('EPSG','7055','projected_crs','EPSG','31288','EPSG','1706','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31289','MGI (Ferro) / Austria zone M31',NULL,'EPSG','4530','EPSG','4805','EPSG','18048',NULL,0); INSERT INTO "usage" VALUES('EPSG','7056','projected_crs','EPSG','31289','EPSG','1707','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31290','MGI (Ferro) / Austria zone M34',NULL,'EPSG','4530','EPSG','4805','EPSG','18049',NULL,0); INSERT INTO "usage" VALUES('EPSG','7057','projected_crs','EPSG','31290','EPSG','1708','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31291','MGI (Ferro) / Austria West Zone',NULL,'EPSG','4499','EPSG','4805','EPSG','18041',NULL,1); INSERT INTO "usage" VALUES('EPSG','7058','projected_crs','EPSG','31291','EPSG','1706','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31292','MGI (Ferro) / Austria Central Zone',NULL,'EPSG','4499','EPSG','4805','EPSG','18042',NULL,1); INSERT INTO "usage" VALUES('EPSG','7059','projected_crs','EPSG','31292','EPSG','1708','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31293','MGI (Ferro) / Austria East Zone',NULL,'EPSG','4499','EPSG','4805','EPSG','18043',NULL,1); INSERT INTO "usage" VALUES('EPSG','7060','projected_crs','EPSG','31293','EPSG','1707','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31294','MGI / M28',NULL,'EPSG','4499','EPSG','4312','EPSG','18044',NULL,1); INSERT INTO "usage" VALUES('EPSG','7061','projected_crs','EPSG','31294','EPSG','1706','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31295','MGI / M31',NULL,'EPSG','4499','EPSG','4312','EPSG','18045',NULL,1); INSERT INTO "usage" VALUES('EPSG','7062','projected_crs','EPSG','31295','EPSG','1707','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31296','MGI / M34',NULL,'EPSG','4499','EPSG','4312','EPSG','18046',NULL,1); INSERT INTO "usage" VALUES('EPSG','7063','projected_crs','EPSG','31296','EPSG','1708','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31297','MGI / Austria Lambert',NULL,'EPSG','4499','EPSG','4312','EPSG','19947',NULL,1); INSERT INTO "usage" VALUES('EPSG','7064','projected_crs','EPSG','31297','EPSG','1037','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','31300','BD72 / Belge Lambert 72',NULL,'EPSG','4499','EPSG','4313','EPSG','19902',NULL,0); INSERT INTO "usage" VALUES('EPSG','7065','projected_crs','EPSG','31300','EPSG','1347','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31370','BD72 / Belgian Lambert 72',NULL,'EPSG','4499','EPSG','4313','EPSG','19961',NULL,0); INSERT INTO "usage" VALUES('EPSG','7066','projected_crs','EPSG','31370','EPSG','1347','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31461','DHDN / 3-degree Gauss zone 1',NULL,'EPSG','4499','EPSG','4314','EPSG','16261',NULL,1); INSERT INTO "usage" VALUES('EPSG','7067','projected_crs','EPSG','31461','EPSG','1628','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31462','DHDN / 3-degree Gauss zone 2',NULL,'EPSG','4499','EPSG','4314','EPSG','16262',NULL,1); INSERT INTO "usage" VALUES('EPSG','7068','projected_crs','EPSG','31462','EPSG','1624','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31463','DHDN / 3-degree Gauss zone 3',NULL,'EPSG','4499','EPSG','4314','EPSG','16263',NULL,1); INSERT INTO "usage" VALUES('EPSG','7069','projected_crs','EPSG','31463','EPSG','1625','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31464','DHDN / 3-degree Gauss zone 4',NULL,'EPSG','4499','EPSG','4314','EPSG','16264',NULL,1); INSERT INTO "usage" VALUES('EPSG','7070','projected_crs','EPSG','31464','EPSG','1626','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31465','DHDN / 3-degree Gauss zone 5',NULL,'EPSG','4499','EPSG','4314','EPSG','16265',NULL,1); INSERT INTO "usage" VALUES('EPSG','7071','projected_crs','EPSG','31465','EPSG','1627','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31466','DHDN / 3-degree Gauss-Kruger zone 2',NULL,'EPSG','4530','EPSG','4314','EPSG','16262',NULL,0); INSERT INTO "usage" VALUES('EPSG','7072','projected_crs','EPSG','31466','EPSG','1624','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','31467','DHDN / 3-degree Gauss-Kruger zone 3',NULL,'EPSG','4530','EPSG','4314','EPSG','16263',NULL,0); INSERT INTO "usage" VALUES('EPSG','7073','projected_crs','EPSG','31467','EPSG','1625','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','31468','DHDN / 3-degree Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4314','EPSG','16264',NULL,0); INSERT INTO "usage" VALUES('EPSG','7074','projected_crs','EPSG','31468','EPSG','1626','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','31469','DHDN / 3-degree Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4314','EPSG','16265',NULL,0); INSERT INTO "usage" VALUES('EPSG','7075','projected_crs','EPSG','31469','EPSG','1627','EPSG','1056'); INSERT INTO "projected_crs" VALUES('EPSG','31528','Conakry 1905 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4315','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','7076','projected_crs','EPSG','31528','EPSG','1468','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31529','Conakry 1905 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4315','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','7077','projected_crs','EPSG','31529','EPSG','1469','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31600','Dealul Piscului 1930 / Stereo 33',NULL,'EPSG','4499','EPSG','4316','EPSG','19927',NULL,0); INSERT INTO "usage" VALUES('EPSG','7078','projected_crs','EPSG','31600','EPSG','3295','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31700','Dealul Piscului 1970/ Stereo 70',NULL,'EPSG','4530','EPSG','4317','EPSG','19926',NULL,1); INSERT INTO "usage" VALUES('EPSG','7079','projected_crs','EPSG','31700','EPSG','1197','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31838','NGN / UTM zone 38N',NULL,'EPSG','4400','EPSG','4318','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','7080','projected_crs','EPSG','31838','EPSG','1739','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31839','NGN / UTM zone 39N',NULL,'EPSG','4400','EPSG','4318','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','7081','projected_crs','EPSG','31839','EPSG','1740','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31900','KUDAMS / KTM',NULL,'EPSG','4400','EPSG','4319','EPSG','19928',NULL,1); INSERT INTO "usage" VALUES('EPSG','7082','projected_crs','EPSG','31900','EPSG','1310','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','31901','KUDAMS / KTM',NULL,'EPSG','4400','EPSG','4319','EPSG','19997',NULL,0); INSERT INTO "usage" VALUES('EPSG','7083','projected_crs','EPSG','31901','EPSG','1310','EPSG','1208'); INSERT INTO "projected_crs" VALUES('EPSG','31965','SIRGAS 2000 / UTM zone 11N',NULL,'EPSG','4400','EPSG','4674','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','7084','projected_crs','EPSG','31965','EPSG','3748','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31966','SIRGAS 2000 / UTM zone 12N',NULL,'EPSG','4400','EPSG','4674','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','7085','projected_crs','EPSG','31966','EPSG','3756','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31967','SIRGAS 2000 / UTM zone 13N',NULL,'EPSG','4400','EPSG','4674','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','7086','projected_crs','EPSG','31967','EPSG','3759','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31968','SIRGAS 2000 / UTM zone 14N',NULL,'EPSG','4400','EPSG','4674','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','7087','projected_crs','EPSG','31968','EPSG','3763','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31969','SIRGAS 2000 / UTM zone 15N',NULL,'EPSG','4400','EPSG','4674','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','7088','projected_crs','EPSG','31969','EPSG','3427','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31970','SIRGAS 2000 / UTM zone 16N',NULL,'EPSG','4400','EPSG','4674','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','7089','projected_crs','EPSG','31970','EPSG','3428','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31971','SIRGAS 2000 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4674','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','7090','projected_crs','EPSG','31971','EPSG','3421','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31972','SIRGAS 2000 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4674','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','7091','projected_crs','EPSG','31972','EPSG','3422','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31973','SIRGAS 2000 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4674','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','7092','projected_crs','EPSG','31973','EPSG','3436','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31974','SIRGAS 2000 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4674','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','7093','projected_crs','EPSG','31974','EPSG','3437','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31975','SIRGAS 2000 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4674','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','7094','projected_crs','EPSG','31975','EPSG','3438','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31976','SIRGAS 2000 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4674','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','7095','projected_crs','EPSG','31976','EPSG','3439','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31977','SIRGAS 2000 / UTM zone 17S',NULL,'EPSG','4400','EPSG','4674','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','7096','projected_crs','EPSG','31977','EPSG','1824','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31978','SIRGAS 2000 / UTM zone 18S',NULL,'EPSG','4400','EPSG','4674','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','7097','projected_crs','EPSG','31978','EPSG','3440','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31979','SIRGAS 2000 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4674','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','7098','projected_crs','EPSG','31979','EPSG','3441','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31980','SIRGAS 2000 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4674','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','7099','projected_crs','EPSG','31980','EPSG','3442','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31981','SIRGAS 2000 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4674','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','7100','projected_crs','EPSG','31981','EPSG','3443','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31982','SIRGAS 2000 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4674','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','7101','projected_crs','EPSG','31982','EPSG','3444','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31983','SIRGAS 2000 / UTM zone 23S',NULL,'EPSG','4400','EPSG','4674','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','7102','projected_crs','EPSG','31983','EPSG','3445','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31984','SIRGAS 2000 / UTM zone 24S',NULL,'EPSG','4400','EPSG','4674','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','7103','projected_crs','EPSG','31984','EPSG','3446','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31985','SIRGAS 2000 / UTM zone 25S',NULL,'EPSG','4400','EPSG','4674','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','7104','projected_crs','EPSG','31985','EPSG','3447','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31986','SIRGAS 1995 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4170','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','7105','projected_crs','EPSG','31986','EPSG','1823','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31987','SIRGAS 1995 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4170','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','7106','projected_crs','EPSG','31987','EPSG','1825','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31988','SIRGAS 1995 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4170','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','7107','projected_crs','EPSG','31988','EPSG','1827','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31989','SIRGAS 1995 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4170','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','7108','projected_crs','EPSG','31989','EPSG','1829','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31990','SIRGAS 1995 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4170','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','7109','projected_crs','EPSG','31990','EPSG','1831','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31991','SIRGAS 1995 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4170','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','7110','projected_crs','EPSG','31991','EPSG','1833','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31992','SIRGAS 1995 / UTM zone 17S',NULL,'EPSG','4400','EPSG','4170','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','7111','projected_crs','EPSG','31992','EPSG','3638','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31993','SIRGAS 1995 / UTM zone 18S',NULL,'EPSG','4400','EPSG','4170','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','7112','projected_crs','EPSG','31993','EPSG','1826','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31994','SIRGAS 1995 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4170','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','7113','projected_crs','EPSG','31994','EPSG','1828','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31995','SIRGAS 1995 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4170','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','7114','projected_crs','EPSG','31995','EPSG','1830','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31996','SIRGAS 1995 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4170','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','7115','projected_crs','EPSG','31996','EPSG','1832','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31997','SIRGAS 1995 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4170','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','7116','projected_crs','EPSG','31997','EPSG','1834','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31998','SIRGAS 1995 / UTM zone 23S',NULL,'EPSG','4400','EPSG','4170','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','7117','projected_crs','EPSG','31998','EPSG','1835','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','31999','SIRGAS 1995 / UTM zone 24S',NULL,'EPSG','4400','EPSG','4170','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','7118','projected_crs','EPSG','31999','EPSG','1836','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32000','SIRGAS 1995 / UTM zone 25S',NULL,'EPSG','4400','EPSG','4170','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','7119','projected_crs','EPSG','32000','EPSG','1837','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32001','NAD27 / Montana North',NULL,'EPSG','4497','EPSG','4267','EPSG','12501',NULL,0); INSERT INTO "usage" VALUES('EPSG','7120','projected_crs','EPSG','32001','EPSG','2211','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32002','NAD27 / Montana Central',NULL,'EPSG','4497','EPSG','4267','EPSG','12502',NULL,0); INSERT INTO "usage" VALUES('EPSG','7121','projected_crs','EPSG','32002','EPSG','2210','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32003','NAD27 / Montana South',NULL,'EPSG','4497','EPSG','4267','EPSG','12503',NULL,0); INSERT INTO "usage" VALUES('EPSG','7122','projected_crs','EPSG','32003','EPSG','2212','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32005','NAD27 / Nebraska North',NULL,'EPSG','4497','EPSG','4267','EPSG','12601',NULL,0); INSERT INTO "usage" VALUES('EPSG','7123','projected_crs','EPSG','32005','EPSG','2221','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32006','NAD27 / Nebraska South',NULL,'EPSG','4497','EPSG','4267','EPSG','12602',NULL,0); INSERT INTO "usage" VALUES('EPSG','7124','projected_crs','EPSG','32006','EPSG','2222','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32007','NAD27 / Nevada East',NULL,'EPSG','4497','EPSG','4267','EPSG','12701',NULL,0); INSERT INTO "usage" VALUES('EPSG','7125','projected_crs','EPSG','32007','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32008','NAD27 / Nevada Central',NULL,'EPSG','4497','EPSG','4267','EPSG','12702',NULL,0); INSERT INTO "usage" VALUES('EPSG','7126','projected_crs','EPSG','32008','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32009','NAD27 / Nevada West',NULL,'EPSG','4497','EPSG','4267','EPSG','12703',NULL,0); INSERT INTO "usage" VALUES('EPSG','7127','projected_crs','EPSG','32009','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32010','NAD27 / New Hampshire',NULL,'EPSG','4497','EPSG','4267','EPSG','12800',NULL,0); INSERT INTO "usage" VALUES('EPSG','7128','projected_crs','EPSG','32010','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32011','NAD27 / New Jersey',NULL,'EPSG','4497','EPSG','4267','EPSG','12900',NULL,0); INSERT INTO "usage" VALUES('EPSG','7129','projected_crs','EPSG','32011','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32012','NAD27 / New Mexico East',NULL,'EPSG','4497','EPSG','4267','EPSG','13001',NULL,0); INSERT INTO "usage" VALUES('EPSG','7130','projected_crs','EPSG','32012','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32013','NAD27 / New Mexico Central',NULL,'EPSG','4497','EPSG','4267','EPSG','13002',NULL,0); INSERT INTO "usage" VALUES('EPSG','7131','projected_crs','EPSG','32013','EPSG','2229','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32014','NAD27 / New Mexico West',NULL,'EPSG','4497','EPSG','4267','EPSG','13003',NULL,0); INSERT INTO "usage" VALUES('EPSG','7132','projected_crs','EPSG','32014','EPSG','2230','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32015','NAD27 / New York East',NULL,'EPSG','4497','EPSG','4267','EPSG','13101',NULL,0); INSERT INTO "usage" VALUES('EPSG','7133','projected_crs','EPSG','32015','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32016','NAD27 / New York Central',NULL,'EPSG','4497','EPSG','4267','EPSG','13102',NULL,0); INSERT INTO "usage" VALUES('EPSG','7134','projected_crs','EPSG','32016','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32017','NAD27 / New York West',NULL,'EPSG','4497','EPSG','4267','EPSG','13103',NULL,0); INSERT INTO "usage" VALUES('EPSG','7135','projected_crs','EPSG','32017','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32018','NAD27 / New York Long Island',NULL,'EPSG','4497','EPSG','4267','EPSG','13104',NULL,1); INSERT INTO "usage" VALUES('EPSG','7136','projected_crs','EPSG','32018','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32019','NAD27 / North Carolina',NULL,'EPSG','4497','EPSG','4267','EPSG','13200',NULL,0); INSERT INTO "usage" VALUES('EPSG','7137','projected_crs','EPSG','32019','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32020','NAD27 / North Dakota North',NULL,'EPSG','4497','EPSG','4267','EPSG','13301',NULL,0); INSERT INTO "usage" VALUES('EPSG','7138','projected_crs','EPSG','32020','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32021','NAD27 / North Dakota South',NULL,'EPSG','4497','EPSG','4267','EPSG','13302',NULL,0); INSERT INTO "usage" VALUES('EPSG','7139','projected_crs','EPSG','32021','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32022','NAD27 / Ohio North',NULL,'EPSG','4497','EPSG','4267','EPSG','13401',NULL,0); INSERT INTO "usage" VALUES('EPSG','7140','projected_crs','EPSG','32022','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32023','NAD27 / Ohio South',NULL,'EPSG','4497','EPSG','4267','EPSG','13402',NULL,0); INSERT INTO "usage" VALUES('EPSG','7141','projected_crs','EPSG','32023','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32024','NAD27 / Oklahoma North',NULL,'EPSG','4497','EPSG','4267','EPSG','13501',NULL,0); INSERT INTO "usage" VALUES('EPSG','7142','projected_crs','EPSG','32024','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32025','NAD27 / Oklahoma South',NULL,'EPSG','4497','EPSG','4267','EPSG','13502',NULL,0); INSERT INTO "usage" VALUES('EPSG','7143','projected_crs','EPSG','32025','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32026','NAD27 / Oregon North',NULL,'EPSG','4497','EPSG','4267','EPSG','13601',NULL,0); INSERT INTO "usage" VALUES('EPSG','7144','projected_crs','EPSG','32026','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32027','NAD27 / Oregon South',NULL,'EPSG','4497','EPSG','4267','EPSG','13602',NULL,0); INSERT INTO "usage" VALUES('EPSG','7145','projected_crs','EPSG','32027','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32028','NAD27 / Pennsylvania North',NULL,'EPSG','4497','EPSG','4267','EPSG','13701',NULL,0); INSERT INTO "usage" VALUES('EPSG','7146','projected_crs','EPSG','32028','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32029','NAD27 / Pennsylvania South',NULL,'EPSG','4497','EPSG','4267','EPSG','13702',NULL,1); INSERT INTO "usage" VALUES('EPSG','7147','projected_crs','EPSG','32029','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32030','NAD27 / Rhode Island',NULL,'EPSG','4497','EPSG','4267','EPSG','13800',NULL,0); INSERT INTO "usage" VALUES('EPSG','7148','projected_crs','EPSG','32030','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32031','NAD27 / South Carolina North',NULL,'EPSG','4497','EPSG','4267','EPSG','13901',NULL,0); INSERT INTO "usage" VALUES('EPSG','7149','projected_crs','EPSG','32031','EPSG','2247','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32033','NAD27 / South Carolina South',NULL,'EPSG','4497','EPSG','4267','EPSG','13902',NULL,0); INSERT INTO "usage" VALUES('EPSG','7150','projected_crs','EPSG','32033','EPSG','2248','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32034','NAD27 / South Dakota North',NULL,'EPSG','4497','EPSG','4267','EPSG','14001',NULL,0); INSERT INTO "usage" VALUES('EPSG','7151','projected_crs','EPSG','32034','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32035','NAD27 / South Dakota South',NULL,'EPSG','4497','EPSG','4267','EPSG','14002',NULL,0); INSERT INTO "usage" VALUES('EPSG','7152','projected_crs','EPSG','32035','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32036','NAD27 / Tennessee',NULL,'EPSG','4497','EPSG','4267','EPSG','14100',NULL,1); INSERT INTO "usage" VALUES('EPSG','7153','projected_crs','EPSG','32036','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32037','NAD27 / Texas North',NULL,'EPSG','4497','EPSG','4267','EPSG','14201',NULL,0); INSERT INTO "usage" VALUES('EPSG','7154','projected_crs','EPSG','32037','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32038','NAD27 / Texas North Central',NULL,'EPSG','4497','EPSG','4267','EPSG','14202',NULL,0); INSERT INTO "usage" VALUES('EPSG','7155','projected_crs','EPSG','32038','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32039','NAD27 / Texas Central',NULL,'EPSG','4497','EPSG','4267','EPSG','14203',NULL,0); INSERT INTO "usage" VALUES('EPSG','7156','projected_crs','EPSG','32039','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32040','NAD27 / Texas South Central',NULL,'EPSG','4497','EPSG','4267','EPSG','14204',NULL,0); INSERT INTO "usage" VALUES('EPSG','7157','projected_crs','EPSG','32040','EPSG','2256','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32041','NAD27 / Texas South',NULL,'EPSG','4497','EPSG','4267','EPSG','14205',NULL,0); INSERT INTO "usage" VALUES('EPSG','7158','projected_crs','EPSG','32041','EPSG','2255','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32042','NAD27 / Utah North',NULL,'EPSG','4497','EPSG','4267','EPSG','14301',NULL,0); INSERT INTO "usage" VALUES('EPSG','7159','projected_crs','EPSG','32042','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32043','NAD27 / Utah Central',NULL,'EPSG','4497','EPSG','4267','EPSG','14302',NULL,0); INSERT INTO "usage" VALUES('EPSG','7160','projected_crs','EPSG','32043','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32044','NAD27 / Utah South',NULL,'EPSG','4497','EPSG','4267','EPSG','14303',NULL,0); INSERT INTO "usage" VALUES('EPSG','7161','projected_crs','EPSG','32044','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32045','NAD27 / Vermont',NULL,'EPSG','4497','EPSG','4267','EPSG','14400',NULL,0); INSERT INTO "usage" VALUES('EPSG','7162','projected_crs','EPSG','32045','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32046','NAD27 / Virginia North',NULL,'EPSG','4497','EPSG','4267','EPSG','14501',NULL,0); INSERT INTO "usage" VALUES('EPSG','7163','projected_crs','EPSG','32046','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32047','NAD27 / Virginia South',NULL,'EPSG','4497','EPSG','4267','EPSG','14502',NULL,0); INSERT INTO "usage" VALUES('EPSG','7164','projected_crs','EPSG','32047','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32048','NAD27 / Washington North',NULL,'EPSG','4497','EPSG','4267','EPSG','14601',NULL,0); INSERT INTO "usage" VALUES('EPSG','7165','projected_crs','EPSG','32048','EPSG','2262','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32049','NAD27 / Washington South',NULL,'EPSG','4497','EPSG','4267','EPSG','14602',NULL,0); INSERT INTO "usage" VALUES('EPSG','7166','projected_crs','EPSG','32049','EPSG','2263','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32050','NAD27 / West Virginia North',NULL,'EPSG','4497','EPSG','4267','EPSG','14701',NULL,0); INSERT INTO "usage" VALUES('EPSG','7167','projected_crs','EPSG','32050','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32051','NAD27 / West Virginia South',NULL,'EPSG','4497','EPSG','4267','EPSG','14702',NULL,0); INSERT INTO "usage" VALUES('EPSG','7168','projected_crs','EPSG','32051','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32052','NAD27 / Wisconsin North',NULL,'EPSG','4497','EPSG','4267','EPSG','14801',NULL,0); INSERT INTO "usage" VALUES('EPSG','7169','projected_crs','EPSG','32052','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32053','NAD27 / Wisconsin Central',NULL,'EPSG','4497','EPSG','4267','EPSG','14802',NULL,0); INSERT INTO "usage" VALUES('EPSG','7170','projected_crs','EPSG','32053','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32054','NAD27 / Wisconsin South',NULL,'EPSG','4497','EPSG','4267','EPSG','14803',NULL,0); INSERT INTO "usage" VALUES('EPSG','7171','projected_crs','EPSG','32054','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32055','NAD27 / Wyoming East',NULL,'EPSG','4497','EPSG','4267','EPSG','14901',NULL,0); INSERT INTO "usage" VALUES('EPSG','7172','projected_crs','EPSG','32055','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32056','NAD27 / Wyoming East Central',NULL,'EPSG','4497','EPSG','4267','EPSG','14902',NULL,0); INSERT INTO "usage" VALUES('EPSG','7173','projected_crs','EPSG','32056','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32057','NAD27 / Wyoming West Central',NULL,'EPSG','4497','EPSG','4267','EPSG','14903',NULL,0); INSERT INTO "usage" VALUES('EPSG','7174','projected_crs','EPSG','32057','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32058','NAD27 / Wyoming West',NULL,'EPSG','4497','EPSG','4267','EPSG','14904',NULL,0); INSERT INTO "usage" VALUES('EPSG','7175','projected_crs','EPSG','32058','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32061','NAD27 / Guatemala Norte',NULL,'EPSG','4499','EPSG','4267','EPSG','18211',NULL,1); INSERT INTO "usage" VALUES('EPSG','7176','projected_crs','EPSG','32061','EPSG','2120','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32062','NAD27 / Guatemala Sur',NULL,'EPSG','4499','EPSG','4267','EPSG','18212',NULL,1); INSERT INTO "usage" VALUES('EPSG','7177','projected_crs','EPSG','32062','EPSG','2121','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32064','NAD27 / BLM 14N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','15914',NULL,0); INSERT INTO "usage" VALUES('EPSG','7178','projected_crs','EPSG','32064','EPSG','3637','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32065','NAD27 / BLM 15N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','15915',NULL,0); INSERT INTO "usage" VALUES('EPSG','7179','projected_crs','EPSG','32065','EPSG','3640','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32066','NAD27 / BLM 16N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','15916',NULL,0); INSERT INTO "usage" VALUES('EPSG','7180','projected_crs','EPSG','32066','EPSG','3641','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32067','NAD27 / BLM 17N (ftUS)',NULL,'EPSG','4497','EPSG','4267','EPSG','15917',NULL,0); INSERT INTO "usage" VALUES('EPSG','7181','projected_crs','EPSG','32067','EPSG','3642','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32074','NAD27 / BLM 14N (feet)',NULL,'EPSG','4497','EPSG','4267','EPSG','15914',NULL,1); INSERT INTO "usage" VALUES('EPSG','7182','projected_crs','EPSG','32074','EPSG','2171','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32075','NAD27 / BLM 15N (feet)',NULL,'EPSG','4497','EPSG','4267','EPSG','15915',NULL,1); INSERT INTO "usage" VALUES('EPSG','7183','projected_crs','EPSG','32075','EPSG','2172','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32076','NAD27 / BLM 16N (feet)',NULL,'EPSG','4497','EPSG','4267','EPSG','15916',NULL,1); INSERT INTO "usage" VALUES('EPSG','7184','projected_crs','EPSG','32076','EPSG','2173','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32077','NAD27 / BLM 17N (feet)',NULL,'EPSG','4497','EPSG','4267','EPSG','15917',NULL,1); INSERT INTO "usage" VALUES('EPSG','7185','projected_crs','EPSG','32077','EPSG','2174','EPSG','1249'); INSERT INTO "projected_crs" VALUES('EPSG','32081','NAD27 / MTM zone 1',NULL,'EPSG','4400','EPSG','4267','EPSG','17701',NULL,0); INSERT INTO "usage" VALUES('EPSG','7186','projected_crs','EPSG','32081','EPSG','2226','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32082','NAD27 / MTM zone 2',NULL,'EPSG','4400','EPSG','4267','EPSG','17702',NULL,0); INSERT INTO "usage" VALUES('EPSG','7187','projected_crs','EPSG','32082','EPSG','2227','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32083','NAD27 / MTM zone 3',NULL,'EPSG','4400','EPSG','4267','EPSG','17703',NULL,0); INSERT INTO "usage" VALUES('EPSG','7188','projected_crs','EPSG','32083','EPSG','2275','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32084','NAD27 / MTM zone 4',NULL,'EPSG','4400','EPSG','4267','EPSG','17704',NULL,0); INSERT INTO "usage" VALUES('EPSG','7189','projected_crs','EPSG','32084','EPSG','3875','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32085','NAD27 / MTM zone 5',NULL,'EPSG','4400','EPSG','4267','EPSG','17705',NULL,0); INSERT INTO "usage" VALUES('EPSG','7190','projected_crs','EPSG','32085','EPSG','3865','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32086','NAD27 / MTM zone 6',NULL,'EPSG','4400','EPSG','4267','EPSG','17706',NULL,0); INSERT INTO "usage" VALUES('EPSG','7191','projected_crs','EPSG','32086','EPSG','3880','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32098','NAD27 / Quebec Lambert',NULL,'EPSG','4499','EPSG','4267','EPSG','19944',NULL,0); INSERT INTO "usage" VALUES('EPSG','7192','projected_crs','EPSG','32098','EPSG','1368','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','32099','NAD27 / Louisiana Offshore',NULL,'EPSG','4497','EPSG','4267','EPSG','11703',NULL,0); INSERT INTO "usage" VALUES('EPSG','7193','projected_crs','EPSG','32099','EPSG','1387','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32100','NAD83 / Montana',NULL,'EPSG','4499','EPSG','4269','EPSG','12530',NULL,0); INSERT INTO "usage" VALUES('EPSG','7194','projected_crs','EPSG','32100','EPSG','1395','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32104','NAD83 / Nebraska',NULL,'EPSG','4499','EPSG','4269','EPSG','12630',NULL,0); INSERT INTO "usage" VALUES('EPSG','7195','projected_crs','EPSG','32104','EPSG','1396','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32107','NAD83 / Nevada East',NULL,'EPSG','4499','EPSG','4269','EPSG','12731',NULL,0); INSERT INTO "usage" VALUES('EPSG','7196','projected_crs','EPSG','32107','EPSG','2224','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32108','NAD83 / Nevada Central',NULL,'EPSG','4499','EPSG','4269','EPSG','12732',NULL,0); INSERT INTO "usage" VALUES('EPSG','7197','projected_crs','EPSG','32108','EPSG','2223','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32109','NAD83 / Nevada West',NULL,'EPSG','4499','EPSG','4269','EPSG','12733',NULL,0); INSERT INTO "usage" VALUES('EPSG','7198','projected_crs','EPSG','32109','EPSG','2225','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32110','NAD83 / New Hampshire',NULL,'EPSG','4499','EPSG','4269','EPSG','12830',NULL,0); INSERT INTO "usage" VALUES('EPSG','7199','projected_crs','EPSG','32110','EPSG','1398','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32111','NAD83 / New Jersey',NULL,'EPSG','4499','EPSG','4269','EPSG','12930',NULL,0); INSERT INTO "usage" VALUES('EPSG','7200','projected_crs','EPSG','32111','EPSG','1399','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32112','NAD83 / New Mexico East',NULL,'EPSG','4499','EPSG','4269','EPSG','13031',NULL,0); INSERT INTO "usage" VALUES('EPSG','7201','projected_crs','EPSG','32112','EPSG','2228','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32113','NAD83 / New Mexico Central',NULL,'EPSG','4499','EPSG','4269','EPSG','13032',NULL,0); INSERT INTO "usage" VALUES('EPSG','7202','projected_crs','EPSG','32113','EPSG','2231','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32114','NAD83 / New Mexico West',NULL,'EPSG','4499','EPSG','4269','EPSG','13033',NULL,0); INSERT INTO "usage" VALUES('EPSG','7203','projected_crs','EPSG','32114','EPSG','2232','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32115','NAD83 / New York East',NULL,'EPSG','4499','EPSG','4269','EPSG','13131',NULL,0); INSERT INTO "usage" VALUES('EPSG','7204','projected_crs','EPSG','32115','EPSG','2234','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32116','NAD83 / New York Central',NULL,'EPSG','4499','EPSG','4269','EPSG','13132',NULL,0); INSERT INTO "usage" VALUES('EPSG','7205','projected_crs','EPSG','32116','EPSG','2233','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32117','NAD83 / New York West',NULL,'EPSG','4499','EPSG','4269','EPSG','13133',NULL,0); INSERT INTO "usage" VALUES('EPSG','7206','projected_crs','EPSG','32117','EPSG','2236','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32118','NAD83 / New York Long Island',NULL,'EPSG','4499','EPSG','4269','EPSG','13134',NULL,0); INSERT INTO "usage" VALUES('EPSG','7207','projected_crs','EPSG','32118','EPSG','2235','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32119','NAD83 / North Carolina',NULL,'EPSG','4499','EPSG','4269','EPSG','13230',NULL,0); INSERT INTO "usage" VALUES('EPSG','7208','projected_crs','EPSG','32119','EPSG','1402','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32120','NAD83 / North Dakota North',NULL,'EPSG','4499','EPSG','4269','EPSG','13331',NULL,0); INSERT INTO "usage" VALUES('EPSG','7209','projected_crs','EPSG','32120','EPSG','2237','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32121','NAD83 / North Dakota South',NULL,'EPSG','4499','EPSG','4269','EPSG','13332',NULL,0); INSERT INTO "usage" VALUES('EPSG','7210','projected_crs','EPSG','32121','EPSG','2238','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32122','NAD83 / Ohio North',NULL,'EPSG','4499','EPSG','4269','EPSG','13431',NULL,0); INSERT INTO "usage" VALUES('EPSG','7211','projected_crs','EPSG','32122','EPSG','2239','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32123','NAD83 / Ohio South',NULL,'EPSG','4499','EPSG','4269','EPSG','13432',NULL,0); INSERT INTO "usage" VALUES('EPSG','7212','projected_crs','EPSG','32123','EPSG','2240','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32124','NAD83 / Oklahoma North',NULL,'EPSG','4499','EPSG','4269','EPSG','13531',NULL,0); INSERT INTO "usage" VALUES('EPSG','7213','projected_crs','EPSG','32124','EPSG','2241','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32125','NAD83 / Oklahoma South',NULL,'EPSG','4499','EPSG','4269','EPSG','13532',NULL,0); INSERT INTO "usage" VALUES('EPSG','7214','projected_crs','EPSG','32125','EPSG','2242','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32126','NAD83 / Oregon North',NULL,'EPSG','4499','EPSG','4269','EPSG','13631',NULL,0); INSERT INTO "usage" VALUES('EPSG','7215','projected_crs','EPSG','32126','EPSG','2243','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32127','NAD83 / Oregon South',NULL,'EPSG','4499','EPSG','4269','EPSG','13632',NULL,0); INSERT INTO "usage" VALUES('EPSG','7216','projected_crs','EPSG','32127','EPSG','2244','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32128','NAD83 / Pennsylvania North',NULL,'EPSG','4499','EPSG','4269','EPSG','13731',NULL,0); INSERT INTO "usage" VALUES('EPSG','7217','projected_crs','EPSG','32128','EPSG','2245','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32129','NAD83 / Pennsylvania South',NULL,'EPSG','4499','EPSG','4269','EPSG','13732',NULL,0); INSERT INTO "usage" VALUES('EPSG','7218','projected_crs','EPSG','32129','EPSG','2246','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32130','NAD83 / Rhode Island',NULL,'EPSG','4499','EPSG','4269','EPSG','13830',NULL,0); INSERT INTO "usage" VALUES('EPSG','7219','projected_crs','EPSG','32130','EPSG','1408','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32133','NAD83 / South Carolina',NULL,'EPSG','4499','EPSG','4269','EPSG','13930',NULL,0); INSERT INTO "usage" VALUES('EPSG','7220','projected_crs','EPSG','32133','EPSG','1409','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32134','NAD83 / South Dakota North',NULL,'EPSG','4499','EPSG','4269','EPSG','14031',NULL,0); INSERT INTO "usage" VALUES('EPSG','7221','projected_crs','EPSG','32134','EPSG','2249','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32135','NAD83 / South Dakota South',NULL,'EPSG','4499','EPSG','4269','EPSG','14032',NULL,0); INSERT INTO "usage" VALUES('EPSG','7222','projected_crs','EPSG','32135','EPSG','2250','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32136','NAD83 / Tennessee',NULL,'EPSG','4499','EPSG','4269','EPSG','14130',NULL,0); INSERT INTO "usage" VALUES('EPSG','7223','projected_crs','EPSG','32136','EPSG','1411','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32137','NAD83 / Texas North',NULL,'EPSG','4499','EPSG','4269','EPSG','14231',NULL,0); INSERT INTO "usage" VALUES('EPSG','7224','projected_crs','EPSG','32137','EPSG','2253','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32138','NAD83 / Texas North Central',NULL,'EPSG','4499','EPSG','4269','EPSG','14232',NULL,0); INSERT INTO "usage" VALUES('EPSG','7225','projected_crs','EPSG','32138','EPSG','2254','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32139','NAD83 / Texas Central',NULL,'EPSG','4499','EPSG','4269','EPSG','14233',NULL,0); INSERT INTO "usage" VALUES('EPSG','7226','projected_crs','EPSG','32139','EPSG','2252','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32140','NAD83 / Texas South Central',NULL,'EPSG','4499','EPSG','4269','EPSG','14234',NULL,0); INSERT INTO "usage" VALUES('EPSG','7227','projected_crs','EPSG','32140','EPSG','2527','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32141','NAD83 / Texas South',NULL,'EPSG','4499','EPSG','4269','EPSG','14235',NULL,0); INSERT INTO "usage" VALUES('EPSG','7228','projected_crs','EPSG','32141','EPSG','2528','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32142','NAD83 / Utah North',NULL,'EPSG','4499','EPSG','4269','EPSG','14331',NULL,0); INSERT INTO "usage" VALUES('EPSG','7229','projected_crs','EPSG','32142','EPSG','2258','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32143','NAD83 / Utah Central',NULL,'EPSG','4499','EPSG','4269','EPSG','14332',NULL,0); INSERT INTO "usage" VALUES('EPSG','7230','projected_crs','EPSG','32143','EPSG','2257','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32144','NAD83 / Utah South',NULL,'EPSG','4499','EPSG','4269','EPSG','14333',NULL,0); INSERT INTO "usage" VALUES('EPSG','7231','projected_crs','EPSG','32144','EPSG','2259','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32145','NAD83 / Vermont',NULL,'EPSG','4499','EPSG','4269','EPSG','14430',NULL,0); INSERT INTO "usage" VALUES('EPSG','7232','projected_crs','EPSG','32145','EPSG','1414','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32146','NAD83 / Virginia North',NULL,'EPSG','4499','EPSG','4269','EPSG','14531',NULL,0); INSERT INTO "usage" VALUES('EPSG','7233','projected_crs','EPSG','32146','EPSG','2260','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32147','NAD83 / Virginia South',NULL,'EPSG','4499','EPSG','4269','EPSG','14532',NULL,0); INSERT INTO "usage" VALUES('EPSG','7234','projected_crs','EPSG','32147','EPSG','2261','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32148','NAD83 / Washington North',NULL,'EPSG','4499','EPSG','4269','EPSG','14631',NULL,0); INSERT INTO "usage" VALUES('EPSG','7235','projected_crs','EPSG','32148','EPSG','2273','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32149','NAD83 / Washington South',NULL,'EPSG','4499','EPSG','4269','EPSG','14632',NULL,0); INSERT INTO "usage" VALUES('EPSG','7236','projected_crs','EPSG','32149','EPSG','2274','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32150','NAD83 / West Virginia North',NULL,'EPSG','4499','EPSG','4269','EPSG','14731',NULL,0); INSERT INTO "usage" VALUES('EPSG','7237','projected_crs','EPSG','32150','EPSG','2264','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32151','NAD83 / West Virginia South',NULL,'EPSG','4499','EPSG','4269','EPSG','14732',NULL,0); INSERT INTO "usage" VALUES('EPSG','7238','projected_crs','EPSG','32151','EPSG','2265','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32152','NAD83 / Wisconsin North',NULL,'EPSG','4499','EPSG','4269','EPSG','14831',NULL,0); INSERT INTO "usage" VALUES('EPSG','7239','projected_crs','EPSG','32152','EPSG','2267','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32153','NAD83 / Wisconsin Central',NULL,'EPSG','4499','EPSG','4269','EPSG','14832',NULL,0); INSERT INTO "usage" VALUES('EPSG','7240','projected_crs','EPSG','32153','EPSG','2266','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32154','NAD83 / Wisconsin South',NULL,'EPSG','4499','EPSG','4269','EPSG','14833',NULL,0); INSERT INTO "usage" VALUES('EPSG','7241','projected_crs','EPSG','32154','EPSG','2268','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32155','NAD83 / Wyoming East',NULL,'EPSG','4499','EPSG','4269','EPSG','14931',NULL,0); INSERT INTO "usage" VALUES('EPSG','7242','projected_crs','EPSG','32155','EPSG','2269','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32156','NAD83 / Wyoming East Central',NULL,'EPSG','4499','EPSG','4269','EPSG','14932',NULL,0); INSERT INTO "usage" VALUES('EPSG','7243','projected_crs','EPSG','32156','EPSG','2270','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32157','NAD83 / Wyoming West Central',NULL,'EPSG','4499','EPSG','4269','EPSG','14933',NULL,0); INSERT INTO "usage" VALUES('EPSG','7244','projected_crs','EPSG','32157','EPSG','2272','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32158','NAD83 / Wyoming West',NULL,'EPSG','4499','EPSG','4269','EPSG','14934',NULL,0); INSERT INTO "usage" VALUES('EPSG','7245','projected_crs','EPSG','32158','EPSG','2271','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32159','NAD83 / Wyoming Lambert',NULL,'EPSG','4499','EPSG','4269','EPSG','14930',NULL,0); INSERT INTO "usage" VALUES('EPSG','17409','projected_crs','EPSG','32159','EPSG','1419','EPSG','1135'); INSERT INTO "projected_crs" VALUES('EPSG','32161','NAD83 / Puerto Rico & Virgin Is.',NULL,'EPSG','4499','EPSG','4269','EPSG','15230',NULL,0); INSERT INTO "usage" VALUES('EPSG','7246','projected_crs','EPSG','32161','EPSG','2251','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32164','NAD83 / BLM 14N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15914',NULL,0); INSERT INTO "usage" VALUES('EPSG','7247','projected_crs','EPSG','32164','EPSG','3637','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32165','NAD83 / BLM 15N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15915',NULL,0); INSERT INTO "usage" VALUES('EPSG','7248','projected_crs','EPSG','32165','EPSG','3640','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32166','NAD83 / BLM 16N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15916',NULL,0); INSERT INTO "usage" VALUES('EPSG','7249','projected_crs','EPSG','32166','EPSG','3641','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32167','NAD83 / BLM 17N (ftUS)',NULL,'EPSG','4497','EPSG','4269','EPSG','15917',NULL,0); INSERT INTO "usage" VALUES('EPSG','7250','projected_crs','EPSG','32167','EPSG','3642','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32180','NAD83 / SCoPQ zone 2',NULL,'EPSG','4499','EPSG','4269','EPSG','17700',NULL,1); INSERT INTO "usage" VALUES('EPSG','7251','projected_crs','EPSG','32180','EPSG','1420','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32181','NAD83 / MTM zone 1',NULL,'EPSG','4496','EPSG','4269','EPSG','17701',NULL,0); INSERT INTO "usage" VALUES('EPSG','7252','projected_crs','EPSG','32181','EPSG','2226','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32182','NAD83 / MTM zone 2',NULL,'EPSG','4496','EPSG','4269','EPSG','17702',NULL,0); INSERT INTO "usage" VALUES('EPSG','7253','projected_crs','EPSG','32182','EPSG','2227','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32183','NAD83 / MTM zone 3',NULL,'EPSG','4496','EPSG','4269','EPSG','17703',NULL,0); INSERT INTO "usage" VALUES('EPSG','7254','projected_crs','EPSG','32183','EPSG','2290','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32184','NAD83 / MTM zone 4',NULL,'EPSG','4496','EPSG','4269','EPSG','17704',NULL,0); INSERT INTO "usage" VALUES('EPSG','7255','projected_crs','EPSG','32184','EPSG','2276','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32185','NAD83 / MTM zone 5',NULL,'EPSG','4496','EPSG','4269','EPSG','17705',NULL,0); INSERT INTO "usage" VALUES('EPSG','7256','projected_crs','EPSG','32185','EPSG','2277','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32186','NAD83 / MTM zone 6',NULL,'EPSG','4496','EPSG','4269','EPSG','17706',NULL,0); INSERT INTO "usage" VALUES('EPSG','7257','projected_crs','EPSG','32186','EPSG','2278','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32187','NAD83 / MTM zone 7',NULL,'EPSG','4496','EPSG','4269','EPSG','17707',NULL,0); INSERT INTO "usage" VALUES('EPSG','7258','projected_crs','EPSG','32187','EPSG','1425','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32188','NAD83 / MTM zone 8',NULL,'EPSG','4496','EPSG','4269','EPSG','17708',NULL,0); INSERT INTO "usage" VALUES('EPSG','7259','projected_crs','EPSG','32188','EPSG','2279','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32189','NAD83 / MTM zone 9',NULL,'EPSG','4496','EPSG','4269','EPSG','17709',NULL,0); INSERT INTO "usage" VALUES('EPSG','7260','projected_crs','EPSG','32189','EPSG','2280','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32190','NAD83 / MTM zone 10',NULL,'EPSG','4496','EPSG','4269','EPSG','17710',NULL,0); INSERT INTO "usage" VALUES('EPSG','7261','projected_crs','EPSG','32190','EPSG','2281','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32191','NAD83 / MTM zone 11',NULL,'EPSG','4400','EPSG','4269','EPSG','17711',NULL,0); INSERT INTO "usage" VALUES('EPSG','7262','projected_crs','EPSG','32191','EPSG','1432','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32192','NAD83 / MTM zone 12',NULL,'EPSG','4400','EPSG','4269','EPSG','17712',NULL,0); INSERT INTO "usage" VALUES('EPSG','7263','projected_crs','EPSG','32192','EPSG','1433','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32193','NAD83 / MTM zone 13',NULL,'EPSG','4400','EPSG','4269','EPSG','17713',NULL,0); INSERT INTO "usage" VALUES('EPSG','7264','projected_crs','EPSG','32193','EPSG','1434','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32194','NAD83 / MTM zone 14',NULL,'EPSG','4400','EPSG','4269','EPSG','17714',NULL,0); INSERT INTO "usage" VALUES('EPSG','7265','projected_crs','EPSG','32194','EPSG','1435','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32195','NAD83 / MTM zone 15',NULL,'EPSG','4400','EPSG','4269','EPSG','17715',NULL,0); INSERT INTO "usage" VALUES('EPSG','7266','projected_crs','EPSG','32195','EPSG','1436','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32196','NAD83 / MTM zone 16',NULL,'EPSG','4400','EPSG','4269','EPSG','17716',NULL,0); INSERT INTO "usage" VALUES('EPSG','7267','projected_crs','EPSG','32196','EPSG','1437','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32197','NAD83 / MTM zone 17',NULL,'EPSG','4400','EPSG','4269','EPSG','17717',NULL,0); INSERT INTO "usage" VALUES('EPSG','7268','projected_crs','EPSG','32197','EPSG','1438','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32198','NAD83 / Quebec Lambert',NULL,'EPSG','4499','EPSG','4269','EPSG','19944',NULL,0); INSERT INTO "usage" VALUES('EPSG','7269','projected_crs','EPSG','32198','EPSG','1368','EPSG','1210'); INSERT INTO "projected_crs" VALUES('EPSG','32199','NAD83 / Louisiana Offshore',NULL,'EPSG','4499','EPSG','4269','EPSG','11733',NULL,0); INSERT INTO "usage" VALUES('EPSG','7270','projected_crs','EPSG','32199','EPSG','1387','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32201','WGS 72 / UTM zone 1N',NULL,'EPSG','4400','EPSG','4322','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('EPSG','7271','projected_crs','EPSG','32201','EPSG','1873','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32202','WGS 72 / UTM zone 2N',NULL,'EPSG','4400','EPSG','4322','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('EPSG','7272','projected_crs','EPSG','32202','EPSG','1875','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32203','WGS 72 / UTM zone 3N',NULL,'EPSG','4400','EPSG','4322','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('EPSG','7273','projected_crs','EPSG','32203','EPSG','1877','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32204','WGS 72 / UTM zone 4N',NULL,'EPSG','4400','EPSG','4322','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','7274','projected_crs','EPSG','32204','EPSG','1879','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32205','WGS 72 / UTM zone 5N',NULL,'EPSG','4400','EPSG','4322','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','7275','projected_crs','EPSG','32205','EPSG','1881','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32206','WGS 72 / UTM zone 6N',NULL,'EPSG','4400','EPSG','4322','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('EPSG','7276','projected_crs','EPSG','32206','EPSG','1883','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32207','WGS 72 / UTM zone 7N',NULL,'EPSG','4400','EPSG','4322','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','7277','projected_crs','EPSG','32207','EPSG','1885','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32208','WGS 72 / UTM zone 8N',NULL,'EPSG','4400','EPSG','4322','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','7278','projected_crs','EPSG','32208','EPSG','1887','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32209','WGS 72 / UTM zone 9N',NULL,'EPSG','4400','EPSG','4322','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','7279','projected_crs','EPSG','32209','EPSG','1889','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32210','WGS 72 / UTM zone 10N',NULL,'EPSG','4400','EPSG','4322','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','7280','projected_crs','EPSG','32210','EPSG','1891','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32211','WGS 72 / UTM zone 11N',NULL,'EPSG','4400','EPSG','4322','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','7281','projected_crs','EPSG','32211','EPSG','1893','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32212','WGS 72 / UTM zone 12N',NULL,'EPSG','4400','EPSG','4322','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','7282','projected_crs','EPSG','32212','EPSG','1895','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32213','WGS 72 / UTM zone 13N',NULL,'EPSG','4400','EPSG','4322','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','7283','projected_crs','EPSG','32213','EPSG','1897','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32214','WGS 72 / UTM zone 14N',NULL,'EPSG','4400','EPSG','4322','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','7284','projected_crs','EPSG','32214','EPSG','1899','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32215','WGS 72 / UTM zone 15N',NULL,'EPSG','4400','EPSG','4322','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','7285','projected_crs','EPSG','32215','EPSG','1901','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32216','WGS 72 / UTM zone 16N',NULL,'EPSG','4400','EPSG','4322','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','7286','projected_crs','EPSG','32216','EPSG','1903','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32217','WGS 72 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4322','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','7287','projected_crs','EPSG','32217','EPSG','1905','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32218','WGS 72 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4322','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','7288','projected_crs','EPSG','32218','EPSG','1907','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32219','WGS 72 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4322','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','7289','projected_crs','EPSG','32219','EPSG','1909','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32220','WGS 72 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4322','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','7290','projected_crs','EPSG','32220','EPSG','1911','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32221','WGS 72 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4322','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','7291','projected_crs','EPSG','32221','EPSG','1913','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32222','WGS 72 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4322','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','7292','projected_crs','EPSG','32222','EPSG','1915','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32223','WGS 72 / UTM zone 23N',NULL,'EPSG','4400','EPSG','4322','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','7293','projected_crs','EPSG','32223','EPSG','1917','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32224','WGS 72 / UTM zone 24N',NULL,'EPSG','4400','EPSG','4322','EPSG','16024',NULL,0); INSERT INTO "usage" VALUES('EPSG','7294','projected_crs','EPSG','32224','EPSG','1919','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32225','WGS 72 / UTM zone 25N',NULL,'EPSG','4400','EPSG','4322','EPSG','16025',NULL,0); INSERT INTO "usage" VALUES('EPSG','7295','projected_crs','EPSG','32225','EPSG','1921','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32226','WGS 72 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4322','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','7296','projected_crs','EPSG','32226','EPSG','1923','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32227','WGS 72 / UTM zone 27N',NULL,'EPSG','4400','EPSG','4322','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','7297','projected_crs','EPSG','32227','EPSG','1925','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32228','WGS 72 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4322','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','7298','projected_crs','EPSG','32228','EPSG','1927','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32229','WGS 72 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4322','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','7299','projected_crs','EPSG','32229','EPSG','1929','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32230','WGS 72 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4322','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','7300','projected_crs','EPSG','32230','EPSG','1931','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32231','WGS 72 / UTM zone 31N',NULL,'EPSG','4400','EPSG','4322','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','7301','projected_crs','EPSG','32231','EPSG','1933','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32232','WGS 72 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4322','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','7302','projected_crs','EPSG','32232','EPSG','1935','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32233','WGS 72 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4322','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','7303','projected_crs','EPSG','32233','EPSG','1937','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32234','WGS 72 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4322','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','7304','projected_crs','EPSG','32234','EPSG','1939','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32235','WGS 72 / UTM zone 35N',NULL,'EPSG','4400','EPSG','4322','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','7305','projected_crs','EPSG','32235','EPSG','1941','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32236','WGS 72 / UTM zone 36N',NULL,'EPSG','4400','EPSG','4322','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','7306','projected_crs','EPSG','32236','EPSG','1943','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32237','WGS 72 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4322','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','7307','projected_crs','EPSG','32237','EPSG','1945','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32238','WGS 72 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4322','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','7308','projected_crs','EPSG','32238','EPSG','1947','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32239','WGS 72 / UTM zone 39N',NULL,'EPSG','4400','EPSG','4322','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','7309','projected_crs','EPSG','32239','EPSG','1949','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32240','WGS 72 / UTM zone 40N',NULL,'EPSG','4400','EPSG','4322','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','7310','projected_crs','EPSG','32240','EPSG','1951','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32241','WGS 72 / UTM zone 41N',NULL,'EPSG','4400','EPSG','4322','EPSG','16041',NULL,0); INSERT INTO "usage" VALUES('EPSG','7311','projected_crs','EPSG','32241','EPSG','1953','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32242','WGS 72 / UTM zone 42N',NULL,'EPSG','4400','EPSG','4322','EPSG','16042',NULL,0); INSERT INTO "usage" VALUES('EPSG','7312','projected_crs','EPSG','32242','EPSG','1955','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32243','WGS 72 / UTM zone 43N',NULL,'EPSG','4400','EPSG','4322','EPSG','16043',NULL,0); INSERT INTO "usage" VALUES('EPSG','7313','projected_crs','EPSG','32243','EPSG','1957','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32244','WGS 72 / UTM zone 44N',NULL,'EPSG','4400','EPSG','4322','EPSG','16044',NULL,0); INSERT INTO "usage" VALUES('EPSG','7314','projected_crs','EPSG','32244','EPSG','1959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32245','WGS 72 / UTM zone 45N',NULL,'EPSG','4400','EPSG','4322','EPSG','16045',NULL,0); INSERT INTO "usage" VALUES('EPSG','7315','projected_crs','EPSG','32245','EPSG','1961','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32246','WGS 72 / UTM zone 46N',NULL,'EPSG','4400','EPSG','4322','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','7316','projected_crs','EPSG','32246','EPSG','1963','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32247','WGS 72 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4322','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','7317','projected_crs','EPSG','32247','EPSG','1965','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32248','WGS 72 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4322','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','7318','projected_crs','EPSG','32248','EPSG','1967','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32249','WGS 72 / UTM zone 49N',NULL,'EPSG','4400','EPSG','4322','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','7319','projected_crs','EPSG','32249','EPSG','1969','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32250','WGS 72 / UTM zone 50N',NULL,'EPSG','4400','EPSG','4322','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('EPSG','7320','projected_crs','EPSG','32250','EPSG','1971','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32251','WGS 72 / UTM zone 51N',NULL,'EPSG','4400','EPSG','4322','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','7321','projected_crs','EPSG','32251','EPSG','1973','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32252','WGS 72 / UTM zone 52N',NULL,'EPSG','4400','EPSG','4322','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','7322','projected_crs','EPSG','32252','EPSG','1975','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32253','WGS 72 / UTM zone 53N',NULL,'EPSG','4400','EPSG','4322','EPSG','16053',NULL,0); INSERT INTO "usage" VALUES('EPSG','7323','projected_crs','EPSG','32253','EPSG','1977','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32254','WGS 72 / UTM zone 54N',NULL,'EPSG','4400','EPSG','4322','EPSG','16054',NULL,0); INSERT INTO "usage" VALUES('EPSG','7324','projected_crs','EPSG','32254','EPSG','1979','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32255','WGS 72 / UTM zone 55N',NULL,'EPSG','4400','EPSG','4322','EPSG','16055',NULL,0); INSERT INTO "usage" VALUES('EPSG','7325','projected_crs','EPSG','32255','EPSG','1981','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32256','WGS 72 / UTM zone 56N',NULL,'EPSG','4400','EPSG','4322','EPSG','16056',NULL,0); INSERT INTO "usage" VALUES('EPSG','7326','projected_crs','EPSG','32256','EPSG','1983','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32257','WGS 72 / UTM zone 57N',NULL,'EPSG','4400','EPSG','4322','EPSG','16057',NULL,0); INSERT INTO "usage" VALUES('EPSG','7327','projected_crs','EPSG','32257','EPSG','1985','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32258','WGS 72 / UTM zone 58N',NULL,'EPSG','4400','EPSG','4322','EPSG','16058',NULL,0); INSERT INTO "usage" VALUES('EPSG','7328','projected_crs','EPSG','32258','EPSG','1987','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32259','WGS 72 / UTM zone 59N',NULL,'EPSG','4400','EPSG','4322','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('EPSG','7329','projected_crs','EPSG','32259','EPSG','1989','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32260','WGS 72 / UTM zone 60N',NULL,'EPSG','4400','EPSG','4322','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('EPSG','7330','projected_crs','EPSG','32260','EPSG','1991','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32301','WGS 72 / UTM zone 1S',NULL,'EPSG','4400','EPSG','4322','EPSG','16101',NULL,0); INSERT INTO "usage" VALUES('EPSG','7331','projected_crs','EPSG','32301','EPSG','1874','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32302','WGS 72 / UTM zone 2S',NULL,'EPSG','4400','EPSG','4322','EPSG','16102',NULL,0); INSERT INTO "usage" VALUES('EPSG','7332','projected_crs','EPSG','32302','EPSG','1876','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32303','WGS 72 / UTM zone 3S',NULL,'EPSG','4400','EPSG','4322','EPSG','16103',NULL,0); INSERT INTO "usage" VALUES('EPSG','7333','projected_crs','EPSG','32303','EPSG','1878','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32304','WGS 72 / UTM zone 4S',NULL,'EPSG','4400','EPSG','4322','EPSG','16104',NULL,0); INSERT INTO "usage" VALUES('EPSG','7334','projected_crs','EPSG','32304','EPSG','1880','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32305','WGS 72 / UTM zone 5S',NULL,'EPSG','4400','EPSG','4322','EPSG','16105',NULL,0); INSERT INTO "usage" VALUES('EPSG','7335','projected_crs','EPSG','32305','EPSG','1882','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32306','WGS 72 / UTM zone 6S',NULL,'EPSG','4400','EPSG','4322','EPSG','16106',NULL,0); INSERT INTO "usage" VALUES('EPSG','7336','projected_crs','EPSG','32306','EPSG','1884','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32307','WGS 72 / UTM zone 7S',NULL,'EPSG','4400','EPSG','4322','EPSG','16107',NULL,0); INSERT INTO "usage" VALUES('EPSG','7337','projected_crs','EPSG','32307','EPSG','1886','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32308','WGS 72 / UTM zone 8S',NULL,'EPSG','4400','EPSG','4322','EPSG','16108',NULL,0); INSERT INTO "usage" VALUES('EPSG','7338','projected_crs','EPSG','32308','EPSG','1888','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32309','WGS 72 / UTM zone 9S',NULL,'EPSG','4400','EPSG','4322','EPSG','16109',NULL,0); INSERT INTO "usage" VALUES('EPSG','7339','projected_crs','EPSG','32309','EPSG','1890','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32310','WGS 72 / UTM zone 10S',NULL,'EPSG','4400','EPSG','4322','EPSG','16110',NULL,0); INSERT INTO "usage" VALUES('EPSG','7340','projected_crs','EPSG','32310','EPSG','1892','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32311','WGS 72 / UTM zone 11S',NULL,'EPSG','4400','EPSG','4322','EPSG','16111',NULL,0); INSERT INTO "usage" VALUES('EPSG','7341','projected_crs','EPSG','32311','EPSG','1894','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32312','WGS 72 / UTM zone 12S',NULL,'EPSG','4400','EPSG','4322','EPSG','16112',NULL,0); INSERT INTO "usage" VALUES('EPSG','7342','projected_crs','EPSG','32312','EPSG','1896','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32313','WGS 72 / UTM zone 13S',NULL,'EPSG','4400','EPSG','4322','EPSG','16113',NULL,0); INSERT INTO "usage" VALUES('EPSG','7343','projected_crs','EPSG','32313','EPSG','1898','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32314','WGS 72 / UTM zone 14S',NULL,'EPSG','4400','EPSG','4322','EPSG','16114',NULL,0); INSERT INTO "usage" VALUES('EPSG','7344','projected_crs','EPSG','32314','EPSG','1900','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32315','WGS 72 / UTM zone 15S',NULL,'EPSG','4400','EPSG','4322','EPSG','16115',NULL,0); INSERT INTO "usage" VALUES('EPSG','7345','projected_crs','EPSG','32315','EPSG','1902','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32316','WGS 72 / UTM zone 16S',NULL,'EPSG','4400','EPSG','4322','EPSG','16116',NULL,0); INSERT INTO "usage" VALUES('EPSG','7346','projected_crs','EPSG','32316','EPSG','1904','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32317','WGS 72 / UTM zone 17S',NULL,'EPSG','4400','EPSG','4322','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','7347','projected_crs','EPSG','32317','EPSG','1906','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32318','WGS 72 / UTM zone 18S',NULL,'EPSG','4400','EPSG','4322','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','7348','projected_crs','EPSG','32318','EPSG','1908','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32319','WGS 72 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4322','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','7349','projected_crs','EPSG','32319','EPSG','1910','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32320','WGS 72 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4322','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','7350','projected_crs','EPSG','32320','EPSG','1912','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32321','WGS 72 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4322','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','7351','projected_crs','EPSG','32321','EPSG','1914','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32322','WGS 72 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4322','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','7352','projected_crs','EPSG','32322','EPSG','1916','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32323','WGS 72 / UTM zone 23S',NULL,'EPSG','4400','EPSG','4322','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','7353','projected_crs','EPSG','32323','EPSG','1918','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32324','WGS 72 / UTM zone 24S',NULL,'EPSG','4400','EPSG','4322','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','7354','projected_crs','EPSG','32324','EPSG','1920','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32325','WGS 72 / UTM zone 25S',NULL,'EPSG','4400','EPSG','4322','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','7355','projected_crs','EPSG','32325','EPSG','1922','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32326','WGS 72 / UTM zone 26S',NULL,'EPSG','4400','EPSG','4322','EPSG','16126',NULL,0); INSERT INTO "usage" VALUES('EPSG','7356','projected_crs','EPSG','32326','EPSG','1924','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32327','WGS 72 / UTM zone 27S',NULL,'EPSG','4400','EPSG','4322','EPSG','16127',NULL,0); INSERT INTO "usage" VALUES('EPSG','7357','projected_crs','EPSG','32327','EPSG','1926','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32328','WGS 72 / UTM zone 28S',NULL,'EPSG','4400','EPSG','4322','EPSG','16128',NULL,0); INSERT INTO "usage" VALUES('EPSG','7358','projected_crs','EPSG','32328','EPSG','1928','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32329','WGS 72 / UTM zone 29S',NULL,'EPSG','4400','EPSG','4322','EPSG','16129',NULL,0); INSERT INTO "usage" VALUES('EPSG','7359','projected_crs','EPSG','32329','EPSG','1930','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32330','WGS 72 / UTM zone 30S',NULL,'EPSG','4400','EPSG','4322','EPSG','16130',NULL,0); INSERT INTO "usage" VALUES('EPSG','7360','projected_crs','EPSG','32330','EPSG','1932','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32331','WGS 72 / UTM zone 31S',NULL,'EPSG','4400','EPSG','4322','EPSG','16131',NULL,0); INSERT INTO "usage" VALUES('EPSG','7361','projected_crs','EPSG','32331','EPSG','1934','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32332','WGS 72 / UTM zone 32S',NULL,'EPSG','4400','EPSG','4322','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','7362','projected_crs','EPSG','32332','EPSG','1936','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32333','WGS 72 / UTM zone 33S',NULL,'EPSG','4400','EPSG','4322','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','7363','projected_crs','EPSG','32333','EPSG','1938','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32334','WGS 72 / UTM zone 34S',NULL,'EPSG','4400','EPSG','4322','EPSG','16134',NULL,0); INSERT INTO "usage" VALUES('EPSG','7364','projected_crs','EPSG','32334','EPSG','1940','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32335','WGS 72 / UTM zone 35S',NULL,'EPSG','4400','EPSG','4322','EPSG','16135',NULL,0); INSERT INTO "usage" VALUES('EPSG','7365','projected_crs','EPSG','32335','EPSG','1942','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32336','WGS 72 / UTM zone 36S',NULL,'EPSG','4400','EPSG','4322','EPSG','16136',NULL,0); INSERT INTO "usage" VALUES('EPSG','7366','projected_crs','EPSG','32336','EPSG','1944','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32337','WGS 72 / UTM zone 37S',NULL,'EPSG','4400','EPSG','4322','EPSG','16137',NULL,0); INSERT INTO "usage" VALUES('EPSG','7367','projected_crs','EPSG','32337','EPSG','1946','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32338','WGS 72 / UTM zone 38S',NULL,'EPSG','4400','EPSG','4322','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','7368','projected_crs','EPSG','32338','EPSG','1948','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32339','WGS 72 / UTM zone 39S',NULL,'EPSG','4400','EPSG','4322','EPSG','16139',NULL,0); INSERT INTO "usage" VALUES('EPSG','7369','projected_crs','EPSG','32339','EPSG','1950','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32340','WGS 72 / UTM zone 40S',NULL,'EPSG','4400','EPSG','4322','EPSG','16140',NULL,0); INSERT INTO "usage" VALUES('EPSG','7370','projected_crs','EPSG','32340','EPSG','1952','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32341','WGS 72 / UTM zone 41S',NULL,'EPSG','4400','EPSG','4322','EPSG','16141',NULL,0); INSERT INTO "usage" VALUES('EPSG','7371','projected_crs','EPSG','32341','EPSG','1954','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32342','WGS 72 / UTM zone 42S',NULL,'EPSG','4400','EPSG','4322','EPSG','16142',NULL,0); INSERT INTO "usage" VALUES('EPSG','7372','projected_crs','EPSG','32342','EPSG','1956','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32343','WGS 72 / UTM zone 43S',NULL,'EPSG','4400','EPSG','4322','EPSG','16143',NULL,0); INSERT INTO "usage" VALUES('EPSG','7373','projected_crs','EPSG','32343','EPSG','1958','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32344','WGS 72 / UTM zone 44S',NULL,'EPSG','4400','EPSG','4322','EPSG','16144',NULL,0); INSERT INTO "usage" VALUES('EPSG','7374','projected_crs','EPSG','32344','EPSG','1960','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32345','WGS 72 / UTM zone 45S',NULL,'EPSG','4400','EPSG','4322','EPSG','16145',NULL,0); INSERT INTO "usage" VALUES('EPSG','7375','projected_crs','EPSG','32345','EPSG','1962','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32346','WGS 72 / UTM zone 46S',NULL,'EPSG','4400','EPSG','4322','EPSG','16146',NULL,0); INSERT INTO "usage" VALUES('EPSG','7376','projected_crs','EPSG','32346','EPSG','1964','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32347','WGS 72 / UTM zone 47S',NULL,'EPSG','4400','EPSG','4322','EPSG','16147',NULL,0); INSERT INTO "usage" VALUES('EPSG','7377','projected_crs','EPSG','32347','EPSG','1966','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32348','WGS 72 / UTM zone 48S',NULL,'EPSG','4400','EPSG','4322','EPSG','16148',NULL,0); INSERT INTO "usage" VALUES('EPSG','7378','projected_crs','EPSG','32348','EPSG','1968','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32349','WGS 72 / UTM zone 49S',NULL,'EPSG','4400','EPSG','4322','EPSG','16149',NULL,0); INSERT INTO "usage" VALUES('EPSG','7379','projected_crs','EPSG','32349','EPSG','1970','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32350','WGS 72 / UTM zone 50S',NULL,'EPSG','4400','EPSG','4322','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','7380','projected_crs','EPSG','32350','EPSG','1972','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32351','WGS 72 / UTM zone 51S',NULL,'EPSG','4400','EPSG','4322','EPSG','16151',NULL,0); INSERT INTO "usage" VALUES('EPSG','7381','projected_crs','EPSG','32351','EPSG','1974','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32352','WGS 72 / UTM zone 52S',NULL,'EPSG','4400','EPSG','4322','EPSG','16152',NULL,0); INSERT INTO "usage" VALUES('EPSG','7382','projected_crs','EPSG','32352','EPSG','1976','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32353','WGS 72 / UTM zone 53S',NULL,'EPSG','4400','EPSG','4322','EPSG','16153',NULL,0); INSERT INTO "usage" VALUES('EPSG','7383','projected_crs','EPSG','32353','EPSG','1978','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32354','WGS 72 / UTM zone 54S',NULL,'EPSG','4400','EPSG','4322','EPSG','16154',NULL,0); INSERT INTO "usage" VALUES('EPSG','7384','projected_crs','EPSG','32354','EPSG','1980','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32355','WGS 72 / UTM zone 55S',NULL,'EPSG','4400','EPSG','4322','EPSG','16155',NULL,0); INSERT INTO "usage" VALUES('EPSG','7385','projected_crs','EPSG','32355','EPSG','1982','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32356','WGS 72 / UTM zone 56S',NULL,'EPSG','4400','EPSG','4322','EPSG','16156',NULL,0); INSERT INTO "usage" VALUES('EPSG','7386','projected_crs','EPSG','32356','EPSG','1984','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32357','WGS 72 / UTM zone 57S',NULL,'EPSG','4400','EPSG','4322','EPSG','16157',NULL,0); INSERT INTO "usage" VALUES('EPSG','7387','projected_crs','EPSG','32357','EPSG','1986','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32358','WGS 72 / UTM zone 58S',NULL,'EPSG','4400','EPSG','4322','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','7388','projected_crs','EPSG','32358','EPSG','1988','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32359','WGS 72 / UTM zone 59S',NULL,'EPSG','4400','EPSG','4322','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','7389','projected_crs','EPSG','32359','EPSG','1990','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32360','WGS 72 / UTM zone 60S',NULL,'EPSG','4400','EPSG','4322','EPSG','16160',NULL,0); INSERT INTO "usage" VALUES('EPSG','7390','projected_crs','EPSG','32360','EPSG','1992','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32401','WGS 72BE / UTM zone 1N',NULL,'EPSG','4400','EPSG','4324','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('EPSG','7391','projected_crs','EPSG','32401','EPSG','1873','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32402','WGS 72BE / UTM zone 2N',NULL,'EPSG','4400','EPSG','4324','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('EPSG','7392','projected_crs','EPSG','32402','EPSG','1875','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32403','WGS 72BE / UTM zone 3N',NULL,'EPSG','4400','EPSG','4324','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('EPSG','7393','projected_crs','EPSG','32403','EPSG','1877','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32404','WGS 72BE / UTM zone 4N',NULL,'EPSG','4400','EPSG','4324','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','7394','projected_crs','EPSG','32404','EPSG','1879','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32405','WGS 72BE / UTM zone 5N',NULL,'EPSG','4400','EPSG','4324','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','7395','projected_crs','EPSG','32405','EPSG','1881','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32406','WGS 72BE / UTM zone 6N',NULL,'EPSG','4400','EPSG','4324','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('EPSG','7396','projected_crs','EPSG','32406','EPSG','1883','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32407','WGS 72BE / UTM zone 7N',NULL,'EPSG','4400','EPSG','4324','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','7397','projected_crs','EPSG','32407','EPSG','1885','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32408','WGS 72BE / UTM zone 8N',NULL,'EPSG','4400','EPSG','4324','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','7398','projected_crs','EPSG','32408','EPSG','1887','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32409','WGS 72BE / UTM zone 9N',NULL,'EPSG','4400','EPSG','4324','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','7399','projected_crs','EPSG','32409','EPSG','1889','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32410','WGS 72BE / UTM zone 10N',NULL,'EPSG','4400','EPSG','4324','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','7400','projected_crs','EPSG','32410','EPSG','1891','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32411','WGS 72BE / UTM zone 11N',NULL,'EPSG','4400','EPSG','4324','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','7401','projected_crs','EPSG','32411','EPSG','1893','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32412','WGS 72BE / UTM zone 12N',NULL,'EPSG','4400','EPSG','4324','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','7402','projected_crs','EPSG','32412','EPSG','1895','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32413','WGS 72BE / UTM zone 13N',NULL,'EPSG','4400','EPSG','4324','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','7403','projected_crs','EPSG','32413','EPSG','1897','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32414','WGS 72BE / UTM zone 14N',NULL,'EPSG','4400','EPSG','4324','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','7404','projected_crs','EPSG','32414','EPSG','1899','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32415','WGS 72BE / UTM zone 15N',NULL,'EPSG','4400','EPSG','4324','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','7405','projected_crs','EPSG','32415','EPSG','1901','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32416','WGS 72BE / UTM zone 16N',NULL,'EPSG','4400','EPSG','4324','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','7406','projected_crs','EPSG','32416','EPSG','1903','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32417','WGS 72BE / UTM zone 17N',NULL,'EPSG','4400','EPSG','4324','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','7407','projected_crs','EPSG','32417','EPSG','1905','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32418','WGS 72BE / UTM zone 18N',NULL,'EPSG','4400','EPSG','4324','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','7408','projected_crs','EPSG','32418','EPSG','1907','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32419','WGS 72BE / UTM zone 19N',NULL,'EPSG','4400','EPSG','4324','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','7409','projected_crs','EPSG','32419','EPSG','1909','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32420','WGS 72BE / UTM zone 20N',NULL,'EPSG','4400','EPSG','4324','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','7410','projected_crs','EPSG','32420','EPSG','1911','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32421','WGS 72BE / UTM zone 21N',NULL,'EPSG','4400','EPSG','4324','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','7411','projected_crs','EPSG','32421','EPSG','1913','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32422','WGS 72BE / UTM zone 22N',NULL,'EPSG','4400','EPSG','4324','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','7412','projected_crs','EPSG','32422','EPSG','1915','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32423','WGS 72BE / UTM zone 23N',NULL,'EPSG','4400','EPSG','4324','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','7413','projected_crs','EPSG','32423','EPSG','1917','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32424','WGS 72BE / UTM zone 24N',NULL,'EPSG','4400','EPSG','4324','EPSG','16024',NULL,0); INSERT INTO "usage" VALUES('EPSG','7414','projected_crs','EPSG','32424','EPSG','1919','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32425','WGS 72BE / UTM zone 25N',NULL,'EPSG','4400','EPSG','4324','EPSG','16025',NULL,0); INSERT INTO "usage" VALUES('EPSG','7415','projected_crs','EPSG','32425','EPSG','1921','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32426','WGS 72BE / UTM zone 26N',NULL,'EPSG','4400','EPSG','4324','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','7416','projected_crs','EPSG','32426','EPSG','1923','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32427','WGS 72BE / UTM zone 27N',NULL,'EPSG','4400','EPSG','4324','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','7417','projected_crs','EPSG','32427','EPSG','1925','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32428','WGS 72BE / UTM zone 28N',NULL,'EPSG','4400','EPSG','4324','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','7418','projected_crs','EPSG','32428','EPSG','1927','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32429','WGS 72BE / UTM zone 29N',NULL,'EPSG','4400','EPSG','4324','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','7419','projected_crs','EPSG','32429','EPSG','1929','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32430','WGS 72BE / UTM zone 30N',NULL,'EPSG','4400','EPSG','4324','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','7420','projected_crs','EPSG','32430','EPSG','1931','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32431','WGS 72BE / UTM zone 31N',NULL,'EPSG','4400','EPSG','4324','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','7421','projected_crs','EPSG','32431','EPSG','1933','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32432','WGS 72BE / UTM zone 32N',NULL,'EPSG','4400','EPSG','4324','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','7422','projected_crs','EPSG','32432','EPSG','1935','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32433','WGS 72BE / UTM zone 33N',NULL,'EPSG','4400','EPSG','4324','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','7423','projected_crs','EPSG','32433','EPSG','3464','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32434','WGS 72BE / UTM zone 34N',NULL,'EPSG','4400','EPSG','4324','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','7424','projected_crs','EPSG','32434','EPSG','3465','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32435','WGS 72BE / UTM zone 35N',NULL,'EPSG','4400','EPSG','4324','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','7425','projected_crs','EPSG','32435','EPSG','1941','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32436','WGS 72BE / UTM zone 36N',NULL,'EPSG','4400','EPSG','4324','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','7426','projected_crs','EPSG','32436','EPSG','1943','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32437','WGS 72BE / UTM zone 37N',NULL,'EPSG','4400','EPSG','4324','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','7427','projected_crs','EPSG','32437','EPSG','1945','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32438','WGS 72BE / UTM zone 38N',NULL,'EPSG','4400','EPSG','4324','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','7428','projected_crs','EPSG','32438','EPSG','1947','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32439','WGS 72BE / UTM zone 39N',NULL,'EPSG','4400','EPSG','4324','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','7429','projected_crs','EPSG','32439','EPSG','1949','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32440','WGS 72BE / UTM zone 40N',NULL,'EPSG','4400','EPSG','4324','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','7430','projected_crs','EPSG','32440','EPSG','1951','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32441','WGS 72BE / UTM zone 41N',NULL,'EPSG','4400','EPSG','4324','EPSG','16041',NULL,0); INSERT INTO "usage" VALUES('EPSG','7431','projected_crs','EPSG','32441','EPSG','1953','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32442','WGS 72BE / UTM zone 42N',NULL,'EPSG','4400','EPSG','4324','EPSG','16042',NULL,0); INSERT INTO "usage" VALUES('EPSG','7432','projected_crs','EPSG','32442','EPSG','1955','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32443','WGS 72BE / UTM zone 43N',NULL,'EPSG','4400','EPSG','4324','EPSG','16043',NULL,0); INSERT INTO "usage" VALUES('EPSG','7433','projected_crs','EPSG','32443','EPSG','1957','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32444','WGS 72BE / UTM zone 44N',NULL,'EPSG','4400','EPSG','4324','EPSG','16044',NULL,0); INSERT INTO "usage" VALUES('EPSG','7434','projected_crs','EPSG','32444','EPSG','1959','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32445','WGS 72BE / UTM zone 45N',NULL,'EPSG','4400','EPSG','4324','EPSG','16045',NULL,0); INSERT INTO "usage" VALUES('EPSG','7435','projected_crs','EPSG','32445','EPSG','1961','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32446','WGS 72BE / UTM zone 46N',NULL,'EPSG','4400','EPSG','4324','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','7436','projected_crs','EPSG','32446','EPSG','1963','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32447','WGS 72BE / UTM zone 47N',NULL,'EPSG','4400','EPSG','4324','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','7437','projected_crs','EPSG','32447','EPSG','1965','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32448','WGS 72BE / UTM zone 48N',NULL,'EPSG','4400','EPSG','4324','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','7438','projected_crs','EPSG','32448','EPSG','1993','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32449','WGS 72BE / UTM zone 49N',NULL,'EPSG','4400','EPSG','4324','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','7439','projected_crs','EPSG','32449','EPSG','1994','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32450','WGS 72BE / UTM zone 50N',NULL,'EPSG','4400','EPSG','4324','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('EPSG','7440','projected_crs','EPSG','32450','EPSG','1971','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32451','WGS 72BE / UTM zone 51N',NULL,'EPSG','4400','EPSG','4324','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','7441','projected_crs','EPSG','32451','EPSG','1973','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32452','WGS 72BE / UTM zone 52N',NULL,'EPSG','4400','EPSG','4324','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','7442','projected_crs','EPSG','32452','EPSG','1975','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32453','WGS 72BE / UTM zone 53N',NULL,'EPSG','4400','EPSG','4324','EPSG','16053',NULL,0); INSERT INTO "usage" VALUES('EPSG','7443','projected_crs','EPSG','32453','EPSG','1977','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32454','WGS 72BE / UTM zone 54N',NULL,'EPSG','4400','EPSG','4324','EPSG','16054',NULL,0); INSERT INTO "usage" VALUES('EPSG','7444','projected_crs','EPSG','32454','EPSG','1979','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32455','WGS 72BE / UTM zone 55N',NULL,'EPSG','4400','EPSG','4324','EPSG','16055',NULL,0); INSERT INTO "usage" VALUES('EPSG','7445','projected_crs','EPSG','32455','EPSG','1981','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32456','WGS 72BE / UTM zone 56N',NULL,'EPSG','4400','EPSG','4324','EPSG','16056',NULL,0); INSERT INTO "usage" VALUES('EPSG','7446','projected_crs','EPSG','32456','EPSG','1983','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32457','WGS 72BE / UTM zone 57N',NULL,'EPSG','4400','EPSG','4324','EPSG','16057',NULL,0); INSERT INTO "usage" VALUES('EPSG','7447','projected_crs','EPSG','32457','EPSG','1985','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32458','WGS 72BE / UTM zone 58N',NULL,'EPSG','4400','EPSG','4324','EPSG','16058',NULL,0); INSERT INTO "usage" VALUES('EPSG','7448','projected_crs','EPSG','32458','EPSG','1987','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32459','WGS 72BE / UTM zone 59N',NULL,'EPSG','4400','EPSG','4324','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('EPSG','7449','projected_crs','EPSG','32459','EPSG','1989','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32460','WGS 72BE / UTM zone 60N',NULL,'EPSG','4400','EPSG','4324','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('EPSG','7450','projected_crs','EPSG','32460','EPSG','1991','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32501','WGS 72BE / UTM zone 1S',NULL,'EPSG','4400','EPSG','4324','EPSG','16101',NULL,0); INSERT INTO "usage" VALUES('EPSG','7451','projected_crs','EPSG','32501','EPSG','1874','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32502','WGS 72BE / UTM zone 2S',NULL,'EPSG','4400','EPSG','4324','EPSG','16102',NULL,0); INSERT INTO "usage" VALUES('EPSG','7452','projected_crs','EPSG','32502','EPSG','1876','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32503','WGS 72BE / UTM zone 3S',NULL,'EPSG','4400','EPSG','4324','EPSG','16103',NULL,0); INSERT INTO "usage" VALUES('EPSG','7453','projected_crs','EPSG','32503','EPSG','1878','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32504','WGS 72BE / UTM zone 4S',NULL,'EPSG','4400','EPSG','4324','EPSG','16104',NULL,0); INSERT INTO "usage" VALUES('EPSG','7454','projected_crs','EPSG','32504','EPSG','1880','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32505','WGS 72BE / UTM zone 5S',NULL,'EPSG','4400','EPSG','4324','EPSG','16105',NULL,0); INSERT INTO "usage" VALUES('EPSG','7455','projected_crs','EPSG','32505','EPSG','1882','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32506','WGS 72BE / UTM zone 6S',NULL,'EPSG','4400','EPSG','4324','EPSG','16106',NULL,0); INSERT INTO "usage" VALUES('EPSG','7456','projected_crs','EPSG','32506','EPSG','1884','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32507','WGS 72BE / UTM zone 7S',NULL,'EPSG','4400','EPSG','4324','EPSG','16107',NULL,0); INSERT INTO "usage" VALUES('EPSG','7457','projected_crs','EPSG','32507','EPSG','1886','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32508','WGS 72BE / UTM zone 8S',NULL,'EPSG','4400','EPSG','4324','EPSG','16108',NULL,0); INSERT INTO "usage" VALUES('EPSG','7458','projected_crs','EPSG','32508','EPSG','1888','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32509','WGS 72BE / UTM zone 9S',NULL,'EPSG','4400','EPSG','4324','EPSG','16109',NULL,0); INSERT INTO "usage" VALUES('EPSG','7459','projected_crs','EPSG','32509','EPSG','1890','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32510','WGS 72BE / UTM zone 10S',NULL,'EPSG','4400','EPSG','4324','EPSG','16110',NULL,0); INSERT INTO "usage" VALUES('EPSG','7460','projected_crs','EPSG','32510','EPSG','1892','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32511','WGS 72BE / UTM zone 11S',NULL,'EPSG','4400','EPSG','4324','EPSG','16111',NULL,0); INSERT INTO "usage" VALUES('EPSG','7461','projected_crs','EPSG','32511','EPSG','1894','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32512','WGS 72BE / UTM zone 12S',NULL,'EPSG','4400','EPSG','4324','EPSG','16112',NULL,0); INSERT INTO "usage" VALUES('EPSG','7462','projected_crs','EPSG','32512','EPSG','1896','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32513','WGS 72BE / UTM zone 13S',NULL,'EPSG','4400','EPSG','4324','EPSG','16113',NULL,0); INSERT INTO "usage" VALUES('EPSG','7463','projected_crs','EPSG','32513','EPSG','1898','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32514','WGS 72BE / UTM zone 14S',NULL,'EPSG','4400','EPSG','4324','EPSG','16114',NULL,0); INSERT INTO "usage" VALUES('EPSG','7464','projected_crs','EPSG','32514','EPSG','1900','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32515','WGS 72BE / UTM zone 15S',NULL,'EPSG','4400','EPSG','4324','EPSG','16115',NULL,0); INSERT INTO "usage" VALUES('EPSG','7465','projected_crs','EPSG','32515','EPSG','1902','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32516','WGS 72BE / UTM zone 16S',NULL,'EPSG','4400','EPSG','4324','EPSG','16116',NULL,0); INSERT INTO "usage" VALUES('EPSG','7466','projected_crs','EPSG','32516','EPSG','1904','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32517','WGS 72BE / UTM zone 17S',NULL,'EPSG','4400','EPSG','4324','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','7467','projected_crs','EPSG','32517','EPSG','1906','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32518','WGS 72BE / UTM zone 18S',NULL,'EPSG','4400','EPSG','4324','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','7468','projected_crs','EPSG','32518','EPSG','1908','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32519','WGS 72BE / UTM zone 19S',NULL,'EPSG','4400','EPSG','4324','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','7469','projected_crs','EPSG','32519','EPSG','1910','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32520','WGS 72BE / UTM zone 20S',NULL,'EPSG','4400','EPSG','4324','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','7470','projected_crs','EPSG','32520','EPSG','1912','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32521','WGS 72BE / UTM zone 21S',NULL,'EPSG','4400','EPSG','4324','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','7471','projected_crs','EPSG','32521','EPSG','1914','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32522','WGS 72BE / UTM zone 22S',NULL,'EPSG','4400','EPSG','4324','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','7472','projected_crs','EPSG','32522','EPSG','1916','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32523','WGS 72BE / UTM zone 23S',NULL,'EPSG','4400','EPSG','4324','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','7473','projected_crs','EPSG','32523','EPSG','1918','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32524','WGS 72BE / UTM zone 24S',NULL,'EPSG','4400','EPSG','4324','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','7474','projected_crs','EPSG','32524','EPSG','1920','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32525','WGS 72BE / UTM zone 25S',NULL,'EPSG','4400','EPSG','4324','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','7475','projected_crs','EPSG','32525','EPSG','1922','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32526','WGS 72BE / UTM zone 26S',NULL,'EPSG','4400','EPSG','4324','EPSG','16126',NULL,0); INSERT INTO "usage" VALUES('EPSG','7476','projected_crs','EPSG','32526','EPSG','1924','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32527','WGS 72BE / UTM zone 27S',NULL,'EPSG','4400','EPSG','4324','EPSG','16127',NULL,0); INSERT INTO "usage" VALUES('EPSG','7477','projected_crs','EPSG','32527','EPSG','1926','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32528','WGS 72BE / UTM zone 28S',NULL,'EPSG','4400','EPSG','4324','EPSG','16128',NULL,0); INSERT INTO "usage" VALUES('EPSG','7478','projected_crs','EPSG','32528','EPSG','1928','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32529','WGS 72BE / UTM zone 29S',NULL,'EPSG','4400','EPSG','4324','EPSG','16129',NULL,0); INSERT INTO "usage" VALUES('EPSG','7479','projected_crs','EPSG','32529','EPSG','1930','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32530','WGS 72BE / UTM zone 30S',NULL,'EPSG','4400','EPSG','4324','EPSG','16130',NULL,0); INSERT INTO "usage" VALUES('EPSG','7480','projected_crs','EPSG','32530','EPSG','1932','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32531','WGS 72BE / UTM zone 31S',NULL,'EPSG','4400','EPSG','4324','EPSG','16131',NULL,0); INSERT INTO "usage" VALUES('EPSG','7481','projected_crs','EPSG','32531','EPSG','1934','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32532','WGS 72BE / UTM zone 32S',NULL,'EPSG','4400','EPSG','4324','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','7482','projected_crs','EPSG','32532','EPSG','1936','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32533','WGS 72BE / UTM zone 33S',NULL,'EPSG','4400','EPSG','4324','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','7483','projected_crs','EPSG','32533','EPSG','1938','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32534','WGS 72BE / UTM zone 34S',NULL,'EPSG','4400','EPSG','4324','EPSG','16134',NULL,0); INSERT INTO "usage" VALUES('EPSG','7484','projected_crs','EPSG','32534','EPSG','1940','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32535','WGS 72BE / UTM zone 35S',NULL,'EPSG','4400','EPSG','4324','EPSG','16135',NULL,0); INSERT INTO "usage" VALUES('EPSG','7485','projected_crs','EPSG','32535','EPSG','1942','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32536','WGS 72BE / UTM zone 36S',NULL,'EPSG','4400','EPSG','4324','EPSG','16136',NULL,0); INSERT INTO "usage" VALUES('EPSG','7486','projected_crs','EPSG','32536','EPSG','1944','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32537','WGS 72BE / UTM zone 37S',NULL,'EPSG','4400','EPSG','4324','EPSG','16137',NULL,0); INSERT INTO "usage" VALUES('EPSG','7487','projected_crs','EPSG','32537','EPSG','1946','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32538','WGS 72BE / UTM zone 38S',NULL,'EPSG','4400','EPSG','4324','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','7488','projected_crs','EPSG','32538','EPSG','1948','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32539','WGS 72BE / UTM zone 39S',NULL,'EPSG','4400','EPSG','4324','EPSG','16139',NULL,0); INSERT INTO "usage" VALUES('EPSG','7489','projected_crs','EPSG','32539','EPSG','1950','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32540','WGS 72BE / UTM zone 40S',NULL,'EPSG','4400','EPSG','4324','EPSG','16140',NULL,0); INSERT INTO "usage" VALUES('EPSG','7490','projected_crs','EPSG','32540','EPSG','1952','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32541','WGS 72BE / UTM zone 41S',NULL,'EPSG','4400','EPSG','4324','EPSG','16141',NULL,0); INSERT INTO "usage" VALUES('EPSG','7491','projected_crs','EPSG','32541','EPSG','1954','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32542','WGS 72BE / UTM zone 42S',NULL,'EPSG','4400','EPSG','4324','EPSG','16142',NULL,0); INSERT INTO "usage" VALUES('EPSG','7492','projected_crs','EPSG','32542','EPSG','1956','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32543','WGS 72BE / UTM zone 43S',NULL,'EPSG','4400','EPSG','4324','EPSG','16143',NULL,0); INSERT INTO "usage" VALUES('EPSG','7493','projected_crs','EPSG','32543','EPSG','1958','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32544','WGS 72BE / UTM zone 44S',NULL,'EPSG','4400','EPSG','4324','EPSG','16144',NULL,0); INSERT INTO "usage" VALUES('EPSG','7494','projected_crs','EPSG','32544','EPSG','1960','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32545','WGS 72BE / UTM zone 45S',NULL,'EPSG','4400','EPSG','4324','EPSG','16145',NULL,0); INSERT INTO "usage" VALUES('EPSG','7495','projected_crs','EPSG','32545','EPSG','1962','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32546','WGS 72BE / UTM zone 46S',NULL,'EPSG','4400','EPSG','4324','EPSG','16146',NULL,0); INSERT INTO "usage" VALUES('EPSG','7496','projected_crs','EPSG','32546','EPSG','1964','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32547','WGS 72BE / UTM zone 47S',NULL,'EPSG','4400','EPSG','4324','EPSG','16147',NULL,0); INSERT INTO "usage" VALUES('EPSG','7497','projected_crs','EPSG','32547','EPSG','1966','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32548','WGS 72BE / UTM zone 48S',NULL,'EPSG','4400','EPSG','4324','EPSG','16148',NULL,0); INSERT INTO "usage" VALUES('EPSG','7498','projected_crs','EPSG','32548','EPSG','1968','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32549','WGS 72BE / UTM zone 49S',NULL,'EPSG','4400','EPSG','4324','EPSG','16149',NULL,0); INSERT INTO "usage" VALUES('EPSG','7499','projected_crs','EPSG','32549','EPSG','1995','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32550','WGS 72BE / UTM zone 50S',NULL,'EPSG','4400','EPSG','4324','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','7500','projected_crs','EPSG','32550','EPSG','1972','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32551','WGS 72BE / UTM zone 51S',NULL,'EPSG','4400','EPSG','4324','EPSG','16151',NULL,0); INSERT INTO "usage" VALUES('EPSG','7501','projected_crs','EPSG','32551','EPSG','1974','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32552','WGS 72BE / UTM zone 52S',NULL,'EPSG','4400','EPSG','4324','EPSG','16152',NULL,0); INSERT INTO "usage" VALUES('EPSG','7502','projected_crs','EPSG','32552','EPSG','1976','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32553','WGS 72BE / UTM zone 53S',NULL,'EPSG','4400','EPSG','4324','EPSG','16153',NULL,0); INSERT INTO "usage" VALUES('EPSG','7503','projected_crs','EPSG','32553','EPSG','1978','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32554','WGS 72BE / UTM zone 54S',NULL,'EPSG','4400','EPSG','4324','EPSG','16154',NULL,0); INSERT INTO "usage" VALUES('EPSG','7504','projected_crs','EPSG','32554','EPSG','1980','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32555','WGS 72BE / UTM zone 55S',NULL,'EPSG','4400','EPSG','4324','EPSG','16155',NULL,0); INSERT INTO "usage" VALUES('EPSG','7505','projected_crs','EPSG','32555','EPSG','1982','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32556','WGS 72BE / UTM zone 56S',NULL,'EPSG','4400','EPSG','4324','EPSG','16156',NULL,0); INSERT INTO "usage" VALUES('EPSG','7506','projected_crs','EPSG','32556','EPSG','1984','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32557','WGS 72BE / UTM zone 57S',NULL,'EPSG','4400','EPSG','4324','EPSG','16157',NULL,0); INSERT INTO "usage" VALUES('EPSG','7507','projected_crs','EPSG','32557','EPSG','1986','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32558','WGS 72BE / UTM zone 58S',NULL,'EPSG','4400','EPSG','4324','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','7508','projected_crs','EPSG','32558','EPSG','1988','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32559','WGS 72BE / UTM zone 59S',NULL,'EPSG','4400','EPSG','4324','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','7509','projected_crs','EPSG','32559','EPSG','1990','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32560','WGS 72BE / UTM zone 60S',NULL,'EPSG','4400','EPSG','4324','EPSG','16160',NULL,0); INSERT INTO "usage" VALUES('EPSG','7510','projected_crs','EPSG','32560','EPSG','1992','EPSG','1142'); INSERT INTO "projected_crs" VALUES('EPSG','32600','WGS 84 / UTM grid system (northern hemisphere)',NULL,'EPSG','4400','EPSG','4326','EPSG','16000',NULL,0); INSERT INTO "usage" VALUES('EPSG','7511','projected_crs','EPSG','32600','EPSG','1998','EPSG','1163'); INSERT INTO "projected_crs" VALUES('EPSG','32601','WGS 84 / UTM zone 1N',NULL,'EPSG','4400','EPSG','4326','EPSG','16001',NULL,0); INSERT INTO "usage" VALUES('EPSG','7512','projected_crs','EPSG','32601','EPSG','2000','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32602','WGS 84 / UTM zone 2N',NULL,'EPSG','4400','EPSG','4326','EPSG','16002',NULL,0); INSERT INTO "usage" VALUES('EPSG','7513','projected_crs','EPSG','32602','EPSG','2002','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32603','WGS 84 / UTM zone 3N',NULL,'EPSG','4400','EPSG','4326','EPSG','16003',NULL,0); INSERT INTO "usage" VALUES('EPSG','7514','projected_crs','EPSG','32603','EPSG','2004','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32604','WGS 84 / UTM zone 4N',NULL,'EPSG','4400','EPSG','4326','EPSG','16004',NULL,0); INSERT INTO "usage" VALUES('EPSG','7515','projected_crs','EPSG','32604','EPSG','2006','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32605','WGS 84 / UTM zone 5N',NULL,'EPSG','4400','EPSG','4326','EPSG','16005',NULL,0); INSERT INTO "usage" VALUES('EPSG','7516','projected_crs','EPSG','32605','EPSG','2008','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32606','WGS 84 / UTM zone 6N',NULL,'EPSG','4400','EPSG','4326','EPSG','16006',NULL,0); INSERT INTO "usage" VALUES('EPSG','7517','projected_crs','EPSG','32606','EPSG','2010','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32607','WGS 84 / UTM zone 7N',NULL,'EPSG','4400','EPSG','4326','EPSG','16007',NULL,0); INSERT INTO "usage" VALUES('EPSG','7518','projected_crs','EPSG','32607','EPSG','2012','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32608','WGS 84 / UTM zone 8N',NULL,'EPSG','4400','EPSG','4326','EPSG','16008',NULL,0); INSERT INTO "usage" VALUES('EPSG','7519','projected_crs','EPSG','32608','EPSG','2014','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32609','WGS 84 / UTM zone 9N',NULL,'EPSG','4400','EPSG','4326','EPSG','16009',NULL,0); INSERT INTO "usage" VALUES('EPSG','7520','projected_crs','EPSG','32609','EPSG','2016','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32610','WGS 84 / UTM zone 10N',NULL,'EPSG','4400','EPSG','4326','EPSG','16010',NULL,0); INSERT INTO "usage" VALUES('EPSG','7521','projected_crs','EPSG','32610','EPSG','2018','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32611','WGS 84 / UTM zone 11N',NULL,'EPSG','4400','EPSG','4326','EPSG','16011',NULL,0); INSERT INTO "usage" VALUES('EPSG','7522','projected_crs','EPSG','32611','EPSG','2020','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32612','WGS 84 / UTM zone 12N',NULL,'EPSG','4400','EPSG','4326','EPSG','16012',NULL,0); INSERT INTO "usage" VALUES('EPSG','7523','projected_crs','EPSG','32612','EPSG','2022','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32613','WGS 84 / UTM zone 13N',NULL,'EPSG','4400','EPSG','4326','EPSG','16013',NULL,0); INSERT INTO "usage" VALUES('EPSG','7524','projected_crs','EPSG','32613','EPSG','2024','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32614','WGS 84 / UTM zone 14N',NULL,'EPSG','4400','EPSG','4326','EPSG','16014',NULL,0); INSERT INTO "usage" VALUES('EPSG','7525','projected_crs','EPSG','32614','EPSG','2026','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32615','WGS 84 / UTM zone 15N',NULL,'EPSG','4400','EPSG','4326','EPSG','16015',NULL,0); INSERT INTO "usage" VALUES('EPSG','7526','projected_crs','EPSG','32615','EPSG','2028','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32616','WGS 84 / UTM zone 16N',NULL,'EPSG','4400','EPSG','4326','EPSG','16016',NULL,0); INSERT INTO "usage" VALUES('EPSG','7527','projected_crs','EPSG','32616','EPSG','2030','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32617','WGS 84 / UTM zone 17N',NULL,'EPSG','4400','EPSG','4326','EPSG','16017',NULL,0); INSERT INTO "usage" VALUES('EPSG','7528','projected_crs','EPSG','32617','EPSG','2032','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32618','WGS 84 / UTM zone 18N',NULL,'EPSG','4400','EPSG','4326','EPSG','16018',NULL,0); INSERT INTO "usage" VALUES('EPSG','7529','projected_crs','EPSG','32618','EPSG','2034','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32619','WGS 84 / UTM zone 19N',NULL,'EPSG','4400','EPSG','4326','EPSG','16019',NULL,0); INSERT INTO "usage" VALUES('EPSG','7530','projected_crs','EPSG','32619','EPSG','2036','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32620','WGS 84 / UTM zone 20N',NULL,'EPSG','4400','EPSG','4326','EPSG','16020',NULL,0); INSERT INTO "usage" VALUES('EPSG','7531','projected_crs','EPSG','32620','EPSG','2038','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32621','WGS 84 / UTM zone 21N',NULL,'EPSG','4400','EPSG','4326','EPSG','16021',NULL,0); INSERT INTO "usage" VALUES('EPSG','7532','projected_crs','EPSG','32621','EPSG','2040','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32622','WGS 84 / UTM zone 22N',NULL,'EPSG','4400','EPSG','4326','EPSG','16022',NULL,0); INSERT INTO "usage" VALUES('EPSG','7533','projected_crs','EPSG','32622','EPSG','2042','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32623','WGS 84 / UTM zone 23N',NULL,'EPSG','4400','EPSG','4326','EPSG','16023',NULL,0); INSERT INTO "usage" VALUES('EPSG','7534','projected_crs','EPSG','32623','EPSG','2044','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32624','WGS 84 / UTM zone 24N',NULL,'EPSG','4400','EPSG','4326','EPSG','16024',NULL,0); INSERT INTO "usage" VALUES('EPSG','7535','projected_crs','EPSG','32624','EPSG','2046','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32625','WGS 84 / UTM zone 25N',NULL,'EPSG','4400','EPSG','4326','EPSG','16025',NULL,0); INSERT INTO "usage" VALUES('EPSG','7536','projected_crs','EPSG','32625','EPSG','2048','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32626','WGS 84 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4326','EPSG','16026',NULL,0); INSERT INTO "usage" VALUES('EPSG','7537','projected_crs','EPSG','32626','EPSG','2050','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32627','WGS 84 / UTM zone 27N',NULL,'EPSG','4400','EPSG','4326','EPSG','16027',NULL,0); INSERT INTO "usage" VALUES('EPSG','7538','projected_crs','EPSG','32627','EPSG','2052','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32628','WGS 84 / UTM zone 28N',NULL,'EPSG','4400','EPSG','4326','EPSG','16028',NULL,0); INSERT INTO "usage" VALUES('EPSG','7539','projected_crs','EPSG','32628','EPSG','2054','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32629','WGS 84 / UTM zone 29N',NULL,'EPSG','4400','EPSG','4326','EPSG','16029',NULL,0); INSERT INTO "usage" VALUES('EPSG','7540','projected_crs','EPSG','32629','EPSG','2056','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32630','WGS 84 / UTM zone 30N',NULL,'EPSG','4400','EPSG','4326','EPSG','16030',NULL,0); INSERT INTO "usage" VALUES('EPSG','7541','projected_crs','EPSG','32630','EPSG','2058','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32631','WGS 84 / UTM zone 31N',NULL,'EPSG','4400','EPSG','4326','EPSG','16031',NULL,0); INSERT INTO "usage" VALUES('EPSG','7542','projected_crs','EPSG','32631','EPSG','2060','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32632','WGS 84 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4326','EPSG','16032',NULL,0); INSERT INTO "usage" VALUES('EPSG','7543','projected_crs','EPSG','32632','EPSG','2062','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32633','WGS 84 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4326','EPSG','16033',NULL,0); INSERT INTO "usage" VALUES('EPSG','7544','projected_crs','EPSG','32633','EPSG','2064','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32634','WGS 84 / UTM zone 34N',NULL,'EPSG','4400','EPSG','4326','EPSG','16034',NULL,0); INSERT INTO "usage" VALUES('EPSG','7545','projected_crs','EPSG','32634','EPSG','2066','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32635','WGS 84 / UTM zone 35N',NULL,'EPSG','4400','EPSG','4326','EPSG','16035',NULL,0); INSERT INTO "usage" VALUES('EPSG','7546','projected_crs','EPSG','32635','EPSG','2068','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32636','WGS 84 / UTM zone 36N',NULL,'EPSG','4400','EPSG','4326','EPSG','16036',NULL,0); INSERT INTO "usage" VALUES('EPSG','7547','projected_crs','EPSG','32636','EPSG','2070','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32637','WGS 84 / UTM zone 37N',NULL,'EPSG','4400','EPSG','4326','EPSG','16037',NULL,0); INSERT INTO "usage" VALUES('EPSG','7548','projected_crs','EPSG','32637','EPSG','2072','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32638','WGS 84 / UTM zone 38N',NULL,'EPSG','4400','EPSG','4326','EPSG','16038',NULL,0); INSERT INTO "usage" VALUES('EPSG','7549','projected_crs','EPSG','32638','EPSG','2074','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32639','WGS 84 / UTM zone 39N',NULL,'EPSG','4400','EPSG','4326','EPSG','16039',NULL,0); INSERT INTO "usage" VALUES('EPSG','7550','projected_crs','EPSG','32639','EPSG','2076','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32640','WGS 84 / UTM zone 40N',NULL,'EPSG','4400','EPSG','4326','EPSG','16040',NULL,0); INSERT INTO "usage" VALUES('EPSG','7551','projected_crs','EPSG','32640','EPSG','2078','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32641','WGS 84 / UTM zone 41N',NULL,'EPSG','4400','EPSG','4326','EPSG','16041',NULL,0); INSERT INTO "usage" VALUES('EPSG','7552','projected_crs','EPSG','32641','EPSG','2080','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32642','WGS 84 / UTM zone 42N',NULL,'EPSG','4400','EPSG','4326','EPSG','16042',NULL,0); INSERT INTO "usage" VALUES('EPSG','7553','projected_crs','EPSG','32642','EPSG','2082','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32643','WGS 84 / UTM zone 43N',NULL,'EPSG','4400','EPSG','4326','EPSG','16043',NULL,0); INSERT INTO "usage" VALUES('EPSG','7554','projected_crs','EPSG','32643','EPSG','2084','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32644','WGS 84 / UTM zone 44N',NULL,'EPSG','4400','EPSG','4326','EPSG','16044',NULL,0); INSERT INTO "usage" VALUES('EPSG','7555','projected_crs','EPSG','32644','EPSG','2086','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32645','WGS 84 / UTM zone 45N',NULL,'EPSG','4400','EPSG','4326','EPSG','16045',NULL,0); INSERT INTO "usage" VALUES('EPSG','7556','projected_crs','EPSG','32645','EPSG','2088','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32646','WGS 84 / UTM zone 46N',NULL,'EPSG','4400','EPSG','4326','EPSG','16046',NULL,0); INSERT INTO "usage" VALUES('EPSG','7557','projected_crs','EPSG','32646','EPSG','2090','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32647','WGS 84 / UTM zone 47N',NULL,'EPSG','4400','EPSG','4326','EPSG','16047',NULL,0); INSERT INTO "usage" VALUES('EPSG','7558','projected_crs','EPSG','32647','EPSG','2092','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32648','WGS 84 / UTM zone 48N',NULL,'EPSG','4400','EPSG','4326','EPSG','16048',NULL,0); INSERT INTO "usage" VALUES('EPSG','7559','projected_crs','EPSG','32648','EPSG','2094','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32649','WGS 84 / UTM zone 49N',NULL,'EPSG','4400','EPSG','4326','EPSG','16049',NULL,0); INSERT INTO "usage" VALUES('EPSG','7560','projected_crs','EPSG','32649','EPSG','2096','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32650','WGS 84 / UTM zone 50N',NULL,'EPSG','4400','EPSG','4326','EPSG','16050',NULL,0); INSERT INTO "usage" VALUES('EPSG','7561','projected_crs','EPSG','32650','EPSG','2098','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32651','WGS 84 / UTM zone 51N',NULL,'EPSG','4400','EPSG','4326','EPSG','16051',NULL,0); INSERT INTO "usage" VALUES('EPSG','7562','projected_crs','EPSG','32651','EPSG','2100','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32652','WGS 84 / UTM zone 52N',NULL,'EPSG','4400','EPSG','4326','EPSG','16052',NULL,0); INSERT INTO "usage" VALUES('EPSG','7563','projected_crs','EPSG','32652','EPSG','2102','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32653','WGS 84 / UTM zone 53N',NULL,'EPSG','4400','EPSG','4326','EPSG','16053',NULL,0); INSERT INTO "usage" VALUES('EPSG','7564','projected_crs','EPSG','32653','EPSG','2104','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32654','WGS 84 / UTM zone 54N',NULL,'EPSG','4400','EPSG','4326','EPSG','16054',NULL,0); INSERT INTO "usage" VALUES('EPSG','7565','projected_crs','EPSG','32654','EPSG','2106','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32655','WGS 84 / UTM zone 55N',NULL,'EPSG','4400','EPSG','4326','EPSG','16055',NULL,0); INSERT INTO "usage" VALUES('EPSG','7566','projected_crs','EPSG','32655','EPSG','2108','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32656','WGS 84 / UTM zone 56N',NULL,'EPSG','4400','EPSG','4326','EPSG','16056',NULL,0); INSERT INTO "usage" VALUES('EPSG','7567','projected_crs','EPSG','32656','EPSG','2110','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32657','WGS 84 / UTM zone 57N',NULL,'EPSG','4400','EPSG','4326','EPSG','16057',NULL,0); INSERT INTO "usage" VALUES('EPSG','7568','projected_crs','EPSG','32657','EPSG','2112','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32658','WGS 84 / UTM zone 58N',NULL,'EPSG','4400','EPSG','4326','EPSG','16058',NULL,0); INSERT INTO "usage" VALUES('EPSG','7569','projected_crs','EPSG','32658','EPSG','2114','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32659','WGS 84 / UTM zone 59N',NULL,'EPSG','4400','EPSG','4326','EPSG','16059',NULL,0); INSERT INTO "usage" VALUES('EPSG','7570','projected_crs','EPSG','32659','EPSG','2116','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32660','WGS 84 / UTM zone 60N',NULL,'EPSG','4400','EPSG','4326','EPSG','16060',NULL,0); INSERT INTO "usage" VALUES('EPSG','7571','projected_crs','EPSG','32660','EPSG','2118','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32661','WGS 84 / UPS North (N,E)',NULL,'EPSG','4493','EPSG','4326','EPSG','16061',NULL,0); INSERT INTO "usage" VALUES('EPSG','7572','projected_crs','EPSG','32661','EPSG','1996','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','32662','WGS 84 / Plate Carree',NULL,'EPSG','4499','EPSG','4326','EPSG','19968',NULL,1); INSERT INTO "usage" VALUES('EPSG','7573','projected_crs','EPSG','32662','EPSG','1262','EPSG','1191'); INSERT INTO "projected_crs" VALUES('EPSG','32663','WGS 84 / World Equidistant Cylindrical',NULL,'EPSG','4499','EPSG','4326','EPSG','19846',NULL,1); INSERT INTO "usage" VALUES('EPSG','7574','projected_crs','EPSG','32663','EPSG','1262','EPSG','1191'); INSERT INTO "projected_crs" VALUES('EPSG','32664','WGS 84 / BLM 14N (ftUS)',NULL,'EPSG','4497','EPSG','4326','EPSG','15914',NULL,0); INSERT INTO "usage" VALUES('EPSG','7575','projected_crs','EPSG','32664','EPSG','2171','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32665','WGS 84 / BLM 15N (ftUS)',NULL,'EPSG','4497','EPSG','4326','EPSG','15915',NULL,0); INSERT INTO "usage" VALUES('EPSG','7576','projected_crs','EPSG','32665','EPSG','2172','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32666','WGS 84 / BLM 16N (ftUS)',NULL,'EPSG','4497','EPSG','4326','EPSG','15916',NULL,0); INSERT INTO "usage" VALUES('EPSG','7577','projected_crs','EPSG','32666','EPSG','2173','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32667','WGS 84 / BLM 17N (ftUS)',NULL,'EPSG','4497','EPSG','4326','EPSG','15917',NULL,0); INSERT INTO "usage" VALUES('EPSG','7578','projected_crs','EPSG','32667','EPSG','2174','EPSG','1212'); INSERT INTO "projected_crs" VALUES('EPSG','32700','WGS 84 / UTM grid system (southern hemisphere)',NULL,'EPSG','4400','EPSG','4326','EPSG','16100',NULL,0); INSERT INTO "usage" VALUES('EPSG','7579','projected_crs','EPSG','32700','EPSG','1999','EPSG','1163'); INSERT INTO "projected_crs" VALUES('EPSG','32701','WGS 84 / UTM zone 1S',NULL,'EPSG','4400','EPSG','4326','EPSG','16101',NULL,0); INSERT INTO "usage" VALUES('EPSG','7580','projected_crs','EPSG','32701','EPSG','2001','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32702','WGS 84 / UTM zone 2S',NULL,'EPSG','4400','EPSG','4326','EPSG','16102',NULL,0); INSERT INTO "usage" VALUES('EPSG','7581','projected_crs','EPSG','32702','EPSG','2003','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32703','WGS 84 / UTM zone 3S',NULL,'EPSG','4400','EPSG','4326','EPSG','16103',NULL,0); INSERT INTO "usage" VALUES('EPSG','7582','projected_crs','EPSG','32703','EPSG','2005','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32704','WGS 84 / UTM zone 4S',NULL,'EPSG','4400','EPSG','4326','EPSG','16104',NULL,0); INSERT INTO "usage" VALUES('EPSG','7583','projected_crs','EPSG','32704','EPSG','2007','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32705','WGS 84 / UTM zone 5S',NULL,'EPSG','4400','EPSG','4326','EPSG','16105',NULL,0); INSERT INTO "usage" VALUES('EPSG','7584','projected_crs','EPSG','32705','EPSG','2009','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32706','WGS 84 / UTM zone 6S',NULL,'EPSG','4400','EPSG','4326','EPSG','16106',NULL,0); INSERT INTO "usage" VALUES('EPSG','7585','projected_crs','EPSG','32706','EPSG','2011','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32707','WGS 84 / UTM zone 7S',NULL,'EPSG','4400','EPSG','4326','EPSG','16107',NULL,0); INSERT INTO "usage" VALUES('EPSG','7586','projected_crs','EPSG','32707','EPSG','2013','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32708','WGS 84 / UTM zone 8S',NULL,'EPSG','4400','EPSG','4326','EPSG','16108',NULL,0); INSERT INTO "usage" VALUES('EPSG','7587','projected_crs','EPSG','32708','EPSG','2015','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32709','WGS 84 / UTM zone 9S',NULL,'EPSG','4400','EPSG','4326','EPSG','16109',NULL,0); INSERT INTO "usage" VALUES('EPSG','7588','projected_crs','EPSG','32709','EPSG','2017','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32710','WGS 84 / UTM zone 10S',NULL,'EPSG','4400','EPSG','4326','EPSG','16110',NULL,0); INSERT INTO "usage" VALUES('EPSG','7589','projected_crs','EPSG','32710','EPSG','2019','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32711','WGS 84 / UTM zone 11S',NULL,'EPSG','4400','EPSG','4326','EPSG','16111',NULL,0); INSERT INTO "usage" VALUES('EPSG','7590','projected_crs','EPSG','32711','EPSG','2021','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32712','WGS 84 / UTM zone 12S',NULL,'EPSG','4400','EPSG','4326','EPSG','16112',NULL,0); INSERT INTO "usage" VALUES('EPSG','7591','projected_crs','EPSG','32712','EPSG','2023','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32713','WGS 84 / UTM zone 13S',NULL,'EPSG','4400','EPSG','4326','EPSG','16113',NULL,0); INSERT INTO "usage" VALUES('EPSG','7592','projected_crs','EPSG','32713','EPSG','2025','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32714','WGS 84 / UTM zone 14S',NULL,'EPSG','4400','EPSG','4326','EPSG','16114',NULL,0); INSERT INTO "usage" VALUES('EPSG','7593','projected_crs','EPSG','32714','EPSG','2027','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32715','WGS 84 / UTM zone 15S',NULL,'EPSG','4400','EPSG','4326','EPSG','16115',NULL,0); INSERT INTO "usage" VALUES('EPSG','7594','projected_crs','EPSG','32715','EPSG','2029','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32716','WGS 84 / UTM zone 16S',NULL,'EPSG','4400','EPSG','4326','EPSG','16116',NULL,0); INSERT INTO "usage" VALUES('EPSG','7595','projected_crs','EPSG','32716','EPSG','2031','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32717','WGS 84 / UTM zone 17S',NULL,'EPSG','4400','EPSG','4326','EPSG','16117',NULL,0); INSERT INTO "usage" VALUES('EPSG','7596','projected_crs','EPSG','32717','EPSG','2033','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32718','WGS 84 / UTM zone 18S',NULL,'EPSG','4400','EPSG','4326','EPSG','16118',NULL,0); INSERT INTO "usage" VALUES('EPSG','7597','projected_crs','EPSG','32718','EPSG','2035','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32719','WGS 84 / UTM zone 19S',NULL,'EPSG','4400','EPSG','4326','EPSG','16119',NULL,0); INSERT INTO "usage" VALUES('EPSG','7598','projected_crs','EPSG','32719','EPSG','2037','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32720','WGS 84 / UTM zone 20S',NULL,'EPSG','4400','EPSG','4326','EPSG','16120',NULL,0); INSERT INTO "usage" VALUES('EPSG','7599','projected_crs','EPSG','32720','EPSG','2039','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32721','WGS 84 / UTM zone 21S',NULL,'EPSG','4400','EPSG','4326','EPSG','16121',NULL,0); INSERT INTO "usage" VALUES('EPSG','7600','projected_crs','EPSG','32721','EPSG','2041','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32722','WGS 84 / UTM zone 22S',NULL,'EPSG','4400','EPSG','4326','EPSG','16122',NULL,0); INSERT INTO "usage" VALUES('EPSG','7601','projected_crs','EPSG','32722','EPSG','2043','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32723','WGS 84 / UTM zone 23S',NULL,'EPSG','4400','EPSG','4326','EPSG','16123',NULL,0); INSERT INTO "usage" VALUES('EPSG','7602','projected_crs','EPSG','32723','EPSG','2045','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32724','WGS 84 / UTM zone 24S',NULL,'EPSG','4400','EPSG','4326','EPSG','16124',NULL,0); INSERT INTO "usage" VALUES('EPSG','7603','projected_crs','EPSG','32724','EPSG','2047','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32725','WGS 84 / UTM zone 25S',NULL,'EPSG','4400','EPSG','4326','EPSG','16125',NULL,0); INSERT INTO "usage" VALUES('EPSG','7604','projected_crs','EPSG','32725','EPSG','2049','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32726','WGS 84 / UTM zone 26S',NULL,'EPSG','4400','EPSG','4326','EPSG','16126',NULL,0); INSERT INTO "usage" VALUES('EPSG','7605','projected_crs','EPSG','32726','EPSG','2051','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32727','WGS 84 / UTM zone 27S',NULL,'EPSG','4400','EPSG','4326','EPSG','16127',NULL,0); INSERT INTO "usage" VALUES('EPSG','7606','projected_crs','EPSG','32727','EPSG','2053','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32728','WGS 84 / UTM zone 28S',NULL,'EPSG','4400','EPSG','4326','EPSG','16128',NULL,0); INSERT INTO "usage" VALUES('EPSG','7607','projected_crs','EPSG','32728','EPSG','2055','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32729','WGS 84 / UTM zone 29S',NULL,'EPSG','4400','EPSG','4326','EPSG','16129',NULL,0); INSERT INTO "usage" VALUES('EPSG','7608','projected_crs','EPSG','32729','EPSG','2057','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32730','WGS 84 / UTM zone 30S',NULL,'EPSG','4400','EPSG','4326','EPSG','16130',NULL,0); INSERT INTO "usage" VALUES('EPSG','7609','projected_crs','EPSG','32730','EPSG','2059','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32731','WGS 84 / UTM zone 31S',NULL,'EPSG','4400','EPSG','4326','EPSG','16131',NULL,0); INSERT INTO "usage" VALUES('EPSG','7610','projected_crs','EPSG','32731','EPSG','2061','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32732','WGS 84 / UTM zone 32S',NULL,'EPSG','4400','EPSG','4326','EPSG','16132',NULL,0); INSERT INTO "usage" VALUES('EPSG','7611','projected_crs','EPSG','32732','EPSG','2063','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32733','WGS 84 / UTM zone 33S',NULL,'EPSG','4400','EPSG','4326','EPSG','16133',NULL,0); INSERT INTO "usage" VALUES('EPSG','7612','projected_crs','EPSG','32733','EPSG','2065','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32734','WGS 84 / UTM zone 34S',NULL,'EPSG','4400','EPSG','4326','EPSG','16134',NULL,0); INSERT INTO "usage" VALUES('EPSG','7613','projected_crs','EPSG','32734','EPSG','2067','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32735','WGS 84 / UTM zone 35S',NULL,'EPSG','4400','EPSG','4326','EPSG','16135',NULL,0); INSERT INTO "usage" VALUES('EPSG','7614','projected_crs','EPSG','32735','EPSG','2069','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32736','WGS 84 / UTM zone 36S',NULL,'EPSG','4400','EPSG','4326','EPSG','16136',NULL,0); INSERT INTO "usage" VALUES('EPSG','7615','projected_crs','EPSG','32736','EPSG','2071','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32737','WGS 84 / UTM zone 37S',NULL,'EPSG','4400','EPSG','4326','EPSG','16137',NULL,0); INSERT INTO "usage" VALUES('EPSG','7616','projected_crs','EPSG','32737','EPSG','2073','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32738','WGS 84 / UTM zone 38S',NULL,'EPSG','4400','EPSG','4326','EPSG','16138',NULL,0); INSERT INTO "usage" VALUES('EPSG','7617','projected_crs','EPSG','32738','EPSG','2075','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32739','WGS 84 / UTM zone 39S',NULL,'EPSG','4400','EPSG','4326','EPSG','16139',NULL,0); INSERT INTO "usage" VALUES('EPSG','7618','projected_crs','EPSG','32739','EPSG','2077','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32740','WGS 84 / UTM zone 40S',NULL,'EPSG','4400','EPSG','4326','EPSG','16140',NULL,0); INSERT INTO "usage" VALUES('EPSG','7619','projected_crs','EPSG','32740','EPSG','2079','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32741','WGS 84 / UTM zone 41S',NULL,'EPSG','4400','EPSG','4326','EPSG','16141',NULL,0); INSERT INTO "usage" VALUES('EPSG','7620','projected_crs','EPSG','32741','EPSG','2081','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32742','WGS 84 / UTM zone 42S',NULL,'EPSG','4400','EPSG','4326','EPSG','16142',NULL,0); INSERT INTO "usage" VALUES('EPSG','7621','projected_crs','EPSG','32742','EPSG','2083','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32743','WGS 84 / UTM zone 43S',NULL,'EPSG','4400','EPSG','4326','EPSG','16143',NULL,0); INSERT INTO "usage" VALUES('EPSG','7622','projected_crs','EPSG','32743','EPSG','2085','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32744','WGS 84 / UTM zone 44S',NULL,'EPSG','4400','EPSG','4326','EPSG','16144',NULL,0); INSERT INTO "usage" VALUES('EPSG','7623','projected_crs','EPSG','32744','EPSG','2087','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32745','WGS 84 / UTM zone 45S',NULL,'EPSG','4400','EPSG','4326','EPSG','16145',NULL,0); INSERT INTO "usage" VALUES('EPSG','7624','projected_crs','EPSG','32745','EPSG','2089','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32746','WGS 84 / UTM zone 46S',NULL,'EPSG','4400','EPSG','4326','EPSG','16146',NULL,0); INSERT INTO "usage" VALUES('EPSG','7625','projected_crs','EPSG','32746','EPSG','2091','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32747','WGS 84 / UTM zone 47S',NULL,'EPSG','4400','EPSG','4326','EPSG','16147',NULL,0); INSERT INTO "usage" VALUES('EPSG','7626','projected_crs','EPSG','32747','EPSG','2093','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32748','WGS 84 / UTM zone 48S',NULL,'EPSG','4400','EPSG','4326','EPSG','16148',NULL,0); INSERT INTO "usage" VALUES('EPSG','7627','projected_crs','EPSG','32748','EPSG','2095','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32749','WGS 84 / UTM zone 49S',NULL,'EPSG','4400','EPSG','4326','EPSG','16149',NULL,0); INSERT INTO "usage" VALUES('EPSG','7628','projected_crs','EPSG','32749','EPSG','2097','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32750','WGS 84 / UTM zone 50S',NULL,'EPSG','4400','EPSG','4326','EPSG','16150',NULL,0); INSERT INTO "usage" VALUES('EPSG','7629','projected_crs','EPSG','32750','EPSG','2099','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32751','WGS 84 / UTM zone 51S',NULL,'EPSG','4400','EPSG','4326','EPSG','16151',NULL,0); INSERT INTO "usage" VALUES('EPSG','7630','projected_crs','EPSG','32751','EPSG','2101','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32752','WGS 84 / UTM zone 52S',NULL,'EPSG','4400','EPSG','4326','EPSG','16152',NULL,0); INSERT INTO "usage" VALUES('EPSG','7631','projected_crs','EPSG','32752','EPSG','2103','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32753','WGS 84 / UTM zone 53S',NULL,'EPSG','4400','EPSG','4326','EPSG','16153',NULL,0); INSERT INTO "usage" VALUES('EPSG','7632','projected_crs','EPSG','32753','EPSG','2105','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32754','WGS 84 / UTM zone 54S',NULL,'EPSG','4400','EPSG','4326','EPSG','16154',NULL,0); INSERT INTO "usage" VALUES('EPSG','7633','projected_crs','EPSG','32754','EPSG','2107','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32755','WGS 84 / UTM zone 55S',NULL,'EPSG','4400','EPSG','4326','EPSG','16155',NULL,0); INSERT INTO "usage" VALUES('EPSG','7634','projected_crs','EPSG','32755','EPSG','2109','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32756','WGS 84 / UTM zone 56S',NULL,'EPSG','4400','EPSG','4326','EPSG','16156',NULL,0); INSERT INTO "usage" VALUES('EPSG','7635','projected_crs','EPSG','32756','EPSG','2111','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32757','WGS 84 / UTM zone 57S',NULL,'EPSG','4400','EPSG','4326','EPSG','16157',NULL,0); INSERT INTO "usage" VALUES('EPSG','7636','projected_crs','EPSG','32757','EPSG','2113','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32758','WGS 84 / UTM zone 58S',NULL,'EPSG','4400','EPSG','4326','EPSG','16158',NULL,0); INSERT INTO "usage" VALUES('EPSG','7637','projected_crs','EPSG','32758','EPSG','2115','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32759','WGS 84 / UTM zone 59S',NULL,'EPSG','4400','EPSG','4326','EPSG','16159',NULL,0); INSERT INTO "usage" VALUES('EPSG','7638','projected_crs','EPSG','32759','EPSG','2117','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32760','WGS 84 / UTM zone 60S',NULL,'EPSG','4400','EPSG','4326','EPSG','16160',NULL,0); INSERT INTO "usage" VALUES('EPSG','7639','projected_crs','EPSG','32760','EPSG','2119','EPSG','1279'); INSERT INTO "projected_crs" VALUES('EPSG','32761','WGS 84 / UPS South (N,E)',NULL,'EPSG','4494','EPSG','4326','EPSG','16161',NULL,0); INSERT INTO "usage" VALUES('EPSG','7640','projected_crs','EPSG','32761','EPSG','1997','EPSG','1160'); INSERT INTO "projected_crs" VALUES('EPSG','32766','WGS 84 / TM 36 SE',NULL,'EPSG','4400','EPSG','4326','EPSG','16636',NULL,0); INSERT INTO "usage" VALUES('EPSG','7641','projected_crs','EPSG','32766','EPSG','1726','EPSG','1136'); proj-9.6.0/data/sql/scope.sql000664 001754 001755 00000065001 14764566077 015765 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "scope" VALUES('EPSG','1024','Not known.',0); INSERT INTO "scope" VALUES('EPSG','1025','?',1); INSERT INTO "scope" VALUES('EPSG','1026','Spatial referencing.',0); INSERT INTO "scope" VALUES('EPSG','1027','Geodesy.',0); INSERT INTO "scope" VALUES('EPSG','1028','Cadastre.',0); INSERT INTO "scope" VALUES('EPSG','1029','Engineering survey.',0); INSERT INTO "scope" VALUES('EPSG','1030','Example only (fictitious).',0); INSERT INTO "scope" VALUES('EPSG','1031','Transformation of coordinates at 0.1m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1032','Transformation of coordinates at 0.2m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1033','Transformation of coordinates at 0.3m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1034','Transformation of coordinates at 0.4m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1035','Transformation of coordinates at 0.5m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1036','Transformation of coordinates at 0.6m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1037','Transformation of coordinates at 0.7m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1038','Transformation of coordinates at 0.8m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1039','Transformation of coordinates at 0.9m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1040','Polar research.',0); INSERT INTO "scope" VALUES('EPSG','1041','Transformation of coordinates at 1m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1042','Transformation of coordinates at 2m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1043','Transformation of coordinates at 3m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1044','Transformation of coordinates at 4m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1045','Transformation of coordinates at 5m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1046','Atlas of Canada and nationwide web mapping applications.',0); INSERT INTO "scope" VALUES('EPSG','1047','Remote sensing.',0); INSERT INTO "scope" VALUES('EPSG','1048','Transformation of coordinates at 0.25m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1049','Transformation of coordinates at 9m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1050','Transformation of coordinates at 10m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1051','Horizontal component of official 3D RDNAPTRANS(TM)2018 transformation. Accuracy by definition exact.',0); INSERT INTO "scope" VALUES('EPSG','1052','Basin-wide mapping and analysis.',0); INSERT INTO "scope" VALUES('EPSG','1053','Boundary demarcation.',0); INSERT INTO "scope" VALUES('EPSG','1054','Cadastre, engineering survey.',0); INSERT INTO "scope" VALUES('EPSG','1055','Cadastre, engineering survey, topographic mapping (large scale).',0); INSERT INTO "scope" VALUES('EPSG','1056','Cadastre, engineering survey, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1057','Cadastre, engineering survey, topographic mapping (medium scale).',0); INSERT INTO "scope" VALUES('EPSG','1058','Change of coordinate epoch in 3-dimensions (φλh).',0); INSERT INTO "scope" VALUES('EPSG','1059','Change of height to a different vertical reference surface.',0); INSERT INTO "scope" VALUES('EPSG','1060','Change of depth to a different vertical reference surface.',0); INSERT INTO "scope" VALUES('EPSG','1061','Cadastre, engineering survey, topographic mapping (1:5000 and larger scales).',0); INSERT INTO "scope" VALUES('EPSG','1062','Topographic mapping (1:50,000).',0); INSERT INTO "scope" VALUES('EPSG','1063','Topographic mapping (1:50,000) published between 1955 and 2000.',0); INSERT INTO "scope" VALUES('EPSG','1064','Abu Dhabi Municipality GIS.',0); INSERT INTO "scope" VALUES('EPSG','1065','Academic research, not officially adopted.',0); INSERT INTO "scope" VALUES('EPSG','1066','Recommended by OSi and OSNI for all horizontal CTs in the Republic and Northern Ireland.',0); INSERT INTO "scope" VALUES('EPSG','1067','Post-1996 data based on the classical geodetic network.',0); INSERT INTO "scope" VALUES('EPSG','1068','Pre-1996 data related to the classical geodetic network.',0); INSERT INTO "scope" VALUES('EPSG','1069','Adopted as official definition of OSGB36 from 2002 to August 2016. Accuracy by definition exact. Accuracy compared to triangulation coordinates 0.1m at 67% confidence level.',0); INSERT INTO "scope" VALUES('EPSG','1070','Adopted as official definition of OSGB36 from August 2016. Accuracy by definition exact. Accuracy compared to triangulation coordinates 0.1m at 67% confidence level.',0); INSERT INTO "scope" VALUES('EPSG','1071','Arctic small scale mapping - Alaska-centred.',0); INSERT INTO "scope" VALUES('EPSG','1072','Arctic small scale mapping - Canada-centred.',0); INSERT INTO "scope" VALUES('EPSG','1073','Arctic small scale mapping - Greenland-centred.',0); INSERT INTO "scope" VALUES('EPSG','1074','Arctic small scale mapping - Norway-centred.',0); INSERT INTO "scope" VALUES('EPSG','1075','Arctic small scale mapping - Russia-centred.',0); INSERT INTO "scope" VALUES('EPSG','1076','Transformation of coordinates at 25m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1077','Transformation of coordinates at 30m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1078','Transformation of coordinates at 0.15m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1079','Transformation of coordinates at 0.05m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1080','Angola LNG project.',0); INSERT INTO "scope" VALUES('EPSG','1081','Seismic survey.',0); INSERT INTO "scope" VALUES('EPSG','1082','Approximate transformation of seismic data acquired before 1985 to CRS used post 1985.',0); INSERT INTO "scope" VALUES('EPSG','1083','Approximation (to better than 2cm) using NTv2 method of results of FINELTRA programme concatenated with LV-95 parameters.',0); INSERT INTO "scope" VALUES('EPSG','1084','Parameter values from CH1903+ to ETRS89 (tfm code 1647) and are used as an approximation from CH1903 with a lesser accuracy of 1.5m which equates to the magnitude of distortions in the CH1903 network.',0); INSERT INTO "scope" VALUES('EPSG','1085','Approximation using NTv2 method of results of FINELTRA programme to an accuracy of 0.01m except at boundary of the Geneva and Vaud cantons, in city of Geneva and in the main valleys of Valais canton where differences are up to 20 cm.',0); INSERT INTO "scope" VALUES('EPSG','1086','Approximation of horizontal component of official 3D RDNAPTRANS(TM)2008 transformation.',0); INSERT INTO "scope" VALUES('EPSG','1087','Approximation for pan-European small-scale mapping in extended ETRS89.',0); INSERT INTO "scope" VALUES('EPSG','1088','Approximation for pan-European statistical analysis in extended ETRS89.',0); INSERT INTO "scope" VALUES('EPSG','1089','Basis for topographic mapping in Republic of Ireland between 1965 and 1975; for scientific purposes only in Northern Ireland.',0); INSERT INTO "scope" VALUES('EPSG','1090','Basis for topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1091','Cadastre, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1092','Cadastre, engineering survey, topographic mapping (large and medium scale).',0); INSERT INTO "scope" VALUES('EPSG','1093','Cadastre, engineering survey. Usage restricted to areas below 290m above sea level.',0); INSERT INTO "scope" VALUES('EPSG','1094','Cadastre in Czechia.',0); INSERT INTO "scope" VALUES('EPSG','1095','Cadastre in Slovakia.',0); INSERT INTO "scope" VALUES('EPSG','1096','Cadastre, survey control and engineering survey in urban areas, typically in all municipalities that previously comprised the 73 Municipal Integrated Surveying and Mapping (MISAM) areas, also known as urban cadastral map areas. For rural areas use UTM.',0); INSERT INTO "scope" VALUES('EPSG','1097','Cartography System of Distrito Federal (SICAD).',0); INSERT INTO "scope" VALUES('EPSG','1098','Web mapping and visualisation.',0); INSERT INTO "scope" VALUES('EPSG','1099','Change of height to a different vertical reference surface and unit.',0); INSERT INTO "scope" VALUES('EPSG','1100','Change of prime meridian.',0); INSERT INTO "scope" VALUES('EPSG','1101','Change of height or depth unit.',0); INSERT INTO "scope" VALUES('EPSG','1102','Cadastre, engineering survey, civilian topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1103','Coastal hydrography.',0); INSERT INTO "scope" VALUES('EPSG','1104','Coastal hydrography, offshore oil and gas exploration and production.',0); INSERT INTO "scope" VALUES('EPSG','1105','Coastal hydrography. Not used by oil industry.',0); INSERT INTO "scope" VALUES('EPSG','1106','Construction of the Basic Spatial Unit (BSU) grid.',0); INSERT INTO "scope" VALUES('EPSG','1107','Conformal mapping at scales of 1:500,000 and smaller.',0); INSERT INTO "scope" VALUES('EPSG','1108','Transformation of GDA94 coordinates that have been derived through GNSS CORS.',0); INSERT INTO "scope" VALUES('EPSG','1109','Data analysis and small scale data presentation for contiguous lower 48 states.',0); INSERT INTO "scope" VALUES('EPSG','1110','US Defense Meteorological Satellite Program (DMSP) SSM/I microwave imagery products.',0); INSERT INTO "scope" VALUES('EPSG','1111','Change of axis positive direction to facilitate transformation of heights or depths through concatenated operations.',0); INSERT INTO "scope" VALUES('EPSG','1112','Convert degree representation.',1); INSERT INTO "scope" VALUES('EPSG','1113','Defined as exact.',0); INSERT INTO "scope" VALUES('EPSG','1114','Geodesy. Defined as exact for S-JTSK/05 (Ferro) / Modified Krovak projCRSs (CRS codes 5224-25).',0); INSERT INTO "scope" VALUES('EPSG','1115','Geodesy. Defines the S-JTSK [JTSK03] realization.',0); INSERT INTO "scope" VALUES('EPSG','1116','Geodesy. Defines ED50 in the Faroe Islands.',0); INSERT INTO "scope" VALUES('EPSG','1117','Defines ellipsoidal coordinates of origin of topocentric CS.',0); INSERT INTO "scope" VALUES('EPSG','1118','Defines geocentric coordinates of origin of topocentric CS.',0); INSERT INTO "scope" VALUES('EPSG','1119','Geodesy. Defines ETRF89.',0); INSERT INTO "scope" VALUES('EPSG','1120','Geodesy. Defines ETRF90.',0); INSERT INTO "scope" VALUES('EPSG','1121','Geodesy. Defines ETRF91.',0); INSERT INTO "scope" VALUES('EPSG','1122','Geodesy. Defines ETRF92.',0); INSERT INTO "scope" VALUES('EPSG','1123','Geodesy. Defines ETRF93.',0); INSERT INTO "scope" VALUES('EPSG','1124','Geodesy. Defines ETRF94.',0); INSERT INTO "scope" VALUES('EPSG','1125','Geodesy. Defines ETRF96.',0); INSERT INTO "scope" VALUES('EPSG','1126','Geodesy. Defines ETRF97.',0); INSERT INTO "scope" VALUES('EPSG','1127','Geodesy. Defines ETRF2000.',0); INSERT INTO "scope" VALUES('EPSG','1128','Geodesy. Defines ETRF2005.',0); INSERT INTO "scope" VALUES('EPSG','1129','Geodesy. Defines ETRF2014.',0); INSERT INTO "scope" VALUES('EPSG','1130','EEZ delimitation.',0); INSERT INTO "scope" VALUES('EPSG','1131','Change of coordinate epoch for points referenced to NAD83(CSRS)v7.',0); INSERT INTO "scope" VALUES('EPSG','1132','Derivation of approximate gravity-related heights from GNSS observations.',0); INSERT INTO "scope" VALUES('EPSG','1133','Derivation of gravity-related heights from GNSS observations.',0); INSERT INTO "scope" VALUES('EPSG','1134','Description of the use or purpose of the CRS.',0); INSERT INTO "scope" VALUES('EPSG','1135','State-wide spatial data management.',0); INSERT INTO "scope" VALUES('EPSG','1136','Oil and gas exploration and production.',0); INSERT INTO "scope" VALUES('EPSG','1137','Emulation of polynomial.',0); INSERT INTO "scope" VALUES('EPSG','1138','Engineering survey, harbour hydrography.',0); INSERT INTO "scope" VALUES('EPSG','1139','Engineering survey and construction for Fehmarnbelt tunnel.',0); INSERT INTO "scope" VALUES('EPSG','1140','Engineering survey for onshore facilities for South Pars phase 11 and Pars LNG.',0); INSERT INTO "scope" VALUES('EPSG','1141','Engineering survey and topographic mapping for railway applications.',0); INSERT INTO "scope" VALUES('EPSG','1142','Engineering survey, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1143','Engineering survey, GIS.',0); INSERT INTO "scope" VALUES('EPSG','1144','Engineering survey, GIS, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1145','Engineering survey 2011 to 2015.',0); INSERT INTO "scope" VALUES('EPSG','1146','Engineering survey including Airport and Ruperts Wharf construction.',0); INSERT INTO "scope" VALUES('EPSG','1147','Engineering survey prior to 2016 including Airport and Ruperts Wharfe construction.',0); INSERT INTO "scope" VALUES('EPSG','1148','Exploration and development, mapping.',0); INSERT INTO "scope" VALUES('EPSG','1149','Exploration and production operations in Brunei. Formerly also topographic mapping (large and medium scale) and engineering survey.',0); INSERT INTO "scope" VALUES('EPSG','1150','Transformation of coordinates at 0.01m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1151','Transformation of coordinates at 1m to 2m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1152','Transformation of coordinates at 0.1m to 0.2m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1153','Topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1154','Geocentric to geographic 3D conversions and vice versa.',0); INSERT INTO "scope" VALUES('EPSG','1155','Geographic 3D to geographic 2D conversions.',0); INSERT INTO "scope" VALUES('EPSG','1156','Height to depth or depth to height conversions.',0); INSERT INTO "scope" VALUES('EPSG','1157','Low accuracy applications.',0); INSERT INTO "scope" VALUES('EPSG','1158','Medium accuracy applications.',0); INSERT INTO "scope" VALUES('EPSG','1159','Approximation for medium and low accuracy applications ignoring static/dynamic CRS differences.',0); INSERT INTO "scope" VALUES('EPSG','1160','Military survey.',0); INSERT INTO "scope" VALUES('EPSG','1161','Pan-European spatial positioning.',0); INSERT INTO "scope" VALUES('EPSG','1162','Statistical analysis.',0); INSERT INTO "scope" VALUES('EPSG','1163','Spatial referencing in zoned CRSs where zone boundaries are strictly enforced.',0); INSERT INTO "scope" VALUES('EPSG','1164','Transformation of MRT68 RSO coordinates.',0); INSERT INTO "scope" VALUES('EPSG','1165','Forestry.',0); INSERT INTO "scope" VALUES('EPSG','1166','Geodesy. Defines NAD83(CSRS96).',0); INSERT INTO "scope" VALUES('EPSG','1167','Geodesy. Defines NAD83(CSRS)v2.',0); INSERT INTO "scope" VALUES('EPSG','1168','Geodesy. Defines NAD83(CSRS)v3.',0); INSERT INTO "scope" VALUES('EPSG','1169','Geodesy. Defines NAD83(CSRS)v4.',0); INSERT INTO "scope" VALUES('EPSG','1170','Geodesy. Defines NAD83(CSRS)v5.',0); INSERT INTO "scope" VALUES('EPSG','1171','Geodesy. Defines NAD83(CSRS)v6.',0); INSERT INTO "scope" VALUES('EPSG','1172','Geodesy. Defines NAD83(CSRS)v7.',0); INSERT INTO "scope" VALUES('EPSG','1173','Geodesy. Defines NAD83(CORS96) from 1st January 1997 through 31st December 1999.',0); INSERT INTO "scope" VALUES('EPSG','1174','Geodesy. Defines NAD83(CORS96) from January 2000 through December 2001.',0); INSERT INTO "scope" VALUES('EPSG','1175','Geodesy. Defines NAD83(CORS96) from from 1st January 2002 through 6th September 2011.',0); INSERT INTO "scope" VALUES('EPSG','1176','Geodesy. Navigation and positioning using GPS satellite system.',0); INSERT INTO "scope" VALUES('EPSG','1177','Geodesy. Navigation and positioning using Glonass satellite system.',0); INSERT INTO "scope" VALUES('EPSG','1178','Geodesy, engineering survey, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1179','Geodesy, engineering survey.',0); INSERT INTO "scope" VALUES('EPSG','1180','Geodesy, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1181','Geodesy, cadastre, engineering survey, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1182','Geodesy; air, land and sea navigation and safety of life purposes.',0); INSERT INTO "scope" VALUES('EPSG','1183','Horizontal component of 3D system.',0); INSERT INTO "scope" VALUES('EPSG','1184','Geodesy, cadastre, engineering survey.',0); INSERT INTO "scope" VALUES('EPSG','1185','Geodesy, cadastre.',0); INSERT INTO "scope" VALUES('EPSG','1186','Geodesy, GIS.',0); INSERT INTO "scope" VALUES('EPSG','1187','Geodesy, offshore minerals management.',0); INSERT INTO "scope" VALUES('EPSG','1188','Geodesy, onshore minerals management.',0); INSERT INTO "scope" VALUES('EPSG','1189','GIS.',0); INSERT INTO "scope" VALUES('EPSG','1190','Geological analysis.',0); INSERT INTO "scope" VALUES('EPSG','1191','Graticule coordinates expressed in simple Cartesian form.',0); INSERT INTO "scope" VALUES('EPSG','1192','Graticule coordinates in rectangular Cartesian form.',0); INSERT INTO "scope" VALUES('EPSG','1193','Geological analysis.',1); INSERT INTO "scope" VALUES('EPSG','1194','Spatial referencing in and around city and county of San Francisco.',0); INSERT INTO "scope" VALUES('EPSG','1195','Environmental science - used as basis for EASE grid.',0); INSERT INTO "scope" VALUES('EPSG','1196','Highway engineering.',0); INSERT INTO "scope" VALUES('EPSG','1197','Historic record only - now superseded - see remarks.',0); INSERT INTO "scope" VALUES('EPSG','1198','Hydrography and nautical charting.',0); INSERT INTO "scope" VALUES('EPSG','1199','Hydrography, drilling.',0); INSERT INTO "scope" VALUES('EPSG','1200','Hydrography, drilling, marine geophysics.',0); INSERT INTO "scope" VALUES('EPSG','1201','Hydrography, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1202','Hydrology.',0); INSERT INTO "scope" VALUES('EPSG','1203','Intermediate stage in transformations - not used otherwise.',0); INSERT INTO "scope" VALUES('EPSG','1204','Preliminary estimate.',0); INSERT INTO "scope" VALUES('EPSG','1205','KOC exploration and field development subsurface work.',0); INSERT INTO "scope" VALUES('EPSG','1206','KOC survey control and facilities engineering.',0); INSERT INTO "scope" VALUES('EPSG','1207','Cadastre, topographic mapping (large scale).',0); INSERT INTO "scope" VALUES('EPSG','1208','Engineering survey, topographic mapping (large scale).',0); INSERT INTO "scope" VALUES('EPSG','1209','Topographic mapping (large scale).',0); INSERT INTO "scope" VALUES('EPSG','1210','Topographic mapping (medium and small scale).',0); INSERT INTO "scope" VALUES('EPSG','1211','Topographic mapping (medium scale).',0); INSERT INTO "scope" VALUES('EPSG','1212','No official usage.',0); INSERT INTO "scope" VALUES('EPSG','1213','Not a valid datum.',0); INSERT INTO "scope" VALUES('EPSG','1214','Not recommended.',0); INSERT INTO "scope" VALUES('EPSG','1215','Obsolete.',0); INSERT INTO "scope" VALUES('EPSG','1216','Oil and gas exploration.',0); INSERT INTO "scope" VALUES('EPSG','1217','Oil and gas exploration offshore.',0); INSERT INTO "scope" VALUES('EPSG','1218','NNRMS 1:250,000 national resources database of coarse resolution earth observation imagery and mapping.',0); INSERT INTO "scope" VALUES('EPSG','1219','NNRMS National Spatial Framework (NSF) state resource database of medium resolution earth observation imagery and mapping.',0); INSERT INTO "scope" VALUES('EPSG','1220','Province-wide spatial data management.',0); INSERT INTO "scope" VALUES('EPSG','1221','State-wide spatial data presentation requiring shape preservation.',0); INSERT INTO "scope" VALUES('EPSG','1222','State-wide spatial data presentation requiring true area measurements.',0); INSERT INTO "scope" VALUES('EPSG','1223','Very small scale equal-area mapping - Americas-centred.',0); INSERT INTO "scope" VALUES('EPSG','1224','Very small scale equal-area mapping - Asia-Pacific-centred.',0); INSERT INTO "scope" VALUES('EPSG','1225','Very small scale equal-area mapping - Europe-Africa-centred.',0); INSERT INTO "scope" VALUES('EPSG','1226','Wellbore survey.',0); INSERT INTO "scope" VALUES('EPSG','1227','Pan-European conformal mapping at scales larger than 1:500,000.',0); INSERT INTO "scope" VALUES('EPSG','1228','Very small scale conformal mapping.',0); INSERT INTO "scope" VALUES('EPSG','1229','Engineering design concept visualisation.',0); INSERT INTO "scope" VALUES('EPSG','1230','User-defined CRS in GPS receiver.',0); INSERT INTO "scope" VALUES('EPSG','1231','GeoNB Coordinate Transformation Service.',0); INSERT INTO "scope" VALUES('EPSG','1232','GRANIT coordinate transformation programme between 1987 and 1997.',0); INSERT INTO "scope" VALUES('EPSG','1233','US space and military operations.',0); INSERT INTO "scope" VALUES('EPSG','1234','Transformation of GDA94 coordinates when localised distortion needs to be taken into account, e.g. if GDA94 coordinates were derived from survey control monuments.',0); INSERT INTO "scope" VALUES('EPSG','1235','Approximation at the 0.01m level.',0); INSERT INTO "scope" VALUES('EPSG','1236','Topographic mapping, environmental studies.',0); INSERT INTO "scope" VALUES('EPSG','1237','Cadastre, hydrography, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1238','Territory-wide spatial data management.',0); INSERT INTO "scope" VALUES('EPSG','1239','Temporary transformation pending introduction of bilinear interpolation gridded dataset.',0); INSERT INTO "scope" VALUES('EPSG','1240','Spatial analysis for the purposes of Natural Capital Accounting.',0); INSERT INTO "scope" VALUES('EPSG','1241','Topographic mapping (small scale).',0); INSERT INTO "scope" VALUES('EPSG','1242','Topographic and geological mapping.',0); INSERT INTO "scope" VALUES('EPSG','1243','Hydrography and aeronautical charting.',0); INSERT INTO "scope" VALUES('EPSG','1244','enter as appropriate: seismic data acquisition / processing / interpretation',0); INSERT INTO "scope" VALUES('EPSG','1245','Satellite navigation.',0); INSERT INTO "scope" VALUES('EPSG','1246','Regional studies.',0); INSERT INTO "scope" VALUES('EPSG','1247','Oceanography.',0); INSERT INTO "scope" VALUES('EPSG','1248','Municipal spatial referencing.',0); INSERT INTO "scope" VALUES('EPSG','1249','Minerals management (including oil and gas exploration and production).',0); INSERT INTO "scope" VALUES('EPSG','1250','Metrication of RSO grid.',0); INSERT INTO "scope" VALUES('EPSG','1251','Marine navigation.',0); INSERT INTO "scope" VALUES('EPSG','1252','(null/copy) Approximation for medium and low accuracy applications assuming equality between plate-fixed static and earth-fixed dynamic CRSs, ignoring static/dynamic CRS differences.',0); INSERT INTO "scope" VALUES('EPSG','1253','Approximation at the 1m level.',0); INSERT INTO "scope" VALUES('EPSG','1254','Antarctic Digital Database and small scale topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1255','Transformation of coordinates at 0.02m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1256','Transformation of coordinates at accuracy of about 1 part in 10^5 of distance between points, depending on relative tectonic motion.',0); INSERT INTO "scope" VALUES('EPSG','1257','Transformation of coordinates obtained independently of the classical geodetic network (GPS observations conducted after 1994).',0); INSERT INTO "scope" VALUES('EPSG','1258','Products and services through the BEV Geoportal.',0); INSERT INTO "scope" VALUES('EPSG','1259','Statistical mapping (small scale).',0); INSERT INTO "scope" VALUES('EPSG','1260','Engineering survey for HS2 project phases 1 and 2a.',0); INSERT INTO "scope" VALUES('EPSG','1261','Geodesy (gravity).',0); INSERT INTO "scope" VALUES('EPSG','1262','Geodesy (GNSS), oceanography.',0); INSERT INTO "scope" VALUES('EPSG','1263','Cadastre, engineering surveying applications over distances up to 10km.',0); INSERT INTO "scope" VALUES('EPSG','1264','Geodesy, hydrography, transfer of accurate heights over distances greater than 10km.',0); INSERT INTO "scope" VALUES('EPSG','1265','Hydrography, drilling, offshore engineering.',0); INSERT INTO "scope" VALUES('EPSG','1266','Engineering survey, topographic mapping (large and medium scale).',0); INSERT INTO "scope" VALUES('EPSG','1267','Location-based services, Intelligent Transport Services, navigation, positioning.',0); INSERT INTO "scope" VALUES('EPSG','1268','Geodesy, location based services, intelligent transport services.',0); INSERT INTO "scope" VALUES('EPSG','1269','Intermediate CRS in transformation to and from projected CRS.',0); INSERT INTO "scope" VALUES('EPSG','1270','Reversible geoid model transformation.',0); INSERT INTO "scope" VALUES('EPSG','1271','Engineering survey and mapping for the Trans-Europe Lyon-Turin (TELT) railway project.',0); INSERT INTO "scope" VALUES('EPSG','1272','Reversible hydroid model transformation.',0); INSERT INTO "scope" VALUES('EPSG','1273','Transformation of coordinates at 0.03m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1274','Spatial referencing including water resource management.',0); INSERT INTO "scope" VALUES('EPSG','1275','Alignment of datasets referenced to WGS 84 which have been derived from GDA2020 via the null transformation EPSG::8450 with GDA94 datasets.',0); INSERT INTO "scope" VALUES('EPSG','1276','Alignment of datasets referenced to WGS 84 which have been derived from GDA94 via the null transformation EPSG::1150 with GDA2020 datasets.',0); INSERT INTO "scope" VALUES('EPSG','1277','Derivation of depths from GNSS observations.',0); INSERT INTO "scope" VALUES('EPSG','1278','Transformation of coordinates at 0.006m level of accuracy.',0); INSERT INTO "scope" VALUES('EPSG','1279','Navigation and medium accuracy spatial referencing.',0); INSERT INTO "scope" VALUES('EPSG','1280','Readjustment of coordinates to account for ground deformation caused by 2011 Tohoku earthquake.',0); INSERT INTO "scope" VALUES('EPSG','1281','Geodesy. Defines LUREF from 2006 to 2014.',0); INSERT INTO "scope" VALUES('EPSG','1282','Geodesy. Defines LUREF from 2014 to 2020.',0); INSERT INTO "scope" VALUES('EPSG','1283','Geodesy. Defines LUREF from 2020.',0); INSERT INTO "scope" VALUES('EPSG','1284','Geodesy. Defines NAD83(CSRS)v8.',0); INSERT INTO "scope" VALUES('EPSG','1285','Engineering survey and mapping for the Brenner base tunnel (BBT) railway project.',0); INSERT INTO "scope" VALUES('EPSG','1286','Mapping and data analysis for Texas Water Development Board groundwater modeling.',0); INSERT INTO "scope" VALUES('EPSG','1287','Continental mapping of raster data.',0); INSERT INTO "scope" VALUES('EPSG','1288','Change of coordinate epoch in 2-dimensions (φλ horizontal only).',0); INSERT INTO "scope" VALUES('EPSG','1289','Geodesy. Defines ETRF2020.',0); INSERT INTO "scope" VALUES('EPSG','1290','Pan-European conformal mapping at scales larger than 1:500,000, engineering survey and topographic mapping at all scales.',0); INSERT INTO "scope" VALUES('EPSG','1291','Reference surface for depths in BSHC offshore products for the Baltic Sea (including nautical maps, bathymetry data, water level corrections, etc.).',0); INSERT INTO "scope" VALUES('EPSG','1292','Crop inventory mapping.',0); proj-9.6.0/data/sql/supersession.sql000664 001754 001755 00000120666 14764566077 017427 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1112','helmert_transformation','EPSG','1672','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1154','helmert_transformation','EPSG','1304','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1232','helmert_transformation','EPSG','1305','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1236','helmert_transformation','EPSG','1280','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1236','helmert_transformation','EPSG','1669','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1297','helmert_transformation','EPSG','1298','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1297','helmert_transformation','EPSG','1299','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1297','helmert_transformation','EPSG','1300','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1297','helmert_transformation','EPSG','1301','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1320','helmert_transformation','EPSG','1326','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1321','helmert_transformation','EPSG','1324','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1322','helmert_transformation','EPSG','1324','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1324','helmert_transformation','EPSG','1327','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1325','helmert_transformation','EPSG','1327','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1330','helmert_transformation','EPSG','1557','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1437','helmert_transformation','EPSG','1895','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','1451','grid_transformation','EPSG','1575','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1459','helmert_transformation','EPSG','1594','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','1464','grid_transformation','EPSG','1596','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','1506','grid_transformation','EPSG','1803','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','1507','grid_transformation','EPSG','1803','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','1559','grid_transformation','EPSG','1593','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','1593','grid_transformation','EPSG','1804','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','1596','grid_transformation','EPSG','1803','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1655','helmert_transformation','EPSG','1997','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1657','helmert_transformation','EPSG','1992','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1674','helmert_transformation','EPSG','1775','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1680','helmert_transformation','EPSG','1896','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1683','helmert_transformation','EPSG','1684','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1683','helmert_transformation','EPSG','1685','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1683','helmert_transformation','EPSG','1686','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1683','helmert_transformation','EPSG','1687','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1807','helmert_transformation','EPSG','1808','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1900','helmert_transformation','EPSG','1901','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8047','concatenated_operation','EPSG','8569','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8047','helmert_transformation','EPSG','1612','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8569','helmert_transformation','EPSG','1612','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1639','helmert_transformation','EPSG','10099','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1751','helmert_transformation','EPSG','15739','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1066','helmert_transformation','EPSG','15740','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15781','grid_transformation','EPSG','10084','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15791','helmert_transformation','EPSG','1330','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15817','helmert_transformation','EPSG','15818','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15852','grid_transformation','EPSG','15851','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15853','grid_transformation','EPSG','15851','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15854','grid_transformation','EPSG','15851','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15856','grid_transformation','EPSG','15851','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1309','helmert_transformation','EPSG','1776','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1673','helmert_transformation','EPSG','1777','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1753','helmert_transformation','EPSG','1766','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15895','grid_transformation','EPSG','15932','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15907','grid_transformation','EPSG','15933','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8581','helmert_transformation','EPSG','1439','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8657','helmert_transformation','EPSG','15846','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1672','helmert_transformation','EPSG','15934','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1829','helmert_transformation','EPSG','1449','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1830','helmert_transformation','EPSG','1448','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1831','helmert_transformation','EPSG','1242','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15993','helmert_transformation','EPSG','15994','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1656','helmert_transformation','EPSG','1988','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1658','helmert_transformation','EPSG','1987','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1928','helmert_transformation','EPSG','15901','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15783','helmert_transformation','EPSG','15901','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1917','helmert_transformation','EPSG','15902','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1927','helmert_transformation','EPSG','15902','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1962','helmert_transformation','EPSG','15903','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1963','helmert_transformation','EPSG','15903','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','3972','helmert_transformation','EPSG','4834','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','10092','helmert_transformation','EPSG','5051','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1992','helmert_transformation','EPSG','5037','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1281','helmert_transformation','EPSG','5043','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1267','helmert_transformation','EPSG','5044','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1997','helmert_transformation','EPSG','5038','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1550','helmert_transformation','EPSG','5061','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1551','helmert_transformation','EPSG','5061','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1552','helmert_transformation','EPSG','5061','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15710','helmert_transformation','EPSG','5053','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15711','helmert_transformation','EPSG','5051','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15712','helmert_transformation','EPSG','5055','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','10091','helmert_transformation','EPSG','5055','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','10089','helmert_transformation','EPSG','5051','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','10090','helmert_transformation','EPSG','5053','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15872','helmert_transformation','EPSG','5078','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1642','helmert_transformation','EPSG','5485','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1643','helmert_transformation','EPSG','5486','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15754','helmert_transformation','EPSG','5055','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15754','helmert_transformation','EPSG','5053','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15754','helmert_transformation','EPSG','5051','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','10093','helmert_transformation','EPSG','5055','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','10093','helmert_transformation','EPSG','5053','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','10093','helmert_transformation','EPSG','5051','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1079','helmert_transformation','EPSG','5484','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1078','helmert_transformation','EPSG','5483','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10082','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1108','helmert_transformation','EPSG','6905','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10081','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10078','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10039','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10040','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10041','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10042','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10043','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','6392','helmert_transformation','EPSG','6279','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1121','helmert_transformation','EPSG','6906','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10083','grid_transformation','EPSG','5657','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','6315','helmert_transformation','EPSG','6278','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','6313','helmert_transformation','EPSG','6280','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1256','helmert_transformation','EPSG','6908','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1951','helmert_transformation','EPSG','6909','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','5662','helmert_transformation','EPSG','6939','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15938','helmert_transformation','EPSG','6998','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10000','grid_transformation','EPSG','8371','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15800','helmert_transformation','EPSG','6907','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15897','helmert_transformation','EPSG','6895','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1868','helmert_transformation','EPSG','6976','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1868','helmert_transformation','EPSG','6975','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1868','helmert_transformation','EPSG','6974','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1203','helmert_transformation','EPSG','6971','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1204','helmert_transformation','EPSG','6973','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10063','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10037','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10064','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10066','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10067','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10068','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10069','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5334','grid_transformation','EPSG','7958','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5335','grid_transformation','EPSG','7959','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10001','grid_transformation','EPSG','8371','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10058','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10059','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10060','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10061','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10062','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1646','grid_transformation','EPSG','7674','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10034','grid_transformation','EPSG','7713','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10070','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10031','grid_transformation','EPSG','7713','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10030','grid_transformation','EPSG','7713','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10026','grid_transformation','EPSG','7713','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10071','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10025','grid_transformation','EPSG','7713','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10024','grid_transformation','EPSG','7713','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10072','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10033','grid_transformation','EPSG','7715','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10032','grid_transformation','EPSG','7716','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10021','grid_transformation','EPSG','7711','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10029','grid_transformation','EPSG','7712','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1766','grid_transformation','EPSG','7788','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10027','grid_transformation','EPSG','7714','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10023','grid_transformation','EPSG','7717','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10002','grid_transformation','EPSG','8372','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10073','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10038','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10074','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10035','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10044','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10045','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10046','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10047','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10048','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10049','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10050','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10051','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10052','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10053','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10036','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10054','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10055','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10056','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10057','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10075','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10076','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5338','grid_transformation','EPSG','7709','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5339','grid_transformation','EPSG','7710','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10077','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10079','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10080','grid_transformation','EPSG','5656','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10003','grid_transformation','EPSG','8372','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1923','helmert_transformation','EPSG','8270','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4829','concatenated_operation','EPSG','8443','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4827','concatenated_operation','EPSG','8443','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4827','concatenated_operation','EPSG','8442','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4829','concatenated_operation','EPSG','8442','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5504','grid_transformation','EPSG','9135','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5502','grid_transformation','EPSG','9136','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8371','grid_transformation','EPSG','8885','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','3917','helmert_transformation','EPSG','8688','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','3915','helmert_transformation','EPSG','8688','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','3916','helmert_transformation','EPSG','8689','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','3914','helmert_transformation','EPSG','8689','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5506','grid_transformation','EPSG','9134','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5503','grid_transformation','EPSG','9133','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9084','grid_transformation','EPSG','9085','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5505','grid_transformation','EPSG','9188','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5508','grid_transformation','EPSG','9187','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9085','grid_transformation','EPSG','9086','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9086','grid_transformation','EPSG','9087','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9088','grid_transformation','EPSG','9089','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9094','concatenated_operation','EPSG','9095','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9096','concatenated_operation','EPSG','9097','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9098','concatenated_operation','EPSG','9099','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9100','concatenated_operation','EPSG','9101','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9087','grid_transformation','EPSG','9088','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9095','concatenated_operation','EPSG','9096','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9089','grid_transformation','EPSG','9090','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9097','concatenated_operation','EPSG','9098','EPSG',1); INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9101','concatenated_operation','EPSG','9102','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9137','grid_transformation','EPSG','9228','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','6326','grid_transformation','EPSG','9229','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7646','grid_transformation','EPSG','9230','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7647','grid_transformation','EPSG','9231','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15739','helmert_transformation','EPSG','4830','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15740','helmert_transformation','EPSG','4831','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4831','helmert_transformation','EPSG','9281','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4830','helmert_transformation','EPSG','9281','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7000','grid_transformation','EPSG','9282','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5657','grid_transformation','EPSG','8451','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7860','grid_transformation','EPSG','9312','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','4459','grid_transformation','EPSG','9325','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7840','grid_transformation','EPSG','9326','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7861','grid_transformation','EPSG','9313','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7872','grid_transformation','EPSG','9324','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7871','grid_transformation','EPSG','9323','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7870','grid_transformation','EPSG','9322','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7869','grid_transformation','EPSG','9321','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7868','grid_transformation','EPSG','9320','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7867','grid_transformation','EPSG','9319','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7866','grid_transformation','EPSG','9318','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7865','grid_transformation','EPSG','9317','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7864','grid_transformation','EPSG','9316','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7863','grid_transformation','EPSG','9315','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7862','grid_transformation','EPSG','9314','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5656','grid_transformation','EPSG','8451','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9170','grid_transformation','EPSG','7650','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9124','grid_transformation','EPSG','9125','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9246','grid_transformation','EPSG','9247','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10084','grid_transformation','EPSG','3859','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9171','grid_transformation','EPSG','7648','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8268','grid_transformation','EPSG','8269','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9160','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9161','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9162','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9163','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9164','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9165','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9166','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9167','grid_transformation','EPSG','9168','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9173','grid_transformation','EPSG','6326','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9174','grid_transformation','EPSG','6327','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9172','grid_transformation','EPSG','7649','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9175','grid_transformation','EPSG','7646','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9176','grid_transformation','EPSG','7647','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10084','grid_transformation','EPSG','3858','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9168','grid_transformation','EPSG','9173','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9169','grid_transformation','EPSG','9174','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15932','grid_transformation','EPSG','9409','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15932','grid_transformation','EPSG','9408','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','7675','helmert_transformation','EPSG','9495','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','7676','helmert_transformation','EPSG','9486','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15779','helmert_transformation','EPSG','9679','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1458','helmert_transformation','EPSG','5827','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8885','grid_transformation','EPSG','9786','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9786','grid_transformation','EPSG','9876','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9787','grid_transformation','EPSG','9877','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9638','grid_transformation','EPSG','9787','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','5483','helmert_transformation','EPSG','9898','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','5485','helmert_transformation','EPSG','9899','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9898','helmert_transformation','EPSG','9937','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9899','helmert_transformation','EPSG','9938','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9954','grid_transformation','EPSG','9956','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9955','grid_transformation','EPSG','9957','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9956','grid_transformation','EPSG','9958','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9957','grid_transformation','EPSG','9959','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5891','grid_transformation','EPSG','9910','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9884','grid_transformation','EPSG','10130','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9885','grid_transformation','EPSG','10133','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9020','helmert_transformation','EPSG','10139','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9021','helmert_transformation','EPSG','10140','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9022','helmert_transformation','EPSG','10141','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9023','helmert_transformation','EPSG','10142','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9025','helmert_transformation','EPSG','10143','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9305','grid_transformation','EPSG','10144','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9629','grid_transformation','EPSG','10145','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1622','helmert_transformation','EPSG','5226','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15882','grid_transformation','EPSG','9329','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15888','grid_transformation','EPSG','9330','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15887','grid_transformation','EPSG','9329','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15890','helmert_transformation','EPSG','15883','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15891','helmert_transformation','EPSG','15884','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','5660','helmert_transformation','EPSG','10296','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9719','grid_transformation','EPSG','10347','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9720','grid_transformation','EPSG','10348','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10366','grid_transformation','EPSG','10368','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10367','grid_transformation','EPSG','10369','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8372','grid_transformation','EPSG','10506','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9639','grid_transformation','EPSG','10508','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10491','grid_transformation','EPSG','10493','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10489','grid_transformation','EPSG','10491','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10492','grid_transformation','EPSG','10494','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10490','grid_transformation','EPSG','10492','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10130','grid_transformation','EPSG','10504','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10133','grid_transformation','EPSG','10505','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10504','grid_transformation','EPSG','10509','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10505','grid_transformation','EPSG','10510','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9925','grid_transformation','EPSG','10294','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9926','grid_transformation','EPSG','10295','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10558','grid_transformation','EPSG','10562','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10559','grid_transformation','EPSG','10563','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10557','grid_transformation','EPSG','10561','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10560','grid_transformation','EPSG','10564','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1622','helmert_transformation','EPSG','5226','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1838','helmert_transformation','EPSG','10589','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7000','grid_transformation','EPSG','9282','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10557','grid_transformation','EPSG','10561','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10559','grid_transformation','EPSG','10563','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10558','grid_transformation','EPSG','10562','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','8257','helmert_transformation','EPSG','8258','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','8256','helmert_transformation','EPSG','8257','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','6865','helmert_transformation','EPSG','6866','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','6864','helmert_transformation','EPSG','6865','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10695','grid_transformation','EPSG','10697','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10696','grid_transformation','EPSG','10698','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10521','grid_transformation','EPSG','10522','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10523','grid_transformation','EPSG','10524','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10527','grid_transformation','EPSG','10528','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10529','grid_transformation','EPSG','10530','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10522','grid_transformation','EPSG','10708','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10525','grid_transformation','EPSG','10710','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10526','grid_transformation','EPSG','10711','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10535','grid_transformation','EPSG','10715','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10538','grid_transformation','EPSG','10717','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10539','grid_transformation','EPSG','10718','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10536','grid_transformation','EPSG','10537','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10524','grid_transformation','EPSG','10709','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10528','grid_transformation','EPSG','10712','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10534','grid_transformation','EPSG','10714','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9355','grid_transformation','EPSG','10775','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9620','grid_transformation','EPSG','10776','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1638','helmert_transformation','EPSG','10098','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10530','grid_transformation','EPSG','10713','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10537','grid_transformation','EPSG','10716','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9483','grid_transformation','EPSG','10707','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8676','grid_transformation','EPSG','9483','EPSG',0); proj-9.6.0/data/sql/transformations_czechia_extra.sql000664 001754 001755 00000027640 14764566077 023005 0ustar00e012349e012349000000 000000 -- This file is hand generated. -- WARNING: for now this file is not integrated in the default build, due to -- licensing of grids cz_cuzk_table_yx_3_v1710_east_north.tif and cz_cuzk_CR-2005.tif -- being not clarified. -- Czechia transformations -- 2d transformations between S-JTSK / Krovak and S-JTSK/05 / Modified Krovak using a grid with easting,northing offsets INSERT INTO other_transformation VALUES( 'PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N','S-JTSK / Krovak East North (EPSG:5514) to S-JTSK/05 / Modified Krovak East North (EPSG:5516)', 'Transformation based on grid table_yx_3_v1710.dat', 'PROJ','PROJString', '+proj=gridshift +grids=cz_cuzk_table_yx_3_v1710_east_north.tif', 'EPSG','5514','EPSG','5516',0.035, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N_USAGE','other_transformation','PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N','EPSG','1079','EPSG','1189'); INSERT INTO other_transformation VALUES( 'PROJ','S_JTSK_E_N_TO_S_JTSK05','S-JTSK / Krovak East North (EPSG:5514) to S-JTSK/05 / Modified Krovak (EPSG:5515)', 'Transformation based on grid table_yx_3_v1710.dat', 'PROJ','PROJString', '+proj=pipeline ' || '+step +proj=gridshift +grids=cz_cuzk_table_yx_3_v1710_east_north.tif ' || '+step +proj=axisswap +order=-2,-1', 'EPSG','5514','EPSG','5515',0.035, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','S_JTSK_E_N_TO_S_JTSK05_USAGE','other_transformation','PROJ','S_JTSK_E_N_TO_S_JTSK05','EPSG','1079','EPSG','1189'); INSERT INTO other_transformation VALUES( 'PROJ','S_JTSK_TO_S_JTSK05_E_N','S-JTSK / Krovak (EPSG:5513) to S-JTSK/05 / Modified Krovak East North (EPSG:5516)', 'Transformation based on grid table_yx_3_v1710.dat', 'PROJ','PROJString', '+proj=pipeline ' || '+step +proj=axisswap +order=-2,-1 ' || '+step +proj=gridshift +grids=cz_cuzk_table_yx_3_v1710_east_north.tif', 'EPSG','5513','EPSG','5516',0.035, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','S_JTSK_TO_S_JTSK05_E_N_USAGE','other_transformation','PROJ','S_JTSK_TO_S_JTSK05_E_N','EPSG','1079','EPSG','1189'); INSERT INTO other_transformation VALUES( 'PROJ','S_JTSK_TO_S_JTSK05','S-JTSK / Krovak (EPSG:5513) to S-JTSK/05 / Modified Krovak (EPSG:5515)', 'Transformation based on grid table_yx_3_v1710.dat', 'PROJ','PROJString', '+proj=pipeline ' || '+step +proj=axisswap +order=-2,-1 ' || '+step +proj=gridshift +grids=cz_cuzk_table_yx_3_v1710_east_north.tif ' || '+step +proj=axisswap +order=-2,-1', 'EPSG','5513','EPSG','5515',0.035, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','S_JTSK_TO_S_JTSK05_USAGE','other_transformation','PROJ','S_JTSK_TO_S_JTSK05','EPSG','1079','EPSG','1189'); --- Geographic transformation: S/JTSK <--> S/JTSK/05 UPDATE other_transformation SET accuracy = 0.1 WHERE name = 'S-JTSK to S-JTSK/05 (1)'; INSERT INTO "concatenated_operation" VALUES( 'PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG','S-JTSK (EPSG:4156) to S-JTSK/05 (EPSG:5228)', 'Transformation based on grid table_yx_3_v1710.dat','EPSG','4156','EPSG','5228',NULL,NULL,0); INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',1,'EPSG','5510','reverse'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',2,'PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N','forward'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',3,'EPSG','5512','forward'); INSERT INTO "usage" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG_USAGE','concatenated_operation','PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG','EPSG','1079','EPSG','1189'); -- CUZK recommends to do ETRS89 to S-JTSK / Krovak by doing: -- 1) ETRS89 to S-JTSK/05 using a Helmert transformation (EPSG:5226) -- 2) S-JTSK/05 to S-JTSK/05 / Modified Krovak, using modified Krovak projection (EPSG:5512) -- 3) S-JTSK/05 / Modified Krovak to S-JTSK / Krovak using (reverse) grid table_yx_3_v1710.dat -- Cf https://www.cuzk.cz/Zememerictvi/Geodeticke-zaklady-na-uzemi-CR/GNSS/Nova-realizace-systemu-ETRS89-v-CR/Metodika-prevodu-ETRF2000-vs-S-JTSK-var2(101208).aspx (Metodika převodu mezi ETRF2000 a S-JTSK varianta 2) INSERT INTO "concatenated_operation" VALUES( 'PROJ','ETRS89_TO_S_JTSK_E_N','ETRS89 to S-JTSK / Krovak East North (EPSG:5514)', 'Transformation based on grid table_yx_3_v1710.dat','EPSG','4258','EPSG','5514',NULL,NULL,0); INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',1,'EPSG','5226','reverse'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',2,'EPSG','5512','forward'); INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',3,'PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N','reverse'); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N_USAGE','concatenated_operation','PROJ','ETRS89_TO_S_JTSK_E_N','EPSG','1079','EPSG','1189'); -- 3d transformations between ETRS 89 and compound CRS S-JTSK / Krovak (or S-JTSK/05 / Modified Krovak) + Baltic 1957 height INSERT INTO "compound_crs" VALUES('PROJ','S_JTSK05_E_N_BALTIC_HEIGHT','S-JTSK/05 / Modified Krovak East North + Baltic 1957 height',NULL,'EPSG','5516','EPSG','8357',0); INSERT INTO "usage" VALUES('PROJ','S_JTSK05_E_N_BALTIC_HEIGHT_USAGE','compound_crs','PROJ','S_JTSK05_E_N_BALTIC_HEIGHT','EPSG','1079','EPSG','1189'); -- Simulate a variable CREATE TEMPORARY TABLE temp_var(k,v); INSERT INTO temp_var VALUES( 'ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT', '+proj=pipeline ' || '+step +proj=axisswap +order=2,1 ' || '+step +proj=unitconvert +xy_in=deg +xy_out=rad ' || '+step +proj=push +v_3 +omit_inv ' || '+step +inv +proj=vgridshift +grids=cz_cuzk_CR-2005.tif +multiplier=1 ' || '+step +proj=push +v_3 +omit_fwd ' || -- on reverse path, restore initial Baltic height '+step +proj=push +v_4 ' || '+step +proj=set +v_4=0 +omit_inv ' || '+step +proj=axisswap +order=1,2,4,3 +omit_inv ' || -- on forward path, save Baltic height in v_4 component... '+step +proj=pop +v_3 +omit_inv ' || -- on forward path, restore initial ellipsoidal height '+step +proj=cart +ellps=GRS80 ' || '+step +inv +proj=helmert +x=572.213 +y=85.334 +z=461.94 +rx=-4.9732 +ry=-1.529 +rz=-5.2484 +s=3.5378 +convention=coordinate_frame ' || '+step +inv +proj=cart +ellps=bessel ' || '+step +proj=mod_krovak +lat_0=49.5 +lon_0=24.8333333333333 +alpha=30.2881397222222 +k=0.9999 +x_0=5000000 +y_0=5000000 +ellps=bessel ' || '+step +proj=axisswap +order=1,2,4,3 +omit_inv ' || -- on forward path, restore Baltic height from v_4 component... '+step +proj=set +v_4=0 +omit_inv ' || '+step +proj=pop +v_4 ' || '+step +proj=pop +v_3 +omit_fwd ' -- on reverse path, save initial Baltic height ); INSERT INTO other_transformation VALUES( 'PROJ','ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT','ETRS89 to S-JTSK/05 / Modified Krovak East North + Baltic 1957 height', 'Transformation based on grid CR-2005.gtx', 'PROJ','PROJString', (SELECT v FROM temp_var WHERE k = 'ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT'), 'EPSG','4937','PROJ','S_JTSK05_E_N_BALTIC_HEIGHT', 0.05, -- guessed... NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT_USAGE','other_transformation','PROJ','ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT','EPSG','1079','EPSG','1189'); INSERT INTO "compound_crs" VALUES('PROJ','S_JTSK05_BALTIC_HEIGHT','S-JTSK/05 / Modified Krovak + Baltic 1957 height',NULL,'EPSG','5515','EPSG','8357',0); INSERT INTO "usage" VALUES('PROJ','S_JTSK05_BALTIC_HEIGHT_USAGE','compound_crs','PROJ','S_JTSK05_BALTIC_HEIGHT','EPSG','1079','EPSG','1095'); INSERT INTO other_transformation VALUES( 'PROJ','ETRS89_3D_TO_S_JTSK05_BALTIC_HEIGHT','ETRS89 to S-JTSK/05 / Modified Krovak + Baltic 1957 height', 'Transformation based on grid CR-2005.gtx', 'PROJ','PROJString', (SELECT v FROM temp_var WHERE k = 'ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT') || '+step +proj=axisswap +order=-2,-1', -- East North --> Southing Westing 'EPSG','4937','PROJ','S_JTSK05_BALTIC_HEIGHT', 0.05, -- guessed... NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','ETRS89_3D_TO_S_JTSK05_BALTIC_HEIGHT_USAGE','other_transformation','PROJ','ETRS89_3D_TO_S_JTSK05_BALTIC_HEIGHT','EPSG','1079','EPSG','1095'); INSERT INTO "compound_crs" VALUES('PROJ','S_JTSK_E_N_BALTIC_HEIGHT','S-JTSK / Krovak East North + Baltic 1957 height',NULL,'EPSG','5514','EPSG','8357',0); INSERT INTO "usage" VALUES('PROJ','S_JTSK_E_N_BALTIC_HEIGHT_USAGE','compound_crs','PROJ','S_JTSK_E_N_BALTIC_HEIGHT','EPSG','1079','EPSG','1189'); INSERT INTO other_transformation VALUES( 'PROJ','ETRS89_3D_TO_S_JTSK_E_N_BALTIC_HEIGHT','ETRS89 to S-JTSK / Krovak East North + Baltic 1957 height', 'Transformation based on grids CR-2005.gtx and table_yx_3_v1710.dat ', 'PROJ','PROJString', (SELECT v FROM temp_var WHERE k = 'ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT') || '+step +inv +proj=gridshift +grids=cz_cuzk_table_yx_3_v1710_east_north.tif ', 'EPSG','4937','PROJ','S_JTSK_E_N_BALTIC_HEIGHT', 0.05, -- guessed... NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','ETRS89_3D_TO_S_JTSK_E_N_BALTIC_HEIGHT_USAGE','other_transformation','PROJ','ETRS89_3D_TO_S_JTSK_E_N_BALTIC_HEIGHT','EPSG','1079','EPSG','1189'); INSERT INTO "compound_crs" VALUES('PROJ','S_JTSK_BALTIC_HEIGHT','S-JTSK / Krovak + Baltic 1957 height',NULL,'EPSG','5513','EPSG','8357',0); INSERT INTO "usage" VALUES('PROJ','S_JTSK_BALTIC_HEIGHT_USAGE','compound_crs','PROJ','S_JTSK_BALTIC_HEIGHT','EPSG','1079','EPSG','1095'); INSERT INTO other_transformation VALUES( 'PROJ','ETRS89_3D_TO_S_JTSK_BALTIC_HEIGHT','ETRS89 to S-JTSK / Krovak + Baltic 1957 height', 'Transformation based on grids CR-2005.gtx and table_yx_3_v1710.dat ', 'PROJ','PROJString', (SELECT v FROM temp_var WHERE k = 'ETRS89_3D_TO_S_JTSK05_E_N_BALTIC_HEIGHT') || '+step +inv +proj=gridshift +grids=cz_cuzk_table_yx_3_v1710_east_north.tif ' || '+step +proj=axisswap +order=-2,-1', -- East North --> Southing Westing 'EPSG','4937','PROJ','S_JTSK_BALTIC_HEIGHT', 0.05, -- guessed... NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('PROJ','ETRS89_3D_TO_S_JTSK_BALTIC_HEIGHT_USAGE','other_transformation','PROJ','ETRS89_3D_TO_S_JTSK_BALTIC_HEIGHT','EPSG','1079','EPSG','1095'); DROP TABLE temp_var; proj-9.6.0/data/sql/unit_of_measure.sql000664 001754 001755 00000023445 14764566077 020046 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "unit_of_measure" VALUES('EPSG','1024','(bin)','scale',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1025','millimetre','length',0.001,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1026','metre per second','length',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1027','millimetres per year','length',3.16887651727314875889e-11,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1028','parts per billion','scale',1.0e-09,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1029','year','time',31556925.445,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1030','parts per billion per year','scale',3.16887651727314834646e-17,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1031','milliarc-second','angle',4.84813681109535528357e-09,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1032','milliarc-seconds per year','angle',1.53631468932075975278e-16,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1033','centimetre','length',0.01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1034','centimetres per year','length',3.1688765172731483714e-10,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1035','radian per second','angle',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1036','unity per second','scale',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1040','second','time',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1041','parts per million per year','scale',3.1688765172731486173e-14,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1042','metres per year','length',3.16887651727314861947e-08,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','1043','arc-seconds per year','angle',1.53631468932075975646e-13,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9001','metre','length',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9002','foot','length',0.3048,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9003','US survey foot','length',3.04800609601219241184e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9005','Clarke''s foot','length',0.3047972654,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9014','fathom','length',1.8288,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9030','nautical mile','length',1852.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9031','German legal metre','length',1.0000135965,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9033','US survey chain','length',2.01168402336804703618e+01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9034','US survey link','length',2.0116840233680469141e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9035','US survey mile','length',1.60934721869443751532e+03,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9036','kilometre','length',1000.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9037','Clarke''s yard','length',0.9143917962,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9038','Clarke''s chain','length',20.1166195164,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9039','Clarke''s link','length',0.201166195164,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9040','British yard (Sears 1922)','length',9.14398414616028665236e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9041','British foot (Sears 1922)','length',3.04799471538676203241e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9042','British chain (Sears 1922)','length',2.01167651215526319683e+01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9043','British link (Sears 1922)','length',2.01167651215526294139e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9050','British yard (Benoit 1895 A)','length',0.9143992,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9051','British foot (Benoit 1895 A)','length',3.04799733333333322526e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9052','British chain (Benoit 1895 A)','length',20.1167824,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9053','British link (Benoit 1895 A)','length',0.201167824,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9060','British yard (Benoit 1895 B)','length',9.14399204289812361778e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9061','British foot (Benoit 1895 B)','length',3.04799734763270768755e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9062','British chain (Benoit 1895 B)','length',2.01167824943758724023e+01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9063','British link (Benoit 1895 B)','length',2.01167824943758705158e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9070','British foot (1865)','length',3.04800833333333354158e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9080','Indian foot','length',3.04799510248146943158e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9081','Indian foot (1937)','length',0.30479841,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9082','Indian foot (1962)','length',0.3047996,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9083','Indian foot (1975)','length',0.3047995,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9084','Indian yard','length',9.14398530744440773965e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9085','Indian yard (1937)','length',0.91439523,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9086','Indian yard (1962)','length',0.9143988,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9087','Indian yard (1975)','length',0.9143985,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9093','Statute mile','length',1609.344,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9094','Gold Coast foot','length',3.04799710181508809458e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9095','British foot (1936)','length',0.3048007491,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9096','yard','length',0.9144,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9097','chain','length',20.1168,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9098','link','length',0.201168,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9099','British yard (Sears 1922 truncated)','length',0.914398,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9101','radian','angle',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9102','degree','angle',1.74532925199432781271e-02,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9103','arc-minute','angle',2.90888208665721309346e-04,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9104','arc-second','angle',4.84813681109535476055e-06,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9105','grad','angle',1.57079632679489496205e-02,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9106','gon','angle',1.57079632679489496205e-02,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9107','degree minute second','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9108','degree minute second hemisphere','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9109','microradian','angle',1.0e-06,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9110','sexagesimal DMS','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9111','sexagesimal DM','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9112','centesimal minute','angle',1.57079632679489491868e-04,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9113','centesimal second','angle',1.57079632679489496951e-06,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9114','mil_6400','angle',9.81747704246809351283e-04,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9115','degree minute','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9116','degree hemisphere','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9117','hemisphere degree','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9118','degree minute hemisphere','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9119','hemisphere degree minute','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9120','hemisphere degree minute second','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9121','sexagesimal DMS.s','angle',NULL,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9122','degree (supplier to define representation)','angle',1.74532925199432781271e-02,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9201','unity','scale',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9202','parts per million','scale',1.0e-06,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9203','coefficient','scale',1.0,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9204','Bin width 330 US survey feet','length',1.00584201168402344707e+02,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9205','Bin width 165 US survey feet','length',5.02921005842011723538e+01,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9206','Bin width 82.5 US survey feet','length',2.51460502921005861769e+01,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9207','Bin width 37.5 metres','length',37.5,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9208','Bin width 25 metres','length',25.0,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9209','Bin width 12.5 metres','length',12.5,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9210','Bin width 6.25 metres','length',6.25,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9211','Bin width 3.125 metres','length',3.125,NULL,1); INSERT INTO "unit_of_measure" VALUES('EPSG','9300','British foot (Sears 1922 truncated)','length',3.04799333333333366535e-01,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9301','British chain (Sears 1922 truncated)','length',20.116756,NULL,0); INSERT INTO "unit_of_measure" VALUES('EPSG','9302','British link (Sears 1922 truncated)','length',0.20116756,NULL,0); proj-9.6.0/data/sql/versioned_auth_name_mapping.sql000664 001754 001755 00000000225 14764566077 022403 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "versioned_auth_name_mapping" VALUES('IAU_2015','IAU','2015',1); proj-9.6.0/data/sql/vertical_crs.sql000664 001754 001755 00000165732 14764566077 017350 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "vertical_crs" VALUES('EPSG','3855','EGM2008 height',NULL,'EPSG','6499','EPSG','1027',0); INSERT INTO "usage" VALUES('EPSG','2857','vertical_crs','EPSG','3855','EPSG','1262','EPSG','1027'); INSERT INTO "vertical_crs" VALUES('EPSG','3886','Fao 1979 height',NULL,'EPSG','6499','EPSG','1028',0); INSERT INTO "usage" VALUES('EPSG','2872','vertical_crs','EPSG','3886','EPSG','3625','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','3900','N2000 height',NULL,'EPSG','6499','EPSG','1030',0); INSERT INTO "usage" VALUES('EPSG','2880','vertical_crs','EPSG','3900','EPSG','3333','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','4440','NZVD2009 height',NULL,'EPSG','6499','EPSG','1039',0); INSERT INTO "usage" VALUES('EPSG','3313','vertical_crs','EPSG','4440','EPSG','1175','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','4458','Dunedin-Bluff 1960 height',NULL,'EPSG','6499','EPSG','1040',0); INSERT INTO "usage" VALUES('EPSG','3317','vertical_crs','EPSG','4458','EPSG','3806','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5193','KVD1964 height',NULL,'EPSG','6499','EPSG','1049',0); INSERT INTO "usage" VALUES('EPSG','3864','vertical_crs','EPSG','5193','EPSG','3266','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5195','Trieste height',NULL,'EPSG','6499','EPSG','1050',0); INSERT INTO "usage" VALUES('EPSG','3865','vertical_crs','EPSG','5195','EPSG','2370','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5214','Genoa 1942 height',NULL,'EPSG','6499','EPSG','1051',0); INSERT INTO "usage" VALUES('EPSG','3866','vertical_crs','EPSG','5214','EPSG','3736','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5237','SLVD height',NULL,'EPSG','6499','EPSG','1054',0); INSERT INTO "usage" VALUES('EPSG','3876','vertical_crs','EPSG','5237','EPSG','3310','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5317','FVR09 height',NULL,'EPSG','6499','EPSG','1059',0); INSERT INTO "usage" VALUES('EPSG','3924','vertical_crs','EPSG','5317','EPSG','3248','EPSG','1029'); INSERT INTO "vertical_crs" VALUES('EPSG','5597','FCSVR10 height',NULL,'EPSG','6499','EPSG','1079',0); INSERT INTO "usage" VALUES('EPSG','4067','vertical_crs','EPSG','5597','EPSG','3890','EPSG','1139'); INSERT INTO "vertical_crs" VALUES('EPSG','5600','NGPF height',NULL,'EPSG','6499','EPSG','5195',0); INSERT INTO "usage" VALUES('EPSG','4069','vertical_crs','EPSG','5600','EPSG','3134','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5601','IGN 1966 height',NULL,'EPSG','6499','EPSG','5196',0); INSERT INTO "usage" VALUES('EPSG','4070','vertical_crs','EPSG','5601','EPSG','3124','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5602','Moorea SAU 1981 height',NULL,'EPSG','6499','EPSG','5197',0); INSERT INTO "usage" VALUES('EPSG','4071','vertical_crs','EPSG','5602','EPSG','3125','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5603','Raiatea SAU 2001 height',NULL,'EPSG','6499','EPSG','5198',0); INSERT INTO "usage" VALUES('EPSG','4072','vertical_crs','EPSG','5603','EPSG','3136','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5604','Maupiti SAU 2001 height',NULL,'EPSG','6499','EPSG','5199',0); INSERT INTO "usage" VALUES('EPSG','4073','vertical_crs','EPSG','5604','EPSG','3126','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5605','Huahine SAU 2001 height',NULL,'EPSG','6499','EPSG','5200',0); INSERT INTO "usage" VALUES('EPSG','4074','vertical_crs','EPSG','5605','EPSG','3135','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5606','Tahaa SAU 2001 height',NULL,'EPSG','6499','EPSG','5201',0); INSERT INTO "usage" VALUES('EPSG','4075','vertical_crs','EPSG','5606','EPSG','3138','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5607','Bora Bora SAU 2001 height',NULL,'EPSG','6499','EPSG','5202',0); INSERT INTO "usage" VALUES('EPSG','4076','vertical_crs','EPSG','5607','EPSG','3137','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5608','IGLD 1955 height',NULL,'EPSG','6499','EPSG','5204',0); INSERT INTO "usage" VALUES('EPSG','4077','vertical_crs','EPSG','5608','EPSG','3468','EPSG','1202'); INSERT INTO "vertical_crs" VALUES('EPSG','5609','IGLD 1985 height',NULL,'EPSG','6499','EPSG','5205',0); INSERT INTO "usage" VALUES('EPSG','4078','vertical_crs','EPSG','5609','EPSG','3468','EPSG','1202'); INSERT INTO "vertical_crs" VALUES('EPSG','5610','HVRS71 height',NULL,'EPSG','6499','EPSG','5207',0); INSERT INTO "usage" VALUES('EPSG','4079','vertical_crs','EPSG','5610','EPSG','3234','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5611','Caspian height',NULL,'EPSG','6499','EPSG','5106',0); INSERT INTO "usage" VALUES('EPSG','4080','vertical_crs','EPSG','5611','EPSG','1291','EPSG','1136'); INSERT INTO "vertical_crs" VALUES('EPSG','5613','RH2000 height',NULL,'EPSG','6499','EPSG','5208',0); INSERT INTO "usage" VALUES('EPSG','4082','vertical_crs','EPSG','5613','EPSG','3313','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5615','RH00 height',NULL,'EPSG','6499','EPSG','5209',0); INSERT INTO "usage" VALUES('EPSG','4084','vertical_crs','EPSG','5615','EPSG','3313','EPSG','1029'); INSERT INTO "vertical_crs" VALUES('EPSG','5616','IGN 1988 LS height',NULL,'EPSG','6499','EPSG','5210',0); INSERT INTO "usage" VALUES('EPSG','4085','vertical_crs','EPSG','5616','EPSG','2895','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5617','IGN 1988 MG height',NULL,'EPSG','6499','EPSG','5211',0); INSERT INTO "usage" VALUES('EPSG','4086','vertical_crs','EPSG','5617','EPSG','2894','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5618','IGN 1992 LD height',NULL,'EPSG','6499','EPSG','5212',0); INSERT INTO "usage" VALUES('EPSG','4087','vertical_crs','EPSG','5618','EPSG','2893','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5619','IGN 1988 SB height',NULL,'EPSG','6499','EPSG','5213',0); INSERT INTO "usage" VALUES('EPSG','4088','vertical_crs','EPSG','5619','EPSG','2891','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5620','IGN 1988 SM height',NULL,'EPSG','6499','EPSG','5214',0); INSERT INTO "usage" VALUES('EPSG','4089','vertical_crs','EPSG','5620','EPSG','2890','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5621','EVRF2007 height',NULL,'EPSG','6499','EPSG','5215',0); INSERT INTO "usage" VALUES('EPSG','4090','vertical_crs','EPSG','5621','EPSG','3594','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5701','ODN height',NULL,'EPSG','6499','EPSG','5101',0); INSERT INTO "usage" VALUES('EPSG','4144','vertical_crs','EPSG','5701','EPSG','2792','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5702','NGVD29 height (ftUS)',NULL,'EPSG','6497','EPSG','5102',0); INSERT INTO "usage" VALUES('EPSG','4145','vertical_crs','EPSG','5702','EPSG','1323','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5703','NAVD88 height',NULL,'EPSG','6499','EPSG','5103',0); INSERT INTO "usage" VALUES('EPSG','4146','vertical_crs','EPSG','5703','EPSG','4161','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5704','Yellow Sea',NULL,'EPSG','6499','EPSG','5104',1); INSERT INTO "usage" VALUES('EPSG','4147','vertical_crs','EPSG','5704','EPSG','1067','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5705','Baltic 1977 height',NULL,'EPSG','6499','EPSG','5105',0); INSERT INTO "usage" VALUES('EPSG','4148','vertical_crs','EPSG','5705','EPSG','2423','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5709','NAP height',NULL,'EPSG','6499','EPSG','5109',0); INSERT INTO "usage" VALUES('EPSG','4152','vertical_crs','EPSG','5709','EPSG','1172','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5710','Ostend height',NULL,'EPSG','6499','EPSG','5110',0); INSERT INTO "usage" VALUES('EPSG','4153','vertical_crs','EPSG','5710','EPSG','1347','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5711','AHD height',NULL,'EPSG','6499','EPSG','5111',0); INSERT INTO "usage" VALUES('EPSG','14230','vertical_crs','EPSG','5711','EPSG','4493','EPSG','1263'); INSERT INTO "vertical_crs" VALUES('EPSG','5712','AHD (Tasmania) height',NULL,'EPSG','6499','EPSG','5112',0); INSERT INTO "usage" VALUES('EPSG','4155','vertical_crs','EPSG','5712','EPSG','2947','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5713','CGVD28 height',NULL,'EPSG','6499','EPSG','5114',0); INSERT INTO "usage" VALUES('EPSG','4156','vertical_crs','EPSG','5713','EPSG','1289','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5714','MSL height',NULL,'EPSG','6499','EPSG','5100',0); INSERT INTO "usage" VALUES('EPSG','4157','vertical_crs','EPSG','5714','EPSG','1262','EPSG','1199'); INSERT INTO "vertical_crs" VALUES('EPSG','5716','Piraeus height',NULL,'EPSG','6499','EPSG','5115',0); INSERT INTO "usage" VALUES('EPSG','4159','vertical_crs','EPSG','5716','EPSG','3254','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5717','N60 height',NULL,'EPSG','6499','EPSG','5116',0); INSERT INTO "usage" VALUES('EPSG','4160','vertical_crs','EPSG','5717','EPSG','3333','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5718','RH70 height',NULL,'EPSG','6499','EPSG','5117',0); INSERT INTO "usage" VALUES('EPSG','4161','vertical_crs','EPSG','5718','EPSG','3313','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5719','NGF Lallemand height',NULL,'EPSG','6499','EPSG','5118',0); INSERT INTO "usage" VALUES('EPSG','4162','vertical_crs','EPSG','5719','EPSG','1326','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5720','NGF-IGN69 height',NULL,'EPSG','6499','EPSG','5119',0); INSERT INTO "usage" VALUES('EPSG','4163','vertical_crs','EPSG','5720','EPSG','1326','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5721','NGF-IGN78 height',NULL,'EPSG','6499','EPSG','5120',0); INSERT INTO "usage" VALUES('EPSG','4164','vertical_crs','EPSG','5721','EPSG','1327','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5722','Maputo height',NULL,'EPSG','6499','EPSG','5121',0); INSERT INTO "usage" VALUES('EPSG','4165','vertical_crs','EPSG','5722','EPSG','3281','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5723','JSLD69 height',NULL,'EPSG','6499','EPSG','5122',0); INSERT INTO "usage" VALUES('EPSG','4166','vertical_crs','EPSG','5723','EPSG','4166','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5724','PHD93 height',NULL,'EPSG','6499','EPSG','5123',0); INSERT INTO "usage" VALUES('EPSG','4167','vertical_crs','EPSG','5724','EPSG','3288','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5725','Fahud HD height',NULL,'EPSG','6499','EPSG','5124',0); INSERT INTO "usage" VALUES('EPSG','4168','vertical_crs','EPSG','5725','EPSG','4009','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5726','Ha Tien 1960 height',NULL,'EPSG','6499','EPSG','5125',0); INSERT INTO "usage" VALUES('EPSG','4169','vertical_crs','EPSG','5726','EPSG','1302','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5727','Hon Dau 1992 height',NULL,'EPSG','6499','EPSG','5126',0); INSERT INTO "usage" VALUES('EPSG','4170','vertical_crs','EPSG','5727','EPSG','4015','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5728','LN02 height',NULL,'EPSG','6499','EPSG','5127',0); INSERT INTO "usage" VALUES('EPSG','4171','vertical_crs','EPSG','5728','EPSG','1286','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','5729','LHN95 height',NULL,'EPSG','6499','EPSG','5128',0); INSERT INTO "usage" VALUES('EPSG','4172','vertical_crs','EPSG','5729','EPSG','1286','EPSG','1027'); INSERT INTO "vertical_crs" VALUES('EPSG','5730','EVRF2000 height',NULL,'EPSG','6499','EPSG','5129',0); INSERT INTO "usage" VALUES('EPSG','4173','vertical_crs','EPSG','5730','EPSG','1299','EPSG','1161'); INSERT INTO "vertical_crs" VALUES('EPSG','5731','Malin Head height',NULL,'EPSG','6499','EPSG','5130',0); INSERT INTO "usage" VALUES('EPSG','4174','vertical_crs','EPSG','5731','EPSG','1305','EPSG','1153'); INSERT INTO "vertical_crs" VALUES('EPSG','5732','Belfast height',NULL,'EPSG','6499','EPSG','5131',0); INSERT INTO "usage" VALUES('EPSG','4175','vertical_crs','EPSG','5732','EPSG','2530','EPSG','1209'); INSERT INTO "vertical_crs" VALUES('EPSG','5733','DNN height',NULL,'EPSG','6499','EPSG','5132',0); INSERT INTO "usage" VALUES('EPSG','4176','vertical_crs','EPSG','5733','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','5735','Black Sea height',NULL,'EPSG','6499','EPSG','5134',0); INSERT INTO "usage" VALUES('EPSG','4178','vertical_crs','EPSG','5735','EPSG','3251','EPSG','1153'); INSERT INTO "vertical_crs" VALUES('EPSG','5736','Yellow Sea 1956 height',NULL,'EPSG','6499','EPSG','5104',0); INSERT INTO "usage" VALUES('EPSG','4179','vertical_crs','EPSG','5736','EPSG','3228','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5737','Yellow Sea 1985 height',NULL,'EPSG','6499','EPSG','5137',0); INSERT INTO "usage" VALUES('EPSG','4180','vertical_crs','EPSG','5737','EPSG','3228','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5738','HKPD height',NULL,'EPSG','6499','EPSG','5135',0); INSERT INTO "usage" VALUES('EPSG','4181','vertical_crs','EPSG','5738','EPSG','3334','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5739','HKCD depth',NULL,'EPSG','6498','EPSG','5136',0); INSERT INTO "usage" VALUES('EPSG','4182','vertical_crs','EPSG','5739','EPSG','3335','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5740','ODN Orkney height',NULL,'EPSG','6499','EPSG','5138',0); INSERT INTO "usage" VALUES('EPSG','4183','vertical_crs','EPSG','5740','EPSG','2793','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5741','Fair Isle height',NULL,'EPSG','6499','EPSG','5139',0); INSERT INTO "usage" VALUES('EPSG','4184','vertical_crs','EPSG','5741','EPSG','2794','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5742','Lerwick height',NULL,'EPSG','6499','EPSG','5140',0); INSERT INTO "usage" VALUES('EPSG','4185','vertical_crs','EPSG','5742','EPSG','2795','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5743','Foula height',NULL,'EPSG','6499','EPSG','5141',0); INSERT INTO "usage" VALUES('EPSG','4186','vertical_crs','EPSG','5743','EPSG','2796','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5744','Sule Skerry height',NULL,'EPSG','6499','EPSG','5142',0); INSERT INTO "usage" VALUES('EPSG','4187','vertical_crs','EPSG','5744','EPSG','2797','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5745','North Rona height',NULL,'EPSG','6499','EPSG','5143',0); INSERT INTO "usage" VALUES('EPSG','4188','vertical_crs','EPSG','5745','EPSG','2798','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5746','Stornoway height',NULL,'EPSG','6499','EPSG','5144',0); INSERT INTO "usage" VALUES('EPSG','4189','vertical_crs','EPSG','5746','EPSG','2799','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5747','St. Kilda height',NULL,'EPSG','6499','EPSG','5145',0); INSERT INTO "usage" VALUES('EPSG','4190','vertical_crs','EPSG','5747','EPSG','2800','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5748','Flannan Isles height',NULL,'EPSG','6499','EPSG','5146',0); INSERT INTO "usage" VALUES('EPSG','4191','vertical_crs','EPSG','5748','EPSG','2801','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5749','St. Marys height',NULL,'EPSG','6499','EPSG','5147',0); INSERT INTO "usage" VALUES('EPSG','4192','vertical_crs','EPSG','5749','EPSG','2802','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5750','Douglas height',NULL,'EPSG','6499','EPSG','5148',0); INSERT INTO "usage" VALUES('EPSG','4193','vertical_crs','EPSG','5750','EPSG','2803','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5751','Fao height',NULL,'EPSG','6499','EPSG','5149',0); INSERT INTO "usage" VALUES('EPSG','4194','vertical_crs','EPSG','5751','EPSG','3390','EPSG','1136'); INSERT INTO "vertical_crs" VALUES('EPSG','5752','Bandar Abbas height',NULL,'EPSG','6499','EPSG','5150',0); INSERT INTO "usage" VALUES('EPSG','4195','vertical_crs','EPSG','5752','EPSG','3336','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5753','NGNC69 height',NULL,'EPSG','6499','EPSG','5151',0); INSERT INTO "usage" VALUES('EPSG','4196','vertical_crs','EPSG','5753','EPSG','2822','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5754','Poolbeg height (ft(Br36))',NULL,'EPSG','6496','EPSG','5152',0); INSERT INTO "usage" VALUES('EPSG','4197','vertical_crs','EPSG','5754','EPSG','1305','EPSG','1153'); INSERT INTO "vertical_crs" VALUES('EPSG','5755','NGG1977 height',NULL,'EPSG','6499','EPSG','5153',0); INSERT INTO "usage" VALUES('EPSG','4198','vertical_crs','EPSG','5755','EPSG','3146','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5756','Martinique 1987 height',NULL,'EPSG','6499','EPSG','5154',0); INSERT INTO "usage" VALUES('EPSG','4199','vertical_crs','EPSG','5756','EPSG','3276','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5757','Guadeloupe 1988 height',NULL,'EPSG','6499','EPSG','5155',0); INSERT INTO "usage" VALUES('EPSG','4200','vertical_crs','EPSG','5757','EPSG','2892','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5758','Reunion 1989 height',NULL,'EPSG','6499','EPSG','5156',0); INSERT INTO "usage" VALUES('EPSG','4201','vertical_crs','EPSG','5758','EPSG','3337','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5759','Auckland 1946 height',NULL,'EPSG','6499','EPSG','5157',0); INSERT INTO "usage" VALUES('EPSG','4202','vertical_crs','EPSG','5759','EPSG','3764','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5760','Bluff 1955 height',NULL,'EPSG','6499','EPSG','5158',0); INSERT INTO "usage" VALUES('EPSG','4203','vertical_crs','EPSG','5760','EPSG','3801','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5761','Dunedin 1958 height',NULL,'EPSG','6499','EPSG','5159',0); INSERT INTO "usage" VALUES('EPSG','4204','vertical_crs','EPSG','5761','EPSG','3803','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5762','Gisborne 1926 height',NULL,'EPSG','6499','EPSG','5160',0); INSERT INTO "usage" VALUES('EPSG','4205','vertical_crs','EPSG','5762','EPSG','3771','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5763','Lyttelton 1937 height',NULL,'EPSG','6499','EPSG','5161',0); INSERT INTO "usage" VALUES('EPSG','4206','vertical_crs','EPSG','5763','EPSG','3804','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5764','Moturiki 1953 height',NULL,'EPSG','6499','EPSG','5162',0); INSERT INTO "usage" VALUES('EPSG','4207','vertical_crs','EPSG','5764','EPSG','3768','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5765','Napier 1962 height',NULL,'EPSG','6499','EPSG','5163',0); INSERT INTO "usage" VALUES('EPSG','4208','vertical_crs','EPSG','5765','EPSG','3772','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5766','Nelson 1955 height',NULL,'EPSG','6499','EPSG','5164',0); INSERT INTO "usage" VALUES('EPSG','4209','vertical_crs','EPSG','5766','EPSG','3802','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5767','One Tree Point 1964 height',NULL,'EPSG','6499','EPSG','5165',0); INSERT INTO "usage" VALUES('EPSG','4210','vertical_crs','EPSG','5767','EPSG','3762','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5768','Tararu 1952 height',NULL,'EPSG','6499','EPSG','5166',0); INSERT INTO "usage" VALUES('EPSG','4211','vertical_crs','EPSG','5768','EPSG','3818','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5769','Taranaki 1970 height',NULL,'EPSG','6499','EPSG','5167',0); INSERT INTO "usage" VALUES('EPSG','4212','vertical_crs','EPSG','5769','EPSG','3769','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5770','Wellington 1953 height',NULL,'EPSG','6499','EPSG','5168',0); INSERT INTO "usage" VALUES('EPSG','4213','vertical_crs','EPSG','5770','EPSG','3773','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5771','Chatham Island 1959 height',NULL,'EPSG','6499','EPSG','5169',0); INSERT INTO "usage" VALUES('EPSG','4214','vertical_crs','EPSG','5771','EPSG','3894','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5772','Stewart Island 1977 height',NULL,'EPSG','6499','EPSG','5170',0); INSERT INTO "usage" VALUES('EPSG','4215','vertical_crs','EPSG','5772','EPSG','3338','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5773','EGM96 height',NULL,'EPSG','6499','EPSG','5171',0); INSERT INTO "usage" VALUES('EPSG','4216','vertical_crs','EPSG','5773','EPSG','1262','EPSG','1027'); INSERT INTO "vertical_crs" VALUES('EPSG','5774','NG95 height',NULL,'EPSG','6499','EPSG','5172',0); INSERT INTO "usage" VALUES('EPSG','4217','vertical_crs','EPSG','5774','EPSG','1146','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5775','Antalya height',NULL,'EPSG','6499','EPSG','5173',0); INSERT INTO "usage" VALUES('EPSG','4218','vertical_crs','EPSG','5775','EPSG','3322','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5776','NN54 height',NULL,'EPSG','6499','EPSG','5174',0); INSERT INTO "usage" VALUES('EPSG','4219','vertical_crs','EPSG','5776','EPSG','1352','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5777','Durres height',NULL,'EPSG','6499','EPSG','5175',0); INSERT INTO "usage" VALUES('EPSG','4220','vertical_crs','EPSG','5777','EPSG','3212','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5778','GHA height',NULL,'EPSG','6499','EPSG','5176',0); INSERT INTO "usage" VALUES('EPSG','4221','vertical_crs','EPSG','5778','EPSG','1037','EPSG','1056'); INSERT INTO "vertical_crs" VALUES('EPSG','5779','SVS2000 height',NULL,'EPSG','6499','EPSG','5177',0); INSERT INTO "usage" VALUES('EPSG','4222','vertical_crs','EPSG','5779','EPSG','3307','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5780','Cascais height',NULL,'EPSG','6499','EPSG','5178',0); INSERT INTO "usage" VALUES('EPSG','4223','vertical_crs','EPSG','5780','EPSG','1294','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5781','Constanta height',NULL,'EPSG','6499','EPSG','5179',0); INSERT INTO "usage" VALUES('EPSG','4224','vertical_crs','EPSG','5781','EPSG','3295','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5782','Alicante height',NULL,'EPSG','6499','EPSG','5180',0); INSERT INTO "usage" VALUES('EPSG','4225','vertical_crs','EPSG','5782','EPSG','4188','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5783','DHHN92 height',NULL,'EPSG','6499','EPSG','5181',0); INSERT INTO "usage" VALUES('EPSG','4226','vertical_crs','EPSG','5783','EPSG','3339','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5784','DHHN85 height',NULL,'EPSG','6499','EPSG','5182',0); INSERT INTO "usage" VALUES('EPSG','4227','vertical_crs','EPSG','5784','EPSG','2326','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5785','SNN76 height',NULL,'EPSG','6499','EPSG','5183',0); INSERT INTO "usage" VALUES('EPSG','4228','vertical_crs','EPSG','5785','EPSG','1343','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5786','Baltic 1982 height',NULL,'EPSG','6499','EPSG','5184',0); INSERT INTO "usage" VALUES('EPSG','4229','vertical_crs','EPSG','5786','EPSG','3224','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5787','EOMA 1980 height',NULL,'EPSG','6499','EPSG','5185',0); INSERT INTO "usage" VALUES('EPSG','4230','vertical_crs','EPSG','5787','EPSG','1119','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5788','Kuwait PWD height',NULL,'EPSG','6499','EPSG','5186',0); INSERT INTO "usage" VALUES('EPSG','4231','vertical_crs','EPSG','5788','EPSG','3267','EPSG','1248'); INSERT INTO "vertical_crs" VALUES('EPSG','5790','KOC CD height',NULL,'EPSG','6499','EPSG','5188',0); INSERT INTO "usage" VALUES('EPSG','4233','vertical_crs','EPSG','5790','EPSG','3267','EPSG','1206'); INSERT INTO "vertical_crs" VALUES('EPSG','5791','NGC 1948 height',NULL,'EPSG','6499','EPSG','5189',0); INSERT INTO "usage" VALUES('EPSG','4234','vertical_crs','EPSG','5791','EPSG','1327','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5792','Danger 1950 height',NULL,'EPSG','6499','EPSG','5190',0); INSERT INTO "usage" VALUES('EPSG','4235','vertical_crs','EPSG','5792','EPSG','3299','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5793','Mayotte 1950 height',NULL,'EPSG','6499','EPSG','5191',0); INSERT INTO "usage" VALUES('EPSG','4236','vertical_crs','EPSG','5793','EPSG','3340','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','5794','Martinique 1955 height',NULL,'EPSG','6499','EPSG','5192',0); INSERT INTO "usage" VALUES('EPSG','4237','vertical_crs','EPSG','5794','EPSG','3276','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5795','Guadeloupe 1951 height',NULL,'EPSG','6499','EPSG','5193',0); INSERT INTO "usage" VALUES('EPSG','4238','vertical_crs','EPSG','5795','EPSG','2892','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5796','Lagos 1955 height',NULL,'EPSG','6499','EPSG','5194',0); INSERT INTO "usage" VALUES('EPSG','4239','vertical_crs','EPSG','5796','EPSG','3287','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5797','AIOC95 height',NULL,'EPSG','6499','EPSG','5133',0); INSERT INTO "usage" VALUES('EPSG','4240','vertical_crs','EPSG','5797','EPSG','2592','EPSG','1136'); INSERT INTO "vertical_crs" VALUES('EPSG','5798','EGM84 height',NULL,'EPSG','6499','EPSG','5203',0); INSERT INTO "usage" VALUES('EPSG','4241','vertical_crs','EPSG','5798','EPSG','1262','EPSG','1027'); INSERT INTO "vertical_crs" VALUES('EPSG','5799','DVR90 height',NULL,'EPSG','6499','EPSG','1371',0); INSERT INTO "usage" VALUES('EPSG','4242','vertical_crs','EPSG','5799','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','5829','Instantaneous Water Level height',NULL,'EPSG','6499','EPSG','5113',0); INSERT INTO "usage" VALUES('EPSG','4267','vertical_crs','EPSG','5829','EPSG','1262','EPSG','1200'); INSERT INTO "vertical_crs" VALUES('EPSG','5843','Ras Ghumays height',NULL,'EPSG','6499','EPSG','1146',0); INSERT INTO "usage" VALUES('EPSG','4278','vertical_crs','EPSG','5843','EPSG','4225','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','5861','LAT depth',NULL,'EPSG','6498','EPSG','1080',0); INSERT INTO "usage" VALUES('EPSG','4295','vertical_crs','EPSG','5861','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5862','LLWLT depth',NULL,'EPSG','6498','EPSG','1083',0); INSERT INTO "usage" VALUES('EPSG','4296','vertical_crs','EPSG','5862','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5863','ISLW depth',NULL,'EPSG','6498','EPSG','1085',0); INSERT INTO "usage" VALUES('EPSG','4297','vertical_crs','EPSG','5863','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5864','MLLWS depth',NULL,'EPSG','6498','EPSG','1086',0); INSERT INTO "usage" VALUES('EPSG','4298','vertical_crs','EPSG','5864','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5865','MLWS depth',NULL,'EPSG','6498','EPSG','1087',0); INSERT INTO "usage" VALUES('EPSG','4299','vertical_crs','EPSG','5865','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5866','MLLW depth',NULL,'EPSG','6498','EPSG','1089',0); INSERT INTO "usage" VALUES('EPSG','4300','vertical_crs','EPSG','5866','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5867','MLW depth',NULL,'EPSG','6498','EPSG','1091',0); INSERT INTO "usage" VALUES('EPSG','4301','vertical_crs','EPSG','5867','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5868','MHW height',NULL,'EPSG','6499','EPSG','1092',0); INSERT INTO "usage" VALUES('EPSG','4302','vertical_crs','EPSG','5868','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5869','MHHW height',NULL,'EPSG','6499','EPSG','1090',0); INSERT INTO "usage" VALUES('EPSG','4303','vertical_crs','EPSG','5869','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5870','MHWS height',NULL,'EPSG','6499','EPSG','1088',0); INSERT INTO "usage" VALUES('EPSG','4304','vertical_crs','EPSG','5870','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5871','HHWLT height',NULL,'EPSG','6499','EPSG','1084',0); INSERT INTO "usage" VALUES('EPSG','4305','vertical_crs','EPSG','5871','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5872','HAT height',NULL,'EPSG','6499','EPSG','1082',0); INSERT INTO "usage" VALUES('EPSG','4306','vertical_crs','EPSG','5872','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5873','Low Water depth',NULL,'EPSG','6498','EPSG','1093',0); INSERT INTO "usage" VALUES('EPSG','4307','vertical_crs','EPSG','5873','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5874','High Water height',NULL,'EPSG','6499','EPSG','1094',0); INSERT INTO "usage" VALUES('EPSG','4308','vertical_crs','EPSG','5874','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5941','NN2000 height',NULL,'EPSG','6499','EPSG','1096',0); INSERT INTO "usage" VALUES('EPSG','4345','vertical_crs','EPSG','5941','EPSG','1352','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6130','GCVD54 height (ft)',NULL,'EPSG','1030','EPSG','1097',0); INSERT INTO "usage" VALUES('EPSG','4457','vertical_crs','EPSG','6130','EPSG','3185','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6131','LCVD61 height (ft)',NULL,'EPSG','1030','EPSG','1098',0); INSERT INTO "usage" VALUES('EPSG','4458','vertical_crs','EPSG','6131','EPSG','4121','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6132','CBVD61 height (ft)',NULL,'EPSG','1030','EPSG','1099',0); INSERT INTO "usage" VALUES('EPSG','4459','vertical_crs','EPSG','6132','EPSG','3207','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6178','Cais da Pontinha height',NULL,'EPSG','6499','EPSG','1101',0); INSERT INTO "usage" VALUES('EPSG','4497','vertical_crs','EPSG','6178','EPSG','4125','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6179','Cais da Vila height',NULL,'EPSG','6499','EPSG','1102',0); INSERT INTO "usage" VALUES('EPSG','4498','vertical_crs','EPSG','6179','EPSG','3680','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6180','Cais das Velas height',NULL,'EPSG','6499','EPSG','1103',0); INSERT INTO "usage" VALUES('EPSG','4499','vertical_crs','EPSG','6180','EPSG','2875','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6181','Horta height',NULL,'EPSG','6499','EPSG','1104',0); INSERT INTO "usage" VALUES('EPSG','4500','vertical_crs','EPSG','6181','EPSG','2873','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6182','Cais da Madalena height',NULL,'EPSG','6499','EPSG','1105',0); INSERT INTO "usage" VALUES('EPSG','4501','vertical_crs','EPSG','6182','EPSG','2874','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6183','Santa Cruz da Graciosa height',NULL,'EPSG','6499','EPSG','1106',0); INSERT INTO "usage" VALUES('EPSG','4502','vertical_crs','EPSG','6183','EPSG','3681','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6184','Cais da Figueirinha height',NULL,'EPSG','6499','EPSG','1107',0); INSERT INTO "usage" VALUES('EPSG','4503','vertical_crs','EPSG','6184','EPSG','2872','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6185','Santa Cruz das Flores height',NULL,'EPSG','6499','EPSG','1108',0); INSERT INTO "usage" VALUES('EPSG','4504','vertical_crs','EPSG','6185','EPSG','1344','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6186','Cais da Vila do Porto height',NULL,'EPSG','6499','EPSG','1109',0); INSERT INTO "usage" VALUES('EPSG','4505','vertical_crs','EPSG','6186','EPSG','4126','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6187','Ponta Delgada height',NULL,'EPSG','6499','EPSG','1110',0); INSERT INTO "usage" VALUES('EPSG','4506','vertical_crs','EPSG','6187','EPSG','2871','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6638','Tutuila 1962 height',NULL,'EPSG','6499','EPSG','1121',0); INSERT INTO "usage" VALUES('EPSG','4859','vertical_crs','EPSG','6638','EPSG','2288','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6639','Guam 1963 height',NULL,'EPSG','6499','EPSG','1122',0); INSERT INTO "usage" VALUES('EPSG','4860','vertical_crs','EPSG','6639','EPSG','3255','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6640','NMVD03 height',NULL,'EPSG','6499','EPSG','1119',0); INSERT INTO "usage" VALUES('EPSG','4861','vertical_crs','EPSG','6640','EPSG','4171','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6641','PRVD02 height',NULL,'EPSG','6499','EPSG','1123',0); INSERT INTO "usage" VALUES('EPSG','4862','vertical_crs','EPSG','6641','EPSG','3294','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6642','VIVD09 height',NULL,'EPSG','6499','EPSG','1124',0); INSERT INTO "usage" VALUES('EPSG','4863','vertical_crs','EPSG','6642','EPSG','3330','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6643','ASVD02 height',NULL,'EPSG','6499','EPSG','1125',0); INSERT INTO "usage" VALUES('EPSG','4864','vertical_crs','EPSG','6643','EPSG','2288','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6644','GUVD04 height',NULL,'EPSG','6499','EPSG','1126',0); INSERT INTO "usage" VALUES('EPSG','4865','vertical_crs','EPSG','6644','EPSG','3255','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6647','CGVD2013(CGG2013) height',NULL,'EPSG','6499','EPSG','1127',0); INSERT INTO "usage" VALUES('EPSG','4867','vertical_crs','EPSG','6647','EPSG','1061','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','6693','JSLD72 height',NULL,'EPSG','6499','EPSG','1129',0); INSERT INTO "usage" VALUES('EPSG','4912','vertical_crs','EPSG','6693','EPSG','4168','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6694','JGD2000 (vertical) height',NULL,'EPSG','6499','EPSG','1130',0); INSERT INTO "usage" VALUES('EPSG','4913','vertical_crs','EPSG','6694','EPSG','3263','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6695','JGD2011 (vertical) height',NULL,'EPSG','6499','EPSG','1131',0); INSERT INTO "usage" VALUES('EPSG','4914','vertical_crs','EPSG','6695','EPSG','3263','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6916','SHD height',NULL,'EPSG','6499','EPSG','1140',0); INSERT INTO "usage" VALUES('EPSG','5039','vertical_crs','EPSG','6916','EPSG','1210','EPSG','1144'); INSERT INTO "vertical_crs" VALUES('EPSG','7446','Famagusta 1960 height',NULL,'EPSG','6499','EPSG','1148',0); INSERT INTO "usage" VALUES('EPSG','5289','vertical_crs','EPSG','7446','EPSG','3236','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','7447','PNG08 height',NULL,'EPSG','6499','EPSG','1149',0); INSERT INTO "usage" VALUES('EPSG','5290','vertical_crs','EPSG','7447','EPSG','4384','EPSG','1027'); INSERT INTO "vertical_crs" VALUES('EPSG','7651','Kumul 34 height',NULL,'EPSG','6499','EPSG','1150',0); INSERT INTO "usage" VALUES('EPSG','5409','vertical_crs','EPSG','7651','EPSG','4013','EPSG','1029'); INSERT INTO "vertical_crs" VALUES('EPSG','7652','Kiunga height',NULL,'EPSG','6499','EPSG','1151',0); INSERT INTO "usage" VALUES('EPSG','5410','vertical_crs','EPSG','7652','EPSG','4383','EPSG','1029'); INSERT INTO "vertical_crs" VALUES('EPSG','7699','DHHN12 height',NULL,'EPSG','6499','EPSG','1161',0); INSERT INTO "usage" VALUES('EPSG','5436','vertical_crs','EPSG','7699','EPSG','3339','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','7700','Latvia 2000 height',NULL,'EPSG','6499','EPSG','1162',0); INSERT INTO "usage" VALUES('EPSG','5437','vertical_crs','EPSG','7700','EPSG','3268','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','7707','ODN (Offshore) height',NULL,'EPSG','6499','EPSG','1164',0); INSERT INTO "usage" VALUES('EPSG','5439','vertical_crs','EPSG','7707','EPSG','4391','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','7832','POM96 height',NULL,'EPSG','6499','EPSG','1171',0); INSERT INTO "usage" VALUES('EPSG','5497','vertical_crs','EPSG','7832','EPSG','4425','EPSG','1029'); INSERT INTO "vertical_crs" VALUES('EPSG','7837','DHHN2016 height',NULL,'EPSG','6499','EPSG','1170',0); INSERT INTO "usage" VALUES('EPSG','5498','vertical_crs','EPSG','7837','EPSG','1103','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','7839','NZVD2016 height',NULL,'EPSG','6499','EPSG','1169',0); INSERT INTO "usage" VALUES('EPSG','5499','vertical_crs','EPSG','7839','EPSG','1175','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','7841','POM08 height',NULL,'EPSG','6499','EPSG','1172',0); INSERT INTO "usage" VALUES('EPSG','5500','vertical_crs','EPSG','7841','EPSG','4425','EPSG','1029'); INSERT INTO "vertical_crs" VALUES('EPSG','7888','Jamestown 1971 height',NULL,'EPSG','6499','EPSG','1175',0); INSERT INTO "usage" VALUES('EPSG','5530','vertical_crs','EPSG','7888','EPSG','3183','EPSG','1153'); INSERT INTO "vertical_crs" VALUES('EPSG','7889','St. Helena Tritan 2011 height',NULL,'EPSG','6499','EPSG','1176',0); INSERT INTO "usage" VALUES('EPSG','5531','vertical_crs','EPSG','7889','EPSG','3183','EPSG','1145'); INSERT INTO "vertical_crs" VALUES('EPSG','7890','SHVD2015 height',NULL,'EPSG','6499','EPSG','1177',0); INSERT INTO "usage" VALUES('EPSG','5532','vertical_crs','EPSG','7890','EPSG','3183','EPSG','1027'); INSERT INTO "vertical_crs" VALUES('EPSG','7979','KOC WD height',NULL,'EPSG','6499','EPSG','5187',0); INSERT INTO "usage" VALUES('EPSG','5571','vertical_crs','EPSG','7979','EPSG','3267','EPSG','1205'); INSERT INTO "vertical_crs" VALUES('EPSG','8089','ISH2004 height',NULL,'EPSG','6499','EPSG','1190',0); INSERT INTO "usage" VALUES('EPSG','5616','vertical_crs','EPSG','8089','EPSG','4662','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','8266','GVR2000 height',NULL,'EPSG','6499','EPSG','1199',0); INSERT INTO "usage" VALUES('EPSG','5758','vertical_crs','EPSG','8266','EPSG','4461','EPSG','1153'); INSERT INTO "vertical_crs" VALUES('EPSG','8267','GVR2016 height',NULL,'EPSG','6499','EPSG','1200',0); INSERT INTO "usage" VALUES('EPSG','5759','vertical_crs','EPSG','8267','EPSG','4454','EPSG','1153'); INSERT INTO "vertical_crs" VALUES('EPSG','8357','Baltic 1957 height',NULL,'EPSG','6499','EPSG','1202',0); INSERT INTO "usage" VALUES('EPSG','5803','vertical_crs','EPSG','8357','EPSG','1306','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','8378','EPSG example wellbore local vertical CRS',NULL,'EPSG','1049','EPSG','1205',0); INSERT INTO "usage" VALUES('EPSG','5808','vertical_crs','EPSG','8378','EPSG','4393','EPSG','1226'); INSERT INTO "vertical_crs" VALUES('EPSG','8434','Macao height',NULL,'EPSG','6499','EPSG','1210',0); INSERT INTO "usage" VALUES('EPSG','5831','vertical_crs','EPSG','8434','EPSG','1147','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','8675','N43 height',NULL,'EPSG','6499','EPSG','1213',0); INSERT INTO "usage" VALUES('EPSG','5861','vertical_crs','EPSG','8675','EPSG','4522','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','8690','SVS2010 height',NULL,'EPSG','6499','EPSG','1215',0); INSERT INTO "usage" VALUES('EPSG','5871','vertical_crs','EPSG','8690','EPSG','3307','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','8691','SRB_VRS12 height',NULL,'EPSG','6499','EPSG','1216',0); INSERT INTO "usage" VALUES('EPSG','5872','vertical_crs','EPSG','8691','EPSG','4543','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','8841','MVGC height',NULL,'EPSG','6499','EPSG','1219',0); INSERT INTO "usage" VALUES('EPSG','6006','vertical_crs','EPSG','8841','EPSG','3303','EPSG','1181'); INSERT INTO "vertical_crs" VALUES('EPSG','8881','Vienna height',NULL,'EPSG','6499','EPSG','1267',0); INSERT INTO "usage" VALUES('EPSG','13973','vertical_crs','EPSG','8881','EPSG','4585','EPSG','1248'); INSERT INTO "vertical_crs" VALUES('EPSG','8897','EPSG example wellbore local vertical CRS (ft)',NULL,'EPSG','1050','EPSG','1205',0); INSERT INTO "usage" VALUES('EPSG','6013','vertical_crs','EPSG','8897','EPSG','4393','EPSG','1226'); INSERT INTO "vertical_crs" VALUES('EPSG','8904','TWVD 2001 height',NULL,'EPSG','6499','EPSG','1224',0); INSERT INTO "usage" VALUES('EPSG','6020','vertical_crs','EPSG','8904','EPSG','3982','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','8911','DACR52 height',NULL,'EPSG','6499','EPSG','1226',0); INSERT INTO "usage" VALUES('EPSG','6027','vertical_crs','EPSG','8911','EPSG','3232','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9130','IGN 2008 LD height',NULL,'EPSG','6499','EPSG','1250',0); INSERT INTO "usage" VALUES('EPSG','6138','vertical_crs','EPSG','9130','EPSG','2893','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9245','CGVD2013a(2010) height',NULL,'EPSG','6499','EPSG','1256',0); INSERT INTO "usage" VALUES('EPSG','13877','vertical_crs','EPSG','9245','EPSG','1061','EPSG','1180'); INSERT INTO "vertical_crs" VALUES('EPSG','9255','SRVN16 height',NULL,'EPSG','6499','EPSG','1260',0); INSERT INTO "usage" VALUES('EPSG','13908','vertical_crs','EPSG','9255','EPSG','4573','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9274','EVRF2000 Austria height',NULL,'EPSG','6499','EPSG','1261',0); INSERT INTO "usage" VALUES('EPSG','13915','vertical_crs','EPSG','9274','EPSG','1037','EPSG','1027'); INSERT INTO "vertical_crs" VALUES('EPSG','9279','SA LLD height',NULL,'EPSG','6499','EPSG','1262',0); INSERT INTO "usage" VALUES('EPSG','13916','vertical_crs','EPSG','9279','EPSG','3309','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9287','LAT NL depth',NULL,'EPSG','6498','EPSG','1290',0); INSERT INTO "usage" VALUES('EPSG','14122','vertical_crs','EPSG','9287','EPSG','4742','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','9288','MSL NL depth',NULL,'EPSG','6498','EPSG','1270',0); INSERT INTO "usage" VALUES('EPSG','14123','vertical_crs','EPSG','9288','EPSG','4742','EPSG','1265'); INSERT INTO "vertical_crs" VALUES('EPSG','9303','HS2-VRF height',NULL,'EPSG','6499','EPSG','1265',0); INSERT INTO "usage" VALUES('EPSG','14049','vertical_crs','EPSG','9303','EPSG','4582','EPSG','1260'); INSERT INTO "vertical_crs" VALUES('EPSG','9335','KSA-VRF14 height',NULL,'EPSG','6499','EPSG','1269',0); INSERT INTO "usage" VALUES('EPSG','13922','vertical_crs','EPSG','9335','EPSG','3303','EPSG','1181'); INSERT INTO "vertical_crs" VALUES('EPSG','9351','NGNC08 height',NULL,'EPSG','6499','EPSG','1255',0); INSERT INTO "usage" VALUES('EPSG','13977','vertical_crs','EPSG','9351','EPSG','3430','EPSG','1026'); INSERT INTO "vertical_crs" VALUES('EPSG','9389','EVRF2019 height',NULL,'EPSG','6499','EPSG','1274',0); INSERT INTO "usage" VALUES('EPSG','14658','vertical_crs','EPSG','9389','EPSG','4608','EPSG','1261'); INSERT INTO "vertical_crs" VALUES('EPSG','9390','EVRF2019 mean-tide height',NULL,'EPSG','6499','EPSG','1287',0); INSERT INTO "usage" VALUES('EPSG','14659','vertical_crs','EPSG','9390','EPSG','4608','EPSG','1262'); INSERT INTO "vertical_crs" VALUES('EPSG','9392','Mallorca height',NULL,'EPSG','6499','EPSG','1275',0); INSERT INTO "usage" VALUES('EPSG','14031','vertical_crs','EPSG','9392','EPSG','4602','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9393','Menorca height',NULL,'EPSG','6499','EPSG','1276',0); INSERT INTO "usage" VALUES('EPSG','14032','vertical_crs','EPSG','9393','EPSG','4603','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9394','Ibiza height',NULL,'EPSG','6499','EPSG','1277',0); INSERT INTO "usage" VALUES('EPSG','14033','vertical_crs','EPSG','9394','EPSG','4604','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9395','Lanzarote height',NULL,'EPSG','6499','EPSG','1278',0); INSERT INTO "usage" VALUES('EPSG','14034','vertical_crs','EPSG','9395','EPSG','4591','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9396','Fuerteventura height',NULL,'EPSG','6499','EPSG','1279',0); INSERT INTO "usage" VALUES('EPSG','14035','vertical_crs','EPSG','9396','EPSG','4592','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9397','Gran Canaria height',NULL,'EPSG','6499','EPSG','1280',0); INSERT INTO "usage" VALUES('EPSG','14036','vertical_crs','EPSG','9397','EPSG','4593','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9398','Tenerife height',NULL,'EPSG','6499','EPSG','1281',0); INSERT INTO "usage" VALUES('EPSG','14037','vertical_crs','EPSG','9398','EPSG','4594','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9399','La Gomera height',NULL,'EPSG','6499','EPSG','1282',0); INSERT INTO "usage" VALUES('EPSG','14038','vertical_crs','EPSG','9399','EPSG','4595','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9400','La Palma height',NULL,'EPSG','6499','EPSG','1283',0); INSERT INTO "usage" VALUES('EPSG','14039','vertical_crs','EPSG','9400','EPSG','4596','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9401','El Hierro height',NULL,'EPSG','6499','EPSG','1284',0); INSERT INTO "usage" VALUES('EPSG','14040','vertical_crs','EPSG','9401','EPSG','4597','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9402','Ceuta 2 height',NULL,'EPSG','6499','EPSG','1285',0); INSERT INTO "usage" VALUES('EPSG','14041','vertical_crs','EPSG','9402','EPSG','4590','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9451','BI height',NULL,'EPSG','6499','EPSG','1288',0); INSERT INTO "usage" VALUES('EPSG','14087','vertical_crs','EPSG','9451','EPSG','4606','EPSG','1026'); INSERT INTO "vertical_crs" VALUES('EPSG','9458','AVWS height',NULL,'EPSG','6499','EPSG','1292',0); INSERT INTO "usage" VALUES('EPSG','14231','vertical_crs','EPSG','9458','EPSG','4177','EPSG','1264'); INSERT INTO "vertical_crs" VALUES('EPSG','9471','INAGeoid2020 v1 height',NULL,'EPSG','6499','EPSG','1294',0); INSERT INTO "usage" VALUES('EPSG','14153','vertical_crs','EPSG','9471','EPSG','1122','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9650','Baltic 1986 height',NULL,'EPSG','6499','EPSG','1296',0); INSERT INTO "usage" VALUES('EPSG','15032','vertical_crs','EPSG','9650','EPSG','3293','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9651','EVRF2007-PL height',NULL,'EPSG','6499','EPSG','1297',0); INSERT INTO "usage" VALUES('EPSG','15034','vertical_crs','EPSG','9651','EPSG','3293','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9663','EH2000 height',NULL,'EPSG','6499','EPSG','1298',0); INSERT INTO "usage" VALUES('EPSG','14747','vertical_crs','EPSG','9663','EPSG','3246','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9666','LAS07 height',NULL,'EPSG','6499','EPSG','1299',0); INSERT INTO "usage" VALUES('EPSG','14754','vertical_crs','EPSG','9666','EPSG','3272','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9669','BGS2005 height',NULL,'EPSG','6499','EPSG','1300',0); INSERT INTO "usage" VALUES('EPSG','14770','vertical_crs','EPSG','9669','EPSG','3224','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9672','CD Norway depth',NULL,'EPSG','6498','EPSG','1301',0); INSERT INTO "usage" VALUES('EPSG','14776','vertical_crs','EPSG','9672','EPSG','4615','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','9675','Pago Pago 2020 height',NULL,'EPSG','6499','EPSG','1302',0); INSERT INTO "usage" VALUES('EPSG','14793','vertical_crs','EPSG','9675','EPSG','2288','EPSG','1026'); INSERT INTO "vertical_crs" VALUES('EPSG','9681','NVD 1992 height',NULL,'EPSG','6499','EPSG','1303',0); INSERT INTO "usage" VALUES('EPSG','14851','vertical_crs','EPSG','9681','EPSG','3217','EPSG','1181'); INSERT INTO "vertical_crs" VALUES('EPSG','9721','Catania 1965 height',NULL,'EPSG','6499','EPSG','1306',0); INSERT INTO "usage" VALUES('EPSG','15276','vertical_crs','EPSG','9721','EPSG','2340','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9722','Cagliari 1956 height',NULL,'EPSG','6499','EPSG','1307',0); INSERT INTO "usage" VALUES('EPSG','15278','vertical_crs','EPSG','9722','EPSG','2339','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','9923','GNTRANS height',NULL,'EPSG','6499','EPSG','1316',0); INSERT INTO "usage" VALUES('EPSG','17285','vertical_crs','EPSG','9923','EPSG','3339','EPSG','1141'); INSERT INTO "vertical_crs" VALUES('EPSG','9927','GNTRANS2016 height',NULL,'EPSG','6499','EPSG','1318',0); INSERT INTO "usage" VALUES('EPSG','17286','vertical_crs','EPSG','9927','EPSG','3339','EPSG','1141'); INSERT INTO "vertical_crs" VALUES('EPSG','10150','MSL UK & Ireland VORF08 depth',NULL,'EPSG','6498','EPSG','1330',0); INSERT INTO "usage" VALUES('EPSG','18584','vertical_crs','EPSG','10150','EPSG','4668','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10151','CD UK & Ireland VORF08 depth',NULL,'EPSG','6498','EPSG','1331',0); INSERT INTO "usage" VALUES('EPSG','18583','vertical_crs','EPSG','10151','EPSG','4668','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10190','NGA 2022 height',NULL,'EPSG','6499','EPSG','1354',0); INSERT INTO "usage" VALUES('EPSG','19483','vertical_crs','EPSG','10190','EPSG','3213','EPSG','1026'); INSERT INTO "vertical_crs" VALUES('EPSG','10349','ZH Portugal depth',NULL,'EPSG','6498','EPSG','1361',0); INSERT INTO "usage" VALUES('EPSG','20096','vertical_crs','EPSG','10349','EPSG','4738','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10352','Formentera height',NULL,'EPSG','6499','EPSG','1362',0); INSERT INTO "usage" VALUES('EPSG','19925','vertical_crs','EPSG','10352','EPSG','4739','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','10353','Alboran height',NULL,'EPSG','6499','EPSG','1363',0); INSERT INTO "usage" VALUES('EPSG','19926','vertical_crs','EPSG','10353','EPSG','4741','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','10354','Melilla height',NULL,'EPSG','6499','EPSG','1364',0); INSERT INTO "usage" VALUES('EPSG','19927','vertical_crs','EPSG','10354','EPSG','4740','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','10482','DVR90(2000) height',NULL,'EPSG','6499','EPSG','5206',0); INSERT INTO "usage" VALUES('EPSG','20427','vertical_crs','EPSG','10482','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','10483','DVR90(2002) height',NULL,'EPSG','6499','EPSG','1368',0); INSERT INTO "usage" VALUES('EPSG','20429','vertical_crs','EPSG','10483','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','10484','DVR90(2013) height',NULL,'EPSG','6499','EPSG','1369',0); INSERT INTO "usage" VALUES('EPSG','20428','vertical_crs','EPSG','10484','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','10485','DVR90(2023) height',NULL,'EPSG','6499','EPSG','1370',0); INSERT INTO "usage" VALUES('EPSG','20430','vertical_crs','EPSG','10485','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','10547','DKMSL(2022) depth',NULL,'EPSG','6498','EPSG','1372',0); INSERT INTO "usage" VALUES('EPSG','21020','vertical_crs','EPSG','10547','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10548','DKLAT(2022) depth',NULL,'EPSG','6498','EPSG','1373',0); INSERT INTO "usage" VALUES('EPSG','21019','vertical_crs','EPSG','10548','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10549','DKMSL(2023) depth',NULL,'EPSG','6498','EPSG','1374',0); INSERT INTO "usage" VALUES('EPSG','21018','vertical_crs','EPSG','10549','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10550','DKLAT(2023) depth',NULL,'EPSG','6498','EPSG','1375',0); INSERT INTO "usage" VALUES('EPSG','21017','vertical_crs','EPSG','10550','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10551','DKMSL depth ',NULL,'EPSG','6498','EPSG','1376',0); INSERT INTO "usage" VALUES('EPSG','21021','vertical_crs','EPSG','10551','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10552','DKLAT depth',NULL,'EPSG','6498','EPSG','1377',0); INSERT INTO "usage" VALUES('EPSG','21269','vertical_crs','EPSG','10552','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10565','GLLMSL(2022) height',NULL,'EPSG','6499','EPSG','1378',0); INSERT INTO "usage" VALUES('EPSG','21000','vertical_crs','EPSG','10565','EPSG','3119','EPSG','1142'); INSERT INTO "vertical_crs" VALUES('EPSG','10588','CGVD28(HTv2.0) height',NULL,'EPSG','6499','EPSG','1384',0); INSERT INTO "usage" VALUES('EPSG','21633','vertical_crs','EPSG','10588','EPSG','4778','EPSG','1132'); INSERT INTO "vertical_crs" VALUES('EPSG','10642','Saba height',NULL,'EPSG','6499','EPSG','1381',0); INSERT INTO "usage" VALUES('EPSG','21486','vertical_crs','EPSG','10642','EPSG','4757','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','10649','GLMSL(2023) depth',NULL,'EPSG','6498','EPSG','1387',0); INSERT INTO "usage" VALUES('EPSG','21472','vertical_crs','EPSG','10649','EPSG','4776','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10650','GLLAT(2023) depth',NULL,'EPSG','6498','EPSG','1388',0); INSERT INTO "usage" VALUES('EPSG','21473','vertical_crs','EPSG','10650','EPSG','4776','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','10678','BSCD2000 depth',NULL,'EPSG','6498','EPSG','1390',0); INSERT INTO "usage" VALUES('EPSG','21810','vertical_crs','EPSG','10678','EPSG','4779','EPSG','1291'); INSERT INTO "vertical_crs" VALUES('EPSG','10740','Sint Eustatius height',NULL,'EPSG','6499','EPSG','1395',0); INSERT INTO "usage" VALUES('EPSG','22288','vertical_crs','EPSG','10740','EPSG','4788','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','10763','Bonaire height',NULL,'EPSG','6499','EPSG','1398',0); INSERT INTO "usage" VALUES('EPSG','22175','vertical_crs','EPSG','10763','EPSG','3822','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','20000','SVD2006 height',NULL,'EPSG','6499','EPSG','1323',0); INSERT INTO "usage" VALUES('EPSG','17962','vertical_crs','EPSG','20000','EPSG','4058','EPSG','1180'); INSERT INTO "vertical_crs" VALUES('EPSG','20034','CGVD2013a(2002) height',NULL,'EPSG','6499','EPSG','1325',0); INSERT INTO "usage" VALUES('EPSG','18311','vertical_crs','EPSG','20034','EPSG','1061','EPSG','1180'); INSERT INTO "vertical_crs" VALUES('EPSG','20035','CGVD2013a(1997) height',NULL,'EPSG','6499','EPSG','1326',0); INSERT INTO "usage" VALUES('EPSG','18313','vertical_crs','EPSG','20035','EPSG','1061','EPSG','1180'); INSERT INTO "vertical_crs" VALUES('EPSG','20036','INAGeoid2020 v2 height',NULL,'EPSG','6499','EPSG','1328',0); INSERT INTO "usage" VALUES('EPSG','18444','vertical_crs','EPSG','20036','EPSG','1122','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','5336','Black Sea depth',NULL,'EPSG','6498','EPSG','5134',0); INSERT INTO "usage" VALUES('EPSG','3936','vertical_crs','EPSG','5336','EPSG','1102','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5612','Baltic 1977 depth',NULL,'EPSG','6498','EPSG','5105',0); INSERT INTO "usage" VALUES('EPSG','4081','vertical_crs','EPSG','5612','EPSG','2423','EPSG','1136'); INSERT INTO "vertical_crs" VALUES('EPSG','5706','Caspian depth',NULL,'EPSG','6498','EPSG','5106',0); INSERT INTO "usage" VALUES('EPSG','4149','vertical_crs','EPSG','5706','EPSG','1291','EPSG','1198'); INSERT INTO "vertical_crs" VALUES('EPSG','5715','MSL depth',NULL,'EPSG','6498','EPSG','5100',0); INSERT INTO "usage" VALUES('EPSG','4158','vertical_crs','EPSG','5715','EPSG','1262','EPSG','1199'); INSERT INTO "vertical_crs" VALUES('EPSG','5734','AIOC95 depth',NULL,'EPSG','6498','EPSG','5133',0); INSERT INTO "usage" VALUES('EPSG','4177','vertical_crs','EPSG','5734','EPSG','2592','EPSG','1136'); INSERT INTO "vertical_crs" VALUES('EPSG','5789','KOC WD depth',NULL,'EPSG','6498','EPSG','5187',0); INSERT INTO "usage" VALUES('EPSG','4232','vertical_crs','EPSG','5789','EPSG','3267','EPSG','1205'); INSERT INTO "vertical_crs" VALUES('EPSG','5831','Instantaneous Water Level depth',NULL,'EPSG','6498','EPSG','5113',0); INSERT INTO "usage" VALUES('EPSG','4269','vertical_crs','EPSG','5831','EPSG','1262','EPSG','1200'); INSERT INTO "vertical_crs" VALUES('EPSG','6357','NAVD88 depth',NULL,'EPSG','6498','EPSG','5103',0); INSERT INTO "usage" VALUES('EPSG','4591','vertical_crs','EPSG','6357','EPSG','4161','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6359','NGVD29 depth (ftUS)',NULL,'EPSG','1043','EPSG','5102',0); INSERT INTO "usage" VALUES('EPSG','4593','vertical_crs','EPSG','6359','EPSG','1323','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','6360','NAVD88 height (ftUS)',NULL,'EPSG','6497','EPSG','5103',0); INSERT INTO "usage" VALUES('EPSG','4594','vertical_crs','EPSG','6360','EPSG','3664','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','7962','Poolbeg height (m)',NULL,'EPSG','6499','EPSG','5152',0); INSERT INTO "usage" VALUES('EPSG','5568','vertical_crs','EPSG','7962','EPSG','1305','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','7968','NGVD29 height (m)',NULL,'EPSG','6499','EPSG','5102',0); INSERT INTO "usage" VALUES('EPSG','5569','vertical_crs','EPSG','7968','EPSG','1323','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','7976','HKPD depth',NULL,'EPSG','6498','EPSG','5135',0); INSERT INTO "usage" VALUES('EPSG','5570','vertical_crs','EPSG','7976','EPSG','3334','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','8050','MSL height (ft)',NULL,'EPSG','1030','EPSG','5100',0); INSERT INTO "usage" VALUES('EPSG','5600','vertical_crs','EPSG','8050','EPSG','1262','EPSG','1199'); INSERT INTO "vertical_crs" VALUES('EPSG','8052','MSL height (ftUS)',NULL,'EPSG','6497','EPSG','5100',0); INSERT INTO "usage" VALUES('EPSG','5602','vertical_crs','EPSG','8052','EPSG','1245','EPSG','1199'); INSERT INTO "vertical_crs" VALUES('EPSG','8228','NAVD88 height (ft)',NULL,'EPSG','1030','EPSG','5103',0); INSERT INTO "usage" VALUES('EPSG','5736','vertical_crs','EPSG','8228','EPSG','4464','EPSG','1144'); INSERT INTO "vertical_crs" VALUES('EPSG','8358','Baltic 1957 depth',NULL,'EPSG','6498','EPSG','1202',0); INSERT INTO "usage" VALUES('EPSG','5804','vertical_crs','EPSG','8358','EPSG','1306','EPSG','1178'); INSERT INTO "vertical_crs" VALUES('EPSG','10364','Cascais depth',NULL,'EPSG','6498','EPSG','5178',0); INSERT INTO "usage" VALUES('EPSG','20097','vertical_crs','EPSG','10364','EPSG','1294','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10370','Cais da Pontinha depth',NULL,'EPSG','6498','EPSG','1101',0); INSERT INTO "usage" VALUES('EPSG','19996','vertical_crs','EPSG','10370','EPSG','4125','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10371','Cais da Vila depth',NULL,'EPSG','6498','EPSG','1102',0); INSERT INTO "usage" VALUES('EPSG','19997','vertical_crs','EPSG','10371','EPSG','3680','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10372','Santa Cruz das Flores depth',NULL,'EPSG','6498','EPSG','1108',0); INSERT INTO "usage" VALUES('EPSG','19981','vertical_crs','EPSG','10372','EPSG','3684','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10373','Horta depth',NULL,'EPSG','6498','EPSG','1104',0); INSERT INTO "usage" VALUES('EPSG','19982','vertical_crs','EPSG','10373','EPSG','2873','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10374','Cais da Madalena depth',NULL,'EPSG','6498','EPSG','1105',0); INSERT INTO "usage" VALUES('EPSG','19983','vertical_crs','EPSG','10374','EPSG','2874','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10375','Cais das Velas depth',NULL,'EPSG','6498','EPSG','1103',0); INSERT INTO "usage" VALUES('EPSG','19984','vertical_crs','EPSG','10375','EPSG','2875','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10376','Santa Cruz da Graciosa depth',NULL,'EPSG','6498','EPSG','1106',0); INSERT INTO "usage" VALUES('EPSG','19985','vertical_crs','EPSG','10376','EPSG','3681','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10377','Cais da Figueirinha depth',NULL,'EPSG','6498','EPSG','1107',0); INSERT INTO "usage" VALUES('EPSG','19995','vertical_crs','EPSG','10377','EPSG','2872','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10378','Ponta Delgada depth',NULL,'EPSG','6498','EPSG','1110',0); INSERT INTO "usage" VALUES('EPSG','19987','vertical_crs','EPSG','10378','EPSG','2871','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','10379','Cais da Vila do Porto depth',NULL,'EPSG','6498','EPSG','1109',0); INSERT INTO "usage" VALUES('EPSG','19988','vertical_crs','EPSG','10379','EPSG','4126','EPSG','1203'); INSERT INTO "vertical_crs" VALUES('EPSG','5614','KOC WD depth (ft)',NULL,'EPSG','6495','EPSG','5187',0); INSERT INTO "usage" VALUES('EPSG','4083','vertical_crs','EPSG','5614','EPSG','3267','EPSG','1205'); INSERT INTO "vertical_crs" VALUES('EPSG','6358','NAVD88 depth (ftUS)',NULL,'EPSG','1043','EPSG','5103',0); INSERT INTO "usage" VALUES('EPSG','4592','vertical_crs','EPSG','6358','EPSG','3664','EPSG','1179'); INSERT INTO "vertical_crs" VALUES('EPSG','8051','MSL depth (ft)',NULL,'EPSG','6495','EPSG','5100',0); INSERT INTO "usage" VALUES('EPSG','5601','vertical_crs','EPSG','8051','EPSG','1262','EPSG','1199'); INSERT INTO "vertical_crs" VALUES('EPSG','8053','MSL depth (ftUS)',NULL,'EPSG','1043','EPSG','5100',0); INSERT INTO "usage" VALUES('EPSG','5603','vertical_crs','EPSG','8053','EPSG','1245','EPSG','1199'); proj-9.6.0/data/sql/vertical_datum.sql000664 001754 001755 00000157416 14764566077 017673 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "vertical_datum" VALUES('EPSG','1027','EGM2008 geoid',NULL,'2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13079','vertical_datum','EPSG','1027','EPSG','1262','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','1028','Fao 1979',NULL,'1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13080','vertical_datum','EPSG','1028','EPSG','3625','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1030','N2000',NULL,'2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13082','vertical_datum','EPSG','1030','EPSG','3333','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1039','New Zealand Vertical Datum 2009',NULL,'2009-09-14',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13091','vertical_datum','EPSG','1039','EPSG','1175','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1040','Dunedin-Bluff 1960',NULL,'1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13092','vertical_datum','EPSG','1040','EPSG','3806','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1049','Korean Vertical Datum 1964',NULL,'1963-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13101','vertical_datum','EPSG','1049','EPSG','3266','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1050','Trieste',NULL,'1875-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13102','vertical_datum','EPSG','1050','EPSG','2370','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1051','Genoa 1942',NULL,'1942-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13103','vertical_datum','EPSG','1051','EPSG','3736','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1054','Sri Lanka Vertical Datum',NULL,'1932-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13106','vertical_datum','EPSG','1054','EPSG','3310','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1059','Faroe Islands Vertical Reference 2009',NULL,'2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13111','vertical_datum','EPSG','1059','EPSG','3248','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','1079','Fehmarnbelt Vertical Reference 2010',NULL,'2010-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13131','vertical_datum','EPSG','1079','EPSG','3890','EPSG','1139'); INSERT INTO "vertical_datum" VALUES('EPSG','1080','Lowest Astronomical Tide',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13132','vertical_datum','EPSG','1080','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1082','Highest Astronomical Tide',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13134','vertical_datum','EPSG','1082','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1083','Lower Low Water Large Tide',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13135','vertical_datum','EPSG','1083','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1084','Higher High Water Large Tide',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13136','vertical_datum','EPSG','1084','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1085','Indian Spring Low Water',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13137','vertical_datum','EPSG','1085','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1086','Mean Lower Low Water Spring Tides',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13138','vertical_datum','EPSG','1086','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1087','Mean Low Water Spring Tides',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13139','vertical_datum','EPSG','1087','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1088','Mean High Water Spring Tides',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13140','vertical_datum','EPSG','1088','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1089','Mean Lower Low Water',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13141','vertical_datum','EPSG','1089','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1090','Mean Higher High Water',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13142','vertical_datum','EPSG','1090','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1091','Mean Low Water',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13143','vertical_datum','EPSG','1091','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1092','Mean High Water',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13144','vertical_datum','EPSG','1092','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1093','Low Water',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13145','vertical_datum','EPSG','1093','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1094','High Water',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13146','vertical_datum','EPSG','1094','EPSG','1262','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1096','Norway Normal Null 2000',NULL,'2000-01-01',2000.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13148','vertical_datum','EPSG','1096','EPSG','1352','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1097','Grand Cayman Vertical Datum 1954',NULL,'1954-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13149','vertical_datum','EPSG','1097','EPSG','3185','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1098','Little Cayman Vertical Datum 1961',NULL,'1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13150','vertical_datum','EPSG','1098','EPSG','4121','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1099','Cayman Brac Vertical Datum 1961',NULL,'1961-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13151','vertical_datum','EPSG','1099','EPSG','3207','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1101','Cais da Pontinha',NULL,'1913-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13153','vertical_datum','EPSG','1101','EPSG','4125','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1102','Cais da Vila',NULL,'1936-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13154','vertical_datum','EPSG','1102','EPSG','3680','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1103','Cais das Velas',NULL,'1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13155','vertical_datum','EPSG','1103','EPSG','2875','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1104','Horta',NULL,'1935-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13156','vertical_datum','EPSG','1104','EPSG','2873','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1105','Cais da Madalena',NULL,'1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13157','vertical_datum','EPSG','1105','EPSG','2874','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1106','Santa Cruz da Graciosa',NULL,'1938-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13158','vertical_datum','EPSG','1106','EPSG','3681','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1107','Cais da Figueirinha',NULL,'1951-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13159','vertical_datum','EPSG','1107','EPSG','2872','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1108','Santa Cruz das Flores',NULL,'1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13160','vertical_datum','EPSG','1108','EPSG','1344','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1109','Cais da Vila do Porto',NULL,'1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13161','vertical_datum','EPSG','1109','EPSG','4126','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1110','Ponta Delgada',NULL,'1991-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13162','vertical_datum','EPSG','1110','EPSG','2871','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1119','Northern Marianas Vertical Datum of 2003',NULL,'2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13171','vertical_datum','EPSG','1119','EPSG','4171','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1121','Tutuila Vertical Datum of 1962',NULL,'1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13173','vertical_datum','EPSG','1121','EPSG','2288','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1122','Guam Vertical Datum of 1963',NULL,'1963-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13174','vertical_datum','EPSG','1122','EPSG','3255','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1123','Puerto Rico Vertical Datum of 2002',NULL,'2012-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13175','vertical_datum','EPSG','1123','EPSG','3294','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1124','Virgin Islands Vertical Datum of 2009',NULL,'2011-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13176','vertical_datum','EPSG','1124','EPSG','3330','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1125','American Samoa Vertical Datum of 2002',NULL,'2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13177','vertical_datum','EPSG','1125','EPSG','2288','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1126','Guam Vertical Datum of 2004',NULL,'2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13178','vertical_datum','EPSG','1126','EPSG','3255','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1127','Canadian Geodetic Vertical Datum of 2013 (CGG2013)',NULL,'2013-11-28',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18090','vertical_datum','EPSG','1127','EPSG','1061','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1129','Japanese Standard Levelling Datum 1972',NULL,'1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13181','vertical_datum','EPSG','1129','EPSG','4168','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1130','Japanese Geodetic Datum 2000 (vertical)',NULL,'2002-04-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13182','vertical_datum','EPSG','1130','EPSG','3263','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1131','Japanese Geodetic Datum 2011 (vertical)',NULL,'2011-10-21',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13183','vertical_datum','EPSG','1131','EPSG','3263','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1140','Singapore Height Datum',NULL,'2009-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13192','vertical_datum','EPSG','1140','EPSG','1210','EPSG','1144'); INSERT INTO "vertical_datum" VALUES('EPSG','1146','Ras Ghumays',NULL,'1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13198','vertical_datum','EPSG','1146','EPSG','4225','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1148','Famagusta 1960',NULL,'1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13200','vertical_datum','EPSG','1148','EPSG','3236','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','1149','PNG08',NULL,'2011-10-14',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13201','vertical_datum','EPSG','1149','EPSG','4384','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','1150','Kumul 34',NULL,'2005-06-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13202','vertical_datum','EPSG','1150','EPSG','4013','EPSG','1029'); INSERT INTO "vertical_datum" VALUES('EPSG','1151','Kiunga',NULL,'1990-10-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13203','vertical_datum','EPSG','1151','EPSG','4383','EPSG','1029'); INSERT INTO "vertical_datum" VALUES('EPSG','1161','Deutsches Haupthoehennetz 1912',NULL,'1912-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13213','vertical_datum','EPSG','1161','EPSG','3339','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1162','Latvian Height System 2000',NULL,'2005-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13214','vertical_datum','EPSG','1162','EPSG','3268','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1164','Ordnance Datum Newlyn (Offshore)',NULL,'2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13216','vertical_datum','EPSG','1164','EPSG','4391','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','1169','New Zealand Vertical Datum 2016',NULL,'2016-06-27',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13221','vertical_datum','EPSG','1169','EPSG','1175','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1170','Deutsches Haupthoehennetz 2016',NULL,'2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13222','vertical_datum','EPSG','1170','EPSG','1103','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1171','Port Moresby 1996',NULL,'1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13223','vertical_datum','EPSG','1171','EPSG','4425','EPSG','1029'); INSERT INTO "vertical_datum" VALUES('EPSG','1172','Port Moresby 2008',NULL,'2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13224','vertical_datum','EPSG','1172','EPSG','4425','EPSG','1029'); INSERT INTO "vertical_datum" VALUES('EPSG','1175','Jamestown 1971',NULL,'1971-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13227','vertical_datum','EPSG','1175','EPSG','3183','EPSG','1153'); INSERT INTO "vertical_datum" VALUES('EPSG','1176','St. Helena Tritan Vertical Datum 2011',NULL,'2011-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13228','vertical_datum','EPSG','1176','EPSG','3183','EPSG','1029'); INSERT INTO "vertical_datum" VALUES('EPSG','1177','St. Helena Vertical Datum 2015',NULL,'2015-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13229','vertical_datum','EPSG','1177','EPSG','3183','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1190','Landshaedarkerfi Islands 2004',NULL,'2004-08-07',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13242','vertical_datum','EPSG','1190','EPSG','4662','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1199','Greenland Vertical Reference 2000',NULL,'2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13251','vertical_datum','EPSG','1199','EPSG','4461','EPSG','1153'); INSERT INTO "vertical_datum" VALUES('EPSG','1200','Greenland Vertical Reference 2016',NULL,'2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13252','vertical_datum','EPSG','1200','EPSG','4454','EPSG','1153'); INSERT INTO "vertical_datum" VALUES('EPSG','1202','Baltic 1957',NULL,'1957-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13254','vertical_datum','EPSG','1202','EPSG','1306','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1205','EPSG example wellbore vertical datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13257','vertical_datum','EPSG','1205','EPSG','4393','EPSG','1226'); INSERT INTO "vertical_datum" VALUES('EPSG','1210','Macao Height Datum',NULL,'1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13262','vertical_datum','EPSG','1210','EPSG','1147','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1213','Helsinki 1943',NULL,'1943-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13265','vertical_datum','EPSG','1213','EPSG','4522','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1215','Slovenian Vertical System 2010',NULL,'2010-10-10',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13267','vertical_datum','EPSG','1215','EPSG','3307','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1216','Serbian Vertical Reference System 2012',NULL,'2012-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13268','vertical_datum','EPSG','1216','EPSG','4543','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1219','MOMRA Vertical Geodetic Control',NULL,'1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13271','vertical_datum','EPSG','1219','EPSG','3303','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1224','Taiwan Vertical Datum 2001',NULL,'2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13276','vertical_datum','EPSG','1224','EPSG','3982','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1226','Datum Altimetrico de Costa Rica 1952',NULL,'1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13278','vertical_datum','EPSG','1226','EPSG','3232','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1250','IGN 2008 LD',NULL,'2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13302','vertical_datum','EPSG','1250','EPSG','2893','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1255','Nivellement General de Nouvelle Caledonie 2008',NULL,'2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13979','vertical_datum','EPSG','1255','EPSG','3430','EPSG','1026'); INSERT INTO "vertical_datum" VALUES('EPSG','1256','Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010',NULL,'2015-12-05',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','13972','vertical_datum','EPSG','1256','EPSG','1061','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1260','Sistema de Referencia Vertical Nacional 2016',NULL,'2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13893','vertical_datum','EPSG','1260','EPSG','4573','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1261','European Vertical Reference Frame 2000 Austria',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13894','vertical_datum','EPSG','1261','EPSG','1037','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','1262','South Africa Land Levelling Datum',NULL,'2010-05-11',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13895','vertical_datum','EPSG','1262','EPSG','3309','EPSG','1181'); INSERT INTO "vertical_datum" VALUES('EPSG','1265','HS2 Vertical Reference Frame',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14027','vertical_datum','EPSG','1265','EPSG','4582','EPSG','1260'); INSERT INTO "vertical_datum" VALUES('EPSG','1267','Wiener Null',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13981','vertical_datum','EPSG','1267','EPSG','4585','EPSG','1248'); INSERT INTO "vertical_datum" VALUES('EPSG','1269','Kingdom of Saudi Arabia Vertical Reference Frame Jeddah 2014',NULL,'2014-10-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13897','vertical_datum','EPSG','1269','EPSG','3303','EPSG','1181'); INSERT INTO "vertical_datum" VALUES('EPSG','1270','Mean Sea Level Netherlands',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14119','vertical_datum','EPSG','1270','EPSG','4742','EPSG','1265'); INSERT INTO "vertical_datum" VALUES('EPSG','1274','European Vertical Reference Frame 2019',NULL,'2020-09-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14738','vertical_datum','EPSG','1274','EPSG','4608','EPSG','1261'); INSERT INTO "vertical_datum" VALUES('EPSG','1275','Mallorca',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14014','vertical_datum','EPSG','1275','EPSG','4602','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1276','Menorca',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14015','vertical_datum','EPSG','1276','EPSG','4603','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1277','Ibiza',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14016','vertical_datum','EPSG','1277','EPSG','4604','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1278','Lanzarote',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14017','vertical_datum','EPSG','1278','EPSG','4591','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1279','Fuerteventura',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14018','vertical_datum','EPSG','1279','EPSG','4592','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1280','Gran Canaria',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14019','vertical_datum','EPSG','1280','EPSG','4593','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1281','Tenerife',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14020','vertical_datum','EPSG','1281','EPSG','4594','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1282','La Gomera',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14021','vertical_datum','EPSG','1282','EPSG','4595','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1283','La Palma',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14022','vertical_datum','EPSG','1283','EPSG','4596','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1284','El Hierro',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14023','vertical_datum','EPSG','1284','EPSG','4597','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1285','Ceuta 2',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14024','vertical_datum','EPSG','1285','EPSG','4590','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1287','European Vertical Reference Frame 2019 mean tide',NULL,'2020-09-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14739','vertical_datum','EPSG','1287','EPSG','4608','EPSG','1262'); INSERT INTO "vertical_datum" VALUES('EPSG','1290','Lowest Astronomical Tide Netherlands',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14120','vertical_datum','EPSG','1290','EPSG','4742','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1292','Australian Vertical Working Surface',NULL,'2020-07-14',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14134','vertical_datum','EPSG','1292','EPSG','4177','EPSG','1264'); INSERT INTO "vertical_datum" VALUES('EPSG','1294','Indonesian Geoid 2020 version 1',NULL,'2020-06-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14149','vertical_datum','EPSG','1294','EPSG','1122','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1296','Baltic 1986',NULL,'1986-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14975','vertical_datum','EPSG','1296','EPSG','3293','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1297','European Vertical Reference Frame 2007 Poland',NULL,'2019-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15033','vertical_datum','EPSG','1297','EPSG','3293','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1298','Estonian Height System 2000',NULL,'2005-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14743','vertical_datum','EPSG','1298','EPSG','3246','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1299','Lithuanian Height System 2007',NULL,'2005-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14758','vertical_datum','EPSG','1299','EPSG','3272','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1300','Bulgarian Height System 2005',NULL,'2005-07-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14768','vertical_datum','EPSG','1300','EPSG','3224','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1301','Norwegian Chart Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14864','vertical_datum','EPSG','1301','EPSG','4615','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1302','Local Tidal Datum at Pago Pago 2020',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14795','vertical_datum','EPSG','1302','EPSG','2288','EPSG','1026'); INSERT INTO "vertical_datum" VALUES('EPSG','1303','National Vertical Datum 1992',NULL,'1994-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14852','vertical_datum','EPSG','1303','EPSG','3217','EPSG','1181'); INSERT INTO "vertical_datum" VALUES('EPSG','1306','Catania 1965',NULL,'1965-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15330','vertical_datum','EPSG','1306','EPSG','2340','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1307','Cagliari 1956',NULL,'1956-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','15331','vertical_datum','EPSG','1307','EPSG','2339','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1316','GNTRANS',NULL,'2003-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17277','vertical_datum','EPSG','1316','EPSG','3339','EPSG','1141'); INSERT INTO "vertical_datum" VALUES('EPSG','1318','GNTRANS2016',NULL,'2016-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17278','vertical_datum','EPSG','1318','EPSG','3339','EPSG','1141'); INSERT INTO "vertical_datum" VALUES('EPSG','1323','Svalbard vertical datum 2006',NULL,'2006-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','17963','vertical_datum','EPSG','1323','EPSG','4058','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1325','Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002',NULL,'2019-02-01',NULL,NULL,NULL,2002.0,0); INSERT INTO "usage" VALUES('EPSG','18301','vertical_datum','EPSG','1325','EPSG','1061','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1326','Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997',NULL,'2019-02-01',NULL,NULL,NULL,1997.0,0); INSERT INTO "usage" VALUES('EPSG','18302','vertical_datum','EPSG','1326','EPSG','1061','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','1328','Indonesian Geoid 2020 version 2',NULL,'2022-06-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18439','vertical_datum','EPSG','1328','EPSG','1122','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1330','Mean Sea Level UK & Ireland VORF08',NULL,'2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18593','vertical_datum','EPSG','1330','EPSG','4668','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1331','Chart Datum UK & Ireland VORF08',NULL,'2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','18581','vertical_datum','EPSG','1331','EPSG','4668','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1354','Nivellement General de l''Algerie 2022',NULL,'2022-11-30',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19359','vertical_datum','EPSG','1354','EPSG','3213','EPSG','1026'); INSERT INTO "vertical_datum" VALUES('EPSG','1361','Chart Datum Portugal ',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20092','vertical_datum','EPSG','1361','EPSG','4738','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1362','Formentera',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19908','vertical_datum','EPSG','1362','EPSG','4739','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1363','Alboran',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19909','vertical_datum','EPSG','1363','EPSG','4741','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1364','Melilla',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19910','vertical_datum','EPSG','1364','EPSG','4740','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1368','Dansk Vertikal Reference 1990 (2002)',NULL,'2002-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20431','vertical_datum','EPSG','1368','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','1369','Dansk Vertikal Reference 1990 (2013)',NULL,'2013-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20432','vertical_datum','EPSG','1369','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','1370','Dansk Vertikal Reference 1990 (2023)',NULL,'2023-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20433','vertical_datum','EPSG','1370','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','1372','Denmark Mean Sea Level (2022)',NULL,'2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21004','vertical_datum','EPSG','1372','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1373','Denmark Lowest Astronomical Tide (2022)',NULL,'2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21005','vertical_datum','EPSG','1373','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1374','Denmark Mean Sea Level (2023)',NULL,'2024-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21267','vertical_datum','EPSG','1374','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1375','Denmark Lowest Astronomic Tide (2023)',NULL,'2024-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21041','vertical_datum','EPSG','1375','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1378','Greenland Local Mean Sea Level (2022)',NULL,'2022-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20999','vertical_datum','EPSG','1378','EPSG','3119','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','1381','Saba Vertical Datum',NULL,'2023-04-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21862','vertical_datum','EPSG','1381','EPSG','4757','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1384','Canadian Geodetic Vertical Datum of 1928 (Height Transformation version 2.0)',NULL,'2001-08-15',NULL,NULL,NULL,1997.0,0); INSERT INTO "usage" VALUES('EPSG','21632','vertical_datum','EPSG','1384','EPSG','4778','EPSG','1132'); INSERT INTO "vertical_datum" VALUES('EPSG','1387','Greenland Mean Sea Level (2023)',NULL,'2024-06-18',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21471','vertical_datum','EPSG','1387','EPSG','4776','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1388','Greenland Lowest Astronomic Tide (2023)',NULL,'2024-06-04',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21470','vertical_datum','EPSG','1388','EPSG','4776','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1390','Baltic Sea Chart Datum 2000',NULL,'2023-11-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21819','vertical_datum','EPSG','1390','EPSG','4779','EPSG','1291'); INSERT INTO "vertical_datum" VALUES('EPSG','1395','Sint Eustatius Vertical Datum',NULL,'2023-04-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22281','vertical_datum','EPSG','1395','EPSG','4788','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','1398','Bonaire Vertical Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','22174','vertical_datum','EPSG','1398','EPSG','3822','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5100','Mean Sea Level',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13307','vertical_datum','EPSG','5100','EPSG','1262','EPSG','1199'); INSERT INTO "vertical_datum" VALUES('EPSG','5101','Ordnance Datum Newlyn',NULL,'1956-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13308','vertical_datum','EPSG','5101','EPSG','2792','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5102','National Geodetic Vertical Datum 1929',NULL,'1929-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13309','vertical_datum','EPSG','5102','EPSG','1323','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5103','North American Vertical Datum 1988',NULL,'1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13310','vertical_datum','EPSG','5103','EPSG','4161','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5104','Yellow Sea 1956',NULL,'1956-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13311','vertical_datum','EPSG','5104','EPSG','3228','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5105','Baltic 1977',NULL,'1977-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13312','vertical_datum','EPSG','5105','EPSG','2423','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5106','Caspian Sea',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13313','vertical_datum','EPSG','5106','EPSG','1291','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','5107','Nivellement general de la France',NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','13314','vertical_datum','EPSG','5107','EPSG','1326','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5109','Normaal Amsterdams Peil',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13315','vertical_datum','EPSG','5109','EPSG','1172','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5110','Ostend',NULL,'1981-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13316','vertical_datum','EPSG','5110','EPSG','1347','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5111','Australian Height Datum',NULL,'1971-05-05',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13317','vertical_datum','EPSG','5111','EPSG','4493','EPSG','1263'); INSERT INTO "vertical_datum" VALUES('EPSG','5112','Australian Height Datum (Tasmania)',NULL,'1972-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13318','vertical_datum','EPSG','5112','EPSG','2947','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5113','Instantaneous Water Level',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13319','vertical_datum','EPSG','5113','EPSG','1262','EPSG','1200'); INSERT INTO "vertical_datum" VALUES('EPSG','5114','Canadian Geodetic Vertical Datum of 1928',NULL,'1935-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13320','vertical_datum','EPSG','5114','EPSG','1289','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5115','Piraeus Harbour 1986',NULL,'1986-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13321','vertical_datum','EPSG','5115','EPSG','3254','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5116','Helsinki 1960',NULL,'1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13322','vertical_datum','EPSG','5116','EPSG','3333','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5117','Rikets hojdsystem 1970',NULL,'1970-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13323','vertical_datum','EPSG','5117','EPSG','3313','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5118','Nivellement General de la France - Lallemand',NULL,'1897-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13324','vertical_datum','EPSG','5118','EPSG','1326','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5119','Nivellement General de la France - IGN69',NULL,'1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13325','vertical_datum','EPSG','5119','EPSG','1326','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5120','Nivellement General de la France - IGN78',NULL,'1978-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13326','vertical_datum','EPSG','5120','EPSG','1327','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5121','Maputo',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13327','vertical_datum','EPSG','5121','EPSG','3281','EPSG','1153'); INSERT INTO "vertical_datum" VALUES('EPSG','5122','Japanese Standard Levelling Datum 1969',NULL,'1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13328','vertical_datum','EPSG','5122','EPSG','4166','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5123','PDO Height Datum 1993',NULL,'1993-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13329','vertical_datum','EPSG','5123','EPSG','3288','EPSG','1216'); INSERT INTO "vertical_datum" VALUES('EPSG','5124','Fahud Height Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13330','vertical_datum','EPSG','5124','EPSG','4009','EPSG','1216'); INSERT INTO "vertical_datum" VALUES('EPSG','5125','Ha Tien 1960',NULL,'1960-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13331','vertical_datum','EPSG','5125','EPSG','1302','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5126','Hon Dau 1992',NULL,'1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13332','vertical_datum','EPSG','5126','EPSG','4015','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5127','Landesnivellement 1902',NULL,'1902-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13333','vertical_datum','EPSG','5127','EPSG','1286','EPSG','1091'); INSERT INTO "vertical_datum" VALUES('EPSG','5128','Landeshohennetz 1995',NULL,'1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13334','vertical_datum','EPSG','5128','EPSG','1286','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','5129','European Vertical Reference Frame 2000',NULL,'2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13335','vertical_datum','EPSG','5129','EPSG','1299','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','5130','Malin Head',NULL,'1970-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13336','vertical_datum','EPSG','5130','EPSG','1305','EPSG','1153'); INSERT INTO "vertical_datum" VALUES('EPSG','5131','Belfast Lough',NULL,'1957-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13337','vertical_datum','EPSG','5131','EPSG','2530','EPSG','1209'); INSERT INTO "vertical_datum" VALUES('EPSG','5132','Dansk Normal Nul',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13338','vertical_datum','EPSG','5132','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','5133','AIOC 1995',NULL,'1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13339','vertical_datum','EPSG','5133','EPSG','2592','EPSG','1136'); INSERT INTO "vertical_datum" VALUES('EPSG','5134','Black Sea',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13340','vertical_datum','EPSG','5134','EPSG','1102','EPSG','1201'); INSERT INTO "vertical_datum" VALUES('EPSG','5135','Hong Kong Principal Datum',NULL,'1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13341','vertical_datum','EPSG','5135','EPSG','3334','EPSG','1184'); INSERT INTO "vertical_datum" VALUES('EPSG','5136','Hong Kong Chart Datum',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13342','vertical_datum','EPSG','5136','EPSG','3335','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','5137','Yellow Sea 1985',NULL,'1985-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13343','vertical_datum','EPSG','5137','EPSG','3228','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5138','Ordnance Datum Newlyn (Orkney Isles)',NULL,'1956-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13344','vertical_datum','EPSG','5138','EPSG','2793','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5139','Fair Isle',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13345','vertical_datum','EPSG','5139','EPSG','2794','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5140','Lerwick',NULL,'1979-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13346','vertical_datum','EPSG','5140','EPSG','2795','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5141','Foula',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13347','vertical_datum','EPSG','5141','EPSG','2796','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5142','Sule Skerry',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13348','vertical_datum','EPSG','5142','EPSG','2797','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5143','North Rona',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13349','vertical_datum','EPSG','5143','EPSG','2798','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5144','Stornoway',NULL,'1977-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13350','vertical_datum','EPSG','5144','EPSG','2799','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5145','St. Kilda',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13351','vertical_datum','EPSG','5145','EPSG','2800','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5146','Flannan Isles',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13352','vertical_datum','EPSG','5146','EPSG','2801','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5147','St. Marys',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13353','vertical_datum','EPSG','5147','EPSG','2802','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5148','Douglas',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13354','vertical_datum','EPSG','5148','EPSG','2803','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5149','Fao',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13355','vertical_datum','EPSG','5149','EPSG','3390','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5150','Bandar Abbas',NULL,'2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13356','vertical_datum','EPSG','5150','EPSG','3336','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5151','Nivellement General de Nouvelle Caledonie',NULL,'1969-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13357','vertical_datum','EPSG','5151','EPSG','2822','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5152','Poolbeg',NULL,'1837-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13358','vertical_datum','EPSG','5152','EPSG','1305','EPSG','1153'); INSERT INTO "vertical_datum" VALUES('EPSG','5153','Nivellement General Guyanais 1977',NULL,'1977-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13359','vertical_datum','EPSG','5153','EPSG','3146','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5154','Martinique 1987',NULL,'1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13360','vertical_datum','EPSG','5154','EPSG','3276','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5155','Guadeloupe 1988',NULL,'1988-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13361','vertical_datum','EPSG','5155','EPSG','2892','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5156','Reunion 1989',NULL,'1989-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13362','vertical_datum','EPSG','5156','EPSG','3337','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5157','Auckland 1946',NULL,'1945-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13363','vertical_datum','EPSG','5157','EPSG','3764','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5158','Bluff 1955',NULL,'1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13364','vertical_datum','EPSG','5158','EPSG','3801','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5159','Dunedin 1958',NULL,'1958-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13365','vertical_datum','EPSG','5159','EPSG','3803','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5160','Gisborne 1926',NULL,'1926-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13366','vertical_datum','EPSG','5160','EPSG','3771','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5161','Lyttelton 1937',NULL,'1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13367','vertical_datum','EPSG','5161','EPSG','3804','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5162','Moturiki 1953',NULL,'1953-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13368','vertical_datum','EPSG','5162','EPSG','3768','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5163','Napier 1962',NULL,'1962-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13369','vertical_datum','EPSG','5163','EPSG','3772','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5164','Nelson 1955',NULL,'1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13370','vertical_datum','EPSG','5164','EPSG','3802','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5165','One Tree Point 1964',NULL,'1964-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13371','vertical_datum','EPSG','5165','EPSG','3762','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5166','Tararu 1952',NULL,'1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13372','vertical_datum','EPSG','5166','EPSG','3818','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5167','Taranaki 1970',NULL,'1970-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13373','vertical_datum','EPSG','5167','EPSG','3769','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5168','Wellington 1953',NULL,'1953-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13374','vertical_datum','EPSG','5168','EPSG','3773','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5169','Waitangi (Chatham Island) 1959',NULL,'1959-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13375','vertical_datum','EPSG','5169','EPSG','3894','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5170','Stewart Island 1977',NULL,'1977-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13376','vertical_datum','EPSG','5170','EPSG','3338','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5171','EGM96 geoid',NULL,'1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13377','vertical_datum','EPSG','5171','EPSG','1262','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','5172','Nivellement General du Luxembourg 1995',NULL,'1995-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13378','vertical_datum','EPSG','5172','EPSG','1146','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5173','Antalya',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13379','vertical_datum','EPSG','5173','EPSG','3322','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5174','Norway Normal Null 1954',NULL,'1954-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13380','vertical_datum','EPSG','5174','EPSG','1352','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5175','Durres',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13381','vertical_datum','EPSG','5175','EPSG','3212','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5176','Gebrauchshohen ADRIA',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13382','vertical_datum','EPSG','5176','EPSG','1037','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5177','Slovenian Vertical System 2000',NULL,'1999-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13383','vertical_datum','EPSG','5177','EPSG','3307','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5178','Cascais',NULL,'1938-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13384','vertical_datum','EPSG','5178','EPSG','1294','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5179','Constanta',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13385','vertical_datum','EPSG','5179','EPSG','3295','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5180','Alicante',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13386','vertical_datum','EPSG','5180','EPSG','4188','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5181','Deutsches Haupthoehennetz 1992',NULL,'1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13387','vertical_datum','EPSG','5181','EPSG','3339','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5182','Deutsches Haupthoehennetz 1985',NULL,'1985-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13388','vertical_datum','EPSG','5182','EPSG','2326','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5183','Staatlichen Nivellementnetzes 1976',NULL,'1976-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13389','vertical_datum','EPSG','5183','EPSG','1343','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5184','Baltic 1982',NULL,'1982-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13390','vertical_datum','EPSG','5184','EPSG','3224','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5185','Baltic 1980',NULL,'1980-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13391','vertical_datum','EPSG','5185','EPSG','1119','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5186','Kuwait PWD',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13392','vertical_datum','EPSG','5186','EPSG','3267','EPSG','1248'); INSERT INTO "vertical_datum" VALUES('EPSG','5187','KOC Well Datum',NULL,'1937-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13393','vertical_datum','EPSG','5187','EPSG','3267','EPSG','1205'); INSERT INTO "vertical_datum" VALUES('EPSG','5188','KOC Construction Datum',NULL,'1952-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13394','vertical_datum','EPSG','5188','EPSG','3267','EPSG','1206'); INSERT INTO "vertical_datum" VALUES('EPSG','5189','Nivellement General de la Corse 1948',NULL,'1948-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13395','vertical_datum','EPSG','5189','EPSG','1327','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5190','Danger 1950',NULL,'1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13396','vertical_datum','EPSG','5190','EPSG','3299','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5191','Mayotte 1950',NULL,'1950-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13397','vertical_datum','EPSG','5191','EPSG','3340','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5192','Martinique 1955',NULL,'1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13398','vertical_datum','EPSG','5192','EPSG','3276','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5193','Guadeloupe 1951',NULL,'1951-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13399','vertical_datum','EPSG','5193','EPSG','2892','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5194','Lagos 1955',NULL,'1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13400','vertical_datum','EPSG','5194','EPSG','3287','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5195','Nivellement General de Polynesie Francaise',NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13401','vertical_datum','EPSG','5195','EPSG','3134','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5196','IGN 1966',NULL,'1966-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13402','vertical_datum','EPSG','5196','EPSG','3124','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5197','Moorea SAU 1981',NULL,'1981-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13403','vertical_datum','EPSG','5197','EPSG','3125','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5198','Raiatea SAU 2001',NULL,'2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13404','vertical_datum','EPSG','5198','EPSG','3136','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5199','Maupiti SAU 2001',NULL,'2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13405','vertical_datum','EPSG','5199','EPSG','3126','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5200','Huahine SAU 2001',NULL,'2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13406','vertical_datum','EPSG','5200','EPSG','3135','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5201','Tahaa SAU 2001',NULL,'2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13407','vertical_datum','EPSG','5201','EPSG','3138','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5202','Bora Bora SAU 2001',NULL,'2001-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13408','vertical_datum','EPSG','5202','EPSG','3137','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5203','EGM84 geoid',NULL,'1987-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13409','vertical_datum','EPSG','5203','EPSG','1262','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','5204','International Great Lakes Datum 1955',NULL,'1955-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13410','vertical_datum','EPSG','5204','EPSG','3468','EPSG','1202'); INSERT INTO "vertical_datum" VALUES('EPSG','5205','International Great Lakes Datum 1985',NULL,'1985-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13411','vertical_datum','EPSG','5205','EPSG','3468','EPSG','1202'); INSERT INTO "vertical_datum" VALUES('EPSG','5206','Dansk Vertikal Reference 1990 (2000)',NULL,'2000-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13412','vertical_datum','EPSG','5206','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','5207','Croatian Vertical Reference Datum 1971',NULL,'1971-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13413','vertical_datum','EPSG','5207','EPSG','3234','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','5208','Rikets hojdsystem 2000',NULL,'2000-01-01',2000.0,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13414','vertical_datum','EPSG','5208','EPSG','3313','EPSG','1180'); INSERT INTO "vertical_datum" VALUES('EPSG','5209','Rikets hojdsystem 1900',NULL,'1900-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13415','vertical_datum','EPSG','5209','EPSG','3313','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','5210','IGN 1988 LS',NULL,'1988-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13416','vertical_datum','EPSG','5210','EPSG','2895','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5211','IGN 1988 MG',NULL,'1988-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13417','vertical_datum','EPSG','5211','EPSG','2894','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5212','IGN 1992 LD',NULL,'1992-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13418','vertical_datum','EPSG','5212','EPSG','2893','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5213','IGN 1988 SB',NULL,'1988-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13419','vertical_datum','EPSG','5213','EPSG','2891','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5214','IGN 1988 SM',NULL,'1988-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13420','vertical_datum','EPSG','5214','EPSG','2890','EPSG','1178'); INSERT INTO "vertical_datum" VALUES('EPSG','5215','European Vertical Reference Frame 2007',NULL,'2008-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14655','vertical_datum','EPSG','5215','EPSG','3594','EPSG','1027'); INSERT INTO "vertical_datum" VALUES('EPSG','1288','British Isles height ensemble',NULL,NULL,NULL,0.4,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','14086','vertical_datum','EPSG','1288','EPSG','4606','EPSG','1026'); INSERT INTO "vertical_datum" VALUES('EPSG','1371','Dansk Vertikal Reference 1990 ensemble',NULL,NULL,NULL,0.05,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20365','vertical_datum','EPSG','1371','EPSG','3237','EPSG','1142'); INSERT INTO "vertical_datum" VALUES('EPSG','1376','Denmark Mean Sea Level ',NULL,NULL,NULL,0.5,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21052','vertical_datum','EPSG','1376','EPSG','4756','EPSG','1198'); INSERT INTO "vertical_datum" VALUES('EPSG','1377','Denmark Lowest Astronomical Tide ',NULL,NULL,NULL,0.5,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','21051','vertical_datum','EPSG','1377','EPSG','4756','EPSG','1198'); proj-9.6.0/data/sql/vertical_datum_ensemble_member.sql000664 001754 001755 00000002734 14764566077 023064 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5130',1); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5131',2); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5101',3); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','1164',4); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5138',5); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5140',6); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5144',7); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5148',8); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1288','EPSG','5147',9); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1371','EPSG','5206',1); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1371','EPSG','1368',2); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1371','EPSG','1369',3); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1371','EPSG','1370',4); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1376','EPSG','1372',1); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1376','EPSG','1374',2); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1377','EPSG','1373',1); INSERT INTO "vertical_datum_ensemble_member" VALUES('EPSG','1377','EPSG','1375',2); proj-9.6.0/data/sql/wgs84_realizations_concatenated_operations.sql000664 001754 001755 00000047111 14764566077 025371 0ustar00e012349e012349000000 000000 --- This file has been generated by scripts/build_wgs84_realizations_concatenated_operations.py. DO NOT EDIT ! -- Concatenated accuracy is sum of accuracies INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G873','WGS 84 (Transit) to WGS 84 (G873)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7815','EPSG','7658',0.74,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G873',1,'EPSG','9960','forward'); -- WGS 84 (Transit) to WGS 84 (G730) (EPSG:9960), 0.7 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G873',2,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO usage VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G873_USAGE','concatenated_operation','PROJ','WGS_84_TRANSIT_TO_WGS_84_G873', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1150','WGS 84 (Transit) to WGS 84 (G1150)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7815','EPSG','7660',0.77,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1150',1,'EPSG','9960','forward'); -- WGS 84 (Transit) to WGS 84 (G730) (EPSG:9960), 0.7 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1150',2,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1150',3,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO usage VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1150_USAGE','concatenated_operation','PROJ','WGS_84_TRANSIT_TO_WGS_84_G1150', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1674','WGS 84 (Transit) to WGS 84 (G1674)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7815','EPSG','7662',0.79,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1674',1,'EPSG','9960','forward'); -- WGS 84 (Transit) to WGS 84 (G730) (EPSG:9960), 0.7 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1674',2,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1674',3,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1674',4,'EPSG','9963','forward'); -- WGS 84 (G1150) to WGS 84 (G1674) (EPSG:9963), 0.02 m INSERT INTO usage VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1674_USAGE','concatenated_operation','PROJ','WGS_84_TRANSIT_TO_WGS_84_G1674', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1762','WGS 84 (Transit) to WGS 84 (G1762)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7815','EPSG','7664',0.79,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1762',1,'EPSG','9960','forward'); -- WGS 84 (Transit) to WGS 84 (G730) (EPSG:9960), 0.7 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1762',2,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1762',3,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1762',4,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO usage VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G1762_USAGE','concatenated_operation','PROJ','WGS_84_TRANSIT_TO_WGS_84_G1762', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139','WGS 84 (Transit) to WGS 84 (G2139)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7815','EPSG','9753',0.8,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139',1,'EPSG','9960','forward'); -- WGS 84 (Transit) to WGS 84 (G730) (EPSG:9960), 0.7 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139',2,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139',3,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139',4,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139',5,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139_USAGE','concatenated_operation','PROJ','WGS_84_TRANSIT_TO_WGS_84_G2139', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296','WGS 84 (Transit) to WGS 84 (G2296)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7815','EPSG','10604',0.81,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296',1,'EPSG','9960','forward'); -- WGS 84 (Transit) to WGS 84 (G730) (EPSG:9960), 0.7 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296',2,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296',3,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296',4,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296',5,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296',6,'EPSG','10607','forward'); -- WGS 84 (G2139) to WGS 84 (G2296) (EPSG:10607), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296_USAGE','concatenated_operation','PROJ','WGS_84_TRANSIT_TO_WGS_84_G2296', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1150','WGS 84 (G730) to WGS 84 (G1150)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7656','EPSG','7660',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1150',1,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1150',2,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO usage VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1150_USAGE','concatenated_operation','PROJ','WGS_84_G730_TO_WGS_84_G1150', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1674','WGS 84 (G730) to WGS 84 (G1674)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7656','EPSG','7662',0.09,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1674',1,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1674',2,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1674',3,'EPSG','9963','forward'); -- WGS 84 (G1150) to WGS 84 (G1674) (EPSG:9963), 0.02 m INSERT INTO usage VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1674_USAGE','concatenated_operation','PROJ','WGS_84_G730_TO_WGS_84_G1674', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1762','WGS 84 (G730) to WGS 84 (G1762)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7656','EPSG','7664',0.09,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1762',1,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1762',2,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1762',3,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO usage VALUES('PROJ','WGS_84_G730_TO_WGS_84_G1762_USAGE','concatenated_operation','PROJ','WGS_84_G730_TO_WGS_84_G1762', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2139','WGS 84 (G730) to WGS 84 (G2139)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7656','EPSG','9753',0.1,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2139',1,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2139',2,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2139',3,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2139',4,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2139_USAGE','concatenated_operation','PROJ','WGS_84_G730_TO_WGS_84_G2139', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2296','WGS 84 (G730) to WGS 84 (G2296)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7656','EPSG','10604',0.11,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2296',1,'EPSG','9961','forward'); -- WGS 84 (G730) to WGS 84 (G873) (EPSG:9961), 0.04 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2296',2,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2296',3,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2296',4,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2296',5,'EPSG','10607','forward'); -- WGS 84 (G2139) to WGS 84 (G2296) (EPSG:10607), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G730_TO_WGS_84_G2296_USAGE','concatenated_operation','PROJ','WGS_84_G730_TO_WGS_84_G2296', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1674','WGS 84 (G873) to WGS 84 (G1674)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7658','EPSG','7662',0.05,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1674',1,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1674',2,'EPSG','9963','forward'); -- WGS 84 (G1150) to WGS 84 (G1674) (EPSG:9963), 0.02 m INSERT INTO usage VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1674_USAGE','concatenated_operation','PROJ','WGS_84_G873_TO_WGS_84_G1674', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1762','WGS 84 (G873) to WGS 84 (G1762)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7658','EPSG','7664',0.05,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1762',1,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1762',2,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO usage VALUES('PROJ','WGS_84_G873_TO_WGS_84_G1762_USAGE','concatenated_operation','PROJ','WGS_84_G873_TO_WGS_84_G1762', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2139','WGS 84 (G873) to WGS 84 (G2139)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7658','EPSG','9753',0.06,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2139',1,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2139',2,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2139',3,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2139_USAGE','concatenated_operation','PROJ','WGS_84_G873_TO_WGS_84_G2139', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2296','WGS 84 (G873) to WGS 84 (G2296)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7658','EPSG','10604',0.07,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2296',1,'EPSG','9962','forward'); -- WGS 84 (G873) to WGS 84 (G1150) (EPSG:9962), 0.03 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2296',2,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2296',3,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2296',4,'EPSG','10607','forward'); -- WGS 84 (G2139) to WGS 84 (G2296) (EPSG:10607), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G873_TO_WGS_84_G2296_USAGE','concatenated_operation','PROJ','WGS_84_G873_TO_WGS_84_G2296', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2139','WGS 84 (G1150) to WGS 84 (G2139)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7660','EPSG','9753',0.03,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2139',1,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2139',2,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2139_USAGE','concatenated_operation','PROJ','WGS_84_G1150_TO_WGS_84_G2139', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2296','WGS 84 (G1150) to WGS 84 (G2296)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7660','EPSG','10604',0.04,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2296',1,'EPSG','7668','forward'); -- WGS 84 (G1150) to WGS 84 (G1762) (EPSG:7668), 0.02 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2296',2,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2296',3,'EPSG','10607','forward'); -- WGS 84 (G2139) to WGS 84 (G2296) (EPSG:10607), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G1150_TO_WGS_84_G2296_USAGE','concatenated_operation','PROJ','WGS_84_G1150_TO_WGS_84_G2296', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2139','WGS 84 (G1674) to WGS 84 (G2139)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7662','EPSG','9753',0.02,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2139',1,'EPSG','7667','forward'); -- WGS 84 (G1674) to WGS 84 (G1762) (EPSG:7667), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2139',2,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2139_USAGE','concatenated_operation','PROJ','WGS_84_G1674_TO_WGS_84_G2139', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2296','WGS 84 (G1674) to WGS 84 (G2296)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7662','EPSG','10604',0.03,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2296',1,'EPSG','7667','forward'); -- WGS 84 (G1674) to WGS 84 (G1762) (EPSG:7667), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2296',2,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2296',3,'EPSG','10607','forward'); -- WGS 84 (G2139) to WGS 84 (G2296) (EPSG:10607), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G1674_TO_WGS_84_G2296_USAGE','concatenated_operation','PROJ','WGS_84_G1674_TO_WGS_84_G2296', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','WGS_84_G1762_TO_WGS_84_G2296','WGS 84 (G1762) to WGS 84 (G2296)','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','7664','EPSG','10604',0.02,NULL,0); INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1762_TO_WGS_84_G2296',1,'EPSG','9756','forward'); -- WGS 84 (G1762) to WGS 84 (G2139) (EPSG:9756), 0.01 m INSERT INTO concatenated_operation_step VALUES('PROJ','WGS_84_G1762_TO_WGS_84_G2296',2,'EPSG','10607','forward'); -- WGS 84 (G2139) to WGS 84 (G2296) (EPSG:10607), 0.01 m INSERT INTO usage VALUES('PROJ','WGS_84_G1762_TO_WGS_84_G2296_USAGE','concatenated_operation','PROJ','WGS_84_G1762_TO_WGS_84_G2296', 'EPSG','1262', -- extent: World 'EPSG','1027' -- scope: Geodesy ); proj-9.6.0/data/sql_filelist.cmake000664 001754 001755 00000005100 14764566077 017022 0ustar00e012349e012349000000 000000 set(SQL_DIR "${CMAKE_CURRENT_LIST_DIR}/sql") set(SQL_FILES_CONSISTENCY_CHECKS_TRIGGERS "${SQL_DIR}/consistency_checks_triggers.sql" "${SQL_DIR}/conversion_triggers.sql" "${SQL_DIR}/conversion_triggers_hand_written.sql" ) # When setting PROJ_DB_EXTRA_VALIDATION=OFF, we defer the insertion of check triggers # until the very end to save build time. We also entirely skip running # final_consistency_checks.sql. # Typical build time with PROJ_DB_EXTRA_VALIDATION=ON: 60 seconds # Typical build time with PROJ_DB_EXTRA_VALIDATION=OFF: 3.7 seconds set(SQL_FILES "${SQL_DIR}/begin.sql" "${SQL_DIR}/proj_db_table_defs.sql" ) if (PROJ_DB_EXTRA_VALIDATION) list(APPEND SQL_FILES ${SQL_FILES_CONSISTENCY_CHECKS_TRIGGERS}) endif() list(APPEND SQL_FILES "${SQL_DIR}/customizations_early.sql" "${SQL_DIR}/metadata.sql" "${SQL_DIR}/unit_of_measure.sql" "${SQL_DIR}/extent.sql" "${SQL_DIR}/scope.sql" "${SQL_DIR}/coordinate_system.sql" "${SQL_DIR}/axis.sql" "${SQL_DIR}/ellipsoid.sql" "${SQL_DIR}/prime_meridian.sql" "${SQL_DIR}/geodetic_datum.sql" "${SQL_DIR}/geodetic_datum_ensemble_member.sql" "${SQL_DIR}/vertical_datum.sql" "${SQL_DIR}/vertical_datum_ensemble_member.sql" "${SQL_DIR}/engineering_datum.sql" "${SQL_DIR}/conversion.sql" "${SQL_DIR}/geodetic_crs.sql" "${SQL_DIR}/projected_crs.sql" "${SQL_DIR}/vertical_crs.sql" "${SQL_DIR}/compound_crs.sql" "${SQL_DIR}/engineering_crs.sql" "${SQL_DIR}/helmert_transformation.sql" "${SQL_DIR}/grid_transformation.sql" "${SQL_DIR}/grid_transformation_custom.sql" "${SQL_DIR}/other_transformation.sql" "${SQL_DIR}/other_transformation_custom.sql" "${SQL_DIR}/concatenated_operation.sql" "${SQL_DIR}/concatenated_operation_step.sql" "${SQL_DIR}/alias_name.sql" "${SQL_DIR}/supersession.sql" "${SQL_DIR}/deprecation.sql" "${SQL_DIR}/esri.sql" "${SQL_DIR}/ignf.sql" "${SQL_DIR}/nkg.sql" "${SQL_DIR}/iau.sql" "${SQL_DIR}/nrcan.sql" # Below file not yet integrated to unclear licensing of referenced grid file # "${SQL_DIR}/transformations_czechia_extra.sql" "${SQL_DIR}/grid_alternatives.sql" "${SQL_DIR}/grid_alternatives_generated_noaa.sql" "${SQL_DIR}/nadcon5_concatenated_operations.sql" "${SQL_DIR}/wgs84_realizations_concatenated_operations.sql" "${SQL_DIR}/customizations.sql" "${SQL_DIR}/nkg_post_customizations.sql" "${SQL_DIR}/commit.sql" ) if (NOT PROJ_DB_EXTRA_VALIDATION) list(APPEND SQL_FILES ${SQL_FILES_CONSISTENCY_CHECKS_TRIGGERS}) else() list(APPEND SQL_FILES "${SQL_DIR}/final_consistency_checks.sql") endif() list(APPEND SQL_FILES "${SQL_DIR}/analyze_vacuum.sql") proj-9.6.0/data/tests/000775 001754 001755 00000000000 14764566152 014466 5ustar00e012349e012349000000 000000 proj-9.6.0/data/tests/BETA2007.gsb000664 001754 001755 00000243360 14764566077 016225 0ustar00e012349e012349000000 000000 NUM_OREC NUM_SREC NUM_FILEGS_TYPE SECONDS VERSION NTv2.0 SYSTEM_FDHDN90 SYSTEM_TETRS89 MAJOR_F ISXAMINOR_F ʡ?XAMAJOR_T @TXAMINOR_T u?XASUB_NAMEDHDN90 PARENT NONE CREATED 06-11-09UPDATED 06-11-09S_LAT AN_LAT @MAE_LONG W_LONG VLAT_INC v@LONG_INC@GS_COUNTX/+N@0&@0@0Q@0@$0@20,q@C0_R@W06@&o0@v0Y@q0@0@0@'11@n1@1&@u2S@V2@2!ʫ@;3 @T3LQ@3@H3@٠@H4@d4`V@4@15•@5@5w"@5*6vQ@6@/6@>7@7e8@8i@38y@i8;t@v9n@9i@^:0d@:^@M0;=Y@~;k(T@;N@2<'gI@Wx<C@<>@<9@=em3@0=?-@G=(@U=R"@]=@`=@F_=q@qZ= @R=@#I=n?==?0= ?}"=?Ab2!H@Fz24@2@ 2@2@2@[2Q@a2c@02E@12)@3@:#3(@G3W@&r3X@3@3.@{24#$@34X@4N@d;5ޫ@y5(@5s@C6@d6@6K@27@~7Ø@G7f@8{$@n8O@~8pz@9]@w9ه@91@@:[@ͱ:O@*;y@Ω;-t@V*T@J>YO@?I@K?D@?0?@0?>9@?$%4@@.@@!(@!@B#@5&@3@[%@ W@ @`r@@# @4@@@cC?M?T??j???4E@4.7@'4@5@5q@ 5ȷ@.5@>5t@P5eU@f58@~5K@Z5@85@56@6@%[6@q6 @ 7l^@n7;@7@.8mI@8*@78@79:@9ǃ@19&ƛ@:R@e:p0@:Z@ ;@b;@;WΊ@r<@r< 7@<@N=@S=Fz@eU>Vt@H>o@e?Tj@z? e@V@_@@~Z@F(A@4U@σAhO@A$J@BBE@^B?@B"n:@üB4@QBcB/@B;)@BӾ#@B@}B@BW!@oBa5 @BE@B"T@oB?еB?oBI?47NE@S7*9@rj7h#@{7n@7@7`@7a@47@7yf@7H@7,@r8@48B@Z8@׉8߹@ 8@,9@ė9i@ :d@/j:@:5p@+;Ǧ@/;@Y;or@/<ž@x< @Ǻ׍@d>@>)"@#?[@}?P@?@m@@z@KA^Mu@Ap@'Bj@DB|e@.C<`@CZ@CU@~QDsP@¤D/K@ADE@1EX@@'jE,;@E!5@E0@EEsI*@Ex$@E@}EI@פE@Eq @*ED@QEI@=~EwI?g|E?ET?9H@9\=@ 9L*@t9@2:.@:@!:@Q3:n@F:y@F\:\@t:@@X:&@%:`@4:@;O@q8;߶@;/@/S@ >S@>@'?OX@]?힙@і?@h?ؓ@+M@@-@@]Ae6@uAR@Aۊ@M2Bۂ@ΈBo/@C{@~CXu@F_Dt`p@D"k@gE)e@ES`@/OF)v[@F2V@GP@lGK@GF@G=A@u@Ӈr@z>mű@K?@?w@@|ө@x@/@@Ɗ@3A@`A8J@A+@| B@.Bc @ۅBl @HB@rCH@MCA@3D@Dޅ@yDw@BEe@Ec{@AF>v@DGp@ͮGak@HZf@3H(a@yI[@t{IkV@I\Q@&JRDL@sJIG@JA@;KK<@BKL7@IK1@GK9+@O@K%@~6K@c+K@K6@K'P@ KQj@yKY@?JL?J?KKZ?>WZ@s>FO@ؼ>)?@>*@>f@v>@?t@0)?@??@Y?}@u?|@?Sh@?X@?O@ @vS@v@io@YA겴@A @A_@UB̴@EB0 @!Cj@NzC&Ǥ@^C|'@?D@ٙDݜ@D+@9 E=@bE&@E?@:F@/F̋@F@3RGd @øGS@'H.@`H{@,IWv@+I"q@4KJAk@IJf@(,KJa@KY\@!LV@'LQ@LeL@MG@OMT:B@jMz<@M7@M82@ML,@#Mty&@M @M@,MH@M@iMd @M>@M?ǺM?HMr?@yh@bA]@b1A_N@JA;@bAH&@uxA.@ގAW@+A@@A@Ag@Al@B'@GB@xB@BK@ Cx@C@~:DL@D@8D0@O]E8J@Eࡧ@F@oFZ@]F@)?GS@G{N@XGk`@/HO@H@IƎ@oIM@GII@yJe@^J@hJ@@kKN|@K~v@QkLq@LMl@(IM0g@Ma@v2N\@NW@ O:R@mVO,M@OG@*O+B@a7P_=@P8@|PƆ2@¡P,@P '@ݗP7!@\P`@nP@~P@vP1 @rP@oP3?vqP3?vP?lCBz@ Cxo@vCa@CO@MC><@ICe'@ D2@$D@@D@9_DM@D@Dc@fD;@EȽ@PEGغ@E@F)@F@"7G<گ@іGWC@MG:@+MHݧ@ʦH~:@ I@ vIM֟@;I*@ FJh@ J@#J@eK@K^@0LR@iL'@L1@;MN߃@M$@N6|@kNZw@ON(r@duOl@aOg@]P hb@PZ*]@?:Q=W@߉QıR@Q vM@.RGH@pRC@R=@= SXs8@-Sg2@2;SoI-@G>S'@;Sm!@6S@0S%@g*SP@S%S>y @"S{@G!S?#S?0)S;S?yE@F!@K"F}w@2=F\g@VFxU@?pFB@"F/@Fq@F2@F^@= G@9G@mG@Gx @xG$@BHG@vH׆@ IoӲ@ղI)@A+Jގ@oJxѪ@J'@MJKۅ@Kˢ@ L@*tL6@8Lv@qUM}@CM>˔@(N@DNvT@N@4Ỏ@IO@O!@OPo@+P}@,Ql!x@QYr@Rwm@~tRJh@Rc@VS]@S(aX@TPS@R~T;M@T}H@ UuC@qUU!>@U8@xUY3@U-@U (@U]P"@U@U{@RU@U @%U{M@U?UT?Ug?cH@H@H@H~@$Hr@Ha@ IP@((IA@HI6@nmI.@I,@I2@JF?@GJU@Jw@J@_K)@-KU0@y;Lv@9L(խ@XM(@M@l!Noӥ@Nw@bN5F@ Ol@:uO@O@P$@FPT@ FQ@NQmŌ@~Q@ 5R"*@]RH\@Ru@dS~@SEx@5TS\s@Tn@%Uh@/nUp|c@U,^@{1VX@˜V߉S@WEGN@VWI@WHC@W(>@[%XN9@EX3@d\X2.@iXˆ(@rpX"@sXP@sXaT@sX@rX @msXE@uX%@ zXޭ?؀Xb?J@Kɻ@Kj@:K>@6VK@qKw@Ks@Kog@K^@Kh[@$L^@[Lj@ÛLL@L@G>M>ʻ@QM{@NRD@NY@(ND@}O@P#g@~tP@P@HQC@t{Qy@DQh@Rٚ@yR @}?SR@[S1@TǏ@iRT@YT F@Tbv@8Ud@xU@5V~@ hV9y@Vs@.Wn@:Wa2i@bWrc@7TX9^@pX7OY@YS@4YıN@Y6vI@.Z\8D@-`Z4?@Z9@Z ;4@Z.@Zz(@[?S#@ [@ [y@([$%@b[ ` @/[_@/[6@[&?&[d?eM@M@8M@M@sMr@sM@N̙@H3N@WN@N@_N@NѢ@3O@Oq@&O@NPZ@P䠶@1Q޳@XQ|@o*R@@ɰR@s.So@=S;@6Su@)T:@TM@0T@YU"@U4h@XVƒ@W @W82@#JW@ՖW ć@W@fIX>@X@Xy@IYiRt@Yn@&Z,i@(~ZLd@Z?_@=[}Y@[YiT@\W!O@]\I@\D@\_?@g']:@&S]4@p]/@]n)@]#@]%@]s@]@] @]v7@]ro@]I?`]հ?O& @ P@(P@EP/@,bP@~P @NP@bPи@P@ Q@J@Qr@cQ@Q@%R )@BR m@S^@eSS@@S:#@UTO]@T@S\UZ@U>@fIV@_V@V@dXW $@ WN@ 7Xa@͒X4@a2Y|@YTR@Y@)Y`Ȋ@+4Z@eZUQ@(Z@5F[&@[?z@[t@J\}yo@F\oi@]d@\]k`_@a]8Z@/^T@^O@I^%;J@$_D@j_?@_@:@0_n4@_(c/@`3)@u`H$@,`@5`2@=`7O@FE`l @sL`0@T`@\`?f`I?CuR3@R +@tR @R@R@ S@(S@HS;@mS@pS @S@MT@jT-@@ Tx@ FU2@Uڹ@V@VNb@ V@@W@ W77@YX@YXæ@LY@LY:@Z2Z@hZ"@W[@X[C@[-@a\ @{\@Y\[@P\`@+]@ɏ]@]@ )^2z@s^Zdu@^Qo@>_j@_Pe@__@V`Z@ `>U@,aO@=aaJ@aBCE@ a?@ 0b:@\b.5@ }bi/@b?d@FdJ@ ea@e~ƙ@je@e6f\=@ffۅ@Pf@f:@GgL@g[@8gԃ@:@hq @ʦh9|@ i@w@Kiq@,iRl@iBf@Aj~a@Xj6\@jV@2k{Q@˄kL@kF@l-\A@2l<@[l6@l}1@ԞlJC,@l&@lwh!@lw@Ll=@ m@m @{/m@?m?PPm?W_8@}_R6@_3@%_/@_+@`&(@=`'%@h`$@1` '@`1@"aM@}a0@aL@XbE@b+@_ co@Vc?@cX@Qd%@fdd@33e@Xe&Ǫ@~f@Df('@f&S@3Pg}@gS@Tho@qh=@Mh_{@iD@5Fi@ai?@i@7jņ@֐j @jvO@Ek(}@kWw@k7r@*:ll@lgag@la@"m\@omtDW@mQ@J n|L@m8n.G@knA@wn<@n}Z7@n2@o,@9o~p'@So!@QkoGu@o@Fo!@Hoc @o0@do\ht @h8@~5iB`@iL@ix@kjМ@Էj@k-x@Ppkǔ@k @ko=@0l{@l{l#@hl@R,m=@m@{m}@.nx@n^r@n5m@?oGg@eo`b@oY\@oW@5peTR@`pgM@ёpG@Fp]B@Eq=@Oq$7@Byq2@VqO-@q'@q"@q= @re@irS@0r @Cr$@WrXV@ir%?d~@d @d@'e@d@eW@Yne@ܞe@e@ f@Mf@=f,@f4@Dgxa@g@gξ@\h@h8@&6ib@i³@G jm@Þj"7@(k]@dkw@Gkࡥ@ lƢ@|l@lM@6@x8@xq3@IyG .@/4y(@CVy~#@syW&@iy@Uy@QyC @y|@y@z?N~l @lr@l@m@Im"@m@m@+m5@q9n@~n @Tn'@oG@eok@so@ pܼ@^p@p(@qr@q@qձ@7qr@r@Ss33@^sjM@s@Lt@t֝@3t @qUuP@)uV@vbے@*WvK@_vV@=vꑊ@8wׇ@&w@w_F@B>xC9@Xx[y@x0t@Tyn@fiyρi@yd@yD^@0 z"Y@Az;S@pwzNN@!zH@znC@${0G>@1[{9@q{i3@?{?R.@{U(@{#@{N@|@('|DL@C|W @}]|#@Cu|@n|Ӈ?-$o@Vo@o@ow@Mo@M2p@op%@Ѯp8@pN@8qg@qZ@q@!r@srr@Gr@Ts|D@t{s;|@nsI@Kt]@t@_)u6@zuY@ug~@Cv$@vƣ@Zv@fNw#@4w"O@wP@HxЕ@x@xh\@My@y@y @/zH@؀zB|@@}299@ }3@~E.@3~ &)@R~#@io~h@L~d@~^@!~j @~ '@P~g@E??q%@q,@5r:@mrwI@r2Y@rQj@#s5}@es4@"s@os@=ti@t@t!@2uF@uHn@u.@|Cv#˺@&v@w4@|w`@wz@\x@xx%̩@x@;y@yi5@;ya@ Fz @zP˜@z@:{H@x{@{S@G|@1|`1@|`t@g*}@}}I@}tz@J ~u@F~3o@u~`j@ߧ~d@Z~c`_@ vY@JA(T@"N@Va2I@gC@1>@%bN9@L8H3@GY.@X6?)@~n#@'z}@n0@]`@=@p@@ˀ?qtj@tz@t@uȚ@Wu@u@uT@v@av@v@v;@ZHwY[@(w|@w<@wJx@*x@ y@?syA@yn@Iz@zA@{ެ@2Z{ @{"@e{A@E|n@?|(@s|7Û@>}@ }'@x}g@M~@D~؍@,~!@WB`@2@ 3@6/@+ z@NJu@k6p@fj@()e@6_@iĀ.Z@.sT@N@:#II@9J)D@H>@]t9@w4@e&.@l5c)@u #@Aı@9сDL@ށ;@X@p @@ e?vw@Qw@w@w"@x@Fx@x*@xB@y\@ dyx@dy@zV@Wzw@z@ {@ji{6?@h{a@G9|O@|@}в@]m}@˾}@*~i:@z~P@ ~u@~`@"Tb۞@@-#-@vR@V~@EKȐ@@ǀI@R7@ …@>@YX@zq {@Tu@lCp@eǁj@܁cbe@ _@$ ?Z@R,AT@FLO@aI@tnD@,?@A9@p^4@u͂/@قx)@92$@a@@^ۊ@%#a@0E@!; @VDP@'M#?y@y@6z )@qtzI=@zrR@+zh@K<{@{@y{9@|@Lk|@|@}1@j}S@}t@p%~ѓ@n~@Z~ĸ@iQڵ@D@@>h?@mc@p@,@8ۀ@$ @+5@I/i@t@@ρ<@k.@%u@D师@Xs@6:@@Sx@rĂW{@ׂu@Ap@Ck@#ce@8`@NQ8Z@pU@OO@ KJ@ݵD@ră9E?@#ۃ:@o4@ i:/@U)@( q$@:z@SV@DiU@ms>@|I @@Ͱ?h|FO@ƣ|c@|lx@ }@|b}@}S@}q@a7~@s~F @~*@#sI@`v+j@ߋ@@ ?@m@d<@Ҁ@x j@=D^.@al{I@Ҍrm@û@*Lç@*$@'@d]9@^c@Ƨ"@Ă@Pݓ@$#@Ge@l/@@̃d#@p@~@7 {@?'v@Ap@VZk@Uje@T~W`@Z@RU@)O@؄QJ@w;D@_]?@W!4:@s.4@oGg/@W *@#gޫ$@t~5@]6@㥅ۅ@ @R @N@ȅ0?@QL<@N@@@*@:O)@tD@a@À|@@1@A@tm)@.+@ŁnL@i@!@PS@9>w@H@܂0@VΪ@2r@L @V}B@ l@@P™@l!@K\@"qe@ٙ䠎@@{:@_)r@44@:@TR@@&<#@sՆC@.h@$@Ov@Pp@@峇W@ԇ&@@@88@ǎ%@Oˈ4@>Z@#y@.֭@Jۚ@e @p|<@m@8@ډ@q؉@'@B5@}\k@uD}@㍊}w@褊!r@l@u͊f@moa@o[@lSYV@ Q@K@'RF@X9+@@WCg;@O65@]^X0@Ll *@k~%@6x( @@A@%@纋G @ËW@͋a?H'B@G.@bhG@i_@y@׆_@ @0+j@qW3@u @!)@^؇ I@e@-z@R@z;@-Ͻ@KȈ(@$@ 9@,:C@[}7@ȶ D@QM@S"`@@@_娠@zԝ@h@u/@Ȋa@Pߊ}@꽏@@@)@6j+@r\@S@{z}@ԋw@fr@cl@;g@(֨a@`\@ y@y;h@ih@.@'@V@ @Y4@[K<@}*W@蠋q@CƋ@+m@N[a@4x@ۧ@ˌ@dף@@u@82JF@=Is@cߦ@{ђ@@㥍!@?ǍI@4x@ffl@H3߁@K[%~@Icx@yr@aRm@Ƣ9g@Gb@;ÎՑ\@r}W@QKR@]L@LkF$G@6vA@~u<@k.s6@Á0@@j+@|%@e @7@ʦ@,@1D @Mh@:?nj@@@g'@X@z@6@u)@?tA@4KW[@xzp@ΪV@Ԏ˜@@)"e@tF@j@@W@ @@L@Bc@ng@-l@ːq@#@8ę@,|@>ߘ@Rh@i(@P@~@Š@$֑^@d#@ R@S"@9`y@ Ps@Rdn@ph@ro c@Nz]@lX@xR@L@yDG@ AA@'<@6@ۿ<1@ƒ +@VԒ&@ @C>@ݒ@oؒ@ ͒\= @ג@ƿ?@;@n[o@c&@wJ@^׎^@ o@)?Tt@w@&@@؏@ @v2@uY@{X@ˡ @KȐ@x5@lC@3!Y@RRr@tk@5断@H/@ӑ@e@Au@g@xܛ@K@ @ >@˒7b@ ݒ@@b@8jK@Py@iM@^7y@Nt@$fn@h@gac@$]@Ɠ>X@9ѓ6R@ߓ3M@ {G@A@I<@p6@*21@l+@9 [B&@Z< @H@#@A@  @!@?ul/@L@2c@؏`v@@e6@g@/@АO@O,@]@7a@g@(@5 @oE?@[%W@Inn@p@֐L@I@&Ғ@@:̪@w-Pߧ@R@bQ١@)@ԓ@S@+%;@ V@*(s@!-%@?DF݊@quC@@~@⯔@Ɣ)y@ݔGt@=n@{i@4&@ M@nnz@.t@JCVo@=i@|~Ud@t^@sX@DS@eJM@cG@@I6>@5A@>(D@R'G@CN@]mV@rW@F_@g@}˗v@""@jK@p5@io@Ƙ@јI@@ @1@{טz@ݘ u@vޘ|o@ۘi@Ә-d@ŘD^@|X@\S@ǘM@$֘G@NB@<@,7@Q1@>+@\&@b @@M@ݘ@֘Z@՘ @\9@?1\>@ _@8z@f#@P@@/@U @ *@i[@3ܖd@ =~@;@O@\5@3M@`f@ȧ@^@ɗj@t@gq@Kz@^.u@0o@33i@,'d@~A^@ X@pBS@ ӟM@G@HB@"<@' 7@b-g~1@/+@+\&@#$ @O@R -@.V@m @G(@(F?uLNp@s@i@іM@o@"O>@4%X@Ku@ԗ^@ /@8@])@|@. @/{@8ژO@.@)@'@H@oӟ@蟱@Yp@?@G6@v̗@|,ǝ@>?r@O@g@O@I D@DLq@OC@B[ɰ@gш@Dn#@u@wE<@wz@xt@pw mo@vi@prd@jl^@uY9X@aO.S@XYnM@V G@eS[BB@OX<@p_7@^co1@bX+@W[R&@7O2 @y@H@6F@1e@M2 @F@ia?o@_ԗY@@2;@h@E\@-Ϙr@p@2f@N@`v@e@9љR@S $@-<@A+&@V]@2V@@Қ*@>˚Ѵ@6ͱ@@<9@ Yc@p@f@pɟ@a֜@Ͻ!@m@l2U@C肑@@@jވ@|@ @dA@{z@yu@\o@i@O;c@OL^@/X@힜R@?:M@G@"0B@;+<@x6@ݘZ1@+@猜 .&@9 @q4@k@+jR@'k @@4:?@1@]@Ќ@@@U@B@s @@XʚJ)@|0L@!^@Wk@F|1|@R|a@ߧ/@_қ=C@PV@-$%i@}K{@q$@w@ꕜ֫@ר@Ü!@֜@)B@ *@R:@}3@Zŝ o@ݝ@@ϋ@P@u @%&@BC@z@w u@Oo@PSi@vac@2^@%qX@R@XM@CWG@Vԝ˾A@ΝO;<@՝6@ӝ1@˝?t+@ػ %@>A @ޫ@@ۧ@I @ǝ@k?d} @@_'@+@s,@AE/@}yS?@a2@mʛC@.P@ Mg@OL@@U@Ü/@@ q@#@ Mꖺ@wu@Ԝ@ Ýɱ@[Ν@@@@,E@H@j#@ܞG@e@@+@+5@>ۋ@JF@sK0@fNb-@xPI@+P2z@OL u@I_Fo@K@bfL@4]@@O@@I@nK@8;@ǞV@@ X@@@Ar1?@c%@S@P@R T@|,h@?4@eA@{x@ӟq@sPp@(ՠg@th\@L@mgY@@dꕗ@Im@3ġő@͡ݎ@Rա@{ڡl @ݡ"@"<@U@bz@Au@ޡ)@o@moi@5c@wء5]@ҡPX@͡.R@?ǡ.TL@F@@W@@ث:@w!5@ݕC=/@Þ)@!$@v8e@l:@t c@0/ @8@ @?o6@W@f@,@ @8@Mg"@͒2@ػ&@B@%G=@NDO@_U@PX@MoY@A_@x@*?@L@{ݘ@r@e~@e @!j@@4@O8@pt@Ow@^@Y<@4@Bϑ@@@@F%@(=,@0*D@--[@Q.*z@w,0 u@R*Eo@5)si@'1c@u"]@W@-DR@%C9L@\F@7@@%:@RE4@.@=բ%)@ ȢL#@ `v@KQ@ӄ@Ȣ4G @4ڢ@@:w0?qȟ @3@{.@f;A@Tc R@(`@Qk@R q@w@N}@(~@Sߌ@氡@ϡ̧@@8@l0@Zг@团@Ӹ@a@u@E.(ů@es׬@9ɩ@@@"ϣd@葝@1@|D@LOiƔ@!Yّ@a@i@To@\r/4@tK@w(a@xz@wu@.v Eo@soi@o>c@m]@hW@bR@n\%L@0UDF@Kj@@B:@84@,.@G (@#@C@+k@t @j @$%q@G;@3T^? A@,F<]@kMu@ёۉ@@D@ @Y41@Ae @<@g@M@g@9h@maU@\{@N@Σ(@&@#/@3@WZ@@ɤ@@ ;@<ڣ@0I̠@XT\@y@㍥@Ӕ@@@ղ@и$(@=@rR@f@'¥z@du@Co@^#ji@~Tc@;]@}W@ Q@ L@蟥*F@cJ@@΍'k:@䃥i4@x.@k(@]"@O@tAz6@MMf@]b @(q @@젥r?y@qr@râ\@C@c@4@[@@;£@X@"b@5o @Gq*@ʉ#@!@D-@i:@M- F@Q2@To7@D/@֫i6@D@,/@EG@Ic@5{@ @|ԝ@æŽ@(զʗ@mUޔ@-t@^u@a@u1@F@( Z@ "l@_ z@ \ u@ Co@ Zdi@c@£]@rW@Q@K@=F@+@@٦=I:@Ϧ^h4@7æY.@ض(@T"@C@;@@ @@Ԧ^@]G?ңG@)j@S@J@@Te+1@R>@߳.F@3H@0G@@E@nn@V@ɥB`@+ޥl@rKY@}? ^@YW[@4Y@A#g@Ra@֦o@Ymt@"x@ZG1}@֭M@,ȧ=@ߧO1@S!@O @Vɚ@C֗@+@53@=V@D"@ K:@]PN@ T_@~Wp@W{@?W%#u@VBo@Tk`i@~R|c@N$]@8JW@D]Q@B>K@6tE@.| @@p%&:@C4@W`.@u_{(@"@)F@٧!@`H@:o @v t@"@m@M֨>@5@ )o*@fkRD@@F@ $@;8@f0@%:1@P1@z1@ @ڪQ@ M@!@:<.@_-@,,@~*@ë(@| @'@y@*@P6@[B@2 Q@&p_@#-j@2Tt@~5}@79 {@9u@*:/o@9FBi@8Rc@55c]@<1~oW@k+%zQ@$K@ęE@q?@_ #9@\3@-@B'@ޫ1"@)Ы@*@[Ϋۣ@YM0 @@r@)NC?=Y@bT@ 2I@l@ĩ@ީ@{w@A+u@je{@+-|@]|@.@ @]|@o{@Jz@vy@/x@˫v@t@qr@Cp@>ixm@ލj@lg@Ӭkd@Ka@f]@@r5@7 .@D5@OS?@2ZfI@ cT@j`@q]@CW@GQ@ RIK@NE@R?@8:X9@K`3@j-@ӯ*o'@;ǯu!@|@Q@@Mʯ @eF@@I?qW@ @M@ح@m@*& @4Y=H@`@'i@}@Px@s@' n@Uh@@@H@]m}@`@ıO@@Ұ@|@e߱@0{@rP|@&py@Y@K->@"бw#@ݱ]@ıYݘ@Ū̕@kl@Iɐ@a@/\@k8@^@`@ c4{@d7u@'fP6o@e"7i@Zd5c@a5]@^5W@2Z4Q@U3K@O4E@Gz6?@?v79@a793@-8-@ >'@O@!@ F@J@uS@Bm @1#@N?n]o?5S@VvP@'@A@As/4@$@c@ @O; @7l@١@ӯ@O@! 7@Nz@_{z@Q@y̱@@@~@2[@nQ8@o@@Ы@̲@~@_ q@#kE@P@͘@ŕ@!幒@D ɝ@:@>@(ֲ@@"E@={@>u@:o@3i@殲.c@,+]@_)W@ey#Q@{K@,CE@ P?@9@3@w@-@ m '@` !@DQ@@@O(@IftD @@IJ?]²fi?=@3B4@#t @4@ ݰ׆@um@yKJ@{l@@28@ͱq@@ )q@*R@|@od@gղ F@y&@+@RT@.s@Sp@Xs@̳UM@N(@ @'m@Gj@f@{Sz@q@rSҘ@M{@Qӱ@SM@rS$@F@7@@@{I{@/Eu@@I׳M8@uͳ92@³,@k&@Ϊ @$@֋@Ri@! @ҳ@ ?9?km@k@ұ@1t@#?@v@ɫW@ڲ}@@/a@F_K<@f@@ٳ!@@0@]~o@sK@&@_Ҵ@ظ@ %@(ۅ@E_^@c;@@f@˾3@_ݵΟ@WݵFm@@}@"@@Vܑ@6@L@Sz]y@U@F9F{@EAu@E:o@xE.i@D2 c@B]@h?pW@;rP@z6J@U0D@t)>@!8@22@,@`&@Z @@ִ@i;@' @-% @iI"?]og?~òp@@E-M@!d]@G@ҳ=Q@@7@a@@<@:]@s8@i:@c@u @I@.@_ Yi@b- A@4K@^h@D@x@rs@ݶO@0/@'@e*@wb@zؘ@6@Ԛ@$@@ipw@ضl@ɶ$b@ h@ z@1 t@Vn@zi@Tc@;]@ V@pP@J@zD@t>@ mı8@d2@Y,@jMH&@:@~ @1s@!^h@,6/@U @z @ࡶ@ʶ??@M@u@I@i0@+ @Fa@+G@\@@.@F@;pԂ@|a@¶D@ $@r@>@odڬ@솷@V@ķ'@ @zԯ@ !@i:Q@Rd@gH@nAɟ@Q@?@O@@@}@;}@4vl@V+a@"V@H0L@1@@joz@W`t@۷%yn@ʷeh@÷Ib@,ķɯ\@ȷV@ͷP@:̷J@TƷ_D@>@8@}2@jm,@_:]&@M @|>@lZ/@!@= @Է+@G@p(?k@6.@صǒ@Z@>JW@@.@ E@j@LFB@x@@y̷@q@@(Ii@qB@@@ȼ@@)"c@=5@?W(@tl@ũ@y;@竹S@sL@F֛@L=@*@@Yq@y]@GwM@ml>@`3@S|'@G=z@"7't@'n@ g@^*a@[@V@SS P@8J@D@ >@n8@!Y2@ RD,@*+0&@ո @eǸW @+@߸W%@ W @$5j@g`@5?⺶@ ?@7*Ʀ@cZ@dv@O׷@2@Ex@>yػ@@bָk@6C@+@T'@|@@̹@>\@5@!< @`۹@D@To@겺9E@Ϻ$@@E^@ߺi@ߺ@j޺ɛ@fں@fں[@ ׺~@ҺNb@̺J@ ĺ"7@='@@Þ @uz@}*s@izm@Qg@:ęa@(s[@UEU@tO@0_H@W$C@:>@?g&8@Q?72@;,E,@i6R&@0d @+w@/*@CK@mr} @Ŝ<@Ǻ2;@-?r@?9E@x@@@2*@dV@@ӹ@@4@9bY@#J@@߻G@@f@s.[@Dl@B?@'1M@ . @,Tƛ@*@c(V@p%n@ R@8@}"@S@v@@ٻy@iƻ's@m@^g@~ka@p7[@`U@NBN@G8^H@QC@j/=@zk7@w2@QO,@[D&@| @ '1@*@:0@ @H @4@^?R@銹@@Źį@!@=@ {f@Aq@M@`-@b82@ё@ @@@@9S\@W`v2@@@˼\@@V@5"@T@aqD@@Ĩ@A+@4P@xz@y›@cz@pw,@s1_@o A@sh-&@\ @YQR@ZGa@9؞@%|y@4LTs@z6m@-g@ͼa@RZ@֨T@N@$*WH@EB@*=@ 7@ɼ1@ּg,@&@P!@A@@1f@T @{@@@ͽ?,@tӺ1@@KA@ }@~ɻ @5 (@|H@8K@ƿ @zS@."@H@ q`@ @྽Lq@6FB@:@ $`@Bȵ@i֋@S\@6+@BϾ@־@[ξ.@оo @u;@2ɾZ؞@Ⱦ@Ǿ͒@žp@O@/@@&0@Mօ@‚@J^@q5y@\s@Hl@3&f@`@hZ@|T@nݽ:@N@ƽH@ԽhB@[<@V/k7@1@(,@<8,'@Q!@ i@Q*r@>+h@PȾs @ ?@'<@?f?ڪ@?}@,U@y@Ӽ<@'@gW˄@ݙ@۽s@<@Kr@yu@ΥE@Ͼ@f@@A{@cvT@<_$@@ǿƺ@>@ ,e@C&@j_F@(@ @@;y̞@6@@Zd@A@ @i@ވ@@j޿'@6Ϳ@wx@/r@ݘcl@~f@Ve`@jM_{Z@:;/T@l&WM@|G@ B@1<@0JN7@.d2@~n,@D'@ c"@ҿ K@(D@O@7@C2@T-@'@"@<@a@9@+b@-n @@)O@bT@h@<ھ9@$@r^ B@]s@8S@O/@tP@J@ @3@_@]@{@F@E@!U@|Dz@J]eQ@ y|@M@E@*@#@‡@xt4@x@Ҟ@"?@}&{@XL@-&@i@ڋ@7@q@sHm@ay~@=Ix@g,_Ar@*l@:e@D_@ٔY@6B`S@('M@ˡF@FA@fN<@B>7@@2@3O-@Xsh(@&#@@U@&@$&Jb@$Q @z@@)=@0ڿ@@W[Յ@,@uʛ@f-<%@Otv@u @Ӈ@AX@@9@6@w@7K@:]}\@vs@@Q@z@Zm@8γ@]@e@e֨@9q@T(@x@@@J@@@ȋ@#@[|@rE@qHm~@u:@x@t#q@gk@@M#e@/a_@Y@]R@L@pF@=A@ZG:<@B7S7@iz2@ˑ-@?;(@&$@o@>Ͽ@l@7bf@ @7@P@P@fB@U@J@[@'d@mo@Ao@I@cAK@@@ %@u,V@=W@~@,J@@U@@@Ժ@ W@x)xdz@5,@=@cC@gG0@I^U@K @J̛@OI@\FN@A @i:m@<1帋@W&@e@g <@%;~@qx@)Gq@и}k@9be@ǀ_@UX@WNR@JEdL@6W&F@RS$A@wL<@7@2@=r.@l)@[Mi$@c|E) @ɑ@z@i@@ @[n9 @nW#@M@N@N}@* @ A@Wh*@:y@@0@<]@@W@ @;7@i@h@#k`@H%@D@f@2N(@G!@\ZG@iiƳ@uvr?@ û@:C@kSۥ@@2@@ڑH@b@̋f"@d@(~@s@fU@V#-@cE~@1w@:ޓq@9 Xk@f?e@ ^@ɓX@LR@ L@jF@J^A@Vȕ<@"7@*:3@0W|.@q)@7k%@ @a\@MD@d@|@@q@`f@;C@w@7@{_@ٽ@ @T9H@@p]@a@O@+@@;@Wf@o @ͅ@ۘ;@Adz@TDO@f٬@dj@-@T@OUZ@@ǘ@O@&A@)@kʋ@뙈@n@37F@M?~@w@pBq@}\k@kHwd@a2.^@v FX@@Q@[K@kF@A@=M=@`e0f8@D3@R+/@t*@&@{OՑ!@@@,F@*@bt @c@}@x@@[ҩ@9@t@1"A@vȵ@@v@8n@rg@"@@C@0@T@Ou@B@&@>͔@w1@^ȳ@\@@P @s,@j?Ԣ@a@6@@@zi@N0-@0S@gÈ@Q@l@<~@2x@q@_Wyk@E0e@xj^@lzX@iVR@Hb&L@n(G@χB@j=@U 9@ f4@3$)/@Rh<+@,&@q9"@_m@%"J]@Z@@\ @k@END proj-9.6.0/data/tests/MD000664 001754 001755 00000006750 14764566077 014727 0ustar00e012349e012349000000 000000 CTABLE V2.0 Maryland - HP DJWʅ)?9RFq?9RFq?2ydP‡2'62Ã2w_2SĀfD2>,G';255H2FѰ r22ADo2‘<]36f13튱c3\i=38ڱԥ33J,3肋ҟ3K3-Ͳ2|'؈<T&3w= 1*2Z- `I2$ұ,20m5p2?"A2z72.10e610314* 2J3T2e=i82۰(2z[2v3O#-3"YI3Po0\3bܱX33M뗰} l Ve݌'rl1 ȳԃ2Ƿ2@}U2;@EÈ2 a20S/2031-11‘<1zd1t 1<:1;08Y1A/1x<1'11Ǿ*2\.j17/1ZA@10,28ڲ.HOJH6hJ³ h1@ɳI82\γLb2ڠ׳;vk2ߨ2꟰2?%/n20Y2:I1-'2C11c1v111В0B1N/k71̍/{00e=5-1zA 14.21C/縱E#1as2dֳz 3J)Вe22MU22:ٳT220#2+1y24x1BW2?1(2Y11̍1L1̍1ڎ/n1`n119:0F1C/_/H/"30Xyp߮ӌ&j0-O&2%;ܹ2+}13A3N)3'޳(3ʳf22C15t2~1V!h2?1^S21,2V 1141411271ڎҰ픤1`10W?55s1?g;fl*;Chij|1q92!f/'3t#3p!33۳-)U3_3>ĩ|&2QO21JB221zG2&j1C2b1(2A1۶161"*11ߓ1 >?1Ê1V<1薕,|49:ͯte0‘1w>?'2> }2ճ2ܳ 93ɯ߳93ֳ%3v0M3䖳E3Þ2w#͎2# 2Ѻ161[12o1iB21y2>,1z11T11\ 16h1 ~00ڎR0"틲4u&XJFvi2ՈL2_+2B2" a23AM63hvNj3:s1j3ѷ?3 2I·2P111P/P/m_0H;/?.b팱Ɩ0elA0'07a1.s>/e=?~1-'E29P19P1i e&2i e2Ou2mI3t%3+\:3@9,3uqA3|2j\b1 cj4y0~0f^1.cUВ,W:NWBDㆲ՗6iF̒2$1bNA?g;1aq?Lg2:H2v?J2‘9P39P?g;3sH2F ,3's3&92+%227e>BDD^*tfAbN0c1랱 f 4ҩֲp!L0-߲cֱ8ٲ6ga濮$M4w1Mڕ& t1u΄21O 329в2#37 3`w*3i)ƌ31^1~1c'1JB=1r012.ʯ9в#_ک gzƾ"6l!G #o8 t1]r1z"7  G12#2`Y2A㲹3l29220IJ2120 1C1DE^0^e=5032iB0Po/u1G';`?1,Cm5pUIB0D+,"*C0B6141ā21l0L@1cձ2Jw!32V 3&1f2ꯔ0Nl7e=H;ů07^o1 <21 D12C66;24C?(2R70o|<230L u2SV0 Y2ʯ1 2>)T524K1B dh?쑰=118t21~>0$띱4W2A1Œ1[В0?#1xPF2.21!"b21׎2s152|A1=212$1\2. 2M62FQw}2A17a+9U9AZ5dұC_类{0薕 1 D101QB 27űSV0\1>,v1UC1m 1n̍11G2zH22A26129121Nu2"13o9S12՗0 2a2q{2豱4<>2!=71uUcAA.oM]B1a[ 1fB"2%8R:2oy)2a#i19Ѱ9Q012/pg22kU2- 2&@2z2j"22Qm 2۬223pa1i31n63#_13 0r3D)2=d2o2#4S/2g1g͌ 1&`t2>2]b\2]8c2A eH2V2?O|1|A1//Qm 25͡d2魱2proj-9.6.0/data/tests/alaska000664 001754 001755 00004012350 14764566077 015660 0ustar00e012349e012349000000 000000 CTABLE V2.0 Alaska J6g V?9RFa?9RFa?J8O18 x8V8(X8Q8'8aI8q>{8)D_8D8n'89+ 8+8!b8=58l8cu8^V8}788(S8Y8D8H-84s8x5R8>j08i8،;838}88M'b8F@8rv8S8bm8b8z8vmq8MQO8R-8Гp 8688[y8]U8'd8,[C8"8?89s8\򷽿8v 8.[~85]8Q<88l8)8^ﷂ8d8X*u84S8=188y8D88U8O뷗\8 뷰78$5N8f8v88Iw8[O8v7&8跹8D跏8緵8(|8)1O8"8z/8淬8)i8jRg8h68m䷣8Z8p8 i8I㷐48;%8Bⷭ85(8ᷙT8z8i88\b8߷e#8q߷ 86߷ 8q޷q] 8k޷ 8g޷ 8՛ݷߋ 81ݷbC 8Iܷ 87Yܷz 8۷'b 8Bz۷ 8Y۷ 8֔ڷu 8ڷ$ 8ٷ 80ٷ~~ 8pط) 8:ط.8i׷}8>׷%8Eַ8{<ַQt8WշN84շ8ԷId8(Էf8ӷ8ӷO8Kҷ8 ҷ?8tѷi68з\8]Zз.z8Ϸ83=Ϸ8˭ηK_8η8܍ͷ8i̷*E8l̷8 ˷08=K˷+-8yʷ7)ʷ7Dɷ"17 ɷz7yȷ7Ƿ7sZǷQ]7Ʒ;7=Ʒ]7sŷJ7#ŷY7͗ķC7 ķyC7Z÷7·7p·G7 Ҡ7b376V7XL7տ7So7Ҿ#7R/7ӽ7EV7ټ U7V^ 7㻷7js797{YH707"7/4w7N75eA7/÷o7Rn 7ᶷep7q4797A72&'7g7K 7޳o07rٔ7H7]7/|7}ıP'7Yx7ﰷ7W7U76$77.A7pΝTj7n7707P&7Lb7N747֚|07xQ7wf77 `797տ7Hr7뗷7 71G7 Ֆ7Bxx7b7R7aOX7)_7Uy7tK/7~̺7|j7i4P7=ג7yB7߸7=}7a7~7GXV7lHS7pꏷj7W07.ε7ώnm75q 7ͪ7I7T7ԇ7k '76Ʋ7׋/f74w7.ɥ7E7V7a7f&7~4ǯ7`ӈ|h7r 7મ7zL7)M\70놷7 27&լ7Oą y7a77Fe7f9 7pփ7hs W7P.7- 7IN7恷+77w M7I7!Z7T7'7a~7}d7|7Z|gɥ7J{I}7hz&27-y7x716xU7{qw,7vǣ7u€7^$u;7c`t7s7 rl7rZ(7Rq]7p7o\7 o7|HnԠ7mʐ7 lIL7lo7BkFŸ7 j|7i67iiG7Ah%7ga7fx7~fѝ7DeL7d ?7cj7c7Jba7a7`Λ7"`7!O_i;7Ϗ^7]7]c7FO\7[ؙ7Z7ZS7DY7XӘ7,W87V\7*V$7aU7 T 7S7ARZ7G-R.7\Q7Pޖ7eO7N7( Nx7O6Mt[7L^Lj@78Ke'7EJ7IC7H7QHҕ7>G@7cF7E7{D7Ct{7*Bi7B{W7HA6D7r@/7p?7w>7r=7*=eϔ7.^<.7;(7:Gr7:#O7B9x)78`77Fד7h77N6~75P743!7#-47{37-2I7 2_7Aj11707* 0ڑ71[/\7..7-Dq7B-W7U,D7+!87+M37P*67)C7(Z7r'|7'72&7K%N,7\$.7+e#7d"W7zZ!cۓ7F -o7'G7ȕ7E7g7:BFS7?Q7`7M77&j77U77I:7. [ţ7 B`7_  7B@Ũ71dی7~-a7M@7 8+7> 7M77# $7xﶼ/7zC@7'/T7 |j7/D޶x7 ڶ7ն7FѶ7aͶk71ɶr7D Ŷ7$[7ּ)7Lиd7ش)7~7!u7 b;7澥7\=y7Ԟ.7A{I7o:>7k-7c 7̏7"Dg77827:7O񅶫7AqH7ăm77[7$$!75,7\7 7б7Y~7z}7Qy|67r{f7zF7j8y7>xi7av/7u@7YtRp7zs7r7riq;7op%7uoT7{n88$]$88/w8j8G8q8xW84K=8h#888 8/j?8=8}8)`8pC8%&8Ͽh8g`8 8u8(`8yo8ʰlP8Y18d88QS88ա֒8Is8XS8U38F?8u8N8_28v8W}iw8K"X898j/888Ti8Du8V8;f8rVI8{}+80[88^88`񷢘8={8tg]8|?8C!8ﷸ8[A8}8Fe8:8h8tzG8'88G]88 8Ct{8^W8귙28-) 8= 8w/8H鷗8S?848@,8AKN84|}8䷪J8B8* 89)871u8=8z8K(`8Z᷾8oP88R8 Sැ8߷{P8e߷ 8+߷68P޷ 8_޷:8Cݷ 8QݷF 8!ݷ[ 8Sܷ 87EܷK 8F۷p 8a۷ 8ڷ 8vڷyz 8ٷ% 8ʄٷ! 8 ٷTy 8ط! 8I ط 8W׷)o 8׷ 8ַm8 շk]8wշ8Է8eԷE8ӷ8Nӷ8lҷ)873ҷ8ѷRk8$ѷ 8з8(Ϸ`L89`Ϸ8η"8:η-8֧ͷ~8tͷ}o8̷8=˷q8Y˷T8ʷ82ʷ8Qɷn=8o ɷ7yȷ 7Ƿ5V7YVǷš7YƷ75Ʒ<7lŷ7ŷ7ķ.7}÷7Mo÷7·,7Y·77H57@7<7hH73Q770d771`$7ke787H7QB7ɺ 7QXo7ٹ7cW477dz7[7@ݼ7O"7 7e@7YеA7`77P+c74+7w#7:ʂ7̲}7%`=B77?7b7$t7WC<#7ׯs7)l+7xH7{g7Q*$7Es7`T"7鬷?77q78y7@7֪P7ElP7+7<֛7 0& 7Ǩ7`^7vi7ˍb7%X7a7WM7 F7JGH7"7ռlH7W7N77'X7@âM7 _h787ȗ}74 7Ѡ%7o%7 7뫟JE7J7鞷h77(&7ȝ$70i7 P7۪7(Lg7훷7G71zI7Ԛ7v#}7P}7I(7h_M7X7Ń7Ic76헷7㐗V747sؖ7B|*7 Ǿ7Õ/c7gR7{ |7477RӼ7gp7ᙓN 7@=7D77&`}7ɑ7xl+7R7:7T⋸7D(7Xŷ7G:b7܎7}ٜ7 >:7I׵7[aju7@:7<7CdO7㋷7⃋@7#*7|Êɲ7bh7HA7eӧ7L@G7ވ7~}7~(7깇bɯ7Wj7; 7?270P7΅c73k7C:7:ެ7 B7ރ)7{ϫ7_v7 7Q$Ǫ7Qp77'Ʃ7`Ār7#a7ͨ75{7io~+7y}ݧ7|7 |A7X{7Wz7Fy`7k yM7DxΥ7Nw57vG@7 u 724uy7ptwo70s*7r7'rꢣ7HdqI_7p7{oXآ7oo锢7[nlQ7m 7lɡ7lj7Wk@7j7}i7ip7Vh)7xgL7bf7f\R7Ze 7Sd7cow7c-7ab7ao7[`hO7'`7h_ٻ7^r7])7~+]7k\z71[YT7Zz7/(Z˚7ieY7XI7W/ 7lWΙ7PVa7aUy\7۾T&7S7'S˜7lZR7Qi7PQ@74O.7Ou7lAN՗7kM7LW7K7Jf7 J1P7g/I#;7_THi'7xG7NFm7E7D:7 Dі7=0C7oVB7}A78@P7?x7`>c7R(>[M7=W=47Y<7ٻ;57:ޕ7):뽕7c97B8u77M7!7}#7e67V5˔74ל7>4m73S<72" 7m(2[ړ7x170{70N7j/#7.7h .ג7EX-7,75+u7s3+)}7&v*tw7)z7(兒7#(7pR'鼒7z&7U%#7Y$2i7#ܼ7",7!7c *7ܸ7,KH7cu7,D7 77.lr~7 t7<7s,ݝ7"7sy7e7 Z70 7pw |7?%7ݩ7 Ǣ7,t7CgR7:7B-74(7qy+7q47}qB7YS70f7b޶z7/ٶ7ն7_wѶ;7BMͶ7c(ɶ`7 Ŷ7=73r7BF7v77-7nfM7 _7P7d7Fv7{ 7Ƙ7wǕO7?̣7ue7_7VcD7i7ֆȀ7 e7脶T7A7ăw57G>e77$$7577I78yy7m~֞70s}7&|c7(,{#7yS7xL7w7vo7Pu57Wt77 sg7r7'q7Hp38b8&58r{8c8f^K828Q8$8;88?8q?8TE~8c8H8ȁn-8)8g8{8#8=8u8&g8J8q-8X88'n8}8g8iS8Tb8kE8$d(8h 8fv8\8}8ܚ87Q 8mc8oG8B,8*88=1818x8̌8r8apX8Y>8եH$8G- 8$88+g8!ݠ8Snj8k8߰ﷻP8CRV588l;8X78zD8{8/8Ch8se췼H8w 췎(8뷲8R8N8=귺8D|8-X8鷰28:O 8=88958i8?82F8z8淯8828!Z8H)82^8e_8M8N0[8㷳$8)8*\8TLz8y?8k88g089 ᷂D8r8rK8߷ z8׆߷381"߷8޷8S޷W8ݷ 89~ݷ%8ݷ1o8ܷ8X/ܷZ 8۷z 8&F۷b& 8ڷ 8>Uڷ z 8ٷ%" 8l\ٷ2 8 طDo 8[طm 8׷ 8S׷%\ 8^ַ 85Eַ 8շJB 8_0շ'8٣Է8 Էz#8ӷ8ҷgb8eҷ8qѷ~8y@ѷb?8з@8Nз#}8OϷ 8ηH8WηZ8ͷ@8q+ͷ&8̷j:8[˷8g˷:|8`ʷ8,;ʷ8=ɷb8ɷ8zȷݩ8ǷeN8RǷ%7Ʒ27,Ʒ7>ŷT7D ŷ74yķ@o7$÷7\÷7 ·j7C·7A7.iq7-=7&7727;7e 7Y7 W7k7=7NPw7z7쟺77&7738X7.¸7M7طv79e7m27O717ҝ'K7i-7m7M_7޳&7oa7mdq7/J7-%'7a7I7Qܰ77n77J7'u7ۺ7Nb7k᭷H7t 7g7/7/E7ë7X7a쪷u7‪7F77?7ը7j7k7"27-4R7Ħ7.\>7󥷭7틥17X$ͭ7+/+7eV7v*7O7~$/7Ib7sZr:77J7.7ˠ_7hc7y7蘭7Ce7➷&)7ݺ7!M77abmu7E 7o7F67蛷%7:e7,17}Ϛ7r4077Bc7\7\7Ĥ37H7헷 i7c/75d7-ږ:7~7#zq7Ǖ 7k77BC7޾7X7OB۵7 Gx7)7 07ϊP7o7D78[+7K'ʲ7ꈷDi7ψ7&f7ć}H7b7扰7uC+7:ͯ7ׅco7t=777Y7JW7n烷7񃃷I7k 7༂7SY@77=㓫7.>7Uˀ7g7E7B7|~7}U7|7++|7e{n7z#7y\٧7y+7xRxG7BwV7Gv7vks7Cu-7t#7sϤ7r`7Q7rP7tq٤7ղpЖ7oS7=/o7mnͣ7mH7lF7*l7jk7[jz7zi47*id7bkh[70gb7JfU7.fgӠ7Gpe 7dRB7c,75c7xbe7?a<7`О7>`7_<7~^7^Z7`E]s`7D\J7[ ќ7q[⊜7EZF7Y7TX7W7m9W6B7sV77=78777,=77*6n75WC7 5u7dR473<7257E72U7҆1$7$0v7'0qŔ7x/䗔7 .rl7.C7j-L7 ,A7L,7O+ϓ7*7f)7)Ѽ7S(Ǔ7_'ܓ7O&7%(7~%`7 $7v4#:7 @"PY7B!ɕ7; J7J+ۖ7}7.7üa78ș7==7S7m7'w՝7ݴ76/H7n,77u z7N X7 7U>7%77W7Ryb7sH7).l87D:,17:n17 177 C7涤Q7T&b7ݶ8s7+ٶP7B}ն7#[Ѷ;7<ͶW79#ɶ7MŶ'7 xJ7avRp7u7Yt7zs7rk/7q8:h8$ Q8:8Y9#8$ 8X8+8O8f8*ʒ8xy8L`8 G8r;.88:8886E8b8]^w8~4\8B87g'83 8E8H8w38%8p82bm84S80980[88R8-887~P8H&Ȉ8~p8TukX8X@8(88ik8)8 8Y8`38עj8G󷵇8q8xKZ81C8,8-x84}808%a8<*8m08J﷼8&n8ʑGU85<;8 8~X8z#n88nu8_8}r8KcR8) 9288\x8888Zځ8鷳[8跌48]_ 8\ .88b緤8Aa838cj68}8巡8r巜r8h?8 8wd8s#|8Pf8x,8"88ⷺ8r$x8x98ξᷦ8bᷳ8oEs8{Y.8E8߷8߷oV8߷n 8ӱ޷8H޷p8$ݷi!8-nݷy8 ܷ-~8ܷ*83ܷ8۷`8'۷'8ڷ 8/ڷt 8ɰٷ 8/ٷ~ 8.ط` 8&ط 8׷ 8׷D 8ַ 8շ- 8qշ# 8fԷ 8QԷ_ 8ӷ8,ӷ28Dҷ88ҷ 8lѷes8з8>зH8wϷK8 Ϸ8tη8ͷt&8XBͷB8ڨ̷d8V̷48u˷r8ʷb7 7! 7m.c7ο:7?Q7⮷zh7etx7C7ڗr7)7:)7M7 ૷7mrjC7'7Y7*j7佩[7RQ967娷7y7b t7e717Q7̦7b57A7 7&7:I7CV7 7ˇj7I! 7>7U7ғ7拡7'7FĠ*7IaL7@7Ü7/;[7 ڞ7^y/{7#c 7X7Y177mTZ7?>7l77%7ɚL7lm7QC}7Pm7X7I77;F}7 뗷\7ܲ74nM7ږ 7!75$y7Lɕ17XnR7W|7@7]"77jW7J7/:7V}&7P77ۑZ7~71"M7xŐ)7hû7\ ]7@7lP7-7ǹ7J6`b7׍67 y37[37溌η7v[6j77ߛ塶7; >7`ۊڵ7zZw7e7±7NWqO77ؓ71*7χɲ7mi7Y 7m7DK7YᅷQ7~727֯7}SRz7I7Ů7Z(k7Ă7` 7d7\ 757Ҁd7n73 7Okn7V~=7 }%Ϫ70|77|47.r{ 7z뜩78yR7#y 7\_x87[wy7v37$v7Pu7tc7Qs7sۦ7Fr7qT7p7apϥ7@oG7~nxI7(m7lä71=l+7}ki<7)j/7is7+>iIn7~h(7g7Rg7Bf/T7e 7d|á7dz7Kc*17cbO7a7eaR7T`7l_7^]s7^b)7]]ߞ7&\͖7?[N7 [@7`Z7AYB|7X87dX,7YW'7ؔVx7U<7U,7&AT˛7wS 7\Rd7|Q47RQc7EPܚ7~uO@7ģNP7Mm7\LM7&L/7?PK7\xJ7cI7Hϙ7G77 G74F똙7YEۈ7V}Duy7ΡCyj7B[7AL7A<7L9@b,7a?7>Q7۶=7<ޘ7848<5e^8緼484 8C8深8?8S淓R8淧!8x8b8 <8*Q8n䷷8 8㷟8?tj8-8c8p8Im8 *8`;8Ӟ8iV8A2 8p߷8x߷7u8f߷&8޷8;޷~89ݷ28\ݷ18ܷx8 tܷd18F۷8Q۷%8۷ $8Hڷ8;ڷj8ٷF 8ط% 8uط/M 8X׷u 8`׷ 8ַ) 8jDַ 8շ}c 8n!շ 8Էm 8ӷv8 8bӷ` 82ҷ3p 82ҷ 8ѷ֧8зC8dз8Ϸ1|8-Ϸ8ّη˵8ͷ S8Yͷ8̷ 8! ̷-8˷78ʷ.m8Kʷ 8vɷ8ɷP8G{ȷ8Ƿܖ8HǷ:8Ʒ8eƷc8!ŷ+8ķ8Yķz8÷#84÷7%·F7·?A7k77EnF7,俷@7t[V7Ծ'U7N7sɽ 7-Fh7>ļU7C"7UĻ~7.F[7!ɺ77 7d>Q77E7=C7Ͱ7l]7N472}7 27%4)7+-{7?t7lM#7ݬiy7n7'7677İ 87AՕ7DөM7dV7y7 57τ7F7AW7զ7 j&279797)#7ݿ7Vu77Cj7G7f7P~7꡷h75D7g bq7/"7XT7 7Qٔ7q1!7Оo7@o=77w]7O57ށ7yj74˩7֛>7y7*k7+7d717AA7Q c7$7"7vA/7旷7{b7$27זЖ7}07^#7ɕe7n&7737_7f7$<75Oי7!U37ۘ̿7_=f7ᑷ57ׅk7)17r͐ʽ7pc7(7'7Y,/7beȻ7a7@7E⍷7K.7$ ȹ7Ō b7fV77f17FS̷7r抷g7̅7$랶7É;70b׵7tt7w7F<ͯ7هN7.w7S 7K+7NZ̲7ꅷdm7/ 7#b7ʿfT7[%7 7A707̂7!h671߮7K7k<047؀߭7t7sV:7 \7j~Θ7}I7}h7CC|J7}{4b7¸z7y̪7/y7ekx>;7w7v&7 v=g7]u!7FtLݨ7s87sU7Trj7Rqϧ7p㌧7p_J7Oo7BnfŦ7m̂7m @7~Nl7kι7j v7j17Pi7h7ga7g78Vfԣ7,eی7UdD7d72_cz7bh7ia7-'a:ԡ7j`7Ԭ_>7^72^7Ot]_7h\7'[̟7u9[p7DzZ=7}Y7X*78Xn7vWN-7^Vv7CU~7"*Us7cT>:7SP7RΜ7R7Aa7=&O7K=;72A<&7p;V74:79ٙ7t 9ܻ7iB87|7y7H6T75,7:57^4-ט73(73{7Y2WK717507D007ߔ/L7.U77.'7t-7,і7+,V7z+7!*n7 *W7&[)>H7('@7'D@7B'kI7T&\7%z7Y$7L#ږ7"r7~ "m7!P̗7 o:7a7OF7_\7G7T7wU'76i 77ɓk 71&7R7M7j7:D7 U74 97O ˩7m7G7 ܮ7L87]}7V=^7"H7ZCR<7X77d77Vh\=7e%F7]P7Sݶ[7Fٶe7:նm70ѶXp7*Ͷ7n7*ɶ'd70ŶO7A07'_7ވr7E7 P+7Vl7ݪ)578jO77ݠM#7ʸl,7&97h7G˜7E֒$@7s 7R7Y!7/7=N7R#7ՇqH7%/8x77 7 e7w,7\7󚃶s7^97M75\7#A7 Zf7fF7~ 7}7{/7zJ7yz7>x7DwH7u7t 83_ 8# 81h 8ccâ 86 86 +w 8:a 80K 8 5 8Y 8X.k 88Z88Y8kc8Ǘ8X(8 j8S8s[r=8&8̳8Z`X8 <8C8fw888nfx8c8N8t:8!&8J8z8&88w~k8)W88f 8)8 p8H}^_8&N8i>8w.8 88o8)8Y8dq8W o8ر78LXʞ88}8Kk8A Z8 G8@358L!8 868!8;8#188O܄8H0j8O8뷵384뷐8,R8A8>c87鷰8s8iN鷧O8NL*8跷8vb8跹8O8|y緙\8,,緔/8;8淄8D}8hn8oW:8Y&8 巑8g䷅8k\8!8T8"t08z~g8x,&8q78ⷢ8cX8Mau88ܡු{8?෢.8߷8r߷ɏ8߷=8޷p8-޷p8ݷ>8Hݷ"8bܷ8mYܷO38۷J83`۷y8ڷ8\ڷ 8wٷ[8OٷQ8ط389ط[58ë׷ 8׷m 8ɉַ? 82շH 8`շ? 8DԷ{ 8+2Էs 8͘ӷ 8Nҷ 8bҷWB 8Zѷ 8*)ѷ*w 8Dз 8Ϸ8MϷNH8η8PηY8oͷ85̷M80̷"X8o˷8tʷ8Sʷ58ɷ$8ɷgw8/{ȷi8Ƿ18CǷ_8'Ʒ&8ƷN8wŷ=O8ķ8zIķ\8y÷E8 ÷q85·8 ,B8Cm707Q.7fƿ7P<:77q,7qI7?"7F7[7bK7S.7ik7#7E7-x7O,7;z'7Bķ}7tMR7l׶'7bO{7K7y7T$p7Կ77q\7:7Dz7UB7㱷?7"r|7l$7Îio7%_779Q7:Ȯ 7V7孷67ws77a$7,u77<#7˪ s7'[7꩷#7Zz7a .71;7q+(7(7$Nm7kF7๔7`x777QC767-u7A 7摷7I@>7/vֿ7Ӑn7w77뾏67bν7f7{7I7덷D/7Uǻ7.*`7ό7p7**7Y;Ĺ7>Q]7707?/,7ΉǷ7lb7 7 7MF77ㇷ յ7r727%7VWO77 ␳71,279ȄԲ7+dx77֛77f7eӂ' 78o7 ']77B7ހn\7{7lo7g e7~7b}Dŭ72}v7QN|)7ֈ{uݬ7zD7yH7:y7vx?7wn7v(7,v 7iu眪7tHX7s;7#sЩ7Lbr7qJ7pY7Xp ƨ7^o̓7nA7m77m7^l z7pk77)j7!j7|73>7*F=P7q7L+7*Η7)*n7#u)7н(V79(7D'݀7&47q%7G$7$7 @#7 _"sX7v!7 7q7I7{7k7LM?ƛ7$7V7{97j.757)N7Lmx7 7W7 c76 /ԧ7 T7797|617e775<7gf7sM7r>786737n67<79hC7uݶNK7rٶQ7 նU7#ѶyU7)ͶO76ɶMB7JŶd*7)i707`˹ޟ7S7k7RخE{7(X07Y77V7i7rH7z7".7񾓶7kJ7'7HH7nU+7k[7-v17=7R77?7o7ᅶm7g;37Ҕ7=V$7GT77@7S7V7).7Y~]7z}7Qy|{7(,{7I2z7xeB7@w+r7v`!8!8)N!8{hw!8;b!8%N!8cQ9!8fm$!8!8_ 84 8V 8 8f{ 8| 8ڼ| 8Zhg 8@R 8> 8mm) 8 8/ 8to8W"8?8e~I8,8$8;x877f8CT8xB8Ba18 88L8y,88 U8"8]ߴ8Z8VN8ѱ8\~8q80Re89\X8lL8U@8X38d'8A8{R8.8U8J88 8*8iC𷜾88Z﷧8+=ɐ8W98Տn89\8 I8ߎ58:: 85 8Ւ8@88n}8K8=p83?R8u]28Up8鷓8ta8q(ب88跪[8E288`r8e緕8AB8uR8څ=!8:淔8[v8kτ8V巫M8 8䷮8lĞ8d>a8"8,x@8#㷻8|Z8Cvⷆ88#Q8mc88t8Ƿ[8CƷL)8jƷ8jŷs8 ķ88ķ8ء÷h82 ÷8w·պ8d8SH8O8*5e8?8#|7_7~ /77 7z<7qז72v76I7lw^7R7u}Q78ϧ7@7Q7P77ǧ H71ŗ7ܻj7F37Ҵ'7]Q7鳷l7u^7pĦ7 :757.{7r57Y°g79OK7ܯ7hq7G7kb7"}7ߛ(7(97]i7'B[7 ϫ7 \mh7$骷·7qv7[77]7 H`7ݡ,7u7T7o:7LDZ7ߟC7t|(77:7V7XQ7575bn7֜X7}x_7`!7I7`H77q7M7%73&57=7䘷od7l707ח-7~U7%H_7̖S7sf7q*7@•q7kio\7Z7*7d^&7%M7W7*R7a7]7&D7鑷@O773~7ؐ?7'}_7Q!jC70ŏkڿ7hYq7 L7򮎷?7Q@67Sͽ7Ǖvd7f77،$7y*7l»7úZ7Z7t7ٙ$78꽹7׉W7%v7Og71'7O÷7&퇷J_7A7#'d7Æi778`ֵ7zuu774y7ZЄ%X7l77]JB7>n7ڂ7v47ܱ7i74I/7倷ڰ77,T47r7~7&}B7}7X|75{3Z7z7C zĭ7Dy{7 x27w7[v77v&^7)uu7tKԫ7\sA7/sL7nr 7qƪ7]p7-p]B7loI7n<7]m|7-m97nla7nk7wjq71jA.7$siG7h7g`78g7zfԦ7e7[d)F7Ad7̈́c䴥7byk7 b!7Majפ7 `7?_A7}_u7Z^77ʝ])`7\Z7F#\ʢ7e[7Z77WYG7{*Y觡7jXa7êW-7V)ڠ7'V䘠7dUrY7*T7NS73S7NRq7Q*>7ݻP 7sOyޞ7#O7UN7ʅMc7L@7K7 K78J7bI̝72H7G7,F7E{7{$Ek7}ID\75nCvN7גB@7A37@&7c@57(?$ 7RP>&7y=7%<ڜ7;-Ȝ7:7*: 7)\9惜7ԏ8oh77J76G+7C86! 7"u5+74737;3f7297n1 7A1ښ73c0=7/u7M/mC7tS.7%-W7G,7I,ք7+aZ7'*379=*57p)7](ܘ7 (˘7f'˜7&7%GȘ7 %٘7S$7# 7Ĩ"2R7!璙7 7J@=70ꨚ7 z$7"7^K77`7k`7/ f7Y7_^7-;u7F7bפ7EH$7^ 7Y 7?0 gm77/7"B7Pa7L77k7dP7ES+>7{~27Y-7超,7䶼.7ම27Fܶ&77ضH:7 ն\:7Ѷn67p.Ͷ-7Hɶ7jŶ7.47-нz7h7j87Ӳ/7NT77ܫ7< 7JNYR70v7o(t7r?YO77B 17&S7o7s; 71k7\{+7F@7VÊN7#7-vR7ψ7)g7o-7ۆ7F5P77g7脶ݖ7A97󚃶7^7M#A75p77 Zu7f7~%7}^U7{%7z7y7Ցx5r"8^"87mJ"8@%7"8f#"8"8!8!8eY!8S:!8N!8O!8s!8;r!8^!8vK!8N#j8!86q%!8}!8?+ !8O 8 8J6 8= 8e֦ 8C 8OU 8"u 8RXe 8U 8ZF 8*bb8 8=* 8 8qS 8q  8,8~681-888J7y8o88k>988Ė8_B8P}8t8XCk8*c8 ]Z8BbQ82H8>8?488*8 8<8* 8e8<88gU8=>848k8D8E{8ѡ^f8NQDP8v88^I 8c\8e8n8V}d818p8M8R)8 鷤88x跒8z0ʋ8緃`8緱38XQ8h88xp87a<8;78u88'ķ8Ύ÷R8:·58#a·8g8z928x88]48Z8q8-轷98`7ټ#7mT|7лS7No-7ͺ7,N7Ϲ17Rx7ָJ7x[-7V᷷u~7h7ﶷN7wj77 7@J7L7(7㳳7?a7Mʲ7U7&ᱷV(7lh777A(78g7h%Y7R7;'7ƭh7Qê7xܬ7eg17_@w7l}377ғP7O!7>76};7Mè7O7ݧ97j77aL77v76Xv7&Ȥi7ZH7죷޵7.%7@ٖ7C 7?7աj7Kms77!o787cӟq7o7 {7먞h7Gu7坷7l7%)07Ɯ7OhLN7 7p7Qz7 7Z+7>b7䙷 V7D7D07֘:7}б7%I7k̗7s z77Ö7dkC7Mh7Ct7,c 7 7ѲY>7zZ7n7Tp7}P#7n577D$d7ꑷ7Б7\6a(7ېľ7U7h%=7ɏN7mI727C7Wؿ7n7ᜍ7>7d317ǽ7""^7Ë7Ic7^#77A!S77 7;7ͷ7XCR7M77/=%7W̆7·7h_7d77<=7.؄޵7sQ76#7ƴ7E.k7[Ⴗ7|87&^7j7>O7ꀷ[7Ȇ7"7}b7e~7z}7(}Ls7b|%7{د7ze7zB7NyS7ۊx7uwh7tw!7Avۭ7uo7ܽtQ7ks 7O;s ʬ7zr7qQD7p79p˿73zo}7n;7vm7dN7Ǭ=F@7<07;7+;U 7X:%7.978ɝ7j7t7#7 7[6q7C5sO7H4*747pU3؜7^27V17D*1P7Au07Y/7[/7a.o7)-V7-%7wW,7+nȚ7*7FN*Av7)eS7`(579(7' 72&7& &7K%7$`7#27@"Y7}"72!̚7#M 7_t7>jnߛ7kY7c7R:~78(7h7U 77g77I7\g77tC7m R7a 7 7n(7}7{R7v 7LGʳ77xOo7ukQ7_;7,7 B#7i趠7eJ7ඬ7Lܶr7Pض7iԶ7LѶ?77Ͷ7&`ɶ7|Ŷ7gԥ7o7gJ,7˶'7Bl7̯<7j[7>#%77뢶e7_7jS7o7D7T7:~kB7X|7]n7(H7o67拶e7F@7a7󉶾7L7󥈶JJ7^z7X֩7537 7 e.7w^77G7o757S87VXh77Y~7z}7Qy|q'7r{7W7I2z0/#8qr#8OE #84"8F-"8s"8 ξ"8j;"8?"8O"8pt"8b"8f+P"8>"8,-"8G1"8B "8׌,!8E;a!8!8Z!8HϷ!8L!85!8Y!8< 3|!8!Xn!8)l`!8[T!8G!8;!881H0!8T%!8!8D!8!8I 8V= 8: 8 8f 8 8w 8lsi 8! 8 8<} 8m* 8Jk 8ӃX 80? 81 8Μ 83S 8%񷑑 8 85 89~ 8v 8W8n 8-e 8@x\ 88\׷8%ַh8!ַ8\շ8Է'8t<Է8ӷR8ҷ 8VLҷf} 84ѷ 8oзZ 86UзA 8Ϸ[ 8Ϸq 8Zη 8Աͷ 8ͷ> 8^`̷( 8$˷2v 8p˷ 8FiʷӰ8ɷqO8ɷ8ExȷG8mǷ081Ƿ8Ʒu8ŷ8`Pŷؾ8ķd8!ķ- 86{÷8·Z8I·8 8!W8ɋ8d8jX8ܾ8:P8lŽ[83<8ɳ8|._8= 8&m77$7Pk7N'%7qw7.d_7ۭ797IF7G7ϵ7X7ഷb7;j7󳷞7}'7f7e77饱7/W7ӑ7C7ͯ7iW>7ஷ!x7Sj7󭷂7|'7c77777*g`7l7<7[Ʃ/7-Py7Oڨ7d7立*c7({7 7c7 y7{7<|7+̤7'\RD7죷q7~'7k7\378{f7͡7 dR7T7F7+i7ş D7``7H717=6&U7ԝ7sg7m7r\7U7.7.7>7⚷R77 -z7ҙ7/y7:7ǘ7nh7a7o"7f.77%_7S`k7 7'7mZ,7=X787T7q7>7L|N797]|7B7鑷i7n?76}7ܐ3k7Y7'"7̏h+73q7iU7Fp7\S7:7(7D#>7挷1ӿ7=]h7g)71ʋQ7j')7 H7GU7I7~艷7j7J%77ÈEL7`7h7777SԆQ7p7 '7nr)7Dȷ7߄h7z 7Mt7[N7L?7炷)7=7]7)7 U]57߳7E7(77$D7y~ 7D}C72}7Hl|7x{-Z7zU7Azð7Wyy7x07w7 wڡ7Kv[7u7t&Ѯ7t7FsMI7r7{qTí7q‭7#Fp>7цo7nǺ7nx7=Jm67l7jkW7.ko7"Qj,70i*7dhE7h`7Zg7fթ7XeJ7!"eYH7dd7cY7'bFo7_.b%7qaYۧ7!`Ȑ7_E7;_t7w^ɮ7]b7^]77I\˥7[7Z57Z7ETY+7 XY7MWd7Wẹ7WV7U?E7]TZ7TeŢ7!OSr7RM7Q7PS7 5P7/kO`}7NO7M$7M76L6ؠ7eK(7cJ7Iy7FH^7wHF7n>G17PfFd7REy 7D7C7Bݟ70$BП7MIAHğ7n@7?櫟74>Z7=7=ރ72<{t7\;c7:Q79=7n8'787K77Z6M֞7Ϲ5Զ7n4Ô714o7q3H727(17K@1ĝ7^0g7/{d7!/227p.87-_̜7.-;7Ue,i7+97 + 7]*ߛ7)7)7O(dv7w']7&K7-&@7q%4>7$SD7#IT7^!#n7Q"%7Qz!oǛ7Ӝ )7\R7q#7Lp7hu7Un777Y+Y7?K7 _Sߠ7:(u7s7{7D77x7b7K 7 u$7c 7;W$7g7!pa7ַ37;Ӵ7[`+7q7O7hq67($7붾7-7F䶳 70pG7ܶ77ض7Զ7lѶ7EͶ7#|ɶ7BŶ7¶m7[277"37!7 Sz77ȩ]]7qc767Ơ78t7_(7 7,R7j7G{7h7掶en7󰍶+7_ 7c75~-7D]7 p 7wɉм7"-7N|7ՇA7%/q7^F7V7i7-k/&7󚃶U7^R{7M757 7 Zk:7f_7m~7}T7&|N#8WI#8n#8#8 R#8#8o5#8Dp#8_#8N#8=#86,#8_~#8D #8->?"8["8)"8 J"8Z"8"8:Z"8 "8O~"8m{"8o"8Gd"89Y"86N"8@D"8r;"8N2"8h*"8""8Hg"8+"8T:"8~ "80"8"8+!8[E0!85'!8Ȧ!8W0!8 !8S!8e!8xA!8!8 qn!8!8i!8y!8.'!8Am!81!8".!8!87!85!8!8ؐ﷚!8>6!8ޯ!8z!8VL!8sU!8Km!8^7㩷~7|k7a7{L7>7Y707567,7.7CQ7Фy7^E7f7R}"7 v7w72O7š78Z37e7t!747Զ7}Pf7-랷&77#7w/7!`\.7$7 nC7dA%7x㛷/^7Un7)}7HΚ17Fs747 7e]7 7 7\y7W7M7V7|7l7RW7ZD7]7OCt7 7󡔷ģ7DKO;7j7ci7$F77薒-7>/7摷(Z774I7ېm7V7' D7͏7rm7y97ػM7_C)7c47"Q7DI7댷y7j- 7.k7ϋ57pʿ7n_7ư7=P=7R; 7 7d,M7dʈ7h*}7f7k37"?@I7ۆ 7w77]7KW7z愷7777ٷ7S}7?!7'ƶ77$l7Z[7Z7f7t7$-ؽ7k7~f7~ȳ7;}y7'u|`+7<{2޲7z7$zF7`y7x7}wk7wB$7Tvݰ7u痰7dtR7tl7 Psʯ7rH79q^D7q7Qp}7Вof}7$ni;7nz7vWm7jllu7k37km7`jn7nij7hP&7'h7>jg7fnW7e%72eFʪ7udڂ7c:7*b7s?b\7ۂa.^7Z`7 `Ȩ7QM_)}7Ԑ^n17c]j7]L7Z[\GM7[7Z%7$Z7>7<=Ԡ7d<Ơ7Z;ʷ7:b7B9797B8k7t7R7ʨ677J575#7R4ٟ7(37<2O72b7>X1670n7/ٞ7!4/7.|u7-FB7!-/7s,ܝ7+?7+z7k*L7) 7e)7b(Ԝ7'77k& 79J&7%'75${7Y$67Q#w7R"a7!Ϝ7: 7 >7#797jFJ7Kž7FHJ7;97"7A7 7\;7[eL֣7mդ77,k@7g:7 d74 ֪7] =7=q7#dF77^˰7m7qc7ٵ7L7:>q7K7(.70C7N77 7;ඩ7bpܶ7ض7Զ 7Ѷ76VͶ74ɶ@7qŶd7C¶ 177 7tE767߰H7Qd7u7Xk757{H7\57m架7X 7(wI7Ηc7/7`7* K7#77Wx@7󰍶>p7_ 7%:7'7슶$7gFT7ҟz7ψ@7)7oc 7ۆ)97 h7 e7w7=7G7eM7+}7S7VN7f0717z}$8(!Θ$8$8 dw$8f$8shV$8"I"F$86$84&$8$8(A$$8;#8ۛ$#8J#8m#8#8W/#84#8#88j#8#8(t#8Jj#83V`#8V#8s/N#8BNF#8Dz>#8t7#8j`1#8+#8"#8p<#8#8Ǥy#8X#8h a#8#8*sy#8 &#8#8Ɗ#8<#8-#8c#8-P#8F!#8##8J`%#8(#80*#8m ,#8-#8R.#8y/#8e(/#8P/#8+.#84[,#8ﷹ)#8;0C﷜!#8p#8O9#8U> #8#8Q"8nD"8h""8"8*"8D"8O"8뷏"8nGm"8");T"8~t9"8"8]!86H!87!8rI!8W鷏r!8J!8跉!!8I 8X, 8: 8~i 86 8sXp 8Q,8j8Z8O>8= v8 巷8`|^82G8䷍8ɍ8 KC8k818UA77BU7|@T7~SFp7dR17Qv74Q}7nP*7OO7N7RNc7KM7L䗣7(Kq7>JFM7JJ,7AI 7!nH7GXآ7FS7kE7E7>D%7eCy7Bk7Ap^7@7R7?F7#?;7I>/7p=#7<7;c 7Z:u7k:=7A9ء7o8ġ77Ү76:76){7Z=5]7?v4n>7T3M72E77/2bϠ7/r1 70x7 /K7H/7.H7-7E1- 7Q,P7M+7&+G7z*7r)7 )`7s(g87 '97'7b&v۝7%Xȝ7P$o7;${7{#J7L"˝7|!7!! 7YL :7 qv77ݥ7747@|7o7[7z@o7uR77 Q7"j7{7Mg 7(7;,Z7V 7# 7&# KT7Ʈ7+H7wdٱ76y7G%7X;޶77]7on7}E7$7/ 7/7W{O7H77Jܶy7%ض7xԶp7VѶݑ7~jͶw7ɶVU7_ƶ(7#¶77&NZ77 }7Zr7?LO7$'H7,7JMG7 7֟7"Wj27 7䘶G7Ж)7#̔I7쒶Y7xSI7!x7 {7wԎ[7-!7N77g7s7i:7VÊ7]7L#L7󥈶{7Շ7%/u7^7V07_`7-k%7󚃶7^􂶱7M75D7t7ʮ78(g%8]W%8G%8%8%8w(%83M%8" %8t$8ǝ[$8J+$8Q$8/$8T$8$8$8Rd$8DZ$8{$8x*q$8+bg$8,^$8%U$8"FM$8pF$8C?$8Rd9$84$8><0$8w,$8:{)$8.'$8%$8,]$$86$$8%%$8~U&$8{4,($8*$8'-$8T81$8P5$89$8p>$8N$D$8~I$8PO$8<U$8[$8Wa$8Qg$8m$8fds$8cx$8C}$8p񷝂$8tdž$8$X$80$8 :$85~$8Uې$8]7$8Hu$8$8R$8`ʁ$8z$8?vr$8~h$84]$84O$8`@$8b]`0$8`$8Q $8B뷹#83K뷺#8 #8#80Y#8kG귪h#8VF#8i##8"8NH"8\Ƭ"8QS"8qT"8Z$"8t跎!8e!8Y!8ccT!8*$緄!8深 8 82`e 8;E$ 8a8So8EcU86 8֬8\Xs8 ䷫#88"[}8ⷒ'8A87M7 c7S5C7$׋7|x7^̬7ʹ?7Y7Tf7k77p7oՈ$7\s77P77JN7v熷797tK7V7V7&7K7N(X]78Ã7^7A77{.x7`Ɂ07Vd׸7fy7G*76Mշ7[7 ~.7+~ݶ7K}=7|(>7ʾ{579z\7>4zW7oy 7x´7wz7Z&w27odv7u7Bt^7!t7bscղ7r7qN7%q 7fpOȱ7Ҩoʅ7nkC7-n7HpmҾ7!lx|7k97.9k<7\|j-7ip7i,7Fh7Ug7fZ^7fI7ZSeѭ7d7 cB7ecl7`b+72a/f7`7.+`CЫ7n_7;^87]g7'9]֟7|\S7[H7m[7FZlm7Y!7BXk֨7X싨7PW[B7V7U7uUl7tTT(7S7R7RZh7ELQO,7P7^O7N73NV7>jML'7L7KѤ7Kp78J"7gIg7HI7GP.7FF70F7!EE7nDiأ7Cǣ7aB7CA,7 A{7 1@74W?;7}>|7=p7:<;e7';X7;IK7*F:<7q9j,7x87727/6-7/6آ7zd57457373x^7M2R97v1R707X07 _/7.\7k-a+7HB-u7,Ġ7F+07}5+>^7O**,7)K7W/)?̟7(ݟ7'w7''rR7x&27O%7%A7Z$7X#V7"7"q7V!7V B7er7V7/7N7#ೠ7*&)7)7 B7U 7F7<c7;7b%7 7t,7WzI7 cx7 7,8 7 Vj70ٯ7WX77?e7X+7 7kV7(j78;=77v7궟7.綶7݃7߶7&ܶ7xضތ7dԶJx7$Ѷ/_7eͶ_@7ɶ7XSƶ7¶7QIb7延 7ʈ67?U%7< 7殶E7ݫ147O󨶟`7#?j7hYM7cˠ 7Y7D77%70C7 )77nU75Ȑ7J7gQz7Ҫm7>374 7o97拶_77 p7ҟo7=57)M7oXs7ۆ7 7 e7wq27=7b7G777}P!7ր$&8%&8&8K{5%8P %8&%8Pu%8%83S"%8 }%8>%8^h%8Y %8#z%8oo%88!e%8h\%87 T%89L%8D%8=%8 W7%8 2%8s1.%8xx*%8^/'%8SV%%8#%8Tp#%8o #%8.$%8{&%83K)%8,%8J0%8Z5%8 _;%8TA%8FkH%86O%8DW%80=`%8Xi%8 Dr%8{%8Pwl%8_+G%80%8.%8E%8򷓶%8%8\ %8 %8%81qt%8"V%8pu%8B%8O8%8[%8G﷛%8YP﷟%8\%8J%8 8cp8n8IcJ8j8#g^8cB8~8?؆8#&8jgf8>^8h8_8߷&8߷8B}޷&O8ݷW8Odݷdr8 ܷ|8)<ܷǑ8۷f 8I۷u8fڷ<8ٷR8ٷtV8wط8׷p8!׷8sַ~8շY8շ8=`Է68ӷ8ҷV8Cҷ8Oѷx8tз 8r"зS8\lϷ28Zη8η]8,Kͷ8J̷8˷&8.˷` 8{ʷ[ 8Xɷ 8ɷ 8ljȷ*4 8fǷ 8Ƿt 8dƷ 8ŷ 8ŷ] 8lķ 8)÷n 8q%÷IO 8·8m8HH848v^8e}F8@辷8U8ýG8488_ZG8w$8C W8B8o8yZ878u8<8v!88H{7b88[o898977747 |_7 $7֨h7c-%7m75e72M97h"7lyo7Z7O}72l7Fx7'7 7:7%ˠX7\-7y47777H7❷7u}. 77_]7/V 7&7@7j907ܚV7׀BK7%w7̙j7rD77˜"7kO7a(K7w7jv7 7N7k:77Õ_i7o7J7Ȕ/74t37: l^7̓o7w=7K#"7Β)7|y/O7"$7mΑ z7Sx 7!7ʐ77s7Z_7Ï7jT7717]G<7#!7짍_79LC77A767B؋77z7MPZ7I7o\~7K&7-7:77و79w%`7P7C,7;O!7놷/7+rQ7-$7𿅷7r[7ջ7葄Y7,R7ǃ7bA77Jػ7{72 7́ź7sh(l7p779zg7Ū7J~7U~ n7R}C7|ͷ7{37z17:z7vyl7ֲx+P7w7I-wn7~kvv7Wu&07t7)t7>js_7-r7q׳7_.qe7ppPQ7 ov7n˲78n-7|mF7Zl7l%7WFk.~7j:7iU7\iF7Thn7g)77fQ7f@7nce|W7d7ucǮ7-c7\qb57ʴa78`+7;`U7 _ 7^Ľ7 ^Fq7jI]$7\׫7[R7j[1=7VZI7Yã7pXW7Xb 7baW7fV3x7U/7(&U7fT7S_7R7S$R)ݧ7aQD7Pc7;OK*7O70NN7JM7*L`7K47:'K 7KZJ)7IXå7Ha7G7Gj7EEFqR7pE_<7D(7_C7B7B87;A7b@kޤ7?Ҥ7:>Ǥ7=м7 <ѱ7%<[7M; 7Tw:7ۡ9}78m77W\7)7H7Z627Z574737i337o2781Rz70-R710'7bw/7[.̢7C .75U-Lk7G,*879+G7D+uС7*B7))j7=)97(x 7'ݠ78'7 &7%o7_*%WU7v$MA7#l47#e/7H" 37څ!U@7 X7*{7K 7=F7f-7ڂ77[7/ߢ7dg7ʩ7 7gP07v7D7c7~%^27 7 7f}n7v;7E㶬7k߶7{ܶxu7udض_7ԶF7-Ѷ(7MͶ}7zʶ7Ƌƶأ7qö-b7/7MZ7% L7rɵp717ȇ77y7i7Q7¡(7^27+7c777^(7Uܚ7;Ó.7N]7둶7%Eg7-7VΏ7'L7W|7󰍶ݡ7_ 7%:i7/17VÊ`77L7󥈶7Շ7%/kE7^1u7V77-k7ăJ47^d7ow֓7Ё&8̨,&8K~&8S&8)&8!&87&8Z&8}&8ȷyr&8Egg&8r]&8OJT&8yKK&8+B&87;&8>)4&8eF-&8,1(&8>#&8mf&8&8E&8m&8VC&8&89&8m&8/&x&8u &8$&8R*&8 =0&8O7&8!1?&8p8G&8>Q&8N[&8Ice&8Pq&82}&8~&8Ba&8~&8F&8mf{&89&8V&8-&8:_&8'8'8(V'8 ('84'8o|?'8"I'8S'8Jw['8%8 %8Tok$86ڠ$8(?h$8緡-$8#8K.#88 5q#8.#8淲"8:I!"8UW"8C "8q!8v$ l!8N!8܀䷈ 8)䷶k 8{㷐 8Uq%8LzV87ⷞ8>ⷤ8a᷎-8]᷂8෱]8k)8?߷8-g߷c8 ޷Q8zR޷98ݷ}8 -ݷV8ܷ8\۷!o8X۷8ڷ"8ڷ'8{gٷ8Rط '8ط)82_׷=8ַ58շNU8Eշ8 ԷBo8ӷ=8\!ӷ8hҷ8ѷ8зK=8>=з8уϷb8η 8ηK8Xͷ"8̷8˷R8[3˷,8}ʷ8ɷ"8Hɷ 8Xdȷ(^ 8ҳǷ 8Ƿ 8EWƷ? 8aŷ 8/ŷn 8XķJ+ 8A÷$ 8 ÷w 8j· 8I 8+6q 8 8u8[o8žT801;8ܞ p8l888Ro8|h}8cߺ*8Wi8ѹ8XM8ʸZ8#H&8TǷR8G-A8ȶ8VJ}~8̵8O8Ҵ O8V8[ڳj}89^t8ⲷJL7e q7]鱷n7l7ﰷ7lr7 7{v#7<7xU78m73yo7`7w77ru{7 7r,7HDN7nvr7쨷K7k7r꧷7i7馷gS7jy7M륷17Km71E7t׋77#7bMu7ꎢ7$7飡7x07tE7M7ޟ7Pqц7I7ql717ɝ]7xc!7X7;E729]7؛f7yj7>7H7a 77M)7Sѹ7pK7)7Mq77# 7FM077줖3]7MQ7D7"7W7kQ7᱔7^V7 7׸ͮ7eE7H7>r71j7737k7k_]7q7j_77ѫ7ct>7` 7ob7X`7υ7u7^I7팷87748Z7׋7y{7 7¼7y].77mR7<7lۈw7y_ 7s76147]R7%_77'.7Å1(7_.¿7}3]7V707˃57OfԽ7u77j6庼7-с_7lj77T7?=7d7~U7 ~^7#Y}7(|a7{7{Ÿ7@zRx7|y,7x7w(73wGO7rv=7&u 7ty7$1t37qsz7Lrĩ7qe7X7q!7yp$޴7oߚ73oW7Cn7zmѳ7^l7\lK7eSkB7jIJ7iր7i<7ch7gz7fl7/fy&7se߰7_d7 cO7>c74b<7as7 ah(7dL`ݮ7_7!^{D7z^7Y]7\?]7[7C#[#¬7\fZt7`Ye'79Xګ7.Xg7;qWB7dV07BU76Uf7wT7>S~٩7RǕ7F7RT7uQR7?P֨7O]7+Oob7\fND,7ܟM7!L\ȧ7&Lr7EK*o7yJF7Id!7H 7sHߦ7>G¦7lF 7E7DMz7cCf7 CU7CBE7IkA77@x*7?Y7>7>7"0=^7W<7;&7:ڥ7z9ͥ7{8澥7)8ۮ7W7=7Ɇ675s7/4Z7 4?7zX3"7Y297c1ߤ7 1K7M07/1g7.|:7 .' 78j-ܣ7j,"7,v7T+B7*7,)8ۢ7xL)7O(Bw7'G7H'7I&F7%̡7?%«7Ύ$7#|7c%#@o7k"i7!l7# y7& 7Z7/+7+a7Wb7W'7a7< 7 7[d7B77*ʷ7q7`r7t"i72p7lje7*/ 7 7\ @87⒰7eP7t7L7吶727kX7~370 Z7$;%7Y/[7'7%}77 z7u߶Gb7۶I7MQض8ٷj8kOط/80׷|8ַr880ַԐ8wշ8yԷ8Է48Hӷ8ҷO8ѷ 8ZѷDo8Vз8ęϷӒ82η3&8!η8Neͷ7P8J̷8 ˷~86˷8p~ʷG8KɷM8kɷg8\ȷ@8ǷU'8jƷ 8HƷ.i 8yŷ 8"ķ 8Cķ[T 8,÷/ 8· 82P·H 8ӭ0 8 i 8]o.D 8aӿl 89 8ܡC 8H 8x8Y缷D8WM8Oʻ8>@8"8k,b868Q 8Po8!88~b888HK68D8f85!8裳s8&!8<8+A8ҭ7/ȹ7)f7'257|72n7` 7017WB7+-T7e7r'Nx7؋70 7,s7G77 7[*7EN77u76Y7~7E7|77 q7|>774m97B7oG7X&7/i}7<&r7˱_77>7͟[7 ^?j7 7G77\27G7᜷*(7)}֦7$ (77fX/17Ÿ7w75r 7Ս7*}97ƅv7aij77d7wt73;7t΃0ٿ7Giw777_9[[7ԁ7n37 J7꤀U7@K7E7N~7#&~7^}L7|e7={ҫ7 {j]7vFz7+yù7xx7wo.79w7Qxv7uT7zt 78tyǷ7Qys7r<7Nq7?qn7pao7o+7b o7uNn7Ēma77l7lٴ7h`k7jR7i 7X.i ɳ7rh7dg`>7f97?f7eij7d"7 d"ڱ7Oc7bbG7a7Oa7]`f7֠_7 ^$ͯ78'^7aj]a27o\7c[Ȗ7F3[H7/vZ7Yʬ7X7_7e>X&7ÀWŬ7Vz7VA/7FU7͇T%7SV7 S7HR(ͪ7؇Q71P1L7P7u@Oө7?|NI7 Me7L27)Le7H`KԨ7XJ7HI#7H;]7$1HT;7aGA7F7E7}Dͧ7D7EC7LoB7A,7z@w7?8j7?R^79>(S77(6ݦ75ɦ757/I47%3B7O2a71A7-17l0I7A/Х7O.ƥ78.x7E-SJ7,7,7f+V7*7*K7[)(7H(_7^(ó7W'76&V7#&-7R%7P$7#ˢ7@#72"a7E!r7!7T =7,Ȣ72s7h7o+Q7?97[7joqM7{7?7X{Х7vno7Y7\:`7"77UQ7_77I ͭ7BY 7 M7.{v7F 7^{7m7[79375ض7Զ7DѶ7Ͷ7cʶP7Ƕp7röG7aTn7% 7y77䶶^7೶f7Aﰶγ77}[Y 77M+a7J 7q-7TW˳7]$7bqu7͗73̗x7K7,~87g\Dh7ҵ 7>7?7o]'75Ȑ#W7!7gQ7-u7ڍ<7_ F7cu77VÊT77Lw*7󥈶>Z7Շ7%/ʹ7^7VV7I7-kL7ă=_(8XT(8/%I(8>(8e4(8f*(8Q!(8F(8~u:(8f&(8(8:'8='8'8y'8[)'8!'8'8p'89'8'8'8e^'8 '8'8a'8S(8JG (8(8s(8G+(8B7(8WE(8~S(88߷_8߷g8U{޷s8Yݷ;8&Cݷ 8ܷR 8)۷38Q۷8)ڷE8ٷ%8HCٷ}8ط38׷8׷ C8Ydַ8dշU85ԷK8-Էdj8 nӷv8yҷ8}ѷ8N.ѷѠ8nз18Ϸz80η U8.η8oͷ}8̷8˷88˷C8i}ʷp8ɷ{x8 ɷ8SȷK8tǷQ8ƷA88Ʒ83ŷ$58ķ 89-ķ} 8‚÷j# 8h·F 8.4·r 8 84 8Nm 8R 8 8|m 88潷 8Q 81An 8.P 8M8fj8 #8ָ8ux^^8g򸷨8md8O귷F8h'8涷80f0 8T海u8gR8 贷g8i+~8볷*8la8;18o8L8]q8c`8q7E7oK77ky7筷\ 7d7߬ 7Z +7-ի367GOfB7ɪ#P7}B_7Ļq747;7'ɸ7K7]7񕦷7&}G7"!u7 7܇:77䆣V7LD797U.7S7{I7mu-70Š7T7[J!Q7,ڞ7kp&7A77k 7*7VÜ7X])u77uu7o57՚k~7w377b7Ze7C .77?"7=]NX737}7]7 7<7d7Qi7CR7n75/7̔7{^7*I7ٓ7ƈ%777;撷#T77Bz7\𑷪77JB7-75ml7Nv7 7?6'7"N7u%L717UHEo7F7ߖ78=^!7⌷x7 WA7,7Ћ`7s&77ȸ\7dZ7{/7P77c}7|7{qJ76{n7@Kz7y`7x7x.ʺ7"?wE7}v277zu7t]7>ty`7;s57jrpԸ7(r7QHq0J7p7o57Vo}7Xn87m7lѰ7)(ll7amk=(7j7iŞ7b7=Q7R<7;~7p ;@s73:g7]9[785N77_?7"6/76@7$A5V 7?s47o3٧72-7t2F7$Q170/]7/I77/7TS.R7-27,k7-,V7Dz+$7*7*S7k)凥7(T7(!7f'D7&E7P&㑤7|d%g7$8B7U $Z!7"Y#7"7|!79!~ܣ7} ޣ7T7K7-L!7^M77ˤ7p777Ho7^7w72J7n 7Ɏ-۩7G_⼪7[&宫7u7 !ĭ7E S7 d7 b7Q7n77? 7 7l27zػ7dY$7 A7O.7"N7d7u鶦u7O7^ⶩ,7߶ 7R۶r7+ض7<Զ=7OѶWq7Ͷ?7Ԏʶ7<Ƕ~7öq777y17s7h7kE7ٮz7-7NY7x}`77t}7oP,7'7%7 7?7}>{7%P77 72W:7-j7󻒶7_7%Eo7t5)7VΏX7ˆ7-7NN77拶G7F@w7 pg7ҟ-7=7R67of7ۆF7F5 7 e7w)80)8uX )8ռ&)8Xke(8(8eZ(8z,(8=,(8G(8!(8D9(8S(8(8d(8(8'(8(8D(8(8R(8t(80(8B(8(8gh(8%((8)8x))8Naa")8W 1)8B)8wS)8^e)8!Hy)8$)8٢)8Yո)8 )8)8)8Pj*8w T0*8I*8yc*8@|*8k>*8ׯ*8(o=*8I(]*8*8Tf+8NQ++8B+8Q/X+8{wkm+8.񷢁+8𷧔+8*g+8T+8 +8w+8}G+87T+8H+8Q+87h+8%+8+8*P+8b+8-$F+8 췖+8/i+8p췟+8d78+8qF+8뷰+82뷁u+8^뷬Y+8J+B;+8+8%귉*83L*8en*85K|*8근N*82鷩*8sA)8qv鷑)8E鷘)8LG)8跸 )8ۯ(8{(8QF跽K(8S7(8['8w'8^p+'8L&8淤&8jv9&8O淦%8#9%8h*0%8_|$83r$83i$8CJ#8[B#8y5"8= k"8|M!8Ќ!8Ȝ᷄!8᷉ 80 88n߷A8޷|8:޷_N8ݷ8ܷ]X8Jܷ8ŝ۷`8ڷ#8\:ڷci8rٷ8طr8`ط8T׷~8ַ8շ8շ:8!TԷ8ӷ*8eҷ8 ҷC8NGѷ8зa8DϷ8>ηf8:η`8xͷ8̷@8˷8x8˷n8zʷT8ɷ8ɷ>8KIȷ/8[Ƿz83Ʒ8&Ʒ8Vtŷh^8ķ8<ķͦ8h÷L8· 8· 8p`D 8{ 8S, 8B 8 r 8V} 8C 8V) 8ᕼ! 8!C 80uh 8纷є 8M\.< 8ҹX8LJ48ø*8'>v8l87 8<83A882|p8)8328'84%8괲B848V83,8Gd808Sl8$+17>=7"!7>J7+,7j;7 7V7 7or7橷7S] 7Ө7zJ07:gD7G8y\7ίjx7'z77I7唤R7mE7h7|7 Ƿ7-#7F I=77\7v(7N!77{6;7Þן7)S7]䝷s7w7 U7J7;E7֛7-r?7"27 E7P7=S7I7'=)i7㘷7܋م74>7ߗܧ7.:7$6L7▷b7gZ7w>f7핷$7*7KUS7Z7O7b[7 ܲ7J7k7z7t˒ 7zi7'*W@7ّ7"m757'㐷n7EW-7<7菷U7n7W?|7鎷7Mx7Y<17䍷7S7378ڌs77E%7ɋY"7m71@7󳊷7V^7L7}7 9 7و7dx.7C7Q7S87vw77z 7*b7_DžK67oc971?e7W7 671у471l7n707<7ׁP7tr37l 7 ?7C77~97-~7Gf}ّ7q|?7Q{)7{7 OzQ7y7xH7Xxk7Cwl!7v׻7u쎻7cuF7DtJ7sc7Srr7 r,7JPq7pE7!o<\7o`7ccnҸ7m⍸7l#I74lG7ezk@7Cjy7jj47Ki7whO7ga7^gr7wafҵ7Jeb7dA7F/d.7jsc77]bc7a.7>a8̳7؁`7_27_N7J^Q7L]H7\7^\7T[[7Z 79Y7hYwn7]X7Wgѯ7~V7,#V67dU7 Tן7"SV7'S 7`hRƭ7TQ7Pn>7&PN7dOd7DN7MIG7Mn7UL_ګ7K37QJx7I:L76I@"7kH77Gת7-F7F735E{7dD^b7CLK7\B67A$$7A7B@7|l?7>C7@=ީ7<<ө7(<ȩ7/:;17c:X7h9짩7877퍩7b7~7c>6qn7m5a\749H7:3173:7<2N7u1"ި707H/}7-/Xt7p.XK7δ-7,y7D,tç7+7*'`7+*>,7|)74(¦7"(펦7v'[7&)7&7t%̥7l$7$|7n#Z7 "Q?7 ")7KX!7s 77z%!7Oa=77W77V7 7a7mQ7zN7] 7e7d4,7[Ȩ7Ihu7_/27 7&7Ь7izЭ7! 7 (7v 847u Bv7>dz73&7#R7 5p7o17s07tѼ7W)}7{727u3R77I7S7H)7{O27޶K7~۶E7ضy7Զ9^7ZѶq-7ζ7ʶA7wǶ5o7sBĶ7571EL77\87(!7RR%777| 7# 7'07抣#7􈡶7_X7sʝ[72y7?AV7[7N7PM7&}7ݬ77 i 78/<7hk7‘7񐶂7!H7 {+7ҪZ7ڍ7_ a7c'77VÊI7yy7L@7󥈶7Շ7%/87Xh7ᅶ)8 )8)8n)8Bɼ)8e)8J)80q)8W)8)8J`)8)8Yy)8k֙)8t#2)8)8ߔ)8Np)8 )80)8)8|>)8#)8s)8TyJ)88<)8g)8и*8`y*8.:f'*81v:*8\N*8}c*8>>z*8*8*8O*8B_*8-*8+8U/+8]AqL+8xi+8ֆ+8w{`+8{8 +8+8Q+8k,8t&7,8>T,8a;p,8S򷐋,8 ,8f񷹿,8}V,8C6,8 -86-8_L.-81@-8`kP-8^^-8Gdk-8su-8ǾY~-8|-8;:-8-8FJ-87|-8y?-8uw-89l-8PC^-8Y췕M-8$:-8s#-8 -8։4,8X뷡,8(p,8Nk,8균d,8؜R;,8Ko귇,8B+8+8|+8AG+8++8b]鷱*8-*8DY*8*8\跊)8cĎ)8-跆F)8R(84緾(8{ _(8 ; (8('8߰淯`'8{fs'8 淃&8SI&8"n|%8f|%8ձ%8CL$8q)D$8Rq=#8 d#8*"8|"8{I"8!8`I!8e߷] 80߷` 8d޷8Jݷ<"8Dݷo8Jܷ`&8۷&8&4۷)81}ڷ8|ٷg.8Rٷ\8Hط58׷m8ַ>8 ַ8u>շ/L8xԷ8ӷ^8 ҷ8%ҷt8^ѷ8зZ8WϷ 8 Ϸ8aDηeC8kͷ8W̷k8O˷.8h6˷ϙ8uʷ28ɷ8ȷh8<ȷ8xǷ 8ƷC8kƷ8^ŷm8ķ +8÷8YM÷u8Z·88OPn8G8M 8}hm 8ʾ= 8^/ 8bn 8 8?k 8ػn 8H 8 8s.g 8 8 8S 8 8Ԉ8#08W{8XGd8~8&8F}88zdT8f 8wa8m8ryh88ji8宷8_f8ح.7(Qa7Ȭ67?F77,+77w77}7]p7-䧷7-X7̦7gA7䶥7.-/7X8S7J|7V7d7򌢷7 R7A75 70(7#z7Ι7"j*7ED7 :q7ȝS7Y7윷-777Z؏7K 7蚷7 7c'ѐ7ZəI7l7p*7iն7=`D7P 7e7^7: 7u\7}f77J7ĕ7rtx7$7oՔr7_?777蓷Qp770K7N/97CH7] i7`7mƗ7n.7O7̐Z7XzY7 (E78Տ7΁7-@7َ7f7-7׍)77'b7όv:7u*7Y77ew7 c7,7O#7ز7tA7`4#7Ԉ`7t7'7.7Pߣ7H67'q72)p]7Ņ[71bQ71b7완7q5P7Ѓe7k"7:$777~7/~}7Lh}>7|7{{7`{FJ7Qz07)y%7#x%`7x7Gw ɽ7v~7nuR57wu70Jtp7s\7r7r6ϻ7Wq7œpC7 oG7'o7mn*r7m,7Ml7@l{7yk[7j7jLϸ7[i7@hA7^g#7G-g<7rfi7Be 7@d!׶7Ad7]cRB7b7^b#7Qa^7;``7>_ô7 _u7]^'7]س7X\7$\87f[7~Z17RYVI7 ,Y7mX7rWZ7 V 72V 7sUp7T$7Sٯ76S͏7#wRiG7BQ7P746Px7tO77N7\M7-Mu7hLJ7KC7Jt7J}7NI>7iH_73G87F(7#Fd7*UEh֫7 D7C7B犫7Brv7?A'd7k@S7?D7c>-77=*7=7-?<7h; 7:J79N787u8!۪7>7Kͪ7l6 7Ț5L747/3|7o/3o7d2U7*1970%7^0Y7 O/֩7.n7-&7-f[7A^,-7+{7*~ͨ78@*7)f7(17=3(7φ'ȧ7 &7/&dc7%37/$`7.$ ۦ7#7"“7%"w7s!Xb7 S7L L7jMN7X7m774ʸ7`7537*7-7]Q73ͨ7Y77fv7F[7 '7^7+7 ,7 7b\ +7 J7戳7=mִ7*27V27m7Q*7=,7c>ɽ726p7 7;7JkH7E춶b7\/7}k77޶7[۶ {7ض@M7ȱԶ7dѶK7ζʪ7ʶZg7Ƕ7IĶI72v=[7m7Rve74737%`7][7ӭ7]_ْ7_7Ÿ 77OA7Ƞ7)7R27E7 U7x꘶7C׿7s7oc7)O7,~7 7ҵ|7咶B7_>7nm77VΏ[7!7W,7N\7s7拶97F@7 p7wɉU7=7R7oH7ۆ*8n*8"q*8 T*8R*8w|*8t4x*83@t*8ÚKq*82O)o*8|m*8m*8q:n*8)o*8r*8Mv*8MW>{*8e*8O*88*8J *8V !*8*8V*8Ig*8 *8o*8 v+8Q+8xk.+8JE+8U]+8 ^v+8[!ݐ+8O+8+8j"+8A-Z,8Z#,8 C,8rOc,83 ,8RZ,85,8s,8I2O -8Z,-8M-8njn-8&ӏ-8U<-8~-80X-8s .8](*.8!F.8?`.8Cz.8Ų.8ls.8&*.80.8?.8W.8.8t/8/8Pw/8/8p/8v/8Z/8!F /8/8ѱ.8S|췛.8ZH췗.8췞.8rˡ.8].8|Hg.8W뷬E.8*!.8-8-8$-8!}s-8iRB-8' -8,8鷓,8a,8~w$,8=I+8鷫+8\+8`+8'*8KK *8;跛1*8緕)8)8IV{6)85K(8O>(83{i"(8)混'8T9\'86x&8 &8䷉&8Gm%8=%8`.$8B^T$8cⷢ#8'c#8RP"8Sූk"8&!8f߷5o!8޷ 8?޷o 8ƓݷN8ܷn8/ܷ8Rx۷um8ڷ48)ڷ{m8 @ٷm8}ط&p8׷8ַgv8,ַ8]dշ8(Է8UӷF8ӷ8<ҷФ8(rѷ18з8ϷM8sϷ8Kηo8ͷ8̷ 8˷,812˷8nʷ\8 ɷ8ȷ8G.ȷ.8qǷ8ζƷl8ŷ 8>Gŷ8ķS8(÷8 0÷8I·F8i8-8lA8d㿷8A8ܢ-C8Y 8ElZ 8ԼE 88? 8 8&C 8A 8NӒ 8#t8 8긷 8b} 8۷ 8V 8'ҶIW 8N8˵8I8ǴЮ8`F>8ij 8BC4W8k8L?f889m8ֵ8M1l8M8%Yf8L8y[[8x8M8x7쫷~7r`8q7=Ӫd7bEY7 P7P(J7XG7F F78{J7i즷R7]]7Х;n7B_7{7 +7󠣷7 7;7 o7J7c 7􃠷/7oy7 7E7v7 p7Ԭ67@;7˜7^Pw77Ҋ_7#d7U7\)7IGW7]77? c7㘷77ljiw7X1v7TڗE7#70H7ܖ!H7U78 q7=蕷7P7H47(_7md7]77F“f.7tI7'`7Uْ7}7y=)7$+7sZ7cQn7q7ֱ7Pa;78J77;lmt7NY7Ŏ7tq.77ƍR7tp7_t77i7A$7p7R[RB7 7_7wG70ꉷ|7EX 7-,7Έ=)7n7~H7ܭ7Li7ꆷo7Ӎ7% !7…7u_+J7N7w7|37 σ7gjD77Ϡ7~7;.7 ׁ7/r?_7g T7˦71DL7¿7~70~F7h}O7l|7{L7{7zSzG7y]7x7 xYÿ7Jww7v,7Su7 u575OtoP73s67rz7@r#y7>_q"27̤pi7o礼771o^7wn77mѻ7mm7YMlD7k:7%jN7}#jp7ji|(7h}7Lg7>gSO7f7e!7yeq7Ud&7Jc ۷7b7"bFB7ofa7ȩ`7_X7/_ 7q^Y7]j7\77\ʴ7y[fy7Z(7Y׳7=Y\7~X67+W7TW7cBVG7\U7%T-7T_7XES7Rʰ7Q\7Q;7EP7Oس7N&s7N47=M7zL;7mK7qJIS7+J!7dI;7HSǭ7G7 Gw7>F@T7{rE37D7WC7C7C6B?ˬ7dAﶬ7@@¤7Ѿ?g7>7>w7@=Ik7k<_7;MT7J:[I79m>79937@8`'7l776a 757^47'4ث7Z3-ī72լ71Ӓ70=v760cW7#r/@67M.j7-73- ª7Ry,7%+h7 +87{V*U7 )\ԩ7( 7 E(k7'67&7%@&YΨ7+% 7$k7@$=7#7"Q7;"˧7!ﯧ7[ $7' I7p7d 7f7a5֣7mç7q7}#7f7Wt7/z7PA)7K7,Nᆪ7H 7x;4ɫ7%䂬7IM7/(77Kt Q 72 7 v37 9_7r877 h<7ע7nz77a&7S7da7oF 7777~7붾@7Bjg77ۡ7&޶p7`7۶?7׶ 7ȪԶ7mѶ7m7ζx[7c ˶67bǶ7 Ķb77uؾ?7, 7Ll]7_7N7v7#7@7m~7ø7g77Q7+RC7o^7˜8;7[g77-7gg]27#b77J7yv7+8R=+8.S=+8>+8Wv?+8.B+8WF+8ŢK+8!^R+8mY+8tb+8l+8Tw+8ń+8(+8u+8X+8;+8~+8N#+8f,8=+,8(J7,8UR,8zn,8@1,8,8,8,8 UB -8--83P-80t-8eO-8~(Z-8-8 .8mV/.8$.=U.8{.8󷣠.8+k.8(.8/8`2/8y^U/8v/8R08e08iw08q'-08Ғ0808f08'q08;0808:v\08=۠08&f08ъ08/{08kwh08A;췥R08 췾90808F/8뷘/8Z뷊/8'1뷫/8뷺d/8?6/8ڶ/8.8"f\.8r=7f.82귱+.8?-8`Я-8ecn-83f鷗*-87q,8-,8Q,8K,8Gi+8/_a+8$ +8*8oY*8:(@)8|v)8淺6)86(8(巨f(8r|f'8f'8'8;䷱&8:D/&8G㷸%82<%8s<$8 A$8ᷰ#8/B#8߷"8:߷v>"8޷!8Dݷ8!8,ݷ 8)uܷk2 8۷t8vڷ,8:ڷ8$vٷ)8ط8׷*8F׷8KSַ/8>շ;8iԷ98ӷ%85ӷI8HQҷ8vѷ_8ٵз8Ϸ$z8Ϸ 8MPηܚ8]ͷT-8̷?8˷V8w+˷y8eʷ8ɷ[8jȷl8~ȷV8u^Ƿ 8pƷ8~ŷ58-ŷ8wķ{8÷ 8÷8Na·n8JZ8 8ak8\8C8Oy&n8۽)8@!8䧼q88}S 8캷p 8j\ 8ιB 8C3d 8񸸷g 8V0Ȩ 8G 8 # 8 8 8~| 8H? 8ᐴj8_\8؋87 8p8H 8y8~8by8t8q8g 8Y߮c8#V8˭O8@8598&8u"8; }/76y7~詷7:W7Ũ~737/77}7U쥷<7[7ˤO7v7'067˃ o7g 7i7w A797Ձ~7op7 7\e7C 7O7~VY7.~7g}z7֡|rY7f{7{ 7Szd7y7xM7q xz7Lw-7Iv7uR7uDM7St7Hs亿7rsr7 r]*7Wfq7p7hoS7:o 74nTŽ7m~7m672Zl>7ek7j_72jm7ziλ7hӅ7 hZ<77Qgy7f#7eB]7$e7YjdŹ7wcy7%b+7n8bL޸7R|a7ſ`GA7`7}E_7ˇ^Q7]!7m ]17L\^7 [\ 79Z7-Zi7PYl7X Ǵ73Wu7W'%7PSVԳ7ϓU_78T67rT7TS]7RQ7Q7bQ7SPx7OB37N7N 7MMq7L57K~7oKů7>J7xI}`7H6272G7!Gݮ7WF7MEx7sDBt7hCV7I&C;7IWB"7ZAp 7{@07? 7?խ7t>>ƭ7j=71 7?м7n7]7#L7'{7W7Nu77kE7F@1u7 p7wɉ7=(,8",8,8,88M ,8S ,8 ,8Tp ,8 H ,8 ,8qy,8e2,8^ ,8UV,8Kc%,8D .,828,8D,8\Q,8_,8do,8֡,8e,8)`,8=,8,8xs,8S?-8$-87A-8`-8\-8#С-8@M-8Dz-8$z .8IA2.8#:Y.8.8ܨ.8*Z.8.8:$/8ڦN/8ix/8,/8/8*/8mb08 -H08p08_S08f򷛽08<#08o18Hq)18VJ18k;j1818518E{1818ž﷧18X|O28:ﷅ28D3 28?,28U|528??;28?28@28&=283Z828$7/280#2828k28_췩18W2췗18`a18ۖ1861t18뷇N18.b뷋%18C;뷏0808귫08be08ʢi.08d| /8nU[/8-?{/8 귦:/8O鷩.8:h.8̓j.8UH!.8d%*-8x-8%5-8 ,8CK?,8A 跅0,8+8˅t+8g;h+8淧*8B*8=?)8左h)8cy0(8,(8ÜL (8@%,'8'8#{&8H&8o {%8sD%88$8E3ු$8߷#8޷#8?*޷l"8 sݷ!8ܷu!8۷ 8(6۷j 8pڷ8ٷc8ط8ط`8>E׷8vvַb8շ8=Էdj8FԷq83ӷw8bҷ 8ѷ8з8nϷZ8 Ϸf48Qη8-ͷV8x̷`8 ˷Z8"˷8Yʷƭ8ɷ)G8ȷ8K ȷR~8IǷ>8։Ʒ8ŷ\8ŷ.8cYķ83÷9H8}·8M>·8?881:Ȕ8jl@8Uᄋ8M87E88y8n⻷I8M98U8+E8㜹G 8 8ۅ3 8 8tr 8Q| 8h 8㵷1> 8_ 8ܴb 8X 8?ճ| 8QX 8β8I 8Oű8@ 8⹰#82C8ܪgv8!8_8H >8C8 򬷇8%c$8ӫߔ8B8u8 .7X7 p7B`876˧p76a7ݠ[W7 Q7wP7㤷U7P)_7o7o.7?77…]77sN7ퟷX7ij77"鞷7Hjt]7흷7t7oc77;+7787Κw7e7 i77j:0g7:ۘ7!~p7"7ɗR7r/7'7ǖ07t7"U7;ҕ7.7%47_攷L7LF7LG7xx77i7E7cӒ07:fz7<{7k7ӥ6H7Y7| {77Ss57h%D7֏}7Ňkr777}玷r7Bu37MD7񍷢[77I7x7힌ɤ7KH577U7?<7劷St7{ 7G07^ԉ 7w7q<7x7]IZ7V7ٞx7>7݆72|A*7T*7 N7aU7V%w7 7[+7xǃ;7ec7(o7͚d 7e67сKG7mx7* 7꤀,7@7Qv7H~7m+~K7-e}^p7|7{T7p{v7Rz%7sy<7xi7x875Nw7.v]7uS7u4 7YWt7͛sru7rF,7&rx77mq7JpR7oU 7Do6¿7nz7Um17Nm7`gl7k[X7jU7Bjƽ7iN|7Th*27h7dgs7-fP7[e7:e97ad k7c>7( cκ7Ob7ϓa07r`7`P7?]_X?7x^7F]57"]8J7c\7[h7;ZR7%Z7eY?7XZ7W7%W7eVRe7U7qTĴ7/%Tou7dSi'7hRڳ7Q7j#QE7bP7ȡO7N^q7N.7]M|7L7Kt77K;7PJ7;IbѰ7H7Gr7o7GLG7oF7ԥE7Dկ7Dⵯ7CC7vB}7Ad7G@N7 @P:76?%(7d>7+=7<7s;7;7C:֮7o9ʮ7877$767"6☮7Q5ꉮ74|y7i3g7y2S721>7/L1%7T0 7/7.ͭ75.߫7Qt-<7ʵ,_7+l57 @+7*=ڬ7)17Y)zx7m(E7'p7'۫7b&7G%uq73 %=7a$ 7#ڪ7 #7c"7!L\7 !:7w\ 77Y7C7-77 w7SE-7y%W7Ԩ7̪77qv7&73Y79 78v7.K7Ѯ7ޗ7qm7ó qS7 ^H7D 9M7 Tb7`7]7O7|N7f17w7Fc7 7k7tU>7YZ~7x8K7i=79궬77}t7hJᶋ77޶!7ڶ7׶M7ԶB7@uѶ7}^ζ[7/R˶?a7Qȶ7N^Ŷ7y¶X+77"༶7/_v7Y7 77?!7= 7̫7uv77U略 ~7<7ђh+7E7>Z !7#t7ќ:7i7%[/G7늚v77x꘶7C7sx@7o>p76ӕ7727-V/7󻒶i7둶L77FK7 {(7ҪeX7>+74Z7c!7!7슶Q7,8,8I,88,8%,8 ,8dU,8 ,8,8.{s,84{,8,8T,8f,8c$-8P -8@-8Jc'-8$7-8H-8[-8posp-84-8t-8wз-8܈-8PD-8X` .8R-.8HN.83up.8>.8M.8.8R/8e1/8;/[/8B/8/8&/8PH 08}908g08%08gB08+k08f 18? N18r>{183ק181818zp(282.:Q28ix28/񷎞28d28 !28je38ڙ^%38VRB38]38su38n_38N﷽38b38638w38RV383838s(38uU38A/38U38췩38B38ڂ`38CWl38+-sO38}g/38 # 38]28E928l]28iH뷫^28$+28 18"ؽ18C181F18n?18 H08p 귀08 908(n/8w/8 sW/8}B鷱/8qմ.85_.8Š.8d跆-8$%M-8\緱,8n,8XIa,8淎+8ڜ淛F+8 >淦*8 巼a*8m)8䷓q)8䷬(8 ~w(88'80 u'8a?&8jl&8 *%8R෣^%8߷$8'߷N$8Aq޷0#8?ݷ=#8ܷ"83ܷ-"8$m۷!8ڷk !8ٷE 8 ٷV 89ط8Yh׷8ڕַʓ8lշ8ZԷ8Է8:Eӷ8pҷ,8-ѷ8.з"B8Ϸ8,"Ϸ]8}Pη8ͷ$8a̷68\˷٦8˷=8Jʷ8mɷm8ȷc8vǷ81ǷXB8oƷ8ŷɂ8ķJ%8Z9ķF8b÷n8·8$·ɽ8hFg8k8g8uhi8(þd8 n8؀p8㼷8NIY8m\v8V!8􈺷8Ps8Oi8oܸY8?Q`8Ƿ8K?r 85/9 82! 87f 8'Q 8\K 8" 8隳ڛ 8{! 8O 8c $ 8m8G8x8hﯷ*8eF{8ڮ~8dN\8@81L788C+8}z8骷W8TR8i8'L-8\87cz7`7Ǧ7:/7&177h87ң7>w77c7ڈ7n=7nh7䟷7]7מ70UW7)՝ 7W.7ݜJ7%e$77y}n7 7*I7Q67dΙ47h37-7!7F37ꗷº7㐗bD78<7▷&^77:7]長7/7J<7s7k7b75Ϝ7/̓677c7k7m풷7Ƞ7Y;77őq7{z 717搷MA7@7Nt7P 777Ɏl7y7C)D7׍-7vC7a2T7tތ7 z7 4 7݋7_"-7M.67qՊL7{7V!k7-Ɖ7IjA7 7WT7[R477}&R747IԆq7`s778&7MV7)넷_M76`7${x7n7]f7QB771z7x́7UiK7@2X7E7m=S7yC7~78&~7}`}l;7w|/7&{87{m?7Pz7yC7xM7 x`7UNwϱ7 ve7u7u7dZt‚7sl87r7m,r7sq[7λpx7\p\7iMoK7ܖn577m 7*m7tl-[7kI79 kǿ77/0h]7ygM7f 7h f7Pee7d(7cȼ7#c`x7hb(7!a[׻7`+7=4`{47v_K7*^7]<7<]T7|\ו7D[%B7cZH7A=ZS7|YkF7jX7W?7:W/L7yV7Uz7>TV7]7T7lvS7`Rg7TQ7H3Qϴ7=rP7 O<7N7.N>7lMn7L.7KK7;$K7`J|7I6F7H7H.7KGt7lFl7\Ea7wDa;7)D7^C7B۰7A7@"7)@7Y?h}7>"k7з=Z7<\K77 cs7& pe7* 9g7 y7[B7A˷7  76;V7~ 7a7̋7 7C798*7O7l77v궵7\Q綫7|*Y@7`7ݶ7{ڶ|7E׶97Զ-7sѶ77O7N7N7؛|7B77qS7 8777_ 7%PL7|7F7xߓ 7> 7h;7ou75Ȑ7T7'7W47No7֞77F@W-8 -86_-8j-8jH-8T-8 -8u-8{L-875M-8-8ī-8h-8&-8-89-8gy-8* .8.83.8w%I.8=`.8#z.8Cʕ.8*.8_G.8).8u/8ɿ7/8X9\/8,W/8;#/8\/8v_/8u+08FSX0870808085r18HH18z1818U18g28-TD28|lv28G28yE28 ; 38-e938} h38|򷊕38:38v3848sA=480b48𷟆48^48.h48%(4848â58bﷀ-58L# @58*O58O\58lue58,3k58 [n58m58'i58C]b589,V58 H58췣558>췎58Yz58R췽488+48ˣ48e{48P48~"48yt38W38c638jL38'38 28j28귩K28b28};Q18ZQt18W'18鷠0808]鷏208)鷕/8Ł/85$/8 z.87a.8w-8jȑ-8P$-8淙,8JCA,8?5+8sQ+8WC*8xV*8_Z)8R)8bK(8SF(8'8zᷫ4'8-ා&8?#&8wn߷Δ%8B޷ %84ݷ~$81ݷ#8zjܷi#8۷@"8[ڷW"8aڷ!8X0ٷJ!8~\طr 8M׷C 8ַ8շ&C8hշg8*ԷgI8{Rӷ08zҷV8ѷ8зj8Ϸ)8 Ϸ08xKη8xͷ8̷88f˷8\˷b88ʷ$8Jmɷ8ȷm-8Ƿk8NǷg8RƷ8ŷ80ķ(J8ķN8$]÷8· ;88?ʍ898俷)8U;8Ӕ?81X8cP98cH8c8y~8e躷|N8T8Vù8 4G8%8F8󐷷-8-8d8T 8s 8|m 8aix 8]䳷6 8F_m 8ٲw? 8SE 8sͱ; 8;F 8, 848/8!88&X8s8g⬷2*8O88%d_8#^8-8]28è8)ej8ƍ7 (77Vm7~T7p@7527,ꣷ*78Q)7L/7M#;7ˎ;O71i7k47_ݟγ7rQj7 Ȟ7HA9W7G77ۏ7_r7C 7b7<7}Z7 j77iR7+7BŌ7qR767Nj,w7q7p_7Š)7i7&6I7µb7ZTg7 7!7D7懷7$17(^7ɆLQ7h7r7`7DY7Pℷ*7~7 U7Ĺ7dV77&7a+S7ǁ7co7/7PN78|t77~7~[f7Y}7C|B7{d7{e7Lz37Oyn7x7 x7Mw7v37u7eu7\teO7s_7r7r1reo7yqO%7p\7 ph7VogG7@nQ7"m7U7mh7l7k7Mk7dj;7win7/h7Dh}U7g7fO7 f_j7he7dʾ7cOz7>c')7bb׽7ha7 aO27O` ߼7ؒ_}7^n77^7W]47<\@97F[+7[7CWZ97WYr7!XP7Xv:74RW7~V7U>7 U7UKTʙ7SH7R72R7qDQ\7ʂP7OƵ7cNA~7=N77v{M 75L7Kp73K 37pJ7I27H7 $HU7^G%7JF7?E*Ͳ7~ E爐7@Dw7~wC\7B=7A7A$7G@z7y?ձ7 >7Q=7 =G79<Ύ7)h;c7E:r7&9e78eY7x8L7IM7@7k{6375%7R437 47:3}7m2]71Ͱ707Y 0>7D/:7i.b7-A7W,7:,a7)}+ѯ7*7: *x7R)nI7՝(7'79'겮7[&}7%rH70%!7j$ޭ7#⪭70#x7"H7!P73!7 ɬ7$7.7u7f7^7_^7g7z7/A7jU7@/7377٭7 KA7L7;'X;7)ͯ7#To7 7 7 7 -7 H7uV 䀵7D M7G7q"ڸ7~-7\7pm~7a7A'7d;7(E7MFi7?C73L7- 7 궆74S72 7ඉ7ݶ)|7ڶ57z׶7pԶ7nѶ2S7Puζ7˶U7ȶ<7IŶ7öP7\h7/7- 7Z+7vN7.7ʱV7V 7#7b7ϩ7 e7 y77f)7⡶7,7FlF7 v7x<,7>%\7U27ʄ77 %7=_7mz7N@7͖77,X7g\ˆ7-7󻒶N7둶7DR7FK 7б7wԎ7>74K7c"Y.8>4fY.8WZ.8x\.8LS^.8 Cb.8f.8zl.84zs.8{.8.8 i.8'+.83ީ.8 .8j.84-r.8.8y/8Y}/8Db7/8 R/8yyo/8B/8kȮ/87 /8 /808eVB08>lk08h:S0808??08Y18 tO18.Bq18)18~18L28wQ28BR28 28*28R*38ia38N138V3848X/948Dm4848G48Y58H458b58#񷏎58858A58Ej68μ,68zN68w8n68﷿68> 68fvw68768#68.68̂68I78k7878+78Uw68cG68|68968687ʟ68t68OY`68+:68j 6858!58589"M58h뷿58IIr48M)48Y484838͊38|귉A38U28-귍28V2828Xd18,u5V18@08ݜ08_;08Ɗ跊/8DJn/8Y緒/8f.8wP .8\-82-8 ",8D6,85*+8- 1+8-䷷*8y"*8 㷤)8kz )8rB(8''8+if'8|߷&8R޷J&8?/޷%8gݷ/%8~ܷ$8۷&$8Kڷo#8I(ڷ2#8HRٷ{"8zط!8׷Qq!8ַ 8#շDn 8շ~86Էr8[ӷ8Tҷh~8ѷ 8зY8[ϷS8Ϸ8Bη:8lͷ84̷F]8%˷F8ʷ8#ʷ 8Uɷ8 ȷP8@Ƿ8ƷX8R3Ʒ)8cpŷ8߯ķm8÷8Y6÷8}·H_8i8w8d^8 8 82dg8wp808~s8⻷ "8uIe8IJ{8'&88u8.oD8+㷷08X[8r϶8dG86-&89s8ij1G8-L 8-Y 8)" 8] 8 8)>T 8W 8{== 8X 8Ed= 8֮8GN8S8$Ƹ8*a88d 8n̪B828<8Rk8c]8'c68L 8 8᥷,7B77hn7h7ˢ71.7 7\7k&7؟q7HC7 '7.:\7 7F!7R$7Ot7}7*&7ƴm7B7ҙ[7fr7uA771587MЗ7q<77fM7d7{h7#}7j7 7n̔д7rK737铷}7K 7ZV7oM72ƒo7~Ʌ77n"7Q7f\7b~7J7Ӑb37݋7Cul77ZZ7Qg?7L7юrt7τ 777鍷k?77KKm77687V-7|7<-U7Z7y7 7EU7,77HK7툷7 j7597ׇm7y7e7߻T77\7X7͚87w9|7ׄ7u7 I97e7pMf7Hꂷ77#(577\ p7D7񕀷725S7G7~7~C7P}7ٌ|@7{)@7{Y7Fz7yH7x7x7[Jw6Y7ԍvQ 7Bu7uq7]tt%7ܤs7rs75r`C7Tqy7p7ipb7_o 7n7m7Dm(67lR7Xk!7)ksQ7]vjC7i7wiUh7Yh7!gO7fdz79f)7ʂe717w.Xں7&lẄ́7V@/7UIڹ7>$U7aTq27 S߸7R27R=7iWQ7P7OU76O 7MN¶7M}{7L67bL7CKʴ7vJXw7IU<7OH75Hʹ7XpGך7Fj7EQ=7E7VD7vC1ų7kB7kA7{0Ae7d@J7?27>m7=7-=7 ^<7;Ӳ7 :KIJ79E79ި7cI8͛7w7Վ76753t7,5e7b54wV7sf3E72^3717$1 750w7Im/gر7.7-7-9{7],W7ʞ+17*7+'*Hݰ7n)7(79(6O7Q'7&7%ҳ7qD%<~7$H7#E7*C#7V"e7! ~7F!YP7 &7%7QFxޭ7ݘd­7yT77737 7J7P7ͭ77(7$",g7Ht7h& 7q7N7h7Ie77>H7S*7Hc ճ7$? ٲ7V 7 N7äA7~a7Zy77jb7- 7l07r|77sds77Qu7lE*7-7Ϙt77 7zQ7Fl7 `ݶ87Wڶ7NT׶7WԶM7-cѶ?7xζW7˶>7Pȶ}7bƶo^7Röq7Q77]7H;C7綶p7&77zq7i~377Ӫl_75,7u97) 77#/w7̡7p47n7Bž7gr7-7ќ~87r7%[t7늚:77x꘶/<7>k7J7y77Wٔw57 >e787h7o75Ȑ.7^7'7W{7N/8/86}/8MP /8IY%/8J*/8VxU1/82 9/8 B/8*]L/8gX/8&Me/8t/8 J/8j0/8T.ĩ/8F/8v=/8Ȁ/8/I 08j&08D08Xe08u08PBث08N0808HN#18 ~N18BN|1818g18hN 28>@28aqu28x2r2828m38áoS38wp38h>E38z 48<48w48Nmв48648'58a58G󷺚58O58 68@68t680X򷿧68%6878Y678rSb78hs78A𷄲787278jKD78 88488QN88tKﷆd88qw8888ݒ88_488H(88d88v 88688`c883}88j88NT88~E988e췐88q78Oe78p.o78 췜y78{G78Q78068š68Jzd68I\뷑#68@=58`58`U58E 58Ƿ48;t48l귟$48D38~38J(3828 xr28R28H鷵18NI1808Jq08緿/8ۊ/8cF緊/8ؖ.8u.8-8qY-8-?,8y~,8'㷖u+8CV㷭*8rZ*8Y)8%`:)8ݩ:(8l߷(8p+߷'8zd޷|&8 ݷ~h&8ܷ0%8۷J%81!۷ $8"Iڷ2$8:oٷZ#8ط!#8׷ "8gַh"8Dշ!8շ!8)>Է7 8_ӷ 8oҷã8ߣѷ+8з8ϷVA8Ϸ806ηo]8]ͷ8̷ 8˷8Oʷ,8M ʷ@86;ɷ86mȷr8dǷD8Ʒǫ8Ʒ"K8KŷI8ķ 8÷38 ÷8}R·Ɓ8 l+8h84@818پ818L>8輷I8H86M8J_8{E8j湷S8 T8ø 85H8pg8o8$8 8Q8*z8wo88ej}8㲷X 83\| 8CԱ 8zKl 8y 86N 86j 8VE# 8䌮u 8H8hO8fԬ8> 8 Zk80 L8p%8ө'848>8+8[RH8鯦 d8 <8j638)ǤC>7$Z7'71⢷7B77+7nk7֟7b7n7,7i/7UØ} 7]Zځ7`7;%{70C7iӖ7x 7 Z7ʕ$7 w7W% F7Ք7oo7:7a787\r7n7͒! 77@NE7"77%p7*]7吷[77X7-57ˏ[7Cp7:z 7ʩ7觎E77]7e{7Cōb7w7)-G7mڌ7Bu7"9 7狷u7867@)7늷U]7*7Z>7扷&77447Dڈ7+T7O#@7Ƈs7`i7\ 7#7uMB7텷9E7Y7,i7C˄7i7 %7R 7BR7 Z7&}7&7O7 T Y7 77O+:7s)7~-7~)7E}J7|[z7߿{$7zn7<>zW}7~yT+7?xO7x:7Ew;7_v7u7[uQ7]t-7s7rl7&9r;!7 q7p7pa>7{ho7n7*nOZ7Pm 7l7k(s7;k;%7j7i7#i77phr7g7gD7Sf71eП7d>L7V0d74xcg7LX7W2)7Vѻ7+V<{7u>U=%7zTк7S{7RV(70R&ֹ7lQ>75P57O7"O{7_NP7ܜMN7L7L}7SK:7J7MI7 I߂7EHvJ7G7ϼF7Eʱ71E7kDY7C17B 7B 7JAVʴ7@7s?7>y7>1b7N=GM7z<1:7;(7&:a7V: 77B9}7q8~7i7޳76*ѳ76Yó7|057`4 73ڕ72L719q7*1\74`0\F7/ .7.C7.7D-ֲ7,75+7+Ri77G*?7 )7((7[(17Xk'7&fR7q&U7Y%/7Ŭ$7$(~7RV#I7("7"7PY!7+ (7 \7H\6777T74Ӯ7"ˮ77ˮ7M}]Ԯ77eo7E3*7e6]7L 77F.=77N 77h%7,ò7p7 ,7S ;7 ҵ7q 7i 717Gzѹ7]k7?Z(73h7ը7F7s77_77p7%/7'f7%鶇D7D"涅7*'7F!C7+ݶS70ڶ7(׶dL7M9ԶD7RѶ77vζ=7٦˶7ȶ7g7=1ƶf7öh7T7zS87i7Z7$x@78M 7<7A7Vj75F7ѫ 7FC7Ψ&7[VZ7٥ 7h 7Jw7S7`7ʏH7xK7W>{7m7N47N7؛)O7~777gg|7-7ƗqH78x7&7FV-7 7ҵA7咶{7_7%Eu7FK7 {kE7Ҫ/8u/8K/87/8`(/8t~/8//808'08do08&$y+08;08OEL08Di_08|-s08 08۹R08n087Kf08T08(,18 818c{[18J1818u1818,28^?\28Q128O28D28˪o+38~!c38)Q838$3848N48lۋ48bk48;58 G58dž58,58frU68j=:D68)68|68Ö|68\978r!wt78 78}#78h88)FQ8888´88e888$N98 9983`98`^𷐄9898q98 ﷸ98^﷮98B! :8i:89&*:8r3:8p<9:8::8O8:8n1:8Bw&:8UK:8!:82췇98 98!l98+췰98ng98Px;98Z2췝 98E88388kh881,88J478֊78'ne78@O뷭78068HӋ68u귟>68귵58^&58>귓L58 W귐48+̟48E48~*3838o_%!38<"鷰28跅L28<跥18Hi18|08{w080緿/8w/89Qc.8j.8=T-8/XT-8H8,8|5,8F+8MR+8~*8O)8%්W)8_߷(8ה޷0(8%ݷ'8cܷL '8:ܷ{&8O@۷%8*dڷR_%8,ٷ$8ĦطJ$8M׷#8(ַ>#8ַ"8!շm;"8@Է!8^ӷ@!8}ҷr 8*ѷ'N 8з8Ϸc8uϷ8%η~8/Jͷ8p̷8˷I48 ʷk8ɷ!`8ɷ^8Lȷ38;Ƿ-8Ʒ/8ŷ~j8e$ŷ 8_`ķ8÷^S8M·8{$·E8k~L8n8`8=RT81A8U8T\e8!F88Zsbw8غ&8>A8!8w*818v8m8⶷8XR8!е83Hq}8 898V8+â8d!86X8F8E 8} 8z` 8cb 8Ү., 8QA 8! 8 I 88髷48NV8<>88r]8Ш:8,8/k8⦷8{<'8ɕ88UHU8#R7Q`7^XF7v37D#*7 u(7؟%07w=?7FX7y7~c7 7d{ 7ܛN7;X7Yך^7 Z>7O71jG7Fg77 H7ƴ7O<7햷7o@7A27 ٕR7h"7&.n7&ܔD7978>)77BY7]77Β +7ˆ7kCe77Cآ7)vA7=2B7hр7tx 7Jf7!_7܏ 7V.7ZQ=7 7OÎy7!{D72I71荷P7^q7Q7!77YhJT757Nj`7v7G#y7}ϊGD7z@7$k7GΉ87v\7"7Ĉ17hjC7W|7~d7V67717< 7݅L87}7L\7W7[>7T77p6D7#Ԃ7q&v77zì7I0J7D瀷7Ƅ7f"*7p7~^r7N}r76}ٿ7t|h7p{7zŽ73zCj72uy7x7Dwv7?w~&7:v7u7u;7>\t7s7YrU7;r; 7q7pp7"p$7po7|n7ne=7]m7rli7 kR7Lkk7j7?ib7 :i7Sh7 gl7-#g7of7Wep7ef7Od97cwn7sb(7`'bL7Nmaf7` 7_78_Z7gz^7a]7\L7:\s7]y[Ė77m=S7< 7;7;~o77:^7"h9N78?77076p"7u*6 7 [5o74[7G3x7M2rմ7("2 ô7U1707/7S.qi7>1.M7k-/7,:7+74'+dz78i*7Q)v7(qJ72<(7ʆ'7'&i7#!&7p%ZS7$!7${7Uj#$7"~7"7K7hl!37d ,7o ػ7&q7*l7K7nJ/76}7CR 7[`7S7 7,G7^j97`7j7 ϰ7-)7YPo7%7Uv7ʄ+7k[7W䙶17a7C'7s$7o_76ӕ77 78(7heX7o75ȐZ7VΏۘ08>F 0808,08o08*T080808`08 0808#18"f$18*O:18Q18j18ˀ18J18218S18128~+28N,S28|28A28.28R38k638,@qj38J3838h480jJ48ko48A4858B58g58bD58g68:J68Z )6868d78xX78E78-78O 88=a88j88088H98xX98zF98Y;!98<98\3:8xd:8(7񷩓:8$:8:8#q);8/3;8 5T;8GPq;8p;853Р;8G;8X;8ք;8N ;8|7;8;8;82;8`;8J7,;8;8i;8!3I;8X$;86:8m췆:8Q̛:8 7f:8.:8& 98ʳ98q98K5.98)A885}~889_ T88?뷰88n 78nh78M78x68$m68e688x58x X58348|Ɏ48e鷚$48D%鷜38+D38z=28c;U28緓18z緷W18 t08JK08淉/8Dc4/8#Ĥ.8}.8-8)>V,8U,8^+8Qm(+8MY෸*8 ߷s)8|޷e)8 ݷS(8ݷ;(86ܷ'8X۷v'8Txڷ &8:ٷ%8ط.p%8׷$8Oַa$8mַ#8 շ\#8<Է"8Wӷ`"8tҷ?!8ѷm!8з 8Ϸ# 8η 8KηT8(2ͷh-8V̷ 8|˷vR8ʷg8ɷ}8ȷ8)ȷ8YǷJ8fƷC8ŷ8xķ(83ķ8p÷p8·8y8"9]k8Ł8eͿ~8;v8m '8ý88.w<8ֻ8888Q818oA8ܸ X8K+8 M8#0@G8ʤ88+8[ 8e788q-G8 겷8a5D8ر8N/8Tð86R 8~q 8 8O4 8󭷰 8^ 8HǬC 8-b 8ܑ8@8S88;G78h88m58p8ť83D8jp8ţ 8Kq8}r7ʡ!7$$I7r72ݟl7B=>p7|7]7jn 7{ڜ7I7A73ɂ7q7,7 s75 7i57L7ޗ7)s\7 7|7F#7蕷Ӄ7) 7}67ᔷ'7:7>L7T7y7|Z77lʒWI7S/7L?7%"77ta7:27â7C7zk7)܅7i揷&7L7_h7yv 7֎ȩ7I7J?7k.7:&7rK7'ha7܌77lCU47!B7]g7PU797K-7]7 X7r7\7T7ج7sS8727&[7RB47冷[}7p7w*7˅17l7 [V7Ԭ79L}7;냷f7艃B7O((?7Ƃ+7dCp7a 71S7>C7ۀ7y7c#7hl 7l~aj7}"7e%}Q7~d|_7X{ 7zv7&z`73iy 7x\7wk7s7w76~v7u ~7 u(07$Yt7Fsw7NrH7+=r7݊qȮ7jpa7(p7xo/7nvy7nS+7jm7l>7b l@=7^k7گj`7jcI7>Qi75h7goN7)?g87fF7.eL7[&e7nqdޜ7`cC79cX7Lb97Ēa57]`d7`~7__"7 ^K7&]i7J#] 7b\7ؠ[,S7WZM7Z75WY=7ʒX7W67W)7(CVDϾ7m}UMu7T+7lSý7f+Sl7eR7ʟQ79PTn7PJ7~OO˻7bN$}7MA07MM7'%7= 7׿<7;-޶7';#ʶ7]Z:7978g7o7w7!7v7`S6f7Ƅ5W7L4 H7"387r3@'7cM2K7(1707/ֵ7"/þ7Z.7b-[7,ti7 ,(H7%L+$7*j7)״7*)E7Z(p7'Q7&!7;&k7%e7$7+$R7l#'73"7)"x7!47 eN7. 7X7?DZ7`2f7V7f7t,qP7{vA79797YCB7ST7jp7q7GGȱ7Ww79{M7 7>7Av7=777\ 7 fx7 >7 7۩ w7~7K77 7v4;78Yq7,77R^7߇7477vJ/77%I77,7Hz7Yⶬ7l߶7*ܶ[7ٶD7Wֶt7Ӷ=7Ѷ7[ζn7ϧ˶"7Sɶ7lƶ7Jös7s/78w37˼x7Pƫ7w'7|q.7=7F7b尶S~7:S7óO7Jm7|778477ȥ\7ʤȖ7W7*7Y07Oj7㠶z77Bo7gr>7-en7ќ+7[71!7FaPB7 r7ݡ7𗶣7_ 7&;7FVu7 7ҵT7咶7둶J?7X18_18Vg183ip18# z18@18‘18Z18e182/18p18ag18 &1828L/28}K28Hi2828c_2828;28P38"J38x38D38 38t 48hKA48x"0y48 ò48*488H+58 j58Zn582E58 z/68Ss68E468h686eNF789č78W 7888pe88*88Oo88;98ڀ98ձ989zR :8+AK:8X:8R:8&i;8^NjC;8?|;8ò;8E;8aJ/<8,F<8r<8Ǜ<8Az<8<8z﷟=8u=8C:5=8}﷭H=8 X=8Ac=8a^@j=8P*l=8$k=8 d=8Z=8hqJ=8]IG6=8#v=8bC=8췇<8E:<8ˢ)<8,y]<8l"*<8Ss;8$;̸;8,#2z;8e 8;8EV:8뷒:8뷳f:8뷱:8[뷰98zj}98K뷎.98+88A s88A6887878l!%78t?`68]B`68z58&ߌ58Ld[5848\248M}Ͷ38!H738F28Q-28d淭18_(18DŽ08KP/8Y\/8.8iy..8-82,8Na,8oූ+8k߷[/+8޷*8t ޷)8^,ݷwg)8,Lܷ(8zi۷=(8ڷ'8ٷ'8 ط&8׷&8ַ%8ַr$8Oշmz$82Է#8'Kӷ}#8dҷ#8^ѷ>"8ߚзm"8mϷd!8;η +!8ͷR 8\ͷ>I 87̷8!\˷n8Xʷ8ɷ8ȷ08=ȷW80Ƿe84aƷ8ŷ81ķ8C8ķt8?÷8~·28v288?K[588L㾷8 4G8)8߼88x:a888^z8ƹ*8T0.8 83 -8V}t8H𶷦u8dQ8ڵ8=QD8ȴ8)@!c8p8/n8_e8Fg83%8L8m|q8k8^8iͮ 8*:A= 8ۤ- 8L / 8[s< 8׫ 8_8 8}) 8mu85O8󧨷8\8S88FO8KP8,8>]Z8?`8qW8[䡷s8877柷´7A7l7ճ7a7ǜ71 7\597q77C7~L7ޤ7Ņ7i7̝7/G7ŖX70_97; 7F>7I@7%男2Q707>p7p퓷7572S8179 7 e7lzR7-57+񑷤>7447l~7*7鐷I7Xc7uh7(47x珷J77eq7#37Ꮇ7w7Z7/7э>\77dC7;77 gxx7i7΋ձ7ŀ(M717኷37r7>7ꉷH797@ht72ꈷ 77G:077BV7+7φz7Es 77P17Y7rW7ܚ7:~7Sڃ7y7gA77URr7󁷢 7847}01E7΀7>m7 $76Ul75~pk7}7"}7FQ|K`7J{ 7#z7z`7Zy 7x7w%k7,w7 uv7Ju }7u.7:Tt7sy7r)F7F=r7q7p^7-pJ7o$7ns7$n$7wm7l7ly37qk7(jَ7j_;7Pii7'hȑ7N h;7\gl7-fu7e37He7.d7c$7*c7|sbl7$a7aC7F`%S7_7G^7^67N]?7\w7M[x7 [7EZY7oY7OXp7WW>7h0W7iV7U'7T̿7Tq7LMS77R7־Qh7P:7:1P7jOXl7ON`79M:̼7M~7(SL37K7?7=Nq7="{7!<7 +7B 7fT7`'7G7Sز7b7KG#7MӇ7y7l6fq7ɀvq7z7 7J鱗7n"β7޹7D:7F7C:,׳7X87p7#7j7&dD7 q7F ?7Un b7S 3762 7 r7~7Y7c7N D7^u7%7GU97D S77 79ϐ7`5 7 7궦7~7;>7m74߶q75/ܶ6 7Uٶ7ֶD7ӶS7жar7Aζ7˶7ɶ=7zƶօ7Ķ7"fW7N727Y7 丶=7vﶶO7pL7K)*77v7F7?5 ~7嫶737XsV7*\:77O 7G~C7젤Ds7Уt7x:7>0i7`/G7ʏ_7%7WU77NJU7~7o״76ޚ7 7=N7mˆ7s7o76ӕ~"7\7 s787?28!28a*28M,528)@28:%N28S\28@l283a~28~28QZѦ28̽28K28ub28 x)38C -38N38Tq3838}Z38O438"U48/B48s48-48z48R58+L58iI5858 68֔F68o 68J68W%78\78783Y78:88c\88:988e98i98E98+:8ZOM:8-):8:88i*;8NJq;8R÷;8;8U><8~<8b򷼼<8A"<8u1=8ӟh=8]񷄜=8=8 =8@'>8RN>8r>8`S>8Ð>8pR>8n>8>8>8zkX?8F7{?8z?8 >8;>8>8W>82;>8>8)q>8I>8F췼>8ԛV=86=8 k|=8`TW?=8^>]<8(%<8$췒u<8L뷖,<8;8S;85A;8뷘:8pd:8PLO:89198 98H9888 88n귑,88IA귣78^78;68jd68`WS 68 58D58\g48{ 48練38D28we28淶18ۉX;18ˢ08U䷚08ml/8.8=4.8@xp-8ෘ,8߷@_,8޷=+8޷(+8>ݷ*8Yܷ)8r۷g`)8ڷ-(8yٷ<(8-ط '8w׷)$'8ַ)&8շ&8 շv%8!Է%8T8ӷ4$8Oҷ($8gѷJ#8зs,#8Ϸ\"8zηC"8ͷA!8̷0b!8̷ 8%7˷͆ 8[ʷs 8ɷ8ȷ+I8XǷW8ǷW}8D2Ʒ^8dŷ8xķZ8÷284 ÷8SH·K8w 8S8O8[^880f84J88&8#X:8T8-8oT8B8;["8<ʷZ8N;/8.8"B8;8q88 t8t08벷8b8ر)8MO8Li838<^585>8>8'뭷6E8S 8 864 83~ 8ܪ 88 8V 8꨷p81?8@,8o㦷Av828No8Τ`8,8mh 8g8Q8;R,8*88VI7d<7Ra7bW7ڷ7757𚷀d7Q`͜7ԙ7M'7ʘy7mL7RҗQ47\7떷 7}}770t7M7l}77P=U7<铷%7e7vI%O7U77kN7%7^ᑷ0X7T7\7:7ېJ7V>7^]"77ߏj7O7b7Z#X7㎷7 7bCE7 87sލ7007V7+6u7ʌ7ķ7=:X7L73p7XJ47j '7¼m7l47z7ɉ;7v@7-"k7̈>7Ov7h-7~Ƈ7,mDV77򷆷f}7\7ӣ7V77uD7儷{^77'7ǃ7RgF7J7楂7DJ|7ぷ7}7A!lO77^7 /7:7y~u7W}7|7:|7Q?7J><7?=۹7;7=Aۨ7]707S۳7*=HG7gT7Z2i7 77ˬN76ٟ7pT7 c7lA7{7O777M)Z7g}7.7ܡ7 .7<]7Fl 7 7˝717_+k7%[7늚77w57𗶧o7_ m7&7FVc 7g\C7-O28cX28n28e028{38J38 '38938 M38Q8i6Mt>8U]>8X>8p ?8r-S?8%?8.D?8b?8U @8"@88S췓>8>:>8)=8ޣ=8뷘S=8뷋=8^<8`a<8)<8|pM;88Qb;8.뷏 ;8 뷻:8yJR:8귐98fÑ98Ijd,98988~PU88078J{l78=68Aq68e跧58+c58F48I5F48385H淥38巼281#巻18ցG18?ݨ08]!_ 08asj/8&᷿.8\ු).8߷-81߷,8.޷M,85Hݷ+8_ܷ+8t۷~*8}ڷ)8dٷ W)8ɭط(8׷;(8`ַ8'8շt-'8Էk&8& Է%*&8:ӷ%8D4ҷz1%8eJѷ$8aзA$8szϷ#8ηY#8TͷD"8̷*x"8˷ "8` ˷!80ʷ-1!8Tɷ 8{ȷr^ 8>Ƿd8%Ʒ/8ŷ /80ŷ8AdķPo8o÷8\·L8F·:`85N 8 8տ4g8$8Wh8Ѷ878F^8)8rp]8t/8ع8(@0}81D.8v8具M8].8io85޵gp8SW 8 ʴC8@#/8͹8?/?88 88Y88w~8请,8DXJ8ŮO81(8L8Xc8c 8ī, 8]# q 8" 8Aة 8.(6 8{v 8ӧշ8"8o=88.8'N8g8ޢ_8'8:qhn8ﻠ8?58Vy8p8 7Q 7٫7 `7k77њ&\7<7A7q87%P7L77a7Re7v4;7 ȕ7_-7727(?)77擷I727>kl7_777[Y477`̑n7f7F=7Q7sƐ7㇐g7J;7 7Џ&7I,7V7dx7܎79?7)ak7d"7⍷%7z ^7#a7Ѩ7eیM7֖7Q(7. 87‹17x{7.77@⊷ֻ7nZ7F7/7l07qT7Je77W7I-7穇7QZ7?!7 '7 C78煷V7B7-`7τ(l7TqL7q7-7ZS7F󂷄[7󒂷)7s27с(7 q7Lb77N7A77\~7}.7 |g7W!|}7d{c'7z_7lyz~74y+7|x7Ew7cw87Zv7ruĚ7DttL7,Dtv7Hs7rb78r07xqG7p$y74p*7ot7 n78n;7im7l7>lD7Qk}7j37DjD7iW7hՔ7,Gh7;7țgh7Yfd7AfH'7e*7dj71d& 7>c@7 bG78b7]a܁7`/7_ 7._U7Sq^7G]7\\&70\47$m["\7ZB7Y7gY.7l7=UK7+=W,7+M;b7k7˚7ʤ7W67*p7Y77p76韶D7~7H7x7N7؛R77 g7=7m&7sV7o7738 ף38Fְ38r38@38u38^3848G48C 448EN48ڜj48f{4824848o48Al58Iq?58Dk5858358558ؠ268{j68gVa682,68K!78b787878ߋ488kx~88L+881,98 f98398:8m[:8/6:8cs;8?!X;8 ;8<8V<8/<8s<8vEQ=82!=8k=8:B>8axH>8@V>86#?8.i?8Ɋĭ?8J(?8J -@8i@8Y@8M?[@8 A8:A8qqeA8-(A8/A8sA8ci﷍A8*6B8KpB8 "B85|*B8G.B8b-B8q&B8o B8W B8fA8BZA8+!`A8 A8heA864A84s@8^@8g@8u췅B@8b ?8N?8:췈f?8d%?8'c>8ap>8 >8̿=8E"v=8f=8]g뷽<8lEj<8.#뷴<8=;8-귂V;8귣:8Ɏ:8FY귗$:8&ȵ98+B98鷂88gK88J78B78U$68%68s58x48Op)_48巴38G."38/.28;%18@=18|ⷚ088/8U෵Q/8߷ɯ.8߷.84޷7o-8Jݷ,8 ^ܷ=3,8o۷g+8ڷ+8[ٷl*8}ط')8׷OO)8ַ(8շQ?(8Է'8ӷm;'8ҷ&8ҷ3C&8*'ѷ%8<зdT%8SϷ$8qlηl$8bͷ!#8̷'#86˷#8\ʷ"8ɷC"8"ɷ!8Hȷp!8pǷ^ !8Ʒɣ 8 ŷD@ 8ķ,8+ķU8`÷#8Ɨ·8sq8"8P8#{8_۾;.8b%c8r<8üPR8? 8Pq8ͺ*~8S.78:8V)8_cW8з8+?ݲ8IZ81#88 78`M8%p[8q 8粷h8]8ұv^82Gj8`<8-,K8NX8k _8Tv 8߭-8FS8ƪ8& 8j"8ƪa 8_ 86u 8Ȩv 8!M 8e 8f88 @B88ʣ8 Y8Qe8ݕ8ڠ8$!n8Di8:88Pb8Z27]37V@7c3Y7|7[7𘷳7qc'7ڗ)t7PWe7ؖ&7^7ꕷB7zEk7G7b7%E7擷n7苓%747ᒷ77DK77a[7Mn!7N+_7&ꐷNd7}7Ll7*/P7l77|C7A7#7n̎;7~78V{7k47ݍw77~b.7Y# 7.㌷}7$7_7r7֋77'I`7VI78ަ7jzH77ω7>'7/7ވa7m767ᇷ17873b7zۆD7377('7̅˽75qS777Y7n7˜C7=27ނs7I~ 7C7RB7]7|7`l7?=78]72~W7e<~7T~}J7|7p|c7H{?D7rzm75y՛7-yHI7Ufx7w7KvW7MIv7uu7vtWk7h8t7ts7r3722rm47؇qr7tp75pdI7o7n7=@nX7m73l7iNl`7k 7k7K\j]7|i(7i7ehN7 g7g,7gf47Me7^ es7^d7Xc7bH7Fb<7 a$}7g`l7% `*7Ne_G7Ǩ^x7z]1w7*]7i\Y7[>7Z7PZn7UY7ڍX7 W97V17Z1Vo7fU 7eTN7SG7KS78RɈ7lQ`+7P7ONu7 O7@N7uMHq7׫Ls7qK7K(7|QJ27I7H7G[75G7oFؾ74E7D_7DW'7[Cd7GB*7fA7k A_7JG@e47?W 7y>7=7B0=7gi<7 ;`a7W:lE76:(+7I9}7q8C7ƶ7A76,л7f"6ɻ7W5槻7<4K7|3À72m7-2Y7b1D7ǘ0;/7q/7/7>.7x-̺75,7z+~7*+7r7Sh*O72)*7(f7,(ܹ7rq'7&7&eV7K%%7r$G7o#74#7"vY7!M$7 -!7 7 7/T7Ej$7*77ʶ7ǎآ77;_7[E7W17Y4 $7,77&7\87T7py7A⨶7F7"uY(7ޝy7׷7IB7,7^<7 ͹7 5l7 7F ӻ7t7`n7`Q7r@7ZV>7X +H7y^7p70777u+7z7Mr7US27=ޚ7붾 7,7457Ah}7*l72ݶp7۶7Tض 7նU#7Ҷt71Qж,7Ͷ7(8˶d%7ȶÖ7L`ƶ7zĶ;`7;{7747vZ7Uɹt7\7uWt7ôJ7Mj7М7I&7~67^'7[n7z7Β717(Jk7Xz7h@7᧶p7I7_Aey7%q7젤7У7xW7>07`7ʏ7+7Şe7x7>%7U7ʄ97늚i77|7𗶫 7G7:W48d48ws48n548;48G48bx48J8TT>8%?8V?8;?8G?8T"H@8~$@8@8$A8$_hA8ΩA8A8##B8ZP,[B8 ŏB8B8~B89}C8ﷳ8z>83s!>8R=82p=80=8귨<82T<8e;8.o;8@귮;8 7:8_!:8@98l7 9888Pw88O 跠o78|68:<68 淩58巼48cZ48[38J38X>h28͐x18᷻18!w08f/8߷//82޷.86Dݷ-8}Sܷ]I-83a۷ƫ,8mڷ=,8 zٷ|+8 ط*8,׷G]*8ַ)8Ϋշ/L)8ܹԷ(8ӷH(8Qҷ'8ѷQQ'8з&8з|c&8H'Ϸ%8=η |%8PVͷ %8Ip̷֚$8˷V,$8өʷ@#8ɷxS#80ȷ"8ȷ"8=8Ƿ"8aƷ!8ŷN!8ķ 8÷č 8l!÷1 8X·8A8*8 8@PI8?8߽8+>8{pi86л$8(8턺m8幷W8H8د8s~8/8w8#g8*ڵ+8N8*Ĵd8|:88'8b8Y88jP8m\8ޯ8MK8ct8$g88Y8R8-m8]8SgO8 8X 8^ 8K" 8V 8: 8Z88i;8%B|8>82 8|>[8?8 8OŞi8 8T<828|(8EP7ƞ\7;5t7{^ʗ7Ř7 27ãE77閖7dlK7=7*"7ջ7Q76쓷7@/7|.\7Ւ77ဒ|7/`7E⑷7ꗑ-7nP27 7 ɐs77JQ7! `7qя7Ж7]V7$7W뎷 7޲R7Yz7A[7Q7/ύ7C79ZQ7l7ጷ7+Q7d7$7㋷M7>07 \7HE7ϊ7F7=Y67w%7|7&X7 :7 _7f7N7Ŀ77j&7(m7Ƽ7jd7 97찅7UEi7%737@/7⃷7΄_72&77ǂؑ7g+7h7b7H71逷/7u=7)f7e7F~#7~7[}1o7a|7{ȿ7){i7pzw7y<7y'p7Lx 7w7vB74vy07ׄuI7yt7)tG7}s7Rr]7)r^7فq7p74ps7os$7n37Gn7m07bm7b]lT7]k272kP7sj7ip(7+i7ho7?g_77g7[faP7\e79eƉ7d$7 cy7-cDW7{b7a7a7Y`7_F7o^(7'^vo7g]7\7/[+7[:7XZZT7]Y7X7X7R7W:7lV=E7U@7Tax7T79Sf7lRsN7Q7P7P176O7QjN|7GMV%7L7mL|7b7>;74K=7^<[7;ӽ7c:{7b1:7j9}728c77K77j47G6'7q~574p7,3޼7W!3ɼ7W27̍1F7\0f7V/r72/Z7k.A7-&7, 7,7T+Dλ7-*欻7)J7p)c7yS(:<7''70&7#&຺7 l%7$Z7$(7Q#7z"a¹7!؍7E!X7 #776Fi7<7Z7L,7,7ڷ7S7- 77eR l7̣^7XX7P?UY7b7t7ۏ7TN77~7(b779^7Wcx7o7Z o7_ 7 Ù7 wC7A 7p7YY7:\m7!X7dQ7lV7{g7u<P7c7[7E!7Iuf79e󶾷7F7r737p:K7 C7:7E#඄7bݶ77SڶQ7$׶;7DնP7Ҷ=7ж7}Ͷb37˶7ȶ7>ƶv7ö7:$7bg7(ٙ707797욶7 /7.)Y7k7M7 7 7o77_7CŬ67*;77pϪ760R7._7^%7U7O07J`7z7M7g}o7.>7ܡx7 7<7B7grL7-|7ќ7؛u7 7 Z77C7JO58j%58(5658NH58![58nkp584/G58|ҟ58VD58ڃ58Nx58L68a968Ӷ^68ɇ68tZΰ68.68! 78?78s78781m78Jh!88)`881 8888-98Gw98(98y[:8^a:86D:8)S;8Ul^;82;8v<8 j<8ۡ<8„!=8f=8F=8%:>8>8>82Q?8]?8d@8X76a@8@8MA8bA8vilA8/B80OB8VuB8dsB80#C8SIdC8ܦ񷕡C8^`C8,D8"ED8/AtD8fCCD8D8иD8u﷌E8 4tE8\2E8AE8}JE8FNE8{ME8FE8w1:E8Ň*(E8(`E8A8@8$뷍@8,@8A?8u뷞z?8"W+$?86<>8p>8A>8E=8D=8|<8ORe<8# r;8`xq;8:8N鷢g:8 98vI98|!088)緕88'9z78!淙68<E468yٍ58E48**䷙:48j㷼38ⷡ284A2818D8088߷I08#޷/80ݷc.8;ܷX.8E۷-8Nڷm-8WٷO,8`طy+8j׷d+8uַT*8շS*8|Է)8ӷQ)8ҷ(8<ѷR[(8з'8hϷm'8<η&8ηk&8xͷT&8;8̷%8R˷M8%8oʷ;$8ɷB_$8ȷN#8Ƿ#8Ʒ>"#8T#Ʒ "8@NŷW"8{ķB!8÷і!8·:!8M· 8L 8g4 8ǿ.88M M88ἷ81F}8c:84ݺ]898ɘ-v8K28Rc8ͷ*8y:W8ԩ8M8xV8'8x8ﳷ"%8pe8}۲~:8Qs8Ʊ58o:88J|8GB858g8Э#85Y86_8=8U 8A< 8#t<8_W9l8!9 89 89. 8*! 8GQ 8 8P?8J{!8)8𡷵i8)8&d8UJ8ܞ8 86^La88웷<89ݴ8v38ᙷrq7<7b7&7onC7Wߖ^7U7ҕ 7Sl71۔7gIJ77/C7W-7.Β.S7hs7t7Nʑ 7{770z@7鐷77-7a"7>"7䏷Rl7Өn7n75d77dƎ7Џ4d7Y7a#7 퍷vh7m&7b7Gn7i7(֌7ӛu7e`"7#c7勷{7æ'76f174$/~7(7ۛ97}U9{7 p#7Sĉ7yp7W-7߈7\7n@7ҟ7䛇t?7G7I{707D7g셷N778ӂ7݄A7|7%N7ȃ7!k7 w77O"Q777o2'7)Ӏ7sf7g7k 7~O75}y785}g7&z|C7{^7 {'7Oz*D7myp7*x7m/xpO7*}w7Fv7vb7nu 7Kt7gtz7ns.7r27r7@yqF7p7`1p7oZ7;nf 7Ln.7{mf7@ m7@kl7Ekf7%+k 7j7iPZ75Hi_7hɞ7Jh>7]g 7!fy7f(7=heݮ7d.G7UdA7Acc,t7^b 7ubٜ7hMa/70`7_lS7$_x7Oh^,u7]7\ 7'\~&7c[7ZG7YO7OY8k7_DX7DyWU7V%7 U75UQ7CT}7uS7Rk7Q7~Q}W7:8P70iO7N;7{M47L71L 27BeK7XJ78I;7I7b:H7xqG[7-F7E7wE֐7TDR7C7B7ZB57_>AIs7y@B7ȴ?I7 >7W+>ܼ7f=7J7G&q7,%7j$7#$Ϗ7yp#]7"*7"74`!_º7@ 7 X7]$7 75 7b7hd778:7>k77Ӹ7;:7ki7˚Q7ʤ_7W7*7Y%7_7pz77Wo737>%m7U7%[7Fa7ggA7m58r058-r58! 68#]j!68 k8680Q68k68ts68>=68 C68V68#78x978~Kc78 78|7878'88 _88a=88?8898/Z9898/982:85:8)y:8z`X";8HHv;8p0\;8%<8?<8U<89=8=8f=8Y>88h>8K?8K,~?8 ?8sA@8#@8kA8#uaA8!IA8ySB8;rB8DB8~C8DpC8CC8. D8Q7UD8C,D8D87RE8)oRYE83&ڑE8E8iE8J$F8KF8ﷀoF8vNF83F8jdF8ųF8xcF8g?F8 F8F8F8|F8aTF80yF8`SF8췒(F8E8'~E8췉E8@4;E8:D8w:D8milTD8Y,C8oGlC82OC8B8뷓B88wy>8#>8Y귄=8)귇6=8<8-4<87[;8鷳;8<:8**98R98-d88n淓 88d78~ֺ68D&685db58pŷ48+/ 48.ᷙa38*q28߷28y޷Y18޷}08M ݷ 08ܷ-`/8۷̾.8ڷl!.8d$ٷ-8+ط,8p4׷e,8h>ַ+8IշU+8lVԷ_*8Ddӷ(T*8rҷ7)8~ѷ^)8з(8eϷr(8'η'8ͷ'8̷ '8 ˷&8U˷?&80ʷ%8XOɷ|f%8!pȷJ$8Ƿg$8HƷ )$8ŷ#8 ŷx]#86ķ"8Vf÷"8v·>"8Vq!8)I!8&@9!8:~ 8cG 8U 8"K 8'58价:87M8[8g鹷8H8$Q82 8}8궷B}8Z_.8̵D8@Ѐ8!8*b8AP88ό^d8/8w\8!밷8]88ίg8<8ΨM88x8ܬ='8=c8⛫8=:8L8U'8hP8b9`w85L 8Ŧ= 8 8D 83= 8Xk 88P%{8YX 8M8ß'8E8238my8k8T훷V8218}<8˙Ӻ8n?8wx7ח"7~;7ϥ*7"s77$7,u7C.7o7s4.79͒p7+k,7E7{7TaE7\2K7`Ő72}ć7;8)797춏Ss7zl7_?7{l7ώ7ژ7co7/77XǍx75'7n_7*%7h47&7H7QB7 :7ދ7P7f7(]7銷\7ߧ( 7e97 c7ډI727J d7 7!7f[77LJ7v/H7&#7 φÊ7yM*7]#7˅f7s7+7;7d&72 >r7ӬF 7Ol7oC77R6A|7ׁV7(y(7PU7t7\7h97>7q~Á7}'7~ }m7qQ|{x7{"7z7**zj{7tye)7x7xψ7]w:7ծv7Av7-UuQ7t27t7Zsl7!r 7rE7mqr7p97A+p7o7nL7 On7mL7mlU7wl7k7->k?P7 j7j7Qei<71h87%hz7g7f7=fJK7Qe7dx7.Gd 7c7 b17}>b7a?R7`7"`n72i_O7;^97/]71]O7p\.7[k7ZMH7 Z7WYpc7uX7W|7V7&Vq7WU67T7S_7R7R*7DQ)7|sP7SOc7~N7$N7`1MI76bL7K7JiC7RI7+I:7`HOR7G7#Fʽ7FNw7:Er37rD:7C7Bw7B=7kZA7U@7? 7 ?uq7NG>xD7ׂ=7g<67;74;ͦ7o:7_96d78_E78(7X7 7ȑ6K75׿7257;4G7s3M7֫2}v71^71F7S04.7/H7.7-77-ľ7Sr,7+`7*Ih7A'*F7e)"7ɥ(78']ս76*''7n&m7%T70$&7E$e7#ļ7'"m7,"S_7|!+7M $7y! »7v'7Z7w"\(7y7iȺ7)7s7!'M71X+7]*7%717׹7Zҹ7!/Թ7#lݹ7qS7 7607q^7e7ں7*)7.k7Ns7i [7~ ؼ7V b7l ]7 -7M7 7p7WK767z7u7{707ik77N7ò =7򶽀7vd^7q춷7,Qz7=K?7䶭A7ج7"߶7Loܶw7ٶ7׶?u7DyԶ>7<Ѷ[7Y϶7̶87Xqʶ7ȶv7TŶZ7ߚö7{7kuB/7XZ7'w79>7f]7׶u7pG7t*7ߘ7籶 !7߰7U73$gV77l7ػE7Vȩ7Ƭ777$'w7_] 77Ĩ%73`7(ݚ7GYM7XX 7B7d磶z7Ů7QB7cj7{P7뚟j7󷞶77sԜ;#7ћW7Yš7)7I68L68N68M686868b78dS778H. V78#w786v78o$78xgA78N:88@88|o888888 t 98QJ98198P98L :8*KS:8`p:8ģD:8B6;8s;8];8 G2<81<8s><8A=8=8^>8b>8>8m*?8?8iC?8KO][@82@8'A8.A8AA8aUB8B8[C8-wC8PjC8.D8†D8ZD88-E8N*|E8E8UF8{TF8[ەF8z|F8y1[G8DG8RGwG8:O2G8 G8 xG8t*H8/e-H88%5t>8B=8鷢p=8 Y<8#W<8距;8q"跇&;8緇:8';98 6:9888B78t䷞178N068f㷻58ⷮ'58Nt48]E38C߷38 ޷_28vݷ185ܷQ 18!۷.c08ڷ/8ٷ/8ط.8 ׷-8ַ`-8շ,8ZշP,8Էv+8!ӷO+80ҷ*8?ѷ*[*8Oз])8`Ϸq)8@sη(8ͷӎ(8̷((8G˷'8pʷB'8vɷ&8j ɷ{i&8]*ȷ%8wLǷ{%8pƷ+%8ŷ$8ķ^$8y÷t#8÷#8mO·Y>#8"8]"89"8q3/!8sƠ!8!Z!8f!8F 8ǘ 8;康+\ 8: 8'I878W^l8E,8;*8V8gzT8z 8۩8cK8ٳ8Pz8Ʋ8;8 8%8d8 9Y8oz8@箷8Qd8E8jA8ɀ08૷f8;88g橷858Xh28Cɧ#R8 p8Nn 8 8Ĥ 8 8]. 8_CG 8ɏ/w88=8^)8Or88?8,w81O8sOK88LH>8xW8lN8o B7nx70ؕ|67#H{7}7;;:7/77Ek7ЩH7VRL!77s^74F7+냷57tU77#3`7Mւq7x7C 7EK7 _7Š7E+7C7VGq7?7S~ջ7}b7|? 7\%|7jm{s`7Ƕz& 7z7Myi7x7w(7:wR}7vW07u77u7tL7sR7Cs$7rj7qS7^q_7pĆ7-"pQ97o7nS7kOnJ7Zm7m7hlO71ke7OkT7jjrD7sj7i7|hH(7IhM7gB`7 gX7lf7e&7%e7<d{K7c7+cqj7~b7qaM7a7qi`7_{#7^~7U=^57Y]s7 \E7l["77[V7pZ7YQi7+X7X~7fCW 7qtV!7]U&7HTz7iTG7.S7!\Rmo7Q7PI7O87O7_E|7D%7CqW7MCV7?B7ayA7@ j7?,57)?7e>7=7 7 7 7 +7 w̿7+y7277*77Dɐ7xp7yG7 q7y7%7x7(73cd7l77 g H7f`7/7rNᶻc7޶7h۶A57BEٶQ7ֶf7^ԶK{7wѶ7*ζvP7|̶7Nʶ7]Ƕs7Ŷ7}Tö77h=7dt7审7Y 7ԟ79F7ޝy7Hלa7z7j^7H7^ŗQ78ze78<{787878̊78Rn78(388d$#88pZF88jk88HT 88'888898'N9898%a98/?985:8v:8:8y;8J;8m{;8P;8^i+9<8sT%<8q@<8.-@=8h=8l=8D\>8>8U#?8ۉ?87`?8Y@8d@8mkd-A8XSA8f9&B8YlB8B8O>C8O{C8D D8mpD8@/D8Ha3E8 E8E8 oCF81F8!F8_a6G8g򷓀G8XG8 H8JH8:H8H8ҞH8,Q1"I8^ MI8θrI8n6I8&I8mI8[I8^I8!I8S I8cI8I8S@I8y)I8dzI8 RI8"I8=H8А+H8[}hH8"nH8`G8NR췃yG8C췾G8%4췙F8A#/fF8rF8tԞE8v3E8{)D8ͣdfD8 D8cøC84C_cC8C8WZB8^@B8귘A8*oA8zA8%b-@8Z8 E>8J=8}<8跖V<8;8=緤 ;8 Qa:8 z98w98M88z78I!68Goⷱ268"z58!R48+߷48޷e38ڈݷ28ԄܷX28n۷,c186ڷ08ٷ]08ط{/8 ׷H.8ַV.8Yշ-8OԷE-8ӷ#,8ҷD,8ѷ+8зRS+8Nз*8Ϸm*8(η)8=ͷ)8T̷)86m˷0(8-ʷA(8ɷ'8ȷ?i'8,Ƿ&8Ƿ&8$Ʒw(&83Lŷ%8TvķZ%8÷$8·$8·8$87#8n#8񨿷4#8德E"8$"8fY"8"8!8=!8f!8o⹷-!877X܊ߨ7e]7hm7,7z7உ.7^m7*7#刷E7y7V7 UU7o74s7y$Z7FԆ77/S7ۅ_7'7/A7؄n77&%7˃7pke777[OC77NF7C$7倷7g7) 77f~U7!~7|g}7J|pN7{C7?{7Xz[S70ys7"y7tqxc7w#7"we7Shv}7u{27u7kpt7sS7\)s 7rg7qt7KLq*7jp7p/7X|oD7n7Ln֥7dmDT7x m'7lB7ukUU7 `k>7bj7P4jC7iv7(i7mh 7gø7P8g6P7:f7tey7[ey 7d7dl'7Klc97!b=7b7faKN7̴`79`Z7H_7^.d7]?7]*l7Q\7[=t7Z7oY}73YX7egXΉ7KWP7V7U$7X&U7STl<7~S7WRQ[7NQ7Q7*P,7UO7^NK7M7L)72L(71K7_J0s7I7H7Gu7!GZ&7TF7E]7.DG73C7=+C73cB߀7AC7w@ 7@7;J?B7U>h7=W77<78(7'q7&H7w&7J%7$¿7#7"#a7n"/7!7 !ɾ7Z 7a7-7[TX7,ǽ77Xkg7߯:70T7`7"iü7 X7h釼7%q7`7eRV7ٶBR7{5U7hQ_7;r7u7 67W^-7f7Z7B+7$%7AI b7g о7 qI7 ο7 _77K7~\77Qw7[b79!7#J7w&7[i77j77|Q7+H7B7sn77[f7JoV7p7J޶x7zi۶7ض?7&ֶ47Ӷ 7dѶVo78ζ'7̶127ɶ7bǶ&7&Ŷ17i¶!y7yW7D7[ 7R"7Zc+7y%7? 7wR}787 +7H77D6v7nm7ŮN7R7R7,77*7D7\7V]Z77䩶J7~#)/78^o7D7ʦ7$7(^7Q!7w,7T7=7ھq7eƟg7'Þ77擜07YdX7Oiz7鷘ڑ7_"88z*%%88<88U88wGp88n?8888n888r88n98E?<98g9849898ޔ98)ob+:8xKc:8)̞:8 :8;8a;8%;8h;8„@<8n<8HZ<8F9=84=8:#=85L>8>8?8nt?8BX?8"D@8@8FA8A8GA8blbB8VB8m?@C8%hC8? $D8D8^D8^E8~E8S+F8%*F8F8[MG8G8EG8QH8zCH8CwQH8,5I8?zI8񷡼I84BI84J8QiJ87P'J83J81J8&eﷰ K853)K8?K8QK8I\K8 aK8a;`K8WK8cHK8 41K8K8췭J8FJ8+ИJ8'_J8nJ8%\I8L췲I8s=g5I8/ H8")~H8췔H8EʹG8PG8rF8mF8F8QE8F^IE8=뷠D8MD8/Y8D8C8!WhC8OC8us귴B8U귥4B8U4귘A8@}UA8*鷝@87\@8o鷏?8U鷟L?8qa>8"T >8R€=8Oh#<8淥0<8s淽;8:8N0:85䷳a98ê88s78]@ 378S᷵z68V!58O߷58FD޷q488ݷ38/ܷY38(۷`28%ڷQ18'ٷ18z,طJp085׷6/8AַIH/8Oշ.8%_Է6.8nӷ]-8~ҷl7-8ѷY,87зK,8Ϸ+8[ηh+8Zͷ*8̷*8̷*8˷)87ʷm>)8Rɷ(8ioȷe(8AǷ'8߯ƷN'8ŷN!'8kķ4&8&ķQ&8S÷%8·X%8ij-%8$8|$8W*$8#85нו#84R#8R!#8x"8⺷"81k"8\7"8ื"8@[!8f!82c!8zg&!8鵷) 8k[ 8δM 8Cq8K80Y78y8W88W8z8쯷58ZA8DǮl8[1 F8$8np8` 8p>8i8\pG8S©808Z8ܟ8?ᦷ88TV8_.8jA 8$墷V 8 up 83Î 8X 8|8>V8ƝG8휷|848.D 8tPz88&䘷'H8#B8i88Z8 J8c87Ŕ|8-j8s7U-7Ly\7<y7BM7z5 7gΐ]7m 77q#7l^7 !f7َ 778Xa77w䍷7ᮍ%l7{7J7on7h팷 57V:77gS77<7M7㋷u7+77"Z+7!*Q7A 7Ɗ7x7[07#7.ꉷà7خ`X7q727|7ͮ270j7# 7ۇdO7w7*F17a7>7Y7Yh7T7a7 a7ഄ74]Ҭ7P77P7x87򙂷%7={7ၷY7 m7&b7EɀS7k?7M74a7~К7}DC7c3} 7z|7{D7a {7Xz7QyP7x7 Dx?7wh7v{7I?v7uG7 t)@7 Mtj7sԮ7 sCf7elr7 q75q7Ҝp@7p7ooo7n\7Fn 7*m(7("mi7lp7.k$7mk}f7oji 7Jj7iN7$i 7h7gZ 7cg7fHJ7 0f7Be!k7bd]7Sdo7'cw 7hc7^bO7a7a 7R`n7,_a#79^7W*^S#7l]7\!7[f7.$[!7 \ZS7Y#"7X7W?&7d&W 7TV;/7LU7ȬT>74S7SS7)RK7zRQq7zP7rO77N-7MM7M}a7GL27rKo7'J.B7Il7HM7@&H97UG7F7EXI7Dm7D$7(UCp7}B-7AF7"@w7B4@t7n?3;7>7=7=-7Z8>8%>85V?8~?8!.!@8z@8 @8aA8rA81Y@B8VB8}$#C8lC8Y2D8DzD8-BD8N^E87E8>F8O7F8G8fG8k8KG8KH8nH89I8Y=aI8PI8J8IJUJ89pJ8J8љE)K8.GthK8bK8%K8KT L8%[9L8e﷩`L8WdL8" L8L8tL8/9L8L8"L8zuL8>L8 L8췎L8췺hL8x췻=L8u L8-YK8%CK80췚?K8 췬J8̖J8&[8J8WI8mI8CI8CqH8$H8NG83t4G8MpF8g+뷴}F8#F8SE8 귎YE8(D8YiD8M&D8A0귾C8gC8O鷏B8鷋B8ݫ B8|鷇A8=zA8y@8m?8H?8˩緜>84緒=8eN=8#8#8䷷ "8I"88z"8A \A"8"H"82i!8u|o!8볷!8;a 8ײV] 8mN^8ı$}8D:8Qa{8D T8⏯FV8U 8h8ѭ]88u8880ZD8~8i8Ԇ8_V8>8駷b8X,8/j88֤8S8/ 8U6 8x 8~V+ 8H 8֞m 88&8H5T 8=YBO8(8Fg8ܘ2U88O*388qݕu58/8Y8蓷8PC8I8=8 7@g7=7`ː+d7`7h7-I7D17qkV7&b7\7N7ٍ7k 7f[7 27 @7ЌLu7/N*7Uw=7Lߖ7"M77Ћ7اu7~.7T7Y*7e[7ъ7ң7Ft~7 CJE7N7@ۉy7v7l1717 7a7v73_7f7<F79a7b7ˆf7~7/<7߅{7o*7:7愷7x,79t7ჷ}7##7/7Ղ~n7 z7]71 [7e,77H7N7F7L(<7On~ 7}ێ7e|:7D|7{r7zgC7$z7ryi7yxX7x 7fwG7>v~x7Yv/7kur75t75%tX7es07rd7Krh7q=7rq>7p7o'c7L^o7n7=n~75mm/7= m7ےl7l 57xkQ7j7^j%7i7AiFc7>hF7Q!h7ώg+7xf{7dfWN7e70ef7d7c#v7Qcv7?b|7[b7Va|7`7_w7}@_7^o7)]7} ]Yd7L\7[Y7Z7YrP76*Y7[XLJ7W7VH7jUG7UrM77TP7_SY7R7Ql7P7Ox7 Od7FFN7lMF7ʓL7K|7hJ7JA78IK`7bdH 7)G7OF\7E 7Em7QDq7҄C(7"BR7A7w%A]7<]@7?7>7 >q7D=<7:<@ 74;7:$7W5:~77y> 7H777H2۾7Ԛؾ77ݾ787{77, =7Lk7eZ77 -7 :7F =7vh M7Ԅ 7h C7«7f77<77n7ӛB27$7}h$7D޿7667K7n7+ӵ7|>7S7dO7X출<72q7B7䶊7F47K߶y7ܶ7UڶH!7l׶u7Dն7Ҷ"7%жx7dͶy76!˶< 7ȶEo7|ƶ7FĶ7%¶B97m7b("75R7O97r7ouR7 ܗ7 d7򕳶7@7177/寶W7 7vm,7+ʭ| 737r7b;7Ev^7֪)7.7|7Ȩ07 {7\I*7…72C7ݤƁ7 ҽ7_57i107=2g7u?786u77򜶣!7Y-F71axe7~7r7ѕ98oǡ98N`989898§4:8s9:8%AR^:8W:8:8:8P ;8b;;8<2p;8;8;8<8ٸC`<8 <8=<8Ck5=8+Uf=8@=8@.&>88}>8 >894?8?8?8N]@8%@8 0A80ӜA8^ B8j|B89B8%2cC8OAC8Pz$ND8kD8[V;E8/IE84t(F8 F8G8iG8kwG87eH8wH86KR;I8I8CJ8 dJ8nlJ8|'K8hK8K8EmL8 ^KL8 ŏL8sI*L8 M8DM8CxM8 M8o3M8C3B8跁A8O A8l@8h緛?8淇?8uf>8~=8W巩<8̶T4<8 u;8b[:898`=9888߷z78޷<78_ݷ68ܷ58H۷48ڷC48%ٷ38O{ط28G{׷I285ַk18ֈշ18Է˔08ӷ)08qҷ/8ѷ/8з3.8Ϸ79.8ηE-8ηuX-8(ͷA,8>̷Iz,89U˷ ,8kʷ+8ɷS/+8ȷ*8!ǷP*8Ʒ)8 ŷbt)8 #ŷ)8=Kķ(8,u÷^2(8ڠ·'8gh'8}'80ѫ&8eRS&8 &8ֽ%8<Jp%8R2%8$8ٺz$8$ޗ$8[uk$8˸@$8G'$8#8##8W#8eŵ~X#85#8"8"8e >"8H!8}?!8|!8[j 8ް$ 8Qd88a0u88(8wpt8{֬b89G8ŗ1!83G8lHJf8s}8訷8S2ɘ8wٞ8$8o8$8Sp8}~8ߢ8á+ 8Mᠷa 8 89 8, 8D 8\O8Ywć8&8Ŷ?8Oݘ^i8 8f<28vx8v"8TϨ8^O'88G84Zp8KoU8ߑo8W|8sؐ78`7x7 7%š7Cʎ?7 ut7%P7ۍ37ז7V7GpB7㌷7%ڪ7d`7GQx7%757ӋJ@7g77_n7':\)7F7튷K7ƊT\77Ku7J7l P7 77Wԉ7[UH7'&77δ/7xB7;7 v7{7tX87.)7憷7(Nh7QM 7?7Q7d@7J77j*Q7 7.7:fT7V |77 YM77^S7DFA7逷7(Ǐ7O077ۦ+7)~y73~37z}7|7 |97U{C7z7yL7;yG7֋x7wj7C2wJ!7ψv{7puo7+mh]7;lH 7l7k$`7Lj7oj\7iJ7]i~7/h37'Fh!7g7b)gA7f78fT\7neq7Vdl7:dD7cq7bn7Ubn7a77ad7yR`|7K_1U7^7,1^B7ot]7\/-7[7+[7bZ7Y#7X'~7W.7$Wq7PV7hyU8k7DT7S?l7>R7R]u75Qm7YP7(}O#7ڠN7M67L7 L_c7N3K7ZJ7ҁI;7H7pGj7F+7=,F 7iZE7D57кC@7B\7a B.X71UA7A@7?E7>:U74>7n=T7<[7i;x7x ;F7]:7907+8#7o8˒7Q7 j76B7G57 57F47o372K7(1l7G81,K7Qt0*76/7.7'.57>c-m7,67"+S_7+;7`T*7)7(7b(Q7M'Yy7p&N7$%#7%7PW$7Ü#ژ7"h7+"q77u!+7Y 77 7]k787At7#Q7j7kp7AQA7G779X7ڰD7 e}7a`7H7]t57f'7u2 7 7]$707D7?|a7ă7776:*7!n t7 7? u'7 %7 73! 73 7?7^E<7eD'7H=470Y7K"7477Es777MG7޾7J4737C,Z7p}D7Ww7WV7[7 ߶07iܶw7ٶ7 ,׶G7kԶm\7WҶ,7϶7Ͷ^G7ʶE7LAȶ7/Ŷ7ö]7A.7f7=-7Ի"77+P 77#67O7`'W77c0Kq7U7?!7ɮ)P7>b7oV7ӬK-75>737R7Fw7ө 7r(ZW7uu77H737d7C7O7Ǣ&7u֡7۠I7ן.7Ǟ^77t±7,7Ι7Y7͖D7l)XD:8|8_:89{:8":8%:8O[ :8^(D:8G%;8"N;8Tz;8o;8&G;8s <8VD<8m~<8& <8#<8;q>=8oe=8M=87>8#k>8>8q?8p?8?8c.@8ԑ@8~L@8aA8mA8;B8HB8C8dޓC8k D8_D8nD8uTuE8iE8\jF8aL:F8K:_G8%G8 ZQH8H8SL8 iM8M`M8?HM8%M8HQ1N8)oN8𷼨N8X65N8T O8́~5O8V*YO8xO8zO8I3 O8(O89O8Z1O8§O8!O8'O8x췅gO8MAO8$췃O8XN8˙N8QN8M8rVM8cAM8V뷔L8n뷓cL8nSK8#NlK8?hJ8?gJ8뷼I8dI8)'I8귤H8X\[H8#9G84~G8G8ئF8鷆F8]VMF8a8䷜=8+J䷃6=8m㷩t<8 );8zj~:8᷅I:8 98Z߷i88f޷688ݷGf78ܷ68)r۷Q58p\ڷ 58Hٷ3k48:ط382׷`#38/ַ28q1շ186Էbt18?ӷ08)Lҷ}08.\ѷ08`oз/8Ϸ#/8ηز.8ͷPD.8A̷w-8˷h-8ʷ\,8ʷ],8ɷ<,8u7ȷj+8 UǷ6?+8uƷ*8˙ŷb*8ķ_)8B÷Y)8N÷)83;·5(8VhKM(8O'8 ʿ'8-3'827&8 rk&8T&8ﻷ&8v3%8z%8 ǹ%8%_%8sn\8%8ʷQ%8*$8ꐶm$8$8ij$8tڴ3$8,M@#8d #86]#8 #8""8u48"8: &!8WF!8p" 8`- 8[ή 8:8>8 Z8q8Vҫ 8.'8/I8۩a8,r8/xz8W}8{8h%77紆7lke7(#"7zׅ7c7:R71ꄷ1 7 7Ds7%77|B7Zꂷ17N57w7p7܁377& 7ʀ@07m7;7>iK.7~74}7>}27|A7w{7{LB7fz7Գy7y^7CSxy7wP7v~7Rv?7wu7uڶ7Rgt]s7sq07,s7Erz7qh7Mhq&75p7hFp07oX7-oP7nT7n7Ym#57mP7Ql7l+D74k7k7}j;7i*7iuig{7hO7"ih7gB7Wg<7fIb7V7K7J7If 7tH7Q HS`7]HG7qFЫ7EU7D7C7'C5e7XBe7$AF7%@Ҍ7?I75+? 7c>~7=֏7)7|7I767G57657s4Z7s34727+2e7h1z7p07/7/E]7Z.97-$7<,+7,7L+ͨ7*7),\7)t47 B( 7'Z7&ŷ7b&7+C%^7$$07c#Z7#k7tV"7!n7i !<73 7ɀ77o7o<7v 77k7B|7P7VpE'77(!7y7N7**‹7Fy7gm78,g7df7l7}Iz7kI7شH77<*7.{v57X t7 )7s D7F Mn7l /7 F7@7)G7b7Xs7q7\77tF7Μ177 7X_M7~767!^77Wx7Ì=77_A7uq77|޶7۶;7.:ٶ`7ֶۤ7~Զ7yѶr17ζgx7z̶־7ʶ7߳ǶNF7lkŶ$75öh77 7:7FP7r%Y7S7[u?77 ɳU7򠲶7t07T87կ7^7SQ7f7{7`Rn7ʫu/75 7m7b7 fc77M I(7pU ~7?7$ϥ 7^7q'h7E79Z7cV7c7X7CB$74-7⛶GB7c7.^~7K7!7{k:8*;8:9;8wX;8B:z;8n;8;8ެ+;8<8?SxD<8)t<8W<84<8>=8rR=8zE=8^=8D>8,c>8,>8!>8SS?8kͩ?8_@8a@8 @8%A8ߋA8A8bB8\B8CC8P"C8.D8>D8!E8|{E8vnF8o@F8fG8,[OG8NH8>H8S,hI8eI8J8S}J8J8ΘUeK8Nn K8>AL8Q ϨL8 M8NjM8HBM8N8jN8{U$N8mO8HO8~E񷦋O8^O8P8B$.;P8-kP8pgP8 ﷍P8PP8Q\P8 Q8Q8mQ8Z%*Q8 Q8P8kzP8<8.P8PP8bpP8J6P8O8}oO8]fRO8YWN8YkN8^EN8v`ߚM8UUM8:,L8*1L86귟K8iSK8ͫJ8$e1DJ890lI8YeI8ܯH8[zpH8Q[7H8~+9G8aHG8LȭG8@mG8跽F8-跴ZF8KE8跛E8ޝ跶|D85跩C8OPC8V1緷B8XA8]淌@A8n@8t?8kZ6>8㷢0>86㷇j=8g_<8)#N;8v4M;8̶-:8{߷98޷!98Fݷ="88lܷOB78VY۷368<ڷ58ٷ8+58ط48ַ38շM38Է28bӷ>28ҷ18ѷO18з08 зh08, Ϸo/86η/8Jͷ\/8G]̷".8n˷I.8ʷ2-8ҕɷq-8;ȷ -8_Ƿ.,8Ʒ),81 ƷF+80ŷK+8 Vķv*8|÷i*8/·)8)8G*)8-#(8`e(8 (8ѽ'8:r'8>N2'8o&8mպ&8<&8gin&8H&8%&8Nif&8ʶ%80+%80%8P dy%8|G%8c %8d0$80ڲy$8O<"$8ű#89W#8!"8d"8b`!8G!8fj 8o֭ 8;@`S8̦8Y 8g%8,8"I8Lj[8d8De8 F`8SV8G8W줷s58!8J>8%_8z8퐠8 8bB 8# 85Ĝ 8[͛ 8ؚA 8噷r88r[8-hC8R 8fH8{8V83:88ב86X8c'88hx8=:8ϝ 8r28΍8rp8xF8όV87E7 ]7pы7Y7Zo7CFL7 77ЊS7殊1E7=7onZ7Oe7/D7sc7f7Љ7VI7' 7Wf7?7gU7숷7H7S)7`h7[,.7`7P7G74FG7 7+ņ7^٘7r;;]7y~ 7Q7]7?a7s7o)7G7wɃyK7Xt7 07Ƃf7]n7!7 *t7y`u!7:7Kz7MN&77+*b7yq~-7}t7}7I|:7*{L7zD7 *zS7wy 7x17xy77kwi37v7v7suh7?t&7^1t7sf7rIe7brd%7qt7;q77phd7p"7o7 o"7ÇnV7n7mq7m{7l0-7lv7tkֈ7kQ27j7P j{7i7 iK7hnO7h"7ۂg{u7fJ7tfg7e7Ze7'd74d7ci7c7Sbb7am7a7l`M7_׻7 _(7S^n7]7\j7\c7P[r@7RZ7sY7^X7eX7AWd7iVU7UI7Tſ7jS77}R#7pR.7}6Q7UP#07IsO$7N=7M7LU7K37Ky7@/J7QI7UuHG78G7jFΊ7&E07E7܄7=E7x=7A7d547 4G7H3\7g3O7F]2q7ښ1YJ790)$7~0S7R/7.7u-77 -4g7E,@7h+T7R*7v)79)I7w(x7N'N7b&"765&7u%I7$̚7#Uk7>##;7"T 7!7o!o7[ vs7"@7 7A7;7u7.4C7O772ӷ7mF79e78 @727;7B7͚7.>7H=77Ȱ7C 7kK77*7q"7fL7: 71 7Ih ] 7 ]\7 7 7 7/`7,GY7&X7b7fUM7dY7]W7N^l79H57;7J77NǴ77yӨ77,{<7B[7n_+7| 7,K37׌S_7ݶk7~J۶7aضc7ֶ97yӶw7'ж޵7}cζ71˶378{ɶr7Ƕح7Ķ7¶7zE7.ol7}7بa7=f7V7׵7tt<]7-#7c7$o7S7n7ڦ7PP7IT7z7,,7Ģm7 ա7k٠ 7ҟ7R7C7Jy 7:7v癶7}N 7:"7h17ù;8M;8^g;8'\<8k:<8 _<8rI<8aS<8P5<8 D =8x?=8ȼt=8 =8w=8X &>8;g>8(!~>8>8_@?8]?8E?87@8=@8)@8lNA88A8!B8bB8B8|_C8yC8w-HD89vD8t:E8seE8RP8͡P8?>P8]KQ8BtC[Q8𷷑Q8ZQ8JQ8R83R83KKR8^\R8]"hR86nR8oR8`JhR8~bYR8%BR8!R8ո,Q8]뷽Q8meeQ8DiDQ8&P8ڛP8 5P8C뷁O8IO8뷺N8KKFN8M8귭5M8y{L8ks:L8DK8qUK8J8}鷤cJ88'ⷄ=8<8^0<<8w෌;8h߷8:8#`޷98Gݷޱ88"Eܷ 78?۷78.ڷFt68{ط58׷z.58ַh48շv38}Էh384rӷD28~pҷw28xѷ28зH18^Ϸ 18jη08ͷ{D08v̷z/8K˷A{/8ʷ/8ʷ.87ɷI.8{8ȷv-8.XǷv-8zƷ -8؞ŷ,8ķ+,8÷+8|÷D+8c8·s*8gdi*8E*8fƿ)8x9)86}(8rӎ(8F(8(84'8x'8羹Up'8I'8YTW('8 '8&8`&8ȵ&8S6&8x&8W&8 &8 :%8Zzѐ%8gﱷ;%8c$8Oװq$89I#8|#8("8]"8^L!8o!8جAe 82e7〷77,t7!#7~71~7y}m37| 7 |}7RT{J7%z7gy7J9yn7x'7-wy7-w}7v[76u77u7t7Vs4]7[sj7yr7,r7֙qg7i q*7}p73o 7loxn76n-7en7m7)hml`7l7pl7k~7}k-7/k@7ߌj7jj&7i7!iQe7h7*hғ7VgS%7<,g/7ݩf7=7$f:7eRE7Ie7fd>7c78Zc1,7\bl76"b 7a({7`Y7-`O7~_7m^7^7^W]7\O7[7 [7a?Zڀ7RpY$7XP7oW[7G7>W7>=7v<7;I7e:$7%:F7a9E78n77h;77Y 7X67Y5q74T7g4DS7R3*(7271=7 107J07/SZ7*.327. 7@-7},j7+Ð7*g74*=>7Sr)7(7'N7,'7k&c7n%57$ 7-$-7~p#7g"Gu7k!C7?!R7A s7n'7,w7ngzD77u7OTѭ76}7M79N 7ϣa7+7\Q^7M7E`7ZC74+7[ Q7ch777*d7ֶv7m7UA+7hI7U]o7H.27o 07 7@ yY7 a7J 78t g7?R7rJ7l7;LT7k7V78C+7 ,7n7$W79~#7?x77 j7@e79m7^7춫7W7綩75w77T߶ 7]ݶ>7ڶj7tضa7lն7Ҷ7Xж87;Ͷo7R˶7 ȶy7ƶ77Ķ+E7r7ֿ7yȽ{7Ի7y74D7j7G)C7+ƳQ7\d7W7N7br/7|7ϭ7m7u#7X֫7>7 7Rj7pV$7:򨶲7NU77D77(Lw77RĤ񣶰o77,77997v8u7+7E77m<7m|wb7%%j7KÜ757i,7Gs<8C'<8 <8<8<8sT =8CI=8:0u=8{=8=8>8bv?>8&Ty>884Ŷ>8)>8e:?8?8?8@8l@8@84A8{|uA8r{A8j8B8dB8_C8g\uC8bZC8zY[YD8gYD8YBHE8Z|E8"\AF8Q]F8<^BG8^G8]KJH8\H8XUI8-SI8|KaJ8=AdJ83 lK8#-K8pL8L8FiM8³M8XWN8]N8)t4O8󷡛O8hO8w_WP8󷊮P8P8?_MQ8Q8.Q8>3[)R8wkR8clR8wR8%S8-﷩>S8tdS8*fS8S8~S8OָS8S8MS8_췵S8.췠S8qېS8̗mS8n`n@S81R S8 R8R8:R8_귽Q8}3oQ8̷P8귦yP8ŰO8ۘpO8{귓N8`그]N8KHM8/귵XM8 귾L8`oXL8~K8$jRK81J8͒J8F]跧ZJ8'kPJ8aJ8ZuJ8ofJ84UI8Q}緰H8 uG8-F8 緕F8/TF8oE8|-D8;巵 D8˛PC8BnB8hZA8Kw@8V@88෷=8{ෂ=8߷Kk<8޷8;8ݷb:8Tܷ!98۷L88 ۷78'ٷ*78ط+o68l׷58Mַ58+շx48 Է^38ҷ|38ѷV38з+28qз128)Ϸ18BηrN18fVͷ08vb̷Y08j˷008tʷ/8Qɷx/8ȷ0/8 Ƿ.8ƷN.8 Ʒ -81ŷVu-8Vķ-8}|÷,8J·Q,8+8,:+826*8ih*8ɣD*8^ཷr)80\)8] )8͜(8ۺT(8Mi(8YB(8!(8(ⷷ (8m0'8c~'8S굷d'8T'8Ŵx'8:r'8`c'8(-'8r&8G$&82P&8*%8p%8᯷%8QO$8s$8.o#84B"8r("8bj$t!8ʫʴ 8w&U8}8ѩ58."E8nI8fCD85828f88Ig8㢷-8Bj8E8,%86 8';8:D 86 82 8. 8- 81C 8;w8{L8,dr8a88BؒJ>8 @8QK808lX8AT28}848볍l8<78fΌ8Oio8 8ȸ8cl1m8'QL89芷,8L 8{8M8"088Mىy8_\8?89!8fV8N;7 67>Y77w툷W7Ԉ7VCt7;7~B7^47 <֖7;a7+7 Ƈ@7q7j 78_7e-7̆T7U7gU7?j7ԅS97ѐ7J37V7뷄in7k87<7:̓7{|7u(L7ӂ5 7!~7<'7Hρ`<7nv7A7f€]7wg7 7`u7~'7*}7H9}Ќ7|@7{7e{n73_z=b7Pyw7"xh7Hx!7vwrM7v 7(Dv7u7tsO7OWt#7ds7s 71rb7q(7xaq7p7Ipz7o>7>o71n7r>n7XmD7Hm7l7Zlt7 k)7Krk7Uj'7όj47^j7i7b4i7h:71JhP7g7YgSq7&f7^f7^en7Xe7d7Cdp7c7csS74b7.a)7^Ha_7`7_@Z7G__7^_7]}7]47[\<7ԕ[7Z7jY\7 -Y7'XX!7 W7V&7UU7Tc7T-7"S7=R7yWQ&7}pP7 Olz7zN7M{7L7@Kk7)K7!J<7V=IR97[H7azGki7FH7lER7DI7D7/CH7YBE7ЅA7v@~7?[7M?17sG>7C|=އ7<1F7-;7#;W7-]:7L9T7V87087N7Q76S75M7 5@7`H47N37S207G2{e7C1i97j0 7/7.ܷ7<.'7{z-ub7,77I+ 7s2+~7o*7)7(]7?((h07Nf'7Ǥ&7%07z#%u7c$E7W#7"7_+"7p! }7е J77E#77v|7(I75w+7'7@7jkш7<\717j 77v7q77M#q7{_7gR7*kJ7KH7\K7)7U7Z{e7}74ۛ7`K7Z Z7c K&7) d7d 7& b7 T7C7 7B7P_~7u7&7_M7 `7ݐ 77S^|7A7'7G7 7ǜé75d7kV7UG7?7j8綐77n-7|q߶u7ܶm7c1ڶ7׶b57iԶ^7[Ҷ7϶!7;Ͷ7ʶ7GȶF7Ŷu7ö17U/7*Q7& 7h !7F/7쉷.27뵶'7`k 777TV7/7'q7ѭl7$7%eU7ek7/&h7N77t7䨶U7:P77w7c7^ 7줶N7|!B7#L$7kA?7kr7K`7p72p;7QZp7 (}7𚶜7t7M7ޖ5,7Z\A7ÓaQ7>+=8 L=8m=8h=8U=8$=86v >87>8g>8w[>8DR>8/?85D?8Ѓ?8+?8 @8;U@8@8s{C@8:kFA8/]eA8SQqA8G+WB8?B8#:KC85uC8r3C8_2dD820D874NE86E89CF8H=CF8A0CG8DlG8HKH8KBH8M,ZI8NI8MxlJ8IK?J8ZFK8>' L8Q4HL8%M8M8|aN8XN8O8dO8jP8X7qP8{P8':Q8j󷎖Q8vQ8BWT8T8ڤѨT8r<:T8-T8rT8U88 U81e췤 U8췢U8S뷽T8{T8:kT8뷴~T8KT8a귲T8귃S8_xS8NFS8L귕R8 Q'R8N귉Q8|?!Q8)"P87<P8규O8 N8 mN8b鷟M83 IM8~>鷨L8z.L8It跬K8P(^pK8Y緇LK8$NK8vYYmK8 K8YqK8-r淬lK8QfXQJ8wG8跢G8>9G8taF8l左UF8]E8*E89㷙KD8ⷵC8mⷉB8GA8hx@8@8JK?8߷ր>8޷=8=޷8=88ݷG<8ܷ=;8)۷98/.۷9L88ڷ.88@ٷ78׷f78ַO68}շ58ԷN48zӷMi48fҷO38cѷ38qз338;ϷS28aηOR28ͷV181̷y18˷`(18ʷ"08ɷ08tȷ708"ȷ1/8iAǷ/8oƷn/8;ŷ.8]ķ@.8I÷&-8÷T-8>·,8n t,8p,8޿6+853+8FZ*8ߘt*8Fּ !*8)85J)88Q_)8x5)8踷)85)8^(8gY(8;(8jb(8Ѵ(8pHɲ(8)ó(8>k(88(82'88'8a'8'8&8hv&8殷Q%8T%8:­f$8,E#86#8\"8lP!8C= 8O 8IJ58>8ߧ<8d"/8^88Ĥ8ؤ8%s837^A8R8e\8q8uv8Ysv8kc8aeY 8W7Z 8HN/f 8JI)~ 8I 8:P8]8q^8J?8~!8ݑ18Y 8U8D88[8ǍV85?88pLX8⋷8Bc8)?8Cڊ~88 R88~㉷P88hu8dZ89C?8$^$8 8_8ڈ8ň8ڰ'8s~8 b8tIG8j_+8/I8z177'm7އ|M7P7t7t7L)7w mU7&77g7_U"7r7ޅG7ן~72^77ӄR7xi7@@:7z󃷻7Ĥ7OT77i707Yj7~=7/s7S/7j7Рi7>FZ7Ow7g+7g~U|7H}G17|7A|7{S7z; 7kz7Xjy7۷x;7Bx7Xw7vfz7lv=7<[u7t7tj7xs T7r7Gr7cqڮ7$qGx7XpA7p 7\o%72 o7n`7n%7Hmt7"m)7Llmg7&>l#7k7h`k|7,jaC7jY7djT7iXA7kAiT7h7#eh7g7g<7+ g7fN7{f$7֝eM7\eu7Ӗd*;7 d7>c7bɃ7@Vb7TaN79a7s`\7+_l7_7c^#7(]}7w\D7 (\07F`[E7kZk7Y?7X7X77>WY7Y`V7U7T܄7S7LRY7+Q7P:7P7+O(7a@N 7UM#7kL7IK,7mJ7I5D7_HF7Gi7G7T"F7BEo;7dD,7&C7B*7ZA7A܂7h/@i37]?7?>u7=T72W7n}17w0i76/5r79/]D7x.7c-l7g,7!2,7o+`7* 37>)7')7'e(7Ѣ'2x7&&H7&7]%7G$d7p#R7y#P7`"s7!7 7- 7sO7ûG7k7P777Q7: 77M7107Ņ"p7kI71%7s7l7d::7 877C677~,7DH.7@7 Ӹ7d?G7Q7s 7 KF7Oe D|7n C7 7" jO7 P Ǧ77n77Y7>7-bh7%7,7->7'76ģ7_b74)7U7#TD77 7- }7S붉o74Ch7'g7I,l79v7޶@77_W7bk7 w7<Ķ y7#m7S7*;(77̯!7îj37׭77Jj77 a7g/7ש7KUr717=4H7ѡ{7z 7c+7'7jh7Y<74o %7Ex7y07  7ş8i(>8V6M>8Rt>8z>8>8|>8S *?8 -v^?8Օ?8G?89 @8N@8m@8>w@8a%A8NNtA8="A8/B8"vB8B8/5C8 C8ZID8PnD8CJ8@@}K8P@Y L8>L8V9"$M8 1M8%}9N8N8EO8O8DP8EXP8ku6Q8|AWQ8Y R8xpR8s R8eS8LrS8VS8T8YT8񷒢T8ݰT8SBH%U8u]U8_﷭U8iU8B{U8 U8V8e5+V8NE8 TqD8])C8/B8Nf!A8߷b@8s߷p0@8Q4޷ i?8Dݷ>8oܷa=8۷=8Dڷ;8%ڷ`:8ٷ/88Iٷ,98طě88ַ78շ68 շ.68~ӷ[[58ҷ48ѷʄ48ܰз'.48"Ϸ38ηKf38yη28|8ͷz282X̷28T˷B18Oʷ 18MVɷII18Oeȷ08ǷU08Ʒ|F08ŷs/8L0ŷv/8[ķ/8÷V.8·'.8 -8:"=-8S,8Ԗe,8۾W+8+8u\2+8*8Ȼ*8VR*8%*82D*8it)8ӓG)8Ƕ)8 +)8a)8ɴ)8q?S)8W )8@)8²t)8$B@D)8K )8=7(8Pא%8$8jA$8uI#86˪-"8d!8kg!8=. 8oQ28D&*88i98$줷88@d8Od*88ܘ8iuy85E8888? 8 r 8td; 8[ 8\W 8Y* 8bof80s28 8s8ؐC8p8 Q18w 8BL84[,8*ʌ8D8ɋ Z8X1085 8q8DX8k8{8{v|8Fc8dK8<숷e38Lj8(8?8jq8u[8G28'68%g8{M8}*388凷8'ԇ8,8qo828@|[8Y`f8AN8A f78: 8YԆ 8u7|73K7Zj7B7Ʀ[70j7*w7鄷T77]Z727Ƀ7B|7-7܂,7|zM7e5 7߁;7L&71Ah7؀&(7a/7-%x7ȔD]7@~7'~7o}7|?7||X7dI{±7zcl7_yD(7(y57 vxM7wc7w$7nivf7Tuۭ7ut7 st<7s73s7ڙr7ri7qq"67)pK7@Xpm7=oY7iNoi7nT57Tn7m7gmŏ7lT7džl*7Ul7 k7lGkOM7 jN7yj67jb7"i 7EHi7h]Q7ezh7hh}7qg79g7f'78Vf7-er(7hfe\7cdo7ed 7c7CScX7b7-b7ϒa{7d`$7L`"07_@7r^7<^j17>]17\7[+7<2[^7'dZ7ӑY(7ZX7W:7)W277"V7z>U7YXT@O7pS7R7Q7P7oOe7N 7MS7L7 LP7kK71J \7/GIF7H^HBv7'wG7БF73Et87aDN7C~u77C7#4B7P[A i7@r7ɯ?7$>tv7 >*7>=7q<Κ7;"V7\:7:7 O97ʼn8W777Y77?6 7!~5q74;737:3d7Bz27ѹ1l7O0:7807 7w/57L.7--w7T3-F7q,7]+X7*7;**]7g)T7ޤ(#7C'C7'\7v]& 7z%o[7$(7$W7X#70"u7!Y7"!$7` 47?ۻ7-72S7}{77P7^7<[7i-7%O7G7}87KM7Rh7I7!Ql.77x7)[y77 X7AcX7¹77ob7(78H7O Vp7 7F 17d# 7b X7 77Z7O27Y6/7|'72%7@_7+I=7&E7ju7(7 7`573E7 77eT7𶒌7lo7)붂X7趛G7'涥<7z177167i޶<7۶F7(ٶ+U7tֶg7Ӷe}7{EѶؖ7sζ7 ̶7+ɶ7* ǶP7ܞĶ37A¶aT7r7797۝E777O57wɲ7|b o717o_7뭶y7O70dd7zw7Ϊ}727ퟩ 777O7 {=7ꦶ7RQp7ȭ7tn7"F!7^D78n7ԡ7렶H77,7䝶7ƜQ7Ǜ07d7 7Η 7,k.7I7p`71ّ r7T2>8J>8(>8Z?8$/?8Z?8;Y?8/!?8?8` @8"Y@8\@8@8;ciA8IY]A83ҦA8A8$ DB8 B8B8aLC8;C8D84vD8QAD8DlOE8E83L6F8F8*G8G8+H8dH807I87 zI8KJ8} J8$jgK8M*K8/L81{M8g2M8"07N8+N8"zSO8O8PeP8P8lQ8FQ8|a`R8QILR8 T;S8gS8{uS8MLT8WT8HRT86U8R~U8wU8 V8r'RV8ǮV8,5%V8O?V8E W8y)W8]CW8췞ZW8W췱kW8b"JsW8\poW8<]`W8_cIW8:+W8q귨 W8 5 V8鷵V8o鷱V8ٌeGV8Dd`U8NɁU8MG鷺U8B鷘T8|8S80,tS8*R8?RWR8k鷓Q89Q8YeP8θvO80C\N8YM7N8跩M85M8^1L8mL8l淣L8.L8nJL8}{FK8/4J8J8\K8]I8'巇H8Y64H8GG8] Y~G8ⷼEG8CqF8 J)F8෵XE8BN෎uD8߷C8b߷_B8?޷A8ݷKA8ܷ8S@8۷?8ڷ>8,ڷ=8Dٷ2<8*zط<8׷:8\׷7:8;ַrv98Eշr88ԷŖ78RԷ 68Tҷ58ѷ58з,58Ϸ48ϷP48Z<η-48gtͷ38̷D38˷28ʷ28ɷ&h28sȷ28ǷX18Ƿd18HƷA 18ŷK088ķh408÷/8÷A/8B·_.8dx4h.8;m.8-8R#*-8,8佷I,8"+8TW+8G}C+8v +8e*8ʸ*8q᷷*8*8&*8d:*8빴U*8 &7*85$*8,*82-*8@*8ıS*8HDk*84)8V9x)8)8h#{(8>:(84D'8o1'8֬&8@9`%8CD%8ꪷ$8:Z#8"8Ҩ"8N!87a 88ܥ8'8+@>8ujd8G%8 8Xˠ8ݟ@T8@枷8=坷8BۜX8Nʛcn8I8흙/8" 8s# 8d2 8#[O 8Wz 8v[T8\g8|W88ȏg;8M8C$Y8 8팷8aTe8dƋG*88D8͊C8bM8ҋ8o8s^V8@8ڈ*8y8r8bH)8#8C8釷|8҇o8){8c8K828{"8Z~(8s#8g.87Z[8L8S7/c7b7 bY7ta73`|7.` Y7j_7^7^F7`])7֞\+7[(.7 [p{7;Z7fY7`Xj7W7%V7U i7U7\T7.S7*ARA74RQJ7 bP,7qO!7N7M_ 7L7xKj7ݽJ7-I7H7AG]7 G7$F,A7>E7 [Dt7YyC7B|7XAY7@7 @74?7Z7a> 7=i77h7 u7~`7AqpO7B7"N;7c{87y;7*%D7р`R7bf7)(7x 87' 7 7H[ 517 n7 !7n *7mXU7Ȍ@7i@7'7=  7+q7D7.X>7eS7l7vnQ7`7B7d7]!$7a/77z 7c7 C7U,8(7T#7u7wඎ7ݶr7Q۶7Aض7 ֶ7dӶz 7ж<7!ζ-7˶B7ȶaZ7qƶ t7ö[77D77ݺ76Ӹ?7L趶q7_7t7걶37o77(z7W>)7: 7 E7S 7z7 67 a2S7Ҩ$X7JF7ǧ 7hDU7zz7.kA77`7CZ7qQ77G롶n7 Yw77!m7]7^7ޛ7ǭ7p3D7%?q7͖7/f,77f~7ϐ 7(lP?8+s?8?8k]?8b?8 5@8 D@8Su@8S @82@8rzA8RXA85A8A83%B8TpB8!B8OC8wgC8C8@D8xD8D87J8BK8K8 cL8RL8M8o9N8"N8\#DO8!O8fP8$P8f~Q84R8R8ܪjS8 S8QS8aT8xT8}U8pU8÷U8Q" V8yOV8x&V8TV8z6W8﷨sW8u﷠W8?W8(x2X8)X8HX8}dX8Οw|X8g3X8 GX8]뷐X8{X8ڛBdX8JLKX81X8OX89z!W82yW8{pW8跑*W8V8;'7V8ѮU83#U8跹T8U2T8eS8|R8f)LR8W+4Q8RJEP8F跩O8 N8 kBN8|淏M8淹M8G混M87BM86巠L8&dL8䷅K8lDtJ88!cJ8k㷕I8㷷H8'G2H8ɲG8=yG8az H8~+G8c߷ G84߷1F8HU߷5FE8޷xZD8j޷JzC8Nݷ~B8*ܷA8۷~9A8ڷ-@8@fٷ?8Qpط(?8dط*>8t׷aH=8(@ַ1<8IշWg;87Էe:8ӷ98"ҷg88Jҷ78mѷ4/78з}68Ϸ68ηq58Uη̅58]rͷ058̷48˷4865˷38ʷC38%ɷh38#Gȷ289Ƿ^28 yƷ$.28ŷp18"ŷBv18Jķ'08r÷tp08·/8//89%/8QK.8ʢj.8l-8Vh-8ٟ^,8ݼ,8_a9,8w'+8;7+8tF+82O+8\+8Jm+8򋵷o+8BôK,8s,8ׅ+8 +8+81ʯ+8+8PGe+8nɰ)+8HB*8Pï_*8:!*8u7)8[tD)8(8򬷷4(8UN'8+&8N<&8U%8㠩$8]꨷#8#30"8zo "8' !88e88 l8>p8}â2/8硷L882H8)b8+8l#^8x8e8ڙ˵8ד8 8T| 8h` 8UV 8J 8HI8\O F8pb8. 8ﮎ8y荷8b.8F=Q8 ދ8Gh8W08ZA`f8ЉC8k}%8Q 88vD8 688ʇi8v8{Ս8Y]Z{8dDh80S8>8(8o8{8r88Vꆷ%8OㆷT8bۆ8>҆n8džV8?8A(8Q8f8Fn 8,SF84 8e8?텷8%ą8zt8Vg|d83T8E8ÄD78g)8F 8M88"vN8+D8߂N8?8@8N8wD8'E){8c8̖J8>/8N8n7^~7}o7|/78|72{97zuk7zB*7P\yh7x#7w{o7g@w47ԏv7{u75u17BtX7s'7Ds7rH7 rĚ7sqn7pUC7Sp7o7UFo7n`7Inn7mA7u`m77Cl7lɳ7 l+7kI7\k,70j27j7HjN7i07i]7@i`d7h! 7ҐhȮ77h5L7g7qgu7-!g7ھf7(Yf7eC7ςem7ee7^d73d47cP7c7SbI7a70^a7`<>7{`,7n_!7^7^c7JH]7\%7[77Z~7Zq7=CY7gXZ7W<7aV7ϺUI7CT)7#S$7RQ7RͰ7"Qg7cPy7'O72NQ7N>M]7JL:7VKy7cJ37)rIp7H =7G7RF9V7E7DX~7C7 C7)BT7KAF7o@7? H7ξ>@7=7[=;T7'G<7y;7:~u79R/797R8.77f7V62'767YB574oo7<3747K27=2T7I}170KO7/7P7]!D7G @7 7Uyc7-77Y"L7giՐ7^7-7G`7ד7Y72g{7,OT7/7+}7`D77X.{7e7i7Z8;7eČ7fg7CS7"7.7G7 78 7:> )7 Y7Y 7 7a 7ġ._7~7g 7sGUo7Du7I7y7LA7 7V7*7(7<$+7.757)W>7 7H77Y7\*?/7E 7579k7W7(ݶ7 ڶҞ7;ضV7ն7Ҷ7Dж7,Ͷ7ʶ7Gfȶs7Ŷ<7g[ö777!I=$7y37@7(kH7B{I7)?7L(7#7M&7&u7#!7;37Rr7~O7 ˆ7r7;757f"y7lB77sI7/ۤ?=76P7K7@Ƣ7[07 79&7EH7MD757#7^a7D7r7!7Õ,$7WiG7ܒ?e7R}7n7q0@8ޢ)@8rpO@8?x@8@8@8#@81A8jDgA8FA8%5A82B8\B8vB8fB8j7C8ǔdC8ÅvC8EyD3D8NoӎD8g+D8bmQE8_E8P_#F8`^F8}dG8izG8peG8yqH8ރUH82vI8nI8QJJ8K8sZK84T2L8L83 YM8RM8sN8O8αO8yGP8;P8IhoQ8R8GR88Էc`=8ўӷ<8Rҷh;8ѷH:8ѷQ$98rѷ88зj885Ϸ,78Xη[78Vη68ͷs68=̷68˷588˷58`ʷJ583ɷj48lȷ9Z48ǷW38Ʒw38ƷL38=ŷh28 ķX28R÷o18·+1808o)<08jm#/8?҃/8T8;/8.8轷 .8o8x-8| ;-8$,8ҿ<,8ҹ],8ظY,8L޷j,8;ﶷٓ,8Kî,8W,8C~,8,8K,8=,8@ ,8θ߷,8HI,8аz,8PSU<,8yӯ+8O +8Ʈ)+88e*8CF*8 Ǿ)8n')8lʫ(8c'8m6''8/l&8h7%8Gr$8#8fڦ"8F!Y!8=c& 8 98ԣl8A8-$8Pӧ8lN8Lg8L8t88qX80W84S8 i8◷8ڷR 81 8j 8NL* 86H 8.,@A 8/ɉ8l@+8`P8-8"ˌ!Z88h}8+ʊ\88#8ڴ8'>8ӈ8t_8xG8JӇ~8p88Td8 X8XL8vц(?8%080!8Њ:8}8r8k8Zf8@bZ8@_\8\8ZWi8WR8S;8pN%86Gp8=818"888#ᅷp8Å߀8 n8H~^8U*N8\)h?8U18ń|$88ZT5 8F8hփ8 8M&88E8~l888́8y@8n$8g΀Tu8 w`8I808~8>!~L8j}v8t|8{68C{J8z c80yC8Sy$8egx|8we7:v7MvDb7>up,7Jt7fGth7s7Wrk7]r@7q75)qm7p-7p7}~o/{7_nU7zn/7m{ 7m^7m77lI7Eld7k67k7e&k7aj7Gwj_7}#jg 7si7i֔7}0iAG7h7xh/7?h<7g7Ùgn7Cg7fN7 f~7-f7e:7.aek7d~7dE;7d7cK7cK7+zb7Ca7Qa67ײ`0~7r `V7a_t7ۯ^H7]78]7s\Q7l[6H7Z7IZ7'Y> 7dHXtR7dW7}V7ߑU'07T7ԲS7R~)7Q$7P7OD7N7=M7LԄ7YKI7Ko7J7Ik7z'H7O6G)x7_GF7ZEє7pD(7̇CS7Bk[7A7@7S@@7[&?<7M>7w=?7 wO8nP8B*P8lCQ8Q8[\pR84S8S8;T8{T8194U8CcU8F\(V8cV8NV82rW?W8D׍W8(W88B2X8cX82񷑿X8]Y8﷯[Y8: Y8eY8"Y8CZ87?Z8zaZ8U Z8Z8FrZ8ptZ8‡귓Z8NZ8 yZ8Td=rZ8HsZ8vZ81跓pZ8緟OZ8``3Z8R#Y8{Y8օX8 W8wPW8>V8緱U8$~8U8FxZT8:R緄^S8&緉HR8ɡ#XQ8.P8VO81 cxO8+O8X+O8e( "P8YⷁN8)mM8nBM8R2L8DgK8W4K8᷆_J8 [wI8ᷝH8bxKH8!I8I8߷X.I8J߷~pH8[޷'G8ݷF8qAݷE8ܷD8X۷D8 ۷KC8ٷ B8\ط7B8`׷BbA86ַ@89ַ?84շ>8ӷ>8٬ҷ4=8ѷ<8з:8з98зN98ϷP88R Ϸ4p88η78?Nͷ 78q̷~ 78̷~68S˷58{ʷX58Vʷ 68Kʷ68}ȷy58LǷ!581Ʒ 48ŷ648Lķ38÷V38·T28 18W)}18[08٩08"08S:08潷-/8T6.81.89绷D-8S s-8=*-8d,8Xs ,8܇*,8󶶷-85ٵ-8@-8 -Y-85S9-8f-87, -8X±-8Yl-8氷P-8ph׎-81请M-8gv,8⮷,8>V+,8­~+8(9+8;*8㫷*87r^)8?ڲ(8ͩ(8KI'8.Y&8%8p$8?o#8W"8դ!8 8PU8Xn 8? 8Р[8ꟷ88d!8*8j؛|[8p868Qz8L8oޕ8,8  8oX 89B( 8 J 8v 8 8 8=.8cn( 88>8UP8jz8*~8Rh]37\g7gdn7]gH7g7f7|ef7 f 7eB~7GHeN7/dO7pdZ7c 7~c]7b˭7&tb{7aA7Ma7`7c `7I^_@7^z7]+71]87j\%&7([G_7Z 7Y7Y7W1XO7*JW7^V7 pU7}Tf7?S7?R7kQ\7,P 7ͣO)7Nw7jM7LsJ7MK7Jp/7Ie7H%7kGo7[F-7E7uDE7D7%Cm7 >B7&YA74w@C7?7>7=e57 =75>75:@79=7+8Z7q18[7vi7$76E75?7577NW4˹7B33x72T772%7R170x7W/#:7/7_P.7^-n7 ,C7q ,7J+7?*7h)6O7)l7,>(7z'F7е&\7Z% 7,%F7g$$7M#Ql7"07"7W!7 ؀7*G7=T7Ot77i7$57[Y7cq7Ϡ7/3s7QzG777dj7ٵ7fS7g\c|7&f7S7`E7;;7a67kr5797;C7yQ7 e7+ {7 7| b7>+ 7| K!7 X7o 7a7O%7w7&7`,7ה7}7Vm7!71c7J7ںBq7o77l37q7|7(7KB7d7ӰL7.O 7 涻7_j{7m7jW߶AA7ܶQ7ڶ)7u׶c7Զ7uҶ7%g϶7̶7ʶ7]Ƕ7CĶA7,¶y7D787ں7շ7k/7VgB77˰7Q37k7qg7J77I7TkM<77CD7t073P7qX7K7X=+77͔7 xc7s7ˢ7B 7GK7s^7R77>7X7c7!7(7 j77e7^ 75r77(]7o}770zB7]ӋkA8A8{^A8ߗSA8@jB8>>B8FpB8B82B8/kC8TC8kC8QmC8=:9!D8X%lD8(D8E8feE8E8hLF8i󷊀F8F8 QG8)?G881H8`H8[ I8M󷚝I8y J82J82'*K887JK8GBL8qYWL8TkfM8o}M8UVN8 ,O86O8ydaP8MP86^Q84R8R8t[hS8bS8pT8U8ֱU8ʦ;V8 V8RR(W8W8(SW8_e:I81ᷲI8I8]߷zI8Ә޷H8ݷG8ݷG8vܷK+F8 ۷PE8۷D84?ڷC8ZDٷRC8?طgB8#C׷_A8Xַ@@8xշ.@8rԷqd?8Hӷr>8ҷ=8ѷ<8wз;8Mз:8Ϸ:8Ϸԏ98Fη= 98!fͷݨ88e̷)88˷Қ78K˷j78ڰʷr689ʷ4?68ɷ>68ڨɷ68Bȷd68Ƿ58Ƿ>48 ÷\58·48U·D48<38628[28`18A18齷08=F08ή]/8I/8>.8亷.8v'-8_-8Q-8#1-8bJ-8öQ-8*0,8!-8^)m,8-8S|.8lX.88E8K87P%8S8iUE8Tb8Qk8 KX8@vF8248 #8@ 8+48΄88삄8V8A&8񃷍8칃o8_~d8?88ب8p8&8ځz8Ӛ89ؔ8怷c848;Wz8am84^86c~K8}68|8)@|X8{8Dz8rzX8]y_8mx8wb887wF8v',8u8uG8\lt8s_8s&8?nre8zq8,q8ypo8Roa`8joQ8ncC8Xn585m'80^mQ8lg 8)zl 8l8ެkM8Ok{8\jo8,j8Qjϓ8j|8ic8twi*H8]4iY*8h 8h7Vsh73h-7rg7gas7ngy 7)gz7Vf(7[f7Ef'7@e7e 78ep7{dx7Thdq+7Sc_7^}c7b70wb\79a7bSa7`H77`]K7c_M7^7$]73] 7i\I7[7|7 Z-7Y7Y7!XR76Wg7GV7 UU 7_TR73fS؛7$kR7;nQ:7oPh7pOn7ppNI7HpMp7pL7qK7sJ7IwIi7{Hc7Gc7Fb76Elo7\D7Cx7 B37$A7H@Q7@73?7U>)57z=7E<7;<17:/73):'7Z9 A7ڎ8777*6`7^567o5d74;73D7&3u7e27ԣ12y70h67g"0#7b/F7.p7-H/7r-7],47+l7*,7*7S)P7(!k71'$+7k'l7_A&7|%l7$-7#7+#q7be"r7 !57& 7 7S7.H7(X7 7JM7َm7:7 7~\!7y79<7L8[7C6772$\7u(7 7ӯ7bt 7l7$7}U7R72>7:7g @7A z7- $7 r7J m*7Š *W7 7IF 7[7mD7+*[7>o7b47\ѐ7%7lYZ77I<7,747y7P0zC7D7Ipg7B47, 7 C7!7}"7`L붽J7{7w7 n{7ᶞ>7߶7Loܶ7[ٶ7&׶}7EwԶW7 Ѷ77\ ϶+7#R̶7^ɶa7ƶ7I@Ķ&7,<77,7s+]7wط7פ77Ȭq7鯶7K 7vӬN7C-7\s7V^7݅7kΧ7u1P7܈7b*_77F=7٤D7~iR7XA7 iK7~Т-d7%7.hІ7Ip7ǹ7|ʞ7̝V7뾜7ѣ 7 {]7Eo77X(7Z`77Ѕ@7" Z7˂07$7bR<7ZB8CB8r;lB8CB8B8B8v&C803[C8]xYC8 WC8X8* D8NOD8GD8= D8/g)E8yE8\oE8=%F8ـF8SF8%CG8(G8ؘH8]H84]H8&epI8 0I8ؿiJ8q+J8rK8BAK8~L8]M8$ӨM8E8=N8@LN8`JnO8HsP8{P8v9BQ8_Q8ҳ~R8@S8S8-TT8#T86U8V8ҪV8Y0W8oW8<X8@<~X8-X8Y/3Y8-eY80ʿY8Y8\Y=Z81Z8ֱm$[8$J[8/R[8׌[8 H[8\8]췰*\8(K\8d\8'뷬s\8ت귡w\8)dp\8߫b\882W\8UU\8pab\8L~\8R\8ŭ˹\8C\8T\8ZD[8y32[84̋Z839CY8&;r3Y8=|X8*EW8ORV8:SU8B?T8bS8(yR8 JQ8U㷦YQ8{㷞 Q8P8&P80ⷛP8@m.P8h#O8QN8Υ 4N8gb.zM8<#L8&්K8iK8%UnJ8*J8 ෑJ8߷J8޷I8QݷI8ݷMH8Kܷ1tG8ՠ۷BF8ڷE8NCڷD88ѷB>8<з3=8G зG<8Ϸt;8η:8Tη ::8Cͷ98v̷F98˷88=˷>.88ʷ78oɷ&78ɷ68-ɷ+78Rȷ78ȷ%68;Ƿe%68ŷzE58÷58Z·\_58d48lB48X38FKy38Z28ƽ+18I\18]08˻L08U].8ȸN*.8c.8;-8GL-8-8Z-8sr1v-8yTA-8퐳'.8ɠ.8/8-rV/8/8}/84᯷/8OS/8S.8 %y.8j.8f֬~-8&h,8q09,8+8n*8x=;*8}ܝ)8E(8xP(8 W`'8&8 !E%8o'$8MߣG#8/F-"8Jve 8籡[8࠷8-n8U8%85WI8򒷄 8 8DC! 8S/ 8捷 8ތm' 8틷288?B{88ш=8K/{8>S8M08X8]J8^[8V8e8 /8!8߄&8>ń)8*8ȣ(8#8Y8f88̙8s88Tl8#Z8—8˄у8Ԅo8 ܄ \8ᄷH8ㄷ68-ㄷ#8@߄8<ׄ8ʄ78888jO8G838_88(8SƉ8O8ׂ;8 8N888l݇88ʀل8v8 {8t8~ck8.~u^8uy}+N8|;8E |%8R{8z8.y8&y8mx\8wn8ev{r8Fv9X8Бu0?8bt'8-tX8~s'8r8(rJ8q18p8^Fpi8o.8jo8cn8%nu8[mj86m`8el!U8i#lI8k.>8Vk18AjL$8ǣj8Rj8j58ھi8 {id8;i8^hm8+h|8ȋh]8Th}:8h~8g8gҽ8ug:8:gY8f8!8ֻfv7vfGJ7,f<7e27e70e27dZ7id7c7c6E7c\7_b7a7aa67`&i7`7q_7^7^7<]wH7\q\Hs7[7%Z7rY/7&Y(7oXZ7*W(77V7@UO7FTC7IS7YJR7;IQ7FPQn75CO27?N7:M~7L7L74KM7P3J07,3I}/74Hw7 8G1$7>F7FE_+7gRDT7`CCC7kqB7UAj7@7 ?՟7>D?7X=7=7"?<.7oh;7:7A917L877'8z7\7E767575c7B47E37μ271C791T7x0*7ŷ/sq7).,7g6.7Lu-ڡ7,]7+d7i/+7l*ޏ7l)K7q(7 (+7['7&=7%7 %7B$v7 |#57"+7!7\'!t7a O67 7Z7_B7MG7y7|7e Y7Jq71A7 7r7_7tz7yu7BU7497bZ 74M 7/7)7,6]777A7Ԝv7? 7S 7E Y)7+ :G7Vd j7 ;7s g7k 7-7l7`7s7sI7<:7{7zX7?7!(7N7=v 7/7rg77/7F_7jO17/7ab7pﶔ7*97"K777:7[7Ou7h޶7.ܶ7ٶT7ֶ74ԶU7t|Ѷq7Ѿζ7˶Lz7>ɶ]7GƶF7Bö 67(,7T)7UT*7 ,7%17P崶z;7bɲH7ְV7+ ^7eX7k髶A7"7r\7txl7;7=\7Pd7!奶7pr7~ 7AT7;)7ң7]jk73ע7r= 7[7ˠR7%o7 7?]7 ;7e)7ɚ7R7vU#7 i7z7iOk7Ⓐ[7kE7sꏶpn7R^7njF7'7}sB8,LB8C8nHC8vC8tC8^nC8HD8p%HD8D8D8AsE8{LE8E8G+E8x4F8kF8`F8W>G8YRfG8TOH8NkH8QH8UHI8\ZI8em4J8pQJ8}0K8󷒳K8:L8L8RM8M8vN8 O8O8B+V@P84@P8?TJzQ8g7R8x0R8xYS8֕S8ؗT894U8zU8gV8PW8dW8kv-X8P%X83#Y8z"qY8KuY8QUO)Z8HmZ8j򷁡Z8JZ8/Z8XuQ[8"r\8;O \8\8`\8>\8K췴\8췿]8d뷁.]8S@]8@J]8PH]8Y=]8FAf.]8v"]8U"]8編3]8?UU]8As]8٢]8C巔]8=]8np\8cB \8*d)^[8$gZZ8,g䷯Y8,fDY8gpzX87hsW8BaV8AFU8 OwT8̰㷝S8'7{R8ްIGR8TQ8yѤQ8fpQ8rX2Q8e"P8O4P8jෆO8YN8Y߷ AN8[߷{M8\߷TL8;߷VK8f$߷.GK8 ߷2J86޷J8g޷NJ8ݷI8vܷ{MI8.(ܷH8k۷G8ڷF8ڷ!F8vbٷYE8طÓD8׷C8ַ C8ַNB8$շ+A8<Է\@8jFӷ@8EҷM?8pIѷ>8cз*=8>Ϸv<8iη<8Vη&d;83ͷ:8̷V:8 ̷g98jR˷R98ʷ)88ɷ9887ɷY78ȷS78Gȷu|78VǷN78!Ƿ_683?Ʒ{{68ķu58 T÷58·58 >58;48r548{٧38(彷K38"528c18k18:$08 b08󹷡/8M5x/8M/8^.P$8-"8M%\!8:8jQQ8RC8=<8H8%i#8Z8p:8128◷K8;D8A\88"' 8` 8R¿ 8\  8.猷q 8Fދ!N 8튷ū8"8@8cVS8̇.8H+888 ͈8Ǵ{}8X|8m8Lń8%8a18"@O8&X8h8U8l88]8Aƽ8i8}8 88%n8Q4\8C*I8+R58A_"80j8rD86xf8z8xt8r8#hO8OX8zC8)[8 /w8F烷m8־e8_8(`[8_* Y8xW8{W8r\Y8-\8恷Xa8`f8Pdk8o8ss8+]t8t8)b>s8k~o8>}i8I}^_8H|FQ8F{@8Y!{Z,8gz8y8mx{8f9x8w28v85v8Xu*i8ߣtQ8s6<8?s(8r38q8>qe8Xp8Rop8ao:8zn8;nƹ80m8+m8l*87lk8;k{8 _k#8j+8wjVv8Ijok8"i7_8AizQ8niB8M/i08Zh8gh8މh8Xh 8)hj8g~87gk82gB8#qgR8_@gb8u g8fv8Df98G`f<8*f}8eh8Te82e͔7d7sd97 d7+co7{c7bn77 bIj7ya7`476`7_71^B77U^Z7JO]Z~7j\71[7SZ7AY7JY;7XSg7&W7.V:73U/735T/973Sw70RF7*Q7#PP7O[7N7E M9U7L7PJe7BI 7H~7Gn7F7Eg7D7DTs7fC+7B70A~"7E@7^?S7z>v7=7<474;m7p ;74:+7~b9b7Β8ń7d73767067i5G7477H3973b7W2717:07097Q/7.r7-^7T-7^L,7+7*Z<7*\7?)7z(d7y'v7H&t7(&7a%I7$@7'#97 #z7lA"c77x!7 ]7r7!37 Z774(7 mF7SF7W77x7GK7ы !77.7*d7Li7.I|7Me7BS7;E7G";7K57!37lP67Ȫ>7(`K7Nb \7 =s7 |7w Ů7 07. 7 .7pc78^7v7 7a/3j7{Ƹ7LS 7/ d7I(7p$77j7g7W7$V7N7X U7m97eDe7A7N1z77ͳ7^P7ZU737j=7A7޶7۶K7t_ٶ_7.ֶ74Զ7FѶM7ζ7˶7ȶ7R0ƶL7oö7]y7wp7'xj7}5h7e}k73,v77L7h1^7?7357j7Gm(727ϦxQ7M+U7E 7826B7ˤR_7kle7V7ಣj57O7ޢW7NZu77 75?@J7^K7iQ7c,7N47l)>77_N75j7_7}(7Ejd7Б_7ZR7yʎ/79l7o:7V7IO|C8HC8;C8 C8j'D8@XD8OD8ZD8VD8?8E8xE8xCE8`F8:KLF88әF8(hF8@G8j&G8 RG8&hXH8qH8Q&I8FI8 J8zJ8J8)oK878K8GtL8@YL8Vl҇M82N8󷱧N8580Ϸ7>8F&ϷW=8^mη<8ͷB;8 ͷ"b;8aG̷:8b|˷b:8}ʷ98;ɷXS98ɷ88oȷ0`88<Ƿ=88pWǷ*78xƷ 78Ʒ>78W?ŷ68 ķVm68 ·r/6858ޟ58 58񾷦48'Z48d%38k38d28D28}18y08j08͸"08:/8÷'/8j_/8Px/8w8J/8海G"/8uJ /8u/8г;5/8' /8KX/8U08w08508<18z18箷08%_08^/8v|/8ҫ.8S H.8?-8cs,8 ,8৷+8!$4+8sa(*8E*8/U)8=K(8n'8]&8%8U#8"Ge!8 8 8!'8՞"8\읷8j8S88әth8 8u@$8ܕs8h68䒷#8-X. 8ҏ 8d 8$ 8. 8튷s 88!P8O8y8҆C8-^848 $8"80gR8 8胷x8&8<8sP8tZa8ohn8^ev8WDz8Ty8St8W/l8(`g`8NlQ8{\A8ꌃ"08l8ڵP 8ʃ8ރ8-8V8* K8R88X|86p8 b8U8烷I8g΃>8588-8bn'84#8Z"8l˂!8a/#8QU&8M+8Ɂ 38o;8?6D8~耷HN8VW8E^8d86h8~j8}5k8}7h8f|`8{T8ozSE8":z38Vy8Ix8B x8Nw8~v8[u%8t#uʐ8mtfy8Dsc8s P8#Ur>8q-8Ppt8Vp 8o8ko8~n8m%8%]m(8wl8Tl 8Xkv8ik8j8rj8?j8*i8iz8#Uiê8ie8h 8Uh8qhp8Dh?\8hD8gg*8ag 8 g8g8:`gy8E:g?p8_g?8f 8{f38܈f8>RfN8 f8e8e]l877NȄ7"M7L07K7J7IZ7H7)GL:7&F7E.74Dͯ7pCn57B07AL7@v7?s7 ? 7-&>7C=E7d<7;g7ǯ:/79a79768+7h776f7537 57KD43753D7O27H1X751eY7s0 7;/T7.>q7~/.]$7m-7,Š7u+>7_&+7b*s7Þ)}Y7( 7R()7M'v7&=,7%!7`$7-$O7 d#7K"J75!z7! 57; H7r7m7.7ET7O7|7E7 72=7F|ү7z7>5Z7|C547߉7m7,7i7ɫ7p67[77$37%^7k=7>7m 7 7g( 7R 7= 7A @7- =m7̞7W77O7^n77+7N}77/77Y^7_[[7u_7"P77'7Lf"777/7#7;𶓬7wQ877a궸X77嶾7ae"7tඉ7p޶d7۶ 7-Bٶ7ֶf78Ӷ;7%Ѷ7[ζg7˶U7ȶZ"7Ŷ7o"ö 7a77,7b7޵C7߀7_KԿ7A7Xe&7C7z07]ۨb7ظ7 ɦ.77q!7p78t7;7d磶7ڕJ7ZBԋ71梶X7y77eW7s7k7ǟ7ڞ|17؝7Ĝ-7|7Zm7Z,i7ޗ7 7b!o`7h7>d77_:M7}z7_7!u7Έ7*D8SRD8mu|D8?D8"D8IE8B&T8w-U8:}0V8dCV8JnW8O X8KX888+Y8> Y8 NZ8RZ8Z}y[8&[8^? \8$\8l;\8:\8\K\8vt\8J﷮\8+]8CP]8K ;^8¨ ^8g^8%O^8뷻^8뷆^8ZD^8^8 ^8s^8xv^8$fp^8淝v^8P ^8I巋^8Ħ^8X*^8Z=^8iE]81+0]8_㷘\8A[8~6[8ynZ8⷗Y8cWX8iX8}{ⷬ*W8F@V8᷂fU8٪9T87P T8kS8թෟ S8YR8D1R8߷Q8cd߷?Q8߷{P8޷#P8k޷OO8޷N8ݷ+N8pݷTM8"ݷmL8ܷ L8xܷAK8 ܷJ8۷{jJ8FڷI84ڷI8ٷ0^H8ط/G8.7طF8׷ F8ַEE8ַD8MշC8ԷqB8ӷP:B8Bҷ{A8ҷY@8#ѷ@8kBзVH?8hϷ>8ݚη=8ͷ=8ͷBv<8cc̷8;87˷`;8zʷ{:8ʷ`:81ɷ&98fȷ/8Mm.8ə2.8Ũy-8},8*b,8Jj+8}+8[+8l=*8⣷*8(:(8h'8%8W堷A)$8i!w"8j 8ឞ,88jʜv8,808p8ܘ88D8,Y88l8 l=8q 8yߎw 8ki 8]#+ 8T 8I 8Q8B}8Ml8cv8W܅^|880Q8.98y#38<8r1R86p8F 8낷Ƴ8Jׂ8ɂ8#8᷂8J8%8 '8۪Z#8?8˿8т8肷8D98[8z;8V68o8P8r8٧a8pQ8麃-B838L&8248?E 8|8 x8X848 8ۂ088oo8X388<8@h>8b8р!8/81%=8κAI84S8_~[8C}Gb8|f8S@|f8{3b8zpX8zJ8Uy98ϙxj&8w_8!w&8~fv=8u8zt8h:tX8sH8]rAt8r|b8lqR8pD8Tp/88po-8n1%8i4n8m58 m8Ҁl]8Ik8kP8 k08rj88jx 8i_ 8biq86id8ph8h8yh8Gh$8h8g8g18g^8gQ8Xvgh8\gH8Ag/$8&gg8P g@8fҜ8f g8f,8{fk8Lf8f_8eN8ƙe8Pej86d08d8AdsO8c8g_cF8b8Xb!P7ao7m)a7`7O_ͻ7_7QY^[7Ǝ]7\^7?[#7Z:7,ZeS7V$Y&o7.XW7H3W)7E3V7/U 7'T07XS!e7QR7Q7O!7N0k7M7ڽL7Kai7J7I%/7#Hޙ70G 7xF~7uE7uD x7~yCw7/B7A7@J7?^17>7=Wa7%<7<7e5;=7[:27΄9V787-77717`7D6*7\z57ұ4Ձ73.7k%37%a271870570ƕ7V/D7.7-7-Q7HN,7+7F*_7*+7>)7Dx(=o7'7&7S!&7#X%"47c$7#7"`O7^-"7oa!7Z xt7Ja.7`71H7ff7(707P б7Az7U{F77x7171r7tVn7M7?0777 7%p077G7k7j77{w +7 P 71 %"76 >7v _7N ;7 7 z7m7 I7()7A7 7h3T7I77}&H7pp 7#77_7Q37L`+77_7P7u7[#7EPa7gs7czX71)7@tZ7Xg7,:e7'7{7J 7B7`޶q27۶77ٶi7sֶM7Ӷ״7Ѷn]7Lζ 7t˶97+ȶ7Ŷ.W7¶/7 7SQ677u緶'7VC7貶J7 K7Ƒ79!7G47g77~"77 7X #7&Τ74d77ģd7}9777P7C71g77Z 7Ife7Qi97mR7[76^77ܽOr7l7l47q7A67󼒶t71&S8oI߷GR8/޷(R8޷Q8V޷!Q8޷YP8ݷO8OݷgGO8FܷN8{ܷ'M8]1ܷ*M8۷L8g۷^K8ڷAOK8SoڷJ8ٷJ89ٷ`I8ط3H8׷G8kF׷z G8ַ\F8շE80շD8pԷ2D8ӷ^VC8)ҷB81ҷA8LѷA8vз`b@8cϷ?8oη>8ͷ@>8"8ͷs=8xx̷<8˷\<8+ʷ;8/ʷKY;8^ɷ :8}ȷX:8NǷ 98~Ʒg98=Ʒ98ŷӤ88ķI88T9ķ78do÷\780·P-78N68"68º'68߾ 58Z58K48u48׻48'r38}y38عߤ286'528)V18Pu18gX318#޶18\08Bܵ084Vh08Ǵ 08.0808۲08)08{d818ְy{18<'18٧1818q18b18Y18e;18poS08~08[Ʃ/8먷f.8jf#.89x-8kY-8[,8sp,8KM,8 ,8*83)8BT4(8I>&8q+$8f@Z#8TW!8Y՜V 8蛷q8 ٖ8?8uS8`{8S8 ,8DG88jc+8򐷪8WCa8׿TP 8QM 8Xk[ 8  8" 8F& 8m8򐆷W>808 䄷F8x+08~883l8tC8C08$ 8XC8i858/8=g8U8H8󁷦888x8Z7ү8vX8|.8M{8ƂFi8炷W8D8!289j!8K'8Z8d`8gi8he8ua8$T8@8&8>8ႷY8K8͆8Q 8(8qف%8d8Ql85 8G8o8{8'!8~28?~A8}DN8D|X8M |Ja8[f{Me8zgc8y[81ycO8tx?8bw-8Fv8=v 8u8{tp8 t8qTs8rє8aqb87qr8jp$e8oY81oO8Xn5H8mC8gSm@8jl?8.lV?8k@8$kB8j$E8:jG8]iJ8TsiK8*iCM8hM8dhL8Fh:J8hF8g?8g^78ge,8wwg8]g 88Hg8e5g+8}$g8għ8g8f[8f.8fD8f/8Zf%89vfK8$Of8j!f(8ek8ðe8Bme!8!e b8gd8kd&8bd/28qc8cW8by8Faq8]ak7`7`b7K_$7p^517a]=7-\J7\X73 [Xh72Z z7>Y7yDX7DW7?Vf76U7)TW27=S3a7RRΕ7P7O7NT7ɴM7L7rKH7yJ%7hI7YHo7\MG7CFYO7w=E7:DC7;C7?BJ7sGA-7R@a78b?7u>7ی=7<7;U7j:7 :749l87J`87q776)757"'5z7^4%#7–372$w7+ 2!7`H1P7/0v7^/!7.b7w=.Pw7 {-N"7z,679+ x7H1+"7l*7b)`y7q(%7(7R'4}7&)7%u7$7)$47]#(7"w7!I7 ,7& 7Xgj7o#7ua757!k]7U8 767T76y70H7j 77E7$7g7Yn7!W7<E7,774*.7&P)7y)7c7-7&57 㶘7*}7b޶7۶7Aٶ!7Ǜֶ7ӶEL7"Ѷ7Oζˈ7q˶67,ȶ$7رŶ77¶|7\鿶K7"7G727괶7i)7737f\7@x7B79`Њ7iHL^7fi` 7h7B7裶M=7Xbf7i-v7g2o7#U7+7p78 -7Ie7㠶w77'QO7o7m77sLh7,7@A7Jz7mҔs7jRL7ˑZ7>77O7u57Љ7&7(wQ7L„E8^E8E8l F8 d0F8:bF8!ΖF8F8G8dEG8 G8AxG84apH8L^\H8Y;H8,UH8 SI8򷬭I8 J8LmJ8 WJ8^5=K8#K8L8n$L8%0 M8=M8MP N8_lN8IsO8g(O8]4P8P8s[Q8\Q8<-R8,S854S8LjT8dt U8<{~U8ѐRV8&V8W87X8X8QxY8D; Z8󷵘Z8{7[8b[8R \8h]8#Y]83󷕿]8ȡ]8]83t]8V]8b$/^8^8(0+o^8i$^8J}_87_8ˡ_8Z_8"Se_8Z귤_8"_8*_8J跅_8m~_8r_8w^_8fO_8|\OG_8u>_8,䷻*_8xv_8 㷇^8O^8@ ]8H=]8q\8ա$[8zRT[8TɤZ8.1Y8(Y8RI]X8яW8`FV8)V8߷eU8|߷T8x*߷0T8P޷ܞS8S޷S8/޷ƈR8ݷR8ɌݷvQ879ݷP8ܷMP8ܷO8ܷN8E۷HN8I۷}M8ڷL8tiڷCL8dٷBK8lٷJ8طSJ8BطI8ܡ׷H8"ַ.H8XַmG8NշF8 շE8KԷ-E8ӷnD8bҷ9C8ҷB87Oѷ63B8з2xA8Ϸ!@8[ηz @81η#Z?8Qͷ>8̷>8˷`=8Q ˷g<8JʷF<8ɷo;8@ȷJ;8Ƿ^:8H Ƿ=Q:8AƷ198ŷHr98ķN98ķ88d÷WK88·97878178~689=|68fr6858ܼI58#48pn48ú4838v-38Ը284f28%2818:n˥18ᵷ18Vr18aʴe188%]18 [18d18Vz18é18K18GX)18Z,28bI28QxM28eϭr428Z28\s18sk18Ȫ 18󩷓08086vc/8T.8%w`!.8ѣG-8Iݤz>-8",8o,8MR,8%塷]i+8Ҡ;*8뇟(8i'8K&8P$8RQ#8왷e!8S^L838Qؗ8ݖl8YE488M78ܒ8\ȑv88}K8䍷8jR 8 8ቷ 8}^ 8{0% 8-i_K 8f8Q,d8ADŽw88\˼8Jvg888h+8uBd8-8%U8%t 8( ( 8H+I 8,Ac 8,1v 8r0 89… 8J 8bz 8]m 8] 85ЁK 8Oa9 8+' 8sW 8 8Τ8ł8q88y8u8888u89Tm8ۂf8y`8듂e]8g ]85_8 e8l8tv8>6848n8{_q88K{8~ 8c%~ 85t}- 8M|7? 8 |N 8iL{([ 8zb 8;yc 8y^ 8RUxR 8wC 8Zv1 8Nv 8\uJ 8t8s8f*s8qr8Wq8q8TpB8o/t8nHk8ePnnd8km_8 m7^8tl^8ka8 Ske8jTk8-Njjq8iw85ki*~8Ri@8Ԯh؉8]h8#hl8KgĔ8͞gq88qg38Kgː8,g8Ogv8fv8f?h8f V8f1@8fs&8}fg8If8f8Ef<8Ѳf_8f\)8f8txf_8}YfGe8X3f8fG8*e q8e 8Ke38dQ8d 88d|8oc 8Mc@8[b$8I7b8a.38`ɷ8;A`%;8y_{7^$7]7]O7j4\͐73J[֘7XZ^7`YV7aXH7m\Wj7RV7DUv72TF67S_7R7QP&7Oz7lNA7M7L7mK)70WJ7BI7N0H-H7H G7QF"7 E>7VD7C7?B!7 A7@(7a ?72>xI7G=7a<w7~;7:79!M78h7877 B7c27!r675{74 747G3m7q27V1̺70a7o40V7q/7.U7!-R7+(-7d,I7Ԡ+7 *\7h*<7P)7 (7'27&7=-&7a%u,7H$7#&7".7$+"7u[!76 =777NT\7H7xL7ШG7'S7 *7>7RsP7g{7=N7%7FV77$77%\"7ȣ7|7s:v7du7&x707 37 Q7:< )7 7 7Y 7λ 87 od7Rk7ww7Jm7֮<7@u{7tW774N77*g7C<7A7T374D7]r7}7a7h$7mD*7E#7ul7{c7D7S=77I7P̋7x7cs7A7ඁ`7]v޶.7۶mY74aٶ\7ֶ `7 Զ7&EѶr71lζ% 7˶7^ȶV7·Ŷb7¶)7ڿ(7L74!(7Ry7З> 7707 n2b7&nS7D7V7xȦ7=7Oڤ{7y:O72Σ@b7ч 7W7|17A L7Q䢶:7W r7 q777^x7ᠶU77I7坶g37.7X1I7t 7oL<7! 7 7Tj7vC7rᐶ 7~GVS7?<77n_z7M.7V7Oz7Tm-F8[UF8ZcF86󷇬F8 wF8 G8JAG8–kxG8t򷊲G8UG8a9e0H8UtH8򷵻H8I84UI8PI8oI8&dWJ8"=J8ضK88|K8=,K8SL86L8 ;M8aM8y1N8xN8 67O8򷌿O82*KP8gIP8akQ8yR8~R8ڬ2S8+S8N6mT8( U8D$U8g(PV8>V8QnW8`6X8mX8zzY8ހYZ8{Z8^m8[8a[87dI\8s[@]8{]]8X$^8O^8mVj^8^8?V^8^8^8^8e_8$z_8wz_8~`8@6`8A`8_A`8/<`8T1`8跕!`8 `8N1_8h/_8۷_8m+_8R䷎_8-N䷱u_8޺V_8) &_8֡ⷲ^8*_y^8?@]8l{ t]8b<1\87᷻>\8Κ[8äහZ87u3AZ8CාY8 ීX8߷X8-߷GW8[M߷(V8߷DU8ݲ޷WAU8+a޷T8 ޷T8ݷpS8?bݷR8UݷNR88ܷQ8sfܷ,Q8 ܷP8F۷:O8F۷1LO8ڷN8)hڷM8Yٷ @M8 yٷǓL84طK8vط?K8C׷PJ8R׷I8ַ,I8)ַNrH8oշ`G8ԷF8Է8F8fӷ|E84ҷD8ѷD88ѷFC8)zзEB88ϷA8ηA8i+η\h@8bͷ=?8̷̚?8˷i>8˷=8Uʷ6=8ɷ <8ȷ-<8q ȷ;88Ƿ5;8CfƷ:8ŷgI:8ķZ98ķt98/\÷98·+88&J88}78Ml78}R178b'680潷 t68q#68g58?5848Y]r4848Y38+ozP38ϷQ282)28ߖgj28 <28lj528״28E18į[18_18u28ϱ28R&228|YU28^ӯ%y28,ї28=28ܭg28},28s9X2828ꪷS18=p18Dq18d7}080}/8,d@/8}.8RӤk.8a-8=8C-8rx0,8\,8=+8cA*8ܝ)Z)8!(8G&8阷%88$8@i"8 8i8)B8G8Jc886Ր88j868M}8܃9<8ꋷ88v 8Qg 8qK 8 8" 8zxNl 8䴅8?Մ8'̓8-8ʂ8 l8H8<Ӏ8uT8pN8q0i8k#" 8#` 8, 89 8NF 8Q] 8^z& 8Qp3 87 84 8π&+ 8 8% 8bY 83] 8b 8 8 8J 8oa 89;x 8Oi 8~[ 8.̂O 8ԂC 8JւU9 8Ђ/ 8Â& 8 8 8r2 8JQ 8y 8職 8g 8qo) 8 /5 8耷E 8HZ 8R$r 8 8ds 8D~| 8p~ 8Ra}k 8%| 8-{O. 8:{B 8t|zS 8Hyj_ 8Bxc 8u 8t7 8Xs 8Qs; 8Kr 8X~7I=7r=7v<87/;;7Z: k7}9D7W87373D767U*67+\5'7;47A3l72m75727q1U707/F7$/=77PЅ77U?7t?k77E+.7le7;M7B7q7,]#7_,7K=7j7L7P\7Ë7Tw77-@7鶿7 7嶾v7T㶣7ᶕI7C޶d7a#ܶ'7bٶ7Pֶ 7IԶ7ށѶ`73ζi7˶7Xȶ7ŶT7¶7d_72 t7+J78-,7xXH7'*79SS7R7f7(h47R-e7tCm7N-G7ZO7Hˣ>q7Suu7Hp737$U77 7ۢ7$t7I/77á7E v7#>7> C7Н~7Jx7 7 !7 7{ 7 䔶u7FF7.7e7]Ws7R 7DH7N~7A77{䅶+7*;7mF8%8F8 )G8rUG8HG8򷵵G8`G8< H8ZH8H88DH8I8cI8񷹭I8#I8zMJ8n񷺣J8fVJ8 `ZK8\K8\A!L8#^iL8bL8jhM8sM8wnVN8mN8fESO8cIO8!^P8`P8wQ8jR8ÜR8983S8RS8kyhT8GU8%U8mDV8 V888W8Cb)X8VX8+iY8 Z8r%æZ8 !C8[8[8V[\8<Z\8j]8c$^8ag{^8c^8Y^8ue_8R_8ORl_8w_8~_8Je_8_8 *`8[d\`8g~z`8Y߇`8U'`8=`8V`8-q`8i緒[`81@`8*!`8`8K_8^y_8㷠_8(A.y_8PB_8.ⷁ^8wᷔ^8 M>!^8g]8¬} ]8lLo\81b[8߷*[8_߷Z8)߷eY8K߷Y8 ߷_X8޷W8޷CV86޷IV8ݷգU8ݷ U8?ݷ`T8ܷS8(ܷ(S8:ܷBR8۷SQ8G۷fQ83۷P8Xڷ/P8lڷHO8ٷN8,ٷp4N8aٷM8طL8طC*L8׷|K8ַyJ8hַcJ82շhI8l.շH8ҊԷG8ӷ8G87ӷ}F8iҷE8 ѷ E8ѷOD8^зKC8UϷpB8η%B8b&ηpA8|dͷ@8Ƞ̷k@8e˷-m?89˷>8Xʷ->8aɷ=8ȷ=8Kȷ<8ZǷ<<8ƷB;8ѿŷ#;8)ķR:8)ķ>:8g÷,98٪·n98 9801%88oF884278c德78 ,78b_L68⢼6k68컷68;ڡ58~>58G蹷48rD48)48 38e38ǶR638*28jG2828:]Ȕ28Iųd28U,Ѕ28|28A𱷏28=K28k2828PL2828S 38eB28͋28dΫȨ28 h28(?28mc18;ca18Ԯe08Y¦P08ѥٱ/8㤷y/8Kz.8"-8Ns-8x,8ΊU,8Ao͉+8*8k)8ih(8 :'8@Ŗl&8f$8X%#849!8?W?8gƒj8ڑ=8Q8N8ɍA;8oT8Z6S8$ꊷ"8Y85sO8#.8]% 8ņO' 8jQk 8煷 8][ 8ΰ, 8郷Ԭ8E8q1 8*785v78,Ln8~W8[~: 8%~qT 8F~ 8~ 8C~7 8z~Br 8p~` 8~ 86 8j 8 8) 8`< 8 8ɀ 8c7 84 8iv 8$c 80́[Q 8? 8R#. 8+F% 8c 8y1 8 8 8CH 8{ 8ڄV 8o] 8S 8.0W 8  8Ձ 8۟ 8;d 8# 8ހ 8 8J 88 8UoX 8~Oz 8~ 8T}K 8|j 8d{a 8M/{l 8qz4 8yK 8xZ 8M,xa 8iwp^ 8vT 8uE 8%u)3 8et6 8sp 8r 8-,rY 8vqq` 8pC 8p 8Lo̔ 8n 8m 8T>mˁ 8Ul@ 85k 8Uk 89j^ 8,j 8i 8%iθ 8h 84h 8g 8vg 8G(g  8fp 8f 8^xf! 8RfA) 8\7fe. 8$%f 1 8f0 8f- 8f]' 8 f^ 8+f 8:f 8Kf7 8]f 8of 8~f 8wfY 8f( 8fO 8fɵ 8;fr 8Bf() 8nfk8Of8'fP)8e>8ec8re8aẻ8ٿdc8TdT8Vc$8h[c8pb'8.b8`aW"8`w8`8LF_8p^ 8<]r8@\ 8[47ZK7Ye7X 7Wo 7dV7qU*7TTrC7*5Sb7R7P7O7N 7uM`7QaLk7 @K7!J6G7I7G7Ff7EW7_D$B7C,7B27AO7ϛ@57?/7>,H7P=p7w7Μ7@m7D7m?7ܐӛ7&T7QoT=7kG775D7Ev.7vʄ[7 7H~G8FæG8?G8߀G8}Uf+H8c,\H8tH8W$H8|I88=I8}I8iI8RJ8>QJ8'-񷨟J8y!J8mFK8 zK8wYK8]L8(L8)M8zsM8v N8zN8v!N8,/WnO8>O8PpP8c6P8xQ8 R8L񷋝R8lJ0S8AS8]T8 T8"TU8A;p0V8RV8EinW8~X8ήX8TLY8 Y8{򷴊Z8ʽ%[8϶[8DEB\8\8Q?b]8~D]8ncf^8,޾^8$3_8:d8_8q_8G`u_8﷦_8, _8ӊk_8,`861@`8p`8N뷳`8+`8{E`8G`8`8|W&`8ҭ`8TP`8B#~`8巵]`89`8k'`876_8Mi_8ؒ_87MV_8B _8x8᷆^8x7^8`m]8O(]8"߷Ñ\8߷:[8N߷RT[8߷ Z8:޷Z8޷ UY8H޷BX8'޷W8ݷAW8jݷ V8nݷU8&ܷLU8pܷqT8ܷT8۷ hS8e۷R8 ۷Q1R8ڷΗQ8kWڷP8 ٷ _P8xٷ׼O8ٷ O8|طkN8 /ط{M8خ׷?M8*׷aL8ַ֢زK8ַFK8շRJ80ԷI8 LԷH8ӷ0H8 ӷuG8XҷμF8٧ѷcF8SзhLE8=зD8ϷlC8ηj(C8η{sB8WͷA8y̷A8˷+h@8D˷?8YʷF#?8ɷ4>8]ȷ[=8#ȷi=8gǷ<8XƷnh<8ŷ;8ŷx;8Mķ;8÷:8k·.:8*·P98F.b98 L88*˿88a ?88M78돽ڃ78ԼA%78 68akrc6868Q58pG58θ48/48L4838X:389s38CS38w138e峷38I 38Q38; 38m38Ȱ38W.38[s@38MŮP38<{Z38YbY38FaI38'38^,28c28Dg28m28⧷18_918ɭ08308Oo/8p'.8?)3.8_c-8z,8Y}QO,8R+8Q蜷,*89a)8Ry|(8Rt]'8u^+&8II$8`0>#8*r!8W`כ8xŐ8͏O8{&8ጷZ8Z 883c8V88`U8"SQ8+a8[v 8 8q\ 8`2 8 8b8 888_8f#8=~G8H}8}A8^| 8-|h 83{ 8{h3 8{ 8#| 8*|}) 8|] 8n}j 8*}Q 8a~ҡ 8& 8f3 8, 8qjx 8ŝF` 8òF 8i. 8' 8UWs 8 8d 8 8L 8D% 8I>J 8P 8[ 8^ 8Y4 8L~ 86`x 8ss 8򁷑p 8FƁp 8)t 8Z{ 8g҆ 8 ـ, 8R 8E 8  8M 8w~I 8^}F 8:O}o 8| 8{X 8,{g 8mzE 8jyM% 8x@ 8^$xT 8_w] 8v?\ 8g7=7r4N77|7UD?77mr7y07%+߶7ܶ_7Oڶ!7J׶M8HַL8׿շK82շ51K8GԷ[J8ԷI8lӷI8ҷtcH8%ҷG8l|ѷF8з=F8 зE8fϷD8η D8kͷlC8BͷB8̷ B8˷\A8M˷C@8Vʷ@8Ϙɷu?8ȷ>8 ȷI>8>gǷ@=8Ʒ8=8"ŷ<82ŷ@<8nķ;8%÷3Y;8·p:8 ·$:8Ua:8 `98 迷Q98,88qP88488 78I9z78Y(78纷k68Q=._68^68o58TX58- 5848 x48,䵷848HA48઴38 !38n38,в[38D138O38 u38Go38mO38﮷38.?38^Ѱ38Ӭ3838Un38~ 938^28j28gV28\4u18H18Q08fRb08QR/8YT4/8`n.8t-8-8/R,8P#y+8x盷*8E@)8Nft(8s(X'8#&8ג$8%4#8~!8[8R|8;8$̌8b8]#Jk8488 X8U8򧄷48K8, 8 8u 8RJH 8΁w 8/ 8vށ8:48ڒ~Q8|Y8|8n{) 8zj 8 Cz 8yN 8y 8iyr 8"Bq- 8˄p 8no 8o  8/Xnq 8mT 8l 8?l~ 8Rk 8j 8NFj 8بiK 8iM 8h! 8g 8vg 8g 8f) 87fA 8|eX 8en 87S=m7c<67w;7@:7Ĭ9L7Q8"D77 7p7&q7\D6 7#r5T7t49737 3i7 @2A7w1Θ7ް0/7/R7$/[7_.7\-}7,7a ,7{F+A7~*7J) g7(7+(v7QR'M!7&7%J7$7$-x7 9#7b"74!UH7 ,775,7 7ZC}7Mf+7 97ǫْ7L7| 77<7cFa7ߌ 37 777Fޮ7{7x77-7o7 7` 7L 7T 7 7+K 9 7 47 `7hې7 7Y67Ǡ77f u7|7\7]?7؇7Bw7w7&h7 ˵77uR77 w7`A7\%77]_/7 ?0~79p7q7f7s7P7;`H7`ϐ7붘77z!b77㶮7X/7 ߶r7g=ݶl78ڶb7Pض270նS7Ҷ&7A)ж7#@Ͷl7;Uʶ7YǶq87;Ķb7z`7ʽl7â7!Hl7{M7|wi7 7=7(kv7_Z<7ӚU7m;7lM7ãT7w7:Q7HƣC17'7XFK7yp7wp7UC77+7`77y7r]7_677'7ݘ7$Ϣ7O$7/7M 7Cmn777 7i䉶k7g7C 7t'7^Z7ڀ7~.H8%H8lI8GI8tI8fs I8>LI8' J87lFJ8~J8dJ8K8vHK8_K8oK8/`-L8SZL8IL8 C3M8>𷋒M8 = M8>n[N8AN8G3O8O]O8kZP8fkP8uuQ8Q8HR8𷾙R88#S8OS8RO>T8gT8cU8T2U86I񷖐V8F_)W8PtW8v~]X81X8sY8Xg*Z8\ZZ8Z[8[86\8]8p]8^8d]z^8c4^8'W1_8s_827_88_8?`8.B`8gd`8s`8 `8pv`8g뷅`8ܷ근`8`8Wa8C a8緋 a8 G緬a8]`8`8}B`8`8|`8b㷙O`8J`8@>o_8]ᷔ_8*ᷫd_8෻_8+^8U߷D^8PQ߷]8*޷8C]8ۜ޷q\8K޷\8pݷt[8mݷZ8cݷl@Z8ݷY8vܷX8 {ܷ4HX8*ܷW8۷V8A۷UV8-۷U8ڷCU8oyڷkT8ڷ$S8ٷ%S8^ٷR8^طQ8طDQ869طP8׷`P8`׷s_O8DַĸN8oַEN8շ|cM8hշL8<ԷL8QԷ6XK8ӷJ8!)ӷI8ۍҷCI85ѷH8]JѷG8з%G8ϷpF8EϷѼE8$η E8<ͷXD8V*ͷnC8t̷aB8,˷KB8˷lA8"Nʷ@8͓ɷB[@8fȷ?8)ȷ(?8QcǷЖ>8TƷ- >8"ŷ=8;ŷ=8vķÌ<8÷<8÷<;8?·x7;8):8de:8hv:8K98V=98?ڽ88#ς88Io&88;/788vo78b78꺹̸68k`68u 68}׷Ҽ58?;r58<+5848l48Ѵy485M48+4848W48ƶS38Y38o38ȯ38|38+m4848 38G383838w38#a438K28m28;.28}18h918ޘ08Ԏ08XV/8ˉR.8\-8&.-8Ms^,8duz+8m*8n x)8Ԭc(8֕C'8 &8{q.$8"#8k'kw!8Jf8R,8w8 83׉S8##X88N8΃*'8` 8#6888 8|k 81. 8-z 8I. 8^= 8b~% 8;8~8k} 8N|1 8-{{_x 8> 8cxxH 8w~ 8w 8Zx{ 8ty 8z 84{ 8ȹ| 8~^ 8=qY 8R 8? 8 8{ 8 8 i 8P 8 }; 8 -( 80T9 8| 8 8Á 8ށ 8B 8P 8) 8 8끷@ 8ҁ| 8 8, 8(S 8] 8hۀ 8 8L 8~ 8Z_ 8~MA 8l~l 8X}U 8|a 8c{ 89{< 8}zq 88y$ 8x 8<1xP 8gw1%8'vB8umP8' uP8BtE8Q}sZ38`r@8q85q6 82vp6 8o 8n 8Bn 8m@| 8-lwr 8?!lo 87.'=2;75<\7=I;T7`:7e|9t788,777,6.767>5X7n473a7127 2K7vB1=7z07*/b7.7Y'.ԃ7`-7.,ʢ7+17 +տ7A*M7Xw);7^(h7' 7y'7 ?&7l%7$57#+7"O\7"g7Z7!7'[ p%7}7dc7 7q7Y7 7;7Z u7az27ߚ7Q7'7Z7+27U7{7,77"7Nb7¿7 7C D7V _7C 7 7F @72 yh77SY77#37jSp7˯7h7s67 N}7>79Z7r5]7'7ў67sD77\7/7]}77oF7;7c71W7Gn7>iiA7A 7ft737 DX7!7+v7:붡7u Q77ы7?O7WR(7(>{47g7ݶԒ7m۶7wضs7gֶ:7Ӷ6u7=ж7 ζ}7!˶07]ȶb7tĶ&7(7t:7Y7SDk7/&D7!2ee7mY7䬶QY7ĉ^76iE{7ܨ7c7C 727g7* ا7!P27խ7 NT7>\ 7V@7騥^7vr 7>7n7Ο*7O7~7ݞ|c7㜶<7,ښ\7̘n`77E|787k7OÎ7{ӌ47ꊶ*7f7'$7Me7Mu7֟7R7{oI8P񷜖I84I8ikI8Z?#J8FJ8!yJ8/J8DJ8( K8h_K8M]K85K8 ,L8 0xL8L8ﷸM8oM8(M8DR'N8ﷃN8,sN8/VO83﷬O82P8v^P8'yQ8 Q8# R86+gR8=S8LQS8e,T8z_T8yHU8U8lV8#W8SW8,X8 X8tz[Y8*Y84񷊆Z8:a[8>~[82>6>\8^7\8(N]8]8 E^8w^86_8iRa_8o﷛_8}_8"O`8]=`8i`89`82`874`8`8`8B)& a8x鷗a8a8 a8ia8#a8da8 e巄`8`8䷒`8w㷧`8ⷥY`8GE$`8g_8&_8žv__8v _81߷^8)߷G?^8G޷2]8TZ޷~B]8xݷ\8ȧݷ\"\8VTݷՉ[8dݷZ8ɰܷ*NZ8/_ܷY8\ ܷBY8۷_X8mg۷AW8s۷W8ڷqV8cڷU8Nڷ-U8OٷMT8WLٷS8طES8طR80(ط]R8׷%aQ8x\׷P8Aַ2P8"ַyO8g ַN8շ*N83շSM8ljԷL8BԷf'L8rӷ*yK8%ҷJ8;KҷJ8 ѷThI8ѷɵH8pзH8Ϸ=PG8 ϷF8rηE8ͷ:E8ͷD8]̷C8˷1C8ʷB8?ʷA8)ɷ8bŷR>85;ŷ=8ķN=8÷e<8k÷<]<8V·d;8]r};8;8$:8jF:8²9898F['98\r88ỷq88v288O78ݹe787(78fN68*h68X68R58^#58=R58058W)48ʻԽ48Û4848߱n48=8a48}X487 T48I3S48gT48G뭷S485HP48R|F48ӽ>44848/38_y38j38'38ʦ28A᥷]282m18i18f䢷@08r֡408ɠR/8Ÿ.8.8mI-83o,8|+8%*84Ev)86[(8JN1'8#%8.$8>ǐh #8r!8 8AO78M778w8m6J8E.$]8BsKE828Q8&R8'쁷n8_ 8 8M% 8EjA 8~C 8"}1z 8>| 8y|\ 8q|58{1 87zwp 8y| 82z 8x@ 8 x 8w5x 8"wvbE 8Mv 8Ҹwic 8 yX 8Oz 8V{ 8|[ 8׫~ 8Y^ 8&_ 8Z| 8MZ^ 8= 8iw 8AS 8c*n 8n(; 8!8| 8R: 8q 8ܢ 8< 8aÁ 8Ձy 8ၷG 8g恷 8 ၷu 8ρu 8ik 8b 8[\ 8y$X 8瀷Y 8_ 8^Qk 8 } 8Uו 8K~ 8%~0 8l} 84|S 8{˓ 88{* 8O}z8yT8yr8Fx8)wK8v8u98'u4H8[tH8s{=8r|(8Dq 87q78tp8Qo8nn8.9nx8}mDc8lT8B lN8ZXkP8j]Z8ij8Oi~8Īh_8 h8.qg8f8Vf8de*8`euM8do8d8QYdc8 d8sco8rc 8c$8JcU:8cM8%c]8 dwj87ds8jdly8ףd {8ddwx8$ep8rie,d8epQ8e48883f8@of8Υf8'f*8gfO8 gf 87g8Cgg8Cg2 88gf 8!g; 8f 8NfOS 8f9 85fT 8e 8fe+C 8d^ 8FYd$ 8cΑ8 c8Pb,g8a8m`$:8_/8^8|]%{8\8[IX8Zi8Ya?8zgX_8R;Wx28j Vְ8T28QS p7dRT7d+Q7O7\N7 MJ7ILyV7K`7I7H.7GƄ7kF7JEC7@/D47 CH7Bj7@/7?C7>)7=74< 7 <7;75:7P9;7p8707\7675757A@47r34727\1T7G177 *7*>)-O7p(j7'_7 &7%r7)%^7`S$=7z#7z"7l!J77 7 Ya7&7Cq7`77{G7HՄ70277ٚ7V7?7<7[7C|~7W78777q7D7v727r f7" 7d 7 R-7e J7=C m7Y 77oI7j*7n Fe7Hu`77O(7Wo75v7B7H%O7 7V7~97\7 7a &7 t7>P77C 7V77E7(.7h073x77.^7;WN@7h}77W 7%7WAY74 7s9777CⶇA73e7[޶7ܶƙ7ٶԼ71=׶l7Զ7ѶG7l4϶|7F̶7n&ɶx 7Ŷd7p¶7 %7G7#m7:;7@;7y77L7{7`7D767̟o7X(7SeC[7h{F7B97Ϯ7uS77ʥ{7|jkN7Ѥ7\7Ģ}7rLA7R77ԛrp77ꗶ}7L77V77} 87L7 71I7yG7a17#7Q7W}X7yiJ88ķ>8÷=8m÷=8b·<8,<8};81<T;8\:8yϾ:8&:8g98մuj98U98U88_8888W78^78Bq 78)vX68ٶu682?06858# 58t158k۳O58A-&58a5848f48ð48_48vK48|ˮ4848i48=4849485p487n^M4848Tͨ.381󧷰38 H38+2288Ȧ8O8aT8|8c8LT8If;8{!8݀8L 8h 8S#~f 8|`P 8{, 8uz 8?Vz` 8,z 8-az | 8<zz 8yl} 8[y 82yE 8'y 8$tx+ 8w} 8+v# 8v 8!xjN8Jy͠8Tz 8 |8X}We8P8VKKA8Y.8󾂷8 8V 8 8ܱ\ 8ky 8kj 8"j:` 8u\X 8oNR 8M 8mKK 8EbJ 8Ɓ!J 8сMH 8_ׁA 8 Ӂ5 88% 8 8?qe 8k: 8Q 8 8u 8+ 8>k 8 8|X~C 8{}y 8|c 8|8>{W8D}zQ8y8 y?8(UxB8՝w#8)v8Xv8Ru\48tB8sB8FrA48&r&8Cq8{p8 of8n788n_8'{mA8оl,8(l 8Kk8jO)8il=85i[Y8hz8g8Bg8Sfg8lf8كeT$8eD8dMh8,dB8WcȲ8c8]c87c8!c=8cZ8Z#ct8A:cH8]cĞ8c8c8dK8Jd8cd 8)dM8;e8#el8he8,fB{8ufU81f(8 f~8 (g8Rgo8sg+!8g889gyk8g<86~g8@_g#861g 8fY( 83f{ 8Hf 8ne` 8]eK 8dRb 8/d 8c1 8Wb87a8a3b80`8 ;_.8e9^8,]8\m8 Z8YSM8WX%8qW[:8):V&8 T58WS{8RNA8BQ7aPZ7N7EM 74KLC7K7I7H7 G6g7XF75EI"7yD7BQ7bAf7a@7?HW7q>7=)W7<7;c7:7:w7)9`7HH87j7& 7=6ʮ7ٺ5=7k4F74jZ7H37{2nt71:70"707V/7.!%7<-76, 176,7Pm+97ۢ*7)@7 )7:(,E7i'7&XK7;%v7G$T7)$+76#^c7Y"7Vz!z7 7š75/77xe717E27HvX7S_\7u~7q'x7871707%7xy7F2Z7UB7|b07%7 !7$7M= 2.7w >7 eT7 q7C 7y 779S7LS7F76Z.7/7]0Y777z.;7|#767*7_ {7e~7ˇF7 m77z 7U7Ý7A w7*7)q7)7 7}>7G|7{u7G07at7&J7v74#7b궕7 737|!Z774V7&ᶾi7߶?p7Uܶt7lڶ7<ض7ն7NӶX7ж&7ͶT7 mʶ~7ƶ7Uö7z7,.7v 7$W7k2v7U717ҫ|7E23]7ּ/7t7\/M7|`7줶7Τ7+#7~7 7,7Υ'b7&N7=7f:A79L77ꞶP7s%7`J777FJ&77pӒK;77!/76ʝ7ZEa7Q`7]7kk*7,}L7͒7X7{7wJ8+J8OK8Ю+K8؁9WK8WXK8.K8YK8aL8bXL85uL8?﷚L8pM8wY﷠[M8EﷁM8:4M8%﷬@N8N8N8 zEO8 bO8cP8+jP8XP8 ?Q8^﷛Q8V!R8)YR86ﷱS8E6S8T﷘ T8ezT8 wU8^U84a"V8RV89W8]W8zUX8DX8$ﷇsY8s Z8"Z8lY[8𷁧[8G/\8H \8j6]8w\]80(^8'Ø^8}^8 D﷝V_8Qh_8_8>`8I`8Rt`8G`8&=췭`8W`8]C`8@\귀 a8a8+鷪)a8U0a8.^1a84-a8rL#a8>ja8a8LE`8s㷩`8Υ`8bqz`8]H`8Y-᷄`8෥_8 |_8ʀ߷K:_8D޷?^8z޷A^8޷:^8ݷ]8#ݷ%]8¾ܷi\8^ܷ.\8ܷ~[8 ۷uZ8L۷NZ8ڷ Y80ڷqY8~?ڷpX8ٷW8ٷ-W8/ٷV8طSU8rطNU8=طͮT8կ׷PT8K׷ZmS8BַR8~ַ*R8[ַQ8qշ3P8:շAP8ԷKO88÷K>8x÷=8Gh·Q=8̴L<8Ji<8L?;8A;8澷*;83:8Bd:8Ѽ:8#ϩ98u#P98ɺ88x88x%O88Ӹ&782*78ۓ\78"78[6868(K68ÐL6858_58#Ʋ58*e58njJ58d찷 558OI"58G"5858ZM48Ԝ/48謷C48.v48p4848㩷~48sL48< 48^38zn38*38X7=a*7]5L747{3S7"3 7U2$71z7027/'77//<7f.7-?7, 7& ,@?7A+7u*S;7)q7(;57(7/6'.7Ka&a7'%*7$>7#?+7"7B"273!M7N GD7gN70a7ʔ7$7nv.77LE{7)7r7kĕ7 )QU7<7R7bi7ؗ7&z77c7T7L7 1tL7s_ S7N `7 'u7# k7G 47D ,77)+p;7s7 7=7v87' 7%|7}x7fl77^(7>/f7b߹7I 7~o_7717 cU7<71)7527\?v7B7?7C3E7 777ƶF,7X7::@7X77k7Δ궲7C47YjO7!嶒d7@t7s7߶f7#ݶX7 ۶V7aٶh7u$׶7FԶ7Ҷ7!϶7t˶;7y0ȶ}7QUĶ 7^7gl777 7b7,FHO7T&7i%7, 47 檶.>7zp*72773 !7@祶7r7/ͥy7e7z7MJ&7M7᣶ȿ7.Z7⠶L7YV7ZQ7{!7™g7 7/7W'7¬7=’-7R7m#7q7C7ck7w8707"73s7ʜ77D|}@7ƨy(y7uDWK8R{K8~K8wO_K8!K8>"L8QL8 )L8ǂ(L8`L8A+M8$ﷻiM8 ͪM8 M8k6N89N8vN811!O8hvO8O8^ +P8P8P8 /TQ86+Q8rH+R8lR8S8?S8DS8{T8!T8{U8U8ﷂV8V) W8y9ÔW8HfX8VﷁX8Lc"3Y8mY8fvHZ8C|pZ8~Z[8|][8y߷"j_8x޷_8g޷^8ݷuc^8iݷC]8ܷb]8ܷ ]8ܷR\8L۷D[8QX۷7l[8CڷZ8*ڷYBZ8=ڷȨY8Kٷ$ Y8_ٷQmX8t&ٷW8ط.W8jطFV8 طU8׷SU8XG׷ʴT8%ַWT8`}ַ_uS8ַR8շ3R8 AշQ83ԷP8bԷLP8Qӷ|O8uӷxO8$ҷ]N8KxҷM8ѷM8)kѷ-fL8зK8NзK8ϷdJ8#Ϸ,I8Bη I8ͷ^H8Jͷ"G87̷G8̷&ZF8W˷E8ʷE8ɷZ_D8{Qɷ1C8ȷiC8 Ƿ_wB8CǷ9A8mƷX@A8Lŷ@8/ŷ@81~ķ?8÷T?8=÷H>8j·p>8.=8S=8xW<8Ħ%4<8i;8F~c;8:8鼷Q:8798і88񸷤88O3A88װ 7878xK_78޵ 78vEr68-68^j68}}868 岷 68xKy5858Q58qF58Zίx58'f58}T58ϭIE58558Ogl$58958몷O48&48?Zf48t48348mͦ.38楷38.38i28dI28e18젷018ԟ08ӹ&/89%/8].8_-89,8I+8Ǘ*8u)8V(8⦓9'8: %8֐p$8"8q:z!88鷋Z8fm838{88%i58񂷹v8읁E8pwI8~8R}8{)8zs 8ay 8-xUE 8w 8Cw(v 8vO, 80w 8}x 8Knz 8 |Q 8\%v 8! 8~ 8}a 8|^8Bu|;8|C8]|lZ8|W8et}8'}Zk8w8^i80H8\48l8ƒ8 8K$8[b838My888끷8)ف8Fʁg8LÁ8.Ł8ˁ8~Ɂ8E{8O`T8Ge38p87 8ib 8T 8y 8~ 8&~8:}?8]|48B{8zFo8y8 &y(a8Ivx8w.8w|8nkv8ua8th8s584s=8/r68uPq8|p\8o8n87nGG8}m7 8l|8 l 8OkK8j8i8(i8uh8}g(8ga8fffg8e8e8W{d 8Dc(8kcWH8ZbJn8"b8 Cb]8b8qa"84aN8aw8޾a=8a]8bw8Ab8Ɉb+8.b089cD8ԞcU8 d`8wdf8#dFf8Ue^8gj85g-z8gj38gA8&h8Ah'8Mh8JhtJ8#8h88hN8g18g98Bg8f8b\fJu 8e{ 8,eI7 8ydY 8c_ 8bN 8aϫ 8K aa 8 `1h8^8]8+8\@8o[88 aZmc8%Y;8FWD81Vѻ8WU78 T8$RU;8sQg8(PaO8MNe8ؖMs8HRL 88KTP7RI7H7chGj)7:FE7CE7)CPA7B7A77-@l7?7>77 =7<,7;7:797878 7&77L637u5λ74C7373Q7427Ki1OY70J7/[7 /7C.8X7z-67ְ,N7P+7+)A7M*7~)%07h(7'7'7/& 7>V%R7z$7n#Sy77"7!v7S 7 |77/ؐ70AF!7Pܶ7_?R7m7{'7ՇE7JP7,7Pm7ż377V7^}7 f7$ 7Bt7do7 s7 }7K z7 7R 7 277UQ7o7=v7n  7-T7g7R7B7 97Dz7~0B7 76@7zJ7sI7p7J7x75"7];78,7T7m 7mQ7x(7ّ-77XI7{Ty7c򶌣7@w77I7?/7"2N7gj7YQ7 ʒ7#a7kƙ73{7h7 ޶M7ܶA7ڶK7&ضg7<ֶP7Ӷ 7ж 7FͶn7ɶL7}Ŷ7Sү7+p74k777w767󯶿7]$ 7 l;7C801ǷUB8LƷ/B8ŷ*mA8&ŷ@8vķI@8÷þ?8M÷c8?8*i·+>8F7>8 =8Z]RH=8;<8xfi<8'T;8;86;8P:8Yy:8:8W98>s98 98k88>̷883/68878Yc78af78iɴE)78168U68 Ћ68j^68^ѱ668568'58z58S58{`58ܝ58R!58u58竷_58*OF58hA(5858Өg48/|487"U482?48NU38dOH38|l28l]28tb418 PnA18X6!08V/8O2/8VћKi.8Ԫ-8a,8zM+8I*8-ƕ)8ogZ(83 '8%8EQv$8F#8ز`!8o 8+v84߉8 .[8L8T7888HUtZ8S#m8 ;~8|A8/{ 8yD 8xC 8' x 88w[R 8v 82sv 8vދ 8HxQg 84RzS 8Y|O 8~H 8,C 8ɶ^ 888 Ge>8~58P~8Ll}O8}8ɷ|RU855|E68O~38 8v88{lT8I#8l8o888⊂ 8mq.8lN78$=8}D8yց*P8\a8EEt8ʽt8M8¨87o,8x)8ހ8<|8:]8E8)-;8nO~E8:z}k8r|8{8z+8tz%8Hy*8>xH8*wH8OwF08vN8u8A u8:'t#802sT78W7r;8Cq-/8_pH8o8Dn8nNP8omE8ʾl8 l8JWkAc8ǡjFO8jisP8}4if8}h8g8g8\_fE8e8d8,VdN8c%8&c8b$80-bM8rac|8ua&86ax8 a`8H`tI8(`x8 aY8F1a8ha8 a8b;8hbLZ8bu8/Jc8c8@d8dܯ83Ty8RL58'Qػ8;P[F8UN8Mg8mVL8 K8"Iw98H7`]G78,FF]7Ei7C7aB7aAP7@^c7?7\}>S7|=77w7N7D57pܩ7H2̤7E67O@7/e77D<71|'7272u'i77Տ67c7 7:7捶7댶7 l7.7m97U7҄7ႶI7nꀶ7 }Y7gyo&7+vve7"rL89xL8ﷳL8M8`﷞,M8j3﷐WM8 M8M8*#M8<N8vLTN84XTN8Z8 g>8t_==8'y=8$<=8(]><82<8 g;8A` j;8y ;8:8lU:8ȹ98^&98Z98巷 98]H|88d)w88088{X78f䴷78jMnr78նy;78A 783c684O68W68rb68D68})68ٮ6825858֬s58"58i-58Ow58穷U58*58BN48~w/48r48r !48nȤ38tգ^38Mۢ28١>n28Π|181M18a08X|/8V:/8,o.8-8јQ,8>+8a\*8)8͓1_(8v%'8%8ÏE$8p[#8>%)!8V.# 8z8nV8fS8" 8? 8҃;8jj88ԃ8L}C8|=-8z>86{yv8x_ 8wJ 8/v 8WvZ 8=v^ 8ؽvV7 8_w& 8y 8{ 8} 8~^X 8z 8 8A)8l~d8~ȉ8V}-8F|28{8|̳8$T8i87ۅ/8t88s{8)Z87+\8Tr8M\8W򂷕8Ђ8H8X_8~81ځp8)8a8#8U80?8EA^8/G<88Zy8'8Sv8~G8}8|8{!8{8+z3-8xmy88x8 0x88ܖw8Wv482v8W\u8nt8is%8Sr48;q58`6p&8^Ro8gn8mk8Em8إlP8lHm8Yk{08+j?8 i[8Ii8h#8gN8g8gf8ne8dGV8Hd8*cy8Zb8db=8a|8`aR8`%F8T`8lf`8?`+8}0`08R7`g8iS`8`8`s8a'8aQ8ax8pbS8[b68n}cb8 d8hd08&e8Ner89f8ָf8/g8gh8@g,8Uh'8hؖ8h1<8si8O!iCi8x,i8I&iq8i8 h![8h8 Rh*8HgE8pg8kf@8 8{`$ 8P_ 8^yI 8ou]8C:\. 8ZWn8Y86]X.E8~ W8U.8YT<8R,8.Q˱8NP:8NW8MY8 ZL8hKF8I(8-H_8lRGq8F8D7Ch7ɨB[7YA7hz@ 97l?r7e>^'7\d=x7i<6"7Xs; 7:z%7̗97U8#-7S77p657H6W7@5<7l473=72m7]1.97317h0,7/7.7 .78@-7t,k7c+7y*sF7 *7 9)7e(7'7&+[7%7$17$37A4#v7L"7a!7s j7.|7b7.7k77"7ί)7߲7˴q7'7d7;77OU7S"7~7-7k7}7c7 7U5 J7=W 7~ I7 7.76a7 X`7h7o 76?l7׽77b%l7\7D&7=57=7CK7Kޭ77Wm7I7o+&7?^7:7?&7 s7E7~H7G7W7,7>r7eO+7GS7ɠ5v7ްX7𶟵7ﶨ7%7?y7f%7637-K97٪F47HN%7%7/䶻7*ⶣ7͈7߶t7$Qݶo7d۶%q7d7ٶp7ֶ`7iӶ77Pж^7̶j7Wȶ(7zĶ>7vV37ꢼ7i47L7󶶹57᷶7@7/fr7yx$7B7W7 6777=7!7o7iS,7Z7[72"gZ787g>^7և77*L77C\7(7i7܌ݶ7>k7Cn7=573877߅7 Z777.B|N7HxЕ7Qt7apj5M8pVM87_yM8-$M8$M8$M8!N8|JN8U{N810N8~N8O8(W[O8̸O8ߠO8_ "P8bxjP8gYP8Z^Q8NvWQ8xEQ8i>R89`R86R8:6!S8z7dS8R:S8>VXT8)DT8 Ky5U8SקU8[=V8ehV8Cns W8twCW8W8{X8X8uY8՚Y8՜EoZ8b`Z8:f[8F [85SU\8Mwy\8b=8]8F]8-%. ^85'l^8n취^8췏_8nSMi_8$_81_8yK#`8cF`8~kl`8a`8i`8p`8VI跨`8%緫`8?緕`8'qe`8B`8)`8 ䷈`8㷭`8t7㷪`8ős`8}p`8K2I`8ժ෰`8 g_8q߷_8޷$s_8C޷-_8bݷ^8&ݷ^8ƝܷP7^8]ܷ]8۷o]8۷]8ڷ\833ڷ\8oٷ[8Xٷ[8ط}Z8طiY8ط_Y8n׷_X8S׷K6X8ַžW8ىַW81$ַmV8ԽշU8Vշ:U8=ԷT8ԷT8ԷgS8"ӷR8>ӷ,R85ҷQ8[ҷtP8ѷ|OP8nѷO8з O8$uзjN8KϷM8\nϷ #M8iηU~L8I[ηK8ͷU2K87;ͷoJ8̷UI84̷H=I8Eu˷fH8ʷG89ʷIG8ɷ0F8rȷE8rPȷ]E8ǷD8DǷD8YƷ}C8ŷB8ŷ4OB8\ķѺA89÷*A8÷O@8\·@8R?8.?8]>83>8 =8bP6=8ֹ<8ITa<8kS;8Ż;8 C<;8@}:8۹:8C:3:898Y98/_E98YĶ~88m+788o88X.883g78gѳS78;߁78RP78!78wl68ް68uCh6868yo68G`MT68U{968r 681\68#R58쪷<58]-585h~58BO58˧m58u󦷍4848-848>?38{Jpp38N28K{28>18"*W18 n08蜷/8=?/8R s.8a-8.l,8!+8~*8zi)8/"e(8ޑ).'8%8e4 $8m⍷1#8c!8PJ 8S8)͈G8ԅ86O8#߄j8]8(8rހw8c!8n\}r8Q{8Qz8O5y8uDx7r8kqw6 8v 8]Ev|4 8+v 8Cv 8w 8y 8%z 8;|/ 8}: 8'~s8YVB8et8S~wi88~ȣ8}u8}}8H8 }#8~88E8Ņ8n89 8̃b8pŤ8.8-(8x98B98Q8ςX8xU8r!Q8сQ8MQc8%g8Y80hGj8S8g88l8o8 mB8r~8 ~P8.}8.<|8C{w8.Xz 8y8x8exp8w08s\w8Ev-68,uƌ8t8;s8Σr8fq'8)p#)8o8?/nr8{m8l\58ml8Gk_b8VNk 85j;8Ej8|bi8>hR8WgA8:g8~fJ8e8 e8Qd8ߛc%98bL82AbM8ab8a\8`8_$`85_;8b_O87n_8d_ 8Gr_]I8_8_8O&`8l`+8(`c^8~a8 b8b486cq8c-8udj)8e[08en-8Ff* 8fF8kXgm8g8?hV~8h98h#8 7iU8ki)8qiչ8i,@8Ci]8i728ii8.i08Shg8@zh8g8og6o8tfM8f8 Ceaa8Ubd 8oc 8kbTR 8Xag 8}7` 8 _R 8n] 8S\ 8A[Jn8Y8~X%@8!=Wl8U%8~TŠ8S 8QȤ8?`P,8O8MI8W\L8K[x8)I:8sH;8FG/^8F8D8ƷCRe8|B8yAʜ7e@- 7V?7,O>7M=u75R<7{\;7r7@l:;7/9u78g717y76}76|77+5Z7W4z73|7ķ2Cr7171ga7S07/G7K.W7-$7)-17],7+na7*7)-7)N7F(7n'`X7/&7´% 7@$U7~#<7|#(U7<"l7,!L.7: 7E-7M>7R7U7;V7mU7Sz=7P7L 7H+79C7>7;^79*7a:7=z7CO7M7 \ "7n 7g 7 O7 k7)7EZ7U777j"f7+u777|0An7ʘt717z}A7|7{f72X7l#67?G7r=7a7p7"7d"s70$77U?\77\7 &7MI^7͍7B7G 7)l7 M@7f57w=U7߀r7i7Yy,7f붐7HQ7鶉7K綟q7|%F7}7{767sVD7W޶ϧ7ܶ?7ڶv7ضsM7.ն7Ѷ7vFζn7ʄʶ87SƶS7Kö77\*7,77s7vW7J72,\7 .7ӹ7Q&7@O?717YNg7oK74U74797Kz7 7͡7]?7tg7* 7{NZ7t:.7QWg7ʙ7싶b7Ƌ7aco7n7P07_?7Ն7JN]7Fs7jX7/~i77z"7ԶvJ7rG77n M8=2DM8F4N8 9N8 _N8_mkN8TAN8zN8fO8gm@O8Y6uO8ІϬO8hRO8:M$P84dP8CP8\P87Q8췋Q80Q8&R8N췊|R8fR8Eb1S8ӹVS8+ S8\VT8+aT8('U8OoU8 V8}췚rV82V8췱XW8u[8"On\8"N\8ʪF]8 ]8g췀^89<췇k^8 >^8_8\_8?_8b_8s귮`8]0`8aU`8&,"u`84֏`8q`8T緯`8.淸`8o]淧`8l巊`8)z`8Q}^`8R`8j6``8ⷋ`8Cᷜa`8Ky>`8`8 _8ln߷_8޷`z_8;޷:_86ݷU^8ݷ^8ܷZU^8ܷ]8y۷]8ڷ6]8zڷ[\8$ڷ`U\8cٷ[8ٷ][8>طZ8@طRZ8׷FY8k׷:Y8׷X8ַX83ַW8-շiV8MdշUV8ԷU8Է&U8j(ԷTT8ӷKS8|PӷXS8Oҷ$R8arҷ R8xҷQ8ѷXP8|ѷGP8зbO8!з O8ϷfN8 ϷM8{η"M8ηL8LjͷK8̷7K8i̷J8˷I8?˷GI8ӦʷH8 ʷG8nɷYG8ȷjF8,ȷ3F8҉ǷksE8=ƷaD8?Ʒ]7D8ŷC8ķC8MJķ oB8>÷fA8·2MA8]Q·@8:@8?8X8?8&o>8 D>8%c=8a=8v<8r<8λ)<8+;8щ:k;8'鹷;8I:8櫸e:8:8/sJ98ض)|98E@398db8888~ml88鳷z088hUb78.78+78e78:78#f 78˯68,-p68/68筷Ò68?ku68DW68|⫷f968,S68qL58{58꨷ȣ58Cq58KA658)r48'V48먤"M4838â38iơ3828 18^1808\g081A/82t.8.Θ-8,8^L+8*"N*8)80Rl(8K8'8F%8hi$8W/M#8 !8&Ɗv 8΅n8G8s8Ņa8}182 8b職`88^8 }ғ8v{8#zؙ8y8].xr#8kw8wv2,8Uv 83ve 8{v 8h6w 82ZxN{ 8ryy 8I{ 8| 8^}8o~t8~)8~d?8p~78$~L8~w8~^8E8C$8 88/8A58Y郷!@8%8<(8 F8kN8698_8(8=҂[8Bu8\8 Á8yǰ8L7f88ʸl8q87+8n[|888w~̰8XQ~v8}M8|F8{Zk8z8yf8xTE8txM8 xU8ow18Jw8ņv(8щusu8jt)8;3s;8q8}p8o8pm#8!m8{l {8Vl8dkp8 1k8kj8j+]8|i68Zh.8hhA8ag?m8ifa8e8*e<8od}8cp8Ub8AbW8EaM8`8I`8_M8L_ŗ8"^ 8^<8^8^@8!^C'8^l8%_ 8_J8_+8dx`[e8<av8aY8Eb8bo#8ޢc/B8Ud X8 eFd8e]f8Wf]8fHJ8Ɓgc+8eh8~hT8h8Fi88iC8xiw8iR8jL8j8Oju84iZ8iA8*oi38 i82hH8hv8Zg8_f18e|8cd8c8bSa 8a 8`U 8-l_V 8*^ 8x\1 8[i 8X1Z8X68nWR8V(8/T8T9S~8QR8RoPS8aO8M68\L8 Kd8Ii8yH 89GH8hF8D8XCN8B8eA8P@o8A?)89>7,8= E7<<7XG;P@7sW:7l9g@7877HA76725U?75Q7E477Au372'717 17C0A~7}x/E7.U7-7X-.#7xJ,7|+#7*+H7)ݦ7){7.-(ha7R'7u&7 %w7$q7#67"7!7< Qe7- 7 >7e7'7# 37K)77>L7Ia77S27x77`7a-7T.77"7 y7 7 7y &7 7 7/J7[@7_տ7n7 \T7TΨ7'7Vb7`37p.79Ҙ77/]t7jv7"R77)77D76[7?Q7,7d7nk7.97ۃME7O7-77k7 $@7k _7I}7b7u H737oT7n) 7"77w7{n7W@7y7嶝p7l䶩S7#]87a7߶7޶7s۶v7mٶW37(ֶ7oӶX78ж7̶v7~ɶ#7ջƶC7JĶ'7E¶7,7Vt7Yö37Ķq7ĶǛ7s¶7/7h7'$7.)7ua7Ѻ747չ7#7uFE77b}7&$787-Ɣ7V77+'r+7ٍY7ʱw7_7q_7%̹7&77P88P8B_qP8v췪P8췷P8­+Q8oQ8Q8sR8+e(NR8XR8DN R8EFS8?S8;췺S8q8(ZT817T8/7췞U8d8U8:IU8>XV8B췉V8/F췖2W8?J?W8&N]X8Q췻X8TX8cVJlY8V췘Y8T췱RZ8vPRZ8I7[8?t[82\8?!췟\8* \\8뷩O]8뷿]8D@ ^8xbe^8*Dj^8L_8dI_8tL_8Q _8<_8P`8hW7`8PfSU`8n`8]緻`8`8<5`8ݤ7`8 :`8llK`8CO`8,{`86e`8GK`83Gᷮ+`8[`8_85i߷d_8޷fx_83޷=_8ʛݷ^8ݷ^83wܷi^8+۷j^8 `۷ ]8:ڷU_]8CVڷ\8ٷ\8D]ٷ\8iط[8rط'[8bطcZ84׷#Z8$׷LY8kַY89MַX8շjW8yշe`W8hշ;V8qԷ.9V8:ԷU8ӷ U8cӷvT8ҷyS8ҷzES8ҷR8ѷ3R8k4ѷuQ8UзP8*Hз8`k>8U=80=8uO=8ӻ.<82T<8;8x;8U>;8$:8:8rF:8|궷98RZ98Ai98]'%98{88988ll88ٲ588F8878֥78lz78S782S^.78y 78j68p68Ǭ-68D68j9k68γG68 686E58o58fB58ΦQ582 5848k(_48838@38BJ38p=28F018c18+08כ(08C/8zt.8E-8A L,8#ѕ+8*8JR)8 =u(8EE'8 t&8g$$8nՌl#8G}"8E 8:8 ˇ8F]8-Z8A 8䂷^58ګ8J~C8~\8|=8xS{98 zOR8y8b.xd8_{wQ8v8&}v38aSv`8{vvG8v;8w48Gx178JzS8{]8 |w&8}8 h~8H~$8,~{8ڸ~D8 88ÀY8t遷i8K=8R78 `8暃g8&8_ق#8-h888 f=8˂S8ȂC8=.8W)8j8#8m,8C8 S8⤀T88oDx8`88G5g8~S87}8> }8|8{86y8y8Xx8xM8wB8w=8aw8[|vg8oEu08 s8cr8Aq8oH8nw8cl]#8k8'kU8zUk8k8j}8=#jF&8il8h8!Lh8g+8f^8f3>8Yeo8 d58c8%cn+8cb>8xa?8`Y48'`L8~_e8^8t^%.8>^e8]8]\89]8]8x$^J\8y^78^<8ic_J,8_k8`8:a8Xa8ٰb=8:uca89d|8d8e8Qff8 g8gj89hRD8h.83i8iw8i(89j8^njNN84j8WjF8jJ8\|j8SJjw8ju8i "8&imp8h}8Bg48-gyK8Xf#8Gme 8nd 8]c]j88qQS(8vQ8zP@8O8ML 8YLN8KL8I8alHy8*G08`E(8SD8C68qmB8PAY8:@4W8U,?8$>8d#=8{(**7L7:h7 S7 7 7 7q 7F2 i7Kk27ke7t'7^7 47977G7I*7>7w7eK7+r7d/7B^75730F7P7ǐ$7T7.-7V7KQ7K7T77^y7%7H<[7ۇ7d7Nv7es7Z 7b,7xM72l7ς7ON7|충7}}7޽b7<7!q7G7Cz7KLX76 l7Y5x7yᶿ+7B߶7kݶob7ڶ72׶37Զ>7Ѷ߅7 ϶ʨ7aa̶7ʶ#7ȶrx7F/Ƕ07LƶŸ7@ƶ74ȶaR7ɶ77ȶ:^7ƶ^h7D Ŷ7nĶ7r\ö\7¶7 =757(.77ſ7g7~7GF(7e_;7>(W7ۛ77+7D7;37G7yN7E:57 +97#W7҈7b37Åi7 7n7t7+|)7fx 7]s_7o7ްk O8p)O8;HO8jO8(O8Ѥ{O8vO8JP8 !/P8D^P8*[P874P8취P8r2Q8V췮nQ8P^8-G2_8l_8OI_8_8_8`8(0`8fF`8淛X`8d`8~.l`8HPn`8'Q䷀k`8|㷱c`8V`8{E`8.`8<`8_8߷_8`߷_8޷Zn_8(޷68_8ɏݷ^88ܷ^8eܷs^8Y۷r&^8;H۷]8ڷ{]8z6ڷ]8ٷ\82ٷfN\8ط*[8:>طh[8b׷Z8T׷%qZ8pַlY8sַkjY8ַdX8շgWX85+շW8FԷ:W8SԷV8ӷUV86{ӷU8Jӷ|T8ҷK\T82ҷS8mѷ.S8WQѷ R8з@Q8(jзdQ8Ϸ8>8~uð=8VջF=8 6h<8}<8<8];8¸j;8(;8K':8u:8a*:8o̵j98P8/98nZ98\98@88ﲷ88]jp88t˱'>88j8880378\w78}vC78ܮi78>F78$78u78EQ`68K68>ə6858rTQk58x 58248٫p48ƺ~ 48¡38à38 =2828Yh18$~08hY08-D/85u.8ŗ[-8,8?O5+8B*8ϒ)8!b(8CT'8A&8?$8^X#8f9"8 щ 8[_z8t[!8E(t8R8ʃ|8,Ҩ8Yu_8y8zA8|8$}%8T}82~~7+8K~8=ޫ8y!8pI80884X8gzHW8v8s炷ȓ8-V8|8W8C78o1 v88Á 8ˁ8m8Ao8Gԁ8Ɓ8<8%΁8pkB8P쀷K8`38=+ 88-g81~f8vl}p98ʆ| 8J{8sz-8Py=8Mx8w8w8cw68 x[8w8`v8*t8q{s+ 8Y&ry80p8xToV8T?m8,kb8kj8j9"8j=8mj*804jF8,i8#i[8Ԁh68Qg18gI8Tf.y8e8d8$d68gce8b8a8-a98C/`V{82i_J8U^#8/^`M8]8[G]H8]E8\A8]8*] 8p]}a8]8F^8^u68l_Cv8V`?8m`8maj!8sb@P8Icx8#d8#d8e8sfÿ8'gͷ8g8khp84hTS8|i8Di8BQj.o8bj8j784k8wk8kd8okEM8j8#j8%5jsG8i8*iC8 hK8 g^8fN8ee8Cd&8cl8_bѴ8Nra 8+`N 8^ 8{]F 8h\Q 8Zɰ 8N:Y 8W 8;QV(8TPi8dSl8eQg8P=8JOw8M8RLZ8vJ28=I83\H9q8G8E8pDl8|C8oWB8z:Ax8$@a=8?>8z>8=o8䷟:`8*+:`8Õ?6`8ⷞ,`8c`8 ᷒ `87+_8yT_8߷ı_8R߷&_8]޷o]_8|޷+_8ށݷo^8ܷ^8Tܷu^8۷ .^81۷]8 ڷ<]8ڷj6]8͑ٷ\8I ٷ~u\8xطW \8(ط[8׷*[8>׷OZ8էַ7Z8R4ַY8qշ\6Y8QշX8Է(X8tԷW8ԷmW8mӷjV8*ӷ(U8ҷcU8NҷT8ѷ>T8nѷS8з{S8GзR8SзQ8ϷPQ8x*Ϸ9P8]ηP8 6ηAO83ͷN87ͷLN8ش̷M8/̷M8˷tL8˷KK83ʷ'7K8ʷJ8lpɷ)I8ȷXI8GȷH8gǷH8Ƿ|G8zƷ^F8ŷCF8?ŷ8qB>8#ӻ=85hl=8瘺=8$<8KbF<8ȸ';8!0;8"A;8:8m:8ٵY:8{F:898#98ZO98B98r88[ⱷ884Qv884G88+`88ٖ78 78e78ȭ}78{(2Z78N678ܫ|78/68~68Sǩ68 Zn68H<68u68358Oݥ58?$65848I3π48Ao48rI38 JN(38C028'6 281!n1808 08WGG/8xw.8CO-8z,8Iؔ+8 *8X)8O(8Ϗg'8‡5&80>$8#8g"8k!8 0&8(c8^̅B 8ȣ8g8` 8F8;7E8v~8|8f8{8z8 y83Nx^8̷w8wAw]8v8vN8v/8w8zw8.x8 y8QBz8w{+8|8}|8S~V8~8s8268ν8jw8!S8[]88v΂+I89(8< 8C8|,8ڡ8]8848oπ[8i8M8R׮8$8F\3?8i䀷8(9888LX8ᧀڲ8'=8q(8ͤ~f8f}8E|8@{E8z8yMe8Qx7t8}w8v:8v'8.w-8bx+8Mx 8v'8ttx8r@8qK8,p48o88clI8jH 8j`8cj87jx8Nmj8ix8w\i8h8Sh8[gc8Dft8e8*eZ8sdJ8c }8b8'bV8Ia8c`8~_8^8]A8L]!8\n8{x\8B\r80\]O8?\8|p\o48b\68(]8C]8T?^O8^k8_84x`8TaN+8I8bZ8@c8Rc8d8ye8C~f8y@g;8g8ehջ8V7JUȶ%o77˶l7ȶ7ƶܿ7Ķ7&UĶ.7Pför{7_¶785727xbŶr7Gɶnh7.ʶGU7 ɶs7Ķn7  7󧶾777/=%7J:v7v7 p77g(7_7u%7bw7hgw 7~}u7Kz7u97q-7%\m7iAP8ͭ\P8RvyP8d@*P8= .P8 ,P8?P8{u#Q8OKQ8~%}vQ8뷒Q83Q8bR8:R8t$qR8WR8U=뷑R8%&S8hS8 귊S8S8귑>T8jT8ET8+U8ΩU8¡U8[.V8V8}V8ECW8PW8fX84-gX8z귍X8u.Y8o귊Y8ThRY8b_귽\Z8YT귽Z8F#[86[8#귦[8 WE\8鷈\8\8үP]8٢]8}W]8B":^811^8^8.]^8L --_8?緟Z_8RJ_8'淋_8C}|_89_8_8^ e_8`8P`8j~`8 _8Bⷾ_8᷀_8P_8w._8߷(_8?߷8ͻd>81=8=8,=8kc%<8'˸m<84<8';8 *k;8!v;8㵷:8Q܆:8$A:8098󡳷987984H98^298&gN88Dװf88gF~88Q88&88o 78;78Sx78𳬷78&Ig7858i58ٌJ58D4848̡&48yԠ(38ԟ1380Ξ2828>zs18i08*n-08 E/K/8{.8-8f,8%k+8,*8쑷)89_(8g|'8#P&8݌%8=4#8S"8O!8܇ 84߳83f8,]t8A8-8 fj8F8]~38|58<{DM8 zz8myQ8ex8wے81ow8Z'w8w8iw:]8.4wM8wI8x(O8Ux`8y8l {80|8;}Q8 ~J8~8s8S38߀cR8U{j8qo8,zU8(8S8l8؀48 N81Nt8]à8?+G8wf8ǎf98Y(8$88Á@8&8ԅ8$r08+8687j8v,8~qe8~78k~8d|a8,]{`8lz 98Ky8#x#8v358v58u88_w 8x}8]xg8zv8}sШ8?#r8(bq84piB8p8nmv8Kl"n8k=^8fk8k8bjt8i8 ia8]h(8g8f88fO8ʁek8,dE8dt8\c8Hb8aI8`G8_L8^8]8']$8?\U8E\18[8x[~8/g[8w{['8[84 \8}\/8]LO8]{8h^,88_8``8a/8a\8Fb8acޯ8Md89e8f8+^gm 8#h8nh8҃ih8j8Lj]I8k[8Pvk8fk8kz8l/8'l E8l8Ek)8hk48Zkw8j8Nj8Ϟiw/8hsi8gs8)fO8e8dY8n}cY82be8r`K)8s_fv8^- 8Ӌ\ 8 [{ 8Y 8\XF 8ЁV 8^T+ 8xS 8IQ( 8{}P8OC88Mf83Lh[8PJ+8 }I8).Hb38Fk8E^8uD08HC8$B8AK8?>8>8=Fz8<,78;8W:$8:q8+9/8-J88m786f8Y5!84 84ؒ81N3H82 711\^707#07X/5s77.7\-~7,e7%,7T+@7*<7l)~7( 7'7Z '?7^%&~79%7I$7U#A7c["q7\!*7|Y 47Qk7Cǿ717w7F7N7W7N7|7VVp72.7:"7Vj7S*7&7if7H 7+ 7| ԝ7K է776V7e7.H77,7B77Eo3707z7F27ow7H7kk77717n7I+K7;|7$X77bQ7h7Z,7i7l97)67J(7/򶪾77h7cB7d)c7-7i7737C 7j7E 7L77^_71g7IB7`M7Q趛-7%B7k綕577@7E7(\75JJ7߶D7gܶ7{ٶ[75ֶ7Զ>7W<ԶS7?ն87ԶO7qҶo>78жU79ʶ*7/ʶg7m˶P7l̶&7̶i7#yɶ27%ȶM7[Ƕ74ʶA70rȶU-7i ȶs7ǶQ]7Ŷo7]Ŷg77F#¶7w7&ƶ7*Ͷ7ʶ/]7Ƕv707kЯ7ŪVQ7oj7IȺ7pj7됶g7"5M7勶\7‰ N77{_7k^7=R7~7\yG,7*uv7tp7IRlI7gP8K;P8t Q8~췄,Q8HJQ8s$kQ8BdQ8L췺Q8Q8}R87+R8*j2YR8YE R8"ER8:R8<'S8aS8k귩S8~S8sT8k귊bT8KY.T8H_T8:>U8-@U8`!귅U8.V8h BV8V8'82W8bW8lW8tDX8(X81Y8_`Y8)5Y8 Z8vZ8ޤOZ8pm<[8Mf[8k[8vQ>N\84U\8n鷐\8跏J]8G×]8]8We&^8jg^8G^8C^8}'߷N_8޷)_8!ݷ^8e[ݷ^8ܷ^8,ܷJd^8۷&^8۷]8eqڷg]8Xٷ'N]8Uٷ\8eطH\8W8ҷV8%ҷ%.V8 ѷգU8BѷU8PзՊT8J_з?S8ϷxlS8xϷR8ϷIR8ηQ8Lη#Q8/ͷ^P8t"ͷO8ȥ̷bO8&̷wN8̥˷2N8u"˷M8ʷL8ʷeeL8ɷK8(ɷY/K8rȷJ8Ƿ%I8OǷ\I8ڻƷ{H8Q&Ʒ&H8ŷLG8aķF8X\ķfZF8*÷PE8 %÷-E86·"D8D8M%yC8 'B8aB8rCA8ԾVA86\@8X@89?8ag?8Ż>8+ >8^>8=8#aP=8zʸ<84<8:<8 ;8z;8鵷E;8~Y:8ɴ:8?;bn:8|,:8 y98ܓ˲98)y98yC989찷k98]88ͯ88<88{Z88Y188h{ 88߬78\@U78 P78l78IB78k78⨷68%Գ68Vc.|68P?68̥58`58e^58758:M48[\348c38c;38}]m28VP28r8%~k8qK!8&8i+}_t8/{I8ky8xE82gw8YvV8uu8;tM8v8x`8ewr8ua8q3~8Jzq84q 8̡p".8<`oV8m8;Wmp8Ol8ku8(k8>j8piz8ihX8gv8FgK.8˓f8e81e-8ցd!R8c7u8cЌ8[+be87a81`J|8"_V{8^83]U8Rl\8#[8tC[!8ZlF8ԥZ%T8Z -8>Zf8Z18YF[o8([8_\8]j8A]8^8_u8l`_,8:a>U83bP8c8d,8ne;84f8g*8Zhf/8i"8hi8sj8kM8 |k$8}k8B4l28qlǣ8:l8lb8l)8~l 8AlA8gk8ok8j8'j*8Xis`8,oh8lg8YQf8!eB8|c}8b8(&a 8_U8<^8غ\4 8F3[{V 85Y 8DX 8V 8U~ 8 vS 8Qu 8xoP 8N 8M$8L58J8^Il8H18F83E`8UD8)CP8Bt8o@+8?w8>)8=N[8<8%;p8:Ȕ83:&S89=8>88b7G8.6F858 4̸8v46o8J3#82818<048"0u7Y/7.sa7-K7-,L7}%,67TS+(w70~*ʴ7)$7()7G'a7'7Z&(74-%7:$A7A#G|7D";7B!J7: ?7,7C7&7-~7yP7I7yþ7O?7#n7Y7;7{7bL792 7L7 +7f 7 s7g 7XL r7W77e)78#7j%`?7j0؊7D7b}C7Ǯ7 #77K$7m7f7p?7 7h70J7.y7/7/77>T77zSf7!7RZ77tI)7f+737[7tY77 Z𶚴7 070ﶜ7)& 777?S73f7ek79`7ˍWG7$7S7S 7p궶77X鶜707:W7[a7m97Mi7gF7U7"7b`ݶo7sٶ7ն}7Ѷe7϶7϶7SжO7isҶĶ7DͶ 7ȶ 7 ʶ=77|˶Т70ζ7Zm϶j'71mζ#7ζ7$жG7mжo7<ɶu7_ʶ=7ɶ07]fȶ $77QǶ7h7Ŷ7#öN7;/7?r+7xJ7föI7¶77./7} 7y{7_~t7oUI7hdk7fruQ8/Q8IaQ8Ax0Q8AQ8| FQ8뷧R8W?R8{fcR8NR8.$ȲR8R8P} S8F;S8hmS8n S8P)S84T8OT8귤T8鷎T8U8鷬WU8U8lU8x6V8rV8~V8ZsG(W8i鷁|W8?_XW8Ub)X84LwX8MB鷖X87鷊4Y8,8Y8 *Y8DZ8_Z8+Z8 /R[8[8˰6\8<跋T\8t跈\8O\8&A]8G]8]8ߋ^8EM緀L^8N^8淥^8ki^8 _8n-_8;L,J_87Fb_8>nau_8I㷗_8xی_8*;_88.<>8[=8ƸCs=8[21=8<8 `<8{ <8M쵷-;8]n;8ϴ$;8B!:8:8]**Z:8M:8w98wީ98nt98qA98g䯷98U88Ů883_88枭ub88M988Wl88ͫ78*N7878{ةj78'&<78qH 78u6868+Z68x]68^58>r58ɢ583ߡ*48#@48tf38SF38S񝷋28䜷"28ћ;18;D0808Gs(X/8 H҉.8g-8+┷E,8d+8n"*811)8􏷧(8>'8xm&8:i%8:$8Ét#8!8\ 8i2e[8#8G82ꂷI8恷8HC|8k8NN~k8x|~8`c{Ҥ8=z8Va 8T 8iS/S 8MQm 8WPZ 8 N 8tdMu 8K 8ӓJ89IC8G'83Fӎ8eEk:8[1D8C8AQ8@8̼?/8>~}8Ƴ=/:8<8;38:t89@3839I82888Y7j86Y%8e5g8484J8I3828v1B\808%0S8[/HX8.7->7|,-7(,޻7U+7*Q+7)_7(א7B'7'^7&w7`$%O7@.$72#671"!7*!3"7d ^7 Q7(d7.7F7$7a6>7;27:*7E7z;7S]"7r#Av7f%77x7B o7p mf7] Y7 Z7i7x^7 c7U7KQ.7V7d7}F7=7&67D7KdK7QH7xy77n7oX7 73&7kx97M,7.;e7R7.ou77[&_77! 75aq7T𶭸7ﶣ7#7<]I7|j7_7u*[7b7De7 71추7Y77f71MD7̠3,7!B 737-67w趶B7T76t?"7v 7ad72D7䶛7i6E7@޶&7ڶ7;նn7϶7<˶<7ɶ%78ȶ\<7F̶ޱ7Ƕ:7vǶ7ζMy7?ͶTJ7ʪͶ7nжy7Ѷ7Ѷ_7Hж7ζ'7Ͷ7D̶5J7ʶg7ʶD7JFɶ(7aǶQ7Ŷa7PĶ;7ö77(¶776m7^ 7787̣l7`d$7 e7r]a7d-7V7C7ݪ27(%7ܩS75!7B}#S7xX7sx777o7j7JeqR8t췞$R8L%S8귝S8鷉T8"OT8E鷫T8vT8FT8bm8U8VxU8AOU8.U8FV8O 鷋V8V8I跂&W8tW8|W8:X8hX8FWX8{Y8, fY8&ջY83wZ8f跹gZ8T&Z8@[8U*e[8Hz[89緢 \8X\8ۥ\8#\8`Z7]860!{]86]8淦]8K!0^89c^8巑^8^8uAJ^8䷠^8{ _8䷺/_8ԟ}@_8F)iL_8g}S_8,U_8US_8VAL_8}@_8K0_8t߷_8:޷s_85N޷4^8ݷF^8b#ݷј^8ܷl^8o۷;^8c۷^8ڷ]8q<ڷ!]8ٷJ]8ٷ]8ط\8@طyd\8Ow׷\8>ַ[8uiַU[8AշZ8eշ,Z8ԷZ8qjԷٰY8ӷ>Y84vӷX8VҷPX8ҷW8+ҷWW8pѷV8D)ѷUV8yзU8Aз`LU8ϷT8YϷ=T8lη6S8hpη(S8ͷR8ͷ;R8 ͷQ8B̷/P8̷_P8˷O8˷n;O8ʷN8]ʷN8ɷ~M8KɷL8ȷRL8ȷ̻K8wǷo$K8ƷŌJ8[ƷI8ŷ]I88ŷ-H8,ķ(/H8ķG8y÷G8R·YnF8I·E8 IE8D8|*D8m⿷C8GC8UB8 B8xA8߼ A8E@8j@8D?8~2?8蹷>8S\>8=8,=87=8* T<8`z<8뵷f3<8^;85Ҵ|;8FoN;8;821:8:8cJ:8`8:8 9898Zq98kB98\ޮ=98jO88M^88*88hh88a?88[88𹪷78ο78h78`78,78wGQ68䅦y68K^u68,68=[58@58^&58Zt48샠N4838HQ3828}C,28k+18S085$084a/8N閷N.8In-8̈,8R\+8c0*8e)8(8j'80&8%8ln$81B#8SW"8+ 8ٱ8ꄷT8փZ8͂68Ёc8O8!8T~8| 8B{DM8_z#8ty8x G87x8wR8w8wY8whr8w Q8' x@8cx>8%xH8y]8X`z/z8sR{Ҝ8L|8QA}i8-~828yN8Cl8f%8g858$ͤ8ɟ}8RWs89N818Kr!8VE 8LA,8Z)D8Ъ@_8~|8zi~b8S~8L"1C8Tah8eS8&[48Y"8B S8V~8} 8P}8}}8]}Z89{u85z84:y-@8 xA8w8wq8u^8s8Yr98q8,q_8p/O8p&8p@8nq81q^8*p!~8Bo|08unk8m^ 89lA,8ajr8i8he8GgR8g)g8f$8Nf8fe8id8Vd48?c.8`b28da8$N`8F'_֫8^(8\8[W8"[S82bZ78YZ8}Yp8AX'8HyXV 8eXL 8&X4!8ZY !8IZ 8Z 8[U 8\=! 8D] 8[^8u_ 8_a 8BbXG 8qc{ 8dl 8e 8[f+!8gY!8h8v!8ii{!8lj e!8k1!8^k 89l!{ 8Hlr8mfp8}Mm86~m ,8ȗmGz8m_8a~m8(Gmr98ln8Czl̠8k8*k8LSj8-8]i3\8LhԌ8C g8e=8vdE08+cn8ܣa8 `8^rG8\8{^[8YU8"X[ 8߄VC, 8KTP 8QSH 8Q< 8z5P%( 8³N 84;M(E 8:KI 8>gJjv 8w In 8G8uFc89E8D8MB't8#A7*8@8[?!8Ӗ>FY8ژ=8<8;84:R8W9898g'8Ό8TP7H8|685842q84%8I382`8118p0>8)068a/&8e.R8-g8,8.,>7[+p7**7̪)7$(7'7K'E7&k76%*7&&$7C'#`7e""7s!D7W "y77}717{7V7#,7Tu7 7w7L877ѳI7ps7-T7f T8:#b/U8;鷧gU8U8跨U8}V8G跏^V8跩V8"跕V8$n,-W8\跕uW8L跨W8^8$޷,^8ݷ^8ܷw^8*lܷ O^8^۷"^8D۷w]8ڷ]8ڷ ]8ٷ1A]8nط\8|mط\8g׷i\8,U׷]\8ַh[8Cַ"j[8շ [8p:շZ8LԷDZ82:ԷnY8ռӷznY8Aӷ>X8ҷ X8MҷX8ѷPW8e_ѷ!W8}зV8$tз#V8$ϷU8CϷU8XϷHT8'ηWT8*η֍S8ͷS8=ͷzR8̷Q83M̷ocQ8˷P8W˷GP8ʷ(O8\ʷ'O8ɷAN8ZɷN8ȷpM8QȷVL8ǷIL8AǷ2K8öƷK8*ƷJ8ŷ`I8 ŷ]I8gzķYH8÷;3H8S÷G8i· G8-(· xF8pE8ELVE8`D8]ȿ\;D8/C8(C8B81eB8̼A85@#A8ũ@83@8r?8#ݹQ?81IO>8\U}>8$>83k=8I[=8v=8起<8^\Y<8PѴ <8EGϿ;8罳w;8 52;8:8%:8ܝv:8=:8:898}98Yq98LgC98٭98I;88888Y!88-k88*몷(A88JT88u78I78J78𕧷aN78ۦ78 68SN68E68K58ע`58958 48]48'38)]38%28>`728m 1808xט/08m/8D.8:d-84[,8u+8@̑ +89/ *8])8$&Q'8&8 %84ץ$8_U#81)KY"80!8fㅷ 8˄8.F88At8؀8[8;a~8|8{O8΅z68yW8[x8xVxv8?w(8wͨ8w\8!wB"8wl8%x8wxY8Ex&8{y8C7zo 8 {5)8R{^J8~|{m8V}8=~t8ٍY8O=8988{S8oM#8c686p8\S8_8Ԑ<8fn8J288?n8m8@~{E8~K8=u8 <8 E88`ڶ8i~8}k8|r8E|8u|78V{yO87?z*8#hy8x8Vw8v8zu:f8t8 @so81r8q8r<8q,8OpK8p8+r158q8 BoM8n8¹n8m8l<8gj8>h8hyX8Og!8if08\f8e08Be8d18c8Zb8Nb8; av8v_ZC8^W80]8\8r8[08Z,R8Ym8X87X`8aWt!8 W "8!Wx#8dxWz#8X!#8XA"8Y"8%Z!8J \5!80] 8Y^ 8>_A 8` 8Db!8TcJ!8Ҟd!8e!8Rg&"8hf"8i"8gi"8ҝjǐ"8Ok(\"8k"8~}l—!8lC!8[m{ 8m8m0)8Unq8t ns8m8mm2"8om0S8ml8`l8okb8j8i-8hm[8L{g8c-f߿8]d8~Uc48awv8VA`87^ 8 ]]8`[8xY8X8mV 8dTf 8f,S 8QQg 8P} 8N| 8 M 8Kb 81JC 8H 8چG 8 BF4 8E8CD8BH8A8w@}8x? u8u><283{=8<ׯ8c;go8':.8Z98888.8Ii8G7$8v685L84K8a4g8,K3|82[8f19808*00RR8h/8.ؒ8-.8-87,_8wd+7i*7@)467x(!X7'>x7k' 7&=7%7!$7#7"h:7!b77u7K7/7Xq7#Y7xj7Bx7i7m$Yd737tx7E7S7gu7>` <7 74 7 78U77(7 \77zj7bM77}F17|&7D7(67p7\6*7Y7̊7^A77s7Y&h77>X7d7}-)7n7{7s7577 V7=G7Xn_7?E7eG7A춉e7 춶|71`춄77n,76N7>_qw7"fP7/o"7EU7&7V7f>鶷7f7+tN7<~70ʱ7P797<5pd7趧>7維7$L{7F=7Yz7uܶ 7e׶7Ҷk&7Ҷ7ϋͶay7Jȶ` 7ö7rLĶI07;Uʶ]>7<ж\7RѶ7$ж7>Gն0\7vӶ{17Ӷ'Q7Ҷ37Ӷ7 @ԶZ7DIҶ7ж?7^ζA7O̶\K7: ʶp7ȶt7DǶM7hƶ^7sŶ[w73öj7_Bk7xsv7wq7ܭ7FQ7c7H87 .7ȓ^7H;%767)扶7!,7k&?7hU7t}7!7x]7Os7 nmL7`i7AdV?S8N.RS89fS8J{S8CS8"귪S8ǡ7S83mnS8]:wT8H m T8lBT8fT8鷚T8}X鷼T81T8 \ U89U8#jU8G˝U83U8k V8P-CV8+7跅~V8/V8@V8R8:>8l =8!o~=8⵷R&=8Ws<8ʹ><8D2<8꼳';85;8\;8( ;8H:8[:8Rj:8v4:8ŋ:8q98.{98:r98QdvE98լV98D8888ls88`{k88%۩S>88~688*L78ާ78p*(p78Lp378C68餷68^68J 68p58ƏL58ͧ48Lwn48lĞ38~ȝ*l38Ŝ28YD28g18N08}`=08y^{/8c:ް.87-8O哷,8,8U#+8O)*89]')8O獷0(8}'8%%8S$8'9#8h"8߆9!8Ņc 8;|H8֩180 8㸁8,Ԁ88iq~68}^8{8z8y88Py]89uxx%8 xx8wY8w 8jw8?w8w/xW8}x|8kx}8dyk8 z8zp8{O8,t|f8H} 8~"8~78 N8Pf8d8xk88h^8N"8׀8p ~8 p8mk8F,p8(8oݖ8Y8 8%~N8|~8]c>8Z8ڬA]8YUR8~&C83~t086}h8h|8{8 {8,zx8dby8x#8Pw]8lw8v815u28U%t~8M sg8Urʅ8q8q}88q8'vp8 pa8o8_oܴ8dnh8mF8͊nV8nA28k8iM8JYhv8yg8f#8{fs8AfjO8 ea8.eN8ed?8c[?8b?8a-8E`8_88}^7u8X][8D\]8G[8LZ8i9Yr8 Xo8V{!8GU-$8IU%8]QU &8U %8Vu%8W9$81XYh#8Za"8O[:'"8\!8^]!8_!8j`t!8aa!88cR"8dX"8=ep"8Zgd#8ghj#8}ix#8fi#8jܷ#8\k3#8lv!#8l"8(m"8ؙmv!8,mU 86n 8CanZ8Kqnu8}dn87n8m +8rmT8l|8l8.5k8/j8 i`8gkL8Uqf]~8;eѴ8(c@8"a18T`w8^e8]8GS[q8Y8)W;8EV8T#8R 8\Q' 8OP 81CN> 8L 8UK%l 8)I 8\Hҭ 8"HGU 88FD 8lD 8^Cc 8}Bc 8dA8U@85O?I8P>482Z=8mj<8;QH8o:{8,98888C8>7n8p6855p8|4$848M382k18180w880!8#r/8.j\8-`8.-8YC,l8o+8*@8)a7((7'7 '7&7%7 $g'7t#a@7"Y\7 {7A2777f&7`0Ea777ek-S7 &7M 47فt7|->7)7}7)n27 7 71 "7q770a7) 7"7(2j7}!7L$7I7Z71ԣ7B=7/b737LA77d75|7cA77`#7lM7 5X377e]V7p 797춲 7Zn춦74K춪7X*d=7 d}777Y7tI7WE{777궛7gw7=o}7鶐L7鶊&757&7=?)Y7l|7Mw綕7SV7r7{u7½趬7d7˱77r7[A7ēL\77 i޶[7ڶXp7`׶|7ֶ7lҶ7϶$7Gʶ7Eʶ[d7XѶq7L׶RU7!׶ 7q׶\7O۶7lrֶ07նf7bԶ|v7Զ_7Ӷy7-Ӷa7 ԶH7PѶ}7϶r7Ͷ7˶.7ɶe7(cȶz 7Ƕm7.ĶL7𿶘7к77î7Ϡ7碶7߽^7 l7G7F9AJ7Ѿ7U{¸7>a0`7-g%7x7w} 7x"7r&7 m77oh7 vcW8W}SW8deW8JN緱W87X8("緺QX8 X80.X8{jY8SdY8+Y81Y8qr9Z8tހZ8[Z8@淸[8#淯T[8淩[8b[8<巚\8ԗ&`\82m巑\8?巉\8 巿]8.I]8ؚ䷱|]8ZS]8*䷅]8㷧^8.~x$^8)C^8ⷫ^^8WpPu^8 ⷖ^8բ᷉^84^8^8rJු^8߷Ƞ^8cO߷^8޷^8 G޷?{^8;ݷf^8Z4ݷL^8ܷ.^8 ܷ ^8Њ۷]8ڷ3]8jڷt]8lٷZ]8aJٷ#]8طT\85+ط\8ڜ׷he\8׷\8Wַ[8\շ.[8qշ.[8kԷUZ8dԷ|Z8CӷZ8_ӷ{Y8ҷTY88aҷX8ѷoX8OhѷX8зW8Jtз+W8ϷV8Ϸ C8I9(QC8ţfB8INB8yA8康VA8aR @8鿹5l@8?.?8mQ?8 $?8>8񶷵\>8e =8ڵӢ=8bP6K=8YǴJ<8?<8帳8Z<8,3<8T;8m);86 G;8}! ;8:8b:8DOb:8@.:8$98Q98zv98﬷zs98(bF98ѫ98>8888 88Om g88ɨH688K!88sW78q784S78G@7868Ux68n墷Q#68 A58,a58E48yX48d 48wjK|38\i|28apS28KT°18A18(UM08L /8長,.8ÔO-8S0-8m.,8?u@+8I*8ݎ'8SQ /&8s&%8%$8܇}"8"!8( 88˚8;8;8<Ӏc8O87~"8#}O8{68z8y8(y]O8x8%xc8bw8w+8wz8ewL8'x,8qx@8x8By80y]+8z>8<{V8\|p8|8 }ӟ8O~`888:=8l~ 8_h8¶!8(89 #8 8lo8Q"8-8 z!8-78-6T8K~~w8~ٝ8~k8~8+~H8~8}8T}8͗|m81{K8{ˁ8yzk8,yW8U yW=8!:x%8yw.8v98uw8t8 ti8;sg8Ўr8%rg8Iqb8p"Y8DpF8o38 oO8cnJ8>m8xl8m8Ol68j8i8}gq88;%eS8f3d8Rc8zbR8a8*`8_"G8i^i8ZM]8>\8>[8?'Z?8 X8LW8UUС#8S9&8+*SX(89Ses(8S'8aU &8WV%8Wy$8k(Y^#8͉Z`"8[m"88]+"8^ "82`)"8~a$["8vc"85d #8eN|#8-f#8Wg c$8hb$8i$8Noj[$8)3kZ$8k,$8 l#86m"#8ym#^"8%n>!8xn 8n2 8nHl8%n8nH8Un8dm8iDm@8ml d8k8kjf8Wi8T h_8f18)ef8:c8a&8W`m'8^!t8q\84[9"8zYN8W8V_8^T8RY8Q 8}Oj 8M 8xL 8Ku, 8ȢI 8pJH r 8GF| 8E 8Dy 86`C^. 8AB 8{-A 8"@\ 8 !? 8w'>8g5=ڛ8+J<*]8e;8Dž:89ǟ88^88857H8j6ב8 5H8 4848P3[82681 81KP8B08w}/-8l. %8-ƺ8 -M8-Q,8}+k8 *8)8 ( 8('$7^',17&R=7%%I7#$W7#f7 "y7] m7)7:7~7pH70  K7P7}]7.'7O7b7@)u77j7[27 7F <71 U}7 b78W7 _70x7^7%73*77u7_h7kcJ7J71u+77\70O7 77ݯ7 7ER7W}7Z7!>7d붒T7붩7AѠ7C27@7#7궺7J7x= 7o궤67vR7adb7Hf7*ga7Q747WZ 7s{Q7<7{v7SY7X趩Z7܀7& 7w涆?7#-7 186> B8_/8Ǜ7v鶐T7A77t[72M77:$~^7 ݶ$7۶7^dٶ7aֶk7 <ն4 76Ӷ7XҶV7g׶/7ݶb7g۶7ض7ض37sֶ7>Զ7VҶ 7 Ӷ7[ն7Fնd7<Զw7Ӷ7HҶ7@ж%7E"ζ#Y76a̶ۺ7yʶ7ȶ1U7fGŶ87Y&7F7{7с^7Cz7 717@}7ŧ7r7Pi27$7Ɣ7۞77]7r}e7Yw7(Vrv7l7go7bnT8<~T8ɎT8귤T8CT8귺T8*T8mT8b鷸U8.',U8DiIU8}hU8A跋U8plU8tE,U8U8緜 V8gKV8֪xV8u緵V8gV8Hv W8)緬=W8 sW8淃W8W8m淙X8k[X8[X8"t>X8\8Y8 EXY8S-jY8kY8LZ8巕aZ8DZ8巣Z8s}([8n巜i[8AM巿[8)差[88)&\8Sa\8N䷧\8z\8F䷫]8 o9]8h]8K㷘]8bIɻ]8]8ye^8Zf^8[14^8G^8gi^8h߷wl^8-߷j^8߷e^8 ޷Z^8!޷L^8Mݷ :^8ܷm#^8Isܷ^8۷]8\۷g]8Yڷ']86Aڷs]8ٷPD]8$ٷ]8طI\8!طɝ\8y׷T^\8ַ\8_ַ<[8Fշ[8Kշ8[8ԷZ8<ԷZ8ӷ5Z8-4ӷY8kҷvY8G2ҷY8zѷX85ѷ|AX8зW8c>зqeW8FϷV8KϷV8fηr V8IZηMU8~ͷUU8jͷT85̷T8k{̷S8U̷mS8˷R8˷R8՗ʷKQ8ʷQ8ɷP8$ɷ!P8 ȷyO8&ȷN8ƥǷcN8U#ǷM8[ƷKM8ƷzL8DŷB/L8 ŷjK8(ķK8÷3J8i÷PI8·uaI8K·H8˻OBH8*PG8j%G8F8 rG F8޾QE8ID8ToD8G!C8$fC8)B8e.fB8xҺ`A8&@qA8@8 @@8L@8m?8q1E?8嶷g>8Y:>8ϵ!>8FN=8ؾp=87=8;E<8-]<89<8 ';8i;8-"Tr;8Y5;8\:8㜯:8y:8\:8+:8o98{98r{A98O﫷]t98_`G98-Ϊ98T88888h88]]88(88 _78W]78s78Sᤷ.78%z68R68#<68p58ˠw589柷 58S48@48fa38 28h d28!18m혷18ח_08|/8圕=.8yB.8_S|--8*J,8_+8яem*8t)8xt(8Lp'8#f&83\Z%8ZڈK$8/:#8\)"8ŕ!8΍g 8F 8U898Ԁ8468~\8<}8|8oz$8 z8Hy8Axfx89x 8 w8+wa8Fwr"8w&8xl8Ux8ªx8dy8ӓy8j+z8z 8DŽ{^87|k 8|8u}x18P~C8"~NW8Sk8"8a1D8H۞8L8C8#:8,-ܪ88808MS8~8~ 89o~{*8-T~4E8u>~WW8@~^8}>\8b9}S8|,E8{A48={"8 z8y 8GyB8Ԗx8w8.wp8Yv8uPb8tK8t:8cGs48wr&/8q8]q8pf8dp28oi8 n^8m8%l8qk389k8I7k 89jm8j8֞h(8=g%8&fN8Hf8'ft8re8e8c[8 cѤ8AIbs8(vaP8F`vx8h_8^w8?t]^8Mm\v8ol[w8=Zv8jXm8V8^[T@%8Qo)8P.*8PM*8Q4)8moS'8! UNf&8V$%8EXS$8gY]#81[$"8F\ϙ"8>^"8h_"8Ya"8br0#8pd\#8޴e)$8f$8gK%8nchw%8C)i%8Si%8"jt%8vk#%8elg$8m#8m.#8C8nGx"8n=!8n 8!o$4 86oVe84nY8ޯnO8;n8Rm8}lu8k88jQ[8i87h8f8=e 8^cF81aQ8E`8^8\m8[/8s?Yy,8IW8U 8 TK8f_R 8cPӐ8#O8 M 8?LnI 8J) 8JGIʼn 8G0 8F4 8LkEq 8 ;DY> 8C 8KA! 8@Kj 8?( 8X> 8H=v 8 =l 8&÷fJ8ޱ·oI8$·|dI8H8IH8VvG8'忷X/G8GSF8F8..ϏE8< E8=D8VuC8⻷{C84PB8*~B8,hB8A8d zA8}@8ﷷ8@8b?8ֶif?8NL?8õ>8;E>8!=8+.̖=8OD=8%=<8//<8!Uc<8<8;8 ;8fb;8T);8:8:8c:8|Y:8&*:89898}š98d覆t98y^G98ɩ98A188Vp8888LN88k88R278G9!783|SN788?78268 3W68RJ58l58򈟷 5848$*4838y38еxx28;18'&*18u08vp޶/8S'.8w3!.8I-8ꑷi,8f+8ؘ*8:o)8TF(8x'8&8k׉%8Ѹ$8"#8ό~"8w!8z~Es 8񃃷t8;{8񭁷o8Հ\89 \88~q8R}%%8!|l8{>8(z%8ddy8$x8Ix8wXT8w8wW8wS8 wl88+xR8xxxD8QxMB8GyG8[y$S8bzb8{yu8ͣ{08=F|j8|18}:8~8~8yH83i 8z8޴~-8y68;8S@8hlF8eO8$]8l~Ap82~_82~Ԟ8}38}O8}8E}8R|M8l|8{H8<{-8z߱8Ay%8Sy8 x8 xm8`wDX8vW>8Su3%8@=u 8)t8s8s8; 8t=lv 8<@: 8;L 8]%;. 8O: 8~9G 88 8z718 78)[6N?895]8484Y8X3C8h281O818/Z0[8/ 8.8# .xB8H@-8q,W8Ϟ+86*a8N)8)b8("8.'d^87&F79%ۯ72$7##7 "_7C i7w77gY7]7cM 7jx 87Xp77Xr7s7}7 v]77 X7Q @17s- 7 77G77tˢ777,p07.7p7n`7i7Qb7X.77񶔧7Z8䷴wZ8-Z8~n䷊Z8L䷋#[8)\[8䷬[8b[8ϴ[84\8@Z㷎f\8(-\8ⷜ\8ⷙ\8j]8?KA]8d]8UH]8eG]8ᷓ]8]8Td෫]8 w]8߷]8:߷^8B޷^8F^޷^8Bݷ]8rݷ$]8ܷK]8yܷ]8G۷ɻ]8Hv۷]8$ڷ]8.jڷb]8ٷ=]8Wٷy]8طr\8Aط\8L׷\8*׷I\8ַ \8ַ[8ˈշŊ[8ԷC[8uԷ`Z84ӷZ8[gӷsZZ8ҷZ8\ҷ2Y8ѷ@SY8>XѷJX8зiX8Xз0X8ϷW8]ϷaW8ηV8fηV8"ͷV8WrͷwU8̷5U8̷ƿT8̷HT8˷kS8˷eVS8ʷR8!ʷ]R8ɷTQ8,ɷ_Q8Ӱȷ|P84ȷ/\P8QǷO87Ƿ(TO8Ʒ_N8w6ƷpGN8ʳŷM8/ŷ6M8ķqL8$ķI#L8Y÷fK8.÷ K8·J8I8phI8]H8S'QH86ĿG83;G8F8+(F8-E8siE8\D8/˻tD89C8𨺷C8pB8B8fA8k46A8޷@8nRX@8KǶ?8S=?8 &?8g->8`7k>8e">8k=8l=8𙲷6=8l<8Й<8I<8 <8;8;8! W;8, ;8*$(:8:8":8`Y:8d+:8K98; 98~98e勺s98\D98Ĩ98)88숧88䦷Uu889$:88782Ԥ^78fn78VW!7868Zs68렷68&*58-(958D48GVA48` 38ie(38c28\o18O*A18>08' /8 /8c=.8ϒh-8ދ,8+8b*8<)8(80'8Ҋ<&8}%8I$8#8vR"8(o!8\p 87z\8h828S׀82E8 ~'w8d}86|T8){[8?z8Lyy>88x88TxQ8ww82wk8awf8{wR28 w 8w88x?8x8xb8^ey8My8vz8{ 8Y{M8,|28ɸ|SD8=}V8}h8~5{8:i~88~|8ڽ~8X~8~8~68~?8~$8s~8|0~8a}8}O08UO}GD8X }_U8||a8t|g8|g8 {b8{{Y8 z\M8y?8Hy08qx !8x<8+qw8v8q'v8xu8tN8t@8#lsl80rXX8uq68Mq8p8%p8wo&89n8$2n8mq8"l 98.k8?.k?8GjXd8j8i8th8+g{8V4g 8AfK8`f8~eC8d8c\8b84b=8panB8` 8 `w8_8^8]8F&\G8sZW8PY8V8%]S%8-L*8 ?L*8{M=*8DHO,(8qBQ '8N:S&8*U$8V$8a[Xe#8Y'#8y[o"8-3]#8N_W<#8`#8̿b#8%8ef&8ff'8g3(8bh(8\il'8dj&8gk%8"Xld)%8,mw$8m3#8qn#8n`"89(o!8:HoJ 8;o8In8}nP-8m(E8!m\8O$lu8j%8i8DhB8Ef8e58PjcMn8la8s_8 ^C82\ 8[Z8aX_8hVW8ToG8/S8yQO8OZ85Np8L 8I,K8IpJ8`H 8:GO 8iEM 8D 8-}C 8BfBs 80[A:2 8Z@ 8 d? 8u>y 8V=> 8<* 8; 8;d 81:VT 8e9D 8-8 8]7 87X 8R6 8^58x44~84<-8T\38 2}8K18%18Xf0T87/-8.=x8&.u8FQ- 8,B8G+_8*8F)8d)& 80(݅8#@'8G&v8kG%7>$7R-#7"7 757I7nL 747i7DV7|67Mv77M#7+I7Ĭ7,+7 y7-$ 7 7 Q727')(7s27JP7r7_7ˈI7 87B7_J7\7b;717O٭7ﶨz7FDS7b678~$7.7 _7t3趜77w7涋7Ff/7|涑7l71o7888$,8"d8$8 涟8KA涗8\c8涆8I涮878%涗8H8|sg8M0E8[)8LE8uX 8O 8҈^838~Y88O8බI8i~8߶8tන8˦8䶥077> 7-7 7Hg߶j7Hܶ$7L׶7/ض 7Dնؑ7kӶ79϶f77RжY7:ѶI7Ӷ7Ҷ+7Ӷj7dӶˢ7&Ҷ7Ͷm7ζ7\ͶQp7ζu7ށѶ7wӶ#7Զ7~ն=17ն7uնi7Ҷ,07$ζ $7gMʶ 7eŶ7,77B7r˯7t7Q7m8m7AΛN7qa'7S7n7뺋72K;7Є7N7D|S77|v7.pg7(k7Be79'`4V8>V8鷼IV8PUV8LcV8'rV8*V87X跨V8跀V8FV8 V8x緂V8DW8緐W8+ 9W8!WW8vW8Y淐W8X/λW8{淜W8X8.X8WqXX8\o巌X8qLX8p*X8" Y8Sݷ]8=!ݷ]8Ǫܷ9]8%1ܷ]8۷]85۷]87ڷd]80ڷE]8Wٷ"]8l$ٷ\83ط\8طä\8e׷As\8gַ6>\8?uַ\8շe[8`շ[8%ԷF[8?NԷZ8OӷZ8N?ӷhZ8"ҷqZ83ҷY8ïѷRnY8-ѷY8з:X8[+зXX8)ϷW8-ϷW8η+W8`4ηV8ͷWV8,>ͷlU8̷{U8J̷ U8˷T8W˷u"T8ʷJS8dʷ4S87ɷER8 pɷ@R8Rȷ]Q8yȷFQ8Ƿ P8xǷGP8yǷO8ƷGDO8sƷN8 ŷ;N8Rķ M8T{ķm/M80÷L8o÷L8\·K8_·f K8cjJ8"JEI8oI80H8墿ZH80TG8ЄPHG8F8d8F8!ԼE8CU.E8xD8"p*D8풺bC8kr.C8ftB8渷0J?8ؘ>8>8:>8=8H=8~I=8s=8¹<8`v<85<80;8;8ȅ;8 'O;8;8P+:8[:8_*:8AqZ:8!V,:8498!98쀩ݠ98p98X?98& 98888|588Fӥ`88$ 88=p78˵*78yB78ApUx8#oPZ8>ne:8]n8mw8Rm8Zl8k8t1k=8(j8j8mi8aen8dP8cy8,b8a8La98c`8?M`!8qJ_T8?@^p8N]8q\I8AZ[Y8Y8WG8)aS!8N#&&8+XM'8M#'8L^OJ '8Q%89RE$8T$8BV Z#8W"8PY"8)Z"8\r^"u#8`#8bE8$8Hd$8>e&o%8veO&8je~O'8(fX(8zfa)8ڌg](8Xh(8Si'8djE&8k %8~l$8km O$83n`#8n"8nh?"8oup!8o 8n8n8sm8m&8lo8-jp85iY78h[8fQ8d8$c8Wa(/8o_ w8o]*8[8Y8 XL80V\8bT8R[8P8:OCx8M?8L8ҘJL8.IE8zGD8FJ8SEF 8A*D% 8Cn 8B- 8@ 88@ 8?u 83>; 8^T= 8|< 8f; 8|:8Y 8: 8K9 8u8ܩ 8I7k 8C7p* 8J6 8d5D 84WP 848^`3@8\2L81^8/1%8r078k/8O.;8>+.8b-I8,8+H8*8*<8.)8&E((8S'8aZ&8X%8M$79#7{"7R Զ7+7Ԉj7OCI7 7Yճ77177Y,7Cv7Ha7,7QF7-7>5 {7 T7 I 7gH77tv77H7#77O\L7Y77)7/I97/S7𶣞76g7HT?7ߧk$7-7趄7ڵ,77L(7{)-7؛,75䶶'7908}㶛88#S8p㶮88.''8^2T8$v8䶧8{808^ɇ8o~;n8wK8q#8588D䶤8֪8Hj82ⶠ88J@8~H88O"84[߶2`8S޶8=5ݶA8ܶ8Bݶ8 ޶JK7޶7P-߶/7߶73G8~:ܶz8=ڶ*8ֶ8 ն7Ҷd7Ҷo7 ϶76϶75?϶7Fж7+,ж7϶)7+!Ѷ 7nѶs7\϶U7C̶[7'̶7(oͶ/7sζ7϶X7W$ж7.Ѷa7hѶ7i{Ѷ7{϶'7<̶E$7/ȶ7ö7{)7X7$OB74!7W 7P7Ce79x7iS7UO/(7f7⫋P7Av7ګ+7^7\|70v 7p3pk7`j7P7ud71_V8Bq V8v-6V8jV8OV8Bi跒V8*跒 W8uW8|-W8ow~?W8>SW84hW8~W8W8k淪W8:W8" W8.WX8u'X8 IX8[lX8I3川X8 川X8iX8Y80Y8w[Y8\TY8v1FY8sY8ZZ8)AZ8x㷪qZ8PѡZ8`HZ8;㷿[8^3[8c[8A_[8F[8Yqⷫ[87C:\8oF\8"p\8\8p\84᷃\8^ෞ]8-!]8 k=]8` +V]8߷l]8߷~]8(߷]8޷E]8Vn޷q]8; ޷]8tݷ]89ݷi]8ܷ]8uYܷۓ]8۷]8k۷t]8ڷo_]8rڷF]8ٷ)]8pٷ ]8&ط\8gط\8$׷\8Y׷d\8bַ2\8Hַf[8 շs[87շ[83ԷsH[8%Էt[8םӷ.Z8ӷuZ8ҷ')Z8. ҷY8ѷ Y8ѷ1Y8з;X8VϷ/~X8GϷ X8%ϷUW8η]W8|ηV8ͷV8M ͷ(V8@̷U8̷cPU8x˷tT8}"˷pT8ʷ}S8.ʷS8ɷS8s:ɷ+R8ȷ%R8Dȷ˫Q8Ƿ0Q8ULǷP8Ʒ6P8PƷO8ŷ6O8EQŷN8ķv2N8 MķM8÷*M8 D÷L8·L86·K8K8b$݇J8I8 2wI8yH8AfH8OfG8׽WG8HF8jKF8* E8DE8f D8h|7CD8C8_JC8 ҸB8;EZB8aA8.:vA8ݤkA8*@8~5@8?8@q?8v%?8,]>8c>8ԁ>8K=8Pu=8C,=8k<8X<8d<8_'<8٠;8T&ε;8m;8/-L;8;84':82:83:8\:8@)-:8ӟ98V98s98:l98T798H98 88m88eF88O V88JT 78nd78С[78z683M68S[58K|p58248Cv48𺛷x38Ú0\38sƙ28Ød!28sw18v(08 08H/8Cr.8WL-89;,87+8]#+8jߍ%-*8c?)8&N(8f['8tEe&8ahn%8TIw$8L#8$MH"8Uc!8 gw 8ȁ-8򦁷O8׀8I8 ~8z}8O|i"8C{88Wz8)yj8{x8Rx8Ww)-8ǐw8\w8Ewf8KwM;8iwf8kw8w8 x8yx8x 8wKy8y84z$8Yz68e{I8m~{\8a{p8(|8g|8|Z8|8|\8?|8|683|8|8I|8Ё|h08hE|A8|LQ8u{ `8i{Fl8{ u8zy8iVzz8yfv8Ckyo8xd8 ^xX8w~I8>w6985vE'8Dv8}u@8t28fFt8@sf8;s8[erXy81qvY8q68(mp8Co8>&o8n¢8imr8NmVn8m W8ll0W8Pk=8v!k8jc8i8>i8hNN8g-8$gm-8Yxf[G8#eS80ek8edd8°cY8bN8!#bT8Hai8$`^8D`87_;80^8E]R8Ʌ\n8[8Q?Z8Wb85qT87Q!8R|O"#8pgOAw$8:PK$8Q#8R+#8qTO"8eUd"8PWW"8AX}"8Z"8wp\#B#8*^Գ#8j`$8b$8<~dO$8 xe%8e&8Bet'8e(8f*8g^})8g7(8h4'8jbh&8k%8uk@%84l$8tm2$8Pn#8lng"8nn"8n(!8եn/> 8KMnN8m[8ylJj8k{8Tje8\i׬8g8F=f8d(8ba8&`ߢ8u_f8]>8F2[|8JYp8,hW{j8+U88S}_8Q8D9Pu82NN 88L:8iKF8cIu8]H08z:GV@8_E8QD 8RCUb8BQ 8Ab 8@ 8?Qj 8 >11 8=4 8= 8E< 8Gz;U 8<:; 89F 8.9 8p8u 87 9 8$6 8A6 805l 84 84 8c3.v 82 81881P8|08پ/s8.8';.;8!t-m8,8+8D+mr8'*8E)jY8S[(L8i'98Oo&ۨ81l%8_$8I#7J)"7 7e747>q7y7}7e7Mӫ7-A77wj7 b7s/7,`%7 67% 7 7FP7U.7."7`6+7 J77}777V(7D"7,7'7}7h?7$77Eq7綺7qY7J7Nh7{㶽57IJ7;S8[738 8;48xҧ8F8ᶄe81|8Woy8878JL8Д2U8gN8_䶡98/@䶞8MM82;8㶞8d㶂[83A8!ᶬ88 ?8|J8Y߶lN8`߶wA8߶K(8s߶p 8߶8G߶8p޶V8XܶR8q۶k8ڶ08@ٶ72ٶ7ٶ|7ٶm67۶= 8 C۶8 \׶8N%նv8Ӷ7lҶ|C7Ѷ,B7>϶IP7)Ͷ75̶7˶97˶C7̶J7̶z7fʶ7ZǶ7ĶB7 Ķ7hkǶ*7!ȶ7Sȶ7Zɶ<7˶7 ̶7"̶ 7(ʶ7oȶ78Ŷ7 787ѷ72ﲶ7*7'97gH7Ο%7a΢7#7CY76/n)74s#7܇c7-h?m77@{7su^q7bo7~|i7+c?7&^bW8YiW8{跣pW8yW8BpW8hW8fW8 W8EjW8 "W8FCW8uW8:_W8{)pX80X(X8>@X8Ő巼ZX8`8vX8?27X8州X8QX8+mX8[Y8[8Y83^Y8 JY8㷊Y8Y8=Y8$v'Z8,QQZ8#,,}Z8˨Z8 ⷻZ8[8z,[8MkX[8Ak[8k[8ᷣ[8_\8(+\8)YR\8#yw\8 /\8g\8sෑ\8x2\8߷y]8u߷,]8Y߷.B]8o ߷T]8G޷c]8`޷o]8޷x]8Vݷ}]8fBݷ]8ܷv~]8qܷiy]85ܷp]8۷d]8۷T]8cڷA]8y-ڷ*]8!ٷO]82ٷ`\8ط\8/ط\8֫׷\8&׷W\8ַs(\8ַ[8շѿ[8F շ[8Է+J[8ӷ [8tӷZ8ҷZ8gҷ8Z8WѷY8]ѷY8з|LY8VзX8ϷX8SϷlGX8ηHW8TηW8ͷ+W8+YͷV8̷cV8`̷U8q˷U8j˷(U8ʷѻT8uʷZMT8ɷFS8_ɷkS8ɷTR8eȷR8uȷY R8ǷQ8ǷQ8Ʒ4P8RƷ&P8ݠŷO8!ŷe+O8/ķN8ķb+N8÷M8÷ 'M8·L8(·aL8 SK8K8uyJ8I뿷J8&`zI8HԾH8GtH8fG8,hG8ƞF8v_F85E8[E8eD8׹]D8yJC8gC8k1B8zB8iB8eA8< N,A8)@8%\@8lx ?8v?8DsV=?8򲷂>8^s>8<>8w=8Ӣ=8倰Z=8=8Z<8"<8(FX<8_"<8F;8R0;8J)~;8 ;K;8A;8y@:8e:8>:8^:81m/:898|98:F98릷d98O,98Q88M88\"o88Oo'8878u6J78Os178ߩ68ٟn68!68%~58B58Y(48vj 48Nu8z38wz28Az@28tŖ18kv08]s,088P\,8wK\r8H[8hZ8cX>8UU8%/Sy8Q8!Q\ 8M`Q8!8C&R&8wg18eZ8d81b8N`A8Zc^T8r\8Zb84Xo8*V+8TuZ8R8..QIi8isO8|MW80LT58J819IՀ8:G'-8АF 8dYE83DM8Cl 8B8A82@kV8N?8t> 8= 8*e8\)80s(9j8E'T8&j?8^%8qt$8A\#`}8r9"R7 !$7SNj7nn7<W7yG7xCA7T4G7A\7݂7vZ77UE7U7ַ7N +7S 7* K7XY7T$777t$7o7y767i7#7L{󶳪7k0O7%7on*7fЫ7[7 7`O87㶵7 7ᶈ7E57Er[7?8<߶86߶\8߶+8>߶Z8߶8 84Q'j888dm8/ 8/88A8N8U8@88Y8$ᶴ8t߶58޶c8uݶ]8.ݶ8GݶH8޶i8߶r8߶8w8tE8f ?-8?B8ڶ82mӶF7Ҷ'D7/'Զ7Զt7Զ97j]Ӷ8Ҷ80ӶK8ۍҶ_8Wж57,Ͷ 7˶7%]ʶf.7)ʶU7 ɶ7GgȶMJ7Iȶ7ȶ7HǶ;7RŶX7ö7Lö7gNĶ77(¶7yY7u¶S7W%Ķ7Ŷf 7Eƶ7ŶV7 Ķ7`7h7. 7T 7b7 77x 7'7K7ʚ7Ĥ7d7DɎ`7k-7{77Li7z7HtX7lnh7 wh7bϡ7]W8ԫ跳W8eX8f 跄 X8]X8緧X89Xc$X8)Q/X8je;X8HX8_淂WX8%淥gX80yX8X8~-X8IȵX8X8OX8.X8ZY8aV6Y8:)䷛TY8 㷼sY8Y8㷣Y8~'Y8U㷧Y8f- Z8hPEZ8kkZ883Z8YZ8fZ8e>ⷆ[8mg0[8GX[8[8!2[8g[89[8l\8<\8Ѡ෇_\8~iʀ\8/c\8>߷*\8Ƴ߷\8q߷6\8*߷8 ]8z޷]8޷0]8D޷?]8ݷL]8ݷT]8\=ݷZ]8ܷ@]]86{ܷ\]8 ܷX]8n۷aQ]8b>۷F]8ڷW8]8Zڷ&]8]ٷ]8kٷ2\8}طK\86sط\8׷<\8 s׷.u\8ַK\8lַ/\8Vշ=[8bշ[8*Է[8 WԷ3L[8ӷ[8$Jӷ Z8ҷiZ8">ҷGZ8ѷZY8{4ѷY8з&fY80-зhY8Ϸ+X8-)ϷTlX8η X8)η\W8Cͷp\W8&,ͷGV8ɮ̷V8,2̷8V8=˷U8:˷lU8пʷU8EʷT8ɷ,T8PɷS8ȷ^OS8Zȷ[R8ǷkR8dǷQ8ƷAQ8lƷ[ Q8ŷP8qŷP8!ķO8sķ"O8>÷?N8q÷&N8·M8'k·l&M8[L8`"L8K8QK8ɿdJ8/?J8I8L)F I8iH8.H8 @|G8F8nivF8ۺxE8NuE8KD85zD8C8f-C8C8B8+B8A8q RA8봷@8.g&@8䳷#"@8nb?8Dⲷmh?8xc?8屷ǻ>81ijj>8>8vs=8V=8F=8L (=8Βw<8<8xEQ<8S-H<8/;8M=;8ë;8HN;80̪;8M:8̩:81IO:8¨Ca:88G0:8 98598U98`襷(Z98I98p887D88!JaP88&88lء78AW78+O568ـn68꫞%68Нy58hC858$48fZ,48~(38/3882sa28/18@(18P08 /8.8瑷.8ѐ.-8dwV,88y+8Ɉ}*8xq)8 \(8,I'8p9&8-(&8&%8%o.$8,E#8:!a"8QX!8q 8&8iрD8'B8T~8z}8lO|[48@{8JOz8{y8Ix@8".x8SwV8%Nw]8jw8vu8cva8v>8v%8v8D/wH 8lwQ 8Ҵwp 8x8A]x8+xa.8yn?8#jybR8Yyf8zE{85eg8jd\8cT8RcN8UbN898bXj8Sqa#8`8`8M^8݂]d8\:M8[t?8KZ 8YUo8ziX8nV48aT8VST8R^|8nRF78RK8qtS8([Tz8iU 8ܝV 8X.!8ϯY"8 [@#8]$8y+`=%8b%8sd%86f%8,g&8g>~(8j(8Ch")8=hO(8oh'8(h&8h'&88i%8iAj%8k}u%8/k %8Bl2$8l7#8]ma #8m>"8m#!8؛m& 8"mk*8]lD08Rk:8& jJ8Wh_b8fH85e)8bc`8&a!8_^8]8[8dYi8W\8]U=K8lSr8ERR8lLP8N!{8iLV8VKu8\Ic8LmH8Gf8Eu8D/80C8sB 8A>s8@98?8M>89>884P=b8<08; 8_; 8\:ܝ 8u9k 887 8)A8] 8k7 8-6ډ 8-6G 8{5 84 84a 8Sd3 8`2 81G 8E1s 8c0*m 8;/8/z8Z.}8-Js8,,8B,Z8C0+8V*n68~u)8g(8'n8&8К%X88$8q#8L"&h8!47 t7xpL7p?*77nW7<7:n7$7eFT76ő7H7P67F Ѣ7 r"7+ 7sa79?#7 <7Zx77P7 OJ7ǚ777W:7 7V|7M7綻57q涴27WA7e_7-v,7tQ7]߶7޶L'7!޶E08ݶu8pݶf8W_ݶ`86iݶX8]ݶ6 8Kݶx8!޶8Ti޶$8޶b8^߶v8߶8^~88?<_8 68XY828z87|o818S߶+8Q޶8ܶn08P۶Z8}ڶo]8ſڶ 8$ܶB8(޶m8߶^88ݻ8US8&M<8ڶ8e϶7̟ͶYI7 ζN.74Sζ7̶ 8\̶8ζ8PζQ#83϶O@8pͶz179ʶ7ȶn7Ƕ 74Ͷ7z϶{`7ɶ7@Ƕ97A]ƶ97ƶ7Ŷ7ön7öԾ7¶7쥻u7߹$B7*^7g4R7"k=7$,7777_787N^{7@-#7$7\c"7X`~7"7S27񕶫7V-777~k757ց7}'87Ayj7wsE7Nm7Ngg7#ta7[=X8II X8跤X8\X8 v緰X81?X8)X8淗X8km{X8s.淒X8X8巙X8y巊X8@巺Y8+Y8*Y8?Y8h䷨TY85ukY8_䷂Y8Y83Y8\8t߷\86߷\8z޷\8H޷4\8i޷]86޷]8nݷE"]8nݷ#.]8+ݷ7]8ܷ=]8wܷ?]8mܷ?]8۷<]8O۷O6]8ڷ,]8$zڷ]8{ ڷm]8ٷ\8"ٷ(\8ط\81ط\8 ׷\87׷(i\8ַB\8r6ַ\8շK[80շ[8ӬԷ[8O(Է8O[8qӷ}[8JӷZ8ҷHZ8ҷVZ8ѷZ8 ѷY8DзY8з1Y8oϷX8ηX8~η=;X8mͷNW8.ͷW8ͷ/W8̷:V8o̷rV8˷iV8 ˷1U8qʷ IU8Vʷ.T8~ɷyT8 ɷZT8ȷS8b+ȷ,6S8ǷKR8b5ǷVR8ƷQ8 >ƷqQ8{ŷP84DŷĆP8*ķLP8mGķO8÷O8jG÷JN8·$N8,C·M8vf(M8:L8K~(L8.IK87T%K8բJ8C J8( I8uI85 H8oiNH8MݻG8PfG8jĺF87F8E8E8.D89 D D8~C8M3C8l=B8嵷fQB8^UA8ٴzA8{UA8ҳ@@8QIM@8Ѳ?8wR?8Pձ>?8PY>8cް>8d M>8쯷W>8tԼ=83y=8H8=8*<8<8&'<8O<8;#<8ī;8L;8eӪ;8RXS;8C۩$;8[:8٨7:8T:8Ņb:8 @/:89898Ɂf98㤷K98@ 98,J88颷J{88K5,889{78e~78j78(Q68UJ68|58X;\5848͚O48ܙ38昷%38l뗷28>떷18敷.18 ޔ x08ѓҺ/8’/.8Q]-.8𝐷]-8UD,8t+8^*8J)88T )8("(8c*;'8S&8^k%8$8q#8+"8AE!8g!8kB 8ʀXz8 8*~8q}Y8E|+84{O"8'@z̗8gy8x8qxK@8؊wR8w?8vU8Sv8"pv8ev28mvDz8v+8zvk8Ov68wC8I[w8Dw8Zw8PBx38x8xs8y8BGyO8qy,8#yB8KyhX8yzn8Cy:8yM8y8jy8͛y,8{yk8aPy]8y8&x8x@8Ex8 w!8w 83w8qv8Zv 8u8hu8t83btG8zs8Ns8_rPw87rZ8ԫq<8q8Tp8o}8kos8n%87Dne8m=8%mR8ld8%l 8رkC8^8k8j8R%j8Ki8lhm8rDh]8gTK8f,78Dq8=>8y8,޶8d߶,8jp8m<8q88,88$߶t8޶4@8#ݶ98۶g8ض83׶8׶B8Siٶˡ8y`ܶ%8Z޶78D8f'|8/Y趞n8Ʌ趑'8 )ֶ8ɶN7rɶ$77xʶV7ȶ@7Y=ǶV7x5ȶ*7Sȶ17(Ŷ57uȶt7Օɶ^7-Ƕ7#ƶ)Y7KǶL7ζ(7hζ7Ƕ`7ƶ7*|Ŷ}>7Ķ`7övF7ö47¶7Tv7/7."787緶Ӝ71_d7=7 %7b7kƹ7`X 7\e)7氶37#<7.\C7!E7 C7b;7,77:@7o}7ى7-P!|7߂C77xD75rs7}l"7 f7`n7'`Z(Y8緎)Y82F+Y8yV-Y8w1Y8t5Y8G淑;Y8UC BY8IY8巓RY8巒\Y8DgY84tY8ʁY8䷓Y8#Z䷎Y8"Y8yY8AY8/Y8R4Z8j kZ82Z8/LZ8JⷯfZ8.cZ85Z8_Z8zᷯZ8Ӯ Z8I[8U5[8(zT[8mt[8෹[8S[8Uo[8>෰[8 \8N߷-\8@߷J\8Em߷Xf\8?4߷\8޷?\8޷ \8{޷\88޷&\8Oݷ)\8ݷ \8^ݷ ]8ݷ]8Bܷ]8iܷ%]8qܷ(]8P۷(]8T۷%]8!ڷ0 ]8oڷ~]8#ڷ ]8ٷ\8HٷO\8ط\8bطr\8׷۠\8s׷ \8;ַ `\8{ַ:\8.շ\8_}շ[8VԷj[8WzԷ+[8ӷS[8ltӷ[8ҷZ8lҷ1Z8ѷfZ8dѷw$Z8зY8]зY8Ϸ&NY8lXϷY8xηݲX87UηaX8ͷ6X8#UͷW8D̷`W8W̷W8H˷V86]˷FMV8ʷU8dʷMU8aɷ)U8?nɷ%T8Uȷ]T8}xȷnS8ǷS8؂Ƿj S8ǷR8Ʒ\ER8ƷQ8ߔŷRdQ8,ŷP8Śķ}P8ķ8P8Ν÷O8:÷O8·?N8$·%N8M8>-M8L8, /1L8녿ͱK81K8vJ8/J8cI8ټm-I80OH8Ļ +H88cG8Y*G8o!+F8ڕ-F8 ,E84E8+D8[k CD88⶷C8Y6YC8iҵB8(LRyB8'Ǵq B8hCJA8=A8h?@8cz@8@)@8ñ?8PHn?8Ͱ?8T >8uܯ>8e6>8﮷=8zܭ=8[zm=80/=8<<8f(<8s6<8«Q<8L<8J֪;8o^غ;8䩷;8Mi [;8`먷;+;8j:88秷:8<`:8qզc:8F-:8R9898H(|98ݣ9986n88b88סX8888`78e-H78ў68r68K)580L58i/58"v48Q38rL382828 GW18)08ٖ>/8]$/8|\.8k-8Zg,8G+85 +8$j+*8J)8g(8Je'8&8V%8]$8#8!#87gK"8[z!8ݯ 8€808~`~8b}L84|88!{8)zs8Lyՠ8x 08w48[w=r8Mv$8vw8Hvܪ8v^}8vaY8un>8 v,8r$vP!8Hv48vv8vW$8v$.8_+wl;8nwK8wx^8ws8t#x8Px:8sux8xj8BxS8xQ8x8Ƴx'8!xN<8NxxP8xyc8mx.u8ExS8x8#ws8w8kIw8{v8v8Gv8u8zu8\ u8tv8tb8sK8s38Fr8rU8iq.8 pW8rpס8/o8W_o\8n68 Fn8Nm8Q.m8Xl8t&l }8k_8d3k-F8j$18E5jP 8Ȫi8iY8~h8g8Z;g!8f8e8Je\8dy8Fc!Y8bK8D^b>E8a6G8Ea,R8`Y8_ >8^o8]Z8j\^8Տ[8w8Ze8LY\(8NXN8W8V8j2V\Q8Unj86T|8S€8_Sz8gSv85"T28zT8yU/8W߲ 8CxX=r"8-Z ?$8[w%8]F<'8*#`f(8XbH(8Vda0(8e?'8qf'8qSg )8dh]$+8qg7)83i=W'8g&87g%8g֒%8Ah%8i&8i%8$i\%8=j$8k#8\l"8Ol!8lה 8orl8k8v~jK83iG8Yg8NeJ8DcF8aaI8_C8]8M[\58̚YR85W8xU8ϭS8DQ8O 8I2N˼8~L_8J8GZI8Gjd8ٙF 8N]E87DƓ8%CV8j'B89AH8Z@8N?,v8>2B8|>j8K=8ƛ<8M;8H;^8Ρ:38t9'8:W988s8 8x8b7B8686 8b5 84< 84 8Y3 8+256 8h1X 8L1b 80) 8 /^r 8!3/% 8oy.7h 8=-C8,I8w.,8^+8* 8)8K(F?8'B8,&8)%>O8$8#Q8{"_8 F!8b 8|7nP[7s7`eRn74U7/DK7<U7s7*<z7z77 ?z7 _7; w7f7777*b77t72&;7H7R&72ټ7>Rk7綺47E嶷7㶽7{ r37>߶\7Ψݶ=7Kܶ}7"'۶"7w9ڶz7ٶl8ض\8ض)8ض8:ض*8ʹض8vٶT8iٶ8Kٶ88iڶq8$i۶8t3ܶ8{ܶd98ݶtK8K޶C8޶8\߶8߶8+8"8߶R8N߶81.޶"F8pܶ"8 ڶxL8/׶8 Զ@8Ӷ-8bնcY8 ضo8ض-8۶w"8[ݶ8Oݶ`N8iض7ɶR7Ŷ?97Mƶw7oǶV7Ŷ57$öX7Ŷ7nŶd7݊ŶǤ7}Ƕ876ɶ 7Kƶk7{ŶN7Ŷ7PǶ27qȶ70Ŷn7 "Ŷ/7#pĶ7fö7¶y7_a97@7B7Av5)7z~777҃ 7qYm7GA7 /(7籷7W"7?w-7Ꮁ<76jK7iZ7C f7slm7Lo7k7֗}a7oP7Hu87❌o7[n7҈7eؒ7}kX7\w72p7.jԃ7d17^@7ZXY8*Y8:Y8׿Y8tY8/cY8~Y8>Y8bY8SY88巋Y8WY8IY8XRY8.s Z8㷹Z8{?%Z8q4Z8:㷻EZ8#㷖WZ8ⷉjZ8y~Z8iⷎZ88ⷠZ8ⷣZ8szZ8Z8v> [8G8$[8>[8Y[8+u[8L෵[8[f[8A+[8:߷[8S߷[8Z߷\8)a߷z4\8+߷1N\8g޷g\8g޷~\8d޷\8IC޷\8޷\8uݷm\8I~ݷ\8M7ݷs\8aܷ\8ܷ&]8Pܷ*]8)۷]8a۷]8BO۷]8ڷA]8>ڷ]80ڷ]8ٷ\8bٷ\8"طs\8ƈطN\8ط$\8L׷\8.׷z\8ַZ\8<ַd7\8dշ!\8?Dշ[8Է[8EԷ[8!ӷ[[8Cӷh&[8ҷZ82?ҷҴZ8^ѷwZ8R9ѷ8Z8TзY83з Y8AϷ kY8W/Ϸ!Y8ηX8,ηX8ͷ7X8 ,ͷW8̷9W8r.̷:W8˷]V83˷ V8Aʷ+V89ʷU8'ɷynU8Bɷ! U8ȷT8Lȷ~ET8ǷNS8VǷwS8ƷZS8`ƷR8yŷ[7R8iŷQ8ķ{ZQ8pķP8S÷wP8!u÷xP8B·ЏO8v·O8!|N8t)N8M8nB5M8^꿷L8EeC8񴴷ڣB8@1(9B8ٮ"A8-kA8 A8/@8 O@86?8?8CcO?8˯n?8WU״>8߮l>8kR'>8b=8=8g=8-=8?.<8ѻ<8H<8/ժV<8A`$<8驷;8q;8;8?{}c;82;8z;8,:8,k:8ݥc:8L):8۵9898{ik98բ#98G*88>y88 =188G78Ct78&{ 7868֜'68[58+`)584=48yH48Wu38`28e:0281f͂18c08s\[08 ST/8WG9.89-8'+,8,8 E+8j*8p)8艷)(8ሷo'8އ&8&8煷2%8SW$8 #8:("8N!8;}e!8[ 88~A8L}|P8|ʵ8{b%8 z8*y$8cx8wR8$w8`v8=Fv5l8u48u[8/uE8u8u28u8Au68u 8ru8+v48Zavg8Bv8v8we82w8~Yw'8xw?8wV8 wn8ԩw8w&8w8Нw+8w8{w8~^w87wV8w$8vi08vG98Lv>8v@86u?8LZut98^t@08|t#8+t8Ss8NCs8r78YIr8qq8Gq8p5j8Ep6K8o*8@o}8n8.6n8m 8")ms8أlM8!l)8Pk85(k8j80jB8i?8))i͘8;h8$h{8ngn8fSc8+fX8e~N8dq48dY8Sc8b8a8Ia8`8x `8K_F8@_^(_8F]68'\ 8 [08mZ8X8Wp8W82qVl8U8T'z8!T48S`8?S-8[Su.8S`8T8hUK8eV1 8SW1"8>Xi$82Z9&8[E(8r]C)8`7t)8-be)8IdDF(8Ie'8ýgH7)8 `m6+8#n,86m(8fu&8_f%80gko%8*l!8Xl֙ 8l8'Akٟ8i8Xch&8fR8Ld|8b)%80`e 8+>8}=i8<}85/ƨ 8. 8- 8 -8/B,_8t+8*!8^)}8](8'-8]&8%&8$+8#a8"Y8?_!08 N8gs7^]74R7g 7757:m7a7J 7?G7Ph7 b7 SK77$l7U!7|7<7721q7~L%7?t77L\77-7kLTy7ⶱj7w඾w7x޶7ܶ7]۶ 7֞ٶ[7swض7׶-8ֶS8Uֶ8 ֶI8ն8 ֶS8Kֶ\8γֶ8F׶?t8mض8PضjD8ٶx8&ڶ8۶a8wmܶR8$ݶ8ݶ8a޶w8n޶ 8Q߶8߶n8߶P8,߶۷8bP޶/8Uܶ8Zsڶպ88 ׶=B8mҶӘ8Ѷ 8ѶA8wIӶDh8Զ#>8Pնh 8ն 8Ҷ]8wͶ#58Kƶ7Ŷ4:7Ŷ 7pAƶiZ7OŶ77ŶO7dZŶi7Ķ}7Ŷ7%ǶZ7˶b7XǶJ7\ƶQ7ƶiM7Ŷ7yMƶ&7Ŷ:7\Ķwd7öͼ7]¶s>7u7+7 u7V#7'87籶$7ұ7+ղ7 W7㴶67&7QP%7|I.7}[?7<᮶_T7~i7A}7H7O 7, 7D:7h+7ْO73z7Z_7F>77bBc7{7vu*t7'o17h7b17]yI7QBWWZ8" UZ8)SZ8VRZ8-DQZ8!GRZ86SZ8lo!VZ8*hYZ83䷭]Z8ߤbZ8cdiZ8#pZ8p_yZ8Z8k㷄Z80;Z8Z8Z8OZ8OⷳZ8ⷑZ8^Z8[8J}$0[8R9E[8eZ[8ɴCq[8c+[8Rp[8 [8߷[8߷[8F߷[8V߷H\8"߷-\8޷D\87޷j[\8޷Gq\8DF޷O\8K ޷Y\8^ݷL\8tݷ \8|Nݷe\8R ݷ \8ܷ\8[}ܷ-\8?2ܷ<\8Q۷P]8۷5 ]8D@۷ ]8ڷ ]8Qڷ( ]83ڷ]8ٷ \8Bqٷ\8 ٷ%\8ط\88ط\8׷\8Z׷ʓ\8ַ x\8 sַbY\8/շ7\8iշQ\8շ[8ߌԷ[8rԷߔ[8ؐӷ0e[8Lӷ2[8ҷZ8&ҷZ8׎ѷ|Z8# ѷNZ8/з:Z8: зmY8yϷIY8 ϷBY8ηX8/ηX8ͷaX8ͷX8q̷W8̷fnW8Ї˷IW8I ˷LV81ʷiV8ʷV8ɷӲU8ɷTU8ȷdT8"ȷAT8Ƿ1T8,Ƿ>S8ܱƷxgS86Ʒ1S8ŷtR8?@ŷB-R8}ķQ8=HķdTQ8`÷P8M÷uP8·PP8P·O8#O8P6N8@y1N8LM8ɿ@M8qEL8KL8:4K8FSK8,yJ8ŤXJ8"I8]I8 H8CaH8G8kfG8ḷF8WoF8SηE8KE}E8⼶E815ҐD8FkD82(0C81c=C8j/B8gB8B8A8V^;A8'k@8$ł@8Z+@81?8?8IDo7?89Ϯ>8`[>8護L`>8vg>8r=8a5=8#g=8/=8A<8`Ъ<8^n<8꩷i`<8uS/<8 ;8x;8s ;8Íl;8 :;8;82:8Buz:8夷`:8YP#:898b98tV98#ˡ 98688fva88X88랷78$978WM68T6858@͚wU58虷:480:48'/385\38#]28&18^"E08k/8P.8W-8%+-8(Y,8㌷+8؋U*8%ϊ )8ȉp(8È>(8Ç!='8dža&8;х>%85ᄷ$8T#8#8<>G"8zn !8 8i 8y~Ui80}8{/8zߡ83yX8|y8\3xC88)wH8Nv8cv38u8Cu8L]uǎ8R.uj8uO8 u<8ru#18u*,8)u,8GuC28_lu;8*uTI8uY8Iul88v;8sAv8av8{v8Nvw8}vB8v8'v+8vXC8v(Z8vo8kv8Nv8|)vF8'u8uP8Ѝu8^Nu8' up8t8jt8t8Esb88Is8rD8 krHx8uq~a8|qI8Zq/8p8U p~8[o8o8nŕ8bnxr8nmM8mn(8l8Fl=8kJ8k8jky8"j^8igH8&i58h%8h38g 8f98Zf8e 8e8_d8c]8^ba8"bn8la}L8E`L08`W8x_8M^;8C]8]˃8\a8Z=K8Y68X8֕W\8V86V8IUԇ8T$8SI8;Sn8RG8dRnK8PS;|8PS8Tk8{UV8?V!8WWB$8W &86(Y )8.Zc;*8\ )8w}^D*)8!3a!(85ear'8Gb@(8f*8/h+8kf[t)8~bbl&8}dl!%8e%8Df$8Ef%8"eB%8>g+%8 h$8j_#8jUY"8dki!8ͺkr~ 8k8޹jO8Xi8cg8/e8c8@a\$8hg_Mj8H]ļ8+[8Y[8WK8Tav8R=8N Qi8*O`)8`\M8uK!u8IJ%8WfHp8F8EL8.gDW8EC 8;Br8HA/f8h@x08?_8>8,>68=#h8F<=8W 8- 8R, 8+f8N*(8)8(k8(I8' 8 &y]8$8k#8"$Q8z!82 $8Q8pT7a 7$n77m,y~7uq7{77_7t#!79 [>7I t7V&"7*a7je7v+7  7B&77P7'Yg7077ܖ7ʧ7]ⶅ7)Tඖ7ݶ7۶7 ٶ'7nGضhp7ֶ7ն/67ԶZ8S Զ"8ӶL8TӶ8NӶ8E~ӶL<8.Ӷ8sԶ҈86ն8$ֶ8H1׶8Jض{O84\ٶm8Yڶ8<۶8O ܶF8Vܶm8uݶ 8_޶k8޶98r߶TN8U߶Λ8K߶8޶*8!޶y8 ܶ8@ٶy8%ն8wҶ88ж38cѶ8`ӶY8Ӷ8%ж8P:̶{G8ǶF8Ķi8ĶZ7 !Ŷ|7Ŷm7Ŷ'7ƶ&78`Ŷ 7 iŶ7"ƶr7eǶ(7_ȶ7%ȶ037ǶV}7ƶ27/Ŷ7Ŷh7)Ŷ78Ķ.7¶$7=17IV7&Z7~7n_7/ﴶ7yD7Q7FC7 07aв#7#7걶Y-7 7@7X7fYs77늦y7Cļ7՟77N 77"7f74>7{7J'7i7.J?7 z{ 7s7P\m7 6g T7/a 7II[Ҽ7UbZ8Z8ttxZ8)sZ8QZ8\Z8MdZ8左Z8Z8zZ86Z86Z8IJZ8}r Z8J3Z8-[8@ [8u| [8A#[8.[8O;[8aᷙI[8E`GX[8*g[8q0x[8}([8Κ[8V[8"޿[8;߷.[8߷[8߷[8S߷\8߷"\8޷!7\8޷K\8~޷^\8QG޷)r\8޷\8ݷ\8ؙݷZ\8\ݷ\83ݷ\8ܷ*\8ܷ\8=Vܷ)\8)ܷ\8۷\8Jy۷a]8R*۷H ]8ڷ( ]8ڷ ]8-ڷ]8ٷ]8vٷ\8ٷs\8ط\8Nط\8׷\8N|׷\8׷\8Lַz\8c-ַ\\8eշ<\8oCշ\8Է[8RԷm[8'ӷR[8Zӷr[8Uҷ'B[8^ҷ#[8ѷZ8`ѷZ8зfZ84_з)Z8MϷY8\]Ϸ%Y8ηQeY8\ηLY8ͷX8[ͷ݌X8̷@X8\̷\W8˷?W8`˷BPW8vʷrV8TeʷݦV8ɷOV8OlɷU8zȷU8 uȷ?U8ǷT8~ǷT8Ƿ!T8NƷXS8tƷr[S8yŷR8JŷHR8՜ķ'R8 !ķIQ8ˤ÷ RQ8'÷[P8g·AwP8*,·P8PO8-$O8ZmN8,8xf>8Z>8+>8.=8#:=87m=8SȪ7=8XXv=8穷\<8{uN<8m<8Ҍc<<8 <8;8A;8v;8hB;8~| ;8 X:8E~:8룷[:8]S:898B98Hl>9888q Y88R)788 78ϝLj78\682968[68s5848Gi48ɗc38.ؖ238)╷28男518ꓷD018蒷~x08䑷D/8ސ.8֏1.8͎e-8Kč,8ܺ$+8Q*8lD*8ܦ=)8>d(85"'8U&8QO%85˄, %8ヷ;$8zq#8[,H"8i]!8!4!8 8X~8C};8{8[z8y8'x"8w*8BwV88u8u=89sus8\u'8?u'85u78tRF8{tQ8btZ8Pt^8t_82sR\8xs=U8!s{J8rw<8Vbr+8q8}q8f q8Pp8:p8of8.NoM8nh8^nI8ym'8km 8l8?ulܻ8 kk8}kYq8%kM8j+8 je 8;i{8i8hh8Gh8#g80 g٠8Dwf8e8==eU8NdYx8qcd8 c>K8Yb,8af 8`88`f8_8^f87^m68]8:\c8\[8hZ8xY8aX8TW9k8oVkR8UF8TB8vDT"8YS_8Rh8\R<8JR8HR8JS6 8XSq8^TA8T; 8UT#8jU)&8{U)8Vq-+81W)8X`R)84Z@(8\+(8 ](8@_p*8cb_*8>\x)8ͻY^x'8 ]k%8a$8e$8=3f$8Afn$8g$80'h!$8hu"8}i!87j!8jJ 8jX8i\8mhc8ʗfw8d 8lb8F?`68^K`8?[ 8Yl%8W8gU8rS]8%tQ.8O8ŨMj8gK88'Jv8H|8FG78E8ARD8o#Cˁ8BL8A820@8b?8>}8=-L8e=B8y<8P<8!;Z81T;8':9k8W:J89^'8L9$8s8m8-8>87H86a8[62858$58v4[835893338J2\8d1V8I1 8[07& 8/ 8H/ 8. 8- 8 -P 8^, 8+ 8*"]89)ծ8 )8@(K86('(8&& 8<%>/8a#/|8" 8!8M h88a 8yy7yz7=7y'Y7f7ܗ770k7 OQ7z 7 7k7I7G7/[747)7;7,i7vJ7~7ɓ7^17Q㶶7ZsM7ݶ7W۶_7g#ٶ)7).׶g7 zն7ԶO7Ҷl7|Ѷ 81Ѷ o8mжH8ж 8ۢж8ж]8hѶ-r8JҶ8 CӶL8bԶC:8ն8_ֶ8MضrU8>ٶ}8ڶ'8ڶ4[8۶8ɋܶ8oQݶ 8w޶mj8B޶8߶8U߶>8UW߶Wy82߶s8߶'8 8ᶍ[8|ն8Y"϶th8#%϶8{϶_8:ζ8l]̶8d ɶN8'ŶXu8.ĶvI8YĶ7.Ķ 07ŶKe7Fƶ7Ƕ 7;ƶ7ƶQ7Aƶ-74Ƕ@7)ȶ}77ɶ27aȶQ_7UǶn7 ƶX#7nŶ47?Ķq7eöK7$¶=77,7k<7ۺj77fs7b77=7;]7n75]7#7z;7-X7IDgy77L7?^h7;7n񝶬777 7&7뮌37?7څ77p~-7wo7*q<7=fkz7He57I_~7fY47vSp[8^t[8 |[8@w[8uy0s[8.o[86\m[8䷗k[8U䷧j[8䷌j[8?Tk[8m[8Ao[8Xs[8w[8-/}[8j@ⷉ[8[8# [8z[8᷸[8T[8&෸[8sl[8R5ු[8߷[83߷\8 ߷\8"\߷\8C&߷ 0\8P޷e@\8޷P\8{޷fa\8]L޷q\8޷?\8ݷU\8ݷ\8hݷ\8^,ݷ\81ܷC\8oܷ\8oܷ\8-ܷ\8f۷\8/۷]8Z۷]8۷ ]8zڷ7]8rڷ ]8 ڷ]88ٷ ]8sٷ)]8%ٷ2\8Իط\8[ط"\81׷\8 ׷<\8V,׷\8 ַњ\8;Uַ\8շd\8tշE\8շd$\8Է(\8Է8[8 ӷ[8#ӷ[8̧ҷ U[8`+ҷ$[8 ѷlZ8/ѷcZ8GзZ8%2зKGZ8ϷH Z82ϷY8ηY82η=FY8DͷY83ͷX8̷oX85̷$X8˷W88˷W8pʷ6W8a>ʷ=V8ɷV8\Eɷ:V8jȷU8MȷU8Ƿ.U8WǷT8Ʒ:uT8;bƷT8ŷS8lŷSS8ķR8vķR8E÷$R8÷Q8E÷SQ8k·P8·|P8 P8 (O8k/O8 .N8늿0KN8M8ӅaM8VL8}tL8K8rK8뻷K8dJ8ܺ!J8TgI8̹I8CۣH8Fo)H82G8 ]6G8!F8FF83E8B\E8FD8myD8 D8zLC8\o4C8Gy&B8ohB8.}^B8/A8,KA8 Z@84@8[ J@8ū3?8G8y?8ƭc?8 U?8,嬷>8(vA>8Z>8x>8t+=8=8nOx=8੷C=8fq=8<8@<8R|<8 oK<8,&<8 ;8,4Ҵ;8;8.}I;8;8%:8:8T:8T:898 u98a]"98K88`k88<88y78S?-78)ᛷ68z 9682V58R+58m48r{48ae38٠28228᭓e18Z08/81/8yCl.8w-86,8is,8y1+8\*8*)87(8։'8W'894&8`d%8̓m$8'7#8c7#8JR"8D!8}# 81~I 8|@8{e8Gz8y84xʜ8Fw28Uv8aVv8u&68Gu 8t8Ht8Fts8tX8s_F8s;;80s68s78s=8sH8slV8t h8I1t_|8[JtҒ8at80tt84t8t88t8ǔt7-8Mt+G8tM`8pxtSx8}ft8Nt841t48(t!8sr8s8s8Ss8s8xr8Br8X/r>8q8exq}8'q8opj8hJp?z80o%d8OqoL8So*48n8n@8m83m8ula8uHlx8kT8Yk.8j 8IjjB8ni8yiɥ8 i8h8s8 h_8g]8E>+8 =8=87<58L<~8:;^8G;@8:"8q:8N:`8>9s8 9w888n7\87pz7a*7hI74{7LM7><7CI7|^s7 7L궉7Bv綠7=7i7ݶz7.۶7ضS7`ֶH7\Զc7Ҷ75"ѶU7϶-7ζ*85Jζ8Ͷ<8Ͷ]~8ζ[8ζ-8A϶h8i=ж8gѶO8AҶ8 Զi8Xն8ֶ8 8-׶D 8չض\> 8ٶ; 8Tڶ8_۶&8ܶz8Xݶ=8޶.8£޶4~8߶p8 ߶8z޶Hk8ܶ8Ztڶx8?ԶOj8}ж}87LͶI8˶8j̶M8˶8ɶ8Ƕv8mŶ-8Ķ 8öU8+öX7Ķ7L[ƶ17Ƕ`7!Ƕ7DFƶF37ƶ]:7Nȶ/7DͶ)7 ˶)7Hɶ>7Ƕ7ŶGn7Ķ=7۶öW7q¶g7I>7?7q7'V7M ~=7ר7R{7Qb7_C7IQl7 7Gͯ 7֮/.7(S7B{7 77 7h6C7.27lJ7\7gi7|n7*m7Ee7釶V7p@7vL#$7H|E75u7soA7Fir74cm77\=]7aW:7$Q\8o \8\8IaO \8sm\8F[8}[83[8[8㷰[8\U[86[8-[8R[8YKM[8 *[8*[8᷋[8 K\8 B \8<\8Д \8Y෡!\8*\8J߷4\8 ߷u?\8,s߷J\8:߷V\8M߷b\8-޷n\8޷8{\8Y޷\8!޷\8ݷ\8ݷ\8uݷһ\8;ݷQ\8ܷr\8ܷ\8bܷ\8UFܷ0\8ܷ\8۷]8۷]89۷]89ڷ]8sڷ]8c\ڷ8]8 ڷ]8ٷ]8iٷ]8ٷ]8ط]8aط \8gط;\84׷0\8@׷\8yַ\8sַ\8 ַ\8շDr\8.շUT\8YԷ3\8KԷ\8zӷq[8iaӷ[[8ҷӘ[8pҷk[8tѷz<[8{ѷ [8зZ8з4Z8зgZ8Ϸ,Z8ZϷY8xηoY8{ ηBoY8ͷ,Y8 ͷX83̷X8̷ WX8|˷c X8˷W8-ʷqW86ʷ0"W8ɷV8tɷ}V8ȷN)V8'ȷ4U8¬Ƿ{U81Ƿ"U8#ƷBT8<ƷFlT8ŷT8nGŷ S8ķOS8Qķ.R8÷R8[÷&R8·Q8c·YQ8P8liP8RP8lO8(>O8lN8뾷v]N8iM80罷lwM8cM8߼FL8ZL8ջ8K8N'K8Ǻ}J8@5J8gI8?1#CI8;H8#!QH8G8L`G8ɉF8DtF8d|E8݌E8qE8D8 kb>D8>鲷.C8htjC8鱷EC8ClB8 𰷖?B8$ufA8PA8f.A8 @8`@8&8@8鳭?8Bţ?8IӬ]?8d?8>8>8`>8o'>8CP=8שպ=8i=8S=8|l!=8<8P<84<8[<8DL)<8ȥ;8MH8;8Ĥ;86=aO;8i';8I!:8(:8oJ:8Sb989ů98t[98TU:98788E坷>88.$78\c78܏68Mn68~噷58`58,%48N=z848P38_28ujL28q18u#08w,08Hv(m/8sC.8pI-8k-8wgyG,8dv+8b*8Eb)8&e`(8ek+(8uY'8*&8?%%8ŵ2$8M؂/$8Np#8l4c"8nos"8gX!82~ 8c| 8G{I8H]z8lQy8\xq8}w84v]M80v8elu8qtt8Pvt@8t8Qs8sF8cs8NEs8@2s8(s8&s48q+sR85s`8Cs8s8sG81}s8]nsc8Zs\8As38W$sF8,sW8re8rp8rCx8(Vr{8Zr{8Sq#v8qGm8-:q`8ipQ8ɍpD@83p-8wo8uoU8ao84n8=n86mu8`mՕ84lx8XlqY82l88ak8)k8j89Bj8i8Xia8hB8lhu&8g8~gB8g8xf#8*eA8'je8d!8[8d8cF8b8%bd~8{aa_8`<85_8@_b80^8^]l8\*8,[8T[;8Z#n8 Yda8CXZ8DWrT8VQ8UT8U^8WTg8S\8uRO8RF8eQ48P8PXx8Q8Q88FQ?8/Q'8{FQ8ʮPa#8-O&8>Okj)8N*8[O%*8Qm)8Rl)8=T-)8pT(8GU(8Th(8T,(8V'8SZٚ&8V]B;%8_L($8`K.#8a7"8+Dc !8dI!8dd!8ek 8ƛeأ8e8e8d81cc8xa8W_\8]8Z$8dXN8\V8^/T8QR58lO8Mts8Lz8CJ8H8FP8]E8C8fB8`A#8E@[8&L?/8r>F8f=H8=J8V 075 ~x7~(7BcN77a7X7C7K70r77707P嶹76~=7f޶7g۶7ض7ն7cӶ`J7ӀѶ7%϶7n5ζr7"̶8 ̶8-c˶8#˶8B˶8r˶ι8"̶8iͶ#j8CζK08ʕ϶8жC8+cҶ' 8]Ӷ 8Զ 8 ֶp 87׶1 8CLض' 8gٶ$D 87ڶ8h۶8Qܶ4K8hݶ8ݶ 8Q޶s8lW޶8Ǝݶc8@ڶ?8)ض89ҶW8\жA8Ͷh89Ͷ8Tp̶8_˶8*ɶi8Ƕr8oŶ58`Ķ8qöG8ö=8UĶ-7rŶL7ƶ-7ƶR7ƶ# 7hƶ՚7ƶ7ͶO70O˶7}cȶO7EŶҲ7CĶ7Aö=7v¶e73_z7¿[7C7~77 l#7}77DY-7v౶s7K7[7b7G7/y7Щ!7w7&k7آ27fX7[z7 ,7]ߖ7JO7] 7 7ƉD7G}ŵ7`:7/7\yk7qQsF7m=7fv7`(7&[t7;U27WOU\8.\8L\8ɝ\8\8b\8o䷦\81߂\8}\87㷀y\8.u\8ߧAs\8aTq\8l"p\8+ᷪo\8ܔp\8RGq\8-As\8v\8[෎y\8R}\8෪\8߷I\8߷\8!_߷u\8#߷\8޷Ф\8&޷$\8s޷\8s9޷ \8Bݷk\8ݷ\8ݷ\8Oݷ(\8Oݷ\8dܷ\8ܷ]8A^ܷ ]8ܷ]8E۷y]8k۷J ]8#]۷G&]8J۷F+]8ڷ;/]8ڷ 2]8{Cڷ3]8jٷs3]8-ٷ1]8[ٷ.]8 ٷ)]8ط"]8c_ط&]8ط_]8@׷\]8ZM׷6\8ַ\86ַ[\84%ַp\8׽շ!\8Tշl\8#ԷEh\8 zԷH\8 Է&\8ӷ\8y$ӷ[86ҷ[8n8ҷ[8Hѷ)Y[8Fѷ)[8зZ8.QзZ8Ϸ,Z8rXϷ,RZ8Mη$Z8]ηY8ͷY8aͷZY8̷ Y8e̷wX8˷X8Qj˷CX8ʷW8oʷSW8ɷ:aW8qvɷW8tȷLV8~ȷpV8<ȷUV8ǷU88 ǷrU8Ʒ"U80ƷET8НŷgT8x#ŷ- T8ķ S8.ķPS8޳÷R88÷HR8·,R8B·RQ8bQ8HIP8P8M(P8BϿO8OQO8ϾN8O{sN8@ͽN8JM8hǼ M8C*L815L89cK8HK8@-J8jtZJ8QI8kI8cH8{H8H8zG8'G8mɤF8紷1F8cE80߳OE8,\D8+ڲ9uD8\Y, D8ٱC8\~>C8߰B8hd{B8꯷B8nr|A8wmA8A8d@8z@80.@8?8RM?8F嫷^?8x?8 I>8v>86l>8ʩ5>8[__>8gK=83=8f=8225=88=8Ħ?<8cO+<8Cץ+m<83\8<8ݤ<8[;8գǐ;86KS;8;8j)G:8N:8<:8Pr98TX98k`=98G88x88Μ5 88 78>>$78*n68"68CI58ܗu58`p48 38=/38+28^518;_"18?h08Aت/8Ay.8x@1".8>X-8<4,8;+8;<*8>*8CKL)8K |(8W'8h&8O&8QO%8$8$ꁷN#8Wi"87!8}!8 | 84I{j8{#z%t8Yy8Ex8N5w 8gv 8Ѱur8Fu,8t8t t8̢s8MsHr8{ sY8gr I8lrh?8r<8-|r|>8prE80lrQ8mra8)rrIu8yrZ87r8r8Ər80r8r98r,8ыrcH8rc8vr}8verR8#Prx86r8r8q8q8شq@8Hq'8 Xq81qx8jp8yp8Dp8o8o8So8nf8Jn8Fn8mr8zm_8mXJ8l18r5l;8k8Zk.8jv8}jK8zj\k8diqF8c-i"8hn8Gh!8gF8 `gU8fn8pfj8pe|8hier8edi8Id`8cT8Wc-E8bb/8qa8@`8!`8eR_j8bz^Yw8]C8d\ 83[л8KZ%8s Z|8Y8Xo8Wl8^+W 8)fVT8>U98XT8 (T8}S~8Rb8R8ppQ8Pz*8YPG8*Py8[PE8q(Po.8l(Px]8(O8O{ 8n\N $8M4&8ȓM(8UN_)8O(8P,)8Q{)8R(8SYT(8S;(8SB(8QTY(8wW'8"Z1%8?g['#8\+#8]}"8R_3!8h`3/!8g`^ 87` 8;`<8dlao8b8Hb78aJj8"n_ 8,g]8<3[Ɂ8Xd8ʬV~8%qT# 8?R8P98 Nq8Lk8.J@8gH8F8 $ES8C]8EBx28@ 8?s8t>8.="8 =Im8jζq7̶7PL˶t7/ʶ58O ɶ8ȶ8Jȶ8qȶ84ȶ 8Aɶ8;ʶ?8J̶d8~Ͷ~8X&϶8@ 84ж 8Ѷs 8sӶ 8AԶ 8Zkն 8ֶl 8x׶t 8`ٶ& 8ڶc8۶%8ܶ88ݶc8"]ݶ8Jݶs8ܶi83eٶx8ֶ8Ѷ18x&϶I8ʭͶME8̶8[˶g8ɶw8Vȶ8ƶT8&KŶ|8ZĶS8öc8ö(V8sĶQy7JwŶ^7xƶP7RŶG7sŶ7|6ƶ^<7Ƕ?37wBȶl+7=ƶ%7Ŷ7IĶ7NöJ7N¶-7@7PQ[7,(St7JO775~79Ƿ*7{7<7t#7 q77?7֬=87Pxt7#Ӯ7A7L$7|3O7}b~7蝶J77 7~;7]ϑ{7"7i'7B2T%77Ɂ7w;}7 v7Hp7jr7dNd7^07ɼX7 Rǹ7CM,Q]8(;=F]8䷬;]8䷠1]8UK'(]8M]8]8c_]8aK]8]8ςR\8:m\8EC\8v\8e\8 \8෢\8p\8FWD\8\8g߷\8߷\8hV߷f\8߷\8 ޷\8޷\8_޷]8"޷6]8nݷ ]8ݷ]8mݷ]8}1ݷ(]8ܷu$]8 ܷ*]8zܷ0]8<ܷ6]8>۷<]8Ծ۷!B]8~۷F]8(=۷=K]8ڷN]8ڷQ]8"qڷNS]8*ڷT]8kٷS]8ٷ)R]8Jٷ$O]8TطJ]8طD]8Yط<]8طX3]8׷ (]8S׷]8ַ] ]8ַ\8)9ַZ\8Yշ\8\qշ۸\8$ շ\8Է2\8 5Էac\8dӷEB\8Wӷ\8ҷI[8sҷ\[8ѷ[8 ѷz[8ѷK[8Zз[8зZ8pϷʲZ8R*Ϸ{Z8ηKBZ8c2ηZ8ͷY88ͷY8̷$JY8]>̷Y8K˷^X8VD˷g}X8qʷ5X8JʷW8%ɷW8RɷUW88ȷW8ZȷV8ǷfhV8dǷhV8ƷU8LoƷynU8ŷzU8zŷT8ŷQhT8ķ5T8 ķS80÷US8÷R8ۜ·R8!·6R8AQ8<*pQ8& Q8p0IP8N89uN82kN8A=M8?-=M8L8Z%rWL8a4K8InK8J8QJ8 J8I8y\ I8\H8Wl4H8嵷׿G8_KG8:ڴF8fUfF8bѳE8INE8'̲E8K`D81˱yFD8LC8ϰ{C8[TlC8Kگ^B8a_B8xꮷB8 uA8L\A81 A82@8ss@8?M,@8ҫ?8f?88f?8퐪(?8&>8o>8]R~>8+訷H>8v}>8=807=87R}=8&ǦK=8BU=8᥷D<86jγ<8~<8osH<8<8m;8 墷F;8WV;87ơ;;8/:8͓B}:8r,:8K)98qt{98흷W986_88zy`I88>Y78A횷_7868pK]68Zr58 B58˰-48ȕ148ܔ&k38쓷42828'`18HƧ08 /8)/8\,e.89-8,8,8k=8+8i*8 )8*(88X(8K5'8bm&8%8ᤂ$8ρr0$8}{#8w="8&"8}!8K| 8 {e 8Hy8xg8 w8vL8v78Vu8t8tg8bsL68!+s8r8"rR8Dr8r38{q8qq8һq8iq8q8qP8qx8?q+8qF8qb8jqg8ƛq8ܔq88q88q8pq+ 8^q%8VGqU<8-qQ8(qd8pFu8pق8?p 8p|8PYp8Cp8FoՌ8o8Qos8 ob8nP8zn>?8*.ne/8m!8m98Smp8vlf8dNl8 k_8wk;8 k˘8jx89j6V8i28,ci 8h8h8hw8gށ87ge89fMM8>Rf88YeR(8Ze8{d,8Id8;c98'c.8bO8a&8+4aK8x`w8޳_W8^)8Q ^8"]8 ,\83$[B#8Z$8Xu8XX/.8PW-8]W'8V8=V98U8kT*8+TS98SH8RQ8L\Rm8Q8O,Q88LP8OZ8uNC8NV8NJ8N+8_M8_M!8Lr#8"L=&8YML'8G>NH}(86N7(8O(8P(8UQ'8IrR'8R}'8 /Sv)'8Tb&8W{$8S W#8[XZL#8jY"8CZͣ!8\+ 85\S> 8\k8I] u8{]Ƃ8g^ۖ8._F8^8 ]X8;[8~YI8V#8ИTa8\R8K)Pw8N:8YK$8J381H\8vFv#8DR8yKC'8A8@B}8M:?b`8t>C8v=p"8F< 8,;8#;8:h8҆:C\8Y:=8g9:#8: 898C9$8 938c9<89e88,d8N8~L8798b7+8"68O[6 8<58z>58m48b4p8s3S'8<28/2h8|180w8<0&8/`]8.8[G. 8-sw 8, 8B,h 8L+N_ 8e*= 8* 8v7)2 8\(!v8u'8&89%Y38bp$m8N#8 "8b C85sJ8ŵ8VrĽ87-7@t+7X7\ 7TN7k1d7 87 \7@7F7x7%7L7"fb7F7I7a+h7趦7䶏7G7j&ݶt 7ٶ7?ֶ74Ӷy7auж)7ζ7}˶^67ɶ7{oȶZ7p/Ƕ8DƶP!8̸Ŷ,/8Ŷ=8ŶvF8Pƶ~F8#Ƕ>8ȶ^189ʶY 8˶) 8^Ͷb 8jζ 8϶M 8?жo 8Ҷ 8"GӶם 8Զg$ 8]ֶ)r 8!ضM 8ٶ 8H۶8Dܶ:M8/ܶ8Wnܶ&8oi۶8ٶ$&8?1ܶ8Dض'8;ѶL@8o|ζv8̶8j˶i;8yɶ?8!Hȶ`8yǶ8àƶ8gŶ>8bĶ8ö08ĶX8.Ķ7fFŶ7lhŶ"7+rŶA7ŶY7bfŶ7(Ķ7öP7ö/f7+ö7¶7 77i47$Ž7L٧7hѺ7QN7oȷ7:2Y7Q77iQ5E77r97T+7[q7_hU7'737 Z:n7\7mD7x7꘶)7p/K7Df7=폶z7FҌ"777g7E%7/Qzm7k$tU7n67g$7b\7\#7JV7 PBF7J`]8]]8䷦]87]8=㷾]8]8I]8?e]8Iq]8.b]8h]8n|]8qv]8;Zp]8@k]8f]8Lg"c]8"`]8߷]]8t߷\]8 Y߷Z]8U߷-Z]8Q޷ Z]8޷Z]8V޷[]8޷2]]8ݷ_]8 ݷOa]8Zݷc]8+ݷf]8ܷi]8ܷl]8`ܷo]8"ܷs]8۷v]8۷x]8b۷q{]8Q!۷}]84ڷ>]8ڷV]8Wڷ]8/ڷV]8+ٷ]8ٷ|]88ٷwy]8طt]8eط o]8Oطg]8U׷^]8׷tT]8 U׷`H]8Wַ:]8pַ*]85Gַ)]8շ{]8շ\8$շ$\8ԷR\8XԷ^\8ӷ\8Uӷc\8ӷ A\8ҷ_\8Q7ҷo[8ѷO[8/Qѷ[8зs[8neзC[8Ϸ][8!uϷZ8ηZ8fηqZ8η7Z8LͷY8ͷmY8e̷}Y8̷?Y8ƚ˷X8˷X8YʷKtX87&ʷJ-X8*ɷW8R.ɷW8вȷOW87ȷW8ǷV8BǷ{eV8{ƷV8$MƷU8ŷioU8YŷU8QķT8eķmT8÷T8q÷ S8·_S8J}·6S8·?R8ER8S Q8xQ8#Q8P8,~SP8͚O8TO8O8~N8>N8M83_M8>L8ލ}L88 L8vK8P#K8Ux/J8)򷷐:J8kI8u嶷PI8_]H8ص.hH8SG8ʹӁG8HG8ijF8Av0F8>E8=VE8D8>*D8:D8?EѼC8ʯC\C8Q/B8 ڮڢB8cJB8ﭷ4A8|բA8 9SA8UA8l-L@8?u@8S1@8骷?8?8s?8n8?8wC1?8ڨo>8q;>80`>8,>8-2p=86ŦX=8V\=8奷 d=8r>1=8WT<8ꄤ<8- <8ƉW<8g <8~;8&$;8bW;8͠;83:8n:8:8UD98[98:ߜ88#88b 88ǝ78gϙ78<68/'w68$K587j48&L48ᚔ38$38ѻVS28^Ǒ18GА"08֏^-08ێm/8ߍB.8⌷-8勷-8銷P,8퉷+89n*8)8)8!BT(8+'8D&8c*&8eF%8ӳ$8怷*#8!/#8~"87c}!8|Y!8zi 8\yOL 8̇x8Iwe8 v8u8ytEZ8kIt8s8,'s_8rņ8Nrh8oqR8qD8Zxq=8Iq<8$qdA8qJ8p2Y8p5k8ppր8+p-8|p8p8p8 p 8p(8pF8?pc8fp 8mp8 Yp84Ap8'p;8 p)8.ox8\o8˴o8 o 8Zo"8$"o8,nh8*n 8dn$8U'n8mL8m8Igm8$ms8Ul8B^l8kܔ8Ck98| kp8TjZW8Pj:8i8Hi8jiW8h 8Kh8ge8 tgnB8g"8f8&f 8e8#8:l=°8yY<8w;}8?:[8jG:489 89j8U9W8&9I869B8Р9;8a9h8d9J8^9)8'9N88B888+8L8_78oN78T68FP68c5s825x8p4IN838T3!824r8 2 8U1–80808+_/t8.2X8p.8y-=8!,S 8+,ž 8{+ 8*/ 8*u 8+8)e 8b(Z85'<;8&v8%8$#8om#8w<"mH8= x808#8b8K8,7R7Za]7)Zi"7?&77 7 c7@7L377C?:7\7&v7W7QU7mn7綔7?N7t޶l7ڶ7$׶%7HӶ7&жq7Ͷr7U˶ȓ7."ɶ7:Ƕe7Ŷ'7P\Ķ8tö8¶78¶O8Nö`88ĶOj8r<Ŷ)o8ƶs8,Ƕz8Xɶr 8ʶ, 8[˶l 83ͶV) 8?ζ 8o϶! 8`ж'y 8~Ҷ 8׍Զd 8ֶ 8ٶ 8ڶ(8}Aܶon80ܶ#&8NSݶ8ss޶S8`E8\8۶+8VSӶ8{ζǗ8]˶b8ʶk8:mɶeg8bȶ8]ƶod8+ƶK8ŶZ?8Ŷ&8 Ķzo8mĶ+8Ŷy8BŶ=k7ĶW7Ķoj7xlĶ7?:Ķ"7Rö7}¶ 78=¶7.777+n7d%*7j7;N7ĸ&7NF7Եt7yT7˲7,=4>7l 77!+7.ުx7)F7O[ 7kO7VՐ7c770:7Ci7+ŖK7银n7$e7 "7eh7燶77_Մ7l7`}7Cwz71q7-k7N7e7Q_n7|YA7ȹS7I Ni7oH^8yu^8' h^8㷩Z^8}M^82\A^8~5^8*^8E6^84^8F ^8_7^8:᷻]8d]8`෈]8*:]8߷]8Z߷]]8f߷]8!߷3]8޷t]8 ޷,]8?W޷w]8޷H]8Eݷ]8ݷ5]8Qݷ+]8rݷp]8ܷ]8ܷ޽]8nOܷ]8$ܷ]8۷]8۷]8L۷]8 ۷]8ڷ0]8ڷ3]8Aڷ˺]8ٷѸ]8ٷ)]8oٷDz]8q'ٷ]8ط[]8ط]8)Eط]8v׷]8׷]8_S׷}]8ַp]8rַa]8PַQ]8շ?]8շ+]8:շ]8Է$\8vԷ\8Է\8ӷ\8Aӷ3\8ҷ5i\8iҷ/E\8ѷ\8Zѷ[8ѷ[8pзR[80зq[8"ϷA[8DDϷ>[8oηZ8SηZ8gͷlZ8t`ͷ%3Z8̷Y8k̷`Y8˷~{Y8[t˷ ;Y8ʷX8q}ʷX8ʷpX8ɷ7*X8G ɷaW8ȷ=W8?ȷNW8ǷW8M ǷV8ƷgV8,Ʒ.V80ŷcU88ŷfuU8ķ"U8{EķT8÷wT8vR÷ T8·LS8^·nS8S8NjR8gYR8Yt>Q8Q8Z|7Q8mP8ց"oP8P8ʄ3O888O8܄N8aN8ɁM8BM8.|M8}uL8+tI6L8R︷cK8jQK8p䷷J8^kJ8ضI8R'I8,͵I8G"H8]´,H8=sG8pKG86F8mF8 2{F8E8 2-E8;D8a7bD8OD8BoC8ʮRDC8SB8ޭnB8k=B8YA8ˉyA8 @QA8}A84A[@8<֪}@8jl<@8{?8h?8 3߆?8/˨hN?8oc?8>8%>8)K{>8H>8SG>8K楷=8vl=8 ~=8I=8x=80<8 V<8➢e<8&<8n;8;8,lU;8nӟ;8K5:8ȑ\:8靷:8;98798Λ88W88I78`78e68ۗ Q68558P#)58$@48X38YmB38s~28k18-18נ9r085/8I.8k,.8d-8W,8ʼnZ+8͈o+86؇;*8冷~q)8q(8 '8%#'8E>^&8Sj%85r$8-ɀV;$8#8e~>"8`$}Q"8M{,!8zZ5!8kXy޴ 8;x= 83w83@vn81aus8\t8ys8~AsP8r"87r<8q8oY8%on8 o8n8nҞ8n8Rnp8)^n8'n08bmw8Zm 8qm}8-Mm u8cm`8ZlN87ldA8_l:8hl98kX88y2k18-jm$8fZj~8Ii8;i8,ik8hA8ght8h)O8؝g5)8{5gB8fE8-^f8e8 e8>et8^da8d\Q8cbC8 c687b)8b8!ac8*`s8iR`8_18F^J8A^y 8z]8{\o8C[8Z8AZi8bY 8X 8 X5 8WS8X W@8K|V)8iU81U 8T 8LT78cSI>8>SeH8uR18Q8P#r8O8N8MS8eM8M8L58yIL8dKC8Kl8Ke"8/L%8L%8L#8cL"8mL#8L)d#8aMI<#8M#8|NG#8_PN#8P"8>QP"8RTR!8T 8?SPX 8TR8DqUPV8V8V8eW8-Y8XY;8XA8SV_8jKTX8M(R8=O58M8K8I78XG>8ǻEԺ8WCO8UBd8@E8P?,8=E8S! 8h+j 8*- 8) 85)= 8d(X~ 8Ɉ'n8s&8%%8ˣ$V8#8^"8 !88K68'1g88vJw7[i=7n7 ]7<6IY7'7 ? 7Z 7Z&7@d7f37-C7=~7V7.,}7Xr77:.]77GܶU7ض7Զ`|7TѶ97z*ζ 7EP˶]7[ȶ#7~ƶ"v7Ķ%78¶7y7nJ 8h,I*80*G8Bi]8m8¶}8ZĶ8"fŶ,8ƶ 8nǶ 8qɶ) 85ʶ 8b˶ 8c̶~ 8ζY 8жȝ 8dҶ 8wն 83ضv 8ڶ}8ܶȮ8ݶm]8h"޶r8K඘89|`89G޶.h8׶8#Ѷ8(Ͷ8ʶL8Gɶb8_ȶH8Ƕ>8ǶA8ǶǾ8vfƶǗ8yXŶ"8{Ķ8SĶ8ŶJ8Ķ7~ö,s7 ö37PŶMB7ö7l97X}7|7^7m7w*7A47庶676wӲ778V7 77_8>8XM>8⥷g>8Uv4>8>8X=8,$=81b=84R*=8!<8h7Բ<8s<8)0<8c;8Q ;8sP;8֞:84k:8G:8j᜷v98/}98x98y88_#88/78zb7868e68 ܕm58-48.48-J38@28PF)28^~s18&j08s/8@|:/8փw.8,-8⒊(,87 ,8V+8Q*8H)8Ӆ(8 ꄷ8(8v'8$)&8Jh%89wHI%8.$8#8L~N#8|]"8Q{""8lAz!8 yI!8w= 8v9 8*u8u84t|68ysE8r8v>r|8qq8kHqW8YpDE8ԎpA:8Fp58 p78Go^?8ªoK8"o\8pgoq8Mo87o8o"oe8lo8/nQ8\nL 8n@8WnAa8n8n8sn8Yn@8g@n8'n8xn^ 8m] 8omc- 8m#7 8m0= 8dm%? 8 2m< 8bl)5 8l( 8Cl 83|l 8Xlh8M/l 8oku8 kY8kNk8j8Nkj8i8 i8+i 8hEw8nhW8ch68űgm8,Qg 8fp8|f8f{8e"[8Fe=8;d#8gd 8Nc8wc8Ub8|b8a8a48aو8x`b8w_x08Q_8۰^8^s8eL]&8\8[9h8io82=;`8;(T8:O8ݶ9.I88^;8^8$8; 8878788b8O88Ϗ8Rw88[8{8:898$98 9M8888w8V8i818i87 t8p7868at685đ8k55{8Ӏ4U8383k8 ?2:818080e-8|/8.8N.a82- 8++-m8?,R8+r 89T+' 8[*1 8)x 8-)1 82b( 8'3 8ܩ&g8%8>$a8 #8ـ"^8.B!\A8j8v8v878Ql*8rA7[j7e7g27*Ĉ7? a7z, Z7Dv7M7f7[7kY0772񶼹7.7z7m]!7޶7lڶ@97oֶ7YҶt27϶a7˶L7LȶЊ7Cƶh7?ö77x7a78K8Z 8j彶68ԾJ8`8Iу8؇¶8ö 8wĶ7T 8Ŷ$ 8|)Ƕж 8yȶo8tɶ"8i˶28ͶQ 8;ж% 8&Զ 8%׶ 8Gڶb 8ݶ.u88< N8P8!_ض8YԶ8t϶8h+̶+8 /ʶw8MȶD8XǶ8xƶ[8ƶ08Rƶs8KƶV 8ƶM8Ķ"8tö18HöH 8-Ķ8iZ¶C8qw77&7y]%79).7Mt7EZ7xݼ7^ 7 Ss7ܹi7+o7g7R7@T7Ӳh7h7vֺ7=7: C57 |7C勇H7PJ07*6^7gä47ڢ676֠j87߳3{7s7k7y)7 QZ7_`H77֌7{~7R7,7c< 7#| 7լv7pc7Mj07e7P_B7Y7Stl7AN?7H7 /C_8~_8d_8|㷄_8Tu_8jⷎe_8@V_8k\G_8u8_8%*_8zL_8I_8:_8߷^8ء߷(^8V߷^8 ߷^8h޷g^8}y޷^8D1޷^8ݷ^8ݷ̨^85\ݷ^8\ݷ^8ܷw^8ܷ^8|Gܷ1^8 ܷ~^8۷x^8z۷s^86۷fm^8ڷg^8Юڷa^8fjڷ\^8%ڷ/V^8cٷP^8ٷI^8(TٷB^8 ٷ;^8ط3^8{طr+^81طc"^8׷^8׷ ^8K׷^8ַN]8ַh]8Yַ']8ַ]8շٵ]8Vշ]8Է]8|Է:w]8CԷ_]8sӷ E]8ӷt)]8ӷ ]8ҷ\8Sҷ\8ѷ\8qѷ\82ѷ\\8fз74\87з \8yϷH[8xTϷ[8,η~[8lηL[8Xͷ<[8ͷZ8 ͷͬZ8̷tZ8̷9Z8˷Y8'˷Y8ʷY8%4ʷAY8=ɷaY8U@ɷX8kȷyX8{Lȷ4X8ǷW8XǷW8Ʒ]W8eƷ$W8nŷV8Nsŷ{V8Cķh.V8PķU8xķ]U8÷?U8÷T8-·T8C%·SFT8%S82S8(AS8+?R8ĿōR8J1R8ξ0Q8R0uQ8BֽQ8 YP88ۼOP8\FO8ݻ>O8]O8ܺN8[KN8ٹM8VsM8ӸM8:PL8̷)L8GK8¶IK8=J8򸵷hJ84PI8EʇI8*I8H8$#'9H8B8qҺ>8>8eT>8)q >8ݷ=8 C*=8ˢR{=8jO8@=8ϡ=8|L <8Ġb~<897<8a;8;8wG;8lם:8 2:8.:8כf98!0X98hf688oj88Qߘ78Avf78CE68nJJ68c58˵z58ӓu48`쒷38?v"38q28 %182s18>F08I/8YS.8\-8f`8-8cqp,8{}+8~*8*8ׯS)8CDŽ(8 ヷH'8d'8y*Y&8V%8$8O$8 ~z#8G|#8@{P"8y!8jxY!8w !8v 8ыu,? 8ŢtW8sנ8sb8&br.8q8>q68]p8Zp8oF8&o8oo84o8o8In8ޱn787nC8sn*8XnsI8=ni8[#n8Yn=8m#8ml8my 8m* 8F}mF 8amn` 8Gmx 8-m8 8mܟ 8BlƯ 8lԼ 8l 8lT 8Opl 8Al 8l 8Kkl 8k 8k 8lk~ 8u}kf 8;OkU 8kuT 8j`b 8jo 8yiKm 8)i\ 8qhD 8ah/) 8Zh 8gu8UgR8fa8f8d8G+dV8c`8IcO8bp8WbM[8aH8jaS78`!8`8`8_z8&^`8h^q!8]8"]8bm\=8f[8Zw8Z8>Yn8pX8 X8_{W8VS8kV8V8U)8GWU98Th8@T8Tx87LST8XMRo8n.Q{8 P8N~80N84dM%[8L68Lͻ8tK8J8!J8I{8IkW8_CII8H8Go8GX 8G83H83H8IG8xJG 8>Ke 8%M 8JPNf 8GM 8_M[8ǜPڢ8=R*8i!R]8OQ8gR҇8 R 8TRW<8Q8HnPe8RNg8M8JK,8H@8lFA~8FD88B8A8b?8(=J8ca<8 ;r89-848Ė8K78I78P6ks8_6V86887$8El7878r(88|~888Gw8w8D8/ 9e8 988r8a888ٛ8&[888878)7'868 580558j4P8358m2=81A831`8}0%8/Ũ8:/8N.80.8--8 -g{8x,8+g8>+Q` 8* 8) 8y ).4 8Y(p 8o'M 8&8Z%$8$08#?Z8"8g!8 }8a8&$8aP8‘8nz7HX7q673F77w m7 277(7.7>7c7F7+\7 R붟7[j液7?7ݶ7ضW7tԶoj7жZ7̶q7Jɶ/(7Pƶ 7öI"7L|7-7737?7K8>z8R8庶8oۻ&8r8@;8c8*k 8(pe] 8¶f 8k2Ķ>=86ƶ08Ƕfl8;ɶ8Wj˶> 8ζ 8e0Ӷ X 8pcնQ 8ضc 8<ٶ8ٶ_q8)Qڶ8նZ8TӶ38iζ8ɶe86Ƕ8WǶ8iƶ,R8ƶm@8Ŷd8Ŷ=8ŶG8WŶa8Ķ:8iög8¶.8GA]8;8ĿNw8ܾUl7"73_5<7lM7G0_7z߻7Bܝ7z|#77^Z7j7Y7˺'7;O%7ᱶ%7u7 R<7Qf7,+7Ik7+72_7-72^7_:7sP73m"7EK7E7v7E7(.7!67s57CU7a쇶o7$7a=]7~73xޜ7*sV7zcm7=g7ak73\P7~V07P 7#^K7Eʲ7i@R`8Y?`8㷩-`8ⷘ`8Z `8"ⷂ_8᷊_8P`_8k᷾_83_8lැ_8෬_8 ߷3_8߷%|_82߷n_8޷ca_8޷T_8N޷gH_8/޷<_8[ݷ/1_8qݷ&&_8l(ݷz_8Kܷ+_8ܷG_8Qܷ^8 ܷo^8۷S^8~۷l^88۷^8ڷ1^8 ڷ^8Dgڷa^8]!ڷ׷^84ٷN^8ٷ^8Mٷ^8bٷ^8Yط^8uط^8,طv^8׷lk^8׷_^8]I׷S^8wַE^8Oַx7^8[ַ8(^8 ַ^8Eշ^8aշG]8 շ!]8uԷ]83WԷ]8%ӷ ]84ӷ]8^=ӷc]8ҷsF]8HxҷQ']8#ҷ^]8Cѷ\8Cѷ\8Bз\8Hmзp\8ϷF\8Ϸ\8 Ϸ[8MηN[8<η`[8ͷZ[8Tͷh&[8h̷zZ8h̷Z8˷Z8Ry˷kEZ8B˷s Z8ʷ Y8ʷfY8ʖɷlMY8ɷ2 Y8oȷX8<+ȷX8Ƿ:AX88ǷCW8ƷBW8FƷ6lW8ŷ#W8UŷV8wķV8cķ3AV8t÷U8 s÷eU8·UU8Y·7U8 ·bT8QZ`T8- T8yS8&`S8\S8F2ԮR82TR8<Q8Q8D;Q8ǼOP8IyP8˻P8LO8ͺ LO8LN8m˹9|N8IN8uǸM8D!h*D8RʬC8W}C8;竷+C8Zx,B8 _B8 EB8b4\A8ʩvA8b;vA8q6A8땨@8~0@8f˧#@8fK@8@8㜦?87r?8iѥw?8,jD?8?8MK>8+>8u>8K@>8آ>8%a==8桷=8h/U=8O样=8 `<8՟<8QF;<81;8B;8y<;88֜:8l-/{:881:8U˚r98/98R88588ŗ>78g$78-$ғ68EL>58o%a58u48&48TÑm38sؐż28ꏷI28O18M 08:/83"/8-O.89-8NF ,8.T+8cZ5+8v_o*8 Ȫ)8@(8C((8₷l'8 +&85&8g-U%8Aϭ$8k} $8VU|u#8Iz?"8PyK_"8dqxF!8Hwm!8K1vN!8.ui 8@tP 8gs 8cr{8Eq8Oq s8xpT8)Bp>8}oF08yuo<)8i"o4)8cn.8n&:8`nMJ8.n1^8n|v8m8m8mi8btmm8|Sm 8F2m5 8mX 8lmz 8l 87l 8l 8zol; 8.SlD!88l!8/ lX0!8l<@!8k`M!8kW!8k^!8kc!8Wkc!8O0k7`!8k'X!8jJ!8jX7!8j!8j!!8j 8[j 8qi, 8Ki!8Kh!8Rhq 8mg 8g 8.Dg 8f|x 8TfWY 8Ff3 8lek 88e8)e8Hd>8VdEx8cvZ8}c@8qc'8b8.b8ea=8Ba>8B`ê8o`8`4m8_,;8'_ 8{^۽8^!8m]iH8\:8I\8)[x8Z48FZ8Yd8\Xޔ8-+X7j82bWh8Vo8[PVca8VnJ8xU'-8U8S&U8tT 8`T8xSف8~pR$683XQ8AP8;=O*8?UNp@8PM^8L8K'8KR8wMJ^8I+x8H8w=H8|G\8UG8FSP8Fʹ8F8ЎFn8F.&8G08!G 88I;8J89KG 8UL8Mؿ8YN^M8P8dPMe8P9i8P/8VOj8DsOy8ANh8,8<8Rv;85:-8n8878P6868*5858\585X8fK6j86sM8>7-8!7!8b%88!8w8M8a8}8w$8o9)8988+8G8888 F887&8=Z7~486$=8l548"58>4`8V38t2N8Ġ1K808/088/#!8-//8{.E8J-Q8Lv-8,8 _,:8u+8?$+ 8y*P 8)d 8 )ۥ 8H( 8~' 8&E 84%Bs8?$˞8\#j8"=8 !8k; kC8i8=8h8x8 8ϲL7;787 7Zd \7 Z7[:|7![7*N7Pގ787Z7+Y7D鶢7䶛77dk۶97ֶ@7ҶM&7kζ7ʶ"7~jǶβ7;Ķ7L7757(x7ʌ7$wO8_8g j8Hp81Zx8iعĊ8v 88h 8 8]? 8Of8ĶF8{~Ƕ@8kȶAg8\LʶzZ8 ζ> 8ӶT 8lӶ0 8`Ӷ} 8&նp28,ֶV8Gն8uӶ8Oжf8sͶ8ʶn~8/ȶf8ʭǶq8Ķ;8Ķ~e8hHĶ+l8!)Ķ384ö 8ö8gö85a8˿818oƽK8aq8Hy8Êd7Ȳ7jM77bmT7̸ 7 7(&7":7Nc797Q7鰶M72}7-727c4@&7*V7qD7:K7$ 7]{^Q7m7蟶7l!7c7י\77O`7蒶L7,l*|7܍Ǧ7<:7I7Ӆ7{m7CY*7zu37_^8ojշsL^8շ8^8ƿԷS#^8hԷ ^8ԷN]8ӷ7]8]Wӷ]8ҷs]8Ԙҷ]86ҷqh]8[ѷG]8&nѷ%]8Iѷ]8з\84з!\8Ϸ\8[Ϸ^\88η1\8q}ηc\8p η<[8Jͷj[8'ͷn[8̷%9[8=̷[82˷Z8Q˷lZ8ʷVZ8cʷZ8ɷ&Y8sɷyY8Vȷ^Y8ȷY8i ȷxX8Ƿ6X8VǷSX8ƷxX8+(Ʒ W8˯ŷW87ŷj8W8uķV8cGķV8Z÷@YV8ZW÷ V8h·U8wg·.qU8!U8jwT8/aT8t,T8 TS8ߔS8jc,S8wR8J'={R8r R80kQ8մfQ88Q8ŧP8<FP8򽺷O8y>m~O8:O8P=mN8ܻCIN89M8kuM8e4( M8鰶L8-1L8K8 %VK8$J8zJ845 J8I8|1I8EH8YH8 :G8ۍG8OG8gF8SF8͙6E8H E8b3E82MD8I}D8I&D8UثC8|hbC8e2C8捪B8"؜B8帩UB8PPHB8 騷wA8 A8RA8;)A8Uv@8񦷍@8(5o@8*):@8ĥ@8_ ?80?8>k?8>(7?8 ?8O>8ߢ,>8m1`>8X1&>8~=8֪=8h=8#=8q4<8䞷m<8DQP=<8M;84;8z.;8қ:8& a:8qt98|9898=т88v78~q78mٕg68I68)ƭ58fKk 58fie48烑~38Y 38V28Ž18Ӎ08D⌷F%08lHd/8);.8 -8'-86*:Q,8;+8@O*8te*8 nA)8(8m'8恷'8!_&86EK%8'~ %8}}il$8 |#8ޮzE#8_y!"8 xB"8v!8Aue!8$t!8sI 8wrn 8A5rH4 8 ~q 8p8Ep}8_o 8Sox8nJ8fn8In8n8]m8zm8[m8-mw 8Gmc3 8l~T 8lw 8|l 8!dl 8[9e 8ed` 8|d: 8d 8cM8>c?8b+8bmb8bg8/ak8aG8X`k(85E`18_8G_8L_q8^08Yk^8]}8"]8 \|8\D8;b[8Z8:tZ?8SZY8PZ8Xe8kW8V8oZV8U}8Um8:iUre8TA:8sT8S82S8SRV8H\Q>8_PAt8lO8N8M8iL8nK8bJ8J _8GI8aH<8 H Z8BGO8G&8pFG8d$F=8Ex8E88cE/8rE8zEO8PFG8-H^8qIo8]J8gJC8VK8L)8ƵL<8/ M8YMu8MMt8&M8LL,8Ks8HJ+8=eHƭ8=F&:8 C8gA8Ԭ?A8v=v8&;8l:898V7868"5V(8K4068SW46884,8O'4X8k48R4d8`58\586Mq87?8.788:8Rw8|r8x8.888989?818]88!8}8?8 82c8Iv7w86x8j5(g8/4eG83A 82T8 28;1ٞ8D0a8/8QZ/8.58 ^.z83-/8da-8P,Mc8IE,48)+i8+C8UT*, 8)m 8( 8+(K 8h' 8& 8%o8$8*#!@8"am8Z!*8a 88i8h&8QJ8O$v8V7ѕ7@0n7a#7LU '7 7/(7>g7Ѻ7<7o%7gK\7{7;77Ժ޶7ٶ7Wն-7ж7̶.7ȶ79Ŷ?J7M!737ɻ7+ 7붶77(77p8o828yE\8N8ȷ8Ӹ_%8E8oQ$ 82E 8CL 8]LĶL8Iʶ8ʶ`78˶sy8 ζ 8#նJ 8׶- 8׶8]ض8Tض8>׶߾8m-ն8=Ҷ#e8Rж-8ζa 8̶e8ʶ8^Ŷ8G¶u8F¶iK8'k¶,8e¶8) ¶ʫ8Td58 \8!38q%88=!%8Pڴ8kŹ&8 27:7,7 7az7mK!7A7NZq7'7DA7N믶7X77hu787Ũm7QM:"7̥`U7#A\7Ħ7 7;M7f7a{7Zx7]L7+F7㒶77"7H7rm75_d7e7+7|75v7qq7kt7~Pf7P`D7K6[a7U'72P7J^7PE87? 7:ňa8Ԛmsa8BC>^a8&CIa8ᷘ4a8?0 a82 a8mC`8CA෰`8߷{`8ܚ߷`8H߷(`87޷`8o޷/`8GV޷v`8޷e`8ݷT`8iݷhD`8PݷR4`8pܷ$`8ܷ`8<7ܷ`8۷_8۷l_8V۷_8 ۷_8ڷ_8yڷ_860ڷh_8 ٷҔ_8ٷI_8Tٷy_8 ٷl_81طD^_8pxط^P_8_.طBB_8׷3_8׷)%_8M׷_8׷e_8Tַ4^8!eַd^8ַ^8շ^8tշ^8q!շn^8qԷY^8wԷ9o^8!ԷW^8ӷb?^8nӷ%^81ӷ ^8 ҷ]8WWҷ ]8ѷ]8ѷ]80ѷm]8зH]8dз5#]8YϷ\8MϷ\8&Ϸ%\8η{\8KηN\8qͷ\8kͷ[8?̷[8̷[8 ̷uQ[8˷[8*˷6Z8ܴʷ{Z8>ʷmZ8ɷF1Z8PɷY8{ȷY8aȷfuY8Ƿ4Y8ErǷX8rƷX8ƷlX8 Ʒ%'X8ŷVW8ŷW84ķSW8+ķ W8÷ V8<÷vV8 ·;+V8M·U8U8z^DCU8T8nLT8QT8L~S8S8W[US8R8ݦR8MR8⢼Q8&Q8n9Q8F-7P8yP813P8αO81uPO8-N8/N8UN8#,M8oHM8K&L8עirL8>eL8K8c-K8]J8 SJ8 I8 {I8I8m>H8)XB8֨`mB8@p+B8 A8ίA8BtA8jߦ:A8=|(A8-@8@8oREc@8 X/@8?8!?8}+?88O_?8⢷*?8sD>8G>8&>8k.C>8>8=87{=81=8P<86z<8Y(<<8$P;8ˁ;8)x);8h͚:85C:8Mg98(S98엷88!'L88]978$/78W68⓷f58+\58'ݵ48C 48]T[38tק2818Y518_zI8,^c8/]Z8 {\/8\8[)8Zș8TZP8Y8MY8vY*8B}Xՠ8wWn8Va8rHVuL8дU/8q7U8T8ST 8SB8eS'}8RU85R8DQ8xhP8OT8Nas8Me~8L8K8J8Js 8bI8Hh8LH'8GY8fG*8qFb85Fp^8-E8D}8|xD8& D98NDtX8ؚD28/EM8jF*8G8+H08He8#H8'WI8pJ8XJbs8CK)8:wK8&KR80J8-HB8^Fu8C?8pA8s?H8<Dڷn*`8(ٷK`8BٷC `8cٷG_8ٷL_8طQ_8Tط;_8V8ط _8 ׷_8z׷1_8yU׷a_8׷3w_8ӻַe_8nַS_8mַA_8շ-_8շ_8 .շu_8}Է^8ʇԷ^82Է^8ӷ4^8ӷ̐^8+ӷ@v^8ҷZ^8tҷ=^8`ҷ)^8,ѷZ]8^Wѷ$]8з]8зs]8+зq]8ϷJ]8g\Ϸ!]8}η\8(η\8η\8Ȭͷo\8=ͷ[?\8̷| \8w\̷([8S˷l[8Pw˷Io[8˷7[8ʷ(Z8ʷZ8]ɷ߉Z8`.ɷ}MZ8ȷZ87AȷUY8<ǷY8&SǷ+QY8ƷY8dƷ X8ŷX83vŷ/EX8ķX8ķW8ķsW8÷Y+W8"÷V8·V84·NV8p[V8XF U83iU8WrU8Z࿷T8h{T8r)T8wS8S8ą-S8 R8~R8%R8Q8knQ8ơQ8A$P8 QP8'O8\{O8&(O8N8$[N8ˢ3M8i iM8!M8L8HLL8K8ŐZvK8 K8qJ8>I4J87I8_I8'pH8mVH8t'H8$G8]G8ufF8F8g8>81._>8P>80=8f=85==8<8<8_'8<8;8r;8s;8kř:8m!:8.X98@&98#ז88(88[B78 q68fP68߮58M䑷58p]48Ԯ38828OE28 e18x08<,089L/8.8m-8ԇS-8~醷*=,8y+8*85)8TE:)8x(8a'8̀'8m&8p~%8|(%8}~{z$8z>$8xQ~#8J{w#8XEv"8"uv%"8mt^!8Cs)x!8b1r4!8^q 8rp 8]o 8`oО 8=n 8Xdn 8m 8m 8=m" 8lW 8l_ 8_l 8 l\ 8k!8k8!8O~k?^!8Lk!8rk1!8j!8@j!8{j"8Fj!B"8j f"8?i"8i "8i"8#}i"87bi"8Jip"8r3i4#8;i #8h#8h#8h%#8Vhk/#8dha;#8AphK#8mdha#8Vhp#8;hR#8uh#8~gK#8fܓ#8kfM"8=f"8.f,"80e!8Que!80e!8d/!8ld٠!8#d,!8cY!8c&3!83.ci !8Jb 8pb' 8 b 8a~ 88/<89R8I858]6=/8rP5=8ZG4^8a382%8Ƹ1808͑08Ȑ0q8S0o8[18M1%8G2l8[3c;8l4O848Ε5T8_68&787 U8s8V088O18(9T8"9`8/88=x88b7878684~8=3xf8Ι2-481"8018>700Q8/^8q/>8/!8.H_8R. 85-8S@-%8,\8+Y8";+8*8)`8)m 8f(I 8~' 8'Y 8S&2 8%H 8$ 8#O8f"҇8U!'8t 8=8z8i [8"3C#81n98 [8A7^RX7q7; \7N b7:gx7~7<777ΈvK7˜7 7ҟ7IܶN7׶$*7ЎҶq,7ͶyT7ɶ7.Ķ7$77 (Й7͵t7Z07%7PE77(o7#z8f:8dK8!8Wݱ8B8;18+8C8@c 8DĶ9 8жc 8#׶ 8TݶR 8[CwB 8Z 8{8v18,,8*8嶌8&k,I8߶8ݶ 8ڶ`8ۈضXo8nӶ8˶`8Ķi88%9*8:.8m.F8Z8i8;gk8+8@׸`8뎷84D8ശ8NZ{8}&87jm[77밶7k`7𮶇7,ǭ7L7n-7(ȩ7.YM7㦶7i 7Y룶^7 g7 ۠;7DBA7 [u7Ga7-77VX7o]X7r7ja7H<7P8.8]C8aW8wh8񁶈w8n~84y8Mt8nn8#i8MdȜ88^ 8ÐY884TΌ8NZ8Iu87DOf8]>T897A8i}4|b8}b8ᷥb8*xb8[෉ab8vz6Jb8#'3b8S߷Mb8v߷b8W ߷Ra87޷@a8v޷ca8"޷ȭa8ݷ~a8|ݷ[a8*ݷna8LܷZa8fܷEa88ܷ1a8d۷a8&۷a a8[J۷`8ڷ`80ڷ`8`ڷ+`8ڷ`8ٷ `8.zٷ`8-ٷZt`8rط"b`8AطO`8 Iط=`8׷)+`88׷`8|c׷`8t׷_8ַ_8{ַx_8,ַ_8}շ;_8շh_8<շy_8SԷc_8ԷM_8&EԷ5_8vӷ_8ӷ_8hCӷf^8ҷ^8ҷ}^85ҷ^8%ѷ u^8{ѷT^8{ѷi3^8Vз^8WзZ]8Ϸ]8(Ϸ]8>'Ϸ:w]8޾η*M]8Uη!]8ͷ\8}ͷV\8 ͷ\8`̷Ne\81̷2\8˷[8BO˷"[8ʷz[8~iʷZ[8ɷi![8ɷZ8$ ɷZ8ƖȷoZ8!ȷ1Z8ǷY84ǷfY8ƷsY8GƷ1Y8ŷX8fZŷvX8ķhX8lķ#X8S÷W8÷MW8U ÷?QW8Ԓ·[ W8I·V8!wV8/,V8pjU8A4U8ʿGU8ST8*ܾ9T8_dYT84콷T8s$S8aS8 S8дR8M\R8R8Ք Q8(KQ8隹'P8P8:`.P8uO8WiO8 "O8󜶷ǟN8_H9N8HM8xiM8yM87L8M -L8w K8ňXK8Q~J8EJ8J8Ł#I8!JI8n%H8G\}H8=H8[ ̵G8qTG8u F8՟F8)8_ʟʽ>8Ly>8n˞2>8E=8=8p-E=8ș+<8-<8c01<8X;8`;8Tm@:8&x:8]98G|9888i88C78&A78S68|68^58q48D48R38A28G-18,C&18Wf08l /8.8MZ .8\-8ῆ,8ׅ=+8>򄷿+80U*80u)8T(8}w)(8$x'8C&8,~&&8|%8l6{$8y c$8sx#8U)w`#8u+"8t"8.sZ&"8r6!8zq!8pma!88p9!8oX!8n !8|on 8m 8m1 8m!8lC!8ilF !8l7!8tkR!8ȏk&r!8Rk!8k !8jR!8jK"8uj."8:j,W"8i"8i-"8"i$"8Ii3"80i"#8ho:#8hU#8ţh0l#8h[}#8|qhK#8[h.#8Ch;#8(h#8h#8g#8mg#8fgI#8~g#8g $8ogB$8Ag$8f%8Zf%8bet%8e"8 eo"8e7d"8K%eHR"8dQ:"8^d"8:d"8c!8c|!88cױ!8tb!8 b j!8*b@!8aT#!8va!8#a 8` 8km`y 8m_` 8:}_ 8h_7 8i_ 8^ Q 89]9 8\ 8\.8: \v8Xs[QY8%ZC,8vAZ(8Y78@Y8XR8+X'8#W8$W08lV28/Vl8UUYS8A0U;8RT!8c5Tw8Ss8=S8"R8cR8OQ,|8wQJ8HP8bFP8O)8;N}8BNڷ8'MF88@C81|D8EK8+Ff8lF{n8.^H88#Ia8+I8H8=E[8BB8$>'78;8&&987_8F5&O83gT8m2q81818P0'8K/b8./81g.z8 o.>w8Z.X8L/28C/8g0z8M18 2U8u2|83x8@4&8k68w787Hr8888P8D88Δ8l8f 818C78G68)5628338^2gd8t1#80T!8/b8/8Of/8H/8/o8.783W.u8-o8-o8b,'8+8%*VI8$*ֆ8R)8(8'H 8KW' 8P& 8k&3 8_%[ 8Ɵ$ 8h#8w")8e!Y8W y8U86G8-a8}Uo8P8!87XuB7F 71+ U7u 77 b7r7"7o7/%7Qo"<7O m7aඎ+7\۶7vֶ7fHѶ$7G/̶"7=ǶF}7Έ¶B7M#7+|7^^u7I岶7b7𲬶k 7fv|7 7 tG.71u7;|Z8'8>8iC8/#w8]V8{Q@828Һ`8WĶu 80϶qt 8pzٶu 8/ⶸ 8tF 8U 8F8v붷8@=8[H8m㶸)8R㶲88(d 83 8n޶l8P7ض 8̶ x8ö48EF8AĶߏ8=¶jj86"8Y%)8%D8⺶8uxn8(38n8H8M888R >d8@W,8772Z7R7sr7.̽7S֨s7ob7 7䅤7Bݣ77~7IfP7jʜ.7"_^7|mА7,7ҕ7 듶8`28㏶L8čd8PZ|8QS88Ɲ8/f8k8bz8Hu78] pi8Mj-8iez8l`V8x&[8jU8]P8UK8F8q@8L;8w6 8S1\c8I~ᷝCc8;$᷆*c8෉c8@qb8s#b8/߷b8kh߷ib8#߷Ob8g޷wb82d޷gb8޷[Pb8ݷ#9b8/eݷ!"b8Lݷa b8ܷa80kܷa8ܷba8`۷a8Ev۷ݜa8%۷^a8{ڷra8…ڷ\a8x6ڷGa8ٷ3a8ٷka8Jٷ a8ط>`8ط`8`طT`8=ط޷`8׷\`8w׷`8)׷y`8ַ e`8;ַO`8k>ַ:`8(շ$`8`շ`8Oշ@_8Է=_8Է_8NYԷf_8Է_8 ӷ~_8j[ӷvd_8ӷ!I_8ҷ,_8XSҷt_8ѷ^8ѷ^8?ѷ^8;з=^8=зl^8зG^8ڼϷ!^8XϷ]8 η{]8η]8#η^}]8ͷP]8Oͷ"]8̷C\8u̷\8B̷h\8˷\\8'˷#(\8^ʷ([8XDʷ[8ɷ[8<^ɷI[8Qȷv[8uȷZ8/ȷZ8ǷxXZ8~ǷZ8ˠƷqY8*Ʒ4Y8ŷ"YY8%?ŷHY8ķX8Rķ"X8÷LX8f÷,X8·W8z·L|W8·#5W8Ď1V8V8~[V8C,V8굿[U8]?yU8Ⱦ+U8|QT8 ڽT86b=T8鼷S89qߘS8DS81~R8R8?R8 Q8`׊Q8`d.Q8{P84qP8 qP86O8ߗKO8vN8̕6N8 N8㑴̴M8 MM8L8t %|L83L8K8AK8EJ8oJ80J8׀NI8"k;I8H8@sH85H8װG8ۙhRG8" F8mÛF89CF8ǪvE8VE8穷HE8zD8ND88dD8,=D8֧C8EpC8 TC8dC87F B8~䥷IB8(fB8"t.B8%A8$`A8A8nYA8p9%A8բr@8oq@8L@8lN@881S@8i !?8Pß?8}۟`?8bJ?8M枷>8f>8᝷nG>8Y=8˜=8u9K=8L<8^a<8e&<8񿙷 ;8I;8|d :8W:8985O98q88b188cܓ578, G686P]68,]|58* 58^48O38`ۍg283=28C 18L$08:)08P^@/8f}.8~t-8k,85,8˄t+8ꃷ*8~ )8S1??)82Z(8 A'8AwQ-'8}&8nf|%8[z"8XjGe"8Cjf"8i"8:i"8Ui #8 i4#8h\#8هh݅#8Qh#8 h#8gW#8g*$8g$8g$8g"$8vg'$8[gw,$8;g|1$8Dg7$8sf@$8fM$8fMb$8Lf$8ʛf$8Umf%8f%8e1_&8.d< '8cj%#8PUeF"8=e"87dӯ"8W,d0"8[cFu"8˖c$V"8CcJ8"8b"8}bm"8 bY!8Wa!8ba!8ua!8`a!8`!!8_ 8_a 8=_38O^x 8Q_ 8^] 8Y^K 8\ 8: \j 8H[1 8.[ 8cZ8 Z85YH8 YT8X8X8~WӪ8$Vr8V088Vk8UD8uAU[8T08UNTA8dSۄ84aSCw8Rp8cRQ8Q08Q8"Q8pPK8P)82O+8 Nb8"N81MOQ8ULs8qKZ8J]8rJc8 J8,I8zI98mTIR8H588(lG 8Fy82D8C8DBj8QAP8@ 8)(@68??(8q?8Va@H8f1A}8OB8C8ED"X8D8|F8zG87HJ8 G82CT8ƿ?85;q#8788 6ш84v842s8U18QO0p83v/8.K8)-Ԣ83-8:e,8],8b, 8T,8,=8n-8.X8.8b/8O0\8182Fq84#89 6\8S78.8 88db8n۷fLb8W۷4b8"۷<b8,ڷb8aڷa8ڷa8ٷa8oٷa8ٷB8OaB8^W,B8fA8-A8ʢA8fYA8#A8t@8j1 @8Š%}@8XdB@8矷m@8r?8%?8u>?8>8e}թ>8Y>8i >8؛=8 CN=8<8 <8je1<8 ^;8p *0;8Yͳ:8jT2:8y䕷198"982\Ҍ88Z78]’Y78~68h68?Li58b48r 48{|S3828׋18X!18a08!џ/89.8}R.8\l[X-8҇p,8+8Ń+8}肷Z*8?)818u(8 g;(85&'8Y}&8"|I&8z%8:y}#%8wך$8v$8Tu#8%(t;#8z s"88r"8qR"8:p""8xoR"8en!81ng!8m!8 m[!8Ml"8MaB("8`;"84`!8g<`"!8_j!89_ v!8 _.!8^4 8_ 8R_I 8r^-!8$^#!8V]!8\' 8[ 8w[2 8iyZvu 8MY\S 8gY. 8X  8pX[8eW8kW]x8V@8qsVo8KV8.U8\0UH8T_8iTh<8$Tw"8IS8S8oRZ8RO8aQ_8*Q-8P;z8NPY8OT@88O8N͛8M8M8oCL98LK48K8J#8J_8܄IT8a9Ip8*I|8kHS8G8EY8םDb8/Cl8$B,89A8]?8CE>t8f=w89=8ӥ=8[>8,?y8=A8BD8/UE8G=8F8 FБ8E98|UAf=8ӆ<8r884k5x8-3я8|1@85018/M8y.8#-AV8j,B8+S284*m8)8Ct)8\)8)Ɓ8D*Q8*7 8+!8~+8$,*M8#-8?.W80q8X2p8:4s=8t6N878($838X78 7^R868X4d8w3_81V8Gq028 /]8--8`-8Q-8-N8.^8/8$/u18.Q8..C:8uW-8`_,.8X+r8S*8])8h(iP8|'[8)''8פ&8=-&jg 8'% 89%k 8$o 8 $C 8gV#vK 8" 8!8 T8_878YZc8A<8l{(8A0.8bO8V27;7= 7, 5}7H'7X7fR77Z7r7_7bA8A7߶}7Zڶ7Զf7ζ7&ɶ"7zö7:7)77ɤr_7̷-P7q<7n$'7N 77 707;z7V87gI7Pq\7sp8aY84F^8f8x$88^˶ڠ8ֶ{8 ,/ 8h 8L붢 8Hl 8a" 8O䶞 8! 8sp޶ 8] ය 8)% 8 8޶0i 8&@׶81̶Z8]Ķ+8Rf88[8J8ɼe8"8ᾶ8_8P83[8$84*8L|8W8`C8\a8l8]O8{!8mF8Pj8u"U8⦶8쑥|82l8Ţc8|N^8Ο^8xGTc87k8#w8x?8&\8/h8s88Ґ8뎶888-8ڈB8 W8ʂj8A{8͋8g4{8lv8q8lY8g8b8z]=8{X8=nS8SN88I8D8?89&84&8/p8E*d8{d8f෈_d8 &Dd8߷(d8rU߷ d8f޷c8ҡ޷c8H޷c8ݷc8˗ݷrc8@ݷ mc8ܷRc8Rܷ8c81<ܷc8۷c8W۷9b8<۷b8ڷ]b8ڷb8Aڷb8ٷlb8ٷ(Tb8|Jٷ`;b8ط"b8ط b8rVطua8طa8ߴ׷ka8Od׷٧a8׷Ta8_ַva8rַ]a84"ַ Ea8\շ+a8Gշa8.շ&`8ԷF`8Է`8 8Էp`8ӷQ`8ӷs`8;ӷW`8ҷ:`8ҷ5`88ҷ_8ѷ_8 ѷ_8O+ѷ_8kз0}_8drз\Z_84зq6_8Ϸn_8SϷ+^8η^8lη6^8)ηq^8ͷF^8\ͷ7^8̷]8̷]81 ̷]8e˷]\]8G˷)]8ʷ \8kʷ/\8ɷ \8ɷS\8ɷ\8,ȷb[85ȷ/[8Ƿl[8OǷ0[8ƷZ8gƷZ8ŷwZ8ŷM8Z8l ŷRY8ķY8 ķqvY8÷o4Y86÷X8·X8L·jX8 &X8cqW8W8x4UW8 W84V8'}V84V8-U8ƷPU8cARU8ʼU8rST8ۻqfT8cT8뺷S8qEpS8S8R}^R8 mR8-5R8 Q8_Q8Q8.P8DP8O8GO8lO8yN8~VN8 WM8iM81%M8jL8WL8ƒK8XK84$K8*J8hYJ88I8񉭷I8l+2I8H8sH8LH8I-G8󸪷dG8GFq G8&թF8efF8F8E8=!~E8,6E8AQD86릷dD8~yiD8#)D8$C8_,C8uC8ϞC8 ߣB8/B8cB8.B8&\A8A8hA8 .2XA8ŠL A8Z@8ퟷ@8}n@8S -@8?8?8隝[?8,?8B>8 i>8xi>8㚷W=8JN=8'<8 Dz<8b<8[;8+;8Mӑ:8q :8Ҕ}9888ET88yɸ78}78AԐir68{58"y58Dh488e38428?28%g18։08v'08 j@/8&3~.8B-8,`|,8,:,8:{+8 ł*8쁷*8C@Q)8Gԟ(8~'8f}L'8{q&8]dzu&8x%8w4$8Mv x$8Gu$8s8#8/r<#8ޱq*"8p"8og"8Uo*b"8qnSO"8@mE"8CmC"8lG"8>l(R"8pkc"8ak4y"8ok"8j "8nj&"8.j"8i#8i=#8qig#8n)i~#8h#8h#8%h_$8Bg?$8pgKo$8%g:$8ufj$8 f$$8|f`%8Wf+%8:f3%8D#fe4%8f_1%8ej-%8-e)%8e%%8e!%8߂e%88he%8ZSe%87Ce%84e$8#e$8eu$8ef$8d#8:d#8^ dB#8qc#8EcE"8z_2"8>_O""8^?!8G^6!8'^!8:^s!8;b^[!81]^n!8<]Lm!8A\b!8[ K!8b([&!8Z-!8Y 8PY 8X= 8bXI 8nWt 8NTWG 8>VP 8jV8-U8Uw8UN8ͲT(8QT8VS8XS8(S8Re8?ERUq8QJQ8YQ%,8P8Dz8;s8:8F: 8r:d8;t8<8a>8?F8?BX8CF}8%C8TC=8B8f<8\88e4D8ˮ2c8208/8q.8>>-8,fU8 +8S*X8)Q8/(98g';o8&w8ȡ&X8&#8-'8ą'87'8*'I8Uq(8cv)_t8{E+8-gN8 08W3/8wC68t7H87 8@785*8u4j8 3 8~1-8/8@ .W8,Zs8s+W8?+8<+8/,v8".s8.8I8/98.h8-j8,r8+{8Ch*[8@)]8 6('y8T'W8(&W8&.8%~8^%S 8%T= 8F$W 8&$' 8#Ġ 8" 8S5"\ 8ib!Dž 8Zn 8MXT8} 8a88e\8AD(]8$8oJe7ޠqH7 X7 7 7a7н7r=?7}7ǂﶢ7NE87>7߶M7ٶ7Ӷ[7$Ͷ7Ƕ|7|7WM7ҶO7-ʲ7~67V.737ߦ7,r7ն7l]y7_ 7{7a7#Ǧj7n˚7\7袦@7mO8Cìn~8\ߴ8c8Y#ɶ(8_aӶ%8Mܶ8t 8< 8嶡* 8 8.޶ 8Xٶ 8Iնt 8e/Ӷe 8WӶ 8FҶ@8aжk8˶8̡&8Y8[8eN28o8848Ⱦ u8껶g8I8y8Nm8sב8ѰcF8]Z8x G8׬bj82.*8헪f8z8DV8' i8ꥶG8 w,8G8>⡶8yq8w8Ts83蛶:8Ul88388o808MB8/U8SWi8(q~8|P8.zF84i8з_8Ϸ+_8Ϸ_8"Ϸ7Y_8η1_8m^η_8ͷ^8ͷ^8/ͷ^8̷>Z^8{`̷+^8˷]8E˷]8 ˷p]8 ʷe]8}Fʷ0]8ɷ\8hɷ4\8ȷs\8ȷS\8ȷ\8ĤǷ[8c2Ƿ[8Ʒg[8tLƷ*[8ŷZ8%eŷBZ8$ķoZ8}ķ1/Z8ķY8÷ǭY87 ÷lY8·)Y8F7·X8ңX8bN_X8|X8feMW8𿷌W8|JW8,W84+V8 rV8(V81U8򻼷U8EFU8λT8VW{T8ߺZT83g T8>SS8tcS8NS8V%R8{`R8wR8 Q8QQ8P8sP805P8I\O8sO8 O8 6N8HN8 M8~M8XhM87L8eNL8K8/K8 K8sJ8cXJ8I8 I8'7I8H8O*s~H8ô$H8@G8ΩKwG8^#G8F8{F8D6F8E8CߣE8ܦ]E8ewE8%fD88D8N[D8D8mC8-tC8JΣtC8nH>C8C8௢:B8zOB8$hB803B8'A8A8ZoA8|SA8A8J|@8̡Ø@8+;U@8[@815?88lw?8/%?8[>8u>8>8f왷ݳ=8BPK=8M[<8@ k<8!^;8#yv;8^:8@l:898M9888k/88ay78 68湏*68Ꮇ}5848)48J^38i28ˇ18'18g08އD/8~.8".88~a-8BZq,8:})+8q*'+8ʁ*n*8)8u()8p~Y(8(}'8{*'8&zy&85x%8_wiY%8vL$8tzb$8}s#8qr0#8^quI#8ep #8,o"8n&"8n"8{m"8Jl<"8_l"8Hki"8rfk"8ajH"8j#8{Xj-1#8>jN#8Lim#89i1#8YiK#8i#82h$8hahG$8gt$8g+$87g$8fl$8f;/%8?f.d%8f%8Eel%8 e%8Ne%8qe%89]eˬ%8Ge%8O0ef%8(e%8Ad%8@d{%8Ndk%8d;W%8Nd<%8Պd%8\|dM$8hdץ$8Jdk$8td>$8c $8jKc#8b#8kbq#8 b#8na=#8aW_#8Ma9#8a#8`"8J`"8_"8@_"8^'x"8/^7c"8B^(8"8]v"8{]!80]z!8\]!8\!8/\!88[s!8.[!8"Z!8Yd!8vYb!8XP!8SMXO*!8WW6!80JW 8QV 8]V 8Uut 8zU]C 8 Uh 8T8,T8LS8XkS8S%c8RE85R08/Q 8UQ8P8)cPT8&O8\O!s8@N[8+N78?M8L|83L&u8oK]G8CJ"8PJ8<\I!8 H8*H=8tcGo8IF)8FF8DK8Ce8B8.kAQ8?M8>8}e8n;38zZ6(8h7;878bk6e8\d482F?8q181]/8s- 8Ҍ+ 8)ʹ8H)8(8cx) 8 +ט8-h78.8/.\8?#.D8-18+.8@*c8 )t8I'ͣ8?&8G%L89% 98$88$8xj$F83$) 8#; 8#" 8N"Y 8]d" 8=!Y4 8!Z 8/ C 8* 88c_8Eڳ8B8}:P8e83C777 E77]L77=67R7W0o7j ﶌu7Я7G7L߶v7kٶM7e2ӶZN7̶@7~ƶ:72;7,|7a7װh7䮶7|D7;鮶K7N-,7RSi:7^u7Iv7eդ7)t;7FLx76٦71X7Q7ե7Z8k櫶87+8C8ƶ^8~>ж 8_ضj8O@޶o8$w 8Di 8Oݶ 8^ضW 83Ѷ8ʶm8Ŷ 8Ca8 Y¶8Yö/8>Ŷ8f!888D8ڿ8T8 8ݧ`8ǹt83dT8w³8pں8_8⮮n8b8'?`8U"8˩8Ġ~8qd8+Rc8+cط6c8طc8!׷b8|g׷pb8׷9b8ַb8mַ،b8ַpb8շ5Tb8tշ7b8a!շb8Է(a8zԷa8&Էa8ӷ/a8+~ӷ3a8.)ӷia8ҷKa8}ҷ+a8&ҷ a8)ѷ`8vѷ`8ѷ`8зj`8hз,c`8z з ?`8\Ϸ`80QϷ0_8ηM_8η`_80η[|_8[ͷ=R_8piͷ'_8nͷ^8S̷^87̷^8˷9o^82e˷W>^8ʷk ^8!ʷZ]8"ʷ>]8`ɷo]84Gɷ9]8;ȷ\]8hȷ\80Ƿ\8?ǷV\8Ƿ\8ۣƷ?[81Ʒ£[8־ŷf[8Kŷ([8ķZ8eķӪZ8÷kZ8}÷*Z8% ÷Y8I·Y8V"·fY8]t$Y8l:X8vMX8vR^ZX8h޿X87jW8W8~DW8 bV82V8/#lV8ܭ7#V8.8U8»U8Kg@U8ԺT8]T8幷ST8\lT8 ǯS8y[S8McS8ïR8 WR8f[Q8 Q8`GQ8R P8#P8,P8xxO8iO8$DO8 N8􍱷\@N8 AM8拰wM8$ 7M8L8 FJL8LTK8 K8@ K8J8䕬]J89|I8ġTI8)CI8ѲH8=*H8MʩH9H8XLG8S訷IG8ys@G8 F8nF88@\F84ЦF8i E8E8ҠVJE8L>; E8ܤD8|bD8XD8)D8n^C8C8zC8\AzEC8nᡷ C8wB8B8mB8UK6B8gA8`A8A8GA8Q9qA89ĝF@8K{@8dϜ0@8pO?8\˛U?8B9?8>8#>8ʍ>8E=8SfE=8I7<8Y<8WW;8Y;8픷 :8"2D:8r9898R呷88;78I978vF6858ȍ158팷+}4853821 38eSN28r183%08AN08ІM/8.8a-85 -8ZM,8+8W*8ـ"*8N p)8m~(8|(8Zh{@{'8y&8̆x]I&8+wy%8u<%8ti$8+VsW$8%r#8 q6#8UpEg#83o?#8&snN*#8lm"#8+m%#8Jl4/#8l~>#8kTR#8HkSj#8jc#8]Mj#8Zj6#8i8#8 i #8SVil#8ci($8Ih^[$8Qh+$8g$8ga$8gi%8|fB%8Lf|%8e%8oe%8ce( &8,e5<&8eF&8d>&8d-&8d9&8dZ&8d?&8std%8Yd%8;d%8d%8!d%8ct|%8;cXR%8c!%8Ƶc$8gcx$85Gcx$8br$8wbKG$8I b$8a $85aX#8`#8`B#8`#8iQ`t#8t_HP#8M_0#8!_Q#8<^V"8E^m"8]"8] "8I] b"8\;"8'\b"8;\"8[ "8=S['"8Z1"8(\Z_"8Y"8@Y!8$X!8&3XK!8W!8n2Wޗ!8ԭV}!84V<_!8U1!8gU!8.T% 8T 8 TӋ 8Sm 8E1S@ 8|Re 8sR]8 R8aQg8VQ85Pg8LPI8O.8LZO8NA8?N}8M8XL!8>JL~o8FK558J) 8g&J8OnI8gH`8G ~8AGYJ8?F8FQ8)1E8#DvH8C$8vA68j?u8=;J8<8:,* 8*6%^!8_45!8^4g 8R5,S8e5I8!6n8>68Q583j8,c1ʔ808118.4Q83N82b828Kh1R80]8{.8{,%8j+)n8)D8^(J8(>8{*'A8a%8!N$8"8!Ґ8)"78"8|"8 !j85!8 b8t!q8#88`(38v-{8I38N798<988n685m82380ӧ8A/0$8j-!8(+_8(8'G8-&&M8-&48='8k)h8Y-8.8-c8b-8n+8 *P8<)8'o8 &8[$a8$,8#~8S#8nM#@8R#8:?#.8# 8"j 8=" 8j!4 8! 8 G 8S` 878n8jSV828m8a 8_8>8Z47 7&7`=:778 7(Aq7ڊ7v7ַ鶫7䶉7߶+7Kضo7pҶ7!̶g70ƶ777F7u"-77Jbu7p7\7^I7߫ћ7nߪ\~7-;7J7 7Ԩ1=77DP7=F7W7ܨ;08`3e8)f8[*8! ŶX8Ͷ8Զ8 ڶV8ܶ8ܶ:. 8ض8+ 8q(Ӷ8˶8Nö8틼̖8S}E8DF8hqӴ8Pػ8MK8ۼ68xľ8۾>8Lmk8 [8;뿶@8t:8uc8jﱶ8tA81B8BH88\Vt8a8騶8ħІ8I8\u838Ϣݸ8 {8Zv8]8:BJ8Ǜ,;8D08󹘶+8')8鍕*8쓶c8Hַ c8mշc83շb8Kշb8ԷGb8oԷb8NԷRkb8PӷLb8kӷz-b81Pӷ$b8ҷpa8ҷ_a8Nҷ֭a8ѷa8:ѷwka8FѷkIa8з&a8зta88зn`8#Ϸ`8gϷ`8"Ϸn`8η8G`8Jdη`8η_8ͷ`_8>ͷ_8f̷s_8.u̷RF_8̷_8˷4^8/?˷^8ʷ^86kʷR^8ɷ^8ɷ]8k&ɷ<]8ȷC}]8Iȷ[E]8oǷ ]8qjǷ\8Ʒ\8ΈƷI]\8PƷQ!\8lŷ[893ŷ?[8ķ?i[8Mķ*[8÷Z8g÷Z8·kZ8w·I+Z8·*Y8Y8/'fY8>$Y8>@ZX8̿X8YYX8a德eX8qCW8W8_.DW8V8]V8e+@lV8"V8T@U8ʺU8qS5?U8@ܹGT8d4T8(츷QT8sS8`ݬS8~XS8S8;R8 SR8ώQ8 Q8TBQ8P8uuP8&P8CO8dO8CO8w N88.چ>8>8Z=8T;=8A<8/E<8O;8Ϛi:;8ᓷ:8#:8`98Ϛ88ѐPG88B78V368`K6858ձ48׋/48u3828A|18b<181{08ߥʺ/8ȅ.8t섷F9.8y-88,8aJ,8X$G+8Lϐ*8`)8I~`1)8|͉(86{'8ysH'8b[x`&8w'&8u%8`t+%8sK$8qAR$8)p#8oR#8n-#8u&nM#8ƁmŒ#8l#8Ylj#8ok#8EOk#8j#8dj $8 j$8i,$8i7$8liG$8fid$8h$8pOh$8#g%8zgf9%8F gf%8$ft%8R4f%8eP&8\oeC&8ef}&8,d&8d&8P_d&8;dz&8&d&8 d|&8wck&8c`&8 c T&8jc#A&8c'&8gc3 &8ic%8Pc%8,;cʗ%8#cj%83cF=%8b%8mb$8 *b $8Ϻa $8Ba8$8)`8i$8er`IV$8IP`o?$8`m$8_#8_g#8>_T#89^{#8^}g#8^TC#8]!#8^]#8.]"8U\"8J\u"8[v"8ڋ[)n"8 [Qu"86Z"8gZN"8^Y$"8LXy"8pX>"8Wdu"8iWp["8V0"8kV"8VM!8UN!84U!84TՁ!8}^TZ!8cSQ1!8=pS !8SR 8jR 8/R 8Qp 8XQG 8P ( 8ygPn 8-OQ8 O}8 >OT8eN81DN_85M8 Mg8_L?8>KV8J8n@J8 I8Hr|8 H%Q8aUGI(8F8E8OE8 Dd8ܯCf8BO8?z%8}6$85b8;8:57"8j3K"8!2`!8#2X 8N3H_83E8438&34828 128 1r8)S1M8}s289*4`8_28$2W8z1a8f18=0u8.8,:8g+X8۱)8ç(.8'8\''E8%^ 8 $<8TV"T8 M8VT!W}8!\F8-k!?8"T J8h@H8~808t 8O&:p8-Hy8 k489`98K;m8:8 6L80.8-/8_%.8",_8j?)%8V&M80$u83#J8nq#8$x8Q'U8Gq*DE8+{86 ,8)~+<89`*8(o8^>'8%8V*$8"8""N8!8|!$8!H8"Q8%"8"B8$!8lQ! 8߾ 8B 3" 8W 8]_E 8go 8!8"@8i8Fl8 a8s><8&8%8)R :7Gak17Y:7&D7Z7G[}7A7,w7J7'䶠Y7:޶7oض7nѶ7 ˶k7'ƶB77Z7=/7a}r7yc7FB7Tխ 7ME7{ۄ7'67M"7rܮo7>/7Z7X77W37僪d7鯪!72QR8a88 8.Ķ.8˶8Ѷh8+{ֶ8 ضs80>ض8N"ն8϶Q8;ȶT8>8{庶8=_ 8fy8d8RN" 8i'8kX8w, 8蘾6<8GC;78z8AS8= 8ƭD8?S8L8R 8 @838=!A8䱧D88=8w 8e;8 8ޝg8?B8؝"8!i|8S 8q_8yꗶ18\"8YƔ8z)8GX8jُR8%8h8E8ӈ88 8 &8{+-8K~;8t*z H8uKT8q_8Jmi8hr8VZdz8_8".[;8V 8QC8M8 VH8VC88>~{89Bs8|+5 i8]0 ]8+QO8&?8!q.89Cg8J߷tf8޷f8޷f80޷#f8pݷpof8TvݷOf8ݷ/f8ܷ:f8`ܷe8:ܷe8۷9e8N۷e8nڷre8EڷRe8~@ڷ2e8"ٷ~e83ٷ d85ٷd8}ط*d8طƕd82.طbvd8׷Vd8F׷7d8)׷)d8ַc8}ַGc8'ַֹc8!շJc8|շzc8;'շ[c8ԷW;c8|Է`c8'ԷOb8zӷb8{ӷb8%ӷb8ҷxb8xҷWb8!ҷ5b8dѷb8]rѷ@a8ѷ7a8jзa8nfзna8 зaa86ϷN84M85yM8{M8LL8O*TL8-K8#ēK8 5K81.J81{J8 >f J80ȩ[I8S0pI8<ᨷI8@pmH8uH8㒧a&H8&.G8/MG8SEG8p쥷F84F8J"ywF8%6F8U]@E8hE8 E8=EE8<ߢ E8ဢ?D8"gD8ġ,hD8e;2D8CC8צC8EXC8$㟷WC8~\C8{B8B8FhlB8؝,B8hA8A8~!\A8oA8@8m@82}@8r׹?8=csY?8Ϙ>87>8*>8L,=8BT/=8<8 .<8WGȥ;8e;8Ӓ:898O(S98k88 88d7868KKs68uS5848Ċ38ꉷ'38Maj28318W08{A+08j/8QDŽ.8-8W .-8Br,8,qm+8+8P*8~)8t|G(8l {{V(8Gy^'89x!'8v5&8u&81tx%8|r%8#8\i#8G["8A["8=Z"8NYZ"8Y7"8LYt#89X #8-X#8W#8MW"8IV"8EV̗"8Uuh"8uhU="8bU$"8vTO "8.T:!8S/!8GS!8,RI{!8_R&S!8Q+!8Q !8 QE 8$P 8=Pe 8O 8`hO 8f O*s 8Nc 85NR 8M? 8M{' 8wL 8K8KY8YJ 8¥I{8HW8DH.8JGk8AF8E8H6E8OD X8Cq08C886B8@!88$$8EY' 8K)8)F8k)d18(80 'p8%J%N8#Y8"8 8E X8<8Ad84 8 f8 8 R8 g80 ٘8,8-@8x 8R 8ci 88/)8>X+8 8F8 t8I8 i8 A8$$7_7B7e77e7-v<7:{s7N77M_ݶ7I׶7϶e72ɶ7~ƶq7ʣ¶7gT77v\7ͱ7&Ű7cI7U޲7;E7캶7Ƕx7Q7K7057氶J7*j7}76u7,Μ8388tr8ö8ʶ8w϶8nӶ8Tն!8iHն~8Ҷ 8Ͷq8QǶ^8J 8»'8fS8XᶶZ8R 8_pT828w<8d/p8+]8l鼶u8C 8?Ea= 89C 8L 8Z 8)XO8)8~H(48C8@쥶#8uM8'uD8p8L8Zy8~F8g888o8⟘8_:8􏕶 8u8dn8Ők88qk8on8r8y848d8P8~88}8 y,8fu@8c:q8HlU8Dh8Hd8o_8\X[8V85R8M)8KH8e8طTe8x׷{d8Ih׷d8j׷ɺd8ظַd8aַ yd8w ַXd8շ7d8\շd87շc8Էc8;YԷWc8Էސc8=ӷ=oc8UӷgMc8ҷi+c8ʧҷ( c8Pҷb8ѷb8ѷxb8Hѷ|b8зXb8(з14b8 <з!b8BϷ~a8ԅϷ.a8)Ϸ=a8ηta8nη-La8η #a8ͷ`8iOͷA`8̷y`86̷u`8'̷H`8˷`8F]˷ _8ʷ_8.ʷ_8&ʷjU_85ɷ!_8Rɷh^8ȷ ^8{ȷ^8ȷJ^8\Ƿh^803Ƿu]8aƷ]8UƷ7e]8ŷ*]8tŷ6\8ŷ\8ķt\8!ķ7\8÷[8 >÷L[8·B{[8Y·;[8Z8ouٻZ81{Z8::Z8Y8n@Y88>uY8=ƾ2Y8SX8ཷ\X8m_hX8l#X8 W8hW8qRW8D+ W8V8AyV8̹r/V8UGU8d߸U8DhJU8T8 xT8ZT8+T8 iS8dL_S8S8"R8WR8!xQ8Q8 EQ8P8dlP8 *P8yO8Y WiO8B\O8V N8EN8P!M8n҂M8!$!M8|L8)aL8L8S3BK8۹HK8A/J8ʩBJ8T ;J8਷I8n(I8n=I8H8j!H8}QH8YKH8⥷G81|cxG84G8F8OLF8>rF8ݍA6F8m.E8ϢE8>qE8',PE8F3E8`WD8'D8V^vD8:?D8ٟD8wC8C8M]C8Fm!C8ܝVB8oܢB8F_B8mB8:A8]A8} [4A8nO@8(@8o+@8?8Xp)e?8ٗ >8>ԋ>8Mx>8=8Q=8ˤ<8}<8=;8U:8'Ƒ=]:898u?P!98w|88z78 ݍU'78L Nw68@958Vd 58؍T48'38݈2828:+J_18?Ru08)zr/8/8̃Ta.8P-8%C,8V50,8y+8 *8}2*8g|q)8{z(8py,(8)"x'8v'8nu0&8 t&8©r҃%8Qq %8p$8o r$8Nn0c$8mh$8(m.x$8l$8#l$8kO$8:kS$8j?$8Tkjb%8j%8j%8i %8"i1%8h@%85hV%8g%8#g{%8f&8?f?&8Zep&8ve&8eE&8dB'8 dk'8dc!'8.Scl'8Fc_'81bC'8b!'8bz'8b=&8b&8%b&8.bi&8]b&8fb]&8#:bZv&83bP&8a.&8a= &8=a%8dla%8G)az%8`%8>S`y%8z_iD%8"_%8U_,$8G_$8^$8(x^h$88^1x$8;]^$8]A$8 F]!$86\i$8.\#8U1\#82[{#8b[q~#8cZ3c#8[ZU#8'ZS#8Y[#8Yk#8`X~#8W#8iWl#8Vx{#8~cVY#8U{1#8+U #8U4"8Tl"88TC"8;Sm"8^iS&\"8tS3:"8R"8C"R!8mQ^!8IQ !8P!8~Pp!8NP[!8O0G!8KO3!8N"!8N$!8{ N!8M 8$MR 8L 8FK 8N5K 8V~Js 8 I{V 8 I|5 8QH 8Gh8F8hF?8~1Eh\8~DU883C~8C8gB8hA8AD8?r@m8.?S8&=q!8JR9c"85uZ"83C!83 828\2[82Q8 1c8YQ189V1P852u8Y3'r83!8a2Φ80 L8*/8.?I8u.8.p8i,X8/M+8 * 8*)s8ܴ(1~8(G8(I8('8w'8u%J8l$8#ץ8$8 #8!88=W8g4L8?"8'8s2y8~:Ә8;J?*8+A$8T.B881:8,P8B 1!81y8-mV8;z'8<8 "8Mp8[8V?88,>"8$w8}&`8"'8n'8&8;%Ԋ8Z#18i!f8& ;8B8 4F868;8E1>88=*[8e'8) 8?^88t8iJ8 8O 8oM8}28Dr8ٟYz8'(8|U87D8 8 p8HU8|8@C7C)747˫ 77' 7i73ڶV8N?ӶM8"ζ78ҦɶN7^ƶ*>7"A¶@7*f67w"7=7-=77߂7Z77/+7Xf77s7g7y73|7(,7>;7Q7@8۳K8mCS8޹'8Mu8)ö8ȶ8Ͷ8vѶ3a8Ӷ8Ҷ-]8ж8lͶc8ǶW8fo¶\8E88 %l8{m8T8XuP8G8MWf8cS8{.5 8 8j8Ӟ 8d 8i 8#h 8G8H8a84n8`8S2_8:8k8Yޞ/808-f88KM8Gїg8pNO8/Ŕ;85++8888xG8Wt3Q8 pXZ8lb8Qhj86 dq8_w8V[|8VU8tkR88MP8UI8D'8 @'|8&~;zv86o8.2e8T-Z8(eN8{-$%@8E08v8)5Kh8޷:*h891޷h8ݷg8rݷ0g8<ݷtg8ȵܷg8Wܷ_g8۷=g8 ۷)g8>۷Ef8ڷbf8Rڷ~f8)ڷf83ٷrf8qٷPf8sٷ.f8ط f8(aط|e8طce88׷=e8S׷e8ַae8ַ?e8Iַbe8շd8շd8@շBd8Էd8Է.qd89ԷNd8ӷ+d8ӷd82ӷc8FҷEc8wҷĞc8z+ҷ{c8CѷVc8zѷ2c8!ѷ c8зb8nзYb8|зYb8Ϸvb8^ϷOb8Ϸ8(b8ηa8PGηa8ͷPa8dͷa86)ͷWa8&̷+a8(f̷`80̷`8@˷D`8X:˷r`8ʷB`8mʷ`80ʷ8_8ɷת_84ɷyv_8ȷEA_8^ȷ/ _8Ƿ6^8*Ƿh^8Ƿc^8ƷM*^8`<Ʒ]8Jŷ9]8]ŷy]8ķ=]8T}ķ]8 ķ\8÷\8v*÷G\8· \8^G·[8[8cK[8 [8Z8 ҉Z8񛿷HZ8)Z8Y8xE҃Y8*ӽXAY8`YX8 X8@{vX8?q2X8BW8p!YW8`W8I9!W8ĹV8PO*V8ٸF8F8&E8HE8꠷`E8)E8U.D8Ο-D8{nD8 nLD8ED8 DC8ܝC8Ds\C8%C8B8%B8uGB87A8ZVA8;;UA8@8o.@8P>@8~?8{m?8▷U>8C>8<>8 S=8N =8Ey<8뒷;83e;83x:8帐3:898088gIF88C78 ͌68768y*58V48ց'48*R38ՇE28X18?)18 T6X08K/8h.8ڂ.8 d-8>ū,8t+8XD+8}/*8I|n)8z8H)8ny(8x!(8v'8Q_u'86s|&8ar%8$q'm%8o%8nv$8bn$83m$8m$8#l%87Y 8KN1 80 8rD0Q 84. 8y`-T8,G8w/,28+I&8*/8)8(&)8(8(F8%)o8)*80*v8%)8T(n?8-&S8%8}%&]8I#8"8,!Yr8 8?r8k?8 A 8k?S8g6z86858 0W8d'8c c 8m818;8h;8 (8ѐ"E8i$8%8S&8X%~%8(#R8"!8; E828Tqn8W88888 88>K8wC8e8.8{8OF8Jp8v8F85 8S 8 8l&8 g[8#z88|ӱ8 ~8Ya >8T8Y88Tx88@8붓8 8߶Z83ٶh8WӶO~8ζ 8!ʶ%84Ƕ 8X*ö7(E7M^777d7bD7rP7g7^v7y77GF7777Kq7788Idy8I踶I8#*8]8ö8ZǶ8˶ۣ8ζ V8ж81жM\8u϶l8n̶8Nȶ8ö8U|l8S8عq 8\8 B8g8q8`q8cڶZ 83R 8]ax 8ģC8➶ 8 8ٷ 8-~ 8v8& 88~B8,k8ﺠ,88 g8띶!8#8V88[888@8i8oW83ܐ8B8գ8E8Rϵ8ݳ8n熶8&>8p^88j8{8w8Gsm88o8k8 g8¬c8t_X8,[8_V78^wR{8H No8 I8E98f@8<8p78`28;C.8W)f8H%a8r ʼ88>8Kh83޷h8ݷh8sݷh8aݷ`h8ܷ8>h8Uܷrh8$۷g8۷g8S:۷g8Zڷ$g8~ڷ6mg8R!ڷ-Jg8Oٷ%'g8gٷg8/ ٷf8#طf8rSط}f8׷?wf8 ׷Sf8NB׷0f8ַ f8ַe83ַe8;շe8շ~e8'շ,[e8Է[7e8uԷ~e8KԷd8ӷrd88lӷ7d8ӷӂd8%ҷH^d8bҷ9d8 ҷd8ʰѷc8Wѷ!c8Bзcc8~зH~c8TJзWc8Ϸ0c8Ϸ c88Ϸb8ηb8ηb8c"η gb8ͷD8ڝ:UD89sD8' C8OC8 0 SC8{ C8IB8њtB8*V"B8֙A8SgtA8,̘A8@մ@8԰N@8?8s?8`蕷>8=G>8á>82d=8J<8Cl<8U㑷;8)C;8l:8n:8获c98R"88Y*88 a78Ю68x58 B58M248z38g38ӆQ2818.08!]08Y/8W.8S~-8((U,-8aQw,86+8]}+83|q*8z:)8dy<.)8xE(8^v(8F_u'8Ks&8Lrg&8Gq%8o`%8n%84n/%8LymL%8:mv`%8)l{%8c+ld%8Xkҥ%8k?%8(k%8jg%8d=j}%8si9%8QaiN&8h&8Nh} &8:gr=&8Dg&8f&8f'8*e'85`8Xk'y8yZ8?%8 8}|8T>u88M!K89"8$8%Y8WJ$Ʋ8~#8" f88YAn8 8ts8^8-[8o898B9A{8a8W8l^8  f88}F888W 8"/8U8Cl8}8E8uؼ8q 8 X8HM8NU8c8-]88s8 붶y8>嶗:8~K8?۶Ia8Qն 8yVѶ4d8$Ͷ~84ɶxq8+&Ŷc8(7qe7^7u鷶 7z봶;7DgF7e7-H7ep?7U/7❵7>77E÷ 7.η8=Ĥ8tM8Ce8&8'Œ8YSf8Kö88ƶ8ʶ83̶i8ζ8)ζ#v8_ζ8˶ 8Etȶ4 8Ķ7 83 88 T878͸e8hGm88 Q 8wT 8k 8E 8i» 8K 8G 8㝶 8CE_ 8՞" 8A` 8b8/*788坶'j8[蜶88|8!g8:8?8898wM8w8-8猶"{8zEn8e8?_8;1[8JIY8ſ8Y8 Z8~M~]8ez`a8dve8% s k8,onp8C8'I9}>8]=8q=8F<8sMQ<8+ې;8i z;8Wb:81N985ݍ498~88M78ꂋP)78Mt68K艷58D58uI!J48y38*28؅28 V18c;ܘ08m/8,."/8Yف6i.8f-8RO,8N,8}P+8"|*8׺zT*84cy)8Exb*)8v(8 pu(8}tt'8wr&81FqV&8co%8(n(i%8@*n%86mp%8Gm%8#l:%8^l%8:kW &8rk&8'k.&8ÿjq=&8MjQ&8ij&8sis&8si&8sh)&8Ugi&8kgq&8 gP'8f'8Vf'8ne'8-e(8Ge}(8c(8&b(8*bJ(8ap(8-aQ(8`b2(8!ao(8la'8xa'8t@a'8-a'8zaH~'8`g'8~`0M'8:`1'8z`&'8H`,'8_V&8_"&8Z_ʲ&8_J&8^&&8m^r&8\^lY&8^;&8՚]r!&8.] &8U\b%8\I%8vRP$8Q"$8yWQ#8Pֺ#8e\PZ#8!Pz#8O|#8O3#88|O#8;O#8N#8O"8.="L#8:sj$827 3%84O%8E1\%8/U$8.`s"8`/E$8I-#8J0-f_#8s,#8s*5#88+#8q ,˟#8`e,#8+M$8lJ*^"8B*Y0"89(> "8](C!8J(z!8'6A!8'* 8)='8>@'(8'h8F)ŕ8,8.pv8~.8IS.l8&8Z$}8#678#8d&8 (8Q,8718%C7|81R>L8D58&E %8!e4(8~(/8' #e8^"4835nr 8>; 8 >*c 8`;83'3n8v X8(8 #!8O 8"/280 !8 8 8]!R8#r8R&kZ8"88s$88c8!"W8118C8 808HE$J`8!)#!8;$8'$848]@8X8V(*88P8%F98 :/8'[8?('U 8& 8e_DU8!T8':8Z 8F 8'8Y8g8_5n8 8ry8o8 8Xǵ8C趑T8?s85޶-8eٶM8ն8rжй8 ̶8ȽǶ8*ö/ 8ڿo8W7ԁ77#u7ij7Ʊ7 x7,7Oﴶ.7|7c7'Qi8Ḷ38mL86;8ls8!KQ88ݷi8pܷi8Wܷi8_۷ui8&۷Pi8.7۷,i8eڷki8wڷh8ڷh8ٷh8Zٷsh8QطNh8ط)h8-@طh8׷*g88׷ɹg8/(׷Ng8xַng8nַIg8ַ=#g8նշrf8&[շf8Էf8Էqf8IԷf8ӷf8w9ӷe8ҷ[e8ҷe8:*ҷ}e8ѷVe8buѷJ/e8ѷe8%зd8Ieзd8( зʏd8ĮϷ/gd8SϷ7>d8ηd8Kη"c82=ηc8ͷ-c8ͷjc8"ͷ?c8V̷c83c̷rb8U̷b8 ˷3b8t>˷ Zb8Wʷ *b8dwʷ6a8ʷa8ɷ6a8Fɷ ba8gȷ .a8rwȷ3`8ȷ`8Ƿ`8:ǷU`8Ʒ`89dƷ _8ŷ_8+ŷlq_8ŷ6_8ķA^8AķI^8÷^8c÷E^8?·^8·]8·nj]8ON]804]8\8;S\8⿷R\8r{\8J[8|[8JR[8[8=>Z8̼9Z8[NZ8=껷@ Z8x0Y8Y8EY8"Y8cX8=xX87ʸ93X8lVW8ⷷ)W8Em\W8ZW8򁶷V8_ +}V8-0V8 U8YU8*,BU8 eT8d5BT8 HT8>#S8h\S8NDDS8ưR8HՑR8ʯ6R8K7Q8$ͮ~Q8RN("Q8ϭP8PngP8Ҭ P8TO8׫NO8#ZZN8ݪN8vb8N8詷M8nJM8*M8L8 k{L8h&L8"K8dK84Bk1K86ԥJ8gJ8SLJ8J8,I8ƣyI8a"6I8+H8H85;wH8ۡ;H8|H8G8̍G8fcUG8/G8F8KF8|ힷxF8#@F8.F8͝E8RkE8 VE8ߠE88UD8͛D8R`=PD8D8S|C8mC8C8wB8kB86~ B8}A8m𖷝BA8;_@8ɕZf@8@0?8Hmv?8+Z>8+Js>8j=8򑷠]=8-A<85<8ӏ?;8:8(YW:898ӌ 98 X88E778{68ݰS=68䈷58&A48J,48}8T3828E儷&18218Pc08݇/8.8p<.8r?-8 ,8}R1,8|+8Gz*8hy,K*8I!x)8v8)8u(8B?t#(8r'81q&8[pw&8Ro"&8‘n^"&8n<&8NmG&8mQ&8lk`&8lq&8k&8?k8&8jҥ&8P`j&8NiB&8x~iu&8qid&8^h'8h#'8gf'8E`gG'8Ng,(8]g(8e%C(8%(e9I)8k)e/)8jJc6)8Wb ()8:a )8QaG(8a(8K`'(8`mk(8a@(8<a(8`'8`<'8З`\'8[` '8|9`V'8 `'8_Qp'8b_V'8l_4:'8_"'8^\'8}^@&8YC^&8w^t&8{]&8l]&8\p&8\k&86\Q&8[4&8ڶ[!&8x[&8a.[&8 Zz%8Z%8Z%8Y%8%Yi%8nXQ4%8IX %8W$8zW %8V%8LVZ%8U&%8rU3%8cTD%8 SrX%8xnSI%8iR7%8JpX#8IfY#8WHX#8hHNX#8SGnU#8G~N#8dFS<#8lE!#8E$#8lDu"8CG"8 C]"8VBD"8A9"8@b"8@#8H>#8<.\$8: 7%87 %8[4Zo&81^&8\/j&8.׍%8_-v%8`,$8+($8CY+"%8OS(}q$8!)C%$8qK*$8+$8Z!+`#8j+!8G,9"8C)H}"8'W"8Rn'/"8$'a!8"&!8&| 8Z&8&-84((۠8b,8R.8.Q8J2Z8s$8%8)=$8'8L)8L+F8/`w848:^8>L8ۄA8?68X)D8Ƨ88Yr&8T;j 8>Y 8?;= 8t9^8a+g8r#K8$W8h"Eb8=)8R" 8#8>!w88s"28O&8f8{'+8I 8&)8ZE\I84*e8X8?8,#/8kx'-8 W$/8 #8ӫh{8F=8]M8Ͼ8x>8͏88;8:9+8 y8F 8g/ 8TW 8Hd 8B ;X 8Z  8x $ 8< 8-Xt 8# 8dv 87< 8Ut 8+ 8[M8C 88B\㶺8\޶+n8`ٶ8w;Զ8>϶8 ʶ:38ƶ2t8\¶8A8O@8Ja98׵}7"Į7CN&7*37ݳ B7*7~_7cX8u8xats8*S 8|8߻E88]8K8 ¶858Ķ48 dƶE8jRȶ8ɶ5h8.jʶ8!,ʶV 8 ȶ 8ƶ 8iĶ% 8mw8 8@پ3 8rg 8,^ 8ﴸ 8KB 8õ( 8F쳶 8Dw/$ 8G 8zq 8, 8  837p 8 8+e 8ڕX 8@N 8Hd 8ٛk 8g 8t8Ϙy8<8-8zZ8F8?Ñ~88'[8(@;88xb8 ډ 8"788ℶ8L1ָ8&z8z 8{8bxF8Vt8q8%\m8Гi8e`8a8]a87Y8kU85Q8lM8rI89E8@8<8Z884"8/y8@+z8K&z8p"Gn8` a8KnR87*xB8-18MN 8Mbj8ݷj8:ܷj8Zܷ[j8۷}6j8۷Ej8+8۷i8ڷi8Dwڷ i8&ڷs{i8CٷUi8Wٷ/i8?ط i8طh8-:طh8׷h81}׷dqh8׷Jh8Mַ$h8cַg8ַ%g8շPg8Lշmg85Էbbg8ԷJ;g87Էg8ӷf8KӷGf8$ӷf8Sҷ vf8mҷGNf8ҷL&f8ѷ7e8@\ѷe8ѷye8зфe8Jз[e8[Ϸ2e8uϷW e8F6Ϸd8ηmd8|ηd8η`d8ͷ4d8cͷd8ͷc8̷c8E̷0c8˷Tc8˷D%c8!˷b8ʷb8[ʷ”b8Pɷcb8@ɷ0b8e,ɷna8ȷza8{^ȷa8fǷ _a8Ƿ(a8#Ƿ`8Ʒ`8NƷ5`8*ŷG`8wŷ`8T ŷd_8ķ4_8k/ķ\_8J÷7 _8R÷^8·Z^8t·h^8g·*^8ӕ]8%%]8]o]8En0]8տV\8e \8?r\8儾2\8r[8𣽷۲[8j3r[8¼T2[8-RZ8_ỷZ8fp`oZ8?-Z8፺Y8JY8leY8;8D"Y8ŸX8RX86߷RX86k X8W8 {W8 .1W8V8ڙV8㦴dLV8x.U8kU8;\U8c U8QFҶT8ʱaT8DN T8rѰS8=T\S8֯S8XR8Rڮ OR8[Q8VݭQ8^g;Q8ଷP8bP8䫷7%P8gO8몷BlO8*o{O8UN8y[N8N8KM8gRM8񜧷4L8(ߧL8eBUL8EPL8@֥K8yhBgK8%hK8hJ8^(J8CJ87[I8I8y{I8y1mG8ិ56G8mF8$$F8IŝF8cdSF8F8E88TE8Л[E8eRE8`D8D8=D8uC8e&C8DC8)%B8B8"'B8yA8yTA8k@8Ӕm@8Q7Z?8ٖ4t?8򒷋>8Jg>8작=8{H=8<<8K<8̎Fy;8~:8Q/:8ޅ98@͋88 r(88:Au782y?68L68懷P5848R3838,Kd28K182j08[nM708̬/8퀷.81i.8~m-8z},8|q,8Ǻzz+8'ryU*83xU*8v)8u0P)8|t(8:s=(8nqU'8p>'8o&8o&8n&8%mU&8ym&8#l&8kl&8k &8߁kv '8bk'8j4'8 5jE'8[iS'8>i]'8hdi'86hb'8gӷ'8g'8'gG(8fYq(8ukf)(8eZ)8{Rei})8dd)8?!c)8Sb)8Aa)^)8ga2)8a)8'`(8`(8˕`(8[l`Ag(8g6`K(8`X1(8_C(8_'8_I'8R_'8 _'8^T'8^Fz'8A^b'8]K'8f]2'8n]'8 ]1'8Ա\&8M\>&8[ &8e[&864[&8^Z &8Z"&8agZ &8Z\&8:Y.&8EY8 &88X%8}X0%8b-Xŝ%8W%84W~%8V%8VP%8U%8U%8nT%80S6%8GS%8ER%8uR^%8|Q-%8=Q%8P %8 Pp%8~O%8Oz%8yNt%8"Nn%8YNg%8$N_%8MYV%8 MJ%8M:%8RM%%8)Mv%8Lh$8-~L׼$8}-LK$8Ka$8~K'4$8KZ$8kJ#8J1#8~I$8H3 $8^XHZ$8WGA$81.Gk$$8F$8TE$8aE_#8"D#8'D.#8RC#8Bu#8:.B#8DgAh#8h@6$8? $8E=G%8ݪ:%8R7%&84&82&8H/Ğ&8.s7&8,~%8+k%8*%8)%%8(K$8'(H|$8A),N$8)&$8)#8o)}"8) #8'"8+'ޘ"8'"8&!8aY&Q!8 &@ 8P& 8G&8b&8Q,^48-?88_]'8Z$.8%8A/8(-"8,8+b,s8-X87/?8c4'88aC8g9~8p9q8\:8J,i8cp8;8%8648oK: 8k 8ȫ 8i58]+,8%$=8"8+n8(8T8#ad8#J8<8Gڠ8~ W8V8 88rWk88J`g88b8$ xl8"8 /8e8L8Gg8p80+8POr88s;W8:d8@RW8'Ld8H 8i1 8 8= 8~q [X 8| 8 8a  8R 8Ɓ1 8e0 842 8}tǻ 849' 87J 8~(8Vr趫,8pF8ݶ8׶8zAҶwI8Ͷ8=ȶ8ög58'7С88ܼ80ﹶG8L8&е8˴8dE<8@88Uh8yԷh8%Էg8)Էpg81ӷ%g8oӷug8ӷ2Mg8ҷ$g8IZҷf8#ѷf8 ѷf8Eѷf8зUWf8эз-f81зf8WϷ e8xϷįe8?ϷIe8VηdZe8%bη//e8ηe8ͷd8MHͷSd8̷~d81̷*Qd8M*̷@#d8˷c8h˷c8˷c8ʷec8nAʷ4c8ɷc8yɷOb8ɷ b8ȷib8FȷY4b8iǷa87wǷa8JǷa8ƷYa8Q:Ʒp!a8gŷU`8cŷ`8ķ2t`8Dķ*9`85ķ_8÷_8B÷_8v·G_8e· _8^8ߎ^8P^8^8l9 ]8ɿ]8YU]8龷]8zl\8 ϖ\8왽W\8)E\8Y[8dID[8ٻV[8h7[83Z8,Z8)9RZ8夹Z8Y3mY8xY87O/FY8ܷxY8[iX8uX8gT.X8 W8>՜W8>!dRW8W83V8躳kV8%BV8Ȳ}U8NzU8ӱ'U8vXT8qܰ~T8_d(T8㯷%S8exS8讷S8 jR8뭷'kR8mR8﬷Q8qXQ8P8vP8UEP8X}O8O8񆩷4O8# N8kN8+N8mM8:1pM8o+M8+KL8ڥL8sk:L8K8K8'&YK8:K8V6J8MVJ8ꌢFJ8)VJ8ǡ_I8gI8} MI8¨'I8J"H8ퟷH8vfH82.H8u՞G8xG8>G8VNG8\G8NxF8F8F5faF8ϛH"F8gE8?E8-VE8!d E80D89NqD8 D8EC8NŗkC8A# C8WB8?/@B8tA8 vcA8v@8ܓr@8-=?8p?8>8JpZ>8^=8쏷2=88<8v;8Ǎ5X;8 C:8M:8qd\98ʊ88=78?AF78y{X6858`58'e48b384n28 ك728/$18qUU0808܀r_/8#.8~.8p}\-8y|.,8&z',8yf~+8Hx*87wp*8Yuf)8Atr)8ɑsr(8hru(8Tq (8gp'8o'8, ox'8onk'8md'8^muc'8}lh'8VlTv'8k'8k'8k'8-j'8yj'8i'8 ig'8h#'8Hh+(8p%hs(8g%(8Sg<(8g)8fo)8f)8,e\)8Շd*8ߞc)8;bm)8bО)8fao)8`nB)8C|`)8(2`(8>`(8#_:(8w_0(8OY_jw(8)_X(8^>(8/^6$(8^(8A^k'8~]'8e]'8|]'88]n'8 \n{'8m\b'8@\I'8[@5'89[}'8F$8ѼE6$8Y5EQ$8ŪD$8D$8C$8{B$8%B%8?A%8?`A%8J=r%8;6%8Z8%85%82Q%8{0c%8.1%8-5M%8#+ %8*Q$8v)f%%8(y5%8'=$%8k'$8'3h$8%'$8ov&p#8'&;E#8#&"8&M"8%&i!8%~!8T%i !8j& 8'8U(c8*8j\*8~&8T'8###8m+8F+8J&+wu8+S8;+b8})X8f,858;5 8C5l8F6H8;28'M8C8{ 8hf0q8us47,8744808e)bD8#8`f ׳8_} 8"8^86#8."8f~!I8 !Y8"8 h8 898nX84;8,8R8nd8&]8 88F8F8&JŶ8Ho88:;8븶J83'088Ē8/78ﵶ8=88Ȼ8TR88锾vv8C78_82¶E8eöa8]Ķ 8}Ķg 8qĶ 8QĶ/n 8öU 8G 8&; 8߼JU 8Ο[ 8˄oV 87N 8ŴxO 8Ob 8M 8Ů 8*@ 8gU 8镦yw 8ӣv 8nT 8sv 8ӝ` 8s@| 86v) 8r 8Ϙd 8FJ 8;k 8ڔT 8k 8𑶨j 8lJ= 8Ꮆ~ 8O8`8  8,8߆Cs8:5\8ʑG8-偶 68q4&8|g84y.8 v8ar8n8Vkg8g88#c88`8wl\8dX]8T88P8Lz8H8D%8@8z۷aqk8ڷJk8zڷ#k8Vڷj8ٷj8Vٷj8طbj8ط_j8a4طP8j8׷j8s׷i8׷i81ַi8Tַ]pi8շGi8շwi87շh8MԷh8{Էh8Է|h8ӷRh8oaӷ)h8ӷEh8ҷg8qIҷg8cѷVg8tѷ{Yg82ѷ^/g8зg8xзf8з f8Ϸ?f8bϷMZf8Ϸ /f8yηyf8Iηe8ͷde8΍ͷ~e8C/ͷQe8J̷$e8p̷d8̷zd8˷d8O˷Ajd8ʷB:d8ԋʷ d8)ʷc8ɷc8qaɷtc8ȷ@c8ȷ c80ȷb8Ƿb8bǷwlb8Ʒ5b8͐Ʒa8'Ʒa8ŷa8Qŷ Sa8kķa8wzķ`8 ķ`8÷f`83÷T*`8·l_8W·4_8xr_8z4_8 ^8^8-my^8l:^8N]8t߾]8o^}]8O>]8\8 \8b\8?A?\8[ѻ[8ha[8IQ[8>[8Z8ΟQZ8.zZ8M8Z8 LhY8ڷY8gmY8(Y8gX8q X8UTX8# X8W87vW8*W8H6V8,вÎV8W?V8IݱU8bU8簷yHU8k T8ﯷT8s%HT8S8x?S8 ?S83}bR8N+R80R8Q8xzQ8n Q8ٌP8iP8P8 cO8]O8)O8ѱ=N8;YN8Ʀ,N8(SLM8᥷`M8pWM8AL8XvL8T(+L8佣 K8UK8VK8ZfK8 $WJ8J8_RJ8QJ8I8?I8៷ dI8;*I8&&H8ɞH8lH8BJH8kH8RG8ZڞG8cG80'G8̛F8fgaF8hF8/V$F8)XE8xE8HFE8ӘfD8[D8}KD8a`C8ޖC8iX+C8aΕB8@ WB8QA8oA8o@8,㒷u@8QBL?8 i?8'>8JK>8*=8rꎷb=85~<8~;8Č7;8 :8/KZ98498ʉă88l78RF578/d68οĬ58@48|:a;480ys38Ǹ2828<~]18̂08ˀ/8_?I/8~.8!i}x-8o|U-8z1,8y,,8vax+8'8UL8'8ԚL,'8BUL'8!Le&8K&8K2&8dK|`&81K$&8J%8Jݯ%8ņJ~%8t:JW%8I=%8tI5%8H>%8ksH^L%8G.W%8;~Gj%8Fr%8Fz%8FS%8oEK%8+E%8D%8JD;%8$C%8C%8A5%8BW@%8<>#%8;S%8F8%8c96P$83$8H1gI$8gU/_ $89-X#82,#8*!$83)Ӕ$8' %8m~&Sz%8%$8O%{~$8e$eL$8#h#8t##8A#ޟ#88]%N.#8%X"8K$"8x$ܵ!8c3%F!8h&> 8)(8)8)n8(8Z '80|'8.(/8*S/8#'8%80*l8~)8T#d8! 87U/8t081YK8I1:8=18XB0r%8(8#a8m"to8e,R 8,;8'/8q"`8Q X8TJ8R:8QDA8#8"#g8=s8>n8<88; $8q u8a8 8H8D-8y8mh8q8 1ɚ8l8N8^U8¸T8V8љ 8A 8nQ 8z 86 p8W 8 I8 08 N8 8]і8|(8I88Ob81v78A84i8pB8 8aJ 89`! 8U3% 8f 8 8 }㶯+ 8#ܶ18[ն8_϶O8u4ʶD8+Ŷ}8Vن8\8}8ҹ 8(8@c8\58'f%8818X8"88Է8ӛsE8m8@!8 E8{Իs8l8|`l"8u3S8R)88 8Δ 8k 8$r 8&~ 8s\2 8ᄊ~ 8R 87t 8ึ 8ж 8۴ 8 8! 81w 8c\5 8Ϫ` 8` 8˥ 8DH 8< 8U 8 $d 84 8| 8aa 8Q9# 8͕ 8[9 8ᒶ| 8^qK 8 ՏD 8E 8u 8 i 8W}ہ 8Xއb 8e<E 8r* 8_  8 D8a*8){O8Wx88PK*<>8ϛ=8鍷=84d<8};8jċG;8b vm:8L98ߎ98Ј]88w78P68ϐ{=688х>5848T;4868`38܂28#18m*D1808 /8~>/8]b}d.8|-83zZ-8lyw,8zx8,8`w+8Nvk=+8Bu*89tV*87sV)8Ir})8 zq'@)8WpF)8+p;(8o(8n(8y_n(8pm(8.imp(80m^(8jll(87al (8kg(8Ek:(8j (8i(8ci%)8iZ)8ih)8h)8Hh)8g)84ga*8AgD*8Cf*88f%*8IeR*8fdz*8CcT*8,b@-*8$a*8H3`)8f_)8_ _<)8W^&)88O^ e)8.^N)8*]5)8] )8 h])8F]B(8s](8[\(8\(8`\Z(8\i(8[aT(8`[=(8Za*(8wZ&(8:Y'8SY'84YE'8ϒX'8$Xr'8W'8zW'8=9Wf'8HWqd'8r WQ'8V,'8VS-'8RV0!'8+UT'8U&8r_T&8SB&8NS&8fS'8HR'8RaQ'8uRn'8R~o'8hR'8/Q'8)1Q '8PS'8O (8OO((8lfN:(8`Mp+(88M((8qLQ+(8uL((8L'(8K(8lK$'8$/KV'8Ks'8dJ"3'8Jy&8]J&8mJp&8;J9&8I &8Ia%8STI%8H%8}H%8H%8G%8#G%80F7&8a]F&8E&8E;&8X8Eh&8RD}&8D&8!Cy&8jB5<&8=A%8>T%8R<$8|9$86t#8`E4"81K\"80"8+n. "8,n4"81+"8@:)%K#8n'$8%x~$8#c$8h"(N$8!sl$8" C$8" $8"$8a##8"G"88"S"8(#"8#!8[%q!!8A'8%*ԥ8~'ڍ8!@%8_8y%b(8y&8F(_ 89"d8!8X4"ʌ8(R8L(8lN'8$/N8?*'8+8N,L8ڍ,/80)-8+a8#B888N M8W 8(}8%€8t5 8I=88%8"Q88 :8 8X{8ZM8*Q8)cp 8Ҹ:8A8ms8 18~,8_Xc8az88;8S8&8\j8be8X}")8q tM8l* %c8H g8a ^8|;A8=kC8<%8{8X z8hN a8:8o8j8J8 S8d 8 8ѹ8 ry8J|8I.88eT8Xy 8wN 8񶇢 8궻 8y 8 3۶ 82bԶ2l 89ζ-8ɶQ58ESŶ8 8n~8m;808d*8n~d8ö˧8`[8DQ8e8]8A98wطS8@8G78.{8w8,U c8"8T8"80> 8gO 8ƾ 8O ؂ 8q 8J 8 8Hq 82 89` 8} 8U+ 8 βя 8W밶8 8 9 8' 8)= 8k . 8Kئ 8* 84% 8 8 8g 8TnW 85$ 8J 84 8S 8RrX 8␶) 8|Oz 8 8 8iH 8䈶[ 8C9 8O 8r 8tR 8 8} 8z 8o)w 8s& 8Bpq 8$ld 89iY 8eO 8 b?G 8h^? 8qZ8 8W52 8>S<, 8.qO& 8K 8GY 8MC 8S? 8; 8 7 83o8 /"8+8ɇ'8kc#I8M:8Z 8(ŭ868u8> 4}8j8WW8S'B8rLm8!۷$m83I۷Rl8^ڷl8ڷl8 ڷl8mٷt]l8\ٷ*5l8ط l8طk85طLk8׷bk8 r׷Bik8׷@k8bַk8LNַ j8`շ[j8շsj8=,շVoj8Է+Ej8kԷj8 ԷQi8Uӷi8Lӷi8ҷoi8ҷDi8/ҷi8ѷSh88rѷh8ѷ/h8Qзgkh8Vзx?h8ϷSh8lϷg8<Ϸg8ηg8Vηag8 η3g8ͷg8·_a89`8cA`8OM`8Y`8_8|_8;-S_8̾>_8^N^89キD^8J9W^8Q^8@]83]8û-Z]8T]8s康Q\8v\8[\8\8'M[8[8FY[8 ַ[8 eZ8#Z8ҁOZ8 Z8Y8E)̀Y8T:Y8@`X8˳X8U_X8"߲X8gtW8ﱷA{W8Ww,W8$)V84DV8 9:V8}$U8U8㖮*>U8y8T8VT8 9T8rS85&S8/S8 ,R8?7}R82#R8嶩Q8;qQ8 Q8F-P8ͧjP8 VP8BߦO8iojO8hO8N8XuN8D'N81M8ģM8XXEM8YL8녢;L8rL8^/L8UXK8^K8 oK8R/2K8ϟ J8p*J8J8ѴHJ8VWJ8 I8ΜI8S?fI8g᜷-I8ɂ[H8E#ʸH8›}H8`?H8'GH8򗚷G80}G8Ǚ8G8[F8]혷F81|XF8;F8]}E8PZE8ΙD81D8&8D8" ,C8EcC8B8^{B8OȒB8!.܁A8@8v@8KJ?8WY?8>8L6,>8=8SꌷC<85yK<8+;8Ɗ:8. N:8?R9888Kڇ ;88φ78 a6868鄷e58/48w38E38 28X18̩31808~/8[}5?/8~|w.8z.8oyn-8x,8w_,8L|vg+8#}u]s+8t+8s=*8rE*8q)8Jq))8Ůpo})8$pwX)8xoy@)8n-)8 fn)8nT)8m)8ym)8v0m )8l)8l%)8kH)8Hj.~)8i^)8uli)8i*8hC+*8I5hbZ*8ggd*8ߋg x*8Pg–*8gq*8:f*8Ue*8bd;*8c*8Tb*8fa!a*8Z`I@*8\s_W *8^*8G.^F)8])8j]I)8>]])8 \G)8\t)8<\Z)8g\B)8Y6\->)8\)8[(8[(8:[(8SZH(8WZ(89Y(8ZYq(8XL_(8nXHT(8JWI(8vWKS(8@"WU(8VBK(8V>(8#VjC(8V9(8Vv(8-oV (8BU(84EU'8fT'8S'8R'8",R'8QZD(8 Rr(8!RÔ(81R(8JRĆ(89R`(8Q(8~\Q(8P(8P(8-WO(8ZN )8@M(8p0M)8bL)8%L/)8íK)86KO(8vJ(8CJ(8}qJ"G(8 ZJP'8hFJ>'80Jo'8Jf,'8IP&8aI\&8iIS&8aI{&83Hp&8IHHm&8 G]&8}GP&8FW&8#F'j&8EkF;`&8E?x&8E&&8}E&8QE&8E&8qD5&8ƊC&83A%88a?F$8BA$j^ 8]#@ 8"8 "Bn8>%X 8!p8 +8! 8&8"&&8%C?8r$8k8&M8&889&88X'V8)(E8'8^!;8BI,8t88CR8!*j8!8YL Q8Z88$#8)_X8sk8B8K8cT/l8% 8$?8k8x|X8$8L88<j88<8p8 8S 8 8 8z -8 .8b$ ]888=%8,8|8a8XrL8 8)l8\88P8 |8!+88pX 8fQ8=8_8z58\V8 8؊붎$ 8Ȣ 8O޶}& 8p׶ 8hѶ/ 8̶m 8Ƕ 8öf. 8 8N8ݻ8v 8󖸶l8HV8&Ŷ8LK8? v8g81%38t|/8!鶶bl8Yx8Z? 8䶸4g8Oe8ڹ58.T8? 8}"| 8}- 8λJ 8 8h 8Mm 8~` 8D 8vn 8 87 8cY- 8n~ 8* 8n/ 8mˬ2 8L6 8-= 8\E 8U M 8آeO 8в8I 8b9 8&E! 8\t 8Dژ 8U 8#j 8'[ 8hp. 8j} 8!ݎ 8y7_8 :^8雼#^8"-J^8F ^8eO]8{ືg]8qN]8s]8?\8#\8JN\8D\8rԷ[8d}[8]󶷾J[8D_[8RZ8Z8,DS8ZS8bES8KɩwR8MPR8ҨQ8XQ8{ާIQ8eP8.1P8wIP88(O8򍥷ڣO8RO8O89͵N80ˣoiN8&^yN8|-M8RM8GM8˸M8CSL8L8Ӌ@L8)L8 ɟK8GiK8Y NK8 K8$NSJ8EJ8'hJ85/J85؜I8/zI8I8𻛷HI8E[ I8JH8ϕԏH80NH8ə H8`G8}G8熘92G8F8~F80,=F8E85E8F'E81D8ŪYD8d C8?{C8C8kxB8ӑ B8!7sA8A8t@8RP?8𧎷_P?89>8+OJ>8-|=8틷<8!93<8;8̉::8]1:8\s9888醷88~0i78w68?68 K58T48Q38<438 B28a18~7.18z~08Q}/8|J/8z*.8my.8̪x-8ʡw -8vܒ,81u ,8tg+8sQ+8 s*8a^r*8LqUb*8"q)*8p*8No)8 do)8n])8ܗn)8^]nB)8)4ny)8I n)8Թmُ)8Km)8{k))8νj*8AjE*8ix*8|i|*8i*8h*8hy*8@g*8]g *8g-*8Of*8}e*8Ld*8Dc*8b*8za8*8` *8i_*8;^a*8A^<*8=])*8]*8\*8ʨ\)8L\)8*\b)8A[ )83[|)8J[6)8[6f)80[R)8Ze>)8NZ$)8BY )8/Y(8aX(8>X(8WJ(88<*38=)88B8nv8G8>8N=G8Ԁ_8K8|8j8N84GG8=h8ui88Ke83 8 *8 38V .80 ]*8 ,18 j'8@8J8J868Y*!8ώ8:j8i:{88oA8^z~8v 8?87?8-8i<81i87Y8"7e898uﶈ}8k8.v 8 M8CU 8eݶ]8׶ 8Ѷ/i 8̶ 8xȶ$ 8ĶYw 8 8?,* 8뼶9 87> 8 gj8T$8:"U8g8䵶V8䏵;8je38c!@8p|^8յg8?{8򼶶 8B]8·l8u5 8{s 8޸ 88 8]@Ř 8[ 8cO 8L 8/ 8KT 8 87 804 8'k 8ϱߕ 8 8@ 8A. 8jk 81 8 8Ҥn 8ᢶ 8U㠶 8ޞ 8]ݜv 8u暶 8 8)$m 8XJ 8ᖓ|% 8ޑ\ 8+P 8.| 8όDž 8%/^ 8|7 8Ӈ 8'* 8 8"ׂ 8[,, 8@o 8-{7T 8Ex; 8Rt# 8yqs 8 n 8j 8g: 8c 8`M 8\ 8YX 8IU 8$Qٍ 8 M< 8_6J{ 8ItFr 8BNi 8>` 8:W 8f7N 8U/3/l; 8F+1 8H'"& 8D# 8;A 8@.- 8uC 8v 8 8 8 8Q 8 8Yv 8Fi a 8]&䵅n8ڷen8Dڷ=n8,ڷ0n8Yٷ+m8fٷm8ٷm8طom8x<طPEm8}׷im8v׷Yl8׷l8Wַl8Nַrl8շUGl8~շbl8(շ;k8Էk8,eԷYk8Էnk8ӷBk8nAӷk8ҷj8ҷNj8Qҷ̑j8ѷ/ej8^ѷ]8j8зc j8ɞзAi8>зi8EϷi8ϷVi8 ϷQ(i8xηZh8`η:h8?ηh8ͷwoh8Aͷ@h8̷h8ҁ̷dg8!̷²g8˷ނg8(`˷Rg8ʷ!g8ʷf8;ʷJf8YɷQf8vɷZf8Sɷ'f8ȷ+e8HKȷe8Ƿne8.ǷVe8@Ƿ1 e8Ʒd8MƷud8ŷzd8}ŷGBd8ŷ9 d8ķc8AķKc8D÷xZc8`l÷ c8÷]b8Q·b8-)·Ujb8*-b8Oa8˱a8Iusa8`5a8㙿`8+<`8潾gy`8Oi:`8cίl_8so_8e}_8_8'k^8TS^8J<^8&ܺ1B^8m^8]8 ]8!@E]8]8B\85ӷ\8icD\8P\8₶[8[8Ǡ=[8/kZ8GZ8IMqZ8iֳ~+Z8ibY8ϜY8jxSY8W Y8X89rX89S%X8#W89 W8<0U6W8V8:V8=H>V8rCU8MǬDU8J*>U8LΫ~T8QYT8*ժ8T8X S8ܩAS8`b1S8{娷R8j7R8:+R89wQ8VQ8k*Q8P8囥P8'U2P8O8CZO8ԣFO8e4N8ïN8*fN8#N8oM8SM8 ITM8DM8&L8xğrL8cXL8L8K82FK8'蝷mK8q4K8,J8gϜJ8qJ8PJ8J8UCI8PI8P_I8.; I8əH8b$H8UH8y) H8 qG8qG8<G8 ǖF8N|qF8ѕxF8LR}E8eϔNE8BID8俓xD83D8ĢאC8[C8wB8=ݐB8?oA8JA8'r@8fUz?8iF?8>8TS >8j=8]<8?<8us;8mֈ:8 ;:8jg98v8888IQ7868⃷#581858큂Ӈ48ԁ38*+38Ƀ28818~~3186D}08|/8fz_/8yH.8xA.8FwS-8vD-8u,8t{f,8't?,8fs`+8rL[+8%r+8$q*8}p*8e]ps*8,oq^*8zpo6*8!o*8nA)8in)8n)8n*87n *86lE3*8eyk *8j*8xj6*8Zj*8i*8=2i*8.hl+8Mg +8sg +8 g+81f"+8-e-+8d e94+8jd3+8 c,+8b3+8a +8`,*8K_*8 ^A*8V]*8]*8&?]*8\N*8%|\*88\/*86\x*8<[7*8[]*8g[!*8Z*8}Zx)8Y`)8BY)8=X)8WX)8,W҉)8Wڑ)8zW#)8OW)8)V)8Vq)8BFVR*8I:V<*8V[*8\Vc *8eV)8U)8<=T)8hS)8|Rv)8D|QV*8 P*+8iPX{+8=P<+8>P&+8)PW+88 Q_+8'@Q*8Q*8UPT*87!P^*8VO!*8Nf*8*ONO*8εM*8!M*8 L*8oKS*8)K'*8%J*8I+^*8 I~*8I)8܄I[n)8{IO)8lI(8hQI;{(8#I.(8"H'8̏HT'8o.H'8G}'88nGg'8G`'8ҨF'8Fg(8F'8ET%'8aDEx&8YE'8D5'8D_'8kDR'83De'8 CK&8;A-J%8 >C$8U<"898!878Q48.2v8`0g8@T0:8V/8d.8<-A8+HX8(.f8y%, 8{#Þ!8#I"8R#"8$["8##8+##8.$#M #8r"k#8J8!=#8 e #8K!h"8v"N"8Z"+"8t! #8R o!8t!>J!8K A1!8b g"8#X#8 #8,3"8#!8 !8Ha!8" 81F 8>i'8vU 8]8]8*8 >88y9n8K8dY8C8 84d8o8m88o8Jub8.8m28_8a88 zŮ8v882x8 |88 84V.8. I8Y ?Y8n 4S8`E =8؍ .8] >188)8D %8E8v8ݶ8a8lB8a88k$l88TQ8E8/I8>M8' 8`8 8m--8(m8b8{T8޶N8b;ڶ9w8<Զ&@8=϶8ʶj8`Ƕ\8 Ķ 82xSL 8/ 8#{ 8mO3 8= 8X 8:x 8 VC 8A78"8Ŵ88JtN8,8ma88bQ 8\ 8 8|p 8hN 8ⶶ 8T 8^U 86 8ٶ 8-N 8;g 8,P 8}Ѵ9 8T 8Dk 8 氶 8;$8xE8[8[کh8 o869p8eu8iq8p8*m8Bd8.Ț4V8nߘ4B8)8A) 8[~ 8ej 8׏x 8K 8g\ 8C6 8S 85V| 8w 8} 8N؃ 8c 8}VE 8hz( 8o+wu 8Ls 8Uap2 8l 8}i 8f 8ғb 8 _| 8[m 89W_ 8cTiR 8BPF 8RMm: 8qIL/ 8E$ 8A 8:> 8n:z 86& 82 8. 8* 8Z' 8 # 8| 8z 8 I 8=K 8p{ 8 j 8XY 8{F 82 8l` 8+5 8嵶 8ܵ/o8ڷo83ڷUn8ٷn8elٷNn8ٷ`n8ط6n8Aط{ n8*׷6m8z׷m8׷m8qַBbm8qQַB7m8շ m8؋շl8=)շl8ԷIl8dԷL]l8iԷ1l8|ӷl8>ӷ1k8ҷk8{ҷ~k8ZҷQk8Gѷc$k8^Xѷ j8зj8з؛j8b6зmj8Ϸ@j8uϷj8mϷi8:η!i8Uηoi8ͷWi8ͷ(i8e4ͷ\h8 ̷h8s̷h8̷jh8(˷9h8Q˷ h8ʷ#g8ʷɦg8+,ʷug8ɷBg8#gɷ0g8ɷf8UȷSf85<ȷ*uf8Ƿ{@f8rǷ- f8 ǷLe8Ʒ˞e8?Ʒge8ŷ0e8pŷd8vŷd8ķnd8(6ķHKd88÷d8a÷zc8·řc8·]c8· !c8ijb8]Gb8hb8m*b8Ya8䒿 a8H%koa80a8I`8۽`8ms`8y4`8U_81#_8w_8F8_8wغ^8 jº^8{^8U<^8]8(p]8QA~]8MҷQ?]8 cW\8 \8e~\88=\8y[81[8pv[8dN92[8۳Z8h+Z8aZ8y^Z8c Y8?Y8=Y8X8E0GX8귯ZWX8>9X8"ŮW8JfW8*ЭW8 UV8٬mV8]8V8᫷U8\emU8骷oU8lT8𩷬iT8tT8spS8f~tdS8 S8R8aR8ј R8!Q8eQ86Q8¤P8,P$sP8 ߣ%P8aoFO8%O8IBO8(N8߳N8>VnN8CT+N8EM8I%uM8ŸiM8_*M8L8䞞VL8?hwL8᝷ =L8ڂEL8$K8BǜK8iWK8 K8bJ8oN[J8mJ8Ѝ0J8+cI88șfI8cpI8@q,I8SH8(H8uPH8AJiH8xז/G8aYG8長(G8mF8AF8lE8瓷sE8._lE8sӒ֔D8CDD8yC8%C8񂐷_B8(珷|B8XH`A8=A8@.o@8T[[?8=?8>8Y=8ĪZ=8<8HI <8"u_;8z䇷(:81G:8~.S98;̅<88x78iF?78 68 w58$a.58i4838ni+3828d~182}C18 |K08z 08y/8x.8swu.8v-8vt-8(u-8#`t,8s_,81s,8hr+8qP+8lAqV+8p%+8 @p*8 o*8{o*8Xo)i*877o@X*8-3o,*8uloH*8syo*8&,m*8{?l+8k@+8k*8j*8 j*8'i+8h4'+8`'ha7+8g8=+8qgC+8}fT+8eRj+8 e>}+8#d+80c+8=b+8[ad+8֔`r+8_<^+8[_J+80^<+8Q\^3+8]v.+8k]I5+8\6L+8%\Qk+8n:\߃+8 \i+8['V+8[+83[V*8oZ*8iY*8X*8GXo*8WiT*8WW*8IW\*8kW e*8CWVq*8MW*8V*82V<*8nU*8Uq*8iU*8Tu*8BTS*8S*8R*8-R*8lQί+8P,8[)P,8O,8O,8kOe,8uP?,8–P",8LP:,8YO+88OK+8Ii^*8I$I*8IԳ)8Hb)8hH)8Hڸ(8SHc(8VG(88GF(89GI'8F'8>zFn'8" F!'8ZE"'8EP'8EX0'8~mD&8$D&8D'8C'8C0&8Bt&8A7%8o?$8 =d#8;]"8M9N 86s8c4\8c28$0ˆ8'/=`8\X/`8g.8-8+)8)d8s'>c8%Q 8 $!8\$!8#"8#nd"8"!"8?"9"8G!#8{ 0#86 m)#8 "8!"8Q""8!u"8!R"8$!k#8J{>!8!8uk"8u{v"8ӟ[&"8$"8ؿ"8yH:-#8`r"8k"8u5"8/N!8^Av88n8(9S8-W8(98$8ۖm8#8g8e8+ķ=e8*÷d8*X÷d8·$Sd8̂·d8}·c8ͫǝc8?`c8o"c8fb8b8Ō2hb8y)b8a8vDa8ֽla8h-a8!`85ͯ`8Lp`8e1`8nC_8rպ_8fgu_8O<6_8.g^8^8y^8\@p:^8ѷ#]8c]8{]8;]8 o\84\84y\8%Ĵ6\8R=[8᳷[8nyl[8e'[8XnZ8:mZ8dTRZ8)# Z8Y8T8 xGT8Q6S8DS8$ES8R83R8ἥ^IR8GQ88ҤdQ8^UQ8+죷 Q85{nP8 ElP8j!P80O8LšO8J[IO8O8ˋN8&&N8R?N8U^N8M8EM8:IM8q۝M8|,L87K8K8'\J8řJ8a5FJ8J8lI8-vxI8.I8TKH8䖷ԒH8rH@H8VG8󄕷G8 83G8F8' lF8F8=\E8s$E8u呷D8T4D8C8+(O4C8􍏷ڭB8F#B8PA8n\A8 Jl@8}b?8n5?8>8Fb=8 M=8 <8V;8N;8/:8{G98@C98鄷88<786478悷]68>58?+5848|W*38'w538F~28}c18{E^18z~08y:08!x[$8`{88.8?8z8m8 nz8n8D<8R108y08Y8Ub8e8ז fi8% p8 ]P83 G8 8% 8 8 8Y/8t8sT89H8zC:8mL%8Fis8O8K@8HT)8z-8^8u8~x28,B8X$8趬8ձ8bo8—߶m 8Qܶ^8Jض8zwԶ8ԕ϶o8Aɶ8_öz8-ľ@U898ܴ08g8"8O58R๶V8o8 81 8 8>+1 8) 8: 8]I 8UW" 8$ 8&  8  8# 8?D 8ho 8) 8в& 8IJ 8ò` 8FD 86 8D/ 8?Qt 8|y 8W갶 81>88M38;8QR8`'8_ PR8lt8$i8t,8>Ӫ8ly|8(/8D蝶Ӫ88)8:8OXٟ8N8@v8䐶,]8@8Z"8t8߉8O%8mW8z8 X8`QL68?8;{ 8Cyx 8vu 8q 8Hnc 8zjTf 8CsgM 8wdb6 8l`z 8] 8YU 8V 8ERW 8(O 8oK 8G 85D 8{@ 8 ӷ`m8pҷ@3m8xҷ~m8 ҷl8ѷhl8GQѷ {l8'зLl8,з l8K+з@k8Ϸ?k8gϷ"k8jϷak8ηd2k8Cηk8^ͷj8ͷj8ͷrj8̷vBj8/]̷j8˷+i8F˷"i88˷~i8ʷ9Mi8tʷMi8ʷh8ɷxh81Mɷh8ȷ Ph8ȷGh8"ȷg8PǷ g8YǷ}g8XƷHg8Ʒg8(Ʒf8ŷVf8ZŷEkf8ķ2f8ߊķe8="ķ̿e8#÷~e8O÷Je8·Fe8z·id8·!d8ɤaZd896d8(c8`֡c8Rcc8Q%c8b8Ub8@ib8ҽ*b8+ea8a8㉼la82-a8{`8@گ`8Ӻp`8Ne2`83_8k_8u_8ح6_8?!^8ѷ$^8Ocy^8:^80]8Q]8!{]87l:]8Ǵ@\8`Wf\8]泷t\8t1\8[8[8xc[8𨱷[8]4Z8_Z8!IBZ8үY8f[7Y8㮷T_Y8kLY89X8Kx6rX8)^!X8W8|W8)W8gV8rЀV8+V8+nU8#ـU8*+U8-{T8)T869*T8鿦S8aGS8ϥ(.S8 Y~R8h㤷R8n8R8QQ8Q8EMQ8٨Q8:P8ΡnP8b&P8O80O8%)YO8pß0O8^N8mN8 ZN87N8lםKM8wCM8lM8?2M8[L8gL8L8cAKL8⚷L8\K8>#;K8™[K8_iK8J8J8/ TJ8#Ǘ J8\I8uI8~%I8 $H8|H8h #H8ͥZG8(cG8_F8#oF8J(F8W߶E8Z"AE8'7D8bLID8̏uC884tAC8sB8)B8YA8 A8i@83k?8Š.?8>8m=8A=8F8<8hh;8B;8:8b98998 b88:e78a078Ni68~x-58ـ158>48KD38Y"~I38}&28{{28zE18yD08xNm08wX/8 wq/8k1v.8&euh.8^t+.8 t-84ds -8]r?7-8;=r>,8q,83q},8rpBE,8_p,8{ p)+8%o+8 o+8(Uo+8n+8(ny+8m+8-m+8Ml+8@k=+8Ek +8hj+8i+8Th+8h+8egm+8?f[+8,ff,8/e-(,8dJ,8cIg,82c~,8gmb,8az,8-a,8m`,8ڞ`,8g`$,8_x,8^,8M^۔,8Kl],8z\$-80\AC-8[?-8e[-8Z,8/Z,8Y,8C@Y,8X,8cX.,8+X`,8%W\A,8fiWg+,8[CW,8-Wu+8"W+8V+88V+8wU+8T,8wT,80SL,8ES7b,8MR?p,8sRv,8qQƯ,8Qd,8vQ%-8P&-8PcU-8UPl-8ܩOL-8V OE-89N.8YN.8PM.8aM-8L3-8L„-8$LX-8K2-8 aK-8iK,8@JI,82I,8IIz<,8&I+8HZ+8EQH:N+8Hc*8G*8GOf*8u]GR*86G)8 F{)8VF^6)8YEg(8E?(8:Eh(8?DD(8VD'8 Cp'8\8C:'8B&8Bo&8A+&85Ax%8@;%8n'@ox%8lA?%8P >D$8<)#8:>E#8x8 "86Ȳ!8f4` 82# 8>0@{8 /[8a-L8,D8n,<8J+֘8>*.8(N8 '[E8b&od8%8X#0 8"L 8! '!8 !8.l"8 #8.>#8V#88#8 l#8c ^U#8m6G#8X#8@t#8#8"8+"8!aR/#8x!8$!8<ʴ!8? +("8Q'I$#82#8W#8`"8j"8g 8#R8QCG8/V87'8y8B<8;b8V88@8,88o8Z 8y\ْ808Yvg8~M8I8l8 *l=8-m8N s8w8 3S8 88 @86 8f 8 8OV l8 N8 )8{8%8tD848c8888IGW88u88B$68]88[8,䶀c83io8jtݶV8Qڶ8ЩֶH8wҶ8uζ 8 ʶ,8Ķ88v8Ļ8 8bwI 8 ` 8 8= 8qİ 8/ 8eH 8E 8MB 8 816<8Xy8Y8RV8ǥ!.8֑Cf8UWl8Yd8}8襶8B-8@8֠L8R8US8ӐPP8əV8◶*X8pR8"F8Q258~ 8%8826W8w8=8q8^oa8`Ѻ|0a8c`8WIJ`8s`8B5`8n_8?_8ѷHy_8ds:_8v^8D^8|^8KM=^8/;E]8˴Ƽ]8[{]8볷7:]8z\8z \8|q\82%-\87[8>x[8Fʰ&Z[8@U[8߯Z8BiC~Z8_2Z8zY8Y8ɉJY8fX8X8_YX8̡X8&W8:aW8j0B W8 V89;dV8TV8CRU8ɧPeU8NU8IզT8A\gT8㥷?T8lmS8#boS8:S8R R8~R8&0R8:|Q8FPQ8ءrOQ8PlQ8P8얠zP8j.6P8PǟeO8aO8qO8G2O86N8I՝LN8t|N8tAN8µN8VM8[M8XM8;M8ݚL8~̩L8nL89J1L8\=K8cK8rK8C1x/K8Nʗ8J8qaJ8wXJ85 J8ɺI8gI83.I8軔H8AEYH8ēG8yDMG84)G8;!F8沑JF8&VE8ޗ[E8%D80q\D8َGC8@MC8B8/B8clA8A8h@8u?8IΉ*?8%>8V|=8z҇.:=8e(%<8Y~;8ԅ5;;8+:8y98܃5987ʼn88i78:478mU68.58 "(A5848}48|g38"{28z@28y718xv,18w08wc208O:vڽ/8truO/8lt.8t.8Gzsa<.8r/-8Vr-8qWo-8Pq3-8p,8]sp,8`p,8-o,8:Cor,8n^,8-nZ,8m^,8me,8>}lQM,8 kJ,8#k{V,87jr,8,jGw,80Di;,8h,8cg,83g,8tfY,8eȡ,8$7e`,8dO,8"c,8c-8I_b (-8{a=?-8axR-8`\-86j`Z-8_ Z-8_E-8"^ 7-8^77-8!]O-8c<\5-8[P-8 ;[E-8Z-8,Zky-8Y&e-8ZYX-8XP-8@X6-8)X-8W -8YW,8dW,8|V},8VS,89;V,8U>o,8Ui,8UW,8T<,8T0,8Sn,8SԾ,8sR-8URX-8#4Q\-8P-8P.8jPW.8+)P-8O-8kO%-8dNSe.8,BN.8Mأ.8-M.8q,MS.8wLH.8KOY.8zSKJ!.8J.-8LJ-8IIy-8I.-8H1,8sH,8WHW>,8G+8dGë+8K Gdc+8F7*8`FW*8%F*8?E@*8O|ET)86#E)8Dtb)8uD*)8 DX(8:Cr(8'C'8BVo'8$A&8y=A+Y&8@2%8]@%8y? 9%8>$8&> $8 1=p$8<$8^:p#89:E#8F7"8Q5n"8I3"8E1!8Z/,!8- 8U, 8/O+[\ 8u*u> 8>)* 8'(& 8?'G 8q%; 8v$s8$#M8w" 82o!D 8yr  8`!8O"8X#8?#8o#8f#8Y#8J#8#8n#8s=q#8OHr@#8S"8?"8U!8Bc!8ۄ!8M3!8?7 !8"8ӹa"8["8F"81$"8p3!8Նu!8iM!8^&t9!8 m+!8,! 8?8|8 y8+8O8n^`888^z8$nV8e8B>!8"f8ZR8K)8?8B}8[ Y,8wn G8p 8 18 n8 B8W ]%8"O 8[88U8O8ݡH83T8F c8'*r88Q8l8 M8F84 w/8bc8$W(88ؗQ8WA8ⶂ8gy޶G8Cڶ48NֶB8zҶJ\8S ζ8Iɶ-;8 $ƶ!8¶8S󽶶g8oV8B'8%8m8Ԑ8/C8¹X8Aȸ88?"08貶x8򱶄 8M1R8j=8<P 8Ѻ 8^s 8;y 8n 8cjp 8V} 8殶+ 8ݮ| 8Ϯ 8l858Oh888  8VA8#ӫx8 8 88iF80gq8ޗ8i 8͡8C$/8qT88R8:(8)x8Ǟ8;œ78n8@%8[88Ҋ8O~8@Ta8嗅&C8݃#8#98kw8j}8zy8ÕvA8,sCf8o/H8Yl+8;h8/e8xb 8^82[y8ּW[8!CTFz8Pe8#DMP8I!=8'4F]*8BG8?8hu; 8M7\ 824% 8n0+ 8,Q 8>$) 8&j%Õ 8%! 8zu 8$e 8%RT 8C 8D2 8 N 8 8D 8j 8AM 8I 8E 80ߵ 8cZ׵Cy 8ϵa 8vǵH 8ϿHq8i'ٷHq8ط `q8]ط4q8I׷L q8׷p8/׷ʱp89ַp8fַYp8ַ -p8vշTp88շo8Էmo8>pԷyo8 ԷKo8ͧӷo8Cӷn8ҷn8{ҷOn82ҷdn8ѷ5n8Qѷn8зm8зSm8y'зxm8ϷHm8aϷm8ηl8cηøl89ηYl8ͷWl82uͷ&l8ͷk8̷k8iN̷k8(˷;bk8˷0k8'˷j8ʷj8bʷj8ɷ_gj8ɷ[4j89ɷ"j8ȷ~i8rȷoi8 ȷei8تǷ-0i8CFǷh8CƷh8{Ʒڎh8&Ʒ$Xh8ŷ h8^Iŷ(g8FķȰg8zķwg8ķ>g8:÷g8]A÷9f8·>f8An·Sf8·f8Ve8.ne8<6ae8W#e8뿷d8yd88hd8:*d89Wc8̽Zc8_Pmc8+.c8b8OƯb8pb8=|1b8[кa8ca8ta8{6a8 F`8`84@z`8ҷ;`8$e_8o'_8R_8oH@_8 _8>^8ϴ^8j`A^8^8m]8+k}]8:]8w-m\8HV\8HOn\8*հX(\8ae[8S쯷f[8vP[8[8<ٻZ8oZ8"Z8"Y8iڅY8/'6Y8X8; X8AX8BFW8H˩W8:PGW8=ըV8`ZV8ߧ?KV8yeU8릷ʢU89rNU8ynT8vT8N \VT8T8iS8dS87)S8ŢR8 U|R8塷42R8wQ8Z Q8YQ85Q8l͟P8DfyP8bLMP87 P87GO81՝O8sSO80O8Ȳ N8OSbN84hN8c-N86M8ؚM8Cy.M8 CM8<M8YL8!cL8kLL8k1 L8˗K8dK89K8J8#J8Z.QJ8BI8SΔI8rWLI8ݓH8 a2H8|ᒷ'H85_ɾG8/ڑQG88RF83ǐxkF869(E8fuE8D8%8oD8捷sC8KYC8ȮB8z6B8nA8̊A8'i@8?8q܈'?85>8H=8憷76=8?W<8ݘp;88;8M:8>K98a898yhP88ʁ78/@78l68\58e~kY58}048|$48{)38)z28*yt28Yx18rwpo18t w088v08Ytu:08vtA/8|t"P/8{s-.8r.8^r%k.8ql*.8Yq<-8p?-8mpԆ-88o_-8vo(A-8n*-8Cn-8m-8l},8Hl,8 k,8]k2,8wj-8Zj2-8 i3-8hJ8-8XhhM-8hgtW-8\gd-8$%f*S-8eV-8dc-8Sdd|-8c-8b-8Hb-8Oaw-8`i.8׉`A.8J_.8R_.8J^=-8 ^8-8]-8\-8p[.8#![:.8lZ3.8Z.8Y.8SY-8]Xt-8sX-81 XY-8GW-8$(W~-8ɴVi-8cV]-8V4-85UR-8FUM,8U,8 TK,8mT8,8~YT,8S,8S,8QS,8aR-8R?-8Q>-8LQƶ-8AP '.8aQPJ.8wO..8N.8MR"/8bMQY/81%Mn/81M m/8L{s/8LB/8_K^/8D,K/8J.8n=J.8VI\x.8:I.83H^-8GCI-8FT,8iFq,8^FP,8F+8.Ey+8KpE Y+8bE8+8D*8NlDѝ*8#D K*8nC)8}Cj)8,4C)8fB )8dBy(8A]'8$A%'8]@q&8ʧ?n%8>36%8=><$8 =m$8(<-$8e8Ļ *8!~ G~8 q8B V8 8Q +82a8CJ8;8p688u8?J8w88D8u%89sP8}n688|W89˸8r8t8b鶍e8c,1878{޶$n8ڶl8]ֶm8ѶW8*Ͷ8cȶː8;Ķy*8x88E8B¶8>gǶ'q8ǶU8KŶl8]F8 )8n8L-8V1V8wg88w氶yi8 8[98^Ѯ@8a88B,8ꄭ8X>85s8e8ÿ8լ>8v8Ok"(8$S8F8Gu8Hx8H8V@8_zp8J98g8N18ޣF 8rC8a8S]z8껝88m8]8|8薶8)o8S] 80G8 ďa8A85t8p__8G8m-8168mu#8R28wƸ8|#8!y\{8ul\8Gr=8n"8Qqkv8h8d8B+a98 ]8JZx8_V<`8`SH8O18iL8H8BdE&8zAc8M>B8:8z$78ވ38/r8iC,;r8%(%a8$"P85!?8| .88B 8E9g 8o- 8 81 8 8hPݙ 8l 8o 8-絧Y 8|oߵB 8X׵+ 8ϵu 8%ȵ 8_ 8-Xr8Zط,r8rfط>r8طq8׷q87׷|}q8ַ=Qq8mַ$q8 ַp8=շ?p8m?շp8Էpp8uԷSCp8RԷp8ӷo8?Hӷ`o8ҷo8ҷZ\o8Oҷs-o8:ѷdn8Ƿȼi8Ʒi8vtƷPi8Ʒ5i8Ϩŷh8gBŷ|h8ķQsh8Btķ:h8 ķ]h8P÷g8;÷og8·Rg8Oi·lg8xf88Tf8*bf8%f8NT$e8迷Ze8|2le8-e8y(d87Sd8>˽Vqd8l^>2d8c8c8tc8fg5c8B=5b8кb8b xb8>9b8Èia8a8k|a84Ab>a8ӷ`8fr`8R`8Ӌ@D`8`8;_8!B_8Ӵ?H_8e_8 r^8^8F^8w^85]82ı]8AR;]8߰\8lN\8j\8C#\8[8P,[8"F[83Z8R4Z8 aZ8ACZ8ʫaY8oPQsY8w֪l"Y82\X8᩷~X8f+X8:쨷W8q@W81W8|V8IV86V8U8U8z>U8ݨT82*T8꽣(LT8IS8֢ S8"eDbS8S8R8R8/;R8?tQ8՟zQ86mmQ8*Q8P8;P84ם;kP8Qt-P8sO8{0O87QzO8|-?O8O83wN8Ԛ7N8$uUN8N8nM8lVM8eM8Ɠ&M80L8̗L8g`L8L8䖖K8+K89K8GOJ8ݔwJ8i>J81I8y%I8mo$I8f~H8VH8kxMG8ElxG8-gyG82ڏF8J F8SuE8#. E8ŌD8wsC8XJfC8B8=B8z4A8؉ A85yk@8葈?8n퇷V(?8Hރ>8ף=8G6=8B[P<8;8k<;8suq:8ւ989B98yI88^78roT78268=~68g}{58z|F48{)Q48Sz38y738wx28w428vh18-vG18ku08tbs08t08Gxs/8ur0r/8hVr*/8Jq.8Nqg.8pu.8TpE.8oG.8:o-8ǒnk-8mN-8C!m-8jlA-87lz-8k1-8hk -8A|j{-8,j-8Hi[-8hZ-88=h-8g-8f-8Pf!-8Tew .8dJ.8#Hd2.8(c=.8bY.896b)q.8R{a.8Z`|.8``.8i_զ.8]^.8^/.8]m.8]y.8Mg\4.8l[.8Z>.8nZΥ.8Yk.8%8_=#%8=y$8!L< #85;#8:o#89Q#8d83E#8N7B#8<6I#8tC5Da#83#82#8/0$8F.P$8p,&$8* #8)؝#8(=#8w'l#8&aB#8%#8BG$"8#ؿ"83!o"8 "8n!8c 8ְt!8w=-"8V"8!U#8y2$8$8aE$8$8Rk$8n'$8b#8!x#8 !#8iP"81d3"8SQ8!8bYk!8L7!8(/!8f;!8>!8ؒ"8 &R#8-#8|"8 Q$"8[!8O8!8 b!8m]9!8j:!83 8!8ej} 8_8!8yu 8K" 8K:8/WP 8r8ܭ78p̃8֞ z8o B8l 6 8 r8 8? А8v 8s HQ8< 8hB8;;8^=8kM8 `8~~j8}z8_3+8bР8wA8PY8Gp8%8=q8[8 BL858~PV8r$궷8fW綷8B䶡8>t8A޶8s۶8).׶#8h(Ҷ !8 Ͷs#8 ȶE8Bö8􂿶8Q{8U¶8քH8ʶ8įж8ζ;8Gʶ8)Ķa8̿~8Ijkt8"շ878wϲN8"I8ۯ8߮@8Kl8 ~Dž8fA8tp 88e8jM88vp8Cd88٪8ח!8I8멶sA8{g88]+8en8*⦶8m88?,b8㣶8 8:_8 8P~8E,(8;X:8=H8 zP8RT8S8YS85R8YK8@8ы28N,!8 L 8t8̈́88Sۧ8518ռ{m8Jx-P8tK28Glq%8m8j8$gϺ8lc:8`I`I8i\f8jY"L8'U-28R8< O8K8H8ȖD8A8a=ʒ8:~8Qq6 k852W8E/D8Ө+g28( 8b$ 8p 8 U8iW888N(8cf 8x8wc8EaO8F~B:8$88D8ߵa 8׵ 8U4е 8قȵܮ 8L 8 { 8ge-r8Foطer86 طvr8$׷^vr8@׷Jr8ַr8uַq8ַ q8շ q8Fշiq8ԷB˷l8ʷTl8Vʷ!l8ɷk8[ɷ?k8,ɷk82ȷSk8Weȷ~k8?ȷj8Ƿj8b8Ƿƀj8Ʒ Kj8RnƷj8ƷNi8ϢŷHi8<ŷoi8ķ7i8nķLh8`ķKh8s÷Ōh87÷Rh8d·7h8Ee·"g8g8֑eg8')g8ؼf8Q׮f8濷Bqf8z53f8#e8`e86we8cʽ8e8]d8_d8I,{d8u;d8c8=Ec8к~c8c>c8b8b8Tb8ЯCb8Bb8շha8ha8Ia8p) a8!!`8`8E/O`8 ش2`8i_8b}_8Q_8Z+_8A^8=^8̱L^8[ ^8갷]8w]8?<]8T\8 \8f\82w\8q[8ES[8gά*<[8rVZ8ݫZ8daRZ8몷Z8rY8iaY8}Y8uX8 kX8BX8rGW8p2rW8+W8p'KV8yV8e6'V8徤U8=HU8ң4U8]iT8颷T8weIT8l"S8,S8 &hhS8PS8KyR8ggR8bvMR8 R8hQ8I@Q8>۝(HQ8.wn Q8P8AP8PqSP8L3P8IFO80O8:њ2hO8q-O8N8@N8oS,|N8z?N8鑘N8/M8̗M8;h?M8pL8 hL8 2lL8ƕi!L8YSK8bꔷnK8x.K8J8}J8J8ÙBI8;WI8$!H8~}H8H8BG8z$G8*쎷F8"[(F8ǍE8/2E8UD8zD8d!sC8{NJrB8(FB8A8爷A8 Fp@8ݣ[?8{b,?8%_>8+@=8;=8M{<8 ܃P;8b>F;85:8,98\qZT98܀>88J88Fyp78c~68T};68M|p58>O{58 Yz48ky438Qxz38Ͱw28v[28v28}Wu18?t<18est08Ocs08sr708?r/8ͷq4/85qEn/8zp>7/81p/8#o/.8o.8ENnÒ.8mn.8lI.8M4l.&.8k.8k#.8 j@3.8KZjS<.8SiL.8@i`b.8hPz.8 hc.8pgŅ.8fw.8Kf͑.8ܙe .8d.86d.8 c).8b_/8 b[!/88'av(/8ś`&/8_/8^ /8*A^.8D].8 -].8\.8Q\.8L[?/8s2Z?/8DYr*/8JY/8-X.8kXO.8;Xj.8Wt.8W.8Wl.8VP.8 V2.8̬U~.8U-8mU-812U-8oTډ-8oT_-8 T}-8CSZ-801S -8yRg,8?RA-8)GR%-8R-8RY,8Q]-8PB.8QZOBT/8TMf08s&LR18J[18oJ518UJ 08HJz08 Jk108*J=T08JA08IW08J/8lvJ08 JJ08;JJ08I5c/8Gj.8OE-8 DY-8;CY-8 C|,8Bo,8B*,8?RB+8B)z+8$A+8ZAD*8@;6*8@)8@N)8?(8?(8}>L'8=d&88-8,78Ůy8DD8Ԭ8$8{8FA88O8V8u8lD8s%/8gڨ88'8M38;gR8Gs8G/85Hc8t 8[8HM)8hL83n8瞶(8|8r88KX8Z-8zm8h'8WR88Ꮆ8%8f8\18懶8&=8#h8O8cv8e~l[8z?8%{wl#8t88p8(m$86i8Kf,8b?t8|o_W8\<8X 8U8cQw89N8MJZ8IGg8C 8N@Cs8:<]8F9xG8Խ5i28028. 8 +8r'8#f8V5 8g8xK8:8Sm8 Y8l ~E8d18c8O8D88(8wߵ8׵-8yaе}8Pȵd8(#`K8*18ݱ38.9Gs88ط#ps8׷Cs8H׷as8ַr8H~ַr8ַݐr8շcr8^Nշ<6r8Էr8ӃԷq8Էq8XӷR~q8(TӷOq8ҷ q8ҷp8$ҷp8ѷ;p8#[ѷcp8`з3p8зtp8-з%o8Ϸo8@dϷqo8Ϸ@o8ݛηo87ηn8ͷ!n8pͷw{n8E ͷIn8̷n8 E̷m8˷Om8}˷рm8t˷Nm8ʷNm8kSʷ=l8ɷl8Cɷl8(ɷMl8ȷl8`ȷjk8pǷְk8 Ƿ{k8j3ǷFk8Ʒk8`iƷj8ƷTj8 ŷ[mj87ŷ6j8Xķ7i8{jķi8Aķi8÷Si8z3÷i8·h8b·Ťh8zih8I-h8J%og8g86Pwg8/忷%:g8yMf8Q%f8f8}6Af8Nʽ+f8]e8ee8ɄDe8Ue8cd8>d8ѺSGd8dd8c8Cc8wKc8U c8Db8طb8>kPb8Y&b8ra8s$la8TWa8Joa8ܴ`8n`8[`8m`8#_8贲^_8~E[_8ձU_8$eS^8+^8UR^8#^8󝯷]8* ]8<]8AN\8̭\8Va\8]ଷ8\8Giz[8~[8_yV1[8Z8Z8\8DZ8Y8Y8PY8&X8ԬX82yZX8긦X8?W8ƥ\cW8M_W8 ֤V8^nV8\裷mV8rU8@U8 2U8T8sMT846NT8FǠT8Y]S8ퟷ\vS80S8NR8\R8GgR8H᝷'R8|sQ8Q8YkQ8BR.Q8P8~P8/|P8ϚAP8o P8kuO8ӰO8Q/VO8O8)N8.N8U̗_N8hN83'M80M86QM8t͕ M8GbL8?nL8$L8+-K8xrK8J*pK8NJ8 6WJ8𷑷nI8_7I8PTI8.H8)8H8 G8[ EG8lF8TkBF8֌hE8w@m2E8D8D8irC8sՉB8[7QB8b A8\A8Xx@85?8]4?8.y`>8Vڄ=8v<1F=8蟃<8';8k"V;8 Ձ:8@:8m9888(088~D78}}68o|j68P{58$zN58;y48]xD48#w>38.v'P38mu289u7p28t28s183CsP18r08r08qq08q408p /81p/84po/8ns/8nK/8_m#/8l .8l.8k.82kF.8Gj.8(j.8i.8i.8hh/8h$/808TtI^208I]08I/8Iܾ/8ЃJQ/886K08KN)18K08-I/8^RF_U.8D-8PBob-8ĐA -8`5AN,8<Af,8@,8@+8d@~N+8 @H*8?.*8>>)8k>m)8=NJ(8i='8i<'8w<&8K;%8G]:9$8\9B#8k]8"87"8d6x"8H5~"8u4W"84"83 #81O#8F0$#8g/$8-p$8Q4,:$8ؒ*ş$8a3)b$8(-$8-&d$8%$8$$8#;$8W"i$8!$8}W # %886$8i$8Y$8]$8ã$8 $8\R%8!~%8%8%8"=%8A?%8`$8O$8RF($8l#8Ek#8"8("8F"8D!8!8؊!8+!8)!8'P0!8 !8;m!8 њ 8H Խ8 @: 8M2 . 8dY w!8#`)"8Ttf)"8j7!8|*!8H)!8k!8w 8 !8t] !8 / 8Kv 8t , 8&r 8S/88Y8y8+i8 88`B8{np8w8=8j8>:8 ne8󶂨8g\ 8D8M83'8S붔8[8 88⶝8Oy8v8M޶8z۶8af׶8_ԶX8fӶ80JѶU8̶C8qȶ8=FĶ8_s8h8bp88w78᪵8r,̶x8Ҷ8bжL8˶8ĶӉ8_8L8 R8o 8X85L8\M28p߹8Q8qĪ18g"خ8q8_YA8#k8H78맶83X888@ۦ8xv88m '8*@8T`[86x8颶B8#m88P 88T08wL8xe8|8+ 8О˟88e?8Jȶ8 J8][i8v8C878E|88eQm8DX8B8})8$z8v.84'_+8} 8 88jU8h8-8U}8 ~8zߵf8#׵N8wtе58ȵ8 \08J̹8:8k8}>t8$׷t8Q׷Ps8oַs8 ַs8!ַU^s8շ0s8Vշqs8/Էr8Էr8:&Էpyr8ӷJr8J[ӷBr8ҷ[q8}ҷ1q8%+ҷߎq8ѷ>_q8`ѷg/q8}зMp8mзp8p1зp8Ϸmp8gϷ]8nܭŃ]8kgi;]8\8{\8g\\8q1\8&[8)`u[8v$&[8i}Z8 2Z8q6Z8>Y8ħY8)KBY8ѦX8"X=X8 ߥvMX8WfW8^W8ivkYW8iW86>V88jV8V8 ,wU8 U82H6U8ؠT82iѣT8\T8dT8#S8S8P:IS8L靷S8삝XR8ևR8$^IR8U R8>Q8aTQ8K0WQ8ϚQ8boP8TP8f8lP8uO1P8LmO8Ɏ O8-{O8˗h=O8@iN8}N8yN8H:4N8ҕM8&iäM8XM8j M8!(L8eL8< L8ƒ(K8wM UK8MґmJ8T`J8yԐ%J8QI8̏II8&EH8غ^^H8.BG8(dG8+F8z\F8勷E8NsGE8HD8B%D8lC8䈷B8G^B8SA8 $A8+nI@8xЅ?8E3@?8ϖ>8i=8ea@V=8ɂ<82}<8m;8 :8}3,:898r~88}1Z88|.78{178z+68ym68y58(x58Ww48tv48uӫ38u>38^_t28$sx28ss28Gr 18uq 18]dq=18Tp08Xp08o08;o`081n508bmo 08;mt/8l6/8k/8}k/8zko/80j^/8 jif/89iy/8FiU/8}h:/8_h/8-ugi/8}f6/8Rf 08Be'08WeC08]d\08(cNp08b\{08dav08P`b08b_N;08^%08j^08-]08]t/8Vk]c/8\/8q\/8 [x/8Z0834ZU/8Y/8jY/8 Yb/8Xp/8[^XKr/8XR/8ЛW5/8$Wp/8V.8U.V.8UP.8 U.82U h.8.UeQ.8tTx>.8S-.8-S.8չR-8^R-8 R.8Q.8OyQ-8dQz-8Q.8O.8M8/8lK$08I?18Hk18H518,H08$H-@08?H-08H/8 Iٲ/8*IY/8&eI/8%Ic.8Ji/8JK/8+J=]/8_zH.8ED>.8UC-8_`A -8[B@H=-8}?,8 v?,8A?1J,8%?+8 ?`+8>*8!>*8i=o)86<(8J8c28i8p88W$88 8Fƶ&8QNʶ'8QaɶL8\Ŷ8V(8ȸvU8 88q8֩aq8˭8RPY8 8)~8\k&88Λ8ʅ&h8N?8 8" 88K8ܤ8)g8/裶 8,]8â08VE8^u]8`pv8O888]8U8Q[8_A%8I88ϕI8_HW8鵒!b8 h8vk8:͍k8h8ob8[Z8 wO8QB8ޖF28ہ* 8)! 8|8Zyr8Zup8rri8.o8k,u8hKY85d<8?@aS 8H]8RbZJ8FV/8Si8Pݓ8cLx80I]87EC8FB *8>8T;t87C8CZ480H8T-r8)8B&m8W"W8{#B8Iw,88\t8!8 i8Bx 8ժ8O&8J~8:g8_-P898Vߵ7!8׵8oе8ȵ8|ü8Z8]8jk8hzO8;t8 [׷t8ַt8ַYt8*ַ,t8շs8S_շSs8Էis8 ԷJus8a.ԷFs8ӷ^s8 cӷr8dҷr8ҷKr8$2ҷ[r8ѷ0,r8 gѷ1q8ѷq8'зq86зjq8Ϸ :q8WlϷ q8:Ϸp87ηVp8R=ηtp8ͷBp8sͷp8'ͷo8̷Bo8$F̷yo8˷Fo8w}˷o84˷n8ʷn8Pʷ`zn8ɷFn8Fɷ n8$ɷm8ȷӪm8I[ȷZvm8ǷAm8Ƿ m8>-ǷRl89Ʒl8bƷkl8ŷl5l8ԗŷk81ŷk8ķ k8dķXk8÷k8÷j8.÷Uj8·sj8^·%9j8Ri8i8:#_i8p$Ki8LOi8俷bh8 zh8*Vh8h88g8V̽g8a`\g8Mg8f8df8=^f8Bf8=ֺ-e8iƠe8^ae8"e8#d8\d8J'ed8d޷`&d8qc8f c8٘jc8H,f,c8#b8 Sb8=洷qb8Iy43b8% a8ɞa8$1-wa86ò7a8Tk`8X汷q`8Lww`86`8—c_81'_8,p_8~D,_8CҮ^8e_r^8뭷\^8w^8]8]89]8\8)&\8YV\8L:7 \8"[8#IQl[8Ш[8VZ8[ݧ<|Z8cq+Z8tꦷVY8$q!Y8 7Y8>X8X8㎤DX8pWW8|W8*AUW8W8tAV8(Ρ%lV8[$ V8꠷VU8zU8 7CU82T81T8\ƞ}pT8:\,T8U=S8S81%hS8Q)S8[R8alR8pR824R8-њ\Q8?pQ8Q86HQ8N Q8P8•P83-YP8˗P8iO8O8d[O8@==O8֕6N8n N8&BN8M88,֧M8kVM8FK1M8גL8aCPL8o鑷%K8nK8#+K8nq~J8gWJ8jI8㎷tI8EZH8]΍'H8Z@LH8hG8[F8lvF8􊷨E8]Q]E8ʼnD8o+38D8ސסC8% C8YVnB8ԽA8!3A8_@8a넷I?8+QQ?8)>8 .>8ul=8<8e~*<8Հ ;8NID:8k{Q:8)s~98m}( 98n|88xw{78z n78ya68x^68&w58wc58Vvj48u{48t48-t38sLJ38r28)Lr28q]R28*q 28p=18p18oX18Sn(18cn08޾m08m08tl08kwc08\kA08Tj $08rj<08 j 08i08"i:08h"Y08Xh/v08 g+08f08^fU08es08U-8,->-8=z,8=!w,8=O,,8=+8_=*8-ZC#81,Y#8#+Tc#8y)S#8t(>#8&O'##8TE&#8F% <$p#8*##8!$8 J%83\%8$b'89b&8A&8 i5&8Ϧ%8Z%8ih%8%O%8@Ӽ$8Lh$8$8qy#8 #8D}#8"0#8#,"8 "8 "8. !8 !8G !8N _!8h _8!8!8Į!!8Q!8QC!8* 8E"J!8X͎!8~!8ڨ8!8!8!8=p!88ضq8ض8,ض"8k׶8QҶ8 Ͷ8Ƕ*8Ƕ#8^ȶ8$Ƕp8Rj¶88G=88T8C8 8[ $8`Rj88B 8'88bF8%~{88͵gW8в8@8Uz8]8u8i8è8맶K8/!8K8쥶8(^ ^8Zؤ;8uX!8ۣ8 _}8rߢk8Z8 ̡r 8@38!8؟28zD8=VX8S2m8YW8H*8%8aG88Ss8씶8wZ8 8h8XҎ$!8$4+#8!8剶8:8z8ۄ8b&,82o8m8{8xb8_uJ8?q{88n`b8jH8Wg)-8zc8y`8M ]x8Y8 .Vޠ8TRׄ8PO i8i8Y:8&78D3Ɩ8/0Q~8p,Lf8|.)N8%Q78""9 8S 8 8Sz8 8P8? 8$ 83|Ek8cT8}lG=8t%8?8dtI8ߵ8׵(8{Vе8 ȵI8%x8]8fB87;&8ȣq 8U8u8ַUu8Wַ(u83ַLt8շt8_hշȟt8շqt8МԷCt86Է5t8-ӷs8]kӷs8ӷs8ҷ;Ys89ҷ)s8ѷr86nѷr8sѷr8з ir8=зQ8r8~Ϸbr8qϷ>q8| Ϸפq8ηHsq8AηwAq8ͷ~q8wͷOp8|ͷp8̷lxp8H̷Ep8˷p8,˷o8˷o8ʷ>yo8dQʷEo8ɷo8Fɷn8#ɷn8&ȷun8~ZȷAn8Ƿa n8ǷUm8+Ƿm8Ʒilm8aƷz6m8 ŷ<m8Vŷl8\0ŷl8ķ7[l8cķi#l8÷$k8÷k8.÷Xyk8E·?k8^·k8j8j8j#Tj8۹j8Oai8忷i8={Abi8k$i8Qh8:h8uνih8bE+h8Hg8g8mg8Ba.g8Ef8yٺwf8 mpf80f8"&e8'e8,re8N3e8`ⷷd8 v'd8 zwd8V8d80c8ĵVc8X ~c8봷?c8~c8Lb8 b87OFb8rʲzb8\ba8a8+Ia8La8`82w`8hD`8P`8~߮'_8~my_84_8s^8^8_^8*2^8Z]8>]86Ǫ7]8OY\8ةv\8_P\8稷\8n{[8c[8|[8Z8h-sZ8h}"Z8Y8 Y80Y8P0]X8%X8B:AX8̢W8 XW8 䡷cWW8p W8oV8 uV8+V8U8|AΜU8՞VU8iU8qT8|8Ig(>8 ݈=8(<8|L<8;8Ix;8 ~(~:8 }O98|U98 {88~5z:88Qy878ux.78w68v468v58hWueN58Zt48,s,48Ks48ݩr538g rs38+wq5%38p28[[pԙ28o]284Io&28n18K$n18:m918l}18LlV18k /184kk18ɻj08Nj08i08dži08!iD08Lh<18Chy&18ЃgCA18f"\18Acft18e<18Pe318Sd18 d18Jcг18b18sa18xtar18N`\18`P18`K18aa+18K`18_K08^@08l].08GI\ 08X[08[08Z508D'ZR08Y[08scY708Y08X/8TW/81W/8eXVI/8yU/8^T/8 Ts/8SD/8S/8HS.8R#.8UR.8Qh.8:Q/8BQ /8P/8VP /8O.8ZN/8%L's/8IC?08G518JD18E?08Ez808 F/82FM/8DLFI/8^F.8fdF3f.8MFQ-8F-8F,8F,8VF,8FD3-8ެB_-8 f@zx-8n> y-8=V[-8<)-8!K<',8j+<ͫ,8<;S,8;+8A; +81;\)*8k:I)89(89(8|9s/(88%'8F8&8+7 &86eq%8Z5$84$84Mf$83$8$2B#861#8W0#87|/A#8#./#8[-RT#8,!#8k+#8"*#"8D)"8("8g& "8i%"8%"8V$ #8"#8!]=$8dm $8?c%8}FW&8,&8'8 ]'8/'8]'8*צ'8@?'8Z&8m}&88^&89F&8/&8g%8`[%8{sfG%8J$8c,$8 +u$8AE$8yQ1$8 w#8  #8te s#8i >#8 0"8LG "8z d"8 wh"8e 2"8M"8j!8P!8I!8 -H!84!8QX?"8f#w"8[ *a"8R9G"8+!"8"8s!8E !8!8GH!8M 8M< 8l 88\ 8}A 8^ 8R% 888V]m89/8{Bﶗ8W8궴8=OŔ8I_848k8߶8X&۶8p8*׶8նy8a4նn8*ն8)Զ8Ҷ86ζ8ʶ8Dƶ԰8Ŷ 8Lƶ}k8^Ƕ8öQ8dO6o8楾Ie8|8s 8[k88IΜ[-8k<8L8f]8B옶n8>ȗ8QH8M>8$8N8$8o8-8o 8E8qT88L8o\M8=8 8ʐ~m8%{8Gww8Lta8op&K8Mqm38Wj 8vf$8%c8H_x8I\Ѯ8EXǒ8ynUv8RwZ8aNw>8#K"8ɴG8DD?8@8a=8198x683f8;/FM8,"48(c8%8!8 8 8$h8nދ8gt8 N \8E8j"-8S8{8n8Z8测8=޵8 |׵w8+*еi8ȵO8|X58j!q8ò8\cB8+8P888э%v8ַu8=ַu8aշԜu8qշnu8 շ@u8Էvu8?Էt8 ӷHt8tӷ`t8ӷ7Wt8ҷ't8Bҷ)s8 ѷRs8vѷ8s8ѷgs8зW7s8(Dзs8CϷr8pxϷHr8Ϸrr8ηAr8KGη?r8ͷ*q8F|ͷq8ͷbxq8̷Eq8VL̷q8+˷p8˷ˬp8˷wyp8,ʷEp8CSʷ<p8aɷco8ɷbo8$ɷ9vo8ӿȷAo8Zȷ: o8Ƿcn8ǷXn8+Ƿ nn8Ʒx8n84aƷn8ŷgm8ŷm8/ŷ_m8ķ'm8:cķl8w÷l8b÷l8 .÷Fl8c·W l8f^·k8Ak8an^k8]$>#k8j8aQj8l翷oj8"}2j8i8i8h8}g8Ig8iݺg8qAg8g8_f8,f8eCf8BS@f8混Ce8z|e8Ge8K e86d8ɵ%d8]Md84d8Մc8Q^c8Uc8>c8Ѳ9b8}db8Zb8􈱷5b8pa83a8V8xU8 U8EIqU89:G/U8^ҜPT8kUT8#oT80T8O8$ғ!5O8XdN8|N8@N8jM8,M8|!P0M8򦐷L8*jL8 L8)ƗK8E )K8W J8@J8 I8SPKI8+󋷑H8cHH8JъvG8=T9G8TSF8F8|]E8:凷D8!MdD8WC8T2C8(B8n섷A8pU^A8[@8*"@8@?8[>8vH>8逷=8^=8u<8]~E;8%}F;8v|۲:8ܮ{":8z98y) 98x88!xz78Qw`78vl78#u68u#68^[t˺58s=V58s48br48@qI48D-q38XpͰ385 pm38o[138tn28\kn28m28Am_y28lQ28l'28kz18jX18pj:18j18AiG18Si18Qh 18wh#18g18ng18Kf28x/f28ްe,2898e?28ĸd5E28>d?G28jc;28 b$28Bjb283b218a718+a;18"aԽ181a818p`.18nb_18g^v18׋]h18\[18e1\J18[118.[18Z08QZ\08,Y08Yu08{YX08NXA08lWJ108dV.&08HU/08-TD08>S}08S/8PS|/8HRn/8Rb/8-Ra/8Qj/8OwQwz/8Q/8üPi/89PV/8QO.8+M&.8K[.8RI.8F/8E/8}sD/8~DI/8D֙/8*DxT/8nD8/8Dr.89DO=.8uDǩ-8RDV-8D,8Da,8AD,86Bi,8@ -8z>H-8"8N'l"8&"8%T"8P$U"8#"8؄"k#8R!M#8" $8UC%8y%8*H&8ӽ\'8Jyu'8}i'8?'8'8ǵ&8e&8|<&8eE&8D*s&8,Ϟ&8=j&8;1 &85 %8Nd%8nH%8#%8 $8' $8 |t$8+ M$8 '*$8~ #8xc z#8@ (#8 w#8­Z8#8<#8"8é"8P"8e"8 ^"8|b"8,2#8N{#8Z-Q#8>#8\"85&"84"8m"8g3"8!8!8 v#!8 8jy 8Vd 8 8z!88Y!8'0!8 8𶮏 8Xq 8x8Y 8z趎! 8|a.8J8خ8z߶s8ܶ4,8ڶ8d׶\8;ն{8YӶ,8Ҷ8+Ѷ8϶8̶+8(ɶ8p@ƶ8mbŶ8WŶ8Ķ; 8;w¶.8p580*8NȽ8v[8͜8 ^Q8h8"8޿8у68_eOo8J4*8/8 Ա^88Wh8P;8tq8B,8:8ݦ-8ޥ8 s8'78fz8ͱ~8dՎ8/bg8 F8x&-888랶 8H8Ξ8P윶84/8e88騙8"84-8l{:8qcG8xqhT8;4a8!ym8أx8B.8 Վ8[8؋\8Kz888zϏ8+փׇ88.}8q8}c8[FzS8vB8,ys.8pv8Sl8qv8*շJv88Էu8;IԷQu88ӷu8&}ӷUu8ӷf&u8ҷt8JҷXt8ѷft8i~ѷMgt89ѷ6t8 зQt8Kз}s8Ϸfs8Ϸss8ϷAs8ηs8Mηr8ͷr8ͷVyr8HͷFr8̷ r8Q̷q8˷q8 ˷zq8 ˷YGq8~ʷq8FVʷp8ɷp8ɷwp8&ɷCp8ȷ*p8\ȷo8VǷo8Ƿpo8,ǷK;o8iƷo8aƷn8>ŷÙn8iŷPcn8l0ŷ,n8<ķm8cķm8÷ m8"÷Mm8.÷)m8U·l8_·l8[hl8.l8&(k8зk8S|k8鿷?k8-k8bj8êj8?Jj8Խ j8^i8i8i8'Pi8K&i8L7h82Nϒh8⺷MSh8uh8 ;g8;Ɣg80QUg8ĸg8fXf8$췷jf8mXf8f8e8;1e8ϵ]e8jc\e8F'd8 d8dd8y&d8Emc8@ٲc8Vlkc80-c8#b8#b8޵:ob8TG/b8Xد}a8hCa8ka8j%)a8f `8Х`83X]`8`8=MO_85٫&_8dB_8覆^8yN^8xd^8,^8]8V]8%&2]8\85=\8'7G\8D[8̥[8SX[8ۤA [8cZ8죷9jZ8tZ8^HY8` ~Y8m0Y8|X8+FX8PKX8qF2X8՟W8e;oW8F'W8ωV8cLV8 XV8GV8ޜ'U8veU8xRU8mU8SD+T8ߚT8S|[T8pT85S8,US8~(lS80S80R8 ϗR8RmU|R8: >R8R8LE#Q8ᕷaQ8{>Q8-P8"lP8JElP8ړ"P8nO8܆O8䐒.5O8(N8rN85.N8+M8/C0pM8}Ə M8GL8Ǝ9L8CK81YK8y6J8.lJ8 !I8qI8xH8sjH8OቷG8MWG8&F8#:F8{uE86E8_~D8ɅQC82 MC8B8OFB8 sL{A8$@8NB@8\7?8"2r ?8o>8=81<=8",~<8,}<84|;8uC{:8IYzb:8uy98xS980w88[vU882v78ntu.i78|t68D t68*]s-68Qru58rt58tq 58p48CFp48oG48#)oi 48n38n38m)z38Tl>O38WZl&$38{k28(>ka28)j28BjY282iKu28kiBm28ir28h28@&hP28,g28g28fb28e28`ej28d28@d-28cq28bɴ28b28bw28a]28%aF28`*28` #28u`K 28$_!28v)_ 28k^18]=18!]18ǘ\187\!18ѭ[18J>[nU18ZB&18gZ08 Y808_Yͻ083Xq08ԥWƘ08yV08YUS08s5T08OSq08RH08FR08܀R%/8CR/8Q/8Q/8=Q"/8P/8PѢ/8OFH/8G O.8 M`-8bKI_-8_IC-8]rG.8E.8yD&/8RCY/8YC\/8&>C?4/8B.8BI.8BAQ.8B-8oBc-8B,8&qB ,8A,8@,8>,8ե<~%-8:cI-89<-8:,869,8B9,88#v,838 ,88+8cI8E)+8P 8*8*8g*8˄8G)87]X)8r6(8 6`S(8 5/'8'5]'8M4"&8V3ԙ&8|X2B&8Y1%8N0r%8_@/B%8S.$%8&w-%8],$8+$8*P$8)$8(#8'#8vL%b#8$c#8#CC#8W #W#8!#8E #$8Zb$8ı$8E_%8~%8{N&8y&8fou&8j_tG&8xR &8K%8B%8-I%8%8JX&8i &8 NI&8Ǖ&8T&8 f &8f %8V Ձ%8j @%8 %8G F$84# B%8 '$8C $8 ~$8}u$8E$8D $8q<$8]I#8Sp#8t#8-zL#8#8 #8|2 $8QB1$8S$8#8d^#8oi#8E<4#8h##8=!"8w"86"8!8|r!8ӏ !8| 8 8,!8_!!8!8!8`!8ծ!8o!8e-!8(wY!8R@"!8߶ 8ݶb 8s۶r 8Cٶf 8 ׶& 8ն 8Ҷ 8BcѶ8϶8ͶQ8j˶8ȶ8ƶ8vmŶ*8Ķ8ö7 8uP¶v 88Q8%8l8B8j,V8v߷!88ԳP87Ͳ^k8(8E858家/!87ou8꫶yE8l8e8h8~r8f88e 83z8I8ӡ 8O8\X8w8vT8bM88"88FEx8A87К8R8X5K8U8hb 8Vm8cm8I`"8!+8Z둶48Ϧ[=8TmE8L8劌zR8 V8^Y8 IY8|W8儶{R8HK8jB8m 88_|h+8:]y8lv 8 r8=o,8k 8sh8~ e8raH89^q8ZW8eW<8S!8HP8<&M8I8NF8B8u?{y8?88d8;q88xm8US8.':8޵ 8ֵ8ϵ98\mȵS848D{8}}8Yza8O7ND8E'8;l 8bH88jw8aշp8.Ƿ p8CƷo8cƷNo8ŷ8ho8ŷ1o81ŷDn8ķKn87eķn8÷]Un8÷?n80÷m8·m8]a·rm8c8m8l8|(*l8l8KVMl8쿷l8Tk8k8mi[k8Ck8ؽj8mj8K5cj8Ėz$j8+}i8>Xi8ISfi8@纷'i8{h8jh8hh86e)h8Wʸg8+^{g8.kg8ͅ ,g8 f87f8A}of8յ0f8iee8e8ue8%7e8d8FMd8ಷO}d8Pt>d8d8c8;-:c8Dc8Qyc8D㯷qb8stb8'Bb8S;b8%a89|a8BK8a8Ь`81^X`8꫷+h`8'wE!`8_8󍪷ݐ_8x\G_8r^8+^8Ef^8=^8LƧ]8tN>]8f֦1]86^\8奷\8mD\8[8}[88W[8[8Z8ǡkZ8 ,Z8 Y8BrY8mϠ8Y8\X8럷X8_z^ZX8 SX8:_W8.[W8aT@W8VWV8윷V8cwV8I47V8/oU8MrU8蚷JzU8܃H8]xG8^ɇF8o4XF8 E8 1E8$tyD8߄D8JIkC8B8$7B8^A8dA83v h@8ꀷA?8a5?8c>8~>8}q=8|<8{M<8z;8y3;8yy:8 1xm(:8 `w98v+98gu88udA88^_t,785sj78\s 78"\r&68̺qN68!q586p58oh58WoE(58n487n48mt48ymUR48R\08[8R/o08fQN08xQ@08:#Q808P608PU608[0P /8OU/8Nn.8M-8K ,8JD+87Ht,8AbF8-8PD.8Ck/8 C2/8s`B%/8wA.8|Ac.8FA~.8!A/.8@@-8 @rn-8A_@(-8?,8>,8Y%=,84;-8k9-88,8U8,8*8,8i8,87l,8vB7A,87^+8A6D+8n6^%+8uU6\*8P6H*86')8\5})84U)8#|4(8,4.<(8B3;'8N2v'8X1'8f0ұ&8r/6\&86k.V$&8"p-#%8ք,%8t+%8ݾ*"%8\)TV%8(0%8' %8&$8M&$8%$8$$x$88#P$8VH"$$8\!XC$82Z a$8N!o$8P$8R{$8W<P%8!-"%8i%΍%8sp%8 M9%8%8t$8ٴ$8|$8<b%80.)&8o0&8i0'8~ [ '8u %&8 &87 b>&8 >%8F :%8( 4t%87G j%8Y q%8In S^%8H%8_#'>%8II%8Ly%8d%8X$%8U$8y$8$8Sw$8ѧ$8W´$8Z$8g$8$8Fvp$8oT$8$a#$8#89#8Ҿx#8:#8"8Uz"84"8!8HW!8X3!8 󶙶!8g)"8zl"8*Hu"8Ũ"8o綾"8Y"8T"8;'"8߶z"8>ݶ."8۶!8Sٶ;!8p׶!8*ֶG7!8Ӷ!8tѶ!8 ж!8Qjζ !8̶ !8aʶ 8Rȶ 88ƶ 8Ŷ 8*Ķ 8ö 80x¶ 8FT 8qlm 8zj 8'|w 8r 8<N 88Wo@8^8T(_8Qԯ\8ʮ̭8R8ʐ8O8V&88gOX8W-)88O=8뢶3808W8 =8n88d靶Ȅ82.K`8uuA8#(8;8E88s8O痶8" M8#8/8.9888hِ8ܡ% 8<]v8 H8^8'Fr8Bӈ$8V08=҅[8En8W8l 8'~8{8phx8 u8q 8en8kݠ8g8CFd u8a`e]8|]D8Z]+8zVB8GS8OC8SvL8 I8E^88B(k8 >N8b;287Z8҉4.8198-y8<*88&8X#Tp8LIU8kn|:88l}k8!8-8M 8o88}kh8RDN848뵺8=8ݵ8pֵ8Lϵ8%ȵ.8w8Ϲz[8?8mg"8O9N88aʕ88JT8m8q? x8 շw8=(շw8EԷ&w8=\ԷtSw8#ӷ$w8ӷ~v8)ӷ:v8qҷv8]ҷgv8ѷ7v8Yѷv8)ѷu8wзu8\зuu8}ϷDu8Ϸu8)Ϸ*t8ηXt8\ηR}t8KͷKt8ͷt8)ͷ s8a̷/s89]̷s8˷Ls8˷vs8+˷r8'ʷ.r8O_ʷH~r8ɷ9Jr8ʓɷr8.ɷq8pȷq8bȷ:xq8 ǷWCq8sǷ>q81Ƿp8Ʒlp8HfƷmp8cƷ7p8^ŷlp8>4ŷo8ķ o8gķ\o8ķn%o8 ÷n82÷Zn8·|n8c·Cn8L n8im8+m8V[m8Y% m8e}l8Ɔxl8ll8-/l8;Hk8~ݽEk8rFvk8]8k8~j8t0j8Ļ{j8Xzi8T8T8S8(LS8蕷/HS8BS8{R8{LR8`R?R8!ꓷQ8Q8'H8m G8چ G8EyF8E8bRE8ۉD8%D8dލC8ӂB8D\B8(*A8;*+A8h@84?8(e?8N$~>8O&}>>85/|Ǭ=8;>{=8Sz<8py<8x;8Aw:8vC:8\)v:8 huߋ98st^98s88IsC88)r78qp78N[q+78pr68p68|ofL68fn 68Yn58]mQ586m]58ӧl])58l48k48k48!}j-48ir48_vi [48hG48(hT;48h748g<48gE48mfMN48eN48e@4813d+48Wc48#c38׽bG38D]bd|38ԾaG38ЊaH38L`G38"`?38M_j638u_#386_X38_ 38_>38(^38^38A]389+]a28»\28e\`28G\]28[S28=[28Z0188Z18.8k>-8%=.-8<,8;`,8YS:-88 -8j88,8W7,8i7,8YM7,8h6,85f,8X5C",8s5X+804t+8`4 +8d4*8}44\*83t*83?)8M3;)8+2(81(80P(85/0$'8@`/c'8{.#R'8-'8,&8`+&8*߯&8g) &8(cn&8a'P&8'm+&8$&&8kE%r%8M$+%8]#E%8Zz"ev%8h!L%8R @%8b(%8ٲ5$8$8$8 %8W%8I$8$8>~{$8x9D$8s$8_r$81q_$$8C3$8ݷ&8@"'8 C'8?h '8S J'8j 4&8 &8 g&8 $&8} %8 K%8zY%8?Jp%8%8c %8+2ľ%8C.%8%8n}%8~%8bt%8 )O%8M2%8@^5%8G%8ll%8+n%8'rg%8 +%8'd%8=$8S]$8)qzc$8<$8@$8Qnž#89i#8[6#8K"8G"8u!8/\8"8"8V#8 M#8D嶁x#8㶒#86W#8ඟ#87߶#8܍ݶ#8t۶.S#8o2ٶW׶("8ն"8 ԶC"8='Ҷ"8]ж "8\ζ4"8;0Ͷ"8˶!8"ʶP!8KȶA!8(ǶN!8Ŷ!8ĶQ!8Ķv!8*¶)D!8 8 8_ 8!86ȹ!8G^Q!8 8fM 8 18 Z87b88K髶r.8ª-8/l8Z 8u8奶I8b88yi>8p8uC8؇oa8#8ʝ8o8*,ݎ8/dh8_H8ٙ,8b8BJ48S|8$>8V̕8u甶8_8\8xp8|䐶x8ď%828_`8q8ʊ$8mG8H8Ζ8ke8󛃶z8'88M}8$z8hw8V#te8p85m8{0jo8f[8s|c F8`P/8\84\Y8gU_8R68.Ox8?K8bHRy8PD=]8CA@8*>$8:/83X783808x-A8W)z8 ;&^8"(B8[_&8R 8uN888Qҝ8 т8g8ݟM8 28?68:B8178% 8Lݵ8fֵC8Uεs8ǵW8 ;8&8wP8S98{-88_ڕ8_m8sN88P/8V>r`8cx81շx8ԷRx8eԷ4$x8ӷ?w8ӷw8W3ӷĖw8ҷJgw8fҷ7w88ҷw8Ùѷv8C3ѷ&v8зvv8fзEv8Ϸv8ϷPu8I2Ϸu8ηu8eηMu8zͷu8ͷIt8c1ͷt8̷ƃt8vd̷Pt8˷|t8Η˷s81˷is8\ʷs86eʷNs8$ɷs8!ɷJr8,3ɷޱr8?ȷ=}r8WgȷtHr8wȷr8Ƿjq85Ƿq8Ʒsq8iƷ=q8Ʒ q8ŷp8x7ŷhp8 ķdp8jķ-p8ķpo8,÷ʾo8!6÷o8·LNo8Wg·o8en8Ңn8C/hn8l.n8]m84m83|m8!l@m8m8GMl8⽷l8wKl8 l8Сk8n6k8ʻ%Rk88_k8kj8sj8Tj8bj8rCi8[׸Bi8LkVi8GKi8>h84'h8:rYh8POh8t㵷g8wg8 `^g8g8H4f8{ȳ~f8\def8V'f8֢jH\8_[8%꡷~[8t`[8a[8Z8~Z8\3Z85Y8tŞ8Y8VZY8睷Y8Sz/X8 X8m)GX87X8ΛuW89fW8CW8/W8L2V8'͙1V8hdLV8V8 U8>U8ۗ4\U8y. U8uT8\T8PjT8B핷 ,T8Z S8$S8EmkS8X(S8RR8R8eUR8U R8NFQ8בnQ8fQ8P8qP8 P8QeO8$ZO8N8(ɐN8ٜm'N8ֺM8JM8L87aL89K8qlK8䉷J8VOlJ8GƈI8r5aI8ãH8iLH8~[G8b녷.G80XF8>ń F82vE8D8HKD8MC8hwC8eB8cۀA8ESZA8,@8Z~v0@8l}?82|M ?8{{>8z=8Fyb=8xG<8JxpW<8Fw;8\yvU;8ku:8te:8W=tT98s<98r986ri88qa88pD 88!Qp78ou781o,178zn684m68'Nmp68 l668,l?68˟k58}k58ډj58i-~58tti4g58hFO58ohY858&gD&58g58 g58Cf[58eY58Q e)58Sd48c48b48qb*48Zbf48Ga('48'a38`738B`U38_38=_38C^38^38n^y38R^խ38]38]38#,]ø38$\N38V\Vo38\qM38{[*38v[28KZ28vhZ7`28Y?28QNY#28X28PW18V-18U18TQ18OTu181SW18NrR͂18²Qh18{PH18fP?&18'Ol 18O08OR184N08 Nh081M./8M.8< L%.88J-81I2.8Ga.8JF/8D.6/8 C/8%B.8&A /8r@/Q/8@b/8/?,/8*b>.8̭=F.8-=U.8eU<<-8\U;@-8 :-8lr9-8'8x-827Y-86[!-8d66R,8j5.,84,83é,83k,83%,8:U3+82}+8ݡ2N'+82*8h2Y*8`a2*851^)80)8=E0)8ƪ/9)8/`(8oM.o(8ז- R(8s,2(8+'8?*'8)4'8\ )z'83('80'\'8@&&6'8X%t'8t$&8#&8">&8!*&8E !g&8 LF&8Z.&8!&8%8E%8]%8^%8`$8m$8jt$8"=$8$8O#8N#8$8BE&8}o'8 (8P ~<(8 '8g |'81 =='8]v &8=&8&8:j&8sfH&8Q%&8@,&8vWC%&8}j&8Q&8j!%8%8~%86%8c-%8%8p!%8H͟%83X)%8*&8 &88%8_%8k%8^jc%8B%8,)%81zb$8X$8%?$8x/#8 *a#8%ﶤ#8E"8g붶"#8 #8 #8m$8c0$8X$8-޶c$8Tvݶ)$8ZWܶ$8ڶi$8߷ض$8`ֶ$8Զs#8Ӷnf#8Ѷ"#89ж1"8ζn"8[Ͷ"8̶"8ʶb"8Q`ɶn"8?ȶ"8+ Ƕ"8"Ŷs"8ĶK"8ö!"8a¶\!8M!8!o!8Ӿr!8|!8m!80]!8!8W^S!8_m 81M 8oL8k櫶r8˜8 ^8u%N8ꦶ8?8w{98$F_88{<88a8B8g8L *8$83FG8/n 8`n8ɘL8b/8&X8Rh8Wz*8_C8C8|ʒ8ԑb8Ӑ8Ǐ[88͍O8@_8%8߉8 838΅8D`8J邶~8js8ӝ8|8ty8\v~8w$sp8eoqa8ilP8CSi?8f+8yb'8W_G8[E8XG8BUm8Qʟ8yN}8Kj8޺G"O8VD738Y@8a=8$:8ǽ6N8%V3}8/8L,j8)N8ݮ%{18B"889g?888 8 7l8+ tP8J48?=8?m888X8E㵇82ܵr8յ{V8ε6:8Qzǵ8k8ZY.8E8c.8S8Dm8 ݕ2O8нk08뜇J8]z8r8ad8VRy8Է$y8oԷCx8v ԷAx8Sӷx8=ӷgx8ҷ>8x8\pҷx8 ҷw8dѷww8<ѷxw8Bз{Gw8oзw8зv8-ϷQv8s;ϷЂv8η Qv8mη v86ηu8yͷru89ͷهu8̷Tu8gl̷!u8̷t8B˷Dt88˷t8SʷSt8kʷt8ʷs8Qɷfs89ɷs8ȷZNs8lȷs8ȷr8Ƿyr8|:Ƿ+zr8dƷDr8EnƷ r8Ʒ(q8ŷq8;ŷlq8ķ+6q8nķMp8ķ,p8÷p8:÷Xp8· p8dk·:o8·To8›vo83cӫW8יmW8rK0W8 ~V8V8FzV8◷>V8zV8gU8RSU8VxMU8 U8ώT8n*T8^Ŕ?RT8w_T8S8ɈS8'MBS8;R8tQYR8䑷vbR8t R8#sQ89mQ8T<Q8UP8.j_P8TO87O87O8X97N8*2bN82M8M8$ M8wL8 L8v˚K8~CK8^f(J89ևJ8GEI8sH8![sH8ypG8AUG8UkF8ك~2F8XIGE8G E8D+vD8CC8 LC8݉ŷB8,#B8A~}A8};@8:|k@8|t?8`{L?8*'z>8 Dy 8>8uhx]=8w[.=8vܫ<8u,<85u;85{t@;8 sk:8$sc:8kr98Fqz98qxC98{p88Loʢ888oKY88n88m78temL78lK78:l78k!68k+68jn68i<68liv68h^68ShA68 g$68]g< 68f580lf58}e]58.;e58Vd58տcf58Hck58jbG58ae58eak858`582`48$`š48߭_480_48~^48Zf^48^48]I48Q][48N]J~48]k48 \'48^c\*48b[%38 [G38Z38Z$38DZW38Y28 Yp28X 28W228QWa28V0{28!Ui28WTS28eS?728#Sl28YR18Q18OPq18OM18\OH18N#18M[428ZL18tLI=18Lݹ08zkLl08HKqt/8NJV/8NI!/8G`/8{F/8@E@/8$D$/8| C/8dBM/8@j/8?|08>/8u=/8П+8pE1*80*8/~*8M/ e*8 .3;*8. *8s-U)8,c)8ϟ+#)8*(8)(8)((8jN((8\'(8\&Y(8v%2(8$t(8#'88"'8!V'8%!'8!` g'8d'B'8QR-'8NC'8G&8 :Z&8oD&8d&8&8%8_%88R%8i^%8I$8 '$8Z/%8&8L'8 -(8<: <(8U} (8 '8LS '8°'8!c'8;-'8k#&8]&8|Bi&8%&8E&8&87p&8 T&8ȍM&8}?<&8&8&8>m%8v%8E %83, &8:&a&8r&8zf_&8mH&8}8&8;,&8o&8:F%8y %8k%8i!%8 $8 e[$8@ $8[궄$8綉<$82y䶭$8l$8u߶$8CK޶>$8ܶ$8s۶%8 ڶ6%8bٶK+%8;ض$88ֶ<$8#ӶN$8Ҷ\5$8<Ѷq$8-ж#8cζI#8nͶ#8˶#8ʶu#8@ɶV#8fȶ`#8WǶ*#8fƶ*#8 Ŷ<#8|Ķ"8>¶"8m"8\OJ"8E*"8I0"8C2n"8jQ"8w'h#8Ķe"8*_h@"8粶h!8k +!8̬ 8N 878C8X088vT}8'8١8868o8c|8bi8#j.8z838U8Зr88εf8ǵg838˪8 (8jEo8Q8q䜵28ӕ8z8j8.8r8ķ_r8Bsķq8 ķq8÷hcq8>÷+q8q·p8p·p8|·p8Ip88p8Ho8go8ao8ܕ&o8},qn8¾n8XYsn86n8m8)m8 l~m8CQ@m8ػm8[mGl8el8-MEl8k*l8k8R1k8渷Gk8zk8j8ɢ j86Ij8ʶ0 j8_i8Dًi8Li8"i8*h8Dh8سxRh8Lm5h8g8 g8W*Zg8g8Rf8z氷f8(zoaf8 #f8ՠee83he8ZƮ(fe8Xp&e8JꭷAd8{d8r _dd8М"d8,Ac8'c8JSYc8٪c8fmb8󩷃b8wBb8 >a8+a8=#ia8׭# a88`8¦`8K?`8 ե_8;^%_8J礷wZ_8Op _8\a^8 s^8 %^8i]8P]8>]8U4\8\8Kj[\80؟\8e[8J}[84[8aZ8%sZ84`Z8ǜZ8;[Y8ʔY8%RY8Y8X8>K:X8D䙷SX8}rX8JW8L*W8N^W8ꗷ"W8'`V8#%V8mV8\E1V8BU8U80(xU8˔8U8cfAT8gT8%sT8L0F.T8ƒS8\9S8TS8"S8ZR8fR8.R8>ƻQ8CbQ8SˎyQ8PP8QԍCP8UCO8Ռ vO8S O8ϋ=N8I*N8iM88[?M8cL8!HL8M}K8GK8&voJ8冷D85C8_pB8GY~ \B8X}EA8 ^|:A8g{@8exz@83y=?8x?8w(>8*wT>8@5v>=8ou=83t<8Ks)<8]Hs;8rB;8aqv:8'Cqk}:8'p%:8o98bXoS98Wn898Wn88}m88[lg88Jl|*88ks78k78j߮78i78A`iF78jhym78~9hEN78g)780g{78۹f68Cf68eI686e68Idk68`c68,c68}b68uah68JaM68`M(68OM`582_658%_{58r_T58|^eK58 :^f58^]58d]58]B"68d\"68]j\d58%Z\48\38w,[48H[=48}@Y#@48yX48AX58k`X*L48jX38fXˠ38TW+38%8f=%8|_%8&Z܏%8޶%8$ݶו%8<ܶj%8kڶ%8Pٶr%8ضܭ%8c׶%8uֶ%8k6ն4_%8Ӷ*%8NҶp$8BoжV$8϶$8HͶt$813̶-$8pʶ $8ɶ#8ȶZ#8nǶ#8ϕƶ̽#8yZŶ#8Ķp#8¶#8>lr#8u?#8,p#8&V"8q"8e"8V'1#8R#8ɵ~t#8 s"8P]"8c!8j8!8i!8OH 8Sye 8ͥ 8\8d88g8.0w8{.8|圶86ћ89ǚRi8{ƙ/8͘8ۗ889Tt8x!O8</84W8o8򄑶88885N8@88`؄8`7|8>u8džn8g8/`8ԂxY8qQ8WI8O&}_@81z68/w*8!t8q8)m8Եj8Ag8Ed8a68]8qZ8U#Wy8Sa8|P5I8$M/8I8toF8CZ8?t8U<8g8o85m812hP8.&38k+89(18$8;!8'8om58d8A]G80*8 81X 8:8{n8pX8Y2I{8L7^8dA8y#8۵8Եw8͵ 8Ƶ{8,8Cør8DZT8Ȫj68ȣ8KŜ88P{8>̚8,z89s}Z8ge98W8wH{8:z8Էiiz8ɶӷ2:z8Pӷ z8dҷ2y8 ҷuy8ҷ{y8ѷjKy8Pѷy8зx80зݹx8kзԈx8ϷWx8NϷ;&x8ηw8ηw8ηw8ͷ;^w8Kͷ+w8̷v8}̷v8̷v8 ˷O_v8&I˷+v8Iʷu8y{ʷu8ʷЏu8ɷ[u8GGɷ'u8ȷt8zȷt8ȷӈt8ǷSt8}FǷyt8Ʒs8yƷrs8 Ʒ}s8ŷGs8Eŷs8\ķAr8xķr8ķmr8÷6r8C÷Cq8·q8fu·q8 ·,Wq8!nq8'>Sp8۫p8mrp87p8 o82o8Rɾjo8_Jo87o8qn8 !gn8bVn8K"n8o໷m80um8 ]m8Am82l8ƹĠl8[ial80︷!l8;ek8Ik8Z`ck8v?#k8Ӷvj8gj8ej8/&j8}$i8ٸ i8GM`ji8᳷+i81vqh8 8Nu[>8ts=8'tMo=8qs`<8r<<8' rU!<8^_q;8^p \;8yp];8to:8ns_:84n:8Öm98l|98\lG98k986$k88j88i88^RiҒ88 hx88"hV88g=,88F g88f78\f78•e78e78d78c\78r6c78b378a$w78u'08@(8/=@(8>$7(8wzw'(8*2(8d)'8Uq'8%S'8ft"'8 '8nR'8J'8W5'8'8GG'8%t8ON8Jb,8_t88ɑ8Ԛ848-Ş808*68/gt8@Dh8^8ⅶS8ţI8[D@8} 68k,8ɛ~"8{8ux 8Cua8hr8o8bl86i8fs8\c18%`܎8\rz8+Yd8_V_N83S68cOt8)vLC8!IY85E8rB8W?8I;}8a8a85D8ޤ1&8&E.g 8*8u'8R!$'8Z 38wZCt8YV8s88:*88 [ 88݇(8n8`g8oI8?,8赆8)8g۵8&Ե86͵8NLƵx8_Z8xp;<88898О8-8}p8ka8V"A8^s 8_[e89UWx8LI8A;84-;{8}ӷ? {8`Zӷz8(ҷ0z8ҷg}z8'ҷuMz8ѷ[z8~Zѷ y8зy8)зy8i&зZy8Ϸ)y8XϷbx8ηx8Ȋηx8#ηbx8ͷ0x8Uͷ3w8̷rw8i̷{w8Q ̷]ew87˷1w8"R˷v8ʷv8"ʷۖv8-ʷbv8>ɷn.v8[Oɷu8ȷau8ȷu8ȷ[u8AǷ&u8MǷt8Ʒt8:Ʒt8ƷPt8ŷ t8@Lŷs8ķs8~ķ'xs8ķqAs8÷ s8I÷Jr8·̛r8M{·cr8·+r8#eq8@Dq8$dq8sGq8B q8p89p8>о]p8f*"p82o8ݒݩo8(*mo8$ 0o8uSn8軷n8t}vn82C8n8Φm8D;m8Ϲ{m8cwl8H!k8ܶk8pDk8@k8Sk8-j8j8nVDj8곷Ij8wi8gi82Ki8 = i8ѱ h8 f h8gRh8h8"g8g8FJ6Zg8ݮg8pf8f8 ]f8(f8ke8Jfe8۫Ze8ke8}d8dd88Nd8B9 d84c8s}c8Ne6c8ڧb8&fb8M]b8|fb8*a8ᐥi~a813a8`8U.`8O`8AI`8\ˢ_8LUj_8{ߡ<_8i!^8;^8:^8 ]8H>]8]%S[]8']8Ai\8Н\8`:\8[8P[8k[8+r'[8>Z8ӚZ88j\bZ8`b"Z8V0Y81Y8<˘fY8e )Y8!X8X85&sX8_і6X8mFW8W8nƀW8?sCW8۔sW8uV8V8 FV8WBV8ڒNU8p:{U8an4U8ǚT8-T8<,TT8OT8DݏS8i_S8@ S8}R8%TR8&YQ8l Q8򎌷/Q8P8^P8O8O8qO8r^N8舷"N8\MM8-Ї+M8ZBLL8*L8K$IK8s!K8CuJ8ssJ8ヷI8,TVH8%łnH86G8ҩRG87F83F8V vE8 ~E8m~D8}~C8| jC8! {yB87zSB81yhA8COxzCA8@qw@8Xvh5@8hu?8 u8?8 LtZ>8.sP>87r=8"rj=8sqm<8ap<8Q-pO7<8Vo;8ng;8Mn9;8@mx:8:mצ:8olg:8k2:8?-k:8Zja98ip98Giդ98h98>hZ98xg|(98f88ef88e^88#ce’88d:88Ldy887cO88c&88gkbn88a88ak88}`w888_Z`88Y]_<488-^78^q783^-C78N]*78P]R 78\@78Y<\78[-88G[YV88Z7884Z]78nY_58 kXV-38UZ38-U%48$Ul+58=U468f18 =s18;18W;°18/;18}W:18Ӌ918"8$2872846 18Ҡ5\084#083t/853.8u2P.8 1o-81-80I-8O20-8(/E-8U/~-8b/\-8.n>-8."-8Tw.; -80.-8-9-8,7-8',,8m+q,8ڮ*Y,8N)x,8$D)E,8(),8 '+8%&D+8%az+8$C+8l$,+8#*8XQ#*8؃"j*8!*8i g*8KQ*8 >*8x.*8̹ *8(*8y)8#A)8?)8Z4)8hS)8N)8 (8Lp(8QTx(8 S(8FT,(8xV9(8b (8) T(8^ +(8[ X=(8i8 g(8g ,(8C.(8(8/ (8T(8(8 إ(8%W<(8V(8(8+(8l(8%;(89 d(8^(8>jK(8J'8/ (8(8{8(8_sW(8T(8PqC(81(8Yl(8c͝(8C6(8a(8C)(8iOx'8=Ҵ'8WF'8Ò'8J嶩'8M|'8yv'8/xPm'8E߶]'8NݶwG'8sܶA-'8ڶ'8zٶ'8 ض'8(ֶ'88ն '8%%Զ&8e1Ӷ&85Ҷ5&8ж&8{϶.X&8>Ͷ%8s8˶n%8vɶ %8vDȶ$87Ƕ$$8]ƶ#$8FŶ$8ö6%8¶/%8j]^%8L`$840$8e Ϋ$8$8ɻw$8b R$8=T$8K᷶$8W&c*$8@#8?ճ܅#8z~2#8*"8."8D"83[!85h!8/k!8=%!8 8WX 8MW 8 ݚ 8h8XE8~a8!qo+8jH8jc888գ8᥌p8X8|E8_{8t*k8V[8/'M8}?8ȃp28m%88?8L 8&}8mbzz87w8t8q86n]8k'8٭h8e8nbw8B_d8\O81XN:8 U#8wVR 8Oa8K_8ZxH8u'E78%A08>p8\(;T88778Tv4818-8>a*C80'O88#(8jD g8I8$(+8 8ɼh8X8C 8+8)(t8xV8(888m x828;Zᵵ8yڵK8ӵс8̵Dc8ŵD8%88m38WJ8k_8r|8냕i8I84)88qs8Ye81W08^Iv8;la8-?8{8dӷ!{8ҷ{8ҷO{8d1ҷ{8ѷz8zdѷNz8з׎z85з8^z8x0зW-z8Ϸ@y8bϷy8ηXy8ٔηgy8-η5y8ͷky8_ͷx8b̷Sx82̷wkx8)̷f8x8˷x8[˷w8fʷw8?ʷjw8$&ʷ 6w8ɷw8Wɷ[v8ȷȘv8ȷ dv8#ȷ6/v8(Ƿ7u8IUǷu8lƷu8Ʒ2Zu8 Ʒ$u8ŷt8'Sŷĸt8Pķt8mķ;Lt8{ķt8p÷s8QP÷ɧs8·sps8·8s8L·s8r8J=r8eWr8z"r8&q8q8@Dpq8׾q5q83n@p8p8p80KFp8PƼ p8[no8o8#Qo8o8n8XDn8ع"Wn8*mn8xm8m8)#Zm8m8R9l8L涷l8{zO\l8l8k8=7vk8˴^_k8`| k8j8/j8dj8HM&j8Fi8z۱i8pki8-i8 h8Z-h8sh8|U5h8=鮷7g8|g8yg8㢭:g8t5(f8Ǭ.f8YYzf8꫷9f8y{be8 Se8se8+:0e8ݹ#d8Hld8ըbd84cd8Ec8V|c8-}Ec8b8^b8~ib84b8P3a8jHa8dңr=a8Q\`8I梷Υ`8VpY`8 `8_8^v_8*_8v&^8^8'? K^8s̞^8pZ]8靷Mp]8px(]8\8T\8+hW\8^\8,R[8暷[8{K[8V [8Z8@_Z8e٘MZ8prZ8 EY8:BY8@XY8ۖ Y8wX8] X8JfX8HH)X8䔷W8~W8nW8˲.W8KV8䒷rV8Y{gV8"V8U8:U87͐QHU8F^nT8폷NT8{ZT8IT8c!S83EXS8R8 'SR8#X=R8+Q85PsQ8) Q8%P8g/P8wO8HnIO8EN8YN8Tm!M8߆O`M8ZQML8O…D^L82MK8TK8JJ8qDJ84ȺI8e/I8ׁH8^KH8 *G8[6F8]`oF8Q~cE8K}KUE8LK|D8N{;D8NXzC8jy)C8xB8JwB8v>A8cuA8)u@8ht/@8Vs?8r/?81re>8DqB>8%p=8=pn=8أo%=8Hoպ<8dnC&228,B18@118ر?#18{>Z18;j=18Ϧ<28AE8u8z808韈l}8{h8SpU8MB8#18%!8hi8u)8=U~?8A{8x87v8es8:p8Hm8j8ҟgt8dRb8MzaNO8LZ^h;8 3[&8X8T8Qa8VN98-KF8G8DC~85AJc8=G8:+86@7 83!808 ;-8)8A&z8*#\8>8pV888R838 08.Af8`SG8}gh(8` 8:8,m8hŬ8ɍ8_ٵn8'ӵO8P̵08xŵi8Ҟ8:÷8尵85_8$}s8BrS8p]738.w8C8'8,vs8e8+Wl8IJ8*<(8 .68: d8Ś|8ӷ,R|8xҷG"|8;;ҷU{8ѷ/{8snѷ{8ѷia{8Lз0{8:зz8Ϸz8lϷz8Ϸ,lz8 ηu:z87ηz8ͷuy8iͷy8~ͷqy8>̷>y83̷ y8˷x8ee˷x8ʷqx8Ӗʷ=x8/ʷ x8Sɷw8!aɷ-w8ȷlw8̒ȷ7w8+ȷw8Ƿ#v8]Ƿ v8Ʒcv8ƷS.v8(Ʒu8ŷu8Zŷu8ķWu8ķ u8%ķFt8÷t8eW÷|t8%·Et8Ȉ·.t8I!·s8s8QLfs8-s8ځr8rr8ҁr84HGr8?߾y r8vq8 iq8񢽷[q89q8μfp8dp8ip81,p88$Do8)o8Mqo8j⹷:3o8ven8? hn86vn836n8ȷm8*\m8S𶷤xm8=9m8l8l8QA;{l8մ Vh8h8Bg8;լ3g8gFYg8ag8̊f8f8WTf8c<4f8˩e8Ze8P騷tFe8OwSe8d8呧td8u-d8c896'c8Tc8L c8פob8bub8y죷+b8va8a8:Ia8`8!`8*tf`8.`8]A_8'͟i_8sY!;_8U枷j^8sG^8 _^8^8a ]8,]8AD]8ӛ]8f0\8y\8뎚6\8,$U[8Gȴ[87Qu[8蘷5[8+fZ8YZ8^{Z8FM>Z8疷Z8FY8!Y89LY8R_Y8픷4X8qX8"4VX8X8UW8oW80|SW8W8kV8mGV8ڐ:V8 m%U8PU8JTU8$U8T8H0YT8ȸ$T8h?S8#ČHS8GR8<ȋR8GR8ŊBQ8AJQ8P8h4mlP8oO8!O8| O8 ǑN8|\N8zЖM8_IM8bЄL8@L8@JK8!lK8I{J8I8YwgI8#뀷aH83`]RH8ʭG8~;G8|}"F8ُ|F$F8E{E8z E87yD8xD8wxC8mvB8vlB8CuA8}tsA8cs@8r@8:r @8q ?8p?8Ep >8o9K>8vo =8un=8mJ=8R'mO<87lӵ<8k>{<837kN<8:jf.<8i/<8/i;8h;8g;8Tgp.;8ofW:84f-:8Ye3:8 &e:8d`:8cL:84c-:8|b :8a.:8a,;8u`T;8_:8L_;:8%^:8-^:8p]j?:8f]98]V98ް\88o1\)88o[88Z98Z98EY 98lYF:8Qp:68pYP58O!58 O58bNn58IMHN58IM158ЌL58L!58,iK48J48z]J48I~48wXIy48Hv48vHD48GD48}IGT38Fɶ38EV384DB38C38lC{28Bf28@H$28f?28>_*28=\O28=28<28*<28;K38mK;38:48Y*:48"938̲728O618Z50853/8B27/81.8812|.8v0.8;0^.8=/C.8/O.8|c.y.8-*.8'J-.8,.8ʷ,'.8G,.8q+.8&+Q.8*q.8wE*L.8P)q.8S)u.8 (b7.8Q?(D-8}'R-8&-8%Y_-8s$.-8N#-8"X,8G"s,8!Z,8" },8)*i,8:G,8i0,8g!,8.`,8o ,8D1B,8+8+8w#+8r+8 e4!+8+8*8m+8+8*8 n*88 χ*8A 7y*8 p*8H Q*8 #)8sE*8]2*8>*8 *8&4C*8&g*8 *8ME*8*8@?*8f*8٘n*8 +8|&+8j +8|^*8N\*8xJ*8*8m*8$*8L?3*8:(*8Č5*8-F*8B*8́U*81!:)8j)8)8Mެ)8)82')8ⶲ)8h]උ{)8޶U)8ݶ0)8qܶ)8+۶(8ٶ(8׶(8ֶn(81ն(8bӶ(8{ҶN(8EҶ)(8koѶ'82ж'8Zuζm'8 V̶'8ʶz&8Sɶ#&8\ȶ&8Ƕ*&8>Ƕ&8Ŷ4&8(Ķ4H&88¶\&8*j&8i&8_&8½Tb&8ۼac&8E&8%88pA%8䷶04%8Z-9$8.$8sK^$87w#$8#8J֧#8#8?b#8c4#8ډ#8圶s"8j"8 :g"8Ę/"8q!8c` !8=!8D#T!8i!!8Ak 8 8]h 8T뎶k 8荶C 8挶 8%䋶8ߊ 8 ى8Έ8'686l80T8s>8M)8e8cꀶ8[8Z|8;zF8 w8}t8rƙ8OJo\8Ellv8Ri0I8ڹ,v8c)Sp8f &Q8"]38Z888rIV88x80 yY8:8q8378_80R8kޜ8 d}8D]8FzٵI>8֭ҵ8˵8ŵK8>x8pk88iX_8P袵?88K38V 8Fx8Ț8nsKy8eW8W58NJt8vJ<8z.K8 H8E8 %}84ҷ6|8Eҷ7|8ѷ|8_xѷd|8ѷJ4|8]з|8Dз{8Ϸۡ{80wϷp{8NϷB?{8Tη {8DBηz8'ͷz8sͷxwz8 ͷDz8̷Ez85>̷Ny8˷0y8{o˷xy8˷SEy8ʷy8Z9ʷx8ɷx8jɷNux8[ɷ@x8ȷA x84ȷkw8Ƿzw8dfǷnmw8<Ʒ-8w8Ʒw80ƷAv8ŷv8bŷav8ķ+v8ķu8k-ķJu8A÷u8_÷Qu8·u8O·t8(·at83tt8xYAo8kҷn8fn8LVn8n8>#}m80m8KXm8.ഷm8tl8l8\l8*2 l8Ʋzk8[k8A𱷦bk8~$k8cj8acj8Cqjj8ׯq,j8lqi8gdi8/ri8q(3i8 Zh8Oh8⬷wh8hu8h84g8ʙܷg8Y+wg8r5g8.Mf8eݩf8menf8;*f8݊De8Ke8˦[e84]e8Ad8;Md8-٥R>d8dc8.Mc8I{bc8%[c8Րb8lb8񥢷 8b80a8.¡a8FVa8Ѡ a8i\`8蟷u`8%t+`8_8э\_8O_8򩝷b_88^8Ȝx^8Y2^8Z꛷]8{|]8oye]8#"]87^\8̙#\8b^\8\8&[8A)j[8jc[8[%[8Z8Z8 )`oZ8Õ2Z8^Y8޸Y8{Y8@-=Y8ǓIX8~` X8QX8l>X8(W8)W8NTrW8萷+W8{3V83 V8eKV8,U8٫U8DXU8z΍U8VT8܌OT8raS8䋷S8e"0S8z䊷R8bXcR8݉Q8XNjQ8Ј9Q8G`P8 6P82dO8yiFO8,gN8PNN8\KM8?mNM8݃(L8pNYHL85>K8p08mN>8Hm4>8dwl=8k=8J/kWq=8[jBO=8ri9=8i%=8lnh6=8g<89g[<8f;8E!f};8ݓe ;8Ze:8dw:8cw:8{c?;8Eb8;8uag<8`P<8_&h<8U_R<8^"<8sM^D<8[].;8?]m;8\4;8\[:8RD\f :8 [98U[98Z98Y98Xs:8nXL:8mX;81Xe:8CX98}W88[V88 UD78TĊ78_S78R-V88IR88?kR)88 =Rl88^Q 88Q.78Qj78P,778ZP782O168njN68^Mr685M,O68LZ-68K<68 vKL 68J 58ZJ'58IV585I'e58%HA58H558ZGyD58^GO58G48QF9|48EQG48E484E38ND 38vC?S38F!BF28@D28?28b>28=28f=@28Y<38ȋ<=U38338_8 3862285FX18u4,08e3o/8`2"/8؀1.8<=1/8G0.8p/.8/.8UI.&/8+{-4v/8,/8,/8+/8+/8 +/8r*08.*081)/8G|)/8(/8))(Y/81w'+"/8 y&I.8s%.8^$S.8#_.8G #0.81E".8r!N-8+ 8-8(-8z-8RQ-8j6-8K7#-8`-8c-8W,87-8-8X-8,8Uv,84F,8T]9,8-Wk?,8[B,8',8J ,8r% %+8L 7+8 +8v ,8% +8d +8p+8+8*+8+8̶+8Q,8 f,8T+8.0+8Nbc+8-+8Y `+86u,8o),8v,8ʸ+8` z+8 4:+8+8j +8e +8+8N +85%+8;) +8Qm +8w궽*8*8x綄*8=V*8s@*8Xf*8=R*8u߶t*8ݶ>*8ܶ *8a۶)8[oڶ&)8ض)8ֶת)8qն<)8$.Զ)8&ҶX)8Ѷ(8Ѷ<(8UѶ'8gж'8ζƫ'8Z4ͶG@'8˶&8'ʶ&8Pɶ&8]ȶ&8gtǶ!&8-ƶ &8Ķ&8$!öh'87+'8tU<'8I9A'8@'8h/'85A&8]@x&8%8d<%8˭%8Yk$8$82Q}$8WW$8R/9$8yL$8㠶$8Şb#8眶#8>~#8ƿAy#8`K#8@#8ޕ/"8ܲ"8⏓"8t,M"8]"8FL!8t>c!83!8*f!8(#>!8`!8X( 8f 8v 8 톶֒ 8'مu 8Z 8}@ 8~/( 85T 83#N8}8X{8xxl82v8?s8pp8cnl8X=kkY89`hE8weK18b}8φ_8~\y8mYT8FTV83SB8 PQ8L|8Imc8^tFuI88C.8?8(<8n98F$68628;/P8k:,]f8(H8K%u)8|@" 88ޓj8<8Uw8m8 /N8 [.8w8788ή8ڎ8Bn8 N8ߵ.8ص87ҵ8 q˵m80ĵ,8߽܍8|rm8 HL8yN,8 8jٛ88 3\8]8ۆfe8]sC8e!8WZ8=J8ă<38?.E8!t8FP8],8{g}8Nҷ[}8ѷ4h}8Cѷ7}8ѷn}8dз|8Nз|8)Ϸ u|8gϷC|8Ϸ|8η{8Lη<{8ͷB}{8c~ͷK{81ͷ{8̷ z8H̷:z8:˷)z8y˷Lz8e˷z8ʷy8xCʷy8ɷ~y8tɷIy8, ɷay8ǥȷx8b>ȷx8Ƿ;wx8oǷ0Bx8^Ƿ x8Ʒw89ƷEw8ŷlw8Ykŷ6w8ŷw8ķv85ķv8m÷E^v8 g÷'v8·u8T·ӹu80·u8: Ku8}aKu8Ht8t8y)7jt8!61t8Xs8ᄋs8↾ s8Is8ls8Jr8ἷr8v[r8 r8Wq87q8̺uhq8a*q8p8nZp8 op81p8H+o89ݷo8qso84o8:n8/.n8sµvn8VF7n8봷m8Ըm8ym8_:m8T86~S8\.xS87S8zR8x;R8mQ8B䇷\Q8?ZP8ΆsP8BO8OTO89'O8=N8w  N8%z|M8ꂷeM8[L8́CK8>yK8űJ8%amJ85I8#~C^I8B}bH8 |NH8{@G8z!@G8jyF8xL6F8t,wE8NCv{)E8fuD8tE+D87sMC8Qr5C87rB8|q3B8pA87p8Bk@>8]vje>8i)M>8<i!B>8ESh4>8g>8g=8f1=8Nf<8{ea'<8dd;8cGdc;8hc ;87cΠ;8RAbF<8Ja<8Fe`P=8^_Σ=8^o=8<+^=8Ѵ]H,=8>X]3=8\x=8BD\D<8[<8o[o;8h[:8Zl:8t}Zs9:8`Y`:8X:8,WK;8-W(;8%pW;8W ;8{W:8V:8UL98KTM88.S88R98*R]98aQV98fQF98QV98PzK98PM88O88}O+88N78M[78BM_78'LD78gL-78kK78J78\J668I:68:I68Hq68G+368OG[58շF,585AF58sEZ58Ev58E!58׻E488E48E48F\48aD48OB38W@l386?K38Wy>.P38>g38\= j382=y38r+8XU ,8~,8^추 ,8궍,8W,8ݞ綑,8:#+8 P+8P*+8;+8@޶]+8ܶ+8mhܶo*8۶*8>ڶL*8<ض$*8ֶ8*80ն1)8Զk)8Ҷ,)84Ѷ(8Ѷ2(8Ѷ'8@Ѷ'8϶'8Qζ '8Ͷ5'8_˶\T'8~Bʶch'8ɶl|'8Ƕ-'8ƶޫ'8oSŶ'8dĶ'8ö^'8¶i(8(¶%(8hv(84'8>ʺ`'8n'8j&8B$8bU%8Ϯ)%8׊$8&!$8Ÿ$862$8w$8g* 8@bd 8za80^8U[8X8xU86bR8DOq8_ LW8H+>8 E#8B8X?f8<8o(K 8p %|8!j8Q}8*88Md8)D8 #8`z 8!8S8m8u%8-nb8f쵤A8t'!8@ߵ8<ص8Jѵi8˵8Eĵ}8͂-]8\O<8lT8&4A8l 88WٔG8 t8@R8r08Es8e8X8EZJD8ķijw8 ÷4w8o÷v8M÷v8Ҡ·v8E9·Yv8!v8i/u8au8$Pzu82Au8ɿ2 u8Va1t8Ԗt8܏]t8&#t8s8;Tŭs8꼷rs86s8r8^r8Ar8?׺Dr8el}r8aq87͋q8*Mq8~q8Sfp8e跷p8|Rp8Tp8Eo89Քo8͵Uo8b;o8nn8Ԋ֗n8=Xn8n84Hm8ܲm8q]]m8Qm8`l8/l8İcl8Y%l8Xk8k8lk8].k8@j8խj8(isj8#5j8hi8#ki8Զxi8rI?8i8۪h8mmuh8Vvh8Ϗ4h8S zg8]g8?lg8Χ(g8z]^f8릷!f8[y8Xf8f8|]e8e8:e88d8ãd8&O+_d8hڢLd8e,c8c8{6c8 b8b81UWb8' b8U6;a8žya8O|0a8ݝ`8k`8#X`8퉜"`8_8A_8!<}@_8mΚ^8~a?^88+e>8Pe_=8d<8d=8Dc%I<8m ca;87b<8Wa`=8I`=8sc_l>8}^O>8_]>8s ]i>8\ =8_\5>8[>87[=8ZZ <8]Z'<8yZ֜;8Y(;8&Y:8%Y\!;8YXvx;8V<8 /V<8 48(=38|=38=I38!of8P;8I8.8 5q81OT8݆.C68v@+8'8$8a!8)8$Z{8?rX[8Z 3;8_8ey l8V$ 888w8 w8ޑV8 68#.80z#8=޵!8ص8YWѵ8ʵo8õN8.)W-8l 888/s8Mn8c8獵A8"8a\p8)s8We_8X8BoJr8з}~8bз&M~8_Ϸ*~8ĕϷ}8/ϷԹ}8Gηm}8haηV}8sͷ$}8`ͷ|89,ͷ|8̷>|8]̷[|8\˷(|8˷{8}'˷q{8ʷ{8{XʷQ[{8ɷx'{8Vɷwz8!ɷAz8*ȷՊz8RȷAVz8Ƿ!z8xǷy8Ƿy8aƷ}y8LƷ/My8gŷy8}ŷx8ŷTx8ķsvx8Gķ]@x8(÷: x8x÷w89÷`w8·fw8"B·/w8v8rHv8 v8Qv8:v8ҿUu8jju8ou8%,6u890qt8!ǽft8]t8e+Mt8t8 Rs8Zs8PL^s8ặm!s8&wxr8G r8@hir86+r8ʸ[q8]_q8Qpq8J|1q8p8󰶷tp87EBtp8ٵ5p8mo8o8}lwo8*G8o8_/n8S%n8n買O{n8}@8 iI@8khP @83g@8f@8e?8Ae?8eW>8ˈdR>8c[=80c>8a=8 b_;8Tb>8HW`iv>8Y_>89^2?8ԟ]g?8]f?8h\?8[G=8[ ?8Z]>8Z>8!Y=8Yu<8XhYy<84X6<8ԔX ;8 X <8W<8Wp<8VQ=8&V@=8V,<8Uh<8Tp;8wSf;8vR ;8ǐQM;8P,(;8\KPh;8|O";8NG;8&N;8.M,];8KH;8J:8,JL+:8SJ98fzJ=_98a}J9A98gI798gI4398nHH+98QH98G498CG88F88FFc88qqE| 88GD78,'D8a78C378jC[78B\68B685ASo68_AL68@ 68eA58@158?zH58Z>58=g48!=48<48<_48G};=48:I^48B:48b9פ4809J488^48;748e 738FI6c385L"38428K428as3[P28r2I:281F28nR1/28F028:/18G.R18\-28-|,I28+y28+}28 v*28M)28v); 38;(38a(38Y&-38s%283$v288$ 28q#28"28!$m28z!|#28Hw 18:18Bg18qzH18518nh18)j08 508b08X308 08(D/8*/8W/8C/8Ý/8WW/8 S/8,^/8=Wj/8Q%p/8 l/8پ a/8X P/8 ڶa*8ضR*8׶)8<׶Q)8^ն)8Զ93)8 Ӷ4(8jYӶ(8HҶϲ(8жq(86϶(8'ζ(8.̶(8ʶ(8ypɶ(8M7ȶ)8@Ƕi5)8ƶ's)8ռƶ)8ƶ۳)8Hƶɼ)8:Ŷ{)89¶J)8( V)8\(8h[(8媶.'8󝦶&84]H&8g%8륶=%8/y%8O+.%8(a%8}%8 ǝo%88%8!B&8$&8?7&8D&8"L%8MV%8vΏ%8j%8<%8e %8L$84$8$8 pW$8h,$8ޅ$8vDŽ*#8;#8#8sh#87QOE#8RU~J##8 {m#8y"84w"8At"8=r "8,ol"8m0Q"8sj+6"8g"8e_"83?be!8l_!8H\!8Y!8#Ve!8Sd!8P_J!8iM/!8'Jl!8OG 8$iDc 8#DAS 8>Τ 8: 87j 84L 8F1. 8.o 8F*8'8<$E8 8s81_S8K38{8s(8F# [8 n8~c8l+Jn8e M8+8}Y 8ެ488O޵Q8ڟ׵ф8gеHc8;ʵA8Wõ 8ӼH8r}8f888v8:T8~?288Ud8E8; s8e8Xa8~J>8_<8k/r8I!8P83?8Zf81״ B88Ҡ8J9ѷj8зQ8lз!8[з#~8۟Ϸ ~8A9Ϸ͍~8ηt\~8kη*~8η!}8ߝͷ(}86ͷ}8̷b}8]h̷$0}8 ̷p|8˷y|892˷@|8ʷc|84cʷU0|8ɷ{8ɷ{8e,ɷ{8ȷ6`{8]ȷ+{8yǷz8ԍǷSz82&ǷUz8Ʒm8m8ۚhm8/1*m8Į?l8kYLl8Zpl8M2l82k8.k8'?wk8ҫ8k8_fj8j8Nzj8:j8]i8_Bsi8Өwi8ld5i8Eh8h8Jlh8'h81g8g8rMYWg8ڤg8gqf8mÁf8܀9f8 &e87e8$^e8e8^H8sG8rGG8rpF8GqKFF8+pE8"ow@E8"5oD8nFgD8m D8#mC8a`lMC8Dk^B8k dB8yjA8}&jKA8i*A8L:i!@8h[@8gƼ@8Fg&@8f[@8ea~@8DdЫ?8B)d?8c ?8nc<+@8~b@8_ ?8}`>8U`!@?8,_-?8j^e'?8-^?8I] ?8p\>8[?8[?8wZ!>8'Z>8+YS?8Xb>8ǤX=8=,X=8^+W:Q=8yWz/=8LV\9=8VS<8^VCO<8_V)=8Ug`=8lT'=8DSU<8yR`<8QS<8*&Q <8t^P<8O%<8^OOW<8Nݍ<8M*<8#L<8Ko<8kJ <8!I(;8H1;8mH:8fHn:8Hd:8kH6_:89G_:8QG>Y:8FJ:8]VF"2:8CE :8]En98D98WD,98C,88XUC|88BZB88 B%889/B78AAp78FVA;78@Y78?p68?68x?q68G>68k=j5838P+Ί38*38I^*|38C)X 48z)-48(548:(483'38%H38$38#(38#f38?"b38]!#38 G3828n]}285W28`r28c28:+O28T18o18;{18eE18\M18 208V08'08)>08Y08<?v08lp08Pqv08J{08JFx08% k08 V08 @=08! 08 08 /8x /8 -/83TP/8ݒ/8 08:/"08L-;08:08`#08 08/85/8V/8=/8tX#/8ʚ/8w/8RS/8#B/85/82!/8 A/89u/88."/8 >/8#i/8n /8y%ad/8ɹ.e!8y'7JG!83)!8Q0n !8- 8N*i 8o' 82#7 8 2m 8dEL 8r, 8 8i88Q ̨8 82f86D8!#8}_8818%8ݵ z8h6׵/X8е368ɵ,80õ88Qҵ8!c8o i8ͼF8 $8Si88熵ѻ8qMf8vʡf8~Vme8}⠷re8n(e8Gd8d8uLd89d8F-c8 rc8tH)c8֜*b8eb8PTb8򄛷$b8na8ƃa8l8?a8ʙS`88^`8򘷇w`8z6`8c_8Fh_8Gv_8ޖ97_8u^8 º^8}^8>?^8֔^8o]8}]8J=K]89 ]8kҒ\8jX\8?[R\8r\80[8Ő/[8ZXM[8A [8ÁZ8|Z8cs4Z83*Y8Y8HNPY8BٌY8b;X8ꋷDZX8%qX8W8xPW8V8zyV8M3V8sU8iU8g]U8߆T84V*T8~˅`S8?LS8R8$eR8敃ZQ8ZyQ8vQ8恷҆P8eV P8MƀO86O8NDN81~ZN8}ݖM8{M8ziL8yXL8xK8wK8cv J8u`J8tI8`sI8SrDH8r,%H8x7q_G8Zdp G8o(F8nk%F8Wn\E8m#]E8lE8:l8D8-fk!D8&jC8cjC8j|B8iz B8;fiA8hA8)6hjA8sgSA8Жf9A8&e}A8Ңd@8CcV@8UcNE@8b@8Zb=@8FaPA8_@8_1?8P_?8*^?8W-^?8X]j?8\S?8%\E?8V_[W?8SZ\?80Y$?8{Ys>8 YS?85X>82Xs>8b;Wm>8GLV?u>8U>8T>83T>8T=8T=8 S`=8R=8QО=8.Qu=8PK=8 PO3=8O=8N=8cNS5=8M)\=8L;y=8K=8ѤJ`=8WI<8H<8&H<)<8G=;8G;8WG;8EF;8.NFc;8E];8@Ej;8DIm;8wDeC;8nDN;8*C:8&aCd:8vC:8/B98Bj98BP*98_B88?B88A!C88.@88'? 78)>78H=l78<68;38-38F>38dk38GR3838928&%28k^28/2828"*18Of181818I18Z[1818)1818 t18 bR18E Z/18BY @18 08 08W 08_08108108Kh18Z218ZJ8\18=^18BD18"18 18w08{085f08d08N08080a08 OE08008S08y08 08@Y808ﶞ208hL08{PW08n=08: 08/8r/8gC/8o;.8u\.8J-8<߶-8W޶]Y-8<޶ -8ܶ9,8۶I,8ڶX,8oٶ,8-ٶr+8hض+8׶+8ն\+8.Զa*8¢ҶC*8DѶ}*8϶Wn*8TζB*8̶ *8)˶)8sMɶ9)8ǶI*8OƶJ:*8Ŷk*8pŶi*8M ƶ*8bƶ*8lĶ?*8\''L*8鼶Z*8ڷJ*877@w)8?(8[ܣ(8}q(8X𝶻&8t㦶]%8 $8lŭ(%8ԧ%8Φ<&8;.&8L:'8RA'8D'8/”|'8K'8쐶h'8f'8'85'8挋j'8Xb<'8 > '8E|&8q&8|&8,ÄM&8&8؅%8e%89B"%89~Wr%8{I%8y"%82w$8t*$8[r$8oK$8^mk$8jJ$8>:h#)$8e$81be#8w5`]#8?t]ǫ#8Z#8Wo#8TQ#8R64#8O#8'L"8'I"8F"8C"8O?"8"8̷ 8}̷~8̷~8;˷Kt~8G˷bA~8tʷ6~8xʷ}8gʷL}8ͩɷs}8*Bɷ?}8{ȷ~ }8rȷ:|8 ȷ|8FǷ n|8;ǷW9|8Ʒf|8 lƷZ{8MƷ&{8ŷd{84ŷG/{8ķz8leķz8÷z8 ÷Wz8U.÷!z8·oy8^·y8&S~y8\Gy8|'|y8Nx8Wx8￷Ejx8K\2x8>w8w8M w8=彷Pw8S|w84v8쩼v8@hv8ֻ-v8mu88u8[{u8S.;?u8ùu8Yt8 ňt8KKt8 t8s8.Afs8նRs8*j\s8r8r8M'Wr8r8Pq8j䳷˚q8x[q8f q8p86'p81˱_`p8_!p8co8o8fo8(o8Hn8ݮn8}rnn8n0n8Om81m8Ŭvm8,Z8m8rl8@l8f}l8>l8S=k8JЩk8bk8?k8j8~j8{j84:?9j8ZʦNi8Zײi8s饷ni8lxK*i8h80Nh8"Yh8cHh8=g8ʢg8>W;g8㡷1f82pf8af8шf8#e8e8!.=e8뺞d8G˫d8G՝:cd8bd8c8c8Dc8,ab8K.xb8򾚷.sb8;P.b84♷a8ta8)da8 #a8{0`8ŗ`84[?a`8}!`8K*_8~_8 f_8N)_8男^8^8 iq^814^83I]8ᒷ.]8y.{]8_<]8\8x?\8Ր|\8k>;\8Y[8B[8%n[8([8ZGZ8\֍{Z8cIZ8Y8zY8ZY8DY8A&X8YX8 W8똉W8<.DW8V8'€V8V8pU8}.KU8IT8QhrT8!܄T8NS8 S81R87R8&Q8OGQ8sP8+``TP8ܟO8R~]O8-b}oN8E|"cN8+{MM8ziM8yL8woL8XvK8urK8t8J8sjsJ8rJI8 rGI8+qI8MKpIH8zoNH8nG8nG8OfmF8lPF8rk=E8"koE8jD8G(jU,D8iI~C8iDB82iSB8>ihAB8hB8+g@ B8 gA8"6fGA8He ~A8EdEA8\cQ A8bqA8a~.A8Ba8dA8a`qA8mg_@8^@8]{^c@83^CB@8G](@82 ]@8[\H@8[?84Z?8Y@8lY9?8Y?8X?8W?85W\X?8mVX8?8}UE?8T]?8+T^?8lS>8.S6>8PS>8RU>8yQy>8P]>8P>>8RO}!>8N >8nN=8M=8XCMK>8ЍL4>8!K>8J >8I=8I?s=8KHVE=8HGY=8@ G<8DF$<8"F<8E,<8ND<8&0D<8nC&<8{C+<81CԀ<8B4F<8B;8DB;8qBM;8}B:8Bʥ:8VBY:8B:8B98C98=CL&:8AAQ:8>A98DP=?88><78j;f78T:B78#:=780z968> 968:8687e68768[6j685/f68"4%68-^4583*5893582޲58BO2;581Z58761 58Ǘ0758/58Pc/58.Z58?.Y"587-48U,Q58V+Y58 + 68U*E@68*\68)a68-Q)'\68´(kE68(;68A'O583&Z5827%58W#$58 #4i58"t58P!3j585 H58H58e4486m48u48 e48UQ48%:483 483l3838B \386l;38l&3838PG38 38387N28N28m!28K28\ 28 =b28Y |828N 28_ \18 1818J18U'18(1818"^628,x28| |289g`28gc628 2818l18F18018Oқ18GA18yu182N18218-p18H18808?1818 춯18{1808+hl08-趘08kT08MN/8 pw/8 }ᶃ.8͕߶.8ݶF.8J-ܶ*.8kڶ|.8}ٶ-8ض-8AXض-8'ضʢ-8 ض-8׶-8?ֶh-8ն-8KVӶa,8 Ҷ+8Oж#+8Jζ[`+8ק̶C%+8*˶j*8ɶ*8vǶ*8ȆŶy*8ö*8¶*8D.¶X*8*8Ak*8wn *8ԻD*8=h@w*8'$W*8)8G)83)8W9)8n/&8ST$8C+$8д)b%82+&8ᨶ\&8'8靶(8Ǻ{(8Z(85p(8um(8(8(8(8$KL(8To(8ሶ)@(8(>(89'8@q۫'8Oz'8,I'8 '8怶&8&891}&8zd&8Wx89&8!vm&8s%8!Jq%8 n:%83Ql{r%8iM%83g)%8dq%8a$8?_:$8\$8YW$8FV`$8T/@$8=Q $8UN $8eK#8mHJ#8mEբ#8=fB`#89X?c#87DI~81Mɷs~8ȷq}8}ȷ;}8ȷx}8MǷVD}8FǷ}8Ʒ|8vƷӥ|8!Ʒp|8Qŷl;|8?ŷ|8ķr{8oķƚ{88ķd{8{÷/{88÷z8·z8'i·ez8U·Uz8;z81]y8Wy8a)zy8By8 y88)7x8x8^Xbx8キ)x8솽w8w8ȴ}w8vKCw8ỷ w8Gxv8hȓv8VVXv8:v8Ϲsu8eu8NCgu8j&*u8X$t8#t8M1qt8x⶷3t8ws8w As8埵ws8H48s8ȴr8]r8k|r8م(=r8WFq8㮲dq8yCq8رAq8l'q8p8r8p8]+Gp8V p8RU~o8Mꮷ~o8IOo8Oo8En8.>n8ҬXn8gn8-m8m8$e_m8 m8?Ll8ߩˢl8r2^`8QɕP`8``8j7_8eח_8(Z_8g_84Y"^8d񒷧^8ed^8 !&^8K]8nO]8吷+i]8{\(]8\8\87_\8Ɏ=\8Z~[8ꍷ0[8Py7A[8ryZ8Z8IXZ8PZ88,Y8ӱ^Y85@Y8򷉷X8z8QX8yG8j;F8>j4F8iV|E8i5D8 iC8Li{?C8iiB8'ifB8DhB8lRg6B8f٬B8ewB8dB8cAA8(bMA8GbA8[aCA8`A88 `LA88N>8nM>8Lg>86L=>8K>8cJ>8CJƊ>8NI7>8mH=8tG=8?G=8`gF=8~E=8=E=8 D=8C">8B9>8jB8>8bB=8wB=8A~=8gA5=8A<8A<8VB<<8pB;8fBP;8TXBT;8cBA;8nBw;8B<8S@<8~>NE:8^^48| k38 38k 38 i38̿ 538 2828s/28fL282828(28$380$j38}38;FWm38Wp[H38J3828*Q281h28S28\32828ێ28.)\28&?28&28 28àﶪ186!18018붔1818kϯ18@Ց18 &`18嶬 18$?Ӡ08Vⶰ*08Jඪ/8(޶~J/8۶6 /8@ٶ /8/ض/8ֶ/8zֶ7.8"oֶ.8Uֶ#/83ֶ:/8'նy/8HնK/8UӶr.8_Ѷ-8ж-8޷Ͷ,8N˶~,8ʶF,8{ȶ+8'xǶ+8Ŷ+8C¶1+8z?+8Tk+8轶+8n+8ɱ*8u89*8K*88򯶴%+8c 0+8H᧶*86s+8/O8+8-Ꞷ*81Ȟ8%8V$86%8Ƹ1&8”s#'8D'8e(8()8T)8W&X)8k])8B*8:'*8)8/)8݉)8x)8rkF)8z>)8,8(8탶S(8Ƃx(8֟E(8x(8ޝ~'8WH|r'8yC'8"wU'8,u('8r&8Pp&8mߦ&8jXk}&8hU&8>f.&8ci&8Ga%8wV^S%8}[_%8DXw%8VPT%8KS 2%8rP0%8ؑM$8Jk$8GZ$8De$8Acj$8y>sI$8 ;($88$85)#8c2c#8@/w#8D,h#8(3c#8p%A#8" #8^Z"8u"2"8 Q"8eJ"8lw"8+T"8/ t2"8 "8_O!8!8*Ч!8]!8f|a!8>!8O!8ܵ 8 ֵ 8Aϵm 8!ȵ' 8Jµk 8ૻqH 8 % 8l 8+̧8a*d8쇚8w䓵r8W@O87+868r8 Pe8W8:Jv8R[=Q8j0,8-"8FX8 ˽8Gy8wڴs8ѿ^M8'8fN8_p8y)8D!8nϷ83aϷ 8ηs׀8|η8-η륀8Tͷ 8`ͷt8̷[8̷A8+̷(8˷s8]˷$8Aʷ.8ގʷ8i'ʷR8ɷ28OXɷt~8ȷ~8ȷd~8;!ȷ O~8vǷ~8QǷ!}8Ʒe}8Ʒ|}8(ƷvG}8PŷB}8vJŷ|8ķ~|8zķq|8ķ4<|8*÷S|8ZC÷W{8·4{8s·c{8 ·-{8z8qv8Ev8v80u8ŷu8ZQu8kﶷ1u8 #t8t8Xt8At8մDs8Vj}s8]s8%s8'r8)r8PTbr8N屷~#r8yq8Lq8{gq8d8x)q8Wͯ5p8Ubp8Ynp8Y0p8`!o8h)o8gK^wo8Wଷ9o8+un8 n8on82_An8Ǫn8Zpm8m8,Fm8Mm8l8:׆l8̧=Fl8R^l8醴yk8Ak8>k8^j80j8%rsj8O.j8ݣ=i8kai8]i8vi8Mh86h8H/@h8: g8Ig8՟bgg8bg8uf8| f8J Ef8ߗe8%e8峜me8oB&e8pћd8`kd8𚷏Sd8m+d8iYc8(c836Ac8ɘb8}\b8vzb8􄗷9b8la8a8Eza8_ܕ;a8Rs]`8 P`8`893D`8ѓ`8i_8H_8әN_81_8ȑ^8_/^8}T^8^8!]8lK]8JgO]8܎P ]8n\8U\8!7\8P[8qȡ[84zT[8}g[8FZ8͊aZ8R Z8~։Y8\X\Y8؈Y8;WϤX8gԇEX8OW8ɆsW8DB3W8.!V8.8G>8BG>8}F>8Eߏ>8FE>8D>8.D~?8ZC&?89BH-?8 B?8gAM>8>AT>8@>8@^>8@A>8!@=8_A7s=8A0=8A<8=Ak<8@?<8@;9<88?=<8P2>;8%Q<998:-U98- :4198lo9 '988z98Q0888788688o6885N88P5Ӣ88W488!3~882u_88P^2zD881588$M1H4880!788=B0@988y/<889/H88.}^88/.]88E-[88-n88'{,Y88ƽ+!98*L)98)*!*98i),,987)](98( 98t( 98q'88n&88^%m88U&%e88^A$T*88iK#88:w"78!j781 780v78r`78 ;78q6p68oV\68A~68bl68Lh68S684U68h3t68#E68B68C58mH58ذ158g586585858W58 i58\ B58N 58 48 `48x 48Wi48KH48448&6$4848]38+R38}'48*h48y48.k48@eM48*5&48Wa48z383838 383838[@P}38"wZ38-E@38nDC)38*38:b38춷28궫28G|28趥p285Q283 28718⶘e18G08g߶ő08ݶ?6083ڶ08Wض08l׶L08|ն{08]ն 08KԶ 08_Զ108Ӷ~08MӶ085hҶ<808ж/8 ζ.8̶f.8ɶ-8`ȶ-8Ƕ-8Ŷ^D-8Ķf -8',8_ѿ,8:½,8黶r,8 b,81;,8]-',8Q,8$A,8̋,8o喝,8,y,8Nj,8>,8b+8~ID&8Y 9t&8] ''8ʂ.'8my(8zɥT)8럶)8S*8<薶Y*8A>*8鐶+8q+8;،+8<*8̉*8x*86*8B P*8 ΄~*8()8s)8 Hw)8/B)8} )8{(8!yq(8vu(8TtZE(8 q(8ro'8l'8vj͍'82gxb'8 ^e8'8b'8d%`4&8|]&8Zŗ&8Xq&8OUVL&8܄R'&8OR&8\L%8I;%8u G8%8Dzv%8hAS%8c>s1%8I;%8p 8$84$81$8?.$8i+d$8S(B$8TV% $8)"r#8/#8˹#8nH#8Xt#8^Q#8,/#8 H #8o_!8rմ 8: 8ܞʰ 8fό 8eh 8ƓD 8(~ 8e=88ry8 Je8"XOj8JE8v= 8e-08|"8>f8UH8|f8Q۴@888BZ8Wa8+8Zm[8x1\s8jϷZ8ϷB8rηV)88η8ͷ8jͷހ80ͷŀ8a̷8v6̷8t˷>z8Zh˷`8"˷oG8Йʷ-8m2ʷQ8ɷ38icɷ8ȷč8)ȷY8w,ȷ%8Ƿ;~8\Ƿ¼~8Ʒ.~8>ƷeS~8^%Ʒg~8|ŷ@}8Uŷ}8ķ~}8҅ķ.I}8ķ}8÷|8Pz8#־Mz8mz8<y86y83ly8ʼ3y8a5x8x8m8K^km8ݧ/+m8ol8l8 hl8$%l8bk8DHk8Ԥ\k8Ldk8uj8?j8;Ij8Ҟ)j8,i8kui8G.i8?ՠh8xbNh8OWh8|Ch8 g8*~g8$6g8+f8@f8!Μ?_f8\f8W뛷e8zVe8M 7De8d8-+ad8Qtd8 N0d8ac8Usتc8hc8ߚ1'c8e/:b8nĖb8ZEfb8 'b8fa8~a8ka8L1.a8㓷`8W{r`8%v`8檒8`8~B_8ّ7_8p_8H@_8۝_8~3^8wȏ^8\J>^8e]8E\]8r]8ţ|+]82}\8ԙ\8LN\8׋h\81a[8)銷+b[8o[8SZ8wdZ8U Z89y&Y8UY8stX8aX8di5X8{ᅷW8XjW8z̈́W8AV8.V8h&U88SU8()T8[v@sT8䀷$T8S S8+S8]~R8"9}/R8I|Q8?zaBQ8{yQP8x[VP8qwO8wvPgO8a`uN8MtsN8O=sM81reM8o-qIM8`0p%L86o1L8BnK8`ZmAK8'lJ8k%UJ8kI8DjI8i I8Oh|H8rhG8"ghF8hE8iD8;i?D83iD8i]h2hD8fD8}egD8mdD8cVD8cD8*,b`C80anC8`C8._C8C_C8l^ӏC8K^LhC8A]B8\MB8VR\B8~[[B8Z-B8YlB8YRB8XyzB8XXB8؂W3B8VB8eVA8CUA8wTA8SSA8 8S0A8R/cA8RkDA8CQ;2A8 PA8_9PA8O A8>NA8 N5@8{ML@8iL@8ukLT@8SK4@8*TK@8fJ/n@8 Iod@8\IGT@8 Hb @8MG?8?G?8F̔?8E?8[Ey?8DM?8xD?8D?8pC@8N5B@8tA @8kA?8v@?8? ?8m?j?8d?a?8?>8W?>8 @3!>8?)=8Z?7`=8d>=8=<80Ɛ98̩/98/ј98 .Ġ98.+98m-98- :8և,N:8O+:8UL+4:8ח*/;8$)9;88)8:8(:8P(:83'|w:8O'!\:8o& =:8%& :8$$98#Σ988)#Ek98_">98! 98) 8888n88׋88Vg8888K78<78M-׮78i"78y88a 88'  88ـm78978x78V78-80>6d-8͛+8Q*8Ǧy*8kڦ]x*8 e*8Y#*8/E8+8Q(+8:+8]Αm,8U(,8>3,8ts,,8_߉n,8q+8+8G؅+8FZ+8g"+8-5*8c*8fyv*86B}S>*82z*8nux)8 v)8sg)8%(q4)8ίn)81l(87i@(8 $gs(8$dE(8aM(8[_'8Y\'8Z('8NW=p'8ATH'8Q '8)N&8$L&8FI0&8 bF&8.vC\d&8@?&8!=&8:%87$%8u4%8d1N%8OM.%j%81+G%8"(#%8a$%8!$8̛$8cmq$8;=t$8P$8-$8*E $8W] #8 P#8#8|#8HfX#8:4#8V#8)"8"8ܵ"8!յ"8ε]"8^_ȵ9"8"8p8!8y!8 a!8v!8@ߠ_!8FZ;!8!8c 8y 8# 8rd 8 Je_ 8vX: 85J 8=z8 W0?8 #8f8Z8l 58Cܴ)8p 88u_8c/v8\.O8B(88viŁ8ϷԬ8dη8BηL{8ͷqb8$uͷI8ͷ08ʧ̷{8@̷V8 ˷8 s˷ˀ8 ˷i8ʷ瘀8f=ʷQ8ɷe8nɷK8ɷ28eȷ$87ȷ-8Ƿ8Lh8#h8oh8>'h8K̝g8,Z(g8I蜷Pg8v6 g8Of8Xi{f8#5f89e8'Dԩe8ՙde8Uf e83d8d8Wd8L$d8bEc8ٖc8nRc8 c8b81:b8ǔVb8^b8 a8xa8%+`a8"a8TP`8j둷`8i`8Ky+`8_8EI_8ڏBm_8koe,_8?^8*^8(c^8{^8H ]8׌)]8dF]8\8^{\8nN`\8 1\834[8ÖJj[8e[8嚈Z8bZ8PZ8(ߩY8'JY8 )X8`X8 X8lYW8!RW8\S2V8Ă|V8P5)V8夁*U82U8ف8T8 PT8~S8}kS8n|R8H{R8#zR8yӚQ8w&Q8ӼvP8u:P8΄tO8ns KO8YrN8AIqrcN8d?p+M8:o΍M8X9nw"M8$>mL8Pl8L8+vk+K8jKK8iJ8Z"imJ8quhI8HgqgI8gH8GOg G8 PgF8gŷE8ghD8!h7E8AfE8dF8c E8cUE8jYb+XE8WaLE8`E8zu`E8_D80_E8^E8]$D8K]ˍD8[D8e>[̸C8ZC8YsC8 YmFC8[XC8W)C8*sWS7C8/+WC8V B8|UB8UB8&FTB8wSB8RvB8VRUB8Q4B87Q\B8pP-B8pPA8\OA8-NA8zMA8=IMA8L#A8ZLA8KA8KoA8JA8IIA84I':A8HEA8FG@8 G@8m{F0@8E@8xE]@8D @8fDA8HC2`A8#{C A8͍B@8A@8 A^@8v@@8?$@8h9?c@8c>N@8@>@8>?8#>~?8D>J$?8=>8 =V>8C$78}J78yU781pM68"68H68!@68#68Fp68\OW68 ?68B&687 68H68nP5858@ 58 58N򶒔5858my58f58~P58H058 O4848&鶜t48M48b;+48@38!㶱38v38߶X138޶g28Ơܶ+28=۶Ϥ28ٶQ28ضN28ֶ>28ն\28>ԶD28Ҷ18ж18ζ18ͶP18̶b18 x˶18ɶV08Ƕ[08ƶ308Ķ 08¶A08/8Ux/8:/8:/8pɈ/8a/8(L8/8@s.8g.88/8/8<.8e.8&.8#N /8va7/8К"/8ڰ/8˔z.8ޘ-8\SH,8Ym,8g]T,8t,8D,8p6,8Z-8čk>-83ϋI-8MA-8!4)-8q -8˅,8D,8Ee,8 %*,8Ԁ+8:+8|u+8n^z9+8w*8zu*8;s*8%pUX*8 n"*8ko)8i0)8sf)8&c X)8Fa()8W^5(8[[\(8KQY(8'Vr(8SG(8!Qg(8PN'8~K['8HR'8 E{'8BU'8?.'8<'8n:B&8T6̽&83&8L0s&8--O&8**&8ڨ'&8$t%8Yg!U%8AE%8C9v%8YZ8\Z8A1 Y8hY8!i;Y8"X8 rX8 X8YW8dO8W8<ԁV8zCo`V8豀U8U8U8/}T81|~2T8{S8}z%gA8 =b8A8T"= A8T8~8q>8#8 >8V7 =8z6Jf=855=85V<8Kn4<8+3p<8:3o<83ap<82Ka<8w(2|W<8T1TP<8\1F<80/:<8 /-<8.s/'<8.r,<8l=.:<8-lL<8,[<8&,g<8+u<8R+<8*E<8^* <8F);=8?(=8g(=8'=8'Ϥ=8,'r=8'&;=84&=8%<8p$ܻ<8$ $<8Z?#s<8s"U?<8U!5<8 u;85 ;8sZj;8rib;8.;8J:8j:8}:88':8F6:8_L:8ߌ@:8:8;8,Y;80c ;8y:8W}:8{y:8Q:81:8 /:8? :8@5{98-98$ 981 n98Y 98ݒ :88 88I88|8888G+88K888;e88 l?887878c:%7878n783K+T78F78u0<78378C.78kp7868368d򶫙68P-680<68w68oi68R68궣-68q58^V58C558FsU58;#58/48D\48߶fo48v޶=485ܶD(48jA۶Z388ٶ8382ضӗ38Sֶ}X38(Զ >38NӶv38uӶ/38Ѷs28m϶F28{Ͷ28˶c_28ʶO28czɶ118$ȶ)18ƶ~18Ķ[r189söq18¶Z18H࿶C180018"18L08ڱ08׶08A/m08SʷU8ɷ<8ɷi"8Rɷ8ߵȷ8RNȷԀ8Ƿ満8~ǷѠ8FǷ8wƷXl8GƷR8ŷ78wŷ8ŷ8ķ8@ķ8÷e8p÷}/8 ÷~8·~8 8·~8!W~8h!~8H}8 մ}8/G~}8ǿG}8_}8|89V|8&j|8mM3|8Ur{8;T{8|{8]R{8{8cIBz8ືɦz8vlz8 2z8fy89y8θ}y8d Gy8H y8v5x8$x8¹-Vx8N8x8㵷w8Wxw8 `w8"w8/6v8ʳɦv8D_yhv8*v8;u8u8Rnu8E/0u8ڰt8Zo@t8tt8㘯6t8-^s8®Cs8W6|s8쭷6>s8Qs8r8.ʄr8OA Gr8e֫O r8fkq8Qȍq8(Oq8)q8dp8Rp8樷6Wp8zp8o8?o85Zo8Ǧo8LZCn8u쥷tn8A~,Xn8_n8(m8`1m8_Nm8Q m8yᢷl8p l8=l8k8BƱk8kk89+%k8ǟ_j8Ukj8㞷BPj8qj8i8ۍ[zi8 3i8yh89Ҥh8Ǜ^h8W}h8暷Dg8vg8Fg8$g8(f8xf8L=5f8{ߗse8rIe8ne8j-e8Q/d8gĕd8Y,md8!.d8?tc8$c8sc8JM5c8ᒷb8xJb8|b8;?b8=}b8qԐpa8ja8r1Fa8a8\*`8Mʅ`8qQC`8㍷4`8tR_8Kx_892_8-"~^8ڮu^8':V^8Ċ ^8kLƼ]8iӉcm]8XH]8܈[\84_t\8߇\8^[8܆k[8X[8ӅZ8K|RZ8^ÄKY8K9pY8譃*Y8K!&X8X\X8AW8$t%W8〷W8%QV8|PEV8bV~QU8.}hU8| T8GzbT8yT80xKS8rew7S8^>v0R8+u"UR8lsQ8rmQ8qP8p̍P8|o\&P8enO82QmuhO8?l O85kN8u8j,N8LioM8ih4M8@gݻL8f*FL8:e9K8cegK8pd K8cJ8cJ8nbFI8bH8bH8`2&I8kQ_H81_NH8^G8 ^9G8]jG8(]-UG8\?G80U\G8[9G8S[%F8MZF8WFY*GF8RXE8HWxE8V0E87JVD8UfD8UD8"UD8?TD82T'D8SD8$SD8RgxD8xSR]D8QGD8&QG.D8P<D88OC8UdOC8XN1C8HNpC8VMtC8LC80L؜C8O}KC8#JtC8YJ?SC8I`.C8%I!,C8H:C8HJB8GB8FB8E*B8|DB8=DB8CjIC81B=C84BB8BĽB8MBgB8azA2B8@B8r3@B8?B8h>&B85> dB8w=GAB883|Y>8 3>8l|2=82=8N1.=8p1E=8X 12=80=8C0=8/8=8r/]w=8S}.+h=8-b=8]-Pk=87,=8+ϝ=8l+=8U*=8@)=8E=)=8>(>83W(9>8'us>8<'ө>8&h>8*l&>8e&>8[%\>8G%T>8$]%>8[/$A=8ō#=8]"=8 "~=8h!mL=8 =8 <8a<8Α`<83<82h<8h_M<8D<8@ ?<82<8,~%<8)<8r8<8*S<8=7r<8Kv<8d<8*><8f3<8$;8;8Ɲ;8p)8l;Y(8P9(8 6(8D3~o(8? 08G(8-\(8b)'8&'8#Z'80 '8]'8nu7'8Q'8) &8d&8 ؠ&8ۡ X{&8oU&8;|0&8 &8%8){%8#/%8:u%8ٿᵖP%8B۵I+%8Ե%8Bε$8ǵh$8;$8p$80kK$8:&$8$8JB#8| ϵ#8T#8j#8e@E#8#8r"8ueL"8UX"8~5K"8>b"8K0<"8#"8Ĩ_!8ւ !8з!8Jg޴'}!8ĴV!8/!8dh!8j 8 d5 8 8×Nl 8ǸD 82; 8138h4b8ͷ8Sͷ8-ͷq8̷X8`̷y?8~˷N&8ǒ˷ 8+˷8 ʷhځ8 ^ʷ8ɷj8ɷ΍8n(ɷt8 ȷKZ8Yȷs@8 Ƿ&8jǷk 8"ǷI8Ʒ؀8-SƷɽ8Sŷk8qŷ8ŷzn8ķS8KķG98÷8{÷8÷8·<8C·[f8S08s/~8 ~8{~8f;2W~8Lӿ ~8'k}8}8{}8c2D}8ʽP }8a|8ϝ|8@e|8u'k-|8{8|U{8D캷ǂ{8傺NI{8c{8z8E z8۸[`z8qR%z8Yy8ܜEy8=2Mry8vǶ6y8\mx8񵷒x8cux8,Bx8گx8}Dw8ٳЈw8mJw80 w8>v8:+v8ÿvQv8[T'v8鰷u8}mu8vXu8<u8 p8E?p8ئap8kuo808o8t?o8Z"Vn8泤n8Ezn8գ8n8Zfm8m8smm84)m8@Ul8B4l8 àYl8Ql8]k8vnӆk8@k8ኞ.j8:j8M,kj85$j8Ĝi8R(i8ᛷiOi8pi8!h8ݏ|h8 7h8g8A0g8Әhg8d%g8(f89f8]*]f86f8yEe8'ڕe8CoYe8e8d81d8Ǔ^d86^~ d8c8+c8#gc8)*c8Pb8w琷b8}pb872b8;Ua84>a8Ҏsa81f2a8!`8󊍷e`8j`8%`8:_81ȋ'_8TSO_8ߊ_8i ^82񉷔k^8w^8(]8ۀwy]8<%]8a=\88w\8?\8`&[8uUf[8c[8e~Z8JۃEZ8OuY8‚}Y84Y8{(X8#GX8΃W8rW8~W8ƕ}V8xm|-V8TD{U8zPU8xT8wsT8"vT8suS8pKt&S8%sдR8#r,CR8pQ8UoiQ8nQ8[mP8VelNP8{MkzO8:L8)^bIK8atK8i`"K8]`J8_OJ8r_N3J8^J8J]I8O]=OI8 \H8 \xH8s[q~H8-[PYH81Z4H8=ZrH8$Y`G8TE8 TE8SEF8*2S.F8RR\E8RE8xPRE8QE8 GQ&\E8P?E8Pn E8OD8%ND8]`N,D8pMnD8gKMqD8XL4yD85KMxD8,KLyD8+JlD8~IAD8I-D8[H^!D8%LH6-D8G-D8`5G^C8FC8ELC8LEذC8VVDwC8CD8C6D8MB;D8.BtC8hAnC8&1AxC8@[qC8?@sC8`P?wC8>WrC8=^C87=yAC8i<$C8k;C8:B8.:B8s9B838KB88DB8-Y7sA86KA859@85@8$'4?@8&3?8iA2?8͂1S?8v0L?8o0~B?8hA0)1?8s/y?8/ ?8k />8܌.>8.>8u-(>8,s>8h,>8+>8+>80*>8X)>8h(?8'?8u'?8$'2?8&X?83$&ރ?8%?8A%|?8 %"?8$|?8lP$Kw?8+#N?8p#V?8">8K">8!/>8!T>8Ui ;>8 >8A=8,=8=8eۧ=8TVK=8X=8`]=8>=8=8?j=86=8 #=8?=8p=8@=8=8_c=8 h=8-I=8%=8EF<8Ij|<8a)<8K X<8[0 <8 ;81 ;8a $;8j;8|3N;8%2;8\YG;8:8B;8??;8A:8<y:8hX:8Z6:8S :8[W98HT9898*98w֋98g98zh98;:?9898N"88 88|Eq882vz88Il883d88}O88s188B 88䶋78㶸78 u78;78)߶68Vݶ^68Gܶ68ڶ}68ض!a68;C׶4682QնV587Ҷ58\ѶN58϶[58;϶m58&ζ+S58Ͷ(58˶48-ʶ48\iȶb48hƶJ48Ŷ 48Ķ38qö@38¶38:38徶Y48{ɼA48C048wθ48򶶜38[538ڳ~P38~첶&38֟738%J2828.28ĦX28Ó28Dd3838948{L38= +8+8좶w+8Oמv@,81TO,8X@-8~I.8O.8Ύ6/8S6/8+&'508;Z08{b08oR085.08$/8πb/8|~@/8g|;/8y.8B?w.8Dti.80rk%.8ro0-8lc-8Kj`-8Эg3!-8 e,8hbԧ,82_9m,8v]3,8|eZ+8W?+8Tʏ+8&9R[+8uOp(+8L|*8@I*8` G*80Df*8aQA8*8nl>p *8;)8_8[)85X)82])8/:4)8, )8.)(8@&(8Sw#Ԑ(8fa i(8GA(8*y(8 ~'87'8'8 '8i ]Y'88;%3'8z  '8&8zF&8 &8i*u&8QO&8ᵄ)&8 ۵&8lԵ%8ε0%8͖ǵp%8Tl%8F%88!%8hz$8 $8L$8$8ZyTd$8bz>$8jh$8#8Gr#8We#8g|X#8wdKZ#82K>R4#801#8$"8D"8u "8azt"8.;ߴdM"8Ĵ&"8!8Ap!8Pl!879!8"b!8\;!8Uβ!8Y2 8V3, 8414/ 8=848Lͷ87ͷ܂8̷Â8Uj̷ê8̷85˷ex86˷_8ʷE8hʷW,8ʷ8ɷ?8|3ɷ߁8/ȷŁ8dȷ8XǷ 8͕Ƿx8..Ƿ^8~ƷC8^Ʒ)8ŷN8ŷ85'ŷqڀ8Kķ쿀8SWķR8Y÷8\÷o8Z÷'U8R·Q:8HO·n8Cw8;8)œ8f8F+08޿~8v)~8f~8TzU~8 >g~8ս+}8Emȯ}8/x}8!a@}8l3^}8ʻ |8au|8^|8N%|8%{8gi{8Rkx{8踷>{8~e{8jz8Sz8?Qz87նz8mjly8y8"`y8j)#y85x8Rmx8糷jx8-|,x8w8Wذw89rw8nαn4w8cv8ܷv8Nyv8!W;v8ʵu8Jžu8n߮u8_tBu8c u8qt83t8ȬKt8]X t8򫷩s8s80qTs8Fs8=Gr8ܩ,r8pT]r8tTr8㙨q8!.q8*§"dq8U@%q8馷p8|p8fp8Jo&p84o8ƤФo8KX9co8飷7!o8zn8) n8Xn8+n8Km8Jm8٠Fm8hm8l8xul8 /l8k81jk8g[k8Nk8wݜ!j81lbj8@j8<5i8i82mi8+96(i8əh8TZh8똷Yh8#}[h8%g8g845Lg8ȖN g8[f8Oڇf8 hGf8.{f8e8E#e8ۓJe8Sr4 e8'd8\d8x6Rd8S͑?d8dc8c850\c8M'c8b8ARb8掷9ab8 {$!b8gGa8󠍷a82[a85Ì,a8R[`8Kዷd`8n-F`8_8fn_8g_8_8^8{^8t%)^8UU]8']8/)]8U#R\8w\8\8_[8^[8<~UZ8(Z8e7Z8DׁY8GlY8REY8%˜X8&F3X8~W8|^W8!{V8.z,V8ZyV8b/xU8$wO?U8,u0T83t/fT8sS8[rS84q#S8*pR8LnWBR8wmQ8hlXQ8k:*Q8hjP8TimP8QJh O8MgO8TfMO8%VeN8LdN88c2M8b,M8aL84`tL8g_@&L8u^K8^_K8*r]K8\J8+\J80[7J8xZI8mZI8YQ|I8fYOI8ZXb$I8HPXKH8XH8xWvH82qV"H84U_G8~TG8)+TUpG8QSG8<&SuF8RnF8 R;G8RXG8QkG889Q5G8RQF8o&QF8PF8CP|F8܃OIF8oNIF8mNaE8DME8EM8E8L(E8/L`E8KRE8$JTE8(J^E8uI+bE8HF;E8ҍHE8 H4E8G"E88 GZE8%gFE8bED8DDD8DD8KgCD8@BPD8رB"D8BD8QAD8@qD8Y@zD8u?fD8?[D8Sq>ZD8=UD8=ED8I<)D8f;D8C:C89XC859|C8Mw8tC87qhC86x$C8 6EB845YB8$y4B83|A82bwA81[/A871U@8 g0l@8/@8i/C@8q/@8.i@8v.qG@8-)@8-<@8,?8+?8r+?8w*?8@*z?8~)?8\("@8'2!@8 'b9@8 :&-@8&&@88%6@8j%BP@8$An@84$@8$ @8#^@8#k@8#M@8["1@8D" @8[!?8*!ݟ?8ϔ -p?8&5 I?8{}2?8tc"?8>8>8[>8>8 >8>8'>87>8΄?8[>8>8I>8>8>8>8gi>8:>8>8R У>8[Iy>8{B>8ߗ=8U~ =8gP mf=8# o!=84 <8" E<8k<8F~<8v&*g<8ۃFR<8:<87N<8|;8 ;8҉;8`;8J ;8p;8eq;8?\H;8v;8:8:8?Rվ:8DZ:84F{:8jC>:8&:8o:8Z9898C~98궏i98U}^98P98Y@98ro%98q=d88k88>88޶X885sݶ880ܶ78~ڶ78ض978׶78A5նn78/Ӷ(78Ѷ689 ϶I}68nͶy~68 Ͷ68w̶<68"˶Vr68cʶv/68ȶ68ƶ58@Ŷ58 ĶT58¶/5858]58j;58\5858򣸶N585858CIJF58 X58z48@4848[ꨶl48548=*4848ab5868368_48Jܕ.u)8襁(8{jd)85*8Z,8Zș-8'O.8Gg/8T ;0808M18LP18&a18=ZU18q31818qS08|08:y<08TYw/8t/8ra/8poO/8#l.8%j\.8}g>L.8d .8&b-8;w_2-8\5O-8rZ-8TWd,8T,8Qi,8O2,8CL+8sI+8YF +8Cqe+8@4+8'>+84;@*8A,8P*895({*8IB2N*8YF/#*8~E,)8?))8!5&΢)8s&#y)8 O)8 ')8A(8@|(8(8(8] _(8>5 S8(8 M(8^'8'8/'8Iv'8&O'8^)'8I'8Bڵ&8bԵh&8͵)&8'sǵi&8C&8^|&8x%8O%8+%8~%8S^%8y8%8􌵆%8pR$85$8r͟$8ey$8aX.S$8K,$8Չ>O$8w1#8Id$9#8O#8: k#8FD#8#81Ŵ"8"8~"8ҍnj"8:Y"8Ys2"8:M "8!!8n24!8yޘ3;!84 k!8X54B!87j4Ya8AͷVH8̷E/8t̷.8̷ 8˷8@˷ʂ8Jʷ>8zsʷח8 ʷ[~8ɷd8>ɷ)K8Kȷq18oȷ8ȷ8)Ƿ89ǷɁ8Ʒ8RjƷ8Ʒ?{8ƚŷ`82ŷ|F8ķ,8cķw8'÷8(÷"܀8#+÷g8·8[·‹8p8U8":8Ӻ8R8꿷8tr8De8 /8I5~8ί/~8y~8R~8~8u?)}8ֻ&}8mr}8X:}8Ǜ}82q|8ɹ|8_sU|8|8B{8"{8ַk{8|Mz0{8⶷z8^x7z8 }z8@z87z8̴ y8tay8-Ly8ۊy8yJx8rx8HrUx8Dݱex8q=w8sw8\w8/w8įvv8NYNv8%'dv8&v8'u8Bu8Bjlu8.׬.u8Qlt8w3t8ut8+7t8fs8Vs8멷s8IAs8qs8Fqr8=Ir8ҧHr8fg r8q8mq8 Lq8ҳ3 q8Fp8ؤp8kKp8 p8@Do8To8PCo8@)o8Сn8`xn8[3n8m8m8rdm8,m8l8oJel8ٝKl8g{l8k8cuxk8]1k8j82Qj8yšM_j8UR~j8♷ i8 si8BJi8i8I'h8x~h8L;h8-ߖfg8rg8Evg85h5g8/f8$Ŕ1f8Zuf86f8ֆbe87e8{e8XJ->e8ᑷe8wd8d{d8⤐Gd8; d8яc8f9c8WNc8c8#b8趍b81I>Lb8ڌ b8ja88Ta8t;a8v`8U `8+/b`8Ҵ`8u<._8ˆ{_8}G=,_8ʇ^8fL^8w̆2^8J]8Dž]8sC9+]8o\85As\8\8>"@[8e*T[8K Z8zZ8p뀷 )Z8ZY8C[Y8l~X8 F}X8|!X8?zW8yLW8^xV8frwwuV8=Fv V80u=U8s4U8r T8qZT8nplS8?GoS8ncS8#lR8ktYR8ŰjhQ8fiQ8{h>Q8nogP8lf[P8WmeO8idkO8g]cN8LGbN8-aN8`M8._@jM8O^M8M]L8\TL8 \K87T[ؚK8SZ!PK8ZK8YJ8Y*J8MxX_J8W3J8sWZ J8WpI8+VI80V>I8/UI8WT3H8!SH8SLwH8uR H8QG8QG8wQEH8zQH8LP\H81*PJH8lJPH8FOFG8[O:G8\N5G8,NBG8?MG8=MF8eL>F8DL F8aK]tF8K8F8HqJ*F8vI,F8I9F8yHCF8aAH:%F8oGF8GE8yFE8E3E8hj`E81>FE8Ԟ=\DE8>=@E8K1dB8ta0OB8/v4B8.+B8.A8.ۺA8n-lA8,kA8g,FA8+(A8 C+\ A8A*k@8b*8@8C)@8G)T@8J(@8/'@8& A8X&8A8Ƽ%0A8h%xA8%A8$N!A82$q-A8#>A8N#`@A8 #;A8"DA8"^ A84!A8c!U@8s >@8B >@86P`@8:ND:@8( $@8'u)@8z?8-?8es?8?8&Q?8?8?8{L@8|@8?8%?8k?8?85?8QG?8˦?8@8;@8cc?8$??8s?8( ?8 >8 R b>8% >8 =8Am=8=8=8smp=8p_=8][O=8 =8<8! }<8p<8h<8<8<8Q<8˨<8/w<8v9<8-+<8 L;8m ;8B#;8 fk;8 .Q;8y7;8Ur;8:8:8+O{:8#趫U:8c:8g:82X:8uZ7:8߶:8LV޶998ܶ98۶598Hڶ#98"ضG98'ֶ 98X$նp88UWӶ88ӀѶ~88Ҫ϶k<88Ͷb78{̶78a˶785#˶.78*ʶ78ȶR78Ƕc!78CaŶ<68ö#68gk¶68(Ę68f68ξz686878ǹu782_78r*s78!ϲB78m}78C68A(68bp68GT68zH68HsR68r68'%68r78얙787878 Q/8,89@G+8D+8V,8F%.81>/8 508ܾ18銶18M28lC28 [28?T282j5282p28}18[z18w918et08;ro08܉oV08l9 08$j/8pg{/84d5/8%b|.8,K_.8\n.8OY..8W-85NT-8SQy-8N@-8PK-8I,8OEF\,8jCf,8Q@3,8s=B,8:+87+8[49p+81A+8z.+84+*8o(*8%*8=" c*808*8 *8)8]ú)8ql)8Lh)8) @)8o O)8Z(80(8(8cy(8M?R(8+(8(8'8sڵ.'8:Ե\'8&͵h'8VUǵA'8D'8g&8&8t&8&8#{|Z&83&8}r &8%8|d%8ٙ%8rJs%8eL%8X&%8hKk$8v>$81$8$$81d$8 7=$8)$8#8ƴ#8ڹ#81y#80pQ#8n<"*#8Y+r#81"8tƲ"8-2Ê"8Gǒ3b"8l3u:"8I24#"8f4!84鳃8̷ؚ8~̷8U̷h8˷]O8eK˷68ʷ8~ʷj8Nʷ8lɷsЂ8oIɷݶ8Wȷ,8'{ȷo8ȷi8xǷO8EǷ58Ʒ8uƷy87ƷC8tŷ́8>ŷ8ķ*8nķ}8ķc8 ÷pH8 7÷-8·8f·$8H݀8֖^€8.g8\8^Cq8r$V8J:8&8c8U8g8d8,8(~8K~8⻷&~8*z0N~8E~8Eo}8&?}8չk}8rl92}8|8+о|8Q/|8Oŷ J|8"[:|8{8N{8\{8 {8Fz8۴z8p/kz8,.z8y8M.yy8²uy8W'8y87챷Bx8ӀBx8qB~x85@x8> x8yӯw8W8PuV8`tlV83sV8rU8p+U8oT8nUT8_mS86l΋S8#k,S8ZiBR8hpR8gL R8^fQ8ve2Q8dſP8:cLP8bO8anO8p`< O8Xh_N8o^ XN8]N8?\M8[MDM8[L8NVZކL8pY.6L8EYK8ylXdK8WKrK8KW>K8V K8*3VIJ8UIJ8=UJ8&T:RJ8SJ8-SI88R I8ZQGI8ZQ1KI8 PI8,QPI8OoI8OI8NI8N,7I8NH8{NoH8"MH8[/MYQH8LH8RLG8KG8vK#G8JG8JEG88I G8P=IG8H% G8FHG8ifGG8 G.G8FF8FF8kEpF8ĹDؑF8F8vCF8CF8$BF8 AF81AF8@nF8Kg@ZF8?4F8T?~F8>xF8!>^KF8t=1F8S<$,F87<#F8t;F8:h F8J9E88E8 8E8|:7E8d6sE85^E84P#E8)3D82rD8_16D8y0D8Ί0C8/C8Q/>bC8.mJC8-*C8J-~B8-ܴB8s,B8J+=eB8i+@B8*B89*A8))A8)A8(A8'(DA8h'A8#'A8&A8&A8-%A8n %XA8>$=A8~$"A8#A8M#A82"A8=b".A8!A8J1!A8 2A8 A8D A8jA8!5A8] A8 @8 A8p@8-@8tI@8D@8y@8s`5@8@8q@8C@8Kr@8bN@8tr@@81O@8}@8B@8A87A8lo(A8@8H@8 ~@8 g@8X~ &?8'G P?8* {>86>88>8FO>8j>8\:Q>85>8' >8Pa^=8=8l=8}>8G>8>8h>8=8F=8Cs=8':;=8Am=8T<89<8,<8F<8v@u<81O<8CU<85)+;8x綜;8w;8;8Ÿ;8U8e;8y߶);8ݶ];8Kܶ$;8ڶ:8&uٶ:8+ضh:8|ֶل:8 Զ0w:8;-Ӷkb:8Ѷ?:8=϶ :8ζ]98"Ͷg98˶398ʶv+98 ɶB98+ȶQ88PƶC88eĶn88Duö288¶-88,88+,88188"߼ D88Tq88M^88d98<498y"98U88S88쬶Y88ki88Ի@88}!88K8888(288㜶|l88o88ƗH 98GKc9888%EB48ɘT08.8BV'.8Nr.83/8%̓o 08T/> 1818 W{28s28_438 R38)N38il138}38/z\28!xI~28BVu328 r.18ot18p m H18Hj08g08d|d08b08>_J/8x\Z/8YM/8GV /8fT.8PQ8.8΀NOP.8K.88H-8nE8-8$ Cj-8?@4-8(Z=,8q:,87B,8В4g,816,8.,8++8(+84% |+80"N+8A"+8{W*8g*8PR*86 v*8$L*8! "*8 O)8ʲZ)8u)8a>)8llV)8C.)8Ų )8PK(8൳(8ڵ;(8Եh(8͵A(8=ǵ](89'8X''8㳵$'8m3~'8GW'8|V0'8q '8&84 &8ה&8m&8"sG&8#f8 &8#YQ%8 "L]%8?`%8y2[%8%I]%8/6%8 %8 $8'c$8Ǵ$8ɭq$8}I$82sW"$8>#8 #8٪#8؂#8GB2Z#83|2#8DJ3% #8.4"8Xc4/"8܋4"848ƈ̷u8"̷Jԃ86˷8U˷ˡ8Jʷ8ʷo8!ʷU80ɷ5<8MTɷ"8Sȷ 8>ȷK8ȷyՂ8ƷǷ8dPǷ8Ʒ8oƷm8Ʒ\S8(ŷ98hJŷ8ķc8zķ8ķeρ8÷˴8B÷$8·i8r·d8 ·I8ɢ.8:88j݀8h€8C828ɾCq8aU8h:88(8Q8W82ﻷ a8K)8V~8Ѵ*~8K~8⹷G~8[y~8}8_(}8=z8Ѳ!Xz8fz8Py8񏱷Gy8$oay88|#y8M}x8⯷}x8Rwix8! +x8w85w8ʭqw8_3w89v8퉬v8zv84)=v8]Iu8ު'u8su8Gu8 u8 3t8Ǩ=t8\rPt8{񧷚t8s8XKs8~Ws8lBs8֥r8ir8[r8r8"q8kq8aFXq8ע%q8Oi#p8`p8,Op8 p8o8;o8˟K@o8Y[n8ꞷrn8!zqn8` +n8m8'm8߶Ym8Fm8e՛l8dl8xAl8R7k8fk8Tqk8`5M,k8bƘj8Wdj8闷_j8{j84i8Pi8y4@Ti8Jȕi8\h8h8Ph8@h8ذg8Fg8ܒ|Tg80s:g8 ,f8bf86\f8͐*f8`ce8ʣe8oee8$'e8+d8N;d8⍷jd8v*d8c8fc8+ec8h"c8BJ(b8 ؊b8dRb8 b8za8"va8"*a8`8_܍`8Un=`8q_8_8ؖB_8x^8 q^8:^8A]8]8m%]8ၷ\8Tff\8(ƀ\86[8K?[8s(~uZ8}tZ8 {Z8zBY8ωyAY8^xX83wdpX8vX8tW8s8W8RruV8Rq3gV8%pU89nϒU8m)U8lT8~kx_T8VjS8H1iFS8hH?S8Nf8R8etR8$dR8c%Q8b*Q8aP8}`UP8_O8Q^O8]wAO8\]N8\ N8-[p4N8^ZzM8YA}M8X*M8F6XL8WL8V^L8NV%L8רU*K8TK8LTrK8\SmK86S9K8YRK8hQ`J8gQ>J8HPHJ80PeJ8O$J8 NJ8gN-J86MiUJ8LM$J8&LI8LLI8syLrI8Lp4I8#K(H8K H8JwH8bJQH8IHH8{IaNH8WHH8H!G8,HG8GG8u7GG8FG89FG8E*G8QCEZG8D{G8]DG8 CğG8xCG8BG8EAG8A߳G8@IG8.@G8P?H8 ?H8e>fG8=X4G8L=G8 < G8bB8'>}B8t '?B8&}B8.&~B8܎%B8= %zB8f$qB8#8oB8'~#pB8nI#}B8'"B8ȅ"7?B8,w!B8Ě TA8jA8Z{B8G26B8: B8ilB8=A8 vA8/.8b>8?8 ?8A]\2?8S@?8B?89:?8ӂ?8d>8S ؿ>8~s4>8E>8~t)>8e>8zL>8=8=8f@ˤ=8s綢{=8-_[=85A=8㶵/=8p',=8Y#=8 ߶ =8 fݶ<8۶<86ڶȖ<8kض_d<87׶%7<8ն2<8BԶQ<8ոҶ+;8'Ѷ;8^϶;8-9ζ ;8ͶK;8:˶:8j4ʶ:8ȶ:8ZǶ:8 Ŷc:8 Ķ5:8&u¶:898988#98YԼE98U98¬ ":8䨹>`:8y:8䶶\:8:8b:8:8r譶5:8[:85U3:8j :8!98g#98󔡶9898䨜:8IW:8jם:8:8󢔶:8C88:R48S}28P08q08+l08f."18<1828Gd38:݆g38&48тG48>F48~*48{38 xk38ut38$s'38;pg28fm.28ٓj(528xg,18d187!bI18P_08\Ƶ08TYn08V")08)Tw/82Q/8[N.c/8sKq$/8ԦH<.8E.8VB4q.8N@=8.8=.8h1:2-8KC7-8Q4`-8=\1--8bc.,8g+h,8Wg(3,8'd%j,8M]"E<,8R ,8D`+82r+8<+8T[+8p0+8 +8P U*8%Q*8h*8AM^*8185*8_ *8v)8%F)8)8bڵj)8*ӵB)8ؔ͵ )8\*ǵQ(8(89O(8޳|(8l6U(8-(8(8 G'8W '8א'8bi'8*sB'8]sD'8ef&8lY&8TrL&8`v?g~&8my2"W&8${%/&81|x&8>| %8%8%8 ȴj%8;䮴B%8Vڔ%89uI$8ŃAj$8Se r$8^{$8el9S$8p2*$8{3$83/#8+4#8_4#8m4A`#8:4k7#8/b4KY8,̷ @8u˷&8#`˷ 8ʷT86ʷڃ8,ʷ8ɷ 8_ɷ8<ȷt8Bȷ;[8/*ȷwA8Ƿ'8[Ƿ 8cƷ8Ʒق8k%Ʒ8ѽŷR8"Vŷ8eķp8ķ?V8ķ;8۶÷:!8N÷8·8~·1с8·b8ڮ8F8e8vJ8t/8R8*>d8վ1ހ8m€88<:84p8̼BU8d988쒻384*8b8{X\8sﹷ$8If~8s~8=y~8I?~8A෷~8gv}8_ }80V}87}8l͵|8b |8#.i|8Q-|8_"{8X{89LFw{8ᲷC:{8u z8~ z8/#z83Dz8Ȱz8,]y8y8/My8\Jy8-ex8Ex8٭Ux8nx8-w8w8.^w8BëF!w8kXv86v8ʂhv8A+v81u8JBLu8Zרru8Nl!5u8'dt8ؕt8c*{t8ľW=t8Rs8楷@s8zCs8Bs8Its874r8ƣJr8GYAr8X뢷r8}q8}q8:q80+p8Yp8Qqp8៷-p8qDo8äo8[_o8 o8Vyn8?n8!Ϝ9Jn8^wn8훷m8~}xm8- &3m8 l8"-l8nbl8Ml8ޘk8 pOk8EPk8 k8%c8b8"pb81&b81a8`a8;*?a8B`8?ם`8J`8=_8Ⱥˠ_8&6I_8^8e(^8G*;^8Y]8V]8 !]8m\8Xy_\8>~$[8x}љ[8S|5[8B,{Z8zykZ8{xZ8ޯwY8@v7Y8WuX8:+tjX8rrX8YqMW8Ap5W8#xocV8pMndV8#mU8kіU8 j2U8RiT8$hoT8dg T8KfS8;e%GS8v3dR81csR8O3bR8k6aQ8a:`j:Q8?_DP8H^EP8V].(P8}k\O8[{O8Z#O8Y$N8 YuuN8LXZ$N8WM8VM88ViRM8vUM8TL8TBL8-mSL8R=WL80;Rz.L8Q4 L8PK8:5P K8 zOxK8NSK87NK8SMJ8MJ8SLMJ8KJ8lK{J8K\FJ8JL J8VVJI8II8=IuNI8II8CHmH8hHH8@%HH8;GH8GH8=GH8FH8kFH8{EH8EH8EH8^D=H85 DH8{CH8BH80BSH8AIH8@9%H86@`H8?H8r?qH8U>I8!X>6H8_=G88=G8E8, E8,D8G+CD8+XD8*Y*YD8)OD86)C8)(C8"(C8U''C8M'dC8;'KC8&v3C8-& 5C8% C8)%xC8l$G C8a# C89#B8"(B8K"xB8!B8j]![B8 ;B8[B8XB8+,A8^A8_PA8B8V@B8A8g!A8*x8 b䶊>8%2>8ᶹ>8M>8޶>8b ݶu>8"{۶NU>8ٶ 1>8YFضw >8Ϯֶ=8ն=8Ӷ1=8 "Ҷ;~=8ж(`=8$϶*D=8pͶ=8̶<8OʶU<8lɶ(<8Ƕ;<8`ƶ<8Ķ<8/öl;8L;8m;8>Br;8޼w;8;8C;8/q;8>;83Y!<<8s`<8"<84<8ΰh<8LME<8Ԭ#<8S<8huV;8Y;8ȥE;8z;8Oi;8#Us;8zz;8S;8oW <8|m#<8y7<8 {;8Ǝ78D@^48V028к`18#718{28䍶28w,38iV48848ჶ58V>58R+B=58i} 58y48v48sf48p:48m38 k7q38#h38"BeU28Cbbcz28d_8+28E\18Y18VNI18 T18^-Q808MNcx086mK?608H/8E/8By/8?=/8<`/8:L.8R7.854[.8&1w&.8~-.#-80+Ӿ-8^1(-8.%0[-8)"*-8& 5,8,8P,8zo,8bB,8m,8 +8j k+8kN+8Ih+8h%@>+8%?+8P*8X*8'*8)n*8HڵF*8-ӵz*8͵)8]ǵ)86)8J|)8޳T)8p,)8F)8 *(8|(8)(8Y5Kf(8>(8H=(8's'82f@'8YǠ'8LGy'8?Q'8_27*'8%'8"&8 p&8ŋ&8d&8PʴK<&8 s&8.%89x%8D~%8Lbt%8X",L%8 #%8@2$8e<3 $8n3z$8nT(4؁$8v\4Y$8N4B0$87e4X$8}4T#848˷ޒ8tj˷y8˷L`8ʷF827ʷ}-8ɷ8iɷ8ɷ88ȷFǃ8C5ȷ81Ƿ8 gǷy8Ʒ_8jƷE80Ʒ+8pŷ8aŷc8.ķ݂8nķ‚8*ķ<8÷8Z÷*s8·X8·=8#· #8=8RZ8qҁ888q8VJRf8)⾷,K8y/88ud8+Aހ8ؼ€8ip 8l8eo86S8κ!881e-8G8=8*8+V8NW8~8~8(o~8!5~8E}8۵}88qք}8cI}8 }8+1|8AƳ`|8?[X|8"#|8;{8{8d{8>Ck'{8װz8lNz8Pnz80z8*y8Ly8iTwy8G魷9y8=~x86/x89x8R=Cx8xҫ}x8gw8mw8Mw86'w8o3v8QƔv8樷KWv8{v8;u8u8^:`u8Φ"u8Pct8g8Ng8`䎷f8yf8o Ff8f8f6e8oɌe8[Ge82틷e8}`d8G 9d8˛b8ㆷa8fea8煷Pa8g2`8儷}`8bnU`8ރ_8 X _8xЂM_8uG"^8A^8j1::^8]8j|]8?]8}Z\8|:Y\8={*[8z[80Xy.[82/xZ8wdZ8uY83tY8s3Y8UrX8)qiX8oX8nW8m 6W8~lV8Vk+jV8Q/jV8ixU8gAU8fT8$eq~T8dT8FcS8ؒbMS8aR8`R8U_R8E^Q8]ocQ8n\ Q8|[9P8[AdP8;Z/P8#gYO8X*kO8WO8WN8cVN8qUGN8dTfN8>TM8S]M8gR}lM8&4RAM8QM8PL8%PL8hOHL8nNnL8{M39L8.AML8LK8KK8XKUK8)J%K8*JK8I8J8UIJ8HeJ8pH-J8#H4I8GI87(G֦I8GvI8GI8FI8FfI8xFSI8^'FI8EI8PEJ8NDFJ8mD%J8COI8tCI8BQI8BI81A>I8@eH8W?6H8>H8>wII8~>@I8=I8=&I8H=OH8#d<H8^;LH8`;YH8C:H8g9hH88ΏH87~H86hH8 67MH8853H8]4H8;z3H82G8Y1G8Ӵ0G8/oMG8.G8QA.HF8-aF8,MF8"P,>F8+~(F8+ F8m*E8)7E8") VE8(D8X'D8WF'D8&AD8^&lmD8&q6D8%uD8B;%C8$0C8)$C8֊#C8"C8W:"~C8!pC8.!\C8 8Bζ>8VSͶ#>8k˶`>8ɶI&>8B>ȶ=8ƶ=8:RŶJ=8Ķ3=8D~¶=8=8򝾶{=8=8*e~=8dKw=8|px=8B}=8@?=8 L=8ȴY=8ȳA >8!>8>8Ю=8d =8=8=8k=8Ek=8%9=8 Т =85<8לN<8x_=8C=8Ϩo=8=8쐶=8W=8ǫ88ӑ48哶288ߓW28YAPO28"ŏ38638,q48 T58.5868<668~368{968Ww58t58qKS58zn58`k48h*W48eu48ab38_Y38|\?38 Y28Wk28)TF 28@Q18WN18!nKJ18HD18;E@08 B08l?#E08<089#/86Ǒ/83X/80 /8..D.8+˴.8(b.8%M.8Z!.8AF-8(Ǹ-8-8Y-8ɶj*-8\|,8 4,8Yl |,8N=v,8/rJ,8 ,8+8x+8U6/+8.u+8mK+8-3ڵ!+8ӵ*8w͵*8 ǵ*8 }*8K\U*8㳵,*8z*8M)8H')82)8“d)8Q!<)8Z߆6)8 l\(8rs(8&g(8Zt(8;,M.M(8=@b%(8M3'8\&'8i'8v '8;^'8R6'8,˴X'8A=X&8L@&8z&8Fm&8E&8@佳H&8+%8`2X%8ws3%83{%8$4UR%8X4)%8愆4%8u4$84t$8>4F$8ͷ48t˷8˷d̄80ʷ 8Aʷ8;ɷ!8tɷf8 ɷ M8$ȷe38D@ȷ8OǷ8=rǷ8 Ƿ+̃8գƷ+8<Ʒ#8ŷ~8mŷc8ŷI8Lķ1/86ķ8÷N8f÷߂8·.ł8$·8)/·̏8'u8 _-Z8 J?8Z$8&c 8e8VSӁ8r48@8Ձ8Ƶf8M@K84強/8|o8e8諻N݀8VC8ںץ8q8 n80R8#758͸8d8588'M8 8T~8鵷>~8kd~8'U)~8}8?H}8)ճ]v}8Hj=:}8P|895|8)h|8影eG|8RH |8l簷{8+|{8R{8k{8X:z8Ϯ&z8ci[z8z8y8"Yy8dy8L/'y8᫷x8v:x80 nx8^_1x86 w8˩w8aZyw86;w8\v8m v8iv8JJEv8ߦ8v8sFu8+u8JMu8S0Iu8$Ĥtt8Wjt8룷Rt8~=t8(s8ws85Ps8ǡs8]Yr8꠷r8|Ir8 r8q89.q8YsP8YP8=X[P8xWP8sVO8VVz~O8HU;:O8TN8SfN8 S5N8_oRWN8PQ*N87QDN8bP?M8'OM8NSM8+NOM8oMM8qLL8*KeL8:K}fL8ןJ3&L8WI?K8aIK8HK8XHcSK8G1K8[GJ8,FFJ8FlgJ8[FhJ8eFJ8KhFJ8NFPJ8F~J8E J8E&J83EJ8DK8MD-K8C-#K8RCK8B K86B K8kAtK8}?=J8w>,uI8--=l{I8=I8=gJ8=_J80=~J8ħ.%H8-QH8,G8 ,G8.X+G8*6fG8p*e>G8F)G8(F8.'F8:'GF8U&-F8A% F829%E8$dE8$E8<$D8#5D8z#8D8R"lD8!P/D8s!"D8Z D8 D8yC8LC8HmC8x?8nB?8϶K?82h-G?8 C?8A?8':?8ɶd8?8_0?8H^/?8QK=?8AW?8%#Zq?8ѯ%x?8}3o?86a?8r =N?8ɩ9?8!?8B?8+F1>8g>8^P>8j>8l>83#>8& r>8U>83?8쑶?8Đ=?8Ze78m`-38 28A28 38(48-48T58f68ER689(78,278ʫ| )783y78u68rrU68o:68Fil58XiϏ58Of758OJc48I`48L]348?QZ38XWd38aTD@38lQ=28xN@283KH_28,H?28%E 18ɫB18ط?M18< 189n08o6q08h3V08008-/8*/8('u/8$.@/8! /8.8E.8Ӻt.8C.88.8 (-8k v-82R y-86Z-8)--8-8,8e#,8},8S,8y൜(,8Z$ڵW+8[ӵY+8q͵+84ǵ+8aW+89R.+8;+8i*8 *8E~*8ILc*8ߓ:*8QrB*8)8ٓ)8Ft)8bgq)8y|ZsI)8Me!)87@S(83E(8K&1(8(8` Y(80(8@(8_̴'8}~'8ؗ;'8b}g'8`I?'8#'8xó&8'8&81z&8f3t&8_@3K&8!4#&8xzU4-%8#4+%84%8E4~%84U%8f4@,%8^5Q8˷88ʷJ8OLʷ8ɷa8Wɷ҄8ɷB8ȷ8>Kȷ8`Ƿ>l8i}ǷlR8YǷ881Ʒ8GƷ8ŷ~88yŷUЃ8ŷ8ķț8vBķj8÷f8r÷yL8' ÷18J·L8`;·8c8^kǂ8T88AN8'3^v8 ˿g[8bb@8P%8+ 8g*8/½Ӂ8Y868S΁8 _f8|J8O>/8b纷8~8ۀ8$82D8"۸ԇ8qk8O892858˶I8bf83~8ꍵC8#89~8N~8 䳷%W~8NyT~8qB}8|}8m8of}8Yͱ)}82b|8ү|8ɋr|8 U5|8P{8Jm{8ޮ|{8sP?{8x{8^3z8M2z8CǬIz8F\ z8Zy8zy89Sy8ᰪy8Fyx8P۩4x8p]x8 x8Ww80w84ŧhw85Z*+w8醴v8փv8rrv8欥4v8.Au8Gդ+u8#ipxu8f9u8t8C#|t8*zt8H:t8!ۡ[s8-m.s8vs84s8!r8r8Clr8Ԟ)r8dq8Jq8]q8:q8p85p8śJp8Up8嚷o8v{{o8wt6o8{n8'n8 hn8I#n8cۗtm8/mm8V)Xm8ڑm8$*l8ηl8RKMl8;ߔL l8sHk8'k8cJk8>2 k8ǒj8m]j8ceMj8j8i8Ӓi8NLUi8⏷Xi8xh8.h8vd^h89q h8΍L8 =uK8"=CuK8=yK8Tt=K8=|K8e.8.85-8 -82M|-8`]-8ۺ浫1-8lU-8ڵQ,8ӵ,8p͵+,8ǵ[,82,8]Y,8+8t+87@+8Ѡ3c+8jC:+8p+8*8P,*8Կ*8to*8bgF*8Z5*8tN)8$A)81A45)8:\'|)8uT)8 A,)8)8v紡(8,ʹB(8ȳ(8wb(89(8kLv(8*'8ɳE'8]D'8f(1n'8Y3F'8C3'8t4$&8Q4&84&8I՜4x&8ȶ4O&8ý4-&&84%8W5@%8fV5 8 ʷ8Vʷ>r8~ɷX8ɷA?8#ɷ%8ȷ 81Vȷ^8jǷ؄8Ƿ۾8!Ƿ8Ʒ8cSƷq8.ŷW8لŷ<8nŷ"8ķz8\Nķ#8÷Ӄ8÷F88÷8k·&8G·i8N8w48@8]8?s8k׿|Ȃ8No~8,s8aw86B\8νA8ff%8& 8ٕA8-Ӂ8"Żc8\8)O8e8"I8 .8EQ8P踷8Aـ88¬B8SC„8ٶ h8 p^K82s.85g82e8Ǵ8m]r8򳷏78N~8g~8o~8G4H~8ܱ ~8q9}8y}8yU}8G0}8ůW|8Y|8`|8s7#|8C{8'O{8Bj{8׬M-{8lz8 rz8&uz8L+7z8my8Uy8꩷y81By8rXy8.x8?x8 էMx8%jQx8)w8\w8(Ww8qw8Qv8=椷ǝv8azO_v8D v8u8T5fu8Ȣbu8[#u87t8t8at8t8^6s8ǟݛs8YcYs8ꞷs8zWr8 r8Lr8m,r8q8Ljq81ݛ:q8cmp8p8Klp8dz'p8o8?o8ИUYo8ao8>󗷯n8焗n8!In8<n8;m8Ε1m82b=m8-l8扔˺l8Myl8 T9l8H$k8Lݒ_k8rzk8;k8hj84 j8ʐj8>aAj8'j8i8#i8ƹLKi8qO i8䍷h8yuh81Rh8"(h8u5g8ȋ g8 ZTg8)늷wg8Z{f8 Ǝf8Ƙ'Kf8%f8'e8T8$S]_T8w\IT8[S8Zg_S8jY!S81Y\R8iXuR8W+R8gVgQ83VMQ8UKO&vO8ǒNIO8MO8MN8PcLN8KKN8J%JN8@J5N8IM8jHM8cHbM8AG@M8=GL8`GL8I&CM8kBLM8A!M8]LA0M8X@kVM8?&M8I>6VM8=M8>L8=L8@N48zKW48 H>48E?38Bǩ38(?Ab389<389286283+V280<28K-18*18'c18ӹ$)18$!N08A08GR08zO08~08m/8{Zs/8D /8- S/8_#/8^.8c.8a| .8 *8N*8lA*8t4iy*8('P*8J(*89$)8@3)8B贩)8δ)8h!])8&R4)8I )8\O(8o(8 г (8YQLi(81"m@(8UL3~(8,3y'84i'8jSN4H'8 4s'834I'8ڴ4o '84&84&8O5&85H5Ez&8~B5/8jaʷޅ8ɷFŅ8ɷī8P.ɷ.8ȷx8%aȷ^8pǷ0E8Ƿe+8,Ƿ8Ʒ8^Ʒ݄8ŷÄ8oŷ8)ŷu8ķ?u88ZķZ8÷@8÷-&8Q#÷ 8·8S·փ8ӻ88V8k8KP8㿷58{888[Cɂ8.۽n8r;8 x8r\8#:fA8ѻ%8fi 88gtӁ8/ɷ8 ǹ 8^^78Jd8BH8z#,8K8P8綷׀8}n8E8q̀8w@c8ZִF8lK)8 8?8,I8e8$W)8B챷~8Kv~8At~8*F8~8 @y}8ԯ}8i}8ID}8c}84(|8^|8QN|8欷|8{1{8Җ{8Y{8;:{8HЪz8ez8dz8M'z88%"y8yy8Ooy8䧷2y8zxx873x8=zx8(9f=x8ͥw8bw8.w8tFw8w8 v8DG4v8ڢKv8m v8u8˓u8L&Ku8/ u8Jt8Rܟkt8mvEt8E$t8qus8b!i}s8.:s8Br8iӜr8cnr8Qx*r8q8$uq8\q86Jq8ƙp8Wp8x蘷Jp8y)p8 o8}o8p.A:o8n8Sn8啷pn8$yl.n8 Pm8cm84dim8ɓ(m8]"l8l8Uchl8)l84k8Ik8ߐQmk8;v7/k8~ Ej8j88uj8ώB8j8di8i8ȏ i8$@i8ki8Lh8+dh8rDh8Uh8Cg8%vg8>g8Cjf88Јf8@\qf8燷f+f8pe8Ae8}Qe8e8ld8 md8Nd8fc8e1}c8 *c8Ն6N8k=|N8W=M8C8߶C8mݶB8<ܶB8ڶ9]B8ضXXB8 ׶GB8m+նC8 ӶRC8жAC8ζ֧C8̶)C8[XʶvC8%ȶC8 ƶ`C8?ĶC8¶C8boC8fg\C8 1LRC8QxRC8[C8X]C8hκ _C8MaC8JC8a:C88C8T4=C8nϥ0/C8?C8K,C8vKB8 < B8˞ B8-B8錛B8":pB8 ~_B8"JB8}B89A8nMAA8yYX@8;8鑶a98W 88j88 88T$N98988 :8w@:8U Z:8s~QW:8?}z;:8Ӻvg :8xs98noW~98L9lo)98h(88eq88Ub88r_@78^[W78XP68^U68|RK68F`O58oHLƢ583IR58"F58{C*48@l48.8.ǵ(.8\-8݃-8 +Q-85Эg-8as=-8-8,8R,8@,8n#m,8q$C,8>zu,8h+8[+8RO+8+Bv+8bS5M+8jy(%+8r5*8o*8*8 *8'Iд*Y*8䅶j0*8K*8)85dR)8!)8Wnֳ9d)8g^@;)8 ~=)8|>3+(8n3(84(8J4m(8]~4^D(8 4(8 4'8I4'834'8F5t'8X9 5$K'8-5V!'8#'5lK8ʷ18{ɷh89ɷ8ȷ68lȷ˅8yȷԱ8ĞǷ87Ƿ>~8%Ʒed8-jƷyJ8#Ʒx08ŷj84ŷH8tķ8fķDŽ8÷8÷(8e/÷x8·#^8_·C8(8AA8W(8e؃8eXڽ8]8K8. m8Q8O68罷88^{8Aʂ8F8޻8-v=x8 \8CEA8<%8$Թ 8wkJ8wҁ8ؙ808Ƿl~8^.b8PE8ދc)8N" 88N<Ӏ8䴷=8z8{80r^8;@8&ѲO#8wf8[8ѐU8%(W8躰8OH~8䯷~8yd~8'~8d}8?8}8ͭ`p}8b(3}8|8ꋬ|8 K{|8>|8 K|83ષ{8fuy{8 NI{8$ {8!5z8bʨz8_Tz8z8$y8Wy8sJ`y8vI#y8dޥx82sx8`jx8j,x80{w8ģ+w8Xqw8좷2w8+O8= O8=N8-eG8{G86F8 F8GF8-qF8bF8C F8:G8xF8oF8F8F8F8m7#yF8j$hF8sQF8N7F87IF8E8n>E8N&E8aE8ﶬ_E8U_E8YLE8Y*E8:궹D8D8.oD8D8D8K[YD8/s&D8Nq-*D8߶"D8k ޶cC8TܶC8ڶ=C8DضB8.׶lB8hնtGC82rӶWC8PѶ3D8϶{D8̶D8z^ʶD8Ƕ+D8ŶD8Wö@D8iD8r0D8B8d_J?8ꍶR=891*M<82e;8] ;8`;8Фڱ;8[r;8G/Ж;8n?|q;8]Sx=;8t:8p7:8gmW:8i598fw986c =98_c88[\t|88eY88`/V!78 Rf78LO478L,68`Isd684pF 68rVC58?@v58+=+58:48 7483V480148-^38*&38'oR38$!38!+28w|28e28~,28n18+\18I׊18{4 V18N o#18a08پ08;܍08k]080.08^/82浤/80m൩/8Z&ڵ1u/8ӵ3H/8ِ͵/8YBǵ\.8Yx.8/ߗ.8Hl.8񭵞A.8.8(85c'8&5r'8\258Bɷ48Cɷk8ȷR8wȷX88ȷ8Ƿ83CǷ8kƷ2х8uƷL8ƷR8ŷQ8g@ŷ/i8/ķ O8qķ48{ ķ8÷08v;÷8·E˄8$l·8g·8x{84`8F8d3+8O8ܔf8,oڃ8ľq8\f8fT8<5n8$S8׻78S8H뻷N88ʂ878I82ṷx8x]\8@8$$8J>8Mշ8;lЁ8 8D8T0{8ƵD_8]B8I%8\8H8΀8J#8Oಷ8uv8 [X8\:858ʰ8_8r8G8 8w?~8ZHJ~8>ݭUT~8$r8~8}8}8 1_}8ƫ"}8([p|8FS|8o6k|8&.|8ᯩ{8$E{8gڨv{8o9{8z8R8*NR8N|Q8'sMQ8LQ8I"LtyQ8>KMQ8J"Q8hJeP8IkP8IלP8CI;kP8w I$:P8HP8IH3O8jHxO8H O8 GO8[FNO8EO8$ECO8[DP8dvC P8B] P8BP8cpA P8Ż@>P8n?%P8F?N+P8>~(P8c=P8?=O8y3ˌO82uO81BTO8J0:O83;08O8/k/,O82.O8<-\N8-dN8G,N8d+{N8v|*N8 )E`N8(EN8 '>N8&5"8Nɷ؆8{ȷニ8ȷE8ȷ8Ƿq8gNǷW8Ʒ&>8Ʒ9$8ƷM 8 ŷL8Lŷ8օ8ķ8}ķ桅8\ķ8÷Sm8G÷R8·88]x·8·j88A΄8Aa8Zq8e }8rb8n9G8[Ѿ,8Ai8!8ۃ808ȼ8f`J8!o8׏S8'h88*8V8K8pʂ8ˮ8j8K@w8ⷷ`[8ye?8I#88M>8ԵZ΁8VkԱ8+8ݗbx8-w[8ód>8Y7!8mﲷ8x8Ȁ8߯A8(E8\ڰo8zoQ838[8.98î8Xt8q88],~8H7~8A4~8DA2D~8R֫~8ck}8y}8O}8*}8|8BU|8꨷[|8|8!{8p{8?-h{8Ԧ*+{8'j(z8P z8[sz8O)6z8%;y8Ry8t磷}y8{@y8!y8,x87߄x8ˡEx8_x8@bw8Dw8aGw8w8<v8Ξv8`hCv8򝷎v8du8m|u8!:u87"t8țt8Ypt8ꚷ,t8{s8 Is8Zas8.]s8󿘷ar8TQrr8◷Qr8t r8Eq8q8+Cq8˽q8PVp8(䔷|p8w:p8 jo80o8n4Tvo8Lɒ5o8r^n8n8gvn85{7n88m8fKVm8᏷/|m8 x/>m8XWm8l8:l8ЍGl8f l8`k8Ok8&Pk8`8k8Nj8B኷j8sTj8j85i8&i8Pi8C i8ч3h8,]h8&膷 @h8qtg8{ұg8ˁ'ig8~g8f8I׈f8;f8Use8ْe8Me8(+d8 d8qUd8jd8~Pc8}Tc8|b8Ư{b8zKb8f~ya8Acx1a8Fw;a8(v)`8L u`8s'`8r_8qm_8p_8io`^8 JnT^8+m!]8G l]8j<]8i\8lh\8vg$\8`f[8ek[8xd&[8qcbZ8Bnb1UZ8paPY8x`Y8Y_AY8ؚ^dX8]EX8T\Y6X8\W83[͇W86lZ1W8YiV8X#V8^FX@V8WU8VU81PVufU8˯U#U8{UT8 uTT8dSouT8@Sq@T8קR T8 R|S8rQXS8*P)zS8t:PQS8ٚO,S8N S8eONR8 MR8L@R8]LyR8@KQR8AK+R8AJT R8_JSQ8JQ8AIQ8UgIwQ8JIZNQ8HJ4Q8,>d.Q8?u=Q8-K8 K8h J8 J8J, 2UJ8 x%J8te I8I8ޥI8;_I8e#I8ZH8<H8 H8X4H8H8)H8"8H8+H8G8H8sH83H8a wH8NxH8S H8H8*wlH8XH8' EH8XSD.H8H8G8EG8DﶾG8_G8aK9G8ߧF8Y궿F8Q趞F8MF8wF8%|F8%F8ʵF8/߶F8F޶*F8NݶF8۶F8h]ڶF8ضdF8N׶F80նE8*LԶE8ҶE8ѶE8$϶pMF8D̶F8ʶF8RȶF8.ŶF8öF8q|F8kdF8񵽶tF8ҹҢF8F8Ip~F8f<|F8EF8㷶zF8$F8F8 F8HbF8F8;CF8򯱶F8EF8RF8]⭶GF8ګE8}ɩ{E8tاl^E8 cE8nE8NL\yE8ME8+E8-E8֟E8sjE8<|E8͙E8E8 E81E8S])E8;E87D8gQ%E8k>tD8 = D8IB8bDA8K@8YG?8a%8NJ>8E{ =8w=8sf=8do3<8 BlS<8hA;8#ey;81a ;8<^:8ZV:8W98.T98=P698M88DgJ881GC,88GD/78@W78=678\:O68pk768YN4pT6831 68@.$58)+%58|'@58$48!4848 F48 48w38b38M_38e8 -)38#" 28  28I؊28mW28 {$28B)18>1818Lb18Kڵ*318~Ե18(͵m08xǵŨ08-{08ີN081"08@/8-/8'/8~B^s/8*ꔵJH/8Vp/85.8/؁V.8 v .85js.8t]I.8oP .8C;-8z#7-8Y*-8ێ\y-8O-8=q&-81G ,8Դ,8T,8X,8W,8E\c.,8(,8Z곻+8Ãg+8g+8z3_+8Ȱ3$6+82 4 +8P?4 *8r4*8;%4*8)4l8eыl8ek8lk8Ek8k8ఉj8Aj8҈Cj8*aj8c:i8|{i8w7i8䓆 h8٫h8dh8-Th8Fg8[9g8,R=g8?f8f8@CTf8Rf8r`81 q4`8p_8\8pd[8cH[8>br,[8aZ8"`wZ84_Z8M^Y8pn]lY8 \Y8[X8Z7hX83ZX8zYW88XrW8X%W8/uWV8 VȑV83VYKV8IUV8=UU8+nTU8SYU8LSv#U8RT8*RT8QT8oQE^T8iP9T8OT8(+OS8(NS8M}S84MQS8L}S8LYS8CK 8S8wK*S8eJ S8}KJ1R84IuR81IR84IMR8H,R8|G{R8G~rR8CFAR8_E:Q8tE~O8F^P8E-qQ8PeC@Q8~6B:R8aWAPR8Ν@WUR8?QR8>7?MR8z>JR8F=4ER8<9R8.<)R8f;jR8?:sR89R8+9R878R8|7\R8u6R816dR8/g5(R84 R83Q82Q82Q8?J1Q8 |0WQ89/'Q8"/Q8&?.UQ8+y-Q8,D|Q8+TQ8V*..Q8*Q8)IP8(%P8 '!yP8g%FP8$>P8#O8"O8 W!O8[oO8sO8/N8-S@N8 0M8,M8=JM88L8!L8^QKL8IL8^_1K8:#K8&uK8+PK8d&K8K8^*J8XK8(2K8LOTK8RSK8<:K8CK8K8x]K8CK8{L8J2M8M8[M8rM8FM8 L8lI zL8{ 4L8D K8ӵ K8 DK8 > K8J8AJ8rkJ8;J8/J8I8oI8 ^I8wXI8%KxI8|I8jI8fX5gI8H8I8n*I8 \I8iI8`I8 DI8I88yvI8|(`I81gNI8+t>I8eu.I8l+I8yI8H8݌H8E'H8 춗eH88+H8G8iG88 ue>8c4q=8mmL=8i=8 ff<8(b;<8s_;8[k;82X/;89Tפ:8xQD:8(N984J98bG398bD88,A88==888(:878=778҃4P78b1s78C.68'+Tz688 (X668K$58!58s5855848Ճ48mI48W3J48dA ?48w* g3838p387w<38438V2828r28`B28eڵq28P$Ե18y͵118ǵօ18RW18p*18vX08un08v908̡%x08!y^L08# 08̎/8t/8/8~wt/8jsJ/8V ^ /8ZLQ.8_D.8d7ס.8+w.8@#N.8sxj$.8Ϯ-8T)-8 /ִ-8“ ~-8T-8T +-8~b_-8,,8’񳡮,8ꊳ%,8[,83!2,893,84+8?g;4V+8n4+8* 4a+8ڪ498+8^4j+8R4*84*85*875f*8-"5<*8$/5}*8w<5H)8]I5)8]EV558)ȷ81ȷe8aǷ L8dǷ>28LƷe8Ʒ80Ʒ8ŷʆ8=cŷ8Eķ}88ķ[|8.ķ%b8÷G8_÷-8*·38·8-)·Bޅ8Å8Y81h8fs8"X8>8R?#8꾷O8Q8M҄8H8zJ08W⼷80ze8J8é/8A>8<ٺ8p݃83ƒ88748ϸo8tfS8988t8,8&ö8ZȂ8`88Fs8|8L c||8{?|8J|8ߤ{8tY{8 K{8` {83,z8}Ǣaz8[bTz8:z8ʃy8~y8 Zy8]>y8|џ.x8_dAx8[x8wx8w8魝{w8?Vw8ќ%w8@cv8v8'Mv8~" v8ʨ#u8:u8Z˙Au8\)t8혷t8nwt83t8s84s8ƖQis8X*&s8u땷+r83~nr8<]r8r868q8̓q8K`Vq8q80p8p8Up8Ip8Xߐ7o8KuUo8n Xo8ro8"8en8Ύsn8d`n81 #n8bm8m'+m8Cjm8R-m8苷Ql8|_l87sl8ؤ4l88k8ʉuk8^\vk8g툷16k8}j8 _j8pj8k(-j8i8?i8 ʅ^i8Ri8ڄh8#ah8~惷=h8jg8_킷g8nXg8! g85nf8쀷mkf8h8f8e8j~te8} e8||d85{ud8|zXd8Sgyc8Px pc889wc88 vgb82udb8ms b8r-a8}qUa8Øp`8 }ot`8an&D`8Gm_8-l`_8mk2_8 i^8h{^8{g ^8f$]8ek]8d]8cX\8įb]\8Ua\8`[8_@Q[8 ^Z8^Z8Y(]KZ8{R\Y8[vY8AZIY8Y:X8KY*X8X9YX8W X8OWW8VyW8V 1W8UV8TzV8pT/rV8GS~9V8dSV8R2U8gTRU8QeU85Q?U8P~ U8PU8vbOT8NT8hNT8:`MƧT8LBT8})LjT8KcJT8AKg:T8fJ7T8UJ 7T8AI/T8TIE%T8HS8HS8S8KA:oS8@ S8@*S8r?~xS8λ>UoS8>JnS873=mS8b<fS8;YS8:LS89CS8! 9?S8C8{@S8%o7:DS8N6gGS8Z6/HS8pb5ES824?S835S83'S8A2S8%t1xS80R8s/R862/GR8iz.R8-)R8, R8, R8q>+cwR8b*MR8)"R8(Q8'&Q8_&RQ8z%nUQ8Q$#Q8B+#P8!DP8 P8N P8?P8O8U}}O8 "O8-EN8kN8U9N8mM8pM8eM8F*M8?L8AL8L823VtL8UL8%禮&NF8"E8]}E8E8hE8`E8#E8 ꞶpE8鞶kE8ÚE8NB'F8A|F8F8I"E8ᕶE8V瓶FdF8ۑF8PF8w؎%D8IaF8˓F8M@F8\7EE85ꈶGLD8TC8!nB8ʁA8% @8zDI@8v`?8yr.?8|nЯ>8j6>8zg=8rcFR=8-_$<8Z\z<8X<8qU;8 R(M;8N:8yZK2:8S H6:8,D<98ZA98M>698;8857884cJ88178uq.78O+o780(/*78r%j68!=68c68M$68Z5858<}In58e458MN 486 4848V48>!48[38o׸38738(S38p"38xڵ28KEԵ28ε 28ǵb28{r4283U28o괵18D[18DRg~18oQ18IJ%18o`08 08b08`w08x L08>\k0!08B^/8Q/8I3E/8v8Vw/8+,M/8#/84$.8oC.8Rn.8*״{.81Q.8윤<(.8-8 b-8͜/O-8z-8Z7X-8p.-82-83 ,84s,8pn74,8j4],8o4'4,8Ũ4R ,8x4v+8@.4+84+8e5b+85{8+8!5^+8k.55*8L;5*8.H5*80U5Qe*8a58<ȷӇ8Ƿa8*pǷ8 Ƿ8Ʒk8c<ƷQ8ŷ78nŷ8ŷ8ķ89ķφ8÷U8k÷ 8E÷8·Hf8n5·K8J18Wf88[8%/ƅ8Mǿѫ8q_8~v8([8'*@8z%8`W 8CW8!ӄ88϶8NJ8U溷f8~K8S08Y8Dn8jܸ݃8s[ƒ8C 8892o8жRS8g]78N8%8|,8ôƂ8Y8ﳷ89p8ZS8]68CH8 ޱ8sn߁8] 8Ӟy844ۆ8zɯi8^@K8X-8 U8%E8;!Ӏ8LH8Zݬ8irex8wZ8;81`8ƪ8[?8r8QG8 8谨?~88F~8ۧT~8p~8=h}8}80b}8%ƥB%}8c[u|8𤷍|8n|8z1|8P{8TD{8آy{8vm;{8z8򕡷ӿz8)vz8Bz85Qz8䟷y8wMy8 Ey8fy80x8lLx8TUCx8朷x8xNw8Q Y~w8"su8u8;gu8'D$u8t8nKt8}ݖqZt8oWt8*Xs8֔s8'Os8󺔷 s8qNr87⓷r8Cv\Gr8 0r8/`q84q8IɑDq8^q8mp8FRp8I }Gp8| p8Lo8P㎷Ìo8yNo8'.o8}n8<9n8ҌXn8hDn87m8p m89(5bm8 $m8XPl8㉷ͦl8"vgl8'l8k8Y)k8 ek8G"k8~Ԇj8`j8Z셷kX`8j_8i}_8pyhJ_8jg^8b^fi^8UeJ>^8bPdS]8_Oc]8`SbH4]8\aA\8k`\8~_@,\8.^[8 ] [88\g+[8\rZ8E[.Z8Z-Z8YY8YY8pXCY8W1X8T&WX8.V>aX8UGX88yUW8TRW8}TPW8yTW8ĆSyV8jSV8VRnV8Q AV8kQ2 V8UPU V88PqU8OU8qN%U84NU8yMzU8LU8(LxU8KhU8;KbU8J,mU8+JqU8 VInU8JHjU8G`U8BGSU8kFO1U8zEU8OD=U8DTT8tC:U8BT8JTBتT8ҞAT8H@UT8@T82h?T8>;T8I>T8qe=סT8rN{J8IGJ8 J85J8 J8WJ8EJ8kJ8y&J8_J8ϥJ8eJ8uJ8yeJ8]?J8-|J8涡I81uI8oI8A㶶I8vI8߶I8ܶI8۶I8LMٶI8׶I8ֶTI8Զ I8ֲҶI8жSI8^J϶I88:ζI8nͶMH8̶H8JʶD8Bdzb>8`=8x ]Ƃ=8ZY=8V<8oRNN<8.O;8TK;8ExH4;8(E#:89A:8>V0:8a;M98*8X984y@98188.~88Dz+=b88V(88X5%78B"j78Q78E78}N6868-X68v685^ 58E 58-q58/:5858-'48󵊛48Ug48#絚448!n48sڵ38jԵ'38+εo38ǵ4@38A38jbG2828=Ӯ.28X28=+28g18矕m18NC18=fz18>N18}xQ#18k08G_08R>082Ew08'9M08m,"08==/8/8F5/8y/8aٴO/8Sٿ%/8^M.8>.8Zfs.823~.8T.8_)+.8̲f.82-83-84-8f34EZ-8f4r0-84-84,8U4,84,8$4^,854,85t ,8%g 5F+8C-5+8j :5̋+8aF5ra+8S57+8`5 +8Gm5@8Ƿ&8{Ƿ 8Ƿ08ƷQه8GƷd8:ŷj8zzŷj8ŷ\q8ͬķAW8Eķ=8÷"8w÷8\÷O8·ӆ8A·x8B8rl8% i8x%O8;j48ӿ8$l8?8UɅ8]48`̽8Tdx8<]8"A8,&8û 8[]8y#Մ89չ8"8&8;Rg8鸷HL8N08'8"8rG݃8޶ƒ8u$8 08ң.n8: R8eѴ58 hu88u88+Â8[廬8gW8Ol8#O828:8C8kٯ%ځ8nr88@ʀ8n.b8íD8X&88悬f8.̀8魀89B8YתQq8lR848斩R8%,8mY8Vv8짷:8ui~8~8,,~8AG~8֥ ~8!l<}8b|}8T}8+}8|8U|8fꢷo`|8#|8m{8𧡷{8v8JЗu8)bu82iKu8kju8t8kt8<>'@t8Jєs8ds8Jys88-8s8c r8ԴƵr8Iur8ޑ4r8sq8r "q85uq8&56q8?ˏp8aqp8<{p8sI=p8$o8jo8QTo8茷Fo8)~ o8 'n8n8> Qn8ӊ3n8h%m8Ȗm82Xm8!m8dzYl8D7l8DՇuXl8dl8=k8Ԁ-k8v Nk84 k8|#j8Ԭ~j85z7j8|i8 Bi8Ƃz\i8ZJwi8́vh8Mxxh8̀*h8Lg8 ߋg8p~;g8}gf8z|f8$n{Cf8_ze8Oye8`>xBEe8+w5d8yvd8cudAd8msc8rc8q\9c8pb8ob8zn?/b8tdmHa8DOl7}a8H;k3$a8(j<`8iRr`8 h`8f,_8ei_8d9_8c^8&b]b^8a ^8a]8+`r^]8._X]8L^q\8Er]_\8\q \8 [[8[d[8KZ[8WYZ8^XzZ8Z?X81Z8kWY8VY8iVIY8U/X8.qUX8HUkX8T|.X8&TW8pSW81S؃W8fR=MW8)R!W8Q& W8PlV8[P"V8OHV8sO4V8`GNV8,vMqV87L6V8KGV8jKgV8KV83JCV8\^I#V8؅HʭV8GV8hFV8RFV8΁ExV8DWV8DFV8XRC@V8>B`V8AJV8.BA/V8@"!V8?V8x7? V8>U8&=\U8+=U8HH8(M+H8HkE.H8FH8jN:H8uȢH8ߠG8$+G8e?YEG8U%G8aF8PF83E8H YWE8𗶧 E8Ö+E8E8ШuE8!țE8XE89E8AUlF8F8w8pF8ˍwlF8{v=F8F8LF89%E82 E8ccD8=>C8^~B8yz6B8 uA8pZ@8glek@8Vh?8dsi?8Ba>8]>8]Z>8V3=8SG=8hO,<87L<<8NH*<8TEa;81B$y;8>5$;8;p:8h8̀:8&15%2:81t98>.98)+Q98i|($ 98W%c88=5"-88v=88<78g788}78@78|78o 68V 68o=V68C$68 E58~y58%}58wxI58A458F.48ڵ48Ե|~48UεM48ȵM48e38638 Pe386 a38¨338_y38.H28ᕵ_28~28CR28~&28@y18l#18_ţ18n?Sx18ŏFM18s9"18(-08$r 08ҹ08+x08uN08 ۴F$08)/8y/8-/8i$|/8.65R/8DL(/8 8j.8벅.8f2.8iǑ3Ā.87/3V.8O/4,.8hb4.84-8D4-86,4-84[-8z40-85-8h5,8?5_,8D,5,885],85E5q3,8קR5 ,8z_5+8qbl5+8Ay5u8Ƿz8 Ƿ`8 ƷF8uSƷ,8ŷ8)ŷ8fŷއ8ķć8Qķ8÷8÷Nv8}÷[8@·A8M·;'8 8#=8׆8 8_HU8࿷8xl8 Q8178DA(8Lٽ*8Oq%8B ˅8-89㔅8лy8h^8WC8m(800 8ǹt8_ք8/858B&8h8UpL8d춷0888ڱ$݃8H"8ߴ8gvȈ8 pl8 P8:38Lв8wf 8'݂8y(8W(8ԅ8Sh8K鯷K8~-8 8n$8>Pԁ8ӭh8is8Icz8jL\8(/>8 8R8窷8(}Oŀ8^ 8Ĉ8VW8=PFW8Y<]8W8W;}S8:S8pR8T}R8vR8 `:R8~Q8Q8hQ8`Q8Tgv1Q8zQ8aP8P81+P8|P82sP8(qP8tpP8xPhP8@VP8]>P8 N+P8! \&P8B 5P8{ nTP8 {zP8L šP8 5P83 ȦP8dP8V\P8pzP8aO8,CbO8N8b{N8USM8M8UM8{L8"L8"2L81[L89L8,L8gC@+L8$L8\L8-o=L8L80L8L8LhL8> K8OzK8K8K8EK8UQL8x ;L8 d\L8붤XL8>鶬!L8aK8KnK8;K8䶶K8㶊xK8-J8U඲ K8.*J8\t߶'K8TݶkK8=O۶jK8ٶYQK81ֶ7>K8Զ;K8 ҶIK8CgжcK8.5ζSK8˶kK8,ɶK87ȶ4K8MǶK8Pƶ:eK8ƘŶ%FK8ĶDK8I ¶kK8'ῶK8OGL8tX^cL8lDL8&K8eZK8 UJ8QJ8!̧J8xJϹJ8|J8@~J8oLJ8DI87kI8bݬI8f>ȐI8cI8HI8H8ܩH8"?H8˗I8sԢH8pH8EcH8x+H8MlG8o|G8M;ISG8PF8bVF8*E8┶E8ӓ)F8laF8x(F8:E8Ϗ0E8(E8k퍶 F8M*F8§F8ًF8B\gF8揋PF8.F8<ȳE8+E8X҂D8%C8=){8jS6>82O=8L$t=8Y%I=8Eʽ<8tBif<8U'?H<8;Z;88sm;8ub5;8L+2{:8.7:8$+<:8:(98ew%98zR"i98/&98x88)88d88 '88I78[ 78oh #t78N:78k5!786868K}^68)68g^58/ᵚ58iڵ58Ե\58ε+58 Fȵ'48µ482Ȼ 48j48YC;48j 48d38o38&a38ڏaW38*38*?S28y228;mH28`z28SO28DG#28:18-18_6!18Ex18M18*3#18-ܴ08Aôz08ǩ=08Jz08mO08:%08Ą/8稳/8 yͧ/82}/8z3S/8L3)/8d)+4.8V^4.8Ĉ4.88_4.84W.84y-.8f<4R.8o5-8{B5ݮ-8s5-8*5MZ-875/-8D5-8oQ5,8H^5,8F#k5,8w5v[,8m5`8 ,ǷΈ8Ʒ8_Ʒ8ŷ8ŷf8/+ŷL8jķ28]ķ|8÷T8÷8(÷ɇ8s·}89Z·8z8'`8$E8+8TS8X8چ88 +8/NH8E潷Wo8P~ZT8PN98F=87F$8"޻8v̅8 8e8y=%{89չ_8lD8!)8; 83<8K˷ք8b8"w8p8(g8ӿ L8V20808„8ۃ818H&8*߲8}uj8 AM8d087l8ͰY8ic+ق8㻂88-$8dc8NE8=䭷'8y 8(8,΁8%9"8TΫ 8cs8U8ލ78#h8R08M܀8⨷8"x8x B8Ӣ d878E8ͦ'8cU 8d:8čʙ8 #M]8s 8M*~8⣷~8xj~8$ -~8}86׳}8ˡv}8*`29}8|8ӈ|8|8Ű[A|8D|8 ؞{8hk{8tE{8{8Q$z8򶜷xz8kIDz8ۛz8my8 sy8?y8#x8ϵx8Gyx8}٘\7x8[kw8D3w8@ow8O!,w82v8Ev8]ؕdv8ku"v8u8 ޝu8i$[u8 u8Kt8)Lt8tGVt8H t8> s83 s8ɐSUs8^s8􏷟r8Ҋr8!Yr8r8 Nq8䍷q8J{Eaq8#q8TPp8> p8ԋkp8js.p8o8╊o8*uo8Y7o8RSn8户Jn8yZ|n8 =n8;m8-ɼm8N{m8#L:m8څl8!gl8 pl8~6,l8k8Uk8wYk8"k8$j8}j8H,3j8a5i8t/i8 _Li8]~h8Y}!h8S|^h8K{ h8AzVx[8V[8ƯU}Z8[UpZ81 U|,Z8TDY8.TY8sSY8t;S|Y8PR1JY8b,R$Y8(Q$Y8P -Y8+P DY8eOUY83N5Y8N=Y8P MEY8KVPY8FK@fY8JCxY8IVY8IJY8H|rY8 GYY8E@Y8D[;Y8D,Y8.DY8C^X8C5X8hBdX8AX8+AX8xV@X8?X8|>ȵX8=BX8<X8DtX8C2jX8i1bX8?04VX8ct/MX8.PX8*!.2X8,r-X8,WW8+W8$+YW8,v*[W8)%W8@)TV8 i(#V8'V8u&RV8&]V8c%(V8$eU8@$U8=#8U8!hU8u OU85V8U8U8 T8yT8rDT8NVT8OpT8'S8SS8zS8P#ES8S8R8#xR8f R8UwXR8i.R8G R8VdRQ8Q8Q8CQ8Q8 ȱQ8 Q8e Q8g uQ8 uQ8E ӂQ8 Q8gQ8aQ8-Q83;Y~Q8bMQ8r Q8=^P8SP8O8 hO8 #N8w lN8tN8IM8 M8eM8r7M82w\M8aL8/%L8,L8eL8ǘL8bIVL8•L8@L8+zL8}fEL8%4,L8&'L8y3L8 RL84$L8T<2L8)붮M8GM8D9L8K8X CK8wIK8.K8~K8$dK8,?K81J8'筶fsJ8EJ8U諶#J8'ŪI8̦I8tI8VVI8H8KǖmG8ȀG8R1F8aCDpF8㑶TF85ΐF8 HF8;[F8/ZF8I #)F8.ƎF86F8(2F8ĉ F8\!G8s8F8N1F8X>E84ɅE8~E8怶D8|D8{wrC8ƲrB83nRB8i]A8e1IA8Nbt@8vX^Y@8ܴZm?8#W?8̠S?8k)P<>8ʻLX>8VI=8/Ea=8B]K=8:S?<8 <<88^S<85<8N2÷;84/l;8u+ #;8v(:8̑%:8 k"O:8F' :8 %98I98I9810 9888ē 88y V88_88iF78'-ѫ78't78u>78! 78絯68fXs68!۵l68 Ե:68ݰε68vȵ58:µѥ58u58~E58}r58;48"48x48wkZ]48"/48؉48(38>z38my}38?Ca{Q38T%38G 28S;28.28E!{x28NM28"2818Im޴}18Ĵ18Wx18^2N18!Hq#181T>08Y 08SY08GL7{08Xx[2Q083&08d3/8G&4/8Z4/884~/8,04nT/8!ƹ4F*/8^4/84.8SJ5.85R.85V.8)5,.865@.81aC5-85P5V-8 ]5҂-8pi58F86ք8͵"8dI8[8Yg8)=K8 /8gW8c8kك8H88G8ݰf8sI8,8U8+48ɮԂ8/_8Y8鉭{8:]8z?8I "8ޫ 8-t8f ǁ8ݩ838ɩm8c^jO8918򈨷8F8ր8I8pަO8s|8D ]8?84!8nɤX8^A88S,Q8|y8~8Hњ~8Tݡ]~8r ~8Q}8ɥ}8b/ h}8uß *}8dW|8'랷m|8~n|8//|8h{8q8{8M˜q{8^0{8𛷀z8˯z8Lnz8z-z89*y8˙xy8]hy8&y8rx8 x8_x87Gx8ɖw86\Sw8Uw8[zw846v8@ v8|:Lv8͓0 v8au8Du8$Gu8Hu8yt8Hct8ݐvEt8st8d rs8mZs85Hs8ˎ s8lbr8 r8Pr8h&r8 q8Sq8鋷fZq8C.q8Fp8p8mA)ep8s։'p8ko8o8Emo8w%}.o8Kn86In8نVon8i.n8 m8m8A1hm8$m8+Fl8絃$l8?-Ul8ǂTl8*Nk8"ԁ~k8X4k8܀=j8N_j8Rj89~j8}&i8|~ii8E{i8zh8yxh8x]'h8wg8vYg8Xu/g8+qt?f8:bsf8Rr`2f8Bqxe82pNe8#o2e8ngd8md8k2d8j!c8iχc8h2c8,gb8fb8Qe4b8da8tca8b:a8ua`8``84`D`8m_v_8;^_8Gb] U_8\U_8[Z^8Zk^8Z8;=Y8haX8<'X8S'\W8&SW8% W8$ѧW8X$sW8#r5W8##CV8,"MV8*!V8V8LuV8Oa`V8`DV8"!V8(lU8UU8 U8FpU8*>U8 U8^T8IT8S+kT8";T8; T8PS8S84S8C cS8IS88S8{-S8DY !S8 aS8 RR8a RR8Y R8 R8TR8G0R8ФR8R8k)R8R8&sPR8_ R8YQ8cKRQ8' P8_$jP8O8QpO8cO8"1N8\N8ȡYN8B-N8;aIN8M8Oo@M8lM8BsM8ƉNM8B;M8 M8~ M8G L8 x#L8ZL81aǓL8b𶘑L8 L8L8Q+M8M8涰M8M8*LM8ٱ8L8WWL8byK8ᶇK8P߶NK8ݶK8gFܶ~K8۶{K8ٶK8W׶&K8նK8ӶK8RѶ;K8>ζMK8F̶K8ʶ1:L8ZǶL84Ŷ M8HöiM8SmGM8M85L8IL8dL85L8CM8uιŚM8ߌM8cM8 L8L8+6K8򰶂K8(L8YL8 /L8K8qjIK8MJJ8oJ8(w J8U|J86'IJ8I8I8_I80]I8ҞT\I8朶2cI8}4I8UI8}H8,zƮH8ғVUH8zG8VaDG8F8F8yF8$#2G8NAG8KŊ 5G8x>G8owG8TAlG8CF8pˇD8IӒG808UF8NE8oE8dE8AE8j}D8 OxD8asǑC8nC8LRjB8C+f%B87bA8l^,A8Z־@8,WU@8Sa?82P?8L0?8cI>8mF }>8ȳB'>8Me?@=8<=8@81=85<8[a2<8,/L<8+<8I(-;8 %u;8{"91;84W:84:8j:8+:898Y98 r98 798)oB88V88%=u88HS88B=88il78:u78 L~78K۵[J78յ 78,εs68)ȵ68mµT682P68w 6858y58858;d58ñ)658lt58$48܃48~#{'48(nT48a^(48TUN38ҴHv38<Τ38m/Zy38"N38,"38q 28 28'728ƴw28o\L28w"28Mu18["B189I18Iy18O%N182$18Hr3O08)]308,"408U4{08,o4Q084Q'084/8a4/84/8z"5;~/8t5S/8n5)/8(5%.8X55.8)B5>.8SN5.8[5*U.8Fh5*.8tu5-8q%5F-8퐇5-85}8vƷv8Ʒ\8ŷB8Bŷ(8Bķt8uķR8ķ*ڈ8ا÷8@÷8·t8r·#q8 ·V8lM<8=!8A8Mn8ч83E87}8Ͼ8hf8GK8j0808ȼ8`߆8Ć88t(8WYs80X&X8<8ˇ!8D8?8Nυ8混8&~8}8{a8DE8۵%*8s_8> 8Qք8T88=ϳ8fW8 f8LI8):-8%8cV8찷 ׃8<8}=8X8Db8ٮE8[o1(8 8O8/iς8Ŭ8VZۓ8﫷u8脫 X8+:8g 8D8٩߁8w8㓷Pv8wv8t Iyv88v8 4%u8ȑpu8]uu85u8Nt8zt8Hwt8JK8t8Vs8v&s8O }s8&?s8:ws8ьr8/htr8/Ir8E r8+q8q8WjTq8쉷 q8p8śp8ݪ]p8v>up8zчo8co8pf8oMf8nEe8me8lPe8 kFd8tjd8kiTd8mdhEd8`_gc8\fSYc8\ec8`db8\fcbb8Gpbb8~a6a8{`Apa8ڨ_ a8H^`8]:`8]8`8x=\_8p[(_8ZU_8Y _8:YC^8X^8WVH^8 .W&^8nV5]8Um]8U]83U+\8DTZ\8T.\8dST\8Sm\8>R/[89R[8QQ:[8P][87P[8O[8N[87N[8_M[8_L\8K\8n4K)\8}JD\8TIBH\8W ID\8HH@\8JG9\8HF,\8YE\8nD-\8 D/[8=C3[8uB[8/B[8-oAљ[8@=[8>?_[8^8?r[8Sn>f[8|=q\[8%Y8u$Y8# Y8F"X8["wX8*!NMX8l"! X8UB W8W8nLW8ÈW8qU W81XW8".}W8*c\W83P8W8B"W8V8BV8ݦsV8;V8IZvV8+]U81U8RhU8kA6U8U8\(T8PjqT8 T8 T8x! ނT8T krT8N ]T8y FT8#2T8D%T8WT8LT8XMT88S8NWS8ZYPS8{eS8KS8w R8_R8LlQ8\}Q88Q8kP8pgI(P8(aO8kO8+pO8iFO8O8-N8r8V?V>8<V>88>85=8_2o=8G,/\&=8+8<8s(l<8^%Q<8 " <8H];8; ;81qH;8Z;8:8D:8 P:8~ :8zK98bԡ98J7i98ep1985}88a88882ᵅZ88s۵&88@յ)78Q ϵ)78ȵ֍78µ6\78g'+78o.68󯵠68@ 68yk68f9=6868c58 q585+58{X586o+58fb348 V48oIȦ488;"8ዷp8t#8jЅ8mRӴ8鵷(8&v}8ga8E8F)8ݳ 8t8i Մ8q8883ϱ8ed8pG8 *8( 88SӃ8鮷8sI8{8v^8@@8լL#8j8H8ɂ8*8=.8U@p8꩷=R8448m$88@ځ8wէ8j֝8K8a80+C8n%8VQ8뤷:8ˀ8q8ϫێ8%Ap8c֢rR8k34888*O8YLu8S!88{蟷~8|:~8o~8}A~88H~8̝}8`}8j G}8}8/|8j\|8)?GH|8њ|8@dI{8l{8LE{8,{8bz8?z8ї$?z8d=y8_;y89yy8/*7y8ŭ x8@ x8rӔqx8f//x8pw8e˫w8&!\jw8'")w8rIv8ޑNv8rfv8w&v8ou82Ŧu8wȏ]gu8}^8(u8Vt8 t8!glt80g.t8Ns8匷s8|us8O8s8r8@ʽr8֊r8mCr8er8 q8-q8oˆNq8Vq8gꇷp8}cp8Tp8ߡp82:o8/ÅՔo8RSo8=ᄷ9o8nn8n8IIn8xn8Om8,%ym82m834l8Ĺl8>eYl87l86~[k8 }xk8|%,k85{j8zܐj8Ty&Bj8xi8wۢi8wyvaRi8quSi8gtίh8]s]h8Sr h8Gqg8M?]8O5MD]8ALGL]8K]]837Ke]8uJ|]8Im]8 I#]8KH|]8zGo]8BFʋ]8Eg]8Dm]82DV]8CD]8B 6]8r>Bw(]8xA\]82@]81?\8(?\8`>\8/=\8<}\8;F\8;i\8A:\8E~9=\88U\88@\8;>7ݩ\8rm6\8.5\8Ѷ4`\83>\82̗\82\8$1!\8@0\8\/|\8u.s\8C-d\8,L\8+)\8~*?[8)[8 )D[8o%(lA[8T' [8&Z8N"&-Z8t%LhZ8%nZ8h$n}Z8£#xZ8q"]uZ8;"IZ8]m!GZ8 Y813Y8?KgY8*MY8|CY8k?Y8l8Y8R-Y8JHY8ZY8X8~X8|,X8O.]X8_ X8KW8yW8R4hW8A.W8WV8×V8rlV8 TV8I &)V86 b V8 |U8b U8 U8, U8Y(U8w6U8U8;OU8uU8EdU8QIIFU8U8mT8D͈T84T8S8xS8S8ڷ0R8t"/R8XQ8 ζGK8˶XJK8C{ɶ_fK8WƶdK8Ķ4K8T¶kL8YNKL8փ#`L8 [L8<лJL8 *L8vƹ6%L8xønbL8M8VM8MX?N8/;N8cM8ƮM8(L8{TM86N8W$zN8LAclM8YK8 pK8rOK8.K8i=K8FJ8=6 J8ߠI8;I8 |H8\{G8G9H8WPyH8 gH8C"I8w^&I80[GI8֙+H8W"H80|G8kӉ G84 F8ٗ:G8zKG85/+G8/WH8^CH8$ԁH8|>H8TG8kC8 {1IE8f0 E8\|E8p~682u5>8IC2U@>8/T=8 +=8(&l=8%'=8 w"<8U<8s6a<8!<8;8Y;8g;8U +;8 :8f:8jG}:8"TD:8{ :8N98!989j98-}598~۵q98gյ886ϵ88ɵLh88DµU68888d278,78t78D782|78>68Y6868Uz ]68k|/68o68NQc58Va58K+J}58=P58J0%58]$\4848J l48)w48L48Vʴ 4838M738M|z38VIu38a8' 88}R8碷ŀ8}8OP8n k8vr8-nvr8q8_q8)AFq8Qyq8PNGp8߅p8pSHp8p8f8h#e8ˆge8fKe8ed8dd8 c[d8b d8kaZc8`wrc8_i&c8^b8`^b8r8]Gb8b\b8_[a8Zta8Y/a8BY`8ʌXZ`8Wt`8%W?`8rV`8U_8.U_8T;_8f@T^8S ^8oS^8/R7~^8 +RY^8aQ^8P}^8=OY^8N3v^8CN|^82Mޅ^8L0^8DL`^8RK^8sJ:^82J^8m|I^8ZHs^8LHϵ^8e^Gb^8Fy^8"E^81E3^8ZDI^8œC,^8hB^8(B^8XA^8{@v^8?5g^8?X^8N@>G^8p=0^8<^8;Y^8(;f^8XT:^8>9r^8H8U^80 8^8L7%]863]8|5]8z4;]8x3G]8W2]82]81]850]8I/]8\.]8r-]8,%]8+]8)*h]8>)tT]8(]8 '\8f'\8.&q\8ف%Y\87$C+\8 e$G\8&#\8}-#N\8y"\8G! [8d![81 [8Yk[82[8Z8*Z8Z8z%Z8fZ8WZ8YAZ8uZ8Z86Z8qPZ8Z8_R/Y8Y84HY8eY8P$X8`ZfX8ЏcJX8 X8 W8w% BW8S Y|W8*| gW8؛ YW8l8JW8pp6W8b#W80UW8GV8V8?V8aV8V81aV8eV8DȶU8PYU8KT8VBT8%:T8S8_nS8J S8R8y^R8|{R8iQ8x׵Q8Ƌ=Q85\Q8`1Q8NRQ8zP8U8tsP8P8𶋱O8JBYO8l\& O8e۾N8qpN8*`"N8RM8Co΍M8嶃RM8w5M8V|M8ߛඉM8x=߶^M8޶M8$ݶHL8KܶOmL8w~۶L8ڶK8ΊٶK8\3ضK8yֶK8#նK8ibӶ8K8ѶK8϶K8ͶmK8 ̶K8ʶ4K8ǶK8CŶK8 ¶/K8LK8ҾsK8༶[K8xK8}`K8"K8H:K8EML8ശL8!$,M8CfM8`M8~M8үkM8YΒM8N86N8V^O8StYN8d$nL8cK8wJNSK8ц50K8㬢K8-nJ8RJ8zI8רB)I8ҋ-aH8G8"<(G8VEH8pjH8*qzH8dH8lFMH8%GpH8.G8 G86MUG8#GG8)waG8G8G8~PVH8|H8̻zwH8@4y3G87wvF8uD8sND8uE8fvhD8P.vvD8Gt D8?qvD8_m;D8fiUC8|e0C8cuaaC8]%C8gY&B8 V.gB8RB8)OA8TKzjA8|HA87Ez@86Ay@8#> -@8;?8]8ї?8;15\O?8|29?8f.E>8+y}>8(9>8zx%=8Y"f=8<t=8!4=8<8 <8pz<8><8 M<8 ;8;89lU;8W;8%:88^H:8 5!y:8Y 赨C:8:8е۵98ˉյG98\ϵwt98-ɵA98µ98˼88883d|880.}L888878҂Ҿ78OFV78M/b78ȄW478}78:p68d685uW68J=S681U>&68158)%58858. w58?L58i 58 #̴48`ز48 48f6t48(MJ48Z48sг38 V38.38V@3u3833J384 38ӮH428o{4/28D4Ġ284Vv28:4K284v!28;418B` 518#5187$5{w18ݭ15L18t>5c"18^8:͈8)q8'8ҿ|8Xa8HF8q+8 88Pڇ8躷8Y8&8ym8VHR8"ืe78w88cT8?Ɇ8ֶv8Ln8bw8P[84'@8̴o$8Tc88Ѕ8(8옅8oV|8-`8Ѓ9D8['8ΰM 8G8Xݯф8{s&8~ ;8o<{8H5#^8˭@8`#8oJ88~!O˃88gL8᪷Kr8_8 > _8]=B_88<_8;_8%;_8XZ:_89-_8h8C_88O_8NP7o_863d_8ο5W_84US_83P_83&L_8 2F_8a1D_8-0C_8B/A_8P.e?_8Y-;_8?f,q6_8T}+*_8m*h_8B)^8(^8M'@^8v&t^8%O^8%+^8>c$^8i#k]8c&#v]8Ç")]8$!O]8-!]8v 9]8s]8gN]8]8 \8~6+\8PZ\8nvz\8e\8!P\8G\8JT\8 }'\8 i\8#@\8˟G \8)[8[89[8Z8DZ8"#]Z8CQZ8o TY8 /Y8x 2]Y8 $Y87 X8/; YX8PX8_X8n&X8LX8X8!%mX8QX8:9X85"X8|W8]W8YMW8y V8]V8,&V8sU8 rU84U8JT8fT8 T8S8tS85S8R88~oR8fR8PNR8pR8spmQ8?qﶉmQ8TH Q8P8E6UP8x;TO84jܙO8TBO8hN8c涗N8X3N8WdM8`M8=M8 ޶M8`qݶM8K8\K8⾳4L8tL8bM8֭M8ūM8驶6M8LhM8;WbM8礦N8A4aN8 ٥WcN8VCIbM8w/L8ޢK8$-K8sK8⠶J8lJ83J8 I8]VI8䶛TH8<G8G83G8b`G8آ-H83F8H8Ɍ=H8>6hG8RMeG875(G8l2G8'OxG8WGDG8NHG8{"G8Qx8G8tG8HrVG8oEG8maF8`lMlE8 m)/E8i"oғD8cPoDyD8 omD8mm0[D8*Uk=D8"hD8|dzC8`C8\pC8Y-C8sUB8QB8wNSB8KB8FG}A8ޔDqA8`A'A8 4> @8 ;Z@8 7P@84S @81?8.?8o+GA?8U(>8<%;>8%"w>8@>8U>88=8<=8UL=8-=8 <8U <8vc<8eeu+<8 T;8;8a/;8=RP;8;8'y:8w۵w:8Ǥյ:8|ϵ(L:8Qɵ:8&õ98_98ɶ98,LT98e&$98%2n8888tŗ%88q~g88Q29884 88}}78y0q78vd78)XU78oKM)78?68268%68ax68 L682T!68,58ʹ58w\58#j?t58 @I58Q_5848aس486f48x ݱjs48+^/3H48?3848n438hCD4'38w4384)t38Jr4I38C4/38`42824-28- 528f5#u28#5J28\q0528W5=5_18RI518MV518c5ju18BPp5J18}518p508mX5?085W08<&5it085wI08`58 ŷNJ86ķ8?ķ^8÷5y8!r÷_8T ÷D8w·y*8=·"88o`ۉ8`8.o89ۋ8ҿBq82kV8;8@$!84\8ͽ8SeЈ88̕8-8ƻd8-^I88t.83H8'&8܇8V8a88vo87$8Iβ8:e8wЅ8֒@8~)8{8V_8쯷tB8$%8L8Z8SE&τ84ۭ8q프8w8{VZ82<8ǫo8%]8?8ƃ8Ҩ88aH>m8ݨdO88s18883ׂ8 ɦι8^ߛ8}8_8#A8 $8:J8ߣ8@uʁ8 8'85p8ʡQ8`38E8Pc8Aـ88HJ8nݞ}8q_8#h@8D!8?.8œ<8U8B雷?J8|] 88~8࢚݌~85NM~8ș| ~8n[Y}8}8uL}89 }8|8F8щ|8ʖH|8c]]|8{8{8C{8}{8;1z8Γ~z8[b=z8My8߉;y8^zy8Q9y8F*x8ېx8pxx878x8ʛ\w81w8ǎ{w8]=QFa8 E'a8D=a8;Dva8]="a89=a8\o<a8M;a8:a8`F:ca8o90a88`a87 a8,<7:a8Ό6`8F5`84d`8S4`83`82%2`8:"1|`8$0>`8ZA/`8X.!`8d-G`8a,7`8]+"`8vw*`84)`8(y`8m'(V`8&3`8%`8%F`8"$|_8`# _8^"_8K!G_8>!_8ˉ u_8s{_8nb_8O3_8ab$ _8o^^8vg^8p5^8m^8C\.^852u=^8"H^8&PO^8>;H^8yt:^8m#^8Q d]87v]8E3|]8,]8\8r\8RB\8(g[83 [8_ pt[8~ 6[8 Z8 nZ8Z8ezZ8+oZ8\Z8:Z8J3(Z8"zs Z8fY8$)߮Y8GAY85jY8v LY8:X8q}X8^dX8)rW8tAUW8SNW8V8w0mV8_ ,V87FU8xU8 U8ST8.B𶘃T88T8iuﶁS8ˤS8alXS8 S8춠R8k붒fR8}| R8KŭQ8+趓[Q8MtP82涭P8w#P8pO8ے qO8+&FO8XN8t߶N8 N޶GN8(ݶN8۶%ON8 ڶM8Z2ٶWM8׶ЃM8JֶHM8A0նhM8:ӶL8[ҶC810X@C8ŒTgC8Qo#C8YMB857JB8#FNB8C{B8@ZA8s=]A8Y:j8jʍ>8|R>8>8 =8G{ =8nn m=8a5=8RT<8F<8r=<8UiZ<8^8%<8Q;8&;8 ۵Z;8Ŷյ%U;8ϵy";8nɵ.:8Gõ:8:8[:8{ǰ&+:8L98i0988Λ98l98ϑ>9898b`88L~˳88qG88XeX88X+88WXL78?78J3 78&y781M78 "78 X6868:ϴZ68t689KH689 68uU58#"5858w$r5861eG58j`358$348 4`48?4˜48r4;r484G48$44843854 38y4z385r385UH38s"5383/5"28;528}H5ٝ28yU5+s28>b5oH28o528{518\I518٭5>18+5Ur18x5bG18Pߝ5h18MF5j08ʭ5G68ķ%8Kķ8U÷8~÷͊8÷[8·8#J·~81id84|J8/88F8߿߉83xZʼn88Y8A0u8GڽaZ8r?8 $80 8c;8ӻӈ8k8~8כX83+g8˹K8c08~8y78O+އ8÷Ç8Z38ˌ8C\q8!U8\:8 Q8贷.88Nˆ88EF8ܲ_x8sk\8 c@8ϡG$888Bϰ8efυ8V첅8X8(y83\8KU@8O뭷$#8:88ᬬ˄8B|8@ث8ms8l%V888p.8éB8dY߃88S8 8BFh8DkJ8@ڦ,8o8O8ۚ҂8k0鴂8Ť8[y8[8/=8498D8#GN8ܡLŁ8q<8(%8Sk8g1L8`Ɵ.8A[E88dӀ8δ8l%8Aaw8՜X8|i982o8ÐX8*$8mx8Jo98ݙ~8pO~8Zcz~83:~8(}8h\}8 Nx}87}8Fs|8|8t|8+Z3|8m{8~Q˰{8䓷o{8xe.{8 Ez8rNz8h3dkz8Ǒ*z8 \"y8˩y8iy8)y8Rx8Fx8ێwkx8r,x8jw8𞍷pw85;qw8ǎI3w8Mcv8P,v8czv8t(=v8yv8jVu8C퉷u8Ju8lO u8tt8Ft80܇oVt8aq7t8"s8f s8$.`s8R!s8Sr8儷r8vidr8MT$r8q8%q8`q89AFq8́:p8Xp8〷'Sp8Ymp8rQo8Q~o8\ ~v:o8}n8m!|n8*{`n8>2zn8O8y$m8=i80ih82hРh85g%Sh89fh8@eQg8Hd^mg8Sc3"g8sabf8raAf8؅`Ef8_ye8^Ze8]|se8\0e8<\Ed8H[sd8wZXpd8eY3d8jX#c8Xc8^Wыc8VZc8DU~-c8 2Uc8T|Tb8FSb8m Sb8]{Rjb8HQMb86Q7b8ٌP*b8Ok)b8O,6b8VNJb8MXVb8LUb8KMb8UQKJb8ݖJLb8ILGb8H!5b8uKH-b8G)b8F-b8?F#9b8ELb8D\b8(Dob8UoC3vb8ABvb84Bub8o9A~xb8Ke@bb8h?b8>zb8=b8!=b8[<b8ٓ;ŀb8 :xb8&:*b8r9b88 b87b87$b8I`6b85b8p4b8 4fb8?3Yb8'T2}Rb8O1yJb8=D0]Ab8?/aIb8i.>Lb8ӌ-Hb8,Bb8X+=b8Mo*?b8 )=b8(w3b8z'b8&b8%a8V%@a8~d$a8ej#a8("!a8J!ɕa8 a8 za8AZa8~7a86 a8`8ϳ`8m`8V`8Xb_8`_88_82_8_8_8t$_8h_8j_8l\_8h:_8I^8=X^8PZ.n^8/v)^8` ]8' R]82 Q]8* ]8s< \8[ V\8txm\8G\8+\8f\8\8c[8>[8>[8}N[8J[8O>fZ8Z88DZ8Y8F,Y8.1N8նN8aӶwN8WҶ1N8ж}M81϶zM88Q8>8 L o>8E 8>8>>86=8g.=8J`=8>7+=8 " <8 <8'R<8۵\<8DյV)<8ϵ;8ɵ.;8_õƓ;8~8Зw~8c g~8b&~8}87}8Md}8sAU#}8_ԔC|8cg>|8`|8ݍ(|8[!#{8 9{8Hi\{8ܑ{8?q5z8Кz8Zz8/z8ďy8nZ_y8. \y8,y8hNx8Ӳx8lI^ax8!Q#x8vyw8 w8jw86Xs8#s8r8Dr8ӂWr8h8bgg8lag8 acg8`g88_ef8|S^3f8:r]iPf8”\"f8O[e8Z e8LZ}Ve8'FYe8{Xld8wWEd8V$~d85VOd8=zUX$d8FTc8TWc8VQS~c8Rc8[Qc8=Qvic8cPWc8O"Ic8=*OBc8&qN8Fc8MPc8LYc8L\c83`K[c8pJ\c8I?`c8#IZ`c8._H@[c8GYc8$FYc8Q8F_c8$Eckc8D{c8Dٍc8STCc8;Bc8Ac8'Ac8W\@*c8?c8@>d8"=d8|=9 d8F<c8;_d8:c8(2:c89c88d87(d86'd8v'6,d84m5-d84+d83m&d82d8[2F d8}1<d8;x0d8l|/d8.d8-oc8 ,+c8+c8*,c8')c8h(|c8<'c8'c8<&c8`I%c8)$;c8H#c8#"c8!c8 @nc8aVc8f?c8Vc8Gb8]b8zb8Nkgb8@ ,b8[a8a8@a8Qa8xI%a8݉a8}a8;!ha8mMa8۵.a8W`8\2`8[c`8|K-`8f _8H _8H _8{ B8@;ϧB8}L8@fB8\5&)B8o22A8/WA8I,ڀA8)KA8&A8]#f@8, @8:u@8t@@8 @8'?8T?8i?8 z4?8P X>8 o>8 ƕ>8]a>8# <->8oq=8=8絿=8*_=8۵|-=8ŵյX<8ϵ<8aɵ2<8mõ2g<8P6<817<8;8쪵;8Ƥu;8 F;8u;8I:8:8ꅵ:8Bq^:8; s>1:8ߜf:8.-Z98ӹM֩98BA}984P98J(;$98 88iD8888d\t88JӴH88*=8878cه78oQ]j78*Kp78GE78/O78Ǡm68w268_3͙681M4o6864SD68yi4689)4584L58/458*K4o58ϱ4aD585587D5 4835w48,5ʙ48,p95o48},F5gD48R548u_538hl5 38l)y5L385vn38W5C38.538,528Ԁ528&528I5l28v5A285ߋ8÷aŋ8÷,8/1÷萋8h·v8c·U\8A8Ε'8.; 88`C؊88O+8+8þm8E\(S8_88F8%88eV̉8鱉8Ն喉8{8&`8>OE8L繷o*8J<8B83؈8G8޷48vن8wk8`P8>48յ>8qm8 88Ƈ84 8˳_8bs8.W8d<8(; 8F8VE8(̆8W8 8bw89HZ8ޮh>8u!8C 8nN87q˅8ͬr8ucf8QFt8 W8$98g8.P8婷8b{Ä8]88< k8ѧYM8.g/88R8'Dփ8w8S8褷|8U~_84A8Y#88?8Ԣ8ajɂ8諂8m8*p8GR8U 48ꟷ88ف8㩞8>Q8bӝ~8gv`8KA88#8$z88lLƀ88sS8h8@I8l-)8R 8yS8_旷588y;U8 8՞~81O~8zĕS~8YW~8Dꔷ>}8H}o}8iP}8}87|8ʒ|8x^aM|8n򑷺 |8-{8֋{8K{8yD {8ُz8n/z8Lz8\ z8m0y8ƍ!y86]Qy8󌷁y8x8!җx8JZx8Ox8抷w82~w8[ fw8pJ)w8nCv8Gڈv8pZsv8[6v8u8T3u8Ȇu8]Bu8^ru8rt8Љt8sKt8H? t8Ѓs8as8,Ms8H s8r8vAr8+Gr8巀r8oCQq8R}q8~38q8;}p8|Sp8u{lep8zp8yo86y.o8FxCo8wn8vn8 "udn8&trn8V*sm8=-rm8/q;5m8V1pl82oқl8I4nNl85ml8q7l k8s9k7hk8Iqd85{H}vd8޸Gyd8F}d8Ge8=]e8c8<)c8kZ c8) Lb84?5b8Eb8̾b8aXb8b8h a8; ua8ْ a8D `a8 0a8- a8K] `8`8\?`8_8²_8Vq_80i_8?_8 %_8LD^8}G^8+ ^8ru8^8?]87)x]80en]8<-\8vWyw\8*\8lD[8t[8Ֆ,[8&Z8-VﶓZ8Z8ѳZZ8붷Y8wfY8Y8ض'S8W׶NS8Fֶ{S8dֶWS8LtֶS8yaֶ S82նZS8Զ_R8`ҶuzR8 ж=R8[ζR8E̶xQ8rʶ>Q8ŠȶP8UƶcP8Ķ#P8#+öO8P8yO8РO8ڽN8+}N8 ÷M8(GPM8)bL8YQL8{aFL8q L8H1K8 K81êL8gL8G觶L8L8SL8L8גM80L8 ({L8hʝL8QK8))K8 NJ8$aJ8|&CJ8I8[rmI8*CDI8ZQI8)XI8 5I8A5H8ƐQH8mdfG8瑶1F8mϔYF8閶E8BYE8ōE8fD8o"VC8)C8agC8UB8'OrB8|B8s)C8ekB8 $g'B8e'A8ndFB8 `.C88ZC8J5V^D8SSC8pQC8QC8'R/,C8\SP>C8sVD8TE8Q`}F8N,F8VL}F8AIJF8NG~E8/DME8`BD8gA?CD8[x<,C89NC86C8 4B871iB8d.IB8+B8(A8%A8#A8 /QA8{=4 A8]W@8n:@81@8ڔX@8~5&@8 z?80?8?84[?8e(?8Z>8>8oy>8z_>8ᵮ->8'۵)=8ȝյ=8ϵߙ=8ɵ$i=8nõ8=8X=8vA<8D'<8= 0y<8bꤵI<8Ȟh<8;8|:;8S ;8r(a;80c3;8(s;83g:8nZ|:8aN~:8AQ:8~5T%:8)9898N98Jt98H98մK98󻴿88(٢L88Ϲ88(ao88.D88}88v78Ѽ78278Ț3m783B7824378!e4w680468-84 68Ԑ4^m68z4B68uM468X5U58` 558558v+5Mm58-85B58D558Q548\^5U48k548w5l48K5A48H548p 5 38o538kћ538>45k38旨5@38 538`528ƻ5^48÷!8=÷8C·8tp·Qˋ8 ·88;1|8a8mMG8,8p48688о܊8iEŠ8'88%3q8˼ W8c<8@(!8*8,8ĺ Љ8\8ϙ8+~8+%ic8/H8U,8췷8ڄZ8ڈ8~8AL58㵷ƈ8{Wm8RQ8𪴷Q68B8ٳ8qqw8LJ88X7-8αMt8e_X8W<8A 8`*88Wˆ8O8ʄ8+v8tYY8G<8ݬ8s8 8ȅ8z5z8F˪98ap8S8`68"88?Mw݄8⧷ҿ8nx,8y8f8>9 I8ΥM+8|d 88҃8l%@8r8Px8c梷Z8|=8/8+[8<8/Ҡł8g884k8Z'M8h/8\Qg8:杷(8zԁ8~h8꣜痁8-8Ky8Q̛Z8T`;858쇚8}ހ8뮙t8?B8}՘8ha8RA8|!8!8,8aG 8GڕB80mv8'~8-O~8F&@~8 ~8Lf}8a~}8t2>}8|83|850||8Đ<|8aY{8]Ҽ{8(}{8={8sz8Diz8ڍz8 q)Bz8z8Py8(5y8&̋EJy8Dc y8zx8x8)Ux8>x8dWPw8wşw8e-cw8%&w8v8Hrv8ކpv8pt3v8 u8Tuu82{u8YƄ#>u8Yt8샷vt8}t83Ct8ǟLt8/s8; s8&M@s8ڀr8ogr8xr8L~4r8&~mq8`%}Lq86|eq8G{6q8UzBp8cyp8nxHp8zywo8˂vo8umo8t"o8csVn8r`n8qBn8pm8mom8ޭn^m8Jmm8ll8bkzl8cj/l8i}k8Fh)k8g3Mk8fk8ej8dcoj8c&j8c i8b/i8"aSRi8}7` i8N_%h8i^h8]Gh8\h8[|g8Z$g8ZVg8EYg8uXGf8NW3f8Vf8NV]f8SU3f8|T' f8 STe8Se87WRe8Q e8P;e8P|e8aOpe8Nge8M^ae8!(M._e8gLae8%Kuge8*JGne8OJte8OI{e8HOe8Ge8Ge8EFe8Ee8D.e8Ce8=Ce8yBe8ϱAf8@f8 @9f8OV?Wf8 >vf8=xf8&g8k!8g8wp!)Bg8r Cg8m( 5g8c63"g8Y;g8?f8L_f8Yʖf8Sgf8_,f8coe8lΊe8r{'e85 d8"d8@d8vd8#d8Pid8Et~d8x\d8g3d8c8 tc8F c8 !fc8&< Ac8| vc8 b8Sb8Pb80-Db8IBa8kAa8>ca8~H'a8_j`8E{`8H`8SJp`8>E`8`V `8A._8%ir_8v_8'#ƽ^8Rf^8^8rO]8vK8FĎK8JA#K83~J8A՚iJ8N|J8㚶I8_^I8xx2I8⚶gH8soI8( I8!H8ČH8&H8!:G8ꈶF8')FF8X'E8,E8>僶XE8[{D8WCwiC8L#D8tC8'5o$C8cn lB8=op7C8dC8!\ IC8Z$ZFB8F[A8_]EB8IXeB8,SlC8%QC8TO*fC8NC8NC8sNxB8K:D8f-MF8kHwH8EyH8B#D%H8C1H8ADnG8\@F8@>E8`<*2E8- :3D87E D85ɸC8[a2 cC8/AC8z-B8kO*B8'HvB8$GB8 "B8@bA8qA8"A8gA8K9A8 3 A8( @8A j@8Xn|@8l5L@8Y~@8??83?83H?8{XkY?8d(?8mU>8q۵>8yrյ×>8oϵg>8iɵ7>8`õ%>8S=8uDY=82Kz=8wK=8^4=8螵1<8'ʘ<8!]<8nb<8`4<87'<8t;8g;8b[;8SOR;8B.&;8.6:8)\:89M,:8u:8/]1I:8f:8Mִ98F98@98;Io98ldD98298_l88088^ݲ88 h2l88<3A882388.4 78S`4Z78(478{4k78;4$A78u4r78468"56845V685k68/6*5@6865/68~C5r58WP558w]5ޕ58i5 k58v5<@585`585z48\`548548!5i48U5>48}548PH5j38ͫ5F385!38t588J÷n87·T8r}·a:8· 88HG8Ћ8zc8䛋8X8tEf84޾$L8vv188 8@18ټ[Ɗ8qq8 84u8w:Z8Һz?8jb$8C 883҉8"˸8cw868뒷e8*J8¶9/8tZ87h8܈8!8N8P}8賷n8OS8u78֮8#F-8gݱa8tȇ8 889ut8ЯKX8?g<88{]8*8gOʆ8W8됆8!t8*6W8*8:8F%8۪8q8Ņ8P383Ɋ8ȨSm8`^O8D288O8nل8Jɻ8?ॷ8uj8 b86D86>'8̣ 8Nb8̓8=8M#p8t8NV8䠷98y48 R8gj߂89n8Ξr8cb8Eg8ӍI8"*8-u 8K8ߛrρ8tа8-8;s8/AT8~Ù-58V8`꘷8}R׀8ͷ8-87rx8ʖX8]8888Q8q8&<08Wϓ0~8b~8?o~8.~8u}8o}8Em}8ِ-}8on|8:׭|8H n|8-.|8ÎQ{8X9{8Wq{82{8ZLz82z8H2xz8ߋu:z8vy8 y8"y8ujl8uEi:l8Lh`l8Tgl8^fk8hek8td\g8ː= g89<g82;g8:h8_9\1h8\9}Ph8>I8lh8Dž7lh86h8'5=h84rh8"k3h8o2 h81h8|0i8/i8HO/4i8.GHi8-xXi8]B-hi8, zi8p+ i88X+i8=*ʇi8C)~i8)zi86(S}i8a'|i8ő&kyi8%ؐi8s$qi8l#RIi8N" *i8O!i8p/!+i8<_ -0i8k?%i8li8Jjh8|kh8LwQh8&h8xRh8 h8g86g85f8f8|R-1f8\ Lf8 Sf8<)Of8!Ef8C4f8odf8}8e8Z~ Ye8gx e8҄ ae8( :e8 e8$ Rd8U`d8*d8x Rd8d8c89Tc8c8b8Jivb8?b8L0b8a8a8J=a8oda8Ja8 S%`8F`83,`8t_8T5{_82v_8a﶑^8@^8B]8H ]8鶰0]8\8<+U\8L8涸[8%d[8Z8ĶU8UQ¶2U8@k!T8Ů=T8^oS8UcEES8璹TR8o·lR8D㵶 R8YQ8'j`Q8[v Q8%nP8=R0O8*lO838O8p0N8ϤbN8LN8-M81O5M8+ԅL8bL8N3UL8,UL8 L8K89VK8T; J8W,E8OQE8vS4D8T5D8QD8ZhO?E8TJD8 LH0D8L5D8J{C88M͔C8;KnC8L6C8[LB8LqB8MB8ܡDFD8t-r"J8;C.L8%t1"L8x4lL8.7cK88;,J8Y\9PH89G88EF86^E844E82SD8H0o)D8-OC8]\+}C8(j>C83&C8%#sB8 B84B8|8Sv3B8[ B80A8mbaA8M A8ط _A88X2A8A8[@8egA@8z@8ŻIL@8a쵃@8浨?8ᵵ?8#۵?81յa?8 ;ϵ2?8@ɵ?8 BõM>8V?>8L9 x>8/I>8"~>8e=8վ=8瘵s=8F͒rb=8@4=8R=84n<8\t<8Bh<8[6S<8?O&<88C;86;8|p*W;868G4u568558T5585,585?h58q5;=58Ҡ525835$48548548Y5e48 5:48!5&ތ8B·Ì8{·8#·;8ټt8UxZ8 @8%8  8繿8R֋8뾷i8K 88Sk81NP8漷58'88𯻷8;Hʊ8ື8x꓊8x8]8AB8*ٸS'8+q 8! 8Չ88=8ж鞉8h8%h8KL8 0G18Ǵ8b_U8ވ8;È8&88T:p8B챷uT8888ٱ8H8߯ȇ8v8v i8$t8:W8EѭF;8g8 8Qa8*Ȇ88VŽ8쪷q8T8hu78;;8D8٨߅8~o&…818皧280i8CƦL8[~.88R@8Մ8跄8mH<8#ޣ|8s^8 *A8Uq#858ʡ8\`7ʃ8~88!p8S8K.58Fិ?8vP8 Gۂ87858Oʜۀ8^b8q(D8ʇ%88&o8DɁ8י8k8(l8iM8%.8=8nL#8ߖπ8rȯ88p8+.P8߾108R 87哷8}xԟ8 _8lM83~8Ƒ~8[^~86~8}8:О}8%_}89B}8׎V|8(m$|8'b|8l#|8,/{8Ō{8V\h{8+*{8!z8=!z8urz8O5z8)牷y8~y8Py87By8pD~y8ۇ6x8vrӍx8, pQx8x85w8˅w8a_w8-("w8ˊv8vv8iv8E+v8؂u8iu8nu8 /u8gt8t88lt8 *t8~;s8[}.s8J|as8{ks8zr8MzPr8#ytMr83xr8gBwq8Ovxq8G\u0q8gt0p8rswp8{raVp8q p8p*o8o1yo8 n/o8Qmn8}ln8ñkPn89jdn8 im8`hrm8kg)m8Qfl8Lel8|dPl8d l82ck8 b~k8v3a:k8H`j8^_ߵj8w^zuj8]6j8d\{i8["i8tZi81ZMi8BYi89nXh8ЛWch8Vh8U[h8a2U4h8LiTkh8Sg8`Rdg8R״g8SQg8Pg8Oq~g8BOsg8wANlg8&|Mhg8Lbgg8Khg8@%Klg8U[Jsg8{It}g8Hg8G^g8,Gg81cFg8EĻg8VD7g8Dg8f:Ctg8nB h8A'h8@Ch8?`h8)?*h8!R>=h8Yy=h8< h8Ų;i8:a8d`8ڰE_`8t_8^v_8._ _8(.`^8J&^8a]8;k]8Twe\8(\8 ![8߶34[8ݶZ8H۶tZ8tRڶ$*Z8LضY8ֶY8=ն`>Y8ӶX8%ѶbzX8oжGX8J϶$X8%ζ&X8fͶRX8̶ÚX8B̶X8˶hY8H˶Y8`&˶aZ8!˶Z8ʶZ8ʶUMZ8ǶȐY8sŶMX8köfX8V X8XW8`彶W8f%wV8>!V8^U8 U8`T8I7,T8KS8bRuS8[ S8nR8|9R8X2Q8@G=Q8mT;P8򛡶P8reP8UO8q&cO8cyN8mM8==NjM8X+L8L8wL8K8{,K8\@K8ᜍK8nK82J8mJ8Y^J85,J8NI8aI8ۣJI8xI8yKI8yq&H8th_ H8E*_ G8 qWcG8_ 4G8/aG8[G8QF8n K[F8HGdF86CkF8pD$F8 fFF8kFFE88FwE8E ;E8FD8GwD8FC8GqC85H9C8HB8$rIiTB8J}A8;PCB8]I+V8+%M85/SL891cJ8; 2H81gG80F8>r/E8-I!E8V+~D8LW)4D8&C8-$C8"ImC8W?C8YC8\B8K]B8`B8lTB8sZB8P 3B8 j B8wERA8tbA8A8kbA8o6A8 U A8@쵹@8o˰@8U൥@8ڵIV@88Ե(@8εK?8ɵ?8fõ?8[or?8D?8EC?8>8c>8>8K5a>8璵t3>8ь>8=8=8Nt9=8hR=8n\&=8 P<8xC=<8u7<8+t<8^H<8WP<8P*;8v;83 ڴי;8(Sn;8+B;81;8`l;:8R::86:8j:8m?:86f2:8V398398\%498W4Ii984x>98kV498488i4/88%4l8835h88a5=88 5688ط'5v78e4578A578M5h78zxZ5P=78,g5y78ss568L5¼68ᨆ5ّ685f68c5;68568 5585585ˏ58A5d58P5958x5P58Kh5485(38·80·8 "8,cɌ8?Y8H甌8K.hz8@ǿ_8&`]E8*8Ƒ)8|*{8*ýڋ8[8Z68݌`8P%}o8T8V98_88t8U͊8#O689縷 8I{8O`8EVE88G*8#߶8wX8׉88t>&8/ִ8m;j8N8..3848L̲8cU8%Ĉ8~ר8) 8*q8X86왷" 8Q8^8k_Á8:78[Η8ae8,F8+&8Q8pT8Aǀ8Ԕ8gLJ8g8ZG8!'828H8ܑ{8|ptO8z8昐~8_-ȏ~8 P~8V~8/쎷A}8}8>S}8=}8"C|8rٌ@|8o3Y|83|8{84{8ˊb{8c%{8fz8ԑz8G)Koz82z8Xky8^#y8}y8Ay8]fy8Jx8;ᅷx87w>Px8 x8w86w85˃i\w8 _w8Ov8v8cv8$v8s9Ju8ɀPu8,Ydu8#u8~Bt8~@t8F }]t8D8|wt8N{s8czcs8wyMs8[x;s8w_r8v{r8u$5r8tq8sq8r]q8 qq8pp8pŃp8B o:p8mn;o8nmo8i&l^o8z/k>o88jn8`Bin8Lhe:n8VWg$m8bfhm8oe2cm8\}dm8wcl8bl8 aMl8` l8t_hk8(^k8 ^Jk8?&] k8rD\j8d[Pj8Zh_j8Y)j8X&i8mWi8+Wji8?ZVji8UAi8QTi8S\h8'Sh8&_Rrh8kQŤh8 P5h8Ph85AOrh8/yNih8Mch8LNah8Lah8TSKdh8*Jjjh8Ish8H ~h8Hh8LGh8B~Fh8Eh8 D`h8Dh8ECh8uB i8aA&i8-@Di8?Fei8"?i8F>i8g=i8l8:#zl8YEl8Cl8B_k8Uk8u1j8oyj89j8j8  i8"i8 i86Ti8r ai8M# ri8 i8! ki8[1 Di8$Li8Cc@h8ylAh8h&h8a>h8hPg8rg8b?g8f8W%KVf8Oe8Ke8Z[e8jC(e8 d8S&d8 $d8d8rd8X8+eX8*bW8KW8{V8KSUV8nU8gU8MM-U80CT8z6mT8J [S8s|S8S8sR8Y>KR8MΚsQ8l?QQ8m!Q8xP8nO8?;'O8*N8rf6N8M8bmL8'L80L8KL8GڅL8 "K8*K8dTK8< K8\h}J8~zJ8wJ8iMr/J8%lwI8d%EI8\H8TJH8myOyKH8RH8kUSG8OrG8J޻G8F|G8:BeoG8k?$G8?F8SAVF8JB,F8-CE8D99E8I1E_D8DM#D85'E\C8z_DUPC8+DC8wxDB8_.E$C8F2D8hFMI8:_U8GYX8v}W8uU8^R8K#O84'oM8V*K8+"I8r,fH8x+~?G8S*9TF8 (E8&R E8$D8é"_KD8\ D8"C8IܨC8 aC8^C8 B8B8dA8y3!A8A8&0oA8 DA85ڵA8cԵ@8ε@8~ȵ@8EµSh@8߼;@8h@8t?8>?8?8)]?8}0?8lb?8茵O>8׆>8)€|>8SuP>8i>$>8}\=8P=8UDџ=88s=8R+G=8H]=8@P<8<8q <8۴m<8´B<8;ܩ<80`;8o ;8<>;8 i;8峳>;8Z;8%2:8[r3޽:83:8 !4h:8`S4I=:8ނ4z:8498J498c4#98 4dg985<98Z+ 5985#88z&5b88V$3588T?5f88}L5<88P-Y5488Me5`78r578HE578x5e78X5:78J578H568o5ڹ68DΥ5ǎ68B-5c68ꌲ5868=5j 68N5;585585ċ58t5>8->·m8ZS8p$98 8N8;8ԿPό8mʴ8w=8O88d8нHJ8pi/888$3ߋ8˻6ċ8cE8JG8Cs8,1X8 Ź=86]!8Y8o8%gЊ8'8U晊8v~8\>c8DG8,8L8䴷8q|4ډ8)8ҫ48rC8 ۲l8rvP8 48t88T8а8Hgň8k8~8z,q8]îU8(Zc9888Z8LJ8J?8V᫷8wq8 U8裪&88958ϩ(8e8Æ88|'l8Pl8SN8覷J18~8p]83؅8?T8դʝ8k88Kb8E8,i'8¢ 8sX28?΄8谄8B8yu8'EW8ڟ>:8cp88_80*Ã8 ƝB87[Z8J^i8@TK87-8Ү8fC8ךg҂8'l쳂8[^8iv8Z(W8#98O,8`㗷8vہ8B 8Q80}8ĕT^8FW>8tꔷ8}F8w߀85878˒8^_8;?8 88Cj8B8-׏A8k89~80~8+ D~8V5~8:W}8Z팷}8I}8I }8 |8Ga|8ߊR|8>v|8 {8{8zj8b=dj8|h8;ih8+tg8qNg8f8f8p}f8lf8}Lf81l$f8de8=e88ee8p &$e88d8yd8@d89c8t">c8b8UMb8 pa8da8 :`8,e>`8`5_8߶_8w޶.#_8ܶ^8K۶`^83ٶ ^8׶]8ն0]8Ҷw]8ж?]8ζ]8M̶\8v(ʶ\8ȶ\8ЅǶ\8ͧƶ`\8Ŷ]8Ķ 6]83ö{]83ö]8"¶'^8y@mf^8/f^8 Ѿ\^8 ; f]8\8չv'\8\[8>*[8Z8#oZ8nF|Y8@X8;LX8X8W8a?W8(+V8~V8{MV8óU8DU8T8YT8qꖶS8XṙS8E@/S8IR8RDR8I͜Q8/Q8֎P88/|P8lpO8ŢٺN8˂FN8-M8]M8~%oM8{1M8)xL8tkL8lSp4L8 lK8YiþK8MehMK8*e+K8_aJ8\4:J8WWI8̴G8z>NG8ǐ?bF8@sF8T@EE8t?gE8 ?-D8>FD8>C8>vC8*?fC8?µC8I(@(D8z?9!G8/"==L8`:2S8j1iW8H\W8U82U)S8s֦P8Kq"ULN8%5L8i&mJ8"&H8Yo&G8%w%?F8$ F8^"xE8t yE8*aD8^0ErD8>D8fD8$C858C8+ C8K 4C8 rC8jRC8b1C8oC8^B8E@B8eB8F2yB8XRB8B)B8GߵB8ٵ|A8ӵA8 εiA87?ȵXA8jµ.A8BA84@8&ȰS@8n۪ɀ@8餵 U@8j)@8v?8?8s?8ꆵy?8z݀L?8u ?8qi >8B]7>8 Qo>8Dq>88E>8>F,W>8=8ԥ3=8M=8Dl=8ݴ@=8RĴ=8~H<8L<8wsޓ<8mAh<8=<8<8.;8:1¼;8a3֑;8.3f;8J4<;8 O4O;8V4:8Yԙ4:84:874*f:8o4j;:8\4:8 5985-98,>%5i9815e98*>5:98}7K598|W5988$d5`88@q588}5d889R5988b5886578b5޸785ٍ7815b78y5778-ر5 78+75q685D68Q568NX5_68̹54685hݍ8 Í8}8:8s8,IWY8*⿷>8{R$8 8嬾+8EԌ8v޽乌8)w)8n8gi8@N8zٻ38q 8H 88:ȋ8)ӹ8]kؑ8v8[83S@8˷%8c 88ǓDӊ8+鷊8õ8n[&8<󴷷e8NJ8".8}V8+R8鲷B܉8d8 8gb8Gm8+߰Q8vv68 E8פW8;\8ҮMƈ8i188jq8.rU8Ĭ 98.[88]8EƇ8~ީ8J8੷p8vS8 68888}Χ{ކ8Yd381ף8{8%i8K8zQ+.8E礷8}08Յ88>8^Ԣ|84jm_8A8ؕC$8+8l 8-Wm˄8쟷ϭ8)8,vr8T8;C78؝68mb8*݃8C8D-8(›8Vbe8뚷*G8(8[w 88k8vi=̽k8$-?q8l$Lq8#Uq8Ս#Tq8# Aq8"^q8+!q8:!q84o >q8q875Tq8p Dq83q8!-q8V+q8$p8:-ep8Bp8E\p8Ybdp88qn0p8~co8١o8,o8Sn8n8en8n8 m8=B Om8Oi cm8} ܢm8 m8\ m8Ҭ'um8Zm87m8m8>l8 l8Jql8j1l8k8pk8Vk8j8kj8j89Oi8\x5i8qh8gOWFh8Og8g8ﶠg8,mPg8f8$wİf8qf8xMf8f8Me8y ]ye8d綘e8ov?d8嶐\d8_)c8|'c8S㶜ec8b8}Isb8@߶b8ݶףa8Ȑܶ2a8{oڶ`8ض`8^ֶX`8| ն+`8+ӶS `8),Ѷ_8uζU_8X̶|_83Fʶab_8Ƕ H_8BƶR3_8Ķ+_8~ö8._8k¶7_8O>QK_8Yo_8XE_8:_8 ]#`8?9`8ƝK_8f 8)_8`|^8M]8O]81c\8gЯ'H\8`![8֬/[8Z8⨶l;Z8ȦY8*[Y86lX8&X8㝶Q/X8VW8{wW8jW8΢V8O|zV8ےǕU8@)AU8_?T8;nT8QhG8:F8C:CF8]9rE8t39E88D88h D8O9C8*9C8:wD8Jn: F8<9:H86M8u-tR8"[T8d`uU8DT8g,R8P8x7_N8!hL8o"J8>"NBI85!H8 %G8גjF8bE8%mE8 +E8D81D8ǃD8%C^bD8 PDD83l 'D8 D8fC84xC8:C8u/C8*LqC8vNC8m+C8҇MC88㵶B8i޵KB8ص(B8G"ӵ^kB8]p͵CB8ǵNB8a"A8%)A8WƝA8ZsA8vUIA8=A8[О @8ߘ/@8꒵8@8%s@8񆵃G@8퀵@8uE?8̱i?8f]z?8iQ n?8:EB?89u?8,!>8v >8?>8 Lj>8>?>8E޴>84Ŵ=8=8C}=8dvng=8KEa<=8Te=8³w<8F><8A1<8Q3e<83:<8-4<8J4Q;8|4;84ŏ;84e;84>:;84};8P4:8V 5:8c5G:8$5d:8059:8K=5:8SI5'98V5T98PEc5y98o5c98|58985 98$588Y588˳5885a88Hj5688ƪ5 88#5785785m78?5:_785378:578b`5n68 528w;8$8e8Vȍ8￷t88!hy8^8gS;D84콷)88$8Hbٌ8N8i绷8ڈ8Qm8R8 I78Rṷ8y88驸ˋ8 BS8*ڷ 87ry8: ^8=QC80:(8ҵ 8iG8Պ8v8p186ɳ8`h8L8?08']8c8Vމ8Ic‰88ъ80n8[K S8q⮷78ty8e8@8>ƈ8Ԭ88Tkҍ8_q8PT8.>88Ū8G[88Ň888In8ߧP8u38w d8[897ۆ8ͥ]8b88 f8$H8],+85P 8梷$8{҅888=z8\Ӡu\8-i>8R!88d*8 |Ȅ8UЪ8,띷8^o8Q8338Z@8e՛8Njك8ӻ88C(i8a8PB8&嘷!$8,y8 8٠Ȃ848*Ȗ8[k8"K8,80 8888UE}8KِЀ8om8T8>q8*R8Ϳ|28T8Iꍷ 8]8i8a+8A9~8D؋F~8nq~84~8˜}83i}8:ˉg|}8b?}8 }8|8L)W|8N|8wX |8{8`&{8<^{8Q"{8Lfz8Hㄷaz8yNnz82z8gy8:&y8ςY|y8)dV?y8(y8nx8|x8󰀷,Hx8B x8%Zw8s~ʊw8v}Jw89}C w8%|gv8/B{v8N]zFv8'wyv8xu8$wU}u8~v9u8uBt8tt8Fs\kt8 s%t8rs8.qՙs8>pfSs8INo s89]nr8km~r8zl7r8)kq8Cjq8nibq8βhq8~gp8fp8He2Jp8dFp8do8cu}o8@'b:o8;an8YQ`Rn8Ch_xn8^:n8Ś]m8\m8[%m8$ZrQm8Zm8D6Yl8ZXl8ɀWl8VZl8U0l8T l8t(TOk8USAk8RRk8-Quk8Psk8IP_k8COHOk8sNBk8+M9k82L3k8LY1k8.K1k8\J5k8чIul8z=l8}oa8/a8RRa8 `8]\"`8͢z_8歶^8y`^8媶]8Q]8\80f\8[8'[8㟶[8ëZ8ZZ8qY8 Y8!jIY8) X85X8ڎX8 ;oW8)$V80V8R]D6V8aEU8l*U8͂ T8lT8B}ՄS8;yS8vYR8w%sݮQ8}q\,Q8WncP8j1RP8f?O8cO8@`&O8/]vN8]Q[)WN8YN8VBM8T;lM8HuRF*M8}IPL8 ML8JL86HHK8EdK8~B%K8 AGJ8B?eJ8<<J8:jI839- I8E8UH8޴6G8-5\G847F8*4F8cd3qE852D8e2JtD82sKD8|3eD8!4NE8e4eF83KI8ڂ0ԘL8*P8a#fR893/S8t+R8 dQ8ֳO8M8{4L8-HbJ8,h^I8ڕxIH8{jG8}FF8rQ5F8E8Y E8]FE8E8TD8'j D8! gD8D8nC߇D8mD8DpRD8j5D8`;1D8=C8FC8L̶C83C8fݵ6pC8|׵KC8Pҵ&C8K̵B8ǵB8`B8 ʼnB8赵}aB8 8B8QB8zA8A8~"A8ΒiA8ߌ>A8X놵A8񀵜@8u@8i@8 ]h@8Q=@8E @8l9(?8>-=?8!K?8Wg?8La8Y@Ǵ|>8񎮴>85ԕe>8z:>8.H>8=82ʳ=8/ME=8緰rd=8A39=83=8y4 <8ƍF4F<8|x4<8k4c<849<8K4]<8N4;84;8Ԕ 5(;8)/5jc;8"58;8j/5 ;8 <5':8ӮH5]:8SU5:8a5b:8ϣn57:8xN{5 :8598T5+98d5<9885Fa98^5E698 58 98 5.88o5880̶588Y)5^88,53885R88D5 78Ф5ñ78N5r78Lf58C2m8VS8nd88v#8w8j/8OȾ΍8-a8X8Ȓ~8+c86ļ4I8\k.8i8򍻷8g&݌8ҾŒ88W8ﹷ㌌8Ӈq8 V8?;8mPt 8跷A88΋8y8H+8൷|8xa8!F8X*8+@J8׳8o^؊8o⼊8"X86ȅ8fα1j8eN8o28ݔ08;,j8ï߉8ZÉ8֧8 ⋉8 o8 S8M78䬷d8r{88Mƈ8?ǩ8ժ28kp8+S8i78. 8Ĩ58Z78*Ç8Ć8㈇8k8HnN8ޥ18jt8N m81 ن868̣>8a΀8Qc8E8#c(8{ 8fOb8O堷υ8*{Z8Ք8ԦKw8l8}VN8a08bW8}8k:}82B|8ƚd|8A2N|8Ʌ|8`{8${8F_{8%N#{8<;z8Qz8悷nz8{2z8o9y8y8a8zy8ˀl8kdFNl8E4al8Dul8Cl8Bcl8BNm8=lym8G8.4F8-E8-WE8,:D8,aD8.e-E8n.E8M.@1G8-`5I8+K8',N8.#O8'UP8P8QO8΅N80 M8aK8IrJ8n#SI8aH8OG8I&G8hXF8Mi-F8E8$E8 SE8 iE8h GNE8 U5E8Y=E8E80D8oD8huD8N񵪟D8"mD8cD8 CD8>=ܵ"D8ֵD8]ѵC8˵C8yKƵC8 oC8KIC8 a"C8B8멵MB8$ZB8U B8a[B8wp2B8>6 B80ֆA8瀵A8u׋A8ivaA8Y]"7A8Q A8Ey@8v9@8-@8z!c@8K8@8: @88;C>89ѳ>8[b>8p8>8k23e >83=8An4=8hB4A=8`rt4b=87C47=8S43 =8j4<8F4ʷ<84<8g5\b<857<8R!5 <8S1.5,;8S:5n;8mG5;8T5a;8R`57;8Wm50 ;8y5P:8'T5q:85:85`:8$W55:8N5 :8"598a598598H5\^98s51398598-5885885@88H5Z885/88b 5Xݎ8!Ž8/rm8: 8?os88=X8+־c>8o#8) 88w9Ӎ8/Ҽ8jW8z8 h84M8ͺ28qe88'8m.ƌ8Ƹȫ8^8 vu8#CZ8D'?8R#8WWu8Rﵷ 8Eы83q88N8泷8d8~H8SL-88E@8gݱڊ8u8 m8ɇ8;l8үQP82j48r88/8ƭĉ8]88_p8@"T8鸫78OP8檷8s|B8ň8$8g?(8ըQo8kmR8u58򗧷o8-\8æ<އ8Y8亮ۣ8ㅥ8Ji8K8G.8ݣJ8s8 ~ֆ8o8`58Qˡ-~8Aa`85MC8(%8#R8츟8NWͅ8䞷ӯ8^zO8t8&W8S;98М8=f<8|8ɐ„8%ۤ8躚8Oh8䙷J8y,8 8E8G6у8kʗq8i^ܔ8P9v8|W8888A8Ԕۂ8hb88}8"k^8>8I|8Cݑ8pq88Z8,ǁ8Bb8UB8"ꎷ>#8~8i8ŀ8>Х83Ԍ8jzg8$mH8ez)8, 8Ê8Z8g]8؈r 8+ ~8'~89Oj~8懷}.~8~j}8Cr}8z}8E>}8݅}8tg|8 |8袄 P|89F|8gЃv{8f{8y`{8nK${8'z8Cz8Q[nz8倷$1z8xy8 y8<wy8`~?9y8Â}Ox8a|x8{#{x8,z:x8tzYw8yGw8;xww8dVw5w8pvAv8ujv8t(mv8s|)v8reu8qu8p:\u8 pMu8ot80nt8.Bm!Gt8Slmt8Seks8vjvs8i0s86hn8u=fHn8oTr8\swr8Lr8H)r8Hkr84dr8r83Sq8Uq84p8fNp8o8\iQLo8'n8I(d\n8s8m8$Wm8Xl8ohl82Uk8趎j8 &綾Xj8ɠ涕 j8c+涙j8fq2wj89䶾j8P㶳j8{ak8{:k8߶7j8q޶ݱj8Uݶ"`j8۶ i8:ڶi8Huضl#i8ֶ'h8Fնh8wӶVh8Ѷh8 (϶bg8q*ͶÕg8tʶ|g8ȶ(rg8kƶ Lg8_Ķ8g8r¶3f8Wf8.̽?f8f89ale8C}e8L.9e8岶e8s d8d8+}Yd8]d8@c8:Kuc8b8֤Veb8.a8FnHa8[`8`4`8]ڜ_8Y_8!FQ^8哗^8\E1^82_x]8J%]8`؏\8^\8Pm[8[[8R[8>̅kK[8߃4Z8n/EZ80mY8M|Y8IxyX8uutW8}q %W8mrV8@jU8MV-P8VK@O8 IuO8 G&O8EN8x,ClN8*Ar8N8>M8ՠE8{'|-F8I(IG8%'H8<&J8K$]{L8D!tM8+WMN8# ӖN8BN88.rE88c[E8qACE8k>)E8R嵿 E8'D8ڵD8sյ+D8EеD8_ʵ qD8gŵND8念+D8WD8K,C84ȼC8IoΖC8`LpC8[IC83!C8d0B8B8ెB8΀B8uWB8oiL.B8^B8 RA8FA8:%A8-4]A8I!+3A8 A8ԑ @8@8pU1@8Vɴ_@8>QS5@8( @8c?8VN?8}W?8wس`?8ti16?8 ?8f#3 >8J3p>8x 4Ӌ>8Z>41a>8Jp46>8)$4 >80*4L=854=8G4=8_4Qa=8x>56=85 =8c 5A<8|,5<8}95̋<8.F5 a<8(R5E6<8k_5~ <8 l5;8|x5ϵ;85;85 `;8g8:I85N,8.G8&ݡ8"sԆ8 8F85{8˟f^8`@8#88z"88˅8M|8㜷ꏅ8yRr8T8ޣ68$9@8JΚs8Yc݄8A8 8!8Ale8J4G8ߗ(8/s 8=8.k̓8/®8•8Vq87ꔷ-R8}&38Y8ݤ8c8Ղ8˒^8_81󑷤w8熑:X888W8B8֏nځ8k88%!|8(\8{=8@S88茷 8q~߀8Z8r⡀8@8D׊9d8nE8&8 8K3%8ʈ8'b[88r~8()~8j~8X/~8OZ}8燅}8h1|}8ȶ@}8M}8䃷||8{ԍ|8(R|8S&|8,>!{8Ӂ{8hva{8s${8z8m%z8gqmz8 ~)/z8}y8|Gy8{|/sy8"{3y8Czx8/byx8Rxsx8Uw1x83vMw8uXw8tkw8 t=)w8(sv8l6rv8Lq^v8bppv8wou8nu8mLu8lu8kt8j}t8i8t8dhs88h-s82%gjs8w8f&s8Ler8`dr8tco]r8Ӊbr8ҟaq8`{q8p_q[q8^~q8^p8]tp87\kp8T[X3p8zsZo8"Yo8Xho8Wdo8UV6o8V o8CU/n8VjTMn8S,n8Run8QWn8C Qn8(Nm8Mm8;Lm8Lm8-Km8UJm8s{Ilm8H\m8Gxm8Fm8 Fn8(En8=GD.n8VdCyFn8TB`n8Ae}n8@ n8?n8>n8>=o8P|8!x8`9w8iw8dw8~w8w86x8S%x8m*x8x8Gw8[w8~w8`Hw8. tw8E v8GO v8 {v8 (v8 Bu8au8Nu8u8Qt8t8l#t8ut8 Nt8.Zt8VZy1t8, t8Bs8zs86us8zs87{s8Gs8 {r8 tfr8q8tq8tq8p8 "p8=o8\q(o8vn8"趵n8hbxm8Znm8-ql80䶿l8,l8zl82m8_ඡfm8޶~Cm8Ɠݶdl8Hܶl8iڶNl8cٶl8n׶k8:ֶok8zԶ k8Ҷj8rж9j8x(϶Pj8HͶj8y˶]i8<ȶi8ƶi8aĶdi8!¶6;i87 h8Oƽh8\_h8'F2h8(>g8hg8Uvg8ɯ:gg8bm=f8xGf8멶e[f8r秶(f8(e8\e8%d8}Kd8Ȟ|c83c8rrb8I-a8i`8ӕA?`8x,8`8o.B`8撶]`8 ^8qF^8?%=^8]8b]8@y']8,G\8/Ă\8l \8n}#[8sy[8iuufhZ8qmY8?mY8sj4[X8PmR8 UMQ8JoQ8CG2P8,kEP8zC6P8@XO8>MO8<;O8N:QN889N86kN8}4M8Dg2RM8r0'L8.pyL80,FK8**wK8 m)5J8b(ZJ8&]I8%(I8$wH8$5G8&#G88`"F8!FF8!vE8!F8&"NzF8_v"~MG8bc"sH8;!I83 GK8/9RL8L84L8,gL8bL8zV2NK8p^"J8'`I8J I8:mH8!G8EG8ɬ 1+G8C KF8U* F8ExF8LtF8?`\F8!oGF8]$4F8IoX!F8dF8+E8dhE8E8E8޵E8sٵE8KGԵcE8 ϵEE8ɵ%E8cĵE8^D8Ԅ:D8cLD8Jt{D8ۨ^WD87m2D8[ D8ӗC8bC8LpC8}rC8eJC8uY"C8iB8] B8RB8+F~B85:lUB85. ,B8?,"B8A8 )A8IA8cT[A8˴G1A8&A8@89@8Qw@8 '^@8F޳3@8Twe @8%E?83?8`έ3 ?84_?8ac:4 5?8!:l4~ ?84>8 4`>8 4Ί>8242`>845>85 >85O=845=8+5=8[85@`=8D55=8RQ5 =8'^5<8Rj55<8Rfw5g<8S5_<8~V54<8}5 <85;8R5ֳ;8{5҈;8$5];8V52;8"5;8v5:8ub5T:85":8q5Z:8t5/:85S:8/598?598=5=98K5R8&'m8,TS8'Y88;8 8#8ü{Ύ8UԳ8^&8k~8c8qH8 Q .8麷.8K8[ݍ8𲹷d8NK_8㸷M8{X8*DŽ8°*i8ZM818)8v j8ɷފ8OŠ8G歷ݦ8p}芊8n8R8oB68M٫8pT88vʼn8 418ʩ8`p8atS868#808[P38榷BÈ8|C878˨l8>N8Ԥ18j8Z8얣ڇ8,ʼ8¢{8X&8d8tG8*8 8GY8ݟц8s8 #8y84P\8ʝ>8s`\!8,8Ջ[8h!ȅ8ᶛ18GL8ᚷo8v R8 R48Ҡq85{8_ʘyڄ8^b8p>8χ8 a8#9C8'D$8ؕ8kr8ȃ8jɩ8'݊8k8ENL8ᒷ-8zus8& 08לς808sĐ38dXq8u쏷yR8388h8;>Ձ8Ӎϵ8*h8srw8WX8(J98J8Tl8늷܀8佀8jH8c8~FYb8݈C8$u%8 8M8<8ӆ[8kM8O~8 ~82l~8Cʄ1~8a}8?}8~}8&>C}8}8S|8遷|8 T|8|8S{82>{8fa{8~Y${8}z8}Ĩz8?;|gjz8\^{+z8izy8y y8x@my8w,y8v4x8vx87uix8Rt'x8ls^w8Arw8˞q_w8pTw8ov8nv8mPv8Um v8T$lKu89ku8rMj}?u8ai1t8uht8@grt8fI/t8Ses8Rds8ctfs8b$s8 br8!asr89` dr8Q_%r8k^q8]q8\ rq8)[8q8Zq8Yp8Yp8;Xep8]WP6p8Vp8ݤUo8To8S؎o8nSko8=RKo8o8\:=o8D<*'p8K;Xp8N:!p8N9p83I8q8=7Bq8Z,6{q845_q8t4r82^r8k1r8I0r8V/{Bs8@ .١s89, t8+}t8*>t8bQ)(Tu8)0(u8%'v8;&Xv8x%Xv8$$v8Z$b=w8# w8:i#^w8"x8!Ox8&!x8Kd #x8Apx8 : y8fT>y8k!'y8$Ly8dy8L8ϲh|8y8y8y8wy8Diy8y8iz8y8 y8y8, y88}}y8% Ay8 y8V x8 x8 rx8]< +x8FV w8Uw8P,Bw8wSv8gv8|٥v8v8(Ifv8Dv8!v8[au8u8u8:xu8kUu8tu87wu8*[u8N!u8bt8,kat8s8dﶉ{s8*}s8r8"'Ur8 'q8מ궂q8fٶ sn8pض n8k׶Xm8_նm8Ӷvm8Ҷ.m8Eжl8Lζl8 T̶3fl8-qʶfl8o~ȶk8Zƶk8,Ķ]k8l`*k8j8j8A5cj8#j8󷶶i8jMi8Fqi8yNi8;3i8XRh8,dȐh8Nq7h8:lg8¢7g8f8Y0Tf8Ge8%\JBe8뜙d8[◶c8lb$c8,ab8Ta8;ʞa8Wxݎa8񱎶FHa8ƌIz`8@_8Ë_8[ⅶp(_8^8 b^8ŁP^8HD]8?{?]8p#wx\8v1s&\8yLo[89k"Z8gy(Z8dgpY8NaX8$B^W8\Z[K5W8dXyV8SUvU8CSU8PJyT8hM1S8JNS8 HR8BEBR8BjQ8@YQ8=AP8X;MP83799P8d)7hO8h 5ρO83O8_0̺N8$. SN8,*M8} +{M8{5)8 M8r'CL8% L8KR$K8#J8^!nJ8 2I8 '%I8: wH8d*G8񽵋E8t~{E8)ZE898E8I.E8D8D8W_;D8D8b_D8E889D8^oD8=uC8&i=C8]C8A R%tC81FKC8N:"C8`.B8h"1B8wfB8[ ~B8N|UB8T+B8 ̴OB8A8'LA8bׂÄA8TZA8#0A8ɹ䳖A8&f@8yI{%@83ۇ@83]@8s4.3@864@8Bh4b?8_4?84t?8s4^?84m4?84 ?85T>8s5>8 5>8w*5t_>8y'754>8%C5 >8|OP5[=8'\5=8}i5߉=8v5_=8?^5>4=85e =85<8hR5<85<85]<88c#8@ 8R8.ӎ8ƻ8Z_@8j8xh8(M8f28Y8*򸷱8}8"ƍ8h83S<8Y붷u8yY8>8:#8K8㴷8{6ь8۵8os8JC8 ۲c8rH8 ,8n8":8Ѱً8miZ888/Yk8_ǮO8^38898i$&8%Ċ8R8s髷8Yo8,S8筪N78D83۩8q 8/|ʼn8ڨ84+8C˧ho8aR858ꍦ8$86ވ8TP8h椷8{|8Xj8$M8>/8Ԣ8jf8؇8□ɺ8,z8à+8Yb8E8&$(8, 8,l8"GІ8ݝ8rD8w8]Z884<8ɛ[8U_888ƅ8_ਅ8 8ILm8aޘkO8su18l8LU80$ׄ8Ė߸8$Y8:핷|86]8>8D 8v8hu8gzu8<g6u8ft8-eΰt8tCd|nt8Zc,t81qbs8ՈaSs8`ks8(_ -s8^fr8]r8 ]wr8&\=r8?C[ur8aZq8ŀYq8Xfq8WV5q8VGq8Vp8r*Up8OT p8QtSap8 R>p86Q p8PAp8 Poo84Oo8[No8`Mo8L~o8YKo8FJo8cJ΍o8:I+o8\HÑo8}Go8TFo8Eo8jDo8~Cgo8 Co8$B>p8:Ap8$O@>p8sa?Bap8Mq>؆p8}~=Яp8"Sx8 !$y8` poy8 y8]y8Tz86z8nJLz8blz8zѨz8 6{8JE{8 @F|8gԇ{8{8a{8u{8we |8r|8l{8͵{8bg{8{8 {8J0 2{8 z8 gz8 sz8 5 iCz8} 7z8y8HWy8Zy8 x8ljx8N;!_x8X8x8Jqx8w8 w8;~w8w8_anw8Xsw8'jw8&Ykw8iw}w8/Tw8b"w8:v8L5Nv8,;@v8q6Vu8_L_u8t8tt8Y at8dv t8s8ys8c2Ns8 s8Ir8kvdr8MDq8 ߶q8ݶIq8(Bܶpq8ڶcHq8ٶ\q83ضp8ֶep8Ѭն p8xԶo8Ҷgo8PIѶq`_8)} +_8l'y^818uG^8Rq]8xm)]8Li\8fs[8{b8)[8_(pZ8[Y8XX8U2X83SuW85PV8xMTV8=KhU8HT83E0T8CS8V@S8s=!R8K ;!R88Q886JQ893P81ĆP8G/,$P8-߾O8Ѻ+VO8)uN8'N8%]N8d9$|M8""M8 [L8׍L8NӗK8;8K8[H~J8`I84I8SH85^H8ZG8Vk9G8G87G8̋G8H8TH8TI8+"I8{%EJ8ptJ8~-qJ8g7ADJ8g5I8I8}f |@I8U cH8 H89 IH8t H8uxG8dG8TG8xG8doG8_G8PG8Ä]AG82H2G8A;"G8;G8Lߵ'F8ڵF8: ֵF8`%ѵ~F8*̵F8ǵFF8mF8ȼPF8†2F8v5F8լE88h-E8E8Wg"E8iՖ lE88JHE8摋#E8&ᅵ D8='D8tD824i]D8]fD8Qp?D8FD8Q:C8v.pC8ܐ"C8pvC8Z MC87A%C8%B8B̴B8˺B8VmB8oVB8:JW,B8X&B8WA8X-A8(A8=2 [A8C30A8=4A8b24u@8*gd40@8 4ه@84v]@8Ӽ43@84@8͹4,?85?8]5/?8G5^?8k)54?8L55d ?8NB5>8PO5 >8[5V>8?h5^>8St53>85 >85==8W5`=8T5t=85]=8L52=8S5=85<8QJ5o<85X<853[<8O50<8ͨ5<8K5;8\5L;8ȷ5;8q5W;8o5G,;8C5;8+5j:8538u8~w8l8T@Wɏ84ٽ8 r8 vy8^8]<D8ջX)8m8\8잺؎8r78Ϲ8Zh 8"m8R8k168ɷ8a8'8Oaʍ8m*!8µ8Zx8>]8A8"&8}- 8eR8@겷VԌ8ฌ8j8灌8bIdf8᰷J8xD/8d88?V܋8֮8`n椋8 8Fm8G4fQ8wˬy58b~8o8Y8|'6Ŋ8U8U8멷\p8oS8v78z8E[8Nܧ8rĉ8-8.V8i5rn8˥Q8a48|8p8,$V݈8E08XP 8q梷ۅ8|h8fK8$.8>8Ԡ8 kSև8# 868L-m~8]Þa8hYC8fs&8_ 8G8#XΆ8F谆8ܛx8Rrv8}X8Y:82a8ș86]8?;ą8-g88j8:EL8ٖc.8n28B8cӄ8n*8g8NRw8$擷>Y8yz:8 8\85݃8ȑʾ8\8h𐷎8Ima8??B8K#8t@8Ԏ88ił8V858'h8I8R *8狷 8f}58d]́88?8։aq8QmR8O48t4828(ʇـ8aȻ8dӝ8'8(b8WD8X&8q868g87`8N%86悷~8C}~8[s~87~8Ai}8׀}8l}8 H}8- }8V~|8.}X|8|;V|8{|8z{8Gz{8:y^{8]x{8owz8\v*z8Ju0az8Mt z8ps1y8s9y817r]y8Rq@y8mp1x8'oҗx8nJUx8κmx8glw8kw8_kNIw8j w8 2iv8&Ihv80`g8;q8d=aq8y8Py8BSy8e)y8: y8Wx8&x8'gx8=ix8*x8Fw8붒'w81v8*궸nv8Vcz%v8xu8Ɯu8 tru8}?u8u8W*ft8߶ Qt8޶ t8dܶxs8۶9s8mٶUs8~"ض>s8ֶ@r8vնr8ԶFr8Ҷq8Ѷ(q8^϶Kq8/ζq8`̶Hp8'˶`[p8yɶp8םǶbo8Ŷfo8öo86ϻn8$nn8A#n8m8|m8WBm8 l8l8 j3yl8 UBl8UIl8}9Bk8ڥXk89Kk8lj8yij8厝i8:ki8יIh8gh8g864g8YBf8|;e8靎8e8ʌȱd8@Nd8Rxc8>fc8 c8vb8 b8a8n}a8qz`8w9`8vsi_8+oB_8k^8i8hq^8όdtz]8`\8=]\82Z c[8nWKZ8SY8Q'Y8AANjX8KoW8 HW8RFUV8{C&U8AU8k>6T8 ;[S89jlS8u6R83{xR8̌1 R8C/jQ8x-@6Q8U*KP8(dP83&oO8%O8(#O8/_!۫N8ө7N8J ˾M8pAM8-L8=?L8bK8 2K8RJ8I8]aI86-H8NuWH84G8pG85G8gWG8U-H8ߑH8@^H8V^`I8] I8I8I8# I8Q dI8 NnI8 T2I8feH89H8H8QeH8r`uDH8)H8 nH8IH8o}G8ȡXG8G8yG8B77G8+cG8_ݵ)G8صdG8P!Ե|G8^ϵgG8ʵPG8ŵ8G8VG8;G8?\F8o%F8ޫȭF8+ĎF87%nF8ﳛNF85,F896 F8K8b5'>85V>85u]>8jO52>8j5>85=8E5=8h5=8=5{[=8C5Y0=851=85<89J5Ǯ<885<8 56X<8W5,<8޲5<85;8k5;855;8k6F8n8ĵ&T8N98罷8pY8;8 Ϗ8J\8㻷84|~8d8uHI8Fe.8޹8v8fݎ8ƧŽ8$@8oط8p`q84V8+;8V98tѵ8iM8͍881W8ɳ{8a`8l+E8G)8)F88XM׌8qʻ8):88u i8OhM8殷18~8L8Ԭދ8%D‹8k̦۬8rߊ8 n8ǠR8768Ϊ8ey8Y58Ŋ8)w8K8Vp8WS8N788n8F 8ܥ/ĉ88sD8n R8Sm85NP8ˣ;38b"848Wۈ8z$8y8PE8样 g8}I8(,8LS8l?8՞ԇ8k898|8-_8ÜFB8Y$8r82+8̆8D8FǑ8pۙMr8US&&r8yRr8Qq8Pq8tOq8L Oq80N]uq8pUM5bq8xyL:Rq8KEq8JBq8 zEFIq8xDVq8BCgq8;B{q8OAq8@{q8?q8) ?q8$>r8$=|7r8J,Զtt8y8ӶT+t8Ѷs8`0жs85ζkCs8<&Ͷr8˶r8 ʶ8Ar8>ȶq8(Ƕ`q8^Ŷ\3q8͂öRp8zp8K p8Vo8vo8ɸ|%o8Qunn85 ^n8ͱ6n8~um8-Cm8تkm8~0m8#(l8ӣl8ǙUl8} k8o~k8x'k8a؈j8a j8ӕui8 h8?)[h8/Og8^Qg8xӀf8D?e8Ie8Id!e8A8O4 A8[4ȆA8޲5y\A8)52A85A8!'5E@835IJ@8I'@5;@8L5]@8N9Y5 3@8e5`@8Vr5?8T~5?8U5,?8+ 5b]?8+X52?8+5?85>8E5ѱ>8+5ц>85[>8<50>85>8(5{=8'<5P=85!=85X=8$C5-=8x5C=8v5<8JQ5<8ɬ5<85T<826*)<8a6 ߐ8Bľ}Đ8(]驐8 P8鎽t8'Z8g?8IY$8 8ŠJ8h#ԏ8 8T㞏8)8i8-N8/38N*8@緷88Ǝ8«8GH8r൷Uu8xZ8>8#8@28س8p|э888k8<8;бc8 hJH8,8K8M/8Ư$ڌ8^83⢌878<%~k8O8 T48a묷-8M8_8kċ8 Hi8ߪT8v7p8 T878u:x8#Ѩ8g8L-Ɗ8͔8F+ 8cp8 XS8`688(8)78bGEÉ8ݣG8s:8 .l8O8K618v̡8b8yڈ8E8+%8Y䂈8Qe8瞷{H8}A+8 88-@|Ӈ88֜486l옇8*{8 H^8-@8Ú#85Y88;2ˆ88ݮ8Dcr8ٗT8m688a8+݅8h 8T㠅8锷80}_d8FE8J'8=98!͒g8`˄88<8}do8axP8OD18M؏8al8ԃ8Ȕ8.)8w8mRX8C猷98A|8r8ۦ܂8y<8LҊ\8Ph8b8锉C8+%8]ˆ8[Y|8Kʁ8·48?28նv8_u8R_u8[5^Ԅu8Q]Hu8o\1u8[t8ުZt8Yet8tX0t8 Xks8*Ws8KV-s8mUns8lT(Cs8~S s8R[r8Qr8Qr8BPr8fOrr8NYr8UMCr8L0r8K r8Kr8Z8J r8XIr8exHr8ȖG;r8Fr8E r8DCr8D$r8C5r8/BIr8^BAIar8S@{r8b?ߙr8(p>r8z=r8$<s8;-3s8 :Wbs893s88s8~}7t8Lr6aCt8c5Kt8O4Ht8.739u8T2]u80lu8/9v8Ʒ.Yv8-v8b,.w80+@aw8)w8(x8T'zx8X&x8%=y8$y8#py8"]z8!Ժz8!{8S zi{8Q{8d= |8hXZ|8T(|8|8^/'}85S}8 t {}80}8}8~8?W~8'~80~8 O 8Y8Ȩ8yr8788 80 8ƺ 8z G8 8 $ UB8eY~8͸~80qp~8'~8}8IY}8nWx}8K8 J8,F J8n I8 _I8Un *(I8 t I8 Z I8: I8 ;I8A _I8)I8I8II8I8K*I8HI8_I8vI8o]ZcI8z RI87wBI8LR5I8 *I8أ(!I8PiI8oI8̤5I8{ൽH8ܵ2H8صXH8GԵH8_ϵ#H8p˵H8ƵH85µH8ytH8hiH8CQH8`8H8BH8pH8LG8' lG8G8UG8I牵ujG8WlIG8z}'G8rG8jgF8\F8øPF8GDE.vF8w9PF8*.P+F8"F8AE8L cE8bOE8.hE8SδSAE8wE8P"_D8}D8Y]D8g-wD8I,ND8똳%D8ݲC82eC8'(3C82C3iC8G(4VC8Y4-C8`l4,C845 ]A8tK52A8!X5A8Ϗd5e@8'q5@8~}5@8@5V]@8g52@8A5@8l5?8K5?8l5#?85-\?8:5)1?8l5 ?8߽5 >825>8?5Ą>85Y>835Z.>8<5>8;5=8:5r=8c5=85U=8I5;*=86<86=<8X/648kM88y8O6yʐ8ϼү8g+8}z8X_8 2E8ʺ>*8Qch88jُ8,̾8ZŸգ8]؈8 m8vR8&78 8EW]8xﵷ*8ʎ88۷i8Oy8糷]8sB8'8Я 8G@8߱ԍ8tw[8Gߝ8\8>f8֯OK8K8vS8N߉8豢H‰8 H<8Vޡ#8t k8 M808178g͟t8cNو8 88?&Ł8gd8RVG8蜷*8~ 88Ȫ^҇8@8֚Ǘ8Olqz8]8?8-5"8˜8W-8헷Ɇ8⫆8)8٫[p8@R88Օ48i8$8s[څ8&8׺Н8Np8Ⓑ`8vtB8 #8<828{ƐDŽ8iZ8e8nAk8UL8ªi-8?}8Ӎ8hЃ88͒8&s8𻋷$U8[Qg68犷8|8kڂ8ܻ8t?h8ֈ8l`8B8n$8g2^8Ɇo8maʁ8#8됅8([q8S8X8688cJ8; ݀8w8O8*灷8~Oh8J8o-8aC88 ~8 ~n86}28ia|~8&{Ǻ~82z~~8yyA~8y~8*x}8_Pwu}8luvL}8u}8't@|8sx|8saR|8"r|8Cq4{8bp-{8ׁoR{8@n;{8mQz8s8CN%s81+Ms8MLr8oKr8ӐJr86I\r8Hr8G r8 G@r8'Fr8aBEr8K[Dr8rC r8#Br8͛As8@Q+s8,?Fs8>ds8=ms8OɵdI8)ĵTI8YBI8/I8I87 I8VH8`H8lX=H8>PH8VH8#ד`gH8~IH8a2*H8ʃ! H8|G8iqG86fG8b[vG8-PfbG8WD>G8Z9xG8-F89S"jF8qF8 'F8 ]F8{ 6F8dϴF8E8˟E8c߇*E8r_qE8y/HE8 Q E8*D8NuD8A2ƥD8P3|D8W3USD8 %4)D8a&V4hD84C8ZO4 C8m47C8~4OYC8v4T/C8HB4DC8+ 5B8y5B8$5B8a15W\B8A=51B8XJ5B8IV5A8\c5{A8o5A8m|5I]A8*}52A8Ċ5A85@8WX5T@8أ5|@85\@8X>51@8X5@8ݶ5?8.5?85}?85[Z?8'5+/?8|5?8*5>8(5s>8(5">8|5V>8{15c+>8$5=8r6=8f6=8P6w}=8 6̊8G2p8%U8D:8ݼW 8v8Y8GА8@8qٺʚ8r8 ,e8:VJ8;s/8;Ը8l8ޏ8rÏ85w8ζX8Uf9r8W8;8. 8 Ǵf8"_80Ύ85v83'8+|8WXa8ﱷE8熱z*888^N ؍8!毷8}8a85i8DN8^ܭt28s8R 8Dߌ8:qÌ8^ѫ8h8o8ږS8-78ĩ8[s8<8wƋ80 8ٶA8vMq8䦷NU8z88%8yv8=85ԤŊ8j 8J8)eo8m-tR8â|58Y}81w8ukމ8X8F86I%8wߟ j8uL8 /8<8|88Νd؈8d78 8B܀8_'c8stF8vS9)8l隷 8P8#gч8ܪ8|@8 ֘Sy8~k[8_>8 88+5868Udž8長 8~'8'2n8/P8;28GГ8d8jׅ8 8 8|8H]8ܐ>8pA 888,Ä8*8US8l鍷{g8}H8)8I 82<"8Cы^̓8~f88Nq8n'R8v148S8ꈷV8 ق8Һ88E~8݆`8utB8 $8,8;8gӄˁ8MkW8=8.ps83 V8ʂ88b[8 88)oÀ88W8iTk8 M8f7~Y08c}8 |8ڹ{8 zr8 z68u6y~8^x~8w'~85vC~8u~8 t}8LtҊ}8>shL}8ar }8q|8ܤpV|8oO|8n|8n{8#m+{8PBlN{8.`k {8}jz8iŋz8hJz8 gy z8fYy8 fby8(eFy8Ddy8acx8@}bx8a Fx8<` x8_w8^w8 ^Nw8y+]w8I\v8th[Bv8Zdv8Y;-v8(XMu8Wu8W;u8P*V>_u8LU/0u8;nTu8ÐS(t8Rt8Qt8Pet8PCt8?O$t8bN t8ZMs8Ls8UKs8rJOs8 JKs83*Its8HHؘs8eGs8F[s8E{s8Ds8Cs8Bɵs8A=s8` As8@Is8)? t8%5>)t8>=Kt8WF{8۶z8Cڶz8 ٶZxz8v]ض7z8ֶy8ߐնǴy8;Զoy8Ҷt&y8&ѶKx8϶Px8:+ζ0=x8b̶w8˶w8̇ɶCw8,Ƕv8BWƶv8ĶĶ.v8öu8`_bju8ћu8ýbt8ӻXj8Gui8zILi8yzh85Qh8'g8{iVg8SwBf8*t1Qf8jp(e8%l]@e8t#i³d8e$d8%bc8^b8[W[b8W$a8c1TSa8)Pa`8M _8vJN^8_GTD^8e]D ]8nAu\8Ԓ>\8;Gf[89?Z8v6Z83]Y8e1׹X8%.X8r,sW8!) V8']V8Z(%U8T"NU8v T8VQT8:S85D]S8 IdR8vtkR8Q8hQ|Q8rQQ8d)P8P8(e O8@ 'O8; N8eT BN8 sM8ZM8@EL8WoL8`K8H̕K89K8qJ82DJ8GJ8\lJ8t_J8oF[J8GH]J8YaJ8fJ8jJ8,kJ8 kJ8wiJ8qeJ8HTbJ8{z^J8c뵌ZJ8vw赊VJ8BaRJ8}MJ8t޵HJ8ڵxBJ8$׵;;J8Mӵ2J8rXϵ(J8E˵0J8ǵ+J8µJ8gI8蹵I87RI8I8૵I8ۋI8lsI8CZI8k?I8n㒵I$I8ɮI8jfH8 H8ul{H8pH8elH8wZ4KH8EfO9)H8l+DH8?8VG8kz-yG8D"G8Ƀ$vG8 PG8_*G8"*qG8ϴF8[ JF8T@F8hF8La]AF8`1F8ALvE8')E8bE8O|2xE8R̀3&OE8B3#&E8E!4D8R4D8*4GD8@4ǀD8U,4#WD8i4j-D8%4D8C4C8N 5C8l5C8#5l[C8 I0521C8<5C84I5B8ƯU5'B8.b5B8ΰn5']B85{52B8ރ5B8$5PA8lk5A8ó5ԇA8n5]A8DH5+2A8D5BA8o5Q@8/5U@8D5O@85:[@8!50@8s5@85?8B5?8lp5E?85W?8j5,?8>u5>?85>8s6_>8r@6~>8m6`S>8q 6'>8p 68庽*Ƒ8S8켷ꐑ8aBv8![8ⶻ@8O,&8B躷p 8耺8Ր88J'8/㸷D8{Sj8\O8x^48DS8#ݶA8qu"8 ȏ8饵׬8>8Eִjv8cn*[8{?8$86: 8β8fҎ8}8h8N.78$ưd8]KI8-8E8E%8󼮷$ۍ8T8<쭷⣍8σ78Pl8ŲP83J58᫷58x[8{8EŌ8`>8qթ8wlmq8gJU8E9818ǧ8^,8'Nj8ŋF8Q"8Ѹ$r8JO|U8夷88|8vH8Ҩw8(?Ŋ8vբ8kċ8 n8WQ8.48Ġ87[8񟷣݉8Ӈ8w8gd8JKi81L8>w/8| 889׈8Л8)fV8<(8=b8((E8q(8S0 8u阷8~Ї888H?'x8tԖZ8i<8uQ8K8 (8ņ81Q8哷ꉆ8yk88M8oq/86%8ʑ8^^ԅ8䵅8\8x8î$Z8Bt;8֎80k8|C߄8ܓ8`(88Q@d8拷|E8{&8!#88@<ʃ8҉~8$h8]o8ŔJQ8c+387‡8:Y8b؂8溂8 8K8aNa8-愷D8 ~v&88歃8E2΁8݂ݰ8u8 Sv8MY8<;8{Ԁ8kT8 83ƀ8a~a8}8|zn8{P8&{=38t8=(t8<7 u8;0u8:Xu89\u88u87u86[v885Wv864v8[|3gv8g2w8O1cw8/50fw8/w8-Ox80,x8ܸ+4x8*3Zy8t)~y8Q(z80'qz8&az8D%o/{8A#{8#{8"K|8(!C|8oD F}8ec}8ڈ}8~8b~8~8?8lQ8EG8D88l3"8S;8)kS8|j8>8O֗8 @8R#ˀ888j} 8bx 08)w 8=8p{ A85 ">8*38m#8f8v Z898Seɀ8508¯78j8]o8G_8RWS8$L8,I8AH8E8-^?8T /8P8t 08 u8,88#(8#XY8鶫-8\;8涟N8-8e䶷~8~8o-)~8H}8~޶d}8ݶ[ }8ܶ޴|8۶g|8qڶ |86Sٶ&{8!ضt{8>ֶoZ{86ն {80Զ(z8Ҷz8h3ѶyGz8϶y89ζ:y8u̶]y82˶ y8Rɶضx8ȶ_x8]}ƶx8Ķ$w83öhIw8v8ſBv8(!v8'u8,Vu8(Bt8~t8島&t8> s8abs8s8êr8@tAr8x'Oq8ޣÅq8<(q8h`tp8-kp8;fp8昶o8Ӗ=2o8 ͔n8ԒLn8吶m8[Ym8l822Wl8(Nk8mKk8{j8Bj8遶%i8JCi8v|h8xgEh8tCg8<qB>g8f[mf8iA*f8 f\e8hbe8^rd8rU[c8WB9c8ErTϔb8LQka8M=a8J`8pG_8_D<#_8 `Al^8Bs>]8;\88|K\86q[8r3MZ8x0DZ8\.Y8 +(Y8p)rfX8E'yW8l$/?W8QD"V8s*V8U8&U8sT8)r,T8S8=6S8b R8oZ_DR8Q8W TUQ8 ,P8 9gP8 O8M5O8W O8N8 H9N8aM8"^M8N@L8Pa L8}1L8UK8BBНK8đhK87OAK8h&K8K8r K8K89$SK8?K8>4K8~K8ب﵋K8,*:J8ۆ굑J8絟J8FJJ8zJ8޵J8^I۵J8׵J8KFԵJ8ȔеCJ8t̵lJ8Nȵ(J8ĵ]J8%J8_pJ8\EJ8ȋJ8lJ8VwXJ8BJ8CȠ,J8⛵$J8薵I8ܑI8I8퐇I8RI8 znI8SoPI8|d0I8YnI8NH8.vCH8SD8H8{,H8!7eH88AH8 H8f^FG8 紫G8ϴ˫G8MG8ļ/_G8d8G8bTG8]2F8XF8 *yF8 \rF8dV2JF8W?w3!F8,3E8S 4E8O4E8]4}E8yޘ4nTE8;k4+E8Q4sE84D8"T4D8 5'D8f58ZD8"520D806/5D87;5C8H5C8T5WC8Ga5\C8Km52C8Oz5C8B5pB8+5ѲB8ˏ5*B8-5r]B8X52B85B85A875A85"A8[ѻ5!\A81 51A8p5A85@85@8e5z@8Z5=Y@85-@8c5@8׹5I?85ګ?86d?86T?8 6l)?8: 6>8(h 6S>8668b08g8:8-;̑8Ż8}^Җ8+|8֏\a8v(F8+8Y8*8"ې8##88:8S<8N춷1o8T898"8`M8崷{8}Ȁ88筳8Elz8ݲ_8vC8 T(8 8=8հ֎8m8r"8@8 5h8̮L8qd08W88P+ލ8¬]8LZ8ߊ8o8k @S8_78Nr8婷p8}h8Ynj868A 8اr8oV8E+:8󜦷83S8*ʥ8`>ȋ8+88$?r8u|U8P883碷8}8!8:/Ŋ8@78֠?8:m@n8;Q8㙟54890)8ƞ8\ ݉8588؅8h8`LK8⛷.8xr8R8%׈8;8љʜ8f8[b8E8,('8h 80S8薷χ8}88ۧv8<;Y8є{;8Cf88O8#Æ8 8ML8Ti8tK8,8ΜO808ďYх8 Y˲8/펷68`u8V8G88b>8Ҍ8g>܄8u8k랄8&I8׻a8MQ2C8扷$8|C88Ƀ8?K8!և!8l o8Q838a278Ʌq8_aق8 8Ր8(8c8XQF8)8 8m 8PRс8P%8瀷8qy8\8J\o?8{~;"8G}8|8T|:ʀ8>{ì8qu8A>~u8Q=u8N8|)98#8K8=u868w؀87̀8R0Hŀ8j88㻀8~!8V9򶨥8̑887y80n8^춟\8E86er,8F綗8涃8嶽8ee84(8a!{8p $8H߶h~8ݶto~8'ܶ~8yl۶8}8 Hڶy}8!ٶ0}8D׶|8Nֶ|8dqնyf|8Զ'$|8ʶҶ`{8GѶ{8W϶P{8)Tζ{8̶%z8R˶?ez8cɶ8z8aAȶy8ƶVey8Ŷ y8oqöx8Nx8 w8E8w8t&w80v8碸[v8u8u8/f)u81t8&]at8s8Kas8_9s8;̤ r8tr8TEr8 q8ڛLq8}p8zp8 p8PxBo8s{q$o8n8k2n8촋m8͉U5m87臶l8;/l8`(k8O-)k8zj8H}'j8yi8u&i8[rh8Un h8.jg8f+g8:cwf8_e8\VLe8ЋXd8EUud8Qkc8YN4b8Kb8Gda8D`8A_8y>H_8;^8|8<]8p(6,]8bo3|\80D[8=2.([8ӫ+ Z81)bY8&IY8[$#X8!qX8ӪW8dW8+-V8 U8e}U8(T8KT8;AT8 ފS8 )S8K\ ΘR8 V!R8 ~Q8C{4Q8R0P8OP8 O8_.7~O8eO8RN8JN8OMM8XM8Q+M8RL8L8wXVL8*&L8WL8K8.!K8,{pK8i,K8K8ƩK8;t뵣K8>K8ߜK8cK8k6ᵯK8N޵K8 E۵K8صK8ԵCK8_ѵK8͵K8"%ʵK8YƵxK8pµ$mK8j`K8eH(SK8 DK83K8C!K86K8(J8cJ8YJ8䷕J86ĐJ8 J87hJ8e}MJ8,xW0J8mJ8KckI8fXII8֠MkI8BΔI8k7sI8h,QI8 *!.I8 I8 t H8H8洝H8ϴNyH8mSH8-H8{H8AcG8E4G8%G8kG8CG8}22G8Hm3F813RF8H4¢F8L4zF8)}4QF8[?4(F84E8@4yE8M4E8q4mE8; 5XE8f5.E8!5E8(.5D8:5D8F5ІD8lS5\D8m_5M2D8Xl5D8wx5{C8訂5C85uC8l,5]C8Cp5.3C8ĵ5rC85B8D5ݲB8G5B8ش5]B8$52B8q5B85A8s5A8_5ŅA85ZA8G5Z/A8qV5A85@85k@8oU5@8 V6V@8́6+@86?8u 6?8J 6?8t46|?8b6䌒8Z Dr8(W8;<8ԻH"8sm8)8מґ8|7[8й8h8=f8K8;218ʷ*8c,8(8דŐ8%, 8pĵ쎐8\s8X8m=8B%3"8Z8pU8WЏ888@~8tMb8e尷oG8M}+8+88Dَ8ܮ8Utq8 8Ik8S;O8Ҭ48rjO88[80ō8Ȫ28W_Q8jq8oU8$n98λX8R<8駷8Ȍ8`8!E8Ds8wۥzW8r:8s8&8578̣ȋ8bҫ88W?r8%oU8#88{R8蠷878Ċ8󫟷ڧ8NBԊ8؞m8 oP8k38ƛ8$28Ȝ܉8^88_8!oh8ͷ\K8M<.8䙷8 z8ֈ8٥8;X8Uї8fa8vlD8ܑ'8"' 8K8\Q·8R攷80{F8u8W8998͒8a8E߆8~8_8ಐ8Gf8"ۏnH8Co*8o 88+v΅8,篅8TY8錷r8}!T8M58(8&488;/8dӃۂ8Lki8?8:ك853f8(ˁ~I8cW,8>8$8_*Ձ88{~ߚ8}}8}`8i<|]C8zi{&8 z8yH8x̀8x,8Bws8lvt8uV8t88sM8 s8R3r8)Yq}8[~p?8o 8n~8}m~8p mF~8/l~8Qk}8Hsj]}8`iI}8#hY }8g|8fϊ|8fJ|8Y5e* |8Td{8otc{8bL{8Za {8`z8p_z8)_Rz81^z8Q]y8Au8NP@v8`?v8m>,v8Sy=Ev8<:bv8;#v8[:{v89Qv88v87$w8ԇ6Vw8~5%w8Os4w8^e3x8T2Ax8fA1x80+0#x8/y8-by8,±y8`+z8*Zz8)z8k({8VP''j{8A7&!{8"%$|8y$`|8F#|8"g>}8!͚}8r+ }8AR~8]!~8z[86\8/8*8y'8.4 N8vXs8=8W8Հ88 8X%8)<8/GR8 g8 }8E .8a 突8 S8 ҁ8a W8' 8R48wGj8bo܁8 Ё8"8^8}88Cy8ecg8VV8RRG8Y;8s 38 ,-8SlL*8Z%8I838T)8H8k8Kڀ8 0ɀ8# 8=趨8818Y䶕u8,~c8 I8ක'8f߶r8޶8*ܶG_8ߑ۶ 8Wڶ'~8\ ٶs~8;׶ +~8ګֶ}8Zhնנ}8qԶn]}8IҶ}8_Ѷ%|8(϶1|8dzζD|8̶{8T}˶{8ɶW{8rȶ{8%ƶЭz8/UŶyUz8öy8¶?y8 b=y8nx8ܼ%zx8Ax8%Mw8"4Lw82v8"~v8 v8Ԯu8FNu8t^t8aۅt8֥c!t8Ős8MAWs8r8ٜsr8'9$r8q8fHMq8hQzp8Eip8gEo8N|o8_fo8tfn8an8Bm8,m8L߃l8l8'Z~Rk8zEj85v~j8Hsi8oxi8kh8hgh8jdmg8z`sIg8)]Դf8Yf8Vee8,Rd8DOu;d8eKc8}HTb8>E7b8dBa8Y?%`8^<`8u9l_86^8*3 ^8F1pZ]8o.\8 +\8M)c[8L&UZ8b$(Z8o!MY8X8X nX89W8#3ZW8+V8SV8sU8-UU8 T8R [T8L ;S8k% vhS8R8NzR8wGR8 Q8 "Q8vP8F=WP8O8=)O84O8iN8yN8i}"N8r(M8lM8JM8g@M8IL8L8f<7L8xo"L8AL8QVyL8kapL8-uiL8 cL8Ji_L8ݵL[L8ڵ=WL8׵RL8ԵVNL8ѵIL8:wεBL8Y ˵;L8ǵ3L8õ*L8L 7 L8{'sL8%bL8K8ͯsK8{K8K8݊PK8ڞK8>@K8cwrK82ZK8YBK8?(K8٘ K8vJ8lhJ8aJ89UWJ8OL{J8At[J86;J8+J8t aI8aI8m I8qoI8OkI8@ϴFI8j!I8 &&H8xĉwH8$dlH8b5 H8YcH8}c8^8KwǍ8v58̨8cys8\W83;8s(8A8Vs8쥷ʌ8p8<8t82G'X8ݣ;81t8 /8y87ȋ8͡8ld82r82TU8'i888gT8ꞷ88Ċ888mDm8ڜP86q388睛884܉8~ʚ8`z8g8Mh8#4K8.8N8䗷8z~ֈ8<=8̥8B;~8Е6a8eC8A&8󏔷8$8e͇8]N8Ⓑё8|ws8 V8N7848Ȑ8]݆8LZ8{88䭎Nd8#BE8n֍m'8j83w8˅8R(n8 펅8Qep8抷Q8 |p38n8즉8Sv8&=v8Aw86nw85Bx844;x83sx8e2x81x800y8/Bvy8'.y8q- z8W,83-8xu8C~8&F8HuR8R8.Ӏ8EY8C48M߶8S޶e8ݶKA8۶8ڶ8MEٶ8ضkW8ֶ8wն~8+Զ~8[Ҷ@~8T~ѶQ}8nж}8ުζm}84Ͷ#}8˶|8j5ʶ7|8SȶG5|8'Ƕ{8Ŷn{8&Ķ1{8Gm@j8ii8ee/i89b͡h8٘^h8g[{g8wWf8@SGf8Pڧe8{*Me8I[\d8FZc8oCc8nT@Tb8?J=7a89Q:`8i7@`8ѐ4_81^8 /3^8b,]8)\8;'?\8R$[8M"2[8 mZ8EtY8IHY8 /X8=2X8W8_)W8 V8v)V84 ܪU8T <.U8z }T8o#:T8a$S8eF/MS8R8xfR8vQ8Q8L(0Q8TP8DvP8 P8O8`iO8oO8JN8@>N88>N8N81}M8L8޹L8vǾL8(԰L8^ޭL8}L8W'L8>mL8n ZL8֗GEL8:)/L81fL8L8%&K8GMaK8.uK8Mj1K8`{K8 V^K8vpK@K8@!K8N5K8*qJ8J8J8' }J8H[J8G洮7J8<ϴJ8E9I8(VI8퉴)I8+eI8C6YI8{'3I8˰ I8p!5H8ы1H86x\3H823oH8<4 HH8G4H8w4G894G84MG8R4j}G8m]4]TG814-+G8z15G8{5]F85îF8 ,5 F8L{85:[F8D5O1F8\>Q5JF8]55E8j5E8v5E8{5d^E853E8j5 E845D8u5cD8E5D8G5_D8A544D85\ D8й5xC8 5C8d5C85w]C85b2C8K59C85B8!5̰B8K<5B8v54ZB85.B855qB8:6A86A89 6A8F 6zUA8r6)A8L6N@86@8 6998Z8878Z$Β8 γ8U 8^J~8c8H8*-8P8%鷷$83ݑ8C‘8sE8JA8/㵷6q8z{V8;888D8`ܳ8t?ΐ8 88u8=gY8<8Ôd 8y+8"¤8Xˌ8P8ᅣ8gUu8岢X8]I;8ߡ;8Ovx8 85ȋ898П8|f8r8NU8cc88)q8D8V8#휷Ċ888em8FP8#ݚ38qs8 8🙷܉8689̘8Dbn88Th8-K8#.885O8䕷5ֈ8z߸8b|8 ~89`8ΓB8c_%8A8猒8z!̇8=8rJN8ސRr8!s0%8 Ӌ8gU8Ʌ8בt8'8Vn8QhP8爷#28k}8v8ׄ8 @8ֆ8lm}8a_8zB82n$8ʄ8aR8D˃88(78s8XV8988 88Pł88QË8/~n8^}Q8d|48ϻ{8z8wz݁8Dy8_qx8wA8avh8unK8?u-8VIt*8rsd8ěr{Ԁ80qr8pG8Opy8:o[8.`n<8ۅm<8l8k8jȂ8j]D8!;i8)^h+~8gc~8NfI~8ew ~8~dl}8K d}}8*cM}8Lb}8na@|8`|8 _S|8^3|84]{8]~{87\y`{8Y[.%{8{Zz8VYz8Xxz8|WAz8NW z8V)Vy8LUy8oToy8MS!?y8R,y8 Q%x8jPx8 Pݎx8COgx8fNBx8TMt x8wLcx8Kw8w8-X=w8cM8?8118HS#88<=8/l8΃8+848f݁89Ձ8F.ˁ828Fgn8Q붭8'8]8Yu8h~b8ʲ䶦O8 fn=8#⶜*8l8߶8}y޶8>ݶ+8۶8pڶ|8zٶyY84ض682ֶ8=ն84SԶ786ӶS8Ѷo8Kж~8lζ~8GvͶx9~8.˶}8ʶw}8ȶQ}8qxǶ5|8%Ŷ|8_ĶS|8z¶{8.[{8ӆA{88ӽWz8Nz8Iz8sy8Xy8yx8Ȍx8%x8w8OfWw8=|v8v87ۥz%v8Xu8kWu83+t8t8M͚$t8̣s8Bs8fr8aQ$`r8gCnq8 >tq8NAp8Kp8[p8 oKo8 lo8@n8jn8}m8y m8Mvl8rZl8nk8AEk}j8(g wj8Oci8_M`/_i8\5h8!Y9h8ɛUg8>"Rg8GNgf8NYK)e8S H e8ADud8AAc8>Pc8;mb858a8-5a8"2``80_8E-__8"*_^8e']8Po%]8z"Xy\8M} E[8F[8-Z8y!Z8?RY8O_ Y8X8W8}W8H bV8C ~V8* V8" U8Q9U84+T8$k!T8QS8µM8ξiM8AM8땷M8ͳyM8n鯵kM8K髵\M8UΧLM89;M8J)M8㚵M8xeM8=БL8%L8dL8JϨL8P}L8[svL8Cit[L8 _?L8T#L84JL8?K84K8*K86K8l7jK8 HK8&K8]hK8δJ8J8e J8sJ8eNJ86m)J8\J8 I8B'8I8u1I8U3xiI8 3(BI8S4I8N E4H8Du4H8Fђ4uH8g4yH8\4VQH84(H8k$4G8N5bG85G85G8d&+5$ZG8y75s0G8"C5G8/P5F8\5DzF8h5F8bu5^F85F4F8!5 F8)]5E8+5E8ؙ5E85_E8Z5E5E835 E8 5D85)5۴D8p5D85^D853D8N5D895C85C8c75aC85&\C850C8c)5C8{5B8g6B8ۑ6:B8p6WB8p 65,B86B8>6A8j6gA8C6}A86u8t8К Z83r?8F̺$8d 8A8BԒ8.8uǸ瞒8_85i8KN8l)a38j88Uj 8yi8h8g8fUG8f8%,e0~8Od~8qcL~8b^~8a}8`}8_S}8_}8@^|8c]Ǜ|8\r_|8ר[#|8Z{8YL{8Yt{85Xf<{8sXW{8{Vz8Uz8[Tez88S3z8 Sz8.Ry8RQy8AvPN{y8ٙOQy86N*y8CMKy8MPx8%Lx8FKx8gJ4x8VIDox8H Yx8GEx8jF5x8F{'x8Ex86D5x8OCx8fBFx8|Ax8@3x8u?x8>0*x8=!9x8p8Wo8'Co8in8b{Bn8;xkm8tG?m8p@l8/mI8l8iòk88e+k8=bנj8^j8 [i8ށWh8?T$Xh8^Pٽg8R$M8 g8I6f8Fe8EC3e8`@d8=c89}2c8i7ąb84a8V@1,a8v.`8+~_8V)e1_8.q&5^80#2]8_!jN]8\8\8,[8Z8jZ88Y8cXY8YqX8ha %RX8{ W8; RW86"V8B}[V8U8(WlU8T8\T8C'gT8S8brBS8ER8G41R8 ?1R8aQ8Q8@m9Q8{P8Z[P8ǔ]P8P8`O8㵤O8p~O8 ߵUO8%ܵ2O8ڵ>O8صN8^<ֵN80ӵN81EѵN8_ε6N8˵(N8ȵN8ƵN8µwyN8.VmN8X aN8>丵YTN8R!GN8^U9N8٭*N8󩵜N8?򥵆 N8֡M8.M8SM8씵UM8AoŭM81ۋEM8z1M8rjM8z@{\RM8tqQ9M8geM8jp]M8:S L8HL8o>L8>3L8.)1sL8ifSL8. 4L8hL8K8"'K8(δK8K8ʠfK8㉴BK8eK8rZ7J8J8"J8F ,-J8O1aJ8DN3;;J8=3MJ84I8B4I8r4ڝI8s{4uI8B4MI84K%I8&4H8~4H8r5H8m5H85XH82*5E/H8~65H8B5G8&O5VG8V[5wG8_g5{^G8Gt5j4G8 X5D G85F8=nj5F85=F8=5`F8{5;6F8F5 F8s5E8?51E8v5dE8Ⱦ5`E855E8W5 E8z5D8P5wD8%85WD8&5"^D8&52D8P"5D8{r5MC8{5C8 6C8R46ZC8=^6.C8 6C8Q6B8{6B8 6MB856TB8:b6(B8Ύ68˓8Bo8ۺ8*8ָ8`o"8Mڒ8lj888RѶ8in8S8x8828˴y8_cZ84̑8͓8+Օ8IJz89\[_8L D8\(8l$k 8r 8sT֐8p쯷L8cݟ8Fn8'h8L|M8㭷18{v8f8\ߏ8BÏ8uګ'8r8 p8.&U88n98Щ8ug88)ʎ8>-;8lħ@8[?v86Z8>8 !8i8?N8 夷7͍8{߰8~z8*x8?[8h֢?8ly"88680̌8(Ǡد8]8,Yv8Y80!<889N8䝷:8={]ɋ8y8A8>r8J՛U8k88>88%/(8ř6Ŋ8[K84S8u[n8cQ8ɴ]48JX8K8v2݉8 8<뢉878[͔uh8b-K8 -8=u8Y"8WՈ8:L8ᑷW8u|8Z ^8힐A8l3C#8Ǐ[8C\f8\ɇ8L8[/8 o8%BP8֌28kc8$8;׆8(8Ͻ@8R|8牷^8 }w@8j?"8𧈷8=8ӇDž8iݩ8ዅ8m8,P8bÅX28KZ8X8nل88]8NF8悷c8v~F8Q)8< 84F88ހ҃85vϵ838WL(|82|~__8}B8Y|%8 | 89{M8whz}ς8y8xȕ8wx8 w[8Lv>8syu!8t8sC8rɁ8&rV8Pq81zp q8Co0S8n-58m8nm8Blڀ8Rik8j|8i~8h_8%hA8$g"8If8me8d8ѵcrK8b/ 8+a~8 a~8 D`S~8xg_K~8^}8M]ۚ}8\C^}87[#"}8[|8lx8;=x8Hz8-/{8.mQ{8 -{8+{8*$|87)]p|8(|8'}8>&a}8% }8w$i ~8k#`~8c"~8z`!8a g8lg`8p 8}}58`8)8ܴ8T݀886(+8E2P8N5t8M㖁8Ke8{ف8j8)8c38^N8tg8` ~8a F8x d8 "8 5̂8%ۂ8f3888_828N8m8=8ق8ۨς8jjł898~8b8"!8yl8U󶳇89l8v8 m8Md8Z8N8G5B858涆%8Rs8&8m8cnہ89&Ł8޶M8ݶ–8fܶ5|8w*۶_8lٶA8ض"8j׶8#ֶ[8ԶM8Ӷ83Ҷ}8_ж[87~϶/88|ζ86̶8A˶8cɶTL8uLȶ~8ƶ<~8@Ŷ[~8ö~8 ¶}8|V}8h꾶|8A||8:{?|8й{8|{842{8Vz8l2Rz8wy8vry8kzy8 W[x8;;Qx8Pw8-fw8+Ρw8v8HxJv8Nu8e'9tu8Eu8锶t8;Ӓ(t8is8&Bs8+r88Tr8qXq8]ĆSaq8Մ6p8ꂶip8do89~mo8uzn8ivln8sm8Wogm8 kl8/h"^l8Tfdk8y`Lk82]j8+Y/j8wVĜi8Ri82Omh8Kg8xH2g80Ecf8Ale8a>RDe8;d88c85Gc8"2b8X/a8&-XKa8j*`8ؼ'_8%q\_82"^8  ^8]8,(\8{\\8Ƀ5[8TH>[83Z8)-Z8 xY8 &Y8 X8A< 'X8yW8K0W8,.@V8`=BV8-5U8WA\U8[T8gAT8T8Ϳ󵭽S8l\cS8} S8L}=R88hR8"鵄R8絎Q8 Q84NDQ8-Q87޵P83ܵdP8ڵA9P8׵P8յO8YӵO8gе O8nεO8˵~O8ɵxO8NƵ(gO8cõVO8ZGO868O8p*O8 O8- O8уN8Ы:N8?N8SN8[iN8fN8N81p#N8F oN8ZN8DN8kN-N8!y$N8]}oM8eSM8[$M8Q:M8PGM8X/=wM82YM8.(5PE85/`E8=55E8 5 E8>n5D85CD8h 5D86\D8I61D86D83* 6!C8^T6C8~6C8ǩ6]WC86+C86C8,6PB80Y!6!<8 8Wէ8l8̎8818ȥhx8_>\8x@8L#8$q8ͺ8}Q΍8(袷,8~8g%y8\8B?8#٠U#8o8=8Ȝ4͌8P3q8ɞ8g`v8Z8~D=8 $m 88Q8盷ɋ8;~8'8DCs8AeV8;ؙ98n88m81Ŋ8Ǘ먊8!^8=n8CQ86 488K8ᔷ݉8wb8 8⡓؅8(7h8O̒ K8]a-8S,8.8Ո8V8CI8ݏ{8Xr]8@8<%"8/(8č8Xȇ8쌷멇8sNj8m8kO89?:18ӊ8h8ֆ8g8-(68|8S^8臷?8~!88٪84A0ȅ8ׅp8sn8Vo8^yQ8338ʃ8Jb=8܄8ξ8N)8'8Yg8񀷸J8-8!8 r:8~~׃8}8}851|d8`{d8ǏzH8yP+8Yx8x8IwԂ8,wv$8cu98?t:~8s'a8)sD8 Ur&8q\ 8p8oZ΁8Tn8{'nԒ8,Pmt8ixlV8;k88j^8i8kip݀8;h;8ag8bfR8ɬeb8dC8c$8c8b@bS8da8G`Q8_)8^~83]~8]\~8>\a ~8%c[v}8Z}8 YYn}8XN4}8TW%|8 W|8>Vo|8cU0U|8rT |8_S${8RR{8$Q{8Q/Y{8h@Pm+{8dOcz8N8z8Mz8}Lz8Kbz8K,Az88J!z8lYIz8 zHy8șGy8Fxy8cE y8Dy8DԎy8(Cy8ABS~y8&YAzy8o@zy8Y?|y8>}y8=y8߶ 8YݶL8Nܶف8t۶85ڶ8ض膁8׶h8qֶ J8)ն{*8ӶB 8Ҷ[87Ѷǀ8϶89ζ8(ͶG_8˶-;8)@ʶ>8ȶ8JǶ8@Ŷ}B8>Ķ~8ޯ¶<~8gD~8T}8U佶ܐ}88;@4}8|8ʸu|8|82{8WhN{8Eq[z8kz8?z8y~y8 pRy8Zx8@ǃx8"x8*w8ޞLw8Ṝv8ꕚyv8t8 v8W6u8V?2u8+#t8ePt8s8 Igs8;r8;wr8"q834q8 Hq8_ p8|-p81yo8~uuo8|qEn8 n n8tij͆m8fom8'c#zl8_k8F[kdk8~sXPj8TsCj8{QԮi8NXi8J}h8*\Gg8D?g8@gf8p=e8.:Se87d84d8r1U]c8.cb8 ,Fb8L)ika8h&y`8#'`8g!ɉ_8Ys^8lhV^8~]8#-]8S\8.\8\;[8y [8 {Z8B PY8CyY8AX8.~X8 yOX8W8CW8vV8r4V8#U8BUl[U8lT8y𵰗T840R=T8S8KS8DS8bR8R8iR8Eߵ&R84ݵVQ8۵Q8ٵBxQ83׵FQ8(RյQ8tӵFP8еP8OεP8i˵P8k;ɵZsP8FƵ%[P8yõDP80P8ihP8RٺJ P8O8\O8O8q@O8өcO8eBO8EœO8VρO8NToO8T-G\O8󑵌HO8 ?4O8`9O8"Z O8=%N8vpN8LzmHN8csN8 ZɐN8 PXvN8F+[N8;R?N81"N8B'aN8rM8M8&(M8M8hM8̴GM8U%M8ꟴVM80[ML8aLeL8j7L8} tL8FOL83*L860L8CB3K83K8n4K8(>4DkK8=n4-DK8q4K84*J8n4GJ8141J8ab4|J85^TJ8Q5+J8(5J8^(5I8z45I8@54I8<&M5]I8sY54I8Pe5\ I8r5~H8|~5H85o5zH895TbH8<ב5 8H8j5 H8G5GG8p5̸G858G8J5cG8!=58G8~5G85:F85SF8K5\F8Ӓ5UbF8)5>7F8$5 F8o5E85E85aE8V5_E8R63E8z6BE8k6D8j 6OD8 6ɅD865ZD8J6.D8t6D8ӟ6?C8=6C8 6C8'#$68hw8(]8+tB8nĹ'8] 858Gmד8&8hȡ8W놓8fl8ވ%Q8I!568=8 R@8e괷;8)ʒ88A8~Kx8㲷]8{sB83'8 83D8Fܰ^Ց8Qt 8Y 8_S8X8`ӈ8hՆ8G88)|8޿^8 VH@8e셷{"8傅88qɅ8rG8ރ8u:q8H S8Ӥ68<8:ԁ8 l߄8„8ۛʥ8387l8~O8}28'}18eW|8 {܃8za8yƣ8y+8Cxj8;rwM8lv%18=ui8t8(tڂ8Usʽ8r8ɭq85pif86pI8.o+8 Yn8Ƃms8lҁ8kŴ8pjȖ8%jx8_MisZ8th<8ݛg8f8e8Se8V5d8([cQ8ڀbe8\aF8`'8_: 83_"8e;^8`][8\x8ܪ[J~8Z~8;YWk~8Y0~8?X}8ReW}8V[}8+UN}8T}8 Sx|8 Sw|8$FR{|8|kQJ|8P|8O{8NO{8M{8g#Mm{8?GLWF{8jK!{8iJVz8IDz89Hz8GQz8Gz80Fjwz8NEcz8kDdSz8CEz8B:z8A2z8@-z8?+z8U>-z8*>1z8?!=9z80;Qz8I:8cz8S9wz88`7z8Cd6ez8f5z8e4.{8c3@;{8[^2g{8W1d{8vO0M{8E/q|8L:.9|8e--u|8I,.|8W+0|8*;}8/(ۂ}8'B}8a&~8u% e~8h$~8#c8"U8!8 8@)'8AP8Rz8^8̀888C8 j8!k8x78Lց8Faq8vu/888_WW8t8D88 ;ł8 ܂8w 82 8h [8#*888D8M8d&S8>:V8QW8lV8R8M8'G8b@8%88px08'8])8@gH8 8"8ňO8M8Xm86߂8o=Ղ8ʂ88:ư8N,8*8I 8En8߶\Z8e޶E85ݶK.8!۶8Kڶ#8Pٶ8ضā8ֶ58ն8<Զ@j8ҶJ8pѶY*8gHж7 8ζM8$ͶĀ83)̶P8Xʶ<}8SMɶGX8Ƕh28Xƶq 8 Ķ8Köt8^" 8)~8_Fq~8V~8F}8]}8׷|8s|8C:|8/k{8t{8&{8Ǥz8Dz8PDy8Ywy8yGy8b5x8HAx8+w8fpw8` w8ԗv8-v8u8Pu8Ԍt8Dlt8]ks8Ms8X s8`r81r8;q8:"q8{p8$"x'p8bft%o8pi'o8mmn8\i"n8}e=m8bm8^l8(Zhl8vWtk8Sj8JPPj8Mi8/I"i8qFvh8".Cg8? Jg89S`8_88m"_8`Z^8]8iOm]8 \8WX\8 [8 M[8 Z8(LZ8xY8z3SY8I8X8mcX8GJW8Z}W8h W8r1V8M~5V8oU8NmrU8tGU8ôT8shnT8?~T8"S8ߵS8\ݵFS8$۵S8AٵR85u׵ӍR8CյWR8ӵ%R8ùеQ8]εQQ8e˵Q89pɵsQ8Ƶ:cQ8@2ĵEQ8q*Q8Q8 P8P8{EP8=pP8宵-P8ZsHP8R槵P8>pP8x}*^P8O7KP8խ7P89$P8zP8<\O8燵,O8"|OO8}ŹO8UtO8pkO8}arO8nLXXO8N>O8 D#O8:O8`S0[N8&N8 N8N8a%uN8BUN8ᴰ5N8n˴ N8M8UM8?GM8dLM8qf7hM8y DM8 M8B67L8m_0'L8&>3L8dԼ3ӊL8O} 4dL8<43>L8"2l4jL84RK8̥4K8DĽ4ZK84zyK84kQK8[ 5%)K8*5K8P5J8~'5J835 J8?5\J8.L53J8huX5 J8d5sI8q5I8j}5֌I85bI8L58I8E5I8y5cH85H85H81#5eH84_5y:H8᜶5H88ܼ5G85IG8f_5jG8=5ydG8i5|9G8.5kG8v5QF85$F8 5F8U5aF85]6F86 F8"6E8F6,E8Lo 6E8 6)]E8661E86E86VD8`?6D85j6D8t 63WD8 #6m+D8&68TΔ8T;8ӹ䘔8l)~8=nc8؝H8m6-8η8g28Uݓ8r“808bɵ8aq8#V8x;8* 8ó{8O[\8/ϒ8 8#ט8}8+T]b8D찷G8T+8_z8h&8mLّ8i䮷b8a|8I8/l8DP8۬58s8 8D8:Ɛ8Ҫ_8Kj8t8qkX80<8dȨ!8_;8(h8v͏8%8򼦷8Ty8;륷]8FA8D%8<| 8"GL8ޣю8tʴ8 y8_|89_8ϡAC8sf&8A 88[*э8w8W՗8*-{8ńw^8]A8 %8HP87ߜ8uΌ8s 8>89ux8MК[8f>8 "8:8*j8 ˋ8Wʮ8 쑋8ou81X8 T;8>Gp8\ݕ~8ms8f NJ8I8 5|8ʓcp8N`BS868*8p 8=މ8J8ߐj8t셉8q ah82J82-8ǎk8\8ӈ8488H,z8B0\8j׋3>8l1 8'8r8B*Ƈ8.87T8Z鈷k8~M8/88E?8#Ն ֆ8&kL8L8|8 . _8ĄA8[$8򃷍818 ˅8Y8O8|灷{t80vW8:8Ӯ8F8m'8i~yDŽ8t~Ъ8pM}58`}|q81{!U8z88x z8;y8kx8wƃ8v8"uV8.%up8RtT8`sC78wrs8q8Yq8+2pvÂ8]oO8n8umk8lN8l{081k8;Zj8iց8yh踁8g8hfq|8"f^8,Je?83qd)!8c8b8$aOŀ8{ a81` 8W_ti8}^J8],8\&8[8[8;Zch8aYN-8ۇX~8W~8*V~8QUG~8n U#~8FT}8lSo}8ʒRFp}8׸Q\=}8P }8kP|8)OR|8/ON|87tMU|8ߘLF,|8K|8J{8J{8&Iћ{8aHHB}{8siGa{8FaG{8ED0{87D{8ZC {8NCz8Bz8[4Az8YL@Rz8b? z8w>z8=z8q}8f*|~}8)}8x( ~8[x'K~8k&ǔ~8`%m~8U$+8sK#\y8!D"8?! 8> 38g@V\8HEτ8L!8VՀ8b8Oq!$8K8saq8]㖁8|8߁8 y8?"8C8.+b8) 888Eĸ8iQ5ӂ8i[ 8jd \8m 8u )-8V ?8\P8G|^8j8 s8Bz8l~8588$o}8YDy8Mt8n8LYg8`8X8IQ8СH8@8a[88/88&8qP8/)8v8gE88|8($lՂ85ł8aϴ8-3ඐ8޶80ݶy8OܶWc8g۶CK8ٶ18'{ض86׶8նHށ8Զ8J]ӶW8ҶC8жgc8e϶B8i ζ#!8"̶8D˶ۀ8Vɶ82hȶ8ƶl8sŶF8ö<8h¶88E@8~8i 5~8wb3~8}8x}8F2 }8e̶|8LT|8K{8ȭ {8֫){8{ܩ@z8IڧF^z8ѥy8ģy84*y8x8Zx8-sw8[w8Ew82v8P#Cv8+u8eu8i Ut8 t8% t8s8$6s8k6r8K3+r8~q8C{4q8Awp8s9p8oo8$&l8o8h0n8Dd2n8)GaVm8 ]w$m8*ZOl8V l8/S~k8OO(j8W[L6Yj8]Ii88E*i8qBh8=?g8"a8la8`8T_8(zY_8-^8qm;^8S,G]8']8 \8 \8Gh[8d[8Z8H'Z89Y8% T9Y8X8)TX8W8byW8QﵥW8V,UV8굧LV8赛U8ӚU8&?DHU8ുT8 ޵UT8^ܵfT8[ڵu"T8Q׵S8ȠյFS8ZӵjS88 ѵZ4S8ݲεS8L̵R8,ɵR8WQǵ~R8ٹĵYR8µi7R8OR8{YQ8ҏQ88uQ8rNQ8?KQ89Q8EjQ8VQ8w~AQ8\ƞ1-Q8Q8oQ8P8P8(݊P8cP8@řP8m{P8rkP8,eiSP8 `q;P8VZ"P8FLP8<C O86 9O8/O89$O8A}O8_O8[wAO8~"O8^RO8ʴN8 N8 N8m~N8d\N8~78N8& \N8/M8RR8M8m.ȧM8k:3M8dO3/]M8 4d7M8 ;4<M8Kj4L8ڌ4L8@4L84uL8{4ML8m4 &L8tN5K81c5K8B58K8&5K8 25[K8?52K8'=K5q K8|W5J8c5J8 p5J8U]|5HcJ8Y5h9J85lJ885ZI850I85I8Q5fI8p5E8 6ZE8W4 6.E8V_#6E8&68D8U)6?8J$8㹷 8:|i8Ԕ8v幔8F8޷N8'wi8N8738@8ٵ8q8 ȓ8D8:8ҳw8-k[8j@8%83z 8̱G8/dԒ8LԸ8e8{,F8įf8\K8B088$~8p ޑ8[T‘8>쬷$88%p8T8zK983㪷8z8L8ʐ8A8-٨R8pw8[8q@86.$8 ΦM8Bef8vkЏ8p8*h8S|8X6`8 D8v'8O 8G8JҎ8ᡷ8\x#8}80a8e|8񜷉_80B8&8|M 8"L8⚷ό8py8O8y8R=\8Ә@8sj6#8m8r8-̋8CĖ8Z8Av8]Y8 r<8&8I8ޓ8t~Ȋ8I k8ҟK8E5q8ʑS8_68E88 xމ88Hw8ݎ߅84r9h8J8{,808Č,8IYQӈ8틷i8z8+y8᫊[8@=8Չ8vj88Ň8)8Z͉8Tk8ꆷN8vC08||88B׆8lل8p8~8˝(a84C8̂&8tcw 8e8_υ83*n88Yx8^\8D[?85C~"85s}&81|8"{%̈́8{82z?8tbyw8x`[8Kw>8\vz"82v8Mu8 |t̓8ss8rѓ8rw82qRZ8^p{=8o 8Ͷn8^m]8 mɂ8a8l8bkI8jp8iS8hE58 h]81gZ8]Zf=ہ8e 8dƞ8ccm8bb8f!bC8Ha %8o`8ז_8Ľ^ɀ8]A8x ]8D2\n8Y[P8Z28Y8WX8)W8 Wz8AVA8hUU 8T~8NSd~8Re~8R1~8o*Q~}8PP}8wOP}8Nvm}8M9@}8TL}8q L|82K|80VJ|8yI6y|8HW|8ݾG$8|8KF |8FV|8 E"{8?D{8\C{8xBd{8A{8@J{8?{8>ي{8i=!{8#={{8-<ێ{8(;Z{8\7:{8LD9{8RO8A{8hX7{8_6t{8e5P|8h4%|8j3G|8j2k|8fh1 |8d0U|8p_/|8X.F}8P-S}8G,}8=+:}82*~8c')oA~8(<~8'S~8& 8$HU8#8"8(!8 7A8g8884݀85 8*8P86"v82Λ8UD`8oV8h8z(8qI8Wi8|88&F81e܂8 >8} 8] %8 :8 N8 `8$,q81w8>8N8)`,8u8 8ŧ8=k8ʟ8f ֛8,R8pƐ8J89r8{<|8t8Hl8d8kﶷ\8 S8PJ8&@8-B58h綺)8-q8'?85o8ⶅ8$8v߶ς8'޶8~ܶا8۶86Dڶy8 ض`8Ͳ׶yF8jֶ+8."ն8Ӷq8ۊҶӁ8:ѶҴ8T϶S8ζt8e3ͶS8˶18lʶ8ɶ8Ƕ8ƀ8ƶ8Ķy8öJR8.)8.8o8ּiS85~8]~8ܷC~8[#}8a}8󗲶&}8|Ű_|8%ꮶLc|8d|8F{8h$!8{8V(z8O&6mz8z8cy849y8x8皶ix8֘Vx8Ɩw8|*w8˭v8DPv8)Hu8 pu8t8t8t8„s8Ղg(s8N쀶'r8 ~6r8GzQq8v@q8Brpp8oDp8fsko8gCo8[1dn8`jh8;g8k8s\g8`a5f8od2B f8u/́e8,d8)Ed8&Uc8B$ c8!,tb8U`a8lFa8"`8u!`85_8_8,l|^80]8 p]8 6\89m\8[8t[8gkZ89E]Z8Z8ٳIY8v ,Y81W)X8ATSX8lHW8UW8絚'W8 J0V88'uV8 9G"V8ݵ\U8\X۵>U8ص@U8ֵT8x3ԵT8sѵ~T8lϵET8A͵T8ʵS8ȵS8@xŵ S8µvUS8).S8f S8R8R8x,R8 mR8f0vR8:#]R8ǧ ER8KT-R8nȠR8i$R8gQ8>Q8æ6Q8YQ89Q8T|Q8t fQ8YyNQ8opr7Q8p]gfQ8S"^Q8TP86KP8ňAP8f7P8-P8 #fP8ezJP8',P8xP8SO8ߴO8ɴO8γO8띴oO8ڇ8NO8=c ,O8w6 O8h QN8X"N8!9mN8CyN863TN83/N8 49 N8|94`M8Ih48M81ދ4M84pM8AY4IM8o74w"M8)4L875L8 5L85L8n%5ZL815r1L8>5L8FQJ5K8TV5GK8ab5K8l o5ucK8"U{59K8A҃5K8q50J8(5/J8W5J85gJ8,5=J857J8(5I8a5+I85I8:5hI8g5>I8>W5/I85CH8l5IH8n5}8z8b^8@ZA8fז$8m828}'΋80P8Ɣl8\w8򓷝Z8ӈ=8 8R8I8pߑmɊ8t@8" 8]q8|4uT8ɏ78z^8a+84މ88p8\Fą8ی h8oKJ8W},88-8^Š҈8W8뉷*8΀By8Z[8ݪr=8 @8TՇ8j8PŇ8-8+m8l8XO8N|18Ą8b8%ن8Iɻ8$8QwZ8Gd8 BG8=P*8AՀl 8l8Ӆ8O918*i~8}~8 |a8 {E8({(8XzD 8y8kxӄ8w48gwܚ8Fv~8uu+b8UtE8s`)8 s 8/r`8\qӃ8p#8og8n}8n`8;mC8fgl&8kf 8j8:i΂8i#8}|8VF(|8wEi|8D|8C\|8~B7t|8BAb|8 AS|8'@G|8??>|8[W>t8|8Pm=-5|8<4|8Y;7|8x:L=|892F|88FR|87a|86*t|85щ|8[4|8<3|8R2|81}80g&}8/EO}8%.4{}8]-C}8E,"}8+~8*OH~8 )g~8˽(~8y'~8&?8%]8,$I8#8"*8ԉ!mO8ۇ jt8C8 R886 8Aq08"U8·z8_8yÁ88 8+8L8)l8:8K8ZLƂ8i89vc8D 8 s-8? C8 X8 l8}88a8%8᱃8F8R8X3W8VNƒ8kNƒ88Y8XF8]8a8W88u8=t88v8o^8춟z8Y3q8f8Cc\8nP8N D8#68ⶁ(8l%8ඥ8H޶8tݶ8v%ܶvς8"ڶ8ٶF8@ض8ֶo8նT8r`Զ88Ӷ8ѶY8rж߁8϶8Ͷ8h̶8y˶^8ɶf;894ȶ8ƶa8;LŶ̀8ö8M¶;8>W88.8ӥB8 48 m-Z8Ÿ8fU~8_H~8}8رJ}8J +}81|8Qg|8(j.|8z{8U={8sz8 sz8ᄠF z8~y8t?y8Ej6x8_ox8Tx8iLsw8CF/w8|B'v8A6Uv89Du8I)uu8Su8`Gt8pwt8Ms8m-s8q}r8oyi8J8>4i8;h8]7h84:gg81 f8.0f8,e8E)d8}&@ad8#c8N!1c8s&b8b8iZ:wa8g`8vZ`8_8G_8 ^8V =^8v3 ]8<q=]8t\8X%E\8?%[8!W[8CZ8XrZ8 AZ8!GgY8*],Y8'뵨X8=HbX8k嵧X8#W8ߵOW8[ݵV8ڵzV8F9ص&bV8յxV80ӵTU8įеU8-εgXU8D˵\U8ɵT8ƵT8õVT8>UT8*T8޻T8ḵ,S8"S8\S8D᯵nyS8/[S8Hy?S88$$S8 S85R8ǛNR8ꗵvR8"R8GBR8xK{R8=UdR8MR8n5R8wR8SnR8^_e:Q8B\XQ8R Q8 I:Q8@Q8N6kQ88w,|PQ8~"n4Q8eQ88-P8P8jP8ݴP84Vȴ P8 Ѳ `P8?s?P8$6XP8qGbO85iO8 O8^dO8:pO8>LO8G33'O8G3O8q 4]N8 84ǷN8,f4N8P4kN84&EN8:4QN848M84M85&M8 5EM8!50XM8%5/M815XM8UA=5L8jI5L8sU5L8,a5kcL88n5 :L8DRz5L8SM5K8Xt5K851K8 ʕ5/iK8f5 ?K8(5K8[5J8q5J8Ǵ5J85jJ895U@J8'v5J8Գ5I8+5I835I8/v5iI8۹5>I85I83E5H85BH85H86fH8F56>;H8[[ 6H8 6NG86ŸG86-G86aG8F!65G8FJ6- G8s6sF8p"6F8%6F8/(6[F8,64/F8YH/68ҕ8L4H8̸8eˁ8 g8:L85/r18Ƕ8>`88/Ɣ8)8´&8eZ.u81Z8&?8Y#$8 8S8챷ғ8M8}k888Le8䯷J8|i/8"8 8Esݒ8ݭ’8u8 @8礬o8<\T8ԫ88lj8N8]83ʑ8˩<8(c8x8\\\8)@8j$8X: 8@n8ѐ8ȵ8*癐8]M}8䤷a8{E8)8 8@8עՏ8nb8\%8,ڀ82d8ɠ#H8y`+87Q8򍟷8$P֎8^й8RC8蝷8od8%yG8٬*8C/8Gڛ8pԍ808q8)5~8˙b8bmE8P(8 8&S8BҌ8S赌8nꖷ,8p|8m_8حB80D&8vڔQ 8pz8ϋ8ۜ82ԕ8Ȓx8j^[8>8!8"8}}8IIʊ8ޏ8t8 dr8T82}78Ǎ8\g8Mމ8*8w8r8%Dg8؊0J8mc,8j8C8/,҈808KV>8~뇷jy8ʀ[88=8Ϋ 8AV8Wׅ8XmLJ8vs8苇8'0rn8ƃQ8]38fq8o=8"$܆8۹8@Q&8耷;8akh8K8_/8U~e8!}8|^م8|뼅8N{8~z-8ʮyg8xK8\xZ/8>w8mv8Ԝuڄ8tO8s8)s8WrZi8)qL8p{08o8oY8;nڃ8hm8l8k&8j g8jI80Ci,8nhH8g8f9Ԃ8e8e8I@dz8ic\8ݒb>8a 8`8} ``86_(Ɓ8^^8]ʼn8\k8[}M88[s/8(Z8PY8 yX3ր8OWи8V8U~8/U8b8fBTF8jS5*8R8Q8P$8` P81OM8SYN8kM.~87L~8KJ~8JKf~8cJ=~8k>I~8bHG}8G}8ǩF}8E}8Do}8D\U}8-Cj=}8LB(}8IiA,}8\@}8%?|8>|8=|8Q<|8[;|8; |8":|839|8A8|8N7r}8Y6}8b5%}8j4<}8p3U}8-u2r}8w14}8x0}8"x/}8Jv.Z~8Gs-2~8o,a~8i+~8c*~8\)~8U(|98N'u8G&8A%8);$85#<81"_8.!58'. 8/ɀ828;88r?`68bHZ8R~8_k8lŁ8C{8 8,87M8gm8848[Ȃ8c8 M8k8" 18. H8\: ^8F r8R 8^[8Wl8z886ʃ8]҃8׃8eۃ8!E݃8݃8$o܃8hڃ8փ8Dq҃8<̓8ǃ82?W8򶻺8𶺳8KfV8f8Dϛ8}8>]8Bo}8^V涿q8XAe8W86%ⶏI8OA:8\q߶)8޶C8vܶq8 z۶L8+ڶۂ80ضĂ8׶8RCֶ.8Զx8@Ӷ]8LZҶ@8C Ѷq#8϶Z8(_ζ{8 ͶƁ89˶$8Eʶ8"ȶIb8(rǶ?8ƶ8tĶ8öπ8$88lyW87缶-8O#8c/8[ V8\l~8C͠~8h겶C~8&}86Z}8&}8|8(ȩc|8Iާ{|8C{8w^:{8zz8qz8l z8ky8>y8x8\nx8A쓶x8둶w8돶d.w8v8Sv8Zu8H su8u8,Jt8KCt8+]s8|!.s8j5yr8}|u=r8qsq8nGq8wj p8fLp8f?co8_Jo8#\xn8MX Bn8X'Um8bQ81m8NNХl8Jnl8bGk8TDj8Adj8*=ui8::i87գh8:4L h81Jtg8./f8+;Df8p(e8&e8]#,d8\ c8Xc8xpb88b8"hca8> a8Z;`8@g`8 ы_8 _8`^8{ ^8Bo]8qL]8܂ \8aE8*\8ܡڷ[8G[8qZ8^;nZ8'IZ8 鵞Y8յRVR84;R8-+vR8N!hR8OQ81 Q8 Q8$2܍Q8Cܴ&oQ8ǴOQ8/DZ)0Q8]=Q8 P8@6aP8 5իP8KlP8l~fP8:CP8魰-P8G13O8Z3O8U4ѰO8ݷ64pO8Qe4eO8n4?O8S4O85*4N84N84N8e<5}N8{3 5UN8:45-N8N=$5N8 O05YM8rh<5ٴM8؉H5M8=T5,cM8`5:M8m5M8Sy5oL8ʂ5׽L85%L8D5WjL8t>5b@L8i5`L8җ55K8ǧ5K85K8^.5$mK8d5BK85K8g5PJ85J8AO5J85lJ8p5AJ8G5J8sS5I85vI859I8$5iI86>I8g6>I8 6H8& 6TH8L6ΐH8s6=eH8=69H86 H8g6AG8'6G8R="6ƊG8f%6^G8ѐ(6+3G8&+6HG8.6cF826]C8D(8ܸ 8Uu38 qؕ88?࢕8׶8pBm8eR87898Ѵ8Vj8˔8а8a3ŕ8˲z8c_8-D8hj)8,D8İ8\ד885d8K%8Xj8aU{O8f&48g8_c8U8HMƒ8+嫷8 }8$t8X8zD=8;ܩ!8s8 _89Α8:$8eҧy8i{8[`8ĘBD80v(8oǥ 8^8Ԑ8縐8<$윐8O䀐8URd8S颷H8F,81f8/8D׏8۠8rA8O ₏8|f86 J8͞-8Qd88׎8v(m81ٞ8U>8웷e8jI8(`,8찚8G8oޙn֍85uƹ8 8o8g9c8ЗG8fi*8k 8 8*VԌ88W䚌8픷(~8Gea8D8'8F 8ܒ8r,ы8:8L<836z8uɐ*]8^ @8A"88m8Ƴ%ˊ8Hɭ8ݍ`8rr8kU8P781O8ŋ8Z߉8`X8'8慉8˭%h8BlJ8׈,8l88Qӈ8U,8ؗ8\W,z8텷\8ゅ>8V!88KN8eJB#8IZ~8CH7~8:G~8F~8*Fxd~8@EgD~8bD&~8C ~8B}8A}8@}8??}8?A}8;3>}8L=}8]c<}82y;=}8v:h}8F9p}88}}8/7}86}8E5S}84}83}872}812~8)1$~80D~8/h~8.x~8v-~8(,~8*8)F8(z8'8&8%8Y$]18K#P8"p8O!ڑ8 `8eՀ88e82=8=`8>88yȁ8~48# 82 -8.BM8Qwm8ha8qê8Ȃ8-j8=882 282 J8 `a8- v8 Q88828&ʃ87_փ81J(8^8u88888)8]$8C88YMR8}܃80փ8thsσ8=ȃ8>n88+궻8趯83Ι88 V䶌8Ft8ᶿe8#/dV8޶ F8}ݶ48)ܶ!8Mڶ8ٶ86ضA8ֶpʂ8>նs8JԶQ8,Ҷ9|8CѶ1`8eWжFC8(϶%8+Ͷ8N̶8ʶ9ǁ8@ɶ 8%ȶ8ƶ a8HŶ+=8Wö]8V¶8ˀ8Oh8ý{82R8U(8&8Y8֭ J8~8@~8:7~8+}8欶7z}8|}81|8GMX|8b{8)s{8K0{8퇟z8Rhz8󐛶,z82y8Z}6y8sx8fx8d6w8ϒw8 ]'w8찋v8yLv8̇u8<߅Zmu8􃶶t8} t8])Ot8|s87x|*s8uSr8pq:r8mmq8$jEq8"fp8FbJp8Sc_o8[gIo8,\Xn8T@n8vQfm8HNV0m89Jsl8bGl8nDCk8@9j82=hj8r:i8l7KBi8_4h8]15h8h.Fg8Y+f8d([f8%Xe8#4e8] d8kd8C8c8ڈZb8/]lb8?a8(\a8 `8ۀ .T`8}A _8T_8^8&^^8E]8o]8;l\89$N\8^z\8ȯ[8snE[8F굡Z8 yZ8;$Z8ീY8ݵt]Y8@ڵY8صX8W2յbX8 dҵX8ϵW8̵W8ʵHW8,PǵX W84ĵkV8V8rbV8Sb0V8/V8m?U8}AgU84)U8#[U89ꩵ6U8QPU8lWwT85T8wT8M蘵T8D\|T8񋑵`T8ǽFT8uډ+T8ᅵT8ӁS8a{)S8rS8 YjժS8aS8aXvS8>O\S8gF%BS8 =<'S8H3 S8)PR8# 'R8(=xR8{6 QR8'|R8ﴎ^R8ڴ?R8Ŵ R8*R8V Q8ƅvQ8g`ZQ8244}Q8 [Q89Q8V:Q8}:˰^P8/3XP8aв3P8uS4P8\}54_P8c4:P84=4LP8Ȥ4>O8%4O84@O8l4PzO804SO8 5+O8{5O8{#5N8{/5N89;58N8G5bN8[S59N8j_5N8$%l5M82Zx5mM8J5M8Pk5fkM85AM8۴5M8ݚ5L85L855L8e5IoL8G5DL8 ˹5oL85K8|858K8q5{K85oK85DK80(5K8h5J8_5J865J8705_mJ8u5BJ82^6J86kI86I8 6I8^6iI86w=I84>6I8_e62H8 6H86ŽH8!6cH8%647H8/(6c H8Y+6G8݃.6G8]16G82468츷c86d8I8i$/8N\8綷8 ޕ8Õ88~I58ᴷLs8YzbX8q=8z"8uC|8۲x8tmє8V [8<8<8հd82mI8Z.8x^858ͮܓ8e8;8ϕ犓8-o8Ŭ#T8]88L88}%g8Uʒ8#Un8쩷哒8[x8i\84A8K%8[㧷 8zT8qґ8驦궑8WA$8إ_8pc8NG8+858̣8cא8 ߻8 ß8)8}g8VFK8/88gr82ڏ8H8ߞO8vㄏ8O ih8 K8:b/8ќ8LhN8َ8Օ%8,8gÚ8/ZTg8𙷺J8.8v8\8L3؍8◷8y8QO8e8=H8CԕO,8j8T8ŗC֌8".8vēʜ8Z81c8ZF8)8ɲ 8H8Bސҋ8s8_ 8Ǟ{84\^8TɎ/A8^#8󍷥8P8ˊ8}}8`G86܋s8 qU8Y888|/8Pĉo߉83Y8"8 d83h8\J8BE-8׆8im8UԈ88.+8vĄ{8Z7^8@80r#808o8?Kˇ83⁷®8Hy8~t8ԧW8B?2;88~8< ~Z8;}Ȇ8nk|n89{8zs8yW8*yO;8Zx&8w 8~v8/uʅ8uɮ8KIt8xsv8ͧrZ8qr>8qO"8%4p8bo8n̈́8nm>8 lҔ8PlXx8qFk[8Hsj?8ԟiR"8%hn81gv8$gc˃8Of<8{e8'ds8c V8b|88{&b8Pa8>{`P߂8u_h8^y8]8#]g8VM\I8#w[+8Z 8Y8mXҁ8Xu8GW8lqVy8U\8T?8gS#8S8_AR8jQTπ8P<8/O81Ny8Ne87ML8_L48K8?J8lI8H,85#HA8HG)e8mF?8̑E8/D~8C~8dB~8 B~89A}~82X@w~8u?d~8>bT~8=F~8&8d :8gƂ8)8s8.8xG8U28c JJ8xq ta8~ Qw8 ԋ8 8а8h68 Ѓ8m݃888y8)o8B8 _}88m;8=8n88f8,8Yy8uh8&8C߃8\؃8%붯σ8鶅ƃ8趇8涬848c8_苃8ඊ}8A߶.n8@޶]8ܶlL8۶987<ڶ0&8ض<8׶8Gֶ8Զʂ86ӶK8TҶ8OѶz8϶r^8VζA8̶"8E˶8~Aʶ8ȶ82vǶ 8 ƶr~8ӘĶZ8"ö68.8'82À8P8r8;5I81U8i 898W58~8d⯶~8uf#~8Q}8~lg}8}8NƦ|8NᤶJG|8{8 у{8\,!{8)$z8-Yz8#5y8;y8sB))y8Jx8RZx8\w8Ghw8vw8@zv8Bv8wTu8ƃvcu8ၶt8t8nB| t8x5s8t#s8d-q"r8ʇm5r8Ziq8Of@q8Mbp8Z0_Fp8[9o8r.XEo8gTn8LQ=n8MDm8~J.m8=Gl8CPl8@0k8a=j86c:#nj8H7i894Li861 h8?.e)h8T+˗g8u(g8ߢ%uf8"e8" mWe8ud8=d8@c8*c8<b8b8mśa8 a8v `8V`8n_8'Q +_8BA2^8 ~?^8f]8]]8>\8sڄ\8뵲\8I%[8+嵝Q[8ᵼZ8޵Z8(۵M8Z8صCY8ˋյލY8ҵ>Y8hϵX8J̵VoW8mN9W8|VW8T"V8IH*V81/|V8qSV8Ҩ+V8V86?U8͞U8RU8ėJU8#`U8lnCU8A&U8Lj U8Մ(T8|πT8jyT8~ q؜T8hT8n_9gT8DW]LT8s Nf1T8RD,T8;S8;2 S8b( S8S8K1ljS8FA lS8D2NS8 0S8FuٴS8ĴR8wDR8Dn@R8ŒR8;^qR8QL3ePR8d.R8AM4 R8 b:`Q8Q8s-3DQ8}3 ~Q8g4.YQ8-X444Q8b4Q8Ou4'P8ß4BP8+4P84vP8E4OP8t4(P8 5P85O8+"5O8.5O8:5aO8gF5Y9O8R5O8_5N86k5۾N8dw5N8́5YlN8 5BN8= 57N8C-5iM8R5M8M{5M85bqM8Ӭ5*GM805M835kL8f5L8;5AL85rL8l 5GL8G5L8q5 K8s5K85K8A5pK8#5EK85lK8h6J8)6J8TM6\J8q 6lJ86gAJ86J86DI8V6I8@/6I8V6/gI8~!6l;I8$6I8'6H8*6H8U".6 H8?L16`H8v46'4H8)768#֖8-b8YƷ8^兖8zk8MP8(~588{Y88d ʕ8""8-28S;y8벷=^8>9C8-(8ɴ 8M8=尷֔8u}88ɭ_8E%j8 ޮN8"v382W8@ 8K>8N֬SƓ8Nn8D87't8"6X8Ϊ<=8e!8J88B-=ϒ8Ĩ8\8X|8񋧷`8#8#8E)t8ډV8o88g88.#8Ç~‰8Xߤ8@@8i8 L8~.8XD8)ڄ}8pֈ828hG82}8Tɂ`8_C8&8 8$8黀χ82S8/>8+y8W3~]8b}@8#|"$8{8zzx8F!z;φ8&Qy 8 x疆8wz8v^8vB8U@u&8ot 8s8r҅8IqԶ8_-qҚ8P\p~8ob8nF8mn*8 m18Cl8qkՄ8j8#i8h8%h)c8BRgRF8~fg)8ea 8{dA8"d҃8-c8Xb:8!ay8'`%\8_>8_ 8/^8HZ]8ڄ\Cǂ8[[b8Z8DZm8.YO8!YX@28~W8ϭV88!Uف8rUּ8,T8 WSP88 >8%={~8@<~8 Y;~8p:I~8Ԇ9~88~87~86~85~84~83~82a828 1(80sA8/]8{.~{8 -Ϝ8n#,8$+8%*8}%)j8$(58#'M8"&7g8!%8!$8 #.8 "-ր8!!8s# %8&08*2P80o87x8>@T8I6ρ8tT 85`8l#.8z0M8k8՗ꉂ8Ϧn8>Ă8T8n88/8H8 _8. u8., 8N: 螃8H i8Wƒ8g~҃8=x88̜ 8E8Z 8j8\88ek8 8D842 8V8m8Ry8y8c,8w8[ڃ8cЃ8!涕Ń8湃8q?M8 џ8ps8߶8ݶq8Vܶc`8(ڶM8ٶb:87Sض%8ֶ8ն8ZԶa8Ӷǂ8Ѷʬ89aж81 ϶gu8 Ͷ[X8mX̶l:8ʶ8_ɶ886ȶkہ8ƶ8aŶƗ8öt8{¶P8+88g5߀8r8f㺶S8N3f8gR<88k8νt8= 8MN~8󌭶ef~8ū4 ~8}8J"*O}8G|8^h|8>1|83J{8԰n{8œ {8њFz8YߘFz8떶y8}y8y8v9x8!Ix81 w8Bzww8V w8mv84v8u8ݾVu8t8|ut8HRx?t8ts8ps8Zmͤr8ic-r8)fq8gbc:q8t_p8[$Ap8Xo8TTcAo86Qn8M:n8{Jl8M@"l8x=ȏk8NR:bk867'vj8t&4Mi8!1Zi8)(.h8b:+H=h8CX(Eg8%!g8׷"f8% f8G~e8ӡ2d8Tmd8lzc8Vobc8b8:i^b8_ =a8Ct %ba893`8/m`8b_8M_8dN_8e^8?/^8]8;X]8^!\8-浹\8wbV)\8്[8.ܵl[8wٵ[82IֵZ8&ӵhZ8/е9Z8l̵Y8SɵY89ƵS>Y8õX8X8kཱུX8ֺDGX8ȷX8W8 vW8!jt|W85OW8{'%W8kV82GV8&ٝqV8rZɌV8jʖ{jV8e(lIV8 ti)V8⬋U V8҇U8僵U8xU8wהU8cOoxU8,f\U8P<^@U8xyU$U8LU8CT8R:T80_T8߄'ؗT8${T80]T8T W@T8aZu"T8mT8uشXS8rô)S8S8S8CfS8]8ES8q\2#S8޼+S8ZR89ZR8DR8F ,3vR8`S3RR84?.R8RD34< R8@:a4Q84aQ84Q8C;4rQ84`LQ8'4%Q8G4P8i8 5P85\P8D"5P8-5`P8958P8-F5WP8@R5O8R-^5O8 Mj5*O8sv5mO8P5CO8j5mO85N85=N8Zʙ5bN85msN85^IN8B53N8n5M85M8ξ5M85uM865JM8m5 M85UL8\5pL845~L8Y5qtL85WIL8e5/L8<5K8I6K86MK86pK8  6tEK86<6K8`6nJ8 6J8̫63J8 6kJ86?J8 !6J8G$64I8o'6aI8b*6I8L-6dI8068I8a46 I8v>76H8h:6G8=,8Uַ/8nn8}ܖ8888ѵL8ivq8V8w;82 8S˳8c8Е8i8,8ű~8M]c8H8Í-8%8&`8OV-ܔ8o88y8+o8NS8欷88~588Юq8F ˓8ު8v+8qx8D9]8>A8ը,&8m 8T8{Ӓ84ݷ8-̦98c86d8$I8*e-8m8X8ّ8>8o8#8Lj8㡷 N8z1888?ݐ8s֟I8Qm8'8bl81 P8ȝ38t_>8D8Xޏ8#8e8Qވ8W蚷^l80O8J38۬8C.8ژݎ8rq8N8)85dk8̖N8c;28V88'x܍8jݿ8UB8듷8 i8tJM8Ю08E8>ۑ)8TqYڌ8R8>83ԃ8ȏf8p^I8,8i88Ջ8TI8ތK8s ~8`8eC82&8NJ8y\"8b񉷥͊8S!8D8:u8=EW8Qڇ98qod88󙆷;8N/É8ą38`Z8>k8煄M8k08뱃8H8|ނ؈8tf8 L8[M8>9Ud8?ЀxG8bg*8E 8,J8Z~ԇ8}58>|ɛ8{j80{c8GzF8wy*8mx8Cw8$wֆ86v8fu8t8Bsf8rJ8d%r/8Tq8p88 oDۅ8nI8nN89?m?8ml#k8kN8j28Nij8$i8Rh~݄81g8f-8ed8?ej81dM8]cn08b:8a8F`؃8 `8^8_8c^8]Pb8]\D8[&8[ 8;Z]8fY͂8X8WR8Vt8VdW8=U#:8hT8ݓS8ľRv8Qǁ8LQ8>PP8jiOt8ѓNY8M>8L$8LL 8-;K~8DdJIڀ8 I€8]H8/G8{G8-+FKl8JQEX8vD6F8OC48!B#8Ae8A8%@8E?8c>8=8;<8;8x:89z8E9s882p8-7Bo8@6"q8"R5u8b4}8p3 8}2]81808/8.8-8@,8+!8*r38)F8([8'p8&O8ֿ%8$᷀8#р8"+8b!8 #87@8d]8z888bՁ888 F08HN8Z(k86<8uE 8jTQ‚8c݂8r8$8v,8D8 \8 s8 8 8} 88 ҃88L-8?*8S8Ji]8n 8"8"8%8'8|$j(8j'8{U&84#8W7 8P8G 8)k8 8<8߫78 8њ趺88փ8+Rʃ8ƽ8QK8!߶桃80޶8(ݶ98۶p8pqڶ^8=ٶK8׶68Xmֶ 8ն 8Ӷ(8pҶ?ق8 ѶS8.϶v8nζ8IͶk8˶cN80[ʶ/8ȶ8Ƕm8,ƶeρ8Ķ8OöŠ8'g8_B84ᾶ]8g]'8Ի#Ѐ8F]88V8{,8ֳ8+B8[y~U8~8~8@H~8v{}8E}8Х2}8|8v|85|8O{8wg_V{8|z8䏘z8𡖶40z8y8Œihy8>ؐ^y8뎶Vx8^6x8jw8-jew8lGmv8wcLv8́$v8u8Hu8<{ut8N(xit8~tns8ps8Ba]8]80޵S\8ڵWE\86h׵S[8ԵT[8еC[8͵Z8CnʵZ8Cǵ^Z8ĵZ8XY8ӽY8WJYY8m?Y8WX8# X8筵׀X8KPX8;R#X8NW8ˍW8yW8bW8 ZW8VVp6W8ԟW8׊V8VUV8ZV8m(~ݓV8+vuV8mWV8Ue9:V8,\V8TU8}6KU89BU89$U8/U8m&nU8QU88=3U8t U8MT8I-T8Lִ4T8I´ݚT8h){T8+ [T8:T8m\T8m1XS8S8´S8.b9S8woS8*3KS883'S84S8E24R8i_4¹R8+4:R84nR8bS4HR84n"R84Q84HQ8~ 5KQ8p5 Q8S!5_Q8@-57Q83795Q86E5P8?Q5%P8oO]5}P8+gi5mP8u5DP8ր5P8X5@O8 5O8#58O8C5kuO8f5KO8M5!O85qN8ݱ59N8[ 5N875zxN8h5MN8=5]#N85M8n5M8>5M8x5 xM8!5 MM8N5!M8/5L8(p5L8X6SL8@z6tL8l6IL8 6/L8m 6K8m6%K8*6K8O6oK8nu6ADK86K8 6J8#6J8'6#J88*6FiJ8`-6^=J806jJ836uI8C66uI8:6oI8B0=6z8`混8~i8BN838H8,ᵷ8y 8(JȖ8u8C8~۳w8s\8G A8&8< 8Mձ8mՕ888T68ίgi8f;N8388&/8Aǭ[8W_Ɣ8gͪ8ox8u'$t8vX8nW`=8a覆!8O87!8ϓ8N/8樷8~)}8Oa8F8E*8Pݦ8tI8v ג88o;;8Ҥ|88jh8L8֘18008GǢI8p^Nݑ8S8K8#<8 m8QP8蟷48v8Ze85!8DÐ8ڝ8q%8n8xZR8H658͛{8c88ď8(8i8IVn8*혷R8588ޱr8Hߎ8ߖ^Î8svצ8F I8m8:5Q8є48Ph8x8ލ8 ,I8’8X8>Pl8wO8288GK8ݏ{܌8Xs8 88%4h8ɍK8^.8D􌷃8]8"׋8ɳ繋8H8݊P8ra8D8М('81 8ƈ:8[Ί8F8ɓ8%Dv8cX8EC;8ۅ8p\8(8ޛʼn81-8ǃ؊8]m8UP8:'38 8K8N܈8䀷,8{\88KTh8~VL8ȱ}/8|b8|8P?{ڇ8nz{8\yX8 x58w&j8-w%N8u]v728FuP8t}8sކ8s†8>Lr8{q88@pko8oS8 o788n8gm8pl8kȅ8\j8!j㏅8Ois8U}hhW8g ;8\f8f82eZ8_dȄ8ac8bώ8naq8aT8>`a78"j_8$^8 ]+߃8\8\8E[j8ZqZh8YK8Xy-8tW8 WI8KVԂ8XwUv8T58S}8R7`8%RC8QQ'8V|P 8O38NӁ8M8(M8SL8o}KZj8pJJQ8'I88H!8p#H 8KGn8sF݀8 Eɀ8D8C8, Cˏ81B~8aUAmn8x@N_8?FQ8>dD8Q=88<.8R<$82;8tM:8 g9;8V8 8P7 86895|848W3q 8G2828718=0$8&/-880.88^8-TE8?,&S8E+Eb8'K*r8O)W8S()8W'-8Z&I8\%vր8_$8b#8;˃8ƽ8i߶b8L޶ 8ܶȏ8~E۶~8wٶ:l8oضX87׶D8ն/8Զr83Ӷ8Ѷ=8ж΂8L0϶(8zͶ8|̶g|8 ˶-_8ɶA8^ȶ"8mƶH8Ŷ8#Ķ+8=¶֝8Y>z8 ſV8F181ļ 8z<8㯹p89|8$m8:괶D8RG8t8ﯶq8R;28,~82z~8P&~8U0D}8_o}8Ɗ}8z|8ԟ(X|8{8{8x,:{8XERz8\yz8tz8$\y8Py8x8{ӌQx8튶!!x81 w8&Qw8F{v8g;~v8Y v8bҦu8{9u8R x%t8Mdt[t8ps8l*mxs8Еis8f-r8}bRr86^q8[W+q8 Xp8T`5p8H5Q o8Ml9o8JBn82G7n8Cm8̲@1m8 =l8"Y:%l8a;7#k8'4k81/j8 .^j8-+i8D(h8|g%qh8"g8$eg81f81bb\f8Je8#Xe88d8xnZd8 c84 bc8b8&Lrb8s?a8a8"a8mk`8B9`8a.e_80e_8H^8mu絁^8㵦5^8= ൚]8nܵx]8Zص]8hյ\8ѵo\8`εw\8?˵/[8ǵ[8ܣĵ8[8\Z8Z8ӺEoZ8뎷1Z8G-Y8Y8~Y8OEVY8I%Y8goX8 X8}X8puX8E\MX8'X8X8@)W8M{W8`͚W8G|yW8tYW8qflJ:W8dCW8z[V8RAV8QJV8A!V872V8?.CfV8&n%GHV80*V8U] V8IU8U8wU8ʍմU8{0qU8*QU8Gӗ0U8bՂ@U8^L[?T80T8_r&T8 T8A8gT8ODT8Y)3k!T8!3S84S8Q14S8^4.S8K4jS88O4ES8p4S8n4R84R8q4R8=5.R85 ^R8 56R8,5R8Mu85#Q8clD5Q8xlP5Q8t\56nQ8Ih5EQ8t5Q86^5P8q5VP85P8̡5\wP8}5MP8ޞ5#P8_5O8e%5O8L5O8v5u{O8ɢ5QO85&O8|5N835VN8.h5N8\5{N845PN85%N8K5M85M8>5sM8 61yM8#6MM8D6w"M8f 6 L8c 6L86L8:6~tL86HL8e6$L8>6wK8d 6K8#6K8б&6nK8)61BK8-6HK8(06UJ8{Q36YJ8ez66XJ896RfJ8e<6D:J8d?6U8ڗ8'濗89$8Xb8O񵷚o8ՉT8S":8˺,8CSP8볷s8!Ζ88괲8EM}8屷b8}G84,8y8F8ޯvە8*wW8X*88?n8׭S8oQ88 8 88u8Ы ˔8hů8d8x80]8ǩ$B8_&8? 88J'9ԓ8 8V&8v8f8gJ8D.8L8E䤷`8{ے8⿒8l8AI8آol80pP8^48858̠8cyđ8]8:8( p8rS8[V78>흷Q8!88౜VƐ8H8ߛ8ov%q8O T83F88;8љ`8h8fƏ8橏8-l8ėp8|[rT8e78Hk8+ 8 k8MŎ8䔷d8~{֌8;Op8験S8?478֒8l 8q8tč8/ 8Őr8\n8Q8 058Y8{8ZIތ8ލ8qt8 8=j84uM8ɋU08^'88.؋8?c8H 8PH8Y݈Nc8brE8p|(8 818Ɔ2Њ8(\²8R8톅w8kZ8)=8G8݃8{sJ8 ȉ8⪉8 6ȍ8}́p8 cS868 8'M8}8g~È8}o8}87|n8f{>R8z68wy8x8$x8OTwŇ8vЩ8۳u8tr8xtQV88Cs:8rr8q!8Kpi8pˆ821o8~`n@8mzx8žl\8k@8ak$8Jj 8^yi 8hЅ8gӴ8g8b1f6|8^e_8odJC8c&8b 8b"8@a7Є8m`28W_8^x8y][8]M>8fL\ 8x[g8Z8eYXȃ8Xͪ8)X;89VWo8V3R8U48Tt8T:8?3S ݂8f_R58Q8P 8Oj8VON8 ;Ne38fM98Lw8W8P=ҏ8|oz8:Jq89i88!c87]87Z8)6W8?5LV8S4tV8Sf3W8w2Z8҇1_80d8\/k8.t8»-}8,ˈ8+!8*ˢ85)8(8'Ӏ8&8%8$ 8##8#98"P8!h8 86њ8W!8])΁8C28<8F8Q:8^V8jQq8exU8%8_8zۂ8Գi8Z8 '8>8# V8Cil8c 8# 83 H8 D 8T u΃8eރ8w8848Ӳ78P8'8>.8i48/88~;8=8!>8i>8gP=8;8[7838'/8Itﶜ)8Ud#8?G~8ɷ8-a 8f$8&,8kX84㶨8փ8Uඨȃ8޶I8ݶ8#ܶĚ8ڶ8>eٶQw8v ضd8OֶO8\Vն:8JӶ<$8¦Ҷ 8OOѶ8}϶[ۂ8ζ%8DͶ8˶8ʶ4m8*ɶtO81Ƕ08kbƶ{8PĶ58ö Ё8¶<8}8.g8C8/{888р8፷88]Y89088Tk8#b8 8wG~8\[~8O~8󤶩}8#L}8|O'|8w|8C8|8㿛{8-R|{8_{8z87c]z8 Thy8vpy8 8y8Kx8Ȋpx8 舶 x8J w83,-=w8Pv8wkv8HAv8o{Ru8*w)u8Qtt8_pMt8X m!s8{i+ms83fr8~bqr8 ^r8[@q8 X$q8TTcp8BQ0p8 Mo8J7o8XDG n81D@9n8@\m8=m6m8`j:l8tK7*0l8]64&k8+1'k8*.!j8x4+j8H(i8gg% i8ܐ"rh8Ph8g8O g8xf8f8pʐe8Se8_Z8Ȧ+Z8JY8ßY8^2Y8oY8픵EY8'8Y8trX8RWX8…oX8ӁX8m{cX8sAX8AEkS X8bW8(_ZiW8QW8H*W8 @W87aW8 -BW8$$W8>W8EV81V8BV8v贄V8oԴhV8G1HV8Q(V8V82?U8+CZU8/U8U8Rx`U8g8>U8A "U8{'3T8&3HT8SM45T8 ^04ŋT8]4fT84AT8S4T84(S894S8'4ʩS8Q4ES8Qb5o\S8'5d5S845$S8+5R8f75ϾR8ӤC5ǖR8O5nR8S[5$FR8g5R8϶s5Q865Q8N5Q8 5?yQ8]!5OQ8;5*&Q8W5jP8w5P8L5P8'5c~P8W5+TP85)P8:5^O8i5O8?54O8B5wO8q5TO8I55)O8l5N8O5N8'5N85y}N8֭67RN86&N86M8 6 M80 6M80S6$yM80v6MM8ƙ6!M8ܽ6EL86L8 6ўL8r-#6rL8S&6'GL82z)6EL8H,6bK8/6fK826iK866lkK8A96`?K8k<6OK8r?65J8GB6KL8718_ж8h8}K8Ɨ828˴됗8|cv88[8b\@8,y%83Ų 8]8Ԗ8I8&8侰8(Wh8eﯷM8l28M8 '89P8\護ŕ8}8T8t8HX8૷x=8x*"88ݨm8@ Д8ة8p;8}8oVb8E8F8ЧW+8g8J8Gؓ8.)8ƥ8 ^8Cj8,N8$288ZST8ꢷߒ8񁢷Ò8,Χ8Z狒8Go8ޠS8u78 88:8ўǑ8hU88zr8`-V8EĜJ:8)[8򛷠8B8Ȑ8}8M8䙷s8u{8W8b:8SL8C@87חm8-nȏ8%z883s8ɕW8`:888l% 82Ȏ8R8钷8;s8V8L98CU8 ڐ8Np8zcǍ8828Ȏ(q8\^WT8z78Ɖ8Y8մ8EJÌ8ߋ8t80 gl8`AO84 28ɉ8^8Aڋ888A8GHd8u݆G8r*8 8Z`82 Ҋ8PȄ8]m8%z8s\8f?8q"8Kv8ၷj8Sxrˉ888R8==8<8s;ڀ8;π8":ŀ8?9_8[88)v7ܯ8}685Y8`48382v81'8x 1%80q87,/$8<:.+8G-€8R,'̀8]+׀8g*>8p)8zy(28U'8&8%18r$D8)#kX8"1m8Ъ!҂8 -8L082ǁ8߁8 88*8OWD8p]8@ w8G8'ɪ8z6#Ă8E-݂8*U8d08t&8M=8YS8i8 '8] 8, 58 湃8K ˃8 H܃880Q8D8(Y8n8H(808h78(=8A8D8_F8/G8\G8<#F8{C8@8<<8=8828Oe,8붚%8dB8·i81 8 85+8½{8Jރ8߶tу8p޶Ã8x ݶγ8۶8KCڶp8ضL8r׶1m8*ֶY8ԶC8l8<1k89.;k8v@+tj8DQ(?9j8;l%Ni8"7i8{h88h8@ƺg8{=g8f8BPFf8be8< eUe8 d8iTid89c83 c8VL!c8Eb8:b8nOga8S "ha8a8l`8I:`8%ൡ_8(ܵ|_8 ٵ!_8Eյ^8ҍѵr^8͵^8@ʵ]8Ƶ]8õ4]8]\8Ф\8˂1a\8G \8|[8[8ol[8⦵5[8O[8Z87Z8g;nZ83AZ80Z8"Y8^HTY8`Y8jvY8zQY8r,Y8 bj Y8aU8p4OU8ě4T84T84ƧT84vT854ZT8554T858 T8KL5S8+5S8*65ؖS8B5nS8YN5FS8oZ5oS8f5R8Br5-R8~55R8~5"{R85QR85x(R8˸5Q8|ҝ5.Q8.5`Q85kQ805NWQ8jU5-Q8|5Q8J5dP85ݭP85HP8/5XP8a5-P85P875O85O8;5܁O8jv5VO8LY6r+O8"x6#O86N8 6iN8 6}N8{6_RN86&N8?6;M8b6M86ӣM8S6 xM8T"6DLM8%6b M8)6L8TB,6L8*i/6L826pL8T56DL886L8<6K81?6nK8>[B6IK8E6A8භ8%ym8 S8>G88B8D۴8s8= ͗858=X8ղu|8ma8QF8+878Uϰ8gږ88&8^0o8ȮVn8`1S88888)8Vd8qY$˕8ݯ88!Ay8]8QB8驷*'8 8Y8gԔ8KI{8᧷8x8f8r|K8'@/8ץ[8vo8 &ݓ886ץ8ͣ8dfn8XR868*87¡(8jYA8Sǒ8_8]8ߵ\s8LFW8㞷0;8z 88Ϩ8?}ʑ8֜88m푑8u8o^Y8X2=8@ɚ 8.`O88ː8$8𻘷8RLv8闷Y8߀t=8!8֮8E(8ܕˏ8sI8 ֒8]v88Y8bϓw=82f 88 8a*ˎ88W|8u8dTY8<8򰏷 8Go81ݎ82sɍ8 :8融j84s8DʌV8_98V8Ċ8% 8sŌ8J8߉{8uUn8C Q8i3848ɇU8^ ܋8 􆷾8Cp8!8߳f8BI}I8ބ4,8Dt8 8Ԋ8n5W8\˂68ga$}8`8֍C8<$.&8ĺW 8gQ8Pω8 ~)8,~8)Z}z8|]80{PA8z%8z8Cy8>sxЈ8w8vȘ8v|8R1u(a8atiE8ɐs)8r8Equ8 qև8OpU8mo˟8nA8mh8 m5M8=l18lk8ji8iކ8hÆ8(h@8Wgf8fo8e~S8dh78d>86?c82mb8a6ƅ8`8_8F$_Dp8Q^sS8^]68ڬ\8E[c8[/߄8 5Z8nbY8ŏXB8Wi8|V}L8V/8/EU8rTh8֟S.׃8(R8sQ眃8'Q8UP2c8'OF8=NS*8?MD8 M85L ׂ8xbK8ԎJC8I8H;m8HHS8t=GA;8;hF'#8E 8iD8Cށ8qCbɁ86BҴ8]A8@88?<|8>=k8=.[8=)L8c98Z;?18z:g%8198?8587868I 68$5;8<48S38/i28~}1z8098¢/D8.8l-^8,W8+8G*8,)#8G)/8 (<8x'J8 &Z8)%Zj8U2${8:#ۍ8C"8,L!洁8T Ɂ8^ށ8sg8oqI 8|7"8J98%3Q8i88@*8e>8 7ɂ8e888_&8&Z=8x7XS8hHh8Y}8j 8L| 8֍ z8 -Ƀ8 ك8*8Dq8881(8+(8oC18}\v98w @8?bE8DbI8}L8o]N8+2O8uN8M8KK8l{H8D8%?8SK:8I 48]-8W%8'D80o8d߶؃8ݶ*ʃ8ܶ麃8(۶8ٶ8dض8׶t8ն`8KԶK8Ҷ58ƕѶ8>;ж8wζ[8ͶԂ8S(̶S8aʶ8jɶՂ8) ȶe88ƶ H8>Ŷf)8 ö 8=h¶8ȁ8i8 h8Wa8=8]W88x̀8p洶8O~8V83e.8`mm8¬8d8^z8;~86祶c~8$ ~8M^}8*\}8ƞ}8o|8#O|8@N{8w7{8|={8ēz8둶z8c$z86oy8\ey8?y8x8[ӆ%Ax8Yw8(yw8Uw8: v8_j{Gv8wu88tvu8pl u8m"t8i4t8 fGs8SbXs8_r8}[iwr83Xr8Tq8VkQq8Np8MJ#.p8RtGko8+1D;o8@n8Z=oEn8E:m8w7Lm8_4l8P1Pl8J.k8N+bTk8-\([j8es%Xj8"/i8Z^i8D?h84fh8~g83sg81 f8f8  tf8ȍ 6e81'e8C]d8IFd8wc8 Omlc8c8c]db82b82a8jka8vf a8Uߵ`8T۵N`8c׵_8ӵ_8ϵG_8˵^8;!ȵ^89jĵV^8a ^8]8k||]8ǵ8]8x&\8򄮵\8᪵|\8GY85q%Y8d, Y8'#X89X8ETmX8X8_X89x??X8ҴfX8)sW8QWW8ٕW8/sW8bXwW8.UW8]3W8W88V8)V8$3pV8~3V854_V8MZ.4Q;V8S[4V8E4U84U8-ٱ4UU84U84YU84.3U8$35t U8C5vT8 5QT8k*5T8?65KoT8B5kGT8N5VT8Y5 S8e5S8 q5S8s}5}S8C5SS85*S8)$5cS875R8N54R8h5fR8F5ZR85o0R8Ƶ5DR85Q85Q88<5%Q8g5\Q851Q8o5Q85?P8*5ZP8P`5ZP8S5@[P8+50P8W6P8C#6O8B66O8pa 6̂O8 6UWO8\6+O86=O86N86N8+6D}N8O6|QN8s"6%N8%6M8 (6M8+6M8 /6vM8026JM8W56 M886L8;6L8>6ęL8A6mL8!E6zAL86KH6D8nߘ8!Ę8 8SJ8봷t8Y8>8$8yM1 8岷U8L~rӗ888uG8߰g8!xL8l188@8*ٮ8`qgŖ8 A889s8ҬX8'j{=8?B"8U8e28vʪfЕ8~b 8|8zU~8o*b8[¨G8FZ,8)򧷭8=8!ٔ8>8]Q8饷18k8l P8s48G8ߣ*8vy8œ8g8<<8ԡor8PkV8:8808ǟ8_ʒ8#ή8,8/$v8'Z8 R]>8霷&"888꭛g͑8D#8ۚؔ8rx8 .\8?87w#8Θ8e8Sΐ88*8"y8X\8W@8#88 8KΏ8w⓷G8`yՕ8@hy8\8=@8ԑ$8;k88YΎ8.8*ŏt8x[x8>\8ׇ?8"8޳$8Ih8ߌ̍88uǯ8 ꒍8tu85Y8`ˊ<8`88W8 nj8ѵ8K88Op8kuS8 58ݟ8 5d8tʅ"ދ8_888k8? 7i8ⵃ L8K.8vႷ8_w8j ׊889Ν84Ѐ8f'd8kG8(*8U~!8}8|.Չ8{ȸ8{}8R=zF8(ly#d8)xH8Uw,8v28)vR8Xu؈8tͼ8ηs"8r8;ri8FqkN8vp28mor8.n8n8u5mŇ8dl8rk,8jr83i&W8d"i;8{Qh8gT8bf83ĕ8 eﰆ8o;d8icx8Qb\8a@8`G$8 #`8Q_S8!^΅8]8 \38\Hx86[P[8dZ6>8}Y!8TX8*W8WRɄ8IV8wU8Teq8pST8FS68/R8\Q8ɊP߃8Oƒ8FNY8N8sAMm8nLQ8;KZ68aJ 8RIC8#I8jOH˂8{GH8RFL8Eۀ8Di8,(DQ8#RCO;8{B%8\Aw8~@78?8?7ց8@>ā8e=ⳁ8<08;u83:8{9{89o8/83e8M7[8j6S8v5L84KG83B82?81=80<8H0{=8'/G?8:.YB8K-F8K\,QL8k+S80z*.[8)kd8۔(n8&'Vz8ܬ&8 %8$G8b#벁8"Á8>!ԁ8 /8$)8 8  "8E685$L80a8=w80K8+Y\8gߺ8vcт88 (8dG8 %*8?8T83xi8}8 *8 81 :8D ǃ8V `؃8i &8 }88ץ8f8V(8S 28:8A8I7H8GTM8P8e&S8jdU8:V8U8MfT8Z)R8}O8RK8KF8@8X~m:8#e387\鶐+8"8TK涀8E8LB8q8^8޶Iރ8ݶσ8ܶ8ڶs8BIٶf8׶j8ֶz8 'նf8<ӶQ8_lҶ.<8"Ѷ%8϶ 8Wζ8"̶=܂8e˶‚8^>ʶ8ȶ>8{Ƕn8ƶ3Q8Ķ28JFö8,8iӁ8FR8cG8m8݅ J8%8{8𵶝ۀ8`8b̲鎀82g8Ĕ?88>J$8 ֋80887~8}%~8߿:~8}88}8o6}8|8֚-|8i-|8<44{8`x{8{8z8?᏶ez8} |z85y8`Ky8ix8Tx8儶*x8w8Dew8S~w88T{v8wG7v8,txu8Lphu8mt8&it8f*t8bFs8_Ps8[;r8DXOrr87T0r8Qߎq8(Niq8_JΦp8OG1p8JDko8ABo8=Un8:Qn8+7Hm8?u4]m8d1[l8[.gl8\+k8f(qk8dz%j8["|j8j8i8(4i8lh8ۺ"h8fg8Mu8g8 f8X Sf8Ze8 e^te8e8Xd8z^0d8@c8k`c8b8-Ęb8iNQ7b8⵰a8[ݵza8;ٵa8յ`8ѵZo`8͵ `8ɵ0_8Ƶy_80µK,_8bo^8/^8նR^8U^8T]8]8ԧ^R]8]8J\8)W\8t\8WՔB\8/\84 [8d[8@[8^[8y5[8q^ [8di+Z8`Z8`XzZ8OuZ8FQZ8>A.Z85E Z8+Y8"LY8iY@Y8jY8U`Y8S(?Y8Q崕Y8CѴX8`X8өX8CpΖX8ڀtX8(XRX8<.40X8< X8W8.b9W8;BGW89U"3W83\W848W8rB-4/W8Z4aV84QV874V84%V84%YV8:42V8,4 V857U8E5GU8"5!U8)5oU855HU8[A5I U89;M5AT8$Y5T8e5T8}q5~T8<}5VT8Ґ5-T8\5T8d5S85!S8˜5|S85]S853S85 S8e95R8[5pR8F5R8v5`R856R8U5l R8*5Q8Y5ʵQ8a5Q85_Q8>54Q8+5 Q8c5|P869P86܇P8{ 6r\P8* 60P8J6vP8ik6O86DO86O86VO8+6"+O8"6NN8;%6kN8`(6N8…+6{N8m.6ON816#N846M886M8F;6tM8Cn>6OsM8A6*GM8D6M8G6L8BK6UQ8L268ʵ8jc8T8p˘8,8dų畘8]{8OB`8_E8 '|*88W8I𰷸ٗ88 ã8?8Qm8鮷R8789~8i_8J38⬷˖8zگ88`y86C&^8I۪B8Ws'8b = 8h8c;Օ8XӨ+8CkÞ81[8g82}L8ʦ18b8[8~ޔ8)”8od8 Y͋8/p8#T888.8zNo8塷8.}ɓ8v 808BIv8ڟbZ8;qg>8Vl"8lk8w6c8͝MΒ8d188|y8r)]8hvA8`W9%8V8L8GeБ8@8>Jɗ8>ᘷw{88̈a!8gaG8'8ʌ81!笌8u8Kr8ᅷXU8_v*88 86868J̃Ë8ah8O8Il8u#DO8{L28Oa8倷8:|ۊ88RH8~8} i8t|L8 |G087{8,fz8Ȕyۉ8xy8uww8!w8Pvk8uO8t+48s8s8`>rY8nqň8͝p`8o8>ns8,n'X8\m<8Vlq!8k8sj8jKχ8_Ji㳇8yhm8g|8"fSa83fE8.6e *8edE8cr8bֆ8Xa8at8tN`=8|_e8\^I8]-8]x8_6\8d[ׅ8Z"8_83HD84Ga*8F8FFV8MS08=8~< 8;R8;8B:jށ8#e9Ё8e8ā87Y86985185G848t73 8Q28i18π0Ȉ8/ 8X.8-^8,c8+8* 80*8)w8%(]83'\8?A&eÁ8UN%yρ8[$܁8jg#8s"8!O 8 80,+8=8O8b8Ldv8 b8<8L8Ȃ8K܂8+$8p48%E8:VI08gD8yX8݊l8؜8ǒ8 8` 8P ǃ8 $؃8 8! 826j8&Ka8`g8_w~(8Ȏ28,;8C8TJ8P8T8iX8Z8 \89\8x \8Z8*3X8͂U8P8> L8_F8 ?8x8808_4(8嶧8VR8; 80_V8W߶8w޶8Cݶԃ8۶gŃ83ڶC8}ض78li׶O8Pֶ}8Զk8mGӶ%W8ѶA8Tж/+8-϶8fͶ8^r̶8˶Ȃ8ɶ8*Rȶ8.ƶJv8(Ŷ=Y8"Ķi;8ݸ¶8Lw8]ܿf݁8yi8* 8)e8O?,[e8?d8Ջd8Nv&d8c8Twac8c8b8awܵGb8o@صa8Եa81ϵ\@a8˵`8ǵ`8tõ'M`8`8~ #_8' n_8D.(_8^e^8U^8㪨"d^8ͤ-'^8iM]8l t]8#|]86G]8C]8I\8G.\8f<\8'X\8zu,\8gq\8Qi[8N`[8q2X][8B}Ob[8F5=[8=$[8 4Z8T+Z87d"Z8 Z8eZ8KBZ8"Z Z8aJY8Ѵ|Y8 Y8񂩴Y8/4tY8QY8%W.Y8'. Y8X8X8P:xX8d~X8B3ZX8T36X8Av3X8E,4W8X4W8Ђ4W8gf4|~W8h4XW842W84S W84V8L5V85V8P5jpV8 )5IV8s45d!V8@5U8rL5U8mTX5YU8?d5U83p5LXU81|5|/U8 5U8l!5dT8u+5T885T8J5aT88^5U7T8u5{ T85xS85[S8̺5#S85dS85V:S8:5S8id5,R85bR8r5R8!5dR859R8Q5R8,5~Q85IQ8.{6Q806aQ86@6Q8r 6 Q86CP86P8 46P86U6e\P8v60P8b6P8M!6O8$69O8(6WO89(+6gUO8:M.6k)O8r16nN846VN876LN8:65yN8% >6MN84A6 N8\D6M8%G6lM8J6,M8M6l88۵8sr8N -X8Ѥe=8V="8ճ8Dn8/Ҙ8-Y87v8б8fhf8K8)0818ɯ8bߗ8hė8ͩ8*8ís8R[X8^=88"8#88 TЖ8'쪷X8<8J~8X|c8^L'H8^䨷,8Q|q8B 8/ڕ8D88ۦɣ8sS8 l8d[Q8";58ҤU8}j8-8ǔ8A18ȢM85`t8X8 $=8a&_!88T8(쟷͓8[88z8H^8ߝ B8v%8 8줜8;ђ8қ8iO8}8ߗ`8.D8ř_(8\ 88䊘ӑ8!38⚑8P~8疷>b8$~E85)8E< 8YC8fڔԐ8tq-8}՛8|86c8͒F8wdf*8_8@8)<Տ8Կ׸8Vd8(폷8~c86F8w*8F 8;ݍb8ksԎ8 &8~8m5~8Iˋ b8aIE8(8h 8!8wэ8Lﴍ8P∷8wz8 ]8[@87#8̆8Jb8y̌8􌅷`8U"@8÷ u8;MX8⃷:8bx88ԣ89Ƌ8ρѩ8e挋8p8?S8R(68}8~38}8}%Ċ8U3|8Va{`8zo8ݽyR8dx68x8Iw8xv8u:lj8Xt{8tʏ8:6s3t8erX8gq,=8p!8oN8n$o8*Tnψ8mX8l8Rk}8k|b8Bj.G8$ri+8h8g18lgه8/fS8^eТ8*d@8Kck8VbO8Rb483Ja68y`B8_,8^Æ8g^84]R8b\n8j[XR8Z58Y8rY 8#LX߅8zW&…8V8AU8Uj85TM8dS08oRX8@Q88Pل8P 8NO!8}NJ8JMe8L!I8 L,88K8yfJ8Ikك8H88Gb8#G8nKFn8exEgU8DV<8BC#8 B 8U(B8SA݂8S}@ǂ8?8>D8(=8=w8wF8#* M87\8El8T}8hbZ8qC828LƂ8\?ق8|g888r&8z98ZL8y_8)r8S<焃8O䖃8!bu8ku {8 Ƀ8Ĝ ك8ΰ 8( 8T8A=8/J8t)8M338K=8dTE8hL8R8*X8ZC\8b_80a8`wb8Yb8%b86``8/]8 Z8~jhV8 bQ8/K8E8=8 w58J,8e<#8&8dⶡ 8`ඡ8s߶8W޶=8]ܶ؃8n#۶Ƀ8=ٶZ8Qض[8ֶ8նƒ8z&Զ/p8Ҷ[8eѶUF8ж08ζ8-IͶ8˶D8ʶ΂8#)ɶP8Ƕ$8Kcƶ6}8Ķ`8öC8+¶$858Oa8,ݽ Ɓ8rg 8O^8qa8>8lr8䴶K8zXр8ȱK8O38:>`8|98h[P8r8 }8]48 o~8YJ~8=>~8;}8IC}8:B}8:|8s|8YA|8@ᔶ{8b{8I[;{8A}z8zz8⋶y/z8y8H9yy8|y89x8悶ax8R%x8G~w8{QCw8wv8. tv8pv8qm]u8шiSu8\ft8&bt8p,_9t8[³s8[X2Is8sTr8Qpr8KNr8Jo8:\o8'7vn84{un810n8s.m8o+m8r(^l8~%.l8"k8=Fk8Hj8g`j8@i8́8}i8 i8C!{h8 /h8I g8VUg8Gf8 Tf8bf8ve8*Ne8z@d8쵥d8M赧)d8>Fc8Sbߵnc8۵c8ֵb8 nҵfdb86εb8% ʵa8ŵVma8Aa8@`8b`8մA`81 _8_8齩Nw_8ĥ8_8ɡ^8͝^8ϙp^8̕O^8?ő^8H]8Ѥ]8܉]8fS]8tz&]8 r\8'iM\8`\8HXz\8AOR\8mF5+\8F=\8#4[8+ [8F" [8~o[8 {CK[8X'[8[85 iT8l^5>T85LT8ͥ5S8(5"S85eS81"5iS8O5>S8:5S85R85R85?R8'6fR8D6;R8`6CR8~ 6Q86GQ8*6Q86bQ8B6h6Q8X6 Q8>6P8/a!6P8$6/P8['6M[P80*6P/P8-6`P8q16VO8946LO8_765O8Dž:6SO8]=6&O8r@6N8C6N8"G6GN8KJ6uN8sM6IN8rP68+8 ʙ8ĕ8zLȨ8;䤷E8{q82V8D:8B 8hڢm8q8f ̔8٠l8B88Ϡx8f"]8;OA8yu%8, 8Þ8[ѓ8ŵ89Ù8L }8Za8eNE8k囷z)8q|^ 8q48tԒ8xA͸8{ؙ8~o_8"d8G84+8˗U8b 8֑8␖t8')8ށ8.Ve8G픷;I8\,8r8F8Iא88wD88f88偷I!8{e88駀ʋ8%>8L8~t8~X8.0};8]|*8f{8Gz8hyPʊ8y-8Dx%8rw0v8vPZ8xu}>8t"8.t 8^so8{rω8qo8p8#p}8KoJb8{nF8;m+8l8 lO8h:kڈ8jj⾈8ři8ehv8g5m8(gQ8Wf68ieE8Զd8+cn8vcȇ8DbG8sa8`u8_Y8+_>860^!8=_]8>\89[:͆85Zǰ8;Z98AJYw8MyXZ8^W>8oV'!8V585U78dT$ʅ8S 8SR8Qr8!QU8QP88gO8N8M8:M5ń8e=L8|lKO8}J%p8hI1T84H88'H28!VG-8BF8EP̓8D8 D289Cd8(fB"i8ArQ8@\:8v?#8?78<>68e=8<т8;8Q:<8N:e8k'9p8K8y}8o7xo8m6b8в5V884K83A83&98.218J1+8(f0%8l/!8.k8-w8,8+ 8p*8 *Q 8)$81((8C'.8]U&58f%=8fw$F8#P8"[8!1g8@ s88_88ج8t8̂8%݂868G8X8Wj8#8,|58PF8ʠX8Gj8{8888޾8( ΃8= ݃8Q 8f 8{ 88 8پ+8r68?8% H8c"O8=@V8JZ[8(x`8.@d8{pf8 h8|i8 Hhi8jh8f8>c8,8`8c[8VV8춧P8$I8;鶒B8pf:8xd18䶢'8n88tන8޶8ݶ8ܶ܃8^ڶP̓8=ٶ&8׶.8 nֶ`8 ն8Ӷ8t8dCҶ_8>жJ8϶48!ζ8̶8Xa˶8fʶ3Ԃ8ȶ8;ǶB8HŶ8BqĶ`g8= öSJ8,8'2 8¾8Pρ8ۻ8,cj8S縶k8g?I8嵶J&8w^8!Բހ8E858wo8쁬wI8M㪶 #8@{8G8略[8A5 8Ǻ~8ڠi~8"~8g}8𩛶r}8陶}8'|8cQp8:o87po84n8 1n8v.1n8o+m8o(:m8x%l8݈"5Wl8*?k8uk8Uk8_!{j8]'j8á i8IGMi8E ]h8Q ~vh8  h8?dg8*=g8|/f8rf8:f8=ue816Ne8yd8?d8ݵ7d8ٵFc8Yյ҆c8BеX1c8*l̵b8;%ȵb8õ%=b8a8wa8a[a8RAa8%`8 A`8J`8ޢ `8\Ȟh_8_8ƖbX_8|y _8X^8j1-^8^^8ZсR^8,{."^8Hr]8 jL]8ba(]8bX o]8OD]8F]8=^\84\8T+Ф\89Z"e~\8X\8`3\8N \8ӝ&[8g崛[8mѴR[82|[8},X[8I>&4[8Ѐ;[8jkXPZ8=.WZ8DZ8_e1Z8=@[Z8i7Z8E3Z8$3FY83^Y8])4NY8U4Y8,4YY843Y814 Y84X84V8G5V8V5iU8h5U8}5U85omU85DCU8ο5U85xT85T865MT8^5nT85CT8 5T85S8S5S8A5S8u5xlS86(AS8[6S8r 6nR8I) 6R8F6rR86e6gR876336]P8i76EYP8%:6 -P8L=6P8r@6O8C6O8F6=|O8I6OO8M6#O88P6WN8aS6V8)-;8Ŵ8!87^v88=Й8'81N8X8񱷩e8J8!/8R 8R#8믷9ߘ8\BĘ8D8G8JLBs8䭷7X8|%=8 "8C8vE8ݫЗ8u8 W8 $8(>c8>֩H8Wnb-8d8o8p6yۖ8kΧ8cfä8Ta8}8 ֞Ea8=m^E8kw)8 828ɜՓ8`8v8`8&De8 !I8T,8뙷8$8/mؒ8:68MG8`ޗ8qug8 @K8.8:8ѕs8i/ڑ8!꽑8=8].T8~œ i8\L8t08Ŋ"8!8޸ې8OA8搷8}8?j8XM8B18؎"8Wo8C܏8Vп82W8 ɌІ8C_Ij8fM8q18j!x8U81Mێ8≷X8x8K˄8ᣈg8i9K8·3.8^dH8]8cA8mb&8a 8Y` 8_hӇ8 +_8VZ^֛8]8\c84[G8[+8FZ(8vY8rX.ֆ8W8DWݜ83V8+cU=c8TYF8GSZ)8R[ 8!RO84QQC҅8P=8O88LN2{8 NG^8?MpA8oL$8%K'8J87I}τ8-Iu8\H8G3|8F`8E0F8E+8FD8sC8ZBރ8fA]ƃ8@W8'@ݖ8R? 8}>i88=VT8փ8 8i 8 :8 ) 82 y8H%8 ` 08w1:8kC8ũL8S8,Z8e`8e8{7i8l8o88ap8 p8Oap8o8+pl8i8!f8~~a8t\8 FU8O8~G84?858{,8c!8y8߶ 8޶8Mݶ 8(۶x8-ڶу84ض8V׶8ն48XԶ8#Ӷ4x8Ѷc8z]жN8ζ98bͶ\"8&9̶ 8ʶ8uɶق8ȶ˿8aƶE8fJŶ8ö n8{¶aQ8 48E85>8Qüׁ8N䷁8 ׹G8&\v8ݶHT8@\18>׳8N8'°ǀ81Q8v~8|6Y8i384ʨ 8&(88fգ28j'~88vB~8ž?D~87 }8Q}8 Q}81ؗ|8w:|8(WX|8.|8*ѐ{8 \{8H{8҂kz8nYz8"z83y8nPy8Jx8瀶ޜx8J~Ax8 zw8Hww8sR+w8Opv8LlCmv8ci v8 eu8b,Iu8_t8Ϸ[t8BWXdt8sTs8QNs8RNr8K}r8ݿGr8!Dq8xDAZ=q8:>.p8{:Gdp8f7o8e4o8x1o8p.n8f+=n8c(lm8h%`m8u"l8rl8l8Dk8=k80j8nej8ѵi8, i80] )i8!h8&[h87g8$ْg8A)A0g8>f8 dbof8X)f8#se81$Ye8]ܵfd8wصDd8;~ӵQd8Rϵc8ʵmc8&8ƵZc8r c8v߾b8H,tb8X+b8{ʰa84a8]\a8Q*ta84`8ƛǞ`8P,c`8_V)`8B(8_8&튵_86Dž_8heR_8Y9|y _8~s^8Oj^8bw^8EYe^8z]P9^8aG^8Q>]8g,5C]8+ђ]8"j]8:C]8Y]8(\8\8[v\8Ѵ\8⽴v`\8<ԩ;\8=\8/[85YZ[8ʴ/[8Q[8g[_[8D:[8dͱ[83Z8,03Z83sZ8'4Z8T4p[Z8C45Z8o4Z8v(4Y84TY8w4Y8re4uY8,5NY85'Y8(H5Y8I&51X8i25PX82Q>5VX8NJ53`X8U57X8/a5hX8m5W8y5W8溂5W8F5kW85BW8ھ5.W8ǚ5V8Ӡ5V85 V85rV8Y 5GV8 $5V8g?5`U8C]5U8}5kU8Ϡ5sU8*5 IU85AU8_5OT8C5]T8p5BT8l5rT85FT86T869S8=6S8? 6WS8 6mS863BS8,6S8K6R8Zk6R86WR8\ 6gR8#6;R8&6R8^*6Q8_5-6Q8 Y06Q8 }36_Q866~3Q896YQ86<6'P8!@6P88C6P8L_F6hVP8wI6*P8L6O8O6tO8 R6 O8&V6筚8/ִ,8njx8@]8ßB8A8$(8вU 84i8י8Ἑ82 8ʰ(8YcLl8bQ8x68d,8Į8]8Mʘ8}8%k8Yy8OVA^8(C8 (8 88Ow֗8?穷D8T8gÄ8x|i8G.N8ߧ28w818w8b?nŖ8Eץ8&o8's8̞W86<<8OΣ 8f688NΕ8,8lġ疕8[B{8m󠷞_8ފC8D"4(8n 8P8@螷Ԕ8{8"8䭝;8ENe85ܜ`I8Pse-8i d8[88Lٓ8Ϛ78f88Δh8+L8˜08ZX8'8.ے8J8e8ML8䕷k8{N828O8@A8fؓݑ8o8D8՝84l8̑wP8c348$8"8(Yߐ8Ð8U8쎷d8On8Q8:58G8݌[8sߏ8+ aÏ8^ڦ8z6M8̊m8~bQ8lu48B8$ 8Nގ8aO8䇷8zއ8k8"N8 ;>18ЅS8ei8r~ڍ8萄8i&88Qf8+炷I8|,8 8j;8P>d֌8DԀ8Jj圌8g68@-c8Y~F8}y*8|8{8L{OՋ8;z 8iy✋8x̀8wd8vH8"v,8(Qu08tx8sي8r<8, r8xA܃8=Ń8=8=<`8g;Ѕ8:r8h9_848L8;8;8~.7+8S68mx5 84M8Ǿ38282D܂8!1҂8@0ʂ8^/‚8{.8-8,V8+8*8*᫂8)۫8/(ެ8gF'8a\&8q%8$8ٚ#8î"ǂ8G!ς8 ؂8W8c8_8$!83| 8F8Y'8ls48?B8ZP8^88m8{8"8c8K 8$!836Ń8mKFӃ8`38v 8 8 88 8 8@+868i@8/I8jIR8cY8~`8f8k8[Mp8s8M-Wv8qx8x81x8Px8Nev8fs8Lp8˧l88ﶰg8Yh b8:붣[87궎T8L8=D8:808? &8v8z߶-8! ޶8ܶC8 ۶8Tٶ3Ճ8oBض Ń8ֶ8omնJ8Զ8Ҷk|8:ѶLh8϶_S8sζ=8iͶ&'8˶8Lʶ8ȶ߂8Ƕł8!ƶc8Ķr8Töt8MX8;88襽8y48UP8\I88NϷ8 RX_8Ѵ=81NU8:DZ8I}81}87ɕ|8 |8M=|8]&{8.Ύ,{8I D{8Kez8*z8ȇFz8y8Ey8"kAy8ŀ/x8 ~+x8z^6x8ww8}snw8%p#$w8Qlv8Bihv8$e v8kb'u8_oIu8}[t8EXt8 T~!t8&Qs8GNWs8JFr8G&r8uDL"r8z;Aq8>uPq8:p879|p8<4Zp8t18o8`.:o8S+Gn8EN(cn8O%m8#Y"m8iX!m8iyl8Ll8k8xk830k8ZsIj8˻ 6Aj8f i8eui8i8.Ѯh8?Lh81Ug853g81D/g8Vd鵨f8$䵏wf8ߵf8۵ye8qֵne8ѵe8C͵d8ȵeud8>Bĵ%d8ϿJc8eqc8~kBc8祲7b8ONֳb8Gob8},b8\a8Sa8Øna8v13a8K(&`82׋`8ډ`8*~T`8+} `8t _8)lڼ_8U cی_80Z^_8^0QZ0_8;H_8>^85^8|,^8#Y^80^8%^8;]8Z]8.]85dҴl]8,~F]8(l ]8/\8ǁo\8iZ\80\8&&@e\8?\8BuJ\84:[8 3[836[8'3[8%4^[8R48[8 ~4[8=4Z8F4]Z84ʟZ8U4yZ8$4RZ85*Z85Z85Y8 /&5Y8-15Y8=5cY8FI5v;Y8 U5Y8`5X8l5X8ӝx5X8 E5oX8?5FX86>5X8@5W8F5|W8}P5W8\]5vW8m5LW8쀲5"W8I5}V8P5+V8,5V85)yV8c 5yNV8.5#V8DT5U8|5U85U85wU85LU8[/5!U8o069T8J6T8sd6eT8 6sT8 6hHT8w6T86S8%6oS86S8|26mS8R 6AS8Ss#6S8&6,R8)6/R8,6%R8/6fR8l36:R8WC66 R8g96Q8Ì<6Q8?6HQ8B6]Q8E60Q8$I6oQ8KL6P8sO6P8ٚR6EP8U6RP8CX6,8>k8Ϛ8L8H%8RᲷd8yd8EI8.8&C'8۰K8suޙ8g Ù8Ĥ8"=8xծr8mW8<8\!868ά8%gИ8e8|8/c8Ǫ7d8` I8?-8]8r(j8*ܗ8X8𧷜8N8 n8S8PJ88襷8{8^8:ʖ8 H@8ߣē8wHx8K\8BA8>%82֡( 8m8Kҕ8˜H8A48˟8 c,d8egH8,8(878jWٔ8-8ƅ?8K8Pi8"KNM8:⚷F18Sy78f!8yݓ8>8՘Ӥ8l8l8隗]P8 2-48*ɖ8K`8sߒ8eÒ8%.88 Tn8Q듷R8yR688װ8H8&ߑcő8Fv8b ጑8up8};fT8{ҏ!88li8R8*G8-Ɛ8č8A[>8q8UmU8988_K 8኷8wƏ8 r8׍89/q8kψT81e788Y80&8ɻĎ8WQ8慷8k|An8jQ8o48<8҃8hݍ8 8^,8)U8ھj8TM8ꀷ08C88uYڌ8~e8}}ޡ8D|d8? |h8q9{L8fzb08Xy28x8w ܋8 w8MLv+8zuX8?tl8sP8s^585r8dqe83p8oNJ8nu8f"n<8Qmv8lZ83k?8j$8j 8f@i8!phӉ8g8f8te85/eg8^dL8c18\b8a8ai8M`ň8@}_8^X8]r8] ]0W8<\~;8k[8Z8pY8GXˇ8'+X}8[W28Vv8$ULZ8@T=8fT!8KSa8{R8.Qʆ8P֭8 P됆8p=Ot8mNW8wM*:8 LF8Ko8.0K8`JDž8%I8H,8Gq8"GV8.RFA:8E8ʱD8@C8C=΄8m?B"8nAx8O@?8%?h8>WP8$>88P=!8|e8AµZd8Fd841Xd8!Cd8=c8$˫Łc8:]=c8 b8dJb8#3{b8=b8Vb8a8a8Wa8N8"a8dv`8pmɺ`8pd`8d[sX`8IR)`8 I_8?3_86_8sA-u_8#,J_8HS _8w^8}^8'^8#:}^8TӴU^8 dw.^8J^8 ]8a]8\]82m]8G]8v!]8_Q\8\8I3\8)3\8=3c\8#4=\8P4`\8Z|4[8cx4}[84ݣ[8sj4}[84V[84.[8 5[8T5Z85\Z8&p%5nZ815$hZ8g<5?Z80tH5LZ85T5Y8`51Y8.k5aY8w5wtY8΁5dKY8fƇ5)"Y8F5X8&“5JX8ř5X8͟5{X8ץ5QX8v5'X8~5W8 5W8!5+W8?;5~W8W5)TW8wv5y)W85V8X5V825V88 5}V8g35RV8l_5'V8p5aU86U8Q6U86=zU8j+ 6NU8F 6&#U8b6T8o6T8ۜ6-T86etT86HT846T8J#6S89&6S8![)6ҘS8|,6lS88/6@S8#26S8y56tR8O 96BR8-<6R8eR?6cR8wB67R8PE66 R8fH6Q8K6Q8O6Q87R6YQ8_U6>-Q8fX6Q8[6r\8T(A8&8bY4 8r8e֚8"Ớ8^8SI8A찷sk8P858}8M8;殷8~!ʙ8*8138zG5y8߬*^8xC8C (8 8@8ت֘8q8B x8hE89j8ѨN8i38^8ܙ818ɦ|Ɨ8a'8̏8̑qt8)Y8=8zYE"8P8a8 ϖ8h8JP嘖8硷[}8a8&:F8*84F8ݟT8 uו8 껕8ᣞ+84;l8ҝh8iL80868a/,8ƛ>ݔ8]J8O8F8 #Em8*6Q8BQ'58[蘷8v88ē8D8ۖv8sTp8A #T8l7888ϔ8gi869ǒ8i8,؎8Òr8[wV86@:8d 8 88Neɑ8号48|8t8ت|X8A1<8؍8Oo8I8ʐ8.38ɋ&8`u8hGY8<8"T 8츉8N?8䈷ʏ8z 8h8ut80< X8цN;8g8(88T(<Ȏ8彄k8uS8郷q8~T8E+88멂[8?8\Ձ8(kč8H8񖀷8,n8PR81~58};83 }87|U8d{Ì8z8hy{8xXo8xCS8qHwH78rvvZ8u8t8zt ȋ8&0sk8^r␋8qlu8p Z8o>8`ov#8JnB8,zm8lҊ89k8k88j86hif8h#K8g:08fP8N'fm8%We߉8dĉ8c8b8Xbs8.FaX8v`v=8ڥ_<"8^8^8m5]FЈ8Ne\ɴ89[+8/Zz}80Ya8<%YE8LUX)8mW 8V8UHՇ85U⸇8FTp8 wS8RNc8QF8Q)8y9P 8:jO(8 NJӆ8Mm8L8-L|8^K_8J%C8I}&8pH 8@"H8SGEх8F088EV8D}8Dkb8DC`G8tB,8AT8"@g8@ބ8d0?ń8u^>]8=W82<}8;f8;P8q=:.;8Mh9G&88"87868 6,ڃ845-Ƀ8([4 83ɩ82k818|0d80u81/Kk8yR.a8ar-Y8,kQ8ݯ+J8p*0E8.)@8")<8U!(b:8;'88U&%88o%u88ԇ$98#;8">8!B8 _G8L8S8&)Y8+?a8 Ui8jr8{8q8P8?8>8W8)8ǃ8T1{Ӄ8G9߃8^8u8;8 8b 8 #8 m.8# 88 B8f4 K8MT83gM]8Ve8El8r8x8}8d8z-8hM8E8!8hF88^.8Ov88򶼄8P8|8 v8oap80ni8P@a8綔Y8:涚P8F8 t<8 J18r%8ۇ޶8 ݶ 8۶w8ڶ8!ض+߃8=׶΃8"ն8GcԶ58"Ҷ8Ѷ8+)жr8ζ]8j]ͶqH8˶J28ʶp8w/ɶ8Ƕ8keƶ҂8zĶ8ö80¶̃8I;h8D\L8iカ;/888bՁ8&T8t8F3v8CV8k448r8r)8&π8{_8C8쨶e8{UA888|h8k٠o_838&~8ޛJ~~8 1I2~8&}8Tϖ}8kK}8}f}|8%|8fT`|8?|8{L{8j̊p{8{8JWYz8'|z8ჶU)z8y'y8tm݁y8g}-y8yx8vox8s*x8mow8?l=zw8h w8rev8bkv8^v8\T[^u8WUu8Tt8UQ;t8N=8t8bJjs8|Gus8=Ds8Ar8=1Mr8n:q8u7q8Q4q831Fp8.Tp8S +o8'o8`$#o8Z!7n8)Wn82m8+m8Il(m8nDl8`l8 k8 ck8K9k8j8Tyj8>j8P=i8 `i8si8"h8Qh81g8Sܵg8#׵Mg8q%ӵf8Yεf8ɵUf8ĵf8G4Je89rme86#e8q[d8ʭd8O?2Nd8鷤k d83Ac8ﱛc81Hc8Jr c82b8%Ub8/o\b8֪ %b8Exa8h-o,a8G fa8(\gTa8SP#a8DdJD`8A5`87`8A.h`8=$<`8+0`8q_8л_8$_8ph_8ԴH@_8_88s^8&X^8𳃴^83^y^8!4R^8 ,^8I^86>S8B64S858cJ8V85[8̙YŔ8cX8O83Gq8Q)1U8r98W88酖8ȓ8?8rKe8┷Bt8yX8;8W8?8֒r8nH˒8>8y83v8ʐZ8bd>814"8L 8\'8e͑8cUe8S썷(81x8\8T@8pG $8ދ8tY8 ΐ8u87!8͉y8'd.]8C@8K'$8G&8-8R]Ώ8熷8}8M^x8[8>>8DԄ0"8it88,ˎ8*28zo8)Vu8끷X8:<8{8Y8OC;8ɍ8~8 ~8s7}t8 d|W8А{M;8z8y8y8Exʌ8@sww8 v8uv8#tZ8o+t$?8Ysy#8r8=ql8pы8p80Dob8ksn/8md8"lH8l-81k8`j8Ki݊8h$Š8gN8sgx8?Ofq8eV8d;8c!!8cE8}>b[8cnaqЉ8T`z8E_o81^P8'.^*d8(^]H8.\-89[A8UZ8uZ4ۈ8NY8~Xʣ82Wꇈ8Vk8VO8z@U38qTe8S8lRއ82R ‡84Q~8ePψ8 Ol8 NWO8;M28q)M8ZL8K܆8CJF8I8I腆8QHTi8[GL8F08Em8E8cFD܅8wCQ8zB8A;8Ap8g7@V8f?<8Ε>t#8t= 8<68| 88s8𶗊8*}886.y8Uq8lj87-綋a8aUX8]N8^⶷C8g^88߶X,8޶8Tܶ"8p۶8Lٶ8&ض8ֶ:Ճ8Fն4ă8Ӷ{8)nҶ8YѶތ8ӛ϶x8c4ζ^d8̶O8g˶981ʶj"8ȶ 86Ƕ8ŶPڂ8.jĶ8ö8Mc80)q8Bž]U8hX88黶8 y{8:q8 8gϢ8<86"2c8B81 !8Ś8.ހ88;8Afuw8Ѧ_T8:08NJ 88[a98SKA8~8p~8ƙc~8s~8Alt}8ZÁ}8 5}8 X|8|86yN|8e9|8߂{8ˈb{8F{8]z8Crz8! z87y8}#|y8y(y8(vx8rx8 Wo*x8k>w8h4}w8e+ec%w8Wav8 p^gsv8[>v8W?u8nT^bu8 Qu8MQt8ԌJ3Jt8IGZs8 Dԋs8@+s84=r8um:ir8B7r84ԥq8t06YT8TA6S8D6S8H6KS8?'K6gS8MN6n;S8@sQ6S8ՙT6R8W6R8Z6sR8^6\R87a6 8z]8+՛8ປ86D8ܱV8,uj8 O848>'8֯Q8ko{8ɚ8288ғ8Эx8=i]8C8ٙ'8!2 8dʫ8b֙8׻8#Š8X+8éj8[hO8;488$808HTbǘ8^즷!8iڐ8lu8mEZ8pL>8h䤷#8X|H8A8'ї8D8ۢ8s>8^ c8FH8:,8oҠ98 j8ږ8(80㢖8'Ȟ?8_k8O8]#48%d88LT8뛷ĕ8Â&8?8!Xq8OHqU8zߙv98v8 8~8<}ɔ8=ӗt8bje8Pu8AY8/$=8Ǖ!8M^88̓8#8<{8}RXx8钷5\8@8A#88F8ސϒ8;uV8n 38{8:^8юB8h&8\ 8񖍷%8-ё8Č8[l8D(}8`8D8 :(8L 8≷v8/yӐ8h8*8;}8ч*a8gD8(8wt 8J)81ҏ8T8ꄷ瘏851|8_8B8DA&8ւo 8l8l Ў8,b8-8Àz8Yp]8^@8j U$87~8c}\8S|΍8{8zL8zz8Cy]8pxA8ew%8v 8u8'uь8Ut88s8lr~8qmc8qG8o>p,8`moN8pn8mڋ8lп83*lĤ8Yklj8jn8iS8Ah98h:8Ggr8_wf8%e͊8d&8dd86c}8fbb8aH8`'-8_D8&_T8V^O܉8]D8ζ\%8[8%[o8`GZPT8wY88XC8W8W89Vʈ8*jU 8T8Su8RY8-RJ=8^Q 8PW8O8EN!ˇ8#Nr8UM8Lt8K1X8J`;8XJ8LI8~HM8:GȆ8FF8fF珆8DEs8GvDW8}C;8BK 8t B8/:A8j@*υ8?Ŵ8>˚8b=/8)=h8tX8b8{-8*F8^8wL"8+838<8E8Z ;N8 V8( _8B +g8\ n87w ev8 y}8?)8b88=8љ8%=ᝄ8[P8{83B8{ŧ88`8dR8ӞȦ8Ǥ8?8^󶶞8񶙚8F֕8EX8-8hN8{8:趎s8j8Ia8эW8::L8ඬ@8޶w48I~ݶ'8ܶ87ڶ 8)ٶ8׶8k*ֶ܃8QԶ˃8!LӶ߹8Ѷq8tжP8 ϶8VͶk8:̶V8ʶ@8lɶt*8iȶJ8Οƶy88Ŷ8öɂ8|i¶G88g{8*_8罼C87O'8޹ 8Nlk8T΁8ů8C8`@q8 PQ8勯08L8!78ù8j8tۧ㉀8>Ig8D84!8uR8䟶k8-D o8ڡ)'8G~8V~8L~8:~8V4}8n}8z#}8I|8֌|8E勶@|82{8n~ͦ{8RʆY{8 {8az8nlz8lz8|y8m"yzy8Ju(y8RWrx8nx8k.x81hw8dcw8xa!.w8i^v8ZFv8uW&v8O%Tsu8TPWsu8َMsu8IJt8KG`t8Ct8{@ns8[=xHs8+:r8~7r8i3u+r80q8&-kq8$*a q8w'p8Hm$Jp8h!o8>j̉o8q)o8n8)/jn8 n8;m8 Mm8@& Al84[-l8Җ6l8Pk8Ck8u&k8j8\Fuj87 j8gni8޵ti8ٵ"!i8Եh8ϵ]}h8ʵ-h8ŵ7g83Gg8Fg8f8L f8lf8Ĩ!'f8e8Pe8^e8蕵e87d8Ed8؇/gd8),d8A|c8s޻c8 jOc8R`Oc8=7Wc8~Mb8,D}b8:gb8K0@Ub8I' &b8a8{ a8 a8 pa8x-AEa8$ش4a8rô`8ˮ`8~Aϛ`8ಆzr`8duI`8b_: `8t%_8̳_8Uoŧ_8 _8]2W_8320_83z_8@4^888H4^8 mt4_^8n4i^8NŦ4A^874^8\4/]8^n44]85]8 5y]85Q]8w #51)]8.5]89:5\82E5\8Q5\8oQ]5g\\8i53\8t5 \8a5Z[8R5ݶ[8G58[8@5xc[8=59[8D>5[8xB5Z8J5aZ8T5Z8b5fZ8s5'6YT8 YA6 T8!}D6T8G6KoT8wJ6BT8M6aT8bQ6S87T6]S8]W6ΐS8̈́Z6LdS8]67S8x`6 S88c6yb8#G8_-8TA8g8共ܛ8`8ض,8QO]8篷q81V8;8!8jI*8᭷@8zVК8sf8Īo8Cq8\۫sd8soI8 d.8#R8^<@8ԩ(ݙ8l ™8香8ċ8C5p8`ͧdU8{e1:888-w8ť)͘8]ⱘ88F{8%_8D8U/)8h 8>d8 ֗8Ѵ8L8B䠷8{i8zM8&18BY8?ڞ8qߖ83 zÖ8ȧ888_ϜWp8fT888E8,-8ÚS8Zsɕ8򙷌8S8~ u8Y8N=8旷!80}8[8͔8B8ٕ8*qzy8fk]8UA86@%8"Γ* 8he8Г8մ8A+8‘|8Y`8kD8^H(8+ 8ܶ8NӒ8=厷ɷ8f|88Zc8A0G8،*8xo8Q8T֑838{ʊҝ8a8/e8H8`$x,88P8燷:א8-}83@8.8?2e8ՅH8j,8v8j8-,9֏88W8g킷U8(c8 G8i*8}D 8Uڀ486pԎ8' 8?88Kd~8}b8Ӽ|2F8O{)8{ 8BzK8oyՍ8x8w✍8Qv8$vd8RuI8tS-8s8r8 rfڌ89q꾌89hp8o-8nl8mQ8#m68(Sl8ok8ձj8@iʋ8i⯋8X@h8ogJz8f_8oeD8;d-*8/dx8^c8ݎbڊ8ξa[8`8`׉8N_o8~^2T8]H98>\K8y\F8?[.8pZ͉8kY8X_8mXz82Wg_8bVC8jU (8:T* 8+S58,&S-Ԉ8GWR 8xQӛ8P8Oc8OF8%NN*8Mz 8L8GK#ԇ8"Km8GJ8xI}8HSa8GD8G$(8@F 8rEE8Dӆ8RC8C 8m9BY8jAc8@H8?-8>38->8^=߅8<Ņ8S;8T:8:|8I9d8v8M87=78z6!85k 8'58R4;8 }35ф828h1x80œ80Ԍ8E/}8k.o8C-2b8յ,U8+J8*X?8W*t58$A),8=b({$8'Z8h&8%8.$7 8<# 8#88"8FU!8dq ?8888}8 88-8G8a8|#8)8%0868=8D8-L81S8KZ8?fgb8i8 )q8 _x8X _8\ +8 8#" 8=ᘄ84Zm8v8/8Z8888?/8P88,ȹ8u.8B885_8H8g83`٧8ﶝ8œ8.{388G8ű綊~8uu8䶲k8;a8{%V8 ߶hJ8Hs޶=8fܶ08Mv۶!#8ٶ8ض8x׶83նq8*Զ^ԃ8ʺҶƒ80MѶ)8϶8:vζT8 Ͷt8˶_8;ʶJ8ȶ38hlǶ8ƶ(8GĶ8"5ö%Ԃ8|8 c8{88k8O8찺X38@8xη8JZہ8㴶ڽ8MkK8TY8s`894A8p!8뫶8c߀8٨8KG8ƻ{8)Y8S7882a;8>ĝ_8% X8L8~8:~8>:~8Aꓶ }8?,}8ғ`}8掶l}88|8|8ى'7|8D){8Gxӟ{8ƄuS{8w{8cz8djz86|Dz8(xy8>u.}y8q,y8nx8!kÉx8g&7x8kdw8aw8]%;w8&jZv8AWv8FS8v8KP u88MɈu8SI/u8F;t8vC{t8>@!!t8r =s839is8t6 s8t3ǰr8^d0Sr8GG-\q8Z/*Øq8';q8$4p8!Yp8!p8 o8fo8# o8Z9n8QUPPn8rw am8 m8>m8l8>al8j1l8k8-+򵩂k8쵏,k8絀j8GEnj8ݵY0j8Q׵Ai8Sҵ&i8U͵K=i8ȵh8Sõh8ѤUh8A h8ȴg8D䯵Gzg83g8.f8[f8Rhf8'f8l e8-ǩe8gle81e89d8&vd8jld8bNd8IdY4d8Oc8*F2c8f<~c82LMc8(c8b8J5 b8J ݏb8R^bb8љ5b8%qڴL b8(+ƴa8/DZ]a8Ca8I@]a8gK3a8= a8D`8fӳ`8|9`8_e`8̲2<`83`8ȭ39_84_8 E4_8"@q4s_8w֎4QK_8/*4#_884^8#4^84A^8?4΁^8. 5\Y^850^8?+"5 ^8 -5I]8/U95Q]8D5?]8ŧP5d]8`\5z:]8V$h5]8qs5=\875\8҅5\8 Ƌ5@j\8@5e@\8K5p\85`[8556[8龩5[8ǯ5m[8&Ե5C[8.5[865Z8 5Z8p!5=Z8w;5KmZ8(X5KBZ8w5>Z8 5Y8e5Y85Y8p5(jY815>Y869Y8*6X86X8 6gX8 6dX8'68X8^B6 X8]6.W8y6?W86OW8!6E]W8$6;1W8'6$W8+6V8/.6ڬV8?P16V8?q46hTV876)(V8:6U8B=6U8B@65U8D6vU8AG6fJU8eJ6U8M6oT8P6T8S6^T8V6kT8!Z6??T8H]6T8o`6S8c6hS8f6๜8Ͳ%8ej8i8N8#/$48ǰ\8`88ț8o)-8W8@Z{x8򭷞]8B8\#'8 8T8U쫷֚888+셚8iMj8婷O8}488Hy8nFS8ާ-ș8v8Α8ꦦv8?Z[8 ץ@8o$8! 8&D8'7Ҙ8ϣ8 gG8怘8֖e8."J8ơ.8J^K8 8ȍYܗ8v%8S8Tɉ8O잷9n8݃R8] 78ֲm8IJ8᜷8yXȖ8e8ڐ8?u8L֚HY8mu=8!88138gʘ͕8a88 z81'^8dB8U&8앷 88Hє8굔8Iۙ8 ᓷ}8Uxa8E8릒)8<> 8Ցt8l^Փ8-I8y3828 ʏe8OaH8,8Ə8&8ؒ8:Ue8K쌷;8H8>g8K8G/8ފP8su8 ڑ88(9?8ψ煑8ei8D0M8}08(^88Trې8ꅷ8x88ji8UBL8(؃H08m8&8ڏ8X/8)Łc8Zτ8Ah8K83/8)e8%~:8A}َ8}|h8|8OB{8nzzh8›yIL8x&08w8#w8aPv܍8}u48th8s8sl85r`Q8cq58^pg8o 8n8vnȌ8rMmf8~|lZ8kVw8j_\80 juA89i&8ih 8g8?fZ֋8e8'e8vWd^8Rck83bQ8av68a8G`'8+w_s8L^ˊ8r]8]'87\J{8:h[Z`8ZVE8YD*8|X8*X8ZW؉8yV8JU80T셉80T-j8LOSZN8|Rm28ȱQd8.PO8Pވ8DFO8wNn8M8Ltl8 LO8?KL38qJ8I8)HL݇8dH8:G8lF80E k8kDN8Df285CC8gBN8Aކ8c@†8?8Z.?8_>q8f=QW8<==8];#8X!;? 8P:d8*9؅888F78 78n86|8:e5!g8{4&R823=8N29*82S8<1"8e08?/ 8.(ӄ8N-Ą8-ൄ8),8N+후8 s*78ٖ)U8(W{8t';r8A&i8t&b8@%\8$`$TV8#oQ8"_M8(!J8; G8E8"D83D8O E8lF8G8I8L8OP8S8! X8o-\8Ha8cf8Kl8Hq8{w8}8Ӄ8v݉8"珄8r> 㕄8!Z ̛8u 8 8[ g8m8088"8@D„8~_jń8~Ȅ8Bʄ8L˄8̈́8̈́8IL|̈́8̄8˄8+Ʉ8z)DŽ8 Ą8 C8v㻄8ж8,$8 ת8䣄8QD8m8X$*8W嶾8W䶲w86wl8 ඟa8g߶U8ݶI8dܶ;8@ڶ-8kٶM8D׶8{ֶ:8ն8Ӷރ8(%Ҷ̃8yжd8>I϶W8NͶ8r̶A8˶@j8~ɶT86ȶy>8Sƶ'8eŶE8rö?8¶߂8\+Ƃ8aެ8|V8l꼶w8}\8l@82$8N,88B!́8ʲ8P8qԯq8UR8Ԭ38P68ʩ8AҀ88(8y]o8M8$p,8O؞ 80>8ܡ8hE8b~8~8x[s~8v,~8]ϑL}8&}8|U}8Ҍ }84&|8wy{|8ˇ2|8 {8oa{8CR{8I{8~z8i{mz8| x z8ty8JTqPy8m=5y8jx8Hgx8ycDx8`:w8I]ҟw8`YLw8Vv8j_Sqv8PGOv8Lbu8ˍIu89NFKu8;Ct8?ƛt8xd8%4!Fd8s*Bd8 8c8c8 c8Tc8f&c8ݴb8Ҵȴb824xb8떟tb8܊GIb8} lTb8["Ba8Ba8`8۳a8ua8;ULa8l2#a8sx3`83`84&`8ċA4V`8Bm4V`8]4-`8jl4)`8ڹ4s_8c4_8&4 _8&49b_8fJ 5i9_85_8A!5^8,5^8f85n^8 D5'l^8O5B^8j[5,^8")g5R]8r5j]8~5]8dP5q]8A5G]8|75]805\8-5v\8r.51\8|25t\895WJ\89D5\8Q5-[8a5p[8'u5[85t[8a5I[8g5[85Z8t5JZ8%5Z8+A5qZ80g53FZ8 5Z8\66Y8_r6Y8 6Y8 6=lY86u@Y8=6Y8?6X86X8W"6X8n>6dX80[!68X8x$6 X8'6W8^*6W8-6RW8u06 \W846/W8576W8MW:6:V89y=6ߪV8@6x~V8C6RV8F6%V8J6'U8)M6U8NP6U8sS6sU8RV6FU8'Y6ZU8h\6T8 `6 T82c6vT8Zf6gT8i6U8Pv8ۜ8^8?[8dذ8pp8_ V8ڡ@;8M:w 8Ү8#k8ϛ88L468̬L8dcd8SrI8{.8-}8<ƪ8^tݚ8pš8^88'L8k-q8WV8立:8燧8 8-q8KP7Ι8c襷8q×8||8Ca8HE8ࣷ*8xS88lؘ8T@H8/ء8p8k8O8V7148 ϟ8f88R8핞%Ɨ8-8 ŝ8\`s8󜷼W8m<8"_ 8.8Q8蚷/͖8i8e8y8E]8ݘ B8Wt)&8 B 8΢U8:`ҕ8<іl8thx8}~8떕b8).F8lŔ~*8\v8n8Ef֔8"]8޹U84QF8葷>f8/J86&.88E 8/ݏٓ8t体8 Ρ88T:i8эM8h18p8S8.0ݒ8ŋ 8[ꤒ88l8n `P8")48M8P䈷8z]ߑ8?Ñ88=a8Ԇn8GjQ8e758s8v,Q8o„ߐ8_X^Ð8Eަ8)^8m8߯VQ8E48ہI8lq8MAߏ8383A8lj8~[m8 }P8G}48B|88n{8uzߎ8!yrÎ8xO8!x98Nw7o8&|v6S8uO78tu8t82s8`rYȍ8qɬ8pS8Oou8oZ8vHnP?8Bwm#$83l 8.k 8?kӌ8{3j%8biI8"hz8gg8fM8 fV28[Pe8 d8ׯc8bNj8bb8?aϒ8o`k8=І8<ᵆ8+#<8T;8:h89N8~8<6888B7=8\q68b5a؅84G…83Ȭ8q&38gR28}16p80e]8/GK8#.98 %.<)8LM-b8t,V 8Л+8*8)8 )ք8>1(˄8U'8(x&8%8ȼ$n8;#83"q8")8?!8,_ ی8O~։8 8z腄88a8݄8B28jO8^l툄81E884888 8{4ؠ8PL8\mᩄ8ډ8c98 ﷄ8 8h 98[ ń8~6 Ʉ8S ΄8zqф8hՄ8؄8Iۄ8lZބ8 |87+-8Lm8m'8j8e!8E88C߄8\݄86ڄ8\4}ք8J%҄89̈́8;DŽ88ź8Ya8c8 '趿8+消8@̏8*qp8tz8h[n8޶b8QݶU8۶SH8Qڶ7:8ض+8[׶58ն9 8oԶ8aҶj8Ѷ؃8Cж5ƃ8ζ.8?Ͷ8˶48.iʶFv8ȶ`8CǶJ8+ƶ48Ķ8]Yö 88܅ӂ8Wu88C$8'ֺ3k8XgO83388 8݁8x%28*<808NGe8l3NF8&8,e8{8]ǀ888K8Wqee8bޟID8 I"8y88o|{8ޗ78?~8i~8h~8xW##~8ﱏ-}8= }8jcOP}8A }8|8hfy|8Vz1|8{8ch{8귀U{8p~O {8!zz8fw;uz8.tb)z8py8amy8+ j@By8fx8dcx8`eUx8\:x81vYUw8*Vbw8PRw8iOؽv8BVLYjv8I9v8Eu8BBlu8c?xu8/<)t8P8bit85"t8f2s8&/bs8:f,] s8J)r83&RYr8!#r8 §q8 Oq8 >p8 p8hEp89o8"2ho8I =o8&gn8Jn8|=:n8m8'm8;m8rl8$l81(Dl8޵Pk8uٵZk8&Ե:Tk8ε k8ɵ׸j88qĵlj8E!j8j"Ri8ۏi8񯵊Hi8C㪵ki8mڥh8֠yh8?כ>7h8ۖg8e㑵ǵg8팵vg849g81f8-|f8TKr܆f8ghMf8^f8Te8Je8@se86?e8, e8+"Ud8Աd8Oxd8vxHd8\d8!c8q˴c8*c8;bc8Rgr6c8p c8Fb8ֳb8 b8՗v^b8 14b8RKm2< b8=h3oa8n3ʶa8¨4Ma8=4ca8i4:a844Za84 `84`84ŕ`8%4l`8e4kC`8X 5>`85_8L 5_8+5_8n75u_8C5K_8\N5!_8{kZ5<^8'f5b^8q5D^8|}5 z^8ʄ5O^8-5%^895]85c]85]85|]85)R]8é5']8̲5\855\85]\8;5x|\85xQ\8u 5k&\8#5D[8?5[8 ^5[8~5py[85N[85"[8 5 Z8S 6iZ86ʟZ856tZ8oL 6UHZ81d6Z8|6Y8 6Y8!6̘Y86lY8d6@Y8!6Y8g$6X8<'6rX8Z*6?X8y-6dX8067X8ø36t X866W896W8p=6eW8[=@6YW8_C6-W8F6W8ݥI6V8L6V8O6s{V8^S6NV8_7V6G"V8\Y6U8\6U8_6VU8 b6oU8e6BU8 i60U8uDl6h8N8!S38P8,鰷882RȜ88(K8㮷w8 |*]8tTB8ڬ~'8=E 8ݬ8u֛8K뻛88> 8Jת k8oP8 588V88Ш8hȚ88"8H1mw8pɦG\8aA8%8̑ 8)t8Aԙ8Y8򣷳8l8"g8K8Qu08顷88]ޘ8[˜8&I88xp8PU898?81ם8n8G`˗8ï8358̛sx8d\8\A8Q%8* 8K8XҖ8-8S8Us~8b8LF8䖷*8O{88˩֕8A8Qؔ8o 8 g85K85 /8̒ 8*d8۔8ے86*88Xj8JN8288Q8Mޓ8䍷“8%|8]8n8ArR8؋]68o:8884Œ8rˉ80b8Tq8{U8 &888RP8P醷8Ǒ8[88 Br84؄1V88>8b $8ha 8`8_ԋ8'^8B(^8sX]8\Vj8[O8kZ48Z?8aJYi8{X8WɊ8V8d Vk8Z>U8x8foT\8SA8R%8BR[ 84Q8cfP҉8O8N8M~8.Mb86`LF8K@*8J 8]In8)IԈ8\Hn8NG盈8FZ8Eb8'EfF8ZD)8[C 8,B<8A Շ8%A8-X@8?W8>e84=J84!=n/8S<8; 8ֵ:߆892Ɔ89Ĭ8G8ȓ8w76{8u6c85K8L5p48348Ia3828V1݅80Ʌ8.0A8:>/}8h.m8-8,no8+_8 +|P84*$B8Z)48#('8Ц'8&8U%N8<%87$8wZ#8|"8!+ބ8 j؄8dӄ8 τ8!˄8AȄ8=aMƄ8Ą8yÄ86„8„8pÄ8JfĄ8^7ń8KUDŽ8)sɄ8̄8΄8Cф8Ԅ8ׄ87%&ۄ8Bބ8` 8l~ M8O 8W 8 88y848S"8s88:8X]8 88<88 *8U8Su8;v=u8Mw8!t8J5at8!2E?t8c.s8L+s8`(=s8%r8q"pr8Á;r8vq8{pZq8!o&8q8rp8U{'p8 6p8 3o8Ko8_7o8n8k7=n8P=n8m8dpm8 絘Hm8aⵈl8ܵMl8׵Zl8$ҵ" l8̵Yk8Pǵtk88µ)k8 j8ķxj8Oj8k j8EITi8,#i8#=i8mg8u0g8{k Mg89pag8cWf86TMˤf8ACnf85*99f8 /Xf8$e8ke8me8T'6Z8?6Z8WY6tZ8s6HZ8p6Z8 6Y8H#6Y8&6TY8*6"lY8-6?Y8x=06Y8\368 n#8G8ޛ38rvЗ8 㴗8;28<}8әa8?kF8<*8ؙp818^ȗ֖8_꺖88-08p%Ig8[K8Sm/8<딷88ە8#8sH8ߒ8"wk8zO8إ389=8Ԑ8kߔ8_Ô8Úȧ8#28~Ɏo8`S82788&88>UǓ8l싷88ss8^W8HA;8߉,8uv 8C 8ʒ8:8Jчb8g+v8PY8=8+e!8b8W8턷p̑8􃄷8 8Zw8&FZ8'܂>8%r)"88X8 4̐8ʀ8_'8w8b[8C~ ?8p}"8G|n8{#8z͏8f!z8Ny8zxoy8wg]8veA8vq%8.u 89\t8sю8frS81q8q%8$Apc8UooGH8n,8m8ly8^)lZۍ84XkU8 j^8!i{87ho8mhT8Cg":8sft8e8d@8dό8h1c.8)ab8a=8`e8_RK8 _08P^h8]8D\j8[Ƌ8[W8QBZ8rYw8gXU\8WA8W&85V 8fU8ЗTՊ8So8BR(8+Rǃ8(]QDh8ɎPL8O18oNC8j$Nb8VMg݉8ƈLX8'K<8J 8( Jl8RIvP8H48nG8YF+8OFވ8ZQEEˆ8kDإ8Cl8B m8BP8PA48@|8?8]>8 >Ň8N=8<8*;s8 :X8:>8\H9$8y8 8h786؆8 6^8:5l80j483z82c81M8#1s88 P0#8|/8.`8-8,ׅ8),Cƅ8R+8{*8g)8d("8'qz8'm8@&ga8f%V8$oK8#A8"v88!08!m(8> z!8`B888 8$ 8`&8'8G8gy8|8 ,8g388J8#U8B8a+8z8R8% 8 8 8 89 8X 87x 88h8ks88[Y8n98Z8 }8888Z8ib$88@88N 8.88 M8l8C_8`78\붃8$B؄8bτ8^ń8^ 8㶢8=⶙828F'߶Ȏ8ݶ8Bܶt8ڶf8SٶbX8׶]I8 ֶ98Զ)80Ӷ8Ѷi8=Hж8nζ8fͶσ8˶_8ʶ,8ɶg8Ƕ~8%Dƶ?h8ĶQ8mö:8¶#8 8,@8%^ڂ8T8纶28y8 :r8W8);8#8A_8[˰8mSɁ8٭j8^Ď8nશp8`R8ާ048Zs8Ԥs8L>׀8m¡ͷ85-8`^x8aX8 58886Y8 B8"'k8)8W~8P~8Qa~8S~8Jm}8,ʉ)}8$&R}8\[}8ۄT|85|8X>|8{8|{84yi{8ZuD"{8r8z8:Hoz8*kHz8hy8_ey8biy8R^by8[bx87Xυx8_T8x8άQw8'jNw8)KMw8mG"v8Dv8vA]v8^@>} v8 ;u87hu84u81t8`.pt8>+at85 (s8%us8!!s8r8yr8%r8q8~q8Z*q8 p8J p8m0p8 Io8&>o8ΐ:o8n8#6n8aIIn8Im8v൨m8?ڵ]m8zյm8 еl8ʵ[yl8GCŵ.l8&뿵4k8k8Q*Uk8ik8Ӫi8ߵ!i8h8qxh8 nKh8#dh8fZg83Pg8Eig8;3g81bf8Fa43c8-4b8M4b8AƳ4Ib8V4,\b842b84b8G5 a85a8n<5-a8>)5E`a8 Z55C6a8-@5@ a8NL5`8mQX5`86 d5`8o5Tc`8ė{58`8o5E`8|5z_85ظ_8?5(_8J5c_858_85_85A^8s5\^8ғ5]^85Pb^8567^85 ^8H5]85|]8,5]8 5^]8>5#3]8^5]8ƀ5\8ˤ5Q\8Se6\8@y6X\86-\8ţ 6&\8G 6C[86G[86J}[86MQ[8:65%[8|66Z8}Q 6Z8*m#6Z8&6ztZ8l)6-HZ8,6Z8//6Y836,Y81 66ҖY8@96kjY8^`<6=Y8I?6tY8B6X8vE6oX8H6X8 L6C_X8,O62X8MPR6X8ctU6RW8ΘX6W8[6W8^6,SW8db6t&W8O.e6V8Th6V8:{k6V8n6GsV8:q687r8 ]8Mǝ8;ଝ8Yԯ%8lcw8W\8ϝA8E6 '8έA 8#gk8֜88W0ݠ8ȫ8ak8e-P8658*E8S©N8ZP8Eɛ8"A8`#/8x8S]8릷A8,&8Q 8}8LU՚8䤷)8|88h8EIM8ݢ28u8 t8&8<ę8Ԡ}8l"8r8cXW804;8˞z 8c 8_8Θ8*8>œ 8Y|{8Y_8׈ND8M (8 8!Oa8晷՗8}8=E88Cf8+ۗJ8tr(/8 N8{8P8ۖ8ϕ8fڣ8$8r l8,%P8ē748i[J8\8h8r!sĕ8Ӹ83P8琷p8T8j88խ8@E8܎8 tȔ8j 8Ţ8:t8nьX8h<8 808].8~Ŋ̓8\8󉷏8x8{!j\8VN@8!O2$8凷8|8(ϒ88/@[8օ{8l^8AB8P&8/ 8Ń8[iё88'85`|8>`8DJC8GW'8Hv 8Q 8DOҐ8p~8}8|n}8b{*a8!{D80Nz(8zy 8bx8)wtԏ8ws8.v~8"[u8Xtd8sH8ErF-8r8>q8lpڎ8o8n8 mi8r%m0m8Sl R8k68pj8Vi8Li'8]>hXˍ8mg8Ϝf蕍8 eH{8d`8+d(F8Zc+8Sb*8a8`M܌8`8I_}8y^8ө]r8\IX8: \=8:[e#8jZ8\YY8XӋ8W,8I-Wx8^V8Uh8 TM8FS28"S8SR8cQt8PƊ8O8O8LNns8~MW8L;8WK8K8}HJ83{Iˉ8Hi8G8Gv8GFnZ8:zE>8uD!8CK8C8\GB̈8zAV8@%82?x8]?\8xG>B@8yz=$8Y< 8;8;҇8E:8+w9s88D87ei8 7O8=668m58$48382ֆ8,28[1i8ĉ08/w~8.i8.U8=-B8i,/8+8*| 8)8K)8\<(܅8d'΅8&F8m%58d$ߦ8$=8'#U8EM"'8Mr!|8ߖ s8k8sd8]8%W8G:R8 jjM8+I8ɭsE8AFB8y?8h=8d2;8SU:8s_9888Jo88}h888898498T;:8t ;8 ;8 <8 =8 Q>8o >85}?8V?8w@8@8?8A?8=e>8?"2=8E;8i98P78h48+M18o-8S~)8k$8D82O78?8o 8.^N80춧8t8h鶼8w8Q涡ڄ8IKЄ8+~ń8S8,8[޶8ܶ8x۶8ٶx8~uضQj8eֶ[8x{նJK8Զ:8ƉҶ*8Ѷ8h϶8,ζ-8?̶8%K˶̓8!ɶS8nȶ8Ƕd8GŶy8,(Ķhc8G¶L8P\58俶8xx8 8ןӂ8R298 ĸE8Tᅂ8䵶k8sO8[i488SR8߁8%88e.P8¯j8*/L8v.8( 8f8Ҁ8l8L8Ust8⚶cU8P588&8:8j8,\)8X~89#'~8he~8劶Y#~8E}8գJ}8K[}8_}8 |8|8~LK|8{8|83Sx{8uz{8q4{8ktnz8Z*kz8g^z8dz8=Oay8^]y8EZd:y8 |Wx8M8Tx8P%Yx8~M x8vJ3w8/:Grw8C%w8@v8u=v8_:8v8/7u84u80Hu8-t8x*t8o'JUt8 T$t8;!2s8'j`s8s8 ͼr8kr8wXr8\q8 hvq8 @%q83hp8V2p8I3p8o8vՔo8YFo8n8` yn8q޵]n8صmn8@Xӵm8z͵${m8`ȵ1m8@µl8"il8-% Xl8ʲl8lvk8J(fk8ߢCk82k8]j8"~j8덵!?j8tj8Ki8|i8RrBJi8g|i8]h8lJSh8uHdh8Ә>-h8<4g8)+g8Dzg8Yg8 &g8g/f8h f8cִf8"Maf8%*2f8어f8ie8~X0e8-{xe8Ke8e8X/d8z@d8.36d8:3{md84Bd8/4d8^\4c8ԃ4c844ݕc8;o4 kc84~@c84c8>v4nb8G'5b8ĝ5b8?5Olb8(5Ab81=45b8S?5ea8ɂK5a83W5a8\b5na8yn5Ca8xz5a8X%57`85E`8G5E`8(5Sm`85{B`8>5`8I5_8~5_85_8;5k_8D5U@_8M5_8%5^8285t^8N5 ^8f5g^8s5 <^8$5{^85]85!]85Y]8^6a]8%65]896 ]8O 6\8e 6\8{6\8W6Y\86-\86\86[86T[8 #6}[8/&6P[8NL)6m$[8di,6!Z8/6Z8<26RZ856rZ8>86uFZ8<6Z8k#?6qY8WDB6Y8eE6RY8H6gY8ĩK6;Y8N6oY8Q6X80U6X807X6cX8[[6[X8\^6.X8ra6X8d6PW8g6~W8k6{W8r=n6NW82dq6!W8Ht6\o8T8!98L187寷v8}85Ν808+Gh8߭~8xc8I82.8_AV8٫y8rݜ8{ œ8Тɧ8);ߌ8vөq8kV8;8X 848̧8eϛ8Dô8t8-~8ťsc8]MH8!-898Q&8gۚ8}VT88ډ8n8SS8N88样8z~c8]8;ʙ8FK8ݞ㓙8uzx8e ]8A8< &8nԜ 8 l 8Ә8/ 82v80ʚ߀8aAe8I8|-8'G8@8Vڗ8헷8?R88ݳk8.KO8{╷48y@8f8]8?Ė8 ד8an،8p8 U8m498ˑ584cG8Z8eɕ8u)x88QXu8Y8/=8!88`M8䌷͔8|᱔8m敔8y8A]8.يA8Wp%8w 885ѓ8̵̈8lc8J}8a8'|E8yY)8U6 8녷 8Ԓ88ᮄu82E78xۃc8qG8q+8 -8(48Hʁ֑8^`L8t88"ke8Wq'I8~~,8}8|Z87"|#ؐ8N{8zzß8y8"xg8xK8-w/8Zv8u8tۏ8s8Os@8?׈8q>8=㟈8N<*8~ ;EM8oq: 28%96888 818;7ȇ8l6e8h584|8~4hc8 13AK85a2381S8\08S/`8/ن8K.Ć8vy-8,#88+ӈ8_*v8+*d8"V)R8(B8ߪ'18|&"8%8E&%8aN$8v#"85"=8!Յ84 zʅ8 85t8Z8=8џ858)$8818[TA8vS8;|8cy8[)w8.t8 r8YBUq8cp8n8Qn8~Lm8 l8 ;l8* k8L lk8Wm k8 j8'j8yi8h8g87f8Zpe8}c8b8_8^Q]8f{Z8h@W8S8O8|R-K8OF8A8%L8;8(486B.8bW '8ϴX8+8}vz8J8A綔8ʪZ8䶚8Ԅiۄ8ඬτ8h߶bÄ8Qݶ8ZVܶA8ڶn8Mٶ8׶:~8Mֶn8#Զ^8uVӶcN8Ѷ^=8fж+8ζ8}Ͷ:8a ̶8=ʶ8C*ɶ`̃8>Ƕ8Mƶ8Ķ匃8oröv8¶ `8 I8,|188 S8庶D8w΂8; T8̙?8g)ǀ8e8>EJ8/ѰO/8[|8䭶Y8olځ8a>8vL88xyf8+H8 u+8 8%i8N7Ѐ8U8 ɛɒ8:s8T858u#8u<8Y8zn8(.8~8NV~8oUm~8,~8}8ty6}85ك\h}8L8%&}8Ė|8}|8Ϥz']|8h_wn|8tI{8p{8_mK{8NGj]{8Rgsz8ֻcyz8v`2z82]}y8!Yqy8VZy8kSy8+P.x8DL ~x8Ig3x8uF;w8k8Ҋ{j8\Fj8Hj8 vGj88k8 j8ai8Vi8LJ_i8An'i8z!7hh8ݢ,7h8@!"΄h8N-Ph8 Gh8„g8Pﴜg8ȭڴ؄g8kŴSg8g#g8庚f8If8x_f8e4ff8 7f8A= f8 He8NDZįe83e83Ve83s*e8&|*4d8W4d84_d84a4|d84Pd8=4%d8=B4}c8 4c85c8m5yc8g5Oc8|'5o$c835b8z>5b8EYJ5{b8e V5yb8-a5Ob8m56$b8Py5^a85ya8|5a8m5Rxa8fa5Ma8Y5!a8RT5`8R5`8T5`8X5Wu`8_5J`8Yj5`8bw5h_85_8r5y_8$5p_8V5bE_85_8d5^8@5[^885^8Y5j^86>^86^8n6]8 6]8 6]8%6b]8<66]8T6 ]8&m6c\8h61\8U6\8"6Y\8C%6J-\8/(6\8,6[8+/6[8I26{[8g56*O[886"[8;6&Z8>6Z8#A6Z8E6kpZ8e(H6CZ8&JK6$Z8flN6zY8'Q6Y8=T6Y8W6FdY8Z67Y8^6 Y8Ba6X8gd6 X8*g6,X8j6ZWX8m6z*X8jp6W8&t6W8Mw6ƞ8İ68]8v8 \8'JA8&8X 88 <֝8!s88eRυ8꫷j83P8@58鳪]8DLs8䩷8|ɜ8:88Ex8ާ]8LvB8'8Ŧ 8>h8#ץP֛8No78y8섛87i8ϣN8g`38 -8 8608<ȡƚ8?`88:80t8(VY8>8W"8E88bЙ8#8N8朷4~8A~b8;G8}+8 E58ܚ8t٘8 w8١8}:<8јj8KiN8-38 u8b/8Ɩߗ8 ^1ė8\e88$p8RT8R98铷?8Tf88 ɖ8kGŭ8ޑޑ81vu8 Z8 />8}y78n=~8 =85<8 i;OȈ8_:欈8989v858[8;h7ZA86$'851 84804[ڇ8a382 818+0gy81$0Cb8S/K8.~58α-8*, 8,`8;+w8h* φ8)p80(_8'8'8B&w8l%h8}$Y8#K8" >8"6188!%8K` y8c8W8a8T8Y8(E8 jTڅ8ŽӅ8yͅ87Dž8…8ὅ8B8Qe8^$8F8 8s8#85뤅8W8@z 8 g8վ Ý8 &8u 8% 8jHU8k888T8.88F@Ň8e8k<8`}}8~my8t8EKp8^j8"Ue8CR_8ҙX8Q8KJ8B81:8f18)鶩(8-88( 8vj8o8IT8޶ڄ81ݶ̈́8۶8#ڶ屄8ضQ8v׶98ն8!Զt8"Ҷc8,ѶR8ƴ϶A8>ζ.8̶O8V˶. 8_ɶ8fsȶh8aǶ̃81Ŷ8%Ķ8¶8Ju8ܿ^8co>G8z/8F8&8O8JI.̂8ٵj8iA8|}8؄b8G8ś^,8L%8h83f؁8츨滁8><18ѽ98= e8̻G848*8ȲP 8+h8QЀ888?u8mV8ܔ78I8889w888mW~8j~8!{~8p>;~8R脶C}8hJߺ}8ʫ*z}8 %9}8||8Hy|8KXvs|8sS1|8o{{8l:{8DPig{8fN#{8 bz8c_vz8^8 6'l^8l6@^86^8E6]8]6^]8.6]8G6b]8a"6]6]8y|%6 ]8(6\8+6&\8.6\816"X\8 56+\8)86[8H;6[8Dh>6[8A6Hy[8D6L[8\G6 [8J6IZ8 N6Z8.Q6ڙZ8tQT6mZ8tW6Q@Z8 Z6Z8]6Y86`6͹Y8d6Y8)g6`Y8"Oj6/3Y8tm6BY8͚p6VX8#s6iX8v6oX8z68dn88xjΞ888Ю昞8i+~8pc8H8|2-8ʬ8ecG8xݝ8A8,ͧ8Ūꌝ8d] r8#W8:<8e&I!8Y8 Wb8N立dМ8f8[8W8KPEd8襷3I8.88 82Iܛ8U᣷8syk8?8 p8AT8١98qe8 %8ࡠ89̚8џI8i8z8zL_8X1C8+ɝ(8`' 88dV֙8(ນ8d8`W8dh8L8J188M#8䘷ޘ8{˜8_68Ǫ8-Bo8ٖ!T8pi88<886%8EΔYɗ8e88Lu8+ Z8 Ò:>8nZY"8񑷀848 Ζ8岖8O8揷%{8l~D_8]C8_}'8D 8P܍8sӕ89 ᷕ88:8ы&d8h?H8>X,8j8.|8Ɖؔ8P]8{􈷦88"h8L8P08~熷8Q~8ܓ8ҫ8{B8لn8oXl8"5P84828Wɂ8_ߒ8lÒ86B8t"8n8NR8!68}~W8"~.85O}8{|ő8{8z8 zq8-y}U8BZxu98wz8ٳv8u8 uɐ8:t쭐8 hs&8Zrgv8qZ8Rp?8p#8Ko8yn8m[я8l8lᚏ8i2k8`jd8iI82h.8g8g8Jf[ގ8yeÎ8 d8Mc8ct87bY8fa2?8+`$8_ 8^:8%^Ս8nU]8t\p8[38Zl8ZR8=FY~88vX483W8V8V<ό8`9UѴ8VjTQ8gS8R+e8Q}J8I/Q/8`P8O8[Nދ8QMË8l(M8ZLr8Kr8JV8>I;8%Is8WH8 G85F̊8E!8$E8vXDx8C\8B?8wA#8G'A8"[@|8 ?`ω8>Q8=O8*=[{8^<_8N;C8:%(89 8-9h8`8Vֈ87s86̠85n87,5Sl8^4R839828.1;8o%18`V0և8/r8A.i8"-ޑ8-{8E,Ef8Zt+=Q8*<8w)(8(8*(8`W'8w&/߆8%KΆ8T$8$b8l/#d8SY"8Ђ!G8 "v8i8]8$R8>LG8ks=8BB48[+8"8 $828W 8|8ס888C/8`38RW8%{8מ-8o݅8 څ8o ׅ8, ԅ8DP х8s ΅8 9̅8wɅ8-ƅ8Å8%8IԽ87n8ϒ188 ͯ88(^8H¢8Н8=8蒅8"8:588Kx8m;:q8e=i8Q`8SRX8_궽N8E8{:8BC08 M&%8⶗8'ᶥ 8,߶48! ޶D8Jܶ8ڶ؄8gqٶʄ80׶ɻ8kֶ{8Զ8lӶ\8Ѷ{8AvжDj8ζ}X8zͶDF8̶38|ʶe 8c)ɶ 8iǶ8dFƶ8@Ķ΃8fön8v8g8,Mv8_8 ?mG8кg/8nb858 8 ˂8;81y8|88K2b8?֭ G8`+8誶48o[8fL؁8y8 z8|Ă8Ee8yH8+8?p#8蛶8_Ҁ8Z՘8/I"8yy88,Z8<8w B8 v8X፶W8mK8XGG8Cp 8/p~8酶 ~8NN~8R~8l}8}~ܐ}8@{P}8-zx}8F=u3|8qI|8nN|8dkO |8Dh@{8*eƇ{8aD{8E^]{83K[z8 X"yz8T^4z8Qy8~YNEy8kKby8G[y8D1x8yAx8D>wEx8 ;w8a7 w84jw8w1+!w8b\.2v84+܌v8(PBv8$u8 !ru8t9au8u8Ot8n~t8^13t8Rs8I :s8D Ps8Cs8>Ehr8Kor8d$r8q8Gq87Fq8{A㵕p8izݵϴp8׵lp8ҵ$p8P̵o8Ƶݖo8Po8e$ o8εnn8=In8>n8,m8>m8"1xm88m8=Hl8ى+l8,nF|l8q ~(?l8?sl8KxhFk8 ]k8RRk893Hgk8t=j8e2aj8'rj8;8l~`85NR`8N 5D&`8*6:_8-(6"_8;6_8N 6u_85c 6I_8x6g_86^86^8>6^86'l^86?^8C"6e^8"%6]8=(6{]8Y+6]8Ju.6\a]8 164]8b46>]8N76\8:6\8 >6g\8'*A6U\8JD6)\8~jG6\[8iJ6[8M6ߢ[8P6v[8S6II[8lW6w[86Z6Z8Z]6Z8}`6Z8c6iZ8f6CS8۝8r8 Be8I8@:q.8ћ8i8Iܙ8阚808ș8_n8mR868 &88}8T8S얷DȘ88ᐘ8z(u8IpY83ᔷ=8x!8&8JY8>Η8 ֒8pm疗8{89A_83nC8ː'8b 88|Ԗ8(.8rT8Wt8kd8醍H8d,8ܵ8RM8䋷2ٕ88|R8q8 8gBi8ىM8q18A8t86ޔ8͇,”8d88D8In8)GR8hL686WJ8턷B8:822Ɠ88CH 8ނq8*uU8 98衁8988΀c8d@ɒ8&$8"8O~t8{}X8|<8{ 8{t8-ze8PZy\̑8x[8w`8vrx8o v\8f:u@8wgt$8s 8rS85qѐ8q8=Jpm8wo~8n{c8mH8m,8/l8]kX8Uj9ۏ8кi.8ah68hM8Fgwo8ufT8e98dS8d8 2c:8cabώ8ʐaV8E`8_8_Wf8BO^L8]18\8[r8[C86?Zɍ8roY宍8ȟX89Wz8WJ`8`1VF8bU+8Tl8S8R܌83&RŒ8WQ8P܌8O!r8@NYW8!Nv<8&PM!8LLt8KN8JЋ8J8TLIW84H}84GDb8OFF8F*8KE8qD48CF׊8BR8BP8lNAO8W@@g8R?1K8]>(/8n>.8~R=988Vn88ӓ 28&e,8M'8J"8,(28L8q 783 8 8H 8 8G( 8L$8q<8CN80L8C)88"+8Pޅ8;w&څ8ݝ Յ8ԉυ8Yʅ8(ą8?z{8 8 O8 vA8Т8n%8Β878_958!w8n8^c8DY8%,N8%tB8eⶂ68p%*8޶d8NTݶ88۶m8V@ڶ=8ض84׶ք8;նDŽ8x1Զ8Ҷ~85Ѷ8϶8@ζ-r8̶_8ZR˶M8ɶ98hȶ&&8 ƶ8Ŷq8Ķi8¶҃82 8aÿ˦8QT8w弶y8va8I8n18N)8i8I8ײ͂8&f28m8~8 c8H8-8(8+}8ځ838µC8*6Ѕ85i8E2lL8/8!({8G8׀8h880t8z呶a8eUD8Ď&8y1888r[8ۆP8Ch~80~8f~8Hv(~8g}}8)zK}8Gwm}8t.}8p|8HmM|8_j*o|8$g.|8zc{8=`l{8s]j{88Z({8oVz82Sz8Pk_z8PMnz8Jy8F6y8w80w8_-\w88*Ow8'v8#݂v8m 9v8u80u8~]u8iu8 XOt8_It8= &7t85s801s8N/Zs8bs8mr8(r87r8浳q8q8 ۵`q8Bյq8~ϵp8Yɵp8p ĵEHp8Yfp8Eo8 {{o8ko8o8ѧn8=n8έ sn8^#2n8o!m8~Lm882vm8"8m8SwGl8hlwl8aTl8VJl8KYl8@k85Uk8!+hk8D /2k8Df&j8 j8Ij8}^j8_Ӵ*j8ٽi8Qi8 i85x\bi85L1i8/ ai8a|h8k2h8mٲrh824Dh8x3h8ɛ3g8K4g8XD4eg8aq4_g8]42g8]Q4Ag84f84f84f85{Sf8p 5V'f85Le8#5je83/5e8:5we8qF5!Le8>R5 e8]5d8i5Od8u5ʝd8ְ5+rd8b5Fd85d8Ђ51c8y5c8s5c8q5kc8Rr5?c8u5c8|5 b85Eb8w5pb8U5db858b85 b85a85дa8|5ňa8#5\a8@50a8`5a8j5M`8M6`86`8(6S`8@ 6O'`8C!6_866_8rM6N_8d6u_8|6I_886 _8z!6^8f$6^8'6^8**6j^8.6W>^8B616^8S46]8p76t]8:6ʋ]8=6_]8@6[2]8C6]8 G6\8!,J6\8 MM6U\8bnP6vR\88S6%\8yV6[8$Y6[8%\6[8`6&r[8f?c6,E[8cf6L[8'i6RZ8l6KZ8=o6QZ8r6JdZ8v6B7Z8Cy6- Z8>j|6&Y86͟8>8Yd8Y򮷩}8ꊮb8r#@H8򻭷-8uT8쬷8n@ݞ8wž8W8Nٌ87窷r84W8X<8f{!8H8ᨷ8ryН8۵8䚝8XB8ڦd8rI8, .8i8;8Ӥݜ8 lœ8;8f{84\q8̢0V8d ;888-~8&ŠKΛ86]8?ї8B|8:%Pa80F8 U*8 흷g8석8ؚ8c8`L8#䛷8{8k8O8?S48B8ڙZ8r8 Mƙ8/Ī88-8-Зs8gW8Z<8 8- 8Uŕ`8\͘8 8D8"z8D^8QC8 钷A'8su 88Bӗ8F 8 ސ=8uq8 d8H8<,8ӎ8kK8xٖ881š8Ɍ녖8`j88N8~^28&8j8Uޕ8=퉷•88>84Wo8oJvS8ᇷ78x88񦆷8=ǔ8ԅ8k8t8aX80 <8ƃ 8^] 88˓8!ꯓ8sۓ8Mw8<䀷[8z?8#8N8({~t8}^ϒ8Z|O8|@8-{8{8CZz)_8y'C8x3'8bw? 8. wQ8:vjӑ8gu8t88s8ir2d8rH8!Iq,8vp>8>o8n8ڐ8mо8-mu8[l.8Ӊkl8jQ8ji68i8rCh8rg8Ԡfˏ8eF8d8-dz8\c^`8bE8Iat+8` 8&`8I_h܎8Wy^Ž8]觎8\8\s88[hY8hZF?8Y$%8(X 8yW8)W֍8jZV8 Um8̻T78Sm8SS8NRF98Q8?Po8O8KOPό8 FN8wM8L 8-K!d8xKI8@J.8sI8YH8?G.܋8J G8u?FC8rE86Dn8CBR8w Cv688y=s8<>W8;d;8;8?J:8Z~9O8j8̉8e7~8K7K8N6G{85x`8,4E8|3+83e8N28H1 ވ80Ĉ8/8/r8I.Q{8{-c8,HL8+g58B +8S=* 8m)8p(އ8q'ʇ8&48M(&Т8.V%8$}8ְ#k8"Z8 "0J85!':8a *8Œ8 858g 8>68_ن8sΆ8رjÆ8o渆8ஆ8*S8R08z8nL8o8b{8t8<m8b{g8Ba8F[8 U8 O8 J8*F HE8k @8_ ;86818E,8('8M"8t8^8=8 88V68z83 i8^88߅8Z+؅8mVЅ8 0ȅ83c񶴿8jڶ8B8y8p 8<鶮88=y8o/n8/b83FU8߶I8]%޶;8ܶ\.8 ۶\ 8Eٶ8׶8vֶ8Զ8RrӶӄ8Ѷ„8!uжѱ8ζ88~Ͷ58̶{8Iʶh8ɶU8 ǶA8/ƶ-89Ķ8)Jö88h؃8ƒ8ᇽ 828}89f8Yɷ N8_Y58贶86x88”Ђ8!8$ݜ8k9q8êg8LL8ԧ18[8ᤶ 85eZ߁8硶Á8:i~8"鞶U8go8䛶R8`58ژM8R8ɕ߀8?€848I'n8,k8 M8y`08\状8T88+s8R88~8e~8q~8)h|F~84y ~8lvO}8Xr}8poP}8^l]}8'i|8Ke|8bXU|8_|8|H\{8iY{8US{8-R{8jOz83Lz8HKz8Ez8Bby8b?y8z0au8- Uu8 t8݉t8 /Bt8Js8 /s8ks8$s8<++r8/B䵯r8_޵vQr8ص r8VҵCq8̵Iq8^ǵc8{ӵ5'c8Zܻ5*c85-pc8l50Dc85c8&5b8,5b8C5ғb8\5gb8w5{;b85<b85a85a8{6ba8܍6^a8ޠ61a8 6Ta8N6`86x`86`8 6S`8B#6 '`8;6}_8[T!6_8m$6^_8'6t_8*6$H_87-6z_8$06^836&^876n^8R1:6h^8~O=6;^8n@6.^8+C6i]8¬F6]8I6ň]8YL6[]8ZP6/]8/S64]8QV6G\8sY6h\8\6{{\8_6N\8b6!\8f6[8$i6[8_Il6[8Jno6m[8ur6o@[8u6Z[8x6FZ8|61Z8!+6Z8(6w%8j 8G8՛Z՟8b48̭꟟8pe/8tj8tO8.48dǫ.8__8J8ɞ8&)뮞88Y@y8O]^8sC8#(8P 8S8릷ם868|8Ĵ8Mk8C夷P8v}588ܭ8 Fa8/ޢBɜ8Rv8p8w8>\8֠xA8nE&8 887ԛ8ΞW8f8ɂ8ߖ|g8.4L8Ɯ08s^8A*8 ޚ8%gÚ88:U8왷q8U8)':88GK8◷8Vz˙8c8I̔8@.y80ؕ]8oA8:&8q 858:͓%Ә8dm88s8*0d8J‘jH8Y,8(88 Mٗ88O8掷腗8~j8IN8v28D8*܌8sߖ86 0Ö8]8<:8ъo87iS888E8y/l8ƈ8*^ȕ8p嬕8 8#+u8KY8Rd=8%酷!8#88͔8DԱ8ۃ敔8Sry8 ]8B8B6&8́ 8[c8ғ8G8&81z}8~a8}E8o})8&-| 8Y{8zՒ8iy칒8+x8 x89w)f8fvBJ8ui.8t8s8sۑ8DHrY8uq8p8ol8InQ8,n58Ym,8ׇl8k8j]Ȑ8?j>8@i-8oh(w8g8\8Cf[A8e&8)e 8Xd*8̇c֏8b8a~8Za8D`l81t_dR8^88S]8 ]82\8b[kώ8ZP8Y48X 8#Xg8TSWL8V28;U8T8T8mFSoʍ8hwR98~Q8P{8 PNa8 8=8?<ӊ8+8mo*:|8#)e8(O8(t:8Z0'y%8_&8ǎ%8x$8#և8#5ć8G"Z8t! 8ȡ A8d8yp8&Za8(RR8d}D8P678,*8C8E'8Q8sz8~8Q8M܆8=ӆ8FIʆ8n8d8t8 ԩ8U v8}3T8Z u8q 8H 58 Հ8 z8c dt8 CMn8i8 "88v8/쑶̀8ao8Ԏ8Fv86Y8`(<8u8u8rK8݃֐8`H+V85086~~8,{~8wh~8t,~8pvq}}81Dn}83kv}8g9}8vd=|8taX|8$@^|8& [A|8W|8T,{8+lQg{87NEC{8K{8Gz8Dlz8jA>z89>y8v ; y8w7$wy843y8N1Cx8yU.Gx89,+#hx8(#x8#$w8x!w8rTw8zw8`]Lv8Bpv8*=v8u8 ~u8ku8%u8wt8ft8ݙSt8(pt8s s8Ãs8ᵼ>s8۵r8յr81ϵqr8%ʵ.r8Sm8;HRm8^=zm814Tm8L&m8ùl8"l8[yl8Q(Dl8@޴l8~ȴkk8Ck8tk8RBk8^Xk8%2j8cͭj8!}j8I~.Lj8=0j8o93Li8qb3i84!i8=e64o`i8c42i8EÈ4i8?4h884jh84zh8%4Mh84d h8d 5jg8R5g8 5әg8G,5)mg875@g8'C5?g8jO5f8.[5f8f5Yf8r5'cf8~56f8@5 f8r35e8))5e8!5ne858̧[8dje89zJ8/8-8ƥ8`^ޝ8Ý8ގ8'8Oxr8WfW8N<8ۇ.!8 8#8DPϜ8a蠷8x8L~8c8HG8,8xl8+8ڛ8@8؜V8p8\m8/YR8768Ϛ8g:8;8񖙷cɚ8.8?Ƙx8]v8kx[8?8$e$88S=8땷љ8x8x8V~8H)c8/~G8w+88nb8=ؘ8LՑ8l383t8i83M8ʏ028bj88&ޗ8(×87F8W8Mo8ՆS8`"88쵋V8wM8䊷8|Ȗ8+8~_8Bu8_ڈY8q=8 '"8n[878ΆΕ8'f۲8H8`({8k+G_8o„gC8dY'8E 88Ӕ88ZK8⁷8x"d8>.H8ʥ9,8M8O>j#8li8h8bgҐ8f8&fߜ8PUe8 d\g8 cL8b28)b8O@a8o`8_Zȏ8b^ 8]͓8~-]y8*]\n_8[LE8ƼZ8+8Y#8Y8LXݎ8}WÎ8JV 8U8+Uu8>TZ8oS@8XR&8NQ 8dQ83PU؍8dO8[Nȣ8Mj8Ln8+LyT8]K98J>8?I8H8e'HΌ80ZGͳ8 F˜86E}8lDob8&D"G8GZC+8BQ8A8@>ً8)@8]?8>J8=j8J8f58v,8#8r88+8̉i8 궜8Lx8څ83΅82|…8ⶀ8Oᶗ8߶Q8R+޶8ܶ8۶q8%ٶb8#׶S8"pֶ9D8Զ`48eӶ$8ѶX8$bж>8ζ8teͶބ8f˶̄8nʶι8jȶ8f}ǶI8xƶm8Ķ3k8öV8A84),8 ¾m8O[8O޻8l%Ӄ88׊8匃8t87\8dűC85S+8ஶ8Mm8Sނ8 ł888!Jv8[8/@8D%8V8 8>88y8mvh~8@s~8JpS~8lw~8 i}8f }8Scd}8!`}(}8\|8Y|8V%q|8YSM3|8l'P {8mLx{8Iw{8EF;8{8\aCz81@z8s=%xz89U7z8 6)y8`x3y8L0ry8"-0y8).x8&x86#rhx8a #%x8`gw8_Gw8^)Zw8 w8v8 v8 XIv8v8u8|u8\8u83 7t8Ht8Kglt8@䵭(t8ߵ(s8ٵs8"ӵ^s89͵Ss8Vǵr8xr8ZVr8͵ r8kQq86q8rqBTq8_q8Hp8b>p8pZp8cۇ`p8N/o8 yޤo8mxio8yb.o87Wen8Kn8@n85In8R*n8m8vm8Flm87m8˫m8Dδnl8 ۷_l8lel82l8h9l8<k8k8~óJkk81Rh:k8 k8C3j8Ԧ3j8M4zj8.4]Kj8=@\4ij8n4i8f4Ui84(i84>ci84|5i84G4i85ch8^5&h8T5h8ɴ*5Rh8i65&h8%B51g8#M5yg8Y5Ÿg8e53sg8Tq5Fg89/}5<g8T5f8 |5_f8r5f8wl5hf8h58Cޘ8/F˜8ݏҦ8-u8 To88S8;78LӍ8jQ8e8ȗ818ɋA8`u85Y8ŏ=8P'8"8־r8TV8툷Ζ8G(8b8{8qK_8↷D8 z8(8Hr 8v8?ԕ8ք8m&8L8ye82I8wɂ-8G`8 8΍%ڔ8|$>8!W8Qp8j8~N8*~28W}8Մ|8ѱ{ߓ8zÓ8 z+88yQ8exqo8wS8v78u8u,8Ftf82tsȒ8sr8qJ86pu8)pZ8MWo>8n #8m8{l18glБ8h8Q^#8(^ 88X]r8χ\CՏ8o[(80Z 8Z8FYl8vXR8W88*V8pV87U8GhTю8ݘS)8R/8^Q'8O+Q i8_\P O8O48N8QM8!M\8SL ̍8K8J<8I|8Ib8NHuG86G,8F8E8E܌8BMD8Cӥ8B8AKo8~AS8^O@88^?8t>8= 8={ʋ8ET<䮋8;M8%:w89\80&9@8Z8 %8A7 86;8L5Ҋ8,58a48r382f81cL81118e08i/8.8d.ʉ83-~8f,8+ 8 *g8)O80)i88b(E!8"' 8&78%Mވ8_'%Ȉ8W$̳8&#/8"8!iw8#!:d8/F Q8tR?8q-8}8> 8,8Y8܇8 ·88: α88Y8cV8$Ê8U~8Ar8]g8j:G\8dQ8Ȏ$G8 =8[;38 )8D5 c 8{^ M8 t8 8z 28L 8+|8S<8|܆8Cӆ8 ˆ8Æ88IT8\r8ޛ8I"8l8:488v8-7Bm8[c8Y8CO8E8y;8Y@08="%8T궼8 }8V8,G嶢8®8ۅ8 ඊ΅8޶8^ݶҲ8W۶s8Aڶ8uض8?+׶0w8ݢնcg8;Զ:W8dҶF87Ѷ58϶W$8ζ8̶8˶84ɶ:ۄ8"ȶȄ8 ƶx8>1Ŷ8öB8D¶w8b8[7M8轶78&uw!8 8hh8t݃8(ƃ8;8+ɳ8Wy~8䰶f8HrcM8Ds48N88X8-΂88l?x83ǣ'8Me8ӠK8TXZ08۝}8N^8ߚg߁8_4ā8ޗ89\8ؔ)r8TV8HΑ;8FGr8%858'̀8, G8L8JDx8w5\8胶@8^X#8ǀ8:j~8D{8xd8tF+8q~8n~8Pwk~~8QKhC~8geQ ~8a}8^}8)[X}8*eXi}85Uc|8lR|8Nig|8DKf*|8wH{8HEV{8BIq{8H>2{8^;z848z8c5}uz85825z8 /y8K+$y8!(bty86%j3y8o"0x8Kx8)nx8 ,x8Hw8w8Ų fw8 #w8 v8>oZv8;][v8M1v8u8aku8ZQu8{OIu8It8Hܵt81Lֵ6It8{Uеt8cʵJs8bwĵRs8Ds8+s87вr8'lr8"-Er8[Rr8eq8Êq8PMq8<q8Up8׎}p8#r]p8f #p8\[[o8O,o8Duo8P9S=o8Z-5o8"n8`|n8* _n8)n8om8H]Դpm8ým8&Vm8醐z#m8"sil8sF½l8l8S׳Yl8$x(l89k8g2k8A3k83fk8 6&46k8T4rk84Hj84Sj8104zj8Q42Lj84j84i85 i8¨5Hi87X5fi8V )5I9i845 i8@5h8RL5h8X5h8c5Wh8So5*h8l{5g8ȃ5Dg85g8/5wg8:58Kg8ﮛ5g85f8Y5:f85f8m5kf8ǹ5>f8Կ5f85e8d5e8B5e85V_e8252e8K5e8_f5d85d8A5Fd8G5Sd8|q6&d8*6Hc86c8ڨ 6c8Ǽ 6/tc8t6jGc86c86b86b8(+6Jb8*C 6xgb8[#6:b8u&6 b8)6a8\,60a8H/6Pa826qZa856-a8b96a8y5<6`8S?6`8&qB6y`8E6L`8H6`8K6_8N6_8VR6_8/U6k_8-PX6>_8q[6_8^6^8a6m^8d6K^8g66]^8Fk60^8Cn6^8gq6]8t6]8]w6d{]8^z64N]8}6 ]8/6\8%#6~\8:6B\8zI6proj-9.6.0/data/tests/conus000664 001754 001755 00001004350 14764566077 015551 0ustar00e012349e012349000000 000000 CTABLE V2.0 Conterminous United States JJDJW?9RFq?9RFq?y2ɏ7.67C<6c7b6&07k6O7`76ʉ746З7ވ6 e7G16F27|ّ6i7f6t̃7)6`7oГ6(f7w627x6}77ŕ6${7k6/y7k6v7 6~_t7_6/q76o76"&m7T6~j76Th76,e7M6c769a7Ξ6^7H6J\76Y7+6zW7D65U736R7]6CP7@6OM7P6tK7Џ6 I7z66F7$ܤ66v6 66#6 P695656eB5:6ƾ56g56y=5Ӄ6=5z6f5w6`fo5Yz6AR5 6aT55~6ّ56C4K6|4;6b^4w6463c6Bj6fFg6r6ܴO6u 6[-;6 N>6[o6<?X6 6T笵r6>C6ҵ6浒?66x6KM6jf6(6G3/6ҡ> 6M J 6U16pa<64mD6yJ6g O6TKU6N'_6n6P6f6ur6v 6{ԯ26`6?%6cJ6ö6QpȶP[61̶P6Ѷ6"նG6aض_6ũܶ R6Z%ලW6?rBp66626SE#6O}6:h6>+73rj7ElY,7\77W;z7w=7M7ä7r7#7C7v4k 7 76 N 7 B 7= 7gO 7=O 7*A 7\h 7 (9 7`v 7  7 M 7Ŀ#r7^&H/7)R7D-?s7T073\77H7 :?7>7A$7sEyD7He7+L@7JOz7GS07:Vu78XZI17]a7Ra7d70h7rkK?7pns}7k>r577w6<7";6$97ڥ6E77y6a476u27ö607T6e-7/6E+76a(706&7Ъ62#$7r6!7e6m7/67#d6t76r76K%7)k6767Ұ6BM776 7>D6 7[6L776H7s}6 7=6`7 6$6\6ǐ6}6 6J<6}666ò6PT6i6̵66^6ͻ6c6y6[6/!6P6OĽ6F66b6q66j6|6lڽ6#6o 676;6:6?l666aE6nԥ666 G6N66O6D66m6;6C6=6+6 6OG666(x6!V6o66Sf6s6O]6\ 6U66'L6D6ZD66^;6636J6_+6K6S#66]6m6Y6q\6 6u46 6W656o5D656j56j56$56Z[5m6D5h6eH5n06vn5O6u S5 r6^756p5 6464]6 46\+416iZ3oA6?lI6&9uG60:6ڴ6 6J6h06%R{6v%6DэǾ6ϠjG6Vz6dȵb'6ܵ66m616+T6E%lk60y6h<6%$HT6S5|6_Ku6tk!m6cwe6ু8a6ya6Ph6 w66Y96"S6喝6LKe665跶56 6 Q6RŶ6jɶ6PͶޑ6Ѷ{6Զz6׶6ڶ6ݶ^6h96J6T6Xz6GZ6|b7Mh7^^74L,76<7$7O|7%GQ7G7 72xPp7qu 7& 7n5 7G3 7- ( 7 7c 7#= 7u 7= 7*v 7CF% 7!L 72n 7T8!3 7 m$: 7' 7+ 7܏.| 72 7'57@9Y%7<<;7+@S7d9Dum7HG7Kh7?O7R79V$7%ZnD7˹]r7yFa77rd7Eh(7kJ7o7zr7u 7yP7S|7*7X[.7 邷|7t7A7~&s77xx7w7Ecx7ӎ6,7@ 7:7qB7x7ڕ7;_7]J7O2!7R7iS7lF7\Ԩ7+ 7Fjn7[7򮤷47B7S7Yc_7g7G&7F77筷i76µZE 7" 7x7|"6!F7Eˇ67s6B767-ʼn6|7m6LI76O767Je67 6{7~6G7Z6P7\6ށ7\6~7L69~76||76z7:<6w7y67u7Ά6r78,6j]p7є6m7w6k76i7VĖ6çf7 k6:d76a7i6Ya_7`6;\76Z7\6>X7X6UU76HS76P7N6tN76 L7w6~I7?6:8G7A6D76 fB7*6?7̡6`=7!n6+;76876$\67N6 37617⌥6)/7,6C,7m̦6d*7l6(7x6%7w6I#7V6X 7676E7Q6O76ӥ7毬6Y7b6767ή6r7[6@ 7C60 7)6G76yz7{6087):676`666o6B6(66c߶6>6˒6;k6B666 6疹66\6:6̠6ں6w6u6#6 6T6`616-636;66I@606ž6l6H6 6ʿ6x6oK6lD66 6L6p66i6R6D661e6a666L'66}v6W6gm6C6E|e6P6_$]66T66L6^Y6.D66<66466D-6s6%6cM66P06.66V666: 666z556Ӷ5-6'5kF6!-5e6A5635656_5<6T 5J6es5 ~6dX5"6K=56H"5685664OW6ye4o6A4<}683~6iO/s6?3X6更-6i6,6y7CE6'\p6UO6]6 6𾵽Y6]Եˑ6A%69I 6 6&*6"6.6Jp:x6 ZF6IR67^ˍ6jy6ui6рg`6^6Pf6d둶w6h6Ü66oF6I646=ť6GeC6X66JwŶ6ɶ`6!^̶6϶̼63yҶ6J>նx:6׶6Bڶ6>ܶ'6a޶ 6=6| 7Ijb7.7I7N鶍v73bJ7l+@777#b7]F7n7Q 7k 7N\ 7  7c1 7R 7t) 7/  7 NH 7 u 7|z 7k9 7 74 7 7!h" 7% 7y)' 7-& 7+02 7=4? 7HJ8N 7K 7HO 7R 7xV$7)(ZM7~]z7)ka 7d7Th73l|O7so7r\75v7yJT7a|7<7 27. 72}7E#7ʇw7@K<7NJ@$7@|7ص97'0797z7jG7єl7 57ʖ8d77uTD%7|7q 7dJ7ѼE77iq7y777HfԚ7 17> a7\,7"(7b7|O 7S7ﰷk7L?#7ˎ~7޴7=-QF7RP7i6%76767c67 6_T76r!7[6:76767Q6rR76767D6$76;}7M6F7B46~ ~7 َ6{7}6Cy76"6v7Ɛ6et7`k6q7*6o7*6m7^Z6Qj766h76fe7K6hXc76`7{6{^70?6O\76aY7䌘65W7364T7Xڙ6]R76#O7&6ĈM7a̛6K7kq68H76KF76 C7\6azA7U6 ?756<7uB6B:7J677Ճ6xu57j$6.37Ţ607 f6 I.7u6+7j6)7`L6P*'76$7)6u"7h?6 767ە6x7OD6)7 676;7]6I767̬6 7 6Dx 7[B63 7X6767{v6d716d7u6W6|6h6/Y6du6 66ֻ6,6g66I66~66~T6Y6?6Й6ˇ66B6=6調6 M6766*6ƹ6F6!6ʻ6N6M66ϼ6H6^Q6O6ӽ6ʸ6W6O-6tܾ6g6xd6<662ً6666=66 ~6J6u66um66xe6\N6}]66qU6J6aM66PF6h6a>6C6g76&6'066(6d6 !6m6b66w6P63 676VW6PX6o\56.5V6Ѷ0g6 UӶ6Hն6a׶w:6ضI6vڶgR7/ ܶ*170ݶG7g߶7ජ72GU7Dv71*?7d7'7("]7"7f 7N 7p 7 7& 782Qd 7J 7a  7 7Ե 7N^ 7v- 7/7 7> 7j^C 7 NF 7(j$H 7 ,((K 7+N 7/S 73pZ 77uc 7o;8o 7w?&~ 7aC 7HG 7J)K 7O* 7LR 7џV$ 7_ZvM 7^y 7aߩ 7\eX 7;h&7ul9N7of7]s7ӿvp7z T7`}(7O7/ꁷT37$77𙆷n%7M y7Gx7 &7;7/737u7^7ȓ/J7/77Yg7W7E(7 h7jn7aȞL7 !7xO7Ϣs7$7dy97Zͦۜ7 7askc7Ū77F*7hɍ7nQ7 T7XZ7f$7E7Iu7%(7467Y6Ð76716 _7PR6/,7:676yŊ7XI67b6]7 60(7L=67 6767-6O7_Ҋ67v676Q}7龌6z7b6Zox76u7]6s7RN6rq7g6?n76"5l71;6Ji7ߑ6Qg76d7Z*6Apb7ϓ6i`7u6K]76"[760X7g6RHV7 6$S7k6pQ7Y6O7@6L761J7G6G76`E76B7166@7iԜ6)>7sv6m;736t\97ӹ6?67[6476/276/7B6mm-7=6+76±(706V&7;أ6#76{!7,6$S7-ڥ6#7V6f7:6c76"7٢6:7Y676D>7ʪ6q 7̈́6 7?6@j7G6"7䲭6p7vk67^"66;ׯ666M686!666u6M6166_ҳ66n6$66e6#66+66r6#66B6e6Yɷ66RN66Ѹ6|H6PT66ֹ6J6Y6u6ݺ66c6?x666Py6]6 6i66/6:66ܾ6646}636u6o6n66SXf6q6^6A6[W66 P66H6&6(A66:66&366 (-66|&66686m6e6j66* 66n66%:6+c6!56 56ң5[6g5-69!5j6\Ķ5]6D5f6565.G6u56k5P64O56X35/6@564 6y46S4}6L3Ze6*6T[6O뺴" 6Lk6_.6cXO6TJ6*'6>Ϯ+62ŵ!6pCݵ 66q56<~06a`6I*+66Z6B6N6rZao6|efpQ6q>6:}76&(=6{P6Nʎ6t6O6ʘd61^66i>k69]6vY6 +r6636H6Ӿ6wT6?öc6*ƶ46B?ȶ6,*ʶ_6˶ 6cͶ6/϶6жU6Ѷ7QӶz}7sԶe7e ֶ~J7uv׶U)7Aض>7Uڶ7dܶn7^޶KR7y7C7&) 7' 73N 7i 7 7l& 7U* 7BD 7_ 7aTr 7X ~} 7R ‚ 7] 7[; 7qS{ 7xt 7fn 7tG#g 7?7'b 72+_ 75/'_ 7<3` 7F7e 77Q;n 7IY?{ 7"]C 7[G4 7ZQK 7>O 7R"S 7V~ 7OZID 7P^p 7=b7 7Re 7i 7K m'G 7p 7t 7gwX 7&zO7Q~e7_7D07 ۃ;7k7$7 @y7o7;'77q7䏷57T47-7 ,K7t7 7[[i77L*7yo7ԝ7D/N7aӰ7[ࡷ17F7u7Aw7Y⥷Y;76b7g7{ݩd7/7 s+7ӭ7$X7uU7jƱi77f77J}6͒7@67yH6Mi7667w6s7+@6ό76웋76rg756q27ۄ67ȁ6Ɔ7='67Ğ6X7p6 !7&6767\6~76z|76z7%F6w7/6u7E62r7z/65p7ҍ6mm7nv6vMk7D6h7X6ff7b6c7M6;a7"6_7,Q6\7a6(4Z76ZW7@6YU7*6R7J6eP7?06!N7Ԗ6K7^y6EI7s6F7=6,vD7d6SB76$?76C=7rM6:7'6z87'667q66371ڝ6yU17~6..7#6y,7zɟ6<*7p6}'76M%7wġ64#7p6 76ލ7Σ6=7673676 X736.7V6 76|7UǨ6 4 768 7867V6V7>6 7GY67 66656e6 6`666.6S6x666w66N6F6[6{6<666dz6F6N6[62Դ6$6W66ڵ6>]6I]6ı6M676d666 E6s6666瑹69K64(66Tĺ66f6F666F¼66|6`~6T>6v6 6no6޿6)h66a66Z66GS66[L6=6"E66*)?66ĸ866a266#,60W6%66666366 66=686CO6c6 6 5$6Mq5߆6565 W6.5Q6565o65t6Ȗ56f 5'6u5E6W5Q6795I6!5*6q4J64ݧ61@4)B65'3 6 _峵-6Q6ݴM66F6)sz66#6ǿ16~׵g6 U+636k6de_6(646@6Lj6X B6"c/&6Bo6Dz6Y|%6IE6N|6F$642/66x垶B66ZA6 T6ٱ76ְ6ó6xu6]u6dC6]q6J 6 6¶ {6 ĶfE6*~Ŷ6~ƶ6Ƕ6'ɶT7Rʶ73˶7̶ǥ7ζ 7϶B^7.Ѷ!,7vӶ7ն۝7f׶<7 ڶ79ݶA 7^ѧ 7! 7>4@ 7>7P7p%7Jx7Сw77`M<777LIe7 7cd,79@Ǐ7/7ⰷV7307?7ה7m}x6}7y6(s7j{6@7m|6 7}6ڎ7z 6 7,6q7Ӏ6q<7Pz67Z 6pЈ7ł6y7k6a76)7ٳ67W676}7흆6C7@6~7"6{7w6%y7'6v7ʉ6H8t7Wl6q76DKo76Rl7aT6_j76(g7뚍6Kwe7>6^c76`76!^7+6[7ϐ6CY7?t6OV76jT76Q7]b6ԔO76+M7]6}J7O6#\H76E7Ɨ6ۏC7;6*A7Pߗ6>76}c<7&6:7˙677o6T?576427ú6Z07Ca6%.764+763r)7[6'76G$76q"7d6 76w7ơ67Tz637'/676Ԝ76gR7R6?7 6 76ds 7v6' 7+6@7ި6(76f=7>66l606뒫6676Y6٬6"6Av6l66 66666?6į6A6kO66oװ6 6]6hl6 66c6"%6>66i666n6r666c6凵6k66.666J666#666qJ666N6ɺ63666o6xx6Q6q6>6j6I76;d6F:6]6G60W6h_6P66J6:6D66~>6[-6I86z6$266&,64/6L'6ϕ6P!666w6Ȋ6|6n6i6v 6X66`6G66,5!X6Д5p65:65&6{565#:6|t5p6]5656O|56:Z\5|6:5C6{56Z4c6464T6‹6l;606x6``586.d6i6L*6VV6ҵ66~L<6Q 61d6#96&6 2x6>_6lJ\,6U,6a6 l6vy6wU6mD6T46$ɎL6(w6Q6 A6K 6sx6}{6Ứ6o6U6%|ɇ626ڛ6bJ66!rp6ú6Lp66n6a<7d57 *70¶?7}Zöe7Ķ7?ƶF7QǶQ7[ɶD57˶?7%sζb`7#[Ѷ7Զ8 7![ضP 7yܶx 7Qᶝ 7js 7 U붶" 7\* 7LB5( 7D 7U^ 7? 7 7 7| 7 7>V 7V>m 7"Z 7gZ&K 7k*@ 7.8 7035 7t7U7 7Z;= 7v?NI 7DDqY 787HYn 7^ML 7VP 7RT 7u@Xb 7\g 7_lI 7c@| 7dg 7k 7n) 7D#rPj 7u 7Ky 7c|*< 7)% 7-|[ 7\# 7䮄t 7 @ 7 ̇:7gSOr7!֊7T"7ύ||7Eu75i379)=7D7$L7-h7u͗ 70j7,7,7Nb77gP7^7$T7gw7d7Mg=7`7(cs7f7 7\&-7~77PdW77 7 s6|7yYt6+J7 u6.7`v67_Gx6ү7y6N{7z6'F71|6`7}}6ي7~6¢7 6j7v6_27R607k6b767<6J7ރ67 67"6-}7ą6bz7 f66࿨66`a6g66-6옪6w6.6z666O6DR6 ۬66cc6b6G6@6Km6r6663r6i666w6f666„6x6%6Q66646D6?г6ߞ6Ur666D6Gε6#6y6Dd6TN66N6#666۹636ʺ6{62ƻ6"u6ͼ6xn66lh66Db6'6<\6\6RV66P6T6J6A63E66?6H 6=:66466P/66C*6>6t%6Ց66 6666K26 A666#c 6b^6_6D615]6d5m6*5)-6o5~6^#565756#516G5p6+56b~56[5c=655f6 506-48~6s46*36ճ6⼐66&R6V 6>烵6ђJW6c6AFε6'>6V6 N Q6ń{6X$6Fz0M6'Y6E7鶶7ϷX7͸ {7[He7o96A7G 77b7Sö7Ŷa7Eɶп7>̶ 7ж> 7zն%c 7{ڶ7x 7a߶ 7嶌| 7Z!o 7v[ 7iA 78# 7}\ 7_w7t 7WD7|7L,`7F7( "17Dp&Z7*!7 7}7ѩ7G%Bg7Exz7ʭ-7%7n7 X7973m6S7n6 73p657Ăq6C7Xr67t6O7lu67v6$7x6ҫ7gPy6s7;z6:7{6v7*}6Bdž7Nq~6i76P7}676؁7267gb6~7R6nB|76y7D6Lw769t7G6"Xr7''6o7=Ȇ6fm7i6j72 6xh76f7RO66ɥ%7i6T#7'6;!7S676h7߻67p6h7%6 7Bڟ667k67A6?76M 76& 7Q6)76Z767J676666a%6O66[6N66ި6o26i6C66W6x6*'66Q66x6]6hU6,666T6ɉ66m6l6p6D6(6K 6?66U6ڦ6u66Ԟ66O6.6 6v6ͳ6ԓ66[I6Rv6{ӌ6i[6r6?L6&6SI6?6R66`i6ry6:6ss66m66g63<6;b6Ə6C\669SW6'Z6R66L6M6G66̔B6f6=66ɐ866ǘ36 66.66)6~6ט$6g%6/}66G6d6>66k6p6$ 666g65?65 6 H5V?65W6΅5S6Ef5226f5/6656zy5 6<5R5k6NH)5_6+406q46uu4|6 ̔6aU6` Ѵ*6a,6'Kz;6}6#oM6ư6+ɵeR6_ⵖ6{a6 46j'6m "m36-6L9ɱ69Dn6O&w6p~Yv6Fc6}Gm6v6}l6646H6L66Ь"6TO66{6z616#K6Ӥ6-a6D^rN6iL6wTX6$k6શ'6 k6<:6H쬶7E\74x7l+7펰7U걶-73@7z7˷!o77!<7e~7ɄŶ7ʶt72϶7оԶ7ڶ717.趢7Ob797,L7l7s7 7eh7E7 P+%7wo 7U"-7`&7\+K7U/L7N47/87=7HnAi78Ev7I7]N27+RPU7u2V|7))Z/7&^7Ya 7eC7=]i}7lm07p7tA 7wՈ 7z[ 7=T~< 7Ѐ" 7avt 7, 7񞑷-7 7y7;㕷8I7Jۨ779i7qz7М+7-[747'䠷LQ7j=77줷x7C7{>7Zy7}A7g7謷 7:_.7‘7ް57 ]7h6)7ni67j6“7< l67fZm6X7n6"7#o6'7bAq67r6|7 s6}C7I u6 7^hv6#ψ7Hw6Ⓡ7x6W79z6k7]}{6Zރ7|6Ϡ7~6b7C6$7A6}76#P{7偁6|x7!6FWv76s7a6`q76n7{60nl7;C6i7P6g76 e7'6Lb7ɇ6)`7El6]7;6M[76JX7:V6xV7D6T76Q7dC6EO7x6ZL7͍6VJ736H7َ6 E76aC7&6VA75ΐ6>7>v6L<7697RȒ677r6A57627yɔ607wv6l@.7$6+7Ӗ6ޚ)76I'7e56$76"76w\ 7N6767.6t7!j6'767'Н676x>7N16 7ߟ6_ 7`6hL 7367ء6[7z6DN7666=6K6ϋ6Yߤ660o6(66 x66T6z 6#66؀6W6?6ۓ6$U666Ė6U66 6 626z'6F66g6~E66 ݬ6Q6V{66!66SЮ6=6{6Š6J6\66>k6T6G6Բ66ų6g6´6Q=6'͵6'66&6& 676<6[~6{6"y6]ǻ6s66YZn66_"i66!d6u6_6I6GZ646A7U6,6 lP66XK6.z6bF6_(6EB66K=6686P6"46L 62/6H6.9*6f6q%6y6:6؝6E6Y(6~626m6 6^6a6=665165656&5N6ܲ56^5KY6׊5V6$&l56@56iN5646a\4p6M26c(6dȷ<6:6@U06as=6 06RY}6kqŵ66T޵h66Xu6v6k6;x*_y65J6ZG@^/6J(6Tr96C^!f6yg¯6Ap?6x6=96 6m6D76_6j6b6:6YKU6#c6ƚS66 6vUj6Yf6{s6Gf66S@6 6d"*6g0+7<7>g[B785970B7da7SӨR7֝V7LѬt7}x/V77;b7 `B 77!,Ķ7ɶ7 ϶7k{ֶ7ݶ7wn7<71d 7U77}kq7 .D7zI777U7"7'7,,7]07TA5797=%>7B7xF7 K7V6O7PS$7#YWN7-P[q}75_K7 c7f7>^7L 7Eh7X7=.7cc7e37%b67c6˕7wFe67˔f6a7g6+7/i67q|j6^7Ek67m6K7\n67mo6֊7p6[73r6_7xs6"7׻t6p7u6P7B@w6g7x6(7y67-{6T7>|6o|7o}}6)Xz7Ż~6mw76w]u7C6ur7;6fp7Nہ6m7D{6&uk76h796|f7O]6d76|a7Ϡ69_7NC6\7D6BbZ76W7-6JU7 ҈6.S7v6P7B6 jN7Š6" L7vh6I7J6lNG76D7^6B76>@7g6Z=7pZ6č;7:63797ذ667B]647 6927鸒6/7Gh6-76D+7ɔ6D(7{6b&7.60X$7'6 "76A7H6?p7u67#7^67|`6N7o6:767vn6Ú76lI 76 7ih67 6 N7S67E67ޠ66Br666366E66x6656%6G6+66)6Sj6>66-+6k66606V66|[6B6$6SѨ66Uf6u66Q6`6^6TQ6)U6606-Ƭ6 66`6f6~'6NI6ؙ6y86P646䀓6J>6v6U66i{66U6yՇ6 664@6s6f6#66Nz6z}6 u66Yp6r6z!l6-6xg66b6`6 \^696xY6+6oU66P66eL6P6H696C663>66,:6a6F56d6P*066*6UW6@%66R6[6666Y66? 66ۯ66H56n,5٭6)5<615N656ϙ565b6U5&6B!'56/U4F6h4I6m3Y6T"66166$76cFj C6ՕX6֧X6e6vٵ6T6" 6Z656&&6R`1W6˯;6fEw6OO6;XM6`6'i76pt6>x6u6q6.6H[6jъ6T Z6 6ѐ6a6d6锶W6镶`6Lz6s6 6Eh6vA6]χ66(}7ƯD7W7%m7$G7k7f7(M7h7ǧY 7h<7YR7BS77n|D7(7TŶ7a ̶&7>Ӷ͞7ڶDf7G+7DJ7󶜳7eyy7B777? 7S7؎7_rn7./T7 #@7ۙ(37=B-,7L1,71o6J17:^<7=b?M7yCXc7xH~7QLa7}P7+T7cX7B\O7u`ׅ7Fdп7hH73k=7Qo7r(7\v>7y\7i,}o7?/7⁷K7t97f>7֧J 74 7l 7.>U 7 77 7حj 7! 7$"& 76 7h 7TЖD 75 77g7 Z7\*7_Z7lo7AɡQ7!7yP7kХ)y7Y&7{)?7ЩL7#7Kwh7.ʭ*7/7A 71]6ԗ7^67E_6j7Da647ib67c6ő7e6Z7?Nf6S7g67h6ތ7)j6΢7pk6#f7l6(7;m67;=o6 7~p6l7q6R-7Qr6w7>t6t7(|u6^m7v6Z~7w6{73y6\y7Vpz6v7W{6#at7|6q7C(~6ko7f6Sl7R6}j76h786e7"46&c7Ղ6`7w6M^7B6[76}Y7Wa6W76ǵT7᪆6TR7P6O76M7靈6'@7 R676576Q7S676+ 726DY 7<6^7]ٜ67r67՗7A)7‹}M 7> 7 7,d 7ޞ 7 ! 7y 7╷ 7I)B 7M 7E 7uqe 7_М 7-)7̋7/䠷?7=P7䕣7Ah7C`y7gh7Z?7B7c 7鬷di7i<7uޙ7W6K7Y6s7UZ6M=7[697\6ZΓ7<^67d_6\7M`6!77b6X7ec617`d63m7ue6u/7J8g67{h6챈7i6Ar7j6&27>l67!}m67̺n6p7o6O/73q6I7or6\}7s6z7ft6]x7!v6;u7]w6?ds7x6p7y6qn7k{6k7R|6i7}6g7A~6d7 6(;b7A6%_7N6i]76|[7v6X7 :6@V7U߃6hS7i6ͅQ7I,6+O7Ӆ6L7g|6VzJ7%6;$H7χ6ZE7z6{C7m&6 )A7Ӊ6j>76<7.66:7݋6776C57>6K37K6_07S6.7T6e,76*76'7m6(%7 6[6#7Ғ6T 767,56P7j67鑕67r=6e76m7&6706o70ј6N 7666!e6쀦66O66*6>66666 6666A6'O6r6x6666|i6Eb66ϳ6 6K6-6/ֶ6~6n66a6}6\ɻ6[\66E6ET6yp~6&6-dz664cv6s6ir66Vsn6f6Gyj6ϱ6tf6Y6`b665^6d6Y6E6yqU6"6P66K66ǂF6a6n@66:6Y_64686h-66z&66 66l6]6e5 661j6*6$5N6%q5gH65W6b5L6@5_6w56D556LJ5Z64>6'46a#^*6)yW6/?6!%f6vX6U766>6!͵"^6 =66^@67D6cg6''60M6*{9na6Bl6JF6LQ6EX6x_96{e"6kǩ6pr6uE6y6}\6Z6 6Sc6#g)6$L66YR6֙6~_6 ]6χC643$66]b6zp67677Q7R2i77{ b7:yz7, 7-7W}7p#h[7uI(7]7|T7tԿb7Ƕ-7;ж"7ٶg}7ⶡ27&r%771j7<827w* D77787qx76!h7Ξ&$_7\g+j\7!0)`7~4(j7b9 z7=ݏ7[B7ջF7 K7u@OK7eSI7uW|7(s[dz7O]__74cr,7fm7j+7NnV7qC7`u87x75|-787i87>)7ƀ7)17 27E(7HɊ7CH+E73Íi7b:b 7^ 73 7 7~ 7^ 7ė? 72( 7ى 7雷zd 7G 7( 7N 7Y 7вP7 7a7շy75 7a?7J7 7\ j77>R6|7S6KF7T676(V6֕75uW67tX6(d7 Z6)7W[67\670]6It70_6667u`6h7ڹa6跊7b6w7>d6477~e617żf6ٴ7[g6ds76i617rj6v7k6F7l6~7K"n6E\|7L\o6y7cp6(_w7q6't7{ s6+ir7Ft6co7Ru6{m7v6 k7w6h7>y6+f7z6c7i{6Wa7}6H^7iL~6H\76.Z7n6W7H6tU7Ⱥ6=S72b6|P7 6mN7г6EL7^6yI7- 6uG7A6$E7Jb6B736L@769>7n62;76+97!Љ6U77 6 574627Z6u07m6+.7M6+76d)76M'7e6O%76,"7@Ȑ6jk 7w672%67В637Zz637O!67nŔ67yf6?7:6 76 7|56 E 7ȗ6"7X676zK7n66_6 Y6#x6}6636!z6[6646x6r6$6g6z6 6V6|6E666ޟ666 ?6H6ߠ66?6=6g<6ߤ6y6&6)ģ6õ6"6{6.}6N6On6;6n6B6|60c666Ǫ6t66vQ60R6̛6¯6[66666#6t66H6e6(6666666댽6~ 6,p6i46@]6 N6ST6k6R6}6VR6Ny6N6u6G6q6?6m6+96i6267Ee6<&6;`6\ 6[\66W6P6Q6"6K6460QE66ms>66 76q 6v /6J6l&6?6R,66K6Z66o6C56C8 6{´60w/6D 6tn@6 6騵V6&6gԵF6э鵮6ա6s6ֲ676"&6* 6Պ2`69s6Q@S6܄FR6ALq6hQ6UV6]Z,6E^*6;a6VdS6g66i69k6lX6O nX6n[6ooG16o6p,6*pڈ6^p63p 6p^6Sq6iNr7Wts7]-ui7 x,}7?^|77۫7ˈ~7hK7LJ7d-7\kNj7ޙ\97wd7E}7}7ȶߺ7`Ҷ_7۶ 7ɰ z6 ﶩ6Ds6 r6p+6H \6a6r6y6t 36`%h6<*6/63t65d816I7hb7S.f7i7փmg7qc7ƕtc7'xXW7i{7j~w7QW71777aɅc7U7݈7`x73ߋ7Yp57Ў70K6t7|L697M67O67]P67NQ6D7R673T6OĎ7#xU6l7 V6A7W67cs&7M6)$7x6!76ђ7K6E76767`26X7aΏ67f6ֶ7$6e7ۍ6 7(6 7A6u79/6(7h67776ח76<676.6Y6656\66{ 656K66ٗ6@6|6̘6Aw6^60666j66@6V666M6f6r|66kS66X86OѼ6+6I׹6+.6U6'@6366b66͔668إ6y6,66\6§66N6Ꮻ6W6&6;6̮6$/6o6|06^H6^>66W66H|66f62668666`6 66)676A6\86Z6|60x66666666666{66v66q6~#66]6ϛ466)6O6}p6@6y66D6096H5~6p56eR56ߤ56E56>_56 *5҆6Q4q6x4[a6 O3Z66Y_6\os61V 6X9`6U*h 6ڊ֊66]6˵j65ߵA6+C76 H?O6` 666{a6 #6E-*6067O67Hm7_̀7殶7ⷶI6O:s6ʶi6ҶԶ6h޶N6t6<>6)6u6r' J)6O6+q66E}6"6 v'F6N,6,1656aa:]6=>6[C6)GmW6L*63P1+6dQT6qZX66O\_6H0`B+6(cϺ6ogO6bkg6nC7gr 7u7by<7|H770D7]>t7_҄7aV7ꇷ7Vo7|o7k7W䍷^.7)Y7ʐ4797P77 >7@t&u7ؗD7:97n737gWa 71} 7 ' 7 g 7S 7$Q 7mq 7¦ 7A{ 7l 7↑RB 7+7'A6Y7%C6`7eD6}7E6B7wF67 KH6Rȕ7I6,7J6&K7(L6U 7oM6ʐ7N67O6G7:Q6W7{R6‹7S67T6]<74V6'7uoW67!X6:s7Y607:[67;P\6ѭ7]6m7Լ^6w\~7_6%{7)a6Nfy7n`b6'v70c6zt7d6 r7 f6o7IFg6;1m7_h6j7Ji6eh7Jk6Xf7uFl6c7m6Ma7n6^7sp6\7kq6QZ7Er6 X7 t6kU7bu6jS7Sv6K"Q7x6BN78qy6L74z6VQJ7[1|6 H7l}6jE7~6lC7/6GA76t?7 6!<7L6:76A87657Bj6B376y17sЅ65/76,7Z26*7"6gc(7 6&786\#746!76x:7)6[7ɋ6>7f6AP7 67,67(6|a7&67)D6 7 ͏6x 7S6.7֐6@7W67ב6sg7V6]6Ԓ66S66ӓ6^6U6+6ڔ6- 6c66G66Ȇ636"62r6Ɨ6"6t6Z?6,6664|66E66j+6Ȋ6-66K666Ӫ6ع6a֠6E66ʴ6`6f666a06ܭ696'6D6n66}6S6՚6\6V606`͡6E6?66;+66lh6g6g666y26yJ6|U6g6^y6*66P6l6e66S636d46,l65q6C6藉6}6M66g6v6#6`;66<6,|66`Zv6} 6o6c6~h66`6f6XX66WN6h6ǡD6Ї6ΰ96h6%.66"666>66656:52656+ɧ5S656xd5u6x/5@L6wM4)6#ˎ46[ڣ3o606L66K63,ِ6Y6bۂl66L6>y6ӵ~6ǒ6}au6 "6 656Ll6!:6'6-653638}m6<6@{6D.6G6jJ6L6NP6rPL6Q6yR6`S6c0T\6‡T|6׊Tf6/yT&6Tà6%gUGX6UB6WU)6TZ7vTM@7vW 71\џ7b4\7i7Ar7{7l,S77|RЪ6gH6P6t!6)6K<6" ĶBc6%ζQ6Tض6e<`6; "6$}u6!\656k 6Gu6^62V6]6P$r6)N6.6<3+67m>6v<6@6TYE_G6|Iѱ6 MW$6F Rg6Vv6QZ6^460a6ve`6zJi 6lj6vpC6s6bw6z#7~|77G?27݃s7 n7veI7717f7c27zo'7,⏷7Qq7P/L79(-7j7r7Wf7#87^7"v7lҝa7d-D7&' 7ߡڊ 7v7= 7>Q 71䥷 7i9 7.| 7⩷ 77K<6Cœ7ߙ=67>6K74@6.7FA6З7B67D6R7aE6q7-F6ђ7G6揑75I6M7xJ6 7lK6Ǎ7L6K79N6@7vO67ZP6a7EQ6v7#S637s[T67U6殃7V6m7#W6.72Y67gZ6c}7h[6Pz7*\6ux7^6v7m@_6s7oy`6u)q7a6n7Fb6,]l7.d6hi7Goe6"g71f6LEe7g6b7?i6`7ڊj6cK^7k6 [7l)m6^Y7|n6kW7o6$U7,q6R7r6QP7s6C]N7Hu6dL7jv6vI7x6GG7xy6bE7\z6%C7K|6@7}60>7 6Rl<7E6.:7677 6K57rb6n376,17Ń6.7 u6,7"6`*7ͅ6,(7v6%7R6;#76T6De6166Z66D6u6ڳ6ך66<6!6O6f6<66O6~6⚒666Đ6)6ˎ66nj6X666c66iͅ6 \666Yg66TI6n t*E6j66}6Y>ǵ{6ص6ы)K6^Y6iW6 n 6||66B6~$6פ)q6Z.62rq6;z66296<6J?x6A6CR6wEOi6PF6?G>U6H*6{HY56՟H6H6nI{6 J6b6e JA6(Hշ6F6F57I3t7&O=7"V6Xγ6`>6o6=Gy[6i)6Ņ6|6/Gf6RV*6Cc6ѳ06佶$6ȶ6iҶh6ܶ6NdX6n6tb'6-uP\6+6| P 6w6556D% 6|C"&6/'gO6,6u06Q}56:c6b>6G C(*6TdG96K*61Oc6S\6oW6[56r_6cYi6:g# 6j6!rnW6q6gu6xd6!|E6nj6#S6낷!7X}7[ 7j=77䔊T7=_717."7k!7ّN7CH7O7 7up7rט7a777C7j򜷐7M`7V7'7XL7񯣷7&gR 7[ 7_ 7Z} 7͞766-786T7h96K7:6-ٙ7<6@7)N=6|Z7>67?6ؔ7)A67fpB6T7;C67QD6O͏79F6o7I6$7-K6Ry7fL657M67N67 P6Bo7\?Q6.7ssR6y7KS6m7"T6~7OV6Bs|7CW6z7}yX6lw7Y6D$u7Z6Żr7!\6Wp7]]6m7X^6̘k7n_6K?i7.a6_f7cb6d7Bc6Gb7d6$_7UFf6L]7g64m[7h6)Y7Ej6-V7k6èT7l6kR7^n6.P7To6M7(q6gK7r6I7s6FG7Vcu6h E7v6.B7`;x6@7y6`>7{6%<7}|697}6]77L6io57,X6%037_6{076B.7b6i,7{ 6A$*76n'7W6%7E6~K#7p6!7[267ʆ6h7i^6*7k67#}6 7697T67X676g 76%) 7Ж6F7 6767>6g76 6<66k66V6#6W66Ap6@676ڐ6 6]}6Q6)66D6q6*6,6p66M66s76% 606Y<6:6u6_T666m6ؼ626 66j6z6ܟ6*S6`6=6686쟤6B62X6X6@ 6z66U6v6ܮ6)ح66Pܯ6`66+6B6D6:6<\6l6366) 6n׼6)66J6tc6X6з6V6W 6$6I6p6o66Hz6̕6;s66f66Y6<6J66+66;66e6e66d6y6v66Em6G6 b6SA6/W6|6K6xu6?616v266%666ƕ6]3 6S6sy526-5*6e5W6m56ks5{6l5gf6T95(6-56246456,?6\&6Y>ǴGt6'6k8to6`66j60ꨵ6h 6S7˵V_6P۵6UId6:[6]v61 6\ 6 6!xvV6d 16$E6(6,6/6#2҇6z>5-6]^76+9 6X:d6;66{>>S6?6y@~6 @I6 >6Rx;6Z8G6,=?6ME6VM6T6[Z6Ld6\m6Q)v6++6 D6ZTI6Q(6 6ح6 16a¶Q6Ͷ6(׶6.ף6)춘E6M:B6~ 6|*/6 g 66νF66i6$66)46v.|60-3F6C7+6Y<6@ 6.Ev6>xI60Mz6Q6UQ6Y}.6]6xak64e6]h6?ul0f6o6tsa6iv}6h6z46}n6a6f6#%6+6{6f+37ٔ7'7JX7º7@77`7ɓE707o4 7o79W7b67%7nr7dɞa7"7z[(7>Ң7(7N~nS7IӦ&7' 7P7L16 _7(26)!7'3676567966b776!7w9627b:6ϝ7;6Z7<6:755>6?ӑ7w?67˸@6}J7A674C6n7cpD6 }7$E6697eF67'H67NI68q7+J6K07¶K67L67N6t73OO6H97 P6}7Q6@{79R6r!y7T6tv7VU6USt7V6*q7W6o7Y6;m7GZ6Yj7[6ǔh7*\6Ff7^6mc7d_6Oa7Q`6Gq_7%b60]7M]c6dZ7d6X7qf6zV7msg6AT7Th6 R7;j6O7k6,M7 m6WjK7xn65I7:o6!G7Rq6AD7r6̖B7.t6`@7u6)>7_w6B;7nx697*y6|77Q6{6 @57c|637`}607C6.7I6P<,76)7ؐ6/'7/6g%7N˂6#7c67 76_7^6g>767627g,6b7 617D56>7h6756j_ 7'6** 716$76X7*.67Y6706666yA6d+6&ь6T6Rg666J66Ln6[666ϵ6=ݐ6F676Cr66|6626696)6G6´6R669V6+66M66H6H6 d6Y66(}6ߑ66B6666ԥ6)6C6F6⦩6S6ԥ6ݔ6㳭6ܱ6<ѯ6*66~6.6׬6f656Ǡ6666X06i66֤66B68664t6*6a6/;6'6]6b6DŚ6666Q6,66r6,6~6_6o6FO6666r6j66y{6e6q66#e6J6Y66jM6[)6@667k366&6H6@6@6/ 66j5kl6V5605V65[-6546Op5 6T>5I6Pv 5%694)6f=4"6B 2J6&^6jv26-w6"%C+6Z@L6iq6늵6g'6A^6yuc6͵[\6۵$6T6w6z%ӻ6o M6 6|6"6,6t(G6ч#6& 6F)/ 6s+!6.}[6X/ض661!6\266 4~64= 6!57j6a7~6ޕ8y 69m8V6M686 4636<8x6\@66G6=P 6Y6a6lj=6q6yCa6FŁT6FN96U66z6Mw 6=L61ȶ6*Ҷ+6Mݶ6Dr6~46 66 "6C66j6Z:"6FsQ6>"68h'b6K8,$60A65>6*:/S6>k6M CzG6XG6"KX6дO6SN6W/6[6Av_f66c6fl6j?o6. n"6qE6t6XPxL6#{P 6~6 36H61 66B6"ĈT6_A6~6z0R7ۢе7 7`~|7 蒷79OC7".7 7wn7י\7467Đ7띷7#Ea7_7)2)7K 77T7?K7j7$+6+7-67Ki.67/6k716*7O26U7367[46b7+667p76ٓ7867o96P77;6 7Fv<61Ǝ7ܲ=6|7>6=7&@6J7]A6$7B6s79C627D6I7(.F6Y7*`G6u7H697/I67J637'L6 }7ZM6wz7N6Rx7O6u7P6s78R6:q7tS6n7gT6l7U6Hj77=r6;7Yt6|97u6\772w6 57mx627Cy607 {6La.7P|6,7}6A)7n~6h'76eI%7ϒ6#7$65 7ɳ6m7?60%7Ȃ67N6 7a҃6T7S6B7ӄ67Q6C7~υ6r 7L6H 7ʆ6&7I6+ 7ˇ67N6 7ֈ6P6b666T6696/66ً66䌌6M6L66666i65׏66̐6O6ґ6l66X666J6M6q6 66F6b6666{6T6r#6u6۟6u6166|6FH6e6-~6]6 6c6o6{6<6[6y6ү6Ҵ6q 6%6F6|6y6;گ6Ӹ6|96,636666k6-;6Ƨ6co6C!666666 66ڞ6\X6 a66™6"6+6J6K6|676b6~6 S66U6ބ6(66(66s6(6\Rg6~o6Z6r6ĉM6sA6YL@6`6266O|%6"6A66 6S6q5|65y65656В5޹6.t53v6uC5&H6506436i4T6s3X6`.ֳ 66Cִ4$6'646@ɿ6rZ*ѿ6~}6K666F֯dA66/͵_6k۵ 6q@6F6Jf6<6{ 6Ǣ6666%^^69L6e!T6#6-&26<(%6*r6+6,6܎.+6V006f2p626U26V1{61@6h6^67=6FLE%6KMQl6VaR6_s6NgW6nH6fx6m~6]4-6׍K6PA6vl6k6caK6Sö~6~ζ6T ٶ׹6/㶋y64/fL6j06 $6o)6T h=6F<#_6OV6`567Y 6g?%la6*56h."6y36 8 6<6(@ 6FE6Il-6M6FQd6jU-6kYׯ6|][6@a 6d|6hs6 l6+6o6sO6ov`6y 6)}.6 ʤ6^eh6H,6zԄ16[6އr~6K\ME6֊ 6(M6O6>0c6@7y7Lo7ԔA7 8 7g 7+n7V87YK67lX7Fh[7cb7a7~oY*7yţL7I7\oGV7773K&67r'6.70(6u77*637-+637,,6ޭ7.6i7d/6%7067T167?5364V7)w46756}ː766]7086A7j96X7:6ƹ7;6w7r=6S57A>676t?6}7@6w7eA6V;7C67?7D6ǁ7gE67/F6~7G6R|7H6y7u4J6|w7kK6;u78L6or7yM6Mp7 O6kKn7cP6l7Q6i7 R6vg77?T6Be7U68 c7V6`7=X6Ӟ^7BY6Bm\7~Z6=Z7$^\6X7]6:U7._6S7`6Q7b6aO7 xc67M7d6 K7Yf62H7g6fF7:i6ZD7Vj6UB7l6$@77zm6=73n6;7/626166&($6_66 d6 66516c5k6x506a56 576Ӥx5M6GJ5.6=/5+6a4fH6L46{3J6K+[g6?G6yż6QJ6ɜ s6Cܼ6Xe(6~D6Bo6Vﳾ62m6@6(͵.6oڵ86!^6ż򵒟66s6x| 6Q -6܆6T`6W6q6xO6"6<"r 6vT$F66&Vh6q(a6+$ 6-U6X/66O0A61Ԡ62~66I7W6=bi6E 6N6&Vy6:^f6 fh6|:o6xK6$B676s6Aؔߑ6,>6.12 6˵6Pg6 ʶ6)Gն6߶^6I9E6;6HFoA6aV6 }y60֩6H6Q.6ID6,0#6(G6,F6m1066ڰ6:96>@6PDC]6:G6K6O?6S6Wߗ6Ō[I6S_6c6fq67S$67&67P'6r7(6-7)6\7d,+6Ţ7r,6\7-679.6Vђ7606̋7t16F7P26736756z7jU6687W76786C796 z73;6=7L<67{=6Ƀ7&>67?6]7 A6*7;B6_}7nC6t{7ǢD6?y73E6-v7G6֛t7MH6Pr7I6P p7J6m7uL6xk7^M6Ni7ɫN6g7qO6d7YSQ63b7lR6`7h T6LY^7$mU6z/\7uV6CZ70;X6WW7Y6?U7e[6S7\66oQ7]6IO7=i_6R#M7`6@J7Nb6H7վc6"F7,e6~D7f6@QB7g6!@7`i6=7j6n;7l697bm6?K77n6k57o6127+q6Ȑ07_r6_N.7s6L ,7-t6)7Gu6~'7 v6x8%7w6d"7 y6G 7z6i7{6 )7 |67}6!7q ~6}76O76)(7|67L6 7{6} 7676767r6786\L7?ׄ6$6^~66&/6P6656I66B6W6g6M36W6u6mX6B6)i6N66I606866V6"Y616(Ē6]6@A6@6 Е6(6tp6N@6"6b`66a6W64666j6/ 6{6X;656Ui6Ц6=666566o6%6뱯6[666Z6չ6Ǿ66!!6I\6t6㤴6ܱ66ݿ6a66?6J6Hޭ66Eū6a66,6Lt66ᔥ6^6ϣ66С666c167 66[6+6D6(6 56vV6.666~6&6q6q6ed66QW6PY6:J6s6&<6l666L=6g6v;6䲶W6 Ev6"Ƕ]6Ѷ96_ܶ&6O#6.4.6.G6m6'6'G 6Z-6_k6OUT69!O6 &A6*1?6su/6 4xN686*_ 7)~6b 796q 7G*6376v7 W67u6C.7ޢ67W668666L666흆676⒇6g5666;6-6*ъ666V66R67^6Q6D66c<6Y6[C6y26V6֔6Qs6'66W66b166l666.66?P636l6Y66ᆦ666l66 6>;660666 +6M6M6*6t6]66%66N6,D66ur668s6n6kT6yA6K6>66Z46#666©66D6~6S6L6d6/66Ӷ66u666l6606g6{6B6Nn6n6a66T66JG66:6M6z -6<6 66 W6!636Ď6)5a65\6N5IM65_ 6Hϗ5ߺ6&5ӹ67Z53663"/i62T626m6 <}6qB 6Jl6R6[66@`d6*kr6 +s6Jm{h&66rpD6n6M`6mU6xurE6̚6jº6ĶK6/϶6J]ٶv6i6 6jB)96Fs6/fø6h} 6މe6ei6z:6Zղ6)$D36(6ӏ-?K6%266~6?;!6i?6Cw6G(6K6O6'ST6 W/6/[K6&K_6{b`6f(6*j6m6pb6vGt\S6Ǔw6Nz6~`66G&U6/#6 56#6"2]6ɪmX6G%66F6l6DՐU6< !6}66zcp6D—K6{6;{6՛6.E97ݝ7=ޟe74f7F7ޣ/776U7u6W7i67̟76706@7S6%76y76l7/ 6%7,u!6ߖ7A"67#6R77%6 7s&6Lȑ7'6i71(6A7*67JN+67,67$-6C7.67 06_χ79167/f26b73607467#56Mс7767K86=~7~96[|7:6Raz7;6x7$=6u7a>6s7?6kq7o@6a9o7n3B6 m7ׁC6j7D62h7,F6f7G6qd7vH6Qb7qNJ6-4`7·K6^7$M6[76N6Y7P6W7{Q6U7cR6ΑS7eT6uQ7U67Nb6;7c697d6q77`e6357g627;h607Ti6n.7_fj6+,7fqk6)7vl6'7wm6ra%7tn6!#7oo6 7)hp6:7_q6x7hUr6J7Ls6B$7QDt670?u67$>v6k7Bw67Nx6| 7cy62 7z6# 7{6#S7|6/7.~676A47{67=6%7 6-66T6 Ѓ66Ȅ6$6Ѕ6Nu6Y6 6Q66HM66[6a6M6gQ6o6Q66_6~6w606"6+66c66Ϙ6u6N66~606;67=6ߡ6A6ġ6A66;6"646^66)6@6P"66$6U6B"66166s(6>6HL6$j6t6&66Ǽ6ʊ6@*6Rn6|6V66-z6q6~6 6ٯ6n66 6ߔ6a66E66:6> 6,6T6[6} 6766@ 6E646*6T6 v66Ρi66]66oP6w6fC6666M6Q*6Ϗ666Kh6W6D69ּ65Td656X565l6Ei5{65z6c56<5M6j5?6[4a%6JD46$4ز60H26+6D[6k3Ĵظ6+6%6EF6eX6>6>ˑ-6aXq6NVv6 06:ȵл6$Ե$6(dߵ6鵬66~U6=66t M6) 6K6G6g6+7 r{6D-%j6;*h6.`6۝3y*68i6> 6, F 6M6lvV6V^<6e6:`m6G2uR 6|62A6 6=6e3e6_oR6&D6Ю:6296?¶A6x̶V6ֶv6ඤ6붇6R26ai6i6V $6X66Ķ 6ڑq 6\"i6'-6+6O0k6n4699~6K=s6A*6nF6#J6Ne6R4*6U/6bYI6w]$6 aQ6zd86B@h6kw6"o6H}r ^6.u.6@ y6HA|6j6Dr6[ςPC6U6:օ6ES6~̈B6BQ6Nk6i#F66.6A`TT6 Œ 6'^6η6疷ނ6DM66N6TS6v6\?6Zl7Ti7:7c7H6W7/6|ء7627;6K76{7667'"6u7k6j.76%76+7:6Y7;{67'6rΓ7 6"7-"6F7d#67$6OĎ7o%6N7&6H7*(6 77X)6Ӊ7*67(+6f7+,637C.6+71/6Ճ7]067̊16m726Y736k~756(|7T66my776w786C|u7B :6Ks7Q;6q7<6n7j=6l7>?6бj7@6h7A6wf7UC6^d7ؼD6Fb7((F60`78G6y^72 I6\7V}J6Y7%K6W7jM6(U7N6$S7zYP6Q7Q6|O7CS6_M7T6@K7V64I7}W6F7X6D7/Z6B7{[6_t@7\6^A>7]6 <7)_697IR`6577ra6\V57hb6}37ڛc6$07d6 .7?e6L,7f6O *7|g6Q'7h6Ҋ%7;i6O#7j6(!7xk67ll6<7:bm67DZn6+78Vo6m7kWp6{f7s_q6Yj7%or6y7Շs6 7Īt6# 7\u6 72w69 7ex67,y6j78{6O[7|67fc~6hd76/66JN6*66R6C666I6Ѡ6z6r6cۇ6wY6=6Q696X666uk6OЍ6j6~656?666666=ږ66Ә6Y 66ݚ6466Z6H6B6:6`6l6{6i6K66(6E66ț6666n/6ly6_6&r66L_66U86Ϲ66&6*ι6ﶾ666ݵ66u6w6%636j6\666”666!6s6]6W6y6ӓ6`6%66H6v66,6|6zi6q6Z6e66X6ݥ6L66$@6p6,36566n'66Q66Mv6t66h6O+5␶625A656f56Q5 6v։566@m5Ĉ6&H56t$5,6~5s6њ4d6Mf4}v6 36&?6s97C6U߮6&9)6R66K6tW6^w6K6V왵6L86ؙ6oµ6εQ?6.-ڵ6;)#6ﵐ6yM66v61 v66uu6GS569Y6G#H6^o) 6O.X6Е46:"~6A5~6kI6ӆQ6߾XD6B`a6sgt67n6h!v6~V6۽6MP6A6 )6F:6M6Bk d6h6 "6Հʶ\6`Զ 6U޶N6X 6d6|tiS6?6q@26#9 16'56 W6CX6 /6V%6)X?6.6Z3i6un7Y6;6@62D6kKHc6#QL-6CP6 #TD6W6F[wk6U_\>6b*6wf6i60[mː6pf6t^;60Iw6~zp6^}6=e"6;a6rv46*6u6i6oe{6؊ L6G6(6.6d6tꑷT6hMr!6g6 ҹ65ka6JǘP6!v6q{6ӜA6+I 6L7lx!67٥"6R׋7#6؟7$6j7&&677P'6O7y(6dم7-)67*6>73+6_7&-6;7V.67/6T}706{716y7T236C_w7r46|5u756s776Gp7P86Jn7Ф96l7":6j7\<6Èh7o=6uf7)?6odd7Е@6eTb74B65E`7yC6`6^7D6v'\7KhF6Z7G6|X7[I6U7 J6S7LL6Q7gM6 O70O6M7P6xK7.Q6VI7TS60G7TT6dE7U6B7)W6@7+^X6t>7Y6;<7Z6:7[6e77\657]6=@37^607_6˺.7`6x,7-a68*7b6 '7Xc6k%7d6u#7.e6U]!79zf6#57.og67 hh67fi6W7^jj67;uk67l6 7m68.7n6]7o6ۚ 7?q6 7 r6> 7Fs6ޥ7mu6g7v6/7hx617Bfz6H7CD|67>~6;7R+6 6H6`6x6 y6964S6B6EA6hq64?6,6K6o6b6" 6|6s6L6x66R66.666h6 6C66ˡ69%6 r6A636Ih66雠6Ӎ6]ۢ6N.6#66q6pd6666f6(46`6W669n6{66 J66I6ϸ6w6=#6d6)6W6\6c6<6d6666km6\6L6=66b16JP6z6m6^66J6K!66W66\z6A6 R6&6]w6<64Il66C`66T6;6sH6o6I<6A6!J066\w$6t6z6:6O 6 [6Yy66.56=5j65AW65a6à5^6o546x50a6:U5 6ݯ15ݫ6Օ5Xҫ64K6>46Q4X6OQ2F66ߴ)6.ʹ6} 摮6+'06cM6m꧰667˕bv6$:6}y6p׵6˵%6׵k6 㵑6*d6i6s/6*6X K6qq6;š6o:6"6s(6 /8U656 =x6'D63LT-6/vTI.6R[6cq68i+6%oK6"w76~6>Ix6!6'76` k6EN?6'l62S76646ߣȶJ6.OҶ66.ܶ?6v嶒T6/6*56t6R96 6&a]6pW6< 6UH6\#6{E(6,xh6I1'6 56:k6)B>~6mBL6WF6oJ6}N!6\Rڜ6&*Vt6YM6]y'6)a6@d 6-h6&k;6nk6FrwE6 u6Ox64{66Jڧ6~6JT6uP*6r666w6lOI6ٌ6C6k]6 6sV6Փ#6r4z6"6V6 ItT66t6sR6訞46$I6vS67K6ꬤ7"6d7v6v7B 6Ӡ7G 6=7 6B7, 6$7u676Rj76E#7C6 ݗ7.67ڿ6S76716fϒ7e676Q7676܍7~!6d7K6o7t63<7 6 7!6އ7e"6貆7)$6g7<%6d7f&6A7]'6%!7 (6e7)67z$+6O}7\,6 s{7g-6Ky7.6u(w7g06 u77T6kt<7 V66:7mW677 X657j Y6Gr37Y6/17Z6.7[6,7\6p*7L]68(7Þ^6b&7_6#7~`6԰!7xsa6A7mb677mc6u7td6ew7e677 f6ǟ7eg67=h67Tj6w@7[k67Ql6 7wn6B^ 7ڗo6 7O,q666636666 6#686F86;6U66w666{66R6666n6)6R6+6'6f966S6e6{666|Y6u6666A(6y66ڷ666]66i6+6,56766;66;6J696ھ6X06fv6666笷66D6_6tN6)Y6_66N6/!6գ6$656s6ݵ6)6&666H6AI6'666C6'6}6oG6r6|V6Zg6i6[66O68ø60 D6 6[86vX6X,6y6nd!6;6S6o6 6*6S6ʭ6'5h6B5,6|56߫5^Ʃ6ݤ56R5y6́5S6J`5*6'>5"6d5356M4 g6߫46$I46f34j6թ6V!hJ6˪6tNZ6ȫ%6 Hf6ri p6J696SѢ8?6N۰[6^G6)˵+Ƴ61׵@ 6phd6Laݷ61 w6O"67- ʼ6%`6%6e6!6t(ҟ6t/U69756ۛ?x{6kG6 PN]6V6]6Jd 6yjn6;q6>x&6i<6Nqh616@m6d-60v6[_6wM6=6򯽶0h6aǶ6,wж$6] ڶޒ6V 6Cq]696͡6ve96wD 6)~6;*6լk6qb6^ "OS6c&6&+06(/63w62M8J66 6pR6ʙ-Y6"$6gz6Нg6&̄6j{N6775Rs7#69*7w67676[N7Tg677h6m7(6t7RD 6s,7 67| 6ʟ7= 6[7)E67*~6Ք7l6ѕ76W76@7G6'7`s6U76s76@7U6767]967^6ˏ7z6Yj7>6G7, 6'7!6 7(#6[7W$6؀7%67Ͽ&6}a}7'6@{7P8)6$y7P|*6 w7+6t7#-6?r7i.6p7s/6n7$16~l7j26sj736׽h7c56Kf766:d7P86>b796Ͱ`7mJ;6Q^7%<6e\7^E>6Z7?6_X7:7LP6(<7IQ6q:7:@R6/871S657T6372U6g17U6x'/7V6,7W6*7X6(7DY6R&7OxZ6U.$7.n[6"78i\6 7i]6b7o^67:}_6;7+`627ڵa6_7]b67 d637je6V;7f6L7?3h6<7i6 7kNk6T" 7]l6) 7an6qg76p6"7Hr67t674 w6J7ny6u7{6g7~6c7K66'6D6ϵ66W66 6+6ˆ606~6"#6AX66866U(66&6Ih616H6K6K6Gu6Ǔ6竚6z666%6*6\6OM66y6686ͧ66ީ666"6~ۭ66>¯6?G6l6å626(6p6 6`6 636tk6$6\6-&6ƫ6ҝ6da6I666*6i6~6h66666寏6[46z66Ȇ6U96鲁6>\6fx6p6m66b66RV6ݴ6%K66?6[6ZF466R-)66v6|6(66l" 6٩6z6w65z6ص56 5v6ӹ5AC675̤6ʼ56+5`6#l5\6zI5Gs6`?&5ત65U6564S6&l4g673"6sovU6U6ߩ*6 6%6:HP6j6cUB6电NЫ6أϬ6w((߭6ݿ6͵26 ڵS6\f6862w6/B/$6 6DX6GZy6`/!6H(P6"0W\6=86o0Bny6KsK6MQR+p6rXP6>_6je86k&6 rG6xԪ6\0Ew6虃E|6w6W6Gy6+"68_6˪#6ӍXo6z6Ŷ86Oζ6|.ض2366;P66 666e 6N 6t.W6,564p6Sx 6s%Ey6)M6-$6V266R6q:6?,6Cx6G$j6KP6N=86R 6}mV6Z6B]6U;a6Ed6"h6*kio6dn S6r56Ou:6|x6({6p~L6〷ϐ6el6䃷 F67_6;ֆ6I 6Y6|'v6I6P6_63ÐN6$6D ]6(┷\+6>6r6󘷪6K^6_*6l6 Ot6죟675;97U5<7P577L5@[7C5l7x6ǟ7<6~76676/767R6pc767" 6*ݖ7# 67%9 6]7>6 7e6_7p6k7s6-́767 !6X7Y"6 ?}7#6){7O$6y7N#&6 w7q'6(u7J(6r7 *6p7+6en7,6l7S.6j7s/6*h7;16'f7e26e75463c756"a7376[_786t]71:6Z75;6X7D&=6V7Ӗ>6hT7?6 R7ZA6P7B6RN7C6gL7/E6?J7[F6BH7xG6E7.H6C7I63qA7*J6I3?7}K6{<7@iL6:7NM6k87..N6'67| O6374O617P6Ef/7Q6--70R6*766֤66Z61v66B6O6?6y[6^ 666`666(6I66On~6U6Cis6 l6~9h6 6]6ޱ6Q66eDF6M6;6e6`W06˩6%6X66D 6,66j6ɤ66Tã6'5~Ң6w565\6W5I605ݣ6=56K56κs5歠6P56h-5=D6B 564 6K46M3q6{H6;^l6<S6fA6.=*&6zM̥6oօ6|eS6 (56A6{õ[6tѵ+669޵h66s]$6Av6y6}6 6 I6 +h6ƆC66qj6@∷6O6 y6"M6w6 쏷6M6@67 :b6g06–6;6t͘6̚e6"06&x'6̞,6I7u57g57A5Ki757Y5ԡ757ސ5A7\$57576l7C6 (76+7T676d7I6'767 6b7H 6}~7*q 6AK7n 67 6+76hŒ7P67*!6u7B6S7Hc657676 767C6փ76ł7L67v~6#7w6E7867}7c46-{7{ 6'y7a!6$w74#6$u7w$6's7%6,q7?'63o7(6;m7!*62Dk7+6Mi7-6Ug7.6i]e7h06cc716ga736i_7O46h]766d[776_[Y796NW7n:6=U7;6Q'S7=6 Q70`>60N7ܔ?6L7v@6BJ7A62hH7B6 2F7C6XC7-D6A7E6v?7qF6w2=7U]G6:70H6l87I6b67I6 47ϯJ6 17GK6q/7?qL6&u-7XM6UI+7DN6]&)7v6O6 '7k.P6?%74.Q6"7;8R6 !7NS6$7poT6L7ȜU6p74V67_X67roY6:~7Z67fL\6Gi7^]6S7hi_6އ7a6)7\b6 7d6 7f62Y 7h6e+ 7&k6 7m6[7o67r667[u6H73Ox6^7f{6Z7_~67n67+6;6L66666t6މ66}ԋ6q6Ս6666v6o6066X6(r6y6"66~696C6>6+6Ϡ666B666צ66ç6I6 O6"6ƾ6)6ά6=6i666c6簱666_Z66&a6P̶6=6+6,6p 6#6#ø6C6@6Ϙ6}6GL666e6^66]6666z^y6 60On66c6;6܋W6f6?L66 TA6666-6^,696D"6 6"66a66se6656_5 65t6/56 Ծ5뿜6ޮ5615`Ŝ6UR56qx5@6HV56V"35H6L 564j6%p4U6yʎ36;ԟ6~:63tҴy664x6`X6zʢ66O5]6`856BK6ɵ/6ذ׵,6ԩ嵦46!]66 m̬6*6Z6'6Q'*޲6*I1O6t;86uG6tO6UTҹ6x([⻹6g`^:6If[6mv36t6@yUڸ63#6R6|{]65Uظ6Ԓ<66@ԡ6ԩƋ6 6u61ö$46R˶yּ6ԶM6nݶ062H6e:6+g6p/61V6 6R6HS56g6MzM6!:66m&"6 *F6$/Q6Xg3p67E6?;e6?n6C6G6Kw6MTO6 S@69V߭6MZ_6]6'Qa~6Dd{6hjk6mkjY6nE6 q06u6;x6T{6Ed~6`j6b4B6nzg6&D66Z 6y6㊷6 LN}6Q6%68wE6֑646egh6Z앷A76E\6r666F7r>6@D7?6A7;@6?7[A6/o=7#B6r';7B687лC6a67ޏD6[47hE6 27OEF6C/7&G6-7H6u+7H6&)7I6aw'7J6x%7 L6|#7;-M61!7VN67O6 7P64T7VR6¬7SjS67T6G7GV6)7W6+7cY6)7e[67\6{7^6067`6 7_b6 7 e6è 7_g6 7si6 7[hl6y7S-o6w7r6"{73'u67Dx6߅7r{67Ź~67 6ڃ7,ނ6QX7غ6P6¡6|76696j~6((6}6H6666S6 66Ȕ6o?6Ԗ6<6N6"666 66(6;646ެ6H%6@%6A6u666%o666w66,6?6Ҫ6.ް66c6666 6R6_6]66H66dZ6|666ȴ666Q6 C66ٰ6 36>66b6`6b6 t6`e6yZh66º\6ܺ6>Q6^6F6Z6#6<6PZ6?16jD6M(6+K6H6 V6G6T6v 61G6W6=6a5O656x56h5dޘ6+ÿ5Y6-R565W65)6¥{5n"6ֻW5f6aN05SA6T564ڛ6F=4R6_y266;H6𴚠6 6C96f56`ޞ6”l6{L6Ey6Rgµ6;е ¢6vߵ6R67;6VW6pj26L6uI6P'616;a6¨F6N6U|J6)[6`G6|e6m6XtaӲ65zȳ6N~6cƞ6J+$6\6n4g6Q}6lġ6wi6fhb6g6LP6ʶw6PӶT46?ܶ6KO@6xe6ȲY6g{06p 6S (6L_ҿ666 6< +6|$6hK)6-\61666:6<+>6K%B6GFq6UIċ6MM6dQ6 U߉6 Xs6P+\g6_z6cq6nfg6ſiOZ6mzK6=p:6>ks{'6iv\6y6$|6ý6]x6"قp6Pi6ą G6Y5"66 6av"6G܌6?W6c+6`6b_L6̻۟6o6ap>6ȗ 6# N6v36̛s6 ?6)թ75 7|5=7I5w7H5S7n5[7@55-75ɠ7ga575!<7s57<5?7g5t7l5f67?5r757P5W7,O5mV75x%7Hr6}76̐76䤏7W6U7q6^76@7"6%7,=6 7X 67u 6?7Д 6S؆7* 69̅7n 6„767_067!c6f76b76n76 v}7 g6{756y76w7v6Qu7~6Xs7xQ6Nq716o7C 6m7b!6Vl7C#6$j7$64h7R&6Bf7i'6Md7d)6Tb7*6W`7i,6WV^7s-61P\7J/6DZ7063X7)16bV7+(36S7I46Q7`]56kO7e66VM7[76HK7j=86, I7N 96NF796kD7:6:B7BL;6P?7 <6=7%<6\;7u=697_>667*/?6f47x@6]27p@6/07A6} .7B6+7eC6)7BD6W'7GE6d%7K G6$78H6G"7dpI6 7$J67K627uXM671N670P6=7Q6.$7VPS6ü7U6_7aV6 7X67˔Z6Ê7\6VX7;^6x17"a6c 7qc6 7 f60 7=h6] 7k67n6e7Pq67Qt67 +x67{67>6\7|6(7F[6-k626p6j6O`66(6׊6Ҭ6ӌ606xю66 ϐ6D6fВ65l6!ܔ6C6O606626C66Y6m6@I6a66ߢ6 u6g6ӣ6B6W@6i6~6(6ͧ6̰6k6&N6S666俦66h6666V6Cs66;6=<6;6zǙ6a6ĕ6^6(6o˫66t6V66fk6Nq6 x6g6l66`66ڷU6w6HJ6 `6F@6ue656\6>E,6ԛ6P#6R666.6[Ә6_ 6m6n^6Q6xU5d6q5-6i565%6T5}6Ȃ5ڕ6߱516h5-6v5n64bM56H!5t64j6i4.636lb6Ke 6Cƴ96O š616U+6x.6(Ț6"h6 6û6ʵ r6^ڵ86a鵨6RG606 [6ͣ6Jr6D&B6_0(6G; 6P>FE6N6UW6ZDE6ci6A!hį6]n 6׼tR6{6:.'6j-s6R^ p6͍ԭ6Kꓶ6e6y56 6;ǰ#ͱ6;镲6'_6k:ɶ)6Ѷ6ڶhǵ6x֛6{Du6ŒS6668?6U 6 6*6'i6mh66sw#6'60,S6VM0p 6u468?"6<.6@96qDD6AGHN6q LnW6O^6fSid6V'h6Zi6]Ni6gaf6dva6hZ64ZkP6nC6q*56t$6w6W {6~666\{~6kkn6;`xL6 ·(69i6hw6[6kI6̎-_6,26~6撷6A6ew6󖷜F6K6U[6K6eK{675N757;o5õ75~j75 7\5֢75k7+5G75z7U5'75}75>75-7Y5Ș7;5Ӑ7 5i\7\5*7|575ђ7%57^575c75E7]z6"+7867(6q7C6J7 6&796ԇ76t̆7X36ƅ7X 6qÄ7 6ƒ7L 6Â7 6Yǁ7!6̀7Oc6E7έ6G}7w6{7Z6y76Dw7+&6v76+t7I 6zEr76^p7d6wn7p6l76j7Ȥ 6ݵh71"6f7#6d7E%6ob7c&6'`7B(6^7)6;\7 +6FZ7N,6ҧX7}-6V7E.6|hT7!/6*>R706 P7616*M7]26vK7-36#QI7*36PG746>D7;456lnB756? @7ˠ66=7[765;786WA9786779647G:627o;6p07k<68X.7$w=6J,7>6L*7?6^(7F@6&7^ B6ɱ$7 EC6"7 D6G!7^E6.7[-G67H6 7J67HK67;*M6=7N67P67gR6B7tST67`V6c7{X67Z6!}7/]6e7ݺ_6S 7ob6I 7LDe6E 7+h6wG 7#k6HK 7^9n6pG7Dq6 -7u67x6[7v|697 6/7Ɓ6k79k66666666P6,n6O606,66686i666*6066*T6 6D66^Ԝ66!666 6=696o6h!66zs6~66䊤66KS6x6}65616?63]6X76h6_6T6%6I6<6 }66&6666G6B66 w6>=6[,|606o6z6@c6E6cX656gM6[6"C66$ 96<6/6Ը6\'676K6666*626F? 664665>6M456O5)s65 6̻506b5޿6s5M685<6c8e5z6*}95E\656ڄ4G6e4Ó6+36TY 6X枴'6[6!w6F6j56C6~63O566yŵO66ԵZ֘66o%i6l6vs 6v6}6$d_6/E=6<:%6'E6.N脨6jU66bi6Sf6Hkz6dp86u6o|k6Eި65kΧ6Uԧ6ێ6韔z6P6~6r6rZ6$ʷ;6W6Ƕ 6Qж̰6yض61ˈ6-m6l|XV6[yD6t76+O/6 ,6ZV5.6M36CO=6J6"Y6W&yk6R*6.62k6i7<6;6>6B6rF6"pJ!6#N06Q=6ZUH6X8Q6ZX\ W6<_IZ6cZ6nfX6iS6:l9L6pA6d;s46[Tvc%6cy96~j|6h6/G6ɲ6-+6u6S6d069͉k 6*36㖌]66CXg68s;6"6wm6Ɣu6KE6~vIO6̘n6 "6v 6 `7 <575eƨ75[z7OF5/7v575ӛ7p#5,T7Ĵ5$7>5ɟ75ڇ7:5G7Ȭ5 7v5Ϛ7w57V5b7]#507em57ð5d֔7"5A7-%57V50h75FJ75/757i57 $537,M57w5J܉7R6Ԉ7k6χ7ˆ6͆7q6΅76Є76~Ճ7e,6<܂7d67| 67 6 7? 6~7 6+*|7s6[Gz7`6ex7=6v7C6ot7ž6r7gB64p76n7)]6?m76*k7}6f=i7 6Kg76Ue7!6RZc7p"6Ya7$6S_7^%6F]7&62[7@'6Y7/(6V7w)6T7B*6R7Q+6^P7o,6KN7-6K7!-6I7o.69G7/6D7/6\B7a06B@7 16=716v;7t26c97>36'77 46>475627r66?078-76O.7}K86,7ln96 *70:6(7;6 '7<6R%77>6#7^?6 "7[@6r 7DB6U7C67IE6-7OF67H6N7HJ6#7 L6ߦ7M6Db7P6#7%R67\T67V67.Y647 [6}7^6u 7%fa63q 7XMd6l 7[]g6[ 7j65 7Hn67r6!7Zu6}]77vy6 7|6p7^6B736=6|6a6mj6a6-666L6606T6ا6L6 S6686-6{G6 6_66M6ɶ66\6c666m-6e666+6?6@ 6+6>6K6C6ϧ6ء6fx666m666^ǝ6â6*z6<36a6@Ģ6E6-6- 6y6͎66]ҋ6k667ě6KK}6Dϙ6Γp6㒘6d66!Z6+6jO6'6FE6K6F;6+6G36\6[,6}L6%66z)6Ѕ66ؐ646L6 6 6Xi6=65r60x5踍6n5mю6_5"t6 5?6k,5D6 <56fSy56M5lQ6,5.6J5y 6 ׭4?6S46Iwc6hv"$6bӴ6AO6}9t6]$6dC u63ܐ69BM66w\6ϵ,6޵26)6)6 C6kxN6=ə6"d69-, 6]8!6C6(K"6Sh6^ʏ6_h\6ml6Sqpߤ6Hvl6V5~6K6Y 6]6)66N6 }6FB6K`6/Ѷ*6ꍾ6ƶCի6dζ帬6<׶6o߶H6q6jic6ShZ6V6cX6 _6k6Ԁ{6/A6I槸6y a¹6$ߺ6!)K6N-6{l1j<6'{59\6@z9~{6i=͙6HA6E6HH6&LX6*P6S(6QAW76ZD6I ^PM6|aS6BdV6hV6QFkS6&snM6qE6Yt[96w*6 z6F}6K\H6Ӂ6GV66u&~6p2]696_6jË16%6.6⏷'q6>D66(>6_K6}6X6M&6@K6k%7wn5ت7 5U7Aи5O?7{5=78 5Y7_5a7]W575ա7p575Q7g575ל7;<5!75Mi7F567;5375+ۖ75757%5k7P5N7w53757Ը5 7575750755pۊ7Y5׉75Zֈ75ׇ795ۆ7157e?67l67687*6` 7i'67t6m*7;6u~7"( 6(|7 6|z7 65x7o 6w746%u7v6Gs76gq76o7*6m76Hk7 O6i76g7k6e716c7T6a7Ӫ6_7 6ƻ]7$"6[7/D#6zY7B$6TW7%6~!U7C%6R7B&6P7W$'64VN7'6mL7[(6I7(6XG7z)6*E7*6B7L*6U@7@+6>7+6C;7,6%{97-6D77.657/627{060716 .736,7 46+7H56S)7|66 '776%7y96$d$7n:6"7;6\!7[=67G>6v7f@6 7o0B6֦7C6J7E67:G6r7ˋI6^7K6B#7M6@7[P6C7oR6I72U6Ê7.W6y7fZ6ul7;]69] 7vB`6cE 7/c6 72Mg6- 7mAk671o67r6c7du6( 7ܼw6 7py67|6666n6EL6W6 6J66hg6[%66}666u6z6c6E666;666v6A)6ž6}J6*6w6Yy66ƴ66b6]0666x 6>69٤626k666}6;86,Z6GN66XP66i]666qB6S66;6՘6Kv6c6w{6t6o6Ɠ6d6y60Z656P6W6p0G66U>646m76]616ג6+66%&66f6#6^6˺6k6^46 6V.6S66;5Xlj6b5ׯ65<͌6[ 5װ6!5ߋ6156ƅ5!6[5w(6[I5hŒ6n(5D6C4[6Ll46y2v&6;6'6*ä6].'6dS6v6 \a6!6w6养-6K.ʵ6ص66U63҅6 T6Z' 6I v6*і6662B৘6=M6S 6[96Ad}+6~ak~6nq}6Xy6ǀ6-6+C%@696RB6ye+6\ɡ6C6җ 6{s 6H6_H6 Ŷ֧6d8Ͷk6Aն6޶c6ߟ 6BZﶢ{6.(vy6F}66Ƈ6` ח6 H65Dz6F6!6;-6}|#IT6'|6+6/]к6_367"64;2J6?o6gC6}EG6lJ6N6#R6U_68Y06\?6._K6s*cT6lf$Y6iZ6ClUY6CoT6 sL6vA6y36|3#66X6Ru 6惷6Sڨ6ƾr6' h6D66R6w66k{6ƑMO6!6xk6ϕ6%6!zcb6rΙ0675o7\5P7X 57S57y\5p75(757 57H5\7$575757f5[p7Z5<75 7W5ߘ7575$7]5=o7'5Q7J5s67i5}75 75;757?575g75I݋75܊7'5T߉7P5.75V7p5757N5 75b7(5T+715w<7m6N76a7=K6~7N6}746 :{76by7 6w7 6Ǯu7{5 6s7 6zq7fZ6p76**n7Ѕ6>l76Mj7Э64Wh706[f76Yd76vPb7H6?`7>6%^76E\7Ѓ6Y7F6_W76fU7t 6S7J2!6P7!6oxN7R:"6L7"6I7#6cG7e#6E7$6B7$6=V@7l%6>7B&6þ;71'6~971(6iN77:)6g-57G*637^S+6f17b,6W+/7{-6vO-7ģ.6g+7/6)7'16 ;(726&736_)%7Ja56#7667"7 86c 7:6:S7;67SR=6}7X?6'7@6%7B6{7QD6737F67Y%I6 7xK6Ȏ7M6l7_P6 N7[)S6T37U67X67 \6 7_67 78c6Ǽ 7h62 7k6,7|n67E5p6?P7p67c`t67v6_6y6/6y1}666D/66266г6Z6Z6ى66i6^6׍6666㿏6n6:6tI6V666[6z66^666v5696u6v6L@6i6W6@6o(6866U6큚6̗6̖6Ϙ6%:6>6-.6N66$6Uc6趓66?$6`x66Im6Yi6@c6_6 D[6U6qR6 =6_H63G6@66:6Đ6[)66xd6j16 6C%,6V6n$6u)6ZP6l;6)6~6M 6C6љ6+Ȅ65 `65s65}65H6ߺ56uݦ565o6fe5T6i56I6Q{G5Y6 54)61496ҳ}3@o6(*"6ܥۆ6&:}6s%H6sKdw6PoՈ6 $6D6קp[6mBo6:ĵ(65ҵ6hLj6F6L36 AF6c|6ɏ6ފ'C62c6<f6Hs69P6VWۛ6`*65j6(t6Y~ 6ぶҚ6$5E6&{6zg6<6J%66pgC66;?6Yb96Tv'6໶6ö6˶ڤ6rӶ{¥6ܶ6!У6G6⡩6$66I,լ6Ϗ 6T68G?6k66|"̳6E&6f*d26y.f6~236t6@˹6[:63>%*6A3V6Ev6aIť6\L6P6- T6)W6 Zt26J?^C6paWQ6d>[6/ha6/kYd6%Qnc6hq_6wtUX6Z}wM6zz5@6p}/6/K6B6M6􁄷6셷G6 Uԕ6ֺ7t6gP6r+6dߌu6&=6C6ˆ6%MZZ6*,6 -6Q6ꦗ6l6t75c75T7P5ʩ75Y7d577=5}7ӭ5h7`5h752(7_5|7з5785w75]C75:7%557v57c5~75q75MS73*5m87AF5Q!7z[5 7 k5"7x57U5 75{7575w7575|757j5 705p 7j575j'7c587y5)K7>5^7w5s7567`5ӝ75g7;66q}746{776}y76x7WV69v7"6]t7z 6~r7 6(p7 6~n7M6l7(61j7tt6Th76mf7hV6'd76Mb76٣`76 ^7ӿ6`U\7Pu6"Z76W76zU7=6.>S706xP76^N7C69L7&6ʺI76TG7y6D76 B76<@76=7 6ƫ;7ҙ!6kx97"6R77ϑ#6;57$6 837K%6H17&6Ym/7'6ʪ-73)6 ,7΍*6h*7+6(7i-6_'7.6%7\u06j$726t"7r36 !7i56 7667K86q87`:6@7D<6x7">67M @6X72B67gRD6P7F6j75I67K67lBN6[7P6ڌ7T67W6U 6vMY%%6E\;6!_N6}1cN]6ff h6i3o6Alr6ioDr6lrxn6uLg6x\6{7O6~>6Ҁ+6CC6а6646_釷k6L61]6 486Gk6IǎF6!6z6Ғf6)V86So 6)Ԗ64(6g7"6O0e7=6c7/6`7V6^76Ӑ\7TH6KZ76]W7.6bU7Df6CAS7Ո64P76kN76cK7L6ۍI76$G7?s6D746eB7s 6@76N=76t;7l6a97Ͷ6D776=576K37s6%r171N!6 /7"68.7$6q,7L%6*70 '6ti)7(6w'7 *6hv&7+6$%7: -6#7.6"7e*06c 716.736)72x56 R78.76786I7:6.7=67"j?67A6jI7B"D67lF67H67 {K6Ŭ7GN67R6>5 7&W6 7oZ6uG 74&]6o7^6u7#b6{R7e6P7g606,^i66ެk66n6j6rr6;[6fv6U"6 {66b6}6B6ŏ676c6"6066[6ȶ6696J646j͹6'͆66@66%/6x6ۆ6J6_V6ȥ66N666{66̲6ݘ6=6Ԕ66 6B6UT6E666ƍ6N6g66ي6boy6,z68p6C6&e6'6|n_68݇6lVX63t6DI6K6h=?6<6;66 O76E6Q06˜68*66#6:6)6}l6=q6g\~6 6U}6{Z6s|6ȴ5{652{6n5g}65I=6^56tm5H~66ޚ5~65z6Se5v6"95&Ft6]4s624MJv6Fr3&y6os }66F㴲-6P%6`{?6.aZ.6@T64#?6 S66?e6'-6eŵ6cԵ6U<668 6c 6 dg6!M67*Y6+26TJ=(6YHj(6P,62[&6hd6i"oh6az[Ɠ6ÂL366W6 bݘ6[ F6`7 6Xԗ6❶69c6HmN'6R6/6~6,ǶS6϶/64ض66P656D!6kv>6d6  J6mƧ6 6?6.Á6\cƬ6}# 6'7S6+6Y/,߱6ʁ3 #6_7d6/;£6W>߶6B96IFM6I~6.jM6CPӼ6TUT(6WW6 [G46aX^K6~ah_6dn6gy6mk46+n6M9qe6">ty6:w#y6 0zmn6}`6O6r;6Y%%6J 6H6J6{"6݉6l67k@6ؤ7hB6M7D6[7f!H6T 7NL6 7&N6v 7:N67P64$77X67]697"|a66 c66td6j6xg66i6 6l66dp6gS6u6;6sz66m~6j6ʀ66ց66L6S96eĂ6̾6Ѵ6H|6ł6646{6}6ќ6/؁6|6e66҂6U66&6 j6&6m6X66H6J:6G6*6k666k66m6AÄ6\І666Cy6iv6wBq6x6g6C6_66@Y66;~G6A}6z:6u6[66o6b%26D6,6u6%64o6 6,|66 x6N6=u6IB 6?0t66Gs65Z{q6b@5Jr6e56u65v6[56Xv655u65u6 C5qq6@S5&o6&5}Hm64΃k6kM4Wo663pt63ᳳw6ۈ'Oy6ٴyz6J;Cz6T9z6ZV{6wl{6݉NI{6<%Oz6ᦵx6ؘw6yBv6gе*w6лRx639hy6ÙM{6 Ph~666v60'z 6.o6996X6rc776RQa7([6__7b6\7m67:Z7W964W7q6QU7"6R7|c6^P76M7S 6jK7 6/H7Ǖ 6F7DO 6D7 6oA7L 6a?7B 6!=76:7]@687667g6g57c6737A6w17cE6/76.76 -7<6+716S*76(78 6^'7z!6%7B#6X$7c$6d"7j&61!7'6f7{:)6a7*6x7ޛ,67.6f7 167'F36w7?567-66y7186,7_96"l7:6f7] =6g| 7B6 7D672F67g5F6_7J67 R6-7GZ6V6\66OA^6_6~`667b665d66{ g6L6Zi6[6m626#8q6 6bs66u66qw6L6&x66r6q\x667x6V6h&{6G6Jy6V6;x6N6)>y6¦69L{66~6q6㘀6^Ԝ6\66&Ɓ6|T656*m6)P626dz6k6+6-6L6>66v6ր6co6:6_"i6uP}6[a6{6tX6|6L6y6 =C6x6rA96@y6k36vy6b56Ktt6O*6v66r6I60q6w6ko66ޓm6X6Zl65k6Ea5k635bm6w5{n6>5(n65l65j6̵i5l6>5j65k6T24Ql634n6$2’q6s6Hs6ʹs6Ws6c2s6٘R^t6o u6 ^t6֓Ds6jiM:q6<쳵^o6,õn6'˵U3m6lصn6e{n6or6.u6Bx6vG|6v$-63-6?s4sV6K;6fD}6HK$6mV}6d6qs6^0z6^6dV6O6'ڑ66&ii6ęh6mޟ$6%hL6T:6Pf6 W6 ö6p˶~֖6Զ6bܶ환6A6Eӟ6=y6Zݜ6xt 6J6 65Tء6hh(6|6=xӥ6S +6k$6 (ܩ6,360+6t4٭6;8h(6W;'s6+?ѹ6u?C6hF96FTJr6QMU65Qַ6AT6W^'6'.[nH6oj^d63a|6dߏ6gŞ6gjb6Un6qs6jt&6v06~y6|ϗ66jAv6a6[I6x^/6ۆ687+5A7=57F57B5735753ۖ75ٕ75~۔7i57,57nf5.7>575735#75t77श5L7H5 c75kz757wʾ5s75Ĉ7@5Sއ757c3575+7ٌ5E7&T5_7F'5x7575֩75U75N}7nd5{757iM6<7t 6:7̴ 687G 6|676474t6E+3767176T07162/7@6-7d6K,76V*76=)7xo6J'7C6&76g$76"7(!6 !7 i"6b7E#6߼7dz%67~'6r70.*67%d,6f7A.6R7/6G]7~06?716'j7q167F16 7j36 7l7672>6O7;;67<66h7ܹB6|7fM6f*6VR6\6T6an6fW6r6X6;6KY66GW[66[66\66J`66Gne66f6H6Yd6t6Te66Nxf66zi6O6)Bm6Zķ6Nl6A/6Al6S6pm6q6p66 u6z6^w66'y6R6Yz6$6;z6W6!|y6O>6x6J65w6L6 w6*6Mx6x6z6r6/Wp6[t6/zx6\!6"~,ԑ61V6x,76v0>X6Eۋ6_RE6^m?6kjC6?r 6Ay!6%96̏6gˏ6\ɏ6Kҏ6OH6{6i6f̐6fG69ّ66MɶM;6YѶG 6Cڶ6ⶳ6'6H6(76:Nm6 o6 d6M6p(6L6eb6ptã6cw#Z%6n' 63X+6@5/A63ך666|:B6$>Q6>Aׯ6LE6H;Z6BL6Oȴ6ES6VV"6gYG6\h6s`]6-cx6Jf6W^i6`ilž6lou˿6fr6gZu6Fx6,{6 ~ڮ6r6܁6fDv6}]6S uB6m$6ˈ96(\6e6Lތ"66s6^J6/䐷7 6B96p66Y7NQ5E7W5-7:W\573a5k7f5'7k5Q7*q57u5Zl7z5^475715rϣ7U5ꢢ75z7h5oV7J"567X>5P776T.<7f6:7hU6(87E 6}h67g 6U47 6Җ37}6@]27d6$17u*6[/7))6]Z.7R6,76+74@6g)7?6j'7C6!%76"$76e"76 7"6767)!6Ye7#67%6K7\'67(67sv)67@)647%*617[,*6[ 7*6CJ 7b067U7617P;67V76*g7<6g6C6AP6ZD6V<6-GG66wJ6f6K6D26M66>O6]6VP606 T66AU6|6G-X6t6HZ63_6N]6.)6\6T68[68D6O\66'^6{6!_6ó6P`6,b6Ga66[e66F=i6z6Ql66n66riq6c6N2q66Ao6+f6/Xn6^6al6,$6hk656l6|~6m6$x65n6zp6I[q6f6q6CV]6r6OT6Hq6J6km6yC6~h6S:60i6A16j6c)6tk6߯63k66/h6h 6f66ab65b6=)6T^6b5]6}5*^65Y~`65Ӥ`6Q5`6֛5q`6ς5%a6k`X5Qb6ɥ%5te6 4g6‘4PMh6O3le6&c63xR(d6^cwFe6$$e6s%iQf6XRLYf66ig6^$f6>d6c6J9b6m^b6µe6Ƶ.c6?յ.lg64Aj6l67 ip60t6Xx6&UC~6-YB6=36;B6AX6(MX6.[d6ReЌ6l6gs6yM26#6aƄ6qp6ӎ56'r6=6=6?Ǩف6)6ͷa66*Ƕ16϶o6S'ضDO6…D6趠N6hj66,Җ6Qe6x m60 Ț6)6 叝667%b6!"̡6&56)w6k-r61`6V5V69^69C96IG9D6XJ䂰6 NF6zQR64T 6 XH6E[Rm6t^쌷6a6:d6gκ6jۻ6m6p6s6pvQ6y[6p|6I%6F6u\6ڃ6v=?r6 KV6 86Y6ô36x6f6⽎<6Z6hY/6]666FY7<57`A5pį7JG5|7L577LQ57V57K[5v7O`5)=7Ue57cj5ԥ7 o5H7(s5|7;x55`7\5 ^75_[751X7q5FU75SS7Mf5P7(@5&N75K7E53*I7"35F7E5^D75B75?75=75f;7 697/6876667>6576Q47IB 6e37e 6 27 6l074 6.7G 6,7G6*7;63&)7K6|K'746 |%7Y(6#7#6I!7t67xE6p76=767C6753!6w7s"67"6+7"6Y7b#6L7$6I 7A#6 7(6O7.667Kv367<46$766*6s796696zv6:6C6>66M#>6#<6aB6]N6F66FH66~WN665P6kU6N62Q6M6&6hP626JR6w66Q6]6O6D6O6[A6jP66JS66/U6 6X6vN6މ\66?_66Oa6h6[Lb6ǔ6a6&6d6B`6Cc6o6ab6X6b6^6Z`6~6_6Bcz6Wa66t66i6j6dk6ma6En6 Z6rn6ZP6Qm6I6O?j6c>6)e6Û56Q#e6=,6(e6k6e6]g68f66ed66zY6W6V6i6X W65JV6'5W6Q&5X6z5Y65X[6g5ݓ\6xR5z\6z5^6kB5'`6F@ 5P7^6Oɫ4^6:37o\6x/\6;,\?]6ON]6H='^6*O%]6fK|]6@cݖ\6}q=]66K#e\6pP7^6 8c6륵>c6qor`64.<_6ε8xa6|絯c6ڸ-Kd6e6 ڨh6s*o6 "ow6\W&x6TF,~6D5Z;6^?y6H$6CW|6o`c6yg&6-mɌ6 t67{&-6ʁ6ÛZ6 y6"&6 i{6@6do-6R譶{66,r6qŶ 6|Ͷ׌6ֶ36^o޶ޤ6 06EEj̐6ҴW6>6RC6 q6 9L66n%6E6 6 {6C$6(Z6yk,Ţ600,6|36764;F6>96eNBw6EA16,7It6LL6HO6=Se60VJ6cY6s6\[63`6!cͶ63fk6 (r_6Fu6w63z6ͮ}P6@p6|6 6 o6kυ6-j6K6剷*6 ?6.66Cӓ6| j6A쑷>67?t6!7ظ'5Eױ7%-5^7L25yG7m757<537iA5h7kF5F7ŜK57xjP5ڧ7U517Y5~7:^5%V7b527f57!k57?o5&7Gs55Ӟ70w5Ɲ7.z5뾜7~5[7/5껚75i75Ș7?e5ԗ7257y5 7Af57557U547u)5M7̑5Pg7/57J95757*5Ѝ757q575Z7557"5M7Rb5lc7Vͧ5={7,L575v7M5Ⱥ7k5\у7ٔ5H7Ǹ5A7|5l757^L5E~7]!5hA|75@z7ܹ58Vx7='5lv7RU5vt7b5 qr7R54cp75wAn7͕5l7 5i7A5ug75e7)5wb7 55_75O\7`85GZ7 A5W75T7Fv5v_R7Z5pO7:5aM75J7-5\gH75HF77C5JC7y5|A75K?7=5=7bt5b$;7?6A97763876|77j667Et657-6 47\6S27 6T07r6nR.7x6Ea,7~7 6*7N 6U(7P 6&7_ 6 $7v6#76) 7 t61767.6N76%76 76G716?767bV6706 7Y6n 7(67%6~7)67-6 7ɼ/6t616XQ6%0636* 0616#26 646s696@66iK=66%?6ڥ6F66BK6y6H686jF6\Z68F66QH66g]I6&q6G6B6F6f6F6F6I656]/L6a6ܹN66 Q66 U6e6vU6̛69X6gL6MZ6 6UZ6|ۋ6Z6qc6q[6z6c[6Ԁ6jX6|6lXX6v6Z6ޟr6~`6_Ll6Dc6{e6f6[6Vg6?Q6xf6M7H69 b6 8>6d^6@66R]6m%,6]65 6[_6ǒ6I_6 6]6 6S6K6N65O65kP65P6$53Q65-R605wT6)k5W645MV6Q5W6`5ǶZ6_+5iZ64\X6k3U6(S6T6Oɫ/U6m(U6z#9T6pI~ T6gq'S6R6̑wS6\Z0S66TT6hkW6Y6nDY6!͵FZ6[61\6\6P,XA_6zi64'r6 3!Du6D%x}61m6= h6{GU6*R6 \B6b- 6 whG6n6t6W}n636z6*7V6V̕?6UȜ̢6^6ݭ6 z~b6}r6ö86 ˶?6Զ6gܶ66V0$46{j6 6' 6Nhm6n #ړ6M6`Ŗ6?6-R6U46Zh#Y6h@'g!6h +ג6$.627h6&6rˣ69Z)6P=67@ԧ6"JD!6dGi6GKӪ6jN6Q6TN6(Xfz6\T[頱6cv^X²6Ta޳6dc6gJ 6qj6ҟm!6pV'6F{s)6_v&6|6}64ɸ6h_6׻6`6o'>6Nju66 t6ȏ6 Xz6nN6757#5X7_572"5Ϯ7ۧ'57ۮ,5Q74157x65:79;5®7?5h7lD5_V7H507:M57UuQ57ɗU5ܡ7Y5Hɠ7e]5779ja5̱7ge5鬝7h5[7fl57Po57/s5™7snv5ј7Zy5x7|5z7 5 75$715>7ӊ5qX75s7蹇5Î71T57|5]ď7p5ߎ77857x57_5_(705=7_5Q7W59h75(}7f575Z7Ƣ57r5˄757#Ы57 5q7R5 7$5 7Ϫ5w ~7u5o|7}5?,z705=x758v75J)t7W&5r7p-5Ho75m7-(5k7-5Yi7F5f7\5yd75Na7 5^75[715CfY7"5V75<@T750Q7<5?O7X5L75eJ7i5G754E7I5B76A5@75?>7"51<705:75:7h;5X97Hm5^875D$77&557g5375m175/7:6-7X6+7\6)7K6(760&76,$7"6!7O 67h7~ 6}7F677]6H7R6~B7On6A76786M7z6N7S6& 7K6H 7ҏ6! 7P6ӛ767P"6W7#6h6'6V6h(6\6[(6'6.(6T6s*66406[]6\26O646vx6<66JC66qB6U6[A6 6?6X6Ac@66tD6G6@66A6K6C6Y60C66{C66D6u6_G6s6/J6◤6G4L66EP6[6Q6O6$R6{6jR66߮S6]Ɇ6cT6 6S6T}63U6Hx6b^W6r6Z6n6]\6g6]65a^6`\6;T6 7[6^J6\X6Y1B67V6 -96kS6-6zT6!6W66E:X66*Y6A6iP6 6WI65G6M95E[J65@dL652N6O5~YN6[5YqO6>5O652N6ʣ55O6.q5-S6N5V6V43Q6A84KI6B 1^XH6/e%jI6zI6zҴH6R J6<.vFH6JmnJ6WhUF6XH6eJ6!6خK6 Y0N6{P6껵S6=͵S6|iڵ֗T6?(V6ֳ_X6Z6mf6m6up6&"ny6x,7ր6>]6iBDu6jM݅6ɼXρ6ճ^6Ob|U6KgƵ6m6Zv&6YB6Wy 6Yyp6%'N6U|6С6]6jCÃ6!tG626ɶ6)Ҷ{6Etڶn6|6-'6 626!W636L t6\n6dq6a36Tv6<6"%v6E%>6)7h6j-{ڝ61G64|6bQ86;4n6Z?Ĥ6B65F`6ʒI96L6k,P6iST6V 6Y6"\'ѯ6_6 c 6Vf 66i16 lO>6nF6bqJ6{tJ6wG6{z?6M}46n &6qf6{ӂ6\36S*п6톷6Hc6't6(R6UO-6o6r6FL6̞6y7(4_k7O5$7M5߰7 5Ŝ7J5p]75a!757\!5.7&57 *5&W73%/55/735 7 75A7;5|ӣ7L@57oD5o7G5%7oK57ILO57yR5霝7kV5r7Y5ح7&\5л7`5̙7Lc57;lf5j7]i57#)l5)7n5D7cq5`7t5|7w5˘76z5Գ7}5:ϐ7B57݁57r575]*7–5=75Q7]Ћ5d75u7=5~787575D7t5875̄7՞5ۃ757i57y57Ѹ575K}75{75Qy7sb5Mw75.u7q5s7E5q75o75m7A:5=k7F5|h7G5He7h575G<75;75q:7[5=:7!5^:97XH5$77!5j675x47B5n27507\ 5.75K-7]5(*7$5)75\'7?6}a%7b6"767]67rh6$7 6i7$ 676 67} 67Y 676a7z67M6@ 7L 6a 7ʿ6R7y6ZV767O66B6R6=6.6̆ 66Vx!6 6@%"6K6Ց&6c6v(696+69m6*26*6"y866 ;66<>6h6Bl96E6@86yM686Y6]96b6<66:6_@6?n@6I766B6 65E6#6G6DZ6|I66h6LK660L6+6N66ǚP6k6{R6y6NQ6Lv6S T6_r6V6~i6;V6 F`6tS64V6R6M6BN6JE6-WL6^<6G606J6$6O6ڭ6PO6G6%rN6q6tK6 ' 6OC6&6C6є5E65ʖI6%5NJ6m5iH6R5zH6*5-IG6ќ5?}E65D6M5Q;F6D5}A6|4XA6*R4C@6G8 3Б@6=6/Z9W>6ʔi1?6Km(?6` /?6C*@6)W.?6~@6@2D6HD6\Eb6`Y_e6HA!f66&o6ZJ44 w6g??Kz6A6)Ifz61RV'61uYۅ6Z\͆6^]؅6Re*6Wnn%s6'Oy6ǂ6u~6ҎB,~6/~6dq~6~6|66ÿ?6ȶi6Hж66ĘضJۃ66>^ 6bf6j6`*6 6!1 6N9 6l8?-6-붑6 @69ǔ6w PK6$~˗6XY(G6+ ,6/.6`R3N666i:_6e=6SA6DJ\6]H6aK46N$6Qv[6UN6:Xѹ6lY[6io^96|ai 6qd861g_L6vjq[6emf6Npl60sn6 v\m6xh6{%_6r~R6[C6>06e<6Ä6 6yʾ6҈d6"*6[f6pՌLA6):6|~6ΐb6~7ն4E6747\47Ä4j74d,7g57n57yC 575X7Co5*.7W5;7257g"5ʥ7&5L7y*5ˠ7s.5D7v6257O55795p7 =57f@5ҕ7*C57F57WI5>ǚ7L5ݙ7O5a7R57--U5,7(W5I7Z5 f7r]5ڂ7*`5Ӟ7b5l78e5ӑ7g5 7j57-hn57Zr5F&7/u587y5CI7}5U7>51[7Bǃ5b7㖆5u75k757b5韅75 7?G5絃7–5״75\7:C5䥀7l5O75F}75Z{7ï5x795v7Qݺ5 u7_5sis7D5Sq7$<5xo752m7nC5qWj75Wg7<5ed7z5+b7ь5F`7` 5]7iO5[7ȹ5X7(5JU7ϡ5R7(5FO7*Z5!L7B5;I755F7&5D7'm5 A75>7@5=7b5;7587O59]97587-a5#77557N~5C47/53735917X5/75.7d5˕+75 *7չ5s](7]5.&7^5!#7f50 7P5W75:7E*6D7 6767E67V67 6ѧ7)x 677y6u 7 6 7M:6A7zS6|7`y61 7o6$6dX666>_66f6)6A656s6T_6f6.# 6~6!6D6&6Dv6 ,6A606C6Yn266066)+.6U6:j,6z6.6q76?166166$16626h&636666\6:66۶=6P663>606?6b6A6$26C6hX6]E6F6eG6چ6@I66K6v~6!M6x6&N6 r6N66\j6+M6`61J6XQX6H6O6FD6ZF6?6<6O@6\165C6&6ءF6 6"F66}/F6N6|B6{ 69?6$$6H@65?6˺5 @6Ú5@6Eg59?65?65 @6N5=6J"5;6Cx5f;6E5:6fT4h96:~k486I3 96 ia66?t 36oZ56_56Hߴ56i 466Z866ey86[=6K@6#蘵@6"?6$ﺵ@6D(C6_ϵG6XjJ6ԛbQ6S6X6Y6EY6(^6'2Tj6'<>t6_@j5y6=D-{6łM: 6Ow˃6PKك6S6[6 fE{6rx6CWv6&u6n)5u6uՕuu6a&v6󨥶%w6ػrXx6ߵZy6E){6Nƶ|6ζޞ~6>ֶT6<#߶t6h6Q6b6Ն6HT6܉6s i6V6w6M636M-6L#<6 '_06*-6U.Q6_16x5&68W6p<)6-? 6;=Cz[6ړFd6;I6"M+60[Pd6ISR6)VjȨ6%YB6\6_66bQ6Qeg6hy6k6n̎6q_6vt瓳6kLw6z6|:6گzq6N9`6L656Q>6֫U6p"6[66y@{6OZ U6?<-6P6TI7b474 7ͽ4x7E487L47Xv4P®7j47Z4,[74-7e95;7|5475§7 5ק7 57Q57&5`w7T50q7! 5o7`#5s7!'5z7X*57l-5G705V735e765 ؚ7K9573;571>59,7@5I7/sC5g7,F5ӄ7mH57=J5J7IL5Ӓ7EO57;6R5l7ˇU5 7Y5{72\5,7a:`547.d557Bh5677n5C75t5S78z5`Y7s5V7/5Z7#5j72Ȇ5pz7#5_|7݊5o75G5b75YY7N5V~7p5*|75y7a5w756}v77U5`u7 Է58s7L95Yq7R5.o7)n5 l7gΩ5h7e5e7UI5yc7K5 b75@`7$5\7):5,Y7^5#V75R7&“5:P7'Ř5R L7'e5I7=Ω5G7wޫ55F7ӵ5B75)@7q05G=7h5<;7@'56 97O5775m675575 57W5ѷ475>47I5|275e#17{5x.7`5,7v5޷*7g5m(7C5 '75p %7$5{~!757W%5x757*5Eg75V7~5o767?6g7޼607h9 657w6 7Y6 76.77D6K7*+6/7G]66XI6z6ص 6!6.{66^6S6666y66,66+56gw6K6G!6w6 #6y6(6Hz6H)6 6 %6,6Ր&66D9*6?6_(6 6(6y6+6R6"~,6=6I /6@6d366L66d6 6686566d666ʍ86a6bB<6I6 =6(6J@6e6lAB6%6 C62y6B6o6C6f6r\C6[^6C6SW6@6TO6rM>69F6e<6CI;6Z;626D<6L*6=6BV#6<664;6686wS 6T76 '6O76586Nk576:5i66f5ڎ56ο5uc56c5x,765&s6695*26q ~5S26P!T506HV5BO/6sR4.60\416Y3316 .6VU,6c|Ӭ+6R߿ܪ,6: -60'.6]AV+16Arc46-76 I96s886}86{ŵ%(<6aӵA6OH6}ȅK6[SM6z^P6ReO6 DO6$,\65f6:i6_@hm6HA*q6foBr6 A(,{6 -E |6Ix6bS,t6^E3p6km6yl6WpUk6(Pvk6< ?l6Y L~m6n6r6s6ĶLu6@ Ͷ w6Bնly6zݶ3|6~6_66>6 66s A6^׉6 *m662ː62G6"6G%0%6[)6W,"60<6"4l67U6:ﳛ6of>W 6A^6-E6`H65K46XNp6=RK6'Uإ6?BX6T[+6_^N6Jba2k6]d6QgT6>j6%m6p56rȺ6۵u{6̅xp6P{ϫ60~ğ6lz6ˁ~6(h6[57b57?i5W7Tn5 7Cq57Hr587s5@7["w5(7*}5z 7"v575L75v}7]5_z7q^5kx7! 5w7껩5}cw75)v7$˫5s7ܨ5p75zm7]5 j7$5f75+d7,5e!c7Ȕ5Ka7J85&]7䞋5]Y7k5mU7U…5Q7N5M7'5;;L7s5J7i5J7w5LQG7̞5oC7K5@7K5=75#;7;m5;97Ȭ5875r2775i9675#57W&5047`5kQ37ؼ527L5z17`5mM/7g5T-7XR5++7]/5tm)7F5y'7yn5%%7n5\#7~5}P 7T5Hm7 5#7%5J75F775ؘ75Z7U57 o57s6Lz7 6j7&U6 7c6 7%64_7`4N7a4B7h4;74497G4=74D7Z4$Q7n4a7E5u7W57;57x 5vÜ7 57%575/ 7?5?7\5]7I50{7'57N#57k5Ĕ7 5ѓ7 5ޒ7#5Q7&587)5`7+5ގ7/5ݍ7D35795ۋ7A57DJ5˕7R57EW57UY5潆72X57V57)W5-Ń7&^5l7T3h5+g7us51D7Z5 !~75z7a5Yy75x75y7 5+w7e5=u7͛5 Ar75t[n715fj7Ӂ5dg7@5d7|5vb7oy5`7l5]7u52Z7!Rv5V7t5L R75N7 5L75K7(ߊ5͚J7^ؐ5G7͝5uD7'5NA75A75`x?7K5G<74E5`8;7Z587ҥ5775!67p¥5M47۰537:5A27W5F175j075V,7S5U+75a)75l(755&7/5C$7 5O!75757k5Y757(5785۪7e5W75/76{7a 61X7} 6Z76)76I 7kV6NE 7_167,67Օ5(65a65T6666@6y6c6­6BN6s6666? 66 6166z6h66-666ߖ666O6ӻ6 66 6d.6\I6 6p76y"6㑪60#66K!664"6d6"6jו6!6J|6!68܍68!66%6@6(6$6G*6x6y-6Tk6,/6!a6i16zOW6636Q6h26c]K626hFD636;6236Ռ2606Q)6B.6O!6p*6W6'6,R6%6?- 6$66>6!#6ѳ5#651%6b5T%6i5G%6 5Q$65[$6]5h$656#6=(5#6[5O$6/5"659!6U4#!6D4'6,36"ߓ-656`d6x6 65d6QP 6=m!(!6mш"6֞9&6'h$6W&&6Fǵ,6 յO.6ٵ.6$O+6" @E=67wF6#vC6x-)E62B6:O?6CXRL6G"R6I3V6ėFpZ6qIq=]6J\6CRb([6'YW6!epV6eto]V6,?>V6I8uW6GY6'Y\6 ifx_6Fub6}ld6g|f6¶Lrh6*ʶڋj6eҶl6!ڶ;o6H q6t6,`w6qz6+'}66*.6 ΃6Ul6[6.u6@)6Oy6z#y46@&6C*&6[-6E16&4&f6#!87ŕ6;6>s6#B6-fE 60HO6>KE6tNfɞ6R~6\0U.6?XY6F[6F^V6?a60d ֦6g}6,j6l@6po 6̊rQ 6Yu 6"x6z864}"6v26Nϱ6邷6C桳6ߚ]6Uj6FVK6)6튷6?)6M6;7׷3f73#74a7*,4褳7V)4j78;447'M47"_4@ծ7p4G747B4h7^4N7E4:74*7nX4B 7͞4B7Ķ4V74] 7.4*7EY4@87"q4J74`74y7'4x784f74Ҝ7l4 74W7Ͽ4 374Q74m7Q5O7.507X5r7~575@ʓ7 5Ғ7 5Ƒ7,5[7W5757ZD5ա7$5{7&5)?715_7:5D7@5 7A5G7ι>5am795~7]85+7=?5ӂ7P J57 /V5}7U`5~7h5b{7r5Gz75x7w5cy75x7C5Au75zr7d50Rn7^5 k7O=^5Kg7Z5Ue7TV5b75W5`l`75uW5]7q=]5Z7]fe5W75*n5΂T7o5 Q7OUh5X^N7.a5g~L78j5 I7zw5G75ME7ȋ5 C7#5}B750A7r5U>75ڲ;7#65cV:76)5q:7ݞ5I87i5675 47=537J5175075'-7[A5,7jZ5p*7Y5)7YH5/['7R5&%7۾5"75!7v5 7O57ݖ57R575A7n 5 757N6+$7l67y 6n7 6n7[67E^ 675 7F57@5S75/7'5;65h6L5{Z6 o5Jo6"Y5L6s5E6m56H626d66ߛ6E6Ԑ 6 6/ 6V 6 6666N6ѩ66{6)X6A66[6^66=6O6 6.6C6566ڕ6?666"6 6I6.6p66^~66Au6n 6DKi6"6\6V%6 T6!x'6iQ6'6L6 )6D6;+6><64-6Q36X,6*6tC&6i!6 66U66l6ކ 646/66565656x)5^6q5j6Vr5~6o56Vb5Ő65 6e5˾6656X5T>6 46K4/636C6:6[b6Ѵ46S6*L6k:IM6Nh"H6kߤ6a[ 6Ĕ66`ĵ"6WӵV#6Uٵ&6dt#64 )6v86W#a<6,F:64oY96N?O?6BnB6y4HJC6ME6^uFOJ6HXN6>KQ6vQ##O6Y6O6fhO6tu8M6L6􁊶N6zQ6m8{U6BcY65\62Ø^6Jй`6!|b6Lɶ8d6aѶf6Dٶ.i6+Ek6L |n6Aq6׹t6;w6P<{6~6 Y6z׈66#6qḅ6ŕ!G68Έ6!O6Rd%ɋ6(B>6l,6//m6P3x66֒6<:/6Vb=6W@Җ6OC6w"Ga6PJ36vMݛ6 P6PSE6Vr62Y6]\6i_ܢ6b6Ce 6nh6Lk)6#n266pf66s664vx36WPyw,6J|!6X~6^€ 6 6u9ذ6M̈́徱6}#6sx6K̈d6B6 q|6-Œ56x7k2v37K27.@37 3s7,3:7A3L76-3<԰7 4747,4\7 <4>7DL4&7^\47[k47z4764T7F<4747A4 7if474/74G7n46b7 P4v7~47G4B7Q4W7=4*7ï4!7W45?7ơ4Z74s7:47d 4ה7.4T74o7`4煉7`R4774Kx7g43u74+q74K747.k 5إ7;57܅5t+7z'5 u7Q6)57U&57!5m7 35;+7#5$܂7b-57:5T7$C5'~7ӻM5}7 Q5z7L[5y7/Z5s8w7d5gxv7"U{5s7-Zi5>Dp7L5^m7 D5j7D5/h76,>5'e7g;5 c7|>5 `7=5sG^7jE5 [7Q5DX7}]Z5/V7h]5eS7'R5P7L5M7%d5۾K760s5OI755F7N5]D7B5mC7L5%aA75?75<7gnj5;7`5yz:7_597>@5 67s5'57f:5Y375ֺ17ˉ5!175N.75[,7>;5+7>5)7ɤ5:(7c5^&75w#7*5_!757y5759>7507j5:7rR5Y75u7;76N7z6(7Y67a 67h6&7`6PE75Q 75ho 7 575߫756g5Xa6˼5H656h#5?65̳6n5m565h6F5*g6?G5@6F5A656*6xF6e 66  6Bx6w 66$ 6ճ6.y6R66ޫ666V6 %66P6 66 66%Q 6 666O 66' 6z66r66Q16: 56A]66FY66RHY86I LC<6iPyBA6N:E6׍TuG6 (bI6rhH6>xpG6+E6_S H6zzkK6t:P6Ţ(T62eMW6Y6/Ҥ[6O]6ȶ]_6Gжa6ضXc6߶e6Yh6THk6 n60/r6w(u6x6 [-|6e,r6?kT6-+6`Lt6n6f v6S$6'_6+~ʋ6}.0616J56}8E6;635? 6qB 16/Ev6Hk6:K6[Oc+6#Ro^6.UҌ62X61/[۞6$^6ua6cI/6f%B6&iP6ːlZ61boa6.rNc6Tta6w,\6xz6S64}F6676P$666Uܯ6i66P}65Z6󋷈46bE77T(7 ~7gB7j1 7a2Iղ737XY3.y73*R7307 3!73v7N4,74@ܩ7/#4Ԩ7h14ҧ7?4զ7 L4ݥ7X4r7he47lq47׏}4*784F7J4sd74Ä7.467-4ǝ754+7a47o4&7Wq4*A7Jס4W7%4j74s74_7ǭ4784go7t4M74=764B74S67P474}j74G7e4(7vD5;7'537k/5n.76A5U785}7i5{<7E5͂7[157L5##75d~7#50~|7c'5bz7m45Mx7G35,7ͦ5,7£5)7%50'7ep5ǚ$7@ڸ5Q"7ڛ5dH 7_5 75z57575e74X57Nm5W75n7z5I75I76767q67g5\7 5- 7;5y75J7ͱ56D5z6M5y6 56565i 6U5e6956\5g6e;565A)6]56C5!66636P6E6nR616]6:6Cα6]K 6 6"h 6=6- 666H6+6Jו63666 l696҆6,606x6{66es6! 6\}j6u,6h`6 6V6O6Q66oM66,D6V6'?667G<66j-66"666 60_6R% 64 6l 6Ŷ6Ɵ 6P5 6$5N 6@5765F6sz56+M5r6#5D6P$5U]65h6Fq5O6E56#5*6&4 6ݪf4)5 6Ǹ3l 6x ݲ_6 d6t*6≱D6x6:=6̽96R\b 6f0 6h 6U_ 6= 6 粵6lε_6do6-(B 6 B "6:Dy+6&*6`W0G)65lh(6 ?6qSgE6mV0D6FzC6B6쌶D6'H6IL6QmP6/S61U6 |fFW6/|X6.ǶY6@϶S[6ֶ]6E޶`67b6?5e6^x6i6l6@wo6H_s6 v6ET y6$.}6e'6-6(/6G6">6D&6)T6L#-Q60쯋63 6=47G_6~:ڰ6=y6@H6\+Dx6VTGΔ6,uJ 6MeD6Px6`S6UVӚ6Y6\69_d:6mbS6MeEh6(hx6ej6m6px6`sw6B#v6x*6 {)z6R~k6FjZ6ہF6q2 /6c6l܅P6/ڮ66nӉ6$/r6b7͹7Ì7W곏L7Ƴ7oBش77a74Y7 47'497~4`7t3474|75+4b~74{7 5z7' 5Nx7l 5sv7>56s7]4q74Wp74m74j74s;h7]4D"f7N5v d7I5$a7j5_75J]7"#5Z7 -5WX7$653U755ԽR7:5O7B5M7I5zK7P5I7UY5gG7 j5D7q5B7y5 @7Z57?7Vy50=7x5<7y5b;7GJ5Y297i5675u475375xr275075Ԣ.7O5~-7|5,75K*7D5y'7,M5%7V5#7+b5s!7105Y7N57#5Z7L5KK7A57K57+S57 5>757E657575p75 795 7dm57T57,5 75 >6V)5qT6Y5m!6N"5Zs6j5 65s6t5A656O5x656'5C6:5]6:565+6ƌ5l6)5Gε65t6 566666Ԟ6z556256=5͐6/5B685!65645B66sx616W o6 64f6R6\666 T66iN6 6E6d 6HmA6Q 6N<6 6566(66E6,6Ĩ66C66n6ϧ65mN6ݖ5^6}5K 6r5I 65)6O5!6皭5-g67Z5C6}j5T<6p5ޱ 6 I5s 6S!5` 64h6Nw4/636ߡ96Գ-5X{,5讟$5ݴ-{5X5l5_5jU76sO6􇵈6Lӊ6d,6ľ6kеŚ6F3* 6u6L o64Q6$6c.Fl66J6Z=6D!6H]*6VK2/6!fW4$46Zf[>36T`W?6AapA@6?jSC6sXA63~`C6TE6D6B{H6SCK6ƣƾN6VQ6.R6ޣlKS6S6ƶT64ζt6V6նX6ZݶhZ6s2]6pmW`6c6Iv/g6Tj6n6\oq6A Ct6Xw6mz6N5}6‚p6b6~!O6$ 6_(6_+w6~#/-҈6y2(6m53|69̌6`ME6H%6 L'_6O6#RŖ6#U6 X6F[>6]/^6F`y6c6Pf6li6;l%6 o6q66=t꽣6Jw鷤6OzS6n|S6Mm6}6eg6_aO6wC46xa6{6_ԭ6U76߻7+k,7Y7Y788H>7޳6޶7y{%ܦ7s7C7h7dz7 ѯ7K7IcY7Z7˲E7ߧ6H}7 1|7Js27ȷ2q7t#37bV3;7>3wĤ7{Θ3Hߣ7Nѫ37 3 7~3>7Y3>a7O37N4Τ7d4ĝ7$4"ߜ7b47Y'4 7 47647s4#7T47>47 4fƔ7@t3!ӓ7L3-73:73mg7i37s#3s7t;4x 7/^4#7b4Զ7my4Q747\4764R7|}4ʂ7 4@7{y487U4 ~7r45{74(y74mWx7R41v74Os74?q7 4o7똟4ǣm74?Xk7Ƿ4}1i7(4f74e7'K4/c75м`7 5B(^7Y5By[7B5X7x5JV75aT7"5HQ7.)5J$N7[55)K7(+F5J7!oK5EH7tZ5E7+`5C7ݹk5&A70n5@7Pp5U?7t5I>7Bp5[<78o5y97VGw56i77z5k557_|5 475 37w}5175U/75}-7 5,75[,7x5t'7$5l%7l5x#7Oɫ50 75fT75r7W5x\7$57V5]875.M7w575u7&5p7/5475@7K5@7̢5Q7o57594757t57&157556*5`6n56l56jo5G6Y56j5k6 ?5q65k6Ԋ5$6C!5 65?615ݽ65 65B6N5>b65-ګ6a5{6}56:5ڜ65ܘ65cۓ6Z5qō656l565˂6915 @x6^5r6D6i6X 6^6o 6*T6p 6j M6xX6UC6n6eB6654=6;5,D66a5*65m"65Y6$5/66u7@6DB6( E6ܰH6o6,J6S4K6裶mL6YzO68OO6AO6BRO6 ŶO6.AͶP6Զ\R6*ܶzT6DW6Z6)x^6sb6v\e6vi6̕dl6* o6 Gr6Cwu6<x6!Gsv{6qJ~63 剀6M#6J'SG6h*6-#61J6^4j6ɠ7^6:r46>|6/:A6]D<6ayG]A6iJ{6M?6P6S6(V<6Yb6n\6KR_J6*0b6oea̛6egۜ6Fj6rrm"67p56r^6u6lx6"{ף6)}Ȥ6A6җ6삷6@o6@"S6冷365g66Ԭ7th7Fy&7J7'7]y;t7.i|@7RY7faI\79x7*7  7 m7,]7iQ7 dz2L7ߓK7ђ"Q7[rS[7!>cj7 }7 r7HOO찤79Qϣ71172j722473ZV7̞*3gw7%23{703v7\s03ɜ7|93wכ7 M3ښ7Lg3i7 oy37Qow3SΗ7nX373v7273"͓7oy7S_777&L37?g3M7yy3jډ73g7|'47V47yA4+Ƅ7wG47w_4Q7y#l4F7-{474 |74Ox79n4{Lw7yR4=v7T+4s73Лq73o7#%4n7p4!dl7a4i73a4fg7Ɍ4d743b74`7W4Y^794[7Nq5MX7.5HV7 5:U7FS5wR75O7 <&5M7G35J7s85u>I7A50F7O5D7Pa5dC7a5gB7X]5gA7W5J?7[5iu=7^5;7jh5b87o567w547#-l5j47}5H27507P5.75.-7v5E,7(5F(7_5%7R5"75 7~M5R7575-!7~5~.7?57)5 757l5#7R5l7l57Ir5%757U5g735N 7517mN57n5[7[B5Q7.565f.6m56<565W65C6516\565 6C56q576F5gl6j5Q6j;56]5I۳65D6 5ޫ6_5+6W5٢6}<5O-65Wt65r65Ґ6ߤ5؊6K56J5A6/55/|6_ 6v66l6p6D^66T6|6S6=52JJ6ˁ5G6#5'?6F"566y5z -6{5"6565`6456R55X55E*65M6u5n6N5N65SH60ػ5ܪ6]ڨ5e6Z*56p5ow6L5R665/55N545dߌ45/4[5·35]Ī5ff5˴5ox5x{ %5&C65@c45~V5ڒr585趵r5?۵'5}5ґ6jt6x-k6t`$ 6+v[ 62]6:i6^\H64L.1%6+-Pcq,6BZ66W_@36b%46j876|r96Dwh<6C=60)A6G6$H6COH6УdI6ܨgJ6h K6ʵK6J6ŶJ6`e̶LiK6ըӶU M6ڶ^LO6OR63U6i+Y6ulf]6a6S>nd6k7:07瀴(k7+siO7qe97|W?(7I7t\<7k/7݋"7}&7|-57aH7#ⳛ`7dͳ{7J<777H0ܢ7cl27 N]!7#>A7i':^7w8y7007_7c:7s-ݲ7{Ͳ7y7B)87wj7ެ%7XP7?p J7 7Y-:76֍7J5x7U1v7^&73ڈ7?3v7(37сd3s7@Y37N3-s7X3E7f3"@73Y~7$$4k{744y7qN3w7< 3 Qt7ձyr71(Kp7Fw3n7D4l7FI4j7g4Hh74e74|c7`4G.a7;4Ӝ^7D4P\7@46Y7<45V7p4T75NR756O7P5N7#^5K75I7%5HH7;85ݦF7I5E7{?F5|D7t>5_B7(D5l]@7I5>7J5<7O5p97Y5Kg77d5bS57sm5O57!5d375w717#5.7m 5x-7>5,7 ؚ5h(7Fl5չ&7F)5V%7z5 $7ɛ5'#7C\5#7n5."75P 7b׷5N757;)5ݢ7Ȭ50%75755N75r75 72537(ȵ5T 7Qݺ5'7>57D57q5q7%565i6kߠ5/<6856nŠ5T 6Xk5\6@m56]5q615m6:5|l6565gO6[5 0656%!5´6pn5:t6 !5|6M5#6k56s35>65~'6`565+65I65j65m556f5ʵ6'#5({65\p6l/6=c6N5/K]6Ǽ5xX6_5N6N5eL6B5ÕA65Np865.652#6?5,6 56C5 6J5y6455#5F5556j56525R5E5R/5555(({525`5 5L5\56$55z15!5VX4i5.4 d54\:5E55Oa5-ȴ5~5@5S="5P[.p5Ѐ8j5蚕[5w<5s56ڵwk5 ص5545#c(56(5Ǵ16s4 6:+<Ƴ6vCp6K&6W˰/6>"^-6[c],64l26qR56wz 36 }46 ӂ96;6zFĶD6>E6>%D6tbE6^hF6LF6U.F6iE6ԋĶ)E6^˶ F6ҶG60|ٶ J6tdM6綃\Q6qU6*[Y6z\65E`69Nc6r'f6mv 'h68k6(_ 1n6Fp68rs6v6 x6[$cQ{6߱'}6+dE6*K.b61,ނ6?4(6x7q6G*;6O>I6~mA?6D~6GK6J"6MMN)6PZ6S6|tVl6ZYԒ6;\6_o6a'6ɺd1:6gmH6}LjjR6m=X6oZ6QrW6+>uR6wH6z;6O}+6x6Q66Σ6G6C6燷9n6`G767 7ᴛ74ٴwD7VlѴ 7ɴ׶7VJ´7F|7BU7ۯ647ƥ77>7Ĝ7ݬ7"ܫ7|S7oa7R7c7 W 7pKY%7@%@7~5;\7)|7 7`-Ģ7 7l7S7Z<7 klQ7}U7;}N7PQ賍D7.볷07XA 7< $ٗ72"/7;}7--UƲ7T?m}7GV7>n27X]7O+/7NWc&7"e7&7_bj7#>yW7z9P7o y 7ui7/ 47i 47U+~7] -|7y"z7¡v7߳u7 D s7!}p7b-m7P3k73i7v4h7R4f7Qe4sc744a747_7yu4\7^40Y7]4eV7ms4UrT7>47WR7u4P74M74БL7`48J7 4kI7Qq 5G77$5XGG7G%5OE7A)5C7a-5`B7.5*QB7C5=7]:5D:7zH5s87tQ5`'67ؼ\5S57Rn5?37ux517Ӂ58.7^5\I-75L+7.552*7659(7)/5>'7K56&75 %75w$75#7$5!7[57h5K=7E5o75EP7`575 75e75757n5E 7c(5ج7æ5 7:57Vя5i74\5I=6E5S6ڑ5C6׺5 605 625Έ6ш56-75'6 5qh6,5$"6ʶ56p&56F#5KC6 5 6C5[65ȱ65656Mo5gL6576 b5ϱ6M5l6+5J656%5g\65365j6Z5~65av6K5k6"5L"b6]5R^65\6:5RO65C6k5s965gy/6V5p$6'5#6795\6 5G]6x5=]65f65#5 5l5\5%55({5F5555Z5sF5B5E55 [j5#e5N&O5Q5555 5545Φ4;504as5v5tXȢ5w5ٴ455I6v5UY5ZzO5Q=^5q5"6'5#ӵT5?5A5 95A5%5y.6&> 6 Zs:6Gm6M]%6X&6:bgK'6l!-6~o66zsh26!vq66̢|.86t*=6N?6s-A6受F6[s_H68D6􈧶B6eꮶhHD6^F`C6$ý`A6ö@6sʶ-@6G@ѶzC6}'ض(E63߶V;I6>M6МAR6ƎHV65%Y6b\6~_6Mb6Vd d6f6,Hi6]k6l-n6SJp65s6\#4u6W&Qx6)z6,t}6(06`3,K6 66Ǻ9؃6-6]`W6c+ck6el{6hȆ6{k捗68n6Rp6s66Yv6; yv6{g6`~`U6냀A@6ցc(6( 6^yq6gɅТ6̮6x73 KϽ7W M7]0L72b7aCָ717~ip7r4D7#ߴ7شy7&ҴWݱ7˴Ű7/Ŵ37vӾn7J97Q77ʥj7튟7fnWʨ7x7Jo7fɇp7-87Ux^7%n}7Le7_Y7`8[Ԡ78W47S 7TN7a L7?Lӛ7Qm7#]Û7Pnu7ԁ~N7+7U7Ɠ7𢳴F7iD7;ةE7ƍ7->/7qD:}7NdBՈ7`N7c>7V 7͆76ښL7jȁ7tr74zqv7cVt}7,V/]{7Cx7*Ru7VQQs7@p7 ѳn7jk7@t2j7ON3h735f74}sd74b7.E43`7z4e]7Fn4=Z74W7W4nT7ŵ4S7<4ԈP7V4QO74$VN740L7{40J74n&I7 4H75+F7 5,{D75 C75wA75a>72*5-;7sY7597>5B77IG557T5Q37Q2^517yg5h/7m5.7:x5\,7L:5*7w5(7!5(75d'7VΏ5 &7g]5$75(#7o5d!7*575u7]ݐ57p57<\57(Ø5q 7RG5y757572p5.7*5ӵ 7!5J 7o5757΄5B7516U56`|5S`6tw54=65\n65j6H|5#65 6T565p6C356 5w65ab65615O6%5g6D565g6*5,6YU5䌤65625Z6U5G6_%5FJ6*5*~6,5B6[5-)6>75gy675 p6<5%j6&5qh`685@GZ6 53P65C6i5!96L5!j.6y5f%6F5`6o56ۡ5f!65e 655j65m5g5M5N55555$5<5|5]5'51i5β55mi5ح54aM5+5.5 555AT4%5o߯45#4J5oW5lD55ռw5s`v54)ø5nU&5)}5F55)ŵq5ɵ]5EH5!(5 5r5[ UW6p.& 6$<5 6:Pܭ6-P 6tR66V[*!6Ogf%6K=x.6Ew56%B{ձ566%H׶IA6 ޶F6xK6`yaP6H~XT6"W6 =Z6vv\6={^6X r`6 tb6d6Uf6l#i6 )\k6_m6!o=p64$r6G(E@u6҈+0w6E.Rz61.|6&5j6M86l; ?6 >,6A6Ä6D6iJ7e9ɦ75H7$7)7 bA7 _7ٗ7B7So@7t7W7琴ef7R7&=77>iؗ7$07UR´O)7mд7nKn7BԴ7,մҪ7'Ҵ7ߴ7e7bl L-7>ʇ70u>7б a7Sd]7v27#.+7ݴ 7 Ѵ~7Ǵ}7d%{7"y7B풴v7jzs7uotq7X .qo7l7#7<]k7\2h7&3f7љ3te7u3h/c74I4|`72%4]7`Zj4Y7ņ4#W7W4U7˚4_S7 44R7J4Q74N74,RM74K734J74#H7v4qF74BjE7u/4 D7]4@NB7 y4s?7f=5g;75yy:7#5&87 -5i67T55"347>527\'G5|07N5.7ynU5,7d[5*7c5)7ͬi5~*7`5*)78k5>;'7Qy|5%7f05#7)5!7m57{5R7A5q7g57y5x75,j7+N587\57by5:7UU57z5 7T5H 75l7t57y567,ln56i56Nj5W|67n546#s5 6Nw5&6~56@5an6{5 6je56|5dW6r5ę6?K5ޭ6RŘ5夹6W5Ŵ6Ť56̬5;ԯ6Ƶ5h656J5B|6 5V65X65S66 5u̐6H5g65/68}5!65v65S5wp69j5:g6O5^6٧5R6!5^J6i5YB6|596U5r06P5uf)6L5P 6526 565Г 65}655E55#G5QY5w5?555555m5;=5] |5K5Y55P?5555 h5ڱ5_45`454ж5±5M ?5{F5$53C505OJ5-u5`5I55(۵*5uf/[5Zr%5|M5=ds5h( 6469A 6dI 6MV6@Y=6op6qjxy,6s.6(x$/6Qy|O56$q36͂Ee26F\76486¶:6Tɶ<6Sζz=6E׶Z(B6Tn޶G6I9K6+P6P@S6GV6508X6Y6 $[6E \6 ~ ^6_6Wa6'lc6vf6c_h6^ j67#)m6n&ğo6**r6b-Et60(w673oy66<|6I9~6{=!6o"@"68)C(6)Fe6"I6KLԆ6O6QK46zT]6WH6/tZb6C]罍6}`Ԏ6b6e6ThL6 k6m6\yp6)s6|u6rx%6*{fҘ6>}6:ݧ6ދ>6"܂q6+ S6.z2676Wg7W3"7ˮ/7F,꡻7(f7v%L/79X"7O)PͶ7 :7t~7]7'C7I3-7Q 7bl 277)t7y77si.7LrB7}Y7tu7wܴ7`*ִⱥ7(Aдʤ7ʴT7ƴ|7+78 mC7򺴿B7E,7D7"7Ѩ=7` Ǵh7Ҵ™7&ܴ]7V㰖7:fd%7i7괻7>^-e7\G77 .|7&.#7*17)476؆7SJ8h72gl7g07z $=7 "75HZ7IC4}7{7״y7vӾv7^ƣt7fd},r7\Jo7@m7i2k7{ai7۲-g7J:e7b7C/e9a7Z3]7)3%Y7>4 V7C=4 LW7xTF4U7rMg47WR7Z4R7)(4KQ7sW4RN7˦*4L7V4bJ7Xu474p<7P4[ ;7|587 567d547 5\E373'517n,5/7=456-7|950+7?5)7WD5N)7D5<)7G5'7R52&7Y[5q$7Q;c57"7j5M 7o57r57bq5^7Xz5AB7?5_757$$5j7t557ϭ5@ 75 7)v5' 7xu5e7ECu5) 7 ?l57рd56ee56f56Ph5$^6h56Dw5&?6o5Y6p5|6q5,66w5{6=g5r656d5zc6d5/;68~5K6n65y656>;5@6/5O36+%565-6Z}565x6K56M\5}656\5#6A5v6`5pn6a5e6o5ۻZ6o5P65>H6-5@6586s5>R165*6n5O!65G6E5Ft6QG5 65Nq6555W555X5755 55~O555*܏55}5)5M5}5O+55I5q5˭4!5 Ų4545r3_35YA5nڳO5RfBn5 >n5v5 *5!>:5e>5п56}5Y5)ѵ35)P5 5(ţ5 &"5226y8gF 6/>6"Ew6cPZV6'\N6h 6nW#6t'6w6~A6Fw.@6㩶t?6>6_H?6uˎ=6ԧ¶}<6 ͶI6IeͶTA6uԶB6TܶFnH6䶁L6 P6DS6k/ߒU66V6WU W6x W6u!wX6P Y62[6>\6B'^6uN`6Gb6 $~6ZA-S65DC6@G$̂6Je6ЀM66cPe6ASm6V6X ؉6j[6&^ 6Ea\ 6dC/6%f96zi?6]0lA6n?6 q96>t06v#6Yy65|6Q~Z6y0И6r 26\6䪄t6z7"bK27;$H7D7Awi7Չ>,7j;7[8۾7`^5I7ms2Vb7#/-;7,74*7:X'f7$Ѱ7I!ů7SȽ77qԿ7ǫ7IԪ7e`7. 7z707 J7HBd7k7~ *7=Ţ7u9細С72Š7c2അ7޴!79ഃ7%س7/S޵7ui~7vǘ7~(7aY7jRh7^Ǒ7*B7h7;=7e0P7<7DN|79P17OR7SV7+#K\67M;^7?BU7_;Ԁ7/f7&q}7xne|79 8y7?贐w7ϴwu7׼r7j7p73~Y[n7<Hl7&>j7 g7P[mf7$zc7/b7(^7f{ [7&W7ZApV7'9S7X"83Q7g\33P7g3bO7O3nM7Js3L7J3 J7V4I7 54XH7zDF4E7gOD4ϛC7K4GA74>74(=7f4?g;74pw97+4w77x4X479#437@5217ԅ5F07P5?.7r5,7>5~*7!{5^)7 F&5(72&5'79/5&7$>5"%7N5:M"7Q5 7S5u 7GaT537V5>z77Y5J7-\570\5 7oV577za5>7mi5jX 7Jtc5 7`5"7Q?c57b\5HN7{X5g7%U5b68S56W5%B6Y56^56e56Ve5u6f5 6Ff5C6]i5`6Dw5V6Dt5v67r5 6 u5jT615s65L6ɒ56巚5 69U5j65*6i56a55c65"6Y5h6<5u659+6! 5}65(u6<5k6-5pc6~5DX6;5g O6S5RI6 5@6 ,5ZW965v46G 5-6!~5ew%6غ5 656s5^p 656k5J55|5o5~55˽5BX55ɾ5;5;55 Y5ف5,5g5S5^15t5Q 5i54 54zհ5L4{ 5Bʸ359Ѳ05سŧ5J5|[5ʴ^5Iԙ51!5[Zߣ51Z5gZ5µ 5 I!5055dF#56$5,@5<8N6+A] 6QL6 S6[+6f`6k66׎q\N!6zE#6D)#6E{b"6[ 6>+6|P26JO56;6B;6У^;6j <6& <6C>6 ?6C!q?6ѻȶ1A6&ͶB6 QӶE6?ٶ%I6PඌM6$OR6yT6XT6nT6Q0T6'T6T6 EU6Q gV6W6Y6-Cu[6w]6_6!;b6?$+`d6 x'f6*EIi6:-k60Tn64p6-7js6<:mu6C=m}x6ZD@m{6>C.}60F6DI56hLi6N^6QvƄ6T6bW6-Z.6\G6_d\6Fub@l6/ew6)gz~6#j6(Lm6RoJz6إr?q6Nud6wT6fz B6'=}6,6X6>6fٗ6ۃ޸6G7 L`7pE]e7@Zq7AW/7KTJ7XaQq7 N7lKL7I7cF7#C{д7yAA䰳7y>7&<7Ԇ9q706g73b706c7b-h7g*r7&R7nH#ٕ7c770 ڦ77B7<87 L7GxJ7U97 '7R%7w897\7V@p797b[7]"N7r>7;%7v{z7p7`!)73Ќ7T?Wu7]O7LLY7^E7oO]Ɔ7:sf7ab݄7Yf҃7;U\"Ղ7XӁ7VPD7$HF075|76$z7}98x7 4v7`Ft7m+ɴq7jx~o7~m7&k7_׻h7ޥ1݀f70nd7Cma7qi0_7fD\7vJtY7(CW7E0T7NQ7O7K\M7_L7_K7u2*K7c3I73G73LjE746C7@4@7c^t4[?74Ǭ=74ϵ;74{97>S4~S77457?o4/37k4817&4Z/7q54.74t-74_+7#:4f*7(4X)7q5'7;5'7O!5#%7AG5`#7D5 7~>547o95]7957l :5q7@<5<78;5C7 057,|>5` 7E5 7i<5K 7<>57D5t7>57?5'71@5̻6$C5(!6jH56*(K55H6qM56`/V560\5)6_5*6]5?Z6D]5] 6e56Y56hP5h6DT5T6 ]5ߺ6m52 6$%5"k6&5I6k56556{5 65Fa645@6x5Hr6565׃6;5k~6r5Շs65_"i6|5`6q-5p=X6z5$O651J65B6U5;6V5465&.65+%656655vr6hܳ5 6J5 6߳55G5 55?5G55s5>55M5j55C5t505o55F5d55ř54~5=45/74 5w_3L5Mp5p"5ҳ5kPuX5vD5g05!5\Ӡ5臨5_EX5e5`ߵ5 55&5xX5$/5-KA6Gc7-s 6E6f5R6ԳY6@c16j6zsW#6e?2#6 _!6 pFl6%E%f 6*+eO"6w (6˰/6땟h26#16Wx,76(fY86pگy86K?96^:6+C;6bĶ=6dɶyBA6϶$B6/ն>6#ݶ(QI6?嶶R6CX?S6Kbu6Aw6Dm_z66G|6J@6$eMfҀ67Ib7_ط7m`]׫7[[7Xa7QVWD7S+7nQ17N 7K7Ht7EN7CB7~>7:$76s672I7=.a7j*77Z64;7ٲ\4%:7k4Q77h44/j57d|4C374j!17X4m/7›4-7Ŧ4-7e4p,7W44T*7Q4.)7q=4õ'704Z6'75&7&-5#7Ж45 7O+507ܑ"5n7?57!5R7f#57K7 %5Y7$57Zt+5z 7{*5D 78U57r%5SV7'*57&|*5y7 H+57 ,56˰/5_6!85z6@5@6C5F6L566Q5&>6,W56úP5Z6ԧH5S6H5P6V:5U'605 6 C756>5 6pE5,6f5065ᑱ65Ѫ65%q6 56/15o~65!6u5X65a 605̅656λ5r6s5(h6L5d`6δ5UY6[5!Q68K5J6V5E,B6ۮ5<6׌556̚5k06M5(6yĦ5656c5 65tt65-5Ĥ555555"55ҩ5x?5eV5ț5[X555(,{5>5%QK57255l5454!504#53Q5%B5p5}45̐5MRt5 5شĥ5kK5jK͞5d2ܨ5-蛲5(L˷5'ҵ5#5'n5B6~5'`~5M5m$5.K/q6G= 6H:96T6 E`p6?kĵ6iw"6󀶬6 ep 65%f 6_gr6Wl6K2#6|朶&6"+6>Q16Ys7*26_136`Wc46~76W׷86m1:6;6Ŷ=6 1ʶ=6Ҷ86=ܶA6,rⶥjI6]趇.L61L6y &L6)^K6 ^J6-DJ6/HK6 L6PM67\oN6hIP6){R6.T6}lV6!$Y6$[6Y(^6*'+X`6D.Xc63[1e6Fj4k"h6q7j6zr:i>m6k=o6l^@Mr6DJCjt6/FEw6!Iy6K|6Nz~6Qg6TVT60WȬ6Yǃ6\݄6U_O6 b6d6cqg6j6)lC6tto6r6ktލ6hcw.̎6z6[|&6hBǂ6xd6+3@7O3>7Y3U<7{3u:7U 4:87MT)4E)67GL4Z37*k4.17dw4/7K}4Sr/7?g4P-74i,7<Ĥ4^*7c4Y(7 4+'7R4&7Oi5%7ٗ5f#7u)5g 7#5775m7 5Fa7 5ͪ7s57B57|5A75( 7ƃ 57 5%7tf 575n/7S5 7,5w65O6656#5~z6V.5XK6f(05:6?g;5C6:5Q6=56H ;5I6k 55{6.5I6v)5F6$5"6%56Q'5/p6-5C6*F5ӛ6ig5Oߵ65865-U6F56:5r6n5656:5v6560l5o}656q6^5di6 5#b6,Ь5&[6 w5?]S65"fK6}5wC6Z(5\=6e 50(66U5j165*6|5="65a6O5656ܽ5#5{505~5`5#5>5mC5c95U5#5l55I5>5ff5ll5F5F5;5554$5h4w5Rq3O߀5"3(5&Qy|55ٳw5.*{,v5Vy5^MҊ5l_50z51R!5zWT5Zmr5§*5*õ 5Iֵ˾5u<6T5w&j5 5=*5V5V(ݢ5:V260D6l\L6ok[~\6 j 6av6 #6^A!656786g\x6#t 6ve$6.˽(6+6k -63ȩQ06v16h856WC966.6666fSĶpn76 ɶY86`϶Kj:6k׶>6l޶YB6 HD6 E6*`E6aE6EE64E6`9E6 F6 G6 W5I6jJ6ȯ[L6>N6+32Q6q` %S6e#)U6&\X6v),Z6=,d]60+_63b66e69g6ozl6A%Eo6DQq6G4t6mnJBv6?Mx6 P7V{6RT}6ԔU6SX 6[o$6] 66{`C6-cZK6e"O6hN63k J6mA6p56%st&6u 6uhx6r{6ߤ}ʎ6k p6m67Uُ[7Ҫ7}7S{7s. 677*7z7 C7x277ҷ77r7v W7qA7| 17Xy#7vRv7Kr7,pn 7jj$7Ye-7`<7Z\Q7We7SNu7Pz7Lu7o!I/l77!2Ą<7)n/3E:73U87'3467/&%437dA54 17>o;43G/78D4-7p~4ދ-7y4:d,7$49*7>4'74`&74$%75W$75ڶ#7f(5^!7I)5?7~5d7 5x7f25Z7-4774P7c4N 7Y4kP 74eS74g7T47U474ٓ74yb6H5?656Ҡ 5X6w56(<56G%5@6'5p:6)56Q&56"5656568G565G65o65a6!95 y6ȕP5 6 g56=?565.6{5-6I5qb6v5~%65+ 6"J5&6a5~M~65~s6t5k6:[5>c65nZ65rT685kM65E6$6.q%6@"'6M;)6x,6M/6FtJ16iv226yh26z0361/!26Ƕ36uͶ&46iӶÀ76]^ڶ:6/jN{=6s;Ն>6nﶣ>6d>6F>6&. ?6?6M@6 A6CwC68]>E61|5G6>QI6݊K6$M6O"~@P6s%R6(6U69+W6.UZ6V1\64φ_67b6I:`d6=Bg6Zp@i6^MCJl6$Fn6THd.q6Ks6Nu6NQ!6x6Txz6Vʰ|6:Yk~68\6X^6Ca@6Hd6f\6i6{Cl6\n6cqp6,t]6Qv]7?47S7L7!Ա7ʊ?7?|7}G7'7|V~7!`7}779x7?sl7ϣnz§7^njȦ72fɥ7L`cǤ7J`ƣ7!]Ţ7`Y=7T7,#Pt7L'7/K(7YI;7G$7;=77?7Aj돔72iz.7Yf7nϐ77jP7gc77r%7)x7n`B7Z|7_ц7ȟ7헵7unEV7|71uPF7-ó7`I`DA7HgY}73W z7F'y741`w7!u7r7K "5o7k7i7ٴh7xůg76d7yMI`7tw;]7?\fZ7cUNW7'NU7L`R7z+O7=8f}M7_ݳ\0L7ZβmK7sgJ7)ײhI7{E7ˊ2a_C7`2-B7͈2@71"1@?7X<7h O:7y287367m3J47@3?(17636/74'_.7pE4S.7%4&`,7P4$*7z74'7"4$7Ԝ4 $75#7sy5 "7hU5|#!7F5Fl7$$5<7N4v7A4o7i 4m747I4 784 74E7G47047j4]74474#u7{4[7494ɧ6:4W&6#465\z65]r6^&56&J5c6U5x6x5\6_5645O66 5656T 5[\6vf5]6e5Zg6(56+5M6g5O656i5iw6k56S5 6#5x61.5Æ6G5R6 "5(z6 5Wq6cO5e6ҵ5^6Kގ5b}U6}54N6:5QF6/5?6l5 96 5r26j5+6z5 #6050K6H5%6 5T 6-5+6}ǀ5t5jU5'5i{5X55550#5H5Ԕ5 5Dw5)5kK555:54xs5К4,d5LV4"Z5E3TrL5B_(95bEE5^~95նR@G5Hq5R؃5u ,5;|C5jfEy5-5Dժ5͎Q5i5Z5Q+5:oɵ%5#`? 5j5+ >5A5#5aL0D2666?ߟ6Q 6d6o6t 66H뉶;d 666 69 6ٖB6E\_ 6f_!6h~t#6!O$6cշ)6pt-69.6ߴ@`/6޸c/6_<~/6mf.6ƶ!-6R˶/6jѶ266 ضf46x޶P66<嶺76r 춰k76 *76 76!\wz86EW96#3:6{ ;65 ʙ=6u?6TyA6pԛC6E6#z,H6!~J6I8$jM6P'?O6a*}+R6bk-T6m0gW63g3Z6Y6\6wE9mB_60*zg78)x70u{#7>rn7Пn:7Si7 gr7h#7olf7>Rf7*u7_z7Dcgw71u Q7!b{7 ~gu7v7lj7,ciP7es]k7b~N7>ˈ7e77jm7q,67x%75q7i 7ɃQ)7t뗀7d6er}7\{7qKEvz7;*x7>.Su7\Os7/ʅp7B*)n7npj7si79Ŵf7Wd7Dݒ a7Mh_7]7QUZ7wyRW7_dT7]Q7pN7*cM7=w:J7}YCJ7sy{=.I7t2'F7!3SC7B3gC72ESB7#>Ʋ@7?i>7ڳg@<7n:79:ͱϩ67F$3 4753q17 b3P8/763Py-7*64>-7A2a4,7vJ4*7#]4:(7w4'74XZ%7A4$724f"7744 7457g4#7474Vp7Gc474[M7K4-7G4 7a47o474R&72|4748795_7<4^74xN7Ӆ4d6E@4q|6{5Qc6 5P 6$ 5v656_56F@ 565o6X56c4y6246464-6J5y6'5D6C5ۨ6>56/z5G6\5765 ͔6髼56"5ң6W56756ƒ5l6x5tw6ߍ5@m6 5lc65W6Qy|5yN6y5"F6Ҫx5eB6> }5;6B~536~5(*65E!6/z5,6Mo5~Q6_n5 6(n5k6Abu55t5&5yn55f5af5nlg55m55gz59$x5/5Q5^5J5M15764Yt5PL4`5{9{3+M5+AG5 (ưU5zdH5D5txtK53:e5'z52 $u5 w:`5Ht^P5Dˮ5iD405Bn525߼^5eе@M5m5=:5 *54 5m!"5C21M6=D6@6P 6yc 6t 6RO*6@P6SS"66&6T]*6|/$6ߙ#6K(6*vP06KX26\/6x2.67ì"o78#7 V)ڽ7I"7rQ7F7Wָ7t7Tڧk7'<73P 7H7ȱ7wd7󟠵O7y||7ml7W@b7uz]7X\7.[7= ^V7ƋP7P7B׈ Z7.(i7r7}]79Ps71Z7<7}*7񪃵77-h)7Eʍ7/7ڍ7#|•7*-/7[7ۊm7x7xK7À׊7Њ7T2c`7ψ7n}7$0v7RY97𵠵:7ɧC=7'[3؃7r -ӂ7L΀7Yk^~7[S|7@L/G{7<=y7AK6uv7c-s7*"2q7 On7EUl7\i7Ǵaf7d7)Ѣb7ᩴH`7љ?_7 ~[7j'0X7w "U7ދR7tP7GO7XRL7uﳣJ7 ӳ>G7eG7 1dF78 3E721)D7$C7D4Ӈ?7xس<7[:7jEI677`257ڌ3E273/7bQ3 .7B3Լ,7w 4W,73i+73d)7!4'7(M46&7fp4Y&7.4\1#7A47[47>%47b47,L474$>7#47n4. 7Kѡ48 7g4 74w7417Q4ӵ746L4k64749646M4s6$4e6TG4U6Y4Z64G-64646x4L64 '6C46496ж4g6d46\46464p٩6{5k:6cO5ܛ6V56u5r6N56546-56w556o5Ra6*:5>{6.z5Qcr6uo5i e6g5zuZ6tZ5_O6x`5كH6[g5HC6m51=6k556T6h5G,6Ca5#6X5k6r[56%|_5Gz 6ݩf5967o56r55bx5P5Gw5b5n5 5yi5eP5t5 5i|5E55\ 5|5?34m5W)4W5R5 g^I5`D536!-856^m$86/4w:6b<6cd?6!A6m$2D6'IG6*I6-aL60ZO6ӷ3R66~T6Fq9Q>W6RD<;Y6?Q\6jA^6D8a6`[Gc6iJ e6L(7*x7ô;7N.7!ε707o7ݰH7YW"7k}7E7bѭ7C֥y7ֻȮ7n7YY87mّ7971ᄦ7l57H7dt7j7픵7l7L7ҵ7ۏ#7ʾ'76|7.7lś鱗7Ћ7(O<7m}7Ñ7rĒs 7/K7̆:7 7vJ7\7^ШG$7*^7WbR7a*R%7) Z7U57[7]7v?7SCm}7W3|7C^[z7:ܻw73t7W)q7 %$[n7c En7 ڴWj7PӴGg7ȴe7Ⱥkd7մRb7iu_7uC\7 (Y7gR5V7BsؖS7GoR7zjUP7J;GL70K7o fI7讳~H7clWH7힩CF7א2qC7VF²LB7(B?7),^=7 :7 ijM77\Ss57o90LH37|2o173-/73B/7!428.7FU3,73)7,kn3.(74(3*&7&3:5$74!7`4v7~4747A4747Ƒ47y֓4T@7?h4iY 7}4j 746 74,7s4x7 4Y774@q7'4l7Yr4741 74WZ6I4T6Fk4364(654+t6"M464}6Qߺ4 k6׶4LW64d6O46- 46c4i6#4o6e4[ 6 4E6}464n6;56/B5r65 6}5@61k}5?63n5<6^56b5I6^5qN6pU5Hu6ӰH59j6xIA5^6"C5kT6J5EBL6R5OE6/U5>6SQ586N5l=16-M5(6_*Q5ڮ6/W56LV^5s 6qLb5= 6ov56|55M5S5`l55e555h5zA5m5jQ5]g59 5Am54_5u4ڇM5>3Q5c!BX5񽳅a5Nl5Vy5'k5 ?5I82ԋ57Z35D845>F5z`5ޓf5D5Sg{5nP65cܵ5&lY5#,50G S~5!56.!B5856A6KPD6O6nU] 6k6MW{6$$6X6U6 6#6͕h'6^e'6,6G06G_/6X .6".,6y۰7:+6޵*6)6m]!6Ŷ`6ȶT6̶06^϶!6ն6ܶ6ij䶍76`붮& 6Sg!6e#6߻e%6#5'6Pyץ)6 +6/ Y-6,:06W26{/46m76ѬC:6 T<64#:W?6)& B6ն)D6,gxG6O/(J6p2L6I5ntO6C8, R6:T6l=kW6q@Y6R.C\6Ed^6H`6PKc6N>e6TPpg6u[S:i6VHk6Xm6U[Ro6M]9q6`s6Bc u62e w6hy6#kb{6hm8}6 ^pz6rTi6ՓuK6,xY+6z67ŵE7ŵp7wĵ[7õ:71_õ7Aµ=7$}µOA7$µ7O7^7b7'%ָ77l\7տ5$77彵6ò7p37/l7&Y:P7U177XN17ū7;ש77rȨ7$7*J7x6c7J.7+9O7@""77^ƣ:7)7ߜ7vś7jy7ǥP7~᧵+H7h _77Qߕ7\B7G|o77IWz7c[7e]7쎟_t7#帊7l& 7T677ߟ76`w7im(7t7q|77-~74z|7^Is{7?I'x7,;&u7:)~q7$r[o7R#$m7wsj7 h76Ƶf7bd7:L״ab7ش^z`7մ]7lZrZ7쑴AW7,MT7HWϕR7IO7B.M7FTL7JČJ7B:02J7<;I7F7TV³*D7쑳B7El]@7uo=7Jp:7f77#ó557Y%rO37v첖27Ƃ &z072!4/73V3.753+7J 3)7j4 (7-}&7u2S#73չ 714"$7#W4Q7^4і78S47 X4|]7a47wi4NB7g24V 7ʠ%4 7q*4Je 7?4J7gQ47'a4)7p47Œ4H7X47\46(4:6 46FW4*66246!4z654e6zژ46؛4 O64ܑ6)Ӣ496 46R~4?ѿ6J4ͽ6ܤa4Q6l4%6S4T6v&4B6r465L_6.5z6âF506CJ5E6aI5M6!kK56rJ5G6D5΂6<5761K95ţt605j6-5:b6-5LZ6|45mQ6c75P J6>5@C6A5i;6l?5Ad46D5-6gJ5] 6iW5Z 6tX56Ke5D6+vn5 6\r5L6@5!5shv55n55Hm5v5ͭi55cf5Bi5^5^65LLY5c 5O5D4=E54%KK5/YZ5ȭڳʽi5i e(,{5ub\5`5r*&5-;5:p5=di5) 36II5;q%6eS5ϊ6LV5k6e7j5>6Yt5sn 6|56t55Nl5_5Tq5ǹ5#+l5.5Aj5 5Id5jl5O=^5>5W55U554dF5]!|4^D5薕3X5oq5ߌaׄ50ʹ+59_65p&25eD:5)md5Zu5z\]5cgy5䄶5[ޣ45 ]58pĵ(5y׵Ց5aj5 5m vA55x 5 0Q5R7:H5B!5ZH63SO6[ 6%of& 6\nqe 666SЅɛ66E6>C 6#61x$6ҵF#6ǣ~$6h"6@ 6Yv6BI6L6~6W'Ķ6C&ɶ6[˶sx6ζ6 ն6۶ 6ⶡ6Z6"6^6>[6y6$6" > 6F B#6/d%6y(6͓*6 +-6/6ݖy26!'56$ 76k':6L*4=6$-?6/B62J*E6\5G6$=8UJ6:L6=RO6X@Q6CT6~ElV6^YHX6KZ6ƦMw]6KP2_6RHa6UTc65XWe6-ZQg6x]pCi6`-k6#bm6JUen6wgp6jur6)m_t6o%v6 ]rVw6ty6wY{667u۵#7f ۵mt7Ȫڵ7Tڵw7 ڵY79ٵ7=ٵH7jٵN7ٵ(7eٵ7ٵ1V7 ڵ 7ڵ7^ڵ!v7ٵN57LKٵ7={ص7I׵u7յ}J7eӵ7еЮ7͵7ɵr74ŵi7jg[747 77ᴵY7{ֵ 7ﶸ.ף7综HĢ7;I7<$7ŵ7Uĵ7"˵^7zʵ:ƛ7Gǵ78Ƶ"7Rµ(7 Ɨ7µQ7hR7R1Ƶb7_˵y7XzõFƐ7黵,Ɏ7õ:]7M=7츮7j5 555Z~0Ŧ5<+59MƼ5W]5:sẨ5b{F5pK5n 5Xo5@յp{5{5Mܔ5=9#5l!5BAA5,M*R5g354;r58Cy?5&kNRq5V6EWb6yoB 6}6)J6?e6ٍ(6ߑ6)66Nj666 ţ=63=x6"N6k$W6hN6b󵶋6k6`ö6qȶ26̶[f68Ѷ4 6yն]6+۶6:n6[鶵 6tJ6G61K6IXQ6j6R36 6I 6G#6%6ݨQ(6*6ɝ@-6E 06v#26T&c56+) 86+:6.fd=6#1 @684B66>E6 9G6G<@J6}>aL6AR O6;DWQ6FS6ImU6d#LW6NZ6eQ!\6T}(^65V&`6EYb6[6 d6^e6!ag6ci6Zf%|k6_hIm6Ґko6Z*np6p r6@ZsMt6^uv6U7g\浶7G 87&7s73cW7 P;7`TV7\p!7U嵜7嵼I7m377/O7d7X7k7$77㵗71j7(ߵ'7ܵ4ۭ7\صSĬ7'Եc7HOϵ7GJʵc7rŵi7p}7P7nT7 ŵУ7ë˵7r˵;ߠ7ѵE؟7<յ7ֵ07ٵj7}ٵ+7kٵo%7׵97nֵ7wص@7Tֵy7R͵"!7,fѵ7Fյ7еȐ7\*ǵa76:õE7}ɵ7.7}r7`7w7~᧵؆7\7bf7Q7#*77~7Z{7-y7Flw7iu7_Wr7{kZwp7`Sn7-Ml7Gc:k7\Boi7b:Ag7J$id7 7a7]%^7k Z7ĴrY7pϴEMW7O'ԴT7ʴ؄Q7׎N7≱xL7i@I7)`2G7.#E7鞴D7tWD7@pz6-456h46S46ؖ4 64%6]4WP6=4673x46Im436[W46kGN456_94S{6c-46W463~6Et4ļ6,46ck4}6__4Y6]4Џ6Me426 y46Ay46n 4v/6TҊ4`6)46v4.}6ri47R6 4I2z6.4ru6C4rp6T4i64a6E4B\65V65dQ6t75H6aI51=6V^536Ul5'6nt5F6y56~56aw55Nnm55ee55_h55ng5l5Hf5Ԅ5`5+fi5`5J5e5;5'i5Z5U_5G4]5h4f5 \3i$o5N賭~5[jK545Do5Q*$̡5t=o5Nx5c35P{V55y"5tu5D­5{?ֳ5|ε{M5`⵮׶57N5.)5 5P5$a5r-5!4e5<5ںI5sxR615_^L5om6 1x{6 6,э 6$M4T6O.W6yR@Y6uUhZ67W<\6RZ;^6\`6Ȍ_Rb6(bjd6mdA:f6_gh6ii6ˑlk6)o(Fm6q.n6Vt p67BYd7 ;7ۖ7 j17573j7X\7P(U7DJ7q7nw7i5:7/b7#79?77ST7ca7f7#𵢿7g7q"#37&7ttL7D޵J7ٵ7`ӵ7εl7=ʵ.7,˵7εգ7ѵ73ӵk7ٵɟ7#䵡B7H7z䵍l7 x57mw3C7T.K7r 浧ܘ7Z77.ֵ7uڵ7Gߵ;l7ٵҐ79˵17#õ7ӽ|7pra7괵[7ˉ7'R]7ҧ777\N:77j/s7O7ͯz7\v|7]&z7$A;x7LBv7t,s7uk+q7]g:lo7_tm7ZSk7R?i7EG1g7:\d7Tb7S`7F-]7b[7S b|X7kiT7ۘ״ES7k`R79P7| J7I_ٴTH7*KڴyMF7ش@uE7Ҷf}D7=C7@7#h<7P/97XK#67F37(=373}273:207S/,7wY[*7ų(79~f&7˘C#7ܾJ!7Z=7;>7?hv7}䧳+7_Q 7?g 7m7;7t7T 7C1w 7-13 73S7 (4@D7<4{\7_47Aj486y4+6o4646{}46q4z6y4GT6ӝx4H/6~k46%g4U6 1`4wi6P4F6G4ye6E.42674z6%93뮵6/#Z3;(63 633.693#63p63E63ԙ6)3#6~36# 4E6\4q6;)4A6(4t6[:4q6@?4z}6 1V4'jw6Sy4(r6,4g64TCa654O^6,5@Z6%5W6cA5~M6.H5A6wM5 h56lWX5s%6&l5|6w5* 6r5(6w7l55a5(5c]5:5]5Q5u_55(c5k.y5A\5Fc5,\5CG5 Q`5G%5^5?5v]54vZ5ć4`]55p>5v Q5 95Øh{5b+E5pi5u2ʵf5#޵%5?_5b5# e5uھ5|@"5Y ,&5O;5!5;5Ea5*tQ5F^5h?+5_Sq5 z6R656w6斶6M/6ܡgF 6v6T禶0 6ި/6 e6' 66Ej 6e 6ƶ6rʶ6ʕ϶"6'׶b6ݶ56䶼6lG붠 6 6ba 6_66̟6Lt6 y {N6W A6:R6[!|662%!6j#6ǚl%6i!v(62$+6&-6 ),06d,U36k/^ 661ĸ86xX4U;606V=6"9Y@6U'LE6UAj^G6YCJI6lFK6ZIM6KO6RNEQ6P,S6OSjU6<%VW6IXY6A][k[6]a]6@`2_6.c`6eb6bhd6fjCf6đmg6(pi6rak67\%',77 X77 7]! 7iG7FV7_R77_27D8Ի71x7A 7GzƷ7.l77hֳ7A 7S7:%0ů7^7n7n7\7 굇7r7iyݵA7׵7*ֵ7[v嵰7w?7{i/"7~ma7Tޞ7M7475A̜779h7A/Q7+X7޵7ٵG7ֵ 7K ص7l̵:7 õ7j 7_c7鷵4Ό7 7h 7"`9g7A7ƽbS7o79Ȅ7n71Ȟ7vGC7) }7fV{7͐Xy77 gw7kt7>r7e|[p7Vt}n7Gml7a$i7)PCf7eCi e7p4s.c7w/wQa7<-`7O8]7aJ0Y787h[T7gS7VR7kSӴ|P7c%L7}H7gE f)G7VF7@*ܴ=D7TB73Q?7p]=7fe:7NǦ67} *47cT27e`/17h< 07O-P-7 *7(7سx&7%ȳZ$7y~"7$X'4 7P 77^΂7 D7_2 73v87pV-r7h +z7|7? 7ܲZ 7Z-27ۅ3J7{.3N747ۃ4\6,'46-X44@\6k94|6V)4h646h4qT6%4Ϫ6{@4z65O4NY6V4zY6V46RQ4q6Z#46.3ո63d6;C6B$R66Ӳ6+6zQ62626G12d6"e2!6?f3ͩ6k363ڃ64Ȃ6G4f0604/(w6h4)r6q4Vc64UY6 5ԋV68.5ˇU6V?5S6D5F655f=6<5\26AoE54%6^5hn6j5@6a56g]55ەW55 X5C5X55ifS55Q5y5pN5U^5xM5yA5K5,6 5F50q4w\F5k4H5j4AO54,W5;3[54Xȳd5e5 utHm5Ut5^pz5'~5KE45ܘ\i5x΅5UG5K1֔5rZ5毵@5+ĵ5صw5H5.Rq5H S,50h5W"5+Qۺ5Z16v5<5?}Ej5|O)5ZoJ5eEc35 mj5gIyB!56e6xR96𗶤5~#h5졶@5Ӻp5쥶U56歶66ശ 6:׊66]Ŷ6ʶ^}6$жK%6ֶE6ݶ6{y6I365UI6A 63 6>6|'6Y5R36 6ɻ 6 6b6576%6,T6 6e (w#6(#`8&6&% )60(+6@D+٥.6-a16߁0 46-3665`&9688#;6i:=6U=B@6?$B6uBD64EhF6}GH6[2JJ6LL6;bOmN6QP6TR60WT6YaV6Sf\F3X6_Y6Ța [64d҉]6fH_6qdia6?k8b6nihd6E%qf6b7̀*7xx78wz77ZA77Sl7_0g77277ON]ӽ7Uo7G+7n7Q7z,+7R=7UlO7.7K7CH07xi 7^7[73%#7~,X74L҅7SSWߥ7X757=67Ƃ7t5[7Atp7NqP^7(w֞7N7gd7⟜77>X7Pw7lrⵤ7۵7?ڵ97;ѵ7sǵِ77RԺň7{7^(7u'7J=%7T>#7?g;"!796/57*?7^-U7~W?7gBtVH7< x7Fl7)yi 7Mu7vMi 7&ܳq 7@y{7{87ae2S72h7y5q363xA6T36J3S6.3H6S36Pl3!6;446!4!"6CB4b6 H46DE46#/4n6v4Ƽ6h^36魰59k,6=J5G6tX5D6/`5f 6]56SY55~X5z.5M[c5y5b55PQ55ScB5E5OF5yd555@5"45 5.5X5K25485,4?5oB4 F5֚3`R5rZ5O0)a5u4p5L>ep5 n52y1q5jHՑx5(nʂ5d5|S5\W 5ő5V 5pѵT5nT5U15L 5$`5 ʯ5*5^6r˯5?5D 5^KM5VVh54 _5hU5mu)5#P5mWX5&2V5)c5P܉55룶55wKW5H 5pگD5|5(︶&}5:]5ö54ʶ6>϶c6ѯն6`޶ 6_嶖X6,pz6=6 64i 6 6V$· 6Z>6vY 6 6zE6 6MVW6y6\6ɥ6k06+" !6$$6']'6*/*a*6,8-6R/`/61 326w_446666f9[L96C;;6s>=6"@>?6C A6FC6ӬHE6,AKG6eMBI6oPBK6SXM6MUmO6+;X?Q6#Z S6n]#T68`ҕV6bBTX68erZ6!gx[6dfjTv]6xlF$_66o`6q-7o7K7S7Q tk7$ <7T 7> 8 7H ȳ7L KH7, ޿7< u7J G 7NE ѩ7 8F7-; ݸ7K |7 '7#ʹ7L94_78+y7* 7" 7L 6W7 7 E57k 7D7 \7ȥ7pTФ7M7'7 %7 7 ;7J B7 7e#7 e 7IX73U7VV*7F"Ș7/ŗ7ݵ@i7P!Ե.7JCϵ7\˵x7ɵt7˧ǵs677,Ԙ7żҊ7Ϲ^׊7ظ77E!ن7W7e79)7ģ77KU$7jF}7El{7ؕy7?w7~6D6MCٲ6-16Jle6` K6i 6q3}6RN84x6vq41y6M4,p6a4d2e6C4[\65&W6E5yP6o\-5RF655V<6=5468G5.)6V5L6Z5C6/a5x6`5^ 6Z5A5Sa55{555}u5my5`T5K5h<5&5/5]v5t5}:K5l 5X%5t&5&$5N!5,4MC$5ǣ4t35^n4=J5c3./Z5o{a]5+=.b5ϓpgl5Ŵ7d5ba5߅'d538aXj5iZx5Z}5U$55Edt-565ʵ5ߵqF5u5˜ Y5 ;5_5O)54ݟ5(?C50KEx5kLo~5*LZ@5;c5s5w55p،u5:5?_5훶55z>6N5Q5so5*$h5n5/(5)5i^#5Õ=6ɶ6S϶h6)׶6?W߶,6c}6<& 6cϺ 6+ 6aMK 6 A7 6& 6t 6 6> YR 6 t 6> 62j6d-6F6bO6o&6D!6# 6 .!)&6n+e>)6 &.+60m.63Z06j5ӗ268_46x:+66=96S?;6 BE=6D?6'GA6eIB6yMLD6|NVF6zQH6WT0YJ6_V^$L6EYM6[gO6w^jQ6a#S63cT6=fV6yh9X6gkbY6m[6 7 M7sS17b7}s*7S̷7 E7V/7Qd77ԁw7,7n,7<F7ܺ7ao7a7Y7UN7 س7Eym7i_'7Wv7f7 467Bb7+@e7Z|7a7;7u(S7}7ei7BZ7j 7~ڠ7( Ÿ7( B7^B7}7P7䈚7}x7b47LN:7ص͕7`Եi97jӵے7c ѵ7(е[7[ɵ_7ƵU7Uĵ7µ읋79Y7yyގ7SC7G!F78 7[7Wܱ͂7sU}7r:7Lȡb~7=/h|7dz7mx7du7_‹_s7׊8q7̈o7~=l7"3j7Ng7f|e73ud7qs`b7`֝_7JK[7,m9V73/4QR7H1VP7-p Q7h +LP7'3[N7y'$K7"}G7s7D7hA7h&V@7M5ԴN>7ƈt;78757ι3727)Ӣ307KeV-7lur,7Ij*7i'71~b$7pa!7>_7AjhR7}wV7h7K.77`7ye7鈴C7{={7;7pw79YI 7N4J 7o .7#737埳7n g683oV6F368363R6ش3x6436J"4U6?g;4 6X4n6Y4)j6q/X46Qd4;6.4D636J36D36X36#3E$651K6q96[[6򹲋d6y3686€6|&f64N,636 4/z6]5o 5*mء5S6"튟5_+l5 5 5&AG5Nl5ݖ\25kLkž5 q5(}~B5턶E5F@5 D5 5Kx5|*5{e?5nWg55vi5M3i57o5!1M5 @5he.5M¶@5jȶow6Ҷ e6Y6ٶ26 䶢6:% 6uf 6|+ 6(d 6@ 6nn 6V،6Uc6 6pN Sr6 y6X 6 6Z͏ 60Ԁ6$6WZ6hv 6k#s6%R 6(#6ԇ*%6,(6a/4*61J,6L84M[.66f06M9m26 ;Um465>f66@Y86CeE:6EEe*<6Y2H>6wJ?6 YMA6^OWC6RKE6^U_G6WOH6PZTJ6 \CL6_M6bҩO6dWQ6BgS6}iT6hlqLV67M7S7%p`77t7^7#7c677'27\7bQR7@ 7u7Q77~D7AԵ7 ]77r7\-7T+7*767k֩77}H7(OU7t7!97->*7P-*7΢77M7) Yџ7 ΍7- 7 x77Sum7s77N吗7޵F7 ۵ ˔7ٵ`7[صE71׵'7'ҵV7ѵ7r̵`7 ɵދ7Nǵ -7Tĵk7O7,,M7i7Q7p97(172h7z ~7\~}7if1{70NXy7wv7t7A1r75Ko77zm7퇵k7ń~Ui7Yf7@ e76u)wc75a!_7P!TZ7EOyU7;KsR7I>P7t>O7Y3O7 /cN7i*`K7w%I7C$/}E7e0B72ZSA77>7m;7H]97&C67!47Ǵ.27B+07m^.7xi4,79\*7̇8'7z̠$7c^t!7Ix7z+77嚴^7F7 %78-77莐 C7ԫ̘77j 7K9[ 7@c7Y57) 7Ԧht7v6A 3@6]3j63ħ6|36&336 4w684 6GV46Yt4wK6464>6,4664~6iE4O:6H3y63;6t36hDy3&6ӱ36 D1P6<:G6>.2{6m3.6 9 6"ȳܱ6~f6剳҆661t763I6ǧU45e{6|E4-t6I4l64d6&. 5]64&5nW6x45K6@5?63kM5346V5`(6Y5 6`56c56L`c56d5 o6U!c5W5zd5u5g5p5MG55~,5UZ54*5я5 5U-h5N 5E%5l 5&4(5`!4l/5dC4fJ?5$4qN539J5} 3?H555'5Eմ]B5#W5"y[5)X5A,c5td>m5+{5N5aڌ5i5ǀƵ5bݵUi5J@5F )5f5e&5 /,H5i8 5$%Cz15XS֦5Qc5Lt 5 |'t5,Ϭ5559 /5ǹ?޸5ݖ˼5/f5ʄ5Mq'52~54<55&5gn`5,5^5 Y5R¶M5c6ζ5۶6;`636w6𶾙 6 6@ 6I8[6 6s6q!6W jZ6 |6j2G6#6Bw 6 6s6^(6@61"6ݙ$ݼ6&= 6\)"6K+R$6.&6 |0Wd(6 2C?*6$B5,67.6:/66uPB@6xSA6,V%C6>X,oE6!]["G6T]H6Š`~J60 c'L6xeM6wGhqO6j8Q6 7:7l7 #7FU7|7177"@77S7_70Ki7 77S77A7SL ַ7~ c7i!7S1"z7'"N7 #p 7r$ܦ7M%7&.[7&%7Ր&oB7Z$ʈ7Nv 7Qئ7ƒi7Be7ɷ77q7 f72 )7i 7/I 777j7I,e7|7&(7;J7 ߵt7.9ߵ 7ߵ7޵R 7Xُܵ7kֵ7 ӵw78е7̵ p7wƵ[7ĵ"q7Zb/ 7ѽ7Ʉ7"7+݂7#7ny 7UJ}7%r {7t3z7w7|[u7Ns7c@p7`Kn7ŐNl7Bi7Ef7܂,d7ya7,fS_7ٯ\OY7'C;U7%MR7_eQ7N]P7RO7)Hr8N7= jL7 5I7S+$G71'D74WB7a?7&<73WF97O67U47ߴ2776ôf17G/7s-7Ԗe*7Fϒ:'(7m/%7D"727?툴w7\y7H)7uB7V0[7^zl7m7Ŵ7X7j787N 7Coα 7/Gԃ77 &7eU7سP^7^JA6T2i6&3H63K&6D356@46M=4q6QZ4ȼ6|l4"6X46[y4-6A2a4B6-( 4;B6!3Ђ63ܗ6`n2_63Q 6ohh6ܨ6A.6 16q3^6EŲ 6(ܳ6ߍ6*6P(6e]̆6b 3u6)4a6St4Kx64-r6B4t%i6^4a6r5Y6/5M6cR:5rA65Q5t9-5y5%5l5I5pgl550-*5-"54=)5ʗ4 E+5w(49.5$ 45153q@(5I3S+5FM+5ݎe105[ִU:5oxF5 HG5ksM5_7>\5`*Z_5#e5@xr5 XR΀5de5ρµ5'۵65e5O55% K5&i1ܧ5o=أ5:G<5y/T35KeKX56u+55ލ5v䈶ć5Gޣ5wz?x5.ᒶ`55Yn5 5Tء05`5t55|İn5<볶F(5rsh5߾5Ƕ7b5նU5ݶa5=߶E5-5o5r 춹6)H\6mx6\6ice5`5i555P r5:G5rZU66j7NGk7\.7gs7w7ut~7q 7!7!\7U"衿7w#,7# 7^d$K7%޹7Ƿ%+o7_&7 'f7A';7(7]{)햱7υ*%-7(+7,,]7N-27-57M+U7K$×76!tƧ7ۦ707_7º)u7777 ޟ7 ?77n77ﵦ7u鵸q7BG7X767嵾#7㵕7ᵃJ7K`޵le7pܵ^֍7 k׵%:7Ե !7-ҵo7m{ϵ/ň7^ʵ7iǵP7oSŵzM7zC7"7wB 7\X7ꫵ~7ԪD}7C7{7'ݢx7YfaTv7vs7E-fq7kNo7Ҕ Dm7;j7qf7״@c7}ݡa7p_7k\Z79PhT7TYS7w[R7QuQ7DwQ7(lO7hU*M7aFIJ7 -"463{Ǽ6 3Գ6`3ꥰ61"3O6Ƃ 6) a6.263R613 6휳eǓ6+6W!d69̀6޳ML6퉲8s6736X/4Șy6Z4G4p6cz4 f6q4|[6+5AW65|'M6z#51B6[55i76G5S-6!M5}"6wG5x6C;5 6o?5<6=5675Rq5`755=95535M5~(5֝5p"55!5h5{f 5;j15C$544+5N44*5b`4}i*5}4t5*4(54w@1'5F15 ]0C45&4564C5uItP5wT52bX5YZ5cSon_5ᆵ9c5o5(5+µ&50ص&q5NS`5;~5?m5S_5:,t5;"5e*HUl5X5Gh5O6v&555U<)5T)5_މO5b5-5(;55[5N 5$t5ʦGʯ5m\@N5+5s35,e575:05jȶd5ԶFC5ٶ5k\޶%5)7x|5U5N:5o@5]5$5o5ЦL5]z5EVo5 5 >5 ։5,>5Bj6D$6 64[6Mz6(N 6Y"ˁ6$w6H&G6)Z66qk+_V6R-H 60A"6oe2w#6e4G%6'7H&69ϡ(6^ ,6A"-6ٞCSu/6/F)16{H 26)XK46WM-?66JPt76wS96ZUC;6NX<6ZT>6z]4@6 `%A6bsC61e#E6.g¦F6)7h|#7#P+7ͣ#7r#,7k$7P$/7$7#%47%޸7`<&=7K&7u'M7*(s־7s(75_475bh3N:5P:54,F5'J5u'R5l/\5g\Z5Z3O>^5`Sa5_k5qq5hw5X5߁7a5zӵ^5۹䔆5ք5j JU5q"5&+‡58ˆ5F)֊5\Z5,k0$5 w5r}<5d5߄5𽈶Kv5t5Մ5qd5晐5)5`A5#5+u5੶jT5l15wu&5|5W¶U.5F̶h56c?69fwA67c(t7 (7 (p7(7&)Tm7to)A7)k7:*I7*m7 E+7+u7#u,7-7O-7|<.7?.&7P/=7/vY7_Y07 07̈17D2x7V$3?a7'4'7<57)6 7b67047l0;7]-7`)Bݨ7$7T 7+7717R v-7W 777"R?˜7DRb7+7߶ 7_E7ﵶ7D(7-7,4T77؏7ed7R5_ 7eq܋7)؊77ݵш7ٵ7Ե7Wϵ7dɵZV7 L7R 7`Ӏ7Į~7g4|76 _7y7zv7H= u7D:r74mp7!qn7익k7%i7>e7ЭCc7a7 XE]7{|Z7cv6W7 q U7vUR7=zO7s cO7[XN7BRK76$9H7ւ>E7>C756A7->7'ov:7$@778$57."̙37[V!17D[.78q1,7ξ K9)7q C%7|rߴP!7gYɴ_D 7uJ77Ϲ07s7Z䣴7^'7$78•V7g\^ 7 ) 7,u 7Qa7/o7o '}7H0,7縳7γ)7]66o16,3Y63E6O46@z46_+46>44V6U4ޙ6w4^6Da46&d4:64Y6ć4A64߶6#_4ͱ6p046?g;369PW6ݲ66m6;6Qet6RDO6_내"6^66S6Il6S T!z6!5s6~ 1}ek6۬3Dc6s24X[64z'T64g?K64bC64Z:6! 57I06&` 5d(6&u*5=8"6/56/56>W15&6C.5H5ڴ,5Հ5+552"55v5t5~5AY55ӑs55L55*5^5554(5<4R55߲p4%)<53 A5SV~C5[ K5'R5wҴ:KW5z#}m_5a5'97d5f˫d5@sz6n5Dt5gNy5誵[~51Mp5εG5Z浍ւ5܀5A _55+~5?=a܂5ëKX5@Y5Aj`45t݌55|x5Ёg\5:5 5ꋶi5T 5 Ԑ5˔5L55656ޚ5ശZ5.W5I/50H5͋ȶ5?ζW5Զ`5ض75{ڶ5x߶g5G5NY5BﶮF5Zi5[e5ǥ5x5U+5P5 \5 G5N u56:Q55^n6.6 6a) 6V=6O 16 16!?6$68M&6K(6*<&6-u6?f/61V64Q6~6f6:9 6;"6e ><($6ߙ@%6+Cd'6E)6WHu*6,JH,6ĈM-6'!P/6ŸR(16COU826aWb46xZ56 ]76_(96%)b:6d`L<67K- ?7 -73- 67.70.h-7 s.7.&7-/ۤ78/#7 0ɤ70&7/171*377272D73ѻ7J3l73F 734>74U-74)7[5KR757675777?ڮ77D­76ݬ7M4U7,37$7/79( 7 77387;Liӣ707 7 4Ԡ77G71T;7C7O꿛7}7E`7[y7Ɩ7?77 47i7+$7q赸7{L777x鵆Q79뵶`7Rg7޵y:7ܵ !7صI7hkӵ9ڄ7eʵ7sµs7!7mO*7Y+-|7̴hy7{ )v7 u7]*s7"q7-o7ʛ/l7좵g7bb7zb7+a7#]7bsZ7H>X7v}WUU7BXuGYR7oCPO7e.N7*4PM75:K7t2-H7e-0mE73[C7ϟ4f/A7G1=>7/0:7477e:5571Vt3719170%-7׳"*7gH'7Z$7s 7 7774277S+77777&s7 79` 7: 7Wȏ7z&7U76906#2/65&67969:6}<X6? 6A"6ED$6&Fq%6swI{T'6Lo(6DN*6@Q",6S"-6kVQ/6X06_[y26d^ 46X`56'5c%7672 727272t7l"3 7dZ3g7[373P^7`4V7I4.Z79@575]76e7e6k767P7<7V70777?7zP77϶7y7V77 7H77&8 7w87R87Bm9=71I9zB7 C7A7 7b7i370,7g$ 77͎z7k71GĢ7N r7W 79\b7>7csQ7j7|7Bp7վ77YL7?=%7"y(͑7Np76뵹/77M﵌ʌ7 &u77}"7굀ш7!757)Qڵh7]ӵ'7̵Â78ɵX7ƵI7|7Y'Jy7pw79v7s7 D~q7K0mo7gQUm7&k7hce7=0d7'b7̔"_7׍?^\7LHMY7]~V7tR7_lO7_@M7LUL7X!8J7$ H7<$`E7)'C72BA7L0a>7\2P:7;77ϳ>57p4|27m<':17KBb,7u/_)7!Ќ&7$74 7r7Hᴘ7[ִ7Cִ7fwӴ7ִo7}״]7w۴Q7a>o7V>7PV 7_Ѵ1 7* 7G7ڧ߸7-7y17TDPI7=6'6l69B6169P3m6+3 63^=6Y4&6G46'T476EPz46ك4!6Py4@6/o46^4i6 ?40׵6|4ў6ខ346Բ}6@?6!,6O GĤ6g(6P?Ȓ6zRK6r6lH26g[S6KZԁ6;_z68_q64?h6۳a6ohZ6{3&U64:N6L:4F6 }4ι>6I45D76\4,Z/65d'65)6{56!56a5=5655&5^55k575M5Q~5Ч55k~5*5π5D5q=]5`!5*}95a7&5"5).5; 5;5}4g[I5W~4>!R5W3)c_59;c5!;f5Хh5AAj5#pgl56PMZn5lIp5-iH!p5Ru|Ut5v5Et5౵il5ĵDo5p׵Mo5LTiP5Ȝ15<5(k56x5Lq5V{5dˁ5rK z5:{xz5Ցx5Ȃ6555q5Č(15YTޏ5Z5ݜա5âm5Ue65 ֟5j "5 756!45`¶8<5ɶİ5϶ų5ZԶVk5-ٶ,5;5޶\5+ⶐ5嶝5綳I5w5jM5DR]5{555+7G57D5  95x 5C5xR#q5i5Vo5z5Yv}6/ 6mA65O 6!>6 6 #{ 6% 6'6V%*{6f,x6.l61o6o365?s68`6` ;6>=6Q6@6B<6bjE 6Hf"6ܞJ#67M%6O#'6cR (6TmG*6W8+6FZCe-6\O.6/_E{06TaR26]77=7"7J77g778777%8&7^8!787870N9f7Ϧ9l79i7%H:7:x7:_7:27:ѻ7R:Ep7,:7:w7J:G 7:ݴ7ͷ9}7y987s9J79ư7;7>7z?Ϭ7w&>Q,7?78/7Y.7Y)7J#7DϤ75⤣7Yx7ے.7 `7 ٢7#G7M7Ձ7~7.Re7%P747_ag7758v07ֳ#7׬﵈Տ77)71f737X7nm7Sl7[7K$F7i޵r7ڵ^7Ե7*ε0~73&̵w|7[ŵy7zw7"]v7퍼bt7n'r7mo7em7R@Ek7갵f77>d7᧵b72`7h]7UIZ7KȷV7Oz'S7r'7= ;7ӦC-87o?47N<17>A/7j<+77)7,W'7#7e!7~ Me7%7 fء77N7Z7E7W579 D7rQ7f 7 7  7w˴ 7D@7웴N7 7.+W7nҳ`6澳,6۬'6h369]62(6A836뤤3|~6p36 476^=!4hz6_-o6._d611Y_61iGqY6-}V6]2e1K56N I5Uǀ5c5Msy5 ȁ50z55%EO5J 5"z51 5kq!5{5< 5<짶5 5<-5I6ƭ5|_\05ö˰5ɶ A5[϶x5ֶ5hٶB5*߶K85|ܼ5;gT5 %5I55?5sBgE5S05a5k5c85o H5~ 5 *5ip550L55{-55D5X5O6 O6 6"6v$|6&Cp 68(M 6*. 6--e6/61"6:u4˧66X/6r9d6){6aA1b6LCg6F6a4IS6K 6cN+"6 Pʷ#6SkC%6V&6-XnV(6<0[e)6]rb+6q?`,6*7<7{<67<}7S<7g759> I7R>V7W>=R7^G>%78 >7= 76=B7Y#=%'7<ȶ7<7|;7:p7y:ɳ7:z7!<ȯ7IB76C 7A7;x77S5Ǩ7/@i7'*7"?7R7E7%Pw7(7 Q7 7i7 1 7Jr7E*U7`K7y#d717TS7ْ7jP7UJ71*7$(R797qI%:7817S7D7/7o 17f%Y&7q7۵47P!Եc7yҵ|7ʻ̵Juz7 Jȵ:jx7jƵv7lmŵ,u7µHr7Wp7C an7ǽk7#t%i7泵nf7/c7h`7׶1h]73jY7PV7/T7솵L1R7M|N7lK7x[JI7;JeG7>TE7/:0C7Z=QA71@ >7F;7Jy87[H57F27pF /70@,7 r:=*70*x(7Go$=%7 )#7`>" 7.'7 U 7 7'7ز7wh07n!i7)F7&=7L&\7|" 7aI 7 7C7#K7^G7퉴7#7劳]6yPB/6F>W66`2S6\l26A2~6dV36ŏ3P6n3z6q326BD46D4S_6426x316 3ݽ6H363J6Rc6O-R6dQ46%d6^:V.6QsN6@hh,6ap6iҒ6I[6/*ԇ67h6`|pz6 gap6gej6 _3g6-F_6:X65yT6W&mU6.绲tN6g2=6a3&4@/6:+4#646=46G246g4 6^56'55q5x5U955g5>5#4#c5ef4<55o5>5~n55KL5053,5("5/5E/65h+4K5A4T5N+4CT5gfP$T5$/f5\´c5KU`50Y5qǩU5sP5ֆ;O5z!P5>bR5S5^Q5yH5X\{55 4$5 B"5+-5;~75I3UC5S'f5`r5jqh5~ʂ5J"5脶Qy|55551G`5@ԏ5ᕶ"h5735𸠶є5祦5Í5ʷ45Ŷح55T<Ķ75^ʶc5ж!5ض25ݶ>53F5B5nЗ5S`5o5sdP5+5@M٥57/5k5/%5ҟ 5c Y~5 5fى55Y5TY55_5U58451!5FK52J5&!.6 #6X %Cd6!'6O)j6+J< 6- 6k0R 62 6k5df68p6:z6\=6?6 B67E6G*6iJIJ6L96Or6 RF 6Tv!6R8WM#6Y$6F\N&6^'67;Ai7lA7ۀAM7sjAտ7_aAD27IeAs7tA`7A7A7|Aq~7$A7wAx7A7cA}7A7FA7|+A57@ϻ79@EV7?pڸ7>7D>|7=ĵ7%78ɨ72[7 -7gF'7#l7Y7Ј779h+7Tc7Uq97L @t7L (E77!rS7ڗ7AO">7>Ȕ7O7\Y7Y4ʛ7)pX75QH7 7t7^ ֋7* 7{7ywt77y,7=޵G7 ص7յ:w7@ֵ~7ϵ{7(5˵+y7εOw76ϵ!u7˵r7*bǵup7cŵn7cbl7߂_j7Ug7]d7Ӂ_`7h׮ޣ]7Y7Fl@V7#阵tT7m}VR7YmN7K7`qH7%d5 G7ʑU/E7N5C7 KlA7E>7ęF;7NW97n2Nsf67J37iG17A).7γ9Y+70)7&'&75$#7 7:73Q7& H7͛7@7t*70E7.7.} 7s9~ 7K2S 7B7 74\ 7Plk7id7=7T!y7>61|6,3636C8E6!b6UC 6G2N6V 3t63f63>6="3(63Q63ڈ6e3]6<4R3626Ym3W6ҲtK63ԳRa6y(Ʃ6p*/w6hAh6hsX26q6Nf-6@VK6u鯍6-?6V06#w6zŽ~o6Pl6Y:k6Xa6[0X6NR6i ,L6q%@67 |16$6 S4P6!i46/4M6|Q4Q!6u"4/d 6k4#6q4@5-4y545y4545c 475R4q5S4+v5u4e55btD5yB 5a&!5>54,#564 *5D14356w'4;35-3#H5iMI5\G5(A5i<[^&5|WXu&5u-5\55\|45645;85Z35Zg+5 !5;,5&+&5bS505ABA5XL]5s&X$U5|J_5Bb5@ܫ5`5,~pۯ5Ķf5aʶE5c϶Ϯ5]ն 5:ڶ5Q߶5dU`5I"5xa5#5lي5W;5E*?5s55DYb5E 5F 5y y5$i5!/15q$55X58m5p]515LBP5 |55!s{5t#~5~%6'6=)[6@a,y6f.6)x1 64p 66|, 6\9 6{;j;6W> 6@AE6C6IwF]L6 IT6/KwO6^1N6P'O6HSt6UJ62VXP6Z@!6Y]l"6z7Ft47qFQ7f;F7F7EH7EGe7E7JE0J75E7 E57LE7ϤE-7*~Eq7CE.7QD7DF7Dx7mC%}7B7B@7HA87@7?27?Z7?C7@Ͳ7B72G7dKFK7B887v>7ͻ9⡩7g.5QR7[1, 7X,87)77)&* 7#R7 h7t2̠7y7E<֝7 {<͜72 7r 17J T7@y7Z7%ẕ77Oz7 Y7EgQ7 .7 َ7z g7 7FJ 7/Љ7ėsj7EO7/i7 p㵄B7S#޵7۵Y!71ܵ97 \͵Ѡ|7NLƵ |7εyIx7Ե*u7ҵE3s7PYеaq7 ɵo7_SȵZm7DƵj7,õVg7ý&e7๵ b7{)^7q[7n{7X7!YU7oGR7bO7ȃKL7I7`vtG7BcAE7/(ZC7pRLxA7oA>71;-;73N=97MQ67HI47B517;A.7a4+7h-5(7{(%7y!G"7Ͳ77:7i{7f7+7!#ֿ7j'7\'It7e#d 7`=&%7+ v 72WP 7d=' 7/Y7I?7dg7864g6w36 D36s>-16} 4L6G6 qg6A1 606M436@w3s6'3tJ6}736Qޅ3636"3\6C1$6Q=,6Q;6; ±6[ԑ6Bc6`}ʣ65m,6T6޻6Tɴ6Ѵ6[E6Z~6^C t6nô,m6ti6Ѣ_;g6=&^6I@U6kCL6zʣB6,-6{J"65?6tpƲ663p67u3g\6‘3W 6ҟ3 6s84!2 6Z4G6f454m5HR45m`4545} 4g¤54G5-4/54d5/?4G5ԃ4 -5;4b5hX5Dzau5L/5+5>5N-5둶t5坖t5j05]TiӖ5(]Q؝5ة52ɯ5yֶ 5پ5Ŷ¡5tʶS5ζۤ5-ԶŢ5"{۶5ᶮP5d綌޷58>5Ҳ5Uiس5p*5;i55$A.5y5t5) :5%T c5d> 5 RS5D5$5ҵ5y5po5ג5X5PT5GZ5?9a`5vU5#!BW5#-{5y%?5Y({5I*%6n-6Y0T6O26_5j6686׬:q 6O= 6?s 6B 6$EAq6G96JJi6lL6bO]6QG6fnTUM6\V$6oY76[ª6b7KL72Km7sJ7&JfH7hJ78JV%7JՔ7I7I)y7tIe7zjId7+I7MH`7tH7Gc7icG7F7Ea)7'E7|QD5D7C7B7jTB7B>B_7Bѳ7T>D7EB77E7:CL7%6A@7B=Ѻ77Ū74$73Z710xǦ7-7E)d7%Q7SӢ7pI7 7%x7%l77`қ77 U7 N7j K777" 77W ې7i 7U7<Ѝ7V=7. ?7#H77#)7f8R7߲uu7YS:7R嵘7)(K$7۵3}7mص{7ӓֵy70Yֵeu7صt7/Zֵs7єѵH:q7P͵7n7ʵGk7Ƶph7qzq>f7 c7蹵e`7cH_7ʧ9-Z7V7竚C@S7 kP7,M7Q[[K7|xH77';7D:*97|2F67sA47:(x2729/7N,a,7}()7%&T%7M!YW"7by7u7.P7D7w[U7Yk775K7I 7A 78 7c77XΔ.7#ײ76z֘6΁6B3613`6΢3s6tք3?6L3662Nn61i 6(362#682t6՗39966IxH62Zx6+y2C6L%Jl6.Q6 {6WI*o66ٻ,66Ʃ6eXy56r6*Ɯ6ٴ]p6 /6Ȳ6*6h\{6ўGp6Ol6]0f6OKc6SϴeX6Q6FK6.g=6%6} =6W B6I<6u6Ka)6VY62*63a 63=63x6 ,4e_58T4^5T4N.54m5}4<5̾4d54504q5F4Յs5{4^54I5>405H45@ 54x5* 4"!5L"5w$5 ִ"5e5=C35mK5l5P5ּ5%{5&ϵ#5'o5H 5S!57$/R5 %Jlj5xV>5qcBR554s5>P5⾄85ԈJ̈́5inֈ5F@5455.㞶#5"{5 w#5f䮶ĵ5gpa5r5hƶG5˶B5϶y5ֶ5ܶ5,]ب5ϗ鶋5$N56 51|5!w5=5@u5vȹ535 -}e55t 5Z 5Z z5%5QD5o5e$5'f)5x-5;5F75O;5Sx5l5 5"5U$5<&iu5l)5, 5k..5pk1 6Q46W6 6e96<<6;>6sCA- 6lC; 6mFI 6HB6#K;6 Ntq6~P.6$SSU6 U"6 X36ȃZ6I^7{TP$7O57OZ7!O 7Nx7|N7n2NR7M7AM27aNM7-L7fLϔ7 L7|K+7`JH7J7BI{97[HԽ7hG:i7sF7E7DA7=FD73D-7D7HEp7 GF7E\7C7gA?~$7=b7w;Tܪ79ϩ777B4)f7'28x7;-̥7`*7=#oӣ7$P/7܁757ʻ77x&7W7Sr7$7x =78 )Z7?/ 67 OX7i'7o7.^t7]7P)X7Ȏ 7. 7-D7PG|7kdL7A74쵷d7c絙7䵸Ȁ7d( '7]ܵGs|7Gڵ(qy7j3ܵv7*۵st7صLs77ӵy[q7]̵gn7ǵk7cŵhi7Ù5f7lb{d7Gõb7Y`7?޸[7wTV7yYT7i~~Q7$yO7\#|L75N]I7TmLG7fkNdE7CVB7i<!?7vWA3<7ED}97>Jq77 9q57420370)y07ܓ")7-7^)72|V%7'j"7!7Ů7# 7K7t-7)437WW7>E{ 7r 7V 7$${g7!\7(f07U6_+U66C"263Q64r63P63657 4QX6u3]6*3)6`36D.3g66?/6‘ߺ6+ϧѝ6Pɳ6Ş 6dZt4 6L;k6 /a6pN6QL6Z6nr 6 zA\6zy"6޴/6Zva6`ɗ6s6(/z661>~6D'b>q6h-n6r&]f6c w`63"V67M6\`G6(ܴ#o86Ǎ˴'6yJ6%6،]6 t6_[06ٳ6_"6Xc64<>l6 6[:253 5:04 W5]4R>5\45đ4a545\4җ5v}49j5 4+5dj4Hr5M4r!S5 4c$5445r45G305-۳L55n4L&d 5HD+5 l4X$$5x꘵5\5]5\V۵55N5Cg'5Fk+x658oI5?;D\50Pn5]z5 l=5x8N5 q5 䃁5 p5X5Wٔ5,֋5'56韶h5Gg\5U5,W5e5Ƕԙ5D8Ͷl5Ѷ5ضB5޶]5d嶽z5_5TU5Y 5I35nMs¯5^o#5k&p5y5ܙ*5Y 55) 5 5e 5J5X`5=}5-'55@ 55n5М5w5-1f5K5X 45H"5v%5t'(s5*5$-a530Ҫ525 55l-8?6:w66jm=E6-@'66&B6o)En.6/G' 6:J` 6OL 6PR\7%YPD7OG7O7haN=7YMܾ7bLmH7حKX߿7ѠJ!~7̇Ic7GkH7WGZ47_F7E87K"E7y E7JEs7pE7LDwd7C7Az7B?7h<1j7 ;179/,7HX7754I7.7ś.̥76F+jJ7xO)ߏ7(5" 7A̟7' 7Or797V7ܙ7jы7E77 d7 7O e7J 1T7v W7z^787M 770Ӊ717v.K7| 5777x쎂7%q_7&%7D޵M}7ݵzz7޵w7~ܵ(u7ٵfs7 ӵp7ë˵n7Bɵٞl7*ĵ8j7g7ʁe7_c7~ֿ`7ʵ߬\7{wX77V7`S7zf P7n51M7.R2J7^HG7{GKyE7XD|B7RgB?7yC+==7j7Dn}:7?_<8738967;.P37ڢ"17:g-7UV8)7Se -%7Bq33"7K7f7747R7 7i] 7BJW 7 75' 7tشV 777c7}y6QD)f6l6l6Tw{631v6˞3a6Ht3Z+6 36936J3+626|2=61"Z6R*6Av׵6H6 7 6=PX66)L6,T6}j_{A6WԽ6?F66ʺo6Դʫ6f.6MТ6siҜ6C,1_6;~6F1"61p6T5s6I tt6REo6Hʈm6>wb6;3Q6tWI6 4@6 +26R$6H۴H6ƴ)6´6Z$6n6_?6;U6ӠCd 6Խ:6e(ei5 p5u_5NG3u5B3r5%3W548584²5U4 545Y(4.5E4z5P4+v5˲4N54Z5^5=4]5E4d5l?3@5|Lг) 5!4N4~/w4MXRC48+x 4/4ꢵH4ţ4&ѵqt5н5 N585M%~-5V2J=5>mN5@K ]55š555J]&5S'5 ?551 K5r"5~N5թ5, F5[ 5k -5 K55H;P5kW55}t5G=55\5m5-5EB5]e5^5.!s5&Q$5'L5)YP5k,,5 /E5+15dE6tfA06.C>I6~uF6H46tK6M; 6IePr 6R2 6LU9 66W697%YD`7;-Y7X/7W7WW7wV g7`-V7ߕU:7Tʦ7RT7S7R7Raq7(Q]7/Puh7$"O7 N7HL "7K۷7BJB7H:պ7 G{7tsFUd7NE"[7Ż7\q70յ4o7ҵkm71|͵Qk7Xɵi7<ȵf7 ŵ`d7µ b7沵4 _77褵[7矕X7}TT7Puw VQ7ZaNN7vSLJ7EHG7RKpE7NeB7/K ?7dF1=7!jK[4;7E87<67ю447)h17nE-77Y)7k%7h "7(77/ 3w77+,7VU+7z 7 w[N 7TQo 7䃶yO 74I^ 7K7Z7uhFQ7l o6g<6[t6۲6qP2w6G12~6T6#66,kn6a-6h1"6Ƃ 2|6~{66Rͳ6$0m66u%6d6OɫA6ړm6P6sʴ6b6u9$6l"`6 쩯6 O6K!06w%a'6,Ş6h<^Z6îK$t6ԶMG6$^P,6VO6Xֆx6vUp6OJ,c6l*]mY6r6M6@ "L|D6 <6ja/6$6dO p62176)H6(,_6o6;ŴV6G~F6CI 6ڥ862ꕴ6Su5 5gʳj@5T.5ղ75[&B5Ӭ2i5R3ڎ5#35C35>4?5)?P4V5U4eDo5 z4E54Q5{ 5415g453F@ 5wNq5Uٴ4To4KN4w4Cٱ4R4i4ѵ4c5S 5\n5 "5;-H 159?5E$M5R/X5q$__L`5(k6f5|vE-k5np5hv5LW}5̑݁5Q5;.5&5z65T50˰5wh5%Ķy5˶{5Ѷ5;׶~5PܶK5p5ylnŠ5h趁5Lġ55U5v"~555|5iuV5s5#-b5c 15} 5 5575J5s5jY5 ?E5w5/)D5d 55ը5)5J5` 5n#|e52&[53(>5 i+h5.505$`3F5/6-%5\845p3;Z]5U=D50B@Z5BȾ5g@E5^GQ6 1J6La%6EO63Qn6 SC6]V 6h7^+7J]7d]07A\\7ք[7Z(7 Z37HY7XBa7mW7KV97Ui7 T!7/S7?R7Q7RFP$7Nľ7DMP7L{ڼ7JSo7HW%7.G7EOE72Cs޶75@47="7^;~\7}<7;7;?:֭77&˭7yD5nϫ7=4k,7M4\7L4 M7za8Ц7::~787a 9,_767e/e7d)r7$Þ7 A7mM7̖7 4ut7;՘7"7 e7 |7n3 7 7E 7 7J7>7*77m7m+k7j87rw7Oτ71>/7eH7(۵.7Oֵ~7;ٵM}7y7^rXu7/ot7 ޵>r7aص$"o7lյdm7Եck7bҵji7T͵лf7(rǵƁd7Nʵb7a7RНG^7E9[7&V7%dZR7'M|O7_|?K7 LT|H75iRE7Q̼B7N@7UqQ>7|R;7ɀKn97 yD]Z77?=47-'m17S -7Kw *7@<&7Y#7$ 7 !7^oK7-q7 Ԍ7ڴ7ٴ9P71Ҵ~ 7 7} 7_7947eC:l7P7 6 ߔ65Zͳi6Oﺳ+Z6}6ʳ.6 6YP5e~W5{p|]5|Mc5 ,ai5@*o5uۏ51ƶ57`ڮ7R>7;E]777l1{7-+Π7&_7X"e7DF(7g ڛ7ºs7Zx7/oޘ7df}7 7 q7ٔ 7ɉ O7yX7! 747-7ag7$77W7G Kυ7pߵ7_3ֵM7!͵7Tj7 ŵx|7ʵw7Եtv7 \u7Rr7zܵP p7Kڵan7_{׵l7ҵi7*7еEg7[ʵZd7)ʵb7e"a7q^7zZ7NtBX7mU7tg:xQ7LMY3M7V6I7CTsF7U,`C7U˸@7O>7uyK,G<7GBx97?677]47D17~-7ԴU*7ȴ'7_̴+%7Ѵe!7ڴc>7M9Դ$7uʴ747_e,7=7 7Oǫ 7f97\vx7WvY7f7W6!RQ6J 6UjL%6GMJ6k_X}6a6|Z6g6(r6ynU=6G616$6Y6m]ݳ+6Nmb6/12V6y:6_O=66Rw6_"6s6E:D6Z*Ĵ6X: ʮ6kW76t(6R7.(6I,66GHX6?H-6 AՊ626:$Av6c16-Jv60Ih61'c\6)ZP6 + A6&EV96.3/6?.(6?>,(6|2@6(ק6!'N6&E6($76/aE68 z6ﴯ 6%Q˴u6>6u6ӓ=56$5 ^5i >&5457}ۿ5&L2?5p D3c5h35@315r4P5J4:x5ȁ4 F5gh4!5@44F-4pyq4424Uu474y4pD'4fWy…4hO+4̲M|4t͵kl4 -4n4 14%6Č 5>$(5/Fy$5;a/5G95SqA52_؋H5ÚjN5^lvT5sd/*Z5鮇x_5,%d5ň8 i5SU3m58#9q5I'u5~dqy5Ϣ|5ˆu5P95̶g:5h[ζ8އ5+Ѷ5ֶ5 ֶ֜5׶>54ݶ58s5Az5aHp5pp57l5-5+W 5ƕ595A$-5?? R5 Tĝ5R yq5X v54{+5~5'"R5w`5Al5^lR57505bu54o55b;g5kq"t95$5F'45)25,S5W/M5115'4{5X7B5k95;n`5,>%5@5B"15WE'5޼G35 JV5Lw5N 5vFQG5S]5`7_g7f/&7zeK7d27ַcL7b7^aV7y`$t7V_7*^q>7P\7[7kZ܁7SY7Wa7LV7T0a7MS7ͱQr7O7E%N07 L/<7I7Z3GǸ7B!Dd7@I7}<7`(9X7<7Z7K77d675W7370<7;/7t07d7f7=7=*7e9M7:5nC7^/@7*]7>&*7Va#d7m7Wz7l7I7| 75T7[;7ȟ7 7EG ߓ7rC7zF7,7!7US{X7&7>i𵐊7)絊7ݖܵ7/ص/7cἐ7ŵ:7t7.ٶ={7Fv7vX,[x76\ҵv7ԵYs7dֵeq7صp7'ҵm7Rϵ?i7S̵g7͗ǵd7lb7%o`7f*dh^7]J[7f6CX7$I{9cV7zR7plN7-`FJ74TG7bV]D7:TuA7XN?7G<7>{97r9uV67y/37o"17nr.7~ܴ+7̴(7>%7rf!7}=7aD7 7t7u7唴7 7-)77 v7YzS7g7Q69|6pyjT68q6 -6Y6[6d766aR'6426F>&6/z6^y 6fG6[6a](6q696G6o 06X.6 46 ̔66L,wޱ62%G6>6yO6vKX6?6 9g63~6r# 6X66^-1{6x*r6&cXc6kn(ZW6UuqK6$n@6s&#M46L(ͭ465/=6G)69"6i5 6F3N6"*6.)q6 66fش 6剻6U$5 '5Fh5Q K5tγ/5mI5_&52kE5t$3Ǜ51351c3 5 3 ˕5<43BB5`| 4M5b24(55z4 4د44W42̸4RA/J4J=֮4cTﴃ4Y-q44bef4{FK4v;l4DZŵ4ߵ~4=41l42 K5ө~5B+s 56"55Bb+5NX35ZYu95d?5pD5}I5'ꄶsN5٘R5@LV58BY5▶p\5y9^5癶a57mc5qQx#g5鬶;uk5Ŷ1R5*Bög[5 }5 ɶm5_̶5xҶ5ٶ`595F}5YY5j-q=]5k5FKy55V595KG{5\5S.5 5[ Ɨ5 RI5Gn ә5lSL5zC/5\55ɡ5U55P=5hP5lAY5 `B5="5r$5}&U53(59+6K5up.5~1g5 4bL5\n6h585:o53=F5D?*\5Aj5 /D|5LFzR5AH57?K5MT5O5MRw5.7†l7Xk7)jR7%h_7g7fxr7Ge7ch47bז7Wa7j_i^7^7$]47[|7W9Z 7X7>2W73U{7S7ARˀ7gP7=aN7 L#f7ʓI 7F7eCuC7i?7C5 3257315C3X5;2Y5X 5l2>5E33ݜ5(3r59 4iG5̑Z4z 544N4-4'X4$J4{u_4EN4in#V4fXG|4نsi4ۙ)44:K׵QL4q+?4  443v5&M52u5w=X5Hv%5 S}+5>^05bj155%v<95xၶ <5)@5^B5.𑶚SE5o-G5U؆H5U I5|K5HM5~O5SK5nrb5z55ʶڍ5eLѶɸ5ֶ5n5:+}5a5(QY5(!$a5I2rb5]Xm5ޞEw5,:|5~5c5Ks5 5C g5O 5@$5'5 ϕ5,{ 55e5T$5/>5>>5ڣQJ57B50!5;#u5E% ]5^'%5)T5t'.5SW1-5395557[51:Y5}=5@5'C5WE5@G:d5I75NLa5ߡN5P757*q ^7|o7n7'm{7kd7aj87eh7Vg7fV774,;7e+97L67ݪ47@R07q#Ӵx,7n(7%7!za"7 n7477,7 $7'} 7s 7S菴wR 7*}7o97SQ27LX7PQ-7K(7LZ6Î#O6b[6_+pH6/U6Bg6^ 6~6f6܁6i6ĸ<6д6ZӴ6{RдP6#ݴ6Zi6e6>j6a'6'/6G% 6 E+ρ6d+56+:6 GǬ6G*6 g?a66:6O[3늚6K2oT6/62册6 Y0 6$-56G%hx6Xj6s_6%RV6EM6&|*E6j5(<6;46<8W06:sr)6N6Q#6-26y(j6#\6P2 6i 6+5)Uڴ]56ŴV5RT5ԥ>y5ry 5Au#5qj5鴤25)2.52r5Y55ZM75Yꣲ}Y5&25m 3a5ò3T5(45N44Ad4@n4+4MٲO4YƔS4Cﴤ`4O!:p4MQ4YL4N47+4ϵw4I4_J4s +45!~5`,- 5c8.5]UC5_N5XG!5 dy%5Sp(53}K+5-5Ɋ͟/5mt(15",252535J z45Z85ꅡ; >5DH5 խud5zԆ5æ5˶s55Ѷ5Ӷ5wyS5 m5!G I5w񶡈=5@5)3K5Te5d5)td5PTe5N|j5L!i5 co7s8n7~l}]7 j7XUi7fgw7e77Nd;7eb7]ab7c_&m7]7i:\I7Z7Y-7xWT7U~07( Tǹ77R;7QP77hN 7L*X7J=7ZI27[G#'74fA邲7N>+7̣;|7s977 75t76(Z757;RR7z>{j7M=<^77+"72쳧7/s7ݠ,%q7h(U\7/ =7^Lf+7;:b767ct7E(7S*[ՙ7,"7fT767, 7n `7!=7 7,7ы7v7ڵ2މ7eӵň7(͵#7^^ȵ9j7@m{7RI7rQ77g7}7}ǵ.z7vL{[v73µ9p7^j7s_k7;㮵i7[8f71娵Pc7.#`7Fݗ^7y([7͐X7ҍV7RR7i\N7b~L7'stI7kF7bwMD7Rf"B7j5Dس?7(R=7":7ĝ77l{57R?07e+79O'7Tv.1%7oLg"7FL7i7X7Os7聴U7*xԹ7Pe 77JMH7Z*f7XDG(7F7zRK47mno6 7`6jᠴk96:76TǺ6=Qͤ6rH6S<6lѠ6˺y6nĴw6aѴn6 46k6>6;F6a=6f&x6=3!6.0P6Ir))6M#=n6"Gj6\&$6+G6Z!=6Jw6YD6Z8̤6\o0 619U6k26a.o6x-6/X6L+16%!qk}6Wt!lpn6/5d6)\69d'7R6ܩ,bI6a4'[=6M9/6w0$6)}6T76 6Tʣ6$Y690s 6r ې6~@6 5?51#ߴ05us5&95jl5ybN5.5سY.52_5l5u5 I5h5SѲ5'725Ԓ3yi53"5z4gA4:N4W74>4;"4BhsnA4*OڴW4 |4KIxΎ4{04R46N4ȵ%C4W൹4I4~g444,(}5235=c 5_H@z5R.5 ]-5i;256v5ws5n5o5Ԃ~55+525>5)횶$5$]-5&=5͖ZU5^&=5@5B52E45tG5IH5K̀5lDN5ڝ7pzV77xZ7,w7u\7sYo7r7Jp=&7U}nH7ҫl,7j;7 i~7;g,7xe)\7c7Mb%7.{`7^7c][g7[?7YZAO7XG˾71WJ7Uǻ7nSa>7FRf7TPY7NOD7| O 7TMe7tG7C_7T>v70;fa78et74Ʈ7 8a797:7;^7|<7s6DL72%R7_/7*".7u*i17<%7֢07B7x-7*d7.7.7(7%f77q7^ er7 7 F7O'7߫ 7ߵa7jԵ7Dnϵ O7˵7Pǵ[)7ĵ7hzЏ7ɼ`7UQ7u=7(7 {7$/w7⸵Gr7Nn73el7Бi7*է_f7Ec7Xqa7ɒ]7ڑZ7vpX7@U78 S7AσNP7؁]M7Baz~J7i(oڮG7.bSE7jHhC7@A7i5c?7(<70l77pw37:.7MJ)7[t%7+e#7M!7kj87p5(7T7lmh7LX7uRX7ũP9 70i74}"7997N7oi6@ i7Qy6ڴӄ6]۴:6ϴ6ƺ6RQ(6G՗h(6{6WZE6\36o6o-δ$6!6*m6䴣A6eڴ667Q6J8K6Pa6A6066)p/16(6#6#de693`,6"9ܳ62;Ů6RG3 m6%W6&|*bM6-$o6M&%P6`![6#*-v6."6l#D6~t6(f6~' [6.\Q6%3H6_7=6k2?#.6"'6Pi6X5ū'64)6S 6*C q6ƧT6`(6$06C5|P5t-5Ke5]5ִR66=T65T6ѳ6 V0d5y}Ԥ5&ܴ5G&5 x1J54@v5O$4*5S44 4^4-o4}13nAS45h4&!Ä4 Z4<}4q+4p4Jh]474\ص4Lﵗ+4y4)[ 4'4 #4-x4t8C5BK5Lai5#YW.5yb 5n5E{} 5H냶 5aE 5؍n 5G 5 5g 5IH+525 ˢ)5(<5XL5)j:R5~5H5=f¶3:5˶Y/B5xʶI+5ζ35BP޶>]651c#&5UE$5r*5 oj25AH >5=+?5Ƅl,D5YF5dH5pC ;J5 i`S5 d5Np5Aw5 }5qFQz5cD^w5$Yj5Vu5rt5ߥ5|?Wn5ك5 z5X"M5;_#i5x$Z5N(Ʈ5B+#5t.fY5j0t5521354˱56#5> 9쇷5+;\5T=05 ?ص5A;5C5.F5kHeh5J5LI 5So7907O}**7{Q7گy7.w<7u7s7rL7` p 7n_7% l_77j=7^h7fȀ7d7EcH7a7a?`#7'^O7\]7[Nr7dZ7X}w7>,Wo7b{UG7SE7R&7WPH7tN7sIʑ7|E޲7cB7D$=7?g;787H77wb:'ҭ78; 7D=]7;75(727JV07-\7m+<7s*717Z8&7.A7-B|7_-f7,>7,%7@7/S7M77> 7Mפ7D N7A7~嵓p7׵F7е7I?ʵ}7lƵkb7T$Ƶ37µ07{=7؂7N87@~7{7 w7ޮȤr7{o7"^+3m7LWi7⧵df7B"c7ta7y&]7ϒrZ7HX7U7t^S7fMQ72N7A|K7hlqH7[F7ZJD7Eq+A7n/D=7(187FJ37j.7h*7edzp}'7rl5#7}y!7hij9 7q`X7 72v7[% v7vW7v鳯7 ӳ 7n7\ir79Գ67cVn7IV6~7**e6 76G6 ;6Rp6lBq6{6B*-6 6<C&6y6Ĵ66t紡Z6 ش6شyk6 |6e[h6ȹ_,6pQ?6>68NW6%2!a6s)De6.?*62{6'6R65^6`-Ŭ6"{W6j%G;6)x6G%6 }ӑ6669%.Q6*6t9-!z68k6FG]63O Q6RcF6fIT>6p5 56)X%);'6V&6g\;,6b@/6̆ +6$#6G@WY6lF\ 6?Y606Z6c(6Z 36A"6fc 6J6z6ƌ6P%6 ]6zΓ5aр5N 4 ͭ5Lz3k5;4Că5Kj.4HQ5V4b"5WLG44S43Ap4_4`񇴋4 ΢4-4%g4Ȍ40{4Ǻ:f4е4[浕744 H44T*4Vl(642F4<<4SF!4(P4[*4[gN4ЩsD>44ͩ=44>4R44}`4V5۠5>5s*5Lf.5)5xݼj#5ör-#5Ŷ35̶50׶ؤ5ʏᶚ5,궶55]F!5d )5C-5u725p65W;5 USB5v ;N5 [5df yS5* `5BPYe5N7s_5ܑW5d 'S5 I\5Mtd5rnp5!5K#5&S52 5Zt"P5]$y5('m50*-5,%s5k[/W51{5y35]5v5f75~975$<5P>x5r@ٸ5αB,5cDu5G5"UI 5"K25A7xށJ7逶7 {W7a}k7e{ 7kyf7w"7u 7xst7s]q 7Koa*7(Im 7?[k7'iCG7agϧ7n.f76dm}7<;c%7avP7}`)7_,7Ϡ]7\H7,?Z^73X7UE7R7N7vIn7yC6g7K=Cj7ݶB g7@~T7.o>Ȱ7}<7}??7ż=7R7r97p㴴47՝R/7>g+7'7JX2%7T%3s"72 7X67%B7^7B67x D73tR7ز*7;r& 7̱47x7$Po7O7 m6zxZ6'E6潳6ݲ؀6z.6p65@6Rf²16 k6))6,6W 6QzǴ6ad 64䴻6մW66W(6`Z68ku6_6F6?;6r96666M6$5̀69 6>j6?d;z޵6-(k6C$Oɫ6."n6ܐ"<6." 66t6g\)62 62w6`D#r6{dU.j6Fh^6uP6wF*G6hX?6ֲRl<6K?86nW(462"36X=26K]1v06iK6YN6wZF=66R6F)x6 6ڷ 6<~"6+t x6q5g5|59в53A5l+4Yl5[4(45bs44T4䑻3E4BݲE 4-> 4"Ⱦ04E4(\4Q"42E4F4ȵ4ݵ4JC4Jذ4 47L@4U"4d-hi47v4L@c4XqJUv4TA4\_4kؘ4"w[<44G͆'4c}4f4JPTf4 +454꬞}4KJ5 6 5NgY5㲶W5h 5罶bk 5W¶o5ںɶ5@ӶNy5>ܶ[5v5@i 5i516zP5 5Fc!59^'5f.5S85|ojD5=N5 YO5& X5Q5"C5G5tcB5@kK53yW5ec5.ts5K%5|5N5"g5au$zژ5|&_5)q5ߟ+5Y. 5}?0|5i2E5A4N56-~58 5:5=C5m@?R}5lA5ɚCܳ5E5G+051J Z574r77-57!*77'7}87~{7);y7vvD7tӞ7 r7spEW7ksn7l87{ju7\5i79gN7Uf-7eP7c7bba7`7J_67X]fۼ7ZӀ7yW&7T72NC7GL7C?7B7(C5ٲ7Y@lݱ7\?~7+D7C<7B@m7s=⟮77W757h58727V0%ީ7(.w75I+-7~)7)a7)~`7)37(֞7r'F7΁%Ι7B"–7=7 7׏70s7m7&`Z7 u7A<7ĴF7Zص}7˵H7E ĵ7h=oԇ77H#7d7pn'77^S7i}7`z7Pu7~|jq7髵n7Jgj7<]g7s1Ad7a`7#]7+ܔB\7%Y74-OX7xGoV7zS7k|+Q7nQ'M7[&yJ7SQ'G7 <5B7=<7Ջ577eh479P307e_DՏ,7(7fn%7i"7d2W 73{3͙7]37}2K7\G78ز7Ʋb7-17R\2@ 7243x7a3m17s3m7Ŝ3 56>h3Wu63;d6]?3 6!3C63A6a36%6X3e6:X2+6I6ZY66lPE6H6ߴ 6=6H566B6 6 #6f6i+65 6'A6oA6O=6:6?g; 68%65E6q,q6)J6O7$l6!O6 U6\Z&B6=260E.6Qp6y]h6fpd6w/a6Aa$V6@փHP6 h{LM6`f1I6&FKEP62T5 G6=W|E6EY3@6,vsc96]p}16g&6>c _6:W\6ĨKQ6gE6֣M6W^6pdx6#Ze?6YUQԈ!6sF%q%6w4`*6u%s/6(6N6NӴeS5*J5_95)͢375~M4u5}4Os=5444sS3?Գ4Vi3w^43=4dAB4 4>MF.4^~b4ՕR4W4H4Ե4|4E4wH4`\4[4'cS4K0ͷ4}: L4C4M46Xe4ac4Zn4dzx4K 4~v4n4H8Ƞ4!;4f4# d4]W4<4,"(4z'4崶94*m4<614'&Ƕ 4\Y϶-4L׶uA4߶14&e涽4YBr4!5i7 5 =5N5!5%-5:95(jB5E5a D5 P35g5X.5C<5I5jZS5\5E"h5Mw55y:b5I!5Pg# 45%55 (57p*(85,Q5"/$ߘ5/1c5T35v557595@;5w= 5#@15KBA5uDR5Fvf5H|57Z H7_uV7W74Z7 7ހj 7X=f7|r7z74xr7Yu$7s+7q7o<7mK7Zl7dj"&7QiP7Jh7gg7{e7]d7b977}`ڽ7')^7[27=6W7R7Ne7G7`DZ7&E7p Dβ7^@;F7G{D7ME7(AM'7=*77栭7G697b5[70o79/H7F-Ĩ7+7 \)D7Z(7>;'7%X'[7 %̟7%'7!k79Z"i7B^7 37,7$ Ga7d47dM71m~7%ﵰE7pߵO7 еU7MSƵW7}߿nj7s+7i㸵( 7ŷN7gB77&M"7ծ7e#47N'{7J䦵sv7ci]r7wW,n7Fj7ċjg7OOb7y7^7N[7翇}Y7p X7dMgW79@W7JU73kMQ7'HM7EI7/F7A7E<7IH+87X57rhO17eA-7D7*7:N&7t7bv)$7B2^e!7,37?3s7A 37;v2727 D+3"7vU37F3 7.397C4574x746'46d3,(6 s 3,6,ǧ3]613p63 6f(3 6X6>B65? 63Au6H6>ϴ[6V6I% &6"P6X^=66`!66A)^!6i7g673\62N>6EPEu6*>64;>U49 n͡4#j4h54¶)4ʵyJ4޵4Fg4Κ4 D4@4 4_*44_%4a4l=4F4PZ4U[4\fn4zq<4?|P4A3`y4 }t4{u4 %}4֔46M4M-*4Q424X24mұ48W44{4qĶ4˶4)ӶN4d۶424,Q14"g44 cI5 55h 5)qL-5\85[g=5 L:5# lg(5߫ &545+T*5 85!mF5S5HY5kd5s4 k5 ;j5Csx5h4"5;$ӗ5'5Y)#Ύ5+5-550So5}$2֓5B4k5_6 $5,{8v5:7Ԛ5]૞5-@5C[5wBE5~kGT5~7*숶7‡O{77_l17%7悶7U>7`S7@?~7{:K7fy7 w7Nthc7s78q'7o7'nu7ln74k7}j]7/Hi57g7TKf77YFdsҾ7naFx7؛^:@7Z;57!VKh7Q7rM 7IKL7[Mh7RIEk7q*Gm7NG<7mD^b7v;Cf7ZA7=B7h<7p 873 7'0Ȫ7 p.},7Ԥ+d٧7D(7e'r76$~7 #%7:">7!\ĝ7%7BJ7xД7.N7 {<7@7} {7ri_a7 37ص]7ѵ7ȵQӌ7 õc7T7幵܉7k5r7ۈ7&еk77ٯI76?ꘁ77Ǩ{7$w7OYxr7HI6n7YXj74g7sa7ۏ]7%`}[7rvvY7So7Y7Y*X7)H7=W7M:+7U7 4EQ70QM7]+H7O#aFE71B7Դ0*?7$z:7֖s777ks837=4i7@J47H4o'7N@4Ԭ7Þ37}3H73H]63|64%6G3i6'23y64a`46dz6"߳G6a6p4 6):.6P>JV6)>{6F=B\696J765 6˰/Ѧ666v* M677Cw66^6y4w6 ~di6a|c6htd6p_6ʊ]6X^6tța6GvC`6 x$[6-uRU6AcuoO67vfeI6v<6h8tu16xP(6둂bD$6 (y"6!6z6i{6jH6nI 6$'6u/*6M960A61i >6ݗ'66̴[%6.T6J&3LS5)t4H5-4 554l`54c54׳4;4U42*4J A4BR4'404LT^4ћl4+^4s@c44IVԵ4Co絑4iTu4ۏ444#=$Xy4;-n46Pd4?MZ4xxIcQ4;zSH4]nA4[hD?;4u3sp54k}/4*4U@)4ӌ.4t$;;4bu%M4b4Rw4Pܣ+{4p;M4sҮ\4n4ںX4Dn4ݷȶ謟4|϶4"׶(4>ݶ&4䶸ټ4[3|44MR4^ 4+C4Pcm5;5Qh 5h!.5754y:5, ,50 _5355YW&5150@5~jD5KG5D?5!F5Od5*\!DWz5#e5&<5]( 5}*BՈ5t,Ռ5.8g5 0>z53Ō5&5=5F<7U؏5R95j;6M5]=x5?e5#AӘ5Ce5F57$OC7-T7׈7w* 7xIe7y77Vr77}h'7}j7$zQ7sxA7lvW7qt8 7rw7YqO78pV7o7m[7l7Lk7kj(7h7UeJ7b&7_&%7Z7Uy7tQu7gOڷ7OPI7p$Nj7KTMƳ7K7H [7qFR[7ПEe7`A7?" 7(9\7x4܀71A70:/&7_+N7N(~7ؔ$7_:!ԙ7( !7 r|7f 7e%7,7x 7 P7:@7z7k7)7 x7rߵ7uյǎ7RεƝ7ŵBc7Q/7}%7k7(7Ic7ϫ7Oj7 >G7Xc>H7o|7m-0w7Δ61s71n7ؾhj7]f7I~'c7'\Z`7U,3f1^70wHt[70hqZ7iXwX7@NV7)U7b#ۚQ73wiL7^5gI7?F7״]C7z@7D<7@Oa87_47Gsٳ175Lξ,7/>/*72!y'7L3J5$7j3 7y37>3Jk7^ 4N)7H%47i':4H`7g_4C 7f$e4 7 mt4a7w4A7`4}7nJ47 37c2373j7SC3C6c|36\}26k_76x6E۳J.6{9M6 X6+6L?6Pë6h`6ܦu66拴6:6Rδ6_2ִ6$E6x6$k6,6t86ҨC6B}X6pAwɸ6=г6Ot=.6"PA6~Aŝ6uP<\6/;ȓ68=6F[6sZn6xv6 qwg6Y:|=]6:`6 ]6vV]X64ϐ$Y6$1Z6 qW6ٖoU6WR6"AN6mʃI6`dj<6u216w+&6nh!6'z6!66C [66D62;$6۰+6fZ86;ğB66[G646H6Sɴ:6?ͳX#60.4H 6U4 5ky4В5 4Ac5`N4v4/4o44h3 4B𳒷4l\ܨ4T\o4$4Od?4vxj4Ί4ס4[Ŷ7K41ɵ,4Uܵ4Qow4f4c hU4]aG4'94&,4* 049 4@B3K 4K3XUg83`_3Gjzf3et3K~3& 3)J3-3%(3`k( 4LN4W.4<4yH4I)R4@ⷶ^\4V~bg4-aŶt4l[̶4;Ӷm49ٶ4(*64Nʤ4}`W4,48}a4 k4]55!5|.5L#ߦ65[ [85+] "/5y14b 5$5c756@56@5xfA5E5foN5>ri5#!]y55#!5V%?Y5w'65)ࣁ5X+ʁ5m-85Q/^5l1f53955b5F8.,5{:"ˉ5,<{5B>85Z@5kvB^֐5NDt5r7(l7^p.7t#7Љ:7xTB7Ɯ77Z)Q7=787 a,d7Q~175 |$7yf7 xd7]v^_7Qt7sC7NzrR7qq}W7>hp7@oF7mF 7k|7if7-f7c7`7lc]׺7DW|_7SU޸7T"7`ITX7ÄT7R7N 7KN7 H7}Cx78d?7]9\79471e7;/77+7'=7,x!.k77)7bǟ7B7X 7ƒ77:?7(oIk7ϽB7bﵸC7'~<7۵ː7۵hː7'ٵ7ϵ17|D7{f7.^!ߋ7>nJ7巵7yU7d476e7#۠7Wb7煋@|7 x7*s7^zdo7쉂Ij7{f7b(vd7lA 'b7 1Sa7ج"DZ_7x"\7#/Y7? Y7SU7ӎbQ7;K7#QI76ϴF7D77A7D!>7ڵNS:7u6k@Լ6i):.α686$@AK6SCs6#HAӔ6Q6ZSQ6]>6g(,{6Xgq6.Pe6A_6[6ITW6`\7N6לQ67[~T6觵Pa6}A\6oS6mIG6Z=6T16p'6uc63q65䚵L6#t6ZRl 6%GJ646}U6ŵU6&õ&6vƹޥ16`Ũ];67n1B6HAJB6!66u#ӎ!6-36]4Q5CE455/N4ɘ 5f4:e4|+v44'j41rs4Vڂ4Ӕ4Z424;A8•4 g4䆵4ݱSG4Vs4xľf`4;еEL4V84T&4=el4X 4C3 s3)3 23;|3|PDԾR3#M/3W|3aJ2 k32Ukut2/a2.a骟2ojY2ˍ3.R3]3X4n4StM5K5ZH!5 \-5 |35 Ⱥ*5VJ 5K"5F5U 05HE85^~:5fkA5Td=J5ST5Bt5s y5"y5Ǚ$w5&u5("t5*/es5ȟ,+s5.lt50,v52x5m4z5M62d}5815:1Ɓ55FAZ5"C5M7 (O7Ҏ 7x i77β!7H|7ۇ7~o27.7禃7RH77" 7A}n7{ 7yK7Ix17v17u7tbM7sh7r}7-q7o_M7[mȱ7PjV@7f.7ژc|V7._]7\7dzZ[v7X 7U7 TC7HQ>7?OW7?O7Kx7CU-7z? 7i&:G7= 7QI7@+37/|ժ7+87'Ч77 #֥77%7a7H77B 47^%g76;7n77xF7ҵDŽ7~ĵ7Ӛ77籵-777Ȍ7c7ي7Ҩ)7mtm7pn7E_C 7m7C7I|7Gex7hs7|xo7Noj7Dazg7WiQԞf7od2 c7)`6a7 S_7+]\7(# Z7'?Y7>ϴRU7j]Ӵ}Q7\δM7&#,*J7&0F7MBHD7"A7 ?›>7緰nH;7t2c77137CQ.7N,7uZ)7pk2j$%73|!7|O4 <7["B47_4o7lt474E74t 7/q4 7*4s7ӥ4h7܌47Ȓ4r7($4H7!d47b<4"w7V )47j"4 73Z6pۯ 6%6޳f.6k=ɳW6u/=6-6lyx {C41TS4Ҵ^4 "d4p_2Bc4V߂\4 {MP4w@4&W.44Xŵ4׵63赩ֿ33 o3A,3v22"M2B*6m3X<7Ų)FBgO-'aJY @bnRl~b_Ċvi"gsTӉ/ˎU`diZ?%/Y2⤶"J2voh23; aj3ѳ'32Pu3Ķ3$˶43%Ҷ&4kض,4×޶hA4Y4gav47΍4C44 74j k5R5lI5E '5ȸ ,&5J ;?515 +-5505U]:5E=5@D5c,Q5ue5J k5`!6k5#yh5%e5'Xc5)yb5w+a5-m-qJb5Ee/c5_1_e5]3g5+^5,j5b7]l5Mi9o5s;s5؁=vTv5̓?y5A92}5*77F>[7؏H7ld7F7_7 h7˕7|"t7,N7W0717́7wZ737P}:7¥{R7^4z7xC7w*A7rw%75v}7(u7)sF7Tqj7am7Ai~7e/27aÊ7^7]K7|[*7JXW7@W7'R7iP7TN77LMt7ABS7@O 7g= b78r7lc4A97c067\-7%E7/{k#7Q7k777o7T7IN}7"A՗7A86O72耕7_Z7nڵ077ȵc7ב7$.7n87l7d #7x?@7픵7zS~ދ7ta7n7]镵J7@5:7Œ;v7[Ԇ7W-}|77zx7pms7eGoNPo7b]8k72E4l7G k7c7M(V`7? MP^7CE\7dٴfAZ7iAĴX7/V|U7d4-27E4/7&l4Q77)47B357"3sF7ͫ2p7B16e6DeJ866#۲и6Wr6<6326^= 6Wk6m66OHj 6QsP6+a76F a&6]6?)W6Tas6|g6Y7@c6}[[6q90T6 V6>JP6zG6:?A6mM;6ȵV76ӵuE76ݵ26dۖ"6⵹6޵? 6׵t> 6Gе6ʵB6ȵv5ʵ5˵K58˵ 5Nϵ5Oܵ6w絨w6RD赙S 6->(6QԵ66ȣ@!6Q6>I6F64m3ԃ3="3Vӳ3^xo ]4[4g4N":+4Db 4gL460733!^3mk3ʵf3G۵9K2L|J0qS ܴ-s )NJ$My#ꟳ~,p5 ѳ>q䳱GH5QuZx+YdL7nu +w 〶)څ슶{j)|ȳ|>ĩQ I14j S4^@~4]4 W4 p4A4@X 5J2F5g, 5h S&5Z -15J265Y85fGS85rR95U95ZV=5I'F5ZQ5bV5!BW5"AU5f$ԾR5-z&pP5^Z(dO5@*SO5m*,nO5.ɊP5 0<2R52DT5/3PV5<5IY5(7B\5:_5 <=b5n>Ze5*@h57Fj77.B*7ːY7\Pm7ЍD7-O7Ί7PB]7ڇT7o)7|~7ǃp7AI72of7_f,7~~Ϛ7J} 7P{7z87y7X y77rxJ)7Zw17Mux7`p K7k~7f7bb?a7fy_7]Ż7@[Ϻ7Z7\XN7S7܀R7%P7ZNб7_I7F7[ANu79B̯7x37L,(7/'(B7 \|7Ȧ77 7se7[M7[ ܟ7 7 sF7qÐ7k7J7l7ܵ$7eֵv7ĵ,77l7u7!ڎ7N̎>97^SfҌ7~叵Hы7k57߇7ň^7 }7]47ƅB7P}0}7moI3z7c v7\p7AyJl75.9^h7O0gje7 a7r 9^_7H]7g!\7^´Z79X7ࡴU7poS7Ɉ4Q7Ϩ92L7v \G7onE7c C7\@7?g;3G =7487i|(447s/4.7+4~=*7~4^&7^#42$7N4!7yo4 72S4Y747)474M7\E42374 7U4r 7n4J 74 74 7x4_7>4 7n4737֓}3(72 61_x262 626C0(68 6b {6d%3+6 u3b66NDy6a6~+/66?\6y746CDp76+\'6ݴ6"TH.6 z6ɑx,60~6A7E6¸K6O<6MOI6ֳR͍6UE6Yaxy6u9gŸj6),%\6 PW6JNTT6R6T?L6Ӹ"B6ͮʊ86;/6תҵ/#6LY޵l"67636*C6 I5<]&5v_5W,5l&5gD5y#^5uP$54~ 505`5`55i<65i6T6͵# 6Ӳ6f$ 6!h#6-){5ⴖ5CVP5];z5p`08/5O4}4nϷ3>S12:Hы2a7f#03FbX3ߴKk39g31O3MSZ&3t+M2R=21E'J1òe-Tεy7Hd=ƳLp ~V^1@%"%/B/-N:6D @@MTLItS©RW.\ Ye"ZoYy[V恶B{OI BcE!V8ӑB)qUxj, EWթ ӳ55K=1Mö;ʤFʶ_g1>ж2ֶ3O3ܶ3F3y 4v040^4o4{4LA4oU'4NSI5*5= kX5as o+5 25q:55335^05/D/505 g55b*<5-?5x@5Ы!ap?5Ss#=5B%^<5'<;5 (S;5*;5D,<5.>50<@52DB5-4TE56 H5682J5!:M5< !Q5!>mT5b7VK71b7i7C8n7,7?,,7I77[H78j7? 7:0hm7]Ӆ{7<<7Ks7#J 7IҌ77q~7|47e{72{7ozϗ7zB7yy7iu7m@7Phtb7Eb؎7^P 7[ 7o&Z#7}[mֺ7J\C7Xlض71V,}7Q7NBM37I;7FaT7;7˔1;}7*57%P7!7p,7T7٬ 7k[Π7U7\ 7O7557$7ܢ#7Y7 7޵7K͔77.gR7[S7u{77F7ӡxS7\t77o;7Dn7g7g73p>7Tr 7dl{)7]z~7[k{7 &QGx7P^8eyt7.V4p7P#`il72"f7UAc74j?a7RNo_7e]7״k[7dY7䶕l&V7N T7brQ7bM7k2R3I7=F7qy.AD7 x1A7+ =7B3779>427G4.74y*7Ҝ4W'74$74-!7gj47467c4x7A14J:7Ԯ47\474dk 74i 7t4b7 ,47d4n748$7l4a74e7wu47 N4747\$4|%6`4g6Ϲ 4|{6i36i36ϵ34~6!f46t:46:αN36 /Ѳ6SzL2\6c726'66x ݳT6_6@}6z6Ѯô"6'&6>W6ٳ6>)6>p; ۦ6CG6Gm6?D6v?O6g< T6bDm6 XI[6(,{M6A\G6򳥵`JH6궵F6?Eɵ:6eϵ!6@ڵ{$6!6!- 616Ywx6J61&55t߰5XX5i5_55A5!5/ r5 45 ѓ5TMO5^55 D5Cڵ!5Lµ55#5 X{)5$v5M85I:w5675բH 5(4|"4-22\峩etTB8U! ٞB3?=Vk^K.&19!@)Zҵ/($N#92JG${Z] ҃iޞMwp"63O&DC/b팴'P82wA!듴#J7ʕ,T]어g#`q`{#T7(œ|;~i(o*_򶟶N񥶩M=G%*3dz2ƶ̶V@Ҷ=ضUC13߶3^d嶷{3;ua{3fF 47:4OTq4j p4F\R4Qo4~42 5p _ 5 5) #5s"5p 5XS5A5!51%5'5#i{(5Y pE(5 "'53#&5A%&5ݓ'&5o)'5P+ (5?7-'o*5"/:e,51.5*3G155C35i765`9v956 ;m<56=?577 .7󹘶78=7OU7&ȶ7.7Mv7mu%7捶'77 ]c73ڊ7`8_7y7e07h0u7j⃶R77p7R7ǥ~-7*|7{7X{,7|`7[ B_7x]7V\Z7 (!E/V7L6TS7e#Q7i9M7b>I7z\vF7QeZ4D7yxKWA79г <7X= 3 67E4~17٨4-7<4*7Q47K'74$7<4_!7^4S7ǵ4&74A7437H6~z6t$6NqMb6;16F6x6w-6;RO6O63cæ6( 63ܛ6=;"x6MT6Yc60'u6R:]6^PyXK6rb<6!Tv76ڢ?6OA6"ֵ y:6"Q޵z)6DE6`=6`_K6Gx5!P5,58s555G#55u C}5 5p 5Fc553)555e 5 j5_f t58^5;5Nvk5sѵ®5[ -C58U 55킵5Tgޮ5χ*;5#n t5\T۴v>5 54gV~uCl4qZ3j-?s*&SmOCѴ^>p'h`G&fQH3LfAԫQߣ>b:swĵյarQ}N&6^ $PDxγ'󘸴o09c_B(@LU2_iܾ t6b~18 .<ӏFdƛd푴E爴As}d gOo \5¶M*Yȶ+ζųԶ}۶c,w-U?AA2RK'm_3Qq3?P4uH44"4q.4U4Q4JS y5D u 5S|W 5= 5Ռ 5p3" 5VH0 5Y; 5@5M5>5g 5ux"5 H$,5$&k5&'H51)&5G+45-F5 /5~1T5 v3R5r5J!5r7=$5x9+'5;*5D7iМr7Kw7Ù76=?77$b7zd7㑶7M!(77E,7cS7(7J'7 i77/3|7;7Kv7 |7c1}71z7*5y7|x7>y7=q|߳7nD7u:gsX7 `97[7W 7pTݷ7C^Q7˜Mb#7D!I%7r GT7Dz!7`@7Y;.7678//7&P'7u777!/7#K7 ʨ7Bt7 g7}㶤7I!7{Q71 7ܜ7ٵQȚ7'Mеj7P>Ƶ咗7p崵7>76T7F@ƒ7\y7B^b7 Fwΐ767=)7[7ڝ"!7xW7o7 57_.7G 7S7S1㴷57.nA7 |7:x7 UNt7m*~vp7y(0l7t]xg7}VkZd7جWXa79_7dxx^7G6yZ72V7?g;#S7g^$P7#g*2M7$iI7B޲=E7 IJB7. 6>797l3m47j4y07k4,7r4)74'7U'4b!$7v4-F!74mE7ǝ474/7o4Di74M714J7C49A 7c4m" 7:4y7c47T474(7& 47ݸ4L734o7k4-74J684l6|46r36:~6k6z6ߣj-60]6y2Ӳ6ϥ364C6t3B6ɱ6г9S66#9L66'k;6˰6@Ӵ 6崜6{ON6G6S` ۏ6 t)36ݴ6δP6@z6g60 KT6`IZD6gg756v.6 w,6Pȵ<16*\ߵB26|ڵk&6͡䵼6<ﵓ~ 6n6q5 ]5#X-5]'}5.Ǥ5{J55 Q5 5-eN5 d5p<]5Ws05?!59o 55nl5^5 G5.55ߵ75ȵ5755 5 Yk56Pfr5b:E5a5w49ƴ4z-4s>-35SsNIbقX Uj . ~M4IYm ]ˀE5?tTl~ĝƵ<>,׵huȴϴh.ִl ۴BGTy(/1,:zTD@LMWsQ@ay#l-lvLuܴ5մ䋶ʹ߿Ŵė^Y띶Q(EwmH#۰fᑴMaloĶOUʶa2iж-ֶqm>ܶ=r趠Xٲ ("2-R3c3[4 4R4t4D)4ycS4~ J4sU f4Z 4rt4y49F4$4 o4:4<{E4L84f4 fF4a"4s$04f&4C(p4Q%*O5& ,5-059/561- 53 5p55!7F5A95h7Pql7睶_7NY7ǚ*71܎7/(70lU7b7ƒ7* 77 TK7+]}77F#7@e7J7@OT7|7ĥ7wsҕ7n|71jg7PH7n4P7O+wm7P7Ӎ7V d7/S07UD7kIδĈ7ڴ 7OǴ\7Q7(X7LpG7:|73 2i t73p7l7)i77Xce7Aw`7@A_7_2TR]7`3Y738NU7]3Q7Dx3ҧO7h2L7V@3G7*3C7y3 @7 d3:7M37677I4]374Z/7 #4Je,724)7u4E'7y?4$7F4!74~7Ο4k174fU7$4{7B574"7dR5|P 7Cb5!W 7G5z735C75!75T78!5P7W57L4&7D4746z464<6cPo4z6o3+65o2Dg6L@d663Qn6?g3V6:36x 4|6w496 3F6Z6@D60ͳ64d66h6´-6ybдج6Ҵ2¤6QѴ*6Zδv66jBE6-嶴x6iдCk6)I\6E~K68 <6ݕ\],67 6aέ6l"6/յy$6ܵ66 6J\T 6![6. 5 55v5N 5$ 5R 5,`5ã53F|D51R5$EɆ5"#|53%qH5$wv5'"=55/A5"52S 5rw5;5D5z׵#5Xܶ5\b,50j5W+5#b/ds5D7MM5@,0'52sP_5›4d4(u4qմ>1˴XtôlR忴p`{tgC\e33Ŵ5eRʴfqkдU;F״j޴|h崈7Aȵ=صxbaaicf! ~) 2Qm [< E/ Oj YH- 'd.p n{$7ry2C4"+4$l4h& 4S(4 k*M4V,4G.r48=0472`j464)4:6'04D8T5 v77I77b7ɛ}7-7y9H7E7M^7w77\PE7g772 7] 7qty7r7Tl7 7x}7~x!-7Qs736nm7j67iQ7neB%7^`7)9\674wWQQ7(R7N"*79I?7B7X=&7s6x7([1VP7/7.07-h 7F)7E%:7 `47~7EPx7#*t7A 7#<ٵ7T#7?77wⵚ7.ε7>͵J7"ٝ7J䦵07 7탵7(g_47}Zϖ7T7GdՔ78:7+8q7yH|7 7I7洶7̴X7H7  37ހ77!xg7y4҃7jY7^Ǧ7l{Wx7j!4sm7g*4k7S4yh7bS4dwi73e74;`7MP4]7ɛU4/A[7`#4W7D%46S7w_4@bO75O4 N7.4I7Iq^4uE7{43A7ZA4<7a4.:7e4w67Q4}37#m4aH074d^-7L4+7V42a(74n%7m45s"7R4]7647o4J7X57574?7w4T 7d}5\ 7܄57*575 75-17 5&Y73447L47宕4:7vL46%4^6C-46 ӷ4~6! 4so6 36ҹ3ҟ6IX4!6+"4s6P4>6G3 63+65E366ᙳ6µ(6Y0B?6`-6\!R6U86.֩6R á6<[И61Gn5F6QN6g&aX6P146 n6N]69XK6+H% ;6ûP+60] 6帚6@Q6̵6k۵-66g6|65T 3;5b 59#b5;15!5L5M!N5K5Iѷ5"15H&05S(65T(-"5,%[5ϳ!{F5r<W5cSк5Ls5:554z5sѵd85W^N5to5jΖ䛋5Gw5{nV5'YU`_55Z@b53 /X4_8!4(65Y4 G3]YN m YE;Z7wOU#6zeU>'t~ A 5*ɵ[ڵ~I2$r!x"N! $*$DM4$=$G%#JQ!\ߜf0aqd|3փOT_ ] ^DH3򆮶G۴޴H̴.s`έǶ$띴ZͶ4Ӷ'}eٶɳ_2߶kA{"QtJ*J8ñ{Z 3f3{3Q#4T?4> /U4}t ̥d4&h?`p4]z4 P4f<ۅ4[!44à44W/4[44!톟4`#I4$I4<&4,(j 4*tǴ4~,vù4.p40a4 2F4̎4{R464;]7\Ȥ>75F4797|47ko7͜67v,9=7㈙t7◶ 78q7L,7FҒ B7!7>7_Y{7-[7J?|7`7o7Q7~07%y7-qs7nW7i7_f~7?"c7_au7ɣZ.7U57wQj7K& 7+FY7>7S87E17,l72* 70(*}7&t75"a|7%07X7V77u!7Ƶ%7Le7ͥ 7⮵QU77i#7P.g7 b77Z7:T 7c|IZ7 7 Ч7P7;R717hU7͓7 I7U^75Ə7ϴ7󂮴Ջ7v 7UCŅ7u2:T7*37047$4Ʌ7]g04W|7b\o4t7ѱ4q7b4cm7.4mi74~f7w4e7K4`74\7W4^X7n4V7>84qS7$4 O764qL74 J7K4E7 5yB7 5F?75<7^ 53+:7:5Φ77_h5 47427TK4LX/7y4,7L4A)74&7j4x#7YV4 7^4 7b47 47e\4^7O47~4| 7 5 7}5 7l'5=l757|4P74bR7eÂ4Q7P4C7B*a4<74v*6Κ4`624'6B+4D$6iV4N6?.47B6-3!s673֎6:3.86)3e6A3x{63 6 Qj3Mo6P362g56o16ɳ6'{D6^F06'6⤆6{(6SVS6%̐6zdzL6Óȝ6>J6M٫3u6m@~b6\ӴݓP6v@6-HA167z%6(6cz6ȵ[6Y(ڵ6E"v6&p6s\6485o 555055ӵ5xR59t 5#q5['FΒ5)*r5~+55M+y25 ):]52%45E s5չ5527 5d'5ҙ5ു5ε15㖻-5_ 5V陵;5wkxb5'}a|D5U.h^H&5 VW;5@G 4D=;Fb4۾17@4's*<3%,M!tWCFG'5b8!BWq2#ǔ%T"(S*橵Q- /BuʵE2'۵~|4)쵐|6}TB8m 9;̒;"x>m;?cQ:I8S6k^X4,ib1T+t\-Ch)sɦ%Uf!8Uujmpã j;O'ռ1ڴ< öɴ2ɶ|;϶$նGZڶ?rrx/:YP8#@ٳXW\Nֲ%f>2t93d33ߦ m33 _v42Y?4|q4[#(4@14 ;4vC4EL4nT44\4jd4I!Xm4R,#u4w%U~4&(4(4*8-4,.4.r40W42 44\c4E7|7楶:!7lNL7O7.0b7up7ҝC47,<7⁚,7fјm77ThA777s7pS73*s7po7"8t7p`7]z|7Czt7u7 moM7ڎj7"f[7ӎb7Y^Y7OY 7HU7aO7a*J?7C#?7)!Ř767]ٴ皞7Sɴ7s$&7Q7m -7X;b/7vb'77E85<7ʶ/5Dy:7|"5{6875157 5VM3745Z07D4-74*71p4,'7>4>$74J!7v4j 7474747T4Ȧ747A4 7x4 74274 c7϶47_4D7k<4c774q7847d(4pV6qF47A6Q1^4v67k46.P4Fr64 z6[36:36X26E͍26ȴ2j626K3@6HG3LH6?2g6X0m6x a6! 68]6Tګ6 [6GK 6)6-6vZ6#96# 6x!G{6#oi6|ʹYHX6Q#4H6zAF096zx`.61"&6߮ 6;ŵ]96_ٵ46eA6me 66"o62 G5;YA5Vd585,5H5tꤼ5"5%B_5F(}5&+O5-%5.:5:.W|5Z,5)(RD5#5&%5h}DŽ5qETJ5vV5/53{5ݵ@*5̵55wD5(וּ^|5U8p5;U5fƇ0O95<}>$5Hm5`4Vv4^N 24Hӄ3,Cӌ9S@;V>䈴\=[´8=sE=>*9DJ@WB`v Dض~)FnwRHuBqJqL|@˵GNBܵORYZQRTS!_T+LT#S?-q$SQ7Q6YA+PKsNVtKx`wHkRDv@4< 7c2b-'aAYh!s謫.屶2 dL xqĶX洡zʶdִ`ж]ƴ,ֶ?=۶kpdez߉(FKrPO"*r&óƁղB),#2q ~b2u n,3?v b3a]3xH3,l3Xr3i%3z3m4P 4r4uY!d4?C#u%40%'~/4"'Ϭ94)4D4+$O4~-wZ4U/jf41Cr4)3;4074e7e7}7e 7ƣW7%_77-7Eמ7(7qk77ޗB777{ݑՐ771$7&7cۇz7S7ꁶ}7T}7w7gqC7DqlS7ϳg&F7)*cX7^>7Yx7T;78%OK7C(Ipǿ76B{ 7:;Y7S4׺7->7@'X7"7#17Ĩ0R7O!<7ڳ7Jf"7kǵr17ϭeG7s}@7^N j7x2c7'Z7 7Ö Pa7gִp~7Bᣢ787BNb7ҽ7+71R7>?'s7\8K7,i7t4@7e73]}!@7}y7C\7%7Zqԫ7B27l477An4Ů71v4p7M4ޫ}7 5Qz7ؖ5#v7Ȫ%5q7 525Zn785 pk7x95uh7N:5te7<5Qb7 ?5%^7E5[7LL5W7*P5)T7O5IQ7Q5ZM7"|U5K7V5H7,X5ED7Z5B7aZ5m?7T5*K=7q I5s ;7fA:587+567u5478 5l17Y4.74+7"4(7x:4%74"7474pq74`7F4b74-7P474 7Ӡ4M 7]4/1 74z!74]7A47373G7^>V3_ 7H36˺36b36P[3Q63 6Lc3'6F26- 6"4Y6 6~\6MM޲>6䶕U6JmER6ߡk6Q>.Ԫ6v&P6U= F6a'ܭ6Q=}6kB0t6!97|Y65 *76S61泫[6.Ga6M6\}5NF6Ȁup6.ݴ`6bQ6ID61z!86T.L/6zJ(6ĵ2!6Gٵ6ެ686q6U 6t.5,5o5S>5V{!h5Ó$*5'5`*+k5Wo-T5/ݪ5Qe1Y<51l/5<1 52*/5+Iչ5Nh'5W"5%5^ER#5hYk5aIع5B565yܵk5͵5.5ֱs5o˥g5"2uM5fߑ 25@5RPO4m{z4rX?4k,4[fSy3n_bC̘_ ] %\E´\Js0]s^+u91_*W`ov5b'劵cdeު#gCGHh̵i ݵNjkill# lIflƤ#+l6%*k.vi9 gv;CeMbaX_Lc;\on1X,yS]N WI!e\D*>S8wР21G#*!#"L2Au1fN Ŷ)i˶HѶ*cֶ|ZմOܶƴD\pnէx2̆ ݸkMI=JV^U+py{곂|iDwIɗm k` #/4P <I&g B1Wy2Z2qs3VR63%`]3eyƂ3g!c37Y#3N%3WH'S3E)[ 3+G+#04L-R4V/44Af1'4Q7h7Ue7o7,7{QM7ؤ72^'7uF7ӟ7/k7L7n E7y7bg!772"7rՑ 7MT7N7﹉e7괆H7_7gd7ӈz[7߀t77n7Бi67~d7o_K&7=Z 7:TZ7SN7Hp7B7z:*_7Ĭ37,ݩ7K%77Wɷ7\׶7 /[7`l76ϵ(ܲ7u#7An7cN7?7촳k7#777Gǒ0֨7J@A;7>y7m"37;47r4Y74ܕ4ꪞ7Η4W74G7@v4q7ъ44jM7n3$77֚2j7|4Rߓ7!F7³k7Վ7>ٌ7O&37c44$7l4x7M4,74;7N5<~7(h*5z7853v7I.E5Yr7CxO5|6o7"zU5"l7hX5pi7̓Z5 f7\5b7Y|`5k_7Ve5[7j5X7'n5!\U7p5+R7r5O7Lu5sK7y;v5 I7v5*F7u5SC7q5@70i5j>7[5;'<7 tK5m97r9577Q&5H57z5275/74,-7v4A*7BC4 A'7'p46$7_4-!764k-74974^7&ٝ47n4 7<4š74[74* 7V4 7h 47Ó3N7%357G47uw77>S>60*D6rnp67OH6V:6"496`R6ȳ6ӳ6̳K6qy6F6Fpf6ga6Y}6ﳹ6dt6),6tX<@b6@m6:Z 6|,H6%6֓6$[ 6Bf66보4w6oKi6'%e[6Q N6=C6痵S96#06Aŵ.)6ٵ."66'6\65  6!6SL5t5A"51%5)w5;,5/f5J1R53=54彷5Q.5s5B^4J5a2o5.F/5*+M55&5 5Jß55y \5%Q5tWܱ5)5m޵h5jеŔ5$ĵn5J{5'jb55MI5"/5~15ku4a4ۇb4Kʄٿ,4ki~3X:~#/}oN|5`|26||8}5uW~qv6@/ỵq̵cR+޵ ӂ{؂F 篂 PJNr^&N瀵0:1h}1E;zOewZμsQeXo> q'k|?Lfba[qU kOzH=9AyTcV:5p2g+V*9!aFƶw[MQ̶0[ xѶ%׶2ݶf$崗ⶺִ(ƴe;g=A)H͗V7\vo#]?3 kF*:%2: 5 , OJ :t注̳a-P6Te>;žUUβssx!zŽr#h1;p%72\q'2v)d%3~+W3 -K3-/3proj-9.6.0/data/tests/egm96_15_downsampled.gtx000664 001754 001755 00000772250 14764566077 021066 0ustar00e012349e012349000000 000000 VgIft?[[?hW)WXZ\_beinmsyWl''+ #"R/)<I!V*c,p|öי>2y AX/]|1zS+5lV?& 7?sQ,Ug!c7| ۅzI(]5yC6 03h0쌎V!aeU%:BuNM}'jQ8 mT>*nWha=Ħ@账A训諚諄V_讐?販y Z躁軒輎vKvq'Ż~ y%!q}>b$c9'l/8BKUr_itdr镱鬬]) #/b:FbQ\gmq|/ꏸb겂<{9J`Zox{xpaM5&SD%j:h: Kߋ5_z6n 컋dB4TK1Y鏉ti˘(䂮w1w?Bࠐuk1Y݈*';܈KOژ+qD(G@Vhu7znw3jsSb1}̷ۊg>]ڍ+h\،'eǏn֒\0MN"܊s]C|վ<՜&stDֱԙDXѽӍ)H=҄G џOk9 bٵЪ[zJgϲ|E Η\!ͲP'0LҠaث@fuͲB.Γ(DϢd 'HчAқ#0Cӓ'Hlԯe.lZթ6%f֨8O׆#ث0C؍+Wfı7Aڮ+۫0 ܷBzϋ^߀o7aɊ[;H| \' ?9?Rٰ` h=l6iBa(kQ;MfbV /mlPR [>L/ޓ#[e(ߣ6MVw$nC^us qTaFxg_>Zr\,~4Gjq ?\.Kcg@'" A{]0Dϝ0$N-_qc[GL'f7E.~M)dXmy1$M!dqn SQL 3mXw/ngB."&%v_[ cS#P!u^ v.jkgY !EHgvPuJkc,dy }s dUw 5 ; k |  2D'8vuD Dac^c @+ FsQƥa J79eb+HRuXF@[Jg\ɘA 8Фզ22ھWE4CTPg6C^Y2(`GX/))  x^g@fU cTvJG@} " P. t D T w Q J۸4m^ZWRa$Pܘ>,f"Z`WM A> 0? nx<mz{W J Z8;fP&k;@ F3 v~/XdaAx   D MN 2r66/ע ;De $[w4>&ixOuJ2} 9H)0[TCf~b5|yq#Q S!֦'Ji9ٝ@܌lM b8ӷcNc"˶:`ޔٶTNk΀~ „oa9;[1':„SLÌjÞ@<ĸ6A2t  f90my4&,| [?`,YQD9+ƻ8 #5 "JYNz@W!9A~vzv*rcFomҽm%mA2m nxmlbj2.f>bMJ]HXRfNI9FB@P=;69 7T55 45679[;Vy=N?@ABC1D PDy-D E_EE6FGrH^IdJ)KCMNkOWQySU7X |Z]a,di1emrxR}jEՠ'>Z|#A2>Eu%oBp%\_mx̏Ϡҷ{l`Q,j'Qy[oePuJ>7q 6P ? L % Q OW.0]%dS>r=gK*e1{(,qưYt1gp,_ % ?@'gjN.|({&Vp5&y*̘-/U#/.z-y+*Y))z*n^+;,z,-!,,,+W+M+\++,-4.8/0Iy0o0/,-@,:*p(m&|%E#܊"!R  6@&n|RG=z4>|3\Af K U p ' + zvuLX˸0-LR7l& 8) <ܐҸ,Bslݨ>v! 0*/{HcpK\o*&՟ЏŜ8=R*T?%H~c˭΁/<@p }1v>aĉ?OZPv]CL~x"i 3M4d܅DO*@Qmf -eu6{|Nxusbjrܑsxs't^tEWœQi/LJCJs1KL M|-L+aHoB143#P3$4-4&4 h44]4o5~6n6EX6755o44u4d4~04444n4ĭ4 4:4R4W32ޜ1i0ed/-- V,]+ѥ+C*)p('z'r&|& z%Z%2B$#J"&!u3 g@F{N&)]?\JK)jp U [f83iP;Vaeh<+hs<徙婪!<ġXS缴礊`?ߪܳ>ԫЌͼʵ6#,ŵƼM˻#B;c]8X 913>ZkprqyAlL;Bu"FCUNA}yvqWl/e_tYYVSS5S_SSORnQPPPRUOX|[;\\[ZXlUFROLH.D@>;T8n66h7I9!9X7J2I)&vH"Űe`0p~zmyȖ}\vuL0[^ͤӣ#ՊҹMδOf`n uۗM}j:>o]RyJ}]׮"e"tнDmm zwm$%D,3ћ:AՖI P Xa"jqsW|<#xv^'Z+:]ک憭te-Qg  2Ū,2Z͖gF2gX,U_ [Y.Gz_B1>]ț y G U U[ qPpT2 $`'f)+A+, ],-.ڕ0fM:u;;<r<=;=>k>?:h?_?\?@?>>.>>0>tW>X>P<>]>p&>h>!F=zqyVJ<HI 5|;2630Pw/b./o[/0E0k0 1?3L6x8:o^:9\7h30z-)+3*)(=6%!vz#Q<%U; 09#г6]TWľ桿,-׾Ґ w&S6$"ÿiW2Lg'm!a2.B!Q]Ksdd_|VJ>"2"<ԯhP 󿔼q?a眿y(phړHLr,)) ЈMZ7΂ܽ,K7\hhKb/Le }QhLXWp+2 $( 0J]=]KdyZ.iWxQE-ό17a pW$a_q+FoגUk^x #GTÙ@u`Gcq!$>&޺(A))),R((5 ( ('('Ç':b&7%u$#Gd!XTh4$$"&)6+-=.10Lj1R245 5"67 8P8,9y9::[C"DEF=FZFsG/GקHOI I%H|HsH GGG_FFa EEGE SEE QDID_CuB9@?>X3=Z<~;T::/9l8%7ӵ66432k600.,*(~'`p&n%%$={#Gv"% GFqZ~?\  e ij/} љ(/) Wb.O杵XLYGE}֙^pK74ܭSjJv%t:Jݸ+&'*ӝ!͒h˚7fŊA‡h.%d.38#weʜ%ʠuȘUPAItEzB ;Scz=){Y'2y+V ev.\i ]%THNwHKύJYHE6W@~;<8Uu6584x{2.*Ӥ'J&I%;& %$|" *+m ][*qNEi-' A!:b DK$,"S=pC?N??ؓ@?k? ?g???`?5.?>8>ңk>鎜??*<?3?%? c>Z,>g? ;?6?e??=?֡?@ 8@@/@77n@7(@@2y@+)@$Jo@g@0@@~@3@*Q@-p@=a@NM@`@p(@x%@t>~@_3@<@+T@AEBfCDCOsC(hB.B=B BoGB?BWBހM"MNRNOO$OAfOZORTO NMvMMkDMtgM|MN NH~NtNw.NRN&NN"BN(MML$LYYK۩K4PJ H6ECA@L>=m;8:o9.<8,7522UI.^*'q%%,o##*""!U] B\3]uqe `Mu$Fm6 ZF~$EV|+߼[c12-˸aL!bfhǸ<˲=tY͛+qBFˇЛg5lIulOj(wne,`&p{|2c27>$lV^:XNrRiH'frw'o79m`*nnkc[xTC$O:KGB =\8m;5$2V1A.)*&CO!7vM{ 35(\׻;S;'w=!pY\B!}qPg#cپ,>6 ?I+?7?CN@@9i@M@U.@PT@>0@#_@??%? ?@ 5@=@+.@BH@WV#@g @p@q@q@wL@M@F@@P@L&@@D@ b@;@m@dn@1@@ִ@͊;@ł@s@|@vf@}@s@~@&@`@Z@@m%@4@5@Q@3@@f@7@h?O??P>h穾ܿjN0Y,o|,;' 74H)iX}Vh1w#1E+m8DWk(<~g0 p8Qu 3"$'7),`/Ǫ3i`7x;l^>@]@@N@@AxBCDV~D1EFTH]JfK-FIHFbC|JA8C(FJuMNM'KzII HIILI I"IifJtJKcKL/LgFLwVi#VWKLWKVfV/VQWBWWoLVVrVAW6LWW UUTRXRRgR_RcKR0SFLST%S_KQOIMK0IȉHG{FFJFlF FjDBK?=ʋ<%#:V 73j/q+'%gr$[##f"! 2u=}G je2"|L,-B  ƓOΏs9㺾˹yMh!gUt-`LVLlDt +*|F>jhуISw7#&oe^sC4{`H_y 7v}9z-1q0=c 7/Km6{6]gXfP6MMMvbL{KcHD`&>`89O3k0h0.gA,uGZ?hQ!  wUssh49>} D?*5?c?|?>.@ [@K-@7@SK@of=@@<@cn@vC@h@#"@p@@rM@^@T @V@b@v@G:@ݥ@@@æ@)-@a@D@@0@@%@՘@J@-@̩A^AAAAA@0@`@@ @;@@D@%@Q@xa@@ @29@@@/@ @B@@|@ {?ʫ?hp>rՖ>kYBCJrA싷"1jF>8M>_ti)#NPRƼױjYc%ei\* y1x_TWiW !#C%o'*z-h"0:y326:+?oCWFuI(JJKVM=&N3Nv?ML͉KKALPM5MML L L/PwZV^]Zb@"c+`$Z2U߻RQTP AO.NNO3OUkO8OOPRqTfU]t^ ___^U^n^^_^Z^w^x^^^c]h\&Z"YXF VU TZSߐTqEUW VT QPNRLL KiJJ>JwKL4KHsD'O?b<>:8y62.*'($#yO"";1 J]9C75> 4 = Xt'Sw5WN owu֓͢tEvr}Y+U~1e~}#~ OkZI}%K=d? @@Z0'e4_9$#Iw*q޺+ux_m`g)BgĂm4t=y6QzwsfntiasQc? 11}.5R<8;1_ %H1_U!4X} #w Ɵu ת3M}â<&ͨf7hC6Jl-cx]L*2 %|%dWVw>?T=??j?@@:@T@pS@@@@͂@@@@*Y@f@ٙ@`@T@@տ@\@63@@@U2@@@˲@{ @@̄@bA\AiIA4s@R@AzAoA6;AAA!A&{A%;AUAA A3@@|g@i@ y@ @>@@=@.@!J@=K@k@O@hQ@@@@"Q@kI@AX@[@B?|?`mHcd;黲Ɗ9;-)E [ 2eA$O^Rq<`(+O3X.ކފV8 Vgl "V $U&p'(+r-04H?8=BFWEHJGM1OoRVXNZ[\"\MN\iK\C[ZZI YWT4RQT0Z(_Z`.] XqUSѲST7TUU|UTuTYTVxXEZ}i\0dd|ffɯg_.ggedd%eXffDeeZNdxee-d cyb L`O`^\[%YYNY}Y̤YksWU\SCQP2NL*GI@FEiD{B?\:L5210/D,+;(#7#õJZfM4uPm"QW}JT L < g ` X qw|i._!kF'S%ِ~l3T|0S|pKUOQkd/t&[G~y=6uqnlw=l)jshVgH(il!l@fn\_ ZiY, YHYZ+[[-oX }T8S. OFz@6%G6 Oʋ Ɗ I.}dNUN=_x.0sgefᅤ `a  '=y>>S=u")w.{Dp???@M@,;@PA@j@|4@v@E@v@.@Մ@;@KAAlAQAڤAA#,A+BA.A.:A/iA1?A0A,A&6BA!'AaA`AKAAAA\A=A"A$gA!A&AAcAAA#A^AFA A(UA)%A$cSAgAIAADAWANpA R@t@,A@l@@G+@_r@*@{%X@@@@p@k@x@}@et+@32@?š?>aN)h5пI U9's]X )i"9Tp&dpIZX~Yȭ-2o *z @ΰ|;8|"Y&7(FM()+L/.31v47< AE6GILPhT*WUlZ\`.zcd,ddAcmc%3am_]OZxW\5S|PNP S7WRZM!ZeYZzXW(WXJY(\^Q^\ Z{Z Z_\ ^U` ckql@yl!ml:k:jiijXjiaiik5}mppz7oZKnJ nCnnnd7mkgbcg`8^I_\]ZɡWTQRLcFN{@A;*O7O3T0.N,*'%%q% #ӑh  6-ȔLpa` 9A [8:3gv5]ff"TA:A5A1vA0A2\A3OA52A9"A?KADACA=vA4axA+ A#"A(IA"1sA+8CA2A/.AA A@@@1@@cN@$@n@@@F@t@k@o*@ka@Z@Oͮ@V@[q@Jb@1@-@7}@@?nÿI)m4 0Tp^ J:AWqt;|j=8ƘOھ)T$ NXVwlu!O###s% *03d7|@~O;~l~'x~~?~,}j|x{y-uPqotl`g/a[P{UPSqKGaCB>=Hs7`3r1.[* '\=' :('Z%*[#,wv~P-myB= LL qHax"=EK8^Sl9`&uL›q:%VP,~)a=niKx$~ arcd[fMd6 1Osw1MV"xHӂ6M/ 363/3.->*/%Ӊ# Hf &מ׶@#wSowH2sUz7S&k M*D#ӰsqA 3iA 5AsAFA@@S@~AA`wA iAAaAA&10A-A3A8UA>ZAFTAOCAVs A[[vA_AdAiAleAp0AuvA{AAiA#A5~A}?Asa=AdAX?ATA["AcAeA^/ATeARA[@Ae2Ag=A`AZMAZaA[#AW4nAT?AZ:Ah#HApAp8AjAeA^T9ip"bHO忳\j{'GPt "ؖ>#p>.?o{?@'@yE@@@@7A _AxA!dA++A_AAA&AAA25A_Ay9AAHAnAMAA"NA0A[AAAAA|ҨA{.AzAtAhӊA`^A`$AdvAgnAlAn^eAdAJ A/&A$A(A*,A% A^ A<@A^AcAgA@@0@@@!@D6@:@@.@2@IeN?ȸܾe5WP-^(`2(mA7Vi~3'~_sJαZ6cR(mߠ A X" V|#'+2-n0``5q?;T>xB=qc;i?<A\GJrKRMGPTY X[_3ac>ZdYfhDh4iAFjGk^kk bh4zbX"O^LաP?XK`yehhPicjѡlmtlkԷk~msyo*rTduuxlV{o~>€l1cT‚‚ƒƒvƒd‚k‚ƒ‚{dPO€€{€'~}6)|z؜y/wvusqmSj*hC(fݖda^F\UXڜT2OVLqJ&IG0@8530MQ,&*5,tXukYz' 0>?m&a}p>^_D"Aňx $*ͧ(/b5;< '\,IVydSS5KE)8;'g\Y^ rHPJy>R?%~'?A==ѿcâ#%j~t^XQK%>Kx-)(/S2H5Gas/|7$ly}mqiHNG]-J+m%L뱙 wRȽ?6?n@T@W@k@U@ʉ@>@@zD@Ҳ@ T@AA.bAGzAWAZ;APAD.A=/ACADD_EuHVKO5SX]u aEdfg6gĢhgjhxlll#j"pfUa[%9PEA2FˡT=cJj$iEgvg iNjbkul/n?opT pr`u%v+w{3F~Rt€'‚tƒhƒƒN6ƒ)&ƒ ‚‚‚t^l€€~D}{kzúy|Zwvtxrqo'm^jVVg/dLb8_{]SZKXMU[QOUMjIF6C?;;7)3/+ R'' $5 T5^ Z Svz'"Ew;TnFRYW>D64%MZd,H,5PF}ylneaZ;UL.>N3K%Oo;F/$6Ӡa̤>?wx/?E@H[@-@@<@.~Tc?3.@^G@t^@@ؼ@I@A@AFA AA!A; A]'AmAgrA[ AVAUAVA[gAcYAoAAAAlAA2RAEA ALnAxAAAAoAȪAAAA]AqAA9AAAAAA*7AA0AA)A6dAAAAdA AǦ(AA@AjA AANAAAj7A)AAA`?ADA?8AAAAA~AAvASAAA ALdACAmAzNASMAH^PANAVͯAb0ApAsAl,AgzAdL AZpAMACA7A(YA`TA @۹@9@@@M@l-@ ?0,JOW< q$>OZuqټöbDDvyH8@-  t&N"2 $H&)$-26:cDi4I߳H:ETE*THMP&0S@W\Aa"cocXdgEhוh}gf9a[_XaZ}c\FYUW`qesa:]`sfgfyh$lr-uG3v6v2/u\u=x} €͵‚‚[ƒ3ƒƒ€[sZ€a-~~}rw{{z&xƽwvus#qkomƞld7ki[Tgwed?b_d-\zY8VrSkPzN2KH!E޿B?~;7n31/.+(o$!T* Qp |d1eZgt/idu?l+tA6t@C3ʬxtZjqlf._"STE69n42<% 5-+U_GC&?{^@5@YJ@@҆qA A?OA O#@=l@i=@A9@?(?[>D >|.OCB>ѿ1)R˿.習?㿌 }\I8sAٿ/4P.g6CJ E#s&sA;ekap;=cVT=aR;_Ebb>ƙ>S??0V?@@[@{a@ԟ@;)A hAjdA-A+-A#tA,sA@AHJTAE^ADABAB$aAF+#AG\FACXAFAWAjAt0CAtlAm<#AcJ*A[AT,ANeAJ,AR;}AaAi,AlTZAxwA A.AAA6SAB&AԙA +AНAcbAzA;A},Az^ANAASAA.AÐxAVKAݼAŠAAABA0AAA^AAÚlA>!AƝAAA -AArAA[A A(gA %A.AA A]6AAAAAtGAd{Ae"AeO|Ab>Ag.AqAt:Ar]Ar;AtAr AjFA^[AP!LAALA4RA%$A@@R@K8@d@A@8@?]/f3{qu[giU3DHa*x/>(:'À8ˤU&5!x1HvʦL  fVAp$ )-5k>E&IRI1IK 7NPN/OiSYTA].a{b$cmeCfcʔcjch{\V4[1d$h4he-bPcOcT^7Z^eoj_zlumoqStZ3uyduuqJx|r€n€€€CFK€~<'Z€)}|zzoz,y>wɷvurtM sls!rp6mkPh=g0@e6cϛaؑ_]\ZsWaU$R\Oi~LgI~VF7B?~<18j55=2h/+&+N(&D$:b"Z !c  ޥ$vqm?zm嫛ۃыyKn5R uO/Q:lϋZNԋHA993%7)oav(s20|;N꾿0:?)R@VY @n@ވAA7A@0A96AH@p@N@L@]mX@/"`@p?4#qXl$#P> T>+??Gp?u ?????́-?A?G?)?p?&'?W?r?&??_?wI??ϗ??Э?`?:?@ @<@;@f@@p@2A AUA%xA)A-A-AA)B]A) A)oA'pA8q}AW5nAc1A]}A]AdAg[8Ai+HAeRJAZARAM-AGtAHATA^AcAnVA~#AAA|A AAAA0ALA AAYAAAA'^AēAAA A/AäAAwA5AeA0`A2A2ALAtA/A²[AAAɴAוACAzA}A jADAZwAAA)7AA'A1A~AzEAxRTAzA|kAu5Af.AYkAOmADrA6A$HAAM;@^,@@t@Hx?~,} Þ[IHdD 5d4 jI7r[yo ]?vy3ڋТJ",'![5fQ6 D,2+B#/+g0C12s4M7<19@-EuLNēMO TEZ_ aceQe/b1bua[dY`hkYmVlegLpeg:hǛii3jrka5l.ljnqJLrϴsntv:x zt|щ}%}|d{Oydrx.RwVvu$t2rqsq$lqrq$p8 BWm # ? wDȡ%x<\nWګlo.BbM^Jit͂8 zAGRAD[pAF5AL[ATlhA_>%AfAhAg'AdAkA{A)AOApAAZAA-.AukA|W9Ah,AA՝A+AsAp}AA`AvA?AfOA^AJAܿAAAlAA7A3kAΏAėA(Ay2AXAޒ0AABAfA2A`AA AA%AAAA#AS.AҊAAAFAঐAZArXAA*AwAǼAAA~A+AQAWA8A~%A~-AzAnAc&AZxrAOiACoA7]A+AAA A*@@w@p@n>۩pGlr" uD%@pYpB! Wޛ@WP>聳ZNaF{ UI6`,)eR0-*,,"/r0ķ4;9BcHM:M{P"UY>[q]ߘ\ZY!/XZ)\!^__aDc4f]hjONkk&jc^hOh-hiknpprJuXnp.svbxxxttqFomk5jjr$ihBg"ee1dFe`zeeAdqcva`m_^T\2ZX-US?QOYLJ+^GECcA&>;!8{S5{2e/,lM(z%at"Bv; wxլ: nV||eg!&W٬pd`LҦ:uCř>O rL+I2vpTk,bYgLB;M-"]g(m8Su,,?@.2@l{\@M|@@mA%A jA!AA e@*@:@@@@.ATA@5@L{@C<@@$@!@2#@´@@ú@ @R@2@@L@@Z@@@@v@i@-@@@-p@@x@w@yq@|:@@@@s@@3i@@@C@@v@@@@ˬ@h@@+A!A cEATAݗA7AAVuA JA'A)!A-A5LA>AH%ANAT^AYA]Aj"AwApN_AgAooAsGAlfAgAikAo As|uAuAzAA~A7AMAjAAA_A&AûAA}AAA[AIaAAJA AA ,ArAAJAA۶AލA7A_B B0B ςB.FB >BYBbBfA2pAaAAAAAJ[AyAٶAAAAApAMAbAAAϿA>AA-:vA$AmA A L@>@砍@@n?ʾOEPvߧ^Lf9NTjUד6V^p=j_FRv9돤ۗGl xFd4K#8*8Q)&&y*.28Dz<@JF3mJL"N[OoRTUFS`P˿QO]O|TgmXYA\ _byb$bLcte)gfvi k?8kQlyno4gj!nzooսmhyiCrfeg&ccc7PbJa,`_^z][[([ [C[aZeYW<;;}:-85wD2k/-C *>'$ 3N1,j[ S u2>ږ+OxVN0A'.38}(|O>ptqڷC>Nd@@[R@@_#@hAԱAA ~An1AA"[A !A (AښAA*IA2jrA)e[A@@Aa@3@@}Ad/AѢAAMWA|APAAAҞAzA'A2@bZ@Ek@>f@^?@IV@߃@&F@ @0@U(@3@@bg@@;@@RX@{@o@S@@;@=@@@ַZ@ح@+@tA;HAiA 7A A=A%A(pkA+(A1[A6A=AE_AIAOgAZAeAitAl Av A|pAre AoFAvAvzAqBApAAKA6AAEAA2AA?AySArlA˻_Aװ4AA AkB*gB 6BNB݌B![BBB UBB\AAAAAJIAM.AػA AɳAqmA>AAAAA<)AxAXA1#AApAhAxAobAf!nA`AMA.|A$ A-A&AA cAZ@;@*]@+@3?K;d~Qn1)IFJtJKbJ+JJIH EG IJMOzDPS;SRa|QRUoVWY[j]f`ra cExeSfluh~ihy'b2ea,__J]]\\&[ZIYuYwXKCWcVuU UTS|S RR_Q3OjN--LKJII2MH F]CA?4F?=@q @@AuA A&bA/:A9\ANRA^zAWiAR2AN˛AI/ATA!AcA|Ad.\AQ3A6A*HA%TA!DA!fAyA!RA%y@A) A.A/A-A*i A&A$"A"AA'AKAFSAAAA zAA@V@@R~@@wy@@w@~@$@ٖ@@@@gU@3@;@ @@AFAuA8AAA$A+VA/A5ӑA@=AJ!AVW=A_ A`zAdZAk'Ar=AusA{0A AxAKbAAXAM5AAEAAAAAAYOAFOA|AAwVA&AAAA:AAAA-A_AAhA8A=+AeEA߾A:%AAўAVAABBEB BBJBB+kBA7AA A3AيJAppAnnAƷAA{HAA()A(AAAAA2A{Ae=AgAAz@WA}<:Ay)AjhA`pAPlA<.A.A A ,@@Ӊ,@~@SS?Hv?sO f!K7}&}S.2G!_9u vy6h|/Yȶ\У&Ae(@DG  frpl 9#$%{&]`(9- 1 4&7x9=< '<9;:><5@BĮ?5?9WA3bBtCC`EwEw$CYDsGvrIwL#NS9POS6U9oVXZ\^7|_o`jab!5S/QbPQd|QQQʲQy=l;9^754 21>.,+8*>*&p)z(&%$V#"  /o / +&{ɘSI\h;xWZ2؝8ȩEo&F_>y3`so`n^^?PBG5|( t˿ ufl: h?y@ l@eV@'@YAA4XAGAX~iAb2ApsAO(AA|N;[5Dg7Tbmi]/>h.;2tl߾|}E_" N?  J0^GqT!S%)1+^"- t.y03,5x636V89a=7689G8,>5[44[5_67v78MH9hGy@kCBE%H|J@L_OBRUUUCUqW.VhU%5LK5KKJoIIG~HGoFӐEzDcCC BHAe@@R?>P=;:O#9W+8_7K54F3F2}0l6.,T+-)' %%,P$$"! .>,cPz0h2sn b @iYF]986UX1)7׍RYyR g޽/U_+bngneA[=NBӯ5s* uV̞͜yq=0?-@b@T@}C@@7rAA0AN`Ah:A}\AASAxAAAGAAAAgALAAwAlAayAcxAlArAtAtAstlAsgAs{RAr/ArApOAnPAl#AgNAbA\¡AXAUXAQ_ANp>AI.AFSA@HA9A5<A3-A/A)A'=A$AzAAAAwAјA=`;:9W%8*N6{5)4f3ѭ241!/p.<-W+*)(߿'&M%)$#"8! ItS4 L oDon |[6%^$76{vbWڋc֗Ӡ7̛ȪĂL/ # MZ=AI~td&WTN*aDW;7&1%o~A A-AtbAA8AĦAAףAqkAT~A6AꮄA~rASAAQA9AA\nAABA{A#AAA.AmAAAjAZA8AA;^A0AݪwAI'A?AԓAk3A%RAƙA EAYA\A;A AAAA AA%A5^AtA_wALA;A*NAߵ@I@o@Cs@e@E^@ ?R~trIp Y*[>J@^\by_wYT|7Y .fW \9 -eYn5!J"?"."F"n^"6#$&#&'vi&J$~#s#S""k!) eh\g(&bi!$RC&\),zd//13|2578:+>A C5F4H1I II /HE)HDiCGPBDA[@]>80<:8@6_4F31Y/چ.",t+* )('W%W#_}!a `d:>r'HkI=Ge ۉ24BAm \ ) ?.`N)R\a2i!O+ q5/ԩҜ2[Ik˓]pNc9 ZIӶw"V˾:?t,jF}\ZM^DY=pABAAAC7AC|ACG]ABݓACAAG2AL AS A[Ac.AjAuA;A}A8uAAUA-dAAAA]A5(A!A+A0}AA7AcAA`A(AuQACAA"hA@AMAeNAcA؊AōAUA݈jAl{AXA A"A5AA]TAqAAUAPAAA5A0AA%)AbnA-5A2AA)A[AvAAAAmAdAm AܭAAM^AAcA IAȷAA;AdAA9AvA^A0ADQAyAPA|A`CAGuA1TA A@G@@^U@?RIĿЉkq/CvY *g 2H[~ jtd #iXVH߿c{SgKQE [B@/q%`>- !֔ߵٍ,DzV QWoưE)^6 \##%g(+6.B3(8'= AFC@D!EfEF2'F;EhA>@?.> G<";$9L75}441/.#-,G*O(k'0%U#!y3C #&rG+kD-" b 9- U qj (XSSTsd'-pu?fcި*z4W_K(gݭɪ=4d\548Oj"~BpԘ]u :xAnDfk\rPE>4'%5@ 6ᝃźSz-d˿g/?k@ @t @@XA;AA-0LACnAYAs$Af!A2A&AkAz)AAAAXpATAA-AaAsADAAAzA?AAAeAבA]AC,A'MA)A.AAAڨA8AfA@AaVA]AA-&AAA,A0A0AAWA,Ao"A{bAsOAnAh/AeȠAd&AdMAccA]2A[nA^-A[xATAURAWA?AXAZ,MA\A`һAd AjArW.A|AAAZAAAAlHAS8AW'AijAAAA:AxAň5ARAاAȃAwAɘ AAѧASTAmAA?ARA#9A㼱AkA3AAABB*BBHkBBѨA+ApkAA@AmAA$|A3AAlAAAA/QAADGAoAnAaAAYARNAcA߼AuAfAǍAA޲AеA \AFWAA1AC8AGAArAp΃AQyA6p6LO&ZAjb-~\=@d%oFě̔jsi:{'ALD : -@ʗMRdJH-n B b ],<{< Wv y#g x!&:,lS3t7*:s;x? @0's@--@m@A A#A;AVAo-AVAu\AkAUdAPAA4A#AGAAZA:%AAAAIAAAA6ApAAAAA/AAтA>AhA~.A#AOAmA`wAAAv5A~ AyAAA sAS ASqAAWASA%CA''AùPAƒAȶeAfAA4ḀRAA£AAٸA%A!AaAAA妕AfA\A>A%AACxBB~B BtBBB:BBBBoB{ BB-3B Bq;B!AA ABz\BB^Az2A|AAcuAYA$mASA0/A*AnAA.A&AqA \AGaA̒A3AĎkAAMA6AA/A~SAYƫA?%A(SA&@H@${@h@m@4]?Ϸ>ؓ8c0EGcꀷ- E+1m CXVMi|{3d/}ĞW~I{uzPd|#Q[r EWkt1)J%/bըW pt6KyXK!',/258 D:I;<=X.=C>j?>!ʿ *R?Gh@?}@F$@<@@ǭAw A0uAJvA_rAr]ARA%AAAA=AAAAvAAAAA&AAA=A2pA)IAAcAA9AAqARA"0A6VAAKAkB BBBU"BB 7B UB B ,B bB %B mdB BhBB֦B B B2BBB֥B BL5B{BBA-AA?A\uAAAAGAAAAA2Ax\AVA4AA#AС^AuA?:A4..m-߹+*I)5("'P%$!Hn09*^E Nx lU] qK6Z-$>*oWzZ ߣ0ګfzh\%ML.),mD^Z |#ȆlOuqfBMG.>K_PNfA~#v} rJk3LcJlZKSf@;233u-x&\f ƽNs:z I^ؿ,V>A?I~@,I@uz@ל@A GA$A;qAMZA_RArnA%A>ATABAtAAAy0AA?AAcA(AAc`Al;A5AAACAGmAAKAȰAIAAgAA A:AnAAAsAAhAAZyA>A.A|AGARA,DuAA\gAڷAAA ASAAA#AAMYy̿nZF [1fjn >,._{BSt{fayʨ77ԝ7!ů[cAFXpudduT7P\[:eRxXvJX$*׀fKsTmpާS(⊼紷Rf'; sOK*#Q'^)-, --%.3.///Oj.&%^$"#^}"6"%4!Y K H NZ Kf:6mgqױ>A"VUx=&ѥ++ρMƥ6zQ̝2Vhy3G< i r" ZaS MAIa ky$;>&I}_}TpfS]—Y'SpMHA 7B.5)ލ \ w&h"j[oT3Jۿ^H?c?@n@`r@ݣ@@CA0AA%A26ANnA`AdAr&AӓAXALlAUAtAZAyAA#AADZAjA4AA@oAqAAA{A?AAAAAbAA,?AAAAJA+AuA AXAA^A A|n5A zA1A}A AbAFAhA$A4 AAr*AsA*KAAHAAAmA PAA)ABAJA vA>AkA AX[AA3A_4AͶAoAAA=AA~A-WA#_AA2AɎA4%AՖAAezAAXhApAI AGA|AHSABVBBoB=B .B B$BBBhBBB>BB-BBBRB$BByBpBhBrBLBB !B UB #B EB yB &"B`B;BBkBABYBg BLIB&9AMAAUAAAAADZA/AB0A/ALAA% A'A{ApcAY;XAJv.A8 A&vAAM@T@@@&?]rXk[pN*'o<˗OT2cv@-wRRE;G%1C);zNՊ@,rI޹߉߭ߔ'cCNތ/`rۛ *'t4̱a(6 8%>a ^ ?qK=h  - ]"##$ $q$$%*%*&"L1I rGZF8vX'p R h3DD.5^{ƇeIӳЉ}.62JTZ LC I jxx{1sSw){s \xjvxYdyvyRy!w!srIrNooAnjoiG^D~S .KnFAu <16UE/ɺ012*'nc ;@RB@LBIy?;1?6@',@dT@@@@@>l@A#:GAKB "WB EB B B 5BBU~B ] B JBBBB"BA=?AApA~A\vAzA/A(AA$AFARAsAv^AdpAV(AE A0AHA M@A@a@@Y?e>彿Fѿ@``ɤx"7Lx`t+k([|_1P ڗfD$ 3 y .[w)YVӅ-1 KlT: Z #]&zH)'ynF ݅73ӹ)ͫȰ2 >e["((-c}svx8X'5d^-/%J"ټ|1UreY|UUUoV`WXZ[r^Pb_Z`w`^w_^]k\GW sNE6=:2 s*) S(-1&i ٳ#pâqaNd"Z5QQU?i?@5GZ@s@t@@8@@~@A$ASpAasAp AqAV-AHAHAT%AjAA AA'AAJAAAATiAlASA5AAAAbjAAGAA¸ANAeAjAA=A [ALA_AA(A9AlhYAXA1@Ǭj@ASHA\zAAgApAcRAǟxAiAaAΰvAAAAaAͅATA8jAbAAjAſwA=AAAlA]AAAÌAʏAҋ A_ApAlxA`AA(ABBB7BBnB5B B B $BM}B;5B B#&BB"B&*B)B+B+B+B+6:B*u#B*zB*B*6B'pB#!0B.BpEBBqB5BܯBoBWB۵B'B, bii IF@I'Ar>p@`sLaǠ ,$qU24}pq@ %Gh .+} #2`VwWuk!Qd:d\0+RKxlFnDBC+FFGlHKLL!N0NBN(NiN}JoDA??9P1&Y&o4T yprCWc*r;I*\r>?@&R@l0g@@@}@~AO~AfAk> AoFAwAdnAFA25AAPAOkCAVWAcBAiAgJAfAeAllAzAAA@AJAyAuAqaA=A sA%uA(ObA"AAA!jA^'ArAA,"A1AP:AAwAMCAAgAeA=AhAAõA;A AAњAGAP[A@AۀA,HAADAvA7zAֲA A$AzAAAAAziA]A@@0@+@@oWf@I?e{"d,.D($ 6I(_]r)Y3 OħۊĉEl_2ZhRd'Uķ"KOUF͵e[f4V/]"OIrF7MwH#oծ(e\F;;˛~Iæ.&@hQ3dXhIb;c%E,gd`LF4xYmnad[StK8D[=9`@66H8u9_;M=5u=?j@XA3C>DdCH@=5;6/j%h  C \ *c-hƄxNt=i?s@E@Y@۝@3@@@&A)A':,AA ^A"eA=ÉAFAH"AGA>zA3 TA*tA(AUXAAA ru@@@P @l$ASA^pAsAA A5/AKA-,AEA%dA4yA6A,AeABAAOA AA&A<5AAVABKBBB A3BB=B@B<:B6aB6aB8B.%B-B/MUBKCl;.872,u%D >#vނg~9֬oZ|aIh6Ѿ.?O?!@Ag@y@@,@WA}A<@A>\A4A^AlA A+5YA3A6A@tAKzAR'AOASACA7qA7E4A9PA1AA:@@24@@@@Q@S>@`@Z}@fX@x@=@@ @1@mvA_Aq.NApA{wIA~"ZAtbXAssATA#A\A8AAKAAAA AɜA7ACA¸AGAqdA.AӤAֹAؓ+A2kAڑA!AA -B:5B8~B7bB1B4&eB0ΓB+B, B)yB':B$,B!(FB BB8B}B#Bv%B B qB GB PB B b*B BUBLBdBB*4 "ڛI\v@3h0}GaH_(o?#?5@%@c5@x@I@w@vA)N?A\iAh,AKHA1A8AzA|A A$1A9AKPAX۞AWAPmAJBAA-A? AAUA;A-A!A[@@ּJ@i@}u@n@@@?@,@|@@@`@9@Au#AAA]AF!uU4Z ]*vU"%IpV6U|A6K% kcguJ(o-W: ][;&_iltu2f@sKo6 kILi!BX&FE}m5/%~#Vm!+!2:BPѭtrkaFE;v[W|uob2cXvMDF<6./)D$q!WC!?v#,#zN'j, -*$-C -y ..`,#)$*c>הHLڡ.Ηۉw c6T pP҃>ԣ?@ @LQ@@J@u@@HA@R AWAAaAM4A5;A(~A!sA"A$A4s ABAQ+xAKFACǑAJVAJX)AEȿA>WA-tA}\AV@@6@@@v@v0@p@{3@<@@ @O@@2@@Dq@@[~@IJ@궠A>A A A/TA;mAC`AV9Ar+AAgAAAOA;_AAwA A5A AmAoAYsAA AAIAүAڱ-AOA`AcAԡTAA#ATAAz AAPA|AA7A|AAAʛ|A_AiAAA,AA QBB(B-BBcB ZB B \BKBtB5BR,BB5B HBMB ,B!B$B)&B-CB0׽B4[B6U9B6uB6VB5B6vB6B6 B4B3#B23uB19B1B0\B.nB,9B)2B%%B"uBBtBjB7NB1B%9BBB>BBoB1zBNB]BBEBjBQAsAAAⅥAtA̠ALA AAA7PAAu^3A^AH7A2AbAo@ @@rC@&?@=Tݽi-qM~& R;;M6_q;!;b;\Z>\YM+|3y J\`f{vs3Uz|Km:B+VY.`DLiqf[(T/<*- FfI &;Z-35Y6F=1&AX Y??VZ@-R@l2 @>@@m@@ACAbYArAx>Ak2AQ A8A1IA0sA,`jA-W A2A=ADEABV[A>A7mA-A#A @@@|$?ư??t?6?m?o?p?QY?@4 @r:@uP9@Bt??@&@S@@@@A@xA AqSA.kAHA[mAk+PA}4AAiA9AA ARAAFAAȺA9A;-Aq+AiA6AAUFAAы>AAAVwAAZAF~AAA$A^AĞAA}MA5CAqDAAҼ!A AޜA嵢AtyA AAfB{ BTBIhBB bB B B B BKA)<A@ @g@Y @K?ζx^G*.\ #&85Le`Ps6 4ʮ?Mu63}lg<6f<'{ ue?s$ 5 z0xM!pr |Mr`OlhBv5:-%R7$n' LmMU N. H+s;+0@@7AzC̵1LOo]lfgjYltq_rqOrsx`rCir[rppo8o!pguwwuojLfcdac7imi0ou|WQR%!@#v5=#w{)s!l=b=WL~Cj<7X3T|?$8?>?kŀ?i@?x@7Q @lr@,@Ԅ@ؾ@@TA ~5A(\Aďf̜O"ez[(> >'K/0=[58Y ;@NE KNWPTRS[PNOefSVU5TR$ P:LdIJK?MSFWZt`cLjbpt°y<~|X],Fvwq@m}$gQ^ȚWAqN-GK?93*.<+'#ڰ |1cD%]SXBt]ieL@ x6픚َ*,RqrF3W~嚪@ &?0 ?@ W@B@~?@cN@K@Y@@A*ABAldAAAsA2AuPAYA?Ay\?_h?@(@k!@@@3W@fA ]A[A UAA AwAYAAEAAttAdSAU)ACBA8 A9 A:A7A1A$@{@W@@ 0>ȅ>dd[.͊Xov] ]se1FvXQndzlOv@@k+q{r3?@8$@6@@J=AfA0JAGaA^ AqA$AOGALAA A{ASAɊAu+A%ANKA`AסYA:AAA˰AQ@A$AAsVA(AA]AAYADA8A`AA:|A£AAƵA4AσA/mAتDAܯA&A63A&ABAZBzBwB(JB'BRzBB;iBgB1}1B,B*B'B#BYB|BBdB BLB^BSB B.B &B *B7;BA#2AZjAAAޕA?`A`AAAARAH@AA̚AsJA\qAC`A)Aj,@j@6@n@!t?dÇ%ybi '@"VkZ&+V12zX eQ RJHF΂|-<[)˿Y&- 6(Dn՝ c=:\WI{&-x_S&CSX`YVZI3PGWA[1>K(9(4)R{+)NƹHXQ?w@@L@??Ns\擿x竗+<>,lg[󞿂f^2~P݈6 ۲b|Wa ~] #) .<G(p+0c9ZA5EWJTU_?hpsyuUucqxv}cu rǃoGlQSi!3bGIZ+T<|MCGgA95^1 s/-3*H(*%"nS,/UbB]w' sP PvD]n6ʗn\S ;Mׯ\ݽҬ?"?@@=@@~@FD@>HA ~AƫA(_nA,AA3Am%AxA_.AVA!AϸArA`ANA=,A>MA>A4$A,A!@9H@km@J?޿=(Qg]cH/lKd]RvVly*XmCb2[xB_['Oq{V3՟ڋ~!?&[@ @o@@A2A-SAEA]BAtgNAeA>AmAAzAMA"AɽAʹAԚAГA1AAAAdAO AAJAAA/A|A1A[Ad/AAAA6AXAK2AwAS0AA֢AבAAߡAAAvYABB`BB#-B9BimBqBСBv BBB vB3!B*B& B/sB5ӭB8B8B8J~B7!B7gB7 B6B3uB5B9 B:_B7blB2B;`BBF~B:kB2ZB-ZB+qB(B% B BKMB8@Śg@2@}w@-a@//@BI@L@(@??@D@q@-(@"@@y>gXFӲKR'[ cK2h}j֨lgpbsqIoψnPkg}dd0P_YlTOHLC!D-ߥd8|L׻ROF`wD;=& 9F2=<`h~Gtw7nU$5/:2"I$xP"zx \>xUѾp,I](*,@|`@ A ]@@+@wA&A*ADt@zH@@"9A?]A4A0BA,A@أC@Q@#7?eW$+-9Aj5qe_~WK^7p;7D$ZЮ9lzcn n+62qv;`@GOV7]Q(ageEjhAeĻdDfec'bBJ`^8YUmN*I C^>X;9x-76 514b1.y*&R"IC9D} Hn HF |5ψq]y1lV8O1;' ;ҿQ>! @?@(n@5i@gb@m@m@ j@AMA+A'7%A+OyA*xAG Aq TApAAA63A 7AAjAWŨAA^A=A8A3A3A*z@ԏ@Y@G?o>gf+ @I>%6:Ked`G<2uTƦ΋'W1-,?#@s4@@AQA&FA?AW,ApAA,AAA;A NAjQA>|AAA'AA̱A×A$ALsA$AS=AOATAA` AAAMAAa^A-A4A_*A`AAeUAΌAA AAAYAC\A,IAe@@)O@@:?y60#g XJ9]X;o0/V0_MJFUŪ/{.gRlV9?邗1 /Z|~ݿ=ĊYԃ {!sJ4TdI:|smyZarhݴlhVvohq'`FEg?a@@6@I@@-TA\A.5A5zA3A6IALlAPZARbAO\AGAbAXBAJA6A!A d@@@j@##?b> .dt\׿ د`m鿹|!UeWkAo|Gݖjlb  ) 63<@1B#HKPvXC\4]q^w@_`̽ab2a>]ɋ[پYT']OLKFdSBF@J'?@I@h/?%=Z::73/*1w%n"2 ZP-9OH }%csQ{<\vW".{W/<ڎ=L?ƚ?@'zw@c J@dK@@w'@A *RAϲA*A2A(JAMbkAAeAA-AAAgA?AfqAV2AMТAD$iA>4CAAA:7Ao@˵o@Uj?l> = 7ޕ (*(4?bRj=}GwKȟAGIf,G9\?U@m]@q@暝A +A%L/A> XAS Am>A)A*AA-ACMA!A.7AATA|AAǁAĤUA.RA AwEAqAyA AAVAYuAAmAKA& A>nA A%qAAGAA¥UAKA =A^AAAA'A,AAP/AAA[BBB3B B BJSBBB_BBJB B:BAJB bnB&B)B,lB0B0B.B-W>B-RB,9B,B,B,uB,B)B'[+B%@B"QB`BBB^B X BB=AAJACAsA=AaARAlAںHA ȀAAAA~gAfQA7AA*APAEAqAXA<@A(uAlO@a@@@0 ?t ӿ`ۇ.jXq4%jD\^P|@tZrlVJ¬Lޗ?ݾ4i<[<3$j8*YټӹlNIbMigE~pu$q7e,.G`ؑ:;.jFnD-u(aCm*jsG=W_ ?Ҫ@\@h@@ʌ@.AGA']A:8ASA^AECeAA%A7?s?H@/OU@pG<@@@L{AAOdA*vA6AA.3AMAAAZA%wAAjAAAwA[5AP=AFAL+AJAAqA9wA#@@%?=m5=ҿT :tKU1o.4Ƴ.y04?\Z{h5puʰ@?R@I*@c@bQA -9A% `A>AV`ApLfA[(A ArAAABiAk)AAZATAŠA@AiAAAkAA+ApA4UAAAAANA{qACAAFA3AdA!&AAAA(AWAAAAƠAA`AUwAA섌AoA:[AݐBOBNB B aB BBBB-B}BB 2BBHBB OB#tB'B+3B,B-B-nB-(B*RB)!B)9"B' B%B"B lBBJB B TBvjBoANKA> A*A`eA(dAAtA6A!AsAыBA=AH"ALAy7AAq,AAAAAAAyYAgAQ A:gyA =mA-@ @q@@r?($G~ ́,Kglb_OOȯp7#wyPA2eS]F91+,p.|~HD#f11JR>L{sc>=5%y+ 8FR~AÿuO>P?GS?͛v@)N@rɩ@]0@ŏ*@fA9A8ŐAQZA]AlJAv"AGkAalA4[ALoAVA[AAw}sA~A5A0AArjASvA5AD}@o@#@k@;@l@}/@c݂@b@5j?J?q?4x><:辱(4M!Z&AiuGvC ?w?v4?@2D@x:@Ch@|@QA_A$A2 A)2A9&AA~AA HABA>AAIAw=AaCAX]ALAUv.ATcAQeXAI@A=qA >@@7@S?3z`sHT;Rr*PMg~ +5ԔO!~d7K:54?Sq@5Ma@K0@޼AAnA!@A:AT;AlAiA'AAAA$1A0AIAAA A1AAAA9A>AGAϲAAZAҐAC.AAAA'9AA$A1AAжAuAąA=AQaA3RAA≱AA\5AA@WX?cmGq6LSmr|U>\ů v h<#@}4 BhK!r%FfXD΢/1:ad3zp.aBAu>倿n֣ܕw>0BTN8"&>(_??̶@@$\@Gh@u^@@Z @A=A nA;AlA0<@ Bq]EGFڂI KLc LqJ OFF:DpCC C*{DrHLON*LAHC9>͟9s-4UR/w)&G$"L` m-=]/Kw+ekE)!#YhCo@ .7v>/Q1?z?H@ @lU@ @;@?A OA~A+*A#bA'AfAAܾAyA!4I4@w*S&'*+IIq&$?@@Ao@w@%A A$A>mAX2PAoLAZA{AAwAUAAAA|A AAAZALsAWAACAA AvAAA0A_WAA]wAÞApAuA7AQAtA8AbRApAYAJAAyA?BA"AݸArA-gALAꎹATA2A%ABeB BBBBB!BBBBKB!*BB ]BB$BB ~B#ūB&RB(U{B)TB)B&$;B#B WB%Bz.BB BAA9A A|pA AoAAҥ}AЧAHOA5AOAEAAA3AAzABA%AFAArARqA9dAF A@9@s@k@u? <)EȆOy ?^Q{qUI1UfAI[b_P4  l k "  n 8ewI2eN'*a[OmѲ9NNf}lV33Tu`zKs>X?i/?wP @BR@dd@@@V@V@Di@淪A  A*eAGA]Ak*AoA 'AsAAAUAAϠA_qAeMAANA'AfA61A4AAA}?A\]uAHAA@JA-AA$A*u@'@.@ǜ @i@-@n .@dq@MZ{@8?r>2h8υb-DG>%taOV)!)/-}1͵4|d79ص=8@C4DDPRC BKCEzF%DSABeDZPGK}[NL;KI[E0?:3S-L')" iJzHY$Q<2p(I *86L ܿJ?^?<@S@_?@,@b@%A AkA)!A$A A(AEAA³A*A-A;AAt{AjAi AkAcP AUASA_ A[AAPA!q{@ѹ@9@?S[r¶:m1PVřלWUڒư;f e ˝?9@C@@ߡvA 2A!A:*8ARAj;AAA AAA=ApA`AAyAsATAQAmAdAoA*mACAO1AoAŏAAA'A?AA|?AǀAA7A8A@cAx'A>AHAyApA EAx'ALzAوAj Ad?AAzASASA0AszAyBhzB{AADAAAJBkAAYALEA;B BXuB()BwBBnGB BWB" B'+'B%B#B7BGB̢B B5BwPAAA2AAEA AAȮeA A|A>AAV@AtAA ^A|AAxApomAiAh2A^ƪA7AM@x@y@@J ?猻Hi CB+I#gXsL|(2ȏ{  rrv-Pa8: } N C7AwG8ҳh6עۚ$<}Chf%o3I?Ղ=?2@Ab@@tq@nF@GJ?ٝ@@]R@P@L@@߮@B@AAcA"(A3PARAA 6@gS@6@@ @@lB@*$J?>ʆyЪ&WfǃAq(2!:&'*C.Q03 8<>϶><=?A ?c>?ߵ<@$C&pHGWgK#GfFoCE>,8J1Ks+#H&d`XJ+ wMe[C> UTEXj4F(0X#k oڿNÿS=>B?@@d0)@@/g@ྀACAlA+6$A)AAAfAC#A܌A҅AA qAA.A6AkAFAAz0Az{,A9A|/AkBAL1A.L@D@@?տm/)fw#E]^㡴i%$H'o{$?@CO@ò@gA?A=5A7fQAMAb=Av'AWAAAiAAA3AΎAbA/AWA,IA$fA)Ak,A<"A/AnAA A0wAAULA [AAAAbAdAAn+A+ABABBB |Bc4BhB}BBvBBB'BfB[B B{AA=JA}3AnA˚GA#AįXA AZoAZA AAAAAJA3IA1Ap+Aa vAVAOAJADA&Ÿ@@]@~e@#9?[Jpk_iR7WSqe{EyΗ(ژom;t  "y @ `Y x j 6H.F,.\{fPE!2g22 z?@_@}@6A|A A&m@A*UD@h@^@@UAA6A!A"#A'ZA-tA;ZAO{AfzAPfAAuA$A^IAAAAS0AqAAÇAG3AlhA3A'AA5!AAnAQIA^AjA-A\AaAr Ao AP=qAENA3!A [A9@_@r@@@e)@'B?߈>< ZDj|L"3+C^AmccG!J4$@'-~6,{;-l:99HH9:;N8ˈ76-9:aE:GA5CXDHA4AAٖA.P92K-Tw)a$\ $Vs=V \VT߀Qw[Rs|U$VFE?ݖ6%2(Qꜿ.u>O?Cr@"4@tl@7@ȫ@A tRA A4΢A73AAAe:AAtA;A AӍAAAkA$AkRA_8AAآAAA{zXAe HA9A@S@)@ վUe4krv3[VY4NEѐ}eЕgY?Dz@5<@@ɘAASA2OAIqA^(AqګA\1AwAA@AM AAAAAZA7AAARAAAgA*~AAȑA_A3AWAAqAA)Ae>AcSA]A5AA;AYZA!AAGAtA*AԆAٺAޯSAALAŜAꎍAGlAܷA;AAsA攍ACA}$A룁AAAXAFA'A݁6Ac-A0AAƖABB BBf.B]BBeBBiB cBB*A^/AAYAǛA¸AA$A&ARAAiAA`A]RAA AyA3_A*wAfAE@ƥE@bM?a>[E<Ε":@U]ztxxxԠ߂I!| x c0bW7(/ Uk%.KӸMN yEi p;c̲ٗΩlsK.q+th?'@KTV@ K@3@@H#A PVAPMA}A~-A7l@蠐AZA'A01ABMAUs(ANASAX(Anv_AcAAAWAhAXAȬAzAUAA6A죦A,B %/B BgAZA#AAǔA@A@AƔAAnA|AZAAA)Ai]AXqA=;A-AAvK@X@f\@f @E@,e{?#?W龁D@o$E߯%M`f,_ IU 7Aiz7Q]}!P'-X34~5l333"46V4v26.4d7.E;yA?QA=1V<>D7\2 .a+Bg%д ,5 0KX% Yef/wIJS7%viH>5!F*^Hyx= ?x@)U]@=@ @@JgAc8A$A;tmAELA+A$XAAAxAlAAALxA6A>A!AOAAiAA AxAcvAIlA/:~AEC@87@??vH~׮iwa+_\F\mY ٮ?tA@,`#@d@̔@AAA()A?ASqAfkAx+iANAFAڢAAAйAAAɕAŮA ABAAAqA"A܏A6;A1AvAjAtAAgAAόAAXAA AAAnAɋAsA$A A|WA9A A&A/sA,XAAHAܣ"AAVAݧAbAۿgALAmA߱BAAAAAѰAuA2AӌAΟAܲAhkAKBeBB[BBBB&B;jB.BAAܦA$jA*A"`AvAwAȁAcA5&A;AA AAXAXZAvrAc׉AQmA?;A.#A"HAA @@M"@?w]c~Ee DT+H.d>ACR儆_ЕDp)}Qa !Gc!WeU* u ,{+5 h 0 o QӻC9@@NKFp1AÿC? @@cw@X@=xAA7VA\A~A&A A6!A.AEAWAhXAsAzHA~AcAFAAAZ{A AG&AAկGAߊAAA BBh/BBBYMBB ANAἸAAA0eATEA@RAIuA/A.AAf]Ay=AfAK!A8OAXA r@@@@@RZ@ ?,?ZB忕Z D38Lzpxqq=[o <H$(.36373ɮ2fI10B1N0:0w/0Y>T=ڌ;}9U 9/6@40.'-$] C@H# 94y Ľ<gqnlyqWD); gƿ)(o>?d@*n@|>@9 @"@AAA:APAQ/A!AR=AsA0AA=AHA^AAiAApAZAA^A~AmfAt(AwAegANgA'A %@w@;B^I "5YyHh A]U{A?@Ie@Q@g@]@/AA+ >A?plASiAd'Ar^A},AAKv]lt%SYq>cm-5BtξD?Ѫ@@if@@PnA,A8AYA:IAA*|AQAR[A]njApAn(A&IA6AtAAqhlATA8[$!``'<\R(qg5o'ͪM1\L!p(C*//}57<8%54M+2ʮ0281789`6\574v2L2-k/,U'D Wr}P }+aUdyg>ƴ:jt(HZ~/W84@?x#9LK.K?i?Y.@0O@z/@@(@U$AA_A2SAIeAckAMA#CAXAޗAd A4AUTAFA(AAAEA7 AAA@A:FAAwAbAF5Aj@@(?#-_> zߣn;gnQ|MaMaߢs?ў@(t@}h@@ @A-AA$ǰA7tAHPAXAf8bAtAAyAGAAbAAAAM.A|A{A~`CAiaA A AS=AbA`A^;A]AA9AAAMAgJAAAA}A:AAAҫAզAA/AB:BKB*WA,A$AA?ſ^a%W]U:(hlE6jy-O,{ w]!}#ev" Y #ˢ_Fja峖*}*ڐͪgt4F~?^vv_SsN W>I@D@{@@֓@KAVA5A] APA[AwA0AA;AA(AAA[ AAA8rAr7A4AA,AASAGBgBBBB0BBLBBVB"pB#3B'p>B&N B*d%AAGAǹmA$AwAjAmAAA^AvDAzA`&AB*A2 A~A @L@s@Y@}+@&o-?a0?m >/mu7LP-eɬAs^A`{ADA@ @@ $Lrc`+TDsoL>Q?*O@@Yz@@ @@\AAEfA.+ A?\ALZAXAezAoGAw4A~`aA[A$A54AqAԤAz(AwFAw6Ax/A~eA,A0AJA9(A\AAA\AAAD.A(A7AGAbAARAxAAMAۿAxA4ABxB=B 5B ` B[BApAA[$AAYbAAɘ'AxKAA-AդA2;AShAAZA+`AAqAAKAQiAJA<,A؏AɶAA~AA}AA4AlAtA AgA bA=AxA=AA}6ArsAf&AX AHA7lA$A:5A">!Jc4õ z%i<٨ыE0w ֜%L{~I#QRUB $^rܖ&Nn-H5e<9B+GجH GHDFu@< 84^1.-,,j+2*͑(֠%"ɿ $ gFPqh/&}>+PL!׉Yqny"j#E>???N|@Z@M\@1@@n@#AlA(vAC7AZAtwAxAAuAAAUAAAHAۓA}A_ArAbA~~AbAc|AӊAAAiA'AAwAA"Az!Am7pAbA]5.ASNAH1A:vA+}AϫA$@@~v@8@gF@?+?b>Jwv )-J/e~XmX:]YWNo$ . !!!ŕw9 ==ZuB "ȡ'k+LOPNcquC:'ҿ;?w@qf@A6A.esAX̉AeAbAyAVAAfAɨbAA9A@AVAվ4A$MAƁAUxAA/KAA^A[dBAB8BBB BB}BB!B%B+*0B+B)B*5B+GB-+B/~B4PB9$B. AAANAtAhAAARA4AyAAvkAW^AIgA1V0A@@ΨH@Լ@n,@%=?rx?e>-%wFV'81}{UVŋߟ1G X,1$/9B)IÕO~QZQMFG@;t64,/,NS+Ce)8(,%>!cB $А}r?|}n.4QseK3F>彪?(t?8??N@,.@j@k@@^j@A]A(OA@#AWtAqBAuAD]A]RB ZB~A9JAtA;AA#AA*A(AA>;AAq:Ab=ATЪA@۳A-c4A@~e@ @H?As⹬%c{̓3\/%???_@6@G`2@|@@X@@@%@A AA'A4uAA AMXAX+Ac_AnAxAvNAsoArAp|AqAtAyA{/AAAAqAvAAWAAAAA6(AxAǻAͬAΔ AϸAcArApACAfAB+B :NB׋B lBBB(BB B H*B 9BA$AɳABA#ATAAsAyAk)AkAo+AvNAAAAܛAAQAoAUAyaAr AsޝA}B#A 3AA?AAAAAtAbAROA@-A;NA4A+BAA @@`@=@@D2??Uһ,gwH'Db#4ACz[toQ[\#[׀^j'GxM y HB`RbH? < # pNXIߡ~ע^YhCo 6Ubow-^,R>P@G|@A`A9AG%AuдA|AAgA2A%AAAAƦBշBXAVAQAeAKAAB$/B&BZB sB uB $1B [IBv B6B#B'B+`B/_B2B3B0,B0B1?B2DB3B8'B=B8\B5A jA.0AA"AAׇMAgAAhAǏACAeAP@)A3zAeA~@ѭ@@{@-?"?q=#.HWdZ͝;7wØû~8D*#8lBKUK!QnUVU$;.5/pa+(%,"D>u  5R9#-cU NXʂ:~|2jRv7TȲ[+b?Ш?iF? U??̇@^@%q@Jy@;@&@i~@WAA%A0nAGahAckAyADŽAOAzB ,BA-AAuA{AAė|AAA$yAA Am#>AQYpA5pAIA@~@k@g@-@)p᭓ d.>щl*уG? -?ė@"E@A@F3@V1@r@,@9@N@ADAkAvA-5A9RAFxzAR2A_NAiAl AmVAmZAmAokAsCAzfAtAA\%AqAATA7A6|AȔAAHoAIAِZAbAlAǞAi`BB˻BBcfBT5BAdACB]B`BPB{BeAMAAAAXAACgAX;AI'AC/MAFƋAN AV9PA]AAAAR>AqOAZLrAGxA=lAE5AQzAPAHGA>tA;]uACARAKAAFAA;dA+A\AoGA @J@@4@@@]5@?yꊾb:l8X[Zo6%Om-lJ?hVyXgz|ϲ 8ce{7l<3]2 o RSlNުM*g\9'{4ϕlnBB6}v?;@RtG@[@AۙAAoAb~AA'DB.BA̾A;:BAAuWA tA?AAfA(Ae+ANA5b+ArA@ @@}@6;?p?A!!eR WT|u8sQ2e,e'!0 DPnB5VN+\"d4P@ȹt=I,6r*/mW7C& <>?_?gq?,@\@1@0 n@U=@r0@q@@@YA:A.A6AJBAcXA|AAk}AKA B#HB jAdAA݂AˌACnA.dA AAqAAuGAKA#A A@@L@ǯ@b10?>pI$Pr Y~̵!#=G o&z3FĿ̩վ?>g?T??tY?@՚@R@+@g@ƍ@}@A ȍAwA(jA6NAD^ARA^tAe[AdAgAjSAnAsoTAyAAAmAYAA: AAAC ANA AMhAA$A A˂KAͬAAۭAATAܰB ABX+A5+AЯABpAA_AeRAS@A'B0AٹAmjAfHAIAMAkA$Ar A9A&MAA!'A-vA,BAbA@sAVOAU#AWDASA1BARA A AAQA`iAAAA;>AӦAIA AA yE@@s@Y@ @t@)?#k>8R1$ɜ%#DY` &cgMcԱ 7(Jv9 w eGh`JWʦۋW++Ĝ BsÐ K|sGrRnh&efHa^MJh|' (8l?oy@T:@+i@@AA0eRAO5AqAuAAAAAFAA$BaB B>zBBBB B-BYB B&BOlBuBB -MBBxB%DB0B7MB8?*B<#B=%B=nB?ݐB>B=B]9\23p-&SeEsYN QԔ~x"օċlx9d[ima,Oc9)n ֿ]lʾ;??h?9?F@@;@s@Q@t@M@G@G@@5AA&EA@ȪASIAkA<(AJlA2ApAmBB#KB BAAA̅AA{AF A AfCAA~uARA@@@փP@@@k̒?%Vߚ|'%KA/jM6+YsQKݿ VP0n>ʒ?v@X@L@@"@Q%@ڴ1@\A =ADA)tA9AGAYXA_A`AczAg(Al AqAymA]AAFA/LAa#AdA"ACRAAȆAʾAAfAAAɀ>AʏA AlAA6)ABBYArBAAaAA%AAaMAWA!A/AA_cA AApApA#ApA[A%)A @p4@vAߐA Z&@A]A0VA4]A*An@I@@@)@x@[l@]c@Y$@@ @W@ @K@V@>@j@5Z@K@!@=ݒ?ޗ? Rɿ#T*+tO5S tz~<`C%#ѩ#E;> }Ipx?$!FK l8 aiZ17:OEv"B6BjBB%LB)*sB+vB(,B'}B/@DB8cBp[B<B=BDBG0JBBB&iAB2BomBl0AAӲAAA? AѻAg5AOA4+WAA@E@^@%@l@?f?芛>Ŭ9Q%SSmy" n+=6,@sH&QSR9QOLjE>p7A3;-&2Us0 Okk~ѕby%,?&-MjW›@H0`ZNN!_wv1 ҿa>?X?? p?愡@.y@9@\*<@x@c@@K]@A AwA&YA?7AXAo٬AeAARA^5zAFBOB'B'BVB[pALAlA'AAYAZ_A(AVQA0AT=Ap@@͂@ @5@@Uۗ>$*ͻʦ!'G"gL${.*Ł Fz_|@oYZBA$G翚p >?N|=?@3<@nC]@u@W@q@A ALA,~A?ozAPlATcLAXA]uAaAg4AnAvAA45AA: AA :ADAAAzA&ATpA.A aAAƻAdA,A֫AAvBBeAȍA` AA갸AjA۞sAYA5Aܫ=A-Aܭ[AܖA[AAA,A+Aw&A^AF MA8A v@~@$@@E@@(K@AA )@#@@q@U.@:@+:8@6?@VH@s]@v@@`@A,E@0B@5WN@D\q@p@L@l-@M€@@??DͿڽ4WtħlH"qDejuE q{Iq0u,tLHU?G"$&f#"P V i.vsu^0=, St#l kUL ?8`e(z p@@@@;F?X?u>Pzп9q7h_h^MOwM2Y w&18@8F,K1L(KLLE]N?S??ͷ4?Ik@Ջ@/8@\@@@j@@{AfDA -KA A:ZAQArLAAnA=AfBA BB|B!B*lB"PwBʼA/VA,A̾AQAUAAAAE|A @@@NX@:@D@s?n4QAt9>Ze0dH//94/0m'{S@ ͦ0\j3_0Vw >Ym?@<_@U[@Ũ@_@Ϭ@hA VA)bA2ACxAJuAPlAURAZ*`A^%Ad|AmAx-AgAA$A%AK A=A^A4AAAyA4A=AA֣AdAđAҽOA ABxBaAMAZA߶AAAٶAΦA˘AAȗBA-h/J(*rL}CI b/QLu?|W:XtVϩz5V4e>r1m#W%(1*U*d( %1| C2{KZ_ l fszY][X\pB2 k ngo]KS?M?@K;@0@ ]|@c2@Ao[AI>pArؚAA~AjAJA.AӆAABB7B"}B)B-YB3ZB7B7 B5FB%JB$*\B#B(B*_B3PB5}B9ѓB=B=1B;~BZq+1,u_}a ċG=%0?I-?u? ?$@@(k@G֢@m@4@-<@@ϓ@A rAyA6B+pB`A䖀AJAAQAޤA AfAuq#A5D@g@@5K?2?yڦ@{?(#w"b4yb|:ŢN#*k8d1e` #  }vfY'w׾`?H|?@9@@L@m@dCAA$pA:ACAH/AN!AQ6AUAZAa:Ai~AvuAAFAA+A A޿A6"A[HAPAAvAvAA0AKAm$AxA6AEGA;BA dA3AvAnAGA*AAOAijA!AXwAbA>VA{0AO AJ AAGAt@:@@l'@VD@4Y@4?.?N@eo@p@"@ ??3F5kn \S_,<I>Ӳ>ֽb㼿#r E[Q"p I'\4؊ %BL&dQm)>]-0;R!&I[/ 0K#'Y-)+lb-./`d.+'=# 5W*|yp DtK2dZ;9ZēD^}2>K@@N@Q.@$@A]AGWzAspAA3fA`A A AA,AB BsB%B2oB9BB8UB,m[B.XB0`B4FpB4ǔB;DB>1*BCBEvBD}zBB$BFJBK BSpBY/7BX,BUIBTBU7TBUgBTBQ3BMBIBF+BGyBKMBP:BOBLZBA"AA-AA_AA}W?-?Ji$??K'@@18@X@[@J@ǜT@-N@rA\AWSxo'2AAAA>AA6A'A7A,AOutA5JAo@av@掱@@lDf@7|@ q#?% ?s?! >?Q$@@Ǡ@͕I@ou(=Ts]; pYʿ"ÿ%0؄0V,0&*{A] T0 3k3:G[xDO[yt*sqO  Bi g)(9+D~.c/Ù0Pn1j3^44p1U+'Rj!p--ğ[q(]Vw:%wV+v~%-h?0@"5@0@Ee@-@mA1AFYA},AA<:AA{xA迩AB TB MB BeBB&B5?B?2BBsBEBIBGTBE&B@axB>)B=BCBEBKBLBL?BK^+BO8BU^ B_vWBbkB];BQ)`BJBL_%BPBUBUBQjBLBHBHcBKiBQX BPSBR'B@.ARA`{AAArA{/AA=AJAnQAUADB\A<\A-A!A.@@@n-@U@&?>x2~mVoEI \5'(.36V5h9&76X6;52#y/+&G4 /c;I i,j;`7ibW[XYMVcVZW;l:ˢ%2y@8\"W[;X>fbX?(?}??c@5@8@k_@.@@@@ AAA'IAFJAhwAޢAAe0Av'AB ,XBx`B-!B.L8B).BAA>AA[AW-ALAt?:An?O@4@U)@@4jAgA}A0IA?=AE6 AH;AJ{2AL>ARAXAdVWAqA~AAAoQAuAA|A@AAZAɡpAAA AQA>A˂AAA/AyAAAVA ALQAAuAA3AAiASAC>A:w+A$l@BM@W@0@5?@3s3J8=o@@k@?LB1e>BDg[~ 9&RLk.EN"oh &_W@8ԑM%A7/$~nVZL!56*=/2565w5<6995/<*Nl#dWcN ʚ.p!uYƓ٫eS3| Džϧ4|0׾@%@R̶@\m@_@7AA,ޏAAAUkAuAAJAAQA($AKWBBBBcBRB V:B)kGB5;BB=BJ%BLBQ0SBPBPBPgBMoBIBF(BGXiBHKBFBQ=IBM[bBS^1BTcTBQBPMBTBfBkVXBfjBUlDBMeB]B^FqBX2BWo? ?^@ @f@7@@7@̣@K4A AM7Ap5XAeA AANAɰAܰ^AaA+EByBB!5EB)qBB)HB)5;B/KB7BCFBNBTCBWלBZQBY{QBYNB\,BV BNzBOGBS tBSzBUB[BWB]fB] BVBXgBkBqgwBlB`BR.jBnWByBx9mBtaBoBBhĤB]iBT4xBMBHlBI2BNBNBQbBQBH5AmAڥ^A8wA*A,ASAA+AtA_8AQ+A?5hA2+kA$AðA%@ N@@L@dy@?a>1AoqDz޻nD q;$f.ĩ478i4;0;3:e7VA1,U#y /waV}iuQ3A1"`&|{!U+7?FEoMZwgBVih]kvlhh_9UB' h ˿Vt{>>w?* ?d@l@H,Y@@m\@bA5AeA4"AQ[AoAA AXҢom3%_"K<LDSU$p`$TkƜly4~4=a~?r'@Pd4@'@_@zAȚA(bA>-ACTAFiAJcKAMNYAQU=AUKA[AeqAp/A{A3A AiA"IA &AAAEAoAA8JAAA$#AǵAA 6A݄AؑAA[AAA AAg(AUAIOA?/A4UTA@ţ`@Y@?UWD!vjvK bYzIyl92>?Y5 =${#S c ( lM i,!x|!x!)6hF[|tF)83 F->GfE #E*{-1 e11!-4A?A>dTl>:5Z-$ [9 %ߨDqx/<&ZYg>@x?@jAA A!6fACAftAAuA0AAyAŤAھA~BBtBBwB-B3B1\$B3^B=BJBUB[r_B]@B_2BbBaBaBbSB[zPBUBWxBYIBZ3B_B_JBbuBe:B^B\kBnHcBs fBq:BiBK%5Bd#B~ݴBfBB|*SBvBp[BgB!BXBObBIvԆ>C!˖ဲJ o+rs]#3(@n. 047W6h61*'`4 E` @gְk^B'-W uf j"g-T: F$Ui8x,No auxcJD]>5.C߿7LE{D8W?o?l@J@qk[@0@adA bA$A>nA[Q.A{bAqAAQAk{AFB|B+ B-3:B/|B*2BjlA7AA(A^"A*A`AuAAF_@JZ?(L? l@\@a@Ɠ[@A TA')A9Q A>5BAD>AFXAHmAKAO$AU+A^AlAyAY=X.%8AE FPBCDAI^~ 2FFyBEBQ&N tYecv@m"=sT-$Ap?#$.*1r[8< >HCH@]q7o@t @A~A,'.A@AfAbAVAlA%eAΖAAҟcANA^BHRB |BWBwB&@B5.B;B9B@2BOB]}BdXBfmBeBe-BgTBfBit:BhpBaJB^5B`:BaB_BgJBd BduBc;BaBiBn.`BpBnB^BUBzIB2BBbB~BxBqOBi B_BR5BIpBHBJBGYBGRBF5{BCB&cA׺ A/AAږ AӜAn"AWAo$oAYAM sA=rRA0A!A{A@s@ig@@}R@Y4@=@\??>1#1[rcxN  :X(<-h241/0*%'l#: O-Wf0D$\8A EA+|IAK|AhAAaAUA}[AAĤB"B//B/pB0-B#3>B hAA$AIpAAA~kAUǘA`@Qm?$I-gw J[3ƣ!e-j0y%)0 %u{ sMzA*S7K|2r:S tտ>ۧ@ @xy@@΢@A *A"mA.%A7=AA"AGAHAIhAK>ANxpAVsAd|AswA{AFoAAiA#AAA6AAAAA`AAfsAL{ALAq:AAޏA.A5sAYAbANAA:^A,1A @R@@!@t@@l?STz8;ҼT[vVe>U9X+"nZ^0$\FhFjҩilhm|{_P\eTqyNU/o( OBpL%(+>07>+E0JKNLPUBDO NO.*JτEIF&BF=9%:5H/z*\#z%-73HSBw 0dM0)ΦS0@@@eALA8JA[AYAjA[AAˌA=7AkA eAhABKB?aBT{B B*SB1B<BBxBCdBLBXBeYBlBk˒Bi Bg&BiOBjBkBkgiBh=Bi BlBjiBeBhBeN>BgBeF!BjBrBo*jBqBnc~B[Bm BB0B\BOB~yDBxBq=BiѼBbťBXbBK8BILcBH BBBA\B? BI:",mppjWuCǿ-۾?f%@P@,>@›A A3@AW AsATAu~AY85A(A&BzB.B2seB2ZB.B9dA/AATAA"AAZA*@~@Z>u @}]=+O F`LUk"Me62' nrvFX [5ӶnƣAʐ%@䮕^ gkvk]fv?!!t@!@@M@J@۠A >zAA%yA.2A8pACAJ}6AKAL'AN3AR0A]'XAiSVAnAqAtfAuAv=Aw`AWAAHAMALABAAA¬YAA+A3AU`AcA}Au AH>A5rA"TA t@@ER@c?fQ?l@?:A9xs,U.$FVɪt9nXx>d'Gv 1ݟ `ipA? zbvV7zE(^ϺԪmwe"S#)-GH2g8G>DKgQV=Z;Y?YNvJXyU TPٝJDHlJ4B1'<o6<1 N* '*3%q @rU<FRk .eXN@ABA5}TAkAemA~AAMA"AA@AZ:BqQB"B6BRB kB'KB.9lB4ZB=jBG6BK #BN BVWB`Bj-BsTjBqeBjBngBrBvBv,BuBqBqBtBqFBm BlU;BjBjFBgBmBnvtBoBpBnB`B~QB;BBnB"B}ZBvEBp BiFBelB[BP^BL:UBDQB>HB:(B7=B3X7B'-AᴊA˨A9AˆAAAz9AnNAS!A>mA7 /A*AA /@o @ߏ|@ @âp@ŒQ@u@Ҫ@4@fm?H>R"齿鿵7'Wd~Zt)L䊓-$rr,.+g,(+dd' ";1ޢ/ !j`~U*S@*vUW>-45!O Gq%-R8LCSs!q()$H+1Nð*LAwT\.d42Ҙ|?@\@;AK[A1u_A_zArc,A\AqJ5A%BjBB/.9B4?B5BB,A5AAA?A%A|AA?@@{@} (-.ZG9ԧKXjj\B}?.sak D5b<tZ _)fQG׏3D2NGqbَM9?2@r@z@~@,@A +AA"A,DPA1+`A:ADTyAIZAU(APARJAXpA_AdbAfBPAgAi)AjHAk=An`As9AuEAy9fAvA_AA|AlAAAA A6AAvA]A8rA"A /@ @Zj@)@k0w8ci- 1]+}5=WbPs`hS@W|^Gspw$J/d5v5iTeeD`F+G͢7̲hɻ#B,3:G>YA@G,8LRW_TcfefvwcYT`^]s`ZjSOOGƋJ{>9t1+$ 5]{{|5oT)l;؀쌹9n@NoA"ApAeA&AAӭAA BKBkBIB !B2BBB(~B2B9B>tBEBLsBQ/rBVUB`ofBjDfBsBy^BtBrFBwB{{2B}pB}B2&B>B ByBsbBm^bBfEB`=BZ$BU6BFB?|B:&B4KB/DB)7BNA5A!*A!A]Au4AdAfAlAT:nAB[A41A$m=A<`A N@.@&@@@~@e@*@k5g@m??/p\>~,>N<FNk+s#K$?&%4m=Z, UE Fá #X2y]7NUB9AcBhHPO\G[צsQ5[?Dž?bDh_s9G.ɉ3nP`j@O M*?JgC@:Q@@>A,APNAJ8AABtB,RB5'nB8,B7~B-BAA۸AAQ A ~ABAA0Aw=A1`@P@;L>Ck8b=!@gW"\1S6Q+ R;uPIQ~cO1\.`$G %Zni=(韚AvÆq=Vc!>CP@@o@.7@&@1ADI3NR_ VյZ_c/oim#onf`d_uic-aEYSL?D+4;3.&%ҢC ?S "p8C_GiX@p@eA/qKA+A_AACAIA3B RB>B̩BUHBxBwB%TB-B7B>CBGaBKBL0BP !BU1B^=Bi@BtB}x@ByBveB{BWpBֶBxB{wBwBt(BvRBynByuB{B{CByBxtBqbBtFBt+BrBkIBlB{$BB=BeBKBzOBtdEBn{BhlrBa^BZ sBS4BLB?iB9B3߂B-BZB1B$UAAAzA A|kAAAnAWWAJE٭)0Ɣ*) q\\Hr^dv SXvndwsje6ffh"k`tJ o/'6奃 t`^'e֜4Tj%+o4z>>@ @@[dA5A$AX|A˄BJBAB/ĜB7B=9B0BANALAAAXA>A%$AAfvA0L@?,Jw I]ZIAjCx,o5yT_OXV$H(?})S)5P N<#(7Bi!3rev hTI?C2/@@uYI@q@ƍAJAA-AA',A1A:ABZAJ]AQAQ+ARrqARuAS& AQAPAP'AOAPASATA\zAfAlAqrAA3AvA:AғA"AZAAxLAZ AjDgIp/hgI]UO ?N7S*5|((kQNs>dxehDl2x /Y[EEE ?@@wA]A`7AVAAٺA.iBcJBBBBW)BB&B.L"B7BAOjBF3BKSBT BVBU'BXB_VBiBsB~PB4Br6B}`BmRBFB{'JByBw?ByNBzkB|3%BRBRB~ BBS2B*Bz%BxBxBs5Bl BWBsBYVB5BB{wBtBnBh&^BaBZBT#BMnBFJ.B3CB18}B%B(BB 35ATMAInAAԲAdA AA`AmiAYATAM@CA>HA%̡AA@)@P@Ǽ@g@~?@j@5+??%2 7iY_JH@ϙtٞ^fU  eKeqt%QE2 n1rrU:x)$λiΤ dtrGc@L'&1HX"USBLiɈ-4HȃM̬0J;;L@{ @Ȯ@ڌ@SAAĿBpaB*B-B%PB2B*iB C6AA+AA-AڱA3A>AA5AR-A7A? (G~xH{*y*j+E4TZR!K~]aaF'I2 $a)5;r LhFA/+4gؚ| b/Ai kdk?BV@2f@,@@pbA A8AAA$7gA+[$A4ABALAVARATsWANAIF AFZAC]ABlCABbADU]Kei3l&wr~]vHwp)x{~&~' ‚'‚€ |UVoZsMm%8j_WOϳ; .>' ?IdVN\\c^`l m?9@l@iA mpA,/AZAA~RAAcQAwB Bb5BBB%hB+'B5QB@BJQBSBU2rBYB^BbBbѵBes6Bk$WBtB~DB]BB`BBB~B}B~B~B~CBmBvIBBKB3BBBJB9B~Bz By4BjDBJ;BsB|$B|[$By( Bt/|BnrBgWB_4BYJBRmBKABC@B8B*RB%BBBEB SB;fA-AlA0AϴAcGAADAAjAaA\)cA_5AUA38APA :@@;`@[@@@m@&/@"?8g>ߔӢMQ8V(_¦_6, n s-bUY,3<y S c\ǭ9dOYo6ukuK쬣@ VS b B -#QJg-FsN mC8@@Mz@;@J+AK.A̧^B GBBFB 4BAAAAgAkA̅A]AuAiAGAGAo A)vuA5H`@Kk?Tût0ߴ 'pYpbVCUuggfuqLrFAn;6o6r5tE)C4` + |[ v$FbDTIc?@Rj@]@@ZAA7AyA*AA#FA([A39A>AGj AUAPALAKEA?WA9a}A8Q3A6A7ɚA:}A>ACj AKAX\.Ae۬At)AAA=WA~ApAA)wAYA_KA;A@ɟ@I@'?tFY6? '=^_QkMT+Ha Is7^`[-*J}G ( 2"%&'/>$F" &pT5! ɂʕTٳEc=>@C@8?J@UA;A蠽BUA"A&A,AWAAAeA*AAAA^AA|%A<@<@?c_N (3zH@at:|0T3#LƨsVćCK8Rj+@5>@8ǰ)-#:Jkc?I:˿?@@*.!@o@ @,zA}A A''A+ݖA+A,dA/A8+{A?AG^JAK}AKAGA?A:A;>>A/\A-A-- A.A0aA6kA@[>ALvAAZ~AiAxAAAAgAAKAAIϊA&RA@@zD?H={|yog %e.^FZbP\*TU~R>10Lݠ-GB{>0ݺ$];an^  [&_.39,BLVH]2(g?atkFƒ}†M‰W‹fŒHŒu‹ܐŒ5ŒlЉ*‹ ˆ†~|x 5id;X+I:93&wwRm4n gTZ(Ì]eR?k@j#@͡C@A@s6AG;AGaAi@AYAwAʠA%AB1Bw"BA_B*պB4B;B@)BP>BXBa xBg.BhBrBu5sBxB}~3BmBEB BEBBB*B}B B~BBBBgBBB_OBŒB;BB6BBBr6BiBdQBa2BIBW[BmBn1 Bk#Bc BX~eBQBIEBAB>cB42B+B,tB"bLB=BYAAӐA{1A:1A 4AAťJAA#AAAAzAnAt7ApgA[2A<[/A$CA iA=@X@:@Y@ 8@+x@v@<=@m<@-?w?-wF,\"!UF[!W!'#Y">`#p$U)&>%="!B 89+ _` DI"ۤ,1b3J666h4/.,)6.&ʪ!` )ڟQj5U=ʦ?%>ڋ?MA AAAY8AXAcA-AA_AVSAA˟AsA8AWAvZAt[A9p@b@Nj(K}Ye `$1<;2Lz1Hm{DHrLܙACQAI]ANAPAO0AL#.AD4A@#A7GA,A$A$f?A"A"A&A/EZA9ADړAQ5AanFAvBAA/A=gAAjATA+A @ѡ@q@jȶ~@8\<x'I57J>AD+A5uq̖|RCnXS.^a.l > 8%4O>UBE9 I{R{x\fmuD‡z‹?Žn‘%“D””>“’X’t‘Ž,‹^Šˆƒ]€{m}a?W*_H 7&bY@ -We]`|Ie!(]WMDK~@*@ʱ@@@AA;A(AABEAADA6(AAzTAqAwhAi$AOA=A&5A!dALA@t@v@~@]I@ϸp@g@/h@m@!?=>\vI꿎5w6*j?D}{ZD+ =`Z kx$z*-/K0pe1K6:'BDVDCB@=5>;88c4-=#x fA]c9VoGJd=/b>@Ah%AAAAiAA˵AAAAǝA=A%A1AhAY?.A:B@|@?/I6/) 's?$W\3Sj-c9Otл*}~sY*9;> e$ ]x)5^71 J+V!T]vhlb ;Wϻ>3@4e@HB@@rAA$A;AS AZ !AVASAAVuAZA[?A[A\AYAZ)AUXAN9ADtA5AAAtAUAAA#CA+A7AE AWApTAsA^AީAUA*tAh@u@}@ D4xn @Pp ?Qub8ۦ;0Md.B!rkJ5-,`Bߞ/  z =YLF'\g R L n|3 \q)5BfLTs[+ b`.mQEh%νJ=i@a%@A+?Az:AAkEAOAΠAšBBBA/A >B|BB8BB)iB=BM׷B]d6BhBsBxABBB?BB BkB>4B2BBBiBqlBk=BBBBBOBRBQ-BB(BB BB}[BqBq Bb,BnBj"^BeS:BaҷB\NBU>BJ^TBCU&B81B/B)uB$eBBeBRB SBA-AHA~3A˾AtA90AA$cA[ACAn!AzAAAhAsvAoAcZ AUADA0_A#A#A4mA cAAA@K2@@@@RQ@1??sa;?<>)I?>*]oU6ߐ Q lw'P.9='|?XBL|E\)KOէPHNLHʊC<2* $  [Xi%p+Ƥ4-BIL4MMM{LJHEF?Ў6J,=A %ˍp$Qy=emG?nA+GAVA1AeYAlAA-AAA0AA0A[AOAa=/A9rA+A@w?[RY$ }V*xv5[hv 5}^p4{߬@+KbF7/3ҐcSJaA-09,[!*=U.IBQ?<@8@}@A A";&A3AKAdAhAh5AezAfKAelAgoAgJAfFAjAiHAjAdaAUIA?kA(ǕAC~AڴAuAA{ibpNw9l7Qz f6 $5qq? ? GQm%z5&R'D.:k/CtORZ4bgippzƒ …‰@–š' 7¢F£3£ci¡%Vž”sl›™•_‘~†‚@}nb R/|?/F! b"+x},4f,S?7-'ɶҿxb@GA_' AZŨAJAWHR']/*g%7pw}ƒŠMEŽqyŽ”œˬ¡¥?§¨|Q©^ª}§¤|¢q! Lž™dz”(ˆ̏‚=Z~>o_SM=,|:AJG]cDhA0@A}AA AA|AA᳸A"BB B*B *B]ZB B$*B.2B51B6ԲB<&lBABB=B<ۣB8B6dB5p0B7%BMkBn&BBiBBefB}B2B9B15B(6B!|BBVBBCoBzBAA{AAW<Q5Wr"d 1')4?6J8W\/b0ggkoðpDpX=n/l@0gc ]QJFuETC9A^s@D*HHL^SS=WXYY/Y[%Z"WQBJ}A 3#]ZpZn'ZJf+0AfA?AߺAAAAYQAYAԖAekAAAnAAUAc0A.C@%@:@lw!d6[ds=­ǹ+nl 37Q5z.K:#  `? (Kf bGjƿ`Je?;ݎ@^ @;@bA A%|A9ǞAOA^AtAוAA)AAkA~AyEAy\AyAAXAAHaArdAV&A1AQAA@@~@n@}AmA1bA1}A9@d@x@9@$x>#55NS׌fU@Po;Z6 lf~`D1?I]7)z{-;~?%wP%X*C?%>l: ex# l)U*/4]@K~ZU߸_#i]s|+‚1…ˆ–s•R˜¢N¨¬@?­®z¯¯®4«CF§¦R1¢œ—F ‘^‰j€{Vn\:HT:I'#Cw$Hk uKh d@tAq6AZA5mAA͘A]AB`BB=B&mB.XB6IB8"B@qBE7BHW,BH@BO-UBRBQWBPBMvBJ!B-vBB=~B[=@B}&BQB'Ba"BaBXxBB4B\BBB:BBaB~BdxBdoBBdBpBn@BBoBx6BmBj<,BkUBhiB`'BWBOeBGEB?YB8B1 B)OB!#BhBOB eB "7BӘA A]A݄A;AªARAUAAEAWA'AAp A#AQzAAAAA4A~MAtAibAbAUQAHAADAC9ABHCA8^A4 A/4A&\uAA@<@E@Ҫ@E@@A@QW@?Wu? dgA`ӇBg"]+=:MFS#^zej4Io۔v}Mxx W{ӟwYqh"_8kY5VnSPR TW+[IG__·`_^P^h[WQISV>|0ot 矎(fiĿoѽX㾁z\,w]1٦Qv 2WӠ`?Ѵ eML0_64?kO 䰴Q}}#M[kx^у ࿀Z>V?@[@@bAi&A1RAJ|A]An4VAQAApAtAzA0AA^/A<@AG{A1AA ATA]RAi\AB«A*AkA M@v@,^@7@"@ݍ@j@@g@v@Je?}G@X Ɔ&D}rg˪v~{({ϧ{[`o`&^Ve8=700$~?/L=Z<:!R$v'[S)F)o(g&0$%n" ))))[4$@KV O`}2jut؁c<„ˆ%‹X%•kœCŸ:¨ww¯V²x³φ´i¶@·¶\²j­¬)¨ ™”L)‹ϻ‚{kkYWE^59 FP=`'q@1AGAAAAΕAXBHMBM/BQwBZzB[~B_B_B`IIBaB]+sBW?YB=B BJB_7/BvBBBBBBBtB|B.BB(LBBB %B2B7B BBvB^bBk?B^B qB}&BtWBsBlsBcBYBPB9BFCB>B6B/2rB)ݫB#nBKTB8BTCB 51BA~AkAHAxAXAAܸAAAȱABAiAAݬAUABAA\AAAUAPAx4Ak$A`!A_JAYq6ATAT AP+AL3+AFʑA=YA;&A4{A(LAoA/+A޶@ ?@@,@p@2? :> EʧLz˝zr e},)6CWN [s/gzQprw<zD~vPo}aj.gScNaaVbccNdqd^Na]/_`]kZ>9U MfC7u(rvK6ԯV@/LC? d?Y/@%AP@AZAcA,cA%AN,A $AGAAIAmAAALA$[@@#$nqūy/dyA=pWſaqש3  h7p ye;j["j o|NuUzYj?3?@9{@[@e@A+A9rAU3AlhA~i AY;A:AAAAAAAAAuRAu6AAAnAw>A\vSA*=AAk]@X@߃;@m@8@@`^@@_@>ٿۢ]z4&MC[k(~WOZO{^c#:rWKF &PCݰE?{ CU!&uQ*{,sT.j/).}-V+~++@'9%/@5]KIU_6Zj"tm"-„ˆŒ!‘<”V𢧠¨C¬T´·E¸G¹,º=»`º¶°®3«¥(4œcP– Œ‚zajV*>O,slҖlzaK)']H@A9AlȷAg%AVAAٓA3B B !BB'(jB2B=B?ɶB?LgBTB[ABd}nBkD7BbHBaqBfgBhdBi?BhBeBXkOBKk$B] BwBHBBBBrBB>B8B0BBBBLrB 1B4BpB!B2QB7Bo@B|pBzBB0~BtBmgBc_-BZGBPBGB@JB6NB/ڋB*PfB$.B`BA]B6B%BDA(5AIAAJ|A߿A}4AqA AAANATAcA)AoA"hAsAAAAA#AyRAu]oAnAdAd'AbҗAd AdPhA`AYARCASaANAD}A9A+#AJA@h@@R@w@=?T3?%.9Pgl, 2>/',<4eL\ly|l=+2_RS)9-#N/4Z#)|w+s1pXmkTifcd`]ڐZUhMuDJ9,2O#Xʢ-,†>OZ>BvXR=a`?^@)@q@@A%A#A?iAYihArȳA$A]:ABAWAdAi AAACAAf AuvAhAAA^ALEAy'A_zAGA2.ADA u@HJ@i@@Mm@G@$@;V>xxϦH(aYJ=1ar3ap(}MB+O¨DVž–e‚S wg>P@9*$v ׏Zgƞ&^wYԣ@}oAa/AJ00AuA'AsA4AA~B jBn{B#kB+B9oJBHQ'BNBKhBcRBg-BvBrCBgBhhCBlxBoPGBlBpOBlgBl$BcѧBvBuBBBBBLB_BB]B.B`BBsoBLBB#BEB]B3B ByB{BGB||BuWBk[BbMBX1BPBHB>6B6B/3FB)yB$B$BBXBBA4A"A߬&A&LAϑeAU&A[A{%A[\AAYAa.AAs9AAFKAaA?AA|L)Aw6AuDAs~AqzAnAh3Ak(9AlAoQAoAj(:Ai Ag9hAcA`ŜAV*fAG>Auh)Ly%7SH][ˇl~Z=k %wv̎ *ό6]|m' ldk: }iysؗn<&hb]ބXR qK@LAvA/ۅAH\AdSiA}AAAIAAiCg o=&nH|H |Z.3Hr! b3[Jl(nӚq#RY|/f!׼' i1,I608]S:977';3x<=ϭCpL/OS[tfeG|q}ƒˆ^ŒE•_;™Gžu¥q@¬{±2µ¶_¼bx űƼoĻv¿·9³±1{ª}¡8—3rʝ„?v=dVM6h Iȗ6eQM5N@4AcjATAAAd$AռAB B?BB)B3"B>BMBU/BRBruBz5BzɞBnBjBo"BvdBvBjBgBvB~2+BJ(BBBBBZBB֣BϩBBBBBBtBBBBgBYBVB$BRByB|BxcBxBuuVBmBc1RBXBN$BGB>۶B7k6B/B)nB#nB?B2BB _B{A`AÛAAAӆAƅaAe3AAA;AÜA wAqAwqAAܵA!A}`A|Au[AqAwY AnRdAmAoAl?AjPAs Aw:Ax:AxyAuAubArպAk-Aa%AVAAI.A?]A4BA(lAA@6@F@0"@\?p}?5a, Tm)QpB ߢ1F U!i}a^6U |q=M y?pϺJ|b3{(rz_iax;YQIA8,7t;\>?xL@{b@ڙ@wAk2A` A6AC8AqTAYAdAAlMAmAoKRAc !A;A-@@nq|L޲S~Sș[ "W6Aǚ0%a*g[Ja5& W>ЋnN 5?gA@@KK@L@@@A{LAhA1ASgAjyA~0AAAAЗAwAAA5AAvAtAAPAAƷA&ZAAA6AK#AAzaAbAUIAIoxA%H@xO@?@7@@<뿒%#V6T.q ڬu%e"ԮX-ѩ~~cb0[IXXn#+T'b/q9a=Y@8?V==2u@AID_I)RYb4l$xH7:†ŒV_”tI˜˰œ¢©°2µ¹U ¹¿|?&ūNɥTȹ½^¹FU´¬ £™PŽƒK8v-d*Lu3L`J#\qcUJʭ?,@AALGAhAAAABpBB'BB2"B=tBJBSMqBUËBR-BjlB}sBDBBy\Bo#&B]IBZ B\S^Br"hB{BB,sB@BVBBmB.]BBˏBcCBBhBfB2BSBjBB5BVB,BBBPB*Bv}@BufBp-Br=Bn]BgB]8BRtBFZB?B7B1ۋB*B#BB)B*B B@BAA,Aޮ$AۏAUA_AMA*AlA 5A`8AU^AA4AIiAFA{AyAr>Ak*AlAnA(Ah=ApAt_AsAwAxIA|;AaA_AJA AxAmAa*AXLAPrACZA8^A,#A &AϘ@|@ @j@>Q?`>n*O?4:ߡ|6f {g E% mTtTckXFdXu {GКz)z_FAz}Zj7NșzSRB?, @'p@&@@䧁AG AAlAΨAA.o`ACAUfAvbA%^AAAAA/AmA+A:A#AhAAAAeA`AhAA1AAA'AApAf3AVA5_A8A(@sR@?xl`Pr|,bk?zļi9,&~wE_9Bo\\}Sk-5 ,({{/8?@}DeBC~BN'DuFJ NΛW^rg*qj|޵„ ‰IŽ’—fK›n ¦­f³|¹/½¼G=~*n̩F(k»µB­¤,lšֿŽƒosSaK(1ĽTg@Ь3 Vo>r@pAvmABLAA/AyAğAUB fBB+B;,BJgBSIBXN(BZOBS{Ba~BoByr^BvB\nBCB1UBH%B(B;VBBB~B}BEB BlBBE$BrkBۥBɾB"BBZBJwBrnBqBBFBp\BxBt{BoBj߰BmJBm?%BiyBa BWpBM$BD#B:NB1B- B&aB wB.B&BB\BACA1AU\AݒAcAJAAaAAAAAAA|mAF|AAw?AqQAnEAlAgAhqAhAk^Ay-AyAzϯA{ݨA{AAYAA,dAAuo/Am6AfA]ʚAR“AB~A5A)heAKzA@݁z@@R@,(?^>UQen^gs@&:HNe=xg<=h#vKúAv(R^)~Swdf> nGwkmq^-R{ E9\.$!g6CND[p]Q8Fq4? ?@s@]ARrA-A(AAAnAoAA$A)0AAAEhAQ@?Φ@W@8@@C>A'APA#A'A3iYA; A? AErAPjAjiAA AիAAթA:AA;AA]BA A,AWAUA1AA4A0A A,TALAoAL AZAmLASڮAMizfj^%2cxį:ۻ݀ \,"|.j78@GFGECLF HJN_R X/akwv`X€.v…7‰>qn” ™=£ª°.·¼¿J¾UC^͛nKE ͖1ʤȽ1¹l°a¥š_„gs_J'1%m6o0! Ti@G @>A0[WAq ARAAػA2B BŠB)DB;bBP#-B]BaB_DB\B>B[4BpmOB}BvBm]>ByϏB`=Bc{BZB;BB"BB/B B7OBBBGBPB{BaBUB BBBB+B5B͘B|8BvBn["BgOBeBBiGBh[:BdB[BS/BH=BAAB84\B1aAAA0AAA~kLAsJAkAbAdAdAc^AbLAhApAsAxDAzBAAXAAA2AuAs0Ah0AbA\zuAL+A9ZA*+AA Q@U@"@@`F?>m-2a^'9M7cKy8/t.f;ĵɅ!.TϬjȐX NI-7W,JHxxi [}L;x,lV% Li(axL= >"?d@?N@Ϙ@AA%rAB{Az+>" 3!NQN>+-‚VʉB׶giv.܆8 ) Ϟ+)b_9}048T)k?@<@I@@TNA9A 'A)A(+A*fA2>A<dABAGSAMAO`zA`AjA| Am5A02AOASgATA1AAAAVAAA0AHA #AANAAFA}AvAs APA_^ARACA% A@B@#0ºGOx{Ä2dGY`D6!C]L_'pprU1eyDڮKsZKq]!Z{0C@K JMEuIcL4O#RWB\]c5mGxE€…iŠ0”šDžJ¥¬_³m¹¾%5-C!tX0!B̖p3$_» ±d¦š Žv&%l\eHhJ2h rE.Wg!B@,@*Aw'A[7AAA A+BpBNB#YB1/BH~B\Bh1BiBegBWBhUBuBtbBynBB!9BlB\BB$#B~\B~vBɠBBB"BB8BHRB2B_BT*B7BJB*XB5BUBBBzB}gBoWBfAJBc3BbGBd1WBbB]eEBWUBOpBEB<˞B6 iB/B'B"(IBBӧBB3AAAIAAs(AͤA'AsAAʫA0AUAAA<:A"\A(hAxqAnrA`]A^+A^A]LA]h?A_AdXAqArAyxAm ATAFAݓAAA|gAjPA^WAWµAKA;A*іAA ]@h+@r@ƪ@}d@]?m\b8] m!q8%LbyFPp59Xy`DڨW"r7|̡ w|TvIuNv\dbS4Aw0` jw\1GIDHz4?5@@~H;@@iA%I)AAA_A"^AAiAhAA3AAAAAAwAHA{AcA|cAqApgAySA)Ax)AjuA[AN5A92AE@b@qp?q ʿT. Q2{-ryvdGVaKF[Dg=~0+1%Tc ][p|lyz Eu$  5LoDְIHgKRM _QrT9Z7`X4e%nx9z€cy…zŠf”™Ÿf¦z®j_´ »Hi3’LƵ8`vf Njw͚vɮÄ»3C°Fb¦;›Ž €xhW]H:ȶ(X Z'B'BIB(rZB=wBT3B_j#Bcd7B\BWVGBatBlGBtBBpBŃBkN+BkBSB(BIB7BcBBlEBͳBBtB;BaBPB BRBNB4B\BLBWBxNBt@r@D?aa=^=:?EeV4CMe8|~0hO%˯lN$å4̫pڲ:C^uX5SUܓ׭Ҋy̿Ųv?ݸzI(2?d{Cbk6֣K/nSKb{u5Ɵ @վk@@q@C@@{AA MjAA)*A6 A>[AM~A\AjNAsvAwA A-A!A5A/A,AAA&AA<AAMAAA̒AUAHAoAAuAmTA|A AaAA AAeAWOA7RAk/@aV@@@k>B:Ud s12}97M3/042,V>URmBES9r)wÎT FA ^3$:_CIK9S/P8S6Tb"Y`g6n|vxm]„‰'gŽmS”š¡h¨x¯ ¶O»ah~R5 gZЍ[rXYN]3º±M§ šg PZf{VJ?S)&l4;1_G\ll_9@d@A0eA[A}AAAAB B!\B7#BG"BYB^B^lBaBkBtBBSBB1 BBs BFBmBBPBUmBQB*BpB3@B ZBBBB8B _BBB!hB}B{pBuKBkBbqBZ*\BW3.BWBZ߼BXBV.BNrBF B@aB:}B0B&B [B=BqB [ B+ AyAeAAx/Aӻ A%AxAKAcAM4ApxA,A+AP2A~MAJA\AkΗAZAUiAW3#APAJ#zAPAUbAUKA`sAg AyJA4A,AA]aAY1AD;AxσAn AaAQA>~A+AhA@9@˳@@m@3O?kF>5%!wzi%ܕ6VdP0cgL|`OJeR,U6.Ι-׆2ߝ` h+vܬS|w܌F11D:hn"XER2!FC6UhUtI?Z@@^@ @l@1AA6wAXA^AOAAA A~AA j@1@SX>?eEyײ^9m;+l[cc,vps@w&RX(R`s;{BuE<RSȧA}XhV9  8Y(5v@/@i1@G)@'ASAA!eA3.-ADŠAQRAbAsNAA@`A}A3A%.AzAAA^AAœAϱAATAΗAA^Aa AdpAugAAAiA}AAjAAA-MA+PAADAUAiʹAOA'|@y@w@@{tu ^ R%.W|8,C/ǘ?P@J%7'lF{`~az{I~![; na->UGU8WJT/"UX`]{d[k'sL2|t‚J‡CŽR•œ£ª^°·rs½RW>0dY]ˡTlIϴu@A԰#\<\;º1°A¦› hiTq~O?K:,pکeyg ޓB?@-@âA(qyArAA(AmAA,AɇBB;B*jB?8BQB`(BdBl~mBrBxBeBػBKeBB}}TBiBw@BSBCBwB`BDDBfBqBDB?B>B8BBA''%00 Ɨ3O'hB2buqa{'C`LVҋ[7r `[ RY˺aLzt4iS>S+Dl٪aUJ#QKǿԖF ?^@;$[@@ɹ@'m" 7hBSaqeyb28,FTk-ml%*IFQi:!> lVS@6nnl#D@4/@@=E@AA:A#A5yAJݧA_As;5AA AZA AjAAЁA!QAjA0 A7A՗AAA@gA䑋AݵAтAЗAѠXAA1AA/AAAKA,AAAAA})AA{|AVKA3A]C@7@P "ު]:=˩)$;y1"(2mg3EP U,hT3V\%^`uhYŮ@(b"h%׬8}9I]TXC[²G)¸ ½p(‡ȗED۔SӤ{D8ɝº±p¦šŽ6€ hXJXߵK@e$T@Qꀒ 퉾}@\(A2^AGAߜAC-A@AؔA{BdBRB1 BIoBZBaSBlB|BB&BsBBBiBFLByB]BmB0cBaB BB/B1BwBRBgSBuBE^BBC0B{BxsBu@BqlBnaoBfBZBUx%BRBUBOlBJdBH3BGB@B4,yB+?pX?8@e:@@†ALA$MA/)AH/AAAN%wAHAx~FA<5A2AOBA$HAm=N s~ %QGz #5hk*рl(:MǰZGxSA~eToe: w o&)> $g@I@@d@EAA+A'jA<#AMAdVA]A AaA}AAVAA҃AFA4 A;AwAp6AZ)AA/A`A:AcAܑAbAkAoAAQAAAA3ASAAlA`AAYdAApdAJA"@sJ@ ? M$}P&2Ы'3?TE RKG+@:~@F+ZwF_D}Ǎ :imBz(@aRW"X\ZuV:W#T\ cirf‡~—jŸ ¦1­^³7B¸F½>.X&ҵguˊi¿'Ĉa¹°¥zšxŽ?8g\Fe]H=bwc^Feic2U NImH?l@AD8A_A#AAnAAB /B%SB;|BLBTB]BjBBXB*BoBBgBKBCBBBŲBB6BV8BB[$BB7BtB}oB}VB~gB|LByKBtCB-B%[B|BB j@BAiA'AAALCAA#A$AAOAAwAPAwA%A_AmAbAa A^ABA+A&A)gA.EA/eA:lABAH)AR+AV\A^AcAakAjAb A_[ASAH0A; A*K6AA)L@5#@#@@3@{4@!~c?>['4Q/AHb ~|ޒ}X9ˁ@Zg&Eic  ́<FضeR(+7&|aID3H _?ˉ-z$)_z^?{8l@a@@3@AA7cA6OAW,mAlLAW*ATHAAoAX@@F@Oټ:3IE&W>}47P·qS({ C \q&&6X$"wOW a ִclYg5tb nv2L=?w@rE@b@@A[AZ)A5AKAA{AARA A^AϏaAʂAŁAAiAnA!A4AApAA}9$AbA(@K)@ @&0>pbp1Wu1v RL'm.]??-@@@6@@RyA 64A:gA^ {AbyAZWAX>AlA)c`@@fF>R_?(ϺZ: -pmF h/YY+6 5x! +"Z[!y*5.RF+ 'o#"{do8V=IX6f^^g=ER.̿ß>F@l@ @@QAA-xcAE,A\FGAuAƨAAΐASAAAbAO(B*DA6A]B/IB B BAAUAvAdArAA˾AhA6AtAEeA!AJSAAB AŠAAAAֿAyCAQj&A,@@@*~>Xrj翲7%UyYG /z%1]yV (% Ri8;{Ÿ~⡵0K<'LPTgtTRMHRtW`n~V‡Ƨ—ž'¤yª°¶}i»:f¾7¿´]{ ay¾k¾y»µo­A4¤|™*f]smdlic<;&10X"ׄ/1d)ͪ8SkiS=7J@A nAHtAHAA&AJB"BwB T B<BE-NBNCB[lGB\BgcBRBpB8ByBZ\BxB}G$Bz Bxk7Bz]BzB|.BwB{;tBw5BmBx5BvrTBtBs2Bk.BdvBirBeBaBcBWzBRCKBI|BLB8XB5B5^dB.M3B)oB!B>3BB BBAAAaA4LA.AIAˑA˔lA A{APA6AphAAIpAkAK9|ADAAA3A%A"=A!A!2A/:A5-A@S@F@W*@fAsAXSA7@4$@T.Ao@ ?e3hQt "//Kg)ɼV~j=$ e%+2>1P~1 l1b0-\k(q"}z>.TĠ^Ҫ|[r:6IsH k?j@^<@B@YAZA,ACAYArAH-ATAAA-A2AABAI9AYBBBYAaAAANAeA{,AiAåHAA{AlOAA`AوABAGAAAgAAAx!~AVfA6A &@@pN?(3r摿7x",YaY&tլ g>Tjf>jbJ!b#-XΊD &o?HMOJKS a_Cn~‡Z#Ž9”›7¢J?¨®p]´¹K¼C½ZxY-¿`¿`V¿HYK-»´8­3¤~™3Ž‚qxu%wrqenDK/_5觝6wNc/; ^"?v@A#;AViOAAXAZgA(JB ]B>B+BB iBIBXR)BZBbB{eBB4Bko BX0BqBsCBpBn3BnMmBo)BrBr%9BqcBsNBgBo͏BqhBjPBaBWBYyB\BXBO BO.B@ _B=#B5B7B,B(!JB(.B$lB=BFLBsWB [BrB_A"AO2A8A?A|APAqA=AA3AAlHAAoBA9Asx^A^uAAA8GA5qA-I{A'9A,A(`A%/'A,A6iAFJA?AHALAA_AS~\AQA@A.1A"}AA h@l@ܼ@@-@<@Th@ ?h\xTWڏ)r%q:Cd,PsKkn’[{XE*`ocD -l#رV * H b4{T-2`jMguy \D /ރ.?| (?@H<@+@WA`:A(A@aL@jpv?r$ȿե|6=̠?Wi_Mgb5~Z>5[28O)@,x/)2g88T4k4k}4yG2."(" ACd%UqT 47 9]Q?B{@OU@R@窥A~A,|AEA`rAs2Az AAAAqAhA剠A,ABBe BڽAwAAA uAlAhQA)A>AA A}%A AAmAAA:AHA[B 'B"B59BJBV B[[Bc BvK BLBBSBY{)BjWBjMBhGBeUBdD;Bd.BhJBi"BjBj>BaO4BY1BV>B?:B=BBBPJ BTzBMXBFHB@B43B0iB-(B)dB%wB"NBBm%B5'BKB Bn@@Ϊs@@)@x`_@?N?aN:>6BWyl=)ʄ"/>QZ@{lx,AMb"hT, ̣"a%$%&D%#!i 9R[tH+^sUQ:Һ%.e]l.`,7<޽o?{>kL?\@A R@~@@")?jo " ug .'MQ_1PAJaLR&b}]2w@]7L9?V;(754V0-B("΃ #?{e`)_=c Q9w?,@d4@@1'AEA=hAX`AkHAx2AAA#AsAqAAeAA=;BGB2BkAB34A(A#A AA䉹Aڐ$AAEAGA}AnAA7AeAeAeA#A*AaSA"AA:_Az%A]AFA3 A@G@@W@@k}@FJ@&*?bzD02C*w# E,ǏW7!UYhLh!gsi#,.bh/E Ej$8l '4g 4X:xEP`]3jϗw‚.oˆi– œB¢Nx¨-­²³¶º »&U¹!¶O·¸·q¿M, `¼· °e¬£T™{0B…}~vskpME=H+ GTf oz58 @=Z@kA\A>AA$AhAB WBq>B&~^B>BMwBTzB]BjBw9BtBC BWBaBa,B^;B\6B[TB[h+B]ʨBbZBc Bb=B_BPBIBB)B!6;B&-B%B4B=,B?yB: B5wB.ƠB*#FB$usBBB7BvB BBAaS^2P:0u 2#6VO}jppAYoWTG A ]LSQO!yn%o(B)*;**[(k%!y t6H %8aD0OWm/qaS7f a ڜm-Lu&^>Dh~]d ZT]Q=0g*2_؍ 5g `n d2F);i:G<8]42.v1?+.+$%00EXM?c6RDDaB">P$k:5ᄒ!)@ f@.@fA/A4*AQAgAu"A3AVA-AA9AAAAwA9AqAB6B7AAAA_7ANA"lAADzA5A(AAfA$A7ATAJAAAڌA:eAA6ApA[ALA:A}rAf1@G@L@@l@h@;@] 6??=?yO?c¿z5F bl7Y2g OVk _?IaL6-:M<(T07K:MZ gDrj~†Œ]*’~˜ž¤&ª "®̳¯E²¶s8µ>f´-¯]° l²W¶»^½¸Ѥ³+0®=rª¢CR™^<…}|(|tq_R2$A1jL;E.ף Z;2{,?;@a@ÂAAAZAxA=A1lAp'B BB~=B'B7BG*BO(BW&B^aHBHVB?BSBBXBBW BUBSBR`BT9BV.yBZ,'B[tB][B\BV߽BOi7BI\7BNqBJB-4B ~B`B6B:gB6xB-xB&B"^BkHB1B/B$#BBuA&A"iAAAAA0WA׶Am+AnAAATBANA2A& A,AIAiA]AS\ADpA1XA1"A!NA(\A"JAACAAAACA#A(^A51A6A4A%S[A=A N$@@%@@d@T@=Y@X?ʾ3xVCYa9tDJ?>G/.E5U]cz)Bajj4.N ojj!&%*,.. .e.,xy)tX$sP T jְ0A4tvWj:jXѿNL#ϭ4.?sA@@|@H@@#@d@)D?< 3%]9{ ]f1j0G&ֈl u%hj!i$BEA>Y=i;~8+3/,'!* M39| %tv$W6Zy,Og?O @X]@QA(A'VAM1AiAA)GAA@@7@AtA@w@@~ ?@>@6i@C?QF z#-OF_M IY!"9 $d̦'/`e7P.8$4.pAJSDdb$kʴw‚ˆŽ”/š? >V¥0ª «®uU¯_±±y¬Iª­D³·G¸e´H¯1­¨ŸS—fŽο†&~txEJs t0Z D1D3+t `] )M̗Fy%[21IόR>8x>@ >@(A3+AuAQAABBXB 9lBB:%BEBO1BJE\B.dB@XBKBMoBLqVBKBKBJBLBOBS5BUBWpBWBUKBR)BQBVBYyBW"WB;B 1\BX@B3B2,B,6B$B_BGWB)B $zBjBA2AA/AJADA~AA%AAB6AAA]AzA}IApcAg92Ae&=AS $AF+A18A% AAADCA8A EA @A $A A :A͈A A%fA+A- 7A"AA ُ@P@ޱK@!?@@`@W@c?i>AYMnvc_D 2NDX8o3kT-Œ`av @ZM -%na)U.0=122'1u/L,'&o ; %'|_$AS{؛^?"9 @ub HYDLqԋ?B?@6D@z@D!@@`?>E5~: [=L#ڈ] sìr/W.\$*$NZSJFDA>u6/! )h#GK@p̳`Ȼ٨iG\ i8rƾ+@K@P @A!(AIApdAa1A\AAA1AA.Af[A3AAADB4AAA ~A!TAtAiMANAA䆞AACFAŊ7AAeAYAsAIAAAaAAaAAYA(AABAk~[A]ATAC)A/qrA KAHA AMA%lAm4 i ^B{'yoj ;Z$ѕx>Au (:M]]fp5o|؅„Šu•JœZ¡¥§ª1¨o«ªE©3t«7¯5±V"²ZW³)²U}¬«+A¥.–|Ž\.…|tmuapXMtC14B$)B C^ױY6iHD,@IA WAJAAeA7ABBB#_B3eB6\B@B;tB-ΤB<-BB0BB0BB*BBBC*BDbBFBJjmBLJBNJBPBRBRoBQBQBS#BYjB[6BTdB&ABB*iDB0B,#B#0(B]2B%B[BaBzAosA AA)AQAˀAAABAdA6ASA#Aq/, <ϕ i\t!?Ώ>1;!_?}?(=@ =?s\X2^6bEm`gN+W}bՆR  @0R$L 8$$@}j?OB ?g@S?%7.' FA+!]M~8tyT/AV{@ @?@OAaAF$aAoIAMAAfkAqAզAuA4A@A΍4AA`AEABrA.AAAr}A;A0AqAhAA*`AKAӓAAAAx)AtAAFA?A7AAAAlAAy&AjAXIAKA7gA'cA&wA(,A$q&A9#A1>AA\A@0@G@&@@Ih?A??3ż=o#]=?at#)}# mQw6m8DYfBg K%7&vHɓ\b8hDs €…+‹_‘˜zœ  ¢Ҋ£,£@£ڄ£[¥©R¬y¬f©P©G«©v¦st¡š؈”|…0{LqrIq>V@C6&\2V6 VC& "cfg9 :(y@"@A!{Au`ALAuA\ABX:B(]lB(BBl:B*RcB1)B5B8B9qcB:B; BkB?BCBF6BH9BK2BN*BNOBO BOBP)%BWBYBX!B:#BB$]LB.dB*B$A9RA7{A(A;A}r@@U@@/@Ч@Q@35A[A A$A A#AU_ASVA}AV@=@O"@#@@A@@ҥ@~@2? X 'f 3_?n*E*]Nyξ,UzHuXU :dq>"^'mi+)V.2#46HV67BR51ٌ/g,%%JJU++?g<(7x78p=gi.PsFΧz߰u29&xb?[^aR7P>Pb rLwjQ !#(,/n'?&S*_"mOA(A'eA5IA1@^AC,AD\>A5AyABFA G]@a-@Z/@հ@)@S_@7?e??"?[>yD(wv&S+p;,0-Ӭ w3 qgm"Fr2CA7yzY]`j;v:€=m†"Ž, ’ Q•)BštE›(žJ{ž# a¢£O¤¡Ÿr££Ÿ˜CL’G‹„QzA%nA)@|@@N@Ϣ@+@(@@$@@0(?nN=d-ˢ [m]7TmX"&pWJv~^"=^ ?$)=-1o4s;7g9L<909m74~0H/,z&?s5+ /-cjP^trrhkfx9¥'x(.&<Eh;Fk8g03y0OPoa!u-qr&('}hx\ . ,2145}-F*)~=su"bHuAG@ԝ@@4@@Yn@CO@(|?#I[j]1P8҉:p'r(>kNǂcδO V#N(+1jQjWX`g6jXt(ˆ$$Š"Ži”“)2“™—˜™UU™Ƃ™m›š–’,”GšY›”![މ‚zw:o:m˗lM2XIU!:zT- \UܟN6u#ܒa`X y f=(@AFaACAcA(AA߱BBB ndB BB#B$_B%B(eB)B*B,"B,B/CB2B8TB= BA (BEVBGDGBIoBI7'BJoBPWBOBG[+B,ZBhB OB#B,BB"BiB AB pCAA AA֪tAA(AAhoA{AAA{A4PA{FAf1kAS?AOA=A(A=UAAMm@p1@@֓@+@@V@`@4AA]At0A AAhAA:A Ab@F@z@Y@&`@t'@y@bo@@˄@ٲz?۬@t25ك>-(tDbe|.$1bpu^. E`)K"3'D+?.x2699;P#~kf=BVvCG31; ] ^!y=_DMCeL2XKvxǘ#(ȝO1/NDDz|B_A mJeUe/l3kRDl&>W9=2<*e$o q3ljZaY Ma An84L?ڐ@A[A4_AZWAxAA>GAxA%JAASApAՇAԛAAT|A"ABL%BCBADAA씣AAAەA׋A;6AԋA/AAAA`AIAߐAMA46AAvA3AiAڇAAAAA0xAGAA}/'Af;AUBA>A2cA0A>AI2A?FA=̏A,5AxA~@}@ڜ@˛@#@'5@p@@;8n??K辤Jn>Ԝ?h (9Nw:At!0;  5N4 h"~-]BCNNV_yjPGvr|)ƒ‰ˆ֍‰‘Vm‘ ‘;’M’'“ME“*‰3ˆpRŒ:Ž&Š,j†/‚D wo2l`,HEz: - !;EjZ:dv~?rI?߱@A AXK)AOAABAB ZBCBGB ҰBIBFBL'B {`B!B"QAB#B%B([B+ B1oB8(Bsls( p|FL$n7) -1)5mw8;= ="<:74#.)z"[ E7I54oءuz!f[3I[ CA6:!u%sِlR"<f'Ba?[+_yl/xkU#+8+ށonwhU2{Wy4„r‚t*qp0 ^L~?;5<9b0u(lS#w# &;J{!`C5%Zi,@7c @A>4ANAtA,AA*AAȓAEfA-A:A`AϖAΈA?+AnABB =B BJAiANAGAʼnAضA)AmAAԯARA框AbAOA!APAöAoAQAA,AϾAA/AAA@AA9AWAA( A(rAKȠA9sA=AEATuAMAP"AG:A-AA7|Ai@@@H@8@ @jۏ?[%?M?ӎ>0?V@ h%f1 ǡ% U+%22 fFGN Wu_dnB8N~„…ˆˆR‰0‹ ‹v‹fŒŠ‡:ƒMQƒ3…v:„E{:qjaqTF\G9t,A"O' !.icQ]#3M3?_@y9@A5k;AtEA-AAA*qAA)BB PTB@B^BcBPBǴB\B %`B#B&B+ B3ǦB9B>hBBQBDBD0yBFD(BHbTBD,B6(BBBB,^BB+BeB ӢBAVALoAKaAБnAA@A޳A=A\QA @AaAyAmPAhA>A(tABA 4W@JE@-@)@~@@d@@@S@[DO@;@LLv@pЉ@@@E"@%A /A3AlA7A'A0AyA A@A@p@AG@gA mAS iAH?ܾFfYrU3j@/qF&y``~vȰ7Ub ȟ&׋[2rYNg6 %r*'(/c937:0<>$->q->!;9M?5l0*a#H1 Na2j}f%]w; 9:.*buhїSD>8-$'V_dsL4]C*&mɄ> 1!5"] RWq2R,K,D =d8'3e45.o5'![FD9p({u_\ C& ҳ#iF?@~Q@WuA4 Ac9A AACAA AXAPAvACAŧ ActAłjAA"B RB!B 0FBaB HB^AADA̎AۈsAAaAڲAeA @A,AMA^ASAAALAIEAImgA[AiAb\>AQ'A=IA)lA*A oA@lA@\@@q!@=@C@1+@S@*?Msdq1w0d(ͯzb# ]UVΕ [ CT,46;aC.E~RY]_iLrrIkpyg|€k‚2‚e‚v„/;„_„iƒ~wuzMOxm\jB~dM^UN3PGH8*#WH _Fu/XA?C? Tj?@8A%AbA%AAA@AcADAe[BBcB BgBӓBiJB!BBrpB!`B& bB.B65B;zB@MBB/ BAgBDBDtB=B,*B B3BBB5EB U0BlA.AZ}A͈AAA&vA&AqAMA{A=wAaARAACEA.ytAA 5@3@7S@@z@G@$@\@l@$@tU?m&?N[??m@*@iw@2@@@hAyA AAldAnAA A|9@ArA#^xAsbA/]@?^fÿΉS/钛 " 9lUUp"ZF8g ".1e &b*w/u337+:j$<>.>W&=z;+9P50*4$1%7oCr5%e~Eƈ8>BV,+y-V6nidLQ8ELoX]6/kB:%Emfݥ!.-Ap0IKvJLO 6NҾM_ KJ&G5CL=75&1t,&[ɜB VUֵRb59nZV=#8Dz~=@;#1@A:A@AhNAA>ASWAAA5A2AdAp!AAG9AAqAB8BB~B$BqBB}AdgAeAAA|3AՎA AՐ^A?"A"!AANAAAA|A>B@B@4BBB=C]B-B AvkBBCB!eB B3AMAAAϻiAA\[AAA4AqAp AbG?AAA+AAe@l@}@@:@t@WW@@'V@Ф@i@^ @ؽ>:>54?a ?m?v@4@!'@ې@%@U[@@b@ނ@kl@IAEAJA6A @zAI@@>?͠?q?*2&uʢڣIb0^Da|rgFuMl߃?)׺ jU` %q)/A3r~7R:(=;w8s50n*%$$˲J3%pV90,l0>T/\N7X{g2E̠kGlqEwIS;?b]Ec`śUW~0ubA+qAAAOAjKeAXlA[Ao|Ak}AWzAO9A?AA'=GAAnKAWA45MA @3@&@)@*@@@Zڊ?B Dz$FGֶ~Zva t:%# 3I 2451m@GO_KhPR(V\]jci_h*jm6ln1kPl]p;suwp&hqbieg@d@ a^{-[[S}INI:@.H&@Bٝ*=haz:tAv6ۛm$J/3볿1y?uW@hA)AnAAnAsAA0tAjAզ$AORABB >B BB IBsBB0CB$ B.B5dB< :B=B?}B?`?P ?%>VPL{O;2?'Y?=@Xt@AFl@F@.@@u@“@jAX^A$A3S!A <AG@@@u@cO>@V @@@?tL,@8YH̒k,֠qϗ~d+ep6,k?GLNmOOXOA!QRIRhOKG.A;o4#,;n"$geTMpP!L4eX*3K_;'y ?@Hќ@@hA\@AB4Ad.A~AʢAA}RAxA}AQAyAkAǧ;AѓFA܃AAAB 7,BB&B B@BBIB 6BAtRAQA8ALA(AA|mAⴓA$ABBSTBqBBŅB BR4AAAYA3-A̍xA"AA.AAN^AAAA9A}AAfLAbKAmkAhAXATEAHA4BA,A%A ?A2A@y@%@ҫ@9@@(@@ ľ|_~cWP\1Faf1I' 2v"16z2=a.=87>~/a&P1 af;0ȭ5Gj54'd??(Qi@nJAzAWYAr ApAAA&A.AAAAA(BB BuBBNBB/:B!zB*B37WB8B;{B?B,+PB@AjByB ̧B B BK2BAHAOAAǟAjAbA tAAxAWA=\zWDNV TC;3@1o پ>Hr?G?[@'M@Tr@@)A{A9vA:@p@5@>@@U@o@Y@Qc@=E@;?&"C `(qV T0sG!.](Lp9P:~ Sqvǿk]1e N`l"r'j+083ـ7,:n.;<5;:9)=5cv2,(Q$Ni-$w _#RuGd\rMŔW#ŕ2<# ]üVԆ΃-^`+]V)W2e;=cDcKQOjQOLL!NdPQOJiExr@^:_3H* /= L烫W`1h4a @ yzE?O?>w@ W@pX@@*AA/*UAMAn8A$A~MAA`AAHA5AA ATA5AAAABmBpBuB~BiB!BBtYB B TA9AﲱAAΘA!AFAިAACA(BgB A}BcBB B BB6SA Aރ|AѵA Aϖ6AٌABCA @ArAm-A)AAyuAl}AlAX}(TE_FY#eIԹmֿ$ )i 3&Kq14z02k8GVZ'5$7(,1a5 7c9m:;G:E863s0Tc+t;'!*# G[xU'{% ni0KWy $֐=Ch>)HQ7Kq3) Or*Q- 7I?YHO"R UPKLGIRIJXKgN L G+{BS=T6.5&->f=b;rM&mSS?6V@R@@דA>JAA2WANbLAjARAAlAr%A9AAJAACA?[AAo{BBBlAkB B 8B BBu?B!B7BBA:/A}AɌAAXAFAwAA7AABBB SdB bB xB BAAAAAͥA6AAyAA.ARA-aA~xAaA*Ag!AT>AKUAMANAM[ALUAI?OAPC(ANA/A'eXA0Z&A+(A+A#A@٤`@|3?  ׬>$u9ZsXTf. f͎GQ~WU9),&3~747M=˦@_AONLX[[bem)n(sv4M{8€X €}Xwm^~ULbG^ELJLH?-"Ho% :`3gF[_^\! ޶J?*@ uAAAqAoعA\A*AAVA1AGAϖ*A(:AGBB B-BJSBSBiB1B%2B,B0B4B(KBAB ­B.B+B DBBIAAAAÝAUAA AjAUcABA&OA @;g@)@!$@Kan?=?mÙ=b&YK)auBs9|kj7jeԷ0 6ݣ]r ,ÿloֲB':9:ML`GIs=a@Ljܚ鐦p9[ <uNgrH$,)R-ٕ1nd4(678i+77<6 317N-*&r/;W …<4~ԛz4ZMgb'P=^|l7k҅EUON?&e᠈n3L2e)|hj\l0ؒpd$r?-/XN8B@J`ROQ=NzIEfE_EXG8IGC7?592,*!ڤ w*^om{3)r?%@0C@Su@@>AA4DkALoA`AzGAAA:PAAA,AMArAȂAA$xA[AKBBBܝBA*AB$BB BB )8BtBB}BfBoBAA\A,AbA QA+A̝A{;AAA2oAAA!AѿA'E]vT\hs|Uf4„.†y…Yw‚tcQA;; :SAZ dOaMB4%mZ ]uOQο'B=#C2l\^@_S@A-.mAW?AUpAƒAAAFA/AfrAaAȜAߝB*B B0XBxB*BЍB#$B)Q{B-cB0(BB'BeBM.B2BAJAZAzArA3AAAAuAPndA5^AnA @n@=@@=?L?#򜇿B{)xYhCXukR-F}3fi& ]bxmfQk>?/x???J? ?T=1¿$4?+uXϽv "H'7?GoXi/zԩߞxl7b8ؚ%R] $L(ޝ-6/2.35B6+5f4>2'0-+`)W |ppK&g zöFpUdǣ6Ua^R.Z|n˝újQ%aw139CgKlOqBOeOL$FkB8@_@ @A!~?=E82>,$Zw6!_9 SJalU) .?v@F^@D@߲A A*%AE9Ab{gA~ANABAuAyʓ,#Db|y<^2#t`f]l2InCfr '.'.v5-85es:<;=SJY;g'u€@@}Awgp/yU.B(mN=T 4 ~Kh4SWX~?J.F#M bh + ݑUKc#>^EF?= @3\AmAA CAu۫AְAiAoAkA^AA-AA ^ABB iBкB\BkB!B&bB,B-?B$B8 AeBhB BAbAKAAAOAA,AopAWA5dAǴAXg@B@o@%v@8~?S>L(1`hkӡ?_WϵSN?Dx*=Du3?Ai QdC$7⿽նa"PIj_J -( m'1:t,FWZKgubn8Ÿ f{Qafn?r 8$,)+?.V01 2220F.l,h))Zw X{1L _~ؐ<H0W=4`ЎٴOȃW]{@ڔݡ/9 n+K;57-< D~LLO'NLJDo?h@tb@xAA#A@6pA[AwASAySA1A\AAAӑAx[AřAՑA֯A|ABvA4AZ|A$A AvB0B bB!B1B9B |wB(B"nB TB EB!tBB:BBBB8B ϭBRAKAAMAeAAަlAeA AA3A_dAA-A FA/dAAAAyAA˝AAA8rAAABAVApApAyAlAm@Ag)AHZA-AAAu1PrlW[Zء{hkB|=M! (Ĩ)Z;C?+=E:?=GU0cnn[;<,Al@)䖄iyPB%L z9.YcK u!l J>\ >u,SE0@t@`A'AYA-AϵArA3A5AAAjAlA@BB fBBBB{B$(B*7B'bBJB:AXAՑA)AAmAAuAeA-A|Az AN^A4sA0eAr@A@H@F@eZ?@ M?qCE:`]BP&̂ڼԱ1ϣXAXqWvo\ `T ZֶU-8Q(@IRr[9h,xl5F.]01ם{SC r7iޠ#K'*+G.2\/=/9I/#.,o*'<{%&"<  |?lʼn"f“75rv͈FVE٬a+sAX=,ݐT;'5]<3$Y"/"8j8\w=a3FTN{wPGHN^I0A-;u84:z06&-9<+m),*% %7 N [^^0VR'a*z?ס@g!AeA4AVAvJAAAAfARAˊ>AA}AANAlA AARA++A{7AqAf]Be"B/B BBeB%B8MB*9B*B"[B&vB1B4B/B.B.bB+pfB$BXBtcB AKAAFAA3A[AYdA@AMFAMA9A=(AoABAqAAAAA8AũAZAAA_uAzAAAaAA|A{yAxQAؼAc"A|AA} CASA*XA @ɳp@?ŶdvJa=mA 'C׸aѳ^w}CԾ| 7G-Bf=9=sEoMNC21 L~N$o{ic0g;?&jZ ;α&_+fO$A n.NexKG.E n{X@< e@]PA AC9oAAA*AÁA~CA7AqA>AuAO*AꞜB0B Ba-B.B`B"TB)^WB!BRzA=AєAAG]glWf.t~#wנRa˩S}7ͮC'v #^<`؃M/H ݫ +o髗a=!x.Ԧ,9>6D9LCOϡT>[gFwv*as 73.YB(p$7!mu ,l "i {ƿe u91VN@b@^A1MAe}Ao;AAݥA+ADA2A EA.A AAA;BAA"AFA)A ;A=~BB MB )BGMBIBBB%ݭB-B2B)/B&`B8ӦBH^BPW'BLwBEUB;rB48B* NB"BfNBmBAAA AA0A?Aم'A)AvHAAS A1 Az\A{ A AA.AԟAAŠAAA;ApArAAA}rAwsAwAK AA.nAAQA ]A]0AFǖA%@˧@?i7 2ag+"N7^#v{bp+lQ.NՒlW4>EձI$,%C<65 L!cT3Fr- @cRSP# N쾅ҿ zK] s  Q k<>6okib b B9$22eBfOX [j[@]Dhx:p-1Z?bהyy; 6 !" $UD|!#"$?&a'B'F(;'&%##GM|& > ,S0I9X#I5ɣ.}קMܣ޸݂3*%M0`R}2 p*-:LHMʘML;HKAdp:3X3,"Ù!B rrq>I(y  X [r#t>XS^9 :?@"wA2~AK,AAGQAA7lA"AH,A٥AWkA`BT&BIBY B\B<B]BBA]A Bu%B 94BBlEBmBBWxB^B%B.= B.AB.IB1B??BH?BOBV?BVBJ9BB@oB8.B1fB'GB^B/B B46AA_AzAۂ=AKACkAlB BoA\A£AlAࠠAwA؛ AH:AyAEAYAtA AhAAnARRAdېAfAAA)AAAAABpAw[AJW5A @[?N`X;9ukrtHY *#*9m0I7*ZSR|a }$/ ń(ɺaK?+kq8b[1;d-21<#6Y^{ ]B?Tqqp ?X'# [CoXh<w(Dm"Wd|2WSz0:q+*Wow%@S@xA(SA]*A=bA! AA@APA@ACAA߉wA*AvB/B BBEB /B)BiAϬA~A A$AApAl AyA;A1Au( ARA@ ~A&AC@C@p@@T۝?R>p"Mx}ؾdbGzs T/ Pm#Zv % 9@ҬE$m$(&B(Ŭ*]+y+n)qn&{"c J9%3?Bl/B <$BB 0B'B.L~B2QB(B%B&B*"B+1B&L:B3)B@ [BEBLBY#BW9wBNPBEB?ЌB4ZB&=BCB/iB~B;AAXAvAAB`CBoAlAOAxAӰa\+|BLyQY+ADG |oũ5F~(tĶ1ٶ6&4b`4a5)4XQ-vci {ªagN 7J υnG?́nMs 6 W$(-~/5iơ2|QKG g?MF@'5@nj1AALïAiAKARAĈA HA;ABAuAB(B Bv&B BBB( BAӇ5ANAU;AhA%A5AyAAiAaAczuAG3A.HA@@l@$@0-@o=lmF[Mݘe>V O\ {/#!C$0%~/#c2S6:%<>6?"=.:[8D8߲:z>CMLT]e-!m\v(y^N|HXI'b;kUg*8fD;e`2W3ԛ"^T Vq_+Ty "?#ˆ$%@&&(%"we Eڐ{ v['WڞeN ;ukZw% u fAXb_:b߶b3za^"` *d} "Y4Z?mzDRFkFBD=82Ϻ,o$x  % ޠZ8xgXvdg}O NQ+y??@A XFA@AxtAAA+A[B1BrkB yBBLBɐBB R|B#,0B#BB'BBBB+B"TBlB#NB-+[B2 B8YB5B.B&7B'.~B$%B޶BmB.lB;yBCxBKBS:LBPBM7BHvcBA[)B6B.yB'wBBfA|A=PADAcA;YBBBGBAIAA;AޓAqA7AAëyAAw<A$OAI @k@Z5@m;@A%&AUT3Ak'AoA`AZAϱAtAAA^2AB@A@!|aS`w?AN?@m@hI@5@8=kp 蟘[]1hBiX?d_X Fny)78%=1z5^?r4 EmzKDžõR61꘡UMK AS. o 5 4"!Ӳʙ g S  =BcX\ܽp@$@=ApAFôA}QA?hAhASA5ArnA'BYBlBOB VBBSBBBRoB#SBAAěAh{AשA/AdAVAGAAsgAUA0A@j@:@@ g@Wé?o5l&v' :/8RI"r56I5[ c _!O MGƛ.2<;E:I K2N˭NMrK1H HJ?O3%U\cPkrS%xrQ\ZAwzCb ڶף8Ds J 8J8ɧ  !"g$$$m$T#!1+' \1z+A qbz~1PqF ܧ֛1Fv2f ~ ߲=Fpp3jD(77;p=TO2%݅8͢Bx1.)d.s)Hy@7ۤ@TA@AVAAgA8AܤAB JBBB$B#B'J)B)^B-pB-&WB/gB.pB)-B"[dB Q\B`$B BB7;B$B)B1`B:MB9XyB5jB2 GB11B-RB%nB~BB&SB(f*B)֍B8BH'BK(-BK`BHsBBFB<|B3 B)BB B(BtFB~uB Z B )B ZB BBPBǀAAAnA^AAVAR#A)7AJOAQ@?@d@O@~@̾A"ԌApAAA4OAA1fAxAAA`hA%y@4@&7@{X@A^A`@ @>t y/uGI^D&seʯ"XX:_fE̝~ }( :*Kr7*bɋj[nt5>(LNL TQfp8"%N&)&1&$!R`{!ENGAVN_ CZkn]5`"Ϳ~@)@#,AAA?cAwݒA*AAAԤLAHAhAB5BsHB BfB_:B B%B%BtARdA^0Av%%A'AkA AƔAC\AD]Ao\Ah4&A?As@y@ǃ@3@tũ@'?(#<ܿrKIؽ@C+Brh-A*f ),A7\1M,;,(--;6 HLjN Q$,T7VφWV_Y SWrRSWc])djmo vj}hA]ՑۂHgq;K"E(% sn~. A55JL j ^!"E#6x"ʓ/Y PPbG@쁌!Fzf|7t&د:{ݷι=oޢIuyh]2rv(mDĜӀgj3K ]<#3!1)26-$42/..1A)#\u C(i4v <(L7VA?}@&@dA3AkrAAA]AОB=B BB#B,B1B4B7)RB8mB:B<)B;jB8mB5HB4B/B+dB&B$B%.B)+B1=B;XB@(WB9jB6GZB:B6B-B,bB+cB%B!mEB&P+B0~B?#kBCVBC,BC(BBB?cB9B0B&ZBB"mB$B#R%B(B[BBs|*S'#?L%-J.fd+ b)+._-$,t*V)J?%q.- cPaMٝKl7a/+sP6 Y_>p@ޤ@AAIAoA'AЎAԌA{B8ByBJB)B4 BBDc/B<B;BBB?JB5B35B7sB@BCB> B9B:`B:=B9B7KB4B0uB0nB.%B,jB)B$zB"UB nBB9\BU^A#A.;A$A+AAb*Ä́ALB"B QBjAߺAAlAbA.Ar#AZAAA*PAAͷAJApAAAAhAAAepA4n|@"@q>>E 3L}dڰJزO&xe sC2SB&H׃Oޮ.~ wZs+d$?a~ 't 6# +ܠ0]4-@'Je SSO M'@$8z@70.t,!.X)ew+v`2U"?d#fпL@T}@ ~A GA8rAa..AAC^AxAA۲#Ac AAnA6BBB0B BEB'x_B&BJSA4A5dAA6A+A?(AAArmAPA/AG@@1@r{$@?K?Oߕ2ѶJ_^k ߈ճ4zN`4UI7@3*+N)-7{BD3EKANFZL]NOwKJIJJACIIFG3NC]X&`Egnt}bdճ l.,L !PՂiR}j u]v DO՚W(J>P)=DQf ni}͓ǀ}2;< 4HKF3㖚Lt?{8;"ZN쾡G;խT #p3> .\1@iF&>8*4{(;'&3%#I\j@1`*#:ҦB* c-wk?2@!@_A#AXA-ATZA ;AߴA7BBLiBsB+B7LBBloBJBPzcBRyBUBW=hBX$BW8BZ"BT7BM(BFBG&QBDEBB= B>YBABBIBH&B91|B42 B>BIBUgBWBRfBHBBe BFBLBHXeBAKB;ƒB6B3nB0dB-B*B(OB'RMB($B,8B*żB*B*B$B%OBAMAAA>zA%ACApBB"B1BB ?B5ABBwB JB L{B !BBܜADAܶ~AΐA6UA`uAe^AAfA/AAeK{A0@"DGy+FC)b@Z6CT"??{y ,){2=0v@.:wB#L9dK-SiuTtUNU L AP4y|-R+96J?MQakifV"KKF}<6Q2-1c62*. #oçI{~}wjrgg.71V?/X@\AA/MLA]AAAAڛAՉ%AדA;A߫AuA@ABa@B BVBҙB$RB(ԞB $An8AOAEAA3UAɪA$FAlsuAHWXA.TAj@@Ol@bM?2?W辅?ߝ?ukZ&? Vif,.bBe*@=;dZD7s/lm-E5">YDNHYG*LVN2LKK|KIKA?I>;l=?=3>lCMKU+^{c:kv9zPقV"ݠ`"F;0[ ( r+ 9]]>g6i!5ju%*¾gk<$J ΢'Ump'D"klYԩٗ`_|J@8H<*NWs` T =Gk  ,&g˨ !#] t~*! p|O eKY/KZăoDBYG@08@̩AA4$Ad=nAA8AA'AGB JX@zAA2RA[mA@AAvAAƑ#Ag A]A{AٔA]AeABB LB)BB$=B!B>AAAnAAAAA[RA=A!@$@@@@[?F}B[XT|\XVƤI!6N/jg8\ E; 8;g_BJw&LsG'LIH,J;JG7B>,85;2'.36u779">$tGΈMESXٯX-d޽mz;YkJ#heӺu#I Г | m ^)Y@ Y"R PVO6&[G-15NpsNW[n XfjWo#ݒ:mPC$qR-s<Q 6' K Fe? H PwqdM9 8z'>o@6i3g7 Frtό?z@@+A#%AV#AcAAkNA$6AbB+B B3B$ΡB0yB;BG^BTB\&BdG,BiBj!BkoBiwBfoaBbB]BXTBRBNgBLX'BIBJ"BEBBBBMBD#BAvUB<"BCxBQBZ;B]B[-lBYDBXfBTBRBQIBMyBF BC50BBB@jB9B3#B1лB0B91B:xB0B.z.B-B.UB0B3DrB*B BA2ABB2BiB !wB B SBΆBB KBDBB*B 6B B BArA'AAQ^AAAٕA|AzA5AA@HW,}kzU5'.)H뭔g G |4@Uj _P!@W@mA$jnARZAyHAA8A^$ALA>A3AAAdQA懲AA3BLLB =BsBB#MnBT'APAuAƪAAA2ANsAvATA/A %@X@lQ@`[?P>7c4xV^ņ?h Ƶ`# :SN`gUk:S^4jv 'Ey]H^ܜf첤OXXAp2  ]Se*+}=:ssƃrj|G4! 9k){_{veALvZ4,hhsΏb}dF*w] R _ h /  d Q"c DPB6KY8,Rwu3|/?quR=Mއ!R|h=NH@io@٬A5sAHAz @A.A2A"(AxA_BqBrBbB)B3B>BpBnBkBh Bc3B`yEB\TBX0BPBMBM>BJcBGdYBBDBB9B5:B3B2@B< B?B6B4AB4T\B7t`B;B>wbB3eB'BB BB#-B&B'}B$#B!4BBB۳BBBBB~6B A$AAeAAݦAڑAAԐAA̞AAJ@w{ݘ0@9X,[\`/rS4:ɖw؀{a`= ٔN)-y0;e4 % 0 |?lk,9IgCscy~gr‚~„XƒR‚eU‚UD|׮xt.wldbd<`E]i%X?N^[-RK27D>G)HFDR?9<ҡ90T30A++'] V4S>?*RBj&*+0rD67BLɖV/a?Zn#Y~<L]hQWnɺVכiV엷hrw,%h';Wڕկ\PLlaɫ'O~,viadel_fA=i /u)+N|ef ?.Gx]\ zr [l@ 6- fA_;)W,&]aM[ݿ2gH5V)bhoտh?*@GA ZqA5AkAA AA[A=aBBBB'WB&ZB/B8ѠBBBLBWBbCBjo)Bq8BtڮBsBs2iBpP BmBksBgBdЁBaѢBZBT~SBRBPvBLBH81BF$BE2ABFo"BHBRB^BapBa;B^W/BWBWBUBMBI(BG BGnPBF7dB?B9 1B6B4B50lB;BB B;6?B;ZB>ĜBBB?B>rB]T4%k-R 3K*MS߅Rῥ?<@Rj@V@{iA(jAu9VAЀA#AA҅{AA(A?AA_AaAIAAPABB 4~AaA|ABA2t A%AQA{}YAvAnA+,Ax#A[A9AA@@@jDq@ U>%%uPa! )9%;}e@lA-i:3\>:Bf>F65E(j@&%t! A̩6^xaa' u9Ay&.<07@~J WiWwz>i=R%e2 :EqFLvVg0C3Xph) 3dꕵ $9o7|YlR_W_RL?rA?HNP%KKL@o&u-^rLM1:/0k'AR ( \d  B  *RL`V+) *hC-==-1ɯeőÇ\/7Z\'K = @h {@'A&b AUA{AϋACAiA΅A1ABBB!*B,B57B>BGQ+BPZBZUBd?BlBtLBwBw6=BwBuBs:BrBqxB[XBVBMXBJ BP BUEBS BY`B_BbddBdB_BZ.BUMBPVBJ_BMlBO;BO>BL_(BEB@BB2B2B2B)B!0kB%$oB/B/ B1B0@z@.Eh@@wAwqAW AsHAf A{A A#AOsAjAUATA͘A gAaAAr$A5BAAѥ!AGvA5AzA9S@f&AfAU(AylAyAeRALA3_A@@@\6?F>:7b7qUl -9* A:0Ip(8(1N5'V'::%t CQPHIEe ˆP:-lmq>2{\ 'r+9FnQaEra`/_LBTƳ 'C J}9TbF)בz9z47][cpSD|?/  dA@ELPiLmoLj.pѲLӾۄ<[&q!|- n޴ ф `pK ,w(WJ!0̾4S?{ dGw)/jW2:WZ| @Z@(sADUAy`AAA AAǦ^AݨAKBBBkB$,B0YB9+MBC&BLBT,B] BfBnBv[B{B|B|=XB||VB{Byy2BxɉBtBohBj`BicBiBdVB[@BWn!BUrBQBN(BGBO BWBY|^BTBSBOxBEBC\?BEBF8BGxBGxeBIBJwBH`?BFBEB?E6B8HB;B=B;B4MB,B*B,E[B/>B2B5p.B77B6!fB0`B,vB&dB!(BBBBxB _AAE AgAAgA AЬA%AAf 0AAAA1AvFA V@fQ鿽]0l &"z60Lt1Tr0n{1ܝ-濠+P _ B>#vR*D!-ve//O-Ҩ3 4#8|@4cBrFM JHKd^!rspqvt;&ogag3q*gn`H[vXO|jIhBvn:3',%nA zI>zDf?@chX@AeA7ؗArA7ARA-AYAtAʿ[AAAAAЋ0AKAИAw.AAAB>A5A:AAZA@@ &@KA)AGoAJ~1A=A(A @b@@O%?=|г<. vjIp aS$1+7g,!)^2]RUm۴p`P6|O ֔c|1}u* J+`Kk}iAsAaABPB B&PBB(UB3yB<~BFFBN=BVgB^BhBpeBvB~XdBB`dBB&B}DB|ByVBsƢBnBi` BhBi0BbFB]#B\vBW`,BMF>BEnBABBnB:HB4Y+B4B6B4B=nBA/B>B@BFuBM-BRKBMhBLBR3BKB5B.S'B'bB&vB$\B(B-B3P_B7kB:B9B4GB/B-5B(BB,BB GBi%BLoBFAA"QAAAkAAAпArAaIsAwADA{AUAd_@gپ.W xub8JjcvyӔV gh.[".(-0"27z;??:G4w2B߯VN\el3{Ӆ„QZ†€{jvMojk2lb$j8^ZqTNJGD?<$5s,w$g ^Sیnqڻ[PuaQY~?Z5?ޒ@4D@@A="AMHAyAAM'A#XAAÆA}-AA}AA*^^>=zt 1A*,CpNJ!a|#iK08[, /=|L0٠¿7! .X5 ˜pMBf%7RHqWer3eIcp>4 tVmQWAՓN/9P[kauY7yGo_/Id5#&$lF$*Gf W5ns=uU04‘2ա"A|㈄>oA l: N6rK&< l '=U'%?=~t{U2iS p"ʭ4?!@@$A4AsAxA_A@:A+VAAQA)BnBȟBB!ЦB+VB5_B>BGBOBXbB`aJBi#BqBwdB^BUBT BBКBeaB~qBzBuBqBoBlYBkBgCB`B[6BWRBPBNBFB?B<8B:UB8B8bB=BA"B??B=OB@;tBF:7BL-BO)=BL{^BGJDBL BN*B8AB. B1"OB6B0B1B7>B9sB8%B6B4=B2QB-lB*+B+^PB&8B@BhB EAA A#AAoAV-APA-AA|A\AKA@(A6CA A`M@ @'dH*M(-0OCD%%# + ]7eGT&) *O-t0e5Y=D SIH ?<7@OOh<]{Ts~~rvg.h^yYW,QUIPNzJC0EdD/EJC?<86A0)F!j=;L\dӥ`m 9.<2?@/YD@@ǀA mA5AZAIAA|AAAlA GAA4AGAӧ\Aʸ AAAZ1AcAӗAOAA~AQAͶAK8AmA'Q5@h@RA A9 A;A%[A @@@U.T?ϋEnFאּ22e ؙû >#)kbPX-,䖿éx_r =a{>*>c?D?0 ?%@?}??Kd??c>gbmX素F+o_3 &= @0x?gO6awt$ר|'W>@ƅwӨ/ L+¥dz5r+jU jTjKiг&| k6UG1>-m:pN0d s~E~;lnp¡eͼ96e%+! SKTs:H;Rs tbl;t.*+ K./S4- bp9[EVH)MYW>`@ct!@A ƅAAAv;A+AAʧ:AUABzBB qBBzB&B/hB7B@BJBRhBYB`Bi.RBqEBx]B BB[BBMB(B}BxBvI!BtBtyBo[BkZBgaBb8B]9BY(BM LBEBD#6BCEB?B=LiBB@ |B?iBAOBC_BCBDqBDdBG1BHBF~BBnBGMBEBBB=.B>nsB<]~B7m\B4B2B/0B+lB)hB)B%BB~@B D!BAKAR;AA-FAYAAAAAuA[JA@ѶA&UIAH@@5@|JXgz(eL&il*sJ;ɄsHs/"3 `>d\!"S'+-p17=?(DFHIKMI8pJPD\?dm_UTpFt>E=x-@H}.IKjBS?;ђ:]4.ڪ//4%+&B:Z93 nڒoL?SzOχ' k ?@%|d@.@J@ A'AHݬAipADA#A`AAdAiAAIAS%AରAAQAAAAEAA A^xAA%AAAAA[V@ݗA ABH+;\l< 間SӿT#/|`><??j?j?q@!@'@2a@C@GOi@D@9۳@=Q@1@ @c?rN?%5N_Ω N\7;K<(!:n&Ncw\{XnwHU!9ICWu[n'[q[jzTesa[2NW>R'Y%dq|\lί#R&IHcC =8IW'=`)Y pY QQ (8-9Zp2EM_Ԉ/) p/%%sWK-t@ @$A$AJAV#AgAlRAŔAnABB BB+uBWBB)B2uB;PVBDIBL\BS*BZBb/BjBrVBxB]B]BB#BBQB{/ByByzQBvBtxBp>BkJBgzBcF,B^BYCBRf*BLZBJ(BJBJ BK'BK;BJBGZBDUBAB?B8+B?BD$BDB@B<B>B=B;B;"B.@XEBHJ=M)kE)7-1{?AM(C~D`Au=@71Z0l.m0=0H.s*%aQ0)Ҡҁ/3bbU0Ot>@ݩ@yt@@A AD"Ae;AoTA A&AA~A AAAIcA٠2AA&AAD^AC@AA5AЪAAAAAA.AuAmAA+@^@A-A1)A!IA ٪@ @e@C?e?i[/k>N]zrMg(;\:ED=13())ihm? ?|??@@C'b@q@=@x@Y@@8@P@r@?d@*@kL@~@|@rL@D>u@dX??_>m 7ѕR[* I6QK*^q - Ҿ5Am8|uqQ52|d)8'!FyRt˅c]bQohu~%&r%DsJ@жy߻I)ӫМq 2c`Z+=_vu:# W7  %0YQeH{uՒBU~Q?yD@P=@A9A?QpA~AA#cA3]AAAB BBB\DB&AB-`B57B>BGנBO_BU3$B[BcOBkFBsByBj_BMBTIB4BOB~ B|!BB{CZBzlBBx\BtBq \BkBgBc \B^B^XB_JB^7B\ ,BZ#BX1BT9BQ!BM[BJBGEBBB?ƒB:XB6/B4B6B8jB=+B@SBCBC?B@fBT7r:?@r@:@AA@uAahAkAuAAHAlVAANAG.A"AACA|AOGAuA*AA>AAoAAAAApA"A6AAsX@v@ngAXsAAf0A@Й(@G@os@ -?:NڵtL,IVzAni @Hu?N fo>J?}.y@7@H8@h8@@@@`@@@@>@[@@s@@@ؾ@@1@m\@?@?E4>PE{V5vdg5ϕx/BUWih)zH LYDU25N@W`a_rDMH,1SvzpsnKxW~x3Gt]!F/p,8ԞWeq c BC34ciKQms[ V8҇#Zh8;7HT Fq[@0vs@(3O@SA ;A/A]AAdA _AAmArA8B'B,BJB!yB*~"B3>B<eBDSBLQBS+BXxB^Be4Bl؋Bt#nB{BjB+BnBB~B}B|}&B{IBzBwBsdBm;BiBeZBaB`BeBi-/BkcBf&zBaB\BWBTFaBPcBL BFtB@LB:ԱB6B4gB2B4$B7SB<iK?`?? >q>$?>A<,P/J {UH?E#"c?@k@@AAڭAܑA>A5AA@AR%A$@@@@1@.@c@&9j?2?o=`BHHC;.T* >QId~q{6ɐBV=5uw{%tx{E|JzId7xAceldas@,(;ImwU%h a 20-7!"a!Y!U$# rd l`B7eBAEBIBOBV%1B[ BbiBh(BoBuBz~OB}"B~1XgA"3<TjPBtkߙ"^ϐw݉.Tg1P@ (=#L'B,}0Ll0)-:'$%m$"3!xz!%+bi2S3*20A,&+7&D"8!E!{p/ ~trKy &qΖrnհugH>I_>y@N;@@ PA~A'A1A:AS&ApU_AϡASAAhAbAlqA0:AlAAAAyAVAiAR&AtAAAAٓA AYA$i>(W'-Jq<8N-Hj~Si@Щ@@@4AAA)A0 xA0_2A+A"(QAA DA@n @:C@@f@_@sXc@;AnmAA8MA}AP A>A'B ):OWp})zf_wo8B]elS 7*Q?Rݡ 2 }!t%'E:'Y(()1(6%ި"x!>&)_,/D-) '#lcݜZx68q Ӽ*ûSVƝRwL"*(Ke@ G@f@@jAsAA(A@#AYrA{-vA:A6A[AGBAnAooA]yAAAAA!AAAKA4AcAA!AAAAeAVA^ADtMY^7Ib i>kD\UrXgwZkVCmCBm|ͫœѵn!D /. x7F,J!V'R+.//H/0i1=0[0,&[3 p!dC䉏~pU;t`x = _)?0*@jL@A,dAT-ABA/AMAA;A䢸AB>BBΣB#+B-TrB6ѽB?(BF1BMBUMB]BcOBh!BloBo/BqBrYBsBt{BuBvBvfBtvBrSBq~BqˋBpRBkBitBi/Bl6Bt32BsHBpzBq BlBi&@Be`fBaXB_BZBX!BWbBMBEB=B7B32B0&B,B+|'B*B*tB+B+B*B*mB(pyB$aBqBBBsBcB=A] AAxA>[05TGR ^s׬HBq2Sق l A)UN 0 #zf%:(*;*u0&Q#m9#! "#ʮ"o \#m_ߐ"9,bL g:%zpvD~.&{ɥV<0R{[4q^?9@Nj@V@P@CWA/A,ADA`kA$AױAeAAAh*AA%A AAAA\AAS/AĹA}AJAAزAAA6AABLAJAxA-AR@ު2>QB?>Z@AXA A@@*@?O@[@@-@b@=u@c@%M@k'?,/@@4r@d@"{@\ @ 2@0AA7 iATXAiCAbA.fA U@@G@w@_F@A HAA'0A0{~A1}lA+A#AZAx@Ao@|Q@@&@QG@=~?˽=ygKy-]x6HV,]"Jږ")*6v/.-6*W?1HKSX^uyaCe{r<\o"A^XF )fiA);fA fA Al@q@K&@3J@T@V@>?W>e5㿠W*BқF/.+(6N6s`Vن\\Hz2J)ȳ2ٯkh  |vPK)q!! m5 D!R ayYp`@xUP^ whͿN*i_? fK6( P@ n@@Ҡ@AA4IAPeAgAc AN|AAvrAA!A_A(A`A,bAgAAw8A'SA/CA AGEAAuA ATAŷAtAAsAg?ò?;$K3B1ς1Jڽ? 3\_aNWO҆Fz\[iL(a3.@6# 3#C *0j?@iZ@v@ǂAM*A!1AEAYՒAcAoBAuAx3A~A?=AWA3A2A AA|A{OAeA'A*%AE ??cyvޤk ^,ǿZ/b|[1E ; Ȋ/H(`v=7PXe wBT L:Mkz%t(аI!$<#dY ug%} S]u#kS' +-/2z84:4;RV<<~;8F6DB7}JB1\B-ӫB+BB(% B%[B$#B#OB#[WB!aBBB&B B4B"AתAjzAޛAҎAM/AǏAмAAAAAaAAAJAZAAAAzAuLAliATA> A.A!Ag@@f@|^@Ɯ@@@+?>CcL><%B8|yBj%a02+ X,qtʱy9HMFa;~ 3 SM + lrUxqADILI]R# ;F!/fuF? +6=B*kxm=X4r!%\3J|[%j?J}@'9@A@ACA,LAFYASAY͒AarAhAlAr,ArAoAlqAoAw{A|AAsAAAbA\A-A?AҤAKAy$AAUgAAWAAAIAf@**l@&\@_A)]AT@@k@t@3@%?Ѯ>£jF-k|?ݘ>o> ?M@~q@:@)P@+@4lK@)@cAAuA*@>A;HABMAIAS"A]AdAjbAmxsAn1aAnqhAxA|AnAMA5cAIPA[AL-A+AmAAA9ABA@6@О@]@6@9_?> ]ڂW?J=IѺ=3+)F c2~/4WROba+4ojAPId/'[}@ly/ i&@ ­* iE$*A/Q3e6f9~=Ss?@ @H? ?5=x<9 h1.,4&a G8 ~c%R/Χ@B: B6B3B/$B+oB(B&.nB#B!B~uBB֢B{B8B%BwRA|lAA AAAmA A)A2Ai AQA0AAIAAqA;AA}AhAd6Ag3A\ZAJqA5,AAA؄@@٠@$@$n@e@a@(l?oW@:kt( 5!~d"W1Yg}RczrweؔZ&rBj } e7 tT+UYRP"x-<_~X'!v"nO"` g8[W 3B qv)ĽʸÑeE`/X=ǐN[0=ŇEk3 );vV@2|@Ϫ@ϱAA-6A)p=A?mADALAXAi3vAr&AkAf)AbFAc&TAfAvaA~HA A/AA)AAeA6AAAtAy0A.AAoQA}AA})As AA%qA0|A3AWA 8@>k@Y@-@{ @#@?[?E> ??V?9?W?A`AgAnګAugApAmZRAmAs@oAl~AW%nAP4AVAYaA[VA_^vAEWA@C@؈X@@;@]@r@@h4@ ?l?./?M3@9[8?;??Ց?[1>2~]' -Td0ZB8Q:bFpEmM+f?|xܩ 6d8a1~ S#Xh(H-m218;=m>@/B]BAT@P>!=~M@̯@@с@o@@B@m5@y@5@Jw@4@u@A@$?_?^ɾeoJ[Ij;E,/L;`veJerR%(haz> C%:LjX>r BGDC!ɗ%r+1b<7E<=?eA(AAACA AG@3>;9e8`40k-$J p>^|ֽV`e$Px),@ @@|^@A!q*AMAuICAAC ATAdAABB BB$B- B3ρB9pB?8]BEiBLTBRBZXBaBi\kq(7CVYPn%J=1GT)&#y ! Rg l S&igXN  g o0 YSդXK(DǙ\&"t\=ު>}i5?-?{%?8J@=K@E@@@WR@AJALAq$A XA(A28A@4@B@q?@fd@@#@@c@z@AJ0A 9AA$A/A6A9zA>MAHQeAQ{AaDAjTAc`Ac6Ah`AjŞAj0Ai9?AH*9AOAkA@7AP=ATAYcAci_AgIA`PANAPAhEAc\?yQ=UYR}f{%AADADC>:8z8<8׆6^H14,FV'#C ;l<"n9l.^*"mv9ͥ(K>Q@A@@ڿ ASA-ATA}5A|jAA)AͩA]VA ACBYBtB/B+B44B9ApBAlBABDYBHBMf BR7BYgB_ABgBnR)Bt,BzBBB1BBB~TrB|sAA}AsAr%Ax,AZAAxWAvAvAcfAErA6_A<`A9A4A3IA.A&A!sAA@M#@ @#@\@g@YH@)?ҦC\To7VI-/HL]kj:-lWasl#۾2߾Q)^0kO0Xi[] ,$Ҁ u3K6RG3OpkN 0d.׀xvIG&xZ9dn c7%%A]^AXX@AZ۝Aa4XAe3AXNAGQAFkdACLT?>@@ @{2@&@k@h@ˠ@թ@rq@J@룮@FAEoALANANyAMrAWгAhRAqA]A@A,|AhAAU?A-A-A=RAAA|AWaA?OA+AuF@@l@@@U3C@z?8Ùea ;@;TiНN'kf8cW5-{q 0ԧ`!P&X)-j1f6;f?"ABTC-BY>}:e7!_4360/,V'd"$fT~T eAiR֗j X3ta^&b6@ @Aq(A uA'KAHAoAAAAstA\AA]BFBm`B iB+ǡB9~B< B90{BA0BE]BFBIDLBMBQ"BV 7B[v\BavBhβBoBuBzrBBGBBBB[B~B}NBzHBwBu[BsBqKBBoBoD9BoBoC!BmBkBj7BiBeeBbHB[eBTBLtBG+BHpBIBElB>=B<=B8:DB6_B7dB67B6QB5=B,B 2BBBKBIAKApAA=A0A@xAA"EAݼApAA:?AA:A A'ZA/AAx?Ak|AYAOsAJ`AK_A@k-A97A7A0A+stA AaAA TAځ@,@@6@rpt@{?g푿U4GL :`.& S6m9%V2Lm`\ӠsH9JFWоo01݌qr=߆`Z w(jQ,0+qbj w!kއӘfpFhKWoKnZ7}$zϻBz_-ʠ'?Hh?99@q@A@ ,@(ACAA*@A7.JAC[AJ;AOxAPATJ/AZA_שAfAnTAoAqArAwAuVAeLATAL,lAO?AZ A^6AKA5pA2|A3TvA.*A/\A.A+?A*A%$A{@@2?x?Y-?@*@@0@@N@@"@ @]@@@—@z.@W@%@D@=fA 1APA|A(A3"[A6"A3{JA6LxA;7[AAhiA~:AfAOA;OA-BA A@X@V@@u@6p?dQ?i?&=?&G.) I9S/a`Ê[:%rba^^ Sx8!y&J+ .Ks157X9=:ϛ::98B5~B1. +) f%s!.R6 ԈPSMl{ޮ;~isnzD#a֋V>@=e@A A"A>/A`tA4A;A\AA AޤAB:BB#B0B<j)B;:UB7oB5D=B3 B3B1B-3+B$`B'BmB P6BAA4AoAȼAnApAhAyAVAAAAAAA^A&A{UAqϽAb3AZX+A_AWtAJA?A7A5@A0$A.iAANA 9A bA<@ܧ@}@At?׼?J^P>yXqm7P\%.u:aPEl/_GU,\!j(lT1wwLiϙJmYՃsShֱBّ݂g$_0r0nx(w HuJ9 M[dI"_xL|xrc4N\DUq>26Z&GzcͣƧ\< r`E>Q@`3T@A2A2AA%wA*A3+A:A9/A NCB6 tS3˶G IU)F@B>aA+A8!AJA`WA}%A2AAAA5A~oA&B3BeB&؎B4pB?HBGTBI/*BBB:8BMB!BuBBB~B{.BxmhBwBx&BwgBsYBnBk BeB\=BVD%BQ&BNŤBLBI BGBCB?"B9B3B.`B/OnB1c*B/d B+ pB&-B BBBDB Ah>AxA*AϕA;AcDAA/ A%A(AAA AAAAPAy&AsnAkAg JAfA_ߙAW=*ARAI'A?A7A0'DAAA`AsA@@8@tu@ L??H&s;d粿sU Ag m c8n5y,A8oAwPatؼ_(C'&I^7!d7Fv$ο>h(̣?'er$u?2` 頑7wX8jgvƔ bemtCpCn}q_fR[uN"7>07+D'vNޗM6U'?x @jK@@^@/@ @ZA"A5A A%+?A/!A4XqA3A38A1J0A*-A*HA4A=/RAAp%AG3AK!AIAHACUA>A:uA7A71A/ A!'\A7AA,A{Aq@T@?@@,@@!@Z{@@@G@@6G@@A@ @b@l0@֓@Od@o@\@@@@AA:rAAWAwAAEA"xA+gA0A4A9A>AGAL AHAIAAJ/AHABFA7JA3bA4A,A bAovA@@8@@*@nu@>߰L ( -F`gr:jhjiAu70m0Y Rb$[')!)u(R& #nٍP0qlgLie +Qx vPj9aq|P|$3_}}s-H2URo=޶t@XcA AT=|A{TAxAAmA@ANAAACABB|\B%yB1 BY2^8Y$)*vcs`~f0o9lDDT^'j7z7F7nѦiEp|CERE{( ߖk;ԲRI:ExJUaN &t%E7xeKtPNSgF0_.Q55?D]?@}@\@#@@)@ @]@A+AAbAACAA$ЇA*SA-¿A.A0A4A3A/OA-XSA)A%;A3A0A@m%@@ "@@@@@@@m@o@w@C@@S*@y @v@)@>@|@V@@X@)@_@Ƕ@^@mr@u@;@ˆ@cAA NACFAaAA!A%fA#ƆA(|A.vA0A.QA)aA$AAGA3A(A eAO@T@>@@G@;D?&[#+>y\u-C^_ylmB:?m Y`?1s =1#PU iu**7 =g_+{6Osv?zqTFPADԼ? @@\gA IqAa@A/AAAUAŮA.A7AAA?bB cBB"YzB-B5:B<,nBA%BA YB<:B8B8lB=XwBE>dBPfBY+B`[BcBcBBfBk˂Bn2BpBtdDBySB}B"\B>BB|BB6BmBBBBaB}BziBv@BpBjWBe%B`B[FBWBS _BPBO2BL=BKNBIOBDB=c&B6}B17B.B+EB&B#iB yBB}BB BiBAAApA܋Aˤ`A1AA[A>AW9AVAFA AI{A'AArtAJAbAAxAx:Ae2!AZ AP{AE%A9kA.γA#xA J@@ʗ@ɺ@ʐ@@@Y?.?7l=RMHTX:F?vTV{(YwP"71#ESObsԶ5>/}%9!`& GP f-H#d?SRv*+4QkSe? _.6wD |{ |>L>h6@;ZWq¾+)?-?۹ @/F@oAS@@t@e@¾@ @A~A A \@cD@C@*3@|@H%@@*AAA $A A;.AxA"rA&A&Z6A$A!OxAlA1A tA3{@@B@z@UV@:#@-@@\@@@z@e@k@F@4R@3O0@@[@IC@Cs@>@C{@I@U@e @t-@X@@H@@z@@n@@XA,A./A hAWAAA {A@~\@p@h@A*@A,@K@)t@P@] @@@ q> ۿ8-#!{nlքg z'vr<"R:l.]ҥ"S&@&ݙ _GhNG ŹU|vQqTD m K z&12GJ4YY+O+ ȣ$b n/?K @{_g@΢[@AA6OAvA A/AMA|AAAAABB cBBuB(yB/_B6"B]B>B@4BCBGBNBVOB[rqB_BdBfH"BglBiBmG^BoBqBsBvDByǛB}BBtB0B=LBBpBwBB}fbBz0BtcBmIBibLBf;.BbwB]7RBW0BS{BQ6BNl.BLBK'BHBE43BA_B<~B6B1B-TB, B+YB)IB%gBYBݍBeB IB BPAAAAAFAn6AA/A.CAAAKA&AFAAAGApA3IAAAIAw[AnAZAElA;ڿ]T!:f÷IXo$5_f'%> CPP`s>~D9InuF ;_Ecv{ FR. =3.[<#gvcK{tdl+g`TfwcZSrR;RPSW:_bk*J,;KmxYJ9Z>2 ȅ+O?@L@yy@x)@~a@@@>b@͍)@@Va@v@@G@&@@C@j@˨B@|@ޔ@@AAEMA_A l A0AeAkABAA2/A?@g@)@,@@@@@}@*@@@j@B@A?U?p?z??&?b???b?h?@0b@bj@;@l@q@@ @a@q@2@@WApLA >At AA A@H@ @I@m;@m@@@<@W@/!?6w!ܿʚ}1\-r(HH)Acz"%E -*AYt[oW[RT9݌,1@ 1gI*? ;x/3COo,*O>S*ِPؽս}(Êp le|!S; ug@>mh@t$]@?~@A A*7CA_NATAAAAeAȒA8WAԴASLAVAoBBؙBJB!qB)&B03B5)B9BBBwBJ_BTB])BbUBbY5B`BbBfO!BhĹBk:BlBn7VBo BoEBo"Bs+Bv͹By Bz#B|`B|PB{IByZBxBuBp!Bl׏Bh}BeMBb:bB^B[%BUBPBMF-BLiBJqBHqpBENBBBAzB?B:B5'B/B*/:B&MB''B'@%B$}B!'`B}GB&B|AsNAVA AAR/A1A_AjATAAAOAAA AxASAVAAAGeAyA{AjՁA`YAP|TA>`A7kA1A$#A\A=Al@[q@̴@@@g@'$?ԄJ?=0MË&r6xg''eֻVA!X8|bO`Beg)hibixmty}jrN<:!pIf̂4|t7%Xk,*RQzlp f3\dQļHa?:~8=6X:H4]/la8*@6[v[^OTr-1b̿*Ӫ?I@8?_?@@{@"o@ N@@J@D@!@w@@(@@W@@ 9@_@8@͠L@@q@ہ@@Z@jA.A)Af@l@qV@Ѽ @C@$@ͳ=@{@n@(@m@@ּ@^@6<@m?L?l?~bE?Zm?Agf?CT?[?P?X?ں??+ @@R@[.@O@@u@)@8@IM@B@Z@ j@Ԩ@r@L@獯@ڲA@@@@ @@"@VO=Mv.sj5k KfO) : &7"|/Dmc Q p @E3?c@A.AA=AaTAA*YA*AmACpAi AVAAqUAYAsA^AkmBZB B_BB$KIB)B/1B5&B::B>BEABLRBTB[rB]B\B`FBe`BhBkBn|Bn5Bn_BmBlFBk+BlBnrBqiBs`BuBuBtZBrBpЪBn9(BkvBhBeBaLB\BW6BRhBNBK:BJ.BH?ZBEBCBAB?'B=\B:B7B2B.`B)ܹB$B!ZB s]BB8^B,BB1oBA3;AjAAAAAYAAA]A0AAA]zA'ZAAxAAAy&Ai_AZEkAJA8A+~IA(A$i A AbA@}@^e@@q[@I@?>ӫS&=u6^" m -2?>IKLM[NIWQ|UX("]cahn~p|tqsqS=q}Gw7?}xeYu{{}''Ne}Syh|,}²zwTpi Gcl[jVSIߋ>6/s)T(p2jFM_coqnNǢ`uzv7Z&(,?y=:>#N?jN??_?0a6?Ei?-0?@@A@_@w.B@u@Q@|@~k@0@_@@@:h@@@m@p@i@7Z@䂅@'@N@J@ɿ;@_K@{@5@@@e@ @O@q@\@@=m@#@Ā??z7?,?"V?KB?r?p?\?S=?c?iv?0ɪ?\W?G$@7S@j?3?-z>Qy,9)q JH~c}`%5: v ~WD - Z*9JOh/ibx` ҁz]Mr8>_nI댢y$hO:gIj?1?W?=@@/@:@:@5@4x@8P@?@I@Xt@h|@s$@zM@'@@ @P@3@m@]@a@;@@\{@@5,@9>@@ @@e3@RAq@y@?Gc??9}?Z?N1?c?/??؜?%?^ݗ?\>Z>K3ӾEB)m,v|Ƀ5\ؿ$Fb)E73!qb\E%YWK l9}ukGd`vк(H)t U.0: DQK_ ,f|mQzKTGxyuz#Fųz^yْq^`;͸dtPȚ+y&n<,"e{R}HbOjinmTj1 ţtevw>J?,@.}@o.@(@6h@LA"*AQ+Az^AA}oADLAbA=AӱA5AA1AAɃAA AB;BbBBB B" B&kB,B1kB6eBBbjBgVBh9BeպBeBhBiǂBh%BhlBguBd-BaVB_v#B^)YBYBSVBQyBQxBPBMBJBGlBD]BA,B>cB:B7B5%B2JB/B-N]B*6B' B#tB B5BABBxB TB A0A:AwAWhAAہAkKAAZAAAXAA#AQA~=Av*AmzA`!AOA>A++AdADAWA>@V@@~@J@-;@W@1[@?h?IK`-꿘3߿A\x hxd:ĆJ^G* X`D^X!G/%e. 8B?MUZ]au@ddh`:]R[yZB[;^:bYQfbfa^:\&/VoS>V!UK|K=8/G   >(,-)$2| vU[+ƥ~ ; 6KK̋mu-\ma=i"r ѿ࿶Ƙ˅Ϳx r6k=6?2???b?ߖ?<??#\?(?a?8@L@Nz@"(@.w*@F@dS@w@x8@l@a$@a@m@vzr@o]@_6@OP@D@=b@8@.]@#4@2@3@#@ V????3?%?[?20?Lgc?`=L?o?T-A?>=}=U<<>Z=w:,%n/^0?H1Gq`7VɃ0SAh-E=֤2}UR7}%*)r{*$32Z0;W.2>!KXfd;o*pyex"w `9_}QP86=dTk6\ *y-rgcVDr,4T# /w޲s7B:_B6N-B2+B0B-FB*Q]B(6B&B#B"-B dB(B2QB 2B=.AAHANANKḀoA;(AAAN|A~AVAV i$b$W#\&4Ml1i| * ,9L}҇q93o2=Ku5~zc`J֌5ZxV\EvQ$ ӑ>վ??P[?_Vr?]e'?~dO?S&????bF?@@@@!@8_@WT@T@@9V@2L@>@@AW@?@;@%Fl@ b@ @%@)G@3p@4R@+cv@&,?m??'?PG`>|mɩ9%Tݾ(hXU+4žU!qթ󽨩H¾y0-˽Г(QڴgX TRr0ض',Sp\,'y&t~..J7y.@@OЭ\1l0:&&d);wv'C5Nh/',v=g!iatekT3j_yP?GF@ +,9*oք#\V~'^ ?D@,P[@k@5AA,IlA<NAC{JAIWAUZAhAyADA9AqAEAA>AXAAAŰAr}AZA|B*BʱB PBB?B"BOBB^B B#B'B+HB/qpB4B:B?>BB[BCBDrBEBG|BHBGBJiBOBOUBLBL@BOnQBR9 BSJBUkBV,BU_BT"BR}BQx8BPSBP]BP[MBPŜBPBOިBNsBNjeBMBLBK5BJBIBH|BGW4BEq.BBB@~B=B:dB7B3HB0B-?B*B'B%^B%^B#+HBHBB "/BQ`AAyA&A؀AɬAwKAJmA:ACAHADA AA AAwAiAZ ALIA= A*:AdA>A'@Q@۳@ht@1Q@ @$@Hd@@P@ @ E?(?Bf?'gƿy׍-HPw)wMV4rG~Έ4uTn^G! !'H2:/E>\BOB= D7A,'>$a>"!7' <} ڗdF 1ڄL:e$[&sI"Ju)]7KW7'b A1䨿,۾m:9C>?@d??@?(?ؼ?U4?????P?֍?Ħ??Q????ۆ?/?v4@y?sb?I?5?2?Ʀ&??:?_@&@I@??.??`?gZ?Cd>1g>_>>7 ?3ɖ?ɧ??|7? !>c>N>^.ſGBzNdX.m.GO;z/tsr/l ̀]O k U3NdWI<^͟a *q :uqHj).6 BwRZd0~si(QqgD2@U}ȡo=`1B@`B?h{B=r:B>8"BABBRBBBC5BD>BGBHN.BHBJ@BMm'BO'BMjBIpBF-BE$BEtBEB<B;`B:&)B8dB71B6nB4tB1DB-B+AKB(B&B"VBGBUB5 B ,BA\.Ac0A9AQQAɋAA#A)eAtAC(>x? qr?P=d?i?d@@ @:5@=u@'?jA?^?6?DZ?DI?f>P?lA??R? ?R??ra????G?/?y??:?f?9V?ь??'?v@0@@ @@/8@;~@-wm@r)?pY?4>lR0n/*rȳf4ο*7PM:0|m•(.y"3GahN"9T CJ@:{;GB-}Q I ʬ%&+"4>EHNV[_][^ee@mst9/yq||zvkonfUM\jvO?2 O+=%U H8 5VwHakl>F/$0=? e?Q@()@Lk7@υ@ž+AxA7XAQAcAtA1ABA_A1QA%ZAnxAbAAÍASA=AJAA#AA AAaAܦAlA.rA',B BB!B B m#BBB,oBBbBWBYBB`PB#B((B+B/aB2B6?B8B9yB8NB7B8~B<'iB?SLB?66BB=nB<@oB;B;;B;"B:B:CB9y*B8}B7wB5ԡB3B2B1tB0wGB/GB0pB1ЯB0AtB,bB(ޏB&B$B BTTB.BJB`9BBqBp!A9A:AACAW'A~cA-AJAAAAfAAcAcAzzAmA^APfAA_A1 A!Ao/A n @@@?@p@$@q@n.@O$Y@-\@Dy??ѵ?T?3?D=꿜 z)2RM_ bq9q΁8^ 'Š%۶'.+isi `HU|mgl4*#x'&"wdQ 40U ya'Kfkxu'yz{i[YP Eu8!+"  >ƿEwڿJEܾeDž=> b?i>??T?tN?_\?`?H?ȶa?р[?(?\??r?&??,࿡s1&Rp+q+eUpjadLזJ3[Lj: mp'3} ζ:ϠͦHH` 4GmȰ0iQ ltV")S" #: D E`([1|7e: N;<A\A~AAA؝A`A5ÀA=nA A!DARA'A:A.AAAȃIAHKADoAA95AUlAABoBp}BpB lB BaB BYBBBBkB#sB&B)eB+xB.B2B6B8B8CB4B0-B.TB-sB,wB*jB&B$AvAfAV6AHA8}A)ۺAxAdA Z A@@@@/v@@…@za&@Z& @4'@ 0@n@@F?f?k?>y>& | 5Xrv`<6/؅]U;Phҡ'&t=mVYJ?@tv#b_ņGSΉ"R%ϥ~e+D0U)HB/ K]ZzĿ׿UaYF{" ٽc552>N}>5>>A?z?>Se?\???͎K??6?{@.@??pr?[?ݿ ??U? @ %@n@Q@ F@T@T@@&@#K@,@-@&߉@ ]@@@?????25@???> 6=|> >f?9??'?>?YH@"e?ϖ?bb,ڿH%*l'K#h9$#7=5@.4J#ddvfzPw)%7ѱ?ߤ\iW! 7vB n}ƫ6 sƢPƖG; S~D8h e Sɩ)x.3ܫLQvzXA+ ׿z n??$k@&֗@N%@ia@@K_@π@A AA!A-uA8)A?AET AN\A]As5AAҫAodA"%AXAAlAAAYAAyAdAњA*AAlA#AAA9KAA8B2!B*BNB :_B HBBBZB݆BxB IB$NB&ڼB)B-{iB0B3s|B4gB3ZB0B)wPBBRB iBkB tsB /B vB `BB'B@ B B!B%HB(B+}B-B-FB,G[B*uB(NTB&B&u B'B)B*jB)f@@.N?*?,?bS?}?~?^'?2u, vTms1ЏӠm6d*-Qr yO0*M&˺)˂ːN|:)qۦq-㴼 s#139DuW/.$(/'+y;jSI-- о%l =x>u<>P$>>?K:?/? K>KŽ)a>s?Q??z?W{?Q@l?i-?b*?y?§M?4??B@@a@@ a@:@؞@@׈@,p@E7@P@L@F1@E @D@=f@9f@C@U@]@)@U,k@J@G?@A@-@? ? ??@-p@@ e@\?i?L??B??"(@ @:@GJ@Kt@L@H@96w@?&?y?fT>ӝP?5OοUrߌXB)$*-LjVzVF݉/o3 G'ĸ]"XLp^g1!,lDma |*nhiAwRqȔ040{dm_-xHDo=3Ͽxٿ- ڿ񊘿ξ@?/@9r@@@`>@@pAA8AAX@AA 4~AA *ApZA(0]A>AW:Ap25AA%AAۥAA?AMA2A^AiA*A0A܊ATA7AtAFAuA:AA*A+ABFBjBBB "B .B 2BܶBBBB 2B#B!B# B$ UB"QB BcB3B B ABbeAzAA'/AByB&A,ABB|vBBGBOBNB}B)1B"(B"B!YOBaB{B HB!HB lB B B!=B"B"BB!`8BYB(BβBgB-BRBB !B-BCAsAu>AAv`AA㘉A4Ae Ag)AAPA0AA.AxAAAAAKPAx4AmAb_AVlAKcAAA8&A0NA'A&AL.A A'@ָ@~@H@@@G@PP@@o@N @2SC@~E@F@r??܄?ѧ>'gbϿȽ hoRv1!Lh7lxOdpsWc{G;*t@ w@@ם@s%@e@%@3@?SK@Jo$@S)@Z<@^j@`֐@aF@_x@_?`@fd@r@v]@kl@Vd@El%@;@/`@Xq@ Z@ m@ @6@;$c@B@=t`@; @;M@7/[@/(@&@@Է@!)@.Py@Bx@X@g@j}@_@L@6@m?:?t=I$^kEH'6 ('M,x!d^(rDRw`Ysxu%}-kşzrjj!L`uLyMq?nrfET<)tV Z¿((+$..L! VEܿQBґC6޿Pǿ%X׽5>?9?] ?Ye@F@8b~@:Rw@,@-d@R@m@.@AAA*GA5`A5MA*[ AA n"AA AbA*s"AD(A_AwAeAAAԜAAA2+AèxAAAAکA;}A/A8kAzAbAArAA]A"ABxB(BVBHBB B J?B 8BBBhBdB~hBƨBҷBxBB BQBA&AABAWAPAjAAmA?xAqA A&{B} B0BBXB ͫBuB,B Bj$B B B B B1BEBB(BBtrB BBGZBBIsBxBB[WB BB$B>BإAAQAAnA:AI:ACA5AL!AAAnAIA\A A%A'AAAQAAzRAmպAbn$AZAT&ANJAFA=oA3.A((A AA A@@5x@!@bY@e@@՗@@@4h@x@M@$)o@?h?`?S?=>b\:֦ݤTE,n17ip,o9Vlk K;mU`"z*6`;CR_bq.v{,hdA> Pe̿Yo) ʾfٽTZؓ0.ֿ>J \ G9W/fUgN@FI@v@_@@x@f<@S._@C@8$@-H@!Rs@~q@@VC@@@?&?fB? ?@?yV?9>OG? ̿=׿v¿xݿ-ӿp/@_ fj8?7ZA 1%#}/64B6Y698s=iaFT b[7k2lsOdZ4UVDV"LYM3 ֿS?INω>x>?,n>9>NBC>*>> e> 9>CB>:>q!? Y?1?@?K?Z;?p????׷??a?y?.1֏yʡMcP萢ի]vKԚ#&?8bob2u05L翮 dd$=}?B@[@"@,Z@.*@1&@9q@AÇ@G@Lz@Nyv@Me@G@<4@.@$R@@@?m?W?V?i]?B1?(?? >?ѓ?Yp?ч?@????M3@ F@3@R@dl@nW@C@f@w@zC@l(@\- @LW>@@I@;/@;q@?;y@Aû@>i)@3@!AB@ /??ڝ?? $???h ?\S?V?Gey?*V? |>>~?؎?? &>>а>]&#>=;t9+?{c(_&9E- l.(H%u˿HN迥]aKR-CTds>)$N?(?&?O#@ `@3@_@{@!J@nr@.@@֙@p}@\@v@s!?@m9)@wg@@a.@ @*@mw@A zA ZA/A=AX$AAx8A!AALAcA6A.A^A}AxbA_AlADA}A-PA{uA&A)AAA[A?AlAyAA4A[A(AA|Asq AjXAby A[8ATANAIz[ADA?A:rA4dA-IA&AqAA A@,d@ E@Ӥ@1E@د@d @+@P@W@ܟ@P@G@s@&F@@iJ@H 9@&@ s??@"@@YK@4@y[@--@C|@^؃@uf@ck@|@t,@o@sN@|@0@y2<@d9@D?@W.?U?5?Tg>R,>}=A5=N=0R>Z3>v?<7?l ?lv?C9n?d>??_?f[?p?O?X̺? >>>X~=#@=&w=k><>?7 ?d?h??=j@C@ @ @D?@@@ @6@6???a?¶?EE??H'?r??{?m???$??σ?@@*"@@ @@@0@J@b@tQ @{@B@MN@@ZP@@x@nՃ@fl@`ֈ@]@[ش@Y\@Ut@P^@L@I@Gb@Fg@D@A@>Ɋ@;)@8@5k@/*@'@@8@!o@ @~@?=W?֜?u?ޓV?پ?֏P?Ls?q?ު?7?@W@ p@!@@¸@@K<@ %7@ @3B@X@@@{O@!@@@ ~@ɪ@q@U@${d@2@G z@_@y@M@2@^@@;@}j@X@;@A@M@sAGAA ikA%AAwA'KA0A9jA?AD{AIkaAP,AZAiˤA{ALA A AAYAAAUAA{AACoAA AAA A~AvAkAaA\@DA\Ac"An5A|OA;@AۣAAcAsAoAAAAeA?A^A7AgAAA݀A_AݏA_*B1BϙBBhBB0BbB=B8B:RB BrB=BlAMATFAaA AA觟A͹AA;A\AWAtAFAcAB2B_BdAxA_AA9ARA'AJAWABGAdA A~AjAeAGArAüAA[AAխAA?ADAwAARA{PA}A7AZCA;AAA&A3AxAAA.AAA`A4BAAA8A*A{AAvAAAPAAAAA5A='AAA}NAy AucAr~Aoz AjƃAcAWfAJ1A=?PA1/A)A"AAZA8kAAA^AAA xyAf=A @V@@ @,6@[Y@ڗ@4@ȫ<@[@):@Ǯ}@t@g@@рe@$@@@X@c@2@CG@qr@wq@J@a D@9@<@*??Y?t@@ @@!C?@);@0@4@1@*e@!@Ÿ@@!u@'@)@#h@pE@S?;?ȓ?u??CE? 9?v@ x@@9@YB@tF@@R@mbb@PI@2.@[*@P@hJ@8@@%@@3????&>?@?l? C@?@ @-@$F_@-# @3r@6@9K@APA'}A/A5A:dA>ABpAGZAMjAUYA[A`Ad3AgpAjmBAomAvA~mA^yA~ATA0AAAfAUZA@A&AA3A\RAA_AA*AƁAAA;A=A;AEAA^ALAA|AXA{&AqA,A AGAAwAvA|oAĊAWAѱzAEAܺOAjA#AgIANASAILA33Aa#AA FAm,AݷA퀺A8A[AQAA۾{A#ASlA+A0AASAAIAqAzA AAGAAUAjDA6AXAAA/`A}AA}A7AA礥A A A~AXAAcA넛A0A;AkAAA7AAA AIA AAAAuJAAA#AA~DAyWRAq2AeuAY0UALABQA:A67gA3iA16oA.A+A&(A!AA|A)0A LAArA2@!@qw@v@5@d@$@@t@?@ِ@Th@T@:=@J@j@?@B@H@U@l@6@y@D7@M@VY@`,@@r@+:@S@@X@y"@@P@@@+@U@/@0@@ @@y@Y@@@Kf@~K@@|B;@uB@k@dO@e@tbV@MZ@v@4@*@3@@@F@I?@4d@o@cʁ@a@a@a 1@]2@X4[@R@O~@O7@Q@UA@X@[@]]@^ u@_'@`@cr@f.@hy@i_@jt@j@l@p5@vG@~i@@Q@L@@˅@g@@K@O@e@y@J@^8@@O@l@I@Ҙ@r@@F@Z@Վ@ؒS@@e@ܬ-@@ڭ@m@ع @G@ٵx@ @q@ݝ@ށ@@ @\@J@8:@@ ;@l@_@D@$N@@@ҝn@9@u@ِ@ܤ@V@\@]@z@9@T@c@@"@AUAAAyAAA A gAAJAZA|ASAHA"|A%A(HA*4A,A/ljA3LA7AA4AvA#AAAABA AA*AGWA4A&SAR|AuAAUAAAA>ApAMAZ8AˆAIJAƪnAQAɦAͲAAwAXAѢA0ANA&A$?AܲEAA޺AdxAAAAcAJvAܾAA'ADAωA԰AcAEAفAҤwA(AaAԞVA~AߤAyxAAA4ANAAGXACA?A;aA7xA3vA0A,xA(wA%^"A!p AAsAA}A A 6NAKAAՎAAAeAl@)@AAAܢA7AaJ@p(@m@A(@j@<@%L@@@S@7@l@J@5@AJAT@@@t@@³x@z@@@@@`@s @k@@ @e@@ζ@[@@@0Z@lN@@:@@q@\ @eu@}@@@7@#@{@s@"@7@@=@ @6@x@@A4AAA3Ao-A A _6A 'A DA AA+AYAtA7AAiAxACA#AA`ADAA2AAA,AC+ANAF]A AւAcAˁAAYYA7AA^AA A g`A"=A#SA%sA'AA(A)A+6A,A.A0A3 A6A:A=fcA@ ACAFAJIAM}APS/ASAVAY`A\-A^A_vA`hfAa*+AbAc.3AdօAgbAiAl|AofAr*4AtnAvAxtjAyA{0A|A~~ALA."AzAAAAFA+AeAAGAA~5ASA'A*AAyAAAyjARAAZSAϱAA A"zA:A3kA?qAA,A"@AOA3AAAuA5AAGAAASOA+A>EAVAA8WAAԗAИAяAABAAGQAj A A"AqAJAAHAwwA2AA5 A&AΆAqAtNAΌfAwAAϯAnCAI#AzA0A!A%AO&AIAAΤdA`#ATFAˍAAʦ ARAAAlLAȾAA&AnA)AUAԲAAAAAA(A2]AAAUA|AFAAA;NA~AA*AnkAAAA9ArAuAAAAA;AO2ARALAFAK$AaAKAA|(AxAuHIAqAnAj}AfA@l@@@3@א@ͨ@̵@л@ٝ@Yi@+AvA QA >A A A bAD@@t@@i@p@ U@و@[%@s@6@ˠ@@ @6@k@@{@@Q[@^@@g@/@ @-@ʯJ@@@x @Ч@ӱ@ב@%A/AA A AvKAABArAlbA A/=ACA&A]A\~AAAAAAASAA5AA 8A!$A"AcdAdAAeAg~AhØAjĐAm7AokAqAt@AwAyqA{)A}A"AXADANjA'AgAAAɗAA6nA1A9>AAALAA`A+GAA#A'A;)AIAMhAB(A)ApA3AAAAZyAeAD;AAxA8AWAAA\=Ax[AAnAAfAwA >Am}AXAAAvA.TAKA%UAADA8AfAA7AZAAG)AD@A@sA=kA9A6úA38A1kA/mA-KA+wA*A(3,A& A#BA!AAVAiAA]AoAAHA.AUAծA ,A A?A0@k@ @AAAODA1AA!KA$A& A$A AeAA Av@X(@22@c\@R@ظ@ݔ@@O@d@ڮ-@@@jG@A@@@r@>:@l@o@/@8@J@A A^AAATAFfAA'dA AZAAwA f{A!A!LA".JA"A"]A"XA#TA#+^A#IA#pA#A#0A$,oA$KA$A%4VA%GA%A&jA&A'A(WA)S)A*A,A-#A/A2 A4{A73A9A<]A>\AAoACAE=AGXAIAK^qALAANwAOTAQASATAVAX\AZJA\LcA^^A`zAbAdAf٧AhAjAlAn5bAoApAqAr6ArArRArArAr_Ar6Ar"Ar-|Ara:ArAsK\AsAtɲAu&AvGAw~Ax]Ay-"AyAzA{@A{A|A}N&A~- A6A9AAAASA׵AAJA*A2A*pAAkApAAAAFA-AALAA,AA\,AAXA=AA[CAAWA=TAAAAADAADrAAEACAAAAWA A)AU|A#ARAAALKAAgAAA!rA:.AQ[AjAAAUAAZAAA/AeA~A`ASApqABA CAAAA&AAACA,A ~ArA˿AAA;AAŸA{Aa A3AYA ASAvAZRA3AAAA!AjA(AOAkA]ASAAA"AS0ANAAA A8nAZ!AmAkARAA/AlAAhAEA)Af^AFAT AAlAAdADA5A)AAALA]AkA{ArA*AA!AtAA}AzAwYAtOAqAnAlAjwAhuAfAdAbA`ѬA^A\$AZ=AYAWPTAUATEkARAQhAPAOANRALAK-QAI.AFADZPAA/A>A<qA9yA7*A5<=A3A2A2A1dA1A1A2A1A16A01A.V A+\A(?A%dkA!AAtAAA$AA7A|A/A%A,aA3A:\A@WyADSAG-AAGAE͙AAA<42A5A,A$WAA A ,AA?AP @7@|@@`@>AOAAAs_A=`A AAA)A A "A ZAAeA#A˷AWgAAAQAzAA.h A.A.A.A.i?A.I:A.&5A.FA-A-.A-XA."A.kA.׌A/fA0 A03A1A2A4A5DsA6A7*A9 KA:NLA;A)AhAiKAj"Ak AlQAmAo-ApAryAt7Au AwAy~0A{3A|A~w A2A#A| A0AAXA=A/A+ARAAbA=AA~A"A[AMA!AAHAtAAA :A{A'AA IAAyAAAA|AAA=AoXAAAAƔAAAAA8`AAAAGAոAAEwAA͠AoAK6A~AAtAAA[A2AQAA?A A&A8ANAeA~.AjAoAHAGA,AOAAAkkAEAA2AξAANA{@AmAgAh?AmtAuLA}>AAA{AiAMA$lAAAcAAAU|A1AGA4AACA:AAAWAUOA-A AAΆA4AAmABA%AA A #A A*AJAsA+A__AYAqAA}AAAPyAAAMAĵAJ AAs2AAA7AA4A3A}A|WAzAxAwAu(As3Aq>AoP~AmpAkAiAhHAf*AeH8AcAbAa?'A_}A^ A]eA\nAZAYnAXoAVAUPgAS:ARAQARADpAJSuAPZAUAZRXA^FAa.zAbAcPAbhtA`2A\AX>AARALAF*1A?hA8A2;A,:A&םA"0AYWAZA4AA>TAGAAxA@yAAA]A!'fA"A$%A& |A'r^A(0A)A*A+XA,fA-A-A-2A.5~AAThA>sA?A?IA?8A?dA?6A?ؐA@A@kA@AAAAoIAAgAB+sABABTACOACADTAD}RADnAEPQAEAF1HAFAG%AGAH2AHAIYyAI{AJJAKA6AK[ALAMNANHAN(AObAPAPRAQbaARARASADASUATtAUAUAVMAVAWAXm!AY=AZ A[`A\#A]GqA^A_3AaA=AbAdYAfAg&Ai"AkXnAm1Ao ApJArAtAv]kAx AyA{hA|A~xAAANANAA*AAUAAzEA ]AA,A3AHAIAYA)AU A A+AAnA iA1AFAGA4A AOAqA!AwA1AAAuWAA5AAAkAAeAjA A? AA'AKAA"AAAAqA5AGArAAA0$AiAJAqAYAAAAA:AnUAX;ACA0mAA VAAA֏A'AeAAAdAGA'AAxAAA\A)AA-AAAAAv/A~A~QtA}A}BA|rA{]A{AznyAyQAy1AxRAwAvAv1yAu}wAtAAt?AsmArArAqunAp^Ap1OAoAn!AnTAmAmAlsAkAk&Aj{AiAiKAh]AgAfܽAf7AeKAd~AcAbAAb Aa87A`f]A_A^A]A]5"A\qdA[AZAZ?AY$AXAX2"AWmAVAV7AUATAT0ASz4ARAQRAQ"APCAOX?AN_AMWALBAK LAIfAHAG|AF;vAD>ACABAAuA@q~A?$A>̵A>9A=3A=^A=}A>#A>A?A@AB>AC AEAGdAJCAL6AO5eAQ8ATPAVjAY/A[hLA]l]A_1OA`AaAbgAc1(AcUAc AbAaA`{A_%SA]|A[AO0AM:AKbAIAH"%AF AEVADACABABe"AA+AAAA{uAA^AARAARAA[?AAgAAtAAAA.AAAA}AAmnATAT^ATAT AT޷ATAU hAU&TAU@AAU[)AUwAUAUAUhAU(AVAV2AVUAVyAVAVAVAW]AW?iAWjAWeAW\AWAX%=AXW"AXLAXAXQAY+AYbAYAYհAZnAZKAZ@AZ(A[A[@A[~A[eA[,A\;A\z A\A\A]6A]u$A]~A]A^/pA^mA^IA^HA_$A_`xA_A_رA`A`P$A`A`AaTAa=AaxAaAaAb*3AbeNAbaAbgAcZAcQ1AcAc_AdAd:AdtAd,AdAeAeTAeqAeAeAf)cAf[Af9Af>AfAgAgDAgnAg+AgAgAhAh&AhE~AhbpAh}JAhAhAhAhAhAhAhAiAi AiAiBAiAi>AiAi ~AiuAhAhAh*AhzAhAh*AhAhAhAh{AhktAh[lAhKAhuAcZAbNAbZAbAb]Ab1vAbAAaLAaAa2AaWAa,6AaA`PA`AT:AT8AT8AT:AT? ATE,ATM:ATWATbATp ATproj-9.6.0/data/tests/egm96_15_uncompressed_truncated.tif000664 001754 001755 00000001674 14764566077 023304 0ustar00e012349e012349000000 000000 II* j2BCD:ES( L d#(  $(,048<@DDerived from work by NGA. Public Domain2019:12:16 00:00:00WGS 84 (EPSG:4979) to EGM96 height (EPSG:5773). Converted from egm96_15.gtx (last modified at 2018/10/05) 5773 VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL metre geoid_undulation ??fV@sproj-9.6.0/data/tests/fr_ign_RAGTBT2016.tif000664 001754 001755 00000101136 14764566077 020022 0ustar00e012349e012349000000 000000 II*V -- Generated by cloud_optimize_gtiff.py v1.0 -- -- Metadata size: 001043 -- x vxK~2=Su  bd@ France - Antilles - Guadeloupe 5757 VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL metre geoid_undulation ~jtx?~jtx?33333NX9Ȗ0@RGAF09 (EPSG:5488) to Guadeloupe 1988 height (EPSG:5757). Converted from RAGTBT2016.gtx (last modified at 2018/11/19)qp2019:12:27 00:00:00Derived from work by IGN France. Open License https://www.etalab.gouv.fr/wp-content/uploads/2014/05/Open_Licence.pdfxԽTTOtw ]CwttII*؅``%) ݝt{ Ps< 0.~ϳO)Ʈn;s{.0>NyxKx`>>=dTԴt LL,\<0aq iY%U Mm]}Cc3s+k[{G.n^!1I q|pJjڑ#GJjZKzzƉ p: PIN~(tg!X.v87z}찉IX2K@lBq*'R{2FNPG/S(t6QsVDfr00˧2+x*Gi;^89 ';|Mogab ..xmBHDBXhhi011X8yѬHH)((ijZXawyE'''B)K|C)=rرcǎKK=uH Q@{bB[T5H1Y½i\R?탛vecVPQ ˖ˆY)J#g_1=gP9#vCDbr雞a9f &\ ?52YTкKWc^SmeYD|' kC ,; ˟пoqH`w, 8D%`aG !L"#+'$,V6 uvu9s#K4+ɇR e#GRTby!2^^K0Ld wXƁރNo&+Dz,BOuY"t#Mq|^W'[AX2hQM햁cujl j}\!zj_LI?E?"|HWqq-g‚OHhq -XpprsV!V%edeU5tL bcd% r(9 %=|8{@hr٧,3*Bw4)ս9ۭ$4p!|͝>0g DM(hSŏ?B׼,i0}@L"Tk;<1fNY}Q8V>/YO÷Qg\`Vpq!Xp,-@ 9%C4(t_P&, EJZZV^IY ܭo@聘C(V,(V!ZÇWPp#8%FUI/?1v1J u`Q>a#v^ʍi5%2`Ee˱?^g(ƞɭ 3Ւ<;glAc9: {iHnl֙OھyɺydC-Vbl|ȴBI A[ 7/ȃapaQq I)i9y%X@}Qx@Xi'w0&2"$(`Ōk + u^4577 -Q<[n3U<؝Oǫyk=x_%֌`-TL=j%|)3ۮ\*޼J1"Xזܼ[K.'xW -:V1yu+h]A(%B[\`[P 򷐰͇,b2*M̭yGāt%, *PqAѓp(>...&:2"40`^EiOέXQr5(&k:i7/("pdK,Tuħ\uA9XSJˇ&{|b:~5HHyĥ.C6s?:LW-y%|1.ǃ"Lz'>CXgv^~ϔ/W~ -382h({&B9\tB[E@EDD ,Z:z&f.n"'$ 7CPBbf3q9~ѱ P=cI2xHscc"#"B|= B RxnR%zR{iYLÚz ׻SR:<ZX֣w !bL|CBw-r"L,H/l Ҝ kJG#)I0)vP[Lo7v+a\#  ,LLLllp@[q HBCv, A) H:Ċo`(@ 9b%x(D> ~A'7K9nu"ɽ]9fnkA.k}`'\-2g{+dd_Q&/\[;7BЫJݥ;WOdAxW R"qfD0'>8Za} %&_7dsw_+;+.3,yx8؀M 0$\R Qm 33Tf^`ZWV106E +r Q""BCÂ|\3Bj/Y&%綨U3LM4NLxzOr߹\^ (@JUu15Y,(ΫD'Aү/dk:Іm:/lLgo @ٹ{6H'=YvjQVv8o00 pXe&iB rP B~ _>eW +B%`LL44  h//B'g7~~$)Χ3UROŠle /)jy:y4wL;(z.`&y졬(j%Qu+8k+âVxǿ󧫤#(]h3Ύ68Yw/V4erdq"zLgƥO\dkLINܜQJ73N0x=Wx,'>K٩p6վXi!;\N⻕mHAm*]/ %)hnVq16V!QYZ^^Z^Y]essS $Vb*޲iApRRF&vB¡4]IAM4C3{ "SЬy{:ﵳ4Ж Z]Q?ɏp~H}s/C tgǍ"8Asim*A7BS#]FՈ3d9Y _r8}M:yhE)1ۓ^FTįzB>Rإ p?$B;r c}iccyeqiaaqiDu,<<|("XAfffvt 0,z{gߠq[uZ0XfVxdmmn\_St~rQ* #P 04z^ĩ.,)Mϊ(1bu8y"0 }m!+P"N^.L#KSx9hxõ)ZE^?%1>N2FZIV9nd7Ư{CX>>6"uL\|-]AFF&ȴ  YVQUzJj @IP``@@```pPH`ʫXZ*BWܱ0ea~2}Wܹ}=}q B̀GQ/CpC=`x΃CLE*m)Lkz>{xx? ~^v JAW}%&$^|"W˳N.V?MeX~#,;I yX+k _g/.@w$BDX0f! y@ I(!~; 8,"*`\<ʀD%4Yx HGxMyRNP fCf)J+:PoܺwANy1R6w|qvS qqu$/=/FL # bǣWVmRr]O?8:Fb)vQΥ/OgT`ٹ²^q17WNOOM]XXY[__۪ouAFfN+ QzphhxwB@D0*@Tݿ?oig!WmZ^J̈ǚ4an{勘 wŨ/T+/dnl:tL7Y WKjKc|&ړT fº1|PGˍhX`ɸs?6^%coFncǎD:.`c/OONNLMO.(OP rBݔ m,+a(kZٹx >w JlttTdjd@O[Pq4ɐT!+k+K3Sc#ã#csKkظ]A;YtRzMaH*(khaupmxT4L9}x{y^;Ks#- UِQׯ*j>ƽ)P՘RכZrgn$U E:QhfIR T>;*z&1;lГKabvpɽʄMft0T4;XeHGFB߻xy&OʟqЂi{X% ůSCCS3K+x?گA@aA>~:B?8$ hj*A~ttvsrp631TSQ;$,<šM^/7q|YNYx)n)t-yTPzctkbsOًa(l)}Mw7oaFLyh6ku'{@ֆQ_{.LYnW`9iUR~T0q@ Z]_,k z*+, AO.*!Aa A@B ; ]-5eEyb1{vu!/yKF#GN8H,*N\*;ę\5JJqV* Hk,mՖEM)zo&N) 6b1.fъr~W033]"PIfy ]9;6\yyK/E`fVvLe _JʿJqX++s3C=}#_fV+d A@ ,pr EDTSBv6.A!! a:9YYii(+?+:vҦx{Ԯx烆v"7D/R3XvvݫcãTVX ^vTg%##o7yg9?òuq<i0Wfz{{{zƦA 'CJ -JUh!T:? Zza֕ K((ijYu Ȕ}!Qqssq^g;k`V4Ud%5״yh/\Ի s;Q"nZ<ꧯO_ʵW{=3cqnP C4]j3P5癐t#իWxC? (gZZ^&֤VsR2۵lrU;XvBƟ_Pİ&\]Goow:ȃQoZ Bl\\|p1 9Eu-]ckKGW~~oD%*phean$'%!JOZ7jPrq,EZ|)Tp{g88)9Ӷ Y}N5F.} GbRGq?٣Kᨡq=:ȴ:2|Q!>)H MJWU #l.wlt*AGw@'5\<\̥ή.oh:&.!`2+CA(T+P L9y%u mCsK{/}J/ ^^{{; ScCk$DZ / p~,ta):.MrٰՍ-yâ6RS3Bȳ֝k>&ɪ{GE*ʻ8k|~vBG!sz=VK/v3xƼۛ̔/kWaRVv@cc) ȯ`؄DK3ޱ-VIɷl- 23B-V`pQ1I ,=Cc ^P p K"``occmjd,/#.t<.mi,bGJ6O;Cͧna0Z/xTC2:##GO ~?wXEpuĭy]XW2̐_CYdKmo81?\}GQ燭G2((xjw姱--Dd @UZ]S_7+@XP3ЀDeKWQpq K+ja1 bOww( G6 WE7^ <(|[GcWZۇgfRD**!!N0{z]>aŊX=4"D|Ԑ"% zD?6KM,r#XHǣ |[c*kl~wf}ϰl}s spWG{ks whlr2TCuPRPA+ИУu ofDACl@¢c`a(q7ȧ8u@XX[jJ p+\rن0YعkG{JPLseև@PQY@tQЁB߶eyr9a:x {&[S8ygWl+.O~eQ~jds}--Fd[w+Yf1 4+̬lPVP_H) 4 -m@80(VX訫(J 33vޮH¨0t,G̫|u(d&[u/xq;e+aa&1;R(&M&D K-22>NŘ"U2}T1i#JX\糾氵* k7;,[?߉ /NO{0=Ҍ3026,31ejQ <ᅣcUPVS7234GA5 E(\~_tNeqc$9ǯR,?yTǻ}O6NVN!~;z>{-:22 Xijl_B j * #ʮ:88N~rU$euŇ%~LLt4e%pA^nFz#l j4m3 CK/*wq3&1= Ռ*ӧ{(B4q~ăCnG/<'I{| I绯I'xu,tZ.eo[ReUW}^G5|VbWi/aITP{ ȘZZ>v M-cC >I@1+(΁j`ELRʛUtA11644250515E!dh$')*2 V&z*gƞϸU[3ٌcv>ٕ%s줴wZXR5>1sX2ϭܟs}Bh?2x͗ (3+bL_"Yávcv)Y0AMAnd`lU~?ev24:93-PE/B1m(cfvyBZ TcQ342@B,̌L UQUVTp333RQ\;/j00|a>~+n]/hMԋ, C:}@X2u͒ s0MW]Ol`𳿑/=4>6:8ڌljjlYX^Cg. mPo @DGm.0`17RbbbdPSVsr23QSRmv$_uQS ևL~m} YQ', p$]4Cn.b)'h$ BHtyIʜ:ϤL M{Z2q~7՚?6V~ Nl+-͇A4#:{FGέab!!#&+(V^SlfႄE*B_dК-@J+z:@UDa|S! wlgV%sJcTqs(%]_Ԥ@8y~$>L/#GEUؼ`y5OXkF9Ѿ̿z5.lj3끓Y%qiPx}ngU`َThoijO |YZ'ݳվBggJZ h`AuAKJK(^T*Jj-Zzh#4Td$D٘hQqrq@gIl@ EZ-e`bS|*pLUl=/,>AK"ۂthJH(pcil[I;](t1;T/ JdX](tgŸj>.YMBraCcNlVTCiߡ-e )߮=՟jjZ;{'gqqIH)((PMq(ViFwRBdY8@2u< w1& .x' =@˦Ƃ^FBujeN_uT޲'xEpSH"|S2\dzR.oj ?ȷ앫N~ >U|>.YKs<*J< z6Vu/^"~>aaQI8Qa1Q E2rrrr "bbp! += pDT R{. դ.ݕ.7+UٞxX%nj3"ֶ7:iAe-|gXUt)suEهZ5V&Z&IHȩhP*PF5%$ (DB0~A~8_@xyEuH( cG譛,Gr7v] `/JTE)NB,2[Oi֒{97y[?,+4$oS.0ռcC'9> txUfDm {z²]c kooikjlTYVVYs+{b "Fr#RZȹ@BhR#/'TC,0\. p =U( ??;+JUxJ7`zQalǦ&jJ!}zXN0dZY4=xfWv3^rd9oYS*5`v$ָA`Gљ{Qd'NJ!Ů3v+YZ +gk{GK[s3Jyu]CccsssGcwȚk m3UfA=1D!AaA^An..sB@v߆+>&XSܿ`pVX~&r McIHӸ+r!#YӲ/R$4>Jif;j^F.iR k/C#Mqjxs@-Lûy&[%AW'l/k/K^:[ue+M[;껑}#_W1PPGF:hL3= jFFFFV>n.ἢB|܂SP! "rsC}@m` E#.n}|~!&:.n0&I('?5[iyq>221mF:EΣʮwwG5XcK(Mz'܅NOJ_IV¨rd},q҉]7P SM-QgUMnpٮ}工?WBG+_A47-㯓~BBAY螎  7/' Y>!^87!쇟8P@?)w17o8=362~Q(gɹ~Z ڣx>bw#q*n=a5s|]ћ\k̞Aa ]R C^`{bTYeT_svq֢Z\t'.[V~'4:C{9u|ŠFd[;ehhnU\\P=N[kh88@F-('( /yT $$P7/&'>hqeᯁg3BS? 2UJ^X8=D7$|/ad!۳}ZU vźǪv7a6!MrnjieWTdz؞:_de[X~w(m58X]Q7#Zg17p))h@0@aD-:dP\فTs ?nTڂ:-kChPECY1gOdNZ lv/H^<`VYcZԈS>ϟ_z#2ͬ!pD᢭djJKܒ-,RgT FSdsd/G-uX\2fzAy,'.gdɟP v~TUƦ$D-#=k X$4t ЁȄjpbffafbg6j& ڑʃ |pDx $+|)K\zo9OOCȥJZå3, s=Fx4mGp<%|C6/̅Ԕ9 3p$LJOق3gwRE /󀸁8(Lz#qw.t 8/ˇ O/Wz G_wKS]MͧJKC}}j6} LH!&FԂU𖃍Kz*A 4.XË.@qMrQO"",4gF/s O][fp=|zV Γ+˻%it Uޙz|G8fgg?Z[˧\^7;LP!<lO|7EŊH_OwKs3 xㇲe-el"BR DK, mom 4,@  M0,[psK4*0q)9Kr8~%V[x9˕ڨr-'|N,|'RF-NoP>֍ ;ppʼnͼ^;(t9=g$?H JJ$U)++.IOHJe65#Գ4t\¼ KJ|] "@#N1#ߠ"]Hya>E9k ׈Rcy fsoN|pgl,M Kx[-u:ݣ|tWˉ?6]țOg5 FxFc{WH#YWVxkQsi!*swU17x|Ak@>b]ˍҟ_Z"֚¾ʒ܌Ԍ:r=Ah 0t#⒰ Wv0( Pđ‰< F7 OjYl' 4,**kjihXn6$\Hc]mBIJMtnr>m:t"c ¡WQ.gon˽k|^a`TWRuH*= f1]ﶛ>EwY _9ʻģpAhc'ܖ'+* V_AquE)*8?/#1)95%3+';;42CC/Y1Š&'U`GzSDRj4xxᆳl V$%daNjZֽt ) 󓾾429SK/lC#FhJxmجr,NuN;d*ZRg̫IMM7k#iS;a<1Y&\lDO+nsieWQ3/q]H?!umUmsCum]a ,ƥ'%Zs22srhfY(Q4Z ILqM +& +X$GBX/é  Ȓe%`y_AAYU]EGKKn*3^e[S9'ܟ=#yJ0#wݛ+)>|%ʮEI.&?=i<^1+ JYK?mUMBz+YckOoAmjM{'=Ф˘XA'a?`XƆbJ|\bRJFzvF^eiWu'<- /V-.KJVpj\ER +F:kQBQ$<}CVQANVJRD!YE5 --mT EaBl!(J󑣷 ̯rR |"߼zߣԞϚgϼ?ቩ> 3(_ +\I<F.6}~^+W5c]a!dEM/_d;~G_~ }J4#y틛/泵Q+RI08wC"dhiX0,K,JZ}MEy5('-16*6!15-%9?695G-*HHI0XH @XQ,`, 5J%e@ A {-mXn .lKvVJٜp'3-AS} /jn,upq>1.r):(=CoFu#_#?iy$umZw-"yM5qr4R?,^~9w²DToYjkhlh,NM_R]P;527b``$0xy9iY<+/îHȊ8d  z78 i&'/'UՔ4uXjSm~R)|n/.OPAcb򌻮T{l8>ݹ|EuG.8~ s]ʼnICY,,ɡ"1~Ry~FJB4ԕ䤴Ҷ/t4Rx [< B_Y YzCaBxA~(`Ec&#+/'gm+)i3p]s_}u'}G lܭj,G]o}HIѪũU|ӯL?2t'$&ծ V7Gܮ:v˚ ߼(ryLL4#ΰz |!ΰ:Qksܯ&]֡{99鲷h_P!}lsy)әcٸY"QzSyLge7g DbKk"?35!>D4 ,Yi5um}_f)酅)NCr!}mKU0*?mY3KH­BY9nee啔T +ےo(Å߸Mcu߶cBq_4oN)2.+ɳ3ow|8t .:d7P!< Y|{]Ny}s(KצKmU|P28|`!+τc,"-Js[kSccSs[[s}9I qq1I)iiuM&&n!^\J6g2!M%t*%|pKJ!MЯ,+'UW_ ~s~Q?άpg}0q EWYX .WQ;ϧ(W |~j E&Dz^]:2XrHN_Y]3IMچf|XB"# +ʐSge6_˿z+m-Mͭ-ĺĄ䔴䂲V -JKBRFVRY@x@"!gee!O^FhY`_qpă4@,tEx[9X;{rѽ7|e(@r* >\,ua W5QOJ)6m*~q8]/!?$Kr\\+MtVrC[> PǧYOZupTrdV*,T~Yj'447k*rS@]O,jm2 %&"c^DjEP YSx̟I[ ȱ 򊊊%5Yx8CM^K:ޔwlln߸Aޛ:jgl:pg]{1Ay&`JnDVa%pi*qs7AtdYFeUWltpY7l}$R[Kkkss#`8/3-^)řE]ӳs\h4^V"!,t`|f>P\vI-o .%%Eux`Eѕ<"1C᦮*W)ߙW}pVB%*ۣϯ2f4Ec*Pk/_~!ے-^qP 䙞RhQP8@&$d2 /:(ff٢pRwumKF:ɼK>W+ B?r#,Oay"[ۀܹ$?;=%) 4gfdeg5vQPJ)!DZbڅUԟ [ΐ*FD.0KK>8EE&JJ * ʪV]ޘN!YtԂKv]iO]1wOm1;ldUiM]m9PM"EfE!VɆ NF (dYu&w3Jw] ۢF& =:#&7un*1+$װr J}muYQNfZJr"p+ye J90UUTGx]T~<$(/%r#U!h;I ~*Ε(y2mՙԋ=y5VYH*U;!)WVA/-(Tx z")y k+,}$>xD* y.k]ow^>0JR'0-u΢O=x=( <[åT:]F(}vvIq{ۦl%kTl϶eo4߁e. , ji$w `IKKOO=EpZfS,7 %+)-)-%!#Oy /A&N҂F P*Ge9E5uMXy'hjjjCn4UA"TYI=KWv?kYUf曋 1OrVby QG/4)$e{>;x:Mi68 ֜dLSz‘>$gZiS/Go~U›Ӆ_MPfYɐZ?>-y^N= Kmyemw19 @? ˿>wwv[[[ tKvn~AaaUemC[4 '))!Y0ܔ,E-0*dn&|H%^@ӞEHx)6.53rPsDn֚:p 嬱.]`/9|DSo9ۿ{/7FZ9h?Y{t;_F[V,bX~po}A VXˋ r33 ,99UĶξ1*j&4Ђlj k%%1ËG &W ~(n*PGu M u uhDu--&ԳC>-q.{lm3j6m,{ճTn̿mm4rې=gu+Э/ /RPtJ_eS[:CXާ9]\K9jB8СZjOR|!#> ȍ9} g-I(h%;+ެv y2'A. ;#or <1VȪWO+OK>۫S}Pvzw>uG7폺0iJi->rroooW,-92/[Q232=GI#ό&ǂp7]₳xyY+p [ gbe)Usk* ë|Wi+Svt\؅9U.ފ`@=|7hQM.Wu7Ġ\ \rݛ'i8mv-^{![7e*R{39ig6 f+a kZ\T7>2 =KG;0 uU@Z ;&W3qqrs8)X>Lpqr -\p1wl0 %ddUZFFFƦVVvVfFncf;3YlDoڝ[snGlWSi}yۼmhكگl/a_'"ݢC Zgf1$o%|9sGa*+G6qlUZCH:=Mu++c]Kc P;0"K~^AyyGw :6n8⃓\p/";n8F&啔e4t 8؈+JnET]Ej> u(:0@:!AIU+{s,6)sK\?W5Z=i*_5;5t=Wΐnz^کU"g( L&++|tXi絔K9y/2gR[KS#bKAiSKk% -  䂕 ܁ć 66V=pb vvVVN~3h!4N$BzPSL--+֖JG* .S1(欉x3XmxSํU~''Gt˗&>x17Kj=$OIJ; rXugG姊 7c;~ف;gV]Ɋ6A}iV~O@߼Vtv.Ɔj@ BL2 Xa`d030X7@_Xa "~ -*QP72pVNVVVff& R\uؓlqJ5ڝd)Ţ^ՙ ܙΔ[,-vY]&b/1-E7E'6{[n w! 㑻9~*/7͢Kإj xznٲ, O?/N"VOoOgG;\BlTUVy -=#333#!,V6tZQώ e%4T &@J'+ml+V&f‡Jq?;,qҸ#Mk`whSu6Ԩ}v Růz":Y=7I1 dqz{+75^' f< =s^[S3zl&Y-o:su(QbSa`{`oBK C,eeeUV !ڕo 7#BSWXD'RPT25Ff5`8{C.4,{)o3x4>"sWkE=h_GN.;kGq6g7SvF,HA_qʹFȯT/v:7G}͇ݒ*A0I \1Ae4Wi @U!Be^P8WCS;4 ",4 LLLL.Z.XƖ fU1HO bh bmbnavduKH 6Uv?sЯ7X9B{&\M}&^<='uuPpKڴhOtn;o 諕Ʞuy@YM4M}0m7}yʳH= wܖWo6r߀eqtF d YD4 446:;ȣc#_+ӳ@X@x@Ž$AL p2sr:zfVN.NPW@lfnf\R命I]PHL5 bW N/^ :їJxFm4٥oEF- dh_UOsѫѥ;ˏuA?ПiE[6*Kc[}\ ןE]n kX7e7``YA+^2|B". ,Dӹ!&&ae5ȅp, TxPv66vv~^ V'%goficXqrXekmf}<+Ǟdum#3҈{NXs;fݟά4e6'RNc~xw|ϕN$ Yp7Gxs>˖6˟fw. <[Tevh*]0LTY߁oA{V((}dr_,$77ZHjoAC.2#fuqnpb+F&hSo83'rYs?gsZ D Y\s>ѹYUY M"H]n2ϠRڽ̫|QLI<ɑއ""+4ȝNr^90."^}"WDCCi([O*?YϵC$qK$ JK[;ik#y8\XVCe̔aA, į0!%N.6n>~>,FDBNQUUYJGǕV&ƻ)Nހg@ةae;FȊ'k%]͉ҽVEʞ>k$坍fU?A\k<[Y]WEFGcCz-%𱼏Nu}Zu7wp*n/Wd[ʍa2d`2O`Y6AX᳟ ,&J#|«C}ccӀ4 @X` BH$f`}aV HF KJ+*)[989]Yicanjf`L0\iQN#=t 1}Be\*vry&"DZ?oى/XEfbica+gu9hՁ IVW`7vZAGrk|2[Ӻ\j 䴳{PU1'tD{3rde?,,KuhhhoF`Hlg'4563MsK{y`q ]B`Fq 3 ,sss81"bҪF&V_AX2711'T_ׄ#xMƶ~a,v&(ȭly_#B,b\ȕvApM~v wmu+6w)>k#::h>bթ6f'"2Cgr.#,KaO{Kb(95jdȲ,YY XAnw  `#A[x|Bll 6#c_ƧffWcA1*HJ{Y`!n! SQ1XZ hijL0#wnmd4r(psj1~B Y<:\vϮoKT2an`Zf[!+ZyA ݽCWb-ߞyCx.Cbm6Ъ>&{j`K-| s=ZS¼YYoʷ?c[^ )\m͍D"g3 /3s+ihihaf`".H ȃ`c7 ƈp +fH̘`o=?/qq3kݪ=3Y.T]c|;L͚5#錊17KT{쀟' ,o Nordic and Baltic countries VELOCITY millimetres per year east_velocity millimetres per year north_velocity millimetres per year up_velocity UUUUUU?UUUUUU?5@YUUUUO@ j#   @TXAr@GCS Name = Unknown based on GRS80|Datum = Unknown_based_on_GRS80|Ellipsoid = GRS 1980|Primem = Greenwich||>cA />4AJ>"A[>'ЙAȅl>d},A)>.A:D>$AU>)hAf>n.;ZAՀ>`3A4><$ AO>)A)`>a-A{>X2AI>Ӵ7#AI>+lAZ>/ONAu>p4(AR>o9 A><AT>sr/A!e>qQ4A_\>/9@Aƈ> >tIA1>B[)Aproj-9.6.0/data/tests/nkgrf03vel_realigned_extract_tiled_256x256.tif000664 001754 001755 00000005166 14764566077 025137 0ustar00e012349e012349000000 000000 II*"2=BCDERS(n.  ,  dk|Xl The Nordic Geodetic Commission. Creative Commons Attribution 4.0 https://creativecommons.org/licenses/by/4.0/2019:12:30 00:00:00Deformation model covering the Nordic and Baltic countries. Used in transformations between global reference frames and the local realisations of ETRS89 in the Nordic and Baltic countries Nordic and Baltic countries VELOCITY millimetres per year east_velocity millimetres per year north_velocity millimetres per year up_velocity UUUUUU?UUUUUU?5@YUUUUO@ j#   @TXAr@GCS Name = Unknown based on GRS80|Datum = Unknown_based_on_GRS80|Ellipsoid = GRS 1980|Primem = Greenwich||x]k `Y4(+Vz\XDiS&X]I-kRXPGreLmJZ,6K.VdS+K?*Hfi:,{]}Yj⻏;â),~{fN#wrMGk8rq]z4ex,'߹x*uŒBۃ|:>[n 'ګ֦C[ܲ)-(0^Նpn.N64Y=-Пih"_\6lkFoNm2dC\Zs)[wecxmZӓu$ \ 7T@ΞI㙸pzwmz2?h 5uiJ)\Cqp#tLmO9ك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUi  proj-9.6.0/data/tests/nkgrf03vel_realigned_xy_extract.ct2000664 001754 001755 00000000550 14764566077 023353 0ustar00e012349e012349000000 000000 CTABLE V2.0 [n u?qXߋ?L|-^g?L|-^W?T>sr/!e>qQ4_\>/9ƈ> >1>BI>+Z>/u>p4R>o9><4><$O>))`>a-{>X2I>Ӵ7)>.:D>$U>)f>n.Հ>`3> />J>"[>'ȅl>d},proj-9.6.0/data/tests/nkgrf03vel_realigned_z_extract.gtx000664 001754 001755 00000000214 14764566077 023273 0ustar00e012349e012349000000 000000 @Oj@5?UUUUUU?UUUUUUAAA@AItA)[AlANOA(A AA AAAA#AAAhAZ;AAcA4AAA˦proj-9.6.0/data/tests/ntf_r93.gsb000664 001754 001755 00001035660 14764566077 016470 0ustar00e012349e012349000000 000000 NUM_OREC NUM_SREC NUM_FILEGS_TYPE SECONDS VERSION IGN07_01SYSTEM_FNTF SYSTEM_TRGF93 MAJOR_F LTXAMINOR_F ?XAMAJOR_T @TXAMINOR_T '?XASUB_NAMEFRANCE PARENT NONE CREATED 31/10/07UPDATED S_LAT AN_LAT AE_LONG W_LONG V@LAT_INC v@LONG_INCv@GS_COUNTC>p?*DŽ=B=[>?*DŽ=B=>c?*DŽ=B=->2"?*DŽ=B=>G?*DŽ=B=wI>6?*DŽ=B=~>?*DŽ=B=#>4d?*DŽ=B=X>oG?*DŽ=B=X>_(?*DŽ=B=J >F?*DŽ=B=!u> ?*DŽ=B=>N?*DŽ=B=6>)y?*DŽ=B=8h>+?*DŽ=B=l>Ǿ?*DŽ=B=1>J?*DŽ=B=>?*DŽ=B=>3?*DŽ=B=@>f?*DŽ=B=JB>.?*DŽ=B=>?*DŽ=B=> ?*DŽ=B= ]>S?*DŽ=B=5>?*DŽ=B=,,>е?*DŽ=B=n>?*DŽ=B=W>?*DŽ=B=a>G?*DŽ=B=>>{?*DŽ=B=>?*DŽ=B=^>}?*DŽ=B=">#?*DŽ=B=>b?*DŽ=B=r>?*DŽ=B=S>?*DŽ=B=U>-?*DŽ=B=>x?*DŽ=B=Y>?*DŽ=B=>?*DŽ=B=r>wf?*DŽ=B=3>k?*DŽ=B=Qh>?*DŽ=B=>e?*DŽ=B=e>?*DŽ=B=b>?*DŽ=B=ñ>n?*DŽ=B=ȯ>?*DŽ=B=ŭ>!?*DŽ=B=>>{?*DŽ=B=>?*DŽ=B=>^-?*DŽ=B=v>?*DŽ=B=Cu>e?*DŽ=B=^>7?*DŽ=B=G>?*DŽ=B=0>?*DŽ=B=>JE?*DŽ=B=>?*DŽ=B=8ٖ>?*DŽ=B=>W_?*DŽ=B=v>@?*DŽ=B=\>V*?*DŽ=B= >l?*DŽ=B=ڋ>?*DŽ=B=>?@*DŽ=B=->2@*DŽ=B=>@*DŽ=B=A>@*DŽ=B= _>V@*DŽ=B="z>'@*DŽ=B=/t>H@*DŽ=B=Ho>@*DŽ=B=i>@*DŽ=B=c>U@*DŽ=B=2^>~@*DŽ=B=/RX>z @*DŽ=B=dR>an @*DŽ=B=[L>f @*DŽ=B=DF>` @*DŽ=B=@>_ @*DŽ=B=*9>$a@*DŽ=B=r3>e@*DŽ=B='->l@*DŽ=B=&>Bv@*DŽ=B=P >I@*DŽ=B=~>ɐ@*DŽ=B=>ǡ@*DŽ=B= >@*DŽ=B=C>>@*DŽ=B==@*DŽ=B=ga=@*DŽ=B=b=#@*DŽ=B=i=G@*DŽ=B==?n@*DŽ=B=(=ė@*DŽ=B=1 =@*DŽ=B=U=@*DŽ=B==h$!@*DŽ=B=߇=W"@*DŽ=B=:x=#@*DŽ=B=ta=?$@*DŽ=B=YK=%@*DŽ=B=T5=7'@*DŽ=B=z!=Cr(@*DŽ=B= =)@*DŽ=B=S<*@*DŽ=B=9 <$,@*DŽ=B="8<_-@*DŽ=B=ތ<.@*DŽ=B=Y<|/@*DŽ=B=A< 1@*DŽ=B=(;(C2@*DŽ=B=&;[x3@*DŽ=B=sA4@*DŽ=B=c*}5@*DŽ=B=tw7@*DŽ=B= =8@*DŽ=B=Nj9@*DŽ=B=u;{::@*DŽ=B=j;@*DŽ=B=ިm<@*DŽ=B=X >@*DŽ=B=Ҽ0?@*DŽ=B=S@@*DŽ=B=stA@*DŽ=B=rٔB@*DŽ=B=NhC@*DŽ=B={(D@*DŽ=B=?) E@*DŽ=B=04 G@*DŽ=B=?-%H@*DŽ=B=IKl?I@*DŽ=B=(IW}YJ@*DŽ=B=crK@*DŽ=B=f.pL@*DŽ=B=3|M@*DŽ=B=N@*DŽ=B=GɋO@*DŽ=B=P@*DŽ=B=RR@*DŽ=B=S@*DŽ=B=什-T@*DŽ=B=!;CU@*DŽ=B=XV@*DŽ=B=I+?nW@*DŽ=B=ŽX@*DŽ=B=uͽY@*DŽ=B=K;սڬZ@*DŽ=B= ݽ[@*DŽ=B=(\@*DŽ=B=O]@*DŽ=B=|^@*DŽ=B=`@*DŽ=B=zc%a@*DŽ=B=z7b@*DŽ=B=?>B?Ƅ==>?Ƅ==>uȧ?Ƅ==L>?Ƅ==>P?Ƅ==r>?Ƅ==>?Ƅ==.>0?Xo;am <>}?Xo;am <'>[x?wT;/i;H>u[?wT;/i;n>8?Ƅ==>}?Ƅ==>Ż?Ƅ== >k?Ƅ==> ?Ƅ==a>v?Ƅ==>G?Ƅ==>cC?Ƅ==>?Ƅ==>T?Ƅ==>_)?Ƅ==J{>bi?Ƅ== >{?Ƅ==F}>r?Ƅ==>?Ƅ==P>jK?Ƅ==>>?Ƅ==N>c?Ƅ==G>?Ƅ==/>'?Ƅ==C>tb?Ƅ==>^?Ƅ==r>?Ƅ==o>"?Ƅ==>Zg?Ƅ==B">u?Ƅ==1>{?Ƅ==>kH?Ƅ==M>?Ƅ==%>?Ƅ==ϴ>d>?Ƅ==>Օ?Ƅ==%>-?Ƅ==%>>4G?Ƅ==P>Y?Ƅ==*X>?Ƅ==Z>%\?Ƅ==W>A?Ƅ==K>?Ƅ==FB>v?Ƅ==.>?Ƅ==>5?Ƅ== >p?Ƅ==D>?Ƅ==>SX?Ƅ==Ζ>Ϻ?Ƅ==>.?Ƅ==v>?Ƅ==>?Ƅ==t>S?Ƅ==W>Y?Ƅ=={3>.?Ƅ== >?Ƅ==(҅> @Ƅ==>!@Ƅ==H>L@Ƅ==}>N@Ƅ==y>'@Ƅ==l t>@Ƅ==n>Ѱ@Ƅ==i>8@Ƅ==hd>]@Ƅ==^>:@Ƅ==$_Y>@Ƅ==S> @Ƅ==-M> @Ƅ==H> @Ƅ==B> @Ƅ==L;>& @Ƅ==|5>" @Ƅ==)/>]@Ƅ===)>@Ƅ==?">@Ƅ==H>h@Ƅ==>'@Ƅ==>@Ƅ==CY>@Ƅ==ß>@Ƅ===-@Ƅ==2=I@Ƅ===#j@Ƅ==V=@Ƅ==r=-@Ƅ===@Ƅ===@Ƅ==y=5@Ƅ==!=f @Ƅ==1=!@Ƅ==[j=u"@Ƅ==S=$@Ƅ====9%@Ƅ==x(=q&@Ƅ==k='@Ƅ== =~(@Ƅ==<*@Ƅ==s<U+@Ƅ==b<,@Ƅ==K?a<-@Ƅ== b <.@Ƅ==;U20@Ƅ==M ;f1@Ƅ==2@Ƅ==OK3@Ƅ==:P4@Ƅ==>-*6@Ƅ==[ ]W7@Ƅ==,Յ8@Ƅ==`*9@Ƅ==W9:@Ƅ==QǼ;@Ƅ==ܼ=@Ƅ==`>>@Ƅ==0 l_?@Ƅ==J ~@@Ƅ==#A@Ƅ==[!ǺB@Ƅ==h,C@Ƅ==6D@Ƅ==eA, F@Ƅ==L>&G@Ƅ=== X%?H@Ƅ==|cWI@Ƅ==ooJ@Ƅ==^{K@Ƅ==|L@Ƅ==ډM@Ƅ==1N@Ƅ==ũHO@Ƅ==9MP@Ƅ==ꣽl R@Ƅ==w\S@Ƅ==僧4T@Ƅ==HU@Ƅ==B\V@Ƅ==ƽapW@Ƅ==,.νMX@Ƅ==ׇսY@Ƅ==ܽZ@Ƅ==e[@Ƅ==\@Ƅ==l]@Ƅ==^@Ƅ==Y `@Ƅ==5a@Ƅ==s .b@Ƅ==>Ֆ?Ƅ=O˯= >a?Ƅ=O˯=c}>o,?Ƅ=O˯=>?Ƅ=O˯=SY>(?Ƅ=O˯=>V~?Ƅ=O˯=>B?Ƅ=O˯=> ?Xo; <\:>i?wT;裌;K>.ƴ?wT;裌;>p?wT;裌;>?Ƅ=O˯= >h^?Ƅ=O˯=b>?Ƅ=O˯=F>?Ƅ=O˯=9>I*?Ƅ=O˯=$>Ӡ?Ƅ=O˯=s> ?Ƅ=O˯=>n?Ƅ=O˯=>T?Ƅ=O˯=N>\?Ƅ=O˯=>i?Ƅ=O˯=!=>?Ƅ=O˯=6>?Ƅ=O˯=!:>m7?Ƅ=O˯=>u?Ƅ=O˯=>ѱ?Ƅ=O˯=A>?Ƅ=O˯=C>p(?Ƅ=O˯=>Rd?Ƅ=O˯=>?Ƅ=O˯=>?Ƅ=O˯=ut>?Ƅ=O˯=K">J_?Ƅ=O˯=>?Ƅ=O˯=UM>?Ƅ=O˯=ʶ>1?Ƅ=O˯=6<>1}?Ƅ=O˯=M>d?Ƅ=O˯=M>z?Ƅ=O˯=:>n?Ƅ=O˯=:x>?Ƅ=O˯=>T?Ƅ=O˯=?Ȫ>v?Ƅ=O˯=G>V?Ƅ=O˯=c>0?Ƅ=O˯='>?Ƅ=O˯=>?Ƅ=O˯=>~Q?Ƅ=O˯=>ٵ?Ƅ=O˯=&ߜ>?Ƅ=O˯=1Ϛ>~?Ƅ=O˯=>?Ƅ=O˯=m>nN?Ƅ=O˯=#>9?Ƅ=O˯=n>!?Ƅ=O˯={>?Ƅ=O˯=o>3?Ƅ=O˯=`>g?Ƅ=O˯=?T>?Ƅ=O˯=C>oJ?Ƅ=O˯=2>M?Ƅ=O˯=> 4?Ƅ=O˯=q>2?Ƅ=O˯=y>u@Ƅ=O˯=7Q{>T@Ƅ=O˯=v>@Ƅ=O˯=Ir>@Ƅ=O˯=m>@Ƅ=O˯=h>rl@Ƅ=O˯=Uc>6:@Ƅ=O˯=p^> @Ƅ=O˯=Y>*@Ƅ=O˯=8LT>@Ƅ=O˯=/N>@Ƅ=O˯=II>z @Ƅ=O˯=%C>ga @Ƅ=O˯=u=>K @Ƅ=O˯=7>: @Ƅ=O˯=1>- @Ƅ=O˯=פ+>$@Ƅ=O˯=gc%>@Ƅ=O˯=>@Ƅ=O˯=C>`#@Ƅ=O˯=>*@Ƅ=O˯=#e >e6@Ƅ=O˯=>tF@Ƅ=O˯==hZ@Ƅ=O˯=6=2r@Ƅ=O˯==ލ@Ƅ=O˯==d@Ƅ=O˯=C=@Ƅ=O˯=]=@Ƅ=O˯==@Ƅ=O˯==K@Ƅ=O˯=y=x@Ƅ=O˯=)=H@Ƅ=O˯=Et= @Ƅ=O˯=d\="@Ƅ=O˯=F=B#@Ƅ=O˯=*/=y$@Ƅ=O˯=G=%@Ƅ=O˯=C=&@Ƅ=O˯=b@Ƅ=O˯=9?@Ƅ=O˯=!v& @@Ƅ=O˯=[0A@Ƅ=O˯=[:B@Ƅ=O˯=f-EC@Ƅ=O˯=jOE@Ƅ=O˯=xCZ+F@Ƅ=O˯=elCG@Ƅ=O˯=oZH@Ƅ=O˯=,{oI@Ƅ=O˯={IwJ@Ƅ=O˯=8K@Ƅ=O˯=iL@Ƅ=O˯=M@Ƅ=O˯=wN@Ƅ=O˯=iWO@Ƅ=O˯=DQ@Ƅ=O˯=R@Ƅ=O˯=='S@Ƅ=O˯=+:T@Ƅ=O˯==MU@Ƅ=O˯=ӠȽ`V@Ƅ=O˯=]kϽmsW@Ƅ=O˯=uWֽX@Ƅ=O˯=YݽcY@Ƅ=O˯=6\XZ@Ƅ=O˯=?r^[@Ƅ=O˯=Ԟ5\@Ƅ=O˯=]@Ƅ=O˯=?^@Ƅ=O˯=+y`@Ƅ=O˯=a@Ƅ=O˯= %b@Ƅ=O˯=M>?ń==8h>?ń==ݷ>?ń==;S>c_?Xo;n <׾>p(?Xo;n p?Xo;n <8K>q?Xo;n sf?w:= ;Hù>w-?w:= ;n>?w:= ;> ?w:= ;F@>?fT;=֌;?5>?Xo;n 3Q?Xo;n <Q>ٽ?ń==s>U?ń==ٿ>?ń==#>6?ń==>?ń==.>?ń==>W?ń==n>?ń==#>?ń==%>H?ń==>?ń==T>o?ń==K>?ń==[>[?ń==ź>Й?ń==>s?ń==j>?ń==t>Z?ń==1>k?ń==ߴ>z?ń==}>#?ń== >nk?ń==>t?ń==>K?ń==*V>O?ń==>?ń==>?ń==()>K?ń==V>+?ń==${>?ń==>1^?ń==ࡠ>?ń==穞>?ń==>Q?ń==>d?ń==N>]S?ń==>s?ń==y>|(?ń==i>J?ń==\>?ń==M>w?ń==xA>?ń==:>^?ń==/>,?ń==*>L?ń=='>?ń== >@?ń==>V?ń==|>y:?ń==w>y]@ń==s>?@ń==o>?@ń==>k>@ń==f>h@ń==Nb>8/@ń==]> @ń==X>@ń==S>@ń==N>e@ń==I>;@ń==qD> @ń==+>> @ń==$_9> @ń==R3>o @ń==->e @ń==A'> @ń==!>@ń==I>@ń==>|@ń==8e>~@ń==0>'@ń==/2> @ń===@ń===N@ń==R =@ń==ϡ=(@ń==}==@ń===&7@ń===9`@ń===@ń==n=s@ń==5~=1@ń== f=m @ń==WN=O!@ń==[7=#"@ń==V!=#@ń==(~ =$@ń==<1%&@ń== @ń==5?@ń==!?0@@ń==)IAA@ń==DS-C@ń==U]:D@ń==!gv5E@ń==RrJF@ń==g|$`G@ń==̃tH@ń==e9ΈI@ń==PȎ4J@ń==khK@ń==L@ń==럽M@ń==rťyN@ń==ͫO@ń==eȱ Q@ń==R@ń==$0S@ń==mĽJAT@ń==ʽRU@ń==BѽdV@ń=w=7׽uW@ń=w=QL޽X@ń=w=WY@ń=w=뽋Z@ń=w=U=[@ń=w=!\@ń=w=]@ń=w=o^@ń=w=3_@ń=w=dW oa@ń=w=I \b@ń=w=1^>9?ń=T=ȳ>?ń=T=7>?ń=T=>Pƪ?Xo; <>ݖ?Xo; <>]?fT;;õ>a?fT;;8>б?w: ;擵>?w: ;>e?w: ;vm>wg?w: ;>+L?fT;;FD>?fT;;>?fT;;߹>?ń=T=F >z?ń=T=>A?ń=T=>`?ń=T== >K?ń=T=>2?ń=T=塀>l?ń=T=&W>?ń=T=(>J?ń=T=m>k?ń=T=wٷ>?ń=T= (>9?ń=T=b>=?ń=T=>e?ń=T=>J ?ń=T=L>Q?ń=T=Lp>͓?ń=T=B>?ń=T=>\?ń=T=*>1`?ń=T= E>@?ń=T=ѫ>?ń=T=MM>7?ń=T=b>?ń=T=>F?ń=T=m>&?ń=T=>_{?ń=T=>?ń=T=>,?ń=T=;>‰?ń=T=mS>?ń=T=a>L?ń=T=f>y?ń=T=e>7?ń=T=Z>?ń=T=R>?ń=T=(D>p`?ń=T=4>?ń=T=J%>G?ń=T=>?ń=T= >8?ń=T=>?ń=T=>]1?ń=T=>?ń=T=>2?ń=T=|>?ń=T=x>7?ń=T=t>s?ń=T=&p> @ń=T=l>@ń=T== h>ߧ@ń=T=kc>"l@ń=T=j_>0@ń=T=:w[>Q@ń=T=`W>@ń=T=AR>/@ń=T=M> P@ń=T=II>@ń=T=dD>@ń=T=Z?>D@ń=T=):>u @ń=T=4>l @ń=T=E/>J @ń=T=)>Z+ @ń=T=Z#> @ń=T=k>v @ń=T=>@ń=T=J>@ń=T=Y >@ń=T=l[>0@ń=T=~=~@ń=T=&=@ń=T=)=@ń=T=2=@ń=T==0@ń=T=LO=Q@ń=T==.v@ń=T==@ń=T==@ń=T=c=@ń=T=*o=V*@ń=T=W=\@ń=T=n@= @ń=T=Ƣ)=;!@ń=T=E="@ń=T=?<0$@ń=T=?@ń=T=M?@ń=T=|{WA@ń=T=0haB@ń=T=hk/C@ń=T==euCD@ń=T=ƤWE@ń=T=jF@ń=T=:#}G@ń=T=gaH@ń=T=EI@ń=T= J@ń=T="K@ń=T=L@ń=T=qM@ń=T=RN@ń=T=%dP@ń=T=ͻQ@ń=T=K'R@ń=T=dǽe8S@ń=T=ͽHT@ń=T=ӽ6YU@ń=T=ٽjiV@ń=T=߽hyW@ń=T=- HX@ń=T=7T콦Y@ń=T=7Z@ń=T=R[@ń=T=3m?\@ń=T=N]@ń=T=3^@ń=T=u j_@ń=T= a@ń=T=wb@ń=T=Fͯ>"?Ą=g=)>j?Ą=g=+>K?Ą=g=-> )?Xo;|G ??fT;K;ޱ>Ϯ?fT;K;iR>?fT;K;w>N?w:K ;#>?w:K ;'ޱ>ŵ?w:K ;>?w:K ;Z>֋?w:K ;>q?w:K ;8>?w:K ;_>*?fT;K;k>Ț?fT;K;Zg>?Xo;|G ??Xo;|G <)>m?Ą=g= >l?Ą=g=>?Ą=g=M>C:?Ą=g=ܲ>?Ą=g=OX>?Ą=g=w>J?Ą=g=, >?Ą=g=tB>?Ą=g=d>7?Ą=g=s>I?Ą=g=l>?Ą=g=N>?Ą=g=>U?Ą=g=D۩>ݚ?Ą=g=n>~?Ą=g=?>)?Ą=g=v>"r?Ą=g=}!>Z?Ą=g=L> ?Ą=g=>Y?Ą=g=:=>?Ą=g=V>?Ą=g=ø>WZ?Ą=g=>g?Ą=g=l>?Ą=g= >uv?Ą=g=Z)>?Ą=g=@1>C?Ą=g=->į?Ą=g=%>G?Ą=g=e>G?Ą=g=k >}?Ą=g=>~?Ą=g=Z>?Ą=g=>w?Ą=g=>@?Ą=g=>?Ą=g={>?Ą=g=w>C?Ą=g=#s>?Ą=g=^o>ߣ?Ą=g= l>40?Ą=g=$h> ?Ą=g==d>@Ą=g=S`>Qk@Ą=g=Ra\>2@Ą=g=`X>@Ą=g=3QT>@Ą=g=Z-P>#@Ą=g=K>L@Ą=g=ϢG>@Ą=g=Q0C>@Ą=g=>> @Ą=g= 9>r@Ą=g=W5>WA @Ą=g= /> @Ą=g=|*> @Ą=g=UL%> @Ą=g=> @Ą=g=f>p| @Ą=g=>b@Ą=g= >/N@Ą=g=_>1?@Ą=g=c>7@Ą=g=/=;6@Ą=g=y=;@Ą=g=-=G@Ą=g=\=Y@Ą=g==Xr@Ą=g=s=d@Ą=g=VI=@Ą=g==@Ą=g=!=O@Ą=g=z=36@Ą=g=a=g@Ą=g=MI=@Ą=g=2=@Ą=g=$=!@Ą=g==6;"@Ą=g=*=6@Ą=ᙰ=[7@Ą=ᙰ=0bx8@Ą=ᙰ=)`9@Ą=ᙰ=g4G:@Ą=ᙰ=j>\;@Ą=ᙰ=H<@Ą=ᙰ=yQ=@Ą=ᙰ=[9 ?@Ą=ᙰ=`xe@@Ą=ᙰ=?So1A@Ą=ᙰ=%yDB@Ą=ᙰ=XWC@Ą=ᙰ={hD@Ą=ᙰ=׉)zE@Ą=ᙰ=LPF@Ą=ᙰ=᳕G@Ą=ᙰ=˚H@Ą=ᙰ=#I@Ą=ᙰ=0OJ@Ą=ᙰ=pK@Ą=ᙰ=,ӯlL@Ą=ᙰ=&M@Ą=ᙰ=O@Ą=ᙰ=P@Ą=ᙰ=~Ž#Q@Ą=ᙰ=˽r2R@Ą=ᙰ==н@S@Ą=ᙰ=akֽPT@Ą=ᙰ=yܽ^U@Ą=ᙰ=όmV@Ą=ᙰ=c|W@Ą=ᙰ=X@Ą=ᙰ=/󽙚Y@Ą=ᙰ=xΨZ@Ą=ᙰ=[@Ą=ᙰ=07\@Ą=ᙰ=h]@Ą=ᙰ=^@Ą=ᙰ=@ _@Ą=ᙰ=`@Ą=ᙰ=40 b@Ą=ᙰ=h=>ۥ?Ą="=>?Ą="=Ԭ>Q?Ą="=>U?fT;~;p>a?fT;~;>9?fT;~;>?fT;~;K>zȲ?w:~ ;>n?w:~ ;b> ?w:~ ; >곷?w:~ ;J>]o?w:~ ;d[>?w:~ ;>3?w:~ ;Ԯ>1?fT;~;FҮ>?fT;~;>yϺ?fT;~;V>5?Ą="=>P?Ą="=>?Ą="=T>?Ą="=/ݬ>:?Ą="=P>L?Ą="=>>2?Ą="=Y>?Ą="=n2>V?Ą="=R>?Ą="=_>/?Ą="=}X>B?Ą="=8>m?Ą="= >^?Ą="=ģ>?Ą="=k>Mf?Ą="=>?Ą="=Ҋ>?Ą="=.>WC?Ą="=Ul>?Ą="=Kɚ>v?Ą="=P>Q3?Ą="=)\>+?Ą="=>?Ą="=D>??Ą="=ޑ>?Ą="=>?Ą="=y>k?Ą="=>N?Ą="=>D?Ą="=?>?Ą="=>.?Ą="=>?Ą="=ց>(?Ą="=> ?Ą="={>Q1?Ą="=Mw>I?Ą="=s>H?Ą="=Jo>?Ą="=qk>i?Ą="=g>?Ą="=7c>?Ą="=9%`>'?Ą="=YL\>B^@Ą="=%wX>c(@Ą="=QT>V@Ą="=`P>@Ą="=L>@Ą="=sH>M@Ą="=D>H@Ą="=~@>+@Ą="=<>@Ą="=*r8>8j@Ą="=A 4>2@Ą="=]/>7@Ą="=*>a @Ą="=%>͒ @Ą="= >b @Ą="=n>5 @Ą="=T>| @Ą="=z> @Ą="= >y@Ą="=>1@Ą="=%= @Ą="=0=@Ą="==@Ą="==@Ą="=z=@Ą="==@Ą="=M=5@Ą="=i=@Ą="=V=@Ą="=J=B@Ą="=m=ip@Ą="=S=@Ą="=;=@Ą="=p#=5 @Ą="=D =B @Ą="=8<%z!@Ą="=L<"@Ą=߰=X<#@Ą=߰=`<%@Ą=߰=><7U&@Ą=߰=;'@Ą=߰=Ujv9(@Ą=߰=#)@Ą=߰=]&+@Ą=߰=?K,@Ą=߰=Q{6x-@Ą=߰={'.@Ą=߰=f/@Ą=߰=|м90@Ą=߰=-2@Ą=߰=43@Ą=߰= T4@Ą=߰=;8q5@Ą=߰=]1#m6@Ą=߰=-/7@Ą=߰=Q88@Ą=߰=keB{9@Ą=߰=qL:@Ą=߰=ZJV`<@Ą=߰=`@=@Ą=߰=عiR*>@Ą=߰=s73?„=%=>?„=%=+>g?„=%=>Y>ӫ?fT;;{>9?fT;;?>Ց?fT;;R >)^?fT;;{>?w:W ;/k>?w:W ;)>FE?w:W ;yɧ>2?w:W ;+>T?w:W ;ۨ>?w:W ;9>?w:W ;4H>$E?fT;;H4>Iڿ?fT;; >g?fT;;Zר>?fT;;>~p?„=%=E>?„=%=>tb?„=%=n>?„=%=>@?„=%=yZ>P?„=%=)>V ?„=%=Q>j?„=%=k->i?„=%=N>*?„=%=X> o?„=%=O>j?„=%=2>J ?„=%=>qX?„=%=#>?„=%=b>?„=%=f>4?„=%=}>Z?„=%=>\?„=%=[>?„=%=д>ni?„=%=.>?„=%=[C>?„=%=x>l?„=%=>?„=%=>*?„=%=Չ>O?„=%=m>a?„=%=->g?„=%=>?„=%=v߁>P?„=%=>`?„=%=ٔ{>^M?„=%=~w>1?„=%=us>:\?„=%=po>_?„=%=vk>J~?„=%=Ag>?„=%=c>y?„=%="_>G?„=%=[>?„=%=X> ?„=%=l[T>@„=%=P>@„=%=L>.@„=%= I>y@„=%=BE>F@„=%={A>@„=%==>@„=%=9>D@„=%=5>m@„=%=1>3@„=%=z->@„=%=m)>Ͽ@„=%=1%>I @„=%= >YM @„=%=t> @„=%=>e @„=%=ٱ>2 @„=%=4 >t~ @„=%=n>T@„=%=i>0@„=%=j=@„=%=ԝ=@„=%===@„=%=oF=@„=%=`ǿ=@„=%=8=@„=%==@„=%=(=/1@„=%=>͉=S@„=%=bIy=|@„=%=v_=ũ@„=%=MF=@„=%=#-=g@„=%==E@„=%=<5~@„=%=> <ݶ @„=%=Ф@„=%=h.p?@„=%=b1~@@„=%=ߌA@„=%=CᓽVB@„=%=AC@„=%=%D@„=%=rE@„=%=NyF@„=%=5G@„=%=HH@„=%=I@„=%= ܺJ@„=%=WѿdL@„=%=ĽVM@„=%=ɽN@„=%=ν%O@„=%=^ӽ0P@„=%=yؽwTS@„=%=_~罦_T@„=%= kU@„=%=wV@„=%=^W@„=%=!X@„=%=sY@„=%=2Z@„=%=t[@„=%=|~j\@„=%=) O]@„=%=z ^@„=%=_@„=%=YQo`@„=%=a@„=%=V>S?r„=l=<>g?r„=l= |>?fT;s;(>M?fT;s;b>Nѯ?fT;s;Y4>c?fT;s;6>ȴ?w:s ;zr> K?w:s ;2>ɷ?w:s ;£>e?w:s ;ݣ>?w:s ;'ܣ>?w:s ;£>a?fT;s;w>X?fT;s;r>Օ?fT;s;H2>%?fT;s;>:?r„=l=#>v2?r„=l=>l?r„=l=V>c(?r„=l= >?r„=l=o>?r„=l=>7p?r„=l=K>?r„=l=L6>4?r„=l=;R>?r„=l=`>?r„=l=`W>?r„=l=>)?r„=l=j>?t?r„=l=X>4?r„=l=9>[ ?r„=l=b>U?r„=l=TU>?r„=l=>?r„=l=>F?r„=l=+5>9?r„=l=i>o?r„=l=)>&U?r„=l=> ?r„=l=7Ń>?r„=l= Ё> ?r„=l=>{?r„=l=3{>Lp?r„=l=w>t?r„=l=s>k?r„=l=jo>?r„=l=xk>}?r„=l=>vg>?r„=l=}c>Ƥ?r„=l=_>1??r„=l=ҩ[>?r„=l=W>=?r„=l=]S>}#?r„=l=4P>?r„=l=utL>n?r„=l=H>+@r„=l=D>p]@r„=l=FA>/@r„=l=*=>@r„=l=Y9>J@r„=l=\6>,@r„=l=l2>k@r„=l=*.>6@r„=l=**>7@r„=l=h'>@r„=l=##>@r„=l=>N @r„=l=E> @r„=l==>E @r„=l= >ٙ @r„=l=r6 > ^ @r„=l=b>% @r„=l=>( @r„=l=y=/@r„=l==՗@r„=l=u"=w@r„=l=C=^@r„=l==P@r„=l=˝=bK@r„=l==O@r„=l=q=]@r„=l=Eؐ=t@r„=l=i=S@r„=l=(Hl=V@r„=l=;QR=P@r„=l=08=@r„=l=( =F@r„=l==c}@r„=l=<|@r„=l=ڳ<@r„=l=` <9+!@r„=l=;<,f"@r„=l=ds;Ӡ#@r„=l= :$@r„=l=55 &@r„=l=5黢F'@r„=l=8y(@r„=l=*z)@r„=l=6M*@r„=l=0,@r„=l=ּ.-@r„=l={LT.@r„=l=:x/@r„=l=10@r„=l=,1@r„=l=n2*2@r„=l=n5h3@r„=l= ,@\5@r„=l=J6@r„=l=FT-7@r„=l=^5@8@r„=l=ihYQ9@r„=l=^Ira:@r„=l={rp;@r„=l=k~<@r„=l=*o=@r„=l=&>@r„=l=o?@r„=l=,}@@r„=l=ЀúA@r„=l=O3B@r„=l=C@r„=l=ڨD@r„=l=2"E@r„=l=7qlF@r„=l=1?G@r„=l=o򻽵H@r„=l=J@r„=l=+iŽIK@r„=l=#,ʽ L@r„=l=νp#M@r„=l=ӽ,N@r„=l=7ؽ5O@r„=l=:ܽ?P@r„=l=wIQ@r„=l=SSR@r„=l=^S@r„=l=o#hT@r„=l=rU@r„=l=8t}V@r„=l=W@r„=l=PpX@r„=l= Y@r„=l=EZ@r„=l=M_[@r„=l=4 \@r„=l= C]@r„=l= ,c^@r„=l=S_@r„=l=A`@r„=l=_a@r„=l=5>d?=l=yv>¨?=l=>jL?fT;%;B>?fT;%;߉>?fT;%;>?fT;%;q>@M?w:%;>)˴?w:%;B>A?w:%;1>O?w:%;>?w:%;:>J?w:%;U>?w:%;B[>?fT;%;&>.?fT;%;>?fT;%;>d?fT;%;I>Z?=l=ڜ>~?=l=_>d?=l=қ>J?=l=G:>?=l=->/k?=l=e>?=l=>B?=l=sJ>?=l=f>_?=l=r>d?=l=8j>4?=l=UQ>?=l=\>d?=l=ۑ>ݳ?=l=>u?=l=4>K?=l=h>l?=l=>?=l=b>0?=l=>?=l= >?=l=z4>c(?=l=ge>?=l=>m?=l=8M>D?=l=Ks{>?=l=w> ?=l=s>ʌ?=l= o>?=l=Bk>8?=l=g> ?=l=c>?=l==_>(?=l=[>?=l=W>5`?=l=#S>!?=l=mO>L?=l=-L>R?=l=jgH>?=l=D>?=l=@>-@=l=%@=>2@=l=~9>@=l=45>@=l=,2>@@=l=9.>Y@=l=*>+@=l=~5'>@=l=ĕ#>@=l=> @=l=>>2Y@=l=> @=l=W> @=l=v> @=l=D >(a @=l=@> @=l=> @=l== @=l=*=_b@=l=]=-@=l==@=l==@=l=,=˿@=l=Ǡ=B@=l==Ω@=l=i=d@=l==@=l=+z=@=l==c_= @=l=HE=@=l=+=I@=l=b={@=l=<@=l=C<@=l=*<&@=l=W@=l=aR^?@=沱=@@=沱=ǥA@=沱=B@=沱=I]C@=沱=D@=沱=F@=沱=uw G@=沱=½H@=沱=0ƽPI@=沱=+P˽"J@=沱=Ͻ_)K@=沱= ^Խ0L@=沱=ؽ7M@=沱=Iݽ?N@=沱=ὢFO@=沱=4,NP@=沱==.WQ@=沱=[_R@=沱=cbhS@=沱=pT@=沱=4.tyU@=沱=HbV@=沱=~W@=沱=ӿ-X@=沱=ϟY@=沱=8 eZ@=沱= }[@=沱= Ӽ\@=沱=a]@=沱=^^@=沱=I_@=沱=`@=沱=Yna@=沱=;m>~?fT;`;I>l&?fT;`;Н>-Ъ?fT;`;>p}?w:h;TW>8/?w:h;>>?w:h;>?w:h;X>!X?w:h;>?w:h;X>u?w:h;>?w:h;[>ѹ?w:h;>?w:h;>?w:h;h<>ľ?fT;`;>+j?fT;`;h> ?fT;`;1>Ū?fT;`;>}A?f=3=D>?f=3=>X?f=3= >?f=3=xz>Z?f=3=ʔ>?f=3= >C?f=3=C>W?f=3=l>?f=3=U>?f=3=돐>?f=3=>??f=3=Tr>?f=3=C>R?f=3=>W@?f=3=>?f=3=:>?f=3=Ĵ>'?f=3=!>t?f=3=|>D?f=3=ʂ>R?f=3=> a?f=3=}~>ٵ?f=3=z>?f=3=ww>Ln?f=3=Es>(?f=3=po>:?f=3=k>Ҩ?f=3=g>G?f=3=fc>?f=3=_>?f=3=[>ʨ?f=3=W>?f=3=P>t?f=3=^,L>?f=3=OZH>?f=3=rD>dt?f=3=@>&?f=3=b=>?f=3=R9>y?f=3=v5>@f=3=1>E@f=3=A.>uY@f=3=*>2@f=3=&> @f=3=@#>@f=3=>@f=3= >ˆ@f=3=>OX@f=3=>%@f=3=~>5@f=3= >- @f=3=\ >qt @f=3=>n3 @f=3=:> @f=3== @f=3==_ @f=3==P@f=3={2=@f=3==@f=3==f@f=3=>=>@f=3=iǭ=d!@f=3=C=@f=3== @f=3=>=@f=3=m=!@f=3=ٴR= ;@f=3=t]8=O\@f=3='=@f=3==@f=3=<@f=3=P<@f=3=6z$.@f=3=÷0+0/@f=3=n\r]@f=3=|^@f=3=gc_@f=3=P`@f=3=Pa@f=3=>O?f;9<ǽ>?fT;9;ә>#?fT;9;>?w:9;h>J?w:9;m>?w:9;>?w:9;1>zn?w:9;>0?w:9;J>?w:9;>b?w:9;>w?w:9;]>7?w:9; *>Zf?w:9;\r> ?fT;9;~>д?fT;9;^> Z?fT;9;ܒ>Q?fT;9;HR>B?=B=Q>1(?=B=)$>[?=B=~>=?=B=ȏ>r?=B= >d;?=B=G>N?=B=hv>%?=B=k>?=B=)>]?=B=>Ac?=B=г>?=B=>u"?=B=Pr>{?=B=]2>?=B=]ބ>#?=B=p>p?=B=>?=B=R>_?=B=L}>*U?=B=y>?=B=Pv>?=B=r>F?=B=n>?=B=W#k>?=B=Rg>^?=B=qc>?=B= _>7?=B=[>G?=B=W>D0?=B=S>ط?=B=P>H?=B=1L>?=B=4hH>f?=B=ED>)?=B=@>#?=B=e=>?=B=g_9>??=B=5>?=B=1>$?=B=8.>P9@=B=*>@=B=&>@=B=#>@=B=]k>ղ@=B=v>T@=B=">sg@=B=t|>?@=B=,>@=B=Wz >@=B=n >0@=B=>܃ @=B=%x>I @=B=a> @=B=-=7 @=B=A=} @=B=rp=0 @=B=s= @=B=ȴ=-@=B==I@=B==1@=B=%=}@=B=!=n@=B==Q@=B==6u@=B=}=p@=B=Ia=w@=B=WZF=;@=B={+=@=B==@=B=%<@=B=z<@=B=~@=B=Aﭽ>=?@=B=A@@=B=/jCA@=B= FB@=B=HC@=B= qŽKD@=B=ʽUME@=B=*νOF@=B=8ӽvQG@=B=|׽SH@=B=۽VI@=B= XJ@=B=+0[K@=B=F5_L@=B=uYaM@=B= GfN@=B=0jO@=B=@mP@=B=GsQ@=B=wR@=B=Z}S@=B=T@=B=N|]U@=B=W]ɏV@=B=6 %W@=B= ,X@=B= Y@=B=Z@=B=d[@=B=ǹ\@=B=^b]@=B=n^@=B=,b_@=B=[`@=B=Ua@=B=Yޕ>?f;<> ?fT;Վ;?>Y?fT;Վ;˕>?.V:;n>?.V:;ɕ>?.V:;>ͱ?.V:;=>?.V:;j>xF?.V:;(c>?.V:;>ݱ?.V:;¢>c?.V:;/>?.V:;W>?.V:;Ώ>c?fT;Վ;-> ?fT;Վ;P>?fT;Վ;n>Q?fT;Վ;z>N?Y=ۉ= S>n?Y=ۉ=+>Y?Y=ۉ=> ?Y=ۉ=A)>)?Y=ۉ=c>?Y=ۉ=}>1&?Y=ۉ=ݶ>?Y=ۉ=[ц> ?Y=ۉ=>N|?Y=ۉ=>y?Y=ۉ=m>K?Y=ۉ=ς>>?Y=ۉ=?>g ?Y=ۉ=ys>ff?Y=ۉ=>~>?Y=ۉ=Ui{> ?Y=ۉ=fx>X?Y=ۉ=*u>?Y=ۉ=qq>g?Y=ۉ=oIn>P9?Y=ۉ=@j>+?Y=ۉ=f>?Y=ۉ=c>0?Y=ۉ=lA_>?Y=ۉ=Nc[> ?Y=ۉ=-zW>V?Y=ۉ=cS>?Y=ۉ=4O>A?Y=ۉ=hK>?Y=ۉ==(H>R?Y=ۉ=jD>?Y=ۉ=j@>;?Y=ۉ=~=>2?Y=ۉ=q9>?Y=ۉ=B5>l?Y=ۉ=t%2>N?Y=ۉ=Gq.> ?Y=ۉ=*>d?Y=ۉ='>??Y=ۉ=L#>@Y=ۉ=>@Y=ۉ=>n@Y=ۉ=>P@Y=ۉ=of><1@Y=ۉ=>@Y=ۉ=[ >@Y=ۉ=^i >@Y=ۉ=>@Y=ۉ=Kx>hu@Y=ۉ=r=J @Y=ۉ=>=" @Y=ۉ="= @Y=ۉ== @Y=ۉ=D5=\ @fT;Վ;= @fT;Վ;l= @fT;Վ;)=a@fT;Վ;=@fT;Վ;Ѹ=@fT;Վ;\ƭ= z@fT;Վ;`͡=d>@fT;Վ;=w@fT;Վ;n=N@fT;Վ;Pr=@fT;Վ;MIV=<@Y=ۉ=(:=;@Y=ۉ==@Y=ۉ==@Y=ۉ=><2@Y=ۉ=G<>\@Y=ۉ=m<΋@Y=ۉ=@Y=ۉ=t?@Y=ۉ=_qu@@Y=ۉ=zq½SuA@Y=ۉ=`ǽuB@Y=ۉ=˽uC@Y=ۉ=+jнuD@Y=ۉ=ԽKuE@Y=ۉ=WٽtF@Y=ۉ=RݽtG@Y=ۉ=gtH@Y=ۉ="tI@Y=ۉ=%muJ@Y=ۉ=$uK@Y=ۉ=h 2wL@Y=ۉ=hxM@Y=ۉ=5zN@Y=ۉ=-|O@Y=ۉ=x`AP@Y=ۉ=!Q@Y=ۉ=PwR@Y=ۉ==;S@Y=ۉ=ST@Y=ۉ=q U@Y=ۉ=1 V@Y=ۉ=_b W@Y=ۉ=X@Y=ۉ=YY@Y=ۉ=&r Z@Y=ۉ=!-[@Y=ۉ=Y\@Y=ۉ=?]@Y=ۉ=Kr^@Y=ۉ= G_@Y=ۉ=`@Y=ۉ=,a@Y=ۉ=$ >-?f;x <7>d?f;x <>?fT;;>b?.V:;!>NЮ?.V:;>J?.V:;v>?.V:;H>?.V:;E>†?.V:;%w>M?.V:;uZ>t ?.V:;=>?.V:;.>l?.V:;(->~?.V:;2>ÿ?fT;;%?>j?fT;;y[>?fT;;>?fT;;Ͻ>DQ?ӿ=5Ҳ=>?ӿ=5Ҳ=3>?ӿ=5Ҳ=j>^?ӿ=5Ҳ=>ș?ӿ=5Ҳ=ƃ>T?ӿ=5Ҳ=)>s?ӿ=5Ҳ=>?ӿ=5Ҳ=>?ӿ=5Ҳ='>i?ӿ=5Ҳ=R~>vk?ӿ=5Ҳ=F|>0?ӿ=5Ҳ=z>2?ӿ=5Ҳ=!su>?ӿ=5Ҳ=r>mU?ӿ=5Ҳ=rp>]?ӿ=5Ҳ=m>?ӿ=5Ҳ=i>D?ӿ=5Ҳ=kf>?ӿ=5Ҳ=b>?ӿ=5Ҳ=_>!?ӿ=5Ҳ=(E[>Xp?ӿ=5Ҳ=\W>?ӿ=5Ҳ=nS>?ӿ=5Ҳ=`vO>|?ӿ=5Ҳ=iK>?ӿ=5Ҳ=֨G> V?ӿ=5Ҳ=C>R?ӿ=5Ҳ=R'@>Z?ӿ=5Ҳ=<>?ӿ=5Ҳ=9>?ӿ=5Ҳ=5>5?ӿ=5Ҳ=E2>?ӿ=5Ҳ=ɑ.>?ӿ=5Ҳ= +>U?ӿ=5Ҳ=v'>?ӿ=5Ҳ=k#>?ӿ=5Ҳ=d# >?ӿ=5Ҳ=j>3@ӿ=5Ҳ=>@ӿ=5Ҳ=>]@ӿ=5Ҳ= >@ӿ=5Ҳ=O> > @ӿ=5Ҳ= >O@ӿ=5Ҳ=y>ޏ@ӿ=5Ҳ=> p@ӿ=5Ҳ==^L@ӿ=5Ҳ==&@ӿ=5Ҳ==@ӿ=5Ҳ=}= @ӿ=5Ҳ=)"=ޮ @ӿ=5Ҳ==o @ӿ=5Ҳ=v=FB @ӿ=5Ҳ=fg=^ @fT;;= @fT;;e=:@fT;;@N=;@fT;;ծ=e@fT;;=:@fT;;`=@fT;;%=@fT;;$ =g@fT;;`h=F_@fT;;5K=O@fT;; .=DN@ӿ=5Ҳ=D=V@ӿ=5Ҳ=n< i@ӿ=5Ҳ=࠽<@ӿ=5Ҳ=Ḍ@ӿ=5Ҳ=(ý?@ӿ=5Ҳ=Ƚ&@@ӿ=5Ҳ=wgͽA@ӿ=5Ҳ=ҽB@ӿ=5Ҳ=ֽjC@ӿ=5Ҳ=F۽D@ӿ=5Ҳ=߽؜E@ӿ=5Ҳ=佦F@ӿ=5Ҳ=;轳G@ӿ=5Ҳ=MpH@ӿ=5Ҳ= R͓I@ӿ=5Ҳ=F"%J@ӿ=5Ҳ=[mK@ӿ=5Ҳ=qL@ӿ=5Ҳ="M@ӿ=5Ҳ=IN@ӿ=5Ҳ=O@ӿ=5Ҳ=P@ӿ=5Ҳ=;Q@ӿ=5Ҳ=5WR@ӿ=5Ҳ=oe S@ӿ=5Ҳ= T@ӿ=5Ҳ=w U@ӿ=5Ҳ=] V@ӿ=5Ҳ=y#W@ӿ=5Ҳ=X@ӿ=5Ҳ=uY@ӿ=5Ҳ=Z@ӿ=5Ҳ=Xr%[@ӿ=5Ҳ=1\@ӿ=5Ҳ=c|]@ӿ=5Ҳ=u^@ӿ=5Ҳ=vi_@ӿ=5Ҳ=q`@ӿ=5Ҳ=Ja@ӿ=5Ҳ=]2>;Ʃ?f;0G)?f;0G<"n>?fT;bK;> ?.V:B;>A.?.V:B;>}?.V:B;->*?.V:B;>[ ?.V:B;Pō>Lߵ?.V:B;k>?.V:B; >Ug?.V:B;#> ?.V:B;> Լ?.V:B;O>R?.V:B;7>+?fT;bK;u>?fT;bK;"p>)w?fT;bK;{>?fT;bK;>b?M==г>V?M==f؀>_?M==>?M==q9~>?M==\r|>F?M== z>?M==x>ٔ?M==v> ?M==at>?M==r>4?M==p>`?M==n>?M==bl>3?M== j>-?M==Pg>?M==(d>?M==O^>F?M==z6[>3?M==W>z?M==S>?M==O> ?M==K>>Y?M==G>?M==C> ?M==.?>q?M==g;>6?M==8>e?M==~4>,?M==1>?M==->v5?M==*>m?M==EF'>?M==#>.X?M==l >?M==>?M== >D?M==>p?M==>4@M==`=>@M==S >+n@M==m>V@M==>y?@M==>]='@M=== @M==e=@M==S=@M==+O=K@M===' @M==.S=_a @fT;bK;.9=@ @fT;bK;7= @fT;bK;"p=? @fT;bK;c`=/ @.V:B;i=`@.V:B;=$@.V:B;*=[@.V:B;=[@.V:B;O=M@.V:B;=Pp@.V:B; By=,@.V:B;_=@.V:B;@=@.V:B; "=q@.V:B;Ql=u@fT;bK;:<@fT;bK;L<.@fT;bK;Qh<@M==m<@M==P+;hA@M==]?n@M==Q@M==Y@M==%Y @M==n[!@M==T߼E"@M==u#@M==&%@M==x#>@M==ν?@M==4ӽ@@M==CYؽIA@M==ݽRB@M==-NC@M==wuD@M=={iPE@M==F@M==򽌻G@M==H@M==V I@M==!J@M==֫K@M==wL@M==M@M==N@M==DO@M==sP@M==A Q@M== R@M==^ DS@M==;p+T@M==U@M==#7V@M==huiW@M==X@M==ɬY@M==VZ@M==֨[[@M==\@M==H]@M==Ý^@M==_@M==M8`@M==*a@M==_>$^?f;<[>Pū?f;<֊>*?f;<5F>?.V:;b>ݯ?.V:;>5?.V:;?.V:;">r?.V:;=>Q?.V:;/>%?.V:;>Cʹ?.V:;&>狻?.V:;>B?.V:;Ђ>g?.V:;ع>?fT;;I>??fT;;W>2?fT;;[|>v?fT;;z>)?@=oc=ix>e?@=oc=w>a?@=oc==u>{?@=oc=^s>?@=oc=q>?@=oc=To>1?@=oc=_m> ?@=oc=k>?@=oc=i>= ?@=oc=g>}?@=oc=\e>?@=oc=0c>!\?@=oc=`>q?@=oc=Ӣ^>1?@=oc= ;\>Ȗ?@=oc=ӣY>?@=oc=V>YL?@=oc=?@=oc=+P>?@=oc=mL>%?@=oc=jH>{h?@=oc=BD>??@=oc=@>N?@=oc=;>tA?@=oc=7> ?@=oc=Ց3>?@=oc=/>Cu?@=oc=<,>?@=oc=Z(>!?@=oc=%>2?@=oc=">z?@=oc=>?@=oc=>T?@=oc=>H?@=oc=-w>?@=oc=G>?@=oc=ę>s?@=oc=q >!@@=oc=V> @@=oc=>@@=oc=(>/@@=oc=Q=@@=oc== @@=oc==ܜ@@=oc=+O=@@=oc==m@@=oc==Q@f;<<=2 @fT;;= @fT;;= @.V:;=! @.V:;t=E @.V:;V={ @.V:;\=@.V:; =$@.V:;c=^,@.V:;q=Z@.V:;=+@.V:;cu=->@.V:;d=<@.V:;mQ=,@.V:;17=D@.V:;=jj@.V:;<.X@.V:;;@@=oc=HNƽ7<@@=oc=˽1=@@=oc=Ͻ*>@@=oc=Խ$?@@=oc=Ψٽ@@@=oc=޽A@@=oc==D$ B@@=oc=C@@=oc= q콵C@@=oc=6ED@@=oc= E@@=oc=6F@@=oc='YG@@=oc=:[wH@@=oc=%FI@@=oc=PJ@@=oc={K@@=oc=L@@=oc=M@@=oc= 0N@@=oc= ̷O@@=oc=$ $P@@=oc=,Q@@=oc=q!R@@=oc=S@@=oc=8ST@@=oc=U@@=oc=0ޮV@@=oc=IKW@@=oc=]pɯX@@=oc=Y@@=oc=[Z@@=oc=Ȳ[@@=oc=5\@@=oc=]@@=oc=1^@@=oc=e8_@@=oc=W`@@=oc= ca@@=oc=>?f;<>g?f;<*>ڭ?f;P?.V:o;>ְ?.V:o;>x?.V:o;><?.V:o;0>2Z?.V:o;P>˶?.V:o;˃>@k?.V:o;V >1?.V:o;b>?.V:o;A~>W?.V:o;{>a?.V:o;uy>t ?fT;;ew>?fT;;"u> Z?fT;;5r>?fT;;p>V?=֬=n>y>?=֬=&l>Y?=֬=j>s?=֬=h>p?=֬=f>l?=֬=d>?=֬=b>?=֬=g`>?=֬=Vb^>?=֬=C:\> ?=֬=>Z>}?=֬=W>?=֬=ρU>t\?=֬=.8S>?=֬=P>8?=֬=hN>M?=֬=gK>?=֬=FH>Q?=֬=LE>Ț?=֬=:yA><?=֬=8>P?=֬=c4>*?=֬=z/>?=֬=Ҏ+>'?=֬='>7?=֬= #> ?=֬= >?=֬=A>z4?=֬=>e?=֬=N>B?=֬=>>/P?=֬=ǂ>?=֬=>?=֬=? >/?=֬=yv >Ot?=֬=>5D?=֬==>@=֬=+=s@=֬=~r=]@=֬= =VH@=֬=ӆ=L4@=֬=#=d!@=֬=ۿ=@=֬==H@=֬==q@=֬==@fT;;]= @fT;;`= @fT;;q=~ @.V:o;ca=8j @.V:o;-=H @.V:o;w=# @.V:o;'2=߉@.V:o;m=@.V:o;o=@.V:o;$ m=Q@.V:o;3[=`@.V:o;zlK=ƿ@.V:o;9=+@.V:o;"=1]@.V:o;$~=.9@.V:o;U<@.V:o;<{@.V:o;2b<@.V:o;l<@.V:o;I;@.V:o;r>@fT;;S@fT;;l`:@fT;;%a@fT;;]ȼ@fT;;@fT;; @fT;;%z]5"@fT;;)Sv#@fT;;c9$@fT;;~Iq%@fT;;1YD'@fT;;h(@f;@=֬=߽_?@=֬= T@@=֬=p齡JA@=֬=6@B@=֬=6C@=֬=1,D@=֬=tO"E@=֬=,vF@=֬==G@=֬=%dH@=֬=X3H@=֬= I@=֬=J@=֬=- K@=֬=פ L@=֬= ,M@=֬=h^N@=֬=נO@=֬=P@=֬=YQ@=֬=R@=֬=$jS@=֬=/jT@=֬=-kU@=֬=#kV@=֬=$W@=֬=ݵX@=֬=Y@=֬=Z@=֬=ȳt[@=֬=̲\@=֬=)]@=֬=p}^@=֬=Z_@=֬= G ɰ`@=֬=FD!}a@=֬=k>?^;Yw?^;Y<E>6?^;Y<Y>h"?.V:;R>Q?.V:;>Q?.V:;J]>؀?.V:;>:?.V:;(>U?.V:;T~>?.V:;Mz>?.V:;Xw>j?fT;;t>%?fT;;9ar>E׿?fT;;o>?4==m>+?4==@k>?4==h>v?4==f>r?4==td>^?4==Kb>X?4==x*`>?4===^>?4==[>?4==4Y>?4==W>1?4==ρU>-?4==FS>^,?4==c Q>?4==+?4==mL>=?4==J>?4==PG>|d?4==kE>8?4==bC>AH?4==S@>-?4==X=>?4==:>_?4==6>Ǟ?4==b2>?4==->?4==(>-?4==b#>jg?4==@>?4==>?4==>H?4==>:?4==D> ?4==M>O?4==T >M?4==# >?4==֐>Z?4==>o?4==Y6>p?4==2>A?4==n=g @4===@4==(=f@4==L=X@4==u=@4===#@4===Ҍ@4==н=z@4===i@4===mX@4==8=E @fT;;5~=2 @fT;;=P @fT;;؛= @.V:;d=G @.V:;Ւ= @.V:;Eچ=e@.V:;|=@.V:;>k=@.V:;AX="@.V:;GD=T@.V:;3=x@.V:;+#=9@.V:;P=@.V:; <@.V:;<@.V:;%?b<"@.V:;<@.V:;S;Ox@.V:;{:{i@.V:;n@.V:;68@.V:;;@.V:;@.V:;d⼏@.V:; @.V:;M6 @.V:;&Eh!@.V:;65"@.V:;D#@.V:;@4==t~꽯?@4==3΍@@4==j$A@4== itB@4==gC@4==}[D@4==SNE@4==lBF@4==6G@4==k+H@4==sH I@4== J@4==h[ K@4==CmL@4==L@4==}^M@4==N@4==O@4==,HP@4==cQ@4==R@4==uS@4==jT@4===CU@4==/V@4==W@4==l{4X@4==5Y@4==Z@4==ēJ[@4==,I\@4==]@4==;^@4==_ T_@4==Y!T`@4=={!a@4==~>.?^;2?^;2<@~>J?^;2<}>ܰ?.V:-;ϼ|>+l?.V:-;~{>޳?.V:-; z>'?.V:-;x>4?.V:-;iv>Q?.V:-;Ht>?.V:-;rq>Z,?.V:-;ln>?fT;D6;Sk>A?fT;D6;h>P?fT;D6;If>v?=@=c>Ψ?=@=]a> Q?=@=z^>?=@=\>1?=@=nMZ>;?=@=`X>?=@=6U>w?=@=S>s?=@=d\Q>Ҩ?=@=%O>q9?=@=!L>L?=@=J>H?=@=TH>?=@=6F>)?=@=4A>?=@=f>>?=@=P<>H?=@=9>q?=@=7>?=@=D55>d?=@=72>[?=@=m/>.?=@=0,>q?=@='>?=@=s">ı?=@=^>!?=@=`>?=@=>I?=@=>4?=@=Ő >sI?=@= >S?=@=O>ݚ?=@=<>UQ?=@=]>0?=@=>}?=@=K==?=@=D1=Di?=@=v=;?=@===?=@==.r@=@==p\@=@==F@=@=ı=2@=@=)^=*@=@==)@=@=hu=M@=@=4=@=@=F\=t@=@=V=3@=@=ѐ= @fT;D6; =ƣ @fT;D6;= @fT;D6;N=t} @.V:-;Q=&W @.V:-;RHr=i@.V:-;3b=@.V:-;\S=k@.V:-;/D=@.V:-;3=Z@.V:-;y"=a6@.V:-;+=@.V:-;8<@.V:-;A<@.V:-;y@=@=}I?@=@=G@@=@=l\9A@=@=ʨB@=@=i5C@=@=KnD@=@=G{E@=@=N* amF@=@=o _G@=@= QH@=@=N)DI@=@=;8J@=@=.,K@=@=^L!L@=@=M@=@=8c N@=@=dO@=@=+]O@=@=H|P@=@=b_Q@=@=&OR@=@=S@=@=T@=@=,(U@=@=?V@=@=W!W@=@=bnX@=@=^Y@=@= Z@=@=?S_[@=@=\@=@=IL ]@=@= ^@=@=E!Y_@=@=!`@=@=O",a@=@=w>ά?^;p_?^;p?^;p<[_t>~?fT;p;r>\?.V:p;q>k?.V:p;?So>̵?.V:p;m>0?fT;p;l>?fT;p;j>)?fT;p;Cƻ?fT;p;Kd>;o?'="=(b>6?'="=f_>?'="=ȶ\>?'="=Z>*?'="=CW>?'="= U>x?'="=ٙR>?'="=*P>?'="=M>`?'="=}K>T?'="=]3I>?'="=GF>37?'="=mD>?'="=>B>[?'="=?>G?'="=z=>Me?'="=(;>?'="= 8>O?'="=6>ػ?'="=3>#?'="=0>K?'="=V.>F?'="=j+>?'="=)>?'="=M'>?fT;p;$>?fT;p;!>3P?fT;p;t >Ll?fT;p;cC>/j?fT;p;X>j?fT;p;h" >>?fT;p;>[?fT;p;"U>i?fT;p;e>~?fT;p;_=ѭ?fT;p;{K=b?'="=U=?'="==g?'="= w=?'="=O=d?'="=Q=4?'="="=?'="==?'="==@'="==@'="=T=@'="=d=E@'="=x=@'="=Ǩ= p@'="=R=}X@'="= =A@'="==0-@'="=&= @'="=4w=A @fT;p;k=K @fT;p;d=f @fT;p;K]= @.V:p;{V= @.V:p;J=||@.V:p;^9=F%@.V:p;(=@.V:p;M=w@.V:p;" =#@.V:p;a!@.V:p;]W"@.V:p;gjl#@.V:p;w$@.V:p;^%@.V:p;*'@.V:p;𢏽d(@.V:p;CԷ)@.V:p;᜽r*@.V:p;᣽*,@.V:p;EP-@fT;p;3~r.@fT;p;/@fT;p; 0@fT;p;S̷1@fT;p;ý2@fT;p;9ǽs3@fT;p;ɽ4@fT;p;̽5@fT;p;Ͻs6@fT;p;`ӽޑ7@^;p@'="=O!?@'="=NGo@@'="=-@@'="= +FA@'="=moB@'="= 2C@'="= VD@'="= vE@'="=EF@'="="G@'="=fxH@'="=sMjI@'="=QS\J@'="=?fNK@'="=IAL@'="=W5M@'="=>)N@'="=O@'="=P@'="=-C Q@'="=`R@'="=ˆR@'="=NS@'="=JT@'="=:U@'="=LoIV@'="=W@'="=" X@'="=Pm Y@'="=1 ZZ@'="=w [@'="=2=!\@'="=z!?]@'="=!^@'="="_@'="= M"1`@'="=¢"a@'="=!>p>o?^;?^;"?^;<k>?fT;;]i>?.V:Q;"f> ?.V:Q;Zd>jk?.V:Q;Eec>ط?fT;; a>P?fT;;_>Ժ?fT;;]>g?fT;;B[>W?=ִ=X>?=ִ=OU>\Z?=ִ=0S>S?=ִ=zP>[?=ִ=-M>u[?=ִ=.K>?=ִ=H>@?=ִ=F>bI?=ִ=d?=ִ=P:A>?=ִ=>>k)?=ִ=f<>e?=ִ=%:>`?=ִ=7>V?=ִ=:5>?=ִ=2> ?=ִ=z50>D?=ִ=->?=ִ=+>f?=ִ=x(>?=ִ=%>,?=ִ=">?=ִ=! >?=ִ=H>?=ִ=i:>IG?fT;;35>?fT;;"><2?fT;;e4>B?fT;;G >&?fT;;Q>Y?fT;;ܞ>>?fT;;=?fT;;j=i8?fT;;=0?fT;;==?fT;;=3?=ִ=R*=?=ִ=L6=H?=ִ=vq=i?=ִ=y=2?=ִ==~?=ִ=u=?=ִ=#/=R@=ִ==y>@=ִ=_==,@=ִ=e=~@=ִ==@=ִ===@=ִ=H=E@=ִ=S^=@=ִ=m=@=ִ=n=_@=ִ=]o[=i @=ִ=OK=[ @fT;;>=Q @fT;;5={I @fT;;ҍ0= ; @.V:Q;*,=@.V:Q;w#=@.V:Q;R=Z~@.V:Q;[}<)@.V:Q;]<@.V:Q;<@.V:Q;:y<@O@.V:Q;~@=ִ=?_?@=ִ=L@@=ִ=Q8A@=ִ=~ %B@=ִ= C@=ִ=C@=ִ=D@=ִ=nIE@=ִ=?RF@=ִ=G@=ִ=UH@=ִ=iI@=ִ=J@=ִ=c qK@=ִ=w(cL@=ִ= .UM@=ִ=PGN@=ִ=Y;O@=ִ=nL'/P@=ִ=#Q@=ִ=bi R@=ִ=@ S@=ִ=2=!\T@=ִ=?!rT@=ִ=!U@=ִ=)"V@=ִ=,"/W@=ִ=M"AX@=ִ=p`"Y@=ִ=w"Z@=ִ="g[@=ִ=P"\@=ִ="<]@=ִ=A"^@=ִ="-_@=ִ="~`@=ִ="a@=ִ=|h> ?=!=fff>ђ?=!=:d>?=!=Tb>?^;m<,_>?^;m< {]>i?.VT;m;0f[>?.VT;m;;Y>}?=!=&W>?=!=%U> ?=!=S>?=!=ŏQ>?=!=O>G?=!=gL>5?=!=I>?=!=`F>@?=!=. D>>?=!=aA>?=!=>>4?=!=o <>V?=!=c9>w?=!=[7>??=!=4>?=!=12>W?=!=`/>'?=!=EH->?=!=*>h%?=!=(>?=!=%>"8?=!=">?=!=D6 >G?=!=ӄ>?=!=>M?.VT;m;>0?.VT;m;e>?.VT;m;>hA?.VT;m;#>?.V:m;I >?.V:m;8 >?.V:m;pA>?.V:m;6>?.V:m;=?.V:m;=?.V:m;e=?.V:m;,=2?.V:m;Gr=?.V:m;c=]?.V:m;=O?.VT;m;f=b?.VT;m;!Z=?.VT;m;=C?=!=p\=!?=!== ?=!=2˾=?=!==x@=!=Š=ˡ@=!=WA=ɒ@=!= =@=!=m=t@=!=k =]@=!==W?@=!=]np=7@=!=sZ=@=!=rE=@=!=2= @=!= :!=} @.VT;m; z= @.VT;m;= @.VT;m;= @.V:m;RH@.V:m;-?@.V:m;VE8~@.V:m;>}@.V:m;H@.V:m;ͼk@.V:m;7M@.V:m;z@.V:m;U#J@.V:m;4o@.V:m;F@.V:m;jjY* @.V:m;p(F!@.V:m;z̗"@.V:m;3I#@.V:m;SL$@.V:m; D%@.V:m;Jy&@.V:m;;ǠV'@.V:m;PS)@.V:m;P*@.V:m;6+@.V:m;>D,@.V:m;mP-@.V:m;½/@.V:m;$ɽk(0@.V:m;νG1@.V:m;=)ӽZ2@.V:m;18@.VT;m;95&9@.VT;m;F:@.VT;m;E6;@.VT;m;o;@^;m@^;m<<ǝ?@=!=s H@@=!= rA@=!=K!}\B@=!=AFC@=!=;Q1D@=!=^E@=!=%F@=!=3PF@=!=mG@=!=*CH@=!=mVI@=!=uƦJ@=!=ulK@=!=}[ L@=!=4-!vM@=!=;!gN@=!=F}"YO@=!=#Q@=!=#1R@=!=D$)$S@=!=K$LT@=!=l$A U@=!=$LU@=!=~$sV@=!=u$W@=!=^$X@=!=E$9Y@=!=X$Z@=!=#[@=!=#ڬ\@=!= #n]@=!=cb#^@=!="7#_@=!= #~`@=!="ra@=!=`>?=m=^>)!?=m=[>n?=m=[(Y>$?^;W%<ȴV>#?^;W%<6\T>2!?^;W%<*R>?^;W%<&P>?=m=)N>?=m=&?=m=&J>g?=m=NG>I?=m=܂E>?=m=B>?=m=3@>M.?=m=g=>?=m=L:>c}?=m=F7>#?=m=4>?=m=2>/i?=m=]k/> ?=m=,>7?=m=XV*>J?=m='>)?=m=)y%>?=m=Q">x*?=m=l_ >?=m=p>]?=m=>p?=m=O$>am?=m=5_>?=m=¢>F?=m=>?.VT;%!;$ >?.VT;%!;؞ >3?.VT;%!; >?.VT;%!;,E>'?.V:);0=?.V:);O=>z?.V:);J=?.V:);=Ӿ?.V:);N=?.V:);Dj=)?.V:);/=?.V:);=~T?.V:);=?.V:);|=sJ?.V:);R=&?.VT;%!;=ԙ?.VT;%!; =k?.VT;%!;&=Z*?=m="=?=m=а=?=m=ج=g(@=m=5ѧ=@=m=I=d@=m=Ɗ=@=m=ꕒ=@=m=BA=@=m=|=@=m=c=£@=m=PPJ=s@=m=U2==@=m=}= @=m=! =f @=m=< @.VT;%!;P< @.VT;%!;O<Թ @.VT;%!;< @.V:);<ɯ@.V:);ڊ<@.V:);̶S<`@.V:);V;@.V:);9*@.V:);λR@.V:);@ޫ0b@.V:);Lڻ @.V:);m@.V:);PZb@.V:);@.VT;%!; >@.VT;%!;?@^;W%<@@N'?==˼U>?==S>b-?=={P>y?==M>/?==nK>?==j4I>4?==G>?==aD>)??==B>yʼ?==@>X?==m>>B?== <> ?==y9>'?==q6>?==3>p?==1>?==.>?== $+>g_?==;(>u?==S\%>?==">F??== >?==d>p|?==1>?==9>?== >d?==k>?==>ܝ?== >)?.VT;Ad; >ߧ?.VT;Ad;>U?.VT;Ad;W!>2s?.V:[;Ps>?.V:[;=/?.V:[;?=o~?.V:[; =?.V:[;^= ?.V:[;*=Y?.V:[;F=L?.V:[;=?.V:[;]=c?.V:[;M=w1?.V:[;S=?.V:[;=?.V:[;sI=*?.V:[;̯=V?.V:[;"ƫ=iT?.V:[;(E=?.V:[;<=a?.V:[;XW='?.VT;Ad;l=E?.VT;Ad;G=.Y?.VT;Ad;J=Ӄ@.VT;Ad;U1=rk@.VT;Ad;|=ca@.VT;Ad;=1_@^;`<݀=[@^;`<3q=8N@^;`<:\=b/@.VT;Ad;LA=@.VT;Ad;@$=@.VT;Ad;t{ =@.VT;Ad;x@.VT;Ad;I5?@.VT;Ad;BT@@^;`<)KA@^;`<5A@^;`<B@==>C@==D@==5E E@==!0fF@==#NG@==P$"8H@==b%!I@==R_&x J@==H'J@==(K@==(hL@== 7)½M@==)ޫN@==)$O@==5*vP@==XV*wQ@==\*0fR@===I*US@==!!*VDT@==\)3U@==)"V@==6)W@==n(X@==tB(X@=='Y@== 'Z@==g&[@==%ߩ\@==@%5]@==$^@==#u_@==W#c`@=="Qa@==k)P>q?==lM>4/?==J>?==H>v6?==iE>?==B>A?==z@>.ȸ?==">>O?==;>ۻ?==w9>i?==Af7>?==5>\?==W2>I+?== 0>?==s->j?==*>?==('>?==$>Z?==)!>T?==}>?==p>K=?==~>?==>v?==)=>?==>ȱ?==z>V?.VT;; > ?.VT;;I >e?.VT;;[>bL?.VT;;jM>?.V:; >k?.V:;a=G?.V:;=M?.V:;=?.V:;3= ?.V:;=_(?.V:;V=?.V:;=F?.V:;k=w?.V:;A=?.V:; |=V?.V:;=J?.V:;=!?.V:; =s?.V:;˪=w?.V:;W=W?.V:;`=ҋ?.V:;s=-?.V:;e=V?.V:;=lC?.V:;*= ?.V:;=?.V:;A=@.V:;=@.V:;^+=@.V:;@s=@.V:;`f=*@.V:;[=q@.V:;O=|@.V:;2==@.V:;" =oI@.V:;-Z=@.V:; @.V:;< @.V:;BJ< @.V:;@<  @.V:;{;R)@.V:;P;,@.V:;s9@.V:;@.V:;vk@.V:;/PH@.V:;_Ӄ@.V:;)@.V:;Wɼ@.V:;7ռ@.V:;h"z@.V:;,f9|@.V:;P7n@.V:;E&@.V:;S){@.V:;]AEh@.V:;VG@.V:;?fL4@.V:;'p,(@.V:;Fz(@.V:;5A @.V:;)^i!@.V:;"@.V:;p[h#@.V:;6:$@.V:;3%@.V:;,&@.V:;Hw(@.V:;ݕ9)@.V:;^gc*@.V:;+@.V:;#g,@.V:;wý-@.V:;`ʽ0.@.V:;ҽ/@.V:;ڽ 0@.V:;1@.V:;L 2@.V:;n5S3@.V:;8hキ4@.V:; 6@.V:;y@E7@.V:;.T[8@.V:;H9@.V:;#:@.V:;%>;@.V:; ;@.V:;1zX<@.V:;=@.V:;>@.VT;;mx?@.VT;;4[[@@^;A@^;,?|=R=0E>)?|=R=7?|=R=1?>?|=R=<>E?|=R=jm:>Ϸ?|=R=x7>Y?|=R=w5>?|=7R=3>Ou?|=7R=0>?|=7R=~U.>?|=7R=+>]1?|=7R=~)>?|=7R=&>k?|=7R=@$> ?|=7R=l!>?|=7R=hy> W?|=7R=Zd>?|=7R=3>'?|=7R=>@?|=7R=}>?|=7R=x>hz?|=7R={ >?|=7R=>C?|=7R=CS>oG?|=7R=>:?.VT;ّ;{>?.VT;ّ;=B?.VT;ّ;7=?.VT;ّ;Ps=?.V:;E=2?.V:;i8=?.V:;|=?.V:;=+n?.V:;=?.V:;x=?.V:;2W=D?.V:;Z=?.V:;= ?.V:;Oɹ=Kx?.V:;雴=?.V:;}= z?.V:;W=?.V:;=?.V:;=?.V:;=s?.V:;k= -?.V:;Z=ˁ?.V:;͍=kD?.V:;)=??.V:;F=?.V:;w=1}?.V:;n=(@.V:;c=_F@.V:;AU="@.V:;H=5)@.V:;==:@.V:;2=2@.V:;)= @.V:;=@.V:;GY&@.V:;҉'@.V:;![(@.V:;Ž)@.V:;Ƚ*@.V:;Bʽ,@.V:;;̽ -@.V:;Pν.@.V:;uӽ/@.V:;"ڽ0@.V:;H1@.V:;罖!2@.V:;W #3@.V:;[&4@.V:;65@.V:;Se6@.V:;vW7@.V:;-8@.V:;+49@.V:;e w:@.V:; `V;@.V:;m7<@.V:;z=@.V:;U=@.V:;)j>@.V:;8?@.VT;ّ;t@@^;<!zA@^;'D@|=7R= (;E@|=7R=!*E@|=7R=c+\F@|=7R=~,G@|=7R=-H@|=7R=Z.(~I@|=7R=2/fJ@|=7R=/OK@|=7R=C0 9L@|=7R="0!#M@|=7R='0R N@|=7R=*1UN@|=7R='1O@|=7R=9 1P@|=7R=E0øQ@|=7R=X0ۢR@|=7R=-$0ʍS@|=7R=/}wT@|=7R=/aU@|=7R=L.ڪ?=ϟ==>a3?=ϟ=v8:>Z?=ϟ=y7>F?=ϟ=4>JѶ?=ϟ=@2>\?=ϟ=w/>?=ϟ=5,> z?=ϟ=j*> ?=ϟ='>?=ϟ=N|%>5?=ϟ=">?=ϟ=dt >k?=ϟ=g> ?=ϟ=!>?=ϟ=R>R?=ϟ=!X>?=ϟ=B>?=ϟ=( >D?=ϟ= >h?=ϟ=5>?=ϟ=W>)!?.VT;;T>?.VT;;}=L?.VT;;1?=?.VT;;=z?.V:j;=?.V:j;>=?.V:j;->=?.V:j;2=A?.V:j;C=?.V:j;=E.?.V:j;=?.V:j;IH=E?.V:j;=k?.V:j;Ը=?.V:j;7=?.V:j;߈=q?.V:j;=?.V:j;dͨ=%?.V:j;=?.V:j;=J?.V:j;=?.V:j;={I?.V:j;/=?.V:j;=/?.V:j;|=?.V:j;]=Ԁ?.V:j;,Er=3?.V:j;Td=?.V:j;_=?.V:j;CV=+@.V:j;;H=@.V:j;mu9=4@.V:j; +=@.V:j;!=^@.V:j;(=T@.V:j;=@.V:j;#<5@.V:j;<@.V:j;ѯ<@.V:j;@.V:j; @.V:j; Pn@.V:j;yQ@.V:j;*?T@.V:j;ڐ?Ab@.V:j;YO_@.V:j;\nL@.V:j; qNB@.V:j;=@.V:j;:;@.V:j;wd5@.V:j;^q@.V:j;ے @.V:j;Z!@.V:j;v*"@.V:j;2J#@.V:j;Dn$@.V:j;He%@.V:j;d&@.V:j;7'@.V:j;o,Ƚ'3)@.V:j;ͽX*@.V:j;?ѽp+@.V:j;\ս,@.V:j;ؽ-@.V:j;M۽Fy.@.V:j; ߽ao/@.V:j;=Dc0@.V:j;:hX1@.V:j;lKV2@.V:j;:d3@.V:j;eu4@.V:j;Y5@.V:j;6@.V:j; 7@.V:j;Q 9@.V:j; \9@.V:j;.:@.V:j;;@.V:j;Lz<@.V:j;Og=@.VT;;(D>@.VT;;Kr h ?@.VT;;="?@.VT;;5%@@=ϟ=1?'cA@=ϟ=)ݕB@=ϟ=L* uC@=ϟ=K,UD@=ϟ=ѯ-7E@=ϟ=. F@=ϟ=0iF@=ϟ=Y1G@=ϟ=1H@=ϟ=(2}I@=ϟ=6Y3J@=ϟ=3~K@=ϟ=D4fL@=ϟ=4OM@=ϟ= 48N@=ϟ= 4!O@=ϟ=t4- P@=ϟ=]4wP@=ϟ=3Q@=ϟ=3zR@=ϟ=2S@=ϟ==2T@=ϟ=ir1zU@=ϟ=01aV@=ϟ=e/GW@=ϟ=|.,X@=ϟ=X-4Y@=ϟ=1,Y@=ϟ=*Z@=ϟ=m)j[@=ϟ=>^(#\@=ϟ=4']@=ϟ=%j^@=ϟ=q$YM_@=ϟ= #f1`@=ϟ=]!a@=ϟ=N7> (?o=g= 4>t?o=g=2>@?o=g= T/>͵?o=g=&,>}Z?o=g=)>p?o=g=)'>y?o=g="$> ?o=g=B!>?o=g=eV>5?o=g=L>_?o=g=Z+>i?o=g=>?o=g=>?o=g=^.>L?o=g=S>?o=g=] >k?o=g=G >JD?o=g= >?o=g=>O?o=g==H2?o=g==?.VT;W;=e?.VT;W;۾=?.VT;W;{=H?.VT;W;=~?.V:W;e=?.V:W;q=;Q?.V:W;=?.V:W;D=X?.V:W;!s=D?.V:W;=?.V:W;H=^.?.V:W;=?.V:W;=?.V:W;=?.V:W;3m=>?.V:W; =R?.V:W;E=?.V:W;} =*?.V:W;Nb=?.V:W;8=5?.V:W;f3=?.V:W;=6?.V:W;v~=D?.V:W;=bt=?.V:W;Ai=Z?.V:W;E_=;?.V:W;Q=?.V:W;3B=?.V:W;<=}^?.V:W;3={@.V:W;#=eT@.V:W;{=5@.V:W;=@.V:W;$=@.V:W;<@.V:W;P<@.V:W; <@.V:W;v<0@.V:W;0F<@.V:W;x@.VT;W;N&Me?@.VT;W;(=@@.VT;W;O*DA@o=g=,A@o=g=D.[B@o=g=W/C@o=g=r21D@o=g=y2nE@o=g=43 PF@o=g=43G@o=g=5H@o=g=+Q6H@o=g=6I@o=g=χ7*J@o=g=7K@o=g=j18hL@o=g=U8M@o=g=~S8fN@o=g=^08NO@o=g=7a5P@o=g=7"Q@o=g=7OR@o=g=c6R@o=g=5S@o=g=f41T@o=g=3)U@o=g=2xV@o=g= 1[W@o=g=80O=X@o=g=z.Y@o=g=k-vY@o=g= ,Z@o=g=*[@o=g= )s\@o=g=f']@o=g=%^^@o=g=z$=_@o=g="`@o=g=r!`@o=g=/>7?鶄=;=y,>4?鶄=;=z*>iĴ?鶄=;=H'>S?鶄=;=~$>??鶄=;=!>Xt?鶄=;=>?鶄=;=2>>؛?鶄=;=;> 2?鶄=;=>ʿ?鶄=;=81>Rd?鶄=;=7>?鶄=;=>I?鶄=;= >D?鶄=;=eT >?鶄=;=2r>h?鶄=;=|>:?鶄=;=Dl>?鶄=;=3S=:?鶄=;=/=9?鶄=;=PV=?鶄=;=Ω=R?.VT;>;:z=a?.VT;>;=?.VT;>;=z7?.VT;>;=?.V:;J =U?.V:;sJ=?.V:;=?.V:;ݶ=x?.V:;a=?.V:;a=5F?.V:;=?.V:;&U=H?.V:;:$=?.V:;=@?.V:;$ =Z?.V:;T=;4?.V:;lC=?.V:;+=Y?.V:;y=?.V:;vQt=-?.V:;Dlp=׽?.V:;kj=EJ?.V:;b=^?.V:;T=f?.V:;%E=/?.V:;.;=?.V:;O6=?.V:;&=k?.V:;=@.V:;=@.V:;FC=@.V:;d<@.V:;2<]@.V:;V@.VT;>;)>@.VT;>;,]?@.VT;>;0).Z~@@.V;p< 0UA@鶄=;=1j/B@鶄=;=YQ3 C@鶄=;=غ4C@鶄=;=6D@鶄=;=-7"E@鶄=;=)<8F@鶄=;=$9njG@鶄=;=9rNH@鶄=;=:2I@鶄=;=);3J@鶄=;=l;J@鶄=;=;uK@鶄=;=<`L@鶄=;=C$?ݵ==%>?ݵ==O"">0I?ݵ==L>ڶ?ݵ=={>l?ݵ==>?ݵ==>ٔ?ݵ==s>V)?ݵ==_F>?ݵ==Ɔ>}[?ݵ== >?ݵ==} >?ݵ==<>6?ݵ==/n>8?ݵ==Ԙ>Q?ݵ==`=,?ݵ==s=?ݵ==.<=I?ݵ===3?ݵ==E,=z?ݵ==2 =i?ݵ==k=+2?.VT;ZՒ;9&=?.VT;ZՒ;]=g?.VT;ZՒ;=?.VT;ZՒ;=g?.V:;O=?.V:;x=?.V:;=?.V:;=L?.V:;؜=?.V:;h=?.V:;X=l?.V:;=_?.V:;=n?.V:;_{=Z?.V:;w=u?.V:;)r=?.V:;i=?.V:;EK^= ?.V:;jU=?.V:;R=:?.V:;%!Q=p@.V:; N@.V:;?\5@.V:;i)@.V:; v@.V:;h~ۅ@.V:;;@.V:;o@.V:;&u@.V:;9@.V:; O@.V:;a_\@.V:;}x@.V:;z} @.V:;\!@.V:;P"@.V:;Žf#@.V:;ݖȽS$@.V:;˽ک%@.V:;,Ͻ&@.V:;*Խ$'@.V:;aܽ(@.V:;*p)@.V:;?潪+@.V:;P뽰W,@.V:;𽖖-@.V:;~ĵ.@.V:;Xı/@.V:;yZX0@.V:;1@.V:;+02@.V:; }3@.V:;2 9a4@.V:;j d5@.V:;hs6@.V:;p7@.V:;g8@.V:;|9@.V:;:@.V:;q8#;@.V:;+'<@.V:;w*qs=@.V:;~7-D>@.VT;ZՒ;B/?@.VT;ZՒ;1-?@.V;Z<3w@@.V;Z

5:A@ݵ==6jB@ݵ==<8EC@ݵ==9h!D@ݵ==:D@ݵ==;E@ݵ==ZH@ݵ==>kI@ݵ==0G?YPJ@ݵ==$?5K@ݵ==?L@ݵ==/?M@ݵ==?M@ݵ==Z?N@ݵ==>}O@ݵ==a>?P@ݵ==>=*tQ@ݵ==<UR@ݵ==;5S@ݵ==%:YT@ݵ==t9AT@ݵ==8U@ݵ==s6V@ݵ== 5W@ݵ==d3aX@ݵ==1:Y@ݵ==/Z@ݵ==S.Z@ݵ==!, [@ݵ==9*З\@ݵ==8H(n]@ݵ==S&C^@ݵ==Eh$_@ݵ==s"_@ݵ== `@ݵ==p >?W=ط=+>:?W=ط=L>Jε?W=ط=p>`?W=ط=>?W=ط=>Ɗ?W=ط=>h ?W=ط= >t?W=ط= >O?W=ط=xG>)?W=ط=/n>?W=ط=`>|'?W=ط==?W=ط=E=mo?W=ط=Y=j?W=ط= =r?W=ط==Cp?W=ط=!=m?W=ط==?.V;D<=?.VT;;\=5?.VT;;=L?.V:;a=ʋ?.V:;=,?.V:;c=@?.V:;XY=8K?.V:;P=&?.V:;ɑ=t?.V:;c=N?.V:;=f?.V:;y[=WB?.V:;{=ˠ?.V:;zr=?.V:;Φc=?.V:;F?Z=?.V:;U=͒?.V:;l^U=K?.V:;TT=ٯ?.V:;:L=JC?.V:;*A=]?.V:;Z5=&?.V:; 1=3?.V:;Ef.=\?.V:;!)=?.V:;=q?.V:;_ =\?.V:;<>=?.V:;4BMb @.V:;l @.V:; @.V:;;ӽ @.V:;ؼ @.V:;^ @.V:;oJr2@.V:;o@.V:;k}Z@.V:;0U@.V:;4%4@.V:;b/@.V:;ǡ>Gs@.V:;S~@.V:;fC@.V:;tB\@.V:;=Ҁb0@.V:;>;@.V:;IR@.V:;)@.V:;=@.V:;Lo@.V:;@.V:;5_@.V:;$@.V:;&@.V:;|Ѿ @.V:;DkŽp"@.V:;ʽ#@.V:;QjϽg $@.V:; [ӽQ%@.V:;9׽*&@.V:;Ș۽Y'@.V:;5(@.V:; *)@.V:;܃*@.V:;|+@.V:;h,@.V:;JA-@.V:; /@.V:;i0@.V:;a0@.V:; 2@.V:;5y G3@.V:;r %3@.V:;4@.V:;l5@.V:;Ii6@.V:;H7@.V:;Ƥ9@.V:;*"[":@.V:;^%;@.V:;u*<@.V:;-v<@.V:;0)=@.V:;:3<>@.VT;;35S?@.V;D<67$@@.V;D<98@@.V;D\D@W=ط=.W?;E@W=ط=Q@F@W=ط=+ADF@W=ط=A"G@W=ط=_BH@W=ط=B;I@W=ط=ECҋJ@W=ط=}CvpK@W=ط=rC;UL@W=ط='hCq9M@W=ط=&C N@W=ط=BO@W=ط=-BO@W=ط=uAP@W=ط=@Q@W=ط=Ҋ?MR@W=ط= c>_S@W=ط==;T@W=ط= ;U@W=ط=:U@W=ط=m8V@W=ط=6W@W=ط=4mtX@W=ط=2IHY@W=ط=0eZ@W=ط=.pZ@W=ط=,[@W=ط=|*X\@W=ط=̚(sc]@W=ط=2r&4^@W=ط=X$O_@W=ط=4"_@W=ط=K! `@W=ط=P>)?д='=l>]?д='=4>zT?д='=>K?д='=d >}?д='=; >b?д='=>*?д='=A>A?д='=| >Qܿ?д='=9D=w?д='=u=?д='=q=̵?д='=w=W?д='==C?д='=="?д='==S?д='==*?д='==?д='=&V=h?.V;.S<ο=?.VT;.S;q=?.VT;.S;8=ߋ?.V:.S;\=B??.V:.S;l=_?.V:.S;&=?.V:.S;-='?.V:.S;{=?.V:.S;=L?.V:.S;c~=/?.V:.S;9y=\?.V:.S;7m=?.V:.S;X^=+?.V:.S;(M=?.V:.S;n<= )?.V:.S;Oy4=?.V:.S;x1= ?.V:.S;4=?.V:.S;X6=C?.V:.S;-=;?.V:.S;@$={?.V:.S;m=?.V:.S;?=0+?.V:.S;%= =?.V:.S;'=?.V:.S;Z{f/@.V:.S;%rP0@.V:.S;O1C1@.V:.S;8 (G2@.V:.S;Z93@.V:.S;  4@.V:.S;{4@.V:.S; 5@.V:.S;N6@.V:.S;# ,8@.V:.S;X$i;9@.V:.S;(P7:@.V:.S;#-T;;@.V:.S;E1-<@.V:.S;-4=@.V:.S;6=@.V:.S; 8>@.VT;.S;n:?@.V;.S<<^@@.V;.S<=1A@.V;.S2?J=w=0 >E?J=w=> >I۶?J=w=n>p?J=w=>?J=w=>R?J=w==5?J=w=1 =;?J=w==f?J=w==C?J=w=*=?J=w=k)=h@?J=w=2=z?J=w=-=+?J=w==3?J=w==?J=w==i?J=w==B?J=w=9=?.V;<쿮=?.VT;J;)=m?.VT;J;v=)?.V:J;=u?.V:J;=?.V:J;=YM?.V:J;ǂ=?.V:J; q=Xo?.V:J;bJd=?.V:J;:A[=i?.V:J; S=n?.V:J;H=A?.V:J;<=?.V:J;.=?.V:J;m=g?.V:J; =9+?.V:J;Q =K?.V:J;/ =1?.V:J;ۢ =E?.V:J;T=?.V:J; A?.V:J;h&@.V:J;@'@.V:J;%](@.V:J;D)@.V:J;*@.V:J;2j+@.V:J;!,@.V:J;-@.V:J;.@.V:J;( /@.V:J;ǃ V0@.V:J;8e1@.V:J;#Z2@.V:J;h\Pn3@.V:J;LO4@.V:J; 65@.V:J;b/6@.V:J;2: \;7@.V:J;M#R8@.V:J;m'j9@.V:J;r.n:@.V:J;r4bj;@.V:J;7dX<@.V:J;9:=@.V:J;;>@.V:J;=>@.VT;J;y]?#?@.V;28?ij=Ǹ=>pϵ?ij=Ǹ=#>d?ij=Ǹ=->?ij=Ǹ=3S=C?ij=Ǹ=_=g(?ij=Ǹ='N={?ij=Ǹ= F=W?ij=Ǹ=:= ?ij=Ǹ=(-=?ij=Ǹ==(?ij=Ǹ==?ij=Ǹ=(=3k?ij=Ǹ==?ij=Ǹ=}=Թ?ij=Ǹ=C=f?ij=Ǹ=o=j?ij=Ǹ=o=?ij=Ǹ=G==,?ij=Ǹ=k==?ij=Ǹ=O!=?ij=Ǹ==?.VT;ѓ;r܉=Fy?.VT;ѓ;=4?.VT;ѓ;bv=?.VT;ѓ;Te=|?.VT;ѓ;tT=p ?.VT;ѓ;E=w?.VT;ѓ;d8=_?.VT;ѓ;-=X?.V:f;#=?.V:f;I=?.V:f; =g?.V:f;o ="?.V:f;Pb=@.V:f;@=>@.V:f;FB?@.V;< C?@.V;NI@ij=\Ǹ=NkJ@ij=\Ǹ=NPK@ij=\Ǹ=ǡN4L@ij=\Ǹ=jNNM@ij=\Ǹ=MM@ij=\Ǹ=MMN@ij=\Ǹ=#2LO@ij=\Ǹ="KޑP@ij=\Ǹ=IvkQ@ij=\Ǹ=H CR@ij=\Ǹ=FS@ij=\Ǹ=GES@ij=\Ǹ=nCT@ij=\Ǹ=sAҊU@ij=\Ǹ=0b?WV@ij=\Ǹ=-=%"W@ij=\Ǹ=:yW@ij=\Ǹ=*8İX@ij=\Ǹ=2!6uY@ij=\Ǹ=39Z@ij=\Ǹ=$1"Z@ij=\Ǹ=^.U[@ij=\Ǹ=,~\@ij=\Ǹ=6v)>]@ij=\Ǹ=& ]@ij=\Ǹ=O$^@ij=\Ǹ=!,_@ij=\Ǹ=AO?`@ij=\Ǹ=:>ô?>==r6=Y?>=='= ?>===ׅ?>===?>==W= ?>==M=I?>==|=~?>== =>z?>==W=#?>== =ٰ?>==O=N?>==a= ?>==b=Փ?>==J =!;?>===?>==I=?>== Й=J?>==.S=G?>===4?>==m=[{?>==~=&:?.VT;;q=?.VT;;+b=?.VT;;xS=`?.VT;;[C=?.VT;;v2=\?.VT;;"=?.VT;;=ut?.VT;;( =?.V: ;u<3?.V: ;@.V: ;3C,.@.V: ;I<@.V: ;\R0@.V: ;`a,@.V: ;6ql@.V: ;|b@.V: ;y2q@.V: ;P6u@.V: ;fMI@.V: ;4@.V: ;c@.V: ;#]@.V: ;3O@.V: ;N@.V: ;id@.V: ; ýf@.V: ;[yɽ@.V: ;ѽ@.V: ;C۽S@.V: ;i1 @.V: ;NN!@.V: ;""@.V: ;i#@.V: ;$@.V: ;m%@.V: ;2m'@.V: ; ^D(@.V: ;{)@.V: ; q!*@.V: ; h=+@.V: ;V \V,@.V: ; m-@.V: ;].@.V: ;/@.V: ;niPo0@.V: ;fF1@.V: ;l2@.V: ;2@.V: ;A)3@.V: ;s"4@.V: ;v%5@.V: ;(6@.V: ;*)7@.V: ;Ja.8@.V: ;&29@.V: ;<7:@.V: ; <;@.V: ;e?T<@.V: ;YB߇=@.V: ;yDc>@.V: ;TF??@M;<]H.@@M;< I{@@M;<&:KA@M;==#MC@>==NuD@>==OWE@>==P;F@>==?tQG@>==QH@>==\R`H@>==ѓR}I@>==URJ@>==9|RRK@>==2R|L@>==Q^M@>==\Q>N@>==R'PO@>==iOO@>==UMP@>==-yLQ@>==TJ}R@>==$)IOS@>==JAGT@>==BE)T@>==CU@>==@|V@>==E>AW@>==E<X@>==C9X@>==67Y@>==k4BZ@>==1CZ@>==-!/0[@>==>u,u\@>==-)0]@>==%#']@>==v$j^@>==!1^_@>==<-Y`@>==H=R?=h=.=?=h==~?=h==E?=h=O=/?=h==->?=h=;s=Ӿ?=h=?=j?=h=]=`?=h=塚=?=h=`=5?=h=F =_?=h==2r?=h=B=?=h=Ϝ=M?=h=+Q=c?=h=Ə=?=h=,=?=h=}=1x?=h=-w=1?=h=i=?=h=\=ҩ?=h=M=we?=h=>=7?=h=6/=?=h==j?M; S<¦=L?M; S<9t?.V:N;pJ5*?.V:N;ػ?.V:N;C')?.V:N;V@.V:N;v@.V:N;'1q@.V:N;oB@.V:N;@.V:N;eѼ@.V:N;+@.V:N;s@.V:N; R@.V:N;Oyu@.V:N;$C@.V:N;Q-" @.V:N;E$ @.V:N;y[)[ @.V:N;1 A @.V:N;>$ @.V:N;cdI @.V:N;9SMh@.V:N;Wc @.V:N;e@.V:N;*kvn@.V:N;[w@.V:N;6@.V:N;Pሽ@.V:N;Z@.V:N;@@.V:N;:tÞ@.V:N;SϢrk@.V:N;`K@.V:N;u>@.V:N;nm8@.V:N;Ľh@@.V:N;uɽZK@.V:N;<ͽO@.V:N;N Խ7@.V:N;?W۽@.V:N;D8 @.V:N;|!@.V:N;"@.V:N;,#@.V:N;&*$@.V:N;N c'%@.V:N;7&@.V:N;A'@.V:N;m C(@.V:N;NT)@.V:N;  *@.V:N;8h+@.V:N;0,@.V:N;-@.V:N;.@.V:N;O/@.V:N;x|g0@.V:N;6E1@.V:N;*:"-^2@.V:N;{1$-B3@.V:N;&{04@.V:N;K(w-5@.V:N;O*76@.V:N;Q-(E7@.V:N;z0I8@.V:N;q;4t@9@.V:N;G8W>:@.V:N;;);@.V:N;Q?<@.V:N; sB<@.V:N;(CE=@.V:N;G">@.V:N;IQj?@M; SP@=h=dtPQ@=h=NhQ@=h=YMR@=h=.KQS@=h=3IRT@=h=yFU@=h=D/U@=h=w0BV@=h=6?bW@=h=e=X@=h={:X@=h=B7SY@=h=i5LZ@=h=d2[@=h=/V[@=h=`,l\@=h=<.* ]@=h=*o']@=h=h$v^@=h=!.<_@=h=JE_@=h='=?1==\=6x?1==.= ?1===?1==A=5?1==l=ɽ?1==8=}^?1==2=E?1===]?1==/=` ?1==˦=4?1==sJ=S?1==^ՙ=?1==E=͐?1==D=3?1===?1==~=+?1==2Xq=2?1==c=i?1==U=?1==-G=Q?1==%9=9 ?1==#,*=@?1== =s?1==G =u ?1==/"T @.V:;B[# @.V:;UFG @.V:;G @.V:;kSS @.V:;Ib@.V:; r@.V:;x y@.V:;@.V:;&&V@.V:;1%@.V:;@.V:;䟙@.V:;퟽@.V:;J@.V:;_C@.V:;{)@.V:;<ǽ@.V:;5н@.V:;Hӽ@.V:;ֽ@.V:;Gڽt@.V:;u@.V:;gu@.V:;l @.V:;f!@.V:;`"@.V:;p]#@.V:;eb$@.V:;%n%@.V:;{2u&@.V:;n Bw'@.V:;'(@.V:;G)@.V:;}*@.V:; ,@.V:;-@.V:;2.@.V:;/@.V:;{M 0@.V:;"0@.V:;5&1@.V:;(2@.V:;'*3@.V:;u,s4@.V:;,d.o5@.V:;PR0$~6@.V:;%Z27@.V:;!X5ط8@.V:;99@.V:;*=:@.V:;?;@.V:;BDN<@.V:;>D=@.V:;Gn=@.V:;J>@.V:;rM?@M;%<|O}@@M;%< QaA@M;%:X@1==#J;AX@1==H8+Y@1==j5TZ@1==2[@1==,0[@1==^e-tb\@1==*]@1==+'/]@1==+%k^@1==W"_@1==_@1===x?%=k == ?%=k =I=s?%=k =:=H2?%=k ==Pļ?%=k =Rb=mW?%=k =O=>?%=k ==|?%=k =G==?%=k ==&?%=k =D=6=?%=k ==?%=k = *=n?%=k =|= ?%=k =y=?%=k =h"l=M?%=k =Bv^=?%=k =P=?%=k =B=I?%=k =/4=?%=k =%=;?%= =&q=]?%= ==?%= =wg@.V:;MZ>@.V:;P?@M;UX@%= =;Y@%= =-9:Y@%= =Q6\Z@%= =3 [@%= =10ٯ[@%= =-X\@%= =-%+\@%= = a(z]@%= =%M^@%= ="^@%= =9 ؛_@%= =$=?=5^=q=衸?=5^=b=U2?=5^=/=û?=5^=Ǯ=S?=5^=h=?=5^=v=v?=5^=腛=>?=5^==?=5^=J|=+?=5^==?=5^=@=mS?=5^=7u=S?=5^=g=?=5^=<Z=?=5^=|DL=?=5^=TW>=\?=5^=50=?=5^=!=?=5^==wN?=5^=z=?=5^=j=@.V:+;.8C@.V:+;_E@.V:+;bHq@.V:+;#R[@.V:+;S!^V@.V:+;a; @.V:+;LcW% @.V:+;f1% @.V:+;sm F @.V:+;wt{ @.V:+;Kul@.V:+;U@.V:+;M@.V:+;u@.V:+;Ǖz8@.V:+;8,+@.V:+;嗡 @.V:+;[@.V:+;@.V:+;I@.V:+;㎷@.V:+;@.V:+;ý@.V:+;̽@.V:+;@ؽ/@.V:+;w@.V:+;f轣@.V:+;XT@.V:+; ~@.V:+;`@.V:+;  @.V:+;)!@.V:+;"@.V:+;R"@.V:+;"r #@.V:+; %@.V:+;%v&@.V:+;F 6'@.V:+;+O(@.V:+;E])@.V:+;RIZ*@.V:+;C [\+@.V:+;!@.V:+;78Q8?@.V:+;MTf@@M;+T@=5^=uMT@=5^=JѲU@=5^=GfV@=5^=(EW@=5^=NB W@=5^=t?pX@=5^=?= =ɓ<?= =Qf<?= =ǂB<'/?= =l ;?= =B#X;c{?M;F[< !?M;F[<⮻"?M;F[<k?gET;F[;\ ?.V:F[;6劼؞?.V:F[; ?.V:F[;l^?.V:F[;z?.V:F[;gz?.V:F[;X?.V:F[;ݭ?.V:F[;ϼ?.V:F[;[?.V:F[;y^?.V:F[;?gET;F[;5 Gr?.V:F[;@`?.V:F[;.Q?.V:F[;#j?.V:F[;:$A?.V:F[;$6@.V:F[;S'@.V:F[;/@.V:F[;"@.V:F[;#@.V:F[; 5J@.V:F[;,@.V:F[;K@.V:F[;T@.V:F[;p@.V:F[;dZT@.V:F[;쿽0@.V:F[;Ký/@.V:F[; ǽ@.V:F[;̽P@.V:F[;ҽ@.V:F[;9ܽ@.V:F[;*@.V:F[;G@.V:F[;sI&@.V:F[;@.V:F[;[ ^@.V:F[;mR_ @.V:F[;~ _!@.V:F[;\X"@.V:F[; J_#@.V:F[;TWUj$@.V:F[;sJOt%@.V:F[;TnM&@.V:F[;sg4'@.V:F[;a(@.V:F[;t)@.V:F[;A#N*@.V:F[;w,&+@.V:F[;H',@.V:F[;'-@.V:F[;,*[.@.V:F[;2/@.V:F[;<0@.V:F[;b=1@.V:F[;K@.V:F[;T?@.V:F[;`W X@@M;F[<ߌZ8A@M;F[<3\B@M;F[?.V:b;?.V:b;}zK[?.V:b;輹?.V:b;\?.V:b;͓?.V:b;$*@.V:b;Ui>@.V:b;&X!?@.V:b;[@@M;b=vn? =W==b? =W=D=? =W== ? =W= x=? =W=4j=K? =W=]=v? =W==P=0? =W=B=? =W=X<5=C? =W=d'=K? =W=(=W? =W=, =H? =W=%$^?.V:~;G3;?.V:~;aEf?.V:~;nhJ*?.V:~;VK?.V:~;`vO?.V:~;W˅?.V:~;a?.V:~;mfD?.V:~;f\?.V:~;- f?.V:~;0Lfw@.V:~;gl@@.V:~;,uU@.V:~;N|@.V:~;l{@.V:~;my[@.V:~;mpH4@.V:~;놽 @.V:~; *@.V:~;t@.V:~;Qܑ@.V:~;bڗf @.V:~;~c @.V:~;l=t @.V:~; @.V:~;3+@.V:~; Dzp@.V:~;˱/l@.V:~;4Juw@.V:~;yZ@.V:~;xĽn@.V:~;Ƚ.@.V:~;D˽@.V:~;нۦ@.V:~;Y6ӽU@.V:~;սٖ@.V:~;vֽ@@.V:~;{ڽ@.V:~;ݽ@.V:~;cὨ@.V:~; n@.V:~;Q#@.V:~;@.V:~;B@.V:~;]u@.V:~; #g @.V:~;l c!@.V:~;[C"@.V:~;g,#@.V:~;VI'/$@.V:~;"D%@.V:~;N`F&@.V:~; <2'@.V:~;E '@.V:~;/#t(@.V:~;5(C)@.V:~;-%*@.V:~;-2j+@.V:~;ܝ5\-@.V:~;6| .@.V:~;v9/@.V:~;>-0@.V:~;aC61@.V:~;E?2@.V:~;OD2@.V:~; F3@.V:~;H4@.V:~;I5@.V:~;dII6@.V:~;I7@.V:~;J8@.V:~;XKC9@.V:~;HkL:@.V:~;9Ny;@.V:~; R <@.V:~;/U=@.V:~;őW`>@.V:~;PZ8?@.V:~;]\s@@.V:~;c_@@M;~@.V:$;Q@.V:$;d@@.V:$;s @.V:$;J^  @.V:$;]ni!@.V:$;A8"@.V:$;GƇ#@.V:$;=}$@.V:$;G{%@.V:$;C &@.V:$;7$'@.V:$;0'Q(@.V:$;b(J(@.V:$;y<-)@.V:$;3 +@.V:$;86,@.V:$;B;O=-@.V:$;^>=.@.V:$;AE/@.V:$;DCGZ0@.V:$;gFr1@.V:$;Gi2@.V:$;G!3@.V:$; I3@.V:$;jK[4@.V:$;W\L5@.V:$;L|6@.V:$;MA7@.V:$;INF8@.V:$; DO:@.V:$;Oo;@.V:$;z8Q;@.V:$;OU<@.V:$;'Y&=@.V:$;[>@.V:$; c^r?@.V:$;=`Q@@.V:$;JEcL3A@M;$cY@==l;Y@==8p{Z@==F6-[@==GX4e[@== )2\@== 0+\@==-)]@==4+J]@==);^@==e(^@==:= &?==40r=*?==&e=/?==W=?==wJ=7?==2==?==_C0=>?==)"=?==!X=WC?=== ?==<G?==W{u?.V:g;bN @.V:g;]@.V:g;Ö@.V:g;GI@.V:g;}<@.V:g;T(@.V:g;@.V:g;Sz'@.V:g;L߫Q@.V:g;6!@.V:g;+0@.V:g;1?9 @.V:g;Q @.V:g; @.V:g;Ľ& @.V:g;ƽ> @.V:g;ǽ@.V:g;Pɽ@.V:g;̽;@.V:g;ͽ*@.V:g;н@gET;g;ӽ@gET;g;׽@gET;g;`۽k@.V:g;Gݽ:u@.V:g;8߽a@.V:g;I9@.V:g;@.V:g;`v;7@.V:g;@.V:g;+@.V:g;L@.V:g;)@.V:g;\p$@.V:g;4 4+@.V:g;p/ @.V:g;pp(!@.V:g; "@.V:g;."@.V:g;79#@.V:g;*$@.V:g; ̲%@.V:g;X$X&@.V:g;?)P'@.V:g;e5-%(@.V:g;]0.)@.V:g;3n*@.V:g;e8pw+@.V:g;D@.V:g;Bb2?@.V:g;d@@.V:g;g`xA@gE;gusY@==y;Y@==9Z@==ؽ#@.V:Ҫ;ݽT@.V:Ҫ;1 @.V:Ҫ;$@.V:Ҫ;9潦@.V:Ҫ;x31@.V:Ҫ;F@.V:Ҫ;uvq@.V:Ҫ;vȚ@.V:Ҫ;:B@.V:Ҫ;>@.V:Ҫ;S@.V:Ҫ;] @.V:Ҫ;k~ r@.V:Ҫ;}Ɗ@.V:Ҫ;zP @.V:Ҫ;Ts~!@.V:Ҫ;^al"@.V:Ҫ;$|)Y#@.V:Ҫ;W! G$@.V:Ҫ;J#1%@.V:Ҫ;'%i&@.V:Ҫ;!(P'@.V:Ҫ;L, (@.V:Ҫ;r0(@.V:Ҫ;4)@.V:Ҫ;8*@.V:Ҫ;E=j+@.V:Ҫ;@#,@.V:Ҫ;v6D-@.V:Ҫ;^cG.@.V:Ҫ;I@.V:Ҫ; cq?@.V:Ҫ;'e;?@.V:Ҫ;Ih@@.V:Ҫ;6jZA@gE;ҪY@=zT=\<?.V:;fz?.V:;m?.V:;^fIe?.V:;Pq?.V:;i?.V:;ӣ/5@.V:;GR @.V:;@.V:;v@.V:;&(@.V:;5zG@.V:;Ĺk@.V:;>蹽'@.V:;o@.V:;LUK@.V:;eŽK@.V:;4ʽ @.V:;ν @.V:;ս @.V:;ٽ @.V:;ٽ8@.V:;ؽN@.V:;/ؽc@.V:;Zڽr@.V:;:zܽj@.V:;x'߽.U@.V:;|E@.V:;GTMI@.V:;^@.V:;am@.V:;{n@.V:;DW@.V:;=4,@.V:;@.V:;BJ@.V:;U/@.V:;% ^@.V:;C:@.V:;~T@.V:; @.V:;w @.V:;O\!@.V:;"B"@.V:;!$!#@.V:;%4$@.V:;L4(%@.V:;*N&@.V:;-'@.V:;0m(@.V:;B4+)@.V:;7*@.V:;;+@.V:;T?+@.V:;UCI,@.V:;GM-@.V:;II.@.V:;oK=/@.V:;,FM0@.V:;yN1@.V:;quP2@.V:;@S23@.V:;<U4@.V:;U5@.V:;$V6@.V:;fW[7@.V:;_Y8@.V:;[9@.V:;F~]:@.V:;];@.V:;o^<@.V:;a=@.V:;8gdDk>@.V:;șf9?@.V:;ij@@.V:;kdA@.V:;MnqB@gET;;Gq C@gET;;BxtD@gE;<v (E@gE;<y6F@m=塚=zCG@m=塚=S{NH@m=塚=E|UI@m=塚=*S|iWJ@m=塚={XTK@m=塚=*zJL@m=塚=~qy~9M@m=塚=ޓw!N@m=塚=DPuXO@m=塚=urO@m=塚=o~P@m=塚=dxlmQ@m=塚=h+R@m=塚=[eR@m=塚=XaS@m=塚=]4T@m=塚= YT@m=塚= ViU@m=塚=yRU@m=塚=UNrV@m=塚=8KW@m=塚=HW@m=塚=EX@m=塚=]CX@m=塚=˽@Y@m=塚=p>Y@m=塚=?竄==9 @.V: 1;TRǽ$ @.V: 1;IϽ @.V: 1;Z׽9 @.V: 1; ⽲ @.V: 1;Ǹ9 @.V: 1;@.V: 1;P߽@.V: 1;߽@.V: 1;G⽌@.V: 1;|@.V: 1;@.V: 1;΍@.V: 1;@.V: 1;@.V: 1;@.V: 1;G@.V: 1;Bvz@.V: 1;`@.V: 1;=E@.V: 1;2 U.@.V: 1;.@.V: 1;?t@.V: 1;@.V: 1;l?O@.V: 1;B @.V: 1;b!@.V: 1;"O"@.V: 1;%K#@.V: 1;=(D$@.V: 1;+M*6%@.V: 1;,W#&@.V: 1;/'@.V: 1;24'@.V: 1; 5(@.V: 1;Ѱ8)@.V: 1;/;`*@.V: 1;y=U0+@.V: 1;A0,@.V: 1;CFS@-@.V: 1;IvQ.@.V: 1;LW/@.V: 1; NYO0@.V: 1; P}?1@.V: 1;$Q52@.V: 1;hxS93@.V: 1;_U9C4@.V: 1;V55@.V: 1;X6@.V: 1;Z7@.V: 1;]+8@.V: 1;_E9@.V: 1;Ea9@.V: 1;C@.V: 1;jg?@.V: 1;uYl'K@@.V: 1;~so^HA@.V: 1;rUB@gET; 1;Yv@iC@gET; 1; yD@gET; 1;{JE@gET; 1;ۥ}F@竄=e=-G@竄=e=ktH@竄=e=m<+I@竄=e=#3J@竄=e=[{K@竄=e=,~L@竄=e=g|rM@竄=e=$zN@竄=e=pzwbO@竄=e=eptTP@竄=e= qQ@竄=e=1\mjQ@竄=e=i}R@竄=e=B{eCS@竄=e=R`aS@竄=e=JC]'T@竄=e=?6YPU@竄=e=PUU@竄=e=-Q/6V@竄=e=NV@竄=e=JO;W@竄=e==GW@竄=e=k(E3X@竄=e=BX@竄=e= @y$Y@竄=e=n>Y@竄=e="P=Z@竄=e=;DZ@竄=e=:Z@竄=e=u9q[@竄=e=8 [@竄=e='8\\@竄=e=Cq7\@竄=e=6AI]@竄=e=.6]@竄=e=ލ5~6^@竄=e=q =^?`=U=|,箽sG?4:%t;S{4?4:%t;ۉ?4:%t;ڏ{?4:%t;?4:%t;)"@4:%t;NCŪ@4:%t;򴽬@4:%t;9h^@4:%t;ݘ@4:%t;½B@4:%t;SAŽ)@4:%t;ǽt@4:%t;Ƚo@4:%t;ʽz@4:%t;!tнzr @4:%t;ؽn @4:%t;@L⽇ @4:%t;齿 @4:%t;;,@4:%t;O潂@4:%t;3R@4:%t;齵@4:%t;]@4:%t;8@4:%t;t|@4:%t;T@4:%t;n@4:%t;!@4:%t;%o@4:%t;@4:%t; @4:%t;sg}@4:%t; %@4:%t;v@4:%t;~Z@4:%t;k@4:%t;^S@4:%t;c> @4:%t;L !@4:%t;b"!@4:%t;&0"@4:%t;X*#@4:%t;},$@4:%t;.%@4:%t;1&@4:%t;49}'@4:%t;8c(@4:%t;Ks;ZG)@4:%t;8>T*@4:%t;p @*@4:%t;|Ax+@4:%t;3oEȘ,@4:%t;OIq-@4:%t;LH.@4:%t;0,O+/@4:%t;TQS0@4:%t; S91@4:%t;HU`2@4:%t;'V3@4:%t;XU4@4:%t;)[̚5@4:%t;]6@4:%t;p`7@4:%t;zb-w8@4:%t;Q3dZ9@4:%t;en1:@4:%t;~f;@4:%t;t'h;@4:%t;i<@4:%t;йk=@4:%t;~m>@4:%t;m?@4:%t;p?p@@4:%t;sNA@4:%t;YMwWB@gET;%t;%zC@gET;%t;}tD@gET;%t;a3F@gET;%t;8 ,G@`=U=K遾DH@`=U=+MXI@`=U=S[geJ@`=U=kK@`=U=@iL@`=U=>^M@`=U=+1JN@`=U=|,O@`=U=t`y)P@`=U=uJP@`=U=rQ@`=U=maPR@`=U=i S@`=U=*ezS@`=U=`BT@`=U=\\=T@`=U=6"XdU@`=U= T)U@`=U=YPlV@`=U=&LV@`=U=IZcW@`=U=vFW@`=U=LDNX@`=U=lBaX@`=U=`@+3Y@`=U=:?rY@`=U=_>Z@`=U==jZ@`=U=[ D@4:A; @4:A;@4:A;-{@4:A;\@4:A;  @4:A;#!@4:A;@4:A;sr&>@4:A;s?@4:A;u @@4:A;xA@4:A;)|C@gET;;e@D@gET;;U gE@gET;;䢂F@gET;;蠃G@ڪ=i=@H@ڪ=i="I@ڪ=i=vIJ@ڪ=i=K@ڪ=i=ML@ڪ=i=}>M@ڪ=i=X瀾N@ڪ=i=ǡ~9O@ڪ=i=z P@ڪ=i=v;TQ@ڪ=i=rR@ڪ=i=smR@ڪ=i=0*i4iS@ڪ=i=]dT@ڪ=i=_ T@ڪ=i=[[$U@ڪ=i=nVߨU@ڪ=i=nRt&V@ڪ=i=NZV@ڪ=i=~KW@ڪ=i=HW@ڪ=i=FW@ڪ=i=CeX@ڪ=i=1%B,X@ڪ=i=@AY@ڪ=i=>?Y@ڪ=i=>Z@ڪ=i=u>UZ@ڪ=i=%>HZ@ڪ=i= >g[@ڪ=i=>8[@ڪ=i=>_F\@ڪ=i=G>(\@ڪ=i=|>&]@ڪ=i=>>J]@ڪ=i=>^@ڪ=i=Uݣ<?T=q=܉@4:$ ; j/@4:$ ;% [@4:$ ;9 V@4:$ ;8 @4:$ ;Sy @4:$ ; @4:$ ; @4:$ ;>.@4:$ ;,9@4:$ ;,E-@4:$ ;)@4:$ ;]@4:$ ;^ (@4:$ ;g$ @4:$ ;+'B!@4:$ ;9+U"@4:$ ;?/y#@4:$ ;2$@4:$ ;K;5ޓ%@4:$ ;ۈ7v&@4:$ ;b:_'@4:$ ;`">N(@4:$ ;1BC)@4:$ ;*6F;:*@4:$ ;&I&+@4:$ ;K*,@4:$ ;M,@4:$ ;ȗP0-@4:$ ;ǻS.@4:$ ;Un/@4:$ ;U0@4:$ ;pXY1@4:$ ;[+2@4:$ ;}^e3@4:$ ;_D4@4:$ ;צa)5@4:$ ; |e66@4:$ ;i67@4:$ ;$j%8@4:$ ;/k_9@4:$ ;vk9@4:$ ;@2m:@4:$ ;ho`;@4:$ ;1r<@4:$ ;F@u=@4:$ ;wka>@4:$ ;N yUL?@4:$ ; yE@@4:$ ;!{RA@4:$ ;~mB@4:$ ;kޏC@gET;;CзD@gET;;˃vE@gET;;4=G@gE;<9H@T=q=C]I@T=q={J@T=q=iK@T=q=񅾞L@T=q=BM@T=q=UN@T=q=2mO@T=q=>ZGP@T=q=@|DQ@T=q=wQ@T=q=rR@T=q=umQ3S@T=q=6=hBS@T=q=cbT@T=q=]T@T=q=4YlU@T=q=TdU@T=q=ͭPF\V@T=q= M)V@T=q=uI:W@T=q=6G;W@T=q=*DX@T=q=ACyX@T=q=JA~X@T=q=mALY@T=q=l@Y@T=q=$@!Z@T=q=> @mZ@T=q=K@Z@T=q=@e[@T=q=^A|[@T=q=A?\@T=q='@4:@N;kB}(@4:@N;'F)@4:@N;Il*@4:@N;L}+@4:@N;jlO_,@4:@N; R`:-@4:@N;wTT.@4:@N;}Vi/@4:@N;Wd/@4:@N;Y0@4:@N;m[_1@4:@N;h^m2@4:@N;dbT3@4:@N;yeS4@4:@N;Dfr5@4:@N;ht6@4:@N;\9kp7@4:@N;/mLm8@4:@N;ron(I9@4:@N;o:@4:@N;Dq ;@4:@N;s<@4:@N;v=@4:@N;zH=@4:@N;%v}Ω>@4:@N;~I?@4:@N;II@@4:@N; ZA@4:@N;珁B@4:@N; D@gET;E;)74E@gET;E;(+bF@gET;E;[` G@gE;JulS@Ω=Z=f3T@Ω=Z=p'aT@Ω=Z={[9U@Ω=Z=VSU@Ω=Z=*pR V@Ω=Z=uNV@Ω=Z= KVV@Ω=Z= H!\W@Ω=Z= EW@Ω=Z=D&X@Ω=Z=BX@Ω=Z=AsX@Ω=Z=KuAXY@Ω=Z=(bAY@Ω=Z=A'Z@Ω=Z=BZ@Ω=Z=B]Z@Ω=Z= Ce[@Ω=Z=t|D[@Ω=Z=5zE=\@Ω=Z= F\@Ω=Z=7Gw]@Ω=Z=ԻH,]@Ω=Z=$H?==[?==n޸j?==^Ӽ }?==7?=={[B?==n?==?==V-Z?==|:-?==kH ?==U]?==c-?==Jp ?==6~O?==)ǜ?==닽p?==h 6?==?==Y?==o7?==/I?==t?gET;\;2XQ?gET;\;f?gET;\; n?4:\;@/̘?4:\;:?4:\;IgB?4:\;ý ^?4:\;̽?4:\;fԽ?4:\;ڽ?4:\;4޽=?4:\;EZ?4:\;⽍~?4:\;潺/@4:\;Q.'@4:\;Mػ@4:\;Ɖ@4:\;ェ}@4:\;Á@4:\;8v@4:\;k}@4:\;Z/@4:\;(@4:\;r)Y @4:\;cS% @4:\; @4:\;H @4:\;ge @4:\;@4:\;@4:\; @4:\;R @4:\;@4:\;=J@4:\;lצ@4:\;@4:\;@4:\;@4:\;{%@4:\;[@4:\;@4:\; @4:\;S+@4:\;@4:\;i@4:\;j"@4:\; $|@4:\;B'G @4:\;T+!@4:\;N/"@4:\;2f#@4:\;6_^$@4:\;@9<%@4:\;@4:\;Ț ?@4:\;\ʁ-@@4:\;{/A@4:\;vvQB@4:\;ǃkC@4:\;_nD@4:\;E@4:\;;S?F@4:\;{6H@gET;\;!WWI@gE;\<ъjJ@gE;\<^؊K@gE;\$0P@==>vmQ@==}+R@==nwbR@==)qzS@==jo T@==dT@==>^ U@==3Y|U@==7TU@==>OrSV@==LV@==HW@==YFxW@==`uDW@== C8X@==CWBԚX@== BX@==-BaY@==HBuY@==gCM.Z@==cD_Z@==.EZ@==FUi[@==1BH[@==9I>\@==8K\@==Lw]@==MN]@==O]@==7?;= =wg?;= =b?;= =++x?;= =լQ?;= =iR?;= =J?gET;xԘ;?gET;xԘ;1_X?gET;xԘ;AJ?4:x;h]ýSZ?4:x;Jýx?4:x;<½s?4:x;N{ʽo?4:x;׽e?4:x;+E?4:x;sd(b?4:x;罬p?4:x;!q?4:x;qv?4:x;J @4:x;631@4:x; @4:x;@4:x;I@4:x;H)@4:x;v@4:x;] p@4:x;C@4:x;mG@4:x;k @4:x;

->ǀt?GA>V> ?pm?.>HZ?&?9C? '?=sh=C?uO? >/=J?d?̌>A`>D??=V>s>??d;=%>&6?K?">>8?]?P>>&5??η>z4?-C4?,}?ȶ>>+?V@> ף>}$?sc @>G>V$?M@FS?%>Wxo?;@-@@io?t@K@d;?4?^@?{?dX%?}7@C@+@>8g,@x?ff?t?;`@>{.>T?Y4g@z>T=%#?Ws@u>>}?}@w=>>z@}=Ƌ>g>m@Q8=V-?=>*t@ +>o?>K͚@m=>W>>@P=L7>I>+@O=xi=6Ȥ> @jt>v=2wm>@>P>=@M>j<>@B`>k>}@$&?n?C@DL?y?TA @n>>)P*Ƽ@}? @?U.@?/ݔ?X7˾@8?V-?b1[@;O>َ>@8mż@G>η>?@>J >܀Or@z>^>U^h@̌>V>}i"@jt>h ?z~@%>R>+@R>b>8'@Nb>9>ʑ@Ga>`P=<@)>Ga>w@R>z>U$@}>sh>qV@A ?? @>Nb?R'`@>q?|a )@?v~?O;@~ ??SUB_NAMECAnorth PARENT NONE CREATED 95-06-30UPDATED 95-07-05S_LAT r AN_LAT eAE_LONG IXiԫAW_LONG ˕ALAT_INC UUUUU@LONG_INC{ͷ@GS_COUNT!>{= M;=J >$= T1= 0>&>PJ>P>x>~W~>@>'>ྩu>N>M>R;O>j<>;S>hЗNb>L>y>Ay&>(\>?nL>j<>O?}m> >>R$?>*>1ts??>$F&1?@]?NOm?Η?qF?3?IL?hm?Ek?"G>%?i?yz>?Zo?Fο/$>;ߏ>v?/T=}??|?ے=>?hNR>>?5? fff>(\>ރ?j0M\>C>R?B=>(>Ynq? ?%?g?<jt>|_?j?@L7>Nb>'f}?]> >B`?}?>>?]???J ? Y?X?@r0@\wS??@=&1>nK?M?Z>r>L7I?F?Z>/>??)" @}= +>7?@E=Q=U?6@"?z> ?d;W@???Di@z@{@] ?l}@^>5^>>@B`=n>9>j@/<=z>R@L=w>#>eǪ@\=x=㈅>~@O?d;/@Ӽ>@?F? 4@4@r@w0@`?n2?o$ü@+>>9>N@C>'>h@>ʡ>u@v=-=V,@">@>6͏iW@sh>D=@@!r>(\>!壿#@n2?S?٫ގ@9(?>'{N=> =%J>P>ݘ>7>p=>*d>&y>= W>&ߌ>%Sc>-2>vl>bX94>G>e>@T%>Zd>:>Ra`>>l>{1\?>>~sh1?M"?>^eS#??fN>W`h>?P?Ņ?V.?;,?"7(>?]M?m??-|?[Yl?9(?@?T?o9>1>?p%)\>Sc>?Yn'>>xч?U!>ˡ>J?q=>L>?^?5?jT?5?D4D ?y?!?Q%?D?\x?-'P=B`=Cw? #==Dw?񵼇=㥛=u?O]>V>33>s?)?Z>$>lb~AX9AR~j?>?=-= f??j==ߦ_??=G>R?@=Т>r3L?!@==2?:@F>`P>%?QN@!>o>?M@H@M@>/j@n>5^?w ? @=o>>@ ף<'=>@@C>,?al>f@O>L7i?6>8@R>?+?!v>@?O?4>@ ?/>0@1?I>XΥ@5^:>>(K@>>F>x@ #?o>[ @j<>sh>Ԃw@\>lg>7q@(>E=B@I >D=Grn@o>xi="0@?yF?=`Yjt>-2>>\ >"[>`U>>\B>a>z;O>j<>Ǹ>qv>>k>7q>H/>t>D>|> >W!>38?%?b>Ԍ5?"?z>*+?@ ?QfV?y@S'?U0->#y>:?LOʡ>|>b?Sc?>u?|? ? h?/V?@we? c?l???4K FS?>??O ׃?w>='?Qm=7A>=,?GU;ߏ>V>f?"b?M?M?oSC?B`??n>>ޓ?ԽB`%? ?}?!?(?L?'=~??-`¾)\=E=2Ʉ?GY=-=4?0>`=Q=\?&? =~j>bJ?_Az?=9H>ʉ~??)\= ף=z??D=v=\ws??L7=#y>i?O@L=\=c?&@R>;O>P?:@H>$> E?zN@?D?ɂ?z?@??>?e@?M@h?J?e@ҍ?n2?!?ྕ@'1>q=>?rܞ@T%>ף>>t@>5?>ܫ@>>C>@k>ʡ>r3<> @>hm>u@Om?'1>hӾms@xi>#y=@g~@\B>u=f#,+@'1>rh>@@+>5^=|X@b>>oy@ ??<@sh='=@>E6>q@=㥛= >>F> a>£;O>j<>>ɫv>>k>z>>w>>XH>j>>;j4?r(?~5>Zd?d;?g>Á5^>@f ?hV>+?%?µ>fff>n8?R&>R>O?Y>>;6Z?9֐P>$>e?i7?G>]x?Duҍ>>?_Y>?'f?.s@?o?4h??!2?!?Z#9?>:?Ŀx>xi?i???!?Lc|>X?Ŝ?'d;?u0@Š?% ?5^?ݟ?} >"?9?- A?~?L?Ͻ&1>{??FҾ= =L7=xE?봽=X9=ې?g >C=)\=?ٱ!?>>?{w?9H=x=>??l=µ>?%z?#=C >(?K@X9==?@= =rh>)u?>-@B`e=T%> j?3E@ =7A>b?[B\@= W>G=R ?[@??S?E@ף?D,?HB?K@v=>=?˛@=w=x-?(I@C >>E*?}y@+?5^?x>@G?\?y]>'@=w>T>@ ף>'1> @>=V@x>R>ÞU@Ck?m>#@>$>u'P@#9?7>M7@9H?>V+Cd@V?1 ?6}@㥛>/>xz,H@Zd;>7?Dݓvl@̌>9> o>q v>>k>a>J>w>>?sh>u>v>?)?>~+?ˡ?>>&>E?JA?$>>;%?^>> =?zҍ>5^> N?Dl>#۹>_?.}>z>t?>&?? d;>?@M?߉>Т>?~;o;?fn>$>y??N>??by>j?!)>ʡ=4?1B33?t@}??޷ ??5.@z6?j?uH@ƿ?َF3?@ ??oR33?Q??@徨 ?? 8?#-U>&?K@p?ˡ>;?Lq?1>k>ܜ?|P>O >ƚ?R>=n>J$?%?sh>=!?S"?h==R ??> >#?%?l=x=/? @u=I >=?ף"@w=9=?ǀ8@B`e=/]=?+O@o>I >#u?#Je@;O>X9>FJ? Kv@E?I?0g?#@+>->Z?@333>w>8R?iƠ@D>7A>D?Օ@o>)\>>6?@C =Q8>?Z*@ ?1,? >Tt@>"?>4@333>Nb>g=C@7?R>tͽH@NbP?b?c)1@= w?Q8>о!@y&>y&>&@Zd??j@p>n>+)@X>rh>RaTJ@I?'1(?]3,@h>G>&&An>1 ?>>?> >)?5??ج>Xw>D?sh>ݘb>>?t>F>>?>Ը>-8?#y>L7>J{K?87>R>S\]?uYC>> An?C>+>;~?^9>>?@Ƌ>r>?!ff>>[|? /?S>k? @l??o|9H?g?0?sYM>?K?ED(?Z$?ؠ?. l? c>o?!?s?sh1@y? $׿>Ԩ?z?S{.?w@ke?HmlG?V%@V?5cV>~?^?xt=X94=隱?#O=hm=n?d}x>d;=]P? $== W>!>%u?YL>T%>>?N(,?v>Zd>?]m? ?VN??C?\=m=С? ?L==D?!@`P==?k)@==? @@Ga=B`e=0?4V@P>=\?p@>>?ɫ@n>\=?@S>J>t?E@k>v>*tf?פ@=V>Z?T@j>\>R,O?@">5^?$?@C+?KW?>r3@V-?d;_?>@X9>?g>6@|_??X>^@C>T>cz½H@u?d;_>&d@z>(>05$@}= ף=LG @>sh=L;)?@+>5^=W*@Т>>vAn>G>ҁA >o>>I >'1?F>v P>1>%?\>η>5?C>x>&+?e6t>?5>j??>l>&Q?Nb>㥛>Ia?\ҍ>/>"n?~>Dl>U|?#k>fff>?wD>>A}?q=S>ʡ=ﬕ?#/`>F?㥋???F>#>?/aףP?Hz??Ko?Q>?f:??&Q??ߵ?LZ?? $?g )\>w?a÷?|>ˡ?B?A`>{>ޓ?Ŀ= W>>>?0/q= >>bg?"n>q= >??M>>!?p=C>ff>?>+>B`=a7? S?=w={?o?>T=}г??=t=?j@X94=w=d?@L== =?b2@=>?-I@5^=E=?&`@ʡ=#y=~t?Yu@jt>!>]?N@9>T=6?@\B>/$>q?]@>w>rp?O@%> >]?g@?j?f ?$E@ˡ?S? ?@j@";?$F?%;>@=o>>_F@Т>>{>j@>>g,=0@j|?B`>S0@>E6>ɾ@E=#y=, @̌>=7=Ay>N>aTZA +>O >ZgA"?#y>*ty AK7>'1>>sh>> ? 9>k>T?N+>Z>3-?nX9>E=C>?o>O=_P?rmo>O=bJd?o>O=t?U#=)\=X?H#=sh=|?QF=w=v?XŹ>q= >?x?w>֋?r`P>$?d?.ŗ>33? l?L(>Ga>O;?->sh>C?GZjx>??Rz>;ߏ>h?ۿ>'1?m??0K>O??:>d;_?(?09=L7>?c)\=ʡ=*?{k-=-=O??ֿu>/?}?/?5>>?c6t>`>~?>J ??=t>q= >.?#> +>>,?]?&1>=?A?x= ף=z?p?{=F=??@E=t>?:;!@=%>:?:@==z?S@t==?W!k@=C=?y@㥛=o==?t @l>'=?@P>#=)y?Ȣ@sh=R>?I׮@+>+>`Ȃ?RD@{.>Z>#o?V@w>> I?{@N?A?z%? @?? ?;@L7>w>o>H@ff>J >|~>f@x?>0=@9?Y>9'@?x ? @h ?%> A>L7 ?,Au>~>EGAS=>[@{AZ>ˡ>dXeA>= ?Xo>O=A"?%/o>O=6? #=)\=I?ζ#=)\=6Y[?NR>j=om?R>j=5?QR>j=fچ?)ˡ>=?Ť>I >ܓ?sh>{.>D?.VVM?>3ܜ?b۰j\?|>iW?-(>P6?V}@>?5^>?tT??5>??]>?+6?? II??L?=Χ?Q?y?~9>?1?r4$>~>?^d;=!> P?xP=F=>?׿Q>= F?>/]>?E/K$?E6>`?fo>>? \=y?َ>?x?5^:>rh>?At?D>=?6?u>X94>\?w?{==:?@^I>N>u?)@> >?,D@E=K>?VH]@9=>Ҷ?yu@= =j=i?Ѕ@/]>C =?[Α@̌>N>ޓ?=@O=o=5?3P@)\=+>d]?U@7Í?@=O >(?@R??mg?e@ٮ??,@?@= ?G?^??@K>7?6>^@k?Il?>@#۩?Z? >>@Nbp?W?}.A-=?+>%AQX?p>&^A>> @UA?E?~:6Y AS>m;?;TD(AL>y>:eAAZ?ˡ>؁+?&R>j=@?R>j=ZS?R>j=kc? +>=Bu?q=>=?Ƌ>$>2Z?@O>$>>?_>>A?'1>-2>?/{>O>۪?>5^>o?|?$?~?tFZd;?q??|J? ??V  ?= w?먾?% C?;߯?o/? ?'1?'?]_F?'1??TK>~j? ?3+>#?Л?Z1(\>…?8?8L=t=D?X+=='?M-1=B`=q?XοF>>?F+>+>\r?BxDjt>E= ?e5^:>=?d=ףp>w>c?†?%>+=û?0t?o>Y>0?z?{= +>?[?>z>i?@#?Z> ?(a4@P>w> F?O@+>q= >S?{g@@=+=?t^@w=>¿?ߋ@Т>= W>?䃖@ >@?6?@&1>+>۰?і@$>S> {?;@=+=Q?O@D==8?0@?F>{?e@·?w??~Y?+@I,?J b?8?@u>h>C?2@I>Т>F>Ajt>$>k>0A?A?I=5 Ash?&Q?oE AS>>ᾳRA>v>>ÞuAK> ?6Aʡ>> IA>-]?`2AA`>X9?N F?v^>=(Y?O>J >nk?i)\>m=M}?͞ O>$><1?^>n>Ԃ?E\>P>?7>Ga>/Q?>>p?v>'1>O?v>E?0?5^> ?t?=~ʡ>u?F?M)\>-?*?< ?"{?h? ?C+??7Ø+?|??}?h$?>C?'my??G?R'>=Ҍ?x:>t??cEJ>H?L?_;K>J>?"hm=q>?WF= ?b?^>Ƌ?K?̗`>^>X??=Q8=? =F=?>)\=j=5 ??I >{.>ӟ?sz?~>\>??>K>a??1 ?x>n?@ˡ>n??X7@">>??U@=m=N(?bp@hm=G=YL?@j=$>?@fff>>k+?@Q=>l!?@=j=?Ի@ ף=P>ڱ?G=@T%>=P?@z>P>?Z@>/=?H@$>&1>]h?<@=G=LQ?AV>ˡE>A}+?wAV>ffF?>X AMB?O-?6>A??mʕ=A ?E6>`<#A'1>J>cA~>/>jjA5^>(>MJ)tA)\>Ը>CsMҘA?}?u?;Aq>T>_?!̌>=s?^>C >?\>P>>?>L>4? >Mb>G?{V>>Ԩ?j>> ??|??I ??f?~WV>#?L7?!Zd>r?ٙ?o>?-?$Dl> +?eS?M??b?Zح ?u?x?~/@??y?= w? ?wD?>?xd?!>1?Q}?>? ?ΪIY>ף0??0/:5^??&?;?A??*W>C>??K'>6?bJ@5?o?)@|->~?%u@G^F=T>0@4w>=@>]@~&?=>@@t$?u=> c@_?M>o>=@S@p?+6?*@(;@9(?`0?g @\@A?>_^?k@Mb???@>>.?@㥛=d;>2?*@%>`p??B@ˡ>|??l@!r>jT??|@">shq??@µ>'1H?4?e@>sh1??)y@)\>$>*?Q@h>I >}"?A/>%>>j?A~>V>:?A7?u>?RAR?)\>ȵ>Ap}?+?k(=A>%> $Av==A!A=C =s$A9=v=г 0ASc>Z?>%4AD?;ߏ?'tA+>C>Uz?́&\>P>F?WC!>L>?k+>>?p>j>?'&>/>(?k &>u?8J?m )\?6?'?m>V-??B`e>??Zd>\"?LO?L^>F3??G>^)?Ƨ?v>V-? ?8;O?jD?h?=~H? ?=? ͊?= ?@_\?|??s@liM?T?@Pף?" @@71J ?X?6 @t?R^? @i?|??=a@y̨Z>&? @\L?S? @\?OM? ׃?8@?㥋?V@ @z>\B?V@@ >/>S>h @?>fff>@@~?C==)@X?I >O=Ӽ @u!@1?ףp?w@[U@>I ?@&Sw@Zd?+>@@̴@K>'1?k?Z@>M?\?C@Q8>!2?~?R@bX>F>0?&@n>>K?@Nb>w>?@T%>= =?@ +>v=? Aҍ>m{>v?Ah=>?, AI ?`?Qړ?^ANb>7>π?2Aw='=If?A/AT?^I?P>Ar> >NEJ>_$AV->/>W=:(A=+=m{+AX94=hm=nnLN0Ao<1,=Ʈ!4A/]=@= N,A>?!L'A+>?5> ?M,َ>!>e?'ff>>8?">^ ?¬?m>?k}?gn?G?b?qX9>/?[?n>?S?d Hz>-?O@?{+>E6?:?-R>%??= > ??˹u>D,?l?Pj??v>Y?.9Il?x>?<?(> @E??O@x9>C?S @XqF>w??@AbSc?v@Qf@JA-=Nb>h@;&!>/ݤ>5@ /]>`0?@g>33?7@~$=ˡ%?}??E@#g ?J ?8?!@'k?>sh>q @V?Z$?V@=,@k`>T>E??@X1?n>$?@CŐ?5^=m=@[?{>n>'@@P7??@4@p>5^z?4 @U@(>A`?@ƛ@{>?A+@i@D>X9>4?Nb@K7>+>/?;@";??.?N@H>V>K?}y@u>>Wx?8@B`e>\>?1AV??(?6vAQ8>Ƌ>9?}A~j>)\>?d/A=X9=Y?Aj<>"=?^"AF=u>?y'A>Dl>T*?$Ash?R?b>c)AW?%!?zp>-A ף>>H>4AR>">=8A=L7=㚽(?GZ?4->??1?R>?H?R-D ?A@??H3*r>(??$hm>'?xE?(Ƌ>E6?Á?>`0??+> ?0?P>Zd??η> ?BC?N(M"?!>?hM?>u?eG?}>2r@gI ?Dl>@?Q8>5 @<;ߏ>n> @הfff>m{>Ih@7Ġ>\>@pBsb>L7 ?@i\=V>R@> 0>G?,}@\Z%Z>x>K@p>(}?u?@4m>= w?ˡ@K>5?t?it#@%uR?(?n2?k%@(?&?e@sK@>(>y?%@0'?T=5^=5@#g?=S==@}?5>k@@>v>>W@4@/=X9>z@Pk@> ?l!@J@u>l?|~ @V@G>>@`v@Ƌ>V>X@@>1,>k+?@+> >?-x@o>`P>.?O@K>'1>;?\8@y>A?0?&6Aq>?l!?W`A>?x?A>>V?$AP>>~W?*AˡE>v>>C?q0A->d;_>?6A= +>C?:Ad;??Q6?=Aj?6?>ep?Ab>v>l@>DAb>Z>5= KA5^==`nnOAX9=t=?GSAu<1,=LT`XAjj4?%]?*?v?5#y>{.?w?Q1/~>-?a?(>Z$?n?"P>Zd? ?(!>{?f?6>B`>>?^ ? >}?f?!r> ?!?Zd>?@ 1 ?Dl>X@l>9H>> @:X>E6>@?5^>-2>@ܝ9H>}?5>(@1!>333> @=Nb>g@VO=1=yu@N`/$>B`=it@O@R>ʡ=@Ϡ?5>'>@:̌>= @> ?V!@){?B`E?5 %@#Y\?Ђ?V,@?n?\@&@T>l?j?#@Gd>D>jt>g"@UM(?)\>D>_{"@P?">'1>~t @Z?=o>@TR@>Zd>{ @C5@j>l> @B`W@ ?n>@@~>(?@Ou@>F?Է@H@T>ʡ>)@6@#9?l?9@@ ?B`>@@V?9?@m@'1> ??_ A$>'1>d;?,AC >xi>?{AL>l>N?"A7A>T>Ih?~*A>`>?|80AR>>@0?ܝ9AbX>Zd>?^tAA>9H>*R?sHAI >G>'?~oOA`=E6>+?UA㥋?>߉)?3 WA)\?`0?K~>XAVN? >VH="]A>ˡE>4$dA9=w=&p+S\hA-?5?B+>d;?? ;Ġ> ?-?W[4->?|?-w>R>?%>p> ?M!p?'1>?jQ?lg>O?jh ?lg>U@NF>xi>Y@{j>J> @XHz>K7>@ ?5^>-2>a@^I>">@*/$>R>&@q5^=L7 >@uv =w=P"@e=L7={#@_rh>Y= $@lh ?=h%@8J>q= >}$@(x>=wJ%@%;ߏ>w>$@JӿV?h ?0!@O?->U0(@hZd?Ck?.@ K?+?S-@g >X>+@t>>Т>5F+@1|4?d;>I>l+@$?;>`>&@"?  ??|%@T5/@u??X&@;@?ʡ>E%@F|@9>ף?&!@nQ@n?C3@@@?j>+@@/>?1@l!@w>'1?B@@>\>@&A?#y> @i AL7>x>U @KHA`>M>P@A>>"?"ADl>B`e>?(D+A;O>jt>2?3AR>C>?=AƋ>33>K?6DArh>>:?*FLA>'1>Ÿ?}SA!>>Y?[A>\B>!?cAu>Q>b?#kAX9>(\>R,?qA/>`P>9?*sA?)?X>^vAv??'6yA>p=>>?EP->?0? Hd;>>?AM>5^>w?_:ff?q=>?s3K?"[>T?=,%?xi>?%%{>rh>y#@&>K>@{>T%>W @F/]>t>%@ "[>n>g@/> #>@>>_ @5$='1>W"@/=5^=iW%@V>=(@(~L7>R>)@>%>v>>X,@>7>/@Aer>>:4@iLB`>x>9@A()\>:? 8@"l ף?Fs>£3@]ȿ+g?/$>.@xnz?>3@&ˡ%?!>1@A}>>|>i0@*?#y=d;=( 0@?Q>j?B 1@4@A>p?q1@/@G=T>]/@N@t>Nb>3m-@Ci@>k?5,@@>s?")@%@">";?%@}@|?>B`>"@+M@&1>y>u@@>>H@@j>{>@!A?X9>@EA+?33>g @8A&? >q@_Al'?> @%A)\?>@p/A>>wg@C:A >>1?CAV>fff>e?JA^>K7>?RA\>&1>?IKZA"[>>*:? aA"[>)\>$?iA>+>4?l>rAj>>4K?1yAV>+> ?'AV>'>/?:cA`>Q8>|f?A·A>Q8>9H?XAv>S>SUB_NAMECAarcticPARENT NONE CREATED 95-06-30UPDATED S_LAT AN_LAT ]AE_LONG AW_LONG ",4ALAT_INC @LONG_INC,4r@GS_COUNT"?]U?Fs>?UYH|>Sc>7?:D>`P>?@(,/]>t>_@= +>w>?@,+'1>P>2&@ajt>N>w.@f>\>`<5@K">hm>&p;@$@> +>k@@HF=Q8>X9@@w>K>@@ݩ?>Q:@-`?/>->X6@4?->j4?UM8@8@Zd;>lg>4@<@η>333>60@@$>@>H,@@)\>h-?("@Ԛ@O ?1>@AZ>)\>u@$A">G>@84A'1?->w?TNAR^?-2?Dn?jcA/=?V??vA/]>'1>O?~Axi>)\>R?dXA1>I >̗?mA)\>)\>?d&>K>H?jWT>->)@ٙI}?5>>/@\:J>rh>p@4)>\>I%@ Q>^>n/@R>l>q7@ ch>n>Y>@/>Fs>ΪC@KL7>m{>G@ޓi%!?l?EB@uף0?O>,C@h9?T>:@aq`?3@(?d?@uY?5??ZA@ 8@Dl>y>@M=@佈@X94>o>o5@r@$?B`e>j3@@~ ?>,@:;A?ˡE>5'@A>K>@j/A/>t>@BA|?->:#@TAZ$?ff>S??ziA>x>)?Azt?F3?s?DAq?O-?E?BaAZD???3A?>Nb?u>>]@g;>ף>3 @UI>>@pD>%> @ 3w>q=>)@i!9>q=>z3@6 >>:@{k!>L7>A@c(Zd>$>?H@h>|>+jL@Uso?$&?OB@Do#@q= ?h?D@"eB`?>@R> .N@Z/@Sc>v>L@X@33?OM?3P@@J ?j@F@0 @@@n@@l@NbP?/>Y@@؍Ahm?K?3@I(A?P?z6%@`+:AX?X>@MA>^>@LeAˡ>Y>O@7zA+>Mb>\?3mA>/]>{?\ÑAF?S>A?;*Ahm?$??IA?6? ?rT>G?I@u>oC?@^f>I ?WC@uU>I ?9&@FB9>>'1@."[>>};@t~j>\>C@+>1>/K@\={.>1R@uʡ>K>nS@9?T>"L@f.? 0?=IP@ts?%?U@>M??"W@kH@&1?x?Q@w@?@a@1'A S@@q@D2AyV@Z@>i@&Az@|@`W@J%Av?y?XA@ke>Au?o?6@toMAG>u>n4,@M2_Ash>-> #@_uAĠ>N>t@ AR>N>D @@A>= W>P@t/Au>N> h?զA5^>;O>:u?IA^>L>d?`/>?vl @n>?0@z>Il?H%@Ei >shQ?(0@U >Q?.;@yAF>V.? E@*&>>M@?>C>VT@33>I>OZ@Ӈ??_[@ +?)\/?l^@>>+?$ b@TƟ>`P?^@d?>?$^@K@-2?&?£Y@D@%?`?g@ @?R?Ttn@KA ?b?n@l2A8@?d@>A?Nb?Z@#>QAr(?w?M@tfA ? P?hA@exA(>%!?85@AC> >*@IAJ>G> @ћAĠ>Q>U@cA>R>@1A>;O> ?A)\>Q>Υ@d9??V@Y9??P @*9??w-@`0vB`>̼?9@a>Z?2ZE@]Mx>{?hO@1>C?:]X@gU;?v?^@BJ ??}b@Q?sh1?_e@sJ B??if@9M"?v?Hi@*Wfff>Q>j@$??>@h@@7?M>_@<@Z?+?=V@@?^I>ûr@A? k?fv@04A= ??5{v@TQA?v?k@TocA?E6?Sc@ףvA%!?9(?W@mA?O?K@A>oC??@L1Az>)?TW2@c.A>j>0'@upAG>>?@$Aَ>d;_>X @NA+>R>l @}Ѣ?j\? @>+G?)@v>G?07@v>H?CD@ j>J?LP@ Q->ףP?_@9j<>"?g@9(? ד?h@ ??- l@vG?/?p|o@xb)\/?T?tp@F>`0?r@Ŭ$&?VN?p@/?O?\?m@ +@?G!?en@@yf?/ݤ?"m@@33?&?s@ Ash?O?|@33Aw?!R?i@tjXAL7?S?~@vAJ ??5>?S"y@A/>;?C9q@A?p=?(ad@wA'?L7I?hY@ƄA?;O?_FM@Ar>Q??@A>;/?\Z1@}A > ?6$@wAV>x>'@n33>q=>t$'@ω>Q>y]5@+->H>~B@\?> L@?KW?[@2rl?>}k@وNS?Zd?T5o@Gf2\b??nr@K'1h??Dv@{.?H?z@vqףp?p?|@dL7?sh?ʦ|@G C ?'?#y@N?)\o?}??z}@V7@R?Z?v@@Q>Q?)@2@>GA?f}@.Aff> P?߉}@4A&q?1L?@߲XA7?C?ԁ@A?C?N@/At?MB?@¡AH?A@?^K~@A33>D?s@ݾAA ? P?!g@JA?O?[@QA?;O??WO@-lAˡ?&Q?IA@vA)\>VN?o#@5$j?w>2@"OB`?E6> A@h?Q>mN@M!ˡ?K>yY@ c/?;ߏ>n]@ʬQ@{?E*n@g|?9(?cv@Xƫ?n2?U|@3$??A@ ?+6?2@C$f??"Ä@ڃL7I?m?@v(\?x? @C; >Ck?(@ @Nb>j\?@R @m>J b?@c@">d?]3@;dA/>PW?@9AT>`p?`@_Aff>Vm?$@ACk?O?@Z{A'1?OM?k@8A?GA?&@l[A?jD?_Ax@A}??uX?Dj@A?5^Z?]@GB?O?k4@%??5^>%B@O?Nb>mP@XJh?>[]@?Ը>(Dh@K?>-`r@ӵB`?H>|@}ף??R@{L7?t3?@fˡE?X94?/@=1?|??@d;?H:?+M@R,? K?x@̿>?5^?@݄?C>$f?@o?@h@> k?z@AV>Zd?@@A㥛>Il?U@lkA">$f?֐@ZRAT>ףp?+@AT>ףp? @3AT>l?0@cAC?{N?ކ@ AJ ?^I?W@wA|??5>?@[Bx?+6?'@4 BΗ?F?#{@”B?OM?SUB_NAMEONwinsorPARENT CAeast CREATED 95-06-30UPDATED 95-07-05S_LAT kAN_LAT AE_LONG pAW_LONG FALAT_INC >@LONG_INC>@GS_COUNT(. >#Ծ ף]Ӿ ף<`P= >'Ӿ ף<`P= >Ҿ1E,Ҿ1<9H=t!>Ѿ1<9H=O!>0Ѿ1-о1<@=O!>z5оX9<j<=f!>ȷϾX9<j<=~!>:ϾX9RξX96ξX9< 0=L!>̴;j< 0='!> 3;j<1,=!>F̾j<'= ">/̾j< #=%">˾j;ʾ<=Hm">x(ʾȾEȾ<)\=#>Ǿ<)\=N%#>Ǿ<)\=C#>^ƾxž<+=#>wľ<+=C#>ľB`iľ< #=*">$ľo=X94=.">þC =@=!>þt=`P=Wv!>UþP=Ga=!>þw=hm=˽ >¾'=}=a >¾ 0==> >B¾Q8=O=>)j<=sh=>Kj<==J>m7@==>@=-=>D=w=W>,9H= ף=>ӿ9H== >{L=1=c>:"L= =>\ɾ`P=X9={>L=-=H>L=-=b>`9H= =C>=9H= =%> D={=|>+@=1=H>Nս@=1=>pj<==>j<==>lQ8==v>ePX94==O>>4 0==> 0==>v1,==p>&߼'==[>¼ #=T=1#>w=T=>7w=T=>m=T=Sy>QP=T=x|>P==>P==Â>,P==>]P== >XP=1=3>&P={=X>P={=}>"úP= =>SP= =Ș>_P=-=>MM'=\=}>;X94=`=X>(@=G=3>`P== >l/]=%>>4hm='1>Â>߹#y=Nb>>͹=u>x|>C=w>Sy>Tt='>>0C=w>%X> o=P>>~#y=V>6>pxi=$>a>bY=m=>~T9H==4>ZFQ8="=>781,=9=d>*=Q=o>C == >dC =T=L >2+= ף=Q >+= ף= >u>+=ʡ=!>+=w=2=!>Ϫo=-=}y!>Yo=㥛=ȵ!>`o=㥛=!><=^.">=򧾶!o==f!>nQ+=t=!>C =t=ܞ >)\=sh=: >7ࣾt=)\=>P=O=;s>h?=C=Z>ow=C=z> #=L7=G>1Ο'=+=`X> #=%='i>"S=u=y>P=xi=>؜t=/]=|>)\=`P=C>]+=D= >{o=Q8=>ᙾ<1,=>l$hfB`h%YFҖ<=>fKo=w=>ĕC =w=>=)\= #=>ȶt='=>/P=1,=> =1,=f>)"w= 0=>:t=1,=>LƑP= #=?>]t=w=`>nj)\=P=,>)\=t=>C =C =H>`+=+=>o=<<) >V^#jʼno=B`!o=B`< >p}+=B`< >4ه+=B`<; >4C =B`< >)\=B`< >셾)\=B`<!>"P)\=B`<#1!>ij)\=B`eC =B`{C =B`<!>ނC =B`JBC =B`쥁C =B` +=B`<.">/m+=B`+=B`< >\Ծ ף<Y=y > Ӿ ףAӾ ףӾ ף<9H=%!>Ҿ1M2Ҿ1ѾEѾX9SоX9оX9,ϾX9ξX9ξX9< 0=l">;X9< 0=@">\Z;X9< 0=y;">6;X9<'=%u">̾X9<'=p"> ̾X9<'=">du˾X9<'=">7˾Ynɾ"lȾǾsǾ/<)\=#>ƾ/<)\=6Y#>AHƾ/<)\=a#>Jž<+=^#>->ž<+=#>ľ<+=#>þ<+=ۧ#>þ/ Pþ/<ľ'=u=9(!>þX94=)\=> >þj<=sh=L >þj<=)\= >s¾Q8=O=S >EG¾Q8=O= >AX94=O=9 > X94=O=>V 0=C=n4 >(D 0=C={k > 0=C= >% 0=C= >k1,=C=H >=1,=C=Z >پ`P=-=[>`P=X9=>hy`P=X9=>\ɾ9H=X9=R>l>9H=X9=5 >D=-=(>3D=X9= >2wD=X9=>~RD= =>U@={=G >9bQ8={=x>KQ8==>Q8==>X94=T= >AQ8=T=fk>s 0=w=>5w=P=>8w=P=>t==> w==>㍼w==>kP=T=ܺ>'P=T=>ϻ)\= ף=>k`)\= ף= >t=T=)>C =w=t>C =w=>+=-=>=I+=w=>)C =ʡ=J>)\==>P=X9=>K'==D>j<="=G>=Y=>>#2o=>>TL7=w>(>.o=>n>X}=z>m>cq=V> K>/xi='1>F>Ga=o>>޶T=#= {>L==>+D=B`=8J>+0j<="=6>{IX94==>jX94== = >=5^=>)\==A >Ӈ+=ʡ=Q >o=-= >o=㥛=!>Ao=㥛=G!>Do==!> <= )">B`訾B`^KB`֨//lB`<%=}">ŤB`*hwh䠾1A+ ףY㥛jٞ)\=)\=E>.9C =t=>o=t=K>o=t=/>!A}c_*ƙho/B`B` B`wB`;䖾B` #=1,=>0 #=1,=>N #=1,=w>sC =<ę>擾C =<ę>RC =_+=<>'+=ko=/<,>VԐo=/ wQ1FhhRahϋh;hhB`NB`</ضB`</< >t=h<; >S)\=B`< >I)\=B`< >>")\=B`<9(!>Ҍ)\=B`<9(!>ބC =B`IC =B`<o!>C =B`C =B`Hm+=B`ׁ+=B`C+=B`<!>e+=B`<">)o=<' >Ծ ף<Y= >q Ծ ףӾ ףWӾ ף<9H=?!>zҾ ף<9H=pB!>czҾ1Ѿ1ѾоX9NbоX9ϾX9v7ϾX9ξX9.9ξX9< 0=@">£;X9< 0=cz">V;X9< 0=%u">̾X9<'=Ѯ">7T̾X9<'=">˾˾X9<'=">0˾ʾXVʾS"ɾȾ ȾǾ'Ǿ/<)\=V#>ƾ/<)\=#>;ž/<)\=#>Dž<+=k#>(ľ<+=#>$Eľ<+=#>þ<+=z#>_þ<<#>Sþ/<<ۧ#>&¾/</<> >þj<=sh=DQ >[þj<=)\=Q >X¾j<=)\=S >¾Q8=O= >Q8=O=K< >LX94=O= 7 > 0=C=1 > 0=C=n ># 0=C=' >Di 0=C= >྾1,=C= >R1,=C=2!>Ľ1,=C=al!>61,=C= >1,=)\=9>aL=-=:X>x9H=X9=>セ9H=X9=H>D=-=|> D=-=E>='D=X9=a>ۊ@={=/>y@={=Y>EQ8={=*>Q8==Y>:zQ8==%>oX94=T=>-C 0=ʡ=># 0=w=8>c=P=>滾w=P=>t==%X>C =O=U>GC =O=U>Uo=L7=o>Ǻo=L7=Z>~<+=U>0<+=x>rܹ<=%X>hh<%= >!o=㥛=>+B`<%=N>#h<=U>o)\==N>踾<)\=>C =㥛=`> m=1=>R 0==>ֺL=B`=J>g,L=G=U>ID==b>bj<==$>F|X94==ۊ>1,=j=> #=X9=\>j={=/>ӳP=T=l&>.精)\=w=o>J h >[<%=5{ >+K孾jX9</]=al!>0X9<Y=ȵ!>&pX9<Y=!>X9X9=aX9CŨX9<`P="> X9<`P=">sX9<`P=">LাX9<`P=#>ӥX9<9H='#>ڏ ף< #=">( j< #=8">1ӡ ףc ף>tt< ף;j\X9d̝1> ף ףE*㥛ٔt㥛8㥛ct^B`5o< #<9>uCo< #<>+o< #Mo< #<$ >bo< #5C =<>C =<@>#)\=< >wC =Z𒾖C =/B+=B`]+=B`<:X>o=B`]Fnɍh >|,hphhihҊB`B`</B`</<2!>F눾B`</< >l!)\=B`)\=B`E)\=B`< >AHC =B`<%!>$C =B`<"!>C =B`C =B`<!>Z؃+=B`E+=B`<|!>!+=B`+=B`< !>+=B`݀o=B`<">;<<!>Ծ ף</]=T5!>VԾ1<Y=%!>Ӿ ף>Ӿ ף Ӿ ף<9H=|!>%uҾ ף<9H=|!>^.Ҿ1Ѿ1eоX9оX9܀ϾX9!ξX9TξX9">;X9< 0=w">W;X9< 0=">P̾X9< 0=2">̾X9<'=">1̾X9<'=$#>r˾X9<'=">+5˾ʾGɾȾƾ/<)\=C#>Eƾ/<)\=#>ž<+=#>?:ž<+=$>"ľ<+= #>nþ<+=z#>*þ<<&#>þ<rP¾/<O0 þj<=)\=!Y >X¾Q8=O=. >*:¾Q8=O=K< >ŏX94=O= 7 >\ 0=C=p >. 0=C=n >9 0=C=' >Ϊ 0=C= >%1,=C=H >1,=C=T5!>1,=C=al!>x1,=C=o!>'=L7=, >RI1,=)\=e >)'=)\=L >"'=sh=M>]὾D=-=,>WD=-=>мD=-=0>G8D= => @={=q>g Q8=1=2>-Q8==od>Q8==2>yX94=T=+> 0=ʡ=S>E* #=㥛=>=P=v>$ѻt=t=>PSt==p>jC =O=>ﺾC =O=p>4o=L7=m>B<=N>:#<+=> <+=>%z<=>oB`<%=>gD/<#y=>s/<#y=>\B`<}=>EdB`"@o=sh=>'1C =㥛=)>_==>R'=j=E>M 0=\=x>e'=5^=>Nw=-=?>==>`t= ף= >ij)\=-=3m>ܲC =P=>3ıo=)\= >Q<#y=Xs >6jܭjX9</]=!>|DX9</]=!>X9<Y=">ѪX9('X9|X9i㨾X9<`P=">CX9<`P=>#> ף< #= v#>; ף< #=F#>b ף< #=#>:u\wtɢ ףw1 tiot< ף;!>̟t< ף;!Y >Oj穞X91* ףnn㥛䛾tUt,Ԛ㥛FtCC8o< #<>Yo< #<[>{o< #<[>Mgo< #ٖo< #< >Mo< #<> >co< #<| >F%oo:C)\=B`SC =h<|>%uC =hqɑ+=h<>(,+=h<u>Áo=hُ>!h'fhlόh:htB`</<!>HኾB`</<:!>{NB`</<"!>MB`</)\=B`])\=B`<n >S)\=B`<' >C =B`< >ʉC =B`< >C =B`aC =B`< >C =B`<%!>+=B`<2!>+=B`<2=!>䂾+=B`h?o=B`)o=B`o=B`ph վ ףmԾ1<Y=q!>QNԾ1<Y=?!>Ӿ ףҾ ףҾ ף<9H=ȵ!> )Ҿ ף<9H=g!>XѾ1Ѿ]оX9ϾX93ϾX9ξX9_ξX9#;X9< 0=p"> ;X9< 0=">̾X9<1,=}">HP̾X9<'=$#>,˾X9<'=t^#>&˾X9<'=$#>ʾiRʾȾ~Ⱦt$Ǿ/<)\=#>ƾ/<)\=#>ƾ<+=-#>ž<+=x $>9ľ<+=k#>Cľ<+=$>hþ<+=#>t^þ<ٙ¾/#¾/</<@">%L{¾Q8=O= >Q8=O=x > AX94=O=Xs > 0=C=e >B 0=C=Ƨ >W쿾 0=C= >y] 0=C=H >w־1,=C=T5!>H1,=C=o!>Z1,=C=q!>='=L7=*R!>e伾'=L7=c !>< #=+= >s'=)\= >μ'=sh= >-C'=sh=c > #=)\= > #=)\=3>Լ@= = >@={=6>sQ8=1=n>ܼQ8==>%XQ8==n>YLX94=T=G > 0=ʡ=x>e1,=w=$>O;=P=>wt=t=>xt=t=>?C =)\=>wC =O=ʦ>Yݺo=L7=>$bo=L7=F>5<=>M<+=E>DL<+=>PB`<}=>Ǹ/<#y=)>"l/<#y=9>Q/<#y=K>ɷ/<#y=x>qB`<%=s>t$h궾<+=]>Dno=)\=2>+==i>t+=P=֭>"C ==>d+==R>}o=)\=>Tm<}=%!>֭)j:X9</]=.!>A}X9<Y=0">ҪX9<Y=b">/X9!ͨB`e<=)"#>7ubX94 X94vTۤTPut뢾㥛titC< ף; >kC< ף;7 >X9g1ٝ ףtA㥛4㥛3㥛p%㥛1to< #bo< #<u>ۘC< #<>Lo< #<>o< #<>.o< #<>o< #<> ooC`tFCoYiuuMJC =<>o=<ػ>` Ȏ.hFh)hGB`</< >`B`</<%!>B`</<!>B`</< >B`</2)\=B`<9 >Y)\=B`=򇾖C =B` ^C =B`< >ʆC =B`< >77C =B`C =B`h ׃;j9j< #QX9TX9X93B`< ףDվ ף/վX9<Y=q!>Ծ1<Y=K!>Ծ1<Y=|!>9Ӿ ףUҾ ףrҾ ף<9H=t!>Ѿ ף<9H=!>Ѿ1ƧоX9ZоX9|ϾX92ξX9PξX9;X9< 0=p">S;X9< 0=}">̾X9<1,=g'#>>?̾X9<1,=)"#>C̾X9<'=t^#>&p˾X9<'= #>jʾX9<'=t^#>Лʾ&ɾȾoƾ/<)\=#>Cƾ/<)\=#> ž<+=:$>7ž<+=?$>4ľ<+=x $>þ<+=H#>þ<<:$>_¾Hm¾/</x<Lo </<">V</<4K">ÿ</ 0=C= > 0=C= >4 0=C= > 0=C=!>1,=C=7!>"1,=C=o!>D1,=C=o!>'=L7= !>񼾞'=L7=7!>_'=L7=pB!>7T #=+= >w #=O= >ǀ'=sh=c > K #=)\= > #=)\= >7 #=)\= >w=)\=>ҩ #=)\=>gQ8=1=>DQ8==>1Q8==6>eX94=T=\>ʻ 0=ʡ=P>仾 #=㥛=p>{=P=|,>Vt=t=J^>t=t=$>㺾C =)\=>hC =O=>[|o=L7=">o=L7=o>WϹ<=)>"T<=[>+޸<+=>B`<}= >>?/ַ/`/,/$/*/<#y=8J>mʵ/<#y=>7OB`<}=m>%̴B`<}=>;B`<}=E>aóht<+=ػ>)"N+==} >o*)\=-= >alt= ף=O!>.<=Ϡ!>6/<}=3">Kvo<1,=OX">Du< #=">㪾u>u<=?">]3B`e #it #즾X94RX94TF%T다B`eգCtLtŏC< ף;~!>>C< ף;x >Lo< ף; >ПX9@1c1$( ףh㥛㥛:z㥛㥛rt< #㚾t< #{NC< #o< #0*o< #񝘾o< #<>o< #<>C< #<>o< #<>go䕾Ca㥛HĔ㥛#㥛咾t^.oiB`eSDrD0GX94 X94 #9b # B`;t䋾B`</<@!>PSB`</O #@܈DdH{ F>:j< #tj< #<o!>ԂX9y;X90X9X9ۀ/<㥛<q!>~վ1վ1ԾX9<Y=K!>bJԾ1<Y=!>Ӿ1<Y=ȵ!> Ҿ ףYҾ ף1%Ҿ ף<9H=+">ŏѾ ף<9H=+">GѾ1ѾqZоX9ϾX9/ϾX9,ξX9ξX94;X9< 0=">;X9< 0=)"#>̾X9<1,=t^#>8˾X9<1,=6Y#>=˾X9<'=#>"˾X9<'=t^#>6ʾ{Nʾ=aɾȾǾ<)\=#>ƾ/<)\=P#>rƾ<+=$>ž<+=G=$>ľ<+=:$>>ľ<+=B$>zþ<+=$>v¾¾/</<$>"¾/</<%u">S[</<">UM</ </<">x</<7!>ww=xi=O >1 0=C=!>𢿾 0=C=!>V1,=C=7!> Ⱦ1,=C=q!>~:1,=C=?t!>'=L7=!>j0'=L7=7!>I׼'=L7=pB!>p #=+=w-!>!w=+=\ !>E* #=O= >[뻾'=O=I >e #=)\= >r #=)\=!>뺾 #=)\=F >fw=)\= >_ #=)\=>+5=O=o>U=C=>Һ=C=o>ź=L7==>ܺ1,=w=> #=㥛=1>$ѻt=t=h>Lt=t=/>(C =)\=c>C =)\=>o=L7=)>\o=L7=>湾<=>>,e<=Cs>渾<=n>B`<%=fk>zB`<#y=J^>[%>KYе F\派/v/gB`<}=>hj B`+=P=;6">C9=1=">=~/vj<}=\">fk㥛|Cu<'=">q=tt쨾tPt #~5X94sX94TeT B`eCCbC<;!>ۡC< ף;j >9(o<;{k >o< ף;> >X91 ף\㥛ٝ㥛< #S㥛lϜ㥛< #HP ף< #j㥛7tCCCC< #<3m>pC< #<`>ߗC< #WC̖C T㥛ޕj&S< ף<><13<j<ę>J{< ף瑾o<㥛<| >B`exEDX94㎾ #[B #B`;t<\ !>팾B`;t<:!>UB`;t˾B`;t<!>p%B`;t<Z!>Ɗ #M$7e$)y< #ㄾj< #5Aj*X9X9R~X9$X9]X9վ1B`վX9Ծ1hԾX9<Y=!> Ӿ1<Y=ȵ!>"7Ӿ ףҾ ףnҾ ף<9H= )">+Ѿ ף<9H=ke">pBѾ ף<9H=ke">о1о4Ͼ1wϾX9CξX9'NξX9;X9O;X9< 0=)"#> ̾X9<1,=[#><̾X9<1,=6Y#>̾X9<'=#>7l˾X9<'=#>ʾX9<'=#>ʾuʾ8ɾǾm9Ǿ[ƾ<)\=P#>^ƾ<+=]#>ž<+=:$>3ž<+=Tt$>Eľ<+=G=$>þ<+=]#>Eþ¾k¾/</sh1<<2">Kиl</<">| </<}">e¿</<">/</<9">vOB`<w=B`e=Z!>R 0=C=2=!>1,=C=q!>hy1,=C=?t!>'=L7=!>To'=L7=X!>Ἶ'=L7=!> #=L7=w-!>^w=+=a!>tһw=+=o!>_w== >,w=C=c !>2w=C=!>p% #=)\=Q > $w=O=DQ >_)w=)\=> $=)\=w>=L7=ߦ>=C=>׆=C=3>4P==>Лt=o=>~t+=}=N >8h&*ƹB` mB`y@Ĺo=L7=K>΍<=><=>k<=k>QB`<%=n>3\U㥛<j<=q>㥛:u㥛㥛r㥛 8 ףu峾 ף ף<@=> >q81<9H=c >j<Y=O >/<}=!>S)\=ʡ=Ѯ">XⱾ@== =F#>L=J >#>%h<@=#>HQ8=h=c#>#<=">1<Y=">QX94<㥛<">?Wt׆t᩾t8tt5 #~X94ަX94CTTm⤾Tu< #<!>t^oo<; >lo<; >F_o< ף;S >͠o< ף;Xs >:@o< ף;qr>ȟ ף> ף6㥛< #*㥛< # ף< #$ ף< #+1#1g ףyt陾Ckti㘾t^Ktg՗㥛\1̖jcB`<j< >mʕ+=h1o=+=u>o=t=>:+=P=>J<-` ף<j<#>eB`e?D1ΏX94% #gB`;tSЍB`;t6B`;t<~!>CB`;tZdo # Yn׈ Fky醾< #< >0Lj< #jX9^X90X9ZX9XʂX9*:X91=Fվ1XվX9վX9ԾX9<Y=!>tFԾ1<Y=">Ӿ1<Y=t!>Ҿ ףUҾ ףB!Ҿ ף<9H=-`">&Ѿ ף<9H=">о ף<9H=">о1<@=!>=о1ߦϾ1+ϾX9ξX9ξX9F;X9< 0=#>";X9<1,=[#>̾X9<1,=#>˾X9<1,=C#>N˾X9<'=#>˾X9<'=$>vʾX9<'=-#>JʾO]ɾ5ȾǾƾ<)\=#>ƾ<+=#>4ƾ<+=i5$>}ž<+=o$>ľ<+=[_$>ľ¾ٱ1<<">6 </<">R</- </<">`v</<">ݘB`<<">B`<<#>tB`<<}">(B`<c1,=C=}y!>7'=L7=!>P'=L7=!>`'=L7=!>ȼ #=L7=K!>U #=+=#g!>w=+=!>w=+=n!>(w==*R!>ֺ==pB!>⺾w=C=O >ﺾ=)\= >|պw=O=, >{Nw=O=) >ɰ=O=>"ú=L7=> {=L7=>=+=g>pP==/>y+=%=>Uo=#y=[B>5hHB`wB`bB`Z </]=7></]=j>Uj=jŬX9 <1<9H=>H㥛<j<=Y>ʉ㥛<j<=>>㥛`㥛7㥛ݵ㥛X9㥛aó ףQf ף<j<=(D >v1</]=F_!>^h<+=@">WC #=Q=v">Y@==/n#>/㥛<`P= #>I1Ӱ/< 0=#>Ϊ ףB`e<<"> #tߪtU0ttਾtP #X94!DۅTX94r #< #<%u">X94< #/nu.碾o<; >MC<; >u<;fI >o< ף;A >u< ף;o>Z ף ף+ ף< #<3m>v ף< #X9^X9)j j皾 ף\㥛1 X9F똾X9Y&+=X9dC =<>.C =B`<3>|'DX94X94<;qr>IcoۧD<㥛<<>B`eɐD| X94KB`;t<5{ >cB`;t< >jB`;t<] >o8یo6oV #Kw vʇ< #Hjj^X9bX9cфX96X91R~1䁾1{jw,־1վ1[վX9ԾX9ɓԾX9<Y=">nӾ1<Y=OX">eӾ1<Y= )">ǝҾ ף[Ҿ ףѾ ף<9H=ٙ">?Ѿ ף<9H=$">eо ף<9H=">tо1<@=3">EϾ1ZϾ1ξX98JξX9̴;X9K;X9< 0=V#>̾X9<1,=#>a7̾X9<1,=#>D˾X9<1,=#>Ih˾X9<'=$>ʾX9<'=?$>!<ʾX9<'=:$>ɾIɾ,}Ⱦ5ȾǾGǾ<)\=+0$>ƾ<)\=#>KYƾ<+=2$>ž<+=vl$>1ž<+=Z$>[_ľþѮ¾T¾e1<<">MJ"</<#>N</<$">- </<Ѯ">ƿ</<\">߾B`<'NB`<<#>B`<<">pB`<<#>&߼B`<NB`<0=B`e=6!> Y'=L7=">̼'=L7=!>Kv #=L7=al!>kHw=+=Ϡ!>˾w=+=!>#Jw==7!>غ==!>׆==!>7==!>v=L7= >肺w=O=r > P=C= >"ú=+=1 >@=+=" >)=L7=a>湾P==]P>Ot=o=>('+=%=L>scha๾eB`$B`Ǻ</]=*t><</]=TW>jIj*o1<9H=a>j ף<@=g>8㥛<j<=>k+㥛<j<=C>N㥛<j<=>&㥛ݵ㥛 8㥛㥛"7 ף<1<@=3 >Lj /<}=B!">w)\==i">LP=Ga=1#>CW[ ףף1#>jCLB`e<<">j0D<1<"> #<1tut*Ʃt't #X94X94 TX94t< #Фt< #<0"> #󎣾B`eeuYio ᡾u<;DQ >Vu<; >oB`e<;T>\8B`e<;|>ǟ ף< #0G ף< #˞1TW松/nh<㥛< >w #=X9<9>'< ף<&6> cj㚾j(C =j #=/<>_A=<>E)\=<<>rQ8=C =a> #=P=>ݖC =C =l&>Zw==l&>JҕX94"too<j<>Hܓo<j<>풾X9</ۑB`e<㥛ꐾB`; #<| >,B`;t<) >6B`; #<(D >Yo< #}o< #< >oKv # #*V\< #<>{jdX9ІX9 >?X9殅X9+X9zX9d郾1W1ۿ1+1X9ff־1">վ1->վ1MվX9zԾX9GԾX9<Y=OX">Ӿ1<Y=">Ӿ1<Y=b">SҾ ףѾ ף7Ѿ ף<9H=$">о ף<9H=#>_^о ף<9H=#>R'о1<@=Hm">Ͼ1Ͼ1OξX9;X9wg;X93;X9<1,=C#>ǀ̾X9<1,=#>˾X9<1,=$>?W˾X9<1,=$>˾X9<'=:$>ʾX9<'=:$> ʾȾ'1ȾǾƾ<)\=8g$>ffƾ<)\=+0$>E ƾ<+=i$>wž<+=$>mľ<+=$> þ,Hþ1<L ף<Hl</<">DQ</< #>w</u</<">>B`<<">B`<<4#>tB`<<#>='B`<<L#>B`<<ƅ#>B`<)/<j<9#>W>/<jQڻP=Ga==!>w=+={!>iw=+=!>w==!>==D!>D4==n!>P=o=~!>w=o= >>P=C=e >P=+=fI > P=={k >鹾=+=| >0P==w>t=o=>{N+=%=>x(<#y=>𹾏h˹B`IB`ʸB`%_</]=n> j<Y=>j<Y=~>hX9= 1<9H=>? ף<@=>N㥛<j<=z>c㥛<j<=&6>"㥛<j<=R>㥛4㥛 ף<j<= >K1<@=~!>C<<~!>̱ ף<H+=L=#>o<'=,#>HB`eo<)\=0 #>ٯX9}"X9ɭB`e<<\">/i #ittR tgt2ɨ #֧ #% #_t< #o/ݤoG=tzX94TR~B`e+o<;DQ >IB`eYT{kD ף< #G1?B`R+=㥛 #< #<>\X94[Ӝo4.`P=B`<<>ϛ<1<%>jB`XC =j<>P=<>\t=<>,< ף<>w=+=> t=C =>/W t<㥛<>fC<㥛<>21</<> ^X94<j<K>ۧT<j<|>XʒCX⑾tB`; #<>hB`; #1Ώo+tӇ #獾 #RIX94FX94< #<} > #k` < #<[>cj܈j1BX9dX9X9ʉX9C煾X9vTX9„X9{11M11uv1G恾1>{־1">־1Dվ1(Ծ1ԾX9.ԾX9nӾX9<Y=\">aӾ1<Y=">Ҿ1<Y=ٙ">Ҿ ףPpѾ ף;Ѿ ף<9H=0 #>vо ף<9H=F#> о ף<9H=$">Ͼ㥛<j<=U">:XϾ1ξ1,ξ1ް;X9_;X9<1,=#>̾X9<1,=#>r3̾X9<1,=$>V˾X9<1,=G=$> ˾X9<1,= 8$>ʾX9<'=q$>28ʾX9<'=G=$>FɾZ ɾǾǾCǾ<)\=d$>}ƾ<)\=*$>\Uƾ<+=d$>ž<+=|$>Oľ<<"$>þþO@þ ף<<ۧ#>6 ף<<#></<9#>J</<#>></<#> h<<">U޾B`<<8">LB`<B`<,+B`<<{I#>ݼB`<<}#>MB`<@޻/<j<4#>n/<j@/<j<L#>5^5F==`!>==.!>U0==K!> P=o=!>jjP=o=ȵ!>DL=o=!>P=L7= >P== >*ƹP==B >AP==s >DLP==>et=o=,>隹+=o=>/>cB`⸾B`u'j<Y=>j<Y=>j<Y= >)趾1<`P=!>𧶾 ף8㥛<@=d;>j㥛<@=g>㥛<j<=ę>㥛<j<=>㥛ϲB`e<j<n >>\u<j< >u<<!>αo<ϱ㥛H+=L=$#>+ٱ㥛<`P=g'#>?tu< #=">- oNzj<j<=">B`e<k #ȘtR #%txtxt)Чo8offotB`;tooo£ #$X94B`e*:B`egT*DD:T˟ ףy]o=t<| >ct&ttS蜾<㥛<~>Qo=1<>=›'=B`</>p%h< ף<ё><1d<1B`<1LOt=+=>4C =)\=(>Ж</<>^uaoRՔ #<<>x ;j< >rX94< ף<8>ᒾB`e</<`>[ #Ht t4 #`u< ףw֎㥛<Q1t<㥛<>u匾T< #<>AhxR< #SjS"X97X9jX9eX9edžX9Z/X9=X9 X9yX9݃X9N1ۿ1)1־1<#y=>">c־1[վ1?:վ1_ վX9vԾX9ӾX9ӾX9<Y=">Ӿ1<Y=S#>Ҿ1<Y=">Ѿ ףJ$Ѿ ףо ף<9H=F#>qZо ף<9H=L#>$о1<@=0 #>fϾ㥛<j<="> Ͼ1yuξ1;1c;X9E;X9<1,=P#>|̾X9<1,=$>m˾X9<1,=:$>R˾X9<1,=Tt$>ʾX9<1,=o$>ʾX9<'=`$>-ɾX9<'=Tt$>@ɾǾfNǾƾ<)\=$>xbƾ<)\=[_$>ƾ<+=ݵ$>fľ<<$>N(ľ=Dþ֋1<<<#>MJ ף< ף<<4#>͒</UM</<`<#></<">%B`<<">B`<<,#>qB`<<a#>CsB`<<=D#> B`<jxB`<jW&/<j<#>)/<jW>/<jκ$b<1<">@I<<#>Ǻ<C)\=/]=6!>隹P=o=!>|=o=?t!>4P=%=MJ!>IP=}=3 >P== >iP== >举P==fI >O]t==ę>[+=%=U>o=%=>؞&˸B`ηwJO<Y=@>ѶX9<`P=,>CX9 ף<9H=˄> ף.B`e<hB`e<<0/ >,HB`e<+B`e<AB`e<j< >u<ju<<\ !>֋o<Z㥛j<)\=@">C9o<<9">ٰtA+u< #=">Ho<<>">.D<j<.!>$ #<㥛sX94<㥛ӫD<㥛<{!>p%D[tcoCŨB`;T o< #<=!>WB`;tbo쥾B`;t<=!>B`oo#X94TuwuTuT󠾦DsDB`eYX94< #< >N o}ٜ ףkHj"+=X9W>/ ףP䙾㥛=t<㥛㗾o=<>@0h큖1ޕT7B`ejD<OD</<>T<<5 >咾T<<>&Tuo< ף<>DDGB`eCrCɍ㥛O#B`e|b֋< #z6jjkj׈X9B>X97jOjoX9< #<@>܅j< #IKj< #<@>X9< #<>%X9< #<0/ >іX9< #X9< #m1< #־1<#y=y;">ޫ־1־1Vվ19Ծ1YԾX9=,ԾX9іӾX9#>cbӾX9<Y=#>Ҿ1<Y=`<#>3Ҿ1<Y=0 #>mѾ ףC9Ѿ ף<9H==D#>о ף<9H=}#>kо ף<9H='#>Ͼ1<@==D#>PϾ㥛<j<=#>ξ1$(ξ1;13;X9̾X9<1,=]#>/̾X9<1,= 8$>˾X9<1,=q$>˾X9<1,=B$>ʾ<'=1|$>R ʾ<'=q$>WɾǾ`Ǿƾ<)\=\$>Pƾ<+=$>}?ž<<$>`ľ<`<þ1<<#> ף<<#>H ף<<1#></H</<9#></<>#>jh<۾B`<KB`<ZB`<<>#>OB`<j< v#>B`<j/B`<j<#>ܻ/<jn/<j;<1<">_йA.<<>#>v<鷾</<<8">)\=Y=)!>MָP=%=!>P=}=L!>P=#y=7!>wP=%=@!>猸P==u >񸾼t==> +=%=$>!͸o=}=I.>鸾˸B`>B>B`Xq6 㥛<)\= > l㥛W!oߴu<<[ >zu<=,uPdzu<<n >SB`e<<{k >򲾏u<<[ >B`e<<n >u<jȵB`e<j< >Tu<j<%!>u<ӰC<ƧT<<>">,㥛Di1<<"> uޭD<1<Ϡ!>j0D<1T<j< >`oX94ЛtoQtjo褧oۦ; #0B`;t}oi #֤ ףC ףɫjsעt'B`e< #<) >D< #<>2B`eC$ ףw #5 tOTDluÜo=1<>=<>SyB`e<㥛<>㚾)\=<|>`<㥛<g>t=/}/<1<\>P<j<>< ףnQ ף<j<>to< ף<>u<1<>~o7o=Dt㪒 #T}yTݐT>X94T+B`eu< #u9bD< ף;g>ûB`< #<>z抾j{NjX9vjjۇj< #<~>?< #<>𧆾< #wj< #ej< #̃X9< #<, >>X9< #< >d1< #<r">ù־1<}=w">5־ ף<#y=r">_־1վ17վ1Ծ1uԾX97ӾX9ɫӾX9<Y=#>oӾ1<Y=9#>}Ҿ1<Y= v#>Ѿ1<Y=ms#>ѾX9о ף<9H=J{#>Wо ף<9H=#>eϾ ף<9H=r#>`vϾ1<@=}#>Kξ㥛<j<=N#>;pξ1;1cE;1 ;X9<1,=#>w̾X9<1,=i5$>~˾X9<1,=o$>N˾X9<1,=$>ʾX9<1,=v$>iRʾ<'=>$>ɾ<'="$>ɾ(IǾƾž<< $>wľ<<$>_$ľþ71<_F ף< ף<ގ</h<<#>jB`<j<{I#>۾B`<j<)"#>OB`<<6Y#>!B`<CsB`<B`<j<<#>xB`<jo /=/]<1<L#>$b<1<#>n߉J<<9#>f<'1<<#>j/<<">B`<<}">ޓ/<uB`<춾B`<嶾h涾h<= >̗/<1,=' >\B`<'=| >d<= >-,X9{X9<=>M ףo1 ףP6 ף㴾tQN㥛<=0!>ٳt<=MJ!>t[o4o岾u<< >yB`e<<5{ >'B`e<< >3ıB`e<j< >|򰾏u<j<, > #< ף<|!>fIT<<">ct< #= )">zB`e<+=">;p㥛</뭾t<jh ף㬾X94Zt됫owX94< ף<`!>UT[uM֨D<< ">"T<6o1;o$oܝB`e{\椾1Otkj ף`͡TO㥛<㥛<>1<㥛<@>1t<㥛<>m #Z* #o0tΜt+㥛D;㥛<> ܚ+=5+=@t=ؘ)\=o=q>J)oPo󖾼t TX94殕 #2D8gtɓ #&X94DB`e # TӐu[B`e< #<>oӏ #ZX94ώX94[Buu< ף;H>g g< #<>6͋<1󓊾jHj`Y< #<>ض< #<> /MgB`ʆh%;B`ղ/*jyX91־ ף<%=w">L־ ף<#y=Ѯ">0L־ ף<#y=2">#־1վ1Ծ1XԾ1)ԾX91ӾX9_ӾX9<Y="7#>iҾ1<Y=ms#>0Ҿ1<Y=#>Ѿ1<Y=#>5cѾX98о ף<9H=#> о ף<9H=#>uϾ ף<9H=}#>bϾ㥛<j<=#>ξ㥛<j<=f#>5$ξ1z;1̾1̾X9<1,=2$>E*̾X9<1,=vl$>)˾X9<1,="$>˾X9<1,=$>QkʾX9<1,=$>ʾ<'=$>pɾ<'=/$>4ɾǾƾ|'ƾ[ž<?:ž<'kľþ%>Eþq8þN1<<#>u ף<<$> ף<+j ף<<[#>Nbh<пh<-!B`<j<#>׾B`<HB`<<#> B`<NB`<j<#>B`<j0B`<j<#>XŻ/n/<1_ѹDL}<z<<#>﷾<<>#>๷/<<8">?B`<<">Q/<@0B`<𧶾B`<Rh<<"> ͵h<h<=~!>/m9< #=F >vöj<=7 >kj⵾j1<=u >H ףj<1,=}y!>/C =sh=~W$>ٰ=ʡ=#>o==OX">1<1,=?!>{o<< >oB`e<B`e<<. >ȵB`e<j<' > Au<j< >ٰu<j< >stDV}o< #<㥛y # T<㥛kt'tσo ף;D;Cso< ף<!>i㨾X94< ף<6!>B> #+;X94B`;D$X94at0duפt? ףі<jᢾ<1<" >B`emoޠj!Yo埾uVeB`efڞDJF㥛j0 ףa㥛ߚ)\=W<1e<<7>oQCŗB`%j<<ݘ>Nt ͕ #";B`;>8g ף;B`;>kԓtEX94ND"D< #<>uB`e< #<>?B`eH #< #<>ęt< #<> #< #<>䃎Tw=u/QB`B`y/{< #<+>ڊ< #<>28~B`/+=B`e<m>qt=o͆P=o<>nQC =u<->܅dXB`IӼj"71q־ ף־ ף־ ף<#y=}">־ ף<#y=?">mվ1P6վ14Ծ1Ծ1ӾX9{IӾX9ӾX9<Y=p#>czҾ1<Y=z#>GѾ1<Y=#>PѾ1<Y=&#>ѾX9Sо ף<9H=#>wϾ ף<9H=:$>ZϾ1<@=W#> ξ㥛<j<=#>eSξ㥛;1%@;1̾1\r̾X9<1,=i$>˾X9<1,=$>H˾X9<1,=/$>hʾX9<1,=%>ʾX9<1,= $>ɾ<'=W!%>#ɾ<'=<%>XȾ$>l!ȾǾVž<<$>>ľq ľ¾1<<:$>1<<$>C ף<<:$>B ף<<-$>A ף<j<#>h<<=D#>gB`<j׾B`<jB`<B`<WB`<j<^#>B`<j<#>xB`<j<#>e/L/#J/<1<=D#><1< v#>sc<1<L#> U<<#>9<n<j<">ַB`<}/<<">CVB`<<">춾B`<<%u">5h<<ٙ">h<ص<<*R!>EB`*B`1/g j鵾j&S<= >۴< #=\!>&<@=2">岾=C=$>L==m$>eL==i$>ew=T= #>Ű+=)\=$#>H/C9X9< 0=!>豾u<< >jޱB`e<j<. >IB`e&B`e<1< >Bu<12UtX94< ף<E!>u<jo<1<*!>o<1 #cX94.⫾B`;D@ ף; #<Ƨ >o; #᩾D;tRD;t<*!>Z ;B`ei㨾o;X94Y ף;t𧦾B`;T #nit #B`etj</ڢ1<1<> ) ף<1臡 ף< ף<,>1< ף<>ioX9<<>럾< ףkT #] # #< #B윾C曾B`eNt+=<*t>S ףaX9< ף<$(>0*㥛 ף<T #ޫ #t< #<>IK;B`; >B`;;!>o< ף;>xt8X94Quőo`D搾 #<;u>_D< ף;a>現 #y]oΎB`e=X94=C<>PP=B`e<>`Q8=t<>X94=t<%>Ջ+=T<>(o=T<[>IP=u<>Ήw=o<> 0=t< >P1,=t<>|O=<X>I㥛=+=>PD=X9<>腾'=㥛<>o=CB`ڏzX9H־ ף<="> ׾ ף<־ ףJ־ ף<#y=#>վ ף<#y=#>g~վ1KԾ1.VԾ1Ӿ1ӾX9vҾX9ҾX9<Y=ۧ#>/Ҿ1<Y=&#>Ѿ1<Y=#>F_ѾX9оX9Ͼ ף<9H=%$>"qϾ ף<9H=:$> Ͼ1<@=$>vOξt<@=$>ξ㥛;1̾1s̾X9<1,=8g$>%̾X9<1,=$>˾X9<1,=$>ʾX9<1,=<%>bgʾX9<1,=IK%>ɾX9<1,=%>kɾ<'=%>o/ɾ>"ƾmž<<%>P6ž<8gľ ף<`1<<$E$>MJ㥛<j< 8$> ף<Q ף<j<#>]h<˿h<?B`<j<#>aB`<jGB`<ڽB`<j< #>NB`<j<-#>B`<j<#>|D/׻/{w<1<#><1<#>)<13PƸ<$ <j#<j<">-/<<">MgB`<<">B`<XB`<<">KYh<<">׵h<<'">صh<B`</< >ܵ/<ˡ<6]m<+= >W!<)\=O >Ƴ<j<=$#>R~ 0=O=$>Ohm=v=2$>J$X94=㥛=#>C =C=A#>/<j<=">2X9SC<<] >Iu<j< >"u<jEذu< ף<[ >Nbo<㥛< 7 > #t #2D\tݬtV;o;u >x #㪾 ף;t< 7 >1o;o<[ >wD;B`; >8D;o<3 >pΨD;t猨;u<7!>ާo; #o;opw;tץo+B`;o<%!>Ӥo< #< >3 #tB`ew #< #<>8u ף<㥛t$X9h蟾<㥛LTB`e< #fڞX94od #ŝX94< #Ꜿ㥛1<jvo<jC =/<\> ף oiCØX94 t4o;䖾o8 #㈕o<;~>B`; ף;>`t<;>ӓX94O@X94 #<;>4 #<;~>뭑 #< ף;Ll>9(D<;>vD< ף;Ll>,X94<;*t>B`; ף;>%taC<;>3Q8=tToj<=tٌj<=㥛<~:>O;X94=t< >㥋D= ף/`=X94=od>󓊾='=>z>o=ܺ>-=+=I>It>=>=O >}=Ș>?=T=U>H3P=o= {>J҅= ף^ڄbJjགྷX9 ׾ ף<="> ^׾ ףS־ ף8־ ףy־ ף<#y=V#>]mվ ף<#y=YQ#>3վ1Ծ1 Ծ1xӾ1,HӾX9ҾX9}ҾX9<Y=#>Ѿ1<Y=$>LѾ1<Y=$>@ѾX9A+о ף<9H=2$>Ͼ ף<9H= 8$>VϾ1<@=]#>ξt<@=i5$>!ξt<@=:$>;㥛!;㥛z̾1nn̾X9<1,=E$>˾X9<1,=$>C˾X9<1,=%>)ʾX9<1,=H%>ʾX9<1,=z%>ɾ<'=&S%>dɾ<'= F%>ȾUjƾg~ž<<$>Oľ"7þ<¾ ף<<o$>{ ף<d㥛<j<M$> ף<j<%$> ף<j<Z$>= ף<j<Ӽ#>Zh<܀h<(վB`<jB`<<#>B`<< #>B`<j<#>yB`<jD/y/됻/?W<1<}#>ɺ<1<#>q=<1<`<#> Y;S<jη<j<8">ڷ/<<">&B`<<">XB`<<">նB`<<\">sh<<">h<<"><B`<<0!>/</<@!>^/<<, >#</< >1<< > 崾o<)\=\!>d鳾B`)\=T=<#>𱾦D=sh=[#>V=o=v">+=Ga=">}y]< #=!>LX9~t<<!>> ף</<3 ><< >}<UMj</oӯugaTۮX94 >Xt<㥛`T<;> #uYDB`;t<>ʪo;;*>Qo: ף;R' >Mo; ף;p >:;o: ף; >pΨo:B`;j >HoQozp #2r; #<*R!>ӥo5DVuo_T}袾 #<;u >]t졾 ףal ף3ܠTH #şTMB`e< #žB`e< #<>[BT DT/iC$ћt#JuEX94ttX瘾oHo<;>๗B`;;>oDnX94< #Еo<;2>B;o:g>X94< ף;>q B`eo<;v>B`eAX94< ף;$(>򑾏u<;g>dt< ף;g>搾D< ף;n>nT< ף;E>鏾T<;>>fu< ף;>׎B`e< ף;Y>L #=o<">'=o<\>) #=o=o<*>T=X9o;o:ݘ> ף;o:N >1O=<:z>@=1*)\=<;>/]=< >9= 0=->1ӆGa=d@)\=töhF%*j?X9!׾ ף<+=">B־ ף׾ ף־ ףJ־ ף<#y=S#>öվ ף<#y=#>#վ ף<#y=f#>KԾ1~WԾ1aӾ1ӾX9vҾX9 hҾX90ҾX9<Y=$>Ѿ1<Y=?R$>Ѿ1<Y=O$>оX9Ͼ ף<9H=8g$>0GϾ ף<9H=q$> Ͼ1<@=2$>8Jξt<@=o$>̴;t<@=o$>j;㥛̾㥛uY̾1!̾X9<1,=R$>˾X9<1,=_ %>@ʾX9<1,= F%>`ʾX9<1,=b%>ɾX9<'=M%>,eɾ<'=%>pȾ<'=xz%>%ȾOƾIcľ`<þ¾ ף<B!¾ ף<+㥛<jG㥛<j<1|$> ף<jb ף<j<Ӽ#>Vh<<#>Tƿh<<ۧ#>B`<j<#>B`<jDB`<<#>ٽB`<j@MB`<j<Ӽ#> Ҽ/Ae/ٻ/n<1<1׆<1< #><1ݹVh\<1<#>@<j<`<#>ڷ<j/<<">B`<<+">B`<sB`<<">eh<(<<֋!>B`<$B`<r/</3<<!>j<</i0<ƅhܲC = #=}">aTP=D=3">< 0=!>6걾jX97 ף<<!>pBX9o=w= >ٰw=Q8=s >sw='=$)\=t=F >ït)\u߮X94< #<9>Rt̴ #VB`;;U>>?tσo; ף;˄>R򪾦D; ף;>po;o;R' >驾D;;} >Jo:B`;' >o;oOuoڧo;o<}y!>y馾;D<}y!>0;ooDtݵX94 t<;fI >[;o;9 >PߢTjtۡoV㥛3ܠ #]oϟDIB`eAuQ1oC< #<>眾h<㥛R<j ף<+5ǚDBtwt<;>o<;>o<;>◾o<;>>X94< ף;d>Quao<;">㈕B`;o;G>UTvlu⓾CVX94<;j>ϒD<;>>ot(,D< ף;~:>oT< ף;8J>n4DX94< ף;L>?taB`p(/1B`//F눾B`T)\=C<_>= =Q8=3>uC >hm=!>Ɔhm=<>+= ף<>:u/ۄDX96׾ ף׾ ף+־ ףW־ ף<#y=a#>8־ ף־ ף<#y=#>nվ ף<#y=#>Ծ ף<#y=r#>4Ծ1Ծ1yӾ1,HӾX9ҾX9{ҾX9<Y=$> Ѿ1<Y=M$>KѾ1<Y=L$>о1<Y=$>yоX9Ͼ ף<9H=E$>+ξ ף<9H="$>Aξ1<@=vl$>;t<@=$>'f;t<@="$>;㥛U̾㥛 ̾1˾X9<1,= %>W>˾X9<1,=lC%>ʾX9<1,=}%>ʾX9<1,=N%>ɾX9<'=%>ɾ<'=%>Ⱦ<'=%>CȾƾžwž<<&%>ľJþjA¾ ף<<`$>8¾ ף<<$> ף<<o$>&㥛<j ף<j<$>b ף<j<$>\8 ף<j<#>| h<<$>Nzh<<#>ϾB`<j<#>ӇB`<<<#>=B`<j<#>B`<j<4#>3///<1< v#>X<1<<#>ͺ<1<#>C<1<#>Z<1<#>&<1<#>'֨<jw/<<"> ^h<嶾h<<">ph<k</<)!>77B`</صB`<Ҍ/<< >n<<@!>f<<< >l[<< >U</< >ȳms<<!>Sj<M<+=~!>뱾<=2!>ұo=X94= >o=X94=B >>h>C =P=Q >sC =C =Xs > ף<jƿB`eLTB`e2殾 #iB`;;E>ḓ;;]P>j0; ף;M>D; ף;d;>ϫo<;H>p%;;ػ>佪o; ף;>q=o;o;> >MD; ף;x >0D; ף; >񝨾D; ף;V >Xo; ף;!>To; ף;2!>ʉoC祾Dg~o< ף; >社obJDX94X94ꕢ #< ף;#>8D<; >D t #TfB`e< ף;>Ӟu?t̴㥛)\=㥛ǀ ף<㥛<2>웾C< ף<R>PS<ҚB`e@B`eT# #t< #<> tWxX94< ף;>ۖDAHu< #<>u1D #_$to< ף;>X94< ף;>xC'o<;>ŏu u[X94< ף;0> B`ewD'Nh}/ bj< #<>Xŋj/Q8=1ꉾ-=w=ݘ>[=+=/>шo;;> Fo;;l&>็='= )>/]=B`<>co=㥛<> jX9]׾ ףV־ ף1־ ףA־ ף4־ ף<#y=#>վ ףcվ ף<#y=Ӽ#>&վ ף<#y=#>ɓԾ ף<#y=#>XԾ1Ӿ10Ӿ1vҾX9 hҾX9/ҾX9<Y=v$>PѾ ף</]=$>о1<Y=$>hо1<Y=d$>MϾ ףDϾ ף<9H=$>֭ξ ף<9H=i$>JFξt<@=$>;t<@=$>;t<@=/$>̾㥛O;̾㥛 ˾1< 0= %>n˾X9<1,=@%>ʾX9<1,=w%>GZʾX9<1,=%>ɾX9<'=%>gDɾX9<'=c%>Ⱦ<'=%>HȾǾžľþj¾j¾ ף<T¾ ף<)㥛<j<$>pB㥛<j<*$>㥛<j} ף<j<$>㥛<jwh<B`<j<$>"B`<j<ۧ#>eSB`<juȽB`<j<Ӽ#>[/м/Ae/e<1< v#>V<1<#><1<#>e<1<#>d<1<}#>ι<1<#>J<1<#>𸾦Ouv2<5sB`<<">R,<<">h< T<kh B`.ŵB`</r/<<!>//<< >Rմ<< >Bx<j< ><< >>˳/<<!>CB``l첾h<)\=%!>fB`ǝ=t= >񀲾C=xi= >~<< >u"ా<

r7Tݯ #:X #񮾼t^ho<;>U; ף;+>\Z; ף;s> ף; ף;>8󫾼tUoo; ף;>[|D;o;| >𩾦D;o;n4 >QD;o;{k >ƨo;o;I >3o;o;] >; ף;r >QtX9< #< >6o*B`;o;>y #Dx ף;D;#> t>\t< ף;>+١X94< ף;>iWt͠ # 7DQB`e o< ף;_>quҝt=X㥛;㥛Sy1<㚾 ףO1M1<<3>. ףD* #̗D< #<4>"C< #<>cCؕCB`u< #<>㔾 #l[o<; >Hܓtlul쒾㥛keC ᑾo`T`吾o2UTŏB`eQTT~:T1,=㥛􌾼t=C<> qY=<>:t=㥛<>抾L=j<8J>6o;T<">D;o9H=<> #y=B`<>!凾'=1<>m9斆/^􅾦WX98 ף׾ ף:׾ ףy־㥛i־ ף;վ ףվ ף<#y=#>8վ ף<#y=Ӽ#>Lqվ ף<#y=#>Ծ ף<#y=-$>KԾ ף<#y=*$>gԾ1J{Ӿ1B Ӿ1sҾ1TҾX9Ѿ ף</]=$>Ѿ ף</]=$>Bо1<Y=6$>Sо1<`P=$>Ͼ ף<ξ ף<9H=$>ξ1<@=$>;t<@=$>`;t<@=%>̾t<@=<%>f̾㥛˾㥛˾1< 0=->%>7˾X9<1,=w%>^ʾX9<1,=%> ʾX9<'=%>/ɾX9<'=&>ȾX9<'=%>>yȾ<'=&>Ǿ,Ǿ<+=ö%>_{ƾ<+=%>1ƾP6žľZþjEþj¾ ף<;6¾ ף<㥛<j<`$>i㥛<j<$>~㥛<j<$>Q㥛<j 7㥛<j<|$>㥛<j<$>?/O/X/꽾/4//i/@<1<#>=<1<#>-[<1<#>,Ժ<1<#>iR<1n<1<^#><1<#>vøUTq淾/<j<}">kh<j<">T<<}">,</<-`">ͯo=B`x=<<Ϡ!>9ֵh/}?/</<~!><<!>/<< >S/<< >hڳt=)\= >X94=w= >|Q8=1,=] >(== >ò/t<t<

֋o=o=N >t ף<15{ ף<Ej<+= >C< ף<>st< ףuvOB`e #ToB`;;>soT&pT@o< #<u> ף;B`;c>d ף;;>6v ף; ף;u >訾 ף; ף;DQ >Y ף;;AB`;;n >t{tyo:uB`;o;@>Kꤾo[_X94Hܣ #JX94ft<;a>&t< ף;ߦ> X94X945{X94ݟD>B`eOu)흾㥛<<]>wg[Ӝu< 0=>@B`e< #=*>X9<'=?>X9lX9#ۙX9<=>DLX9Ku</C<jj<<n>OB`zj󕾦<㥛<>oB`<1<>Dtgt< #<1>*C,㥛UtCo9(D蟐D< #<>- TYDMX94gD㍾Dn #ԌD'X94t$b;Tȉ+= ףo/<㥛ĔB`j/[輆j$X9g~1t|t׾1<)\=>#>s׾ ף־ ףQ־㥛#־㥛վ ףDվ ף<#y=#>wԾ ף<#y=A#>*վ ף<#y=N($>Ծ ף<#y=d$>Ծ ף<#y=[_$>PӾ133Ӿ1ۿҾ1o*Ҿ1$Ѿ1</]=$>OѾ ף</]=$>ио ף</]=($>о1<`P=$>@Ͼ ףξ ף<9H=%>Yξ1<@=$>P;t<@=%>;t<@= F%>ǀ̾t<@=IK%>6̾㥛˾㥛aO˾1< 0=%>ʾ1< 0=G%>SʾX9<1,=%>FɾX9<'=*&><ɾX9<'=4&>ΥȾX9<'=*&>Ǿ'ƾ<+=%>xƾžlCž<<&S%>ľľjþji¾ ף<cz¾ ף<<$>¾ ף<<$>㥛<j<$>㥛<j<$>y㥛<j<$>K<㥛<j<>$>㥛<jga㥛<j(վ/`///mV/<j<#>B켾/g/<1<#><1<1<#><1<#>-<1<#>a๾jjR,}<<8">Ch<𷾏<Ŭ+=/<4K"> ^t=H=C =)!>Ѷ=t=)!>gP=)\=!>C =C =S!>ˡ&Sh<+<<2=!>Ҵ+=<~!>*<+= >$Ew= #= >ZسY=L=V >fj<=Q8=; >5t==Ƨ >ಾ+=C = >U㥛y;C<o</GtBX9< ף&h<<>/<<9>X9<X9<<_>% ף<<>C<1<>>Oou/ogo<<>JT<<>8t7ttt騾 #< #[oۧt< ף;>CVou #ZG㥛¤o<;-!>tFT< ף;>ӣo< ף;H>;B`eT uuX9Làut< ףj1<񺞾j<<>㥛<<> {j휾< 0= >HP<1,=7>aOC<<~:>c ףscX9#ۙj<=d>IX9<)\=>ΥCMA/<+=[>.?<$<<>,j+D #< #<1>- #B`ejM㥛<j<='>ǒ㥛<h?B`eȵD;D #(X94cX94;D<>RD;o<>x #|,opC =t<>Ջ+= ף<>Jo;㥛<>GZo;T<3>Mo;o)?D;㥛<ݘ>(<㥛<>.WxX9]܆1>E ף ףvC׾1)׾ ףB׾ ף ־ ףxb־㥛Jվ㥛վ ף<#y=#>Bվ ף<#y=q $>Ծ ף<#y=%$> Ծ ף<}=\$>PԾ ף<#y=$>#Ӿ ף<#y=h$>Ӿ10 Ӿ1uvҾ1Ѿ1Ѿ1Ѿ ף</]=%>lо ף</]=$>DQо1<`P=P6%>9Ͼ1<`P=!%>ξ ףB[ξ ף<9H=R$>g;t<@=_ %>J^;t<@= F%>̾t<@=}%>r3̾t<@=V%> ˾㥛x˾1< 0=q%>˾1< 0=~%>jʾ1< 0=~%> ʾX9<'=%>QɾX9<'=4&>ȾX9<'=4&>+Ǿ<=1&>ǾƾX9sƾ<+=%>*ƾžž<<+%>Icľj}þj>þjR~¾ ף<<%>0¾ ף<<"$>b㥛<j<$>d㥛<j<%>㥛<j<$>Á㥛<j<$>t㥛<j<|$>fھtY/P/K彾/_//<j<#>/A/<1<#>ܺa<1<#>㺾<1<#>y<1d<1<<#>`Y<j겸<<">o=/t=]1,=C =!>$ X94=)\=a!>@=X94="!>eL=D=MJ!>궾Y=L=!>Vj<=j<= !>9ֵP==S!>o+=+=!>/P= #= !>㴾D=L=#g!>`Ga=xi=!>epT=Y= >=,t= #= > ׳1,== >\ww=1,= >o=t=n >B`<+=[ >f<=ձ1 >ZC<< >8 ף<+=> >PLTX9<!ꮾjLl<)\=/>1Too<jX94(~T4.X9< #=+> ףcX94<㥛QkT<㥛<>T<㥛GrTT|~t*I sD<;>;X94<;><tLDN(B`e<;>죣oB`e]t< ף<<>> ף<<~>n4㥛oX9֭X9 ף^؜<j<=">41<1,=7>PC\D< ף<%>T< ף<>T< ף֐D< ף<4>vtzP=B`e=!>엾+=/]=K>p_<j<=n>Ɩ<9H=6>C<T<j #<㥛t 8D7j<<}>GUX9<̒1LC</<>3đ #< ף<>B`;B`e<)>ގod#tD5 T<<ӟ>*tD<ύo;T<>Ae ף;T<>ʋ;t<>9 t<1<&>mB`; ף<>r܉D;X9<[B>gD1,=<>ˆ< ף5X9 ףc ףЅ㥛pur׾1<=#>֨׾ ף<)\=k#>׾ ף`׾ ףt־ ף>"־ ףվ ףniվ ף<}=3$>վ1<#y=T$>oԾ1<#y=~W$>Ծ ף<}=*$> Ծ ף<}=$>xӾ ף<}=$>q8Ӿ1Ҿ1-Ҿ1SѾ1iWѾ1о ף</]=&S%>uо ף</]=3%>о1<`P=]m%>jϾ1<`P=->%>Yξ ףTξ1<@=_ %>a;t<@=lC%>;t<@=}%>|̾t<@=$%>m˾t<@=ö%>g˾㥛H˾1< 0=%>ʾ1< 0=%>\ʾ1< 0=%>ɾX9<'=1&>2ɾX9<'=i&>e6ȾX9<=Z/&>)Ǿ|ƾX9|'ƾ<+=&>žž<<$%>ľ<<[%>ľjwþj¾ ף<ke¾㥛<<"$>7¾㥛<j<$>㥛<j<%>㥛<j<%>t>t[tFC>t\/g/<1<+0$>ӟ/K/<j㼾/<jf/<j+rĺ<1<-#>X0/<jг<j<L#>jj/<<">.B`<dC =B`<֋!>:; 0==l >VHT=X94=Z > xi=D=u >rmGa=@=@=Q8=7!>2ZT=Q8=!>𧶾#y=L={!>@=@=!>C =)\=t!>->@=@==!>hm=hm=?t!>YGa=hm=!>`P=`P= >4 0=9H= >h< #= >S<1,=V >sײj< #=n >B`<<1 >w1X ףF/<+=E>G㥛<<~>!ꮾC<㥛yuo<1<>󭾖C<j<6>tu<jT<1<[B>B`eu<<>u<'=:>"o^u</g,T<h˩B`e<j<R>cC</ ף<<>aq㥛<j<>j ף<<>s㥛 u<1<ݘ>$X94O #XX94+X94* #;B`e-ϣo)"/to[T<1EoC<<>l>oBD<<3>t<=+>E㥛t<+=2>BTΙX94$ #X94.X94)ЗD<㥛ԗ ף<<>o= 0= >)<'=>Dn1ԕT<j<>7OX94< ף<>RՔ #vlt<㥛UD<j<>͓ ף<'=>jMX9<@=[>+1*:t<'=>Ϡt,B`;tojB`e䎾B`eCTsX94<;u7T ף;C<[>B`;< {>6劾o<<->{N;j<>MB`;<7>N<j<㥛<ݘ>J)X9?1" ף0L㥛N㥛'kT` ؾ1+׾ ף<)\=4#>%#׾㥛־ ףt־ ף<=$>վ ף<=$E$>Wվ ף<=+0$>*վ ף<}=8g$>Ծ ף<}=$>.Ծ1<#y=$>\Ծ ף<}=$>Ӿ ף<}=K$> PӾ ףӾ1{Ҿ1Ѿ1KѾ1c Ѿ1{kо ף</]=B`%>- о1Ͼ1<`P=ˡ%>Ͼ1<`P=:u%>Vξ ףξ1<@=lC%>\Z;t<@=xz%>̾t<@=%>/̾t<@=1%>˾t<@=%>N˾㥛ʾ1< 0=%>`ʾ1< 0=1&>ɾ1< 0=(a&>Ⱦ1|~ȾX9<=5&>`ǾX9<=(a&>ԂǾƾZ/ƾX9ƾž<l[ľjþj"7þj¾㥛<@¾㥛<j6㥛<j\㥛<jtst4tKtfھt,/Q1/ٽ/\B`<j<$E$>//<j<$>=/<jǻ/<j<#>vq/w;/5^/ B`<<)"#>rܹB`<<ٙ">ѹ+=<6!>ʹw=o=!>ĹQ8=P=-!>#y=1,=J>[|o>`P=>GE=w= >U1=Q8=WC">uX9=L=b">}-=9H="> `P=L=!>j 0= 0=!>MX94=j<=!> /]=hm=o!>״L=hm=!>hj<=T= >?=9H=Ƨ >-ϳ+=9H=l >{Ij<'= >X9<=N >Zjjޱ㥛<= >r1<=o>)˰j:@B`<@=> >TƯ<'=9>IX9</X9/zX9tt* ף<)\=z>ҩX9+5X9<`P= >B`<`P=&>\ ף<=>o<<>Ƣ1gD<=>ܨjjj}㥛</o</<7>Xu<X94<㥛< >ˡX94<1<>5)tӤ㥛o|B`e<颾o<<g>6꡾T<ՠ #<㥛<[B>z䟾t<㥛<%>t<㥛< >D #<㥛<> #<㥛<>t<㥛<> #<1<>xX94,Ԛ #<㥛<>q=D< ף<+>DX94kX94 #qX94|DBϖo< ף<>j<<>M< 0=>j<'=>8oX94B #< ףu哾D< ף9X9U ף o< #=>5co<1<û>B`;tK<;C<8>̏o/T<<>Ӈu<)\=/>K卾B`e<)\=1>K #<<6>nj;t+ ף;t<>>ioo;/<>R D;hCo<<%>)?;jx ף;t<>*o;oD;o<>솾D;uD;oD;u<{>beX94NGؾ1<=}#>1Bؾ ף<)\=#>׾ ף<)\=#>1׾ ף)־㥛^־㥛9־ ף<=G=$>Gվ ף<=Tt$>iվ ף<=a$>Ծ ף<}=$> ^Ծ ף<}=$>Ծ ף3Ծ ף<}=$>ƅӾ ף<}=%> Ӿ ףҾ1M2Ҿ1AѾ1iWѾ1о ףPо ףϾ1VeϾ1<`P=,%>Yξ㥛<`P=G%>N ξ ףZ;1<@=}%>V;t<@=%>w̾t<@=%>˾t<@=>"&>sK˾t<@=>"&>ʾ㥛ʾ1< 0=1&>ʾ1< 0=^&>0ɾ1Ⱦ1'1ȾX9<=&> ǾX9<=&>~5ǾWƾX9<+=&>žX9<+=,&>cžž<ľjx ľjþ ף<¾ ף<< F%>h?¾㥛<[¾tztt.t3㥛"qCC,t?5tセB`B`<j1B`<jؼh<KvB`<<:$> B`<<2$>gB`<<:$>?WB`<j<#>h<<#>B`<<'#>e~tt=o=%u">X #=P=!>fhm== >J+= 0=a>Au='=}>8m=9H=!># #>hm=!>{=Q8=!>q=1,=;6">ƶY=T=">hm=B`e=">㈵%=hm= )">ZGj<=D= !>2='=O!>ڴ1,=@= >*)\=X94= >:t=Q8=S >&䳾t=1,=!Y >N<'=[ >_<=A >"X9Ϡ&<1,=1>B$/,p뮾j<HB`ް<'=n>='hXAh[뫾<Y=>σj<9H=ۊ>@lxhj<1,=ӟ>t_<1,='f>.<'=Cs>*j< #=<>X9<'=4>m9 ף<=>'¦㥛<=>Po<<->Jҥ #dXB`eߤ<9H=>6X9ƅt<'=G >sעB`eJ X94<<>2= #< ף<>l #< ף<>DiX94<TWoްT=' #< ף:zD< ףܛB`e</< >}\u<<+>`ȚC</_X9<<>'㥛</TvX94{ #"D1Ӗ ףo=T=|>|'o=T=F>`<`P=>B`<'=o>T<X94< ףFDMX9<j<=R>o ף<@=:z>wC<@=N>ϑC< 0=> t<j;t<ʦ>;CNzo<1<>ƎTt)o<1,=>uyo<p;t<)>􋾦; ף5Fto;do;t/oB`;/u ף; ף<>o;C<>TRD;o<>o;u<&6>D;orD;o_t;nؾX9<㥛=#>9ؾ ף ؾ ף#׾ ף\=׾㥛 ־ ףk+־ ףh־ ף<=i$>wվ ף<=$>Ծ ף<=h$>OԾ ף<}=$>_$Ծ ף<}=Y$>7Ӿ ף,HӾ ףt^Ӿ ף<#y=P%>iҾ ףҾ1Ѿ1 Ѿ1UMо ףϾ ףjϾ1ξ ף=ξ㥛<`P=$%>ξ1<@=1%>To;1<@=$%>̾t<@=1%>(̾t<@=&>˾t<@=KY&>ʾt<@=^&>ʾ㥛XVʾ1< 0=(a&>xɾ1Ⱦ1>yȾX9<=e&>!ǾX9<=X&>F|ǾƾW ƾX9<+=!v&>@žX9hž,ľ<<%>QNľjWþ ף<¾ ף<< F%>¾㥛<<$>I¾ttW[ttn㥛<j<$>JC4C۾tx㥛㥛h<<*$>'f<<$>;o=<$>o=/kHo=/.⻾<</<8g$>sKC =h< 8$>C =<#>غw=t=$>yu= 0=#>fʡ=L=t^#>+ʡ=T=OX"> O=@=2!>깾%= 0=\!>1,=t=T5!> 1,=P=!>ڷ1,= #=">61,=1,=}">i/]=D=">鵾%=u=">jsh=o=r">L=/]=|!>ŴB`<<, >'kj&j<B`< #=Z >Wt=xi=" >y#<`P= >/hQj<j<=h>?t ףyjh< #=`>,h< #=>j<+=>h< #=|>fkh< 0=*>ꬾh<@=>Kv<j<=>/۫<`P=[>X<j<=S>"ê<j<=[>)t=D=[>̩B`jj㥛㥛YX9< #=>b1< #=> C<)\=>t$C㥛<1,=o>0C<=`>JҥDj #<j<`>ҤX94</_$B`e~o㥛<'=0>㪢ujޡCw-C< #=> #<j<>ݟ #<j<>u㥛<'=>5$㥛ۊTo<1oB`e #o $ujș㥛TnB`eX94F|X94"Dޫ㥛 h< #=d]>9/ X9[_D“ #p #<jB`eu#g #</Eؐ #<<j>A # #< )t<jB`eu9bB`e<)\=v>̌X94<uYB`;1<>b֋;㥛<">/t<<|,>o o<<4>t<)\=>;<$(>Y ף;t҇o;o<>@0o;u<>5o;u<>񅾦D;uB`D;uYo)ؾX9<-=$>h\ؾj<=#>ؾ ףK׾ ףT׾ ף,׾ ף{־ ף*־ ףվ ף<+=h$>Iվ ף<+=$>Ծ ף<+=$>1|Ծ ף<%=C$>uӾ ף<}=($>Ӿ ף Ӿ ףӾ ף<#y=%>Ҿ ף<#y=%>*:Ҿ10Ѿ16Ѿ1[о ףaϾ ףbϾ ף?Ͼ1"ξ1;㥛<`P=1%>;1<@=%>P̾t\r̾t<@=>"&>˾t<@=V&>D˾t<@=^&>mʾ㥛ʾ㥛< 0=ff&>eɾ1Iɾ1Ⱦ1+ȾX9<=&>}ǾX9<=&>R,ǾnQƾX9<+=l&>žX9<+=s&>ožX9<+=KY&>ľ<<@%>_$ľ ף<þ ף<(þ ף<+¾㥛<Z¾t<j<%>@to㥛<jc 㥛<j<8%>Á㥛<j<#%>| 㥛xtiC6t<㥛'N ף< ף<$>D+=<6$>ӟC =/<$>/QP=<$>y1,=C =%>ힼ'=C =$>(t=o=$> Ļ)\=Q8==$>N=Q8=|$>%=j<=`$>h-=`P=q$>bgʡ=/]=U$>n=`P=`<#>Ĺ}=1,=U">EX94=t=H">vC =<>">췾P=t=Z">Kt= #=A">)\=t=">W @=Q8= #>xzxi=u=">L=Y=0"> +=C =\!>o)X9</< >ڳ<< >ɳ<j<=M>@j=o=#><</]=><<Y=>㥛<@=>l<1,=b><@=8>k/<9H=>߮Gh<1,=n>kC =D=?5>1h<`P=>ԷB`<`P=k>|D<Y=z>׫<@=c>iB`<`P=)>jP=/]=/>4ש1,=/]=)>& ף<1,=>֐X9<`P=>l<Y=@>㥛<1,=d]>o t<j<=j>{CS\D #</<)>vlD</<='>ӼD<Ӣu< #=A>D<@= >zT<9H=>ՠB`e<)\= >)T<<>jC<'=ۊ>Ҟtl>oיִX94"TёT Tio%难TiRTo< #S"X9YXB`esTTB`<4ˡ딾㥛<< >KD< ף<>#X946YX94<vB`e<)\=>wuG摾uGB`e<<-C>B`e<)\= K>R'D<=R>T X94B`eu<<+>9bB`e<<>$X94<<8>W&B`e<<8>o<jUt<<>e #t< mo<<&>pΈ;㥛<+>& ף;u<R>uo;T<>نo;T<>:]o;T<>Ҍo;T<0>o;u<5]>T;T<$>ؾX9CؾX9yXؾ1<=]#>D׾1<=#>׾ ף!׾ ף<=N($>־ ף<)\=\$>ff־ ף<)\=*$>վ ף<)\=$>$վ ףF%վ ףyԾ ף<+=$>QNԾ ף<%=+%>Ӿ ף<%=W!%>lӾ ףFҾ ףsҾ ף<#y=%>*:Ҿ ף<#y=ö%>tѾ1PѾ1о1fIо ףϾ ףgϾ1ξ1l>ξ1y;㥛<`P=%> ;tt̾t#̾t<@=[&>˾t<@=&>ʾt<@=&>ڬʾ㥛ɾ㥛<'=s&>`Yɾ1CȾ1rȾX9<=&>DǾX9<=%#'>(IǾX9<=&>]ƾƾX9<+=&>nžX9<+=KY&>ž<<&>IcľX9<þ ף<<%>Sþ ף<<}%>¾㥛<ٙ¾㥛<j8¾㥛<jK㥛<j<+%>?㥛<j1㥛<<#%> 7㥛<< %>ߦtEt(վt<㥛a1<1<$>JF<jhҽ</y ף{D==3%> 0=P=%>ƻ= 0=$>no=P=_ %>9 </]= 0=y$>NEq=1,=#>X94=)\=S#>o/+=B`<">\+=<">緾 0='=#>ж=L7=,#>u<=L7=#>W @=D=">$t=)\=">I۴/<epj)X9<<%!>PdzX9</<' >fj<+=>l=/]=1> #=w=o>t=sh=>챾<=ę>iW<`P=j>İ<9H=K>\8/<`P=>+=D=>o=9H=6>+=xi=\> #=j<=$(>x #=T=>)\=q=&>nn+=q=ۊ>/+=B`e=)>++=xi=>ɰ=xi=>- #=%=0>C'=O=>L7<`P= K>A<9H=L>ʧ=E=>1,=Q=>ۅw= =>*C =ʡ=R>殥/@<==>ۤj} ף<+=t>dD<=>^o<j<=>$֢B`e<@=1>aTTDw-B`e<㥛<>иB`e<=>$uՕ ף< ףi㥛aoX94%TpX94< #<>ߛo3 ף⚾B`eQjٙ1`Y #j"ouo6CvÖt$<㥛<^><<+>j<ߔo<j<>MT# #O@ #< ף<>z’B`e<<>>TȵT</J$T<<6>8T7X94D</W #<OT< ף=t<㥛uo8یC<1<>=X94xt<㥛t< ף<>y #<j<">鉾t<`Yt</x;t ף;T<~:>ho;D<*t>͆o;D<>Oo;Dxzo;T<>߄o;TQNo;TҍؾX9%ؾj<ʡ=Z$> ؾj<ʡ=#>7ؾ1<㥛=3$> ׾1<㥛=$>a׾1|׾1o־ ףV־ ףվ ףվ1 վ1TtԾ ף_$Ծ ףwӾ ף<%=&S%>4Ӿ ף Ҿ ףҾ ף<#y=o%>tѾ ף<#y=1%>ϠѾ1Ѿ1Iо1Ͼ ףgaϾ ף?Ͼ1"ξ1; ף<`P= T&>p; ף<9H=&>b̾t<9H= T&>'̾t<9H=(a&>˾t<@=&>;˾t<@=e&>Fʾt< 0=&>&ʾ㥛<'=&> mɾ㥛<'=&>Z ɾ1>yȾ1[%ȾX9<= '>ǾX9<=y&>!ǾIƾX9<+=&>ղžj<+=I&>]žX9<+=&>ľj<<}%>ľ ף<<,%>1þ ף<<3%> þ㥛<¾㥛<I¾㥛<j3㥛<jzS㥛<< F%> ף<<#%>]1<<%>῾1<㥛<($>{ ף< ף<$> ף<1<$>񺾾X9<1<$>OK;/<hͽ ףY41<㥛i ף</-Cj<<$>P=o= %>/ #y=j<=T$>l=)\=#>k)\=o=#>st=T=j<=1#>B`e=Y=L#>hhm=@=#>޶sh=#y=#>?O=}=4#>qX9<j<=A#>xi=xi=">=1,=S">~h<<">B`<+=~!>h6Y11/<1,=>n=u=>C =xi= >k+=T=w>ڰ/R<Y=&6>^ׯh<Y=>O<Y=u>mŮ?/<9H=2>-t=hm=3>5C =o=>X+<%=J^>/<#y=/>;C =#y=`>Yݪ)\=O=>~t 0=P=>/]=㥛=>Q8=㥛=>< 0=n>Dݧ ף< 0=>zpw=T= {>BϦ==e>d@<-=>¥j< ף=@>ZG1᤾ ף ףX9oȣD<1,=%X>NooM2u<1,=Y4>KTJ$o;ǠC\8X94< ף<|,>[usB`eruĝuoxu[뛾oIh㥛coyu< # ut{t☾ ףL㥛09Ej斾1+X9<j<.>VX9<蔾 ף<<6>: ף<)\=>#u</,B`e</<>ѮT<<=>T<<.>0D</ t<㥛.o<jk #<j #<1<@>Movt덾X94<㥛< K>WtÌt0tt o[| #-쉾t< ף<D>MB`;u<ӟ>ࡈ ף;X94<:>o; #<%>Go; #Fo; #<>>;o; #bo; #<>΄o; #_o;T_ؾX9<-=T$>ؾj<=$E$>vؾj< ף=-$>ؾ1<=$>J)ؾ1׾1<㥛=%$>a׾1<㥛=q $>2Z׾1־1_־1վ1վ1<)\=$>CԾ1rԾ1<+=lC%>Ծ1<=%>VӾ ףҾ1LҾ ףEGҾ ף<#y=&> Ѿ ף"&>OѾ1Sо1Hо1Ͼ ףϾ ףξ1=ξ1y; ף<`P=&>O#; ף<9H=[&> q̾t<9H=&>˾t<9H=Ԛ&>˾t<@=&>Sʾt< 0=&>7ɾt< 0='>pɾ㥛<'=-'>$ɾ㥛<'=O'>UȾ18-Ⱦ1gǾX9<=9E'>?ǾX9<= '>ƾžj<+=&>ažj2žj<+=%>x ľ㥛<<@%>hþ ף<<,%>[þ㥛<¾㥛<<Ҍ%>Yi¾㥛<<%>b㥛<m ף<1</<;%>g<< %>῾B`<<$>gB`Z*<<$>߾X9j<<ݵ$>߾B`<<$>YnP=t9t<<_ %>j!w=C =%>»</5FD='=$>ɰo=o=2$>F 0= 0=#>w}=Y=a#>l =q=>#>,}#y=#y=$#>xi=B`e=0 #>l`P=T=v">̶=9H=Z">H3 ף<+= #>< #=#>ڴ ף<'=">`1,=@=">ݳ #=D=E">Qf'=9H=g!>B C =L=!>$ֲ/< #= >91<+=$ >4B`<1,=>!ȱ)\=/]=>zSP=hm=j>氾)\=Y=3m>)h C =u=P>j+=T=><=|>nB`<j<=T> ୾B`<@=>Nj1<@=p>3X9<%=K>(B`<=D>X9<Y=)>jéEi ףOu'¦C<ju<9H=y>}X94<j<=>vTi5oD&X94&uǢ1< #=i>D㥛¡㥛G㥛<)\=>BDoob #< #|o͝ ף1uNB`e< #uLoCЛo C[Cl 㥛z1闾X9< ף<>itX9< ף<>rX9<<Ș>1<<> ף<<>vC<<>ᓾo</<0>,HuX94<j<}\>J #<;D>zD<<>c o< ף<0>t<1at<㥛|t+ogo<㥛ɍjKoor3B`e3u"oCA ףco ף; #<>o;t<>9Eo;to;t<~>o;t<6>0do;t<>҄o;t.qo;D<I$>H1ؾX9<-=a$>%ؾj<{=a$>zؾj<1=M$>rؾ<=+0$> ؾX9<{=$>B>ؾj<=#>@ؾX9< ף=$>׾j<=3$>׾j<ʡ=bJ$>׾j< ף=o$>־j<ʡ=$>־X9վX92վX9ɓԾ1HӾ1<+=w%>pӾ1<}=%>NҾ1<#y=%>lҾ ף@Ѿ ף<#y=V&>*RѾ ףYо1Wо1Ͼ1VeϾ ףξ ףӇξ1;1<Y=V&>ӟ;1̾ ף<9H=s&>h"̾t<9H=&> ˾t<9H='>ڬʾt=Iʾt< 0='>ɾ㥛<'=2'>Ynɾ㥛<'=\'>Ⱦ㥛<'=8'>OuȾ1Ǿ1ԂǾX9<=b'>ƾX9<=&>%;ƾjžjžj<+=0L&>epľj7þ㥛<<%>xþ㥛<<@%>þ㥛<<%>¾ ף<<%>¾1<< %>Zj<+=h%>p/</e¿w=)\=~$>!꾾q=+=ɓ$>Ll=t=Y$>׾<ݘ1<j<|$>TX9<<$>R</<$>0ؽj<,+kH<ٻjnX9</<$>ClxB``P=`P=a#>mw=T=A#>I+=t=#>D=xi=">q淾w=`P=}">B)\=j<=b">=9H=F">W 㥛 l1ڴD=B`e=">Cw=D=ke">FC =9H=l">"7t=9H=7!>Dz)\=D=!>keC =@=͒ >'d'=xi=> P=P=>蟰 #=㥛=>0)\=+=u>'P=)\=]P>I@=L7=>(ծ #=L7=>hB`<9H=j>\/<9H=d>5X9<9H=>11<@='f>X9>tꪾ1GZ㥛ݩB`<%=}>.㥛u<<7l>\T<jÞT<㥛<'>ND< ף<)> B`e<ÞX9<`P=>t<1,=9>:uC< #=`>ޤtS ף;1<5^>Ԣ ף;㥛_; ףB`; ף<>Ut<㥛ԢB`e<<>Έ ףQt2X94<㥛<>?tR'oo@o+ #xC< ף<\r>松㥛<1tAo􉜾tCo<1t"Ú㥛J ף<㥛;™t4tm1j<1aj<<>"TDnX94D<㥛< >[ #/ݔX94qB`e<1<2 >ɓX94<㥛_T<ޒD<//DX94<<6>" ף;T<;>z䏾B`;C<-C>3mB`;C<+>_;T<>u<j<> X9zB`eB`e\rX94苾D_D؊o5B`eo;D ף;to;o<>TRo;o<$(>o;B`;od>o;B`;>ro;B`;C>Єo;B`; >D;D<\$>ؾX9<㥛=a$>"ؾj<1=a$>uؾLOؾ7ؾjTؾj<j=#>ؾe6ؾ ؾ<5^=U$>̗׾<5^=?R$>׾xb־<-=6$>վ<ʡ=%>վj<=dX%>IcԾ1<)\=%>WӾ1<+=%>0Ӿ1<}=%>HmҾ1<#y=9&>ٱѾ ףѾ ף о ףо1fIо1`vϾ㥛Ͼ ףaξ ף=ξ1<Y='>;1<Y=-'>@M;1<`P=ͯ&>k̾t<9H=&>˾t<9H='>ʾtʾt< 0=:'>ʾt< 0=G'>ɾt<1,=d'>B&ɾ㥛<'=l'>Ⱦ㥛< #='>Ⱦ㥛< #='>Ǿ㥛< #=b'>+ǾX9<=?'>[ƾX9TžjdXžj~ľX9ľ㥛þ10þ1p¾X9<<&>T¾A7+=X94=M%>`1,=1) #=t=Z/&>\8C=9H=G=$>'='=J{#>L=L=h$>jj<<$>6㥛< ף<$> ཾ㥛£<<$>ԼB`<'=Y$>4B`h$>*B`j-C<j<#>Jt<<'#>j<<`<#>X9CWx㥛<'=Ѯ">pwh<j<=2">'ڵ<'=2">Qo=<">ŴC ==rP">q o='='">і)\=1,=g!>+=@=MJ!>ꕲ+=j<=3 >&<1,=s >+=L=n4 >><#y=>;ǰw=q=>{k=q=[>>=P=,>t=㥛=E>?'=-=_>OX9~RGɫtB`e<+=!>t< #=g >B`e< 0=g >VC< 0= >1<1,=E>MgX94<㥛<~>V񦾦DxDaX946 #^B`;C<г>Do<1<>i #oty;tϢ ף;u<>( ף;o<> h;o<('>L;u<=I>}oآX9>\<=>3ġ٠ToΪo0B`;X94Ϟoxt tӟ #FottT!B`e<1<Ș>X94D隙DDfC<j8-1-u</g햾X94P #殕oMomokԓ;X94<Ɗ>{I;X94<4>ɒ;X94<>|a;T<2>jޑ ף;T<7l>Eo;X94<Ș>eo;t<>: ף;B`e<0>ƿ ף;B`e<@>RB`;T<(>%o;t<^> #^hX9<1<8> #B`;t<>B`;X94<>苾;t<$>PS;t<>,ԊB`;X94<>1B`;X94<>; #+ވ;t<>J) ף;o<>F|o;B`;+>1ӆo;B`;vO>9o;B`;>jo;B`;m>_ o;B`;k> D;X94׾X9<㥛=8g$>ؾjؾؾ<=G=$>\ؾ/<=#>پ<=#>Z پB`t{پپo=x={I#>=aپ+=F=L#>4پ+==#> ؾ+==d#>׾׾B`<=$>־Bվj<-=%>BԾX9tӾ1Ҿ ף<}=4&>Ҿ1zSѾ ףpBѾ ףSо ףqZо1eϾ㥛3Ͼ㥛ξ ףTξ ףg;1<Y=b'> Y;1<Y= '>̾1˾ ף<j<=\='>!˾C<@=G'>yʾtXʾtɾ㥛<1,=F|'>DLɾ㥛<1,=y'>Ⱦ㥛< #=ޓ'>*WȾ㥛< #='>Ǿ㥛<'='>'Ǿ㥛<'=@0'>ƾ1E ƾX9ožj<)\=&>%ľ<)\=k&>Sľ1þ1¾W¾<'=&>w¾t=1<.&> C =㥛pB 0=1<%>P=㥛< F%>@h<ı'=)\=A#>⽾j<=X94=$>Cj</<$>"C< ף<$>Ľ㥛<j<\$>wgt=B`e=$>lϼC =L=h$>>?< 0=$>C =@=v$>P=/]=?R$>`=B`e=#>1#B`eT<1<1#>5u<<">̗ ף<+=">%#X9<)\=">ޫj< #="> .<'=r">XB`< #=OX"><1,=8">담< #= ">]< #=K!>ms/<)\=iW!>}貾-`챾'=@=DQ >X #=D=䰾 #=1,=$ >Á/<`P=h>W쯾㥛< #=~>>ouucEB`e</<[B>iB`e<<`>,D</<">σX94<<0> #<j<>  #<<>w #mt<=v>s1<=>PTԦ #ZX94 .X94T㥾X94< #<*>`os.;D<>/ #< ףB`eIT<)";B`e<>+ ף;T<> ף;B`e<>Q ף;B`e<؞>0 ף;X94<г>7;X94<{N>aT #Wt<<>kTu;B`;.s>ԟ;;;>:X;B`;>螾B`; #o.9oHB`; #<>,+B`; #<>̜oZD #& #ЛX94< ף<>oYnoi㘾o{B`;D<=I>3oԗtT< ףju<<>zu<Jҕo<<1> u< ףvDȓ; #<9>-;t ף;t<>4o;D"D;o͒D;;>D;B`;'>o;o<;>'o;B`;y>6o;;@>b-o;;kH>o;B`;HP>J^ ף;B`;>`t ҌTW&B`eσo ף< #<+>qX94< #aD2t_;tZo;B`;>o;B`;=>co;B`;E>…o;;/>/o;;>zD;X94<$>z׾X9<=L$>Qؾjؾ<9=:$>Xؾ<`=#>Mپh</=p#>پ<=#>Oھ+=$>">`ھ=>">ھ=t>0 #>-پt=q= >t^#>Eپ)\==#>ؾo=S=$>)׾<= =Tt$>׾B`<9=ݵ$>[־վ<{=lC%>վ<-=%>ӾX9"&>Ҿ ףIҾ ף<}=&>}yѾ ף<#y=l&>Oо ףо ף{kо ףA+о1܀Ͼ㥛ξ㥛iξ㥛ξ ף;1</]=Ͻ'>X̾ ףnn̾X90˾t<@=F|'>%ʾC<@=?'>jʾt<j<=q'>U0ʾ㥛<1,=?'>9ɾ㥛<1,='>l ɾ㥛<1,='>RȾ㥛<'='>GȾ㥛<'=}'>hǾ ף<1,='>Bƾ ף< 0=r&>Cƾj žDž/<'=&>%ľ=,ľ<=&>pþ¾P=xi=,'>9¾)\=1<%#'>4¾P=X9P=1\ B`x ҿo=+=@%>bC ==5)%>*to=)\=$>it<1o<㥛<|$>o< ף<*$>V1F1+= 0=x $>㺾t=9H=P#>dh<j<=#>GB`<'=6Y#>j<'=E/#>t<<0 #>u<<"> ף<+=">[jR<+=j">嵾/Wj<<">@ٴC = #=!>X9P=D={!>W #=Q8=|!>F"1+=/]=S >MJw='= >='=n4 >$ ף<'=~>ήD< ף<>^hX94<1ޭD%@D!u<1<>㥫X94YX94<㥛<>諭D<㥛<>IT< ף<>9X9 CdCvt< ףWxX94ꦾ #g #-&X94 #< #<>,B`;t<>+;o<|>B`;t~Wto,; #<~>bۢ; #<>ǝ;D<߉>} ף;T ף;X94 ho;tW;ttF_o͒ ף;o;6>o;o;XV>qr ף;o;XV>M󞾦;o;{N>ӇB`;B`;>>B`;o<>>;o;o<5^> #eDXX94X94<j<>dB`e<j,eDB&B`;X94< >(B`; #<>];X94<>aqT<<>XDX94)B`eB`eD<1<>^ #<1t<1<>ɫ; #<>$B`;D㪒B`;X94@oƑ;B`; > A;B`;#J>o;o;L>-o;o;> o;D;>'o;o; >o;o;>l>D;B`;+>捾o; #\o;o<>;D<='>Ȍt' #B`; #<0>Ht1o o;D;L>g ף;T ;t<> Ço;B`;]>!o;;%>io;;Y>1녾D;;>}?D;B`;#>鶄D; #<$>6x׾X9[ؾ<j=[_$>W`ؾ<9=$>S"پ/پo==g'#>ھ=>j">z۾ #='>N"> ھ=>#>ھt=n>S#>mپ+=%>#>2ؾo=F=#>9ؾ</=G$>̗׾B`<="$>־/4־<{=;%>wվjYԾX9CԾX9J{Ӿ12Ҿ ף<%=&>Ѿ ף<#y=B&>Ѿ㥛о ףо ף-о ףϾ㥛EϾ ףξ ףgξ1;1̾ ף̾X9<`P=K'>1̾ ףW>˾t4ʾtFʾt<j<='>ɾ㥛`Yɾ㥛< 0='>Ⱦ ף?Ⱦ ף< 0=F|'>ǾX9<j<=?'>Ǿj<9H=r&>QƾH3ƾ/<@=&>žh<1,=&>Uľx ľ㥛<+=&>þB`;C<&>;þo;o<'>i¾ ף;㥛< '>M2¾o=j<= &>/ ף<1<9%>}j<<%>鿾='=]m%>+w=1,=]m%>yu= 0=o%>ͽt=Q8=$>솽j<Jtüu<1r3o<1o<<4#>޺o<j9C<<=D#>C/< 0=1#>8h<j<=9#>7 ף<'=#>Ͻ< #=#>C ףٶC</<">ff1<+=">j<+=y;">B`< #=!>IKP=D=g!> X94=D=!> 8X94=T=!>'=Ga="!><1,=l >h?C<<{k >jޱt</K)\=t=N >f1)\= 0=x >+=Y=> #<jY;u֭t=oXX94<㥛<g>૾tRX94 <<6<>1</<>WoD< ף<|>N #oۧtltO #X94WT< #<؞>쥾 #bo<;_>ԤB`;;J>G=;o4;D< m>GUB`; # B`;X94ᢾB`;T<#>sע;B`e<>  ף; #<]3>o;o4Ko;;h>t;o B`;t<>o;o;7>-o;D;>o;D; >, ף;o;7>;o;>>Q1;;>;B`;p>BtX #՛o< # $B`;t<$>qo< #<>ʙtO]B`;t<>;t<> ף;t] ף;t<>@B`;X94<>Ɨo~5B`;o<>F;;>hB`; ף;>wB`; ף;>fX94l[D帓oRX94咾tnt< #葾B`;t<>sho;o;+5>>퐾o;o;L>5{D;D;>o;o;X>Vo;o;ܺ>o; ף;> ף;;>% ף;B`e<@>fko;;:z>yo;o<>N; #<8> #xo;;>o;;>lx;o<>u ף;X94<>jj;T<1>u ף;B`;>ㇾo;;>>D;;>D;o<*>䅾D;o<g>7OD;o<>XȄD; #<`$>I׾X97ؾ<=B$>\ؾ<=#>پh|پ)\=q= >">/۾'=)>#>ھ #=w>,#>)ھ)\=t>p#>ƢپC =+>#>پo=#=#>rؾA׾B`<= =*$>6׾<=$>Q־վ<1=B`%>dXվj"ԾX9<=*&>Ӿ1<=&>Ӿ1Ҿ ף<+=X&>Ҿ ף<#y=&> AѾ㥛о㥛[о ףnо ףϾ ף6Ͼ ףϾ ף ξ1<#y=(>ξ1;1;X9D̾X9G˾㥛<`P=(>˾tVʾ㥛<9H=5(>/ʾ ף<@=(>ɾ ף<@='>Ⱦ1<9H=u'>bȾX9Ǿo=L7=,'>ZǾC =O='>Ǿ ףVƾ ף<`P=p&>4ľ+=>&>&ľoۧþB`;Tþ<9H=]&>x¾/¾X9#gt<<%>C<<,%>0/o@ ף< ף<%>+=P=1%>V}P= #=P6%>]὾9)\=D=o$>1<<$>b㥛<<]#>NX9<<#>< #=S#>yhkj<=a<="> ף<+=">tu<췾X94HX9<+="> ף<C<j㥛<c'=9H=0!>P9H=q=Ϡ!>cѴj<=q=d!>N(o=D=Ƨ >Lo<< #=} >k㥛XⱾ ף?t</> ףHX94<<`>c;tx;o<8>U ף;o<>Է;B`;>;;*t>B`;;>"o\u׆B`e&t< #kB`;B`;=>B`;B`; >sB`;X94<#>QT #~5 #HB`em9D #nQ #=;o;3P>社 ף;D;8>So;o;=>ӣ ף;tۧtoh #{IoA;B`e񢾦;X94<>ٙ ף;oTo; ף;؞>o;D;T>j ף;o;T>ԟB`;;*>nLo䞾tt%oB`; #<>Xo;T<>6͛;o<#>(oWtʙ #`Y # o< #<>ϘB`;X94<~>cB`; #<؞>LB`;X94<>ޗD;o:#>9Eo[B`;;>#o< ף;Z>o< ף;(>딾t<;>Ko<;d>ȓ ף; ף;b>6Yo;o;>钾D;o;> ף;;sc>8;B`;>D;D;a>C9o;o;>o;D;n>0/o;o;D>Yo:o:>o:o;>Ӈo;D;6>_D;;!>J^o;o;%X>8یo; ף;>D;D<}> ף;T<>&p ף;t<>抾 ף;o<>[ ף;B`;x>剾 ף;T<>C;T񝈾o;o<`>D;o<4>QD;o<> D;o< >o;obo;t<ڍ>لo;t< $>׾X9<=*$>3ؾjؾ<`=k#>=aپ<=#>vھP=>1#>9ھP=z>#>4پt=>-#>"Tپ)\=I >#>ؾ$>{ؾ<=Z$>׾B`</=h$>Mg׾<=$>־<\=%>F־<-=dX%>.վj?:վX9<=%>;Ծ1<=&>uӾ ףVӾ ף!Ҿ ף<+=&>J Ҿ㥛vѾ㥛;о㥛Sо㥛d#о ף0/о ף<#y='>*ϾX9sϾ1<}=(>ξ1<}=b(>ξX9<+=(>ξt)ξCs;<+=(>̾X9<#y=j(>˾ ף+˾ ף8ʾX9zɾX9 Ⱦt=T=y'>ɾ<=;(>@̾?'>}ɾ(aƾB`<=ͯ&>žt+0ľX9<=i&>'þj<{=X&>¾X9<%=ͯ&>R~¾<j<=?&>Q ף<+=%>VC<<,%>o<- o=~㥛< ף_ᄒ</<$> /<<$>{J< #=*$>ft=@=B$>仾t= 0=H#>D)\=9H=/n#>)\=L=o#>_AC =j<=">̹< #=">E1T@X94<㥛o B`;C<"><<!>$C<㥛_ oݵ㥛<1,+=o=O >( t@t t<+= > C<<>|C<<>ٰtA+tkB`;D<> ף;;z>:魾o;;z>Jo;o;>P¬o;o;>|D ף; ף;Ll>ܺ; ף;>@B`; ף;ۊ>ڬB`;o;>FB`;;>#۩o^ttƨD;t<6>G ##oWX94< #!o'o̦X94Nt<;VH> ͥB`; ף;B&>B; ף;B&>Ic;B`;y@>nB`; #<>0;X94<>٣B`;B`e<Ǻ>kԣoɣB`;o1 ף;X94<(>,H ף;t<>$֢D;;B&>HD;o;R>)o;o;w>f1o; ף;߉>;B`;9>;;>cB`;o>tzo< #<@>EB`; #<> { ף;t<>po;X94<>6͛ ף;D<>CB`;;>y;o;T>B`;;w> ;o<@>Qo?B`;T< m>o\;o<@> ף;o;>;;|>g햾tIoˡu #s;o;>kԓo;o;>E ף;;=> ף;;>o; ף;>4K;;>X⑾oio;o;*>䐾o;o:?W>So;o;{>ػo;o:>,o;D;D>ao:o;>D;D;!>`o;o;M>錾o;D;:z>o;D<ё>w;B`;N>j;B`;x>jيo;;o>J ף;o<m> o;o'o;X94<>/D;to;o<>Qo;o o;o<>o;oo;o<6u>5넾o;t<$>g־X9<=`$>׾jiؾ<=#>ؾh/ھt=V>^#>پC =+>#>zؾ+=J >$E$>5ؾo=#=$>ؾ<#=*$>u׾/CV׾<= =($>־<=#%>p־ վj<-=ˡ%>7OվX9Ծ1<㥛=%>uԾ ףӾ ף4Ӿ ףҾ㥛<=&>Ѿ㥛<= '>9(Ѿ㥛о㥛<#y=W'>о㥛о ף<#y=7'>EϾ1Ͼ1<%=(> Ͼj<=j(>~ϾX9<)\=(>&о/<ʡ=^)>о<5^=)>pо+==)>fϾ+=Q==a)>;<-=)>̾jx˾jD4ʾB`}ɾ<='>ȾuǾ<=&>#ǾX9<%>wJ'>Ⱦj<>)'>SʾX9<=i'>~Ⱦjƾ ף<9H='&>žt<=}&>˹ľjþ/¾ ף"¾C = #=T%>X9< #=%>6tuo< ףoӿ1<)\o=w=~W$>/Yj"jU+=1,=Z$>(~`P=B`e=*$>XŻD=xi=6Y#>8C =`P="><j<=cz">RB`<j<=p">ǸT9oB`;C%#Wj<oo,o ׳TX94czoB`;X94AB`;X94<@>F_B`;B`e<3>w-;T<>S ף; #<>_^; #<>̯;o<>82 ף;B`;(>D; ף;f> o; ף;>to;o;K> ף; ף;>b;D;vO>~㫾;D;x> cB`;D;^>|ժB`; ף;)>$X94<;>1 #<;F>VH #B`;;>7D Fo< ף;=>!姾 #< ף;>̗tSB`;o<1> ף;B`;$>$;;>9; ף;t>Х ף;o;8>H ף;o;>ڤo; ף;>eo;;> ף;t<>* ף;X94<7>YQo;T,D;u<>SD;u<Ǻ> o;D<>D;T<>7D;X94<5>ʡ ף; #<X>LD;;o>иo;B`; m> 7 ף;oş ף;onL;o<3P>mŞ;t;;o<>a #S蜾tE;B`;c> ף;;w> ף;;Gr>8;;Z>!;B`;3P>zǙ ף;B`;J>6v ף;o<3P>& ף;B`;.>ǺB`;t<>{o֨oooB`;o;>o ף;o;>%̔;;>>o;;P>ƓD;o;!>6Y;B`;o>;B`;>Έo;B`;f>D;D;;> ף; ף;4>>퐾D;D;j>Nbo; ף;(>o;o;L>gao;o; >ˎo:o;Q>jo;D;6>D;o;j>D;o;M>i ף;o<j> o;B`;|>;;j>o; ף;U> { ף;o;Ae>r܉o;o<>E ף;D<>ΥD;o<6>q懾o;B`;Cs>-o;;>o;B`;:>o;B`;">vo;B`;\>o;o<$>־1־j<=$>%׾< ף= 8$>1BؾB`<=#>,پo==q $>ؾ<=T$>1Bؾ<=$> ׾hr־B`(a־<= =->%>l־<=[%>Z/־<=}%>վjqվX9<=%>_ վ1<ʡ=&>Ծ1<㥛=KY&>dӾ ף<=V&>aӾ ף(Ӿ㥛Ҿ㥛<=y&>[Ҿ㥛?Ѿ㥛<%=@0'>о㥛<}=*o'>Bо㥛<}='> 7о㥛Ͼ ף<#y=Q(>Ͼ1<%=C(>ϾX9HоjѾ<=W*>~oӾQ8=m=sK+>XԾ #=1,>&p+>FӾ=/$>5*>Ͼ<=)>`;/<5^=(>Ɗʾ)\=B`= F(>v2Ⱦ@=>'>&Ǿ`P=y&>*o'>gǾC ==]&>?Ǿ<=&>ƾ ףǾ<-=8'> ^Ǿh<+=V&>(aƾ㥛qžCuľo<l[ľuþX9<j<=[%>¾ho=L7=P%>)\=9H=%>l+=Q8=$>/GEh+<@=8g$>kC =j<=G$>C = 0=%$>%t=D=$>@=o=L#>t=T=">yX9<+=8"> ף<)\=">T1]3㥛<<.!>˸ ף<a㥛< $1k/]ܶ/<+=O!>ܵCH/")\=/<>ɫoo7qB`;t𱾦;t< >?t ף;o<>/o;o<>V԰ ף;o. ף;o: ף;;>˯ ף;;>:Xo; ף;K>Kͮ ף;o;>? ף;D;>o;D;>g o<;>t* #< #<>zot׆D<;>q=oթB`;D;>iB`;D;D>tĔoJ)B`;D;{N>;o;1>p_ ף; ף;6>o;; >$ ף;;h>,B`; ף;>cB`; ף;C>ZGouͤB`;o;>P;;>;B`;aq> Po;tID;DΈD;T<>Έo;u<>7D;u<>D;o<> ף;1<>dt<H ף; #o;tW쟾 ף; #<>˄ ף; #<>Z* ף;t˜;t<>X;t<.> ף;o<>] ף;B`;>Ra ף;B`;B&>ܺ;o<>9X94DX ף;B`;.> ף;o<(>T;X94<]3>)?B`; #ǘB`;B`;b>HB`;;E>㗾; ף;>;o;m>No;o;Ǻ>󕾦D;o;X>bo;;>Ɣo; ף;+>.o;D;b>o;o;؞>"7 ף;T<>iƒ ף;X948o;;1>ID;B`;)>'o;o8 ף;t D;D; >ǏD;o;~># ף;o;E> ף;o;x> ף; ף;>)D;o;+>o< ף;j>D;D;j>{D;o;g>;B`;j>׆ ף; #ቾD;;U>DLD;t>yo;;='>؇o;;c>Co;;s>lo;;>o;;>ܝo;B`;\>.o;B`;z%>d־1|'־X9<+=f$>1־j<㥛=$>m9׾<1=B$>ؾh<=L$>l׾B`<9=$>>׾/<=%>I־/<= F%>t־<`=[%>վj<= %>IKվj<=%>fվX9<\=%>3վX9Ծ1<1=>"&>*Ծ1< ף=?&>tFԾ ף<㥛=x&>PӾ ף<=ۅ&>SӾ㥛ZҾ㥛UҾ㥛Ҿ㥛iWѾ㥛<%=:'>о㥛<}=y'>hо㥛<}='>Ͼ㥛<}='>Ͼ㥛UϾ㥛{Ͼ ף<}=A(>7оX9uѾh<j=$b*>UԾhx+>Ծ`P=t=M,>Mվ9H=)\=&*>Lо<=)>*̾o==H(>aqȾL=G>(>Ⱦ)\==(>Ǿ'='1>'>ǾB`<-=I&>Ǿ'=m=l&>Aƾ<=&>ƾ<5^='>Nƾžt<=ۅ&>ľB`e<+=0L&>PľD<< &>þB`e<E/þB`e<<}%>>\¾㥛o=9H= $>+=`P=6$>d< #=$>忾h<1,=$>%B`1,= 0=$>սC = 0=/n#>ؼjeX9y ףzǹo=`P= >fj<=L7=c !>췾t<1,=:!>B`e<ŷT<<!>ڷFB`<'=n!>/<+= >$ ף<1< >jitD<;P>o7qB`;o;>QB`; ף;K>u ף;o: ף;t<֭>>;X94蟰B`;X94<>DQ; #<֭>a ף;o<>D;D;>D;o;(>4o;o;>㭾;o;>o<;R>Ut鬾DǀTeDnT窾X94{NB`etqUCf<;>ku<;w>B`; ף;/>B`;o;>o<;h>?X94JT襾o㈥C<;>iB`e<;v>ڏD<;8-> ף #<;> o<;~>Z;;Ed>ݡo; #<> o;T]o;D<>w-o; #qD<rᠾB`e<A+B`;B`eB`;T<1B> ;T,B`;o<>~:B`;C<>ϝB`;CpB`;oV;B`e<|~>+;B`e<>4. ף;X94,B`;X94<>UX94Κtq ף;B`;> ף;tгoMoؘB`;X94fo;B`;>nDF|o o; ף;!>!vo; ף;>~ƕD;o<>"D;B`;E>vD; ף;,e>kԓD;B`;>9o;t]D;B`e<> ף;B`;>ٱo;o;K> o:o;e>0/o;;p>ko; ף; >D; ף;Ș>BCo;o;y>mŎo;o;:z>덾o;D;2>RIo;o;|>猾o;o;d]>(o;o;=>σo; ף;`>,Ԋo;D;j>!o;D;ё>~o;D;û>o;o;>vo; ף;='>!凾o; ף;c>Xo; ף;>Bφo;;>Co;;>to;;\> ao;B`;<%>% ־1<+=r%>վ ף<=@%>վX9<+=W!%>־<-=$>׾< =$>{־<1=s.%>77־cվ<{=%>,վpվԾX9<j=&>\Ծ1_$Ծ1<{=i&>N(Ծ ף< =c&>Ӿ1hӾ ף<-=&>gӾ ףSӾ㥛Ҿ㥛*:Ҿ㥛Ѿ㥛Ѿ㥛<}='>lо㥛<%=)'>о㥛<%=l!(>HϾCξCξ㥛BCϾ1<}=(>ϾX9<)\=9)>о/< ף=)>EѾҾt=/$>$)>Rξhʾ+=I >b(>cɾ<=(>ɾX9<-=,}(>0*ɾ㥛<%='1(>HȾ ף(IǾhH3ƾt=J >ۅ&>ž)\=n>5&> žw==&>ľľt<1,= &>þB`e<)\=%>SþB`e¾u<+=8%>X㥛0/<Y="$>B/< #="$>>j<=$>ſ+=@=[_$>8k1,=@=#>ܽ+=w=">û1\ ף<<o!>/t</<!> 1<+= 7 >F븾w=L7= >nB`xѷj<㥛j[X94<<ⶾt< ף+ #<㥛<{k >(X94< ף<2=!>0Lh<j<=%!>/<7ST< #<>zt: #<;>;o;> h ף; ף;~>Nѱ;B`;> o;o<>9(o;o<>հo;t} ף;t<>\8 ף;B`;>˯o;o;6>Mo;D;Y>9Ѯo;o;>To;o;a>nݭ ף;D;3>jB`;o;ӟ>ooxtt #fD< ף;*>ug,uB`e9DǨX94< ף;1>U #< ף;>3᧾X94<;}>St<;g,>DÞu?C⥾C)yB`e<;v2>뤾D<;>t&;t<:>^; #b ף;X94<>J o֋;t<>; ף;;b>shB`eO頾;o<@>5oƿDBCu/oKoD:X94pB`; ףDX94'tVD;Ce;;C>㚾o2D; #ЙD;;f>D;;!>4o;B`; >Z ;T<]3>D<1<!>Q #Q ף;;|~>Uٗ ף;B`;> ^o;X94<>oؖD;t<>4o;o;>jo;B`;]3>ߔo; ף;y@>D;oSoI;B`;c>\T )o;B`;*>dD; ף;S>D;D;I>D;o;>{D;o;g,>Aj\ɎoG o;o;g>}D;o;>o;D;d]>YL; ף;!>{o;o;4.>cD; ף; >F ף;o<-C>|D;o;F>o;D;>rmo;D;6<>߇o;D;x>So;D;>Bφo;o;>Jo;o;j>o;o;\>>o;;B`%>վ ף<%=j%>}վ ף<%=$%>}?վ ףfվX9<+=]%>վj־^վ<-=c%>Ծ<=%>IԾj<=#&>!Ծj<-=1&>Ծ ף<1=!v&>xӾ ף<=&>\wӾ ף<{=&>Ӿ1<=.&> Ҿ1=DӾ ף*Ӿ ףfҾ㥛<=&>|aҾ㥛<)\='>Ѿ㥛ȵѾ㥛<+=M'>\Ѿ㥛<=?'>rо㥛<='>о㥛ϾC(>/Ͼt<#y=;S(>kϾt<#y=p(>zξt<#y=,}(>jξt.ξt6ξ㥛ξj<=I)>ξ/<9=C+>Ѿ`P=>Q)>{˾h<>')>΍ɾ+=o>)>.ɾB`<=w(>ǺȾ ף;ȾC/4Ǿ ף<}=&>(ƾ/<㥛=&>{ž+==1&>ľ1,=5^=&>þ=`=%>0þ==j%>þ ף2¾ot ף A<}=>$>EC = 0=$>yo=`P=1|$>- P=9H=G=$>|1,=@=A#>ҾQ8=Y=#>_`P=}=4#>Y==3">kHh2 1</< >Gt</<[ >Q1<+=a>踾j< #=>aq޷/<juRX94<<>[εo<㥛<ߦ>};u<>7;o<>s.B`;ottGTӳ #g';o;>sײB`; ף;|>%uo<;ݘ>B`;B`;ݘ>g;o<ݘ>e;o<>  ף;B`;">ϰo;;">pD;o;a>D;o;a>摯D;o;">?D;o;g>o;D;">3;D;>̴B`;o;S>Do?ƬtHP #ϫ #?WD몾T׆D #tdt o7t< ף;؞>ʧt< ף;Gr>p_ #< ף;d>X94tX94D)y #菉D<;>GB`;;x>h;o<>jM; # ף;o<{>o<;|~>b󡾦;;<>ŏ ף;o;>pBX94]B`;X94 ף; ף;>@o#o<;zp>r #)흾o/Q;B`;[>û ף;B`;e>$ ף; ף<>V ף;`D;D<8->]o;X94;j횾 ף;o<>9D;o<>㙾D; ף;>D;;u>y@D;;>=;uzߘ;uOuB`;B`e;o;B`;>痾D; ף;>Wo;o;>`o;t<>o;t@ ף;D]o;ocєo;D;>;B`;>4u<㥛}1 hD;o<>쑾D;D; >>퐾 ף;;>!YD;D;U> o;D;>Z*B`;o;+5>ˎ ף;D;>.9o;D; K>£o;o;x>V ף; ף;>uYD;o; K>D;o;+>Ҋo;o;>6 ף;D;-C>o;o;>0*D;o;)>ࡈD;o;D>@D;o;^>D;D;̴>D;D;x>sD;D;2>D;D;\>rŅo; ף;%>Nվ ף<#y=o%>Ծtվ ף<%=*&>Ծ ףԾ1jԾX9<=%>վj<= &> ^ԾX9ӾX9ZӾX9ҾX9ٙҾ㥛<=&>Ҿ㥛<ʡ=V&>WCҾ ף/Ҿ ף<ʡ=V&>>Ҿ ף<㥛=&> Ҿ ף<=&>dҾ ף<=%'>jѾ ף<=@0'>ϠѾ㥛dѾ㥛"Ѿ㥛8о㥛оC<%=;(>MϾt<=r(>Ͼ ףϾ1^Ͼ1<)\=(>Kξ ףA;o<#y=(> ;tj;X9P̾<j==a)>f̾X9')>"ʾB`(>(Ⱦh< >(>'1Ⱦt==yX(>5Ⱦ ף6Ǿt<}=}'>{ƾo<`P=8'>$žC<j<=p&>ľh<=%>`ľ #==c%>Ӽþ==%>0 þ+==j%>^¾o=Y=+%>h<)\=$>Oh<j<=$>8C =D=$>F'=@=?R$>Ͽ@=/]=P#>= 0==D#>iGa=o=Ѯ">t/]=sh=">jY=}=T5!>]=9H=DQ >GZ<+=>Q㥛</<>)?׸ ף</<u>pT<j<>WtIB`;X94<3m>*B`; #B`;B`e& ף;B`e ף;u<`>Yo;B`e<˄>ڏo;u<ę>yB`;1<ߦ>m;t<>G=X947೾o< #<>'o; ף;K>_;o;m>M ף; ף;/>6걾 ף;;u> ף;B`;>Vo;;*t>@o;;E>eD; ף;|>FD;D;v>ݯD;D;n>ko;o;8J>M ף;D;>4B`;D;J^> ohtt #h"DB`esKTتX94[ #㩾t6voo猨o[%ot8X94u< ף;*> .T< ף;>X94< ף;:>B`; ף;>ho; ף;>3D; ף;>*D; ף;$ >`< ף;;LO>â ף;o:>D #opBD;D;>1o; ף;>$; ף;]>t< ף;s> #Yt;o<>|, ף;B`;/4>io;B`;e>W&D; #<>No;D<>o;t<~>Lo;t<>˾B`;<$ >&B`; ף1 #<㥛D; ף;"l>噾o;B`;Y>jj ף;T<>0o;T<>Ԙo;D<>D;t<>PD; ף;z>ؗo;o;Υ>(ID;o;>1Ӗ;;>(a ף;B`;C>ZD;B`;>o𕾦D;o;R>&So;o;[>^o%utNёt˒DґD;t<>\o;o;>ȏ #D;D;L>o;o;>'ND;;0>ao:o;>1D;o;ʦ>xD;D;2>No;D;w>|ՊD;>wD;o:ʦ>k񉾦D;o:v>{fD;o:">؈D;o:N>LOD;o;<>D;o;>2D;o;3>QD;o;7>rD;o;\>D; ף; %>Rվ㥛epԾtKԾtuԾ ף<}=KY&>Ծ ף<%=4&>!Ծ1<#y=I&>-Ӿ1<}=N&>:Ծ1<)\=<&>J{Ӿ1oӾ1\Ҿ1<+=&>XѾ㥛TѾ㥛uѾ ף<)\=9E'>>о ף7Ѿ ף~Ѿ ף<㥛=%'>eѾ ףѾ ף:Ѿ ףVо ף<='>о ףϾtcϾ㥛<)\=w(>Ͼ1]PϾh<`=x(>^hξ'=t>k(>N;@=(>x(>;h<=(>Ɏ;t̾ ף<=M(>ʾt=J >yX(>dɾ(>@ɾB`<V>(>ɾX9_Ⱦ ףDǾX9<='>ۅƾ/<=†'>Ҍž+=E=H'>Kľ+=C=&>(ľ㥛8gľX9<`P=&>þ1<`P=N%>=þ/0 þo=B`e=3%>b¾C ='=%>!)\=Q8=$>Pt=D=$>`o=D=$>pt=/]=]#>td̽j</<!>Uh/i<1L=xi= >C ='= >+M㥛<<[>X9<+=qr>bo<<`>] #<㥛t ף;tg ף;o<>ܵo;B`;s>dXD;B`;-!>﴾D;o<&6>hD; #<]P>\o;u<ę>?RD;j<>6o;㥛<>_$o<j:oӼB`;D<>~oB`;X94<>; #Ų; #Z ף; #<֭>lo;X94=ձ ף;;>臱o;;g>Xo;;q>ﰾo; ף;g>}o;o;1_>A+o;D;\>9 ף;D;">D;D;P>(ծo\tޭtnX94X94ǀB`eB`eT(X94yt5tzǩoqUo⨾o< ף;>|~ot#DBϦjAH1mʥTso;o;>줾D;o; >oo; ף; > #yt ;o;>Έ;D;I>l;o;s>F_t栾o< ף;s>cB`;o;`>̟o< ף;!>%t<;v>~tҝo< ף;>tAD;o:> ף;o:}>h" ף;o;>o;B`;/>2 D;o<<>o;o<5>_)o;T ף;X94 ף; #<~>X ף; ף;@>晾D;o;8->po; ף;LO>o; ף;{>˘o:;>o: ף;Ǻ>[o;o;>o;o;m>4B`; ף;>o; ף;>AHD;t<(>|;C<> ף;;>4 ף;D;E>ڔo;X94<3P>LB`;u<> #- ף;X94<#>8 ף;o<>VD;D;T>'o;o;g,>R'D;D;V>ID;D;\>ʎD;o:>Yo;o;y>SЍD;o;:z>%@o;o;S> ף;o;>eD;o:i>iD;o;>>Њo;o:>q=D;o:L>CD;o:Y4>D;o:`>uD;o:<> D;o:H>zD;o:>g톾D;o:?5>^D;o:\>)D;o;m%>xվ㥛TtԾtӾt}ӾtjMӾ㥛msӾ㥛<}=&>-Ӿ ףIҾ ף Ҿ1Ҿ1<+=,'>y;Ҿ1<+='>xѾ㥛<+=:'>)Ѿ㥛<+=b'>eоt<=d'>fIо㥛Ͼ1:о1Ͼ1<+=wJ'>hϾ ף<%='>nϾ1;Ͼ1<=t (>Ͼ㥛bϾ ףd;ϾX9<=(>,Ͼ<j=Z )>{Ͼ)\=$>(>ξB`e=T%>i(>{ξ`P=X9>(>H;Q8=y&> (>̾ ף<ʡ=P(>˾/<='>Ⱦj<=333> (>5Ⱦj<=333>C(>$ ȾnȾ㥛Ǿo<`P='>+ƾžhľ+=ʡ='>G=ľC ==Ԛ&>nþB`Mþ<9H=%>-þX9<<%>z¾< #=[%>}¾+=X94=%>*:¾<1,=%>B`?C =X94=ݵ$> #=@=U$>[yu ף<_t<1<!>/iC$ѻC9op%㥛<㥛<>ht湾B`emB`et޷ ף;t<#>Wo;t<+>Ѷ ף;t<>AH ף;B`;z>ӵo;;<>bD;;>fo;o<>`D;t[_D;D<|>_$D;㥛<>곾B`;C<|>帳;o;u<3>B`;TpB`;X94鲾t!orPB`;uQ;o<[B> A #<1<>tt< ףo< ף<">5{B`;o<>B`;o<>moDt+t穮t=X94X94RITܬuoB`e'X94Sy #t肪too5o2ɨo;S #ҧX94wJX94væ #I;o;S>ǥD;o; ^>}?D;o;s>o; ף;4>T; ף;>ڣ;o;P>[ ף;D;>$֢ ף;o;4>I;o;h>xo0B`;D;.>蟠;o;>;o;">3m;D;>ʞB`;D;)>~: ף;o;">#o;o;)>3D;B`;u>o; #<:> D;D<>`D;Tٔo;T<>σ ף;B`e< >sK ף; #<> ף;o<>oo; ף;+>no;D;>D; ף;/>Jo;B`;t>Po;t<>\o:B`;>;SD; ף;I>뗾 ף;B`;9>`;;B&>g햾 ף;o;>ffB`;to;t<> o;t<>;t<_> ף;B`;>D;o;_>`ۿo:o;#>4Ko:o;%z>o:o;>o;o;>Nbo;o;g,>o;D;O>o;o;2>rD;o:+> #no;o:j>،o;o:p>YLo;o:û>=o;o:>2 o;o:>eo;o:='>HD;o:9>jjD;o:'f>܈D;o:4>LD;o:>D;o:>1D;o:b->?D;o:\> \D;D;%> Ծt</]=V&>>ԾCԾt|Ӿt0 Ӿt</]=&>Ҿt</]=]&>-`Ҿ㥛</]= '>Ҿ㥛'Ҿ㥛Ѿ ףѾ ף<=-'>-xѾt<=p_'> оt<=y'>͒оt<=y'>Jо㥛MϾ ף<='>tϾ1<=֨'>DiϾ1nLϾX9ξ㥛<`P=.(> ξ1fξ1ξj=~ϾB`(оC ==e)>VоT=o>)>о'==x(*>Bо 0=>)>ξh<j=3(>˾tʾeȾ@=-2>'>)ǾX94=T%>'>Ǿ<='>)ǾCKǾu<`P=†'>rƾo5)ž<}=r&>ľþ<@=y&>Fþh<Y=&>}¾%u¾o=1,=:u%>o*¾+= #=P6%>)\=B`e=$>]t=B`e=E$>t=Q8=3$>| D=/]=r#>I.T=Ga=3">ĽX9<j<!>u@޻B`e2DEX94< #<K>+MX94< #عB`;o<>GrB`;t<>It4hB`;X94<>ַ ף;t<>W ף; # ף;;>>B`; ף;s>{; #<>!o;o<>`o; #+0o;T&䳾 ף;X94 ף;Dc;u<0> X94!TBB`e<j<>>\X94OXtD<<^>ͰTNbTD<<>鷯X94<<>EX94௾ #<< >t<<̴>܀t<j' #<j<> #˜X943X94 Du=B`eT=X94j #Nt֪tfo7o΍ovt/ #[% #֨t@0B`;D;'>Qo;o;>o;o;>o;o;1> ף;o;CV>Ӥ ף;o;K>i5 ף;o;CV>z ף;o;CV>)" ף;o;X> ף;o;(I>;o;|>u;o;>rᠾ;o;>J;o;>m;o;)>b ף;o;E>4o;D; >o;D;6>o;;fN>o;B`;}> Ҝo;t<>xD;t<>0D;t<>.⛾o;o<>o;B`;>5Fo;;>ߚB`;o<>XVD;o;G>-왾o:D;/>o:o;h\>2o:o;֐>ؘo; ף;>"lD;o;E> ף;;>o<;>`oPX94< ף;>y>og~;X94<>\放D;B`;>D; ף;m>x D;D;aq>Qfo;o;>o:D;&>Yo:D;o>𑾦D;D;F>Ho;D;>D;o; >ZD;D;>3mo;o;i:> ף;D;>.9;D; >- ף;o;HP>O#D;o:x>!o;o:>Co;o:v>mo;o:> ܊o;o:9>=ID;o:[> o;o:u>B&D;o:>cD;o:>D;o:3>yD;o:?5>솾D;o:\>?D;o;4&>Ծt<`P=&>=,ԾCӾC</]=B&>VӾC</]=]&>Ӿt</]= '>Ҿt</]=%'>eҾt</]=,'>Ѿ㥛<Y=9E'>"Ҿ㥛Ѿ㥛Ѿ㥛rоtоt<=ޓ'>bоt<=K'> о㥛<+=g'>Ͼ ף<+='>xϾ ףS?ϾX9zξ1-!ϾX9'Ͼ<%=(>3mϾ/<=(>Ͼ<ʡ=(>Ͼ<-=ض(>ߦϾ}=C>^)>8о=!r>PS+>4Ӿu=->G,>վsh=j<>)>xEоP=5^='>Ih˾X9<=2Z'>Zɾ`P=$>M'>DȾ9H==i'>ǾP=S=F|'>ƾt== =it'>ƾj<=W'>rƾ10dž/<ʡ=&>ľo={=&>\ľ< 0=]&>>þh{Iþ<9H=ۅ&>¾B`¾X9¾/<#y=j%>gB`<}=H%>Th<Y=E$>3㥛DQP=hm=N#>˄D=q=">"X94='=#g!>鼾t<㥛< >X94ZdX94< #<> >X94󓺾X94>X94عt=a #< #<֭>X績o;t<>4ho; ף;C>jo: ף;P>?oVo;B`; >WD;;>ԵD;B`;>o;D<>˹o;X94<5 >*o;o<0>G= ף;o泾 ף;t⒳ ף;X94<>ᲾTWu<1<4>臱X9<<8>͒< #=[>ioc<'=4.>ctu<+=>,B`e<+=ё>T<)\=ʦ>hyT8JDjX94Y #׮ #<X94</X94<X94<<>|X94 T£B`ezB`e D㍬X94; #tM-ooSo婾os # #t5oa ף;D;>ro;o;>po;o;>襾 ף;o;>h ף;o;!>U ף;D;|> ף;o;'> ף;o;)>h ף;o;6>$֢;o;>E;o;)>ȵ;o;>!;o;S>;o;> ף;o;>:X ף;o;L>9ўo;D;>aD; ף;>o;;/4>ۊo;B`;Q>%@D;ooD;o<>D;o<>>?o;B`;>m盾o;B`;k>㥛D;D;->& ף; ף;>o;;+>0o;B`;T:>o;o;Q>o;o!͘o;;>e ף; ף;> ף;o;>l;o;7>ٖ;D;>Z/X94ӕo;o;>&So;o;>"X94l[B`;o;G>o;;"l>4D; ף;(>2o; ף;l >aTo;D;>o:D;>o;;>o; ף;X>D;D;>鷏o;o;>+o;o:a>|D;o:>_o;o:#>qo;o:`>܌o;o:i>No;o:8>,o;o:)>&o;o:>>o;o:n>o;o:<>so;o:4>∾D;o:&>;SD;o:U>]ćD;o:0>~5D;o:\>rD;o;4&>5AԾC<9H={&>TԾCӾCJ{ӾC</]= '>ZҾC</]=H'>Ҿt</]=2'>4Ҿt</]=TR'>!Ѿt<Y=F|'>PѾt<Y=b'>Ѿ㥛<Y=ޓ'>uо㥛<Y='>XsоC оt оt1Ͼ㥛Ͼu5 ϾtϾ1LTϾB`QϾo=5^=(>#Ͼ+=Q=(>ݘξQ8='1> (>hyξ@=>8)>cϾo=T=p)>bоC = =Ĕ(>|ξ<#y=;S(>;<%=Z'>˾ ף<`P=b'>Oʾ ףZ ɾ ף5Ⱦ/<=H'>wǾC ==\='>ƾu</<@0'>Rƾ<=,'>žh<=&>0džB`mľB`[_ľ</<]&>HþWþj</]=V&>¾ ףWC¾1<}=%>㥛<1,= $>^׿u</<+0$>׾T<j<#>"C<j<">D<,<<`!>_|D㥛aX94X94ʺCfB`e<;">\o; ף;a>Qo; ף;֭>vX94;o<>!巾 ף;;hy>Bo;;q>o;B`;Ll>䵾;T<ݘ>"o;B`;m>s.D;D<>o;o<>Ӥo;o<>5A ף;B`;BC>u峾 ף;o<>jMD|a㥛#g</<>!Yo=w=>Y=%=C>JF #=hӟX94=o=$>㬾t=ʡ=ڬ>!</]=>XX9&p/Ūh<1=lx>Ҫ<=vq>,tìT>X94<'=8>X94ꭾD<)\=?W>󭾦D<<,>B`e<<>⭾B`eCsT[X94٬X94Ra #m竾tσo9 tЛo@ #;© #M #ۨtW`B`;D;8>Dݧ ף;D;>TRo;o;>o;o;>8 ף;o;o> ͥ ף;D;> F ף;D;>Τ ף;o;">5A ף;o;> ף;o;E>;o;o>B`;o;>;o;Þ>#g;o;Þ>ɠ;o;}>3 ף;o;> ף;o;8>l&o;D;>Ao; ף;E>Ho;B`;>o;oaD;o[D;o<^c>o;oFo;B`;Wx>RD; ף;z>'D;D;Ԃ>o;o;k> o;D;:>8o;o;> D; ף;>k ף;B`;@>#󘾦;o; >iD;D;5> tTRo< ף;[>ͯ ף;o;CV>\Uo;D;D;o;Q>Y;o; >;C6B`eӼD Po;D;R>sגD;D;s>czo;D; m>o:D;p>o:o;>c o:o;C>}o:o;'>o;o;>go;o;?>ݎo;o:g>Ro;o:>o;o:E>)o;o:>_o;o:>1o;o:>duo;o:)>ފo;o:`>Qo;o:>Mo;o:H>0D;o:>D;o:> D;o:%>4D;o:\>򆾦D;o:d&>g`ԾC<Ӿo<9H= &>SӾC<9H=&>6YӾCB ӾCczҾCѾC</]=~'>xѾt</]=ޓ'>*RѾt<Y=S'>3оt<Y=)'>9оt<Y=g'>*Ͼ㥛<Y=(>0GϾT_ξT<@=M(>ξB`eξB`e<}=j(>UξCsϾ<=(>HϾo=9=U(>fϾ+=x=)>о 0=J >j+>Ӿo=}?5>b(>ξ== =(>!ξw="=(>%ξX9<#y='>û̾Ck̾㥛<9H=u<&>˾t=5^=@%>ɾGa=+>G%>YȾ<\=_{&>;SȾj<}=&>ǾD<1<&>\ǾD<㥛< '>ƾo< ף<'> Tƾj</]=y&>mžuB`žX9<+=Q&>ľj<=X&>Oľ ףþt¾X94}¾T< #=%>=㥛RC<@=%>(X9< #=<%>>t<<:$>2TtB`eyT< #<0!>ἾTʦB`e%Cn #CoC<;R>~tTX94m #츾;;>< ף;B`;> ף;B`;>;X94uܵo; #<">qD;X94Wo;t<> o;oo;oN(tX94< #<>C㥛͒C =<>>xi=Y=$>2殾<<0>'NC =/< >ް)\=B`<>[ӬP=w=>A/<%==>{t==t>Ro=<>mt=<>̩@=Q8=[>y@w="=>j<=R>}\u</]=g>_T< 0=0>D< #=M->;X94< #=>'fX94kT<<>>KT<<#>OD<<C>DX94|, #t:tիtk`ot #n #1t+o;D;l>& ף;D;Uj> ף;o;|> ף;o;> ף;D;ޫ>a ף;D;> ף;D;v> ף;o;>;o;ޫ>;o;>[;o;}>ŢB`;o;ʉ>y;;o;l>n;o;|> ף;o;>x ף;o;Þ>럾o;o;Þ>܀D; ף;>o;;>o;B`;g>TD;o<|>_D;o<'> o;o[o;B`;C>D;;(I>D;D;S>MD;o;fN>o;o;s>ao;o;̗>횾D;D;A>fD;o;>#ۙ ף;o;>VHB`;o;>t< ף;e>l!;o;/4>;o;>ۖ ף;o;`>iD;o;E>ho; ף;>IKo;;>YT;D;.>;o;q> ף;o;Q>:o;D;>o;D;qU>Qo:D;>䑾o:o;|>W[o:o;1>ɐo;o;I>9o;o;O>Ϊo;o;2 >o;o:σ>o;o:> o;o:y>2wo;o:m>e䌾o;o:ʦ>Uo;o:>jo;>+o;o:N>1o;o:> o;o:k>%zo;o:]>F눾D;o:>YD;o:>ɇD;o:O>=D;o:&>ԾC<j<=ͯ&>Ӿo<9H=&>1Ӿo<9H= '>Ҿo<9H=8'>LҾC<9H='>"OҾCѾC</]=(>eоX94HоX94<+='1(>оTϾT<+=yX(>ϾTξX94kξB`eӇξo<1,=(> ξt˜ξ㥛ξ<=b(>*tξP==A(>Uξ<=i(>Ͼ+=X9=M(>[;xi= +>b(>G ξw=l=3(>%@; ף\r̾o˾o(˾㥛<`P=%>гɾ)\==j%>(ɾB`eT:ȾX94DǾT<1<&>^cǾB`e< ף<&>1ƾj<<&>WƾtžX94ľX94<1<&>þX94þo0¾;u<%>F_ ף;u<%> ף;u< %>ro;B`e<%>ΪB`;t<[%>D<1<$>HB`e< ף<$>FT=T ҼB`eǀX94, #λX94e;B`; >R򺾦DtD4tX94Etu;o<>>ɷ;t<D>R,D;t<>輶o;B`;>Po;X94<%>oo; #<1_>o;t<ݘ>Do;tʴt< #<[B>X9X94J{usײt ף/<1<>W쯾9H==> +=o=>B`<<>?B`<<>2wC =)\=,e>P=B`e=l >,/ٔo=o=n>UB`<Л+=/<> t=h<=>VH1,=h=>}< ף=>ȩo)D</]=> #<`P=>T #<@=>û #<'=9>!D>ìDǬX94ʦX94V #)to(tNtRtj٪ #lx #t@B`;D;P> ;D;0>z ף;D;0>駾 ף;o;_>b ף;o;e>V ף;D;>e ף;D;$>ܥ ף;D;2r>dX;o;+>6Ȥ;o;>4;o;>^B`;o;pw>B B`;o;P>w;o;W>㡾;o;l>o ף;o;Uj>fID;o;N>؟D; ף;>jo;B`;[>Wo;B`;S> ȞD;o<>V}o;o<>Xo;o< >SНo;;>ToD; ף;t$>D;D;>峜o;o;!>6o;o;(I>{o;D;[>2o;D;S> ף;D;X>n;D;/4>B`;D;>;o;E>r ף;o;>◾ ף;D;v>TRD;D;1>eǖo;D;> .o;D;1>";o;?>B;D;>;D;= >G;D;>-ϓ;o;b>S ף;D;<>vo;D;C> o:D;[>'o:o;a>o:o;>o;o;h>$o;o;V>o;o:\>bo;o:}\>ݎo;o:>Po;o:C>o;o:-C>1o;o:>힌o;o:}>o;o:g >{o;6>抾o;o:n>Uo;o:>*Ɖo;o:>8o;o:>ΥD;o:*>o;o:gC>D;o:&>˞ԾCΈҾo< ףSҾo<㥛<'>6Ѿo<㥛<'>\Ѿo<㥛оo оt< ף(>}о #xEоX94ϾDqrϾD ϾX94uξD<=(>mξT<1,=(>vOξt;B`<1=i(>;+="=(>;/ ξ/jξ/<5^=(>;;(>s̾1<='>˾o==9E'>,ʾo==j'>ʾ㥛ʾ1|ɾ<㥛=&>5ɾuȾu<< &>B>Ⱦ㥛Ǿ ף+ǾX94ƾT<㥛<<&>Jž #"&>1žB`eþo<)\=xz%>¾oD ף;X94jo; #3D;o<3%>YD;B`;%>o;oqo⽾ #<;1|$>'fD< ף;:$>T<;ms#>_o0t< #Gɻ ףA}uP #e ף;B`;B >iRT< #<>йT<;j>ED/ # o< #<>o;o<>:o:;h>Ѷo;t<̴>Z;B`e<:> ﵾB`;t<>nt 崾D< #<>aD< #< {>ut<1<>İ@=t=>B 0=t=~>9t=h<>Dj<j<>fڮht)<<0>fk<<.>Ь<//B`<<|~><)\={>2o=P= ><=>< #=J>_<{=>jo<}=>MDZ #<Y=O>Gtj٪t<`P=6>ܫ #<j<=>fX94<1,=.>2D #+tS謾t嬾t:zt t #D #|ժtWt婾;D;;>Z ף;D;;>pΨ ף;D;>< ף;D;5>;D;M>6 ף;D;W>l ף;D;Uj>Z/ ף;o;d@>ܝ;o;\U>_ ;o;J>sB`;o;W>᣾B`;o;E>jMB`;o;(>;o;5>';o;J>d ף;o:AH>o;o;AH>8D; ף;:]>0/o;;t>ǟo;B`;+> D;o<>'D;o<>۞o;o<1>o;B`;>.o;;)> D;D;>D;D;>o;o;>UD;D;> ף;D;>t;D; >횾;D;>QB`;o;>zǙB`;o;?><;o;?>ض ף;o;F>J)o;o;b>kD;o;>o;o;[>W o;D;Þ>㈕;D;>C;D;>o;D; ^>x ;D;q> ף;D;>q8D;D;0>$֒o:D;c>jo:o;F>6ꑾo:o;>\o:o;S>ɐo;o;>:o;o:%>Ϊo;o:2>o;o:>>o;o:>_o;o:(>yo;o:Ae>錾o;o:F>uYo;o:0>Gɋo;o:/>z6o;[>o;o:W>o;o:>o;o:>#o;o:*>W`D;o:6>ZԇD;o:{&>ԾCҾo< ףOXҾoѾB`;C<'> Ѿo<㥛<='>/Ѿo<㥛<(>оt&оtϾtbϾX94< ף<(>QϾTξX94rξD6ξC ξ<-=')>7;B`<=)>p;!;/<=%(>;u< 0=Ou(>̾B`e<=;(>E*̾D<<(>˾T<<'>PS˾t< 0=p_'>>ʾ #=E=B'>Bʾo=O='>rɾ ף< 0=O'>xɾC</< '>o/ɾ1<<'>+Ⱦ㥛*WȾoϽǾt!Ǿoƾo žožoyľDľo<jEþ #ǝ¾ol¾oo; ף;e%>\8D; ף;%>cD; ף;N%>iB`; ף;;%>罾X94t9B`e<;d#>ļB`e#>N ףT˾o< #<3 > cD溾 ף!Jt<;D>u<;>C@o;;>ηo;o<>[; #VX94Dn #ӵX94DDTKu ף-h<㥛<>6u=1,=c>/<<@>)<mt=<:;>>< j'f1<<Ǻ>.ʬ<+=>:B`B`<)\=> $BX9<+=(> 㥛<< m>VHCRo/B`e[X94I #bt<Y= {> t<Y=6> t<Y=>X94<`P=B&>{D۫X94< 0=K>jtgt<:zt<j<>ЬtRat #Ș #2 #yo1;D;m>Ƣ ף;D; >I ף;D; >;D;>$ ף;D; >4;D;%;>E;D;>pw;o;>ޥ;o;k+>IKB`;o;8>˹B`;o; >&B`;o;>1;o;y>e;o;r>j ף;o;(>ס ף;o:-&>Zo;D;(>jD; ף;5>o;B`;J>\8D;oh蟾D;o<ʉ>o;o<>_o;B`;[>o; ף;Þ>'ND;D;ޫ>d̝D;D;ޫ>mVD;o;>Μ ף;D;>@;o;>{;D;z>&B`;o;+>B`;o;2r>A;o;t>߉ ף;o;> ף;o;e>pD;o;Uj>ڗo;o;>Qo;o;$>ЖD;D;+>:] ף;D;+>Jҕ;D;>ZG;D;>Ŕ;D;JA>5A;D;>PǓ;o;֐>@jD;D;>]o:D;Gr>㪒o;o;>M2o:o;>Ϡo;o;=I>o;o;>Áo;o:>4o;o:U>do;o:n>fڎo;o:>Lo;o:C>o;o: K> 3o;o:>+o;o:[>o;o:>σo;o:N>튾o;o:^>[o;o:k>ȉo;o:x>:;o;o:b->\o;o:=*>D;o:t$'>/Ծt<1,=B'>Ӿo< ףxҾo1%ҾB`;C<'>ѾB`;C<(>c ѾB`;C< F(>͒оo0оoCϾt<㥛<(>)\Ͼ #< ף<(>ξD< ף<(>kξD<<2)>qξC<)\=I)>=ξ ף<="T)>ξj;<j<=(>;o</]=(>ʦ̾ ף<+=U(>˾B`<Y=W`(>M-˾<=@(>Y˾T.˾X94<<'>ʾD<<'>%ʾonʾɾD<<9E'>:;ɾuȾo</<\='>nȾTȾt4Ǿoƾo%;ƾoYžoYľo#ľo<;b%>Tþo< ף;->%>¾;o;%>Ѯ¾o¾B`;o+jD;o;%>[o;o; %>;o:q%>x ף;o;%>ooND8ۼC'1uu&p<㥛<>κ6h~/Iu< #(; #? #ŷB`;t<>8B`;oB`;o<>0t홵X94< #<>j ףZW 0=/<؞>̱@=<>MJ@=+= m>Eذj\8j<<+>G1X9<j<>hy㥛<<<>K孾1Wh<)\=>?Ƭ/j<)\=t>=X9 ף<+= >7C,o</<1>;SB`e<T<<>D<0LX94<+=f>Ʀt<@=sc>t<Y=K>T: #D᩾T</]=>hD<Y=>CX94@ #<)\=N>YL #<U #<<>> #uYX94' #t #9 B`;D;>I;D;>-쩾 ף;D;X>k;D;>⨾ ף;D;'>U;D;4>Ƨ;D;W >:;D;^>;o;> B`;o;>B`;o;y>B`;o; >'kB`;o;>Zأ;o;e>E;o;^>Ѯ ף;o:>'o;o;>o;o;;>OD;; > D;B`;0>D;o]o;oo;o<>o;B`;|>Oo;;2r>sD;D;pw>|D;D;e>,D;o;(>;o;d@>V;o;W>;o;d@>wB`;o;\U>fB`;o;R>ښB`;o;d@>[;o;=>Ι ף;o;=>Co;o;0>D;o;d@>&o;o;2r>o;o;o>6o;D;2r> ף;D;t>;D;?>;D;> ;D;)>;D;P>n;D;i>o;o;>t^o;D;_>o;o;T>so;o;>葾o;o;6>Xo;o;I>ɐo;o;>:o;o:>o;o:T>o;o:>Oo;o:>o;o:r3>yo;o:\r>B쌾o;o:F>d]o;o:>6͋o;o:6>W>o;o:fk>먊o;o:ӟ>o;o:A>Qo;o:>o;o:>jD;o:mT'>aԾt<'=p_'>;Ӿo< ףҾo<1<0'>YҾoѾB`;C<.(>HѾB`;C<;S(>yоoLоoϾt<㥛<(>3mϾX94<1<})>5 Ͼu<ξT</<^)>hyξT!ξt</};u);X94< ף<2(>Kv̾t<㥛E̾u<<(>6˾B`e.˾ ף;T~ʾT</BʾX94<jʾtFɾX94<1ɾt<tɾoɾB`e<<-'>ȾB`e<CȾT< ף<-'>Ǿt2ZǾX94Ǿ㥛RƾtvTžt< ף;&>Hľt< ף;G%> 8ľt< ף;V%>ɫþt< ף;]%>þB`; ף;P6%>n¾; ף;$>.; ף;h$>~B`; ף;%>ގ;o;%>h迾;o;G%>nL;D;B`%>uo!jB`e<;#>~RCGX9< #<#g!>P=uft< # 㥛ohFB`eԹT< #<>8CĔo.oB`; #<+>X94< #< K>zTDw+=tF9H=1,=M>죳Q8=/<>t=h<>f'=<9>۱P=+=%z>V/1<LX9<<>jB`</<Ǻ>JF<<>Aԭ ף@M㥛?Ƭ ף#2jǫ/Zdh< 0=+> j@t<)\=>3Puh\T</<1>D<<#> D<yX94<<Q>UX94<] #L #W DTʨD騾D[DD<'=>:DìX94X94:X94 īt?W;D;Lq>ͪ ף;D;ni>28 ף;D;)y> ף;D;6>( ף;D;m>;D;>b;D;'>Ԃ;D;>;o;J>gB`;o;>ץB`;o; >DB`;o;>B`;o;X>;o;Q>f ף;o;>I ף;o: >wo;D;>D;;>D;B`; >VD;o<>o;o<(>o;o]o;o o;B`;d@>ȟo;o;%;>nD;D;H3>잾o;D;>q;o;>ܝ;o; >\Z;o;>ǜB`;o; >`B`;o; >+;o;>;o;O> ף;o;>߉D;o;>D;o;k+>4ho;o;J>!嗾D;o;:]>eo;D;:]> ף;D;_>c;D;>'ڕ;D;L>M;D;>Ŕ;D;}>X9;D;oG>擾o;o;>po;D;J>33o;D;[>o;o;>0o;o;!>o;o;m>o;o;y>Áo;o:>o;o:?>fo;o:~>ێo;o:>'No;o:>7Ío;o:%X> 3o;o:>ʦo;o:>o;o:>o;o:[>o;o:ۊ>bgo;o:>Wωo;o:>=o;o:>o;o:f'>վt< #=ޓ'>ӾtӾt<1<'>Ҿo<㥛< (>ѾoshѾoоosоt< ף<2(>ϾX94<j<(>=~ϾTϾo<<i)>ξ;/Yξt;D<1<$)>O#;o̾B`;X94<(>#̾B`;D< $(>̾Tٔ˾X94<㥛<+(>˾D< ף<;(>^ʾB`;DʾT<ɾB`e<<(>mɾuNɾ㥛2ɾoZ ɾoȾu<j< '>CȾD@ȾB`;T<:'>DǾuƾD*ƾ #< ף;F&>:užtľD[_ľ #þ ף;N%>`<þ ף;xz%>Ѯ¾X94M2¾; ף;->%>7o;D;B`%>o;o;,%>,B`;o;&S%>xt 㥛<;#>ŽB`< #<a#>lX9`C ףuYhNC =C<>@jO̺<<g>y1Bu81< ף.DrCطT`D'¶u-& ף<㥛t㴾</<߉>h #='=T>帳h< /<<>j<+=c>ӱB`<:<<>.o< ף t<ę<_﮾B`b-jCs< 0=8->51<<>Ь㥛j1< #=a7 <9H=̗>Zd<9H=T>Gt)?B`eaT<aD<<1>ͦD<<> X94<[X94<<5^>X94<<`>B`e<+=m>uT< #=>vT=TsDdB`e<=>2ɨB`e<#y=i>9B`eT</< .>X94ё #t;D;D> ף;D;a2> ף;D;ni> ף;D;>Gr;D;>⨾;D;6>*W;D;>ƧB`;D;>>B`;o;=>ޫB`;o;X>B`;o;>3B`;o;>wB`;o;>a;o;=>̣ ף;o:>`< ף;o;ܝ>F΢o; ף;>HmD;;X>D;o<.>ʡD;ok}o;o<>o;o<4>] ף;o< >xo;;y>\8o;D;^>ƿo;D;>0G;o;6>ı;o;>b-B`;o;{>囝B`;o;>B`;o;>B`;o;>B`;o;>v;o;>%难 ף;o;>\o;o;J>ЙD;o;>)?D;o;r>Ko;o; .>8-D;D;J>o;D;l>)o;D;J>.;D;>O;D;>";D;> ;D;JA>^;D;>- ף;o;Ǻ>aÓD;o;]3>to;D;c>o;o;h>wo;o; >葾o;o;X>W[o;o;>y̐o;o;>Ko;o:Zd>o;o:>Oo;o:>N o;o:8>}o;o:x>0o;o:>Rao:o:>$ыo;o:tA>FBo;o:^>o;o:>!o;o:>߉o;o:}>Ko;o:_'>:վtKԾT&ӾDLӾX94<j<@(>h?Ҿt<㥛 Ѿo9(Ѿt<㥛<(>lо #<jϾokϾB`;<[)>FϾo<㥛ξB`; ף'Nξt<j<"T)>;X94̾ #k̾B`;X94˾B`; #<[(> ˾X94˾o<<.(>f˾B`e<<.(>oʾX94<<&(>!<ʾX94<<;(>ɾ #< ף%zɾu<<(>CɾB`e<<'>8ɾ #MȾtpȾTȾD;u<2'>JȾB`;㥛<'>?ǾD< #<&>ƾo< ף;&>$ƾt< ף;u<&>žD<;%>#žoľD ľDwþt¾;o;M%>>\¾o;o;IK%>o;o;+%>;D;_ %>dB`;D; $>鷿oݾu< ף;1#>g򽾖C =D1Eʦt=t<!>%X9Do=㥛2B`< ף㥛"úo< ף<&>ujju!͸㥛< ף<|>bh<<(>Z ףO<<>2r1<㥛<">䵾C&tC< ף<1>x <h1h?j<X9/ ף<<_>iou<㥛<>᯾u< ף<>Ut<jˮ/<=/>!t=`P=D>lC =Y=1B>lϬo=`P=I>٬X91<=>ĬX9άX9p<%=>,ԪX9po_T<<.>ԂD</<%z>ȦX94<X94<}X94<<_A>᤾X94<bJX94<<.s>!Td飾T<'=>W!T5o<#y=t>˥u<=5>xuBoDLt<#y=(>˫B`e<'=>􉬾 #tB`;D;p>;D;>] ף;D;">,Ԫ ף;D;<>=I;D;s>;D;ni>+;D;>A;D;v> B`;D;{>#B`;o;>B`;o;>xbB`;o;D> ͥB`;o;vT>?:;o;ni>Ӥ ף;o;)y>g ף;o:s>1o;D;n>-D;;{>ǢD;B`;>%uD;o<{>>o;to;o|o;o<>2o;B`; >,o; ף;>.o;D;vT> ;D;0d>;o;S\>zB`;o;Y>qB`;o;">❾B`;o;>UB`;o;>̜B`;o;X>E;o;X>˾;o;><1 ף;o;>D;o;6>D;o;>o;o; >D;o;>aqD;o;8>o;D;M>it ף;D;M>V񖾦;D;Þ>ff;D;>'ڕ;D;>U;D;)>Ɣ;D;>m ף;o;u>D;o;B&>o;D;g>9o;o;>o;o;>/o;o;C>o;o;'>o;o;>bo;o:\>o;o:aO>go;o:L>ݎo;o:>vOo;o:#>o;o:Z>6o;o:N>io;o:>o:o:E>o:o:c>o;o:s>lo;o:>#ۉo;o:>Lo;o:X'>YվtP־/^Ծt< #=(>ҾX94<Ѿt<㥛<9(>GѾX94<<9(>xEоX9^ϾX9"qϾo;X9<)>PϾ;<(>*tξ ף;T<(>!ξo9b;t$̾og̾o<j<(>˾D<㥛<(>m˾t˾B`;X94oʾ;T<+(>GZʾ #<1<3(>&ʾD<'ɾo<gDɾ #< ף<^K(>ɾ #<㥛<+(>ȾtȾB`;t<'>CȾo@Ⱦt< #< '>ǾTbǾDvƾ #>"ƾožD<ž #jľtX9ľtFþtE/þ;o:P%>x¾o;o;+%> ף;D;f$>_FB`;D;$>o鿾X94/B`e<;">L1Hh< ףd]㥛6ͻ㥛&p)\=B`溾<1< ף<">J㥛 B`eC<<>AX9</ t<㥛<>eʶC =t=i>af1< ף1<㥛<>3㥛1<㥛L<<>ᲾB`0/}y<=>Lð<BjJo<j<J>B`eo</<+>N 1<)\=>+=q=>ᬾo=xi=u></]=>B쬾j<j<=[>0j<9H=t> /@<`P=[%>NoT:TwD</S˦X94<<9> .X94<<>NX94<<$>2X94<<f>sX94<)TcbD<)\=f> D< 0=>8gCPoDC<=>AH㥛妾1J) ףCCNX94<)\=>a7 ף;D;>" ף;D;>;D;#->;D;}?>7;D;Y>Gr;D;>QtPoogoץo}?oB`;P='>B`;P='>;P=D>죾o; ף;a2>D;B`;I>q8D;oo;t<>xo;t<ܝ>> ף;o<>X⡾ ף;o<>xo;;v>] ף;D; >⠾;D;i>];o;>˟B`;o; >HB`;o;D>RB`;o;S\>,B`;o;a>sB`;o;v>B`;o;v>2;o;">;o;g~>xo;o;D>%难D;o;>[D;o;Q>Ιo;o;>VHD;o;>(D;o;#>5o;D;=>0 ף;D;%;>m9;D;?>? ף;D;>>";D;L>;D;>> ;D;>ݵ ף;o;"l>tFo;o;>擾o;o;R>o;o;>So;o;>wo;o;g,>둾o;o;m>`o;o;ڬ>͐o;o;c>=o;o:i:> o;o:t>-!o;o:>o;o:'>o;o:-C> {o;o:>0o;o:b>co;o:L>Ջo:o:tA>5Fo;o:<>o;o: >x(o;o:S>ėo;o:Q(>)yվtվ<j<=8)>Ծ㥛Ӿo<+=(>.ҾTTҾTw-ѾB`e<<(>HоX9<j<=(>Ͼj"qϾo;C<(>ξD;T<(>vOξo;X94<(>;B`;o<})>wg;;C<#(>$̾okH̾o8˾B`;t<(>FB˾ ף;B`;9(>"ʾtNEʾ #<㥛ɾ #wɾX94</<%(>9ɾ;o<(>.ɾX94<<9(>ȾX9< 0=(>zȾ㥛<h\ȾoȾo< #<(>Ǿo< #<'>sǾ #CVǾX94,Ǿ; ף;2'>xbƾB`e< #<'>ž #<;&>bžtľtepľtþthþB`;o;W!%>¾;D;<%>o*¾B`;D;$>ZohX94{C< #vuѽB`e)T컾/</<*R!> $1< ף<) >뺾B`eyh<<>9B`<<">ٹC1<+=J^>K㥛< ף'1㥛<1<\r>%#C =C =>Dn1<㥛=j<==>j9H=B`e=>Q8= 0=>ɳ<1<*>{I㥛< ףo<1<0>WCt<.B`Z< 0=>;ǰB`<1,=Ǻ>:Xh< #=@>p뮾C<<+>mB`e٭o</<>[ ףᬾB`</]=m9>/iB`<+=>(~<=`>1C1<Y=/4>2 1ԩo<=*>UT<<7>=򧾦D</<<>/4 #</ #<饾 #<7O #<t</<>Rt<<)>,ooٙX94X94/<`P=K>4B`<%=*>vTB`B`<)\=+>/ /!<)\=>h#j$1<%=v>J&㥛't,)o*B`e,D- #<'=>.o0opAB`;P=>ʥB`;=>SB`;= >/ݤB`;=!>of;=!">;=-#>x;w=:$>. ף;w=F%>n ף;w=p#>0 ף;)\=!>I֡ ף;o=>{;B`<>%!;<>Ơ;1l;Co;T<>ݶB`;t<>K\B`;;>B`;o;%>BvB`;o;7>Ꝿ;o;0I>W_;o;F[>Ӝ ף;o;]m>kH ף;o;s> ף;o;>1o;o;> o;o;>D;o;>D;o;> D;o;4G>D;o;>BD;D;>D;D;O>o;D;F>go;D;>o;D;i>|o;o;>o;o;D>Bxo;o;>>o;o;>uo;D;3>^󒾦D;D;>qD;D;>𑾦D;D;d!>znD;o;p>쐾D;o;@>8ko;o;>鏾o;o:_>go;o:>ڎo;o: >^Mo;o:>o;o:^>2o;o:>zo;o:>/o;o:>㊋o;o:^>o;o:Ǟ>Lpo;o:>㉾o;o:SUB_NAMEALraymndPARENT CAwest CREATED 95-06-29UPDATED S_LAT AN_LAT AE_LONG мAW_LONG @ALAT_INC >@LONG_INC>@GS_COUNT/IҼ S@#y=>yռAS@hm=Nb>zؼwS@/]=+>EۼT@`P=m= ߼@T@D=x=8eT@Q8== =hLT@'==p輂T@=-=;뼷T@)\=w=T@O=w ȲV@C >㥛= #V@n>1=~ ~V@>5^=bj V@ >=E 3V@'>=7ҼES@Ga=C >ռgS@Y=>DؼS@Y=>Dݼ[T@C =-=^.77T@X9oeU@-=Z>[U@=M>mU@ ף=F>"1%V@9=j<>NoGV@=C>?"OV@Ga==y;V@P=t= U@㥛\V@hm=T1,='V@D>}==EV@Nb>X9=7T ضV@w>)\=xIV@=<׆ PV@-=< ^V@=t=ʼ}V@P>%=cV@d;>=V@K>L=N cV@>=%$Ҽ~S@9H=#=6׼dS@ 0==[ټS@ 0==)ݼT@<ʡ=ἂ9T@X9U@=Fs>a`U@v=fff>F=U@-=bX>͒ V@T=9H>-&V@@=w=%uV@=+=#U@j #=V@R>xi=t$V@(>B`e= V@T>Ga=S" V@`=1< V@=t =z68V@->l=(I׼>V@㥛>9=W%W@V> =EҼS@X94=d;=Yؼ S@+==ڼkT@{U@ ף=B`e>U@=u>&U@Q=d;_>:V@Y=5^=V@'=O=5~U@<1,=X 4U@B`exi={V@=/<V@1=t<6 |V@{=tQ8=V@/]>j<=`ZW@%>㥛=eѼS@=\=+ټT@C =Y=aۼ T@<#y=ݼ{1T@X9QT@t<?V@D;D;1%nQV@B`; ף; F%_V@X94<;&oV@X94<;&V@X94<;V&͒V@D ףV@D;t<V@o; #<2V@ ף;D"&V@T"&V@X94yV@ ף;B`;0V@o; ף;V@D;D;֋!V@ ף;o;#"V@ ף; ף;($ɰV@; ף;e%иV@ #"V@;;"V@D< #U@o; ף;OU@o; ף;/`U@o; ף;TzpU@o; ף;U@B`;t?V@;o<£ RV@o;B`;bV@o;B`;.sV@o;o<V@o;o"IhW@ #<;#}yW@ #<;$W@ #< ף;77&cW@ #< ף;?'CW@ #< ף;'˾W@T< ף;6Y#W@o=o<ͼ>"T@X9HW@ # V@tW@]PW@@=<uW@/U@D;o;MUPU@D;o;aU@o; ף;usU@o; ף;uU@o;;׿뼖U@o;;:&U@o;B`;VU@o;B`;U@; #@LONG_INC>@GS_COUNT=/o@ ף;o< =Go@C1,=D=@o@ ף;t1,==TRo@o;B`;=do@o;B`;8=vo@o;B`;k`=ao@o;B`;ͪ=o@o;B`;5=o@o;B`;X=o@j<=t<ޥ=o@j<=t<+=o@j<=t<[=A+p@>'=L=?p@>1,==eo@o;o<=xo@o;o< q=o@o;o<@ޫ=o@o;o<5F=o@o;o<7=o@j<=t<=o@j<=t'=s=Pp@%>'=l>=ro@o;o<=˄o@o;o<=No@o;o<=o@o;o<=o@o;o'=9Ѯ=o@o;o=o@o;t<=o@o;t<=^o@o;t'=x=o@o;B`;p= o@o;o #==p@%>'=H=o@D;B`;t=o@o;B`;=&o@o;B`;r=o@o;B`;佪=no@j<=C #=*=Bp@%>'=Lð=o@D;B`;0=o@D;B`;=4o@D;B`;=o@j<=C #=;8=p@J > #=Pp=wo@D;B`;=o@D;B`;O=*o@D;B`;<=p@j<=C<=p@j<=C<&=)p@j<=Cw=cF=p@J > #='=o@o;;ŏ=o@D;B`;= o@j<=Cw=T=%p@J > #=W=o@t< # #=͘=p@J >1,=/=,o@B`eX94=_=yp@㥛Q8==p@=p@=xi=K<=p@=xi==q@F=hm=8=q@o>@=='p@h<<= )p@j<=C9H=B=`9p@)\=h<Ͱ=>\p@Ga=Q8==Dnp@Ga=Q8==p@/]=j<=TR=p@=B`e==p@=B`e=="p@=xi== p@=xi="=jq@=xi=ž=j0q@F=hm=4+=;q@>`P=r=Kp@ #=+=W[=jp@Ga=Q8=[=(~p@Ga=Q8=e¯=Op@Ga=Q8=ŧ=zp@=B`e==p@=B`e=1=p@=B`e=⒣=Fq@=xi=="q@=xi=˄=)?q@F=hm=Q=Mq@>Y=M=]p@Q8=P==wp@Ga=Q8=&=p@Ga=Q8=qZ=fp@Ga=Q8=猨=,p@=B`e==p@=B`e=$=Cp@=xi=i5=q@=xi=Hm=0q@=xi=`=Lq@F=hm=m=_q@>/]=}г=Hpp@L='={=p@Ga=Q8==p@Ga=Q8=%=Op@=B`e==p@=B`e=ߧ=p@=B`e=F=0 q@=xi=פ=%q@=xi=9=)?q@=xi=iW=Zq@F=hm==zrq@>B`e==p@Ga=Q8=x=kp@}=j<=Di=Ap@)\=D==p@-=9H=Ҫ=p@{=L==q@j=T=u<=q@=Y=A=r7q@"=/]= =HQq@=Ga=Z=kq@#=xi==q@>hm=END proj-9.6.0/data/tests/simple_model_degree_3d.json000664 001754 001755 00000002163 14764566077 021743 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "horizontal_offset_unit": "degree", "horizontal_offset_method": "addition", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "3d", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "bilinear", "filename": "tests/simple_model_degree_3d_grid.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] }proj-9.6.0/data/tests/simple_model_degree_3d_grid.tif000664 001754 001755 00000002072 14764566077 022560 0ustar00e012349e012349000000 000000 II* 0RS j   w  3D grid2x2 DEFORMATION_MODEL NONE degree east_offset degree north_offset metre vertical_offset v@f@fV@#  mtr@@TXAWGS 84|?@@@?@@@?@@@?@@@proj-9.6.0/data/tests/simple_model_degree_horizontal.json000664 001754 001755 00000002130 14764566077 023620 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "horizontal_offset_unit": "degree", "horizontal_offset_method": "addition", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "horizontal", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "bilinear", "filename": "tests/simple_model_degree_3d_grid.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] }proj-9.6.0/data/tests/simple_model_metre_3d.json000664 001754 001755 00000002161 14764566077 021622 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "horizontal_offset_unit": "metre", "horizontal_offset_method": "addition", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "3d", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "bilinear", "filename": "tests/simple_model_metre_3d_grid.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] }proj-9.6.0/data/tests/simple_model_metre_3d_geocentric.json000664 001754 001755 00000002163 14764566077 024026 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "horizontal_offset_unit": "metre", "horizontal_offset_method": "geocentric", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "3d", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "bilinear", "filename": "tests/simple_model_metre_3d_grid.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] }proj-9.6.0/data/tests/simple_model_metre_3d_grid.tif000664 001754 001755 00000002070 14764566077 022437 0ustar00e012349e012349000000 000000 II*0RS h   u  3D grid2x2 DEFORMATION_MODEL NONE metre east_offset metre north_offset metre vertical_offset v@f@fV@#  mtr@@TXAWGS 84|?@@@?@@@?@@@?@@@proj-9.6.0/data/tests/simple_model_metre_horizontal.json000664 001754 001755 00000002126 14764566077 023506 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "horizontal_offset_unit": "metre", "horizontal_offset_method": "addition", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "horizontal", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "bilinear", "filename": "tests/simple_model_metre_3d_grid.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] }proj-9.6.0/data/tests/simple_model_metre_vertical.json000664 001754 001755 00000001740 14764566077 023127 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "vertical", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ -180, -90, 180, 90 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "bilinear", "filename": "tests/simple_model_metre_vertical_grid.tif" }, "time_function": { "type": "constant" } } ] }proj-9.6.0/data/tests/simple_model_metre_vertical_grid.tif000664 001754 001755 00000001354 14764566077 023746 0ustar00e012349e012349000000 000000 II* S < T  b VERTICAL grid2x2 DEFORMATION_MODEL NONE metre vertical_offset v@f@fV@#  mtr@@TXAWGS 84|@@@@@@@@proj-9.6.0/data/tests/simple_model_polar.json000664 001754 001755 00000002163 14764566077 021237 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "horizontal_offset_unit": "metre", "horizontal_offset_method": "geocentric", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [ 0, -90, 360, -89 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "3d", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ 0, -90, 360, -89 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "geocentric_bilinear", "filename": "tests/simple_model_polar.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] } proj-9.6.0/data/tests/simple_model_polar.tif000664 001754 001755 00000003010 14764566077 021040 0ustar00e012349e012349000000 000000 II*V -- Generated by cloud_optimize_gtiff.py v1.0 -- -- Metadata size: 001411 -- X^2n=RSc؅  k   polar test grid2001:01:01 00:00:00Land Information New Zealand (2013): Released under Creative Commons Attribution 4.0 International^@?V?_ #  r@@TXANZGD2000| 3D polar geocentric_bilinear DEFORMATION_MODEL NONE metre east_offset metre north_offset metre vertical_offset 1!xogH}zȑ cY3xsenxpOA ::Kߏ[9KM?xs`P=&0T .@proj-9.6.0/data/tests/simple_model_projected.json000664 001754 001755 00000002120 14764566077 022072 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:2193", "target_crs": "foo:ignored", "definition_crs": "EPSG:2193", "horizontal_offset_unit": "metre", "horizontal_offset_method": "addition", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [ 1500000.0, 5400000.0, 1501000.0, 5401000.0 ] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "3d", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [ 1500000.0, 5400000.0, 1501000.0, 5401000.0 ] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "bilinear", "filename": "tests/test_3d_grid_projected.tif" }, "time_function": { "type": "constant" } } ] } proj-9.6.0/data/tests/simple_model_wrap_east.json000664 001754 001755 00000001740 14764566077 022107 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [-194.2, -37.5, -193.8, -37.2] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "vertical", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [-194.2, -37.5, -193.8, -37.2] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "geocentric_bilinear", "filename": "tests/simple_model_wrap_east.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] } proj-9.6.0/data/tests/simple_model_wrap_east.tif000664 001754 001755 00000002201 14764566077 021711 0ustar00e012349e012349000000 000000 II*V -- Generated by cloud_optimize_gtiff.py v1.0 -- -- Metadata size: 001128 --  $Lh2p=Sc؅  g  2x2 vertical test grid east of -1802001:01:01 00:00:00Land Information New Zealand (2013): Released under Creative Commons Attribution 4.0 International?fffffFh33333?B?_ #  r@@TXANZGD2000| VERTICAL grid2x2_east bilinear DEFORMATION_MODEL NONE metre vertical_offset xgxyaC;<׿@proj-9.6.0/data/tests/simple_model_wrap_west.json000664 001754 001755 00000001726 14764566077 022141 0ustar00e012349e012349000000 000000 { "file_type": "deformation_model_master_file", "format_version": "1.0", "source_crs": "EPSG:4326", "target_crs": "foo:ignored", "definition_crs": "EPSG:4326", "vertical_offset_unit": "metre", "extent": { "type": "bbox", "parameters": { "bbox": [525.8,-37.5,526.2,-37.2] } }, "time_extent": { "first": "1900-01-01T00:00:00Z", "last": "2050-01-01T00:00:00Z" }, "components": [ { "description": "test", "displacement_type": "vertical", "uncertainty_type": "none", "extent": { "type": "bbox", "parameters": { "bbox": [525.8,-37.5,526.2,-37.2] } }, "spatial_model": { "type": "GeoTIFF", "interpolation_method": "geocentric_bilinear", "filename": "tests/simple_model_wrap_west.tif" }, "time_function": { "type": "step", "parameters": { "step_epoch": "1900-01-01T00:00:00Z" } } } ] } proj-9.6.0/data/tests/simple_model_wrap_west.tif000664 001754 001755 00000002201 14764566077 021737 0ustar00e012349e012349000000 000000 II*V -- Generated by cloud_optimize_gtiff.py v1.0 -- -- Metadata size: 001128 --  $Lh2p=Sc؅  g  2x2 vertical test grid west of +1802001:01:01 00:00:00Land Information New Zealand (2013): Released under Creative Commons Attribution 4.0 International?fffffn@33333?B?_ #  r@@TXANZGD2000| VERTICAL grid2x2_west bilinear DEFORMATION_MODEL NONE metre vertical_offset xgxyaC;<׿@proj-9.6.0/data/tests/subset_of_gr3df97a.tif000664 001754 001755 00000006217 14764566077 020605 0ustar00e012349e012349000000 000000 II*  ] RSu  @ X  a Derived from work by IGN France. Open License https://www.etalab.gouv.fr/wp-content/uploads/2014/05/Open_Licence.pdfGeocentric translation from NTF (IGNF:NTF) to RGF93 (EPSG:4964). Converted from gr3df97a.tif GEODCRS[&quot;NTF cartesiennes&quot;, DATUM[&quot;Nouvelle Triangulation Francaise&quot;, ELLIPSOID[&quot;Clarke 1880 (IGN)&quot;,6378249.2,293.466021293627, LENGTHUNIT[&quot;metre&quot;,1]]], PRIMEM[&quot;Greenwich&quot;,0, ANGLEUNIT[&quot;degree&quot;,0.0174532925199433]], CS[Cartesian,3], AXIS[&quot;(X)&quot;,geocentricX, ORDER[1], LENGTHUNIT[&quot;metre&quot;,1]], AXIS[&quot;(Y)&quot;,geocentricY, ORDER[2], LENGTHUNIT[&quot;metre&quot;,1]], AXIS[&quot;(Z)&quot;,geocentricZ, ORDER[3], LENGTHUNIT[&quot;metre&quot;,1]], USAGE[ SCOPE[&quot;unknown&quot;], AREA[&quot;FRANCE METROPOLITAINE (CORSE COMPRISE)&quot;], BBOX[41,-5.5,52,10]], ID[&quot;IGNF&quot;,&quot;NTF&quot;]] 4964 GEOCENTRIC_TRANSLATION x_translation y_translation z_translation ??@@F@K#  r@@TXARGF93|R'-2oXɟC'/o̟C'/o¤ПC3'33o֟C'X9oܟC%'Ã@o¤C'ToCZ'DobC')oC'L7p9CJ'þoŸC'ìoLǟC'ÓoϟC'òoyٟC',oCX'q=o=C' WošC'oC'jo¤C%'hpC'ünƒC?'Þn¨ƟCs'ÑnbПCH'nPݟC'æoC`'X9oBC'RoCd'Ëlo…C'7oC7'ÖoTCo'nZğCN''n‹̟C۹'3n“؟Co'n`C'n²C''owC'ÏBoC%'îGo¤C'w>o`C5'Jo‹C'wnȟCո'{nmןC'ynºCo'PnC'n–Cq'Ço…C'ìoC-'Ån?C=''nCy'ÉnƒCӭ';_nhџC'shnC')\nCb(ÜDn¶C'vnRC'+oC\'nuC'ÉAnbC'ænºC' n{C')\n¤C'äpnmC'}nbCN(/n)C'ÇnmC'n}C%'onwC'F6n}Ch'æn°C'êqnCd'unC'shnC'yinXC')nC'þn‡C 'RnfC'shn=C (#[n¤C(Ã@n˜C (Zdn'C5'Ã@nC}'ìnCZ'P nJC'= n°Cj'ìn´C5')nºC'33n“Cm(X9nwC!(F6nC(R8n`C'ym#C'm‹Cb'!m‰C'm¨C(êmdC(mjCN(m#C (mC(m9CL(nCproj-9.6.0/data/tests/test_3d_grid_projected.tif000664 001754 001755 00000002754 14764566077 021621 0ustar00e012349e012349000000 000000 II*V -- Generated by cloud_optimize_gtiff.py v1.0 -- -- Metadata size: 001420 -- LR2`=RStcz؅  ]: 2x2 test grid2001:01:01 00:00:00Land Information New Zealand (2013): Released under Creative Commons Attribution 4.0 International@@`6A@@pTA?0 0#  )#NZGD2000 / New Zealand Transverse Mercator 2000|NZGD2000| 3D grid2x2 bilinear DEFORMATION_MODEL NONE metre east_offset metre north_offset metre vertical_offset xc59cr؞H*xgcrxY&g4xgxyaC;<׿@proj-9.6.0/data/tests/test_gridshift_projected.tif000664 001754 001755 00000003315 14764566077 022263 0ustar00e012349e012349000000 000000 II* b@2NRSC    *#j\Extract from work by Czech Office of Surveying and Cadastre (CUZK)2024:02:02 00:00:00S-JTSK / Krovak East North (EPSG:5514) to S-JTSK/05 / Modified Krovak East North (EPSG:5516). Converted from table_yx_3_v1710.dat by switching to easting/northing rather than original westing/southing. Note also that an extra offset of -5000000 in easting and northing must be applied Czechia biquadratic 5516 HORIZONTAL_OFFSET -5000000 east easting_offset -5000000 north northing_offset -9999@@@@`~"1#  )#S-JTSK / Krovak East North|S-JTSK|=o<=D;h=Tm=j=DS=B`=X94x=;l=X9<#=t<=X9T=> #=O > #=%>P==)\=B`=C =G=P== #=$>L=>Q8=>X94=m=@==9H=h=9H=S=T==/]=proj-9.6.0/data/tests/test_hgrid.tif000664 001754 001755 00000000772 14764566077 017342 0ustar00e012349e012349000000 000000 II* zRS   " br??@K@#  mtr@@TXAWGS 84|aDaFDRF(EDFaE6FE(FEFE FE E EE FEFE(FE6FaEDF(ERFDaFaDproj-9.6.0/data/tests/test_hgrid_big_endian.gsb000664 001754 001755 00000001160 14764566077 021462 0ustar00e012349e012349000000 000000 NUM_OREC NUM_SREC NUM_FILEGS_TYPE SECONDS VERSION SYSTEM_F SYSTEM_T MAJOR_F MINOR_F MAJOR_T MINOR_T SUB_NAME PARENT NONE CREATED UPDATED S_LAT AN_LAT A+E_LONG ؜W_LONG LAT_INC @ LONG_INC@ GS_COUNTFaaFRFD(F6aF(ŌFŨF E E E EE(Ea6E(DDRDaaEND proj-9.6.0/data/tests/test_hgrid_degree.tif000664 001754 001755 00000001250 14764566077 020645 0ustar00e012349e012349000000 000000 II* (RS      degree degree ??@K@#  mtr@@TXAWGS 84|>@?p@@?`@?P@?@@?0@? @@@@@ @?0@?@@?P@?`@@?p@?@>proj-9.6.0/data/tests/test_hgrid_extra_ifd_with_other_info.tif000664 001754 001755 00000003254 14764566077 024634 0ustar00e012349e012349000000 000000 II* zRS   " br??@K@#  mtr@@TXAWGS 84|aDaFDRF(EDFaE6FE(FEFE FE E EE FEFE(FE6FaEDF(ERFDaFaD zRS    `px:??@K@#  mtr@@TXAWGS 84| latitude_offset longitude_offset   RS   4 t latitude_offset_accuracy longitude_offset_accuracy ??@K@#  mtr@@TXAWGS 84|proj-9.6.0/data/tests/test_hgrid_little_endian.gsb000664 001754 001755 00000001160 14764566077 022216 0ustar00e012349e012349000000 000000 NUM_OREC NUM_SREC NUM_FILEGS_TYPE SECONDS VERSION SYSTEM_F SYSTEM_T MAJOR_F MINOR_F MAJOR_T MINOR_T SUB_NAME PARENT NONE CREATED UPDATED S_LAT AN_LAT +AE_LONG W_LONG LAT_INC @LONG_INC @GS_COUNTaFaRFDF(6Fa(FF F EE E EE(aE6(EDDRaDaEND proj-9.6.0/data/tests/test_hgrid_lon_shift_first.tif000664 001754 001755 00000001374 14764566077 022615 0ustar00e012349e012349000000 000000 II* |RS   $ dt east longitude_offset latitude_offset ??@K@#  mtr@@TXAWGS 84|aFaDRFDDF(E6FaE(FEFE FE EEE EE FEFE(FaE6F(EDFDRFaDaFproj-9.6.0/data/tests/test_hgrid_positive_west.tif000664 001754 001755 00000001374 14764566077 022325 0ustar00e012349e012349000000 000000 II* |RS   $ dt latitude_offset west longitude_offset ??@K@#  mtr@@TXAWGS 84|aDaDR(EDaE6E(EE E E FF(F6FaDF(RFaFaproj-9.6.0/data/tests/test_hgrid_radian.tif000664 001754 001755 00000001250 14764566077 020650 0ustar00e012349e012349000000 000000 II* (RS      radian radian ??@K@#  mtr@@TXAWGS 84|5;5=5< =PwV<5z=5Xr(B\v,F`z0Jd~4Nh??fV@#  mtr@@TXAWGS 84|x  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx1 0&FpP?`dD: VCH%: \~Hq?7_˙9w3G< k>%#LfVny{n-&FDDDDD^!&x  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnx  Omnproj-9.6.0/data/tests/test_hgrid_tiled_separate.tif000664 001754 001755 00000004320 14764566077 022400 0ustar00e012349e012349000000 000000 II*h =B@C@D$E$RS  * Z ''y'''''''''''''''''w'''''''''''''''y<c&Mt#Jq 4[??fV@#  mtr@@TXAWGS 84|x1 Om @x1 Om @x1@E'T(@Av ~ )"  0êHs_;C 5%d]Z_[2j^~=gw[:|}QVBx1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1@E/TQ/ ))HH` 3 pNw#5enjd!qΘOsk̷?Zкv>Bx1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @x1 Om @proj-9.6.0/data/tests/test_hgrid_with_overview.tif000664 001754 001755 00000001540 14764566077 022315 0ustar00e012349e012349000000 000000 II* c=RS   . n~??@K@#  mtr@@TXAWGS 84|xc`Hta`Htc`x!ȍဆ+ ?ѕ႙ÂWP|+)7G\Ի2(`$2 d&l v&}& =BCDERSx10!wH@ a\`WUs\f )proj-9.6.0/data/tests/test_hgrid_with_subgrid.tif000664 001754 001755 00000015437 14764566077 022120 0ustar00e012349e012349000000 000000 II*   ]  RS    FV~ CAwest 1 HORIZONTAL_OFFSET west UUUUUU?UUUUUU?\UUUUUI@#  Uuor@TXANAD27|=x=Au?W=u=q=+p >ym?W>sKkmV>k|'&>jj+>2j(=Iz.R=x=:@t=r<1=vp_{>&nP>Sj#>ai,#>'Nj$>3j1=xTs=w\=itl=Or =%ry;>oD>9l[%>zk*&>k#>Fj˾+=we=vɓ=@s=er=~q5>o> vo{I#>_lw%>7k)>oj:=u?W[=t`=as!=Xqi=+p>in>Yme)>ffl(>k(>+j?<|tW=)s=q=p=o_= nNE >Zm')>&k.9.>\j+>Fjew<[sRD=+rT=%p'=oY=Ho$=fnH=mm>l#>PkM'>J)j8<1r|=qƗ=p=/oqɱ=vna=/mf=~m=+lq8=xk(=zkD;=q=np=YoԚ=nH=mΥ=l=kb=j=jU=iD=pD]=&oe=Xsn园= mZ=Nk= kb=bj=i"=f1i =h   _   2 RS ( @  p   ~ Derived from work by Natural Resources Canada. Open Government Licence - Canada: http://open.canada.ca/en/open-government-licence-canada2019:12:09 00:00:00NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Converted from ntv2_0.gsb (last updated on 1995-07-05) CAeast 1 4269 HORIZONTAL_OFFSET latitude_offset east longitude_offset UUUUUU?UUUUUU? TF@#  Uuor@TXANAD27|):>F|?zE>c(?A> ?=>?;>?8<>7?/Q=>?U=>?^=>3 ?<>4"?(> ?:1>W?8>*t?8>[%?;>A?<>?| @> ? )B>?0A>M?@>*o?.>ӟ ?"0>a?Z6>Z*?G >>?u>>?2>>;?=>?>>z?,C>d?^C>{?0> ?1>|?:3>??>ۅ?j?>?>>?Ae<>?C>>/?@>n?D>C ?y2> ?w3>e?>3>y?Z3>B?i<>rP?ę?>?Z?>&6?!Y@>?A>%?|D>J "?L6> ?44>D ?Bx4>ę?5>?7>o?[?>Nz?@>B?%A>@?}@>-?cC>q"?5> ?ep4> ?jM3>W ?*8>+?;>.V? =>O?)@>?B>v?B>LO ?E>YQ#?%]3>x( ?6>r3 ?_8>?+5;>&?<><?>>4?@>?A>:?D> ?kC>#?і3> ?oG8>~?lx:>+?-C<>?D;>E ?>>?oA>i:?A>?[C>΍!?F>nn$?3> ?06> ?_8>?=;>?K:>,?/Q=>:?A>=?E>H?†G>"?II>$?  8RS 8 P  q  ALbanffCAwest ??VUUUU\I@#  Uuor@TXANAD27|=qZ=kq =HQqA=r7qu<=q=qҪ=p=pDi=Apx=kp=p=zrqiW=Zq9=)?qפ=%qF=0 qߧ=p=p%=Op=p{=p}г=Hppm=_q`=LqHm=0qi5=q$=Cp=p猨=,pqZ=fp&=p=wpM=]pQ=Mq˄=)?q="q⒣=Fq1=p=pŧ=zpe¯=Op[=(~pW[=jpr=Kp4+=;qž=j0q"=jq= p="p=pTR=p=p=DnpͰ=>\pB=`9p=(qG =\ q蟠=\qx=p?=pj=xp#=׆pr=rpK=!=p=p\==ۅp#=Tp=Bp=.p`=*p=p߿=qJ^=ph=vp ף=zpj=ގpI=yp c=Gp/=?5p=h"p=p_=ypF=ps=p=ph=_p(=p]=Npŭ=y;pӇ=N(p:=#p=qp/=,o͘=pn= p2==ۢpS=Dp~=tp\=Bp(=Z/pK=p˜=- pEG=oW=oT=%pa=Kp =Kp2=|p= hp ī=e6p=#pB=p= oŏ=o'=ocF=pL=p]=^pH=npGZ=y;p&=)p=p<=pO=*o=oPp=wo;8=pFB=p.=~tp.=^prܩ=,p=psK=p=o=4o0=oLð=o*=BpU=ypL=_pS=NpgD=pd=N p佪=nor=o=&ot=oH=o=p%=hpa={Np=Opض= ps=o =Woŭ=oX=9op= ox=o =tp=[pę=_Apq=p3=jo=oJ=o=^o=ol>=o9Ѯ=o=_bpF=Lpl&=4pަ=!p?=JoC=ro=o=o=No=˄ol>=ros=Pp=28pj=lpu<=o=o7=o5F=o@ޫ=o q=o=xo=eoL=?p[=A+p+=oޥ=oX=o5=oͪ=ok`=ao8=vo=do=TRo$՗={-p=no=XoU=WoE =Vo=o@=]oҪ=wok`=eow=&SoD=@oƗ=pΙ=Cp֛=oݝ=oC={o=of=Lo=vo=_o =Go=/o     RS ` x  r ONtrontoCAeast ??"TJF@#  Uuor@TXANAD27|H36>% ?AH6>Hm ?R6> ?pw6> ?6>V ?L6> ?6>J ?$6># ??6>f ?6> ?xb6> ?2r6>5^ ?N6>D ?+6> ?[6>C ?6>) ?g6>Z ?6> ?67>s ?"6>F ?6>u ?i6>K ?6> ?Þ6> ?6>" ?6>Ih ?6> ?7>' ?'7>M ?Y7> ?F6>a ?$6> ) ?$6>m ?F6>) ?Þ6>I ?6>3 ??6>x ?6>˾ ?6> ?6>G= ?Uj6>x ?o6> ?Uj6>*: ?:]6>y ?W6>E ?P6> ?xb6>B ?o6>n ?o6>X ?P6> ?O6>I ? 6>z ? 6>u ?46>@ ?6>[| ?46> ?r6> ?46>=D ?5>A} ?e5>4 ?5>X ?^5> ?e5>W ?C5> ?'5>=I ?e5> ?5> ?5> ?ղ5>5 ?`5>&p ?e5>% ?m5>{f ?ղ5> ?5># ?5> ?5>iR ?5> ?`5>r ?`5> ?ni5>- ?5>? ?65> A ?5>z ?5> ?t5> ?ܝ5>& ?"5>Z ?s5> ?5> ?0d5> ?C5>?5>& ?5>A ?5> ?5> ?5> ?{5>5 ?Lq5>` ?a5> ?ni5> ?proj-9.6.0/data/tests/test_hgrid_with_subgrid_no_grid_name.tif000664 001754 001755 00000015437 14764566077 024621 0ustar00e012349e012349000000 000000 II*   ]  RS    FV~ HORIZONTAL_OFFSET west UUUUUU?UUUUUU?\UUUUUI@#  Uuor@TXANAD27|=x=Au?W=u=q=+p >ym?W>sKkmV>k|'&>jj+>2j(=Iz.R=x=:@t=r<1=vp_{>&nP>Sj#>ai,#>'Nj$>3j1=xTs=w\=itl=Or =%ry;>oD>9l[%>zk*&>k#>Fj˾+=we=vɓ=@s=er=~q5>o> vo{I#>_lw%>7k)>oj:=u?W[=t`=as!=Xqi=+p>in>Yme)>ffl(>k(>+j?<|tW=)s=q=p=o_= nNE >Zm')>&k.9.>\j+>Fjew<[sRD=+rT=%p'=oY=Ho$=fnH=mm>l#>PkM'>J)j8<1r|=qƗ=p=/oqɱ=vna=/mf=~m=+lq8=xk(=zkD;=q=np=YoԚ=nH=mΥ=l=kb=j=jU=iD=pD]=&oe=Xsn园= mZ=Nk= kb=bj=i"=f1i =h   _   2 RS ( @  p   ~ Derived from work by Natural Resources Canada. Open Government Licence - Canada: http://open.canada.ca/en/open-government-licence-canada2019:12:09 00:00:00NAD27 (EPSG:4267) to NAD83 (EPSG:4269). Converted from ntv2_0.gsb (last updated on 1995-07-05) 4269 HORIZONTAL_OFFSET latitude_offset east longitude_offset UUUUUU?UUUUUU? TF@#  Uuor@TXANAD27|):>F|?zE>c(?A> ?=>?;>?8<>7?/Q=>?U=>?^=>3 ?<>4"?(> ?:1>W?8>*t?8>[%?;>A?<>?| @> ? )B>?0A>M?@>*o?.>ӟ ?"0>a?Z6>Z*?G >>?u>>?2>>;?=>?>>z?,C>d?^C>{?0> ?1>|?:3>??>ۅ?j?>?>>?Ae<>?C>>/?@>n?D>C ?y2> ?w3>e?>3>y?Z3>B?i<>rP?ę?>?Z?>&6?!Y@>?A>%?|D>J "?L6> ?44>D ?Bx4>ę?5>?7>o?[?>Nz?@>B?%A>@?}@>-?cC>q"?5> ?ep4> ?jM3>W ?*8>+?;>.V? =>O?)@>?B>v?B>LO ?E>YQ#?%]3>x( ?6>r3 ?_8>?+5;>&?<><?>>4?@>?A>:?D> ?kC>#?і3> ?oG8>~?lx:>+?-C<>?D;>E ?>>?oA>i:?A>?[C>΍!?F>nn$?3> ?06> ?_8>?=;>?K:>,?/Q=>:?A>=?E>H?†G>"?II>$?  8RS 8 P  q  ??VUUUU\I@#  Uuor@TXANAD27|=qZ=kq =HQqA=r7qu<=q=qҪ=p=pDi=Apx=kp=p=zrqiW=Zq9=)?qפ=%qF=0 qߧ=p=p%=Op=p{=p}г=Hppm=_q`=LqHm=0qi5=q$=Cp=p猨=,pqZ=fp&=p=wpM=]pQ=Mq˄=)?q="q⒣=Fq1=p=pŧ=zpe¯=Op[=(~pW[=jpr=Kp4+=;qž=j0q"=jq= p="p=pTR=p=p=DnpͰ=>\pB=`9p=(qG =\ q蟠=\qx=p?=pj=xp#=׆pr=rpK=!=p=p\==ۅp#=Tp=Bp=.p`=*p=p߿=qJ^=ph=vp ף=zpj=ގpI=yp c=Gp/=?5p=h"p=p_=ypF=ps=p=ph=_p(=p]=Npŭ=y;pӇ=N(p:=#p=qp/=,o͘=pn= p2==ۢpS=Dp~=tp\=Bp(=Z/pK=p˜=- pEG=oW=oT=%pa=Kp =Kp2=|p= hp ī=e6p=#pB=p= oŏ=o'=ocF=pL=p]=^pH=npGZ=y;p&=)p=p<=pO=*o=oPp=wo;8=pFB=p.=~tp.=^prܩ=,p=psK=p=o=4o0=oLð=o*=BpU=ypL=_pS=NpgD=pd=N p佪=nor=o=&ot=oH=o=p%=hpa={Np=Opض= ps=o =Woŭ=oX=9op= ox=o =tp=[pę=_Apq=p3=jo=oJ=o=^o=ol>=o9Ѯ=o=_bpF=Lpl&=4pަ=!p?=JoC=ro=o=o=No=˄ol>=ros=Pp=28pj=lpu<=o=o7=o5F=o@ޫ=o q=o=xo=eoL=?p[=A+p+=oޥ=oX=o5=oͪ=ok`=ao8=vo=do=TRo$՗={-p=no=XoU=WoE =Vo=o@=]oҪ=wok`=eow=&SoD=@oƗ=pΙ=Cp֛=oݝ=oC={o=of=Lo=vo=_o =Go=/o     RS ` x  r ??"TJF@#  Uuor@TXANAD27|H36>% ?AH6>Hm ?R6> ?pw6> ?6>V ?L6> ?6>J ?$6># ??6>f ?6> ?xb6> ?2r6>5^ ?N6>D ?+6> ?[6>C ?6>) ?g6>Z ?6> ?67>s ?"6>F ?6>u ?i6>K ?6> ?Þ6> ?6>" ?6>Ih ?6> ?7>' ?'7>M ?Y7> ?F6>a ?$6> ) ?$6>m ?F6>) ?Þ6>I ?6>3 ??6>x ?6>˾ ?6> ?6>G= ?Uj6>x ?o6> ?Uj6>*: ?:]6>y ?W6>E ?P6> ?xb6>B ?o6>n ?o6>X ?P6> ?O6>I ? 6>z ? 6>u ?46>@ ?6>[| ?46> ?r6> ?46>=D ?5>A} ?e5>4 ?5>X ?^5> ?e5>W ?C5> ?'5>=I ?e5> ?5> ?5> ?ղ5>5 ?`5>&p ?e5>% ?m5>{f ?ղ5> ?5># ?5> ?5>iR ?5> ?`5>r ?`5> ?ni5>- ?5>? ?65> A ?5>z ?5> ?t5> ?ܝ5>& ?"5>Z ?s5> ?5> ?0d5> ?C5>?5>& ?5>A ?5> ?5> ?5> ?{5>5 ?Lq5>` ?a5> ?ni5> ?proj-9.6.0/data/tests/test_hgrid_with_two_level_of_subgrids_no_grid_name.tif000664 001754 001755 00000006660 14764566077 027546 0ustar00e012349e012349000000 000000 II*     RS h   ( HORIZONTAL_OFFSET west B@2@@d@T@#  mtr@@TXAWGS 84|?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@?@   ( RS      HORIZONTAL_OFFSET west 4@$@@e@U@#  mtr@@TXAWGS 84|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  RS  (  X    HORIZONTAL_OFFSET west &@@UE@#  mtr@@TXAWGS 84|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@proj-9.6.0/data/tests/test_hydroid_height.tif000664 001754 001755 00000001752 14764566077 021236 0ustar00e012349e012349000000 000000 II*    =S   VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL hydroid_height ??I@sx IHUaNjFq"$h}|߽>CdmRȬiaCbFA( \ qTЄa!ARSK 9v0HTs!6ҘkB#"D iMPf'!ģXӆU(*tLx_ XEں . 9ryrQBﺲ 1+`Tõ1KZJQEZ7;± a2FCܨ؞dRRRp2k\,˚proj-9.6.0/data/tests/test_nodata.gtx000664 001754 001755 00000000150 14764566077 017521 0ustar00e012349e012349000000 000000 @J@?U?±±±±±A A ±±A A ±±±±±proj-9.6.0/data/tests/test_vgrid_bigendian.tif000664 001754 001755 00000000656 14764566077 021361 0ustar00e012349e012349000000 000000 MM* n@S ΄ 懯  Vf??@@K#  @rtmAXT@WGS 84|?@@@@@@@AAA A0A@APA`ApAproj-9.6.0/data/tests/test_vgrid_bigendian_bigtiff.tif000664 001754 001755 00000001070 14764566077 023042 0ustar00e012349e012349000000 000000 MM+ @S ` x  臱WGS 84|??@@K#  @rtmAXT@?@@@@@@@AAA A0A@APA`ApAproj-9.6.0/data/tests/test_vgrid_bigtiff.tif000664 001754 001755 00000001070 14764566077 021042 0ustar00e012349e012349000000 000000 II+ @S ` x  WGS 84|??@K@#  mtr@@TXA?@@@@@@@AA A0A@APA`ApAAproj-9.6.0/data/tests/test_vgrid_bottomup_with_matrix.tif000664 001754 001755 00000000732 14764566077 023724 0ustar00e012349e012349000000 000000 II* @S؅  B ?@?J@?#  mtr@@TXAWGS 84|PA`ApAAA A0A@A@@@A?@@@@proj-9.6.0/data/tests/test_vgrid_bottomup_with_scale.tif000664 001754 001755 00000000656 14764566077 023514 0ustar00e012349e012349000000 000000 II*HPA`ApAAA A0A@A@@@A?@@@@ @S >  V @J@?#  @TXAmtr@WGS 84|proj-9.6.0/data/tests/test_vgrid_deflate.tif000664 001754 001755 00000000656 14764566077 021045 0ustar00e012349e012349000000 000000 II* z4=S   " br??@K@#  mtr@@TXAWGS 84|x  x DA"(]>~f@qusxzy;9+ proj-9.6.0/data/tests/test_vgrid_deflate_floatingpointpredictor.tif000664 001754 001755 00000000646 14764566077 025715 0ustar00e012349e012349000000 000000 II* z,=S   " br??@K@#  mtr@@TXAWGS 84|xgd`phpph`x( @0proj-9.6.0/data/tests/test_vgrid_float64.tif000664 001754 001755 00000000756 14764566077 020721 0ustar00e012349e012349000000 000000 II*@nS    Vf??@K@#  mtr@@TXAWGS 84|?@@@@@@ @"@$@&@(@*@,@.@0@proj-9.6.0/data/tests/test_vgrid_in_second_channel.tif000664 001754 001755 00000001170 14764566077 023062 0ustar00e012349e012349000000 000000 II* RS X p  q geoid_undulation ??@K@#  mtr@@TXAWGS 84|?@@@@@@@AA A0A@APA`ApAAproj-9.6.0/data/tests/test_vgrid_int16.tif000664 001754 001755 00000000616 14764566077 020376 0ustar00e012349e012349000000 000000 II*n S    Vf??@K@#  mtr@@TXAWGS 84| proj-9.6.0/data/tests/test_vgrid_int32.tif000664 001754 001755 00000000656 14764566077 020400 0ustar00e012349e012349000000 000000 II* n@S    Vf??@K@#  mtr@@TXAWGS 84| proj-9.6.0/data/tests/test_vgrid_invalid_channel_type.tif000664 001754 001755 00000001060 14764566077 023606 0ustar00e012349e012349000000 000000 II* @S P h  u invalid_channel_type ??@K@#  mtr@@TXAWGS 84|?@@@@@@@AA A0A@APA`ApAAproj-9.6.0/data/tests/test_vgrid_nodata.tif000664 001754 001755 00000000720 14764566077 020677 0ustar00e012349e012349000000 000000 II* @S   8 x-88.8888000000000034?U?@,J@#  mtr@@TXAWGS 84|DZDZDZDZDZ A ADZDZ A ADZDZDZDZDZproj-9.6.0/data/tests/test_vgrid_pixelisarea.tif000664 001754 001755 00000000656 14764566077 021747 0ustar00e012349e012349000000 000000 II* n@S    Vf?? @K@#  mtr@@TXAWGS 84|?@@@@@@@AA A0A@APA`ApAAproj-9.6.0/data/tests/test_vgrid_pixelispoint.tif000664 001754 001755 00000000656 14764566077 022170 0ustar00e012349e012349000000 000000 II* n@S    Vf??@K@#  mtr@@TXAWGS 84|?@@@@@@@AA A0A@APA`ApAAproj-9.6.0/data/tests/test_vgrid_single_strip_truncated.tif000664 001754 001755 00000001046 14764566077 024206 0ustar00e012349e012349000000 000000 II* &^?S   VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL metre geoid_undulation ??fV@sproj-9.6.0/data/tests/test_vgrid_uint16.tif000664 001754 001755 00000000616 14764566077 020563 0ustar00e012349e012349000000 000000 II*n S    Vf??@K@#  mtr@@TXAWGS 84| proj-9.6.0/data/tests/test_vgrid_uint16_with_scale_offset.tif000664 001754 001755 00000001054 14764566077 024330 0ustar00e012349e012349000000 000000 II*  S l    -5 0.5 ??@K@#  mtr@@TXAWGS 84|  "$&(*proj-9.6.0/data/tests/test_vgrid_uint32.tif000664 001754 001755 00000000656 14764566077 020565 0ustar00e012349e012349000000 000000 II* n@S    Vf??@K@#  mtr@@TXAWGS 84| proj-9.6.0/data/tests/test_vgrid_unsupported_byte.tif000664 001754 001755 00000000576 14764566077 023055 0ustar00e012349e012349000000 000000 II*nS    Vf??@K@#  mtr@@TXAWGS 84| proj-9.6.0/data/tests/test_vgrid_with_overview.tif000664 001754 001755 00000001303 14764566077 022330 0ustar00e012349e012349000000 000000 II* z4=S   " br??@K@#  mtr@@TXAWGS 84|x  x DA"(]>~f@qusxzy;9+  =BCD\EgSxA `531ܓTONvO/y9proj-9.6.0/data/tests/test_vgrid_with_subgrid.tif000664 001754 001755 00000001364 14764566077 022130 0ustar00e012349e012349000000 000000 II* n@S    Vf??@K@#  mtr@@TXAWGS 84|?@@@@@@@AA A0A@APA`ApAA @S \ t??@K@pBBBBBBBC CC C*C4C>CHCRCproj-9.6.0/data/tests/tinshift_crs_implicit.json000664 001754 001755 00000002564 14764566077 021767 0ustar00e012349e012349000000 000000 { "file_type": "triangulation_file", "format_version": "1.0", "name": "Name", "version": "Version", "publication_date": "2018-07-01T00:00:00Z", "license": "Creative Commons Attribution 4.0 International", "description": "Test triangulation", "authority": { "name": "Authority name", "url": "http://example.com", "address": "Address", "email": "test@example.com" }, "links": [ { "href": "https://example.com/about.html", "rel": "about", "type": "text/html", "title": "About" }, { "href": "https://example.com/download", "rel": "source", "type": "application/zip", "title": "Authoritative source" }, { "href": "https://creativecommons.org/licenses/by/4.0/", "rel": "license", "type": "text/html", "title": "Creative Commons Attribution 4.0 International license" }, { "href": "https://example.com/metadata.xml", "rel": "metadata", "type": "application/xml", "title": " ISO 19115 XML encoded metadata regarding the deformation model" } ], "transformed_components": [ "horizontal" ], "vertices_columns": [ "source_x", "source_y", "target_x", "target_y" ], "triangles_columns": [ "idx_vertex1", "idx_vertex2", "idx_vertex3" ], "vertices": [ [2,49,2.1,49.1], [3,50,3.1,50.1], [2, 50, 2.1,50.1] ], "triangles": [ [0, 1, 2] ] } proj-9.6.0/data/tests/tinshift_fallback_nearest_centroid.json000664 001754 001755 00000000731 14764566077 024447 0ustar00e012349e012349000000 000000 { "file_type": "triangulation_file", "format_version": "1.1", "fallback_strategy": "nearest_centroid", "transformed_components": [ "horizontal" ], "vertices_columns": [ "source_x", "source_y", "target_x", "target_y" ], "triangles_columns": [ "idx_vertex1", "idx_vertex2", "idx_vertex3" ], "vertices": [ [0, 0, 0, 0], [1, 0, 1, 0], [1, 1, 1, 1], [4, 0, 100, 0], [100, 0, 100, 1], [100, 1, 4, 0] ], "triangles": [ [0, 1, 2], [3, 4, 5] ] } proj-9.6.0/data/tests/tinshift_fallback_nearest_side.json000664 001754 001755 00000000653 14764566077 023567 0ustar00e012349e012349000000 000000 { "file_type": "triangulation_file", "format_version": "1.1", "fallback_strategy": "nearest_side", "transformed_components": [ "horizontal" ], "vertices_columns": [ "source_x", "source_y", "target_x", "target_y" ], "triangles_columns": [ "idx_vertex1", "idx_vertex2", "idx_vertex3" ], "vertices": [ [0, 0, 0, 0], [1, 0, 2, 0], [1, 1, 2, 2], [0, 1, 0, 2] ], "triangles": [ [0, 1, 2], [0, 2, 3] ] } proj-9.6.0/data/tests/tinshift_simplified_kkj_etrs.json000664 001754 001755 00000003063 14764566077 023322 0ustar00e012349e012349000000 000000 { "file_type": "triangulation_file", "format_version": "1.0", "name": "Name", "version": "Version", "publication_date": "2018-07-01T00:00:00Z", "license": "Creative Commons Attribution 4.0 International", "description": "Test triangulation", "authority": { "name": "Authority name", "url": "http://example.com", "address": "Address", "email": "test@example.com" }, "links": [ { "href": "https://example.com/about.html", "rel": "about", "type": "text/html", "title": "About" }, { "href": "https://example.com/download", "rel": "source", "type": "application/zip", "title": "Authoritative source" }, { "href": "https://creativecommons.org/licenses/by/4.0/", "rel": "license", "type": "text/html", "title": "Creative Commons Attribution 4.0 International license" }, { "href": "https://example.com/metadata.xml", "rel": "metadata", "type": "application/xml", "title": " ISO 19115 XML encoded metadata regarding the triangulation" } ], "input_crs": "EPSG:2393", "output_crs": "EPSG:3067", "transformed_components": [ "horizontal" ], "vertices_columns": [ "source_x", "source_y", "target_x", "target_y" ], "triangles_columns": [ "idx_vertex1", "idx_vertex2", "idx_vertex3" ], "vertices": [ [3244102.707, 6693710.937, 244037.137, 6690900.686], [3205290.722, 6715311.822, 205240.895, 6712492.577], [3218328.492, 6649538.429, 218273.648, 6646745.973] ], "triangles": [ [0, 1, 2] ] } proj-9.6.0/data/tests/tinshift_simplified_n60_n2000.json000664 001754 001755 00000003024 14764566077 022725 0ustar00e012349e012349000000 000000 { "file_type": "triangulation_file", "format_version": "1.0", "name": "Name", "version": "Version", "publication_date": "2018-07-01T00:00:00Z", "license": "Creative Commons Attribution 4.0 International", "description": "Test triangulation", "authority": { "name": "Authority name", "url": "http://example.com", "address": "Address", "email": "test@example.com" }, "links": [ { "href": "https://example.com/about.html", "rel": "about", "type": "text/html", "title": "About" }, { "href": "https://example.com/download", "rel": "source", "type": "application/zip", "title": "Authoritative source" }, { "href": "https://creativecommons.org/licenses/by/4.0/", "rel": "license", "type": "text/html", "title": "Creative Commons Attribution 4.0 International license" }, { "href": "https://example.com/metadata.xml", "rel": "metadata", "type": "application/xml", "title": " ISO 19115 XML encoded metadata regarding the tirangulation" } ], "input_crs": "EPSG:2393+5717", "output_crs": "EPSG:2393+5941", "transformed_components": [ "vertical" ], "vertices_columns": [ "source_x", "source_y", "source_z", "target_z" ], "triangles_columns": [ "idx_vertex1", "idx_vertex2", "idx_vertex3" ], "vertices": [ [3188607.0, 6688748.0, 23.123, 23.4133], [3184981.0, 6725255.0, 8.044, 8.34499], [3220912.0, 6699508.0, 1.724, 2.0101] ], "triangles": [ [0, 1, 2] ] } proj-9.6.0/data/tests/us_noaa_geoid06_ak_subset_at_antimeridian.tif000664 001754 001755 00000014731 14764566077 025420 0ustar00e012349e012349000000 000000 II*< l<Y<2(S)    BRDerived from work by NOAA. Public Domain2019:12:27 00:00:00NAD83 (EPSG:4269) to NAVD88 height (EPSG:5703). Converted from geoid06_ak.gtx (last modified at 2019/11/23) USA - Alaska 5703 VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL geoid_undulation ??yf@ywwwwwK@#  r@@TXANAD83|"ypyy|y1yyzy&yZx,&xzw vutt=s]ruq9phzo!cns9mkjwLwwzwTw$wvvv4,v+u@MuntGt&]shjlNnSpqs9tk!uunIv׊vv٪v¤v9vvav-vuu\u͗tsd"fce"hvCjW&lm+o Hpqޱq9rr1sstKt{ttttC_t5TW/[AP^5acLfvyh(cjlT`msn@So6ppatqvrr%ssHs tH$tz!tzlM!yQCUtX\_as\dfh&4jڀk4lYmwnfoHpq>qirrOsksIsE)PJNR6VY\|_:;bdp{f$h1ijl@m_nHio2Yp -qqzrrLsڊ=sB=GKOSV-WpZbk]6`brbkd'fgAij,lN|mn-op&wq!rr<4:,?DcHL PaTW Z]`JbJd>-fgٮiCkl ng-o2pPqq +<0؇6;@~EIN QSU XfU[]H`݉bdf`h"_jkVm~nop '-f268 U=C*BF JN-RUX[a^`Gcyeg6Vi k@lmn?ڲ#40)/4G9>CGLO>SVzY\F_|a"dBf3h i%k]l` upAkx%*Q0E$6M;+@6DHLP6TWZ]b*`bdfhnVj rrc '@,82,7|<&ADFIJ@NQ {U4X[v^`QcneSg⿂l n$@q#9)3 /B49>NCGzKZOOS^VYޟ\A_a-cUȿؿ/*D Fy%ܿ+Ce16;@ 1EvIppM&QʘTWZs}]_t4"οH߿B=Cj"ރ(ON.L39-=ƖBF KNoRUX[cH8ſsֿP)"LT G2x%X+04?6.< ŞHzF`Mm`J0𽿼Bο޿T.j (-!ik'd-3>`mf>ໂ=@ƽ(XԾTg89T_D ȓǿ׿661ڔ V%+x%?p>`>=C`Uhy1ZN-YS`x ˰,@ҿ|zcfU$P? '?!>>y#>n@)@ťb!yGsl$P{Ϳ7޿pBgExeׂ?[?1??h>IH>=Gd⾸=,bS8Ϋɿ:ڿsY #7?V)?Xc?8? ?2>b>l=Mҽ؏Ӿ;5L'[yڣrj֫ƿB׿%TP <?!?lj?Th?x@tp> =p`wp<ɾ DS0h~U@zC$"; Ŀ տL_G?^?z?dN?0h?==?@?(:>@t>`f= Ǟkȟ¾x&,؊Qv (,ҿv*??x??(?e?&:??> o> G=&f4)ƆNrk:ծXf> +=盽(ZdbH8'trLpIIɭC<п3@??N?7?Z>@=P~cGV@P&hK0oT|e<Ѿy@??R?B?Hh?lؑ?D8y?O?;'??`>PR>= r`#dPR&J\nC脛8[h@ (@d??6?M?\ ?>#?hIo?\G?L ?>ݮ>`{M>v=P@Cdd㺾_&J2Qoaԉ훿hu@ @@?F??ܯ?4w?4z? h?> K>:p=@ edHd&Kfpm@N@7@& ? ?<???Z??$db?x>??>>L>`u=eݻ8' LVq@1@ 4 @@??8X?h:? d?R?? 1a?>??h>>^O>}=`x8e0(IN "@@(@@y? #??4???v ?~?^?.b?@??>>[T>`>=eTzm0*T&@@5@@]@.h?R?~F?!>OX> Lj=&0g*@5#@@@& @@RK?}?>??F?\??ʳ?&j?tG?|$?Xu?آ>0|Z>3= @kH¾t/@ A)@"@0@2@ @@ y?\?H8???Z? ??m?:J?&?t<?>W>}=OsF4@ά.@(@""@L@(@ @0@?LT?n?(??$ɫ? ?`?o?,mK?L&?0?>2P>;X= Ƚ8@3@=.@(@Q"@@I@ @A@{?/?~?h?\? z? ?*?o?J?$?p>3>}A>H==@d#9@74@.@)@"@m@ާ@6@2`@?܈?0?W?]?ŭ??'?Xl?t?F??>0> ,>A@=@4Y9@ւ4@;/@)@\|#@@]@[@@~@;???H??R?[?Kf???|? >h>E@A@=@՘9@4@/@)@_#@P@Å@j@@),@??t8? ?lb?c?'?4]?l6?Y?>gG@YD@gA@A=@_9@w4@u/@5D)@? #@k@;o@@qc@6??i?xm? ?")?f?y?S?-??I@G@D@:EA@xA=@h8@3@-@t'@jx!@"@g@ @b@U?&?lo?0?X?Ȝ??n?H?#?K@=I@F@_C@ $@@;@"7@1@,@#%@; @@m@@f@?*n??R??:m?F?Ra?@#:@?5@?t/@a)@"@w@\@ @v@b>?z?:??У??掍?Qw?S?̋K@J@DH@LF@C@D@@ <@ _7@< 2@t.,@$%@l@~@@8@@?LM?'?n?7?*??$?h?proj-9.6.0/data/tests/us_noaa_nadcon5_nad83_1986_nad83_harn_conus_extract_sanfrancisco.tif000664 001754 001755 00000002405 14764566077 031420 0ustar00e012349e012349000000 000000 II* H=24RS)     &6Derived from work by NOAA. Public Domain2016:09:01 00:00:00EPSG:4269 (NAD83) to EPSG:4152 (NAD83(HARN)). Converted from https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_1986.nad83_harn.conus USA - Conterminous biquadratic 4152 HORIZONTAL_OFFSET latitude_offset east longitude_offset ??33333^33333B@#  r@@TXANAD83|~K;N8P;IK;Jk( ;0x|;sdfa;@2=ez;.;ؗd;Cbp ;d;ûk ;_ew;};JC8v;9S?_:䮝:;xz;(l%;70L@; :;eº/;I+Lf;:proj-9.6.0/data/tests/us_noaa_nadcon5_nad83_2007_nad83_2011_alaska_extract.tif000664 001754 001755 00000006733 14764566077 026420 0ustar00e012349e012349000000 000000 II*   H 24RS)    ( hxRDerived from work by NOAA. Public Domain2016:09:01 00:00:00EPSG:4759 (NAD83(NSRS2007)) to EPSG:6319 (NAD83(2011)). Converted from https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2007.nad83_2011.alaska USA - Alaska ellipsoidal_height_offset biquadratic 6319 HORIZONTAL_OFFSET latitude_offset east longitude_offset UUUUUU?UUUUUU?2i@WUUUUN@#  r@@TXANAD83(NSRS2007)|i:캲:9P< :*׺<:ͺ)Q}:=ĺSk:Z:5I::s::4Y,:o:'2:c:VR:[ߺg֜:.պ>:v˺:jº܂:mv:yh:쨺#[:ۉ=O:vy:uu:y>s:/⺵':غ:ZϺ~ԛ:ƺ\m:<ݴ:%sd:1I:ł]x:w*܇:t_I:9s캼j:.Ts:qٺӯ:(Ѻ:ɺ: Μ:by:tג:+: ]:xl#C:#:ͽ:غn:DкƱ:ɺm:J :Lm:?9:R:p :QR:6`:Tۺń:WԺĊ:ͺ/S:pǺ:ci:Vһ:N:Wx:~:oU:ں,:Ժsi:gκ:ȺY|:&úM:-ĵ:Yݺ":>˶*:Gh:ںa:2ԺU:*>к͸:x˺ǻ:eǺ(C:rXú^:z:z): :>ú:`ճP:ͺm:Vʺ:Ǻٶ:Hú::Y:4:Ĺo:Y[:a2:}Ijg:z0$:翺:A:te: ʺ:zʊ:/g:6:ܶg<:}:ͯ4:(I:LV:GG:A4Ī:7:⵺ :7 Sӷ:h\%:e m:㷺 :&0 :    K  2r S)H     * : |& Derived from work by NOAA. Public Domain2016:09:01 00:00:00EPSG:4759 (NAD83(NSRS2007)) to EPSG:6319 (NAD83(2011)). Converted from https://geodesy.noaa.gov/pub/nadcon5/20160901release/Builds/nad83_2007.nad83_2011.alaska USA - Alaska horizontal_offset biquadratic 6319 ELLIPSOIDAL_HEIGHT_OFFSET ellipsoidal_height_offset ??i@`O@#  r@@TXANAD83(NSRS2007)|;F;_;ɡ:;.;;':;;{HD;:_:I˚::`:MK&:<99^96::'4'2!Z)-.*ݻJλƻdĻ3xŻ-ȻHͻ}һ9fػ߻(w# Z9 **!;<#Z&^*i/ԃ5Q S4TV;9Y\@af`nw6nu{KlIB`\7E1򰉼󢎼lѐ(^𥜼ڣNcՎW:,ԔZjP#o{ë]덼 USA - Conterminous biquadratic 6319 GEOGRAPHIC_3D_OFFSET latitude_offset east longitude_offset ellipsoidal_height_offset ??UUUUUWB@#  r@@TXANAD83(NSRS2007)|"8-:n8.i,:sp"8+:%r8v*:s8*:uU8O):w 8y(:y8':1{T8]&:~}u8%:9wp8%:<8w,: q8',:(r88f+:>tĽ8G*:u8 ):wY8(:y8[(:)k{38>':T^}Ç8Z&:`)4v8x%:d\8$:2ȁ8j,:RAs78N+:۾toI8++:)NvI8`*:wi8):by18O(:d{^ˑ8':8}j8A&:Sv8%:!^8%:9E8'$:V纱8 ,:0huᠬ8$+:v8y*::Nxo8.*:Hy8U):l~{l82t(:91}Ӄ8':m~q8p&:deNL[8L%:X}C8ϱ$:GT+8#:`XС8},:G|w_8+:x68 *:s;z68*:-{x;8$):G}|8=(:~ i8L':N۰T8jT&:92R>8W%:'8+Y$:8\#:z8(z,:yyύ8٥+:zؓ8*:|l8}):{}a$p8 (:~BP^8(:DJ8':<n68&:󁼔% 8%:؂s 86$:ǃuR7a#: 8?~,:vU{I8U+:3|Ks8*:}:e8):T8(:%FC8y':/8]&:@сȞ8%:08)$:47 #:snv7>":3bo8>,:3 }Ye8+:'~HX8z*:Y K8):Pc;8/(: *8': 8[&:{H|8\%:I79$:!e7x#:Gr7j":?V8,:ʘ~`L8+:?8|*:c$18):"8(:ʥu8':V7&: &d7p%::ڃt7{$:ƅ7X#:kj375":sa4=8,:28t+:€{&8*:B 68):Z 8(:d:47{':ゼ:i7}&:' Щ7v%:EX՗7`$:*$&475#:6t":"8< -:6k8\,:> 8 +:67*:m&7|(:7.':\;7&: |vo7ł%:#+#7YR$:ɆN6#:fXԆ3!:6proj-9.6.0/data/triangulation.schema.json000664 001754 001755 00000020323 14764566077 020344 0ustar00e012349e012349000000 000000 { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Schema for triangulation based transformation", "type": "object", "properties": { "file_type": { "type": "string", "enum": [ "triangulation_file" ], "description": "File type. Always \"triangulation_file\"" }, "format_version": { "type": "string", "enum": [ "1.0", "1.1" ] }, "name": { "type": "string", "description": "A brief descriptive name of the triangulation" }, "version": { "type": "string", "description": "A string identifying the version of the triangulation. The format for specifying version will be defined by the agency responsible for the triangulation" }, "publication_date": { "$ref": "#/definitions/datetime", "description": "The date on which this version of the triangulation was published (or possibly the date on which it takes effect?)" }, "fallback_strategy": { "type": "string", "enum": [ "none", "nearest_side", "nearest_centroid" ] }, "license": { "type": "string", "description": "License under which the file is published" }, "description": { "type": "string", "description": "A text description of the file" }, "authority": { "type": "object", "description": "Basic information about the agency responsible for the data set", "properties": { "name": { "type": "string", "description": "The name of the agency" }, "url": { "type": "string", "description": "The url of the agency website", "format": "uri" }, "address": { "type": "string", "description": "The postal address of the agency" }, "email": { "type": "string", "description": "An email contact address for the agency", "format": "email" } }, "required": [ "name" ], "additionalProperties": false }, "links": { "type": "array", "description": "Links to related information", "items": { "type": "object", "properties": { "href": { "type": "string", "description": "The URL holding the information", "format": "uri" }, "rel": { "type": "string", "description": "The relationship to the dataset. Proposed relationships are:\n- \"about\": a web page for human consumption describing the model\n- \"source\": the authoritative source data from which the triangulation is built.\n- \"metadata\": ISO 19115 XML metadata regarding the triangulation." }, "type": { "type": "string", "description": "MIME type" }, "title": { "type": "string", "description": "Description of the link" } }, "required": [ "href" ], "additionalProperties": false } }, "extent": { "$ref": "#/definitions/extent", "description": "Defines the region within which the triangulation is defined. This should be a bounding box defined as an array of [west,south,east,north] coordinate values in a unspecified geographic CRS. This bounding box should be seen as approximate, given that triangulation may be defined with projected coordinates, and also because some triangulations may not cover the whole bounding box." }, "input_crs": { "$ref": "#/definitions/crs", "description": "String identifying the CRS of source coordinates in the vertices. Typically \"EPSG:XXXX\". If the transformation is for vertical component, this should be the code for a compound CRS (can be EPSG:XXXX+YYYY where XXXX is the code of the horizontal CRS and YYYY the code of the vertical CRS). For example, for the KKJ->ETRS89 transformation, this is EPSG:2393 (\"KKJ / Finland Uniform Coordinate System\"). The input coordinates are assumed to be passed in the \"normalized for visualisation\" / \"GIS friendly\" order, that is longitude, latitude for geographic coordinates and easting, northing for projected coordinates." }, "output_crs": { "$ref": "#/definitions/crs", "description": "String identifying the CRS of target coordinates in the vertices. Typically \"EPSG:XXXX\". If the transformation is for vertical component, this should be the code for a compound CRS (can be EPSG:XXXX+YYYY where XXXX is the code of the horizontal CRS and YYYY the code of the vertical CRS). For example, for the KKJ->ETRS89 transformation, this is EPSG:3067 (\"ETRS89 / TM35FIN(E,N)\"). The output coordinates will be returned in the \"normalized for visualisation\" / \"GIS friendly\" order, that is easting, that is longitude, latitude for geographic coordinates and easting, northing for projected coordinates." }, "transformed_components": { "type": "array", "description": "Specify which component of the coordinates are transformed. Either \"horizontal\", \"vertical\" or both", "minItems": 1, "maxItems": 2, "items": { "type": "string", "enum": [ "horizontal", "vertical" ] } }, "vertices_columns": { "type": "array", "description": "Specify the name of the columns of the rows in the \"vertices\" array. There must be exactly as many elements in \"vertices_columns\" as in a row of \"vertices\". The following names have a special meaning: \"source_x\", \"source_y\", \"target_x\", \"target_y\", \"source_z\", \"target_z\" and \"offset_z\". \"source_x\" and \"source_y\" are compulsory. \"source_x\" is for the source longitude (in degree) or easting. \"source_y\" is for the source latitude (in degree) or northing. \"target_x\" and \"target_y\" are compulsory when \"horizontal\" is specified in \"transformed_components\". (\"source_z\" and \"target_z\") or \"offset_z\" are compulsory when \"vertical\" is specified in \"transformed_components\".", "minItems": 3, "items": { "type": "string" } }, "triangles_columns": { "type": "array", "description": "Specify the name of the columns of the rows in the \"triangles\" array. There must be exactly as many elements in \"triangles_columns\" as in a row of \"triangles\". The following names have a special meaning: \"idx_vertex1\", \"idx_vertex2\", \"idx_vertex3\". They are compulsory.", "minItems": 3, "items": { "type": "string" } }, "vertices": { "type": "array", "description": "an array whose items are themselves arrays with as many columns as described in \"vertices_columns\"", "items": { "type": "array" } }, "triangles": { "type": "array", "description": "an array whose items are themselves arrays with as many columns as described in \"triangles_columns\". The value of the \"idx_vertexN\" columns must be indices (between 0 and len(\"vertices\"-1) of items of the \"vertices\" array", "items": { "type": "array" } } }, "required": [ "file_type", "format_version", "transformed_components", "vertices_columns", "triangles_columns", "vertices", "triangles" ], "additionalProperties": false, "definitions": { "crs": { "type": "string" }, "datetime": { "type": "string", "format": "date-time", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" }, "extent": { "type": "object", "properties": { "type": { "type": "string", "enum": [ "bbox" ] }, "name" : { "type": "string", "description": "Name of the extent (e.g. \"Finland - mainland south of 66°N\")" }, "parameters": { "type": "object", "properties": { "bbox": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "type": "number" } } } } }, "required": [ "type", "parameters" ], "additionalProperties": false } } } proj-9.6.0/data/world000664 001754 001755 00000015647 14764566077 014421 0ustar00e012349e012349000000 000000 # SCCSID @(#)world 1.2 95/08/05 GIE REL # proj +init files for various non-U.S. coordinate systems. # +lastupdate=2016-12-12 # 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 Equatorial 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 divided 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, divide by 1000 and add the figure. # I made 3 entries 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<> proj-9.6.0/examples/000775 001754 001755 00000000000 14764566152 014231 5ustar00e012349e012349000000 000000 proj-9.6.0/examples/CMakeLists.txt000664 001754 001755 00000000565 14764566077 017005 0ustar00e012349e012349000000 000000 add_executable(pj_obs_api_mini_demo pj_obs_api_mini_demo.c) target_link_libraries(pj_obs_api_mini_demo PRIVATE ${PROJ_LIBRARIES}) add_executable(crs_to_geodetic crs_to_geodetic.c) target_link_libraries(crs_to_geodetic PRIVATE ${PROJ_LIBRARIES}) add_executable(EPSG_4326_to_32631 EPSG_4326_to_32631.cpp) target_link_libraries(EPSG_4326_to_32631 PRIVATE ${PROJ_LIBRARIES}) proj-9.6.0/examples/EPSG_4326_to_32631.cpp000664 001754 001755 00000007002 14764566077 017416 0ustar00e012349e012349000000 000000 /******************************************************************************* Example code that illustrates how to convert between two CRS Note: This file is in-lined in the documentation. Any changes must be reflected in docs/source/development/quickstart.rst *******************************************************************************/ #include #include // for HUGE_VAL #include // for std::setprecision() #include #include "proj/coordinateoperation.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/util.hpp" // for nn_dynamic_pointer_cast using namespace NS_PROJ::crs; using namespace NS_PROJ::io; using namespace NS_PROJ::operation; using namespace NS_PROJ::util; int main(void) { auto dbContext = DatabaseContext::create(); // Instantiate a generic authority factory, that is not tied to a particular // authority, to be able to get transformations registered by different // authorities. This can only be used for CoordinateOperationContext. auto authFactory = AuthorityFactory::create(dbContext, std::string()); // Create a coordinate operation context, that can be customized to amend // the way coordinate operations are computed. Here we ask for default // settings. auto coord_op_ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); // Instantiate a authority factory for EPSG related objects. auto authFactoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); // Instantiate source CRS from EPSG code auto sourceCRS = authFactoryEPSG->createCoordinateReferenceSystem("4326"); // Instantiate target CRS from PROJ.4 string (commented out, the equivalent // from the EPSG code) // auto targetCRS = // authFactoryEPSG->createCoordinateReferenceSystem("32631"); auto targetCRS = NN_CHECK_THROW(nn_dynamic_pointer_cast(createFromUserInput( "+proj=utm +zone=31 +datum=WGS84 +type=crs", dbContext))); // List operations available to transform from EPSG:4326 // (WGS 84 latitude/longitude) to EPSG:32631 (WGS 84 / UTM zone 31N). auto list = CoordinateOperationFactory::create()->createOperations( sourceCRS, targetCRS, coord_op_ctxt); // Check that we got a non-empty list of operations // The list is sorted from the most relevant to the less relevant one. // Cf // https://proj.org/operations/operations_computation.html#filtering-and-sorting-of-coordinate-operations // for more details on the sorting of those operations. // For a transformation between a projected CRS and its base CRS, like // we do here, there will be only one operation. assert(!list.empty()); // Create an execution context (must only be used by one thread at a time) PJ_CONTEXT *ctx = proj_context_create(); // Create a coordinate transformer from the first operation of the list auto transformer = list[0]->coordinateTransformer(ctx); // Perform the coordinate transformation. PJ_COORD c = {{ 49.0, // latitude in degree 2.0, // longitude in degree 0.0, // z ordinate. unused HUGE_VAL // time ordinate. unused }}; c = transformer->transform(c); // Display result std::cout << std::fixed << std::setprecision(3); std::cout << "Easting: " << c.v[0] << std::endl; // should be 426857.988 std::cout << "Northing: " << c.v[1] << std::endl; // should be 5427937.523 // Destroy execution context proj_context_destroy(ctx); return 0; } proj-9.6.0/examples/crs_to_geodetic.c000664 001754 001755 00000004154 14764566077 017543 0ustar00e012349e012349000000 000000 /******************************************************************************* Example code that illustrates how to convert between a CRS and geodetic coordnates for that CRS. Note: This file is in-lined in the documentation. Any changes must be reflected in docs/source/development/quickstart.rst *******************************************************************************/ #include #include #include int main(void) { /* Create the context. */ /* You may set C=PJ_DEFAULT_CTX if you are sure you will */ /* use PJ objects from only one thread */ PJ_CONTEXT *C = proj_context_create(); /* Create a projection. */ PJ *P = proj_create(C, "+proj=utm +zone=32 +datum=WGS84 +type=crs"); if (0 == P) { fprintf(stderr, "Failed to create transformation object.\n"); return 1; } /* Get the geodetic CRS for that projection. */ PJ *G = proj_crs_get_geodetic_crs(C, P); /* Create the transform from geodetic to projected coordinates.*/ PJ_AREA *A = NULL; const char *const *options = NULL; PJ *G2P = proj_create_crs_to_crs_from_pj(C, G, P, A, options); /* Longitude and latitude of Copenhagen, in degrees. */ double lon = 12.0, lat = 55.0; /* Prepare the input */ PJ_COORD c_in; c_in.lpzt.z = 0.0; c_in.lpzt.t = HUGE_VAL; // important only for time-dependent projections c_in.lp.lam = lon; c_in.lp.phi = lat; printf("Input longitude: %g, latitude: %g (degrees)\n", c_in.lp.lam, c_in.lp.phi); /* Compute easting and northing */ PJ_COORD c_out = proj_trans(G2P, PJ_FWD, c_in); printf("Output easting: %g, northing: %g (meters)\n", c_out.enu.e, c_out.enu.n); /* Apply the inverse transform */ PJ_COORD c_inv = proj_trans(G2P, PJ_INV, c_out); printf("Inverse applied. Longitude: %g, latitude: %g (degrees)\n", c_inv.lp.lam, c_inv.lp.phi); /* Clean up */ proj_destroy(P); proj_destroy(G); proj_destroy(G2P); proj_context_destroy(C); /* may be omitted in the single threaded case */ return 0; } proj-9.6.0/examples/pj_obs_api_mini_demo.c000664 001754 001755 00000003742 14764566077 020536 0ustar00e012349e012349000000 000000 /******************************************************************************* Simple example code demonstrating use of the proj.h API for 2D coordinate transformations. Note: This file is in-lined in the documentation. Any changes must be reflected in docs/source/development/quickstart.rst Thomas Knudsen, 2016-10-30/2017-07-06 *******************************************************************************/ #include #include int main(void) { PJ_CONTEXT *C; PJ *P; PJ *norm; PJ_COORD a, b; /* or you may set C=PJ_DEFAULT_CTX if you are sure you will */ /* use PJ objects from only one thread */ C = proj_context_create(); P = proj_create_crs_to_crs( C, "EPSG:4326", "+proj=utm +zone=32 +datum=WGS84", /* or EPSG:32632 */ NULL); if (0 == P) { fprintf(stderr, "Failed to create transformation object.\n"); return 1; } /* This will ensure that the order of coordinates for the input CRS */ /* will be longitude, latitude, whereas EPSG:4326 mandates latitude, */ /* longitude */ norm = proj_normalize_for_visualization(C, P); if (0 == norm) { fprintf(stderr, "Failed to normalize transformation object.\n"); return 1; } proj_destroy(P); P = norm; /* a coordinate union representing Copenhagen: 55d N, 12d E */ /* Given that we have used proj_normalize_for_visualization(), the order */ /* of coordinates is longitude, latitude, and values are expressed in */ /* degrees. */ a = proj_coord(12, 55, 0, 0); /* transform to UTM zone 32, then back to geographical */ b = proj_trans(P, PJ_FWD, a); printf("easting: %.3f, northing: %.3f\n", b.enu.e, b.enu.n); b = proj_trans(P, PJ_INV, b); printf("longitude: %g, latitude: %g\n", b.lp.lam, b.lp.phi); /* Clean up */ proj_destroy(P); proj_context_destroy(C); /* may be omitted in the single threaded case */ return 0; } proj-9.6.0/examples/s45b.pol000664 001754 001755 00000021372 14764566077 015535 0ustar00e012349e012349000000 000000 ################################################################################ # # Horner polynomial evaluation demo data # ################################################################################ # # These are the polynomial coefficients used for transforming to and from # the Danish legacy system s45b "System 45 Bornholm" # ################################################################################ proj=pipeline step init=./s45b.pol:s45b_tc32 # step init=./s45b.pol:tc32_utm32 step proj=utm inv ellps=intl zone=32 step proj=cart ellps=intl step proj=helmert ellps=GRS80 x=-81.0703 y=-89.3603 z=-115.7526 rx=-484.88 ry=-24.36 rz=-413.21 s=-0.540645 step proj=cart inv ellps=GRS80 step proj=utm ellps=GRS80 zone=32 ################################################################################ # # S 4 5 B -> T C 3 2 # ################################################################################ proj=horner ellps=intl range=500000 fwd_origin=47022.563745,51779.260103 inv_origin=878354.943082,6125305.175366 deg=6 # static double C_ttb[] # tc32_ed50 -> s45b # m_lim_gen: 0.153 red = 0 OBS = 1074 # m = 1.51 cm my_loss = +3 y_enp = +8.4 # m = 1.53 cm mx_loss = +4 x_enp = +8.4 # mht C_ttb er # fwd-inv ombyttet ifht original Poder/Engsager-kode # For at opnå at to fwd transform fører fra s45b->tc32->utm32 (->ETRS89) inv_v= # Poly NORTH :: e-degree = 0 : n-degree = 6 5.1779004699e+04, 9.9508320295e-01, -2.9453823207e-10, 1.9995084102e-14, -1.4895751366e-18, -9.9734812211e-23, 1.1194218845e-26, # Poly NORTH :: e-degree = 1 : n-degree = 5 -8.4285679515e-02, -7.9623049286e-09, -3.7190046062e-14, -2.3324127411e-18, -1.1150449763e-22, 2.8703154270e-27, # Poly NORTH :: e-degree = 2 : n-degree = 4 8.7160434140e-10, -3.3634602927e-14, -5.5718245313e-18, 6.2611750909e-23, -2.1011243838e-26, # Poly NORTH :: e-degree = 3 : n-degree = 3 1.0905463989e-14, -4.3960034360e-18, 3.6121595001e-22, -1.3493066011e-27, # Poly NORTH :: e-degree = 4 : n-degree = 2 -1.3360171462e-18, 1.0780850646e-22, 4.5118286607e-26, # Poly NORTH :: e-degree = 5 : n-degree = 1 -1.3718883973e-22, 1.6263920750e-26, # Poly NORTH :: e-degree = 6 : n-degree = 0 -5.1004217526e-27 # tcy 6125305.175366 inv_u= # Poly EAST :: n-degree = 0 : e-degree = 6 4.7022495967e+04, -9.9508282498e-01, 3.2436283039e-09, -2.6276394334e-15, 8.6318533291e-18, -3.8327518550e-23, -2.5704924282e-26, # Poly EAST :: n-degree = 1 : e-degree = 5 -8.4285975934e-02, 5.7098765263e-10, -6.0863955939e-14, 2.3608788740e-18, 6.8899581969e-24, -1.1429511179e-26, # Poly EAST :: n-degree = 2 : e-degree = 4 -4.6079778412e-09, 1.5072604543e-14, 5.4063862378e-18, 1.2591327827e-22, 7.9336388691e-27, # Poly EAST :: n-degree = 3 : e-degree = 3 -2.9479268638e-14, 1.7090049434e-18, 2.8413337985e-22, -3.3577391552e-27, # Poly EAST :: n-degree = 4 : e-degree = 2 3.0434879273e-18, -1.8081673510e-22, -2.3651419850e-26, # Poly EAST :: n-degree = 5 : e-degree = 1 9.2060044804e-23, 3.7807953325e-27, # Poly EAST :: n-degree = 6 : e-degree = 0 -4.9415665221e-27 # tcx 878354.943082 # static double C_btt[] # s45b -> tc32_ed50 # m_lim_gen: 0.154 red = 0 OBS = 1074 # m = 1.50 cm my_loss = +3 y_enp = +8.5 # m = 1.54 cm mx_loss = +4 x_enp = +8.3 fwd_v= # Poly NORTH :: e-degree = 0 : n-degree = 6 6.1253054245e+06, 9.9778251908e-01, -7.7346152025e-10, -2.5359789369e-14, 1.5614918228e-18, 9.8091134295e-23, -1.1092581145e-26, # Poly NORTH :: e-degree = 1 : n-degree = 5 -8.4514352088e-02, -7.9847579284e-09, -2.6865560962e-14, -2.0731372756e-18, -1.3660341123e-22, 1.1244836340e-26, # Poly NORTH :: e-degree = 2 : n-degree = 4 8.0551988135e-11, 3.6661500679e-14, 5.4247705403e-18, 8.4494604807e-23, 1.3334858516e-26, # Poly NORTH :: e-degree = 3 : n-degree = 3 8.3889821184e-15, -4.8124202237e-18, 2.9088188830e-22, -2.0129874264e-26, # Poly NORTH :: e-degree = 4 : n-degree = 2 2.4716463766e-18, -2.1717177513e-22, -3.2828537638e-26, # Poly NORTH :: e-degree = 5 : n-degree = 1 -1.2080655753e-22, 2.5050435391e-26, # Poly NORTH :: e-degree = 6 : n-degree = 0 1.1383483826e-27 # tcy 51779.260103, fwd_u= # Poly EAST :: n-degree = 0 : e-degree = 6 8.7835485387e+05, -9.9778289691e-01, 3.2537215213e-09, 6.9217640616e-15, 8.6268883840e-18, 4.6748156909e-23, -2.6492402009e-26, # Poly EAST :: n-degree = 1 : e-degree = 5 -8.4514648771e-02, 1.4399520180e-09, -6.0423329711e-14, 6.9816167332e-20, 6.7729233542e-23, -5.3308251880e-27, # Poly EAST :: n-degree = 2 : e-degree = 4 -4.5697800099e-09, -1.5194038814e-14, 5.1112653016e-18, -2.0307532869e-22, 1.0374125432e-26, # Poly EAST :: n-degree = 3 : e-degree = 3 -2.8983003841e-14, -1.6414425785e-18, 1.7874983379e-22, 1.5492164174e-26, # Poly EAST :: n-degree = 4 : e-degree = 2 2.7919197366e-18, 1.9218613279e-22, -2.1007264634e-26, # Poly EAST :: n-degree = 5 : e-degree = 1 1.0032412389e-22, -5.9007997846e-27, # Poly EAST :: n-degree = 6 : e-degree = 0 -4.4410970979e-27 # tcx 47022.563745 ################################################################################ # # T C 3 2 -> U T M 3 2 # ################################################################################ proj=horner ellps=intl range=500000 fwd_origin=877605.269066,6125810.306769 inv_origin=877605.760036,6125811.281773 # tc32_ed50 -> utm32_ed50 : Bornholm deg=4 # ttu_n and ttu_e are based on static double C_ttu_b[] # m_lim_gen: 0.086 red = 0 OBS = 852 # m = 1.38 cm my_loss = +2 y_enp = +10.5 # m = 1.44 cm mx_loss = +2 x_enp = +10.4 # static double ttu_n[] fwd_v= # Poly NORTH :: e-degree = 0 : n-degree = 0..4 6.1258112678e+06, 9.9999971567e-01, 1.5372750011e-10, 5.9300860915e-15, 2.2609497633e-19, # Poly NORTH :: e-degree = 1 : n-degree = 0..3 4.3188227445e-05, 2.8225130416e-10, 7.8740007114e-16, -1.7453997279e-19, # Poly NORTH :: e-degree = 2 : n-degree = 0..2 1.6877465415e-10, -1.1234649773e-14, -1.7042333358e-18, # Poly NORTH :: e-degree = 3 : n-degree = 0..1 -7.9303467953e-15, -5.2906832535e-19, # Poly NORTH :: e-degree = 4 : n-degree = 0 3.9984284847e-19 # tcy 6125810.306769 # static double ttu_e[] fwd_u= # Poly EAST :: n-degree = 0 : e-degree = 0..4 8.7760574982e+05, 9.9999752475e-01, 2.8817299305e-10, 5.5641310680e-15, -1.5544700949e-18, # Poly EAST :: n-degree = 1 : e-degree = 3 -4.1357045890e-05, 4.2106213519e-11, 2.8525551629e-14, -1.9107771273e-18, # Poly EAST :: n-degree = 2 : e-degree = 2 3.3615590093e-10, 2.4380247154e-14, -2.0241230315e-18, # Poly EAST :: n-degree = 3 : e-degree = 1 1.2429019719e-15, 5.3886155968e-19, # Poly EAST :: n-degree = 4 : e-degree = 0 -1.0167505000e-18 # tcx 877605.760036 # utt_n and utt_e are based on static double C_utt_b[] # utm32_ed50 -> tc32_ed50 : Bornholm # m_lim_gen: 0.086 red = 0 OBS = 852 # m = 1.38 cm my_loss = +2 y_enp = +10.8 # m = 1.44 cm mx_loss = +2 x_enp = +10.7 # static double utt_n[] inv_v= # Poly NORTH :: e-degree = 0 : n-degree = 4 6.1258103208e+06, 1.0000002826e+00, -1.5372762184e-10, -5.9304261011e-15, -2.2612705361e-19, # Poly NORTH :: e-degree = 1 : n-degree = 3 -4.3188331419e-05, -2.8225549995e-10, -7.8529116371e-16, 1.7476576773e-19, # Poly NORTH :: e-degree = 2 : n-degree = 2 -1.6875687989e-10, 1.1236475299e-14, 1.7042518057e-18, # Poly NORTH :: e-degree = 3 : n-degree = 1 7.9300735257e-15, 5.2881862699e-19, # Poly NORTH :: e-degree = 4 : n-degree = 0 -3.9990736798e-19 # tcy 6125811.281773 # static double utt_e[] inv_u= # Poly EAST :: n-degree = 0 : e-degree = 0..4 8.7760527928e+05, 1.0000024735e+00, -2.8817540032e-10, -5.5627059451e-15, 1.5543637570e-18, # Poly EAST :: n-degree = 1 : e-degree = 0..3 4.1357152105e-05, -4.2114813612e-11, -2.8523713454e-14, 1.9109017837e-18, # Poly EAST :: n-degree = 2 : e-degree = 0..2 -3.3616407783e-10, -2.4382678126e-14, 2.0245020199e-18, # Poly EAST :: n-degree = 3 : e-degree = 0..1 -1.2441377565e-15, -5.3885232238e-19, # Poly EAST :: n-degree = 4 : e-degree = 0 1.0167203661e-18 # tcx 877605.760036 <> proj-9.6.0/examples/val_def.demo000664 001754 001755 00000005051 14764566077 016506 0ustar00e012349e012349000000 000000 ----------------------------------------------------------------------- INTEGRATING DEFINITION AND VALIDATION OF GEODETIC SYSTEMS ----------------------------------------------------------------------- Thomas Knudsen, thokn@sdfe.dk, 2017-12-06 ----------------------------------------------------------------------- This demo shows how to use the free format definition strings, introduced in PROJ version 5.0.0, to integrate system definition information with system validation data. The system definition parts are used when doing actual transformations, e.g. using the cct 4D transformation program: echo 9 55 0 0 | cct +init=val_def.demo:DKTM1 The system validation parts are used when validating the systems defined in the file. This is done using the gie test program: Place val_def.demo in your PROJ_LIB directory (or set PROJ_LIB=) and say: gie val_def.demo This will result in a report detailing how many tests succeeded, resp. failed. The syntax of proj init files is orthogonal to the syntax of gie integrity evaluation files. This makes it possible to interleave init and gie blocks in the same file. #----------------------------------------------------------------------- #----------------------------------------------------------------------- # Danish Transverse Mercator, zone 1 #----------------------------------------------------------------------- proj = etmerc lat_0 = 0 lon_0 = 9 x_0 = 200000 y_0 = -5000000 k = 0.99998 ellps = GRS80 units = m no_defs #----------------------------------------------------------------------- operation init = val_def.demo:DKTM1 tolerance 100 um accept 9 55 expect 200000.0000 1097108.3684 roundtrip 1000 1 nm #----------------------------------------------------------------------- #----------------------------------------------------------------------- # Danish Transverse Mercator, zone 2 #----------------------------------------------------------------------- proj = etmerc lat_0 = 0 lon_0 = 10 x_0 = 400000 y_0 = -5000000 k = 0.99998 ellps = GRS80 units = m no_defs #----------------------------------------------------------------------- operation init = val_def.demo:DKTM2 tolerance 100 um accept 10 55 expect 400000.0000 1097108.3684 accept 10.5 55.5 expect 431597.1668 1152884.9398 roundtrip 1000 100 um #----------------------------------------------------------------------- proj-9.6.0/include/000775 001754 001755 00000000000 14764566152 014036 5ustar00e012349e012349000000 000000 proj-9.6.0/include/CMakeLists.txt000664 001754 001755 00000000027 14764566077 016603 0ustar00e012349e012349000000 000000 add_subdirectory(proj) proj-9.6.0/include/proj/000775 001754 001755 00000000000 14764566152 015010 5ustar00e012349e012349000000 000000 proj-9.6.0/include/proj/CMakeLists.txt000664 001754 001755 00000000304 14764566077 017553 0ustar00e012349e012349000000 000000 install( FILES util.hpp metadata.hpp common.hpp coordinates.hpp crs.hpp datum.hpp coordinatesystem.hpp coordinateoperation.hpp io.hpp nn.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/proj ) proj-9.6.0/include/proj/common.hpp000664 001754 001755 00000037610 14764566077 017026 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef COMMON_HH_INCLUDED #define COMMON_HH_INCLUDED #include #include #include #include "io.hpp" #include "metadata.hpp" #include "util.hpp" NS_PROJ_START /** osgeo.proj.common namespace * * \brief Common classes. */ namespace common { // --------------------------------------------------------------------------- class UnitOfMeasure; /** Shared pointer of UnitOfMeasure. */ using UnitOfMeasurePtr = std::shared_ptr; /** Non-null shared pointer of UnitOfMeasure. */ using UnitOfMeasureNNPtr = util::nn; /** \brief Unit of measure. * * This is a mutable object. */ class PROJ_GCC_DLL UnitOfMeasure : public util::BaseObject { public: /** \brief Type of unit of measure. */ enum class PROJ_MSVC_DLL Type { /** Unknown unit of measure */ UNKNOWN, /** No unit of measure */ NONE, /** Angular unit of measure */ ANGULAR, /** Linear unit of measure */ LINEAR, /** Scale unit of measure */ SCALE, /** Time unit of measure */ TIME, /** Parametric unit of measure */ PARAMETRIC, }; PROJ_DLL explicit UnitOfMeasure( const std::string &nameIn = std::string(), double toSIIn = 1.0, Type typeIn = Type::UNKNOWN, const std::string &codeSpaceIn = std::string(), const std::string &codeIn = std::string()); //! @cond Doxygen_Suppress PROJ_DLL UnitOfMeasure(const UnitOfMeasure &other); PROJ_DLL ~UnitOfMeasure() override; PROJ_DLL UnitOfMeasure &operator=(const UnitOfMeasure &other); PROJ_DLL UnitOfMeasure &operator=(UnitOfMeasure &&other); PROJ_INTERNAL static UnitOfMeasureNNPtr create(const UnitOfMeasure &other); //! @endcond PROJ_DLL const std::string &name() PROJ_PURE_DECL; PROJ_DLL double conversionToSI() PROJ_PURE_DECL; PROJ_DLL Type type() PROJ_PURE_DECL; PROJ_DLL const std::string &codeSpace() PROJ_PURE_DECL; PROJ_DLL const std::string &code() PROJ_PURE_DECL; PROJ_DLL bool operator==(const UnitOfMeasure &other) PROJ_PURE_DECL; PROJ_DLL bool operator!=(const UnitOfMeasure &other) PROJ_PURE_DECL; //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter, const std::string &unitType = std::string()) const; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON( io::JSONFormatter *formatter) const; // throw(io::FormattingException) PROJ_INTERNAL std::string exportToPROJString() const; PROJ_INTERNAL bool _isEquivalentTo(const UnitOfMeasure &other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT) const; //! @endcond PROJ_DLL static const UnitOfMeasure NONE; PROJ_DLL static const UnitOfMeasure SCALE_UNITY; PROJ_DLL static const UnitOfMeasure PARTS_PER_MILLION; PROJ_DLL static const UnitOfMeasure PPM_PER_YEAR; PROJ_DLL static const UnitOfMeasure METRE; PROJ_DLL static const UnitOfMeasure METRE_PER_YEAR; PROJ_DLL static const UnitOfMeasure FOOT; PROJ_DLL static const UnitOfMeasure US_FOOT; PROJ_DLL static const UnitOfMeasure RADIAN; PROJ_DLL static const UnitOfMeasure MICRORADIAN; PROJ_DLL static const UnitOfMeasure DEGREE; PROJ_DLL static const UnitOfMeasure ARC_SECOND; PROJ_DLL static const UnitOfMeasure GRAD; PROJ_DLL static const UnitOfMeasure ARC_SECOND_PER_YEAR; PROJ_DLL static const UnitOfMeasure SECOND; PROJ_DLL static const UnitOfMeasure YEAR; private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Numeric value associated with a UnitOfMeasure. */ class Measure : public util::BaseObject { public: // cppcheck-suppress noExplicitConstructor PROJ_DLL Measure(double valueIn = 0.0, const UnitOfMeasure &unitIn = UnitOfMeasure()); //! @cond Doxygen_Suppress PROJ_DLL Measure(const Measure &other); PROJ_DLL ~Measure() override; //! @endcond PROJ_DLL const UnitOfMeasure &unit() PROJ_PURE_DECL; PROJ_DLL double getSIValue() PROJ_PURE_DECL; PROJ_DLL double value() PROJ_PURE_DECL; PROJ_DLL double convertToUnit(const UnitOfMeasure &otherUnit) PROJ_PURE_DECL; PROJ_DLL bool operator==(const Measure &other) PROJ_PURE_DECL; /** Default maximum resulative error. */ static constexpr double DEFAULT_MAX_REL_ERROR = 1e-10; PROJ_INTERNAL bool _isEquivalentTo(const Measure &other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, double maxRelativeError = DEFAULT_MAX_REL_ERROR) const; private: PROJ_OPAQUE_PRIVATE_DATA Measure &operator=(const Measure &) = delete; }; // --------------------------------------------------------------------------- /** \brief Numeric value, without a physical unit of measure. */ class Scale : public Measure { public: PROJ_DLL explicit Scale(double valueIn = 0.0); PROJ_DLL explicit Scale(double valueIn, const UnitOfMeasure &unitIn); //! @cond Doxygen_Suppress explicit Scale(const Measure &other) : Scale(other.value(), other.unit()) {} PROJ_DLL Scale(const Scale &other); PROJ_DLL ~Scale() override; //! @endcond protected: PROJ_FRIEND_OPTIONAL(Scale); Scale &operator=(const Scale &) = delete; }; // --------------------------------------------------------------------------- /** \brief Numeric value, with a angular unit of measure. */ class Angle : public Measure { public: PROJ_DLL explicit Angle(double valueIn = 0.0); PROJ_DLL Angle(double valueIn, const UnitOfMeasure &unitIn); //! @cond Doxygen_Suppress explicit Angle(const Measure &other) : Angle(other.value(), other.unit()) {} PROJ_DLL Angle(const Angle &other); PROJ_DLL ~Angle() override; //! @endcond protected: PROJ_FRIEND_OPTIONAL(Angle); Angle &operator=(const Angle &) = delete; }; // --------------------------------------------------------------------------- /** \brief Numeric value, with a linear unit of measure. */ class Length : public Measure { public: PROJ_DLL explicit Length(double valueIn = 0.0); PROJ_DLL Length(double valueIn, const UnitOfMeasure &unitIn); //! @cond Doxygen_Suppress explicit Length(const Measure &other) : Length(other.value(), other.unit()) {} PROJ_DLL Length(const Length &other); PROJ_DLL ~Length() override; //! @endcond protected: PROJ_FRIEND_OPTIONAL(Length); Length &operator=(const Length &) = delete; }; // --------------------------------------------------------------------------- /** \brief Date-time value, as a ISO:8601 encoded string, or other string * encoding */ class DateTime { public: //! @cond Doxygen_Suppress PROJ_DLL DateTime(const DateTime &other); PROJ_DLL ~DateTime(); //! @endcond PROJ_DLL bool isISO_8601() const; PROJ_DLL std::string toString() const; PROJ_DLL static DateTime create(const std::string &str); // may throw Exception protected: DateTime(); PROJ_FRIEND_OPTIONAL(DateTime); DateTime &operator=(const DateTime &other); private: explicit DateTime(const std::string &str); PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Data epoch */ class DataEpoch { public: //! @cond Doxygen_Suppress PROJ_DLL explicit DataEpoch(const Measure &coordinateEpochIn); PROJ_DLL DataEpoch(const DataEpoch &other); PROJ_DLL ~DataEpoch(); //! @endcond PROJ_DLL const Measure &coordinateEpoch() const; protected: DataEpoch(); PROJ_FRIEND_OPTIONAL(DataEpoch); private: DataEpoch &operator=(const DataEpoch &other) = delete; PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class IdentifiedObject; /** Shared pointer of IdentifiedObject. */ using IdentifiedObjectPtr = std::shared_ptr; /** Non-null shared pointer of IdentifiedObject. */ using IdentifiedObjectNNPtr = util::nn; /** \brief Abstract class representing a CRS-related object that has an * identification. * * \remark Implements IdentifiedObject from \ref ISO_19111_2019 */ class PROJ_GCC_DLL IdentifiedObject : public util::BaseObject, public util::IComparable, public io::IWKTExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~IdentifiedObject() override; //! @endcond PROJ_DLL static const std::string NAME_KEY; PROJ_DLL static const std::string IDENTIFIERS_KEY; PROJ_DLL static const std::string ALIAS_KEY; PROJ_DLL static const std::string REMARKS_KEY; PROJ_DLL static const std::string DEPRECATED_KEY; // in practice only name().description() is used PROJ_DLL const metadata::IdentifierNNPtr &name() PROJ_PURE_DECL; PROJ_DLL const std::string &nameStr() PROJ_PURE_DECL; PROJ_DLL const std::vector & identifiers() PROJ_PURE_DECL; PROJ_DLL const std::vector & aliases() PROJ_PURE_DECL; PROJ_DLL const std::string &remarks() PROJ_PURE_DECL; // from Apache SIS AbstractIdentifiedObject PROJ_DLL bool isDeprecated() PROJ_PURE_DECL; // Non-standard PROJ_DLL std::string alias() PROJ_PURE_DECL; PROJ_DLL int getEPSGCode() PROJ_PURE_DECL; PROJ_PRIVATE : //! @cond Doxygen_Suppress void formatID(io::WKTFormatter *formatter) const; PROJ_INTERNAL void formatID(io::JSONFormatter *formatter) const; PROJ_INTERNAL void formatRemarks(io::WKTFormatter *formatter) const; PROJ_INTERNAL void formatRemarks(io::JSONFormatter *formatter) const; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL bool _isEquivalentTo( const IdentifiedObject *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) PROJ_PURE_DECL; //! @endcond protected: PROJ_FRIEND_OPTIONAL(IdentifiedObject); INLINED_MAKE_SHARED IdentifiedObject(); IdentifiedObject(const IdentifiedObject &other); void setProperties(const util::PropertyMap &properties); // throw(InvalidValueTypeException) virtual bool hasEquivalentNameToUsingAlias( const IdentifiedObject *other, const io::DatabaseContextPtr &dbContext) const; private: PROJ_OPAQUE_PRIVATE_DATA IdentifiedObject &operator=(const IdentifiedObject &other) = delete; }; // --------------------------------------------------------------------------- class ObjectDomain; /** Shared pointer of ObjectDomain. */ using ObjectDomainPtr = std::shared_ptr; /** Non-null shared pointer of ObjectDomain. */ using ObjectDomainNNPtr = util::nn; /** \brief The scope and validity of a CRS-related object. * * \remark Implements ObjectDomain from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ObjectDomain : public util::BaseObject, public util::IComparable { public: //! @cond Doxygen_Suppress PROJ_DLL ~ObjectDomain() override; //! @endcond // In ISO_19111:2018, scope and domain are compulsory, but in WKT2:2015, // they // are not necessarily both specified PROJ_DLL const util::optional &scope() PROJ_PURE_DECL; PROJ_DLL const metadata::ExtentPtr &domainOfValidity() PROJ_PURE_DECL; PROJ_DLL static ObjectDomainNNPtr create(const util::optional &scopeIn, const metadata::ExtentPtr &extent); PROJ_PRIVATE : //! @cond Doxygen_Suppress void _exportToWKT(io::WKTFormatter *formatter) const; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON( io::JSONFormatter *formatter) const; // throw(FormattingException) bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: //! @cond Doxygen_Suppress ObjectDomain(const util::optional &scopeIn, const metadata::ExtentPtr &extent); //! @endcond ObjectDomain(const ObjectDomain &other); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA ObjectDomain &operator=(const ObjectDomain &other) = delete; }; // --------------------------------------------------------------------------- class ObjectUsage; /** Shared pointer of ObjectUsage. */ using ObjectUsagePtr = std::shared_ptr; /** Non-null shared pointer of ObjectUsage. */ using ObjectUsageNNPtr = util::nn; /** \brief Abstract class of a CRS-related object that has usages. * * \remark Implements ObjectUsage from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ObjectUsage : public IdentifiedObject { public: //! @cond Doxygen_Suppress PROJ_DLL ~ObjectUsage() override; //! @endcond PROJ_DLL const std::vector &domains() PROJ_PURE_DECL; PROJ_DLL static const std::string SCOPE_KEY; PROJ_DLL static const std::string DOMAIN_OF_VALIDITY_KEY; PROJ_DLL static const std::string OBJECT_DOMAIN_KEY; //! @cond Doxygen_Suppress bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: ObjectUsage(); ObjectUsage(const ObjectUsage &other); void setProperties(const util::PropertyMap &properties); // throw(InvalidValueTypeException) void baseExportToWKT( io::WKTFormatter *formatter) const; // throw(io::FormattingException) void baseExportToJSON( io::JSONFormatter *formatter) const; // throw(io::FormattingException) private: PROJ_OPAQUE_PRIVATE_DATA ObjectUsage &operator=(const ObjectUsage &other) = delete; }; } // namespace common NS_PROJ_END #endif // COMMON_HH_INCLUDED proj-9.6.0/include/proj/coordinateoperation.hpp000664 001754 001755 00000253522 14764566077 021610 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef COORDINATEOPERATION_HH_INCLUDED #define COORDINATEOPERATION_HH_INCLUDED #include #include #include #include #include "common.hpp" #include "io.hpp" #include "metadata.hpp" #include "proj.h" NS_PROJ_START namespace crs { class CRS; using CRSPtr = std::shared_ptr; using CRSNNPtr = util::nn; class DerivedCRS; class ProjectedCRS; } // namespace crs namespace io { class JSONParser; } // namespace io namespace coordinates { class CoordinateMetadata; using CoordinateMetadataPtr = std::shared_ptr; using CoordinateMetadataNNPtr = util::nn; } // namespace coordinates /** osgeo.proj.operation namespace \brief Coordinate operations (relationship between any two coordinate reference systems). This covers Conversion, Transformation, PointMotionOperation or ConcatenatedOperation. */ namespace operation { // --------------------------------------------------------------------------- /** \brief Grid description */ struct GridDescription { std::string shortName; /**< Grid short filename */ std::string fullName; /**< Grid full path name (if found) */ std::string packageName; /**< Package name (or empty) */ std::string url; /**< Grid URL (if packageName is empty), or package URL (or empty) */ bool directDownload; /**< Whether url can be fetched directly. */ /** Whether the grid is released with an open license. */ bool openLicense; bool available; /**< Whether GRID is available. */ //! @cond Doxygen_Suppress bool operator<(const GridDescription &other) const { return shortName < other.shortName; } PROJ_DLL GridDescription(); PROJ_DLL ~GridDescription(); PROJ_DLL GridDescription(const GridDescription &); PROJ_DLL GridDescription(GridDescription &&) noexcept; //! @endcond }; // --------------------------------------------------------------------------- class CoordinateOperation; /** Shared pointer of CoordinateOperation */ using CoordinateOperationPtr = std::shared_ptr; /** Non-null shared pointer of CoordinateOperation */ using CoordinateOperationNNPtr = util::nn; // --------------------------------------------------------------------------- class CoordinateTransformer; /** Shared pointer of CoordinateTransformer */ using CoordinateTransformerPtr = std::unique_ptr; /** Non-null shared pointer of CoordinateTransformer */ using CoordinateTransformerNNPtr = util::nn; /** \brief Coordinate transformer. * * Performs coordinate transformation of coordinate tuplies. * * @since 9.3 */ class PROJ_GCC_DLL CoordinateTransformer { public: //! @cond Doxygen_Suppress PROJ_DLL ~CoordinateTransformer(); //! @endcond PROJ_DLL PJ_COORD transform(PJ_COORD coord); protected: PROJ_FRIEND(CoordinateOperation); PROJ_INTERNAL CoordinateTransformer(); PROJ_INTERNAL static CoordinateTransformerNNPtr create(const CoordinateOperationNNPtr &op, PJ_CONTEXT *ctx); private: PROJ_OPAQUE_PRIVATE_DATA INLINED_MAKE_UNIQUE CoordinateTransformer & operator=(const CoordinateTransformer &other) = delete; }; // --------------------------------------------------------------------------- class Transformation; /** Shared pointer of Transformation */ using TransformationPtr = std::shared_ptr; /** Non-null shared pointer of Transformation */ using TransformationNNPtr = util::nn; /** \brief Abstract class for a mathematical operation on coordinates. * * A mathematical operation: *

* Many but not all coordinate operations (from CRS A to CRS B) also uniquely * define the inverse coordinate operation (from CRS B to CRS A). In some cases, * the coordinate operation method algorithm for the inverse coordinate * operation is the same as for the forward algorithm, but the signs of some * coordinate operation parameter values have to be reversed. In other cases, * different algorithms are required for the forward and inverse coordinate * operations, but the same coordinate operation parameter values are used. If * (some) entirely different parameter values are needed, a different coordinate * operation shall be defined. * * \remark Implements CoordinateOperation from \ref ISO_19111_2019 */ class PROJ_GCC_DLL CoordinateOperation : public common::ObjectUsage, public io::IPROJStringExportable, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~CoordinateOperation() override; //! @endcond PROJ_DLL const util::optional &operationVersion() const; PROJ_DLL const std::vector & coordinateOperationAccuracies() const; PROJ_DLL const crs::CRSPtr sourceCRS() const; PROJ_DLL const crs::CRSPtr targetCRS() const; PROJ_DLL const crs::CRSPtr &interpolationCRS() const; PROJ_DLL const util::optional & sourceCoordinateEpoch() const; PROJ_DLL const util::optional & targetCoordinateEpoch() const; PROJ_DLL CoordinateTransformerNNPtr coordinateTransformer(PJ_CONTEXT *ctx) const; /** \brief Return the inverse of the coordinate operation. * * \throw util::UnsupportedOperationException if inverse is not available */ PROJ_DLL virtual CoordinateOperationNNPtr inverse() const = 0; /** \brief Return grids needed by an operation. */ PROJ_DLL virtual std::set gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const = 0; PROJ_DLL bool isPROJInstantiable(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const; PROJ_DLL bool hasBallparkTransformation() const; PROJ_DLL bool requiresPerCoordinateInputTime() const; PROJ_DLL static const std::string OPERATION_VERSION_KEY; PROJ_DLL CoordinateOperationNNPtr normalizeForVisualization() const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_FOR_TEST CoordinateOperationNNPtr shallowClone() const; //! @endcond protected: PROJ_INTERNAL CoordinateOperation(); PROJ_INTERNAL CoordinateOperation(const CoordinateOperation &other); PROJ_FRIEND(crs::DerivedCRS); PROJ_FRIEND(io::AuthorityFactory); PROJ_FRIEND(CoordinateOperationFactory); PROJ_FRIEND(ConcatenatedOperation); PROJ_FRIEND(io::WKTParser); PROJ_FRIEND(io::JSONParser); PROJ_INTERNAL void setWeakSourceTargetCRS(std::weak_ptr sourceCRSIn, std::weak_ptr targetCRSIn); PROJ_INTERNAL void setCRSs(const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn); PROJ_INTERNAL void setCRSsUpdateInverse(const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn); PROJ_INTERNAL void setInterpolationCRS(const crs::CRSPtr &interpolationCRSIn); PROJ_INTERNAL void setCRSs(const CoordinateOperation *in, bool inverseSourceTarget); PROJ_INTERNAL void setAccuracies( const std::vector &accuracies); PROJ_INTERNAL void setHasBallparkTransformation(bool b); PROJ_INTERNAL void setRequiresPerCoordinateInputTime(bool b); PROJ_INTERNAL void setSourceCoordinateEpoch(const util::optional &epoch); PROJ_INTERNAL void setTargetCoordinateEpoch(const util::optional &epoch); PROJ_INTERNAL void setProperties(const util::PropertyMap &properties); // throw(InvalidValueTypeException) PROJ_INTERNAL virtual CoordinateOperationNNPtr _shallowClone() const = 0; private: PROJ_OPAQUE_PRIVATE_DATA CoordinateOperation &operator=(const CoordinateOperation &other) = delete; }; // --------------------------------------------------------------------------- /** \brief Abstract class modelling a parameter value (OperationParameter) * or group of parameters. * * \remark Implements GeneralOperationParameter from \ref ISO_19111_2019 */ class PROJ_GCC_DLL GeneralOperationParameter : public common::IdentifiedObject { public: //! @cond Doxygen_Suppress PROJ_DLL ~GeneralOperationParameter() override; //! @endcond //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override = 0; //! @endcond protected: PROJ_INTERNAL GeneralOperationParameter(); PROJ_INTERNAL GeneralOperationParameter(const GeneralOperationParameter &other); private: PROJ_OPAQUE_PRIVATE_DATA GeneralOperationParameter & operator=(const GeneralOperationParameter &other) = delete; }; /** Shared pointer of GeneralOperationParameter */ using GeneralOperationParameterPtr = std::shared_ptr; /** Non-null shared pointer of GeneralOperationParameter */ using GeneralOperationParameterNNPtr = util::nn; // --------------------------------------------------------------------------- class OperationParameter; /** Shared pointer of OperationParameter */ using OperationParameterPtr = std::shared_ptr; /** Non-null shared pointer of OperationParameter */ using OperationParameterNNPtr = util::nn; /** \brief The definition of a parameter used by a coordinate operation method. * * Most parameter values are numeric, but other types of parameter values are * possible. * * \remark Implements OperationParameter from \ref ISO_19111_2019 */ class PROJ_GCC_DLL OperationParameter final : public GeneralOperationParameter { public: //! @cond Doxygen_Suppress PROJ_DLL ~OperationParameter() override; //! @endcond //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond // non-standard PROJ_DLL static OperationParameterNNPtr create(const util::PropertyMap &properties); PROJ_DLL int getEPSGCode() PROJ_PURE_DECL; PROJ_DLL static const char *getNameForEPSGCode(int epsg_code) noexcept; protected: PROJ_INTERNAL OperationParameter(); PROJ_INTERNAL OperationParameter(const OperationParameter &other); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA OperationParameter &operator=(const OperationParameter &other) = delete; // cppcheck-suppress functionStatic PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) }; // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct MethodMapping; //! @endcond /** \brief Abstract class modelling a parameter value (OperationParameterValue) * or group of parameter values. * * \remark Implements GeneralParameterValue from \ref ISO_19111_2019 */ class PROJ_GCC_DLL GeneralParameterValue : public util::BaseObject, public io::IWKTExportable, public io::IJSONExportable, public util::IComparable { public: //! @cond Doxygen_Suppress PROJ_DLL ~GeneralParameterValue() override; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override = 0; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override = 0; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override = 0; //! @endcond protected: //! @cond Doxygen_Suppress PROJ_INTERNAL GeneralParameterValue(); PROJ_INTERNAL GeneralParameterValue(const GeneralParameterValue &other); friend class Conversion; friend class SingleOperation; friend class PointMotionOperation; PROJ_INTERNAL virtual void _exportToWKT(io::WKTFormatter *formatter, const MethodMapping *mapping) const = 0; // throw(io::FormattingException) //! @endcond private: PROJ_OPAQUE_PRIVATE_DATA GeneralParameterValue & operator=(const GeneralParameterValue &other) = delete; }; /** Shared pointer of GeneralParameterValue */ using GeneralParameterValuePtr = std::shared_ptr; /** Non-null shared pointer of GeneralParameterValue */ using GeneralParameterValueNNPtr = util::nn; // --------------------------------------------------------------------------- class ParameterValue; /** Shared pointer of ParameterValue */ using ParameterValuePtr = std::shared_ptr; /** Non-null shared pointer of ParameterValue */ using ParameterValueNNPtr = util::nn; /** \brief The value of the coordinate operation parameter. * * Most parameter values are numeric, but other types of parameter values are * possible. * * \remark Implements ParameterValue from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ParameterValue final : public util::BaseObject, public io::IWKTExportable, public util::IComparable { public: /** Type of the value. */ enum class Type { /** Measure (i.e. value with a unit) */ MEASURE, /** String */ STRING, /** Integer */ INTEGER, /** Boolean */ BOOLEAN, /** Filename */ FILENAME }; //! @cond Doxygen_Suppress PROJ_DLL ~ParameterValue() override; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) //! @endcond PROJ_DLL static ParameterValueNNPtr create(const common::Measure &measureIn); PROJ_DLL static ParameterValueNNPtr create(const char *stringValueIn); PROJ_DLL static ParameterValueNNPtr create(const std::string &stringValueIn); PROJ_DLL static ParameterValueNNPtr create(int integerValueIn); PROJ_DLL static ParameterValueNNPtr create(bool booleanValueIn); PROJ_DLL static ParameterValueNNPtr createFilename(const std::string &stringValueIn); PROJ_DLL const Type &type() PROJ_PURE_DECL; PROJ_DLL const common::Measure &value() PROJ_PURE_DECL; PROJ_DLL const std::string &stringValue() PROJ_PURE_DECL; PROJ_DLL const std::string &valueFile() PROJ_PURE_DECL; PROJ_DLL int integerValue() PROJ_PURE_DECL; PROJ_DLL bool booleanValue() PROJ_PURE_DECL; //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL explicit ParameterValue(const common::Measure &measureIn); PROJ_INTERNAL explicit ParameterValue(const std::string &stringValueIn, Type typeIn); PROJ_INTERNAL explicit ParameterValue(int integerValueIn); PROJ_INTERNAL explicit ParameterValue(bool booleanValueIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA ParameterValue &operator=(const ParameterValue &other) = delete; }; // --------------------------------------------------------------------------- class OperationParameterValue; /** Shared pointer of OperationParameterValue */ using OperationParameterValuePtr = std::shared_ptr; /** Non-null shared pointer of OperationParameterValue */ using OperationParameterValueNNPtr = util::nn; /** \brief A parameter value, ordered sequence of values, or reference to a * file of parameter values. * * This combines a OperationParameter with the corresponding ParameterValue. * * \remark Implements OperationParameterValue from \ref ISO_19111_2019 */ class PROJ_GCC_DLL OperationParameterValue final : public GeneralParameterValue { public: //! @cond Doxygen_Suppress PROJ_DLL ~OperationParameterValue() override; //! @endcond PROJ_DLL const OperationParameterNNPtr ¶meter() PROJ_PURE_DECL; PROJ_DLL const ParameterValueNNPtr ¶meterValue() PROJ_PURE_DECL; PROJ_DLL static OperationParameterValueNNPtr create(const OperationParameterNNPtr ¶meterIn, const ParameterValueNNPtr &valueIn); PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL static bool convertFromAbridged(const std::string ¶mName, double &val, const common::UnitOfMeasure *&unit, int ¶mEPSGCode); PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL OperationParameterValue(const OperationParameterNNPtr ¶meterIn, const ParameterValueNNPtr &valueIn); PROJ_INTERNAL OperationParameterValue(const OperationParameterValue &other); INLINED_MAKE_SHARED PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter, const MethodMapping *mapping) const override; // throw(io::FormattingException) private: PROJ_OPAQUE_PRIVATE_DATA OperationParameterValue & operator=(const OperationParameterValue &other) = delete; }; // --------------------------------------------------------------------------- class OperationMethod; /** Shared pointer of OperationMethod */ using OperationMethodPtr = std::shared_ptr; /** Non-null shared pointer of OperationMethod */ using OperationMethodNNPtr = util::nn; /** \brief The method (algorithm or procedure) used to perform the * coordinate operation. * * For a projection method, this contains the name of the projection method * and the name of the projection parameters. * * \remark Implements OperationMethod from \ref ISO_19111_2019 */ class PROJ_GCC_DLL OperationMethod : public common::IdentifiedObject, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~OperationMethod() override; //! @endcond PROJ_DLL const util::optional &formula() PROJ_PURE_DECL; PROJ_DLL const util::optional & formulaCitation() PROJ_PURE_DECL; PROJ_DLL const std::vector & parameters() PROJ_PURE_DECL; PROJ_DLL static OperationMethodNNPtr create(const util::PropertyMap &properties, const std::vector ¶meters); PROJ_DLL static OperationMethodNNPtr create(const util::PropertyMap &properties, const std::vector ¶meters); PROJ_DLL int getEPSGCode() PROJ_PURE_DECL; //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL OperationMethod(); PROJ_INTERNAL OperationMethod(const OperationMethod &other); INLINED_MAKE_SHARED friend class Conversion; private: PROJ_OPAQUE_PRIVATE_DATA OperationMethod &operator=(const OperationMethod &other) = delete; }; // --------------------------------------------------------------------------- /** \brief Exception that can be thrown when an invalid operation is attempted * to be constructed. */ class PROJ_GCC_DLL InvalidOperation : public util::Exception { public: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit InvalidOperation(const char *message); PROJ_INTERNAL explicit InvalidOperation(const std::string &message); PROJ_DLL InvalidOperation(const InvalidOperation &other); PROJ_DLL ~InvalidOperation() override; //! @endcond }; // --------------------------------------------------------------------------- class SingleOperation; /** Shared pointer of SingleOperation */ using SingleOperationPtr = std::shared_ptr; /** Non-null shared pointer of SingleOperation */ using SingleOperationNNPtr = util::nn; /** \brief A single (not concatenated) coordinate operation * (CoordinateOperation) * * \remark Implements SingleOperation from \ref ISO_19111_2019 */ class PROJ_GCC_DLL SingleOperation : virtual public CoordinateOperation { public: //! @cond Doxygen_Suppress PROJ_DLL ~SingleOperation() override; //! @endcond PROJ_DLL const std::vector & parameterValues() PROJ_PURE_DECL; PROJ_DLL const OperationMethodNNPtr &method() PROJ_PURE_DECL; PROJ_DLL const ParameterValuePtr & parameterValue(const std::string ¶mName, int epsg_code = 0) const noexcept; PROJ_DLL const ParameterValuePtr & parameterValue(int epsg_code) const noexcept; PROJ_DLL const common::Measure & parameterValueMeasure(const std::string ¶mName, int epsg_code = 0) const noexcept; PROJ_DLL const common::Measure & parameterValueMeasure(int epsg_code) const noexcept; PROJ_DLL static SingleOperationNNPtr createPROJBased( const util::PropertyMap &properties, const std::string &PROJString, const crs::CRSPtr &sourceCRS, const crs::CRSPtr &targetCRS, const std::vector &accuracies = std::vector()); PROJ_DLL std::set gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const override; PROJ_DLL std::list validateParameters() const; PROJ_DLL TransformationNNPtr substitutePROJAlternativeGridNames( io::DatabaseContextNNPtr databaseContext) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_DLL double parameterValueNumeric( int epsg_code, const common::UnitOfMeasure &targetUnit) const noexcept; PROJ_INTERNAL double parameterValueNumeric( const char *param_name, const common::UnitOfMeasure &targetUnit) const noexcept; PROJ_INTERNAL double parameterValueNumericAsSI(int epsg_code) const noexcept; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL bool isLongitudeRotation() const; //! @endcond protected: PROJ_INTERNAL explicit SingleOperation( const OperationMethodNNPtr &methodIn); PROJ_INTERNAL SingleOperation(const SingleOperation &other); PROJ_INTERNAL void setParameterValues(const std::vector &values); PROJ_INTERNAL void exportTransformationToWKT(io::WKTFormatter *formatter) const; PROJ_INTERNAL bool exportToPROJStringGeneric(io::PROJStringFormatter *formatter) const; PROJ_INTERNAL bool _isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext, bool inOtherDirection) const; PROJ_INTERNAL static GeneralParameterValueNNPtr createOperationParameterValueFromInterpolationCRS(int methodEPSGCode, int crsEPSGCode); PROJ_INTERNAL static void exportToPROJStringChangeVerticalUnit(io::PROJStringFormatter *formatter, double convFactor); private: PROJ_OPAQUE_PRIVATE_DATA SingleOperation &operator=(const SingleOperation &other) = delete; }; // --------------------------------------------------------------------------- class Conversion; /** Shared pointer of Conversion */ using ConversionPtr = std::shared_ptr; /** Non-null shared pointer of Conversion */ using ConversionNNPtr = util::nn; /** \brief A mathematical operation on coordinates in which the parameter * values are defined rather than empirically derived. * * Application of the coordinate conversion introduces no error into output * coordinates. The best-known example of a coordinate conversion is a map * projection. For coordinate conversions the output coordinates are referenced * to the same datum as are the input coordinates. * * Coordinate conversions forming a component of a derived CRS have a source * crs::CRS and a target crs::CRS that are NOT specified through the source and * target * associations, but through associations from crs::DerivedCRS to * crs::SingleCRS. * * \remark Implements Conversion from \ref ISO_19111_2019 */ /*! \section projection_parameters Projection parameters \subsection colatitude_cone_axis Co-latitude of cone axis The rotation applied to spherical coordinates for the oblique projection, measured on the conformal sphere in the plane of the meridian of origin. EPSG:1036 \subsection center_latitude Latitude of natural origin/Center Latitude The latitude of the point from which the values of both the geographical coordinates on the ellipsoid and the grid coordinates on the projection are deemed to increment or decrement for computational purposes. Alternatively it may be considered as the latitude of the point which in the absence of application of false coordinates has grid coordinates of (0,0). EPSG:8801 \subsection center_longitude Longitude of natural origin/Central Meridian The longitude of the point from which the values of both the geographical coordinates on the ellipsoid and the grid coordinates on the projection are deemed to increment or decrement for computational purposes. Alternatively it may be considered as the longitude of the point which in the absence of application of false coordinates has grid coordinates of (0,0). Sometimes known as "central meridian (CM)". EPSG:8802 \subsection scale Scale Factor The factor by which the map grid is reduced or enlarged during the projection process, defined by its value at the natural origin. EPSG:8805 \subsection false_easting False Easting Since the natural origin may be at or near the centre of the projection and under normal coordinate circumstances would thus give rise to negative coordinates over parts of the mapped area, this origin is usually given false coordinates which are large enough to avoid this inconvenience. The False Easting, FE, is the value assigned to the abscissa (east or west) axis of the projection grid at the natural origin. EPSG:8806 \subsection false_northing False Northing Since the natural origin may be at or near the centre of the projection and under normal coordinate circumstances would thus give rise to negative coordinates over parts of the mapped area, this origin is usually given false coordinates which are large enough to avoid this inconvenience. The False Northing, FN, is the value assigned to the ordinate (north or south) axis of the projection grid at the natural origin. EPSG:8807 \subsection latitude_projection_centre Latitude of projection centre For an oblique projection, this is the latitude of the point at which the azimuth of the central line is defined. EPSG:8811 \subsection longitude_projection_centre Longitude of projection centre For an oblique projection, this is the longitude of the point at which the azimuth of the central line is defined. EPSG:8812 \subsection azimuth_initial_line Azimuth of initial line The azimuthal direction (north zero, east of north being positive) of the great circle which is the centre line of an oblique projection. The azimuth is given at the projection centre. EPSG:8813 \subsection angle_from_recitfied_to_skrew_grid Angle from Rectified to Skew Grid The angle at the natural origin of an oblique projection through which the natural coordinate reference system is rotated to make the projection north axis parallel with true north. EPSG:8814 \subsection scale_factor_initial_line Scale factor on initial line The factor by which the map grid is reduced or enlarged during the projection process, defined by its value at the projection center. EPSG:8815 \subsection easting_projection_centre Easting at projection centre The easting value assigned to the projection centre. EPSG:8816 \subsection northing_projection_centre Northing at projection centre The northing value assigned to the projection centre. EPSG:8817 \subsection latitude_pseudo_standard_parallel Latitude of pseudo standard parallel Latitude of the parallel on which the conic or cylindrical projection is based. This latitude is not geographic, but is defined on the conformal sphere AFTER its rotation to obtain the oblique aspect of the projection. EPSG:8818 \subsection scale_factor_pseudo_standard_parallel Scale factor on pseudo standard parallel The factor by which the map grid is reduced or enlarged during the projection process, defined by its value at the pseudo-standard parallel. EPSG:8819 \subsection latitude_false_origin Latitude of false origin The latitude of the point which is not the natural origin and at which grid coordinate values false easting and false northing are defined. EPSG:8821 \subsection longitude_false_origin Longitude of false origin The longitude of the point which is not the natural origin and at which grid coordinate values false easting and false northing are defined. EPSG:8822 \subsection latitude_first_std_parallel Latitude of 1st standard parallel For a conic projection with two standard parallels, this is the latitude of one of the parallels of intersection of the cone with the ellipsoid. It is normally but not necessarily that nearest to the pole. Scale is true along this parallel. EPSG:8823 \subsection latitude_second_std_parallel Latitude of 2nd standard parallel For a conic projection with two standard parallels, this is the latitude of one of the parallels at which the cone intersects with the ellipsoid. It is normally but not necessarily that nearest to the equator. Scale is true along this parallel. EPSG:8824 \subsection easting_false_origin Easting of false origin The easting value assigned to the false origin. EPSG:8826 \subsection northing_false_origin Northing of false origin The northing value assigned to the false origin. EPSG:8827 \subsection latitude_std_parallel Latitude of standard parallel For polar aspect azimuthal projections, the parallel on which the scale factor is defined to be unity. EPSG:8832 \subsection longitude_of_origin Longitude of origin For polar aspect azimuthal projections, the meridian along which the northing axis increments and also across which parallels of latitude increment towards the north pole. EPSG:8833 */ class PROJ_GCC_DLL Conversion : public SingleOperation { public: //! @cond Doxygen_Suppress PROJ_DLL ~Conversion() override; //! @endcond PROJ_DLL CoordinateOperationNNPtr inverse() const override; //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) //! @endcond PROJ_DLL bool isUTM(int &zone, bool &north) const; PROJ_DLL ConversionNNPtr identify() const; PROJ_DLL static ConversionNNPtr create(const util::PropertyMap &properties, const OperationMethodNNPtr &methodIn, const std::vector &values); // throw InvalidOperation PROJ_DLL static ConversionNNPtr create(const util::PropertyMap &propertiesConversion, const util::PropertyMap &propertiesOperationMethod, const std::vector ¶meters, const std::vector &values); // throw InvalidOperation PROJ_DLL static ConversionNNPtr createUTM(const util::PropertyMap &properties, int zone, bool north); PROJ_DLL static ConversionNNPtr createTransverseMercator( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createGaussSchreiberTransverseMercator( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createTransverseMercatorSouthOriented( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createTwoPointEquidistant(const util::PropertyMap &properties, const common::Angle &latitudeFirstPoint, const common::Angle &longitudeFirstPoint, const common::Angle &latitudeSecondPoint, const common::Angle &longitudeSeconPoint, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createTunisiaMappingGrid( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createTunisiaMiningGrid( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createAlbersEqualArea(const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin); PROJ_DLL static ConversionNNPtr createLambertConicConformal_1SP( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createLambertConicConformal_1SP_VariantB( const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Scale &scale, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin); PROJ_DLL static ConversionNNPtr createLambertConicConformal_2SP(const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin); PROJ_DLL static ConversionNNPtr createLambertConicConformal_2SP_Michigan( const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin, const common::Scale &ellipsoidScalingFactor); PROJ_DLL static ConversionNNPtr createLambertConicConformal_2SP_Belgium( const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin); PROJ_DLL static ConversionNNPtr createAzimuthalEquidistant(const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createGuamProjection(const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createBonne(const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createLambertCylindricalEqualAreaSpherical( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createLambertCylindricalEqualArea( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createCassiniSoldner( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEquidistantConic(const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin); PROJ_DLL static ConversionNNPtr createEckertI(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEckertII(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEckertIII(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEckertIV(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEckertV(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEckertVI(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEquidistantCylindrical(const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createEquidistantCylindricalSpherical( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createGall(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createGoodeHomolosine(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createInterruptedGoodeHomolosine(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createGeostationarySatelliteSweepX( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &height, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createGeostationarySatelliteSweepY( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &height, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createGnomonic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createHotineObliqueMercatorVariantA( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeProjectionCentre, const common::Angle &azimuthInitialLine, const common::Angle &angleFromRectifiedToSkrewGrid, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createHotineObliqueMercatorVariantB( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeProjectionCentre, const common::Angle &azimuthInitialLine, const common::Angle &angleFromRectifiedToSkrewGrid, const common::Scale &scale, const common::Length &eastingProjectionCentre, const common::Length &northingProjectionCentre); PROJ_DLL static ConversionNNPtr createHotineObliqueMercatorTwoPointNaturalOrigin( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &latitudePoint1, const common::Angle &longitudePoint1, const common::Angle &latitudePoint2, const common::Angle &longitudePoint2, const common::Scale &scale, const common::Length &eastingProjectionCentre, const common::Length &northingProjectionCentre); PROJ_DLL static ConversionNNPtr createLabordeObliqueMercator(const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeProjectionCentre, const common::Angle &azimuthInitialLine, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createInternationalMapWorldPolyconic( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createKrovakNorthOriented( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeOfOrigin, const common::Angle &colatitudeConeAxis, const common::Angle &latitudePseudoStandardParallel, const common::Scale &scaleFactorPseudoStandardParallel, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createKrovak(const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeOfOrigin, const common::Angle &colatitudeConeAxis, const common::Angle &latitudePseudoStandardParallel, const common::Scale &scaleFactorPseudoStandardParallel, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createLambertAzimuthalEqualArea(const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createMillerCylindrical(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createMercatorVariantA( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createMercatorVariantB(const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createPopularVisualisationPseudoMercator( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createMercatorSpherical( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createMollweide(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createNewZealandMappingGrid( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createObliqueStereographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createOrthographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createLocalOrthographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Angle &azimuthInitialLine, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createAmericanPolyconic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createPolarStereographicVariantA( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createPolarStereographicVariantB( const util::PropertyMap &properties, const common::Angle &latitudeStandardParallel, const common::Angle &longitudeOfOrigin, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createRobinson(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createSinusoidal(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createStereographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createVanDerGrinten(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createWagnerI(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createWagnerII(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createWagnerIII(const util::PropertyMap &properties, const common::Angle &latitudeTrueScale, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createWagnerIV(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createWagnerV(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createWagnerVI(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createWagnerVII(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createQuadrilateralizedSphericalCube( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createSphericalCrossTrackHeight( const util::PropertyMap &properties, const common::Angle &pegPointLat, const common::Angle &pegPointLong, const common::Angle &pegPointHeading, const common::Length &pegPointHeight); PROJ_DLL static ConversionNNPtr createEqualEarth(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createVerticalPerspective(const util::PropertyMap &properties, const common::Angle &topoOriginLat, const common::Angle &topoOriginLong, const common::Length &topoOriginHeight, const common::Length &viewPointHeight, const common::Length &falseEasting, const common::Length &falseNorthing); PROJ_DLL static ConversionNNPtr createPoleRotationGRIBConvention( const util::PropertyMap &properties, const common::Angle &southPoleLatInUnrotatedCRS, const common::Angle &southPoleLongInUnrotatedCRS, const common::Angle &axisRotation); PROJ_DLL static ConversionNNPtr createPoleRotationNetCDFCFConvention( const util::PropertyMap &properties, const common::Angle &gridNorthPoleLatitude, const common::Angle &gridNorthPoleLongitude, const common::Angle &northPoleGridLongitude); PROJ_DLL static ConversionNNPtr createChangeVerticalUnit(const util::PropertyMap &properties, const common::Scale &factor); PROJ_DLL static ConversionNNPtr createChangeVerticalUnit(const util::PropertyMap &properties); PROJ_DLL static ConversionNNPtr createHeightDepthReversal(const util::PropertyMap &properties); PROJ_DLL static ConversionNNPtr createAxisOrderReversal(bool is3D); PROJ_DLL static ConversionNNPtr createGeographicGeocentric(const util::PropertyMap &properties); PROJ_DLL static ConversionNNPtr createGeographic2DOffsets(const util::PropertyMap &properties, const common::Angle &offsetLat, const common::Angle &offsetLong); PROJ_DLL static ConversionNNPtr createGeographic3DOffsets( const util::PropertyMap &properties, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight); PROJ_DLL static ConversionNNPtr createGeographic2DWithHeightOffsets( const util::PropertyMap &properties, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight); PROJ_DLL static ConversionNNPtr createVerticalOffset(const util::PropertyMap &properties, const common::Length &offsetHeight); PROJ_DLL ConversionPtr convertToOtherMethod(int targetEPSGCode) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL const char *getESRIMethodName() const; PROJ_INTERNAL const char *getWKT1GDALMethodName() const; PROJ_INTERNAL ConversionNNPtr shallowClone() const; PROJ_INTERNAL ConversionNNPtr alterParametersLinearUnit( const common::UnitOfMeasure &unit, bool convertToNewUnit) const; PROJ_INTERNAL static ConversionNNPtr createGeographicGeocentric(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS); PROJ_INTERNAL static ConversionNNPtr createGeographicGeocentricLatitude(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS); //! @endcond protected: PROJ_INTERNAL Conversion(const OperationMethodNNPtr &methodIn, const std::vector &values); PROJ_INTERNAL Conversion(const Conversion &other); INLINED_MAKE_SHARED PROJ_FRIEND(crs::ProjectedCRS); PROJ_INTERNAL bool addWKTExtensionNode(io::WKTFormatter *formatter) const; PROJ_INTERNAL CoordinateOperationNNPtr _shallowClone() const override; private: PROJ_OPAQUE_PRIVATE_DATA Conversion &operator=(const Conversion &other) = delete; PROJ_INTERNAL static ConversionNNPtr create(const util::PropertyMap &properties, int method_epsg_code, const std::vector &values); PROJ_INTERNAL static ConversionNNPtr create(const util::PropertyMap &properties, const char *method_wkt2_name, const std::vector &values); }; // --------------------------------------------------------------------------- /** \brief A mathematical operation on coordinates in which parameters are * empirically derived from data containing the coordinates of a series of * points in both coordinate reference systems. * * This computational process is usually "over-determined", allowing derivation * of error (or accuracy) estimates for the coordinate transformation. Also, * the stochastic nature of the parameters may result in multiple (different) * versions of the same coordinate transformations between the same source and * target CRSs. Any single coordinate operation in which the input and output * coordinates are referenced to different datums (reference frames) will be a * coordinate transformation. * * \remark Implements Transformation from \ref ISO_19111_2019 */ class PROJ_GCC_DLL Transformation : public SingleOperation { public: //! @cond Doxygen_Suppress PROJ_DLL ~Transformation() override; //! @endcond PROJ_DLL const crs::CRSNNPtr &sourceCRS() PROJ_PURE_DECL; PROJ_DLL const crs::CRSNNPtr &targetCRS() PROJ_PURE_DECL; PROJ_DLL CoordinateOperationNNPtr inverse() const override; PROJ_DLL static TransformationNNPtr create(const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies); // throw InvalidOperation PROJ_DLL static TransformationNNPtr create(const util::PropertyMap &propertiesTransformation, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const util::PropertyMap &propertiesOperationMethod, const std::vector ¶meters, const std::vector &values, const std::vector &accuracies); // throw InvalidOperation PROJ_DLL static TransformationNNPtr createGeocentricTranslations( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createPositionVector( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createCoordinateFrameRotation( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createTimeDependentPositionVector( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, double rateTranslationX, double rateTranslationY, double rateTranslationZ, double rateRotationX, double rateRotationY, double rateRotationZ, double rateScaleDifference, double referenceEpochYear, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createTimeDependentCoordinateFrameRotation( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, double rateTranslationX, double rateTranslationY, double rateTranslationZ, double rateRotationX, double rateRotationY, double rateRotationZ, double rateScaleDifference, double referenceEpochYear, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createTOWGS84( const crs::CRSNNPtr &sourceCRSIn, const std::vector &TOWGS84Parameters); // throw InvalidOperation PROJ_DLL static TransformationNNPtr createNTv2( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const std::string &filename, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createMolodensky( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double semiMajorAxisDifferenceMetre, double flattingDifference, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createAbridgedMolodensky( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double semiMajorAxisDifferenceMetre, double flattingDifference, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createGravityRelatedHeightToGeographic3D( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const std::string &filename, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createVERTCON( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const std::string &filename, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createLongitudeRotation( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offset); PROJ_DLL static TransformationNNPtr createGeographic2DOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offsetLat, const common::Angle &offsetLong, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createGeographic3DOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createGeographic2DWithHeightOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createCartesianGridOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Length &eastingOffset, const common::Length &northingOffset, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createVerticalOffset( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Length &offsetHeight, const std::vector &accuracies); PROJ_DLL static TransformationNNPtr createChangeVerticalUnit( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Scale &factor, const std::vector &accuracies); PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL const std::string & getPROJ4NadgridsCompatibleFilename() const; PROJ_FOR_TEST std::vector getTOWGS84Parameters( bool canThrowException) const; // throw(io::FormattingException) PROJ_INTERNAL const std::string &getHeightToGeographic3DFilename() const; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL TransformationNNPtr shallowClone() const; PROJ_INTERNAL TransformationNNPtr promoteTo3D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; PROJ_INTERNAL TransformationNNPtr demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; PROJ_INTERNAL static bool isGeographic3DToGravityRelatedHeight(const OperationMethodNNPtr &method, bool allowInverse); //! @endcond protected: PROJ_INTERNAL Transformation( const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies); PROJ_INTERNAL Transformation(const Transformation &other); INLINED_MAKE_SHARED PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_FRIEND(CoordinateOperation); PROJ_FRIEND(CoordinateOperationFactory); PROJ_FRIEND(SingleOperation); PROJ_INTERNAL TransformationNNPtr inverseAsTransformation() const; PROJ_INTERNAL CoordinateOperationNNPtr _shallowClone() const override; private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class PointMotionOperation; /** Shared pointer of PointMotionOperation */ using PointMotionOperationPtr = std::shared_ptr; /** Non-null shared pointer of PointMotionOperation */ using PointMotionOperationNNPtr = util::nn; /** \brief A mathematical operation that describes the change of coordinate * values within one coordinate reference system due to the motion of the * point between one coordinate epoch and another coordinate epoch. * * The motion is due to tectonic plate movement or deformation. * * \remark Implements PointMotionOperation from \ref ISO_19111_2019 */ class PROJ_GCC_DLL PointMotionOperation : public SingleOperation { public: // TODO //! @cond Doxygen_Suppress PROJ_DLL ~PointMotionOperation() override; //! @endcond PROJ_DLL const crs::CRSNNPtr &sourceCRS() PROJ_PURE_DECL; PROJ_DLL CoordinateOperationNNPtr inverse() const override; PROJ_DLL static PointMotionOperationNNPtr create(const util::PropertyMap &properties, const crs::CRSNNPtr &crsIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies); // throw InvalidOperation PROJ_DLL static PointMotionOperationNNPtr create(const util::PropertyMap &propertiesOperation, const crs::CRSNNPtr &crsIn, const util::PropertyMap &propertiesOperationMethod, const std::vector ¶meters, const std::vector &values, const std::vector &accuracies); // throw InvalidOperation PROJ_DLL PointMotionOperationNNPtr substitutePROJAlternativeGridNames( io::DatabaseContextNNPtr databaseContext) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL PointMotionOperationNNPtr shallowClone() const; PROJ_INTERNAL PointMotionOperationNNPtr cloneWithEpochs(const common::DataEpoch &sourceEpoch, const common::DataEpoch &targetEpoch) const; PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) //! @endcond protected: PROJ_INTERNAL PointMotionOperation( const crs::CRSNNPtr &crsIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies); PROJ_INTERNAL PointMotionOperation(const PointMotionOperation &other); INLINED_MAKE_SHARED PROJ_INTERNAL CoordinateOperationNNPtr _shallowClone() const override; private: PointMotionOperation &operator=(const PointMotionOperation &) = delete; }; // --------------------------------------------------------------------------- class ConcatenatedOperation; /** Shared pointer of ConcatenatedOperation */ using ConcatenatedOperationPtr = std::shared_ptr; /** Non-null shared pointer of ConcatenatedOperation */ using ConcatenatedOperationNNPtr = util::nn; /** \brief An ordered sequence of two or more single coordinate operations * (SingleOperation). * * The sequence of coordinate operations is constrained by the requirement * that * the source coordinate reference system of step n+1 shall be the same as * the target coordinate reference system of step n. * * \remark Implements ConcatenatedOperation from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ConcatenatedOperation final : public CoordinateOperation { public: //! @cond Doxygen_Suppress PROJ_DLL ~ConcatenatedOperation() override; //! @endcond PROJ_DLL const std::vector &operations() const; PROJ_DLL CoordinateOperationNNPtr inverse() const override; PROJ_DLL static ConcatenatedOperationNNPtr create(const util::PropertyMap &properties, const std::vector &operationsIn, const std::vector &accuracies); // throw InvalidOperation PROJ_DLL static CoordinateOperationNNPtr createComputeMetadata( const std::vector &operationsIn, bool checkExtent); // throw InvalidOperation PROJ_DLL std::set gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const override; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL static void fixSteps(const crs::CRSNNPtr &concatOpSourceCRS, const crs::CRSNNPtr &concatOpTargetCRS, std::vector &operationsInOut, const io::DatabaseContextPtr &dbContext, bool fixDirectionAllowed); //! @endcond protected: PROJ_INTERNAL ConcatenatedOperation(const ConcatenatedOperation &other); PROJ_INTERNAL explicit ConcatenatedOperation( const std::vector &operationsIn); PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL CoordinateOperationNNPtr _shallowClone() const override; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA ConcatenatedOperation & operator=(const ConcatenatedOperation &other) = delete; PROJ_INTERNAL static void setCRSsUpdateInverse(CoordinateOperation *co, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS); }; // --------------------------------------------------------------------------- class CoordinateOperationContext; /** Unique pointer of CoordinateOperationContext */ using CoordinateOperationContextPtr = std::unique_ptr; /** Non-null unique pointer of CoordinateOperationContext */ using CoordinateOperationContextNNPtr = util::nn; /** \brief Context in which a coordinate operation is to be used. * * \remark Implements [CoordinateOperationFactory * https://sis.apache.org/apidocs/org/apache/sis/referencing/operation/CoordinateOperationContext.html] * from * Apache SIS */ class PROJ_GCC_DLL CoordinateOperationContext { public: //! @cond Doxygen_Suppress PROJ_DLL virtual ~CoordinateOperationContext(); //! @endcond PROJ_DLL const io::AuthorityFactoryPtr &getAuthorityFactory() const; PROJ_DLL const metadata::ExtentPtr &getAreaOfInterest() const; PROJ_DLL void setAreaOfInterest(const metadata::ExtentPtr &extent); PROJ_DLL double getDesiredAccuracy() const; PROJ_DLL void setDesiredAccuracy(double accuracy); PROJ_DLL void setAllowBallparkTransformations(bool allow); PROJ_DLL bool getAllowBallparkTransformations() const; /** Specify how source and target CRS extent should be used to restrict * candidate operations (only taken into account if no explicit area of * interest is specified. */ enum class SourceTargetCRSExtentUse { /** Ignore CRS extent */ NONE, /** Test coordinate operation extent against both CRS extent. */ BOTH, /** Test coordinate operation extent against the intersection of both CRS extent. */ INTERSECTION, /** Test coordinate operation against the smallest of both CRS extent. */ SMALLEST, }; PROJ_DLL void setSourceAndTargetCRSExtentUse(SourceTargetCRSExtentUse use); PROJ_DLL SourceTargetCRSExtentUse getSourceAndTargetCRSExtentUse() const; /** Spatial criterion to restrict candidate operations. */ enum class SpatialCriterion { /** The area of validity of transforms should strictly contain the * are of interest. */ STRICT_CONTAINMENT, /** The area of validity of transforms should at least intersect the * area of interest. */ PARTIAL_INTERSECTION }; PROJ_DLL void setSpatialCriterion(SpatialCriterion criterion); PROJ_DLL SpatialCriterion getSpatialCriterion() const; PROJ_DLL void setUsePROJAlternativeGridNames(bool usePROJNames); PROJ_DLL bool getUsePROJAlternativeGridNames() const; PROJ_DLL void setDiscardSuperseded(bool discard); PROJ_DLL bool getDiscardSuperseded() const; /** Describe how grid availability is used. */ enum class GridAvailabilityUse { /** Grid availability is only used for sorting results. Operations * where some grids are missing will be sorted last. */ USE_FOR_SORTING, /** Completely discard an operation if a required grid is missing. */ DISCARD_OPERATION_IF_MISSING_GRID, /** Ignore grid availability at all. Results will be presented as if * all grids were available. */ IGNORE_GRID_AVAILABILITY, /** Results will be presented as if grids known to PROJ (that is * registered in the grid_alternatives table of its database) were * available. Used typically when networking is enabled. */ KNOWN_AVAILABLE, }; PROJ_DLL void setGridAvailabilityUse(GridAvailabilityUse use); PROJ_DLL GridAvailabilityUse getGridAvailabilityUse() const; /** Describe if and how intermediate CRS should be used */ enum class IntermediateCRSUse { /** Always search for intermediate CRS. */ ALWAYS, /** Only attempt looking for intermediate CRS if there is no direct * transformation available. */ IF_NO_DIRECT_TRANSFORMATION, /* Do not attempt looking for intermediate CRS. */ NEVER, }; PROJ_DLL void setAllowUseIntermediateCRS(IntermediateCRSUse use); PROJ_DLL IntermediateCRSUse getAllowUseIntermediateCRS() const; PROJ_DLL void setIntermediateCRS(const std::vector> &intermediateCRSAuthCodes); PROJ_DLL const std::vector> & getIntermediateCRS() const; PROJ_DLL void setSourceCoordinateEpoch(const util::optional &epoch); PROJ_DLL const util::optional & getSourceCoordinateEpoch() const; PROJ_DLL void setTargetCoordinateEpoch(const util::optional &epoch); PROJ_DLL const util::optional & getTargetCoordinateEpoch() const; PROJ_DLL static CoordinateOperationContextNNPtr create(const io::AuthorityFactoryPtr &authorityFactory, const metadata::ExtentPtr &extent, double accuracy); PROJ_DLL CoordinateOperationContextNNPtr clone() const; protected: PROJ_INTERNAL CoordinateOperationContext(); PROJ_INTERNAL CoordinateOperationContext(const CoordinateOperationContext &); INLINED_MAKE_UNIQUE private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class CoordinateOperationFactory; /** Unique pointer of CoordinateOperationFactory */ using CoordinateOperationFactoryPtr = std::unique_ptr; /** Non-null unique pointer of CoordinateOperationFactory */ using CoordinateOperationFactoryNNPtr = util::nn; /** \brief Creates coordinate operations. This factory is capable to find * coordinate transformations or conversions between two coordinate * reference * systems. * * \remark Implements (partially) CoordinateOperationFactory from \ref * GeoAPI */ class PROJ_GCC_DLL CoordinateOperationFactory { public: //! @cond Doxygen_Suppress PROJ_DLL virtual ~CoordinateOperationFactory(); //! @endcond PROJ_DLL CoordinateOperationPtr createOperation( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) const; PROJ_DLL std::vector createOperations(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const CoordinateOperationContextNNPtr &context) const; PROJ_DLL std::vector createOperations( const coordinates::CoordinateMetadataNNPtr &sourceCoordinateMetadata, const crs::CRSNNPtr &targetCRS, const CoordinateOperationContextNNPtr &context) const; PROJ_DLL std::vector createOperations( const crs::CRSNNPtr &sourceCRS, const coordinates::CoordinateMetadataNNPtr &targetCoordinateMetadata, const CoordinateOperationContextNNPtr &context) const; PROJ_DLL std::vector createOperations( const coordinates::CoordinateMetadataNNPtr &sourceCoordinateMetadata, const coordinates::CoordinateMetadataNNPtr &targetCoordinateMetadata, const CoordinateOperationContextNNPtr &context) const; PROJ_DLL static CoordinateOperationFactoryNNPtr create(); protected: PROJ_INTERNAL CoordinateOperationFactory(); INLINED_MAKE_UNIQUE private: PROJ_OPAQUE_PRIVATE_DATA }; } // namespace operation NS_PROJ_END #endif // COORDINATEOPERATION_HH_INCLUDED proj-9.6.0/include/proj/coordinates.hpp000664 001754 001755 00000010131 14764566077 020035 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2023, 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. ****************************************************************************/ #ifndef COORDINATES_HH_INCLUDED #define COORDINATES_HH_INCLUDED #include #include "common.hpp" #include "crs.hpp" #include "io.hpp" #include "util.hpp" NS_PROJ_START /** osgeo.proj.coordinates namespace \brief Coordinates package */ namespace coordinates { class CoordinateMetadata; /** Shared pointer of CoordinateMetadata */ using CoordinateMetadataPtr = std::shared_ptr; /** Non-null shared pointer of CoordinateMetadata */ using CoordinateMetadataNNPtr = util::nn; // --------------------------------------------------------------------------- /** \brief Associates a CRS with a coordinate epoch. * * \remark Implements CoordinateMetadata from \ref ISO_19111_2019 * \since 9.2 */ class PROJ_GCC_DLL CoordinateMetadata : public util::BaseObject, public io::IWKTExportable, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~CoordinateMetadata() override; //! @endcond PROJ_DLL const crs::CRSNNPtr &crs() PROJ_PURE_DECL; PROJ_DLL const util::optional & coordinateEpoch() PROJ_PURE_DECL; PROJ_DLL double coordinateEpochAsDecimalYear() PROJ_PURE_DECL; PROJ_DLL static CoordinateMetadataNNPtr create(const crs::CRSNNPtr &crsIn); PROJ_DLL static CoordinateMetadataNNPtr create(const crs::CRSNNPtr &crsIn, double coordinateEpochAsDecimalYear); PROJ_DLL static CoordinateMetadataNNPtr create(const crs::CRSNNPtr &crsIn, double coordinateEpochAsDecimalYear, const io::DatabaseContextPtr &dbContext); PROJ_DLL CoordinateMetadataNNPtr promoteTo3D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) //! @endcond protected: PROJ_INTERNAL explicit CoordinateMetadata(const crs::CRSNNPtr &crsIn); PROJ_INTERNAL CoordinateMetadata(const crs::CRSNNPtr &crsIn, double coordinateEpochAsDecimalYear); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA CoordinateMetadata &operator=(const CoordinateMetadata &other) = delete; }; // --------------------------------------------------------------------------- } // namespace coordinates NS_PROJ_END #endif // COORDINATES_HH_INCLUDED proj-9.6.0/include/proj/coordinatesystem.hpp000664 001754 001755 00000072731 14764566077 021135 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef CS_HH_INCLUDED #define CS_HH_INCLUDED #include #include #include #include #include "common.hpp" #include "io.hpp" #include "util.hpp" NS_PROJ_START /** osgeo.proj.cs namespace \brief Coordinate systems and their axis. */ namespace cs { // --------------------------------------------------------------------------- /** \brief The direction of positive increase in the coordinate value for a * coordinate system axis. * * \remark Implements AxisDirection from \ref ISO_19111_2019 */ class AxisDirection : public util::CodeList { public: //! @cond Doxygen_Suppress PROJ_DLL static const AxisDirection * valueOf(const std::string &nameIn) noexcept; //! @endcond AxisDirection(const AxisDirection &) = delete; AxisDirection &operator=(const AxisDirection &) = delete; AxisDirection(AxisDirection &&) = delete; AxisDirection &operator=(AxisDirection &&) = delete; PROJ_DLL static const AxisDirection NORTH; PROJ_DLL static const AxisDirection NORTH_NORTH_EAST; PROJ_DLL static const AxisDirection NORTH_EAST; PROJ_DLL static const AxisDirection EAST_NORTH_EAST; PROJ_DLL static const AxisDirection EAST; PROJ_DLL static const AxisDirection EAST_SOUTH_EAST; PROJ_DLL static const AxisDirection SOUTH_EAST; PROJ_DLL static const AxisDirection SOUTH_SOUTH_EAST; PROJ_DLL static const AxisDirection SOUTH; PROJ_DLL static const AxisDirection SOUTH_SOUTH_WEST; PROJ_DLL static const AxisDirection SOUTH_WEST; PROJ_DLL static const AxisDirection WEST_SOUTH_WEST; // note: was forgotten in WKT2-2015 PROJ_DLL static const AxisDirection WEST; PROJ_DLL static const AxisDirection WEST_NORTH_WEST; PROJ_DLL static const AxisDirection NORTH_WEST; PROJ_DLL static const AxisDirection NORTH_NORTH_WEST; PROJ_DLL static const AxisDirection UP; PROJ_DLL static const AxisDirection DOWN; PROJ_DLL static const AxisDirection GEOCENTRIC_X; PROJ_DLL static const AxisDirection GEOCENTRIC_Y; PROJ_DLL static const AxisDirection GEOCENTRIC_Z; PROJ_DLL static const AxisDirection COLUMN_POSITIVE; PROJ_DLL static const AxisDirection COLUMN_NEGATIVE; PROJ_DLL static const AxisDirection ROW_POSITIVE; PROJ_DLL static const AxisDirection ROW_NEGATIVE; PROJ_DLL static const AxisDirection DISPLAY_RIGHT; PROJ_DLL static const AxisDirection DISPLAY_LEFT; PROJ_DLL static const AxisDirection DISPLAY_UP; PROJ_DLL static const AxisDirection DISPLAY_DOWN; PROJ_DLL static const AxisDirection FORWARD; PROJ_DLL static const AxisDirection AFT; PROJ_DLL static const AxisDirection PORT; PROJ_DLL static const AxisDirection STARBOARD; PROJ_DLL static const AxisDirection CLOCKWISE; PROJ_DLL static const AxisDirection COUNTER_CLOCKWISE; PROJ_DLL static const AxisDirection TOWARDS; PROJ_DLL static const AxisDirection AWAY_FROM; PROJ_DLL static const AxisDirection FUTURE; PROJ_DLL static const AxisDirection PAST; PROJ_DLL static const AxisDirection UNSPECIFIED; private: explicit AxisDirection(const std::string &nameIn); static std::map registry; }; // --------------------------------------------------------------------------- /** \brief Meaning of the axis value range specified through minimumValue and * maximumValue * * \remark Implements RangeMeaning from \ref ISO_19111_2019 * \since 9.2 */ class RangeMeaning : public util::CodeList { public: //! @cond Doxygen_Suppress PROJ_DLL static const RangeMeaning * valueOf(const std::string &nameIn) noexcept; //! @endcond PROJ_DLL static const RangeMeaning EXACT; PROJ_DLL static const RangeMeaning WRAPAROUND; protected: friend class util::optional; RangeMeaning(); private: explicit RangeMeaning(const std::string &nameIn); static std::map registry; }; // --------------------------------------------------------------------------- class Meridian; /** Shared pointer of Meridian. */ using MeridianPtr = std::shared_ptr; /** Non-null shared pointer of Meridian. */ using MeridianNNPtr = util::nn; /** \brief The meridian that the axis follows from the pole, for a coordinate * reference system centered on a pole. * * \note There is no modelling for this concept in \ref ISO_19111_2019 * * \remark Implements MERIDIAN from \ref WKT2 */ class PROJ_GCC_DLL Meridian : public common::IdentifiedObject, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~Meridian() override; //! @endcond PROJ_DLL const common::Angle &longitude() PROJ_PURE_DECL; // non-standard PROJ_DLL static MeridianNNPtr create(const common::Angle &longitudeIn); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) //! @endcond protected: #ifdef DOXYGEN_ENABLED Angle angle_; #endif PROJ_INTERNAL explicit Meridian(const common::Angle &longitudeIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA Meridian(const Meridian &other) = delete; Meridian &operator=(const Meridian &other) = delete; }; // --------------------------------------------------------------------------- class CoordinateSystemAxis; /** Shared pointer of CoordinateSystemAxis. */ using CoordinateSystemAxisPtr = std::shared_ptr; /** Non-null shared pointer of CoordinateSystemAxis. */ using CoordinateSystemAxisNNPtr = util::nn; /** \brief The definition of a coordinate system axis. * * \remark Implements CoordinateSystemAxis from \ref ISO_19111_2019 */ class PROJ_GCC_DLL CoordinateSystemAxis final : public common::IdentifiedObject, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~CoordinateSystemAxis() override; //! @endcond PROJ_DLL const std::string &abbreviation() PROJ_PURE_DECL; PROJ_DLL const AxisDirection &direction() PROJ_PURE_DECL; PROJ_DLL const common::UnitOfMeasure &unit() PROJ_PURE_DECL; PROJ_DLL const util::optional &minimumValue() PROJ_PURE_DECL; PROJ_DLL const util::optional &maximumValue() PROJ_PURE_DECL; PROJ_DLL const util::optional &rangeMeaning() PROJ_PURE_DECL; PROJ_DLL const MeridianPtr &meridian() PROJ_PURE_DECL; // Non-standard PROJ_DLL static CoordinateSystemAxisNNPtr create(const util::PropertyMap &properties, const std::string &abbreviationIn, const AxisDirection &directionIn, const common::UnitOfMeasure &unitIn, const MeridianPtr &meridianIn = nullptr); PROJ_DLL static CoordinateSystemAxisNNPtr create(const util::PropertyMap &properties, const std::string &abbreviationIn, const AxisDirection &directionIn, const common::UnitOfMeasure &unitIn, const util::optional &minimumValueIn, const util::optional &maximumValueIn, const util::optional &rangeMeaningIn, const MeridianPtr &meridianIn = nullptr); PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter, int order, bool disableAbbrev) const; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL static std::string normalizeAxisName(const std::string &str); PROJ_INTERNAL static CoordinateSystemAxisNNPtr createLAT_NORTH(const common::UnitOfMeasure &unit); PROJ_INTERNAL static CoordinateSystemAxisNNPtr createLONG_EAST(const common::UnitOfMeasure &unit); PROJ_INTERNAL CoordinateSystemAxisNNPtr alterUnit(const common::UnitOfMeasure &newUnit) const; //! @endcond private: PROJ_OPAQUE_PRIVATE_DATA CoordinateSystemAxis(const CoordinateSystemAxis &other) = delete; CoordinateSystemAxis &operator=(const CoordinateSystemAxis &other) = delete; PROJ_INTERNAL CoordinateSystemAxis(); /* cppcheck-suppress unusedPrivateFunction */ INLINED_MAKE_SHARED }; // --------------------------------------------------------------------------- /** \brief Abstract class modelling a coordinate system (CS) * * A CS is the non-repeating sequence of coordinate system axes that spans a * given coordinate space. A CS is derived from a set of mathematical rules for * specifying how coordinates in a given space are to be assigned to points. * The coordinate values in a coordinate tuple shall be recorded in the order * in which the coordinate system axes associations are recorded. * * \remark Implements CoordinateSystem from \ref ISO_19111_2019 */ class PROJ_GCC_DLL CoordinateSystem : public common::IdentifiedObject, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~CoordinateSystem() override; //! @endcond PROJ_DLL const std::vector & axisList() PROJ_PURE_DECL; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL virtual std::string getWKT2Type(bool) const = 0; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL explicit CoordinateSystem( const std::vector &axisIn); private: PROJ_OPAQUE_PRIVATE_DATA CoordinateSystem(const CoordinateSystem &other) = delete; CoordinateSystem &operator=(const CoordinateSystem &other) = delete; }; /** Shared pointer of CoordinateSystem. */ using CoordinateSystemPtr = std::shared_ptr; /** Non-null shared pointer of CoordinateSystem. */ using CoordinateSystemNNPtr = util::nn; // --------------------------------------------------------------------------- class SphericalCS; /** Shared pointer of SphericalCS. */ using SphericalCSPtr = std::shared_ptr; /** Non-null shared pointer of SphericalCS. */ using SphericalCSNNPtr = util::nn; /** \brief A three-dimensional coordinate system in Euclidean space with one * distance measured from the origin and two angular coordinates. * * Not to be confused with an ellipsoidal coordinate system based on an * ellipsoid "degenerated" into a sphere. A SphericalCS shall have three * axis associations. * * \remark Implements SphericalCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL SphericalCS final : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~SphericalCS() override; //! @endcond // non-standard PROJ_DLL static SphericalCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3); PROJ_DLL static SphericalCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2); /** Value of getWKT2Type() */ static constexpr const char *WKT2_TYPE = "spherical"; protected: PROJ_INTERNAL explicit SphericalCS( const std::vector &axisIn); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool) const override { return WKT2_TYPE; } private: SphericalCS(const SphericalCS &other) = delete; }; // --------------------------------------------------------------------------- class EllipsoidalCS; /** Shared pointer of EllipsoidalCS. */ using EllipsoidalCSPtr = std::shared_ptr; /** Non-null shared pointer of EllipsoidalCS. */ using EllipsoidalCSNNPtr = util::nn; /** \brief A two- or three-dimensional coordinate system in which position is * specified by geodetic latitude, geodetic longitude, and (in the * three-dimensional case) ellipsoidal height. * * An EllipsoidalCS shall have two or three associations. * * \remark Implements EllipsoidalCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL EllipsoidalCS final : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~EllipsoidalCS() override; //! @endcond // non-standard PROJ_DLL static EllipsoidalCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2); PROJ_DLL static EllipsoidalCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3); PROJ_DLL static EllipsoidalCSNNPtr createLatitudeLongitude(const common::UnitOfMeasure &unit); PROJ_DLL static EllipsoidalCSNNPtr createLatitudeLongitudeEllipsoidalHeight( const common::UnitOfMeasure &angularUnit, const common::UnitOfMeasure &linearUnit); PROJ_DLL static EllipsoidalCSNNPtr createLongitudeLatitude(const common::UnitOfMeasure &unit); PROJ_DLL static EllipsoidalCSNNPtr createLongitudeLatitudeEllipsoidalHeight( const common::UnitOfMeasure &angularUnit, const common::UnitOfMeasure &linearUnit); /** Value of getWKT2Type() */ static constexpr const char *WKT2_TYPE = "ellipsoidal"; //! @cond Doxygen_Suppress /** \brief Typical axis order. */ enum class AxisOrder { /** Latitude(North), Longitude(East) */ LAT_NORTH_LONG_EAST, /** Latitude(North), Longitude(East), Height(up) */ LAT_NORTH_LONG_EAST_HEIGHT_UP, /** Longitude(East), Latitude(North) */ LONG_EAST_LAT_NORTH, /** Longitude(East), Latitude(North), Height(up) */ LONG_EAST_LAT_NORTH_HEIGHT_UP, /** Other axis order. */ OTHER }; PROJ_INTERNAL AxisOrder axisOrder() const; PROJ_INTERNAL EllipsoidalCSNNPtr alterAngularUnit(const common::UnitOfMeasure &angularUnit) const; PROJ_INTERNAL EllipsoidalCSNNPtr alterLinearUnit(const common::UnitOfMeasure &linearUnit) const; //! @endcond protected: PROJ_INTERNAL explicit EllipsoidalCS( const std::vector &axisIn); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool) const override { return WKT2_TYPE; } protected: EllipsoidalCS(const EllipsoidalCS &other) = delete; }; // --------------------------------------------------------------------------- class VerticalCS; /** Shared pointer of VerticalCS. */ using VerticalCSPtr = std::shared_ptr; /** Non-null shared pointer of VerticalCS. */ using VerticalCSNNPtr = util::nn; /** \brief A one-dimensional coordinate system used to record the heights or * depths of points. * * Such a coordinate system is usually dependent on the Earth's gravity field. * A VerticalCS shall have one axis association. * * \remark Implements VerticalCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL VerticalCS final : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~VerticalCS() override; //! @endcond PROJ_DLL static VerticalCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis); PROJ_DLL static VerticalCSNNPtr createGravityRelatedHeight(const common::UnitOfMeasure &unit); /** Value of getWKT2Type() */ static constexpr const char *WKT2_TYPE = "vertical"; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL VerticalCSNNPtr alterUnit(const common::UnitOfMeasure &unit) const; //! @endcond protected: PROJ_INTERNAL explicit VerticalCS(const CoordinateSystemAxisNNPtr &axisIn); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool) const override { return WKT2_TYPE; } private: VerticalCS(const VerticalCS &other) = delete; }; // --------------------------------------------------------------------------- class CartesianCS; /** Shared pointer of CartesianCS. */ using CartesianCSPtr = std::shared_ptr; /** Non-null shared pointer of CartesianCS. */ using CartesianCSNNPtr = util::nn; /** \brief A two- or three-dimensional coordinate system in Euclidean space * with orthogonal straight axes. * * All axes shall have the same length unit. A CartesianCS shall have two or * three axis associations; the number of associations shall equal the * dimension of the CS. * * \remark Implements CartesianCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL CartesianCS final : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~CartesianCS() override; //! @endcond PROJ_DLL static CartesianCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2); PROJ_DLL static CartesianCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3); PROJ_DLL static CartesianCSNNPtr createEastingNorthing(const common::UnitOfMeasure &unit); PROJ_DLL static CartesianCSNNPtr createNorthingEasting(const common::UnitOfMeasure &unit); PROJ_DLL static CartesianCSNNPtr createNorthPoleEastingSouthNorthingSouth(const common::UnitOfMeasure &unit); PROJ_DLL static CartesianCSNNPtr createSouthPoleEastingNorthNorthingNorth(const common::UnitOfMeasure &unit); PROJ_DLL static CartesianCSNNPtr createWestingSouthing(const common::UnitOfMeasure &unit); PROJ_DLL static CartesianCSNNPtr createGeocentric(const common::UnitOfMeasure &unit); /** Value of getWKT2Type() */ static constexpr const char *WKT2_TYPE = "Cartesian"; // uppercase is intended PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL CartesianCSNNPtr alterUnit(const common::UnitOfMeasure &unit) const; //! @endcond protected: PROJ_INTERNAL explicit CartesianCS( const std::vector &axisIn); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool) const override { return WKT2_TYPE; } private: CartesianCS(const CartesianCS &other) = delete; }; // --------------------------------------------------------------------------- class AffineCS; /** Shared pointer of AffineCS. */ using AffineCSPtr = std::shared_ptr; /** Non-null shared pointer of AffineCS. */ using AffineCSNNPtr = util::nn; /** \brief A two- or three-dimensional coordinate system in Euclidean space * with straight axes that are not necessarily orthogonal. * * \remark Implements AffineCS from \ref ISO_19111_2019 * \since 9.2 */ class PROJ_GCC_DLL AffineCS final : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~AffineCS() override; //! @endcond /** Value of getWKT2Type() */ static constexpr const char *WKT2_TYPE = "affine"; PROJ_DLL static AffineCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2); PROJ_DLL static AffineCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3); PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL AffineCSNNPtr alterUnit(const common::UnitOfMeasure &unit) const; //! @endcond protected: PROJ_INTERNAL explicit AffineCS( const std::vector &axisIn); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool) const override { return WKT2_TYPE; } private: AffineCS(const AffineCS &other) = delete; }; // --------------------------------------------------------------------------- class OrdinalCS; /** Shared pointer of OrdinalCS. */ using OrdinalCSPtr = std::shared_ptr; /** Non-null shared pointer of OrdinalCS. */ using OrdinalCSNNPtr = util::nn; /** \brief n-dimensional coordinate system in which every axis uses integers. * * The number of associations shall equal the * dimension of the CS. * * \remark Implements OrdinalCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL OrdinalCS final : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~OrdinalCS() override; //! @endcond PROJ_DLL static OrdinalCSNNPtr create(const util::PropertyMap &properties, const std::vector &axisIn); /** Value of getWKT2Type() */ static constexpr const char *WKT2_TYPE = "ordinal"; protected: PROJ_INTERNAL explicit OrdinalCS( const std::vector &axisIn); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool) const override { return WKT2_TYPE; } private: OrdinalCS(const OrdinalCS &other) = delete; }; // --------------------------------------------------------------------------- class ParametricCS; /** Shared pointer of ParametricCS. */ using ParametricCSPtr = std::shared_ptr; /** Non-null shared pointer of ParametricCS. */ using ParametricCSNNPtr = util::nn; /** \brief one-dimensional coordinate reference system which uses parameter * values or functions that may vary monotonically with height. * * \remark Implements ParametricCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ParametricCS final : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~ParametricCS() override; //! @endcond PROJ_DLL static ParametricCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axisIn); /** Value of getWKT2Type() */ static constexpr const char *WKT2_TYPE = "parametric"; protected: PROJ_INTERNAL explicit ParametricCS( const std::vector &axisIn); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool) const override { return WKT2_TYPE; } private: ParametricCS(const ParametricCS &other) = delete; }; // --------------------------------------------------------------------------- class TemporalCS; /** Shared pointer of TemporalCS. */ using TemporalCSPtr = std::shared_ptr; /** Non-null shared pointer of TemporalCS. */ using TemporalCSNNPtr = util::nn; /** \brief (Abstract class) A one-dimensional coordinate system used to record * time. * * A TemporalCS shall have one axis association. * * \remark Implements TemporalCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL TemporalCS : public CoordinateSystem { public: //! @cond Doxygen_Suppress PROJ_DLL ~TemporalCS() override; //! @endcond /** WKT2:2015 type */ static constexpr const char *WKT2_2015_TYPE = "temporal"; protected: PROJ_INTERNAL explicit TemporalCS(const CoordinateSystemAxisNNPtr &axis); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool use2019Keywords) const override = 0; private: TemporalCS(const TemporalCS &other) = delete; }; // --------------------------------------------------------------------------- class DateTimeTemporalCS; /** Shared pointer of DateTimeTemporalCS. */ using DateTimeTemporalCSPtr = std::shared_ptr; /** Non-null shared pointer of DateTimeTemporalCS. */ using DateTimeTemporalCSNNPtr = util::nn; /** \brief A one-dimensional coordinate system used to record time in dateTime * representation as defined in ISO 8601. * * A DateTimeTemporalCS shall have one axis association. It does not use * axisUnitID; the temporal quantities are defined through the ISO 8601 * representation. * * \remark Implements DateTimeTemporalCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DateTimeTemporalCS final : public TemporalCS { public: //! @cond Doxygen_Suppress PROJ_DLL ~DateTimeTemporalCS() override; //! @endcond PROJ_DLL static DateTimeTemporalCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis); /** WKT2:2019 type */ static constexpr const char *WKT2_2019_TYPE = "TemporalDateTime"; protected: PROJ_INTERNAL explicit DateTimeTemporalCS( const CoordinateSystemAxisNNPtr &axis); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool use2019Keywords) const override; private: DateTimeTemporalCS(const DateTimeTemporalCS &other) = delete; }; // --------------------------------------------------------------------------- class TemporalCountCS; /** Shared pointer of TemporalCountCS. */ using TemporalCountCSPtr = std::shared_ptr; /** Non-null shared pointer of TemporalCountCS. */ using TemporalCountCSNNPtr = util::nn; /** \brief A one-dimensional coordinate system used to record time as an * integer count. * * A TemporalCountCS shall have one axis association. * * \remark Implements TemporalCountCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL TemporalCountCS final : public TemporalCS { public: //! @cond Doxygen_Suppress PROJ_DLL ~TemporalCountCS() override; //! @endcond PROJ_DLL static TemporalCountCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis); /** WKT2:2019 type */ static constexpr const char *WKT2_2019_TYPE = "TemporalCount"; protected: PROJ_INTERNAL explicit TemporalCountCS( const CoordinateSystemAxisNNPtr &axis); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool use2019Keywords) const override; private: TemporalCountCS(const TemporalCountCS &other) = delete; }; // --------------------------------------------------------------------------- class TemporalMeasureCS; /** Shared pointer of TemporalMeasureCS. */ using TemporalMeasureCSPtr = std::shared_ptr; /** Non-null shared pointer of TemporalMeasureCS. */ using TemporalMeasureCSNNPtr = util::nn; /** \brief A one-dimensional coordinate system used to record a time as a * real number. * * A TemporalMeasureCS shall have one axis association. * * \remark Implements TemporalMeasureCS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL TemporalMeasureCS final : public TemporalCS { public: //! @cond Doxygen_Suppress PROJ_DLL ~TemporalMeasureCS() override; //! @endcond PROJ_DLL static TemporalMeasureCSNNPtr create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis); /** WKT2:2019 type */ static constexpr const char *WKT2_2019_TYPE = "TemporalMeasure"; protected: PROJ_INTERNAL explicit TemporalMeasureCS( const CoordinateSystemAxisNNPtr &axis); INLINED_MAKE_SHARED PROJ_INTERNAL std::string getWKT2Type(bool use2019Keywords) const override; private: TemporalMeasureCS(const TemporalMeasureCS &other) = delete; }; } // namespace cs NS_PROJ_END #endif // CS_HH_INCLUDED proj-9.6.0/include/proj/crs.hpp000664 001754 001755 00000163327 14764566077 016332 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef CRS_HH_INCLUDED #define CRS_HH_INCLUDED #include #include #include #include "common.hpp" #include "coordinateoperation.hpp" #include "coordinatesystem.hpp" #include "datum.hpp" #include "io.hpp" #include "util.hpp" NS_PROJ_START /** osgeo.proj.crs namespace \brief CRS (coordinate reference system = coordinate system with a datum). */ namespace crs { // --------------------------------------------------------------------------- class GeographicCRS; /** Shared pointer of GeographicCRS */ using GeographicCRSPtr = std::shared_ptr; /** Non-null shared pointer of GeographicCRS */ using GeographicCRSNNPtr = util::nn; class VerticalCRS; /** Shared pointer of VerticalCRS */ using VerticalCRSPtr = std::shared_ptr; /** Non-null shared pointer of VerticalCRS */ using VerticalCRSNNPtr = util::nn; class BoundCRS; /** Shared pointer of BoundCRS */ using BoundCRSPtr = std::shared_ptr; /** Non-null shared pointer of BoundCRS */ using BoundCRSNNPtr = util::nn; class CompoundCRS; /** Shared pointer of CompoundCRS */ using CompoundCRSPtr = std::shared_ptr; /** Non-null shared pointer of CompoundCRS */ using CompoundCRSNNPtr = util::nn; // --------------------------------------------------------------------------- class CRS; /** Shared pointer of CRS */ using CRSPtr = std::shared_ptr; /** Non-null shared pointer of CRS */ using CRSNNPtr = util::nn; /** \brief Abstract class modelling a coordinate reference system which is * usually single but may be compound. * * \remark Implements CRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL CRS : public common::ObjectUsage, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~CRS() override; //! @endcond // Non-standard PROJ_DLL bool isDynamic(bool considerWGS84AsDynamic = false) const; PROJ_DLL GeodeticCRSPtr extractGeodeticCRS() const; PROJ_DLL GeographicCRSPtr extractGeographicCRS() const; PROJ_DLL VerticalCRSPtr extractVerticalCRS() const; PROJ_DLL CRSNNPtr createBoundCRSToWGS84IfPossible( const io::DatabaseContextPtr &dbContext, operation::CoordinateOperationContext::IntermediateCRSUse allowIntermediateCRSUse) const; PROJ_DLL CRSNNPtr stripVerticalComponent() const; PROJ_DLL const BoundCRSPtr &canonicalBoundCRS() PROJ_PURE_DECL; PROJ_DLL std::list> identify(const io::AuthorityFactoryPtr &authorityFactory) const; PROJ_DLL std::list getNonDeprecated(const io::DatabaseContextNNPtr &dbContext) const; PROJ_DLL CRSNNPtr promoteTo3D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; PROJ_DLL CRSNNPtr demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL const GeodeticCRS * extractGeodeticCRSRaw() const; PROJ_FOR_TEST CRSNNPtr shallowClone() const; PROJ_FOR_TEST CRSNNPtr alterName(const std::string &newName) const; PROJ_FOR_TEST CRSNNPtr alterId(const std::string &authName, const std::string &code) const; PROJ_INTERNAL const std::string &getExtensionProj4() const noexcept; PROJ_FOR_TEST CRSNNPtr alterGeodeticCRS(const GeodeticCRSNNPtr &newGeodCRS) const; PROJ_FOR_TEST CRSNNPtr alterCSLinearUnit(const common::UnitOfMeasure &unit) const; PROJ_INTERNAL bool mustAxisOrderBeSwitchedForVisualization() const; PROJ_INTERNAL CRSNNPtr applyAxisOrderReversal(const char *nameSuffix) const; PROJ_FOR_TEST CRSNNPtr normalizeForVisualization() const; PROJ_INTERNAL CRSNNPtr allowNonConformantWKT1Export() const; PROJ_INTERNAL CRSNNPtr attachOriginalCompoundCRS(const CompoundCRSNNPtr &compoundCRS) const; PROJ_INTERNAL CRSNNPtr promoteTo3D( const std::string &newName, const io::DatabaseContextPtr &dbContext, const cs::CoordinateSystemAxisNNPtr &verticalAxisIfNotAlreadyPresent) const; PROJ_INTERNAL bool hasImplicitCS() const; PROJ_INTERNAL bool hasOver() const; PROJ_INTERNAL static CRSNNPtr getResolvedCRS(const CRSNNPtr &crs, const io::AuthorityFactoryPtr &authFactory, metadata::ExtentPtr &extentOut); PROJ_INTERNAL std::string getOriginatingAuthName() const; //! @endcond protected: PROJ_INTERNAL CRS(); PROJ_INTERNAL CRS(const CRS &other); friend class BoundCRS; PROJ_INTERNAL void setCanonicalBoundCRS(const BoundCRSNNPtr &boundCRS); PROJ_INTERNAL virtual CRSNNPtr _shallowClone() const = 0; PROJ_INTERNAL virtual std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const; PROJ_INTERNAL void setProperties(const util::PropertyMap &properties); // throw(InvalidValueTypeException) private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Abstract class modelling a coordinate reference system consisting of * one Coordinate System and either one datum::Datum or one * datum::DatumEnsemble. * * \remark Implements SingleCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL SingleCRS : public CRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~SingleCRS() override; //! @endcond PROJ_DLL const datum::DatumPtr &datum() PROJ_PURE_DECL; PROJ_DLL const datum::DatumEnsemblePtr &datumEnsemble() PROJ_PURE_DECL; PROJ_DLL const cs::CoordinateSystemNNPtr &coordinateSystem() PROJ_PURE_DECL; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void exportDatumOrDatumEnsembleToWkt(io::WKTFormatter *formatter) const; // throw(io::FormattingException) PROJ_INTERNAL const datum::DatumNNPtr datumNonNull(const io::DatabaseContextPtr &dbContext) const; //! @endcond protected: PROJ_INTERNAL SingleCRS(const datum::DatumPtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::CoordinateSystemNNPtr &csIn); PROJ_INTERNAL SingleCRS(const SingleCRS &other); PROJ_INTERNAL bool baseIsEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const; private: PROJ_OPAQUE_PRIVATE_DATA SingleCRS &operator=(const SingleCRS &other) = delete; }; /** Shared pointer of SingleCRS */ using SingleCRSPtr = std::shared_ptr; /** Non-null shared pointer of SingleCRS */ using SingleCRSNNPtr = util::nn; // --------------------------------------------------------------------------- class GeodeticCRS; /** Shared pointer of GeodeticCRS */ using GeodeticCRSPtr = std::shared_ptr; /** Non-null shared pointer of GeodeticCRS */ using GeodeticCRSNNPtr = util::nn; /** \brief A coordinate reference system associated with a geodetic reference * frame and a three-dimensional Cartesian or spherical coordinate system. * * If the geodetic reference frame is dynamic or if the geodetic CRS has an * association to a velocity model then the geodetic CRS is dynamic, else it * is static. * * \remark Implements GeodeticCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL GeodeticCRS : virtual public SingleCRS, public io::IPROJStringExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~GeodeticCRS() override; //! @endcond PROJ_DLL const datum::GeodeticReferenceFramePtr &datum() PROJ_PURE_DECL; PROJ_DLL const datum::PrimeMeridianNNPtr &primeMeridian() PROJ_PURE_DECL; PROJ_DLL const datum::EllipsoidNNPtr &ellipsoid() PROJ_PURE_DECL; // coordinateSystem() returns either a EllipsoidalCS, SphericalCS or // CartesianCS PROJ_DLL const std::vector & velocityModel() PROJ_PURE_DECL; // Non-standard PROJ_DLL bool isGeocentric() PROJ_PURE_DECL; PROJ_DLL bool isSphericalPlanetocentric() PROJ_PURE_DECL; PROJ_DLL static GeodeticCRSNNPtr create(const util::PropertyMap &properties, const datum::GeodeticReferenceFrameNNPtr &datum, const cs::SphericalCSNNPtr &cs); PROJ_DLL static GeodeticCRSNNPtr create(const util::PropertyMap &properties, const datum::GeodeticReferenceFrameNNPtr &datum, const cs::CartesianCSNNPtr &cs); PROJ_DLL static GeodeticCRSNNPtr create(const util::PropertyMap &properties, const datum::GeodeticReferenceFramePtr &datum, const datum::DatumEnsemblePtr &datumEnsemble, const cs::SphericalCSNNPtr &cs); PROJ_DLL static GeodeticCRSNNPtr create(const util::PropertyMap &properties, const datum::GeodeticReferenceFramePtr &datum, const datum::DatumEnsemblePtr &datumEnsemble, const cs::CartesianCSNNPtr &cs); PROJ_DLL static const GeodeticCRSNNPtr EPSG_4978; // WGS 84 Geocentric PROJ_DLL std::list> identify(const io::AuthorityFactoryPtr &authorityFactory) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void addDatumInfoToPROJString(io::PROJStringFormatter *formatter) const; PROJ_INTERNAL const datum::GeodeticReferenceFrameNNPtr datumNonNull(const io::DatabaseContextPtr &dbContext) const; PROJ_INTERNAL void addGeocentricUnitConversionIntoPROJString( io::PROJStringFormatter *formatter) const; PROJ_INTERNAL void addAngularUnitConvertAndAxisSwap(io::PROJStringFormatter *formatter) const; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL GeodeticCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::EllipsoidalCSNNPtr &csIn); PROJ_INTERNAL GeodeticCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::SphericalCSNNPtr &csIn); PROJ_INTERNAL GeodeticCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::CartesianCSNNPtr &csIn); PROJ_INTERNAL GeodeticCRS(const GeodeticCRS &other); PROJ_INTERNAL static GeodeticCRSNNPtr createEPSG_4978(); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL void _exportToJSONInternal( io::JSONFormatter *formatter, const char *objectName) const; // throw(FormattingException) PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; PROJ_INTERNAL bool _isEquivalentToNoTypeCheck(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA GeodeticCRS &operator=(const GeodeticCRS &other) = delete; }; // --------------------------------------------------------------------------- /** \brief A coordinate reference system associated with a geodetic reference * frame and a two- or three-dimensional ellipsoidal coordinate system. * * If the geodetic reference frame is dynamic or if the geographic CRS has an * association to a velocity model then the geodetic CRS is dynamic, else it is * static. * * \remark Implements GeographicCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL GeographicCRS : public GeodeticCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~GeographicCRS() override; //! @endcond PROJ_DLL const cs::EllipsoidalCSNNPtr &coordinateSystem() PROJ_PURE_DECL; // Non-standard PROJ_DLL static GeographicCRSNNPtr create(const util::PropertyMap &properties, const datum::GeodeticReferenceFrameNNPtr &datum, const cs::EllipsoidalCSNNPtr &cs); PROJ_DLL static GeographicCRSNNPtr create(const util::PropertyMap &properties, const datum::GeodeticReferenceFramePtr &datum, const datum::DatumEnsemblePtr &datumEnsemble, const cs::EllipsoidalCSNNPtr &cs); PROJ_DLL GeographicCRSNNPtr demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; PROJ_DLL static const GeographicCRSNNPtr EPSG_4267; // NAD27 PROJ_DLL static const GeographicCRSNNPtr EPSG_4269; // NAD83 PROJ_DLL static const GeographicCRSNNPtr EPSG_4326; // WGS 84 2D PROJ_DLL static const GeographicCRSNNPtr OGC_CRS84; // CRS84 (Long, Lat) PROJ_DLL static const GeographicCRSNNPtr EPSG_4807; // NTF Paris PROJ_DLL static const GeographicCRSNNPtr EPSG_4979; // WGS 84 3D PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_DLL bool is2DPartOf3D( util::nn other, const io::DatabaseContextPtr &dbContext = nullptr) PROJ_PURE_DECL; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL GeographicCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::EllipsoidalCSNNPtr &csIn); PROJ_INTERNAL GeographicCRS(const GeographicCRS &other); PROJ_INTERNAL static GeographicCRSNNPtr createEPSG_4267(); PROJ_INTERNAL static GeographicCRSNNPtr createEPSG_4269(); PROJ_INTERNAL static GeographicCRSNNPtr createEPSG_4326(); PROJ_INTERNAL static GeographicCRSNNPtr createOGC_CRS84(); PROJ_INTERNAL static GeographicCRSNNPtr createEPSG_4807(); PROJ_INTERNAL static GeographicCRSNNPtr createEPSG_4979(); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA GeographicCRS &operator=(const GeographicCRS &other) = delete; }; // --------------------------------------------------------------------------- /** \brief A coordinate reference system having a vertical reference frame and * a one-dimensional vertical coordinate system used for recording * gravity-related heights or depths. * * Vertical CRSs make use of the direction of gravity to define the concept of * height or depth, but the relationship with gravity may not be * straightforward. If the vertical reference frame is dynamic or if the * vertical CRS has an association to a velocity model then the CRS is dynamic, * else it is static. * * \note Ellipsoidal heights cannot be captured in a vertical coordinate * reference system. They exist only as an inseparable part of a 3D coordinate * tuple defined in a geographic 3D coordinate reference system. * * \remark Implements VerticalCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL VerticalCRS : virtual public SingleCRS, public io::IPROJStringExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~VerticalCRS() override; //! @endcond PROJ_DLL const datum::VerticalReferenceFramePtr datum() const; PROJ_DLL const cs::VerticalCSNNPtr coordinateSystem() const; PROJ_DLL const std::vector & geoidModel() PROJ_PURE_DECL; PROJ_DLL const std::vector & velocityModel() PROJ_PURE_DECL; PROJ_DLL static VerticalCRSNNPtr create(const util::PropertyMap &properties, const datum::VerticalReferenceFrameNNPtr &datumIn, const cs::VerticalCSNNPtr &csIn); PROJ_DLL static VerticalCRSNNPtr create(const util::PropertyMap &properties, const datum::VerticalReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::VerticalCSNNPtr &csIn); PROJ_DLL std::list> identify(const io::AuthorityFactoryPtr &authorityFactory) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void addLinearUnitConvert(io::PROJStringFormatter *formatter) const; PROJ_INTERNAL const datum::VerticalReferenceFrameNNPtr datumNonNull(const io::DatabaseContextPtr &dbContext) const; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL VerticalCRS(const datum::VerticalReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::VerticalCSNNPtr &csIn); PROJ_INTERNAL VerticalCRS(const VerticalCRS &other); PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; INLINED_MAKE_SHARED PROJ_INTERNAL CRSNNPtr _shallowClone() const override; private: PROJ_OPAQUE_PRIVATE_DATA VerticalCRS &operator=(const VerticalCRS &other) = delete; }; // --------------------------------------------------------------------------- /** \brief Abstract class modelling a single coordinate reference system that * is defined through the application of a specified coordinate conversion to * the definition of a previously established single coordinate reference * system referred to as the base CRS. * * A derived coordinate reference system inherits its datum (or datum ensemble) * from its base CRS. The coordinate conversion between the base and derived * coordinate reference system is implemented using the parameters and * formula(s) specified in the definition of the coordinate conversion. * * \remark Implements DerivedCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DerivedCRS : virtual public SingleCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~DerivedCRS() override; //! @endcond PROJ_DLL const SingleCRSNNPtr &baseCRS() PROJ_PURE_DECL; PROJ_DLL const operation::ConversionNNPtr derivingConversion() const; PROJ_PRIVATE : //! @cond Doxygen_Suppress // Use this method with extreme care ! It should never be used // to recreate a new Derived/ProjectedCRS ! PROJ_INTERNAL const operation::ConversionNNPtr & derivingConversionRef() PROJ_PURE_DECL; PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) //! @endcond protected: PROJ_INTERNAL DerivedCRS(const SingleCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CoordinateSystemNNPtr &cs); PROJ_INTERNAL DerivedCRS(const DerivedCRS &other); PROJ_INTERNAL void setDerivingConversionCRS(); PROJ_INTERNAL void baseExportToWKT( io::WKTFormatter *formatter, const std::string &keyword, const std::string &baseKeyword) const; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL virtual const char *className() const = 0; private: PROJ_OPAQUE_PRIVATE_DATA DerivedCRS &operator=(const DerivedCRS &other) = delete; }; /** Shared pointer of DerivedCRS */ using DerivedCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedCRS */ using DerivedCRSNNPtr = util::nn; // --------------------------------------------------------------------------- class ProjectedCRS; /** Shared pointer of ProjectedCRS */ using ProjectedCRSPtr = std::shared_ptr; /** Non-null shared pointer of ProjectedCRS */ using ProjectedCRSNNPtr = util::nn; /** \brief A derived coordinate reference system which has a geodetic * (usually geographic) coordinate reference system as its base CRS, thereby * inheriting a geodetic reference frame, and is converted using a map * projection. * * It has a Cartesian coordinate system, usually two-dimensional but may be * three-dimensional; in the 3D case the base geographic CRSs ellipsoidal * height is passed through unchanged and forms the vertical axis of the * projected CRS's Cartesian coordinate system. * * \remark Implements ProjectedCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ProjectedCRS final : public DerivedCRS, public io::IPROJStringExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~ProjectedCRS() override; //! @endcond PROJ_DLL const GeodeticCRSNNPtr &baseCRS() PROJ_PURE_DECL; PROJ_DLL const cs::CartesianCSNNPtr &coordinateSystem() PROJ_PURE_DECL; PROJ_DLL static ProjectedCRSNNPtr create(const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn); PROJ_DLL std::list> identify(const io::AuthorityFactoryPtr &authorityFactory) const; PROJ_DLL ProjectedCRSNNPtr demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void addUnitConvertAndAxisSwap(io::PROJStringFormatter *formatter, bool axisSpecFound) const; PROJ_INTERNAL static void addUnitConvertAndAxisSwap( const std::vector &axisListIn, io::PROJStringFormatter *formatter, bool axisSpecFound); PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_FOR_TEST ProjectedCRSNNPtr alterParametersLinearUnit( const common::UnitOfMeasure &unit, bool convertToNewUnit) const; //! @endcond protected: PROJ_INTERNAL ProjectedCRS(const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn); PROJ_INTERNAL ProjectedCRS(const ProjectedCRS &other); PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; PROJ_INTERNAL const char *className() const override { return "ProjectedCRS"; } INLINED_MAKE_SHARED PROJ_INTERNAL CRSNNPtr _shallowClone() const override; private: PROJ_OPAQUE_PRIVATE_DATA ProjectedCRS &operator=(const ProjectedCRS &other) = delete; }; // --------------------------------------------------------------------------- class TemporalCRS; /** Shared pointer of TemporalCRS */ using TemporalCRSPtr = std::shared_ptr; /** Non-null shared pointer of TemporalCRS */ using TemporalCRSNNPtr = util::nn; /** \brief A coordinate reference system associated with a temporal datum and a * one-dimensional temporal coordinate system. * * \remark Implements TemporalCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL TemporalCRS : virtual public SingleCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~TemporalCRS() override; //! @endcond PROJ_DLL const datum::TemporalDatumNNPtr datum() const; PROJ_DLL const cs::TemporalCSNNPtr coordinateSystem() const; PROJ_DLL static TemporalCRSNNPtr create(const util::PropertyMap &properties, const datum::TemporalDatumNNPtr &datumIn, const cs::TemporalCSNNPtr &csIn); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) //! @endcond protected: PROJ_INTERNAL TemporalCRS(const datum::TemporalDatumNNPtr &datumIn, const cs::TemporalCSNNPtr &csIn); PROJ_INTERNAL TemporalCRS(const TemporalCRS &other); INLINED_MAKE_SHARED PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; private: PROJ_OPAQUE_PRIVATE_DATA TemporalCRS &operator=(const TemporalCRS &other) = delete; }; // --------------------------------------------------------------------------- class EngineeringCRS; /** Shared pointer of EngineeringCRS */ using EngineeringCRSPtr = std::shared_ptr; /** Non-null shared pointer of EngineeringCRS */ using EngineeringCRSNNPtr = util::nn; /** \brief Contextually local coordinate reference system associated with an * engineering datum. * * It is applied either to activities on or near the surface of the Earth * without geodetic corrections, or on moving platforms such as road vehicles, * vessels, aircraft or spacecraft, or as the internal CRS of an image. * * In \ref WKT2, it maps to a ENGINEERINGCRS / ENGCRS keyword. In \ref WKT1, * it maps to a LOCAL_CS keyword. * * \remark Implements EngineeringCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL EngineeringCRS : virtual public SingleCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~EngineeringCRS() override; //! @endcond PROJ_DLL const datum::EngineeringDatumNNPtr datum() const; PROJ_DLL static EngineeringCRSNNPtr create(const util::PropertyMap &properties, const datum::EngineeringDatumNNPtr &datumIn, const cs::CoordinateSystemNNPtr &csIn); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) //! @endcond protected: PROJ_INTERNAL EngineeringCRS(const datum::EngineeringDatumNNPtr &datumIn, const cs::CoordinateSystemNNPtr &csIn); PROJ_INTERNAL EngineeringCRS(const EngineeringCRS &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA EngineeringCRS &operator=(const EngineeringCRS &other) = delete; }; // --------------------------------------------------------------------------- class ParametricCRS; /** Shared pointer of ParametricCRS */ using ParametricCRSPtr = std::shared_ptr; /** Non-null shared pointer of ParametricCRS */ using ParametricCRSNNPtr = util::nn; /** \brief Contextually local coordinate reference system associated with an * engineering datum. * * This is applied either to activities on or near the surface of the Earth * without geodetic corrections, or on moving platforms such as road vehicles * vessels, aircraft or spacecraft, or as the internal CRS of an image. * * \remark Implements ParametricCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ParametricCRS : virtual public SingleCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~ParametricCRS() override; //! @endcond PROJ_DLL const datum::ParametricDatumNNPtr datum() const; PROJ_DLL const cs::ParametricCSNNPtr coordinateSystem() const; PROJ_DLL static ParametricCRSNNPtr create(const util::PropertyMap &properties, const datum::ParametricDatumNNPtr &datumIn, const cs::ParametricCSNNPtr &csIn); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) //! @endcond protected: PROJ_INTERNAL ParametricCRS(const datum::ParametricDatumNNPtr &datumIn, const cs::ParametricCSNNPtr &csIn); PROJ_INTERNAL ParametricCRS(const ParametricCRS &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA ParametricCRS &operator=(const ParametricCRS &other) = delete; }; // --------------------------------------------------------------------------- /** \brief Exception thrown when attempting to create an invalid compound CRS */ class PROJ_GCC_DLL InvalidCompoundCRSException : public util::Exception { public: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit InvalidCompoundCRSException(const char *message); PROJ_INTERNAL explicit InvalidCompoundCRSException( const std::string &message); PROJ_DLL InvalidCompoundCRSException(const InvalidCompoundCRSException &other); PROJ_DLL ~InvalidCompoundCRSException() override; //! @endcond }; // --------------------------------------------------------------------------- /** \brief A coordinate reference system describing the position of points * through two or more independent single coordinate reference systems. * * \note Two coordinate reference systems are independent of each other * if coordinate values in one cannot be converted or transformed into * coordinate values in the other. * * \note As a departure to \ref ISO_19111_2019, we allow to build a CompoundCRS * from CRS objects, whereas ISO19111:2019 restricts the components to * SingleCRS. * * \remark Implements CompoundCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL CompoundCRS final : public CRS, public io::IPROJStringExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~CompoundCRS() override; //! @endcond PROJ_DLL const std::vector & componentReferenceSystems() PROJ_PURE_DECL; PROJ_DLL std::list> identify(const io::AuthorityFactoryPtr &authorityFactory) const; //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) //! @endcond PROJ_DLL static CompoundCRSNNPtr create(const util::PropertyMap &properties, const std::vector &components); // throw InvalidCompoundCRSException //! @cond Doxygen_Suppress PROJ_INTERNAL static CRSNNPtr createLax(const util::PropertyMap &properties, const std::vector &components, const io::DatabaseContextPtr &dbContext); // throw InvalidCompoundCRSException //! @endcond protected: // relaxed: standard say SingleCRSNNPtr PROJ_INTERNAL explicit CompoundCRS(const std::vector &components); PROJ_INTERNAL CompoundCRS(const CompoundCRS &other); PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA CompoundCRS &operator=(const CompoundCRS &other) = delete; }; // --------------------------------------------------------------------------- /** \brief A coordinate reference system with an associated transformation to * a target/hub CRS. * * The definition of a CRS is not dependent upon any relationship to an * independent CRS. However in an implementation that merges datasets * referenced to differing CRSs, it is sometimes useful to associate the * definition of the transformation that has been used with the CRS definition. * This facilitates the interrelationship of CRS by concatenating * transformations via a common or hub CRS. This is sometimes referred to as * "early-binding". \ref WKT2 permits the association of an abridged coordinate * transformation description with a coordinate reference system description in * a single text string. In a BoundCRS, the abridged coordinate transformation * is applied to the source CRS with the target CRS being the common or hub * system. * * Coordinates referring to a BoundCRS are expressed into its source/base CRS. * * This abstraction can for example model the concept of TOWGS84 datum shift * present in \ref WKT1. * * \note Contrary to other CRS classes of this package, there is no * \ref ISO_19111_2019 modelling of a BoundCRS. * * \remark Implements BoundCRS from \ref WKT2 */ class PROJ_GCC_DLL BoundCRS final : public CRS, public io::IPROJStringExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~BoundCRS() override; //! @endcond PROJ_DLL const CRSNNPtr &baseCRS() PROJ_PURE_DECL; PROJ_DLL CRSNNPtr baseCRSWithCanonicalBoundCRS() const; PROJ_DLL const CRSNNPtr &hubCRS() PROJ_PURE_DECL; PROJ_DLL const operation::TransformationNNPtr & transformation() PROJ_PURE_DECL; //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) //! @endcond PROJ_DLL static BoundCRSNNPtr create(const util::PropertyMap &properties, const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn); PROJ_DLL static BoundCRSNNPtr create(const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn); PROJ_DLL static BoundCRSNNPtr createFromTOWGS84(const CRSNNPtr &baseCRSIn, const std::vector &TOWGS84Parameters); PROJ_DLL static BoundCRSNNPtr createFromNadgrids(const CRSNNPtr &baseCRSIn, const std::string &filename); protected: PROJ_INTERNAL BoundCRS(const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn); PROJ_INTERNAL BoundCRS(const BoundCRS &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL BoundCRSNNPtr shallowCloneAsBoundCRS() const; PROJ_INTERNAL bool isTOWGS84Compatible() const; PROJ_INTERNAL std::string getHDatumPROJ4GRIDS(const io::DatabaseContextPtr &databaseContext) const; PROJ_INTERNAL std::string getVDatumPROJ4GRIDS(const crs::GeographicCRS *geogCRSOfCompoundCRS, const char **outGeoidCRSValue) const; PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA BoundCRS &operator=(const BoundCRS &other) = delete; }; // --------------------------------------------------------------------------- class DerivedGeodeticCRS; /** Shared pointer of DerivedGeodeticCRS */ using DerivedGeodeticCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedGeodeticCRS */ using DerivedGeodeticCRSNNPtr = util::nn; /** \brief A derived coordinate reference system which has either a geodetic * or a geographic coordinate reference system as its base CRS, thereby * inheriting a geodetic reference frame, and associated with a 3D Cartesian * or spherical coordinate system. * * \remark Implements DerivedGeodeticCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DerivedGeodeticCRS final : public GeodeticCRS, public DerivedCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~DerivedGeodeticCRS() override; //! @endcond PROJ_DLL const GeodeticCRSNNPtr baseCRS() const; PROJ_DLL static DerivedGeodeticCRSNNPtr create(const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn); PROJ_DLL static DerivedGeodeticCRSNNPtr create(const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::SphericalCSNNPtr &csIn); //! @cond Doxygen_Suppress void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override { return DerivedCRS::_exportToJSON(formatter); } //! @endcond protected: PROJ_INTERNAL DerivedGeodeticCRS(const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn); PROJ_INTERNAL DerivedGeodeticCRS(const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::SphericalCSNNPtr &csIn); PROJ_INTERNAL DerivedGeodeticCRS(const DerivedGeodeticCRS &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; // cppcheck-suppress functionStatic PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL const char *className() const override { return "DerivedGeodeticCRS"; } INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA DerivedGeodeticCRS &operator=(const DerivedGeodeticCRS &other) = delete; }; // --------------------------------------------------------------------------- class DerivedGeographicCRS; /** Shared pointer of DerivedGeographicCRS */ using DerivedGeographicCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedGeographicCRS */ using DerivedGeographicCRSNNPtr = util::nn; /** \brief A derived coordinate reference system which has either a geodetic or * a geographic coordinate reference system as its base CRS, thereby inheriting * a geodetic reference frame, and an ellipsoidal coordinate system. * * A derived geographic CRS can be based on a geodetic CRS only if that * geodetic CRS definition includes an ellipsoid. * * \remark Implements DerivedGeographicCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DerivedGeographicCRS final : public GeographicCRS, public DerivedCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~DerivedGeographicCRS() override; //! @endcond PROJ_DLL const GeodeticCRSNNPtr baseCRS() const; PROJ_DLL static DerivedGeographicCRSNNPtr create(const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::EllipsoidalCSNNPtr &csIn); PROJ_DLL DerivedGeographicCRSNNPtr demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override { return DerivedCRS::_exportToJSON(formatter); } //! @endcond protected: PROJ_INTERNAL DerivedGeographicCRS(const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::EllipsoidalCSNNPtr &csIn); PROJ_INTERNAL DerivedGeographicCRS(const DerivedGeographicCRS &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; PROJ_INTERNAL const char *className() const override { return "DerivedGeographicCRS"; } // cppcheck-suppress functionStatic PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA DerivedGeographicCRS &operator=(const DerivedGeographicCRS &other) = delete; }; // --------------------------------------------------------------------------- class DerivedProjectedCRS; /** Shared pointer of DerivedProjectedCRS */ using DerivedProjectedCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedProjectedCRS */ using DerivedProjectedCRSNNPtr = util::nn; /** \brief A derived coordinate reference system which has a projected * coordinate reference system as its base CRS, thereby inheriting a geodetic * reference frame, but also inheriting the distortion characteristics of the * base projected CRS. * * A DerivedProjectedCRS is not a ProjectedCRS. * * \remark Implements DerivedProjectedCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DerivedProjectedCRS final : public DerivedCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~DerivedProjectedCRS() override; //! @endcond PROJ_DLL const ProjectedCRSNNPtr baseCRS() const; PROJ_DLL static DerivedProjectedCRSNNPtr create(const util::PropertyMap &properties, const ProjectedCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CoordinateSystemNNPtr &csIn); PROJ_DLL DerivedProjectedCRSNNPtr demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const; //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void addUnitConvertAndAxisSwap(io::PROJStringFormatter *formatter) const; //! @endcond protected: PROJ_INTERNAL DerivedProjectedCRS(const ProjectedCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CoordinateSystemNNPtr &csIn); PROJ_INTERNAL DerivedProjectedCRS(const DerivedProjectedCRS &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL const char *className() const override { return "DerivedProjectedCRS"; } INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA DerivedProjectedCRS &operator=(const DerivedProjectedCRS &other) = delete; }; // --------------------------------------------------------------------------- class DerivedVerticalCRS; /** Shared pointer of DerivedVerticalCRS */ using DerivedVerticalCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedVerticalCRS */ using DerivedVerticalCRSNNPtr = util::nn; /** \brief A derived coordinate reference system which has a vertical * coordinate reference system as its base CRS, thereby inheriting a vertical * reference frame, and a vertical coordinate system. * * \remark Implements DerivedVerticalCRS from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DerivedVerticalCRS final : public VerticalCRS, public DerivedCRS { public: //! @cond Doxygen_Suppress PROJ_DLL ~DerivedVerticalCRS() override; //! @endcond PROJ_DLL const VerticalCRSNNPtr baseCRS() const; PROJ_DLL static DerivedVerticalCRSNNPtr create(const util::PropertyMap &properties, const VerticalCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::VerticalCSNNPtr &csIn); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override { return DerivedCRS::_exportToJSON(formatter); } //! @endcond protected: PROJ_INTERNAL DerivedVerticalCRS(const VerticalCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::VerticalCSNNPtr &csIn); PROJ_INTERNAL DerivedVerticalCRS(const DerivedVerticalCRS &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL std::list> _identify(const io::AuthorityFactoryPtr &authorityFactory) const override; PROJ_INTERNAL const char *className() const override { return "DerivedVerticalCRS"; } // cppcheck-suppress functionStatic PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA DerivedVerticalCRS &operator=(const DerivedVerticalCRS &other) = delete; }; // --------------------------------------------------------------------------- /** \brief Template representing a derived coordinate reference system. */ template class PROJ_GCC_DLL DerivedCRSTemplate final : public DerivedCRSTraits::BaseType, public DerivedCRS { protected: /** Base type */ typedef typename DerivedCRSTraits::BaseType BaseType; /** CSType */ typedef typename DerivedCRSTraits::CSType CSType; public: //! @cond Doxygen_Suppress PROJ_DLL ~DerivedCRSTemplate() override; //! @endcond /** Non-null shared pointer of DerivedCRSTemplate */ typedef typename util::nn> NNPtr; /** Non-null shared pointer of BaseType */ typedef util::nn> BaseNNPtr; /** Non-null shared pointer of CSType */ typedef util::nn> CSNNPtr; /** \brief Return the base CRS of a DerivedCRSTemplate. * * @return the base CRS. */ PROJ_DLL const BaseNNPtr baseCRS() const; /** \brief Instantiate a DerivedCRSTemplate from a base CRS, a deriving * conversion and a cs::CoordinateSystem. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param baseCRSIn base CRS. * @param derivingConversionIn the deriving conversion from the base CRS to * this * CRS. * @param csIn the coordinate system. * @return new DerivedCRSTemplate. */ PROJ_DLL static NNPtr create(const util::PropertyMap &properties, const BaseNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const CSNNPtr &csIn); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override { return DerivedCRS::_exportToJSON(formatter); } //! @endcond protected: PROJ_INTERNAL DerivedCRSTemplate(const BaseNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const CSNNPtr &csIn); // cppcheck-suppress noExplicitConstructor PROJ_INTERNAL DerivedCRSTemplate(const DerivedCRSTemplate &other); PROJ_INTERNAL CRSNNPtr _shallowClone() const override; PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL const char *className() const override; INLINED_MAKE_SHARED private: struct PROJ_INTERNAL Private; std::unique_ptr d; DerivedCRSTemplate &operator=(const DerivedCRSTemplate &other) = delete; }; // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PROJ_GCC_DLL DerivedEngineeringCRSTraits { typedef EngineeringCRS BaseType; typedef cs::CoordinateSystem CSType; // old x86_64-w64-mingw32-g++ has issues with static variables. use method // instead inline static const std::string &CRSName(); inline static const std::string &WKTKeyword(); inline static const std::string &WKTBaseKeyword(); static const bool wkt2_2019_only = true; }; //! @endcond /** \brief A derived coordinate reference system which has an engineering * coordinate reference system as its base CRS, thereby inheriting an * engineering datum, and is associated with one of the coordinate system * types for an EngineeringCRS * * \remark Implements DerivedEngineeringCRS from \ref ISO_19111_2019 */ #ifdef DOXYGEN_ENABLED class DerivedEngineeringCRS : public DerivedCRSTemplate {}; #else using DerivedEngineeringCRS = DerivedCRSTemplate; #endif #ifndef DO_NOT_DEFINE_EXTERN_DERIVED_CRS_TEMPLATE extern template class DerivedCRSTemplate; #endif /** Shared pointer of DerivedEngineeringCRS */ using DerivedEngineeringCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedEngineeringCRS */ using DerivedEngineeringCRSNNPtr = util::nn; // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PROJ_GCC_DLL DerivedParametricCRSTraits { typedef ParametricCRS BaseType; typedef cs::ParametricCS CSType; // old x86_64-w64-mingw32-g++ has issues with static variables. use method // instead inline static const std::string &CRSName(); inline static const std::string &WKTKeyword(); inline static const std::string &WKTBaseKeyword(); static const bool wkt2_2019_only = false; }; //! @endcond /** \brief A derived coordinate reference system which has a parametric * coordinate reference system as its base CRS, thereby inheriting a parametric * datum, and a parametric coordinate system. * * \remark Implements DerivedParametricCRS from \ref ISO_19111_2019 */ #ifdef DOXYGEN_ENABLED class DerivedParametricCRS : public DerivedCRSTemplate {}; #else using DerivedParametricCRS = DerivedCRSTemplate; #endif #ifndef DO_NOT_DEFINE_EXTERN_DERIVED_CRS_TEMPLATE extern template class DerivedCRSTemplate; #endif /** Shared pointer of DerivedParametricCRS */ using DerivedParametricCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedParametricCRS */ using DerivedParametricCRSNNPtr = util::nn; // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PROJ_GCC_DLL DerivedTemporalCRSTraits { typedef TemporalCRS BaseType; typedef cs::TemporalCS CSType; // old x86_64-w64-mingw32-g++ has issues with static variables. use method // instead inline static const std::string &CRSName(); inline static const std::string &WKTKeyword(); inline static const std::string &WKTBaseKeyword(); static const bool wkt2_2019_only = false; }; //! @endcond /** \brief A derived coordinate reference system which has a temporal * coordinate reference system as its base CRS, thereby inheriting a temporal * datum, and a temporal coordinate system. * * \remark Implements DerivedTemporalCRS from \ref ISO_19111_2019 */ #ifdef DOXYGEN_ENABLED class DerivedTemporalCRS : public DerivedCRSTemplate { }; #else using DerivedTemporalCRS = DerivedCRSTemplate; #endif #ifndef DO_NOT_DEFINE_EXTERN_DERIVED_CRS_TEMPLATE extern template class DerivedCRSTemplate; #endif /** Shared pointer of DerivedTemporalCRS */ using DerivedTemporalCRSPtr = std::shared_ptr; /** Non-null shared pointer of DerivedTemporalCRS */ using DerivedTemporalCRSNNPtr = util::nn; // --------------------------------------------------------------------------- } // namespace crs NS_PROJ_END #endif // CRS_HH_INCLUDED proj-9.6.0/include/proj/datum.hpp000664 001754 001755 00000075762 14764566077 016662 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef DATUM_HH_INCLUDED #define DATUM_HH_INCLUDED #include #include #include #include "common.hpp" #include "io.hpp" #include "util.hpp" NS_PROJ_START /** osgeo.proj.datum namespace \brief Datum (the relationship of a coordinate system to the body). */ namespace datum { // --------------------------------------------------------------------------- /** \brief Abstract class of the relationship of a coordinate system to an * object, thus creating a coordinate reference system. * * For geodetic and vertical coordinate reference systems, it relates a * coordinate system to the Earth (or the celestial body considered). With * other types of coordinate reference systems, the datum may relate the * coordinate system to another physical or * virtual object. A datum uses a parameter or set of parameters that determine * the location of the origin of the coordinate reference system. Each datum * subtype can be associated with only specific types of coordinate reference * systems. * * \remark Implements Datum from \ref ISO_19111_2019 */ class PROJ_GCC_DLL Datum : public common::ObjectUsage, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~Datum() override; //! @endcond PROJ_DLL const util::optional &anchorDefinition() const; PROJ_DLL const util::optional &anchorEpoch() const; PROJ_DLL const util::optional &publicationDate() const; PROJ_DLL const common::IdentifiedObjectPtr &conventionalRS() const; //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL Datum(); #ifdef DOXYGEN_ENABLED std::string *anchorDefinition_; Date *publicationDate_; common::IdentifiedObject *conventionalRS_; #endif protected: PROJ_INTERNAL void setAnchor(const util::optional &anchor); PROJ_INTERNAL void setAnchorEpoch(const util::optional &anchorEpoch); PROJ_INTERNAL void setProperties(const util::PropertyMap &properties); // throw(InvalidValueTypeException) private: PROJ_OPAQUE_PRIVATE_DATA Datum &operator=(const Datum &other) = delete; Datum(const Datum &other) = delete; }; /** Shared pointer of Datum */ using DatumPtr = std::shared_ptr; /** Non-null shared pointer of Datum */ using DatumNNPtr = util::nn; // --------------------------------------------------------------------------- class DatumEnsemble; /** Shared pointer of DatumEnsemble */ using DatumEnsemblePtr = std::shared_ptr; /** Non-null shared pointer of DatumEnsemble */ using DatumEnsembleNNPtr = util::nn; /** \brief A collection of two or more geodetic or vertical reference frames * (or if not geodetic or vertical reference frame, a collection of two or more * datums) which for all but the highest accuracy requirements may be * considered to be insignificantly different from each other. * * Every frame within the datum ensemble must be a realizations of the same * Terrestrial Reference System or Vertical Reference System. * * \remark Implements DatumEnsemble from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DatumEnsemble final : public common::ObjectUsage, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~DatumEnsemble() override; //! @endcond PROJ_DLL const std::vector &datums() const; PROJ_DLL const metadata::PositionalAccuracyNNPtr & positionalAccuracy() const; PROJ_DLL static DatumEnsembleNNPtr create( const util::PropertyMap &properties, const std::vector &datumsIn, const metadata::PositionalAccuracyNNPtr &accuracy); // throw(Exception) //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(io::FormattingException) PROJ_FOR_TEST DatumNNPtr asDatum(const io::DatabaseContextPtr &dbContext) const; //! @endcond protected: #ifdef DOXYGEN_ENABLED Datum datums_[]; PositionalAccuracy positionalAccuracy_; #endif PROJ_INTERNAL DatumEnsemble(const std::vector &datumsIn, const metadata::PositionalAccuracyNNPtr &accuracy); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA DatumEnsemble(const DatumEnsemble &other) = delete; DatumEnsemble &operator=(const DatumEnsemble &other) = delete; }; // --------------------------------------------------------------------------- class PrimeMeridian; /** Shared pointer of PrimeMeridian */ using PrimeMeridianPtr = std::shared_ptr; /** Non-null shared pointer of PrimeMeridian */ using PrimeMeridianNNPtr = util::nn; /** \brief The origin meridian from which longitude values are determined. * * \note The default value for prime meridian name is "Greenwich". When the * default applies, the value for the longitude shall be 0 (degrees). * * \remark Implements PrimeMeridian from \ref ISO_19111_2019 */ class PROJ_GCC_DLL PrimeMeridian final : public common::IdentifiedObject, public io::IPROJStringExportable, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~PrimeMeridian() override; //! @endcond PROJ_DLL const common::Angle &longitude() PROJ_PURE_DECL; // non-standard PROJ_DLL static PrimeMeridianNNPtr create(const util::PropertyMap &properties, const common::Angle &longitudeIn); PROJ_DLL static const PrimeMeridianNNPtr GREENWICH; PROJ_DLL static const PrimeMeridianNNPtr REFERENCE_MERIDIAN; PROJ_DLL static const PrimeMeridianNNPtr PARIS; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL static std::string getPROJStringWellKnownName(const common::Angle &angle); //! @endcond protected: #ifdef DOXYGEN_ENABLED Angle greenwichLongitude_; #endif PROJ_INTERNAL explicit PrimeMeridian( const common::Angle &angle = common::Angle()); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA PrimeMeridian(const PrimeMeridian &other) = delete; PrimeMeridian &operator=(const PrimeMeridian &other) = delete; PROJ_INTERNAL static const PrimeMeridianNNPtr createGREENWICH(); PROJ_INTERNAL static const PrimeMeridianNNPtr createREFERENCE_MERIDIAN(); PROJ_INTERNAL static const PrimeMeridianNNPtr createPARIS(); }; // --------------------------------------------------------------------------- class Ellipsoid; /** Shared pointer of Ellipsoid */ using EllipsoidPtr = std::shared_ptr; /** Non-null shared pointer of Ellipsoid */ using EllipsoidNNPtr = util::nn; /** \brief A geometric figure that can be used to describe the approximate * shape of an object. * * For the Earth an oblate biaxial ellipsoid is used: in mathematical terms, * it is a surface formed by the rotation of an ellipse about its minor axis. * * \remark Implements Ellipsoid from \ref ISO_19111_2019 */ class PROJ_GCC_DLL Ellipsoid final : public common::IdentifiedObject, public io::IPROJStringExportable, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL ~Ellipsoid() override; //! @endcond PROJ_DLL const common::Length &semiMajorAxis() PROJ_PURE_DECL; // Inlined from SecondDefiningParameter union PROJ_DLL const util::optional & inverseFlattening() PROJ_PURE_DECL; PROJ_DLL const util::optional & semiMinorAxis() PROJ_PURE_DECL; PROJ_DLL bool isSphere() PROJ_PURE_DECL; PROJ_DLL const util::optional & semiMedianAxis() PROJ_PURE_DECL; // non-standard PROJ_DLL double computedInverseFlattening() PROJ_PURE_DECL; PROJ_DLL double squaredEccentricity() PROJ_PURE_DECL; PROJ_DLL common::Length computeSemiMinorAxis() const; PROJ_DLL const std::string &celestialBody() PROJ_PURE_DECL; PROJ_DLL static const std::string EARTH; PROJ_DLL static EllipsoidNNPtr createSphere(const util::PropertyMap &properties, const common::Length &radius, const std::string &celestialBody = EARTH); PROJ_DLL static EllipsoidNNPtr createFlattenedSphere(const util::PropertyMap &properties, const common::Length &semiMajorAxisIn, const common::Scale &invFlattening, const std::string &celestialBody = EARTH); PROJ_DLL static EllipsoidNNPtr createTwoAxis(const util::PropertyMap &properties, const common::Length &semiMajorAxisIn, const common::Length &semiMinorAxisIn, const std::string &celestialBody = EARTH); PROJ_DLL EllipsoidNNPtr identify() const; PROJ_DLL static const EllipsoidNNPtr CLARKE_1866; PROJ_DLL static const EllipsoidNNPtr WGS84; PROJ_DLL static const EllipsoidNNPtr GRS1980; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) //! @endcond PROJ_INTERNAL static std::string guessBodyName(const io::DatabaseContextPtr &dbContext, double a, const std::string &ellpsName = std::string()); PROJ_INTERNAL bool lookForProjWellKnownEllps(std::string &projEllpsName, std::string &ellpsName) const; protected: #ifdef DOXYGEN_ENABLED common::Length semiMajorAxis_; common::Scale *inverseFlattening_; common::Length *semiMinorAxis_; bool isSphere_; common::Length *semiMedianAxis_; #endif PROJ_INTERNAL explicit Ellipsoid(const common::Length &radius, const std::string &celestialBody); PROJ_INTERNAL Ellipsoid(const common::Length &semiMajorAxisIn, const common::Scale &invFlattening, const std::string &celestialBody); PROJ_INTERNAL Ellipsoid(const common::Length &semiMajorAxisIn, const common::Length &semiMinorAxisIn, const std::string &celestialBody); PROJ_INTERNAL Ellipsoid(const Ellipsoid &other); INLINED_MAKE_SHARED PROJ_INTERNAL static const EllipsoidNNPtr createCLARKE_1866(); PROJ_INTERNAL static const EllipsoidNNPtr createWGS84(); PROJ_INTERNAL static const EllipsoidNNPtr createGRS1980(); private: PROJ_OPAQUE_PRIVATE_DATA Ellipsoid &operator=(const Ellipsoid &other) = delete; }; // --------------------------------------------------------------------------- class GeodeticReferenceFrame; /** Shared pointer of GeodeticReferenceFrame */ using GeodeticReferenceFramePtr = std::shared_ptr; /** Non-null shared pointer of GeodeticReferenceFrame */ using GeodeticReferenceFrameNNPtr = util::nn; /** \brief The definition of the position, scale and orientation of a geocentric * Cartesian 3D coordinate system relative to the Earth. * * It may also identify a defined ellipsoid (or sphere) that approximates * the shape of the Earth and which is centred on and aligned to this * geocentric coordinate system. Older geodetic datums define the location and * orientation of a defined ellipsoid (or sphere) that approximates the shape * of the earth. * * \note The terminology "Datum" is often used to mean a GeodeticReferenceFrame. * * \note In \ref ISO_19111_2007, this class was called GeodeticDatum. * * \remark Implements GeodeticReferenceFrame from \ref ISO_19111_2019 */ class PROJ_GCC_DLL GeodeticReferenceFrame : public Datum { public: //! @cond Doxygen_Suppress PROJ_DLL ~GeodeticReferenceFrame() override; //! @endcond PROJ_DLL const PrimeMeridianNNPtr &primeMeridian() PROJ_PURE_DECL; // We constraint more than the standard into which the ellipsoid might // be omitted for a CRS with a non-ellipsoidal CS PROJ_DLL const EllipsoidNNPtr &ellipsoid() PROJ_PURE_DECL; // non-standard PROJ_DLL static GeodeticReferenceFrameNNPtr create(const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid, const util::optional &anchor, const PrimeMeridianNNPtr &primeMeridian); PROJ_DLL static GeodeticReferenceFrameNNPtr create(const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid, const util::optional &anchor, const util::optional &anchorEpoch, const PrimeMeridianNNPtr &primeMeridian); PROJ_DLL static const GeodeticReferenceFrameNNPtr EPSG_6267; // North American Datum 1927 PROJ_DLL static const GeodeticReferenceFrameNNPtr EPSG_6269; // North American Datum 1983 PROJ_DLL static const GeodeticReferenceFrameNNPtr EPSG_6326; // WGS 84 //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL bool isEquivalentToNoExactTypeCheck( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const; //! @endcond protected: #ifdef DOXYGEN_ENABLED PrimeMeridian primeMeridian_; Ellipsoid *ellipsoid_; #endif PROJ_INTERNAL GeodeticReferenceFrame(const EllipsoidNNPtr &ellipsoidIn, const PrimeMeridianNNPtr &primeMeridianIn); INLINED_MAKE_SHARED PROJ_INTERNAL static const GeodeticReferenceFrameNNPtr createEPSG_6267(); PROJ_INTERNAL static const GeodeticReferenceFrameNNPtr createEPSG_6269(); PROJ_INTERNAL static const GeodeticReferenceFrameNNPtr createEPSG_6326(); bool hasEquivalentNameToUsingAlias( const IdentifiedObject *other, const io::DatabaseContextPtr &dbContext) const override; private: PROJ_OPAQUE_PRIVATE_DATA GeodeticReferenceFrame(const GeodeticReferenceFrame &other) = delete; GeodeticReferenceFrame & operator=(const GeodeticReferenceFrame &other) = delete; }; // --------------------------------------------------------------------------- class DynamicGeodeticReferenceFrame; /** Shared pointer of DynamicGeodeticReferenceFrame */ using DynamicGeodeticReferenceFramePtr = std::shared_ptr; /** Non-null shared pointer of DynamicGeodeticReferenceFrame */ using DynamicGeodeticReferenceFrameNNPtr = util::nn; /** \brief A geodetic reference frame in which some of the parameters describe * time evolution of defining station coordinates. * * For example defining station coordinates having linear velocities to account * for crustal motion. * * \remark Implements DynamicGeodeticReferenceFrame from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DynamicGeodeticReferenceFrame final : public GeodeticReferenceFrame { public: //! @cond Doxygen_Suppress PROJ_DLL ~DynamicGeodeticReferenceFrame() override; //! @endcond PROJ_DLL const common::Measure &frameReferenceEpoch() const; PROJ_DLL const util::optional &deformationModelName() const; // non-standard PROJ_DLL static DynamicGeodeticReferenceFrameNNPtr create(const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid, const util::optional &anchor, const PrimeMeridianNNPtr &primeMeridian, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn); //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) //! @endcond protected: #ifdef DOXYGEN_ENABLED Measure frameReferenceEpoch_; #endif PROJ_INTERNAL DynamicGeodeticReferenceFrame( const EllipsoidNNPtr &ellipsoidIn, const PrimeMeridianNNPtr &primeMeridianIn, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA DynamicGeodeticReferenceFrame(const DynamicGeodeticReferenceFrame &other) = delete; DynamicGeodeticReferenceFrame & operator=(const DynamicGeodeticReferenceFrame &other) = delete; }; // --------------------------------------------------------------------------- /** \brief The specification of the method by which the vertical reference frame * is realized. * * \remark Implements RealizationMethod from \ref ISO_19111_2019 */ class PROJ_GCC_DLL RealizationMethod : public util::CodeList { public: PROJ_DLL static const RealizationMethod LEVELLING; PROJ_DLL static const RealizationMethod GEOID; PROJ_DLL static const RealizationMethod TIDAL; private: PROJ_FRIEND_OPTIONAL(RealizationMethod); PROJ_DLL explicit RealizationMethod( const std::string &nameIn = std::string()); PROJ_DLL RealizationMethod(const RealizationMethod &other) = default; PROJ_DLL RealizationMethod &operator=(const RealizationMethod &other); }; // --------------------------------------------------------------------------- class VerticalReferenceFrame; /** Shared pointer of VerticalReferenceFrame */ using VerticalReferenceFramePtr = std::shared_ptr; /** Non-null shared pointer of VerticalReferenceFrame */ using VerticalReferenceFrameNNPtr = util::nn; /** \brief A textual description and/or a set of parameters identifying a * particular reference level surface used as a zero-height or zero-depth * surface, including its position with respect to the Earth. * * \note In \ref ISO_19111_2007, this class was called VerticalDatum. * \remark Implements VerticalReferenceFrame from \ref ISO_19111_2019 */ class PROJ_GCC_DLL VerticalReferenceFrame : public Datum { public: //! @cond Doxygen_Suppress PROJ_DLL ~VerticalReferenceFrame() override; //! @endcond PROJ_DLL const util::optional &realizationMethod() const; // non-standard PROJ_DLL static VerticalReferenceFrameNNPtr create(const util::PropertyMap &properties, const util::optional &anchor = util::optional(), const util::optional &realizationMethodIn = util::optional()); PROJ_DLL static VerticalReferenceFrameNNPtr create(const util::PropertyMap &properties, const util::optional &anchor, const util::optional &anchorEpoch, const util::optional &realizationMethodIn = util::optional()); //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL bool isEquivalentToNoExactTypeCheck( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL const std::string &getWKT1DatumType() const; //! @endcond protected: #ifdef DOXYGEN_ENABLED RealizationMethod realizationMethod_; #endif PROJ_INTERNAL explicit VerticalReferenceFrame( const util::optional &realizationMethodIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class DynamicVerticalReferenceFrame; /** Shared pointer of DynamicVerticalReferenceFrame */ using DynamicVerticalReferenceFramePtr = std::shared_ptr; /** Non-null shared pointer of DynamicVerticalReferenceFrame */ using DynamicVerticalReferenceFrameNNPtr = util::nn; /** \brief A vertical reference frame in which some of the defining parameters * have time dependency. * * For example defining station heights have velocity to account for * post-glacial isostatic rebound motion. * * \remark Implements DynamicVerticalReferenceFrame from \ref ISO_19111_2019 */ class PROJ_GCC_DLL DynamicVerticalReferenceFrame final : public VerticalReferenceFrame { public: //! @cond Doxygen_Suppress PROJ_DLL ~DynamicVerticalReferenceFrame() override; //! @endcond PROJ_DLL const common::Measure &frameReferenceEpoch() const; PROJ_DLL const util::optional &deformationModelName() const; // non-standard PROJ_DLL static DynamicVerticalReferenceFrameNNPtr create(const util::PropertyMap &properties, const util::optional &anchor, const util::optional &realizationMethodIn, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn); //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) //! @endcond protected: #ifdef DOXYGEN_ENABLED Measure frameReferenceEpoch_; #endif PROJ_INTERNAL DynamicVerticalReferenceFrame( const util::optional &realizationMethodIn, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA DynamicVerticalReferenceFrame(const DynamicVerticalReferenceFrame &other) = delete; DynamicVerticalReferenceFrame & operator=(const DynamicVerticalReferenceFrame &other) = delete; }; // --------------------------------------------------------------------------- class TemporalDatum; /** Shared pointer of TemporalDatum */ using TemporalDatumPtr = std::shared_ptr; /** Non-null shared pointer of TemporalDatum */ using TemporalDatumNNPtr = util::nn; /** \brief The definition of the relationship of a temporal coordinate system * to an object. The object is normally time on the Earth. * * \remark Implements TemporalDatum from \ref ISO_19111_2019 */ class PROJ_GCC_DLL TemporalDatum final : public Datum { public: //! @cond Doxygen_Suppress PROJ_DLL ~TemporalDatum() override; //! @endcond PROJ_DLL const common::DateTime &temporalOrigin() const; PROJ_DLL const std::string &calendar() const; PROJ_DLL static const std::string CALENDAR_PROLEPTIC_GREGORIAN; // non-standard PROJ_DLL static TemporalDatumNNPtr create(const util::PropertyMap &properties, const common::DateTime &temporalOriginIn, const std::string &calendarIn); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL TemporalDatum(const common::DateTime &temporalOriginIn, const std::string &calendarIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class EngineeringDatum; /** Shared pointer of EngineeringDatum */ using EngineeringDatumPtr = std::shared_ptr; /** Non-null shared pointer of EngineeringDatum */ using EngineeringDatumNNPtr = util::nn; /** \brief The definition of the origin and orientation of an engineering * coordinate reference system. * * \note The origin can be fixed with respect to the Earth (such as a defined * point at a construction site), or be a defined point on a moving vehicle * (such as on a ship or satellite), or a defined point of an image. * * \remark Implements EngineeringDatum from \ref ISO_19111_2019 */ class PROJ_GCC_DLL EngineeringDatum final : public Datum { public: //! @cond Doxygen_Suppress PROJ_DLL ~EngineeringDatum() override; //! @endcond // non-standard PROJ_DLL static EngineeringDatumNNPtr create(const util::PropertyMap &properties, const util::optional &anchor = util::optional()); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL EngineeringDatum(); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class ParametricDatum; /** Shared pointer of ParametricDatum */ using ParametricDatumPtr = std::shared_ptr; /** Non-null shared pointer of ParametricDatum */ using ParametricDatumNNPtr = util::nn; /** \brief Textual description and/or a set of parameters identifying a * particular reference surface used as the origin of a parametric coordinate * system, including its position with respect to the Earth. * * \remark Implements ParametricDatum from \ref ISO_19111_2019 */ class PROJ_GCC_DLL ParametricDatum final : public Datum { public: //! @cond Doxygen_Suppress PROJ_DLL ~ParametricDatum() override; //! @endcond // non-standard PROJ_DLL static ParametricDatumNNPtr create(const util::PropertyMap &properties, const util::optional &anchor = util::optional()); //! @cond Doxygen_Suppress PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond protected: PROJ_INTERNAL ParametricDatum(); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA }; } // namespace datum NS_PROJ_END #endif // DATUM_HH_INCLUDED proj-9.6.0/include/proj/internal/000775 001754 001755 00000000000 14764566152 016624 5ustar00e012349e012349000000 000000 proj-9.6.0/include/proj/internal/coordinatesystem_internal.hpp000664 001754 001755 00000006634 14764566077 024644 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #error This file should only be included from a PROJ cpp file #endif #ifndef COORDINATESYSTEM_INTERNAL_HH_INCLUDED #define COORDINATESYSTEM_INTERNAL_HH_INCLUDED #include "proj/util.hpp" #include #include #include //! @cond Doxygen_Suppress NS_PROJ_START namespace cs { // --------------------------------------------------------------------------- class AxisDirectionWKT1 : public util::CodeList { public: static const AxisDirectionWKT1 *valueOf(const std::string &nameIn); static const AxisDirectionWKT1 NORTH; static const AxisDirectionWKT1 SOUTH; static const AxisDirectionWKT1 EAST; static const AxisDirectionWKT1 WEST; static const AxisDirectionWKT1 UP; static const AxisDirectionWKT1 DOWN; static const AxisDirectionWKT1 OTHER; private: explicit AxisDirectionWKT1(const std::string &nameIn); static std::map registry; }; // --------------------------------------------------------------------------- class AxisName { public: static const std::string Longitude; static const std::string Latitude; static const std::string Easting; static const std::string Northing; static const std::string Westing; static const std::string Southing; static const std::string Ellipsoidal_height; static const std::string Geocentric_X; static const std::string Geocentric_Y; static const std::string Geocentric_Z; }; // --------------------------------------------------------------------------- class AxisAbbreviation { public: static const std::string lon; static const std::string lat; static const std::string E; static const std::string N; static const std::string h; static const std::string X; static const std::string Y; static const std::string Z; }; } // namespace cs NS_PROJ_END //! @endcond #endif // COORDINATESYSTEM_INTERNAL_HH_INCLUDED proj-9.6.0/include/proj/internal/crs_internal.hpp000664 001754 001755 00000003603 14764566077 022030 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2021, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #error This file should only be included from a PROJ cpp file #endif #ifndef CRS_INTERNAL_HH_INCLUDED #define CRS_INTERNAL_HH_INCLUDED #define NORMALIZED_AXIS_ORDER_SUFFIX_STR \ " (with axis order normalized for visualization)" #define AXIS_ORDER_REVERSED_SUFFIX_STR " (with axis order reversed)" #endif // CRS_INTERNAL_HH_INCLUDED proj-9.6.0/include/proj/internal/datum_internal.hpp000664 001754 001755 00000004102 14764566077 022346 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2023, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #error This file should only be included from a PROJ cpp file #endif #ifndef DATUM_INTERNAL_HH_INCLUDED #define DATUM_INTERNAL_HH_INCLUDED #define UNKNOWN_ENGINEERING_DATUM "Unknown engineering datum" constexpr const char *NON_EARTH_BODY = "Non-Earth body"; // Mars (2015) - Sphere uses R=3396190 // and Mars polar radius (as used by HIRISE JPEG2000) is 3376200m // which is a 0.59% relative difference. constexpr double REL_ERROR_FOR_SAME_CELESTIAL_BODY = 0.007; constexpr const char *UNKNOWN_BASED_ON = "Unknown based on "; #endif // DATUM_INTERNAL_HH_INCLUDED proj-9.6.0/include/proj/internal/include_nlohmann_json.hpp000664 001754 001755 00000003716 14764566077 023720 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Wrapper for nlohmann/json.hpp * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ #ifndef INCLUDE_NLOHMANN_JSON_HPP #define INCLUDE_NLOHMANN_JSON_HPP #if defined(__GNUC__) #pragma GCC system_header #endif #ifdef EXTERNAL_NLOHMANN_JSON #include #else // !EXTERNAL_NLOHMANN_JSON // to avoid any clash if PROJ users have another version of nlohmann/json.hpp #define nlohmann proj_nlohmann #if !defined(DOXYGEN_ENABLED) #include "vendor/nlohmann/json.hpp" #endif #endif // EXTERNAL_NLOHMANN_JSON #endif // INCLUDE_NLOHMANN_JSON_HPP proj-9.6.0/include/proj/internal/internal.hpp000664 001754 001755 00000015241 14764566077 021162 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #error This file should only be included from a PROJ cpp file #endif #ifndef INTERNAL_HH_INCLUDED #define INTERNAL_HH_INCLUDED #if !(__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900)) #error Must have C++11 or newer. #endif #include #include #include #include #ifndef DOXYGEN_ENABLED #include // for std::is_base_of #endif #include #include "proj/util.hpp" //! @cond Doxygen_Suppress // Use "PROJ_FALLTHROUGH;" to annotate deliberate fall-through in switches, // use it analogously to "break;". The trailing semi-colon is required. #if !defined(PROJ_FALLTHROUGH) && defined(__has_cpp_attribute) #if __cplusplus >= 201703L && __has_cpp_attribute(fallthrough) #define PROJ_FALLTHROUGH [[fallthrough]] #elif __cplusplus >= 201103L && __has_cpp_attribute(gnu::fallthrough) #define PROJ_FALLTHROUGH [[gnu::fallthrough]] #elif __cplusplus >= 201103L && __has_cpp_attribute(clang::fallthrough) #define PROJ_FALLTHROUGH [[clang::fallthrough]] #endif #endif #ifndef PROJ_FALLTHROUGH #define PROJ_FALLTHROUGH ((void)0) #endif #if defined(__clang__) || defined(_MSC_VER) #define COMPILER_WARNS_ABOUT_ABSTRACT_VBASE_INIT #endif NS_PROJ_START namespace operation { class OperationParameterValue; } // namespace operation namespace internal { /** Use cpl::down_cast(pointer_to_base) as equivalent of * static_cast(pointer_to_base) with safe checking in debug * mode. * * Only works if no virtual inheritance is involved. * * @param f pointer to a base class * @return pointer to a derived class */ template inline To down_cast(From *f) { static_assert( (std::is_base_of::type>::value), "target type not derived from source type"); assert(f == nullptr || dynamic_cast(f) != nullptr); return static_cast(f); } PROJ_FOR_TEST std::string replaceAll(const std::string &str, const std::string &before, const std::string &after); PROJ_DLL size_t ci_find(const std::string &osStr, const char *needle) noexcept; size_t ci_find(const std::string &osStr, const std::string &needle, size_t startPos = 0) noexcept; inline bool starts_with(const std::string &str, const std::string &prefix) noexcept { if (str.size() < prefix.size()) { return false; } return std::memcmp(str.c_str(), prefix.c_str(), prefix.size()) == 0; } inline bool starts_with(const std::string &str, const char *prefix) noexcept { const size_t prefixSize = std::strlen(prefix); if (str.size() < prefixSize) { return false; } return std::memcmp(str.c_str(), prefix, prefixSize) == 0; } bool ci_less(const std::string &a, const std::string &b) noexcept; PROJ_DLL bool ci_starts_with(const char *str, const char *prefix) noexcept; bool ci_starts_with(const std::string &str, const std::string &prefix) noexcept; bool ends_with(const std::string &str, const std::string &suffix) noexcept; PROJ_FOR_TEST std::string tolower(const std::string &osStr); std::string toupper(const std::string &osStr); PROJ_FOR_TEST std::vector split(const std::string &osStr, char separator); PROJ_FOR_TEST std::vector split(const std::string &osStr, const std::string &separator); bool ci_equal(const char *a, const char *b) noexcept; bool ci_equal(const char *a, const std::string &b) = delete; PROJ_FOR_TEST bool ci_equal(const std::string &a, const char *b) noexcept; PROJ_FOR_TEST bool ci_equal(const std::string &a, const std::string &b) noexcept; std::string stripQuotes(const std::string &osStr); std::string toString(int val); PROJ_FOR_TEST std::string toString(double val, int precision = 15); PROJ_FOR_TEST double c_locale_stod(const std::string &s); // throw(std::invalid_argument) // Variant of above that doesn't emit exceptions double c_locale_stod(const std::string &s, bool &success); std::string concat(const std::string &, const std::string &) = delete; std::string concat(const char *, const char *) = delete; std::string concat(const char *a, const std::string &b); std::string concat(const std::string &, const char *) = delete; std::string concat(const char *, const char *, const char *) = delete; std::string concat(const char *, const char *, const std::string &) = delete; std::string concat(const char *a, const std::string &b, const char *c); std::string concat(const char *, const std::string &, const std::string &) = delete; std::string concat(const std::string &, const char *, const char *) = delete; std::string concat(const std::string &, const char *, const std::string &) = delete; std::string concat(const std::string &, const std::string &, const char *) = delete; std::string concat(const std::string &, const std::string &, const std::string &) = delete; double getRoundedEpochInDecimalYear(double year); } // namespace internal NS_PROJ_END //! @endcond #endif // INTERNAL_HH_INCLUDED proj-9.6.0/include/proj/internal/io_internal.hpp000664 001754 001755 00000020746 14764566077 021657 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #error This file should only be included from a PROJ cpp file #endif #ifndef IO_INTERNAL_HH_INCLUDED #define IO_INTERNAL_HH_INCLUDED #include #include #include "proj/io.hpp" #include "proj/util.hpp" //! @cond Doxygen_Suppress NS_PROJ_START namespace io { // --------------------------------------------------------------------------- class WKTConstants { public: // WKT1 static const std::string GEOCCS; static const std::string GEOGCS; static const std::string DATUM; // WKT2 preferred too static const std::string UNIT; static const std::string SPHEROID; static const std::string AXIS; // WKT2 too static const std::string PRIMEM; // WKT2 too static const std::string AUTHORITY; static const std::string PROJCS; static const std::string PROJECTION; static const std::string PARAMETER; // WKT2 too static const std::string VERT_CS; static const std::string VERTCS; // WKT1 ESRI static const std::string VERT_DATUM; static const std::string COMPD_CS; static const std::string TOWGS84; // WKT1 only static const std::string EXTENSION; // WKT1 only - GDAL specific static const std::string LOCAL_CS; // WKT1 only static const std::string LOCAL_DATUM; // WKT1 only static const std::string LINUNIT; // WKT1 ESRI (ArcGIS Pro >= 2.7) // WKT2 preferred static const std::string GEODCRS; static const std::string LENGTHUNIT; static const std::string ANGLEUNIT; static const std::string SCALEUNIT; static const std::string TIMEUNIT; static const std::string ELLIPSOID; // underscore, since there is a CS macro in Solaris system headers static const std::string CS_; static const std::string ID; static const std::string PROJCRS; static const std::string BASEGEODCRS; static const std::string MERIDIAN; static const std::string ORDER; static const std::string ANCHOR; static const std::string ANCHOREPOCH; // WKT2-2019 static const std::string CONVERSION; static const std::string METHOD; static const std::string REMARK; static const std::string GEOGCRS; // WKT2-2019 static const std::string BASEGEOGCRS; // WKT2-2019 static const std::string SCOPE; static const std::string AREA; static const std::string BBOX; static const std::string CITATION; static const std::string URI; static const std::string VERTCRS; static const std::string VDATUM; // WKT2 and WKT1 ESRI static const std::string COMPOUNDCRS; static const std::string PARAMETERFILE; static const std::string COORDINATEOPERATION; static const std::string SOURCECRS; static const std::string TARGETCRS; static const std::string INTERPOLATIONCRS; static const std::string OPERATIONACCURACY; static const std::string CONCATENATEDOPERATION; // WKT2-2019 static const std::string STEP; // WKT2-2019 static const std::string BOUNDCRS; static const std::string ABRIDGEDTRANSFORMATION; static const std::string DERIVINGCONVERSION; static const std::string TDATUM; static const std::string CALENDAR; // WKT2-2019 static const std::string TIMEORIGIN; static const std::string TIMECRS; static const std::string VERTICALEXTENT; static const std::string TIMEEXTENT; static const std::string USAGE; // WKT2-2019 static const std::string DYNAMIC; // WKT2-2019 static const std::string FRAMEEPOCH; // WKT2-2019 static const std::string MODEL; // WKT2-2019 static const std::string VELOCITYGRID; // WKT2-2019 static const std::string ENSEMBLE; // WKT2-2019 static const std::string MEMBER; // WKT2-2019 static const std::string ENSEMBLEACCURACY; // WKT2-2019 static const std::string DERIVEDPROJCRS; // WKT2-2019 static const std::string BASEPROJCRS; // WKT2-2019 static const std::string EDATUM; static const std::string ENGCRS; static const std::string PDATUM; static const std::string PARAMETRICCRS; static const std::string PARAMETRICUNIT; static const std::string BASEVERTCRS; static const std::string BASEENGCRS; static const std::string BASEPARAMCRS; static const std::string BASETIMECRS; static const std::string VERSION; static const std::string GEOIDMODEL; // WKT2-2019 static const std::string COORDINATEMETADATA; // WKT2-2019 static const std::string EPOCH; // WKT2-2019 static const std::string AXISMINVALUE; // WKT2-2019 static const std::string AXISMAXVALUE; // WKT2-2019 static const std::string RANGEMEANING; // WKT2-2019 static const std::string POINTMOTIONOPERATION; // WKT2-2019 // WKT2 alternate (longer or shorter) static const std::string GEODETICCRS; static const std::string GEODETICDATUM; static const std::string PROJECTEDCRS; static const std::string PRIMEMERIDIAN; static const std::string GEOGRAPHICCRS; // WKT2-2019 static const std::string TRF; // WKT2-2019 static const std::string VERTICALCRS; static const std::string VERTICALDATUM; static const std::string VRF; // WKT2-2019 static const std::string TIMEDATUM; static const std::string TEMPORALQUANTITY; static const std::string ENGINEERINGDATUM; static const std::string ENGINEERINGCRS; static const std::string PARAMETRICDATUM; static const std::vector &constants() { return constants_; } private: static std::vector constants_; static const char *createAndAddToConstantList(const char *text); }; } // namespace io NS_PROJ_END // --------------------------------------------------------------------------- /** Auxiliary structure to PJ_CONTEXT storing C++ context stuff. */ struct PROJ_GCC_DLL projCppContext { private: NS_PROJ::io::DatabaseContextPtr databaseContext_{}; PJ_CONTEXT *ctx_ = nullptr; std::string dbPath_{}; std::vector auxDbPaths_{}; projCppContext(const projCppContext &) = delete; projCppContext &operator=(const projCppContext &) = delete; public: std::string lastDbPath_{}; std::string lastDbMetadataItem_{}; std::string lastUOMName_{}; std::string lastGridFullName_{}; std::string lastGridPackageName_{}; std::string lastGridUrl_{}; static std::vector toVector(const char *const *auxDbPaths); explicit projCppContext(PJ_CONTEXT *ctx, const char *dbPath = nullptr, const std::vector &auxDbPaths = {}); projCppContext *clone(PJ_CONTEXT *ctx) const; // cppcheck-suppress functionStatic inline const std::string &getDbPath() const { return dbPath_; } // cppcheck-suppress functionStatic inline const std::vector &getAuxDbPaths() const { return auxDbPaths_; } NS_PROJ::io::DatabaseContextNNPtr PROJ_FOR_TEST getDatabaseContext(); void closeDb() { databaseContext_ = nullptr; } }; //! @endcond #endif // IO_INTERNAL_HH_INCLUDED proj-9.6.0/include/proj/internal/lru_cache.hpp000664 001754 001755 00000015361 14764566077 021276 0ustar00e012349e012349000000 000000 /* * LRUCache11 - a templated C++11 based LRU cache class that allows * specification of * key, value and optionally the map container type (defaults to * std::unordered_map) * By using the std::map and a linked list of keys it allows O(1) insert, delete * and * refresh operations. * * This is a header-only library and all you need is the LRUCache11.hpp file * * Github: https://github.com/mohaps/lrucache11 * * This is a follow-up to the LRUCache project - * https://github.com/mohaps/lrucache * * Copyright (c) 2012-22 SAURAV MOHAPATRA * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /*! @cond Doxygen_Suppress */ #pragma once #include #include #include #include #include #include #include NS_PROJ_START namespace lru11 { /* * a noop lockable concept that can be used in place of std::mutex */ class NullLock { public: // cppcheck-suppress functionStatic void lock() {} // cppcheck-suppress functionStatic void unlock() {} // cppcheck-suppress functionStatic bool try_lock() { return true; } }; /** * error raised when a key not in cache is passed to get() */ class KeyNotFound : public std::invalid_argument { public: KeyNotFound() : std::invalid_argument("key_not_found") {} ~KeyNotFound() override; }; #ifndef LRU11_DO_NOT_DEFINE_OUT_OF_CLASS_METHODS KeyNotFound::~KeyNotFound() = default; #endif template struct KeyValuePair { public: K key; V value; KeyValuePair(const K &keyIn, const V &v) : key(keyIn), value(v) {} }; /** * The LRU Cache class templated by * Key - key type * Value - value type * MapType - an associative container like std::unordered_map * LockType - a lock type derived from the Lock class (default: *NullLock = no synchronization) * * The default NullLock based template is not thread-safe, however passing *Lock=std::mutex will make it * thread-safe */ template >::iterator>> class Cache { public: typedef KeyValuePair node_type; typedef std::list> list_type; typedef Map map_type; typedef Lock lock_type; using Guard = std::lock_guard; /** * the max size is the hard limit of keys and (maxSize + elasticity) is the * soft limit * the cache is allowed to grow till maxSize + elasticity and is pruned back * to maxSize keys * set maxSize = 0 for an unbounded cache (but in that case, you're better * off using a std::unordered_map directly anyway! :) */ explicit Cache(size_t maxSize = 64, size_t elasticity = 10) : maxSize_(maxSize), elasticity_(elasticity) {} virtual ~Cache() = default; size_t size() const { Guard g(lock_); return cache_.size(); } bool empty() const { Guard g(lock_); return cache_.empty(); } void clear() { Guard g(lock_); cache_.clear(); keys_.clear(); } void insert(const Key &key, const Value &v) { Guard g(lock_); const auto iter = cache_.find(key); if (iter != cache_.end()) { iter->second->value = v; keys_.splice(keys_.begin(), keys_, iter->second); return; } keys_.emplace_front(key, v); cache_[key] = keys_.begin(); prune(); } bool tryGet(const Key &kIn, Value &vOut) { Guard g(lock_); const auto iter = cache_.find(kIn); if (iter == cache_.end()) { return false; } keys_.splice(keys_.begin(), keys_, iter->second); vOut = iter->second->value; return true; } /** * The const reference returned here is only * guaranteed to be valid till the next insert/delete */ const Value &get(const Key &key) { Guard g(lock_); const auto iter = cache_.find(key); if (iter == cache_.end()) { throw KeyNotFound(); } keys_.splice(keys_.begin(), keys_, iter->second); return iter->second->value; } /** * The const reference returned here is only * guaranteed to be valid till the next insert/delete */ const Value *getPtr(const Key &key) { Guard g(lock_); const auto iter = cache_.find(key); if (iter == cache_.end()) { return nullptr; } keys_.splice(keys_.begin(), keys_, iter->second); return &(iter->second->value); } /** * returns a copy of the stored object (if found) */ Value getCopy(const Key &key) { return get(key); } bool remove(const Key &key) { Guard g(lock_); auto iter = cache_.find(key); if (iter == cache_.end()) { return false; } keys_.erase(iter->second); cache_.erase(iter); return true; } bool contains(const Key &key) { Guard g(lock_); return cache_.find(key) != cache_.end(); } size_t getMaxSize() const { return maxSize_; } size_t getElasticity() const { return elasticity_; } size_t getMaxAllowedSize() const { return maxSize_ + elasticity_; } template void cwalk(F &f) const { Guard g(lock_); std::for_each(keys_.begin(), keys_.end(), f); } protected: size_t prune() { size_t maxAllowed = maxSize_ + elasticity_; if (maxSize_ == 0 || cache_.size() <= maxAllowed) { /* ERO: changed < to <= */ return 0; } size_t count = 0; while (cache_.size() > maxSize_) { cache_.erase(keys_.back().key); keys_.pop_back(); ++count; } return count; } private: // Disallow copying. Cache(const Cache &) = delete; Cache &operator=(const Cache &) = delete; mutable Lock lock_{}; Map cache_{}; list_type keys_{}; size_t maxSize_; size_t elasticity_; }; } // namespace lru11 NS_PROJ_END /*! @endcond */ proj-9.6.0/include/proj/internal/tracing.hpp000664 001754 001755 00000005333 14764566077 020776 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Tracing/profiling * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ #ifndef TRACING_HH_INCLUDED #define TRACING_HH_INCLUDED //! @cond Doxygen_Suppress #include #include "proj/util.hpp" #ifdef ENABLE_TRACING NS_PROJ_START namespace tracing { void logTrace(const std::string &str, const std::string &component = std::string()); class EnterBlock { public: EnterBlock(const std::string &msg); ~EnterBlock(); private: PROJ_OPAQUE_PRIVATE_DATA }; #define TRACING_MERGE(a, b) a##b #define TRACING_UNIQUE_NAME(a) TRACING_MERGE(unique_name_, a) #define ENTER_BLOCK(x) EnterBlock TRACING_UNIQUE_NAME(__LINE__)(x) #define ENTER_FUNCTION() ENTER_BLOCK(__FUNCTION__ + std::string("()")) } // namespace tracing NS_PROJ_END using namespace NS_PROJ::tracing; #else // ENABLE_TRACING inline void logTrace(const std::string &, const std::string & = std::string()) { } #define ENTER_BLOCK(x) \ do { \ } while (0); #define ENTER_FUNCTION() \ do { \ } while (0) #endif // ENABLE_TRACING //! @endcond #endif // TRACING_HH_INCLUDED proj-9.6.0/include/proj/internal/vendor/000775 001754 001755 00000000000 14764566152 020121 5ustar00e012349e012349000000 000000 proj-9.6.0/include/proj/internal/vendor/nlohmann/000775 001754 001755 00000000000 14764566152 021733 5ustar00e012349e012349000000 000000 proj-9.6.0/include/proj/internal/vendor/nlohmann/json.hpp000664 001754 001755 00003421035 14764566077 023433 0ustar00e012349e012349000000 000000 /* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ | | |__ | | | | | | version 3.9.1 |_____|_____|_____|_|___| https://github.com/nlohmann/json Licensed under the MIT License . SPDX-License-Identifier: MIT Copyright (c) 2013-2019 Niels Lohmann . 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. */ #ifndef INCLUDE_NLOHMANN_JSON_HPP_ #define INCLUDE_NLOHMANN_JSON_HPP_ #define NLOHMANN_JSON_VERSION_MAJOR 3 #define NLOHMANN_JSON_VERSION_MINOR 9 #define NLOHMANN_JSON_VERSION_PATCH 1 #include // all_of, find, for_each #include // nullptr_t, ptrdiff_t, size_t #include // hash, less #include // initializer_list #include // istream, ostream #include // random_access_iterator_tag #include // unique_ptr #include // accumulate #include // string, stoi, to_string #include // declval, forward, move, pair, swap #include // vector // #include #include // #include #include // transform #include // array #include // forward_list #include // inserter, front_inserter, end #include // map #include // string #include // tuple, make_tuple #include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible #include // unordered_map #include // pair, declval #include // valarray // #include #include // exception #include // runtime_error #include // to_string // #include #include // size_t namespace nlohmann { namespace detail { /// struct to capture the start position of the current token struct position_t { /// the total number of characters read std::size_t chars_read_total = 0; /// the number of characters read in the current line std::size_t chars_read_current_line = 0; /// the number of lines read std::size_t lines_read = 0; /// conversion to size_t to preserve SAX interface constexpr operator size_t() const { return chars_read_total; } }; } // namespace detail } // namespace nlohmann // #include #include // pair // #include /* Hedley - https://nemequ.github.io/hedley * Created by Evan Nemerson * * To the extent possible under law, the author(s) have dedicated all * copyright and related and neighboring rights to this software to * the public domain worldwide. This software is distributed without * any warranty. * * For details, see . * SPDX-License-Identifier: CC0-1.0 */ #if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 13) #if defined(JSON_HEDLEY_VERSION) #undef JSON_HEDLEY_VERSION #endif #define JSON_HEDLEY_VERSION 13 #if defined(JSON_HEDLEY_STRINGIFY_EX) #undef JSON_HEDLEY_STRINGIFY_EX #endif #define JSON_HEDLEY_STRINGIFY_EX(x) #x #if defined(JSON_HEDLEY_STRINGIFY) #undef JSON_HEDLEY_STRINGIFY #endif #define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) #if defined(JSON_HEDLEY_CONCAT_EX) #undef JSON_HEDLEY_CONCAT_EX #endif #define JSON_HEDLEY_CONCAT_EX(a,b) a##b #if defined(JSON_HEDLEY_CONCAT) #undef JSON_HEDLEY_CONCAT #endif #define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) #if defined(JSON_HEDLEY_CONCAT3_EX) #undef JSON_HEDLEY_CONCAT3_EX #endif #define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c #if defined(JSON_HEDLEY_CONCAT3) #undef JSON_HEDLEY_CONCAT3 #endif #define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) #if defined(JSON_HEDLEY_VERSION_ENCODE) #undef JSON_HEDLEY_VERSION_ENCODE #endif #define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) #if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) #undef JSON_HEDLEY_VERSION_DECODE_MAJOR #endif #define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) #if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) #undef JSON_HEDLEY_VERSION_DECODE_MINOR #endif #define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) #if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) #undef JSON_HEDLEY_VERSION_DECODE_REVISION #endif #define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) #if defined(JSON_HEDLEY_GNUC_VERSION) #undef JSON_HEDLEY_GNUC_VERSION #endif #if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) #elif defined(__GNUC__) #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) #endif #if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) #undef JSON_HEDLEY_GNUC_VERSION_CHECK #endif #if defined(JSON_HEDLEY_GNUC_VERSION) #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_MSVC_VERSION) #undef JSON_HEDLEY_MSVC_VERSION #endif #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) #elif defined(_MSC_FULL_VER) #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) #elif defined(_MSC_VER) #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) #endif #if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) #undef JSON_HEDLEY_MSVC_VERSION_CHECK #endif #if !defined(_MSC_VER) #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) #elif defined(_MSC_VER) && (_MSC_VER >= 1400) #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) #elif defined(_MSC_VER) && (_MSC_VER >= 1200) #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) #else #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) #endif #if defined(JSON_HEDLEY_INTEL_VERSION) #undef JSON_HEDLEY_INTEL_VERSION #endif #if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) #elif defined(__INTEL_COMPILER) #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) #endif #if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) #undef JSON_HEDLEY_INTEL_VERSION_CHECK #endif #if defined(JSON_HEDLEY_INTEL_VERSION) #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_PGI_VERSION) #undef JSON_HEDLEY_PGI_VERSION #endif #if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) #endif #if defined(JSON_HEDLEY_PGI_VERSION_CHECK) #undef JSON_HEDLEY_PGI_VERSION_CHECK #endif #if defined(JSON_HEDLEY_PGI_VERSION) #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_SUNPRO_VERSION) #undef JSON_HEDLEY_SUNPRO_VERSION #endif #if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) #elif defined(__SUNPRO_C) #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) #elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) #elif defined(__SUNPRO_CC) #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) #endif #if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK #endif #if defined(JSON_HEDLEY_SUNPRO_VERSION) #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) #undef JSON_HEDLEY_EMSCRIPTEN_VERSION #endif #if defined(__EMSCRIPTEN__) #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) #endif #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK #endif #if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_ARM_VERSION) #undef JSON_HEDLEY_ARM_VERSION #endif #if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) #elif defined(__CC_ARM) && defined(__ARMCC_VERSION) #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) #endif #if defined(JSON_HEDLEY_ARM_VERSION_CHECK) #undef JSON_HEDLEY_ARM_VERSION_CHECK #endif #if defined(JSON_HEDLEY_ARM_VERSION) #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_IBM_VERSION) #undef JSON_HEDLEY_IBM_VERSION #endif #if defined(__ibmxl__) #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) #elif defined(__xlC__) && defined(__xlC_ver__) #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) #elif defined(__xlC__) #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) #endif #if defined(JSON_HEDLEY_IBM_VERSION_CHECK) #undef JSON_HEDLEY_IBM_VERSION_CHECK #endif #if defined(JSON_HEDLEY_IBM_VERSION) #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TI_VERSION) #undef JSON_HEDLEY_TI_VERSION #endif #if \ defined(__TI_COMPILER_VERSION__) && \ ( \ defined(__TMS470__) || defined(__TI_ARM__) || \ defined(__MSP430__) || \ defined(__TMS320C2000__) \ ) #if (__TI_COMPILER_VERSION__ >= 16000000) #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) #endif #endif #if defined(JSON_HEDLEY_TI_VERSION_CHECK) #undef JSON_HEDLEY_TI_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TI_VERSION) #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TI_CL2000_VERSION) #undef JSON_HEDLEY_TI_CL2000_VERSION #endif #if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) #endif #if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TI_CL2000_VERSION) #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TI_CL430_VERSION) #undef JSON_HEDLEY_TI_CL430_VERSION #endif #if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) #endif #if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TI_CL430_VERSION) #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TI_ARMCL_VERSION) #undef JSON_HEDLEY_TI_ARMCL_VERSION #endif #if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) #endif #if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TI_ARMCL_VERSION) #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TI_CL6X_VERSION) #undef JSON_HEDLEY_TI_CL6X_VERSION #endif #if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) #endif #if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TI_CL6X_VERSION) #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TI_CL7X_VERSION) #undef JSON_HEDLEY_TI_CL7X_VERSION #endif #if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) #endif #if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TI_CL7X_VERSION) #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TI_CLPRU_VERSION) #undef JSON_HEDLEY_TI_CLPRU_VERSION #endif #if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) #endif #if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TI_CLPRU_VERSION) #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_CRAY_VERSION) #undef JSON_HEDLEY_CRAY_VERSION #endif #if defined(_CRAYC) #if defined(_RELEASE_PATCHLEVEL) #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) #else #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) #endif #endif #if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) #undef JSON_HEDLEY_CRAY_VERSION_CHECK #endif #if defined(JSON_HEDLEY_CRAY_VERSION) #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_IAR_VERSION) #undef JSON_HEDLEY_IAR_VERSION #endif #if defined(__IAR_SYSTEMS_ICC__) #if __VER__ > 1000 #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) #else #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(VER / 100, __VER__ % 100, 0) #endif #endif #if defined(JSON_HEDLEY_IAR_VERSION_CHECK) #undef JSON_HEDLEY_IAR_VERSION_CHECK #endif #if defined(JSON_HEDLEY_IAR_VERSION) #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_TINYC_VERSION) #undef JSON_HEDLEY_TINYC_VERSION #endif #if defined(__TINYC__) #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) #endif #if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) #undef JSON_HEDLEY_TINYC_VERSION_CHECK #endif #if defined(JSON_HEDLEY_TINYC_VERSION) #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_DMC_VERSION) #undef JSON_HEDLEY_DMC_VERSION #endif #if defined(__DMC__) #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) #endif #if defined(JSON_HEDLEY_DMC_VERSION_CHECK) #undef JSON_HEDLEY_DMC_VERSION_CHECK #endif #if defined(JSON_HEDLEY_DMC_VERSION) #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_COMPCERT_VERSION) #undef JSON_HEDLEY_COMPCERT_VERSION #endif #if defined(__COMPCERT_VERSION__) #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) #endif #if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK #endif #if defined(JSON_HEDLEY_COMPCERT_VERSION) #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_PELLES_VERSION) #undef JSON_HEDLEY_PELLES_VERSION #endif #if defined(__POCC__) #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) #endif #if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) #undef JSON_HEDLEY_PELLES_VERSION_CHECK #endif #if defined(JSON_HEDLEY_PELLES_VERSION) #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_GCC_VERSION) #undef JSON_HEDLEY_GCC_VERSION #endif #if \ defined(JSON_HEDLEY_GNUC_VERSION) && \ !defined(__clang__) && \ !defined(JSON_HEDLEY_INTEL_VERSION) && \ !defined(JSON_HEDLEY_PGI_VERSION) && \ !defined(JSON_HEDLEY_ARM_VERSION) && \ !defined(JSON_HEDLEY_TI_VERSION) && \ !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ !defined(__COMPCERT__) #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION #endif #if defined(JSON_HEDLEY_GCC_VERSION_CHECK) #undef JSON_HEDLEY_GCC_VERSION_CHECK #endif #if defined(JSON_HEDLEY_GCC_VERSION) #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) #else #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) #endif #if defined(JSON_HEDLEY_HAS_ATTRIBUTE) #undef JSON_HEDLEY_HAS_ATTRIBUTE #endif #if defined(__has_attribute) #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) #else #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) #endif #if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE #endif #if defined(__has_attribute) #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) #else #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE #endif #if defined(__has_attribute) #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) #else #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE #endif #if \ defined(__has_cpp_attribute) && \ defined(__cplusplus) && \ (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) #else #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) #endif #if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS #endif #if !defined(__cplusplus) || !defined(__has_cpp_attribute) #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) #elif \ !defined(JSON_HEDLEY_PGI_VERSION) && \ !defined(JSON_HEDLEY_IAR_VERSION) && \ (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) #else #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) #endif #if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE #endif #if defined(__has_cpp_attribute) && defined(__cplusplus) #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) #else #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE #endif #if defined(__has_cpp_attribute) && defined(__cplusplus) #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) #else #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_HAS_BUILTIN) #undef JSON_HEDLEY_HAS_BUILTIN #endif #if defined(__has_builtin) #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) #else #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) #endif #if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) #undef JSON_HEDLEY_GNUC_HAS_BUILTIN #endif #if defined(__has_builtin) #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) #else #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) #undef JSON_HEDLEY_GCC_HAS_BUILTIN #endif #if defined(__has_builtin) #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) #else #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_HAS_FEATURE) #undef JSON_HEDLEY_HAS_FEATURE #endif #if defined(__has_feature) #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) #else #define JSON_HEDLEY_HAS_FEATURE(feature) (0) #endif #if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) #undef JSON_HEDLEY_GNUC_HAS_FEATURE #endif #if defined(__has_feature) #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) #else #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_GCC_HAS_FEATURE) #undef JSON_HEDLEY_GCC_HAS_FEATURE #endif #if defined(__has_feature) #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) #else #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_HAS_EXTENSION) #undef JSON_HEDLEY_HAS_EXTENSION #endif #if defined(__has_extension) #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) #else #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) #endif #if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) #undef JSON_HEDLEY_GNUC_HAS_EXTENSION #endif #if defined(__has_extension) #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) #else #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) #undef JSON_HEDLEY_GCC_HAS_EXTENSION #endif #if defined(__has_extension) #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) #else #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE #endif #if defined(__has_declspec_attribute) #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) #else #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) #endif #if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE #endif #if defined(__has_declspec_attribute) #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) #else #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE #endif #if defined(__has_declspec_attribute) #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) #else #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_HAS_WARNING) #undef JSON_HEDLEY_HAS_WARNING #endif #if defined(__has_warning) #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) #else #define JSON_HEDLEY_HAS_WARNING(warning) (0) #endif #if defined(JSON_HEDLEY_GNUC_HAS_WARNING) #undef JSON_HEDLEY_GNUC_HAS_WARNING #endif #if defined(__has_warning) #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) #else #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_GCC_HAS_WARNING) #undef JSON_HEDLEY_GCC_HAS_WARNING #endif #if defined(__has_warning) #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) #else #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif /* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ #endif #if defined(__cplusplus) # if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") # if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ xpr \ JSON_HEDLEY_DIAGNOSTIC_POP # else # define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ xpr \ JSON_HEDLEY_DIAGNOSTIC_POP # endif # endif #endif #if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x #endif #if defined(JSON_HEDLEY_CONST_CAST) #undef JSON_HEDLEY_CONST_CAST #endif #if defined(__cplusplus) # define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) #elif \ JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) # define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ ((T) (expr)); \ JSON_HEDLEY_DIAGNOSTIC_POP \ })) #else # define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) #endif #if defined(JSON_HEDLEY_REINTERPRET_CAST) #undef JSON_HEDLEY_REINTERPRET_CAST #endif #if defined(__cplusplus) #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) #else #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) #endif #if defined(JSON_HEDLEY_STATIC_CAST) #undef JSON_HEDLEY_STATIC_CAST #endif #if defined(__cplusplus) #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) #else #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) #endif #if defined(JSON_HEDLEY_CPP_CAST) #undef JSON_HEDLEY_CPP_CAST #endif #if defined(__cplusplus) # if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") # define JSON_HEDLEY_CPP_CAST(T, expr) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ ((T) (expr)) \ JSON_HEDLEY_DIAGNOSTIC_POP # elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) # define JSON_HEDLEY_CPP_CAST(T, expr) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ _Pragma("diag_suppress=Pe137") \ JSON_HEDLEY_DIAGNOSTIC_POP \ # else # define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) # endif #else # define JSON_HEDLEY_CPP_CAST(T, expr) (expr) #endif #if \ (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ defined(__clang__) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) #define JSON_HEDLEY_PRAGMA(value) __pragma(value) #else #define JSON_HEDLEY_PRAGMA(value) #endif #if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) #undef JSON_HEDLEY_DIAGNOSTIC_PUSH #endif #if defined(JSON_HEDLEY_DIAGNOSTIC_POP) #undef JSON_HEDLEY_DIAGNOSTIC_POP #endif #if defined(__clang__) #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) #elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") #elif \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") #else #define JSON_HEDLEY_DIAGNOSTIC_PUSH #define JSON_HEDLEY_DIAGNOSTIC_POP #endif #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED #endif #if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) #elif \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") #else #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED #endif #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS #endif #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) #elif \ JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") #else #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS #endif #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES #endif #if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") #elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") #elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") #elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) #elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") #elif \ JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") #else #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES #endif #if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL #endif #if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") #elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") #else #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL #endif #if defined(JSON_HEDLEY_DEPRECATED) #undef JSON_HEDLEY_DEPRECATED #endif #if defined(JSON_HEDLEY_DEPRECATED_FOR) #undef JSON_HEDLEY_DEPRECATED_FOR #endif #if JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) #elif defined(__cplusplus) && (__cplusplus >= 201402L) #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) #elif \ JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) #elif \ JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) #elif \ JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") #else #define JSON_HEDLEY_DEPRECATED(since) #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) #endif #if defined(JSON_HEDLEY_UNAVAILABLE) #undef JSON_HEDLEY_UNAVAILABLE #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) #else #define JSON_HEDLEY_UNAVAILABLE(available_since) #endif #if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) #undef JSON_HEDLEY_WARN_UNUSED_RESULT #endif #if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG #endif #if (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) #elif \ JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) #elif defined(_Check_return_) /* SAL */ #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ #else #define JSON_HEDLEY_WARN_UNUSED_RESULT #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) #endif #if defined(JSON_HEDLEY_SENTINEL) #undef JSON_HEDLEY_SENTINEL #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) #else #define JSON_HEDLEY_SENTINEL(position) #endif #if defined(JSON_HEDLEY_NO_RETURN) #undef JSON_HEDLEY_NO_RETURN #endif #if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) #define JSON_HEDLEY_NO_RETURN __noreturn #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L #define JSON_HEDLEY_NO_RETURN _Noreturn #elif defined(__cplusplus) && (__cplusplus >= 201103L) #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) #elif \ JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") #elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) #elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) #else #define JSON_HEDLEY_NO_RETURN #endif #if defined(JSON_HEDLEY_NO_ESCAPE) #undef JSON_HEDLEY_NO_ESCAPE #endif #if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) #else #define JSON_HEDLEY_NO_ESCAPE #endif #if defined(JSON_HEDLEY_UNREACHABLE) #undef JSON_HEDLEY_UNREACHABLE #endif #if defined(JSON_HEDLEY_UNREACHABLE_RETURN) #undef JSON_HEDLEY_UNREACHABLE_RETURN #endif #if defined(JSON_HEDLEY_ASSUME) #undef JSON_HEDLEY_ASSUME #endif #if \ JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_ASSUME(expr) __assume(expr) #elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) #elif \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) #if defined(__cplusplus) #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) #else #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) #endif #endif #if \ (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() #elif defined(JSON_HEDLEY_ASSUME) #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) #endif #if !defined(JSON_HEDLEY_ASSUME) #if defined(JSON_HEDLEY_UNREACHABLE) #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) #else #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) #endif #endif #if defined(JSON_HEDLEY_UNREACHABLE) #if \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) #else #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() #endif #else #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) #endif #if !defined(JSON_HEDLEY_UNREACHABLE) #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) #endif JSON_HEDLEY_DIAGNOSTIC_PUSH #if JSON_HEDLEY_HAS_WARNING("-Wpedantic") #pragma clang diagnostic ignored "-Wpedantic" #endif #if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" #endif #if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) #if defined(__clang__) #pragma clang diagnostic ignored "-Wvariadic-macros" #elif defined(JSON_HEDLEY_GCC_VERSION) #pragma GCC diagnostic ignored "-Wvariadic-macros" #endif #endif #if defined(JSON_HEDLEY_NON_NULL) #undef JSON_HEDLEY_NON_NULL #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) #else #define JSON_HEDLEY_NON_NULL(...) #endif JSON_HEDLEY_DIAGNOSTIC_POP #if defined(JSON_HEDLEY_PRINTF_FORMAT) #undef JSON_HEDLEY_PRINTF_FORMAT #endif #if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) #elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) #elif \ JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) #elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) #else #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) #endif #if defined(JSON_HEDLEY_CONSTEXPR) #undef JSON_HEDLEY_CONSTEXPR #endif #if defined(__cplusplus) #if __cplusplus >= 201103L #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) #endif #endif #if !defined(JSON_HEDLEY_CONSTEXPR) #define JSON_HEDLEY_CONSTEXPR #endif #if defined(JSON_HEDLEY_PREDICT) #undef JSON_HEDLEY_PREDICT #endif #if defined(JSON_HEDLEY_LIKELY) #undef JSON_HEDLEY_LIKELY #endif #if defined(JSON_HEDLEY_UNLIKELY) #undef JSON_HEDLEY_UNLIKELY #endif #if defined(JSON_HEDLEY_UNPREDICTABLE) #undef JSON_HEDLEY_UNPREDICTABLE #endif #if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) #endif #if \ JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) || \ JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) # define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) # define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) # define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) #elif \ JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) # define JSON_HEDLEY_PREDICT(expr, expected, probability) \ (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ (__extension__ ({ \ double hedley_probability_ = (probability); \ ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ })) # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ (__extension__ ({ \ double hedley_probability_ = (probability); \ ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ })) # define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) # define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) #else # define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) # define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) # define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) # define JSON_HEDLEY_LIKELY(expr) (!!(expr)) # define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) #endif #if !defined(JSON_HEDLEY_UNPREDICTABLE) #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) #endif #if defined(JSON_HEDLEY_MALLOC) #undef JSON_HEDLEY_MALLOC #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") #elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) #define JSON_HEDLEY_MALLOC __declspec(restrict) #else #define JSON_HEDLEY_MALLOC #endif #if defined(JSON_HEDLEY_PURE) #undef JSON_HEDLEY_PURE #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) # define JSON_HEDLEY_PURE __attribute__((__pure__)) #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) # define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") #elif defined(__cplusplus) && \ ( \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ ) # define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") #else # define JSON_HEDLEY_PURE #endif #if defined(JSON_HEDLEY_CONST) #undef JSON_HEDLEY_CONST #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) #define JSON_HEDLEY_CONST __attribute__((__const__)) #elif \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) #define JSON_HEDLEY_CONST _Pragma("no_side_effect") #else #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE #endif #if defined(JSON_HEDLEY_RESTRICT) #undef JSON_HEDLEY_RESTRICT #endif #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) #define JSON_HEDLEY_RESTRICT restrict #elif \ JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ defined(__clang__) #define JSON_HEDLEY_RESTRICT __restrict #elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) #define JSON_HEDLEY_RESTRICT _Restrict #else #define JSON_HEDLEY_RESTRICT #endif #if defined(JSON_HEDLEY_INLINE) #undef JSON_HEDLEY_INLINE #endif #if \ (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ (defined(__cplusplus) && (__cplusplus >= 199711L)) #define JSON_HEDLEY_INLINE inline #elif \ defined(JSON_HEDLEY_GCC_VERSION) || \ JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) #define JSON_HEDLEY_INLINE __inline__ #elif \ JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_INLINE __inline #else #define JSON_HEDLEY_INLINE #endif #if defined(JSON_HEDLEY_ALWAYS_INLINE) #undef JSON_HEDLEY_ALWAYS_INLINE #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) # define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) # define JSON_HEDLEY_ALWAYS_INLINE __forceinline #elif defined(__cplusplus) && \ ( \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ ) # define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) # define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") #else # define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE #endif #if defined(JSON_HEDLEY_NEVER_INLINE) #undef JSON_HEDLEY_NEVER_INLINE #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) #elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") #elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") #elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) #elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) #else #define JSON_HEDLEY_NEVER_INLINE #endif #if defined(JSON_HEDLEY_PRIVATE) #undef JSON_HEDLEY_PRIVATE #endif #if defined(JSON_HEDLEY_PUBLIC) #undef JSON_HEDLEY_PUBLIC #endif #if defined(JSON_HEDLEY_IMPORT) #undef JSON_HEDLEY_IMPORT #endif #if defined(_WIN32) || defined(__CYGWIN__) # define JSON_HEDLEY_PRIVATE # define JSON_HEDLEY_PUBLIC __declspec(dllexport) # define JSON_HEDLEY_IMPORT __declspec(dllimport) #else # if \ JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ ( \ defined(__TI_EABI__) && \ ( \ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ ) \ ) # define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) # define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) # else # define JSON_HEDLEY_PRIVATE # define JSON_HEDLEY_PUBLIC # endif # define JSON_HEDLEY_IMPORT extern #endif #if defined(JSON_HEDLEY_NO_THROW) #undef JSON_HEDLEY_NO_THROW #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) #elif \ JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) #define JSON_HEDLEY_NO_THROW __declspec(nothrow) #else #define JSON_HEDLEY_NO_THROW #endif #if defined(JSON_HEDLEY_FALL_THROUGH) #undef JSON_HEDLEY_FALL_THROUGH #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) #elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) #elif defined(__fallthrough) /* SAL */ #define JSON_HEDLEY_FALL_THROUGH __fallthrough #else #define JSON_HEDLEY_FALL_THROUGH #endif #if defined(JSON_HEDLEY_RETURNS_NON_NULL) #undef JSON_HEDLEY_RETURNS_NON_NULL #endif #if \ JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) #elif defined(_Ret_notnull_) /* SAL */ #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ #else #define JSON_HEDLEY_RETURNS_NON_NULL #endif #if defined(JSON_HEDLEY_ARRAY_PARAM) #undef JSON_HEDLEY_ARRAY_PARAM #endif #if \ defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ !defined(__STDC_NO_VLA__) && \ !defined(__cplusplus) && \ !defined(JSON_HEDLEY_PGI_VERSION) && \ !defined(JSON_HEDLEY_TINYC_VERSION) #define JSON_HEDLEY_ARRAY_PARAM(name) (name) #else #define JSON_HEDLEY_ARRAY_PARAM(name) #endif #if defined(JSON_HEDLEY_IS_CONSTANT) #undef JSON_HEDLEY_IS_CONSTANT #endif #if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) #undef JSON_HEDLEY_REQUIRE_CONSTEXPR #endif /* JSON_HEDLEY_IS_CONSTEXPR_ is for HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ #if defined(JSON_HEDLEY_IS_CONSTEXPR_) #undef JSON_HEDLEY_IS_CONSTEXPR_ #endif #if \ JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) #endif #if !defined(__cplusplus) # if \ JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) #if defined(__INTPTR_TYPE__) #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) #else #include #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) #endif # elif \ ( \ defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ !defined(JSON_HEDLEY_PGI_VERSION) && \ !defined(JSON_HEDLEY_IAR_VERSION)) || \ JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) || \ JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) #if defined(__INTPTR_TYPE__) #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) #else #include #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) #endif # elif \ defined(JSON_HEDLEY_GCC_VERSION) || \ defined(JSON_HEDLEY_INTEL_VERSION) || \ defined(JSON_HEDLEY_TINYC_VERSION) || \ defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ defined(__clang__) # define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ sizeof(void) != \ sizeof(*( \ 1 ? \ ((void*) ((expr) * 0L) ) : \ ((struct { char v[sizeof(void) * 2]; } *) 1) \ ) \ ) \ ) # endif #endif #if defined(JSON_HEDLEY_IS_CONSTEXPR_) #if !defined(JSON_HEDLEY_IS_CONSTANT) #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) #endif #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) #else #if !defined(JSON_HEDLEY_IS_CONSTANT) #define JSON_HEDLEY_IS_CONSTANT(expr) (0) #endif #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) #endif #if defined(JSON_HEDLEY_BEGIN_C_DECLS) #undef JSON_HEDLEY_BEGIN_C_DECLS #endif #if defined(JSON_HEDLEY_END_C_DECLS) #undef JSON_HEDLEY_END_C_DECLS #endif #if defined(JSON_HEDLEY_C_DECL) #undef JSON_HEDLEY_C_DECL #endif #if defined(__cplusplus) #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { #define JSON_HEDLEY_END_C_DECLS } #define JSON_HEDLEY_C_DECL extern "C" #else #define JSON_HEDLEY_BEGIN_C_DECLS #define JSON_HEDLEY_END_C_DECLS #define JSON_HEDLEY_C_DECL #endif #if defined(JSON_HEDLEY_STATIC_ASSERT) #undef JSON_HEDLEY_STATIC_ASSERT #endif #if \ !defined(__cplusplus) && ( \ (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ JSON_HEDLEY_HAS_FEATURE(c_static_assert) || \ JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ defined(_Static_assert) \ ) # define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) #elif \ (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) # define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) #else # define JSON_HEDLEY_STATIC_ASSERT(expr, message) #endif #if defined(JSON_HEDLEY_NULL) #undef JSON_HEDLEY_NULL #endif #if defined(__cplusplus) #if __cplusplus >= 201103L #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) #elif defined(NULL) #define JSON_HEDLEY_NULL NULL #else #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) #endif #elif defined(NULL) #define JSON_HEDLEY_NULL NULL #else #define JSON_HEDLEY_NULL ((void*) 0) #endif #if defined(JSON_HEDLEY_MESSAGE) #undef JSON_HEDLEY_MESSAGE #endif #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") # define JSON_HEDLEY_MESSAGE(msg) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ JSON_HEDLEY_PRAGMA(message msg) \ JSON_HEDLEY_DIAGNOSTIC_POP #elif \ JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) #elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) #elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) #elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) # define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) #else # define JSON_HEDLEY_MESSAGE(msg) #endif #if defined(JSON_HEDLEY_WARNING) #undef JSON_HEDLEY_WARNING #endif #if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") # define JSON_HEDLEY_WARNING(msg) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ JSON_HEDLEY_PRAGMA(clang warning msg) \ JSON_HEDLEY_DIAGNOSTIC_POP #elif \ JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) #else # define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) #endif #if defined(JSON_HEDLEY_REQUIRE) #undef JSON_HEDLEY_REQUIRE #endif #if defined(JSON_HEDLEY_REQUIRE_MSG) #undef JSON_HEDLEY_REQUIRE_MSG #endif #if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) # if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") # define JSON_HEDLEY_REQUIRE(expr) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ __attribute__((diagnose_if(!(expr), #expr, "error"))) \ JSON_HEDLEY_DIAGNOSTIC_POP # define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ __attribute__((diagnose_if(!(expr), msg, "error"))) \ JSON_HEDLEY_DIAGNOSTIC_POP # else # define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) # define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) # endif #else # define JSON_HEDLEY_REQUIRE(expr) # define JSON_HEDLEY_REQUIRE_MSG(expr,msg) #endif #if defined(JSON_HEDLEY_FLAGS) #undef JSON_HEDLEY_FLAGS #endif #if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) #endif #if defined(JSON_HEDLEY_FLAGS_CAST) #undef JSON_HEDLEY_FLAGS_CAST #endif #if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) # define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ JSON_HEDLEY_DIAGNOSTIC_PUSH \ _Pragma("warning(disable:188)") \ ((T) (expr)); \ JSON_HEDLEY_DIAGNOSTIC_POP \ })) #else # define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) #endif #if defined(JSON_HEDLEY_EMPTY_BASES) #undef JSON_HEDLEY_EMPTY_BASES #endif #if JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0) #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) #else #define JSON_HEDLEY_EMPTY_BASES #endif /* Remaining macros are deprecated. */ #if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK #endif #if defined(__clang__) #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) #else #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) #endif #if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE #endif #define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) #if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE #endif #define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) #if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) #undef JSON_HEDLEY_CLANG_HAS_BUILTIN #endif #define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) #if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) #undef JSON_HEDLEY_CLANG_HAS_FEATURE #endif #define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) #if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) #undef JSON_HEDLEY_CLANG_HAS_EXTENSION #endif #define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) #if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE #endif #define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) #if defined(JSON_HEDLEY_CLANG_HAS_WARNING) #undef JSON_HEDLEY_CLANG_HAS_WARNING #endif #define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) #endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ // This file contains all internal macro definitions // You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them // exclude unsupported compilers #if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) #if defined(__clang__) #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" #endif #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" #endif #endif #endif // C++ language standard detection #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) #define JSON_HAS_CPP_20 #define JSON_HAS_CPP_17 #define JSON_HAS_CPP_14 #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 #define JSON_HAS_CPP_17 #define JSON_HAS_CPP_14 #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) #define JSON_HAS_CPP_14 #endif // disable float-equal warnings on GCC/clang #if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wfloat-equal" #endif // disable documentation warnings on clang #if defined(__clang__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdocumentation" #endif // allow to disable exceptions #if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) #define JSON_THROW(exception) throw exception #define JSON_TRY try #define JSON_CATCH(exception) catch(exception) #define JSON_INTERNAL_CATCH(exception) catch(exception) #else #include #define JSON_THROW(exception) std::abort() #define JSON_TRY if(true) #define JSON_CATCH(exception) if(false) #define JSON_INTERNAL_CATCH(exception) if(false) #endif // override exception macros #if defined(JSON_THROW_USER) #undef JSON_THROW #define JSON_THROW JSON_THROW_USER #endif #if defined(JSON_TRY_USER) #undef JSON_TRY #define JSON_TRY JSON_TRY_USER #endif #if defined(JSON_CATCH_USER) #undef JSON_CATCH #define JSON_CATCH JSON_CATCH_USER #undef JSON_INTERNAL_CATCH #define JSON_INTERNAL_CATCH JSON_CATCH_USER #endif #if defined(JSON_INTERNAL_CATCH_USER) #undef JSON_INTERNAL_CATCH #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER #endif // allow to override assert #if !defined(JSON_ASSERT) #include // assert #define JSON_ASSERT(x) assert(x) #endif /*! @brief macro to briefly define a mapping between an enum and JSON @def NLOHMANN_JSON_SERIALIZE_ENUM @since version 3.4.0 */ #define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ template \ inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ { \ static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ static const std::pair m[] = __VA_ARGS__; \ auto it = std::find_if(std::begin(m), std::end(m), \ [e](const std::pair& ej_pair) -> bool \ { \ return ej_pair.first == e; \ }); \ j = ((it != std::end(m)) ? it : std::begin(m))->second; \ } \ template \ inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ { \ static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ static const std::pair m[] = __VA_ARGS__; \ auto it = std::find_if(std::begin(m), std::end(m), \ [&j](const std::pair& ej_pair) -> bool \ { \ return ej_pair.second == j; \ }); \ e = ((it != std::end(m)) ? it : std::begin(m))->first; \ } // Ugly macros to avoid uglier copy-paste when specializing basic_json. They // may be removed in the future once the class is split. #define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ template class ObjectType, \ template class ArrayType, \ class StringType, class BooleanType, class NumberIntegerType, \ class NumberUnsignedType, class NumberFloatType, \ template class AllocatorType, \ template class JSONSerializer, \ class BinaryType> #define NLOHMANN_BASIC_JSON_TPL \ basic_json // Macros to simplify conversion from/to types #define NLOHMANN_JSON_EXPAND( x ) x #define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME #define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ NLOHMANN_JSON_PASTE64, \ NLOHMANN_JSON_PASTE63, \ NLOHMANN_JSON_PASTE62, \ NLOHMANN_JSON_PASTE61, \ NLOHMANN_JSON_PASTE60, \ NLOHMANN_JSON_PASTE59, \ NLOHMANN_JSON_PASTE58, \ NLOHMANN_JSON_PASTE57, \ NLOHMANN_JSON_PASTE56, \ NLOHMANN_JSON_PASTE55, \ NLOHMANN_JSON_PASTE54, \ NLOHMANN_JSON_PASTE53, \ NLOHMANN_JSON_PASTE52, \ NLOHMANN_JSON_PASTE51, \ NLOHMANN_JSON_PASTE50, \ NLOHMANN_JSON_PASTE49, \ NLOHMANN_JSON_PASTE48, \ NLOHMANN_JSON_PASTE47, \ NLOHMANN_JSON_PASTE46, \ NLOHMANN_JSON_PASTE45, \ NLOHMANN_JSON_PASTE44, \ NLOHMANN_JSON_PASTE43, \ NLOHMANN_JSON_PASTE42, \ NLOHMANN_JSON_PASTE41, \ NLOHMANN_JSON_PASTE40, \ NLOHMANN_JSON_PASTE39, \ NLOHMANN_JSON_PASTE38, \ NLOHMANN_JSON_PASTE37, \ NLOHMANN_JSON_PASTE36, \ NLOHMANN_JSON_PASTE35, \ NLOHMANN_JSON_PASTE34, \ NLOHMANN_JSON_PASTE33, \ NLOHMANN_JSON_PASTE32, \ NLOHMANN_JSON_PASTE31, \ NLOHMANN_JSON_PASTE30, \ NLOHMANN_JSON_PASTE29, \ NLOHMANN_JSON_PASTE28, \ NLOHMANN_JSON_PASTE27, \ NLOHMANN_JSON_PASTE26, \ NLOHMANN_JSON_PASTE25, \ NLOHMANN_JSON_PASTE24, \ NLOHMANN_JSON_PASTE23, \ NLOHMANN_JSON_PASTE22, \ NLOHMANN_JSON_PASTE21, \ NLOHMANN_JSON_PASTE20, \ NLOHMANN_JSON_PASTE19, \ NLOHMANN_JSON_PASTE18, \ NLOHMANN_JSON_PASTE17, \ NLOHMANN_JSON_PASTE16, \ NLOHMANN_JSON_PASTE15, \ NLOHMANN_JSON_PASTE14, \ NLOHMANN_JSON_PASTE13, \ NLOHMANN_JSON_PASTE12, \ NLOHMANN_JSON_PASTE11, \ NLOHMANN_JSON_PASTE10, \ NLOHMANN_JSON_PASTE9, \ NLOHMANN_JSON_PASTE8, \ NLOHMANN_JSON_PASTE7, \ NLOHMANN_JSON_PASTE6, \ NLOHMANN_JSON_PASTE5, \ NLOHMANN_JSON_PASTE4, \ NLOHMANN_JSON_PASTE3, \ NLOHMANN_JSON_PASTE2, \ NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) #define NLOHMANN_JSON_PASTE2(func, v1) func(v1) #define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) #define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) #define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) #define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) #define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) #define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) #define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) #define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) #define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) #define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) #define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) #define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) #define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) #define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) #define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) #define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) #define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) #define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) #define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) #define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) #define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) #define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) #define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) #define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) #define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) #define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) #define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) #define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) #define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) #define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) #define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) #define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) #define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) #define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) #define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) #define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) #define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) #define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) #define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) #define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) #define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) #define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) #define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) #define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) #define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) #define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) #define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) #define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) #define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) #define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) #define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) #define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) #define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) #define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) #define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) #define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) #define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) #define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) #define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) #define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) #define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) #define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) #define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; #define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); /*! @brief macro @def NLOHMANN_DEFINE_TYPE_INTRUSIVE @since version 3.9.0 */ #define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } /*! @brief macro @def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE @since version 3.9.0 */ #define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } #ifndef JSON_USE_IMPLICIT_CONVERSIONS #define JSON_USE_IMPLICIT_CONVERSIONS 1 #endif #if JSON_USE_IMPLICIT_CONVERSIONS #define JSON_EXPLICIT #else #define JSON_EXPLICIT explicit #endif namespace nlohmann { namespace detail { //////////////// // exceptions // //////////////// /*! @brief general exception of the @ref basic_json class This class is an extension of `std::exception` objects with a member @a id for exception ids. It is used as the base class for all exceptions thrown by the @ref basic_json class. This class can hence be used as "wildcard" to catch exceptions. Subclasses: - @ref parse_error for exceptions indicating a parse error - @ref invalid_iterator for exceptions indicating errors with iterators - @ref type_error for exceptions indicating executing a member function with a wrong type - @ref out_of_range for exceptions indicating access out of the defined range - @ref other_error for exceptions indicating other library errors @internal @note To have nothrow-copy-constructible exceptions, we internally use `std::runtime_error` which can cope with arbitrary-length error messages. Intermediate strings are built with static functions and then passed to the actual constructor. @endinternal @liveexample{The following code shows how arbitrary library exceptions can be caught.,exception} @since version 3.0.0 */ class exception : public std::exception { public: /// returns the explanatory string JSON_HEDLEY_RETURNS_NON_NULL const char* what() const noexcept override { return m.what(); } /// the id of the exception const int id; protected: JSON_HEDLEY_NON_NULL(3) exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} static std::string name(const std::string& ename, int id_) { return "[json.exception." + ename + "." + std::to_string(id_) + "] "; } private: /// an exception object as storage for error messages std::runtime_error m; }; /*! @brief exception indicating a parse error This exception is thrown by the library when a parse error occurs. Parse errors can occur during the deserialization of JSON text, CBOR, MessagePack, as well as when using JSON Patch. Member @a byte holds the byte index of the last read character in the input file. Exceptions have ids 1xx. name / id | example message | description ------------------------------ | --------------- | ------------------------- json.exception.parse_error.101 | parse error at 2: unexpected end of input; expected string literal | This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member @a byte indicates the error position. json.exception.parse_error.102 | parse error at 14: missing or wrong low surrogate | JSON uses the `\uxxxx` format to describe Unicode characters. Code points above above 0xFFFF are split into two `\uxxxx` entries ("surrogate pairs"). This error indicates that the surrogate pair is incomplete or contains an invalid code point. json.exception.parse_error.103 | parse error: code points above 0x10FFFF are invalid | Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid. json.exception.parse_error.104 | parse error: JSON patch must be an array of objects | [RFC 6902](https://tools.ietf.org/html/rfc6902) requires a JSON Patch document to be a JSON document that represents an array of objects. json.exception.parse_error.105 | parse error: operation must have string member 'op' | An operation of a JSON Patch document must contain exactly one "op" member, whose value indicates the operation to perform. Its value must be one of "add", "remove", "replace", "move", "copy", or "test"; other values are errors. json.exception.parse_error.106 | parse error: array index '01' must not begin with '0' | An array index in a JSON Pointer ([RFC 6901](https://tools.ietf.org/html/rfc6901)) may be `0` or any number without a leading `0`. json.exception.parse_error.107 | parse error: JSON pointer must be empty or begin with '/' - was: 'foo' | A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a `/` character. json.exception.parse_error.108 | parse error: escape character '~' must be followed with '0' or '1' | In a JSON Pointer, only `~0` and `~1` are valid escape sequences. json.exception.parse_error.109 | parse error: array index 'one' is not a number | A JSON Pointer array index must be a number. json.exception.parse_error.110 | parse error at 1: cannot read 2 bytes from vector | When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read. json.exception.parse_error.112 | parse error at 1: error reading CBOR; last byte: 0xF8 | Not all types of CBOR or MessagePack are supported. This exception occurs if an unsupported byte was read. json.exception.parse_error.113 | parse error at 2: expected a CBOR string; last byte: 0x98 | While parsing a map key, a value that is not a string has been read. json.exception.parse_error.114 | parse error: Unsupported BSON record type 0x0F | The parsing of the corresponding BSON record type is not implemented (yet). json.exception.parse_error.115 | parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A | A UBJSON high-precision number could not be parsed. @note For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack). @liveexample{The following code shows how a `parse_error` exception can be caught.,parse_error} @sa - @ref exception for the base class of the library exceptions @sa - @ref invalid_iterator for exceptions indicating errors with iterators @sa - @ref type_error for exceptions indicating executing a member function with a wrong type @sa - @ref out_of_range for exceptions indicating access out of the defined range @sa - @ref other_error for exceptions indicating other library errors @since version 3.0.0 */ class parse_error : public exception { public: /*! @brief create a parse error exception @param[in] id_ the id of the exception @param[in] pos the position where the error occurred (or with chars_read_total=0 if the position cannot be determined) @param[in] what_arg the explanatory string @return parse_error object */ static parse_error create(int id_, const position_t& pos, const std::string& what_arg) { std::string w = exception::name("parse_error", id_) + "parse error" + position_string(pos) + ": " + what_arg; return parse_error(id_, pos.chars_read_total, w.c_str()); } static parse_error create(int id_, std::size_t byte_, const std::string& what_arg) { std::string w = exception::name("parse_error", id_) + "parse error" + (byte_ != 0 ? (" at byte " + std::to_string(byte_)) : "") + ": " + what_arg; return parse_error(id_, byte_, w.c_str()); } /*! @brief byte index of the parse error The byte index of the last read character in the input file. @note For an input with n bytes, 1 is the index of the first character and n+1 is the index of the terminating null byte or the end of file. This also holds true when reading a byte vector (CBOR or MessagePack). */ const std::size_t byte; private: parse_error(int id_, std::size_t byte_, const char* what_arg) : exception(id_, what_arg), byte(byte_) {} static std::string position_string(const position_t& pos) { return " at line " + std::to_string(pos.lines_read + 1) + ", column " + std::to_string(pos.chars_read_current_line); } }; /*! @brief exception indicating errors with iterators This exception is thrown if iterators passed to a library function do not match the expected semantics. Exceptions have ids 2xx. name / id | example message | description ----------------------------------- | --------------- | ------------------------- json.exception.invalid_iterator.201 | iterators are not compatible | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. json.exception.invalid_iterator.202 | iterator does not fit current value | In an erase or insert function, the passed iterator @a pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion. json.exception.invalid_iterator.203 | iterators do not fit current value | Either iterator passed to function @ref erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from. json.exception.invalid_iterator.204 | iterators out of range | When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (@ref begin(), @ref end()), because this is the only way the single stored value is expressed. All other ranges are invalid. json.exception.invalid_iterator.205 | iterator out of range | When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the @ref begin() iterator, because it is the only way to address the stored value. All other iterators are invalid. json.exception.invalid_iterator.206 | cannot construct with iterators from null | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range. json.exception.invalid_iterator.207 | cannot use key() for non-object iterators | The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key. json.exception.invalid_iterator.208 | cannot use operator[] for object iterators | The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. json.exception.invalid_iterator.209 | cannot use offsets with object iterators | The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. json.exception.invalid_iterator.210 | iterators do not fit | The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. json.exception.invalid_iterator.211 | passed iterators may not belong to container | The iterator range passed to the insert function must not be a subrange of the container to insert to. json.exception.invalid_iterator.212 | cannot compare iterators of different containers | When two iterators are compared, they must belong to the same container. json.exception.invalid_iterator.213 | cannot compare order of object iterators | The order of object iterators cannot be compared, because JSON objects are unordered. json.exception.invalid_iterator.214 | cannot get value | Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to @ref begin(). @liveexample{The following code shows how an `invalid_iterator` exception can be caught.,invalid_iterator} @sa - @ref exception for the base class of the library exceptions @sa - @ref parse_error for exceptions indicating a parse error @sa - @ref type_error for exceptions indicating executing a member function with a wrong type @sa - @ref out_of_range for exceptions indicating access out of the defined range @sa - @ref other_error for exceptions indicating other library errors @since version 3.0.0 */ class invalid_iterator : public exception { public: static invalid_iterator create(int id_, const std::string& what_arg) { std::string w = exception::name("invalid_iterator", id_) + what_arg; return invalid_iterator(id_, w.c_str()); } private: JSON_HEDLEY_NON_NULL(3) invalid_iterator(int id_, const char* what_arg) : exception(id_, what_arg) {} }; /*! @brief exception indicating executing a member function with a wrong type This exception is thrown in case of a type error; that is, a library function is executed on a JSON value whose type does not match the expected semantics. Exceptions have ids 3xx. name / id | example message | description ----------------------------- | --------------- | ------------------------- json.exception.type_error.301 | cannot create object from initializer list | To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead. json.exception.type_error.302 | type must be object, but is array | During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types. json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t &. json.exception.type_error.304 | cannot use at() with string | The @ref at() member functions can only be executed for certain JSON types. json.exception.type_error.305 | cannot use operator[] with string | The @ref operator[] member functions can only be executed for certain JSON types. json.exception.type_error.306 | cannot use value() with string | The @ref value() member functions can only be executed for certain JSON types. json.exception.type_error.307 | cannot use erase() with string | The @ref erase() member functions can only be executed for certain JSON types. json.exception.type_error.308 | cannot use push_back() with string | The @ref push_back() and @ref operator+= member functions can only be executed for certain JSON types. json.exception.type_error.309 | cannot use insert() with | The @ref insert() member functions can only be executed for certain JSON types. json.exception.type_error.310 | cannot use swap() with number | The @ref swap() member functions can only be executed for certain JSON types. json.exception.type_error.311 | cannot use emplace_back() with string | The @ref emplace_back() member function can only be executed for certain JSON types. json.exception.type_error.312 | cannot use update() with string | The @ref update() member functions can only be executed for certain JSON types. json.exception.type_error.313 | invalid value to unflatten | The @ref unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well defined. json.exception.type_error.314 | only objects can be unflattened | The @ref unflatten function only works for an object whose keys are JSON Pointers. json.exception.type_error.315 | values in object must be primitive | The @ref unflatten function only works for an object whose keys are JSON Pointers and whose values are primitive. json.exception.type_error.316 | invalid UTF-8 byte at index 10: 0x7E | The @ref dump function only works with UTF-8 encoded strings; that is, if you assign a `std::string` to a JSON value, make sure it is UTF-8 encoded. | json.exception.type_error.317 | JSON value cannot be serialized to requested format | The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw `true` or `null` JSON object cannot be serialized to BSON) | @liveexample{The following code shows how a `type_error` exception can be caught.,type_error} @sa - @ref exception for the base class of the library exceptions @sa - @ref parse_error for exceptions indicating a parse error @sa - @ref invalid_iterator for exceptions indicating errors with iterators @sa - @ref out_of_range for exceptions indicating access out of the defined range @sa - @ref other_error for exceptions indicating other library errors @since version 3.0.0 */ class type_error : public exception { public: static type_error create(int id_, const std::string& what_arg) { std::string w = exception::name("type_error", id_) + what_arg; return type_error(id_, w.c_str()); } private: JSON_HEDLEY_NON_NULL(3) type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} }; /*! @brief exception indicating access out of the defined range This exception is thrown in case a library function is called on an input parameter that exceeds the expected range, for instance in case of array indices or nonexisting object keys. Exceptions have ids 4xx. name / id | example message | description ------------------------------- | --------------- | ------------------------- json.exception.out_of_range.401 | array index 3 is out of range | The provided array index @a i is larger than @a size-1. json.exception.out_of_range.402 | array index '-' (3) is out of range | The special array index `-` in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it. json.exception.out_of_range.403 | key 'foo' not found | The provided key was not found in the JSON object. json.exception.out_of_range.404 | unresolved reference token 'foo' | A reference token in a JSON Pointer could not be resolved. json.exception.out_of_range.405 | JSON pointer has no parent | The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value. json.exception.out_of_range.406 | number overflow parsing '10E1000' | A parsed number could not be stored as without changing it to NaN or INF. json.exception.out_of_range.407 | number overflow serializing '9223372036854775808' | UBJSON and BSON only support integer numbers up to 9223372036854775807. (until version 3.8.0) | json.exception.out_of_range.408 | excessive array size: 8658170730974374167 | The size (following `#`) of an UBJSON array or object exceeds the maximal capacity. | json.exception.out_of_range.409 | BSON key cannot contain code point U+0000 (at byte 2) | Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string | @liveexample{The following code shows how an `out_of_range` exception can be caught.,out_of_range} @sa - @ref exception for the base class of the library exceptions @sa - @ref parse_error for exceptions indicating a parse error @sa - @ref invalid_iterator for exceptions indicating errors with iterators @sa - @ref type_error for exceptions indicating executing a member function with a wrong type @sa - @ref other_error for exceptions indicating other library errors @since version 3.0.0 */ class out_of_range : public exception { public: static out_of_range create(int id_, const std::string& what_arg) { std::string w = exception::name("out_of_range", id_) + what_arg; return out_of_range(id_, w.c_str()); } private: JSON_HEDLEY_NON_NULL(3) out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} }; /*! @brief exception indicating other library errors This exception is thrown in case of errors that cannot be classified with the other exception types. Exceptions have ids 5xx. name / id | example message | description ------------------------------ | --------------- | ------------------------- json.exception.other_error.501 | unsuccessful: {"op":"test","path":"/baz", "value":"bar"} | A JSON Patch operation 'test' failed. The unsuccessful operation is also printed. @sa - @ref exception for the base class of the library exceptions @sa - @ref parse_error for exceptions indicating a parse error @sa - @ref invalid_iterator for exceptions indicating errors with iterators @sa - @ref type_error for exceptions indicating executing a member function with a wrong type @sa - @ref out_of_range for exceptions indicating access out of the defined range @liveexample{The following code shows how an `other_error` exception can be caught.,other_error} @since version 3.0.0 */ class other_error : public exception { public: static other_error create(int id_, const std::string& what_arg) { std::string w = exception::name("other_error", id_) + what_arg; return other_error(id_, w.c_str()); } private: JSON_HEDLEY_NON_NULL(3) other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} }; } // namespace detail } // namespace nlohmann // #include // #include #include // size_t #include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type namespace nlohmann { namespace detail { // alias templates to reduce boilerplate template using enable_if_t = typename std::enable_if::type; template using uncvref_t = typename std::remove_cv::type>::type; // implementation of C++14 index_sequence and affiliates // source: https://stackoverflow.com/a/32223343 template struct index_sequence { using type = index_sequence; using value_type = std::size_t; static constexpr std::size_t size() noexcept { return sizeof...(Ints); } }; template struct merge_and_renumber; template struct merge_and_renumber, index_sequence> : index_sequence < I1..., (sizeof...(I1) + I2)... > {}; template struct make_index_sequence : merge_and_renumber < typename make_index_sequence < N / 2 >::type, typename make_index_sequence < N - N / 2 >::type > {}; template<> struct make_index_sequence<0> : index_sequence<> {}; template<> struct make_index_sequence<1> : index_sequence<0> {}; template using index_sequence_for = make_index_sequence; // dispatch utility (taken from ranges-v3) template struct priority_tag : priority_tag < N - 1 > {}; template<> struct priority_tag<0> {}; // taken from ranges-v3 template struct static_const { static constexpr T value{}; }; template constexpr T static_const::value; } // namespace detail } // namespace nlohmann // #include #include // numeric_limits #include // false_type, is_constructible, is_integral, is_same, true_type #include // declval // #include #include // random_access_iterator_tag // #include namespace nlohmann { namespace detail { template struct make_void { using type = void; }; template using void_t = typename make_void::type; } // namespace detail } // namespace nlohmann // #include namespace nlohmann { namespace detail { template struct iterator_types {}; template struct iterator_types < It, void_t> { using difference_type = typename It::difference_type; using value_type = typename It::value_type; using pointer = typename It::pointer; using reference = typename It::reference; using iterator_category = typename It::iterator_category; }; // This is required as some compilers implement std::iterator_traits in a way that // doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. template struct iterator_traits { }; template struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> : iterator_types { }; template struct iterator_traits::value>> { using iterator_category = std::random_access_iterator_tag; using value_type = T; using difference_type = ptrdiff_t; using pointer = T*; using reference = T&; }; } // namespace detail } // namespace nlohmann // #include // #include // #include #include // #include // https://en.cppreference.com/w/cpp/experimental/is_detected namespace nlohmann { namespace detail { struct nonesuch { nonesuch() = delete; ~nonesuch() = delete; nonesuch(nonesuch const&) = delete; nonesuch(nonesuch const&&) = delete; void operator=(nonesuch const&) = delete; void operator=(nonesuch&&) = delete; }; template class Op, class... Args> struct detector { using value_t = std::false_type; using type = Default; }; template class Op, class... Args> struct detector>, Op, Args...> { using value_t = std::true_type; using type = Op; }; template class Op, class... Args> using is_detected = typename detector::value_t; template class Op, class... Args> using detected_t = typename detector::type; template class Op, class... Args> using detected_or = detector; template class Op, class... Args> using detected_or_t = typename detected_or::type; template class Op, class... Args> using is_detected_exact = std::is_same>; template class Op, class... Args> using is_detected_convertible = std::is_convertible, To>; } // namespace detail } // namespace nlohmann // #include #ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ #include // int64_t, uint64_t #include // map #include // allocator #include // string #include // vector /*! @brief namespace for Niels Lohmann @see https://github.com/nlohmann @since version 1.0.0 */ namespace nlohmann { /*! @brief default JSONSerializer template argument This serializer ignores the template arguments and uses ADL ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) for serialization. */ template struct adl_serializer; template class ObjectType = std::map, template class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template class AllocatorType = std::allocator, template class JSONSerializer = adl_serializer, class BinaryType = std::vector> class basic_json; /*! @brief JSON Pointer A JSON pointer defines a string syntax for identifying a specific value within a JSON document. It can be used with functions `at` and `operator[]`. Furthermore, JSON pointers are the base for JSON patches. @sa [RFC 6901](https://tools.ietf.org/html/rfc6901) @since version 2.0.0 */ template class json_pointer; /*! @brief default JSON class This type is the default specialization of the @ref basic_json class which uses the standard template types. @since version 1.0.0 */ using json = basic_json<>; template struct ordered_map; /*! @brief ordered JSON class This type preserves the insertion order of object keys. @since version 3.9.0 */ using ordered_json = basic_json; } // namespace nlohmann #endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ namespace nlohmann { /*! @brief detail namespace with internal helper functions This namespace collects functions that should not be exposed, implementations of some @ref basic_json methods, and meta-programming helpers. @since version 2.1.0 */ namespace detail { ///////////// // helpers // ///////////// // Note to maintainers: // // Every trait in this file expects a non CV-qualified type. // The only exceptions are in the 'aliases for detected' section // (i.e. those of the form: decltype(T::member_function(std::declval()))) // // In this case, T has to be properly CV-qualified to constraint the function arguments // (e.g. to_json(BasicJsonType&, const T&)) template struct is_basic_json : std::false_type {}; NLOHMANN_BASIC_JSON_TPL_DECLARATION struct is_basic_json : std::true_type {}; ////////////////////// // json_ref helpers // ////////////////////// template class json_ref; template struct is_json_ref : std::false_type {}; template struct is_json_ref> : std::true_type {}; ////////////////////////// // aliases for detected // ////////////////////////// template using mapped_type_t = typename T::mapped_type; template using key_type_t = typename T::key_type; template using value_type_t = typename T::value_type; template using difference_type_t = typename T::difference_type; template using pointer_t = typename T::pointer; template using reference_t = typename T::reference; template using iterator_category_t = typename T::iterator_category; template using iterator_t = typename T::iterator; template using to_json_function = decltype(T::to_json(std::declval()...)); template using from_json_function = decltype(T::from_json(std::declval()...)); template using get_template_function = decltype(std::declval().template get()); // trait checking if JSONSerializer::from_json(json const&, udt&) exists template struct has_from_json : std::false_type {}; // trait checking if j.get is valid // use this trait instead of std::is_constructible or std::is_convertible, // both rely on, or make use of implicit conversions, and thus fail when T // has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) template struct is_getable { static constexpr bool value = is_detected::value; }; template struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { using serializer = typename BasicJsonType::template json_serializer; static constexpr bool value = is_detected_exact::value; }; // This trait checks if JSONSerializer::from_json(json const&) exists // this overload is used for non-default-constructible user-defined-types template struct has_non_default_from_json : std::false_type {}; template struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { using serializer = typename BasicJsonType::template json_serializer; static constexpr bool value = is_detected_exact::value; }; // This trait checks if BasicJsonType::json_serializer::to_json exists // Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. template struct has_to_json : std::false_type {}; template struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> { using serializer = typename BasicJsonType::template json_serializer; static constexpr bool value = is_detected_exact::value; }; /////////////////// // is_ functions // /////////////////// template struct is_iterator_traits : std::false_type {}; template struct is_iterator_traits> { private: using traits = iterator_traits; public: static constexpr auto value = is_detected::value && is_detected::value && is_detected::value && is_detected::value && is_detected::value; }; // source: https://stackoverflow.com/a/37193089/4116453 template struct is_complete_type : std::false_type {}; template struct is_complete_type : std::true_type {}; template struct is_compatible_object_type_impl : std::false_type {}; template struct is_compatible_object_type_impl < BasicJsonType, CompatibleObjectType, enable_if_t < is_detected::value&& is_detected::value >> { using object_t = typename BasicJsonType::object_t; // macOS's is_constructible does not play well with nonesuch... static constexpr bool value = std::is_constructible::value && std::is_constructible::value; }; template struct is_compatible_object_type : is_compatible_object_type_impl {}; template struct is_constructible_object_type_impl : std::false_type {}; template struct is_constructible_object_type_impl < BasicJsonType, ConstructibleObjectType, enable_if_t < is_detected::value&& is_detected::value >> { using object_t = typename BasicJsonType::object_t; static constexpr bool value = (std::is_default_constructible::value && (std::is_move_assignable::value || std::is_copy_assignable::value) && (std::is_constructible::value && std::is_same < typename object_t::mapped_type, typename ConstructibleObjectType::mapped_type >::value)) || (has_from_json::value || has_non_default_from_json < BasicJsonType, typename ConstructibleObjectType::mapped_type >::value); }; template struct is_constructible_object_type : is_constructible_object_type_impl {}; template struct is_compatible_string_type_impl : std::false_type {}; template struct is_compatible_string_type_impl < BasicJsonType, CompatibleStringType, enable_if_t::value >> { static constexpr auto value = std::is_constructible::value; }; template struct is_compatible_string_type : is_compatible_string_type_impl {}; template struct is_constructible_string_type_impl : std::false_type {}; template struct is_constructible_string_type_impl < BasicJsonType, ConstructibleStringType, enable_if_t::value >> { static constexpr auto value = std::is_constructible::value; }; template struct is_constructible_string_type : is_constructible_string_type_impl {}; template struct is_compatible_array_type_impl : std::false_type {}; template struct is_compatible_array_type_impl < BasicJsonType, CompatibleArrayType, enable_if_t < is_detected::value&& is_detected::value&& // This is needed because json_reverse_iterator has a ::iterator type... // Therefore it is detected as a CompatibleArrayType. // The real fix would be to have an Iterable concept. !is_iterator_traits < iterator_traits>::value >> { static constexpr bool value = std::is_constructible::value; }; template struct is_compatible_array_type : is_compatible_array_type_impl {}; template struct is_constructible_array_type_impl : std::false_type {}; template struct is_constructible_array_type_impl < BasicJsonType, ConstructibleArrayType, enable_if_t::value >> : std::true_type {}; template struct is_constructible_array_type_impl < BasicJsonType, ConstructibleArrayType, enable_if_t < !std::is_same::value&& std::is_default_constructible::value&& (std::is_move_assignable::value || std::is_copy_assignable::value)&& is_detected::value&& is_detected::value&& is_complete_type < detected_t>::value >> { static constexpr bool value = // This is needed because json_reverse_iterator has a ::iterator type, // furthermore, std::back_insert_iterator (and other iterators) have a // base class `iterator`... Therefore it is detected as a // ConstructibleArrayType. The real fix would be to have an Iterable // concept. !is_iterator_traits>::value && (std::is_same::value || has_from_json::value || has_non_default_from_json < BasicJsonType, typename ConstructibleArrayType::value_type >::value); }; template struct is_constructible_array_type : is_constructible_array_type_impl {}; template struct is_compatible_integer_type_impl : std::false_type {}; template struct is_compatible_integer_type_impl < RealIntegerType, CompatibleNumberIntegerType, enable_if_t < std::is_integral::value&& std::is_integral::value&& !std::is_same::value >> { // is there an assert somewhere on overflows? using RealLimits = std::numeric_limits; using CompatibleLimits = std::numeric_limits; static constexpr auto value = std::is_constructible::value && CompatibleLimits::is_integer && RealLimits::is_signed == CompatibleLimits::is_signed; }; template struct is_compatible_integer_type : is_compatible_integer_type_impl {}; template struct is_compatible_type_impl: std::false_type {}; template struct is_compatible_type_impl < BasicJsonType, CompatibleType, enable_if_t::value >> { static constexpr bool value = has_to_json::value; }; template struct is_compatible_type : is_compatible_type_impl {}; // https://en.cppreference.com/w/cpp/types/conjunction template struct conjunction : std::true_type { }; template struct conjunction : B1 { }; template struct conjunction : std::conditional, B1>::type {}; template struct is_constructible_tuple : std::false_type {}; template struct is_constructible_tuple> : conjunction...> {}; } // namespace detail } // namespace nlohmann // #include #include // array #include // size_t #include // uint8_t #include // string namespace nlohmann { namespace detail { /////////////////////////// // JSON type enumeration // /////////////////////////// /*! @brief the JSON type enumeration This enumeration collects the different JSON types. It is internally used to distinguish the stored values, and the functions @ref basic_json::is_null(), @ref basic_json::is_object(), @ref basic_json::is_array(), @ref basic_json::is_string(), @ref basic_json::is_boolean(), @ref basic_json::is_number() (with @ref basic_json::is_number_integer(), @ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), @ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and @ref basic_json::is_structured() rely on it. @note There are three enumeration entries (number_integer, number_unsigned, and number_float), because the library distinguishes these three types for numbers: @ref basic_json::number_unsigned_t is used for unsigned integers, @ref basic_json::number_integer_t is used for signed integers, and @ref basic_json::number_float_t is used for floating-point numbers or to approximate integers which do not fit in the limits of their respective type. @sa @ref basic_json::basic_json(const value_t value_type) -- create a JSON value with the default value for a given type @since version 1.0.0 */ enum class value_t : std::uint8_t { null, ///< null value object, ///< object (unordered set of name/value pairs) array, ///< array (ordered collection of values) string, ///< string value boolean, ///< boolean value number_integer, ///< number value (signed integer) number_unsigned, ///< number value (unsigned integer) number_float, ///< number value (floating-point) binary, ///< binary array (ordered collection of bytes) discarded ///< discarded by the parser callback function }; /*! @brief comparison operator for JSON types Returns an ordering that is similar to Python: - order: null < boolean < number < object < array < string < binary - furthermore, each type is not smaller than itself - discarded values are not comparable - binary is represented as a b"" string in python and directly comparable to a string; however, making a binary array directly comparable with a string would be surprising behavior in a JSON file. @since version 1.0.0 */ inline bool operator<(const value_t lhs, const value_t rhs) noexcept { static constexpr std::array order = {{ 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, 6 /* binary */ } }; const auto l_index = static_cast(lhs); const auto r_index = static_cast(rhs); return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; } } // namespace detail } // namespace nlohmann namespace nlohmann { namespace detail { template void from_json(const BasicJsonType& j, typename std::nullptr_t& n) { if (JSON_HEDLEY_UNLIKELY(!j.is_null())) { JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()))); } n = nullptr; } // overloads for basic_json template parameters template < typename BasicJsonType, typename ArithmeticType, enable_if_t < std::is_arithmetic::value&& !std::is_same::value, int > = 0 > void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) { switch (static_cast(j)) { case value_t::number_unsigned: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_integer: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_float: { val = static_cast(*j.template get_ptr()); break; } default: JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()))); } } template void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) { if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) { JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()))); } b = *j.template get_ptr(); } template void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) { if (JSON_HEDLEY_UNLIKELY(!j.is_string())) { JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); } s = *j.template get_ptr(); } template < typename BasicJsonType, typename ConstructibleStringType, enable_if_t < is_constructible_string_type::value&& !std::is_same::value, int > = 0 > void from_json(const BasicJsonType& j, ConstructibleStringType& s) { if (JSON_HEDLEY_UNLIKELY(!j.is_string())) { JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); } s = *j.template get_ptr(); } template void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) { get_arithmetic_value(j, val); } template void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) { get_arithmetic_value(j, val); } template void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) { get_arithmetic_value(j, val); } template::value, int> = 0> void from_json(const BasicJsonType& j, EnumType& e) { typename std::underlying_type::type val; get_arithmetic_value(j, val); e = static_cast(val); } // forward_list doesn't have an insert method template::value, int> = 0> void from_json(const BasicJsonType& j, std::forward_list& l) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } l.clear(); std::transform(j.rbegin(), j.rend(), std::front_inserter(l), [](const BasicJsonType & i) { return i.template get(); }); } // valarray doesn't have an insert method template::value, int> = 0> void from_json(const BasicJsonType& j, std::valarray& l) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } l.resize(j.size()); std::transform(j.begin(), j.end(), std::begin(l), [](const BasicJsonType & elem) { return elem.template get(); }); } template auto from_json(const BasicJsonType& j, T (&arr)[N]) -> decltype(j.template get(), void()) { for (std::size_t i = 0; i < N; ++i) { arr[i] = j.at(i).template get(); } } template void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) { arr = *j.template get_ptr(); } template auto from_json_array_impl(const BasicJsonType& j, std::array& arr, priority_tag<2> /*unused*/) -> decltype(j.template get(), void()) { for (std::size_t i = 0; i < N; ++i) { arr[i] = j.at(i).template get(); } } template auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) -> decltype( arr.reserve(std::declval()), j.template get(), void()) { using std::end; ConstructibleArrayType ret; ret.reserve(j.size()); std::transform(j.begin(), j.end(), std::inserter(ret, end(ret)), [](const BasicJsonType & i) { // get() returns *this, this won't call a from_json // method when value_type is BasicJsonType return i.template get(); }); arr = std::move(ret); } template void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<0> /*unused*/) { using std::end; ConstructibleArrayType ret; std::transform( j.begin(), j.end(), std::inserter(ret, end(ret)), [](const BasicJsonType & i) { // get() returns *this, this won't call a from_json // method when value_type is BasicJsonType return i.template get(); }); arr = std::move(ret); } template < typename BasicJsonType, typename ConstructibleArrayType, enable_if_t < is_constructible_array_type::value&& !is_constructible_object_type::value&& !is_constructible_string_type::value&& !std::is_same::value&& !is_basic_json::value, int > = 0 > auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) -> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), j.template get(), void()) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } from_json_array_impl(j, arr, priority_tag<3> {}); } template void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) { if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) { JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()))); } bin = *j.template get_ptr(); } template::value, int> = 0> void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) { if (JSON_HEDLEY_UNLIKELY(!j.is_object())) { JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()))); } ConstructibleObjectType ret; auto inner_object = j.template get_ptr(); using value_type = typename ConstructibleObjectType::value_type; std::transform( inner_object->begin(), inner_object->end(), std::inserter(ret, ret.begin()), [](typename BasicJsonType::object_t::value_type const & p) { return value_type(p.first, p.second.template get()); }); obj = std::move(ret); } // overload for arithmetic types, not chosen for basic_json template arguments // (BooleanType, etc..); note: Is it really necessary to provide explicit // overloads for boolean_t etc. in case of a custom BooleanType which is not // an arithmetic type? template < typename BasicJsonType, typename ArithmeticType, enable_if_t < std::is_arithmetic::value&& !std::is_same::value&& !std::is_same::value&& !std::is_same::value&& !std::is_same::value, int > = 0 > void from_json(const BasicJsonType& j, ArithmeticType& val) { switch (static_cast(j)) { case value_t::number_unsigned: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_integer: { val = static_cast(*j.template get_ptr()); break; } case value_t::number_float: { val = static_cast(*j.template get_ptr()); break; } case value_t::boolean: { val = static_cast(*j.template get_ptr()); break; } default: JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()))); } } template void from_json(const BasicJsonType& j, std::pair& p) { p = {j.at(0).template get(), j.at(1).template get()}; } template void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_sequence /*unused*/) { t = std::make_tuple(j.at(Idx).template get::type>()...); } template void from_json(const BasicJsonType& j, std::tuple& t) { from_json_tuple_impl(j, t, index_sequence_for {}); } template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, typename = enable_if_t < !std::is_constructible < typename BasicJsonType::string_t, Key >::value >> void from_json(const BasicJsonType& j, std::map& m) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } m.clear(); for (const auto& p : j) { if (JSON_HEDLEY_UNLIKELY(!p.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); } m.emplace(p.at(0).template get(), p.at(1).template get()); } } template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, typename = enable_if_t < !std::is_constructible < typename BasicJsonType::string_t, Key >::value >> void from_json(const BasicJsonType& j, std::unordered_map& m) { if (JSON_HEDLEY_UNLIKELY(!j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } m.clear(); for (const auto& p : j) { if (JSON_HEDLEY_UNLIKELY(!p.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); } m.emplace(p.at(0).template get(), p.at(1).template get()); } } struct from_json_fn { template auto operator()(const BasicJsonType& j, T& val) const noexcept(noexcept(from_json(j, val))) -> decltype(from_json(j, val), void()) { return from_json(j, val); } }; } // namespace detail /// namespace to hold default `from_json` function /// to see why this is required: /// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html namespace { constexpr const auto& from_json = detail::static_const::value; } // namespace } // namespace nlohmann // #include #include // copy #include // begin, end #include // string #include // tuple, get #include // is_same, is_constructible, is_floating_point, is_enum, underlying_type #include // move, forward, declval, pair #include // valarray #include // vector // #include #include // size_t #include // input_iterator_tag #include // string, to_string #include // tuple_size, get, tuple_element // #include // #include namespace nlohmann { namespace detail { template void int_to_string( string_type& target, std::size_t value ) { // For ADL using std::to_string; target = to_string(value); } template class iteration_proxy_value { public: using difference_type = std::ptrdiff_t; using value_type = iteration_proxy_value; using pointer = value_type * ; using reference = value_type & ; using iterator_category = std::input_iterator_tag; using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; private: /// the iterator IteratorType anchor; /// an index for arrays (used to create key names) std::size_t array_index = 0; /// last stringified array index mutable std::size_t array_index_last = 0; /// a string representation of the array index mutable string_type array_index_str = "0"; /// an empty string (to return a reference for primitive values) const string_type empty_str = ""; public: explicit iteration_proxy_value(IteratorType it) noexcept : anchor(it) {} /// dereference operator (needed for range-based for) iteration_proxy_value& operator*() { return *this; } /// increment operator (needed for range-based for) iteration_proxy_value& operator++() { ++anchor; ++array_index; return *this; } /// equality operator (needed for InputIterator) bool operator==(const iteration_proxy_value& o) const { return anchor == o.anchor; } /// inequality operator (needed for range-based for) bool operator!=(const iteration_proxy_value& o) const { return anchor != o.anchor; } /// return key of the iterator const string_type& key() const { JSON_ASSERT(anchor.m_object != nullptr); switch (anchor.m_object->type()) { // use integer array index as key case value_t::array: { if (array_index != array_index_last) { int_to_string( array_index_str, array_index ); array_index_last = array_index; } return array_index_str; } // use key from the object case value_t::object: return anchor.key(); // use an empty key for all primitive types default: return empty_str; } } /// return value of the iterator typename IteratorType::reference value() const { return anchor.value(); } }; /// proxy class for the items() function template class iteration_proxy { private: /// the container to iterate typename IteratorType::reference container; public: /// construct iteration proxy from a container explicit iteration_proxy(typename IteratorType::reference cont) noexcept : container(cont) {} /// return iterator begin (needed for range-based for) iteration_proxy_value begin() noexcept { return iteration_proxy_value(container.begin()); } /// return iterator end (needed for range-based for) iteration_proxy_value end() noexcept { return iteration_proxy_value(container.end()); } }; // Structured Bindings Support // For further reference see https://blog.tartanllama.xyz/structured-bindings/ // And see https://github.com/nlohmann/json/pull/1391 template = 0> auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) { return i.key(); } // Structured Bindings Support // For further reference see https://blog.tartanllama.xyz/structured-bindings/ // And see https://github.com/nlohmann/json/pull/1391 template = 0> auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) { return i.value(); } } // namespace detail } // namespace nlohmann // The Addition to the STD Namespace is required to add // Structured Bindings Support to the iteration_proxy_value class // For further reference see https://blog.tartanllama.xyz/structured-bindings/ // And see https://github.com/nlohmann/json/pull/1391 namespace std { #if defined(__clang__) // Fix: https://github.com/nlohmann/json/issues/1401 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wmismatched-tags" #endif template class tuple_size<::nlohmann::detail::iteration_proxy_value> : public std::integral_constant {}; template class tuple_element> { public: using type = decltype( get(std::declval < ::nlohmann::detail::iteration_proxy_value> ())); }; #if defined(__clang__) #pragma clang diagnostic pop #endif } // namespace std // #include // #include // #include namespace nlohmann { namespace detail { ////////////////// // constructors // ////////////////// template struct external_constructor; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept { j.m_type = value_t::boolean; j.m_value = b; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) { j.m_type = value_t::string; j.m_value = s; j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) { j.m_type = value_t::string; j.m_value = std::move(s); j.assert_invariant(); } template < typename BasicJsonType, typename CompatibleStringType, enable_if_t < !std::is_same::value, int > = 0 > static void construct(BasicJsonType& j, const CompatibleStringType& str) { j.m_type = value_t::string; j.m_value.string = j.template create(str); j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) { j.m_type = value_t::binary; typename BasicJsonType::binary_t value{b}; j.m_value = value; j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) { j.m_type = value_t::binary; typename BasicJsonType::binary_t value{std::move(b)}; j.m_value = value; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept { j.m_type = value_t::number_float; j.m_value = val; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept { j.m_type = value_t::number_unsigned; j.m_value = val; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept { j.m_type = value_t::number_integer; j.m_value = val; j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) { j.m_type = value_t::array; j.m_value = arr; j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) { j.m_type = value_t::array; j.m_value = std::move(arr); j.assert_invariant(); } template < typename BasicJsonType, typename CompatibleArrayType, enable_if_t < !std::is_same::value, int > = 0 > static void construct(BasicJsonType& j, const CompatibleArrayType& arr) { using std::begin; using std::end; j.m_type = value_t::array; j.m_value.array = j.template create(begin(arr), end(arr)); j.assert_invariant(); } template static void construct(BasicJsonType& j, const std::vector& arr) { j.m_type = value_t::array; j.m_value = value_t::array; j.m_value.array->reserve(arr.size()); for (const bool x : arr) { j.m_value.array->push_back(x); } j.assert_invariant(); } template::value, int> = 0> static void construct(BasicJsonType& j, const std::valarray& arr) { j.m_type = value_t::array; j.m_value = value_t::array; j.m_value.array->resize(arr.size()); if (arr.size() > 0) { std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); } j.assert_invariant(); } }; template<> struct external_constructor { template static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) { j.m_type = value_t::object; j.m_value = obj; j.assert_invariant(); } template static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) { j.m_type = value_t::object; j.m_value = std::move(obj); j.assert_invariant(); } template < typename BasicJsonType, typename CompatibleObjectType, enable_if_t < !std::is_same::value, int > = 0 > static void construct(BasicJsonType& j, const CompatibleObjectType& obj) { using std::begin; using std::end; j.m_type = value_t::object; j.m_value.object = j.template create(begin(obj), end(obj)); j.assert_invariant(); } }; ///////////// // to_json // ///////////// template::value, int> = 0> void to_json(BasicJsonType& j, T b) noexcept { external_constructor::construct(j, b); } template::value, int> = 0> void to_json(BasicJsonType& j, const CompatibleString& s) { external_constructor::construct(j, s); } template void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) { external_constructor::construct(j, std::move(s)); } template::value, int> = 0> void to_json(BasicJsonType& j, FloatType val) noexcept { external_constructor::construct(j, static_cast(val)); } template::value, int> = 0> void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept { external_constructor::construct(j, static_cast(val)); } template::value, int> = 0> void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept { external_constructor::construct(j, static_cast(val)); } template::value, int> = 0> void to_json(BasicJsonType& j, EnumType e) noexcept { using underlying_type = typename std::underlying_type::type; external_constructor::construct(j, static_cast(e)); } template void to_json(BasicJsonType& j, const std::vector& e) { external_constructor::construct(j, e); } template < typename BasicJsonType, typename CompatibleArrayType, enable_if_t < is_compatible_array_type::value&& !is_compatible_object_type::value&& !is_compatible_string_type::value&& !std::is_same::value&& !is_basic_json::value, int > = 0 > void to_json(BasicJsonType& j, const CompatibleArrayType& arr) { external_constructor::construct(j, arr); } template void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) { external_constructor::construct(j, bin); } template::value, int> = 0> void to_json(BasicJsonType& j, const std::valarray& arr) { external_constructor::construct(j, std::move(arr)); } template void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) { external_constructor::construct(j, std::move(arr)); } template < typename BasicJsonType, typename CompatibleObjectType, enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > void to_json(BasicJsonType& j, const CompatibleObjectType& obj) { external_constructor::construct(j, obj); } template void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) { external_constructor::construct(j, std::move(obj)); } template < typename BasicJsonType, typename T, std::size_t N, enable_if_t < !std::is_constructible::value, int > = 0 > void to_json(BasicJsonType& j, const T(&arr)[N]) { external_constructor::construct(j, arr); } template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > void to_json(BasicJsonType& j, const std::pair& p) { j = { p.first, p.second }; } // for https://github.com/nlohmann/json/pull/1134 template>::value, int> = 0> void to_json(BasicJsonType& j, const T& b) { j = { {b.key(), b.value()} }; } template void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) { j = { std::get(t)... }; } template::value, int > = 0> void to_json(BasicJsonType& j, const T& t) { to_json_tuple_impl(j, t, make_index_sequence::value> {}); } struct to_json_fn { template auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) -> decltype(to_json(j, std::forward(val)), void()) { return to_json(j, std::forward(val)); } }; } // namespace detail /// namespace to hold default `to_json` function namespace { constexpr const auto& to_json = detail::static_const::value; } // namespace } // namespace nlohmann namespace nlohmann { template struct adl_serializer { /*! @brief convert a JSON value to any value type This function is usually called by the `get()` function of the @ref basic_json class (either explicit or via conversion operators). @param[in] j JSON value to read from @param[in,out] val value to write to */ template static auto from_json(BasicJsonType&& j, ValueType& val) noexcept( noexcept(::nlohmann::from_json(std::forward(j), val))) -> decltype(::nlohmann::from_json(std::forward(j), val), void()) { ::nlohmann::from_json(std::forward(j), val); } /*! @brief convert any value type to a JSON value This function is usually called by the constructors of the @ref basic_json class. @param[in,out] j JSON value to write to @param[in] val value to read from */ template static auto to_json(BasicJsonType& j, ValueType&& val) noexcept( noexcept(::nlohmann::to_json(j, std::forward(val)))) -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) { ::nlohmann::to_json(j, std::forward(val)); } }; } // namespace nlohmann // #include #include // uint8_t #include // tie #include // move namespace nlohmann { /*! @brief an internal type for a backed binary type This type extends the template parameter @a BinaryType provided to `basic_json` with a subtype used by BSON and MessagePack. This type exists so that the user does not have to specify a type themselves with a specific naming scheme in order to override the binary type. @tparam BinaryType container to store bytes (`std::vector` by default) @since version 3.8.0 */ template class byte_container_with_subtype : public BinaryType { public: /// the type of the underlying container using container_type = BinaryType; byte_container_with_subtype() noexcept(noexcept(container_type())) : container_type() {} byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) : container_type(b) {} byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) : container_type(std::move(b)) {} byte_container_with_subtype(const container_type& b, std::uint8_t subtype) noexcept(noexcept(container_type(b))) : container_type(b) , m_subtype(subtype) , m_has_subtype(true) {} byte_container_with_subtype(container_type&& b, std::uint8_t subtype) noexcept(noexcept(container_type(std::move(b)))) : container_type(std::move(b)) , m_subtype(subtype) , m_has_subtype(true) {} bool operator==(const byte_container_with_subtype& rhs) const { return std::tie(static_cast(*this), m_subtype, m_has_subtype) == std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); } bool operator!=(const byte_container_with_subtype& rhs) const { return !(rhs == *this); } /*! @brief sets the binary subtype Sets the binary subtype of the value, also flags a binary JSON value as having a subtype, which has implications for serialization. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @sa @ref subtype() -- return the binary subtype @sa @ref clear_subtype() -- clears the binary subtype @sa @ref has_subtype() -- returns whether or not the binary value has a subtype @since version 3.8.0 */ void set_subtype(std::uint8_t subtype) noexcept { m_subtype = subtype; m_has_subtype = true; } /*! @brief return the binary subtype Returns the numerical subtype of the value if it has a subtype. If it does not have a subtype, this function will return size_t(-1) as a sentinel value. @return the numerical subtype of the binary value @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @sa @ref set_subtype() -- sets the binary subtype @sa @ref clear_subtype() -- clears the binary subtype @sa @ref has_subtype() -- returns whether or not the binary value has a subtype @since version 3.8.0 */ constexpr std::uint8_t subtype() const noexcept { return m_subtype; } /*! @brief return whether the value has a subtype @return whether the value has a subtype @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @sa @ref subtype() -- return the binary subtype @sa @ref set_subtype() -- sets the binary subtype @sa @ref clear_subtype() -- clears the binary subtype @since version 3.8.0 */ constexpr bool has_subtype() const noexcept { return m_has_subtype; } /*! @brief clears the binary subtype Clears the binary subtype and flags the value as not having a subtype, which has implications for serialization; for instance MessagePack will prefer the bin family over the ext family. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @sa @ref subtype() -- return the binary subtype @sa @ref set_subtype() -- sets the binary subtype @sa @ref has_subtype() -- returns whether or not the binary value has a subtype @since version 3.8.0 */ void clear_subtype() noexcept { m_subtype = 0; m_has_subtype = false; } private: std::uint8_t m_subtype = 0; bool m_has_subtype = false; }; } // namespace nlohmann // #include // #include // #include // #include #include // size_t, uint8_t #include // hash namespace nlohmann { namespace detail { // boost::hash_combine inline std::size_t combine(std::size_t seed, std::size_t h) noexcept { seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); return seed; } /*! @brief hash a JSON value The hash function tries to rely on std::hash where possible. Furthermore, the type of the JSON value is taken into account to have different hash values for null, 0, 0U, and false, etc. @tparam BasicJsonType basic_json specialization @param j JSON value to hash @return hash value of j */ template std::size_t hash(const BasicJsonType& j) { using string_t = typename BasicJsonType::string_t; using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; const auto type = static_cast(j.type()); switch (j.type()) { case BasicJsonType::value_t::null: case BasicJsonType::value_t::discarded: { return combine(type, 0); } case BasicJsonType::value_t::object: { auto seed = combine(type, j.size()); for (const auto& element : j.items()) { const auto h = std::hash {}(element.key()); seed = combine(seed, h); seed = combine(seed, hash(element.value())); } return seed; } case BasicJsonType::value_t::array: { auto seed = combine(type, j.size()); for (const auto& element : j) { seed = combine(seed, hash(element)); } return seed; } case BasicJsonType::value_t::string: { const auto h = std::hash {}(j.template get_ref()); return combine(type, h); } case BasicJsonType::value_t::boolean: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case BasicJsonType::value_t::number_integer: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case nlohmann::detail::value_t::number_unsigned: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case nlohmann::detail::value_t::number_float: { const auto h = std::hash {}(j.template get()); return combine(type, h); } case nlohmann::detail::value_t::binary: { auto seed = combine(type, j.get_binary().size()); const auto h = std::hash {}(j.get_binary().has_subtype()); seed = combine(seed, h); seed = combine(seed, j.get_binary().subtype()); for (const auto byte : j.get_binary()) { seed = combine(seed, std::hash {}(byte)); } return seed; } default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } } } // namespace detail } // namespace nlohmann // #include #include // generate_n #include // array #include // ldexp #include // size_t #include // uint8_t, uint16_t, uint32_t, uint64_t #include // snprintf #include // memcpy #include // back_inserter #include // numeric_limits #include // char_traits, string #include // make_pair, move // #include // #include #include // array #include // size_t #include //FILE * #include // strlen #include // istream #include // begin, end, iterator_traits, random_access_iterator_tag, distance, next #include // shared_ptr, make_shared, addressof #include // accumulate #include // string, char_traits #include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer #include // pair, declval // #include // #include namespace nlohmann { namespace detail { /// the supported input formats enum class input_format_t { json, cbor, msgpack, ubjson, bson }; //////////////////// // input adapters // //////////////////// /*! Input adapter for stdio file access. This adapter read only 1 byte and do not use any buffer. This adapter is a very low level adapter. */ class file_input_adapter { public: using char_type = char; JSON_HEDLEY_NON_NULL(2) explicit file_input_adapter(std::FILE* f) noexcept : m_file(f) {} // make class move-only file_input_adapter(const file_input_adapter&) = delete; file_input_adapter(file_input_adapter&&) = default; file_input_adapter& operator=(const file_input_adapter&) = delete; file_input_adapter& operator=(file_input_adapter&&) = delete; std::char_traits::int_type get_character() noexcept { return std::fgetc(m_file); } private: /// the file pointer to read from std::FILE* m_file; }; /*! Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at beginning of input. Does not support changing the underlying std::streambuf in mid-input. Maintains underlying std::istream and std::streambuf to support subsequent use of standard std::istream operations to process any input characters following those used in parsing the JSON input. Clears the std::istream flags; any input errors (e.g., EOF) will be detected by the first subsequent call for input from the std::istream. */ class input_stream_adapter { public: using char_type = char; ~input_stream_adapter() { // clear stream flags; we use underlying streambuf I/O, do not // maintain ifstream flags, except eof if (is != nullptr) { is->clear(is->rdstate() & std::ios::eofbit); } } explicit input_stream_adapter(std::istream& i) : is(&i), sb(i.rdbuf()) {} // delete because of pointer members input_stream_adapter(const input_stream_adapter&) = delete; input_stream_adapter& operator=(input_stream_adapter&) = delete; input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete; input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs.is), sb(rhs.sb) { rhs.is = nullptr; rhs.sb = nullptr; } // std::istream/std::streambuf use std::char_traits::to_int_type, to // ensure that std::char_traits::eof() and the character 0xFF do not // end up as the same value, eg. 0xFFFFFFFF. std::char_traits::int_type get_character() { auto res = sb->sbumpc(); // set eof manually, as we don't use the istream interface. if (JSON_HEDLEY_UNLIKELY(res == EOF)) { is->clear(is->rdstate() | std::ios::eofbit); } return res; } private: /// the associated input stream std::istream* is = nullptr; std::streambuf* sb = nullptr; }; // General-purpose iterator-based adapter. It might not be as fast as // theoretically possible for some containers, but it is extremely versatile. template class iterator_input_adapter { public: using char_type = typename std::iterator_traits::value_type; iterator_input_adapter(IteratorType first, IteratorType last) : current(std::move(first)), end(std::move(last)) {} typename std::char_traits::int_type get_character() { if (JSON_HEDLEY_LIKELY(current != end)) { auto result = std::char_traits::to_int_type(*current); std::advance(current, 1); return result; } else { return std::char_traits::eof(); } } private: IteratorType current; IteratorType end; template friend struct wide_string_input_helper; bool empty() const { return current == end; } }; template struct wide_string_input_helper; template struct wide_string_input_helper { // UTF-32 static void fill_buffer(BaseInputAdapter& input, std::array::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled) { utf8_bytes_index = 0; if (JSON_HEDLEY_UNLIKELY(input.empty())) { utf8_bytes[0] = std::char_traits::eof(); utf8_bytes_filled = 1; } else { // get the current character const auto wc = input.get_character(); // UTF-32 to UTF-8 encoding if (wc < 0x80) { utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } else if (wc <= 0x7FF) { utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 2; } else if (wc <= 0xFFFF) { utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 3; } else if (wc <= 0x10FFFF) { utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 4; } else { // unknown character utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } } } }; template struct wide_string_input_helper { // UTF-16 static void fill_buffer(BaseInputAdapter& input, std::array::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled) { utf8_bytes_index = 0; if (JSON_HEDLEY_UNLIKELY(input.empty())) { utf8_bytes[0] = std::char_traits::eof(); utf8_bytes_filled = 1; } else { // get the current character const auto wc = input.get_character(); // UTF-16 to UTF-8 encoding if (wc < 0x80) { utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } else if (wc <= 0x7FF) { utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 2; } else if (0xD800 > wc || wc >= 0xE000) { utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 3; } else { if (JSON_HEDLEY_UNLIKELY(!input.empty())) { const auto wc2 = static_cast(input.get_character()); const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); utf8_bytes_filled = 4; } else { utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } } } } }; // Wraps another input adapter to convert wide character types into individual bytes. template class wide_string_input_adapter { public: using char_type = char; wide_string_input_adapter(BaseInputAdapter base) : base_adapter(base) {} typename std::char_traits::int_type get_character() noexcept { // check if buffer needs to be filled if (utf8_bytes_index == utf8_bytes_filled) { fill_buffer(); JSON_ASSERT(utf8_bytes_filled > 0); JSON_ASSERT(utf8_bytes_index == 0); } // use buffer JSON_ASSERT(utf8_bytes_filled > 0); JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); return utf8_bytes[utf8_bytes_index++]; } private: BaseInputAdapter base_adapter; template void fill_buffer() { wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); } /// a buffer for UTF-8 bytes std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; /// index to the utf8_codes array for the next valid byte std::size_t utf8_bytes_index = 0; /// number of valid bytes in the utf8_codes array std::size_t utf8_bytes_filled = 0; }; template struct iterator_input_adapter_factory { using iterator_type = IteratorType; using char_type = typename std::iterator_traits::value_type; using adapter_type = iterator_input_adapter; static adapter_type create(IteratorType first, IteratorType last) { return adapter_type(std::move(first), std::move(last)); } }; template struct is_iterator_of_multibyte { using value_type = typename std::iterator_traits::value_type; enum { value = sizeof(value_type) > 1 }; }; template struct iterator_input_adapter_factory::value>> { using iterator_type = IteratorType; using char_type = typename std::iterator_traits::value_type; using base_adapter_type = iterator_input_adapter; using adapter_type = wide_string_input_adapter; static adapter_type create(IteratorType first, IteratorType last) { return adapter_type(base_adapter_type(std::move(first), std::move(last))); } }; // General purpose iterator-based input template typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) { using factory_type = iterator_input_adapter_factory; return factory_type::create(first, last); } // Convenience shorthand from container to iterator template auto input_adapter(const ContainerType& container) -> decltype(input_adapter(begin(container), end(container))) { // Enable ADL using std::begin; using std::end; return input_adapter(begin(container), end(container)); } // Special cases with fast paths inline file_input_adapter input_adapter(std::FILE* file) { return file_input_adapter(file); } inline input_stream_adapter input_adapter(std::istream& stream) { return input_stream_adapter(stream); } inline input_stream_adapter input_adapter(std::istream&& stream) { return input_stream_adapter(stream); } using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); // Null-delimited strings, and the like. template < typename CharT, typename std::enable_if < std::is_pointer::value&& !std::is_array::value&& std::is_integral::type>::value&& sizeof(typename std::remove_pointer::type) == 1, int >::type = 0 > contiguous_bytes_input_adapter input_adapter(CharT b) { auto length = std::strlen(reinterpret_cast(b)); const auto* ptr = reinterpret_cast(b); return input_adapter(ptr, ptr + length); } template auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) { return input_adapter(array, array + N); } // This class only handles inputs of input_buffer_adapter type. // It's required so that expressions like {ptr, len} can be implicitly casted // to the correct adapter. class span_input_adapter { public: template < typename CharT, typename std::enable_if < std::is_pointer::value&& std::is_integral::type>::value&& sizeof(typename std::remove_pointer::type) == 1, int >::type = 0 > span_input_adapter(CharT b, std::size_t l) : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} template::iterator_category, std::random_access_iterator_tag>::value, int>::type = 0> span_input_adapter(IteratorType first, IteratorType last) : ia(input_adapter(first, last)) {} contiguous_bytes_input_adapter&& get() { return std::move(ia); } private: contiguous_bytes_input_adapter ia; }; } // namespace detail } // namespace nlohmann // #include #include #include // string #include // move #include // vector // #include // #include namespace nlohmann { /*! @brief SAX interface This class describes the SAX interface used by @ref nlohmann::json::sax_parse. Each function is called in different situations while the input is parsed. The boolean return value informs the parser whether to continue processing the input. */ template struct json_sax { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; /*! @brief a null value was read @return whether parsing should proceed */ virtual bool null() = 0; /*! @brief a boolean value was read @param[in] val boolean value @return whether parsing should proceed */ virtual bool boolean(bool val) = 0; /*! @brief an integer number was read @param[in] val integer value @return whether parsing should proceed */ virtual bool number_integer(number_integer_t val) = 0; /*! @brief an unsigned integer number was read @param[in] val unsigned integer value @return whether parsing should proceed */ virtual bool number_unsigned(number_unsigned_t val) = 0; /*! @brief an floating-point number was read @param[in] val floating-point value @param[in] s raw token value @return whether parsing should proceed */ virtual bool number_float(number_float_t val, const string_t& s) = 0; /*! @brief a string was read @param[in] val string value @return whether parsing should proceed @note It is safe to move the passed string. */ virtual bool string(string_t& val) = 0; /*! @brief a binary string was read @param[in] val binary value @return whether parsing should proceed @note It is safe to move the passed binary. */ virtual bool binary(binary_t& val) = 0; /*! @brief the beginning of an object was read @param[in] elements number of object elements or -1 if unknown @return whether parsing should proceed @note binary formats may report the number of elements */ virtual bool start_object(std::size_t elements) = 0; /*! @brief an object key was read @param[in] val object key @return whether parsing should proceed @note It is safe to move the passed string. */ virtual bool key(string_t& val) = 0; /*! @brief the end of an object was read @return whether parsing should proceed */ virtual bool end_object() = 0; /*! @brief the beginning of an array was read @param[in] elements number of array elements or -1 if unknown @return whether parsing should proceed @note binary formats may report the number of elements */ virtual bool start_array(std::size_t elements) = 0; /*! @brief the end of an array was read @return whether parsing should proceed */ virtual bool end_array() = 0; /*! @brief a parse error occurred @param[in] position the position in the input where the error occurs @param[in] last_token the last read token @param[in] ex an exception object describing the error @return whether parsing should proceed (must return false) */ virtual bool parse_error(std::size_t position, const std::string& last_token, const detail::exception& ex) = 0; virtual ~json_sax() = default; }; namespace detail { /*! @brief SAX implementation to create a JSON value from SAX events This class implements the @ref json_sax interface and processes the SAX events to create a JSON value which makes it basically a DOM parser. The structure or hierarchy of the JSON value is managed by the stack `ref_stack` which contains a pointer to the respective array or object for each recursion depth. After successful parsing, the value that is passed by reference to the constructor contains the parsed value. @tparam BasicJsonType the JSON type */ template class json_sax_dom_parser { public: using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; /*! @param[in, out] r reference to a JSON value that is manipulated while parsing @param[in] allow_exceptions_ whether parse errors yield exceptions */ explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) : root(r), allow_exceptions(allow_exceptions_) {} // make class move-only json_sax_dom_parser(const json_sax_dom_parser&) = delete; json_sax_dom_parser(json_sax_dom_parser&&) = default; json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; ~json_sax_dom_parser() = default; bool null() { handle_value(nullptr); return true; } bool boolean(bool val) { handle_value(val); return true; } bool number_integer(number_integer_t val) { handle_value(val); return true; } bool number_unsigned(number_unsigned_t val) { handle_value(val); return true; } bool number_float(number_float_t val, const string_t& /*unused*/) { handle_value(val); return true; } bool string(string_t& val) { handle_value(val); return true; } bool binary(binary_t& val) { handle_value(std::move(val)); return true; } bool start_object(std::size_t len) { ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len))); } return true; } bool key(string_t& val) { // add null at given key and store the reference for later object_element = &(ref_stack.back()->m_value.object->operator[](val)); return true; } bool end_object() { ref_stack.pop_back(); return true; } bool start_array(std::size_t len) { ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len))); } return true; } bool end_array() { ref_stack.pop_back(); return true; } template bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const Exception& ex) { errored = true; static_cast(ex); if (allow_exceptions) { JSON_THROW(ex); } return false; } constexpr bool is_errored() const { return errored; } private: /*! @invariant If the ref stack is empty, then the passed value will be the new root. @invariant If the ref stack contains a value, then it is an array or an object to which we can add elements */ template JSON_HEDLEY_RETURNS_NON_NULL BasicJsonType* handle_value(Value&& v) { if (ref_stack.empty()) { root = BasicJsonType(std::forward(v)); return &root; } JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); if (ref_stack.back()->is_array()) { ref_stack.back()->m_value.array->emplace_back(std::forward(v)); return &(ref_stack.back()->m_value.array->back()); } JSON_ASSERT(ref_stack.back()->is_object()); JSON_ASSERT(object_element); *object_element = BasicJsonType(std::forward(v)); return object_element; } /// the parsed JSON value BasicJsonType& root; /// stack to model hierarchy of values std::vector ref_stack {}; /// helper to hold the reference for the next object element BasicJsonType* object_element = nullptr; /// whether a syntax error occurred bool errored = false; /// whether to throw exceptions in case of errors const bool allow_exceptions = true; }; template class json_sax_dom_callback_parser { public: using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using parser_callback_t = typename BasicJsonType::parser_callback_t; using parse_event_t = typename BasicJsonType::parse_event_t; json_sax_dom_callback_parser(BasicJsonType& r, const parser_callback_t cb, const bool allow_exceptions_ = true) : root(r), callback(cb), allow_exceptions(allow_exceptions_) { keep_stack.push_back(true); } // make class move-only json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; ~json_sax_dom_callback_parser() = default; bool null() { handle_value(nullptr); return true; } bool boolean(bool val) { handle_value(val); return true; } bool number_integer(number_integer_t val) { handle_value(val); return true; } bool number_unsigned(number_unsigned_t val) { handle_value(val); return true; } bool number_float(number_float_t val, const string_t& /*unused*/) { handle_value(val); return true; } bool string(string_t& val) { handle_value(val); return true; } bool binary(binary_t& val) { handle_value(std::move(val)); return true; } bool start_object(std::size_t len) { // check callback for object start const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); keep_stack.push_back(keep); auto val = handle_value(BasicJsonType::value_t::object, true); ref_stack.push_back(val.second); // check object limit if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len))); } return true; } bool key(string_t& val) { BasicJsonType k = BasicJsonType(val); // check callback for key const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); key_keep_stack.push_back(keep); // add discarded value at given key and store the reference for later if (keep && ref_stack.back()) { object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); } return true; } bool end_object() { if (ref_stack.back() && !callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) { // discard object *ref_stack.back() = discarded; } JSON_ASSERT(!ref_stack.empty()); JSON_ASSERT(!keep_stack.empty()); ref_stack.pop_back(); keep_stack.pop_back(); if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) { // remove discarded value for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) { if (it->is_discarded()) { ref_stack.back()->erase(it); break; } } } return true; } bool start_array(std::size_t len) { const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); keep_stack.push_back(keep); auto val = handle_value(BasicJsonType::value_t::array, true); ref_stack.push_back(val.second); // check array limit if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len))); } return true; } bool end_array() { bool keep = true; if (ref_stack.back()) { keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); if (!keep) { // discard array *ref_stack.back() = discarded; } } JSON_ASSERT(!ref_stack.empty()); JSON_ASSERT(!keep_stack.empty()); ref_stack.pop_back(); keep_stack.pop_back(); // remove discarded value if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) { ref_stack.back()->m_value.array->pop_back(); } return true; } template bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const Exception& ex) { errored = true; static_cast(ex); if (allow_exceptions) { JSON_THROW(ex); } return false; } constexpr bool is_errored() const { return errored; } private: /*! @param[in] v value to add to the JSON value we build during parsing @param[in] skip_callback whether we should skip calling the callback function; this is required after start_array() and start_object() SAX events, because otherwise we would call the callback function with an empty array or object, respectively. @invariant If the ref stack is empty, then the passed value will be the new root. @invariant If the ref stack contains a value, then it is an array or an object to which we can add elements @return pair of boolean (whether value should be kept) and pointer (to the passed value in the ref_stack hierarchy; nullptr if not kept) */ template std::pair handle_value(Value&& v, const bool skip_callback = false) { JSON_ASSERT(!keep_stack.empty()); // do not handle this value if we know it would be added to a discarded // container if (!keep_stack.back()) { return {false, nullptr}; } // create value auto value = BasicJsonType(std::forward(v)); // check callback const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); // do not handle this value if we just learnt it shall be discarded if (!keep) { return {false, nullptr}; } if (ref_stack.empty()) { root = std::move(value); return {true, &root}; } // skip this value if we already decided to skip the parent // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) if (!ref_stack.back()) { return {false, nullptr}; } // we now only expect arrays and objects JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); // array if (ref_stack.back()->is_array()) { ref_stack.back()->m_value.array->push_back(std::move(value)); return {true, &(ref_stack.back()->m_value.array->back())}; } // object JSON_ASSERT(ref_stack.back()->is_object()); // check if we should store an element for the current key JSON_ASSERT(!key_keep_stack.empty()); const bool store_element = key_keep_stack.back(); key_keep_stack.pop_back(); if (!store_element) { return {false, nullptr}; } JSON_ASSERT(object_element); *object_element = std::move(value); return {true, object_element}; } /// the parsed JSON value BasicJsonType& root; /// stack to model hierarchy of values std::vector ref_stack {}; /// stack to manage which values to keep std::vector keep_stack {}; /// stack to manage which object keys to keep std::vector key_keep_stack {}; /// helper to hold the reference for the next object element BasicJsonType* object_element = nullptr; /// whether a syntax error occurred bool errored = false; /// callback function const parser_callback_t callback = nullptr; /// whether to throw exceptions in case of errors const bool allow_exceptions = true; /// a discarded value for the callback BasicJsonType discarded = BasicJsonType::value_t::discarded; }; template class json_sax_acceptor { public: using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; bool null() { return true; } bool boolean(bool /*unused*/) { return true; } bool number_integer(number_integer_t /*unused*/) { return true; } bool number_unsigned(number_unsigned_t /*unused*/) { return true; } bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) { return true; } bool string(string_t& /*unused*/) { return true; } bool binary(binary_t& /*unused*/) { return true; } bool start_object(std::size_t /*unused*/ = std::size_t(-1)) { return true; } bool key(string_t& /*unused*/) { return true; } bool end_object() { return true; } bool start_array(std::size_t /*unused*/ = std::size_t(-1)) { return true; } bool end_array() { return true; } bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) { return false; } }; } // namespace detail } // namespace nlohmann // #include #include // array #include // localeconv #include // size_t #include // snprintf #include // strtof, strtod, strtold, strtoll, strtoull #include // initializer_list #include // char_traits, string #include // move #include // vector // #include // #include // #include namespace nlohmann { namespace detail { /////////// // lexer // /////////// template class lexer_base { public: /// token types for the parser enum class token_type { uninitialized, ///< indicating the scanner is uninitialized literal_true, ///< the `true` literal literal_false, ///< the `false` literal literal_null, ///< the `null` literal value_string, ///< a string -- use get_string() for actual value value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value value_integer, ///< a signed integer -- use get_number_integer() for actual value value_float, ///< an floating point number -- use get_number_float() for actual value begin_array, ///< the character for array begin `[` begin_object, ///< the character for object begin `{` end_array, ///< the character for array end `]` end_object, ///< the character for object end `}` name_separator, ///< the name separator `:` value_separator, ///< the value separator `,` parse_error, ///< indicating a parse error end_of_input, ///< indicating the end of the input buffer literal_or_value ///< a literal or the begin of a value (only for diagnostics) }; /// return name of values of type token_type (only used for errors) JSON_HEDLEY_RETURNS_NON_NULL JSON_HEDLEY_CONST static const char* token_type_name(const token_type t) noexcept { switch (t) { case token_type::uninitialized: return ""; case token_type::literal_true: return "true literal"; case token_type::literal_false: return "false literal"; case token_type::literal_null: return "null literal"; case token_type::value_string: return "string literal"; case token_type::value_unsigned: case token_type::value_integer: case token_type::value_float: return "number literal"; case token_type::begin_array: return "'['"; case token_type::begin_object: return "'{'"; case token_type::end_array: return "']'"; case token_type::end_object: return "'}'"; case token_type::name_separator: return "':'"; case token_type::value_separator: return "','"; case token_type::parse_error: return ""; case token_type::end_of_input: return "end of input"; case token_type::literal_or_value: return "'[', '{', or a literal"; // LCOV_EXCL_START default: // catch non-enum values return "unknown token"; // LCOV_EXCL_STOP } } }; /*! @brief lexical analysis This class organizes the lexical analysis during JSON deserialization. */ template class lexer : public lexer_base { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using char_type = typename InputAdapterType::char_type; using char_int_type = typename std::char_traits::int_type; public: using token_type = typename lexer_base::token_type; explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) : ia(std::move(adapter)) , ignore_comments(ignore_comments_) , decimal_point_char(static_cast(get_decimal_point())) {} // delete because of pointer members lexer(const lexer&) = delete; lexer(lexer&&) = default; lexer& operator=(lexer&) = delete; lexer& operator=(lexer&&) = default; ~lexer() = default; private: ///////////////////// // locales ///////////////////// /// return the locale-dependent decimal point JSON_HEDLEY_PURE static char get_decimal_point() noexcept { const auto* loc = localeconv(); JSON_ASSERT(loc != nullptr); return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); } ///////////////////// // scan functions ///////////////////// /*! @brief get codepoint from 4 hex characters following `\u` For input "\u c1 c2 c3 c4" the codepoint is: (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The conversion is done by subtracting the offset (0x30, 0x37, and 0x57) between the ASCII value of the character and the desired integer value. @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or non-hex character) */ int get_codepoint() { // this function only makes sense after reading `\u` JSON_ASSERT(current == 'u'); int codepoint = 0; const auto factors = { 12u, 8u, 4u, 0u }; for (const auto factor : factors) { get(); if (current >= '0' && current <= '9') { codepoint += static_cast((static_cast(current) - 0x30u) << factor); } else if (current >= 'A' && current <= 'F') { codepoint += static_cast((static_cast(current) - 0x37u) << factor); } else if (current >= 'a' && current <= 'f') { codepoint += static_cast((static_cast(current) - 0x57u) << factor); } else { return -1; } } JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); return codepoint; } /*! @brief check if the next byte(s) are inside a given range Adds the current byte and, for each passed range, reads a new byte and checks if it is inside the range. If a violation was detected, set up an error message and return false. Otherwise, return true. @param[in] ranges list of integers; interpreted as list of pairs of inclusive lower and upper bound, respectively @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, 1, 2, or 3 pairs. This precondition is enforced by an assertion. @return true if and only if no range violation was detected */ bool next_byte_in_range(std::initializer_list ranges) { JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); add(current); for (auto range = ranges.begin(); range != ranges.end(); ++range) { get(); if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) { add(current); } else { error_message = "invalid string: ill-formed UTF-8 byte"; return false; } } return true; } /*! @brief scan a string literal This function scans a string according to Sect. 7 of RFC 7159. While scanning, bytes are escaped and copied into buffer token_buffer. Then the function returns successfully, token_buffer is *not* null-terminated (as it may contain \0 bytes), and token_buffer.size() is the number of bytes in the string. @return token_type::value_string if string could be successfully scanned, token_type::parse_error otherwise @note In case of errors, variable error_message contains a textual description. */ token_type scan_string() { // reset token_buffer (ignore opening quote) reset(); // we entered the function by reading an open quote JSON_ASSERT(current == '\"'); while (true) { // get next character switch (get()) { // end of file while parsing string case std::char_traits::eof(): { error_message = "invalid string: missing closing quote"; return token_type::parse_error; } // closing quote case '\"': { return token_type::value_string; } // escapes case '\\': { switch (get()) { // quotation mark case '\"': add('\"'); break; // reverse solidus case '\\': add('\\'); break; // solidus case '/': add('/'); break; // backspace case 'b': add('\b'); break; // form feed case 'f': add('\f'); break; // line feed case 'n': add('\n'); break; // carriage return case 'r': add('\r'); break; // tab case 't': add('\t'); break; // unicode escapes case 'u': { const int codepoint1 = get_codepoint(); int codepoint = codepoint1; // start with codepoint1 if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) { error_message = "invalid string: '\\u' must be followed by 4 hex digits"; return token_type::parse_error; } // check if code point is a high surrogate if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) { // expect next \uxxxx entry if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) { const int codepoint2 = get_codepoint(); if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) { error_message = "invalid string: '\\u' must be followed by 4 hex digits"; return token_type::parse_error; } // check if codepoint2 is a low surrogate if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) { // overwrite codepoint codepoint = static_cast( // high surrogate occupies the most significant 22 bits (static_cast(codepoint1) << 10u) // low surrogate occupies the least significant 15 bits + static_cast(codepoint2) // there is still the 0xD800, 0xDC00 and 0x10000 noise // in the result so we have to subtract with: // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 - 0x35FDC00u); } else { error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; return token_type::parse_error; } } else { error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; return token_type::parse_error; } } else { if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) { error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; return token_type::parse_error; } } // result of the above calculation yields a proper codepoint JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); // translate codepoint into bytes if (codepoint < 0x80) { // 1-byte characters: 0xxxxxxx (ASCII) add(static_cast(codepoint)); } else if (codepoint <= 0x7FF) { // 2-byte characters: 110xxxxx 10xxxxxx add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } else if (codepoint <= 0xFFFF) { // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } else { // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } break; } // other characters after escape default: error_message = "invalid string: forbidden character after backslash"; return token_type::parse_error; } break; } // invalid control characters case 0x00: { error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; return token_type::parse_error; } case 0x01: { error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; return token_type::parse_error; } case 0x02: { error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; return token_type::parse_error; } case 0x03: { error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; return token_type::parse_error; } case 0x04: { error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; return token_type::parse_error; } case 0x05: { error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; return token_type::parse_error; } case 0x06: { error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; return token_type::parse_error; } case 0x07: { error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; return token_type::parse_error; } case 0x08: { error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; return token_type::parse_error; } case 0x09: { error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; return token_type::parse_error; } case 0x0A: { error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; return token_type::parse_error; } case 0x0B: { error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; return token_type::parse_error; } case 0x0C: { error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; return token_type::parse_error; } case 0x0D: { error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; return token_type::parse_error; } case 0x0E: { error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; return token_type::parse_error; } case 0x0F: { error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; return token_type::parse_error; } case 0x10: { error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; return token_type::parse_error; } case 0x11: { error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; return token_type::parse_error; } case 0x12: { error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; return token_type::parse_error; } case 0x13: { error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; return token_type::parse_error; } case 0x14: { error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; return token_type::parse_error; } case 0x15: { error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; return token_type::parse_error; } case 0x16: { error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; return token_type::parse_error; } case 0x17: { error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; return token_type::parse_error; } case 0x18: { error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; return token_type::parse_error; } case 0x19: { error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; return token_type::parse_error; } case 0x1A: { error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; return token_type::parse_error; } case 0x1B: { error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; return token_type::parse_error; } case 0x1C: { error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; return token_type::parse_error; } case 0x1D: { error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; return token_type::parse_error; } case 0x1E: { error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; return token_type::parse_error; } case 0x1F: { error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; return token_type::parse_error; } // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) case 0x20: case 0x21: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F: case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3C: case 0x3D: case 0x3E: case 0x3F: case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: case 0x58: case 0x59: case 0x5A: case 0x5B: case 0x5D: case 0x5E: case 0x5F: case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E: case 0x7F: { add(current); break; } // U+0080..U+07FF: bytes C2..DF 80..BF case 0xC2: case 0xC3: case 0xC4: case 0xC5: case 0xC6: case 0xC7: case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF: case 0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4: case 0xD5: case 0xD6: case 0xD7: case 0xD8: case 0xD9: case 0xDA: case 0xDB: case 0xDC: case 0xDD: case 0xDE: case 0xDF: { if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) { return token_type::parse_error; } break; } // U+0800..U+0FFF: bytes E0 A0..BF 80..BF case 0xE0: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF case 0xE1: case 0xE2: case 0xE3: case 0xE4: case 0xE5: case 0xE6: case 0xE7: case 0xE8: case 0xE9: case 0xEA: case 0xEB: case 0xEC: case 0xEE: case 0xEF: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+D000..U+D7FF: bytes ED 80..9F 80..BF case 0xED: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF case 0xF0: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF case 0xF1: case 0xF2: case 0xF3: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF case 0xF4: { if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } break; } // remaining bytes (80..C1 and F5..FF) are ill-formed default: { error_message = "invalid string: ill-formed UTF-8 byte"; return token_type::parse_error; } } } } /*! * @brief scan a comment * @return whether comment could be scanned successfully */ bool scan_comment() { switch (get()) { // single-line comments skip input until a newline or EOF is read case '/': { while (true) { switch (get()) { case '\n': case '\r': case std::char_traits::eof(): case '\0': return true; default: break; } } } // multi-line comments skip input until */ is read case '*': { while (true) { switch (get()) { case std::char_traits::eof(): case '\0': { error_message = "invalid comment; missing closing '*/'"; return false; } case '*': { switch (get()) { case '/': return true; default: { unget(); continue; } } } default: continue; } } } // unexpected character after reading '/' default: { error_message = "invalid comment; expecting '/' or '*' after '/'"; return false; } } } JSON_HEDLEY_NON_NULL(2) static void strtof(float& f, const char* str, char** endptr) noexcept { f = std::strtof(str, endptr); } JSON_HEDLEY_NON_NULL(2) static void strtof(double& f, const char* str, char** endptr) noexcept { f = std::strtod(str, endptr); } JSON_HEDLEY_NON_NULL(2) static void strtof(long double& f, const char* str, char** endptr) noexcept { f = std::strtold(str, endptr); } /*! @brief scan a number literal This function scans a string according to Sect. 6 of RFC 7159. The function is realized with a deterministic finite state machine derived from the grammar described in RFC 7159. Starting in state "init", the input is read and used to determined the next state. Only state "done" accepts the number. State "error" is a trap state to model errors. In the table below, "anything" means any character but the ones listed before. state | 0 | 1-9 | e E | + | - | . | anything ---------|----------|----------|----------|---------|---------|----------|----------- init | zero | any1 | [error] | [error] | minus | [error] | [error] minus | zero | any1 | [error] | [error] | [error] | [error] | [error] zero | done | done | exponent | done | done | decimal1 | done any1 | any1 | any1 | exponent | done | done | decimal1 | done decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] decimal2 | decimal2 | decimal2 | exponent | done | done | done | done exponent | any2 | any2 | [error] | sign | sign | [error] | [error] sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] any2 | any2 | any2 | done | done | done | done | done The state machine is realized with one label per state (prefixed with "scan_number_") and `goto` statements between them. The state machine contains cycles, but any cycle can be left when EOF is read. Therefore, the function is guaranteed to terminate. During scanning, the read bytes are stored in token_buffer. This string is then converted to a signed integer, an unsigned integer, or a floating-point number. @return token_type::value_unsigned, token_type::value_integer, or token_type::value_float if number could be successfully scanned, token_type::parse_error otherwise @note The scanner is independent of the current locale. Internally, the locale's decimal point is used instead of `.` to work with the locale-dependent converters. */ token_type scan_number() // lgtm [cpp/use-of-goto] { // reset token_buffer to store the number's bytes reset(); // the type of the parsed number; initially set to unsigned; will be // changed if minus sign, decimal point or exponent is read token_type number_type = token_type::value_unsigned; // state (init): we just found out we need to scan a number switch (current) { case '-': { add(current); goto scan_number_minus; } case '0': { add(current); goto scan_number_zero; } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any1; } // all other characters are rejected outside scan_number() default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } scan_number_minus: // state: we just parsed a leading minus sign number_type = token_type::value_integer; switch (get()) { case '0': { add(current); goto scan_number_zero; } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any1; } default: { error_message = "invalid number; expected digit after '-'"; return token_type::parse_error; } } scan_number_zero: // state: we just parse a zero (maybe with a leading minus sign) switch (get()) { case '.': { add(decimal_point_char); goto scan_number_decimal1; } case 'e': case 'E': { add(current); goto scan_number_exponent; } default: goto scan_number_done; } scan_number_any1: // state: we just parsed a number 0-9 (maybe with a leading minus sign) switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any1; } case '.': { add(decimal_point_char); goto scan_number_decimal1; } case 'e': case 'E': { add(current); goto scan_number_exponent; } default: goto scan_number_done; } scan_number_decimal1: // state: we just parsed a decimal point number_type = token_type::value_float; switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_decimal2; } default: { error_message = "invalid number; expected digit after '.'"; return token_type::parse_error; } } scan_number_decimal2: // we just parsed at least one number after a decimal point switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_decimal2; } case 'e': case 'E': { add(current); goto scan_number_exponent; } default: goto scan_number_done; } scan_number_exponent: // we just parsed an exponent number_type = token_type::value_float; switch (get()) { case '+': case '-': { add(current); goto scan_number_sign; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any2; } default: { error_message = "invalid number; expected '+', '-', or digit after exponent"; return token_type::parse_error; } } scan_number_sign: // we just parsed an exponent sign switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any2; } default: { error_message = "invalid number; expected digit after exponent sign"; return token_type::parse_error; } } scan_number_any2: // we just parsed a number after the exponent or exponent sign switch (get()) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { add(current); goto scan_number_any2; } default: goto scan_number_done; } scan_number_done: // unget the character after the number (we only read it to know that // we are done scanning a number) unget(); char* endptr = nullptr; errno = 0; // try to parse integers first and fall back to floats if (number_type == token_type::value_unsigned) { const auto x = std::strtoull(token_buffer.data(), &endptr, 10); // we checked the number format before JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); if (errno == 0) { value_unsigned = static_cast(x); if (value_unsigned == x) { return token_type::value_unsigned; } } } else if (number_type == token_type::value_integer) { const auto x = std::strtoll(token_buffer.data(), &endptr, 10); // we checked the number format before JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); if (errno == 0) { value_integer = static_cast(x); if (value_integer == x) { return token_type::value_integer; } } } // this code is reached if we parse a floating-point number or if an // integer conversion above failed strtof(value_float, token_buffer.data(), &endptr); // we checked the number format before JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); return token_type::value_float; } /*! @param[in] literal_text the literal text to expect @param[in] length the length of the passed literal text @param[in] return_type the token type to return on success */ JSON_HEDLEY_NON_NULL(2) token_type scan_literal(const char_type* literal_text, const std::size_t length, token_type return_type) { JSON_ASSERT(std::char_traits::to_char_type(current) == literal_text[0]); for (std::size_t i = 1; i < length; ++i) { if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) { error_message = "invalid literal"; return token_type::parse_error; } } return return_type; } ///////////////////// // input management ///////////////////// /// reset token_buffer; current character is beginning of token void reset() noexcept { token_buffer.clear(); token_string.clear(); token_string.push_back(std::char_traits::to_char_type(current)); } /* @brief get next character from the input This function provides the interface to the used input adapter. It does not throw in case the input reached EOF, but returns a `std::char_traits::eof()` in that case. Stores the scanned characters for use in error messages. @return character read from the input */ char_int_type get() { ++position.chars_read_total; ++position.chars_read_current_line; if (next_unget) { // just reset the next_unget variable and work with current next_unget = false; } else { current = ia.get_character(); } if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) { token_string.push_back(std::char_traits::to_char_type(current)); } if (current == '\n') { ++position.lines_read; position.chars_read_current_line = 0; } return current; } /*! @brief unget current character (read it again on next get) We implement unget by setting variable next_unget to true. The input is not changed - we just simulate ungetting by modifying chars_read_total, chars_read_current_line, and token_string. The next call to get() will behave as if the unget character is read again. */ void unget() { next_unget = true; --position.chars_read_total; // in case we "unget" a newline, we have to also decrement the lines_read if (position.chars_read_current_line == 0) { if (position.lines_read > 0) { --position.lines_read; } } else { --position.chars_read_current_line; } if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) { JSON_ASSERT(!token_string.empty()); token_string.pop_back(); } } /// add a character to token_buffer void add(char_int_type c) { token_buffer.push_back(static_cast(c)); } public: ///////////////////// // value getters ///////////////////// /// return integer value constexpr number_integer_t get_number_integer() const noexcept { return value_integer; } /// return unsigned integer value constexpr number_unsigned_t get_number_unsigned() const noexcept { return value_unsigned; } /// return floating-point value constexpr number_float_t get_number_float() const noexcept { return value_float; } /// return current string value (implicitly resets the token; useful only once) string_t& get_string() { return token_buffer; } ///////////////////// // diagnostics ///////////////////// /// return position of last read token constexpr position_t get_position() const noexcept { return position; } /// return the last read token (for errors only). Will never contain EOF /// (an arbitrary value that is not a valid char value, often -1), because /// 255 may legitimately occur. May contain NUL, which should be escaped. std::string get_token_string() const { // escape control characters std::string result; for (const auto c : token_string) { if (static_cast(c) <= '\x1F') { // escape control characters std::array cs{{}}; (std::snprintf)(cs.data(), cs.size(), "", static_cast(c)); result += cs.data(); } else { // add character as is result.push_back(static_cast(c)); } } return result; } /// return syntax error message JSON_HEDLEY_RETURNS_NON_NULL constexpr const char* get_error_message() const noexcept { return error_message; } ///////////////////// // actual scanner ///////////////////// /*! @brief skip the UTF-8 byte order mark @return true iff there is no BOM or the correct BOM has been skipped */ bool skip_bom() { if (get() == 0xEF) { // check if we completely parse the BOM return get() == 0xBB && get() == 0xBF; } // the first character is not the beginning of the BOM; unget it to // process is later unget(); return true; } void skip_whitespace() { do { get(); } while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); } token_type scan() { // initially, skip the BOM if (position.chars_read_total == 0 && !skip_bom()) { error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; return token_type::parse_error; } // read next character and ignore whitespace skip_whitespace(); // ignore comments while (ignore_comments && current == '/') { if (!scan_comment()) { return token_type::parse_error; } // skip following whitespace skip_whitespace(); } switch (current) { // structural characters case '[': return token_type::begin_array; case ']': return token_type::end_array; case '{': return token_type::begin_object; case '}': return token_type::end_object; case ':': return token_type::name_separator; case ',': return token_type::value_separator; // literals case 't': { std::array true_literal = {{'t', 'r', 'u', 'e'}}; return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); } case 'f': { std::array false_literal = {{'f', 'a', 'l', 's', 'e'}}; return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); } case 'n': { std::array null_literal = {{'n', 'u', 'l', 'l'}}; return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); } // string case '\"': return scan_string(); // number case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return scan_number(); // end of input (the null byte is needed when parsing from // string literals) case '\0': case std::char_traits::eof(): return token_type::end_of_input; // error default: error_message = "invalid literal"; return token_type::parse_error; } } private: /// input adapter InputAdapterType ia; /// whether comments should be ignored (true) or signaled as errors (false) const bool ignore_comments = false; /// the current character char_int_type current = std::char_traits::eof(); /// whether the next get() call should just return current bool next_unget = false; /// the start position of the current token position_t position {}; /// raw input token string (for error messages) std::vector token_string {}; /// buffer for variable-length tokens (numbers, strings) string_t token_buffer {}; /// a description of occurred lexer errors const char* error_message = ""; // number values number_integer_t value_integer = 0; number_unsigned_t value_unsigned = 0; number_float_t value_float = 0; /// the decimal point const char_int_type decimal_point_char = '.'; }; } // namespace detail } // namespace nlohmann // #include // #include #include // size_t #include // declval #include // string // #include // #include namespace nlohmann { namespace detail { template using null_function_t = decltype(std::declval().null()); template using boolean_function_t = decltype(std::declval().boolean(std::declval())); template using number_integer_function_t = decltype(std::declval().number_integer(std::declval())); template using number_unsigned_function_t = decltype(std::declval().number_unsigned(std::declval())); template using number_float_function_t = decltype(std::declval().number_float( std::declval(), std::declval())); template using string_function_t = decltype(std::declval().string(std::declval())); template using binary_function_t = decltype(std::declval().binary(std::declval())); template using start_object_function_t = decltype(std::declval().start_object(std::declval())); template using key_function_t = decltype(std::declval().key(std::declval())); template using end_object_function_t = decltype(std::declval().end_object()); template using start_array_function_t = decltype(std::declval().start_array(std::declval())); template using end_array_function_t = decltype(std::declval().end_array()); template using parse_error_function_t = decltype(std::declval().parse_error( std::declval(), std::declval(), std::declval())); template struct is_sax { private: static_assert(is_basic_json::value, "BasicJsonType must be of type basic_json<...>"); using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using exception_t = typename BasicJsonType::exception; public: static constexpr bool value = is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value && is_detected_exact::value; }; template struct is_sax_static_asserts { private: static_assert(is_basic_json::value, "BasicJsonType must be of type basic_json<...>"); using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using exception_t = typename BasicJsonType::exception; public: static_assert(is_detected_exact::value, "Missing/invalid function: bool null()"); static_assert(is_detected_exact::value, "Missing/invalid function: bool boolean(bool)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool boolean(bool)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool number_integer(number_integer_t)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool string(string_t&)"); static_assert( is_detected_exact::value, "Missing/invalid function: bool binary(binary_t&)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool start_object(std::size_t)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool key(string_t&)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool end_object()"); static_assert(is_detected_exact::value, "Missing/invalid function: bool start_array(std::size_t)"); static_assert(is_detected_exact::value, "Missing/invalid function: bool end_array()"); static_assert( is_detected_exact::value, "Missing/invalid function: bool parse_error(std::size_t, const " "std::string&, const exception&)"); }; } // namespace detail } // namespace nlohmann // #include namespace nlohmann { namespace detail { /// how to treat CBOR tags enum class cbor_tag_handler_t { error, ///< throw a parse_error exception in case of a tag ignore ///< ignore tags }; /*! @brief determine system byte order @return true if and only if system's byte order is little endian @note from https://stackoverflow.com/a/1001328/266378 */ static inline bool little_endianess(int num = 1) noexcept { return *reinterpret_cast(&num) == 1; } /////////////////// // binary reader // /////////////////// /*! @brief deserialization of CBOR, MessagePack, and UBJSON values */ template> class binary_reader { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using json_sax_t = SAX; using char_type = typename InputAdapterType::char_type; using char_int_type = typename std::char_traits::int_type; public: /*! @brief create a binary reader @param[in] adapter input adapter to read from */ explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(adapter)) { (void)detail::is_sax_static_asserts {}; } // make class move-only binary_reader(const binary_reader&) = delete; binary_reader(binary_reader&&) = default; binary_reader& operator=(const binary_reader&) = delete; binary_reader& operator=(binary_reader&&) = default; ~binary_reader() = default; /*! @param[in] format the binary format to parse @param[in] sax_ a SAX event processor @param[in] strict whether to expect the input to be consumed completed @param[in] tag_handler how to treat CBOR tags @return */ JSON_HEDLEY_NON_NULL(3) bool sax_parse(const input_format_t format, json_sax_t* sax_, const bool strict = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) { sax = sax_; bool result = false; switch (format) { case input_format_t::bson: result = parse_bson_internal(); break; case input_format_t::cbor: result = parse_cbor_internal(true, tag_handler); break; case input_format_t::msgpack: result = parse_msgpack_internal(); break; case input_format_t::ubjson: result = parse_ubjson_internal(); break; default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } // strict mode: next byte must be EOF if (result && strict) { if (format == input_format_t::ubjson) { get_ignore_noop(); } else { get(); } if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, exception_message(format, "expected end of input; last byte: 0x" + get_token_string(), "value"))); } } return result; } private: ////////// // BSON // ////////// /*! @brief Reads in a BSON-object and passes it to the SAX-parser. @return whether a valid BSON-value was passed to the SAX parser */ bool parse_bson_internal() { std::int32_t document_size{}; get_number(input_format_t::bson, document_size); if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) { return false; } return sax->end_object(); } /*! @brief Parses a C-style string from the BSON input. @param[in, out] result A reference to the string variable where the read string is to be stored. @return `true` if the \x00-byte indicating the end of the string was encountered before the EOF; false` indicates an unexpected EOF. */ bool get_bson_cstr(string_t& result) { auto out = std::back_inserter(result); while (true) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) { return false; } if (current == 0x00) { return true; } *out++ = static_cast(current); } } /*! @brief Parses a zero-terminated string of length @a len from the BSON input. @param[in] len The length (including the zero-byte at the end) of the string to be read. @param[in, out] result A reference to the string variable where the read string is to be stored. @tparam NumberType The type of the length @a len @pre len >= 1 @return `true` if the string was successfully parsed */ template bool get_bson_string(const NumberType len, string_t& result) { if (JSON_HEDLEY_UNLIKELY(len < 1)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "string length must be at least 1, is " + std::to_string(len), "string"))); } return get_string(input_format_t::bson, len - static_cast(1), result) && get() != std::char_traits::eof(); } /*! @brief Parses a byte array input of length @a len from the BSON input. @param[in] len The length of the byte array to be read. @param[in, out] result A reference to the binary variable where the read array is to be stored. @tparam NumberType The type of the length @a len @pre len >= 0 @return `true` if the byte array was successfully parsed */ template bool get_bson_binary(const NumberType len, binary_t& result) { if (JSON_HEDLEY_UNLIKELY(len < 0)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "byte array length cannot be negative, is " + std::to_string(len), "binary"))); } // All BSON binary values have a subtype std::uint8_t subtype{}; get_number(input_format_t::bson, subtype); result.set_subtype(subtype); return get_binary(input_format_t::bson, len, result); } /*! @brief Read a BSON document element of the given @a element_type. @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html @param[in] element_type_parse_position The position in the input stream, where the `element_type` was read. @warning Not all BSON element types are supported yet. An unsupported @a element_type will give rise to a parse_error.114: Unsupported BSON record type 0x... @return whether a valid BSON-object/array was passed to the SAX parser */ bool parse_bson_element_internal(const char_int_type element_type, const std::size_t element_type_parse_position) { switch (element_type) { case 0x01: // double { double number{}; return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); } case 0x02: // string { std::int32_t len{}; string_t value; return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); } case 0x03: // object { return parse_bson_internal(); } case 0x04: // array { return parse_bson_array(); } case 0x05: // binary { std::int32_t len{}; binary_t value; return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); } case 0x08: // boolean { return sax->boolean(get() != 0); } case 0x0A: // null { return sax->null(); } case 0x10: // int32 { std::int32_t value{}; return get_number(input_format_t::bson, value) && sax->number_integer(value); } case 0x12: // int64 { std::int64_t value{}; return get_number(input_format_t::bson, value) && sax->number_integer(value); } default: // anything else not supported (yet) { std::array cr{{}}; (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type)); return sax->parse_error(element_type_parse_position, std::string(cr.data()), parse_error::create(114, element_type_parse_position, "Unsupported BSON record type 0x" + std::string(cr.data()))); } } } /*! @brief Read a BSON element list (as specified in the BSON-spec) The same binary layout is used for objects and arrays, hence it must be indicated with the argument @a is_array which one is expected (true --> array, false --> object). @param[in] is_array Determines if the element list being read is to be treated as an object (@a is_array == false), or as an array (@a is_array == true). @return whether a valid BSON-object/array was passed to the SAX parser */ bool parse_bson_element_list(const bool is_array) { string_t key; while (auto element_type = get()) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) { return false; } const std::size_t element_type_parse_position = chars_read; if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) { return false; } if (!is_array && !sax->key(key)) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) { return false; } // get_bson_cstr only appends key.clear(); } return true; } /*! @brief Reads an array from the BSON input and passes it to the SAX-parser. @return whether a valid BSON-array was passed to the SAX parser */ bool parse_bson_array() { std::int32_t document_size{}; get_number(input_format_t::bson, document_size); if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) { return false; } return sax->end_array(); } ////////// // CBOR // ////////// /*! @param[in] get_char whether a new character should be retrieved from the input (true) or whether the last read character should be considered instead (false) @param[in] tag_handler how CBOR tags should be treated @return whether a valid CBOR value was passed to the SAX parser */ bool parse_cbor_internal(const bool get_char, const cbor_tag_handler_t tag_handler) { switch (get_char ? get() : current) { // EOF case std::char_traits::eof(): return unexpect_eof(input_format_t::cbor, "value"); // Integer 0x00..0x17 (0..23) case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0A: case 0x0B: case 0x0C: case 0x0D: case 0x0E: case 0x0F: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: return sax->number_unsigned(static_cast(current)); case 0x18: // Unsigned integer (one-byte uint8_t follows) { std::uint8_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } case 0x19: // Unsigned integer (two-byte uint16_t follows) { std::uint16_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } case 0x1A: // Unsigned integer (four-byte uint32_t follows) { std::uint32_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } case 0x1B: // Unsigned integer (eight-byte uint64_t follows) { std::uint64_t number{}; return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); } // Negative integer -1-0x00..-1-0x17 (-1..-24) case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F: case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: return sax->number_integer(static_cast(0x20 - 1 - current)); case 0x38: // Negative integer (one-byte uint8_t follows) { std::uint8_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); } case 0x39: // Negative integer -1-n (two-byte uint16_t follows) { std::uint16_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); } case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) { std::uint32_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); } case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) { std::uint64_t number{}; return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - static_cast(number)); } // Binary data (0x00..0x17 bytes follow) case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: case 0x58: // Binary data (one-byte uint8_t for n follows) case 0x59: // Binary data (two-byte uint16_t for n follow) case 0x5A: // Binary data (four-byte uint32_t for n follow) case 0x5B: // Binary data (eight-byte uint64_t for n follow) case 0x5F: // Binary data (indefinite length) { binary_t b; return get_cbor_binary(b) && sax->binary(b); } // UTF-8 string (0x00..0x17 bytes follow) case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: // UTF-8 string (one-byte uint8_t for n follows) case 0x79: // UTF-8 string (two-byte uint16_t for n follow) case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) case 0x7F: // UTF-8 string (indefinite length) { string_t s; return get_cbor_string(s) && sax->string(s); } // array (0x00..0x17 data items follow) case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: case 0x88: case 0x89: case 0x8A: case 0x8B: case 0x8C: case 0x8D: case 0x8E: case 0x8F: case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97: return get_cbor_array(static_cast(static_cast(current) & 0x1Fu), tag_handler); case 0x98: // array (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); } case 0x99: // array (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); } case 0x9A: // array (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); } case 0x9B: // array (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); } case 0x9F: // array (indefinite length) return get_cbor_array(std::size_t(-1), tag_handler); // map (0x00..0x17 pairs of data items follow) case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7: case 0xA8: case 0xA9: case 0xAA: case 0xAB: case 0xAC: case 0xAD: case 0xAE: case 0xAF: case 0xB0: case 0xB1: case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6: case 0xB7: return get_cbor_object(static_cast(static_cast(current) & 0x1Fu), tag_handler); case 0xB8: // map (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); } case 0xB9: // map (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); } case 0xBA: // map (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); } case 0xBB: // map (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); } case 0xBF: // map (indefinite length) return get_cbor_object(std::size_t(-1), tag_handler); case 0xC6: // tagged item case 0xC7: case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF: case 0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4: case 0xD8: // tagged item (1 bytes follow) case 0xD9: // tagged item (2 bytes follow) case 0xDA: // tagged item (4 bytes follow) case 0xDB: // tagged item (8 bytes follow) { switch (tag_handler) { case cbor_tag_handler_t::error: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"))); } case cbor_tag_handler_t::ignore: { switch (current) { case 0xD8: { std::uint8_t len{}; get_number(input_format_t::cbor, len); break; } case 0xD9: { std::uint16_t len{}; get_number(input_format_t::cbor, len); break; } case 0xDA: { std::uint32_t len{}; get_number(input_format_t::cbor, len); break; } case 0xDB: { std::uint64_t len{}; get_number(input_format_t::cbor, len); break; } default: break; } return parse_cbor_internal(true, tag_handler); } default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } } case 0xF4: // false return sax->boolean(false); case 0xF5: // true return sax->boolean(true); case 0xF6: // null return sax->null(); case 0xF9: // Half-Precision Float (two-byte IEEE 754) { const auto byte1_raw = get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) { return false; } const auto byte2_raw = get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) { return false; } const auto byte1 = static_cast(byte1_raw); const auto byte2 = static_cast(byte2_raw); // code from RFC 7049, Appendix D, Figure 3: // As half-precision floating-point numbers were only added // to IEEE 754 in 2008, today's programming platforms often // still only have limited support for them. It is very // easy to include at least decoding support for them even // without such support. An example of a small decoder for // half-precision floating-point numbers in the C language // is shown in Fig. 3. const auto half = static_cast((byte1 << 8u) + byte2); const double val = [&half] { const int exp = (half >> 10u) & 0x1Fu; const unsigned int mant = half & 0x3FFu; JSON_ASSERT(0 <= exp&& exp <= 32); JSON_ASSERT(mant <= 1024); switch (exp) { case 0: return std::ldexp(mant, -24); case 31: return (mant == 0) ? std::numeric_limits::infinity() : std::numeric_limits::quiet_NaN(); default: return std::ldexp(mant + 1024, exp - 25); } }(); return sax->number_float((half & 0x8000u) != 0 ? static_cast(-val) : static_cast(val), ""); } case 0xFA: // Single-Precision Float (four-byte IEEE 754) { float number{}; return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); } case 0xFB: // Double-Precision Float (eight-byte IEEE 754) { double number{}; return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); } default: // anything else (0xFF is handled inside the other types) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"))); } } } /*! @brief reads a CBOR string This function first reads starting bytes to determine the expected string length and then copies this number of bytes into a string. Additionally, CBOR's strings with indefinite lengths are supported. @param[out] result created string @return whether string creation completed */ bool get_cbor_string(string_t& result) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) { return false; } switch (current) { // UTF-8 string (0x00..0x17 bytes follow) case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: { return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); } case 0x78: // UTF-8 string (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x79: // UTF-8 string (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); } case 0x7F: // UTF-8 string (indefinite length) { while (get() != 0xFF) { string_t chunk; if (!get_cbor_string(chunk)) { return false; } result.append(chunk); } return true; } default: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x" + last_token, "string"))); } } } /*! @brief reads a CBOR byte array This function first reads starting bytes to determine the expected byte array length and then copies this number of bytes into the byte array. Additionally, CBOR's byte arrays with indefinite lengths are supported. @param[out] result created byte array @return whether byte array creation completed */ bool get_cbor_binary(binary_t& result) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) { return false; } switch (current) { // Binary data (0x00..0x17 bytes follow) case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: { return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); } case 0x58: // Binary data (one-byte uint8_t for n follows) { std::uint8_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x59: // Binary data (two-byte uint16_t for n follow) { std::uint16_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x5A: // Binary data (four-byte uint32_t for n follow) { std::uint32_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x5B: // Binary data (eight-byte uint64_t for n follow) { std::uint64_t len{}; return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result); } case 0x5F: // Binary data (indefinite length) { while (get() != 0xFF) { binary_t chunk; if (!get_cbor_binary(chunk)) { return false; } result.insert(result.end(), chunk.begin(), chunk.end()); } return true; } default: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x" + last_token, "binary"))); } } } /*! @param[in] len the length of the array or std::size_t(-1) for an array of indefinite size @param[in] tag_handler how CBOR tags should be treated @return whether array creation completed */ bool get_cbor_array(const std::size_t len, const cbor_tag_handler_t tag_handler) { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) { return false; } if (len != std::size_t(-1)) { for (std::size_t i = 0; i < len; ++i) { if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) { return false; } } } else { while (get() != 0xFF) { if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) { return false; } } } return sax->end_array(); } /*! @param[in] len the length of the object or std::size_t(-1) for an object of indefinite size @param[in] tag_handler how CBOR tags should be treated @return whether object creation completed */ bool get_cbor_object(const std::size_t len, const cbor_tag_handler_t tag_handler) { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) { return false; } string_t key; if (len != std::size_t(-1)) { for (std::size_t i = 0; i < len; ++i) { get(); if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) { return false; } key.clear(); } } else { while (get() != 0xFF) { if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) { return false; } key.clear(); } } return sax->end_object(); } ///////////// // MsgPack // ///////////// /*! @return whether a valid MessagePack value was passed to the SAX parser */ bool parse_msgpack_internal() { switch (get()) { // EOF case std::char_traits::eof(): return unexpect_eof(input_format_t::msgpack, "value"); // positive fixint case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0A: case 0x0B: case 0x0C: case 0x0D: case 0x0E: case 0x0F: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A: case 0x1B: case 0x1C: case 0x1D: case 0x1E: case 0x1F: case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F: case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3C: case 0x3D: case 0x3E: case 0x3F: case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47: case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F: case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: case 0x58: case 0x59: case 0x5A: case 0x5B: case 0x5C: case 0x5D: case 0x5E: case 0x5F: case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67: case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F: case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E: case 0x7F: return sax->number_unsigned(static_cast(current)); // fixmap case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: case 0x88: case 0x89: case 0x8A: case 0x8B: case 0x8C: case 0x8D: case 0x8E: case 0x8F: return get_msgpack_object(static_cast(static_cast(current) & 0x0Fu)); // fixarray case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97: case 0x98: case 0x99: case 0x9A: case 0x9B: case 0x9C: case 0x9D: case 0x9E: case 0x9F: return get_msgpack_array(static_cast(static_cast(current) & 0x0Fu)); // fixstr case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7: case 0xA8: case 0xA9: case 0xAA: case 0xAB: case 0xAC: case 0xAD: case 0xAE: case 0xAF: case 0xB0: case 0xB1: case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6: case 0xB7: case 0xB8: case 0xB9: case 0xBA: case 0xBB: case 0xBC: case 0xBD: case 0xBE: case 0xBF: case 0xD9: // str 8 case 0xDA: // str 16 case 0xDB: // str 32 { string_t s; return get_msgpack_string(s) && sax->string(s); } case 0xC0: // nil return sax->null(); case 0xC2: // false return sax->boolean(false); case 0xC3: // true return sax->boolean(true); case 0xC4: // bin 8 case 0xC5: // bin 16 case 0xC6: // bin 32 case 0xC7: // ext 8 case 0xC8: // ext 16 case 0xC9: // ext 32 case 0xD4: // fixext 1 case 0xD5: // fixext 2 case 0xD6: // fixext 4 case 0xD7: // fixext 8 case 0xD8: // fixext 16 { binary_t b; return get_msgpack_binary(b) && sax->binary(b); } case 0xCA: // float 32 { float number{}; return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); } case 0xCB: // float 64 { double number{}; return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); } case 0xCC: // uint 8 { std::uint8_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xCD: // uint 16 { std::uint16_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xCE: // uint 32 { std::uint32_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xCF: // uint 64 { std::uint64_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); } case 0xD0: // int 8 { std::int8_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xD1: // int 16 { std::int16_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xD2: // int 32 { std::int32_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xD3: // int 64 { std::int64_t number{}; return get_number(input_format_t::msgpack, number) && sax->number_integer(number); } case 0xDC: // array 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); } case 0xDD: // array 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); } case 0xDE: // map 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); } case 0xDF: // map 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); } // negative fixint case 0xE0: case 0xE1: case 0xE2: case 0xE3: case 0xE4: case 0xE5: case 0xE6: case 0xE7: case 0xE8: case 0xE9: case 0xEA: case 0xEB: case 0xEC: case 0xED: case 0xEE: case 0xEF: case 0xF0: case 0xF1: case 0xF2: case 0xF3: case 0xF4: case 0xF5: case 0xF6: case 0xF7: case 0xF8: case 0xF9: case 0xFA: case 0xFB: case 0xFC: case 0xFD: case 0xFE: case 0xFF: return sax->number_integer(static_cast(current)); default: // anything else { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, "invalid byte: 0x" + last_token, "value"))); } } } /*! @brief reads a MessagePack string This function first reads starting bytes to determine the expected string length and then copies this number of bytes into a string. @param[out] result created string @return whether string creation completed */ bool get_msgpack_string(string_t& result) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) { return false; } switch (current) { // fixstr case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: case 0xA5: case 0xA6: case 0xA7: case 0xA8: case 0xA9: case 0xAA: case 0xAB: case 0xAC: case 0xAD: case 0xAE: case 0xAF: case 0xB0: case 0xB1: case 0xB2: case 0xB3: case 0xB4: case 0xB5: case 0xB6: case 0xB7: case 0xB8: case 0xB9: case 0xBA: case 0xBB: case 0xBC: case 0xBD: case 0xBE: case 0xBF: { return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); } case 0xD9: // str 8 { std::uint8_t len{}; return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); } case 0xDA: // str 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); } case 0xDB: // str 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); } default: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, "expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x" + last_token, "string"))); } } } /*! @brief reads a MessagePack byte array This function first reads starting bytes to determine the expected byte array length and then copies this number of bytes into a byte array. @param[out] result created byte array @return whether byte array creation completed */ bool get_msgpack_binary(binary_t& result) { // helper function to set the subtype auto assign_and_return_true = [&result](std::int8_t subtype) { result.set_subtype(static_cast(subtype)); return true; }; switch (current) { case 0xC4: // bin 8 { std::uint8_t len{}; return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result); } case 0xC5: // bin 16 { std::uint16_t len{}; return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result); } case 0xC6: // bin 32 { std::uint32_t len{}; return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result); } case 0xC7: // ext 8 { std::uint8_t len{}; std::int8_t subtype{}; return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype); } case 0xC8: // ext 16 { std::uint16_t len{}; std::int8_t subtype{}; return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype); } case 0xC9: // ext 32 { std::uint32_t len{}; std::int8_t subtype{}; return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype); } case 0xD4: // fixext 1 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 1, result) && assign_and_return_true(subtype); } case 0xD5: // fixext 2 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 2, result) && assign_and_return_true(subtype); } case 0xD6: // fixext 4 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 4, result) && assign_and_return_true(subtype); } case 0xD7: // fixext 8 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 8, result) && assign_and_return_true(subtype); } case 0xD8: // fixext 16 { std::int8_t subtype{}; return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 16, result) && assign_and_return_true(subtype); } default: // LCOV_EXCL_LINE return false; // LCOV_EXCL_LINE } } /*! @param[in] len the length of the array @return whether array creation completed */ bool get_msgpack_array(const std::size_t len) { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) { return false; } for (std::size_t i = 0; i < len; ++i) { if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) { return false; } } return sax->end_array(); } /*! @param[in] len the length of the object @return whether object creation completed */ bool get_msgpack_object(const std::size_t len) { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) { return false; } string_t key; for (std::size_t i = 0; i < len; ++i) { get(); if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) { return false; } key.clear(); } return sax->end_object(); } //////////// // UBJSON // //////////// /*! @param[in] get_char whether a new character should be retrieved from the input (true, default) or whether the last read character should be considered instead @return whether a valid UBJSON value was passed to the SAX parser */ bool parse_ubjson_internal(const bool get_char = true) { return get_ubjson_value(get_char ? get_ignore_noop() : current); } /*! @brief reads a UBJSON string This function is either called after reading the 'S' byte explicitly indicating a string, or in case of an object key where the 'S' byte can be left out. @param[out] result created string @param[in] get_char whether a new character should be retrieved from the input (true, default) or whether the last read character should be considered instead @return whether string creation completed */ bool get_ubjson_string(string_t& result, const bool get_char = true) { if (get_char) { get(); // TODO(niels): may we ignore N here? } if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) { return false; } switch (current) { case 'U': { std::uint8_t len{}; return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); } case 'i': { std::int8_t len{}; return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); } case 'I': { std::int16_t len{}; return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); } case 'l': { std::int32_t len{}; return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); } case 'L': { std::int64_t len{}; return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); } default: auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token, "string"))); } } /*! @param[out] result determined size @return whether size determination completed */ bool get_ubjson_size_value(std::size_t& result) { switch (get_ignore_noop()) { case 'U': { std::uint8_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) { return false; } result = static_cast(number); return true; } case 'i': { std::int8_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) { return false; } result = static_cast(number); return true; } case 'I': { std::int16_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) { return false; } result = static_cast(number); return true; } case 'l': { std::int32_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) { return false; } result = static_cast(number); return true; } case 'L': { std::int64_t number{}; if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) { return false; } result = static_cast(number); return true; } default: { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token, "size"))); } } } /*! @brief determine the type and size for a container In the optimized UBJSON format, a type and a size can be provided to allow for a more compact representation. @param[out] result pair of the size and the type @return whether pair creation completed */ bool get_ubjson_size_type(std::pair& result) { result.first = string_t::npos; // size result.second = 0; // type get_ignore_noop(); if (current == '$') { result.second = get(); // must not ignore 'N', because 'N' maybe the type if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "type"))) { return false; } get_ignore_noop(); if (JSON_HEDLEY_UNLIKELY(current != '#')) { if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) { return false; } auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "expected '#' after type information; last byte: 0x" + last_token, "size"))); } return get_ubjson_size_value(result.first); } if (current == '#') { return get_ubjson_size_value(result.first); } return true; } /*! @param prefix the previously read or set type prefix @return whether value creation completed */ bool get_ubjson_value(const char_int_type prefix) { switch (prefix) { case std::char_traits::eof(): // EOF return unexpect_eof(input_format_t::ubjson, "value"); case 'T': // true return sax->boolean(true); case 'F': // false return sax->boolean(false); case 'Z': // null return sax->null(); case 'U': { std::uint8_t number{}; return get_number(input_format_t::ubjson, number) && sax->number_unsigned(number); } case 'i': { std::int8_t number{}; return get_number(input_format_t::ubjson, number) && sax->number_integer(number); } case 'I': { std::int16_t number{}; return get_number(input_format_t::ubjson, number) && sax->number_integer(number); } case 'l': { std::int32_t number{}; return get_number(input_format_t::ubjson, number) && sax->number_integer(number); } case 'L': { std::int64_t number{}; return get_number(input_format_t::ubjson, number) && sax->number_integer(number); } case 'd': { float number{}; return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); } case 'D': { double number{}; return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); } case 'H': { return get_ubjson_high_precision_number(); } case 'C': // char { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "char"))) { return false; } if (JSON_HEDLEY_UNLIKELY(current > 127)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + last_token, "char"))); } string_t s(1, static_cast(current)); return sax->string(s); } case 'S': // string { string_t s; return get_ubjson_string(s) && sax->string(s); } case '[': // array return get_ubjson_array(); case '{': // object return get_ubjson_object(); default: // anything else { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "invalid byte: 0x" + last_token, "value"))); } } } /*! @return whether array creation completed */ bool get_ubjson_array() { std::pair size_and_type; if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) { return false; } if (size_and_type.first != string_t::npos) { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) { return false; } if (size_and_type.second != 0) { if (size_and_type.second != 'N') { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) { return false; } } } } else { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) { return false; } } } } else { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) { return false; } while (current != ']') { if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) { return false; } get_ignore_noop(); } } return sax->end_array(); } /*! @return whether object creation completed */ bool get_ubjson_object() { std::pair size_and_type; if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) { return false; } string_t key; if (size_and_type.first != string_t::npos) { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) { return false; } if (size_and_type.second != 0) { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) { return false; } key.clear(); } } else { for (std::size_t i = 0; i < size_and_type.first; ++i) { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) { return false; } key.clear(); } } } else { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) { return false; } while (current != '}') { if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) { return false; } if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) { return false; } get_ignore_noop(); key.clear(); } } return sax->end_object(); } // Note, no reader for UBJSON binary types is implemented because they do // not exist bool get_ubjson_high_precision_number() { // get size of following number string std::size_t size{}; auto res = get_ubjson_size_value(size); if (JSON_HEDLEY_UNLIKELY(!res)) { return res; } // get number string std::vector number_vector; for (std::size_t i = 0; i < size; ++i) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "number"))) { return false; } number_vector.push_back(static_cast(current)); } // parse number string auto number_ia = detail::input_adapter(std::forward(number_vector)); auto number_lexer = detail::lexer(std::move(number_ia), false); const auto result_number = number_lexer.scan(); const auto number_string = number_lexer.get_token_string(); const auto result_remainder = number_lexer.scan(); using token_type = typename detail::lexer_base::token_type; if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) { return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"))); } switch (result_number) { case token_type::value_integer: return sax->number_integer(number_lexer.get_number_integer()); case token_type::value_unsigned: return sax->number_unsigned(number_lexer.get_number_unsigned()); case token_type::value_float: return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); default: return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"))); } } /////////////////////// // Utility functions // /////////////////////// /*! @brief get next character from the input This function provides the interface to the used input adapter. It does not throw in case the input reached EOF, but returns a -'ve valued `std::char_traits::eof()` in that case. @return character read from the input */ char_int_type get() { ++chars_read; return current = ia.get_character(); } /*! @return character read from the input after ignoring all 'N' entries */ char_int_type get_ignore_noop() { do { get(); } while (current == 'N'); return current; } /* @brief read a number from the input @tparam NumberType the type of the number @param[in] format the current format (for diagnostics) @param[out] result number of type @a NumberType @return whether conversion completed @note This function needs to respect the system's endianness, because bytes in CBOR, MessagePack, and UBJSON are stored in network order (big endian) and therefore need reordering on little endian systems. */ template bool get_number(const input_format_t format, NumberType& result) { // step 1: read input into array with system's byte order std::array vec; for (std::size_t i = 0; i < sizeof(NumberType); ++i) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number"))) { return false; } // reverse byte order prior to conversion if necessary if (is_little_endian != InputIsLittleEndian) { vec[sizeof(NumberType) - i - 1] = static_cast(current); } else { vec[i] = static_cast(current); // LCOV_EXCL_LINE } } // step 2: convert array into number of type T and return std::memcpy(&result, vec.data(), sizeof(NumberType)); return true; } /*! @brief create a string by reading characters from the input @tparam NumberType the type of the number @param[in] format the current format (for diagnostics) @param[in] len number of characters to read @param[out] result string created by reading @a len bytes @return whether string creation completed @note We can not reserve @a len bytes for the result, because @a len may be too large. Usually, @ref unexpect_eof() detects the end of the input before we run out of string memory. */ template bool get_string(const input_format_t format, const NumberType len, string_t& result) { bool success = true; for (NumberType i = 0; i < len; i++) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) { success = false; break; } result.push_back(static_cast(current)); }; return success; } /*! @brief create a byte array by reading bytes from the input @tparam NumberType the type of the number @param[in] format the current format (for diagnostics) @param[in] len number of bytes to read @param[out] result byte array created by reading @a len bytes @return whether byte array creation completed @note We can not reserve @a len bytes for the result, because @a len may be too large. Usually, @ref unexpect_eof() detects the end of the input before we run out of memory. */ template bool get_binary(const input_format_t format, const NumberType len, binary_t& result) { bool success = true; for (NumberType i = 0; i < len; i++) { get(); if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) { success = false; break; } result.push_back(static_cast(current)); } return success; } /*! @param[in] format the current format (for diagnostics) @param[in] context further context information (for diagnostics) @return whether the last read character is not EOF */ JSON_HEDLEY_NON_NULL(3) bool unexpect_eof(const input_format_t format, const char* context) const { if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) { return sax->parse_error(chars_read, "", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context))); } return true; } /*! @return a string representation of the last read byte */ std::string get_token_string() const { std::array cr{{}}; (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current)); return std::string{cr.data()}; } /*! @param[in] format the current format @param[in] detail a detailed error message @param[in] context further context information @return a message string to use in the parse_error exceptions */ std::string exception_message(const input_format_t format, const std::string& detail, const std::string& context) const { std::string error_msg = "syntax error while parsing "; switch (format) { case input_format_t::cbor: error_msg += "CBOR"; break; case input_format_t::msgpack: error_msg += "MessagePack"; break; case input_format_t::ubjson: error_msg += "UBJSON"; break; case input_format_t::bson: error_msg += "BSON"; break; default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } return error_msg + " " + context + ": " + detail; } private: /// input adapter InputAdapterType ia; /// the current character char_int_type current = std::char_traits::eof(); /// the number of characters read std::size_t chars_read = 0; /// whether we can assume little endianness const bool is_little_endian = little_endianess(); /// the SAX parser json_sax_t* sax = nullptr; }; } // namespace detail } // namespace nlohmann // #include // #include // #include #include // isfinite #include // uint8_t #include // function #include // string #include // move #include // vector // #include // #include // #include // #include // #include // #include // #include namespace nlohmann { namespace detail { //////////// // parser // //////////// enum class parse_event_t : uint8_t { /// the parser read `{` and started to process a JSON object object_start, /// the parser read `}` and finished processing a JSON object object_end, /// the parser read `[` and started to process a JSON array array_start, /// the parser read `]` and finished processing a JSON array array_end, /// the parser read a key of a value in an object key, /// the parser finished reading a JSON value value }; template using parser_callback_t = std::function; /*! @brief syntax analysis This class implements a recursive descent parser. */ template class parser { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; using lexer_t = lexer; using token_type = typename lexer_t::token_type; public: /// a parser reading from an input adapter explicit parser(InputAdapterType&& adapter, const parser_callback_t cb = nullptr, const bool allow_exceptions_ = true, const bool skip_comments = false) : callback(cb) , m_lexer(std::move(adapter), skip_comments) , allow_exceptions(allow_exceptions_) { // read first token get_token(); } /*! @brief public parser interface @param[in] strict whether to expect the last token to be EOF @param[in,out] result parsed JSON value @throw parse_error.101 in case of an unexpected token @throw parse_error.102 if to_unicode fails or surrogate error @throw parse_error.103 if to_unicode fails */ void parse(const bool strict, BasicJsonType& result) { if (callback) { json_sax_dom_callback_parser sdp(result, callback, allow_exceptions); sax_parse_internal(&sdp); result.assert_invariant(); // in strict mode, input must be completely read if (strict && (get_token() != token_type::end_of_input)) { sdp.parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"))); } // in case of an error, return discarded value if (sdp.is_errored()) { result = value_t::discarded; return; } // set top-level value to null if it was discarded by the callback // function if (result.is_discarded()) { result = nullptr; } } else { json_sax_dom_parser sdp(result, allow_exceptions); sax_parse_internal(&sdp); result.assert_invariant(); // in strict mode, input must be completely read if (strict && (get_token() != token_type::end_of_input)) { sdp.parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"))); } // in case of an error, return discarded value if (sdp.is_errored()) { result = value_t::discarded; return; } } } /*! @brief public accept interface @param[in] strict whether to expect the last token to be EOF @return whether the input is a proper JSON text */ bool accept(const bool strict = true) { json_sax_acceptor sax_acceptor; return sax_parse(&sax_acceptor, strict); } template JSON_HEDLEY_NON_NULL(2) bool sax_parse(SAX* sax, const bool strict = true) { (void)detail::is_sax_static_asserts {}; const bool result = sax_parse_internal(sax); // strict mode: next byte must be EOF if (result && strict && (get_token() != token_type::end_of_input)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"))); } return result; } private: template JSON_HEDLEY_NON_NULL(2) bool sax_parse_internal(SAX* sax) { // stack to remember the hierarchy of structured values we are parsing // true = array; false = object std::vector states; // value to avoid a goto (see comment where set to true) bool skip_to_state_evaluation = false; while (true) { if (!skip_to_state_evaluation) { // invariant: get_token() was called before each iteration switch (last_token) { case token_type::begin_object: { if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) { return false; } // closing } -> we are done if (get_token() == token_type::end_object) { if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) { return false; } break; } // parse key if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"))); } if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) { return false; } // parse separator (:) if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"))); } // remember we are now inside an object states.push_back(false); // parse values get_token(); continue; } case token_type::begin_array: { if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) { return false; } // closing ] -> we are done if (get_token() == token_type::end_array) { if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) { return false; } break; } // remember we are now inside an array states.push_back(true); // parse values (no need to call get_token) continue; } case token_type::value_float: { const auto res = m_lexer.get_number_float(); if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), out_of_range::create(406, "number overflow parsing '" + m_lexer.get_token_string() + "'")); } if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) { return false; } break; } case token_type::literal_false: { if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) { return false; } break; } case token_type::literal_null: { if (JSON_HEDLEY_UNLIKELY(!sax->null())) { return false; } break; } case token_type::literal_true: { if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) { return false; } break; } case token_type::value_integer: { if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) { return false; } break; } case token_type::value_string: { if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) { return false; } break; } case token_type::value_unsigned: { if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) { return false; } break; } case token_type::parse_error: { // using "uninitialized" to avoid "expected" message return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"))); } default: // the last token was unexpected { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"))); } } } else { skip_to_state_evaluation = false; } // we reached this line after we successfully parsed a value if (states.empty()) { // empty stack: we reached the end of the hierarchy: done return true; } if (states.back()) // array { // comma -> next value if (get_token() == token_type::value_separator) { // parse a new value get_token(); continue; } // closing ] if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) { if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) { return false; } // We are done with this array. Before we can parse a // new value, we need to evaluate the new state first. // By setting skip_to_state_evaluation to false, we // are effectively jumping to the beginning of this if. JSON_ASSERT(!states.empty()); states.pop_back(); skip_to_state_evaluation = true; continue; } return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"))); } else // object { // comma -> next value if (get_token() == token_type::value_separator) { // parse key if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"))); } if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) { return false; } // parse separator (:) if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"))); } // parse values get_token(); continue; } // closing } if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) { if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) { return false; } // We are done with this object. Before we can parse a // new value, we need to evaluate the new state first. // By setting skip_to_state_evaluation to false, we // are effectively jumping to the beginning of this if. JSON_ASSERT(!states.empty()); states.pop_back(); skip_to_state_evaluation = true; continue; } return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"))); } } } /// get next token from lexer token_type get_token() { return last_token = m_lexer.scan(); } std::string exception_message(const token_type expected, const std::string& context) { std::string error_msg = "syntax error "; if (!context.empty()) { error_msg += "while parsing " + context + " "; } error_msg += "- "; if (last_token == token_type::parse_error) { error_msg += std::string(m_lexer.get_error_message()) + "; last read: '" + m_lexer.get_token_string() + "'"; } else { error_msg += "unexpected " + std::string(lexer_t::token_type_name(last_token)); } if (expected != token_type::uninitialized) { error_msg += "; expected " + std::string(lexer_t::token_type_name(expected)); } return error_msg; } private: /// callback function const parser_callback_t callback = nullptr; /// the type of the last read token token_type last_token = token_type::uninitialized; /// the lexer lexer_t m_lexer; /// whether to throw exceptions in case of errors const bool allow_exceptions = true; }; } // namespace detail } // namespace nlohmann // #include // #include #include // ptrdiff_t #include // numeric_limits namespace nlohmann { namespace detail { /* @brief an iterator for primitive JSON types This class models an iterator for primitive JSON types (boolean, number, string). It's only purpose is to allow the iterator/const_iterator classes to "iterate" over primitive values. Internally, the iterator is modeled by a `difference_type` variable. Value begin_value (`0`) models the begin, end_value (`1`) models past the end. */ class primitive_iterator_t { private: using difference_type = std::ptrdiff_t; static constexpr difference_type begin_value = 0; static constexpr difference_type end_value = begin_value + 1; /// iterator as signed integer type difference_type m_it = (std::numeric_limits::min)(); public: constexpr difference_type get_value() const noexcept { return m_it; } /// set iterator to a defined beginning void set_begin() noexcept { m_it = begin_value; } /// set iterator to a defined past the end void set_end() noexcept { m_it = end_value; } /// return whether the iterator can be dereferenced constexpr bool is_begin() const noexcept { return m_it == begin_value; } /// return whether the iterator is at end constexpr bool is_end() const noexcept { return m_it == end_value; } friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept { return lhs.m_it == rhs.m_it; } friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept { return lhs.m_it < rhs.m_it; } primitive_iterator_t operator+(difference_type n) noexcept { auto result = *this; result += n; return result; } friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept { return lhs.m_it - rhs.m_it; } primitive_iterator_t& operator++() noexcept { ++m_it; return *this; } primitive_iterator_t const operator++(int) noexcept { auto result = *this; ++m_it; return result; } primitive_iterator_t& operator--() noexcept { --m_it; return *this; } primitive_iterator_t const operator--(int) noexcept { auto result = *this; --m_it; return result; } primitive_iterator_t& operator+=(difference_type n) noexcept { m_it += n; return *this; } primitive_iterator_t& operator-=(difference_type n) noexcept { m_it -= n; return *this; } }; } // namespace detail } // namespace nlohmann namespace nlohmann { namespace detail { /*! @brief an iterator value @note This structure could easily be a union, but MSVC currently does not allow unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. */ template struct internal_iterator { /// iterator for JSON objects typename BasicJsonType::object_t::iterator object_iterator {}; /// iterator for JSON arrays typename BasicJsonType::array_t::iterator array_iterator {}; /// generic iterator for all other types primitive_iterator_t primitive_iterator {}; }; } // namespace detail } // namespace nlohmann // #include #include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next #include // conditional, is_const, remove_const // #include // #include // #include // #include // #include // #include // #include namespace nlohmann { namespace detail { // forward declare, to be able to friend it later on template class iteration_proxy; template class iteration_proxy_value; /*! @brief a template for a bidirectional iterator for the @ref basic_json class This class implements a both iterators (iterator and const_iterator) for the @ref basic_json class. @note An iterator is called *initialized* when a pointer to a JSON value has been set (e.g., by a constructor or a copy assignment). If the iterator is default-constructed, it is *uninitialized* and most methods are undefined. **The library uses assertions to detect calls on uninitialized iterators.** @requirement The class satisfies the following concept requirements: - [BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): The iterator that can be moved can be moved in both directions (i.e. incremented and decremented). @since version 1.0.0, simplified in version 2.0.9, change to bidirectional iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) */ template class iter_impl { /// allow basic_json to access private members friend iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; friend BasicJsonType; friend iteration_proxy; friend iteration_proxy_value; using object_t = typename BasicJsonType::object_t; using array_t = typename BasicJsonType::array_t; // make sure BasicJsonType is basic_json or const basic_json static_assert(is_basic_json::type>::value, "iter_impl only accepts (const) basic_json"); public: /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. /// The C++ Standard has never required user-defined iterators to derive from std::iterator. /// A user-defined iterator should provide publicly accessible typedefs named /// iterator_category, value_type, difference_type, pointer, and reference. /// Note that value_type is required to be non-const, even for constant iterators. using iterator_category = std::bidirectional_iterator_tag; /// the type of the values when the iterator is dereferenced using value_type = typename BasicJsonType::value_type; /// a type to represent differences between iterators using difference_type = typename BasicJsonType::difference_type; /// defines a pointer to the type iterated over (value_type) using pointer = typename std::conditional::value, typename BasicJsonType::const_pointer, typename BasicJsonType::pointer>::type; /// defines a reference to the type iterated over (value_type) using reference = typename std::conditional::value, typename BasicJsonType::const_reference, typename BasicJsonType::reference>::type; /// default constructor iter_impl() = default; /*! @brief constructor for a given JSON instance @param[in] object pointer to a JSON object for this iterator @pre object != nullptr @post The iterator is initialized; i.e. `m_object != nullptr`. */ explicit iter_impl(pointer object) noexcept : m_object(object) { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: { m_it.object_iterator = typename object_t::iterator(); break; } case value_t::array: { m_it.array_iterator = typename array_t::iterator(); break; } default: { m_it.primitive_iterator = primitive_iterator_t(); break; } } } /*! @note The conventional copy constructor and copy assignment are implicitly defined. Combined with the following converting constructor and assignment, they support: (1) copy from iterator to iterator, (2) copy from const iterator to const iterator, and (3) conversion from iterator to const iterator. However conversion from const iterator to iterator is not defined. */ /*! @brief const copy constructor @param[in] other const iterator to copy from @note This copy constructor had to be defined explicitly to circumvent a bug occurring on msvc v19.0 compiler (VS 2015) debug build. For more information refer to: https://github.com/nlohmann/json/issues/1608 */ iter_impl(const iter_impl& other) noexcept : m_object(other.m_object), m_it(other.m_it) {} /*! @brief converting assignment @param[in] other const iterator to copy from @return const/non-const iterator @note It is not checked whether @a other is initialized. */ iter_impl& operator=(const iter_impl& other) noexcept { m_object = other.m_object; m_it = other.m_it; return *this; } /*! @brief converting constructor @param[in] other non-const iterator to copy from @note It is not checked whether @a other is initialized. */ iter_impl(const iter_impl::type>& other) noexcept : m_object(other.m_object), m_it(other.m_it) {} /*! @brief converting assignment @param[in] other non-const iterator to copy from @return const/non-const iterator @note It is not checked whether @a other is initialized. */ iter_impl& operator=(const iter_impl::type>& other) noexcept { m_object = other.m_object; m_it = other.m_it; return *this; } private: /*! @brief set the iterator to the first value @pre The iterator is initialized; i.e. `m_object != nullptr`. */ void set_begin() noexcept { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: { m_it.object_iterator = m_object->m_value.object->begin(); break; } case value_t::array: { m_it.array_iterator = m_object->m_value.array->begin(); break; } case value_t::null: { // set to end so begin()==end() is true: null is empty m_it.primitive_iterator.set_end(); break; } default: { m_it.primitive_iterator.set_begin(); break; } } } /*! @brief set the iterator past the last value @pre The iterator is initialized; i.e. `m_object != nullptr`. */ void set_end() noexcept { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: { m_it.object_iterator = m_object->m_value.object->end(); break; } case value_t::array: { m_it.array_iterator = m_object->m_value.array->end(); break; } default: { m_it.primitive_iterator.set_end(); break; } } } public: /*! @brief return a reference to the value pointed to by the iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ reference operator*() const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: { JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); return m_it.object_iterator->second; } case value_t::array: { JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); return *m_it.array_iterator; } case value_t::null: JSON_THROW(invalid_iterator::create(214, "cannot get value")); default: { if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) { return *m_object; } JSON_THROW(invalid_iterator::create(214, "cannot get value")); } } } /*! @brief dereference the iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ pointer operator->() const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: { JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); return &(m_it.object_iterator->second); } case value_t::array: { JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); return &*m_it.array_iterator; } default: { if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) { return m_object; } JSON_THROW(invalid_iterator::create(214, "cannot get value")); } } } /*! @brief post-increment (it++) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl const operator++(int) { auto result = *this; ++(*this); return result; } /*! @brief pre-increment (++it) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator++() { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: { std::advance(m_it.object_iterator, 1); break; } case value_t::array: { std::advance(m_it.array_iterator, 1); break; } default: { ++m_it.primitive_iterator; break; } } return *this; } /*! @brief post-decrement (it--) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl const operator--(int) { auto result = *this; --(*this); return result; } /*! @brief pre-decrement (--it) @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator--() { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: { std::advance(m_it.object_iterator, -1); break; } case value_t::array: { std::advance(m_it.array_iterator, -1); break; } default: { --m_it.primitive_iterator; break; } } return *this; } /*! @brief comparison: equal @pre The iterator is initialized; i.e. `m_object != nullptr`. */ bool operator==(const iter_impl& other) const { // if objects are not the same, the comparison is undefined if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) { JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); } JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: return (m_it.object_iterator == other.m_it.object_iterator); case value_t::array: return (m_it.array_iterator == other.m_it.array_iterator); default: return (m_it.primitive_iterator == other.m_it.primitive_iterator); } } /*! @brief comparison: not equal @pre The iterator is initialized; i.e. `m_object != nullptr`. */ bool operator!=(const iter_impl& other) const { return !operator==(other); } /*! @brief comparison: smaller @pre The iterator is initialized; i.e. `m_object != nullptr`. */ bool operator<(const iter_impl& other) const { // if objects are not the same, the comparison is undefined if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) { JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); } JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators")); case value_t::array: return (m_it.array_iterator < other.m_it.array_iterator); default: return (m_it.primitive_iterator < other.m_it.primitive_iterator); } } /*! @brief comparison: less than or equal @pre The iterator is initialized; i.e. `m_object != nullptr`. */ bool operator<=(const iter_impl& other) const { return !other.operator < (*this); } /*! @brief comparison: greater than @pre The iterator is initialized; i.e. `m_object != nullptr`. */ bool operator>(const iter_impl& other) const { return !operator<=(other); } /*! @brief comparison: greater than or equal @pre The iterator is initialized; i.e. `m_object != nullptr`. */ bool operator>=(const iter_impl& other) const { return !operator<(other); } /*! @brief add to iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator+=(difference_type i) { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators")); case value_t::array: { std::advance(m_it.array_iterator, i); break; } default: { m_it.primitive_iterator += i; break; } } return *this; } /*! @brief subtract from iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl& operator-=(difference_type i) { return operator+=(-i); } /*! @brief add to iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl operator+(difference_type i) const { auto result = *this; result += i; return result; } /*! @brief addition of distance and iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ friend iter_impl operator+(difference_type i, const iter_impl& it) { auto result = it; result += i; return result; } /*! @brief subtract from iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ iter_impl operator-(difference_type i) const { auto result = *this; result -= i; return result; } /*! @brief return difference @pre The iterator is initialized; i.e. `m_object != nullptr`. */ difference_type operator-(const iter_impl& other) const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators")); case value_t::array: return m_it.array_iterator - other.m_it.array_iterator; default: return m_it.primitive_iterator - other.m_it.primitive_iterator; } } /*! @brief access to successor @pre The iterator is initialized; i.e. `m_object != nullptr`. */ reference operator[](difference_type n) const { JSON_ASSERT(m_object != nullptr); switch (m_object->m_type) { case value_t::object: JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators")); case value_t::array: return *std::next(m_it.array_iterator, n); case value_t::null: JSON_THROW(invalid_iterator::create(214, "cannot get value")); default: { if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) { return *m_object; } JSON_THROW(invalid_iterator::create(214, "cannot get value")); } } } /*! @brief return the key of an object iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ const typename object_t::key_type& key() const { JSON_ASSERT(m_object != nullptr); if (JSON_HEDLEY_LIKELY(m_object->is_object())) { return m_it.object_iterator->first; } JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators")); } /*! @brief return the value of an iterator @pre The iterator is initialized; i.e. `m_object != nullptr`. */ reference value() const { return operator*(); } private: /// associated JSON instance pointer m_object = nullptr; /// the actual iterator of the associated instance internal_iterator::type> m_it {}; }; } // namespace detail } // namespace nlohmann // #include // #include #include // ptrdiff_t #include // reverse_iterator #include // declval namespace nlohmann { namespace detail { ////////////////////// // reverse_iterator // ////////////////////// /*! @brief a template for a reverse iterator class @tparam Base the base iterator type to reverse. Valid types are @ref iterator (to create @ref reverse_iterator) and @ref const_iterator (to create @ref const_reverse_iterator). @requirement The class satisfies the following concept requirements: - [BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): The iterator that can be moved can be moved in both directions (i.e. incremented and decremented). - [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): It is possible to write to the pointed-to element (only if @a Base is @ref iterator). @since version 1.0.0 */ template class json_reverse_iterator : public std::reverse_iterator { public: using difference_type = std::ptrdiff_t; /// shortcut to the reverse iterator adapter using base_iterator = std::reverse_iterator; /// the reference type for the pointed-to element using reference = typename Base::reference; /// create reverse iterator from iterator explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept : base_iterator(it) {} /// create reverse iterator from base class explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} /// post-increment (it++) json_reverse_iterator const operator++(int) { return static_cast(base_iterator::operator++(1)); } /// pre-increment (++it) json_reverse_iterator& operator++() { return static_cast(base_iterator::operator++()); } /// post-decrement (it--) json_reverse_iterator const operator--(int) { return static_cast(base_iterator::operator--(1)); } /// pre-decrement (--it) json_reverse_iterator& operator--() { return static_cast(base_iterator::operator--()); } /// add to iterator json_reverse_iterator& operator+=(difference_type i) { return static_cast(base_iterator::operator+=(i)); } /// add to iterator json_reverse_iterator operator+(difference_type i) const { return static_cast(base_iterator::operator+(i)); } /// subtract from iterator json_reverse_iterator operator-(difference_type i) const { return static_cast(base_iterator::operator-(i)); } /// return difference difference_type operator-(const json_reverse_iterator& other) const { return base_iterator(*this) - base_iterator(other); } /// access to successor reference operator[](difference_type n) const { return *(this->operator+(n)); } /// return the key of an object iterator auto key() const -> decltype(std::declval().key()) { auto it = --this->base(); return it.key(); } /// return the value of an iterator reference value() const { auto it = --this->base(); return it.operator * (); } }; } // namespace detail } // namespace nlohmann // #include // #include #include // all_of #include // isdigit #include // max #include // accumulate #include // string #include // move #include // vector // #include // #include // #include namespace nlohmann { template class json_pointer { // allow basic_json to access private members NLOHMANN_BASIC_JSON_TPL_DECLARATION friend class basic_json; public: /*! @brief create JSON pointer Create a JSON pointer according to the syntax described in [Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3). @param[in] s string representing the JSON pointer; if omitted, the empty string is assumed which references the whole JSON value @throw parse_error.107 if the given JSON pointer @a s is nonempty and does not begin with a slash (`/`); see example below @throw parse_error.108 if a tilde (`~`) in the given JSON pointer @a s is not followed by `0` (representing `~`) or `1` (representing `/`); see example below @liveexample{The example shows the construction several valid JSON pointers as well as the exceptional behavior.,json_pointer} @since version 2.0.0 */ explicit json_pointer(const std::string& s = "") : reference_tokens(split(s)) {} /*! @brief return a string representation of the JSON pointer @invariant For each JSON pointer `ptr`, it holds: @code {.cpp} ptr == json_pointer(ptr.to_string()); @endcode @return a string representation of the JSON pointer @liveexample{The example shows the result of `to_string`.,json_pointer__to_string} @since version 2.0.0 */ std::string to_string() const { return std::accumulate(reference_tokens.begin(), reference_tokens.end(), std::string{}, [](const std::string & a, const std::string & b) { return a + "/" + escape(b); }); } /// @copydoc to_string() operator std::string() const { return to_string(); } /*! @brief append another JSON pointer at the end of this JSON pointer @param[in] ptr JSON pointer to append @return JSON pointer with @a ptr appended @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} @complexity Linear in the length of @a ptr. @sa @ref operator/=(std::string) to append a reference token @sa @ref operator/=(std::size_t) to append an array index @sa @ref operator/(const json_pointer&, const json_pointer&) for a binary operator @since version 3.6.0 */ json_pointer& operator/=(const json_pointer& ptr) { reference_tokens.insert(reference_tokens.end(), ptr.reference_tokens.begin(), ptr.reference_tokens.end()); return *this; } /*! @brief append an unescaped reference token at the end of this JSON pointer @param[in] token reference token to append @return JSON pointer with @a token appended without escaping @a token @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} @complexity Amortized constant. @sa @ref operator/=(const json_pointer&) to append a JSON pointer @sa @ref operator/=(std::size_t) to append an array index @sa @ref operator/(const json_pointer&, std::size_t) for a binary operator @since version 3.6.0 */ json_pointer& operator/=(std::string token) { push_back(std::move(token)); return *this; } /*! @brief append an array index at the end of this JSON pointer @param[in] array_idx array index to append @return JSON pointer with @a array_idx appended @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} @complexity Amortized constant. @sa @ref operator/=(const json_pointer&) to append a JSON pointer @sa @ref operator/=(std::string) to append a reference token @sa @ref operator/(const json_pointer&, std::string) for a binary operator @since version 3.6.0 */ json_pointer& operator/=(std::size_t array_idx) { return *this /= std::to_string(array_idx); } /*! @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer @param[in] lhs JSON pointer @param[in] rhs JSON pointer @return a new JSON pointer with @a rhs appended to @a lhs @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} @complexity Linear in the length of @a lhs and @a rhs. @sa @ref operator/=(const json_pointer&) to append a JSON pointer @since version 3.6.0 */ friend json_pointer operator/(const json_pointer& lhs, const json_pointer& rhs) { return json_pointer(lhs) /= rhs; } /*! @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer @param[in] ptr JSON pointer @param[in] token reference token @return a new JSON pointer with unescaped @a token appended to @a ptr @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} @complexity Linear in the length of @a ptr. @sa @ref operator/=(std::string) to append a reference token @since version 3.6.0 */ friend json_pointer operator/(const json_pointer& ptr, std::string token) { return json_pointer(ptr) /= std::move(token); } /*! @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer @param[in] ptr JSON pointer @param[in] array_idx array index @return a new JSON pointer with @a array_idx appended to @a ptr @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} @complexity Linear in the length of @a ptr. @sa @ref operator/=(std::size_t) to append an array index @since version 3.6.0 */ friend json_pointer operator/(const json_pointer& ptr, std::size_t array_idx) { return json_pointer(ptr) /= array_idx; } /*! @brief returns the parent of this JSON pointer @return parent of this JSON pointer; in case this JSON pointer is the root, the root itself is returned @complexity Linear in the length of the JSON pointer. @liveexample{The example shows the result of `parent_pointer` for different JSON Pointers.,json_pointer__parent_pointer} @since version 3.6.0 */ json_pointer parent_pointer() const { if (empty()) { return *this; } json_pointer res = *this; res.pop_back(); return res; } /*! @brief remove last reference token @pre not `empty()` @liveexample{The example shows the usage of `pop_back`.,json_pointer__pop_back} @complexity Constant. @throw out_of_range.405 if JSON pointer has no parent @since version 3.6.0 */ void pop_back() { if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); } reference_tokens.pop_back(); } /*! @brief return last reference token @pre not `empty()` @return last reference token @liveexample{The example shows the usage of `back`.,json_pointer__back} @complexity Constant. @throw out_of_range.405 if JSON pointer has no parent @since version 3.6.0 */ const std::string& back() const { if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); } return reference_tokens.back(); } /*! @brief append an unescaped token at the end of the reference pointer @param[in] token token to add @complexity Amortized constant. @liveexample{The example shows the result of `push_back` for different JSON Pointers.,json_pointer__push_back} @since version 3.6.0 */ void push_back(const std::string& token) { reference_tokens.push_back(token); } /// @copydoc push_back(const std::string&) void push_back(std::string&& token) { reference_tokens.push_back(std::move(token)); } /*! @brief return whether pointer points to the root document @return true iff the JSON pointer points to the root document @complexity Constant. @exceptionsafety No-throw guarantee: this function never throws exceptions. @liveexample{The example shows the result of `empty` for different JSON Pointers.,json_pointer__empty} @since version 3.6.0 */ bool empty() const noexcept { return reference_tokens.empty(); } private: /*! @param[in] s reference token to be converted into an array index @return integer representation of @a s @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index begins not with a digit @throw out_of_range.404 if string @a s could not be converted to an integer @throw out_of_range.410 if an array index exceeds size_type */ static typename BasicJsonType::size_type array_index(const std::string& s) { using size_type = typename BasicJsonType::size_type; // error condition (cf. RFC 6901, Sect. 4) if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) { JSON_THROW(detail::parse_error::create(106, 0, "array index '" + s + "' must not begin with '0'")); } // error condition (cf. RFC 6901, Sect. 4) if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) { JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number")); } std::size_t processed_chars = 0; unsigned long long res = 0; JSON_TRY { res = std::stoull(s, &processed_chars); } JSON_CATCH(std::out_of_range&) { JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); } // check if the string was completely read if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size())) { JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); } // only triggered on special platforms (like 32bit), see also // https://github.com/nlohmann/json/pull/2203 if (res >= static_cast((std::numeric_limits::max)())) { JSON_THROW(detail::out_of_range::create(410, "array index " + s + " exceeds size_type")); // LCOV_EXCL_LINE } return static_cast(res); } json_pointer top() const { if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); } json_pointer result = *this; result.reference_tokens = {reference_tokens[0]}; return result; } /*! @brief create and return a reference to the pointed to value @complexity Linear in the number of reference tokens. @throw parse_error.109 if array index is not a number @throw type_error.313 if value cannot be unflattened */ BasicJsonType& get_and_create(BasicJsonType& j) const { auto result = &j; // in case no reference tokens exist, return a reference to the JSON value // j which will be overwritten by a primitive value for (const auto& reference_token : reference_tokens) { switch (result->type()) { case detail::value_t::null: { if (reference_token == "0") { // start a new array if reference token is 0 result = &result->operator[](0); } else { // start a new object otherwise result = &result->operator[](reference_token); } break; } case detail::value_t::object: { // create an entry in the object result = &result->operator[](reference_token); break; } case detail::value_t::array: { // create an entry in the array result = &result->operator[](array_index(reference_token)); break; } /* The following code is only reached if there exists a reference token _and_ the current value is primitive. In this case, we have an error situation, because primitive values may only occur as single value; that is, with an empty list of reference tokens. */ default: JSON_THROW(detail::type_error::create(313, "invalid value to unflatten")); } } return *result; } /*! @brief return a reference to the pointed to value @note This version does not throw if a value is not present, but tries to create nested values instead. For instance, calling this function with pointer `"/this/that"` on a null value is equivalent to calling `operator[]("this").operator[]("that")` on that value, effectively changing the null value to an object. @param[in] ptr a JSON value @return reference to the JSON value pointed to by the JSON pointer @complexity Linear in the length of the JSON pointer. @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.404 if the JSON pointer can not be resolved */ BasicJsonType& get_unchecked(BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { // convert null values to arrays or objects before continuing if (ptr->is_null()) { // check if reference token is a number const bool nums = std::all_of(reference_token.begin(), reference_token.end(), [](const unsigned char x) { return std::isdigit(x); }); // change value to array for numbers or "-" or to object otherwise *ptr = (nums || reference_token == "-") ? detail::value_t::array : detail::value_t::object; } switch (ptr->type()) { case detail::value_t::object: { // use unchecked object access ptr = &ptr->operator[](reference_token); break; } case detail::value_t::array: { if (reference_token == "-") { // explicitly treat "-" as index beyond the end ptr = &ptr->operator[](ptr->m_value.array->size()); } else { // convert array index to number; unchecked access ptr = &ptr->operator[](array_index(reference_token)); } break; } default: JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); } } return *ptr; } /*! @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.402 if the array index '-' is used @throw out_of_range.404 if the JSON pointer can not be resolved */ BasicJsonType& get_checked(BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { // note: at performs range check ptr = &ptr->at(reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check JSON_THROW(detail::out_of_range::create(402, "array index '-' (" + std::to_string(ptr->m_value.array->size()) + ") is out of range")); } // note: at performs range check ptr = &ptr->at(array_index(reference_token)); break; } default: JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); } } return *ptr; } /*! @brief return a const reference to the pointed to value @param[in] ptr a JSON value @return const reference to the JSON value pointed to by the JSON pointer @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.402 if the array index '-' is used @throw out_of_range.404 if the JSON pointer can not be resolved */ const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { // use unchecked object access ptr = &ptr->operator[](reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" cannot be used for const access JSON_THROW(detail::out_of_range::create(402, "array index '-' (" + std::to_string(ptr->m_value.array->size()) + ") is out of range")); } // use unchecked array access ptr = &ptr->operator[](array_index(reference_token)); break; } default: JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); } } return *ptr; } /*! @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.402 if the array index '-' is used @throw out_of_range.404 if the JSON pointer can not be resolved */ const BasicJsonType& get_checked(const BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { // note: at performs range check ptr = &ptr->at(reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check JSON_THROW(detail::out_of_range::create(402, "array index '-' (" + std::to_string(ptr->m_value.array->size()) + ") is out of range")); } // note: at performs range check ptr = &ptr->at(array_index(reference_token)); break; } default: JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); } } return *ptr; } /*! @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number */ bool contains(const BasicJsonType* ptr) const { for (const auto& reference_token : reference_tokens) { switch (ptr->type()) { case detail::value_t::object: { if (!ptr->contains(reference_token)) { // we did not find the key in the object return false; } ptr = &ptr->operator[](reference_token); break; } case detail::value_t::array: { if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check return false; } if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) { // invalid char return false; } if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) { if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) { // first char should be between '1' and '9' return false; } for (std::size_t i = 1; i < reference_token.size(); i++) { if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) { // other char should be between '0' and '9' return false; } } } const auto idx = array_index(reference_token); if (idx >= ptr->size()) { // index out of range return false; } ptr = &ptr->operator[](idx); break; } default: { // we do not expect primitive values if there is still a // reference token to process return false; } } } // no reference token left means we found a primitive value return true; } /*! @brief split the string input to reference tokens @note This function is only called by the json_pointer constructor. All exceptions below are documented there. @throw parse_error.107 if the pointer is not empty or begins with '/' @throw parse_error.108 if character '~' is not followed by '0' or '1' */ static std::vector split(const std::string& reference_string) { std::vector result; // special case: empty reference string -> no reference tokens if (reference_string.empty()) { return result; } // check if nonempty reference string begins with slash if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) { JSON_THROW(detail::parse_error::create(107, 1, "JSON pointer must be empty or begin with '/' - was: '" + reference_string + "'")); } // extract the reference tokens: // - slash: position of the last read slash (or end of string) // - start: position after the previous slash for ( // search for the first slash after the first character std::size_t slash = reference_string.find_first_of('/', 1), // set the beginning of the first reference token start = 1; // we can stop if start == 0 (if slash == std::string::npos) start != 0; // set the beginning of the next reference token // (will eventually be 0 if slash == std::string::npos) start = (slash == std::string::npos) ? 0 : slash + 1, // find next slash slash = reference_string.find_first_of('/', start)) { // use the text between the beginning of the reference token // (start) and the last slash (slash). auto reference_token = reference_string.substr(start, slash - start); // check reference tokens are properly escaped for (std::size_t pos = reference_token.find_first_of('~'); pos != std::string::npos; pos = reference_token.find_first_of('~', pos + 1)) { JSON_ASSERT(reference_token[pos] == '~'); // ~ must be followed by 0 or 1 if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || (reference_token[pos + 1] != '0' && reference_token[pos + 1] != '1'))) { JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'")); } } // finally, store the reference token unescape(reference_token); result.push_back(reference_token); } return result; } /*! @brief replace all occurrences of a substring by another string @param[in,out] s the string to manipulate; changed so that all occurrences of @a f are replaced with @a t @param[in] f the substring to replace with @a t @param[in] t the string to replace @a f @pre The search string @a f must not be empty. **This precondition is enforced with an assertion.** @since version 2.0.0 */ static void replace_substring(std::string& s, const std::string& f, const std::string& t) { JSON_ASSERT(!f.empty()); for (auto pos = s.find(f); // find first occurrence of f pos != std::string::npos; // make sure f was found s.replace(pos, f.size(), t), // replace with t, and pos = s.find(f, pos + t.size())) // find next occurrence of f {} } /// escape "~" to "~0" and "/" to "~1" static std::string escape(std::string s) { replace_substring(s, "~", "~0"); replace_substring(s, "/", "~1"); return s; } /// unescape "~1" to tilde and "~0" to slash (order is important!) static void unescape(std::string& s) { replace_substring(s, "~1", "/"); replace_substring(s, "~0", "~"); } /*! @param[in] reference_string the reference string to the current value @param[in] value the value to consider @param[in,out] result the result object to insert values to @note Empty objects or arrays are flattened to `null`. */ static void flatten(const std::string& reference_string, const BasicJsonType& value, BasicJsonType& result) { switch (value.type()) { case detail::value_t::array: { if (value.m_value.array->empty()) { // flatten empty array as null result[reference_string] = nullptr; } else { // iterate array and use index as reference string for (std::size_t i = 0; i < value.m_value.array->size(); ++i) { flatten(reference_string + "/" + std::to_string(i), value.m_value.array->operator[](i), result); } } break; } case detail::value_t::object: { if (value.m_value.object->empty()) { // flatten empty object as null result[reference_string] = nullptr; } else { // iterate object and use keys as reference string for (const auto& element : *value.m_value.object) { flatten(reference_string + "/" + escape(element.first), element.second, result); } } break; } default: { // add primitive value with its reference string result[reference_string] = value; break; } } } /*! @param[in] value flattened JSON @return unflattened JSON @throw parse_error.109 if array index is not a number @throw type_error.314 if value is not an object @throw type_error.315 if object values are not primitive @throw type_error.313 if value cannot be unflattened */ static BasicJsonType unflatten(const BasicJsonType& value) { if (JSON_HEDLEY_UNLIKELY(!value.is_object())) { JSON_THROW(detail::type_error::create(314, "only objects can be unflattened")); } BasicJsonType result; // iterate the JSON object values for (const auto& element : *value.m_value.object) { if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) { JSON_THROW(detail::type_error::create(315, "values in object must be primitive")); } // assign value to reference pointed to by JSON pointer; Note that if // the JSON pointer is "" (i.e., points to the whole value), function // get_and_create returns a reference to result itself. An assignment // will then create a primitive value. json_pointer(element.first).get_and_create(result) = element.second; } return result; } /*! @brief compares two JSON pointers for equality @param[in] lhs JSON pointer to compare @param[in] rhs JSON pointer to compare @return whether @a lhs is equal to @a rhs @complexity Linear in the length of the JSON pointer @exceptionsafety No-throw guarantee: this function never throws exceptions. */ friend bool operator==(json_pointer const& lhs, json_pointer const& rhs) noexcept { return lhs.reference_tokens == rhs.reference_tokens; } /*! @brief compares two JSON pointers for inequality @param[in] lhs JSON pointer to compare @param[in] rhs JSON pointer to compare @return whether @a lhs is not equal @a rhs @complexity Linear in the length of the JSON pointer @exceptionsafety No-throw guarantee: this function never throws exceptions. */ friend bool operator!=(json_pointer const& lhs, json_pointer const& rhs) noexcept { return !(lhs == rhs); } /// the reference tokens std::vector reference_tokens; }; } // namespace nlohmann // #include #include #include // #include namespace nlohmann { namespace detail { template class json_ref { public: using value_type = BasicJsonType; json_ref(value_type&& value) : owned_value(std::move(value)) , value_ref(&owned_value) , is_rvalue(true) {} json_ref(const value_type& value) : value_ref(const_cast(&value)) , is_rvalue(false) {} json_ref(std::initializer_list init) : owned_value(init) , value_ref(&owned_value) , is_rvalue(true) {} template < class... Args, enable_if_t::value, int> = 0 > json_ref(Args && ... args) : owned_value(std::forward(args)...) , value_ref(&owned_value) , is_rvalue(true) {} // class should be movable only json_ref(json_ref&&) = default; json_ref(const json_ref&) = delete; json_ref& operator=(const json_ref&) = delete; json_ref& operator=(json_ref&&) = delete; ~json_ref() = default; value_type moved_or_copied() const { if (is_rvalue) { return std::move(*value_ref); } return *value_ref; } value_type const& operator*() const { return *static_cast(value_ref); } value_type const* operator->() const { return static_cast(value_ref); } private: mutable value_type owned_value = nullptr; value_type* value_ref = nullptr; const bool is_rvalue = true; }; } // namespace detail } // namespace nlohmann // #include // #include // #include // #include #include // reverse #include // array #include // uint8_t, uint16_t, uint32_t, uint64_t #include // memcpy #include // numeric_limits #include // string #include // isnan, isinf // #include // #include // #include #include // copy #include // size_t #include // streamsize #include // back_inserter #include // shared_ptr, make_shared #include // basic_ostream #include // basic_string #include // vector // #include namespace nlohmann { namespace detail { /// abstract output adapter interface template struct output_adapter_protocol { virtual void write_character(CharType c) = 0; virtual void write_characters(const CharType* s, std::size_t length) = 0; virtual ~output_adapter_protocol() = default; }; /// a type to simplify interfaces template using output_adapter_t = std::shared_ptr>; /// output adapter for byte vectors template class output_vector_adapter : public output_adapter_protocol { public: explicit output_vector_adapter(std::vector& vec) noexcept : v(vec) {} void write_character(CharType c) override { v.push_back(c); } JSON_HEDLEY_NON_NULL(2) void write_characters(const CharType* s, std::size_t length) override { std::copy(s, s + length, std::back_inserter(v)); } private: std::vector& v; }; /// output adapter for output streams template class output_stream_adapter : public output_adapter_protocol { public: explicit output_stream_adapter(std::basic_ostream& s) noexcept : stream(s) {} void write_character(CharType c) override { stream.put(c); } JSON_HEDLEY_NON_NULL(2) void write_characters(const CharType* s, std::size_t length) override { stream.write(s, static_cast(length)); } private: std::basic_ostream& stream; }; /// output adapter for basic_string template> class output_string_adapter : public output_adapter_protocol { public: explicit output_string_adapter(StringType& s) noexcept : str(s) {} void write_character(CharType c) override { str.push_back(c); } JSON_HEDLEY_NON_NULL(2) void write_characters(const CharType* s, std::size_t length) override { str.append(s, length); } private: StringType& str; }; template> class output_adapter { public: output_adapter(std::vector& vec) : oa(std::make_shared>(vec)) {} output_adapter(std::basic_ostream& s) : oa(std::make_shared>(s)) {} output_adapter(StringType& s) : oa(std::make_shared>(s)) {} operator output_adapter_t() { return oa; } private: output_adapter_t oa = nullptr; }; } // namespace detail } // namespace nlohmann namespace nlohmann { namespace detail { /////////////////// // binary writer // /////////////////// /*! @brief serialization to CBOR and MessagePack values */ template class binary_writer { using string_t = typename BasicJsonType::string_t; using binary_t = typename BasicJsonType::binary_t; using number_float_t = typename BasicJsonType::number_float_t; public: /*! @brief create a binary writer @param[in] adapter output adapter to write to */ explicit binary_writer(output_adapter_t adapter) : oa(adapter) { JSON_ASSERT(oa); } /*! @param[in] j JSON value to serialize @pre j.type() == value_t::object */ void write_bson(const BasicJsonType& j) { switch (j.type()) { case value_t::object: { write_bson_object(*j.m_value.object); break; } default: { JSON_THROW(type_error::create(317, "to serialize to BSON, top-level type must be object, but is " + std::string(j.type_name()))); } } } /*! @param[in] j JSON value to serialize */ void write_cbor(const BasicJsonType& j) { switch (j.type()) { case value_t::null: { oa->write_character(to_char_type(0xF6)); break; } case value_t::boolean: { oa->write_character(j.m_value.boolean ? to_char_type(0xF5) : to_char_type(0xF4)); break; } case value_t::number_integer: { if (j.m_value.number_integer >= 0) { // CBOR does not differentiate between positive signed // integers and unsigned integers. Therefore, we used the // code from the value_t::number_unsigned case here. if (j.m_value.number_integer <= 0x17) { write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_integer <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x18)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_integer <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x19)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_integer <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x1A)); write_number(static_cast(j.m_value.number_integer)); } else { oa->write_character(to_char_type(0x1B)); write_number(static_cast(j.m_value.number_integer)); } } else { // The conversions below encode the sign in the first // byte, and the value is converted to a positive number. const auto positive_number = -1 - j.m_value.number_integer; if (j.m_value.number_integer >= -24) { write_number(static_cast(0x20 + positive_number)); } else if (positive_number <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x38)); write_number(static_cast(positive_number)); } else if (positive_number <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x39)); write_number(static_cast(positive_number)); } else if (positive_number <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x3A)); write_number(static_cast(positive_number)); } else { oa->write_character(to_char_type(0x3B)); write_number(static_cast(positive_number)); } } break; } case value_t::number_unsigned: { if (j.m_value.number_unsigned <= 0x17) { write_number(static_cast(j.m_value.number_unsigned)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x18)); write_number(static_cast(j.m_value.number_unsigned)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x19)); write_number(static_cast(j.m_value.number_unsigned)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x1A)); write_number(static_cast(j.m_value.number_unsigned)); } else { oa->write_character(to_char_type(0x1B)); write_number(static_cast(j.m_value.number_unsigned)); } break; } case value_t::number_float: { if (std::isnan(j.m_value.number_float)) { // NaN is 0xf97e00 in CBOR oa->write_character(to_char_type(0xF9)); oa->write_character(to_char_type(0x7E)); oa->write_character(to_char_type(0x00)); } else if (std::isinf(j.m_value.number_float)) { // Infinity is 0xf97c00, -Infinity is 0xf9fc00 oa->write_character(to_char_type(0xf9)); oa->write_character(j.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC)); oa->write_character(to_char_type(0x00)); } else { write_compact_float(j.m_value.number_float, detail::input_format_t::cbor); } break; } case value_t::string: { // step 1: write control byte and the string length const auto N = j.m_value.string->size(); if (N <= 0x17) { write_number(static_cast(0x60 + N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x78)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x79)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x7A)); write_number(static_cast(N)); } // LCOV_EXCL_START else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x7B)); write_number(static_cast(N)); } // LCOV_EXCL_STOP // step 2: write the string oa->write_characters( reinterpret_cast(j.m_value.string->c_str()), j.m_value.string->size()); break; } case value_t::array: { // step 1: write control byte and the array size const auto N = j.m_value.array->size(); if (N <= 0x17) { write_number(static_cast(0x80 + N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x98)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x99)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x9A)); write_number(static_cast(N)); } // LCOV_EXCL_START else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x9B)); write_number(static_cast(N)); } // LCOV_EXCL_STOP // step 2: write each element for (const auto& el : *j.m_value.array) { write_cbor(el); } break; } case value_t::binary: { if (j.m_value.binary->has_subtype()) { write_number(static_cast(0xd8)); write_number(j.m_value.binary->subtype()); } // step 1: write control byte and the binary array size const auto N = j.m_value.binary->size(); if (N <= 0x17) { write_number(static_cast(0x40 + N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x58)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x59)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x5A)); write_number(static_cast(N)); } // LCOV_EXCL_START else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0x5B)); write_number(static_cast(N)); } // LCOV_EXCL_STOP // step 2: write each element oa->write_characters( reinterpret_cast(j.m_value.binary->data()), N); break; } case value_t::object: { // step 1: write control byte and the object size const auto N = j.m_value.object->size(); if (N <= 0x17) { write_number(static_cast(0xA0 + N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0xB8)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0xB9)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0xBA)); write_number(static_cast(N)); } // LCOV_EXCL_START else if (N <= (std::numeric_limits::max)()) { oa->write_character(to_char_type(0xBB)); write_number(static_cast(N)); } // LCOV_EXCL_STOP // step 2: write each element for (const auto& el : *j.m_value.object) { write_cbor(el.first); write_cbor(el.second); } break; } default: break; } } /*! @param[in] j JSON value to serialize */ void write_msgpack(const BasicJsonType& j) { switch (j.type()) { case value_t::null: // nil { oa->write_character(to_char_type(0xC0)); break; } case value_t::boolean: // true and false { oa->write_character(j.m_value.boolean ? to_char_type(0xC3) : to_char_type(0xC2)); break; } case value_t::number_integer: { if (j.m_value.number_integer >= 0) { // MessagePack does not differentiate between positive // signed integers and unsigned integers. Therefore, we used // the code from the value_t::number_unsigned case here. if (j.m_value.number_unsigned < 128) { // positive fixnum write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 8 oa->write_character(to_char_type(0xCC)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 16 oa->write_character(to_char_type(0xCD)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 32 oa->write_character(to_char_type(0xCE)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 64 oa->write_character(to_char_type(0xCF)); write_number(static_cast(j.m_value.number_integer)); } } else { if (j.m_value.number_integer >= -32) { // negative fixnum write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_integer >= (std::numeric_limits::min)() && j.m_value.number_integer <= (std::numeric_limits::max)()) { // int 8 oa->write_character(to_char_type(0xD0)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_integer >= (std::numeric_limits::min)() && j.m_value.number_integer <= (std::numeric_limits::max)()) { // int 16 oa->write_character(to_char_type(0xD1)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_integer >= (std::numeric_limits::min)() && j.m_value.number_integer <= (std::numeric_limits::max)()) { // int 32 oa->write_character(to_char_type(0xD2)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_integer >= (std::numeric_limits::min)() && j.m_value.number_integer <= (std::numeric_limits::max)()) { // int 64 oa->write_character(to_char_type(0xD3)); write_number(static_cast(j.m_value.number_integer)); } } break; } case value_t::number_unsigned: { if (j.m_value.number_unsigned < 128) { // positive fixnum write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 8 oa->write_character(to_char_type(0xCC)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 16 oa->write_character(to_char_type(0xCD)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 32 oa->write_character(to_char_type(0xCE)); write_number(static_cast(j.m_value.number_integer)); } else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) { // uint 64 oa->write_character(to_char_type(0xCF)); write_number(static_cast(j.m_value.number_integer)); } break; } case value_t::number_float: { write_compact_float(j.m_value.number_float, detail::input_format_t::msgpack); break; } case value_t::string: { // step 1: write control byte and the string length const auto N = j.m_value.string->size(); if (N <= 31) { // fixstr write_number(static_cast(0xA0 | N)); } else if (N <= (std::numeric_limits::max)()) { // str 8 oa->write_character(to_char_type(0xD9)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { // str 16 oa->write_character(to_char_type(0xDA)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { // str 32 oa->write_character(to_char_type(0xDB)); write_number(static_cast(N)); } // step 2: write the string oa->write_characters( reinterpret_cast(j.m_value.string->c_str()), j.m_value.string->size()); break; } case value_t::array: { // step 1: write control byte and the array size const auto N = j.m_value.array->size(); if (N <= 15) { // fixarray write_number(static_cast(0x90 | N)); } else if (N <= (std::numeric_limits::max)()) { // array 16 oa->write_character(to_char_type(0xDC)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { // array 32 oa->write_character(to_char_type(0xDD)); write_number(static_cast(N)); } // step 2: write each element for (const auto& el : *j.m_value.array) { write_msgpack(el); } break; } case value_t::binary: { // step 0: determine if the binary type has a set subtype to // determine whether or not to use the ext or fixext types const bool use_ext = j.m_value.binary->has_subtype(); // step 1: write control byte and the byte string length const auto N = j.m_value.binary->size(); if (N <= (std::numeric_limits::max)()) { std::uint8_t output_type{}; bool fixed = true; if (use_ext) { switch (N) { case 1: output_type = 0xD4; // fixext 1 break; case 2: output_type = 0xD5; // fixext 2 break; case 4: output_type = 0xD6; // fixext 4 break; case 8: output_type = 0xD7; // fixext 8 break; case 16: output_type = 0xD8; // fixext 16 break; default: output_type = 0xC7; // ext 8 fixed = false; break; } } else { output_type = 0xC4; // bin 8 fixed = false; } oa->write_character(to_char_type(output_type)); if (!fixed) { write_number(static_cast(N)); } } else if (N <= (std::numeric_limits::max)()) { std::uint8_t output_type = use_ext ? 0xC8 // ext 16 : 0xC5; // bin 16 oa->write_character(to_char_type(output_type)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { std::uint8_t output_type = use_ext ? 0xC9 // ext 32 : 0xC6; // bin 32 oa->write_character(to_char_type(output_type)); write_number(static_cast(N)); } // step 1.5: if this is an ext type, write the subtype if (use_ext) { write_number(static_cast(j.m_value.binary->subtype())); } // step 2: write the byte string oa->write_characters( reinterpret_cast(j.m_value.binary->data()), N); break; } case value_t::object: { // step 1: write control byte and the object size const auto N = j.m_value.object->size(); if (N <= 15) { // fixmap write_number(static_cast(0x80 | (N & 0xF))); } else if (N <= (std::numeric_limits::max)()) { // map 16 oa->write_character(to_char_type(0xDE)); write_number(static_cast(N)); } else if (N <= (std::numeric_limits::max)()) { // map 32 oa->write_character(to_char_type(0xDF)); write_number(static_cast(N)); } // step 2: write each element for (const auto& el : *j.m_value.object) { write_msgpack(el.first); write_msgpack(el.second); } break; } default: break; } } /*! @param[in] j JSON value to serialize @param[in] use_count whether to use '#' prefixes (optimized format) @param[in] use_type whether to use '$' prefixes (optimized format) @param[in] add_prefix whether prefixes need to be used for this value */ void write_ubjson(const BasicJsonType& j, const bool use_count, const bool use_type, const bool add_prefix = true) { switch (j.type()) { case value_t::null: { if (add_prefix) { oa->write_character(to_char_type('Z')); } break; } case value_t::boolean: { if (add_prefix) { oa->write_character(j.m_value.boolean ? to_char_type('T') : to_char_type('F')); } break; } case value_t::number_integer: { write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix); break; } case value_t::number_unsigned: { write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix); break; } case value_t::number_float: { write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix); break; } case value_t::string: { if (add_prefix) { oa->write_character(to_char_type('S')); } write_number_with_ubjson_prefix(j.m_value.string->size(), true); oa->write_characters( reinterpret_cast(j.m_value.string->c_str()), j.m_value.string->size()); break; } case value_t::array: { if (add_prefix) { oa->write_character(to_char_type('[')); } bool prefix_required = true; if (use_type && !j.m_value.array->empty()) { JSON_ASSERT(use_count); const CharType first_prefix = ubjson_prefix(j.front()); const bool same_prefix = std::all_of(j.begin() + 1, j.end(), [this, first_prefix](const BasicJsonType & v) { return ubjson_prefix(v) == first_prefix; }); if (same_prefix) { prefix_required = false; oa->write_character(to_char_type('$')); oa->write_character(first_prefix); } } if (use_count) { oa->write_character(to_char_type('#')); write_number_with_ubjson_prefix(j.m_value.array->size(), true); } for (const auto& el : *j.m_value.array) { write_ubjson(el, use_count, use_type, prefix_required); } if (!use_count) { oa->write_character(to_char_type(']')); } break; } case value_t::binary: { if (add_prefix) { oa->write_character(to_char_type('[')); } if (use_type && !j.m_value.binary->empty()) { JSON_ASSERT(use_count); oa->write_character(to_char_type('$')); oa->write_character('U'); } if (use_count) { oa->write_character(to_char_type('#')); write_number_with_ubjson_prefix(j.m_value.binary->size(), true); } if (use_type) { oa->write_characters( reinterpret_cast(j.m_value.binary->data()), j.m_value.binary->size()); } else { for (size_t i = 0; i < j.m_value.binary->size(); ++i) { oa->write_character(to_char_type('U')); oa->write_character(j.m_value.binary->data()[i]); } } if (!use_count) { oa->write_character(to_char_type(']')); } break; } case value_t::object: { if (add_prefix) { oa->write_character(to_char_type('{')); } bool prefix_required = true; if (use_type && !j.m_value.object->empty()) { JSON_ASSERT(use_count); const CharType first_prefix = ubjson_prefix(j.front()); const bool same_prefix = std::all_of(j.begin(), j.end(), [this, first_prefix](const BasicJsonType & v) { return ubjson_prefix(v) == first_prefix; }); if (same_prefix) { prefix_required = false; oa->write_character(to_char_type('$')); oa->write_character(first_prefix); } } if (use_count) { oa->write_character(to_char_type('#')); write_number_with_ubjson_prefix(j.m_value.object->size(), true); } for (const auto& el : *j.m_value.object) { write_number_with_ubjson_prefix(el.first.size(), true); oa->write_characters( reinterpret_cast(el.first.c_str()), el.first.size()); write_ubjson(el.second, use_count, use_type, prefix_required); } if (!use_count) { oa->write_character(to_char_type('}')); } break; } default: break; } } private: ////////// // BSON // ////////// /*! @return The size of a BSON document entry header, including the id marker and the entry name size (and its null-terminator). */ static std::size_t calc_bson_entry_header_size(const string_t& name) { const auto it = name.find(static_cast(0)); if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos)) { JSON_THROW(out_of_range::create(409, "BSON key cannot contain code point U+0000 (at byte " + std::to_string(it) + ")")); } return /*id*/ 1ul + name.size() + /*zero-terminator*/1u; } /*! @brief Writes the given @a element_type and @a name to the output adapter */ void write_bson_entry_header(const string_t& name, const std::uint8_t element_type) { oa->write_character(to_char_type(element_type)); // boolean oa->write_characters( reinterpret_cast(name.c_str()), name.size() + 1u); } /*! @brief Writes a BSON element with key @a name and boolean value @a value */ void write_bson_boolean(const string_t& name, const bool value) { write_bson_entry_header(name, 0x08); oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00)); } /*! @brief Writes a BSON element with key @a name and double value @a value */ void write_bson_double(const string_t& name, const double value) { write_bson_entry_header(name, 0x01); write_number(value); } /*! @return The size of the BSON-encoded string in @a value */ static std::size_t calc_bson_string_size(const string_t& value) { return sizeof(std::int32_t) + value.size() + 1ul; } /*! @brief Writes a BSON element with key @a name and string value @a value */ void write_bson_string(const string_t& name, const string_t& value) { write_bson_entry_header(name, 0x02); write_number(static_cast(value.size() + 1ul)); oa->write_characters( reinterpret_cast(value.c_str()), value.size() + 1); } /*! @brief Writes a BSON element with key @a name and null value */ void write_bson_null(const string_t& name) { write_bson_entry_header(name, 0x0A); } /*! @return The size of the BSON-encoded integer @a value */ static std::size_t calc_bson_integer_size(const std::int64_t value) { return (std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)() ? sizeof(std::int32_t) : sizeof(std::int64_t); } /*! @brief Writes a BSON element with key @a name and integer @a value */ void write_bson_integer(const string_t& name, const std::int64_t value) { if ((std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)()) { write_bson_entry_header(name, 0x10); // int32 write_number(static_cast(value)); } else { write_bson_entry_header(name, 0x12); // int64 write_number(static_cast(value)); } } /*! @return The size of the BSON-encoded unsigned integer in @a j */ static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept { return (value <= static_cast((std::numeric_limits::max)())) ? sizeof(std::int32_t) : sizeof(std::int64_t); } /*! @brief Writes a BSON element with key @a name and unsigned @a value */ void write_bson_unsigned(const string_t& name, const std::uint64_t value) { if (value <= static_cast((std::numeric_limits::max)())) { write_bson_entry_header(name, 0x10 /* int32 */); write_number(static_cast(value)); } else if (value <= static_cast((std::numeric_limits::max)())) { write_bson_entry_header(name, 0x12 /* int64 */); write_number(static_cast(value)); } else { JSON_THROW(out_of_range::create(407, "integer number " + std::to_string(value) + " cannot be represented by BSON as it does not fit int64")); } } /*! @brief Writes a BSON element with key @a name and object @a value */ void write_bson_object_entry(const string_t& name, const typename BasicJsonType::object_t& value) { write_bson_entry_header(name, 0x03); // object write_bson_object(value); } /*! @return The size of the BSON-encoded array @a value */ static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value) { std::size_t array_index = 0ul; const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), std::size_t(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el) { return result + calc_bson_element_size(std::to_string(array_index++), el); }); return sizeof(std::int32_t) + embedded_document_size + 1ul; } /*! @return The size of the BSON-encoded binary array @a value */ static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value) { return sizeof(std::int32_t) + value.size() + 1ul; } /*! @brief Writes a BSON element with key @a name and array @a value */ void write_bson_array(const string_t& name, const typename BasicJsonType::array_t& value) { write_bson_entry_header(name, 0x04); // array write_number(static_cast(calc_bson_array_size(value))); std::size_t array_index = 0ul; for (const auto& el : value) { write_bson_element(std::to_string(array_index++), el); } oa->write_character(to_char_type(0x00)); } /*! @brief Writes a BSON element with key @a name and binary value @a value */ void write_bson_binary(const string_t& name, const binary_t& value) { write_bson_entry_header(name, 0x05); write_number(static_cast(value.size())); write_number(value.has_subtype() ? value.subtype() : std::uint8_t(0x00)); oa->write_characters(reinterpret_cast(value.data()), value.size()); } /*! @brief Calculates the size necessary to serialize the JSON value @a j with its @a name @return The calculated size for the BSON document entry for @a j with the given @a name. */ static std::size_t calc_bson_element_size(const string_t& name, const BasicJsonType& j) { const auto header_size = calc_bson_entry_header_size(name); switch (j.type()) { case value_t::object: return header_size + calc_bson_object_size(*j.m_value.object); case value_t::array: return header_size + calc_bson_array_size(*j.m_value.array); case value_t::binary: return header_size + calc_bson_binary_size(*j.m_value.binary); case value_t::boolean: return header_size + 1ul; case value_t::number_float: return header_size + 8ul; case value_t::number_integer: return header_size + calc_bson_integer_size(j.m_value.number_integer); case value_t::number_unsigned: return header_size + calc_bson_unsigned_size(j.m_value.number_unsigned); case value_t::string: return header_size + calc_bson_string_size(*j.m_value.string); case value_t::null: return header_size + 0ul; // LCOV_EXCL_START default: JSON_ASSERT(false); return 0ul; // LCOV_EXCL_STOP } } /*! @brief Serializes the JSON value @a j to BSON and associates it with the key @a name. @param name The name to associate with the JSON entity @a j within the current BSON document @return The size of the BSON entry */ void write_bson_element(const string_t& name, const BasicJsonType& j) { switch (j.type()) { case value_t::object: return write_bson_object_entry(name, *j.m_value.object); case value_t::array: return write_bson_array(name, *j.m_value.array); case value_t::binary: return write_bson_binary(name, *j.m_value.binary); case value_t::boolean: return write_bson_boolean(name, j.m_value.boolean); case value_t::number_float: return write_bson_double(name, j.m_value.number_float); case value_t::number_integer: return write_bson_integer(name, j.m_value.number_integer); case value_t::number_unsigned: return write_bson_unsigned(name, j.m_value.number_unsigned); case value_t::string: return write_bson_string(name, *j.m_value.string); case value_t::null: return write_bson_null(name); // LCOV_EXCL_START default: JSON_ASSERT(false); return; // LCOV_EXCL_STOP } } /*! @brief Calculates the size of the BSON serialization of the given JSON-object @a j. @param[in] j JSON value to serialize @pre j.type() == value_t::object */ static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value) { std::size_t document_size = std::accumulate(value.begin(), value.end(), std::size_t(0), [](size_t result, const typename BasicJsonType::object_t::value_type & el) { return result += calc_bson_element_size(el.first, el.second); }); return sizeof(std::int32_t) + document_size + 1ul; } /*! @param[in] j JSON value to serialize @pre j.type() == value_t::object */ void write_bson_object(const typename BasicJsonType::object_t& value) { write_number(static_cast(calc_bson_object_size(value))); for (const auto& el : value) { write_bson_element(el.first, el.second); } oa->write_character(to_char_type(0x00)); } ////////// // CBOR // ////////// static constexpr CharType get_cbor_float_prefix(float /*unused*/) { return to_char_type(0xFA); // Single-Precision Float } static constexpr CharType get_cbor_float_prefix(double /*unused*/) { return to_char_type(0xFB); // Double-Precision Float } ///////////// // MsgPack // ///////////// static constexpr CharType get_msgpack_float_prefix(float /*unused*/) { return to_char_type(0xCA); // float 32 } static constexpr CharType get_msgpack_float_prefix(double /*unused*/) { return to_char_type(0xCB); // float 64 } //////////// // UBJSON // //////////// // UBJSON: write number (floating point) template::value, int>::type = 0> void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix) { if (add_prefix) { oa->write_character(get_ubjson_float_prefix(n)); } write_number(n); } // UBJSON: write number (unsigned integer) template::value, int>::type = 0> void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix) { if (n <= static_cast((std::numeric_limits::max)())) { if (add_prefix) { oa->write_character(to_char_type('i')); // int8 } write_number(static_cast(n)); } else if (n <= (std::numeric_limits::max)()) { if (add_prefix) { oa->write_character(to_char_type('U')); // uint8 } write_number(static_cast(n)); } else if (n <= static_cast((std::numeric_limits::max)())) { if (add_prefix) { oa->write_character(to_char_type('I')); // int16 } write_number(static_cast(n)); } else if (n <= static_cast((std::numeric_limits::max)())) { if (add_prefix) { oa->write_character(to_char_type('l')); // int32 } write_number(static_cast(n)); } else if (n <= static_cast((std::numeric_limits::max)())) { if (add_prefix) { oa->write_character(to_char_type('L')); // int64 } write_number(static_cast(n)); } else { if (add_prefix) { oa->write_character(to_char_type('H')); // high-precision number } const auto number = BasicJsonType(n).dump(); write_number_with_ubjson_prefix(number.size(), true); for (std::size_t i = 0; i < number.size(); ++i) { oa->write_character(to_char_type(static_cast(number[i]))); } } } // UBJSON: write number (signed integer) template < typename NumberType, typename std::enable_if < std::is_signed::value&& !std::is_floating_point::value, int >::type = 0 > void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix) { if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) { if (add_prefix) { oa->write_character(to_char_type('i')); // int8 } write_number(static_cast(n)); } else if (static_cast((std::numeric_limits::min)()) <= n && n <= static_cast((std::numeric_limits::max)())) { if (add_prefix) { oa->write_character(to_char_type('U')); // uint8 } write_number(static_cast(n)); } else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) { if (add_prefix) { oa->write_character(to_char_type('I')); // int16 } write_number(static_cast(n)); } else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) { if (add_prefix) { oa->write_character(to_char_type('l')); // int32 } write_number(static_cast(n)); } else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) { if (add_prefix) { oa->write_character(to_char_type('L')); // int64 } write_number(static_cast(n)); } // LCOV_EXCL_START else { if (add_prefix) { oa->write_character(to_char_type('H')); // high-precision number } const auto number = BasicJsonType(n).dump(); write_number_with_ubjson_prefix(number.size(), true); for (std::size_t i = 0; i < number.size(); ++i) { oa->write_character(to_char_type(static_cast(number[i]))); } } // LCOV_EXCL_STOP } /*! @brief determine the type prefix of container values */ CharType ubjson_prefix(const BasicJsonType& j) const noexcept { switch (j.type()) { case value_t::null: return 'Z'; case value_t::boolean: return j.m_value.boolean ? 'T' : 'F'; case value_t::number_integer: { if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) { return 'i'; } if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) { return 'U'; } if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) { return 'I'; } if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) { return 'l'; } if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) { return 'L'; } // anything else is treated as high-precision number return 'H'; // LCOV_EXCL_LINE } case value_t::number_unsigned: { if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'i'; } if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'U'; } if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'I'; } if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'l'; } if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'L'; } // anything else is treated as high-precision number return 'H'; // LCOV_EXCL_LINE } case value_t::number_float: return get_ubjson_float_prefix(j.m_value.number_float); case value_t::string: return 'S'; case value_t::array: // fallthrough case value_t::binary: return '['; case value_t::object: return '{'; default: // discarded values return 'N'; } } static constexpr CharType get_ubjson_float_prefix(float /*unused*/) { return 'd'; // float 32 } static constexpr CharType get_ubjson_float_prefix(double /*unused*/) { return 'D'; // float 64 } /////////////////////// // Utility functions // /////////////////////// /* @brief write a number to output input @param[in] n number of type @a NumberType @tparam NumberType the type of the number @tparam OutputIsLittleEndian Set to true if output data is required to be little endian @note This function needs to respect the system's endianness, because bytes in CBOR, MessagePack, and UBJSON are stored in network order (big endian) and therefore need reordering on little endian systems. */ template void write_number(const NumberType n) { // step 1: write number to array of length NumberType std::array vec; std::memcpy(vec.data(), &n, sizeof(NumberType)); // step 2: write array to output (with possible reordering) if (is_little_endian != OutputIsLittleEndian) { // reverse byte order prior to conversion if necessary std::reverse(vec.begin(), vec.end()); } oa->write_characters(vec.data(), sizeof(NumberType)); } void write_compact_float(const number_float_t n, detail::input_format_t format) { if (static_cast(n) >= static_cast(std::numeric_limits::lowest()) && static_cast(n) <= static_cast((std::numeric_limits::max)()) && static_cast(static_cast(n)) == static_cast(n)) { oa->write_character(format == detail::input_format_t::cbor ? get_cbor_float_prefix(static_cast(n)) : get_msgpack_float_prefix(static_cast(n))); write_number(static_cast(n)); } else { oa->write_character(format == detail::input_format_t::cbor ? get_cbor_float_prefix(n) : get_msgpack_float_prefix(n)); write_number(n); } } public: // The following to_char_type functions are implement the conversion // between uint8_t and CharType. In case CharType is not unsigned, // such a conversion is required to allow values greater than 128. // See for a discussion. template < typename C = CharType, enable_if_t < std::is_signed::value && std::is_signed::value > * = nullptr > static constexpr CharType to_char_type(std::uint8_t x) noexcept { return *reinterpret_cast(&x); } template < typename C = CharType, enable_if_t < std::is_signed::value && std::is_unsigned::value > * = nullptr > static CharType to_char_type(std::uint8_t x) noexcept { static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t"); static_assert(std::is_trivial::value, "CharType must be trivial"); CharType result; std::memcpy(&result, &x, sizeof(x)); return result; } template::value>* = nullptr> static constexpr CharType to_char_type(std::uint8_t x) noexcept { return x; } template < typename InputCharType, typename C = CharType, enable_if_t < std::is_signed::value && std::is_signed::value && std::is_same::type>::value > * = nullptr > static constexpr CharType to_char_type(InputCharType x) noexcept { return x; } private: /// whether we can assume little endianness const bool is_little_endian = little_endianess(); /// the output output_adapter_t oa = nullptr; }; } // namespace detail } // namespace nlohmann // #include // #include #include // reverse, remove, fill, find, none_of #include // array #include // localeconv, lconv #include // labs, isfinite, isnan, signbit #include // size_t, ptrdiff_t #include // uint8_t #include // snprintf #include // numeric_limits #include // string, char_traits #include // is_same #include // move // #include #include // array #include // signbit, isfinite #include // intN_t, uintN_t #include // memcpy, memmove #include // numeric_limits #include // conditional // #include namespace nlohmann { namespace detail { /*! @brief implements the Grisu2 algorithm for binary to decimal floating-point conversion. This implementation is a slightly modified version of the reference implementation which may be obtained from http://florian.loitsch.com/publications (bench.tar.gz). The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. For a detailed description of the algorithm see: [1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming Language Design and Implementation, PLDI 2010 [2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation, PLDI 1996 */ namespace dtoa_impl { template Target reinterpret_bits(const Source source) { static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); Target target; std::memcpy(&target, &source, sizeof(Source)); return target; } struct diyfp // f * 2^e { static constexpr int kPrecision = 64; // = q std::uint64_t f = 0; int e = 0; constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} /*! @brief returns x - y @pre x.e == y.e and x.f >= y.f */ static diyfp sub(const diyfp& x, const diyfp& y) noexcept { JSON_ASSERT(x.e == y.e); JSON_ASSERT(x.f >= y.f); return {x.f - y.f, x.e}; } /*! @brief returns x * y @note The result is rounded. (Only the upper q bits are returned.) */ static diyfp mul(const diyfp& x, const diyfp& y) noexcept { static_assert(kPrecision == 64, "internal error"); // Computes: // f = round((x.f * y.f) / 2^q) // e = x.e + y.e + q // Emulate the 64-bit * 64-bit multiplication: // // p = u * v // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) // // (Since Q might be larger than 2^32 - 1) // // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) // // (Q_hi + H does not overflow a 64-bit int) // // = p_lo + 2^64 p_hi const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; const std::uint64_t u_hi = x.f >> 32u; const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; const std::uint64_t v_hi = y.f >> 32u; const std::uint64_t p0 = u_lo * v_lo; const std::uint64_t p1 = u_lo * v_hi; const std::uint64_t p2 = u_hi * v_lo; const std::uint64_t p3 = u_hi * v_hi; const std::uint64_t p0_hi = p0 >> 32u; const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; const std::uint64_t p1_hi = p1 >> 32u; const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; const std::uint64_t p2_hi = p2 >> 32u; std::uint64_t Q = p0_hi + p1_lo + p2_lo; // The full product might now be computed as // // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) // p_lo = p0_lo + (Q << 32) // // But in this particular case here, the full p_lo is not required. // Effectively we only need to add the highest bit in p_lo to p_hi (and // Q_hi + 1 does not overflow). Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); return {h, x.e + y.e + 64}; } /*! @brief normalize x such that the significand is >= 2^(q-1) @pre x.f != 0 */ static diyfp normalize(diyfp x) noexcept { JSON_ASSERT(x.f != 0); while ((x.f >> 63u) == 0) { x.f <<= 1u; x.e--; } return x; } /*! @brief normalize x such that the result has the exponent E @pre e >= x.e and the upper e - x.e bits of x.f must be zero. */ static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept { const int delta = x.e - target_exponent; JSON_ASSERT(delta >= 0); JSON_ASSERT(((x.f << delta) >> delta) == x.f); return {x.f << delta, target_exponent}; } }; struct boundaries { diyfp w; diyfp minus; diyfp plus; }; /*! Compute the (normalized) diyfp representing the input number 'value' and its boundaries. @pre value must be finite and positive */ template boundaries compute_boundaries(FloatType value) { JSON_ASSERT(std::isfinite(value)); JSON_ASSERT(value > 0); // Convert the IEEE representation into a diyfp. // // If v is denormal: // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) // If v is normalized: // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) static_assert(std::numeric_limits::is_iec559, "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); constexpr int kMinExp = 1 - kBias; constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) using bits_type = typename std::conditional::type; const std::uint64_t bits = reinterpret_bits(value); const std::uint64_t E = bits >> (kPrecision - 1); const std::uint64_t F = bits & (kHiddenBit - 1); const bool is_denormal = E == 0; const diyfp v = is_denormal ? diyfp(F, kMinExp) : diyfp(F + kHiddenBit, static_cast(E) - kBias); // Compute the boundaries m- and m+ of the floating-point value // v = f * 2^e. // // Determine v- and v+, the floating-point predecessor and successor if v, // respectively. // // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) // // v+ = v + 2^e // // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ // between m- and m+ round to v, regardless of how the input rounding // algorithm breaks ties. // // ---+-------------+-------------+-------------+-------------+--- (A) // v- m- v m+ v+ // // -----------------+------+------+-------------+-------------+--- (B) // v- m- v m+ v+ const bool lower_boundary_is_closer = F == 0 && E > 1; const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1); const diyfp m_minus = lower_boundary_is_closer ? diyfp(4 * v.f - 1, v.e - 2) // (B) : diyfp(2 * v.f - 1, v.e - 1); // (A) // Determine the normalized w+ = m+. const diyfp w_plus = diyfp::normalize(m_plus); // Determine w- = m- such that e_(w-) = e_(w+). const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); return {diyfp::normalize(v), w_minus, w_plus}; } // Given normalized diyfp w, Grisu needs to find a (normalized) cached // power-of-ten c, such that the exponent of the product c * w = f * 2^e lies // within a certain range [alpha, gamma] (Definition 3.2 from [1]) // // alpha <= e = e_c + e_w + q <= gamma // // or // // f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q // <= f_c * f_w * 2^gamma // // Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies // // 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma // // or // // 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) // // The choice of (alpha,gamma) determines the size of the table and the form of // the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well // in practice: // // The idea is to cut the number c * w = f * 2^e into two parts, which can be // processed independently: An integral part p1, and a fractional part p2: // // f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e // = (f div 2^-e) + (f mod 2^-e) * 2^e // = p1 + p2 * 2^e // // The conversion of p1 into decimal form requires a series of divisions and // modulos by (a power of) 10. These operations are faster for 32-bit than for // 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be // achieved by choosing // // -e >= 32 or e <= -32 := gamma // // In order to convert the fractional part // // p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... // // into decimal form, the fraction is repeatedly multiplied by 10 and the digits // d[-i] are extracted in order: // // (10 * p2) div 2^-e = d[-1] // (10 * p2) mod 2^-e = d[-2] / 10^1 + ... // // The multiplication by 10 must not overflow. It is sufficient to choose // // 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. // // Since p2 = f mod 2^-e < 2^-e, // // -e <= 60 or e >= -60 := alpha constexpr int kAlpha = -60; constexpr int kGamma = -32; struct cached_power // c = f * 2^e ~= 10^k { std::uint64_t f; int e; int k; }; /*! For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c satisfies (Definition 3.2 from [1]) alpha <= e_c + e + q <= gamma. */ inline cached_power get_cached_power_for_binary_exponent(int e) { // Now // // alpha <= e_c + e + q <= gamma (1) // ==> f_c * 2^alpha <= c * 2^e * 2^q // // and since the c's are normalized, 2^(q-1) <= f_c, // // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) // ==> 2^(alpha - e - 1) <= c // // If c were an exact power of ten, i.e. c = 10^k, one may determine k as // // k = ceil( log_10( 2^(alpha - e - 1) ) ) // = ceil( (alpha - e - 1) * log_10(2) ) // // From the paper: // "In theory the result of the procedure could be wrong since c is rounded, // and the computation itself is approximated [...]. In practice, however, // this simple function is sufficient." // // For IEEE double precision floating-point numbers converted into // normalized diyfp's w = f * 2^e, with q = 64, // // e >= -1022 (min IEEE exponent) // -52 (p - 1) // -52 (p - 1, possibly normalize denormal IEEE numbers) // -11 (normalize the diyfp) // = -1137 // // and // // e <= +1023 (max IEEE exponent) // -52 (p - 1) // -11 (normalize the diyfp) // = 960 // // This binary exponent range [-1137,960] results in a decimal exponent // range [-307,324]. One does not need to store a cached power for each // k in this range. For each such k it suffices to find a cached power // such that the exponent of the product lies in [alpha,gamma]. // This implies that the difference of the decimal exponents of adjacent // table entries must be less than or equal to // // floor( (gamma - alpha) * log_10(2) ) = 8. // // (A smaller distance gamma-alpha would require a larger table.) // NB: // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. constexpr int kCachedPowersMinDecExp = -300; constexpr int kCachedPowersDecStep = 8; static constexpr std::array kCachedPowers = { { { 0xAB70FE17C79AC6CA, -1060, -300 }, { 0xFF77B1FCBEBCDC4F, -1034, -292 }, { 0xBE5691EF416BD60C, -1007, -284 }, { 0x8DD01FAD907FFC3C, -980, -276 }, { 0xD3515C2831559A83, -954, -268 }, { 0x9D71AC8FADA6C9B5, -927, -260 }, { 0xEA9C227723EE8BCB, -901, -252 }, { 0xAECC49914078536D, -874, -244 }, { 0x823C12795DB6CE57, -847, -236 }, { 0xC21094364DFB5637, -821, -228 }, { 0x9096EA6F3848984F, -794, -220 }, { 0xD77485CB25823AC7, -768, -212 }, { 0xA086CFCD97BF97F4, -741, -204 }, { 0xEF340A98172AACE5, -715, -196 }, { 0xB23867FB2A35B28E, -688, -188 }, { 0x84C8D4DFD2C63F3B, -661, -180 }, { 0xC5DD44271AD3CDBA, -635, -172 }, { 0x936B9FCEBB25C996, -608, -164 }, { 0xDBAC6C247D62A584, -582, -156 }, { 0xA3AB66580D5FDAF6, -555, -148 }, { 0xF3E2F893DEC3F126, -529, -140 }, { 0xB5B5ADA8AAFF80B8, -502, -132 }, { 0x87625F056C7C4A8B, -475, -124 }, { 0xC9BCFF6034C13053, -449, -116 }, { 0x964E858C91BA2655, -422, -108 }, { 0xDFF9772470297EBD, -396, -100 }, { 0xA6DFBD9FB8E5B88F, -369, -92 }, { 0xF8A95FCF88747D94, -343, -84 }, { 0xB94470938FA89BCF, -316, -76 }, { 0x8A08F0F8BF0F156B, -289, -68 }, { 0xCDB02555653131B6, -263, -60 }, { 0x993FE2C6D07B7FAC, -236, -52 }, { 0xE45C10C42A2B3B06, -210, -44 }, { 0xAA242499697392D3, -183, -36 }, { 0xFD87B5F28300CA0E, -157, -28 }, { 0xBCE5086492111AEB, -130, -20 }, { 0x8CBCCC096F5088CC, -103, -12 }, { 0xD1B71758E219652C, -77, -4 }, { 0x9C40000000000000, -50, 4 }, { 0xE8D4A51000000000, -24, 12 }, { 0xAD78EBC5AC620000, 3, 20 }, { 0x813F3978F8940984, 30, 28 }, { 0xC097CE7BC90715B3, 56, 36 }, { 0x8F7E32CE7BEA5C70, 83, 44 }, { 0xD5D238A4ABE98068, 109, 52 }, { 0x9F4F2726179A2245, 136, 60 }, { 0xED63A231D4C4FB27, 162, 68 }, { 0xB0DE65388CC8ADA8, 189, 76 }, { 0x83C7088E1AAB65DB, 216, 84 }, { 0xC45D1DF942711D9A, 242, 92 }, { 0x924D692CA61BE758, 269, 100 }, { 0xDA01EE641A708DEA, 295, 108 }, { 0xA26DA3999AEF774A, 322, 116 }, { 0xF209787BB47D6B85, 348, 124 }, { 0xB454E4A179DD1877, 375, 132 }, { 0x865B86925B9BC5C2, 402, 140 }, { 0xC83553C5C8965D3D, 428, 148 }, { 0x952AB45CFA97A0B3, 455, 156 }, { 0xDE469FBD99A05FE3, 481, 164 }, { 0xA59BC234DB398C25, 508, 172 }, { 0xF6C69A72A3989F5C, 534, 180 }, { 0xB7DCBF5354E9BECE, 561, 188 }, { 0x88FCF317F22241E2, 588, 196 }, { 0xCC20CE9BD35C78A5, 614, 204 }, { 0x98165AF37B2153DF, 641, 212 }, { 0xE2A0B5DC971F303A, 667, 220 }, { 0xA8D9D1535CE3B396, 694, 228 }, { 0xFB9B7CD9A4A7443C, 720, 236 }, { 0xBB764C4CA7A44410, 747, 244 }, { 0x8BAB8EEFB6409C1A, 774, 252 }, { 0xD01FEF10A657842C, 800, 260 }, { 0x9B10A4E5E9913129, 827, 268 }, { 0xE7109BFBA19C0C9D, 853, 276 }, { 0xAC2820D9623BF429, 880, 284 }, { 0x80444B5E7AA7CF85, 907, 292 }, { 0xBF21E44003ACDD2D, 933, 300 }, { 0x8E679C2F5E44FF8F, 960, 308 }, { 0xD433179D9C8CB841, 986, 316 }, { 0x9E19DB92B4E31BA9, 1013, 324 }, } }; // This computation gives exactly the same results for k as // k = ceil((kAlpha - e - 1) * 0.30102999566398114) // for |e| <= 1500, but doesn't require floating-point operations. // NB: log_10(2) ~= 78913 / 2^18 JSON_ASSERT(e >= -1500); JSON_ASSERT(e <= 1500); const int f = kAlpha - e - 1; const int k = (f * 78913) / (1 << 18) + static_cast(f > 0); const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; JSON_ASSERT(index >= 0); JSON_ASSERT(static_cast(index) < kCachedPowers.size()); const cached_power cached = kCachedPowers[static_cast(index)]; JSON_ASSERT(kAlpha <= cached.e + e + 64); JSON_ASSERT(kGamma >= cached.e + e + 64); return cached; } /*! For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. For n == 0, returns 1 and sets pow10 := 1. */ inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) { // LCOV_EXCL_START if (n >= 1000000000) { pow10 = 1000000000; return 10; } // LCOV_EXCL_STOP else if (n >= 100000000) { pow10 = 100000000; return 9; } else if (n >= 10000000) { pow10 = 10000000; return 8; } else if (n >= 1000000) { pow10 = 1000000; return 7; } else if (n >= 100000) { pow10 = 100000; return 6; } else if (n >= 10000) { pow10 = 10000; return 5; } else if (n >= 1000) { pow10 = 1000; return 4; } else if (n >= 100) { pow10 = 100; return 3; } else if (n >= 10) { pow10 = 10; return 2; } else { pow10 = 1; return 1; } } inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, std::uint64_t rest, std::uint64_t ten_k) { JSON_ASSERT(len >= 1); JSON_ASSERT(dist <= delta); JSON_ASSERT(rest <= delta); JSON_ASSERT(ten_k > 0); // <--------------------------- delta ----> // <---- dist ---------> // --------------[------------------+-------------------]-------------- // M- w M+ // // ten_k // <------> // <---- rest ----> // --------------[------------------+----+--------------]-------------- // w V // = buf * 10^k // // ten_k represents a unit-in-the-last-place in the decimal representation // stored in buf. // Decrement buf by ten_k while this takes buf closer to w. // The tests are written in this order to avoid overflow in unsigned // integer arithmetic. while (rest < dist && delta - rest >= ten_k && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) { JSON_ASSERT(buf[len - 1] != '0'); buf[len - 1]--; rest += ten_k; } } /*! Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. M- and M+ must be normalized and share the same exponent -60 <= e <= -32. */ inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, diyfp M_minus, diyfp w, diyfp M_plus) { static_assert(kAlpha >= -60, "internal error"); static_assert(kGamma <= -32, "internal error"); // Generates the digits (and the exponent) of a decimal floating-point // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. // // <--------------------------- delta ----> // <---- dist ---------> // --------------[------------------+-------------------]-------------- // M- w M+ // // Grisu2 generates the digits of M+ from left to right and stops as soon as // V is in [M-,M+]. JSON_ASSERT(M_plus.e >= kAlpha); JSON_ASSERT(M_plus.e <= kGamma); std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): // // M+ = f * 2^e // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e // = ((p1 ) * 2^-e + (p2 )) * 2^e // = p1 + p2 * 2^e const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e // 1) // // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] JSON_ASSERT(p1 > 0); std::uint32_t pow10; const int k = find_largest_pow10(p1, pow10); // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) // // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) // // M+ = p1 + p2 * 2^e // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e // = d[k-1] * 10^(k-1) + ( rest) * 2^e // // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) // // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] // // but stop as soon as // // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e int n = k; while (n > 0) { // Invariants: // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) // pow10 = 10^(n-1) <= p1 < 10^n // const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) // // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) // JSON_ASSERT(d <= 9); buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d // // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) // p1 = r; n--; // // M+ = buffer * 10^n + (p1 + p2 * 2^e) // pow10 = 10^n // // Now check if enough digits have been generated. // Compute // // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e // // Note: // Since rest and delta share the same exponent e, it suffices to // compare the significands. const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; if (rest <= delta) { // V = buffer * 10^n, with M- <= V <= M+. decimal_exponent += n; // We may now just stop. But instead look if the buffer could be // decremented to bring V closer to w. // // pow10 = 10^n is now 1 ulp in the decimal representation V. // The rounding procedure works with diyfp's with an implicit // exponent of e. // // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e // const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; grisu2_round(buffer, length, dist, delta, rest, ten_n); return; } pow10 /= 10; // // pow10 = 10^(n-1) <= p1 < 10^n // Invariants restored. } // 2) // // The digits of the integral part have been generated: // // M+ = d[k-1]...d[1]d[0] + p2 * 2^e // = buffer + p2 * 2^e // // Now generate the digits of the fractional part p2 * 2^e. // // Note: // No decimal point is generated: the exponent is adjusted instead. // // p2 actually represents the fraction // // p2 * 2^e // = p2 / 2^-e // = d[-1] / 10^1 + d[-2] / 10^2 + ... // // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) // // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) // // using // // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) // = ( d) * 2^-e + ( r) // // or // 10^m * p2 * 2^e = d + r * 2^e // // i.e. // // M+ = buffer + p2 * 2^e // = buffer + 10^-m * (d + r * 2^e) // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e // // and stop as soon as 10^-m * r * 2^e <= delta * 2^e JSON_ASSERT(p2 > delta); int m = 0; for (;;) { // Invariant: // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e // = buffer * 10^-m + 10^-m * (p2 ) * 2^e // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e // JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); p2 *= 10; const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e // // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e // JSON_ASSERT(d <= 9); buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d // // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e // p2 = r; m++; // // M+ = buffer * 10^-m + 10^-m * p2 * 2^e // Invariant restored. // Check if enough digits have been generated. // // 10^-m * p2 * 2^e <= delta * 2^e // p2 * 2^e <= 10^m * delta * 2^e // p2 <= 10^m * delta delta *= 10; dist *= 10; if (p2 <= delta) { break; } } // V = buffer * 10^-m, with M- <= V <= M+. decimal_exponent -= m; // 1 ulp in the decimal representation is now 10^-m. // Since delta and dist are now scaled by 10^m, we need to do the // same with ulp in order to keep the units in sync. // // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e // const std::uint64_t ten_m = one.f; grisu2_round(buffer, length, dist, delta, p2, ten_m); // By construction this algorithm generates the shortest possible decimal // number (Loitsch, Theorem 6.2) which rounds back to w. // For an input number of precision p, at least // // N = 1 + ceil(p * log_10(2)) // // decimal digits are sufficient to identify all binary floating-point // numbers (Matula, "In-and-Out conversions"). // This implies that the algorithm does not produce more than N decimal // digits. // // N = 17 for p = 53 (IEEE double precision) // N = 9 for p = 24 (IEEE single precision) } /*! v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10. */ JSON_HEDLEY_NON_NULL(1) inline void grisu2(char* buf, int& len, int& decimal_exponent, diyfp m_minus, diyfp v, diyfp m_plus) { JSON_ASSERT(m_plus.e == m_minus.e); JSON_ASSERT(m_plus.e == v.e); // --------(-----------------------+-----------------------)-------- (A) // m- v m+ // // --------------------(-----------+-----------------------)-------- (B) // m- v m+ // // First scale v (and m- and m+) such that the exponent is in the range // [alpha, gamma]. const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] const diyfp w = diyfp::mul(v, c_minus_k); const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); // ----(---+---)---------------(---+---)---------------(---+---)---- // w- w w+ // = c*m- = c*v = c*m+ // // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and // w+ are now off by a small amount. // In fact: // // w - v * 10^k < 1 ulp // // To account for this inaccuracy, add resp. subtract 1 ulp. // // --------+---[---------------(---+---)---------------]---+-------- // w- M- w M+ w+ // // Now any number in [M-, M+] (bounds included) will round to w when input, // regardless of how the input rounding algorithm breaks ties. // // And digit_gen generates the shortest possible such number in [M-, M+]. // Note that this does not mean that Grisu2 always generates the shortest // possible number in the interval (m-, m+). const diyfp M_minus(w_minus.f + 1, w_minus.e); const diyfp M_plus (w_plus.f - 1, w_plus.e ); decimal_exponent = -cached.k; // = -(-k) = k grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); } /*! v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10. */ template JSON_HEDLEY_NON_NULL(1) void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) { static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, "internal error: not enough precision"); JSON_ASSERT(std::isfinite(value)); JSON_ASSERT(value > 0); // If the neighbors (and boundaries) of 'value' are always computed for double-precision // numbers, all float's can be recovered using strtod (and strtof). However, the resulting // decimal representations are not exactly "short". // // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) // says "value is converted to a string as if by std::sprintf in the default ("C") locale" // and since sprintf promotes float's to double's, I think this is exactly what 'std::to_chars' // does. // On the other hand, the documentation for 'std::to_chars' requires that "parsing the // representation using the corresponding std::from_chars function recovers value exactly". That // indicates that single precision floating-point numbers should be recovered using // 'std::strtof'. // // NB: If the neighbors are computed for single-precision numbers, there is a single float // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision // value is off by 1 ulp. #if 0 const boundaries w = compute_boundaries(static_cast(value)); #else const boundaries w = compute_boundaries(value); #endif grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); } /*! @brief appends a decimal representation of e to buf @return a pointer to the element following the exponent. @pre -1000 < e < 1000 */ JSON_HEDLEY_NON_NULL(1) JSON_HEDLEY_RETURNS_NON_NULL inline char* append_exponent(char* buf, int e) { JSON_ASSERT(e > -1000); JSON_ASSERT(e < 1000); if (e < 0) { e = -e; *buf++ = '-'; } else { *buf++ = '+'; } auto k = static_cast(e); if (k < 10) { // Always print at least two digits in the exponent. // This is for compatibility with printf("%g"). *buf++ = '0'; *buf++ = static_cast('0' + k); } else if (k < 100) { *buf++ = static_cast('0' + k / 10); k %= 10; *buf++ = static_cast('0' + k); } else { *buf++ = static_cast('0' + k / 100); k %= 100; *buf++ = static_cast('0' + k / 10); k %= 10; *buf++ = static_cast('0' + k); } return buf; } /*! @brief prettify v = buf * 10^decimal_exponent If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point notation. Otherwise it will be printed in exponential notation. @pre min_exp < 0 @pre max_exp > 0 */ JSON_HEDLEY_NON_NULL(1) JSON_HEDLEY_RETURNS_NON_NULL inline char* format_buffer(char* buf, int len, int decimal_exponent, int min_exp, int max_exp) { JSON_ASSERT(min_exp < 0); JSON_ASSERT(max_exp > 0); const int k = len; const int n = len + decimal_exponent; // v = buf * 10^(n-k) // k is the length of the buffer (number of decimal digits) // n is the position of the decimal point relative to the start of the buffer. if (k <= n && n <= max_exp) { // digits[000] // len <= max_exp + 2 std::memset(buf + k, '0', static_cast(n) - static_cast(k)); // Make it look like a floating-point number (#362, #378) buf[n + 0] = '.'; buf[n + 1] = '0'; return buf + (static_cast(n) + 2); } if (0 < n && n <= max_exp) { // dig.its // len <= max_digits10 + 1 JSON_ASSERT(k > n); std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); buf[n] = '.'; return buf + (static_cast(k) + 1U); } if (min_exp < n && n <= 0) { // 0.[000]digits // len <= 2 + (-min_exp - 1) + max_digits10 std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); buf[0] = '0'; buf[1] = '.'; std::memset(buf + 2, '0', static_cast(-n)); return buf + (2U + static_cast(-n) + static_cast(k)); } if (k == 1) { // dE+123 // len <= 1 + 5 buf += 1; } else { // d.igitsE+123 // len <= max_digits10 + 1 + 5 std::memmove(buf + 2, buf + 1, static_cast(k) - 1); buf[1] = '.'; buf += 1 + static_cast(k); } *buf++ = 'e'; return append_exponent(buf, n - 1); } } // namespace dtoa_impl /*! @brief generates a decimal representation of the floating-point number value in [first, last). The format of the resulting decimal representation is similar to printf's %g format. Returns an iterator pointing past-the-end of the decimal representation. @note The input number must be finite, i.e. NaN's and Inf's are not supported. @note The buffer must be large enough. @note The result is NOT null-terminated. */ template JSON_HEDLEY_NON_NULL(1, 2) JSON_HEDLEY_RETURNS_NON_NULL char* to_chars(char* first, const char* last, FloatType value) { static_cast(last); // maybe unused - fix warning JSON_ASSERT(std::isfinite(value)); // Use signbit(value) instead of (value < 0) since signbit works for -0. if (std::signbit(value)) { value = -value; *first++ = '-'; } if (value == 0) // +-0 { *first++ = '0'; // Make it look like a floating-point number (#362, #378) *first++ = '.'; *first++ = '0'; return first; } JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); // Compute v = buffer * 10^decimal_exponent. // The decimal digits are stored in the buffer, which needs to be interpreted // as an unsigned decimal integer. // len is the length of the buffer, i.e. the number of decimal digits. int len = 0; int decimal_exponent = 0; dtoa_impl::grisu2(first, len, decimal_exponent, value); JSON_ASSERT(len <= std::numeric_limits::max_digits10); // Format the buffer like printf("%.*g", prec, value) constexpr int kMinExp = -4; // Use digits10 here to increase compatibility with version 2. constexpr int kMaxExp = std::numeric_limits::digits10; JSON_ASSERT(last - first >= kMaxExp + 2); JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); } } // namespace detail } // namespace nlohmann // #include // #include // #include // #include // #include // #include namespace nlohmann { namespace detail { /////////////////// // serialization // /////////////////// /// how to treat decoding errors enum class error_handler_t { strict, ///< throw a type_error exception in case of invalid UTF-8 replace, ///< replace invalid UTF-8 sequences with U+FFFD ignore ///< ignore invalid UTF-8 sequences }; template class serializer { using string_t = typename BasicJsonType::string_t; using number_float_t = typename BasicJsonType::number_float_t; using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using binary_char_t = typename BasicJsonType::binary_t::value_type; static constexpr std::uint8_t UTF8_ACCEPT = 0; static constexpr std::uint8_t UTF8_REJECT = 1; public: /*! @param[in] s output stream to serialize to @param[in] ichar indentation character to use @param[in] error_handler_ how to react on decoding errors */ serializer(output_adapter_t s, const char ichar, error_handler_t error_handler_ = error_handler_t::strict) : o(std::move(s)) , loc(std::localeconv()) , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->thousands_sep))) , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->decimal_point))) , indent_char(ichar) , indent_string(512, indent_char) , error_handler(error_handler_) {} // delete because of pointer members serializer(const serializer&) = delete; serializer& operator=(const serializer&) = delete; serializer(serializer&&) = delete; serializer& operator=(serializer&&) = delete; ~serializer() = default; /*! @brief internal implementation of the serialization function This function is called by the public member function dump and organizes the serialization internally. The indentation level is propagated as additional parameter. In case of arrays and objects, the function is called recursively. - strings and object keys are escaped using `escape_string()` - integer numbers are converted implicitly via `operator<<` - floating-point numbers are converted to a string using `"%g"` format - binary values are serialized as objects containing the subtype and the byte array @param[in] val value to serialize @param[in] pretty_print whether the output shall be pretty-printed @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters in the output are escaped with `\uXXXX` sequences, and the result consists of ASCII characters only. @param[in] indent_step the indent level @param[in] current_indent the current indent level (only used internally) */ void dump(const BasicJsonType& val, const bool pretty_print, const bool ensure_ascii, const unsigned int indent_step, const unsigned int current_indent = 0) { switch (val.m_type) { case value_t::object: { if (val.m_value.object->empty()) { o->write_characters("{}", 2); return; } if (pretty_print) { o->write_characters("{\n", 2); // variable to hold indentation for recursive calls const auto new_indent = current_indent + indent_step; if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) { indent_string.resize(indent_string.size() * 2, ' '); } // first n-1 elements auto i = val.m_value.object->cbegin(); for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) { o->write_characters(indent_string.c_str(), new_indent); o->write_character('\"'); dump_escaped(i->first, ensure_ascii); o->write_characters("\": ", 3); dump(i->second, true, ensure_ascii, indent_step, new_indent); o->write_characters(",\n", 2); } // last element JSON_ASSERT(i != val.m_value.object->cend()); JSON_ASSERT(std::next(i) == val.m_value.object->cend()); o->write_characters(indent_string.c_str(), new_indent); o->write_character('\"'); dump_escaped(i->first, ensure_ascii); o->write_characters("\": ", 3); dump(i->second, true, ensure_ascii, indent_step, new_indent); o->write_character('\n'); o->write_characters(indent_string.c_str(), current_indent); o->write_character('}'); } else { o->write_character('{'); // first n-1 elements auto i = val.m_value.object->cbegin(); for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) { o->write_character('\"'); dump_escaped(i->first, ensure_ascii); o->write_characters("\":", 2); dump(i->second, false, ensure_ascii, indent_step, current_indent); o->write_character(','); } // last element JSON_ASSERT(i != val.m_value.object->cend()); JSON_ASSERT(std::next(i) == val.m_value.object->cend()); o->write_character('\"'); dump_escaped(i->first, ensure_ascii); o->write_characters("\":", 2); dump(i->second, false, ensure_ascii, indent_step, current_indent); o->write_character('}'); } return; } case value_t::array: { if (val.m_value.array->empty()) { o->write_characters("[]", 2); return; } if (pretty_print) { o->write_characters("[\n", 2); // variable to hold indentation for recursive calls const auto new_indent = current_indent + indent_step; if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) { indent_string.resize(indent_string.size() * 2, ' '); } // first n-1 elements for (auto i = val.m_value.array->cbegin(); i != val.m_value.array->cend() - 1; ++i) { o->write_characters(indent_string.c_str(), new_indent); dump(*i, true, ensure_ascii, indent_step, new_indent); o->write_characters(",\n", 2); } // last element JSON_ASSERT(!val.m_value.array->empty()); o->write_characters(indent_string.c_str(), new_indent); dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent); o->write_character('\n'); o->write_characters(indent_string.c_str(), current_indent); o->write_character(']'); } else { o->write_character('['); // first n-1 elements for (auto i = val.m_value.array->cbegin(); i != val.m_value.array->cend() - 1; ++i) { dump(*i, false, ensure_ascii, indent_step, current_indent); o->write_character(','); } // last element JSON_ASSERT(!val.m_value.array->empty()); dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent); o->write_character(']'); } return; } case value_t::string: { o->write_character('\"'); dump_escaped(*val.m_value.string, ensure_ascii); o->write_character('\"'); return; } case value_t::binary: { if (pretty_print) { o->write_characters("{\n", 2); // variable to hold indentation for recursive calls const auto new_indent = current_indent + indent_step; if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) { indent_string.resize(indent_string.size() * 2, ' '); } o->write_characters(indent_string.c_str(), new_indent); o->write_characters("\"bytes\": [", 10); if (!val.m_value.binary->empty()) { for (auto i = val.m_value.binary->cbegin(); i != val.m_value.binary->cend() - 1; ++i) { dump_integer(*i); o->write_characters(", ", 2); } dump_integer(val.m_value.binary->back()); } o->write_characters("],\n", 3); o->write_characters(indent_string.c_str(), new_indent); o->write_characters("\"subtype\": ", 11); if (val.m_value.binary->has_subtype()) { dump_integer(val.m_value.binary->subtype()); } else { o->write_characters("null", 4); } o->write_character('\n'); o->write_characters(indent_string.c_str(), current_indent); o->write_character('}'); } else { o->write_characters("{\"bytes\":[", 10); if (!val.m_value.binary->empty()) { for (auto i = val.m_value.binary->cbegin(); i != val.m_value.binary->cend() - 1; ++i) { dump_integer(*i); o->write_character(','); } dump_integer(val.m_value.binary->back()); } o->write_characters("],\"subtype\":", 12); if (val.m_value.binary->has_subtype()) { dump_integer(val.m_value.binary->subtype()); o->write_character('}'); } else { o->write_characters("null}", 5); } } return; } case value_t::boolean: { if (val.m_value.boolean) { o->write_characters("true", 4); } else { o->write_characters("false", 5); } return; } case value_t::number_integer: { dump_integer(val.m_value.number_integer); return; } case value_t::number_unsigned: { dump_integer(val.m_value.number_unsigned); return; } case value_t::number_float: { dump_float(val.m_value.number_float); return; } case value_t::discarded: { o->write_characters("", 11); return; } case value_t::null: { o->write_characters("null", 4); return; } default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } } private: /*! @brief dump escaped string Escape a string by replacing certain special characters by a sequence of an escape character (backslash) and another character and other control characters by a sequence of "\u" followed by a four-digit hex representation. The escaped string is written to output stream @a o. @param[in] s the string to escape @param[in] ensure_ascii whether to escape non-ASCII characters with \uXXXX sequences @complexity Linear in the length of string @a s. */ void dump_escaped(const string_t& s, const bool ensure_ascii) { std::uint32_t codepoint; std::uint8_t state = UTF8_ACCEPT; std::size_t bytes = 0; // number of bytes written to string_buffer // number of bytes written at the point of the last valid byte std::size_t bytes_after_last_accept = 0; std::size_t undumped_chars = 0; for (std::size_t i = 0; i < s.size(); ++i) { const auto byte = static_cast(s[i]); switch (decode(state, codepoint, byte)) { case UTF8_ACCEPT: // decode found a new code point { switch (codepoint) { case 0x08: // backspace { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = 'b'; break; } case 0x09: // horizontal tab { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = 't'; break; } case 0x0A: // newline { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = 'n'; break; } case 0x0C: // formfeed { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = 'f'; break; } case 0x0D: // carriage return { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = 'r'; break; } case 0x22: // quotation mark { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = '\"'; break; } case 0x5C: // reverse solidus { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = '\\'; break; } default: { // escape control characters (0x00..0x1F) or, if // ensure_ascii parameter is used, non-ASCII characters if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F))) { if (codepoint <= 0xFFFF) { (std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x", static_cast(codepoint)); bytes += 6; } else { (std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", static_cast(0xD7C0u + (codepoint >> 10u)), static_cast(0xDC00u + (codepoint & 0x3FFu))); bytes += 12; } } else { // copy byte to buffer (all previous bytes // been copied have in default case above) string_buffer[bytes++] = s[i]; } break; } } // write buffer and reset index; there must be 13 bytes // left, as this is the maximal number of bytes to be // written ("\uxxxx\uxxxx\0") for one code point if (string_buffer.size() - bytes < 13) { o->write_characters(string_buffer.data(), bytes); bytes = 0; } // remember the byte position of this accept bytes_after_last_accept = bytes; undumped_chars = 0; break; } case UTF8_REJECT: // decode found invalid UTF-8 byte { switch (error_handler) { case error_handler_t::strict: { std::string sn(3, '\0'); (std::snprintf)(&sn[0], sn.size(), "%.2X", byte); JSON_THROW(type_error::create(316, "invalid UTF-8 byte at index " + std::to_string(i) + ": 0x" + sn)); } case error_handler_t::ignore: case error_handler_t::replace: { // in case we saw this character the first time, we // would like to read it again, because the byte // may be OK for itself, but just not OK for the // previous sequence if (undumped_chars > 0) { --i; } // reset length buffer to the last accepted index; // thus removing/ignoring the invalid characters bytes = bytes_after_last_accept; if (error_handler == error_handler_t::replace) { // add a replacement character if (ensure_ascii) { string_buffer[bytes++] = '\\'; string_buffer[bytes++] = 'u'; string_buffer[bytes++] = 'f'; string_buffer[bytes++] = 'f'; string_buffer[bytes++] = 'f'; string_buffer[bytes++] = 'd'; } else { string_buffer[bytes++] = detail::binary_writer::to_char_type('\xEF'); string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBF'); string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBD'); } // write buffer and reset index; there must be 13 bytes // left, as this is the maximal number of bytes to be // written ("\uxxxx\uxxxx\0") for one code point if (string_buffer.size() - bytes < 13) { o->write_characters(string_buffer.data(), bytes); bytes = 0; } bytes_after_last_accept = bytes; } undumped_chars = 0; // continue processing the string state = UTF8_ACCEPT; break; } default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } break; } default: // decode found yet incomplete multi-byte code point { if (!ensure_ascii) { // code point will not be escaped - copy byte to buffer string_buffer[bytes++] = s[i]; } ++undumped_chars; break; } } } // we finished processing the string if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT)) { // write buffer if (bytes > 0) { o->write_characters(string_buffer.data(), bytes); } } else { // we finish reading, but do not accept: string was incomplete switch (error_handler) { case error_handler_t::strict: { std::string sn(3, '\0'); (std::snprintf)(&sn[0], sn.size(), "%.2X", static_cast(s.back())); JSON_THROW(type_error::create(316, "incomplete UTF-8 string; last byte: 0x" + sn)); } case error_handler_t::ignore: { // write all accepted bytes o->write_characters(string_buffer.data(), bytes_after_last_accept); break; } case error_handler_t::replace: { // write all accepted bytes o->write_characters(string_buffer.data(), bytes_after_last_accept); // add a replacement character if (ensure_ascii) { o->write_characters("\\ufffd", 6); } else { o->write_characters("\xEF\xBF\xBD", 3); } break; } default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } } } /*! @brief count digits Count the number of decimal (base 10) digits for an input unsigned integer. @param[in] x unsigned integer number to count its digits @return number of decimal digits */ inline unsigned int count_digits(number_unsigned_t x) noexcept { unsigned int n_digits = 1; for (;;) { if (x < 10) { return n_digits; } if (x < 100) { return n_digits + 1; } if (x < 1000) { return n_digits + 2; } if (x < 10000) { return n_digits + 3; } x = x / 10000u; n_digits += 4; } } /*! @brief dump an integer Dump a given integer to output stream @a o. Works internally with @a number_buffer. @param[in] x integer number (signed or unsigned) to dump @tparam NumberType either @a number_integer_t or @a number_unsigned_t */ template < typename NumberType, detail::enable_if_t < std::is_same::value || std::is_same::value || std::is_same::value, int > = 0 > void dump_integer(NumberType x) { static constexpr std::array, 100> digits_to_99 { { {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}}, {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}}, {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}}, {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}}, {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}}, {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}}, {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}}, {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}}, {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}}, {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}}, } }; // special case for "0" if (x == 0) { o->write_character('0'); return; } // use a pointer to fill the buffer auto buffer_ptr = number_buffer.begin(); const bool is_negative = std::is_same::value && !(x >= 0); // see issue #755 number_unsigned_t abs_value; unsigned int n_chars; if (is_negative) { *buffer_ptr = '-'; abs_value = remove_sign(static_cast(x)); // account one more byte for the minus sign n_chars = 1 + count_digits(abs_value); } else { abs_value = static_cast(x); n_chars = count_digits(abs_value); } // spare 1 byte for '\0' JSON_ASSERT(n_chars < number_buffer.size() - 1); // jump to the end to generate the string from backward // so we later avoid reversing the result buffer_ptr += n_chars; // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu // See: https://www.youtube.com/watch?v=o4-CwDo2zpg while (abs_value >= 100) { const auto digits_index = static_cast((abs_value % 100)); abs_value /= 100; *(--buffer_ptr) = digits_to_99[digits_index][1]; *(--buffer_ptr) = digits_to_99[digits_index][0]; } if (abs_value >= 10) { const auto digits_index = static_cast(abs_value); *(--buffer_ptr) = digits_to_99[digits_index][1]; *(--buffer_ptr) = digits_to_99[digits_index][0]; } else { *(--buffer_ptr) = static_cast('0' + abs_value); } o->write_characters(number_buffer.data(), n_chars); } /*! @brief dump a floating-point number Dump a given floating-point number to output stream @a o. Works internally with @a number_buffer. @param[in] x floating-point number to dump */ void dump_float(number_float_t x) { // NaN / inf if (!std::isfinite(x)) { o->write_characters("null", 4); return; } // If number_float_t is an IEEE-754 single or double precision number, // use the Grisu2 algorithm to produce short numbers which are // guaranteed to round-trip, using strtof and strtod, resp. // // NB: The test below works if == . static constexpr bool is_ieee_single_or_double = (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 24 && std::numeric_limits::max_exponent == 128) || (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 53 && std::numeric_limits::max_exponent == 1024); dump_float(x, std::integral_constant()); } void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/) { char* begin = number_buffer.data(); char* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x); o->write_characters(begin, static_cast(end - begin)); } void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/) { // get number of digits for a float -> text -> float round-trip static constexpr auto d = std::numeric_limits::max_digits10; // the actual conversion std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x); // negative value indicates an error JSON_ASSERT(len > 0); // check if buffer was large enough JSON_ASSERT(static_cast(len) < number_buffer.size()); // erase thousands separator if (thousands_sep != '\0') { const auto end = std::remove(number_buffer.begin(), number_buffer.begin() + len, thousands_sep); std::fill(end, number_buffer.end(), '\0'); JSON_ASSERT((end - number_buffer.begin()) <= len); len = (end - number_buffer.begin()); } // convert decimal point to '.' if (decimal_point != '\0' && decimal_point != '.') { const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point); if (dec_pos != number_buffer.end()) { *dec_pos = '.'; } } o->write_characters(number_buffer.data(), static_cast(len)); // determine if need to append ".0" const bool value_is_int_like = std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, [](char c) { return c == '.' || c == 'e'; }); if (value_is_int_like) { o->write_characters(".0", 2); } } /*! @brief check whether a string is UTF-8 encoded The function checks each byte of a string whether it is UTF-8 encoded. The result of the check is stored in the @a state parameter. The function must be called initially with state 0 (accept). State 1 means the string must be rejected, because the current byte is not allowed. If the string is completely processed, but the state is non-zero, the string ended prematurely; that is, the last byte indicated more bytes should have followed. @param[in,out] state the state of the decoding @param[in,out] codep codepoint (valid only if resulting state is UTF8_ACCEPT) @param[in] byte next byte to decode @return new state @note The function has been edited: a std::array is used. @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ */ static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept { static const std::array utf8d = { { 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, // 00..1F 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, // 20..3F 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, // 40..5F 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, // 60..7F 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8 } }; const std::uint8_t type = utf8d[byte]; codep = (state != UTF8_ACCEPT) ? (byte & 0x3fu) | (codep << 6u) : (0xFFu >> type) & (byte); std::size_t index = 256u + static_cast(state) * 16u + static_cast(type); JSON_ASSERT(index < 400); state = utf8d[index]; return state; } /* * Overload to make the compiler happy while it is instantiating * dump_integer for number_unsigned_t. * Must never be called. */ number_unsigned_t remove_sign(number_unsigned_t x) { JSON_ASSERT(false); // LCOV_EXCL_LINE return x; // LCOV_EXCL_LINE } /* * Helper function for dump_integer * * This function takes a negative signed integer and returns its absolute * value as unsigned integer. The plus/minus shuffling is necessary as we can * not directly remove the sign of an arbitrary signed integer as the * absolute values of INT_MIN and INT_MAX are usually not the same. See * #1708 for details. */ inline number_unsigned_t remove_sign(number_integer_t x) noexcept { JSON_ASSERT(x < 0 && x < (std::numeric_limits::max)()); return static_cast(-(x + 1)) + 1; } private: /// the output of the serializer output_adapter_t o = nullptr; /// a (hopefully) large enough character buffer std::array number_buffer{{}}; /// the locale const std::lconv* loc = nullptr; /// the locale's thousand separator character const char thousands_sep = '\0'; /// the locale's decimal point character const char decimal_point = '\0'; /// string buffer std::array string_buffer{{}}; /// the indentation character const char indent_char; /// the indentation string string_t indent_string; /// error_handler how to react on decoding errors const error_handler_t error_handler; }; } // namespace detail } // namespace nlohmann // #include // #include // #include #include // less #include // allocator #include // pair #include // vector namespace nlohmann { /// ordered_map: a minimal map-like container that preserves insertion order /// for use within nlohmann::basic_json template , class Allocator = std::allocator>> struct ordered_map : std::vector, Allocator> { using key_type = Key; using mapped_type = T; using Container = std::vector, Allocator>; using typename Container::iterator; using typename Container::const_iterator; using typename Container::size_type; using typename Container::value_type; // Explicit constructors instead of `using Container::Container` // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4) ordered_map(const Allocator& alloc = Allocator()) : Container{alloc} {} template ordered_map(It first, It last, const Allocator& alloc = Allocator()) : Container{first, last, alloc} {} ordered_map(std::initializer_list init, const Allocator& alloc = Allocator() ) : Container{init, alloc} {} std::pair emplace(const key_type& key, T&& t) { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == key) { return {it, false}; } } Container::emplace_back(key, t); return {--this->end(), true}; } T& operator[](const Key& key) { return emplace(key, T{}).first->second; } const T& operator[](const Key& key) const { return at(key); } T& at(const Key& key) { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == key) { return it->second; } } throw std::out_of_range("key not found"); } const T& at(const Key& key) const { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == key) { return it->second; } } throw std::out_of_range("key not found"); } size_type erase(const Key& key) { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == key) { // Since we cannot move const Keys, re-construct them in place for (auto next = it; ++next != this->end(); ++it) { it->~value_type(); // Destroy but keep allocation new (&*it) value_type{std::move(*next)}; } Container::pop_back(); return 1; } } return 0; } iterator erase(iterator pos) { auto it = pos; // Since we cannot move const Keys, re-construct them in place for (auto next = it; ++next != this->end(); ++it) { it->~value_type(); // Destroy but keep allocation new (&*it) value_type{std::move(*next)}; } Container::pop_back(); return pos; } size_type count(const Key& key) const { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == key) { return 1; } } return 0; } iterator find(const Key& key) { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == key) { return it; } } return Container::end(); } const_iterator find(const Key& key) const { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == key) { return it; } } return Container::end(); } std::pair insert( value_type&& value ) { return emplace(value.first, std::move(value.second)); } std::pair insert( const value_type& value ) { for (auto it = this->begin(); it != this->end(); ++it) { if (it->first == value.first) { return {it, false}; } } Container::push_back(value); return {--this->end(), true}; } }; } // namespace nlohmann /*! @brief namespace for Niels Lohmann @see https://github.com/nlohmann @since version 1.0.0 */ namespace nlohmann { /*! @brief a class to store JSON values @tparam ObjectType type for JSON objects (`std::map` by default; will be used in @ref object_t) @tparam ArrayType type for JSON arrays (`std::vector` by default; will be used in @ref array_t) @tparam StringType type for JSON strings and object keys (`std::string` by default; will be used in @ref string_t) @tparam BooleanType type for JSON booleans (`bool` by default; will be used in @ref boolean_t) @tparam NumberIntegerType type for JSON integer numbers (`int64_t` by default; will be used in @ref number_integer_t) @tparam NumberUnsignedType type for JSON unsigned integer numbers (@c `uint64_t` by default; will be used in @ref number_unsigned_t) @tparam NumberFloatType type for JSON floating-point numbers (`double` by default; will be used in @ref number_float_t) @tparam BinaryType type for packed binary data for compatibility with binary serialization formats (`std::vector` by default; will be used in @ref binary_t) @tparam AllocatorType type of the allocator to use (`std::allocator` by default) @tparam JSONSerializer the serializer to resolve internal calls to `to_json()` and `from_json()` (@ref adl_serializer by default) @requirement The class satisfies the following concept requirements: - Basic - [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): JSON values can be default constructed. The result will be a JSON null value. - [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible): A JSON value can be constructed from an rvalue argument. - [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible): A JSON value can be copy-constructed from an lvalue expression. - [MoveAssignable](https://en.cppreference.com/w/cpp/named_req/MoveAssignable): A JSON value van be assigned from an rvalue argument. - [CopyAssignable](https://en.cppreference.com/w/cpp/named_req/CopyAssignable): A JSON value can be copy-assigned from an lvalue expression. - [Destructible](https://en.cppreference.com/w/cpp/named_req/Destructible): JSON values can be destructed. - Layout - [StandardLayoutType](https://en.cppreference.com/w/cpp/named_req/StandardLayoutType): JSON values have [standard layout](https://en.cppreference.com/w/cpp/language/data_members#Standard_layout): All non-static data members are private and standard layout types, the class has no virtual functions or (virtual) base classes. - Library-wide - [EqualityComparable](https://en.cppreference.com/w/cpp/named_req/EqualityComparable): JSON values can be compared with `==`, see @ref operator==(const_reference,const_reference). - [LessThanComparable](https://en.cppreference.com/w/cpp/named_req/LessThanComparable): JSON values can be compared with `<`, see @ref operator<(const_reference,const_reference). - [Swappable](https://en.cppreference.com/w/cpp/named_req/Swappable): Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of other compatible types, using unqualified function call @ref swap(). - [NullablePointer](https://en.cppreference.com/w/cpp/named_req/NullablePointer): JSON values can be compared against `std::nullptr_t` objects which are used to model the `null` value. - Container - [Container](https://en.cppreference.com/w/cpp/named_req/Container): JSON values can be used like STL containers and provide iterator access. - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer); JSON values can be used like STL containers and provide reverse iterator access. @invariant The member variables @a m_value and @a m_type have the following relationship: - If `m_type == value_t::object`, then `m_value.object != nullptr`. - If `m_type == value_t::array`, then `m_value.array != nullptr`. - If `m_type == value_t::string`, then `m_value.string != nullptr`. The invariants are checked by member function assert_invariant(). @internal @note ObjectType trick from https://stackoverflow.com/a/9860911 @endinternal @see [RFC 7159: The JavaScript Object Notation (JSON) Data Interchange Format](http://rfc7159.net/rfc7159) @since version 1.0.0 @nosubgrouping */ NLOHMANN_BASIC_JSON_TPL_DECLARATION class basic_json { private: template friend struct detail::external_constructor; friend ::nlohmann::json_pointer; template friend class ::nlohmann::detail::parser; friend ::nlohmann::detail::serializer; template friend class ::nlohmann::detail::iter_impl; template friend class ::nlohmann::detail::binary_writer; template friend class ::nlohmann::detail::binary_reader; template friend class ::nlohmann::detail::json_sax_dom_parser; template friend class ::nlohmann::detail::json_sax_dom_callback_parser; /// workaround type for MSVC using basic_json_t = NLOHMANN_BASIC_JSON_TPL; // convenience aliases for types residing in namespace detail; using lexer = ::nlohmann::detail::lexer_base; template static ::nlohmann::detail::parser parser( InputAdapterType adapter, detail::parser_callback_tcb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false ) { return ::nlohmann::detail::parser(std::move(adapter), std::move(cb), allow_exceptions, ignore_comments); } using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t; template using internal_iterator = ::nlohmann::detail::internal_iterator; template using iter_impl = ::nlohmann::detail::iter_impl; template using iteration_proxy = ::nlohmann::detail::iteration_proxy; template using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator; template using output_adapter_t = ::nlohmann::detail::output_adapter_t; template using binary_reader = ::nlohmann::detail::binary_reader; template using binary_writer = ::nlohmann::detail::binary_writer; using serializer = ::nlohmann::detail::serializer; public: using value_t = detail::value_t; /// JSON Pointer, see @ref nlohmann::json_pointer using json_pointer = ::nlohmann::json_pointer; template using json_serializer = JSONSerializer; /// how to treat decoding errors using error_handler_t = detail::error_handler_t; /// how to treat CBOR tags using cbor_tag_handler_t = detail::cbor_tag_handler_t; /// helper type for initializer lists of basic_json values using initializer_list_t = std::initializer_list>; using input_format_t = detail::input_format_t; /// SAX interface type, see @ref nlohmann::json_sax using json_sax_t = json_sax; //////////////// // exceptions // //////////////// /// @name exceptions /// Classes to implement user-defined exceptions. /// @{ /// @copydoc detail::exception using exception = detail::exception; /// @copydoc detail::parse_error using parse_error = detail::parse_error; /// @copydoc detail::invalid_iterator using invalid_iterator = detail::invalid_iterator; /// @copydoc detail::type_error using type_error = detail::type_error; /// @copydoc detail::out_of_range using out_of_range = detail::out_of_range; /// @copydoc detail::other_error using other_error = detail::other_error; /// @} ///////////////////// // container types // ///////////////////// /// @name container types /// The canonic container types to use @ref basic_json like any other STL /// container. /// @{ /// the type of elements in a basic_json container using value_type = basic_json; /// the type of an element reference using reference = value_type&; /// the type of an element const reference using const_reference = const value_type&; /// a type to represent differences between iterators using difference_type = std::ptrdiff_t; /// a type to represent container sizes using size_type = std::size_t; /// the allocator type using allocator_type = AllocatorType; /// the type of an element pointer using pointer = typename std::allocator_traits::pointer; /// the type of an element const pointer using const_pointer = typename std::allocator_traits::const_pointer; /// an iterator for a basic_json container using iterator = iter_impl; /// a const iterator for a basic_json container using const_iterator = iter_impl; /// a reverse iterator for a basic_json container using reverse_iterator = json_reverse_iterator; /// a const reverse iterator for a basic_json container using const_reverse_iterator = json_reverse_iterator; /// @} /*! @brief returns the allocator associated with the container */ static allocator_type get_allocator() { return allocator_type(); } /*! @brief returns version information on the library This function returns a JSON object with information about the library, including the version number and information on the platform and compiler. @return JSON object holding version information key | description ----------- | --------------- `compiler` | Information on the used compiler. It is an object with the following keys: `c++` (the used C++ standard), `family` (the compiler family; possible values are `clang`, `icc`, `gcc`, `ilecpp`, `msvc`, `pgcpp`, `sunpro`, and `unknown`), and `version` (the compiler version). `copyright` | The copyright line for the library as string. `name` | The name of the library as string. `platform` | The used platform as string. Possible values are `win32`, `linux`, `apple`, `unix`, and `unknown`. `url` | The URL of the project as string. `version` | The version of the library. It is an object with the following keys: `major`, `minor`, and `patch` as defined by [Semantic Versioning](http://semver.org), and `string` (the version string). @liveexample{The following code shows an example output of the `meta()` function.,meta} @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @complexity Constant. @since 2.1.0 */ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json meta() { basic_json result; result["copyright"] = "(C) 2013-2020 Niels Lohmann"; result["name"] = "JSON for Modern C++"; result["url"] = "https://github.com/nlohmann/json"; result["version"]["string"] = std::to_string(NLOHMANN_JSON_VERSION_MAJOR) + "." + std::to_string(NLOHMANN_JSON_VERSION_MINOR) + "." + std::to_string(NLOHMANN_JSON_VERSION_PATCH); result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR; result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR; result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH; #ifdef _WIN32 result["platform"] = "win32"; #elif defined __linux__ result["platform"] = "linux"; #elif defined __APPLE__ result["platform"] = "apple"; #elif defined __unix__ result["platform"] = "unix"; #else result["platform"] = "unknown"; #endif #if defined(__ICC) || defined(__INTEL_COMPILER) result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; #elif defined(__clang__) result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; #elif defined(__GNUC__) || defined(__GNUG__) result["compiler"] = {{"family", "gcc"}, {"version", std::to_string(__GNUC__) + "." + std::to_string(__GNUC_MINOR__) + "." + std::to_string(__GNUC_PATCHLEVEL__)}}; #elif defined(__HP_cc) || defined(__HP_aCC) result["compiler"] = "hp" #elif defined(__IBMCPP__) result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; #elif defined(_MSC_VER) result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; #elif defined(__PGI) result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; #elif defined(__SUNPRO_CC) result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; #else result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; #endif #ifdef __cplusplus result["compiler"]["c++"] = std::to_string(__cplusplus); #else result["compiler"]["c++"] = "unknown"; #endif return result; } /////////////////////////// // JSON value data types // /////////////////////////// /// @name JSON value data types /// The data types to store a JSON value. These types are derived from /// the template arguments passed to class @ref basic_json. /// @{ #if defined(JSON_HAS_CPP_14) // Use transparent comparator if possible, combined with perfect forwarding // on find() and count() calls prevents unnecessary string construction. using object_comparator_t = std::less<>; #else using object_comparator_t = std::less; #endif /*! @brief a type for an object [RFC 7159](http://rfc7159.net/rfc7159) describes JSON objects as follows: > An object is an unordered collection of zero or more name/value pairs, > where a name is a string and a value is a string, number, boolean, null, > object, or array. To store objects in C++, a type is defined by the template parameters described below. @tparam ObjectType the container to store objects (e.g., `std::map` or `std::unordered_map`) @tparam StringType the type of the keys or names (e.g., `std::string`). The comparison function `std::less` is used to order elements inside the container. @tparam AllocatorType the allocator to use for objects (e.g., `std::allocator`) #### Default type With the default values for @a ObjectType (`std::map`), @a StringType (`std::string`), and @a AllocatorType (`std::allocator`), the default value for @a object_t is: @code {.cpp} std::map< std::string, // key_type basic_json, // value_type std::less, // key_compare std::allocator> // allocator_type > @endcode #### Behavior The choice of @a object_t influences the behavior of the JSON class. With the default type, objects have the following behavior: - When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings. - When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, `{"key": 2, "key": 1}` could be equal to either `{"key": 1}` or `{"key": 2}`. - Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see @ref dump) in this order. For instance, `{"b": 1, "a": 2}` and `{"a": 2, "b": 1}` will be stored and serialized as `{"a": 2, "b": 1}`. - When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense that they will not be affected by these differences. For instance, `{"b": 1, "a": 2}` and `{"a": 2, "b": 1}` will be treated as equal. #### Limits [RFC 7159](http://rfc7159.net/rfc7159) specifies: > An implementation may set limits on the maximum depth of nesting. In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the @ref max_size function of a JSON object. #### Storage Objects are stored as pointers in a @ref basic_json type. That is, for any access to object values, a pointer of type `object_t*` must be dereferenced. @sa @ref array_t -- type for an array value @since version 1.0.0 @note The order name/value pairs are added to the object is *not* preserved by the library. Therefore, iterating an object may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in alphabetical order as `std::map` with `std::less` is used by default. Please note this behavior conforms to [RFC 7159](http://rfc7159.net/rfc7159), because any order implements the specified "unordered" nature of JSON objects. */ using object_t = ObjectType>>; /*! @brief a type for an array [RFC 7159](http://rfc7159.net/rfc7159) describes JSON arrays as follows: > An array is an ordered sequence of zero or more values. To store objects in C++, a type is defined by the template parameters explained below. @tparam ArrayType container type to store arrays (e.g., `std::vector` or `std::list`) @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) #### Default type With the default values for @a ArrayType (`std::vector`) and @a AllocatorType (`std::allocator`), the default value for @a array_t is: @code {.cpp} std::vector< basic_json, // value_type std::allocator // allocator_type > @endcode #### Limits [RFC 7159](http://rfc7159.net/rfc7159) specifies: > An implementation may set limits on the maximum depth of nesting. In this class, the array's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the @ref max_size function of a JSON array. #### Storage Arrays are stored as pointers in a @ref basic_json type. That is, for any access to array values, a pointer of type `array_t*` must be dereferenced. @sa @ref object_t -- type for an object value @since version 1.0.0 */ using array_t = ArrayType>; /*! @brief a type for a string [RFC 7159](http://rfc7159.net/rfc7159) describes JSON strings as follows: > A string is a sequence of zero or more Unicode characters. To store objects in C++, a type is defined by the template parameter described below. Unicode values are split by the JSON class into byte-sized characters during deserialization. @tparam StringType the container to store strings (e.g., `std::string`). Note this container is used for keys/names in objects, see @ref object_t. #### Default type With the default values for @a StringType (`std::string`), the default value for @a string_t is: @code {.cpp} std::string @endcode #### Encoding Strings are stored in UTF-8 encoding. Therefore, functions like `std::string::size()` or `std::string::length()` return the number of bytes in the string rather than the number of characters or glyphs. #### String comparison [RFC 7159](http://rfc7159.net/rfc7159) states: > Software implementations are typically required to test names of object > members for equality. Implementations that transform the textual > representation into sequences of Unicode code units and then perform the > comparison numerically, code unit by code unit, are interoperable in the > sense that implementations will agree in all cases on equality or > inequality of two strings. For example, implementations that compare > strings with escaped characters unconverted may incorrectly find that > `"a\\b"` and `"a\u005Cb"` are not equal. This implementation is interoperable as it does compare strings code unit by code unit. #### Storage String values are stored as pointers in a @ref basic_json type. That is, for any access to string values, a pointer of type `string_t*` must be dereferenced. @since version 1.0.0 */ using string_t = StringType; /*! @brief a type for a boolean [RFC 7159](http://rfc7159.net/rfc7159) implicitly describes a boolean as a type which differentiates the two literals `true` and `false`. To store objects in C++, a type is defined by the template parameter @a BooleanType which chooses the type to use. #### Default type With the default values for @a BooleanType (`bool`), the default value for @a boolean_t is: @code {.cpp} bool @endcode #### Storage Boolean values are stored directly inside a @ref basic_json type. @since version 1.0.0 */ using boolean_t = BooleanType; /*! @brief a type for a number (integer) [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: > The representation of numbers is similar to that used in most > programming languages. A number is represented in base 10 using decimal > digits. It contains an integer component that may be prefixed with an > optional minus sign, which may be followed by a fraction part and/or an > exponent part. Leading zeros are not allowed. (...) Numeric values that > cannot be represented in the grammar below (such as Infinity and NaN) > are not permitted. This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, @ref number_integer_t, @ref number_unsigned_t and @ref number_float_t are used. To store integer numbers in C++, a type is defined by the template parameter @a NumberIntegerType which chooses the type to use. #### Default type With the default values for @a NumberIntegerType (`int64_t`), the default value for @a number_integer_t is: @code {.cpp} int64_t @endcode #### Default behavior - The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error. - Not-a-number (NaN) values will be serialized to `null`. #### Limits [RFC 7159](http://rfc7159.net/rfc7159) specifies: > An implementation may set limits on the range and precision of numbers. When the default type is used, the maximal integer number that can be stored is `9223372036854775807` (INT64_MAX) and the minimal integer number that can be stored is `-9223372036854775808` (INT64_MIN). Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as @ref number_unsigned_t or @ref number_float_t. [RFC 7159](http://rfc7159.net/rfc7159) further states: > Note that when such software is used, numbers that are integers and are > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense > that implementations will agree exactly on their numeric values. As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is interoperable. #### Storage Integer number values are stored directly inside a @ref basic_json type. @sa @ref number_float_t -- type for number values (floating-point) @sa @ref number_unsigned_t -- type for number values (unsigned integer) @since version 1.0.0 */ using number_integer_t = NumberIntegerType; /*! @brief a type for a number (unsigned) [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: > The representation of numbers is similar to that used in most > programming languages. A number is represented in base 10 using decimal > digits. It contains an integer component that may be prefixed with an > optional minus sign, which may be followed by a fraction part and/or an > exponent part. Leading zeros are not allowed. (...) Numeric values that > cannot be represented in the grammar below (such as Infinity and NaN) > are not permitted. This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, @ref number_integer_t, @ref number_unsigned_t and @ref number_float_t are used. To store unsigned integer numbers in C++, a type is defined by the template parameter @a NumberUnsignedType which chooses the type to use. #### Default type With the default values for @a NumberUnsignedType (`uint64_t`), the default value for @a number_unsigned_t is: @code {.cpp} uint64_t @endcode #### Default behavior - The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in integer literals lead to an interpretation as octal number. Internally, the value will be stored as decimal number. For instance, the C++ integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error. - Not-a-number (NaN) values will be serialized to `null`. #### Limits [RFC 7159](http://rfc7159.net/rfc7159) specifies: > An implementation may set limits on the range and precision of numbers. When the default type is used, the maximal integer number that can be stored is `18446744073709551615` (UINT64_MAX) and the minimal integer number that can be stored is `0`. Integer numbers that are out of range will yield over/underflow when used in a constructor. During deserialization, too large or small integer numbers will be automatically be stored as @ref number_integer_t or @ref number_float_t. [RFC 7159](http://rfc7159.net/rfc7159) further states: > Note that when such software is used, numbers that are integers and are > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense > that implementations will agree exactly on their numeric values. As this range is a subrange (when considered in conjunction with the number_integer_t type) of the exactly supported range [0, UINT64_MAX], this class's integer type is interoperable. #### Storage Integer number values are stored directly inside a @ref basic_json type. @sa @ref number_float_t -- type for number values (floating-point) @sa @ref number_integer_t -- type for number values (integer) @since version 2.0.0 */ using number_unsigned_t = NumberUnsignedType; /*! @brief a type for a number (floating-point) [RFC 7159](http://rfc7159.net/rfc7159) describes numbers as follows: > The representation of numbers is similar to that used in most > programming languages. A number is represented in base 10 using decimal > digits. It contains an integer component that may be prefixed with an > optional minus sign, which may be followed by a fraction part and/or an > exponent part. Leading zeros are not allowed. (...) Numeric values that > cannot be represented in the grammar below (such as Infinity and NaN) > are not permitted. This description includes both integer and floating-point numbers. However, C++ allows more precise storage if it is known whether the number is a signed integer, an unsigned integer or a floating-point number. Therefore, three different types, @ref number_integer_t, @ref number_unsigned_t and @ref number_float_t are used. To store floating-point numbers in C++, a type is defined by the template parameter @a NumberFloatType which chooses the type to use. #### Default type With the default values for @a NumberFloatType (`double`), the default value for @a number_float_t is: @code {.cpp} double @endcode #### Default behavior - The restrictions about leading zeros is not enforced in C++. Instead, leading zeros in floating-point literals will be ignored. Internally, the value will be stored as decimal number. For instance, the C++ floating-point literal `01.2` will be serialized to `1.2`. During deserialization, leading zeros yield an error. - Not-a-number (NaN) values will be serialized to `null`. #### Limits [RFC 7159](http://rfc7159.net/rfc7159) states: > This specification allows implementations to set limits on the range and > precision of numbers accepted. Since software that implements IEEE > 754-2008 binary64 (double precision) numbers is generally available and > widely used, good interoperability can be achieved by implementations > that expect no more precision or range than these provide, in the sense > that implementations will approximate JSON numbers within the expected > precision. This implementation does exactly follow this approach, as it uses double precision floating-point numbers. Note values smaller than `-1.79769313486232e+308` and values greater than `1.79769313486232e+308` will be stored as NaN internally and be serialized to `null`. #### Storage Floating-point number values are stored directly inside a @ref basic_json type. @sa @ref number_integer_t -- type for number values (integer) @sa @ref number_unsigned_t -- type for number values (unsigned integer) @since version 1.0.0 */ using number_float_t = NumberFloatType; /*! @brief a type for a packed binary type This type is a type designed to carry binary data that appears in various serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and BSON's generic binary subtype. This type is NOT a part of standard JSON and exists solely for compatibility with these binary types. As such, it is simply defined as an ordered sequence of zero or more byte values. Additionally, as an implementation detail, the subtype of the binary data is carried around as a `std::uint8_t`, which is compatible with both of the binary data formats that use binary subtyping, (though the specific numbering is incompatible with each other, and it is up to the user to translate between them). [CBOR's RFC 7049](https://tools.ietf.org/html/rfc7049) describes this type as: > Major type 2: a byte string. The string's length in bytes is represented > following the rules for positive integers (major type 0). [MessagePack's documentation on the bin type family](https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family) describes this type as: > Bin format family stores an byte array in 2, 3, or 5 bytes of extra bytes > in addition to the size of the byte array. [BSON's specifications](http://bsonspec.org/spec.html) describe several binary types; however, this type is intended to represent the generic binary type which has the description: > Generic binary subtype - This is the most commonly used binary subtype and > should be the 'default' for drivers and tools. None of these impose any limitations on the internal representation other than the basic unit of storage be some type of array whose parts are decomposable into bytes. The default representation of this binary format is a `std::vector`, which is a very common way to represent a byte array in modern C++. #### Default type The default values for @a BinaryType is `std::vector` #### Storage Binary Arrays are stored as pointers in a @ref basic_json type. That is, for any access to array values, a pointer of the type `binary_t*` must be dereferenced. #### Notes on subtypes - CBOR - Binary values are represented as byte strings. No subtypes are supported and will be ignored when CBOR is written. - MessagePack - If a subtype is given and the binary array contains exactly 1, 2, 4, 8, or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) is used. For other sizes, the ext family (ext8, ext16, ext32) is used. The subtype is then added as signed 8-bit integer. - If no subtype is given, the bin family (bin8, bin16, bin32) is used. - BSON - If a subtype is given, it is used and added as unsigned 8-bit integer. - If no subtype is given, the generic binary subtype 0x00 is used. @sa @ref binary -- create a binary array @since version 3.8.0 */ using binary_t = nlohmann::byte_container_with_subtype; /// @} private: /// helper for exception-safe object creation template JSON_HEDLEY_RETURNS_NON_NULL static T* create(Args&& ... args) { AllocatorType alloc; using AllocatorTraits = std::allocator_traits>; auto deleter = [&](T * object) { AllocatorTraits::deallocate(alloc, object, 1); }; std::unique_ptr object(AllocatorTraits::allocate(alloc, 1), deleter); AllocatorTraits::construct(alloc, object.get(), std::forward(args)...); JSON_ASSERT(object != nullptr); return object.release(); } //////////////////////// // JSON value storage // //////////////////////// /*! @brief a JSON value The actual storage for a JSON value of the @ref basic_json class. This union combines the different storage types for the JSON value types defined in @ref value_t. JSON type | value_t type | used type --------- | --------------- | ------------------------ object | object | pointer to @ref object_t array | array | pointer to @ref array_t string | string | pointer to @ref string_t boolean | boolean | @ref boolean_t number | number_integer | @ref number_integer_t number | number_unsigned | @ref number_unsigned_t number | number_float | @ref number_float_t binary | binary | pointer to @ref binary_t null | null | *no value is stored* @note Variable-length types (objects, arrays, and strings) are stored as pointers. The size of the union should not exceed 64 bits if the default value types are used. @since version 1.0.0 */ union json_value { /// object (stored with pointer to save storage) object_t* object; /// array (stored with pointer to save storage) array_t* array; /// string (stored with pointer to save storage) string_t* string; /// binary (stored with pointer to save storage) binary_t* binary; /// boolean boolean_t boolean; /// number (integer) number_integer_t number_integer; /// number (unsigned integer) number_unsigned_t number_unsigned; /// number (floating-point) number_float_t number_float; /// default constructor (for null values) json_value() = default; /// constructor for booleans json_value(boolean_t v) noexcept : boolean(v) {} /// constructor for numbers (integer) json_value(number_integer_t v) noexcept : number_integer(v) {} /// constructor for numbers (unsigned) json_value(number_unsigned_t v) noexcept : number_unsigned(v) {} /// constructor for numbers (floating-point) json_value(number_float_t v) noexcept : number_float(v) {} /// constructor for empty values of a given type json_value(value_t t) { switch (t) { case value_t::object: { object = create(); break; } case value_t::array: { array = create(); break; } case value_t::string: { string = create(""); break; } case value_t::binary: { binary = create(); break; } case value_t::boolean: { boolean = boolean_t(false); break; } case value_t::number_integer: { number_integer = number_integer_t(0); break; } case value_t::number_unsigned: { number_unsigned = number_unsigned_t(0); break; } case value_t::number_float: { number_float = number_float_t(0.0); break; } case value_t::null: { object = nullptr; // silence warning, see #821 break; } default: { object = nullptr; // silence warning, see #821 if (JSON_HEDLEY_UNLIKELY(t == value_t::null)) { JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.9.1")); // LCOV_EXCL_LINE } break; } } } /// constructor for strings json_value(const string_t& value) { string = create(value); } /// constructor for rvalue strings json_value(string_t&& value) { string = create(std::move(value)); } /// constructor for objects json_value(const object_t& value) { object = create(value); } /// constructor for rvalue objects json_value(object_t&& value) { object = create(std::move(value)); } /// constructor for arrays json_value(const array_t& value) { array = create(value); } /// constructor for rvalue arrays json_value(array_t&& value) { array = create(std::move(value)); } /// constructor for binary arrays json_value(const typename binary_t::container_type& value) { binary = create(value); } /// constructor for rvalue binary arrays json_value(typename binary_t::container_type&& value) { binary = create(std::move(value)); } /// constructor for binary arrays (internal type) json_value(const binary_t& value) { binary = create(value); } /// constructor for rvalue binary arrays (internal type) json_value(binary_t&& value) { binary = create(std::move(value)); } void destroy(value_t t) noexcept { // flatten the current json_value to a heap-allocated stack std::vector stack; // move the top-level items to stack if (t == value_t::array) { stack.reserve(array->size()); std::move(array->begin(), array->end(), std::back_inserter(stack)); } else if (t == value_t::object) { stack.reserve(object->size()); for (auto&& it : *object) { stack.push_back(std::move(it.second)); } } while (!stack.empty()) { // move the last item to local variable to be processed basic_json current_item(std::move(stack.back())); stack.pop_back(); // if current_item is array/object, move // its children to the stack to be processed later if (current_item.is_array()) { std::move(current_item.m_value.array->begin(), current_item.m_value.array->end(), std::back_inserter(stack)); current_item.m_value.array->clear(); } else if (current_item.is_object()) { for (auto&& it : *current_item.m_value.object) { stack.push_back(std::move(it.second)); } current_item.m_value.object->clear(); } // it's now safe that current_item get destructed // since it doesn't have any children } switch (t) { case value_t::object: { AllocatorType alloc; std::allocator_traits::destroy(alloc, object); std::allocator_traits::deallocate(alloc, object, 1); break; } case value_t::array: { AllocatorType alloc; std::allocator_traits::destroy(alloc, array); std::allocator_traits::deallocate(alloc, array, 1); break; } case value_t::string: { AllocatorType alloc; std::allocator_traits::destroy(alloc, string); std::allocator_traits::deallocate(alloc, string, 1); break; } case value_t::binary: { AllocatorType alloc; std::allocator_traits::destroy(alloc, binary); std::allocator_traits::deallocate(alloc, binary, 1); break; } default: { break; } } } }; /*! @brief checks the class invariants This function asserts the class invariants. It needs to be called at the end of every constructor to make sure that created objects respect the invariant. Furthermore, it has to be called each time the type of a JSON value is changed, because the invariant expresses a relationship between @a m_type and @a m_value. */ void assert_invariant() const noexcept { JSON_ASSERT(m_type != value_t::object || m_value.object != nullptr); JSON_ASSERT(m_type != value_t::array || m_value.array != nullptr); JSON_ASSERT(m_type != value_t::string || m_value.string != nullptr); JSON_ASSERT(m_type != value_t::binary || m_value.binary != nullptr); } public: ////////////////////////// // JSON parser callback // ////////////////////////// /*! @brief parser event types The parser callback distinguishes the following events: - `object_start`: the parser read `{` and started to process a JSON object - `key`: the parser read a key of a value in an object - `object_end`: the parser read `}` and finished processing a JSON object - `array_start`: the parser read `[` and started to process a JSON array - `array_end`: the parser read `]` and finished processing a JSON array - `value`: the parser finished reading a JSON value @image html callback_events.png "Example when certain parse events are triggered" @sa @ref parser_callback_t for more information and examples */ using parse_event_t = detail::parse_event_t; /*! @brief per-element parser callback type With a parser callback function, the result of parsing a JSON text can be influenced. When passed to @ref parse, it is called on certain events (passed as @ref parse_event_t via parameter @a event) with a set recursion depth @a depth and context JSON value @a parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not. We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters @a depth, @a event, and @a parsed. parameter @a event | description | parameter @a depth | parameter @a parsed ------------------ | ----------- | ------------------ | ------------------- parse_event_t::object_start | the parser read `{` and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded parse_event_t::key | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key parse_event_t::object_end | the parser read `}` and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object parse_event_t::array_start | the parser read `[` and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded parse_event_t::array_end | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value @image html callback_events.png "Example when certain parse events are triggered" Discarding a value (i.e., returning `false`) has different effects depending on the context in which function was called: - Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read. - In case a value outside a structured type is skipped, it is replaced with `null`. This case happens if the top-level element is skipped. @param[in] depth the depth of the recursion during parsing @param[in] event an event of type parse_event_t indicating the context in the callback function has been called @param[in,out] parsed the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events @return Whether the JSON value which called the function during parsing should be kept (`true`) or not (`false`). In the latter case, it is either skipped completely or replaced by an empty discarded object. @sa @ref parse for examples @since version 1.0.0 */ using parser_callback_t = detail::parser_callback_t; ////////////////// // constructors // ////////////////// /// @name constructors and destructors /// Constructors of class @ref basic_json, copy/move constructor, copy /// assignment, static functions creating objects, and the destructor. /// @{ /*! @brief create an empty value with a given type Create an empty JSON value with a given type. The value will be default initialized with an empty value which depends on the type: Value type | initial value ----------- | ------------- null | `null` boolean | `false` string | `""` number | `0` object | `{}` array | `[]` binary | empty array @param[in] v the type of the value to create @complexity Constant. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @liveexample{The following code shows the constructor for different @ref value_t values,basic_json__value_t} @sa @ref clear() -- restores the postcondition of this constructor @since version 1.0.0 */ basic_json(const value_t v) : m_type(v), m_value(v) { assert_invariant(); } /*! @brief create a null object Create a `null` JSON value. It either takes a null pointer as parameter (explicitly creating `null`) or no parameter (implicitly creating `null`). The passed null pointer itself is not read -- it is only used to choose the right constructor. @complexity Constant. @exceptionsafety No-throw guarantee: this constructor never throws exceptions. @liveexample{The following code shows the constructor with and without a null pointer parameter.,basic_json__nullptr_t} @since version 1.0.0 */ basic_json(std::nullptr_t = nullptr) noexcept : basic_json(value_t::null) { assert_invariant(); } /*! @brief create a JSON value This is a "catch all" constructor for all compatible JSON types; that is, types for which a `to_json()` method exists. The constructor forwards the parameter @a val to that method (to `json_serializer::to_json` method with `U = uncvref_t`, to be exact). Template type @a CompatibleType includes, but is not limited to, the following types: - **arrays**: @ref array_t and all kinds of compatible containers such as `std::vector`, `std::deque`, `std::list`, `std::forward_list`, `std::array`, `std::valarray`, `std::set`, `std::unordered_set`, `std::multiset`, and `std::unordered_multiset` with a `value_type` from which a @ref basic_json value can be constructed. - **objects**: @ref object_t and all kinds of compatible associative containers such as `std::map`, `std::unordered_map`, `std::multimap`, and `std::unordered_multimap` with a `key_type` compatible to @ref string_t and a `value_type` from which a @ref basic_json value can be constructed. - **strings**: @ref string_t, string literals, and all compatible string containers can be used. - **numbers**: @ref number_integer_t, @ref number_unsigned_t, @ref number_float_t, and all convertible number types such as `int`, `size_t`, `int64_t`, `float` or `double` can be used. - **boolean**: @ref boolean_t / `bool` can be used. - **binary**: @ref binary_t / `std::vector` may be used, unfortunately because string literals cannot be distinguished from binary character arrays by the C++ type system, all types compatible with `const char*` will be directed to the string constructor instead. This is both for backwards compatibility, and due to the fact that a binary type is not a standard JSON type. See the examples below. @tparam CompatibleType a type such that: - @a CompatibleType is not derived from `std::istream`, - @a CompatibleType is not @ref basic_json (to avoid hijacking copy/move constructors), - @a CompatibleType is not a different @ref basic_json type (i.e. with different template arguments) - @a CompatibleType is not a @ref basic_json nested type (e.g., @ref json_pointer, @ref iterator, etc ...) - @ref @ref json_serializer has a `to_json(basic_json_t&, CompatibleType&&)` method @tparam U = `uncvref_t` @param[in] val the value to be forwarded to the respective constructor @complexity Usually linear in the size of the passed @a val, also depending on the implementation of the called `to_json()` method. @exceptionsafety Depends on the called constructor. For types directly supported by the library (i.e., all types for which no `to_json()` function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value. @liveexample{The following code shows the constructor with several compatible types.,basic_json__CompatibleType} @since version 2.1.0 */ template < typename CompatibleType, typename U = detail::uncvref_t, detail::enable_if_t < !detail::is_basic_json::value && detail::is_compatible_type::value, int > = 0 > basic_json(CompatibleType && val) noexcept(noexcept( JSONSerializer::to_json(std::declval(), std::forward(val)))) { JSONSerializer::to_json(*this, std::forward(val)); assert_invariant(); } /*! @brief create a JSON value from an existing one This is a constructor for existing @ref basic_json types. It does not hijack copy/move constructors, since the parameter has different template arguments than the current ones. The constructor tries to convert the internal @ref m_value of the parameter. @tparam BasicJsonType a type such that: - @a BasicJsonType is a @ref basic_json type. - @a BasicJsonType has different template arguments than @ref basic_json_t. @param[in] val the @ref basic_json value to be converted. @complexity Usually linear in the size of the passed @a val, also depending on the implementation of the called `to_json()` method. @exceptionsafety Depends on the called constructor. For types directly supported by the library (i.e., all types for which no `to_json()` function was provided), strong guarantee holds: if an exception is thrown, there are no changes to any JSON value. @since version 3.2.0 */ template < typename BasicJsonType, detail::enable_if_t < detail::is_basic_json::value&& !std::is_same::value, int > = 0 > basic_json(const BasicJsonType& val) { using other_boolean_t = typename BasicJsonType::boolean_t; using other_number_float_t = typename BasicJsonType::number_float_t; using other_number_integer_t = typename BasicJsonType::number_integer_t; using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t; using other_string_t = typename BasicJsonType::string_t; using other_object_t = typename BasicJsonType::object_t; using other_array_t = typename BasicJsonType::array_t; using other_binary_t = typename BasicJsonType::binary_t; switch (val.type()) { case value_t::boolean: JSONSerializer::to_json(*this, val.template get()); break; case value_t::number_float: JSONSerializer::to_json(*this, val.template get()); break; case value_t::number_integer: JSONSerializer::to_json(*this, val.template get()); break; case value_t::number_unsigned: JSONSerializer::to_json(*this, val.template get()); break; case value_t::string: JSONSerializer::to_json(*this, val.template get_ref()); break; case value_t::object: JSONSerializer::to_json(*this, val.template get_ref()); break; case value_t::array: JSONSerializer::to_json(*this, val.template get_ref()); break; case value_t::binary: JSONSerializer::to_json(*this, val.template get_ref()); break; case value_t::null: *this = nullptr; break; case value_t::discarded: m_type = value_t::discarded; break; default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } assert_invariant(); } /*! @brief create a container (array or object) from an initializer list Creates a JSON value of type array or object from the passed initializer list @a init. In case @a type_deduction is `true` (default), the type of the JSON value to be created is deducted from the initializer list @a init according to the following rules: 1. If the list is empty, an empty JSON object value `{}` is created. 2. If the list consists of pairs whose first element is a string, a JSON object value is created where the first elements of the pairs are treated as keys and the second elements are as values. 3. In all other cases, an array is created. The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows: 1. The empty initializer list is written as `{}` which is exactly an empty JSON object. 2. C++ has no way of describing mapped types other than to list a list of pairs. As JSON requires that keys must be of type string, rule 2 is the weakest constraint one can pose on initializer lists to interpret them as an object. 3. In all other cases, the initializer list could not be interpreted as JSON object type, so interpreting it as JSON array type is safe. With the rules described above, the following JSON values cannot be expressed by an initializer list: - the empty array (`[]`): use @ref array(initializer_list_t) with an empty initializer list in this case - arrays whose elements satisfy rule 2: use @ref array(initializer_list_t) with the same initializer list in this case @note When used without parentheses around an empty initializer list, @ref basic_json() is called instead of this function, yielding the JSON null value. @param[in] init initializer list with JSON values @param[in] type_deduction internal parameter; when set to `true`, the type of the JSON value is deducted from the initializer list @a init; when set to `false`, the type provided via @a manual_type is forced. This mode is used by the functions @ref array(initializer_list_t) and @ref object(initializer_list_t). @param[in] manual_type internal parameter; when @a type_deduction is set to `false`, the created JSON value will use the provided type (only @ref value_t::array and @ref value_t::object are valid); when @a type_deduction is set to `true`, this parameter has no effect @throw type_error.301 if @a type_deduction is `false`, @a manual_type is `value_t::object`, but @a init contains an element which is not a pair whose first element is a string. In this case, the constructor could not create an object. If @a type_deduction would have be `true`, an array would have been created. See @ref object(initializer_list_t) for an example. @complexity Linear in the size of the initializer list @a init. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @liveexample{The example below shows how JSON values are created from initializer lists.,basic_json__list_init_t} @sa @ref array(initializer_list_t) -- create a JSON array value from an initializer list @sa @ref object(initializer_list_t) -- create a JSON object value from an initializer list @since version 1.0.0 */ basic_json(initializer_list_t init, bool type_deduction = true, value_t manual_type = value_t::array) { // check if each element is an array with two elements whose first // element is a string bool is_an_object = std::all_of(init.begin(), init.end(), [](const detail::json_ref& element_ref) { return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[0].is_string(); }); // adjust type if type deduction is not wanted if (!type_deduction) { // if array is wanted, do not create an object though possible if (manual_type == value_t::array) { is_an_object = false; } // if object is wanted but impossible, throw an exception if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object)) { JSON_THROW(type_error::create(301, "cannot create object from initializer list")); } } if (is_an_object) { // the initializer list is a list of pairs -> create object m_type = value_t::object; m_value = value_t::object; std::for_each(init.begin(), init.end(), [this](const detail::json_ref& element_ref) { auto element = element_ref.moved_or_copied(); m_value.object->emplace( std::move(*((*element.m_value.array)[0].m_value.string)), std::move((*element.m_value.array)[1])); }); } else { // the initializer list describes an array -> create array m_type = value_t::array; m_value.array = create(init.begin(), init.end()); } assert_invariant(); } /*! @brief explicitly create a binary array (without subtype) Creates a JSON binary array value from a given binary container. Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats. @note Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a `std::vector`. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident. @param[in] init container containing bytes to use as binary type @return JSON binary array value @complexity Linear in the size of @a init. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @since version 3.8.0 */ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json binary(const typename binary_t::container_type& init) { auto res = basic_json(); res.m_type = value_t::binary; res.m_value = init; return res; } /*! @brief explicitly create a binary array (with subtype) Creates a JSON binary array value from a given binary container. Binary values are part of various binary formats, such as CBOR, MessagePack, and BSON. This constructor is used to create a value for serialization to those formats. @note Note, this function exists because of the difficulty in correctly specifying the correct template overload in the standard value ctor, as both JSON arrays and JSON binary arrays are backed with some form of a `std::vector`. Because JSON binary arrays are a non-standard extension it was decided that it would be best to prevent automatic initialization of a binary array type, for backwards compatibility and so it does not happen on accident. @param[in] init container containing bytes to use as binary type @param[in] subtype subtype to use in MessagePack and BSON @return JSON binary array value @complexity Linear in the size of @a init. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @since version 3.8.0 */ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json binary(const typename binary_t::container_type& init, std::uint8_t subtype) { auto res = basic_json(); res.m_type = value_t::binary; res.m_value = binary_t(init, subtype); return res; } /// @copydoc binary(const typename binary_t::container_type&) JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json binary(typename binary_t::container_type&& init) { auto res = basic_json(); res.m_type = value_t::binary; res.m_value = std::move(init); return res; } /// @copydoc binary(const typename binary_t::container_type&, std::uint8_t) JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json binary(typename binary_t::container_type&& init, std::uint8_t subtype) { auto res = basic_json(); res.m_type = value_t::binary; res.m_value = binary_t(std::move(init), subtype); return res; } /*! @brief explicitly create an array from an initializer list Creates a JSON array value from a given initializer list. That is, given a list of values `a, b, c`, creates the JSON value `[a, b, c]`. If the initializer list is empty, the empty array `[]` is created. @note This function is only needed to express two edge cases that cannot be realized with the initializer list constructor (@ref basic_json(initializer_list_t, bool, value_t)). These cases are: 1. creating an array whose elements are all pairs whose first element is a string -- in this case, the initializer list constructor would create an object, taking the first elements as keys 2. creating an empty array -- passing the empty initializer list to the initializer list constructor yields an empty object @param[in] init initializer list with JSON values to create an array from (optional) @return JSON array value @complexity Linear in the size of @a init. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @liveexample{The following code shows an example for the `array` function.,array} @sa @ref basic_json(initializer_list_t, bool, value_t) -- create a JSON value from an initializer list @sa @ref object(initializer_list_t) -- create a JSON object value from an initializer list @since version 1.0.0 */ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json array(initializer_list_t init = {}) { return basic_json(init, false, value_t::array); } /*! @brief explicitly create an object from an initializer list Creates a JSON object value from a given initializer list. The initializer lists elements must be pairs, and their first elements must be strings. If the initializer list is empty, the empty object `{}` is created. @note This function is only added for symmetry reasons. In contrast to the related function @ref array(initializer_list_t), there are no cases which can only be expressed by this function. That is, any initializer list @a init can also be passed to the initializer list constructor @ref basic_json(initializer_list_t, bool, value_t). @param[in] init initializer list to create an object from (optional) @return JSON object value @throw type_error.301 if @a init is not a list of pairs whose first elements are strings. In this case, no object can be created. When such a value is passed to @ref basic_json(initializer_list_t, bool, value_t), an array would have been created from the passed initializer list @a init. See example below. @complexity Linear in the size of @a init. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @liveexample{The following code shows an example for the `object` function.,object} @sa @ref basic_json(initializer_list_t, bool, value_t) -- create a JSON value from an initializer list @sa @ref array(initializer_list_t) -- create a JSON array value from an initializer list @since version 1.0.0 */ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json object(initializer_list_t init = {}) { return basic_json(init, false, value_t::object); } /*! @brief construct an array with count copies of given value Constructs a JSON array value by creating @a cnt copies of a passed value. In case @a cnt is `0`, an empty array is created. @param[in] cnt the number of JSON copies of @a val to create @param[in] val the JSON value to copy @post `std::distance(begin(),end()) == cnt` holds. @complexity Linear in @a cnt. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @liveexample{The following code shows examples for the @ref basic_json(size_type\, const basic_json&) constructor.,basic_json__size_type_basic_json} @since version 1.0.0 */ basic_json(size_type cnt, const basic_json& val) : m_type(value_t::array) { m_value.array = create(cnt, val); assert_invariant(); } /*! @brief construct a JSON container given an iterator range Constructs the JSON value with the contents of the range `[first, last)`. The semantics depends on the different types a JSON value can have: - In case of a null type, invalid_iterator.206 is thrown. - In case of other primitive types (number, boolean, or string), @a first must be `begin()` and @a last must be `end()`. In this case, the value is copied. Otherwise, invalid_iterator.204 is thrown. - In case of structured types (array, object), the constructor behaves as similar versions for `std::vector` or `std::map`; that is, a JSON array or object is constructed from the values in the range. @tparam InputIT an input iterator type (@ref iterator or @ref const_iterator) @param[in] first begin of the range to copy from (included) @param[in] last end of the range to copy from (excluded) @pre Iterators @a first and @a last must be initialized. **This precondition is enforced with an assertion (see warning).** If assertions are switched off, a violation of this precondition yields undefined behavior. @pre Range `[first, last)` is valid. Usually, this precondition cannot be checked efficiently. Only certain edge cases are detected; see the description of the exceptions below. A violation of this precondition yields undefined behavior. @warning A precondition is enforced with a runtime assertion that will result in calling `std::abort` if this precondition is not met. Assertions can be disabled by defining `NDEBUG` at compile time. See https://en.cppreference.com/w/cpp/error/assert for more information. @throw invalid_iterator.201 if iterators @a first and @a last are not compatible (i.e., do not belong to the same JSON value). In this case, the range `[first, last)` is undefined. @throw invalid_iterator.204 if iterators @a first and @a last belong to a primitive type (number, boolean, or string), but @a first does not point to the first element any more. In this case, the range `[first, last)` is undefined. See example code below. @throw invalid_iterator.206 if iterators @a first and @a last belong to a null value. In this case, the range `[first, last)` is undefined. @complexity Linear in distance between @a first and @a last. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @liveexample{The example below shows several ways to create JSON values by specifying a subrange with iterators.,basic_json__InputIt_InputIt} @since version 1.0.0 */ template < class InputIT, typename std::enable_if < std::is_same::value || std::is_same::value, int >::type = 0 > basic_json(InputIT first, InputIT last) { JSON_ASSERT(first.m_object != nullptr); JSON_ASSERT(last.m_object != nullptr); // make sure iterator fits the current value if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(201, "iterators are not compatible")); } // copy type from first iterator m_type = first.m_object->m_type; // check if iterator range is complete for primitive values switch (m_type) { case value_t::boolean: case value_t::number_float: case value_t::number_integer: case value_t::number_unsigned: case value_t::string: { if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin() || !last.m_it.primitive_iterator.is_end())) { JSON_THROW(invalid_iterator::create(204, "iterators out of range")); } break; } default: break; } switch (m_type) { case value_t::number_integer: { m_value.number_integer = first.m_object->m_value.number_integer; break; } case value_t::number_unsigned: { m_value.number_unsigned = first.m_object->m_value.number_unsigned; break; } case value_t::number_float: { m_value.number_float = first.m_object->m_value.number_float; break; } case value_t::boolean: { m_value.boolean = first.m_object->m_value.boolean; break; } case value_t::string: { m_value = *first.m_object->m_value.string; break; } case value_t::object: { m_value.object = create(first.m_it.object_iterator, last.m_it.object_iterator); break; } case value_t::array: { m_value.array = create(first.m_it.array_iterator, last.m_it.array_iterator); break; } case value_t::binary: { m_value = *first.m_object->m_value.binary; break; } default: JSON_THROW(invalid_iterator::create(206, "cannot construct with iterators from " + std::string(first.m_object->type_name()))); } assert_invariant(); } /////////////////////////////////////// // other constructors and destructor // /////////////////////////////////////// template, std::is_same>::value, int> = 0 > basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {} /*! @brief copy constructor Creates a copy of a given JSON value. @param[in] other the JSON value to copy @post `*this == other` @complexity Linear in the size of @a other. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes to any JSON value. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is linear. - As postcondition, it holds: `other == basic_json(other)`. @liveexample{The following code shows an example for the copy constructor.,basic_json__basic_json} @since version 1.0.0 */ basic_json(const basic_json& other) : m_type(other.m_type) { // check of passed value is valid other.assert_invariant(); switch (m_type) { case value_t::object: { m_value = *other.m_value.object; break; } case value_t::array: { m_value = *other.m_value.array; break; } case value_t::string: { m_value = *other.m_value.string; break; } case value_t::boolean: { m_value = other.m_value.boolean; break; } case value_t::number_integer: { m_value = other.m_value.number_integer; break; } case value_t::number_unsigned: { m_value = other.m_value.number_unsigned; break; } case value_t::number_float: { m_value = other.m_value.number_float; break; } case value_t::binary: { m_value = *other.m_value.binary; break; } default: break; } assert_invariant(); } /*! @brief move constructor Move constructor. Constructs a JSON value with the contents of the given value @a other using move semantics. It "steals" the resources from @a other and leaves it as JSON null value. @param[in,out] other value to move to this object @post `*this` has the same value as @a other before the call. @post @a other is a JSON null value. @complexity Constant. @exceptionsafety No-throw guarantee: this constructor never throws exceptions. @requirement This function helps `basic_json` satisfying the [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible) requirements. @liveexample{The code below shows the move constructor explicitly called via std::move.,basic_json__moveconstructor} @since version 1.0.0 */ basic_json(basic_json&& other) noexcept : m_type(std::move(other.m_type)), m_value(std::move(other.m_value)) { // check that passed value is valid other.assert_invariant(); // invalidate payload other.m_type = value_t::null; other.m_value = {}; assert_invariant(); } /*! @brief copy assignment Copy assignment operator. Copies a JSON value via the "copy and swap" strategy: It is expressed in terms of the copy constructor, destructor, and the `swap()` member function. @param[in] other value to copy from @complexity Linear. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is linear. @liveexample{The code below shows and example for the copy assignment. It creates a copy of value `a` which is then swapped with `b`. Finally\, the copy of `a` (which is the null value after the swap) is destroyed.,basic_json__copyassignment} @since version 1.0.0 */ basic_json& operator=(basic_json other) noexcept ( std::is_nothrow_move_constructible::value&& std::is_nothrow_move_assignable::value&& std::is_nothrow_move_constructible::value&& std::is_nothrow_move_assignable::value ) { // check that passed value is valid other.assert_invariant(); using std::swap; swap(m_type, other.m_type); swap(m_value, other.m_value); assert_invariant(); return *this; } /*! @brief destructor Destroys the JSON value and frees all allocated memory. @complexity Linear. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is linear. - All stored elements are destroyed and all memory is freed. @since version 1.0.0 */ ~basic_json() noexcept { assert_invariant(); m_value.destroy(m_type); } /// @} public: /////////////////////// // object inspection // /////////////////////// /// @name object inspection /// Functions to inspect the type of a JSON value. /// @{ /*! @brief serialization Serialization function for JSON values. The function tries to mimic Python's `json.dumps()` function, and currently supports its @a indent and @a ensure_ascii parameters. @param[in] indent If indent is nonnegative, then array elements and object members will be pretty-printed with that indent level. An indent level of `0` will only insert newlines. `-1` (the default) selects the most compact representation. @param[in] indent_char The character to use for indentation if @a indent is greater than `0`. The default is ` ` (space). @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters in the output are escaped with `\uXXXX` sequences, and the result consists of ASCII characters only. @param[in] error_handler how to react on decoding errors; there are three possible values: `strict` (throws and exception in case a decoding error occurs; default), `replace` (replace invalid UTF-8 sequences with U+FFFD), and `ignore` (ignore invalid UTF-8 sequences during serialization; all bytes are copied to the output unchanged). @return string containing the serialization of the JSON value @throw type_error.316 if a string stored inside the JSON value is not UTF-8 encoded and @a error_handler is set to strict @note Binary values are serialized as object containing two keys: - "bytes": an array of bytes as integers - "subtype": the subtype as integer or "null" if the binary has no subtype @complexity Linear. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @liveexample{The following example shows the effect of different @a indent\, @a indent_char\, and @a ensure_ascii parameters to the result of the serialization.,dump} @see https://docs.python.org/2/library/json.html#json.dump @since version 1.0.0; indentation character @a indent_char, option @a ensure_ascii and exceptions added in version 3.0.0; error handlers added in version 3.4.0; serialization of binary values added in version 3.8.0. */ string_t dump(const int indent = -1, const char indent_char = ' ', const bool ensure_ascii = false, const error_handler_t error_handler = error_handler_t::strict) const { string_t result; serializer s(detail::output_adapter(result), indent_char, error_handler); if (indent >= 0) { s.dump(*this, true, ensure_ascii, static_cast(indent)); } else { s.dump(*this, false, ensure_ascii, 0); } return result; } /*! @brief return the type of the JSON value (explicit) Return the type of the JSON value as a value from the @ref value_t enumeration. @return the type of the JSON value Value type | return value ------------------------- | ------------------------- null | value_t::null boolean | value_t::boolean string | value_t::string number (integer) | value_t::number_integer number (unsigned integer) | value_t::number_unsigned number (floating-point) | value_t::number_float object | value_t::object array | value_t::array binary | value_t::binary discarded | value_t::discarded @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `type()` for all JSON types.,type} @sa @ref operator value_t() -- return the type of the JSON value (implicit) @sa @ref type_name() -- return the type as string @since version 1.0.0 */ constexpr value_t type() const noexcept { return m_type; } /*! @brief return whether type is primitive This function returns true if and only if the JSON type is primitive (string, number, boolean, or null). @return `true` if type is primitive (string, number, boolean, or null), `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_primitive()` for all JSON types.,is_primitive} @sa @ref is_structured() -- returns whether JSON value is structured @sa @ref is_null() -- returns whether JSON value is `null` @sa @ref is_string() -- returns whether JSON value is a string @sa @ref is_boolean() -- returns whether JSON value is a boolean @sa @ref is_number() -- returns whether JSON value is a number @sa @ref is_binary() -- returns whether JSON value is a binary array @since version 1.0.0 */ constexpr bool is_primitive() const noexcept { return is_null() || is_string() || is_boolean() || is_number() || is_binary(); } /*! @brief return whether type is structured This function returns true if and only if the JSON type is structured (array or object). @return `true` if type is structured (array or object), `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_structured()` for all JSON types.,is_structured} @sa @ref is_primitive() -- returns whether value is primitive @sa @ref is_array() -- returns whether value is an array @sa @ref is_object() -- returns whether value is an object @since version 1.0.0 */ constexpr bool is_structured() const noexcept { return is_array() || is_object(); } /*! @brief return whether value is null This function returns true if and only if the JSON value is null. @return `true` if type is null, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_null()` for all JSON types.,is_null} @since version 1.0.0 */ constexpr bool is_null() const noexcept { return m_type == value_t::null; } /*! @brief return whether value is a boolean This function returns true if and only if the JSON value is a boolean. @return `true` if type is boolean, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_boolean()` for all JSON types.,is_boolean} @since version 1.0.0 */ constexpr bool is_boolean() const noexcept { return m_type == value_t::boolean; } /*! @brief return whether value is a number This function returns true if and only if the JSON value is a number. This includes both integer (signed and unsigned) and floating-point values. @return `true` if type is number (regardless whether integer, unsigned integer or floating-type), `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_number()` for all JSON types.,is_number} @sa @ref is_number_integer() -- check if value is an integer or unsigned integer number @sa @ref is_number_unsigned() -- check if value is an unsigned integer number @sa @ref is_number_float() -- check if value is a floating-point number @since version 1.0.0 */ constexpr bool is_number() const noexcept { return is_number_integer() || is_number_float(); } /*! @brief return whether value is an integer number This function returns true if and only if the JSON value is a signed or unsigned integer number. This excludes floating-point values. @return `true` if type is an integer or unsigned integer number, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_number_integer()` for all JSON types.,is_number_integer} @sa @ref is_number() -- check if value is a number @sa @ref is_number_unsigned() -- check if value is an unsigned integer number @sa @ref is_number_float() -- check if value is a floating-point number @since version 1.0.0 */ constexpr bool is_number_integer() const noexcept { return m_type == value_t::number_integer || m_type == value_t::number_unsigned; } /*! @brief return whether value is an unsigned integer number This function returns true if and only if the JSON value is an unsigned integer number. This excludes floating-point and signed integer values. @return `true` if type is an unsigned integer number, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_number_unsigned()` for all JSON types.,is_number_unsigned} @sa @ref is_number() -- check if value is a number @sa @ref is_number_integer() -- check if value is an integer or unsigned integer number @sa @ref is_number_float() -- check if value is a floating-point number @since version 2.0.0 */ constexpr bool is_number_unsigned() const noexcept { return m_type == value_t::number_unsigned; } /*! @brief return whether value is a floating-point number This function returns true if and only if the JSON value is a floating-point number. This excludes signed and unsigned integer values. @return `true` if type is a floating-point number, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_number_float()` for all JSON types.,is_number_float} @sa @ref is_number() -- check if value is number @sa @ref is_number_integer() -- check if value is an integer number @sa @ref is_number_unsigned() -- check if value is an unsigned integer number @since version 1.0.0 */ constexpr bool is_number_float() const noexcept { return m_type == value_t::number_float; } /*! @brief return whether value is an object This function returns true if and only if the JSON value is an object. @return `true` if type is object, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_object()` for all JSON types.,is_object} @since version 1.0.0 */ constexpr bool is_object() const noexcept { return m_type == value_t::object; } /*! @brief return whether value is an array This function returns true if and only if the JSON value is an array. @return `true` if type is array, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_array()` for all JSON types.,is_array} @since version 1.0.0 */ constexpr bool is_array() const noexcept { return m_type == value_t::array; } /*! @brief return whether value is a string This function returns true if and only if the JSON value is a string. @return `true` if type is string, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_string()` for all JSON types.,is_string} @since version 1.0.0 */ constexpr bool is_string() const noexcept { return m_type == value_t::string; } /*! @brief return whether value is a binary array This function returns true if and only if the JSON value is a binary array. @return `true` if type is binary array, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_binary()` for all JSON types.,is_binary} @since version 3.8.0 */ constexpr bool is_binary() const noexcept { return m_type == value_t::binary; } /*! @brief return whether value is discarded This function returns true if and only if the JSON value was discarded during parsing with a callback function (see @ref parser_callback_t). @note This function will always be `false` for JSON values after parsing. That is, discarded values can only occur during parsing, but will be removed when inside a structured value or replaced by null in other cases. @return `true` if type is discarded, `false` otherwise. @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies `is_discarded()` for all JSON types.,is_discarded} @since version 1.0.0 */ constexpr bool is_discarded() const noexcept { return m_type == value_t::discarded; } /*! @brief return the type of the JSON value (implicit) Implicitly return the type of the JSON value as a value from the @ref value_t enumeration. @return the type of the JSON value @complexity Constant. @exceptionsafety No-throw guarantee: this member function never throws exceptions. @liveexample{The following code exemplifies the @ref value_t operator for all JSON types.,operator__value_t} @sa @ref type() -- return the type of the JSON value (explicit) @sa @ref type_name() -- return the type as string @since version 1.0.0 */ constexpr operator value_t() const noexcept { return m_type; } /// @} private: ////////////////// // value access // ////////////////// /// get a boolean (explicit) boolean_t get_impl(boolean_t* /*unused*/) const { if (JSON_HEDLEY_LIKELY(is_boolean())) { return m_value.boolean; } JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(type_name()))); } /// get a pointer to the value (object) object_t* get_impl_ptr(object_t* /*unused*/) noexcept { return is_object() ? m_value.object : nullptr; } /// get a pointer to the value (object) constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept { return is_object() ? m_value.object : nullptr; } /// get a pointer to the value (array) array_t* get_impl_ptr(array_t* /*unused*/) noexcept { return is_array() ? m_value.array : nullptr; } /// get a pointer to the value (array) constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept { return is_array() ? m_value.array : nullptr; } /// get a pointer to the value (string) string_t* get_impl_ptr(string_t* /*unused*/) noexcept { return is_string() ? m_value.string : nullptr; } /// get a pointer to the value (string) constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept { return is_string() ? m_value.string : nullptr; } /// get a pointer to the value (boolean) boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept { return is_boolean() ? &m_value.boolean : nullptr; } /// get a pointer to the value (boolean) constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept { return is_boolean() ? &m_value.boolean : nullptr; } /// get a pointer to the value (integer number) number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept { return is_number_integer() ? &m_value.number_integer : nullptr; } /// get a pointer to the value (integer number) constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept { return is_number_integer() ? &m_value.number_integer : nullptr; } /// get a pointer to the value (unsigned number) number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept { return is_number_unsigned() ? &m_value.number_unsigned : nullptr; } /// get a pointer to the value (unsigned number) constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept { return is_number_unsigned() ? &m_value.number_unsigned : nullptr; } /// get a pointer to the value (floating-point number) number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept { return is_number_float() ? &m_value.number_float : nullptr; } /// get a pointer to the value (floating-point number) constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept { return is_number_float() ? &m_value.number_float : nullptr; } /// get a pointer to the value (binary) binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept { return is_binary() ? m_value.binary : nullptr; } /// get a pointer to the value (binary) constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept { return is_binary() ? m_value.binary : nullptr; } /*! @brief helper function to implement get_ref() This function helps to implement get_ref() without code duplication for const and non-const overloads @tparam ThisType will be deduced as `basic_json` or `const basic_json` @throw type_error.303 if ReferenceType does not match underlying value type of the current JSON */ template static ReferenceType get_ref_impl(ThisType& obj) { // delegate the call to get_ptr<>() auto ptr = obj.template get_ptr::type>(); if (JSON_HEDLEY_LIKELY(ptr != nullptr)) { return *ptr; } JSON_THROW(type_error::create(303, "incompatible ReferenceType for get_ref, actual type is " + std::string(obj.type_name()))); } public: /// @name value access /// Direct access to the stored value of a JSON value. /// @{ /*! @brief get special-case overload This overloads avoids a lot of template boilerplate, it can be seen as the identity method @tparam BasicJsonType == @ref basic_json @return a copy of *this @complexity Constant. @since version 2.1.0 */ template::type, basic_json_t>::value, int> = 0> basic_json get() const { return *this; } /*! @brief get special-case overload This overloads converts the current @ref basic_json in a different @ref basic_json type @tparam BasicJsonType == @ref basic_json @return a copy of *this, converted into @tparam BasicJsonType @complexity Depending on the implementation of the called `from_json()` method. @since version 3.2.0 */ template < typename BasicJsonType, detail::enable_if_t < !std::is_same::value&& detail::is_basic_json::value, int > = 0 > BasicJsonType get() const { return *this; } /*! @brief get a value (explicit) Explicit type conversion between the JSON value and a compatible value which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). The value is converted by calling the @ref json_serializer `from_json()` method. The function is equivalent to executing @code {.cpp} ValueType ret; JSONSerializer::from_json(*this, ret); return ret; @endcode This overloads is chosen if: - @a ValueType is not @ref basic_json, - @ref json_serializer has a `from_json()` method of the form `void from_json(const basic_json&, ValueType&)`, and - @ref json_serializer does not have a `from_json()` method of the form `ValueType from_json(const basic_json&)` @tparam ValueTypeCV the provided value type @tparam ValueType the returned value type @return copy of the JSON value, converted to @a ValueType @throw what @ref json_serializer `from_json()` method throws @liveexample{The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers\, (2) A JSON array can be converted to a standard `std::vector`\, (3) A JSON object can be converted to C++ associative containers such as `std::unordered_map`.,get__ValueType_const} @since version 2.1.0 */ template < typename ValueTypeCV, typename ValueType = detail::uncvref_t, detail::enable_if_t < !detail::is_basic_json::value && detail::has_from_json::value && !detail::has_non_default_from_json::value, int > = 0 > ValueType get() const noexcept(noexcept( JSONSerializer::from_json(std::declval(), std::declval()))) { // we cannot static_assert on ValueTypeCV being non-const, because // there is support for get(), which is why we // still need the uncvref static_assert(!std::is_reference::value, "get() cannot be used with reference types, you might want to use get_ref()"); static_assert(std::is_default_constructible::value, "types must be DefaultConstructible when used with get()"); ValueType ret; JSONSerializer::from_json(*this, ret); return ret; } /*! @brief get a value (explicit); special case Explicit type conversion between the JSON value and a compatible value which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). The value is converted by calling the @ref json_serializer `from_json()` method. The function is equivalent to executing @code {.cpp} return JSONSerializer::from_json(*this); @endcode This overloads is chosen if: - @a ValueType is not @ref basic_json and - @ref json_serializer has a `from_json()` method of the form `ValueType from_json(const basic_json&)` @note If @ref json_serializer has both overloads of `from_json()`, this one is chosen. @tparam ValueTypeCV the provided value type @tparam ValueType the returned value type @return copy of the JSON value, converted to @a ValueType @throw what @ref json_serializer `from_json()` method throws @since version 2.1.0 */ template < typename ValueTypeCV, typename ValueType = detail::uncvref_t, detail::enable_if_t < !std::is_same::value && detail::has_non_default_from_json::value, int > = 0 > ValueType get() const noexcept(noexcept( JSONSerializer::from_json(std::declval()))) { static_assert(!std::is_reference::value, "get() cannot be used with reference types, you might want to use get_ref()"); return JSONSerializer::from_json(*this); } /*! @brief get a value (explicit) Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by calling the @ref json_serializer `from_json()` method. The function is equivalent to executing @code {.cpp} ValueType v; JSONSerializer::from_json(*this, v); @endcode This overloads is chosen if: - @a ValueType is not @ref basic_json, - @ref json_serializer has a `from_json()` method of the form `void from_json(const basic_json&, ValueType&)`, and @tparam ValueType the input parameter type. @return the input parameter, allowing chaining calls. @throw what @ref json_serializer `from_json()` method throws @liveexample{The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers\, (2) A JSON array can be converted to a standard `std::vector`\, (3) A JSON object can be converted to C++ associative containers such as `std::unordered_map`.,get_to} @since version 3.3.0 */ template < typename ValueType, detail::enable_if_t < !detail::is_basic_json::value&& detail::has_from_json::value, int > = 0 > ValueType & get_to(ValueType& v) const noexcept(noexcept( JSONSerializer::from_json(std::declval(), v))) { JSONSerializer::from_json(*this, v); return v; } // specialization to allow to call get_to with a basic_json value // see https://github.com/nlohmann/json/issues/2175 template::value, int> = 0> ValueType & get_to(ValueType& v) const { v = *this; return v; } template < typename T, std::size_t N, typename Array = T (&)[N], detail::enable_if_t < detail::has_from_json::value, int > = 0 > Array get_to(T (&v)[N]) const noexcept(noexcept(JSONSerializer::from_json( std::declval(), v))) { JSONSerializer::from_json(*this, v); return v; } /*! @brief get a pointer value (implicit) Implicit pointer access to the internally stored JSON value. No copies are made. @warning Writing data to the pointee of the result yields an undefined state. @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, @ref number_unsigned_t, or @ref number_float_t. Enforced by a static assertion. @return pointer to the internally stored JSON value if the requested pointer type @a PointerType fits to the JSON value; `nullptr` otherwise @complexity Constant. @liveexample{The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a `nullptr` is returned if the value and the requested pointer type does not match.,get_ptr} @since version 1.0.0 */ template::value, int>::type = 0> auto get_ptr() noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) { // delegate the call to get_impl_ptr<>() return get_impl_ptr(static_cast(nullptr)); } /*! @brief get a pointer value (implicit) @copydoc get_ptr() */ template < typename PointerType, typename std::enable_if < std::is_pointer::value&& std::is_const::type>::value, int >::type = 0 > constexpr auto get_ptr() const noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) { // delegate the call to get_impl_ptr<>() const return get_impl_ptr(static_cast(nullptr)); } /*! @brief get a pointer value (explicit) Explicit pointer access to the internally stored JSON value. No copies are made. @warning The pointer becomes invalid if the underlying JSON object changes. @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, @ref number_unsigned_t, or @ref number_float_t. @return pointer to the internally stored JSON value if the requested pointer type @a PointerType fits to the JSON value; `nullptr` otherwise @complexity Constant. @liveexample{The example below shows how pointers to internal values of a JSON value can be requested. Note that no type conversions are made and a `nullptr` is returned if the value and the requested pointer type does not match.,get__PointerType} @sa @ref get_ptr() for explicit pointer-member access @since version 1.0.0 */ template::value, int>::type = 0> auto get() noexcept -> decltype(std::declval().template get_ptr()) { // delegate the call to get_ptr return get_ptr(); } /*! @brief get a pointer value (explicit) @copydoc get() */ template::value, int>::type = 0> constexpr auto get() const noexcept -> decltype(std::declval().template get_ptr()) { // delegate the call to get_ptr return get_ptr(); } /*! @brief get a reference value (implicit) Implicit reference access to the internally stored JSON value. No copies are made. @warning Writing data to the referee of the result yields an undefined state. @tparam ReferenceType reference type; must be a reference to @ref array_t, @ref object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, or @ref number_float_t. Enforced by static assertion. @return reference to the internally stored JSON value if the requested reference type @a ReferenceType fits to the JSON value; throws type_error.303 otherwise @throw type_error.303 in case passed type @a ReferenceType is incompatible with the stored JSON value; see example below @complexity Constant. @liveexample{The example shows several calls to `get_ref()`.,get_ref} @since version 1.1.0 */ template::value, int>::type = 0> ReferenceType get_ref() { // delegate call to get_ref_impl return get_ref_impl(*this); } /*! @brief get a reference value (implicit) @copydoc get_ref() */ template < typename ReferenceType, typename std::enable_if < std::is_reference::value&& std::is_const::type>::value, int >::type = 0 > ReferenceType get_ref() const { // delegate call to get_ref_impl return get_ref_impl(*this); } /*! @brief get a value (implicit) Implicit type conversion between the JSON value and a compatible value. The call is realized by calling @ref get() const. @tparam ValueType non-pointer type compatible to the JSON value, for instance `int` for JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for JSON arrays. The character type of @ref string_t as well as an initializer list of this type is excluded to avoid ambiguities as these types implicitly convert to `std::string`. @return copy of the JSON value, converted to type @a ValueType @throw type_error.302 in case passed type @a ValueType is incompatible to the JSON value type (e.g., the JSON value is of type boolean, but a string is requested); see example below @complexity Linear in the size of the JSON value. @liveexample{The example below shows several conversions from JSON values to other types. There a few things to note: (1) Floating-point numbers can be converted to integers\, (2) A JSON array can be converted to a standard `std::vector`\, (3) A JSON object can be converted to C++ associative containers such as `std::unordered_map`.,operator__ValueType} @since version 1.0.0 */ template < typename ValueType, typename std::enable_if < !std::is_pointer::value&& !std::is_same>::value&& !std::is_same::value&& !detail::is_basic_json::value && !std::is_same>::value #if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914)) && !std::is_same::value #endif && detail::is_detected::value , int >::type = 0 > JSON_EXPLICIT operator ValueType() const { // delegate the call to get<>() const return get(); } /*! @return reference to the binary value @throw type_error.302 if the value is not binary @sa @ref is_binary() to check if the value is binary @since version 3.8.0 */ binary_t& get_binary() { if (!is_binary()) { JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); } return *get_ptr(); } /// @copydoc get_binary() const binary_t& get_binary() const { if (!is_binary()) { JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); } return *get_ptr(); } /// @} //////////////////// // element access // //////////////////// /// @name element access /// Access to the JSON value. /// @{ /*! @brief access specified array element with bounds checking Returns a reference to the element at specified location @a idx, with bounds checking. @param[in] idx index of the element to access @return reference to the element at index @a idx @throw type_error.304 if the JSON value is not an array; in this case, calling `at` with an index makes no sense. See example below. @throw out_of_range.401 if the index @a idx is out of range of the array; that is, `idx >= size()`. See example below. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Constant. @since version 1.0.0 @liveexample{The example below shows how array elements can be read and written using `at()`. It also demonstrates the different exceptions that can be thrown.,at__size_type} */ reference at(size_type idx) { // at only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { JSON_TRY { return m_value.array->at(idx); } JSON_CATCH (std::out_of_range&) { // create better exception explanation JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); } } else { JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); } } /*! @brief access specified array element with bounds checking Returns a const reference to the element at specified location @a idx, with bounds checking. @param[in] idx index of the element to access @return const reference to the element at index @a idx @throw type_error.304 if the JSON value is not an array; in this case, calling `at` with an index makes no sense. See example below. @throw out_of_range.401 if the index @a idx is out of range of the array; that is, `idx >= size()`. See example below. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Constant. @since version 1.0.0 @liveexample{The example below shows how array elements can be read using `at()`. It also demonstrates the different exceptions that can be thrown., at__size_type_const} */ const_reference at(size_type idx) const { // at only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { JSON_TRY { return m_value.array->at(idx); } JSON_CATCH (std::out_of_range&) { // create better exception explanation JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); } } else { JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); } } /*! @brief access specified object element with bounds checking Returns a reference to the element at with specified key @a key, with bounds checking. @param[in] key key of the element to access @return reference to the element at key @a key @throw type_error.304 if the JSON value is not an object; in this case, calling `at` with a key makes no sense. See example below. @throw out_of_range.403 if the key @a key is is not stored in the object; that is, `find(key) == end()`. See example below. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Logarithmic in the size of the container. @sa @ref operator[](const typename object_t::key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @since version 1.0.0 @liveexample{The example below shows how object elements can be read and written using `at()`. It also demonstrates the different exceptions that can be thrown.,at__object_t_key_type} */ reference at(const typename object_t::key_type& key) { // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { JSON_TRY { return m_value.object->at(key); } JSON_CATCH (std::out_of_range&) { // create better exception explanation JSON_THROW(out_of_range::create(403, "key '" + key + "' not found")); } } else { JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); } } /*! @brief access specified object element with bounds checking Returns a const reference to the element at with specified key @a key, with bounds checking. @param[in] key key of the element to access @return const reference to the element at key @a key @throw type_error.304 if the JSON value is not an object; in this case, calling `at` with a key makes no sense. See example below. @throw out_of_range.403 if the key @a key is is not stored in the object; that is, `find(key) == end()`. See example below. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Logarithmic in the size of the container. @sa @ref operator[](const typename object_t::key_type&) for unchecked access by reference @sa @ref value() for access by value with a default value @since version 1.0.0 @liveexample{The example below shows how object elements can be read using `at()`. It also demonstrates the different exceptions that can be thrown., at__object_t_key_type_const} */ const_reference at(const typename object_t::key_type& key) const { // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { JSON_TRY { return m_value.object->at(key); } JSON_CATCH (std::out_of_range&) { // create better exception explanation JSON_THROW(out_of_range::create(403, "key '" + key + "' not found")); } } else { JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()))); } } /*! @brief access specified array element Returns a reference to the element at specified location @a idx. @note If @a idx is beyond the range of the array (i.e., `idx >= size()`), then the array is silently filled up with `null` values to make `idx` a valid reference to the last stored element. @param[in] idx index of the element to access @return reference to the element at index @a idx @throw type_error.305 if the JSON value is not an array or null; in that cases, using the [] operator with an index makes no sense. @complexity Constant if @a idx is in the range of the array. Otherwise linear in `idx - size()`. @liveexample{The example below shows how array elements can be read and written using `[]` operator. Note the addition of `null` values.,operatorarray__size_type} @since version 1.0.0 */ reference operator[](size_type idx) { // implicitly convert null value to an empty array if (is_null()) { m_type = value_t::array; m_value.array = create(); assert_invariant(); } // operator[] only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { // fill up array with null values if given idx is outside range if (idx >= m_value.array->size()) { m_value.array->insert(m_value.array->end(), idx - m_value.array->size() + 1, basic_json()); } return m_value.array->operator[](idx); } JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()))); } /*! @brief access specified array element Returns a const reference to the element at specified location @a idx. @param[in] idx index of the element to access @return const reference to the element at index @a idx @throw type_error.305 if the JSON value is not an array; in that case, using the [] operator with an index makes no sense. @complexity Constant. @liveexample{The example below shows how array elements can be read using the `[]` operator.,operatorarray__size_type_const} @since version 1.0.0 */ const_reference operator[](size_type idx) const { // const operator[] only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { return m_value.array->operator[](idx); } JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()))); } /*! @brief access specified object element Returns a reference to the element at with specified key @a key. @note If @a key is not found in the object, then it is silently added to the object and filled with a `null` value to make `key` a valid reference. In case the value was `null` before, it is converted to an object. @param[in] key key of the element to access @return reference to the element at key @a key @throw type_error.305 if the JSON value is not an object or null; in that cases, using the [] operator with a key makes no sense. @complexity Logarithmic in the size of the container. @liveexample{The example below shows how object elements can be read and written using the `[]` operator.,operatorarray__key_type} @sa @ref at(const typename object_t::key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.0.0 */ reference operator[](const typename object_t::key_type& key) { // implicitly convert null value to an empty object if (is_null()) { m_type = value_t::object; m_value.object = create(); assert_invariant(); } // operator[] only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { return m_value.object->operator[](key); } JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); } /*! @brief read-only access specified object element Returns a const reference to the element at with specified key @a key. No bounds checking is performed. @warning If the element with key @a key does not exist, the behavior is undefined. @param[in] key key of the element to access @return const reference to the element at key @a key @pre The element with key @a key must exist. **This precondition is enforced with an assertion.** @throw type_error.305 if the JSON value is not an object; in that case, using the [] operator with a key makes no sense. @complexity Logarithmic in the size of the container. @liveexample{The example below shows how object elements can be read using the `[]` operator.,operatorarray__key_type_const} @sa @ref at(const typename object_t::key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.0.0 */ const_reference operator[](const typename object_t::key_type& key) const { // const operator[] only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; } JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); } /*! @brief access specified object element Returns a reference to the element at with specified key @a key. @note If @a key is not found in the object, then it is silently added to the object and filled with a `null` value to make `key` a valid reference. In case the value was `null` before, it is converted to an object. @param[in] key key of the element to access @return reference to the element at key @a key @throw type_error.305 if the JSON value is not an object or null; in that cases, using the [] operator with a key makes no sense. @complexity Logarithmic in the size of the container. @liveexample{The example below shows how object elements can be read and written using the `[]` operator.,operatorarray__key_type} @sa @ref at(const typename object_t::key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.1.0 */ template JSON_HEDLEY_NON_NULL(2) reference operator[](T* key) { // implicitly convert null to object if (is_null()) { m_type = value_t::object; m_value = value_t::object; assert_invariant(); } // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { return m_value.object->operator[](key); } JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); } /*! @brief read-only access specified object element Returns a const reference to the element at with specified key @a key. No bounds checking is performed. @warning If the element with key @a key does not exist, the behavior is undefined. @param[in] key key of the element to access @return const reference to the element at key @a key @pre The element with key @a key must exist. **This precondition is enforced with an assertion.** @throw type_error.305 if the JSON value is not an object; in that case, using the [] operator with a key makes no sense. @complexity Logarithmic in the size of the container. @liveexample{The example below shows how object elements can be read using the `[]` operator.,operatorarray__key_type_const} @sa @ref at(const typename object_t::key_type&) for access by reference with range checking @sa @ref value() for access by value with a default value @since version 1.1.0 */ template JSON_HEDLEY_NON_NULL(2) const_reference operator[](T* key) const { // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; } JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()))); } /*! @brief access specified object element with default value Returns either a copy of an object's element at the specified key @a key or a given default value if no element with key @a key exists. The function is basically equivalent to executing @code {.cpp} try { return at(key); } catch(out_of_range) { return default_value; } @endcode @note Unlike @ref at(const typename object_t::key_type&), this function does not throw if the given key @a key was not found. @note Unlike @ref operator[](const typename object_t::key_type& key), this function does not implicitly add an element to the position defined by @a key. This function is furthermore also applicable to const objects. @param[in] key key of the element to access @param[in] default_value the value to return if @a key is not found @tparam ValueType type compatible to JSON values, for instance `int` for JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for JSON arrays. Note the type of the expected value at @a key and the default value @a default_value must be compatible. @return copy of the element at key @a key or @a default_value if @a key is not found @throw type_error.302 if @a default_value does not match the type of the value at @a key @throw type_error.306 if the JSON value is not an object; in that case, using `value()` with a key makes no sense. @complexity Logarithmic in the size of the container. @liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value} @sa @ref at(const typename object_t::key_type&) for access by reference with range checking @sa @ref operator[](const typename object_t::key_type&) for unchecked access by reference @since version 1.0.0 */ // using std::is_convertible in a std::enable_if will fail when using explicit conversions template < class ValueType, typename std::enable_if < detail::is_getable::value && !std::is_same::value, int >::type = 0 > ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const { // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { // if key is found, return value and given default value otherwise const auto it = find(key); if (it != end()) { return it->template get(); } return default_value; } JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()))); } /*! @brief overload for a default value of type const char* @copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const */ string_t value(const typename object_t::key_type& key, const char* default_value) const { return value(key, string_t(default_value)); } /*! @brief access specified object element via JSON Pointer with default value Returns either a copy of an object's element at the specified key @a key or a given default value if no element with key @a key exists. The function is basically equivalent to executing @code {.cpp} try { return at(ptr); } catch(out_of_range) { return default_value; } @endcode @note Unlike @ref at(const json_pointer&), this function does not throw if the given key @a key was not found. @param[in] ptr a JSON pointer to the element to access @param[in] default_value the value to return if @a ptr found no value @tparam ValueType type compatible to JSON values, for instance `int` for JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for JSON arrays. Note the type of the expected value at @a key and the default value @a default_value must be compatible. @return copy of the element at key @a key or @a default_value if @a key is not found @throw type_error.302 if @a default_value does not match the type of the value at @a ptr @throw type_error.306 if the JSON value is not an object; in that case, using `value()` with a key makes no sense. @complexity Logarithmic in the size of the container. @liveexample{The example below shows how object elements can be queried with a default value.,basic_json__value_ptr} @sa @ref operator[](const json_pointer&) for unchecked access by reference @since version 2.0.2 */ template::value, int>::type = 0> ValueType value(const json_pointer& ptr, const ValueType& default_value) const { // at only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { // if pointer resolves a value, return it or use default value JSON_TRY { return ptr.get_checked(this).template get(); } JSON_INTERNAL_CATCH (out_of_range&) { return default_value; } } JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()))); } /*! @brief overload for a default value of type const char* @copydoc basic_json::value(const json_pointer&, ValueType) const */ JSON_HEDLEY_NON_NULL(3) string_t value(const json_pointer& ptr, const char* default_value) const { return value(ptr, string_t(default_value)); } /*! @brief access the first element Returns a reference to the first element in the container. For a JSON container `c`, the expression `c.front()` is equivalent to `*c.begin()`. @return In case of a structured type (array or object), a reference to the first element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned. @complexity Constant. @pre The JSON value must not be `null` (would throw `std::out_of_range`) or an empty array or object (undefined behavior, **guarded by assertions**). @post The JSON value remains unchanged. @throw invalid_iterator.214 when called on `null` value @liveexample{The following code shows an example for `front()`.,front} @sa @ref back() -- access the last element @since version 1.0.0 */ reference front() { return *begin(); } /*! @copydoc basic_json::front() */ const_reference front() const { return *cbegin(); } /*! @brief access the last element Returns a reference to the last element in the container. For a JSON container `c`, the expression `c.back()` is equivalent to @code {.cpp} auto tmp = c.end(); --tmp; return *tmp; @endcode @return In case of a structured type (array or object), a reference to the last element is returned. In case of number, string, boolean, or binary values, a reference to the value is returned. @complexity Constant. @pre The JSON value must not be `null` (would throw `std::out_of_range`) or an empty array or object (undefined behavior, **guarded by assertions**). @post The JSON value remains unchanged. @throw invalid_iterator.214 when called on a `null` value. See example below. @liveexample{The following code shows an example for `back()`.,back} @sa @ref front() -- access the first element @since version 1.0.0 */ reference back() { auto tmp = end(); --tmp; return *tmp; } /*! @copydoc basic_json::back() */ const_reference back() const { auto tmp = cend(); --tmp; return *tmp; } /*! @brief remove element given an iterator Removes the element specified by iterator @a pos. The iterator @a pos must be valid and dereferenceable. Thus the `end()` iterator (which is valid, but is not dereferenceable) cannot be used as a value for @a pos. If called on a primitive type other than `null`, the resulting JSON value will be `null`. @param[in] pos iterator to the element to remove @return Iterator following the last removed element. If the iterator @a pos refers to the last element, the `end()` iterator is returned. @tparam IteratorType an @ref iterator or @ref const_iterator @post Invalidates iterators and references at or after the point of the erase, including the `end()` iterator. @throw type_error.307 if called on a `null` value; example: `"cannot use erase() with null"` @throw invalid_iterator.202 if called on an iterator which does not belong to the current JSON value; example: `"iterator does not fit current value"` @throw invalid_iterator.205 if called on a primitive type with invalid iterator (i.e., any iterator which is not `begin()`); example: `"iterator out of range"` @complexity The complexity depends on the type: - objects: amortized constant - arrays: linear in distance between @a pos and the end of the container - strings and binary: linear in the length of the member - other types: constant @liveexample{The example shows the result of `erase()` for different JSON types.,erase__IteratorType} @sa @ref erase(IteratorType, IteratorType) -- removes the elements in the given range @sa @ref erase(const typename object_t::key_type&) -- removes the element from an object at the given key @sa @ref erase(const size_type) -- removes the element from an array at the given index @since version 1.0.0 */ template < class IteratorType, typename std::enable_if < std::is_same::value || std::is_same::value, int >::type = 0 > IteratorType erase(IteratorType pos) { // make sure iterator fits the current value if (JSON_HEDLEY_UNLIKELY(this != pos.m_object)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } IteratorType result = end(); switch (m_type) { case value_t::boolean: case value_t::number_float: case value_t::number_integer: case value_t::number_unsigned: case value_t::string: case value_t::binary: { if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin())) { JSON_THROW(invalid_iterator::create(205, "iterator out of range")); } if (is_string()) { AllocatorType alloc; std::allocator_traits::destroy(alloc, m_value.string); std::allocator_traits::deallocate(alloc, m_value.string, 1); m_value.string = nullptr; } else if (is_binary()) { AllocatorType alloc; std::allocator_traits::destroy(alloc, m_value.binary); std::allocator_traits::deallocate(alloc, m_value.binary, 1); m_value.binary = nullptr; } m_type = value_t::null; assert_invariant(); break; } case value_t::object: { result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); break; } case value_t::array: { result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); break; } default: JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); } return result; } /*! @brief remove elements given an iterator range Removes the element specified by the range `[first; last)`. The iterator @a first does not need to be dereferenceable if `first == last`: erasing an empty range is a no-op. If called on a primitive type other than `null`, the resulting JSON value will be `null`. @param[in] first iterator to the beginning of the range to remove @param[in] last iterator past the end of the range to remove @return Iterator following the last removed element. If the iterator @a second refers to the last element, the `end()` iterator is returned. @tparam IteratorType an @ref iterator or @ref const_iterator @post Invalidates iterators and references at or after the point of the erase, including the `end()` iterator. @throw type_error.307 if called on a `null` value; example: `"cannot use erase() with null"` @throw invalid_iterator.203 if called on iterators which does not belong to the current JSON value; example: `"iterators do not fit current value"` @throw invalid_iterator.204 if called on a primitive type with invalid iterators (i.e., if `first != begin()` and `last != end()`); example: `"iterators out of range"` @complexity The complexity depends on the type: - objects: `log(size()) + std::distance(first, last)` - arrays: linear in the distance between @a first and @a last, plus linear in the distance between @a last and end of the container - strings and binary: linear in the length of the member - other types: constant @liveexample{The example shows the result of `erase()` for different JSON types.,erase__IteratorType_IteratorType} @sa @ref erase(IteratorType) -- removes the element at a given position @sa @ref erase(const typename object_t::key_type&) -- removes the element from an object at the given key @sa @ref erase(const size_type) -- removes the element from an array at the given index @since version 1.0.0 */ template < class IteratorType, typename std::enable_if < std::is_same::value || std::is_same::value, int >::type = 0 > IteratorType erase(IteratorType first, IteratorType last) { // make sure iterator fits the current value if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object)) { JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value")); } IteratorType result = end(); switch (m_type) { case value_t::boolean: case value_t::number_float: case value_t::number_integer: case value_t::number_unsigned: case value_t::string: case value_t::binary: { if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin() || !last.m_it.primitive_iterator.is_end())) { JSON_THROW(invalid_iterator::create(204, "iterators out of range")); } if (is_string()) { AllocatorType alloc; std::allocator_traits::destroy(alloc, m_value.string); std::allocator_traits::deallocate(alloc, m_value.string, 1); m_value.string = nullptr; } else if (is_binary()) { AllocatorType alloc; std::allocator_traits::destroy(alloc, m_value.binary); std::allocator_traits::deallocate(alloc, m_value.binary, 1); m_value.binary = nullptr; } m_type = value_t::null; assert_invariant(); break; } case value_t::object: { result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator); break; } case value_t::array: { result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator); break; } default: JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); } return result; } /*! @brief remove element from a JSON object given a key Removes elements from a JSON object with the key value @a key. @param[in] key value of the elements to remove @return Number of elements removed. If @a ObjectType is the default `std::map` type, the return value will always be `0` (@a key was not found) or `1` (@a key was found). @post References and iterators to the erased elements are invalidated. Other references and iterators are not affected. @throw type_error.307 when called on a type other than JSON object; example: `"cannot use erase() with null"` @complexity `log(size()) + count(key)` @liveexample{The example shows the effect of `erase()`.,erase__key_type} @sa @ref erase(IteratorType) -- removes the element at a given position @sa @ref erase(IteratorType, IteratorType) -- removes the elements in the given range @sa @ref erase(const size_type) -- removes the element from an array at the given index @since version 1.0.0 */ size_type erase(const typename object_t::key_type& key) { // this erase only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { return m_value.object->erase(key); } JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); } /*! @brief remove element from a JSON array given an index Removes element from a JSON array at the index @a idx. @param[in] idx index of the element to remove @throw type_error.307 when called on a type other than JSON object; example: `"cannot use erase() with null"` @throw out_of_range.401 when `idx >= size()`; example: `"array index 17 is out of range"` @complexity Linear in distance between @a idx and the end of the container. @liveexample{The example shows the effect of `erase()`.,erase__size_type} @sa @ref erase(IteratorType) -- removes the element at a given position @sa @ref erase(IteratorType, IteratorType) -- removes the elements in the given range @sa @ref erase(const typename object_t::key_type&) -- removes the element from an object at the given key @since version 1.0.0 */ void erase(const size_type idx) { // this erase only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { if (JSON_HEDLEY_UNLIKELY(idx >= size())) { JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); } m_value.array->erase(m_value.array->begin() + static_cast(idx)); } else { JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()))); } } /// @} //////////// // lookup // //////////// /// @name lookup /// @{ /*! @brief find an element in a JSON object Finds an element in a JSON object with key equivalent to @a key. If the element is not found or the JSON value is not an object, end() is returned. @note This method always returns @ref end() when executed on a JSON type that is not an object. @param[in] key key value of the element to search for. @return Iterator to an element with key equivalent to @a key. If no such element is found or the JSON value is not an object, past-the-end (see @ref end()) iterator is returned. @complexity Logarithmic in the size of the JSON object. @liveexample{The example shows how `find()` is used.,find__key_type} @sa @ref contains(KeyT&&) const -- checks whether a key exists @since version 1.0.0 */ template iterator find(KeyT&& key) { auto result = end(); if (is_object()) { result.m_it.object_iterator = m_value.object->find(std::forward(key)); } return result; } /*! @brief find an element in a JSON object @copydoc find(KeyT&&) */ template const_iterator find(KeyT&& key) const { auto result = cend(); if (is_object()) { result.m_it.object_iterator = m_value.object->find(std::forward(key)); } return result; } /*! @brief returns the number of occurrences of a key in a JSON object Returns the number of elements with key @a key. If ObjectType is the default `std::map` type, the return value will always be `0` (@a key was not found) or `1` (@a key was found). @note This method always returns `0` when executed on a JSON type that is not an object. @param[in] key key value of the element to count @return Number of elements with key @a key. If the JSON value is not an object, the return value will be `0`. @complexity Logarithmic in the size of the JSON object. @liveexample{The example shows how `count()` is used.,count} @since version 1.0.0 */ template size_type count(KeyT&& key) const { // return 0 for all nonobject types return is_object() ? m_value.object->count(std::forward(key)) : 0; } /*! @brief check the existence of an element in a JSON object Check whether an element exists in a JSON object with key equivalent to @a key. If the element is not found or the JSON value is not an object, false is returned. @note This method always returns false when executed on a JSON type that is not an object. @param[in] key key value to check its existence. @return true if an element with specified @a key exists. If no such element with such key is found or the JSON value is not an object, false is returned. @complexity Logarithmic in the size of the JSON object. @liveexample{The following code shows an example for `contains()`.,contains} @sa @ref find(KeyT&&) -- returns an iterator to an object element @sa @ref contains(const json_pointer&) const -- checks the existence for a JSON pointer @since version 3.6.0 */ template < typename KeyT, typename std::enable_if < !std::is_same::type, json_pointer>::value, int >::type = 0 > bool contains(KeyT && key) const { return is_object() && m_value.object->find(std::forward(key)) != m_value.object->end(); } /*! @brief check the existence of an element in a JSON object given a JSON pointer Check whether the given JSON pointer @a ptr can be resolved in the current JSON value. @note This method can be executed on any JSON value type. @param[in] ptr JSON pointer to check its existence. @return true if the JSON pointer can be resolved to a stored value, false otherwise. @post If `j.contains(ptr)` returns true, it is safe to call `j[ptr]`. @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @complexity Logarithmic in the size of the JSON object. @liveexample{The following code shows an example for `contains()`.,contains_json_pointer} @sa @ref contains(KeyT &&) const -- checks the existence of a key @since version 3.7.0 */ bool contains(const json_pointer& ptr) const { return ptr.contains(this); } /// @} /////////////// // iterators // /////////////// /// @name iterators /// @{ /*! @brief returns an iterator to the first element Returns an iterator to the first element. @image html range-begin-end.svg "Illustration from cppreference.com" @return iterator to the first element @complexity Constant. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is constant. @liveexample{The following code shows an example for `begin()`.,begin} @sa @ref cbegin() -- returns a const iterator to the beginning @sa @ref end() -- returns an iterator to the end @sa @ref cend() -- returns a const iterator to the end @since version 1.0.0 */ iterator begin() noexcept { iterator result(this); result.set_begin(); return result; } /*! @copydoc basic_json::cbegin() */ const_iterator begin() const noexcept { return cbegin(); } /*! @brief returns a const iterator to the first element Returns a const iterator to the first element. @image html range-begin-end.svg "Illustration from cppreference.com" @return const iterator to the first element @complexity Constant. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is constant. - Has the semantics of `const_cast(*this).begin()`. @liveexample{The following code shows an example for `cbegin()`.,cbegin} @sa @ref begin() -- returns an iterator to the beginning @sa @ref end() -- returns an iterator to the end @sa @ref cend() -- returns a const iterator to the end @since version 1.0.0 */ const_iterator cbegin() const noexcept { const_iterator result(this); result.set_begin(); return result; } /*! @brief returns an iterator to one past the last element Returns an iterator to one past the last element. @image html range-begin-end.svg "Illustration from cppreference.com" @return iterator one past the last element @complexity Constant. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is constant. @liveexample{The following code shows an example for `end()`.,end} @sa @ref cend() -- returns a const iterator to the end @sa @ref begin() -- returns an iterator to the beginning @sa @ref cbegin() -- returns a const iterator to the beginning @since version 1.0.0 */ iterator end() noexcept { iterator result(this); result.set_end(); return result; } /*! @copydoc basic_json::cend() */ const_iterator end() const noexcept { return cend(); } /*! @brief returns a const iterator to one past the last element Returns a const iterator to one past the last element. @image html range-begin-end.svg "Illustration from cppreference.com" @return const iterator one past the last element @complexity Constant. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is constant. - Has the semantics of `const_cast(*this).end()`. @liveexample{The following code shows an example for `cend()`.,cend} @sa @ref end() -- returns an iterator to the end @sa @ref begin() -- returns an iterator to the beginning @sa @ref cbegin() -- returns a const iterator to the beginning @since version 1.0.0 */ const_iterator cend() const noexcept { const_iterator result(this); result.set_end(); return result; } /*! @brief returns an iterator to the reverse-beginning Returns an iterator to the reverse-beginning; that is, the last element. @image html range-rbegin-rend.svg "Illustration from cppreference.com" @complexity Constant. @requirement This function helps `basic_json` satisfying the [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) requirements: - The complexity is constant. - Has the semantics of `reverse_iterator(end())`. @liveexample{The following code shows an example for `rbegin()`.,rbegin} @sa @ref crbegin() -- returns a const reverse iterator to the beginning @sa @ref rend() -- returns a reverse iterator to the end @sa @ref crend() -- returns a const reverse iterator to the end @since version 1.0.0 */ reverse_iterator rbegin() noexcept { return reverse_iterator(end()); } /*! @copydoc basic_json::crbegin() */ const_reverse_iterator rbegin() const noexcept { return crbegin(); } /*! @brief returns an iterator to the reverse-end Returns an iterator to the reverse-end; that is, one before the first element. @image html range-rbegin-rend.svg "Illustration from cppreference.com" @complexity Constant. @requirement This function helps `basic_json` satisfying the [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) requirements: - The complexity is constant. - Has the semantics of `reverse_iterator(begin())`. @liveexample{The following code shows an example for `rend()`.,rend} @sa @ref crend() -- returns a const reverse iterator to the end @sa @ref rbegin() -- returns a reverse iterator to the beginning @sa @ref crbegin() -- returns a const reverse iterator to the beginning @since version 1.0.0 */ reverse_iterator rend() noexcept { return reverse_iterator(begin()); } /*! @copydoc basic_json::crend() */ const_reverse_iterator rend() const noexcept { return crend(); } /*! @brief returns a const reverse iterator to the last element Returns a const iterator to the reverse-beginning; that is, the last element. @image html range-rbegin-rend.svg "Illustration from cppreference.com" @complexity Constant. @requirement This function helps `basic_json` satisfying the [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) requirements: - The complexity is constant. - Has the semantics of `const_cast(*this).rbegin()`. @liveexample{The following code shows an example for `crbegin()`.,crbegin} @sa @ref rbegin() -- returns a reverse iterator to the beginning @sa @ref rend() -- returns a reverse iterator to the end @sa @ref crend() -- returns a const reverse iterator to the end @since version 1.0.0 */ const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(cend()); } /*! @brief returns a const reverse iterator to one before the first Returns a const reverse iterator to the reverse-end; that is, one before the first element. @image html range-rbegin-rend.svg "Illustration from cppreference.com" @complexity Constant. @requirement This function helps `basic_json` satisfying the [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) requirements: - The complexity is constant. - Has the semantics of `const_cast(*this).rend()`. @liveexample{The following code shows an example for `crend()`.,crend} @sa @ref rend() -- returns a reverse iterator to the end @sa @ref rbegin() -- returns a reverse iterator to the beginning @sa @ref crbegin() -- returns a const reverse iterator to the beginning @since version 1.0.0 */ const_reverse_iterator crend() const noexcept { return const_reverse_iterator(cbegin()); } public: /*! @brief wrapper to access iterator member functions in range-based for This function allows to access @ref iterator::key() and @ref iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator. For loop without iterator_wrapper: @code{cpp} for (auto it = j_object.begin(); it != j_object.end(); ++it) { std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; } @endcode Range-based for loop without iterator proxy: @code{cpp} for (auto it : j_object) { // "it" is of type json::reference and has no key() member std::cout << "value: " << it << '\n'; } @endcode Range-based for loop with iterator proxy: @code{cpp} for (auto it : json::iterator_wrapper(j_object)) { std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; } @endcode @note When iterating over an array, `key()` will return the index of the element as string (see example). @param[in] ref reference to a JSON value @return iteration proxy object wrapping @a ref with an interface to use in range-based for loops @liveexample{The following code shows how the wrapper is used,iterator_wrapper} @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Constant. @note The name of this function is not yet final and may change in the future. @deprecated This stream operator is deprecated and will be removed in future 4.0.0 of the library. Please use @ref items() instead; that is, replace `json::iterator_wrapper(j)` with `j.items()`. */ JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) static iteration_proxy iterator_wrapper(reference ref) noexcept { return ref.items(); } /*! @copydoc iterator_wrapper(reference) */ JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) static iteration_proxy iterator_wrapper(const_reference ref) noexcept { return ref.items(); } /*! @brief helper to access iterator member functions in range-based for This function allows to access @ref iterator::key() and @ref iterator::value() during range-based for loops. In these loops, a reference to the JSON values is returned, so there is no access to the underlying iterator. For loop without `items()` function: @code{cpp} for (auto it = j_object.begin(); it != j_object.end(); ++it) { std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; } @endcode Range-based for loop without `items()` function: @code{cpp} for (auto it : j_object) { // "it" is of type json::reference and has no key() member std::cout << "value: " << it << '\n'; } @endcode Range-based for loop with `items()` function: @code{cpp} for (auto& el : j_object.items()) { std::cout << "key: " << el.key() << ", value:" << el.value() << '\n'; } @endcode The `items()` function also allows to use [structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding) (C++17): @code{cpp} for (auto& [key, val] : j_object.items()) { std::cout << "key: " << key << ", value:" << val << '\n'; } @endcode @note When iterating over an array, `key()` will return the index of the element as string (see example). For primitive types (e.g., numbers), `key()` returns an empty string. @warning Using `items()` on temporary objects is dangerous. Make sure the object's lifetime exceeds the iteration. See for more information. @return iteration proxy object wrapping @a ref with an interface to use in range-based for loops @liveexample{The following code shows how the function is used.,items} @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Constant. @since version 3.1.0, structured bindings support since 3.5.0. */ iteration_proxy items() noexcept { return iteration_proxy(*this); } /*! @copydoc items() */ iteration_proxy items() const noexcept { return iteration_proxy(*this); } /// @} ////////////// // capacity // ////////////// /// @name capacity /// @{ /*! @brief checks whether the container is empty. Checks if a JSON value has no elements (i.e. whether its @ref size is `0`). @return The return value depends on the different types and is defined as follows: Value type | return value ----------- | ------------- null | `true` boolean | `false` string | `false` number | `false` binary | `false` object | result of function `object_t::empty()` array | result of function `array_t::empty()` @liveexample{The following code uses `empty()` to check if a JSON object contains any elements.,empty} @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `empty()` functions have constant complexity. @iterators No changes. @exceptionsafety No-throw guarantee: this function never throws exceptions. @note This function does not return whether a string stored as JSON value is empty - it returns whether the JSON container itself is empty which is false in the case of a string. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is constant. - Has the semantics of `begin() == end()`. @sa @ref size() -- returns the number of elements @since version 1.0.0 */ bool empty() const noexcept { switch (m_type) { case value_t::null: { // null values are empty return true; } case value_t::array: { // delegate call to array_t::empty() return m_value.array->empty(); } case value_t::object: { // delegate call to object_t::empty() return m_value.object->empty(); } default: { // all other types are nonempty return false; } } } /*! @brief returns the number of elements Returns the number of elements in a JSON value. @return The return value depends on the different types and is defined as follows: Value type | return value ----------- | ------------- null | `0` boolean | `1` string | `1` number | `1` binary | `1` object | result of function object_t::size() array | result of function array_t::size() @liveexample{The following code calls `size()` on the different value types.,size} @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their size() functions have constant complexity. @iterators No changes. @exceptionsafety No-throw guarantee: this function never throws exceptions. @note This function does not return the length of a string stored as JSON value - it returns the number of elements in the JSON value which is 1 in the case of a string. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is constant. - Has the semantics of `std::distance(begin(), end())`. @sa @ref empty() -- checks whether the container is empty @sa @ref max_size() -- returns the maximal number of elements @since version 1.0.0 */ size_type size() const noexcept { switch (m_type) { case value_t::null: { // null values are empty return 0; } case value_t::array: { // delegate call to array_t::size() return m_value.array->size(); } case value_t::object: { // delegate call to object_t::size() return m_value.object->size(); } default: { // all other types have size 1 return 1; } } } /*! @brief returns the maximum possible number of elements Returns the maximum number of elements a JSON value is able to hold due to system or library implementation limitations, i.e. `std::distance(begin(), end())` for the JSON value. @return The return value depends on the different types and is defined as follows: Value type | return value ----------- | ------------- null | `0` (same as `size()`) boolean | `1` (same as `size()`) string | `1` (same as `size()`) number | `1` (same as `size()`) binary | `1` (same as `size()`) object | result of function `object_t::max_size()` array | result of function `array_t::max_size()` @liveexample{The following code calls `max_size()` on the different value types. Note the output is implementation specific.,max_size} @complexity Constant, as long as @ref array_t and @ref object_t satisfy the Container concept; that is, their `max_size()` functions have constant complexity. @iterators No changes. @exceptionsafety No-throw guarantee: this function never throws exceptions. @requirement This function helps `basic_json` satisfying the [Container](https://en.cppreference.com/w/cpp/named_req/Container) requirements: - The complexity is constant. - Has the semantics of returning `b.size()` where `b` is the largest possible JSON value. @sa @ref size() -- returns the number of elements @since version 1.0.0 */ size_type max_size() const noexcept { switch (m_type) { case value_t::array: { // delegate call to array_t::max_size() return m_value.array->max_size(); } case value_t::object: { // delegate call to object_t::max_size() return m_value.object->max_size(); } default: { // all other types have max_size() == size() return size(); } } } /// @} /////////////// // modifiers // /////////////// /// @name modifiers /// @{ /*! @brief clears the contents Clears the content of a JSON value and resets it to the default value as if @ref basic_json(value_t) would have been called with the current value type from @ref type(): Value type | initial value ----------- | ------------- null | `null` boolean | `false` string | `""` number | `0` binary | An empty byte vector object | `{}` array | `[]` @post Has the same effect as calling @code {.cpp} *this = basic_json(type()); @endcode @liveexample{The example below shows the effect of `clear()` to different JSON types.,clear} @complexity Linear in the size of the JSON value. @iterators All iterators, pointers and references related to this container are invalidated. @exceptionsafety No-throw guarantee: this function never throws exceptions. @sa @ref basic_json(value_t) -- constructor that creates an object with the same value than calling `clear()` @since version 1.0.0 */ void clear() noexcept { switch (m_type) { case value_t::number_integer: { m_value.number_integer = 0; break; } case value_t::number_unsigned: { m_value.number_unsigned = 0; break; } case value_t::number_float: { m_value.number_float = 0.0; break; } case value_t::boolean: { m_value.boolean = false; break; } case value_t::string: { m_value.string->clear(); break; } case value_t::binary: { m_value.binary->clear(); break; } case value_t::array: { m_value.array->clear(); break; } case value_t::object: { m_value.object->clear(); break; } default: break; } } /*! @brief add an object to an array Appends the given element @a val to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending @a val. @param[in] val the value to add to the JSON array @throw type_error.308 when called on a type other than JSON array or null; example: `"cannot use push_back() with number"` @complexity Amortized constant. @liveexample{The example shows how `push_back()` and `+=` can be used to add elements to a JSON array. Note how the `null` value was silently converted to a JSON array.,push_back} @since version 1.0.0 */ void push_back(basic_json&& val) { // push_back only works for null objects or arrays if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) { JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); } // transform null object into an array if (is_null()) { m_type = value_t::array; m_value = value_t::array; assert_invariant(); } // add element to array (move semantics) m_value.array->push_back(std::move(val)); // if val is moved from, basic_json move constructor marks it null so we do not call the destructor } /*! @brief add an object to an array @copydoc push_back(basic_json&&) */ reference operator+=(basic_json&& val) { push_back(std::move(val)); return *this; } /*! @brief add an object to an array @copydoc push_back(basic_json&&) */ void push_back(const basic_json& val) { // push_back only works for null objects or arrays if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) { JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); } // transform null object into an array if (is_null()) { m_type = value_t::array; m_value = value_t::array; assert_invariant(); } // add element to array m_value.array->push_back(val); } /*! @brief add an object to an array @copydoc push_back(basic_json&&) */ reference operator+=(const basic_json& val) { push_back(val); return *this; } /*! @brief add an object to an object Inserts the given element @a val to the JSON object. If the function is called on a JSON null value, an empty object is created before inserting @a val. @param[in] val the value to add to the JSON object @throw type_error.308 when called on a type other than JSON object or null; example: `"cannot use push_back() with number"` @complexity Logarithmic in the size of the container, O(log(`size()`)). @liveexample{The example shows how `push_back()` and `+=` can be used to add elements to a JSON object. Note how the `null` value was silently converted to a JSON object.,push_back__object_t__value} @since version 1.0.0 */ void push_back(const typename object_t::value_type& val) { // push_back only works for null objects or objects if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) { JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); } // transform null object into an object if (is_null()) { m_type = value_t::object; m_value = value_t::object; assert_invariant(); } // add element to array m_value.object->insert(val); } /*! @brief add an object to an object @copydoc push_back(const typename object_t::value_type&) */ reference operator+=(const typename object_t::value_type& val) { push_back(val); return *this; } /*! @brief add an object to an object This function allows to use `push_back` with an initializer list. In case 1. the current value is an object, 2. the initializer list @a init contains only two elements, and 3. the first element of @a init is a string, @a init is converted into an object element and added using @ref push_back(const typename object_t::value_type&). Otherwise, @a init is converted to a JSON value and added using @ref push_back(basic_json&&). @param[in] init an initializer list @complexity Linear in the size of the initializer list @a init. @note This function is required to resolve an ambiguous overload error, because pairs like `{"key", "value"}` can be both interpreted as `object_t::value_type` or `std::initializer_list`, see https://github.com/nlohmann/json/issues/235 for more information. @liveexample{The example shows how initializer lists are treated as objects when possible.,push_back__initializer_list} */ void push_back(initializer_list_t init) { if (is_object() && init.size() == 2 && (*init.begin())->is_string()) { basic_json&& key = init.begin()->moved_or_copied(); push_back(typename object_t::value_type( std::move(key.get_ref()), (init.begin() + 1)->moved_or_copied())); } else { push_back(basic_json(init)); } } /*! @brief add an object to an object @copydoc push_back(initializer_list_t) */ reference operator+=(initializer_list_t init) { push_back(init); return *this; } /*! @brief add an object to an array Creates a JSON value from the passed parameters @a args to the end of the JSON value. If the function is called on a JSON null value, an empty array is created before appending the value created from @a args. @param[in] args arguments to forward to a constructor of @ref basic_json @tparam Args compatible types to create a @ref basic_json object @return reference to the inserted element @throw type_error.311 when called on a type other than JSON array or null; example: `"cannot use emplace_back() with number"` @complexity Amortized constant. @liveexample{The example shows how `push_back()` can be used to add elements to a JSON array. Note how the `null` value was silently converted to a JSON array.,emplace_back} @since version 2.0.8, returns reference since 3.7.0 */ template reference emplace_back(Args&& ... args) { // emplace_back only works for null objects or arrays if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) { JSON_THROW(type_error::create(311, "cannot use emplace_back() with " + std::string(type_name()))); } // transform null object into an array if (is_null()) { m_type = value_t::array; m_value = value_t::array; assert_invariant(); } // add element to array (perfect forwarding) #ifdef JSON_HAS_CPP_17 return m_value.array->emplace_back(std::forward(args)...); #else m_value.array->emplace_back(std::forward(args)...); return m_value.array->back(); #endif } /*! @brief add an object to an object if key does not exist Inserts a new element into a JSON object constructed in-place with the given @a args if there is no element with the key in the container. If the function is called on a JSON null value, an empty object is created before appending the value created from @a args. @param[in] args arguments to forward to a constructor of @ref basic_json @tparam Args compatible types to create a @ref basic_json object @return a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place. @throw type_error.311 when called on a type other than JSON object or null; example: `"cannot use emplace() with number"` @complexity Logarithmic in the size of the container, O(log(`size()`)). @liveexample{The example shows how `emplace()` can be used to add elements to a JSON object. Note how the `null` value was silently converted to a JSON object. Further note how no value is added if there was already one value stored with the same key.,emplace} @since version 2.0.8 */ template std::pair emplace(Args&& ... args) { // emplace only works for null objects or arrays if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) { JSON_THROW(type_error::create(311, "cannot use emplace() with " + std::string(type_name()))); } // transform null object into an object if (is_null()) { m_type = value_t::object; m_value = value_t::object; assert_invariant(); } // add element to array (perfect forwarding) auto res = m_value.object->emplace(std::forward(args)...); // create result iterator and set iterator to the result of emplace auto it = begin(); it.m_it.object_iterator = res.first; // return pair of iterator and boolean return {it, res.second}; } /// Helper for insertion of an iterator /// @note: This uses std::distance to support GCC 4.8, /// see https://github.com/nlohmann/json/pull/1257 template iterator insert_iterator(const_iterator pos, Args&& ... args) { iterator result(this); JSON_ASSERT(m_value.array != nullptr); auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); m_value.array->insert(pos.m_it.array_iterator, std::forward(args)...); result.m_it.array_iterator = m_value.array->begin() + insert_pos; // This could have been written as: // result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); // but the return value of insert is missing in GCC 4.8, so it is written this way instead. return result; } /*! @brief inserts element Inserts element @a val before iterator @a pos. @param[in] pos iterator before which the content will be inserted; may be the end() iterator @param[in] val element to insert @return iterator pointing to the inserted @a val. @throw type_error.309 if called on JSON values other than arrays; example: `"cannot use insert() with string"` @throw invalid_iterator.202 if @a pos is not an iterator of *this; example: `"iterator does not fit current value"` @complexity Constant plus linear in the distance between @a pos and end of the container. @liveexample{The example shows how `insert()` is used.,insert} @since version 1.0.0 */ iterator insert(const_iterator pos, const basic_json& val) { // insert only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { // check if iterator pos fits to this JSON value if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } // insert to array and return iterator return insert_iterator(pos, val); } JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } /*! @brief inserts element @copydoc insert(const_iterator, const basic_json&) */ iterator insert(const_iterator pos, basic_json&& val) { return insert(pos, val); } /*! @brief inserts elements Inserts @a cnt copies of @a val before iterator @a pos. @param[in] pos iterator before which the content will be inserted; may be the end() iterator @param[in] cnt number of copies of @a val to insert @param[in] val element to insert @return iterator pointing to the first element inserted, or @a pos if `cnt==0` @throw type_error.309 if called on JSON values other than arrays; example: `"cannot use insert() with string"` @throw invalid_iterator.202 if @a pos is not an iterator of *this; example: `"iterator does not fit current value"` @complexity Linear in @a cnt plus linear in the distance between @a pos and end of the container. @liveexample{The example shows how `insert()` is used.,insert__count} @since version 1.0.0 */ iterator insert(const_iterator pos, size_type cnt, const basic_json& val) { // insert only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { // check if iterator pos fits to this JSON value if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } // insert to array and return iterator return insert_iterator(pos, cnt, val); } JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } /*! @brief inserts elements Inserts elements from range `[first, last)` before iterator @a pos. @param[in] pos iterator before which the content will be inserted; may be the end() iterator @param[in] first begin of the range of elements to insert @param[in] last end of the range of elements to insert @throw type_error.309 if called on JSON values other than arrays; example: `"cannot use insert() with string"` @throw invalid_iterator.202 if @a pos is not an iterator of *this; example: `"iterator does not fit current value"` @throw invalid_iterator.210 if @a first and @a last do not belong to the same JSON value; example: `"iterators do not fit"` @throw invalid_iterator.211 if @a first or @a last are iterators into container for which insert is called; example: `"passed iterators may not belong to container"` @return iterator pointing to the first element inserted, or @a pos if `first==last` @complexity Linear in `std::distance(first, last)` plus linear in the distance between @a pos and end of the container. @liveexample{The example shows how `insert()` is used.,insert__range} @since version 1.0.0 */ iterator insert(const_iterator pos, const_iterator first, const_iterator last) { // insert only works for arrays if (JSON_HEDLEY_UNLIKELY(!is_array())) { JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } // check if iterator pos fits to this JSON value if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } // check if range iterators belong to the same JSON object if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); } if (JSON_HEDLEY_UNLIKELY(first.m_object == this)) { JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container")); } // insert to array and return iterator return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator); } /*! @brief inserts elements Inserts elements from initializer list @a ilist before iterator @a pos. @param[in] pos iterator before which the content will be inserted; may be the end() iterator @param[in] ilist initializer list to insert the values from @throw type_error.309 if called on JSON values other than arrays; example: `"cannot use insert() with string"` @throw invalid_iterator.202 if @a pos is not an iterator of *this; example: `"iterator does not fit current value"` @return iterator pointing to the first element inserted, or @a pos if `ilist` is empty @complexity Linear in `ilist.size()` plus linear in the distance between @a pos and end of the container. @liveexample{The example shows how `insert()` is used.,insert__ilist} @since version 1.0.0 */ iterator insert(const_iterator pos, initializer_list_t ilist) { // insert only works for arrays if (JSON_HEDLEY_UNLIKELY(!is_array())) { JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } // check if iterator pos fits to this JSON value if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } // insert to array and return iterator return insert_iterator(pos, ilist.begin(), ilist.end()); } /*! @brief inserts elements Inserts elements from range `[first, last)`. @param[in] first begin of the range of elements to insert @param[in] last end of the range of elements to insert @throw type_error.309 if called on JSON values other than objects; example: `"cannot use insert() with string"` @throw invalid_iterator.202 if iterator @a first or @a last does does not point to an object; example: `"iterators first and last must point to objects"` @throw invalid_iterator.210 if @a first and @a last do not belong to the same JSON value; example: `"iterators do not fit"` @complexity Logarithmic: `O(N*log(size() + N))`, where `N` is the number of elements to insert. @liveexample{The example shows how `insert()` is used.,insert__range_object} @since version 3.0.0 */ void insert(const_iterator first, const_iterator last) { // insert only works for objects if (JSON_HEDLEY_UNLIKELY(!is_object())) { JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } // check if range iterators belong to the same JSON object if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); } // passed iterators must belong to objects if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) { JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); } m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator); } /*! @brief updates a JSON object from another object, overwriting existing keys Inserts all values from JSON object @a j and overwrites existing keys. @param[in] j JSON object to read values from @throw type_error.312 if called on JSON values other than objects; example: `"cannot use update() with string"` @complexity O(N*log(size() + N)), where N is the number of elements to insert. @liveexample{The example shows how `update()` is used.,update} @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update @since version 3.0.0 */ void update(const_reference j) { // implicitly convert null value to an empty object if (is_null()) { m_type = value_t::object; m_value.object = create(); assert_invariant(); } if (JSON_HEDLEY_UNLIKELY(!is_object())) { JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); } if (JSON_HEDLEY_UNLIKELY(!j.is_object())) { JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(j.type_name()))); } for (auto it = j.cbegin(); it != j.cend(); ++it) { m_value.object->operator[](it.key()) = it.value(); } } /*! @brief updates a JSON object from another object, overwriting existing keys Inserts all values from from range `[first, last)` and overwrites existing keys. @param[in] first begin of the range of elements to insert @param[in] last end of the range of elements to insert @throw type_error.312 if called on JSON values other than objects; example: `"cannot use update() with string"` @throw invalid_iterator.202 if iterator @a first or @a last does does not point to an object; example: `"iterators first and last must point to objects"` @throw invalid_iterator.210 if @a first and @a last do not belong to the same JSON value; example: `"iterators do not fit"` @complexity O(N*log(size() + N)), where N is the number of elements to insert. @liveexample{The example shows how `update()` is used__range.,update} @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update @since version 3.0.0 */ void update(const_iterator first, const_iterator last) { // implicitly convert null value to an empty object if (is_null()) { m_type = value_t::object; m_value.object = create(); assert_invariant(); } if (JSON_HEDLEY_UNLIKELY(!is_object())) { JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); } // check if range iterators belong to the same JSON object if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); } // passed iterators must belong to objects if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object() || !last.m_object->is_object())) { JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); } for (auto it = first; it != last; ++it) { m_value.object->operator[](it.key()) = it.value(); } } /*! @brief exchanges the values Exchanges the contents of the JSON value with those of @a other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. @param[in,out] other JSON value to exchange the contents with @complexity Constant. @liveexample{The example below shows how JSON values can be swapped with `swap()`.,swap__reference} @since version 1.0.0 */ void swap(reference other) noexcept ( std::is_nothrow_move_constructible::value&& std::is_nothrow_move_assignable::value&& std::is_nothrow_move_constructible::value&& std::is_nothrow_move_assignable::value ) { std::swap(m_type, other.m_type); std::swap(m_value, other.m_value); assert_invariant(); } /*! @brief exchanges the values Exchanges the contents of the JSON value from @a left with those of @a right. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. implemented as a friend function callable via ADL. @param[in,out] left JSON value to exchange the contents with @param[in,out] right JSON value to exchange the contents with @complexity Constant. @liveexample{The example below shows how JSON values can be swapped with `swap()`.,swap__reference} @since version 1.0.0 */ friend void swap(reference left, reference right) noexcept ( std::is_nothrow_move_constructible::value&& std::is_nothrow_move_assignable::value&& std::is_nothrow_move_constructible::value&& std::is_nothrow_move_assignable::value ) { left.swap(right); } /*! @brief exchanges the values Exchanges the contents of a JSON array with those of @a other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. @param[in,out] other array to exchange the contents with @throw type_error.310 when JSON value is not an array; example: `"cannot use swap() with string"` @complexity Constant. @liveexample{The example below shows how arrays can be swapped with `swap()`.,swap__array_t} @since version 1.0.0 */ void swap(array_t& other) { // swap only works for arrays if (JSON_HEDLEY_LIKELY(is_array())) { std::swap(*(m_value.array), other); } else { JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); } } /*! @brief exchanges the values Exchanges the contents of a JSON object with those of @a other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. @param[in,out] other object to exchange the contents with @throw type_error.310 when JSON value is not an object; example: `"cannot use swap() with string"` @complexity Constant. @liveexample{The example below shows how objects can be swapped with `swap()`.,swap__object_t} @since version 1.0.0 */ void swap(object_t& other) { // swap only works for objects if (JSON_HEDLEY_LIKELY(is_object())) { std::swap(*(m_value.object), other); } else { JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); } } /*! @brief exchanges the values Exchanges the contents of a JSON string with those of @a other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. @param[in,out] other string to exchange the contents with @throw type_error.310 when JSON value is not a string; example: `"cannot use swap() with boolean"` @complexity Constant. @liveexample{The example below shows how strings can be swapped with `swap()`.,swap__string_t} @since version 1.0.0 */ void swap(string_t& other) { // swap only works for strings if (JSON_HEDLEY_LIKELY(is_string())) { std::swap(*(m_value.string), other); } else { JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); } } /*! @brief exchanges the values Exchanges the contents of a JSON string with those of @a other. Does not invoke any move, copy, or swap operations on individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. @param[in,out] other binary to exchange the contents with @throw type_error.310 when JSON value is not a string; example: `"cannot use swap() with boolean"` @complexity Constant. @liveexample{The example below shows how strings can be swapped with `swap()`.,swap__binary_t} @since version 3.8.0 */ void swap(binary_t& other) { // swap only works for strings if (JSON_HEDLEY_LIKELY(is_binary())) { std::swap(*(m_value.binary), other); } else { JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); } } /// @copydoc swap(binary_t) void swap(typename binary_t::container_type& other) { // swap only works for strings if (JSON_HEDLEY_LIKELY(is_binary())) { std::swap(*(m_value.binary), other); } else { JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); } } /// @} public: ////////////////////////////////////////// // lexicographical comparison operators // ////////////////////////////////////////// /// @name lexicographical comparison operators /// @{ /*! @brief comparison: equal Compares two JSON values for equality according to the following rules: - Two JSON values are equal if (1) they are from the same type and (2) their stored values are the same according to their respective `operator==`. - Integer and floating-point numbers are automatically converted before comparison. Note that two NaN values are always treated as unequal. - Two JSON null values are equal. @note Floating-point inside JSON values numbers are compared with `json::number_float_t::operator==` which is `double::operator==` by default. To compare floating-point while respecting an epsilon, an alternative [comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39) could be used, for instance @code {.cpp} template::value, T>::type> inline bool is_same(T a, T b, T epsilon = std::numeric_limits::epsilon()) noexcept { return std::abs(a - b) <= epsilon; } @endcode Or you can self-defined operator equal function like this: @code {.cpp} bool my_equal(const_reference lhs, const_reference rhs) { const auto lhs_type lhs.type(); const auto rhs_type rhs.type(); if (lhs_type == rhs_type) { switch(lhs_type) // self_defined case case value_t::number_float: return std::abs(lhs - rhs) <= std::numeric_limits::epsilon(); // other cases remain the same with the original ... } ... } @endcode @note NaN values never compare equal to themselves or to other NaN values. @param[in] lhs first JSON value to consider @param[in] rhs second JSON value to consider @return whether the values @a lhs and @a rhs are equal @exceptionsafety No-throw guarantee: this function never throws exceptions. @complexity Linear. @liveexample{The example demonstrates comparing several JSON types.,operator__equal} @since version 1.0.0 */ friend bool operator==(const_reference lhs, const_reference rhs) noexcept { const auto lhs_type = lhs.type(); const auto rhs_type = rhs.type(); if (lhs_type == rhs_type) { switch (lhs_type) { case value_t::array: return *lhs.m_value.array == *rhs.m_value.array; case value_t::object: return *lhs.m_value.object == *rhs.m_value.object; case value_t::null: return true; case value_t::string: return *lhs.m_value.string == *rhs.m_value.string; case value_t::boolean: return lhs.m_value.boolean == rhs.m_value.boolean; case value_t::number_integer: return lhs.m_value.number_integer == rhs.m_value.number_integer; case value_t::number_unsigned: return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned; case value_t::number_float: return lhs.m_value.number_float == rhs.m_value.number_float; case value_t::binary: return *lhs.m_value.binary == *rhs.m_value.binary; default: return false; } } else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) { return static_cast(lhs.m_value.number_integer) == rhs.m_value.number_float; } else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) { return lhs.m_value.number_float == static_cast(rhs.m_value.number_integer); } else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) { return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_float; } else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) { return lhs.m_value.number_float == static_cast(rhs.m_value.number_unsigned); } else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) { return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_integer; } else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) { return lhs.m_value.number_integer == static_cast(rhs.m_value.number_unsigned); } return false; } /*! @brief comparison: equal @copydoc operator==(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator==(const_reference lhs, const ScalarType rhs) noexcept { return lhs == basic_json(rhs); } /*! @brief comparison: equal @copydoc operator==(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator==(const ScalarType lhs, const_reference rhs) noexcept { return basic_json(lhs) == rhs; } /*! @brief comparison: not equal Compares two JSON values for inequality by calculating `not (lhs == rhs)`. @param[in] lhs first JSON value to consider @param[in] rhs second JSON value to consider @return whether the values @a lhs and @a rhs are not equal @complexity Linear. @exceptionsafety No-throw guarantee: this function never throws exceptions. @liveexample{The example demonstrates comparing several JSON types.,operator__notequal} @since version 1.0.0 */ friend bool operator!=(const_reference lhs, const_reference rhs) noexcept { return !(lhs == rhs); } /*! @brief comparison: not equal @copydoc operator!=(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator!=(const_reference lhs, const ScalarType rhs) noexcept { return lhs != basic_json(rhs); } /*! @brief comparison: not equal @copydoc operator!=(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator!=(const ScalarType lhs, const_reference rhs) noexcept { return basic_json(lhs) != rhs; } /*! @brief comparison: less than Compares whether one JSON value @a lhs is less than another JSON value @a rhs according to the following rules: - If @a lhs and @a rhs have the same type, the values are compared using the default `<` operator. - Integer and floating-point numbers are automatically converted before comparison - In case @a lhs and @a rhs have different types, the values are ignored and the order of the types is considered, see @ref operator<(const value_t, const value_t). @param[in] lhs first JSON value to consider @param[in] rhs second JSON value to consider @return whether @a lhs is less than @a rhs @complexity Linear. @exceptionsafety No-throw guarantee: this function never throws exceptions. @liveexample{The example demonstrates comparing several JSON types.,operator__less} @since version 1.0.0 */ friend bool operator<(const_reference lhs, const_reference rhs) noexcept { const auto lhs_type = lhs.type(); const auto rhs_type = rhs.type(); if (lhs_type == rhs_type) { switch (lhs_type) { case value_t::array: // note parentheses are necessary, see // https://github.com/nlohmann/json/issues/1530 return (*lhs.m_value.array) < (*rhs.m_value.array); case value_t::object: return (*lhs.m_value.object) < (*rhs.m_value.object); case value_t::null: return false; case value_t::string: return (*lhs.m_value.string) < (*rhs.m_value.string); case value_t::boolean: return (lhs.m_value.boolean) < (rhs.m_value.boolean); case value_t::number_integer: return (lhs.m_value.number_integer) < (rhs.m_value.number_integer); case value_t::number_unsigned: return (lhs.m_value.number_unsigned) < (rhs.m_value.number_unsigned); case value_t::number_float: return (lhs.m_value.number_float) < (rhs.m_value.number_float); case value_t::binary: return (*lhs.m_value.binary) < (*rhs.m_value.binary); default: return false; } } else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) { return static_cast(lhs.m_value.number_integer) < rhs.m_value.number_float; } else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) { return lhs.m_value.number_float < static_cast(rhs.m_value.number_integer); } else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) { return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_float; } else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) { return lhs.m_value.number_float < static_cast(rhs.m_value.number_unsigned); } else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) { return lhs.m_value.number_integer < static_cast(rhs.m_value.number_unsigned); } else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) { return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_integer; } // We only reach this line if we cannot compare values. In that case, // we compare types. Note we have to call the operator explicitly, // because MSVC has problems otherwise. return operator<(lhs_type, rhs_type); } /*! @brief comparison: less than @copydoc operator<(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator<(const_reference lhs, const ScalarType rhs) noexcept { return lhs < basic_json(rhs); } /*! @brief comparison: less than @copydoc operator<(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator<(const ScalarType lhs, const_reference rhs) noexcept { return basic_json(lhs) < rhs; } /*! @brief comparison: less than or equal Compares whether one JSON value @a lhs is less than or equal to another JSON value by calculating `not (rhs < lhs)`. @param[in] lhs first JSON value to consider @param[in] rhs second JSON value to consider @return whether @a lhs is less than or equal to @a rhs @complexity Linear. @exceptionsafety No-throw guarantee: this function never throws exceptions. @liveexample{The example demonstrates comparing several JSON types.,operator__greater} @since version 1.0.0 */ friend bool operator<=(const_reference lhs, const_reference rhs) noexcept { return !(rhs < lhs); } /*! @brief comparison: less than or equal @copydoc operator<=(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator<=(const_reference lhs, const ScalarType rhs) noexcept { return lhs <= basic_json(rhs); } /*! @brief comparison: less than or equal @copydoc operator<=(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator<=(const ScalarType lhs, const_reference rhs) noexcept { return basic_json(lhs) <= rhs; } /*! @brief comparison: greater than Compares whether one JSON value @a lhs is greater than another JSON value by calculating `not (lhs <= rhs)`. @param[in] lhs first JSON value to consider @param[in] rhs second JSON value to consider @return whether @a lhs is greater than to @a rhs @complexity Linear. @exceptionsafety No-throw guarantee: this function never throws exceptions. @liveexample{The example demonstrates comparing several JSON types.,operator__lessequal} @since version 1.0.0 */ friend bool operator>(const_reference lhs, const_reference rhs) noexcept { return !(lhs <= rhs); } /*! @brief comparison: greater than @copydoc operator>(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator>(const_reference lhs, const ScalarType rhs) noexcept { return lhs > basic_json(rhs); } /*! @brief comparison: greater than @copydoc operator>(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator>(const ScalarType lhs, const_reference rhs) noexcept { return basic_json(lhs) > rhs; } /*! @brief comparison: greater than or equal Compares whether one JSON value @a lhs is greater than or equal to another JSON value by calculating `not (lhs < rhs)`. @param[in] lhs first JSON value to consider @param[in] rhs second JSON value to consider @return whether @a lhs is greater than or equal to @a rhs @complexity Linear. @exceptionsafety No-throw guarantee: this function never throws exceptions. @liveexample{The example demonstrates comparing several JSON types.,operator__greaterequal} @since version 1.0.0 */ friend bool operator>=(const_reference lhs, const_reference rhs) noexcept { return !(lhs < rhs); } /*! @brief comparison: greater than or equal @copydoc operator>=(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator>=(const_reference lhs, const ScalarType rhs) noexcept { return lhs >= basic_json(rhs); } /*! @brief comparison: greater than or equal @copydoc operator>=(const_reference, const_reference) */ template::value, int>::type = 0> friend bool operator>=(const ScalarType lhs, const_reference rhs) noexcept { return basic_json(lhs) >= rhs; } /// @} /////////////////// // serialization // /////////////////// /// @name serialization /// @{ /*! @brief serialize to stream Serialize the given JSON value @a j to the output stream @a o. The JSON value will be serialized using the @ref dump member function. - The indentation of the output can be controlled with the member variable `width` of the output stream @a o. For instance, using the manipulator `std::setw(4)` on @a o sets the indentation level to `4` and the serialization result is the same as calling `dump(4)`. - The indentation character can be controlled with the member variable `fill` of the output stream @a o. For instance, the manipulator `std::setfill('\\t')` sets indentation to use a tab character rather than the default space character. @param[in,out] o stream to serialize to @param[in] j JSON value to serialize @return the stream @a o @throw type_error.316 if a string stored inside the JSON value is not UTF-8 encoded @complexity Linear. @liveexample{The example below shows the serialization with different parameters to `width` to adjust the indentation level.,operator_serialize} @since version 1.0.0; indentation character added in version 3.0.0 */ friend std::ostream& operator<<(std::ostream& o, const basic_json& j) { // read width member and use it as indentation parameter if nonzero const bool pretty_print = o.width() > 0; const auto indentation = pretty_print ? o.width() : 0; // reset width to 0 for subsequent calls to this stream o.width(0); // do the actual serialization serializer s(detail::output_adapter(o), o.fill()); s.dump(j, pretty_print, false, static_cast(indentation)); return o; } /*! @brief serialize to stream @deprecated This stream operator is deprecated and will be removed in future 4.0.0 of the library. Please use @ref operator<<(std::ostream&, const basic_json&) instead; that is, replace calls like `j >> o;` with `o << j;`. @since version 1.0.0; deprecated since version 3.0.0 */ JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&)) friend std::ostream& operator>>(const basic_json& j, std::ostream& o) { return o << j; } /// @} ///////////////////// // deserialization // ///////////////////// /// @name deserialization /// @{ /*! @brief deserialize from a compatible input @tparam InputType A compatible input, for instance - an std::istream object - a FILE pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object obj for which begin(obj) and end(obj) produces a valid pair of iterators. @param[in] i input to read from @param[in] cb a parser callback function of type @ref parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) @param[in] allow_exceptions whether to throw exceptions in case of a parse error (optional, true by default) @param[in] ignore_comments whether comments should be ignored and treated like whitespace (true) or yield a parse error (true); (optional, false by default) @return deserialized JSON value; in case of a parse error and @a allow_exceptions set to `false`, the return value will be value_t::discarded. @throw parse_error.101 if a parse error occurs; example: `""unexpected end of input; expected string literal""` @throw parse_error.102 if to_unicode fails or surrogate error @throw parse_error.103 if to_unicode fails @complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function @a cb or reading from the input @a i has a super-linear complexity. @note A UTF-8 byte order mark is silently ignored. @liveexample{The example below demonstrates the `parse()` function reading from an array.,parse__array__parser_callback_t} @liveexample{The example below demonstrates the `parse()` function with and without callback function.,parse__string__parser_callback_t} @liveexample{The example below demonstrates the `parse()` function with and without callback function.,parse__istream__parser_callback_t} @liveexample{The example below demonstrates the `parse()` function reading from a contiguous container.,parse__contiguouscontainer__parser_callback_t} @since version 2.0.3 (contiguous containers); version 3.9.0 allowed to ignore comments. */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json parse(InputType&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false) { basic_json result; parser(detail::input_adapter(std::forward(i)), cb, allow_exceptions, ignore_comments).parse(true, result); return result; } /*! @brief deserialize from a pair of character iterators The value_type of the iterator must be a integral type with size of 1, 2 or 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32. @param[in] first iterator to start of character range @param[in] last iterator to end of character range @param[in] cb a parser callback function of type @ref parser_callback_t which is used to control the deserialization by filtering unwanted values (optional) @param[in] allow_exceptions whether to throw exceptions in case of a parse error (optional, true by default) @param[in] ignore_comments whether comments should be ignored and treated like whitespace (true) or yield a parse error (true); (optional, false by default) @return deserialized JSON value; in case of a parse error and @a allow_exceptions set to `false`, the return value will be value_t::discarded. @throw parse_error.101 if a parse error occurs; example: `""unexpected end of input; expected string literal""` @throw parse_error.102 if to_unicode fails or surrogate error @throw parse_error.103 if to_unicode fails */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json parse(IteratorType first, IteratorType last, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false) { basic_json result; parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result); return result; } JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len)) static basic_json parse(detail::span_input_adapter&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false) { basic_json result; parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result); return result; } /*! @brief check if the input is valid JSON Unlike the @ref parse(InputType&&, const parser_callback_t,const bool) function, this function neither throws an exception in case of invalid JSON input (i.e., a parse error) nor creates diagnostic information. @tparam InputType A compatible input, for instance - an std::istream object - a FILE pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object obj for which begin(obj) and end(obj) produces a valid pair of iterators. @param[in] i input to read from @param[in] ignore_comments whether comments should be ignored and treated like whitespace (true) or yield a parse error (true); (optional, false by default) @return Whether the input read from @a i is valid JSON. @complexity Linear in the length of the input. The parser is a predictive LL(1) parser. @note A UTF-8 byte order mark is silently ignored. @liveexample{The example below demonstrates the `accept()` function reading from a string.,accept__string} */ template static bool accept(InputType&& i, const bool ignore_comments = false) { return parser(detail::input_adapter(std::forward(i)), nullptr, false, ignore_comments).accept(true); } template static bool accept(IteratorType first, IteratorType last, const bool ignore_comments = false) { return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true); } JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len)) static bool accept(detail::span_input_adapter&& i, const bool ignore_comments = false) { return parser(i.get(), nullptr, false, ignore_comments).accept(true); } /*! @brief generate SAX events The SAX event lister must follow the interface of @ref json_sax. This function reads from a compatible input. Examples are: - an std::istream object - a FILE pointer - a C-style array of characters - a pointer to a null-terminated string of single byte characters - an object obj for which begin(obj) and end(obj) produces a valid pair of iterators. @param[in] i input to read from @param[in,out] sax SAX event listener @param[in] format the format to parse (JSON, CBOR, MessagePack, or UBJSON) @param[in] strict whether the input has to be consumed completely @param[in] ignore_comments whether comments should be ignored and treated like whitespace (true) or yield a parse error (true); (optional, false by default); only applies to the JSON file format. @return return value of the last processed SAX event @throw parse_error.101 if a parse error occurs; example: `""unexpected end of input; expected string literal""` @throw parse_error.102 if to_unicode fails or surrogate error @throw parse_error.103 if to_unicode fails @complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the SAX consumer @a sax has a super-linear complexity. @note A UTF-8 byte order mark is silently ignored. @liveexample{The example below demonstrates the `sax_parse()` function reading from string and processing the events with a user-defined SAX event consumer.,sax_parse} @since version 3.2.0 */ template JSON_HEDLEY_NON_NULL(2) static bool sax_parse(InputType&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false) { auto ia = detail::input_adapter(std::forward(i)); return format == input_format_t::json ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); } template JSON_HEDLEY_NON_NULL(3) static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false) { auto ia = detail::input_adapter(std::move(first), std::move(last)); return format == input_format_t::json ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); } template JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...)) JSON_HEDLEY_NON_NULL(2) static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false) { auto ia = i.get(); return format == input_format_t::json ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); } /*! @brief deserialize from stream @deprecated This stream operator is deprecated and will be removed in version 4.0.0 of the library. Please use @ref operator>>(std::istream&, basic_json&) instead; that is, replace calls like `j << i;` with `i >> j;`. @since version 1.0.0; deprecated since version 3.0.0 */ JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&)) friend std::istream& operator<<(basic_json& j, std::istream& i) { return operator>>(i, j); } /*! @brief deserialize from stream Deserializes an input stream to a JSON value. @param[in,out] i input stream to read a serialized JSON value from @param[in,out] j JSON value to write the deserialized input to @throw parse_error.101 in case of an unexpected token @throw parse_error.102 if to_unicode fails or surrogate error @throw parse_error.103 if to_unicode fails @complexity Linear in the length of the input. The parser is a predictive LL(1) parser. @note A UTF-8 byte order mark is silently ignored. @liveexample{The example below shows how a JSON value is constructed by reading a serialization from a stream.,operator_deserialize} @sa parse(std::istream&, const parser_callback_t) for a variant with a parser callback function to filter values while parsing @since version 1.0.0 */ friend std::istream& operator>>(std::istream& i, basic_json& j) { parser(detail::input_adapter(i)).parse(false, j); return i; } /// @} /////////////////////////// // convenience functions // /////////////////////////// /*! @brief return the type as string Returns the type name as string to be used in error messages - usually to indicate that a function was called on a wrong JSON type. @return a string representation of a the @a m_type member: Value type | return value ----------- | ------------- null | `"null"` boolean | `"boolean"` string | `"string"` number | `"number"` (for all number types) object | `"object"` array | `"array"` binary | `"binary"` discarded | `"discarded"` @exceptionsafety No-throw guarantee: this function never throws exceptions. @complexity Constant. @liveexample{The following code exemplifies `type_name()` for all JSON types.,type_name} @sa @ref type() -- return the type of the JSON value @sa @ref operator value_t() -- return the type of the JSON value (implicit) @since version 1.0.0, public since 2.1.0, `const char*` and `noexcept` since 3.0.0 */ JSON_HEDLEY_RETURNS_NON_NULL const char* type_name() const noexcept { { switch (m_type) { case value_t::null: return "null"; case value_t::object: return "object"; case value_t::array: return "array"; case value_t::string: return "string"; case value_t::boolean: return "boolean"; case value_t::binary: return "binary"; case value_t::discarded: return "discarded"; default: return "number"; } } } private: ////////////////////// // member variables // ////////////////////// /// the type of the current element value_t m_type = value_t::null; /// the value of the current element json_value m_value = {}; ////////////////////////////////////////// // binary serialization/deserialization // ////////////////////////////////////////// /// @name binary serialization/deserialization support /// @{ public: /*! @brief create a CBOR serialization of a given JSON value Serializes a given JSON value @a j to a byte vector using the CBOR (Concise Binary Object Representation) serialization format. CBOR is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse. The library uses the following mapping from JSON values types to CBOR types according to the CBOR specification (RFC 7049): JSON value type | value/range | CBOR type | first byte --------------- | ------------------------------------------ | ---------------------------------- | --------------- null | `null` | Null | 0xF6 boolean | `true` | True | 0xF5 boolean | `false` | False | 0xF4 number_integer | -9223372036854775808..-2147483649 | Negative integer (8 bytes follow) | 0x3B number_integer | -2147483648..-32769 | Negative integer (4 bytes follow) | 0x3A number_integer | -32768..-129 | Negative integer (2 bytes follow) | 0x39 number_integer | -128..-25 | Negative integer (1 byte follow) | 0x38 number_integer | -24..-1 | Negative integer | 0x20..0x37 number_integer | 0..23 | Integer | 0x00..0x17 number_integer | 24..255 | Unsigned integer (1 byte follow) | 0x18 number_integer | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 number_integer | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A number_integer | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B number_unsigned | 0..23 | Integer | 0x00..0x17 number_unsigned | 24..255 | Unsigned integer (1 byte follow) | 0x18 number_unsigned | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 number_unsigned | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A number_unsigned | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B number_float | *any value representable by a float* | Single-Precision Float | 0xFA number_float | *any value NOT representable by a float* | Double-Precision Float | 0xFB string | *length*: 0..23 | UTF-8 string | 0x60..0x77 string | *length*: 23..255 | UTF-8 string (1 byte follow) | 0x78 string | *length*: 256..65535 | UTF-8 string (2 bytes follow) | 0x79 string | *length*: 65536..4294967295 | UTF-8 string (4 bytes follow) | 0x7A string | *length*: 4294967296..18446744073709551615 | UTF-8 string (8 bytes follow) | 0x7B array | *size*: 0..23 | array | 0x80..0x97 array | *size*: 23..255 | array (1 byte follow) | 0x98 array | *size*: 256..65535 | array (2 bytes follow) | 0x99 array | *size*: 65536..4294967295 | array (4 bytes follow) | 0x9A array | *size*: 4294967296..18446744073709551615 | array (8 bytes follow) | 0x9B object | *size*: 0..23 | map | 0xA0..0xB7 object | *size*: 23..255 | map (1 byte follow) | 0xB8 object | *size*: 256..65535 | map (2 bytes follow) | 0xB9 object | *size*: 65536..4294967295 | map (4 bytes follow) | 0xBA object | *size*: 4294967296..18446744073709551615 | map (8 bytes follow) | 0xBB binary | *size*: 0..23 | byte string | 0x40..0x57 binary | *size*: 23..255 | byte string (1 byte follow) | 0x58 binary | *size*: 256..65535 | byte string (2 bytes follow) | 0x59 binary | *size*: 65536..4294967295 | byte string (4 bytes follow) | 0x5A binary | *size*: 4294967296..18446744073709551615 | byte string (8 bytes follow) | 0x5B @note The mapping is **complete** in the sense that any JSON value type can be converted to a CBOR value. @note If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the @ref dump() function which serializes NaN or Infinity to `null`. @note The following CBOR types are not used in the conversion: - UTF-8 strings terminated by "break" (0x7F) - arrays terminated by "break" (0x9F) - maps terminated by "break" (0xBF) - byte strings terminated by "break" (0x5F) - date/time (0xC0..0xC1) - bignum (0xC2..0xC3) - decimal fraction (0xC4) - bigfloat (0xC5) - expected conversions (0xD5..0xD7) - simple values (0xE0..0xF3, 0xF8) - undefined (0xF7) - half-precision floats (0xF9) - break (0xFF) @param[in] j JSON value to serialize @return CBOR serialization as byte vector @complexity Linear in the size of the JSON value @a j. @liveexample{The example shows the serialization of a JSON value to a byte vector in CBOR format.,to_cbor} @sa http://cbor.io @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the analogous deserialization @sa @ref to_msgpack(const basic_json&) for the related MessagePack format @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the related UBJSON format @since version 2.0.9; compact representation of floating-point numbers since version 3.8.0 */ static std::vector to_cbor(const basic_json& j) { std::vector result; to_cbor(j, result); return result; } static void to_cbor(const basic_json& j, detail::output_adapter o) { binary_writer(o).write_cbor(j); } static void to_cbor(const basic_json& j, detail::output_adapter o) { binary_writer(o).write_cbor(j); } /*! @brief create a MessagePack serialization of a given JSON value Serializes a given JSON value @a j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse. The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification: JSON value type | value/range | MessagePack type | first byte --------------- | --------------------------------- | ---------------- | ---------- null | `null` | nil | 0xC0 boolean | `true` | true | 0xC3 boolean | `false` | false | 0xC2 number_integer | -9223372036854775808..-2147483649 | int64 | 0xD3 number_integer | -2147483648..-32769 | int32 | 0xD2 number_integer | -32768..-129 | int16 | 0xD1 number_integer | -128..-33 | int8 | 0xD0 number_integer | -32..-1 | negative fixint | 0xE0..0xFF number_integer | 0..127 | positive fixint | 0x00..0x7F number_integer | 128..255 | uint 8 | 0xCC number_integer | 256..65535 | uint 16 | 0xCD number_integer | 65536..4294967295 | uint 32 | 0xCE number_integer | 4294967296..18446744073709551615 | uint 64 | 0xCF number_unsigned | 0..127 | positive fixint | 0x00..0x7F number_unsigned | 128..255 | uint 8 | 0xCC number_unsigned | 256..65535 | uint 16 | 0xCD number_unsigned | 65536..4294967295 | uint 32 | 0xCE number_unsigned | 4294967296..18446744073709551615 | uint 64 | 0xCF number_float | *any value representable by a float* | float 32 | 0xCA number_float | *any value NOT representable by a float* | float 64 | 0xCB string | *length*: 0..31 | fixstr | 0xA0..0xBF string | *length*: 32..255 | str 8 | 0xD9 string | *length*: 256..65535 | str 16 | 0xDA string | *length*: 65536..4294967295 | str 32 | 0xDB array | *size*: 0..15 | fixarray | 0x90..0x9F array | *size*: 16..65535 | array 16 | 0xDC array | *size*: 65536..4294967295 | array 32 | 0xDD object | *size*: 0..15 | fix map | 0x80..0x8F object | *size*: 16..65535 | map 16 | 0xDE object | *size*: 65536..4294967295 | map 32 | 0xDF binary | *size*: 0..255 | bin 8 | 0xC4 binary | *size*: 256..65535 | bin 16 | 0xC5 binary | *size*: 65536..4294967295 | bin 32 | 0xC6 @note The mapping is **complete** in the sense that any JSON value type can be converted to a MessagePack value. @note The following values can **not** be converted to a MessagePack value: - strings with more than 4294967295 bytes - byte strings with more than 4294967295 bytes - arrays with more than 4294967295 elements - objects with more than 4294967295 elements @note Any MessagePack output created @ref to_msgpack can be successfully parsed by @ref from_msgpack. @note If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the @ref dump() function which serializes NaN or Infinity to `null`. @param[in] j JSON value to serialize @return MessagePack serialization as byte vector @complexity Linear in the size of the JSON value @a j. @liveexample{The example shows the serialization of a JSON value to a byte vector in MessagePack format.,to_msgpack} @sa http://msgpack.org @sa @ref from_msgpack for the analogous deserialization @sa @ref to_cbor(const basic_json& for the related CBOR format @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the related UBJSON format @since version 2.0.9 */ static std::vector to_msgpack(const basic_json& j) { std::vector result; to_msgpack(j, result); return result; } static void to_msgpack(const basic_json& j, detail::output_adapter o) { binary_writer(o).write_msgpack(j); } static void to_msgpack(const basic_json& j, detail::output_adapter o) { binary_writer(o).write_msgpack(j); } /*! @brief create a UBJSON serialization of a given JSON value Serializes a given JSON value @a j to a byte vector using the UBJSON (Universal Binary JSON) serialization format. UBJSON aims to be more compact than JSON itself, yet more efficient to parse. The library uses the following mapping from JSON values types to UBJSON types according to the UBJSON specification: JSON value type | value/range | UBJSON type | marker --------------- | --------------------------------- | ----------- | ------ null | `null` | null | `Z` boolean | `true` | true | `T` boolean | `false` | false | `F` number_integer | -9223372036854775808..-2147483649 | int64 | `L` number_integer | -2147483648..-32769 | int32 | `l` number_integer | -32768..-129 | int16 | `I` number_integer | -128..127 | int8 | `i` number_integer | 128..255 | uint8 | `U` number_integer | 256..32767 | int16 | `I` number_integer | 32768..2147483647 | int32 | `l` number_integer | 2147483648..9223372036854775807 | int64 | `L` number_unsigned | 0..127 | int8 | `i` number_unsigned | 128..255 | uint8 | `U` number_unsigned | 256..32767 | int16 | `I` number_unsigned | 32768..2147483647 | int32 | `l` number_unsigned | 2147483648..9223372036854775807 | int64 | `L` number_unsigned | 2147483649..18446744073709551615 | high-precision | `H` number_float | *any value* | float64 | `D` string | *with shortest length indicator* | string | `S` array | *see notes on optimized format* | array | `[` object | *see notes on optimized format* | map | `{` @note The mapping is **complete** in the sense that any JSON value type can be converted to a UBJSON value. @note The following values can **not** be converted to a UBJSON value: - strings with more than 9223372036854775807 bytes (theoretical) @note The following markers are not used in the conversion: - `Z`: no-op values are not created. - `C`: single-byte strings are serialized with `S` markers. @note Any UBJSON output created @ref to_ubjson can be successfully parsed by @ref from_ubjson. @note If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the @ref dump() function which serializes NaN or Infinity to `null`. @note The optimized formats for containers are supported: Parameter @a use_size adds size information to the beginning of a container and removes the closing marker. Parameter @a use_type further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The @a use_type parameter must only be used together with @a use_size = true. Note that @a use_size = true alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container. @note If the JSON data contains the binary type, the value stored is a list of integers, as suggested by the UBJSON documentation. In particular, this means that serialization and the deserialization of a JSON containing binary values into UBJSON and back will result in a different JSON object. @param[in] j JSON value to serialize @param[in] use_size whether to add size annotations to container types @param[in] use_type whether to add type annotations to container types (must be combined with @a use_size = true) @return UBJSON serialization as byte vector @complexity Linear in the size of the JSON value @a j. @liveexample{The example shows the serialization of a JSON value to a byte vector in UBJSON format.,to_ubjson} @sa http://ubjson.org @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the analogous deserialization @sa @ref to_cbor(const basic_json& for the related CBOR format @sa @ref to_msgpack(const basic_json&) for the related MessagePack format @since version 3.1.0 */ static std::vector to_ubjson(const basic_json& j, const bool use_size = false, const bool use_type = false) { std::vector result; to_ubjson(j, result, use_size, use_type); return result; } static void to_ubjson(const basic_json& j, detail::output_adapter o, const bool use_size = false, const bool use_type = false) { binary_writer(o).write_ubjson(j, use_size, use_type); } static void to_ubjson(const basic_json& j, detail::output_adapter o, const bool use_size = false, const bool use_type = false) { binary_writer(o).write_ubjson(j, use_size, use_type); } /*! @brief Serializes the given JSON object `j` to BSON and returns a vector containing the corresponding BSON-representation. BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document). The library uses the following mapping from JSON values types to BSON types: JSON value type | value/range | BSON type | marker --------------- | --------------------------------- | ----------- | ------ null | `null` | null | 0x0A boolean | `true`, `false` | boolean | 0x08 number_integer | -9223372036854775808..-2147483649 | int64 | 0x12 number_integer | -2147483648..2147483647 | int32 | 0x10 number_integer | 2147483648..9223372036854775807 | int64 | 0x12 number_unsigned | 0..2147483647 | int32 | 0x10 number_unsigned | 2147483648..9223372036854775807 | int64 | 0x12 number_unsigned | 9223372036854775808..18446744073709551615| -- | -- number_float | *any value* | double | 0x01 string | *any value* | string | 0x02 array | *any value* | document | 0x04 object | *any value* | document | 0x03 binary | *any value* | binary | 0x05 @warning The mapping is **incomplete**, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, integers larger than 9223372036854775807 cannot be serialized to BSON, and the keys may not contain U+0000, since they are serialized a zero-terminated c-strings. @throw out_of_range.407 if `j.is_number_unsigned() && j.get() > 9223372036854775807` @throw out_of_range.409 if a key in `j` contains a NULL (U+0000) @throw type_error.317 if `!j.is_object()` @pre The input `j` is required to be an object: `j.is_object() == true`. @note Any BSON output created via @ref to_bson can be successfully parsed by @ref from_bson. @param[in] j JSON value to serialize @return BSON serialization as byte vector @complexity Linear in the size of the JSON value @a j. @liveexample{The example shows the serialization of a JSON value to a byte vector in BSON format.,to_bson} @sa http://bsonspec.org/spec.html @sa @ref from_bson(detail::input_adapter&&, const bool strict) for the analogous deserialization @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the related UBJSON format @sa @ref to_cbor(const basic_json&) for the related CBOR format @sa @ref to_msgpack(const basic_json&) for the related MessagePack format */ static std::vector to_bson(const basic_json& j) { std::vector result; to_bson(j, result); return result; } /*! @brief Serializes the given JSON object `j` to BSON and forwards the corresponding BSON-representation to the given output_adapter `o`. @param j The JSON object to convert to BSON. @param o The output adapter that receives the binary BSON representation. @pre The input `j` shall be an object: `j.is_object() == true` @sa @ref to_bson(const basic_json&) */ static void to_bson(const basic_json& j, detail::output_adapter o) { binary_writer(o).write_bson(j); } /*! @copydoc to_bson(const basic_json&, detail::output_adapter) */ static void to_bson(const basic_json& j, detail::output_adapter o) { binary_writer(o).write_bson(j); } /*! @brief create a JSON value from an input in CBOR format Deserializes a given input @a i to a JSON value using the CBOR (Concise Binary Object Representation) serialization format. The library maps CBOR types to JSON value types as follows: CBOR type | JSON value type | first byte ---------------------- | --------------- | ---------- Integer | number_unsigned | 0x00..0x17 Unsigned integer | number_unsigned | 0x18 Unsigned integer | number_unsigned | 0x19 Unsigned integer | number_unsigned | 0x1A Unsigned integer | number_unsigned | 0x1B Negative integer | number_integer | 0x20..0x37 Negative integer | number_integer | 0x38 Negative integer | number_integer | 0x39 Negative integer | number_integer | 0x3A Negative integer | number_integer | 0x3B Byte string | binary | 0x40..0x57 Byte string | binary | 0x58 Byte string | binary | 0x59 Byte string | binary | 0x5A Byte string | binary | 0x5B UTF-8 string | string | 0x60..0x77 UTF-8 string | string | 0x78 UTF-8 string | string | 0x79 UTF-8 string | string | 0x7A UTF-8 string | string | 0x7B UTF-8 string | string | 0x7F array | array | 0x80..0x97 array | array | 0x98 array | array | 0x99 array | array | 0x9A array | array | 0x9B array | array | 0x9F map | object | 0xA0..0xB7 map | object | 0xB8 map | object | 0xB9 map | object | 0xBA map | object | 0xBB map | object | 0xBF False | `false` | 0xF4 True | `true` | 0xF5 Null | `null` | 0xF6 Half-Precision Float | number_float | 0xF9 Single-Precision Float | number_float | 0xFA Double-Precision Float | number_float | 0xFB @warning The mapping is **incomplete** in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors (parse_error.112): - date/time (0xC0..0xC1) - bignum (0xC2..0xC3) - decimal fraction (0xC4) - bigfloat (0xC5) - expected conversions (0xD5..0xD7) - simple values (0xE0..0xF3, 0xF8) - undefined (0xF7) @warning CBOR allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected (parse_error.113). @note Any CBOR output created @ref to_cbor can be successfully parsed by @ref from_cbor. @param[in] i an input in CBOR format convertible to an input adapter @param[in] strict whether to expect the input to be consumed until EOF (true by default) @param[in] allow_exceptions whether to throw exceptions in case of a parse error (optional, true by default) @param[in] tag_handler how to treat CBOR tags (optional, error by default) @return deserialized JSON value; in case of a parse error and @a allow_exceptions set to `false`, the return value will be value_t::discarded. @throw parse_error.110 if the given input ends prematurely or the end of file was not reached when @a strict was set to true @throw parse_error.112 if unsupported features from CBOR were used in the given input @a v or if the input is not valid CBOR @throw parse_error.113 if a string was expected as map key, but not found @complexity Linear in the size of the input @a i. @liveexample{The example shows the deserialization of a byte vector in CBOR format to a JSON value.,from_cbor} @sa http://cbor.io @sa @ref to_cbor(const basic_json&) for the analogous serialization @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for the related MessagePack format @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the related UBJSON format @since version 2.0.9; parameter @a start_index since 2.1.1; changed to consume input adapters, removed start_index parameter, and added @a strict parameter since 3.0.0; added @a allow_exceptions parameter since 3.2.0; added @a tag_handler parameter since 3.9.0. */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(InputType&& i, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::forward(i)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::move(first), std::move(last)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); return res ? result : basic_json(value_t::discarded); } template JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) static basic_json from_cbor(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) { return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler); } JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) static basic_json from_cbor(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = i.get(); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); return res ? result : basic_json(value_t::discarded); } /*! @brief create a JSON value from an input in MessagePack format Deserializes a given input @a i to a JSON value using the MessagePack serialization format. The library maps MessagePack types to JSON value types as follows: MessagePack type | JSON value type | first byte ---------------- | --------------- | ---------- positive fixint | number_unsigned | 0x00..0x7F fixmap | object | 0x80..0x8F fixarray | array | 0x90..0x9F fixstr | string | 0xA0..0xBF nil | `null` | 0xC0 false | `false` | 0xC2 true | `true` | 0xC3 float 32 | number_float | 0xCA float 64 | number_float | 0xCB uint 8 | number_unsigned | 0xCC uint 16 | number_unsigned | 0xCD uint 32 | number_unsigned | 0xCE uint 64 | number_unsigned | 0xCF int 8 | number_integer | 0xD0 int 16 | number_integer | 0xD1 int 32 | number_integer | 0xD2 int 64 | number_integer | 0xD3 str 8 | string | 0xD9 str 16 | string | 0xDA str 32 | string | 0xDB array 16 | array | 0xDC array 32 | array | 0xDD map 16 | object | 0xDE map 32 | object | 0xDF bin 8 | binary | 0xC4 bin 16 | binary | 0xC5 bin 32 | binary | 0xC6 ext 8 | binary | 0xC7 ext 16 | binary | 0xC8 ext 32 | binary | 0xC9 fixext 1 | binary | 0xD4 fixext 2 | binary | 0xD5 fixext 4 | binary | 0xD6 fixext 8 | binary | 0xD7 fixext 16 | binary | 0xD8 negative fixint | number_integer | 0xE0-0xFF @note Any MessagePack output created @ref to_msgpack can be successfully parsed by @ref from_msgpack. @param[in] i an input in MessagePack format convertible to an input adapter @param[in] strict whether to expect the input to be consumed until EOF (true by default) @param[in] allow_exceptions whether to throw exceptions in case of a parse error (optional, true by default) @return deserialized JSON value; in case of a parse error and @a allow_exceptions set to `false`, the return value will be value_t::discarded. @throw parse_error.110 if the given input ends prematurely or the end of file was not reached when @a strict was set to true @throw parse_error.112 if unsupported features from MessagePack were used in the given input @a i or if the input is not valid MessagePack @throw parse_error.113 if a string was expected as map key, but not found @complexity Linear in the size of the input @a i. @liveexample{The example shows the deserialization of a byte vector in MessagePack format to a JSON value.,from_msgpack} @sa http://msgpack.org @sa @ref to_msgpack(const basic_json&) for the analogous serialization @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the related CBOR format @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the related UBJSON format @sa @ref from_bson(detail::input_adapter&&, const bool, const bool) for the related BSON format @since version 2.0.9; parameter @a start_index since 2.1.1; changed to consume input adapters, removed start_index parameter, and added @a strict parameter since 3.0.0; added @a allow_exceptions parameter since 3.2.0 */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(InputType&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::forward(i)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_msgpack(detail::input_adapter&&, const bool, const bool) */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::move(first), std::move(last)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); return res ? result : basic_json(value_t::discarded); } template JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) static basic_json from_msgpack(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true) { return from_msgpack(ptr, ptr + len, strict, allow_exceptions); } JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) static basic_json from_msgpack(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = i.get(); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @brief create a JSON value from an input in UBJSON format Deserializes a given input @a i to a JSON value using the UBJSON (Universal Binary JSON) serialization format. The library maps UBJSON types to JSON value types as follows: UBJSON type | JSON value type | marker ----------- | --------------------------------------- | ------ no-op | *no value, next value is read* | `N` null | `null` | `Z` false | `false` | `F` true | `true` | `T` float32 | number_float | `d` float64 | number_float | `D` uint8 | number_unsigned | `U` int8 | number_integer | `i` int16 | number_integer | `I` int32 | number_integer | `l` int64 | number_integer | `L` high-precision number | number_integer, number_unsigned, or number_float - depends on number string | 'H' string | string | `S` char | string | `C` array | array (optimized values are supported) | `[` object | object (optimized values are supported) | `{` @note The mapping is **complete** in the sense that any UBJSON value can be converted to a JSON value. @param[in] i an input in UBJSON format convertible to an input adapter @param[in] strict whether to expect the input to be consumed until EOF (true by default) @param[in] allow_exceptions whether to throw exceptions in case of a parse error (optional, true by default) @return deserialized JSON value; in case of a parse error and @a allow_exceptions set to `false`, the return value will be value_t::discarded. @throw parse_error.110 if the given input ends prematurely or the end of file was not reached when @a strict was set to true @throw parse_error.112 if a parse error occurs @throw parse_error.113 if a string could not be parsed successfully @complexity Linear in the size of the input @a i. @liveexample{The example shows the deserialization of a byte vector in UBJSON format to a JSON value.,from_ubjson} @sa http://ubjson.org @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the analogous serialization @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the related CBOR format @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for the related MessagePack format @sa @ref from_bson(detail::input_adapter&&, const bool, const bool) for the related BSON format @since version 3.1.0; added @a allow_exceptions parameter since 3.2.0 */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(InputType&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::forward(i)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_ubjson(detail::input_adapter&&, const bool, const bool) */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::move(first), std::move(last)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } template JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) static basic_json from_ubjson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true) { return from_ubjson(ptr, ptr + len, strict, allow_exceptions); } JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) static basic_json from_ubjson(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = i.get(); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @brief Create a JSON value from an input in BSON format Deserializes a given input @a i to a JSON value using the BSON (Binary JSON) serialization format. The library maps BSON record types to JSON value types as follows: BSON type | BSON marker byte | JSON value type --------------- | ---------------- | --------------------------- double | 0x01 | number_float string | 0x02 | string document | 0x03 | object array | 0x04 | array binary | 0x05 | still unsupported undefined | 0x06 | still unsupported ObjectId | 0x07 | still unsupported boolean | 0x08 | boolean UTC Date-Time | 0x09 | still unsupported null | 0x0A | null Regular Expr. | 0x0B | still unsupported DB Pointer | 0x0C | still unsupported JavaScript Code | 0x0D | still unsupported Symbol | 0x0E | still unsupported JavaScript Code | 0x0F | still unsupported int32 | 0x10 | number_integer Timestamp | 0x11 | still unsupported 128-bit decimal float | 0x13 | still unsupported Max Key | 0x7F | still unsupported Min Key | 0xFF | still unsupported @warning The mapping is **incomplete**. The unsupported mappings are indicated in the table above. @param[in] i an input in BSON format convertible to an input adapter @param[in] strict whether to expect the input to be consumed until EOF (true by default) @param[in] allow_exceptions whether to throw exceptions in case of a parse error (optional, true by default) @return deserialized JSON value; in case of a parse error and @a allow_exceptions set to `false`, the return value will be value_t::discarded. @throw parse_error.114 if an unsupported BSON record type is encountered @complexity Linear in the size of the input @a i. @liveexample{The example shows the deserialization of a byte vector in BSON format to a JSON value.,from_bson} @sa http://bsonspec.org/spec.html @sa @ref to_bson(const basic_json&) for the analogous serialization @sa @ref from_cbor(detail::input_adapter&&, const bool, const bool, const cbor_tag_handler_t) for the related CBOR format @sa @ref from_msgpack(detail::input_adapter&&, const bool, const bool) for the related MessagePack format @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the related UBJSON format */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(InputType&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::forward(i)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_bson(detail::input_adapter&&, const bool, const bool) */ template JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = detail::input_adapter(std::move(first), std::move(last)); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } template JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) static basic_json from_bson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true) { return from_bson(ptr, ptr + len, strict, allow_exceptions); } JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) static basic_json from_bson(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); auto ia = i.get(); const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /// @} ////////////////////////// // JSON Pointer support // ////////////////////////// /// @name JSON Pointer functions /// @{ /*! @brief access specified element via JSON Pointer Uses a JSON pointer to retrieve a reference to the respective JSON value. No bound checking is performed. Similar to @ref operator[](const typename object_t::key_type&), `null` values are created in arrays and objects if necessary. In particular: - If the JSON pointer points to an object key that does not exist, it is created an filled with a `null` value before a reference to it is returned. - If the JSON pointer points to an array index that does not exist, it is created an filled with a `null` value before a reference to it is returned. All indices between the current maximum and the given index are also filled with `null`. - The special value `-` is treated as a synonym for the index past the end. @param[in] ptr a JSON pointer @return reference to the element pointed to by @a ptr @complexity Constant. @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.404 if the JSON pointer can not be resolved @liveexample{The behavior is shown in the example.,operatorjson_pointer} @since version 2.0.0 */ reference operator[](const json_pointer& ptr) { return ptr.get_unchecked(this); } /*! @brief access specified element via JSON Pointer Uses a JSON pointer to retrieve a reference to the respective JSON value. No bound checking is performed. The function does not change the JSON value; no `null` values are created. In particular, the special value `-` yields an exception. @param[in] ptr JSON pointer to the desired element @return const reference to the element pointed to by @a ptr @complexity Constant. @throw parse_error.106 if an array index begins with '0' @throw parse_error.109 if an array index was not a number @throw out_of_range.402 if the array index '-' is used @throw out_of_range.404 if the JSON pointer can not be resolved @liveexample{The behavior is shown in the example.,operatorjson_pointer_const} @since version 2.0.0 */ const_reference operator[](const json_pointer& ptr) const { return ptr.get_unchecked(this); } /*! @brief access specified element via JSON Pointer Returns a reference to the element at with specified JSON pointer @a ptr, with bounds checking. @param[in] ptr JSON pointer to the desired element @return reference to the element pointed to by @a ptr @throw parse_error.106 if an array index in the passed JSON pointer @a ptr begins with '0'. See example below. @throw parse_error.109 if an array index in the passed JSON pointer @a ptr is not a number. See example below. @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr is out of range. See example below. @throw out_of_range.402 if the array index '-' is used in the passed JSON pointer @a ptr. As `at` provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below. @throw out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below. @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. See example below. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Constant. @since version 2.0.0 @liveexample{The behavior is shown in the example.,at_json_pointer} */ reference at(const json_pointer& ptr) { return ptr.get_checked(this); } /*! @brief access specified element via JSON Pointer Returns a const reference to the element at with specified JSON pointer @a ptr, with bounds checking. @param[in] ptr JSON pointer to the desired element @return reference to the element pointed to by @a ptr @throw parse_error.106 if an array index in the passed JSON pointer @a ptr begins with '0'. See example below. @throw parse_error.109 if an array index in the passed JSON pointer @a ptr is not a number. See example below. @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr is out of range. See example below. @throw out_of_range.402 if the array index '-' is used in the passed JSON pointer @a ptr. As `at` provides checked access (and no elements are implicitly inserted), the index '-' is always invalid. See example below. @throw out_of_range.403 if the JSON pointer describes a key of an object which cannot be found. See example below. @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. See example below. @exceptionsafety Strong guarantee: if an exception is thrown, there are no changes in the JSON value. @complexity Constant. @since version 2.0.0 @liveexample{The behavior is shown in the example.,at_json_pointer_const} */ const_reference at(const json_pointer& ptr) const { return ptr.get_checked(this); } /*! @brief return flattened JSON value The function creates a JSON object whose keys are JSON pointers (see [RFC 6901](https://tools.ietf.org/html/rfc6901)) and whose values are all primitive. The original JSON value can be restored using the @ref unflatten() function. @return an object that maps JSON pointers to primitive values @note Empty objects and arrays are flattened to `null` and will not be reconstructed correctly by the @ref unflatten() function. @complexity Linear in the size the JSON value. @liveexample{The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.,flatten} @sa @ref unflatten() for the reverse function @since version 2.0.0 */ basic_json flatten() const { basic_json result(value_t::object); json_pointer::flatten("", *this, result); return result; } /*! @brief unflatten a previously flattened JSON value The function restores the arbitrary nesting of a JSON value that has been flattened before using the @ref flatten() function. The JSON value must meet certain constraints: 1. The value must be an object. 2. The keys must be JSON pointers (see [RFC 6901](https://tools.ietf.org/html/rfc6901)) 3. The mapped values must be primitive JSON types. @return the original JSON from a flattened version @note Empty objects and arrays are flattened by @ref flatten() to `null` values and can not unflattened to their original type. Apart from this example, for a JSON value `j`, the following is always true: `j == j.flatten().unflatten()`. @complexity Linear in the size the JSON value. @throw type_error.314 if value is not an object @throw type_error.315 if object values are not primitive @liveexample{The following code shows how a flattened JSON object is unflattened into the original nested JSON object.,unflatten} @sa @ref flatten() for the reverse function @since version 2.0.0 */ basic_json unflatten() const { return json_pointer::unflatten(*this); } /// @} ////////////////////////// // JSON Patch functions // ////////////////////////// /// @name JSON Patch functions /// @{ /*! @brief applies a JSON patch [JSON Patch](http://jsonpatch.com) defines a JSON document structure for expressing a sequence of operations to apply to a JSON) document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. @param[in] json_patch JSON patch document @return patched document @note The application of a patch is atomic: Either all operations succeed and the patched document is returned or an exception is thrown. In any case, the original value is not changed: the patch is applied to a copy of the value. @throw parse_error.104 if the JSON patch does not consist of an array of objects @throw parse_error.105 if the JSON patch is malformed (e.g., mandatory attributes are missing); example: `"operation add must have member path"` @throw out_of_range.401 if an array index is out of range. @throw out_of_range.403 if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example: `"key baz not found"` @throw out_of_range.405 if JSON pointer has no parent ("add", "remove", "move") @throw other_error.501 if "test" operation was unsuccessful @complexity Linear in the size of the JSON value and the length of the JSON patch. As usually only a fraction of the JSON value is affected by the patch, the complexity can usually be neglected. @liveexample{The following code shows how a JSON patch is applied to a value.,patch} @sa @ref diff -- create a JSON patch by comparing two JSON values @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) @sa [RFC 6901 (JSON Pointer)](https://tools.ietf.org/html/rfc6901) @since version 2.0.0 */ basic_json patch(const basic_json& json_patch) const { // make a working copy to apply the patch to basic_json result = *this; // the valid JSON Patch operations enum class patch_operations {add, remove, replace, move, copy, test, invalid}; const auto get_op = [](const std::string & op) { if (op == "add") { return patch_operations::add; } if (op == "remove") { return patch_operations::remove; } if (op == "replace") { return patch_operations::replace; } if (op == "move") { return patch_operations::move; } if (op == "copy") { return patch_operations::copy; } if (op == "test") { return patch_operations::test; } return patch_operations::invalid; }; // wrapper for "add" operation; add value at ptr const auto operation_add = [&result](json_pointer & ptr, basic_json val) { // adding to the root of the target document means replacing it if (ptr.empty()) { result = val; return; } // make sure the top element of the pointer exists json_pointer top_pointer = ptr.top(); if (top_pointer != ptr) { result.at(top_pointer); } // get reference to parent of JSON pointer ptr const auto last_path = ptr.back(); ptr.pop_back(); basic_json& parent = result[ptr]; switch (parent.m_type) { case value_t::null: case value_t::object: { // use operator[] to add value parent[last_path] = val; break; } case value_t::array: { if (last_path == "-") { // special case: append to back parent.push_back(val); } else { const auto idx = json_pointer::array_index(last_path); if (JSON_HEDLEY_UNLIKELY(idx > parent.size())) { // avoid undefined behavior JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); } // default case: insert add offset parent.insert(parent.begin() + static_cast(idx), val); } break; } // if there exists a parent it cannot be primitive default: // LCOV_EXCL_LINE JSON_ASSERT(false); // LCOV_EXCL_LINE } }; // wrapper for "remove" operation; remove value at ptr const auto operation_remove = [&result](json_pointer & ptr) { // get reference to parent of JSON pointer ptr const auto last_path = ptr.back(); ptr.pop_back(); basic_json& parent = result.at(ptr); // remove child if (parent.is_object()) { // perform range check auto it = parent.find(last_path); if (JSON_HEDLEY_LIKELY(it != parent.end())) { parent.erase(it); } else { JSON_THROW(out_of_range::create(403, "key '" + last_path + "' not found")); } } else if (parent.is_array()) { // note erase performs range check parent.erase(json_pointer::array_index(last_path)); } }; // type check: top level value must be an array if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array())) { JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); } // iterate and apply the operations for (const auto& val : json_patch) { // wrapper to get a value for an operation const auto get_value = [&val](const std::string & op, const std::string & member, bool string_type) -> basic_json & { // find value auto it = val.m_value.object->find(member); // context-sensitive error message const auto error_msg = (op == "op") ? "operation" : "operation '" + op + "'"; // check if desired value is present if (JSON_HEDLEY_UNLIKELY(it == val.m_value.object->end())) { JSON_THROW(parse_error::create(105, 0, error_msg + " must have member '" + member + "'")); } // check if result is of type string if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string())) { JSON_THROW(parse_error::create(105, 0, error_msg + " must have string member '" + member + "'")); } // no error: return value return it->second; }; // type check: every element of the array must be an object if (JSON_HEDLEY_UNLIKELY(!val.is_object())) { JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); } // collect mandatory members const auto op = get_value("op", "op", true).template get(); const auto path = get_value(op, "path", true).template get(); json_pointer ptr(path); switch (get_op(op)) { case patch_operations::add: { operation_add(ptr, get_value("add", "value", false)); break; } case patch_operations::remove: { operation_remove(ptr); break; } case patch_operations::replace: { // the "path" location must exist - use at() result.at(ptr) = get_value("replace", "value", false); break; } case patch_operations::move: { const auto from_path = get_value("move", "from", true).template get(); json_pointer from_ptr(from_path); // the "from" location must exist - use at() basic_json v = result.at(from_ptr); // The move operation is functionally identical to a // "remove" operation on the "from" location, followed // immediately by an "add" operation at the target // location with the value that was just removed. operation_remove(from_ptr); operation_add(ptr, v); break; } case patch_operations::copy: { const auto from_path = get_value("copy", "from", true).template get(); const json_pointer from_ptr(from_path); // the "from" location must exist - use at() basic_json v = result.at(from_ptr); // The copy is functionally identical to an "add" // operation at the target location using the value // specified in the "from" member. operation_add(ptr, v); break; } case patch_operations::test: { bool success = false; JSON_TRY { // check if "value" matches the one at "path" // the "path" location must exist - use at() success = (result.at(ptr) == get_value("test", "value", false)); } JSON_INTERNAL_CATCH (out_of_range&) { // ignore out of range errors: success remains false } // throw an exception if test fails if (JSON_HEDLEY_UNLIKELY(!success)) { JSON_THROW(other_error::create(501, "unsuccessful: " + val.dump())); } break; } default: { // op must be "add", "remove", "replace", "move", "copy", or // "test" JSON_THROW(parse_error::create(105, 0, "operation value '" + op + "' is invalid")); } } } return result; } /*! @brief creates a diff as a JSON patch Creates a [JSON Patch](http://jsonpatch.com) so that value @a source can be changed into the value @a target by calling @ref patch function. @invariant For two JSON values @a source and @a target, the following code yields always `true`: @code {.cpp} source.patch(diff(source, target)) == target; @endcode @note Currently, only `remove`, `add`, and `replace` operations are generated. @param[in] source JSON value to compare from @param[in] target JSON value to compare against @param[in] path helper value to create JSON pointers @return a JSON patch to convert the @a source to @a target @complexity Linear in the lengths of @a source and @a target. @liveexample{The following code shows how a JSON patch is created as a diff for two JSON values.,diff} @sa @ref patch -- apply a JSON patch @sa @ref merge_patch -- apply a JSON Merge Patch @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) @since version 2.0.0 */ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json diff(const basic_json& source, const basic_json& target, const std::string& path = "") { // the patch basic_json result(value_t::array); // if the values are the same, return empty patch if (source == target) { return result; } if (source.type() != target.type()) { // different types: replace value result.push_back( { {"op", "replace"}, {"path", path}, {"value", target} }); return result; } switch (source.type()) { case value_t::array: { // first pass: traverse common elements std::size_t i = 0; while (i < source.size() && i < target.size()) { // recursive call to compare array values at index i auto temp_diff = diff(source[i], target[i], path + "/" + std::to_string(i)); result.insert(result.end(), temp_diff.begin(), temp_diff.end()); ++i; } // i now reached the end of at least one array // in a second pass, traverse the remaining elements // remove my remaining elements const auto end_index = static_cast(result.size()); while (i < source.size()) { // add operations in reverse order to avoid invalid // indices result.insert(result.begin() + end_index, object( { {"op", "remove"}, {"path", path + "/" + std::to_string(i)} })); ++i; } // add other remaining elements while (i < target.size()) { result.push_back( { {"op", "add"}, {"path", path + "/-"}, {"value", target[i]} }); ++i; } break; } case value_t::object: { // first pass: traverse this object's elements for (auto it = source.cbegin(); it != source.cend(); ++it) { // escape the key name to be used in a JSON patch const auto key = json_pointer::escape(it.key()); if (target.find(it.key()) != target.end()) { // recursive call to compare object values at key it auto temp_diff = diff(it.value(), target[it.key()], path + "/" + key); result.insert(result.end(), temp_diff.begin(), temp_diff.end()); } else { // found a key that is not in o -> remove it result.push_back(object( { {"op", "remove"}, {"path", path + "/" + key} })); } } // second pass: traverse other object's elements for (auto it = target.cbegin(); it != target.cend(); ++it) { if (source.find(it.key()) == source.end()) { // found a key that is not in this -> add it const auto key = json_pointer::escape(it.key()); result.push_back( { {"op", "add"}, {"path", path + "/" + key}, {"value", it.value()} }); } } break; } default: { // both primitive type: replace value result.push_back( { {"op", "replace"}, {"path", path}, {"value", target} }); break; } } return result; } /// @} //////////////////////////////// // JSON Merge Patch functions // //////////////////////////////// /// @name JSON Merge Patch functions /// @{ /*! @brief applies a JSON Merge Patch The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content. This function applies a merge patch to the current JSON value. The function implements the following algorithm from Section 2 of [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396): ``` define MergePatch(Target, Patch): if Patch is an Object: if Target is not an Object: Target = {} // Ignore the contents and set it to an empty Object for each Name/Value pair in Patch: if Value is null: if Name exists in Target: remove the Name/Value pair from Target else: Target[Name] = MergePatch(Target[Name], Value) return Target else: return Patch ``` Thereby, `Target` is the current object; that is, the patch is applied to the current value. @param[in] apply_patch the patch to apply @complexity Linear in the lengths of @a patch. @liveexample{The following code shows how a JSON Merge Patch is applied to a JSON document.,merge_patch} @sa @ref patch -- apply a JSON patch @sa [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396) @since version 3.0.0 */ void merge_patch(const basic_json& apply_patch) { if (apply_patch.is_object()) { if (!is_object()) { *this = object(); } for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it) { if (it.value().is_null()) { erase(it.key()); } else { operator[](it.key()).merge_patch(it.value()); } } } else { *this = apply_patch; } } /// @} }; /*! @brief user-defined to_string function for JSON values This function implements a user-defined to_string for JSON objects. @param[in] j a JSON object @return a std::string object */ NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j) { return j.dump(); } } // namespace nlohmann /////////////////////// // nonmember support // /////////////////////// // specialization of std::swap, and std::hash namespace std { /// hash value for JSON objects template<> struct hash { /*! @brief return a hash value for a JSON object @since version 1.0.0 */ std::size_t operator()(const nlohmann::json& j) const { return nlohmann::detail::hash(j); } }; /// specialization for std::less /// @note: do not remove the space after '<', /// see https://github.com/nlohmann/json/pull/679 template<> struct less<::nlohmann::detail::value_t> { /*! @brief compare two value_t enum values @since version 3.0.0 */ bool operator()(nlohmann::detail::value_t lhs, nlohmann::detail::value_t rhs) const noexcept { return nlohmann::detail::operator<(lhs, rhs); } }; // C++20 prohibit function specialization in the std namespace. #ifndef JSON_HAS_CPP_20 /*! @brief exchanges the values of two JSON objects @since version 1.0.0 */ template<> inline void swap(nlohmann::json& j1, nlohmann::json& j2) noexcept( is_nothrow_move_constructible::value&& is_nothrow_move_assignable::value ) { j1.swap(j2); } #endif } // namespace std /*! @brief user-defined string literal for JSON values This operator implements a user-defined string literal for JSON objects. It can be used by adding `"_json"` to a string literal and returns a JSON object if no parse error occurred. @param[in] s a string representation of a JSON object @param[in] n the length of string @a s @return a JSON object @since version 1.0.0 */ JSON_HEDLEY_NON_NULL(1) inline nlohmann::json operator "" _json(const char* s, std::size_t n) { return nlohmann::json::parse(s, s + n); } /*! @brief user-defined string literal for JSON pointer This operator implements a user-defined string literal for JSON Pointers. It can be used by adding `"_json_pointer"` to a string literal and returns a JSON pointer object if no parse error occurred. @param[in] s a string representation of a JSON Pointer @param[in] n the length of string @a s @return a JSON pointer object @since version 2.0.0 */ JSON_HEDLEY_NON_NULL(1) inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n) { return nlohmann::json::json_pointer(std::string(s, n)); } // #include // restore GCC/clang diagnostic settings #if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) #pragma GCC diagnostic pop #endif #if defined(__clang__) #pragma GCC diagnostic pop #endif // clean up #undef JSON_ASSERT #undef JSON_INTERNAL_CATCH #undef JSON_CATCH #undef JSON_THROW #undef JSON_TRY #undef JSON_HAS_CPP_14 #undef JSON_HAS_CPP_17 #undef NLOHMANN_BASIC_JSON_TPL_DECLARATION #undef NLOHMANN_BASIC_JSON_TPL #undef JSON_EXPLICIT // #include #undef JSON_HEDLEY_ALWAYS_INLINE #undef JSON_HEDLEY_ARM_VERSION #undef JSON_HEDLEY_ARM_VERSION_CHECK #undef JSON_HEDLEY_ARRAY_PARAM #undef JSON_HEDLEY_ASSUME #undef JSON_HEDLEY_BEGIN_C_DECLS #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE #undef JSON_HEDLEY_CLANG_HAS_BUILTIN #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE #undef JSON_HEDLEY_CLANG_HAS_EXTENSION #undef JSON_HEDLEY_CLANG_HAS_FEATURE #undef JSON_HEDLEY_CLANG_HAS_WARNING #undef JSON_HEDLEY_COMPCERT_VERSION #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK #undef JSON_HEDLEY_CONCAT #undef JSON_HEDLEY_CONCAT3 #undef JSON_HEDLEY_CONCAT3_EX #undef JSON_HEDLEY_CONCAT_EX #undef JSON_HEDLEY_CONST #undef JSON_HEDLEY_CONSTEXPR #undef JSON_HEDLEY_CONST_CAST #undef JSON_HEDLEY_CPP_CAST #undef JSON_HEDLEY_CRAY_VERSION #undef JSON_HEDLEY_CRAY_VERSION_CHECK #undef JSON_HEDLEY_C_DECL #undef JSON_HEDLEY_DEPRECATED #undef JSON_HEDLEY_DEPRECATED_FOR #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS #undef JSON_HEDLEY_DIAGNOSTIC_POP #undef JSON_HEDLEY_DIAGNOSTIC_PUSH #undef JSON_HEDLEY_DMC_VERSION #undef JSON_HEDLEY_DMC_VERSION_CHECK #undef JSON_HEDLEY_EMPTY_BASES #undef JSON_HEDLEY_EMSCRIPTEN_VERSION #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK #undef JSON_HEDLEY_END_C_DECLS #undef JSON_HEDLEY_FLAGS #undef JSON_HEDLEY_FLAGS_CAST #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE #undef JSON_HEDLEY_GCC_HAS_BUILTIN #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE #undef JSON_HEDLEY_GCC_HAS_EXTENSION #undef JSON_HEDLEY_GCC_HAS_FEATURE #undef JSON_HEDLEY_GCC_HAS_WARNING #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK #undef JSON_HEDLEY_GCC_VERSION #undef JSON_HEDLEY_GCC_VERSION_CHECK #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE #undef JSON_HEDLEY_GNUC_HAS_BUILTIN #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE #undef JSON_HEDLEY_GNUC_HAS_EXTENSION #undef JSON_HEDLEY_GNUC_HAS_FEATURE #undef JSON_HEDLEY_GNUC_HAS_WARNING #undef JSON_HEDLEY_GNUC_VERSION #undef JSON_HEDLEY_GNUC_VERSION_CHECK #undef JSON_HEDLEY_HAS_ATTRIBUTE #undef JSON_HEDLEY_HAS_BUILTIN #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE #undef JSON_HEDLEY_HAS_EXTENSION #undef JSON_HEDLEY_HAS_FEATURE #undef JSON_HEDLEY_HAS_WARNING #undef JSON_HEDLEY_IAR_VERSION #undef JSON_HEDLEY_IAR_VERSION_CHECK #undef JSON_HEDLEY_IBM_VERSION #undef JSON_HEDLEY_IBM_VERSION_CHECK #undef JSON_HEDLEY_IMPORT #undef JSON_HEDLEY_INLINE #undef JSON_HEDLEY_INTEL_VERSION #undef JSON_HEDLEY_INTEL_VERSION_CHECK #undef JSON_HEDLEY_IS_CONSTANT #undef JSON_HEDLEY_IS_CONSTEXPR_ #undef JSON_HEDLEY_LIKELY #undef JSON_HEDLEY_MALLOC #undef JSON_HEDLEY_MESSAGE #undef JSON_HEDLEY_MSVC_VERSION #undef JSON_HEDLEY_MSVC_VERSION_CHECK #undef JSON_HEDLEY_NEVER_INLINE #undef JSON_HEDLEY_NON_NULL #undef JSON_HEDLEY_NO_ESCAPE #undef JSON_HEDLEY_NO_RETURN #undef JSON_HEDLEY_NO_THROW #undef JSON_HEDLEY_NULL #undef JSON_HEDLEY_PELLES_VERSION #undef JSON_HEDLEY_PELLES_VERSION_CHECK #undef JSON_HEDLEY_PGI_VERSION #undef JSON_HEDLEY_PGI_VERSION_CHECK #undef JSON_HEDLEY_PREDICT #undef JSON_HEDLEY_PRINTF_FORMAT #undef JSON_HEDLEY_PRIVATE #undef JSON_HEDLEY_PUBLIC #undef JSON_HEDLEY_PURE #undef JSON_HEDLEY_REINTERPRET_CAST #undef JSON_HEDLEY_REQUIRE #undef JSON_HEDLEY_REQUIRE_CONSTEXPR #undef JSON_HEDLEY_REQUIRE_MSG #undef JSON_HEDLEY_RESTRICT #undef JSON_HEDLEY_RETURNS_NON_NULL #undef JSON_HEDLEY_SENTINEL #undef JSON_HEDLEY_STATIC_ASSERT #undef JSON_HEDLEY_STATIC_CAST #undef JSON_HEDLEY_STRINGIFY #undef JSON_HEDLEY_STRINGIFY_EX #undef JSON_HEDLEY_SUNPRO_VERSION #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK #undef JSON_HEDLEY_TINYC_VERSION #undef JSON_HEDLEY_TINYC_VERSION_CHECK #undef JSON_HEDLEY_TI_ARMCL_VERSION #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK #undef JSON_HEDLEY_TI_CL2000_VERSION #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK #undef JSON_HEDLEY_TI_CL430_VERSION #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK #undef JSON_HEDLEY_TI_CL6X_VERSION #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK #undef JSON_HEDLEY_TI_CL7X_VERSION #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK #undef JSON_HEDLEY_TI_CLPRU_VERSION #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK #undef JSON_HEDLEY_TI_VERSION #undef JSON_HEDLEY_TI_VERSION_CHECK #undef JSON_HEDLEY_UNAVAILABLE #undef JSON_HEDLEY_UNLIKELY #undef JSON_HEDLEY_UNPREDICTABLE #undef JSON_HEDLEY_UNREACHABLE #undef JSON_HEDLEY_UNREACHABLE_RETURN #undef JSON_HEDLEY_VERSION #undef JSON_HEDLEY_VERSION_DECODE_MAJOR #undef JSON_HEDLEY_VERSION_DECODE_MINOR #undef JSON_HEDLEY_VERSION_DECODE_REVISION #undef JSON_HEDLEY_VERSION_ENCODE #undef JSON_HEDLEY_WARNING #undef JSON_HEDLEY_WARN_UNUSED_RESULT #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG #undef JSON_HEDLEY_FALL_THROUGH #endif // INCLUDE_NLOHMANN_JSON_HPP_ proj-9.6.0/include/proj/io.hpp000664 001754 001755 00000145331 14764566077 016145 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef IO_HH_INCLUDED #define IO_HH_INCLUDED #include #include #include #include #include #include #include "proj.h" #include "util.hpp" NS_PROJ_START class CPLJSonStreamingWriter; namespace common { class UnitOfMeasure; using UnitOfMeasurePtr = std::shared_ptr; using UnitOfMeasureNNPtr = util::nn; class IdentifiedObject; using IdentifiedObjectPtr = std::shared_ptr; using IdentifiedObjectNNPtr = util::nn; } // namespace common namespace cs { class CoordinateSystem; using CoordinateSystemPtr = std::shared_ptr; using CoordinateSystemNNPtr = util::nn; } // namespace cs namespace metadata { class Extent; using ExtentPtr = std::shared_ptr; using ExtentNNPtr = util::nn; } // namespace metadata namespace datum { class Datum; using DatumPtr = std::shared_ptr; using DatumNNPtr = util::nn; class DatumEnsemble; using DatumEnsemblePtr = std::shared_ptr; using DatumEnsembleNNPtr = util::nn; class Ellipsoid; using EllipsoidPtr = std::shared_ptr; using EllipsoidNNPtr = util::nn; class PrimeMeridian; using PrimeMeridianPtr = std::shared_ptr; using PrimeMeridianNNPtr = util::nn; class GeodeticReferenceFrame; using GeodeticReferenceFramePtr = std::shared_ptr; using GeodeticReferenceFrameNNPtr = util::nn; class VerticalReferenceFrame; using VerticalReferenceFramePtr = std::shared_ptr; using VerticalReferenceFrameNNPtr = util::nn; class EngineeringDatum; using EngineeringDatumPtr = std::shared_ptr; using EngineeringDatumNNPtr = util::nn; } // namespace datum namespace crs { class CRS; using CRSPtr = std::shared_ptr; using CRSNNPtr = util::nn; class GeodeticCRS; using GeodeticCRSPtr = std::shared_ptr; using GeodeticCRSNNPtr = util::nn; class GeographicCRS; using GeographicCRSPtr = std::shared_ptr; using GeographicCRSNNPtr = util::nn; class VerticalCRS; using VerticalCRSPtr = std::shared_ptr; using VerticalCRSNNPtr = util::nn; class ProjectedCRS; using ProjectedCRSPtr = std::shared_ptr; using ProjectedCRSNNPtr = util::nn; class CompoundCRS; using CompoundCRSPtr = std::shared_ptr; using CompoundCRSNNPtr = util::nn; class EngineeringCRS; using EngineeringCRSPtr = std::shared_ptr; using EngineeringCRSNNPtr = util::nn; } // namespace crs namespace coordinates { class CoordinateMetadata; /** Shared pointer of CoordinateMetadata */ using CoordinateMetadataPtr = std::shared_ptr; /** Non-null shared pointer of CoordinateMetadata */ using CoordinateMetadataNNPtr = util::nn; } // namespace coordinates namespace operation { class Conversion; using ConversionPtr = std::shared_ptr; using ConversionNNPtr = util::nn; class CoordinateOperation; using CoordinateOperationPtr = std::shared_ptr; using CoordinateOperationNNPtr = util::nn; class PointMotionOperation; using PointMotionOperationPtr = std::shared_ptr; using PointMotionOperationNNPtr = util::nn; } // namespace operation /** osgeo.proj.io namespace. * * \brief I/O classes */ namespace io { class DatabaseContext; /** Shared pointer of DatabaseContext. */ using DatabaseContextPtr = std::shared_ptr; /** Non-null shared pointer of DatabaseContext. */ using DatabaseContextNNPtr = util::nn; // --------------------------------------------------------------------------- class WKTNode; /** Unique pointer of WKTNode. */ using WKTNodePtr = std::unique_ptr; /** Non-null unique pointer of WKTNode. */ using WKTNodeNNPtr = util::nn; // --------------------------------------------------------------------------- class WKTFormatter; /** WKTFormatter unique pointer. */ using WKTFormatterPtr = std::unique_ptr; /** Non-null WKTFormatter unique pointer. */ using WKTFormatterNNPtr = util::nn; /** \brief Formatter to WKT strings. * * An instance of this class can only be used by a single * thread at a time. */ class PROJ_GCC_DLL WKTFormatter { public: /** WKT variant. */ enum class PROJ_MSVC_DLL Convention { /** Full WKT2 string, conforming to ISO 19162:2015(E) / OGC 12-063r5 * (\ref WKT2_2015) with all possible nodes and new keyword names. */ WKT2, WKT2_2015 = WKT2, /** Same as WKT2 with the following exceptions: *
    *
  • UNIT keyword used.
  • *
  • ID node only on top element.
  • *
  • No ORDER element in AXIS element.
  • *
  • PRIMEM node omitted if it is Greenwich.
  • *
  • ELLIPSOID.UNIT node omitted if it is * UnitOfMeasure::METRE.
  • *
  • PARAMETER.UNIT / PRIMEM.UNIT omitted if same as AXIS.
  • *
  • AXIS.UNIT omitted and replaced by a common GEODCRS.UNIT if * they are all the same on all axis.
  • *
*/ WKT2_SIMPLIFIED, WKT2_2015_SIMPLIFIED = WKT2_SIMPLIFIED, /** Full WKT2 string, conforming to ISO 19162:2019 / OGC 18-010, with * (\ref WKT2_2019) all possible nodes and new keyword names. * Non-normative list of differences: *
    *
  • WKT2_2019 uses GEOGCRS / BASEGEOGCRS keywords for * GeographicCRS.
  • *
*/ WKT2_2019, /** Deprecated alias for WKT2_2019 */ WKT2_2018 = WKT2_2019, /** WKT2_2019 with the simplification rule of WKT2_SIMPLIFIED */ WKT2_2019_SIMPLIFIED, /** Deprecated alias for WKT2_2019_SIMPLIFIED */ WKT2_2018_SIMPLIFIED = WKT2_2019_SIMPLIFIED, /** WKT1 as traditionally output by GDAL, deriving from OGC 01-009. A notable departure from WKT1_GDAL with respect to OGC 01-009 is that in WKT1_GDAL, the unit of the PRIMEM value is always degrees. */ WKT1_GDAL, /** WKT1 as traditionally output by ESRI software, * deriving from OGC 99-049. */ WKT1_ESRI, }; PROJ_DLL static WKTFormatterNNPtr create(Convention convention = Convention::WKT2, DatabaseContextPtr dbContext = nullptr); PROJ_DLL static WKTFormatterNNPtr create(const WKTFormatterNNPtr &other); //! @cond Doxygen_Suppress PROJ_DLL ~WKTFormatter(); //! @endcond PROJ_DLL WKTFormatter &setMultiLine(bool multiLine) noexcept; PROJ_DLL WKTFormatter &setIndentationWidth(int width) noexcept; /** Rule for output AXIS nodes */ enum class OutputAxisRule { /** Always include AXIS nodes */ YES, /** Never include AXIS nodes */ NO, /** Includes them only on PROJCS node if it uses Easting/Northing *ordering. Typically used for WKT1_GDAL */ WKT1_GDAL_EPSG_STYLE, }; PROJ_DLL WKTFormatter &setOutputAxis(OutputAxisRule outputAxis) noexcept; PROJ_DLL WKTFormatter &setStrict(bool strict) noexcept; PROJ_DLL bool isStrict() const noexcept; PROJ_DLL WKTFormatter & setAllowEllipsoidalHeightAsVerticalCRS(bool allow) noexcept; PROJ_DLL bool isAllowedEllipsoidalHeightAsVerticalCRS() const noexcept; PROJ_DLL WKTFormatter &setAllowLINUNITNode(bool allow) noexcept; PROJ_DLL bool isAllowedLINUNITNode() const noexcept; PROJ_DLL const std::string &toString() const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_DLL WKTFormatter & setOutputId(bool outputIdIn); PROJ_INTERNAL void enter(); PROJ_INTERNAL void leave(); PROJ_INTERNAL void startNode(const std::string &keyword, bool hasId); PROJ_INTERNAL void endNode(); PROJ_INTERNAL bool isAtTopLevel() const; PROJ_DLL WKTFormatter &simulCurNodeHasId(); PROJ_INTERNAL void addQuotedString(const char *str); PROJ_INTERNAL void addQuotedString(const std::string &str); PROJ_INTERNAL void add(const std::string &str); PROJ_INTERNAL void add(int number); PROJ_INTERNAL void add(size_t number) = delete; PROJ_INTERNAL void add(double number, int precision = 15); PROJ_INTERNAL void pushOutputUnit(bool outputUnitIn); PROJ_INTERNAL void popOutputUnit(); PROJ_INTERNAL bool outputUnit() const; PROJ_INTERNAL void pushOutputId(bool outputIdIn); PROJ_INTERNAL void popOutputId(); PROJ_INTERNAL bool outputId() const; PROJ_INTERNAL void pushHasId(bool hasId); PROJ_INTERNAL void popHasId(); PROJ_INTERNAL void pushDisableUsage(); PROJ_INTERNAL void popDisableUsage(); PROJ_INTERNAL bool outputUsage() const; PROJ_INTERNAL void pushAxisLinearUnit(const common::UnitOfMeasureNNPtr &unit); PROJ_INTERNAL void popAxisLinearUnit(); PROJ_INTERNAL const common::UnitOfMeasureNNPtr &axisLinearUnit() const; PROJ_INTERNAL void pushAxisAngularUnit(const common::UnitOfMeasureNNPtr &unit); PROJ_INTERNAL void popAxisAngularUnit(); PROJ_INTERNAL const common::UnitOfMeasureNNPtr &axisAngularUnit() const; PROJ_INTERNAL void setAbridgedTransformation(bool abriged); PROJ_INTERNAL bool abridgedTransformation() const; PROJ_INTERNAL void setUseDerivingConversion(bool useDerivingConversionIn); PROJ_INTERNAL bool useDerivingConversion() const; PROJ_INTERNAL void setTOWGS84Parameters(const std::vector ¶ms); PROJ_INTERNAL const std::vector &getTOWGS84Parameters() const; PROJ_INTERNAL void setVDatumExtension(const std::string &filename); PROJ_INTERNAL const std::string &getVDatumExtension() const; PROJ_INTERNAL void setHDatumExtension(const std::string &filename); PROJ_INTERNAL const std::string &getHDatumExtension() const; PROJ_INTERNAL void setGeogCRSOfCompoundCRS(const crs::GeographicCRSPtr &crs); PROJ_INTERNAL const crs::GeographicCRSPtr &getGeogCRSOfCompoundCRS() const; PROJ_INTERNAL static std::string morphNameToESRI(const std::string &name); #ifdef unused PROJ_INTERNAL void startInversion(); PROJ_INTERNAL void stopInversion(); PROJ_INTERNAL bool isInverted() const; #endif PROJ_INTERNAL OutputAxisRule outputAxis() const; PROJ_INTERNAL bool outputAxisOrder() const; PROJ_INTERNAL bool primeMeridianOmittedIfGreenwich() const; PROJ_INTERNAL bool ellipsoidUnitOmittedIfMetre() const; PROJ_INTERNAL bool forceUNITKeyword() const; PROJ_INTERNAL bool primeMeridianOrParameterUnitOmittedIfSameAsAxis() const; PROJ_INTERNAL bool primeMeridianInDegree() const; PROJ_INTERNAL bool outputCSUnitOnlyOnceIfSame() const; PROJ_INTERNAL bool idOnTopLevelOnly() const; PROJ_INTERNAL bool topLevelHasId() const; /** WKT version. */ enum class Version { /** WKT1 */ WKT1, /** WKT2 / ISO 19162 */ WKT2 }; PROJ_INTERNAL Version version() const; PROJ_INTERNAL bool use2019Keywords() const; PROJ_INTERNAL bool useESRIDialect() const; PROJ_INTERNAL const DatabaseContextPtr &databaseContext() const; PROJ_INTERNAL void ingestWKTNode(const WKTNodeNNPtr &node); //! @endcond protected: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit WKTFormatter(Convention convention); WKTFormatter(const WKTFormatter &other) = delete; INLINED_MAKE_UNIQUE //! @endcond private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class PROJStringFormatter; /** PROJStringFormatter unique pointer. */ using PROJStringFormatterPtr = std::unique_ptr; /** Non-null PROJStringFormatter unique pointer. */ using PROJStringFormatterNNPtr = util::nn; /** \brief Formatter to PROJ strings. * * An instance of this class can only be used by a single * thread at a time. */ class PROJ_GCC_DLL PROJStringFormatter { public: /** PROJ variant. */ enum class PROJ_MSVC_DLL Convention { /** PROJ v5 (or later versions) string. */ PROJ_5, /** PROJ v4 string as output by GDAL exportToProj4() */ PROJ_4 }; PROJ_DLL static PROJStringFormatterNNPtr create(Convention conventionIn = Convention::PROJ_5, DatabaseContextPtr dbContext = nullptr); //! @cond Doxygen_Suppress PROJ_DLL ~PROJStringFormatter(); //! @endcond PROJ_DLL PROJStringFormatter &setMultiLine(bool multiLine) noexcept; PROJ_DLL PROJStringFormatter &setIndentationWidth(int width) noexcept; PROJ_DLL PROJStringFormatter &setMaxLineLength(int maxLineLength) noexcept; PROJ_DLL void setUseApproxTMerc(bool flag); PROJ_DLL const std::string &toString() const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_DLL void setCRSExport(bool b); PROJ_INTERNAL bool getCRSExport() const; PROJ_DLL void startInversion(); PROJ_DLL void stopInversion(); PROJ_INTERNAL bool isInverted() const; PROJ_INTERNAL bool getUseApproxTMerc() const; PROJ_INTERNAL void setCoordinateOperationOptimizations(bool enable); PROJ_DLL void ingestPROJString(const std::string &str); // throw ParsingException PROJ_DLL void addStep(const char *step); PROJ_DLL void addStep(const std::string &step); PROJ_DLL void setCurrentStepInverted(bool inverted); PROJ_DLL void addParam(const std::string ¶mName); PROJ_DLL void addParam(const char *paramName, double val); PROJ_DLL void addParam(const std::string ¶mName, double val); PROJ_DLL void addParam(const char *paramName, int val); PROJ_DLL void addParam(const std::string ¶mName, int val); PROJ_DLL void addParam(const char *paramName, const char *val); PROJ_DLL void addParam(const char *paramName, const std::string &val); PROJ_DLL void addParam(const std::string ¶mName, const char *val); PROJ_DLL void addParam(const std::string ¶mName, const std::string &val); PROJ_DLL void addParam(const char *paramName, const std::vector &vals); PROJ_INTERNAL bool hasParam(const char *paramName) const; PROJ_INTERNAL void addNoDefs(bool b); PROJ_INTERNAL bool getAddNoDefs() const; PROJ_INTERNAL std::set getUsedGridNames() const; PROJ_INTERNAL bool requiresPerCoordinateInputTime() const; PROJ_INTERNAL void setTOWGS84Parameters(const std::vector ¶ms); PROJ_INTERNAL const std::vector &getTOWGS84Parameters() const; PROJ_INTERNAL void setVDatumExtension(const std::string &filename, const std::string &geoidCRSValue); PROJ_INTERNAL const std::string &getVDatumExtension() const; PROJ_INTERNAL const std::string &getGeoidCRSValue() const; PROJ_INTERNAL void setHDatumExtension(const std::string &filename); PROJ_INTERNAL const std::string &getHDatumExtension() const; PROJ_INTERNAL void setGeogCRSOfCompoundCRS(const crs::GeographicCRSPtr &crs); PROJ_INTERNAL const crs::GeographicCRSPtr &getGeogCRSOfCompoundCRS() const; PROJ_INTERNAL void setOmitProjLongLatIfPossible(bool omit); PROJ_INTERNAL bool omitProjLongLatIfPossible() const; PROJ_INTERNAL void pushOmitZUnitConversion(); PROJ_INTERNAL void popOmitZUnitConversion(); PROJ_INTERNAL bool omitZUnitConversion() const; PROJ_INTERNAL void pushOmitHorizontalConversionInVertTransformation(); PROJ_INTERNAL void popOmitHorizontalConversionInVertTransformation(); PROJ_INTERNAL bool omitHorizontalConversionInVertTransformation() const; PROJ_INTERNAL void setLegacyCRSToCRSContext(bool legacyContext); PROJ_INTERNAL bool getLegacyCRSToCRSContext() const; PROJ_INTERNAL PROJStringFormatter &setNormalizeOutput(); PROJ_INTERNAL const DatabaseContextPtr &databaseContext() const; PROJ_INTERNAL Convention convention() const; PROJ_INTERNAL size_t getStepCount() const; //! @endcond protected: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit PROJStringFormatter( Convention conventionIn, const DatabaseContextPtr &dbContext); PROJStringFormatter(const PROJStringFormatter &other) = delete; INLINED_MAKE_UNIQUE //! @endcond private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class JSONFormatter; /** JSONFormatter unique pointer. */ using JSONFormatterPtr = std::unique_ptr; /** Non-null JSONFormatter unique pointer. */ using JSONFormatterNNPtr = util::nn; /** \brief Formatter to JSON strings. * * An instance of this class can only be used by a single * thread at a time. */ class PROJ_GCC_DLL JSONFormatter { public: PROJ_DLL static JSONFormatterNNPtr create(DatabaseContextPtr dbContext = nullptr); //! @cond Doxygen_Suppress PROJ_DLL ~JSONFormatter(); //! @endcond PROJ_DLL JSONFormatter &setMultiLine(bool multiLine) noexcept; PROJ_DLL JSONFormatter &setIndentationWidth(int width) noexcept; PROJ_DLL JSONFormatter &setSchema(const std::string &schema) noexcept; PROJ_DLL const std::string &toString() const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL CPLJSonStreamingWriter * writer() const; PROJ_INTERNAL const DatabaseContextPtr &databaseContext() const; struct ObjectContext { JSONFormatter &m_formatter; ObjectContext(const ObjectContext &) = delete; ObjectContext(ObjectContext &&) = default; explicit ObjectContext(JSONFormatter &formatter, const char *objectType, bool hasId); ~ObjectContext(); }; PROJ_INTERNAL inline ObjectContext MakeObjectContext(const char *objectType, bool hasId) { return ObjectContext(*this, objectType, hasId); } PROJ_INTERNAL void setAllowIDInImmediateChild(); PROJ_INTERNAL void setOmitTypeInImmediateChild(); PROJ_INTERNAL void setAbridgedTransformation(bool abriged); PROJ_INTERNAL bool abridgedTransformation() const; PROJ_INTERNAL void setAbridgedTransformationWriteSourceCRS(bool writeCRS); PROJ_INTERNAL bool abridgedTransformationWriteSourceCRS() const; // cppcheck-suppress functionStatic PROJ_INTERNAL bool outputId() const; PROJ_INTERNAL bool outputUsage(bool calledBeforeObjectContext = false) const; PROJ_INTERNAL static const char *PROJJSON_v0_7; //! @endcond protected: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit JSONFormatter(); JSONFormatter(const JSONFormatter &other) = delete; INLINED_MAKE_UNIQUE //! @endcond private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Interface for an object that can be exported to JSON. */ class PROJ_GCC_DLL IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL virtual ~IJSONExportable(); //! @endcond /** Builds a JSON representation. May throw a FormattingException */ PROJ_DLL std::string exportToJSON(JSONFormatter *formatter) const; // throw(FormattingException) PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL virtual void _exportToJSON( JSONFormatter *formatter) const = 0; // throw(FormattingException) //! @endcond }; // --------------------------------------------------------------------------- /** \brief Exception possibly thrown by IWKTExportable::exportToWKT() or * IPROJStringExportable::exportToPROJString(). */ class PROJ_GCC_DLL FormattingException : public util::Exception { public: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit FormattingException(const char *message); PROJ_INTERNAL explicit FormattingException(const std::string &message); PROJ_DLL FormattingException(const FormattingException &other); PROJ_DLL virtual ~FormattingException() override; PROJ_INTERNAL static void Throw(const char *msg) PROJ_NO_RETURN; PROJ_INTERNAL static void Throw(const std::string &msg) PROJ_NO_RETURN; //! @endcond }; // --------------------------------------------------------------------------- /** \brief Exception possibly thrown by WKTNode::createFrom() or * WKTParser::createFromWKT(). */ class PROJ_GCC_DLL ParsingException : public util::Exception { public: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit ParsingException(const char *message); PROJ_INTERNAL explicit ParsingException(const std::string &message); PROJ_DLL ParsingException(const ParsingException &other); PROJ_DLL virtual ~ParsingException() override; //! @endcond }; // --------------------------------------------------------------------------- /** \brief Interface for an object that can be exported to WKT. */ class PROJ_GCC_DLL IWKTExportable { public: //! @cond Doxygen_Suppress PROJ_DLL virtual ~IWKTExportable(); //! @endcond /** Builds a WKT representation. May throw a FormattingException */ PROJ_DLL std::string exportToWKT(WKTFormatter *formatter) const; // throw(FormattingException) PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL virtual void _exportToWKT( WKTFormatter *formatter) const = 0; // throw(FormattingException) //! @endcond }; // --------------------------------------------------------------------------- class IPROJStringExportable; /** Shared pointer of IPROJStringExportable. */ using IPROJStringExportablePtr = std::shared_ptr; /** Non-null shared pointer of IPROJStringExportable. */ using IPROJStringExportableNNPtr = util::nn; /** \brief Interface for an object that can be exported to a PROJ string. */ class PROJ_GCC_DLL IPROJStringExportable { public: //! @cond Doxygen_Suppress PROJ_DLL virtual ~IPROJStringExportable(); //! @endcond /** \brief Builds a PROJ string representation. * *
    *
  • For PROJStringFormatter::Convention::PROJ_5 (the default), *
      *
    • For a crs::CRS, returns the same as * PROJStringFormatter::Convention::PROJ_4. It should be noted that the * export of a CRS as a PROJ string may cause loss of many important aspects * of a CRS definition. Consequently it is discouraged to use it for * interoperability in newer projects. The choice of a WKT representation * will be a better option.
    • *
    • For operation::CoordinateOperation, returns a PROJ * pipeline.
    • *
    * *
  • For PROJStringFormatter::Convention::PROJ_4, format a string * compatible with the OGRSpatialReference::exportToProj4() of GDAL * <=2.3. It is only compatible of a few CRS objects. The PROJ string * will also contain a +type=crs parameter to disambiguate the nature of * the string from a CoordinateOperation. *
      *
    • For a crs::GeographicCRS, returns a proj=longlat string, with * ellipsoid / datum / prime meridian information, ignoring axis order * and unit information.
    • *
    • For a geocentric crs::GeodeticCRS, returns the transformation from * geographic coordinates into geocentric coordinates.
    • *
    • For a crs::ProjectedCRS, returns the projection method, ignoring * axis order.
    • *
    • For a crs::BoundCRS, returns the PROJ string of its source/base CRS, * amended with towgs84 / nadgrids parameter when the deriving conversion * can be expressed in that way.
    • *
    *
  • * *
* * @param formatter PROJ string formatter. * @return a PROJ string. * @throw FormattingException if cannot be exported as a PROJ string */ PROJ_DLL std::string exportToPROJString( PROJStringFormatter *formatter) const; // throw(FormattingException) PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL virtual void _exportToPROJString(PROJStringFormatter *formatter) const = 0; // throw(FormattingException) //! @endcond }; // --------------------------------------------------------------------------- /** \brief Node in the tree-splitted WKT representation. */ class PROJ_GCC_DLL WKTNode { public: PROJ_DLL explicit WKTNode(const std::string &valueIn); //! @cond Doxygen_Suppress PROJ_DLL ~WKTNode(); //! @endcond PROJ_DLL const std::string &value() const; PROJ_DLL const std::vector &children() const; PROJ_DLL void addChild(WKTNodeNNPtr &&child); PROJ_DLL const WKTNodePtr &lookForChild(const std::string &childName, int occurrence = 0) const noexcept; PROJ_DLL int countChildrenOfName(const std::string &childName) const noexcept; PROJ_DLL std::string toString() const; PROJ_DLL static WKTNodeNNPtr createFrom(const std::string &wkt, size_t indexStart = 0); protected: PROJ_INTERNAL static WKTNodeNNPtr createFrom(const std::string &wkt, size_t indexStart, int recLevel, size_t &indexEnd); // throw(ParsingException) private: friend class WKTParser; PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- PROJ_DLL util::BaseObjectNNPtr createFromUserInput(const std::string &text, const DatabaseContextPtr &dbContext, bool usePROJ4InitRules = false); PROJ_DLL util::BaseObjectNNPtr createFromUserInput(const std::string &text, PJ_CONTEXT *ctx); // --------------------------------------------------------------------------- /** \brief Parse a WKT string into the appropriate subclass of util::BaseObject. */ class PROJ_GCC_DLL WKTParser { public: PROJ_DLL WKTParser(); //! @cond Doxygen_Suppress PROJ_DLL ~WKTParser(); //! @endcond PROJ_DLL WKTParser & attachDatabaseContext(const DatabaseContextPtr &dbContext); PROJ_DLL WKTParser &setStrict(bool strict); PROJ_DLL std::list warningList() const; PROJ_DLL std::list grammarErrorList() const; PROJ_DLL WKTParser &setUnsetIdentifiersIfIncompatibleDef(bool unset); PROJ_DLL util::BaseObjectNNPtr createFromWKT(const std::string &wkt); // throw(ParsingException) /** Guessed WKT "dialect" */ enum class PROJ_MSVC_DLL WKTGuessedDialect { /** \ref WKT2_2019 */ WKT2_2019, /** Deprecated alias for WKT2_2019 */ WKT2_2018 = WKT2_2019, /** \ref WKT2_2015 */ WKT2_2015, /** \ref WKT1 */ WKT1_GDAL, /** ESRI variant of WKT1 */ WKT1_ESRI, /** Not WKT / unrecognized */ NOT_WKT }; // cppcheck-suppress functionStatic PROJ_DLL WKTGuessedDialect guessDialect(const std::string &wkt) noexcept; private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Parse a PROJ string into the appropriate subclass of * util::BaseObject. */ class PROJ_GCC_DLL PROJStringParser { public: PROJ_DLL PROJStringParser(); //! @cond Doxygen_Suppress PROJ_DLL ~PROJStringParser(); //! @endcond PROJ_DLL PROJStringParser & attachDatabaseContext(const DatabaseContextPtr &dbContext); PROJ_DLL PROJStringParser &setUsePROJ4InitRules(bool enable); PROJ_DLL std::vector warningList() const; PROJ_DLL util::BaseObjectNNPtr createFromPROJString( const std::string &projString); // throw(ParsingException) PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJStringParser & attachContext(PJ_CONTEXT *ctx); //! @endcond private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Database context. * * A database context should be used only by one thread at a time. */ class PROJ_GCC_DLL DatabaseContext { public: //! @cond Doxygen_Suppress PROJ_DLL ~DatabaseContext(); //! @endcond PROJ_DLL static DatabaseContextNNPtr create(const std::string &databasePath = std::string(), const std::vector &auxiliaryDatabasePaths = std::vector(), PJ_CONTEXT *ctx = nullptr); PROJ_DLL const std::string &getPath() const; PROJ_DLL const char *getMetadata(const char *key) const; PROJ_DLL std::set getAuthorities() const; PROJ_DLL std::vector getDatabaseStructure() const; PROJ_DLL void startInsertStatementsSession(); PROJ_DLL std::string suggestsCodeFor(const common::IdentifiedObjectNNPtr &object, const std::string &authName, bool numericCode); PROJ_DLL std::vector getInsertStatementsFor( const common::IdentifiedObjectNNPtr &object, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities = {"EPSG", "PROJ"}); PROJ_DLL void stopInsertStatementsSession(); PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_DLL void * getSqliteHandle() const; PROJ_DLL static DatabaseContextNNPtr create(void *sqlite_handle); PROJ_INTERNAL bool lookForGridAlternative(const std::string &officialName, std::string &projFilename, std::string &projFormat, bool &inverse) const; PROJ_DLL bool lookForGridInfo(const std::string &projFilename, bool considerKnownGridsAsAvailable, std::string &fullFilename, std::string &packageName, std::string &url, bool &directDownload, bool &openLicense, bool &gridAvailable) const; PROJ_DLL unsigned int getQueryCounter() const; PROJ_INTERNAL std::string getProjGridName(const std::string &oldProjGridName); PROJ_INTERNAL void invalidateGridInfo(const std::string &projFilename); PROJ_INTERNAL std::string getOldProjGridName(const std::string &gridName); PROJ_INTERNAL std::string getAliasFromOfficialName(const std::string &officialName, const std::string &tableName, const std::string &source) const; PROJ_INTERNAL std::list getAliases(const std::string &authName, const std::string &code, const std::string &officialName, const std::string &tableName, const std::string &source) const; PROJ_INTERNAL bool isKnownName(const std::string &name, const std::string &tableName) const; PROJ_INTERNAL std::string getName(const std::string &tableName, const std::string &authName, const std::string &code) const; PROJ_INTERNAL std::string getTextDefinition(const std::string &tableName, const std::string &authName, const std::string &code) const; PROJ_INTERNAL std::vector getAllowedAuthorities(const std::string &sourceAuthName, const std::string &targetAuthName) const; PROJ_INTERNAL std::list> getNonDeprecated(const std::string &tableName, const std::string &authName, const std::string &code) const; PROJ_INTERNAL static std::vector getTransformationsForGridName(const DatabaseContextNNPtr &databaseContext, const std::string &gridName); PROJ_INTERNAL bool getAuthorityAndVersion(const std::string &versionedAuthName, std::string &authNameOut, std::string &versionOut); PROJ_INTERNAL bool getVersionedAuthority(const std::string &authName, const std::string &version, std::string &versionedAuthNameOut); PROJ_DLL std::vector getVersionedAuthoritiesFromName(const std::string &authName); PROJ_FOR_TEST bool toWGS84AutocorrectWrongValues(double &tx, double &ty, double &tz, double &rx, double &ry, double &rz, double &scale_difference) const; //! @endcond protected: PROJ_INTERNAL DatabaseContext(); INLINED_MAKE_SHARED PROJ_FRIEND(AuthorityFactory); private: PROJ_OPAQUE_PRIVATE_DATA DatabaseContext(const DatabaseContext &) = delete; DatabaseContext &operator=(const DatabaseContext &other) = delete; }; // --------------------------------------------------------------------------- class AuthorityFactory; /** Shared pointer of AuthorityFactory. */ using AuthorityFactoryPtr = std::shared_ptr; /** Non-null shared pointer of AuthorityFactory. */ using AuthorityFactoryNNPtr = util::nn; /** \brief Builds object from an authority database. * * A AuthorityFactory should be used only by one thread at a time. * * \remark Implements [AuthorityFactory] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/referencing/AuthorityFactory.html) * from \ref GeoAPI */ class PROJ_GCC_DLL AuthorityFactory { public: //! @cond Doxygen_Suppress PROJ_DLL ~AuthorityFactory(); //! @endcond PROJ_DLL util::BaseObjectNNPtr createObject(const std::string &code) const; PROJ_DLL common::UnitOfMeasureNNPtr createUnitOfMeasure(const std::string &code) const; PROJ_DLL metadata::ExtentNNPtr createExtent(const std::string &code) const; PROJ_DLL datum::PrimeMeridianNNPtr createPrimeMeridian(const std::string &code) const; PROJ_DLL std::string identifyBodyFromSemiMajorAxis(double a, double tolerance) const; PROJ_DLL datum::EllipsoidNNPtr createEllipsoid(const std::string &code) const; PROJ_DLL datum::DatumNNPtr createDatum(const std::string &code) const; PROJ_DLL datum::DatumEnsembleNNPtr createDatumEnsemble(const std::string &code, const std::string &type = std::string()) const; PROJ_DLL datum::GeodeticReferenceFrameNNPtr createGeodeticDatum(const std::string &code) const; PROJ_DLL datum::VerticalReferenceFrameNNPtr createVerticalDatum(const std::string &code) const; PROJ_DLL datum::EngineeringDatumNNPtr createEngineeringDatum(const std::string &code) const; PROJ_DLL cs::CoordinateSystemNNPtr createCoordinateSystem(const std::string &code) const; PROJ_DLL crs::GeodeticCRSNNPtr createGeodeticCRS(const std::string &code) const; PROJ_DLL crs::GeographicCRSNNPtr createGeographicCRS(const std::string &code) const; PROJ_DLL crs::VerticalCRSNNPtr createVerticalCRS(const std::string &code) const; PROJ_DLL crs::EngineeringCRSNNPtr createEngineeringCRS(const std::string &code) const; PROJ_DLL operation::ConversionNNPtr createConversion(const std::string &code) const; PROJ_DLL crs::ProjectedCRSNNPtr createProjectedCRS(const std::string &code) const; PROJ_DLL crs::CompoundCRSNNPtr createCompoundCRS(const std::string &code) const; PROJ_DLL crs::CRSNNPtr createCoordinateReferenceSystem(const std::string &code) const; PROJ_DLL coordinates::CoordinateMetadataNNPtr createCoordinateMetadata(const std::string &code) const; PROJ_DLL operation::CoordinateOperationNNPtr createCoordinateOperation(const std::string &code, bool usePROJAlternativeGridNames) const; PROJ_DLL std::vector createFromCoordinateReferenceSystemCodes( const std::string &sourceCRSCode, const std::string &targetCRSCode) const; PROJ_DLL std::list getGeoidModels(const std::string &code) const; PROJ_DLL const std::string &getAuthority() PROJ_PURE_DECL; /** Object type. */ enum class ObjectType { /** Object of type datum::PrimeMeridian */ PRIME_MERIDIAN, /** Object of type datum::Ellipsoid */ ELLIPSOID, /** Object of type datum::Datum (and derived classes) */ DATUM, /** Object of type datum::GeodeticReferenceFrame (and derived classes) */ GEODETIC_REFERENCE_FRAME, /** Object of type datum::VerticalReferenceFrame (and derived classes) */ VERTICAL_REFERENCE_FRAME, /** Object of type datum::EngineeringDatum */ ENGINEERING_DATUM, /** Object of type crs::CRS (and derived classes) */ CRS, /** Object of type crs::GeodeticCRS (and derived classes) */ GEODETIC_CRS, /** GEODETIC_CRS of type geocentric */ GEOCENTRIC_CRS, /** Object of type crs::GeographicCRS (and derived classes) */ GEOGRAPHIC_CRS, /** GEOGRAPHIC_CRS of type Geographic 2D */ GEOGRAPHIC_2D_CRS, /** GEOGRAPHIC_CRS of type Geographic 3D */ GEOGRAPHIC_3D_CRS, /** Object of type crs::ProjectedCRS (and derived classes) */ PROJECTED_CRS, /** Object of type crs::VerticalCRS (and derived classes) */ VERTICAL_CRS, /** Object of type crs::CompoundCRS (and derived classes) */ ENGINEERING_CRS, /** Object of type crs::EngineeringCRS */ COMPOUND_CRS, /** Object of type operation::CoordinateOperation (and derived classes) */ COORDINATE_OPERATION, /** Object of type operation::Conversion (and derived classes) */ CONVERSION, /** Object of type operation::Transformation (and derived classes) */ TRANSFORMATION, /** Object of type operation::ConcatenatedOperation (and derived classes) */ CONCATENATED_OPERATION, /** Object of type datum::DynamicGeodeticReferenceFrame */ DYNAMIC_GEODETIC_REFERENCE_FRAME, /** Object of type datum::DynamicVerticalReferenceFrame */ DYNAMIC_VERTICAL_REFERENCE_FRAME, /** Object of type datum::DatumEnsemble */ DATUM_ENSEMBLE, }; PROJ_DLL std::set getAuthorityCodes(const ObjectType &type, bool allowDeprecated = true) const; PROJ_DLL std::string getDescriptionText(const std::string &code) const; // non-standard /** CRS information */ struct CRSInfo { /** Authority name */ std::string authName; /** Code */ std::string code; /** Name */ std::string name; /** Type */ ObjectType type; /** Whether the object is deprecated */ bool deprecated; /** Whereas the west_lon_degree, south_lat_degree, east_lon_degree and * north_lat_degree fields are valid. */ bool bbox_valid; /** Western-most longitude of the area of use, in degrees. */ double west_lon_degree; /** Southern-most latitude of the area of use, in degrees. */ double south_lat_degree; /** Eastern-most longitude of the area of use, in degrees. */ double east_lon_degree; /** Northern-most latitude of the area of use, in degrees. */ double north_lat_degree; /** Name of the area of use. */ std::string areaName; /** Name of the projection method for a projected CRS. Might be empty * even for projected CRS in some cases. */ std::string projectionMethodName; /** Name of the celestial body of the CRS (e.g. "Earth") */ std::string celestialBodyName; //! @cond Doxygen_Suppress CRSInfo(); //! @endcond }; PROJ_DLL std::list getCRSInfoList() const; /** Unit information */ struct UnitInfo { /** Authority name */ std::string authName; /** Code */ std::string code; /** Name */ std::string name; /** Category: one of "linear", "linear_per_time", "angular", * "angular_per_time", "scale", "scale_per_time" or "time" */ std::string category; /** Conversion factor to the SI unit. * It might be 0 in some cases to indicate no known conversion factor. */ double convFactor; /** PROJ short name (may be empty) */ std::string projShortName; /** Whether the object is deprecated */ bool deprecated; //! @cond Doxygen_Suppress UnitInfo(); //! @endcond }; PROJ_DLL std::list getUnitList() const; /** Celestial Body information */ struct CelestialBodyInfo { /** Authority name */ std::string authName; /** Name */ std::string name; //! @cond Doxygen_Suppress CelestialBodyInfo(); //! @endcond }; PROJ_DLL std::list getCelestialBodyList() const; PROJ_DLL static AuthorityFactoryNNPtr create(const DatabaseContextNNPtr &context, const std::string &authorityName); PROJ_DLL const DatabaseContextNNPtr &databaseContext() const; PROJ_DLL std::vector createFromCoordinateReferenceSystemCodes( const std::string &sourceCRSAuthName, const std::string &sourceCRSCode, const std::string &targetCRSAuthName, const std::string &targetCRSCode, bool usePROJAlternativeGridNames, bool discardIfMissingGrid, bool considerKnownGridsAsAvailable, bool discardSuperseded, bool tryReverseOrder = false, bool reportOnlyIntersectingTransformations = false, const metadata::ExtentPtr &intersectingExtent1 = nullptr, const metadata::ExtentPtr &intersectingExtent2 = nullptr) const; PROJ_DLL std::vector createFromCRSCodesWithIntermediates( const std::string &sourceCRSAuthName, const std::string &sourceCRSCode, const std::string &targetCRSAuthName, const std::string &targetCRSCode, bool usePROJAlternativeGridNames, bool discardIfMissingGrid, bool considerKnownGridsAsAvailable, bool discardSuperseded, const std::vector> &intermediateCRSAuthCodes, ObjectType allowedIntermediateObjectType = ObjectType::CRS, const std::vector &allowedAuthorities = std::vector(), const metadata::ExtentPtr &intersectingExtent1 = nullptr, const metadata::ExtentPtr &intersectingExtent2 = nullptr) const; PROJ_DLL std::string getOfficialNameFromAlias( const std::string &aliasedName, const std::string &tableName, const std::string &source, bool tryEquivalentNameSpelling, std::string &outTableName, std::string &outAuthName, std::string &outCode) const; PROJ_DLL std::list createObjectsFromName(const std::string &name, const std::vector &allowedObjectTypes = std::vector(), bool approximateMatch = true, size_t limitResultCount = 0) const; PROJ_DLL std::list> listAreaOfUseFromName(const std::string &name, bool approximateMatch) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL std::list createEllipsoidFromExisting( const datum::EllipsoidNNPtr &ellipsoid) const; PROJ_INTERNAL std::list createGeodeticCRSFromDatum(const std::string &datum_auth_name, const std::string &datum_code, const std::string &geodetic_crs_type) const; PROJ_INTERNAL std::list createGeodeticCRSFromDatum(const datum::GeodeticReferenceFrameNNPtr &datum, const std::string &preferredAuthName, const std::string &geodetic_crs_type) const; PROJ_INTERNAL std::list createVerticalCRSFromDatum(const std::string &datum_auth_name, const std::string &datum_code) const; PROJ_INTERNAL std::list createGeodeticCRSFromEllipsoid(const std::string &ellipsoid_auth_name, const std::string &ellipsoid_code, const std::string &geodetic_crs_type) const; PROJ_INTERNAL std::list createProjectedCRSFromExisting(const crs::ProjectedCRSNNPtr &crs) const; PROJ_INTERNAL std::list createCompoundCRSFromExisting(const crs::CompoundCRSNNPtr &crs) const; PROJ_INTERNAL crs::CRSNNPtr createCoordinateReferenceSystem(const std::string &code, bool allowCompound) const; PROJ_INTERNAL std::vector getTransformationsForGeoid(const std::string &geoidName, bool usePROJAlternativeGridNames) const; PROJ_INTERNAL std::vector createBetweenGeodeticCRSWithDatumBasedIntermediates( const crs::CRSNNPtr &sourceCRS, const std::string &sourceCRSAuthName, const std::string &sourceCRSCode, const crs::CRSNNPtr &targetCRS, const std::string &targetCRSAuthName, const std::string &targetCRSCode, bool usePROJAlternativeGridNames, bool discardIfMissingGrid, bool considerKnownGridsAsAvailable, bool discardSuperseded, const std::vector &allowedAuthorities, const metadata::ExtentPtr &intersectingExtent1, const metadata::ExtentPtr &intersectingExtent2) const; typedef std::pair PairObjectName; PROJ_INTERNAL std::list createObjectsFromNameEx(const std::string &name, const std::vector &allowedObjectTypes = std::vector(), bool approximateMatch = true, size_t limitResultCount = 0) const; PROJ_FOR_TEST std::vector getPointMotionOperationsFor(const crs::GeodeticCRSNNPtr &crs, bool usePROJAlternativeGridNames) const; //! @endcond protected: PROJ_INTERNAL AuthorityFactory(const DatabaseContextNNPtr &context, const std::string &authorityName); PROJ_INTERNAL crs::GeodeticCRSNNPtr createGeodeticCRS(const std::string &code, bool geographicOnly) const; PROJ_INTERNAL operation::CoordinateOperationNNPtr createCoordinateOperation(const std::string &code, bool allowConcatenated, bool usePROJAlternativeGridNames, const std::string &type) const; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA PROJ_INTERNAL void createGeodeticDatumOrEnsemble(const std::string &code, datum::GeodeticReferenceFramePtr &outDatum, datum::DatumEnsemblePtr &outDatumEnsemble, bool turnEnsembleAsDatum) const; PROJ_INTERNAL void createVerticalDatumOrEnsemble(const std::string &code, datum::VerticalReferenceFramePtr &outDatum, datum::DatumEnsemblePtr &outDatumEnsemble, bool turnEnsembleAsDatum) const; }; // --------------------------------------------------------------------------- /** \brief Exception thrown when a factory can't create an instance of the * requested object. */ class PROJ_GCC_DLL FactoryException : public util::Exception { public: //! @cond Doxygen_Suppress PROJ_DLL explicit FactoryException(const char *message); PROJ_DLL explicit FactoryException(const std::string &message); PROJ_DLL FactoryException(const FactoryException &other); PROJ_DLL ~FactoryException() override; //! @endcond }; // --------------------------------------------------------------------------- /** \brief Exception thrown when an authority factory can't find the requested * authority code. */ class PROJ_GCC_DLL NoSuchAuthorityCodeException : public FactoryException { public: //! @cond Doxygen_Suppress PROJ_DLL explicit NoSuchAuthorityCodeException(const std::string &message, const std::string &authority, const std::string &code); PROJ_DLL NoSuchAuthorityCodeException(const NoSuchAuthorityCodeException &other); PROJ_DLL ~NoSuchAuthorityCodeException() override; //! @endcond PROJ_DLL const std::string &getAuthority() const; PROJ_DLL const std::string &getAuthorityCode() const; private: PROJ_OPAQUE_PRIVATE_DATA }; } // namespace io NS_PROJ_END #endif // IO_HH_INCLUDED proj-9.6.0/include/proj/metadata.hpp000664 001754 001755 00000040620 14764566077 017311 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef METADATA_HH_INCLUDED #define METADATA_HH_INCLUDED #include #include #include #include "io.hpp" #include "util.hpp" NS_PROJ_START namespace common { class UnitOfMeasure; using UnitOfMeasurePtr = std::shared_ptr; using UnitOfMeasureNNPtr = util::nn; class IdentifiedObject; } // namespace common /** osgeo.proj.metadata namespace * * \brief Common classes from \ref ISO_19115 standard */ namespace metadata { // --------------------------------------------------------------------------- /** \brief Standardized resource reference. * * A citation contains a title. * * \remark Simplified version of [Citation] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/citation/Citation.html) * from \ref GeoAPI */ class PROJ_GCC_DLL Citation : public util::BaseObject { public: PROJ_DLL explicit Citation(const std::string &titleIn); //! @cond Doxygen_Suppress PROJ_DLL Citation(); PROJ_DLL Citation(const Citation &other); PROJ_DLL ~Citation() override; //! @endcond PROJ_DLL const util::optional &title() PROJ_PURE_DECL; protected: PROJ_FRIEND_OPTIONAL(Citation); PROJ_INTERNAL Citation &operator=(const Citation &other); private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class GeographicExtent; /** Shared pointer of GeographicExtent. */ using GeographicExtentPtr = std::shared_ptr; /** Non-null shared pointer of GeographicExtent. */ using GeographicExtentNNPtr = util::nn; /** \brief Base interface for geographic area of the dataset. * * \remark Simplified version of [GeographicExtent] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/extent/GeographicExtent.html) * from \ref GeoAPI */ class PROJ_GCC_DLL GeographicExtent : public util::BaseObject, public util::IComparable { public: //! @cond Doxygen_Suppress PROJ_DLL ~GeographicExtent() override; //! @endcond // GeoAPI has a getInclusion() method. We assume that it is included for our // use //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override = 0; //! @endcond /** \brief Returns whether this extent contains the other one. */ PROJ_DLL virtual bool contains(const GeographicExtentNNPtr &other) const = 0; /** \brief Returns whether this extent intersects the other one. */ PROJ_DLL virtual bool intersects(const GeographicExtentNNPtr &other) const = 0; /** \brief Returns the intersection of this extent with another one. */ PROJ_DLL virtual GeographicExtentPtr intersection(const GeographicExtentNNPtr &other) const = 0; protected: PROJ_INTERNAL GeographicExtent(); private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class GeographicBoundingBox; /** Shared pointer of GeographicBoundingBox. */ using GeographicBoundingBoxPtr = std::shared_ptr; /** Non-null shared pointer of GeographicBoundingBox. */ using GeographicBoundingBoxNNPtr = util::nn; /** \brief Geographic position of the dataset. * * This is only an approximate so specifying the coordinate reference system is * unnecessary. * * \remark Implements [GeographicBoundingBox] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/extent/GeographicBoundingBox.html) * from \ref GeoAPI */ class PROJ_GCC_DLL GeographicBoundingBox : public GeographicExtent { public: //! @cond Doxygen_Suppress PROJ_DLL ~GeographicBoundingBox() override; //! @endcond PROJ_DLL double westBoundLongitude() PROJ_PURE_DECL; PROJ_DLL double southBoundLatitude() PROJ_PURE_DECL; PROJ_DLL double eastBoundLongitude() PROJ_PURE_DECL; PROJ_DLL double northBoundLatitude() PROJ_PURE_DECL; PROJ_DLL static GeographicBoundingBoxNNPtr create(double west, double south, double east, double north); //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond PROJ_INTERNAL bool contains(const GeographicExtentNNPtr &other) const override; PROJ_INTERNAL bool intersects(const GeographicExtentNNPtr &other) const override; PROJ_INTERNAL GeographicExtentPtr intersection(const GeographicExtentNNPtr &other) const override; protected: PROJ_INTERNAL GeographicBoundingBox(double west, double south, double east, double north); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class TemporalExtent; /** Shared pointer of TemporalExtent. */ using TemporalExtentPtr = std::shared_ptr; /** Non-null shared pointer of TemporalExtent. */ using TemporalExtentNNPtr = util::nn; /** \brief Time period covered by the content of the dataset. * * \remark Simplified version of [TemporalExtent] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/extent/TemporalExtent.html) * from \ref GeoAPI */ class PROJ_GCC_DLL TemporalExtent : public util::BaseObject, public util::IComparable { public: //! @cond Doxygen_Suppress PROJ_DLL ~TemporalExtent() override; //! @endcond PROJ_DLL const std::string &start() PROJ_PURE_DECL; PROJ_DLL const std::string &stop() PROJ_PURE_DECL; PROJ_DLL static TemporalExtentNNPtr create(const std::string &start, const std::string &stop); //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond PROJ_DLL bool contains(const TemporalExtentNNPtr &other) const; PROJ_DLL bool intersects(const TemporalExtentNNPtr &other) const; protected: PROJ_INTERNAL TemporalExtent(const std::string &start, const std::string &stop); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class VerticalExtent; /** Shared pointer of VerticalExtent. */ using VerticalExtentPtr = std::shared_ptr; /** Non-null shared pointer of VerticalExtent. */ using VerticalExtentNNPtr = util::nn; /** \brief Vertical domain of dataset. * * \remark Simplified version of [VerticalExtent] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/extent/VerticalExtent.html) * from \ref GeoAPI */ class PROJ_GCC_DLL VerticalExtent : public util::BaseObject, public util::IComparable { public: //! @cond Doxygen_Suppress PROJ_DLL ~VerticalExtent() override; //! @endcond PROJ_DLL double minimumValue() PROJ_PURE_DECL; PROJ_DLL double maximumValue() PROJ_PURE_DECL; PROJ_DLL common::UnitOfMeasureNNPtr &unit() PROJ_PURE_DECL; PROJ_DLL static VerticalExtentNNPtr create(double minimumValue, double maximumValue, const common::UnitOfMeasureNNPtr &unitIn); //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond PROJ_DLL bool contains(const VerticalExtentNNPtr &other) const; PROJ_DLL bool intersects(const VerticalExtentNNPtr &other) const; protected: PROJ_INTERNAL VerticalExtent(double minimumValue, double maximumValue, const common::UnitOfMeasureNNPtr &unitIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class Extent; /** Shared pointer of Extent. */ using ExtentPtr = std::shared_ptr; /** Non-null shared pointer of Extent. */ using ExtentNNPtr = util::nn; /** \brief Information about spatial, vertical, and temporal extent. * * \remark Simplified version of [Extent] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/extent/Extent.html) * from \ref GeoAPI */ class PROJ_GCC_DLL Extent : public util::BaseObject, public util::IComparable { public: //! @cond Doxygen_Suppress PROJ_DLL Extent(const Extent &other); PROJ_DLL ~Extent() override; //! @endcond PROJ_DLL const util::optional &description() PROJ_PURE_DECL; PROJ_DLL const std::vector & geographicElements() PROJ_PURE_DECL; PROJ_DLL const std::vector & temporalElements() PROJ_PURE_DECL; PROJ_DLL const std::vector & verticalElements() PROJ_PURE_DECL; PROJ_DLL static ExtentNNPtr create(const util::optional &descriptionIn, const std::vector &geographicElementsIn, const std::vector &verticalElementsIn, const std::vector &temporalElementsIn); PROJ_DLL static ExtentNNPtr createFromBBOX(double west, double south, double east, double north, const util::optional &descriptionIn = util::optional()); //! @cond Doxygen_Suppress PROJ_INTERNAL bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; //! @endcond PROJ_DLL bool contains(const ExtentNNPtr &other) const; PROJ_DLL bool intersects(const ExtentNNPtr &other) const; PROJ_DLL ExtentPtr intersection(const ExtentNNPtr &other) const; PROJ_DLL static const ExtentNNPtr WORLD; protected: PROJ_INTERNAL Extent(); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA Extent &operator=(const Extent &other) = delete; }; // --------------------------------------------------------------------------- class Identifier; /** Shared pointer of Identifier. */ using IdentifierPtr = std::shared_ptr; /** Non-null shared pointer of Identifier. */ using IdentifierNNPtr = util::nn; /** \brief Value uniquely identifying an object within a namespace. * * \remark Implements Identifier as described in \ref ISO_19111_2019 but which * originates from \ref ISO_19115 */ class PROJ_GCC_DLL Identifier : public util::BaseObject, public io::IWKTExportable, public io::IJSONExportable { public: //! @cond Doxygen_Suppress PROJ_DLL Identifier(const Identifier &other); PROJ_DLL ~Identifier() override; //! @endcond PROJ_DLL static IdentifierNNPtr create(const std::string &codeIn = std::string(), const util::PropertyMap &properties = util::PropertyMap()); // throw(InvalidValueTypeException) PROJ_DLL static const std::string AUTHORITY_KEY; PROJ_DLL static const std::string CODE_KEY; PROJ_DLL static const std::string CODESPACE_KEY; PROJ_DLL static const std::string VERSION_KEY; PROJ_DLL static const std::string DESCRIPTION_KEY; PROJ_DLL static const std::string URI_KEY; PROJ_DLL static const std::string EPSG; PROJ_DLL static const std::string OGC; PROJ_DLL const util::optional &authority() PROJ_PURE_DECL; PROJ_DLL const std::string &code() PROJ_PURE_DECL; PROJ_DLL const util::optional &codeSpace() PROJ_PURE_DECL; PROJ_DLL const util::optional &version() PROJ_PURE_DECL; PROJ_DLL const util::optional &description() PROJ_PURE_DECL; PROJ_DLL const util::optional &uri() PROJ_PURE_DECL; PROJ_DLL static bool isEquivalentName(const char *a, const char *b) noexcept; PROJ_DLL static bool isEquivalentName(const char *a, const char *b, bool biggerDifferencesAllowed) noexcept; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL static std::string canonicalizeName(const std::string &str, bool biggerDifferencesAllowed = true); PROJ_INTERNAL void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) PROJ_INTERNAL void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(io::FormattingException) //! @endcond protected: PROJ_INTERNAL explicit Identifier(const std::string &codeIn, const util::PropertyMap &properties); PROJ_INTERNAL explicit Identifier(); PROJ_FRIEND_OPTIONAL(Identifier); INLINED_MAKE_SHARED Identifier &operator=(const Identifier &other) = delete; PROJ_FRIEND(common::IdentifiedObject); PROJ_INTERNAL static IdentifierNNPtr createFromDescription(const std::string &descriptionIn); private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class PositionalAccuracy; /** Shared pointer of PositionalAccuracy. */ using PositionalAccuracyPtr = std::shared_ptr; /** Non-null shared pointer of PositionalAccuracy. */ using PositionalAccuracyNNPtr = util::nn; /** \brief Accuracy of the position of features. * * \remark Simplified version of [PositionalAccuracy] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/metadata/quality/PositionalAccuracy.html) * from \ref GeoAPI, which originates from \ref ISO_19115 */ class PROJ_GCC_DLL PositionalAccuracy : public util::BaseObject { public: //! @cond Doxygen_Suppress PROJ_DLL ~PositionalAccuracy() override; //! @endcond PROJ_DLL const std::string &value() PROJ_PURE_DECL; PROJ_DLL static PositionalAccuracyNNPtr create(const std::string &valueIn); protected: PROJ_INTERNAL explicit PositionalAccuracy(const std::string &valueIn); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA PositionalAccuracy(const PositionalAccuracy &other) = delete; PositionalAccuracy &operator=(const PositionalAccuracy &other) = delete; }; } // namespace metadata NS_PROJ_END #endif // METADATA_HH_INCLUDED proj-9.6.0/include/proj/nn.hpp000664 001754 001755 00000035521 14764566077 016150 0ustar00e012349e012349000000 000000 #pragma once /* * Copyright (c) 2015 Dropbox, Inc. * * 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. */ #include #include #include #include #include namespace dropbox { namespace oxygen { // Marker type and value for use by nn below. struct i_promise_i_checked_for_null_t {}; static constexpr i_promise_i_checked_for_null_t i_promise_i_checked_for_null{}; // Helper to get the type pointed to by a raw or smart pointer. This can be // explicitly // specialized if need be to provide compatibility with user-defined smart // pointers. namespace nn_detail { template struct element_type { using type = typename T::element_type; }; template struct element_type { using type = Pointee; }; } template class nn; // Trait to check whether a given type is a non-nullable pointer template struct is_nn : public std::false_type {}; template struct is_nn> : public std::true_type {}; /* nn * * Wrapper around a pointer that is guaranteed to not be null. This works with * raw pointers * as well as any smart pointer: nn, nn>, * nn>, * etc. An nn can be used just like a PtrType. * * An nn can be constructed from another nn, if the underlying * type would * allow such construction. For example, nn> can be copied * and moved, but * nn> can only be moved; an nn> can be * explicitly * (but not implicitly) created from an nn; implicit upcasts are * allowed; and so on. * * Similarly, non-nullable pointers can be compared with regular or other * non-nullable * pointers, using the same rules as the underlying pointer types. * * This module also provides helpers for creating an nn from operations * that would * always return a non-null pointer: nn_make_unique, nn_make_shared, * nn_shared_from_this, and * nn_addr (a replacement for operator&). * * We abbreviate nn as nn_unique_ptr - it's a little more readable. * Likewise, * nn can be written as nn_shared_ptr. * * Finally, we define macros NN_CHECK_ASSERT and NN_CHECK_THROW, to convert a * nullable pointer * to a non-nullable pointer. At Dropbox, these use customized error-handling * infrastructure * and are in a separate file. We've included sample implementations here. */ template class nn { public: static_assert(!is_nn::value, "nn> is disallowed"); using element_type = typename nn_detail::element_type::type; // Pass through calls to operator* and operator-> transparently element_type &operator*() const { return *ptr; } element_type *operator->() const { return &*ptr; } // Expose the underlying PtrType operator const PtrType &() const & { return ptr; } operator PtrType &&() && { return std::move(ptr); } // Trying to use the assignment operator to assign a nn to a PtrType // using the // above conversion functions hits an ambiguous resolution bug in clang: // http://llvm.org/bugs/show_bug.cgi?id=18359 // While that exists, we can use these as simple ways of accessing the // underlying type // (instead of workarounds calling the operators explicitly or adding a // constructor call). const PtrType &as_nullable() const & { return ptr; } PtrType &&as_nullable() && { return std::move(ptr); } // Can't convert to bool (that would be silly). The explicit delete results in // "value of type 'nn<...>' is not contextually convertible to 'bool'", rather // than // "no viable conversion", which is a bit more clear. operator bool() const = delete; // Explicitly deleted constructors. These help produce clearer error messages, // as trying // to use them will result in clang printing the whole line, including the // comment. nn(std::nullptr_t) = delete; // nullptr is not allowed here nn &operator=(std::nullptr_t) = delete; // nullptr is not allowed here nn(PtrType) = delete; // must use NN_CHECK_ASSERT or NN_CHECK_THROW nn &operator=(PtrType) = delete; // must use NN_CHECK_ASSERT or NN_CHECK_THROW //PROJ_DLL ~nn(); // Semi-private constructor for use by NN_CHECK_ macros. explicit nn(i_promise_i_checked_for_null_t, const PtrType &arg) noexcept : ptr(arg) { } explicit nn(i_promise_i_checked_for_null_t, PtrType &&arg) noexcept : ptr(std::move(arg)) { } // Type-converting move and copy constructor. We have four separate cases // here, for // implicit and explicit move and copy. template ::value && !std::is_convertible::value, int>::type = 0> explicit nn(const nn &other) : ptr(other.operator const OtherType &()) {} template ::value && !std::is_convertible::value && !std::is_pointer::value, int>::type = 0> explicit nn(nn &&other) : ptr(std::move(other).operator OtherType &&()) {} template ::value, int>::type = 0> nn(const nn &other) : ptr(other.operator const OtherType &()) {} template < typename OtherType, typename std::enable_if::value && !std::is_pointer::value, int>::type = 0> nn(nn &&other) : ptr(std::move(other).operator OtherType &&()) {} // A type-converting move and copy assignment operator aren't necessary; // writing // "base_ptr = derived_ptr;" will run the type-converting constructor followed // by the // implicit move assignment operator. // Two-argument constructor, designed for use with the shared_ptr aliasing // constructor. // This will not be instantiated if PtrType doesn't have a suitable // constructor. template < typename OtherType, typename std::enable_if< std::is_constructible::value, int>::type = 0> nn(const nn &ownership_ptr, nn target_ptr) : ptr(ownership_ptr.operator const OtherType &(), target_ptr) {} // Comparisons. Other comparisons are implemented in terms of these. template friend bool operator==(const nn &, const R &); template friend bool operator==(const L &, const nn &); template friend bool operator==(const nn &, const nn &); template friend bool operator<(const nn &, const R &); template friend bool operator<(const L &, const nn &); template friend bool operator<(const nn &, const nn &); // ostream operator template friend std::ostream &operator<<(std::ostream &, const nn &); template element_type *get() const { return ptr.get(); } private: // Backing pointer PtrType ptr; }; // Base comparisons - these are friends of nn, so they can access .ptr // directly. template bool operator==(const nn &l, const R &r) { return l.ptr == r; } template bool operator==(const L &l, const nn &r) { return l == r.ptr; } template bool operator==(const nn &l, const nn &r) { return l.ptr == r.ptr; } template bool operator<(const nn &l, const R &r) { return l.ptr < r; } template bool operator<(const L &l, const nn &r) { return l < r.ptr; } template bool operator<(const nn &l, const nn &r) { return l.ptr < r.ptr; } template std::ostream &operator<<(std::ostream &os, const nn &p) { return os << p.ptr; } #define NN_DERIVED_OPERATORS(op, base) \ template \ bool operator op(const nn &l, const R &r) { \ return base; \ } \ template \ bool operator op(const L &l, const nn &r) { \ return base; \ } \ template \ bool operator op(const nn &l, const nn &r) { \ return base; \ } NN_DERIVED_OPERATORS(>, r < l) NN_DERIVED_OPERATORS(<=, !(l > r)) NN_DERIVED_OPERATORS(>=, !(l < r)) NN_DERIVED_OPERATORS(!=, !(l == r)) #undef NN_DERIVED_OPERATORS // Convenience typedefs template using nn_unique_ptr = nn>; template using nn_shared_ptr = nn>; template nn_unique_ptr nn_make_unique(Args &&... args) { return nn_unique_ptr( i_promise_i_checked_for_null, std::unique_ptr(new T(std::forward(args)...))); } template nn_shared_ptr nn_make_shared(Args &&... args) { return nn_shared_ptr(i_promise_i_checked_for_null, std::make_shared(std::forward(args)...)); } template class nn_enable_shared_from_this : public std::enable_shared_from_this { public: using std::enable_shared_from_this::enable_shared_from_this; nn_shared_ptr nn_shared_from_this() { return nn_shared_ptr(i_promise_i_checked_for_null, this->shared_from_this()); } nn_shared_ptr nn_shared_from_this() const { return nn_shared_ptr(i_promise_i_checked_for_null, this->shared_from_this()); } }; template nn nn_addr(T &object) { return nn(i_promise_i_checked_for_null, &object); } template nn nn_addr(const T &object) { return nn(i_promise_i_checked_for_null, &object); } /* Non-nullable equivalents of shared_ptr's specialized casting functions. * These convert through a shared_ptr since nn> lacks the * ref-count-sharing cast * constructor, but thanks to moves there shouldn't be any significant extra * cost. */ template nn_shared_ptr nn_static_pointer_cast(const nn_shared_ptr &org_ptr) { auto raw_ptr = static_cast::element_type *>(org_ptr.get()); std::shared_ptr nullable_ptr(org_ptr.as_nullable(), raw_ptr); return nn_shared_ptr(i_promise_i_checked_for_null, std::move(nullable_ptr)); } template std::shared_ptr nn_dynamic_pointer_cast(const nn_shared_ptr &org_ptr) { auto raw_ptr = dynamic_cast::element_type *>(org_ptr.get()); if (!raw_ptr) { return nullptr; } else { return std::shared_ptr(org_ptr.as_nullable(), raw_ptr); } } template nn_shared_ptr nn_const_pointer_cast(const nn_shared_ptr &org_ptr) { auto raw_ptr = const_cast::element_type *>(org_ptr.get()); std::shared_ptr nullable_ptr(org_ptr.as_nullable(), raw_ptr); return nn_shared_ptr(i_promise_i_checked_for_null, std::move(nullable_ptr)); } } } /* end namespace dropbox::oxygen */ namespace std { template struct hash<::dropbox::oxygen::nn> { using argument_type = ::dropbox::oxygen::nn; using result_type = size_t; result_type operator()(const argument_type &obj) const { return std::hash{}(obj.as_nullable()); } }; } /* These have to be macros because our internal versions invoke other macros * that use * __FILE__ and __LINE__, which we want to correctly point to the call site. * We're looking * forward to std::source_location :) * * The lambdas ensure that we only evaluate _e once. */ #include // NN_CHECK_ASSERT takes a pointer of type PT (e.g. raw pointer, std::shared_ptr // or std::unique_ptr) // and returns a non-nullable pointer of type nn. // Triggers an assertion if expression evaluates to null. #define NN_CHECK_ASSERT(_e) \ (([&](typename std::remove_reference::type p) { \ /* note: assert() alone is not sufficient here, because it might be \ * compiled out. */ \ assert(p &&#_e " must not be null"); \ if (!p) \ std::abort(); \ return dropbox::oxygen::nn< \ typename std::remove_reference::type>( \ dropbox::oxygen::i_promise_i_checked_for_null, std::move(p)); \ })(_e)) // NN_CHECK_THROW takes a pointer of type PT (e.g. raw pointer, std::shared_ptr // or std::unique_ptr) // and returns a non-nullable pointer of type nn. // Throws if expression evaluates to null. #define NN_CHECK_THROW(_e) \ (([&](typename std::remove_reference::type p) { \ if (!p) \ throw std::runtime_error(#_e " must not be null"); \ return dropbox::oxygen::nn< \ typename std::remove_reference::type>( \ dropbox::oxygen::i_promise_i_checked_for_null, std::move(p)); \ })(_e)) proj-9.6.0/include/proj/util.hpp000664 001754 001755 00000063241 14764566077 016512 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef UTIL_HH_INCLUDED #define UTIL_HH_INCLUDED #if !(__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900)) #error Must have C++11 or newer. #endif // windows.h can conflict with Criterion::STRICT #ifdef STRICT #undef STRICT #endif #include #include #include #include #include #include #ifndef NS_PROJ /** osgeo namespace */ namespace osgeo { /** osgeo.proj namespace */ namespace proj {} } // namespace osgeo #endif //! @cond Doxygen_Suppress #ifndef PROJ_DLL #if defined(_MSC_VER) #ifdef PROJ_MSVC_DLL_EXPORT #define PROJ_DLL __declspec(dllexport) #else #define PROJ_DLL __declspec(dllimport) #endif #elif defined(__GNUC__) #define PROJ_DLL __attribute__((visibility("default"))) #else #define PROJ_DLL #endif #endif #ifndef PROJ_MSVC_DLL #if defined(_MSC_VER) #define PROJ_MSVC_DLL PROJ_DLL #define PROJ_GCC_DLL #define PROJ_INTERNAL #elif defined(__GNUC__) #define PROJ_MSVC_DLL #define PROJ_GCC_DLL PROJ_DLL #if !defined(__MINGW32__) #define PROJ_INTERNAL __attribute__((visibility("hidden"))) #else #define PROJ_INTERNAL #endif #else #define PROJ_MSVC_DLL #define PROJ_GCC_DLL #define PROJ_INTERNAL #endif #define PROJ_FOR_TEST PROJ_DLL #endif #include "nn.hpp" /* To allow customizing the base namespace of PROJ */ #ifdef PROJ_INTERNAL_CPP_NAMESPACE #define NS_PROJ osgeo::internalproj #define NS_PROJ_START \ namespace osgeo { \ namespace internalproj { #define NS_PROJ_END \ } \ } #else #ifndef NS_PROJ #define NS_PROJ osgeo::proj #define NS_PROJ_START \ namespace osgeo { \ namespace proj { #define NS_PROJ_END \ } \ } #endif #endif // Private-implementation (Pimpl) pattern #define PROJ_OPAQUE_PRIVATE_DATA \ private: \ struct PROJ_INTERNAL Private; \ std::unique_ptr d; \ \ protected: \ PROJ_INTERNAL Private *getPrivate() noexcept { return d.get(); } \ PROJ_INTERNAL const Private *getPrivate() const noexcept { \ return d.get(); \ } \ \ private: // To include in the protected/private section of a class definition, // to be able to call make_shared on a protected/private constructor #define INLINED_MAKE_SHARED \ template \ static std::shared_ptr make_shared(Args &&...args) { \ return std::shared_ptr(new T(std::forward(args)...)); \ } \ template \ static util::nn_shared_ptr nn_make_shared(Args &&...args) { \ return util::nn_shared_ptr( \ util::i_promise_i_checked_for_null, \ std::shared_ptr(new T(std::forward(args)...))); \ } // To include in the protected/private section of a class definition, // to be able to call make_unique on a protected/private constructor #define INLINED_MAKE_UNIQUE \ template \ static std::unique_ptr make_unique(Args &&...args) { \ return std::unique_ptr(new T(std::forward(args)...)); \ } #ifdef DOXYGEN_ENABLED #define PROJ_FRIEND(mytype) #define PROJ_FRIEND_OPTIONAL(mytype) #else #define PROJ_FRIEND(mytype) friend class mytype #define PROJ_FRIEND_OPTIONAL(mytype) friend class util::optional #endif #ifndef PROJ_PRIVATE #define PROJ_PRIVATE public #endif #if defined(__GNUC__) #define PROJ_NO_INLINE __attribute__((noinline)) #define PROJ_NO_RETURN __attribute__((noreturn)) // Applies to a function that has no side effect. #define PROJ_PURE_DECL const noexcept __attribute__((pure)) #else #define PROJ_NO_RETURN #define PROJ_NO_INLINE #define PROJ_PURE_DECL const noexcept #endif #define PROJ_PURE_DEFN const noexcept //! @endcond NS_PROJ_START //! @cond Doxygen_Suppress namespace io { class DatabaseContext; using DatabaseContextPtr = std::shared_ptr; } // namespace io //! @endcond /** osgeo.proj.util namespace. * * \brief A set of base types from ISO 19103, \ref GeoAPI and other PROJ * specific classes. */ namespace util { //! @cond Doxygen_Suppress // Import a few classes from nn.hpp to expose them under our ::util namespace // for conveniency. using ::dropbox::oxygen::i_promise_i_checked_for_null; using ::dropbox::oxygen::nn; using ::dropbox::oxygen::nn_dynamic_pointer_cast; using ::dropbox::oxygen::nn_make_shared; // For return statements, to convert from derived type to base type using ::dropbox::oxygen::nn_static_pointer_cast; template using nn_shared_ptr = nn>; // Possible implementation of C++14 std::remove_reference_t // (cf https://en.cppreference.com/w/cpp/types/remove_cv) template using remove_reference_t = typename std::remove_reference::type; // Possible implementation of C++14 std::remove_cv_t // (cf https://en.cppreference.com/w/cpp/types/remove_cv) template using remove_cv_t = typename std::remove_cv::type; // Possible implementation of C++20 std::remove_cvref // (cf https://en.cppreference.com/w/cpp/types/remove_cvref) template struct remove_cvref { typedef remove_cv_t> type; }; #define NN_NO_CHECK(p) \ ::dropbox::oxygen::nn< \ typename ::NS_PROJ::util::remove_cvref::type>( \ ::dropbox::oxygen::i_promise_i_checked_for_null, (p)) //! @endcond // To avoid formatting differences between clang-format 3.8 and 7 #define PROJ_NOEXCEPT noexcept //! @cond Doxygen_Suppress // isOfExactType(*p) checks that the type of *p is exactly MyType template inline bool isOfExactType(const ObjectT &o) { return typeid(TemplateT).hash_code() == typeid(o).hash_code(); } //! @endcond /** \brief Loose transposition of [std::optional] * (https://en.cppreference.com/w/cpp/utility/optional) available from C++17. */ template class optional { public: //! @cond Doxygen_Suppress inline optional() : hasVal_(false) {} inline explicit optional(const T &val) : hasVal_(true), val_(val) {} inline explicit optional(T &&val) : hasVal_(true), val_(std::forward(val)) {} inline optional(const optional &) = default; inline optional(optional &&other) PROJ_NOEXCEPT : hasVal_(other.hasVal_), // cppcheck-suppress functionStatic val_(std::forward(other.val_)) { other.hasVal_ = false; } inline optional &operator=(const T &val) { hasVal_ = true; val_ = val; return *this; } inline optional &operator=(T &&val) noexcept { hasVal_ = true; val_ = std::forward(val); return *this; } inline optional &operator=(const optional &) = default; inline optional &operator=(optional &&other) noexcept { hasVal_ = other.hasVal_; val_ = std::forward(other.val_); other.hasVal_ = false; return *this; } inline T *operator->() { return &val_; } inline T &operator*() { return val_; } //! @endcond /** Returns a pointer to the contained value. */ inline const T *operator->() const { return &val_; } /** Returns a reference to the contained value. */ inline const T &operator*() const { return val_; } /** Return whether the optional has a value */ inline explicit operator bool() const noexcept { return hasVal_; } /** Return whether the optional has a value */ inline bool has_value() const noexcept { return hasVal_; } private: bool hasVal_; T val_{}; }; // --------------------------------------------------------------------------- class BaseObject; /** Shared pointer of BaseObject. */ using BaseObjectPtr = std::shared_ptr; #if 1 /** Non-null shared pointer of BaseObject. */ struct BaseObjectNNPtr : public util::nn { // This trick enables to avoid inlining of the destructor. // This is mostly an alias of the base class. //! @cond Doxygen_Suppress template // cppcheck-suppress noExplicitConstructor BaseObjectNNPtr(const util::nn> &x) : util::nn(x) {} template // cppcheck-suppress noExplicitConstructor BaseObjectNNPtr(util::nn> &&x) noexcept : util::nn(NN_NO_CHECK(std::move(x.as_nullable()))) {} explicit BaseObjectNNPtr(::dropbox::oxygen::i_promise_i_checked_for_null_t, BaseObjectPtr &&arg) noexcept : util::nn(i_promise_i_checked_for_null, std::move(arg)) {} BaseObjectNNPtr(const BaseObjectNNPtr &) = default; BaseObjectNNPtr &operator=(const BaseObjectNNPtr &) = default; PROJ_DLL ~BaseObjectNNPtr(); //! @endcond }; #else using BaseObjectNNPtr = util::nn; #endif /** \brief Class that can be derived from, to emulate Java's Object behavior. */ class PROJ_GCC_DLL BaseObject { public: //! @cond Doxygen_Suppress virtual PROJ_DLL ~BaseObject(); //! @endcond PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL BaseObjectNNPtr shared_from_this() const; //! @endcond protected: PROJ_INTERNAL BaseObject(); PROJ_INTERNAL void assignSelf(const BaseObjectNNPtr &self); PROJ_INTERNAL BaseObject &operator=(BaseObject &&other); private: PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Interface for an object that can be compared to another. */ class PROJ_GCC_DLL IComparable { public: //! @cond Doxygen_Suppress PROJ_DLL virtual ~IComparable(); //! @endcond /** \brief Comparison criterion. */ enum class PROJ_MSVC_DLL Criterion { /** All properties are identical. */ STRICT, /** The objects are equivalent for the purpose of coordinate * operations. They can differ by the name of their objects, * identifiers, other metadata. * Parameters may be expressed in different units, provided that the * value is (with some tolerance) the same once expressed in a * common unit. */ EQUIVALENT, /** Same as EQUIVALENT, relaxed with an exception that the axis order * of the base CRS of a DerivedCRS/ProjectedCRS or the axis order of * a GeographicCRS is ignored. Only to be used * with DerivedCRS/ProjectedCRS/GeographicCRS */ EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS, }; PROJ_DLL bool isEquivalentTo(const IComparable *other, Criterion criterion = Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const; PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL virtual bool _isEquivalentTo( const IComparable *other, Criterion criterion = Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const = 0; //! @endcond }; // --------------------------------------------------------------------------- /** \brief Encapsulate standard datatypes in an object. */ class BoxedValue final : public BaseObject { public: //! @cond Doxygen_Suppress /** Type of data stored in the BoxedValue. */ enum class Type { /** a std::string */ STRING, /** an integer */ INTEGER, /** a boolean */ BOOLEAN }; //! @endcond // cppcheck-suppress noExplicitConstructor PROJ_DLL BoxedValue(const char *stringValueIn); // needed to avoid the bool // constructor to be taken ! // cppcheck-suppress noExplicitConstructor PROJ_DLL BoxedValue(const std::string &stringValueIn); // cppcheck-suppress noExplicitConstructor PROJ_DLL BoxedValue(int integerValueIn); // cppcheck-suppress noExplicitConstructor PROJ_DLL BoxedValue(bool booleanValueIn); PROJ_PRIVATE : //! @cond Doxygen_Suppress PROJ_INTERNAL BoxedValue(const BoxedValue &other); PROJ_DLL ~BoxedValue() override; PROJ_INTERNAL const Type &type() const; PROJ_INTERNAL const std::string &stringValue() const; PROJ_INTERNAL int integerValue() const; PROJ_INTERNAL bool booleanValue() const; //! @endcond private: PROJ_OPAQUE_PRIVATE_DATA BoxedValue &operator=(const BoxedValue &) = delete; PROJ_INTERNAL BoxedValue(); }; /** Shared pointer of BoxedValue. */ using BoxedValuePtr = std::shared_ptr; /** Non-null shared pointer of BoxedValue. */ using BoxedValueNNPtr = util::nn; // --------------------------------------------------------------------------- class ArrayOfBaseObject; /** Shared pointer of ArrayOfBaseObject. */ using ArrayOfBaseObjectPtr = std::shared_ptr; /** Non-null shared pointer of ArrayOfBaseObject. */ using ArrayOfBaseObjectNNPtr = util::nn; /** \brief Array of BaseObject. */ class ArrayOfBaseObject final : public BaseObject { public: //! @cond Doxygen_Suppress PROJ_DLL ~ArrayOfBaseObject() override; //! @endcond PROJ_DLL void add(const BaseObjectNNPtr &obj); PROJ_DLL static ArrayOfBaseObjectNNPtr create(); PROJ_PRIVATE : //! @cond Doxygen_Suppress std::vector::const_iterator begin() const; std::vector::const_iterator end() const; bool empty() const; //! @endcond protected: ArrayOfBaseObject(); INLINED_MAKE_SHARED private: ArrayOfBaseObject(const ArrayOfBaseObject &other) = delete; ArrayOfBaseObject &operator=(const ArrayOfBaseObject &other) = delete; PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- /** \brief Wrapper of a std::map */ class PropertyMap { public: PROJ_DLL PropertyMap(); //! @cond Doxygen_Suppress PROJ_DLL PropertyMap(const PropertyMap &other); PROJ_DLL ~PropertyMap(); //! @endcond PROJ_DLL PropertyMap &set(const std::string &key, const BaseObjectNNPtr &val); //! @cond Doxygen_Suppress template inline PropertyMap &set(const std::string &key, const nn_shared_ptr &val) { return set( key, BaseObjectNNPtr(i_promise_i_checked_for_null, BaseObjectPtr(val.as_nullable(), val.get()))); } //! @endcond // needed to avoid the bool constructor to be taken ! PROJ_DLL PropertyMap &set(const std::string &key, const char *val); PROJ_DLL PropertyMap &set(const std::string &key, const std::string &val); PROJ_DLL PropertyMap &set(const std::string &key, int val); PROJ_DLL PropertyMap &set(const std::string &key, bool val); PROJ_DLL PropertyMap &set(const std::string &key, const std::vector &array); PROJ_PRIVATE : //! @cond Doxygen_Suppress const BaseObjectNNPtr * get(const std::string &key) const; // throw(InvalidValueTypeException) bool getStringValue(const std::string &key, std::string &outVal) const; bool getStringValue(const std::string &key, optional &outVal) const; void unset(const std::string &key); static PropertyMap createAndSetName(const char *name); static PropertyMap createAndSetName(const std::string &name); //! @endcond private: PropertyMap &operator=(const PropertyMap &) = delete; PROJ_OPAQUE_PRIVATE_DATA }; // --------------------------------------------------------------------------- class LocalName; /** Shared pointer of LocalName. */ using LocalNamePtr = std::shared_ptr; /** Non-null shared pointer of LocalName. */ using LocalNameNNPtr = util::nn; class NameSpace; /** Shared pointer of NameSpace. */ using NameSpacePtr = std::shared_ptr; /** Non-null shared pointer of NameSpace. */ using NameSpaceNNPtr = util::nn; class GenericName; /** Shared pointer of GenericName. */ using GenericNamePtr = std::shared_ptr; /** Non-null shared pointer of GenericName. */ using GenericNameNNPtr = util::nn; // --------------------------------------------------------------------------- /** \brief A sequence of identifiers rooted within the context of a namespace. * * \remark Simplified version of [GenericName] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/util/GenericName.html) * from \ref GeoAPI */ class GenericName : public BaseObject { public: //! @cond Doxygen_Suppress PROJ_DLL virtual ~GenericName() override; //! @endcond /** \brief Return the scope of the object, possibly a global one. */ PROJ_DLL virtual const NameSpacePtr scope() const = 0; /** \brief Return the LocalName as a string. */ PROJ_DLL virtual std::string toString() const = 0; /** \brief Return a fully qualified name corresponding to the local name. * * The namespace of the resulting name is a global one. */ PROJ_DLL virtual GenericNameNNPtr toFullyQualifiedName() const = 0; protected: GenericName(); GenericName(const GenericName &other); private: PROJ_OPAQUE_PRIVATE_DATA GenericName &operator=(const GenericName &other) = delete; }; // --------------------------------------------------------------------------- /** \brief A domain in which names given by strings are defined. * * \remark Simplified version of [NameSpace] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/util/NameSpace.html) * from \ref GeoAPI */ class NameSpace { public: //! @cond Doxygen_Suppress PROJ_DLL ~NameSpace(); //! @endcond PROJ_DLL bool isGlobal() const; PROJ_DLL const GenericNamePtr &name() const; protected: PROJ_FRIEND(NameFactory); PROJ_FRIEND(LocalName); explicit NameSpace(const GenericNamePtr &name); NameSpace(const NameSpace &other); NameSpaceNNPtr getGlobalFromThis() const; const std::string &separator() const; static const NameSpaceNNPtr GLOBAL; INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA NameSpace &operator=(const NameSpace &other) = delete; static NameSpaceNNPtr createGLOBAL(); }; // --------------------------------------------------------------------------- /** \brief Identifier within a NameSpace for a local object. * * Local names are names which are directly accessible to and maintained by a * NameSpace within which they are local, indicated by the scope. * * \remark Simplified version of [LocalName] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/util/LocalName.html) * from \ref GeoAPI */ class LocalName : public GenericName { public: //! @cond Doxygen_Suppress PROJ_DLL ~LocalName() override; //! @endcond PROJ_DLL const NameSpacePtr scope() const override; PROJ_DLL std::string toString() const override; PROJ_DLL GenericNameNNPtr toFullyQualifiedName() const override; protected: PROJ_FRIEND(NameFactory); PROJ_FRIEND(NameSpace); explicit LocalName(const std::string &nameIn); LocalName(const LocalName &other); LocalName(const NameSpacePtr &ns, const std::string &name); INLINED_MAKE_SHARED private: PROJ_OPAQUE_PRIVATE_DATA LocalName &operator=(const LocalName &other) = delete; }; // --------------------------------------------------------------------------- /** \brief Factory for generic names. * * \remark Simplified version of [NameFactory] * (http://www.geoapi.org/3.0/javadoc/org.opengis.geoapi/org/opengis/util/NameFactory.html) * from \ref GeoAPI */ class NameFactory { public: PROJ_DLL static NameSpaceNNPtr createNameSpace(const GenericNameNNPtr &name, const PropertyMap &properties); PROJ_DLL static LocalNameNNPtr createLocalName(const NameSpacePtr &scope, const std::string &name); PROJ_DLL static GenericNameNNPtr createGenericName(const NameSpacePtr &scope, const std::vector &parsedNames); }; // --------------------------------------------------------------------------- /** \brief Abstract class to define an enumeration of values. */ class CodeList { public: //! @cond Doxygen_Suppress PROJ_DLL ~CodeList(); //! @endcond /** Return the CodeList item as a string. */ // cppcheck-suppress functionStatic inline const std::string &toString() PROJ_PURE_DECL { return name_; } /** Return the CodeList item as a string. */ inline operator std::string() PROJ_PURE_DECL { return toString(); } //! @cond Doxygen_Suppress inline bool operator==(const CodeList &other) PROJ_PURE_DECL { return name_ == other.name_; } inline bool operator!=(const CodeList &other) PROJ_PURE_DECL { return name_ != other.name_; } //! @endcond protected: explicit CodeList(const std::string &nameIn) : name_(nameIn) {} CodeList(const CodeList &) = default; CodeList &operator=(const CodeList &other); private: std::string name_{}; }; // --------------------------------------------------------------------------- /** \brief Root exception class. */ class PROJ_GCC_DLL Exception : public std::exception { std::string msg_; public: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit Exception(const char *message); PROJ_INTERNAL explicit Exception(const std::string &message); PROJ_DLL Exception(const Exception &other); PROJ_DLL ~Exception() override; //! @endcond PROJ_DLL virtual const char *what() const noexcept override; }; // --------------------------------------------------------------------------- /** \brief Exception thrown when an invalid value type is set as the value of * a key of a PropertyMap. */ class PROJ_GCC_DLL InvalidValueTypeException : public Exception { public: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit InvalidValueTypeException(const char *message); PROJ_INTERNAL explicit InvalidValueTypeException( const std::string &message); PROJ_DLL InvalidValueTypeException(const InvalidValueTypeException &other); PROJ_DLL ~InvalidValueTypeException() override; //! @endcond }; // --------------------------------------------------------------------------- /** \brief Exception Thrown to indicate that the requested operation is not * supported. */ class PROJ_GCC_DLL UnsupportedOperationException : public Exception { public: //! @cond Doxygen_Suppress PROJ_INTERNAL explicit UnsupportedOperationException(const char *message); PROJ_INTERNAL explicit UnsupportedOperationException( const std::string &message); PROJ_DLL UnsupportedOperationException(const UnsupportedOperationException &other); PROJ_DLL ~UnsupportedOperationException() override; //! @endcond }; } // namespace util NS_PROJ_END #endif // UTIL_HH_INCLUDED proj-9.6.0/man/000775 001754 001755 00000000000 14764566152 013166 5ustar00e012349e012349000000 000000 proj-9.6.0/man/CMakeLists.txt000664 001754 001755 00000000243 14764566077 015733 0ustar00e012349e012349000000 000000 install(FILES man1/proj.1 man1/cs2cs.1 man1/geod.1 man1/cct.1 man1/gie.1 man1/projinfo.1 man1/projsync.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) proj-9.6.0/man/man1/000775 001754 001755 00000000000 14764566152 014022 5ustar00e012349e012349000000 000000 proj-9.6.0/man/man1/cct.1000664 001754 001755 00000022023 14764566077 014662 0ustar00e012349e012349000000 000000 .\" Man page generated from reStructuredText. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "CCT" "1" "15 Mar 2025" "9.6" "PROJ" .SH NAME cct \- Coordinate Conversion and Transformation .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 \fBcct\fP [\fB\-cIostvz\fP [args]] \fI+opt[=arg]\fP ... file ... .UNINDENT .UNINDENT .sp or .INDENT 0.0 .INDENT 3.5 \fBcct\fP [\fB\-cIostvz\fP [args]] {object_definition} file ... .UNINDENT .UNINDENT .sp Where {object_definition}\ is one of the possibilities accepted by \fI\%proj_create()\fP, provided it expresses a coordinate operation .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .IP \(bu 2 a proj\-string, .IP \(bu 2 a WKT string, .IP \(bu 2 an object code (like "EPSG:1671" "urn:ogc:def:coordinateOperation:EPSG::1671"), .IP \(bu 2 an object name. e.g. "ITRF2014 to ETRF2014 (1)". In that case as uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match. .IP \(bu 2 a OGC URN combining references for concatenated operations (e.g. "\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP") .IP \(bu 2 a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.4/projjson.schema.json\fP .UNINDENT .sp New in version 8.0.0. .sp \fBNOTE:\fP .INDENT 0.0 .INDENT 3.5 Before version 8.0.0 only proj\-strings could be used to instantiate operations in \fI\%cct\fP\&. .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp or .INDENT 0.0 .INDENT 3.5 \fBcct\fP [\fB\-cIostvz\fP [args]] {object_reference} file ... .UNINDENT .UNINDENT .sp where {object_reference} is a filename preceded by the \(aq@\(aq character. The file referenced by the {object_reference} must contain a valid {object_definition}. .INDENT 0.0 .INDENT 3.5 New in version 8.0.0. .UNINDENT .UNINDENT .SH DESCRIPTION .sp \fI\%cct\fP is a 4D equivalent to the \fI\%proj\fP projection program, performs transformation coordinate systems 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. .sp Note however that unlike the \fI\%proj\fP, angular input must be in decimal degrees. Any minutes and seconds given will be silently dropped. .sp The following control parameters can appear in any order: .INDENT 0.0 .TP .B \-c Specify input columns for (up to) 4 input parameters. Defaults to 1,2,3,4. .UNINDENT .INDENT 0.0 .TP .B \-d New in version 5.2.0. .sp Specify the number of decimals to round to in the output. .UNINDENT .INDENT 0.0 .TP .B \-I Do the inverse transformation. .UNINDENT .INDENT 0.0 .TP .B \-o , \-\-output= Specify the name of the output file. .UNINDENT .INDENT 0.0 .TP .B \-t
Where \fIa\fP 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). .UNINDENT .INDENT 0.0 .TP .B \-d New in version 5.2.0. .sp Specify the number of decimals to round to in the output. .UNINDENT .INDENT 0.0 .TP .B \-e Where \fIstring\fP is an arbitrary string to be output if an error is detected during data transformations. The default value is a three character string: \fB*\et*\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-E Causes the input coordinates to be copied to the output line prior to printing the converted values. .UNINDENT .INDENT 0.0 .TP .B \-l<[=id]> List projection identifiers that can be selected with \fI+proj\fP\&. \fBcs2cs \-l=id\fP gives expanded description of projection \fIid\fP, e.g. \fBcs2cs \-l=merc\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-lp List of all projection id that can be used with the \fI+proj\fP parameter. Equivalent to \fBcs2cs \-l\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-lP Expanded description of all projections that can be used with the \fI+proj\fP parameter. .UNINDENT .INDENT 0.0 .TP .B \-le List of all ellipsoids that can be selected with the \fI+ellps\fP parameters. .UNINDENT .INDENT 0.0 .TP .B \-lm List of hard\-coded prime meridians that can be selected with the \fI+pm\fP parameter. Note that this list is no longer updated, and some values may conflict with other sources. .UNINDENT .INDENT 0.0 .TP .B \-lu List of all distance units that can be selected with the \fI+units\fP parameter. .UNINDENT .INDENT 0.0 .TP .B \-r This options reverses the order of the first two expected inputs from that specified by the CRS to the opposite order. The third coordinate, typically height, remains third. .UNINDENT .INDENT 0.0 .TP .B \-s This options reverses the order of the first two expected outputs from that specified by the CRS to the opposite order. The third coordinate, typically height, remains third. .UNINDENT .INDENT 0.0 .TP .B \-f Where \fIformat\fP 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 \fB"%.2f"\fP for forward projection and DMS for inverse. .UNINDENT .INDENT 0.0 .TP .B \-w Where \fIn\fP is the number of significant fractional digits to employ for seconds output (when the option is not specified, \fB\-w3\fP is assumed). .UNINDENT .INDENT 0.0 .TP .B \-W Where \fIn\fP is the number of significant fractional digits to employ for seconds output. When \fB\-W\fP is employed the fields will be constant width with leading zeroes. Valid range: \-W0 through \-W8. .UNINDENT .INDENT 0.0 .TP .B \-v Causes a listing of cartographic control parameters tested for and used by the program to be printed prior to input data. .UNINDENT .INDENT 0.0 .TP .B \-\-area New in version 8.0.0. .sp Specify an area of interest to restrict the results when researching coordinate operations between 2 CRS. The area of interest can be specified either as a name (e.g "Denmark \- onshore") or a AUTHORITY:CODE (EPSG:3237) .sp This option is mutually exclusive with \fI\%\-\-bbox\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-\-bbox New in version 8.0.0. .sp Specify an area of interest to restrict the results when researching coordinate operations between 2 CRS. The area of interest is specified as a bounding box with geographic coordinates, expressed in degrees in a unspecified geographic CRS. \fIwest_long\fP and \fIeast_long\fP should be in the [\-180,180] range, and \fIsouth_lat\fP and \fInorth_lat\fP in the [\-90,90]. \fIwest_long\fP is generally lower than \fIeast_long\fP, except in the case where the area of interest crosses the antimeridian. .UNINDENT .INDENT 0.0 .TP .B \-\-only\-best[=yes|=no] New in version 9.2.0. .sp Force \fIcs2cs\fP to only use the best transformation known by PROJ. \fIcs2cs\fP will return an error if a grid needed for the best transformation is missing. .sp Best transformation should be understood as the most accurate transformation available among all relevant for the point to transform, and if all known grids required to perform such transformation were accessible (either locally or through network). .sp Note that the default value for this option can be also set with the \fBPROJ_ONLY_BEST_DEFAULT\fP environment variable, or with the \fBonly_best_default\fP setting of \fI\%proj.ini\fP (\fI\%\-\-only\-best\fP when specified overrides such default value). .UNINDENT .INDENT 0.0 .TP .B \-\-no\-ballpark New in version 8.0.0. .sp Disallow any coordinate operation that is, or contains, a \fI\%Ballpark transformation\fP .UNINDENT .INDENT 0.0 .TP .B \-\-accuracy New in version 8.0.0. .sp Sets the minimum desired accuracy for candidate coordinate operations. .UNINDENT .INDENT 0.0 .TP .B \-\-authority New in version 8.0.0. .sp This option can be used to restrict the authority of coordinate operations looked up in the database. When not specified, coordinate operations from any authority will be searched, with the restrictions set in the \fBauthority_to_authority_preference\fP database table related to the authority of the source/target CRS themselves. If authority is set to \fBany\fP, then coordinate operations from any authority will be searched If authority is a non\-empty string different of \fBany\fP, then coordinate operations will be searched only in that authority namespace (e.g \fBEPSG\fP). .sp This option is mutually exclusive with \fI\%\-\-bbox\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-\-3d New in version 9.1. .sp "Promote" 2D CRS(s) to their 3D version, where the vertical axis is the ellipsoidal height in metres, using the ellipsoid of the base geodetic CRS. Depending on PROJ versions and the exact nature of the CRS involved, especially before PROJ 9.1, a mix of 2D and 3D CRS could lead to 2D or 3D transformations. Starting with PROJ 9.1, both CRS need to be 3D for vertical transformation to possibly happen. .UNINDENT .INDENT 0.0 .TP .B \-\-s_epoch New in version 9.4. .sp Epoch of coordinates in the source CRS, as decimal year. Only applies to a dynamic CRS. .UNINDENT .INDENT 0.0 .TP .B \-\-t_epoch New in version 9.4. .sp Epoch of coordinates in the target CRS, as decimal year. Only applies to a dynamic CRS. .UNINDENT .sp The \fI+opt\fP run\-line arguments are associated with cartographic parameters. .sp The \fI\%cs2cs\fP program requires two coordinate reference system (CRS) definitions. The first (or primary is defined based on all projection parameters not appearing after the \fI+to\fP argument. All projection parameters appearing after the \fI+to\fP argument are considered the definition of the second CRS. If there is no second CRS defined, a geographic CRS based on the datum and ellipsoid of the source CRS is assumed. Note that the source and destination CRS can both of same or different nature (geographic, projected, compound CRS), or one of each and may have the same or different datums. .sp When using a WKT definition or a AUTHORITY:CODE, the axis order of the CRS will be enforced. So for example if using EPSG:4326, the first value expected (or returned) will be a latitude. .sp Internally, \fI\%cs2cs\fP uses the \fI\%proj_create_crs_to_crs()\fP function to compute the appropriate coordinate operation, so implementation details of this function directly impact the results returned by the program. .sp The environment parameter \fI\%PROJ_DATA\fP establishes the directory for resource files (database, datum shift grids, etc.) .sp One or more files (processed in left to right order) specify the source of data to be transformed. A \fB\-\fP 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. .sp 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 \fB\-f %.12f\fP for decimal degrees with 12 decimal places), while projected (cartesian) coordinates will be in linear (meter, feet) units. .SS Use of remote grids .sp New in version 7.0.0. .sp If the \fI\%PROJ_NETWORK\fP environment variable is set to \fBON\fP, \fI\%cs2cs\fP will attempt to use remote grids stored on CDN (Content Delivery Network) storage, when they are not available locally. .sp More details are available in the \fI\%Network capabilities\fP section. .SH EXAMPLES .SS Using PROJ strings .sp The following script .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C cs2cs +proj=latlong +datum=NAD83 +to +proj=utm +zone=10 +datum=NAD27 \-r <\fP [\fB\-afFIlptwW\fP [args]] [\fI+opt[=arg]\fP ...] file ... .sp \fBinvgeod\fP \fI+ellps=\fP [\fB\-afFIlptwW\fP [args]] [\fI+opt[=arg]\fP ...] file ... .UNINDENT .UNINDENT .SH DESCRIPTION .sp \fI\%geod\fP (direct) and \fI\%invgeod\fP (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 |f| < 1/50, where f is flattening. .sp \fI\%invgeod\fP may not be available on all platforms; in this case use \fI\%geod \-I\fP instead. .sp The following command\-line options can appear in any order: .INDENT 0.0 .TP .B \-I Specifies that the inverse geodesic computation is to be performed. May be used with execution of \fI\%geod\fP as an alternative to \fI\%invgeod\fP execution. .UNINDENT .INDENT 0.0 .TP .B \-a Latitude and longitudes of the initial and terminal points, forward and back azimuths and distance are output. .UNINDENT .INDENT 0.0 .TP .B \-t Where \fIa\fP specifies a character employed as the first character to denote a control line to be passed through without processing. .UNINDENT .INDENT 0.0 .TP .B \-le Gives a listing of all the ellipsoids that may be selected with the \fI+ellps=\fP option. .UNINDENT .INDENT 0.0 .TP .B \-lu Gives a listing of all the units that may be selected with the \fI+units=\fP option. (Default units are meters.) .UNINDENT .INDENT 0.0 .TP .B \-f Where \fIformat\fP is a printf format string to control the output form of the geographic coordinate values. The default mode is DMS. .UNINDENT .INDENT 0.0 .TP .B \-F Where \fIformat\fP is a printf format string to control the output form of the distance value. The default mode is \fB"%.3f"\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-w Where \fIn\fP is the number of significant fractional digits to employ for seconds output (when the option is not specified, \fB\-w3\fP is assumed). .UNINDENT .INDENT 0.0 .TP .B \-W Where \fIn\fP is the number of significant fractional digits to employ for seconds output. When \fB\-W\fP is employed the fields will be constant width with leading zeroes. .UNINDENT .INDENT 0.0 .TP .B \-p This option causes the azimuthal values to be output as unsigned DMS numbers between 0 and 360 degrees. Also note \fI\%\-f\fP\&. .UNINDENT .sp The \fI+opt\fP command\-line options are associated with geodetic parameters for specifying the ellipsoidal or sphere to use. 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. .sp See the PROJ documentation for a full list of these parameters and controls. .sp One or more files (processed in left to right order) specify the source of data to be transformed. A \fB\-\fP will specify the location of processing standard input. If no files are specified, the input is assumed to be from stdin. .sp 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. .sp 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 \fI\%\-f\fP 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. .sp The Earth\(aqs ellipsoidal figure may be selected in the same manner as program \fI\%proj\fP by using \fI+ellps=\fP, \fI+a=\fP, \fI+es=\fP, etc. .sp \fI\%geod\fP 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 \fI+lat_1=lat\fP and \fI+lon_1=long\fP parameters and either a terminus point \fI+lat_2=lat\fP and \fI+lon_2=long\fP or a distance and azimuth from the initial point with \fI+S=distance\fP and \fI+A=azimuth\fP must be specified. .sp If points along a geodesic are to be determined then either \fI+n_S=integer\fP specifying the number of intermediate points and/or \fI+del_S=distance\fP specifying the incremental distance between points must be specified. .sp To determine points along an arc equidistant from the initial point both \fI+del_A=angle\fP and \fI+n_A=integer\fP must be specified which determine the respective angular increments and number of points to be determined. .SH EXAMPLES .sp The following script determines the geodesic azimuths and distance in U.S. statute miles from Boston, MA, to Portland, OR: .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C geod +ellps=clrk66 \-I +units=us\-mi <, \-\-output Specify output file name .UNINDENT .INDENT 0.0 .TP .B \-v, \-\-verbose Verbose: Provide non\-essential informational output. Repeat \fI\%\-v\fP for more verbosity (e.g. \fB\-vv\fP) .UNINDENT .INDENT 0.0 .TP .B \-q, \-\-quiet Quiet: Opposite of verbose. In quiet mode not even errors are reported. Only interaction is through the return code (0 on success, non\-zero indicates number of FAILED tests) .UNINDENT .INDENT 0.0 .TP .B \-l, \-\-list List the PROJ internal system error codes .UNINDENT .INDENT 0.0 .TP .B \-\-version Print version number .UNINDENT .sp Tests for \fI\%gie\fP are defined in simple text files. Usually having the extension \fB\&.gie\fP\&. Test for \fI\%gie\fP are written in the purpose\-build command language for gie. The basic functionality of the gie command language is implemented through just 3 command verbs: \fBoperation\fP, which defines the PROJ operation to test, \fBaccept\fP, which defines the input coordinate to read, and \fBexpect\fP, which defines the result to expect. .sp A sample test file for \fI\%gie\fP that uses the three above basic commands looks like: .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Test output of the UTM projection \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- operation +proj=utm +zone=32 +ellps=GRS80 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- accept 12 55 expect 691_875.632_14 6_098_907.825_05 .ft P .fi .UNINDENT .UNINDENT .sp Parsing of a \fI\%gie\fP file starts at \fB\fP and ends when \fB\fP is reached. Anything before \fB\fP and after \fB\fP is not considered. Test cases are created by defining an \fI\%operation\fP which \fI\%accept\fP an input coordinate and \fI\%expect\fP an output coordinate. .sp Because \fI\%gie\fP tests are wrapped in the \fB\fP/\fB\fP tags it is also possible to add test cases to custom made \fI\%init files\fP\&. The tests will be ignore by PROJ when reading the init file with \fI+init\fP and \fI\%gie\fP ignores anything not wrapped in \fB\fP/\fB\fP\&. .sp \fI\%gie\fP tests are defined by a set of commands like \fI\%operation\fP, \fI\%accept\fP and \fI\%expect\fP in the example above. Together the commands make out the \fI\%gie\fP command language. Any line in a \fI\%gie\fP file that does not start with a command is ignored. In the example above it is seen how this can be used to add comments and styling to \fI\%gie\fP test files in order to make them more readable as well as documenting what the purpose of the various tests are. .sp Below the \fI\%gie command language\fP is explained in details. .SH EXAMPLES .INDENT 0.0 .IP 1. 3 Run all tests in a file with all debug information turned on .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C gie \-vvvv corner\-cases.gie .ft P .fi .UNINDENT .UNINDENT .INDENT 0.0 .IP 2. 3 Run all tests in several files .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C gie foo bar .ft P .fi .UNINDENT .UNINDENT .SH GIE COMMAND LANGUAGE .INDENT 0.0 .TP .B operation <+args> Define a PROJ operation to test. Example: .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=utm zone=32 ellps=GRS80 # test 4D function accept 12 55 0 0 expect 691875.63214 6098907.82501 0 0 # test 2D function accept 12 56 expect 687071.4391 6210141.3267 .ft P .fi .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B accept Define the input coordinate to read. Takes test coordinate. The coordinate can be defined by either 2, 3 or 4 values, where the first two values are the x\- and y\-components, the 3rd is the z\-component and the 4th is the time component. The number of components in the coordinate determines which version of the operation is tested (2D, 3D or 4D). Many coordinates can be accepted for one \fI\%operation\fP\&. For each \fI\%accept\fP an accompanying \fI\%expect\fP is needed. .sp Note that \fI\%gie\fP accepts the underscore (\fB_\fP) as a thousands separator. It is not required (in fact, it is entirely ignored by the input routine), but it significantly improves the readability of the very long strings of numbers typically required in projected coordinates. .sp See \fI\%operation\fP for an example. .UNINDENT .INDENT 0.0 .TP .B expect | Define the expected coordinate that will be returned from accepted coordinate passed though an operation. The expected coordinate can be defined by either 2, 3 or 4 components, similarly to \fI\%accept\fP\&. Many coordinates can be expected for one \fI\%operation\fP\&. For each \fI\%expect\fP an accompanying \fI\%accept\fP is needed. .sp See \fI\%operation\fP for an example. .sp In addition to expecting a coordinate it is also possible to expect a PROJ error code in case an operation can\(aqt be created. This is useful when testing that errors are caught and handled correctly. Below is an example of that tests that the pipeline operator fails correctly when a non\-invertible pipeline is constructed. .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=pipeline step proj=urm5 n=0.5 inv expect failure pjd_err_malformed_pipeline .ft P .fi .UNINDENT .UNINDENT .sp See \fI\%gie \-\-list\fP for a list of error codes that can be expected. .UNINDENT .INDENT 0.0 .TP .B tolerance The \fI\%tolerance\fP command controls how much accepted coordinates can deviate from the expected coordinate. This is handy to test that an operation meets a certain numerical tolerance threshold. Some operations are expected to be accurate within millimeters where others might only be accurate within a few meters. \fI\%tolerance\fP should .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=merc # test coordinate as returned by \(ga\(ga\(gaecho 12 55 | proj +proj=merc\(ga\(ga tolerance 1 cm accept 12 55 expect 1335833.89 7326837.72 # test that the same coordinate with a 50 m false easting as determined # by \(ga\(gaecho 12 55 |proj +proj=merc +x_0=50\(ga\(ga is still within a 100 m # tolerance of the unaltered coordinate from proj=merc tolerance 100 m accept 12 55 expect 1335883.89 7326837.72 .ft P .fi .UNINDENT .UNINDENT .sp The default tolerance is 0.5 mm. See \fI\%proj \-lu\fP for a list of possible units. .UNINDENT .INDENT 0.0 .TP .B roundtrip Do a roundtrip test of an operation. \fI\%roundtrip\fP needs a \fI\%operation\fP and a \fI\%accept\fP command to function. The accepted coordinate is passed to the operation first in it\(aqs forward mode, then the output from the forward operation is passed back to the inverse operation. This procedure is done \fBn\fP times. If the resulting coordinate is within the set tolerance of the initial coordinate, the test is passed. .sp Example with the default 100 iterations and the default tolerance: .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=merc accept 12 55 roundtrip .ft P .fi .UNINDENT .UNINDENT .sp Example with count and default tolerance: .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=merc accept 12 55 roundtrip 10000 .ft P .fi .UNINDENT .UNINDENT .sp Example with count and tolerance: .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=merc accept 12 55 roundtrip 10000 5 mm .ft P .fi .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B direction The \fI\%direction\fP command specifies in which direction an operation is performed. This can either be \fBforward\fP or \fBinverse\fP\&. An example of this is seen below where it is tested that a symmetrical transformation pipeline returns the same results in both directions. .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=pipeline zone=32 step proj=utm ellps=GRS80 step proj=utm ellps=GRS80 inv tolerance 0.1 mm accept 12 55 0 0 expect 12 55 0 0 # Now the inverse direction (still same result: the pipeline is symmetrical) direction inverse expect 12 55 0 0 .ft P .fi .UNINDENT .UNINDENT .sp The default direction is "forward". .UNINDENT .INDENT 0.0 .TP .B ignore This is especially useful in test cases that rely on a grid that is not guaranteed to be available. Below is an example of that situation. .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=hgridshift +grids=nzgd2kgrid0005.gsb ellps=GRS80 tolerance 1 mm ignore pjd_err_failed_to_load_grid accept 172.999892181021551 \-45.001620431954613 expect 173 \-45 .ft P .fi .UNINDENT .UNINDENT .sp See \fI\%gie \-\-list\fP for a list of error codes that can be ignored. .UNINDENT .INDENT 0.0 .TP .B require_grid Checks the availability of the grid . If it is not found, then all \fI\%accept\fP/\fI\%expect\fP pairs until the next \fI\%operation\fP will be skipped. \fI\%require_grid\fP can be repeated several times to specify several grids whose presence is required. .UNINDENT .INDENT 0.0 .TP .B echo Add user defined text to the output stream. See the example below. .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C echo ** Mercator projection tests ** operation +proj=merc accept 0 0 expect 0 0 .ft P .fi .UNINDENT .UNINDENT .sp which returns .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Reading file \(aqtest.gie\(aq ** Mercator projection test ** \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- total: 1 tests succeeded, 0 tests skipped, 0 tests failed. \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .ft P .fi .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .TP .B skip Skip any test after the first occurrence of \fI\%skip\fP\&. In the example below only the first test will be performed. The second test is skipped. This feature is mostly relevant for debugging when writing new test cases. .INDENT 7.0 .INDENT 3.5 .sp .nf .ft C operation proj=merc accept 0 0 expect 0 0 skip accept 0 1 expect 0 110579.9 .ft P .fi .UNINDENT .UNINDENT .UNINDENT .SH STRICT MODE .sp New in version 7.1. .sp A stricter variant of normal gie syntax can be used by wrapping gie commands between \fB\fP and \fB\fP\&. In strict mode, comment lines must start with a sharp character. Unknown commands will be considered as an error. A command can still be split on several lines, but intermediate lines must end with the space character followed by backslash to mark the continuation. .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C # This is a comment. The following line with multiple repeated characters too \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- # A command on several lines must use " \e" continuation operation proj=hgridshift +grids=nzgd2kgrid0005.gsb \e ellps=GRS80 tolerance 1 mm ignore pjd_err_failed_to_load_grid accept 172.999892181021551 \-45.001620431954613 expect 173 \-45 .ft P .fi .UNINDENT .UNINDENT .UNINDENT .UNINDENT .SH BACKGROUND .sp More importantly than being an acronym for "Geospatial Integrity Investigation Environment", gie were also the initials, user id, and USGS email address of Gerald Ian Evenden (1935\-\-2016), the geospatial visionary, who, already in the 1980s, started what was to become the PROJ of today. .sp Gerald\(aqs clear vision was that map projections are \fIjust special functions\fP\&. Some of them rather complex, most of them of two variables, but all of them \fIjust special functions\fP, and not particularly more special than the \fBsin()\fP, \fBcos()\fP, \fBtan()\fP, and \fBhypot()\fP already available in the C standard library. .sp And hence, according to Gerald, \fIthey should not be particularly much harder to use\fP, for a programmer, than the \fBsin()\fP\(aqs, \fBtan()\fP\(aqs and \fBhypot()\fP\(aqs so readily available. .sp Gerald\(aqs ingenuity also showed in the implementation of the vision, where he devised a comprehensive, yet simple, system of key\-value pairs for parameterising a map projection, and the highly flexible \fI\%PJ\fP struct, storing run\-time compiled versions of those key\-value pairs, hence making a map projection function call, \fBpj_fwd(PJ, point)\fP, as easy as a traditional function call like \fBhypot(x,y)\fP\&. .sp While today, we may have more formally well defined metadata systems (most prominent the OGC WKT2 representation), nothing comes close being as easily readable ("human compatible") as Gerald\(aqs key\-value system. This system in particular, and the PROJ system in general, was Gerald\(aqs great gift to anyone using and/or communicating about geodata. .sp It is only reasonable to name a program, keeping an eye on the integrity of the PROJ system, in honour of Gerald. .sp So in honour, and hopefully also in the spirit, of Gerald Ian Evenden (1935\-\-2016), this is the Geospatial Integrity Investigation Environment. .SH SEE ALSO .sp \fBproj(1)\fP, \fBcs2cs(1)\fP, \fBcct(1)\fP, \fBgeod(1)\fP, \fBprojinfo(1)\fP, \fBprojsync(1)\fP .SH BUGS .sp A list of known bugs can be found at \fI\%https://github.com/OSGeo/PROJ/issues\fP where new bug reports can be submitted to. .SH HOME PAGE .sp \fI\%https://proj.org/\fP .SH AUTHOR Thomas Knudsen .SH COPYRIGHT 1983-2025, PROJ contributors .\" Generated by docutils manpage writer. . proj-9.6.0/man/man1/proj.1000664 001754 001755 00000023205 14764566077 015066 0ustar00e012349e012349000000 000000 .\" Man page generated from reStructuredText. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "PROJ" "1" "15 Mar 2025" "9.6" "PROJ" .SH NAME proj \- Cartographic projection filter .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 \fBproj\fP [\fB\-beEfiIlmorsStTvVwW\fP] [args]] ([\fI+opt[=arg]\fP ...] | {crs}) file ... .sp \fBinvproj\fP [\fB\-beEfiIlmorsStTvVwW\fP] [args]] ([\fI+opt[=arg]\fP ...] | {crs}) file ... .UNINDENT .UNINDENT .SH DESCRIPTION .sp \fI\%proj\fP and \fI\%invproj\fP perform respective forward and inverse conversion of cartographic data to or from cartesian data with a wide range of selectable projection functions. .sp \fI\%invproj\fP may not be available on all platforms; in this case use \fI\%proj \-I\fP instead. .sp The following control parameters can appear in any order .INDENT 0.0 .TP .B \-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 \fI\%proj\fP is a child process and allows bypassing formatting operations. .UNINDENT .INDENT 0.0 .TP .B \-d .UNINDENT .sp New in version 5.2.0: Specify the number of decimals to round to in the output. .INDENT 0.0 .TP .B \-i Selects binary input only (see \fI\%\-b\fP). .UNINDENT .INDENT 0.0 .TP .B \-I Alternate method to specify inverse projection. Redundant when used with \fI\%invproj\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-o Selects binary output only (see \fI\%\-b\fP). .UNINDENT .INDENT 0.0 .TP .B \-t Where \fIa\fP 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). .UNINDENT .INDENT 0.0 .TP .B \-e Where \fIstring\fP is an arbitrary string to be output if an error is detected during data transformations. The default value is a three character string: \fB*\et*\fP\&. Note that if the \fI\%\-b\fP, \fI\%\-i\fP or \fI\%\-o\fP options are employed, an error is returned as HUGE_VAL value for both return values. .UNINDENT .INDENT 0.0 .TP .B \-E Causes the input coordinates to be copied to the output line prior to printing the converted values. .UNINDENT .INDENT 0.0 .TP .B \-l<[=id]> List projection identifiers that can be selected with \fI+proj\fP\&. \fBproj \-l=id\fP gives expanded description of projection \fIid\fP, e.g. \fBproj \-l=merc\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-lp List of all projection id that can be used with the \fI+proj\fP parameter. Equivalent to \fBproj \-l\fP\&. .UNINDENT .INDENT 0.0 .TP .B \-lP Expanded description of all projections that can be used with the \fI+proj\fP parameter. .UNINDENT .INDENT 0.0 .TP .B \-le List of all ellipsoids that can be selected with the \fI+ellps\fP parameters. .UNINDENT .INDENT 0.0 .TP .B \-lu List of all distance units that can be selected with the \fI+units\fP parameter. .UNINDENT .INDENT 0.0 .TP .B \-r This options reverses the order of the expected input from longitude\-latitude or x\-y to latitude\-longitude or y\-x. .UNINDENT .INDENT 0.0 .TP .B \-s This options reverses the order of the output from x\-y or longitude\-latitude to y\-x or latitude\-longitude. .UNINDENT .INDENT 0.0 .TP .B \-S Causes estimation of meridional 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 meridional and parallel scales factors will be equal and angular distortion zero. Equal area projections will have an area factor of 1. .UNINDENT .INDENT 0.0 .TP .B \-m The cartesian data may be scaled by the \fImult\fP parameter. When processing data in a forward projection mode the cartesian output values are multiplied by \fImult\fP otherwise the input cartesian values are divided by \fImult\fP before inverse projection. If the first two characters of \fImult\fP are 1/ or 1: then the reciprocal value of \fImult\fP is employed. .UNINDENT .INDENT 0.0 .TP .B \-f Where \fIformat\fP 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 \fB"%.2f"\fP for forward projection and DMS for inverse. .UNINDENT .INDENT 0.0 .TP .B \-w Where \fIn\fP is the number of significant fractional digits to employ for seconds output (when the option is not specified, \fB\-w3\fP is assumed). .UNINDENT .INDENT 0.0 .TP .B \-W Where \fIn\fP is the number of significant fractional digits to employ for seconds output. When \fB\-W\fP is employed the fields will be constant width with leading zeroes. .UNINDENT .INDENT 0.0 .TP .B \-v Causes a listing of cartographic control parameters tested for and used by the program to be printed prior to input data. .UNINDENT .INDENT 0.0 .TP .B \-V This option causes an expanded annotated listing of the characteristics of the projected point. \fI\%\-v\fP is implied with this option. .UNINDENT .sp The \fI+opt\fP run\-line arguments are associated with cartographic parameters. Additional projection control parameters may be contained in two auxiliary control files: the first is optionally referenced with the \fI+init=file:id\fP 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 \fI\%PROJ_DATA\fP establishes the default directory for a file reference without an absolute path. This is also used for supporting files like datum shift files. .sp New in version 9.3.0: \fI{crs}\fP is one of the possibilities accepted by :c:\fBproj_create()\fP, provided it expresses a projected CRS, like a WKT string, an object code (like "EPSG:32632") a PROJJSON string, etc. The projection computed will be those of the map projection implied by the transformation from the base geographic CRS of the projected CRS to the projected CRS. .sp One or more files (processed in left to right order) specify the source of data to be converted. A \fB\-\fP 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. .sp 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 be in DMS (if the \fB\-w\fP switch is not employed) and precise to 0.001" with trailing, zero\-valued minute\-second fields deleted. .SH EXAMPLE .sp The following script .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C proj +proj=utm +zone=12 \-r < my_crs.sql cat my_crs.sql # Initialize an auxiliary database with the schema of the reference database echo ".schema" | sqlite3 /path/to/proj.db | sqlite3 aux.db # Append the content of the definition of HOBU:MY_CRS sqlite3 aux.db < my_crs.db # Check that everything works OK projinfo \-\-aux\-db\-path aux.db HOBU:MY_CRS .ft P .fi .UNINDENT .UNINDENT .sp or more simply: .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C # Create an auxiliary database with the definition of a custom CRS. projinfo "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs" \-\-output\-id HOBU:MY_CRS \-\-dump\-db\-structure | sqlite3 aux.db # Check that everything works OK projinfo \-\-aux\-db\-path aux.db HOBU:MY_CRS .ft P .fi .UNINDENT .UNINDENT .sp Output: .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C INSERT INTO geodetic_crs VALUES(\(aqHOBU\(aq,\(aqGEODETIC_CRS_MY_CRS\(aq,\(aqunknown\(aq,\(aq\(aq,\(aqgeographic 2D\(aq,\(aqEPSG\(aq,\(aq6424\(aq,\(aqEPSG\(aq,\(aq6326\(aq,NULL,0); INSERT INTO usage VALUES(\(aqHOBU\(aq,\(aqUSAGE_GEODETIC_CRS_MY_CRS\(aq,\(aqgeodetic_crs\(aq,\(aqHOBU\(aq,\(aqGEODETIC_CRS_MY_CRS\(aq,\(aqPROJ\(aq,\(aqEXTENT_UNKNOWN\(aq,\(aqPROJ\(aq,\(aqSCOPE_UNKNOWN\(aq); INSERT INTO conversion VALUES(\(aqHOBU\(aq,\(aqCONVERSION_MY_CRS\(aq,\(aqunknown\(aq,\(aq\(aq,\(aqEPSG\(aq,\(aq9805\(aq,\(aqMercator (variant B)\(aq,\(aqEPSG\(aq,\(aq8823\(aq,\(aqLatitude of 1st standard parallel\(aq,5,\(aqEPSG\(aq,\(aq9122\(aq,\(aqEPSG\(aq,\(aq8802\(aq,\(aqLongitude of natural origin\(aq,0,\(aqEPSG\(aq,\(aq9122\(aq,\(aqEPSG\(aq,\(aq8806\(aq,\(aqFalse easting\(aq,0,\(aqEPSG\(aq,\(aq9001\(aq,\(aqEPSG\(aq,\(aq8807\(aq,\(aqFalse northing\(aq,0,\(aqEPSG\(aq,\(aq9001\(aq,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES(\(aqHOBU\(aq,\(aqUSAGE_CONVERSION_MY_CRS\(aq,\(aqconversion\(aq,\(aqHOBU\(aq,\(aqCONVERSION_MY_CRS\(aq,\(aqPROJ\(aq,\(aqEXTENT_UNKNOWN\(aq,\(aqPROJ\(aq,\(aqSCOPE_UNKNOWN\(aq); INSERT INTO projected_crs VALUES(\(aqHOBU\(aq,\(aqMY_CRS\(aq,\(aqmy_crs\(aq,\(aq\(aq,\(aqEPSG\(aq,\(aq4400\(aq,\(aqHOBU\(aq,\(aqGEODETIC_CRS_MY_CRS\(aq,\(aqHOBU\(aq,\(aqCONVERSION_MY_CRS\(aq,NULL,0); INSERT INTO usage VALUES(\(aqHOBU\(aq,\(aqUSAGE_PROJECTED_CRS_MY_CRS\(aq,\(aqprojected_crs\(aq,\(aqHOBU\(aq,\(aqMY_CRS\(aq,\(aqPROJ\(aq,\(aqEXTENT_UNKNOWN\(aq,\(aqPROJ\(aq,\(aqSCOPE_UNKNOWN\(aq); .ft P .fi .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C PROJ.4 string: +proj=merc +lat_ts=5 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +type=crs WKT2:2019 string: PROJCRS["my_crs", BASEGEOGCRS["unknown", ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)"], MEMBER["World Geodetic System 1984 (G730)"], MEMBER["World Geodetic System 1984 (G873)"], MEMBER["World Geodetic System 1984 (G1150)"], MEMBER["World Geodetic System 1984 (G1674)"], MEMBER["World Geodetic System 1984 (G1762)"], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ENSEMBLEACCURACY[2.0]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], ID["HOBU","GEODETIC_CRS_MY_CRS"]], CONVERSION["unknown", METHOD["Mercator (variant B)", ID["EPSG",9805]], PARAMETER["Latitude of 1st standard parallel",5, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8823]], PARAMETER["Longitude of natural origin",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8802]], PARAMETER["False easting",0, LENGTHUNIT["metre",1], ID["EPSG",8806]], PARAMETER["False northing",0, LENGTHUNIT["metre",1], ID["EPSG",8807]]], CS[Cartesian,2], AXIS["(E)",east, ORDER[1], LENGTHUNIT["metre",1]], AXIS["(N)",north, ORDER[2], LENGTHUNIT["metre",1]], ID["HOBU","MY_CRS"]] .ft P .fi .UNINDENT .UNINDENT .INDENT 0.0 .IP 5. 3 Get the WKT representation of EPSG:25832 in the WKT1:GDAL output format and on a single line .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C projinfo \-o WKT1:GDAL \-\-single\-line EPSG:25832 .ft P .fi .UNINDENT .UNINDENT .sp Output: .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C WKT1:GDAL string: PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","25832"]] .ft P .fi .UNINDENT .UNINDENT .SH SEE ALSO .sp \fBcs2cs(1)\fP, \fBcct(1)\fP, \fBgeod(1)\fP, \fBgie(1)\fP, \fBproj(1)\fP, \fBprojsync(1)\fP .SH BUGS .sp A list of known bugs can be found at \fI\%https://github.com/OSGeo/PROJ/issues\fP where new bug reports can be submitted to. .SH HOME PAGE .sp \fI\%https://proj.org/\fP .SH AUTHOR Even Rouault .SH COPYRIGHT 1983-2025, PROJ contributors .\" Generated by docutils manpage writer. . proj-9.6.0/man/man1/projsync.1000664 001754 001755 00000014202 14764566077 015760 0ustar00e012349e012349000000 000000 .\" Man page generated from reStructuredText. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "PROJSYNC" "1" "15 Mar 2025" "9.6" "PROJ" .SH NAME projsync \- Downloading tool of resource files .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 .nf \fBprojsync\fP .in +2 [\-\-endpoint URL] [\-\-local\-geojson\-file FILENAME] ([\-\-user\-writable\-directory] | [\-\-system\-directory] | [\-\-target\-dir DIRNAME]) [\-\-bbox west_long,south_lat,east_long,north_lat] [\-\-spatial\-test contains|intersects] [\-\-source\-id ID] [\-\-area\-of\-use NAME] [\-\-file NAME] [\-\-all] [\-\-exclude\-world\-coverage] [\-\-quiet | \-\-verbose] [\-\-dry\-run] [\-\-list\-files] [\-\-no\-version\-filtering] .in -2 .fi .sp .UNINDENT .UNINDENT .SH DESCRIPTION .sp \fI\%projsync\fP is a program that downloads remote resource files into a local directory. This is an alternative to downloading a proj\-data\-X.Y.Z archive file, or using the on\-demand \fI\%networking capabilities\fP of PROJ. .sp The following control parameters can appear in any order: .INDENT 0.0 .TP .B \-\-endpoint URL Defines the URL where to download the master \fBfiles.geojson\fP file and then the resource files. Defaults to the value set in \fI\%proj.ini\fP .UNINDENT .INDENT 0.0 .TP .B \-\-local\-geojson\-file FILENAME Defines the filename for the master GeoJSON files that references resources. Defaults to \fB${endpoint}/files.geojson\fP .UNINDENT .INDENT 0.0 .TP .B \-\-user\-writable\-directory Specifies that resource files must be downloaded in the \fI\%user writable directory\fP\&. This is the default. .UNINDENT .INDENT 0.0 .TP .B \-\-system\-directory Specifies that resource files must be downloaded in the ${installation_prefix}/share/proj directory. The user launching projsync should make sure it has writing rights in that directory. .UNINDENT .INDENT 0.0 .TP .B \-\-target\-dir DIRNAME Directory into which resource files must be downloaded. .UNINDENT .INDENT 0.0 .TP .B \-\-bbox west_long,south_lat,east_long,north_lat Specify an area of interest to restrict the resources to download. The area of interest is specified as a bounding box with geographic coordinates, expressed in degrees in a unspecified geographic CRS. \fIwest_long\fP and \fIeast_long\fP should be in the [\-180,180] range, and \fIsouth_lat\fP and \fInorth_lat\fP in the [\-90,90]. \fIwest_long\fP is generally lower than \fIeast_long\fP, except in the case where the area of interest crosses the antimeridian. .UNINDENT .INDENT 0.0 .TP .B \-\-spatial\-test contains|intersects Specify how the extent of the resource files are compared to the area of use specified explicitly with \fI\%\-\-bbox\fP\&. By default, any resource files whose extent intersects the value specified by \fI\%\-\-bbox\fP will be selected. If using the \fBcontains\fP strategy, only resource files whose extent is contained in the value specified by \fI\%\-\-bbox\fP will be selected. .UNINDENT .INDENT 0.0 .TP .B \-\-source\-id ID Restrict resource files to be downloaded to those whose source_id property contains the ID value. Specifying \fB?\fP as ID will list all possible values. .UNINDENT .INDENT 0.0 .TP .B \-\-area\-of\-use NAME Restrict resource files to be downloaded to those whose area_of_use property contains the NAME value. Specifying \fB?\fP as NAME will list all possible values. .UNINDENT .INDENT 0.0 .TP .B \-\-file NAME Restrict resource files to be downloaded to those whose name property contains the NAME value. Specifying \fB?\fP as NAME will list all possible values. .UNINDENT .INDENT 0.0 .TP .B \-\-all Ask to download all files. .UNINDENT .INDENT 0.0 .TP .B \-\-exclude\-world\-coverage Exclude files which have world coverage. .UNINDENT .INDENT 0.0 .TP .B \-q / \-\-quiet Quiet mode .UNINDENT .INDENT 0.0 .TP .B \-\-verbose New in version 8.1. .sp Verbose mode (more than default) .UNINDENT .INDENT 0.0 .TP .B \-\-dry\-run Simulate the behavior of the tool without downloading resource files. .UNINDENT .INDENT 0.0 .TP .B \-\-list\-files List file names, with the source_id and area_of_use properties. .UNINDENT .INDENT 0.0 .TP .B \-\-no\-version\-filtering New in version 8.1. .sp By default, projsync only downloads files that are compatible of the PROJ_DATA.VERSION metadata of \fBproj.db\fP, taking into account the \fBversion_added\fP and \fBversion_removed\fP properties of entries in \fBfiles.geojson\fP\&. When specifying this switch, all files referenced in \fBfiles.geojson\fP will be candidate (combined with other filters). .UNINDENT .sp At least one of \fI\%\-\-list\-files\fP, \fI\%\-\-file\fP, \fI\%\-\-source\-id\fP, \fI\%\-\-area\-of\-use\fP, \fI\%\-\-bbox\fP or \fI\%\-\-all\fP must be specified. .sp Options \fI\%\-\-file\fP, \fI\%\-\-source\-id\fP, \fI\%\-\-area\-of\-use\fP and \fI\%\-\-bbox\fP are combined with a AND logic. .SH EXAMPLES .INDENT 0.0 .IP 1. 3 Download all resource files .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C projsync \-\-all .ft P .fi .UNINDENT .UNINDENT .INDENT 0.0 .IP 2. 3 Download resource files covering specified point and attributed to an agency .UNINDENT .INDENT 0.0 .INDENT 3.5 .sp .nf .ft C projsync \-\-source\-id fr_ign \-\-bbox 2,49,2,49 .ft P .fi .UNINDENT .UNINDENT .SH SEE ALSO .sp \fBcs2cs(1)\fP, \fBcct(1)\fP, \fBgeod(1)\fP, \fBgie(1)\fP, \fBproj(1)\fP, \fBprojinfo(1)\fP .SH BUGS .sp A list of known bugs can be found at \fI\%https://github.com/OSGeo/PROJ/issues\fP where new bug reports can be submitted to. Bugs specific to resource files should be submitted to \fI\%https://github.com/OSGeo/PROJ\-data/issues\fP .SH HOME PAGE .sp \fI\%https://proj.org/\fP .SH AUTHOR Even Rouault .SH COPYRIGHT 1983-2025, PROJ contributors .\" Generated by docutils manpage writer. . proj-9.6.0/proj.pc.in000664 001754 001755 00000000476 14764566077 014333 0ustar00e012349e012349000000 000000 prefix=@prefix@ libdir=@libdir@ includedir=@includedir@ datarootdir=@datarootdir@ datadir=@datadir@/@PACKAGE@ Name: PROJ Description: Coordinate transformation software library Requires: Version: @VERSION@ Libs: -L${libdir} -lproj Libs.private: @EXTRA_LIBS@ Requires.private: @EXTRA_REQUIRES@ Cflags: -I${includedir} proj-9.6.0/scripts/000775 001754 001755 00000000000 14764566152 014102 5ustar00e012349e012349000000 000000 proj-9.6.0/scripts/CMakeLists.txt000664 001754 001755 00000002252 14764566077 016651 0ustar00e012349e012349000000 000000 find_package(PkgConfig QUIET) if (PKG_CONFIG_FOUND) pkg_check_modules(PC_BASH_COMPLETION QUIET bash-completion) if (PC_BASH_COMPLETION_FOUND) pkg_get_variable(BASH_COMPLETIONS_FULL_DIR bash-completion completionsdir) pkg_get_variable(BASH_COMPLETIONS_PREFIX bash-completion prefix) if (BASH_COMPLETIONS_FULL_DIR AND BASH_COMPLETIONS_PREFIX AND BASH_COMPLETIONS_FULL_DIR MATCHES "^${BASH_COMPLETIONS_PREFIX}/") string(REGEX REPLACE "^${BASH_COMPLETIONS_PREFIX}/" "" BASH_COMPLETIONS_DIR_DEFAULT ${BASH_COMPLETIONS_FULL_DIR}) endif () endif () endif () if (NOT DEFINED BASH_COMPLETIONS_DIR_DEFAULT) include(GNUInstallDirs) set(BASH_COMPLETIONS_DIR_DEFAULT ${CMAKE_INSTALL_DATADIR}/bash-completion/completions) endif () set(BASH_COMPLETIONS_DIR "${BASH_COMPLETIONS_DIR_DEFAULT}" CACHE PATH "Installation sub-directory for bash completion scripts") if (NOT BASH_COMPLETIONS_DIR STREQUAL "") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/install_bash_completions.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/install_bash_completions.cmake @ONLY) install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/install_bash_completions.cmake) endif () proj-9.6.0/scripts/build_airocean_parameters.py000775 001754 001755 00000063512 14764566077 021657 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Build airocean parameters # Author: Pierre Louvart # ############################################################################### # Copyright (c) 2025, Pierre Louvart # # 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 python script can be launched "as is" with no additional argument. It will generate 2 plots (require geopandas and matplotlib): - one for the 20 faces unfolded net - one for the complete 23 faces unfolded net that makes up the final airocean map It will also print on the standard output the C code initializing vertices, faces and transform matrices (forward and inverse) required to conduct the airocean projection. """ import numpy as np from pathlib import Path import json np.set_printoptions(precision=22) """ Zap values close to 1s and 0s """ def zap_zero_or_one(vals, eps=1e-12, verbose=False): """Return copy of array with values very close to zero and one set exactly.""" vals = vals.copy() sel = (np.abs(vals) < eps) & (vals != 0.0) if sel.any(): vals[sel] = 0.0 if verbose: print(f"adjusted {sel.sum()} zeros") ones = np.abs(np.abs(vals) - 1.0) sel = (ones < eps) & (ones != 0.0) if sel.any(): vals[sel] = np.sign(vals[sel]) if verbose: print(f"adjusted {sel.sum()} ones") return vals """ Definition of the vertices of the unfolded icosahedron net: """ # Icosahedron properties circumscribed_radius = 1 inscribed_radius = 3**0.5 / 12 * (3 + 5**0.5) triangle_edge = float(circumscribed_radius / np.sin(2 * np.pi / 5)) triangle_height = 3**0.5 / 2 * triangle_edge # Icosahedron properties scaled to a specific radius. Left to 1.0 radius = 1.0 triangle_earth_edge = triangle_edge * radius triangle_earth_height = triangle_height * radius circumscribed_earth_radius = circumscribed_radius * radius inscribed_earth_radius = inscribed_radius * radius # Vertices of the faces in the airocean referential airocean_vertices = np.array( [ [2, 0, 0], # Vertex 0 [1, 1, 0], # Vertex 1 [3, 1, 0], # Vertex 2 [0, 2, 0], # Vertex 3 [2, 2, 0], # Vertex 4 [1, 3, 0], # Vertex 5 [3, 3, 0], # Vertex 6 [0, 4, 0], # Vertex 7 [2, 4, 0], # Vertex 8 [1, 5, 0], # Vertex 9 [3, 5, 0], # Vertex 10 [0, 6, 0], # Vertex 11 [2, 6, 0], # Vertex 12 [1, 7, 0], # Vertex 13 [3, 7, 0], # Vertex 14 [0, 8, 0], # Vertex 15 [2, 8, 0], # Vertex 16 [1, 9, 0], # Vertex 17 [3, 9, 0], # Vertex 18 [0, 10, 0], # Vertex 19 [2, 10, 0], # Vertex 20 [1, 11, 0], # Vertex 21 [0.5, 9.5, 0], # Vertex 22 : Split from Face 15 (ocean) [1, 0, 0], # Vertex 23 : Split from Face 15 (australia) [2 / 3, 8, 0], # Vertex 24 : split from face 8 (japan) [1 / 3, 7, 0], # Vertex 25 : new from face 8 (japan) [1, -1, 0], # Vertex 26 : bottom new for antartica ] ) * [triangle_earth_height, triangle_earth_edge / 2, 1] """ Definition of the airocean "base" (read non-split) faces and centers """ airocean_face_vertices = airocean_vertices[ [ [12, 16, 14], # Face 0 [12, 13, 16], # Face 1 [12, 9, 13], # Face 2 [12, 8, 9], # Face 3 [12, 14, 10], # Face 4 [14, 16, 18], # Face 5 [20, 16, 17], # Face 6 [17, 16, 13], # Face 7 [9, 11, 13], # Face 9 [9, 5, 7], # Face 10 [9, 8, 5], # Face 11 [5, 8, 4], # Face 12 [4, 8, 6], # Face 13 [0, 4, 2], # Face 14 [19, 17, 15], # Face 16 [3, 7, 5], # Face 17 [1, 5, 4], # Face 18 [1, 4, 0], # Face 19 [15, 17, 13], # Face 8 [19, 21, 17], # Face 15 [26, 1, 0], # Face 8' [11, 15, 13], # Face 15' ] ] airocean_face_vertices = np.concatenate( [ airocean_face_vertices, np.zeros((*airocean_face_vertices.shape[:-1], 1)), ], axis=2, ) airocean_22_centers = airocean_face_vertices.mean(axis=1) airocean_22_centers[:, 2] = 1 airocean_2_centers = airocean_22_centers[[18, 19]] """ Definition of the complete faces of the airocean unfolded net (23 faces total). """ airocean_23_face_vertices = airocean_vertices[ [ [12, 16, 14], # Face 0 [12, 13, 16], # Face 1 [12, 9, 13], # Face 2 [12, 8, 9], # Face 3 [12, 14, 10], # Face 4 [14, 16, 18], # Face 5 [20, 16, 17], # Face 6 [17, 16, 13], # Face 7 # [15, 17, 13], # Face 8, split [9, 11, 13], # Face 9 [9, 5, 7], # Face 10 [9, 8, 5], # Face 11 [5, 8, 4], # Face 12 [4, 8, 6], # Face 13 [0, 4, 2], # Face 14 # [19, 21, 17], # Face 15, split [19, 17, 15], # Face 16 [3, 7, 5], # Face 17 [1, 5, 4], # Face 18 [1, 4, 0], # Face 19 [17, 22, 21], # Face 20 - from 15 (Ocean) [1, 0, 23], # Face 21 - from 15 (Australia) [15, 17, 24], # Face 22 - from 8 (Japan) [17, 13, 24], # Face 23 - from 8 (Japan) [11, 25, 13], # Face 24 - from 8 (Japan) ] ] airocean_23_face_vertices = np.concatenate( [ airocean_23_face_vertices, np.ones((*airocean_23_face_vertices.shape[:-1], 1)), ], axis=2, ) airocean_23_face_vertices[:, :, 3] = 1.0 airocean_23_centers = airocean_23_face_vertices.mean(axis=1) airocean_23_centers[:, 2] = 1 """ Definition of the forward and inverse transform matrices to switch from vertical to horizontal layout """ def translation(dx=0, dy=0): res = np.eye(4, dtype=np.float64) res[[0, 1], 3] = dx, dy return res def rotation(angle): res = np.eye(4) res[:2, :2] = zap_zero_or_one( np.array( [ [np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)], ], dtype=np.float64, ) ) return res w, h = airocean_vertices[:, 0].max(), airocean_vertices[:, 1].max() orient_horizontal = zap_zero_or_one( translation(h, 0) @ rotation(np.pi / 2 * 1) ) inv_orient_horizontal = zap_zero_or_one(np.linalg.inv(orient_horizontal)) """ Definition of icosahedron vertices, faces and centers. Credit to Gray Fuller for the original values. Original source: http://www.rwgrayprojects.com/rbfnotes/maps/docs/graypr.c """ ico_faces = np.array( [ [ [ 0.420152426708710003, 0.078145249402782959, 0.904082550615019298, 1.0, ], [ 0.518836730327364437, 0.835420380378235850, 0.181331837557262454, 1.0, ], [ 0.995009439436241649, -0.091347795276427931, 0.040147175877166645, 1.0, ], ], [ [ 0.420152426708710003, 0.078145249402782959, 0.904082550615019298, 1.0, ], [ -0.414682225320335218, 0.655962405434800777, 0.630675807891475371, 1.0, ], [ 0.518836730327364437, 0.835420380378235850, 0.181331837557262454, 1.0, ], ], [ [ 0.420152426708710003, 0.078145249402782959, 0.904082550615019298, 1.0, ], [ -0.515455959944041808, -0.381716898287133011, 0.767200992517747538, 1.0, ], [ -0.414682225320335218, 0.655962405434800777, 0.630675807891475371, 1.0, ], ], [ [ 0.420152426708710003, 0.078145249402782959, 0.904082550615019298, 1.0, ], [ 0.355781402532944713, -0.843580002466178147, 0.402234226602925571, 1.0, ], [ -0.515455959944041808, -0.381716898287133011, 0.767200992517747538, 1.0, ], ], [ [ 0.420152426708710003, 0.078145249402782959, 0.904082550615019298, 1.0, ], [ 0.995009439436241649, -0.091347795276427931, 0.040147175877166645, 1.0, ], [ 0.355781402532944713, -0.843580002466178147, 0.402234226602925571, 1.0, ], ], [ [ 0.995009439436241649, -0.091347795276427931, 0.040147175877166645, 1.0, ], [ 0.518836730327364437, 0.835420380378235850, 0.181331837557262454, 1.0, ], [ 0.515455959944041808, 0.381716898287133011, -0.767200992517747538, 1.0, ], ], [ [ 0.515455959944041808, 0.381716898287133011, -0.767200992517747538, 1.0, ], [ 0.518836730327364437, 0.835420380378235850, 0.181331837557262454, 1.0, ], [ -0.355781402532944713, 0.843580002466178147, -0.402234226602925571, 1.0, ], ], [ [ -0.355781402532944713, 0.843580002466178147, -0.402234226602925571, 1.0, ], [ 0.518836730327364437, 0.835420380378235850, 0.181331837557262454, 1.0, ], [ -0.414682225320335218, 0.655962405434800777, 0.630675807891475371, 1.0, ], ], [ [ -0.515455959944041808, -0.381716898287133011, 0.767200992517747538, 1.0, ], [ -0.995009439436241649, 0.091347795276427931, -0.040147175877166645, 1.0, ], [ -0.414682225320335218, 0.655962405434800777, 0.630675807891475371, 1.0, ], ], [ [ -0.515455959944041808, -0.381716898287133011, 0.767200992517747538, 1.0, ], [ -0.518836730327364437, -0.835420380378235850, -0.181331837557262454, 1.0, ], [ -0.995009439436241649, 0.091347795276427931, -0.040147175877166645, 1.0, ], ], [ [ -0.515455959944041808, -0.381716898287133011, 0.767200992517747538, 1.0, ], [ 0.355781402532944713, -0.843580002466178147, 0.402234226602925571, 1.0, ], [ -0.518836730327364437, -0.835420380378235850, -0.181331837557262454, 1.0, ], ], [ [ -0.518836730327364437, -0.835420380378235850, -0.181331837557262454, 1.0, ], [ 0.355781402532944713, -0.843580002466178147, 0.402234226602925571, 1.0, ], [ 0.414682225320335218, -0.655962405434800777, -0.630675807891475371, 1.0, ], ], [ [ 0.414682225320335218, -0.655962405434800777, -0.630675807891475371, 1.0, ], [ 0.355781402532944713, -0.843580002466178147, 0.402234226602925571, 1.0, ], [ 0.995009439436241649, -0.091347795276427931, 0.040147175877166645, 1.0, ], ], [ [ 0.515455959944041808, 0.381716898287133011, -0.767200992517747538, 1.0, ], [ 0.414682225320335218, -0.655962405434800777, -0.630675807891475371, 1.0, ], [ 0.995009439436241649, -0.091347795276427931, 0.040147175877166645, 1.0, ], ], [ [ -0.420152426708710003, -0.078145249402782959, -0.904082550615019298, 1.0, ], [ -0.355781402532944713, 0.843580002466178147, -0.402234226602925571, 1.0, ], [ -0.995009439436241649, 0.091347795276427931, -0.040147175877166645, 1.0, ], ], [ [ -0.420152426708710003, -0.078145249402782959, -0.904082550615019298, 1.0, ], [ -0.995009439436241649, 0.091347795276427931, -0.040147175877166645, 1.0, ], [ -0.518836730327364437, -0.835420380378235850, -0.181331837557262454, 1.0, ], ], [ [ -0.420152426708710003, -0.078145249402782959, -0.904082550615019298, 1.0, ], [ -0.518836730327364437, -0.835420380378235850, -0.181331837557262454, 1.0, ], [ 0.414682225320335218, -0.655962405434800777, -0.630675807891475371, 1.0, ], ], [ [ -0.420152426708710003, -0.078145249402782959, -0.904082550615019298, 1.0, ], [ 0.414682225320335218, -0.655962405434800777, -0.630675807891475371, 1.0, ], [ 0.515455959944041808, 0.381716898287133011, -0.767200992517747538, 1.0, ], ], [ [ -0.355781402532944713, 0.843580002466178147, -0.402234226602925571, 1.0, ], [ -0.38796691462082733, 0.3827173765316976, -0.6531583886089725, 1.0, ], [ 0.515455959944041808, 0.381716898287133011, -0.767200992517747538, 1.0, ], ], [ [ -0.420152426708710003, -0.078145249402782959, -0.904082550615019298, 1.0, ], [ 0.515455959944041808, 0.381716898287133011, -0.767200992517747538, 1.0, ], [ -0.38796691462082733, 0.3827173765316976, -0.6531583886089725, 1.0, ], ], [ [ -0.995009439436241649, 0.091347795276427931, -0.040147175877166645, 1.0, ], [ -0.355781402532944713, 0.843580002466178147, -0.402234226602925571, 1.0, ], [ -0.5884910224298405, 0.5302967343924689, 0.06276480180379439, 1.0, ], ], [ [ -0.355781402532944713, 0.843580002466178147, -0.402234226602925571, 1.0, ], [ -0.414682225320335218, 0.655962405434800777, 0.630675807891475371, 1.0, ], [ -0.5884910224298405, 0.5302967343924689, 0.06276480180379439, 1.0, ], ], [ [ -0.995009439436241649, 0.091347795276427931, -0.040147175877166645, 1.0, ], [ -0.5884910224298405, 0.5302967343924689, 0.06276480180379439, 1.0, ], [ -0.414682225320335218, 0.655962405434800777, 0.630675807891475371, 1.0, ], ], ], dtype=np.float64, ) ico_20_centers = np.array( [ [0.6446661988241054, 0.27407261150153034, 0.37518718801648276], [0.17476897723857973, 0.5231760117386065, 0.5720300653545857], [-0.16999525285188902, 0.1174635855168169, 0.7673197836747474], [0.08682595643253761, -0.3823838837835094, 0.6911725899118975], [0.5903144228926321, -0.28559418277994103, 0.44882131769837047], [0.6764340432358825, 0.375263161129647, -0.18190732636110615], [0.22617042924615385, 0.6869057603771823, -0.3293677938544702], [-0.0838756325086385, 0.778320929426405, 0.13659113961527075], [-0.6417158749002062, 0.12186443414136523, 0.45257654151068544], [-0.6764340432358825, -0.375263161129647, 0.18190732636110615], [-0.22617042924615385, -0.6869057603771823, 0.32936779385447024], [0.0838756325086385, -0.778320929426405, -0.13659113961527075], [0.5884910224298405, -0.5302967343924689, -0.06276480180379439], [0.6417158749002062, -0.12186443414136523, -0.4525765415106855], [-0.5903144228926321, 0.28559418277994103, -0.44882131769837047], [-0.6446661988241054, -0.2740726115015303, -0.37518718801648276], [-0.17476897723857973, -0.5231760117386065, -0.5720300653545857], [0.16999525285188902, -0.11746358551681692, -0.7673197836747474], [-0.5884910224298405, 0.5302967343924689, 0.06276480180379439], [-0.08682595643253764, 0.3823838837835094, -0.6911725899118975], ], dtype=np.float64, ) """ Definition of the forward and inverse transform matrices from icosahedral faces to airocean unfolded net space """ A = ico_faces[:, 1] - ico_faces[:, 0] B = ico_faces[:, 2] - ico_faces[:, 0] ico_normals = -np.array( [ A[:, 1] * B[:, 2] - A[:, 2] * B[:, 1], A[:, 2] * B[:, 0] - A[:, 0] * B[:, 2], A[:, 0] * B[:, 1] - A[:, 1] * B[:, 0], ] ).T ico_normals /= ((ico_normals**2).sum(axis=1) ** 0.5).reshape(-1, 1) ico_centers = ico_faces.mean(axis=1) ico_elevated_centers = ico_centers.copy() ico_elevated_centers[:, :3] += ico_normals airocean_basis = np.zeros((23, 4, 4)) airocean_basis[:, :3, :] = airocean_23_face_vertices[:, :3, :] airocean_basis[:, 3, :] = airocean_23_centers ico_basis = np.zeros((23, 4, 4)) ico_basis[:, :3, :] = ico_faces ico_basis[:, 3, :] = ico_elevated_centers air_ico_trans = zap_zero_or_one( np.array( [ a.T @ np.linalg.inv(b.T) for i, (a, b) in enumerate(zip(ico_basis, airocean_basis)) ], dtype=np.float64, ) ) ico_air_trans = zap_zero_or_one( np.array( [ b.T @ np.linalg.inv(a.T) for i, (a, b) in enumerate(zip(ico_basis, airocean_basis)) ], dtype=np.float64, ) ) for i, (a, b, v1, v2) in enumerate( zip(ico_basis, airocean_basis, ico_centers, airocean_22_centers) ): m = b.T @ np.linalg.inv(a.T) # ico to air w = a.T @ np.linalg.inv(b.T) # air to ico for x, y in zip(a, b): v1 = m @ x.T v1 /= v1[3] v2 = w @ y.T v2 /= v2[3] assert np.isclose(v1, y, rtol=1e-7).all() assert np.isclose(v2, x, rtol=1e-7).all() # Assert that the transform matrices work adequately for i in range(100): r = np.random.rand(3) r /= r.sum() v = (a[:3, :] * r.reshape(3, 1)).sum(axis=0) v1 = m @ v.T v1 /= v1[3] v2 = w @ v1.T v2 /= v2[3] assert np.isclose(v, v2, rtol=1e-7).all() """ End of definitions. """ def generate_20_faces_airocean_net( outfile: Path, ) -> None: """ Save a picture of the "base" (non split) 20 faces of the unfolded icosahedron net """ try: import geopandas as gpd from shapely.geometry import Polygon gdf = gpd.GeoDataFrame( data={"id": range(22)}, geometry=[Polygon(shell=v[:, :2]) for v in airocean_face_vertices], crs=None, ) ax = gdf.plot() gdf.apply( lambda x: ax.annotate( text=x["id"], xy=x.geometry.centroid.coords[0], ha="center" ), axis=1, ) ax.get_figure().savefig(outfile) except ImportError as e: print( f"Geopandas and shapely must be installed to generate airocean plot! ({e})" ) def generate_23_faces_airocean_net( outfile: Path, ) -> None: """ Save a picture of the complete 23 faces of the unfolded icosahedron net """ try: import geopandas as gpd from shapely.geometry import Polygon gdf = gpd.GeoDataFrame( data={"id": range(len(airocean_23_face_vertices))}, geometry=[ Polygon(shell=v[:, :2]) for v in airocean_23_face_vertices ], crs=None, ) ax = gdf.plot() gdf.apply( lambda x: ax.annotate( text=x["id"], xy=x.geometry.centroid.coords[0], ha="center" ), axis=1, ) ax.get_figure().savefig(outfile) except ImportError as e: print( f"Geopandas and shapely must be installed to generate airocean plot! ({e})" ) def generate_airocean_parameters() -> str: """ Create a string of C code that initializes airocean parameters and that can be included directly into the source file of the airocean projection. """ return "\n".join( [ ( f"{name} = " + json.dumps(value.tolist()) .replace("[", "{") .replace("]", "}") + ";" ) for name, value in { "constexpr pj_face base_ico_faces[23]": ico_faces[:, :, :3], "constexpr PJ_XYZ base_ico_centers[23]": ico_centers[:, :3], "constexpr PJ_XYZ base_ico_normals[23]": ico_normals, "constexpr pj_face base_airocean_faces[23]": airocean_23_face_vertices[ :, :, [0, 1, 3] ], "constexpr double base_ico_air_trans[23][4][4]": ico_air_trans, "constexpr double base_air_ico_trans[23][4][4]": air_ico_trans, "constexpr double orient_horizontal_trans[4][4]": orient_horizontal, "constexpr double orient_horizontal_inv_trans[4][4]": inv_orient_horizontal, }.items() ] ) if __name__ == "__main__": generate_20_faces_airocean_net(Path("./20_faces_airocean_net.png")) generate_23_faces_airocean_net(Path("./23_faces_airocean_net.png")) parameters = generate_airocean_parameters() print(parameters) proj-9.6.0/scripts/build_db.py000775 001754 001755 00000234673 14764566077 016250 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Build SRS and coordinate transform database # Author: Even Rouault # ############################################################################### # Copyright (c) 2018, 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. ############################################################################### import os import re import sqlite3 import sys EPSG_AUTHORITY = 'EPSG' def ingest_sqlite_dump(cursor, filename): sql = '' f = open(filename, 'rb') # Skip UTF-8 BOM if f.read(3) != b'\xEF\xBB\xBF': f.seek(0, os.SEEK_SET) for line in f.readlines(): line = line.replace(b'\r\n', b'\n') if sys.version_info >= (3, 0, 0): line = line.decode('utf-8') #python3 else: line = str(line) # python2 # Historically this script was developed with code columns using TEXT # so keep it that way to minimized changes in it, and in the diff of # generated .sql files line = line.replace('INTEGER_OR_TEXT', 'TEXT') # Same for WITHOUT ROWID line = line.replace('WITHOUT ROWID', '') sql += line if sqlite3.complete_statement(sql): sql = sql.strip() if sql != 'COMMIT;': try: cursor.execute(sql) except: print(sql) raise sql = '' def ingest_epsg(): for f in ['PostgreSQL_Data_Script.sql', 'PostgreSQL_Table_Script.sql']: if not os.path.exists(f): raise Exception('Missing file: ' + f) epsg_tmp_db_filename = 'tmp_epsg.db' if os.path.exists(epsg_tmp_db_filename): os.unlink(epsg_tmp_db_filename) conn = sqlite3.connect(epsg_tmp_db_filename) cursor = conn.cursor() cursor.execute('PRAGMA journal_mode = OFF;') ingest_sqlite_dump(cursor, 'PostgreSQL_Table_Script.sql') ingest_sqlite_dump(cursor, 'PostgreSQL_Data_Script.sql') cursor.close() conn.commit() return (conn, epsg_tmp_db_filename) def fill_unit_of_measure(proj_db_cursor): proj_db_cursor.execute( "INSERT INTO unit_of_measure SELECT ?, uom_code, unit_of_meas_name, unit_of_meas_type, factor_b / factor_c, NULL, deprecated FROM epsg.epsg_unitofmeasure", (EPSG_AUTHORITY,)) def fill_ellipsoid(proj_db_cursor): proj_db_cursor.execute( "INSERT INTO ellipsoid SELECT ?, ellipsoid_code, ellipsoid_name, NULL, 'PROJ', 'EARTH', semi_major_axis, ?, uom_code, inv_flattening, semi_minor_axis, deprecated FROM epsg.epsg_ellipsoid", (EPSG_AUTHORITY, EPSG_AUTHORITY)) def fill_extent(proj_db_cursor): #proj_db_cursor.execute( # "INSERT INTO extent SELECT ?, extent_code, extent_name, extent_description, bbox_south_bound_lat, bbox_north_bound_lat, bbox_west_bound_lon, bbox_east_bound_lon, deprecatedFROM epsg.epsg_extent", (EPSG_AUTHORITY,)) proj_db_cursor.execute( "SELECT extent_code, extent_name, extent_description, bbox_south_bound_lat, bbox_north_bound_lat, bbox_west_bound_lon, bbox_east_bound_lon, deprecated FROM epsg.epsg_extent") res = proj_db_cursor.fetchall() for (extent_code, extent_name, extent_description, bbox_south_bound_lat, bbox_north_bound_lat, bbox_west_bound_lon, bbox_east_bound_lon, deprecated) in res: try: # Some new records have longitudes outside [-180,180] if bbox_west_bound_lon and bbox_west_bound_lon < -180: # print( extent_code, extent_name, extent_description, bbox_south_bound_lat, bbox_north_bound_lat, bbox_west_bound_lon, bbox_east_bound_lon, deprecated) bbox_west_bound_lon += 360 if bbox_east_bound_lon and bbox_east_bound_lon > 180: # print( extent_code, extent_name, extent_description, bbox_south_bound_lat, bbox_north_bound_lat, bbox_west_bound_lon, bbox_east_bound_lon, deprecated) bbox_east_bound_lon -= 360 proj_db_cursor.execute( "INSERT INTO extent VALUES (?,?,?,?,?,?,?,?,?)", (EPSG_AUTHORITY, extent_code, extent_name, extent_description, bbox_south_bound_lat, bbox_north_bound_lat, bbox_west_bound_lon, bbox_east_bound_lon, deprecated)) except sqlite3.IntegrityError as e: print(e) print(extent_code, extent_name, extent_description, bbox_south_bound_lat, bbox_north_bound_lat, bbox_west_bound_lon, bbox_east_bound_lon, deprecated) raise def fill_scope(proj_db_cursor): proj_db_cursor.execute( "INSERT INTO scope SELECT ?, scope_code, scope, deprecated FROM epsg.epsg_scope", (EPSG_AUTHORITY,)) def fill_usage(proj_db_cursor): proj_db_cursor.execute( "SELECT usage_code, object_table_name, object_code, extent_code, scope_code FROM epsg.epsg_usage") res = proj_db_cursor.fetchall() for (usage_code, object_table_name, object_code, extent_code, scope_code) in res: if object_table_name == 'epsg_coordinatereferencesystem': proj_db_cursor.execute('SELECT table_name FROM crs_view WHERE auth_name = ? AND code = ?', (EPSG_AUTHORITY, object_code)) proj_table_name = proj_db_cursor.fetchone() if proj_table_name is None: continue elif object_table_name == 'epsg_coordoperation': proj_db_cursor.execute("SELECT table_name FROM coordinate_operation_view WHERE auth_name = ? AND code = ? UNION ALL SELECT 'conversion' FROM conversion WHERE auth_name = ? AND code = ?", (EPSG_AUTHORITY, object_code, EPSG_AUTHORITY, object_code)) proj_table_name = proj_db_cursor.fetchone() if proj_table_name is None: continue elif object_table_name == 'epsg_datum': proj_db_cursor.execute("SELECT 'geodetic_datum' FROM geodetic_datum WHERE auth_name = ? AND code = ? UNION ALL SELECT 'vertical_datum' FROM vertical_datum WHERE auth_name = ? AND code = ? UNION ALL SELECT 'engineering_datum' FROM engineering_datum WHERE auth_name = ? AND code = ?", (EPSG_AUTHORITY, object_code, EPSG_AUTHORITY, object_code, EPSG_AUTHORITY, object_code)) proj_table_name = proj_db_cursor.fetchone() if proj_table_name is None: continue proj_table_name = proj_table_name[0] proj_db_cursor.execute( "INSERT INTO usage VALUES (?,?,?,?,?,?,?,?,?)", (EPSG_AUTHORITY, usage_code, proj_table_name, EPSG_AUTHORITY, object_code, EPSG_AUTHORITY, extent_code, EPSG_AUTHORITY, scope_code)) def fill_prime_meridian(proj_db_cursor): proj_db_cursor.execute( "INSERT INTO prime_meridian SELECT ?, prime_meridian_code, prime_meridian_name, greenwich_longitude, ?, uom_code, deprecated FROM epsg.epsg_primemeridian", (EPSG_AUTHORITY, EPSG_AUTHORITY)) def compute_publication_date(datum_code, datum_name, frame_reference_epoch, publication_date): if frame_reference_epoch is not None: epoch = float(frame_reference_epoch) fractional = epoch - int(epoch) if fractional == 0: publication_date = '%04d-01-01' % int(epoch) elif abs(fractional - 0.4) < 1e-6: publication_date = '%04d-05-01' % int(epoch) elif abs(fractional - 0.5) < 1e-6: publication_date = '%04d-07-01' % int(epoch) else: assert False, (datum_code, datum_name, frame_reference_epoch, fractional) elif publication_date != '': if len(publication_date) == 4: publication_date += '-01-01' elif len(publication_date) == 7: publication_date += '-01' elif len(publication_date) == 4+1+4: m = re.search('([0-9]{4})-([0-9]{4})', publication_date) if m: publication_date = m.group(1) else: assert False, (datum_code, datum_name, publication_date) else: assert len(publication_date) == 10, (datum_code, datum_name, publication_date) else: publication_date = None return publication_date def fill_geodetic_datum(proj_db_cursor): proj_db_cursor.execute( "SELECT DISTINCT * FROM epsg.epsg_datum WHERE datum_type NOT IN ('geodetic', 'dynamic geodetic', 'ensemble', 'vertical', 'engineering')") res = proj_db_cursor.fetchall() if res: raise Exception('Found unexpected datum_type in epsg_datum: %s' % str(res)) proj_db_cursor.execute("SELECT datum_code, datum_name, ellipsoid_code, prime_meridian_code, publication_date, frame_reference_epoch, anchor_epoch, deprecated FROM epsg.epsg_datum WHERE datum_type IN ('geodetic', 'dynamic geodetic')") res = proj_db_cursor.fetchall() for (datum_code, datum_name, ellipsoid_code, prime_meridian_code, publication_date, frame_reference_epoch, anchor_epoch, deprecated) in res: publication_date = compute_publication_date(datum_code, datum_name, frame_reference_epoch, publication_date) proj_db_cursor.execute( "INSERT INTO geodetic_datum VALUES (?, ?, ?, NULL, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?)", (EPSG_AUTHORITY, datum_code, datum_name, EPSG_AUTHORITY, ellipsoid_code, EPSG_AUTHORITY, prime_meridian_code, publication_date, frame_reference_epoch, anchor_epoch, deprecated)) def fill_vertical_datum(proj_db_cursor): proj_db_cursor.execute("SELECT datum_code, datum_name, publication_date, frame_reference_epoch, anchor_epoch, deprecated FROM epsg.epsg_datum WHERE datum_type IN ('vertical')") res = proj_db_cursor.fetchall() for (datum_code, datum_name, publication_date, frame_reference_epoch, anchor_epoch, deprecated) in res: publication_date = compute_publication_date(datum_code, datum_name, frame_reference_epoch, publication_date) proj_db_cursor.execute( "INSERT INTO vertical_datum VALUES (?, ?, ?, NULL, ?, ?, NULL, NULL, ?, ?)", (EPSG_AUTHORITY, datum_code, datum_name, publication_date, frame_reference_epoch, anchor_epoch, deprecated)) def fill_engineering_datum(proj_db_cursor): proj_db_cursor.execute("SELECT datum_code, datum_name, publication_date, frame_reference_epoch, anchor_epoch, deprecated FROM epsg.epsg_datum WHERE datum_type IN ('engineering') AND datum_name NOT LIKE 'EPSG example%'") res = proj_db_cursor.fetchall() for (datum_code, datum_name, publication_date, frame_reference_epoch, anchor_epoch, deprecated) in res: publication_date = compute_publication_date(datum_code, datum_name, frame_reference_epoch, publication_date) proj_db_cursor.execute( "INSERT INTO engineering_datum VALUES (?, ?, ?, ?, NULL, ?, ?)", (EPSG_AUTHORITY, datum_code, datum_name, publication_date, anchor_epoch, deprecated)) def fill_datumensemble(proj_db_cursor): proj_db_cursor.execute("SELECT datum_code, datum_name, ensemble_accuracy, deprecated FROM epsg.epsg_datum JOIN epsg.epsg_datumensemble ON datum_code = datum_ensemble_code WHERE datum_type = 'ensemble'") rows = proj_db_cursor.fetchall() for (datum_code, datum_name, ensemble_accuracy, deprecated) in rows: assert ensemble_accuracy is not None proj_db_cursor.execute("SELECT DISTINCT datum_type, ellipsoid_code, prime_meridian_code FROM epsg.epsg_datum WHERE datum_code IN (SELECT datum_code FROM epsg.epsg_datumensemblemember WHERE datum_ensemble_code = ?)", (datum_code,)) subrows = proj_db_cursor.fetchall() assert len(subrows) == 1, datum_code datum_type = subrows[0][0] if datum_type == 'vertical': datum_ensemble_member_table = 'vertical_datum_ensemble_member' proj_db_cursor.execute("INSERT INTO vertical_datum (auth_name, code, name, description, publication_date, frame_reference_epoch, ensemble_accuracy, deprecated) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (EPSG_AUTHORITY, datum_code, datum_name, None, None, None, ensemble_accuracy, deprecated)) else: datum_ensemble_member_table = 'geodetic_datum_ensemble_member' assert datum_type in ('dynamic geodetic', 'geodetic'), datum_code ellipsoid_code = subrows[0][1] prime_meridian_code = subrows[0][2] assert ellipsoid_code, datum_code assert prime_meridian_code, datum_code proj_db_cursor.execute( "INSERT INTO geodetic_datum (auth_name, code, name, description, ellipsoid_auth_name, ellipsoid_code, prime_meridian_auth_name, prime_meridian_code, publication_date, frame_reference_epoch, ensemble_accuracy, anchor, deprecated) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (EPSG_AUTHORITY, datum_code, datum_name, None, EPSG_AUTHORITY, ellipsoid_code, EPSG_AUTHORITY, prime_meridian_code, None, None, ensemble_accuracy, None, deprecated)) proj_db_cursor.execute("SELECT datum_code, datum_sequence FROM epsg.epsg_datumensemblemember WHERE datum_ensemble_code = ? ORDER by datum_sequence", (datum_code,)) for member_code, sequence in proj_db_cursor.fetchall(): proj_db_cursor.execute( "INSERT INTO " + datum_ensemble_member_table + " (ensemble_auth_name, ensemble_code, member_auth_name, member_code, sequence) VALUES (?, ?, ?, ?, ?)", (EPSG_AUTHORITY, datum_code, EPSG_AUTHORITY, member_code, sequence)) def find_crs_code_name_extent_from_geodetic_datum_code(proj_db_cursor, datum_code): proj_db_cursor.execute("SELECT coord_ref_sys_code, coord_ref_sys_name FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind = 'geographic 2D' AND deprecated = 0 AND datum_code = ?", (datum_code,)) subrows = proj_db_cursor.fetchall() assert len(subrows) == 1, (subrows, datum_code) crs_code = subrows[0][0] crs_name = subrows[0][1] proj_db_cursor.execute("SELECT extent_code FROM epsg.epsg_usage WHERE object_table_name = 'epsg_coordinatereferencesystem' AND object_code = ?", (crs_code,)) subrows = proj_db_cursor.fetchall() assert len(subrows) == 1, (subrows, datum_code) crs_extent = subrows[0][0] return crs_code, crs_name, crs_extent def find_crs_code_name_extent_from_vertical_datum_code(proj_db_cursor, datum_code): proj_db_cursor.execute("SELECT coord_ref_sys_code, coord_ref_sys_name FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind = 'vertical' AND deprecated = 0 AND datum_code = ?", (datum_code,)) subrows = proj_db_cursor.fetchall() assert len(subrows) == 1, (subrows, datum_code) crs_code = subrows[0][0] crs_name = subrows[0][1] proj_db_cursor.execute("SELECT extent_code FROM epsg.epsg_usage WHERE object_table_name = 'epsg_coordinatereferencesystem' AND object_code = ?", (crs_code,)) subrows = proj_db_cursor.fetchall() assert len(subrows) == 1, (subrows, datum_code) crs_extent = subrows[0][0] return crs_code, crs_name, crs_extent def create_datumensemble_transformations(proj_db_cursor): proj_db_cursor.execute("SELECT datum_code, datum_name, ensemble_accuracy, deprecated FROM epsg.epsg_datum JOIN epsg.epsg_datumensemble ON datum_code = datum_ensemble_code WHERE datum_type = 'ensemble'") rows = proj_db_cursor.fetchall() for (datum_code, datum_name, ensemble_accuracy, deprecated) in rows: assert ensemble_accuracy is not None proj_db_cursor.execute("SELECT DISTINCT datum_type, ellipsoid_code, prime_meridian_code FROM epsg.epsg_datum WHERE datum_code IN (SELECT datum_code FROM epsg.epsg_datumensemblemember WHERE datum_ensemble_code = ?)", (datum_code,)) subrows = proj_db_cursor.fetchall() assert len(subrows) == 1, datum_code datum_type = subrows[0][0] if datum_type == 'vertical': datum_ensemble_member_table = 'vertical_datum_ensemble_member' ensemble_crs_code, ensemble_crs_name, ensemble_crs_extent = find_crs_code_name_extent_from_vertical_datum_code(proj_db_cursor, datum_code) else: datum_ensemble_member_table = 'geodetic_datum_ensemble_member' assert datum_type in ('dynamic geodetic', 'geodetic'), datum_code ensemble_crs_code, ensemble_crs_name, ensemble_crs_extent = find_crs_code_name_extent_from_geodetic_datum_code(proj_db_cursor, datum_code) proj_db_cursor.execute("SELECT datum_code, datum_sequence FROM epsg.epsg_datumensemblemember WHERE datum_ensemble_code = ? ORDER by datum_sequence", (datum_code,)) for member_code, sequence in proj_db_cursor.fetchall(): if datum_ensemble_member_table == 'geodetic_datum_ensemble_member': # Insert a null transformation between the representative CRS of the datum ensemble # and each representative CRS of its members. crs_code, crs_name, crs_extent = find_crs_code_name_extent_from_geodetic_datum_code(proj_db_cursor, member_code) assert crs_extent == ensemble_crs_extent or (crs_extent in (2830, 1262) and ensemble_crs_extent in (2830, 1262)) or (ensemble_crs_code == 4258 and ensemble_crs_extent == 4755 and crs_extent == 1298), (ensemble_crs_code, ensemble_crs_name, ensemble_crs_extent, crs_code, crs_name, crs_extent) code = '%s_TO_%s' % (ensemble_crs_name, crs_name) code = code.replace(' ', '') code = code.replace('(', '_') code = code.replace(')', '') code = code.upper() name = '%s to %s' % (ensemble_crs_name, crs_name) remarks = 'Accuracy %s m, from datum ensemble definition' % ensemble_accuracy method_code = '9603' method_name = 'Geocentric translations (geog2D domain)' source_crs_code = ensemble_crs_code target_crs_code = crs_code coord_op_accuracy = ensemble_accuracy arg = ('PROJ', code, name, remarks, EPSG_AUTHORITY, method_code, method_name, EPSG_AUTHORITY, source_crs_code, EPSG_AUTHORITY, target_crs_code, coord_op_accuracy, 0,0,0,EPSG_AUTHORITY,'9001', None,None,None,None,None, None,None,None, None,None,None,None,None, None,None,None,None,None, None,None,None, None,None,None, None,None,None,None,None, '',0) proj_db_cursor.execute('INSERT INTO helmert_transformation VALUES (' + '?,?,?, ?, ?,?,?, ?,?, ?,?, ?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?, ?,?,?,?,?, ?,?)', arg) proj_db_cursor.execute('INSERT INTO usage VALUES (?,?,?,?,?,?,?,?,?)', ('PROJ', code + '_USAGE', 'helmert_transformation', 'PROJ', code, EPSG_AUTHORITY, crs_extent, EPSG_AUTHORITY,'1024')) # unknown scope else: # Insert a null transformation between the representative CRS of the datum ensemble # and each representative CRS of its members. crs_code, crs_name, crs_extent = find_crs_code_name_extent_from_vertical_datum_code(proj_db_cursor, member_code) code = '%s_TO_%s' % (ensemble_crs_name, crs_name) code = code.replace(' ', '_') code = code.replace('St.', 'St') code = code.replace('(', '_') code = code.replace(')', '') code = code.replace('__', '_') code = code.upper() name = '%s to %s' % (ensemble_crs_name, crs_name) remarks = 'Accuracy %s m, from datum ensemble definition' % ensemble_accuracy method_code = '9616' method_name = 'Vertical Offset' source_crs_code = ensemble_crs_code target_crs_code = crs_code coord_op_accuracy = ensemble_accuracy arg = ('PROJ', code, name, remarks, EPSG_AUTHORITY, method_code, method_name, EPSG_AUTHORITY, source_crs_code, EPSG_AUTHORITY, target_crs_code, coord_op_accuracy, 'EPSG','8603','Vertical Offset',0,'EPSG','9001', None,None,None,None,None,None, None,None,None,None,None,None, None,None,None,None,None,None, None,None,None,None,None,None, None,None,None,None,None,None, None,None,None,None,None,None, None,None, '',0) proj_db_cursor.execute('INSERT INTO other_transformation VALUES (' + '?,?,?, ?, ?,?,?, ?,?, ?,?, ?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ' + '?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?, ?,?)', arg) proj_db_cursor.execute('INSERT INTO usage VALUES (?,?,?,?,?,?,?,?,?)', ('PROJ', code + '_USAGE', 'other_transformation', 'PROJ', code, EPSG_AUTHORITY, crs_extent, EPSG_AUTHORITY,'1024')) # unknown scope handled_coord_sys_type = "('Cartesian', 'vertical', 'ellipsoidal', 'spherical', 'ordinal')" def fill_coordinate_system(proj_db_cursor): proj_db_cursor.execute( "INSERT INTO coordinate_system SELECT ?, coord_sys_code, coord_sys_type, dimension FROM epsg.epsg_coordinatesystem WHERE coord_sys_type IN " + handled_coord_sys_type, (EPSG_AUTHORITY,)) proj_db_cursor.execute("SELECT coord_sys_name, coord_sys_code, coord_sys_type, dimension FROM epsg.epsg_coordinatesystem WHERE coord_sys_type NOT IN " + handled_coord_sys_type) res = proj_db_cursor.fetchall() for row in res: print('Skipping coordinate system %s' % str(row)) def fill_axis(proj_db_cursor): proj_db_cursor.execute( "INSERT INTO axis " "SELECT ?, coord_axis_code, coord_axis_name, coord_axis_abbreviation, " "coord_axis_orientation, ?, ca.coord_sys_code, coord_axis_order, " "CASE WHEN uom_code IS NULL THEN NULL ELSE ? END, uom_code " "FROM epsg.epsg_coordinateaxis ca " "LEFT JOIN epsg.epsg_coordinateaxisname can " "ON ca.coord_axis_name_code = can.coord_axis_name_code " "JOIN epsg.epsg_coordinatesystem cs " "ON cs.coord_sys_code = ca.coord_sys_code " "WHERE coord_sys_type IN " + handled_coord_sys_type, (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) def fill_geodetic_crs(proj_db_cursor): # TODO?: address 'derived' proj_db_cursor.execute( "SELECT DISTINCT * FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind NOT IN ('projected', 'geographic 2D', 'geographic 3D', 'geocentric', 'vertical', 'compound', 'engineering', 'derived')") res = proj_db_cursor.fetchall() if res: raise Exception('Found unexpected coord_ref_sys_kind in epsg_coordinatereferencesystem: %s' % str(res)) #proj_db_cursor.execute( # "INSERT INTO crs SELECT ?, coord_ref_sys_code, coord_ref_sys_kind FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('geographic 2D', 'geographic 3D', 'geocentric') AND datum_code IS NOT NULL", (EPSG_AUTHORITY,)) # There are a few deprecated records of code 61 000 000 that we have never imported in versions <= 10.039 because # they lacked a datum code. We will continue to ignore them. proj_db_cursor.execute("INSERT INTO geodetic_crs SELECT ?, coord_ref_sys_code, coord_ref_sys_name, NULL, coord_ref_sys_kind, ?, coord_sys_code, ?, datum_code, NULL, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('geographic 2D', 'geographic 3D', 'geocentric') AND datum_code IS NOT NULL AND NOT (coord_ref_sys_code > 61000000 AND deprecated)", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) def fill_vertical_crs(proj_db_cursor): #proj_db_cursor.execute( # "INSERT INTO crs SELECT ?, coord_ref_sys_code, coord_ref_sys_kind FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('vertical') AND datum_code IS NOT NULL", (EPSG_AUTHORITY,)) proj_db_cursor.execute("INSERT INTO vertical_crs SELECT ?, coord_ref_sys_code, coord_ref_sys_name, NULL, ?, coord_sys_code, ?, datum_code, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('vertical') AND datum_code IS NOT NULL", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) proj_db_cursor.execute("SELECT * FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('vertical') AND datum_code IS NULL AND projection_conv_code NOT IN (7812, 7813)") res = proj_db_cursor.fetchall() for row in res: assert False, row proj_db_cursor.execute("SELECT * FROM epsg.epsg_coordinatereferencesystem crs1 WHERE crs1.coord_ref_sys_kind IN ('vertical') AND crs1.datum_code IS NULL AND NOT EXISTS (SELECT 1 FROM epsg.epsg_coordinatereferencesystem crs2 WHERE crs2.coord_ref_sys_code = crs1.base_crs_code AND crs2.coord_ref_sys_kind IN ('vertical'))") res = proj_db_cursor.fetchall() for row in res: assert False, row # Insert vertical_crs that are based on another one, such as EPSG:8228 that is based on EPSG:5703 proj_db_cursor.execute("INSERT INTO vertical_crs SELECT ?, crs1.coord_ref_sys_code, crs1.coord_ref_sys_name, NULL, ?, crs1.coord_sys_code, ?, crs2.datum_code, crs1.deprecated FROM epsg.epsg_coordinatereferencesystem crs1 JOIN epsg.epsg_coordinatereferencesystem crs2 ON crs1.base_crs_code = crs2.coord_ref_sys_code WHERE crs1.coord_ref_sys_kind IN ('vertical') AND crs1.datum_code IS NULL AND crs2.datum_code iS NOT NULL", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) # Extra punishment for EPSG:8051 that is based on EPSG:5715 which is based on EPSG:5714 proj_db_cursor.execute("INSERT INTO vertical_crs SELECT ?, crs1.coord_ref_sys_code, crs1.coord_ref_sys_name, NULL, ?, crs1.coord_sys_code, ?, crs3.datum_code, crs1.deprecated FROM epsg.epsg_coordinatereferencesystem crs1 JOIN epsg.epsg_coordinatereferencesystem crs2 ON crs1.base_crs_code = crs2.coord_ref_sys_code JOIN epsg.epsg_coordinatereferencesystem crs3 ON crs2.base_crs_code = crs3.coord_ref_sys_code WHERE crs1.coord_ref_sys_kind IN ('vertical') AND crs1.datum_code IS NULL AND crs2.datum_code IS NULL", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) def fill_engineering_crs(proj_db_cursor): proj_db_cursor.execute("SELECT ?, coord_ref_sys_code, coord_ref_sys_name, NULL, ?, coord_sys_code, ?, datum_code, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('engineering') AND datum_code IS NOT NULL AND coord_ref_sys_name NOT LIKE 'EPSG%example%' AND coord_ref_sys_name NOT LIKE 'enter here name%'", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) res = proj_db_cursor.fetchall() for row in res: proj_db_cursor.execute("INSERT INTO engineering_crs VALUES (?,?,?,?,?,?,?,?,?)", (row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8])) proj_db_cursor.execute("SELECT * FROM epsg.epsg_coordinatereferencesystem crs1 WHERE crs1.coord_ref_sys_kind IN ('engineering') AND crs1.datum_code IS NULL AND NOT EXISTS (SELECT 1 FROM epsg.epsg_coordinatereferencesystem crs2 WHERE crs2.coord_ref_sys_code = crs1.base_crs_code AND crs2.coord_ref_sys_kind IN ('engineering'))") res = proj_db_cursor.fetchall() for row in res: assert False, row def fill_conversion(proj_db_cursor): # TODO? current we deal with point motion operation as transformation in grid_transformation table proj_db_cursor.execute( "SELECT DISTINCT * FROM epsg.epsg_coordoperation WHERE coord_op_type NOT IN ('conversion', 'transformation', 'concatenated operation', 'point motion operation')") res = proj_db_cursor.fetchall() if res: raise Exception('Found unexpected coord_op_type in epsg_coordoperation: %s' % str(res)) already_mapped_methods = set() trigger_sql = """ CREATE TRIGGER conversion_method_check_insert_trigger BEFORE INSERT ON conversion BEGIN """ # 1068 and 1069 are Height Depth Reversal and Change of Vertical Unit # In EPSG, there is one generic instance of those as 7812 and 7813 that # don't refer to particular CRS, and instances pointing to CRS names # The later are imported in the other_transformation table since we recover # the source/target CRS names from the transformation name. # Method EPSG:9666 'P6 I=J+90 seismic bin grid coordinate operation' requires more than 7 parameters. Not supported by PROJ for now # Idem for EPSG:1049 'P6 I=J-90 seismic bin grid coordinate operation' proj_db_cursor.execute("SELECT coord_op_code, coord_op_name, coord_op_method_code, coord_op_method_name, epsg_coordoperation.deprecated, epsg_coordoperation.remarks FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_type = 'conversion' AND coord_op_name NOT LIKE '%to DMSH' AND (coord_op_method_code NOT IN (1068, 1069, 9666, 1049) OR coord_op_code IN (7812,7813))") for (code, name, method_code, method_name, deprecated, remarks) in proj_db_cursor.fetchall(): # If skipping some projection methods is needed if method_code in (): print(f"Skipping conversion {code}, {name}, {method_code}, {method_name} as the map projection is not handled") continue expected_order = 1 max_n_params = 7 param_auth_name = [None for i in range(max_n_params)] param_code = [None for i in range(max_n_params)] param_name = [None for i in range(max_n_params)] param_value = [None for i in range(max_n_params)] param_uom_auth_name = [None for i in range(max_n_params)] param_uom_code = [None for i in range(max_n_params)] param_uom_type = [None for i in range(max_n_params)] iterator = proj_db_cursor.execute("SELECT sort_order, cop.parameter_code, parameter_name, parameter_value, uom_code, uom.unit_of_meas_type FROM epsg_coordoperationparam cop LEFT JOIN epsg_coordoperationparamvalue copv LEFT JOIN epsg_unitofmeasure uom USING (uom_code) LEFT JOIN epsg_coordoperationparamusage copu ON cop.parameter_code = copv.parameter_code AND copu.parameter_code = copv.parameter_code WHERE copu.coord_op_method_code = copv.coord_op_method_code AND coord_op_code = ? AND copv.coord_op_method_code = ? ORDER BY sort_order", (code, method_code)) for (order, parameter_code, parameter_name, parameter_value, uom_code, uom_type) in iterator: # Modified Krovak and Krovak North Oriented: keep only the 7 first parameters if order == max_n_params + 1 and method_code in (1042, 1043): break assert order <= max_n_params, (method_code, method_name, order) assert order == expected_order, (code, name, method_code, method_name) param_auth_name[order - 1] = EPSG_AUTHORITY param_code[order - 1] = parameter_code param_name[order - 1] = parameter_name param_value[order - 1] = parameter_value param_uom_auth_name[order - 1] = EPSG_AUTHORITY if uom_code else None param_uom_code[order - 1] = uom_code param_uom_type[order - 1] = uom_type expected_order += 1 if method_code not in already_mapped_methods: already_mapped_methods.add(method_code) trigger_sql += """ SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for %(method_name)s') WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '%(method_code)s' AND (NEW.method_name != '%(method_name)s'""" % {'method_name': method_name, 'method_code' : method_code} for i in range(expected_order-1): trigger_sql += " OR NEW.param%(n)d_auth_name != 'EPSG' OR NEW.param%(n)d_code != '%(code)d' OR NEW.param%(n)d_name != '%(param_name)s'" % {'n': i+1, 'code': param_code[i], 'param_name': param_name[i]} if method_name in ('Change of Vertical Unit'): trigger_sql += " OR (NOT((NEW.param%(n)d_value IS NULL AND NEW.param%(n)d_uom_auth_name IS NULL AND NEW.param%(n)d_uom_code IS NULL) OR (NEW.param%(n)d_value IS NOT NULL AND (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param%(n)s_uom_auth_name AND code = NEW.param%(n)s_uom_code) = 'scale')))" % {'n': i+1, 'param_name': param_name[i]} else: trigger_sql += " OR NEW.param%(n)d_value IS NULL OR NEW.param%(n)d_uom_auth_name IS NULL OR NEW.param%(n)d_uom_code IS NULL" % {'n': i+1, 'param_name': param_name[i]} if param_uom_type[i]: trigger_sql += " OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param%(n)s_uom_auth_name AND code = NEW.param%(n)s_uom_code) != '%(uom_type)s'" % {'n': i+1, 'uom_type': param_uom_type[i]} for i in range(expected_order-1, max_n_params): trigger_sql += " OR NEW.param%(n)d_auth_name IS NOT NULL OR NEW.param%(n)d_code IS NOT NULL OR NEW.param%(n)d_name IS NOT NULL OR NEW.param%(n)d_value IS NOT NULL OR NEW.param%(n)d_uom_auth_name IS NOT NULL OR NEW.param%(n)d_uom_code IS NOT NULL" % {'n': i+1} trigger_sql += ");\n" arg = (EPSG_AUTHORITY, code, name, remarks, EPSG_AUTHORITY, method_code, method_name, param_auth_name[0], param_code[0], param_name[0], param_value[0], param_uom_auth_name[0], param_uom_code[0], param_auth_name[1], param_code[1], param_name[1], param_value[1], param_uom_auth_name[1], param_uom_code[1], param_auth_name[2], param_code[2], param_name[2], param_value[2], param_uom_auth_name[2], param_uom_code[2], param_auth_name[3], param_code[3], param_name[3], param_value[3], param_uom_auth_name[3], param_uom_code[3], param_auth_name[4], param_code[4], param_name[4], param_value[4], param_uom_auth_name[4], param_uom_code[4], param_auth_name[5], param_code[5], param_name[5], param_value[5], param_uom_auth_name[5], param_uom_code[5], param_auth_name[6], param_code[6], param_name[6], param_value[6], param_uom_auth_name[6], param_uom_code[6], deprecated) #proj_db_cursor.execute("INSERT INTO coordinate_operation VALUES (?,?,'conversion')", (EPSG_AUTHORITY, code)) proj_db_cursor.execute('INSERT INTO conversion VALUES (' + '?,?,?, ?, ?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ' + '?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?)', arg) trigger_sql += "END;"; #print(trigger_sql) proj_db_cursor.execute(trigger_sql) def fill_projected_crs(proj_db_cursor): #proj_db_cursor.execute( # "INSERT INTO crs SELECT 'EPSG', coord_ref_sys_code, coord_ref_sys_kind FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('projected')") #proj_db_cursor.execute("INSERT INTO projected_crs SELECT 'EPSG', coord_ref_sys_code, coord_ref_sys_name, 'EPSG', coord_sys_code, 'EPSG', base_crs_code, 'EPSG', projection_conv_code, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('projected')") proj_db_cursor.execute("SELECT ?, coord_ref_sys_code, coord_ref_sys_name, NULL, ?, coord_sys_code, ?, base_crs_code, ?, projection_conv_code, crs.deprecated, co.coord_op_method_code, com.coord_op_method_name FROM epsg.epsg_coordinatereferencesystem crs LEFT JOIN epsg.epsg_coordoperation co ON crs.projection_conv_code = co.coord_op_code LEFT JOIN epsg.epsg_coordoperationmethod com USING (coord_op_method_code) WHERE coord_ref_sys_kind IN ('projected')", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) for (auth_name, code, name, description, coordinate_system_auth_name, coordinate_system_code, geodetic_crs_auth_name, geodetic_crs_code, conversion_auth_name, conversion_code, deprecated, coord_op_method_code, coord_op_method_name) in proj_db_cursor.fetchall(): # If skipping some projection methods is needed if coord_op_method_code in (): print(f'Skipping EPSG:{code} {name} as we do not handle yet projection method EPSG:{coord_op_method_code} / {coord_op_method_name}') continue proj_db_cursor.execute("SELECT 1 FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_code = ? AND coord_ref_sys_kind IN ('geographic 2D', 'geographic 3D', 'geocentric')", (geodetic_crs_code,)) if proj_db_cursor.fetchone(): #proj_db_cursor.execute("INSERT INTO crs VALUES (?, ?, 'projected')", (EPSG_AUTHORITY, code)) try: proj_db_cursor.execute("INSERT INTO projected_crs VALUES (?,?,?,?,?,?,?,?,?,?,NULL,?)", (auth_name, code, name, description, coordinate_system_auth_name, coordinate_system_code, geodetic_crs_auth_name, geodetic_crs_code, conversion_auth_name, conversion_code, deprecated)) except sqlite3.IntegrityError as e: print(e) print(row) raise def fill_compound_crs(proj_db_cursor): #proj_db_cursor.execute( # "INSERT INTO crs SELECT ?, coord_ref_sys_code, coord_ref_sys_kind FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('compound')", (EPSG_AUTHORITY,)) proj_db_cursor.execute("SELECT ?, coord_ref_sys_code, coord_ref_sys_name, NULL, ?, cmpd_horizcrs_code, ?, cmpd_vertcrs_code, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('compound') AND coord_ref_sys_name NOT LIKE 'EPSG%example%'", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY)) for auth_name, code, name, description, horiz_auth_name, horiz_code, vert_auth_name, vert_code, deprecated in proj_db_cursor.fetchall(): try: proj_db_cursor.execute("INSERT INTO compound_crs VALUES (?,?,?,?,?,?,?,?,?)", (auth_name, code, name, description, horiz_auth_name, horiz_code, vert_auth_name, vert_code, deprecated)) except sqlite3.IntegrityError as e: print(e) print(auth_name, code, name, description, horiz_auth_name, horiz_code, vert_auth_name, vert_code, deprecated) raise def fill_helmert_transformation(proj_db_cursor): proj_db_cursor.execute("SELECT coord_op_code, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, epsg_coordoperation.deprecated, epsg_coordoperation.remarks FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_type = 'transformation' AND coord_op_method_code IN (1031, 1032, 1033, 1034, 1035, 1037, 1038, 1039, 1053, 1054, 1055, 1056, 1057, 1058, 1061, 1062, 1063, 1065, 1066, 1132, 1133, 1140, 9603, 9606, 9607, 9636) ") for (code, name, method_code, method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, deprecated, remarks) in proj_db_cursor.fetchall(): expected_order = 1 max_n_params = 15 param_auth_name = [None for i in range(max_n_params)] param_code = [None for i in range(max_n_params)] param_name = [None for i in range(max_n_params)] param_value = [None for i in range(max_n_params)] param_uom_code = [None for i in range(max_n_params)] iterator = proj_db_cursor.execute("SELECT sort_order, cop.parameter_code, parameter_name, parameter_value, uom_code from epsg_coordoperationparam cop LEFT JOIN epsg_coordoperationparamvalue copv LEFT JOIN epsg_coordoperationparamusage copu ON cop.parameter_code = copv.parameter_code AND copu.parameter_code = copv.parameter_code WHERE copu.coord_op_method_code = copv.coord_op_method_code AND coord_op_code = ? AND copv.coord_op_method_code = ? ORDER BY sort_order", (code, method_code)) for (order, parameter_code, parameter_name, parameter_value, uom_code) in iterator: assert order <= max_n_params assert order == expected_order param_auth_name[order - 1] = EPSG_AUTHORITY param_code[order - 1] = parameter_code param_name[order - 1] = parameter_name param_value[order - 1] = parameter_value param_uom_code[order - 1] = uom_code expected_order += 1 n_params = expected_order - 1 if param_value[0] is None and deprecated: continue # silently discard non sense deprecated transforms (like EPSG:1076) assert param_code[0] == 8605 assert param_code[1] == 8606 assert param_code[2] == 8607 assert param_uom_code[0] == param_uom_code[1] assert param_uom_code[0] == param_uom_code[2] px = None py = None pz = None pivot_uom_code = None if n_params > 3: assert param_code[3] == 8608 assert param_code[4] == 8609 assert param_code[5] == 8610 assert param_code[6] == 8611 assert param_uom_code[3] == param_uom_code[4] assert param_uom_code[3] == param_uom_code[5] for i in range(7): assert param_uom_code[i] is not None if n_params == 8: # Time-specific transformation assert param_code[7] == 1049, (code, name, param_code[7]) param_value[14] = param_value[7] param_uom_code[14] = param_uom_code[7] param_value[7] = None param_uom_code[7] = None elif n_params == 10: # Molodensky-Badekas assert param_code[7] == 8617, (code, name, param_code[7]) assert param_code[8] == 8618, (code, name, param_code[8]) assert param_code[9] == 8667, (code, name, param_code[9]) assert param_uom_code[7] == param_uom_code[8] assert param_uom_code[7] == param_uom_code[9] px = param_value[7] py = param_value[8] pz = param_value[9] pivot_uom_code = param_uom_code[7] param_value[7] = None param_uom_code[7] = None param_value[8] = None param_uom_code[8] = None param_value[9] = None param_uom_code[9] = None elif n_params > 7: # Time-dependant transformation assert param_code[7] == 1040, (code, name, param_code[7]) assert param_code[8] == 1041 assert param_code[9] == 1042 assert param_code[10] == 1043 assert param_code[11] == 1044 assert param_code[12] == 1045 assert param_code[13] == 1046 assert param_code[14] == 1047 assert param_uom_code[7] == param_uom_code[8] assert param_uom_code[7] == param_uom_code[9] assert param_uom_code[10] == param_uom_code[11] assert param_uom_code[10] == param_uom_code[12] for i in range(15): assert param_uom_code[i] is not None, (code, name, i, param_name[i]) arg = (EPSG_AUTHORITY, code, name, remarks, EPSG_AUTHORITY, method_code, method_name, EPSG_AUTHORITY, source_crs_code, EPSG_AUTHORITY, target_crs_code, coord_op_accuracy, param_value[0], param_value[1], param_value[2], EPSG_AUTHORITY, param_uom_code[0], param_value[3], param_value[4], param_value[5], EPSG_AUTHORITY if param_uom_code[3] else None, param_uom_code[3], param_value[6], EPSG_AUTHORITY if param_uom_code[6] else None, param_uom_code[6], param_value[7], param_value[8], param_value[9], EPSG_AUTHORITY if param_uom_code[7] else None, param_uom_code[7], param_value[10], param_value[11], param_value[12], EPSG_AUTHORITY if param_uom_code[10] else None, param_uom_code[10], param_value[13], EPSG_AUTHORITY if param_uom_code[13] else None, param_uom_code[13], param_value[14], EPSG_AUTHORITY if param_uom_code[14] else None, param_uom_code[14], px, py, pz, EPSG_AUTHORITY if px else None, pivot_uom_code, coord_tfm_version, deprecated ) #proj_db_cursor.execute("INSERT INTO coordinate_operation VALUES (?,?,'helmert_transformation')", (EPSG_AUTHORITY, code)) proj_db_cursor.execute('INSERT INTO helmert_transformation VALUES (' + '?,?,?, ?, ?,?,?, ?,?, ?,?, ?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?, ?,?,?,?,?, ?,?)', arg) def fill_grid_transformation(proj_db_cursor): proj_db_cursor.execute("SELECT coord_op_code, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, epsg_coordoperation.deprecated, epsg_coordoperation.remarks FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_type IN ('transformation', 'point motion operation') AND coord_op_method_code NOT IN (1131, 1136) AND (coord_op_method_name LIKE 'Geographic3D to%' OR coord_op_method_name LIKE 'Geog3D to%' OR coord_op_method_name LIKE 'Point motion by grid%' OR coord_op_method_name LIKE 'Vertical % by %grid%' OR coord_op_method_name IN ('NADCON', 'NADCON5 (2D)', 'NADCON5 (3D)', 'NTv1', 'NTv2', 'VERTCON', 'Geocentric translation by Grid Interpolation (IGN)', 'Geographic3D Offset by velocity grid (NTv2_Vel)', 'New Zealand Deformation Model', 'Cartesian Grid Offsets by TIN Interpolation (JSON)', 'Vertical Offset by TIN Interpolation (JSON)'))") for (code, name, method_code, method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, deprecated, remarks) in proj_db_cursor.fetchall(): expected_order = 1 max_n_params = 3 if method_name == 'Geocentric translation by Grid Interpolation (IGN)' else 2 param_auth_name = [None for i in range(max_n_params)] param_code = [None for i in range(max_n_params)] param_name = [None for i in range(max_n_params)] param_value = [None for i in range(max_n_params)] param_uom_code = [None for i in range(max_n_params)] iterator = proj_db_cursor.execute("SELECT sort_order, cop.parameter_code, parameter_name, parameter_value, param_value_file_ref, uom_code from epsg_coordoperationparam cop LEFT JOIN epsg_coordoperationparamvalue copv LEFT JOIN epsg_coordoperationparamusage copu ON cop.parameter_code = copv.parameter_code AND copu.parameter_code = copv.parameter_code WHERE copu.coord_op_method_code = copv.coord_op_method_code AND coord_op_code = ? AND copv.coord_op_method_code = ? ORDER BY sort_order", (code, method_code)) first = True order_inc = 0 for (order, parameter_code, parameter_name, parameter_value, param_value_file_ref, uom_code) in iterator: if first and order == 0: # Some new records have sort_order starting at 0 rather than 1 # print(code, name, method_code, method_name, param_code, param_name, order) order_inc = 1 order += order_inc first = False # NADCON5 lists 3 grids (lat_shift, lon_shift, ellipsoidal_height_shift). Our database # can only list 2. Truncate. Not critical as we ultimately have one GeoTIFF # grid for the 3 original grids if method_name == "NADCON5 (3D)" and order > max_n_params: break assert order <= max_n_params, (code, name) assert order == expected_order, (code, name, method_code, method_name, param_code, param_name, order) if parameter_value is not None: assert param_value_file_ref is None or len(param_value_file_ref) == 0, (order, parameter_code, parameter_name, parameter_value, param_value_file_ref, uom_code) if param_value_file_ref is not None and len(param_value_file_ref) != 0: assert parameter_value is None, (order, parameter_code, parameter_name, parameter_value, param_value_file_ref, uom_code) param_auth_name[order - 1] = EPSG_AUTHORITY param_code[order - 1] = parameter_code param_name[order - 1] = parameter_name param_value[order - 1] = parameter_value if parameter_value else param_value_file_ref param_uom_code[order - 1] = uom_code expected_order += 1 n_params = expected_order - 1 assert param_code[0] in (1048, 1050, 1063, 1064, 8656, 8657, 8666, 8732, 8727), (code, param_code[0]) grid2_param_auth_name = None grid2_param_code = None grid2_param_name = None grid2_value = None interpolation_crs_auth_name = None interpolation_crs_code = None if method_code == 9613: # NADCON assert param_code[1] == 8658, param_code[1] grid2_param_auth_name = EPSG_AUTHORITY grid2_param_code = param_code[1] grid2_param_name = param_name[1] grid2_value = param_value[1] elif method_code in (1074, 1075): # NADCON5 (2D) and NADCON5 (3D) assert param_code[1] == 8658, param_code[1] grid2_param_auth_name = EPSG_AUTHORITY grid2_param_code = param_code[1] grid2_param_name = param_name[1] grid2_value = param_value[1] # 1071: Vertical Offset by Grid Interpolation (NZLVD) # 1080: Vertical Offset by Grid Interpolation (BEV AT) # 1081: Geographic3D to GravityRelatedHeight (BEV AT) # 1083: Geog3D to Geog2D+Vertical (AUSGeoid v2) # 1084: Vertical Offset by Grid Interpolation (gtx) # 1085: Vertical Offset by Grid Interpolation (asc) # 1088: Geog3D to Geog2D+GravityRelatedHeight (gtx) # 1089: Geog3D to Geog2D+GravityRelatedHeight (BEV AT) # 1090: Geog3D to Geog2D+GravityRelatedHeight (CGG 2013) # 1091: Geog3D to Geog2D+GravityRelatedHeight (CI) # 1092: Geog3D to Geog2D+GravityRelatedHeight (EGM2008) # 1093: Geog3D to Geog2D+GravityRelatedHeight (Gravsoft) # 1094: Geog3D to Geog2D+GravityRelatedHeight (IGN1997) # 1095: Geog3D to Geog2D+GravityRelatedHeight (IGN2009) # 1096: Geog3D to Geog2D+GravityRelatedHeight (OSGM15-Ire) # 1097: Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB) # 1098: Geog3D to Geog2D+GravityRelatedHeight (SA 2010) # 1100: Geog3D to Geog2D+GravityRelatedHeight (PL txt) # 1101: Vertical Offset by Grid Interpolation (PL txt) # 1103: Geog3D to Geog2D+GravityRelatedHeight (EGM) # 1105: Geog3D to Geog2D+GravityRelatedHeight (ITAL2005) # 1110: Geog3D to Geog2D+Depth (Gravsoft) # 1112: Vertical Offset by Grid Interpolation (NRCan byn) # 1113: Vertical Offset by velocity grid (NRCan byn) # 1114: Geographic3D Offset by velocity grid (NTv2_Vel) # 1115: Geog3D to Geog2D+Depth (txt) # 1118: Geog3D to Geog2D+GravityRelatedHeight (ISG) # 1122: Geog3D to Geog2D+Depth (gtx) # 1124: Geog3D to Geog2D+GravityRelatedHeight (gtg) # 1126: Vertical change by geoid grid difference (NRCan) # 1135: Geog3D to Geog2D+GravityRelatedHeight (NGS bin) # 1137: Vertical Offset by TIN Interpolation (JSON) # 1138: Cartesian Grid Offsets by TIN Interpolation (JSON) # 1141: Point motion by grid (NEU domain) (NTv2_Vel) # WARNING: update Transformation::isGeographic3DToGravityRelatedHeight() # in src/iso19111/operation/singleoperation.cpp if adding new methods elif method_code in (1071, 1080, 1081, 1083, 1084, 1085, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1100, 1101, 1103, 1105, 1110, 1112, 1113, 1114, 1115, 1118, 1122, 1124, 1126, 1128, 1129, 1135, 1137, 1138, 1141) and n_params == 2: assert param_code[1] == 1048, (code, method_code, param_code[1]) interpolation_crs_auth_name = EPSG_AUTHORITY interpolation_crs_code = str(int(param_value[1])) # needed to avoid codes like XXXX.0 # 1087: Geocentric translation by Grid Interpolation (IGN) elif method_code in (1087, ) and n_params == 3: assert param_code[1] == 1048, (code, method_code, param_code[1]) interpolation_crs_auth_name = EPSG_AUTHORITY interpolation_crs_code = str(int(param_value[1])) # needed to avoid codes like XXXX.0 # ignoring parameter 2 Standard CT code else: assert n_params == 1, (code, name, method_code) arg = (EPSG_AUTHORITY, code, name, remarks, EPSG_AUTHORITY, method_code, method_name, EPSG_AUTHORITY, source_crs_code, EPSG_AUTHORITY, target_crs_code, coord_op_accuracy, EPSG_AUTHORITY, param_code[0], param_name[0], param_value[0], grid2_param_auth_name, grid2_param_code, grid2_param_name, grid2_value, interpolation_crs_auth_name, interpolation_crs_code, coord_tfm_version, deprecated ) #proj_db_cursor.execute("INSERT INTO coordinate_operation VALUES (?,?,'grid_transformation')", (EPSG_AUTHORITY, code)) try: proj_db_cursor.execute('INSERT INTO grid_transformation VALUES (' + '?,?,?, ?, ?,?,?, ?,?, ?,?, ?, ?,?,?,?, ?,?,?,?, ?,?, ?,?)', arg) except sqlite3.IntegrityError: print(arg) raise def fill_other_transformation(proj_db_cursor): # 9601: Longitude rotation # 9616: Vertical offset # 9618: Geographic2D with Height offsets # 9619: Geographic2D offsets # 9624: Affine Parametric Transformation # 9660: Geographic3D offsets # 1131: Geog3D to Geog2D+GravityRelatedHeight # 1136: Geographic3D to GravityRelatedHeight # 1068: Height Depth Reversal # 1069: Change of Vertical Unit # 1046: Vertical Offset and Slope # 9621: Similarity transformation # 9656: Cartesian Grid Offsets proj_db_cursor.execute("SELECT coord_op_code, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, epsg_coordoperation.deprecated, epsg_coordoperation.remarks FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_method_code IN (9601, 9616, 9618, 9619, 9624, 9660, 1068, 1069, 1046, 1131, 1136, 9621, 9656)") for (code, name, method_code, method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, deprecated, remarks) in proj_db_cursor.fetchall(): # 1068 and 1069 are Height Depth Reversal and Change of Vertical Unit # In EPSG, there is one generic instance of those as 7812 and 7813 that # don't refer to particular CRS, and instances pointing to CRS names # The later are imported in the other_transformation table since we recover # the source/target CRS names from the transformation name. if method_code in (1068, 1069) and source_crs_code is None and target_crs_code is None: parts = name.split(" to ") if len(parts) != 2: continue proj_db_cursor.execute("SELECT coord_ref_sys_code FROM epsg_coordinatereferencesystem WHERE coord_ref_sys_name = ?", (parts[0],)) source_codes = proj_db_cursor.fetchall() proj_db_cursor.execute("SELECT coord_ref_sys_code FROM epsg_coordinatereferencesystem WHERE coord_ref_sys_name = ?", (parts[1],)) target_codes = proj_db_cursor.fetchall() if len(source_codes) != 1 and len(target_codes) != 1: continue source_crs_code = source_codes[0][0] target_crs_code = target_codes[0][0] expected_order = 1 max_n_params = 7 param_auth_name = [None for i in range(max_n_params)] param_code = [None for i in range(max_n_params)] param_name = [None for i in range(max_n_params)] param_value = [None for i in range(max_n_params)] param_uom_auth_name = [None for i in range(max_n_params)] param_uom_code = [None for i in range(max_n_params)] interpolation_crs_auth_name = None interpolation_crs_code = None iterator = proj_db_cursor.execute("SELECT sort_order, cop.parameter_code, parameter_name, parameter_value, uom_code from epsg_coordoperationparam cop LEFT JOIN epsg_coordoperationparamvalue copv LEFT JOIN epsg_coordoperationparamusage copu ON cop.parameter_code = copv.parameter_code AND copu.parameter_code = copv.parameter_code WHERE copu.coord_op_method_code = copv.coord_op_method_code AND coord_op_code = ? AND copv.coord_op_method_code = ? ORDER BY sort_order", (code, method_code)) for (order, parameter_code, parameter_name, parameter_value, uom_code) in iterator: assert order <= max_n_params assert order == expected_order if method_code == 1046 and order == 6: # Vertical offset and slope assert parameter_code == 1037 # EPSG code for Horizontal CRS interpolation_crs_auth_name = EPSG_AUTHORITY interpolation_crs_code = str(int(parameter_value)) # needed to avoid codes like XXXX.0 break param_auth_name[order - 1] = EPSG_AUTHORITY param_code[order - 1] = parameter_code param_name[order - 1] = parameter_name param_value[order - 1] = parameter_value param_uom_auth_name[order - 1] = EPSG_AUTHORITY param_uom_code[order - 1] = uom_code expected_order += 1 arg = (EPSG_AUTHORITY, code, name, remarks, EPSG_AUTHORITY, method_code, method_name, EPSG_AUTHORITY, source_crs_code, EPSG_AUTHORITY, target_crs_code, coord_op_accuracy, param_auth_name[0], param_code[0], param_name[0], param_value[0], param_uom_auth_name[0], param_uom_code[0], param_auth_name[1], param_code[1], param_name[1], param_value[1], param_uom_auth_name[1], param_uom_code[1], param_auth_name[2], param_code[2], param_name[2], param_value[2], param_uom_auth_name[2], param_uom_code[2], param_auth_name[3], param_code[3], param_name[3], param_value[3], param_uom_auth_name[3], param_uom_code[3], param_auth_name[4], param_code[4], param_name[4], param_value[4], param_uom_auth_name[4], param_uom_code[4], param_auth_name[5], param_code[5], param_name[5], param_value[5], param_uom_auth_name[5], param_uom_code[5], param_auth_name[6], param_code[6], param_name[6], param_value[6], param_uom_auth_name[6], param_uom_code[6], interpolation_crs_auth_name, interpolation_crs_code, coord_tfm_version, deprecated) #proj_db_cursor.execute("INSERT INTO coordinate_operation VALUES (?,?,'other_transformation')", (EPSG_AUTHORITY, code)) #print(arg) proj_db_cursor.execute('INSERT INTO other_transformation VALUES (' + '?,?,?, ?, ?,?,?, ?,?, ?,?, ?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ' + '?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?,?,?,?,?, ?,?, ?,?)', arg) def fill_concatenated_operation(proj_db_cursor): proj_db_cursor.execute("SELECT coord_op_code, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, epsg_coordoperation.deprecated, epsg_coordoperation.remarks FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_type = 'concatenated operation'") for (code, name, method_code, method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, deprecated, remarks) in proj_db_cursor.fetchall(): expected_order = 1 steps_code = [] iterator = proj_db_cursor.execute("SELECT op_path_step, single_operation_code FROM epsg_coordoperationpath WHERE concat_operation_code = ? ORDER BY op_path_step", (code,)) for (order, single_operation_code) in iterator: assert order == expected_order steps_code.append(single_operation_code) expected_order += 1 n_params = expected_order - 1 if n_params == 0: # For example http://www.epsg-registry.org//export.htm?gml=urn:ogc:def:coordinateOperation:EPSG::8658 continue all_steps_exist = True for step_code in steps_code: proj_db_cursor.execute("SELECT 1 FROM coordinate_operation_with_conversion_view WHERE code = ?", (step_code,)) if proj_db_cursor.fetchone() is None: print('Step of code %d for concatenated_operation %d does not exist' % (step_code, code)) all_steps_exist = False break if all_steps_exist: arg = (EPSG_AUTHORITY, code, name, remarks, EPSG_AUTHORITY, source_crs_code, EPSG_AUTHORITY, target_crs_code, coord_op_accuracy, coord_tfm_version, deprecated ) #proj_db_cursor.execute("INSERT INTO coordinate_operation VALUES (?,?,'concatenated_operation')", (EPSG_AUTHORITY, code)) proj_db_cursor.execute('INSERT INTO concatenated_operation VALUES (' + '?,?,?, ?, ?,?, ?,?, ?, ?,?)', arg) for i in range(len(steps_code)): proj_db_cursor.execute('INSERT INTO concatenated_operation_step VALUES (?,?,?,?,?,NULL)', (EPSG_AUTHORITY, code, i+1, EPSG_AUTHORITY,steps_code[i])) def fill_alias(proj_db_cursor): proj_db_cursor.execute("SELECT DISTINCT object_code, alias FROM epsg.epsg_alias WHERE object_table_name = 'epsg_datum'") for row in proj_db_cursor.fetchall(): code, alt_name = row proj_db_cursor.execute('SELECT 1 FROM geodetic_datum WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is not None: proj_db_cursor.execute("INSERT INTO alias_name VALUES ('geodetic_datum','EPSG',?,?,'EPSG')", (code, alt_name)) else: proj_db_cursor.execute('SELECT 1 FROM vertical_datum WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is not None: proj_db_cursor.execute("INSERT INTO alias_name VALUES ('vertical_datum','EPSG',?,?,'EPSG')", (code, alt_name)) else: print('Cannot find datum %s in geodetic_datum or vertical_datum' % (code)) proj_db_cursor.execute("SELECT DISTINCT object_code, alias FROM epsg.epsg_alias WHERE object_table_name = 'epsg_coordinatereferencesystem'") for row in proj_db_cursor.fetchall(): code, alt_name = row if int(code) > 60000000: continue proj_db_cursor.execute('SELECT 1 FROM geodetic_crs WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is not None: proj_db_cursor.execute("INSERT INTO alias_name VALUES ('geodetic_crs','EPSG',?,?,'EPSG')", (code, alt_name)) continue proj_db_cursor.execute('SELECT 1 FROM projected_crs WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is not None: proj_db_cursor.execute("INSERT INTO alias_name VALUES ('projected_crs','EPSG',?,?,'EPSG')", (code, alt_name)) continue proj_db_cursor.execute('SELECT 1 FROM vertical_crs WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is not None: proj_db_cursor.execute("INSERT INTO alias_name VALUES ('vertical_crs','EPSG',?,?,'EPSG')", (code, alt_name)) continue proj_db_cursor.execute('SELECT 1 FROM compound_crs WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is not None: proj_db_cursor.execute("INSERT INTO alias_name VALUES ('compound_crs','EPSG',?,?,'EPSG')", (code, alt_name)) continue print('Cannot find CRS %s in geodetic_crs, projected_crs, vertical_crs or compound_crs' % (code)) def find_table(proj_db_cursor, code): for table_name in ('helmert_transformation', 'grid_transformation', 'concatenated_operation', 'geodetic_crs', 'projected_crs', 'vertical_crs', 'compound_crs'): proj_db_cursor.execute('SELECT name FROM %s WHERE code = ?' % table_name, (code,)) row = proj_db_cursor.fetchone() if row is not None: return row[0], table_name return None def fill_supersession(proj_db_cursor): proj_db_cursor.execute("SELECT object_code, superseded_by FROM epsg.epsg_supersession WHERE object_table_name = 'epsg_coordoperation' AND object_code != superseded_by") for row in proj_db_cursor.fetchall(): code, superseded_by = row proj_db_cursor.execute('SELECT 1 FROM coordinate_operation_view WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is None: print('Skipping supersession of %d since it has not been imported' % code) continue src_name, superseded_table_name = find_table(proj_db_cursor, code) dst_name, replacement_table_name = find_table(proj_db_cursor, superseded_by) assert superseded_table_name, row assert replacement_table_name, row if superseded_table_name == 'grid_transformation' and replacement_table_name == 'grid_transformation' and src_name.startswith('NAD27 to NAD83'): print('Skipping supersession of %d (%s) by %d (%s) because of exception specific to NAD27 to NAD83' % (code, src_name, superseded_by, dst_name)) continue proj_db_cursor.execute("SELECT source_crs_code, target_crs_code FROM epsg_coordoperation WHERE coord_op_code = ?", (code,)) source_crs_code_superseded, target_crs_code_superseded = proj_db_cursor.fetchone() proj_db_cursor.execute("SELECT source_crs_code, target_crs_code FROM epsg_coordoperation WHERE coord_op_code = ?", (superseded_by,)) source_crs_code_replacement, target_crs_code_replacement = proj_db_cursor.fetchone() same_source_target_crs = (source_crs_code_superseded, target_crs_code_superseded) == (source_crs_code_replacement, target_crs_code_replacement) proj_db_cursor.execute("INSERT INTO supersession VALUES (?,'EPSG',?,?,'EPSG',?,'EPSG',?)", (superseded_table_name, code, replacement_table_name, superseded_by, same_source_target_crs)) def fill_deprecation(proj_db_cursor): proj_db_cursor.execute("SELECT object_code, replaced_by FROM epsg.epsg_deprecation WHERE object_table_name = 'epsg_coordinatereferencesystem' AND object_code != replaced_by") for row in proj_db_cursor.fetchall(): code, replaced_by = row proj_db_cursor.execute('SELECT 1 FROM crs_view WHERE code = ?', (code,)) if proj_db_cursor.fetchone() is None: print('Skipping deprecation of %d since it has not been imported' % code) continue src_name, deprecated_table_name = find_table(proj_db_cursor, code) dst_name, replacement_table_name = find_table(proj_db_cursor, replaced_by) assert deprecated_table_name, row assert replacement_table_name, row assert deprecated_table_name == replacement_table_name proj_db_cursor.execute("INSERT INTO deprecation VALUES (?,'EPSG',?,'EPSG',?,'EPSG')", (deprecated_table_name, code, replaced_by)) def report_non_imported_operations(proj_db_cursor): proj_db_cursor.execute("SELECT coord_op_code, coord_op_type, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, coord_op_accuracy, epsg_coordoperation.deprecated FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_code NOT IN (SELECT code FROM coordinate_operation_with_conversion_view) AND NOT (coord_op_method_name = 'France geocentric interpolation' AND epsg_coordoperation.deprecated = 1)") rows = [] first = True for row in proj_db_cursor.fetchall(): if first: print('Non imported coordinate_operation:') first = False print(' ' + str(row)) rows.append(row) return rows epsg_db_conn, epsg_tmp_db_filename = ingest_epsg() script_dir_name = os.path.dirname(os.path.realpath(__file__)) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') proj_db_filename = ':memory:' #proj_db_filename = 'tmp_proj.db' if os.path.exists(proj_db_filename): os.unlink(proj_db_filename) proj_db_conn = sqlite3.connect(proj_db_filename) proj_db_cursor = proj_db_conn.cursor() proj_db_cursor.execute('PRAGMA foreign_keys = 1;') ingest_sqlite_dump(proj_db_cursor, os.path.join(sql_dir_name, 'proj_db_table_defs.sql')) proj_db_cursor.execute("INSERT INTO celestial_body VALUES('PROJ', 'EARTH', 'Earth', 6378137.0);") # A bit messy, but to avoid churn in our existing .sql files, we temporarily # recreate the original conversion and helmert_transformation tables # instead of the view in the true database. proj_db_cursor.execute("""DROP VIEW conversion;""") proj_db_cursor.execute("""DROP TABLE conversion_table;""") proj_db_cursor.execute("""CREATE TABLE conversion( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, method_auth_name TEXT CHECK (method_auth_name IS NULL OR length(method_auth_name) >= 1), method_code TEXT CHECK (method_code IS NULL OR length(method_code) >= 1), method_name TEXT, param1_auth_name TEXT, param1_code TEXT, param1_name TEXT, param1_value FLOAT, param1_uom_auth_name TEXT, param1_uom_code TEXT, param2_auth_name TEXT, param2_code TEXT, param2_name TEXT, param2_value FLOAT, param2_uom_auth_name TEXT, param2_uom_code TEXT, param3_auth_name TEXT, param3_code TEXT, param3_name TEXT, param3_value FLOAT, param3_uom_auth_name TEXT, param3_uom_code TEXT, param4_auth_name TEXT, param4_code TEXT, param4_name TEXT, param4_value FLOAT, param4_uom_auth_name TEXT, param4_uom_code TEXT, param5_auth_name TEXT, param5_code TEXT, param5_name TEXT, param5_value FLOAT, param5_uom_auth_name TEXT, param5_uom_code TEXT, param6_auth_name TEXT, param6_code TEXT, param6_name TEXT, param6_value FLOAT, param6_uom_auth_name TEXT, param6_uom_code TEXT, param7_auth_name TEXT, param7_code TEXT, param7_name TEXT, param7_value FLOAT, param7_uom_auth_name TEXT, param7_uom_code TEXT, deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_conversion PRIMARY KEY (auth_name, code) );""") proj_db_cursor.execute("""DROP VIEW helmert_transformation;""") proj_db_cursor.execute("""DROP TABLE helmert_transformation_table;""") proj_db_cursor.execute("""CREATE TABLE helmert_transformation( auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1), code TEXT NOT NULL CHECK (length(code) >= 1), name TEXT NOT NULL CHECK (length(name) >= 2), description TEXT, method_auth_name TEXT NOT NULL CHECK (length(method_auth_name) >= 1), method_code TEXT NOT NULL CHECK (length(method_code) >= 1), method_name NOT NULL CHECK (length(method_name) >= 2), source_crs_auth_name TEXT NOT NULL, source_crs_code TEXT NOT NULL, target_crs_auth_name TEXT NOT NULL, target_crs_code TEXT NOT NULL, accuracy FLOAT CHECK (accuracy >= 0), tx FLOAT NOT NULL, ty FLOAT NOT NULL, tz FLOAT NOT NULL, translation_uom_auth_name TEXT NOT NULL, translation_uom_code TEXT NOT NULL, rx FLOAT, ry FLOAT, rz FLOAT, rotation_uom_auth_name TEXT, rotation_uom_code TEXT, scale_difference FLOAT, scale_difference_uom_auth_name TEXT, scale_difference_uom_code TEXT, rate_tx FLOAT, rate_ty FLOAT, rate_tz FLOAT, rate_translation_uom_auth_name TEXT, rate_translation_uom_code TEXT, rate_rx FLOAT, rate_ry FLOAT, rate_rz FLOAT, rate_rotation_uom_auth_name TEXT, rate_rotation_uom_code TEXT, rate_scale_difference FLOAT, rate_scale_difference_uom_auth_name TEXT, rate_scale_difference_uom_code TEXT, epoch FLOAT, epoch_uom_auth_name TEXT, epoch_uom_code TEXT, px FLOAT, -- Pivot / evaluation point for Molodensky-Badekas py FLOAT, pz FLOAT, pivot_uom_auth_name TEXT, pivot_uom_code TEXT, operation_version TEXT, -- normally mandatory in OGC Topic 2 but optional here deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)), CONSTRAINT pk_helmert_transformation PRIMARY KEY (auth_name, code) );""") proj_db_cursor.execute("SELECT name, sql FROM sqlite_master WHERE type = 'table' AND name = 'projected_crs'") for (name, sql) in proj_db_cursor.fetchall(): proj_db_cursor.execute("DROP TABLE " + name) proj_db_cursor.execute(sql.replace('conversion_table', 'conversion')) proj_db_cursor.execute("SELECT name, sql FROM sqlite_master WHERE type = 'view'") for (name, sql) in proj_db_cursor.fetchall(): if 'conversion_table' in sql: proj_db_cursor.execute("DROP VIEW " + name) proj_db_cursor.execute(sql.replace('conversion_table', 'conversion')) elif 'helmert_transformation_table' in sql: proj_db_cursor.execute("DROP VIEW " + name) proj_db_cursor.execute(sql.replace('helmert_transformation_table', 'helmert_transformation')) proj_db_cursor = proj_db_conn.cursor() proj_db_cursor.execute("ATTACH DATABASE '%s' AS epsg;" % epsg_tmp_db_filename) fill_unit_of_measure(proj_db_cursor) fill_ellipsoid(proj_db_cursor) fill_extent(proj_db_cursor) fill_scope(proj_db_cursor) fill_prime_meridian(proj_db_cursor) fill_geodetic_datum(proj_db_cursor) fill_vertical_datum(proj_db_cursor) fill_engineering_datum(proj_db_cursor) fill_datumensemble(proj_db_cursor) fill_coordinate_system(proj_db_cursor) fill_axis(proj_db_cursor) fill_geodetic_crs(proj_db_cursor) fill_vertical_crs(proj_db_cursor) fill_engineering_crs(proj_db_cursor) create_datumensemble_transformations(proj_db_cursor) fill_conversion(proj_db_cursor) fill_projected_crs(proj_db_cursor) fill_compound_crs(proj_db_cursor) fill_helmert_transformation(proj_db_cursor) fill_grid_transformation(proj_db_cursor) fill_other_transformation(proj_db_cursor) fill_concatenated_operation(proj_db_cursor) fill_alias(proj_db_cursor) fill_supersession(proj_db_cursor) fill_deprecation(proj_db_cursor) fill_usage(proj_db_cursor) non_imported_operations = report_non_imported_operations(proj_db_cursor) proj_db_cursor.execute("""DROP TABLE builtin_authorities;""") proj_db_cursor.close() proj_db_conn.commit() files = {} # Dump the generated database and split it one .sql file per table # except for usage, that we append just after the record that the usage is for tables_with_usage = ('geodetic_datum', 'vertical_datum', 'engineering_datum', 'geodetic_crs', 'vertical_crs', 'projected_crs', 'compound_crs', 'engineering_crs', 'helmert_transformation', 'grid_transformation', 'other_transformation', 'conversion', 'concatenated_operation') usages_map = {} # INSERT INTO "usage" VALUES('EPSG','13089','geodetic_datum','EPSG','1037','EPSG','3340','EPSG','1028'); for line in proj_db_conn.iterdump(): if line.startswith('INSERT INTO "'): table_name = line[len('INSERT INTO "'):] table_name = table_name[0:table_name.find('"')] if table_name == 'usage': _, code, object_table_name, _, object_code, _, _, _, _ = line.split(',') object_table_name = object_table_name[1:-1] code = code[1:-1] if code[0] >= '0' and code[0] <= '9': code = int(code) object_code = object_code[1:-1] if object_code[0] >= '0' and object_code[0] <= '9': object_code = int(object_code) assert object_table_name in tables_with_usage, line key = (object_table_name, object_code) if key not in usages_map: usages_map[key] = [(code, line)] else: usages_map[key].append((code, line)) for line in proj_db_conn.iterdump(): if line.startswith('INSERT INTO "'): table_name = line[len('INSERT INTO "'):] table_name = table_name[0:table_name.find('"')] if table_name == 'usage': continue if table_name in files: f = files[table_name] else: f = open(os.path.join(sql_dir_name, table_name) + '.sql', 'wb') f.write("--- This file has been generated by scripts/build_db.py. DO NOT EDIT !\n\n".encode('UTF-8')) files[table_name] = f f.write((line + '\n').encode('UTF-8')) if table_name in tables_with_usage: pos = line.find("'PROJ','") if pos > 0: pos += len("'EPSG','") pos_end = line.find("'", pos) code = line[pos:pos_end] else: pos = line.find("'EPSG','") assert pos > 0 pos += len("'EPSG','") pos_end = line.find("'", pos) code = int(line[pos:pos_end]) usages = sorted(usages_map[(table_name, code)]) for _, l in usages: f.write((l + '\n').encode('UTF-8')) elif line.startswith('CREATE TRIGGER conversion_method_check_insert_trigger'): table_name = 'conversion_triggers' if table_name in files: f = files[table_name] else: f = open(os.path.join(sql_dir_name, table_name) + '.sql', 'wb') f.write("--- This file has been generated by scripts/build_db.py. DO NOT EDIT !\n\n".encode('UTF-8')) files[table_name] = f f.write((line + '\n').replace('BEFORE INSERT ON conversion', 'INSTEAD OF INSERT ON conversion').encode('UTF-8')) #f = files['coordinate_operation'] #for row in non_imported_operations: # f.write(("--- Non imported: " + str(row) + '\n').encode('UTF-8')) del files # Content already in proj_db_table_defs.sql os.unlink(os.path.join(sql_dir_name, 'celestial_body') + '.sql') proj_db_conn = None epsg_db_conn = None if os.path.exists(epsg_tmp_db_filename): os.unlink(epsg_tmp_db_filename) proj-9.6.0/scripts/build_db_create_ignf_from_xml.py000775 001754 001755 00000175115 14764566077 022474 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Build SRS and coordinate transform database from IGNF registry # Author: Even Rouault # ############################################################################### # Copyright (c) 2018, 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. ############################################################################### from lxml import etree import os import requests import sys # url = "http://librairies.ign.fr/geoportail/resources/IGNF.xml" url = "https://raw.githubusercontent.com/rouault/proj-resources/master/IGNF.v3.1.0.xml" if len(sys.argv) not in (1, 2) or (len(sys.argv) == 2 and sys.argv[1].startswith('-')): print('Usage: build_db_create_ignf.py [path_to_IGNF.xml]') print('') print('If local filename is not used, then %s is downloaded.' % url) sys.exit(1) def escape_literal(x): return x.replace("'", "''") def strip_ns_prefix(tree): for element in tree.iter('*'): element.tag = etree.QName(element).localname for att in element.attrib: newkey = att[att.find('}')+1:] val = element.attrib[att] del element.attrib[att] element.attrib[newkey] = val return tree all_sql = [] all_sql_concat = [] # for concatenated_operation if len(sys.argv) == 1: r = requests.get(url) root = etree.fromstring(r.content) else: IGNF_file = sys.argv[1] tree = etree.parse(open(IGNF_file, 'rt')) root = tree.getroot() root = strip_ns_prefix(root) # Retrieve and insert metada version = root.find('versionNumber').find('CharacterString').text date = root.find('versionDate').find('Date').text all_sql.append("""INSERT INTO "metadata" VALUES('IGNF.SOURCE', '%s');""" % escape_literal(url)) all_sql.append("""INSERT INTO "metadata" VALUES('IGNF.VERSION', '%s');""" % version) all_sql.append("""INSERT INTO "metadata" VALUES('IGNF.DATE', '%s');""" % date) def get_epsg_code(txt): assert ':EPSG:' in txt return txt[txt.rfind(':')+1:] def ingest_ellipsoids(root, all_sql): mapEllpsId = {} for ellps in root.iter('ellipsoid'): E = ellps.find('Ellipsoid') id = E.attrib['id'] names = [name.text for name in E.iter('name')] #print(id, names) if len(names) == 2: mapEllpsId[id] = ('EPSG', get_epsg_code(names[1])) else: assert len(names) == 1 assert E.find('secondDefiningParameter').find('SecondDefiningParameter').find('isSphere').text == 'sphere' mapEllpsId[id] = ('IGNF', id) all_sql.append("""INSERT INTO "ellipsoid" VALUES('IGNF','%s','%s',NULL,'PROJ', 'EARTH', %s,'EPSG','9001',0,NULL,0);""" % (id, names[0], E.find('semiMajorAxis').text)) return mapEllpsId def ingest_prime_meridians(root, all_sql): mapPmId = {} for pm in root.iter('primeMeridian'): PM = pm.find('PrimeMeridian') id = PM.attrib['id'] names = [name.text for name in PM.iter('name')] #print(id, names) assert len(names) == 2 mapPmId[id] = ('EPSG', get_epsg_code(names[1])) return mapPmId def extract_id_from_href(txt): assert '#' in txt return txt[txt.rfind('#')+1:] def ingest_datums(root, all_sql, mapEllpsId, mapPmId): mapDatumId = {} invalidDatumId = set() mapVerticalDatumId = {} for datum in root.iter('datum'): node = datum.find('GeodeticDatum') if node is not None: id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] if len(names) == 2: if id == 'REG0020002': assert get_epsg_code(names[1]) == '6275' print('Error in registry. it points to EPSG:6275 instead of EPSG:6807 for NTF Paris') mapDatumId[id] = ('EPSG', '6807') else: mapDatumId[id] = ('EPSG', get_epsg_code(names[1])) else: assert len(names) == 1, names pmNode = node.find('usesPrimeMeridian') if pmNode is None or 'href' not in pmNode.attrib: print('Invalid GeodeticDatum: ' + id) invalidDatumId.add(id) continue pmCode = extract_id_from_href(pmNode.attrib['href']) assert pmCode in mapPmId ellpsCode = extract_id_from_href(node.find('usesEllipsoid').attrib['href']) assert ellpsCode in mapEllpsId sql = """INSERT INTO "geodetic_datum" VALUES('IGNF','%s','%s',NULL,'%s','%s','%s','%s',NULL,NULL,NULL,NULL,NULL,0);""" % (id, names[0], mapEllpsId[ellpsCode][0], mapEllpsId[ellpsCode][1], mapPmId[pmCode][0], mapPmId[pmCode][1]) all_sql.append(sql) mapDatumId[id] = ('IGNF', id) else: node = datum.find('VerticalDatum') if node is not None: id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] sql = """INSERT INTO "vertical_datum" VALUES('IGNF','%s','%s',NULL,NULL,NULL,NULL,NULL,NULL,0);"""% (id, names[0]) all_sql.append(sql) mapVerticalDatumId[id] = ('IGNF', id) else: assert False return mapDatumId, mapVerticalDatumId, invalidDatumId mapEllpsId = ingest_ellipsoids(root, all_sql) mapPmId = ingest_prime_meridians(root, all_sql) mapDatumId, mapVerticalDatumId, invalidDatumId = ingest_datums(root, all_sql, mapEllpsId, mapPmId) extentMap = {} def get_extent_auth_name_code(domainOfValidity): extent = domainOfValidity.find('EX_Extent') desc = extent.find('description').find('CharacterString').text if desc is None: return 'EPSG', '1262' if desc in extentMap: return extentMap[desc] geographicElement = extent.find('geographicElement') if geographicElement is None: print('No geographicElement for area of use ' + desc) return 'EPSG', '1262' code = str(len(extentMap) + 1) extentMap[desc] = ['IGNF', code ] EX_GeographicBoundingBox = geographicElement.find('EX_GeographicBoundingBox') south = EX_GeographicBoundingBox.find('southBoundLatitude').find('Decimal').text west = EX_GeographicBoundingBox.find('westBoundLongitude').find('Decimal').text north = EX_GeographicBoundingBox.find('northBoundLatitude').find('Decimal').text east = EX_GeographicBoundingBox.find('eastBoundLongitude').find('Decimal').text all_sql.append("""INSERT INTO "extent" VALUES('IGNF','%s','%s','%s',%s,%s,%s,%s,0);""" % (code, escape_literal(desc), escape_literal(desc), south, north, west, east)) return extentMap[desc] scopeMap = {} def get_scope_auth_name_code(scope): if scope in scopeMap: return scopeMap[scope] code = str(len(scopeMap)+1) scopeMap[scope] = ['IGNF', code] all_sql.append("""INSERT INTO scope VALUES('IGNF','%s','%s',0);""" % (code, scope)) return scopeMap[scope] mapCrsId = {} mapGeocentricId = {} # This is a trick to find a GeocentricCRS and its related GeographicCRS # We could use the name, but if we use the datum code + area of use, it is # more reliable # We need this since the registry only exposes GeocentricCRS <--> GeocentricCRS # transformations, and we need to port them to GeographicCRS as well mapDatumAndAreaToGeocentricId = {} mapGeocentricIdToDatumAndArea = {} aliasOfCRS = {} for node in root.iterfind('.//GeocentricCRS'): id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] name = names[0] cartesianCS = extract_id_from_href(node.find('usesCartesianCS').attrib['href']) assert cartesianCS == 'TYP_CRG10' datumCode = extract_id_from_href(node.find('usesGeodeticDatum').attrib['href']) if datumCode in invalidDatumId: print('Skipping GeocentricCRS %s since its datum is unknown' % id) continue assert datumCode in mapDatumId, (id, name, datumCode) extent_auth_and_code = get_extent_auth_name_code(node.find('domainOfValidity')) scope = node.find('scope').text scope_auth_and_code = get_scope_auth_name_code(scope) #sql = """INSERT INTO "crs" VALUES('IGNF','%s','geocentric');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "geodetic_crs" VALUES('IGNF','%s','%s',NULL,'geocentric','EPSG','6500','%s','%s',NULL,0);""" % (id, name, mapDatumId[datumCode][0], mapDatumId[datumCode][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','geodetic_crs','IGNF','%s','%s','%s','%s','%s');""" % (id, id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) mapCrsId[id] = ('IGNF', id) mapGeocentricId[id] = ('IGNF', id) if len(names) >= 2 and names[1].startswith('http://registre.ign.fr/ign/IGNF/crs/IGNF/'): alias = names[1][len('http://registre.ign.fr/ign/IGNF/crs/IGNF/'):] aliasOfCRS[id] = [('IGNF', alias)] if id == 'WGS84': aliasOfCRS[id].append(('EPSG', '4978')) #sql = """INSERT INTO "crs" VALUES('IGNF','%s','geocentric'); -- alias of %s""" % (alias, id) #all_sql.append(sql) sql = """INSERT INTO "geodetic_crs" VALUES('IGNF','%s','%s',NULL,'geocentric','EPSG','6500','%s','%s',NULL,0);""" % (alias, name, mapDatumId[datumCode][0], mapDatumId[datumCode][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','geodetic_crs','IGNF','%s','%s','%s','%s','%s');""" % (alias, alias, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) key = str((mapDatumId[datumCode], extent_auth_and_code)) assert key not in mapDatumAndAreaToGeocentricId, (id, name) mapDatumAndAreaToGeocentricId[key] = ('IGNF', id) mapGeocentricIdToDatumAndArea[id] = key mapGeographicId = {} mapDatumAndAreaToGeographicId = {} for node in root.iterfind('.//GeographicCRS'): id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] name = names[0] ellipsoidalCS = extract_id_from_href(node.find('usesEllipsoidalCS').attrib['href']) assert ellipsoidalCS in ('TYP_CRG24', 'TYP_CRG26', 'TYP_CRG22', 'TYP_CRG28', 'TYP_CRG29'), (id, name, ellipsoidalCS) datumCode = extract_id_from_href(node.find('usesGeodeticDatum').attrib['href']) if datumCode in invalidDatumId: print('Skipping GeographicCRS %s since its datum is unknown' % id) continue assert datumCode in mapDatumId, (id, name, datumCode) extent_auth_and_code = get_extent_auth_name_code(node.find('domainOfValidity')) scope = node.find('scope').text scope_auth_and_code = get_scope_auth_name_code(scope) csCode = None type = 'geographic 2D' if ellipsoidalCS in ('TYP_CRG24', 'TYP_CRG28'): # Long, Lat deg csCode = '6424' if ellipsoidalCS in ('TYP_CRG26', 'TYP_CRG29'): # Long, Lat deg, h m csCode = '6426' type = 'geographic 3D' if ellipsoidalCS == 'TYP_CRG22': # Long, Lat grad csCode = '6425' #sql = """INSERT INTO "crs" VALUES('IGNF','%s','%s');""" % (id, type) #all_sql.append(sql) sql = """INSERT INTO "geodetic_crs" VALUES('IGNF','%s','%s',NULL,'%s','EPSG','%s','%s','%s',NULL,0);""" % (id, name, type, csCode, mapDatumId[datumCode][0], mapDatumId[datumCode][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','geodetic_crs','IGNF','%s','%s','%s','%s','%s');""" % (id, id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) if id == 'WGS84G': aliasOfCRS[id] = [('EPSG','4326')] if len(names) >= 2 and names[1].startswith('http://registre.ign.fr/ign/IGNF/crs/IGNF/'): alias = names[1][len('http://registre.ign.fr/ign/IGNF/crs/IGNF/'):] assert id != 'WGS84G' aliasOfCRS[id] = [('IGNF', alias)] #sql = """INSERT INTO "crs" VALUES('IGNF','%s','%s'); -- alias of %s""" % (alias, type, id) #all_sql.append(sql) sql = """INSERT INTO "geodetic_crs" VALUES('IGNF','%s','%s',NULL,'%s','EPSG','%s','%s','%s',NULL,0);""" % (alias, name, type, csCode, mapDatumId[datumCode][0], mapDatumId[datumCode][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','geodetic_crs','IGNF','%s','%s','%s','%s','%s');""" % (alias, alias, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) mapCrsId[id] = ('IGNF', id) mapGeographicId[id] = ('IGNF', id, type) key = str((mapDatumId[datumCode], extent_auth_and_code)) if key in mapDatumAndAreaToGeographicId: #print('Adding ' + id + ' to ' + str(mapDatumAndAreaToGeographicId[key])) mapDatumAndAreaToGeographicId[key].append(id) else: mapDatumAndAreaToGeographicId[key] = [id] # Create a 2D version to be able to create compoundCRS with it if id == 'RGWF96GEO': id = 'RGWF96G' csCode = '6424' type = 'geographic 2D' #sql = """INSERT INTO "crs" VALUES('IGNF','%s','%s');""" % (id, type) #all_sql.append(sql) sql = """INSERT INTO "geodetic_crs" VALUES('IGNF','%s','%s',NULL,'%s','EPSG','%s','%s','%s',NULL,0);""" % (id, name, type, csCode, mapDatumId[datumCode][0], mapDatumId[datumCode][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','geodetic_crs','IGNF','%s','%s','%s','%s','%s');""" % (id, id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) mapCrsId[id] = ('IGNF', id) mapGeographicId[id] = ('IGNF', id, type) key = str((mapDatumId[datumCode], extent_auth_and_code)) if key in mapDatumAndAreaToGeographicId: #print('Adding ' + id + ' to ' + str(mapDatumAndAreaToGeographicId[key])) mapDatumAndAreaToGeographicId[key].append(id) else: mapDatumAndAreaToGeographicId[key] = [id] mapVerticalCrsId = {} for node in root.iterfind('.//VerticalCRS'): id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] name = names[0] verticalCS = extract_id_from_href(node.find('usesVerticalCS').attrib['href']) assert verticalCS in ('TYP_CRG92','TYP_CRG91'), verticalCS datumCode = extract_id_from_href(node.find('usesVerticalDatum').attrib['href']) assert datumCode in mapVerticalDatumId, (id, name, datumCode) # VerticalCRS and GeocentricCRS can have same IDs ! like 'STPM50' id_modified = id if id in mapCrsId: print('VerticalCRS %s conflicts with a Geodetic one of same name. Appending _V for disambiguation'% id) id_modified += '_V' #sql = """INSERT INTO "crs" VALUES('IGNF','%s','vertical');""" % (id_modified) #all_sql.append(sql) extent_auth_and_code = get_extent_auth_name_code(node.find('domainOfValidity')) scope = node.find('scope').text scope_auth_and_code = get_scope_auth_name_code(scope) sql = """INSERT INTO "vertical_crs" VALUES('IGNF','%s','%s',NULL,'EPSG','6499','%s','%s',0);""" % (id_modified, name, mapVerticalDatumId[datumCode][0], mapVerticalDatumId[datumCode][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','vertical_crs','IGNF','%s','%s','%s','%s','%s');""" % (id_modified, id_modified, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) if len(names) >= 2 and names[1].startswith('http://registre.ign.fr/ign/IGNF/crs/IGNF/'): assert False mapCrsId[id] = ('IGNF', id_modified) mapVerticalCrsId[id] = ('IGNF', id_modified) mapGridURLs = { # France metropole 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/RAF09.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAF09.mnt', # France metropole 'https://geodesie.ign.fr/contenu/fichiers/documentation/grilles/metropole/RAF18.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAF18.mnt', # Corse 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/RAC09.mnt': 'https://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/RAC09.mnt', # Guadeloupe RGAF09 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_gtbt.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAGTBT2016.mnt', 'RAGTBT2016.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAGTBT2016.mnt', # Les Saintes RGAF09 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_ls.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALS2016.mnt', 'RALS2016.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALS2016.mnt', # Martinique RGAF09 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_mart.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMART2016.mnt', 'RAMART2016.MNT': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMART2016.mnt', # Marie Galante RGAF09 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_mg.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMG2016.mnt', 'RAMG2016.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMG2016.mnt', # Saint Barthelemy RGAF09 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sb.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sbv2.mnt', 'gg10_sbv2.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sbv2.mnt', # Saint Martin RGAF09 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sm.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_smv2.mnt', 'gg10_smv2.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_smv2.mnt', # La Desirade RGAF09 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_ld.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALD2016.mnt', 'RALD2016.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALD2016.mnt', # Guadeloupe WGS84 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00.txt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00v2.txt', # Les Saintes WGS84 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00_ls.txt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_lsv2.txt', 'ggg00_lsv2.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_lsv2.txt', # Martinique WGS84 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggm00.txt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggm00v2.txt', # Saint Barthelemy WGS84 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00_sb.txt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_sbv2.txt', # Saint Martin WGS84 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00_sm.txt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/anciennes/ggg00_smv2.txt', # La Desirade WGS84 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00_ld.txt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALDW842016.mnt', 'RALDW842016.mnt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALDW842016.mnt', # Guyane RGF95 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggguy00.txt': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggguy15.mnt', # Reunion grille RAR 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/RAR07_bl.gra': 'http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAR07_bl.gra', } setVerticalGrids = set() for node in root.iterfind('.//Transformation'): id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] name = names[0] sourceCRS = extract_id_from_href(node.find('sourceCRS').attrib['href']) if not sourceCRS in mapCrsId: print('Skipping ' + name + ', missing sourceCRS') continue targetCRS = node.find('targetCRS') if targetCRS is None or 'href' not in targetCRS.attrib: print('Skipping ' + name + ', missing targetCRS') continue targetCRS = extract_id_from_href(targetCRS.attrib['href']) if not targetCRS in mapCrsId: print('Skipping ' + name + ', missing targetCRS') continue operation_version = node.find('operationVersion').text extent_auth_and_code = get_extent_auth_name_code(node.find('domainOfValidity')) scope_auth_and_code = get_scope_auth_name_code(node.find('scope').text) usesMethod = extract_id_from_href(node.find('usesMethod').attrib['href']) if usesMethod in ('Geographic3DtoGravityRelatedHeight_IGN'): #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','grid_transformation');""" % id #all_sql.append(sql) usesValue = node.find('usesValue') paramValue = usesValue.find('ParameterValue') filename = paramValue.find('valueFile').text if filename in mapGridURLs: print('Fixing URL of ' + filename + ' to ' + mapGridURLs[filename]) filename = mapGridURLs[filename] if not filename.endswith('ggspm06v1.mnt'): # no longer available r = requests.head(filename, allow_redirects = True ) if r.status_code not in (200, 302): assert False, (r.status_code, id, name, filename) setVerticalGrids.add(filename) assert sourceCRS in mapVerticalCrsId, (id, name, sourceCRS) assert targetCRS in mapGeographicId, (id, name, targetCRS) # Switching source and target to be consistent with the EPSG practice and the naming of the method name_components = name.split(' vers ') name_inverted = name_components[1] + ' vers ' + name_components[0] sql = """INSERT INTO "grid_transformation" VALUES('IGNF','%s','%s',NULL,'EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','%s','%s','%s','%s',NULL,'EPSG','8666','Geoid (height correction) model file','%s',NULL,NULL,NULL,NULL,NULL,NULL,'%s',0);""" % (id, name_inverted, mapCrsId[targetCRS][0], mapCrsId[targetCRS][1], mapCrsId[sourceCRS][0], mapCrsId[sourceCRS][1], filename, operation_version) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','grid_transformation','IGNF','%s','%s','%s','%s','%s');""" % (id, id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) continue def get_alias_of(code): if code in aliasOfCRS: return [ ('IGNF', code) ] + aliasOfCRS[code] return [ ('IGNF', code) ] if id == 'TSG1240': # 'NTF geographiques Paris (gr) vers NTF GEOGRAPHIQUES GREENWICH (DMS)', 'from1Dto1D') #print('Skipping ' + str((id, name))) assert usesMethod == 'from1Dto1D', usesMethod for src in get_alias_of(sourceCRS): for target in get_alias_of(targetCRS): custom_id = id if not ((src == ('IGNF', sourceCRS) and target == ('IGNF', targetCRS))): custom_id = id + '_' + src[0] + '_' + src[1] + '_TO_' + target[0] + '_' + target[1] #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','other_transformation');""" % custom_id #all_sql.append(sql) sql = """INSERT INTO "other_transformation" VALUES('IGNF','%s','%s',NULL,'EPSG','9601','Longitude rotation','%s','%s','%s','%s',0.0,'EPSG','8602','Longitude offset',2.5969213,'EPSG','9105',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'%s',0);"""% (custom_id, name, src[0], src[1], target[0], target[1], operation_version) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','other_transformation','IGNF','%s','%s','%s','%s','%s');""" % (custom_id, custom_id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) continue if usesMethod == 'TSGM510': # geocentric interpolation id = 'NTFG_TO_RGF93G' assert sourceCRS == 'NTF' assert targetCRS == 'RGF93' sourceCRS = 'NTFG' targetCRS = 'RGF93G' for src in get_alias_of(sourceCRS): # As the transformation from RGF93G to WGS84 is a zero-translation helmert, # we can also use the grid for NTF->WGS84. This makes the coordinate # operation finder happier for target in get_alias_of(targetCRS) + [('EPSG','4326')]: custom_id = id if not ((src == ('IGNF', sourceCRS) and target == ('IGNF', targetCRS))): custom_id = src[0] + '_' + src[1] + '_TO_' + target[0] + '_' + target[1] #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','grid_transformation');""" % (custom_id) #all_sql.append(sql) sql = """INSERT INTO "grid_transformation" VALUES('IGNF','%s','%s',NULL,'EPSG','9615','NTv2','%s','%s','%s','%s',NULL,'EPSG','8656','Latitude and longitude difference file','ntf_r93.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'%s',0);""" % (custom_id, name, src[0], src[1], target[0], target[1], operation_version) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','grid_transformation','IGNF','%s','%s','%s','%s','%s');""" % (custom_id, custom_id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) continue if usesMethod == 'Vfrom1Dto1D': #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','other_transformation');""" % id #all_sql.append(sql) usesValue = node.find('usesValue') paramValue = usesValue.find('ParameterValue') value = paramValue.find('value').text uom = paramValue.find('value').attrib['uom'] assert uom == 'm' sql = """INSERT INTO "other_transformation" VALUES('IGNF','%s','%s',NULL,'EPSG','9616','Vertical Offset','%s','%s','%s','%s',NULL,'EPSG','8603','Vertical Offset',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'%s',0);"""% (id, name, mapCrsId[sourceCRS][0], mapCrsId[sourceCRS][1], mapCrsId[targetCRS][0], mapCrsId[targetCRS][1], value, operation_version) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','other_transformation','IGNF','%s','%s','%s','%s','%s');""" % (id, id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) continue assert usesMethod in ('TSGM120', 'TSGM110', 'TSGM112', 'TSGM111'), (id, name, usesMethod) assert sourceCRS in mapGeocentricId assert targetCRS in mapGeocentricId vals =[val for val in node.iterfind('usesValue')] assert len(vals) in (3,7) x = vals[0].find('ParameterValue').find('value').text assert vals[0].find('ParameterValue').find('value').attrib['uom'] == 'm' y = vals[1].find('ParameterValue').find('value').text assert vals[1].find('ParameterValue').find('value').attrib['uom'] == 'm' z = vals[2].find('ParameterValue').find('value').text assert vals[2].find('ParameterValue').find('value').attrib['uom'] == 'm' if len(vals) == 3: rx = 'NULL' ry = 'NULL' rz = 'NULL' s = 'NULL' r_uom_auth_name = 'NULL' r_uom_code = 'NULL' s_uom_auth_name = 'NULL' s_uom_code = 'NULL' method_code = "'1031'" method_name = "'Geocentric translations (geocentric domain)'" method_geog_code = "'9603'" method_geog_name = "'Geocentric translations (geog2D domain)'" method_geog_3d_code = "'1035'" method_geog_3d_name = "'Geocentric translations (geog3D domain)'" else: s = vals[3].find('ParameterValue').find('value').text assert vals[3].find('ParameterValue').find('value').attrib['uom'] == 'UNITE' rx = vals[4].find('ParameterValue').find('value').text assert vals[4].find('ParameterValue').find('value').attrib['uom'] == 'sec' ry = vals[5].find('ParameterValue').find('value').text assert vals[5].find('ParameterValue').find('value').attrib['uom'] == 'sec' rz = vals[6].find('ParameterValue').find('value').text assert vals[6].find('ParameterValue').find('value').attrib['uom'] == 'sec' r_uom_auth_name = "'EPSG'" r_uom_code = "'9104'" s_uom_auth_name = "'EPSG'" s_uom_code = "'9202'" method_code = "'1033'" method_name = "'Position Vector transformation (geocentric domain)'" method_geog_code = "'9606'" method_geog_name = "'Position Vector transformation (geog2D domain)'" method_geog_3d_code = "'1037'" method_geog_3d_name = "'Geocentric translations (geog3D domain)'" for src in get_alias_of(sourceCRS): for target in get_alias_of(targetCRS): custom_id = id if not ((src == ('IGNF', sourceCRS) and target == ('IGNF', targetCRS))): custom_id += '_' + src[1] + '_' + target[1] #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','helmert_transformation');""" % (custom_id) #all_sql.append(sql) sql = """INSERT INTO "helmert_transformation" VALUES('IGNF','%s','%s',NULL,'EPSG',%s,%s,'%s','%s','%s','%s',NULL,%s,%s,%s,'EPSG','9001',%s,%s,%s,%s,%s, %s,%s,%s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'%s',0);""" % (custom_id, name, method_code, method_name, src[0], src[1], target[0], target[1], x, y, z, rx, ry, rz, r_uom_auth_name, r_uom_code, s, s_uom_auth_name, s_uom_code, operation_version) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','helmert_transformation','IGNF','%s','%s','%s','%s','%s');""" % (custom_id, custom_id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) key = mapGeocentricIdToDatumAndArea[sourceCRS] assert key in mapDatumAndAreaToGeographicId sourceGeogIdAr = mapDatumAndAreaToGeographicId[key] key = mapGeocentricIdToDatumAndArea[targetCRS] assert key in mapDatumAndAreaToGeographicId targetGeogIdAr = mapDatumAndAreaToGeographicId[key] for sourceGeogId in sourceGeogIdAr: for targetGeogId in targetGeogIdAr: # Check type type = mapGeographicId[sourceGeogId][2] if type != mapGeographicId[targetGeogId][2]: continue for src in get_alias_of(sourceGeogId): for target in get_alias_of(targetGeogId): id_geog = id + '_' + src[1] + '_TO_' + target[1] #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','helmert_transformation');""" % (id_geog) #all_sql.append(sql) sql = """INSERT INTO "helmert_transformation" VALUES('IGNF','%s','%s',NULL,'EPSG',%s,%s,'%s','%s','%s','%s',NULL,%s,%s,%s,'EPSG','9001',%s,%s,%s,%s,%s,%s,%s, %s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'%s',0);""" % (id_geog, name, method_geog_code if type == 'geographic 2D' else method_geog_3d_code, method_geog_name if type == 'geographic 2D' else method_geog_3d_name, src[0], src[1], target[0], target[1], x, y, z, rx, ry, rz, r_uom_auth_name, r_uom_code, s, s_uom_auth_name, s_uom_code, operation_version) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','helmert_transformation','IGNF','%s','%s','%s','%s','%s');""" % (id_geog, id_geog, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) if src[1] == 'NTFG': for NTFPalias, idFirstOp in (('NTFPGRAD', 'TSG1240'), ('NTFP', 'TSG1240_IGNF_NTFP_TO_IGNF_NTFG')): id_concat = id + '_' + NTFPalias + '_TO_' + target[1] #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','concatenated_operation');""" % (id_concat) #all_sql_concat.append(sql) sql = """INSERT INTO "concatenated_operation" VALUES('IGNF','%s','Nouvelle Triangulation Francaise Paris grades to %s',NULL,'IGNF','%s','%s','%s',NULL,'%s',0);""" % (id_concat, target[1], NTFPalias, target[0], target[1], operation_version) all_sql_concat.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','concatenated_operation','IGNF','%s','%s','%s','%s','%s');""" % (id_concat, id_concat, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql_concat.append(sql) sql = """INSERT INTO "concatenated_operation_step" VALUES('IGNF','%s',1,'IGNF','%s',NULL);""" % (id_concat, idFirstOp) all_sql_concat.append(sql) sql = """INSERT INTO "concatenated_operation_step" VALUES('IGNF','%s',2,'IGNF','%s',NULL);""" % (id_concat, id_geog) all_sql_concat.append(sql) mapConversionId = {} def getParameter(node, code, expected_uom): for val in node.iterfind('usesValue'): parameter_code = extract_id_from_href(val.find('ParameterValue').find('valueOfParameter').attrib['href']) if parameter_code == code: dms = val.find('ParameterValue').find('dmsAngleValue') if expected_uom == 'deg' and dms is not None: deg_val = float(dms.find('degrees').text) direction_deg = dms.find('degrees').attrib['direction'] assert direction_deg in ('E', 'W', 'S', 'N') min_val = float(dms.find('minutes').text) if dms.find('secondes') is not None: sec_val = float(dms.find('secondes').text) else: sec_val = 0 ret_val = deg_val + min_val / 60.0 + sec_val / 3600.0 if direction_deg in ('W', 'S'): ret_val = -ret_val return ret_val assert val.find('ParameterValue').find('value').attrib['uom'] == expected_uom return float(val.find('ParameterValue').find('value').text) raise Exception('cannot find value for parameter ' + code) for node in root.iterfind('.//Conversion'): id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] name = names[0] #print(id, name) reuse_epsg_conversion = False ### if reuse_epsg_conversion and len(names) == 2: if id == 'PRC9601581': # PSEUDO MERCATOR (POPULAR VISUALISATION) assert get_epsg_code(names[1]) == '3857' # this is wrong, this is the projectedCRS code, note the conversion one mapConversionId[id] = ('EPSG', '3856') else: mapConversionId[id] = ('EPSG', get_epsg_code(names[1])) continue usesMethod = extract_id_from_href(node.find('usesMethod').attrib['href']) d = {} if usesMethod == 'PVPM001From2Dto2D': # Popular Visualisation Pseudo-Mercator assert len([1 for val in node.iterfind('usesValue')]) == 4 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') assert d['x_0'] == 0 assert d['y_0'] == 0 assert d['lon_0'] == 0 assert d['lat_0'] == 0 #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','1024','Popular Visualisation Pseudo Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'EQRC001from2Dto2D': # Equirectangular assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') d['lat_ts'] = getParameter(node, 'PRCP600', 'deg') assert d['lat_0'] == 0, (id, name, d) #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','1028','Equidistant Cylindrical','EPSG','8823','Latitude of 1st standard parallel',%s,'EPSG','9102','EPSG','8802','Longitude of natural origin',%s,'EPSG','9102','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_ts'], d['lon_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod in ('PRCM030from2Dto2D', 'PRCM020from2Dto2D', 'PRCM040from2Dto2D', 'PRCM030from3Dto2D'): # Transverse Mercator assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') d['k_0'] = getParameter(node, 'PRCP500', 'UNITE') #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',%s,'EPSG','9102','EPSG','8802','Longitude of natural origin',%s,'EPSG','9102','EPSG','8805','Scale factor at natural origin',%s,'EPSG','9201','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['k_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'PRCM060from2Dto2D': # Bonne assert len([1 for val in node.iterfind('usesValue')]) == 6 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'gr') d['lat_0'] = getParameter(node, 'PRCP400', 'gr') d['k_0'] = getParameter(node, 'PRCP500', 'UNITE') d['lat_1'] = getParameter(node, 'PRCP600', 'gr') assert d['lat_0'] == d['lat_1'] #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9827','Bonne','EPSG','8801','Latitude of natural origin',%s,'EPSG','9105','EPSG','8802','Longitude of natural origin',%s,'EPSG','9105','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'PRCM015from2Dto2D': # LAEA assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') d['k_0'] = getParameter(node, 'PRCP500', 'UNITE') assert d['k_0'] == 1 #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9820','Lambert Azimuthal Equal Area','EPSG','8801','Latitude of natural origin',%s,'EPSG','9102','EPSG','8802','Longitude of natural origin',%s,'EPSG','9102','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'PRCM013from2Dto2D': # LCC_2SP assert len([1 for val in node.iterfind('usesValue')]) == 6 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') d['lat_1'] = getParameter(node, 'PRCP600', 'deg') d['lat_2'] = getParameter(node, 'PRCP700', 'deg') #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9802','Lambert Conic Conformal (2SP)','EPSG','8821','Latitude of false origin',%s,'EPSG','9102','EPSG','8822','Longitude of false origin',%s,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',%s,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',%s,'EPSG','9102','EPSG','8826','Easting at false origin',%s,'EPSG','9001','EPSG','8827','Northing at false origin',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['lat_1'], d['lat_2'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'PRCM070from2Dto2D': # Mercator (variant A) assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') d['k_0'] = getParameter(node, 'PRCP500', 'UNITE') #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9804','Mercator (variant A)','EPSG','8801','Latitude of natural origin',%s,'EPSG','9102','EPSG','8802','Longitude of natural origin',%s,'EPSG','9102','EPSG','8805','Scale factor at natural origin',%s,'EPSG','9201','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['k_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod in ('PRCM012from2Dto2D', 'PRCM012from3Dto2D'): # LCC_1SP assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'gr') d['lat_0'] = getParameter(node, 'PRCP400', 'gr') d['k_0'] = getParameter(node, 'PRCP500', 'UNITE') #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',%s,'EPSG','9105','EPSG','8802','Longitude of natural origin',%s,'EPSG','9105','EPSG','8805','Scale factor at natural origin',%s,'EPSG','9201','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['k_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod in ('PRCM014from2Dto2D'): # LCC_1SP assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP110', 'm') d['y_0'] = getParameter(node, 'PRCP210', 'm') d['lon_0'] = getParameter(node, 'PRCP310', 'gr') d['lat_0'] = getParameter(node, 'PRCP410', 'gr') d['k_0'] = getParameter(node, 'PRCP510', 'UNITE') #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9801','Lambert Conic Conformal (1SP)','EPSG','8801','Latitude of natural origin',%s,'EPSG','9105','EPSG','8802','Longitude of natural origin',%s,'EPSG','9105','EPSG','8805','Scale factor at natural origin',%s,'EPSG','9201','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['k_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'PRCM053from2Dto2D': # Gauss Schreiber Transverse Mercator assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') d['k_0'] = getParameter(node, 'PRCP500', 'UNITE') #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'PROJ','gstm','Gauss Schreiber Transverse Mercator','EPSG','8801','Latitude of natural origin',%s,'EPSG','9102','EPSG','8802','Longitude of natural origin',%s,'EPSG','9102','EPSG','8805','Scale factor at natural origin',%s,'EPSG','9201','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['k_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'PRCM094from2Dto2D': # Polar Stereographic assert len([1 for val in node.iterfind('usesValue')]) == 5 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') d['k_0'] = getParameter(node, 'PRCP500', 'UNITE') assert float(d['lat_0']) == -90 assert float(d['lon_0']) == 140 #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',%s,'EPSG','9102','EPSG','8802','Longitude of natural origin',%s,'EPSG','9102','EPSG','8805','Scale factor at natural origin',%s,'EPSG','9201','EPSG','8806','False easting',%s,'EPSG','9001','EPSG','8807','False northing',%s,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id, name, d['lat_0'], d['lon_0'], d['k_0'], d['x_0'], d['y_0']) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'MILL001from2Dto2D': # Miller assert len([1 for val in node.iterfind('usesValue')]) == 4 d['x_0'] = getParameter(node, 'PRCP100', 'm') d['y_0'] = getParameter(node, 'PRCP200', 'm') d['lon_0'] = getParameter(node, 'PRCP300', 'deg') d['lat_0'] = getParameter(node, 'PRCP400', 'deg') assert d['x_0'] == 0 assert d['y_0'] == 0 assert d['lon_0'] == 0 assert d['lat_0'] == 0 #sql = """INSERT INTO "coordinate_operation" VALUES('IGNF','%s','conversion');""" % (id) #all_sql.append(sql) sql = """INSERT INTO "conversion" VALUES('IGNF','%s','%s',NULL,'PROJ','mill','PROJ mill',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""" % (id,name) all_sql.append(sql) mapConversionId[id] = ('IGNF', id) elif usesMethod == 'PRCM095from2Dto2D': print('Unhandled conversion PRCM095from2Dto2D = Polar Sterographic (Variant C) %s' % (str((id, name, usesMethod)))) continue else: print('Unknown conversion %s' % (str((id, name, usesMethod)))) assert False mapProjectedId = {} for node in root.iterfind('.//ProjectedCRS'): id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] name = names[0] usesCartesianCS = extract_id_from_href(node.find('usesCartesianCS').attrib['href']) assert usesCartesianCS in ('TYP_CRG32', 'TYP_CRG70', 'TYP_CRG34'), (id, name, usesCartesianCS) baseGeographicCRS = extract_id_from_href(node.find('baseGeographicCRS').attrib['href']) if baseGeographicCRS not in mapGeographicId: print('Skipping ProjectedCRS %s since its baseGeographicCRS %s is unknown' % (id, baseGeographicCRS)) continue definedByConversion = extract_id_from_href(node.find('definedByConversion').attrib['href']) if definedByConversion in ('PRC0909577'): print('Skipping ProjectedCRS %s since its definedByConversion %s is unhandled' % (id, definedByConversion)) continue assert definedByConversion in mapConversionId, (id, name, definedByConversion) extent_auth_and_code = get_extent_auth_name_code(node.find('domainOfValidity')) scope = node.find('scope').text scope_auth_and_code = get_scope_auth_name_code(scope) #sql = """INSERT INTO "crs" VALUES('IGNF','%s','projected');""" % (id, ) #all_sql.append(sql) cs_code = 4499 # TYP_CRG32 if usesCartesianCS == 'TYP_CRG70': cs_code = 4400 if usesCartesianCS == 'TYP_CRG34': cs_code = 4530 sql = """INSERT INTO "projected_crs" VALUES('IGNF','%s','%s',NULL,'EPSG','%s','%s','%s','%s','%s',NULL,0);""" % (id,name,cs_code,mapGeographicId[baseGeographicCRS][0], mapGeographicId[baseGeographicCRS][1],mapConversionId[definedByConversion][0], mapConversionId[definedByConversion][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','projected_crs','IGNF','%s','%s','%s','%s','%s');""" % (id, id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) if len(names) >= 2 and names[1].startswith('http://registre.ign.fr/ign/IGNF/crs/IGNF/'): alias = names[1][len('http://registre.ign.fr/ign/IGNF/crs/IGNF/'):] aliasOfCRS[id] = [('IGNF', alias)] #sql = """INSERT INTO "crs" VALUES('IGNF','%s','projected'); -- alias of %s""" % (alias, id) #all_sql.append(sql) sql = """INSERT INTO "projected_crs" VALUES('IGNF','%s','%s',NULL,'EPSG','%s','%s','%s','%s','%s',NULL,0);""" % (alias,name,cs_code,mapGeographicId[baseGeographicCRS][0], mapGeographicId[baseGeographicCRS][1],mapConversionId[definedByConversion][0], mapConversionId[definedByConversion][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','projected_crs','IGNF','%s','%s','%s','%s','%s');""" % (alias, alias, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) mapProjectedId[id] = ('IGNF', id) for node in root.iterfind('.//CompoundCRS'): id = node.attrib['id'] names = [_name.text for _name in node.iter('name')] name = names[0] singleCRS = [extract_id_from_href(includesSingleCRS.attrib['href']) for includesSingleCRS in node.iter('includesSingleCRS')] assert len(singleCRS) == 2 if singleCRS[0] == 'RGWF96GEO': singleCRS[0] = 'RGWF96G' assert singleCRS[0] in mapProjectedId or singleCRS[0] in mapGeographicId, (id, name) assert singleCRS[1] in mapVerticalCrsId, (id, name, singleCRS[1]) if singleCRS[0] in mapProjectedId: horiz = mapProjectedId[singleCRS[0]] else: horiz = mapGeographicId[singleCRS[0]] extent_auth_and_code = get_extent_auth_name_code(node.find('domainOfValidity')) scope = node.find('scope').text scope_auth_and_code = get_scope_auth_name_code(scope) #sql = """INSERT INTO "crs" VALUES('IGNF','%s','compound');""" % (id, ) #all_sql.append(sql) sql = """INSERT INTO "compound_crs" VALUES('IGNF','%s','%s',NULL,'%s','%s','%s','%s',0);""" % (id,name,horiz[0], horiz[1],mapVerticalCrsId[singleCRS[1]][0], mapVerticalCrsId[singleCRS[1]][1]) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','compound_crs','IGNF','%s','%s','%s','%s','%s');""" % (id, id, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql.append(sql) if len(names) >= 2 and names[1].startswith('http://registre.ign.fr/ign/IGNF/crs/IGNF/'): assert False all_sql.append('') all_sql.append("""--- Grid alternatives""") all_sql.append('') all_sql.append("""INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('ntf_r93.gsb', -- as referenced by the IGNF registry 'fr_ign_ntf_r93.tif', 'ntf_r93.gsb', 'GTiff', 'hgridshift', 0, NULL, 'https://cdn.proj.org/fr_ign_ntf_r93.tif', 1, 1, NULL); """) for grid in sorted(setVerticalGrids): original_grid_name = grid old_proj_grid_name = grid[grid.rfind('/')+1:].replace('.txt', '.gtx').replace('.mnt', '.gtx').replace('.gra', '.gtx') gtiff_grid_name = 'fr_ign_' + old_proj_grid_name[0:-4] + '.tif' proj_cdn_url = 'https://cdn.proj.org/' + gtiff_grid_name r = requests.head(proj_cdn_url, allow_redirects = True) assert r.status_code in (200, 302), proj_cdn_url all_sql.append("""INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('%s', -- as referenced by the IGNF registry '%s', '%s', 'GTiff', 'geoid_like', 0, NULL, '%s', 1, 1, NULL);""" % (original_grid_name, gtiff_grid_name, old_proj_grid_name, proj_cdn_url)) all_sql.append('') all_sql.append("""--- Null transformations between RRAF and WGS84 adapted from EPSG""") all_sql.append('') area_of_use_name = 'ANTILLES FRANCAISES' assert area_of_use_name in extentMap extent_auth_and_code = extentMap[area_of_use_name] all_sql.append("""INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RRAF_TO_EPSG_4978','RRAF to WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RRAF','EPSG','4978',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""") sql = """INSERT INTO "usage" VALUES('PROJ', '%s_USAGE','helmert_transformation','PROJ','%s','%s','%s','%s','%s');""" % ('IGNF_RRAF_TO_EPSG_4978', 'IGNF_RRAF_TO_EPSG_4978', extent_auth_and_code[0], extent_auth_and_code[1], 'EPSG', '1024') all_sql.append(sql) all_sql.append("""INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RRAFG_TO_EPSG_4326','RRAFG to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RRAFG','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""") sql = """INSERT INTO "usage" VALUES('PROJ', '%s_USAGE','helmert_transformation','PROJ','%s','%s','%s','%s','%s');""" % ('IGNF_RRAFG_TO_EPSG_4326', 'IGNF_RRAFG_TO_EPSG_4326', extent_auth_and_code[0], extent_auth_and_code[1], 'EPSG', '1024') all_sql.append(sql) all_sql.append("""INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RRAFGDD_TO_EPSG_4326','RRAFGDD to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RRAFGDD','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""") sql = """INSERT INTO "usage" VALUES('PROJ', '%s_USAGE','helmert_transformation','PROJ','%s','%s','%s','%s','%s');""" % ('IGNF_RRAFGDD_TO_EPSG_4326', 'IGNF_RRAFGDD_TO_EPSG_4326', extent_auth_and_code[0], extent_auth_and_code[1], 'EPSG', '1024') all_sql.append(sql) all_sql.append('') all_sql.append("""--- Null transformations between RGF93 and WGS84 adapted from EPSG""") all_sql.append('') area_of_use_name = 'FRANCE METROPOLITAINE (CORSE COMPRISE)' assert area_of_use_name in extentMap extent_auth_and_code = extentMap[area_of_use_name] all_sql.append("""INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RGF93_TO_EPSG_4978','RGF93 to WGS 84',NULL,'EPSG','1031','Geocentric translations (geocentric domain)','IGNF','RGF93','EPSG','4978',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""") sql = """INSERT INTO "usage" VALUES('PROJ', '%s_USAGE','helmert_transformation','PROJ','%s','%s','%s','%s','%s');""" % ('IGNF_RGF93_TO_EPSG_4978', 'IGNF_RGF93_TO_EPSG_4978', extent_auth_and_code[0], extent_auth_and_code[1], 'EPSG', '1024') all_sql.append(sql) all_sql.append("""INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RGF93G_TO_EPSG_4326','RGF93G to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93G','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""") sql = """INSERT INTO "usage" VALUES('PROJ', '%s_USAGE','helmert_transformation','PROJ','%s','%s','%s','%s','%s');""" % ('IGNF_RGF93G_TO_EPSG_4326', 'IGNF_RGF93G_TO_EPSG_4326', extent_auth_and_code[0], extent_auth_and_code[1], 'EPSG', '1024') all_sql.append(sql) all_sql.append("""INSERT INTO "helmert_transformation" VALUES('PROJ','IGNF_RGF93GDD_TO_EPSG_4326','RGF93GDD to WGS 84',NULL,'EPSG','9603','Geocentric translations (geog2D domain)','IGNF','RGF93GDD','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);""") sql = """INSERT INTO "usage" VALUES('PROJ', '%s_USAGE','helmert_transformation','PROJ','%s','%s','%s','%s','%s');""" % ('IGNF_RGF93GDD_TO_EPSG_4326', 'IGNF_RGF93GDD_TO_EPSG_4326', extent_auth_and_code[0], extent_auth_and_code[1], 'EPSG', '1024') all_sql.append(sql) script_dir_name = os.path.dirname(os.path.realpath(__file__)) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') f = open(os.path.join(sql_dir_name, 'ignf') + '.sql', 'wb') f.write("--- This file has been generated by scripts/build_db_create_ignf_from_xml.py from the http://librairies.ign.fr/geoportail/resources/IGNF.xml definition file. DO NOT EDIT !\n\n".encode('UTF-8')) for sql in all_sql: f.write((sql + '\n').encode('UTF-8')) comment = [] comment.append('') comment.append("""--- Concatenated operations""") comment.append('') for sql in comment: f.write((sql + '\n').encode('UTF-8')) for sql in all_sql_concat: f.write((sql + '\n').encode('UTF-8')) f.close() proj-9.6.0/scripts/build_db_from_esri.py000775 001754 001755 00000354616 14764566077 020315 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Build SRS and coordinate transform database from ESRI database # provided at https://github.com/Esri/projection-engine-db-doc # (from the csv/ directory content) # Author: Even Rouault # ############################################################################### # Copyright (c) 2018, 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. ############################################################################### import argparse import csv import os import re import sqlite3 from dataclasses import dataclass from enum import Enum from pathlib import Path from typing import Optional, List, Dict parser = argparse.ArgumentParser() parser.add_argument('esri_dir', help='Path to ESRI projection-engine-db-doc dir,' 'typically the path to a "git clone ' 'https://github.com/Esri/projection-engine-db-doc"', type=Path) parser.add_argument('proj_db', help='Path to current proj.db file', type=Path) parser.add_argument('version', help='ArcMap version string, e.g. "ArcMap 10.8.1"') parser.add_argument('date', help='ArcMap version date as a yyyy-MM-dd string, e.g. "2020-05-24"') args = parser.parse_args() path_to_csv = args.esri_dir / "csv" path_to_objedit = args.esri_dir / "objedit" proj_db = args.proj_db version = args.version date = args.date ######################## def import_syn(filename): lst = [] with open(filename, "rt", encoding="UTF-8") as f: lines = f.readlines() for idx in range(len(lines)): line = lines[idx][0:-1] if line.startswith('"') and line.endswith('", \\'): old_name = line[1:-4] idx += 1 line = lines[idx][0:-1] assert line.startswith(' "') assert line.endswith('", \\') new_name = line[4:-4] idx += 1 line = lines[idx][0:-1] assert line in (' TRUE, \\', ' FALSE, \\') if line == ' TRUE, \\': lst.append((new_name, old_name)) return lst conn = sqlite3.connect(proj_db) cursor = conn.cursor() all_sql = ["""INSERT INTO "metadata" VALUES('ESRI.VERSION', '{}');""".format(version), """INSERT INTO "metadata" VALUES('ESRI.DATE', '{}');""".format(date)] manual_grids = """------------------ -- ESRI grid names ------------------ INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('portugal/DLX_ETRS89_geo','pt_dgt_DLx_ETRS89_geo.tif','DLX_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_DLx_ETRS89_geo.tif',1,1,NULL), ('portugal/D73_ETRS89_geo','pt_dgt_D73_ETRS89_geo.tif','D73_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_D73_ETRS89_geo.tif',1,1,NULL), ('netherlands/rdtrans2008','','rdtrans2008.gsb','NTv2','hgridshift',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/rdtrans2008.gsb',1,0,NULL), ('uk/OSTN15_NTv2','uk_os_OSTN15_NTv2_OSGBtoETRS.tif','OSTN15_NTv2_OSGBtoETRS.gsb','GTiff','hgridshift',1 -- reverse direction ,NULL,'https://cdn.proj.org/uk_os_OSTN15_NTv2_OSGBtoETRS.tif',1,1,NULL), ('canada/GS7783','ca_nrc_GS7783.tif','GS7783.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_GS7783.tif',1,1,NULL), ('spain/100800401','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL), ('australia/QLD_0900','au_icsm_National_84_02_07_01.tif','National_84_02_07_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_National_84_02_07_01.tif',1,1,NULL), -- From https://www.dnrme.qld.gov.au/__data/assets/pdf_file/0006/105765/gday-21-user-guide.pdf: "Note that the Queensland grid QLD_0900.gsb produces identical results to the National AGD84 grid for the equivalent coverage." ('spain/PENR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL), ('spain/BALR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL), ('spain/peninsula','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL); -- 'france/RGNC1991_IGN72GrandeTerre' : we have a 3D geocentric corresponding one: no need for mapping -- 'france/RGNC1991_NEA74Noumea' : we have a 3D geocentric corresponding one: no need for mapping """ def escape_literal(x): return x.replace("'", "''") ######################## map_extentname_to_auth_code = {} esri_area_counter = 1 def find_extent(extentname, slat, nlat, llon, rlon): global esri_area_counter if extentname in map_extentname_to_auth_code: return map_extentname_to_auth_code[extentname] deg = b'\xC2\xB0'.decode('utf-8') cursor.execute("SELECT auth_name, code FROM extent WHERE name = ? AND auth_name != 'ESRI'", (extentname.replace('~', deg),)) row = cursor.fetchone() if row is None: cursor.execute( "SELECT auth_name, code FROM extent WHERE auth_name != 'ESRI' AND south_lat = ? AND north_lat = ? AND west_lon = ? AND east_lon = ?", (slat, nlat, llon, rlon)) row = cursor.fetchone() if row is None: # print('unknown extent inserted: ' + extentname) if float(rlon) > 180: new_rlon = '%s' % (float(rlon) - 360) print('Correcting rlon from %s to %s for %s' % (rlon, new_rlon, extentname)) rlon = new_rlon assert -90 <= float(slat) <= 90, (extentname, slat, nlat, llon, rlon) assert -90 <= float(nlat) <= 90, (extentname, slat, nlat, llon, rlon) assert float(nlat) > float(slat), (extentname, slat, nlat, llon, rlon) assert -180 <= float(llon) <= 180, (extentname, slat, nlat, llon, rlon) assert -180 <= float(rlon) <= 180, (extentname, slat, nlat, llon, rlon) sql = """INSERT INTO "extent" VALUES('ESRI','%d','%s','%s',%s,%s,%s,%s,0);""" % ( esri_area_counter, escape_literal(extentname), escape_literal(extentname), slat, nlat, llon, rlon) all_sql.append(sql) map_extentname_to_auth_code[extentname] = [ 'ESRI', '%d' % esri_area_counter] esri_area_counter += 1 else: auth_name = row[0] code = row[1] map_extentname_to_auth_code[extentname] = [auth_name, code] return map_extentname_to_auth_code[extentname] ################# def import_linunit(): with open(path_to_csv / 'pe_list_linunit.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] wkt = row[idx_wkt2] assert wkt.startswith('LENGTHUNIT[') and wkt.endswith(']') tokens = wkt[len('LENGTHUNIT['):len(wkt) - 1].split(',') assert len(tokens) == 2 esri_conv_factor = float(tokens[1]) if authority == 'EPSG': cursor.execute( "SELECT name, conv_factor FROM unit_of_measure WHERE code = ? AND auth_name = 'EPSG'", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] epsg_conv_factor = src_row[1] assert abs(esri_conv_factor - epsg_conv_factor) <= 1e-15 * epsg_conv_factor, (esri_name, esri_conv_factor, epsg_conv_factor) if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('unit_of_measure','EPSG','%s','%s','ESRI');""" % ( latestWkid, escape_literal(esri_name)) all_sql.append(sql) ################# map_spheroid_esri_name_to_auth_code = {} def import_spheroid(): with open(path_to_csv / 'pe_list_spheroid.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 body_set = set() while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row code = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if authority == 'EPSG': cursor.execute( "SELECT name FROM ellipsoid WHERE code = ? AND auth_name = 'EPSG'", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] map_spheroid_esri_name_to_auth_code[esri_name] = [ 'EPSG', latestWkid] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('ellipsoid','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(esri_name)) all_sql.append(sql) else: assert authority.upper() == 'ESRI', row wkt2 = row[idx_wkt2] wkt2_tokens_re = re.compile(r'ELLIPSOID\[""?(.*?)""?,(-?[\d]+(?:\.[\d]*)?),(-?[\d]+(?:\.[\d]*)?),LENGTHUNIT\[""?(.*?)""?,(-?[\d]+(?:\.[\d]*)?)]]') match = wkt2_tokens_re.match(wkt2) assert match, wkt2 a = match.group(2) rf = match.group(3) length_unit = match.group(4) unit_size = float(match.group(5)) assert length_unit == 'Meter', 'Unhandled spheroid unit: {}'.format(length_unit) assert unit_size == 1, 'Unhandled spheroid unit size: {}'.format(unit_size) description = row[idx_description] deprecated = 1 if row[idx_deprecated] == 'yes' else 0 if esri_name not in map_spheroid_esri_name_to_auth_code: map_spheroid_esri_name_to_auth_code[esri_name] = [ 'ESRI', code] if abs(float(a) - 6375000) > 0.01 * 6375000: pos = esri_name.find('_19') if pos < 0: pos = esri_name.find('_20') assert pos > 0 body_code = esri_name[0:pos] if body_code not in body_set: body_set.add(body_code) sql = """INSERT INTO celestial_body VALUES('ESRI', '%s', '%s', %s);""" % ( body_code, body_code, a) all_sql.append(sql) body_auth = 'ESRI' else: body_auth = 'PROJ' body_code = 'EARTH' sql = """INSERT INTO ellipsoid VALUES('ESRI','%s','%s','%s','%s','%s',%s,'EPSG','9001',%s,NULL,%d);""" % ( code, esri_name, description, body_auth, body_code, a, rf, deprecated) all_sql.append(sql) ######################## map_pm_esri_name_to_auth_code = {} def import_prime_meridian(): with open(path_to_csv / 'pe_list_primem.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row code = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if authority == 'EPSG': cursor.execute( "SELECT name FROM prime_meridian WHERE code = ? AND auth_name = 'EPSG'", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] map_pm_esri_name_to_auth_code[esri_name] = ['EPSG', latestWkid] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('prime_meridian','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(esri_name)) all_sql.append(sql) else: assert authority.upper() == 'ESRI', row wkt2 = row[idx_wkt2] wkt2_tokens_re = re.compile(r'PRIMEM\[""?(.*?)""?,(-?[\d]+(?:\.[\d]*)?),ANGLEUNIT\[""?(.*?)""?,(-?[\d]+(?:\.[\d]*)?)]]') match = wkt2_tokens_re.match(wkt2) assert match, wkt2 value = match.group(2) angle_unit = match.group(3) unit_size = float(match.group(4)) assert angle_unit == 'Degree', 'Unhandled prime meridian unit: {}'.format(angle_unit) assert unit_size == 0.0174532925199433, 'Unhandled prime meridian unit size: {}'.format(unit_size) deprecated = 1 if row[idx_deprecated] == 'yes' else 0 if esri_name not in map_pm_esri_name_to_auth_code: map_pm_esri_name_to_auth_code[esri_name] = ['ESRI', code] sql = """INSERT INTO "prime_meridian" VALUES('ESRI','%s','%s',%s,'EPSG','9110',%d);""" % ( code, esri_name, value, deprecated) all_sql.append(sql) ######################## map_datum_esri_name_to_auth_code = {} map_datum_esri_to_parameters = {} def get_old_esri_name(s): """Massage datum/CRS name like old ESRI software did""" # Needed for EPSG:8353 S_JTSK_JTSK03_Krovak_East_North # Cf https://github.com/OSGeo/gdal/issues/7505 if '[' in s: s = s.replace('-', '_') s = s.replace('[', '') s = s.replace(']', '') # Not totally sure of below, so disable if False: s = s.replace('_(', '_').replace(')_', '_') s = s.replace('.', '_') s = s.replace('(', '_').replace(')', '_') if s.endswith('_'): s = s[0:-1] return s def import_datum(): with open(path_to_csv / 'pe_list_datum.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row code = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if authority == 'EPSG': map_datum_esri_name_to_auth_code[esri_name] = [ 'EPSG', latestWkid] cursor.execute( "SELECT name FROM geodetic_datum WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('geodetic_datum','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(esri_name)) all_sql.append(sql) old_esri_name = get_old_esri_name(esri_name) if old_esri_name != esri_name: sql = """INSERT INTO alias_name VALUES('geodetic_datum','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(old_esri_name)) all_sql.append(sql) description = row[idx_description] deprecated = 1 if row[idx_deprecated] == 'yes' else 0 map_datum_esri_to_parameters[code] = { 'esri_name': esri_name, 'description': description, 'deprecated': deprecated } else: assert authority.upper() == 'ESRI', row map_datum_esri_name_to_auth_code[esri_name] = [ 'ESRI', code] wkt2 = row[idx_wkt2] wkt2_tokens_re = re.compile( r'DATUM\[""?(.*?)""?,\s*ELLIPSOID\[""?(.*?)""?,\s*(-?[\d]+(?:\.[\d]*)?),\s*(-?[\d]+(?:\.[\d]*)?),\s*LENGTHUNIT\[""?(.*?)""?,\s*(-?[\d]+(?:\.[\d]*)?)]]]') match = wkt2_tokens_re.match(wkt2) ellps_name = match.group(2) assert ellps_name in map_spheroid_esri_name_to_auth_code, ( ellps_name, row) ellps_auth_name, ellps_code = map_spheroid_esri_name_to_auth_code[ellps_name] description = row[idx_description] deprecated = 1 if row[idx_deprecated] == 'yes' else 0 map_datum_esri_to_parameters[code] = { 'esri_name': esri_name, 'description': description, 'ellps_auth_name': ellps_auth_name, 'ellps_code': ellps_code, 'deprecated': deprecated } # We cannot write it since we lack the prime meridian !!! (and # the area of use) ######################## map_geogcs_esri_name_to_auth_code = {} def import_geogcs(): # Those 2 maps are used to fill the deprecation table map_code_to_authority = {} mapDeprecatedToNonDeprecated = {} with open(path_to_csv / 'pe_list_geogcs.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 idx_areaname = header.index('areaname') assert idx_areaname >= 0 idx_slat = header.index('slat') assert idx_slat >= 0 idx_nlat = header.index('nlat') assert idx_nlat >= 0 idx_llon = header.index('llon') assert idx_llon >= 0 idx_rlon = header.index('rlon') assert idx_rlon >= 0 datum_written = set() # last 2 ones epoch,model are actually missing in most records... assert nfields == 17 while True: try: row = next(reader) except StopIteration: break assert len(row) in (nfields, nfields -2), (row, header, len(row), nfields) code = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if code == latestWkid and authority.upper() == 'ESRI': cursor.execute( "SELECT name FROM geodetic_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() if src_row: src_name = src_row[0] modified_epsg_name = src_name.replace(' ', '_') if modified_epsg_name.upper() == esri_name.upper() or modified_epsg_name.upper() + "_3D" == esri_name.upper() or modified_epsg_name.upper() + "_(3D)" == esri_name.upper(): print("GeogCRS ESRI:%s (%s) has the same name as EPSG:%s. Fixing authority to be EPSG" % (latestWkid, esri_name, latestWkid)) authority = "EPSG" map_code_to_authority[code] = authority.upper() if authority == 'EPSG': map_geogcs_esri_name_to_auth_code[esri_name] = [ 'EPSG', latestWkid] cursor.execute( "SELECT name FROM geodetic_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('geodetic_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(esri_name)) all_sql.append(sql) old_esri_name = get_old_esri_name(esri_name) if old_esri_name != esri_name: sql = """INSERT INTO alias_name VALUES('geodetic_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(old_esri_name)) all_sql.append(sql) else: assert authority.upper() == 'ESRI', row wkt2 = row[idx_wkt2] wkt2_datum_re = re.compile(r'.*DATUM\[""?(.*?)""?.*') match = wkt2_datum_re.match(wkt2) assert match, wkt2 datum_name = match.group(1) # strip datum out of wkt wkt2 = re.sub(r'DATUM\[""?(.*?)""?,\s*ELLIPSOID\[""?(.*?)""?,\s*(-?[\d]+(?:\.[\d]*)?),\s*(-?[\d]+(?:\.[\d]*)?),\s*LENGTHUNIT\[""?(.*?)""?,\s*(-?[\d]+(?:\.[\d]*)?)]]],?', '', wkt2) assert datum_name in map_datum_esri_name_to_auth_code, ( datum_name, row) datum_auth_name, datum_code = map_datum_esri_name_to_auth_code[datum_name] wkt2_datum_re = re.compile(r'.*PRIMEM\[""?(.*?)""?.*') match = wkt2_datum_re.match(wkt2) assert match, wkt2 pm_name = match.group(1) # strip prime meridian out of wkt wkt2 = re.sub(r'PRIMEM\[""?(.*?)""?,(-?[\d]+(?:\.[\d]*)?),ANGLEUNIT\[""?(.*?)""?,(-?[\d]+(?:\.[\d]*)?)]],?', '', wkt2) assert pm_name in map_pm_esri_name_to_auth_code, (pm_name, row) pm_auth_name, pm_code = map_pm_esri_name_to_auth_code[pm_name] wkt2_angle_unit_re = re.compile( r'.*ANGLEUNIT\[""?(.*?)""?,(-?[\d]+(?:\.[\d]*)?)].*') match = wkt2_angle_unit_re.match(wkt2) assert match, wkt2 angle_unit = match.group(1) assert angle_unit in ('Degree', 'Grad'), 'Unhandled angle unit {}'.format(angle_unit) is_degree = angle_unit == 'Degree' is_grad = angle_unit == 'Grad' assert is_degree or is_grad, row cs_code = '6422' if is_degree else '6403' if "CS[ellipsoidal,3]" in wkt2: assert 'AXIS["Ellipsoidal height (h)",up,ORDER[3],LENGTHUNIT["Meter",1.0]' in wkt2 cs_code = '6423' geodetic_crs_type = "geographic 3D" else: geodetic_crs_type = "geographic 2D" deprecated = 1 if row[idx_deprecated] == 'yes' else 0 extent_auth_name, extent_code = find_extent( row[idx_areaname], row[idx_slat], row[idx_nlat], row[idx_llon], row[idx_rlon]) if datum_auth_name == 'ESRI': if datum_code not in datum_written: datum_written.add(datum_code) p = map_datum_esri_to_parameters[datum_code] sql = """INSERT INTO "geodetic_datum" VALUES('ESRI','%s','%s','%s','%s','%s','%s','%s',NULL,NULL,NULL,NULL,NULL,%d);""" % ( datum_code, p['esri_name'], p['description'], p['ellps_auth_name'], p['ellps_code'], pm_auth_name, pm_code, p['deprecated']) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','geodetic_datum','ESRI','%s','%s','%s','%s','%s');""" % (datum_code, datum_code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) p['pm_auth_name'] = pm_auth_name p['pm_code'] = pm_code map_datum_esri_to_parameters[datum_code] = p else: assert map_datum_esri_to_parameters[datum_code]['pm_auth_name'] == pm_auth_name, ( row, map_datum_esri_to_parameters[datum_code]['pm_auth_name'], pm_auth_name) if map_datum_esri_to_parameters[datum_code]['pm_code'] != pm_code: p = map_datum_esri_to_parameters[datum_code] # Case of GCS_Voirol_Unifie_1960 and GCS_Voirol_Unifie_1960_Paris which use the same # datum D_Voirol_Unifie_1960 but with different prime meridian # We create an artificial datum to avoid that issue datum_name += '_' + pm_name datum_code += '_' + pm_name datum_written.add(datum_code) map_datum_esri_name_to_auth_code[datum_name] = [ 'ESRI', latestWkid] map_datum_esri_to_parameters[datum_code] = { 'esri_name': datum_name, 'description': p['description'] + ' with ' + pm_name + ' prime meridian', 'ellps_auth_name': p['ellps_auth_name'], 'ellps_code': p['ellps_code'], 'deprecated': p['deprecated'] } sql = """INSERT INTO "geodetic_datum" VALUES('ESRI','%s','%s','%s','%s','%s','%s','%s',NULL,NULL,NULL,NULL,NULL,%d);""" % ( datum_code, p['esri_name'], p['description'], p['ellps_auth_name'], p['ellps_code'], pm_auth_name, pm_code, p['deprecated']) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','geodetic_datum','ESRI','%s','%s','%s','%s','%s');""" % (datum_code, datum_code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) p['pm_auth_name'] = pm_auth_name p['pm_code'] = pm_code map_datum_esri_to_parameters[datum_code] = p # We may have already the EPSG entry, so use it preferably if esri_name not in map_geogcs_esri_name_to_auth_code: map_geogcs_esri_name_to_auth_code[esri_name] = ['ESRI', code] sql = f"""INSERT INTO "geodetic_crs" VALUES('ESRI','%s','%s',NULL,'{geodetic_crs_type}','EPSG','%s','%s','%s',NULL,%d);""" % ( code, esri_name, cs_code, datum_auth_name, datum_code, deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','geodetic_crs','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) if deprecated and code != latestWkid and code not in ('4305', '4812'): # Voirol 1960 no longer in EPSG cursor.execute( "SELECT name, deprecated FROM geodetic_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, (code, latestWkid) _, deprecated = src_row if not deprecated: sql = """INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','%s','EPSG','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) elif deprecated and code != latestWkid: mapDeprecatedToNonDeprecated[code] = latestWkid for code in mapDeprecatedToNonDeprecated: replacement_code = mapDeprecatedToNonDeprecated[code] if replacement_code in map_code_to_authority: sql = """INSERT INTO "deprecation" VALUES('geodetic_crs','ESRI','%s','%s','%s','ESRI');""" % ( code, map_code_to_authority[replacement_code], replacement_code) all_sql.append(sql) aliases = import_syn(path_to_objedit / "datum_syn.txt") for (new_name, old_name) in aliases: (auth, code) = map_datum_esri_name_to_auth_code[new_name] sql = """INSERT INTO alias_name VALUES('geodetic_datum','%s','%s','%s','ESRI_OLD');""" % ( auth, code, escape_literal(old_name)) all_sql.append(sql) aliases = import_syn(path_to_objedit / "geogcs_syn.txt") for (new_name, old_name) in aliases: (auth, code) = map_geogcs_esri_name_to_auth_code[new_name] sql = """INSERT INTO alias_name VALUES('geodetic_crs','%s','%s','%s','ESRI_OLD');""" % ( auth, code, escape_literal(old_name)) all_sql.append(sql) ######################## def parse_wkt(s, level): if s[0] == '"': return s pos = s.find('[') if pos < 0: return s return {s[0:pos]: parse_wkt_array(s[pos+1:-1], level + 1)} def parse_wkt_array(s, level=0): ar = [] in_string = False cur_token = '' indent_level = 0 for c in s: if in_string: if c == '"': in_string = False else: cur_token += c elif c == '"': in_string = True elif c == '[': cur_token += c indent_level += 1 elif c == ']': cur_token += c indent_level -= 1 assert indent_level >= 0 elif indent_level == 0 and c == ',': ar.append(parse_wkt(cur_token, level + 1)) cur_token = '' else: cur_token += c assert indent_level == 0 if cur_token: ar.append(parse_wkt(cur_token, level + 1)) if level == 0: return wkt_array_to_dict(ar) else: return ar def wkt_array_to_dict(ar): d = {} for elt in ar: assert isinstance(elt, dict), elt assert len(elt) == 1 if 'PROJECTION' in elt: assert len(elt['PROJECTION']) == 1, elt['PROJECTION'] assert 'PROJECTION' not in d name = elt['PROJECTION'][0] d['PROJECTION'] = name elif 'CONVERSION' in elt: d['CONVERSION'] = [elt['CONVERSION'][0], wkt_array_to_dict(elt['CONVERSION'][1:])] elif 'COORDINATEOPERATION' in elt: d['COORDINATEOPERATION'] = [elt['COORDINATEOPERATION'][0], wkt_array_to_dict(elt['COORDINATEOPERATION'][1:])] elif 'SOURCECRS' in elt: assert len(elt['SOURCECRS']) == 1, elt['SOURCECRS'] d['SOURCECRS'] = elt['SOURCECRS'][0] elif 'TARGETCRS' in elt: assert len(elt['TARGETCRS']) == 1, elt['TARGETCRS'] d['TARGETCRS'] = elt['TARGETCRS'][0] elif 'VERTCRS' in elt: d['VERTCRS'] = [elt['VERTCRS'][0], wkt_array_to_dict(elt['VERTCRS'][1:])] elif 'VDATUM' in elt: assert len(elt['VDATUM']) == 1, elt['VDATUM'] d['VDATUM'] = elt['VDATUM'][0] elif 'CS' in elt: assert len(elt['CS']) == 2, elt['CS'] d['CS'] = elt['CS'] elif 'AXIS' in elt: assert len(elt['AXIS']) == 3 d['AXIS'] = [elt['AXIS'][0], elt['AXIS'][1], wkt_array_to_dict(elt['AXIS'][2:])] elif 'DATUM' in elt: d['DATUM'] = [elt['DATUM'][0], wkt_array_to_dict(elt['DATUM'][1:])] elif 'METHOD' in elt: assert len(elt['METHOD']) == 1, elt['METHOD'] d['METHOD'] = elt['METHOD'][0] elif 'PARAMETERFILE' in elt: assert len(elt['PARAMETERFILE']) == 1, elt['PARAMETERFILE'] d['PARAMETERFILE'] = elt['PARAMETERFILE'][0] elif 'OPERATIONACCURACY' in elt: assert len(elt['OPERATIONACCURACY']) == 1, elt['OPERATIONACCURACY'] d['OPERATIONACCURACY'] = elt['OPERATIONACCURACY'][0] #elif 'ELLIPSOID' in elt: # d['ELLIPSOID'] = [elt['ELLIPSOID'][0], wkt_array_to_dict(elt['ELLIPSOID'][1:])] elif 'PARAMETER' in elt: assert len(elt['PARAMETER']) >= 2, elt['PARAMETER'] name = elt['PARAMETER'][0] assert name not in d d[name] = elt['PARAMETER'][1] if len(elt['PARAMETER']) == 2 else elt['PARAMETER'][1:] elif 'UNIT' in elt: assert len(elt['UNIT']) == 2, elt['UNIT'] name = elt['UNIT'][0] assert 'UNIT_NAME' not in d d['UNIT_NAME'] = name d['UNIT_VALUE'] = elt['UNIT'][1] elif 'LENGTHUNIT' in elt: assert len(elt['LENGTHUNIT']) == 2, elt['LENGTHUNIT'] name = elt['LENGTHUNIT'][0] assert 'UNIT_NAME' not in d d['UNIT_NAME'] = name d['UNIT_VALUE'] = elt['LENGTHUNIT'][1] else: assert True return d ######################## @dataclass class CoordinateSystem: """ Encapsulates a coordinate system """ auth_name: str code: str @dataclass class Unit: """ Encapsulates a WKT unit """ uom_auth_name: str uom_code: str cs: Optional[CoordinateSystem] = None def get_wkt_unit(UNIT_NAME, UNIT_VALUE, is_rate=False) -> Unit: cs = None if UNIT_NAME == 'Meter': uom_auth_name = 'EPSG' uom_code = '1042' if is_rate else '9001' cs = CoordinateSystem('EPSG', '4400') assert UNIT_VALUE == '1.0', UNIT_VALUE elif UNIT_NAME == 'Millimeter': uom_auth_name = 'EPSG' uom_code = '1027' if is_rate else '1025' assert UNIT_VALUE == '0.001', UNIT_VALUE elif UNIT_NAME == 'Chain': uom_auth_name = 'EPSG' assert not is_rate uom_code = '9097' cs = CoordinateSystem('ESRI', UNIT_NAME) assert UNIT_VALUE == '20.1168', UNIT_VALUE elif UNIT_NAME == 'Degree': assert not is_rate uom_auth_name = 'EPSG' uom_code = '9102' assert UNIT_VALUE == '0.0174532925199433', UNIT_VALUE elif UNIT_NAME == 'Arcsecond': uom_auth_name = 'EPSG' uom_code = '1043' if is_rate else '9104' assert UNIT_VALUE == '0.00000484813681109536', UNIT_VALUE elif UNIT_NAME == 'Milliarcsecond': uom_auth_name = 'EPSG' uom_code = '1032' if is_rate else '1031' assert UNIT_VALUE == '4.84813681109536e-09', UNIT_VALUE elif UNIT_NAME == 'Grad': assert not is_rate uom_auth_name = 'EPSG' uom_code = '9105' assert UNIT_VALUE == '0.01570796326794897', UNIT_VALUE elif UNIT_NAME == 'Foot': assert not is_rate uom_auth_name = 'EPSG' uom_code = '9002' cs = CoordinateSystem('EPSG', '4495') assert UNIT_VALUE == '0.3048', UNIT_VALUE elif UNIT_NAME == 'Foot_US': assert not is_rate uom_auth_name = 'EPSG' uom_code = '9003' cs = CoordinateSystem('EPSG', '4497') assert UNIT_VALUE == '0.3048006096012192', UNIT_VALUE elif UNIT_NAME == 'Yard_Indian_1937': assert not is_rate uom_auth_name = 'EPSG' uom_code = '9085' cs = CoordinateSystem('ESRI', UNIT_NAME) assert UNIT_VALUE == '0.91439523', UNIT_VALUE elif UNIT_NAME == 'Parts_Per_Million': uom_auth_name = 'EPSG' uom_code = '1041' if is_rate else '9202' assert UNIT_VALUE == '0.000001', UNIT_VALUE elif UNIT_NAME == 'Parts_Per_Billion': uom_auth_name = 'EPSG' uom_code = '1030' if is_rate else '1028' assert UNIT_VALUE == '0.000000001', UNIT_VALUE elif UNIT_NAME == 'Unity': assert not is_rate uom_auth_name = 'EPSG' uom_code = '9201' assert UNIT_VALUE == '1.0', UNIT_VALUE else: assert False, UNIT_NAME if cs is not None and cs.auth_name == 'ESRI' and cs.code not in set_esri_cs_code: sql = f"""INSERT INTO "coordinate_system" VALUES('ESRI','{cs.code}','Cartesian',2);""" all_sql.append(sql) sql = f"""INSERT INTO "axis" VALUES('ESRI','{2 * len(set_esri_cs_code) + 1}','Easting','E','east','ESRI','{cs.code}',1,'EPSG','{uom_code}');""" all_sql.append(sql) sql = f"""INSERT INTO "axis" VALUES('ESRI','{2 * len(set_esri_cs_code) + 2}','Northing','N','north','ESRI','{cs.code}',2,'EPSG','{uom_code}');""" all_sql.append(sql) set_esri_cs_code.add(cs.code) return Unit(uom_auth_name=uom_auth_name, uom_code=uom_code, cs=cs) class UnitType(Enum): """ WKT unit types """ Angle = 0 Length = 1 Scale = 2 STRING_TO_UNIT_TYPE = { 'ANGLEUNIT': UnitType.Angle, 'LENGTHUNIT': UnitType.Length, 'SCALEUNIT': UnitType.Scale } @dataclass class ParameterValue: """ Encapsulates a WKT parameter value """ value: float unit_type: UnitType unit: Unit def get_parameter_value(wkt_definition: List) -> ParameterValue: """ Retrieves a WKT parameter value from its definition """ value = wkt_definition[0] assert len(wkt_definition[1]) == 1 unit_type_str = list(wkt_definition[1].keys())[0] unit_type = STRING_TO_UNIT_TYPE[unit_type_str] return ParameterValue(value=value, unit_type=unit_type, unit=get_wkt_unit(*wkt_definition[1][unit_type_str])) def get_parameter_values(wkt_definition: dict) -> Dict[str, ParameterValue]: """ Retrieves all WKT parameter values from a WKT string """ res = {} for param, value in wkt_definition.items(): if isinstance(value, str): res[param] = value else: try: res[param] = get_parameter_value(value) except AssertionError: print(wkt_definition) raise return res ######################## def get_cs_from_false_easting_and_northing(params: Dict[str, ParameterValue]) -> CoordinateSystem: """ Extracts the CoordinateSystem from False_Easting and False_Northing parameters """ assert params['False_Easting'].unit.cs.auth_name == params[ 'False_Northing'].unit.cs.auth_name, 'Cannot handle False_Easting CS auth {} != False_Northing CS auth {}'.format( params['False_Easting'].unit.cs.auth_name, params['False_Northing'].unit.cs.auth_name) cs_auth_name = params['False_Easting'].unit.cs.auth_name assert params['False_Easting'].unit.cs.code == params[ 'False_Northing'].unit.cs.code, 'Cannot handle False_Easting CS code {} != False_Northing CS code {}'.format( params['False_Easting'].unit.cs.code, params['False_Northing'].unit.cs.code) cs_code = params['False_Easting'].unit.cs.code return CoordinateSystem(cs_auth_name, cs_code) map_projcs_esri_name_to_auth_code = {} set_esri_cs_code = set() MAP_CONVERSION_SQL_TO_CODE = {} EPSG_CONVERSION_PARAM_NAMES = { 1039: 'Projection plane origin height', 8801: 'Latitude of natural origin', 8802: 'Longitude of natural origin', 8805: 'Scale factor at natural origin', 8806: 'False easting', 8807: 'False northing', 8811: 'Latitude of projection centre', 8812: 'Longitude of projection centre', 8813: 'Azimuth at projection centre', 8814: 'Angle from Rectified to Skew Grid', 8815: 'Scale factor at projection centre', 8816: 'Easting at projection centre', 8817: 'Northing at projection centre', 8821: 'Latitude of false origin', 8822: 'Longitude of false origin', 8823: 'Latitude of 1st standard parallel', 8824: 'Latitude of 2nd standard parallel', 8826: 'Easting at false origin', 8827: 'Northing at false origin' } @dataclass class ConversionMapping: """ Encapsulates a mapping from an ESRI projcs """ epsg_code: str epsg_name: str param_mapping: Dict[int, str] # special cases REQUIRES_ORIGINAL_WKT_DEF = { '102113' # see https://github.com/OSGeo/PROJ/pull/2954#issuecomment-977771912 for rationale } MAPPED_PROJCS: Dict[str, ConversionMapping] = { 'Hotine_Oblique_Mercator_Azimuth_Natural_Origin': ConversionMapping( epsg_code='9812', epsg_name='Hotine Oblique Mercator (variant A)', param_mapping={ 8811: 'Latitude_Of_Center', 8812: 'Longitude_Of_Center', 8813: 'Azimuth', 8814: 'Azimuth', 8815: 'Scale_Factor', 8806: 'False_Easting', 8807: 'False_Northing' } ), 'Equal_Earth': ConversionMapping( epsg_code='1078', epsg_name='Equal Earth', param_mapping={ 8802: 'Central_Meridian', 8806: 'False_Easting', 8807: 'False_Northing' } ), 'Albers': ConversionMapping( epsg_code='9822', epsg_name='Albers Equal Area', param_mapping={ 8821: 'Latitude_Of_Origin', 8822: 'Central_Meridian', 8823: 'Standard_Parallel_1', 8824: 'Standard_Parallel_2', 8826: 'False_Easting', 8827: 'False_Northing', } ), 'Cassini': ConversionMapping( epsg_code='9806', epsg_name='Cassini-Soldner', param_mapping={ 8801: 'Latitude_Of_Origin', 8802: 'Central_Meridian', 8806: 'False_Easting', 8807: 'False_Northing', } ), 'IGAC_Plano_Cartesiano': ConversionMapping( epsg_code='1052', epsg_name='Colombia Urban', param_mapping={ 8801: 'Latitude_Of_Center', 8802: 'Longitude_Of_Center', 8806: 'False_Easting', 8807: 'False_Northing', 1039: 'Height' } ), 'Equidistant_Cylindrical': ConversionMapping( epsg_code='1029', epsg_name='Equidistant Cylindrical (Spherical)', param_mapping={ 8823: 'Standard_Parallel_1', 8802: 'Central_Meridian', 8806: 'False_Easting', 8807: 'False_Northing', } ), 'Mercator': ConversionMapping( epsg_code='9805', epsg_name='Mercator (variant B)', param_mapping={ 8823: 'Standard_Parallel_1', 8802: 'Central_Meridian', 8806: 'False_Easting', 8807: 'False_Northing', } ), 'Polyconic': ConversionMapping( epsg_code='9818', epsg_name='American Polyconic', param_mapping={ 8801: 'Latitude_Of_Origin', 8802: 'Central_Meridian', 8806: 'False_Easting', 8807: 'False_Northing', } ), 'Local': ConversionMapping( epsg_code='1130', epsg_name='Local Orthographic', param_mapping={ 8811: 'Latitude_Of_Center', 8812: 'Longitude_Of_Center', 8813: 'Azimuth', 8815: 'Scale_Factor', 8816: 'False_Easting', 8817: 'False_Northing', } ), } MAPPED_PROJCS_WITH_EXTRA_LOGIC: Dict[str, Dict[str, ConversionMapping]] = { 'Lambert_Conformal_Conic': { 'Lambert Conic Conformal (1SP)': ConversionMapping( epsg_code='9801', epsg_name='Lambert Conic Conformal (1SP)', param_mapping={ 8801: 'Latitude_Of_Origin', 8802: 'Central_Meridian', 8805: 'Scale_Factor', 8806: 'False_Easting', 8807: 'False_Northing' } ), 'Lambert Conic Conformal (2SP)': ConversionMapping( epsg_code='9802', epsg_name='Lambert Conic Conformal (2SP)', param_mapping={ 8821: 'Latitude_Of_Origin', 8822: 'Central_Meridian', 8823: 'Standard_Parallel_1', 8824: 'Standard_Parallel_2', 8826: 'False_Easting', 8827: 'False_Northing' } ) } } def insert_conversion_sql(esri_code: str, esri_name: str, epsg_code: str, epsg_name: str, params: Dict[str, ParameterValue], param_mapping: Dict[int, str], extent_auth_name: str, extent_code: str, geogcs_auth_name: str, geogcs_code: str, cs: CoordinateSystem, deprecated: bool = False) -> List[str]: """ Generates INSERT sql command for conversion """ param_strings = [] for param_epsg_code, param_name in param_mapping.items(): param_strings.append("'EPSG','{}','{}',{},'{}','{}'".format( param_epsg_code, EPSG_CONVERSION_PARAM_NAMES[param_epsg_code], params[param_name].value, params[param_name].unit.uom_auth_name, params[param_name].unit.uom_code )) if len(param_strings) < 7: for _ in range(len(param_strings), 7): param_strings.append('NULL,NULL,NULL,NULL,NULL,NULL') assert len(param_strings) == 7, 'Too many parameters' sql = "INSERT INTO \"conversion\" VALUES('ESRI','{code}','{name}',NULL,'{method_auth_name}','{method_code}','{method_name}'," \ "{param1},{param2},{param3},{param4},{param5},{param6},{param7},{deprecated});".format( code=esri_code, name='unnamed', method_auth_name='EPSG', method_code=epsg_code, method_name=epsg_name, param1=param_strings[0], param2=param_strings[1], param3=param_strings[2], param4=param_strings[3], param5=param_strings[4], param6=param_strings[5], param7=param_strings[6], deprecated=1 if deprecated else 0) conv_name = 'unnamed' conv_auth_name = 'ESRI' conv_code = esri_code results = [] sql_extract = sql[sql.find('NULL'):] if conv_name != 'unnamed' or sql_extract not in MAP_CONVERSION_SQL_TO_CODE: results.append(sql) sql = f"""INSERT INTO "usage" VALUES('ESRI', 'CONV_{esri_code}_USAGE','conversion','ESRI','{esri_code}','{extent_auth_name}','{extent_code}','EPSG','1024');""" results.append(sql) MAP_CONVERSION_SQL_TO_CODE[sql_extract] = conv_code else: conv_code = MAP_CONVERSION_SQL_TO_CODE[sql_extract] sql = f"""INSERT INTO "projected_crs" VALUES('ESRI','{esri_code}','{esri_name}',NULL,'{cs.auth_name}','{cs.code}','{geogcs_auth_name}',""" \ f"""'{geogcs_code}','{conv_auth_name}','{conv_code}',NULL,{1 if deprecated else 0});""" results.append(sql) sql = f"""INSERT INTO "usage" VALUES('ESRI', 'PCRS_{esri_code}_USAGE','projected_crs','ESRI','{esri_code}','{extent_auth_name}','{extent_code}','EPSG','1024');""" results.append(sql) return results def import_projcs(): with open(path_to_csv / 'pe_list_projcs.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt = header.index('wkt') assert idx_wkt >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 idx_areaname = header.index('areaname') assert idx_areaname >= 0 idx_slat = header.index('slat') assert idx_slat >= 0 idx_nlat = header.index('nlat') assert idx_nlat >= 0 idx_llon = header.index('llon') assert idx_llon >= 0 idx_rlon = header.index('rlon') assert idx_rlon >= 0 wkid_set = set() mapDeprecatedToNonDeprecated = {} while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row code = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if code == latestWkid and authority.upper() == 'ESRI': cursor.execute( "SELECT name FROM projected_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() if src_row: src_name = src_row[0] modified_epsg_name = src_name.replace(' / ', '_').replace(' ', '_') if modified_epsg_name.upper() == esri_name.upper() or modified_epsg_name.upper() + "_3D" == esri_name.upper() or modified_epsg_name.upper() + "_(3D)" == esri_name.upper(): print("ProjCRS ESRI:%s (%s) has the same name as EPSG:%s. Fixing authority to be EPSG" % (latestWkid, esri_name, latestWkid)) authority = "EPSG" if authority == 'EPSG': map_projcs_esri_name_to_auth_code[esri_name] = [ 'EPSG', latestWkid] cursor.execute( "SELECT name FROM projected_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] esri_name = row[idx_name] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('projected_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(esri_name)) all_sql.append(sql) old_esri_name = get_old_esri_name(esri_name) if old_esri_name != esri_name: sql = """INSERT INTO alias_name VALUES('projected_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(old_esri_name)) all_sql.append(sql) else: assert authority.upper() == 'ESRI', row wkid_set.add(code) wkt = row[idx_wkt] wkt2 = row[idx_wkt2] wkt2_basegeogcrs_re = re.compile(r'.*BASEGEOGCRS\[""?(.*?)""?.*') match = wkt2_basegeogcrs_re.match(wkt2) assert match, wkt2 geogcs_name = match.group(1) pos = wkt2.find('CONVERSION[') assert pos >= 0 parsed_conv_wkt2 = parse_wkt_array(wkt2[pos:-1]) assert geogcs_name in map_geogcs_esri_name_to_auth_code, ( geogcs_name, row) geogcs_auth_name, geogcs_code = map_geogcs_esri_name_to_auth_code[geogcs_name] extent_auth_name, extent_code = find_extent( row[idx_areaname], row[idx_slat], row[idx_nlat], row[idx_llon], row[idx_rlon]) map_projcs_esri_name_to_auth_code[esri_name] = ['ESRI', code] deprecated = 1 if row[idx_deprecated] == 'yes' else 0 method = parsed_conv_wkt2['CONVERSION'][0] if method in ('Transverse_Mercator', 'Gauss_Kruger'): params = get_parameter_values(parsed_conv_wkt2['CONVERSION'][1]) cs = get_cs_from_false_easting_and_northing(params) assert params['Central_Meridian'].unit.uom_auth_name == 'EPSG', 'Unhandled Central_Meridian authority {}'.format(params['Central_Meridian'].unit.uom_auth_name) assert params['Scale_Factor'].unit.uom_code == '9201', 'Unhandled scale factor unit {}'.format(params['Scale_Factor'].unit.uom_code) assert params['Latitude_Of_Origin'].unit.uom_auth_name == 'EPSG', 'Unhandled Latitude_Of_Origin authority {}'.format(params['Latitude_Of_Origin'].unit.uom_auth_name) conv_name = 'unnamed' if method == 'Gauss_Kruger' and 'GK_' not in esri_name and 'Gauss' not in esri_name: conv_name = esri_name + " (Gauss Kruger)" cursor.execute( """SELECT code, deprecated FROM conversion WHERE auth_name = 'EPSG' AND method_code = '9807' AND param1_code = '8801' AND param1_value = ? AND param1_uom_code = ? AND param2_code = '8802' AND param2_value = ? AND param2_uom_code = ? AND param3_code = '8805' AND param3_value = ? AND param3_uom_code = '9201' AND param4_code = '8806' AND param4_value = ? AND param4_uom_code = ? AND param5_code = '8807' AND param5_value = ? AND param5_uom_code = ?""", (params['Latitude_Of_Origin'].value, params['Latitude_Of_Origin'].unit.uom_code, params['Central_Meridian'].value, params['Central_Meridian'].unit.uom_code, params['Scale_Factor'].value, params['False_Easting'].value, params['False_Easting'].unit.uom_code, params['False_Northing'].value, params['False_Northing'].unit.uom_code)) src_row = cursor.fetchone() if conv_name == 'unnamed' and src_row: conv_auth_name = 'EPSG' conv_code = src_row[0] conv_is_deprecated = bool(src_row[1]) while not deprecated and conv_is_deprecated: # if we found a deprecated conversion but the CRS isn't deprecated, keep looking... src_row = cursor.fetchone() if not src_row: break conv_code = src_row[0] conv_is_deprecated = bool(src_row[1]) if conv_is_deprecated and not deprecated: # if conversion is marked as deprecated, we have to deprecate the CRS also assert False, 'ESRI:{} ({}) is NOT marked as deprecated but conversion EPSG:{} is deprecated'.format(code, esri_name, conv_code) else: conv_auth_name = 'ESRI' conv_code = code sql = """INSERT INTO "conversion" VALUES('ESRI','%s','%s',NULL,'EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',%s,'EPSG','%s','EPSG','8802','Longitude of natural origin',%s,'EPSG','%s','EPSG','8805','Scale factor at natural origin',%s,'EPSG','9201','EPSG','8806','False easting',%s,'EPSG','%s','EPSG','8807','False northing',%s,'EPSG','%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,%d);""" % ( code, conv_name, params['Latitude_Of_Origin'].value, params['Latitude_Of_Origin'].unit.uom_code, params['Central_Meridian'].value, params['Central_Meridian'].unit.uom_code, params['Scale_Factor'].value, params['False_Easting'].value, params['False_Easting'].unit.uom_code, params['False_Northing'].value, params['False_Northing'].unit.uom_code, deprecated) sql_extract = sql[sql.find('NULL'):] if conv_name != 'unnamed' or sql_extract not in MAP_CONVERSION_SQL_TO_CODE: all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', 'CONV_%s_USAGE','conversion','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) MAP_CONVERSION_SQL_TO_CODE[sql_extract] = conv_code else: conv_code = MAP_CONVERSION_SQL_TO_CODE[sql_extract] sql = """INSERT INTO "projected_crs" VALUES('ESRI','%s','%s',NULL,'%s','%s','%s','%s','%s','%s',NULL,%d);""" % ( code, esri_name, cs.auth_name, cs.code, geogcs_auth_name, geogcs_code, conv_auth_name, conv_code, deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', 'PCRS_%s_USAGE','projected_crs','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) elif (method in MAPPED_PROJCS or method in MAPPED_PROJCS_WITH_EXTRA_LOGIC) and code not in REQUIRES_ORIGINAL_WKT_DEF: params = get_parameter_values(parsed_conv_wkt2['CONVERSION'][1]) cs = get_cs_from_false_easting_and_northing(params) if method in MAPPED_PROJCS: conversion_mapping = MAPPED_PROJCS[method] elif method == 'Lambert_Conformal_Conic' and 'Scale_Factor' in params: conversion_mapping = MAPPED_PROJCS_WITH_EXTRA_LOGIC['Lambert_Conformal_Conic'][ 'Lambert Conic Conformal (1SP)'] assert params['Scale_Factor'].unit.uom_code == '9201', 'Unhandled scale unit {}'.format( params['Scale_Factor'].unit.uom_code) elif method == 'Lambert_Conformal_Conic' and 'Standard_Parallel_2' in params: conversion_mapping = MAPPED_PROJCS_WITH_EXTRA_LOGIC['Lambert_Conformal_Conic']['Lambert Conic Conformal (2SP)'] else: assert False # additional validation required for these methods: if method == 'Hotine_Oblique_Mercator_Azimuth_Natural_Origin': assert params['Scale_Factor'].unit.uom_code == '9201', 'Unhandled scale unit {}'.format(params['Scale_Factor'].unit.uom_code) elif method == 'Cassini': assert params['Scale_Factor'].unit.uom_code == '9201', 'Unhandled scale unit {}'.format( params['Scale_Factor'].unit.uom_code) assert params['Scale_Factor'].value == '1.0' sql = insert_conversion_sql(esri_code=code, esri_name=esri_name, epsg_code=conversion_mapping.epsg_code, epsg_name=conversion_mapping.epsg_name, params=params, param_mapping=conversion_mapping.param_mapping, extent_auth_name=extent_auth_name, extent_code=extent_code, geogcs_auth_name=geogcs_auth_name, geogcs_code=geogcs_code, cs=cs, deprecated=bool(deprecated) ) all_sql.extend(sql) else: # TODO -- add more method mapping! print('Direct mapping for {} not yet implemented, falling back to default handling'.format(method)) sql = """INSERT INTO "projected_crs" VALUES('ESRI','%s','%s',NULL,NULL,NULL,'%s','%s',NULL,NULL,'%s',%d);""" % ( code, esri_name, geogcs_auth_name, geogcs_code, escape_literal(wkt), deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', 'PCRS_%s_USAGE','projected_crs','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) if deprecated and code != latestWkid: mapDeprecatedToNonDeprecated[code] = latestWkid for deprecated in mapDeprecatedToNonDeprecated: code = deprecated latestWkid = mapDeprecatedToNonDeprecated[deprecated] if latestWkid in wkid_set: sql = """INSERT INTO "deprecation" VALUES('projected_crs','ESRI','%s','ESRI','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) else: cursor.execute( "SELECT name, deprecated FROM projected_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row _, deprecated = src_row if not deprecated: sql = """INSERT INTO "deprecation" VALUES('projected_crs','ESRI','%s','EPSG','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) aliases = import_syn(path_to_objedit / "projcs_syn.txt") for (new_name, old_name) in aliases: (auth, code) = map_projcs_esri_name_to_auth_code[new_name] sql = """INSERT INTO alias_name VALUES('projected_crs','%s','%s','%s','ESRI_OLD');""" % ( auth, code, escape_literal(old_name)) all_sql.append(sql) ######################## map_vdatum_esri_name_to_auth_code = {} map_vdatum_esri_to_parameters = {} def import_vdatum(): with open(path_to_csv / 'pe_list_vdatum.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row wkid = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if authority == 'EPSG': map_vdatum_esri_name_to_auth_code[esri_name] = [ 'EPSG', latestWkid] cursor.execute( "SELECT name FROM vertical_datum WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] esri_name = row[idx_name] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('vertical_datum','EPSG','%s','%s','ESRI');""" % ( wkid, escape_literal(esri_name)) all_sql.append(sql) old_esri_name = get_old_esri_name(esri_name) if old_esri_name != esri_name: sql = """INSERT INTO alias_name VALUES('vertical_datum','EPSG','%s','%s','ESRI');""" % ( wkid, escape_literal(old_esri_name)) all_sql.append(sql) else: assert authority.upper() == 'ESRI', row map_vdatum_esri_name_to_auth_code[esri_name] = ['ESRI', wkid] description = row[idx_description] deprecated = 1 if row[idx_deprecated] == 'yes' else 0 map_vdatum_esri_to_parameters[wkid] = { 'esri_name': esri_name, 'description': description, 'deprecated': deprecated } # We cannot write it since we lack the area of use ######################## map_vertcs_esri_name_to_auth_code = {} def import_vertcs(): # Those 2 maps are used to fill the deprecation table map_code_to_authority = {} mapDeprecatedToNonDeprecated = {} with open(path_to_csv / 'pe_list_vertcs.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt = header.index('wkt') assert idx_wkt >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 idx_areaname = header.index('areaname') assert idx_areaname >= 0 idx_slat = header.index('slat') assert idx_slat >= 0 idx_nlat = header.index('nlat') assert idx_nlat >= 0 idx_llon = header.index('llon') assert idx_llon >= 0 idx_rlon = header.index('rlon') assert idx_rlon >= 0 assert nfields == 17 vdatum_written = set() sql = """-- vertical coordinate system for ellipsoidal height. Not really ISO 19111 valid...""" all_sql.append(sql) sql = """INSERT INTO "coordinate_system" VALUES('ESRI','ELLPS_HEIGHT_METRE','vertical',1);""" all_sql.append(sql) sql = """INSERT INTO "axis" VALUES('ESRI','ELLPS_HEIGHT_METRE','Ellipsoidal height','h','up','ESRI','ELLPS_HEIGHT_METRE',1,'EPSG','9001');""" all_sql.append(sql) while True: try: row = next(reader) except StopIteration: break assert len(row) in (nfields, nfields - 2), (row, len(row), nfields) code = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if code == latestWkid and authority.upper() == 'ESRI': cursor.execute( "SELECT name FROM vertical_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() if src_row: src_name = src_row[0] modified_epsg_name = src_name.replace(' ', '_') if modified_epsg_name.upper() == esri_name.upper(): print("VertCRS ESRI:%s (%s) has the same name as EPSG:%s. Fixing authority to be EPSG" % (latestWkid, esri_name, latestWkid)) authority = "EPSG" map_code_to_authority[code] = authority.upper() if authority == 'EPSG': map_vertcs_esri_name_to_auth_code[esri_name] = [ 'EPSG', latestWkid] cursor.execute( "SELECT name FROM vertical_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] esri_name = row[idx_name] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('vertical_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(esri_name)) all_sql.append(sql) old_esri_name = get_old_esri_name(esri_name) if old_esri_name != esri_name: sql = """INSERT INTO alias_name VALUES('vertical_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(old_esri_name)) all_sql.append(sql) else: assert authority.upper() == 'ESRI', row wkt2 = row[idx_wkt2] vdatum_re = re.compile(r'.*VDATUM\[""?(.*?)""?.*') match = vdatum_re.match(wkt2) is_vdatum = True if match: datum_name = match.group(1) if datum_name not in map_vdatum_esri_name_to_auth_code: print('Skipping vertcs %s. Cannot find vertical datum %s' % ( str(row), datum_name)) sql = """-- Skipping vertcs %s. Cannot find vertical datum %s""" % ( esri_name, datum_name) all_sql.append(sql) continue datum_auth_name, datum_code = map_vdatum_esri_name_to_auth_code[datum_name] else: datum_re = re.compile(r'.*DATUM\[""?(.*?)""?.*') match = datum_re.match(wkt2) assert match is_vdatum = False datum_name = match.group(1) if datum_name not in map_datum_esri_name_to_auth_code: print('Skipping vertcs %s. Cannot find geodetic datum %s' % ( str(row), datum_name)) sql = """-- Skipping vertcs %s. Cannot find geodetic datum %s""" % ( esri_name, datum_name) all_sql.append(sql) continue datum_auth_name, datum_code = map_datum_esri_name_to_auth_code[datum_name] deprecated = 1 if row[idx_deprecated] == 'yes' else 0 extent_auth_name, extent_code = find_extent( row[idx_areaname], row[idx_slat], row[idx_nlat], row[idx_llon], row[idx_rlon]) if not is_vdatum: new_datum_code = 'from_geogdatum_' + datum_auth_name + '_' + datum_code if new_datum_code not in vdatum_written: vdatum_written.add(new_datum_code) p = map_datum_esri_to_parameters[datum_code] datum_code = new_datum_code sql = """INSERT INTO "vertical_datum" VALUES('ESRI','%s','%s',NULL,NULL,NULL,NULL,NULL,NULL,%d);""" % ( datum_code, p['esri_name'], p['deprecated']) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','vertical_datum','ESRI','%s','%s','%s','%s','%s');""" % (datum_code, datum_code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) else: datum_code = new_datum_code datum_auth_name = 'ESRI' elif datum_auth_name == 'ESRI': # e.g Mean_Sea_Level_Hawaii datum is used both by ESRI:105795 'MSL_Hawaii_height_(m)' and SL_Hawaii_height_(ftUS)' if datum_code not in vdatum_written: vdatum_written.add(datum_code) p = map_vdatum_esri_to_parameters[datum_code] sql = """INSERT INTO "vertical_datum" VALUES('ESRI','%s','%s',NULL,NULL,NULL,NULL,NULL,NULL,%d);""" % ( datum_code, p['esri_name'], p['deprecated']) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','vertical_datum','ESRI','%s','%s','%s','%s','%s');""" % (datum_code, datum_code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) map_vertcs_esri_name_to_auth_code[esri_name] = ['ESRI', code] parsed_wkt2 = parse_wkt_array(wkt2) assert not set(k for k in parsed_wkt2['VERTCRS'][1].keys() if k not in ('CS','AXIS','VDATUM','DATUM')), 'Unhandled parameter in VERTCRS: {}'.format(list(parsed_wkt2['VERTCRS'][1].keys())) assert parsed_wkt2['VERTCRS'][1]['CS'] == ['vertical', '1'], 'Unhandled vertcrs CS: {}'.format(parsed_wkt2['VERTCRS'][1]['CS']) axis = parsed_wkt2['VERTCRS'][1]['AXIS'] is_ellipsoidal_height = (axis[:2] == ['Ellipsoidal height (h)', 'up']) assert axis[:2] == ['Gravity-related height (H)', 'up'] or is_ellipsoidal_height, 'Unhandled vertcrs AXIS: {}'.format(axis) vertical_unit = axis[2]['UNIT_NAME'] cs_auth = 'EPSG' if vertical_unit == 'Meter': cs_code = 6499 elif vertical_unit == 'Foot': cs_code = 1030 elif vertical_unit == 'Foot_US': cs_code = 6497 else: assert False, ('unknown coordinate system for %s' % str(row)) if is_ellipsoidal_height or not is_vdatum: assert cs_code == 6499 cs_auth = 'ESRI' cs_code = 'ELLPS_HEIGHT_METRE' sql = """INSERT INTO "vertical_crs" VALUES('ESRI','%s','%s',NULL,'%s','%s','%s','%s',%d);""" % ( code, esri_name, cs_auth, cs_code, datum_auth_name, datum_code, deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','vertical_crs','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) if deprecated and code != latestWkid: cursor.execute( "SELECT name, deprecated FROM vertical_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row _, deprecated = src_row if not deprecated: sql = """INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','%s','EPSG','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) elif deprecated and code != latestWkid: mapDeprecatedToNonDeprecated[code] = latestWkid for code in mapDeprecatedToNonDeprecated: replacement_code = mapDeprecatedToNonDeprecated[code] if replacement_code in map_code_to_authority: sql = """INSERT INTO "deprecation" VALUES('vertical_crs','ESRI','%s','%s','%s','ESRI');""" % ( code, map_code_to_authority[replacement_code], replacement_code) all_sql.append(sql) aliases = import_syn(path_to_objedit / "vdatum_syn.txt") for (new_name, old_name) in aliases: (auth, code) = map_vdatum_esri_name_to_auth_code[new_name] sql = """INSERT INTO alias_name VALUES('vertical_datum','%s','%s','%s','ESRI_OLD');""" % ( auth, code, escape_literal(old_name)) all_sql.append(sql) aliases = import_syn(path_to_objedit / "vertcs_syn.txt") for (new_name, old_name) in aliases: (auth, code) = map_vertcs_esri_name_to_auth_code[new_name] sql = """INSERT INTO alias_name VALUES('vertical_crs','%s','%s','%s','ESRI_OLD');""" % ( auth, code, escape_literal(old_name)) all_sql.append(sql) ######################## map_compoundcrs_esri_name_to_auth_code = {} def import_hvcoordsys(): with open(path_to_csv / 'pe_list_hvcoordsys.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 idx_areaname = header.index('areaname') assert idx_areaname >= 0 idx_slat = header.index('slat') assert idx_slat >= 0 idx_nlat = header.index('nlat') assert idx_nlat >= 0 idx_llon = header.index('llon') assert idx_llon >= 0 idx_rlon = header.index('rlon') assert idx_rlon >= 0 while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row code = row[idx_wkid] latestWkid = row[idx_latestWkid] authority = row[idx_authority] esri_name = row[idx_name] if authority == 'Esri' and code in ('9897',): # .csv file pretents this is a Esri code, but it is a EPSG one authority = 'EPSG' if authority == 'EPSG': map_compoundcrs_esri_name_to_auth_code[esri_name] = [ 'EPSG', latestWkid] cursor.execute( "SELECT name FROM compound_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row src_name = src_row[0] esri_name = row[idx_name] if src_name != esri_name: sql = """INSERT INTO alias_name VALUES('compound_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(esri_name)) all_sql.append(sql) old_esri_name = get_old_esri_name(esri_name) if old_esri_name != esri_name: sql = """INSERT INTO alias_name VALUES('compound_crs','EPSG','%s','%s','ESRI');""" % ( code, escape_literal(old_esri_name)) all_sql.append(sql) else: assert False, row # no ESRI specific entries at that time ! aliases = import_syn(path_to_objedit / "hvcoordsys_syn.txt") for (new_name, old_name) in aliases: (auth, code) = map_compoundcrs_esri_name_to_auth_code[new_name] sql = """INSERT INTO alias_name VALUES('compound_crs','%s','%s','%s','ESRI_OLD');""" % ( auth, code, escape_literal(old_name)) all_sql.append(sql) ######################## def get_parameter(wkt, param_name): needle = ',PARAMETER["' + param_name + '",' pos = wkt.find(needle) assert pos >= 0, wkt pos += len(needle) end_pos = wkt[pos:].find(']') assert end_pos >= 0, (wkt, wkt[pos:]) end_pos += pos return wkt[pos:end_pos] def import_geogtran(): with open(path_to_csv / 'pe_list_geogtran.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) nfields = len(header) idx_wkid = header.index('wkid') assert idx_wkid >= 0 idx_latestWkid = header.index('latestWkid') assert idx_latestWkid >= 0 idx_name = header.index('name') assert idx_name >= 0 idx_description = header.index('description') assert idx_description >= 0 idx_wkt = header.index('wkt') assert idx_wkt >= 0 idx_wkt2 = header.index('wkt2') assert idx_wkt2 >= 0 idx_authority = header.index('authority') assert idx_authority >= 0 idx_deprecated = header.index('deprecated') assert idx_deprecated >= 0 idx_areaname = header.index('areaname') assert idx_areaname >= 0 idx_slat = header.index('slat') assert idx_slat >= 0 idx_nlat = header.index('nlat') assert idx_nlat >= 0 idx_llon = header.index('llon') assert idx_llon >= 0 idx_rlon = header.index('rlon') assert idx_rlon >= 0 idx_accuracy = header.index('accuracy') assert idx_accuracy >= 0 while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row wkid = row[idx_wkid] authority = row[idx_authority] esri_name = row[idx_name] wkt2 = row[idx_wkt2] deprecated = 1 if row[idx_deprecated] == 'yes' else 0 if authority == 'EPSG': map_compoundcrs_esri_name_to_auth_code[esri_name] = [ 'EPSG', wkid] cursor.execute( "SELECT name, table_name FROM coordinate_operation_view WHERE auth_name = 'EPSG' AND code = ?", (wkid,)) src_row = cursor.fetchone() if not src_row: if 'Molodensky_Badekas' in wkt2: # print('Skipping GEOGTRAN %s (EPSG source) since it uses a non-supported yet supported method'% esri_name) assert False # no longer present in db if 'NADCON5' in wkt2: print('Skipping NADCON5 %s (EPSG source) since it uses a non-supported yet supported method' % esri_name) continue assert src_row, row _, table_name = src_row # Insert alias sql = f"INSERT INTO \"alias_name\" VALUES('{table_name}','EPSG',{wkid},'{esri_name}','ESRI');" all_sql.append(sql) else: # We don't want to import ESRI deprecated transformations # (there are a lot), do we ? if deprecated: # print('Skipping deprecated GEOGTRAN %s' % esri_name) continue parsed_wkt2 = parse_wkt_array(wkt2) assert 'COORDINATEOPERATION' in parsed_wkt2 src_crs_name = parsed_wkt2['COORDINATEOPERATION'][1]['SOURCECRS']['GEOGCRS'][0] dst_crs_name = parsed_wkt2['COORDINATEOPERATION'][1]['TARGETCRS']['GEOGCRS'][0] assert src_crs_name in map_geogcs_esri_name_to_auth_code, ( src_crs_name, row) src_crs_auth_name, src_crs_code = map_geogcs_esri_name_to_auth_code[src_crs_name] assert dst_crs_name in map_geogcs_esri_name_to_auth_code, ( dst_crs_name, row) dst_crs_auth_name, dst_crs_code = map_geogcs_esri_name_to_auth_code[dst_crs_name] method = parsed_wkt2['COORDINATEOPERATION'][1]['METHOD'] is_longitude_rotation = method == "Longitude_Rotation" if is_longitude_rotation: # skip it as it is automatically handled by PROJ continue is_cf = method == "Coordinate_Frame" is_pv = method == "Position_Vector" is_geocentric_translation = method == "Geocentric_Translation" is_geog2d_offset = method == "Geographic_2D_Offset" is_null = method == "Null" is_unitchange = method == "Unit_Change" is_nadcon = method == "NADCON" is_ntv2 = method == "NTv2" is_geocon = method == "GEOCON" is_harn = method == "HARN" is_molodensky_badekas = method == "Molodensky_Badekas" is_Time_Based_Helmert_Position_Vector = method == "Time_Based_Helmert_Position_Vector" is_Time_Based_Helmert_Coordinate_Frame = method == "Time_Based_Helmert_Coordinate_Frame" assert is_cf or is_pv or is_geocentric_translation or is_molodensky_badekas or is_nadcon or is_geog2d_offset or is_ntv2 or is_geocon or is_null or is_harn or is_unitchange or is_Time_Based_Helmert_Position_Vector or is_Time_Based_Helmert_Coordinate_Frame, row extent_auth_name, extent_code = find_extent( row[idx_areaname], row[idx_slat], row[idx_nlat], row[idx_llon], row[idx_rlon]) accuracy = row[idx_accuracy] if float(accuracy) == 999: accuracy = 'NULL' if is_cf or is_pv: x = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][0] x_axis_translation_unit = get_wkt_unit(*parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][1]['LENGTHUNIT']) y = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][0] y_axis_translation_unit = get_wkt_unit(*parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][1]['LENGTHUNIT']) z = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][0] z_axis_translation_unit = get_wkt_unit(*parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][1]['LENGTHUNIT']) assert x_axis_translation_unit.uom_auth_name == y_axis_translation_unit.uom_auth_name == z_axis_translation_unit.uom_auth_name, 'Cannot handle different translation axis authorities' assert x_axis_translation_unit.uom_code == y_axis_translation_unit.uom_code == z_axis_translation_unit.uom_code, 'Cannot handle different translation axis unit codes' rx = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation'][0] x_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation'][1]['ANGLEUNIT']) ry = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation'][0] y_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation'][1]['ANGLEUNIT']) rz = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation'][0] z_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation'][1]['ANGLEUNIT']) assert x_axis_rotation_unit.uom_auth_name == y_axis_rotation_unit.uom_auth_name == z_axis_rotation_unit.uom_auth_name, 'Cannot handle different rotation axis authorities' assert x_axis_rotation_unit.uom_code == y_axis_rotation_unit.uom_code == z_axis_rotation_unit.uom_code, 'Cannot handle different rotation axis unit codes' s = parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference'][0] scale_difference_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference'][1]['SCALEUNIT']) if is_cf: method_code = '9607' method_name = 'Coordinate Frame rotation (geog2D domain)' else: method_code = '9606' method_name = 'Position Vector transformation (geog2D domain)' sql = "INSERT INTO \"helmert_transformation\" VALUES('ESRI','{code}','{name}',NULL,'EPSG','{method_code}','{method_name}','{source_crs_auth_name}'," \ "'{source_crs_code}','{target_crs_auth_name}','{target_crs_code}',{accuracy},{tx},{ty},{tz},'{translation_uom_auth_name}','{translation_uom_code}'," \ "{rx},{ry},{rz},'{rotation_uom_auth_name}','{rotation_uom_code}',{scale_difference},'{scale_difference_uom_auth_name}','{scale_difference_uom_code}'," \ "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,{deprecated});".format( code=wkid, name=esri_name, method_code=method_code, method_name=method_name, source_crs_auth_name=src_crs_auth_name, source_crs_code=src_crs_code, target_crs_auth_name=dst_crs_auth_name, target_crs_code=dst_crs_code, accuracy=accuracy, tx=x, ty=y, tz=z, translation_uom_auth_name=x_axis_translation_unit.uom_auth_name, translation_uom_code=x_axis_translation_unit.uom_code, rx=rx, ry=ry, rz=rz, rotation_uom_auth_name=x_axis_rotation_unit.uom_auth_name, rotation_uom_code=x_axis_rotation_unit.uom_code, scale_difference=s, scale_difference_uom_auth_name=scale_difference_unit.uom_auth_name, scale_difference_uom_code=scale_difference_unit.uom_code, deprecated=deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','helmert_transformation','ESRI','%s','%s','%s','%s','%s');""" % (wkid, wkid, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) elif is_molodensky_badekas: x = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][0] x_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][1]['LENGTHUNIT']) y = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][0] y_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][1]['LENGTHUNIT']) z = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][0] z_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][1]['LENGTHUNIT']) assert x_axis_translation_unit.uom_auth_name == y_axis_translation_unit.uom_auth_name == z_axis_translation_unit.uom_auth_name, 'Cannot handle different translation axis authorities' assert x_axis_translation_unit.uom_code == y_axis_translation_unit.uom_code == z_axis_translation_unit.uom_code, 'Cannot handle different translation axis unit codes' rx = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation'][0] x_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation'][1]['ANGLEUNIT']) ry = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation'][0] y_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation'][1]['ANGLEUNIT']) rz = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation'][0] z_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation'][1]['ANGLEUNIT']) assert x_axis_rotation_unit.uom_auth_name == y_axis_rotation_unit.uom_auth_name == z_axis_rotation_unit.uom_auth_name, 'Cannot handle different rotation axis authorities' assert x_axis_rotation_unit.uom_code == y_axis_rotation_unit.uom_code == z_axis_rotation_unit.uom_code, 'Cannot handle different rotation axis unit codes' s = parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference'][0] scale_difference_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference'][1]['SCALEUNIT']) px = parsed_wkt2['COORDINATEOPERATION'][1]['X_Coordinate_of_Rotation_Origin'][0] x_coordinate_of_rotation_origin_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Coordinate_of_Rotation_Origin'][1]['LENGTHUNIT']) py = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Coordinate_of_Rotation_Origin'][0] y_coordinate_of_rotation_origin_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Coordinate_of_Rotation_Origin'][1]['LENGTHUNIT']) pz = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Coordinate_of_Rotation_Origin'][0] z_coordinate_of_rotation_origin_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Coordinate_of_Rotation_Origin'][1]['LENGTHUNIT']) assert x_coordinate_of_rotation_origin_unit.uom_auth_name == y_coordinate_of_rotation_origin_unit.uom_auth_name == z_coordinate_of_rotation_origin_unit.uom_auth_name, 'Cannot handle different coordinate of rotation axis authorities' assert x_coordinate_of_rotation_origin_unit.uom_code == y_coordinate_of_rotation_origin_unit.uom_code == z_coordinate_of_rotation_origin_unit.uom_code, 'Cannot handle different coordinate of rotation axis unit codes' # The ESRI naming is not really clear about the convention # but it looks like it is Coordinate Frame when comparing ESRI:1066 (Amersfoort_To_ETRS_1989_MB) with EPSG:1066 method_code = '9636' method_name = 'Molodensky-Badekas (CF geog2D domain)' sql = "INSERT INTO \"helmert_transformation\" VALUES('ESRI','{code}','{name}',NULL,'EPSG','{method_code}','{method_name}'," \ "'{source_crs_auth_name}','{source_crs_code}','{target_crs_auth_name}','{target_crs_code}',{accuracy},{tx},{ty},{tz}," \ "'{translation_uom_auth_name}','{translation_uom_code}',{rx},{ry},{rz},'{rotation_uom_auth_name}','{rotation_uom_code}'," \ "{scale_difference},'{scale_difference_uom_auth_name}','{scale_difference_uom_code}',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," \ "NULL,NULL,NULL,NULL,{px},{py},{pz},'{pivot_uom_auth_name}','{pivot_uom_code}',NULL,{deprecated});".format( code=wkid, name=esri_name, method_code=method_code, method_name=method_name, source_crs_auth_name=src_crs_auth_name, source_crs_code=src_crs_code, target_crs_auth_name=dst_crs_auth_name, target_crs_code=dst_crs_code, accuracy=accuracy, tx=x, ty=y, tz=z, translation_uom_auth_name=x_axis_translation_unit.uom_auth_name, translation_uom_code=x_axis_translation_unit.uom_code, rx=rx, ry=ry, rz=rz, rotation_uom_auth_name=x_axis_rotation_unit.uom_auth_name, rotation_uom_code=x_axis_rotation_unit.uom_code, scale_difference=s, scale_difference_uom_auth_name=scale_difference_unit.uom_auth_name, scale_difference_uom_code=scale_difference_unit.uom_code, px=px, py=py, pz=pz, pivot_uom_auth_name=x_coordinate_of_rotation_origin_unit.uom_auth_name, pivot_uom_code=x_coordinate_of_rotation_origin_unit.uom_code, deprecated=deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','helmert_transformation','ESRI','%s','%s','%s','%s','%s');""" % (wkid, wkid, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) elif is_geocentric_translation: x = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][0] x_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][1]['LENGTHUNIT']) y = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][0] y_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][1]['LENGTHUNIT']) z = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][0] z_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][1]['LENGTHUNIT']) assert x_axis_translation_unit.cs.auth_name == y_axis_translation_unit.cs.auth_name == z_axis_translation_unit.cs.auth_name, 'Cannot handle different translation axis authorities' assert x_axis_translation_unit.uom_code == y_axis_translation_unit.uom_code == z_axis_translation_unit.uom_code, 'Cannot handle different translation axis unit codes' method_code = '9603' method_name = 'Geocentric translations (geog2D domain)' sql = "INSERT INTO \"helmert_transformation\" VALUES('ESRI','{code}','{name}',NULL,'EPSG','{method_code}','{method_name}','{source_crs_auth_name}'," \ "'{source_crs_code}','{target_crs_auth_name}','{target_crs_code}',{accuracy},{tx},{ty},{tz},'{translation_uom_auth_name}','{translation_uom_code}',"\ "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," \ "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,{deprecated});".format( code=wkid, name=esri_name, method_code=method_code, method_name=method_name, source_crs_auth_name=src_crs_auth_name, source_crs_code=src_crs_code, target_crs_auth_name=dst_crs_auth_name, target_crs_code=dst_crs_code, accuracy=accuracy, tx=x, ty=y, tz=z, translation_uom_auth_name=x_axis_translation_unit.uom_auth_name, translation_uom_code=x_axis_translation_unit.uom_code, deprecated=deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','helmert_transformation','ESRI','%s','%s','%s','%s','%s');""" % (wkid, wkid, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) elif is_Time_Based_Helmert_Position_Vector or is_Time_Based_Helmert_Coordinate_Frame: x = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][0] x_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation'][1]['LENGTHUNIT']) y = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][0] y_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation'][1]['LENGTHUNIT']) z = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][0] z_axis_translation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation'][1]['LENGTHUNIT']) assert x_axis_translation_unit.uom_auth_name == y_axis_translation_unit.uom_auth_name == z_axis_translation_unit.uom_auth_name, 'Cannot handle different translation axis authorities' assert x_axis_translation_unit.uom_code == y_axis_translation_unit.uom_code == z_axis_translation_unit.uom_code, 'Cannot handle different translation axis unit codes' rx = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation'][0] x_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation'][1]['ANGLEUNIT']) ry = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation'][0] y_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation'][1]['ANGLEUNIT']) rz = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation'][0] z_axis_rotation_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation'][1]['ANGLEUNIT']) assert x_axis_rotation_unit.uom_auth_name == y_axis_rotation_unit.uom_auth_name == z_axis_rotation_unit.uom_auth_name, 'Cannot handle different rotation axis authorities' assert x_axis_rotation_unit.uom_code == y_axis_rotation_unit.uom_code == z_axis_rotation_unit.uom_code, 'Cannot handle different rotation axis unit codes' s = parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference'][0] scale_difference_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference'][1]['SCALEUNIT']) rate_x = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation_Rate'][0] x_axis_translation_rate_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Translation_Rate'][1]['LENGTHUNIT'], is_rate=True) rate_y = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation_Rate'][0] y_axis_translation_rate_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Translation_Rate'][1]['LENGTHUNIT'], is_rate=True) rate_z = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation_Rate'][0] z_axis_translation_rate_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Translation_Rate'][1]['LENGTHUNIT'], is_rate=True) assert x_axis_translation_rate_unit.uom_auth_name == y_axis_translation_rate_unit.uom_auth_name == z_axis_translation_rate_unit.uom_auth_name, 'Cannot handle different translation rate axis authorities' assert x_axis_translation_rate_unit.uom_code == y_axis_translation_rate_unit.uom_code == z_axis_translation_rate_unit.uom_code, 'Cannot handle different translation rate axis unit codes' rate_rx = parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation_Rate'][0] x_axis_rotation_rate_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['X_Axis_Rotation_Rate'][1]['ANGLEUNIT'], is_rate=True) rate_ry = parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation_Rate'][0] y_axis_rotation_rate_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Y_Axis_Rotation_Rate'][1]['ANGLEUNIT'], is_rate=True) rate_rz = parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation_Rate'][0] z_axis_rotation_rate_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Z_Axis_Rotation_Rate'][1]['ANGLEUNIT'], is_rate=True) assert x_axis_rotation_rate_unit.uom_auth_name == y_axis_rotation_rate_unit.uom_auth_name == z_axis_rotation_rate_unit.uom_auth_name, 'Cannot handle different rotation rate axis authorities' assert x_axis_rotation_rate_unit.uom_code == y_axis_rotation_rate_unit.uom_code == z_axis_rotation_rate_unit.uom_code, 'Cannot handle different rotation rate axis unit codes' rate_s = parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference_Rate'][0] scale_difference_rate_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Scale_Difference_Rate'][1]['SCALEUNIT'], is_rate=True) reference_time = parsed_wkt2['COORDINATEOPERATION'][1]['Reference_Time'][0] reference_time_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Reference_Time'][1]['SCALEUNIT']) if reference_time_unit.uom_auth_name == 'EPSG' and reference_time_unit.uom_code == '9201': # convert "Unity" values for Reference_Time to "years". The helmert_transformation table requires # a time type uom for epochs reference_time_unit.uom_code = '1029' if is_Time_Based_Helmert_Coordinate_Frame: method_code = '1057' method_name = 'Time-dependent Coordinate Frame rotation (geog2D)' else: method_code = '1054' method_name = 'Time-dependent Position Vector tfm (geog2D)' sql = "INSERT INTO \"helmert_transformation\" VALUES('ESRI','{code}','{name}',NULL,'EPSG','{method_code}','{method_name}'," \ "'{source_crs_auth_name}','{source_crs_code}','{target_crs_auth_name}','{target_crs_code}'," \ "{accuracy},{tx},{ty},{tz},'{translation_uom_auth_name}','{translation_uom_code}'," \ "{rx},{ry},{rz},'{rotation_uom_auth_name}','{rotation_uom_code}',{scale_difference}," \ "'{scale_difference_uom_auth_name}','{scale_difference_uom_code}',{rate_tx},{rate_ty},{rate_tz}," \ "'{rate_translation_uom_auth_name}','{rate_translation_uom_code}',{rate_rx},{rate_ry},{rate_rz}," \ "'{rate_rotation_uom_auth_name}','{rate_rotation_uom_code}',{rate_scale_difference},"\ "'{rate_scale_difference_uom_auth_name}','{rate_scale_difference_uom_code}',{epoch},"\ "'{epoch_uom_auth_name}','{epoch_uom_code}',NULL,NULL,NULL,NULL,NULL,NULL,{deprecated});".format( code=wkid, name=esri_name, method_code=method_code, method_name=method_name, source_crs_auth_name=src_crs_auth_name, source_crs_code=src_crs_code, target_crs_auth_name=dst_crs_auth_name, target_crs_code=dst_crs_code, accuracy=accuracy, tx=x, ty=y, tz=z, translation_uom_auth_name=x_axis_translation_unit.uom_auth_name, translation_uom_code=x_axis_translation_unit.uom_code, rx=rx, ry=ry, rz=rz, rotation_uom_auth_name=x_axis_rotation_unit.uom_auth_name, rotation_uom_code=x_axis_rotation_unit.uom_code, scale_difference=s, scale_difference_uom_auth_name=scale_difference_unit.uom_auth_name, scale_difference_uom_code=scale_difference_unit.uom_code, rate_tx=rate_x, rate_ty=rate_y, rate_tz=rate_z, rate_translation_uom_auth_name=x_axis_translation_rate_unit.uom_auth_name, rate_translation_uom_code=x_axis_translation_rate_unit.uom_code, rate_rx=rate_rx, rate_ry=rate_ry, rate_rz=rate_rz, rate_rotation_uom_auth_name=x_axis_rotation_rate_unit.uom_auth_name, rate_rotation_uom_code=x_axis_rotation_rate_unit.uom_code, rate_scale_difference=rate_s, rate_scale_difference_uom_auth_name=scale_difference_rate_unit.uom_auth_name, rate_scale_difference_uom_code=scale_difference_rate_unit.uom_code, epoch=reference_time, epoch_uom_auth_name=reference_time_unit.uom_auth_name, epoch_uom_code=reference_time_unit.uom_code, deprecated=deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','helmert_transformation','ESRI','%s','%s','%s','%s','%s');""" % (wkid, wkid, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) elif is_geog2d_offset: # The only occurrence is quite boring: from NTF(Paris) to NTF. # But interestingly the longitude offset value is not # completely exactly the value of the Paris prime meridian long_offset = parsed_wkt2['COORDINATEOPERATION'][1]['Longitude_Offset'][0] longitude_offset_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Longitude_Offset'][1]['ANGLEUNIT']) lat_offset = parsed_wkt2['COORDINATEOPERATION'][1]['Latitude_Offset'][0] latitude_offset_unit = get_wkt_unit( *parsed_wkt2['COORDINATEOPERATION'][1]['Latitude_Offset'][1]['ANGLEUNIT']) sql = "INSERT INTO \"other_transformation\" VALUES('ESRI','{code}','{name}',NULL,'EPSG','9619','Geographic2D offsets',"\ "'{source_crs_auth_name}','{source_crs_code}','{target_crs_auth_name}','{target_crs_code}',{accuracy},"\ "'EPSG','8601','Latitude offset',{param1_value},'{param1_uom_auth_name}','{param1_uom_code}'," \ "'EPSG','8602','Longitude offset',{param2_value},'{param2_uom_auth_name}','{param2_uom_code}',NULL,NULL,NULL,NULL,NULL,NULL,"\ "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"\ "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,{deprecated});".format( code=wkid, name=esri_name, source_crs_auth_name=src_crs_auth_name, source_crs_code=src_crs_code, target_crs_auth_name=dst_crs_auth_name, target_crs_code=dst_crs_code, accuracy=accuracy, param1_value=lat_offset, param1_uom_auth_name=latitude_offset_unit.uom_auth_name, param1_uom_code=latitude_offset_unit.uom_code, param2_value=long_offset, param2_uom_auth_name=longitude_offset_unit.uom_auth_name, param2_uom_code=longitude_offset_unit.uom_code, deprecated=deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','other_transformation','ESRI','%s','%s','%s','%s','%s');""" % (wkid, wkid, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) elif is_null: long_offset = '0' lat_offset = '0' assert set(parsed_wkt2['COORDINATEOPERATION'][1].keys()) == {'SOURCECRS', 'METHOD', 'TARGETCRS', 'OPERATIONACCURACY'}, set(parsed_wkt2['COORDINATEOPERATION'][1].keys()) sql = """INSERT INTO "other_transformation" VALUES('ESRI','%s','%s',NULL,'EPSG','9619','Geographic2D offsets','%s','%s','%s','%s',%s,'EPSG','8601','Latitude offset',%s,'EPSG','9104','EPSG','8602','Longitude offset',%s,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,%d);""" % ( wkid, esri_name, src_crs_auth_name, src_crs_code, dst_crs_auth_name, dst_crs_code, accuracy, lat_offset, long_offset, deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','other_transformation','ESRI','%s','%s','%s','%s','%s');""" % (wkid, wkid, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) elif is_unitchange: # Automatically handled by PROJ. Not worth importing continue else: assert set(k for k in parsed_wkt2['COORDINATEOPERATION'][1].keys() if k != 'OPERATIONACCURACY') == {'SOURCECRS', 'METHOD', 'TARGETCRS', 'PARAMETERFILE'}, set(parsed_wkt2['COORDINATEOPERATION'][1].keys()) filename = parsed_wkt2['COORDINATEOPERATION'][1]['PARAMETERFILE'] cursor.execute( "SELECT g.name, g.grid_name FROM grid_transformation g JOIN usage u ON u.object_table_name = 'grid_transformation' AND u.object_auth_name = g.auth_name AND u.object_code = g.code JOIN extent e ON u.extent_auth_name = e.auth_name AND u.extent_code = e.code WHERE g.auth_name != 'ESRI' AND g.source_crs_auth_name = ? AND g.source_crs_code = ? AND g.target_crs_auth_name = ? AND g.target_crs_code = ? AND e.auth_name = ? AND e.code = ?", (src_crs_auth_name, src_crs_code, dst_crs_auth_name, dst_crs_code, extent_auth_name, extent_code)) src_row = cursor.fetchone() if src_row: print('A grid_transformation (%s, using grid %s) is already known for the equivalent of %s (%s:%s --> %s:%s) for area %s, which uses grid %s. Skipping it' % (src_row[0], src_row[1], esri_name, src_crs_auth_name, src_crs_code, dst_crs_auth_name, dst_crs_code, row[idx_areaname], filename)) continue sql = """INSERT INTO "grid_transformation" VALUES('ESRI','%s','%s',NULL,'EPSG','9615','NTv2','%s','%s','%s','%s',%s,'EPSG','8656','Latitude and longitude difference file','%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,%d);""" % ( wkid, esri_name, src_crs_auth_name, src_crs_code, dst_crs_auth_name, dst_crs_code, accuracy, filename, deprecated) all_sql.append(sql) sql = """INSERT INTO "usage" VALUES('ESRI', '%s_USAGE','grid_transformation','ESRI','%s','%s','%s','%s','%s');""" % (wkid, wkid, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) global manual_grids if ("'" + filename + "'") not in manual_grids: print('not handled grid: ' + filename) manual_grids += "-- '" + filename + "': no mapping\n" import_linunit() import_spheroid() import_prime_meridian() import_datum() import_geogcs() import_projcs() import_vdatum() import_vertcs() import_hvcoordsys() # compoundcrs import_geogtran() # transformations between GeogCRS script_dir_name = os.path.dirname(os.path.realpath(__file__)) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') f = open(os.path.join(sql_dir_name, 'esri') + '.sql', 'wb') f.write("--- This file has been generated by scripts/build_db_from_esri.py. DO NOT EDIT !\n\n".encode('UTF-8')) for sql in all_sql: f.write((sql + '\n').encode('UTF-8')) f.write(manual_grids.encode('UTF-8')) f.close() print('') print('Finished !') print('NOTE: adding into metadata: ESRI.VERSION = %s. Update if needed !' % version) proj-9.6.0/scripts/build_db_from_iau.py000775 001754 001755 00000044437 14764566077 020126 0ustar00e012349e012349000000 000000 #!/usr/bin/env python # SPDX-License-Identifier: MIT # Copyright (c) 2021, Hobu Inc # Author: Even Rouault, import csv import os from pathlib import Path script_dir_name = os.path.dirname(os.path.realpath(__file__)) all_sql = [] AUTH_IAU2015 = 'IAU_2015' all_sql.append("INSERT INTO coordinate_system VALUES('PROJ','OCENTRIC_LAT_LON','spherical',2);") all_sql.append("INSERT INTO axis VALUES('PROJ','OCENTRIC_LAT_LON_LAT','Planetocentric latitude','U','north','PROJ','OCENTRIC_LAT_LON',1,'EPSG','9122');"); all_sql.append("INSERT INTO axis VALUES('PROJ','OCENTRIC_LAT_LON_LON','Planetocentric longitude','V','east','PROJ','OCENTRIC_LAT_LON',2,'EPSG','9122');"); all_sql.append("INSERT INTO coordinate_system VALUES('PROJ','OGRAPHIC_NORTH_WEST','ellipsoidal',2);") all_sql.append("INSERT INTO axis VALUES('PROJ','OGRAPHIC_NORTH_WEST_LAT','Geodetic latitude','Lat','north','PROJ','OGRAPHIC_NORTH_WEST',1,'EPSG','9122');"); all_sql.append("INSERT INTO axis VALUES('PROJ','OGRAPHIC_NORTH_WEST_LON','Geodetic longitude','Lon','west','PROJ','OGRAPHIC_NORTH_WEST',2,'EPSG','9122');"); all_sql.append("INSERT INTO coordinate_system VALUES('PROJ','PROJECTED_WEST_NORTH','Cartesian',2);") all_sql.append("INSERT INTO axis VALUES('PROJ','PROJECTED_WEST_NORTH_W','Westing','W','west','PROJ','PROJECTED_WEST_NORTH',1,'EPSG','9001');"); all_sql.append("INSERT INTO axis VALUES('PROJ','PROJECTED_WEST_NORTH_N','Northing','N','north','PROJ','PROJECTED_WEST_NORTH',2,'EPSG','9001');"); SOURCE_IAU = "Source of IAU Coordinate systems: https://doi.org/10.1007/s10569-017-9805-5" def get_longitude_positive_direction(Body, Naif_id, rotation): """Define the positive longitudes in ographic CRS based on the rotation sens. The general rule is the following: * Direct rotation has longitude positive to West * Retrograde rotation has longitude positive to East A special case is done for Sun/Earth/Moon for historical reasons for which longitudes are positive to East independently of the rotation sens Another special case is that longitude ographic is always to East for small bodies, comets, dwarf planets (Naif_id >= 900) """ if rotation == 'Direct': direction = 'west' elif rotation == 'Retrograde': direction = 'east' elif rotation == '': direction = '' else: assert False, rotation if Body in ('Sun', 'Moon', 'Earth'): direction = 'east' if Naif_id >= 900: direction = 'east' return direction def add_usage(table_name, code): if table_name == 'geodetic_datum': prefix = 'GD' elif table_name == 'geodetic_crs': prefix = 'GCRS' elif table_name == 'projected_crs': prefix = 'PCRS' elif table_name == 'conversion': prefix = 'CONV' else: assert False all_sql.append("INSERT INTO usage VALUES('%s','%s_%d','%s','%s',%d,'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');" % (AUTH_IAU2015, prefix, code, table_name, AUTH_IAU2015, code)) projection_data = [ [10, "Equirectangular, clon = 0", "Equidistant Cylindrical", "Latitude of 1st standard parallel", 0, "Longitude of natural origin", 0, "False easting", 0, "False northing", 0, None, None, None, None], [15, "Equirectangular, clon = 180", "Equidistant Cylindrical", "Latitude of 1st standard parallel", 0, "Longitude of natural origin", 180, "False easting", 0, "False northing", 0, None, None, None, None], [20, "Sinusoidal, clon = 0", "Sinusoidal", "Longitude of natural origin", 0, "False easting", 0, "False northing", 0,None, None, None, None, None, None], [25, "Sinusoidal, clon = 180", "Sinusoidal", "Longitude of natural origin", 180, "False easting", 0, "False northing", 0, None, None, None, None, None, None], [30, "North Polar", "Polar Stereographic (variant A)", "Latitude of natural origin", 90, "Longitude of natural origin", 0, "Scale factor at natural origin", 1, "False easting", 0, "False northing", 0, None, None], [35, "South Polar", "Polar Stereographic (variant A)", "Latitude of natural origin", -90, "Longitude of natural origin", 0, "Scale factor at natural origin", 1, "False easting", 0, "False northing", 0, None, None], [40, "Mollweide, clon = 0", "Mollweide", "Longitude of natural origin", 0, "False easting", 0, "False northing", 0, None, None, None, None, None, None], [45, "Mollweide, clon = 180", "Mollweide", "Longitude of natural origin", 180, "False easting", 0, "False northing", 0, None, None, None, None, None, None], [50, "Robinson, clon = 0", "Robinson", "Longitude of natural origin", 0, "False easting", 0, "False northing", 0, None, None, None, None, None, None], [55, "Robinson, clon = 180", "Robinson", "Longitude of natural origin", 180, "False easting", 0, "False northing", 0, None, None, None, None, None, None], [60, "Transverse Mercator", "Transverse Mercator", "Latitude of natural origin", 0, "Longitude of natural origin", 0, "Scale factor at natural origin", 1.0, "False easting", 0, "False northing", 0, None, None], [65, "Orthographic, clon = 0", "Orthographic", "Latitude of natural origin", 0, "Longitude of natural origin", 0, "False easting", 0, "False northing", 0, None, None, None, None], [70, "Orthographic, clon = 180", "Orthographic", "Latitude of natural origin", 0, "Longitude of natural origin", 180, "False easting", 0, "False northing", 0, None, None, None, None], [75, "Lambert Conic Conformal", "Lambert Conic Conformal (2SP)", "Latitude of false origin", 40, "Longitude of false origin", 0, "Latitude of 1st standard parallel", 20, "Latitude of 2nd standard parallel", 60, "Easting at false origin", 0, "Northing at false origin", 0], [80, "Lambert Azimuthal Equal Area", "Lambert Azimuthal Equal Area", "Latitude of natural origin", 40, "Longitude of natural origin", 0, "False easting", 0, "False northing", 0, None, None, None, None], [85, "Albers Equal Area", "Albers Equal Area", "Latitude of false origin", 40,"Longitude of false origin", 0, "Latitude of 1st standard parallel", 20, "Latitude of 2nd standard parallel", 60, "Easting at false origin", 0, "Northing at false origin", 0], [90, "Mercator", "Mercator (Spherical)", "Latitude of natural origin", 0, "Longitude of natural origin", 0, "False easting", 0, "False northing", 0, None, None, None, None], ] method_and_param_mapping = { "Lambert Azimuthal Equal Area (Spherical)" : ["EPSG", 1027], "Equidistant Cylindrical" : ["EPSG", 1028], "Equidistant Cylindrical (Spherical)": ["EPSG", 1029], "Scale factor at natural origin": ["EPSG", 8805, "SCALEUNIT[\"unity\",1.0, ID[\"EPSG\", 9201]]"], "False easting": ["EPSG", 8806, "LENGTHUNIT[\"metre\", 1, ID[\"EPSG\", 9001]]"], "False northing": ["EPSG", 8807, "LENGTHUNIT[\"metre\", 1, ID[\"EPSG\", 9001]]"], "Latitude of natural origin": ["EPSG", 8801, "ANGLEUNIT[\"degree\", 0.017453292519943295, ID[\"EPSG\", 9122]]"], "Longitude of natural origin": ["EPSG", 8802, "ANGLEUNIT[\"degree\", 0.017453292519943295, ID[\"EPSG\", 9122]]"], "Latitude of false origin": ["EPSG", 8821, "ANGLEUNIT[\"degree\", 0.017453292519943295, ID[\"EPSG\", 9122]]"], "Longitude of false origin": ["EPSG", 8822, "ANGLEUNIT[\"degree\", 0.017453292519943295, ID[\"EPSG\", 9122]]"], "Latitude of 1st standard parallel": ["EPSG", 8823, "ANGLEUNIT[\"degree\", 0.017453292519943295, ID[\"EPSG\", 9122]]"], "Latitude of 2nd standard parallel": ["EPSG", 8824, "ANGLEUNIT[\"degree\", 0.017453292519943295, ID[\"EPSG\", 9122]]"], "Easting at false origin": ["EPSG", 8826, "LENGTHUNIT[\"metre\", 1, ID[\"EPSG\", 9001]]"], "Northing at false origin": ["EPSG", 8827, "LENGTHUNIT[\"metre\", 1, ID[\"EPSG\", 9001]]"], "Sinusoidal": ["PROJ", 'SINUSOIDAL'], "Robinson" : ["PROJ", 'ROBINSON'], "Mollweide" : ["PROJ", 'MOLLWEIDE'], "Transverse Mercator" : ["EPSG",9807], "Lambert Conic Conformal (2SP)": ["EPSG", 9802], "Polar Stereographic (variant A)": ["EPSG", 9810], "Lambert Azimuthal Equal Area": ["EPSG", 9820], "Albers Equal Area" : ["EPSG", 9822], "Orthographic" : ["EPSG", 9840], "Mercator (Spherical)": ["EPSG", 1026] } def append_proj_paramater(name, value): if name is None: return ',NULL,NULL,NULL,NULL,NULL,NULL' sql = ',' + "'%s'" % method_and_param_mapping[name][0] sql += ',' + "'%s'" %str(method_and_param_mapping[name][1]) sql += ',' + "'%s'" % name sql += ',' + str(value) sql += ",'EPSG'" if 'unity' in method_and_param_mapping[name][2]: sql += ',9201' elif 'degree' in method_and_param_mapping[name][2]: sql += ',9122' elif 'metre' in method_and_param_mapping[name][2]: sql += ',9001' else: assert False return sql for row in projection_data: conv_code, conv_name, method_name, p1n, p1v, p2n, p2v, p3n, p3v, p4n, p4v, p5n, p5v, p6n, p6v = row method_auth = method_and_param_mapping[method_name][0] method_code = str(method_and_param_mapping[method_name][1]) sql = "INSERT INTO conversion VALUES ('%s',%d,'%s','','%s','%s','%s'" % (AUTH_IAU2015, conv_code, conv_name, method_auth, method_code, method_name) sql += append_proj_paramater(p1n, p1v) sql += append_proj_paramater(p2n, p2v) sql += append_proj_paramater(p3n, p3v) sql += append_proj_paramater(p4n, p4v) sql += append_proj_paramater(p5n, p5v) sql += append_proj_paramater(p6n, p6v) sql += append_proj_paramater(None, None) sql += ",0);" all_sql.append(sql) add_usage('conversion', conv_code) def generate_projected_crs(geod_crs_code, geod_crs_name, is_west): for row in projection_data: conv_code, conv_name, method_name, p1n, p1v, p2n, p2v, p3n, p3v, p4n, p4v, p5n, p5v, p6n, p6v = row pcrs_code = geod_crs_code + conv_code pcrs_name = geod_crs_name + ' / ' + conv_name if is_west: cs_auth = 'PROJ' cs_code = 'PROJECTED_WEST_NORTH' else: cs_auth = 'EPSG' cs_code = '4400' all_sql.append("INSERT INTO projected_crs VALUES('%s',%d,'%s',NULL,'%s','%s','%s',%d,'%s',%d,NULL,0);" % (AUTH_IAU2015, pcrs_code, pcrs_name, cs_auth, cs_code, AUTH_IAU2015, geod_crs_code, AUTH_IAU2015, conv_code)) add_usage('projected_crs', pcrs_code) with open(Path(script_dir_name) / 'data/naifcodes_radii_m_wAsteroids_IAU2015.csv', 'rt') as csvfile: reader = csv.reader(csvfile) header = next(reader) assert header == ['Naif_id', 'Body', 'IAU2015_Mean', 'IAU2015_Semimajor', 'IAU2015_Axisb', 'IAU2015_Semiminor', 'rotation', 'origin_long_name', 'origin_lon_pos'] nfields = len(header) while True: try: row = next(reader) except StopIteration: break assert len(row) == nfields, row Naif_id, Body, IAU2015_Mean, IAU2015_Semimajor, IAU2015_Axisb, IAU2015_Semiminor, rotation, origin_long_name, origin_lon_pos = row Naif_id = int(Naif_id) IAU2015_Mean = float(IAU2015_Mean) IAU2015_Semimajor = float(IAU2015_Semimajor) IAU2015_Axisb = float(IAU2015_Axisb) IAU2015_Semiminor = float(IAU2015_Semiminor) all_axis_known_and_consistent = True if IAU2015_Mean <= 0: if IAU2015_Semimajor <= 0 or IAU2015_Axisb <= 0 or IAU2015_Semiminor <= 0: reason = 'Skip %s has it lacks all axis information' % Body print(reason) all_sql.append('-- ' + reason) continue elif IAU2015_Semimajor <= 0 or IAU2015_Axisb <= 0 or IAU2015_Semiminor <= 0: all_sql.append('-- %s lacks value for semimajor and/or axisb and/or semiminor. Only consider its mean value.' % Body) all_axis_known_and_consistent = False elif IAU2015_Semimajor < IAU2015_Axisb or IAU2015_Axisb < IAU2015_Semiminor: all_sql.append('-- %s has inconsistent values: semimajor < axisb or axis < semiminor. Only consider its mean value.' % Body) all_axis_known_and_consistent = False if all_axis_known_and_consistent: is_spherical = IAU2015_Semimajor == IAU2015_Axisb and IAU2015_Axisb == IAU2015_Semiminor is_triaxial = IAU2015_Semimajor != IAU2015_Axisb and IAU2015_Semiminor != IAU2015_Axisb else: is_spherical = False is_triaxial = True sphere_remark = '' if is_triaxial: if IAU2015_Mean <= 0: assert IAU2015_Semimajor > 0 assert IAU2015_Axisb > 0 assert IAU2015_Semiminor > 0 # Use R_m = (a+b+c)/3 as mean radius when mean radius is not defined ( = -1) sphere_radius = (IAU2015_Semimajor + IAU2015_Axisb + IAU2015_Semiminor) / 3 sphere_remark = "Use R_m = (a+b+c)/3 as mean radius. " else: sphere_radius = IAU2015_Mean sphere_remark += "Use mean radius as sphere radius for interoperability. " elif not is_spherical: # biaxial case assert IAU2015_Semimajor > 0 sphere_radius = IAU2015_Semimajor sphere_remark = "Use semi-major radius as sphere for interoperability. " else: assert IAU2015_Mean == IAU2015_Semimajor assert IAU2015_Semimajor > 0 sphere_radius = IAU2015_Mean sphere_remark += SOURCE_IAU all_sql.append("INSERT INTO celestial_body VALUES('%s', %d, '%s', %f);" % (AUTH_IAU2015, Naif_id, Body, sphere_radius)) prime_meridian_code = Naif_id * 100 all_sql.append("INSERT INTO prime_meridian VALUES('%s', %d, 'Reference Meridian', 0.0, 'EPSG', 9102, 0);" % (AUTH_IAU2015, prime_meridian_code)) anchor = 'NULL' if origin_long_name: if '.' not in origin_lon_pos: origin_lon_pos += '.0' anchor = "'%s: %s'" % (origin_long_name, origin_lon_pos) spherical_ellipsoid_code = Naif_id * 100 spherical_ellipsoid_name = '%s (2015) - Sphere' % Body all_sql.append("INSERT INTO ellipsoid VALUES('%s',%d,'%s',NULL,'%s',%d,%f,'EPSG','9001',NULL,%f,0);" % (AUTH_IAU2015, spherical_ellipsoid_code, spherical_ellipsoid_name, AUTH_IAU2015, Naif_id, sphere_radius, sphere_radius)) spherical_datum_code = spherical_ellipsoid_code spherical_datum_name = spherical_ellipsoid_name all_sql.append("INSERT INTO geodetic_datum VALUES('%s',%d,'%s','','%s',%d,'%s',%d,NULL,NULL,NULL,%s,NULL,0);" % (AUTH_IAU2015, spherical_datum_code, spherical_datum_name, AUTH_IAU2015, spherical_ellipsoid_code, AUTH_IAU2015, prime_meridian_code, anchor)) add_usage('geodetic_datum', spherical_datum_code) spherical_crs_code = Naif_id * 100 spherical_crs_name = '%s / Ocentric' % spherical_datum_name all_sql.append("INSERT INTO geodetic_crs VALUES('%s',%d,'%s','%s','geographic 2D','EPSG','6422','%s',%d,NULL,0);" % (AUTH_IAU2015, spherical_crs_code, spherical_crs_name, sphere_remark, AUTH_IAU2015, spherical_datum_code)) add_usage('geodetic_crs', spherical_crs_code) generate_projected_crs(spherical_crs_code, spherical_crs_name, False) if not all_axis_known_and_consistent: continue # Sun and Moon have only the Sphere Ocentric description if Body in ('Sun', 'Moon'): continue # Unsupported by PROJ if is_triaxial: continue direction = get_longitude_positive_direction(Body, Naif_id, rotation) has_ographic = direction != '' has_ocentric = True if is_spherical: # The ocentric CRS will be identical to the spherical ocentric one on a sphere has_ocentric = False # and if the ographic one is east oriented, it will also be redundant if direction == 'east': has_ographic = False if not has_ographic and not has_ocentric: continue ellipsoidal_ellipsoid_code = Naif_id * 100 + 1 ellipsoidal_ellipsoid_name = '%s (2015)' % Body all_sql.append("INSERT INTO ellipsoid VALUES('%s',%d,'%s',NULL,'%s',%d,%f,'EPSG','9001',NULL,%f,0);" % (AUTH_IAU2015, ellipsoidal_ellipsoid_code, ellipsoidal_ellipsoid_name, AUTH_IAU2015, Naif_id, IAU2015_Semimajor, IAU2015_Semiminor)) ellipsoidal_datum_code = ellipsoidal_ellipsoid_code ellipsoidal_datum_name = ellipsoidal_ellipsoid_name all_sql.append("INSERT INTO geodetic_datum VALUES('%s',%d,'%s','','%s',%d,'%s',%d,NULL,NULL,NULL,%s,NULL,0);" % (AUTH_IAU2015, ellipsoidal_datum_code, ellipsoidal_datum_name, AUTH_IAU2015, ellipsoidal_ellipsoid_code, AUTH_IAU2015, prime_meridian_code, anchor)) add_usage('geodetic_datum', ellipsoidal_datum_code) if has_ographic: # ographic crs_code = Naif_id * 100 + 1 crs_name = '%s / Ographic' % ellipsoidal_datum_name if direction == 'west': cs_auth = 'PROJ' cs_code = 'OGRAPHIC_NORTH_WEST' else: assert direction == 'east' cs_auth = 'EPSG' cs_code = '6422' all_sql.append("INSERT INTO geodetic_crs VALUES('%s',%d,'%s','%s','geographic 2D','%s','%s','%s',%d,NULL,0);" % (AUTH_IAU2015,crs_code, crs_name, SOURCE_IAU, cs_auth, cs_code, AUTH_IAU2015, ellipsoidal_datum_code)) add_usage('geodetic_crs', crs_code) generate_projected_crs(crs_code, crs_name, direction == 'west') if has_ocentric: # ocentric crs_code = Naif_id * 100 + 2 crs_name = '%s / Ocentric' % ellipsoidal_datum_name cs_auth = 'PROJ' cs_code = 'OCENTRIC_LAT_LON' all_sql.append("INSERT INTO geodetic_crs VALUES('%s',%d,'%s','%s','other','%s','%s','%s',%d,NULL,0);" % (AUTH_IAU2015, crs_code, crs_name, SOURCE_IAU, cs_auth, cs_code, AUTH_IAU2015, ellipsoidal_datum_code)) add_usage('geodetic_crs', crs_code) if not (has_ographic and direction == 'east'): # We don't need to generate projected CRS based on the ocentric one, if we have # generated them for the ographic CRS and that it is east oriented generate_projected_crs(crs_code, crs_name, False) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') f = open(os.path.join(sql_dir_name, 'iau') + '.sql', 'wb') f.write("--- This file has been generated by scripts/build_db_from_iau.py. DO NOT EDIT !\n\n".encode('UTF-8')) for sql in all_sql: f.write((sql + '\n').encode('UTF-8')) f.close() print('') print('Finished !') proj-9.6.0/scripts/build_esri_projection_mapping.py000664 001754 001755 00000117744 14764566077 022570 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Generate mappings between ESRI projection names and parameters and # their EPSG equivalents. # Author: Even Rouault # ############################################################################### # Copyright (c) 2018, 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. ############################################################################### import yaml # Map methods from pe_list_projection.csv to WKT2 naming config_str = """ - Equidistant_Cylindrical: WKT2_name: EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Plate_Carree: WKT2_name: - EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL - EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN Cond: - EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL = 0 - Miller_Cylindrical: WKT2_name: PROJ_WKT2_NAME_METHOD_MILLER_CYLINDRICAL Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Mercator: # Mercator 2SP WKT2_name: EPSG_NAME_METHOD_MERCATOR_VARIANT_B Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Gauss_Kruger: WKT2_name: EPSG_NAME_METHOD_TRANSVERSE_MERCATOR Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Transverse_Mercator: WKT2_name: EPSG_NAME_METHOD_TRANSVERSE_MERCATOR Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Transverse_Mercator_Complex: # This is likely PROJ etmerc method WKT2_name: EPSG_NAME_METHOD_TRANSVERSE_MERCATOR Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Albers: WKT2_name: EPSG_NAME_METHOD_ALBERS_EQUAL_AREA Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN - Sinusoidal: WKT2_name: PROJ_WKT2_NAME_METHOD_SINUSOIDAL Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Mollweide: WKT2_name: PROJ_WKT2_NAME_METHOD_MOLLWEIDE Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Eckert_I: WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_I Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Eckert_II: WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_II Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Eckert_III: WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_III Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Eckert_IV: WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_IV Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Eckert_V: WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_V Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Eckert_VI: WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_VI Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Gall_Stereographic: WKT2_name: PROJ_WKT2_NAME_METHOD_GALL_STEREOGRAPHIC Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Winkel_I: WKT2_name: "Winkel I" Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Winkel_II: WKT2_name: "Winkel II" Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Lambert_Conformal_Conic: - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN # should be the same as Standard_Parallel_1 - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN # From GDAL autotest - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL - Scale_Factor: 1.0 - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN # Tempative mapping. Did not find any example - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL - Scale_Factor: EPSG_NAME_PARAMETER_ELLIPSOID_SCALE_FACTOR - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN - Polyconic: WKT2_name: EPSG_NAME_METHOD_AMERICAN_POLYCONIC Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Quartic_Authalic: WKT2_name: "Quartic Authalic" Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Loximuthal: WKT2_name: "Loximuthal" Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Central_Parallel: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Bonne: WKT2_name: EPSG_NAME_METHOD_BONNE Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Hotine_Oblique_Mercator_Two_Point_Natural_Origin: WKT2_name: PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE - Latitude_Of_1st_Point: "Latitude of 1st point" - Latitude_Of_2nd_Point: "Latitude of 2nd point" - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Longitude_Of_1st_Point: "Longitude of 1st point" - Longitude_Of_2nd_Point: "Longitude of 2nd point" - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - Stereographic: WKT2_name: PROJ_WKT2_NAME_METHOD_STEREOGRAPHIC Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Polar_Stereographic_Variant_A: WKT2_name: EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Equidistant_Conic: WKT2_name: EPSG_NAME_METHOD_EQUIDISTANT_CONIC Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN - Cassini: WKT2_name: EPSG_NAME_METHOD_CASSINI_SOLDNER Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: 1.0 # fixed - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Van_der_Grinten_I: WKT2_name: PROJ_WKT2_NAME_METHOD_VAN_DER_GRINTEN Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Robinson: WKT2_name: PROJ_WKT2_NAME_METHOD_ROBINSON Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Two_Point_Equidistant: WKT2_name: PROJ_WKT2_NAME_METHOD_TWO_POINT_EQUIDISTANT Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Latitude_Of_1st_Point: "Latitude of 1st point" - Latitude_Of_2nd_Point: "Latitude of 2nd point" - Longitude_Of_1st_Point: "Longitude of 1st point" - Longitude_Of_2nd_Point: "Longitude of 2nd point" - Azimuthal_Equidistant: WKT2_name: EPSG_NAME_METHOD_AZIMUTHAL_EQUIDISTANT Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Lambert_Azimuthal_Equal_Area: WKT2_name: EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Cylindrical_Equal_Area: WKT2_name: EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Behrmann: WKT2_name: EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: Name: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN Default: 0.0 - Standard_Parallel_1: Name: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL Default: 30.0 Cond: - EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL = 30 # No example in pe_list_projection.csv: temptative mapping ! - Hotine_Oblique_Mercator_Two_Point_Center: WKT2_name: PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE - Latitude_Of_1st_Point: "Latitude of 1st point" - Latitude_Of_2nd_Point: "Latitude of 2nd point" - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Longitude_Of_1st_Point: "Longitude of 1st point" - Longitude_Of_2nd_Point: "Longitude of 2nd point" - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Hotine_Oblique_Mercator_Azimuth_Natural_Origin: WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE # No EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - Hotine_Oblique_Mercator_Azimuth_Center: WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE # No EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - Double_Stereographic: WKT2_name: EPSG_NAME_METHOD_OBLIQUE_STEREOGRAPHIC Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Krovak: - WKT2_name: EPSG_NAME_METHOD_KROVAK Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Pseudo_Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL - Azimuth: EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - X_Scale: 1.0 - Y_Scale: 1.0 - XY_Plane_Rotation: 0.0 - WKT2_name: EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Pseudo_Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL - Azimuth: EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - X_Scale: -1.0 - Y_Scale: 1.0 - XY_Plane_Rotation: 90.0 - New_Zealand_Map_Grid: WKT2_name: EPSG_NAME_METHOD_NZMG Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Longitude_Of_Origin: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN # ESRI's Orthographic is a spherical-only formulation. The ellipsoidal capable # name is Local. See below - Orthographic: WKT2_name: PROJ_WKT2_NAME_ORTHOGRAPHIC_SPHERICAL Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Local: WKT2_name: EPSG_NAME_METHOD_LOCAL_ORTHOGRAPHIC Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - Winkel_Tripel: WKT2_name: "Winkel Tripel" Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Aitoff: WKT2_name: "Aitoff" Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Flat_Polar_Quartic: WKT2_name: PROJ_WKT2_NAME_METHOD_FLAT_POLAR_QUARTIC Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Craster_Parabolic: WKT2_name: "Craster Parabolic" Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Gnomonic: WKT2_name: PROJ_WKT2_NAME_METHOD_GNOMONIC Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Times: WKT2_name: PROJ_WKT2_NAME_METHOD_TIMES Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Vertical_Near_Side_Perspective: WKT2_name: EPSG_NAME_METHOD_VERTICAL_PERSPECTIVE Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN - Height: EPSG_NAME_PARAMETER_VIEWPOINT_HEIGHT - Stereographic_North_Pole: WKT2_name: EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL Cond: - EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL > 0 - Stereographic_South_Pole: WKT2_name: EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL Cond: - EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL < 0 - Rectified_Skew_Orthomorphic_Natural_Origin: WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - XY_Plane_Rotation: EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID # temptative mapping: no example - Rectified_Skew_Orthomorphic_Center: WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B Params: - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - XY_Plane_Rotation: EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID - Goode_Homolosine: - WKT2_name: PROJ_WKT2_NAME_METHOD_GOODE_HOMOLOSINE Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Option: 0.0 - WKT2_name: PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Option: 1.0 - WKT2_name: PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE_OCEAN Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Option: 2.0 - Equidistant_Cylindrical_Ellipsoidal: WKT2_name: EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Laborde_Oblique_Mercator: WKT2_name: EPSG_NAME_METHOD_LABORDE_OBLIQUE_MERCATOR Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE - Gnomonic_Ellipsoidal: WKT2_name: PROJ_WKT2_NAME_METHOD_GNOMONIC Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Wagner_IV: WKT2_name: PROJ_WKT2_NAME_METHOD_WAGNER_IV Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Origin: 0 - Wagner_V: WKT2_name: PROJ_WKT2_NAME_METHOD_WAGNER_V Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Wagner_VII: WKT2_name: PROJ_WKT2_NAME_METHOD_WAGNER_VII Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Natural_Earth: WKT2_name: PROJ_WKT2_NAME_METHOD_NATURAL_EARTH Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Natural_Earth_II: WKT2_name: PROJ_WKT2_NAME_METHOD_NATURAL_EARTH_II Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Patterson: WKT2_name: PROJ_WKT2_NAME_METHOD_PATTERSON Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Compact_Miller: WKT2_name: PROJ_WKT2_NAME_METHOD_COMPACT_MILLER Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Geostationary_Satellite: WKT2_name: PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_Y Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Height: "Satellite Height" - Option: 0.0 - Mercator_Auxiliary_Sphere: WKT2_name: EPSG_NAME_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Auxiliary_Sphere_Type: 0.0 - Mercator_Variant_A: WKT2_name: EPSG_NAME_METHOD_MERCATOR_VARIANT_A Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Mercator_Variant_C: WKT2_name: EPSG_NAME_METHOD_MERCATOR_VARIANT_B Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL - Latitude_Of_Origin: 0 - Transverse_Cylindrical_Equal_Area: WKT2_name: Transverse Cylindrical Equal Area Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - IGAC_Plano_Cartesiano: WKT2_name: EPSG_NAME_METHOD_COLOMBIA_URBAN Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Height: EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT - Equal_Earth: WKT2_name: EPSG_NAME_METHOD_EQUAL_EARTH Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Peirce_Quincuncial: - WKT2_name: PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Option: 0.0 - WKT2_name: PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND Params: - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN - Option: 1.0 # Missing/unclear mappings # Hammer_Aitoff: possibly hammer? # Hammer_Ellipsoidal: possibly hammer? # Eckert_Greifendorff: +proj=hammer +W=0.25 +M=1 # Tobler_Cylindrical_I: likely tobmerc, but parameters TBD # Tobler_Cylindrical_II: likely tobmerc, but parameters TBD # Missing mappings # Transverse_Mercator_NGA_2014: utm -- tricky mapping from Central_Meridian to zone # Transverse Mercator: alias for Transverse_Mercator, as seen in ESRI:102470 - ESRI:102489 # The following methods are not currently possible in PROJ: # Ney_Modified_Conic # Fuller # Berghaus_Star # Cube # Robinson_ARC_INFO # Equidistant_Cylindrical_Auxiliary_Sphere # Aspect_Adaptive_Cylindrical # Mollweide_Auxiliary_Sphere # Eckert_VI_Auxiliary_Sphere # Eckert_IV_Auxiliary_Sphere # Stereographic_Auxiliary_Sphere # Van_der_Grinten_I_Auxiliary_Sphere # Azimuthal_Equidistant_Auxiliary_Sphere # Lambert_Azimuthal_Equal_Area_Auxiliary_Sphere # Orthographic_Auxiliary_Sphere # Gnomonic_Auxiliary_Sphere # Polar_Stereographic_Variant_B # Polar_Stereographic_Variant_C # Quartic_Authalic_Ellipsoidal # Adams_Square_II """ config = yaml.load(config_str) all_projs = [] def generate_mapping(WKT2_name, esri_proj_name, Params, suffix=''): c_name = 'paramsESRI_%s%s' % (esri_proj_name, suffix) if isinstance(WKT2_name, list): for WKT2_name_s in WKT2_name: all_projs.append([esri_proj_name, WKT2_name_s, c_name]) else: all_projs.append([esri_proj_name, WKT2_name, c_name]) qualifier = 'static ' if c_name in ('paramsESRI_Plate_Carree', 'paramsESRI_Equidistant_Cylindrical', 'paramsESRI_Gauss_Kruger', 'paramsESRI_Transverse_Mercator', 'paramsESRI_Hotine_Oblique_Mercator_Azimuth_Natural_Origin', 'paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin', 'paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center', 'paramsESRI_Rectified_Skew_Orthomorphic_Center'): qualifier = '' print(qualifier + 'const ESRIParamMapping %s[] = { ' % c_name) for param in Params: for param_name in param: param_value = param[param_name] default_value = None if isinstance(param_value, dict): default_value = param_value.get('Default', None) param_value = param_value['Name'] if isinstance(param_value, str): if param_value.startswith('EPSG_'): print(' { "%s", %s, %s, "%.1f", %s },' % (param_name, param_value, param_value.replace('_NAME_', '_CODE_'), default_value or 0.0, "true" if default_value is not None else "false")) else: print(' { "%s", "%s", 0, "%.1f", %s },' % (param_name, param_value, default_value or 0.0, "true" if default_value is not None else "false")) else: print(' { "%s", nullptr, 0, "%.1f", false },' % (param_name, param_value)) print(' { nullptr, nullptr, 0, "0.0", false }') print('};') print('// This file was generated by scripts/build_esri_projection_mapping.py. DO NOT EDIT !') print('') print(""" /****************************************************************************** * * Project: PROJ * Purpose: Mappings between ESRI projection and parameters names and WKT2 * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "esriparammappings.hpp" #include "proj_constants.h" #include "proj/internal/internal.hpp" NS_PROJ_START using namespace internal; namespace operation { //! @cond Doxygen_Suppress """) for item in config: for esri_proj_name in item: proj_config = item[esri_proj_name] if isinstance(proj_config, dict): WKT2_name = proj_config['WKT2_name'] Params = proj_config['Params'] generate_mapping(WKT2_name, esri_proj_name, Params) else: count = 1 for subconfig in proj_config: WKT2_name = subconfig['WKT2_name'] Params = subconfig['Params'] generate_mapping(WKT2_name, esri_proj_name, Params, suffix='_alt%d' % count) count += 1 print('') print('static const ESRIMethodMapping esriMappings[] = {') for esri_proj_name, WKT2_name, c_name in all_projs: if WKT2_name.startswith('EPSG_'): print(' { "%s", %s, %s, %s },' % (esri_proj_name, WKT2_name, WKT2_name.replace('_NAME_', '_CODE_'), c_name)) elif WKT2_name.startswith('PROJ_'): print(' { "%s", %s, 0, %s },' % (esri_proj_name, WKT2_name, c_name)) else: print(' { "%s", "%s", 0, %s },' % (esri_proj_name, WKT2_name, c_name)) print('};') print(""" // --------------------------------------------------------------------------- const ESRIMethodMapping *getEsriMappings(size_t &nElts) { nElts = sizeof(esriMappings) / sizeof(esriMappings[0]); return esriMappings; } // --------------------------------------------------------------------------- std::vector getMappingsFromESRI(const std::string &esri_name) { std::vector res; for (const auto &mapping : esriMappings) { if (ci_equal(esri_name, mapping.esri_name)) { res.push_back(&mapping); } } return res; } //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END """) proj-9.6.0/scripts/build_grid_alternatives_generated_noaa.py000775 001754 001755 00000020235 14764566077 024370 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Populate grid_alternatives with NAD83 -> NAD83(HPGN/HARN) grids # Author: Even Rouault # ############################################################################### # Copyright (c) 2018, 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. ############################################################################### import os nadcon_grids = ['conus', 'alaska', 'hawaii', 'prvi', 'stgeorge', 'stlrnc', 'stpaul'] hpgn_grids = [ 'alhpgn.gsb', 'arhpgn.gsb', 'azhpgn.gsb', #'c1hpgn.gsb', -- Not used in EPSG #'c2hpgn.gsb', -- Not used in EPSG 'cnhpgn.gsb', 'cohpgn.gsb', 'cshpgn.gsb', 'emhpgn.gsb', 'eshpgn.gsb', 'ethpgn.gsb', ('flhpgn.gsb', 'FL'), 'gahpgn.gsb', 'guhpgn.gsb', 'hihpgn.gsb', 'iahpgn.gsb', 'ilhpgn.gsb', 'inhpgn.gsb', 'kshpgn.gsb', 'kyhpgn.gsb', 'lahpgn.gsb', ('mdhpgn.gsb', 'MD'), 'mehpgn.gsb', 'mihpgn.gsb', 'mnhpgn.gsb', 'mohpgn.gsb', 'mshpgn.gsb', 'nbhpgn.gsb', 'nchpgn.gsb', 'ndhpgn.gsb', 'nehpgn.gsb', 'njhpgn.gsb', 'nmhpgn.gsb', 'nvhpgn.gsb', 'nyhpgn.gsb', 'ohhpgn.gsb', 'okhpgn.gsb', 'pahpgn.gsb', 'pvhpgn.gsb', 'schpgn.gsb', 'sdhpgn.gsb', ('tnhpgn.gsb', 'TN'), 'uthpgn.gsb', 'vahpgn.gsb', ('wihpgn.gsb', 'WI'), 'wmhpgn.gsb', ('wohpgn.gsb', 'WO'), 'wshpgn.gsb', 'wthpgn.gsb', 'wvhpgn.gsb', 'wyhpgn.gsb', ] script_dir_name = os.path.dirname(os.path.realpath(__file__)) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') out_filename = os.path.join(sql_dir_name, 'grid_alternatives_generated_noaa') + '.sql' #print(out_filename) f = open(out_filename, 'wb') f.write("--- This file has been generated by scripts/build_grid_alternatives_generated_noaa.py. DO NOT EDIT !\n\n".encode('UTF-8')) f.write("-- NADCON (NAD27 -> NAD83) entries\n\n".encode('UTF-8')) for grid in nadcon_grids: tiff_name = 'us_noaa_' + grid + '.tif' sql = """INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('%s', '%s', '%s', 'GTiff', 'hgridshift', 0, NULL, '%s', 1, 1, NULL);""" % (grid + '.las', tiff_name, grid, 'https://cdn.proj.org/' + tiff_name) f.write((sql + '\n').encode('UTF-8')) f.write("-- NAD83 -> NAD83(HPGN) entries\n\n".encode('UTF-8')) for row in hpgn_grids: try: ntv2_name, ctable2_name = row except: ntv2_name = row ctable2_name = None las_filename = ntv2_name[0:-4] + ".las" if ctable2_name: tiff_name = 'us_noaa_' + ctable2_name+'.tif' sql = """INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('%s', '%s', '%s', 'GTiff', 'hgridshift', 0, NULL, '%s', 1, 1, NULL);""" % (las_filename, tiff_name, ctable2_name, 'https://cdn.proj.org/' + tiff_name) else: tiff_name = 'us_noaa_' + ntv2_name[0:-4]+'.tif' sql = """INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('%s', '%s', '%s', 'GTiff', 'hgridshift', 0, NULL, '%s', 1, 1, NULL);""" % (las_filename, tiff_name, ntv2_name, 'https://cdn.proj.org/' + tiff_name) f.write((sql + '\n').encode('UTF-8')) f.write("-- NADCON5 entries\n\n".encode('UTF-8')) nadcon5 = ["as62.nad83_1993.as", "gu63.nad83_1993.guamcnmi", "nad27.nad83_1986.alaska", "nad27.nad83_1986.conus", "nad83_1986.nad83_1992.alaska", "nad83_1986.nad83_1993.hawaii", "nad83_1986.nad83_1993.prvi", "nad83_1986.nad83_harn.conus", "nad83_1992.nad83_2007.alaska", "nad83_1993.nad83_1997.prvi", "nad83_1993.nad83_2002.as", "nad83_1993.nad83_2002.guamcnmi", "nad83_1993.nad83_pa11.hawaii", "nad83_1997.nad83_2002.prvi", "nad83_2002.nad83_2007.prvi", "nad83_2002.nad83_ma11.guamcnmi", "nad83_2002.nad83_pa11.as", "nad83_2007.nad83_2011.alaska", "nad83_2007.nad83_2011.conus", "nad83_2007.nad83_2011.prvi", "nad83_fbn.nad83_2007.conus", "nad83_harn.nad83_fbn.conus", "ohd.nad83_1986.hawaii", "pr40.nad83_1986.prvi", #"sg1897.sg1952.stgeorge", "sg1952.nad83_1986.stgeorge", "sl1952.nad83_1986.stlawrence", #"sp1897.sp1952.stpaul", "sp1952.nad83_1986.stpaul", #"ussd.nad27.conus", ] for subdir in nadcon5: tiff_name = 'us_noaa_nadcon5_' + subdir.replace('.', '_') + '.tif' lat_filename = 'nadcon5.' + subdir + '.lat.trn.20160901.b' sql = """INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, old_proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory) VALUES ('%s', '%s', NULL, 'GTiff', 'gridshift', 0, NULL, '%s', 1, 1, NULL);""" % (lat_filename, tiff_name, 'https://cdn.proj.org/' + tiff_name) f.write((sql + '\n').encode('UTF-8')) f.close() proj-9.6.0/scripts/build_nadcon5_concatenated_operations.py000775 001754 001755 00000014457 14764566077 024161 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Populate data/sql/nadcon5_concatenated_operations.sql # Author: Even Rouault # ############################################################################### # Copyright (c) 2022, 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. ############################################################################### import os script_dir_name = os.path.dirname(os.path.realpath(__file__)) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') out_filename = os.path.join(sql_dir_name, 'nadcon5_concatenated_operations') + '.sql' #print(out_filename) def sanitize_crs_name_for_code(name): return name.replace('(', '_').replace(')', '').replace(' ','_').upper() def gen_transformations(sql, transformations, crs_dict, short_area_of_use, extent_code): for i in range(len(transformations)): for j in range(i,len(transformations)): if i >= j: continue source_crs = transformations[i][0] target_crs = transformations[j][1] total_acc = 0 for k in range(i,j+1): total_acc += transformations[k][3] ** 2 total_acc = total_acc ** 0.5 total_acc = round(total_acc * 100) / 100.0 transfm_code = sanitize_crs_name_for_code(source_crs) + "_TO_" + sanitize_crs_name_for_code(target_crs) + "_" + short_area_of_use.upper() transfm_name = f"{source_crs} to {target_crs} (NADCON5, {short_area_of_use})" source_crs_code = crs_dict[source_crs][0] target_crs_code = crs_dict[target_crs][0] sql += f"INSERT INTO concatenated_operation VALUES('PROJ','{transfm_code}','{transfm_name}','Transformation based on concatenation of NADCON5 transformations','EPSG','{source_crs_code}','EPSG','{target_crs_code}',{total_acc},NULL,0);\n" for k in range(i,j+1): step = k - i + 1 source_crs_name = transformations[k][0] target_crs_name = transformations[k][1] step_code = transformations[k][2] acc = transformations[k][3] sql += f"INSERT INTO concatenated_operation_step VALUES('PROJ','{transfm_code}',{step},'EPSG','{step_code}','forward'); -- {source_crs_name} to {target_crs_name} (EPSG:{step_code}), {acc} m\n" sql += f"INSERT INTO usage VALUES('PROJ','{transfm_code}_USAGE','concatenated_operation','PROJ','{transfm_code}',\n" sql += f" 'EPSG','{extent_code}', -- extent: {short_area_of_use}\n" sql += f" 'EPSG','1027' -- scope: Geodesy\n" sql += ");\n" sql += "\n" return sql crs_dict = { "NAD27" : (4267, 0), "Puerto Rico": (4139, 0), "Old Hawaiian": (4135, 0), "American Samoa 1962": (4169, 0), "Guam 1963": (4675, 0), "NAD83" : (4269, 0), "NAD83(HARN)": (4152, 4957), "NAD83(HARN Corrected)": (8545, 8544), # PRVI only "NAD83(FBN)": (8860, 8542), "NAD83(NSRS2007)": (4759, 4893), "NAD83(2011)": (6318, 6319), "NAD83(PA11)": (6322, 6321), "NAD83(MA11)": (6325, 6324), } f = open(out_filename, 'wb') f.write("--- This file has been generated by scripts/build_nadcon5_concatenated_operations.py. DO NOT EDIT !\n\n".encode('UTF-8')) f.write("-- Concatenated accuracy is sqrt(sum of squared accuracies) (confirmed by NGS to be a valid way)\n\n".encode('UTF-8')) sql = "" # CONUS transformations = [ ("NAD27", "NAD83", 8555, 0.15), ("NAD83", "NAD83(HARN)", 8556, 0.05), ("NAD83(HARN)", "NAD83(FBN)", 8861, 0.05), ("NAD83(FBN)", "NAD83(NSRS2007)", 8862, 0.05), ("NAD83(NSRS2007)", "NAD83(2011)", 8559, 0.05), ] sql = gen_transformations(sql, transformations, crs_dict, "CONUS", 4516) # Alaska transformations = [ ("NAD27", "NAD83", 8549, 0.5), ("NAD83", "NAD83(HARN)", 8550, 0.15), ("NAD83(HARN)", "NAD83(NSRS2007)", 8551, 0.05), ("NAD83(NSRS2007)", "NAD83(2011)", 8552, 0.05), ] sql = gen_transformations(sql, transformations, crs_dict, "Alaska", 1330) # Hawaii transformations = [ ("Old Hawaiian", "NAD83", 8561, 0.2), ("NAD83", "NAD83(HARN)", 8660, 0.05), ("NAD83(HARN)", "NAD83(PA11)", 8661, 0.05), ] sql = gen_transformations(sql, transformations, crs_dict, "Hawaii", 1334) # PRVI transformations = [ ("Puerto Rico", "NAD83", 8668, 0.15), ("NAD83", "NAD83(HARN)", 8669, 0.15), ("NAD83(HARN)", "NAD83(HARN Corrected)", 9181, 0.05), ("NAD83(HARN Corrected)", "NAD83(FBN)", 8867, 0.05), ("NAD83(FBN)", "NAD83(NSRS2007)", 8868, 0.05), ("NAD83(NSRS2007)", "NAD83(2011)", 8673, 0.05), ] sql = gen_transformations(sql, transformations, crs_dict, "PRVI", 3634) # American Samoa transformations = [ ("American Samoa 1962", "NAD83(HARN)", 8662, 5.0), ("NAD83(HARN)", "NAD83(FBN)", 8863, 0.05), ("NAD83(FBN)", "NAD83(PA11)", 8864, 0.05), ] sql = gen_transformations(sql, transformations, crs_dict, "AS", 3110) # Guam transformations = [ ("Guam 1963", "NAD83(HARN)", 8665, 5.0), ("NAD83(HARN)", "NAD83(FBN)", 8865, 0.05), ("NAD83(FBN)", "NAD83(MA11)", 8866, 0.05), ] sql = gen_transformations(sql, transformations, crs_dict, "GUAM", 4525) f.write(sql.encode('UTF-8')) f.close() proj-9.6.0/scripts/build_nrcan.py000775 001754 001755 00000070647 14764566077 016763 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Build NRCan specific definitions # Author: Even Rouault # ############################################################################### # Copyright (c) 2023, 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. ############################################################################### import json import os def MTM_NAD83CSRSv7(zone): longitude = { 1: -53, 2: -56, 3: -58.5, 4: -61.5, 5: -64.5, 6: -67.5, 7: -70.5, 8: -73.5, 9: -76.5, 10: -79.5, 11: -82.5, 12: -81, 13: -84, 14: -87, 15: -90, 16: -93, 17: -96 } return { "type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / MTM zone " + str(zone), "base_crs": { "name": "NAD83(CSRS)v7", "datum": { "type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": { "name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101 } }, "coordinate_system": { "subtype": "ellipsoidal", "axis": [ { "name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree" }, { "name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree" } ] } }, "conversion": { "name": "MTM zone " + str(zone), "method": { "name": "Transverse Mercator", "id": { "authority": "EPSG", "code": 9807 } }, "parameters": [ { "name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": { "authority": "EPSG", "code": 8801 } }, { "name": "Longitude of natural origin", "value": longitude[zone], "unit": "degree", "id": { "authority": "EPSG", "code": 8802 } }, { "name": "Scale factor at natural origin", "value": 0.9999, "unit": "unity", "id": { "authority": "EPSG", "code": 8805 } }, { "name": "False easting", "value": 304800, "unit": "metre", "id": { "authority": "EPSG", "code": 8806 } }, { "name": "False northing", "value": 0, "unit": "metre", "id": { "authority": "EPSG", "code": 8807 } } ] }, "coordinate_system": { "subtype": "Cartesian", "axis": [ { "name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre" }, { "name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre" } ] } } def UTM_NAD83CSRSv7(zone): return { "type": "ProjectedCRS", "name": "NAD83(CSRS)v7 / UTM zone " + str(zone), "base_crs": { "name": "NAD83(CSRS)v7", "datum": { "type": "GeodeticReferenceFrame", "name": "North American Datum of 1983 (CSRS) version 7", "ellipsoid": { "name": "GRS 1980", "semi_major_axis": 6378137, "inverse_flattening": 298.257222101 } }, "coordinate_system": { "subtype": "ellipsoidal", "axis": [ { "name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree" }, { "name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree" } ] } }, "conversion": { "name": "UTM zone " + str(zone) + "N", "method": { "name": "Transverse Mercator", "id": { "authority": "EPSG", "code": 9807 } }, "parameters": [ { "name": "Latitude of natural origin", "value": 0, "unit": "degree", "id": { "authority": "EPSG", "code": 8801 } }, { "name": "Longitude of natural origin", "value": -183 + zone * 6, "unit": "degree", "id": { "authority": "EPSG", "code": 8802 } }, { "name": "Scale factor at natural origin", "value": 0.9996, "unit": "unity", "id": { "authority": "EPSG", "code": 8805 } }, { "name": "False easting", "value": 500000, "unit": "metre", "id": { "authority": "EPSG", "code": 8806 } }, { "name": "False northing", "value": 0, "unit": "metre", "id": { "authority": "EPSG", "code": 8807 } } ] }, "coordinate_system": { "subtype": "Cartesian", "axis": [ { "name": "Easting", "abbreviation": "E(X)", "direction": "east", "unit": "metre" }, { "name": "Northing", "abbreviation": "N(Y)", "direction": "north", "unit": "metre" } ] } } def vert_crs_CGVD28(geoid_model_name, geoid_model_authority, geoid_model_code): return { "type": "VerticalCRS", "name": "CGVD28 height", "datum": { "type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 1928" }, "coordinate_system": { "subtype": "vertical", "axis": [ { "name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre" } ] }, "geoid_model": { "name": geoid_model_name, "id": { "authority": geoid_model_authority, "code": geoid_model_code } }, "id": { "authority": "EPSG", "code": 5713 } } def vert_crs_CGVD28_HT2_1997(): return vert_crs_CGVD28("HT2_1997", "NRCAN", "HT2_1997_NAD83CSRSV7") def vert_crs_CGVD28_HT2_2002(): return vert_crs_CGVD28("HT2_2002", "NRCAN", "HT2_2002_NAD83CSRSV7") def vert_crs_CGVD28_HT2_2010(): return vert_crs_CGVD28("HT2_2010", "EPSG", 9987) def vert_crs_CGVD2013a_1997(): return { "type": "VerticalCRS", "name": "CGVD2013a(1997) height", "datum": { "type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 1997" }, "coordinate_system": { "subtype": "vertical", "axis": [ { "name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre" } ] }, "id": { "authority": "EPSG", "code": 20035 } } def vert_crs_CGVD2013a_2002(): return { "type": "VerticalCRS", "name": "CGVD2013a(2002) height", "datum": { "type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2002" }, "coordinate_system": { "subtype": "vertical", "axis": [ { "name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre" } ] }, "id": { "authority": "EPSG", "code": 20034 } } def vert_crs_CGVD2013a_2010(): return { "type": "VerticalCRS", "name": "CGVD2013a(2010) height", "datum": { "type": "VerticalReferenceFrame", "name": "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010" }, "coordinate_system": { "subtype": "vertical", "axis": [ { "name": "Gravity-related height", "abbreviation": "H", "direction": "up", "unit": "metre" } ] }, "id": { "authority": "EPSG", "code": 9245 } } usages_MTM = { 1: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland - onshore east of 54°30'W.", "bbox": { "south_latitude": 46.56, "west_longitude": -54.5, "north_latitude": 49.89, "east_longitude": -52.54 }, }, 2: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland and Labrador between 57°30'W and 54°30'W.", "bbox": { "south_latitude": 46.81, "west_longitude": -57.5, "north_latitude": 54.71, "east_longitude": -54.49 }, }, 3: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Newfoundland west of 57°30'W.", "bbox": { "south_latitude": 47.5, "west_longitude": -59.48, "north_latitude": 50.54, "east_longitude": -57.5 }, }, 4: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador between 63°W and 60°W.", "bbox": { "south_latitude": 52, "west_longitude": -63, "north_latitude": 58.92, "east_longitude": -60 }, }, 5: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - 66°W to 63°W.", "bbox": { "south_latitude": 51.58, "west_longitude": -66, "north_latitude": 60.52, "east_longitude": -63 }, }, 6: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Labrador - west of 66°W.", "bbox": { "south_latitude": 52.05, "west_longitude": -67.81, "north_latitude": 55.34, "east_longitude": -66 }, }, 7: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Quebec - between 72°W and 69°W.", "bbox": { "south_latitude": 45.01, "west_longitude": -72, "north_latitude": 61.8, "east_longitude": -69 }, }, 8: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - east of 75°W.", "bbox": { "south_latitude": 44.98, "west_longitude": -75, "north_latitude": 45.65, "east_longitude": -74.35 }, }, 9: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 78°W and 75°W.", "bbox": { "south_latitude": 43.63, "west_longitude": -78, "north_latitude": 46.25, "east_longitude": -75 }, }, 10: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 81°W and 78°W: south of 46°N in area to west of 80°15'W, south of 47°N in area between 80°15'W and 79°30'W, entire province between 79°30'W and 78°W.", "bbox": { "south_latitude": 42.26, "west_longitude": -81, "north_latitude": 47.33, "east_longitude": -77.99 }, }, 11: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - south of 46°N and west of 81°W.", "bbox": { "south_latitude": 41.67, "west_longitude": -83.6, "north_latitude": 46, "east_longitude": -81 }, }, 12: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 82°30'W and 79°30'W: north of 46°N in area between 82°30'W and 80°15'W, north of 47°N in area between 80°15'W and 79°30'W.", "bbox": { "south_latitude": 46, "west_longitude": -82.5, "north_latitude": 55.21, "east_longitude": -79.5 }, }, 13: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 85°30'W and 82°30'W and north of 46°N.", "bbox": { "south_latitude": 46, "west_longitude": -85.5, "north_latitude": 55.59, "east_longitude": -82.5 }, }, 14: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 88°30'W and 85°30'W.", "bbox": { "south_latitude": 47.17, "west_longitude": -88.5, "north_latitude": 56.7, "east_longitude": -85.5 }, }, 15: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 91°30'W and 88°30'W.", "bbox": { "south_latitude": 47.97, "west_longitude": -91.5, "north_latitude": 56.9, "east_longitude": -88.5 }, }, 16: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - between 94°30'W and 91°30'W.", "bbox": { "south_latitude": 48.06, "west_longitude": -94.5, "north_latitude": 55.2, "east_longitude": -91.5 }, }, 17: { "scope": "Engineering survey, topographic mapping.", "area": "Canada - Ontario - west of 94°30'W.", "bbox": { "south_latitude": 48.69, "west_longitude": -95.16, "north_latitude": 53.24, "east_longitude": -94.5 }, }, } usages_UTM = { 7: { "scope": "Engineering survey, topographic mapping.", "area": "Canada west of 138°W, onshore and offshore south of 84°N - British Columbia, Yukon.", "bbox": { "south_latitude": 52.05, "west_longitude": -141.01, "north_latitude": 72.53, "east_longitude": -138 }, }, 8: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138°W and 132°W, onshore and offshore south of 84°N - British Columbia, Northwest Territories, Yukon.", "bbox": { "south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132 }, }, 9: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 138°W and 132°W, onshore and offshore south of 84°N - British Columbia, Northwest Territories, Yukon.", "bbox": { "south_latitude": 48.06, "west_longitude": -138, "north_latitude": 79.42, "east_longitude": -132 }, }, 10: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 126°W and 120°W, onshore and offshore south of 84°N - British Columbia, Northwest Territories, Yukon.", "bbox": { "south_latitude": 48.13, "west_longitude": -126, "north_latitude": 81.8, "east_longitude": -120 }, }, 11: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 120°W and 114°W onshore and offshore - Alberta, British Columbia, Northwest Territories, Nunavut.", "bbox": { "south_latitude": 48.99, "west_longitude": -120, "north_latitude": 83.5, "east_longitude": -114 }, }, 12: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 114°W and 108°W onshore and offshore - Alberta, Northwest Territories, Nunavut, Saskatchewan.", "bbox": { "south_latitude": 48.99, "west_longitude": -114, "north_latitude": 84, "east_longitude": -108 }, }, 13: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 108°W and 102°W onshore and offshore - Northwest Territories, Nunavut, Saskatchewan.", "bbox": { "south_latitude": 48.99, "west_longitude": -108, "north_latitude": 84, "east_longitude": -102 }, }, 14: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 102°W and 96°W, onshore and offshore south of 84°N - Manitoba, Nunavut, Saskatchewan.", "bbox": { "south_latitude": 48.99, "west_longitude": -102, "north_latitude": 84, "east_longitude": -96 }, }, 15: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 96°W and 90°W, onshore and offshore south of 84°N - Manitoba, Nunavut, Ontario.", "bbox": { "south_latitude": 48.03, "west_longitude": -96, "north_latitude": 84, "east_longitude": -90 }, }, 16: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 90°W and 84°W, onshore and offshore south of 84°N - Manitoba, Nunavut, Ontario.", "bbox": { "south_latitude": 46.11, "west_longitude": -90, "north_latitude": 84, "east_longitude": -84 }, }, 17: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 84°W and 78°W, onshore and offshore south of 84°N - Nunavut, Ontario and Quebec.", "bbox": { "south_latitude": 41.67, "west_longitude": -84, "north_latitude": 84, "east_longitude": -78 }, }, 18: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 78°W and 72°W, onshore and offshore south of 84°N - Nunavut, Ontario and Quebec.", "bbox": { "south_latitude": 43.63, "west_longitude": -78, "north_latitude": 84, "east_longitude": -72 }, }, 19: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 72°W and 66°W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Quebec.", "bbox": { "south_latitude": 40.8, "west_longitude": -72, "north_latitude": 84, "east_longitude": -66 }, }, 20: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 66°W and 60°W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Prince Edward Island, Quebec.", "bbox": { "south_latitude": 40.04, "west_longitude": -66, "north_latitude": 84, "east_longitude": -60 }, }, 21: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 60°W and 54°W - Newfoundland and Labrador; Nunavut; Quebec.", "bbox": { "south_latitude": 38.56, "west_longitude": -60, "north_latitude": 84, "east_longitude": -54 }, }, 22: { "scope": "Engineering survey, topographic mapping.", "area": "Canada between 54°W and 48°W onshore and offshore - Newfoundland and Labrador.", "bbox": { "south_latitude": 39.5, "west_longitude": -54, "north_latitude": 57.65, "east_longitude": -47.99 }, } } def compound_crs_MTM_HT_1997(zone): j = { "type": "CompoundCRS", "components": [ MTM_NAD83CSRSv7(zone), vert_crs_CGVD28_HT2_1997() ] } j["name"] = j["components"][0]["name"] + " + " + j["components"][1]["name"] usage = usages_MTM[zone] for key in usage: j[key] = usage[key] return j def compound_crs_MTM_HT_2002(zone): j = { "type": "CompoundCRS", "components": [ MTM_NAD83CSRSv7(zone), vert_crs_CGVD28_HT2_2002() ] } j["name"] = j["components"][0]["name"] + " + " + j["components"][1]["name"] usage = usages_MTM[zone] for key in usage: j[key] = usage[key] return j def compound_crs_MTM_HT_2010(zone): j = { "type": "CompoundCRS", "components": [ MTM_NAD83CSRSv7(zone), vert_crs_CGVD28_HT2_2010() ] } j["name"] = j["components"][0]["name"] + " + " + j["components"][1]["name"] usage = usages_MTM[zone] for key in usage: j[key] = usage[key] return j def compound_crs_UTM_CGVD2013_1997(zone): j = { "type": "CompoundCRS", "components": [ UTM_NAD83CSRSv7(zone), vert_crs_CGVD2013a_1997() ] } j["name"] = j["components"][0]["name"] + " + " + j["components"][1]["name"] usage = usages_UTM[zone] for key in usage: j[key] = usage[key] return j def compound_crs_UTM_CGVD2013_2002(zone): j = { "type": "CompoundCRS", "components": [ UTM_NAD83CSRSv7(zone), vert_crs_CGVD2013a_2002() ] } j["name"] = j["components"][0]["name"] + " + " + j["components"][1]["name"] usage = usages_UTM[zone] for key in usage: j[key] = usage[key] return j def compound_crs_UTM_CGVD2013_2010(zone): j = { "type": "CompoundCRS", "components": [ UTM_NAD83CSRSv7(zone), vert_crs_CGVD2013a_2010() ] } j["name"] = j["components"][0]["name"] + " + " + j["components"][1]["name"] usage = usages_UTM[zone] for key in usage: j[key] = usage[key] return j script_dir_name = os.path.dirname(os.path.realpath(__file__)) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') all_sql = [] all_sql.append("""INSERT INTO "grid_transformation" VALUES('NRCAN','HT2_1997_NAD83CSRSV7','NAD83(CSRS)v7 to CGVD28 height',NULL,'EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8254','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_1997.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000',0);""") all_sql.append("""INSERT INTO "usage" VALUES('NRCAN','USAGE_HT2_1997_NAD83CSRSV7','grid_transformation','NRCAN','HT2_1997_NAD83CSRSV7','EPSG','1289','EPSG','1133');""") all_sql.append("""INSERT INTO "grid_transformation" VALUES('NRCAN','HT2_2002_NAD83CSRSV7','NAD83(CSRS)v7 to CGVD28 height',NULL,'EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','8254','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_2002v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2002',0);""") all_sql.append("""INSERT INTO "usage" VALUES('NRCAN','USAGE_HT2_2002_NAD83CSRSV7','grid_transformation','NRCAN','HT2_2002_NAD83CSRSV7','EPSG','1289','EPSG','1133');""") for zone in range(1, 17+1): projjson = json.dumps(compound_crs_MTM_HT_1997(zone)).replace("'", "''") all_sql.append( f"""INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_MTM{zone}_HT2_1997', NULL, NULL, NULL, '{projjson}', 1997.0, 0);""") for zone in range(1, 17+1): projjson = json.dumps(compound_crs_MTM_HT_2002(zone)).replace("'", "''") all_sql.append( f"""INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_MTM{zone}_HT2_2002', NULL, NULL, NULL, '{projjson}', 2002.0, 0);""") for zone in range(1, 17+1): projjson = json.dumps(compound_crs_MTM_HT_2010(zone)).replace("'", "''") all_sql.append( f"""INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_MTM{zone}_HT2_2010', NULL, NULL, NULL, '{projjson}', 2010.0, 0);""") for zone in range(7, 22+1): projjson = json.dumps( compound_crs_UTM_CGVD2013_1997(zone)).replace("'", "''") all_sql.append( f"""INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_1997_UTM{zone}_CGVD2013_1997', NULL, NULL, NULL, '{projjson}', 1997.0, 0);""") for zone in range(7, 22+1): projjson = json.dumps( compound_crs_UTM_CGVD2013_2002(zone)).replace("'", "''") all_sql.append( f"""INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2002_UTM{zone}_CGVD2013_2002', NULL, NULL, NULL, '{projjson}', 2002.0, 0);""") for zone in range(7, 22+1): projjson = json.dumps( compound_crs_UTM_CGVD2013_2010(zone)).replace("'", "''") all_sql.append( f"""INSERT INTO coordinate_metadata VALUES('NRCAN', 'NAD83_CSRS_2010_UTM{zone}_CGVD2013_2010', NULL, NULL, NULL, '{projjson}', 2010.0, 0);""") f = open(os.path.join(sql_dir_name, 'nrcan') + '.sql', 'wb') f.write("--- This file has been generated by scripts/build_nrcan.py. DO NOT EDIT !\n\n".encode('UTF-8')) for sql in all_sql: f.write((sql + '\n').encode('UTF-8')) f.close() proj-9.6.0/scripts/build_wgs84_realizations_concatenated_operations.py000775 001754 001755 00000011326 14764566077 026362 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Populate data/sql/wgs84_realizations_concatenated_operations.sql # Author: Even Rouault # ############################################################################### # Copyright (c) 2025, Even Rouault # # SPDX-License-Identifier: MIT ############################################################################### import os script_dir_name = os.path.dirname(os.path.realpath(__file__)) sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql') out_filename = os.path.join(sql_dir_name, 'wgs84_realizations_concatenated_operations') + '.sql' #print(out_filename) def sanitize_crs_name_for_code(name): return name.replace('(', '_').replace(')', '').replace(' ','_').replace('__','_').upper() def gen_transformations(sql, transformations, crs_dict): for i in range(len(transformations)): if transformations[i][0] == "WGS 84 (G1150)" and transformations[i][1] == "WGS 84 (G1762)": continue for j in range(i+1,len(transformations)): if transformations[j][0] == "WGS 84 (G1150)" and transformations[j][1] == "WGS 84 (G1762)": continue source_crs = transformations[i][0] target_crs = transformations[j][1] source_crs_week = 0 if source_crs == "WGS 84 (Transit)" else int(source_crs[len("WGS 84 (G"):-1]) target_crs_week = int(target_crs[len("WGS 84 (G"):-1]) transfm_code = sanitize_crs_name_for_code(source_crs) + "_TO_" + sanitize_crs_name_for_code(target_crs) transfm_name = f"{source_crs} to {target_crs}" source_crs_code = crs_dict[source_crs] target_crs_code = crs_dict[target_crs] step = 0 steps_sql = [] total_acc = 0 for k in range(i,j+1): source_crs_name = transformations[k][0] target_crs_name = transformations[k][1] if source_crs_week <= 1150 and target_crs_week >= 1762 and \ ((source_crs_name == "WGS 84 (G1150)" and target_crs_name == "WGS 84 (G1674)") or \ (source_crs_name == "WGS 84 (G1674)" and target_crs_name == "WGS 84 (G1762)")): continue step += 1 step_code = transformations[k][2] acc = transformations[k][3] total_acc += acc steps_sql.append(f"INSERT INTO concatenated_operation_step VALUES('PROJ','{transfm_code}',{step},'EPSG','{step_code}','forward'); -- {source_crs_name} to {target_crs_name} (EPSG:{step_code}), {acc} m\n") if len(steps_sql) <= 1: continue total_acc = round(total_acc * 100) / 100.0 sql += f"INSERT INTO concatenated_operation VALUES('PROJ','{transfm_code}','{transfm_name}','Transformation based on concatenation of transformations between WGS 84 realizations','EPSG','{source_crs_code}','EPSG','{target_crs_code}',{total_acc},NULL,0);\n" for step_sql in steps_sql: sql += step_sql sql += f"INSERT INTO usage VALUES('PROJ','{transfm_code}_USAGE','concatenated_operation','PROJ','{transfm_code}',\n" sql += " 'EPSG','1262', -- extent: World\n" sql += " 'EPSG','1027' -- scope: Geodesy\n" sql += ");\n" sql += "\n" return sql crs_dict = { "WGS 84 (Transit)": 7815, "WGS 84 (G730)": 7656, "WGS 84 (G873)": 7658, "WGS 84 (G1150)": 7660, "WGS 84 (G1674)": 7662, "WGS 84 (G1762)": 7664, "WGS 84 (G2139)": 9753, "WGS 84 (G2296)": 10604, } f = open(out_filename, 'wb') f.write("--- This file has been generated by scripts/build_wgs84_realizations_concatenated_operations.py. DO NOT EDIT !\n\n".encode('UTF-8')) f.write("-- Concatenated accuracy is sum of accuracies\n\n".encode('UTF-8')) sql = "" transformations = [ ("WGS 84 (Transit)", "WGS 84 (G730)", 9960, 0.7), # regular Helmert ("WGS 84 (G730)", "WGS 84 (G873)", 9961, 0.04), # regular Helmert ("WGS 84 (G873)", "WGS 84 (G1150)", 9962, 0.03), # time-dependent Helmert ("WGS 84 (G1150)", "WGS 84 (G1674)", 9963, 0.02), # time-dependent Helmert ("WGS 84 (G1150)", "WGS 84 (G1762)", 7668, 0.02), # regular Helmert. Note that it doesn't go through G1674 ("WGS 84 (G1674)", "WGS 84 (G1762)", 7667, 0.01), # regular Helmert ("WGS 84 (G1762)", "WGS 84 (G2139)", 9756, 0.01), # regular Helmert ("WGS 84 (G2139)", "WGS 84 (G2296)", 10607, 0.01), # regular Helmert ] sql = gen_transformations(sql, transformations, crs_dict) f.write(sql.encode('UTF-8')) f.close() proj-9.6.0/scripts/ci/000775 001754 001755 00000000000 14764566152 014475 5ustar00e012349e012349000000 000000 proj-9.6.0/scripts/ci/conda/000775 001754 001755 00000000000 14764566152 015561 5ustar00e012349e012349000000 000000 proj-9.6.0/scripts/ci/conda/compile.sh000775 001754 001755 00000001155 14764566077 017560 0ustar00e012349e012349000000 000000 #!/bin/bash mkdir packages CONDA_PLAT="" if grep -q "windows" <<< "$GHA_CI_PLATFORM"; then CONDA_PLAT="win" ARCH="64" fi if grep -q "ubuntu" <<< "$GHA_CI_PLATFORM"; then CONDA_PLAT="linux" ARCH="64" fi if grep -q "macos-14" <<< "$GHA_CI_PLATFORM"; then CONDA_PLAT="osx" ARCH="arm64" elif grep -q "macos" <<< "$GHA_CI_PLATFORM"; then CONDA_PLAT="osx" ARCH="64" fi conda build recipe --clobber-file recipe/recipe_clobber.yaml --output-folder packages -m ".ci_support/${CONDA_PLAT}_${ARCH}_.yaml" conda install -c ./packages proj #projinfo -s NAD27 -t EPSG:4269 --area "USA - Missouri" proj-9.6.0/scripts/ci/conda/setup.sh000775 001754 001755 00000000506 14764566077 017267 0ustar00e012349e012349000000 000000 #!/bin/bash conda update -n base -c defaults conda -y conda install conda-build ninja compilers -y pwd ls git clone https://github.com/conda-forge/proj.4-feedstock.git cd proj.4-feedstock cat > recipe/recipe_clobber.yaml <= 207 || /bin/true) if test "$CPPCHECK_VERSION_GT_2_7" = 1; then POSIX="--library=posix" else POSIX="--std=posix" fi echo "" > ${LOG_FILE} for dirname in ${TOPDIR}/src; do echo "Running cppcheck on $dirname... (can be long)" if ! cppcheck --inline-suppr --template='{file}:{line},{severity},{id},{message}' \ --enable=all --inconclusive "$POSIX" \ -DCPPCHECK -D__cplusplus=201103L -DNAN \ -I${TOPDIR}/src -I${TOPDIR}/include \ "$dirname" \ -j 8 >>${LOG_FILE} 2>&1 ; then echo "cppcheck failed" exit 1 fi done ret_code=0 grep -v "unmatchedSuppression" ${LOG_FILE} \ | grep -v "nn.hpp" \ | grep -v "nlohmann/json.hpp" \ | grep -v "wkt1_generated_parser" \ | grep -v "wkt2_generated_parser" \ | grep -v "passedByValue,Function parameter 'coo' should be passed by const reference" \ | grep -v "passedByValue,Function parameter 'lpz' should be passed by const reference" \ | grep -v "passedByValue,Function parameter 'xyz' should be passed by const reference" \ | grep -v "passedByValue,Function parameter 'in' should be passed by const reference" \ | grep -v "knownConditionTrueFalse,Condition '!allowEmptyIntersection' is always false" \ | grep -v -e "unitconvert.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \ | grep -v -e "helmert.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \ | grep -v -e "molodensky.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \ | grep -v -e "vgridshift.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \ | grep -v -e "defines member function with name.*also defined in its parent" \ | grep -v "passedByValueCallback,Function parameter 'lpz' should be passed by const reference" \ | grep -v "passedByValueCallback,Function parameter 'xyz' should be passed by const reference" \ | grep -v "passedByValueCallback,Function parameter 'geod' should be passed by const reference" \ | grep -v "passedByValueCallback,Function parameter 'cart' should be passed by const reference" \ | grep -v "passedByValueCallback,Function parameter 'in' should be passed by const reference" \ > ${LOG_FILE}.tmp mv ${LOG_FILE}.tmp ${LOG_FILE} if grep "null pointer" ${LOG_FILE} ; then echo "Null pointer check failed" ret_code=1 fi if grep "duplicateBreak" ${LOG_FILE} ; then echo "duplicateBreak check failed" ret_code=1 fi if grep "duplicateBranch" ${LOG_FILE} ; then echo "duplicateBranch check failed" ret_code=1 fi if grep "uninitMemberVar" ${LOG_FILE} ; then echo "uninitMemberVar check failed" ret_code=1 fi if grep "useInitializationList" ${LOG_FILE} ; then echo "uninitMemberVar check failed" ret_code=1 fi if grep "clarifyCalculation" ${LOG_FILE} ; then echo "clarifyCalculation check failed" ret_code=1 fi if grep "invalidPrintfArgType_uint" ${LOG_FILE} ; then echo "invalidPrintfArgType_uint check failed" ret_code=1 fi if grep "catchExceptionByValue" ${LOG_FILE} ; then echo "catchExceptionByValue check failed" ret_code=1 fi if grep "memleakOnRealloc" ${LOG_FILE} ; then echo "memleakOnRealloc check failed" ret_code=1 fi if grep "arrayIndexOutOfBoundsCond" ${LOG_FILE} ; then echo "arrayIndexOutOfBoundsCond check failed" ret_code=1 fi if grep "arrayIndexOutOfBounds," ${LOG_FILE} ; then echo "arrayIndexOutOfBounds check failed" ret_code=1 fi if grep "syntaxError" ${LOG_FILE} | grep -v "is invalid C code" ; then echo "syntaxError check failed" ret_code=1 fi if grep "memleak," ${LOG_FILE} ; then echo "memleak check failed" ret_code=1 fi if grep "eraseDereference" ${LOG_FILE} ; then echo "eraseDereference check failed" ret_code=1 fi if grep "memsetClass," ${LOG_FILE} ; then echo "memsetClass check failed" ret_code=1 fi if grep "uninitvar," ${LOG_FILE} ; then echo "uninitvar check failed" ret_code=1 fi if grep "uninitdata," ${LOG_FILE} ; then echo "uninitdata check failed" ret_code=1 fi if grep "va_list_usedBeforeStarted" ${LOG_FILE} ; then echo "va_list_usedBeforeStarted check failed" ret_code=1 fi if grep "duplInheritedMember" ${LOG_FILE} ; then echo "duplInheritedMember check failed" ret_code=1 fi if grep "terminateStrncpy" ${LOG_FILE} ; then echo "terminateStrncpy check failed" ret_code=1 fi if grep "operatorEqVarError" ${LOG_FILE} ; then echo "operatorEqVarError check failed" ret_code=1 fi if grep "uselessAssignmentPtrArg" ${LOG_FILE} ; then echo "uselessAssignmentPtrArg check failed" ret_code=1 fi if grep "bufferNotZeroTerminated" ${LOG_FILE} ; then echo "bufferNotZeroTerminated check failed" ret_code=1 fi if grep "sizeofDivisionMemfunc" ${LOG_FILE} ; then echo "sizeofDivisionMemfunc check failed" ret_code=1 fi if grep "selfAssignment" ${LOG_FILE} ; then echo "selfAssignment check failed" ret_code=1 fi if grep "invalidPrintfArgType_sint" ${LOG_FILE} ; then echo "invalidPrintfArgType_sint check failed" ret_code=1 fi if grep "redundantAssignInSwitch" ${LOG_FILE} ; then echo "redundantAssignInSwitch check failed" ret_code=1 fi if grep "publicAllocationError" ${LOG_FILE} ; then echo "publicAllocationError check failed" ret_code=1 fi if grep "invalidScanfArgType_int" ${LOG_FILE} ; then echo "invalidScanfArgType_int check failed" ret_code=1 fi if grep "invalidscanf," ${LOG_FILE} ; then echo "invalidscanf check failed" ret_code=1 fi if grep "moduloAlwaysTrueFalse" ${LOG_FILE} ; then echo "moduloAlwaysTrueFalse check failed" ret_code=1 fi if grep "charLiteralWithCharPtrCompare" ${LOG_FILE} ; then echo "charLiteralWithCharPtrCompare check failed" ret_code=1 fi if grep "noConstructor" ${LOG_FILE} ; then echo "noConstructor check failed" ret_code=1 fi if grep "noExplicitConstructor" ${LOG_FILE} ; then echo "noExplicitConstructor check failed" ret_code=1 fi if grep "noCopyConstructor" ${LOG_FILE} ; then echo "noCopyConstructor check failed" ret_code=1 fi if grep "passedByValue" ${LOG_FILE} ; then echo "passedByValue check failed" ret_code=1 fi if grep "postfixOperator" ${LOG_FILE} ; then echo "postfixOperator check failed" ret_code=1 fi if grep "redundantCopy" ${LOG_FILE} ; then echo "redundantCopy check failed" ret_code=1 fi if grep "stlIfStrFind" ${LOG_FILE} ; then echo "stlIfStrFind check failed" ret_code=1 fi if grep "functionStatic" ${LOG_FILE} ; then echo "functionStatic check failed" ret_code=1 fi if grep "knownConditionTrueFalse" ${LOG_FILE} ; then echo "knownConditionTrueFalse check failed" ret_code=1 fi if grep "arrayIndexThenCheck" ${LOG_FILE} ; then echo "arrayIndexThenCheck check failed" ret_code=1 fi if grep "unusedPrivateFunction" ${LOG_FILE} ; then echo "unusedPrivateFunction check failed" ret_code=1 fi if grep "redundantCondition" ${LOG_FILE} ; then echo "redundantCondition check failed" ret_code=1 fi if grep "unusedStructMember" ${LOG_FILE} ; then echo "unusedStructMember check failed" ret_code=1 fi if grep "multiCondition" ${LOG_FILE} ; then echo "multiCondition check failed" ret_code=1 fi if grep "duplicateExpression" ${LOG_FILE} ; then echo "duplicateExpression check failed" ret_code=1 fi if grep "operatorEq" ${LOG_FILE} ; then echo "operatorEq check failed" ret_code=1 fi if grep "truncLongCastAssignment" ${LOG_FILE} ; then echo "truncLongCastAssignment check failed" ret_code=1 fi if grep "exceptRethrowCopy" ${LOG_FILE} ; then echo "exceptRethrowCopy check failed" ret_code=1 fi if grep "unusedVariable" ${LOG_FILE} ; then echo "unusedVariable check failed" ret_code=1 fi if grep "unsafeClassCanLeak" ${LOG_FILE} ; then echo "unsafeClassCanLeak check failed" ret_code=1 fi if grep "unsignedLessThanZero" ${LOG_FILE} ; then echo "unsignedLessThanZero check failed" ret_code=1 fi if grep "unpreciseMathCall" ${LOG_FILE} ; then echo "unpreciseMathCall check failed" ret_code=1 fi if grep "unreachableCode" ${LOG_FILE} ; then echo "unreachableCode check failed" ret_code=1 fi if grep "clarifyCondition" ${LOG_FILE} ; then echo "clarifyCondition check failed" ret_code=1 fi if grep "redundantIfRemove" ${LOG_FILE} ; then echo "redundantIfRemove check failed" ret_code=1 fi if grep "unassignedVariable" ${LOG_FILE} ; then echo "unassignedVariable check failed" ret_code=1 fi if grep "redundantAssignment" ${LOG_FILE} ; then echo "redundantAssignment check failed" ret_code=1 fi if grep "unreadVariable" ${LOG_FILE} ; then echo "unreadVariable check failed" ret_code=1 fi if grep "AssignmentAddressToInteger" ${LOG_FILE} ; then echo "AssignmentAddressToInteger check failed" ret_code=1 fi # Check any remaining errors if grep "error," ${LOG_FILE} | grep -v "uninitvar" | \ grep -v "memleak," | grep -v "memleakOnRealloc" | \ grep -v "is invalid C code" ; then echo "Errors check failed" ret_code=1 fi # Check any remaining warnings if grep "warning," ${LOG_FILE}; then echo "Warnings check failed" ret_code=1 fi if [ ${ret_code} = 0 ]; then echo "cppcheck succeeded" fi exit ${ret_code} proj-9.6.0/scripts/create_c_api_projections.py000775 001754 001755 00000020213 14764566077 021500 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Parse XML output of Doxygen on coordinateoperation.hpp to creat # C API for projections. # Author: Even Rouault # ############################################################################### # Copyright (c) 2018, 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. ############################################################################### from lxml import etree import os script_dir_name = os.path.dirname(os.path.realpath(__file__)) # Make sure to run doxygen if not 'SKIP_DOXYGEN' in os.environ: os.system("bash " + os.path.join(script_dir_name, "doxygen.sh")) xmlfilename = os.path.join(os.path.dirname(script_dir_name), 'docs/build/xml/classosgeo_1_1proj_1_1operation_1_1Conversion.xml') tree = etree.parse(open(xmlfilename, 'rt')) root = tree.getroot() compounddef = root.find('compounddef') header = open('projections.h', 'wt') cppfile = open('projections.cpp', 'wt') test_cppfile = open('test_projections.cpp', 'wt') header.write("/* BEGIN: Generated by scripts/create_c_api_projections.py*/\n") cppfile.write("/* BEGIN: Generated by scripts/create_c_api_projections.py*/\n") cppfile.write("\n"); test_cppfile.write("/* BEGIN: Generated by scripts/create_c_api_projections.py*/\n") def snake_casify(s): out = '' lastWasLowerAlpha = False for c in s: if c.isupper(): if lastWasLowerAlpha: out += '_' out += c.lower() lastWasLowerAlpha = False else: out += c lastWasLowerAlpha = c.isalpha() return out for sectiondef in compounddef.iter('sectiondef'): if sectiondef.attrib['kind'] == 'public-static-func': for func in sectiondef.iter('memberdef'): name = func.find('name').text assert name.startswith('create') if name in ('create', 'createChangeVerticalUnit', 'createAxisOrderReversal', 'createGeographicGeocentric'): continue params = [] has_angle = False has_linear = False for param in func.iter('param'): type = param.find('type').xpath("normalize-space()") if type.find('Angle') >= 0: has_angle = True if type.find('Length') >= 0: has_linear = True paramname = param.find('declname').text if paramname == 'properties': continue params.append((type, snake_casify(paramname))) shortName = name[len('create'):] c_shortName = snake_casify(shortName) decl = "proj_create_conversion_" decl += c_shortName decl += "(\n" decl += " PJ_CONTEXT *ctx,\n" has_output_params = False for param in params: if has_output_params: decl += ",\n" if param[0] in ('int', 'bool'): decl += " int " + param[1] else: decl += " double " + param[1] has_output_params = True if has_angle: if has_output_params: decl += ",\n" decl += " const char* ang_unit_name, double ang_unit_conv_factor" has_output_params = True if has_linear: if has_output_params: decl += ",\n" decl += " const char* linear_unit_name, double linear_unit_conv_factor" decl += ")" header.write("PJ PROJ_DLL *" + decl + ";\n\n") briefdescription = func.find('briefdescription/para').xpath("normalize-space()") briefdescription = briefdescription.replace("Instantiate ", "Instantiate a ProjectedCRS with ") cppfile.write("// ---------------------------------------------------------------------------\n\n") cppfile.write("/** \\brief " + briefdescription + "\n") cppfile.write(" *\n") cppfile.write(" * See osgeo::proj::operation::Conversion::create" + shortName + "().\n") cppfile.write(" *\n") cppfile.write(" * Linear parameters are expressed in (linear_unit_name, linear_unit_conv_factor).\n") if has_angle: cppfile.write(" * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor).\n") cppfile.write(" */\n") cppfile.write("PJ* " + decl + "{\n"); cppfile.write(" SANITIZE_CTX(ctx);\n"); cppfile.write(" try {\n"); if has_linear: cppfile.write(" UnitOfMeasure linearUnit(createLinearUnit(linear_unit_name, linear_unit_conv_factor));\n") if has_angle: cppfile.write(" UnitOfMeasure angUnit(createAngularUnit(ang_unit_name, ang_unit_conv_factor));\n") cppfile.write(" auto conv = Conversion::create" + shortName + "(PropertyMap()") for param in params: if param[0] in 'int': cppfile.write(", " + param[1]) elif param[0] in 'bool': cppfile.write(", " + param[1] + " != 0") elif param[0].find('Angle') >= 0: cppfile.write(", Angle(" + param[1] + ", angUnit)") elif param[0].find('Length') >= 0: cppfile.write(", Length(" + param[1] + ", linearUnit)") elif param[0].find('Scale') >= 0: cppfile.write(", Scale(" + param[1] + ")") cppfile.write(");\n") cppfile.write(" return proj_create_conversion(ctx, conv);\n") cppfile.write(" } catch (const std::exception &e) {\n"); cppfile.write(" proj_log_error(ctx, __FUNCTION__, e.what());\n") cppfile.write(" }\n") cppfile.write(" return nullptr;\n") cppfile.write("}\n") test_cppfile.write("{\n") test_cppfile.write(" auto projCRS = proj_create_conversion_" + c_shortName + "(\n") test_cppfile.write(" m_ctxt") if c_shortName == 'utm': test_cppfile.write(", 1") else: for param in params: test_cppfile.write(", 0") if has_angle: test_cppfile.write(", \"Degree\", 0.0174532925199433") if has_linear: test_cppfile.write(", \"Metre\", 1.0") test_cppfile.write(");\n") test_cppfile.write(" ObjectKeeper keeper_projCRS(projCRS);\n") test_cppfile.write(" ASSERT_NE(projCRS, nullptr);\n") test_cppfile.write("}\n") header.write("/* END: Generated by scripts/create_c_api_projections.py*/\n") cppfile.write("/* END: Generated by scripts/create_c_api_projections.py*/\n") test_cppfile.write("/* END: Generated by scripts/create_c_api_projections.py*/\n") print('projections.h and .cpp, and test_projections.cpp have been generated. Manually merge them now') proj-9.6.0/scripts/create_proj_symbol_rename.sh000775 001754 001755 00000005715 14764566077 021670 0ustar00e012349e012349000000 000000 #!/bin/bash # Script to extract exported symbols and rename them # to avoid clashing with other older libproj # # This is done in provision for the integration of PROJ master with GDAL. GDAL is # a complex library that links with many libraries, a number of them linking with # PROJ. However in the continuous integration setups used by GDAL, it would be # impractical to recompile all those libraries that use the system libproj (4.X or 5.X) # that comes with the distribution. Linking GDAL directly against PROJ master # and this system libproj with potential different ABI is prone to clash/crash # (we experimented that painfully in GDAL with its internal libtiff 4.X copy whereas # systems shipped with libtiff 3.X) # Hence this solution to rename the symbols of PROJ master so that PROJ master # can be used by GDAL without conflicting with the system PROJ. # The renaming only happens if -DPROJ_RENAME_SYMBOLS is passed in CFLAGS and CXXFLAGS. # # Note: we potentially should do the same for C++ symbols, but that is not needed # for now, and we would just set the NS_PROJ existing macro to change the C++ base # namespace which defaults to osgeo::proj currently. # To be run from a 'build' subdir after running configure PROJ_ROOT=$(cd $(dirname ${BASH_SOURCE[0]})/..; pwd) rm -rf tmp_alias mkdir tmp_alias for i in ${PROJ_ROOT}/src/*.c; do echo $i (cd tmp_alias; gcc -fvisibility=hidden ${i} -I../src -I${PROJ_ROOT}/src -I${PROJ_ROOT}/include -fPIC -c) done for i in ${PROJ_ROOT}/src/*.cpp ${PROJ_ROOT}/src/iso19111/*.cpp ${PROJ_ROOT}/src/iso19111/operation/*.cpp; do echo $i (cd tmp_alias; g++ -fvisibility=hidden -std=c++11 ${i} -I../src -I${PROJ_ROOT}/src -I${PROJ_ROOT}/include -fPIC -c) done (cd tmp_alias; g++ -fvisibility=hidden -std=c++11 *.o -shared -o libproj.so) OUT_FILE=proj_symbol_rename.h rm $OUT_FILE 2>/dev/null echo "/* This is a generated file by create_proj_symbol_rename.sh. *DO NOT EDIT MANUALLY !* */" >> $OUT_FILE echo "#ifndef PROJ_SYMBOL_RENAME_H" >> $OUT_FILE echo "#define PROJ_SYMBOL_RENAME_H" >> $OUT_FILE symbol_list=$(objdump -t tmp_alias/libproj.so | grep " g " | grep .text | awk '{print $6}' | grep -v -e _Z | sort) for symbol in $symbol_list do echo "#define $symbol internal_$symbol" >> $OUT_FILE done rodata_symbol_list=$(objdump -t tmp_alias/libproj.so | grep " g O \\.rodata" | awk '{print $6}') for symbol in $rodata_symbol_list do echo "#define $symbol internal_$symbol" >> $OUT_FILE done #data_symbol_list=$(objdump -t tmp_alias/libproj.so | grep "\\.data" | grep -v -e __dso_handle -e __TMC_END__ | awk '{print $6}' | grep -v "\\."| grep -v _Z) #for symbol in $data_symbol_list #do # echo "#define $symbol internal_$symbol" >> $OUT_FILE #done bss_symbol_list=$(objdump -t tmp_alias/libproj.so | grep "g O \\.bss" | awk '{print $6}' | grep -v "\\."| grep -v _Z) for symbol in $bss_symbol_list do echo "#define $symbol internal_$symbol" >> $OUT_FILE done echo "#endif /* PROJ_SYMBOL_RENAME_H */" >> $OUT_FILE proj-9.6.0/scripts/data/000775 001754 001755 00000000000 14764566152 015013 5ustar00e012349e012349000000 000000 proj-9.6.0/scripts/data/naifcodes_radii_m_wAsteroids_IAU2015.csv000664 001754 001755 00000021123 14764566077 024366 0ustar00e012349e012349000000 000000 Naif_id,Body,IAU2015_Mean,IAU2015_Semimajor,IAU2015_Axisb,IAU2015_Semiminor,rotation,origin_long_name,origin_lon_pos 10,Sun,695700000.00,695700000.00,695700000.00,695700000.00,Direct,, 199,Mercury,2439400.00,2440530.00,2440530.00,2438260.00,Direct,Hun Kal,20 W 299,Venus,6051800.00,6051800.00,6051800.00,6051800.00,Retrograde,Ariadne,0 399,Earth,6371008.40,6378136.60,6378136.60,6356751.90,Direct,Greenwich,0 301,Moon,1737400.00,1737400.00,1737400.00,1737400.00,Direct,, 499,Mars,3389500.00,3396190.00,3396190.00,3376200.00,Direct,Viking 1 lander,47.95137 W 401,Phobos,11080.00,13000.00,11400.00,9100.00,Direct,, 402,Deimos,6200.00,7800.00,6000.00,5100.00,Direct,, 599,Jupiter,69911000.00,71492000.00,71492000.00,66854000.00,Direct,, 501,Io,1821490.00,1829400.00,1819400.00,1815700.00,Direct,The mean sub-Jovian direction,0 502,Europa,1560800.00,1562600.00,1560300.00,1559500.00,Direct,Cilix,182 W 503,Ganymede,2631200.00,2631200.00,2631200.00,2631200.00,Direct,Anat,128 W 504,Callisto,2410300.00,2410300.00,2410300.00,2410300.00,Direct,Saga,326 W 505,Amalthea,83500.00,125000.00,73000.00,64000.00,Direct,, 506,Himalia,85000.00,85000.00,85000.00,85000.00,,, 507,Elara,40000.00,40000.00,40000.00,40000.00,,, 508,Pasiphae,18000.00,18000.00,18000.00,18000.00,,, 509,Sinope,14000.00,14000.00,14000.00,14000.00,,, 510,Lysithea,12000.00,12000.00,12000.00,12000.00,,, 511,Carme,15000.00,15000.00,15000.00,15000.00,,, 512,Ananke,10000.00,10000.00,10000.00,10000.00,,, 513,Leda,5000.00,5000.00,5000.00,5000.00,,, 514,Thebe,49300.00,58000.00,49000.00,42000.00,Direct,, 515,Adrastea,8200.00,10000.00,8000.00,7000.00,Direct,, 516,Metis,21500.00,30000.00,20000.00,17000.00,Direct,, 517,Callirrhoe,-1,-1,-1,-1,,, 518,Themisto,-1,-1,-1,-1,,, 519,Magaclite,-1,-1,-1,-1,,, 520,Taygete,-1,-1,-1,-1,,, 521,Chaldene,-1,-1,-1,-1,,, 522,Harpalyke,-1,-1,-1,-1,,, 523,Kalyke,-1,-1,-1,-1,,, 524,Iocaste,-1,-1,-1,-1,,, 525,Erinome,-1,-1,-1,-1,,, 526,Isonoe,-1,-1,-1,-1,,, 527,Praxidike,-1,-1,-1,-1,,, 528,Autonoe,-1,-1,-1,-1,,, 529,Thyone,-1,-1,-1,-1,,, 530,Hermippe,-1,-1,-1,-1,,, 531,Aitne,-1,-1,-1,-1,,, 532,Eurydome,-1,-1,-1,-1,,, 533,Euanthe,-1,-1,-1,-1,,, 534,Euporie,-1,-1,-1,-1,,, 535,Orthosie,-1,-1,-1,-1,,, 536,Sponde,-1,-1,-1,-1,,, 537,Kale,-1,-1,-1,-1,,, 538,Pasithee,-1,-1,-1,-1,,, 539,Hegemone,-1,-1,-1,-1,,, 540,Mneme,-1,-1,-1,-1,,, 541,Aoede,-1,-1,-1,-1,,, 542,Thelxinoe,-1,-1,-1,-1,,, 543,Arche,-1,-1,-1,-1,,, 544,Kallichore,-1,-1,-1,-1,,, 545,Helike,-1,-1,-1,-1,,, 546,Carpo,-1,-1,-1,-1,,, 547,Eukelade,-1,-1,-1,-1,,, 548,Cyllene,-1,-1,-1,-1,,, 549,Kore,-1,-1,-1,-1,,, 550,Herse,-1,-1,-1,-1,,, 699,Saturn,58232000.00,60268000.00,60268000.00,54364000.00,Direct,, 601,Mimas,198200.00,207800.00,196700.00,190600.00,Direct,Palomides,162 W 602,Enceladus,252100.00,256600.00,251400.00,248300.00,Direct,Salih,5 W 603,Tethys,531000.00,538400.00,528300.00,526300.00,Direct,Arete,299 W 604,Dione,561400.00,563400.00,561300.00,559600.00,Direct,Palinurus,63 W 605,Rhea,763500.00,765000.00,763100.00,762400.00,Direct,Tore,340 W 606,Titan,2575000.00,2575150.00,2574780.00,2574470.00,Direct,, 607,Hyperion,135000.00,180100.00,133000.00,102700.00,,, 608,Iapetus,734300.00,745700.00,745700.00,712100.00,Direct,Almeric,276 W 609,Phoebe,106500.00,109400.00,108500.00,101800.00,Direct,, 610,Janus,89200.00,101700.00,93000.00,76300.00,Direct,, 611,Epimetheus,58200.00,64900.00,57300.00,53000.00,Direct,, 612,Helene,18000.00,22500.00,19600.00,13300.00,Direct,, 613,Telesto,12400.00,16300.00,11800.00,9800.00,Direct,, 614,Calypso,9600.00,15300.00,9300.00,6300.00,Direct,, 615,Atlas,15100.00,20500.00,17800.00,9400.00,Direct,, 616,Prometheus,43100.00,68200.00,41600.00,28200.00,Direct,, 617,Pandora,40600.00,52200.00,40800.00,31500.00,Direct,, 618,Pan,14000.00,17200.00,15400.00,10400.00,Direct,, 619,Ymir,-1,-1,-1,-1,,, 620,Paaliaq,-1,-1,-1,-1,,, 621,Tarvos,-1,-1,-1,-1,,, 622,Ijiraq,-1,-1,-1,-1,,, 623,Suttungr,-1,-1,-1,-1,,, 624,Kiviuq,-1,-1,-1,-1,,, 625,Mundilfari,-1,-1,-1,-1,,, 626,Albiorix,-1,-1,-1,-1,,, 627,Skathi,-1,-1,-1,-1,,, 628,Erriapo,-1,-1,-1,-1,,, 629,Siarnaq,-1,-1,-1,-1,,, 630,Thrymr,-1,-1,-1,-1,,, 631,Narvi,-1,-1,-1,-1,,, 632,Methone,1450.00,1940.00,1290.00,1210.00,,, 633,Pallene,2230.00,2880.00,2080.00,1800.00,,, 634,Polydeuces,1300.00,1500.00,1200.00,1000.00,,, 635,Daphnis,3800.00,4600.00,4500.00,2800.00,,, 636,Aegir,-1,-1,-1,-1,,, 637,Bebhionn,-1,-1,-1,-1,,, 638,Bergelmir,-1,-1,-1,-1,,, 639,Bestla,-1,-1,-1,-1,,, 640,Farbauti,-1,-1,-1,-1,,, 641,Fenrir,-1,-1,-1,-1,,, 642,Fornjot,-1,-1,-1,-1,,, 643,Hati,-1,-1,-1,-1,,, 644,Hyrrokkin,-1,-1,-1,-1,,, 645,Kari,-1,-1,-1,-1,,, 646,Loge,-1,-1,-1,-1,,, 647,Skoll,-1,-1,-1,-1,,, 648,Sutur,-1,-1,-1,-1,,, 649,Anthe,500.00,500.00,500.00,500.00,,, 650,Jarnsaxa,-1,-1,-1,-1,,, 651,Greip,-1,-1,-1,-1,,, 652,Tarqeq,-1,-1,-1,-1,,, 653,Aegaeon,330.00,700.00,250.00,200.00,,, 799,Uranus,25362000.00,25559000.00,25559000.00,24973000.00,Retrograde,, 701,Ariel,578900.00,581100.00,577900.00,577700.00,Retrograde,, 702,Umbriel,584700.00,584700.00,584700.00,584700.00,Retrograde,, 703,Titania,788900.00,788900.00,788900.00,788900.00,Retrograde,, 704,Oberon,761400.00,761400.00,761400.00,761400.00,Retrograde,, 705,Miranda,235800.00,240400.00,234200.00,232900.00,Retrograde,, 706,Cordelia,13000.00,13000.00,13000.00,13000.00,Retrograde,, 707,Ophelia,15000.00,15000.00,15000.00,15000.00,Retrograde,, 708,Bianca,21000.00,21000.00,21000.00,21000.00,Retrograde,, 709,Cressida,31000.00,31000.00,31000.00,31000.00,Retrograde,, 710,Desdemona,27000.00,27000.00,27000.00,27000.00,Retrograde,, 711,Juliet,42000.00,42000.00,42000.00,42000.00,Retrograde,, 712,Portia,54000.00,54000.00,54000.00,54000.00,Retrograde,, 713,Rosalind,27000.00,27000.00,27000.00,27000.00,Retrograde,, 714,Belinda,33000.00,33000.00,33000.00,33000.00,Retrograde,, 715,Puck,77000.00,77000.00,77000.00,77000.00,Retrograde,, 716,Caliban,-1,-1,-1,-1,,, 717,Sycorax,-1,-1,-1,-1,,, 718,Prospero,-1,-1,-1,-1,,, 719,Setebos,-1,-1,-1,-1,,, 720,Stephano,-1,-1,-1,-1,,, 721,Trinculo,-1,-1,-1,-1,,, 722,Francisco,-1,-1,-1,-1,,, 723,Margaret,-1,-1,-1,-1,,, 724,Ferdinand,-1,-1,-1,-1,,, 725,Perdita,-1,-1,-1,-1,,, 726,Mab,-1,-1,-1,-1,,, 727,Cupid,-1,-1,-1,-1,,, 899,Neptune,24622000.00,24764000.00,24764000.00,24341000.00,Direct,, 801,Triton,1352600.00,1352600.00,1352600.00,1352600.00,Retrograde,, 802,Nereid,170000.00,170000.00,170000.00,170000.00,,, 803,Naiad,29000.00,29000.00,29000.00,29000.00,Direct,, 804,Thalassa,40000.00,40000.00,40000.00,40000.00,Direct,, 805,Despina,74000.00,74000.00,74000.00,74000.00,Direct,, 806,Galatea,79000.00,79000.00,79000.00,79000.00,Direct,, 807,Larissa,96000.00,96000.00,96000.00,89000.00,Direct,, 808,Proteus,208000.00,218000.00,208000.00,201000.00,Direct,, 809,Halimede,-1,-1,-1,-1,,, 810,Psamathe,-1,-1,-1,-1,,, 811,Sao,-1,-1,-1,-1,,, 812,Laomedeia,-1,-1,-1,-1,,, 813,Neso,-1,-1,-1,-1,,, 999,Pluto,1188300.00,1188300.00,1188300.00,1188300.00,Direct,Mean sub-Charon meridian,0 901,Charon,606000.00,606000.00,606000.00,606000.00,Direct,Mean sub-Pluto meridian,0 1000005,Borrelly,4220.00,3500.00,-1,-1,Direct,, 1000012,Churyumov-Gerasimenko,1650.00,2400.00,1550.00,1200.00,Direct,a large boulder called Cheops,0 1000036,Halley,-1.00,8000.00,4000.00,4000.00,,, 1000041,Hartley 2,580.00,340.00,1160.00,1160.00,,An isolated large mount on the waist near the large lobe,0 1000093,Tempel 1,3000.00,3700.00,2500.00,-1,Direct,A 350 m diameter unnamed circular feature near the Deep Impactor impact site,0 1000107,Wild 2,1975.00,2700.00,1900.00,1500.00,,, 9511010,Gaspra,6100.00,9100.00,5200.00,4400.00,Direct,Charax,0 2431010,Ida,15650.00,26800.00,12000.00,7600.00,Direct,Afon,0 2431011,Dactyl,-1,-1,-1,-1,,, 2000001,Ceres,470000.00,487300.00,487300.00,446000.00,Direct,Kait,0 2000002,Pallas,-1,-1,-1,-1,Direct,The direction (positive x) of the long axis of the Carry et al. (2010) shape model,0 2000004,Vesta,255000.00,289000.00,280000.00,229000.00,Direct,Claudia,146 2000016,Psyche,113000.00,139500.00,116000.0,94500.00,,, 2000021,Lutetia,52500.00,62000.00,50500.00,46500.00,Direct,Arbitrarily defined based on light curve information,0 2000052,52 Europa,157500.00,189500.00,165000.00,124500.00,Direct,long axis that pointed toward the Earth on 2007 May28 8.3125 UT (light-time corrected),0 2000216,Kleopatra,-1,108500.00,47000.00,40500.00,,, 2000433,Eros,8450.00,17000.00,5500.00,5500.00,Direct,unnamed crater,0 2000511,Davida,150000.00,180000.00,147000.00,127000.00,Direct,the long axis that points toward the Earth on 2002 December27 7.83 UT,0 2000253,Mathilde,26500.00,33000.00,24000.00,23000.00,,, 2002867,Steins,2700.00,3240.00,2730.00,2040.00,Direct,Topaz,0 2009969,1992KD,-1,-1,-1,-1,,, 2009969,Braille,-1,-1,-1,-1,,, 2004015,Wilson-Harrington,-1,-1,-1,-1,,, 2004179,Toutatis,-1,2130.00,1015.00,850.00,,, 2025143,Itokawa,-1,268.00,147.00,104.00,Direct,defined with W0=0,0 proj-9.6.0/scripts/doxygen.sh000775 001754 001755 00000006625 14764566077 016135 0ustar00e012349e012349000000 000000 #!/bin/bash set -eu SCRIPT_DIR=$(dirname "$0") case $SCRIPT_DIR in "/"*) ;; ".") SCRIPT_DIR=$(pwd) ;; *) SCRIPT_DIR=$(pwd)/$(dirname "$0") ;; esac TOPDIR="$SCRIPT_DIR/.." pushd "${TOPDIR}" > /dev/null || exit doxygen_version_cmd=$(doxygen --version) # remove extra info after space doxygen_version=${doxygen_version_cmd%% *} echo "Doxygen version $doxygen_version" if test $doxygen_version = "1.8.17" ; then echo "Doxygen 1.8.17 is incompatible" && /bin/false; fi # HTML generation # Check that doxygen runs warning free rm -rf docs/build/html/ mkdir -p docs/build/html/ doxygen > docs/build/html/docs_log.txt 2>&1 if grep -i warning docs/build/html/docs_log.txt; then echo "Doxygen warnings found" && cat docs/build/html/docs_log.txt && /bin/false; else echo "No Doxygen warnings found"; fi rm -rf docs/build/xml/ (cat Doxyfile; printf "GENERATE_HTML=NO\nGENERATE_XML=YES\nINPUT= src/iso19111 src/iso19111/operation include/proj src/proj.h src/filemanager.cpp src/networkfilemanager.cpp src/coordinates.cpp src/trans_bounds.cpp src/general_doc.dox") | doxygen - > docs/build/docs_log.txt 2>&1 if grep -i warning docs/build/docs_log.txt; then echo "Doxygen warnings found" && cat docs/build/docs_log.txt && /bin/false; else echo "No Doxygen warnings found"; fi # There is a confusion for Breathe between PROJStringFormatter::Convention and WKTFormatter:Convention sed "s/Convention/Convention_/g" < ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml | sed "s/WKT2_2018/_WKT2_2018/g" | sed "s/WKT2_2019/_WKT2_2019/g" | sed "s/WKT2_2015/_WKT2_2015/g" | sed "s/WKT1_GDAL/_WKT1_GDAL/g" | sed "s/WKT1_ESRI/_WKT1_ESRI/g" > ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml.tmp mv ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml.tmp ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml # Hack for Breathe 4.17.0 issue that is confused by osgeo::proj::common::UnitOfMeasure::Type::NONE (enumeration value of Type) and osgeo::proj::common::UnitOfMeasure::NONE (member value), whereas 4.16.0 works fine. # Filed as https://github.com/michaeljones/breathe/issues/518 sed "s/ NONE<\/name>/ Type::NONE<\/name>/" < ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1common_1_1UnitOfMeasure.xml > ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1common_1_1UnitOfMeasure.xml.tmp mv ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1common_1_1UnitOfMeasure.xml.tmp ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1common_1_1UnitOfMeasure.xml sed 's/refid="classosgeo_1_1proj_1_1common_1_1UnitOfMeasure_1a400c71b5a6d7927e3e5850cee2b07d10ab50339a10e1de285ac99d4c3990b8693" kind="enumvalue">NONE<\/name><\/member>/refid="classosgeo_1_1proj_1_1common_1_1UnitOfMeasure_1a400c71b5a6d7927e3e5850cee2b07d10ab50339a10e1de285ac99d4c3990b8693" kind="enumvalue">Type::NONE<\/name><\/member>/' < ${TOPDIR}/docs/build/xml/index.xml > ${TOPDIR}/docs/build/xml/index.xml.tmp mv ${TOPDIR}/docs/build/xml/index.xml.tmp ${TOPDIR}/docs/build/xml/index.xml sed "s/noexceptoverride/noexcept override/" < ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1util_1_1Exception.xml > ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1util_1_1Exception.xml.tmp mv ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1util_1_1Exception.xml.tmp ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1util_1_1Exception.xml popd > /dev/null || exit proj-9.6.0/scripts/dump_exported_symbols.sh000775 001754 001755 00000001005 14764566077 021072 0ustar00e012349e012349000000 000000 #!/bin/sh if objdump -TC "$1" | grep "elf64-x86-64">/dev/null; then COLUMN=62 #elif objdump -TC "$1" | grep "elf32-i386">/dev/null; then # COLUMN=46 else echo "Unsupported architecture" exit 1 fi objdump -TC "$1" | grep " g DF .text" | cut -b "${COLUMN}-" | grep -v "thunk to" | sed "s/internal_//" | grep -v "Java_" | sed "s/std::__cxx11::basic_string, std::allocator >/std::string/g" | sed "s/std::string >/std::string>/g" | sed "s/\[abi:cxx11\]//g" | sort -u proj-9.6.0/scripts/filter_lcov_info.py000775 001754 001755 00000001270 14764566077 020010 0ustar00e012349e012349000000 000000 #!/usr/bin/env python # Remove coverage from system include files in lcov output import sys import fnmatch extension_filter = None if len(sys.argv) == 2: extension_filter = sys.argv[1].split(',') output_lines = True for line in sys.stdin.readlines(): if line.startswith('SF:/usr/include'): output_lines = False elif line.startswith('SF:'): if extension_filter: output_lines = False for filter in extension_filter: if fnmatch.fnmatch(line.strip('\n'), filter): output_lines = True break else: output_lines = True if output_lines: sys.stdout.write(line) proj-9.6.0/scripts/fix_typos.sh000775 001754 001755 00000006377 14764566077 016510 0ustar00e012349e012349000000 000000 #!/bin/sh # -*- coding: utf-8 -*- ############################################################################### # $Id$ # # Project: GDAL # Purpose: (Interactive) script to identify and fix typos # Author: Even Rouault # ############################################################################### # Copyright (c) 2016, 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. ############################################################################### if ! test -d fix_typos; then # Get our fork of codespell that adds --words-white-list and full filename support for -S option mkdir fix_typos (cd fix_typos git clone https://github.com/rouault/codespell (cd codespell && git checkout gdal_improvements) # Aggregate base dictionary + QGIS one + Debian Lintian one curl https://raw.githubusercontent.com/qgis/QGIS/master/scripts/spell_check/spelling.dat | sed "s/:/->/" | sed "s/:%//" | grep -v "colour->" | grep -v "colours->" > qgis.txt curl https://salsa.debian.org/lintian/lintian/-/raw/master/data/spelling/corrections | grep "||" | grep -v "#" | sed "s/||/->/" > debian.txt cat codespell/data/dictionary.txt qgis.txt debian.txt | awk 'NF' > gdal_dict.txt echo "difered->deferred" >> gdal_dict.txt echo "differed->deferred" >> gdal_dict.txt grep -v 404 < gdal_dict.txt > gdal_dict.txt.tmp mv gdal_dict.txt.tmp gdal_dict.txt ) fi EXCLUDED_FILES="*configure,config.status,config.sub,*/autom4te.cache/*,libtool,aclocal.m4,depcomp,ltmain.sh,*.pdf,./m4/*,./fix_typos/*,./docs/build/*,./src/*generated*,./test/googletest/*,./include/proj/internal/nlohmann/json.hpp,*.before_reformat,geodesic.h,geodesic.c,geodtest.c,./docs/source/spelling_wordlist.txt,./test/cli/test_proj_nad83.yaml,./test/cli/test_proj_nad27.yaml" WORDS_WHITE_LIST="metres,als,lsat,twon,ang,PJD_ERR_LSAT_NOT_IN_RANGE,COLOR_GRAT,interm,Interm,Cartesian,cartesian,CARTESIAN,kilometre,centimetre,millimetre,millimetres,Australia,LINZ,LaTeX,BibTeX,lon,Lon" python3 fix_typos/codespell/codespell.py -w -i 3 -q 2 -S $EXCLUDED_FILES \ -x scripts/typos_whitelist.txt --words-white-list=$WORDS_WHITE_LIST \ -D fix_typos/gdal_dict.txt ./include ./src ./test ./docs ./cmake ./examples proj-9.6.0/scripts/gen_html_coverage.sh000775 001754 001755 00000001706 14764566077 020123 0ustar00e012349e012349000000 000000 #!/bin/sh set -eu # To filter only on c++ stuff: # scripts/gen_html_coverage.sh -ext "*.cpp,*.hh" SCRIPT_DIR=$(dirname "$0") case $SCRIPT_DIR in "/"*) ;; ".") SCRIPT_DIR=$(pwd) ;; *) SCRIPT_DIR=$(pwd)/$(dirname "$0") ;; esac FILTER="" if test $# -ge 1; then if test "$1" = "--help"; then echo "Usage: gen_html_coverage.sh [--help] [-ext \"ext1,...\"]" exit fi if test "$1" = "-ext"; then FILTER="$2" shift shift fi if test $# -ge 1; then echo "Invalid option: $1" echo "Usage: gen_html_coverage.sh [--help] [-ext \"ext1,...\"]" exit fi fi rm -rf coverage_html lcov --directory src --directory include --capture --output-file proj.info "$SCRIPT_DIR"/filter_lcov_info.py "$FILTER" < proj.info > proj.info.filtered mv proj.info.filtered proj.info genhtml -o ./coverage_html --ignore-errors source --num-spaces 2 proj.info proj-9.6.0/scripts/generate_itrf2020.py000775 001754 001755 00000006543 14764566077 017617 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Generate ITRF2020 to ITRFxxxx Helmert transformations (geocentric # coordinates) from EPSG database. # Author: Even Rouault # ############################################################################### # Copyright (c) 2024, 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. ############################################################################### import subprocess def change_sign(param): tokens = param.split("=") if tokens[1] == "0": return None if tokens[1][0] == '-': return tokens[0] + "=" + tokens[1][1:] else: return tokens[0] + "=-" + tokens[1] def generate(source, dest): process = subprocess.Popen(f"bin/projinfo -s {source} -t {dest} --single-line -o PROJ -q", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, _ = process.communicate() steps = out.decode('ASCII').split('+step') assert len(steps) == 8 txt = steps[4] txt = txt[:-1] assert txt.startswith(" +inv +proj=helmert") txt = txt.replace(" +inv ", "") new_tokens = [] for token in txt.split(" "): if token.startswith("+x=") or token.startswith("+y=") or token.startswith("+z=") or \ token.startswith("+dx=") or token.startswith("+dy=") or token.startswith("+dz=") or \ token.startswith("+rx=") or token.startswith("+ry=") or token.startswith("+rz=") or \ token.startswith("+drx=") or token.startswith("+dry=") or token.startswith("+drz=") or \ token.startswith("+s=") or token.startswith("+ds="): new_token = change_sign(token) if new_token: new_tokens.append(new_token) elif token.startswith("+proj=") or token.startswith("+t_epoch=") or token.startswith("+convention="): new_tokens.append(token) else: assert False, (txt, token) print("<" + dest + "> " + (" ".join(new_tokens))) for dest in ("ITRF2014", "ITRF2008", "ITRF2005", "ITRF2000", "ITRF97", "ITRF96", "ITRF94", "ITRF93", "ITRF92", "ITRF91", "ITRF90", "ITRF89", "ITRF88"): generate("ITRF2020", dest) print("") proj-9.6.0/scripts/grid_checks.py000775 001754 001755 00000012626 14764566077 016741 0ustar00e012349e012349000000 000000 #!/usr/bin/env python ############################################################################### # $Id$ # # Project: PROJ # Purpose: Tool to check consistency of database regarding grids and against # what is available in PROJ-data # Author: Even Rouault # ############################################################################### # Copyright (c) 2019, 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. ############################################################################### import argparse import fnmatch import os import sqlite3 parser = argparse.ArgumentParser( description='Check database and PROJ-data consistency.') parser.add_argument('path_to_proj_db', help='Full pathname to proj.db') parser.add_argument('path_to_proj_data', help='Full pathname to the root of the proj_data_geotiff git repository') group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--not-in-grid-alternatives', dest='not_in_grid_alternatives', action='store_true', help='list grids mentioned in grid_transformation but missing in grid_alternatives') group.add_argument('--not-in-proj-data', dest='not_in_proj_data', action='store_true', help='list grids registered in grid_alternatives, but missing in PROJ-data repository') group.add_argument('--not-in-db', dest='not_in_db', action='store_true', help='list grids in PROJ-data repository, but not registered in grid_alternatives') parser.add_argument('--show-superseded', dest='show_superseded', action='store_true', help='Show superseded grid transformations in --not-in-grid-alternatives mode') args = parser.parse_args() dbname = args.path_to_proj_db proj_data = args.path_to_proj_data if args.not_in_grid_alternatives: conn = sqlite3.connect(dbname) header = '"Authority","code","name","extent_name","grid_name"' if args.show_superseded: header += ',"is_superseded"' print(header) sql = """ SELECT gt.auth_name, gt.code, gt.name, e.name, gt.grid_name, EXISTS (SELECT 1 FROM supersession WHERE superseded_table_name = 'grid_transformation' AND superseded_auth_name = gt.auth_name AND superseded_code = gt.code) AS superseded FROM grid_transformation gt JOIN usage u ON u.object_table_name = 'grid_transformation' AND u.object_auth_name = gt.auth_name AND u.object_code = gt.code JOIN extent e ON e.auth_name = u.extent_auth_name AND e.code = u.extent_code WHERE gt.deprecated = 0 AND NOT EXISTS (SELECT 1 FROM grid_alternatives WHERE original_grid_name = gt.grid_name)""" if not args.show_superseded: sql += " AND superseded = 0" res = conn.execute(sql) for row in res: if not args.show_superseded: row = [x for x in row][0:-1] print(','.join(['"' + str(x) + '"' for x in row])) elif args.not_in_proj_data: set_grids = set() for root, dirnames, filenames in os.walk(proj_data): for filename in fnmatch.filter(filenames, '*'): set_grids.add(filename) conn = sqlite3.connect(dbname) res = conn.execute( "SELECT DISTINCT proj_grid_name FROM grid_alternatives WHERE open_license is NULL OR open_license != 0") for (grid_name,) in res: if grid_name not in set_grids: print('ERROR: grid ' + grid_name + ' in grid_alternatives but missing in PROJ-data') elif args.not_in_db: set_grids = set() for root, dirnames, filenames in os.walk(proj_data): if '.git' in root: continue for filename in fnmatch.filter(filenames, '*'): filename_lower = filename.lower() if '.aux.xml' in filename_lower: continue if '.gsb' in filename_lower or '.gtx' in filename_lower or '.tif' in filename_lower: set_grids.add(filename) conn = sqlite3.connect(dbname) for filename in sorted(set_grids): res = conn.execute( "SELECT 1 FROM grid_alternatives WHERE proj_grid_name = ?", (filename,)) if not res.fetchone(): print('WARNING: grid ' + filename + ' in PROJ-data but missing in grid_alternatives') else: raise Exception('unknown mode') proj-9.6.0/scripts/install_bash_completions.cmake.in000664 001754 001755 00000000720 14764566077 022575 0ustar00e012349e012349000000 000000 set(PROGRAMS projinfo ) set(INSTALL_DIR "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/@BASH_COMPLETIONS_DIR@") file(MAKE_DIRECTORY "${INSTALL_DIR}") foreach (program IN LISTS PROGRAMS) message(STATUS "Installing ${INSTALL_DIR}/${program}") configure_file("@CMAKE_CURRENT_SOURCE_DIR@/${program}-bash-completion.sh" "${INSTALL_DIR}/${program}" COPYONLY) file(APPEND "@PROJECT_BINARY_DIR@/install_manifest_extra.txt" "${INSTALL_DIR}/${program}\n") endforeach () proj-9.6.0/scripts/projinfo-bash-completion.sh000664 001754 001755 00000003125 14764566077 021355 0ustar00e012349e012349000000 000000 # Hashbang deliberately missing because this file should be sourced, not executed function_exists() { declare -f -F "$1" > /dev/null return $? } # Checks that bash-completion is recent enough function_exists _get_comp_words_by_ref || return 0 _projinfo() { local cur prev COMPREPLY=() _get_comp_words_by_ref cur prev choices=$(projinfo completion ${COMP_LINE}) if [[ "$cur" == "=" ]]; then mapfile -t COMPREPLY < <(compgen -W "$choices" --) elif [[ "$cur" == ":" ]]; then mapfile -t COMPREPLY < <(compgen -W "$choices" --) elif [[ "${cur: -1}" == "/" ]]; then mapfile -t COMPREPLY < <(compgen -W "$choices" --) elif [[ "${cur: -2}" == "/ " ]]; then mapfile -t COMPREPLY < <(compgen -W "$choices" --) elif [[ "${cur: -1}" == "+" ]]; then mapfile -t COMPREPLY < <(compgen -W "$choices" --) elif [[ "${cur: -2}" == "+ " ]]; then mapfile -t COMPREPLY < <(compgen -W "$choices" --) elif [[ "$cur" == "!" ]]; then mapfile -t COMPREPLY < <(compgen -W "$choices" -P "! " --) else mapfile -t COMPREPLY < <(compgen -W "$choices" -- "$cur") fi for element in "${COMPREPLY[@]}"; do if [[ $element == */ ]]; then # Do not add a space if one of the suggestion ends with slash compopt -o nospace break elif [[ $element == *= ]]; then # Do not add a space if one of the suggestion ends with equal compopt -o nospace break elif [[ $element == *: ]]; then # Do not add a space if one of the suggestion ends with colon compopt -o nospace break fi done } complete -o default -F _projinfo projinfo proj-9.6.0/scripts/reference_exported_symbols.txt000664 001754 001755 00000322604 14764566077 022300 0ustar00e012349e012349000000 000000 adjlon(double) dmstor(char const*, char**) geod_direct geod_directline geod_gendirect geod_gendirectline geod_geninverse geod_genposition geod_gensetdistance geod_init geod_inverse geod_inverseline geod_lineinit geod_polygon_addedge geod_polygon_addpoint geod_polygonarea geod_polygon_clear geod_polygon_compute geod_polygon_init geod_polygon_testedge geod_polygon_testpoint geod_position geod_setdistance osgeo::proj::common::Angle::~Angle() osgeo::proj::common::Angle::Angle(double) osgeo::proj::common::Angle::Angle(double, osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::common::Angle::Angle(osgeo::proj::common::Angle const&) osgeo::proj::common::DataEpoch::coordinateEpoch() const osgeo::proj::common::DataEpoch::~DataEpoch() osgeo::proj::common::DataEpoch::DataEpoch(osgeo::proj::common::DataEpoch const&) osgeo::proj::common::DataEpoch::DataEpoch(osgeo::proj::common::Measure const&) osgeo::proj::common::DateTime::create(std::string const&) osgeo::proj::common::DateTime::~DateTime() osgeo::proj::common::DateTime::DateTime(osgeo::proj::common::DateTime const&) osgeo::proj::common::DateTime::isISO_8601() const osgeo::proj::common::DateTime::toString() const osgeo::proj::common::IdentifiedObject::alias() const osgeo::proj::common::IdentifiedObject::aliases() const osgeo::proj::common::IdentifiedObject::formatID(osgeo::proj::io::WKTFormatter*) const osgeo::proj::common::IdentifiedObject::getEPSGCode() const osgeo::proj::common::IdentifiedObject::hasEquivalentNameToUsingAlias(osgeo::proj::common::IdentifiedObject const*, std::shared_ptr const&) const osgeo::proj::common::IdentifiedObject::~IdentifiedObject() osgeo::proj::common::IdentifiedObject::IdentifiedObject() osgeo::proj::common::IdentifiedObject::IdentifiedObject(osgeo::proj::common::IdentifiedObject const&) osgeo::proj::common::IdentifiedObject::identifiers() const osgeo::proj::common::IdentifiedObject::isDeprecated() const osgeo::proj::common::IdentifiedObject::name() const osgeo::proj::common::IdentifiedObject::nameStr() const osgeo::proj::common::IdentifiedObject::remarks() const osgeo::proj::common::IdentifiedObject::setProperties(osgeo::proj::util::PropertyMap const&) osgeo::proj::common::Length::~Length() osgeo::proj::common::Length::Length(double) osgeo::proj::common::Length::Length(double, osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::common::Length::Length(osgeo::proj::common::Length const&) osgeo::proj::common::Measure::convertToUnit(osgeo::proj::common::UnitOfMeasure const&) const osgeo::proj::common::Measure::getSIValue() const osgeo::proj::common::Measure::~Measure() osgeo::proj::common::Measure::Measure(double, osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::common::Measure::Measure(osgeo::proj::common::Measure const&) osgeo::proj::common::Measure::operator==(osgeo::proj::common::Measure const&) const osgeo::proj::common::Measure::unit() const osgeo::proj::common::Measure::value() const osgeo::proj::common::ObjectDomain::create(osgeo::proj::util::optional const&, std::shared_ptr const&) osgeo::proj::common::ObjectDomain::domainOfValidity() const osgeo::proj::common::ObjectDomain::_exportToWKT(osgeo::proj::io::WKTFormatter*) const osgeo::proj::common::ObjectDomain::_isEquivalentTo(osgeo::proj::util::IComparable const*, osgeo::proj::util::IComparable::Criterion, std::shared_ptr const&) const osgeo::proj::common::ObjectDomain::~ObjectDomain() osgeo::proj::common::ObjectDomain::ObjectDomain(osgeo::proj::common::ObjectDomain const&) osgeo::proj::common::ObjectDomain::ObjectDomain(osgeo::proj::util::optional const&, std::shared_ptr const&) osgeo::proj::common::ObjectDomain::scope() const osgeo::proj::common::ObjectUsage::baseExportToJSON(osgeo::proj::io::JSONFormatter*) const osgeo::proj::common::ObjectUsage::baseExportToWKT(osgeo::proj::io::WKTFormatter*) const osgeo::proj::common::ObjectUsage::domains() const osgeo::proj::common::ObjectUsage::_isEquivalentTo(osgeo::proj::util::IComparable const*, osgeo::proj::util::IComparable::Criterion, std::shared_ptr const&) const osgeo::proj::common::ObjectUsage::~ObjectUsage() osgeo::proj::common::ObjectUsage::ObjectUsage() osgeo::proj::common::ObjectUsage::ObjectUsage(osgeo::proj::common::ObjectUsage const&) osgeo::proj::common::ObjectUsage::setProperties(osgeo::proj::util::PropertyMap const&) osgeo::proj::common::Scale::~Scale() osgeo::proj::common::Scale::Scale(double) osgeo::proj::common::Scale::Scale(double, osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::common::Scale::Scale(osgeo::proj::common::Scale const&) osgeo::proj::common::UnitOfMeasure::code() const osgeo::proj::common::UnitOfMeasure::codeSpace() const osgeo::proj::common::UnitOfMeasure::conversionToSI() const osgeo::proj::common::UnitOfMeasure::name() const osgeo::proj::common::UnitOfMeasure::operator=(osgeo::proj::common::UnitOfMeasure&&) osgeo::proj::common::UnitOfMeasure::operator=(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::common::UnitOfMeasure::operator!=(osgeo::proj::common::UnitOfMeasure const&) const osgeo::proj::common::UnitOfMeasure::operator==(osgeo::proj::common::UnitOfMeasure const&) const osgeo::proj::common::UnitOfMeasure::type() const osgeo::proj::common::UnitOfMeasure::~UnitOfMeasure() osgeo::proj::common::UnitOfMeasure::UnitOfMeasure(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::common::UnitOfMeasure::UnitOfMeasure(std::string const&, double, osgeo::proj::common::UnitOfMeasure::Type, std::string const&, std::string const&) osgeo::proj::coordinates::CoordinateMetadata::coordinateEpochAsDecimalYear() const osgeo::proj::coordinates::CoordinateMetadata::coordinateEpoch() const osgeo::proj::coordinates::CoordinateMetadata::~CoordinateMetadata() osgeo::proj::coordinates::CoordinateMetadata::create(dropbox::oxygen::nn > const&) osgeo::proj::coordinates::CoordinateMetadata::create(dropbox::oxygen::nn > const&, double) osgeo::proj::coordinates::CoordinateMetadata::create(dropbox::oxygen::nn > const&, double, std::shared_ptr const&) osgeo::proj::coordinates::CoordinateMetadata::crs() const osgeo::proj::coordinates::CoordinateMetadata::promoteTo3D(std::string const&, std::shared_ptr const&) const osgeo::proj::crs::BoundCRS::baseCRS() const osgeo::proj::crs::BoundCRS::baseCRSWithCanonicalBoundCRS() const osgeo::proj::crs::BoundCRS::~BoundCRS() osgeo::proj::crs::BoundCRS::create(dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::BoundCRS::createFromNadgrids(dropbox::oxygen::nn > const&, std::string const&) osgeo::proj::crs::BoundCRS::createFromTOWGS84(dropbox::oxygen::nn > const&, std::vector > const&) osgeo::proj::crs::BoundCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::BoundCRS::hubCRS() const osgeo::proj::crs::BoundCRS::transformation() const osgeo::proj::crs::CompoundCRS::componentReferenceSystems() const osgeo::proj::crs::CompoundCRS::~CompoundCRS() osgeo::proj::crs::CompoundCRS::create(osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&) osgeo::proj::crs::CompoundCRS::identify(std::shared_ptr const&) const osgeo::proj::crs::CRS::alterCSLinearUnit(osgeo::proj::common::UnitOfMeasure const&) const osgeo::proj::crs::CRS::alterGeodeticCRS(dropbox::oxygen::nn > const&) const osgeo::proj::crs::CRS::alterId(std::string const&, std::string const&) const osgeo::proj::crs::CRS::alterName(std::string const&) const osgeo::proj::crs::CRS::canonicalBoundCRS() const osgeo::proj::crs::CRS::createBoundCRSToWGS84IfPossible(std::shared_ptr const&, osgeo::proj::operation::CoordinateOperationContext::IntermediateCRSUse) const osgeo::proj::crs::CRS::~CRS() osgeo::proj::crs::CRS::demoteTo2D(std::string const&, std::shared_ptr const&) const osgeo::proj::crs::CRS::extractGeodeticCRS() const osgeo::proj::crs::CRS::extractGeographicCRS() const osgeo::proj::crs::CRS::extractVerticalCRS() const osgeo::proj::crs::CRS::getNonDeprecated(dropbox::oxygen::nn > const&) const osgeo::proj::crs::CRS::identify(std::shared_ptr const&) const osgeo::proj::crs::CRS::isDynamic(bool) const osgeo::proj::crs::CRS::normalizeForVisualization() const osgeo::proj::crs::CRS::promoteTo3D(std::string const&, std::shared_ptr const&) const osgeo::proj::crs::CRS::shallowClone() const osgeo::proj::crs::CRS::stripVerticalComponent() const osgeo::proj::crs::DerivedCRS::baseCRS() const osgeo::proj::crs::DerivedCRS::~DerivedCRS() osgeo::proj::crs::DerivedCRS::derivingConversion() const osgeo::proj::crs::DerivedGeodeticCRS::baseCRS() const osgeo::proj::crs::DerivedGeodeticCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::DerivedGeodeticCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::DerivedGeodeticCRS::~DerivedGeodeticCRS() osgeo::proj::crs::DerivedGeodeticCRS::_exportToWKT(osgeo::proj::io::WKTFormatter*) const osgeo::proj::crs::DerivedGeographicCRS::baseCRS() const osgeo::proj::crs::DerivedGeographicCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::DerivedGeographicCRS::demoteTo2D(std::string const&, std::shared_ptr const&) const osgeo::proj::crs::DerivedGeographicCRS::~DerivedGeographicCRS() osgeo::proj::crs::DerivedProjectedCRS::baseCRS() const osgeo::proj::crs::DerivedProjectedCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::DerivedProjectedCRS::demoteTo2D(std::string const&, std::shared_ptr const&) const osgeo::proj::crs::DerivedProjectedCRS::~DerivedProjectedCRS() osgeo::proj::crs::DerivedVerticalCRS::baseCRS() const osgeo::proj::crs::DerivedVerticalCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::DerivedVerticalCRS::~DerivedVerticalCRS() osgeo::proj::crs::EngineeringCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::EngineeringCRS::datum() const osgeo::proj::crs::EngineeringCRS::~EngineeringCRS() osgeo::proj::crs::GeodeticCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::GeodeticCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::GeodeticCRS::create(osgeo::proj::util::PropertyMap const&, std::shared_ptr const&, std::shared_ptr const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::GeodeticCRS::create(osgeo::proj::util::PropertyMap const&, std::shared_ptr const&, std::shared_ptr const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::GeodeticCRS::datum() const osgeo::proj::crs::GeodeticCRS::ellipsoid() const osgeo::proj::crs::GeodeticCRS::~GeodeticCRS() osgeo::proj::crs::GeodeticCRS::identify(std::shared_ptr const&) const osgeo::proj::crs::GeodeticCRS::isGeocentric() const osgeo::proj::crs::GeodeticCRS::isSphericalPlanetocentric() const osgeo::proj::crs::GeodeticCRS::primeMeridian() const osgeo::proj::crs::GeodeticCRS::velocityModel() const osgeo::proj::crs::GeographicCRS::coordinateSystem() const osgeo::proj::crs::GeographicCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::GeographicCRS::create(osgeo::proj::util::PropertyMap const&, std::shared_ptr const&, std::shared_ptr const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::GeographicCRS::demoteTo2D(std::string const&, std::shared_ptr const&) const osgeo::proj::crs::GeographicCRS::~GeographicCRS() osgeo::proj::crs::GeographicCRS::is2DPartOf3D(dropbox::oxygen::nn, std::shared_ptr const&) const osgeo::proj::crs::InvalidCompoundCRSException::~InvalidCompoundCRSException() osgeo::proj::crs::InvalidCompoundCRSException::InvalidCompoundCRSException(osgeo::proj::crs::InvalidCompoundCRSException const&) osgeo::proj::crs::ParametricCRS::coordinateSystem() const osgeo::proj::crs::ParametricCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::ParametricCRS::datum() const osgeo::proj::crs::ParametricCRS::~ParametricCRS() osgeo::proj::crs::ProjectedCRS::alterParametersLinearUnit(osgeo::proj::common::UnitOfMeasure const&, bool) const osgeo::proj::crs::ProjectedCRS::baseCRS() const osgeo::proj::crs::ProjectedCRS::coordinateSystem() const osgeo::proj::crs::ProjectedCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::ProjectedCRS::demoteTo2D(std::string const&, std::shared_ptr const&) const osgeo::proj::crs::ProjectedCRS::identify(std::shared_ptr const&) const osgeo::proj::crs::ProjectedCRS::~ProjectedCRS() osgeo::proj::crs::SingleCRS::coordinateSystem() const osgeo::proj::crs::SingleCRS::datum() const osgeo::proj::crs::SingleCRS::datumEnsemble() const osgeo::proj::crs::SingleCRS::~SingleCRS() osgeo::proj::crs::TemporalCRS::coordinateSystem() const osgeo::proj::crs::TemporalCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::TemporalCRS::datum() const osgeo::proj::crs::TemporalCRS::~TemporalCRS() osgeo::proj::crs::VerticalCRS::coordinateSystem() const osgeo::proj::crs::VerticalCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::VerticalCRS::create(osgeo::proj::util::PropertyMap const&, std::shared_ptr const&, std::shared_ptr const&, dropbox::oxygen::nn > const&) osgeo::proj::crs::VerticalCRS::datum() const osgeo::proj::crs::VerticalCRS::geoidModel() const osgeo::proj::crs::VerticalCRS::identify(std::shared_ptr const&) const osgeo::proj::crs::VerticalCRS::velocityModel() const osgeo::proj::crs::VerticalCRS::~VerticalCRS() osgeo::proj::cs::AffineCS::~AffineCS() osgeo::proj::cs::AffineCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::AffineCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::AxisDirection::valueOf(std::string const&) osgeo::proj::cs::CartesianCS::~CartesianCS() osgeo::proj::cs::CartesianCS::createEastingNorthing(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::CartesianCS::createGeocentric(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::CartesianCS::createNorthingEasting(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::CartesianCS::createNorthPoleEastingSouthNorthingSouth(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::CartesianCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::CartesianCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::CartesianCS::createSouthPoleEastingNorthNorthingNorth(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::CartesianCS::createWestingSouthing(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::CoordinateSystemAxis::abbreviation() const osgeo::proj::cs::CoordinateSystemAxis::~CoordinateSystemAxis() osgeo::proj::cs::CoordinateSystemAxis::create(osgeo::proj::util::PropertyMap const&, std::string const&, osgeo::proj::cs::AxisDirection const&, osgeo::proj::common::UnitOfMeasure const&, osgeo::proj::util::optional const&, osgeo::proj::util::optional const&, osgeo::proj::util::optional const&, std::shared_ptr const&) osgeo::proj::cs::CoordinateSystemAxis::create(osgeo::proj::util::PropertyMap const&, std::string const&, osgeo::proj::cs::AxisDirection const&, osgeo::proj::common::UnitOfMeasure const&, std::shared_ptr const&) osgeo::proj::cs::CoordinateSystemAxis::direction() const osgeo::proj::cs::CoordinateSystem::axisList() const osgeo::proj::cs::CoordinateSystemAxis::maximumValue() const osgeo::proj::cs::CoordinateSystemAxis::meridian() const osgeo::proj::cs::CoordinateSystemAxis::minimumValue() const osgeo::proj::cs::CoordinateSystemAxis::rangeMeaning() const osgeo::proj::cs::CoordinateSystemAxis::unit() const osgeo::proj::cs::CoordinateSystem::~CoordinateSystem() osgeo::proj::cs::DateTimeTemporalCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::DateTimeTemporalCS::~DateTimeTemporalCS() osgeo::proj::cs::EllipsoidalCS::createLatitudeLongitudeEllipsoidalHeight(osgeo::proj::common::UnitOfMeasure const&, osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::EllipsoidalCS::createLatitudeLongitude(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::EllipsoidalCS::createLongitudeLatitudeEllipsoidalHeight(osgeo::proj::common::UnitOfMeasure const&, osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::EllipsoidalCS::createLongitudeLatitude(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::EllipsoidalCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::EllipsoidalCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::EllipsoidalCS::~EllipsoidalCS() osgeo::proj::cs::Meridian::create(osgeo::proj::common::Angle const&) osgeo::proj::cs::Meridian::longitude() const osgeo::proj::cs::Meridian::~Meridian() osgeo::proj::cs::OrdinalCS::create(osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&) osgeo::proj::cs::OrdinalCS::~OrdinalCS() osgeo::proj::cs::ParametricCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::ParametricCS::~ParametricCS() osgeo::proj::cs::RangeMeaning::valueOf(std::string const&) osgeo::proj::cs::SphericalCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::SphericalCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::SphericalCS::~SphericalCS() osgeo::proj::cs::TemporalCountCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::TemporalCountCS::~TemporalCountCS() osgeo::proj::cs::TemporalCS::~TemporalCS() osgeo::proj::cs::TemporalMeasureCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::TemporalMeasureCS::~TemporalMeasureCS() osgeo::proj::cs::VerticalCS::createGravityRelatedHeight(osgeo::proj::common::UnitOfMeasure const&) osgeo::proj::cs::VerticalCS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&) osgeo::proj::cs::VerticalCS::~VerticalCS() osgeo::proj::datum::Datum::anchorDefinition() const osgeo::proj::datum::Datum::anchorEpoch() const osgeo::proj::datum::Datum::conventionalRS() const osgeo::proj::datum::Datum::~Datum() osgeo::proj::datum::DatumEnsemble::asDatum(std::shared_ptr const&) const osgeo::proj::datum::DatumEnsemble::create(osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&, dropbox::oxygen::nn > const&) osgeo::proj::datum::DatumEnsemble::~DatumEnsemble() osgeo::proj::datum::DatumEnsemble::datums() const osgeo::proj::datum::DatumEnsemble::positionalAccuracy() const osgeo::proj::datum::Datum::publicationDate() const osgeo::proj::datum::DynamicGeodeticReferenceFrame::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, osgeo::proj::util::optional const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Measure const&, osgeo::proj::util::optional const&) osgeo::proj::datum::DynamicGeodeticReferenceFrame::deformationModelName() const osgeo::proj::datum::DynamicGeodeticReferenceFrame::~DynamicGeodeticReferenceFrame() osgeo::proj::datum::DynamicGeodeticReferenceFrame::frameReferenceEpoch() const osgeo::proj::datum::DynamicVerticalReferenceFrame::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::util::optional const&, osgeo::proj::util::optional const&, osgeo::proj::common::Measure const&, osgeo::proj::util::optional const&) osgeo::proj::datum::DynamicVerticalReferenceFrame::deformationModelName() const osgeo::proj::datum::DynamicVerticalReferenceFrame::~DynamicVerticalReferenceFrame() osgeo::proj::datum::DynamicVerticalReferenceFrame::frameReferenceEpoch() const osgeo::proj::datum::Ellipsoid::celestialBody() const osgeo::proj::datum::Ellipsoid::computedInverseFlattening() const osgeo::proj::datum::Ellipsoid::computeSemiMinorAxis() const osgeo::proj::datum::Ellipsoid::createFlattenedSphere(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Length const&, osgeo::proj::common::Scale const&, std::string const&) osgeo::proj::datum::Ellipsoid::createSphere(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Length const&, std::string const&) osgeo::proj::datum::Ellipsoid::createTwoAxis(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, std::string const&) osgeo::proj::datum::Ellipsoid::~Ellipsoid() osgeo::proj::datum::Ellipsoid::identify() const osgeo::proj::datum::Ellipsoid::inverseFlattening() const osgeo::proj::datum::Ellipsoid::isSphere() const osgeo::proj::datum::Ellipsoid::semiMajorAxis() const osgeo::proj::datum::Ellipsoid::semiMedianAxis() const osgeo::proj::datum::Ellipsoid::semiMinorAxis() const osgeo::proj::datum::Ellipsoid::squaredEccentricity() const osgeo::proj::datum::EngineeringDatum::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::util::optional const&) osgeo::proj::datum::EngineeringDatum::~EngineeringDatum() osgeo::proj::datum::GeodeticReferenceFrame::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, osgeo::proj::util::optional const&, dropbox::oxygen::nn > const&) osgeo::proj::datum::GeodeticReferenceFrame::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, osgeo::proj::util::optional const&, osgeo::proj::util::optional const&, dropbox::oxygen::nn > const&) osgeo::proj::datum::GeodeticReferenceFrame::ellipsoid() const osgeo::proj::datum::GeodeticReferenceFrame::~GeodeticReferenceFrame() osgeo::proj::datum::GeodeticReferenceFrame::hasEquivalentNameToUsingAlias(osgeo::proj::common::IdentifiedObject const*, std::shared_ptr const&) const osgeo::proj::datum::GeodeticReferenceFrame::primeMeridian() const osgeo::proj::datum::ParametricDatum::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::util::optional const&) osgeo::proj::datum::ParametricDatum::~ParametricDatum() osgeo::proj::datum::PrimeMeridian::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&) osgeo::proj::datum::PrimeMeridian::longitude() const osgeo::proj::datum::PrimeMeridian::~PrimeMeridian() osgeo::proj::datum::RealizationMethod::operator=(osgeo::proj::datum::RealizationMethod const&) osgeo::proj::datum::RealizationMethod::RealizationMethod(std::string const&) osgeo::proj::datum::TemporalDatum::calendar() const osgeo::proj::datum::TemporalDatum::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::DateTime const&, std::string const&) osgeo::proj::datum::TemporalDatum::~TemporalDatum() osgeo::proj::datum::TemporalDatum::temporalOrigin() const osgeo::proj::datum::VerticalReferenceFrame::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::util::optional const&, osgeo::proj::util::optional const&, osgeo::proj::util::optional const&) osgeo::proj::datum::VerticalReferenceFrame::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::util::optional const&, osgeo::proj::util::optional const&) osgeo::proj::datum::VerticalReferenceFrame::realizationMethod() const osgeo::proj::datum::VerticalReferenceFrame::~VerticalReferenceFrame() osgeo::proj::File::~File() osgeo::proj::FileManager::exists(pj_ctx*, char const*) osgeo::proj::FileManager::open(pj_ctx*, char const*, osgeo::proj::FileAccess) osgeo::proj::File::read_line(unsigned long, bool&, bool&) osgeo::proj::GenericShiftGrid::~GenericShiftGrid() osgeo::proj::GenericShiftGrid::GenericShiftGrid(std::string const&, int, int, osgeo::proj::ExtentAndRes const&) osgeo::proj::GenericShiftGrid::gridAt(double, double) const osgeo::proj::GenericShiftGridSet::~GenericShiftGridSet() osgeo::proj::GenericShiftGridSet::GenericShiftGridSet() osgeo::proj::GenericShiftGridSet::gridAt(double, double) const osgeo::proj::GenericShiftGridSet::gridAt(std::string const&, double, double) const osgeo::proj::GenericShiftGridSet::open(pj_ctx*, std::string const&) osgeo::proj::GenericShiftGridSet::reassign_context(pj_ctx*) osgeo::proj::GenericShiftGridSet::reopen(pj_ctx*) osgeo::proj::GenericShiftGrid::valuesAt(int, int, int, int, int, int const*, float*, bool&) const osgeo::proj::Grid::~Grid() osgeo::proj::Grid::Grid(std::string const&, int, int, osgeo::proj::ExtentAndRes const&) osgeo::proj::HorizontalShiftGrid::gridAt(double, double) const osgeo::proj::HorizontalShiftGrid::~HorizontalShiftGrid() osgeo::proj::HorizontalShiftGrid::HorizontalShiftGrid(std::string const&, int, int, osgeo::proj::ExtentAndRes const&) osgeo::proj::HorizontalShiftGridSet::gridAt(double, double) const osgeo::proj::HorizontalShiftGridSet::~HorizontalShiftGridSet() osgeo::proj::HorizontalShiftGridSet::HorizontalShiftGridSet() osgeo::proj::HorizontalShiftGridSet::open(pj_ctx*, std::string const&) osgeo::proj::HorizontalShiftGridSet::reassign_context(pj_ctx*) osgeo::proj::HorizontalShiftGridSet::reopen(pj_ctx*) osgeo::proj::internal::ci_equal(std::string const&, char const*) osgeo::proj::internal::ci_equal(std::string const&, std::string const&) osgeo::proj::internal::ci_find(std::string const&, char const*) osgeo::proj::internal::ci_starts_with(char const*, char const*) osgeo::proj::internal::c_locale_stod(std::string const&) osgeo::proj::internal::replaceAll(std::string const&, std::string const&, std::string const&) osgeo::proj::internal::split(std::string const&, char) osgeo::proj::internal::split(std::string const&, std::string const&) osgeo::proj::internal::tolower(std::string const&) osgeo::proj::internal::toString(double, int) osgeo::proj::io::AuthorityFactory::~AuthorityFactory() osgeo::proj::io::AuthorityFactory::CelestialBodyInfo::CelestialBodyInfo() osgeo::proj::io::AuthorityFactory::createCompoundCRS(std::string const&) const osgeo::proj::io::AuthorityFactory::createConversion(std::string const&) const osgeo::proj::io::AuthorityFactory::createCoordinateMetadata(std::string const&) const osgeo::proj::io::AuthorityFactory::createCoordinateOperation(std::string const&, bool) const osgeo::proj::io::AuthorityFactory::createCoordinateReferenceSystem(std::string const&) const osgeo::proj::io::AuthorityFactory::createCoordinateSystem(std::string const&) const osgeo::proj::io::AuthorityFactory::createDatumEnsemble(std::string const&, std::string const&) const osgeo::proj::io::AuthorityFactory::createDatum(std::string const&) const osgeo::proj::io::AuthorityFactory::create(dropbox::oxygen::nn > const&, std::string const&) osgeo::proj::io::AuthorityFactory::createEllipsoid(std::string const&) const osgeo::proj::io::AuthorityFactory::createEngineeringCRS(std::string const&) const osgeo::proj::io::AuthorityFactory::createEngineeringDatum(std::string const&) const osgeo::proj::io::AuthorityFactory::createExtent(std::string const&) const osgeo::proj::io::AuthorityFactory::createFromCoordinateReferenceSystemCodes(std::string const&, std::string const&) const osgeo::proj::io::AuthorityFactory::createFromCoordinateReferenceSystemCodes(std::string const&, std::string const&, std::string const&, std::string const&, bool, bool, bool, bool, bool, bool, std::shared_ptr const&, std::shared_ptr const&) const osgeo::proj::io::AuthorityFactory::createFromCRSCodesWithIntermediates(std::string const&, std::string const&, std::string const&, std::string const&, bool, bool, bool, bool, std::vector, std::allocator > > const&, osgeo::proj::io::AuthorityFactory::ObjectType, std::vector > const&, std::shared_ptr const&, std::shared_ptr const&) const osgeo::proj::io::AuthorityFactory::createGeodeticCRS(std::string const&) const osgeo::proj::io::AuthorityFactory::createGeodeticDatum(std::string const&) const osgeo::proj::io::AuthorityFactory::createGeographicCRS(std::string const&) const osgeo::proj::io::AuthorityFactory::createObjectsFromName(std::string const&, std::vector > const&, bool, unsigned long) const osgeo::proj::io::AuthorityFactory::createObject(std::string const&) const osgeo::proj::io::AuthorityFactory::createPrimeMeridian(std::string const&) const osgeo::proj::io::AuthorityFactory::createProjectedCRS(std::string const&) const osgeo::proj::io::AuthorityFactory::createUnitOfMeasure(std::string const&) const osgeo::proj::io::AuthorityFactory::createVerticalCRS(std::string const&) const osgeo::proj::io::AuthorityFactory::createVerticalDatum(std::string const&) const osgeo::proj::io::AuthorityFactory::CRSInfo::CRSInfo() osgeo::proj::io::AuthorityFactory::databaseContext() const osgeo::proj::io::AuthorityFactory::getAuthorityCodes(osgeo::proj::io::AuthorityFactory::ObjectType const&, bool) const osgeo::proj::io::AuthorityFactory::getAuthority() const osgeo::proj::io::AuthorityFactory::getCelestialBodyList() const osgeo::proj::io::AuthorityFactory::getCRSInfoList() const osgeo::proj::io::AuthorityFactory::getDescriptionText(std::string const&) const osgeo::proj::io::AuthorityFactory::getGeoidModels(std::string const&) const osgeo::proj::io::AuthorityFactory::getOfficialNameFromAlias(std::string const&, std::string const&, std::string const&, bool, std::string&, std::string&, std::string&) const osgeo::proj::io::AuthorityFactory::getPointMotionOperationsFor(dropbox::oxygen::nn > const&, bool) const osgeo::proj::io::AuthorityFactory::getUnitList() const osgeo::proj::io::AuthorityFactory::identifyBodyFromSemiMajorAxis(double, double) const osgeo::proj::io::AuthorityFactory::listAreaOfUseFromName(std::string const&, bool) const osgeo::proj::io::AuthorityFactory::UnitInfo::UnitInfo() osgeo::proj::io::createFromUserInput(std::string const&, pj_ctx*) osgeo::proj::io::createFromUserInput(std::string const&, std::shared_ptr const&, bool) osgeo::proj::io::DatabaseContext::create(std::string const&, std::vector > const&, pj_ctx*) osgeo::proj::io::DatabaseContext::create(void*) osgeo::proj::io::DatabaseContext::~DatabaseContext() osgeo::proj::io::DatabaseContext::getAuthorities() const osgeo::proj::io::DatabaseContext::getDatabaseStructure() const osgeo::proj::io::DatabaseContext::getInsertStatementsFor(dropbox::oxygen::nn > const&, std::string const&, std::string const&, bool, std::vector > const&) osgeo::proj::io::DatabaseContext::getMetadata(char const*) const osgeo::proj::io::DatabaseContext::getPath() const osgeo::proj::io::DatabaseContext::getQueryCounter() const osgeo::proj::io::DatabaseContext::getSqliteHandle() const osgeo::proj::io::DatabaseContext::getVersionedAuthoritiesFromName(std::string const&) osgeo::proj::io::DatabaseContext::lookForGridInfo(std::string const&, bool, std::string&, std::string&, std::string&, bool&, bool&, bool&) const osgeo::proj::io::DatabaseContext::startInsertStatementsSession() osgeo::proj::io::DatabaseContext::stopInsertStatementsSession() osgeo::proj::io::DatabaseContext::suggestsCodeFor(dropbox::oxygen::nn > const&, std::string const&, bool) osgeo::proj::io::DatabaseContext::toWGS84AutocorrectWrongValues(double&, double&, double&, double&, double&, double&, double&) const osgeo::proj::io::FactoryException::~FactoryException() osgeo::proj::io::FactoryException::FactoryException(char const*) osgeo::proj::io::FactoryException::FactoryException(osgeo::proj::io::FactoryException const&) osgeo::proj::io::FactoryException::FactoryException(std::string const&) osgeo::proj::io::FormattingException::~FormattingException() osgeo::proj::io::FormattingException::FormattingException(osgeo::proj::io::FormattingException const&) osgeo::proj::io::IJSONExportable::exportToJSON(osgeo::proj::io::JSONFormatter*) const osgeo::proj::io::IJSONExportable::~IJSONExportable() osgeo::proj::io::IPROJStringExportable::exportToPROJString(osgeo::proj::io::PROJStringFormatter*) const osgeo::proj::io::IPROJStringExportable::~IPROJStringExportable() osgeo::proj::io::IWKTExportable::exportToWKT(osgeo::proj::io::WKTFormatter*) const osgeo::proj::io::IWKTExportable::~IWKTExportable() osgeo::proj::io::JSONFormatter::create(std::shared_ptr) osgeo::proj::io::JSONFormatter::~JSONFormatter() osgeo::proj::io::JSONFormatter::ObjectContext::~ObjectContext() osgeo::proj::io::JSONFormatter::ObjectContext::ObjectContext(osgeo::proj::io::JSONFormatter&, char const*, bool) osgeo::proj::io::JSONFormatter::setIndentationWidth(int) osgeo::proj::io::JSONFormatter::setMultiLine(bool) osgeo::proj::io::JSONFormatter::setSchema(std::string const&) osgeo::proj::io::JSONFormatter::toString() const osgeo::proj::io::NoSuchAuthorityCodeException::getAuthorityCode() const osgeo::proj::io::NoSuchAuthorityCodeException::getAuthority() const osgeo::proj::io::NoSuchAuthorityCodeException::~NoSuchAuthorityCodeException() osgeo::proj::io::NoSuchAuthorityCodeException::NoSuchAuthorityCodeException(osgeo::proj::io::NoSuchAuthorityCodeException const&) osgeo::proj::io::NoSuchAuthorityCodeException::NoSuchAuthorityCodeException(std::string const&, std::string const&, std::string const&) osgeo::proj::io::ParsingException::~ParsingException() osgeo::proj::io::ParsingException::ParsingException(osgeo::proj::io::ParsingException const&) osgeo::proj::io::PROJStringFormatter::addParam(char const*, char const*) osgeo::proj::io::PROJStringFormatter::addParam(char const*, double) osgeo::proj::io::PROJStringFormatter::addParam(char const*, int) osgeo::proj::io::PROJStringFormatter::addParam(char const*, std::string const&) osgeo::proj::io::PROJStringFormatter::addParam(char const*, std::vector > const&) osgeo::proj::io::PROJStringFormatter::addParam(std::string const&) osgeo::proj::io::PROJStringFormatter::addParam(std::string const&, char const*) osgeo::proj::io::PROJStringFormatter::addParam(std::string const&, double) osgeo::proj::io::PROJStringFormatter::addParam(std::string const&, int) osgeo::proj::io::PROJStringFormatter::addParam(std::string const&, std::string const&) osgeo::proj::io::PROJStringFormatter::addStep(char const*) osgeo::proj::io::PROJStringFormatter::addStep(std::string const&) osgeo::proj::io::PROJStringFormatter::create(osgeo::proj::io::PROJStringFormatter::Convention, std::shared_ptr) osgeo::proj::io::PROJStringFormatter::ingestPROJString(std::string const&) osgeo::proj::io::PROJStringFormatter::~PROJStringFormatter() osgeo::proj::io::PROJStringFormatter::setCRSExport(bool) osgeo::proj::io::PROJStringFormatter::setCurrentStepInverted(bool) osgeo::proj::io::PROJStringFormatter::setIndentationWidth(int) osgeo::proj::io::PROJStringFormatter::setMaxLineLength(int) osgeo::proj::io::PROJStringFormatter::setMultiLine(bool) osgeo::proj::io::PROJStringFormatter::setUseApproxTMerc(bool) osgeo::proj::io::PROJStringFormatter::startInversion() osgeo::proj::io::PROJStringFormatter::stopInversion() osgeo::proj::io::PROJStringFormatter::toString() const osgeo::proj::io::PROJStringParser::attachContext(pj_ctx*) osgeo::proj::io::PROJStringParser::attachDatabaseContext(std::shared_ptr const&) osgeo::proj::io::PROJStringParser::createFromPROJString(std::string const&) osgeo::proj::io::PROJStringParser::~PROJStringParser() osgeo::proj::io::PROJStringParser::PROJStringParser() osgeo::proj::io::PROJStringParser::setUsePROJ4InitRules(bool) osgeo::proj::io::PROJStringParser::warningList() const osgeo::proj::io::WKTFormatter::create(dropbox::oxygen::nn > > const&) osgeo::proj::io::WKTFormatter::create(osgeo::proj::io::WKTFormatter::Convention, std::shared_ptr) osgeo::proj::io::WKTFormatter::isAllowedEllipsoidalHeightAsVerticalCRS() const osgeo::proj::io::WKTFormatter::isAllowedLINUNITNode() const osgeo::proj::io::WKTFormatter::isStrict() const osgeo::proj::io::WKTFormatter::setAllowEllipsoidalHeightAsVerticalCRS(bool) osgeo::proj::io::WKTFormatter::setAllowLINUNITNode(bool) osgeo::proj::io::WKTFormatter::setIndentationWidth(int) osgeo::proj::io::WKTFormatter::setMultiLine(bool) osgeo::proj::io::WKTFormatter::setOutputAxis(osgeo::proj::io::WKTFormatter::OutputAxisRule) osgeo::proj::io::WKTFormatter::setOutputId(bool) osgeo::proj::io::WKTFormatter::setStrict(bool) osgeo::proj::io::WKTFormatter::simulCurNodeHasId() osgeo::proj::io::WKTFormatter::toString() const osgeo::proj::io::WKTFormatter::~WKTFormatter() osgeo::proj::io::WKTNode::addChild(dropbox::oxygen::nn > >&&) osgeo::proj::io::WKTNode::children() const osgeo::proj::io::WKTNode::countChildrenOfName(std::string const&) const osgeo::proj::io::WKTNode::createFrom(std::string const&, unsigned long) osgeo::proj::io::WKTNode::lookForChild(std::string const&, int) const osgeo::proj::io::WKTNode::toString() const osgeo::proj::io::WKTNode::value() const osgeo::proj::io::WKTNode::~WKTNode() osgeo::proj::io::WKTNode::WKTNode(std::string const&) osgeo::proj::io::WKTParser::attachDatabaseContext(std::shared_ptr const&) osgeo::proj::io::WKTParser::createFromWKT(std::string const&) osgeo::proj::io::WKTParser::grammarErrorList() const osgeo::proj::io::WKTParser::guessDialect(std::string const&) osgeo::proj::io::WKTParser::setStrict(bool) osgeo::proj::io::WKTParser::setUnsetIdentifiersIfIncompatibleDef(bool) osgeo::proj::io::WKTParser::warningList() const osgeo::proj::io::WKTParser::~WKTParser() osgeo::proj::io::WKTParser::WKTParser() osgeo::proj::metadata::Citation::~Citation() osgeo::proj::metadata::Citation::Citation() osgeo::proj::metadata::Citation::Citation(osgeo::proj::metadata::Citation const&) osgeo::proj::metadata::Citation::Citation(std::string const&) osgeo::proj::metadata::Citation::title() const osgeo::proj::metadata::Extent::contains(dropbox::oxygen::nn > const&) const osgeo::proj::metadata::Extent::createFromBBOX(double, double, double, double, osgeo::proj::util::optional const&) osgeo::proj::metadata::Extent::create(osgeo::proj::util::optional const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&) osgeo::proj::metadata::Extent::description() const osgeo::proj::metadata::Extent::~Extent() osgeo::proj::metadata::Extent::Extent(osgeo::proj::metadata::Extent const&) osgeo::proj::metadata::Extent::geographicElements() const osgeo::proj::metadata::Extent::intersection(dropbox::oxygen::nn > const&) const osgeo::proj::metadata::Extent::intersects(dropbox::oxygen::nn > const&) const osgeo::proj::metadata::Extent::temporalElements() const osgeo::proj::metadata::Extent::verticalElements() const osgeo::proj::metadata::GeographicBoundingBox::create(double, double, double, double) osgeo::proj::metadata::GeographicBoundingBox::eastBoundLongitude() const osgeo::proj::metadata::GeographicBoundingBox::~GeographicBoundingBox() osgeo::proj::metadata::GeographicBoundingBox::northBoundLatitude() const osgeo::proj::metadata::GeographicBoundingBox::southBoundLatitude() const osgeo::proj::metadata::GeographicBoundingBox::westBoundLongitude() const osgeo::proj::metadata::GeographicExtent::~GeographicExtent() osgeo::proj::metadata::Identifier::authority() const osgeo::proj::metadata::Identifier::code() const osgeo::proj::metadata::Identifier::codeSpace() const osgeo::proj::metadata::Identifier::create(std::string const&, osgeo::proj::util::PropertyMap const&) osgeo::proj::metadata::Identifier::description() const osgeo::proj::metadata::Identifier::~Identifier() osgeo::proj::metadata::Identifier::Identifier(osgeo::proj::metadata::Identifier const&) osgeo::proj::metadata::Identifier::isEquivalentName(char const*, char const*) osgeo::proj::metadata::Identifier::isEquivalentName(char const*, char const*, bool) osgeo::proj::metadata::Identifier::uri() const osgeo::proj::metadata::Identifier::version() const osgeo::proj::metadata::PositionalAccuracy::create(std::string const&) osgeo::proj::metadata::PositionalAccuracy::~PositionalAccuracy() osgeo::proj::metadata::PositionalAccuracy::value() const osgeo::proj::metadata::TemporalExtent::contains(dropbox::oxygen::nn > const&) const osgeo::proj::metadata::TemporalExtent::create(std::string const&, std::string const&) osgeo::proj::metadata::TemporalExtent::intersects(dropbox::oxygen::nn > const&) const osgeo::proj::metadata::TemporalExtent::start() const osgeo::proj::metadata::TemporalExtent::stop() const osgeo::proj::metadata::TemporalExtent::~TemporalExtent() osgeo::proj::metadata::VerticalExtent::contains(dropbox::oxygen::nn > const&) const osgeo::proj::metadata::VerticalExtent::create(double, double, dropbox::oxygen::nn > const&) osgeo::proj::metadata::VerticalExtent::intersects(dropbox::oxygen::nn > const&) const osgeo::proj::metadata::VerticalExtent::maximumValue() const osgeo::proj::metadata::VerticalExtent::minimumValue() const osgeo::proj::metadata::VerticalExtent::unit() const osgeo::proj::metadata::VerticalExtent::~VerticalExtent() osgeo::proj::operation::ConcatenatedOperation::~ConcatenatedOperation() osgeo::proj::operation::ConcatenatedOperation::createComputeMetadata(std::vector >, std::allocator > > > const&, bool) osgeo::proj::operation::ConcatenatedOperation::create(osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::ConcatenatedOperation::gridsNeeded(std::shared_ptr const&, bool) const osgeo::proj::operation::ConcatenatedOperation::inverse() const osgeo::proj::operation::ConcatenatedOperation::operations() const osgeo::proj::operation::Conversion::~Conversion() osgeo::proj::operation::Conversion::convertToOtherMethod(int) const osgeo::proj::operation::Conversion::createAlbersEqualArea(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createAmericanPolyconic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createAxisOrderReversal(bool) osgeo::proj::operation::Conversion::createAzimuthalEquidistant(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createBonne(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createCassiniSoldner(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createChangeVerticalUnit(osgeo::proj::util::PropertyMap const&) osgeo::proj::operation::Conversion::createChangeVerticalUnit(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Scale const&) osgeo::proj::operation::Conversion::createEckertIII(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEckertII(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEckertI(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEckertIV(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEckertVI(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEckertV(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEqualEarth(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEquidistantConic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEquidistantCylindrical(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createEquidistantCylindricalSpherical(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGall(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGaussSchreiberTransverseMercator(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGeographic2DOffsets(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&) osgeo::proj::operation::Conversion::createGeographic2DWithHeightOffsets(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGeographic3DOffsets(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGeographicGeocentric(osgeo::proj::util::PropertyMap const&) osgeo::proj::operation::Conversion::createGeostationarySatelliteSweepX(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGeostationarySatelliteSweepY(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGnomonic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGoodeHomolosine(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createGuamProjection(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createHeightDepthReversal(osgeo::proj::util::PropertyMap const&) osgeo::proj::operation::Conversion::createHotineObliqueMercatorTwoPointNaturalOrigin(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createHotineObliqueMercatorVariantA(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createHotineObliqueMercatorVariantB(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createInternationalMapWorldPolyconic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createInterruptedGoodeHomolosine(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createKrovakNorthOriented(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createKrovak(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLabordeObliqueMercator(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLambertAzimuthalEqualArea(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLambertConicConformal_1SP(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLambertConicConformal_1SP_VariantB(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLambertConicConformal_2SP_Belgium(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLambertConicConformal_2SP_Michigan(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, osgeo::proj::common::Scale const&) osgeo::proj::operation::Conversion::createLambertConicConformal_2SP(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLambertCylindricalEqualArea(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLambertCylindricalEqualAreaSpherical(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createLocalOrthographic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createMercatorSpherical(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createMercatorVariantA(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createMercatorVariantB(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createMillerCylindrical(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createMollweide(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createNewZealandMappingGrid(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createObliqueStereographic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createOrthographic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Conversion::create(osgeo::proj::util::PropertyMap const&, osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Conversion::createPolarStereographicVariantA(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createPolarStereographicVariantB(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createPoleRotationGRIBConvention(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&) osgeo::proj::operation::Conversion::createPoleRotationNetCDFCFConvention(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&) osgeo::proj::operation::Conversion::createPopularVisualisationPseudoMercator(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createQuadrilateralizedSphericalCube(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createRobinson(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createSinusoidal(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createSphericalCrossTrackHeight(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createStereographic(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createTransverseMercator(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createTransverseMercatorSouthOriented(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Scale const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createTunisiaMappingGrid(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createTunisiaMiningGrid(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createTwoPointEquidistant(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createUTM(osgeo::proj::util::PropertyMap const&, int, bool) osgeo::proj::operation::Conversion::createVanDerGrinten(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createVerticalOffset(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createVerticalPerspective(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createWagnerIII(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createWagnerII(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createWagnerI(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createWagnerIV(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createWagnerVII(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createWagnerVI(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::createWagnerV(osgeo::proj::util::PropertyMap const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&) osgeo::proj::operation::Conversion::identify() const osgeo::proj::operation::Conversion::inverse() const osgeo::proj::operation::Conversion::isUTM(int&, bool&) const osgeo::proj::operation::CoordinateOperationContext::clone() const osgeo::proj::operation::CoordinateOperationContext::~CoordinateOperationContext() osgeo::proj::operation::CoordinateOperationContext::create(std::shared_ptr const&, std::shared_ptr const&, double) osgeo::proj::operation::CoordinateOperationContext::getAllowBallparkTransformations() const osgeo::proj::operation::CoordinateOperationContext::getAllowUseIntermediateCRS() const osgeo::proj::operation::CoordinateOperationContext::getAreaOfInterest() const osgeo::proj::operation::CoordinateOperationContext::getAuthorityFactory() const osgeo::proj::operation::CoordinateOperationContext::getDesiredAccuracy() const osgeo::proj::operation::CoordinateOperationContext::getDiscardSuperseded() const osgeo::proj::operation::CoordinateOperationContext::getGridAvailabilityUse() const osgeo::proj::operation::CoordinateOperationContext::getIntermediateCRS() const osgeo::proj::operation::CoordinateOperationContext::getSourceAndTargetCRSExtentUse() const osgeo::proj::operation::CoordinateOperationContext::getSourceCoordinateEpoch() const osgeo::proj::operation::CoordinateOperationContext::getSpatialCriterion() const osgeo::proj::operation::CoordinateOperationContext::getTargetCoordinateEpoch() const osgeo::proj::operation::CoordinateOperationContext::getUsePROJAlternativeGridNames() const osgeo::proj::operation::CoordinateOperationContext::setAllowBallparkTransformations(bool) osgeo::proj::operation::CoordinateOperationContext::setAllowUseIntermediateCRS(osgeo::proj::operation::CoordinateOperationContext::IntermediateCRSUse) osgeo::proj::operation::CoordinateOperationContext::setAreaOfInterest(std::shared_ptr const&) osgeo::proj::operation::CoordinateOperationContext::setDesiredAccuracy(double) osgeo::proj::operation::CoordinateOperationContext::setDiscardSuperseded(bool) osgeo::proj::operation::CoordinateOperationContext::setGridAvailabilityUse(osgeo::proj::operation::CoordinateOperationContext::GridAvailabilityUse) osgeo::proj::operation::CoordinateOperationContext::setIntermediateCRS(std::vector, std::allocator > > const&) osgeo::proj::operation::CoordinateOperationContext::setSourceAndTargetCRSExtentUse(osgeo::proj::operation::CoordinateOperationContext::SourceTargetCRSExtentUse) osgeo::proj::operation::CoordinateOperationContext::setSourceCoordinateEpoch(osgeo::proj::util::optional const&) osgeo::proj::operation::CoordinateOperationContext::setSpatialCriterion(osgeo::proj::operation::CoordinateOperationContext::SpatialCriterion) osgeo::proj::operation::CoordinateOperationContext::setTargetCoordinateEpoch(osgeo::proj::util::optional const&) osgeo::proj::operation::CoordinateOperationContext::setUsePROJAlternativeGridNames(bool) osgeo::proj::operation::CoordinateOperation::~CoordinateOperation() osgeo::proj::operation::CoordinateOperation::coordinateOperationAccuracies() const osgeo::proj::operation::CoordinateOperation::coordinateTransformer(pj_ctx*) const osgeo::proj::operation::CoordinateOperationFactory::~CoordinateOperationFactory() osgeo::proj::operation::CoordinateOperationFactory::create() osgeo::proj::operation::CoordinateOperationFactory::createOperation(dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) const osgeo::proj::operation::CoordinateOperationFactory::createOperations(dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > > const&) const osgeo::proj::operation::CoordinateOperationFactory::createOperations(dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > > const&) const osgeo::proj::operation::CoordinateOperationFactory::createOperations(dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > > const&) const osgeo::proj::operation::CoordinateOperationFactory::createOperations(dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > > const&) const osgeo::proj::operation::CoordinateOperation::hasBallparkTransformation() const osgeo::proj::operation::CoordinateOperation::interpolationCRS() const osgeo::proj::operation::CoordinateOperation::isPROJInstantiable(std::shared_ptr const&, bool) const osgeo::proj::operation::CoordinateOperation::normalizeForVisualization() const osgeo::proj::operation::CoordinateOperation::operationVersion() const osgeo::proj::operation::CoordinateOperation::requiresPerCoordinateInputTime() const osgeo::proj::operation::CoordinateOperation::shallowClone() const osgeo::proj::operation::CoordinateOperation::sourceCoordinateEpoch() const osgeo::proj::operation::CoordinateOperation::sourceCRS() const osgeo::proj::operation::CoordinateOperation::targetCoordinateEpoch() const osgeo::proj::operation::CoordinateOperation::targetCRS() const osgeo::proj::operation::CoordinateTransformer::~CoordinateTransformer() osgeo::proj::operation::CoordinateTransformer::transform(PJ_COORD) osgeo::proj::operation::GeneralOperationParameter::~GeneralOperationParameter() osgeo::proj::operation::GeneralParameterValue::~GeneralParameterValue() osgeo::proj::operation::GridDescription::~GridDescription() osgeo::proj::operation::GridDescription::GridDescription() osgeo::proj::operation::GridDescription::GridDescription(osgeo::proj::operation::GridDescription&&) osgeo::proj::operation::GridDescription::GridDescription(osgeo::proj::operation::GridDescription const&) osgeo::proj::operation::InvalidOperation::~InvalidOperation() osgeo::proj::operation::InvalidOperation::InvalidOperation(osgeo::proj::operation::InvalidOperation const&) osgeo::proj::operation::OperationMethod::create(osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::OperationMethod::create(osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::OperationMethod::formulaCitation() const osgeo::proj::operation::OperationMethod::formula() const osgeo::proj::operation::OperationMethod::getEPSGCode() const osgeo::proj::operation::OperationMethod::~OperationMethod() osgeo::proj::operation::OperationMethod::parameters() const osgeo::proj::operation::OperationParameter::create(osgeo::proj::util::PropertyMap const&) osgeo::proj::operation::OperationParameter::getEPSGCode() const osgeo::proj::operation::OperationParameter::getNameForEPSGCode(int) osgeo::proj::operation::OperationParameter::~OperationParameter() osgeo::proj::operation::OperationParameterValue::create(dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&) osgeo::proj::operation::OperationParameterValue::~OperationParameterValue() osgeo::proj::operation::OperationParameterValue::parameter() const osgeo::proj::operation::OperationParameterValue::parameterValue() const osgeo::proj::operation::ParameterValue::booleanValue() const osgeo::proj::operation::ParameterValue::create(bool) osgeo::proj::operation::ParameterValue::create(char const*) osgeo::proj::operation::ParameterValue::createFilename(std::string const&) osgeo::proj::operation::ParameterValue::create(int) osgeo::proj::operation::ParameterValue::create(osgeo::proj::common::Measure const&) osgeo::proj::operation::ParameterValue::create(std::string const&) osgeo::proj::operation::ParameterValue::integerValue() const osgeo::proj::operation::ParameterValue::~ParameterValue() osgeo::proj::operation::ParameterValue::stringValue() const osgeo::proj::operation::ParameterValue::type() const osgeo::proj::operation::ParameterValue::value() const osgeo::proj::operation::ParameterValue::valueFile() const osgeo::proj::operation::PointMotionOperation::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::PointMotionOperation::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::PointMotionOperation::inverse() const osgeo::proj::operation::PointMotionOperation::~PointMotionOperation() osgeo::proj::operation::PointMotionOperation::sourceCRS() const osgeo::proj::operation::PointMotionOperation::substitutePROJAlternativeGridNames(dropbox::oxygen::nn >) const osgeo::proj::operation::SingleOperation::createPROJBased(osgeo::proj::util::PropertyMap const&, std::string const&, std::shared_ptr const&, std::shared_ptr const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::SingleOperation::gridsNeeded(std::shared_ptr const&, bool) const osgeo::proj::operation::SingleOperation::method() const osgeo::proj::operation::SingleOperation::parameterValue(int) const osgeo::proj::operation::SingleOperation::parameterValueMeasure(int) const osgeo::proj::operation::SingleOperation::parameterValueMeasure(std::string const&, int) const osgeo::proj::operation::SingleOperation::parameterValueNumeric(int, osgeo::proj::common::UnitOfMeasure const&) const osgeo::proj::operation::SingleOperation::parameterValues() const osgeo::proj::operation::SingleOperation::parameterValue(std::string const&, int) const osgeo::proj::operation::SingleOperation::~SingleOperation() osgeo::proj::operation::SingleOperation::substitutePROJAlternativeGridNames(dropbox::oxygen::nn >) const osgeo::proj::operation::SingleOperation::validateParameters() const osgeo::proj::operation::Transformation::createAbridgedMolodensky(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createCartesianGridOffsets(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createChangeVerticalUnit(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Scale const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createCoordinateFrameRotation(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createGeocentricTranslations(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createGeographic2DOffsets(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createGeographic2DWithHeightOffsets(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createGeographic3DOffsets(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Angle const&, osgeo::proj::common::Length const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createGravityRelatedHeightToGeographic3D(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, std::shared_ptr const&, std::string const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createLongitudeRotation(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Angle const&) osgeo::proj::operation::Transformation::createMolodensky(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createNTv2(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, std::string const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, std::shared_ptr const&, dropbox::oxygen::nn > const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, std::shared_ptr const&, osgeo::proj::util::PropertyMap const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createPositionVector(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createTimeDependentCoordinateFrameRotation(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createTimeDependentPositionVector(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createTOWGS84(dropbox::oxygen::nn > const&, std::vector > const&) osgeo::proj::operation::Transformation::createVERTCON(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, std::string const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createVerticalOffset(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Length const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::getTOWGS84Parameters(bool) const osgeo::proj::operation::Transformation::inverse() const osgeo::proj::operation::Transformation::sourceCRS() const osgeo::proj::operation::Transformation::targetCRS() const osgeo::proj::operation::Transformation::~Transformation() osgeo::proj::util::ArrayOfBaseObject::add(osgeo::proj::util::BaseObjectNNPtr const&) osgeo::proj::util::ArrayOfBaseObject::~ArrayOfBaseObject() osgeo::proj::util::ArrayOfBaseObject::create() osgeo::proj::util::BaseObject::~BaseObject() osgeo::proj::util::BaseObjectNNPtr::~BaseObjectNNPtr() osgeo::proj::util::BoxedValue::~BoxedValue() osgeo::proj::util::BoxedValue::BoxedValue(bool) osgeo::proj::util::BoxedValue::BoxedValue(char const*) osgeo::proj::util::BoxedValue::BoxedValue(int) osgeo::proj::util::BoxedValue::BoxedValue(std::string const&) osgeo::proj::util::CodeList::~CodeList() osgeo::proj::util::Exception::~Exception() osgeo::proj::util::Exception::Exception(osgeo::proj::util::Exception const&) osgeo::proj::util::Exception::what() const osgeo::proj::util::GenericName::~GenericName() osgeo::proj::util::IComparable::~IComparable() osgeo::proj::util::IComparable::isEquivalentTo(osgeo::proj::util::IComparable const*, osgeo::proj::util::IComparable::Criterion, std::shared_ptr const&) const osgeo::proj::util::InvalidValueTypeException::~InvalidValueTypeException() osgeo::proj::util::InvalidValueTypeException::InvalidValueTypeException(osgeo::proj::util::InvalidValueTypeException const&) osgeo::proj::util::LocalName::~LocalName() osgeo::proj::util::LocalName::scope() const osgeo::proj::util::LocalName::toFullyQualifiedName() const osgeo::proj::util::LocalName::toString() const osgeo::proj::util::NameFactory::createGenericName(std::shared_ptr const&, std::vector > const&) osgeo::proj::util::NameFactory::createLocalName(std::shared_ptr const&, std::string const&) osgeo::proj::util::NameFactory::createNameSpace(dropbox::oxygen::nn > const&, osgeo::proj::util::PropertyMap const&) osgeo::proj::util::NameSpace::isGlobal() const osgeo::proj::util::NameSpace::name() const osgeo::proj::util::NameSpace::~NameSpace() osgeo::proj::util::PropertyMap::~PropertyMap() osgeo::proj::util::PropertyMap::PropertyMap() osgeo::proj::util::PropertyMap::PropertyMap(osgeo::proj::util::PropertyMap const&) osgeo::proj::util::PropertyMap::set(std::string const&, bool) osgeo::proj::util::PropertyMap::set(std::string const&, char const*) osgeo::proj::util::PropertyMap::set(std::string const&, int) osgeo::proj::util::PropertyMap::set(std::string const&, osgeo::proj::util::BaseObjectNNPtr const&) osgeo::proj::util::PropertyMap::set(std::string const&, std::string const&) osgeo::proj::util::PropertyMap::set(std::string const&, std::vector > const&) osgeo::proj::util::UnsupportedOperationException::~UnsupportedOperationException() osgeo::proj::util::UnsupportedOperationException::UnsupportedOperationException(osgeo::proj::util::UnsupportedOperationException const&) osgeo::proj::VerticalShiftGrid::gridAt(double, double) const osgeo::proj::VerticalShiftGridSet::gridAt(double, double) const osgeo::proj::VerticalShiftGridSet::open(pj_ctx*, std::string const&) osgeo::proj::VerticalShiftGridSet::reassign_context(pj_ctx*) osgeo::proj::VerticalShiftGridSet::reopen(pj_ctx*) osgeo::proj::VerticalShiftGridSet::~VerticalShiftGridSet() osgeo::proj::VerticalShiftGridSet::VerticalShiftGridSet() osgeo::proj::VerticalShiftGrid::~VerticalShiftGrid() osgeo::proj::VerticalShiftGrid::VerticalShiftGrid(std::string const&, int, int, osgeo::proj::ExtentAndRes const&) pj_add_type_crs_if_needed(std::string const&) pj_approx_2D_trans(PJconsts*, PJ_DIRECTION, PJ_COORD) pj_approx_3D_trans(PJconsts*, PJ_DIRECTION, PJ_COORD) pj_atof(char const*) pj_chomp(char*) pj_context_get_grid_cache_filename(pj_ctx*) pj_ctx::createDefault() pj_ctx::get_cpp_context() pj_ctx::~pj_ctx() pj_ctx::pj_ctx(pj_ctx const&) pj_ctx::set_ca_bundle_path(std::string const&) pj_ctx::set_search_paths(std::vector > const&) pj_ell_set(pj_ctx*, ARG_list*, double*, double*) pj_find_file(pj_ctx*, char const*, char*, unsigned long) pj_fwd(PJ_LP, PJconsts*) pj_get_datums_ref() pj_get_default_ctx() pj_get_default_searchpaths(pj_ctx*) pj_get_relative_share_proj(pj_ctx*) pj_get_release() pj_inv(PJ_XY, PJconsts*) pj_mkparam(char const*) pj_param_exists(ARG_list*, char const*) pj_param(pj_ctx*, ARG_list*, char const*) pj_phi2(pj_ctx*, double, double) pj_pr_list(PJconsts*) pj_shrink(char*) pj_stderr_proj_lib_deprecation_warning() proj_alter_id proj_alter_name proj_angular_input proj_angular_output proj_area_create proj_area_destroy proj_area_set_bbox proj_area_set_name proj_as_projjson proj_as_proj_string proj_assign_context proj_as_wkt proj_celestial_body_list_destroy proj_cleanup proj_clone proj_concatoperation_get_step proj_concatoperation_get_step_count proj_context_clone proj_context_create proj_context_delete_cpp_context(projCppContext*) proj_context_destroy proj_context_errno proj_context_errno_string proj_context_get_database_metadata proj_context_get_database_path proj_context_get_database_structure proj_context_get_url_endpoint proj_context_get_use_proj4_init_rules proj_context_get_user_writable_directory proj_context_guess_wkt_dialect proj_context_is_network_enabled proj_context_set_autoclose_database proj_context_set_ca_bundle_path proj_context_set_database_path proj_context_set_enable_network proj_context_set_fileapi proj_context_set_file_finder proj_context_set_network_callbacks proj_context_set(PJconsts*, pj_ctx*) proj_context_set_search_paths proj_context_set_sqlite3_vfs_name proj_context_set_url_endpoint proj_context_set_user_writable_directory proj_context_use_proj4_init_rules proj_convert_conversion_to_other_method proj_coord proj_coord_error() proj_coordinate_metadata_create proj_coordinate_metadata_get_epoch proj_coordoperation_create_inverse proj_coordoperation_get_accuracy proj_coordoperation_get_grid_used proj_coordoperation_get_grid_used_count proj_coordoperation_get_method_info proj_coordoperation_get_param proj_coordoperation_get_param_count proj_coordoperation_get_param_index proj_coordoperation_get_towgs84_values proj_coordoperation_has_ballpark_transformation proj_coordoperation_is_instantiable proj_coordoperation_requires_per_coordinate_input_time projCppContext::clone(pj_ctx*) const projCppContext::getDatabaseContext() projCppContext::projCppContext(pj_ctx*, char const*, std::vector > const&) projCppContext::toVector(char const* const*) proj_create proj_create_argv proj_create_cartesian_2D_cs proj_create_compound_crs proj_create_conversion proj_create_conversion_albers_equal_area proj_create_conversion_american_polyconic proj_create_conversion_azimuthal_equidistant proj_create_conversion_bonne proj_create_conversion_cassini_soldner proj_create_conversion_eckert_i proj_create_conversion_eckert_ii proj_create_conversion_eckert_iii proj_create_conversion_eckert_iv proj_create_conversion_eckert_v proj_create_conversion_eckert_vi proj_create_conversion_equal_earth proj_create_conversion_equidistant_conic proj_create_conversion_equidistant_cylindrical proj_create_conversion_equidistant_cylindrical_spherical proj_create_conversion_gall proj_create_conversion_gauss_schreiber_transverse_mercator proj_create_conversion_geostationary_satellite_sweep_x proj_create_conversion_geostationary_satellite_sweep_y proj_create_conversion_gnomonic proj_create_conversion_goode_homolosine proj_create_conversion_guam_projection proj_create_conversion_hotine_oblique_mercator_two_point_natural_origin proj_create_conversion_hotine_oblique_mercator_variant_a proj_create_conversion_hotine_oblique_mercator_variant_b proj_create_conversion_international_map_world_polyconic proj_create_conversion_interrupted_goode_homolosine proj_create_conversion_krovak proj_create_conversion_krovak_north_oriented proj_create_conversion_laborde_oblique_mercator proj_create_conversion_lambert_azimuthal_equal_area proj_create_conversion_lambert_conic_conformal_1sp proj_create_conversion_lambert_conic_conformal_1sp_variant_b proj_create_conversion_lambert_conic_conformal_2sp proj_create_conversion_lambert_conic_conformal_2sp_belgium proj_create_conversion_lambert_conic_conformal_2sp_michigan proj_create_conversion_lambert_cylindrical_equal_area proj_create_conversion_lambert_cylindrical_equal_area_spherical proj_create_conversion_local_orthographic proj_create_conversion_mercator_variant_a proj_create_conversion_mercator_variant_b proj_create_conversion_miller_cylindrical proj_create_conversion_mollweide proj_create_conversion_new_zealand_mapping_grid proj_create_conversion_oblique_stereographic proj_create_conversion_orthographic proj_create_conversion_polar_stereographic_variant_a proj_create_conversion_polar_stereographic_variant_b proj_create_conversion_pole_rotation_grib_convention proj_create_conversion_pole_rotation_netcdf_cf_convention proj_create_conversion_popular_visualisation_pseudo_mercator proj_create_conversion_quadrilateralized_spherical_cube proj_create_conversion_robinson proj_create_conversion_sinusoidal proj_create_conversion_spherical_cross_track_height proj_create_conversion_stereographic proj_create_conversion_transverse_mercator proj_create_conversion_transverse_mercator_south_oriented proj_create_conversion_tunisia_mapping_grid proj_create_conversion_tunisia_mining_grid proj_create_conversion_two_point_equidistant proj_create_conversion_utm proj_create_conversion_van_der_grinten proj_create_conversion_vertical_perspective proj_create_conversion_wagner_i proj_create_conversion_wagner_ii proj_create_conversion_wagner_iii proj_create_conversion_wagner_iv proj_create_conversion_wagner_v proj_create_conversion_wagner_vi proj_create_conversion_wagner_vii proj_create_crs_to_crs proj_create_crs_to_crs_from_pj proj_create_cs proj_create_derived_geographic_crs proj_create_ellipsoidal_2D_cs proj_create_ellipsoidal_3D_cs proj_create_engineering_crs proj_create_from_database proj_create_from_name proj_create_from_wkt proj_create_geocentric_crs proj_create_geocentric_crs_from_datum proj_create_geographic_crs proj_create_geographic_crs_from_datum proj_create_operation_factory_context proj_create_operations proj_create_projected_crs proj_create_transformation proj_create_vertical_crs proj_create_vertical_crs_ex proj_crs_alter_cs_angular_unit proj_crs_alter_cs_linear_unit proj_crs_alter_geodetic_crs proj_crs_alter_parameters_linear_unit proj_crs_create_bound_crs proj_crs_create_bound_crs_to_WGS84 proj_crs_create_bound_vertical_crs proj_crs_create_projected_3D_crs_from_2D proj_crs_demote_to_2D proj_crs_get_coordinate_system proj_crs_get_coordoperation proj_crs_get_datum proj_crs_get_datum_ensemble proj_crs_get_datum_forced proj_crs_get_geodetic_crs proj_crs_get_horizontal_datum proj_crs_get_sub_crs proj_crs_has_point_motion_operation proj_crs_info_list_destroy proj_crs_is_derived proj_crs_promote_to_3D proj_cs_get_axis_count proj_cs_get_axis_info proj_cs_get_type proj_datum_ensemble_get_accuracy proj_datum_ensemble_get_member proj_datum_ensemble_get_member_count proj_degree_input proj_degree_output proj_destroy proj_dmstor proj_download_file proj_dynamic_datum_get_frame_reference_epoch proj_ellipsoid_get_parameters proj_errno proj_errno_reset proj_errno_restore proj_errno_set proj_errno_string proj_factors proj_geod proj_get_area_of_use proj_get_area_of_use_ex proj_get_authorities_from_database proj_get_celestial_body_list_from_database proj_get_celestial_body_name proj_get_codes_from_database proj_get_crs_info_list_from_database proj_get_crs_list_parameters_create proj_get_crs_list_parameters_destroy proj_get_domain_count proj_get_ellipsoid proj_get_geoid_models_from_database proj_get_id_auth_name proj_get_id_code proj_get_insert_statements proj_get_name proj_get_non_deprecated proj_get_prime_meridian proj_get_remarks proj_get_scope proj_get_scope_ex proj_get_source_crs proj_get_suggested_operation proj_get_target_crs proj_get_type proj_get_units_from_database proj_grid_cache_clear proj_grid_cache_set_enable proj_grid_cache_set_filename proj_grid_cache_set_max_size proj_grid_cache_set_ttl proj_grid_get_info_from_database proj_grid_info proj_identify proj_info proj_init_info proj_insert_object_session_create proj_insert_object_session_destroy proj_int_list_destroy proj_is_crs proj_is_deprecated proj_is_derived_crs proj_is_download_needed proj_is_equivalent_to proj_is_equivalent_to_with_ctx proj_list_angular_units proj_list_destroy proj_list_ellps proj_list_get proj_list_get_count proj_list_operations proj_list_prime_meridians proj_list_units proj_log_error(PJconsts const*, char const*, ...) proj_log_func proj_log_level proj_lp_dist proj_lpz_dist proj_normalize_for_visualization proj_operation_factory_context_destroy proj_operation_factory_context_set_allow_ballpark_transformations proj_operation_factory_context_set_allowed_intermediate_crs proj_operation_factory_context_set_allow_use_intermediate_crs proj_operation_factory_context_set_area_of_interest proj_operation_factory_context_set_area_of_interest_name proj_operation_factory_context_set_crs_extent_use proj_operation_factory_context_set_desired_accuracy proj_operation_factory_context_set_discard_superseded proj_operation_factory_context_set_grid_availability_use proj_operation_factory_context_set_spatial_criterion proj_operation_factory_context_set_use_proj_alternative_grid_names proj_pj_info proj_prime_meridian_get_parameters proj_query_geodetic_crs_from_datum proj_roundtrip proj_rtodms proj_rtodms2 proj_string_destroy proj_string_list_destroy proj_suggests_code_for proj_todeg proj_torad proj_trans proj_trans_array proj_trans_bounds proj_trans_bounds_3D proj_trans_generic proj_trans_get_last_used_operation proj_unit_list_destroy proj_uom_get_info_from_database proj_xy_dist proj_xyz_dist rtodms(char*, unsigned long, double, int, int) set_rtodms(int, int) proj-9.6.0/scripts/reformat.sh000775 001754 001755 00000000671 14764566077 016272 0ustar00e012349e012349000000 000000 #!/bin/sh set -eu # Refuse to reformat nn.hpp: this is third-party code if test $(basename $1) = "nn.hpp"; then exit 0 fi clang-format-15 -style="{BasedOnStyle: llvm, IndentWidth: 4}" $1 > $1.reformatted if diff -u $1.reformatted $1; then # No reformatting: remove temporary file rm $1.reformatted else # Differences. Backup original file, and use reformatted file cp $1 $1.before_reformat mv $1.reformatted $1 fi proj-9.6.0/scripts/reformat_cpp.sh000775 001754 001755 00000002633 14764566077 017134 0ustar00e012349e012349000000 000000 #!/bin/sh set -eu SCRIPT_DIR=$(dirname "$0") case $SCRIPT_DIR in "/"*) ;; ".") SCRIPT_DIR=$(pwd) ;; *) SCRIPT_DIR=$(pwd)/$(dirname "$0") ;; esac TOPDIR="$(readlink -f $SCRIPT_DIR/..)" if ! (clang-format-15 --version 2>/dev/null); then echo "clang-format 15 not available. Running it from a Docker image"; docker pull silkeh/clang:15-bullseye UID=$(id -u "${USER}") GID=$(id -g "${USER}") exec docker run --rm -u "$UID:$GID" -v "$TOPDIR":"$TOPDIR" silkeh/clang:15-bullseye "$TOPDIR"/scripts/reformat_cpp.sh fi for i in `find "$TOPDIR" -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.c"`; do if echo "$i" | grep -q "lru_cache.hpp"; then continue fi if echo "$i" | grep -q "json.hpp"; then continue fi if echo "$i" | grep -q "generated"; then continue fi if echo "$i" | grep -q "geodesic"; then continue fi if echo "$i" | grep -q "geodtest"; then continue fi if echo "$i" | grep -q "geodsigntest"; then continue fi if echo "$i" | grep -q "nn.hpp"; then continue fi if echo "$i" | grep -q "googletest-src"; then continue fi if echo "$i" | grep -q "/build"; then continue fi if echo "$i" | grep -q "fix_typos"; then continue fi echo "reformat.sh $i" "$SCRIPT_DIR"/reformat.sh "$i" done proj-9.6.0/scripts/releasenotes.py000664 001754 001755 00000006755 14764566077 017170 0ustar00e012349e012349000000 000000 """ Create a first draft of release notes for a new version of PROJ The script outputs a section for the NEWS.md file. It's based on the title of entries added to the specified GitHub milestone. The script tries to group the entries into "updates" and "bug fixes" although it might not always be succesful. The output of the scripts should be edited before adding to NEWS.md. Less editing is needed if PR's are given good titles when originally created. The script requires a token from GitHub. These can be generated under the "Settings" section in your GitHub profile. Go to "Developer Settings" and then "Personal access tokens". The token does not need any special permissions. Usage: python releasenotes.py """ import argparse import requests # Base API URL to fetch issues associated with a milestone REPO = "OSGeo/PROJ" STATE = "closed" BASE_URL = "https://api.github.com/repos/OSGeo/PROJ/issues" def get_milestone_number(repo, milestone_title, headers): """Fetch the milestone number by title.""" url = f"https://api.github.com/repos/{repo}/milestones" response = requests.get(url, headers=headers) milestones = response.json() for milestone in milestones: if milestone["title"] == milestone_title: return milestone["number"] return None def fetch_issues(url, params, headers): """Fetch all issues for a milestone with pagination.""" issues = [] while url: response = requests.get(url, headers=headers, params=params) response_data = response.json() issues.extend(response_data) # Check if there is a next page if "next" in response.links: url = response.links["next"]["url"] else: url = None return issues def is_merged(pr_url, headers): """Check if a pull request is merged.""" pr_response = requests.get(pr_url, headers=headers) pr_data = pr_response.json() return pr_data.get("merged_at") is not None def main(milestone_title, token): headers = { "Authorization": f"token {token}" } milestone_number = get_milestone_number(REPO, milestone_title, headers) if milestone_number is None: print(f"Milestone '{milestone_title}' not found.") return params = { "milestone": milestone_number, "state": STATE, "per_page": 100 # Fetch 100 results per page } issues = fetch_issues(BASE_URL, params, headers) pull_requests = [issue for issue in issues if "pull_request" in issue] new_features = [] bug_fixes = [] for pr in pull_requests: pr_url = pr["pull_request"]["url"] if is_merged(pr_url, headers): title = pr["title"] if "fix" in title.lower() or "bug" in title.lower(): bug_fixes.append((pr["number"], title)) else: new_features.append((pr["number"], title)) print(f"## {milestone_title}\n") print("### Updates\n") for pr in reversed(new_features): print(f"* {pr[1]} (#{pr[0]})\n") print("\n### Bug Fixes\n") for pr in reversed(bug_fixes): print(f"* {pr[1]} (#{pr[0]})\n") if __name__ == "__main__": parser = argparse.ArgumentParser(description="Generate release notes for a specific milestone.") parser.add_argument("milestone", type=str, help="The title of the milestone") parser.add_argument("token", type=str, help="Your personal access token") args = parser.parse_args() main(args.milestone, args.token) proj-9.6.0/scripts/typos_whitelist.txt000664 001754 001755 00000017330 14764566077 020127 0ustar00e012349e012349000000 000000 $EXE +units=us-ft +init=${INIT_FILE}:404 -E -f '%.3f' >>${OUT} <`_) {"CPM", "a=6375738.7", "rf=334.29", "Comm. des Poids et Mesures 1799"}, double lamtp, cl, sd, sp, sav, tanphi; sav = lampp; lamt = lp.lam + Q->p22 * sav; if (fabs(fabs(sav) - fabs(lamdp)) < TOL) sav = lamdp; double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp; sav = lamdp; } while (fabs(lamdp - sav) >= TOL && --nn); double yt, ba; 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; * This implements Space Oblique Mercator (SOM) projection, used by the * The code is identical to that of Landsat SOM (PJ_lsat.c) with the following static double phi1_(double qs, double Te, double Tone_es) { if (Te < EPSILON) con = Te * sinpi; sinpi / com + .5 / Te * log ((1. - con) / else { /* point mean of intersepts */ operation proj=latlong geoidgrids=egm96_15.gtx axis=dne ellps=GRS80 Url = {https://geodesie.ign.fr/contenu/fichiers/documentation/algorithmes/notice/NTG_88.pdf} it (neither in current documentation, nor in `historic one `_). `Deformation model master file `_ of a Deformation Model `__ return strcmp(abbrev, "lon") == 0 || strcmp(abbrev, "Lon") == 0; projections/som.cpp PROJ_HEAD(som, "Space Oblique Mercator") static const std::string lon; } else if (abbreviation == AxisAbbreviation::lon) { abbreviation = AxisAbbreviation::lon; : isGeographic ? AxisAbbreviation::lon : isGeographic ? AxisAbbreviation::lon : std::string(), const std::string AxisAbbreviation::lon("lon"); AxisAbbreviation::lon, AxisDirection::EAST, unit); static const ParamMapping paramLonCentreLonCenterLonc = { ¶mLonCentreLonCenterLonc, * This implements the Space Oblique Mercator (SOM) projection, used by the * This code was originally developed for the Landsat SOM projection with the * For the MISR path based SOM projection, the code is identical to that of *Landsat SOM with the following parameter changes: * For the generic SOM projection, the code is identical to the above for MISR PJ *PJ_PROJECTION(som) { operation +proj=som +ellps=GRS80 +inc_angle=1.7157253262878522r +ps_rev=0.06866666666666667 +asc_lon=2.2298420007209447r operation +proj=som +R=6400000 +inc_angle=1.7157253262878522r +ps_rev=0.06866666666666667 +asc_lon=2.2298420007209447r operation +proj=som +ellps=GRS80 +inc_angle=98.30382 +ps_rev=0.06866666666666667 +asc_lon=127.7605356226 operation +proj=som +R=6400000 +inc_angle=98.30382 +ps_rev=0.06866666666666667 +asc_lon=127.7605356226 " AXIS[\"Geodetic longitude (Lon)\",east," " AXIS[\"geodetic longitude (Lon)\",east,\n" " \"abbreviation\": \"lon\",\n" " \"abbreviation\": \"Lon\",\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " \"abbreviation\": \"Lon\",\n" " \"abbreviation\": \"Lon\",\n" " AXIS[\"(lon)\",east,ANGLEUNIT[\"degree\",0.0174532925199433]]," EXPECT_EQ(tolower(cs->axisList()[1]->abbreviation()), "lon"); EXPECT_EQ(cs->axisList()[0]->abbreviation(), "lon"); "AXIS[\"Lat\",north],AXIS[\"Lon\",east]," " AXIS[\"longitude (lon)\",east],\n" " AXIS[\"(lon)\",east],\n" EXPECT_EQ(cs->axisList()[1]->abbreviation(), "lon"); " VERSION[\"ENRD-Shn Hel\"],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" "AXIS[\"geodetic longitude (Lon)\",east," " AXIS[\"geodetic longitude (Lon)\",east],\n" " \"abbreviation\": \"Lon\",\n" " \"abbreviation\": \"Lon\",\n" " \"abbreviation\": \"lon\",\n" " \"abbreviation\": \"lon\",\n" " \"abbreviation\": \"Lon\",\n" EXPECT_EQ(std::string(abbrev), "lon"); " AXIS[\"geodetic longitude (Lon)\",east," EXPECT_EQ(axisList[1]->abbreviation(), "Lon"); " AXIS[\"geodetic longitude (Lon)\",east],\n" export NOT_A_TRANSFORMATION='GEOGCRS["WGS 84",DATUM["World Geodetic System 1984 (G2139)",ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ANGLEUNIT["degree",0.0174532925199433]]]' AXIS["geodetic longitude (Lon)",east, "abbreviation": "Lon", "filename": "som.png", "name": "som", "projstring": "+proj=som +inc_angle=98.303820000243860022 +ps_rev=0.06866666666666667 +asc_lon=64.412896137498847793", - `Land Information New Zealand (LINZ) `_ Z_{dest} = Z_{src} + \left( dh + slope_{lat} * {\rho}_0 * (\phi - {\phi}_0) + slope_{lon} * {\nu}_0 * (\lambda - {\lambda}_0) * cos(\phi) \right) * :math:`dh`, :math:`slope_{lat}` and :math:`slope_{lon}` are the above mentioned parameters Z_{src} = Z_{dest} - \left( dh + slope_{lat} * {\rho}_0 * (\phi - {\phi}_0) + slope_{lon} * {\nu}_0 * (\lambda - {\lambda}_0) * cos(\phi) \r Z_{src} = Z_{dest} - \left( dh + slope_{lat} * {\rho}_0 * (\phi - {\phi}_0) + slope_{lon} * {\nu}_0 * (\lambda - {\lambda}_0) * cos(\phi) \right) Space oblique for LANDSAT is a specialization of :doc:`Space Oblique Mercator` #. :doc:`Space Oblique Mercator Projection` Space Oblique Mercator (SOM) The Space Oblique Mercator (SOM) projection is a generalization The Space Oblique Mercator (SOM) projection is a generalization of the Oblique representing satellite remote sensing data. In response, SOM was specifically | **Alias** | som | .. figure:: ./images/som.png :alt: Space Oblique Mercator (SOM) proj-string: ``+proj=som +inc_angle=98.303820000243860022 +ps_rev=0.06866666666666667 +asc_lon=64.412896137498847793`` proj-string: ``+proj=som +inc_angle=1.7157253262878522r +ps_rev=0.06866666666666667 +asc_lon=1.1242171183417042r`` Space oblique for MISR is a specialization of :doc:`Space Oblique Mercator` som "value": "nadcon5.nad27.nad83_1986.alaska.lon.trn.20160901.b", set HEL="60.171 24.938" export HEL="60.171 24.938" echo %HEL% %TAL% | geod -I +ellps=GRS80 echo %HEL% %TAL% | geod -I -f "%.12f" +ellps=GRS80 echo %HEL% -172.370214337896 41244.25 | geod -f "%.12f" +ellps=GRS80 echo %HEL% | %utm35% set HEL=60.171 24.938 NOTE: This is Windows syntax - Unix users use $HEL, etc. * https://github.com/Unidata/netcdf-java/blob/3ce72c0cd167609ed8c69152bb4a004d1daa9273/cdm/core/src/main/java/ucar/unidata/geoloc/projection/RotatedLatLon.java " \"abbreviation\": \"lon\",\n" .5 / Te * log((1. - con) / (1. + con))); * C++ API function :cpp:func:`createTunisiaMapingGrid()`. Use :cpp:func:`createTunisiaMiningGrid()` instead (`#3559 `_) (gives same results as: ``+proj=som +inc_angle=1.7157253262878522r +ps_rev=0.06866666666666667 +asc_lon=1.1242171183417042r``) proj-9.6.0/scripts/update_man.sh000775 001754 001755 00000000462 14764566077 016566 0ustar00e012349e012349000000 000000 # run from root of repo cd docs make man cd .. cp -r docs/build/man/*.1 man/man1 git add man/man1/proj.1 git add man/man1/cs2cs.1 git add man/man1/cct.1 git add man/man1/geod.1 git add man/man1/gie.1 git add man/man1/projinfo.1 git add man/man1/projsync.1 git commit -m "Update man-pages from Sphinx-docs" proj-9.6.0/src/000775 001754 001755 00000000000 14764566152 013202 5ustar00e012349e012349000000 000000 proj-9.6.0/src/CMakeLists.txt000664 001754 001755 00000000713 14764566077 015751 0ustar00e012349e012349000000 000000 # Global compile options for current directory and subdirectories add_compile_options("$<$:${PROJ_C_WARN_FLAGS}>") add_compile_options("$<$:${PROJ_CXX_WARN_FLAGS}>") # First configure proj library include(lib_proj.cmake) add_subdirectory(apps) if(BUILD_TESTING) add_subdirectory(tests) endif() if(APPLE) # Directory name for installed targets set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_FULL_LIBDIR}) endif() proj-9.6.0/src/aasincos.cpp000664 001754 001755 00000001644 14764566077 015521 0ustar00e012349e012349000000 000000 /* arc sin, cosine, tan2 and sqrt that will NOT fail */ #include #include "proj.h" #include "proj_internal.h" #define ONE_TOL 1.00000000000001 #define ATOL 1e-50 double aasin(PJ_CONTEXT *ctx, double v) { double av; if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return (v < 0. ? -M_HALFPI : M_HALFPI); } return asin(v); } double aacos(PJ_CONTEXT *ctx, double v) { double av; if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) proj_context_errno_set( ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); 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)); } proj-9.6.0/src/adjlon.cpp000664 001754 001755 00000001045 14764566077 015163 0ustar00e012349e012349000000 000000 /* reduce argument to range +/- PI */ #include #include "proj.h" #include "proj_internal.h" double adjlon(double longitude) { /* Let longitude slightly overshoot, to avoid spurious sign switching at the * date line */ if (fabs(longitude) < M_PI + 1e-12) return longitude; /* adjust to 0..2pi range */ longitude += M_PI; /* remove integral # of 'revolutions'*/ longitude -= M_TWOPI * floor(longitude / M_TWOPI); /* adjust back to -pi..pi range */ longitude -= M_PI; return longitude; } proj-9.6.0/src/apps/000775 001754 001755 00000000000 14764566152 014145 5ustar00e012349e012349000000 000000 proj-9.6.0/src/apps/CMakeLists.txt000664 001754 001755 00000004665 14764566077 016726 0ustar00e012349e012349000000 000000 set(CMAKE_UNITY_BUILD OFF) # Configure executable builds option(BUILD_APPS "Build PROJ applications (default value for BUILD_CCT, BUILD_CS2CS, etc.)" ON) option(BUILD_CCT "Build cct (coordinate conversion and transformation tool)" "${BUILD_APPS}") option(BUILD_CS2CS "Build cs2cs (coordinate systems to coordinate systems translation tool)" "${BUILD_APPS}") option(BUILD_GEOD "Build geod (computation of geodesic lines)" "${BUILD_APPS}") option(BUILD_GIE "Build gie (geospatial integrity investigation environment)" "${BUILD_APPS}") option(BUILD_PROJ "Build proj (cartographic projection tool)" "${BUILD_APPS}") option(BUILD_PROJINFO "Build projinfo (SRS and coordinate operation metadata/query tool)" "${BUILD_APPS}") option(BUILD_PROJSYNC "Build projsync (synchronize transformation support data)" "${BUILD_APPS}") if(NOT MSVC) # Use relative path so that package is relocatable if(APPLE) set(CMAKE_INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR}") else() set(CMAKE_INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") endif() # Other apps can link to libproj using e.g. LDFLAGS -Wl,-rpath,${prefix}/lib else() if(NOT WINDOWS_STORE) # Linking to setargv.obj enables wildcard globbing for the # command line utilities, when compiling with MSVC # https://docs.microsoft.com/cpp/c-language/expanding-wildcard-arguments set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} setargv.obj") endif() endif() if(BUILD_CCT) include(bin_cct.cmake) list(APPEND BIN_TARGETS cct) endif() if(BUILD_CS2CS) include(bin_cs2cs.cmake) list(APPEND BIN_TARGETS cs2cs) endif() if(BUILD_GEOD) include(bin_geod.cmake) list(APPEND BIN_TARGETS geod) endif() if(BUILD_PROJ) include(bin_proj.cmake) list(APPEND BIN_TARGETS binproj) endif() if(BUILD_PROJINFO) include(bin_projinfo.cmake) list(APPEND BIN_TARGETS projinfo) endif() # Always build gie if testing is requested if(BUILD_GIE OR BUILD_TESTING) include(bin_gie.cmake) list(APPEND BIN_TARGETS gie) endif() if(BUILD_PROJSYNC) if(NOT ENABLE_CURL) message(SEND_ERROR "projsync requires Curl") endif() include(bin_projsync.cmake) list(APPEND BIN_TARGETS projsync) endif() # global configurations for all apps if(MSVC OR CMAKE_CONFIGURATION_TYPES) if(BIN_TARGETS) # Add _d suffix for debug versions of the apps set_target_properties(${BIN_TARGETS} PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) endif() endif() proj-9.6.0/src/apps/bin_cct.cmake000664 001754 001755 00000000452 14764566077 016557 0ustar00e012349e012349000000 000000 set(CCT_SRC cct.cpp proj_strtod.cpp proj_strtod.h ) set(CCT_INCLUDE optargpm.h) source_group("Source Files\\Bin" FILES ${CCT_SRC}) add_executable(cct ${CCT_SRC} ${CCT_INCLUDE}) target_link_libraries(cct PRIVATE ${PROJ_LIBRARIES}) install(TARGETS cct DESTINATION ${CMAKE_INSTALL_BINDIR}) proj-9.6.0/src/apps/bin_cs2cs.cmake000664 001754 001755 00000000424 14764566077 017022 0ustar00e012349e012349000000 000000 set(CS2CS_SRC cs2cs.cpp emess.cpp utils.cpp ) source_group("Source Files\\Bin" FILES ${CS2CS_SRC}) add_executable(cs2cs ${CS2CS_SRC} ${CS2CS_INCLUDE}) target_link_libraries(cs2cs PRIVATE ${PROJ_LIBRARIES}) install(TARGETS cs2cs DESTINATION ${CMAKE_INSTALL_BINDIR}) proj-9.6.0/src/apps/bin_geod.cmake000664 001754 001755 00000002221 14764566077 016720 0ustar00e012349e012349000000 000000 set(GEOD_SRC geod.cpp geod_set.cpp geod_interface.cpp emess.cpp utils.cpp ) set(GEOD_INCLUDE geod_interface.h) source_group("Source Files\\Bin" FILES ${GEOD_SRC} ${GEOD_INCLUDE}) add_executable(geod ${GEOD_SRC} ${GEOD_INCLUDE}) target_link_libraries(geod PRIVATE ${PROJ_LIBRARIES}) install(TARGETS geod DESTINATION ${CMAKE_INSTALL_BINDIR}) # invgeod target: symlink or copy of geod executable if(UNIX) set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invgeod${CMAKE_EXECUTABLE_SUFFIX}") set(link_source "geod${CMAKE_EXECUTABLE_SUFFIX}") add_custom_command( OUTPUT ${link_target} COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target} WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" DEPENDS geod COMMENT "Generating invgeod" VERBATIM ) add_custom_target(invgeod ALL DEPENDS ${link_target}) install(FILES ${link_target} DESTINATION ${CMAKE_INSTALL_BINDIR}) else() add_executable(invgeod ${GEOD_SRC} ${GEOD_INCLUDE}) target_link_libraries(invgeod PRIVATE ${PROJ_LIBRARIES}) install(TARGETS invgeod DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() proj-9.6.0/src/apps/bin_gie.cmake000664 001754 001755 00000000504 14764566077 016550 0ustar00e012349e012349000000 000000 set(GIE_SRC gie.cpp proj_strtod.cpp proj_strtod.h ) set(GIE_INCLUDE optargpm.h) source_group("Source Files\\Bin" FILES ${GIE_SRC}) add_executable(gie ${GIE_SRC} ${GIE_INCLUDE}) target_link_libraries(gie PRIVATE ${PROJ_LIBRARIES}) if(BUILD_GIE) install(TARGETS gie DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() proj-9.6.0/src/apps/bin_proj.cmake000664 001754 001755 00000002155 14764566077 016762 0ustar00e012349e012349000000 000000 set(PROJ_SRC proj.cpp emess.cpp utils.cpp ) source_group("Source Files\\Bin" FILES ${PROJ_SRC}) add_executable(binproj ${PROJ_SRC}) set_target_properties(binproj PROPERTIES RUNTIME_OUTPUT_NAME proj) target_link_libraries(binproj PRIVATE ${PROJ_LIBRARIES}) install(TARGETS binproj DESTINATION ${CMAKE_INSTALL_BINDIR}) # invproj target: symlink or copy of proj executable if(UNIX) set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invproj${CMAKE_EXECUTABLE_SUFFIX}") set(link_source "proj${CMAKE_EXECUTABLE_SUFFIX}") add_custom_command( OUTPUT ${link_target} COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target} WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" DEPENDS binproj COMMENT "Generating invproj" VERBATIM ) add_custom_target(invproj ALL DEPENDS ${link_target}) install(FILES ${link_target} DESTINATION ${CMAKE_INSTALL_BINDIR}) else() add_executable(invproj ${PROJ_SRC}) target_link_libraries(invproj PRIVATE ${PROJ_LIBRARIES}) install(TARGETS invproj DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() proj-9.6.0/src/apps/bin_projinfo.cmake000664 001754 001755 00000000525 14764566077 017635 0ustar00e012349e012349000000 000000 set(PROJINFO_SRC projinfo.cpp) source_group("Source Files\\Bin" FILES ${PROJINFO_SRC}) add_executable(projinfo ${PROJINFO_SRC}) target_link_libraries(projinfo PRIVATE ${PROJ_LIBRARIES}) install(TARGETS projinfo DESTINATION ${CMAKE_INSTALL_BINDIR}) if(CURL_ENABLED) target_compile_definitions(projinfo PRIVATE -DCURL_ENABLED) endif() proj-9.6.0/src/apps/bin_projsync.cmake000664 001754 001755 00000000375 14764566077 017661 0ustar00e012349e012349000000 000000 set(PROJSYNC_SRC projsync.cpp) source_group("Source Files\\Bin" FILES ${PROJSYNC_SRC}) add_executable(projsync ${PROJSYNC_SRC}) target_link_libraries(projsync PRIVATE ${PROJ_LIBRARIES}) install(TARGETS projsync DESTINATION ${CMAKE_INSTALL_BINDIR}) proj-9.6.0/src/apps/cct.cpp000664 001754 001755 00000052144 14764566077 015436 0ustar00e012349e012349000000 000000 /*********************************************************************** The cct 4D Transformation program ************************************************************************ cct is a 4D equivalent to the "proj" projection program. cct is an acronym meaning "Coordinate Conversion and Transformation". The acronym refers to definitions given in the OGC 08-015r2/ISO-19111 standard "Geographical Information -- Spatial Referencing by Coordinates", which defines two different classes of coordinate operations: *Coordinate Conversions*, which are coordinate operations where input and output datum are identical (e.g. conversion from geographical to cartesian coordinates) and *Coordinate Transformations*, which are coordinate operations where input and output datums differ (e.g. change of reference frame). cct, however, also refers to Carl Christian Tscherning (1942--2014), professor of Geodesy at the University of Copenhagen, mentor and advisor for a generation of Danish geodesists, colleague and collaborator for two generations of global geodesists, Secretary General for the International Association of Geodesy, IAG (1995--2007), fellow of the American Geophysical Union (1991), recipient of the IAG Levallois Medal (2007), the European Geosciences Union Vening Meinesz Medal (2008), and of numerous other honours. cct, or Christian, as he was known to most of us, was recognized for his good mood, his sharp wit, his tireless work, and his great commitment to the development of geodesy - both through his scientific contributions, comprising more than 250 publications, and by his mentoring and teaching of the next generations of geodesists. As Christian was an avid Fortran programmer, and a keen Unix connoisseur, he would have enjoyed to know that his initials would be used to name a modest Unix style transformation filter, hinting at the tireless aspect of his personality, which was certainly one of the reasons he accomplished so much, and meant so much to so many people. Hence, in honour of cct (the geodesist) this is cct (the program). ************************************************************************ Thomas Knudsen, thokn@sdfe.dk, 2016-05-25/2017-10-26 ************************************************************************ * Copyright (c) 2016, 2017 Thomas Knudsen * Copyright (c) 2017, SDFE * * 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 #include #include #include #include #include // std::ifstream #include #include "optargpm.h" #include "proj.h" #include "proj_internal.h" #include "proj_strtod.h" static void logger(void *data, int level, const char *msg); static void print(PJ_LOG_LEVEL log_level, const char *fmt, ...); /* Prototypes from functions in this file */ static const char *column(const char *buf, int n); static char *column(char *buf, int n); PJ_COORD parse_input_line(const char *buf, int *columns, double fixed_height, double fixed_time); static const char usage[] = { "--------------------------------------------------------------------------" "------\n" "Usage: %s [-options]... [+operator_specs]... infile...\n" "--------------------------------------------------------------------------" "------\n" "Options:\n" "--------------------------------------------------------------------------" "------\n" " -c x,y,z,t Specify input columns for (up to) 4 input " "parameters.\n" " Defaults to 1,2,3,4\n" " -d n Specify number of decimals in output.\n" " -I Do the inverse transformation\n" " -o /path/to/file Specify output file name\n" " -t value Provide a fixed t value for all input data (e.g. -t " "0)\n" " -z value Provide a fixed z value for all input data (e.g. -z " "0)\n" " -s n Skip n first lines of a infile\n" " -v Verbose: Provide non-essential informational " "output.\n" " Repeat -v for more verbosity (e.g. -vv)\n" "--------------------------------------------------------------------------" "------\n" "Long Options:\n" "--------------------------------------------------------------------------" "------\n" " --output Alias for -o\n" " --columns Alias for -c\n" " --decimals Alias for -d\n" " --height Alias for -z\n" " --time Alias for -t\n" " --verbose Alias for -v\n" " --inverse Alias for -I\n" " --skip-lines Alias for -s\n" " --help Alias for -h\n" " --version Print version number\n" "--------------------------------------------------------------------------" "------\n" "Operator Specs:\n" "--------------------------------------------------------------------------" "------\n" "The operator specs describe the action to be performed by cct, e.g:\n" "\n" " +proj=utm +ellps=GRS80 +zone=32\n" "\n" "instructs cct to convert input data to Universal Transverse Mercator, " "zone 32\n" "coordinates, based on the GRS80 ellipsoid.\n" "\n" "Hence, the command\n" "\n" " echo 12 55 | cct -z0 -t0 +proj=utm +zone=32 +ellps=GRS80\n" "\n" "Should give results comparable to the classic proj command\n" "\n" " echo 12 55 | proj +proj=utm +zone=32 +ellps=GRS80\n" "--------------------------------------------------------------------------" "------\n" "Examples:\n" "--------------------------------------------------------------------------" "------\n" "1. convert geographical input to UTM zone 32 on the GRS80 ellipsoid:\n" " cct +proj=utm +ellps=GRS80 +zone=32\n" "2. roundtrip accuracy check for the case above:\n" " cct +proj=pipeline +ellps=GRS80 +zone=32 +step +proj=utm \\\n" " +step +proj=utm +inv\n" "3. as (1) but specify input columns for longitude, latitude, height and " "time:\n" " cct -c 5,2,1,4 +proj=utm +ellps=GRS80 +zone=32\n" "4. as (1) but specify fixed height and time, hence needing only 2 cols in " "input:\n" " cct -t 0 -z 0 +proj=utm +ellps=GRS80 +zone=32\n" "--------------------------------------------------------------------------" "------\n"}; static void logger(void *data, int level, const char *msg) { FILE *stream; int log_tell = proj_log_level(PJ_DEFAULT_CTX, PJ_LOG_TELL); stream = (FILE *)data; /* if we use PJ_LOG_NONE we always want to print stuff to stream */ if (level == PJ_LOG_NONE) { fprintf(stream, "%s\n", msg); return; } /* otherwise only print if log level set by user is high enough or error */ if (level <= log_tell || level == PJ_LOG_ERROR) fprintf(stderr, "%s\n", msg); } FILE *fout; static void print(PJ_LOG_LEVEL log_level, const char *fmt, ...) { va_list args; char *msg_buf; va_start(args, fmt); const size_t msg_buf_size = 100000; msg_buf = (char *)malloc(msg_buf_size); if (msg_buf == nullptr) { va_end(args); return; } vsnprintf(msg_buf, msg_buf_size, fmt, args); logger((void *)fout, log_level, msg_buf); va_end(args); free(msg_buf); } int main(int argc, char **argv) { PJ *P = nullptr; PJ_COORD point; PJ_PROJ_INFO info; OPTARGS *o; char blank_comment[] = ""; char whitespace[] = " "; int i, nfields = 4, skip_lines = 0, verbose; double fixed_z = HUGE_VAL, fixed_time = HUGE_VAL; int decimals_angles = 10; int decimals_distances = 4; int columns_xyzt[] = {1, 2, 3, 4}; const char *longflags[] = {"v=verbose", "h=help", "I=inverse", "version", nullptr}; const char *longkeys[] = {"o=output", "c=columns", "d=decimals", "z=height", "t=time", "s=skip-lines", nullptr}; fout = stdout; pj_stderr_proj_lib_deprecation_warning(); /* coverity[tainted_data] */ o = opt_parse(argc, argv, "hvI", "cdozts", longflags, longkeys); if (nullptr == o) return 0; if (opt_given(o, "h") || argc == 1) { printf(usage, o->progname); return 0; } PJ_DIRECTION direction = opt_given(o, "I") ? PJ_INV : PJ_FWD; verbose = std::min(opt_given(o, "v"), 3); /* log level can't be larger than 3 */ if (verbose > 0) { proj_log_level(PJ_DEFAULT_CTX, static_cast(verbose)); } proj_log_func(PJ_DEFAULT_CTX, (void *)fout, logger); if (opt_given(o, "version")) { print(PJ_LOG_NONE, "%s: %s", o->progname, pj_get_release()); return 0; } if (opt_given(o, "o")) fout = fopen(opt_arg(o, "output"), "wt"); if (nullptr == fout) { print(PJ_LOG_ERROR, "%s: Cannot open '%s' for output", o->progname, opt_arg(o, "output")); free(o); return 1; } print(PJ_LOG_TRACE, "%s: Running in very verbose mode", o->progname); if (opt_given(o, "z")) { fixed_z = proj_atof(opt_arg(o, "z")); nfields--; } if (opt_given(o, "t")) { fixed_time = proj_atof(opt_arg(o, "t")); nfields--; } if (opt_given(o, "d")) { int dec = atoi(opt_arg(o, "d")); decimals_angles = dec; decimals_distances = dec; } if (opt_given(o, "s")) { skip_lines = atoi(opt_arg(o, "s")); } if (opt_given(o, "c")) { int ncols; /* reset column numbers to ease comment output later on */ for (i = 0; i < 4; i++) columns_xyzt[i] = 0; /* cppcheck-suppress invalidscanf */ ncols = sscanf(opt_arg(o, "c"), "%d,%d,%d,%d", columns_xyzt, columns_xyzt + 1, columns_xyzt + 2, columns_xyzt + 3); if (ncols != nfields) { print(PJ_LOG_ERROR, "%s: Too few input columns given: '%s'", o->progname, opt_arg(o, "c")); free(o); if (stdout != fout) fclose(fout); return 1; } } /* Setup transformation */ if (o->pargc == 0 && o->fargc > 0) { std::string input(o->fargv[0]); if (!input.empty() && input[0] == '@') { std::ifstream fs; auto filename = input.substr(1); fs.open(filename, std::fstream::in | std::fstream::binary); if (!fs.is_open()) { std::cerr << "cannot open " << filename << std::endl; std::exit(1); } input.clear(); while (!fs.eof()) { char buffer[256]; fs.read(buffer, sizeof(buffer)); input.append(buffer, static_cast(fs.gcount())); if (input.size() > 100 * 1000) { fs.close(); std::cerr << "too big file " << filename << std::endl; std::exit(1); } } fs.close(); } /* Assume we got a auth:code combination */ auto n = input.find(":"); if (n > 0) { std::string auth = input.substr(0, n); std::string code = input.substr(n + 1, input.length()); // Check that the authority matches one of the known ones auto authorityList = proj_get_authorities_from_database(nullptr); if (authorityList) { for (auto iter = authorityList; *iter; iter++) { if (*iter == auth) { P = proj_create_from_database( nullptr, auth.c_str(), code.c_str(), PJ_CATEGORY_COORDINATE_OPERATION, 0, nullptr); break; } } proj_string_list_destroy(authorityList); } } if (P == nullptr) { /* if we didn't get a auth:code combo we try to see if the input * matches */ /* anything else */ P = proj_create(nullptr, input.c_str()); if (P) { const auto type = proj_get_type(P); switch (type) { case PJ_TYPE_CONVERSION: case PJ_TYPE_TRANSFORMATION: case PJ_TYPE_CONCATENATED_OPERATION: case PJ_TYPE_OTHER_COORDINATE_OPERATION: // ok; break; default: print(PJ_LOG_ERROR, "%s: Input object is not a coordinate operation%s.", o->progname, proj_is_crs(P) ? ", but a CRS" : ""); free(o); proj_destroy(P); if (stdout != fout) fclose(fout); return 1; } } } /* If instantiating operation without +-options optargpm thinks the * input is */ /* a file, hence we move all o->fargv entries one place closer to the * start */ /* of the array. This effectively overwrites the input and only leaves a * list */ /* of files in o->fargv. */ o->fargc = o->fargc - 1; for (int j = 0; j < o->fargc; j++) { o->fargv[j] = o->fargv[j + 1]; } } else { P = proj_create_argv(nullptr, o->pargc, o->pargv); } if (nullptr == P) { print(PJ_LOG_ERROR, "%s: Bad transformation arguments - (%s)\n '%s -h' for help", o->progname, proj_errno_string(proj_errno(P)), o->progname); free(o); if (stdout != fout) fclose(fout); return 1; } info = proj_pj_info(P); print(PJ_LOG_TRACE, "Final: %s argc=%d pargc=%d", info.definition, argc, o->pargc); if (direction == PJ_INV) { /* fail if an inverse operation is not available */ if (!info.has_inverse) { print(PJ_LOG_ERROR, "Inverse operation not available"); if (stdout != fout) fclose(fout); return 1; } /* We have no API call for inverting an operation, so we brute force it. */ P->inverted = !(P->inverted); } direction = PJ_FWD; /* Allocate input buffer */ constexpr int BUFFER_SIZE = 10000; char *buf = static_cast(calloc(1, BUFFER_SIZE)); if (nullptr == buf) { print(PJ_LOG_ERROR, "%s: Out of memory", o->progname); proj_destroy(P); free(o); if (stdout != fout) fclose(fout); return 1; } /* Loop over all records of all input files */ int previous_index = -1; bool gotError = false; while (opt_input_loop(o, optargs_file_format_text, &gotError)) { int err; char *bufptr = fgets(buf, BUFFER_SIZE - 1, o->input); if (opt_eof(o)) { continue; } if (nullptr == bufptr) { print(PJ_LOG_ERROR, "Read error in record %d", (int)o->record_index); continue; } const bool bFirstLine = o->input_index != previous_index; previous_index = o->input_index; if (bFirstLine && static_cast(bufptr[0]) == 0xEF && static_cast(bufptr[1]) == 0xBB && static_cast(bufptr[2]) == 0xBF) { // Skip UTF-8 Byte Order Marker (BOM) bufptr += 3; } point = parse_input_line(bufptr, columns_xyzt, fixed_z, fixed_time); if (skip_lines > 0) { skip_lines--; continue; } /* if it's a comment or blank line, we reflect it */ const char *c = column(bufptr, 1); if (c && ((*c == '\0') || (*c == '#'))) { fprintf(fout, "%s", bufptr); continue; } if (HUGE_VAL == point.xyzt.x) { /* otherwise, it must be a syntax error */ print(PJ_LOG_NONE, "# Record %d UNREADABLE: %s", (int)o->record_index, bufptr); print(PJ_LOG_ERROR, "%s: Could not parse file '%s' line %d", o->progname, opt_filename(o), opt_record(o)); continue; } if (proj_angular_input(P, direction)) { point.lpzt.lam = proj_torad(point.lpzt.lam); point.lpzt.phi = proj_torad(point.lpzt.phi); } err = proj_errno_reset(P); /* coverity[returned_value] */ point = proj_trans(P, direction, point); if (HUGE_VAL == point.xyzt.x) { /* transformation error */ print(PJ_LOG_NONE, "# Record %d TRANSFORMATION ERROR: %s (%s)", (int)o->record_index, bufptr, proj_errno_string(proj_errno(P))); proj_errno_restore(P, err); continue; } proj_errno_restore(P, err); /* handle comment string */ char *comment = column(bufptr, nfields + 1); if (opt_given(o, "c")) { /* what number is the last coordinate column in the input data? */ int colmax = 0; for (i = 0; i < 4; i++) colmax = MAX(colmax, columns_xyzt[i]); comment = column(bufptr, colmax + 1); } /* remove the line feed from comment, as logger() above, invoked by print() below (output), will add one */ size_t len = strlen(comment); if (len >= 1) comment[len - 1] = '\0'; const char *comment_delimiter = *comment ? whitespace : blank_comment; /* Time to print the result */ /* use same arguments to printf format string for both radians and degrees; convert radians to degrees before printing */ if (proj_angular_output(P, direction) || proj_degree_output(P, direction)) { if (proj_angular_output(P, direction)) { point.lpzt.lam = proj_todeg(point.lpzt.lam); point.lpzt.phi = proj_todeg(point.lpzt.phi); } print(PJ_LOG_NONE, "%14.*f %14.*f %12.*f %12.4f%s%s", decimals_angles, point.xyzt.x, decimals_angles, point.xyzt.y, decimals_distances, point.xyzt.z, point.xyzt.t, comment_delimiter, comment); } else print(PJ_LOG_NONE, "%13.*f %13.*f %12.*f %12.4f%s%s", decimals_distances, point.xyzt.x, decimals_distances, point.xyzt.y, decimals_distances, point.xyzt.z, point.xyzt.t, comment_delimiter, comment); if (fout == stdout) fflush(stdout); } proj_destroy(P); if (stdout != fout) fclose(fout); free(o); free(buf); return gotError ? 1 : 0; } /* return a pointer to the n'th column of buf */ static const char *column(const char *buf, int n) { int i; if (n <= 0) return buf; for (i = 0; i < n; i++) { while (isspace(*buf)) buf++; if (i == n - 1) break; while ((0 != *buf) && !isspace(*buf)) buf++; } return buf; } static char *column(char *buf, int n) { return const_cast(column(const_cast(buf), n)); } /* column to double */ static double cold(const char *args, int col) { char *endp; double d; const char *target = column(args, col); d = proj_strtod(target, &endp); if (endp == target) return HUGE_VAL; return d; } PJ_COORD parse_input_line(const char *buf, int *columns, double fixed_height, double fixed_time) { PJ_COORD err = proj_coord(HUGE_VAL, HUGE_VAL, HUGE_VAL, HUGE_VAL); PJ_COORD result = err; int prev_errno = errno; errno = 0; result.xyzt.z = fixed_height; result.xyzt.t = fixed_time; result.xyzt.x = cold(buf, columns[0]); result.xyzt.y = cold(buf, columns[1]); if (result.xyzt.z == HUGE_VAL) result.xyzt.z = cold(buf, columns[2]); if (result.xyzt.t == HUGE_VAL) result.xyzt.t = cold(buf, columns[3]); if (0 != errno) return err; errno = prev_errno; return result; } proj-9.6.0/src/apps/cs2cs.cpp000664 001754 001755 00000112304 14764566077 015675 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #define FROM_PROJ_CPP #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_experimental.h" #include "proj_internal.h" #include "emess.h" #include "utils.h" // clang-format on #define MAX_LINE 1000 static PJ *transformation = nullptr; static bool srcIsLongLat = false; static double srcToRadians = 0.0; static bool destIsLongLat = false; static double destToRadians = 0.0; static bool destIsLatLong = false; 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 const char *oform = nullptr; /* output format for x-y or decimal degrees */ static char oform_buffer[16]; /* buffer for oform when using -d */ static const char *oterr = "*\t*"; /* output line for unprojectable input */ static const char *usage = "%s\nusage: %s [-dDeEfIlrstvwW [args]]\n" " [[--area name_or_code] | [--bbox " "west_long,south_lat,east_long,north_lat]]\n" " [--authority {name}] [--3d]\n" " [--accuracy {accuracy}] [--only-best[=yes|=no]] " "[--no-ballpark]\n" " [--s_epoch {epoch}] [--t_epoch {epoch}]\n" " [+opt[=arg] ...] [+to +opt[=arg] ...] [file ...]\n"; static double (*informat)(const char *, char **); /* input data deformatter function */ using namespace NS_PROJ::io; using namespace NS_PROJ::metadata; using namespace NS_PROJ::util; using namespace NS_PROJ::internal; /************************************************************************/ /* process() */ /* */ /* File processing function. */ /************************************************************************/ static void process(FILE *fid) { char line[MAX_LINE + 3], *s, pline[40]; PJ_UV data; int nLineNumber = 0; while (true) { double z; ++nLineNumber; ++emess_dat.File_line; if (!(s = fgets(line, MAX_LINE, fid))) break; if (nLineNumber == 1 && static_cast(s[0]) == 0xEF && static_cast(s[1]) == 0xBB && static_cast(s[2]) == 0xBF) { // Skip UTF-8 Byte Order Marker (BOM) s += 3; } const char *pszLineAfterBOM = s; 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); /* To avoid breaking existing tests, we read what is a possible t */ /* component of the input and rewind the s-pointer so that the final */ /* output has consistent behavior, with or without t values. */ /* This is a bit of a hack, in most cases 4D coordinates will be */ /* written to STDOUT (except when using -E) but the output format */ /* specified with -f is not respected for the t component, rather it */ /* is forward verbatim from the input. */ char *before_time = s; double t = strtod(s, &s); if (s == before_time) t = HUGE_VAL; s = before_time; if (data.v == HUGE_VAL) data.u = HUGE_VAL; if (!*s && (s > line)) --s; /* assumed we gobbled \n */ if (echoin) { char temp; temp = *s; *s = '\0'; (void)fputs(pszLineAfterBOM, stdout); *s = temp; putchar('\t'); } if (data.u != HUGE_VAL) { if (srcIsLongLat && fabs(srcToRadians - M_PI / 180) < 1e-10) { /* dmstor gives values to radians. Convert now to the SRS unit */ data.u /= srcToRadians; data.v /= srcToRadians; } PJ_COORD coord; coord.xyzt.x = data.u; coord.xyzt.y = data.v; coord.xyzt.z = z; coord.xyzt.t = t; coord = proj_trans(transformation, PJ_FWD, coord); data.u = coord.xyz.x; data.v = coord.xyz.y; z = coord.xyz.z; } if (data.u == HUGE_VAL) /* error output */ fputs(oterr, stdout); else if (destIsLongLat && !oform) { /*ascii DMS output */ // rtodms() expect radians: convert from the output SRS unit data.u *= destToRadians; data.v *= destToRadians; if (destIsLatLong) { if (reverseout) { fputs(rtodms(pline, sizeof(pline), data.v, 'E', 'W'), stdout); putchar('\t'); fputs(rtodms(pline, sizeof(pline), data.u, 'N', 'S'), stdout); } else { fputs(rtodms(pline, sizeof(pline), data.u, 'N', 'S'), stdout); putchar('\t'); fputs(rtodms(pline, sizeof(pline), data.v, 'E', 'W'), stdout); } } else if (reverseout) { fputs(rtodms(pline, sizeof(pline), data.v, 'N', 'S'), stdout); putchar('\t'); fputs(rtodms(pline, sizeof(pline), data.u, 'E', 'W'), stdout); } else { fputs(rtodms(pline, sizeof(pline), data.u, 'E', 'W'), stdout); putchar('\t'); fputs(rtodms(pline, sizeof(pline), data.v, 'N', 'S'), stdout); } } else { /* x-y or decimal degree ascii output */ if (destIsLongLat) { data.v *= destToRadians * RAD_TO_DEG; data.u *= destToRadians * RAD_TO_DEG; } if (reverseout) { limited_fprintf_for_number(stdout, oform, data.v); putchar('\t'); limited_fprintf_for_number(stdout, oform, data.u); } else { limited_fprintf_for_number(stdout, oform, data.u); putchar('\t'); limited_fprintf_for_number(stdout, oform, data.v); } } putchar(' '); if (oform != nullptr) limited_fprintf_for_number(stdout, oform, z); else printf("%.3f", z); if (s) printf("%s", s); else printf("\n"); fflush(stdout); } } /************************************************************************/ /* instantiate_crs() */ /************************************************************************/ static PJ *instantiate_crs(const PJ *crs_in, bool &isLongLatCS, double &toRadians, bool &isLatFirst) { PJ *crs = nullptr; isLongLatCS = false; toRadians = 0.0; isLatFirst = false; auto type = proj_get_type(crs_in); if (type == PJ_TYPE_BOUND_CRS) { crs = proj_get_source_crs(nullptr, crs_in); type = proj_get_type(crs); } else { crs = proj_clone(nullptr, crs_in); } if (type == PJ_TYPE_GEOGRAPHIC_2D_CRS || type == PJ_TYPE_GEOGRAPHIC_3D_CRS || type == PJ_TYPE_GEODETIC_CRS) { auto cs = proj_crs_get_coordinate_system(nullptr, crs); assert(cs); const char *axisName = ""; proj_cs_get_axis_info(nullptr, cs, 0, &axisName, // name, nullptr, // abbrev nullptr, // direction &toRadians, nullptr, // unit name nullptr, // unit authority nullptr // unit code ); isLatFirst = NS_PROJ::internal::ci_find(std::string(axisName), "latitude") != std::string::npos; isLongLatCS = isLatFirst || NS_PROJ::internal::ci_find( std::string(axisName), "longitude") != std::string::npos; proj_destroy(cs); } return crs; } /************************************************************************/ /* get_geog_crs_proj_string_from_proj_crs() */ /************************************************************************/ static PJ *get_geog_crs_proj_string_from_proj_crs(const PJ *src, double &toRadians, bool &isLatFirst) { auto srcType = proj_get_type(src); if (srcType != PJ_TYPE_PROJECTED_CRS) { return nullptr; } auto base = proj_get_source_crs(nullptr, src); assert(base); auto baseType = proj_get_type(base); if (baseType != PJ_TYPE_GEOGRAPHIC_2D_CRS && baseType != PJ_TYPE_GEOGRAPHIC_3D_CRS) { proj_destroy(base); return nullptr; } auto cs = proj_crs_get_coordinate_system(nullptr, base); assert(cs); const char *axisName = ""; proj_cs_get_axis_info(nullptr, cs, 0, &axisName, // name, nullptr, // abbrev nullptr, // direction &toRadians, nullptr, // unit name nullptr, // unit authority nullptr // unit code ); isLatFirst = NS_PROJ::internal::ci_find(std::string(axisName), "latitude") != std::string::npos; proj_destroy(cs); return base; } // --------------------------------------------------------------------------- static bool is3DCRS(const PJ *crs) { auto type = proj_get_type(crs); if (type == PJ_TYPE_COMPOUND_CRS) return true; if (type == PJ_TYPE_GEOGRAPHIC_3D_CRS) return true; if (type == PJ_TYPE_GEODETIC_CRS || type == PJ_TYPE_PROJECTED_CRS || type == PJ_TYPE_DERIVED_PROJECTED_CRS) { auto cs = proj_crs_get_coordinate_system(nullptr, crs); assert(cs); const bool ret = proj_cs_get_axis_count(nullptr, cs) == 3; proj_destroy(cs); return ret; } return false; } /************************************************************************/ /* main() */ /************************************************************************/ int main(int argc, char **argv) { char *arg; char **eargv = argv; std::string fromStr; std::string toStr; FILE *fid; int eargc = 0, mon = 0; int have_to_flag = 0, inverse = 0; int use_env_locale = 0; pj_stderr_proj_lib_deprecation_warning(); if (argc == 0) { exit(1); } /* This is just to check that pj_init() is locale-safe */ /* Used by test/cli/test_cs2cs_locale.sh */ if (getenv("PROJ_USE_ENV_LOCALE") != nullptr) use_env_locale = 1; /* Enable compatibility mode for init=epsg:XXXX by default */ if (getenv("PROJ_USE_PROJ4_INIT_RULES") == nullptr) { proj_context_use_proj4_init_rules(nullptr, true); } if ((emess_dat.Prog_name = strrchr(*argv, DIR_CHAR)) != nullptr) ++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); } // First pass to check if we have "cs2cs [-bla]* []" // syntax bool isProj4StyleSyntax = false; for (int i = 1; i < argc; i++) { if (argv[i][0] == '+') { isProj4StyleSyntax = true; break; } } ExtentPtr bboxFilter; std::string area; const char *authority = nullptr; double accuracy = -1; bool allowBallpark = true; bool onlyBestSet = false; bool errorIfBestTransformationNotAvailable = false; bool promoteTo3D = false; std::string sourceEpoch; std::string targetEpoch; /* process run line arguments */ while (--argc > 0) { /* collect run line arguments */ ++argv; if (strcmp(*argv, "--area") == 0) { ++argv; --argc; if (argc == 0) { emess(1, "missing argument for --area"); std::exit(1); } area = *argv; } else if (strcmp(*argv, "--bbox") == 0) { ++argv; --argc; if (argc == 0) { emess(1, "missing argument for --bbox"); std::exit(1); } auto bboxStr(*argv); auto bbox(split(bboxStr, ',')); if (bbox.size() != 4) { std::cerr << "Incorrect number of values for option --bbox: " << bboxStr << std::endl; std::exit(1); } try { std::vector bboxValues = { c_locale_stod(bbox[0]), c_locale_stod(bbox[1]), c_locale_stod(bbox[2]), c_locale_stod(bbox[3])}; const double west = bboxValues[0]; const double south = bboxValues[1]; const double east = bboxValues[2]; const double north = bboxValues[3]; constexpr double SOME_MARGIN = 10; if (south < -90 - SOME_MARGIN && std::fabs(west) <= 90 && std::fabs(east) <= 90) std::cerr << "Warning: suspicious south latitude: " << south << std::endl; if (north > 90 + SOME_MARGIN && std::fabs(west) <= 90 && std::fabs(east) <= 90) std::cerr << "Warning: suspicious north latitude: " << north << std::endl; bboxFilter = Extent::createFromBBOX(west, south, east, north) .as_nullable(); } catch (const std::exception &e) { std::cerr << "Invalid value for option --bbox: " << bboxStr << ", " << e.what() << std::endl; std::exit(1); } } else if (strcmp(*argv, "--accuracy") == 0) { ++argv; --argc; if (argc == 0) { emess(1, "missing argument for --accuracy"); std::exit(1); } try { accuracy = c_locale_stod(*argv); } catch (const std::exception &e) { std::cerr << "Invalid value for option --accuracy: " << e.what() << std::endl; std::exit(1); } } else if (strcmp(*argv, "--authority") == 0) { ++argv; --argc; if (argc == 0) { emess(1, "missing argument for --authority"); std::exit(1); } authority = *argv; } else if (strcmp(*argv, "--no-ballpark") == 0) { allowBallpark = false; } else if (strcmp(*argv, "--only-best") == 0 || strcmp(*argv, "--only-best=yes") == 0) { onlyBestSet = true; errorIfBestTransformationNotAvailable = true; } else if (strcmp(*argv, "--only-best=no") == 0) { onlyBestSet = true; errorIfBestTransformationNotAvailable = false; } else if (strcmp(*argv, "--3d") == 0) { promoteTo3D = true; } else if (strcmp(*argv, "--s_epoch") == 0) { ++argv; --argc; if (argc == 0) { emess(1, "missing argument for --s_epoch"); std::exit(1); } sourceEpoch = *argv; } else if (strcmp(*argv, "--t_epoch") == 0) { ++argv; --argc; if (argc == 0) { emess(1, "missing argument for --t_epoch"); std::exit(1); } targetEpoch = *argv; } else if (**argv == '-') { for (arg = *argv;;) { switch (*++arg) { case '\0': /* position of "stdin" */ if (arg[-1] == '-') eargv[eargc++] = const_cast("-"); 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 */ const struct PJ_LIST *lp; int do_long = arg[1] == 'P', c; const char *str; for (lp = proj_list_operations(); 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' */ const struct PJ_LIST *lp; arg += 2; for (lp = proj_list_operations(); 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 */ const struct PJ_ELLPS *le; for (le = proj_list_ellps(); 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 */ auto units = proj_get_units_from_database( nullptr, nullptr, "linear", false, nullptr); for (int i = 0; units && units[i]; i++) { if (units[i]->proj_short_name) { (void)printf("%12s %-20.15g %s\n", units[i]->proj_short_name, units[i]->conv_factor, units[i]->name); } } proj_unit_list_destroy(units); } else if (arg[1] == 'm') { /* list prime meridians */ (void)fprintf(stderr, "This list is no longer updated, " "and some values may " "conflict with other sources.\n"); const struct PJ_PRIME_MERIDIANS *lpm; for (lpm = proj_list_prime_meridians(); lpm->id; ++lpm) (void)printf("%12s %-30s\n", lpm->id, lpm->defn); } else emess(1, "invalid list option: l%c", arg[1]); exit(0); /* cppcheck-suppress duplicateBreak */ 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 */ { char c = arg[1]; // Check that the value is in the [0, 8] range if (c >= '0' && c <= '8' && ((arg[2] == 0 || !(arg[2] >= '0' && arg[2] <= '9')))) { set_rtodms(c - '0', *arg == 'W'); ++arg; } else emess(1, "-W argument missing or not in range [0,8]"); 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; int log_level = atoi(*++argv); if (log_level <= 0) { proj_log_level(pj_get_default_ctx(), PJ_LOG_NONE); } else if (log_level == 1) { proj_log_level(pj_get_default_ctx(), PJ_LOG_ERROR); } else if (log_level == 2) { proj_log_level(pj_get_default_ctx(), PJ_LOG_DEBUG); } else if (log_level == 3) { proj_log_level(pj_get_default_ctx(), PJ_LOG_TRACE); } else { proj_log_level(pj_get_default_ctx(), PJ_LOG_TELL); } continue; } case 'd': if (--argc <= 0) goto noargument; snprintf(oform_buffer, sizeof(oform_buffer), "%%.%df", atoi(*++argv)); oform = oform_buffer; break; default: emess(1, "invalid option: -%c", *arg); break; } break; } } else if (!isProj4StyleSyntax) { if (fromStr.empty()) fromStr = *argv; else if (toStr.empty()) toStr = *argv; else { /* assumed to be input file name(s) */ eargv[eargc++] = *argv; } } else if (strcmp(*argv, "+to") == 0) { have_to_flag = 1; } else if (**argv == '+') { /* + argument */ if (have_to_flag) { if (!toStr.empty()) toStr += ' '; toStr += *argv; } else { if (!fromStr.empty()) fromStr += ' '; fromStr += *argv; } } else if (!have_to_flag) { fromStr = *argv; } else if (toStr.empty()) { toStr = *argv; } else /* assumed to be input file name(s) */ eargv[eargc++] = *argv; } if (eargc == 0) /* if no specific files force sysin */ eargv[eargc++] = const_cast("-"); if (oform) { if (!validate_form_string_for_numbers(oform)) { emess(3, "invalid format string"); exit(0); } } if (bboxFilter && !area.empty()) { std::cerr << "ERROR: --bbox and --area are exclusive" << std::endl; std::exit(1); } PJ_AREA *pj_area = nullptr; if (!area.empty()) { DatabaseContextPtr dbContext; try { dbContext = DatabaseContext::create().as_nullable(); } catch (const std::exception &e) { std::cerr << "ERROR: Cannot create database connection: " << e.what() << std::endl; std::exit(1); } // Process area of use try { if (area.find(' ') == std::string::npos && area.find(':') != std::string::npos) { auto tokens = split(area, ':'); if (tokens.size() == 2) { const std::string &areaAuth = tokens[0]; const std::string &areaCode = tokens[1]; bboxFilter = AuthorityFactory::create( NN_NO_CHECK(dbContext), areaAuth) ->createExtent(areaCode) .as_nullable(); } } if (!bboxFilter) { auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext), std::string()); auto res = authFactory->listAreaOfUseFromName(area, false); if (res.size() == 1) { bboxFilter = AuthorityFactory::create( NN_NO_CHECK(dbContext), res.front().first) ->createExtent(res.front().second) .as_nullable(); } else { res = authFactory->listAreaOfUseFromName(area, true); if (res.size() == 1) { bboxFilter = AuthorityFactory::create(NN_NO_CHECK(dbContext), res.front().first) ->createExtent(res.front().second) .as_nullable(); } else if (res.empty()) { std::cerr << "No area of use matching provided name" << std::endl; std::exit(1); } else { std::cerr << "Several candidates area of use " "matching provided name :" << std::endl; for (const auto &candidate : res) { auto obj = AuthorityFactory::create(NN_NO_CHECK(dbContext), candidate.first) ->createExtent(candidate.second); std::cerr << " " << candidate.first << ":" << candidate.second << " : " << *obj->description() << std::endl; } std::exit(1); } } } } catch (const std::exception &e) { std::cerr << "Area of use retrieval failed: " << e.what() << std::endl; std::exit(1); } } if (bboxFilter) { auto geogElts = bboxFilter->geographicElements(); if (geogElts.size() == 1) { auto bbox = std::dynamic_pointer_cast( geogElts[0].as_nullable()); if (bbox) { pj_area = proj_area_create(); proj_area_set_bbox(pj_area, bbox->westBoundLongitude(), bbox->southBoundLatitude(), bbox->eastBoundLongitude(), bbox->northBoundLatitude()); if (bboxFilter->description().has_value()) { proj_area_set_name(pj_area, bboxFilter->description()->c_str()); } } } } /* * If the user has requested inverse, then just reverse the * coordinate systems. */ if (inverse) { std::swap(fromStr, toStr); } if (use_env_locale) { /* Set locale from environment */ setlocale(LC_ALL, ""); } if (fromStr.empty() && toStr.empty()) { emess(3, "missing source and target coordinate systems"); } proj_context_use_proj4_init_rules( nullptr, proj_context_get_use_proj4_init_rules(nullptr, TRUE)); PJ *src = !fromStr.empty() ? proj_create(nullptr, pj_add_type_crs_if_needed(fromStr).c_str()) : nullptr; PJ *dst = !toStr.empty() ? proj_create(nullptr, pj_add_type_crs_if_needed(toStr).c_str()) : nullptr; PJ *src_unbound = nullptr; if (src) { bool ignored; src_unbound = instantiate_crs(src, srcIsLongLat, srcToRadians, ignored); if (!src_unbound) { emess(3, "cannot instantiate source coordinate system"); } } PJ *dst_unbound = nullptr; if (dst) { dst_unbound = instantiate_crs(dst, destIsLongLat, destToRadians, destIsLatLong); if (!dst_unbound) { emess(3, "cannot instantiate target coordinate system"); } } if (!dst) { assert(src_unbound); dst = get_geog_crs_proj_string_from_proj_crs(src_unbound, destToRadians, destIsLatLong); if (!dst) { emess(3, "missing target CRS and source CRS is not a projected CRS"); } destIsLongLat = true; } else if (!src) { assert(dst_unbound); bool ignored; src = get_geog_crs_proj_string_from_proj_crs(dst_unbound, srcToRadians, ignored); if (!src) { emess(3, "missing source CRS and target CRS is not a projected CRS"); } srcIsLongLat = true; } proj_destroy(src_unbound); proj_destroy(dst_unbound); if (promoteTo3D) { auto src3D = proj_crs_promote_to_3D(nullptr, nullptr, src); if (src3D) { proj_destroy(src); src = src3D; } auto dst3D = proj_crs_promote_to_3D(nullptr, nullptr, dst); if (dst3D) { proj_destroy(dst); dst = dst3D; } } else { // Auto-promote source/target CRS if it is specified by its name, // if it has a known 3D version of it and that the other CRS is 3D. // e.g cs2cs "WGS 84 + EGM96 height" "WGS 84" if (is3DCRS(dst) && !is3DCRS(src) && proj_get_id_code(src, 0) != nullptr && Identifier::isEquivalentName(fromStr.c_str(), proj_get_name(src))) { auto promoted = proj_crs_promote_to_3D(nullptr, nullptr, src); if (promoted) { if (proj_get_id_code(promoted, 0) != nullptr) { proj_destroy(src); src = promoted; } else { proj_destroy(promoted); } } } else if (is3DCRS(src) && !is3DCRS(dst) && proj_get_id_code(dst, 0) != nullptr && Identifier::isEquivalentName(toStr.c_str(), proj_get_name(dst))) { auto promoted = proj_crs_promote_to_3D(nullptr, nullptr, dst); if (promoted) { if (proj_get_id_code(promoted, 0) != nullptr) { proj_destroy(dst); dst = promoted; } else { proj_destroy(promoted); } } } } if (!sourceEpoch.empty()) { PJ *srcMetadata = nullptr; double sourceEpochDbl; try { sourceEpochDbl = c_locale_stod(sourceEpoch); } catch (const std::exception &e) { sourceEpochDbl = 0; emess(3, "%s", e.what()); } srcMetadata = proj_coordinate_metadata_create(nullptr, src, sourceEpochDbl); if (!srcMetadata) { emess(3, "cannot instantiate source coordinate system"); } proj_destroy(src); src = srcMetadata; } if (!targetEpoch.empty()) { PJ *dstMetadata = nullptr; double targetEpochDbl; try { targetEpochDbl = c_locale_stod(targetEpoch); } catch (const std::exception &e) { targetEpochDbl = 0; emess(3, "%s", e.what()); } dstMetadata = proj_coordinate_metadata_create(nullptr, dst, targetEpochDbl); if (!dstMetadata) { emess(3, "cannot instantiate target coordinate system"); } proj_destroy(dst); dst = dstMetadata; } std::string authorityOption; /* keep this variable in this outer scope ! */ std::string accuracyOption; /* keep this variable in this outer scope ! */ std::vector options; if (authority) { authorityOption = "AUTHORITY="; authorityOption += authority; options.push_back(authorityOption.data()); } if (accuracy >= 0) { accuracyOption = "ACCURACY="; accuracyOption += toString(accuracy); options.push_back(accuracyOption.data()); } if (!allowBallpark) { options.push_back("ALLOW_BALLPARK=NO"); } if (onlyBestSet) { if (errorIfBestTransformationNotAvailable) { options.push_back("ONLY_BEST=YES"); } else { options.push_back("ONLY_BEST=NO"); } } options.push_back(nullptr); transformation = proj_create_crs_to_crs_from_pj(nullptr, src, dst, pj_area, options.data()); proj_destroy(src); proj_destroy(dst); proj_area_destroy(pj_area); if (!transformation) { emess(3, "cannot initialize transformation\ncause: %s", proj_errno_string(proj_context_errno(nullptr))); } if (use_env_locale) { /* Restore C locale to avoid issues in parsing/outputting numbers*/ setlocale(LC_ALL, "C"); } if (mon) { printf("%c ---- From Coordinate System ----\n", tag); printf("%s\n", fromStr.c_str()); printf("%c ---- To Coordinate System ----\n", tag); printf("%s\n", toStr.c_str()); } /* set input formatting control */ if (srcIsLongLat && fabs(srcToRadians - M_PI / 180) < 1e-10) informat = dmstor; else { informat = strtod; } if (!destIsLongLat && !oform) oform = "%.2f"; /* process input file list */ for (; eargc--; ++eargv) { if (**eargv == '-') { fid = stdin; emess_dat.File_name = const_cast(""); } else { if ((fid = fopen(*eargv, "rt")) == nullptr) { emess(-2, "input file: %s", *eargv); continue; } emess_dat.File_name = *eargv; } emess_dat.File_line = 0; process(fid); fclose(fid); emess_dat.File_name = nullptr; } proj_destroy(transformation); proj_cleanup(); exit(0); /* normal completion */ } proj-9.6.0/src/apps/emess.cpp000664 001754 001755 00000003700 14764566077 015773 0ustar00e012349e012349000000 000000 /* 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 "proj_config.h" #include "proj_internal.h" #define EMESS_ROUTINE #include "emess.h" void emess(int code, const char *fmt, ...) { va_list args; va_start(args, fmt); /* prefix program name, if given */ if (emess_dat.Prog_name != nullptr) { // For unit test purposes, allow PROJ_DISPLAY_PROGRAM_NAME=NO const char *pszDisplayProgramName = getenv("PROJ_DISPLAY_PROGRAM_NAME"); if (!(pszDisplayProgramName && strcmp(pszDisplayProgramName, "NO") == 0)) { (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 != nullptr && *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) { int my_errno = errno; #ifdef HAVE_STRERROR const char *my_strerror = strerror(my_errno); #endif #ifndef HAVE_STRERROR const char *my_strerror = ""; #endif (void)fprintf(stderr, "Sys errno: %d: %s\n", my_errno, my_strerror); } /* 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); } proj-9.6.0/src/apps/emess.h000664 001754 001755 00000001465 14764566077 015446 0ustar00e012349e012349000000 000000 /* 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 occurred */ }; #ifdef EMESS_ROUTINE /* use type */ /* for emess procedure */ struct EMESS emess_dat = {nullptr, nullptr, 0}; #else /* for for calling procedures */ extern struct EMESS emess_dat; #endif /* use type */ #if defined(__GNUC__) #define EMESS_PRINT_FUNC_FORMAT(format_idx, arg_idx) \ __attribute__((__format__(__printf__, format_idx, arg_idx))) #else #define EMESS_PRINT_FUNC_FORMAT(format_idx, arg_idx) #endif void emess(int, const char *, ...) EMESS_PRINT_FUNC_FORMAT(2, 3); #endif /* end EMESS_H */ proj-9.6.0/src/apps/geod.cpp000664 001754 001755 00000024164 14764566077 015604 0ustar00e012349e012349000000 000000 /* <<<< Geodesic filter program >>>> */ #include "emess.h" #include "geod_interface.h" #include "proj.h" #include "proj_internal.h" #include "utils.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 const char *oform = nullptr; /* output format for decimal degrees */ static const char *osform = "%.3f"; /* output format for S */ static char pline[50]; /* work string */ static const char *usage = "%s\nusage: %s [-afFIlptwW [args]] [+opt[=arg] ...] [file ...]\n"; static void printLL(double p, double l) { if (oform) { (void)limited_fprintf_for_number(stdout, oform, p * RAD_TO_DEG); TAB; (void)limited_fprintf_for_number(stdout, oform, l * RAD_TO_DEG); } else { (void)fputs(rtodms(pline, sizeof(pline), p, 'N', 'S'), stdout); TAB; (void)fputs(rtodms(pline, sizeof(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)limited_fprintf_for_number(stdout, oform, al12 * RAD_TO_DEG); TAB; (void)limited_fprintf_for_number(stdout, oform, al21 * RAD_TO_DEG); TAB; (void)limited_fprintf_for_number(stdout, osform, geod_S * fr_meter); } else { (void)fputs(rtodms(pline, sizeof(pline), al12, 0, 0), stdout); TAB; (void)fputs(rtodms(pline, sizeof(pline), al21, 0, 0), stdout); TAB; (void)limited_fprintf_for_number(stdout, osform, geod_S * fr_meter); } } else if (inverse) if (oform) { (void)limited_fprintf_for_number(stdout, oform, al12 * RAD_TO_DEG); TAB; (void)limited_fprintf_for_number(stdout, oform, al21 * RAD_TO_DEG); TAB; (void)limited_fprintf_for_number(stdout, osform, geod_S * fr_meter); } else { (void)fputs(rtodms(pline, sizeof(pline), al12, 0, 0), stdout); TAB; (void)fputs(rtodms(pline, sizeof(pline), al21, 0, 0), stdout); TAB; (void)limited_fprintf_for_number(stdout, osform, geod_S * fr_meter); } else { printLL(phi2, lam2); TAB; if (oform) (void)limited_fprintf_for_number(stdout, oform, al21 * RAD_TO_DEG); else (void)fputs(rtodms(pline, sizeof(pline), al21, 0, 0), stdout); } (void)fputs(s, stdout); fflush(stdout); } } static char *pargv[MAX_PARGS]; static int pargc = 0; int main(int argc, char **argv) { char *arg, **eargv = argv; FILE *fid; static int eargc = 0, c; if (argc == 0) { exit(1); } if ((emess_dat.Prog_name = strrchr(*argv, '/')) != nullptr) ++emess_dat.Prog_name; else emess_dat.Prog_name = *argv; inverse = strncmp(emess_dat.Prog_name, "inv", 3) == 0 || strncmp(emess_dat.Prog_name, "lt-inv", 6) == 0; // older libtool have a lt- prefix 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++] = const_cast("-"); 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 */ const struct PJ_ELLPS *le; for (le = proj_list_ellps(); 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 */ auto units = proj_get_units_from_database( nullptr, nullptr, "linear", false, nullptr); for (int i = 0; units && units[i]; i++) { if (units[i]->proj_short_name) { (void)printf("%12s %-20.15g %s\n", units[i]->proj_short_name, units[i]->conv_factor, units[i]->name); } } proj_unit_list_destroy(units); } 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++] = const_cast("-"); for (; eargc--; ++eargv) { if (**eargv == '-') { fid = stdin; emess_dat.File_name = const_cast(""); } else { if ((fid = fopen(*eargv, "r")) == nullptr) { emess(-2, "input file: %s", *eargv); continue; } emess_dat.File_name = *eargv; } emess_dat.File_line = 0; process(fid); (void)fclose(fid); emess_dat.File_name = (char *)nullptr; } } exit(0); /* normal completion */ } proj-9.6.0/src/apps/geod_interface.cpp000664 001754 001755 00000002152 14764566077 017615 0ustar00e012349e012349000000 000000 #include "geod_interface.h" #include "proj.h" #include "proj_internal.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); /* Compute back azimuth * map +/-0 -> -/+180; +/-180 -> -/+0 * this depends on abs(azi2) <= 180 */ azi2 = copysign(azi2 + copysign(180.0, -azi2), -azi2); al12 = azi1 * DEG_TO_RAD; al21 = azi2 * DEG_TO_RAD; geod_S = s12; } proj-9.6.0/src/apps/geod_interface.h000664 001754 001755 00000001613 14764566077 017263 0ustar00e012349e012349000000 000000 #if !defined(GEOD_INTERFACE_H) #define GEOD_INTERFACE_H #include "geodesic.h" #ifdef __cplusplus extern "C" { #endif #ifndef GEOD_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 proj-9.6.0/src/apps/geod_set.cpp000664 001754 001755 00000005513 14764566077 016454 0ustar00e012349e012349000000 000000 #define GEOD_IN_GEOD_SET #include #include #include #include "emess.h" #include "geod_interface.h" #include "proj.h" #include "proj_internal.h" void geod_set(int argc, char **argv) { paralist *start = nullptr, *curr; double es; char *name; /* put arguments into internal linked list */ if (argc <= 0) emess(1, "no arguments in initialization list"); start = curr = pj_mkparam(argv[0]); if (!curr) emess(1, "memory allocation failed"); for (int i = 1; curr != nullptr && i < argc; ++i) { curr->next = pj_mkparam(argv[i]); if (!curr->next) emess(1, "memory allocation failed"); 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(nullptr, start, "sunits").s) != nullptr) { bool unit_found = false; auto units = proj_get_units_from_database(nullptr, nullptr, "linear", false, nullptr); for (int i = 0; units && units[i]; i++) { if (units[i]->proj_short_name && strcmp(units[i]->proj_short_name, name) == 0) { unit_found = true; to_meter = units[i]->conv_factor; fr_meter = 1 / to_meter; } } proj_unit_list_destroy(units); if (!unit_found) emess(1, "%s unknown unit conversion id", name); } else to_meter = fr_meter = 1; geod_f = es / (1 + sqrt(1 - es)); geod_ini(); /* check if line or arc mode */ if (pj_param(nullptr, start, "tlat_1").i) { double del_S; phi1 = pj_param(nullptr, start, "rlat_1").f; lam1 = pj_param(nullptr, start, "rlon_1").f; if (pj_param(nullptr, start, "tlat_2").i) { phi2 = pj_param(nullptr, start, "rlat_2").f; lam2 = pj_param(nullptr, start, "rlon_2").f; geod_inv(); geod_pre(); } else if ((geod_S = pj_param(nullptr, start, "dS").f) != 0.) { al12 = pj_param(nullptr, start, "rA").f; geod_pre(); geod_for(); } else emess(1, "incomplete geodesic/arc info"); if ((n_alpha = pj_param(nullptr, start, "in_A").i) > 0) { if ((del_alpha = pj_param(nullptr, start, "rdel_A").f) == 0.0) emess(1, "del azimuth == 0"); } else if ((del_S = fabs(pj_param(nullptr, start, "ddel_S").f)) != 0.) { n_S = (int)(geod_S / del_S + .5); } else if ((n_S = pj_param(nullptr, start, "in_S").i) <= 0) emess(1, "no interval divisor selected"); } /* free up linked list */ for (; start; start = curr) { curr = start->next; free(start); } } proj-9.6.0/src/apps/gie.cpp000664 001754 001755 00000143323 14764566077 015431 0ustar00e012349e012349000000 000000 /*********************************************************************** gie - The Geospatial Integrity Investigation Environment ************************************************************************ The Geospatial Integrity Investigation Environment "gie" is a modest regression testing environment for the PROJ.4 transformation library. Its primary design goal was to be able to replace those thousands of lines of regression testing code that are (at time of writing) part of PROJ.4, while not requiring any other kind of tooling than the same C compiler already employed for compiling the library. The basic functionality of the gie command language is implemented through just 3 command verbs: operation, which defines the PROJ.4 operation to test, accept, which defines the input coordinate to read, and expect, which defines the result to expect. E.g: operation +proj=utm +zone=32 +ellps=GRS80 accept 12 55 expect 691_875.632_14 6_098_907.825_05 Note that gie accepts the underscore ("_") as a thousands separator. It is not required (in fact, it is entirely ignored by the input routine), but it significantly improves the readability of the very long strings of numbers typically required in projected coordinates. By default, gie considers the EXPECTation met, if the result comes to within 0.5 mm of the expected. This default can be changed using the 'tolerance' command verb (and yes, I know, linguistically speaking, both "operation" and "tolerance" are nouns, not verbs). See the first few hundred lines of the "builtins.gie" test file for more details of the command verbs available (verbs of both the VERBal and NOUNistic persuation). -- But more importantly than being an acronym for "Geospatial Integrity Investigation Environment", gie were also the initials, user id, and USGS email address of Gerald Ian Evenden (1935--2016), the geospatial visionary, who, already in the 1980s, started what was to become the PROJ.4 of today. Gerald's clear vision was that map projections are *just special functions*. Some of them rather complex, most of them of two variables, but all of them *just special functions*, and not particularly more special than the sin(), cos(), tan(), and hypot() already available in the C standard library. And hence, according to Gerald, *they should not be particularly much harder to use*, for a programmer, than the sin()s, tan()s and hypot()s so readily available. Gerald's ingenuity also showed in the implementation of the vision, where he devised a comprehensive, yet simple, system of key-value pairs for parameterising a map projection, and the highly flexible PJ struct, storing run-time compiled versions of those key-value pairs, hence making a map projection function call, pj_fwd(PJ, point), as easy as a traditional function call like hypot(x,y). While today, we may have more formally well defined metadata systems (most prominent the OGC WKT2 representation), nothing comes close being as easily readable ("human compatible") as Gerald's key-value system. This system in particular, and the PROJ.4 system in general, was Gerald's great gift to anyone using and/or communicating about geodata. It is only reasonable to name a program, keeping an eye on the integrity of the PROJ.4 system, in honour of Gerald. So in honour, and hopefully also in the spirit, of Gerald Ian Evenden (1935--2016), this is the Geospatial Integrity Investigation Environment. ************************************************************************ Thomas Knudsen, thokn@sdfe.dk, 2017-10-01/2017-10-08 ************************************************************************ * Copyright (c) 2017 Thomas Knudsen * Copyright (c) 2017, SDFE * * 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 #include #include #include #include #include "proj.h" #include "proj_internal.h" #include "proj_strtod.h" #include /* for isnan */ #include #include "optargpm.h" /* Package for flexible format I/O - ffio */ typedef struct ffio { FILE *f; const char *const *tags; const char *tag; char *args; char *next_args; size_t n_tags; size_t args_size; size_t next_args_size; size_t argc; size_t lineno, next_lineno; size_t level; bool strict_mode; } ffio; static int get_inp(ffio *G); static int skip_to_next_tag(ffio *G); static int step_into_gie_block(ffio *G); static int nextline(ffio *G); static int at_end_delimiter(ffio *G); static const char *at_tag(ffio *G); static int at_decorative_element(ffio *G); static ffio *ffio_destroy(ffio *G); static ffio *ffio_create(const char *const *tags, size_t n_tags, size_t max_record_size); static const char *const gie_tags[] = { "", "operation", "crs_src", "crs_dst", "use_proj4_init_rules", "accept", "expect", "roundtrip", "banner", "verbose", "direction", "tolerance", "ignore", "require_grid", "echo", "skip", "", "", "", }; static const size_t n_gie_tags = sizeof gie_tags / sizeof gie_tags[0]; int main(int argc, char **argv); static int dispatch(const char *cmnd, const char *args); static int errmsg(int errlev, const char *msg, ...); static int errno_from_err_const(const char *err_const); static int list_err_codes(void); static int process_file(const char *fname); static const char *column(const char *buf, int n); static const char *err_const_from_errno(int err); #define SKIP -1 #define MAX_OPERATION 10000 typedef struct { char operation[MAX_OPERATION + 1]; char crs_dst[MAX_OPERATION + 1]; char crs_src[MAX_OPERATION + 1]; PJ *P; PJ_COORD a, b, e; PJ_DIRECTION dir; int verbosity; int skip; int op_id; int op_ok, op_ko, op_skip; int total_ok, total_ko, total_skip; int grand_ok, grand_ko, grand_skip; size_t operation_lineno; size_t dimensions_given, dimensions_given_at_last_accept; double tolerance; int use_proj4_init_rules; int ignore; int skip_test; const char *curr_file; FILE *fout; } gie_ctx; ffio *F = nullptr; static gie_ctx T; int tests = 0, succs = 0, succ_fails = 0, fail_fails = 0, succ_rtps = 0, fail_rtps = 0; static const char delim[] = {"-------------------------------------------------" "------------------------------\n"}; static const char usage[] = { "--------------------------------------------------------------------------" "------\n" "Usage: %s [-options]... infile...\n" "--------------------------------------------------------------------------" "------\n" "Options:\n" "--------------------------------------------------------------------------" "------\n" " -h Help: print this usage information\n" " -o /path/to/file Specify output file name\n" " -v Verbose: Provide non-essential informational " "output.\n" " Repeat -v for more verbosity (e.g. -vv)\n" " -q Quiet: Opposite of verbose. In quiet mode not even " "errors\n" " are reported. Only interaction is through the " "return code\n" " (0 on success, non-zero indicates number of FAILED " "tests)\n" " -l List the PROJ internal system error codes\n" "--------------------------------------------------------------------------" "------\n" "Long Options:\n" "--------------------------------------------------------------------------" "------\n" " --output Alias for -o\n" " --verbose Alias for -v\n" " --help Alias for -h\n" " --list Alias for -l\n" " --version Print version number\n" "--------------------------------------------------------------------------" "------\n" "Examples:\n" "--------------------------------------------------------------------------" "------\n" "1. Run all tests in file \"corner-cases.gie\", providing much extra " "information\n" " gie -vvvv corner-cases.gie\n" "2. Run all tests in files \"foo\" and \"bar\", providing info on failures " "only\n" " gie foo bar\n" "--------------------------------------------------------------------------" "------\n"}; int main(int argc, char **argv) { int i; const char *longflags[] = {"v=verbose", "q=quiet", "h=help", "l=list", "version", nullptr}; const char *longkeys[] = {"o=output", nullptr}; OPTARGS *o; memset(&T, 0, sizeof(T)); T.dir = PJ_FWD; T.verbosity = 1; T.tolerance = 5e-4; T.ignore = 5555; /* Error code that will not be issued by proj_create() */ T.use_proj4_init_rules = FALSE; /* coverity[tainted_data] */ o = opt_parse(argc, argv, "hlvq", "o", longflags, longkeys); if (nullptr == o) return 0; if (opt_given(o, "h") || argc == 1) { printf(usage, o->progname); free(o); return 0; } if (opt_given(o, "version")) { fprintf(stdout, "%s: %s\n", o->progname, pj_get_release()); free(o); return 0; } T.verbosity = opt_given(o, "q"); if (T.verbosity) T.verbosity = -1; if (T.verbosity != -1) T.verbosity = opt_given(o, "v") + 1; T.fout = stdout; if (opt_given(o, "o")) T.fout = fopen(opt_arg(o, "output"), "rt"); if (nullptr == T.fout) { fprintf(stderr, "%s: Cannot open '%s' for output\n", o->progname, opt_arg(o, "output")); free(o); return 1; } if (opt_given(o, "l")) { free(o); return list_err_codes(); } if (0 == o->fargc) { if (T.verbosity == -1) return -1; fprintf(T.fout, "Nothing to do\n"); free(o); return 0; } F = ffio_create(gie_tags, n_gie_tags, 1000); if (nullptr == F) { fprintf(stderr, "%s: No memory\n", o->progname); free(o); return 1; } for (i = 0; i < o->fargc; i++) { FILE *f = fopen(o->fargv[i], "rt"); if (f == nullptr) { fprintf(T.fout, "%sCannot open specified input file '%s' - bye!\n", delim, o->fargv[i]); return 1; } fclose(f); } for (i = 0; i < o->fargc; i++) process_file(o->fargv[i]); if (T.verbosity > 0) { if (o->fargc > 1) { fprintf( T.fout, "%sGrand total: %d. Success: %d, Skipped: %d, Failure: %d\n", delim, T.grand_ok + T.grand_ko + T.grand_skip, T.grand_ok, T.grand_skip, T.grand_ko); } fprintf(T.fout, "%s", delim); if (T.verbosity > 1) { fprintf(T.fout, "Failing roundtrips: %4d, Succeeding roundtrips: %4d\n", fail_rtps, succ_rtps); fprintf(T.fout, "Failing failures: %4d, Succeeding failures: %4d\n", fail_fails, succ_fails); fprintf( T.fout, "Internal counters: %4.4d(%4.4d)\n", tests, succs); fprintf(T.fout, "%s", delim); } } else if (T.grand_ko) fprintf(T.fout, "Failures: %d", T.grand_ko); if (stdout != T.fout) fclose(T.fout); free(o); ffio_destroy(F); return T.grand_ko; } static int another_failure(void) { T.op_ko++; T.total_ko++; proj_errno_reset(T.P); return 0; } static int another_skip(void) { T.op_skip++; T.total_skip++; return 0; } static int another_success(void) { T.op_ok++; T.total_ok++; proj_errno_reset(T.P); return 0; } static int another_succeeding_failure(void) { succ_fails++; return another_success(); } static int another_failing_failure(void) { fail_fails++; return another_failure(); } static int another_succeeding_roundtrip(void) { succ_rtps++; return another_success(); } static int another_failing_roundtrip(void) { fail_rtps++; return another_failure(); } static int process_file(const char *fname) { F->lineno = F->next_lineno = F->level = 0; T.op_ok = T.total_ok = 0; T.op_ko = T.total_ko = 0; T.op_skip = T.total_skip = 0; if (T.skip) { proj_destroy(T.P); T.P = nullptr; return 0; } /* We have already tested in main that the file exists */ F->f = fopen(fname, "rt"); if (T.verbosity > 0) fprintf(T.fout, "%sReading file '%s'\n", delim, fname); T.curr_file = fname; while (get_inp(F)) { if (SKIP == dispatch(F->tag, F->args)) { proj_destroy(T.P); T.P = nullptr; return 0; } } fclose(F->f); F->lineno = F->next_lineno = 0; T.grand_ok += T.total_ok; T.grand_ko += T.total_ko; T.grand_skip += T.grand_skip; if (T.verbosity > 0) { fprintf( T.fout, "%stotal: %2d tests succeeded, %2d tests skipped, %2d tests %s\n", delim, T.total_ok, T.total_skip, T.total_ko, T.total_ko ? "FAILED!" : "failed."); } if (F->level == 0) return errmsg(-3, "File '%s':Missing '' cmnd - bye!\n", fname); if (F->level % 2) { if (F->strict_mode) return errmsg(-4, "File '%s':Missing '' cmnd - bye!\n", fname); else return errmsg(-4, "File '%s':Missing '' cmnd - bye!\n", fname); } return 0; } /*****************************************************************************/ const char *column(const char *buf, int n) { /***************************************************************************** Return a pointer to the n'th column of buf. Column numbers start at 0. ******************************************************************************/ int i; if (n <= 0) return buf; for (i = 0; i < n; i++) { while (isspace(*buf)) buf++; if (i == n - 1) break; while ((0 != *buf) && !isspace(*buf)) buf++; } return buf; } /*****************************************************************************/ static double strtod_scaled(const char *args, double default_scale) { /***************************************************************************** Interpret as a numeric followed by a linear decadal prefix. Return the properly scaled numeric ******************************************************************************/ const double GRS80_DEG = 111319.4908; /* deg-to-m at equator of GRS80 */ char *endp; double s = proj_strtod(args, &endp); if (args == endp) return HUGE_VAL; const char *units = column(args, 2); if (0 == strcmp(units, "km")) s *= 1000; else if (0 == strcmp(units, "m")) s *= 1; else if (0 == strcmp(units, "dm")) s /= 10; else if (0 == strcmp(units, "cm")) s /= 100; else if (0 == strcmp(units, "mm")) s /= 1000; else if (0 == strcmp(units, "um")) s /= 1e6; else if (0 == strcmp(units, "nm")) s /= 1e9; else if (0 == strcmp(units, "rad")) s = GRS80_DEG * proj_todeg(s); else if (0 == strcmp(units, "deg")) s = GRS80_DEG * s; else s *= default_scale; return s; } static int banner(const char *args) { char dots[] = {"..."}, nodots[] = {""}, *thedots = nodots; if (strlen(args) > 70) thedots = dots; fprintf(T.fout, "%s%-70.70s%s\n", delim, args, thedots); return 0; } static int tolerance(const char *args) { T.tolerance = strtod_scaled(args, 1); if (HUGE_VAL == T.tolerance) { T.tolerance = 0.0005; return 1; } return 0; } static int use_proj4_init_rules(const char *args) { T.use_proj4_init_rules = strcmp(args, "true") == 0; return 0; } static int ignore(const char *args) { T.ignore = errno_from_err_const(column(args, 1)); return 0; } static int require_grid(const char *args) { PJ_GRID_INFO grid_info; const char *grid_filename = column(args, 1); grid_info = proj_grid_info(grid_filename); if (strlen(grid_info.filename) == 0) { if (T.verbosity > 1) { fprintf(T.fout, "Test skipped because of missing grid %s\n", grid_filename); } T.skip_test = 1; } return 0; } static int direction(const char *args) { const char *endp = args; while (isspace(*endp)) endp++; switch (*endp) { case 'F': case 'f': T.dir = PJ_FWD; break; case 'I': case 'i': case 'R': case 'r': T.dir = PJ_INV; break; default: return 1; } return 0; } static void finish_previous_operation(const char *args) { if (T.verbosity > 1 && T.op_id > 1 && T.op_ok + T.op_ko) fprintf(T.fout, "%s %d tests succeeded, %d tests skipped, %d tests %s\n", delim, T.op_ok, T.op_skip, T.op_ko, T.op_ko ? "FAILED!" : "failed."); (void)args; } /*****************************************************************************/ static int operation(const char *args) { /***************************************************************************** Define the operation to apply to the input data (in ISO 19100 lingo, an operation is the general term describing something that can be either a conversion or a transformation) ******************************************************************************/ T.op_id++; T.operation_lineno = F->lineno; strncpy(&(T.operation[0]), F->args, MAX_OPERATION); T.operation[MAX_OPERATION] = '\0'; if (T.verbosity > 1) { finish_previous_operation(F->args); banner(args); } T.op_ok = 0; T.op_ko = 0; T.op_skip = 0; T.skip_test = 0; direction("forward"); tolerance("0.5 mm"); ignore("pjd_err_dont_skip"); proj_errno_reset(T.P); if (T.P) proj_destroy(T.P); proj_errno_reset(nullptr); proj_context_use_proj4_init_rules(nullptr, T.use_proj4_init_rules); T.P = proj_create(nullptr, F->args); /* Checking that proj_create succeeds is first done at "expect" time, */ /* since we want to support "expect"ing specific error codes */ return 0; } static int crs_to_crs_operation() { T.op_id++; T.operation_lineno = F->lineno; if (T.verbosity > 1) { char buffer[80]; finish_previous_operation(F->args); snprintf(buffer, 80, "%-36.36s -> %-36.36s", T.crs_src, T.crs_dst); banner(buffer); } T.op_ok = 0; T.op_ko = 0; T.op_skip = 0; T.skip_test = 0; direction("forward"); tolerance("0.5 mm"); ignore("pjd_err_dont_skip"); proj_errno_reset(T.P); if (T.P) proj_destroy(T.P); proj_errno_reset(nullptr); proj_context_use_proj4_init_rules(nullptr, T.use_proj4_init_rules); T.P = proj_create_crs_to_crs(nullptr, T.crs_src, T.crs_dst, nullptr); strcpy(T.crs_src, ""); strcpy(T.crs_dst, ""); return 0; } static int crs_src(const char *args) { strncpy(&(T.crs_src[0]), F->args, MAX_OPERATION); T.crs_src[MAX_OPERATION] = '\0'; (void)args; if (strcmp(T.crs_src, "") != 0 && strcmp(T.crs_dst, "") != 0) { crs_to_crs_operation(); } return 0; } static int crs_dst(const char *args) { strncpy(&(T.crs_dst[0]), F->args, MAX_OPERATION); T.crs_dst[MAX_OPERATION] = '\0'; (void)args; if (strcmp(T.crs_src, "") != 0 && strcmp(T.crs_dst, "") != 0) { crs_to_crs_operation(); } return 0; } static PJ_COORD torad_coord(PJ *P, PJ_DIRECTION dir, PJ_COORD a) { size_t i, n; const char *axis = "enut"; paralist *l = pj_param_exists(P->params, "axis"); if (l && dir == PJ_INV) axis = l->param + strlen("axis="); n = strlen(axis); for (i = 0; i < n; i++) if (strchr("news", axis[i])) a.v[i] = proj_torad(a.v[i]); return a; } static PJ_COORD todeg_coord(PJ *P, PJ_DIRECTION dir, PJ_COORD a) { size_t i, n; const char *axis = "enut"; paralist *l = pj_param_exists(P->params, "axis"); if (l && dir == PJ_FWD) axis = l->param + strlen("axis="); n = strlen(axis); for (i = 0; i < n; i++) if (strchr("news", axis[i])) a.v[i] = proj_todeg(a.v[i]); return a; } /*****************************************************************************/ static PJ_COORD parse_coord(const char *args) { /***************************************************************************** Attempt to interpret args as a PJ_COORD. ******************************************************************************/ int i; char *endp; char *dmsendp; const char *prev = args; PJ_COORD a = proj_coord(0, 0, 0, 0); T.dimensions_given = 0; for (i = 0; i < 4; i++) { /* proj_strtod doesn't read values like 123d45'678W so we need a bit */ /* of help from proj_dmstor. proj_strtod effectively ignores what */ /* comes after "d", so we use that fact that when dms is larger than */ /* d the value was stated in "dms" form. */ /* This could be avoided if proj_dmstor used the same proj_strtod() */ /* as gie, but that is not the case (yet). When we remove projects.h */ /* from the public API we can change that. */ // Even Rouault: unsure about the above. Coordinates are not necessarily // geographic coordinates, and the roundtrip through radians for // big projected coordinates cause inaccuracies, that can cause // test failures when testing points at edge of grids. // For example 1501000.0 becomes 1501000.000000000233 double d; while (*prev && isspace(*prev)) ++prev; if (strncmp(prev, "HUGE_VAL", strlen("HUGE_VAL")) == 0) { d = HUGE_VAL; endp = const_cast(prev) + strlen("HUGE_VAL"); } else { d = proj_strtod(prev, &endp); } if (!std::isnan(d) && *endp != '\0' && !isspace(*endp)) { double dms = PJ_TODEG(proj_dmstor(prev, &dmsendp)); /* TODO: When projects.h is removed, call proj_dmstor() in all cases */ if (d != dms && fabs(d) < fabs(dms) && fabs(dms) < fabs(d) + 1) { d = dms; endp = dmsendp; } /* A number like -81d00'00.000 will be parsed correctly by both */ /* proj_strtod and proj_dmstor but only the latter will return */ /* the correct end-pointer. */ if (d == dms && endp != dmsendp) endp = dmsendp; } /* Break out if there were no more numerals */ if (prev == endp) return i > 1 ? a : proj_coord_error(); a.v[i] = d; prev = endp; T.dimensions_given++; } return a; } /*****************************************************************************/ static int accept(const char *args) { /***************************************************************************** Read ("ACCEPT") a 2, 3, or 4 dimensional input coordinate. ******************************************************************************/ T.a = parse_coord(args); if (T.verbosity > 3) fprintf(T.fout, "# %s\n", args); T.dimensions_given_at_last_accept = T.dimensions_given; return 0; } /*****************************************************************************/ static int roundtrip(const char *args) { /***************************************************************************** Check how far we go from the ACCEPTed point when doing successive back/forward transformation pairs. Without args, roundtrip defaults to 100 iterations: roundtrip With one arg, roundtrip will default to a tolerance of T.tolerance: roundtrip ntrips With two args: roundtrip ntrips tolerance Always returns 0. ******************************************************************************/ int ntrips; double d, r, ans; char *endp; PJ_COORD coo; if (nullptr == T.P) { if (T.ignore == proj_errno(T.P)) return another_skip(); return another_failure(); } ans = proj_strtod(args, &endp); if (endp == args) { /* Default to 100 iterations if not args. */ ntrips = 100; } else { if (ans < 1.0 || ans > 1000000.0) { errmsg(2, "Invalid number of roundtrips: %lf\n", ans); return another_failing_roundtrip(); } ntrips = (int)ans; } d = strtod_scaled(endp, 1); d = d == HUGE_VAL ? T.tolerance : d; /* input ("accepted") values - probably in degrees */ coo = proj_angular_input(T.P, T.dir) ? torad_coord(T.P, T.dir, T.a) : T.a; r = proj_roundtrip(T.P, T.dir, ntrips, &coo); if ((std::isnan(r) && std::isnan(d)) || r <= d) return another_succeeding_roundtrip(); if (T.verbosity > -1) { if (0 == T.op_ko && T.verbosity < 2) banner(T.operation); fprintf(T.fout, "%s", T.op_ko ? " -----\n" : delim); fprintf(T.fout, " FAILURE in %s(%d):\n", opt_strip_path(T.curr_file), (int)F->lineno); fprintf(T.fout, " roundtrip deviation: %.6f mm, expected: %.6f mm\n", 1000 * r, 1000 * d); } return another_failing_roundtrip(); } static int expect_message(double d, const char *args) { another_failure(); if (T.verbosity < 0) return 1; if (d > 1e6) d = 999999.999999; if (0 == T.op_ko && T.verbosity < 2) banner(T.operation); fprintf(T.fout, "%s", T.op_ko ? " -----\n" : delim); fprintf(T.fout, " FAILURE in %s(%d):\n", opt_strip_path(T.curr_file), (int)F->lineno); fprintf(T.fout, " expected: %s\n", args); fprintf(T.fout, " got: %.12f %.12f", T.b.xy.x, T.b.xy.y); if (T.b.xyzt.t != 0 || T.b.xyzt.z != 0) fprintf(T.fout, " %.9f", T.b.xyz.z); if (T.b.xyzt.t != 0) fprintf(T.fout, " %.9f", T.b.xyzt.t); fprintf(T.fout, "\n"); fprintf(T.fout, " deviation: %.6f mm, expected: %.6f mm\n", 1000 * d, 1000 * T.tolerance); return 1; } static int expect_message_cannot_parse(const char *args) { another_failure(); if (T.verbosity > -1) { if (0 == T.op_ko && T.verbosity < 2) banner(T.operation); fprintf(T.fout, "%s", T.op_ko ? " -----\n" : delim); fprintf(T.fout, " FAILURE in %s(%d):\n Too few args: %s\n", opt_strip_path(T.curr_file), (int)F->lineno, args); } return 1; } static int expect_failure_with_errno_message(int expected, int got) { another_failing_failure(); if (T.verbosity < 0) return 1; if (0 == T.op_ko && T.verbosity < 2) banner(T.operation); fprintf(T.fout, "%s", T.op_ko ? " -----\n" : delim); fprintf(T.fout, " FAILURE in %s(%d):\n", opt_strip_path(T.curr_file), (int)F->lineno); fprintf(T.fout, " got errno %s (%d): %s\n", err_const_from_errno(got), got, proj_errno_string(got)); fprintf(T.fout, " expected %s (%d): %s", err_const_from_errno(expected), expected, proj_errno_string(expected)); fprintf(T.fout, "\n"); return 1; } /* For test purposes, we want to call a transformation of the same */ /* dimensionality as the number of dimensions given in accept */ static PJ_COORD expect_trans_n_dim(const PJ_COORD &ci) { if (4 == T.dimensions_given_at_last_accept) return proj_trans(T.P, T.dir, ci); if (3 == T.dimensions_given_at_last_accept) return pj_approx_3D_trans(T.P, T.dir, ci); return pj_approx_2D_trans(T.P, T.dir, ci); } /*****************************************************************************/ static int expect(const char *args) { /***************************************************************************** Tell GIE what to expect, when transforming the ACCEPTed input ******************************************************************************/ PJ_COORD ci, co, ce; double d; int expect_failure = 0; int expect_failure_with_errno = 0; if (0 == strncmp(args, "failure", 7)) { expect_failure = 1; /* Option: Fail with an expected errno (syntax: expect failure errno * -33) */ if (0 == strncmp(column(args, 2), "errno", 5)) expect_failure_with_errno = errno_from_err_const(column(args, 3)); } if (T.ignore == proj_errno(T.P)) return another_skip(); if (nullptr == T.P) { /* If we expect failure, and fail, then it's a success... */ if (expect_failure) { /* Failed to fail correctly? */ if (expect_failure_with_errno && proj_errno(T.P) != expect_failure_with_errno) return expect_failure_with_errno_message( expect_failure_with_errno, proj_errno(T.P)); return another_succeeding_failure(); } /* Otherwise, it's a true failure */ banner(T.operation); errmsg(3, "%sInvalid operation definition in line no. %d:\n %s " "(errno=%s/%d)\n", delim, (int)T.operation_lineno, proj_errno_string(proj_errno(T.P)), err_const_from_errno(proj_errno(T.P)), proj_errno(T.P)); return another_failing_failure(); } /* We may still successfully fail even if the proj_create succeeded */ if (expect_failure) { proj_errno_reset(T.P); /* Try to carry out the operation - and expect failure */ ci = proj_angular_input(T.P, T.dir) ? torad_coord(T.P, T.dir, T.a) : T.a; co = expect_trans_n_dim(ci); if (expect_failure_with_errno) { if (proj_errno(T.P) == expect_failure_with_errno) return another_succeeding_failure(); // fprintf (T.fout, "errno=%d, expected=%d\n", proj_errno (T.P), // expect_failure_with_errno); banner(T.operation); errmsg(3, "%serrno=%s (%d), expected=%d at line %d\n", delim, err_const_from_errno(proj_errno(T.P)), proj_errno(T.P), expect_failure_with_errno, static_cast(F->lineno)); return another_failing_failure(); } /* Succeeded in failing? - that's a success */ if (co.xyz.x == HUGE_VAL) return another_succeeding_failure(); /* Failed to fail? - that's a failure */ banner(T.operation); errmsg(3, "%sFailed to fail. Operation definition in line no. %d\n", delim, (int)T.operation_lineno); return another_failing_failure(); } if (T.verbosity > 3) { fprintf(T.fout, "%s\n", T.P->inverted ? "INVERTED" : "NOT INVERTED"); fprintf(T.fout, "%s\n", T.dir == 1 ? "forward" : "reverse"); fprintf(T.fout, "%s\n", proj_angular_input(T.P, T.dir) ? "angular in" : "linear in"); fprintf(T.fout, "%s\n", proj_angular_output(T.P, T.dir) ? "angular out" : "linear out"); fprintf(T.fout, "left: %d right: %d\n", T.P->left, T.P->right); } tests++; T.e = parse_coord(args); if (HUGE_VAL == T.e.v[0]) return expect_message_cannot_parse(args); /* expected angular values, probably in degrees */ ce = proj_angular_output(T.P, T.dir) ? torad_coord(T.P, T.dir, T.e) : T.e; if (T.verbosity > 3) fprintf(T.fout, "EXPECTS %.12f %.12f %.12f %.12f\n", ce.v[0], ce.v[1], ce.v[2], ce.v[3]); /* input ("accepted") values, also probably in degrees */ ci = proj_angular_input(T.P, T.dir) ? torad_coord(T.P, T.dir, T.a) : T.a; if (T.verbosity > 3) fprintf(T.fout, "ACCEPTS %.12f %.12f %.12f %.12f\n", ci.v[0], ci.v[1], ci.v[2], ci.v[3]); /* do the transformation, but mask off dimensions not given in expect-ation */ co = expect_trans_n_dim(ci); if (T.dimensions_given < 4) co.v[3] = 0; if (T.dimensions_given < 3) co.v[2] = 0; /* angular output from proj_trans comes in radians */ T.b = proj_angular_output(T.P, T.dir) ? todeg_coord(T.P, T.dir, co) : co; if (T.verbosity > 3) fprintf(T.fout, "GOT %.12f %.12f %.12f %.12f\n", co.v[0], co.v[1], co.v[2], co.v[3]); #if 0 /* We need to handle unusual axis orders - that'll be an item for version 5.1 */ if (T.P->axisswap) { ce = proj_trans (T.P->axisswap, T.dir, ce); co = proj_trans (T.P->axisswap, T.dir, co); } #endif if (std::isnan(co.v[0]) && std::isnan(ce.v[0])) { d = 0.0; } else if (proj_angular_output(T.P, T.dir)) { d = proj_lpz_dist(T.P, ce, co); } else { d = proj_xyz_dist(co, ce); } // Test written like that to handle NaN if (!(d <= T.tolerance)) return expect_message(d, args); succs++; another_success(); return 0; } /*****************************************************************************/ static int verbose(const char *args) { /***************************************************************************** Tell the system how noisy it should be ******************************************************************************/ int i = (int)proj_atof(args); /* if -q/--quiet flag has been given, we do nothing */ if (T.verbosity < 0) return 0; if (strlen(args)) T.verbosity = i; else T.verbosity++; return 0; } /*****************************************************************************/ static int echo(const char *args) { /***************************************************************************** Add user defined noise to the output stream ******************************************************************************/ fprintf(T.fout, "%s\n", args); return 0; } /*****************************************************************************/ static int skip(const char *args) { /***************************************************************************** Indicate that the remaining material should be skipped. Mostly for debugging. ******************************************************************************/ T.skip = 1; (void)args; F->level = 2; /* Silence complaints about missing element */ return 0; } static int dispatch(const char *cmnd, const char *args) { if (T.skip) return SKIP; if (0 == strcmp(cmnd, "operation")) return operation(args); if (0 == strcmp(cmnd, "crs_src")) return crs_src(args); if (0 == strcmp(cmnd, "crs_dst")) return crs_dst(args); if (T.skip_test) { if (0 == strcmp(cmnd, "expect")) return another_skip(); return 0; } if (0 == strcmp(cmnd, "accept")) return accept(args); if (0 == strcmp(cmnd, "expect")) return expect(args); if (0 == strcmp(cmnd, "roundtrip")) return roundtrip(args); if (0 == strcmp(cmnd, "banner")) return banner(args); if (0 == strcmp(cmnd, "verbose")) return verbose(args); if (0 == strcmp(cmnd, "direction")) return direction(args); if (0 == strcmp(cmnd, "tolerance")) return tolerance(args); if (0 == strcmp(cmnd, "ignore")) return ignore(args); if (0 == strcmp(cmnd, "require_grid")) return require_grid(args); if (0 == strcmp(cmnd, "echo")) return echo(args); if (0 == strcmp(cmnd, "skip")) return skip(args); if (0 == strcmp(cmnd, "use_proj4_init_rules")) return use_proj4_init_rules(args); return 0; } namespace { // anonymous namespace static const struct { /* cppcheck-suppress unusedStructMember */ const char *the_err_const; /* cppcheck-suppress unusedStructMember */ int the_errno; } lookup[] = { {"invalid_op", PROJ_ERR_INVALID_OP}, {"invalid_op_wrong_syntax", PROJ_ERR_INVALID_OP_WRONG_SYNTAX}, {"invalid_op_missing_arg", PROJ_ERR_INVALID_OP_MISSING_ARG}, {"invalid_op_illegal_arg_value", PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE}, {"invalid_op_mutually_exclusive_args", PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS}, {"invalid_op_file_not_found_or_invalid", PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID}, {"coord_transfm", PROJ_ERR_COORD_TRANSFM}, {"coord_transfm_invalid_coord", PROJ_ERR_COORD_TRANSFM_INVALID_COORD}, {"coord_transfm_outside_projection_domain", PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN}, {"coord_transfm_no_operation", PROJ_ERR_COORD_TRANSFM_NO_OPERATION}, {"coord_transfm_outside_grid", PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID}, {"coord_transfm_grid_at_nodata", PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA}, {"coord_transfm_missing_time", PROJ_ERR_COORD_TRANSFM_MISSING_TIME}, {"other", PROJ_ERR_OTHER}, {"api_misuse", PROJ_ERR_OTHER_API_MISUSE}, {"no_inverse_op", PROJ_ERR_OTHER_NO_INVERSE_OP}, {"network_error", PROJ_ERR_OTHER_NETWORK_ERROR}, }; } // anonymous namespace static int list_err_codes(void) { int i; const int n = sizeof lookup / sizeof lookup[0]; for (i = 0; i < n; i++) { fprintf(T.fout, "%25s (%2.2d): %s\n", lookup[i].the_err_const, lookup[i].the_errno, proj_errno_string(lookup[i].the_errno)); } return 0; } static const char *err_const_from_errno(int err) { size_t i; const size_t n = sizeof lookup / sizeof lookup[0]; for (i = 0; i < n; i++) { if (err == lookup[i].the_errno) return lookup[i].the_err_const; } return "unknown"; } static int errno_from_err_const(const char *err_const) { const size_t n = sizeof lookup / sizeof lookup[0]; size_t i, len; int ret; char tolower_err_const[100] = {}; /* Make a lower case copy for matching */ for (i = 0; i < 99; i++) { if (0 == err_const[i] || isspace(err_const[i])) break; tolower_err_const[i] = (char)tolower(err_const[i]); } tolower_err_const[i] = 0; /* If it looks numeric, return that numeric */ ret = (int)pj_atof(err_const); if (0 != ret) return ret; /* Else try to find a matching identifier */ len = strlen(tolower_err_const); for (i = 0; i < n; i++) { if (0 == strncmp(lookup[i].the_err_const, err_const, len)) return lookup[i].the_errno; } /* On failure, return something unlikely */ return 9999; } static int errmsg(int errlev, const char *msg, ...) { va_list args; va_start(args, msg); vfprintf(stdout, msg, args); va_end(args); if (errlev) errno = errlev; return errlev; } /**************************************************************************************** FFIO - Flexible format I/O FFIO provides functionality for reading proj style instruction strings written in a less strict format than usual: * Whitespace is generally allowed everywhere * Comments can be written inline, '#' style * ... or as free format blocks The overall mission of FFIO is to facilitate communications of geodetic parameters and test material in a format that is highly human readable, and provides ample room for comment, documentation, and test material. See the PROJ ".gie" test suites for examples of supported formatting. ****************************************************************************************/ /***************************************************************************************/ static ffio *ffio_create(const char *const *tags, size_t n_tags, size_t max_record_size) { /**************************************************************************************** Constructor for the ffio object. ****************************************************************************************/ ffio *G = static_cast(calloc(1, sizeof(ffio))); if (nullptr == G) return nullptr; if (0 == max_record_size) max_record_size = 1000; G->args = static_cast(calloc(1, 5 * max_record_size)); if (nullptr == G->args) { free(G); return nullptr; } G->next_args = static_cast(calloc(1, max_record_size)); if (nullptr == G->args) { free(G->args); free(G); return nullptr; } G->args_size = 5 * max_record_size; G->next_args_size = max_record_size; G->tags = tags; G->n_tags = n_tags; return G; } /***************************************************************************************/ static ffio *ffio_destroy(ffio *G) { /**************************************************************************************** Free all allocated associated memory, then free G itself. For extra RAII compliance, the file object should also be closed if still open, but this will require additional control logic, and ffio is a gie tool specific package, so we fall back to asserting that fclose has been called prior to ffio_destroy. ****************************************************************************************/ free(G->args); free(G->next_args); free(G); return nullptr; } /***************************************************************************************/ static int at_decorative_element(ffio *G) { /**************************************************************************************** A decorative element consists of a line of at least 5 consecutive identical chars, starting at buffer position 0: "-----", "=====", "*****", etc. A decorative element serves as a end delimiter for the current element, and continues until a gie command verb is found at the start of a line ****************************************************************************************/ int i; char *c; if (nullptr == G) return 0; c = G->next_args; if (nullptr == c) return 0; if (0 == c[0]) return 0; for (i = 1; i < 5; i++) if (c[i] != c[0]) return 0; return 1; } /***************************************************************************************/ static const char *at_tag(ffio *G) { /**************************************************************************************** A start of a new command serves as an end delimiter for the current command ****************************************************************************************/ size_t j; for (j = 0; j < G->n_tags; j++) if (strncmp(G->next_args, G->tags[j], strlen(G->tags[j])) == 0) return G->tags[j]; return nullptr; } /***************************************************************************************/ static int at_end_delimiter(ffio *G) { /**************************************************************************************** An instruction consists of everything from its introductory tag to its end delimiter. An end delimiter can be either the introductory tag of the next instruction, or a "decorative element", i.e. one of the "ascii art" style block delimiters typically used to mark up block comments in a free format file. ****************************************************************************************/ if (G == nullptr) return 0; if (at_decorative_element(G)) return 1; if (at_tag(G)) return 1; return 0; } /***************************************************************************************/ static int nextline(ffio *G) { /**************************************************************************************** Read next line of input file. Returns 1 on success, 0 on failure. ****************************************************************************************/ G->next_args[0] = 0; if (T.skip) return 0; if (nullptr == fgets(G->next_args, (int)G->next_args_size - 1, G->f)) return 0; if (feof(G->f)) return 0; pj_chomp(G->next_args); G->next_lineno++; return 1; } /***************************************************************************************/ static int step_into_gie_block(ffio *G) { /**************************************************************************************** Make sure we're inside a -block. Return 1 on success, 0 otherwise. ****************************************************************************************/ /* Already inside */ if (G->level % 2) return 1; while (strncmp(G->next_args, "", strlen("")) != 0 && strncmp(G->next_args, "", strlen("")) != 0) { if (0 == nextline(G)) return 0; } G->level++; if (strncmp(G->next_args, "", strlen("")) == 0) { G->strict_mode = true; return 0; } else { /* We're ready at the start - now step into the block */ return nextline(G); } } /***************************************************************************************/ static int skip_to_next_tag(ffio *G) { /**************************************************************************************** Skip forward to the next command tag. Return 1 on success, 0 otherwise. ****************************************************************************************/ const char *c; if (0 == step_into_gie_block(G)) return 0; c = at_tag(G); /* If not already there - get there */ while (!c) { if (0 == nextline(G)) return 0; c = at_tag(G); } /* If we reached the end of a block, locate the next and retry */ if (0 == strcmp(c, "")) { G->level++; if (feof(G->f)) return 0; if (0 == step_into_gie_block(G)) return 0; G->args[0] = 0; return skip_to_next_tag(G); } G->lineno = G->next_lineno; return 1; } /* Add the most recently read line of input to the block already stored. */ static int append_args(ffio *G) { size_t skip_chars = 0; size_t next_len = strlen(G->next_args); size_t args_len = strlen(G->args); const char *tag = at_tag(G); if (tag) skip_chars = strlen(tag); /* +2: 1 for the space separator and 1 for the NUL termination. */ if (G->args_size < args_len + next_len - skip_chars + 2) { char *p = static_cast(realloc(G->args, 2 * G->args_size)); if (nullptr == p) return 0; G->args = p; G->args_size = 2 * G->args_size; } G->args[args_len] = ' '; strcpy(G->args + args_len + 1, G->next_args + skip_chars); G->next_args[0] = 0; return 1; } /***************************************************************************************/ static int get_inp(ffio *G) { /**************************************************************************************** The primary command reader for gie. Reads a block of gie input, cleans up repeated whitespace etc. The block is stored in G->args. Returns 1 on success, 0 otherwise. ****************************************************************************************/ G->args[0] = 0; // Special parsing in strict_mode: // - All non-comment/decoration lines must start with a valid tag // - Commands split on several lines should be terminated with " \" if (G->strict_mode) { while (nextline(G)) { G->lineno = G->next_lineno; if (G->next_args[0] == 0 || at_decorative_element(G)) { continue; } G->tag = at_tag(G); if (nullptr == G->tag) { another_failure(); fprintf(T.fout, "unsupported command line %d: %s\n", (int)G->lineno, G->next_args); return 0; } append_args(G); pj_shrink(G->args); while (G->args[0] != '\0' && G->args[strlen(G->args) - 1] == '\\') { G->args[strlen(G->args) - 1] = 0; if (!nextline(G)) { return 0; } G->lineno = G->next_lineno; append_args(G); pj_shrink(G->args); } if (0 == strcmp(G->tag, "")) { G->level++; G->strict_mode = false; } return 1; } return 0; } if (0 == skip_to_next_tag(G)) { // If we just entered , re-enter to read the first command if (G->strict_mode) return get_inp(G); return 0; } G->tag = at_tag(G); if (nullptr == G->tag) return 0; do { append_args(G); if (0 == nextline(G)) return 0; } while (!at_end_delimiter(G)); pj_shrink(G->args); return 1; } proj-9.6.0/src/apps/optargpm.h000664 001754 001755 00000053645 14764566077 016172 0ustar00e012349e012349000000 000000 /*********************************************************************** OPTARGPM - a header-only library for decoding PROJ.4 style command line options Thomas Knudsen, 2017-09-10 ************************************************************************ For PROJ.4 command line programs, we have a somewhat complex option decoding situation, since we have to navigate in a cocktail of classic single letter style options, prefixed by "-", GNU style long options prefixed by "--", transformation specification elements prefixed by "+", and input file names prefixed by "" (i.e. nothing). Hence, classic getopt.h style decoding does not cut the mustard, so this is an attempt to catch up and chop the ketchup. Since optargpm (for "optarg plus minus") does not belong, in any obvious way, in any systems development library, it is provided as a "header only" library. While this is conventional in C++, it is frowned at in plain C. But frown away - "header only" has its places, and this is one of them. By convention, we expect a command line to consist of the following elements: [short ("-")/long ("--") options} [operator ("+") specs] [operands/input files] or less verbose: [options] [operator specs] [operands] or less abstract: proj -I --output=foo +proj=utm +zone=32 +ellps=GRS80 bar baz... Where Operator is proj Options are -I --output=foo Operator specs are +proj=utm +zone=32 +ellps=GRS80 Operands are bar baz While neither claiming to save the world, nor to hint at the "shape of jazz to come", at least optargpm has shown useful in constructing cs2cs style transformation filters. Supporting a wide range of option syntax, the getoptpm API is somewhat quirky, but also compact, consisting of one data type, 3(+2) functions, and one enumeration: OPTARGS Housekeeping data type. An instance of OPTARGS is conventionally called o or opt opt_parse (opt, argc, argv ...): The work horse: Define supported options; Split (argc, argv) into groups (options, op specs, operands); Parse option arguments. opt_given (o, option): The number of times 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-2022) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #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 2 /** * The minor version of the geodesic library. (This tracks the version of * GeographicLib.) **********************************************************************/ #define GEODESIC_VERSION_MINOR 1 /** * The patch level of the geodesic library. (This tracks the version of * GeographicLib.) **********************************************************************/ #define GEODESIC_VERSION_PATCH 0 /** * 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(GEOD_DLL) #if defined(_MSC_VER) && defined(PROJ_MSVC_DLL_EXPORT) #define GEOD_DLL __declspec(dllexport) #elif defined(__GNUC__) #define GEOD_DLL __attribute__ ((visibility("default"))) #else #define GEOD_DLL #endif #endif #if defined(PROJ_RENAME_SYMBOLS) #include "proj_symbol_rename.h" #endif #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_DLL 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_DLL 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_DLL 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_DLL 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_DLL 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: * - \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_DLL 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 * information. **********************************************************************/ void GEOD_DLL 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 specified 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 * information. **********************************************************************/ void GEOD_DLL 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 * information. **********************************************************************/ void GEOD_DLL 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 (or \e caps = 0). 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_DLL 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 spaced 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_DLL 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[in,out] 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_DLL geod_setdistance(struct geod_geodesicline* l, double s13); /** * Specify position of point 3 in terms of either distance or arc length. * * @param[in,out] 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_DLL 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_DLL 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_DLL 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_DLL 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_DLL 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. Arbitrarily complex polygons are allowed. In the case of * self-intersecting polygons the area is accumulated "algebraically", e.g., * the areas of the 2 loops in a figure-8 polygon will partially cancel. * 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_DLL 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_DLL 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_DLL 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°]. * * Arbitrarily complex polygons are allowed. In the case self-intersecting * of polygons the area is accumulated "algebraically", e.g., the areas of * the 2 loops in a figure-8 polygon will partially cancel. 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_DLL 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 proj-9.6.0/src/grids.cpp000664 001754 001755 00000442066 14764566077 015040 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Grid management * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * Copyright (c) 2019, 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. *****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #define LRU11_DO_NOT_DEFINE_OUT_OF_CLASS_METHODS #include "grids.hpp" #include "filemanager.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/lru_cache.hpp" #include "proj_internal.h" #ifdef TIFF_ENABLED #include "tiffio.h" #endif #include #include #include #include NS_PROJ_START using namespace internal; /************************************************************************/ /* swap_words() */ /* */ /* Convert the byte order of the given word(s) in place. */ /************************************************************************/ static const int byte_order_test = 1; #define IS_LSB (1 == ((const unsigned char *)(&byte_order_test))[0]) static void swap_words(void *dataIn, size_t word_size, size_t word_count) { unsigned char *data = static_cast(dataIn); for (size_t word = 0; word < word_count; word++) { for (size_t i = 0; i < word_size / 2; i++) { unsigned char t; t = data[i]; data[i] = data[word_size - i - 1]; data[word_size - i - 1] = t; } data += word_size; } } // --------------------------------------------------------------------------- void ExtentAndRes::computeInvRes() { invResX = 1.0 / resX; invResY = 1.0 / resY; } // --------------------------------------------------------------------------- bool ExtentAndRes::fullWorldLongitude() const { return isGeographic && east - west + resX >= 2 * M_PI - 1e-10; } // --------------------------------------------------------------------------- bool ExtentAndRes::contains(const ExtentAndRes &other) const { return other.west >= west && other.east <= east && other.south >= south && other.north <= north; } // --------------------------------------------------------------------------- bool ExtentAndRes::intersects(const ExtentAndRes &other) const { return other.west < east && west <= other.west && other.south < north && south <= other.north; } // --------------------------------------------------------------------------- Grid::Grid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn) : m_name(nameIn), m_width(widthIn), m_height(heightIn), m_extent(extentIn) { } // --------------------------------------------------------------------------- Grid::~Grid() = default; // --------------------------------------------------------------------------- VerticalShiftGrid::VerticalShiftGrid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn) : Grid(nameIn, widthIn, heightIn, extentIn) {} // --------------------------------------------------------------------------- VerticalShiftGrid::~VerticalShiftGrid() = default; // --------------------------------------------------------------------------- static ExtentAndRes globalExtent() { ExtentAndRes extent; extent.isGeographic = true; extent.west = -M_PI; extent.south = -M_PI / 2; extent.east = M_PI; extent.north = M_PI / 2; extent.resX = M_PI; extent.resY = M_PI / 2; extent.computeInvRes(); return extent; } // --------------------------------------------------------------------------- static const std::string emptyString; class NullVerticalShiftGrid : public VerticalShiftGrid { public: NullVerticalShiftGrid() : VerticalShiftGrid("null", 3, 3, globalExtent()) {} bool isNullGrid() const override { return true; } bool valueAt(int, int, float &out) const override; bool isNodata(float, double) const override { return false; } void reassign_context(PJ_CONTEXT *) override {} bool hasChanged() const override { return false; } const std::string &metadataItem(const std::string &, int) const override { return emptyString; } }; // --------------------------------------------------------------------------- bool NullVerticalShiftGrid::valueAt(int, int, float &out) const { out = 0.0f; return true; } // --------------------------------------------------------------------------- class FloatLineCache { private: typedef uint64_t Key; lru11::Cache, lru11::NullLock> cache_; public: explicit FloatLineCache(size_t maxSize) : cache_(maxSize) {} void insert(uint32_t subgridIdx, uint32_t lineNumber, const std::vector &data); const std::vector *get(uint32_t subgridIdx, uint32_t lineNumber); }; // --------------------------------------------------------------------------- void FloatLineCache::insert(uint32_t subgridIdx, uint32_t lineNumber, const std::vector &data) { cache_.insert((static_cast(subgridIdx) << 32) | lineNumber, data); } // --------------------------------------------------------------------------- const std::vector *FloatLineCache::get(uint32_t subgridIdx, uint32_t lineNumber) { return cache_.getPtr((static_cast(subgridIdx) << 32) | lineNumber); } // --------------------------------------------------------------------------- class GTXVerticalShiftGrid : public VerticalShiftGrid { PJ_CONTEXT *m_ctx; std::unique_ptr m_fp; std::unique_ptr m_cache; mutable std::vector m_buffer{}; GTXVerticalShiftGrid(const GTXVerticalShiftGrid &) = delete; GTXVerticalShiftGrid &operator=(const GTXVerticalShiftGrid &) = delete; public: explicit GTXVerticalShiftGrid(PJ_CONTEXT *ctx, std::unique_ptr &&fp, const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn, std::unique_ptr &&cache) : VerticalShiftGrid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx), m_fp(std::move(fp)), m_cache(std::move(cache)) {} ~GTXVerticalShiftGrid() override; bool valueAt(int x, int y, float &out) const override; bool isNodata(float val, double multiplier) const override; const std::string &metadataItem(const std::string &, int) const override { return emptyString; } static GTXVerticalShiftGrid *open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &name); void reassign_context(PJ_CONTEXT *ctx) override { m_ctx = ctx; m_fp->reassign_context(ctx); } bool hasChanged() const override { return m_fp->hasChanged(); } }; // --------------------------------------------------------------------------- GTXVerticalShiftGrid::~GTXVerticalShiftGrid() = default; // --------------------------------------------------------------------------- GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &name) { unsigned char header[40]; /* -------------------------------------------------------------------- */ /* Read the header. */ /* -------------------------------------------------------------------- */ if (fp->read(header, sizeof(header)) != sizeof(header)) { pj_log(ctx, PJ_LOG_ERROR, _("Cannot read grid header")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } /* -------------------------------------------------------------------- */ /* Regularize fields of interest and extract. */ /* -------------------------------------------------------------------- */ if (IS_LSB) { swap_words(header + 0, 8, 4); swap_words(header + 32, 4, 2); } double xorigin, yorigin, xstep, ystep; int rows, columns; 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 (columns <= 0 || rows <= 0 || xorigin < -360 || xorigin > 360 || yorigin < -90 || yorigin > 90) { pj_log(ctx, PJ_LOG_ERROR, _("gtx file header has invalid extents, corrupt?")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } /* 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 (xorigin >= 180.0) xorigin -= 360.0; if (xorigin >= 0.0 && xorigin + xstep * columns > 180.0) { pj_log(ctx, PJ_LOG_DEBUG, "This GTX spans the dateline! This will cause problems."); } ExtentAndRes extent; extent.isGeographic = true; extent.west = xorigin * DEG_TO_RAD; extent.south = yorigin * DEG_TO_RAD; extent.resX = xstep * DEG_TO_RAD; extent.resY = ystep * DEG_TO_RAD; extent.east = (xorigin + xstep * (columns - 1)) * DEG_TO_RAD; extent.north = (yorigin + ystep * (rows - 1)) * DEG_TO_RAD; extent.computeInvRes(); // Cache up to 1 megapixel per GTX file const int maxLinesInCache = 1024 * 1024 / columns; auto cache = std::make_unique(maxLinesInCache); return new GTXVerticalShiftGrid(ctx, std::move(fp), name, columns, rows, extent, std::move(cache)); } // --------------------------------------------------------------------------- bool GTXVerticalShiftGrid::valueAt(int x, int y, float &out) const { assert(x >= 0 && y >= 0 && x < m_width && y < m_height); const std::vector *pBuffer = m_cache->get(0, y); if (pBuffer == nullptr) { try { m_buffer.resize(m_width); } catch (const std::exception &e) { pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); return false; } const size_t nLineSizeInBytes = sizeof(float) * m_width; m_fp->seek(40 + nLineSizeInBytes * static_cast(y)); if (m_fp->read(&m_buffer[0], nLineSizeInBytes) != nLineSizeInBytes) { proj_context_errno_set( m_ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } if (IS_LSB) { swap_words(&m_buffer[0], sizeof(float), m_width); } out = m_buffer[x]; try { m_cache->insert(0, y, m_buffer); } catch (const std::exception &e) { // Should normally not happen pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); } } else { out = (*pBuffer)[x]; } return true; } // --------------------------------------------------------------------------- bool GTXVerticalShiftGrid::isNodata(float val, double multiplier) const { /* 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 */ return val * multiplier > 1000 || val * multiplier < -1000 || val == -88.88880f; } // --------------------------------------------------------------------------- VerticalShiftGridSet::VerticalShiftGridSet() = default; // --------------------------------------------------------------------------- VerticalShiftGridSet::~VerticalShiftGridSet() = default; // --------------------------------------------------------------------------- static bool IsTIFF(size_t header_size, const unsigned char *header) { // Test combinations of signature for ClassicTIFF/BigTIFF little/big endian return header_size >= 4 && (((header[0] == 'I' && header[1] == 'I') || (header[0] == 'M' && header[1] == 'M')) && ((header[2] == 0x2A && header[3] == 0) || (header[3] == 0x2A && header[2] == 0) || (header[2] == 0x2B && header[3] == 0) || (header[3] == 0x2B && header[2] == 0))); } #ifdef TIFF_ENABLED // --------------------------------------------------------------------------- enum class TIFFDataType { Int16, UInt16, Int32, UInt32, Float32, Float64 }; // --------------------------------------------------------------------------- constexpr uint16_t TIFFTAG_GEOPIXELSCALE = 33550; constexpr uint16_t TIFFTAG_GEOTIEPOINTS = 33922; constexpr uint16_t TIFFTAG_GEOTRANSMATRIX = 34264; constexpr uint16_t TIFFTAG_GEOKEYDIRECTORY = 34735; constexpr uint16_t TIFFTAG_GEODOUBLEPARAMS = 34736; constexpr uint16_t TIFFTAG_GEOASCIIPARAMS = 34737; #ifndef TIFFTAG_GDAL_METADATA // Starting with libtiff > 4.1.0, those symbolic names are #define in tiff.h constexpr uint16_t TIFFTAG_GDAL_METADATA = 42112; constexpr uint16_t TIFFTAG_GDAL_NODATA = 42113; #endif // --------------------------------------------------------------------------- class BlockCache { public: void insert(uint32_t ifdIdx, uint32_t blockNumber, const std::vector &data); const std::vector *get(uint32_t ifdIdx, uint32_t blockNumber); private: typedef uint64_t Key; static constexpr int NUM_BLOCKS_AT_CROSSING_TILES = 4; static constexpr int MAX_SAMPLE_COUNT = 3; lru11::Cache, lru11::NullLock> cache_{ NUM_BLOCKS_AT_CROSSING_TILES * MAX_SAMPLE_COUNT}; }; // --------------------------------------------------------------------------- void BlockCache::insert(uint32_t ifdIdx, uint32_t blockNumber, const std::vector &data) { cache_.insert((static_cast(ifdIdx) << 32) | blockNumber, data); } // --------------------------------------------------------------------------- const std::vector *BlockCache::get(uint32_t ifdIdx, uint32_t blockNumber) { return cache_.getPtr((static_cast(ifdIdx) << 32) | blockNumber); } // --------------------------------------------------------------------------- class GTiffGrid : public Grid { PJ_CONTEXT *m_ctx; // owned by the belonging GTiffDataset TIFF *m_hTIFF; // owned by the belonging GTiffDataset BlockCache &m_cache; // owned by the belonging GTiffDataset File *m_fp; // owned by the belonging GTiffDataset uint32_t m_ifdIdx; TIFFDataType m_dt; uint16_t m_samplesPerPixel; uint16_t m_planarConfig; // set to -1 if m_samplesPerPixel == 1 bool m_bottomUp; toff_t m_dirOffset; bool m_tiled; uint32_t m_blockWidth = 0; uint32_t m_blockHeight = 0; mutable std::vector m_buffer{}; mutable uint32_t m_bufferBlockId = std::numeric_limits::max(); unsigned m_blocksPerRow = 0; unsigned m_blocksPerCol = 0; unsigned m_blocks = 0; std::vector m_adfOffset{}; std::vector m_adfScale{}; std::map, std::string> m_metadata{}; bool m_hasNodata = false; bool m_blockIs256Pixel = false; bool m_isSingleBlock = false; float m_noData = 0.0f; uint32_t m_subfileType = 0; GTiffGrid(const GTiffGrid &) = delete; GTiffGrid &operator=(const GTiffGrid &) = delete; template float readValue(const std::vector &buffer, uint32_t offsetInBlock, uint16_t sample) const; public: GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache, File *fp, uint32_t ifdIdx, const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn, TIFFDataType dtIn, uint16_t samplesPerPixelIn, uint16_t planarConfig, bool bottomUpIn); ~GTiffGrid() override; uint16_t samplesPerPixel() const { return m_samplesPerPixel; } bool valueAt(uint16_t sample, int x, int y, float &out) const; bool valuesAt(int x_start, int y_start, int x_count, int y_count, int sample_count, const int *sample_idx, float *out, bool &nodataFound) const; bool isNodata(float val) const; const std::string &metadataItem(const std::string &key, int sample = -1) const override; uint32_t subfileType() const { return m_subfileType; } void reassign_context(PJ_CONTEXT *ctx) { m_ctx = ctx; } bool hasChanged() const override { return m_fp->hasChanged(); } }; // --------------------------------------------------------------------------- GTiffGrid::GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache, File *fp, uint32_t ifdIdx, const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn, TIFFDataType dtIn, uint16_t samplesPerPixelIn, uint16_t planarConfig, bool bottomUpIn) : Grid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx), m_hTIFF(hTIFF), m_cache(cache), m_fp(fp), m_ifdIdx(ifdIdx), m_dt(dtIn), m_samplesPerPixel(samplesPerPixelIn), m_planarConfig(samplesPerPixelIn == 1 ? static_cast(-1) : planarConfig), m_bottomUp(bottomUpIn), m_dirOffset(TIFFCurrentDirOffset(hTIFF)), m_tiled(TIFFIsTiled(hTIFF) != 0) { if (m_tiled) { TIFFGetField(m_hTIFF, TIFFTAG_TILEWIDTH, &m_blockWidth); TIFFGetField(m_hTIFF, TIFFTAG_TILELENGTH, &m_blockHeight); } else { m_blockWidth = widthIn; TIFFGetField(m_hTIFF, TIFFTAG_ROWSPERSTRIP, &m_blockHeight); if (m_blockHeight > static_cast(m_height)) m_blockHeight = m_height; } m_blockIs256Pixel = (m_blockWidth == 256) && (m_blockHeight == 256); m_isSingleBlock = (m_blockWidth == static_cast(m_width)) && (m_blockHeight == static_cast(m_height)); TIFFGetField(m_hTIFF, TIFFTAG_SUBFILETYPE, &m_subfileType); m_blocksPerRow = (m_width + m_blockWidth - 1) / m_blockWidth; m_blocksPerCol = (m_height + m_blockHeight - 1) / m_blockHeight; m_blocks = m_blocksPerRow * m_blocksPerCol; const char *text = nullptr; // Poor-man XML parsing of TIFFTAG_GDAL_METADATA tag. Hopefully good // enough for our purposes. if (TIFFGetField(m_hTIFF, TIFFTAG_GDAL_METADATA, &text)) { const char *ptr = text; while (true) { ptr = strstr(ptr, "'); if (endTag == nullptr) break; const char *endValue = strchr(endTag, '<'); if (endValue == nullptr) break; std::string tag; tag.append(ptr, endTag - ptr); std::string value; value.append(endTag + 1, endValue - (endTag + 1)); std::string gridName; auto namePos = tag.find("name=\""); if (namePos == std::string::npos) break; { namePos += strlen("name=\""); const auto endQuote = tag.find('"', namePos); if (endQuote == std::string::npos) break; gridName = tag.substr(namePos, endQuote - namePos); } const auto samplePos = tag.find("sample=\""); int sample = -1; if (samplePos != std::string::npos) { sample = atoi(tag.c_str() + samplePos + strlen("sample=\"")); } m_metadata[std::pair(sample, gridName)] = value; auto rolePos = tag.find("role=\""); if (rolePos != std::string::npos) { rolePos += strlen("role=\""); const auto endQuote = tag.find('"', rolePos); if (endQuote == std::string::npos) break; const auto role = tag.substr(rolePos, endQuote - rolePos); if (role == "offset") { if (sample >= 0 && static_cast(sample) <= m_samplesPerPixel) { try { if (m_adfOffset.empty()) { m_adfOffset.resize(m_samplesPerPixel); m_adfScale.resize(m_samplesPerPixel, 1); } m_adfOffset[sample] = c_locale_stod(value); } catch (const std::exception &) { } } } else if (role == "scale") { if (sample >= 0 && static_cast(sample) <= m_samplesPerPixel) { try { if (m_adfOffset.empty()) { m_adfOffset.resize(m_samplesPerPixel); m_adfScale.resize(m_samplesPerPixel, 1); } m_adfScale[sample] = c_locale_stod(value); } catch (const std::exception &) { } } } } ptr = endValue + 1; } } if (TIFFGetField(m_hTIFF, TIFFTAG_GDAL_NODATA, &text)) { try { m_noData = static_cast(c_locale_stod(text)); m_hasNodata = true; } catch (const std::exception &) { } } auto oIter = m_metadata.find(std::pair(-1, "grid_name")); if (oIter != m_metadata.end()) { m_name += ", " + oIter->second; } } // --------------------------------------------------------------------------- GTiffGrid::~GTiffGrid() = default; // --------------------------------------------------------------------------- template float GTiffGrid::readValue(const std::vector &buffer, uint32_t offsetInBlock, uint16_t sample) const { const auto ptr = reinterpret_cast(buffer.data()); assert(offsetInBlock < buffer.size() / sizeof(T)); const auto val = ptr[offsetInBlock]; if ((!m_hasNodata || static_cast(val) != m_noData) && sample < m_adfScale.size()) { double scale = m_adfScale[sample]; double offset = m_adfOffset[sample]; return static_cast(val * scale + offset); } else { return static_cast(val); } } // --------------------------------------------------------------------------- bool GTiffGrid::valueAt(uint16_t sample, int x, int yFromBottom, float &out) const { assert(x >= 0 && yFromBottom >= 0 && x < m_width && yFromBottom < m_height); assert(sample < m_samplesPerPixel); // All non-TIFF grids have the first rows in the file being the one // corresponding to the southern-most row. In GeoTIFF, the convention is // *generally* different (when m_bottomUp == false), TIFF being an // image-oriented image. If m_bottomUp == true, then we had GeoTIFF hints // that the first row of the image is the southern-most. const int yTIFF = m_bottomUp ? yFromBottom : m_height - 1 - yFromBottom; int blockXOff; int blockYOff; uint32_t blockId; if (m_blockIs256Pixel) { const int blockX = x / 256; blockXOff = x % 256; const int blockY = yTIFF / 256; blockYOff = yTIFF % 256; blockId = blockY * m_blocksPerRow + blockX; } else if (m_isSingleBlock) { blockXOff = x; blockYOff = yTIFF; blockId = 0; } else { const int blockX = x / m_blockWidth; blockXOff = x % m_blockWidth; const int blockY = yTIFF / m_blockHeight; blockYOff = yTIFF % m_blockHeight; blockId = blockY * m_blocksPerRow + blockX; } if (m_planarConfig == PLANARCONFIG_SEPARATE) { blockId += sample * m_blocks; } const std::vector *pBuffer = blockId == m_bufferBlockId ? &m_buffer : m_cache.get(m_ifdIdx, blockId); if (pBuffer == nullptr) { if (TIFFCurrentDirOffset(m_hTIFF) != m_dirOffset && !TIFFSetSubDirectory(m_hTIFF, m_dirOffset)) { return false; } if (m_buffer.empty()) { const auto blockSize = static_cast( m_tiled ? TIFFTileSize64(m_hTIFF) : TIFFStripSize64(m_hTIFF)); try { m_buffer.resize(blockSize); } catch (const std::exception &e) { pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); return false; } } if (m_tiled) { if (TIFFReadEncodedTile(m_hTIFF, blockId, m_buffer.data(), m_buffer.size()) == -1) { return false; } } else { if (TIFFReadEncodedStrip(m_hTIFF, blockId, m_buffer.data(), m_buffer.size()) == -1) { return false; } } pBuffer = &m_buffer; try { m_cache.insert(m_ifdIdx, blockId, m_buffer); m_bufferBlockId = blockId; } catch (const std::exception &e) { // Should normally not happen pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); } } uint32_t offsetInBlock; if (m_blockIs256Pixel) offsetInBlock = blockXOff + blockYOff * 256U; else offsetInBlock = blockXOff + blockYOff * m_blockWidth; if (m_planarConfig == PLANARCONFIG_CONTIG) offsetInBlock = offsetInBlock * m_samplesPerPixel + sample; switch (m_dt) { case TIFFDataType::Int16: out = readValue(*pBuffer, offsetInBlock, sample); break; case TIFFDataType::UInt16: out = readValue(*pBuffer, offsetInBlock, sample); break; case TIFFDataType::Int32: out = readValue(*pBuffer, offsetInBlock, sample); break; case TIFFDataType::UInt32: out = readValue(*pBuffer, offsetInBlock, sample); break; case TIFFDataType::Float32: out = readValue(*pBuffer, offsetInBlock, sample); break; case TIFFDataType::Float64: out = readValue(*pBuffer, offsetInBlock, sample); break; } return true; } // --------------------------------------------------------------------------- bool GTiffGrid::valuesAt(int x_start, int y_start, int x_count, int y_count, int sample_count, const int *sample_idx, float *out, bool &nodataFound) const { const auto getTIFFRow = [this](int y) { return m_bottomUp ? y : m_height - 1 - y; }; nodataFound = false; if (m_blockIs256Pixel && m_planarConfig == PLANARCONFIG_CONTIG && m_dt == TIFFDataType::Float32 && (x_start / 256) == (x_start + x_count - 1) / 256 && getTIFFRow(y_start) / 256 == getTIFFRow(y_start + y_count - 1) / 256 && !m_hasNodata && m_adfScale.empty() && (sample_count == 1 || (sample_count == 2 && sample_idx[1] == sample_idx[0] + 1) || (sample_count == 3 && sample_idx[1] == sample_idx[0] + 1 && sample_idx[2] == sample_idx[0] + 2))) { const int yTIFF = m_bottomUp ? y_start : m_height - (y_start + y_count); int blockXOff; int blockYOff; uint32_t blockId; const int blockX = x_start / 256; blockXOff = x_start % 256; const int blockY = yTIFF / 256; blockYOff = yTIFF % 256; blockId = blockY * m_blocksPerRow + blockX; const std::vector *pBuffer = blockId == m_bufferBlockId ? &m_buffer : m_cache.get(m_ifdIdx, blockId); if (pBuffer == nullptr) { if (TIFFCurrentDirOffset(m_hTIFF) != m_dirOffset && !TIFFSetSubDirectory(m_hTIFF, m_dirOffset)) { return false; } if (m_buffer.empty()) { const auto blockSize = static_cast(m_tiled ? TIFFTileSize64(m_hTIFF) : TIFFStripSize64(m_hTIFF)); try { m_buffer.resize(blockSize); } catch (const std::exception &e) { pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); return false; } } if (m_tiled) { if (TIFFReadEncodedTile(m_hTIFF, blockId, m_buffer.data(), m_buffer.size()) == -1) { return false; } } else { if (TIFFReadEncodedStrip(m_hTIFF, blockId, m_buffer.data(), m_buffer.size()) == -1) { return false; } } pBuffer = &m_buffer; try { m_cache.insert(m_ifdIdx, blockId, m_buffer); m_bufferBlockId = blockId; } catch (const std::exception &e) { // Should normally not happen pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); } } uint32_t offsetInBlockStart = blockXOff + blockYOff * 256U; if (sample_count == m_samplesPerPixel) { const int sample_count_mul_x_count = sample_count * x_count; for (int y = 0; y < y_count; ++y) { uint32_t offsetInBlock = (offsetInBlockStart + 256 * (m_bottomUp ? y : y_count - 1 - y)) * m_samplesPerPixel + sample_idx[0]; memcpy(out, reinterpret_cast(pBuffer->data()) + offsetInBlock, sample_count_mul_x_count * sizeof(float)); out += sample_count_mul_x_count; } } else { switch (sample_count) { case 1: for (int y = 0; y < y_count; ++y) { uint32_t offsetInBlock = (offsetInBlockStart + 256 * (m_bottomUp ? y : y_count - 1 - y)) * m_samplesPerPixel + sample_idx[0]; const float *in_ptr = reinterpret_cast(pBuffer->data()) + offsetInBlock; for (int x = 0; x < x_count; ++x) { memcpy(out, in_ptr, sample_count * sizeof(float)); in_ptr += m_samplesPerPixel; out += sample_count; } } break; case 2: for (int y = 0; y < y_count; ++y) { uint32_t offsetInBlock = (offsetInBlockStart + 256 * (m_bottomUp ? y : y_count - 1 - y)) * m_samplesPerPixel + sample_idx[0]; const float *in_ptr = reinterpret_cast(pBuffer->data()) + offsetInBlock; for (int x = 0; x < x_count; ++x) { memcpy(out, in_ptr, sample_count * sizeof(float)); in_ptr += m_samplesPerPixel; out += sample_count; } } break; case 3: for (int y = 0; y < y_count; ++y) { uint32_t offsetInBlock = (offsetInBlockStart + 256 * (m_bottomUp ? y : y_count - 1 - y)) * m_samplesPerPixel + sample_idx[0]; const float *in_ptr = reinterpret_cast(pBuffer->data()) + offsetInBlock; for (int x = 0; x < x_count; ++x) { memcpy(out, in_ptr, sample_count * sizeof(float)); in_ptr += m_samplesPerPixel; out += sample_count; } } break; } } return true; } for (int y = y_start; y < y_start + y_count; ++y) { for (int x = x_start; x < x_start + x_count; ++x) { for (int isample = 0; isample < sample_count; ++isample) { if (!valueAt(static_cast(sample_idx[isample]), x, y, *out)) return false; if (isNodata(*out)) { nodataFound = true; } ++out; } } } return true; } // --------------------------------------------------------------------------- bool GTiffGrid::isNodata(float val) const { return (m_hasNodata && val == m_noData) || std::isnan(val); } // --------------------------------------------------------------------------- const std::string >iffGrid::metadataItem(const std::string &key, int sample) const { auto iter = m_metadata.find(std::pair(sample, key)); if (iter == m_metadata.end()) { return emptyString; } return iter->second; } // --------------------------------------------------------------------------- class GTiffDataset { PJ_CONTEXT *m_ctx; std::unique_ptr m_fp; TIFF *m_hTIFF = nullptr; bool m_hasNextGrid = false; uint32_t m_ifdIdx = 0; toff_t m_nextDirOffset = 0; std::string m_filename{}; BlockCache m_cache{}; GTiffDataset(const GTiffDataset &) = delete; GTiffDataset &operator=(const GTiffDataset &) = delete; // libtiff I/O routines static tsize_t tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) { GTiffDataset *self = static_cast(fd); return self->m_fp->read(buf, size); } static tsize_t tiffWriteProc(thandle_t, tdata_t, tsize_t) { assert(false); return 0; } static toff_t tiffSeekProc(thandle_t fd, toff_t off, int whence) { GTiffDataset *self = static_cast(fd); if (self->m_fp->seek(off, whence)) return static_cast(self->m_fp->tell()); else return static_cast(-1); } static int tiffCloseProc(thandle_t) { // done in destructor return 0; } static toff_t tiffSizeProc(thandle_t fd) { GTiffDataset *self = static_cast(fd); const auto old_off = self->m_fp->tell(); self->m_fp->seek(0, SEEK_END); const auto file_size = static_cast(self->m_fp->tell()); self->m_fp->seek(old_off); return file_size; } static int tiffMapProc(thandle_t, tdata_t *, toff_t *) { return (0); } static void tiffUnmapProc(thandle_t, tdata_t, toff_t) {} public: GTiffDataset(PJ_CONTEXT *ctx, std::unique_ptr &&fp) : m_ctx(ctx), m_fp(std::move(fp)) {} virtual ~GTiffDataset(); bool openTIFF(const std::string &filename); std::unique_ptr nextGrid(); void reassign_context(PJ_CONTEXT *ctx) { m_ctx = ctx; m_fp->reassign_context(ctx); } }; // --------------------------------------------------------------------------- GTiffDataset::~GTiffDataset() { if (m_hTIFF) TIFFClose(m_hTIFF); } // --------------------------------------------------------------------------- class OneTimeTIFFTagInit { static TIFFExtendProc ParentExtender; // Function called by libtiff when initializing a TIFF directory static void GTiffTagExtender(TIFF *tif) { static const TIFFFieldInfo xtiffFieldInfo[] = { // GeoTIFF tags {TIFFTAG_GEOPIXELSCALE, -1, -1, TIFF_DOUBLE, FIELD_CUSTOM, TRUE, TRUE, const_cast("GeoPixelScale")}, {TIFFTAG_GEOTIEPOINTS, -1, -1, TIFF_DOUBLE, FIELD_CUSTOM, TRUE, TRUE, const_cast("GeoTiePoints")}, {TIFFTAG_GEOTRANSMATRIX, -1, -1, TIFF_DOUBLE, FIELD_CUSTOM, TRUE, TRUE, const_cast("GeoTransformationMatrix")}, {TIFFTAG_GEOKEYDIRECTORY, -1, -1, TIFF_SHORT, FIELD_CUSTOM, TRUE, TRUE, const_cast("GeoKeyDirectory")}, {TIFFTAG_GEODOUBLEPARAMS, -1, -1, TIFF_DOUBLE, FIELD_CUSTOM, TRUE, TRUE, const_cast("GeoDoubleParams")}, {TIFFTAG_GEOASCIIPARAMS, -1, -1, TIFF_ASCII, FIELD_CUSTOM, TRUE, FALSE, const_cast("GeoASCIIParams")}, // GDAL tags {TIFFTAG_GDAL_METADATA, -1, -1, TIFF_ASCII, FIELD_CUSTOM, TRUE, FALSE, const_cast("GDALMetadata")}, {TIFFTAG_GDAL_NODATA, -1, -1, TIFF_ASCII, FIELD_CUSTOM, TRUE, FALSE, const_cast("GDALNoDataValue")}, }; if (ParentExtender) (*ParentExtender)(tif); TIFFMergeFieldInfo(tif, xtiffFieldInfo, sizeof(xtiffFieldInfo) / sizeof(xtiffFieldInfo[0])); } public: OneTimeTIFFTagInit() { assert(ParentExtender == nullptr); // Install our TIFF tag extender ParentExtender = TIFFSetTagExtender(GTiffTagExtender); } }; TIFFExtendProc OneTimeTIFFTagInit::ParentExtender = nullptr; // --------------------------------------------------------------------------- bool GTiffDataset::openTIFF(const std::string &filename) { static OneTimeTIFFTagInit oneTimeTIFFTagInit; m_hTIFF = TIFFClientOpen(filename.c_str(), "r", static_cast(this), GTiffDataset::tiffReadProc, GTiffDataset::tiffWriteProc, GTiffDataset::tiffSeekProc, GTiffDataset::tiffCloseProc, GTiffDataset::tiffSizeProc, GTiffDataset::tiffMapProc, GTiffDataset::tiffUnmapProc); m_filename = filename; m_hasNextGrid = true; return m_hTIFF != nullptr; } // --------------------------------------------------------------------------- std::unique_ptr GTiffDataset::nextGrid() { if (!m_hasNextGrid) return nullptr; if (m_nextDirOffset) { TIFFSetSubDirectory(m_hTIFF, m_nextDirOffset); } uint32_t width = 0; uint32_t height = 0; TIFFGetField(m_hTIFF, TIFFTAG_IMAGEWIDTH, &width); TIFFGetField(m_hTIFF, TIFFTAG_IMAGELENGTH, &height); if (width == 0 || height == 0 || width > INT_MAX || height > INT_MAX) { pj_log(m_ctx, PJ_LOG_ERROR, _("Invalid image size")); return nullptr; } uint16_t samplesPerPixel = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_SAMPLESPERPIXEL, &samplesPerPixel)) { pj_log(m_ctx, PJ_LOG_ERROR, _("Missing SamplesPerPixel tag")); return nullptr; } if (samplesPerPixel == 0) { pj_log(m_ctx, PJ_LOG_ERROR, _("Invalid SamplesPerPixel value")); return nullptr; } uint16_t bitsPerSample = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_BITSPERSAMPLE, &bitsPerSample)) { pj_log(m_ctx, PJ_LOG_ERROR, _("Missing BitsPerSample tag")); return nullptr; } uint16_t planarConfig = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_PLANARCONFIG, &planarConfig)) { pj_log(m_ctx, PJ_LOG_ERROR, _("Missing PlanarConfig tag")); return nullptr; } uint16_t sampleFormat = 0; if (!TIFFGetField(m_hTIFF, TIFFTAG_SAMPLEFORMAT, &sampleFormat)) { pj_log(m_ctx, PJ_LOG_ERROR, _("Missing SampleFormat tag")); return nullptr; } TIFFDataType dt; if (sampleFormat == SAMPLEFORMAT_INT && bitsPerSample == 16) dt = TIFFDataType::Int16; else if (sampleFormat == SAMPLEFORMAT_UINT && bitsPerSample == 16) dt = TIFFDataType::UInt16; else if (sampleFormat == SAMPLEFORMAT_INT && bitsPerSample == 32) dt = TIFFDataType::Int32; else if (sampleFormat == SAMPLEFORMAT_UINT && bitsPerSample == 32) dt = TIFFDataType::UInt32; else if (sampleFormat == SAMPLEFORMAT_IEEEFP && bitsPerSample == 32) dt = TIFFDataType::Float32; else if (sampleFormat == SAMPLEFORMAT_IEEEFP && bitsPerSample == 64) dt = TIFFDataType::Float64; else { pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported combination of SampleFormat " "and BitsPerSample values")); return nullptr; } uint16_t photometric = PHOTOMETRIC_MINISBLACK; if (!TIFFGetField(m_hTIFF, TIFFTAG_PHOTOMETRIC, &photometric)) photometric = PHOTOMETRIC_MINISBLACK; if (photometric != PHOTOMETRIC_MINISBLACK) { pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported Photometric value")); return nullptr; } uint16_t compression = COMPRESSION_NONE; if (!TIFFGetField(m_hTIFF, TIFFTAG_COMPRESSION, &compression)) compression = COMPRESSION_NONE; if (compression != COMPRESSION_NONE && !TIFFIsCODECConfigured(compression)) { pj_log(m_ctx, PJ_LOG_ERROR, _("Cannot open TIFF file due to missing codec.")); return nullptr; } // We really don't want to try dealing with old-JPEG images if (compression == COMPRESSION_OJPEG) { pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported compression method.")); return nullptr; } const auto blockSize = TIFFIsTiled(m_hTIFF) ? TIFFTileSize64(m_hTIFF) : TIFFStripSize64(m_hTIFF); if (blockSize == 0 || blockSize > 64 * 1024 * 2014) { pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported block size.")); return nullptr; } unsigned short count = 0; unsigned short *geokeys = nullptr; bool pixelIsArea = false; ExtentAndRes extent; extent.isGeographic = true; if (!TIFFGetField(m_hTIFF, TIFFTAG_GEOKEYDIRECTORY, &count, &geokeys)) { pj_log(m_ctx, PJ_LOG_TRACE, "No GeoKeys tag"); } else { if (count < 4 || (count % 4) != 0) { pj_log(m_ctx, PJ_LOG_ERROR, _("Wrong number of values in GeoKeys tag")); return nullptr; } if (geokeys[0] != 1) { pj_log(m_ctx, PJ_LOG_ERROR, _("Unsupported GeoTIFF major version")); return nullptr; } // We only know that we support GeoTIFF 1.0 and 1.1 at that time if (geokeys[1] != 1 || geokeys[2] > 1) { pj_log(m_ctx, PJ_LOG_TRACE, "GeoTIFF %d.%d possibly not handled", geokeys[1], geokeys[2]); } for (unsigned int i = 4; i + 3 < count; i += 4) { constexpr unsigned short GTModelTypeGeoKey = 1024; constexpr unsigned short ModelTypeProjected = 1; constexpr unsigned short ModelTypeGeographic = 2; constexpr unsigned short GTRasterTypeGeoKey = 1025; constexpr unsigned short RasterPixelIsArea = 1; // constexpr unsigned short RasterPixelIsPoint = 2; if (geokeys[i] == GTModelTypeGeoKey) { if (geokeys[i + 3] == ModelTypeProjected) { extent.isGeographic = false; } else if (geokeys[i + 3] != ModelTypeGeographic) { pj_log(m_ctx, PJ_LOG_ERROR, _("Only GTModelTypeGeoKey = " "ModelTypeGeographic or ModelTypeProjected are " "supported")); return nullptr; } } else if (geokeys[i] == GTRasterTypeGeoKey) { if (geokeys[i + 3] == RasterPixelIsArea) { pixelIsArea = true; } } } } double hRes = 0; double vRes = 0; double west = 0; double north = 0; double *matrix = nullptr; if (TIFFGetField(m_hTIFF, TIFFTAG_GEOTRANSMATRIX, &count, &matrix) && count == 16) { // If using GDAL to produce a bottom-up georeferencing, it will produce // a GeoTransformationMatrix, since negative values in GeoPixelScale // have historically been implementation bugs. if (matrix[1] != 0 || matrix[4] != 0) { pj_log(m_ctx, PJ_LOG_ERROR, _("Rotational terms not supported in " "GeoTransformationMatrix tag")); return nullptr; } west = matrix[3]; hRes = matrix[0]; north = matrix[7]; vRes = -matrix[5]; // negation to simulate GeoPixelScale convention } else { double *geopixelscale = nullptr; if (TIFFGetField(m_hTIFF, TIFFTAG_GEOPIXELSCALE, &count, &geopixelscale) != 1) { pj_log(m_ctx, PJ_LOG_ERROR, _("No GeoPixelScale tag")); return nullptr; } if (count != 3) { pj_log(m_ctx, PJ_LOG_ERROR, _("Wrong number of values in GeoPixelScale tag")); return nullptr; } hRes = geopixelscale[0]; vRes = geopixelscale[1]; double *geotiepoints = nullptr; if (TIFFGetField(m_hTIFF, TIFFTAG_GEOTIEPOINTS, &count, &geotiepoints) != 1) { pj_log(m_ctx, PJ_LOG_ERROR, _("No GeoTiePoints tag")); return nullptr; } if (count != 6) { pj_log(m_ctx, PJ_LOG_ERROR, _("Wrong number of values in GeoTiePoints tag")); return nullptr; } west = geotiepoints[3] - geotiepoints[0] * hRes; north = geotiepoints[4] + geotiepoints[1] * vRes; } if (pixelIsArea) { west += 0.5 * hRes; north -= 0.5 * vRes; } const double mulFactor = extent.isGeographic ? DEG_TO_RAD : 1; extent.west = west * mulFactor; extent.north = north * mulFactor; extent.resX = hRes * mulFactor; extent.resY = fabs(vRes) * mulFactor; extent.east = (west + hRes * (width - 1)) * mulFactor; extent.south = (north - vRes * (height - 1)) * mulFactor; extent.computeInvRes(); if (vRes < 0) { std::swap(extent.north, extent.south); } if (!((!extent.isGeographic || (fabs(extent.west) <= 4 * M_PI && fabs(extent.east) <= 4 * M_PI && fabs(extent.north) <= M_PI + 1e-5 && fabs(extent.south) <= M_PI + 1e-5)) && extent.west < extent.east && extent.south < extent.north && extent.resX > 1e-10 && extent.resY > 1e-10)) { pj_log(m_ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), m_filename.c_str()); return nullptr; } auto ret = std::unique_ptr(new GTiffGrid( m_ctx, m_hTIFF, m_cache, m_fp.get(), m_ifdIdx, m_filename, width, height, extent, dt, samplesPerPixel, planarConfig, vRes < 0)); m_ifdIdx++; m_hasNextGrid = TIFFReadDirectory(m_hTIFF) != 0; m_nextDirOffset = TIFFCurrentDirOffset(m_hTIFF); // If the TIFF file contains multiple grids, append the index of the grid // in the grid name to help debugging. if (m_ifdIdx >= 2 || m_hasNextGrid) { ret->m_name += " (index "; ret->m_name += std::to_string(m_ifdIdx); // 1-based ret->m_name += ')'; } return ret; } // --------------------------------------------------------------------------- class GTiffVGridShiftSet : public VerticalShiftGridSet { std::unique_ptr m_GTiffDataset; GTiffVGridShiftSet(PJ_CONTEXT *ctx, std::unique_ptr &&fp) : m_GTiffDataset(new GTiffDataset(ctx, std::move(fp))) {} public: ~GTiffVGridShiftSet() override; static std::unique_ptr open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename); void reassign_context(PJ_CONTEXT *ctx) override { VerticalShiftGridSet::reassign_context(ctx); if (m_GTiffDataset) { m_GTiffDataset->reassign_context(ctx); } } bool reopen(PJ_CONTEXT *ctx) override { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s has changed. Re-loading it", m_name.c_str()); m_grids.clear(); m_GTiffDataset.reset(); auto fp = FileManager::open_resource_file(ctx, m_name.c_str()); if (!fp) { return false; } auto newGS = open(ctx, std::move(fp), m_name); if (newGS) { m_grids = std::move(newGS->m_grids); m_GTiffDataset = std::move(newGS->m_GTiffDataset); } return !m_grids.empty(); } }; // --------------------------------------------------------------------------- template static void insertIntoHierarchy(PJ_CONTEXT *ctx, std::unique_ptr &&grid, const std::string &gridName, const std::string &parentName, std::vector> &topGrids, std::map &mapGrids) { const auto &extent = grid->extentAndRes(); // If we have one or both of grid_name and parent_grid_name, try to use // the names to recreate the hierarchy if (!gridName.empty()) { if (mapGrids.find(gridName) != mapGrids.end()) { pj_log(ctx, PJ_LOG_DEBUG, "Several grids called %s found!", gridName.c_str()); } mapGrids[gridName] = grid.get(); } if (!parentName.empty()) { auto iter = mapGrids.find(parentName); if (iter == mapGrids.end()) { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s refers to non-existing parent %s. " "Using bounding-box method.", gridName.c_str(), parentName.c_str()); } else { if (iter->second->extentAndRes().contains(extent)) { iter->second->m_children.emplace_back(std::move(grid)); return; } else { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s refers to parent %s, but its extent is " "not included in it. Using bounding-box method.", gridName.c_str(), parentName.c_str()); } } } else if (!gridName.empty()) { topGrids.emplace_back(std::move(grid)); return; } const std::string &type = grid->metadataItem("TYPE"); // Fallback to analyzing spatial extents for (const auto &candidateParent : topGrids) { if (!type.empty() && candidateParent->metadataItem("TYPE") != type) { continue; } const auto &candidateParentExtent = candidateParent->extentAndRes(); if (candidateParentExtent.contains(extent)) { static_cast(candidateParent.get()) ->insertGrid(ctx, std::move(grid)); return; } else if (candidateParentExtent.intersects(extent)) { pj_log(ctx, PJ_LOG_DEBUG, "Partially intersecting grids found!"); } } topGrids.emplace_back(std::move(grid)); } // --------------------------------------------------------------------------- class GTiffVGrid : public VerticalShiftGrid { friend void insertIntoHierarchy( PJ_CONTEXT *ctx, std::unique_ptr &&grid, const std::string &gridName, const std::string &parentName, std::vector> &topGrids, std::map &mapGrids); std::unique_ptr m_grid; uint16_t m_idxSample; public: GTiffVGrid(std::unique_ptr &&grid, uint16_t idxSample); ~GTiffVGrid() override; bool valueAt(int x, int y, float &out) const override { return m_grid->valueAt(m_idxSample, x, y, out); } bool isNodata(float val, double /* multiplier */) const override { return m_grid->isNodata(val); } const std::string &metadataItem(const std::string &key, int sample = -1) const override { return m_grid->metadataItem(key, sample); } void insertGrid(PJ_CONTEXT *ctx, std::unique_ptr &&subgrid); void reassign_context(PJ_CONTEXT *ctx) override { m_grid->reassign_context(ctx); } bool hasChanged() const override { return m_grid->hasChanged(); } }; // --------------------------------------------------------------------------- GTiffVGridShiftSet::~GTiffVGridShiftSet() = default; // --------------------------------------------------------------------------- GTiffVGrid::GTiffVGrid(std::unique_ptr &&grid, uint16_t idxSample) : VerticalShiftGrid(grid->name(), grid->width(), grid->height(), grid->extentAndRes()), m_grid(std::move(grid)), m_idxSample(idxSample) {} // --------------------------------------------------------------------------- GTiffVGrid::~GTiffVGrid() = default; // --------------------------------------------------------------------------- void GTiffVGrid::insertGrid(PJ_CONTEXT *ctx, std::unique_ptr &&subgrid) { bool gridInserted = false; const auto &extent = subgrid->extentAndRes(); for (const auto &candidateParent : m_children) { const auto &candidateParentExtent = candidateParent->extentAndRes(); if (candidateParentExtent.contains(extent)) { static_cast(candidateParent.get()) ->insertGrid(ctx, std::move(subgrid)); gridInserted = true; break; } else if (candidateParentExtent.intersects(extent)) { pj_log(ctx, PJ_LOG_DEBUG, "Partially intersecting grids found!"); } } if (!gridInserted) { m_children.emplace_back(std::move(subgrid)); } } // --------------------------------------------------------------------------- std::unique_ptr GTiffVGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename) { auto set = std::unique_ptr( new GTiffVGridShiftSet(ctx, std::move(fp))); set->m_name = filename; set->m_format = "gtiff"; if (!set->m_GTiffDataset->openTIFF(filename)) { return nullptr; } uint16_t idxSample = 0; std::map mapGrids; for (int ifd = 0;; ++ifd) { auto grid = set->m_GTiffDataset->nextGrid(); if (!grid) { if (ifd == 0) { return nullptr; } break; } const auto subfileType = grid->subfileType(); if (subfileType != 0 && subfileType != FILETYPE_PAGE) { if (ifd == 0) { pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG, "Ignoring IFD %d as it has a unsupported subfileType", ifd); continue; } } // Identify the index of the vertical correction bool foundDescriptionForAtLeastOneSample = false; bool foundDescriptionForShift = false; for (int i = 0; i < static_cast(grid->samplesPerPixel()); ++i) { const auto &desc = grid->metadataItem("DESCRIPTION", i); if (!desc.empty()) { foundDescriptionForAtLeastOneSample = true; } if (desc == "geoid_undulation" || desc == "vertical_offset" || desc == "hydroid_height" || desc == "ellipsoidal_height_offset") { idxSample = static_cast(i); foundDescriptionForShift = true; } } if (foundDescriptionForAtLeastOneSample) { if (!foundDescriptionForShift) { if (ifd > 0) { // Assuming that extra IFD without our channel of interest // can be ignored // One could imagine to put the accuracy values in separate // IFD for example pj_log(ctx, PJ_LOG_DEBUG, "Ignoring IFD %d as it has no " "geoid_undulation/vertical_offset/hydroid_height/" "ellipsoidal_height_offset channel", ifd); continue; } else { pj_log(ctx, PJ_LOG_DEBUG, "IFD 0 has channel descriptions, but no " "geoid_undulation/vertical_offset/hydroid_height/" "ellipsoidal_height_offset channel"); return nullptr; } } } if (idxSample >= grid->samplesPerPixel()) { pj_log(ctx, PJ_LOG_ERROR, _("Invalid sample index")); return nullptr; } const std::string &gridName = grid->metadataItem("grid_name"); const std::string &parentName = grid->metadataItem("parent_grid_name"); auto vgrid = std::make_unique(std::move(grid), idxSample); insertIntoHierarchy(ctx, std::move(vgrid), gridName, parentName, set->m_grids, mapGrids); } return set; } #endif // TIFF_ENABLED // --------------------------------------------------------------------------- std::unique_ptr VerticalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) { if (filename == "null") { auto set = std::unique_ptr(new VerticalShiftGridSet()); set->m_name = filename; set->m_format = "null"; set->m_grids.push_back(std::unique_ptr( new NullVerticalShiftGrid())); return set; } auto fp = FileManager::open_resource_file(ctx, filename.c_str()); if (!fp) { return nullptr; } const auto &actualName(fp->name()); if (ends_with(actualName, "gtx") || ends_with(actualName, "GTX")) { auto grid = GTXVerticalShiftGrid::open(ctx, std::move(fp), actualName); if (!grid) { return nullptr; } auto set = std::unique_ptr(new VerticalShiftGridSet()); set->m_name = actualName; set->m_format = "gtx"; set->m_grids.push_back(std::unique_ptr(grid)); return set; } /* -------------------------------------------------------------------- */ /* Load a header, to determine the file type. */ /* -------------------------------------------------------------------- */ unsigned char header[4]; size_t header_size = fp->read(header, sizeof(header)); if (header_size != sizeof(header)) { return nullptr; } fp->seek(0); if (IsTIFF(header_size, header)) { #ifdef TIFF_ENABLED auto set = std::unique_ptr( GTiffVGridShiftSet::open(ctx, std::move(fp), actualName)); if (!set) proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return set; #else pj_log(ctx, PJ_LOG_ERROR, _("TIFF grid, but TIFF support disabled in this build")); return nullptr; #endif } pj_log(ctx, PJ_LOG_ERROR, "Unrecognized vertical grid format for filename '%s'", filename.c_str()); return nullptr; } // --------------------------------------------------------------------------- bool VerticalShiftGridSet::reopen(PJ_CONTEXT *ctx) { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s has changed. Re-loading it", m_name.c_str()); auto newGS = open(ctx, m_name); m_grids.clear(); if (newGS) { m_grids = std::move(newGS->m_grids); } return !m_grids.empty(); } // --------------------------------------------------------------------------- static bool isPointInExtent(double x, double y, const ExtentAndRes &extent, double eps = 0) { if (!(y + eps >= extent.south && y - eps <= extent.north)) return false; if (extent.fullWorldLongitude()) return true; if (extent.isGeographic) { if (x + eps < extent.west) x += 2 * M_PI; else if (x - eps > extent.east) x -= 2 * M_PI; } if (!(x + eps >= extent.west && x - eps <= extent.east)) return false; return true; } // --------------------------------------------------------------------------- const VerticalShiftGrid *VerticalShiftGrid::gridAt(double longitude, double lat) const { for (const auto &child : m_children) { const auto &extentChild = child->extentAndRes(); if (isPointInExtent(longitude, lat, extentChild)) { return child->gridAt(longitude, lat); } } return this; } // --------------------------------------------------------------------------- const VerticalShiftGrid *VerticalShiftGridSet::gridAt(double longitude, double lat) const { for (const auto &grid : m_grids) { if (grid->isNullGrid()) { return grid.get(); } const auto &extent = grid->extentAndRes(); if (isPointInExtent(longitude, lat, extent)) { return grid->gridAt(longitude, lat); } } return nullptr; } // --------------------------------------------------------------------------- void VerticalShiftGridSet::reassign_context(PJ_CONTEXT *ctx) { for (const auto &grid : m_grids) { grid->reassign_context(ctx); } } // --------------------------------------------------------------------------- HorizontalShiftGrid::HorizontalShiftGrid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn) : Grid(nameIn, widthIn, heightIn, extentIn) {} // --------------------------------------------------------------------------- HorizontalShiftGrid::~HorizontalShiftGrid() = default; // --------------------------------------------------------------------------- HorizontalShiftGridSet::HorizontalShiftGridSet() = default; // --------------------------------------------------------------------------- HorizontalShiftGridSet::~HorizontalShiftGridSet() = default; // --------------------------------------------------------------------------- class NullHorizontalShiftGrid : public HorizontalShiftGrid { public: NullHorizontalShiftGrid() : HorizontalShiftGrid("null", 3, 3, globalExtent()) {} bool isNullGrid() const override { return true; } bool valueAt(int, int, bool, float &longShift, float &latShift) const override; void reassign_context(PJ_CONTEXT *) override {} bool hasChanged() const override { return false; } const std::string &metadataItem(const std::string &, int) const override { return emptyString; } }; // --------------------------------------------------------------------------- bool NullHorizontalShiftGrid::valueAt(int, int, bool, float &longShift, float &latShift) const { longShift = 0.0f; latShift = 0.0f; return true; } // --------------------------------------------------------------------------- static double to_double(const void *data) { double d; memcpy(&d, data, sizeof(d)); return d; } // --------------------------------------------------------------------------- class NTv1Grid : public HorizontalShiftGrid { PJ_CONTEXT *m_ctx; std::unique_ptr m_fp; NTv1Grid(const NTv1Grid &) = delete; NTv1Grid &operator=(const NTv1Grid &) = delete; public: explicit NTv1Grid(PJ_CONTEXT *ctx, std::unique_ptr &&fp, const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn) : HorizontalShiftGrid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx), m_fp(std::move(fp)) {} ~NTv1Grid() override; bool valueAt(int, int, bool, float &longShift, float &latShift) const override; static NTv1Grid *open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename); void reassign_context(PJ_CONTEXT *ctx) override { m_ctx = ctx; m_fp->reassign_context(ctx); } bool hasChanged() const override { return m_fp->hasChanged(); } const std::string &metadataItem(const std::string &, int) const override { return emptyString; } }; // --------------------------------------------------------------------------- NTv1Grid::~NTv1Grid() = default; // --------------------------------------------------------------------------- NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename) { unsigned char header[192]; /* -------------------------------------------------------------------- */ /* Read the header. */ /* -------------------------------------------------------------------- */ if (fp->read(header, sizeof(header)) != sizeof(header)) { proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } /* -------------------------------------------------------------------- */ /* Regularize fields of interest. */ /* -------------------------------------------------------------------- */ if (IS_LSB) { swap_words(header + 8, sizeof(int), 1); swap_words(header + 24, sizeof(double), 1); swap_words(header + 40, sizeof(double), 1); swap_words(header + 56, sizeof(double), 1); swap_words(header + 72, sizeof(double), 1); swap_words(header + 88, sizeof(double), 1); swap_words(header + 104, sizeof(double), 1); } int recordCount; memcpy(&recordCount, header + 8, sizeof(recordCount)); if (recordCount != 12) { pj_log(ctx, PJ_LOG_ERROR, _("NTv1 grid shift file has wrong record count, corrupt?")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } ExtentAndRes extent; extent.isGeographic = true; extent.west = -to_double(header + 72) * DEG_TO_RAD; extent.south = to_double(header + 24) * DEG_TO_RAD; extent.east = -to_double(header + 56) * DEG_TO_RAD; extent.north = to_double(header + 40) * DEG_TO_RAD; extent.resX = to_double(header + 104) * DEG_TO_RAD; extent.resY = to_double(header + 88) * DEG_TO_RAD; extent.computeInvRes(); if (!(fabs(extent.west) <= 4 * M_PI && fabs(extent.east) <= 4 * M_PI && fabs(extent.north) <= M_PI + 1e-5 && fabs(extent.south) <= M_PI + 1e-5 && extent.west < extent.east && extent.south < extent.north && extent.resX > 1e-10 && extent.resY > 1e-10)) { pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), filename.c_str()); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } const int columns = static_cast( fabs((extent.east - extent.west) * extent.invResX + 0.5) + 1); const int rows = static_cast( fabs((extent.north - extent.south) * extent.invResY + 0.5) + 1); return new NTv1Grid(ctx, std::move(fp), filename, columns, rows, extent); } // --------------------------------------------------------------------------- bool NTv1Grid::valueAt(int x, int y, bool compensateNTConvention, float &longShift, float &latShift) const { assert(x >= 0 && y >= 0 && x < m_width && y < m_height); double two_doubles[2]; // NTv1 is organized from east to west ! m_fp->seek(192 + 2 * sizeof(double) * (y * m_width + m_width - 1 - x)); if (m_fp->read(&two_doubles[0], sizeof(two_doubles)) != sizeof(two_doubles)) { proj_context_errno_set(m_ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } if (IS_LSB) { swap_words(&two_doubles[0], sizeof(double), 2); } /* convert seconds to radians */ latShift = static_cast(two_doubles[0] * ((M_PI / 180.0) / 3600.0)); // west longitude positive convention ! longShift = (compensateNTConvention ? -1 : 1) * static_cast(two_doubles[1] * ((M_PI / 180.0) / 3600.0)); return true; } // --------------------------------------------------------------------------- class CTable2Grid : public HorizontalShiftGrid { PJ_CONTEXT *m_ctx; std::unique_ptr m_fp; CTable2Grid(const CTable2Grid &) = delete; CTable2Grid &operator=(const CTable2Grid &) = delete; public: CTable2Grid(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn) : HorizontalShiftGrid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx), m_fp(std::move(fp)) {} ~CTable2Grid() override; bool valueAt(int, int, bool, float &longShift, float &latShift) const override; static CTable2Grid *open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename); void reassign_context(PJ_CONTEXT *ctx) override { m_ctx = ctx; m_fp->reassign_context(ctx); } bool hasChanged() const override { return m_fp->hasChanged(); } const std::string &metadataItem(const std::string &, int) const override { return emptyString; } }; // --------------------------------------------------------------------------- CTable2Grid::~CTable2Grid() = default; // --------------------------------------------------------------------------- CTable2Grid *CTable2Grid::open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename) { unsigned char header[160]; /* -------------------------------------------------------------------- */ /* Read the header. */ /* -------------------------------------------------------------------- */ if (fp->read(header, sizeof(header)) != sizeof(header)) { proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } /* -------------------------------------------------------------------- */ /* Regularize fields of interest. */ /* -------------------------------------------------------------------- */ if (!IS_LSB) { swap_words(header + 96, sizeof(double), 4); swap_words(header + 128, sizeof(int), 2); } ExtentAndRes extent; extent.isGeographic = true; static_assert(sizeof(extent.west) == 8, "wrong sizeof"); static_assert(sizeof(extent.south) == 8, "wrong sizeof"); static_assert(sizeof(extent.resX) == 8, "wrong sizeof"); static_assert(sizeof(extent.resY) == 8, "wrong sizeof"); memcpy(&extent.west, header + 96, 8); memcpy(&extent.south, header + 104, 8); memcpy(&extent.resX, header + 112, 8); memcpy(&extent.resY, header + 120, 8); if (!(fabs(extent.west) <= 4 * M_PI && fabs(extent.south) <= M_PI + 1e-5 && extent.resX > 1e-10 && extent.resY > 1e-10)) { pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), filename.c_str()); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } int width; int height; memcpy(&width, header + 128, 4); memcpy(&height, header + 132, 4); if (width <= 0 || height <= 0) { proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } extent.east = extent.west + (width - 1) * extent.resX; extent.north = extent.south + (height - 1) * extent.resX; extent.computeInvRes(); return new CTable2Grid(ctx, std::move(fp), filename, width, height, extent); } // --------------------------------------------------------------------------- bool CTable2Grid::valueAt(int x, int y, bool compensateNTConvention, float &longShift, float &latShift) const { assert(x >= 0 && y >= 0 && x < m_width && y < m_height); float two_floats[2]; m_fp->seek(160 + 2 * sizeof(float) * (y * m_width + x)); if (m_fp->read(&two_floats[0], sizeof(two_floats)) != sizeof(two_floats)) { proj_context_errno_set(m_ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } if (!IS_LSB) { swap_words(&two_floats[0], sizeof(float), 2); } latShift = two_floats[1]; // west longitude positive convention ! longShift = (compensateNTConvention ? -1 : 1) * two_floats[0]; return true; } // --------------------------------------------------------------------------- class NTv2GridSet : public HorizontalShiftGridSet { std::unique_ptr m_fp; std::unique_ptr m_cache{}; NTv2GridSet(const NTv2GridSet &) = delete; NTv2GridSet &operator=(const NTv2GridSet &) = delete; explicit NTv2GridSet(std::unique_ptr &&fp) : m_fp(std::move(fp)) {} public: ~NTv2GridSet() override; static std::unique_ptr open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename); void reassign_context(PJ_CONTEXT *ctx) override { HorizontalShiftGridSet::reassign_context(ctx); m_fp->reassign_context(ctx); } }; // --------------------------------------------------------------------------- class NTv2Grid : public HorizontalShiftGrid { friend class NTv2GridSet; PJ_CONTEXT *m_ctx; // owned by the parent NTv2GridSet File *m_fp; // owned by the parent NTv2GridSet FloatLineCache *m_cache = nullptr; // owned by the parent NTv2GridSet uint32_t m_gridIdx; unsigned long long m_offset; bool m_mustSwap; mutable std::vector m_buffer{}; NTv2Grid(const NTv2Grid &) = delete; NTv2Grid &operator=(const NTv2Grid &) = delete; public: NTv2Grid(const std::string &nameIn, PJ_CONTEXT *ctx, File *fp, uint32_t gridIdx, unsigned long long offsetIn, bool mustSwapIn, int widthIn, int heightIn, const ExtentAndRes &extentIn) : HorizontalShiftGrid(nameIn, widthIn, heightIn, extentIn), m_ctx(ctx), m_fp(fp), m_gridIdx(gridIdx), m_offset(offsetIn), m_mustSwap(mustSwapIn) {} bool valueAt(int, int, bool, float &longShift, float &latShift) const override; const std::string &metadataItem(const std::string &, int) const override { return emptyString; } void setCache(FloatLineCache *cache) { m_cache = cache; } void reassign_context(PJ_CONTEXT *ctx) override { m_ctx = ctx; m_fp->reassign_context(ctx); } bool hasChanged() const override { return m_fp->hasChanged(); } }; // --------------------------------------------------------------------------- bool NTv2Grid::valueAt(int x, int y, bool compensateNTConvention, float &longShift, float &latShift) const { assert(x >= 0 && y >= 0 && x < m_width && y < m_height); const std::vector *pBuffer = m_cache->get(m_gridIdx, y); if (pBuffer == nullptr) { try { m_buffer.resize(4 * m_width); } catch (const std::exception &e) { pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); return false; } const size_t nLineSizeInBytes = 4 * sizeof(float) * m_width; // there are 4 components: lat shift, long shift, lat error, long error m_fp->seek(m_offset + nLineSizeInBytes * static_cast(y)); if (m_fp->read(&m_buffer[0], nLineSizeInBytes) != nLineSizeInBytes) { proj_context_errno_set( m_ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } // Remove lat and long error for (int i = 1; i < m_width; ++i) { m_buffer[2 * i] = m_buffer[4 * i]; m_buffer[2 * i + 1] = m_buffer[4 * i + 1]; } m_buffer.resize(2 * m_width); if (m_mustSwap) { swap_words(&m_buffer[0], sizeof(float), 2 * m_width); } // NTv2 is organized from east to west ! for (int i = 0; i < m_width / 2; ++i) { std::swap(m_buffer[2 * i], m_buffer[2 * (m_width - 1 - i)]); std::swap(m_buffer[2 * i + 1], m_buffer[2 * (m_width - 1 - i) + 1]); } try { m_cache->insert(m_gridIdx, y, m_buffer); } catch (const std::exception &e) { // Should normally not happen pj_log(m_ctx, PJ_LOG_ERROR, _("Exception %s"), e.what()); } } const std::vector &buffer = pBuffer ? *pBuffer : m_buffer; /* convert seconds to radians */ latShift = static_cast(buffer[2 * x] * ((M_PI / 180.0) / 3600.0)); // west longitude positive convention ! longShift = (compensateNTConvention ? -1 : 1) * static_cast(buffer[2 * x + 1] * ((M_PI / 180.0) / 3600.0)); return true; } // --------------------------------------------------------------------------- NTv2GridSet::~NTv2GridSet() = default; // --------------------------------------------------------------------------- std::unique_ptr NTv2GridSet::open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename) { File *fpRaw = fp.get(); auto set = std::unique_ptr(new NTv2GridSet(std::move(fp))); set->m_name = filename; set->m_format = "ntv2"; char header[11 * 16]; /* -------------------------------------------------------------------- */ /* Read the header. */ /* -------------------------------------------------------------------- */ if (fpRaw->read(header, sizeof(header)) != sizeof(header)) { proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } constexpr int OFFSET_GS_TYPE = 56; if (memcmp(header + OFFSET_GS_TYPE, "SECONDS", 7) != 0) { pj_log(ctx, PJ_LOG_ERROR, _("Only GS_TYPE=SECONDS is supported")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } const bool must_swap = (header[8] == 11) ? !IS_LSB : IS_LSB; constexpr int OFFSET_NUM_SUBFILES = 8 + 32; if (must_swap) { // swap_words( header+8, 4, 1 ); // swap_words( header+8+16, 4, 1 ); swap_words(header + OFFSET_NUM_SUBFILES, 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. */ /* -------------------------------------------------------------------- */ unsigned int num_subfiles; memcpy(&num_subfiles, header + OFFSET_NUM_SUBFILES, 4); std::map mapGrids; /* ==================================================================== */ /* Step through the subfiles, creating a grid for each. */ /* ==================================================================== */ int largestLine = 1; for (unsigned subfile = 0; subfile < num_subfiles; subfile++) { // Read header if (fpRaw->read(header, sizeof(header)) != sizeof(header)) { proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } if (strncmp(header, "SUB_NAME", 8) != 0) { proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } // Byte swap interesting fields if needed. constexpr int OFFSET_GS_COUNT = 8 + 16 * 10; constexpr int OFFSET_SOUTH_LAT = 8 + 16 * 4; if (must_swap) { // 6 double values: south, north, east, west, resY, // resX for (int i = 0; i < 6; i++) { swap_words(header + OFFSET_SOUTH_LAT + 16 * i, sizeof(double), 1); } swap_words(header + OFFSET_GS_COUNT, sizeof(int), 1); } std::string gridName; gridName.append(header + 8, 8); ExtentAndRes extent; extent.isGeographic = true; extent.south = to_double(header + OFFSET_SOUTH_LAT) * DEG_TO_RAD / 3600.0; /* S_LAT */ extent.north = to_double(header + OFFSET_SOUTH_LAT + 16) * DEG_TO_RAD / 3600.0; /* N_LAT */ extent.east = -to_double(header + OFFSET_SOUTH_LAT + 16 * 2) * DEG_TO_RAD / 3600.0; /* E_LONG */ extent.west = -to_double(header + OFFSET_SOUTH_LAT + 16 * 3) * DEG_TO_RAD / 3600.0; /* W_LONG */ extent.resY = to_double(header + OFFSET_SOUTH_LAT + 16 * 4) * DEG_TO_RAD / 3600.0; extent.resX = to_double(header + OFFSET_SOUTH_LAT + 16 * 5) * DEG_TO_RAD / 3600.0; extent.computeInvRes(); if (!(fabs(extent.west) <= 4 * M_PI && fabs(extent.east) <= 4 * M_PI && fabs(extent.north) <= M_PI + 1e-5 && fabs(extent.south) <= M_PI + 1e-5 && extent.west < extent.east && extent.south < extent.north && extent.resX > 1e-10 && extent.resY > 1e-10)) { pj_log(ctx, PJ_LOG_ERROR, _("Inconsistent georeferencing for %s"), filename.c_str()); proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } const int columns = static_cast( fabs((extent.east - extent.west) * extent.invResX + 0.5) + 1); const int rows = static_cast( fabs((extent.north - extent.south) * extent.invResY + 0.5) + 1); if (columns > largestLine) largestLine = columns; pj_log(ctx, PJ_LOG_TRACE, "NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)", gridName.c_str(), columns, rows, extent.west * RAD_TO_DEG, extent.south * RAD_TO_DEG, extent.east * RAD_TO_DEG, extent.north * RAD_TO_DEG); unsigned int gs_count; memcpy(&gs_count, header + OFFSET_GS_COUNT, 4); if (gs_count / columns != static_cast(rows)) { pj_log(ctx, PJ_LOG_ERROR, _("GS_COUNT(%u) does not match expected cells (%dx%d)"), gs_count, columns, rows); proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return nullptr; } const auto offset = fpRaw->tell(); auto grid = std::unique_ptr(new NTv2Grid( std::string(filename).append(", ").append(gridName), ctx, fpRaw, subfile, offset, must_swap, columns, rows, extent)); std::string parentName; parentName.assign(header + 24, 8); auto iter = mapGrids.find(parentName); auto gridPtr = grid.get(); if (iter == mapGrids.end()) { set->m_grids.emplace_back(std::move(grid)); } else { iter->second->m_children.emplace_back(std::move(grid)); } mapGrids[gridName] = gridPtr; // Skip grid data. 4 components of size float fpRaw->seek(static_cast(gs_count) * 4 * 4, SEEK_CUR); } // Cache up to 1 megapixel per NTv2 file const int maxLinesInCache = 1024 * 1024 / largestLine; set->m_cache = std::make_unique(maxLinesInCache); for (const auto &kv : mapGrids) { kv.second->setCache(set->m_cache.get()); } return set; } #ifdef TIFF_ENABLED // --------------------------------------------------------------------------- class GTiffHGridShiftSet : public HorizontalShiftGridSet { std::unique_ptr m_GTiffDataset; GTiffHGridShiftSet(PJ_CONTEXT *ctx, std::unique_ptr &&fp) : m_GTiffDataset(new GTiffDataset(ctx, std::move(fp))) {} public: ~GTiffHGridShiftSet() override; static std::unique_ptr open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename); void reassign_context(PJ_CONTEXT *ctx) override { HorizontalShiftGridSet::reassign_context(ctx); if (m_GTiffDataset) { m_GTiffDataset->reassign_context(ctx); } } bool reopen(PJ_CONTEXT *ctx) override { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s has changed. Re-loading it", m_name.c_str()); m_grids.clear(); m_GTiffDataset.reset(); auto fp = FileManager::open_resource_file(ctx, m_name.c_str()); if (!fp) { return false; } auto newGS = open(ctx, std::move(fp), m_name); if (newGS) { m_grids = std::move(newGS->m_grids); m_GTiffDataset = std::move(newGS->m_GTiffDataset); } return !m_grids.empty(); } }; // --------------------------------------------------------------------------- class GTiffHGrid : public HorizontalShiftGrid { friend void insertIntoHierarchy( PJ_CONTEXT *ctx, std::unique_ptr &&grid, const std::string &gridName, const std::string &parentName, std::vector> &topGrids, std::map &mapGrids); std::unique_ptr m_grid; uint16_t m_idxLatShift; uint16_t m_idxLongShift; double m_convFactorToRadian; bool m_positiveEast; public: GTiffHGrid(std::unique_ptr &&grid, uint16_t idxLatShift, uint16_t idxLongShift, double convFactorToRadian, bool positiveEast); ~GTiffHGrid() override; bool valueAt(int x, int y, bool, float &longShift, float &latShift) const override; const std::string &metadataItem(const std::string &key, int sample = -1) const override { return m_grid->metadataItem(key, sample); } void insertGrid(PJ_CONTEXT *ctx, std::unique_ptr &&subgrid); void reassign_context(PJ_CONTEXT *ctx) override { m_grid->reassign_context(ctx); } bool hasChanged() const override { return m_grid->hasChanged(); } }; // --------------------------------------------------------------------------- GTiffHGridShiftSet::~GTiffHGridShiftSet() = default; // --------------------------------------------------------------------------- GTiffHGrid::GTiffHGrid(std::unique_ptr &&grid, uint16_t idxLatShift, uint16_t idxLongShift, double convFactorToRadian, bool positiveEast) : HorizontalShiftGrid(grid->name(), grid->width(), grid->height(), grid->extentAndRes()), m_grid(std::move(grid)), m_idxLatShift(idxLatShift), m_idxLongShift(idxLongShift), m_convFactorToRadian(convFactorToRadian), m_positiveEast(positiveEast) {} // --------------------------------------------------------------------------- GTiffHGrid::~GTiffHGrid() = default; // --------------------------------------------------------------------------- bool GTiffHGrid::valueAt(int x, int y, bool, float &longShift, float &latShift) const { if (!m_grid->valueAt(m_idxLatShift, x, y, latShift) || !m_grid->valueAt(m_idxLongShift, x, y, longShift)) { return false; } // From arc-seconds to radians latShift = static_cast(latShift * m_convFactorToRadian); longShift = static_cast(longShift * m_convFactorToRadian); if (!m_positiveEast) { longShift = -longShift; } return true; } // --------------------------------------------------------------------------- void GTiffHGrid::insertGrid(PJ_CONTEXT *ctx, std::unique_ptr &&subgrid) { bool gridInserted = false; const auto &extent = subgrid->extentAndRes(); for (const auto &candidateParent : m_children) { const auto &candidateParentExtent = candidateParent->extentAndRes(); if (candidateParentExtent.contains(extent)) { static_cast(candidateParent.get()) ->insertGrid(ctx, std::move(subgrid)); gridInserted = true; break; } else if (candidateParentExtent.intersects(extent)) { pj_log(ctx, PJ_LOG_DEBUG, "Partially intersecting grids found!"); } } if (!gridInserted) { m_children.emplace_back(std::move(subgrid)); } } // --------------------------------------------------------------------------- std::unique_ptr GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename) { auto set = std::unique_ptr( new GTiffHGridShiftSet(ctx, std::move(fp))); set->m_name = filename; set->m_format = "gtiff"; if (!set->m_GTiffDataset->openTIFF(filename)) { return nullptr; } // Defaults inspired from NTv2 uint16_t idxLatShift = 0; uint16_t idxLongShift = 1; constexpr double ARC_SECOND_TO_RADIAN = (M_PI / 180.0) / 3600.0; double convFactorToRadian = ARC_SECOND_TO_RADIAN; bool positiveEast = true; std::map mapGrids; for (int ifd = 0;; ++ifd) { auto grid = set->m_GTiffDataset->nextGrid(); if (!grid) { if (ifd == 0) { return nullptr; } break; } const auto subfileType = grid->subfileType(); if (subfileType != 0 && subfileType != FILETYPE_PAGE) { if (ifd == 0) { pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG, _("Ignoring IFD %d as it has a unsupported subfileType"), ifd); continue; } } if (grid->samplesPerPixel() < 2) { if (ifd == 0) { pj_log(ctx, PJ_LOG_ERROR, _("At least 2 samples per pixel needed")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG, _("Ignoring IFD %d as it has not at least 2 samples"), ifd); continue; } } // Identify the index of the latitude and longitude offset channels bool foundDescriptionForAtLeastOneSample = false; bool foundDescriptionForLatOffset = false; bool foundDescriptionForLongOffset = false; for (int i = 0; i < static_cast(grid->samplesPerPixel()); ++i) { const auto &desc = grid->metadataItem("DESCRIPTION", i); if (!desc.empty()) { foundDescriptionForAtLeastOneSample = true; } if (desc == "latitude_offset") { idxLatShift = static_cast(i); foundDescriptionForLatOffset = true; } else if (desc == "longitude_offset") { idxLongShift = static_cast(i); foundDescriptionForLongOffset = true; } } if (foundDescriptionForAtLeastOneSample) { if (!foundDescriptionForLongOffset && !foundDescriptionForLatOffset) { if (ifd > 0) { // Assuming that extra IFD without // longitude_offset/latitude_offset can be ignored // One could imagine to put the accuracy values in separate // IFD for example pj_log(ctx, PJ_LOG_DEBUG, "Ignoring IFD %d as it has no " "longitude_offset/latitude_offset channel", ifd); continue; } else { pj_log(ctx, PJ_LOG_DEBUG, "IFD 0 has channel descriptions, but no " "longitude_offset/latitude_offset channel"); return nullptr; } } } if (foundDescriptionForLatOffset && !foundDescriptionForLongOffset) { pj_log( ctx, PJ_LOG_ERROR, _("Found latitude_offset channel, but not longitude_offset")); return nullptr; } else if (foundDescriptionForLongOffset && !foundDescriptionForLatOffset) { pj_log( ctx, PJ_LOG_ERROR, _("Found longitude_offset channel, but not latitude_offset")); return nullptr; } if (idxLatShift >= grid->samplesPerPixel() || idxLongShift >= grid->samplesPerPixel()) { pj_log(ctx, PJ_LOG_ERROR, _("Invalid sample index")); return nullptr; } if (foundDescriptionForLongOffset) { const std::string &positiveValue = grid->metadataItem("positive_value", idxLongShift); if (!positiveValue.empty()) { if (positiveValue == "west") { positiveEast = false; } else if (positiveValue == "east") { positiveEast = true; } else { pj_log(ctx, PJ_LOG_ERROR, _("Unsupported value %s for 'positive_value'"), positiveValue.c_str()); return nullptr; } } } // Identify their unit { const auto &unitLatShift = grid->metadataItem("UNITTYPE", idxLatShift); const auto &unitLongShift = grid->metadataItem("UNITTYPE", idxLongShift); if (unitLatShift != unitLongShift) { pj_log(ctx, PJ_LOG_ERROR, _("Different unit for longitude and latitude offset")); return nullptr; } if (!unitLatShift.empty()) { if (unitLatShift == "arc-second" || unitLatShift == "arc-seconds per year") { convFactorToRadian = ARC_SECOND_TO_RADIAN; } else if (unitLatShift == "radian") { convFactorToRadian = 1.0; } else if (unitLatShift == "degree") { convFactorToRadian = M_PI / 180.0; } else { pj_log(ctx, PJ_LOG_ERROR, _("Unsupported unit %s"), unitLatShift.c_str()); return nullptr; } } } const std::string &gridName = grid->metadataItem("grid_name"); const std::string &parentName = grid->metadataItem("parent_grid_name"); auto hgrid = std::make_unique( std::move(grid), idxLatShift, idxLongShift, convFactorToRadian, positiveEast); insertIntoHierarchy(ctx, std::move(hgrid), gridName, parentName, set->m_grids, mapGrids); } return set; } #endif // TIFF_ENABLED // --------------------------------------------------------------------------- std::unique_ptr HorizontalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) { if (filename == "null") { auto set = std::unique_ptr( new HorizontalShiftGridSet()); set->m_name = filename; set->m_format = "null"; set->m_grids.push_back(std::unique_ptr( new NullHorizontalShiftGrid())); return set; } auto fp = FileManager::open_resource_file(ctx, filename.c_str()); if (!fp) { return nullptr; } const auto &actualName(fp->name()); char header[160]; /* -------------------------------------------------------------------- */ /* Load a header, to determine the file type. */ /* -------------------------------------------------------------------- */ size_t header_size = fp->read(header, sizeof(header)); if (header_size != sizeof(header)) { /* some files may be smaller that sizeof(header), eg 160, so */ ctx->last_errno = 0; /* don't treat as a persistent error */ pj_log(ctx, PJ_LOG_DEBUG, "pj_gridinfo_init: short header read of %d bytes", (int)header_size); } fp->seek(0); /* -------------------------------------------------------------------- */ /* Determine file type. */ /* -------------------------------------------------------------------- */ if (header_size >= 144 + 16 && strncmp(header + 0, "HEADER", 6) == 0 && strncmp(header + 96, "W GRID", 6) == 0 && strncmp(header + 144, "TO NAD83 ", 16) == 0) { auto grid = NTv1Grid::open(ctx, std::move(fp), actualName); if (!grid) { return nullptr; } auto set = std::unique_ptr( new HorizontalShiftGridSet()); set->m_name = actualName; set->m_format = "ntv1"; set->m_grids.push_back(std::unique_ptr(grid)); return set; } else if (header_size >= 9 && strncmp(header + 0, "CTABLE V2", 9) == 0) { auto grid = CTable2Grid::open(ctx, std::move(fp), actualName); if (!grid) { return nullptr; } auto set = std::unique_ptr( new HorizontalShiftGridSet()); set->m_name = actualName; set->m_format = "ctable2"; set->m_grids.push_back(std::unique_ptr(grid)); return set; } else if (header_size >= 48 + 7 && strncmp(header + 0, "NUM_OREC", 8) == 0 && strncmp(header + 48, "GS_TYPE", 7) == 0) { return NTv2GridSet::open(ctx, std::move(fp), actualName); } else if (IsTIFF(header_size, reinterpret_cast(header))) { #ifdef TIFF_ENABLED auto set = std::unique_ptr( GTiffHGridShiftSet::open(ctx, std::move(fp), actualName)); if (!set) proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return set; #else pj_log(ctx, PJ_LOG_ERROR, _("TIFF grid, but TIFF support disabled in this build")); return nullptr; #endif } pj_log(ctx, PJ_LOG_ERROR, "Unrecognized horizontal grid format for filename '%s'", filename.c_str()); return nullptr; } // --------------------------------------------------------------------------- bool HorizontalShiftGridSet::reopen(PJ_CONTEXT *ctx) { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s has changed. Re-loading it", m_name.c_str()); auto newGS = open(ctx, m_name); m_grids.clear(); if (newGS) { m_grids = std::move(newGS->m_grids); } return !m_grids.empty(); } // --------------------------------------------------------------------------- #define REL_TOLERANCE_HGRIDSHIFT 1e-5 const HorizontalShiftGrid *HorizontalShiftGrid::gridAt(double longitude, double lat) const { for (const auto &child : m_children) { const auto &extentChild = child->extentAndRes(); const double epsilon = (extentChild.resX + extentChild.resY) * REL_TOLERANCE_HGRIDSHIFT; if (isPointInExtent(longitude, lat, extentChild, epsilon)) { return child->gridAt(longitude, lat); } } return this; } // --------------------------------------------------------------------------- const HorizontalShiftGrid *HorizontalShiftGridSet::gridAt(double longitude, double lat) const { for (const auto &grid : m_grids) { if (grid->isNullGrid()) { return grid.get(); } const auto &extent = grid->extentAndRes(); const double epsilon = (extent.resX + extent.resY) * REL_TOLERANCE_HGRIDSHIFT; if (isPointInExtent(longitude, lat, extent, epsilon)) { return grid->gridAt(longitude, lat); } } return nullptr; } // --------------------------------------------------------------------------- void HorizontalShiftGridSet::reassign_context(PJ_CONTEXT *ctx) { for (const auto &grid : m_grids) { grid->reassign_context(ctx); } } #ifdef TIFF_ENABLED // --------------------------------------------------------------------------- class GTiffGenericGridShiftSet : public GenericShiftGridSet { std::unique_ptr m_GTiffDataset; GTiffGenericGridShiftSet(PJ_CONTEXT *ctx, std::unique_ptr &&fp) : m_GTiffDataset(new GTiffDataset(ctx, std::move(fp))) {} public: ~GTiffGenericGridShiftSet() override; static std::unique_ptr open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename); void reassign_context(PJ_CONTEXT *ctx) override { GenericShiftGridSet::reassign_context(ctx); if (m_GTiffDataset) { m_GTiffDataset->reassign_context(ctx); } } bool reopen(PJ_CONTEXT *ctx) override { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s has changed. Re-loading it", m_name.c_str()); m_grids.clear(); m_GTiffDataset.reset(); auto fp = FileManager::open_resource_file(ctx, m_name.c_str()); if (!fp) { return false; } auto newGS = open(ctx, std::move(fp), m_name); if (newGS) { m_grids = std::move(newGS->m_grids); m_GTiffDataset = std::move(newGS->m_GTiffDataset); } return !m_grids.empty(); } }; // --------------------------------------------------------------------------- class GTiffGenericGrid final : public GenericShiftGrid { friend void insertIntoHierarchy( PJ_CONTEXT *ctx, std::unique_ptr &&grid, const std::string &gridName, const std::string &parentName, std::vector> &topGrids, std::map &mapGrids); std::unique_ptr m_grid; const GenericShiftGrid *m_firstGrid = nullptr; mutable std::string m_type{}; mutable bool m_bTypeSet = false; public: GTiffGenericGrid(std::unique_ptr &&grid); ~GTiffGenericGrid() override; bool valueAt(int x, int y, int sample, float &out) const override; bool valuesAt(int x_start, int y_start, int x_count, int y_count, int sample_count, const int *sample_idx, float *out, bool &nodataFound) const override; int samplesPerPixel() const override { return m_grid->samplesPerPixel(); } std::string unit(int sample) const override { return metadataItem("UNITTYPE", sample); } std::string description(int sample) const override { return metadataItem("DESCRIPTION", sample); } const std::string &metadataItem(const std::string &key, int sample = -1) const override { const std::string &ret = m_grid->metadataItem(key, sample); if (ret.empty() && m_firstGrid) { return m_firstGrid->metadataItem(key, sample); } return ret; } const std::string &type() const override { if (!m_bTypeSet) { m_bTypeSet = true; m_type = metadataItem("TYPE"); } return m_type; } void setFirstGrid(const GenericShiftGrid *firstGrid) { m_firstGrid = firstGrid; } void insertGrid(PJ_CONTEXT *ctx, std::unique_ptr &&subgrid); void reassign_context(PJ_CONTEXT *ctx) override { m_grid->reassign_context(ctx); } bool hasChanged() const override { return m_grid->hasChanged(); } private: GTiffGenericGrid(const GTiffGenericGrid &) = delete; GTiffGenericGrid &operator=(const GTiffGenericGrid &) = delete; }; // --------------------------------------------------------------------------- GTiffGenericGridShiftSet::~GTiffGenericGridShiftSet() = default; // --------------------------------------------------------------------------- GTiffGenericGrid::GTiffGenericGrid(std::unique_ptr &&grid) : GenericShiftGrid(grid->name(), grid->width(), grid->height(), grid->extentAndRes()), m_grid(std::move(grid)) {} // --------------------------------------------------------------------------- GTiffGenericGrid::~GTiffGenericGrid() = default; // --------------------------------------------------------------------------- bool GTiffGenericGrid::valueAt(int x, int y, int sample, float &out) const { if (sample < 0 || static_cast(sample) >= m_grid->samplesPerPixel()) return false; return m_grid->valueAt(static_cast(sample), x, y, out); } // --------------------------------------------------------------------------- bool GTiffGenericGrid::valuesAt(int x_start, int y_start, int x_count, int y_count, int sample_count, const int *sample_idx, float *out, bool &nodataFound) const { return m_grid->valuesAt(x_start, y_start, x_count, y_count, sample_count, sample_idx, out, nodataFound); } // --------------------------------------------------------------------------- void GTiffGenericGrid::insertGrid(PJ_CONTEXT *ctx, std::unique_ptr &&subgrid) { bool gridInserted = false; const auto &extent = subgrid->extentAndRes(); for (const auto &candidateParent : m_children) { const auto &candidateParentExtent = candidateParent->extentAndRes(); if (candidateParentExtent.contains(extent)) { static_cast(candidateParent.get()) ->insertGrid(ctx, std::move(subgrid)); gridInserted = true; break; } else if (candidateParentExtent.intersects(extent)) { pj_log(ctx, PJ_LOG_DEBUG, "Partially intersecting grids found!"); } } if (!gridInserted) { m_children.emplace_back(std::move(subgrid)); } } #endif // TIFF_ENABLED // --------------------------------------------------------------------------- class NullGenericShiftGrid : public GenericShiftGrid { public: NullGenericShiftGrid() : GenericShiftGrid("null", 3, 3, globalExtent()) {} bool isNullGrid() const override { return true; } bool valueAt(int, int, int, float &out) const override; const std::string &type() const override { return emptyString; } int samplesPerPixel() const override { return 0; } std::string unit(int) const override { return std::string(); } std::string description(int) const override { return std::string(); } const std::string &metadataItem(const std::string &, int) const override { return emptyString; } void reassign_context(PJ_CONTEXT *) override {} bool hasChanged() const override { return false; } }; // --------------------------------------------------------------------------- bool NullGenericShiftGrid::valueAt(int, int, int, float &out) const { out = 0.0f; return true; } // --------------------------------------------------------------------------- #ifdef TIFF_ENABLED std::unique_ptr GTiffGenericGridShiftSet::open(PJ_CONTEXT *ctx, std::unique_ptr fp, const std::string &filename) { auto set = std::unique_ptr( new GTiffGenericGridShiftSet(ctx, std::move(fp))); set->m_name = filename; set->m_format = "gtiff"; if (!set->m_GTiffDataset->openTIFF(filename)) { return nullptr; } std::map mapGrids; for (int ifd = 0;; ++ifd) { auto grid = set->m_GTiffDataset->nextGrid(); if (!grid) { if (ifd == 0) { return nullptr; } break; } const auto subfileType = grid->subfileType(); if (subfileType != 0 && subfileType != FILETYPE_PAGE) { if (ifd == 0) { pj_log(ctx, PJ_LOG_ERROR, _("Invalid subfileType")); return nullptr; } else { pj_log(ctx, PJ_LOG_DEBUG, _("Ignoring IFD %d as it has a unsupported subfileType"), ifd); continue; } } const std::string &gridName = grid->metadataItem("grid_name"); const std::string &parentName = grid->metadataItem("parent_grid_name"); auto ggrid = std::make_unique(std::move(grid)); if (!set->m_grids.empty() && ggrid->metadataItem("TYPE").empty() && !set->m_grids[0]->metadataItem("TYPE").empty()) { ggrid->setFirstGrid(set->m_grids[0].get()); } insertIntoHierarchy(ctx, std::move(ggrid), gridName, parentName, set->m_grids, mapGrids); } return set; } #endif // TIFF_ENABLED // --------------------------------------------------------------------------- GenericShiftGrid::GenericShiftGrid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn) : Grid(nameIn, widthIn, heightIn, extentIn) {} // --------------------------------------------------------------------------- GenericShiftGrid::~GenericShiftGrid() = default; // --------------------------------------------------------------------------- bool GenericShiftGrid::valuesAt(int x_start, int y_start, int x_count, int y_count, int sample_count, const int *sample_idx, float *out, bool &nodataFound) const { nodataFound = false; for (int y = y_start; y < y_start + y_count; ++y) { for (int x = x_start; x < x_start + x_count; ++x) { for (int isample = 0; isample < sample_count; ++isample) { if (!valueAt(x, y, sample_idx[isample], *out)) return false; ++out; } } } return true; } // --------------------------------------------------------------------------- GenericShiftGridSet::GenericShiftGridSet() = default; // --------------------------------------------------------------------------- GenericShiftGridSet::~GenericShiftGridSet() = default; // --------------------------------------------------------------------------- std::unique_ptr GenericShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) { if (filename == "null") { auto set = std::unique_ptr(new GenericShiftGridSet()); set->m_name = filename; set->m_format = "null"; set->m_grids.push_back( std::unique_ptr(new NullGenericShiftGrid())); return set; } auto fp = FileManager::open_resource_file(ctx, filename.c_str()); if (!fp) { return nullptr; } /* -------------------------------------------------------------------- */ /* Load a header, to determine the file type. */ /* -------------------------------------------------------------------- */ unsigned char header[4]; size_t header_size = fp->read(header, sizeof(header)); if (header_size != sizeof(header)) { return nullptr; } fp->seek(0); if (IsTIFF(header_size, header)) { #ifdef TIFF_ENABLED const std::string actualName(fp->name()); auto set = std::unique_ptr( GTiffGenericGridShiftSet::open(ctx, std::move(fp), actualName)); if (!set) proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return set; #else pj_log(ctx, PJ_LOG_ERROR, _("TIFF grid, but TIFF support disabled in this build")); return nullptr; #endif } pj_log(ctx, PJ_LOG_ERROR, "Unrecognized generic grid format for filename '%s'", filename.c_str()); return nullptr; } // --------------------------------------------------------------------------- bool GenericShiftGridSet::reopen(PJ_CONTEXT *ctx) { pj_log(ctx, PJ_LOG_DEBUG, "Grid %s has changed. Re-loading it", m_name.c_str()); auto newGS = open(ctx, m_name); m_grids.clear(); if (newGS) { m_grids = std::move(newGS->m_grids); } return !m_grids.empty(); } // --------------------------------------------------------------------------- const GenericShiftGrid *GenericShiftGrid::gridAt(double x, double y) const { for (const auto &child : m_children) { const auto &extentChild = child->extentAndRes(); if (isPointInExtent(x, y, extentChild)) { return child->gridAt(x, y); } } return this; } // --------------------------------------------------------------------------- const GenericShiftGrid *GenericShiftGridSet::gridAt(double x, double y) const { for (const auto &grid : m_grids) { if (grid->isNullGrid()) { return grid.get(); } const auto &extent = grid->extentAndRes(); if (isPointInExtent(x, y, extent)) { return grid->gridAt(x, y); } } return nullptr; } // --------------------------------------------------------------------------- const GenericShiftGrid *GenericShiftGridSet::gridAt(const std::string &type, double x, double y) const { for (const auto &grid : m_grids) { if (grid->isNullGrid()) { return grid.get(); } if (grid->type() != type) { continue; } const auto &extent = grid->extentAndRes(); if (isPointInExtent(x, y, extent)) { return grid->gridAt(x, y); } } return nullptr; } // --------------------------------------------------------------------------- void GenericShiftGridSet::reassign_context(PJ_CONTEXT *ctx) { for (const auto &grid : m_grids) { grid->reassign_context(ctx); } } // --------------------------------------------------------------------------- ListOfGenericGrids pj_generic_grid_init(PJ *P, const char *gridkey) { std::string key("s"); key += gridkey; const char *gridnames = pj_param(P->ctx, P->params, key.c_str()).s; if (gridnames == nullptr) return {}; auto listOfGridNames = internal::split(std::string(gridnames), ','); ListOfGenericGrids grids; for (const auto &gridnameStr : listOfGridNames) { const char *gridname = gridnameStr.c_str(); bool canFail = false; if (gridname[0] == '@') { canFail = true; gridname++; } auto gridSet = GenericShiftGridSet::open(P->ctx, gridname); if (!gridSet) { if (!canFail) { if (proj_context_errno(P->ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) { proj_context_errno_set( P->ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } return {}; } proj_context_errno_set(P->ctx, 0); // don't treat as a persistent error } else { grids.emplace_back(std::move(gridSet)); } } return grids; } // --------------------------------------------------------------------------- static const HorizontalShiftGrid * findGrid(const ListOfHGrids &grids, const PJ_LP &input, HorizontalShiftGridSet *&gridSetOut) { for (const auto &gridset : grids) { auto grid = gridset->gridAt(input.lam, input.phi); if (grid) { gridSetOut = gridset.get(); return grid; } } return nullptr; } // --------------------------------------------------------------------------- static ListOfHGrids getListOfGridSets(PJ_CONTEXT *ctx, const char *grids) { ListOfHGrids list; auto listOfGrids = internal::split(std::string(grids), ','); for (const auto &grid : listOfGrids) { const char *gridname = grid.c_str(); bool canFail = false; if (gridname[0] == '@') { canFail = true; gridname++; } auto gridSet = HorizontalShiftGridSet::open(ctx, gridname); if (!gridSet) { if (!canFail) { if (proj_context_errno(ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) { proj_context_errno_set( ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } return {}; } proj_context_errno_set(ctx, 0); // don't treat as a persistent error } else { list.emplace_back(std::move(gridSet)); } } return list; } /**********************************************/ ListOfHGrids pj_hgrid_init(PJ *P, const char *gridkey) { /********************************************** Initizalize and populate list of horizontal grids. Takes a PJ-object and the plus-parameter name that is used in the proj-string to specify the grids to load, e.g. "+grids". The + should be left out here. Returns the number of loaded grids. ***********************************************/ std::string key("s"); key += gridkey; const char *grids = pj_param(P->ctx, P->params, key.c_str()).s; if (grids == nullptr) return {}; return getListOfGridSets(P->ctx, grids); } // --------------------------------------------------------------------------- typedef struct { int32_t lam, phi; } ILP; // Apply bilinear interpolation for horizontal shift grids static PJ_LP pj_hgrid_interpolate(PJ_LP t, const HorizontalShiftGrid *grid, bool compensateNTConvention) { PJ_LP val, frct; ILP indx; int in; const auto &extent = grid->extentAndRes(); t.lam /= extent.resX; indx.lam = std::isnan(t.lam) ? 0 : (int32_t)lround(floor(t.lam)); t.phi /= extent.resY; indx.phi = std::isnan(t.phi) ? 0 : (int32_t)lround(floor(t.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 > 1 - 10 * REL_TOLERANCE_HGRIDSHIFT) { ++indx.lam; frct.lam = 0.; } else return val; } else if ((in = indx.lam + 1) >= grid->width()) { if (in == grid->width() && frct.lam < 10 * REL_TOLERANCE_HGRIDSHIFT) { --indx.lam; frct.lam = 1.; } else return val; } if (indx.phi < 0) { if (indx.phi == -1 && frct.phi > 1 - 10 * REL_TOLERANCE_HGRIDSHIFT) { ++indx.phi; frct.phi = 0.; } else return val; } else if ((in = indx.phi + 1) >= grid->height()) { if (in == grid->height() && frct.phi < 10 * REL_TOLERANCE_HGRIDSHIFT) { --indx.phi; frct.phi = 1.; } else return val; } float f00Long = 0, f00Lat = 0; float f10Long = 0, f10Lat = 0; float f01Long = 0, f01Lat = 0; float f11Long = 0, f11Lat = 0; if (!grid->valueAt(indx.lam, indx.phi, compensateNTConvention, f00Long, f00Lat) || !grid->valueAt(indx.lam + 1, indx.phi, compensateNTConvention, f10Long, f10Lat) || !grid->valueAt(indx.lam, indx.phi + 1, compensateNTConvention, f01Long, f01Lat) || !grid->valueAt(indx.lam + 1, indx.phi + 1, compensateNTConvention, f11Long, f11Lat)) { return val; } double m10 = frct.lam; double m11 = m10; double m01 = 1. - frct.lam; double m00 = m01; m11 *= frct.phi; m01 *= frct.phi; frct.phi = 1. - frct.phi; m00 *= frct.phi; m10 *= frct.phi; val.lam = m00 * f00Long + m10 * f10Long + m01 * f01Long + m11 * f11Long; val.phi = m00 * f00Lat + m10 * f10Lat + m01 * f01Lat + m11 * f11Lat; return val; } // --------------------------------------------------------------------------- #define MAX_ITERATIONS 10 #define TOL 1e-12 static PJ_LP pj_hgrid_apply_internal(PJ_CONTEXT *ctx, PJ_LP in, PJ_DIRECTION direction, const HorizontalShiftGrid *grid, HorizontalShiftGridSet *gridset, const ListOfHGrids &grids, bool &shouldRetry) { PJ_LP t, tb, del, dif; int i = MAX_ITERATIONS; const double toltol = TOL * TOL; shouldRetry = false; if (in.lam == HUGE_VAL) return in; /* normalize input to ll origin */ tb = in; const auto *extent = &(grid->extentAndRes()); const double epsilon = (extent->resX + extent->resY) * REL_TOLERANCE_HGRIDSHIFT; tb.lam -= extent->west; if (tb.lam + epsilon < 0) tb.lam += 2 * M_PI; else if (tb.lam - epsilon > extent->east - extent->west) tb.lam -= 2 * M_PI; tb.phi -= extent->south; t = pj_hgrid_interpolate(tb, grid, true); if (grid->hasChanged()) { shouldRetry = gridset->reopen(ctx); return t; } if (t.lam == HUGE_VAL) return t; if (direction == PJ_FWD) { in.lam += t.lam; in.phi += t.phi; return in; } t.lam = tb.lam - t.lam; t.phi = tb.phi - t.phi; do { del = pj_hgrid_interpolate(t, grid, true); if (grid->hasChanged()) { shouldRetry = gridset->reopen(ctx); return t; } /* We can possibly go outside of the initial guessed grid, so try */ /* to fetch a new grid into which iterate... */ if (del.lam == HUGE_VAL) { PJ_LP lp; lp.lam = t.lam + extent->west; lp.phi = t.phi + extent->south; auto newGrid = findGrid(grids, lp, gridset); if (newGrid == nullptr || newGrid == grid || newGrid->isNullGrid()) break; pj_log(ctx, PJ_LOG_TRACE, "Switching from grid %s to grid %s", grid->name().c_str(), newGrid->name().c_str()); grid = newGrid; extent = &(grid->extentAndRes()); t.lam = lp.lam - extent->west; t.phi = lp.phi - extent->south; tb = in; tb.lam -= extent->west; if (tb.lam + epsilon < 0) tb.lam += 2 * M_PI; else if (tb.lam - epsilon > extent->east - extent->west) tb.lam -= 2 * M_PI; tb.phi -= extent->south; dif.lam = std::numeric_limits::max(); dif.phi = std::numeric_limits::max(); continue; } dif.lam = t.lam + del.lam - tb.lam; dif.phi = t.phi + del.phi - tb.phi; t.lam -= dif.lam; t.phi -= dif.phi; } while (--i && (dif.lam * dif.lam + dif.phi * dif.phi > toltol)); /* prob. slightly faster than hypot() */ if (i == 0) { pj_log(ctx, PJ_LOG_TRACE, "Inverse grid shift iterator failed to converge.\n"); proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); t.lam = t.phi = HUGE_VAL; return t; } /* and again: pj_log and ctx->errno */ if (del.lam == HUGE_VAL) { pj_log(ctx, PJ_LOG_TRACE, "Inverse grid shift iteration failed, presumably at " "grid edge.\nUsing first approximation.\n"); } in.lam = adjlon(t.lam + extent->west); in.phi = t.phi + extent->south; return in; } // --------------------------------------------------------------------------- PJ_LP pj_hgrid_apply(PJ_CONTEXT *ctx, const ListOfHGrids &grids, PJ_LP lp, PJ_DIRECTION direction) { PJ_LP out; out.lam = HUGE_VAL; out.phi = HUGE_VAL; while (true) { HorizontalShiftGridSet *gridset = nullptr; const auto grid = findGrid(grids, lp, gridset); if (!grid) { proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } if (grid->isNullGrid()) { return lp; } bool shouldRetry = false; out = pj_hgrid_apply_internal(ctx, lp, direction, grid, gridset, grids, shouldRetry); if (!shouldRetry) { break; } } if (out.lam == HUGE_VAL || out.phi == HUGE_VAL) proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } /********************************************/ /* proj_hgrid_value() */ /* */ /* Return coordinate offset in grid */ /********************************************/ PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp) { PJ_LP out = proj_coord_error().lp; HorizontalShiftGridSet *gridset = nullptr; const auto grid = findGrid(grids, lp, gridset); if (!grid) { proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } /* normalize input to ll origin */ const auto &extent = grid->extentAndRes(); if (!extent.isGeographic) { pj_log(P->ctx, PJ_LOG_ERROR, _("Can only handle grids referenced in a geographic CRS")); proj_context_errno_set(P->ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return out; } const double epsilon = (extent.resX + extent.resY) * REL_TOLERANCE_HGRIDSHIFT; lp.lam -= extent.west; if (lp.lam + epsilon < 0) lp.lam += 2 * M_PI; else if (lp.lam - epsilon > extent.east - extent.west) lp.lam -= 2 * M_PI; lp.phi -= extent.south; out = pj_hgrid_interpolate(lp, grid, false); if (grid->hasChanged()) { if (gridset->reopen(P->ctx)) { return pj_hgrid_value(P, grids, lp); } out.lam = HUGE_VAL; out.phi = HUGE_VAL; } if (out.lam == HUGE_VAL || out.phi == HUGE_VAL) { proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); } return out; } // --------------------------------------------------------------------------- static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids, const PJ_LP &input, const double vmultiplier) { /* do not deal with NaN coordinates */ /* cppcheck-suppress duplicateExpression */ if (std::isnan(input.phi) || std::isnan(input.lam)) { return HUGE_VAL; } VerticalShiftGridSet *curGridset = nullptr; const VerticalShiftGrid *grid = nullptr; for (const auto &gridset : grids) { grid = gridset->gridAt(input.lam, input.phi); if (grid) { curGridset = gridset.get(); break; } } if (!grid) { proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return HUGE_VAL; } if (grid->isNullGrid()) { return 0; } const auto &extent = grid->extentAndRes(); if (!extent.isGeographic) { pj_log(ctx, PJ_LOG_ERROR, _("Can only handle grids referenced in a geographic CRS")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return HUGE_VAL; } /* Interpolation of a location within the grid */ double grid_x = (input.lam - extent.west) * extent.invResX; if (input.lam < extent.west) { if (extent.fullWorldLongitude()) { // The first fmod goes to ]-lim, lim[ range // So we add lim again to be in ]0, 2*lim[ and fmod again grid_x = fmod(fmod(grid_x + grid->width(), grid->width()) + grid->width(), grid->width()); } else { grid_x = (input.lam + 2 * M_PI - extent.west) * extent.invResX; } } else if (input.lam > extent.east) { if (extent.fullWorldLongitude()) { // The first fmod goes to ]-lim, lim[ range // So we add lim again to be in ]0, 2*lim[ and fmod again grid_x = fmod(fmod(grid_x + grid->width(), grid->width()) + grid->width(), grid->width()); } else { grid_x = (input.lam - 2 * M_PI - extent.west) * extent.invResX; } } double grid_y = (input.phi - extent.south) * extent.invResY; int grid_ix = static_cast(lround(floor(grid_x))); if (!(grid_ix >= 0 && grid_ix < grid->width())) { // in the unlikely case we end up here... pj_log(ctx, PJ_LOG_ERROR, _("grid_ix not in grid")); proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return HUGE_VAL; } int grid_iy = static_cast(lround(floor(grid_y))); assert(grid_iy >= 0 && grid_iy < grid->height()); grid_x -= grid_ix; grid_y -= grid_iy; int grid_ix2 = grid_ix + 1; if (grid_ix2 >= grid->width()) { if (extent.fullWorldLongitude()) { grid_ix2 = 0; } else { grid_ix2 = grid->width() - 1; } } int grid_iy2 = grid_iy + 1; if (grid_iy2 >= grid->height()) grid_iy2 = grid->height() - 1; float value_a = 0; float value_b = 0; float value_c = 0; float value_d = 0; bool error = (!grid->valueAt(grid_ix, grid_iy, value_a) || !grid->valueAt(grid_ix2, grid_iy, value_b) || !grid->valueAt(grid_ix, grid_iy2, value_c) || !grid->valueAt(grid_ix2, grid_iy2, value_d)); if (grid->hasChanged()) { if (curGridset->reopen(ctx)) { return read_vgrid_value(ctx, grids, input, vmultiplier); } error = true; } if (error) { return HUGE_VAL; } double value = 0.0; const double grid_x_y = grid_x * grid_y; const bool a_valid = !grid->isNodata(value_a, vmultiplier); const bool b_valid = !grid->isNodata(value_b, vmultiplier); const bool c_valid = !grid->isNodata(value_c, vmultiplier); const bool d_valid = !grid->isNodata(value_d, vmultiplier); const int countValid = static_cast(a_valid) + static_cast(b_valid) + static_cast(c_valid) + static_cast(d_valid); if (countValid == 4) { { double weight = 1.0 - grid_x - grid_y + grid_x_y; value = value_a * weight; } { double weight = grid_x - grid_x_y; value += value_b * weight; } { double weight = grid_y - grid_x_y; value += value_c * weight; } { double weight = grid_x_y; value += value_d * weight; } } else if (countValid == 0) { proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA); value = HUGE_VAL; } else { double total_weight = 0.0; if (a_valid) { double weight = 1.0 - grid_x - grid_y + grid_x_y; value = value_a * weight; total_weight = weight; } if (b_valid) { double weight = grid_x - grid_x_y; value += value_b * weight; total_weight += weight; } if (c_valid) { double weight = grid_y - grid_x_y; value += value_c * weight; total_weight += weight; } if (d_valid) { double weight = grid_x_y; value += value_d * weight; total_weight += weight; } value /= total_weight; } return value * vmultiplier; } /**********************************************/ ListOfVGrids pj_vgrid_init(PJ *P, const char *gridkey) { /********************************************** Initizalize and populate gridlist. Takes a PJ-object and the plus-parameter name that is used in the proj-string to specify the grids to load, e.g. "+grids". The + should be left out here. Returns the number of loaded grids. ***********************************************/ std::string key("s"); key += gridkey; const char *gridnames = pj_param(P->ctx, P->params, key.c_str()).s; if (gridnames == nullptr) return {}; auto listOfGridNames = internal::split(std::string(gridnames), ','); ListOfVGrids grids; for (const auto &gridnameStr : listOfGridNames) { const char *gridname = gridnameStr.c_str(); bool canFail = false; if (gridname[0] == '@') { canFail = true; gridname++; } auto gridSet = VerticalShiftGridSet::open(P->ctx, gridname); if (!gridSet) { if (!canFail) { if (proj_context_errno(P->ctx) != PROJ_ERR_OTHER_NETWORK_ERROR) { proj_context_errno_set( P->ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } return {}; } proj_context_errno_set(P->ctx, 0); // don't treat as a persistent error } else { grids.emplace_back(std::move(gridSet)); } } return grids; } /***********************************************/ double pj_vgrid_value(PJ *P, const ListOfVGrids &grids, PJ_LP lp, double vmultiplier) { /*********************************************** Read grid value at position lp in grids loaded with proj_grid_init. Returns the grid value of the given coordinate. ************************************************/ double value; value = read_vgrid_value(P->ctx, grids, lp, vmultiplier); if (pj_log_active(P->ctx, PJ_LOG_TRACE)) { proj_log_trace(P, "proj_vgrid_value: (%f, %f) = %f", lp.lam * RAD_TO_DEG, lp.phi * RAD_TO_DEG, value); } return value; } // --------------------------------------------------------------------------- const GenericShiftGrid *pj_find_generic_grid(const ListOfGenericGrids &grids, const PJ_LP &input, GenericShiftGridSet *&gridSetOut) { for (const auto &gridset : grids) { auto grid = gridset->gridAt(input.lam, input.phi); if (grid) { gridSetOut = gridset.get(); return grid; } } return nullptr; } // --------------------------------------------------------------------------- // Used by +proj=deformation and +proj=xyzgridshift to do bilinear interpolation // on 3 sample values per node. bool pj_bilinear_interpolation_three_samples( PJ_CONTEXT *ctx, const GenericShiftGrid *grid, const PJ_LP &lp, int idx1, int idx2, int idx3, double &v1, double &v2, double &v3, bool &must_retry) { must_retry = false; if (grid->isNullGrid()) { v1 = 0.0; v2 = 0.0; v3 = 0.0; return true; } const auto &extent = grid->extentAndRes(); if (!extent.isGeographic) { pj_log(ctx, PJ_LOG_ERROR, "Can only handle grids referenced in a geographic CRS"); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); return false; } // From a input location lp, determine the grid cell into which it falls, // by identifying the lower-left x,y of it (ix, iy), and the upper-right // (ix2, iy2) double grid_x = (lp.lam - extent.west) * extent.invResX; // Special case for grids with world extent, and dealing with wrap-around if (lp.lam < extent.west) { grid_x = (lp.lam + 2 * M_PI - extent.west) * extent.invResX; } else if (lp.lam > extent.east) { grid_x = (lp.lam - 2 * M_PI - extent.west) * extent.invResX; } double grid_y = (lp.phi - extent.south) * extent.invResY; int ix = static_cast(grid_x); int iy = static_cast(grid_y); int ix2 = std::min(ix + 1, grid->width() - 1); int iy2 = std::min(iy + 1, grid->height() - 1); float dx1 = 0.0f, dy1 = 0.0f, dz1 = 0.0f; float dx2 = 0.0f, dy2 = 0.0f, dz2 = 0.0f; float dx3 = 0.0f, dy3 = 0.0f, dz3 = 0.0f; float dx4 = 0.0f, dy4 = 0.0f, dz4 = 0.0f; bool error = (!grid->valueAt(ix, iy, idx1, dx1) || !grid->valueAt(ix, iy, idx2, dy1) || !grid->valueAt(ix, iy, idx3, dz1) || !grid->valueAt(ix2, iy, idx1, dx2) || !grid->valueAt(ix2, iy, idx2, dy2) || !grid->valueAt(ix2, iy, idx3, dz2) || !grid->valueAt(ix, iy2, idx1, dx3) || !grid->valueAt(ix, iy2, idx2, dy3) || !grid->valueAt(ix, iy2, idx3, dz3) || !grid->valueAt(ix2, iy2, idx1, dx4) || !grid->valueAt(ix2, iy2, idx2, dy4) || !grid->valueAt(ix2, iy2, idx3, dz4)); if (grid->hasChanged()) { must_retry = true; return false; } if (error) { return false; } // Bilinear interpolation double frct_lam = grid_x - ix; double frct_phi = grid_y - iy; double m10 = frct_lam; double m11 = m10; double m01 = 1. - frct_lam; double m00 = m01; m11 *= frct_phi; m01 *= frct_phi; frct_phi = 1. - frct_phi; m00 *= frct_phi; m10 *= frct_phi; v1 = m00 * dx1 + m10 * dx2 + m01 * dx3 + m11 * dx4; v2 = m00 * dy1 + m10 * dy2 + m01 * dy3 + m11 * dy4; v3 = m00 * dz1 + m10 * dz2 + m01 * dz3 + m11 * dz4; return true; } NS_PROJ_END /*****************************************************************************/ PJ_GRID_INFO proj_grid_info(const char *gridname) { /****************************************************************************** Information about a named datum grid. Returns PJ_GRID_INFO struct. ******************************************************************************/ PJ_GRID_INFO grinfo; /*PJ_CONTEXT *ctx = proj_context_create(); */ PJ_CONTEXT *ctx = pj_get_default_ctx(); memset(&grinfo, 0, sizeof(PJ_GRID_INFO)); const auto fillGridInfo = [&grinfo, ctx, gridname](const NS_PROJ::Grid &grid, const std::string &format) { const auto &extent = grid.extentAndRes(); /* name of grid */ strncpy(grinfo.gridname, gridname, sizeof(grinfo.gridname) - 1); /* full path of grid */ if (!pj_find_file(ctx, gridname, grinfo.filename, sizeof(grinfo.filename) - 1)) { // Can happen when using a remote grid grinfo.filename[0] = 0; } /* grid format */ strncpy(grinfo.format, format.c_str(), sizeof(grinfo.format) - 1); /* grid size */ grinfo.n_lon = grid.width(); grinfo.n_lat = grid.height(); /* cell size */ grinfo.cs_lon = extent.resX; grinfo.cs_lat = extent.resY; /* bounds of grid */ grinfo.lowerleft.lam = extent.west; grinfo.lowerleft.phi = extent.south; grinfo.upperright.lam = extent.east; grinfo.upperright.phi = extent.north; }; { const auto gridSet = NS_PROJ::VerticalShiftGridSet::open(ctx, gridname); if (gridSet) { const auto &grids = gridSet->grids(); if (!grids.empty()) { const auto &grid = grids.front(); fillGridInfo(*grid, gridSet->format()); return grinfo; } } } { const auto gridSet = NS_PROJ::HorizontalShiftGridSet::open(ctx, gridname); if (gridSet) { const auto &grids = gridSet->grids(); if (!grids.empty()) { const auto &grid = grids.front(); fillGridInfo(*grid, gridSet->format()); return grinfo; } } } strcpy(grinfo.format, "missing"); return grinfo; } /*****************************************************************************/ PJ_INIT_INFO proj_init_info(const char *initname) { /****************************************************************************** Information about a named init file. Maximum length of initname is 64. Returns PJ_INIT_INFO struct. If the init file is not found all members of the return struct are set to the empty string. If the init file is found, but the metadata is missing, the value is set to "Unknown". ******************************************************************************/ int file_found; char param[80], key[74]; paralist *start, *next; PJ_INIT_INFO ininfo; PJ_CONTEXT *ctx = pj_get_default_ctx(); memset(&ininfo, 0, sizeof(PJ_INIT_INFO)); file_found = pj_find_file(ctx, initname, ininfo.filename, sizeof(ininfo.filename)); if (!file_found || strlen(initname) > 64) { if (strcmp(initname, "epsg") == 0 || strcmp(initname, "EPSG") == 0) { const char *val; proj_context_errno_set(ctx, 0); strncpy(ininfo.name, initname, sizeof(ininfo.name) - 1); strcpy(ininfo.origin, "EPSG"); val = proj_context_get_database_metadata(ctx, "EPSG.VERSION"); if (val) { strncpy(ininfo.version, val, sizeof(ininfo.version) - 1); } val = proj_context_get_database_metadata(ctx, "EPSG.DATE"); if (val) { strncpy(ininfo.lastupdate, val, sizeof(ininfo.lastupdate) - 1); } return ininfo; } if (strcmp(initname, "IGNF") == 0) { const char *val; proj_context_errno_set(ctx, 0); strncpy(ininfo.name, initname, sizeof(ininfo.name) - 1); strcpy(ininfo.origin, "IGNF"); val = proj_context_get_database_metadata(ctx, "IGNF.VERSION"); if (val) { strncpy(ininfo.version, val, sizeof(ininfo.version) - 1); } val = proj_context_get_database_metadata(ctx, "IGNF.DATE"); if (val) { strncpy(ininfo.lastupdate, val, sizeof(ininfo.lastupdate) - 1); } return ininfo; } return ininfo; } /* The initial memset (0) makes strncpy safe here */ strncpy(ininfo.name, initname, sizeof(ininfo.name) - 1); strcpy(ininfo.origin, "Unknown"); strcpy(ininfo.version, "Unknown"); strcpy(ininfo.lastupdate, "Unknown"); strncpy(key, initname, 64); /* make room for ":metadata\0" at the end */ key[64] = 0; memcpy(key + strlen(key), ":metadata", 9 + 1); strcpy(param, "+init="); /* The +strlen(param) avoids a cppcheck false positive warning */ strncat(param + strlen(param), key, sizeof(param) - 1 - strlen(param)); start = pj_mkparam(param); pj_expand_init(ctx, start); if (pj_param(ctx, start, "tversion").i) strncpy(ininfo.version, pj_param(ctx, start, "sversion").s, sizeof(ininfo.version) - 1); if (pj_param(ctx, start, "torigin").i) strncpy(ininfo.origin, pj_param(ctx, start, "sorigin").s, sizeof(ininfo.origin) - 1); if (pj_param(ctx, start, "tlastupdate").i) strncpy(ininfo.lastupdate, pj_param(ctx, start, "slastupdate").s, sizeof(ininfo.lastupdate) - 1); for (; start; start = next) { next = start->next; free(start); } return ininfo; } proj-9.6.0/src/grids.hpp000664 001754 001755 00000025326 14764566077 015041 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Grid management * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2019, 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. *****************************************************************************/ #ifndef GRIDS_HPP_INCLUDED #define GRIDS_HPP_INCLUDED #include #include #include "proj.h" #include "proj/util.hpp" NS_PROJ_START struct ExtentAndRes { bool isGeographic; // whether extent and resolutions are in a geographic or // projected CRS double west; // in radian for geographic, in CRS units otherwise double south; // in radian for geographic, in CRS units otherwise double east; // in radian for geographic, in CRS units otherwise double north; // in radian for geographic, in CRS units otherwise double resX; // in radian for geographic, in CRS units otherwise double resY; // in radian for geographic, in CRS units otherwise double invResX; // = 1 / resX; double invResY; // = 1 / resY; void computeInvRes(); bool fullWorldLongitude() const; bool contains(const ExtentAndRes &other) const; bool intersects(const ExtentAndRes &other) const; }; // --------------------------------------------------------------------------- class PROJ_GCC_DLL Grid { protected: friend class GTiffDataset; std::string m_name; int m_width; int m_height; ExtentAndRes m_extent; Grid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn); public: PROJ_FOR_TEST virtual ~Grid(); PROJ_FOR_TEST int width() const { return m_width; } PROJ_FOR_TEST int height() const { return m_height; } PROJ_FOR_TEST const ExtentAndRes &extentAndRes() const { return m_extent; } PROJ_FOR_TEST const std::string &name() const { return m_name; } virtual const std::string &metadataItem(const std::string &key, int sample = -1) const = 0; PROJ_FOR_TEST virtual bool isNullGrid() const { return false; } PROJ_FOR_TEST virtual bool hasChanged() const = 0; }; // --------------------------------------------------------------------------- class PROJ_GCC_DLL VerticalShiftGrid : public Grid { protected: std::vector> m_children{}; public: PROJ_FOR_TEST VerticalShiftGrid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn); PROJ_FOR_TEST ~VerticalShiftGrid() override; PROJ_FOR_TEST const VerticalShiftGrid *gridAt(double longitude, double lat) const; PROJ_FOR_TEST virtual bool isNodata(float /*val*/, double /* multiplier */) const = 0; // x = 0 is western-most column, y = 0 is southern-most line PROJ_FOR_TEST virtual bool valueAt(int x, int y, float &out) const = 0; PROJ_FOR_TEST virtual void reassign_context(PJ_CONTEXT *ctx) = 0; }; // --------------------------------------------------------------------------- class PROJ_GCC_DLL VerticalShiftGridSet { protected: std::string m_name{}; std::string m_format{}; std::vector> m_grids{}; VerticalShiftGridSet(); public: PROJ_FOR_TEST virtual ~VerticalShiftGridSet(); PROJ_FOR_TEST static std::unique_ptr open(PJ_CONTEXT *ctx, const std::string &filename); PROJ_FOR_TEST const std::string &name() const { return m_name; } PROJ_FOR_TEST const std::string &format() const { return m_format; } PROJ_FOR_TEST const std::vector> & grids() const { return m_grids; } PROJ_FOR_TEST const VerticalShiftGrid *gridAt(double longitude, double lat) const; PROJ_FOR_TEST virtual void reassign_context(PJ_CONTEXT *ctx); PROJ_FOR_TEST virtual bool reopen(PJ_CONTEXT *ctx); }; // --------------------------------------------------------------------------- class PROJ_GCC_DLL HorizontalShiftGrid : public Grid { protected: std::vector> m_children{}; public: PROJ_FOR_TEST HorizontalShiftGrid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn); PROJ_FOR_TEST ~HorizontalShiftGrid() override; PROJ_FOR_TEST const HorizontalShiftGrid *gridAt(double longitude, double lat) const; // x = 0 is western-most column, y = 0 is southern-most line PROJ_FOR_TEST virtual bool valueAt(int x, int y, bool compensateNTConvention, float &longShift, float &latShift) const = 0; PROJ_FOR_TEST virtual void reassign_context(PJ_CONTEXT *ctx) = 0; }; // --------------------------------------------------------------------------- class PROJ_GCC_DLL HorizontalShiftGridSet { protected: std::string m_name{}; std::string m_format{}; std::vector> m_grids{}; HorizontalShiftGridSet(); public: PROJ_FOR_TEST virtual ~HorizontalShiftGridSet(); PROJ_FOR_TEST static std::unique_ptr open(PJ_CONTEXT *ctx, const std::string &filename); PROJ_FOR_TEST const std::string &name() const { return m_name; } PROJ_FOR_TEST const std::string &format() const { return m_format; } PROJ_FOR_TEST const std::vector> & grids() const { return m_grids; } PROJ_FOR_TEST const HorizontalShiftGrid *gridAt(double longitude, double lat) const; PROJ_FOR_TEST virtual void reassign_context(PJ_CONTEXT *ctx); PROJ_FOR_TEST virtual bool reopen(PJ_CONTEXT *ctx); }; // --------------------------------------------------------------------------- class PROJ_GCC_DLL GenericShiftGrid : public Grid { protected: std::vector> m_children{}; public: PROJ_FOR_TEST GenericShiftGrid(const std::string &nameIn, int widthIn, int heightIn, const ExtentAndRes &extentIn); PROJ_FOR_TEST ~GenericShiftGrid() override; PROJ_FOR_TEST const GenericShiftGrid *gridAt(double x, double y) const; virtual const std::string &type() const = 0; PROJ_FOR_TEST virtual std::string unit(int sample) const = 0; PROJ_FOR_TEST virtual std::string description(int sample) const = 0; PROJ_FOR_TEST virtual int samplesPerPixel() const = 0; // x = 0 is western-most column, y = 0 is southern-most line PROJ_FOR_TEST virtual bool valueAt(int x, int y, int sample, float &out) const = 0; PROJ_FOR_TEST virtual bool valuesAt(int x_start, int y_start, int x_count, int y_count, int sample_count, const int *sample_idx, float *out, bool &nodataFound) const; PROJ_FOR_TEST virtual void reassign_context(PJ_CONTEXT *ctx) = 0; }; // --------------------------------------------------------------------------- class PROJ_GCC_DLL GenericShiftGridSet { protected: std::string m_name{}; std::string m_format{}; std::vector> m_grids{}; GenericShiftGridSet(); public: PROJ_FOR_TEST virtual ~GenericShiftGridSet(); PROJ_FOR_TEST static std::unique_ptr open(PJ_CONTEXT *ctx, const std::string &filename); PROJ_FOR_TEST const std::string &name() const { return m_name; } PROJ_FOR_TEST const std::string &format() const { return m_format; } PROJ_FOR_TEST const std::vector> & grids() const { return m_grids; } PROJ_FOR_TEST const GenericShiftGrid *gridAt(double x, double y) const; PROJ_FOR_TEST const GenericShiftGrid *gridAt(const std::string &type, double x, double y) const; PROJ_FOR_TEST virtual void reassign_context(PJ_CONTEXT *ctx); PROJ_FOR_TEST virtual bool reopen(PJ_CONTEXT *ctx); }; // --------------------------------------------------------------------------- typedef std::vector> ListOfHGrids; typedef std::vector> ListOfVGrids; typedef std::vector> ListOfGenericGrids; ListOfVGrids pj_vgrid_init(PJ *P, const char *grids); ListOfHGrids pj_hgrid_init(PJ *P, const char *grids); ListOfGenericGrids pj_generic_grid_init(PJ *P, const char *grids); PJ_LP pj_hgrid_value(PJ *P, const ListOfHGrids &grids, PJ_LP lp); double pj_vgrid_value(PJ *P, const ListOfVGrids &, PJ_LP lp, double vmultiplier); PJ_LP pj_hgrid_apply(PJ_CONTEXT *ctx, const ListOfHGrids &grids, PJ_LP lp, PJ_DIRECTION direction); const GenericShiftGrid *pj_find_generic_grid(const ListOfGenericGrids &grids, const PJ_LP &input, GenericShiftGridSet *&gridSetOut); bool pj_bilinear_interpolation_three_samples( PJ_CONTEXT *ctx, const GenericShiftGrid *grid, const PJ_LP &lp, int idx1, int idx2, int idx3, double &v1, double &v2, double &v3, bool &must_retry); NS_PROJ_END #endif // GRIDS_HPP_INCLUDED proj-9.6.0/src/info.cpp000664 001754 001755 00000017730 14764566077 014657 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: proj_info() and proj_pj_info() * * Author: Thomas Knudsen, thokn@sdfe.dk, 2016-06-09/2016-11-06 * ****************************************************************************** * Copyright (c) 2016, 2017 Thomas Knudsen/SDFE * * 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 FROM_PROJ_CPP #include "proj.h" #include "proj_internal.h" #include "filemanager.hpp" /*****************************************************************************/ static char *path_append(char *buf, const char *app, size_t *buf_size) { /****************************************************************************** Helper for proj_info() below. Append app to buf, separated by a semicolon. Also handle allocation of longer buffer if needed. Returns buffer and adjusts *buf_size through provided pointer arg. ******************************************************************************/ char *p; size_t len, applen = 0, buflen = 0; #ifdef _WIN32 const char *delim = ";"; #else const char *delim = ":"; #endif /* Nothing to do? */ if (nullptr == app) return buf; applen = strlen(app); if (0 == applen) return buf; /* Start checking whether buf is long enough */ if (nullptr != buf) buflen = strlen(buf); len = buflen + applen + strlen(delim) + 1; /* "pj_realloc", so to speak */ if (*buf_size < len) { p = static_cast(calloc(2 * len, sizeof(char))); if (nullptr == p) { free(buf); return nullptr; } *buf_size = 2 * len; if (buf != nullptr) strcpy(p, buf); free(buf); buf = p; } assert(buf); /* Only append a delimiter if something's already there */ if (0 != buflen) strcat(buf, delim); strcat(buf, app); return buf; } static const char *empty = {""}; static char version[64] = {""}; static PJ_INFO info = {0, 0, 0, nullptr, nullptr, nullptr, nullptr, 0}; /*****************************************************************************/ PJ_INFO proj_info(void) { /****************************************************************************** Basic info about the current instance of the PROJ.4 library. Returns PJ_INFO struct. ******************************************************************************/ size_t buf_size = 0; char *buf = nullptr; pj_acquire_lock(); info.major = PROJ_VERSION_MAJOR; info.minor = PROJ_VERSION_MINOR; info.patch = PROJ_VERSION_PATCH; /* A normal version string is xx.yy.zz which is 8 characters long and there is room for 64 bytes in the version string. */ snprintf(version, sizeof(version), "%d.%d.%d", info.major, info.minor, info.patch); info.version = version; info.release = pj_get_release(); /* build search path string */ auto ctx = pj_get_default_ctx(); if (ctx->search_paths.empty()) { const auto searchpaths = pj_get_default_searchpaths(ctx); for (const auto &path : searchpaths) { buf = path_append(buf, path.c_str(), &buf_size); } } else { for (const auto &path : ctx->search_paths) { buf = path_append(buf, path.c_str(), &buf_size); } } if (info.searchpath != empty) free(const_cast(info.searchpath)); info.searchpath = buf ? buf : empty; info.paths = ctx->c_compat_paths; info.path_count = static_cast(ctx->search_paths.size()); pj_release_lock(); return info; } /*****************************************************************************/ PJ_PROJ_INFO proj_pj_info(PJ *P) { /****************************************************************************** Basic info about a particular instance of a projection object. Returns PJ_PROJ_INFO struct. ******************************************************************************/ PJ_PROJ_INFO pjinfo; char *def; memset(&pjinfo, 0, sizeof(PJ_PROJ_INFO)); pjinfo.accuracy = -1.0; if (nullptr == P) return pjinfo; /* coordinate operation description */ if (!P->alternativeCoordinateOperations.empty()) { if (P->iCurCoordOp >= 0) { P = P->alternativeCoordinateOperations[P->iCurCoordOp].pj; } else { PJ *candidateOp = nullptr; // If there's just a single coordinate operation which is // instantiable, use it. for (const auto &op : P->alternativeCoordinateOperations) { if (op.isInstantiable()) { if (candidateOp == nullptr) { candidateOp = op.pj; } else { candidateOp = nullptr; break; } } } if (candidateOp) { P = candidateOp; } else { pjinfo.id = "unknown"; pjinfo.description = "unavailable until proj_trans is called"; pjinfo.definition = "unavailable until proj_trans is called"; return pjinfo; } } } /* projection id */ if (pj_param(P->ctx, P->params, "tproj").i) pjinfo.id = pj_param(P->ctx, P->params, "sproj").s; pjinfo.description = P->descr; if (P->iso_obj) { auto identifiedObj = dynamic_cast(P->iso_obj.get()); // cppcheck-suppress knownConditionTrueFalse if (identifiedObj) { pjinfo.description = identifiedObj->nameStr().c_str(); } } // accuracy if (P->iso_obj) { auto conv = dynamic_cast( P->iso_obj.get()); // cppcheck-suppress knownConditionTrueFalse if (conv) { pjinfo.accuracy = 0.0; } else { auto op = dynamic_cast( P->iso_obj.get()); // cppcheck-suppress knownConditionTrueFalse if (op) { const auto &accuracies = op->coordinateOperationAccuracies(); if (!accuracies.empty()) { try { pjinfo.accuracy = std::stod(accuracies[0]->value()); } catch (const std::exception &) { } } } } } /* projection definition */ if (P->def_full) def = P->def_full; else def = pj_get_def(P, 0); /* pj_get_def takes a non-const PJ pointer */ if (nullptr == def) pjinfo.definition = empty; else pjinfo.definition = pj_shrink(def); /* Make proj_destroy clean this up eventually */ P->def_full = def; pjinfo.has_inverse = pj_has_inverse(P); return pjinfo; } proj-9.6.0/src/init.cpp000664 001754 001755 00000066361 14764566077 014673 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ.4 * Purpose: Initialize projection object from string definition. Includes * pj_init(), and pj_init_plus() 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. *****************************************************************************/ #include #include #include #include #include #include "filemanager.hpp" #include "geodesic.h" #include "proj.h" #include "proj_internal.h" #include /**************************************************************************************/ static paralist *string_to_paralist(PJ_CONTEXT *ctx, char *definition) { /*************************************************************************************** Convert a string (presumably originating from get_init_string) to a paralist. ***************************************************************************************/ const char *c = definition; paralist *first = nullptr, *last = nullptr; while (*c) { /* Keep a handle to the start of the list, so we have something to * return */ auto param = pj_mkparam_ws(c, &c); if (nullptr == param) { free_params(ctx, first, PROJ_ERR_OTHER /*ENOMEM*/); return nullptr; } if (nullptr == last) { first = param; } else { last->next = param; } last = param; } return first; } /**************************************************************************************/ static char *get_init_string(PJ_CONTEXT *ctx, const char *name) { /*************************************************************************************** Read a section of an init file. Return its contents as a plain character string. It is the duty of the caller to free the memory allocated for the string. ***************************************************************************************/ #define MAX_LINE_LENGTH 1000 size_t current_buffer_size = 5 * (MAX_LINE_LENGTH + 1); char *fname, *section; const char *key; char *buffer = nullptr; size_t n; fname = static_cast(malloc(MAX_PATH_FILENAME + ID_TAG_MAX + 3)); if (nullptr == fname) { return nullptr; } /* Support "init=file:section", "+init=file:section", and "file:section" * format */ key = strstr(name, "init="); if (nullptr == key) key = name; else key += 5; if (MAX_PATH_FILENAME + ID_TAG_MAX + 2 < strlen(key)) { free(fname); return nullptr; } memmove(fname, key, strlen(key) + 1); /* Locate the name of the section we search for */ section = strrchr(fname, ':'); if (nullptr == section) { pj_log(ctx, PJ_LOG_ERROR, _("Missing colon in +init")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); free(fname); return nullptr; } *section = 0; section++; n = strlen(section); pj_log(ctx, PJ_LOG_TRACE, "get_init_string: searching for section [%s] in init file [%s]", section, fname); auto file = NS_PROJ::FileManager::open_resource_file(ctx, fname); if (nullptr == file) { pj_log(ctx, PJ_LOG_ERROR, _("Cannot open %s"), fname); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); free(fname); return nullptr; } /* Search for section in init file */ std::string line; for (;;) { bool eofReached = false; bool maxLenReached = false; line = file->read_line(MAX_LINE_LENGTH, maxLenReached, eofReached); /* End of file? */ if (maxLenReached || eofReached) { pj_log(ctx, PJ_LOG_ERROR, _("Invalid content for %s"), fname); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); free(fname); return nullptr; } /* At start of right section? */ pj_chomp(&line[0]); if ('<' != line[0]) continue; if (strlen(line.c_str()) < n + 2) continue; if (line[n + 1] != '>') continue; if (0 == strncmp(line.data() + 1, section, n)) break; } /* We're at the first line of the right section - copy line to buffer */ buffer = static_cast(malloc(current_buffer_size)); if (nullptr == buffer) { free(fname); return nullptr; } /* Skip the "
" indicator, and copy the rest of the line over */ strcpy(buffer, line.data() + strlen(section) + 2); /* Copy the remaining lines of the section to buffer */ for (;;) { char *end_i_cator; size_t next_length, buffer_length; /* Did the section end somewhere in the most recently read line? */ end_i_cator = strchr(buffer, '<'); if (end_i_cator) { *end_i_cator = 0; break; } bool eofReached = false; bool maxLenReached = false; line = file->read_line(MAX_LINE_LENGTH, maxLenReached, eofReached); /* End of file? - done! */ if (maxLenReached || eofReached) break; /* Otherwise, handle the line. It MAY be the start of the next section, */ /* but that will be handled at the start of next trip through the loop */ buffer_length = strlen(buffer); pj_chomp(&line[0]); /* Remove '#' style comments */ next_length = strlen(line.data()) + buffer_length + 2; if (next_length > current_buffer_size) { char *b = static_cast(malloc(2 * current_buffer_size)); if (nullptr == b) { free(buffer); buffer = nullptr; break; } strcpy(b, buffer); current_buffer_size *= 2; free(buffer); buffer = b; } buffer[buffer_length] = ' '; strcpy(buffer + buffer_length + 1, line.data()); } free(fname); if (nullptr == buffer) return nullptr; pj_shrink(buffer); pj_log(ctx, PJ_LOG_TRACE, "key=%s, value: [%s]", key, buffer); return buffer; } /************************************************************************/ static paralist *get_init(PJ_CONTEXT *ctx, const char *key, int allow_init_epsg) { /************************************************************************* Expand key from buffer or (if not in buffer) from init file *************************************************************************/ const char *xkey; char *definition = nullptr; paralist *init_items = nullptr; if (!ctx) { ctx = pj_get_default_ctx(); } /* support "init=file:section", "+init=file:section", and "file:section" * format */ xkey = strstr(key, "init="); if (nullptr == xkey) xkey = key; else xkey += 5; pj_log(ctx, PJ_LOG_TRACE, "get_init: searching cache for key: [%s]", xkey); /* Is file/key pair already in cache? */ init_items = pj_search_initcache(xkey); if (init_items) return init_items; if ((strncmp(xkey, "epsg:", 5) == 0 || strncmp(xkey, "IGNF:", 5) == 0)) { char unused[256]; char initname[5]; int exists; strncpy(initname, xkey, 4); initname[4] = 0; if (strncmp(xkey, "epsg:", 5) == 0) { exists = ctx->epsg_file_exists; if (exists < 0) { exists = pj_find_file(ctx, initname, unused, sizeof(unused)); ctx->epsg_file_exists = exists; } } else { exists = pj_find_file(ctx, initname, unused, sizeof(unused)); } if (!exists) { char szInitStr[7 + 64]; PJ *src; const char *proj_string; proj_context_errno_set(ctx, 0); if (!allow_init_epsg) { pj_log(ctx, PJ_LOG_TRACE, "%s expansion disallowed", xkey); return nullptr; } if (strlen(xkey) > 64) { return nullptr; } strcpy(szInitStr, "+init="); strcat(szInitStr, xkey); auto old_proj4_init_rules = ctx->use_proj4_init_rules; ctx->use_proj4_init_rules = true; src = proj_create(ctx, szInitStr); ctx->use_proj4_init_rules = old_proj4_init_rules; if (!src) { return nullptr; } proj_string = proj_as_proj_string(ctx, src, PJ_PROJ_4, nullptr); if (!proj_string) { proj_destroy(src); return nullptr; } definition = (char *)calloc(1, strlen(proj_string) + 1); if (definition) { strcpy(definition, proj_string); } proj_destroy(src); } } if (!definition) { /* If not, we must read it from file */ pj_log(ctx, PJ_LOG_TRACE, "get_init: searching on in init files for [%s]", xkey); definition = get_init_string(ctx, xkey); } if (nullptr == definition) return nullptr; init_items = string_to_paralist(ctx, definition); if (init_items) pj_log(ctx, PJ_LOG_TRACE, "get_init: got [%s], paralist[0,1]: [%s,%s]", definition, init_items->param, init_items->next ? init_items->next->param : "(empty)"); free(definition); if (nullptr == init_items) return nullptr; /* We found it in file - now insert into the cache, before returning */ pj_insert_initcache(xkey, init_items); return init_items; } static void append_default_ellipsoid_to_paralist(paralist *start) { if (nullptr == start) return; /* Set defaults, unless inhibited (either explicitly through a "no_defs" * token */ /* or implicitly, because we are initializing a pipeline) */ if (pj_param_exists(start, "no_defs")) return; auto proj = pj_param_exists(start, "proj"); if (nullptr == proj) return; if (strlen(proj->param) < 6) return; if (0 == strcmp("pipeline", proj->param + 5)) return; /* Don't default ellipse if datum, ellps or any ellipsoid information is set */ if (pj_param_exists(start, "datum")) return; if (pj_param_exists(start, "ellps")) return; if (pj_param_exists(start, "a")) return; if (pj_param_exists(start, "b")) return; if (pj_param_exists(start, "rf")) return; if (pj_param_exists(start, "f")) return; if (pj_param_exists(start, "e")) return; if (pj_param_exists(start, "es")) return; /* Locate end of start-list */ paralist *last = nullptr; for (last = start; last->next; last = last->next) ; /* If we're here, it's OK to append the current default item */ last->next = pj_mkparam("ellps=GRS80"); } /*****************************************************************************/ static paralist *pj_expand_init_internal(PJ_CONTEXT *ctx, paralist *init, int allow_init_epsg) { /****************************************************************************** Append expansion of to the paralist . The expansion is appended, rather than inserted at 's place, since may contain overrides to the expansion. These must take precedence, and hence come first in the expanded list. Consider e.g. the key 'foo:bar' which (hypothetically) expands to 'proj=utm zone=32 ellps=GRS80', i.e. a UTM projection on the GRS80 ellipsoid. The expression 'init=foo:bar ellps=intl' will then expand to: 'init=foo:bar ellps=intl proj=utm zone=32 ellps=GRS80', where 'ellps=intl' precedes 'ellps=GRS80', and hence takes precedence, turning the expansion into an UTM projection on the Hayford ellipsoid. Note that 'init=foo:bar' stays in the list. It is ignored after expansion. ******************************************************************************/ paralist *last; paralist *expn; /* Nowhere to start? */ if (nullptr == init) return nullptr; expn = get_init(ctx, init->param, allow_init_epsg); /* Nothing in expansion? */ if (nullptr == expn) return nullptr; /* Locate the end of the list */ for (last = init; last && last->next; last = last->next) ; /* Then append and return */ last->next = expn; return init; } paralist *pj_expand_init(PJ_CONTEXT *ctx, paralist *init) { return pj_expand_init_internal(ctx, init, TRUE); } /************************************************************************/ /* 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. */ /************************************************************************/ static PJ_CONSTRUCTOR locate_constructor(const char *name) { int i; const char *s; const PJ_OPERATIONS *operations; operations = proj_list_operations(); for (i = 0; (s = operations[i].id) && strcmp(name, s); ++i) ; if (nullptr == s) return nullptr; return (PJ_CONSTRUCTOR)operations[i].proj; } PJ *pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int allow_init_epsg) { const char *s; char *name; PJ_CONSTRUCTOR proj; paralist *curr, *init, *start; int i; int err; PJ *PIN = nullptr; int n_pipelines = 0; int n_inits = 0; const PJ_UNITS *units; const PJ_PRIME_MERIDIANS *prime_meridians; if (nullptr == ctx) ctx = pj_get_default_ctx(); ctx->last_errno = 0; if (argc <= 0) { pj_log(ctx, PJ_LOG_ERROR, _("No arguments")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_MISSING_ARG); return nullptr; } /* count occurrences of pipelines and inits */ for (i = 0; i < argc; ++i) { if (!strcmp(argv[i], "+proj=pipeline") || !strcmp(argv[i], "proj=pipeline")) n_pipelines++; if (!strncmp(argv[i], "+init=", 6) || !strncmp(argv[i], "init=", 5)) n_inits++; } /* can't have nested pipelines directly */ if (n_pipelines > 1) { pj_log(ctx, PJ_LOG_ERROR, _("Nested pipelines are not supported")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); return nullptr; } /* don't allow more than one +init in non-pipeline operations */ if (n_pipelines == 0 && n_inits > 1) { pj_log(ctx, PJ_LOG_ERROR, _("Too many inits")); proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); return nullptr; } /* put arguments into internal linked list */ start = curr = pj_mkparam(argv[0]); if (!curr) { free_params(ctx, start, PROJ_ERR_OTHER /*ENOMEM*/); return nullptr; } for (i = 1; i < argc; ++i) { curr->next = pj_mkparam(argv[i]); if (!curr->next) { free_params(ctx, start, PROJ_ERR_OTHER /*ENOMEM*/); return nullptr; } curr = curr->next; } /* Only expand '+init's in non-pipeline operations. '+init's in pipelines * are */ /* expanded in the individual pipeline steps during pipeline initialization. */ /* Potentially this leads to many nested pipelines, which shouldn't be a */ /* problem when '+init's are expanded as late as possible. */ init = pj_param_exists(start, "init"); if (init && n_pipelines == 0) { init = pj_expand_init_internal(ctx, init, allow_init_epsg); if (!init) { free_params(ctx, start, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); return nullptr; } } if (ctx->last_errno) { free_params(ctx, start, ctx->last_errno); return nullptr; } /* Find projection selection */ curr = pj_param_exists(start, "proj"); if (nullptr == curr) { pj_log(ctx, PJ_LOG_ERROR, _("Missing proj")); free_params(ctx, start, PROJ_ERR_INVALID_OP_MISSING_ARG); return nullptr; } name = curr->param; if (strlen(name) < 6) { pj_log(ctx, PJ_LOG_ERROR, _("Invalid value for proj")); free_params(ctx, start, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return nullptr; } name += 5; proj = locate_constructor(name); if (nullptr == proj) { pj_log(ctx, PJ_LOG_ERROR, _("Unknown projection")); free_params(ctx, start, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return nullptr; } append_default_ellipsoid_to_paralist(start); /* Allocate projection structure */ PIN = proj(nullptr); if (nullptr == PIN) { free_params(ctx, start, PROJ_ERR_OTHER /*ENOMEM*/); return nullptr; } 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"); /* Set datum parameters. Similarly to +init parameters we want to expand */ /* +datum parameters as late as possible when dealing with pipelines. */ /* otherwise only the first occurrence of +datum will be expanded and that */ if (n_pipelines == 0) { if (pj_datum_set(ctx, start, PIN)) return pj_default_destructor(PIN, proj_errno(PIN)); } err = pj_ellipsoid(PIN); if (err) { /* Didn't get an ellps, but doesn't need one: Get a free WGS84 */ if (PIN->need_ellps) { pj_log(ctx, PJ_LOG_ERROR, _("pj_init_ctx: Must specify ellipsoid or sphere")); return pj_default_destructor(PIN, proj_errno(PIN)); } else { if (PIN->a == 0) proj_errno_reset(PIN); PIN->f = 1.0 / 298.257223563; PIN->a = 6378137.0; PIN->es = PIN->f * (2 - PIN->f); } } PIN->a_orig = PIN->a; PIN->es_orig = PIN->es; if (pj_calc_ellipsoid_params(PIN, PIN->a, PIN->es)) return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); /* 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 != 0.0 && pj_param(ctx, start, "bgeoc").i); /* Over-ranging flag */ PIN->over = pj_param(ctx, start, "bover").i; if (ctx->forceOver) { PIN->over = ctx->forceOver; } /* 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; /* Don't accept excessive values otherwise we might perform badly */ /* when correcting longitudes around it */ /* The test is written this way to error on long_wrap_center "=" NaN */ if (!(fabs(PIN->long_wrap_center) < 10 * M_TWOPI)) { proj_log_error(PIN, _("Invalid value for lon_wrap")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } /* Axis orientation */ if ((pj_param(ctx, start, "saxis").s) != nullptr) { const char *axis_legal = "ewnsud"; const char *axis_arg = pj_param(ctx, start, "saxis").s; if (strlen(axis_arg) != 3) { proj_log_error(PIN, _("Invalid value for axis")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (strchr(axis_legal, axis_arg[0]) == nullptr || strchr(axis_legal, axis_arg[1]) == nullptr || strchr(axis_legal, axis_arg[2]) == nullptr) { proj_log_error(PIN, _("Invalid value for axis")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* TODO: it would be nice to validate we don't have on axis repeated */ strcpy(PIN->axis, axis_arg); } /* Central meridian */ PIN->lam0 = pj_param(ctx, start, "rlon_0").f; /* Central latitude */ PIN->phi0 = pj_param(ctx, start, "rlat_0").f; if (fabs(PIN->phi0) > M_HALFPI) { proj_log_error(PIN, _("Invalid value for lat_0: |lat_0| should be <= 90°")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* False easting and northing */ PIN->x0 = pj_param(ctx, start, "dx_0").f; PIN->y0 = pj_param(ctx, start, "dy_0").f; PIN->z0 = pj_param(ctx, start, "dz_0").f; PIN->t0 = pj_param(ctx, start, "dt_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.) { proj_log_error(PIN, _("Invalid value for k/k_0: it should be > 0")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* Set units */ units = pj_list_linear_units(); s = nullptr; if ((name = pj_param(ctx, start, "sunits").s) != nullptr) { for (i = 0; (s = units[i].id) && strcmp(name, s); ++i) ; if (!s) { proj_log_error(PIN, _("Invalid value for units")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } s = units[i].to_meter; } if (s || (s = pj_param(ctx, start, "sto_meter").s)) { char *end_ptr = const_cast(s); PIN->to_meter = pj_strtod(s, &end_ptr); s = end_ptr; if (*s == '/') { /* ratio number */ ++s; double denom = pj_strtod(s, nullptr); if (denom == 0.0) { proj_log_error(PIN, _("Invalid value for to_meter donominator")); return pj_default_destructor( PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } PIN->to_meter /= denom; } if (PIN->to_meter <= 0.0) { proj_log_error(PIN, _("Invalid value for to_meter")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } PIN->fr_meter = 1 / PIN->to_meter; } else PIN->to_meter = PIN->fr_meter = 1.; /* Set vertical units */ s = nullptr; if ((name = pj_param(ctx, start, "svunits").s) != nullptr) { for (i = 0; (s = units[i].id) && strcmp(name, s); ++i) ; if (!s) { proj_log_error(PIN, _("Invalid value for vunits")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } s = units[i].to_meter; } if (s || (s = pj_param(ctx, start, "svto_meter").s)) { char *end_ptr = const_cast(s); PIN->vto_meter = pj_strtod(s, &end_ptr); s = end_ptr; if (*s == '/') { /* ratio number */ ++s; double denom = pj_strtod(s, nullptr); if (denom == 0.0) { proj_log_error(PIN, _("Invalid value for vto_meter donominator")); return pj_default_destructor( PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } PIN->vto_meter /= denom; } if (PIN->vto_meter <= 0.0) { proj_log_error(PIN, _("Invalid value for vto_meter")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } PIN->vfr_meter = 1. / PIN->vto_meter; } else { PIN->vto_meter = PIN->to_meter; PIN->vfr_meter = PIN->fr_meter; } /* Prime meridian */ prime_meridians = proj_list_prime_meridians(); s = nullptr; if ((name = pj_param(ctx, start, "spm").s) != nullptr) { const char *value = nullptr; char *next_str = nullptr; for (i = 0; prime_meridians[i].id != nullptr; ++i) { if (strcmp(name, prime_meridians[i].id) == 0) { value = prime_meridians[i].defn; break; } } if (value == nullptr && (dmstor_ctx(ctx, name, &next_str) != 0.0 || *name == '0') && *next_str == '\0') value = name; if (!value) { proj_log_error(PIN, _("Invalid value for pm")); return pj_default_destructor(PIN, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } PIN->from_greenwich = dmstor_ctx(ctx, value, nullptr); } else PIN->from_greenwich = 0.0; /* Private object for the geodesic functions */ PIN->geod = static_cast( calloc(1, sizeof(struct geod_geodesic))); if (nullptr == PIN->geod) return pj_default_destructor(PIN, PROJ_ERR_OTHER /*ENOMEM*/); geod_init(PIN->geod, PIN->a, PIN->f); /* Projection specific initialization */ err = proj_errno_reset(PIN); PIN = proj(PIN); if (proj_errno(PIN)) { proj_destroy(PIN); return nullptr; } proj_errno_restore(PIN, err); return PIN; } proj-9.6.0/src/initcache.cpp000664 001754 001755 00000013561 14764566077 015651 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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 #include "proj.h" #include "proj_internal.h" static int cache_count = 0; static int cache_alloc = 0; static char **cache_key = nullptr; static paralist **cache_paralist = nullptr; /************************************************************************/ /* pj_clone_paralist() */ /* */ /* Allocate a copy of a parameter list. */ /************************************************************************/ paralist *pj_clone_paralist(const paralist *list) { paralist *list_copy = nullptr, *next_copy = nullptr; for (; list != nullptr; list = list->next) { paralist *newitem = (paralist *)malloc(sizeof(paralist) + strlen(list->param)); assert(newitem); newitem->used = 0; newitem->next = nullptr; strcpy(newitem->param, list->param); if (next_copy) next_copy->next = newitem; else list_copy = 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]; free(cache_key[i]); /* free parameter list elements */ for (; t != nullptr; t = n) { n = t->next; free(t); } } free(cache_key); free(cache_paralist); cache_count = 0; cache_alloc = 0; cache_key = nullptr; cache_paralist = nullptr; 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 = nullptr; pj_acquire_lock(); for (i = 0; result == nullptr && 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 **)malloc(sizeof(char *) * cache_alloc); assert(cache_key_new); if (cache_key && cache_count) { memcpy(cache_key_new, cache_key, sizeof(char *) * cache_count); } free(cache_key); cache_key = cache_key_new; cache_paralist_new = (paralist **)malloc(sizeof(paralist *) * cache_alloc); assert(cache_paralist_new); if (cache_paralist && cache_count) { memcpy(cache_paralist_new, cache_paralist, sizeof(paralist *) * cache_count); } free(cache_paralist); cache_paralist = cache_paralist_new; } /* ** Duplicate the filekey and paralist, and insert in cache. */ cache_key[cache_count] = (char *)malloc(strlen(filekey) + 1); assert(cache_key[cache_count]); strcpy(cache_key[cache_count], filekey); cache_paralist[cache_count] = pj_clone_paralist(list); cache_count++; pj_release_lock(); } proj-9.6.0/src/internal.cpp000664 001754 001755 00000033272 14764566077 015537 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ.4 * Purpose: This is primarily material originating from pj_obs_api.c * (now proj_4D_api.c), that does not fit into the API * category. Hence this pile of tubings and fittings for * PROJ.4 internal plumbing. * * Author: Thomas Knudsen, thokn@sdfe.dk, 2017-07-05 * ****************************************************************************** * Copyright (c) 2016, 2017, 2018, Thomas Knudsen/SDFE * * 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 FROM_PROJ_CPP #include #include #include #include #include #include #include #include "geodesic.h" #include "proj_internal.h" #include "proj/internal/internal.hpp" using namespace NS_PROJ::internal; enum pj_io_units pj_left(PJ *P) { enum pj_io_units u = P->inverted ? P->right : P->left; if (u == PJ_IO_UNITS_CLASSIC) return PJ_IO_UNITS_PROJECTED; return u; } enum pj_io_units pj_right(PJ *P) { enum pj_io_units u = P->inverted ? P->left : P->right; if (u == PJ_IO_UNITS_CLASSIC) return PJ_IO_UNITS_PROJECTED; return u; } /* Work around non-constness of MSVC HUGE_VAL by providing functions rather than * constants */ PJ_COORD proj_coord_error(void) { PJ_COORD c; c.v[0] = c.v[1] = c.v[2] = c.v[3] = HUGE_VAL; return c; } /**************************************************************************************/ PJ_COORD pj_approx_2D_trans(PJ *P, PJ_DIRECTION direction, PJ_COORD coo) { /*************************************************************************************** Behave mostly as proj_trans, but attempt to use 2D interfaces only. Used in gie.c, to enforce testing 2D code, and by PJ_pipeline.c to implement chained calls starting out with a call to its 2D interface. ***************************************************************************************/ if (nullptr == P) return coo; if (P->inverted) direction = static_cast(-direction); switch (direction) { case PJ_FWD: { const auto xy = pj_fwd(coo.lp, P); coo.xy = xy; return coo; } case PJ_INV: { const auto lp = pj_inv(coo.xy, P); coo.lp = lp; return coo; } case PJ_IDENT: break; } return coo; } /**************************************************************************************/ PJ_COORD pj_approx_3D_trans(PJ *P, PJ_DIRECTION direction, PJ_COORD coo) { /*************************************************************************************** Companion to pj_approx_2D_trans. Behave mostly as proj_trans, but attempt to use 3D interfaces only. Used in gie.c, to enforce testing 3D code, and by PJ_pipeline.c to implement chained calls starting out with a call to its 3D interface. ***************************************************************************************/ if (nullptr == P) return coo; if (P->inverted) direction = static_cast(-direction); switch (direction) { case PJ_FWD: { const auto xyz = pj_fwd3d(coo.lpz, P); coo.xyz = xyz; return coo; } case PJ_INV: { const auto lpz = pj_inv3d(coo.xyz, P); coo.lpz = lpz; return coo; } case PJ_IDENT: break; } return coo; } /**************************************************************************************/ int pj_has_inverse(PJ *P) { /*************************************************************************************** Check if a a PJ has an inverse. ***************************************************************************************/ return ((P->inverted && (P->fwd || P->fwd3d || P->fwd4d)) || (P->inv || P->inv3d || P->inv4d)); } /* Move P to a new context - or to the default context if 0 is specified */ void proj_context_set(PJ *P, PJ_CONTEXT *ctx) { if (nullptr == ctx) ctx = pj_get_default_ctx(); proj_assign_context(P, ctx); } void proj_context_inherit(PJ *parent, PJ *child) { if (nullptr == parent) proj_assign_context(child, pj_get_default_ctx()); else proj_assign_context(child, pj_get_ctx(parent)); } /*****************************************************************************/ char *pj_chomp(char *c) { /****************************************************************************** Strip pre- and postfix whitespace. Inline comments (indicated by '#') are considered whitespace. ******************************************************************************/ size_t i, n; char *comment; char *start = c; if (nullptr == c) return nullptr; comment = strchr(c, '#'); if (comment) *comment = 0; n = strlen(c); if (0 == n) return c; /* Eliminate postfix whitespace */ for (i = n - 1; (i > 0) && (isspace(c[i]) || ';' == c[i]); i--) c[i] = 0; /* Find start of non-whitespace */ while (0 != *start && (';' == *start || isspace(*start))) start++; n = strlen(start); if (0 == n) { c[0] = 0; return c; } memmove(c, start, n + 1); return c; } /*****************************************************************************/ char *pj_shrink(char *c) { /****************************************************************************** Collapse repeated whitespace. Remove '+' and ';'. Make ',' and '=' greedy, consuming their surrounding whitespace. ******************************************************************************/ size_t i, j, n; /* Flag showing that a whitespace (ws) has been written after last non-ws */ bool ws = false; if (nullptr == c) return nullptr; pj_chomp(c); n = strlen(c); if (n == 0) return c; /* First collapse repeated whitespace (including +/;) */ i = 0; bool in_string = false; for (j = 0; j < n; j++) { if (in_string) { if (c[j] == '"' && c[j + 1] == '"') { c[i++] = c[j]; j++; } else if (c[j] == '"') { in_string = false; } c[i++] = c[j]; continue; } /* Eliminate prefix '+', only if preceded by whitespace */ /* (i.e. keep it in 1.23e+08) */ if ((i > 0) && ('+' == c[j]) && ws) c[j] = ' '; if ((i == 0) && ('+' == c[j])) c[j] = ' '; // Detect a string beginning after '=' if (c[j] == '"' && i > 0 && c[i - 1] == '=') { in_string = true; ws = false; c[i++] = c[j]; continue; } if (isspace(c[j]) || ';' == c[j]) { if (false == ws && (i > 0)) c[i++] = ' '; ws = true; continue; } else { ws = false; c[i++] = c[j]; } } c[i] = 0; n = strlen(c); /* Then make ',' and '=' greedy */ i = 0; for (j = 0; j < n; j++) { if (i == 0) { c[i++] = c[j]; continue; } /* Skip space before '='/',' */ if ('=' == c[j] || ',' == c[j]) { if (c[i - 1] == ' ') c[i - 1] = c[j]; else c[i++] = c[j]; continue; } if (' ' == c[j] && ('=' == c[i - 1] || ',' == c[i - 1])) continue; c[i++] = c[j]; } c[i] = 0; return c; } /*****************************************************************************/ size_t pj_trim_argc(char *args) { /****************************************************************************** Trim all unnecessary whitespace (and non-essential syntactic tokens) from the argument string, args, and count its number of elements. ******************************************************************************/ size_t i, m, n; pj_shrink(args); n = strlen(args); if (n == 0) return 0; bool in_string = false; for (i = m = 0; i < n; i++) { if (in_string) { if (args[i] == '"' && args[i + 1] == '"') { i++; } else if (args[i] == '"') { in_string = false; } } else if (args[i] == '=' && args[i + 1] == '"') { i++; in_string = true; } else if (' ' == args[i]) { args[i] = 0; m++; } } return m + 1; } static void unquote_string(char *param_str) { size_t len = strlen(param_str); // Remove leading and terminating spaces after equal sign const char *equal = strstr(param_str, "=\""); if (equal && equal - param_str + 1 >= 2 && param_str[len - 1] == '"') { size_t dst = equal + 1 - param_str; size_t src = dst + 1; for (; param_str[src]; dst++, src++) { if (param_str[src] == '"') { if (param_str[src + 1] == '"') { src++; } else { break; } } param_str[dst] = param_str[src]; } param_str[dst] = '\0'; } } /*****************************************************************************/ char **pj_trim_argv(size_t argc, char *args) { /****************************************************************************** Create an argv-style array from elements placed in the argument string, args. args is a trimmed string as returned by pj_trim_argc(), and argc is the number of trimmed strings found (i.e. the return value of pj_trim_args()). Hence, int argc = pj_trim_argc (args); char **argv = pj_trim_argv (argc, args); will produce a classic style (argc, argv) pair from a string of whitespace separated args. No new memory is allocated for storing the individual args (they stay in the args string), but for the pointers to the args a new array is allocated and returned. It is the duty of the caller to free this array. ******************************************************************************/ if (nullptr == args) return nullptr; if (0 == argc) return nullptr; /* turn the input string into an array of strings */ char **argv = (char **)calloc(argc, sizeof(char *)); if (nullptr == argv) return nullptr; for (size_t i = 0, j = 0; j < argc; j++) { argv[j] = args + i; char *str = argv[j]; size_t nLen = strlen(str); i += nLen + 1; unquote_string(str); } return argv; } /*****************************************************************************/ std::string pj_double_quote_string_param_if_needed(const std::string &str) { /*****************************************************************************/ if (str.find(' ') == std::string::npos) { return str; } std::string ret; ret += '"'; ret += replaceAll(str, "\"", "\"\""); ret += '"'; return ret; } /*****************************************************************************/ char *pj_make_args(size_t argc, char **argv) { /****************************************************************************** pj_make_args is the inverse of the pj_trim_argc/pj_trim_argv combo: It converts free format command line input to something proj_create can consume. Allocates, and returns, an array of char, large enough to hold a whitespace separated copy of the args in argv. It is the duty of the caller to free this array. ******************************************************************************/ try { std::string s; for (size_t i = 0; i < argc; i++) { const char *equal = strchr(argv[i], '='); if (equal) { s += std::string(argv[i], equal - argv[i] + 1); s += pj_double_quote_string_param_if_needed(equal + 1); } else { s += argv[i]; } s += ' '; } char *p = pj_strdup(s.c_str()); return pj_shrink(p); } catch (const std::exception &) { return nullptr; } } /*****************************************************************************/ void proj_context_errno_set(PJ_CONTEXT *ctx, int err) { /****************************************************************************** Raise an error directly on a context, without going through a PJ belonging to that context. ******************************************************************************/ if (nullptr == ctx) ctx = pj_get_default_ctx(); ctx->last_errno = err; if (err == 0) return; errno = err; } proj-9.6.0/src/inv.cpp000664 001754 001755 00000020052 14764566077 014507 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ.4 * Purpose: Inverse operation invocation * Author: Thomas Knudsen, thokn@sdfe.dk, 2018-01-02 * Based on material from Gerald Evenden (original pj_inv) * and Piyush Agram (original pj_inv3d) * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * Copyright (c) 2018, Thomas Knudsen / SDFE * * 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 "proj_internal.h" #include #define INPUT_UNITS P->right #define OUTPUT_UNITS P->left static void inv_prepare(PJ *P, PJ_COORD &coo) { if (coo.v[0] == HUGE_VAL || coo.v[1] == HUGE_VAL || coo.v[2] == HUGE_VAL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); coo = proj_coord_error(); return; } /* The helmert datum shift will choke unless it gets a sensible 4D * coordinate */ if (HUGE_VAL == coo.v[2] && P->helmert) coo.v[2] = 0.0; if (HUGE_VAL == coo.v[3] && P->helmert) coo.v[3] = 0.0; if (P->axisswap) coo = proj_trans(P->axisswap, PJ_INV, coo); /* Handle remaining possible input types */ switch (INPUT_UNITS) { case PJ_IO_UNITS_WHATEVER: break; case PJ_IO_UNITS_DEGREES: break; /* de-scale and de-offset */ case PJ_IO_UNITS_CARTESIAN: coo.xyz.x *= P->to_meter; coo.xyz.y *= P->to_meter; coo.xyz.z *= P->to_meter; if (P->is_geocent) { coo = proj_trans(P->cart, PJ_INV, coo); } break; case PJ_IO_UNITS_PROJECTED: case PJ_IO_UNITS_CLASSIC: coo.xyz.x = P->to_meter * coo.xyz.x - P->x0; coo.xyz.y = P->to_meter * coo.xyz.y - P->y0; coo.xyz.z = P->vto_meter * coo.xyz.z - P->z0; if (INPUT_UNITS == PJ_IO_UNITS_PROJECTED) return; /* Classic proj.4 functions expect plane coordinates in units of the * semimajor axis */ /* Multiplying by ra, rather than dividing by a because the CalCOFI * projection */ /* stomps on a and hence (apparently) depends on this to roundtrip * correctly */ /* (CalCOFI avoids further scaling by stomping - but a better solution * is possible) */ coo.xyz.x *= P->ra; coo.xyz.y *= P->ra; break; case PJ_IO_UNITS_RADIANS: coo.lpz.z = P->vto_meter * coo.lpz.z - P->z0; break; } } static void inv_finalize(PJ *P, PJ_COORD &coo) { if (coo.xyz.x == HUGE_VAL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); coo = proj_coord_error(); } if (OUTPUT_UNITS == PJ_IO_UNITS_RADIANS) { /* Distance from central meridian, taking system zero meridian into * account */ coo.lp.lam = coo.lp.lam + P->from_greenwich + P->lam0; /* adjust longitude to central meridian */ if (0 == P->over) coo.lpz.lam = adjlon(coo.lpz.lam); if (P->vgridshift) coo = proj_trans(P->vgridshift, PJ_INV, coo); /* Go geometric from orthometric */ if (coo.lp.lam == HUGE_VAL) return; if (P->hgridshift) coo = proj_trans(P->hgridshift, PJ_FWD, coo); else if (P->helmert || (P->cart_wgs84 != nullptr && P->cart != nullptr)) { coo = proj_trans(P->cart, PJ_FWD, coo); /* Go cartesian in local frame */ if (P->helmert) coo = proj_trans(P->helmert, PJ_FWD, coo); /* Step into WGS84 */ coo = proj_trans(P->cart_wgs84, PJ_INV, coo); /* Go back to angular using WGS84 ellps */ } if (coo.lp.lam == HUGE_VAL) return; /* If input latitude was geocentrical, convert back to geocentrical */ if (P->geoc) coo = pj_geocentric_latitude(P, PJ_FWD, coo); } } static inline PJ_COORD error_or_coord(PJ *P, PJ_COORD coord, int last_errno) { if (P->ctx->last_errno) return proj_coord_error(); P->ctx->last_errno = last_errno; return coord; } PJ_LP pj_inv(PJ_XY xy, PJ *P) { PJ_COORD coo = {{0, 0, 0, 0}}; coo.xy = xy; const int last_errno = P->ctx->last_errno; P->ctx->last_errno = 0; if (!P->skip_inv_prepare) inv_prepare(P, coo); if (HUGE_VAL == coo.v[0]) return proj_coord_error().lp; /* Do the transformation, using the lowest dimensional transformer available */ if (P->inv) { const auto lp = P->inv(coo.xy, P); coo.lp = lp; } else if (P->inv3d) { const auto lpz = P->inv3d(coo.xyz, P); coo.lpz = lpz; } else if (P->inv4d) P->inv4d(coo, P); else { proj_errno_set(P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error().lp; } if (HUGE_VAL == coo.v[0]) return proj_coord_error().lp; if (!P->skip_inv_finalize) inv_finalize(P, coo); return error_or_coord(P, coo, last_errno).lp; } PJ_LPZ pj_inv3d(PJ_XYZ xyz, PJ *P) { PJ_COORD coo = {{0, 0, 0, 0}}; coo.xyz = xyz; const int last_errno = P->ctx->last_errno; P->ctx->last_errno = 0; if (!P->skip_inv_prepare) inv_prepare(P, coo); if (HUGE_VAL == coo.v[0]) return proj_coord_error().lpz; /* Do the transformation, using the lowest dimensional transformer feasible */ if (P->inv3d) { const auto lpz = P->inv3d(coo.xyz, P); coo.lpz = lpz; } else if (P->inv4d) P->inv4d(coo, P); else if (P->inv) { const auto lp = P->inv(coo.xy, P); coo.lp = lp; } else { proj_errno_set(P, PROJ_ERR_OTHER_NO_INVERSE_OP); return proj_coord_error().lpz; } if (HUGE_VAL == coo.v[0]) return proj_coord_error().lpz; if (!P->skip_inv_finalize) inv_finalize(P, coo); return error_or_coord(P, coo, last_errno).lpz; } bool pj_inv4d(PJ_COORD &coo, PJ *P) { const int last_errno = P->ctx->last_errno; P->ctx->last_errno = 0; if (!P->skip_inv_prepare) inv_prepare(P, coo); if (HUGE_VAL == coo.v[0]) { coo = proj_coord_error(); return false; } /* Call the highest dimensional converter available */ if (P->inv4d) P->inv4d(coo, P); else if (P->inv3d) { const auto lpz = P->inv3d(coo.xyz, P); coo.lpz = lpz; } else if (P->inv) { const auto lp = P->inv(coo.xy, P); coo.lp = lp; } else { proj_errno_set(P, PROJ_ERR_OTHER_NO_INVERSE_OP); coo = proj_coord_error(); return false; } if (HUGE_VAL == coo.v[0]) { coo = proj_coord_error(); return false; } if (!P->skip_inv_finalize) inv_finalize(P, coo); if (P->ctx->last_errno) { coo = proj_coord_error(); return false; } P->ctx->last_errno = last_errno; return true; } proj-9.6.0/src/iso19111/000775 001754 001755 00000000000 14764566152 014371 5ustar00e012349e012349000000 000000 proj-9.6.0/src/iso19111/c_api.cpp000664 001754 001755 00001362102 14764566077 016163 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: C API wrapper of C++ API * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include #include #include #include #include #include #include #include #include #include #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinates.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/datum_internal.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" #include "proj_experimental.h" // clang-format on #include "geodesic.h" #include "proj_constants.h" using namespace NS_PROJ::common; using namespace NS_PROJ::coordinates; using namespace NS_PROJ::crs; using namespace NS_PROJ::cs; using namespace NS_PROJ::datum; using namespace NS_PROJ::io; using namespace NS_PROJ::internal; using namespace NS_PROJ::metadata; using namespace NS_PROJ::operation; using namespace NS_PROJ::util; using namespace NS_PROJ; // --------------------------------------------------------------------------- static void PROJ_NO_INLINE proj_log_error(PJ_CONTEXT *ctx, const char *function, const char *text) { if (ctx->debug_level != PJ_LOG_NONE) { std::string msg(function); msg += ": "; msg += text; ctx->logger(ctx->logger_app_data, PJ_LOG_ERROR, msg.c_str()); } auto previous_errno = proj_context_errno(ctx); if (previous_errno == 0) { // only set errno if it wasn't set deeper down the call stack proj_context_errno_set(ctx, PROJ_ERR_OTHER); } } // --------------------------------------------------------------------------- static void PROJ_NO_INLINE proj_log_debug(PJ_CONTEXT *ctx, const char *function, const char *text) { std::string msg(function); msg += ": "; msg += text; ctx->logger(ctx->logger_app_data, PJ_LOG_DEBUG, msg.c_str()); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- template static PROJ_STRING_LIST to_string_list(T &&set) { auto ret = new char *[set.size() + 1]; size_t i = 0; for (const auto &str : set) { try { ret[i] = new char[str.size() + 1]; } catch (const std::exception &) { while (--i > 0) { delete[] ret[i]; } delete[] ret; throw; } std::memcpy(ret[i], str.c_str(), str.size() + 1); i++; } ret[i] = nullptr; return ret; } // --------------------------------------------------------------------------- void proj_context_delete_cpp_context(struct projCppContext *cppContext) { delete cppContext; } // --------------------------------------------------------------------------- projCppContext::projCppContext(PJ_CONTEXT *ctx, const char *dbPath, const std::vector &auxDbPaths) : ctx_(ctx), dbPath_(dbPath ? dbPath : std::string()), auxDbPaths_(auxDbPaths) {} // --------------------------------------------------------------------------- std::vector projCppContext::toVector(const char *const *auxDbPaths) { std::vector res; for (auto iter = auxDbPaths; iter && *iter; ++iter) { res.emplace_back(std::string(*iter)); } return res; } // --------------------------------------------------------------------------- projCppContext *projCppContext::clone(PJ_CONTEXT *ctx) const { projCppContext *newContext = new projCppContext(ctx, getDbPath().c_str(), getAuxDbPaths()); return newContext; } // --------------------------------------------------------------------------- NS_PROJ::io::DatabaseContextNNPtr projCppContext::getDatabaseContext() { if (databaseContext_) { return NN_NO_CHECK(databaseContext_); } auto dbContext = NS_PROJ::io::DatabaseContext::create(dbPath_, auxDbPaths_, ctx_); databaseContext_ = dbContext; return dbContext; } // --------------------------------------------------------------------------- static PROJ_NO_INLINE DatabaseContextNNPtr getDBcontext(PJ_CONTEXT *ctx) { return ctx->get_cpp_context()->getDatabaseContext(); } // --------------------------------------------------------------------------- static PROJ_NO_INLINE DatabaseContextPtr getDBcontextNoException(PJ_CONTEXT *ctx, const char *function) { try { return getDBcontext(ctx).as_nullable(); } catch (const std::exception &e) { proj_log_debug(ctx, function, e.what()); return nullptr; } } // --------------------------------------------------------------------------- PJ *pj_obj_create(PJ_CONTEXT *ctx, const BaseObjectNNPtr &objIn) { auto coordop = dynamic_cast(objIn.get()); if (coordop) { auto singleOp = dynamic_cast(coordop); bool bTryToExportToProj = true; if (singleOp && singleOp->method()->nameStr() == "unnamed") { // Can happen for example when the GDAL GeoTIFF SRS builder // creates a dummy conversion when building the SRS, before setting // the final map projection. This avoids exportToPROJString() from // throwing an exception. bTryToExportToProj = false; } if (bTryToExportToProj) { auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { auto formatter = PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, std::move(dbContext)); auto projString = coordop->exportToPROJString(formatter.get()); const bool defer_grid_opening_backup = ctx->defer_grid_opening; if (!defer_grid_opening_backup && proj_context_is_network_enabled(ctx)) { ctx->defer_grid_opening = true; } auto pj = pj_create_internal(ctx, projString.c_str()); ctx->defer_grid_opening = defer_grid_opening_backup; if (pj) { pj->iso_obj = objIn; pj->iso_obj_is_coordinate_operation = true; auto sourceEpoch = coordop->sourceCoordinateEpoch(); auto targetEpoch = coordop->targetCoordinateEpoch(); if (sourceEpoch.has_value()) { if (!targetEpoch.has_value()) { pj->hasCoordinateEpoch = true; pj->coordinateEpoch = sourceEpoch->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR); } } else { if (targetEpoch.has_value()) { pj->hasCoordinateEpoch = true; pj->coordinateEpoch = targetEpoch->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR); } } return pj; } } catch (const std::exception &) { // Silence, since we may not always be able to export as a // PROJ string. } } } auto pj = pj_new(); if (pj) { pj->ctx = ctx; pj->descr = "ISO-19111 object"; pj->iso_obj = objIn; pj->iso_obj_is_coordinate_operation = coordop != nullptr; try { auto crs = dynamic_cast(objIn.get()); if (crs) { auto geodCRS = crs->extractGeodeticCRS(); if (geodCRS) { const auto &ellps = geodCRS->ellipsoid(); const double a = ellps->semiMajorAxis().getSIValue(); const double es = ellps->squaredEccentricity(); if (!(a > 0 && es >= 0 && es < 1)) { proj_log_error(pj, _("Invalid ellipsoid parameters")); proj_errno_set(pj, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); proj_destroy(pj); return nullptr; } pj_calc_ellipsoid_params(pj, a, es); assert(pj->geod == nullptr); pj->geod = static_cast( calloc(1, sizeof(struct geod_geodesic))); if (pj->geod) { geod_init(pj->geod, pj->a, pj->es / (1 + sqrt(pj->one_es))); } } } } catch (const std::exception &) { } } return pj; } //! @endcond // --------------------------------------------------------------------------- /** \brief Opaque object representing a set of operation results. */ struct PJ_OBJ_LIST { //! @cond Doxygen_Suppress std::vector objects; explicit PJ_OBJ_LIST(std::vector &&objectsIn) : objects(std::move(objectsIn)) {} virtual ~PJ_OBJ_LIST(); PJ_OBJ_LIST(const PJ_OBJ_LIST &) = delete; PJ_OBJ_LIST &operator=(const PJ_OBJ_LIST &) = delete; //! @endcond }; //! @cond Doxygen_Suppress PJ_OBJ_LIST::~PJ_OBJ_LIST() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress #define SANITIZE_CTX(ctx) \ do { \ if (ctx == nullptr) { \ ctx = pj_get_default_ctx(); \ } \ } while (0) //! @endcond // --------------------------------------------------------------------------- /** \brief Starting with PROJ 8.1, this function does nothing. * * If you want to take into account changes to the PROJ database, you need to * re-create a new context. * * @param ctx Ignored * @param autoclose Ignored * @since 6.2 * deprecated Since 8.1 */ void proj_context_set_autoclose_database(PJ_CONTEXT *ctx, int autoclose) { (void)ctx; (void)autoclose; } // --------------------------------------------------------------------------- /** \brief Explicitly point to the main PROJ CRS and coordinate operation * definition database ("proj.db"), and potentially auxiliary databases with * same structure. * * Starting with PROJ 8.1, if the auxDbPaths parameter is an empty array, * the PROJ_AUX_DB environment variable will be used, if set. * It must contain one or several paths. If several paths are * provided, they must be separated by the colon (:) character on Unix, and * on Windows, by the semi-colon (;) character. * * @param ctx PROJ context, or NULL for default context * @param dbPath Path to main database, or NULL for default. * @param auxDbPaths NULL-terminated list of auxiliary database filenames, or * NULL. * @param options should be set to NULL for now * @return TRUE in case of success */ int proj_context_set_database_path(PJ_CONTEXT *ctx, const char *dbPath, const char *const *auxDbPaths, const char *const *options) { SANITIZE_CTX(ctx); (void)options; std::string osPrevDbPath; std::vector osPrevAuxDbPaths; if (ctx->cpp_context) { osPrevDbPath = ctx->cpp_context->getDbPath(); osPrevAuxDbPaths = ctx->cpp_context->getAuxDbPaths(); } delete ctx->cpp_context; ctx->cpp_context = nullptr; try { ctx->cpp_context = new projCppContext( ctx, dbPath, projCppContext::toVector(auxDbPaths)); ctx->cpp_context->getDatabaseContext(); return true; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); delete ctx->cpp_context; ctx->cpp_context = new projCppContext(ctx, osPrevDbPath.c_str(), osPrevAuxDbPaths); return false; } } // --------------------------------------------------------------------------- /** \brief Returns the path to the database. * * The returned pointer remains valid while ctx is valid, and until * proj_context_set_database_path() is called. * * @param ctx PROJ context, or NULL for default context * @return path, or nullptr */ const char *proj_context_get_database_path(PJ_CONTEXT *ctx) { SANITIZE_CTX(ctx); try { // temporary variable must be used as getDBcontext() might create // ctx->cpp_context const std::string osPath(getDBcontext(ctx)->getPath()); ctx->get_cpp_context()->lastDbPath_ = osPath; return ctx->cpp_context->lastDbPath_.c_str(); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Return a metadata from the database. * * The returned pointer remains valid while ctx is valid, and until * proj_context_get_database_metadata() is called. * * Available keys: * * - DATABASE.LAYOUT.VERSION.MAJOR * - DATABASE.LAYOUT.VERSION.MINOR * - EPSG.VERSION * - EPSG.DATE * - ESRI.VERSION * - ESRI.DATE * - IGNF.SOURCE * - IGNF.VERSION * - IGNF.DATE * - NKG.SOURCE * - NKG.VERSION * - NKG.DATE * - PROJ.VERSION * - PROJ_DATA.VERSION : PROJ-data version most compatible with this database. * * * @param ctx PROJ context, or NULL for default context * @param key Metadata key. Must not be NULL * @return value, or nullptr */ const char *proj_context_get_database_metadata(PJ_CONTEXT *ctx, const char *key) { SANITIZE_CTX(ctx); if (!key) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } try { // temporary variable must be used as getDBcontext() might create // ctx->cpp_context auto osVal(getDBcontext(ctx)->getMetadata(key)); if (osVal == nullptr) { return nullptr; } ctx->get_cpp_context()->lastDbMetadataItem_ = osVal; return ctx->cpp_context->lastDbMetadataItem_.c_str(); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Return the database structure * * Return SQL statements to run to initiate a new valid auxiliary empty * database. It contains definitions of tables, views and triggers, as well * as metadata for the version of the layout of the database. * * @param ctx PROJ context, or NULL for default context * @param options null-terminated list of options, or NULL. None currently. * @return list of SQL statements (to be freed with proj_string_list_destroy()), * or NULL in case of error. * @since 8.1 */ PROJ_STRING_LIST proj_context_get_database_structure(PJ_CONTEXT *ctx, const char *const *options) { SANITIZE_CTX(ctx); (void)options; try { auto ret = to_string_list(getDBcontext(ctx)->getDatabaseStructure()); return ret; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Guess the "dialect" of the WKT string. * * @param ctx PROJ context, or NULL for default context * @param wkt String (must not be NULL) */ PJ_GUESSED_WKT_DIALECT proj_context_guess_wkt_dialect(PJ_CONTEXT *ctx, const char *wkt) { (void)ctx; if (!wkt) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return PJ_GUESSED_NOT_WKT; } switch (WKTParser().guessDialect(wkt)) { case WKTParser::WKTGuessedDialect::WKT2_2019: return PJ_GUESSED_WKT2_2019; case WKTParser::WKTGuessedDialect::WKT2_2015: return PJ_GUESSED_WKT2_2015; case WKTParser::WKTGuessedDialect::WKT1_GDAL: return PJ_GUESSED_WKT1_GDAL; case WKTParser::WKTGuessedDialect::WKT1_ESRI: return PJ_GUESSED_WKT1_ESRI; case WKTParser::WKTGuessedDialect::NOT_WKT: break; } return PJ_GUESSED_NOT_WKT; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const char *getOptionValue(const char *option, const char *keyWithEqual) noexcept { if (ci_starts_with(option, keyWithEqual)) { return option + strlen(keyWithEqual); } return nullptr; } //! @endcond // --------------------------------------------------------------------------- /** \brief "Clone" an object. * * The object might be used independently of the original object, provided that * the use of context is compatible. In particular if you intend to use a * clone in a different thread than the original object, you should pass a * context that is different from the one of the original object (or later * assign a different context with proj_assign_context()). * * The returned object must be unreferenced with proj_destroy() after use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object to clone. Must not be NULL. * @return Object that must be unreferenced with proj_destroy(), or NULL in * case of error. */ PJ *proj_clone(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } if (!obj->iso_obj) { if (!obj->alternativeCoordinateOperations.empty()) { auto newPj = pj_new(); if (newPj) { newPj->descr = "Set of coordinate operations"; newPj->ctx = ctx; newPj->copyStateFrom(*obj); const int old_debug_level = ctx->debug_level; ctx->debug_level = PJ_LOG_NONE; for (const auto &altOp : obj->alternativeCoordinateOperations) { newPj->alternativeCoordinateOperations.emplace_back( PJCoordOperation(ctx, altOp)); } ctx->debug_level = old_debug_level; } return newPj; } return nullptr; } try { PJ *newPj = pj_obj_create(ctx, NN_NO_CHECK(obj->iso_obj)); if (newPj) { newPj->copyStateFrom(*obj); } return newPj; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate an object from a WKT string, PROJ string, object code * (like "EPSG:4326", "urn:ogc:def:crs:EPSG::4326", * "urn:ogc:def:coordinateOperation:EPSG::1671"), a PROJJSON string, an object * name (e.g "WGS 84") of a compound CRS build from object names * (e.g "WGS 84 + EGM96 height") * * This function calls osgeo::proj::io::createFromUserInput() * * The returned object must be unreferenced with proj_destroy() after use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param text String (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL in * case of error. */ PJ *proj_create(PJ_CONTEXT *ctx, const char *text) { SANITIZE_CTX(ctx); if (!text) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } // Only connect to proj.db if needed if (strstr(text, "proj=") == nullptr || strstr(text, "init=") != nullptr) { getDBcontextNoException(ctx, __FUNCTION__); } try { auto obj = nn_dynamic_pointer_cast(createFromUserInput(text, ctx)); if (obj) { return pj_obj_create(ctx, NN_NO_CHECK(obj)); } } catch (const io::ParsingException &e) { if (proj_context_errno(ctx) == 0) { proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } proj_log_error(ctx, __FUNCTION__, e.what()); } catch (const NoSuchAuthorityCodeException &e) { proj_log_error(ctx, __FUNCTION__, std::string(e.what()) .append(": ") .append(e.getAuthority()) .append(":") .append(e.getAuthorityCode()) .c_str()); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate an object from a WKT string. * * This function calls osgeo::proj::io::WKTParser::createFromWKT() * * The returned object must be unreferenced with proj_destroy() after use. * It should be used by at most one thread at a time. * * The distinction between warnings and grammar errors is somewhat artificial * and does not tell much about the real criticity of the non-compliance. * Some warnings may be more concerning than some grammar errors. Human * expertise (or, by the time this comment will be read, specialized AI) is * generally needed to perform that assessment. * * @param ctx PROJ context, or NULL for default context * @param wkt WKT string (must not be NULL) * @param options null-terminated list of options, or NULL. Currently * supported options are: *
    *
  • STRICT=YES/NO. Defaults to NO. When set to YES, strict validation will * be enabled.
  • *
  • UNSET_IDENTIFIERS_IF_INCOMPATIBLE_DEF=YES/NO. Defaults to YES. * When set to YES, object identifiers are unset when there is * a contradiction between the definition from WKT and the one from * the database./
  • *
* @param out_warnings Pointer to a PROJ_STRING_LIST object, or NULL. * If provided, *out_warnings will contain a list of warnings, typically for * non recognized projection method or parameters, or other issues found during * WKT analys. It must be freed with proj_string_list_destroy(). * @param out_grammar_errors Pointer to a PROJ_STRING_LIST object, or NULL. * If provided, *out_grammar_errors will contain a list of errors regarding the * WKT grammar. It must be freed with proj_string_list_destroy(). * @return Object that must be unreferenced with proj_destroy(), or NULL in * case of error. */ PJ *proj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt, const char *const *options, PROJ_STRING_LIST *out_warnings, PROJ_STRING_LIST *out_grammar_errors) { SANITIZE_CTX(ctx); if (!wkt) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } if (out_warnings) { *out_warnings = nullptr; } if (out_grammar_errors) { *out_grammar_errors = nullptr; } try { WKTParser parser; auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); if (dbContext) { parser.attachDatabaseContext(NN_NO_CHECK(dbContext)); } parser.setStrict(false); for (auto iter = options; iter && iter[0]; ++iter) { const char *value; if ((value = getOptionValue(*iter, "STRICT="))) { parser.setStrict(ci_equal(value, "YES")); } else if ((value = getOptionValue( *iter, "UNSET_IDENTIFIERS_IF_INCOMPATIBLE_DEF="))) { parser.setUnsetIdentifiersIfIncompatibleDef( ci_equal(value, "YES")); } else { std::string msg("Unknown option :"); msg += *iter; proj_log_error(ctx, __FUNCTION__, msg.c_str()); return nullptr; } } auto obj = parser.createFromWKT(wkt); if (out_grammar_errors) { auto grammarErrors = parser.grammarErrorList(); if (!grammarErrors.empty()) { *out_grammar_errors = to_string_list(grammarErrors); } } if (out_warnings) { auto warnings = parser.warningList(); auto derivedCRS = dynamic_cast(obj.get()); if (derivedCRS) { auto extraWarnings = derivedCRS->derivingConversionRef()->validateParameters(); warnings.insert(warnings.end(), extraWarnings.begin(), extraWarnings.end()); } else { auto singleOp = dynamic_cast(obj.get()); if (singleOp) { auto extraWarnings = singleOp->validateParameters(); warnings.insert(warnings.end(), extraWarnings.begin(), extraWarnings.end()); } } if (!warnings.empty()) { *out_warnings = to_string_list(warnings); } } return pj_obj_create(ctx, NN_NO_CHECK(obj)); } catch (const std::exception &e) { if (out_grammar_errors) { std::list exc{e.what()}; try { *out_grammar_errors = to_string_list(exc); } catch (const std::exception &) { proj_log_error(ctx, __FUNCTION__, e.what()); } } else { proj_log_error(ctx, __FUNCTION__, e.what()); } } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate an object from a database lookup. * * The returned object must be unreferenced with proj_destroy() after use. * It should be used by at most one thread at a time. * * @param ctx Context, or NULL for default context. * @param auth_name Authority name (must not be NULL) * @param code Object code (must not be NULL) * @param category Object category * @param usePROJAlternativeGridNames Whether PROJ alternative grid names * should be substituted to the official grid names. Only used on * transformations * @param options should be set to NULL for now * @return Object that must be unreferenced with proj_destroy(), or NULL in * case of error. */ PJ *proj_create_from_database(PJ_CONTEXT *ctx, const char *auth_name, const char *code, PJ_CATEGORY category, int usePROJAlternativeGridNames, const char *const *options) { SANITIZE_CTX(ctx); if (!auth_name || !code) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } (void)options; try { const std::string codeStr(code); auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name); IdentifiedObjectPtr obj; switch (category) { case PJ_CATEGORY_ELLIPSOID: obj = factory->createEllipsoid(codeStr).as_nullable(); break; case PJ_CATEGORY_PRIME_MERIDIAN: obj = factory->createPrimeMeridian(codeStr).as_nullable(); break; case PJ_CATEGORY_DATUM: obj = factory->createDatum(codeStr).as_nullable(); break; case PJ_CATEGORY_CRS: obj = factory->createCoordinateReferenceSystem(codeStr).as_nullable(); break; case PJ_CATEGORY_COORDINATE_OPERATION: obj = factory ->createCoordinateOperation( codeStr, usePROJAlternativeGridNames != 0) .as_nullable(); break; case PJ_CATEGORY_DATUM_ENSEMBLE: obj = factory->createDatumEnsemble(codeStr).as_nullable(); break; } return pj_obj_create(ctx, NN_NO_CHECK(obj)); } catch (const NoSuchAuthorityCodeException &e) { proj_log_error(ctx, __FUNCTION__, std::string(e.what()) .append(": ") .append(e.getAuthority()) .append(":") .append(e.getAuthorityCode()) .c_str()); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const char *get_unit_category(const std::string &unit_name, UnitOfMeasure::Type type) { const char *ret = nullptr; switch (type) { case UnitOfMeasure::Type::UNKNOWN: ret = "unknown"; break; case UnitOfMeasure::Type::NONE: ret = "none"; break; case UnitOfMeasure::Type::ANGULAR: ret = unit_name.find(" per ") != std::string::npos ? "angular_per_time" : "angular"; break; case UnitOfMeasure::Type::LINEAR: ret = unit_name.find(" per ") != std::string::npos ? "linear_per_time" : "linear"; break; case UnitOfMeasure::Type::SCALE: ret = unit_name.find(" per year") != std::string::npos || unit_name.find(" per second") != std::string::npos ? "scale_per_time" : "scale"; break; case UnitOfMeasure::Type::TIME: ret = "time"; break; case UnitOfMeasure::Type::PARAMETRIC: ret = unit_name.find(" per ") != std::string::npos ? "parametric_per_time" : "parametric"; break; } return ret; } //! @endcond // --------------------------------------------------------------------------- /** \brief Get information for a unit of measure from a database lookup. * * @param ctx Context, or NULL for default context. * @param auth_name Authority name (must not be NULL) * @param code Unit of measure code (must not be NULL) * @param out_name Pointer to a string value to store the parameter name. or * NULL. This value remains valid until the next call to * proj_uom_get_info_from_database() or the context destruction. * @param out_conv_factor Pointer to a value to store the conversion * factor of the prime meridian longitude unit to radian. or NULL * @param out_category Pointer to a string value to store the parameter name. or * NULL. This value might be "unknown", "none", "linear", "linear_per_time", * "angular", "angular_per_time", "scale", "scale_per_time", "time", * "parametric" or "parametric_per_time" * @return TRUE in case of success */ int proj_uom_get_info_from_database(PJ_CONTEXT *ctx, const char *auth_name, const char *code, const char **out_name, double *out_conv_factor, const char **out_category) { SANITIZE_CTX(ctx); if (!auth_name || !code) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } try { auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name); auto obj = factory->createUnitOfMeasure(code); if (out_name) { ctx->get_cpp_context()->lastUOMName_ = obj->name(); *out_name = ctx->cpp_context->lastUOMName_.c_str(); } if (out_conv_factor) { *out_conv_factor = obj->conversionToSI(); } if (out_category) { *out_category = get_unit_category(obj->name(), obj->type()); } return true; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return false; } // --------------------------------------------------------------------------- /** \brief Get information for a grid from a database lookup. * * @param ctx Context, or NULL for default context. * @param grid_name Grid name (must not be NULL) * @param out_full_name Pointer to a string value to store the grid full * filename. or NULL * @param out_package_name Pointer to a string value to store the package name * where * the grid might be found. or NULL * @param out_url Pointer to a string value to store the grid URL or the * package URL where the grid might be found. or NULL * @param out_direct_download Pointer to a int (boolean) value to store whether * *out_url can be downloaded directly. or NULL * @param out_open_license Pointer to a int (boolean) value to store whether * the grid is released with an open license. or NULL * @param out_available Pointer to a int (boolean) value to store whether the * grid is available at runtime. or NULL * @return TRUE in case of success. */ int proj_grid_get_info_from_database( PJ_CONTEXT *ctx, const char *grid_name, const char **out_full_name, const char **out_package_name, const char **out_url, int *out_direct_download, int *out_open_license, int *out_available) { SANITIZE_CTX(ctx); if (!grid_name) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } try { auto db_context = getDBcontext(ctx); bool direct_download; bool open_license; bool available; if (!db_context->lookForGridInfo( grid_name, false, ctx->get_cpp_context()->lastGridFullName_, ctx->get_cpp_context()->lastGridPackageName_, ctx->get_cpp_context()->lastGridUrl_, direct_download, open_license, available)) { return false; } if (out_full_name) *out_full_name = ctx->get_cpp_context()->lastGridFullName_.c_str(); if (out_package_name) *out_package_name = ctx->get_cpp_context()->lastGridPackageName_.c_str(); if (out_url) *out_url = ctx->get_cpp_context()->lastGridUrl_.c_str(); if (out_direct_download) *out_direct_download = direct_download ? 1 : 0; if (out_open_license) *out_open_license = open_license ? 1 : 0; if (out_available) *out_available = available ? 1 : 0; return true; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return false; } // --------------------------------------------------------------------------- /** \brief Return GeodeticCRS that use the specified datum. * * @param ctx Context, or NULL for default context. * @param crs_auth_name CRS authority name, or NULL. * @param datum_auth_name Datum authority name (must not be NULL) * @param datum_code Datum code (must not be NULL) * @param crs_type "geographic 2D", "geographic 3D", "geocentric" or NULL * @return a result set that must be unreferenced with * proj_list_destroy(), or NULL in case of error. */ PJ_OBJ_LIST *proj_query_geodetic_crs_from_datum(PJ_CONTEXT *ctx, const char *crs_auth_name, const char *datum_auth_name, const char *datum_code, const char *crs_type) { SANITIZE_CTX(ctx); if (!datum_auth_name || !datum_code) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } try { auto factory = AuthorityFactory::create( getDBcontext(ctx), crs_auth_name ? crs_auth_name : ""); auto res = factory->createGeodeticCRSFromDatum( datum_auth_name, datum_code, crs_type ? crs_type : ""); std::vector objects; for (const auto &obj : res) { objects.push_back(obj); } return new PJ_OBJ_LIST(std::move(objects)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static AuthorityFactory::ObjectType convertPJObjectTypeToObjectType(PJ_TYPE type, bool &valid) { valid = true; AuthorityFactory::ObjectType cppType = AuthorityFactory::ObjectType::CRS; switch (type) { case PJ_TYPE_ELLIPSOID: cppType = AuthorityFactory::ObjectType::ELLIPSOID; break; case PJ_TYPE_PRIME_MERIDIAN: cppType = AuthorityFactory::ObjectType::PRIME_MERIDIAN; break; case PJ_TYPE_GEODETIC_REFERENCE_FRAME: cppType = AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME; break; case PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME: cppType = AuthorityFactory::ObjectType::DYNAMIC_GEODETIC_REFERENCE_FRAME; break; case PJ_TYPE_VERTICAL_REFERENCE_FRAME: cppType = AuthorityFactory::ObjectType::VERTICAL_REFERENCE_FRAME; break; case PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME: cppType = AuthorityFactory::ObjectType::DYNAMIC_VERTICAL_REFERENCE_FRAME; break; case PJ_TYPE_DATUM_ENSEMBLE: cppType = AuthorityFactory::ObjectType::DATUM_ENSEMBLE; break; case PJ_TYPE_TEMPORAL_DATUM: valid = false; break; case PJ_TYPE_ENGINEERING_DATUM: cppType = AuthorityFactory::ObjectType::ENGINEERING_DATUM; break; case PJ_TYPE_PARAMETRIC_DATUM: valid = false; break; case PJ_TYPE_CRS: cppType = AuthorityFactory::ObjectType::CRS; break; case PJ_TYPE_GEODETIC_CRS: cppType = AuthorityFactory::ObjectType::GEODETIC_CRS; break; case PJ_TYPE_GEOCENTRIC_CRS: cppType = AuthorityFactory::ObjectType::GEOCENTRIC_CRS; break; case PJ_TYPE_GEOGRAPHIC_CRS: cppType = AuthorityFactory::ObjectType::GEOGRAPHIC_CRS; break; case PJ_TYPE_GEOGRAPHIC_2D_CRS: cppType = AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS; break; case PJ_TYPE_GEOGRAPHIC_3D_CRS: cppType = AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS; break; case PJ_TYPE_VERTICAL_CRS: cppType = AuthorityFactory::ObjectType::VERTICAL_CRS; break; case PJ_TYPE_PROJECTED_CRS: cppType = AuthorityFactory::ObjectType::PROJECTED_CRS; break; case PJ_TYPE_DERIVED_PROJECTED_CRS: valid = false; break; case PJ_TYPE_COMPOUND_CRS: cppType = AuthorityFactory::ObjectType::COMPOUND_CRS; break; case PJ_TYPE_ENGINEERING_CRS: cppType = AuthorityFactory::ObjectType::ENGINEERING_CRS; break; case PJ_TYPE_TEMPORAL_CRS: valid = false; break; case PJ_TYPE_BOUND_CRS: valid = false; break; case PJ_TYPE_OTHER_CRS: cppType = AuthorityFactory::ObjectType::CRS; break; case PJ_TYPE_CONVERSION: cppType = AuthorityFactory::ObjectType::CONVERSION; break; case PJ_TYPE_TRANSFORMATION: cppType = AuthorityFactory::ObjectType::TRANSFORMATION; break; case PJ_TYPE_CONCATENATED_OPERATION: cppType = AuthorityFactory::ObjectType::CONCATENATED_OPERATION; break; case PJ_TYPE_OTHER_COORDINATE_OPERATION: cppType = AuthorityFactory::ObjectType::COORDINATE_OPERATION; break; case PJ_TYPE_UNKNOWN: valid = false; break; case PJ_TYPE_COORDINATE_METADATA: valid = false; break; } return cppType; } //! @endcond // --------------------------------------------------------------------------- /** \brief Return a list of objects by their name. * * @param ctx Context, or NULL for default context. * @param auth_name Authority name, used to restrict the search. * Or NULL for all authorities. * @param searchedName Searched name. Must be at least 2 character long. * @param types List of object types into which to search. If * NULL, all object types will be searched. * @param typesCount Number of elements in types, or 0 if types is NULL * @param approximateMatch Whether approximate name identification is allowed. * @param limitResultCount Maximum number of results to return. * Or 0 for unlimited. * @param options should be set to NULL for now * @return a result set that must be unreferenced with * proj_list_destroy(), or NULL in case of error. */ PJ_OBJ_LIST *proj_create_from_name(PJ_CONTEXT *ctx, const char *auth_name, const char *searchedName, const PJ_TYPE *types, size_t typesCount, int approximateMatch, size_t limitResultCount, const char *const *options) { SANITIZE_CTX(ctx); if (!searchedName || (types != nullptr && typesCount == 0) || (types == nullptr && typesCount > 0)) { proj_log_error(ctx, __FUNCTION__, "invalid input"); return nullptr; } (void)options; try { auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name ? auth_name : ""); std::vector allowedTypes; for (size_t i = 0; i < typesCount; ++i) { bool valid = false; auto type = convertPJObjectTypeToObjectType(types[i], valid); if (valid) { allowedTypes.push_back(type); } } auto res = factory->createObjectsFromName(searchedName, allowedTypes, approximateMatch != 0, limitResultCount); std::vector objects; for (const auto &obj : res) { objects.push_back(obj); } return new PJ_OBJ_LIST(std::move(objects)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Return the type of an object. * * @param obj Object (must not be NULL) * @return its type. */ PJ_TYPE proj_get_type(const PJ *obj) { if (!obj || !obj->iso_obj) { return PJ_TYPE_UNKNOWN; } if (obj->type != PJ_TYPE_UNKNOWN) return obj->type; const auto getType = [&obj]() { auto ptr = obj->iso_obj.get(); if (dynamic_cast(ptr)) { return PJ_TYPE_ELLIPSOID; } if (dynamic_cast(ptr)) { return PJ_TYPE_PRIME_MERIDIAN; } if (dynamic_cast(ptr)) { return PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME; } if (dynamic_cast(ptr)) { return PJ_TYPE_GEODETIC_REFERENCE_FRAME; } if (dynamic_cast(ptr)) { return PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME; } if (dynamic_cast(ptr)) { return PJ_TYPE_VERTICAL_REFERENCE_FRAME; } if (dynamic_cast(ptr)) { return PJ_TYPE_DATUM_ENSEMBLE; } if (dynamic_cast(ptr)) { return PJ_TYPE_TEMPORAL_DATUM; } if (dynamic_cast(ptr)) { return PJ_TYPE_ENGINEERING_DATUM; } if (dynamic_cast(ptr)) { return PJ_TYPE_PARAMETRIC_DATUM; } if (auto crs = dynamic_cast(ptr)) { if (crs->coordinateSystem()->axisList().size() == 2) { return PJ_TYPE_GEOGRAPHIC_2D_CRS; } else { return PJ_TYPE_GEOGRAPHIC_3D_CRS; } } if (auto crs = dynamic_cast(ptr)) { if (crs->isGeocentric()) { return PJ_TYPE_GEOCENTRIC_CRS; } else { return PJ_TYPE_GEODETIC_CRS; } } if (dynamic_cast(ptr)) { return PJ_TYPE_VERTICAL_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_PROJECTED_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_DERIVED_PROJECTED_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_COMPOUND_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_TEMPORAL_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_ENGINEERING_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_BOUND_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_OTHER_CRS; } if (dynamic_cast(ptr)) { return PJ_TYPE_CONVERSION; } if (dynamic_cast(ptr)) { return PJ_TYPE_TRANSFORMATION; } if (dynamic_cast(ptr)) { return PJ_TYPE_CONCATENATED_OPERATION; } if (dynamic_cast(ptr)) { return PJ_TYPE_OTHER_COORDINATE_OPERATION; } if (dynamic_cast(ptr)) { return PJ_TYPE_COORDINATE_METADATA; } return PJ_TYPE_UNKNOWN; }; obj->type = getType(); return obj->type; } // --------------------------------------------------------------------------- /** \brief Return whether an object is deprecated. * * @param obj Object (must not be NULL) * @return TRUE if it is deprecated, FALSE otherwise */ int proj_is_deprecated(const PJ *obj) { if (!obj) { return false; } auto identifiedObj = dynamic_cast(obj->iso_obj.get()); if (!identifiedObj) { return false; } return identifiedObj->isDeprecated(); } // --------------------------------------------------------------------------- /** \brief Return a list of non-deprecated objects related to the passed one * * @param ctx Context, or NULL for default context. * @param obj Object (of type CRS for now) for which non-deprecated objects * must be searched. Must not be NULL * @return a result set that must be unreferenced with * proj_list_destroy(), or NULL in case of error. */ PJ_OBJ_LIST *proj_get_non_deprecated(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto crs = dynamic_cast(obj->iso_obj.get()); if (!crs) { return nullptr; } try { std::vector objects; auto res = crs->getNonDeprecated(getDBcontext(ctx)); for (const auto &resObj : res) { objects.push_back(resObj); } return new PJ_OBJ_LIST(std::move(objects)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- static int proj_is_equivalent_to_internal(PJ_CONTEXT *ctx, const PJ *obj, const PJ *other, PJ_COMPARISON_CRITERION criterion) { if (!obj || !other) { if (ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); } return false; } if (obj->iso_obj == nullptr && other->iso_obj == nullptr && !obj->alternativeCoordinateOperations.empty() && obj->alternativeCoordinateOperations.size() == other->alternativeCoordinateOperations.size()) { for (size_t i = 0; i < obj->alternativeCoordinateOperations.size(); ++i) { if (obj->alternativeCoordinateOperations[i] != other->alternativeCoordinateOperations[i]) { return false; } } return true; } auto identifiedObj = dynamic_cast(obj->iso_obj.get()); if (!identifiedObj) { return false; } auto otherIdentifiedObj = dynamic_cast(other->iso_obj.get()); if (!otherIdentifiedObj) { return false; } const auto cppCriterion = ([](PJ_COMPARISON_CRITERION l_criterion) { switch (l_criterion) { case PJ_COMP_STRICT: return IComparable::Criterion::STRICT; case PJ_COMP_EQUIVALENT: return IComparable::Criterion::EQUIVALENT; case PJ_COMP_EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS: break; } return IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS; })(criterion); int res = identifiedObj->isEquivalentTo( otherIdentifiedObj, cppCriterion, ctx ? getDBcontextNoException(ctx, "proj_is_equivalent_to_with_ctx") : nullptr); return res; } // --------------------------------------------------------------------------- /** \brief Return whether two objects are equivalent. * * Use proj_is_equivalent_to_with_ctx() to be able to use database information. * * @param obj Object (must not be NULL) * @param other Other object (must not be NULL) * @param criterion Comparison criterion * @return TRUE if they are equivalent */ int proj_is_equivalent_to(const PJ *obj, const PJ *other, PJ_COMPARISON_CRITERION criterion) { return proj_is_equivalent_to_internal(nullptr, obj, other, criterion); } // --------------------------------------------------------------------------- /** \brief Return whether two objects are equivalent * * Possibly using database to check for name aliases. * * @param ctx PROJ context, or NULL for default context * @param obj Object (must not be NULL) * @param other Other object (must not be NULL) * @param criterion Comparison criterion * @return TRUE if they are equivalent * @since 6.3 */ int proj_is_equivalent_to_with_ctx(PJ_CONTEXT *ctx, const PJ *obj, const PJ *other, PJ_COMPARISON_CRITERION criterion) { SANITIZE_CTX(ctx); return proj_is_equivalent_to_internal(ctx, obj, other, criterion); } // --------------------------------------------------------------------------- /** \brief Return whether an object is a CRS * * @param obj Object (must not be NULL) */ int proj_is_crs(const PJ *obj) { if (!obj) { return false; } return dynamic_cast(obj->iso_obj.get()) != nullptr; } // --------------------------------------------------------------------------- /** \brief Get the name of an object. * * The lifetime of the returned string is the same as the input obj parameter. * * @param obj Object (must not be NULL) * @return a string, or NULL in case of error or missing name. */ const char *proj_get_name(const PJ *obj) { if (!obj) { return nullptr; } auto identifiedObj = dynamic_cast(obj->iso_obj.get()); if (!identifiedObj) { return nullptr; } const auto &desc = identifiedObj->name()->description(); if (!desc.has_value()) { return nullptr; } // The object will still be alive after the function call. // cppcheck-suppress stlcstr return desc->c_str(); } // --------------------------------------------------------------------------- /** \brief Get the remarks of an object. * * The lifetime of the returned string is the same as the input obj parameter. * * @param obj Object (must not be NULL) * @return a string, or NULL in case of error. */ const char *proj_get_remarks(const PJ *obj) { if (!obj) { return nullptr; } auto identifiedObj = dynamic_cast(obj->iso_obj.get()); if (!identifiedObj) { return nullptr; } // The object will still be alive after the function call. // cppcheck-suppress stlcstr return identifiedObj->remarks().c_str(); } // --------------------------------------------------------------------------- /** \brief Get the authority name / codespace of an identifier of an object. * * The lifetime of the returned string is the same as the input obj parameter. * * @param obj Object (must not be NULL) * @param index Index of the identifier. 0 = first identifier * @return a string, or NULL in case of error or missing name. */ const char *proj_get_id_auth_name(const PJ *obj, int index) { if (!obj) { return nullptr; } auto identifiedObj = dynamic_cast(obj->iso_obj.get()); if (!identifiedObj) { return nullptr; } const auto &ids = identifiedObj->identifiers(); if (static_cast(index) >= ids.size()) { return nullptr; } const auto &codeSpace = ids[index]->codeSpace(); if (!codeSpace.has_value()) { return nullptr; } // The object will still be alive after the function call. // cppcheck-suppress stlcstr return codeSpace->c_str(); } // --------------------------------------------------------------------------- /** \brief Get the code of an identifier of an object. * * The lifetime of the returned string is the same as the input obj parameter. * * @param obj Object (must not be NULL) * @param index Index of the identifier. 0 = first identifier * @return a string, or NULL in case of error or missing name. */ const char *proj_get_id_code(const PJ *obj, int index) { if (!obj) { return nullptr; } auto identifiedObj = dynamic_cast(obj->iso_obj.get()); if (!identifiedObj) { return nullptr; } const auto &ids = identifiedObj->identifiers(); if (static_cast(index) >= ids.size()) { return nullptr; } return ids[index]->code().c_str(); } // --------------------------------------------------------------------------- /** \brief Get a WKT representation of an object. * * The returned string is valid while the input obj parameter is valid, * and until a next call to proj_as_wkt() with the same input object. * * This function calls osgeo::proj::io::IWKTExportable::exportToWKT(). * * This function may return NULL if the object is not compatible with an * export to the requested type. * * @param ctx PROJ context, or NULL for default context * @param obj Object (must not be NULL) * @param type WKT version. * @param options null-terminated list of options, or NULL. Currently * supported options are: *
    *
  • MULTILINE=YES/NO. Defaults to YES, except for WKT1_ESRI
  • *
  • INDENTATION_WIDTH=number. Defaults to 4 (when multiline output is * on).
  • *
  • OUTPUT_AXIS=AUTO/YES/NO. In AUTO mode, axis will be output for WKT2 * variants, for WKT1_GDAL for ProjectedCRS with easting/northing ordering * (otherwise stripped), but not for WKT1_ESRI. Setting to YES will output * them unconditionally, and to NO will omit them unconditionally.
  • *
  • STRICT=YES/NO. Default is YES. If NO, a Geographic 3D CRS can be for * example exported as WKT1_GDAL with 3 axes, whereas this is normally not * allowed.
  • *
  • ALLOW_ELLIPSOIDAL_HEIGHT_AS_VERTICAL_CRS=YES/NO. Default is NO. If set * to YES and type == PJ_WKT1_GDAL, a Geographic 3D CRS or a Projected 3D CRS * will be exported as a compound CRS whose vertical part represents an * ellipsoidal height (for example for use with LAS 1.4 WKT1).
  • *
  • ALLOW_LINUNIT_NODE=YES/NO. Default is YES starting with PROJ 9.1. * Only taken into account with type == PJ_WKT1_ESRI on a Geographic 3D * CRS.
  • *
* @return a string, or NULL in case of error. */ const char *proj_as_wkt(PJ_CONTEXT *ctx, const PJ *obj, PJ_WKT_TYPE type, const char *const *options) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto iWKTExportable = dynamic_cast(obj->iso_obj.get()); if (!iWKTExportable) { return nullptr; } const auto convention = ([](PJ_WKT_TYPE l_type) { switch (l_type) { case PJ_WKT2_2015: return WKTFormatter::Convention::WKT2_2015; case PJ_WKT2_2015_SIMPLIFIED: return WKTFormatter::Convention::WKT2_2015_SIMPLIFIED; case PJ_WKT2_2019: return WKTFormatter::Convention::WKT2_2019; case PJ_WKT2_2019_SIMPLIFIED: return WKTFormatter::Convention::WKT2_2019_SIMPLIFIED; case PJ_WKT1_GDAL: return WKTFormatter::Convention::WKT1_GDAL; case PJ_WKT1_ESRI: break; } return WKTFormatter::Convention::WKT1_ESRI; })(type); try { auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); auto formatter = WKTFormatter::create(convention, std::move(dbContext)); for (auto iter = options; iter && iter[0]; ++iter) { const char *value; if ((value = getOptionValue(*iter, "MULTILINE="))) { formatter->setMultiLine(ci_equal(value, "YES")); } else if ((value = getOptionValue(*iter, "INDENTATION_WIDTH="))) { formatter->setIndentationWidth(std::atoi(value)); } else if ((value = getOptionValue(*iter, "OUTPUT_AXIS="))) { if (!ci_equal(value, "AUTO")) { formatter->setOutputAxis( ci_equal(value, "YES") ? WKTFormatter::OutputAxisRule::YES : WKTFormatter::OutputAxisRule::NO); } } else if ((value = getOptionValue(*iter, "STRICT="))) { formatter->setStrict(ci_equal(value, "YES")); } else if ((value = getOptionValue( *iter, "ALLOW_ELLIPSOIDAL_HEIGHT_AS_VERTICAL_CRS="))) { formatter->setAllowEllipsoidalHeightAsVerticalCRS( ci_equal(value, "YES")); } else if ((value = getOptionValue(*iter, "ALLOW_LINUNIT_NODE="))) { formatter->setAllowLINUNITNode(ci_equal(value, "YES")); } else { std::string msg("Unknown option :"); msg += *iter; proj_log_error(ctx, __FUNCTION__, msg.c_str()); return nullptr; } } obj->lastWKT = iWKTExportable->exportToWKT(formatter.get()); return obj->lastWKT.c_str(); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Get a PROJ string representation of an object. * * The returned string is valid while the input obj parameter is valid, * and until a next call to proj_as_proj_string() with the same input * object. * * \warning If a CRS object was not created from a PROJ string, * exporting to a PROJ string will in most cases * cause a loss of information. This can potentially lead to * erroneous transformations. * * This function calls * osgeo::proj::io::IPROJStringExportable::exportToPROJString(). * * This function may return NULL if the object is not compatible with an * export to the requested type. * * @param ctx PROJ context, or NULL for default context * @param obj Object (must not be NULL) * @param type PROJ String version. * @param options NULL-terminated list of strings with "KEY=VALUE" format. or * NULL. Currently supported options are: *
    *
  • USE_APPROX_TMERC=YES to add the +approx flag to +proj=tmerc or * +proj=utm.
  • *
  • MULTILINE=YES/NO. Defaults to NO
  • *
  • INDENTATION_WIDTH=number. Defaults to 2 (when multiline output is * on).
  • *
  • MAX_LINE_LENGTH=number. Defaults to 80 (when multiline output is * on).
  • *
* @return a string, or NULL in case of error. */ const char *proj_as_proj_string(PJ_CONTEXT *ctx, const PJ *obj, PJ_PROJ_STRING_TYPE type, const char *const *options) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto exportable = dynamic_cast(obj->iso_obj.get()); if (!exportable) { proj_log_error(ctx, __FUNCTION__, "Object type not exportable to PROJ"); return nullptr; } // Make sure that the C and C++ enumeration match static_assert(static_cast(PJ_PROJ_5) == static_cast(PROJStringFormatter::Convention::PROJ_5), ""); static_assert(static_cast(PJ_PROJ_4) == static_cast(PROJStringFormatter::Convention::PROJ_4), ""); // Make sure we enumerate all values. If adding a new value, as we // don't have a default clause, the compiler will warn. switch (type) { case PJ_PROJ_5: case PJ_PROJ_4: break; } const PROJStringFormatter::Convention convention = static_cast(type); auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { auto formatter = PROJStringFormatter::create(convention, std::move(dbContext)); for (auto iter = options; iter && iter[0]; ++iter) { const char *value; if ((value = getOptionValue(*iter, "MULTILINE="))) { formatter->setMultiLine(ci_equal(value, "YES")); } else if ((value = getOptionValue(*iter, "INDENTATION_WIDTH="))) { formatter->setIndentationWidth(std::atoi(value)); } else if ((value = getOptionValue(*iter, "MAX_LINE_LENGTH="))) { formatter->setMaxLineLength(std::atoi(value)); } else if ((value = getOptionValue(*iter, "USE_APPROX_TMERC="))) { formatter->setUseApproxTMerc(ci_equal(value, "YES")); } else { std::string msg("Unknown option :"); msg += *iter; proj_log_error(ctx, __FUNCTION__, msg.c_str()); return nullptr; } } obj->lastPROJString = exportable->exportToPROJString(formatter.get()); return obj->lastPROJString.c_str(); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Get a PROJJSON string representation of an object. * * The returned string is valid while the input obj parameter is valid, * and until a next call to proj_as_proj_string() with the same input * object. * * This function calls * osgeo::proj::io::IJSONExportable::exportToJSON(). * * This function may return NULL if the object is not compatible with an * export to the requested type. * * @param ctx PROJ context, or NULL for default context * @param obj Object (must not be NULL) * @param options NULL-terminated list of strings with "KEY=VALUE" format. or * NULL. Currently * supported options are: *
    *
  • MULTILINE=YES/NO. Defaults to YES
  • *
  • INDENTATION_WIDTH=number. Defaults to 2 (when multiline output is * on).
  • *
  • SCHEMA=string. URL to PROJJSON schema. Can be set to empty string to * disable it.
  • *
* @return a string, or NULL in case of error. * * @since 6.2 */ const char *proj_as_projjson(PJ_CONTEXT *ctx, const PJ *obj, const char *const *options) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto exportable = dynamic_cast(obj->iso_obj.get()); if (!exportable) { proj_log_error(ctx, __FUNCTION__, "Object type not exportable to JSON"); return nullptr; } auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { auto formatter = JSONFormatter::create(std::move(dbContext)); for (auto iter = options; iter && iter[0]; ++iter) { const char *value; if ((value = getOptionValue(*iter, "MULTILINE="))) { formatter->setMultiLine(ci_equal(value, "YES")); } else if ((value = getOptionValue(*iter, "INDENTATION_WIDTH="))) { formatter->setIndentationWidth(std::atoi(value)); } else if ((value = getOptionValue(*iter, "SCHEMA="))) { formatter->setSchema(value); } else { std::string msg("Unknown option :"); msg += *iter; proj_log_error(ctx, __FUNCTION__, msg.c_str()); return nullptr; } } obj->lastJSONString = exportable->exportToJSON(formatter.get()); return obj->lastJSONString.c_str(); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Get the number of domains/usages for a given object. * * Most objects have a single domain/usage, but for some of them, there might * be multiple. * * @param obj Object (must not be NULL) * @return the number of domains, or 0 in case of error. * @since 9.2 */ int proj_get_domain_count(const PJ *obj) { if (!obj || !obj->iso_obj) { return 0; } auto objectUsage = dynamic_cast(obj->iso_obj.get()); if (!objectUsage) { return 0; } const auto &domains = objectUsage->domains(); return static_cast(domains.size()); } // --------------------------------------------------------------------------- /** \brief Get the scope of an object. * * In case of multiple usages, this will be the one of first usage. * * The lifetime of the returned string is the same as the input obj parameter. * * @param obj Object (must not be NULL) * @return a string, or NULL in case of error or missing scope. */ const char *proj_get_scope(const PJ *obj) { return proj_get_scope_ex(obj, 0); } // --------------------------------------------------------------------------- /** \brief Get the scope of an object. * * The lifetime of the returned string is the same as the input obj parameter. * * @param obj Object (must not be NULL) * @param domainIdx Index of the domain/usage. In [0,proj_get_domain_count(obj)[ * @return a string, or NULL in case of error or missing scope. * @since 9.2 */ const char *proj_get_scope_ex(const PJ *obj, int domainIdx) { if (!obj || !obj->iso_obj) { return nullptr; } auto objectUsage = dynamic_cast(obj->iso_obj.get()); if (!objectUsage) { return nullptr; } const auto &domains = objectUsage->domains(); if (domainIdx < 0 || static_cast(domainIdx) >= domains.size()) { return nullptr; } const auto &scope = domains[domainIdx]->scope(); if (!scope.has_value()) { return nullptr; } // The object will still be alive after the function call. // cppcheck-suppress stlcstr return scope->c_str(); } // --------------------------------------------------------------------------- /** \brief Return the area of use of an object. * * In case of multiple usages, this will be the one of first usage. * * @param ctx PROJ context, or NULL for default context * @param obj Object (must not be NULL) * @param out_west_lon_degree Pointer to a double to receive the west longitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_south_lat_degree Pointer to a double to receive the south latitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_east_lon_degree Pointer to a double to receive the east longitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_north_lat_degree Pointer to a double to receive the north latitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_area_name Pointer to a string to receive the name of the area of * use. Or NULL. *p_area_name is valid while obj is valid itself. * @return TRUE in case of success, FALSE in case of error or if the area * of use is unknown. */ int proj_get_area_of_use(PJ_CONTEXT *ctx, const PJ *obj, double *out_west_lon_degree, double *out_south_lat_degree, double *out_east_lon_degree, double *out_north_lat_degree, const char **out_area_name) { return proj_get_area_of_use_ex(ctx, obj, 0, out_west_lon_degree, out_south_lat_degree, out_east_lon_degree, out_north_lat_degree, out_area_name); } // --------------------------------------------------------------------------- /** \brief Return the area of use of an object. * * @param ctx PROJ context, or NULL for default context * @param obj Object (must not be NULL) * @param domainIdx Index of the domain/usage. In [0,proj_get_domain_count(obj)[ * @param out_west_lon_degree Pointer to a double to receive the west longitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_south_lat_degree Pointer to a double to receive the south latitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_east_lon_degree Pointer to a double to receive the east longitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_north_lat_degree Pointer to a double to receive the north latitude * (in degrees). Or NULL. If the returned value is -1000, the bounding box is * unknown. * @param out_area_name Pointer to a string to receive the name of the area of * use. Or NULL. *p_area_name is valid while obj is valid itself. * @return TRUE in case of success, FALSE in case of error or if the area * of use is unknown. */ int proj_get_area_of_use_ex(PJ_CONTEXT *ctx, const PJ *obj, int domainIdx, double *out_west_lon_degree, double *out_south_lat_degree, double *out_east_lon_degree, double *out_north_lat_degree, const char **out_area_name) { (void)ctx; if (out_area_name) { *out_area_name = nullptr; } auto objectUsage = dynamic_cast(obj->iso_obj.get()); if (!objectUsage) { return false; } const auto &domains = objectUsage->domains(); if (domainIdx < 0 || static_cast(domainIdx) >= domains.size()) { return false; } const auto &extent = domains[domainIdx]->domainOfValidity(); if (!extent) { return false; } const auto &desc = extent->description(); if (desc.has_value() && out_area_name) { *out_area_name = desc->c_str(); } const auto &geogElements = extent->geographicElements(); if (!geogElements.empty()) { auto bbox = dynamic_cast(geogElements[0].get()); if (bbox) { if (out_west_lon_degree) { *out_west_lon_degree = bbox->westBoundLongitude(); } if (out_south_lat_degree) { *out_south_lat_degree = bbox->southBoundLatitude(); } if (out_east_lon_degree) { *out_east_lon_degree = bbox->eastBoundLongitude(); } if (out_north_lat_degree) { *out_north_lat_degree = bbox->northBoundLatitude(); } return true; } } if (out_west_lon_degree) { *out_west_lon_degree = -1000; } if (out_south_lat_degree) { *out_south_lat_degree = -1000; } if (out_east_lon_degree) { *out_east_lon_degree = -1000; } if (out_north_lat_degree) { *out_north_lat_degree = -1000; } return true; } // --------------------------------------------------------------------------- static const GeodeticCRS *extractGeodeticCRS(PJ_CONTEXT *ctx, const PJ *crs, const char *fname) { if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, fname, "missing required input"); return nullptr; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, fname, "Object is not a CRS"); return nullptr; } auto geodCRS = l_crs->extractGeodeticCRSRaw(); if (!geodCRS) { proj_log_error(ctx, fname, "CRS has no geodetic CRS"); } return geodCRS; } // --------------------------------------------------------------------------- /** \brief Get the geodeticCRS / geographicCRS from a CRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type CRS (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_crs_get_geodetic_crs(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); auto geodCRS = extractGeodeticCRS(ctx, crs, __FUNCTION__); if (!geodCRS) { return nullptr; } return pj_obj_create(ctx, NN_NO_CHECK(nn_dynamic_pointer_cast( geodCRS->shared_from_this()))); } // --------------------------------------------------------------------------- /** \brief Returns whether a CRS is a derived CRS. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type CRS (must not be NULL) * @return TRUE if the CRS is a derived CRS. * @since 8.0 */ int proj_crs_is_derived(PJ_CONTEXT *ctx, const PJ *crs) { if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CRS"); return false; } return dynamic_cast(l_crs) != nullptr; } // --------------------------------------------------------------------------- /** \brief Get a CRS component from a CompoundCRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type CRS (must not be NULL) * @param index Index of the CRS component (typically 0 = horizontal, 1 = * vertical) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_crs_get_sub_crs(PJ_CONTEXT *ctx, const PJ *crs, int index) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CompoundCRS"); return nullptr; } const auto &components = l_crs->componentReferenceSystems(); if (static_cast(index) >= components.size()) { return nullptr; } return pj_obj_create(ctx, components[index]); } // --------------------------------------------------------------------------- /** \brief Returns a BoundCRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param base_crs Base CRS (must not be NULL) * @param hub_crs Hub CRS (must not be NULL) * @param transformation Transformation (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_crs_create_bound_crs(PJ_CONTEXT *ctx, const PJ *base_crs, const PJ *hub_crs, const PJ *transformation) { SANITIZE_CTX(ctx); if (!base_crs || !hub_crs || !transformation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_base_crs = std::dynamic_pointer_cast(base_crs->iso_obj); if (!l_base_crs) { proj_log_error(ctx, __FUNCTION__, "base_crs is not a CRS"); return nullptr; } auto l_hub_crs = std::dynamic_pointer_cast(hub_crs->iso_obj); if (!l_hub_crs) { proj_log_error(ctx, __FUNCTION__, "hub_crs is not a CRS"); return nullptr; } auto l_transformation = std::dynamic_pointer_cast(transformation->iso_obj); if (!l_transformation) { proj_log_error(ctx, __FUNCTION__, "transformation is not a CRS"); return nullptr; } try { return pj_obj_create(ctx, BoundCRS::create(NN_NO_CHECK(l_base_crs), NN_NO_CHECK(l_hub_crs), NN_NO_CHECK(l_transformation))); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Returns potentially * a BoundCRS, with a transformation to EPSG:4326, wrapping this CRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * This is the same as method * osgeo::proj::crs::CRS::createBoundCRSToWGS84IfPossible() * * @param ctx PROJ context, or NULL for default context * @param crs Object of type CRS (must not be NULL) * @param options null-terminated list of options, or NULL. Currently * supported options are: *
    *
  • ALLOW_INTERMEDIATE_CRS=ALWAYS/IF_NO_DIRECT_TRANSFORMATION/NEVER. Defaults * to NEVER. When set to ALWAYS/IF_NO_DIRECT_TRANSFORMATION, * intermediate CRS may be considered when computing the possible * transformations. Slower.
  • *
* @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_crs_create_bound_crs_to_WGS84(PJ_CONTEXT *ctx, const PJ *crs, const char *const *options) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CRS"); return nullptr; } auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { CoordinateOperationContext::IntermediateCRSUse allowIntermediateCRS = CoordinateOperationContext::IntermediateCRSUse::NEVER; for (auto iter = options; iter && iter[0]; ++iter) { const char *value; if ((value = getOptionValue(*iter, "ALLOW_INTERMEDIATE_CRS="))) { if (ci_equal(value, "YES") || ci_equal(value, "ALWAYS")) { allowIntermediateCRS = CoordinateOperationContext::IntermediateCRSUse::ALWAYS; } else if (ci_equal(value, "IF_NO_DIRECT_TRANSFORMATION")) { allowIntermediateCRS = CoordinateOperationContext:: IntermediateCRSUse::IF_NO_DIRECT_TRANSFORMATION; } } else { std::string msg("Unknown option :"); msg += *iter; proj_log_error(ctx, __FUNCTION__, msg.c_str()); return nullptr; } } return pj_obj_create(ctx, l_crs->createBoundCRSToWGS84IfPossible( dbContext, allowIntermediateCRS)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Returns a BoundCRS, with a transformation to a hub geographic 3D crs * (use EPSG:4979 for WGS84 for example), using a grid. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param vert_crs Object of type VerticalCRS (must not be NULL) * @param hub_geographic_3D_crs Object of type Geographic 3D CRS (must not be * NULL) * @param grid_name Grid name (typically a .gtx file) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. * @since 6.3 */ PJ *proj_crs_create_bound_vertical_crs(PJ_CONTEXT *ctx, const PJ *vert_crs, const PJ *hub_geographic_3D_crs, const char *grid_name) { SANITIZE_CTX(ctx); if (!vert_crs || !hub_geographic_3D_crs || !grid_name) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_crs = std::dynamic_pointer_cast(vert_crs->iso_obj); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "vert_crs is not a VerticalCRS"); return nullptr; } auto hub_crs = std::dynamic_pointer_cast(hub_geographic_3D_crs->iso_obj); if (!hub_crs) { proj_log_error(ctx, __FUNCTION__, "hub_geographic_3D_crs is not a CRS"); return nullptr; } try { auto nnCRS = NN_NO_CHECK(l_crs); auto nnHubCRS = NN_NO_CHECK(hub_crs); auto transformation = Transformation::createGravityRelatedHeightToGeographic3D( PropertyMap().set(IdentifiedObject::NAME_KEY, "unknown to " + hub_crs->nameStr() + " ellipsoidal height"), nnCRS, nnHubCRS, nullptr, std::string(grid_name), std::vector()); return pj_obj_create(ctx, BoundCRS::create(nnCRS, nnHubCRS, transformation)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Get the ellipsoid from a CRS or a GeodeticReferenceFrame. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS or GeodeticReferenceFrame (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_get_ellipsoid(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); auto ptr = obj->iso_obj.get(); if (dynamic_cast(ptr)) { auto geodCRS = extractGeodeticCRS(ctx, obj, __FUNCTION__); if (geodCRS) { return pj_obj_create(ctx, geodCRS->ellipsoid()); } } else { auto datum = dynamic_cast(ptr); if (datum) { return pj_obj_create(ctx, datum->ellipsoid()); } } proj_log_error(ctx, __FUNCTION__, "Object is not a CRS or GeodeticReferenceFrame"); return nullptr; } // --------------------------------------------------------------------------- /** \brief Get the name of the celestial body of this object. * * Object should be a CRS, Datum or Ellipsoid. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS, Datum or Ellipsoid.(must not be NULL) * @return the name of the celestial body, or NULL. * @since 8.1 */ const char *proj_get_celestial_body_name(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); const BaseObject *ptr = obj->iso_obj.get(); if (dynamic_cast(ptr)) { const auto geodCRS = extractGeodeticCRS(ctx, obj, __FUNCTION__); if (!geodCRS) { // FIXME when vertical CRS can be non-EARTH... return datum::Ellipsoid::EARTH.c_str(); } return geodCRS->ellipsoid()->celestialBody().c_str(); } const auto ensemble = dynamic_cast(ptr); if (ensemble) { ptr = ensemble->datums().front().get(); // Go on } const auto geodetic_datum = dynamic_cast(ptr); if (geodetic_datum) { return geodetic_datum->ellipsoid()->celestialBody().c_str(); } const auto vertical_datum = dynamic_cast(ptr); if (vertical_datum) { // FIXME when vertical CRS can be non-EARTH... return datum::Ellipsoid::EARTH.c_str(); } const auto ellipsoid = dynamic_cast(ptr); if (ellipsoid) { return ellipsoid->celestialBody().c_str(); } proj_log_error(ctx, __FUNCTION__, "Object is not a CRS, Datum or Ellipsoid"); return nullptr; } // --------------------------------------------------------------------------- /** \brief Get the horizontal datum from a CRS * * This function may return a Datum or DatumEnsemble object. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type CRS (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_crs_get_horizontal_datum(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); auto geodCRS = extractGeodeticCRS(ctx, crs, __FUNCTION__); if (!geodCRS) { return nullptr; } const auto &datum = geodCRS->datum(); if (datum) { return pj_obj_create(ctx, NN_NO_CHECK(datum)); } const auto &datumEnsemble = geodCRS->datumEnsemble(); if (datumEnsemble) { return pj_obj_create(ctx, NN_NO_CHECK(datumEnsemble)); } proj_log_error(ctx, __FUNCTION__, "CRS has no datum"); return nullptr; } // --------------------------------------------------------------------------- /** \brief Return ellipsoid parameters. * * @param ctx PROJ context, or NULL for default context * @param ellipsoid Object of type Ellipsoid (must not be NULL) * @param out_semi_major_metre Pointer to a value to store the semi-major axis * in * metre. or NULL * @param out_semi_minor_metre Pointer to a value to store the semi-minor axis * in * metre. or NULL * @param out_is_semi_minor_computed Pointer to a boolean value to indicate if * the * semi-minor value was computed. If FALSE, its value comes from the * definition. or NULL * @param out_inv_flattening Pointer to a value to store the inverse * flattening. or NULL * @return TRUE in case of success. */ int proj_ellipsoid_get_parameters(PJ_CONTEXT *ctx, const PJ *ellipsoid, double *out_semi_major_metre, double *out_semi_minor_metre, int *out_is_semi_minor_computed, double *out_inv_flattening) { SANITIZE_CTX(ctx); if (!ellipsoid) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return FALSE; } auto l_ellipsoid = dynamic_cast(ellipsoid->iso_obj.get()); if (!l_ellipsoid) { proj_log_error(ctx, __FUNCTION__, "Object is not a Ellipsoid"); return FALSE; } if (out_semi_major_metre) { *out_semi_major_metre = l_ellipsoid->semiMajorAxis().getSIValue(); } if (out_semi_minor_metre) { *out_semi_minor_metre = l_ellipsoid->computeSemiMinorAxis().getSIValue(); } if (out_is_semi_minor_computed) { *out_is_semi_minor_computed = !(l_ellipsoid->semiMinorAxis().has_value()); } if (out_inv_flattening) { *out_inv_flattening = l_ellipsoid->computedInverseFlattening(); } return TRUE; } // --------------------------------------------------------------------------- /** \brief Get the prime meridian of a CRS or a GeodeticReferenceFrame. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS or GeodeticReferenceFrame (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_get_prime_meridian(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); auto ptr = obj->iso_obj.get(); if (dynamic_cast(ptr)) { auto geodCRS = extractGeodeticCRS(ctx, obj, __FUNCTION__); if (geodCRS) { return pj_obj_create(ctx, geodCRS->primeMeridian()); } } else { auto datum = dynamic_cast(ptr); if (datum) { return pj_obj_create(ctx, datum->primeMeridian()); } } proj_log_error(ctx, __FUNCTION__, "Object is not a CRS or GeodeticReferenceFrame"); return nullptr; } // --------------------------------------------------------------------------- /** \brief Return prime meridian parameters. * * @param ctx PROJ context, or NULL for default context * @param prime_meridian Object of type PrimeMeridian (must not be NULL) * @param out_longitude Pointer to a value to store the longitude of the prime * meridian, in its native unit. or NULL * @param out_unit_conv_factor Pointer to a value to store the conversion * factor of the prime meridian longitude unit to radian. or NULL * @param out_unit_name Pointer to a string value to store the unit name. * or NULL * @return TRUE in case of success. */ int proj_prime_meridian_get_parameters(PJ_CONTEXT *ctx, const PJ *prime_meridian, double *out_longitude, double *out_unit_conv_factor, const char **out_unit_name) { SANITIZE_CTX(ctx); if (!prime_meridian) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto l_pm = dynamic_cast(prime_meridian->iso_obj.get()); if (!l_pm) { proj_log_error(ctx, __FUNCTION__, "Object is not a PrimeMeridian"); return false; } const auto &longitude = l_pm->longitude(); if (out_longitude) { *out_longitude = longitude.value(); } const auto &unit = longitude.unit(); if (out_unit_conv_factor) { *out_unit_conv_factor = unit.conversionToSI(); } if (out_unit_name) { *out_unit_name = unit.name().c_str(); } return true; } // --------------------------------------------------------------------------- /** \brief Return the base CRS of a BoundCRS or a DerivedCRS/ProjectedCRS, or * the source CRS of a CoordinateOperation, or the CRS of a CoordinateMetadata. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type BoundCRS or CoordinateOperation (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error, or missing source CRS. */ PJ *proj_get_source_crs(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { return nullptr; } auto ptr = obj->iso_obj.get(); auto boundCRS = dynamic_cast(ptr); if (boundCRS) { return pj_obj_create(ctx, boundCRS->baseCRS()); } auto derivedCRS = dynamic_cast(ptr); if (derivedCRS) { return pj_obj_create(ctx, derivedCRS->baseCRS()); } auto co = dynamic_cast(ptr); if (co) { auto sourceCRS = co->sourceCRS(); if (sourceCRS) { return pj_obj_create(ctx, NN_NO_CHECK(sourceCRS)); } return nullptr; } if (!obj->alternativeCoordinateOperations.empty()) { return proj_get_source_crs(ctx, obj->alternativeCoordinateOperations[0].pj); } auto coordinateMetadata = dynamic_cast(ptr); if (coordinateMetadata) { return pj_obj_create(ctx, coordinateMetadata->crs()); } proj_log_error(ctx, __FUNCTION__, "Object is not a BoundCRS, a CoordinateOperation or a " "CoordinateMetadata"); return nullptr; } // --------------------------------------------------------------------------- /** \brief Return the hub CRS of a BoundCRS or the target CRS of a * CoordinateOperation. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type BoundCRS or CoordinateOperation (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error, or missing target CRS. */ PJ *proj_get_target_crs(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto ptr = obj->iso_obj.get(); auto boundCRS = dynamic_cast(ptr); if (boundCRS) { return pj_obj_create(ctx, boundCRS->hubCRS()); } auto co = dynamic_cast(ptr); if (co) { auto targetCRS = co->targetCRS(); if (targetCRS) { return pj_obj_create(ctx, NN_NO_CHECK(targetCRS)); } return nullptr; } if (!obj->alternativeCoordinateOperations.empty()) { return proj_get_target_crs(ctx, obj->alternativeCoordinateOperations[0].pj); } proj_log_error(ctx, __FUNCTION__, "Object is not a BoundCRS or a CoordinateOperation"); return nullptr; } // --------------------------------------------------------------------------- /** \brief Identify the CRS with reference CRSs. * * The candidate CRSs are either hard-coded, or looked in the database when * it is available. * * Note that the implementation uses a set of heuristics to have a good * compromise of successful identifications over execution time. It might miss * legitimate matches in some circumstances. * * The method returns a list of matching reference CRS, and the percentage * (0-100) of confidence in the match. The list is sorted by decreasing * confidence. *
    *
  • 100% means that the name of the reference entry * perfectly matches the CRS name, and both are equivalent. In which case a * single result is returned. * Note: in the case of a GeographicCRS whose axis * order is implicit in the input definition (for example ESRI WKT), then axis * order is ignored for the purpose of identification. That is the CRS built * from * GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]], * PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] * will be identified to EPSG:4326, but will not pass a * isEquivalentTo(EPSG_4326, util::IComparable::Criterion::EQUIVALENT) test, * but rather isEquivalentTo(EPSG_4326, * util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS) *
  • *
  • 90% means that CRS are equivalent, but the names are not exactly the * same.
  • *
  • 70% means that CRS are equivalent, but the names are not equivalent. *
  • *
  • 25% means that the CRS are not equivalent, but there is some similarity * in * the names.
  • *
* Other confidence values may be returned by some specialized implementations. * * This is implemented for GeodeticCRS, ProjectedCRS, VerticalCRS and * CompoundCRS. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS. Must not be NULL * @param auth_name Authority name, or NULL for all authorities * @param options Placeholder for future options. Should be set to NULL. * @param out_confidence Output parameter. Pointer to an array of integers that * will be allocated by the function and filled with the confidence values * (0-100). There are as many elements in this array as * proj_list_get_count() * returns on the return value of this function. *confidence should be * released with proj_int_list_destroy(). * @return a list of matching reference CRS, or nullptr in case of error. */ PJ_OBJ_LIST *proj_identify(PJ_CONTEXT *ctx, const PJ *obj, const char *auth_name, const char *const *options, int **out_confidence) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } (void)options; if (out_confidence) { *out_confidence = nullptr; } auto ptr = obj->iso_obj.get(); auto crs = dynamic_cast(ptr); if (!crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CRS"); } else { int *confidenceTemp = nullptr; try { auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name ? auth_name : ""); auto res = crs->identify(factory); std::vector objects; confidenceTemp = out_confidence ? new int[res.size()] : nullptr; size_t i = 0; for (const auto &pair : res) { objects.push_back(pair.first); if (confidenceTemp) { confidenceTemp[i] = pair.second; ++i; } } auto ret = std::make_unique(std::move(objects)); if (out_confidence) { *out_confidence = confidenceTemp; confidenceTemp = nullptr; } return ret.release(); } catch (const std::exception &e) { delete[] confidenceTemp; proj_log_error(ctx, __FUNCTION__, e.what()); } } return nullptr; } // --------------------------------------------------------------------------- /** \brief Free an array of integer. */ void proj_int_list_destroy(int *list) { delete[] list; } // --------------------------------------------------------------------------- /** \brief Return the list of authorities used in the database. * * The returned list is NULL terminated and must be freed with * proj_string_list_destroy(). * * @param ctx PROJ context, or NULL for default context * * @return a NULL terminated list of NUL-terminated strings that must be * freed with proj_string_list_destroy(), or NULL in case of error. */ PROJ_STRING_LIST proj_get_authorities_from_database(PJ_CONTEXT *ctx) { SANITIZE_CTX(ctx); try { auto ret = to_string_list(getDBcontext(ctx)->getAuthorities()); return ret; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Returns the set of authority codes of the given object type. * * The returned list is NULL terminated and must be freed with * proj_string_list_destroy(). * * @param ctx PROJ context, or NULL for default context. * @param auth_name Authority name (must not be NULL) * @param type Object type. * @param allow_deprecated whether we should return deprecated objects as well. * * @return a NULL terminated list of NUL-terminated strings that must be * freed with proj_string_list_destroy(), or NULL in case of error. * * @see proj_get_crs_info_list_from_database() */ PROJ_STRING_LIST proj_get_codes_from_database(PJ_CONTEXT *ctx, const char *auth_name, PJ_TYPE type, int allow_deprecated) { SANITIZE_CTX(ctx); if (!auth_name) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } try { auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name); bool valid = false; auto typeInternal = convertPJObjectTypeToObjectType(type, valid); if (!valid) { return nullptr; } auto ret = to_string_list( factory->getAuthorityCodes(typeInternal, allow_deprecated != 0)); return ret; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Enumerate celestial bodies from the database. * * The returned object is an array of PROJ_CELESTIAL_BODY_INFO* pointers, whose * last entry is NULL. This array should be freed with * proj_celestial_body_list_destroy() * * @param ctx PROJ context, or NULL for default context * @param auth_name Authority name, used to restrict the search. * Or NULL for all authorities. * @param out_result_count Output parameter pointing to an integer to receive * the size of the result list. Might be NULL * @return an array of PROJ_CELESTIAL_BODY_INFO* pointers to be freed with * proj_celestial_body_list_destroy(), or NULL in case of error. * @since 8.1 */ PROJ_CELESTIAL_BODY_INFO **proj_get_celestial_body_list_from_database( PJ_CONTEXT *ctx, const char *auth_name, int *out_result_count) { SANITIZE_CTX(ctx); PROJ_CELESTIAL_BODY_INFO **ret = nullptr; int i = 0; try { auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name ? auth_name : ""); auto list = factory->getCelestialBodyList(); ret = new PROJ_CELESTIAL_BODY_INFO *[list.size() + 1]; for (const auto &info : list) { ret[i] = new PROJ_CELESTIAL_BODY_INFO; ret[i]->auth_name = pj_strdup(info.authName.c_str()); ret[i]->name = pj_strdup(info.name.c_str()); i++; } ret[i] = nullptr; if (out_result_count) *out_result_count = i; return ret; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); if (ret) { ret[i + 1] = nullptr; proj_celestial_body_list_destroy(ret); } if (out_result_count) *out_result_count = 0; } return nullptr; } // --------------------------------------------------------------------------- /** \brief Destroy the result returned by * proj_get_celestial_body_list_from_database(). * * @since 8.1 */ void proj_celestial_body_list_destroy(PROJ_CELESTIAL_BODY_INFO **list) { if (list) { for (int i = 0; list[i] != nullptr; i++) { free(list[i]->auth_name); free(list[i]->name); delete list[i]; } delete[] list; } } // --------------------------------------------------------------------------- /** Free a list of NULL terminated strings. */ void proj_string_list_destroy(PROJ_STRING_LIST list) { if (list) { for (size_t i = 0; list[i] != nullptr; i++) { delete[] list[i]; } delete[] list; } } // --------------------------------------------------------------------------- /** \brief Instantiate a default set of parameters to be used by * proj_get_crs_list(). * * @return a new object to free with proj_get_crs_list_parameters_destroy() */ PROJ_CRS_LIST_PARAMETERS *proj_get_crs_list_parameters_create() { auto ret = new (std::nothrow) PROJ_CRS_LIST_PARAMETERS(); if (ret) { ret->types = nullptr; ret->typesCount = 0; ret->crs_area_of_use_contains_bbox = TRUE; ret->bbox_valid = FALSE; ret->west_lon_degree = 0.0; ret->south_lat_degree = 0.0; ret->east_lon_degree = 0.0; ret->north_lat_degree = 0.0; ret->allow_deprecated = FALSE; ret->celestial_body_name = nullptr; } return ret; } // --------------------------------------------------------------------------- /** \brief Destroy an object returned by proj_get_crs_list_parameters_create() */ void proj_get_crs_list_parameters_destroy(PROJ_CRS_LIST_PARAMETERS *params) { delete params; } // --------------------------------------------------------------------------- /** \brief Enumerate CRS objects from the database, taking into account various * criteria. * * The returned object is an array of PROJ_CRS_INFO* pointers, whose last * entry is NULL. This array should be freed with proj_crs_info_list_destroy() * * When no filter parameters are set, this is functionally equivalent to * proj_get_codes_from_database(), instantiating a PJ* object for each * of the codes with proj_create_from_database() and retrieving information * with the various getters. However this function will be much faster. * * @param ctx PROJ context, or NULL for default context * @param auth_name Authority name, used to restrict the search. * Or NULL for all authorities. * @param params Additional criteria, or NULL. If not-NULL, params SHOULD * have been allocated by proj_get_crs_list_parameters_create(), as the * PROJ_CRS_LIST_PARAMETERS structure might grow over time. * @param out_result_count Output parameter pointing to an integer to receive * the size of the result list. Might be NULL * @return an array of PROJ_CRS_INFO* pointers to be freed with * proj_crs_info_list_destroy(), or NULL in case of error. */ PROJ_CRS_INFO ** proj_get_crs_info_list_from_database(PJ_CONTEXT *ctx, const char *auth_name, const PROJ_CRS_LIST_PARAMETERS *params, int *out_result_count) { SANITIZE_CTX(ctx); PROJ_CRS_INFO **ret = nullptr; int i = 0; try { auto dbContext = getDBcontext(ctx); std::string authName = auth_name ? auth_name : ""; auto actualAuthNames = dbContext->getVersionedAuthoritiesFromName(authName); if (actualAuthNames.empty()) actualAuthNames.push_back(std::move(authName)); std::list concatList; for (const auto &actualAuthName : actualAuthNames) { auto factory = AuthorityFactory::create(dbContext, actualAuthName); auto list = factory->getCRSInfoList(); concatList.splice(concatList.end(), std::move(list)); } ret = new PROJ_CRS_INFO *[concatList.size() + 1]; GeographicBoundingBoxPtr bbox; if (params && params->bbox_valid) { bbox = GeographicBoundingBox::create( params->west_lon_degree, params->south_lat_degree, params->east_lon_degree, params->north_lat_degree) .as_nullable(); } for (const auto &info : concatList) { auto type = PJ_TYPE_CRS; if (info.type == AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS) { type = PJ_TYPE_GEOGRAPHIC_2D_CRS; } else if (info.type == AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS) { type = PJ_TYPE_GEOGRAPHIC_3D_CRS; } else if (info.type == AuthorityFactory::ObjectType::GEOCENTRIC_CRS) { type = PJ_TYPE_GEOCENTRIC_CRS; } else if (info.type == AuthorityFactory::ObjectType::GEODETIC_CRS) { type = PJ_TYPE_GEODETIC_CRS; } else if (info.type == AuthorityFactory::ObjectType::PROJECTED_CRS) { type = PJ_TYPE_PROJECTED_CRS; } else if (info.type == AuthorityFactory::ObjectType::VERTICAL_CRS) { type = PJ_TYPE_VERTICAL_CRS; } else if (info.type == AuthorityFactory::ObjectType::COMPOUND_CRS) { type = PJ_TYPE_COMPOUND_CRS; } if (params && params->typesCount) { bool typeValid = false; for (size_t j = 0; j < params->typesCount; j++) { if (params->types[j] == type) { typeValid = true; break; } else if (params->types[j] == PJ_TYPE_GEOGRAPHIC_CRS && (type == PJ_TYPE_GEOGRAPHIC_2D_CRS || type == PJ_TYPE_GEOGRAPHIC_3D_CRS)) { typeValid = true; break; } else if (params->types[j] == PJ_TYPE_GEODETIC_CRS && (type == PJ_TYPE_GEOCENTRIC_CRS || type == PJ_TYPE_GEOGRAPHIC_2D_CRS || type == PJ_TYPE_GEOGRAPHIC_3D_CRS)) { typeValid = true; break; } } if (!typeValid) { continue; } } if (params && !params->allow_deprecated && info.deprecated) { continue; } if (params && params->bbox_valid) { if (!info.bbox_valid) { continue; } if (info.west_lon_degree <= info.east_lon_degree && params->west_lon_degree <= params->east_lon_degree) { if (params->crs_area_of_use_contains_bbox) { if (params->west_lon_degree < info.west_lon_degree || params->east_lon_degree > info.east_lon_degree || params->south_lat_degree < info.south_lat_degree || params->north_lat_degree > info.north_lat_degree) { continue; } } else { if (info.east_lon_degree < params->west_lon_degree || info.west_lon_degree > params->east_lon_degree || info.north_lat_degree < params->south_lat_degree || info.south_lat_degree > params->north_lat_degree) { continue; } } } else { auto crsExtent = GeographicBoundingBox::create( info.west_lon_degree, info.south_lat_degree, info.east_lon_degree, info.north_lat_degree); if (params->crs_area_of_use_contains_bbox) { if (!crsExtent->contains(NN_NO_CHECK(bbox))) { continue; } } else { if (!bbox->intersects(crsExtent)) { continue; } } } } if (params && params->celestial_body_name && params->celestial_body_name != info.celestialBodyName) { continue; } ret[i] = new PROJ_CRS_INFO; ret[i]->auth_name = pj_strdup(info.authName.c_str()); ret[i]->code = pj_strdup(info.code.c_str()); ret[i]->name = pj_strdup(info.name.c_str()); ret[i]->type = type; ret[i]->deprecated = info.deprecated; ret[i]->bbox_valid = info.bbox_valid; ret[i]->west_lon_degree = info.west_lon_degree; ret[i]->south_lat_degree = info.south_lat_degree; ret[i]->east_lon_degree = info.east_lon_degree; ret[i]->north_lat_degree = info.north_lat_degree; ret[i]->area_name = pj_strdup(info.areaName.c_str()); ret[i]->projection_method_name = info.projectionMethodName.empty() ? nullptr : pj_strdup(info.projectionMethodName.c_str()); ret[i]->celestial_body_name = pj_strdup(info.celestialBodyName.c_str()); i++; } ret[i] = nullptr; if (out_result_count) *out_result_count = i; return ret; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); if (ret) { ret[i + 1] = nullptr; proj_crs_info_list_destroy(ret); } if (out_result_count) *out_result_count = 0; } return nullptr; } // --------------------------------------------------------------------------- /** \brief Destroy the result returned by * proj_get_crs_info_list_from_database(). */ void proj_crs_info_list_destroy(PROJ_CRS_INFO **list) { if (list) { for (int i = 0; list[i] != nullptr; i++) { free(list[i]->auth_name); free(list[i]->code); free(list[i]->name); free(list[i]->area_name); free(list[i]->projection_method_name); free(list[i]->celestial_body_name); delete list[i]; } delete[] list; } } // --------------------------------------------------------------------------- /** \brief Enumerate units from the database, taking into account various * criteria. * * The returned object is an array of PROJ_UNIT_INFO* pointers, whose last * entry is NULL. This array should be freed with proj_unit_list_destroy() * * @param ctx PROJ context, or NULL for default context * @param auth_name Authority name, used to restrict the search. * Or NULL for all authorities. * @param category Filter by category, if this parameter is not NULL. Category * is one of "linear", "linear_per_time", "angular", "angular_per_time", * "scale", "scale_per_time" or "time" * @param allow_deprecated whether we should return deprecated objects as well. * @param out_result_count Output parameter pointing to an integer to receive * the size of the result list. Might be NULL * @return an array of PROJ_UNIT_INFO* pointers to be freed with * proj_unit_list_destroy(), or NULL in case of error. * * @since 7.1 */ PROJ_UNIT_INFO **proj_get_units_from_database(PJ_CONTEXT *ctx, const char *auth_name, const char *category, int allow_deprecated, int *out_result_count) { SANITIZE_CTX(ctx); PROJ_UNIT_INFO **ret = nullptr; int i = 0; try { auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name ? auth_name : ""); auto list = factory->getUnitList(); ret = new PROJ_UNIT_INFO *[list.size() + 1]; for (const auto &info : list) { if (category && info.category != category) { continue; } if (!allow_deprecated && info.deprecated) { continue; } ret[i] = new PROJ_UNIT_INFO; ret[i]->auth_name = pj_strdup(info.authName.c_str()); ret[i]->code = pj_strdup(info.code.c_str()); ret[i]->name = pj_strdup(info.name.c_str()); ret[i]->category = pj_strdup(info.category.c_str()); ret[i]->conv_factor = info.convFactor; ret[i]->proj_short_name = info.projShortName.empty() ? nullptr : pj_strdup(info.projShortName.c_str()); ret[i]->deprecated = info.deprecated; i++; } ret[i] = nullptr; if (out_result_count) *out_result_count = i; return ret; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); if (ret) { ret[i + 1] = nullptr; proj_unit_list_destroy(ret); } if (out_result_count) *out_result_count = 0; } return nullptr; } // --------------------------------------------------------------------------- /** \brief Destroy the result returned by * proj_get_units_from_database(). * * @since 7.1 */ void proj_unit_list_destroy(PROJ_UNIT_INFO **list) { if (list) { for (int i = 0; list[i] != nullptr; i++) { free(list[i]->auth_name); free(list[i]->code); free(list[i]->name); free(list[i]->category); free(list[i]->proj_short_name); delete list[i]; } delete[] list; } } // --------------------------------------------------------------------------- /** \brief Return the Conversion of a DerivedCRS (such as a ProjectedCRS), * or the Transformation from the baseCRS to the hubCRS of a BoundCRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type DerivedCRS or BoundCRSs (must not be NULL) * @return Object of type SingleOperation that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_crs_get_coordoperation(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } SingleOperationPtr co; auto derivedCRS = dynamic_cast(crs->iso_obj.get()); if (derivedCRS) { co = derivedCRS->derivingConversion().as_nullable(); } else { auto boundCRS = dynamic_cast(crs->iso_obj.get()); if (boundCRS) { co = boundCRS->transformation().as_nullable(); } else { proj_log_error(ctx, __FUNCTION__, "Object is not a DerivedCRS or BoundCRS"); return nullptr; } } return pj_obj_create(ctx, NN_NO_CHECK(co)); } // --------------------------------------------------------------------------- /** \brief Return information on the operation method of the SingleOperation. * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type SingleOperation (typically a Conversion * or Transformation) (must not be NULL) * @param out_method_name Pointer to a string value to store the method * (projection) name. or NULL * @param out_method_auth_name Pointer to a string value to store the method * authority name. or NULL * @param out_method_code Pointer to a string value to store the method * code. or NULL * @return TRUE in case of success. */ int proj_coordoperation_get_method_info(PJ_CONTEXT *ctx, const PJ *coordoperation, const char **out_method_name, const char **out_method_auth_name, const char **out_method_code) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto singleOp = dynamic_cast(coordoperation->iso_obj.get()); if (!singleOp) { proj_log_error(ctx, __FUNCTION__, "Object is not a DerivedCRS or BoundCRS"); return false; } const auto &method = singleOp->method(); const auto &method_ids = method->identifiers(); if (out_method_name) { *out_method_name = method->name()->description()->c_str(); } if (out_method_auth_name) { if (!method_ids.empty()) { *out_method_auth_name = method_ids[0]->codeSpace()->c_str(); } else { *out_method_auth_name = nullptr; } } if (out_method_code) { if (!method_ids.empty()) { *out_method_code = method_ids[0]->code().c_str(); } else { *out_method_code = nullptr; } } return true; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static PropertyMap createPropertyMapName(const char *c_name, const char *auth_name = nullptr, const char *code = nullptr) { std::string name(c_name ? c_name : "unnamed"); PropertyMap properties; if (ends_with(name, " (deprecated)")) { name.resize(name.size() - strlen(" (deprecated)")); properties.set(common::IdentifiedObject::DEPRECATED_KEY, true); } if (auth_name && code) { properties.set(metadata::Identifier::CODESPACE_KEY, auth_name); properties.set(metadata::Identifier::CODE_KEY, code); } return properties.set(common::IdentifiedObject::NAME_KEY, name); } // --------------------------------------------------------------------------- static UnitOfMeasure createLinearUnit(const char *name, double convFactor, const char *unit_auth_name = nullptr, const char *unit_code = nullptr) { return name == nullptr ? UnitOfMeasure::METRE : UnitOfMeasure(name, convFactor, UnitOfMeasure::Type::LINEAR, unit_auth_name ? unit_auth_name : "", unit_code ? unit_code : ""); } // --------------------------------------------------------------------------- static UnitOfMeasure createAngularUnit(const char *name, double convFactor, const char *unit_auth_name = nullptr, const char *unit_code = nullptr) { return name ? (ci_equal(name, "degree") ? UnitOfMeasure::DEGREE : ci_equal(name, "grad") ? UnitOfMeasure::GRAD : UnitOfMeasure(name, convFactor, UnitOfMeasure::Type::ANGULAR, unit_auth_name ? unit_auth_name : "", unit_code ? unit_code : "")) : UnitOfMeasure::DEGREE; } // --------------------------------------------------------------------------- static GeodeticReferenceFrameNNPtr createGeodeticReferenceFrame( PJ_CONTEXT *ctx, const char *datum_name, const char *ellps_name, double semi_major_metre, double inv_flattening, const char *prime_meridian_name, double prime_meridian_offset, const char *angular_units, double angular_units_conv) { const UnitOfMeasure angUnit( createAngularUnit(angular_units, angular_units_conv)); auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); auto body = Ellipsoid::guessBodyName(dbContext, semi_major_metre); auto ellpsName = createPropertyMapName(ellps_name); auto ellps = inv_flattening != 0.0 ? Ellipsoid::createFlattenedSphere( ellpsName, Length(semi_major_metre), Scale(inv_flattening), body) : Ellipsoid::createSphere(ellpsName, Length(semi_major_metre), body); auto pm = PrimeMeridian::create( PropertyMap().set( common::IdentifiedObject::NAME_KEY, prime_meridian_name ? prime_meridian_name : prime_meridian_offset == 0.0 ? (ellps->celestialBody() == Ellipsoid::EARTH ? PrimeMeridian::GREENWICH->nameStr().c_str() : PrimeMeridian::REFERENCE_MERIDIAN->nameStr().c_str()) : "unnamed"), Angle(prime_meridian_offset, angUnit)); std::string datumName(datum_name ? datum_name : "unnamed"); if (datumName == "WGS_1984") { datumName = GeodeticReferenceFrame::EPSG_6326->nameStr(); } else if (datumName.find('_') != std::string::npos) { // Likely coming from WKT1 if (dbContext) { auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext), std::string()); auto res = authFactory->createObjectsFromName( datumName, {AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME}, true, 1); if (!res.empty()) { const auto &refDatum = res.front(); if (metadata::Identifier::isEquivalentName( datumName.c_str(), refDatum->nameStr().c_str())) { datumName = refDatum->nameStr(); } else if (refDatum->identifiers().size() == 1) { const auto &id = refDatum->identifiers()[0]; const auto aliases = authFactory->databaseContext()->getAliases( *id->codeSpace(), id->code(), refDatum->nameStr(), "geodetic_datum", std::string()); for (const auto &alias : aliases) { if (metadata::Identifier::isEquivalentName( datumName.c_str(), alias.c_str())) { datumName = refDatum->nameStr(); break; } } } } } } return GeodeticReferenceFrame::create( createPropertyMapName(datumName.c_str()), ellps, util::optional(), pm); } //! @endcond // --------------------------------------------------------------------------- /** \brief Create a GeographicCRS. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param datum_name Name of the GeodeticReferenceFrame. Or NULL * @param ellps_name Name of the Ellipsoid. Or NULL * @param semi_major_metre Ellipsoid semi-major axis, in metres. * @param inv_flattening Ellipsoid inverse flattening. Or 0 for a sphere. * @param prime_meridian_name Name of the PrimeMeridian. Or NULL * @param prime_meridian_offset Offset of the prime meridian, expressed in the * specified angular units. * @param pm_angular_units Name of the angular units. Or NULL for Degree * @param pm_angular_units_conv Conversion factor from the angular unit to * radian. * Or * 0 for Degree if pm_angular_units == NULL. Otherwise should be not NULL * @param ellipsoidal_cs Coordinate system. Must not be NULL. * * @return Object of type GeographicCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_geographic_crs(PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *ellps_name, double semi_major_metre, double inv_flattening, const char *prime_meridian_name, double prime_meridian_offset, const char *pm_angular_units, double pm_angular_units_conv, const PJ *ellipsoidal_cs) { SANITIZE_CTX(ctx); auto cs = std::dynamic_pointer_cast(ellipsoidal_cs->iso_obj); if (!cs) { return nullptr; } try { auto datum = createGeodeticReferenceFrame( ctx, datum_name, ellps_name, semi_major_metre, inv_flattening, prime_meridian_name, prime_meridian_offset, pm_angular_units, pm_angular_units_conv); auto geogCRS = GeographicCRS::create(createPropertyMapName(crs_name), datum, NN_NO_CHECK(cs)); return pj_obj_create(ctx, geogCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Create a GeographicCRS. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param datum_or_datum_ensemble Datum or DatumEnsemble (DatumEnsemble possible * since 7.2). Must not be NULL. * @param ellipsoidal_cs Coordinate system. Must not be NULL. * * @return Object of type GeographicCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_geographic_crs_from_datum(PJ_CONTEXT *ctx, const char *crs_name, const PJ *datum_or_datum_ensemble, const PJ *ellipsoidal_cs) { SANITIZE_CTX(ctx); if (datum_or_datum_ensemble == nullptr) { proj_log_error(ctx, __FUNCTION__, "Missing input datum_or_datum_ensemble"); return nullptr; } auto l_datum = std::dynamic_pointer_cast( datum_or_datum_ensemble->iso_obj); auto l_datum_ensemble = std::dynamic_pointer_cast( datum_or_datum_ensemble->iso_obj); auto cs = std::dynamic_pointer_cast(ellipsoidal_cs->iso_obj); if (!cs) { return nullptr; } try { auto geogCRS = GeographicCRS::create(createPropertyMapName(crs_name), l_datum, l_datum_ensemble, NN_NO_CHECK(cs)); return pj_obj_create(ctx, geogCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Create a GeodeticCRS of geocentric type. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param datum_name Name of the GeodeticReferenceFrame. Or NULL * @param ellps_name Name of the Ellipsoid. Or NULL * @param semi_major_metre Ellipsoid semi-major axis, in metres. * @param inv_flattening Ellipsoid inverse flattening. Or 0 for a sphere. * @param prime_meridian_name Name of the PrimeMeridian. Or NULL * @param prime_meridian_offset Offset of the prime meridian, expressed in the * specified angular units. * @param angular_units Name of the angular units. Or NULL for Degree * @param angular_units_conv Conversion factor from the angular unit to radian. * Or * 0 for Degree if angular_units == NULL. Otherwise should be not NULL * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL * * @return Object of type GeodeticCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_geocentric_crs( PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *ellps_name, double semi_major_metre, double inv_flattening, const char *prime_meridian_name, double prime_meridian_offset, const char *angular_units, double angular_units_conv, const char *linear_units, double linear_units_conv) { SANITIZE_CTX(ctx); try { const UnitOfMeasure linearUnit( createLinearUnit(linear_units, linear_units_conv)); auto datum = createGeodeticReferenceFrame( ctx, datum_name, ellps_name, semi_major_metre, inv_flattening, prime_meridian_name, prime_meridian_offset, angular_units, angular_units_conv); auto geodCRS = GeodeticCRS::create(createPropertyMapName(crs_name), datum, cs::CartesianCS::createGeocentric(linearUnit)); return pj_obj_create(ctx, geodCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Create a GeodeticCRS of geocentric type. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param datum_or_datum_ensemble Datum or DatumEnsemble (DatumEnsemble possible * since 7.2). Must not be NULL. * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL * * @return Object of type GeodeticCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_geocentric_crs_from_datum(PJ_CONTEXT *ctx, const char *crs_name, const PJ *datum_or_datum_ensemble, const char *linear_units, double linear_units_conv) { SANITIZE_CTX(ctx); if (datum_or_datum_ensemble == nullptr) { proj_log_error(ctx, __FUNCTION__, "Missing input datum_or_datum_ensemble"); return nullptr; } auto l_datum = std::dynamic_pointer_cast( datum_or_datum_ensemble->iso_obj); auto l_datum_ensemble = std::dynamic_pointer_cast( datum_or_datum_ensemble->iso_obj); try { const UnitOfMeasure linearUnit( createLinearUnit(linear_units, linear_units_conv)); auto geodCRS = GeodeticCRS::create( createPropertyMapName(crs_name), l_datum, l_datum_ensemble, cs::CartesianCS::createGeocentric(linearUnit)); return pj_obj_create(ctx, geodCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Create a DerivedGeograhicCRS. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param base_geographic_crs Base Geographic CRS. Must not be NULL. * @param conversion Conversion from the base Geographic to the * DerivedGeograhicCRS. Must not be NULL. * @param ellipsoidal_cs Coordinate system. Must not be NULL. * * @return Object of type GeodeticCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. * * @since 7.0 */ PJ *proj_create_derived_geographic_crs(PJ_CONTEXT *ctx, const char *crs_name, const PJ *base_geographic_crs, const PJ *conversion, const PJ *ellipsoidal_cs) { SANITIZE_CTX(ctx); auto base_crs = std::dynamic_pointer_cast(base_geographic_crs->iso_obj); auto conversion_cpp = std::dynamic_pointer_cast(conversion->iso_obj); auto cs = std::dynamic_pointer_cast(ellipsoidal_cs->iso_obj); if (!base_crs || !conversion_cpp || !cs) { return nullptr; } try { auto derivedCRS = DerivedGeographicCRS::create( createPropertyMapName(crs_name), NN_NO_CHECK(base_crs), NN_NO_CHECK(conversion_cpp), NN_NO_CHECK(cs)); return pj_obj_create(ctx, derivedCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Return whether a CRS is a Derived CRS. * * @param ctx PROJ context, or NULL for default context * @param crs CRS. Must not be NULL. * * @return whether a CRS is a Derived CRS. * * @since 7.0 */ int proj_is_derived_crs(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); return dynamic_cast(crs->iso_obj.get()) != nullptr; } // --------------------------------------------------------------------------- /** \brief Create a VerticalCRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param datum_name Name of the VerticalReferenceFrame. Or NULL * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL * * @return Object of type VerticalCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_vertical_crs(PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *linear_units, double linear_units_conv) { return proj_create_vertical_crs_ex( ctx, crs_name, datum_name, nullptr, nullptr, linear_units, linear_units_conv, nullptr, nullptr, nullptr, nullptr, nullptr); } // --------------------------------------------------------------------------- /** \brief Create a VerticalCRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * This is an extended (_ex) version of proj_create_vertical_crs() that adds * the capability of defining a geoid model. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param datum_name Name of the VerticalReferenceFrame. Or NULL * @param datum_auth_name Authority name of the VerticalReferenceFrame. Or NULL * @param datum_code Code of the VerticalReferenceFrame. Or NULL * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL * @param geoid_model_name Geoid model name, or NULL. Can be a name from the * geoid_model name or a string "PROJ foo.gtx" * @param geoid_model_auth_name Authority name of the transformation for * the geoid model. or NULL * @param geoid_model_code Code of the transformation for * the geoid model. or NULL * @param geoid_geog_crs Geographic CRS for the geoid transformation, or NULL. * @param options NULL-terminated list of strings with "KEY=VALUE" format. or * NULL. * The currently recognized option is ACCURACY=value, where value is in metre. * @return Object of type VerticalCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_vertical_crs_ex( PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *datum_auth_name, const char *datum_code, const char *linear_units, double linear_units_conv, const char *geoid_model_name, const char *geoid_model_auth_name, const char *geoid_model_code, const PJ *geoid_geog_crs, const char *const *options) { SANITIZE_CTX(ctx); try { const UnitOfMeasure linearUnit( createLinearUnit(linear_units, linear_units_conv)); auto datum = VerticalReferenceFrame::create( createPropertyMapName(datum_name, datum_auth_name, datum_code)); auto props = createPropertyMapName(crs_name); auto cs = cs::VerticalCS::createGravityRelatedHeight(linearUnit); if (geoid_model_name) { auto propsModel = createPropertyMapName( geoid_model_name, geoid_model_auth_name, geoid_model_code); const auto vertCRSWithoutGeoid = VerticalCRS::create(props, datum, cs); const auto interpCRS = geoid_geog_crs && std::dynamic_pointer_cast( geoid_geog_crs->iso_obj) ? std::dynamic_pointer_cast(geoid_geog_crs->iso_obj) : nullptr; std::vector accuracies; for (auto iter = options; iter && iter[0]; ++iter) { const char *value; if ((value = getOptionValue(*iter, "ACCURACY="))) { accuracies.emplace_back( metadata::PositionalAccuracy::create(value)); } } const auto model(Transformation::create( propsModel, vertCRSWithoutGeoid, GeographicCRS::EPSG_4979, // arbitrarily chosen. Ignored interpCRS, OperationMethod::create(PropertyMap(), std::vector()), {}, accuracies)); props.set("GEOID_MODEL", model); } auto vertCRS = VerticalCRS::create(props, datum, cs); return pj_obj_create(ctx, vertCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Create a CompoundCRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name Name of the GeographicCRS. Or NULL * @param horiz_crs Horizontal CRS. must not be NULL. * @param vert_crs Vertical CRS. must not be NULL. * * @return Object of type CompoundCRS that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_compound_crs(PJ_CONTEXT *ctx, const char *crs_name, const PJ *horiz_crs, const PJ *vert_crs) { SANITIZE_CTX(ctx); if (!horiz_crs || !vert_crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_horiz_crs = std::dynamic_pointer_cast(horiz_crs->iso_obj); if (!l_horiz_crs) { return nullptr; } auto l_vert_crs = std::dynamic_pointer_cast(vert_crs->iso_obj); if (!l_vert_crs) { return nullptr; } try { auto compoundCRS = CompoundCRS::create( createPropertyMapName(crs_name), {NN_NO_CHECK(l_horiz_crs), NN_NO_CHECK(l_vert_crs)}); return pj_obj_create(ctx, compoundCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Return a copy of the object with its name changed * * Currently, only implemented on CRS objects. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS. Must not be NULL * @param name New name. Must not be NULL * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_alter_name(PJ_CONTEXT *ctx, const PJ *obj, const char *name) { SANITIZE_CTX(ctx); if (!obj || !name) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto crs = dynamic_cast(obj->iso_obj.get()); if (!crs) { return nullptr; } try { return pj_obj_create(ctx, crs->alterName(name)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Return a copy of the object with its identifier changed/set * * Currently, only implemented on CRS objects. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS. Must not be NULL * @param auth_name Authority name. Must not be NULL * @param code Code. Must not be NULL * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_alter_id(PJ_CONTEXT *ctx, const PJ *obj, const char *auth_name, const char *code) { SANITIZE_CTX(ctx); if (!obj || !auth_name || !code) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto crs = dynamic_cast(obj->iso_obj.get()); if (!crs) { return nullptr; } try { return pj_obj_create(ctx, crs->alterId(auth_name, code)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Return a copy of the CRS with its geodetic CRS changed * * Currently, when obj is a GeodeticCRS, it returns a clone of new_geod_crs * When obj is a ProjectedCRS, it replaces its base CRS with new_geod_crs. * When obj is a CompoundCRS, it replaces the GeodeticCRS part of the horizontal * CRS with new_geod_crs. * In other cases, it returns a clone of obj. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS. Must not be NULL * @param new_geod_crs Object of type GeodeticCRS. Must not be NULL * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_crs_alter_geodetic_crs(PJ_CONTEXT *ctx, const PJ *obj, const PJ *new_geod_crs) { SANITIZE_CTX(ctx); if (!obj || !new_geod_crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_new_geod_crs = std::dynamic_pointer_cast(new_geod_crs->iso_obj); if (!l_new_geod_crs) { proj_log_error(ctx, __FUNCTION__, "new_geod_crs is not a GeodeticCRS"); return nullptr; } auto crs = dynamic_cast(obj->iso_obj.get()); if (!crs) { proj_log_error(ctx, __FUNCTION__, "obj is not a CRS"); return nullptr; } try { return pj_obj_create( ctx, crs->alterGeodeticCRS(NN_NO_CHECK(l_new_geod_crs))); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Return a copy of the CRS with its angular units changed * * The CRS must be or contain a GeographicCRS. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS. Must not be NULL * @param angular_units Name of the angular units. Or NULL for Degree * @param angular_units_conv Conversion factor from the angular unit to radian. * Or 0 for Degree if angular_units == NULL. Otherwise should be not NULL * @param unit_auth_name Unit authority name. Or NULL. * @param unit_code Unit code. Or NULL. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_crs_alter_cs_angular_unit(PJ_CONTEXT *ctx, const PJ *obj, const char *angular_units, double angular_units_conv, const char *unit_auth_name, const char *unit_code) { SANITIZE_CTX(ctx); auto geodCRS = proj_crs_get_geodetic_crs(ctx, obj); if (!geodCRS) { return nullptr; } auto geogCRS = dynamic_cast(geodCRS->iso_obj.get()); if (!geogCRS) { proj_destroy(geodCRS); return nullptr; } PJ *geogCRSAltered = nullptr; try { const UnitOfMeasure angUnit(createAngularUnit( angular_units, angular_units_conv, unit_auth_name, unit_code)); geogCRSAltered = pj_obj_create( ctx, GeographicCRS::create( createPropertyMapName(proj_get_name(geodCRS)), geogCRS->datum(), geogCRS->datumEnsemble(), geogCRS->coordinateSystem()->alterAngularUnit(angUnit))); proj_destroy(geodCRS); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); proj_destroy(geodCRS); return nullptr; } auto ret = proj_crs_alter_geodetic_crs(ctx, obj, geogCRSAltered); proj_destroy(geogCRSAltered); return ret; } // --------------------------------------------------------------------------- /** \brief Return a copy of the CRS with the linear units of its coordinate * system changed * * The CRS must be or contain a ProjectedCRS, VerticalCRS or a GeocentricCRS. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS. Must not be NULL * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL * @param unit_auth_name Unit authority name. Or NULL. * @param unit_code Unit code. Or NULL. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ *obj, const char *linear_units, double linear_units_conv, const char *unit_auth_name, const char *unit_code) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto crs = dynamic_cast(obj->iso_obj.get()); if (!crs) { return nullptr; } try { const UnitOfMeasure linearUnit(createLinearUnit( linear_units, linear_units_conv, unit_auth_name, unit_code)); return pj_obj_create(ctx, crs->alterCSLinearUnit(linearUnit)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Return a copy of the CRS with the linear units of the parameters * of its conversion modified. * * The CRS must be or contain a ProjectedCRS, VerticalCRS or a GeocentricCRS. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type ProjectedCRS. Must not be NULL * @param linear_units Name of the linear units. Or NULL for Metre * @param linear_units_conv Conversion factor from the linear unit to metre. Or * 0 for Metre if linear_units == NULL. Otherwise should be not NULL * @param unit_auth_name Unit authority name. Or NULL. * @param unit_code Unit code. Or NULL. * @param convert_to_new_unit TRUE if existing values should be converted from * their current unit to the new unit. If FALSE, their value will be left * unchanged and the unit overridden (so the resulting CRS will not be * equivalent to the original one for reprojection purposes). * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_crs_alter_parameters_linear_unit(PJ_CONTEXT *ctx, const PJ *obj, const char *linear_units, double linear_units_conv, const char *unit_auth_name, const char *unit_code, int convert_to_new_unit) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto crs = dynamic_cast(obj->iso_obj.get()); if (!crs) { return nullptr; } try { const UnitOfMeasure linearUnit(createLinearUnit( linear_units, linear_units_conv, unit_auth_name, unit_code)); return pj_obj_create(ctx, crs->alterParametersLinearUnit( linearUnit, convert_to_new_unit == TRUE)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Create a 3D CRS from an existing 2D CRS. * * The new axis will be ellipsoidal height, oriented upwards, and with metre * units. * * See osgeo::proj::crs::CRS::promoteTo3D(). * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_3D_name CRS name. Or NULL (in which case the name of crs_2D * will be used) * @param crs_2D 2D CRS to be "promoted" to 3D. Must not be NULL. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. * @since 6.3 */ PJ *proj_crs_promote_to_3D(PJ_CONTEXT *ctx, const char *crs_3D_name, const PJ *crs_2D) { SANITIZE_CTX(ctx); if (!crs_2D) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto cpp_2D_crs = dynamic_cast(crs_2D->iso_obj.get()); if (!cpp_2D_crs) { auto coordinateMetadata = dynamic_cast(crs_2D->iso_obj.get()); if (!coordinateMetadata) { proj_log_error(ctx, __FUNCTION__, "crs_2D is not a CRS or a CoordinateMetadata"); return nullptr; } try { auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); auto crs = coordinateMetadata->crs(); auto crs_3D = crs->promoteTo3D( crs_3D_name ? std::string(crs_3D_name) : crs->nameStr(), dbContext); if (coordinateMetadata->coordinateEpoch().has_value()) { return pj_obj_create( ctx, CoordinateMetadata::create( crs_3D, coordinateMetadata->coordinateEpochAsDecimalYear(), dbContext)); } else { return pj_obj_create(ctx, CoordinateMetadata::create(crs_3D)); } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } else { try { auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); return pj_obj_create(ctx, cpp_2D_crs->promoteTo3D( crs_3D_name ? std::string(crs_3D_name) : cpp_2D_crs->nameStr(), dbContext)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } } // --------------------------------------------------------------------------- /** \brief Create a projected 3D CRS from an existing projected 2D CRS. * * The passed projected_2D_crs is used so that its name is replaced by * crs_name and its base geographic CRS is replaced by geog_3D_crs. The vertical * axis of geog_3D_crs (ellipsoidal height) will be added as the 3rd axis of * the resulting projected 3D CRS. * Normally, the passed geog_3D_crs should be the 3D counterpart of the original * 2D base geographic CRS of projected_2D_crs, but such no check is done. * * It is also possible to invoke this function with a NULL geog_3D_crs. In which * case, the existing base geographic 2D CRS of projected_2D_crs will be * automatically promoted to 3D by assuming a 3rd axis being an ellipsoidal * height, oriented upwards, and with metre units. This is equivalent to using * proj_crs_promote_to_3D(). * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name CRS name. Or NULL (in which case the name of projected_2D_crs * will be used) * @param projected_2D_crs Projected 2D CRS to be "promoted" to 3D. Must not be * NULL. * @param geog_3D_crs Base geographic 3D CRS for the new CRS. May be NULL. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. * @since 6.3 */ PJ *proj_crs_create_projected_3D_crs_from_2D(PJ_CONTEXT *ctx, const char *crs_name, const PJ *projected_2D_crs, const PJ *geog_3D_crs) { SANITIZE_CTX(ctx); if (!projected_2D_crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto cpp_projected_2D_crs = dynamic_cast(projected_2D_crs->iso_obj.get()); if (!cpp_projected_2D_crs) { proj_log_error(ctx, __FUNCTION__, "projected_2D_crs is not a Projected CRS"); return nullptr; } const auto &oldCS = cpp_projected_2D_crs->coordinateSystem(); const auto &oldCSAxisList = oldCS->axisList(); if (geog_3D_crs && geog_3D_crs->iso_obj) { auto cpp_geog_3D_CRS = std::dynamic_pointer_cast(geog_3D_crs->iso_obj); if (!cpp_geog_3D_CRS) { proj_log_error(ctx, __FUNCTION__, "geog_3D_crs is not a Geographic CRS"); return nullptr; } const auto &geogCS = cpp_geog_3D_CRS->coordinateSystem(); const auto &geogCSAxisList = geogCS->axisList(); if (geogCSAxisList.size() != 3) { proj_log_error(ctx, __FUNCTION__, "geog_3D_crs is not a Geographic 3D CRS"); return nullptr; } try { auto newCS = cs::CartesianCS::create(PropertyMap(), oldCSAxisList[0], oldCSAxisList[1], geogCSAxisList[2]); return pj_obj_create( ctx, ProjectedCRS::create( createPropertyMapName( crs_name ? crs_name : cpp_projected_2D_crs->nameStr().c_str()), NN_NO_CHECK(cpp_geog_3D_CRS), cpp_projected_2D_crs->derivingConversion(), newCS)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } else { try { auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); return pj_obj_create(ctx, cpp_projected_2D_crs->promoteTo3D( crs_name ? std::string(crs_name) : cpp_projected_2D_crs->nameStr(), dbContext)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } } // --------------------------------------------------------------------------- /** \brief Create a 2D CRS from an existing 3D CRS. * * See osgeo::proj::crs::CRS::demoteTo2D(). * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_2D_name CRS name. Or NULL (in which case the name of crs_3D * will be used) * @param crs_3D 3D CRS to be "demoted" to 2D. Must not be NULL. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. * @since 6.3 */ PJ *proj_crs_demote_to_2D(PJ_CONTEXT *ctx, const char *crs_2D_name, const PJ *crs_3D) { SANITIZE_CTX(ctx); if (!crs_3D) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto cpp_3D_crs = dynamic_cast(crs_3D->iso_obj.get()); if (!cpp_3D_crs) { proj_log_error(ctx, __FUNCTION__, "crs_3D is not a CRS"); return nullptr; } try { auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); return pj_obj_create( ctx, cpp_3D_crs->demoteTo2D(crs_2D_name ? std::string(crs_2D_name) : cpp_3D_crs->nameStr(), dbContext)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Instantiate a EngineeringCRS with just a name * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name CRS name. Or NULL. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_engineering_crs(PJ_CONTEXT *ctx, const char *crs_name) { SANITIZE_CTX(ctx); try { return pj_obj_create( ctx, EngineeringCRS::create( createPropertyMapName(crs_name), EngineeringDatum::create( createPropertyMapName(UNKNOWN_ENGINEERING_DATUM)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE))); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static void setSingleOperationElements( const char *name, const char *auth_name, const char *code, const char *method_name, const char *method_auth_name, const char *method_code, int param_count, const PJ_PARAM_DESCRIPTION *params, PropertyMap &propSingleOp, PropertyMap &propMethod, std::vector ¶meters, std::vector &values) { propSingleOp.set(common::IdentifiedObject::NAME_KEY, name ? name : "unnamed"); if (auth_name && code) { propSingleOp.set(metadata::Identifier::CODESPACE_KEY, auth_name) .set(metadata::Identifier::CODE_KEY, code); } propMethod.set(common::IdentifiedObject::NAME_KEY, method_name ? method_name : "unnamed"); if (method_auth_name && method_code) { propMethod.set(metadata::Identifier::CODESPACE_KEY, method_auth_name) .set(metadata::Identifier::CODE_KEY, method_code); } for (int i = 0; i < param_count; i++) { PropertyMap propParam; propParam.set(common::IdentifiedObject::NAME_KEY, params[i].name ? params[i].name : "unnamed"); if (params[i].auth_name && params[i].code) { propParam .set(metadata::Identifier::CODESPACE_KEY, params[i].auth_name) .set(metadata::Identifier::CODE_KEY, params[i].code); } parameters.emplace_back(OperationParameter::create(propParam)); auto unit_type = UnitOfMeasure::Type::UNKNOWN; switch (params[i].unit_type) { case PJ_UT_ANGULAR: unit_type = UnitOfMeasure::Type::ANGULAR; break; case PJ_UT_LINEAR: unit_type = UnitOfMeasure::Type::LINEAR; break; case PJ_UT_SCALE: unit_type = UnitOfMeasure::Type::SCALE; break; case PJ_UT_TIME: unit_type = UnitOfMeasure::Type::TIME; break; case PJ_UT_PARAMETRIC: unit_type = UnitOfMeasure::Type::PARAMETRIC; break; } Measure measure( params[i].value, params[i].unit_type == PJ_UT_ANGULAR ? createAngularUnit(params[i].unit_name, params[i].unit_conv_factor) : params[i].unit_type == PJ_UT_LINEAR ? createLinearUnit(params[i].unit_name, params[i].unit_conv_factor) : UnitOfMeasure(params[i].unit_name ? params[i].unit_name : "unnamed", params[i].unit_conv_factor, unit_type)); values.emplace_back(ParameterValue::create(measure)); } } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a Conversion * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param name Conversion name. Or NULL. * @param auth_name Conversion authority name. Or NULL. * @param code Conversion code. Or NULL. * @param method_name Method name. Or NULL. * @param method_auth_name Method authority name. Or NULL. * @param method_code Method code. Or NULL. * @param param_count Number of parameters (size of params argument) * @param params Parameter descriptions (array of size param_count) * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_conversion(PJ_CONTEXT *ctx, const char *name, const char *auth_name, const char *code, const char *method_name, const char *method_auth_name, const char *method_code, int param_count, const PJ_PARAM_DESCRIPTION *params) { SANITIZE_CTX(ctx); try { PropertyMap propSingleOp; PropertyMap propMethod; std::vector parameters; std::vector values; setSingleOperationElements( name, auth_name, code, method_name, method_auth_name, method_code, param_count, params, propSingleOp, propMethod, parameters, values); return pj_obj_create(ctx, Conversion::create(propSingleOp, propMethod, parameters, values)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Instantiate a Transformation * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param name Transformation name. Or NULL. * @param auth_name Transformation authority name. Or NULL. * @param code Transformation code. Or NULL. * @param source_crs Object of type CRS representing the source CRS. * Must not be NULL. * @param target_crs Object of type CRS representing the target CRS. * Must not be NULL. * @param interpolation_crs Object of type CRS representing the interpolation * CRS. Or NULL. * @param method_name Method name. Or NULL. * @param method_auth_name Method authority name. Or NULL. * @param method_code Method code. Or NULL. * @param param_count Number of parameters (size of params argument) * @param params Parameter descriptions (array of size param_count) * @param accuracy Accuracy of the transformation in meters. A negative * values means unknown. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_transformation( PJ_CONTEXT *ctx, const char *name, const char *auth_name, const char *code, const PJ *source_crs, const PJ *target_crs, const PJ *interpolation_crs, const char *method_name, const char *method_auth_name, const char *method_code, int param_count, const PJ_PARAM_DESCRIPTION *params, double accuracy) { SANITIZE_CTX(ctx); if (!source_crs || !target_crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_sourceCRS = std::dynamic_pointer_cast(source_crs->iso_obj); if (!l_sourceCRS) { proj_log_error(ctx, __FUNCTION__, "source_crs is not a CRS"); return nullptr; } auto l_targetCRS = std::dynamic_pointer_cast(target_crs->iso_obj); if (!l_targetCRS) { proj_log_error(ctx, __FUNCTION__, "target_crs is not a CRS"); return nullptr; } CRSPtr l_interpolationCRS; if (interpolation_crs) { l_interpolationCRS = std::dynamic_pointer_cast(interpolation_crs->iso_obj); if (!l_interpolationCRS) { proj_log_error(ctx, __FUNCTION__, "interpolation_crs is not a CRS"); return nullptr; } } try { PropertyMap propSingleOp; PropertyMap propMethod; std::vector parameters; std::vector values; setSingleOperationElements( name, auth_name, code, method_name, method_auth_name, method_code, param_count, params, propSingleOp, propMethod, parameters, values); std::vector accuracies; if (accuracy >= 0.0) { accuracies.emplace_back( PositionalAccuracy::create(toString(accuracy))); } return pj_obj_create( ctx, Transformation::create(propSingleOp, NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK(l_targetCRS), l_interpolationCRS, propMethod, parameters, values, accuracies)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** * \brief Return an equivalent projection. * * Currently implemented: *
    *
  • EPSG_CODE_METHOD_MERCATOR_VARIANT_A (1SP) to * EPSG_CODE_METHOD_MERCATOR_VARIANT_B (2SP)
  • *
  • EPSG_CODE_METHOD_MERCATOR_VARIANT_B (2SP) to * EPSG_CODE_METHOD_MERCATOR_VARIANT_A (1SP)
  • *
  • EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP to * EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP
  • *
  • EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP to * EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP
  • *
* * @param ctx PROJ context, or NULL for default context * @param conversion Object of type Conversion. Must not be NULL. * @param new_method_epsg_code EPSG code of the target method. Or 0 (in which * case new_method_name must be specified). * @param new_method_name EPSG or PROJ target method name. Or nullptr (in which * case new_method_epsg_code must be specified). * @return new conversion that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_convert_conversion_to_other_method(PJ_CONTEXT *ctx, const PJ *conversion, int new_method_epsg_code, const char *new_method_name) { SANITIZE_CTX(ctx); if (!conversion) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto conv = dynamic_cast(conversion->iso_obj.get()); if (!conv) { proj_log_error(ctx, __FUNCTION__, "not a Conversion"); return nullptr; } if (new_method_epsg_code == 0) { if (!new_method_name) { return nullptr; } if (metadata::Identifier::isEquivalentName( new_method_name, EPSG_NAME_METHOD_MERCATOR_VARIANT_A)) { new_method_epsg_code = EPSG_CODE_METHOD_MERCATOR_VARIANT_A; } else if (metadata::Identifier::isEquivalentName( new_method_name, EPSG_NAME_METHOD_MERCATOR_VARIANT_B)) { new_method_epsg_code = EPSG_CODE_METHOD_MERCATOR_VARIANT_B; } else if (metadata::Identifier::isEquivalentName( new_method_name, EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP)) { new_method_epsg_code = EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP; } else if (metadata::Identifier::isEquivalentName( new_method_name, EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP)) { new_method_epsg_code = EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP; } } try { auto new_conv = conv->convertToOtherMethod(new_method_epsg_code); if (!new_conv) return nullptr; return pj_obj_create(ctx, NN_NO_CHECK(new_conv)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static CoordinateSystemAxisNNPtr createAxis(const PJ_AXIS_DESCRIPTION &axis) { const auto dir = axis.direction ? AxisDirection::valueOf(axis.direction) : nullptr; if (dir == nullptr) throw Exception("invalid value for axis direction"); auto unit_type = UnitOfMeasure::Type::UNKNOWN; switch (axis.unit_type) { case PJ_UT_ANGULAR: unit_type = UnitOfMeasure::Type::ANGULAR; break; case PJ_UT_LINEAR: unit_type = UnitOfMeasure::Type::LINEAR; break; case PJ_UT_SCALE: unit_type = UnitOfMeasure::Type::SCALE; break; case PJ_UT_TIME: unit_type = UnitOfMeasure::Type::TIME; break; case PJ_UT_PARAMETRIC: unit_type = UnitOfMeasure::Type::PARAMETRIC; break; } const common::UnitOfMeasure unit( axis.unit_type == PJ_UT_ANGULAR ? createAngularUnit(axis.unit_name, axis.unit_conv_factor) : axis.unit_type == PJ_UT_LINEAR ? createLinearUnit(axis.unit_name, axis.unit_conv_factor) : UnitOfMeasure(axis.unit_name ? axis.unit_name : "unnamed", axis.unit_conv_factor, unit_type)); return CoordinateSystemAxis::create( createPropertyMapName(axis.name), axis.abbreviation ? axis.abbreviation : std::string(), *dir, unit); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateSystem. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param type Coordinate system type. * @param axis_count Number of axis * @param axis Axis description (array of size axis_count) * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_cs(PJ_CONTEXT *ctx, PJ_COORDINATE_SYSTEM_TYPE type, int axis_count, const PJ_AXIS_DESCRIPTION *axis) { SANITIZE_CTX(ctx); try { switch (type) { case PJ_CS_TYPE_UNKNOWN: return nullptr; case PJ_CS_TYPE_CARTESIAN: { if (axis_count == 2) { return pj_obj_create( ctx, CartesianCS::create(PropertyMap(), createAxis(axis[0]), createAxis(axis[1]))); } else if (axis_count == 3) { return pj_obj_create( ctx, CartesianCS::create(PropertyMap(), createAxis(axis[0]), createAxis(axis[1]), createAxis(axis[2]))); } break; } case PJ_CS_TYPE_ELLIPSOIDAL: { if (axis_count == 2) { return pj_obj_create( ctx, EllipsoidalCS::create(PropertyMap(), createAxis(axis[0]), createAxis(axis[1]))); } else if (axis_count == 3) { return pj_obj_create( ctx, EllipsoidalCS::create( PropertyMap(), createAxis(axis[0]), createAxis(axis[1]), createAxis(axis[2]))); } break; } case PJ_CS_TYPE_VERTICAL: { if (axis_count == 1) { return pj_obj_create( ctx, VerticalCS::create(PropertyMap(), createAxis(axis[0]))); } break; } case PJ_CS_TYPE_SPHERICAL: { if (axis_count == 3) { return pj_obj_create( ctx, EllipsoidalCS::create( PropertyMap(), createAxis(axis[0]), createAxis(axis[1]), createAxis(axis[2]))); } break; } case PJ_CS_TYPE_PARAMETRIC: { if (axis_count == 1) { return pj_obj_create( ctx, ParametricCS::create(PropertyMap(), createAxis(axis[0]))); } break; } case PJ_CS_TYPE_ORDINAL: { std::vector axisVector; for (int i = 0; i < axis_count; i++) { axisVector.emplace_back(createAxis(axis[i])); } return pj_obj_create(ctx, OrdinalCS::create(PropertyMap(), axisVector)); } case PJ_CS_TYPE_DATETIMETEMPORAL: { if (axis_count == 1) { return pj_obj_create( ctx, DateTimeTemporalCS::create(PropertyMap(), createAxis(axis[0]))); } break; } case PJ_CS_TYPE_TEMPORALCOUNT: { if (axis_count == 1) { return pj_obj_create( ctx, TemporalCountCS::create(PropertyMap(), createAxis(axis[0]))); } break; } case PJ_CS_TYPE_TEMPORALMEASURE: { if (axis_count == 1) { return pj_obj_create( ctx, TemporalMeasureCS::create(PropertyMap(), createAxis(axis[0]))); } break; } } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } proj_log_error(ctx, __FUNCTION__, "Wrong value for axis_count"); return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesiansCS 2D * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param type Coordinate system type. * @param unit_name Unit name. * @param unit_conv_factor Unit conversion factor to SI. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_cartesian_2D_cs(PJ_CONTEXT *ctx, PJ_CARTESIAN_CS_2D_TYPE type, const char *unit_name, double unit_conv_factor) { SANITIZE_CTX(ctx); try { switch (type) { case PJ_CART2D_EASTING_NORTHING: return pj_obj_create( ctx, CartesianCS::createEastingNorthing( createLinearUnit(unit_name, unit_conv_factor))); case PJ_CART2D_NORTHING_EASTING: return pj_obj_create( ctx, CartesianCS::createNorthingEasting( createLinearUnit(unit_name, unit_conv_factor))); case PJ_CART2D_NORTH_POLE_EASTING_SOUTH_NORTHING_SOUTH: return pj_obj_create( ctx, CartesianCS::createNorthPoleEastingSouthNorthingSouth( createLinearUnit(unit_name, unit_conv_factor))); case PJ_CART2D_SOUTH_POLE_EASTING_NORTH_NORTHING_NORTH: return pj_obj_create( ctx, CartesianCS::createSouthPoleEastingNorthNorthingNorth( createLinearUnit(unit_name, unit_conv_factor))); case PJ_CART2D_WESTING_SOUTHING: return pj_obj_create( ctx, CartesianCS::createWestingSouthing( createLinearUnit(unit_name, unit_conv_factor))); } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a Ellipsoidal 2D * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param type Coordinate system type. * @param unit_name Name of the angular units. Or NULL for Degree * @param unit_conv_factor Conversion factor from the angular unit to radian. * Or 0 for Degree if unit_name == NULL. Otherwise should be not NULL * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_ellipsoidal_2D_cs(PJ_CONTEXT *ctx, PJ_ELLIPSOIDAL_CS_2D_TYPE type, const char *unit_name, double unit_conv_factor) { SANITIZE_CTX(ctx); try { switch (type) { case PJ_ELLPS2D_LONGITUDE_LATITUDE: return pj_obj_create( ctx, EllipsoidalCS::createLongitudeLatitude( createAngularUnit(unit_name, unit_conv_factor))); case PJ_ELLPS2D_LATITUDE_LONGITUDE: return pj_obj_create( ctx, EllipsoidalCS::createLatitudeLongitude( createAngularUnit(unit_name, unit_conv_factor))); } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a Ellipsoidal 3D * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param type Coordinate system type. * @param horizontal_angular_unit_name Name of the angular units. Or NULL for * Degree. * @param horizontal_angular_unit_conv_factor Conversion factor from the angular * unit to radian. Or 0 for Degree if horizontal_angular_unit_name == NULL. * Otherwise should be not NULL * @param vertical_linear_unit_name Vertical linear unit name. Or NULL for * Metre. * @param vertical_linear_unit_conv_factor Vertical linear unit conversion * factor to metre. Or 0 for Metre if vertical_linear_unit_name == NULL. * Otherwise should be not NULL * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. * @since 6.3 */ PJ *proj_create_ellipsoidal_3D_cs(PJ_CONTEXT *ctx, PJ_ELLIPSOIDAL_CS_3D_TYPE type, const char *horizontal_angular_unit_name, double horizontal_angular_unit_conv_factor, const char *vertical_linear_unit_name, double vertical_linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { switch (type) { case PJ_ELLPS3D_LONGITUDE_LATITUDE_HEIGHT: return pj_obj_create( ctx, EllipsoidalCS::createLongitudeLatitudeEllipsoidalHeight( createAngularUnit(horizontal_angular_unit_name, horizontal_angular_unit_conv_factor), createLinearUnit(vertical_linear_unit_name, vertical_linear_unit_conv_factor))); case PJ_ELLPS3D_LATITUDE_LONGITUDE_HEIGHT: return pj_obj_create( ctx, EllipsoidalCS::createLatitudeLongitudeEllipsoidalHeight( createAngularUnit(horizontal_angular_unit_name, horizontal_angular_unit_conv_factor), createLinearUnit(vertical_linear_unit_name, vertical_linear_unit_conv_factor))); } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs_name CRS name. Or NULL * @param geodetic_crs Base GeodeticCRS. Must not be NULL. * @param conversion Conversion. Must not be NULL. * @param coordinate_system Cartesian coordinate system. Must not be NULL. * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. */ PJ *proj_create_projected_crs(PJ_CONTEXT *ctx, const char *crs_name, const PJ *geodetic_crs, const PJ *conversion, const PJ *coordinate_system) { SANITIZE_CTX(ctx); if (!geodetic_crs || !conversion || !coordinate_system) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto geodCRS = std::dynamic_pointer_cast(geodetic_crs->iso_obj); if (!geodCRS) { return nullptr; } auto conv = std::dynamic_pointer_cast(conversion->iso_obj); if (!conv) { return nullptr; } auto cs = std::dynamic_pointer_cast(coordinate_system->iso_obj); if (!cs) { return nullptr; } try { return pj_obj_create( ctx, ProjectedCRS::create(createPropertyMapName(crs_name), NN_NO_CHECK(geodCRS), NN_NO_CHECK(conv), NN_NO_CHECK(cs))); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static PJ *proj_create_conversion(PJ_CONTEXT *ctx, const ConversionNNPtr &conv) { return pj_obj_create(ctx, conv); } //! @endcond /* BEGIN: Generated by scripts/create_c_api_projections.py*/ // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a Universal Transverse Mercator * conversion. * * See osgeo::proj::operation::Conversion::createUTM(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). */ PJ *proj_create_conversion_utm(PJ_CONTEXT *ctx, int zone, int north) { SANITIZE_CTX(ctx); try { auto conv = Conversion::createUTM(PropertyMap(), zone, north != 0); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Transverse * Mercator projection method. * * See osgeo::proj::operation::Conversion::createTransverseMercator(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_transverse_mercator( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createTransverseMercator( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Gauss * Schreiber Transverse Mercator projection method. * * See * osgeo::proj::operation::Conversion::createGaussSchreiberTransverseMercator(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_gauss_schreiber_transverse_mercator( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createGaussSchreiberTransverseMercator( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Transverse * Mercator South Orientated projection method. * * See * osgeo::proj::operation::Conversion::createTransverseMercatorSouthOriented(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_transverse_mercator_south_oriented( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createTransverseMercatorSouthOriented( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Two Point * Equidistant projection method. * * See osgeo::proj::operation::Conversion::createTwoPointEquidistant(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_two_point_equidistant( PJ_CONTEXT *ctx, double latitude_first_point, double longitude_first_point, double latitude_second_point, double longitude_secon_point, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createTwoPointEquidistant( PropertyMap(), Angle(latitude_first_point, angUnit), Angle(longitude_first_point, angUnit), Angle(latitude_second_point, angUnit), Angle(longitude_secon_point, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Tunisia * Mining Grid projection method. * * See osgeo::proj::operation::Conversion::createTunisiaMiningGrid(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). * * @since 9.2 */ PJ *proj_create_conversion_tunisia_mining_grid( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createTunisiaMiningGrid( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Tunisia * Mining Grid projection method. * * See osgeo::proj::operation::Conversion::createTunisiaMiningGrid(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). * * @deprecated Replaced by proj_create_conversion_tunisia_mining_grid */ PJ *proj_create_conversion_tunisia_mapping_grid( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createTunisiaMiningGrid( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Albers * Conic Equal Area projection method. * * See osgeo::proj::operation::Conversion::createAlbersEqualArea(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_albers_equal_area( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createAlbersEqualArea( PropertyMap(), Angle(latitude_false_origin, angUnit), Angle(longitude_false_origin, angUnit), Angle(latitude_first_parallel, angUnit), Angle(latitude_second_parallel, angUnit), Length(easting_false_origin, linearUnit), Length(northing_false_origin, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Conic Conformal 1SP projection method. * * See osgeo::proj::operation::Conversion::createLambertConicConformal_1SP(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_lambert_conic_conformal_1sp( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertConicConformal_1SP( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Conic Conformal (1SP Variant B) projection method. * * See * osgeo::proj::operation::Conversion::createLambertConicConformal_1SP_VariantB(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). * @since 9.2.1 */ PJ *proj_create_conversion_lambert_conic_conformal_1sp_variant_b( PJ_CONTEXT *ctx, double latitude_nat_origin, double scale, double latitude_false_origin, double longitude_false_origin, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertConicConformal_1SP_VariantB( PropertyMap(), Angle(latitude_nat_origin, angUnit), Scale(scale), Angle(latitude_false_origin, angUnit), Angle(longitude_false_origin, angUnit), Length(easting_false_origin, linearUnit), Length(northing_false_origin, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Conic Conformal (2SP) projection method. * * See osgeo::proj::operation::Conversion::createLambertConicConformal_2SP(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_lambert_conic_conformal_2sp( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(latitude_false_origin, angUnit), Angle(longitude_false_origin, angUnit), Angle(latitude_first_parallel, angUnit), Angle(latitude_second_parallel, angUnit), Length(easting_false_origin, linearUnit), Length(northing_false_origin, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Conic Conformal (2SP Michigan) projection method. * * See * osgeo::proj::operation::Conversion::createLambertConicConformal_2SP_Michigan(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_lambert_conic_conformal_2sp_michigan( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, double ellipsoid_scaling_factor, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertConicConformal_2SP_Michigan( PropertyMap(), Angle(latitude_false_origin, angUnit), Angle(longitude_false_origin, angUnit), Angle(latitude_first_parallel, angUnit), Angle(latitude_second_parallel, angUnit), Length(easting_false_origin, linearUnit), Length(northing_false_origin, linearUnit), Scale(ellipsoid_scaling_factor)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Conic Conformal (2SP Belgium) projection method. * * See * osgeo::proj::operation::Conversion::createLambertConicConformal_2SP_Belgium(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_lambert_conic_conformal_2sp_belgium( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertConicConformal_2SP_Belgium( PropertyMap(), Angle(latitude_false_origin, angUnit), Angle(longitude_false_origin, angUnit), Angle(latitude_first_parallel, angUnit), Angle(latitude_second_parallel, angUnit), Length(easting_false_origin, linearUnit), Length(northing_false_origin, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Modified * Azimuthal Equidistant projection method. * * See osgeo::proj::operation::Conversion::createAzimuthalEquidistant(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_azimuthal_equidistant( PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createAzimuthalEquidistant( PropertyMap(), Angle(latitude_nat_origin, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Guam * Projection projection method. * * See osgeo::proj::operation::Conversion::createGuamProjection(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_guam_projection( PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createGuamProjection( PropertyMap(), Angle(latitude_nat_origin, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Bonne * projection method. * * See osgeo::proj::operation::Conversion::createBonne(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_bonne(PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createBonne( PropertyMap(), Angle(latitude_nat_origin, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Cylindrical Equal Area (Spherical) projection method. * * See * osgeo::proj::operation::Conversion::createLambertCylindricalEqualAreaSpherical(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_lambert_cylindrical_equal_area_spherical( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertCylindricalEqualAreaSpherical( PropertyMap(), Angle(latitude_first_parallel, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Cylindrical Equal Area (ellipsoidal form) projection method. * * See osgeo::proj::operation::Conversion::createLambertCylindricalEqualArea(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_lambert_cylindrical_equal_area( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertCylindricalEqualArea( PropertyMap(), Angle(latitude_first_parallel, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the * Cassini-Soldner projection method. * * See osgeo::proj::operation::Conversion::createCassiniSoldner(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_cassini_soldner( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createCassiniSoldner( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Equidistant * Conic projection method. * * See osgeo::proj::operation::Conversion::createEquidistantConic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_equidistant_conic( PJ_CONTEXT *ctx, double center_lat, double center_long, double latitude_first_parallel, double latitude_second_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEquidistantConic( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Angle(latitude_first_parallel, angUnit), Angle(latitude_second_parallel, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Eckert I * projection method. * * See osgeo::proj::operation::Conversion::createEckertI(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_eckert_i(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEckertI( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Eckert II * projection method. * * See osgeo::proj::operation::Conversion::createEckertII(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_eckert_ii(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEckertII( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Eckert III * projection method. * * See osgeo::proj::operation::Conversion::createEckertIII(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_eckert_iii(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEckertIII( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Eckert IV * projection method. * * See osgeo::proj::operation::Conversion::createEckertIV(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_eckert_iv(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEckertIV( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Eckert V * projection method. * * See osgeo::proj::operation::Conversion::createEckertV(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_eckert_v(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEckertV( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Eckert VI * projection method. * * See osgeo::proj::operation::Conversion::createEckertVI(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_eckert_vi(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEckertVI( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Equidistant * Cylindrical projection method. * * See osgeo::proj::operation::Conversion::createEquidistantCylindrical(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_equidistant_cylindrical( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEquidistantCylindrical( PropertyMap(), Angle(latitude_first_parallel, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Equidistant * Cylindrical (Spherical) projection method. * * See * osgeo::proj::operation::Conversion::createEquidistantCylindricalSpherical(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_equidistant_cylindrical_spherical( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEquidistantCylindricalSpherical( PropertyMap(), Angle(latitude_first_parallel, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Gall * (Stereographic) projection method. * * See osgeo::proj::operation::Conversion::createGall(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_gall(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createGall(PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Goode * Homolosine projection method. * * See osgeo::proj::operation::Conversion::createGoodeHomolosine(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_goode_homolosine(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createGoodeHomolosine( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Interrupted * Goode Homolosine projection method. * * See osgeo::proj::operation::Conversion::createInterruptedGoodeHomolosine(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_interrupted_goode_homolosine( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createInterruptedGoodeHomolosine( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the * Geostationary Satellite View projection method, with the sweep angle axis of * the viewing instrument being x. * * See osgeo::proj::operation::Conversion::createGeostationarySatelliteSweepX(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_geostationary_satellite_sweep_x( PJ_CONTEXT *ctx, double center_long, double height, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createGeostationarySatelliteSweepX( PropertyMap(), Angle(center_long, angUnit), Length(height, linearUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the * Geostationary Satellite View projection method, with the sweep angle axis of * the viewing instrument being y. * * See osgeo::proj::operation::Conversion::createGeostationarySatelliteSweepY(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_geostationary_satellite_sweep_y( PJ_CONTEXT *ctx, double center_long, double height, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createGeostationarySatelliteSweepY( PropertyMap(), Angle(center_long, angUnit), Length(height, linearUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Gnomonic * projection method. * * See osgeo::proj::operation::Conversion::createGnomonic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_gnomonic(PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createGnomonic( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Hotine * Oblique Mercator (Variant A) projection method. * * See * osgeo::proj::operation::Conversion::createHotineObliqueMercatorVariantA(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_hotine_oblique_mercator_variant_a( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_projection_centre, double azimuth_initial_line, double angle_from_rectified_to_skrew_grid, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createHotineObliqueMercatorVariantA( PropertyMap(), Angle(latitude_projection_centre, angUnit), Angle(longitude_projection_centre, angUnit), Angle(azimuth_initial_line, angUnit), Angle(angle_from_rectified_to_skrew_grid, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Hotine * Oblique Mercator (Variant B) projection method. * * See * osgeo::proj::operation::Conversion::createHotineObliqueMercatorVariantB(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_hotine_oblique_mercator_variant_b( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_projection_centre, double azimuth_initial_line, double angle_from_rectified_to_skrew_grid, double scale, double easting_projection_centre, double northing_projection_centre, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createHotineObliqueMercatorVariantB( PropertyMap(), Angle(latitude_projection_centre, angUnit), Angle(longitude_projection_centre, angUnit), Angle(azimuth_initial_line, angUnit), Angle(angle_from_rectified_to_skrew_grid, angUnit), Scale(scale), Length(easting_projection_centre, linearUnit), Length(northing_projection_centre, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Hotine * Oblique Mercator Two Point Natural Origin projection method. * * See * osgeo::proj::operation::Conversion::createHotineObliqueMercatorTwoPointNaturalOrigin(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_hotine_oblique_mercator_two_point_natural_origin( PJ_CONTEXT *ctx, double latitude_projection_centre, double latitude_point1, double longitude_point1, double latitude_point2, double longitude_point2, double scale, double easting_projection_centre, double northing_projection_centre, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createHotineObliqueMercatorTwoPointNaturalOrigin( PropertyMap(), Angle(latitude_projection_centre, angUnit), Angle(latitude_point1, angUnit), Angle(longitude_point1, angUnit), Angle(latitude_point2, angUnit), Angle(longitude_point2, angUnit), Scale(scale), Length(easting_projection_centre, linearUnit), Length(northing_projection_centre, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Laborde * Oblique Mercator projection method. * * See * osgeo::proj::operation::Conversion::createLabordeObliqueMercator(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_laborde_oblique_mercator( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_projection_centre, double azimuth_initial_line, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLabordeObliqueMercator( PropertyMap(), Angle(latitude_projection_centre, angUnit), Angle(longitude_projection_centre, angUnit), Angle(azimuth_initial_line, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the * International Map of the World Polyconic projection method. * * See * osgeo::proj::operation::Conversion::createInternationalMapWorldPolyconic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_international_map_world_polyconic( PJ_CONTEXT *ctx, double center_long, double latitude_first_parallel, double latitude_second_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createInternationalMapWorldPolyconic( PropertyMap(), Angle(center_long, angUnit), Angle(latitude_first_parallel, angUnit), Angle(latitude_second_parallel, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Krovak * (north oriented) projection method. * * See osgeo::proj::operation::Conversion::createKrovakNorthOriented(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_krovak_north_oriented( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_of_origin, double colatitude_cone_axis, double latitude_pseudo_standard_parallel, double scale_factor_pseudo_standard_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createKrovakNorthOriented( PropertyMap(), Angle(latitude_projection_centre, angUnit), Angle(longitude_of_origin, angUnit), Angle(colatitude_cone_axis, angUnit), Angle(latitude_pseudo_standard_parallel, angUnit), Scale(scale_factor_pseudo_standard_parallel), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Krovak * projection method. * * See osgeo::proj::operation::Conversion::createKrovak(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_krovak( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_of_origin, double colatitude_cone_axis, double latitude_pseudo_standard_parallel, double scale_factor_pseudo_standard_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createKrovak( PropertyMap(), Angle(latitude_projection_centre, angUnit), Angle(longitude_of_origin, angUnit), Angle(colatitude_cone_axis, angUnit), Angle(latitude_pseudo_standard_parallel, angUnit), Scale(scale_factor_pseudo_standard_parallel), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Lambert * Azimuthal Equal Area projection method. * * See osgeo::proj::operation::Conversion::createLambertAzimuthalEqualArea(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_lambert_azimuthal_equal_area( PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLambertAzimuthalEqualArea( PropertyMap(), Angle(latitude_nat_origin, angUnit), Angle(longitude_nat_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Miller * Cylindrical projection method. * * See osgeo::proj::operation::Conversion::createMillerCylindrical(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_miller_cylindrical( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createMillerCylindrical( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Mercator * projection method. * * See osgeo::proj::operation::Conversion::createMercatorVariantA(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_mercator_variant_a( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createMercatorVariantA( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Mercator * projection method. * * See osgeo::proj::operation::Conversion::createMercatorVariantB(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_mercator_variant_b( PJ_CONTEXT *ctx, double latitude_first_parallel, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createMercatorVariantB( PropertyMap(), Angle(latitude_first_parallel, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Popular * Visualisation Pseudo Mercator projection method. * * See * osgeo::proj::operation::Conversion::createPopularVisualisationPseudoMercator(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_popular_visualisation_pseudo_mercator( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createPopularVisualisationPseudoMercator( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Mollweide * projection method. * * See osgeo::proj::operation::Conversion::createMollweide(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_mollweide(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createMollweide( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the New Zealand * Map Grid projection method. * * See osgeo::proj::operation::Conversion::createNewZealandMappingGrid(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_new_zealand_mapping_grid( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createNewZealandMappingGrid( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Oblique * Stereographic (Alternative) projection method. * * See osgeo::proj::operation::Conversion::createObliqueStereographic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_oblique_stereographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createObliqueStereographic( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the * Orthographic projection method. * * See osgeo::proj::operation::Conversion::createOrthographic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_orthographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createOrthographic( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Local * Orthographic projection method. * * See osgeo::proj::operation::Conversion::createLocalOrthographic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_local_orthographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double azimuth, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createLocalOrthographic( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Angle(azimuth, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the American * Polyconic projection method. * * See osgeo::proj::operation::Conversion::createAmericanPolyconic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_american_polyconic( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createAmericanPolyconic( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Polar * Stereographic (Variant A) projection method. * * See osgeo::proj::operation::Conversion::createPolarStereographicVariantA(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_polar_stereographic_variant_a( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createPolarStereographicVariantA( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Polar * Stereographic (Variant B) projection method. * * See osgeo::proj::operation::Conversion::createPolarStereographicVariantB(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_polar_stereographic_variant_b( PJ_CONTEXT *ctx, double latitude_standard_parallel, double longitude_of_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createPolarStereographicVariantB( PropertyMap(), Angle(latitude_standard_parallel, angUnit), Angle(longitude_of_origin, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Robinson * projection method. * * See osgeo::proj::operation::Conversion::createRobinson(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_robinson(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createRobinson( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Sinusoidal * projection method. * * See osgeo::proj::operation::Conversion::createSinusoidal(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_sinusoidal(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createSinusoidal( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the * Stereographic projection method. * * See osgeo::proj::operation::Conversion::createStereographic(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_stereographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createStereographic( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Scale(scale), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Van der * Grinten projection method. * * See osgeo::proj::operation::Conversion::createVanDerGrinten(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_van_der_grinten(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createVanDerGrinten( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Wagner I * projection method. * * See osgeo::proj::operation::Conversion::createWagnerI(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_wagner_i(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createWagnerI( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Wagner II * projection method. * * See osgeo::proj::operation::Conversion::createWagnerII(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_wagner_ii(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createWagnerII( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Wagner III * projection method. * * See osgeo::proj::operation::Conversion::createWagnerIII(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_wagner_iii( PJ_CONTEXT *ctx, double latitude_true_scale, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createWagnerIII( PropertyMap(), Angle(latitude_true_scale, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Wagner IV * projection method. * * See osgeo::proj::operation::Conversion::createWagnerIV(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_wagner_iv(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createWagnerIV( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Wagner V * projection method. * * See osgeo::proj::operation::Conversion::createWagnerV(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_wagner_v(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createWagnerV( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Wagner VI * projection method. * * See osgeo::proj::operation::Conversion::createWagnerVI(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_wagner_vi(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createWagnerVI( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Wagner VII * projection method. * * See osgeo::proj::operation::Conversion::createWagnerVII(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_wagner_vii(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createWagnerVII( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the * Quadrilateralized Spherical Cube projection method. * * See * osgeo::proj::operation::Conversion::createQuadrilateralizedSphericalCube(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_quadrilateralized_spherical_cube( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createQuadrilateralizedSphericalCube( PropertyMap(), Angle(center_lat, angUnit), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Spherical * Cross-Track Height projection method. * * See osgeo::proj::operation::Conversion::createSphericalCrossTrackHeight(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_spherical_cross_track_height( PJ_CONTEXT *ctx, double peg_point_lat, double peg_point_long, double peg_point_heading, double peg_point_height, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createSphericalCrossTrackHeight( PropertyMap(), Angle(peg_point_lat, angUnit), Angle(peg_point_long, angUnit), Angle(peg_point_heading, angUnit), Length(peg_point_height, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS with a conversion based on the Equal Earth * projection method. * * See osgeo::proj::operation::Conversion::createEqualEarth(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_equal_earth(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createEqualEarth( PropertyMap(), Angle(center_long, angUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Vertical Perspective projection * method. * * See osgeo::proj::operation::Conversion::createVerticalPerspective(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). * * @since 6.3 */ PJ *proj_create_conversion_vertical_perspective( PJ_CONTEXT *ctx, double topo_origin_lat, double topo_origin_long, double topo_origin_height, double view_point_height, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure linearUnit( createLinearUnit(linear_unit_name, linear_unit_conv_factor)); UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createVerticalPerspective( PropertyMap(), Angle(topo_origin_lat, angUnit), Angle(topo_origin_long, angUnit), Length(topo_origin_height, linearUnit), Length(view_point_height, linearUnit), Length(false_easting, linearUnit), Length(false_northing, linearUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Pole Rotation method, using the * conventions of the GRIB 1 and GRIB 2 data formats. * * See osgeo::proj::operation::Conversion::createPoleRotationGRIBConvention(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_pole_rotation_grib_convention( PJ_CONTEXT *ctx, double south_pole_lat_in_unrotated_crs, double south_pole_long_in_unrotated_crs, double axis_rotation, const char *ang_unit_name, double ang_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createPoleRotationGRIBConvention( PropertyMap(), Angle(south_pole_lat_in_unrotated_crs, angUnit), Angle(south_pole_long_in_unrotated_crs, angUnit), Angle(axis_rotation, angUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Pole Rotation method, using * the conventions of the netCDF CF convention for the netCDF format. * * See * osgeo::proj::operation::Conversion::createPoleRotationNetCDFCFConvention(). * * Linear parameters are expressed in (linear_unit_name, * linear_unit_conv_factor). * Angular parameters are expressed in (ang_unit_name, ang_unit_conv_factor). */ PJ *proj_create_conversion_pole_rotation_netcdf_cf_convention( PJ_CONTEXT *ctx, double grid_north_pole_latitude, double grid_north_pole_longitude, double north_pole_grid_longitude, const char *ang_unit_name, double ang_unit_conv_factor) { SANITIZE_CTX(ctx); try { UnitOfMeasure angUnit( createAngularUnit(ang_unit_name, ang_unit_conv_factor)); auto conv = Conversion::createPoleRotationNetCDFCFConvention( PropertyMap(), Angle(grid_north_pole_latitude, angUnit), Angle(grid_north_pole_longitude, angUnit), Angle(north_pole_grid_longitude, angUnit)); return proj_create_conversion(ctx, conv); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } /* END: Generated by scripts/create_c_api_projections.py*/ // --------------------------------------------------------------------------- /** \brief Return whether a coordinate operation can be instantiated as * a PROJ pipeline, checking in particular that referenced grids are * available. * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type CoordinateOperation or derived classes * (must not be NULL) * @return TRUE or FALSE. */ int proj_coordoperation_is_instantiable(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto op = dynamic_cast( coordoperation->iso_obj.get()); if (!op) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateOperation"); return 0; } auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { auto ret = op->isPROJInstantiable( dbContext, proj_context_is_network_enabled(ctx) != FALSE) ? 1 : 0; return ret; } catch (const std::exception &) { return 0; } } // --------------------------------------------------------------------------- /** \brief Return whether a coordinate operation has a "ballpark" * transformation, * that is a very approximate one, due to lack of more accurate transformations. * * Typically a null geographic offset between two horizontal datum, or a * null vertical offset (or limited to unit changes) between two vertical * datum. Errors of several tens to one hundred meters might be expected, * compared to more accurate transformations. * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type CoordinateOperation or derived classes * (must not be NULL) * @return TRUE or FALSE. */ int proj_coordoperation_has_ballpark_transformation(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto op = dynamic_cast( coordoperation->iso_obj.get()); if (!op) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateOperation"); return 0; } return op->hasBallparkTransformation(); } // --------------------------------------------------------------------------- /** \brief Return whether a coordinate operation requires coordinate tuples * to have a valid input time for the coordinate transformation to succeed. * (this applies for the forward direction) * * Note: in the case of a time-dependent Helmert transformation, this function * will return true, but when executing proj_trans(), execution will still * succeed if the time information is missing, due to the transformation central * epoch being used as a fallback. * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type CoordinateOperation or derived classes * (must not be NULL) * @return TRUE or FALSE. * @since 9.5 */ int proj_coordoperation_requires_per_coordinate_input_time( PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto op = dynamic_cast( coordoperation->iso_obj.get()); if (!op) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateOperation"); return false; } return op->requiresPerCoordinateInputTime(); } // --------------------------------------------------------------------------- /** \brief Return the number of parameters of a SingleOperation * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type SingleOperation or derived classes * (must not be NULL) */ int proj_coordoperation_get_param_count(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto op = dynamic_cast(coordoperation->iso_obj.get()); if (!op) { proj_log_error(ctx, __FUNCTION__, "Object is not a SingleOperation"); return 0; } return static_cast(op->parameterValues().size()); } // --------------------------------------------------------------------------- /** \brief Return the index of a parameter of a SingleOperation * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type SingleOperation or derived classes * (must not be NULL) * @param name Parameter name. Must not be NULL * @return index (>=0), or -1 in case of error. */ int proj_coordoperation_get_param_index(PJ_CONTEXT *ctx, const PJ *coordoperation, const char *name) { SANITIZE_CTX(ctx); if (!coordoperation || !name) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } auto op = dynamic_cast(coordoperation->iso_obj.get()); if (!op) { proj_log_error(ctx, __FUNCTION__, "Object is not a SingleOperation"); return -1; } int index = 0; for (const auto &genParam : op->method()->parameters()) { if (Identifier::isEquivalentName(genParam->nameStr().c_str(), name)) { return index; } index++; } return -1; } // --------------------------------------------------------------------------- /** \brief Return a parameter of a SingleOperation * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type SingleOperation or derived classes * (must not be NULL) * @param index Parameter index. * @param out_name Pointer to a string value to store the parameter name. or * NULL * @param out_auth_name Pointer to a string value to store the parameter * authority name. or NULL * @param out_code Pointer to a string value to store the parameter * code. or NULL * @param out_value Pointer to a double value to store the parameter * value (if numeric). or NULL * @param out_value_string Pointer to a string value to store the parameter * value (if of type string). or NULL * @param out_unit_conv_factor Pointer to a double value to store the parameter * unit conversion factor. or NULL * @param out_unit_name Pointer to a string value to store the parameter * unit name. or NULL * @param out_unit_auth_name Pointer to a string value to store the * unit authority name. or NULL * @param out_unit_code Pointer to a string value to store the * unit code. or NULL * @param out_unit_category Pointer to a string value to store the parameter * name. or * NULL. This value might be "unknown", "none", "linear", "linear_per_time", * "angular", "angular_per_time", "scale", "scale_per_time", "time", * "parametric" or "parametric_per_time" * @return TRUE in case of success. */ int proj_coordoperation_get_param( PJ_CONTEXT *ctx, const PJ *coordoperation, int index, const char **out_name, const char **out_auth_name, const char **out_code, double *out_value, const char **out_value_string, double *out_unit_conv_factor, const char **out_unit_name, const char **out_unit_auth_name, const char **out_unit_code, const char **out_unit_category) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto op = dynamic_cast(coordoperation->iso_obj.get()); if (!op) { proj_log_error(ctx, __FUNCTION__, "Object is not a SingleOperation"); return false; } const auto ¶meters = op->method()->parameters(); const auto &values = op->parameterValues(); if (static_cast(index) >= parameters.size() || static_cast(index) >= values.size()) { proj_log_error(ctx, __FUNCTION__, "Invalid index"); return false; } const auto ¶m = parameters[index]; const auto ¶m_ids = param->identifiers(); if (out_name) { *out_name = param->name()->description()->c_str(); } if (out_auth_name) { if (!param_ids.empty()) { *out_auth_name = param_ids[0]->codeSpace()->c_str(); } else { *out_auth_name = nullptr; } } if (out_code) { if (!param_ids.empty()) { *out_code = param_ids[0]->code().c_str(); } else { *out_code = nullptr; } } const auto &value = values[index]; ParameterValuePtr paramValue = nullptr; auto opParamValue = dynamic_cast(value.get()); if (opParamValue) { paramValue = opParamValue->parameterValue().as_nullable(); } if (out_value) { *out_value = 0; if (paramValue) { if (paramValue->type() == ParameterValue::Type::MEASURE) { *out_value = paramValue->value().value(); } } } if (out_value_string) { *out_value_string = nullptr; if (paramValue) { if (paramValue->type() == ParameterValue::Type::FILENAME) { *out_value_string = paramValue->valueFile().c_str(); } else if (paramValue->type() == ParameterValue::Type::STRING) { *out_value_string = paramValue->stringValue().c_str(); } } } if (out_unit_conv_factor) { *out_unit_conv_factor = 0; } if (out_unit_name) { *out_unit_name = nullptr; } if (out_unit_auth_name) { *out_unit_auth_name = nullptr; } if (out_unit_code) { *out_unit_code = nullptr; } if (out_unit_category) { *out_unit_category = nullptr; } if (paramValue) { if (paramValue->type() == ParameterValue::Type::MEASURE) { const auto &unit = paramValue->value().unit(); if (out_unit_conv_factor) { *out_unit_conv_factor = unit.conversionToSI(); } if (out_unit_name) { *out_unit_name = unit.name().c_str(); } if (out_unit_auth_name) { *out_unit_auth_name = unit.codeSpace().c_str(); } if (out_unit_code) { *out_unit_code = unit.code().c_str(); } if (out_unit_category) { *out_unit_category = get_unit_category(unit.name(), unit.type()); } } } return true; } // --------------------------------------------------------------------------- /** \brief Return the parameters of a Helmert transformation as WKT1 TOWGS84 * values. * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type Transformation, that can be represented * as a WKT1 TOWGS84 node (must not be NULL) * @param out_values Pointer to an array of value_count double values. * @param value_count Size of out_values array. The suggested size is 7 to get * translation, rotation and scale difference parameters. Rotation and scale * difference terms might be zero if the transformation only includes * translation * parameters. In that case, value_count could be set to 3. * @param emit_error_if_incompatible Boolean to indicate if an error must be * logged if coordoperation is not compatible with a WKT1 TOWGS84 * representation. * @return TRUE in case of success, or FALSE if coordoperation is not * compatible with a WKT1 TOWGS84 representation. */ int proj_coordoperation_get_towgs84_values(PJ_CONTEXT *ctx, const PJ *coordoperation, double *out_values, int value_count, int emit_error_if_incompatible) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto transf = dynamic_cast(coordoperation->iso_obj.get()); if (!transf) { if (emit_error_if_incompatible) { proj_log_error(ctx, __FUNCTION__, "Object is not a Transformation"); } return FALSE; } const auto values = transf->getTOWGS84Parameters(false); if (!values.empty()) { for (int i = 0; i < value_count && static_cast(i) < values.size(); i++) { out_values[i] = values[i]; } return TRUE; } else { if (emit_error_if_incompatible) { proj_log_error(ctx, __FUNCTION__, "Transformation cannot be formatted as WKT1 TOWGS84 " "parameters"); } return FALSE; } } // --------------------------------------------------------------------------- /** \brief Return the number of grids used by a CoordinateOperation * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type CoordinateOperation or derived classes * (must not be NULL) */ int proj_coordoperation_get_grid_used_count(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto co = dynamic_cast( coordoperation->iso_obj.get()); if (!co) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateOperation"); return 0; } auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { if (!coordoperation->gridsNeededAsked) { coordoperation->gridsNeededAsked = true; const auto gridsNeeded = co->gridsNeeded( dbContext, proj_context_is_network_enabled(ctx) != FALSE); for (const auto &gridDesc : gridsNeeded) { coordoperation->gridsNeeded.emplace_back(gridDesc); } } return static_cast(coordoperation->gridsNeeded.size()); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return 0; } } // --------------------------------------------------------------------------- /** \brief Return a parameter of a SingleOperation * * @param ctx PROJ context, or NULL for default context * @param coordoperation Object of type SingleOperation or derived classes * (must not be NULL) * @param index Parameter index. * @param out_short_name Pointer to a string value to store the grid short name. * or NULL * @param out_full_name Pointer to a string value to store the grid full * filename. or NULL * @param out_package_name Pointer to a string value to store the package name * where * the grid might be found. or NULL * @param out_url Pointer to a string value to store the grid URL or the * package URL where the grid might be found. or NULL * @param out_direct_download Pointer to a int (boolean) value to store whether * *out_url can be downloaded directly. or NULL * @param out_open_license Pointer to a int (boolean) value to store whether * the grid is released with an open license. or NULL * @param out_available Pointer to a int (boolean) value to store whether the * grid is available at runtime. or NULL * @return TRUE in case of success. */ int proj_coordoperation_get_grid_used( PJ_CONTEXT *ctx, const PJ *coordoperation, int index, const char **out_short_name, const char **out_full_name, const char **out_package_name, const char **out_url, int *out_direct_download, int *out_open_license, int *out_available) { SANITIZE_CTX(ctx); const int count = proj_coordoperation_get_grid_used_count(ctx, coordoperation); if (index < 0 || index >= count) { proj_log_error(ctx, __FUNCTION__, "Invalid index"); return false; } const auto &gridDesc = coordoperation->gridsNeeded[index]; if (out_short_name) { *out_short_name = gridDesc.shortName.c_str(); } if (out_full_name) { *out_full_name = gridDesc.fullName.c_str(); } if (out_package_name) { *out_package_name = gridDesc.packageName.c_str(); } if (out_url) { *out_url = gridDesc.url.c_str(); } if (out_direct_download) { *out_direct_download = gridDesc.directDownload; } if (out_open_license) { *out_open_license = gridDesc.openLicense; } if (out_available) { *out_available = gridDesc.available; } return true; } // --------------------------------------------------------------------------- /** \brief Opaque object representing an operation factory context. */ struct PJ_OPERATION_FACTORY_CONTEXT { //! @cond Doxygen_Suppress CoordinateOperationContextNNPtr operationContext; explicit PJ_OPERATION_FACTORY_CONTEXT( CoordinateOperationContextNNPtr &&operationContextIn) : operationContext(std::move(operationContextIn)) {} PJ_OPERATION_FACTORY_CONTEXT(const PJ_OPERATION_FACTORY_CONTEXT &) = delete; PJ_OPERATION_FACTORY_CONTEXT & operator=(const PJ_OPERATION_FACTORY_CONTEXT &) = delete; //! @endcond }; // --------------------------------------------------------------------------- /** \brief Instantiate a context for building coordinate operations between * two CRS. * * The returned object must be unreferenced with * proj_operation_factory_context_destroy() after use. * * If authority is NULL or the empty string, then coordinate * operations from any authority will be searched, with the restrictions set * in the authority_to_authority_preference database table. * If authority is set to "any", then coordinate * operations from any authority will be searched * If authority is a non-empty string different of "any", * then coordinate operations will be searched only in that authority namespace. * * @param ctx Context, or NULL for default context. * @param authority Name of authority to which to restrict the search of * candidate operations. * @return Object that must be unreferenced with * proj_operation_factory_context_destroy(), or NULL in * case of error. */ PJ_OPERATION_FACTORY_CONTEXT * proj_create_operation_factory_context(PJ_CONTEXT *ctx, const char *authority) { SANITIZE_CTX(ctx); auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { if (dbContext) { auto factory = CoordinateOperationFactory::create(); auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext), std::string(authority ? authority : "")); auto operationContext = CoordinateOperationContext::create(authFactory, nullptr, 0.0); return new PJ_OPERATION_FACTORY_CONTEXT( std::move(operationContext)); } else { auto operationContext = CoordinateOperationContext::create(nullptr, nullptr, 0.0); return new PJ_OPERATION_FACTORY_CONTEXT( std::move(operationContext)); } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Drops a reference on an object. * * This method should be called one and exactly one for each function * returning a PJ_OPERATION_FACTORY_CONTEXT* * * @param ctx Object, or NULL. */ void proj_operation_factory_context_destroy(PJ_OPERATION_FACTORY_CONTEXT *ctx) { delete ctx; } // --------------------------------------------------------------------------- /** \brief Set the desired accuracy of the resulting coordinate transformations. * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param accuracy Accuracy in meter (or 0 to disable the filter). */ void proj_operation_factory_context_set_desired_accuracy( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, double accuracy) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { factory_ctx->operationContext->setDesiredAccuracy(accuracy); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set the desired area of interest for the resulting coordinate * transformations. * * For an area of interest crossing the anti-meridian, west_lon_degree will be * greater than east_lon_degree. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param west_lon_degree West longitude (in degrees). * @param south_lat_degree South latitude (in degrees). * @param east_lon_degree East longitude (in degrees). * @param north_lat_degree North latitude (in degrees). */ void proj_operation_factory_context_set_area_of_interest( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, double west_lon_degree, double south_lat_degree, double east_lon_degree, double north_lat_degree) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { factory_ctx->operationContext->setAreaOfInterest( Extent::createFromBBOX(west_lon_degree, south_lat_degree, east_lon_degree, north_lat_degree)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set the name of the desired area of interest for the resulting * coordinate transformations. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param area_name Area name. Must be known of the database. */ void proj_operation_factory_context_set_area_of_interest_name( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, const char *area_name) { SANITIZE_CTX(ctx); if (!factory_ctx || !area_name) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { auto extent = factory_ctx->operationContext->getAreaOfInterest(); if (extent == nullptr) { auto dbContext = getDBcontext(ctx); auto factory = AuthorityFactory::create(dbContext, std::string()); auto res = factory->listAreaOfUseFromName(area_name, false); if (res.size() == 1) { factory_ctx->operationContext->setAreaOfInterest( AuthorityFactory::create(dbContext, res.front().first) ->createExtent(res.front().second) .as_nullable()); } else { proj_log_error(ctx, __FUNCTION__, "cannot find area"); return; } } else { factory_ctx->operationContext->setAreaOfInterest( metadata::Extent::create(util::optional(area_name), extent->geographicElements(), extent->verticalElements(), extent->temporalElements()) .as_nullable()); } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set how source and target CRS extent should be used * when considering if a transformation can be used (only takes effect if * no area of interest is explicitly defined). * * The default is PJ_CRS_EXTENT_SMALLEST. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param use How source and target CRS extent should be used. */ void proj_operation_factory_context_set_crs_extent_use( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_CRS_EXTENT_USE use) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { switch (use) { case PJ_CRS_EXTENT_NONE: factory_ctx->operationContext->setSourceAndTargetCRSExtentUse( CoordinateOperationContext::SourceTargetCRSExtentUse::NONE); break; case PJ_CRS_EXTENT_BOTH: factory_ctx->operationContext->setSourceAndTargetCRSExtentUse( CoordinateOperationContext::SourceTargetCRSExtentUse::BOTH); break; case PJ_CRS_EXTENT_INTERSECTION: factory_ctx->operationContext->setSourceAndTargetCRSExtentUse( CoordinateOperationContext::SourceTargetCRSExtentUse:: INTERSECTION); break; case PJ_CRS_EXTENT_SMALLEST: factory_ctx->operationContext->setSourceAndTargetCRSExtentUse( CoordinateOperationContext::SourceTargetCRSExtentUse::SMALLEST); break; } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set the spatial criterion to use when comparing the area of * validity of coordinate operations with the area of interest / area of * validity of * source and target CRS. * * The default is PROJ_SPATIAL_CRITERION_STRICT_CONTAINMENT. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param criterion spatial criterion to use */ void proj_operation_factory_context_set_spatial_criterion( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_SPATIAL_CRITERION criterion) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { switch (criterion) { case PROJ_SPATIAL_CRITERION_STRICT_CONTAINMENT: factory_ctx->operationContext->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion:: STRICT_CONTAINMENT); break; case PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION: factory_ctx->operationContext->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion:: PARTIAL_INTERSECTION); break; } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set how grid availability is used. * * The default is USE_FOR_SORTING. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param use how grid availability is used. */ void proj_operation_factory_context_set_grid_availability_use( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_GRID_AVAILABILITY_USE use) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { switch (use) { case PROJ_GRID_AVAILABILITY_USED_FOR_SORTING: factory_ctx->operationContext->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: USE_FOR_SORTING); break; case PROJ_GRID_AVAILABILITY_DISCARD_OPERATION_IF_MISSING_GRID: factory_ctx->operationContext->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: DISCARD_OPERATION_IF_MISSING_GRID); break; case PROJ_GRID_AVAILABILITY_IGNORED: factory_ctx->operationContext->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); break; case PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE: factory_ctx->operationContext->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: KNOWN_AVAILABLE); break; } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set whether PROJ alternative grid names should be substituted to * the official authority names. * * The default is true. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param usePROJNames whether PROJ alternative grid names should be used */ void proj_operation_factory_context_set_use_proj_alternative_grid_names( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int usePROJNames) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { factory_ctx->operationContext->setUsePROJAlternativeGridNames( usePROJNames != 0); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set whether an intermediate pivot CRS can be used for researching * coordinate operations between a source and target CRS. * * Concretely if in the database there is an operation from A to C * (or C to A), and another one from C to B (or B to C), but no direct * operation between A and B, setting this parameter to true, allow * chaining both operations. * * The current implementation is limited to researching one intermediate * step. * * By default, with the IF_NO_DIRECT_TRANSFORMATION strategy, all potential * C candidates will be used if there is no direct transformation. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param use whether and how intermediate CRS may be used. */ void proj_operation_factory_context_set_allow_use_intermediate_crs( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_INTERMEDIATE_CRS_USE use) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { switch (use) { case PROJ_INTERMEDIATE_CRS_USE_ALWAYS: factory_ctx->operationContext->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::ALWAYS); break; case PROJ_INTERMEDIATE_CRS_USE_IF_NO_DIRECT_TRANSFORMATION: factory_ctx->operationContext->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse:: IF_NO_DIRECT_TRANSFORMATION); break; case PROJ_INTERMEDIATE_CRS_USE_NEVER: factory_ctx->operationContext->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::NEVER); break; } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Restrict the potential pivot CRSs that can be used when trying to * build a coordinate operation between two CRS that have no direct operation. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param list_of_auth_name_codes an array of strings NLL terminated, * with the format { "auth_name1", "code1", "auth_name2", "code2", ... NULL } */ void proj_operation_factory_context_set_allowed_intermediate_crs( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, const char *const *list_of_auth_name_codes) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { std::vector> pivots; for (auto iter = list_of_auth_name_codes; iter && iter[0] && iter[1]; iter += 2) { pivots.emplace_back(std::pair( std::string(iter[0]), std::string(iter[1]))); } factory_ctx->operationContext->setIntermediateCRS(pivots); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set whether transformations that are superseded (but not deprecated) * should be discarded. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param discard superseded crs or not */ void proj_operation_factory_context_set_discard_superseded( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int discard) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { factory_ctx->operationContext->setDiscardSuperseded(discard != 0); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- /** \brief Set whether ballpark transformations are allowed. * * @param ctx PROJ context, or NULL for default context * @param factory_ctx Operation factory context. must not be NULL * @param allow set to TRUE to allow ballpark transformations. * @since 7.1 */ void proj_operation_factory_context_set_allow_ballpark_transformations( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int allow) { SANITIZE_CTX(ctx); if (!factory_ctx) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return; } try { factory_ctx->operationContext->setAllowBallparkTransformations(allow != 0); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Opaque object representing a set of operation results. */ struct PJ_OPERATION_LIST : PJ_OBJ_LIST { PJ *source_crs; PJ *target_crs; bool hasPreparedOperation = false; std::vector preparedOperations{}; explicit PJ_OPERATION_LIST(PJ_CONTEXT *ctx, const PJ *source_crsIn, const PJ *target_crsIn, std::vector &&objectsIn); ~PJ_OPERATION_LIST() override; PJ_OPERATION_LIST(const PJ_OPERATION_LIST &) = delete; PJ_OPERATION_LIST &operator=(const PJ_OPERATION_LIST &) = delete; const std::vector &getPreparedOperations(PJ_CONTEXT *ctx); }; // --------------------------------------------------------------------------- PJ_OPERATION_LIST::PJ_OPERATION_LIST( PJ_CONTEXT *ctx, const PJ *source_crsIn, const PJ *target_crsIn, std::vector &&objectsIn) : PJ_OBJ_LIST(std::move(objectsIn)), source_crs(proj_clone(ctx, source_crsIn)), target_crs(proj_clone(ctx, target_crsIn)) {} // --------------------------------------------------------------------------- PJ_OPERATION_LIST::~PJ_OPERATION_LIST() { auto tmpCtxt = proj_context_create(); proj_assign_context(source_crs, tmpCtxt); proj_assign_context(target_crs, tmpCtxt); proj_destroy(source_crs); proj_destroy(target_crs); proj_context_destroy(tmpCtxt); } // --------------------------------------------------------------------------- const std::vector & PJ_OPERATION_LIST::getPreparedOperations(PJ_CONTEXT *ctx) { if (!hasPreparedOperation) { hasPreparedOperation = true; preparedOperations = pj_create_prepared_operations(ctx, source_crs, target_crs, this); } return preparedOperations; } //! @endcond // --------------------------------------------------------------------------- /** \brief Find a list of CoordinateOperation from source_crs to target_crs. * * The operations are sorted with the most relevant ones first: by * descending * area (intersection of the transformation area with the area of interest, * or intersection of the transformation with the area of use of the CRS), * and * by increasing accuracy. Operations with unknown accuracy are sorted last, * whatever their area. * * Starting with PROJ 9.1, vertical transformations are only done if both * source CRS and target CRS are 3D CRS or Compound CRS with a vertical * component. You may need to use proj_crs_promote_to_3D(). * * @param ctx PROJ context, or NULL for default context * @param source_crs source CRS. Must not be NULL. * @param target_crs source CRS. Must not be NULL. * @param operationContext Search context. Must not be NULL. * @return a result set that must be unreferenced with * proj_list_destroy(), or NULL in case of error. */ PJ_OBJ_LIST * proj_create_operations(PJ_CONTEXT *ctx, const PJ *source_crs, const PJ *target_crs, const PJ_OPERATION_FACTORY_CONTEXT *operationContext) { SANITIZE_CTX(ctx); if (!source_crs || !target_crs || !operationContext) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto sourceCRS = std::dynamic_pointer_cast(source_crs->iso_obj); CoordinateMetadataPtr sourceCoordinateMetadata; if (!sourceCRS) { sourceCoordinateMetadata = std::dynamic_pointer_cast(source_crs->iso_obj); if (!sourceCoordinateMetadata) { proj_log_error(ctx, __FUNCTION__, "source_crs is not a CRS or a CoordinateMetadata"); return nullptr; } if (!sourceCoordinateMetadata->coordinateEpoch().has_value()) { sourceCRS = sourceCoordinateMetadata->crs().as_nullable(); sourceCoordinateMetadata.reset(); } } auto targetCRS = std::dynamic_pointer_cast(target_crs->iso_obj); CoordinateMetadataPtr targetCoordinateMetadata; if (!targetCRS) { targetCoordinateMetadata = std::dynamic_pointer_cast(target_crs->iso_obj); if (!targetCoordinateMetadata) { proj_log_error(ctx, __FUNCTION__, "target_crs is not a CRS or a CoordinateMetadata"); return nullptr; } if (!targetCoordinateMetadata->coordinateEpoch().has_value()) { targetCRS = targetCoordinateMetadata->crs().as_nullable(); targetCoordinateMetadata.reset(); } } try { auto factory = CoordinateOperationFactory::create(); std::vector objects; auto ops = sourceCoordinateMetadata != nullptr ? (targetCoordinateMetadata != nullptr ? factory->createOperations( NN_NO_CHECK(sourceCoordinateMetadata), NN_NO_CHECK(targetCoordinateMetadata), operationContext->operationContext) : factory->createOperations( NN_NO_CHECK(sourceCoordinateMetadata), NN_NO_CHECK(targetCRS), operationContext->operationContext)) : targetCoordinateMetadata != nullptr ? factory->createOperations( NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCoordinateMetadata), operationContext->operationContext) : factory->createOperations( NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), operationContext->operationContext); for (const auto &op : ops) { objects.emplace_back(op); } return new PJ_OPERATION_LIST(ctx, source_crs, target_crs, std::move(objects)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** Return the index of the operation that would be the most appropriate to * transform the specified coordinates. * * This operation may use resources that are not locally available, depending * on the search criteria used by proj_create_operations(). * * This could be done by using proj_create_operations() with a punctual bounding * box, but this function is faster when one needs to evaluate on many points * with the same (source_crs, target_crs) tuple. * * @param ctx PROJ context, or NULL for default context * @param operations List of operations returned by proj_create_operations() * @param direction Direction into which to transform the point. * @param coord Coordinate to transform * @return the index in operations that would be used to transform coord. Or -1 * in case of error, or no match. * * @since 7.1 */ int proj_get_suggested_operation(PJ_CONTEXT *ctx, PJ_OBJ_LIST *operations, // cppcheck-suppress passedByValue PJ_DIRECTION direction, PJ_COORD coord) { SANITIZE_CTX(ctx); auto opList = dynamic_cast(operations); if (opList == nullptr) { proj_log_error(ctx, __FUNCTION__, "operations is not a list of operations"); return -1; } // Special case: // proj_create_crs_to_crs_from_pj() always use the unique operation // if there's a single one if (opList->objects.size() == 1) { return 0; } int iExcluded[2] = {-1, -1}; const auto &preparedOps = opList->getPreparedOperations(ctx); int idx = pj_get_suggested_operation(ctx, preparedOps, iExcluded, /* skipNonInstantiable= */ false, direction, coord); if (idx >= 0) { idx = preparedOps[idx].idxInOriginalList; } return idx; } // --------------------------------------------------------------------------- /** \brief Return the number of objects in the result set * * @param result Object of type PJ_OBJ_LIST (must not be NULL) */ int proj_list_get_count(const PJ_OBJ_LIST *result) { if (!result) { return 0; } return static_cast(result->objects.size()); } // --------------------------------------------------------------------------- /** \brief Return an object from the result set * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param result Object of type PJ_OBJ_LIST (must not be NULL) * @param index Index * @return a new object that must be unreferenced with proj_destroy(), * or nullptr in case of error. */ PJ *proj_list_get(PJ_CONTEXT *ctx, const PJ_OBJ_LIST *result, int index) { SANITIZE_CTX(ctx); if (!result) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } if (index < 0 || index >= proj_list_get_count(result)) { proj_log_error(ctx, __FUNCTION__, "Invalid index"); return nullptr; } return pj_obj_create(ctx, result->objects[index]); } // --------------------------------------------------------------------------- /** \brief Drops a reference on the result set. * * This method should be called one and exactly one for each function * returning a PJ_OBJ_LIST* * * @param result Object, or NULL. */ void proj_list_destroy(PJ_OBJ_LIST *result) { delete result; } // --------------------------------------------------------------------------- /** \brief Return the accuracy (in metre) of a coordinate operation. * * @param ctx PROJ context, or NULL for default context * @param coordoperation Coordinate operation. Must not be NULL. * @return the accuracy, or a negative value if unknown or in case of error. */ double proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx, const PJ *coordoperation) { SANITIZE_CTX(ctx); if (!coordoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } auto co = dynamic_cast( coordoperation->iso_obj.get()); if (!co) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateOperation"); return -1; } const auto &accuracies = co->coordinateOperationAccuracies(); if (accuracies.empty()) { return -1; } try { return c_locale_stod(accuracies[0]->value()); } catch (const std::exception &) { } return -1; } // --------------------------------------------------------------------------- /** \brief Returns the datum of a SingleCRS. * * If that function returns NULL, @see proj_crs_get_datum_ensemble() to * potentially get a DatumEnsemble instead. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type SingleCRS (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error (or if there is no datum) */ PJ *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a SingleCRS"); return nullptr; } const auto &datum = l_crs->datum(); if (!datum) { return nullptr; } return pj_obj_create(ctx, NN_NO_CHECK(datum)); } // --------------------------------------------------------------------------- /** \brief Returns the datum ensemble of a SingleCRS. * * If that function returns NULL, @see proj_crs_get_datum() to * potentially get a Datum instead. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type SingleCRS (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error (or if there is no datum ensemble) * * @since 7.2 */ PJ *proj_crs_get_datum_ensemble(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a SingleCRS"); return nullptr; } const auto &datumEnsemble = l_crs->datumEnsemble(); if (!datumEnsemble) { return nullptr; } return pj_obj_create(ctx, NN_NO_CHECK(datumEnsemble)); } // --------------------------------------------------------------------------- /** \brief Returns the number of members of a datum ensemble. * * @param ctx PROJ context, or NULL for default context * @param datum_ensemble Object of type DatumEnsemble (must not be NULL) * * @since 7.2 */ int proj_datum_ensemble_get_member_count(PJ_CONTEXT *ctx, const PJ *datum_ensemble) { SANITIZE_CTX(ctx); if (!datum_ensemble) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return 0; } auto l_datum_ensemble = dynamic_cast(datum_ensemble->iso_obj.get()); if (!l_datum_ensemble) { proj_log_error(ctx, __FUNCTION__, "Object is not a DatumEnsemble"); return 0; } return static_cast(l_datum_ensemble->datums().size()); } // --------------------------------------------------------------------------- /** \brief Returns the positional accuracy of the datum ensemble. * * @param ctx PROJ context, or NULL for default context * @param datum_ensemble Object of type DatumEnsemble (must not be NULL) * @return the accuracy, or -1 in case of error. * * @since 7.2 */ double proj_datum_ensemble_get_accuracy(PJ_CONTEXT *ctx, const PJ *datum_ensemble) { SANITIZE_CTX(ctx); if (!datum_ensemble) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } auto l_datum_ensemble = dynamic_cast(datum_ensemble->iso_obj.get()); if (!l_datum_ensemble) { proj_log_error(ctx, __FUNCTION__, "Object is not a DatumEnsemble"); return -1; } const auto &accuracy = l_datum_ensemble->positionalAccuracy(); try { return c_locale_stod(accuracy->value()); } catch (const std::exception &) { } return -1; } // --------------------------------------------------------------------------- /** \brief Returns a member from a datum ensemble. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param datum_ensemble Object of type DatumEnsemble (must not be NULL) * @param member_index Index of the datum member to extract (between 0 and * proj_datum_ensemble_get_member_count()-1) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error (or if there is no datum ensemble) * * @since 7.2 */ PJ *proj_datum_ensemble_get_member(PJ_CONTEXT *ctx, const PJ *datum_ensemble, int member_index) { SANITIZE_CTX(ctx); if (!datum_ensemble) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_datum_ensemble = dynamic_cast(datum_ensemble->iso_obj.get()); if (!l_datum_ensemble) { proj_log_error(ctx, __FUNCTION__, "Object is not a DatumEnsemble"); return nullptr; } if (member_index < 0 || member_index >= static_cast(l_datum_ensemble->datums().size())) { proj_log_error(ctx, __FUNCTION__, "Invalid member_index"); return nullptr; } return pj_obj_create(ctx, l_datum_ensemble->datums()[member_index]); } // --------------------------------------------------------------------------- /** \brief Returns a datum for a SingleCRS. * * If the SingleCRS has a datum, then this datum is returned. * Otherwise, the SingleCRS has a datum ensemble, and this datum ensemble is * returned as a regular datum instead of a datum ensemble. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type SingleCRS (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error (or if there is no datum) * * @since 7.2 */ PJ *proj_crs_get_datum_forced(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a SingleCRS"); return nullptr; } const auto &datum = l_crs->datum(); if (datum) { return pj_obj_create(ctx, NN_NO_CHECK(datum)); } const auto &datumEnsemble = l_crs->datumEnsemble(); assert(datumEnsemble); auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); try { return pj_obj_create(ctx, datumEnsemble->asDatum(dbContext)); } catch (const std::exception &e) { proj_log_debug(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Returns the frame reference epoch of a dynamic geodetic or vertical * reference frame. * * @param ctx PROJ context, or NULL for default context * @param datum Object of type DynamicGeodeticReferenceFrame or * DynamicVerticalReferenceFrame (must not be NULL) * @return the frame reference epoch as decimal year, or -1 in case of error. * * @since 7.2 */ double proj_dynamic_datum_get_frame_reference_epoch(PJ_CONTEXT *ctx, const PJ *datum) { SANITIZE_CTX(ctx); if (!datum) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } auto dgrf = dynamic_cast( datum->iso_obj.get()); auto dvrf = dynamic_cast( datum->iso_obj.get()); if (!dgrf && !dvrf) { proj_log_error(ctx, __FUNCTION__, "Object is not a " "DynamicGeodeticReferenceFrame or " "DynamicVerticalReferenceFrame"); return -1; } const auto &frameReferenceEpoch = dgrf ? dgrf->frameReferenceEpoch() : dvrf->frameReferenceEpoch(); return frameReferenceEpoch.value(); } // --------------------------------------------------------------------------- /** \brief Returns the coordinate system of a SingleCRS. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param crs Object of type SingleCRS (must not be NULL) * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_crs_get_coordinate_system(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a SingleCRS"); return nullptr; } return pj_obj_create(ctx, l_crs->coordinateSystem()); } // --------------------------------------------------------------------------- /** \brief Returns the type of the coordinate system. * * @param ctx PROJ context, or NULL for default context * @param cs Object of type CoordinateSystem (must not be NULL) * @return type, or PJ_CS_TYPE_UNKNOWN in case of error. */ PJ_COORDINATE_SYSTEM_TYPE proj_cs_get_type(PJ_CONTEXT *ctx, const PJ *cs) { SANITIZE_CTX(ctx); if (!cs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return PJ_CS_TYPE_UNKNOWN; } auto l_cs = dynamic_cast(cs->iso_obj.get()); if (!l_cs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateSystem"); return PJ_CS_TYPE_UNKNOWN; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_CARTESIAN; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_ELLIPSOIDAL; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_VERTICAL; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_SPHERICAL; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_ORDINAL; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_PARAMETRIC; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_DATETIMETEMPORAL; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_TEMPORALCOUNT; } if (dynamic_cast(l_cs)) { return PJ_CS_TYPE_TEMPORALMEASURE; } return PJ_CS_TYPE_UNKNOWN; } // --------------------------------------------------------------------------- /** \brief Returns the number of axis of the coordinate system. * * @param ctx PROJ context, or NULL for default context * @param cs Object of type CoordinateSystem (must not be NULL) * @return number of axis, or -1 in case of error. */ int proj_cs_get_axis_count(PJ_CONTEXT *ctx, const PJ *cs) { SANITIZE_CTX(ctx); if (!cs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return -1; } auto l_cs = dynamic_cast(cs->iso_obj.get()); if (!l_cs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateSystem"); return -1; } return static_cast(l_cs->axisList().size()); } // --------------------------------------------------------------------------- /** \brief Returns information on an axis * * @param ctx PROJ context, or NULL for default context * @param cs Object of type CoordinateSystem (must not be NULL) * @param index Index of the coordinate system (between 0 and * proj_cs_get_axis_count() - 1) * @param out_name Pointer to a string value to store the axis name. or NULL * @param out_abbrev Pointer to a string value to store the axis abbreviation. * or NULL * @param out_direction Pointer to a string value to store the axis direction. * or NULL * @param out_unit_conv_factor Pointer to a double value to store the axis * unit conversion factor. or NULL * @param out_unit_name Pointer to a string value to store the axis * unit name. or NULL * @param out_unit_auth_name Pointer to a string value to store the axis * unit authority name. or NULL * @param out_unit_code Pointer to a string value to store the axis * unit code. or NULL * @return TRUE in case of success */ int proj_cs_get_axis_info(PJ_CONTEXT *ctx, const PJ *cs, int index, const char **out_name, const char **out_abbrev, const char **out_direction, double *out_unit_conv_factor, const char **out_unit_name, const char **out_unit_auth_name, const char **out_unit_code) { SANITIZE_CTX(ctx); if (!cs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto l_cs = dynamic_cast(cs->iso_obj.get()); if (!l_cs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateSystem"); return false; } const auto &axisList = l_cs->axisList(); if (index < 0 || static_cast(index) >= axisList.size()) { proj_log_error(ctx, __FUNCTION__, "Invalid index"); return false; } const auto &axis = axisList[index]; if (out_name) { *out_name = axis->nameStr().c_str(); } if (out_abbrev) { *out_abbrev = axis->abbreviation().c_str(); } if (out_direction) { *out_direction = axis->direction().toString().c_str(); } if (out_unit_conv_factor) { *out_unit_conv_factor = axis->unit().conversionToSI(); } if (out_unit_name) { *out_unit_name = axis->unit().name().c_str(); } if (out_unit_auth_name) { *out_unit_auth_name = axis->unit().codeSpace().c_str(); } if (out_unit_code) { *out_unit_code = axis->unit().code().c_str(); } return true; } // --------------------------------------------------------------------------- /** \brief Returns a PJ* object whose axis order is the one expected for * visualization purposes. * * The input object must be either: *
    *
  • a coordinate operation, that has been created with * proj_create_crs_to_crs(). If the axis order of its source or target CRS * is northing,easting, then an axis swap operation will be inserted.
  • *
  • or a CRS. The axis order of geographic CRS will be longitude, latitude * [,height], and the one of projected CRS will be easting, northing * [, height]
  • *
* * @param ctx PROJ context, or NULL for default context * @param obj Object of type CRS, or CoordinateOperation created with * proj_create_crs_to_crs() (must not be NULL) * @return a new PJ* object to free with proj_destroy() in case of success, or * nullptr in case of error */ PJ *proj_normalize_for_visualization(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj->alternativeCoordinateOperations.empty()) { try { auto pjNew = std::unique_ptr(pj_new()); if (!pjNew) return nullptr; pjNew->ctx = ctx; pjNew->descr = "Set of coordinate operations"; pjNew->left = obj->left; pjNew->right = obj->right; pjNew->copyStateFrom(*obj); for (const auto &alt : obj->alternativeCoordinateOperations) { auto co = dynamic_cast( alt.pj->iso_obj.get()); if (co) { double minxSrc = alt.minxSrc; double minySrc = alt.minySrc; double maxxSrc = alt.maxxSrc; double maxySrc = alt.maxySrc; double minxDst = alt.minxDst; double minyDst = alt.minyDst; double maxxDst = alt.maxxDst; double maxyDst = alt.maxyDst; auto l_sourceCRS = co->sourceCRS(); auto l_targetCRS = co->targetCRS(); if (l_sourceCRS && l_targetCRS) { const bool swapSource = l_sourceCRS ->mustAxisOrderBeSwitchedForVisualization(); if (swapSource) { std::swap(minxSrc, minySrc); std::swap(maxxSrc, maxySrc); } const bool swapTarget = l_targetCRS ->mustAxisOrderBeSwitchedForVisualization(); if (swapTarget) { std::swap(minxDst, minyDst); std::swap(maxxDst, maxyDst); } } ctx->forceOver = alt.pj->over != 0; auto pjNormalized = pj_obj_create(ctx, co->normalizeForVisualization()); ctx->forceOver = false; pjNormalized->copyStateFrom(*(alt.pj)); pjNew->alternativeCoordinateOperations.emplace_back( alt.idxInOriginalList, minxSrc, minySrc, maxxSrc, maxySrc, minxDst, minyDst, maxxDst, maxyDst, pjNormalized, co->nameStr(), alt.accuracy, alt.pseudoArea, alt.areaName.c_str(), alt.pjSrcGeocentricToLonLat, alt.pjDstGeocentricToLonLat); } } return pjNew.release(); } catch (const std::exception &e) { ctx->forceOver = false; proj_log_debug(ctx, __FUNCTION__, e.what()); return nullptr; } } auto crs = dynamic_cast(obj->iso_obj.get()); if (crs) { try { return pj_obj_create(ctx, crs->normalizeForVisualization()); } catch (const std::exception &e) { proj_log_debug(ctx, __FUNCTION__, e.what()); return nullptr; } } auto co = dynamic_cast(obj->iso_obj.get()); if (!co) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateOperation " "created with " "proj_create_crs_to_crs"); return nullptr; } try { ctx->forceOver = obj->over != 0; auto pjNormalized = pj_obj_create(ctx, co->normalizeForVisualization()); pjNormalized->over = obj->over; ctx->forceOver = false; return pjNormalized; } catch (const std::exception &e) { ctx->forceOver = false; proj_log_debug(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Returns a PJ* coordinate operation object which represents the * inverse operation of the specified coordinate operation. * * @param ctx PROJ context, or NULL for default context * @param obj Object of type CoordinateOperation (must not be NULL) * @return a new PJ* object to free with proj_destroy() in case of success, or * nullptr in case of error * @since 6.3 */ PJ *proj_coordoperation_create_inverse(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto co = dynamic_cast(obj->iso_obj.get()); if (!co) { proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateOperation"); return nullptr; } try { return pj_obj_create(ctx, co->inverse()); } catch (const std::exception &e) { proj_log_debug(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Returns the number of steps of a concatenated operation. * * The input object must be a concatenated operation. * * @param ctx PROJ context, or NULL for default context * @param concatoperation Concatenated operation (must not be NULL) * @return the number of steps, or 0 in case of error. */ int proj_concatoperation_get_step_count(PJ_CONTEXT *ctx, const PJ *concatoperation) { SANITIZE_CTX(ctx); if (!concatoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto l_co = dynamic_cast( concatoperation->iso_obj.get()); if (!l_co) { proj_log_error(ctx, __FUNCTION__, "Object is not a ConcatenatedOperation"); return false; } return static_cast(l_co->operations().size()); } // --------------------------------------------------------------------------- /** \brief Returns a step of a concatenated operation. * * The input object must be a concatenated operation. * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. * * @param ctx PROJ context, or NULL for default context * @param concatoperation Concatenated operation (must not be NULL) * @param i_step Index of the step to extract. Between 0 and * proj_concatoperation_get_step_count()-1 * @return Object that must be unreferenced with proj_destroy(), or NULL * in case of error. */ PJ *proj_concatoperation_get_step(PJ_CONTEXT *ctx, const PJ *concatoperation, int i_step) { SANITIZE_CTX(ctx); if (!concatoperation) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto l_co = dynamic_cast( concatoperation->iso_obj.get()); if (!l_co) { proj_log_error(ctx, __FUNCTION__, "Object is not a ConcatenatedOperation"); return nullptr; } const auto &steps = l_co->operations(); if (i_step < 0 || static_cast(i_step) >= steps.size()) { proj_log_error(ctx, __FUNCTION__, "Invalid step index"); return nullptr; } return pj_obj_create(ctx, steps[i_step]); } // --------------------------------------------------------------------------- /** \brief Opaque object representing an insertion session. */ struct PJ_INSERT_SESSION { //! @cond Doxygen_Suppress PJ_CONTEXT *ctx = nullptr; //!  @endcond }; // --------------------------------------------------------------------------- /** \brief Starts a session for proj_get_insert_statements() * * Starts a new session for one or several calls to * proj_get_insert_statements(). * * An insertion session guarantees that the inserted objects will not create * conflicting intermediate objects. * * The session must be stopped with proj_insert_object_session_destroy(). * * Only one session may be active at a time for a given context. * * @param ctx PROJ context, or NULL for default context * @return the session, or NULL in case of error. * * @since 8.1 */ PJ_INSERT_SESSION *proj_insert_object_session_create(PJ_CONTEXT *ctx) { SANITIZE_CTX(ctx); try { auto dbContext = getDBcontext(ctx); dbContext->startInsertStatementsSession(); PJ_INSERT_SESSION *session = new PJ_INSERT_SESSION; session->ctx = ctx; return session; } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Stops an insertion session started with * proj_insert_object_session_create() * * @param ctx PROJ context, or NULL for default context * @param session The insertion session. * @since 8.1 */ void proj_insert_object_session_destroy(PJ_CONTEXT *ctx, PJ_INSERT_SESSION *session) { SANITIZE_CTX(ctx); if (session) { try { if (session->ctx != ctx) { proj_log_error(ctx, __FUNCTION__, "proj_insert_object_session_destroy() called " "with a context different from the one of " "proj_insert_object_session_create()"); } else { auto dbContext = getDBcontext(ctx); dbContext->stopInsertStatementsSession(); } } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } delete session; } } // --------------------------------------------------------------------------- /** \brief Suggests a database code for the passed object. * * Supported type of objects are PrimeMeridian, Ellipsoid, Datum, DatumEnsemble, * GeodeticCRS, ProjectedCRS, VerticalCRS, CompoundCRS, BoundCRS, Conversion. * * @param ctx PROJ context, or NULL for default context * @param object Object for which to suggest a code. * @param authority Authority name into which the object will be inserted. * @param numeric_code Whether the code should be numeric, or derived from the * object name. * @param options NULL terminated list of options, or NULL. * No options are supported currently. * @return the suggested code, that is guaranteed to not conflict with an * existing one (to be freed with proj_string_destroy), * or nullptr in case of error. * * @since 8.1 */ char *proj_suggests_code_for(PJ_CONTEXT *ctx, const PJ *object, const char *authority, int numeric_code, const char *const *options) { SANITIZE_CTX(ctx); (void)options; if (!object || !authority) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto identifiedObject = std::dynamic_pointer_cast(object->iso_obj); if (!identifiedObject) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "Object is not a IdentifiedObject"); return nullptr; } try { auto dbContext = getDBcontext(ctx); return pj_strdup(dbContext ->suggestsCodeFor(NN_NO_CHECK(identifiedObject), std::string(authority), numeric_code != FALSE) .c_str()); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Free a string. * * Only to be used with functions that document using this function. * * @param str String to free. * * @since 8.1 */ void proj_string_destroy(char *str) { free(str); } // --------------------------------------------------------------------------- /** \brief Returns SQL statements needed to insert the passed object into the * database. * * proj_insert_object_session_create() may have been called previously. * * It is strongly recommended that new objects should not be added in common * registries, such as "EPSG", "ESRI", "IAU", etc. Users should use a custom * authority name instead. If a new object should be * added to the official EPSG registry, users are invited to follow the * procedure explained at https://epsg.org/dataset-change-requests.html. * * Combined with proj_context_get_database_structure(), users can create * auxiliary databases, instead of directly modifying the main proj.db database. * Those auxiliary databases can be specified through * proj_context_set_database_path() or the PROJ_AUX_DB environment variable. * * @param ctx PROJ context, or NULL for default context * @param session The insertion session. May be NULL if a single object must be * inserted. * @param object The object to insert into the database. Currently only * PrimeMeridian, Ellipsoid, Datum, GeodeticCRS, ProjectedCRS, * VerticalCRS, CompoundCRS or BoundCRS are supported. * @param authority Authority name into which the object will be inserted. * Must not be NULL. * @param code Code with which the object will be inserted.Must not be NULL. * @param numeric_codes Whether intermediate objects that can be created should * use numeric codes (true), or may be alphanumeric (false) * @param allowed_authorities NULL terminated list of authority names, or NULL. * Authorities to which intermediate objects are * allowed to refer to. "authority" will be * implicitly added to it. Note that unit, * coordinate systems, projection methods and * parameters will in any case be allowed to refer * to EPSG. * If NULL, allowed_authorities defaults to * {"EPSG", "PROJ", nullptr} * @param options NULL terminated list of options, or NULL. * No options are supported currently. * * @return a list of insert statements (to be freed with * proj_string_list_destroy()), or NULL in case of error. * @since 8.1 */ PROJ_STRING_LIST proj_get_insert_statements( PJ_CONTEXT *ctx, PJ_INSERT_SESSION *session, const PJ *object, const char *authority, const char *code, int numeric_codes, const char *const *allowed_authorities, const char *const *options) { SANITIZE_CTX(ctx); (void)options; struct TempSessionHolder { private: PJ_CONTEXT *m_ctx; PJ_INSERT_SESSION *m_tempSession; TempSessionHolder(const TempSessionHolder &) = delete; TempSessionHolder &operator=(const TempSessionHolder &) = delete; public: TempSessionHolder(PJ_CONTEXT *ctx, PJ_INSERT_SESSION *session) : m_ctx(ctx), m_tempSession(session ? nullptr : proj_insert_object_session_create(ctx)) {} ~TempSessionHolder() { if (m_tempSession) { proj_insert_object_session_destroy(m_ctx, m_tempSession); } } inline PJ_INSERT_SESSION *GetTempSession() const { return m_tempSession; } }; try { TempSessionHolder oHolder(ctx, session); if (!session) { session = oHolder.GetTempSession(); if (!session) { return nullptr; } } if (!object || !authority || !code) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto identifiedObject = std::dynamic_pointer_cast(object->iso_obj); if (!identifiedObject) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "Object is not a IdentifiedObject"); return nullptr; } auto dbContext = getDBcontext(ctx); std::vector allowedAuthorities{"EPSG", "PROJ"}; if (allowed_authorities) { allowedAuthorities.clear(); for (auto iter = allowed_authorities; *iter; ++iter) { allowedAuthorities.emplace_back(*iter); } } auto statements = dbContext->getInsertStatementsFor( NN_NO_CHECK(identifiedObject), authority, code, numeric_codes != FALSE, allowedAuthorities); return to_string_list(std::move(statements)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Returns a list of geoid models available for that crs * * The list includes the geoid models connected directly with the crs, * or via "Height Depth Reversal" or "Change of Vertical Unit" transformations. * The returned list is NULL terminated and must be freed with * proj_string_list_destroy(). * * @param ctx Context, or NULL for default context. * @param auth_name Authority name (must not be NULL) * @param code Object code (must not be NULL) * @param options should be set to NULL for now * @return list of geoid models names (to be freed with * proj_string_list_destroy()), or NULL in case of error. * @since 8.1 */ PROJ_STRING_LIST proj_get_geoid_models_from_database(PJ_CONTEXT *ctx, const char *auth_name, const char *code, const char *const *options) { SANITIZE_CTX(ctx); if (!auth_name || !code) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } (void)options; try { const std::string codeStr(code); auto factory = AuthorityFactory::create(getDBcontext(ctx), auth_name); auto geoidModels = factory->getGeoidModels(codeStr); return to_string_list(std::move(geoidModels)); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateMetadata object * * @since 9.4 */ PJ *proj_coordinate_metadata_create(PJ_CONTEXT *ctx, const PJ *crs, double epoch) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return nullptr; } auto crsCast = std::dynamic_pointer_cast(crs->iso_obj); if (!crsCast) { proj_log_error(ctx, __FUNCTION__, "Object is not a CRS"); return nullptr; } try { auto dbContext = getDBcontextNoException(ctx, __FUNCTION__); return pj_obj_create(ctx, CoordinateMetadata::create( NN_NO_CHECK(crsCast), epoch, dbContext)); } catch (const std::exception &e) { proj_log_debug(ctx, __FUNCTION__, e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** \brief Return the coordinate epoch associated with a CoordinateMetadata. * * It may return a NaN value if there is no associated coordinate epoch. * * @since 9.2 */ double proj_coordinate_metadata_get_epoch(PJ_CONTEXT *ctx, const PJ *obj) { SANITIZE_CTX(ctx); if (!obj) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return std::numeric_limits::quiet_NaN(); } auto ptr = obj->iso_obj.get(); auto coordinateMetadata = dynamic_cast(ptr); if (coordinateMetadata) { if (coordinateMetadata->coordinateEpoch().has_value()) { return coordinateMetadata->coordinateEpochAsDecimalYear(); } return std::numeric_limits::quiet_NaN(); } proj_log_error(ctx, __FUNCTION__, "Object is not a CoordinateMetadata"); return std::numeric_limits::quiet_NaN(); } // --------------------------------------------------------------------------- /** \brief Return whether a CRS has an associated PointMotionOperation * * @since 9.4 */ int proj_crs_has_point_motion_operation(PJ_CONTEXT *ctx, const PJ *crs) { SANITIZE_CTX(ctx); if (!crs) { proj_context_errno_set(ctx, PROJ_ERR_OTHER_API_MISUSE); proj_log_error(ctx, __FUNCTION__, "missing required input"); return false; } auto l_crs = dynamic_cast(crs->iso_obj.get()); if (!l_crs) { proj_log_error(ctx, __FUNCTION__, "Object is not a CRS"); return false; } auto geodeticCRS = l_crs->extractGeodeticCRS(); if (!geodeticCRS) return false; try { auto factory = AuthorityFactory::create(getDBcontext(ctx), std::string()); return !factory ->getPointMotionOperationsFor(NN_NO_CHECK(geodeticCRS), false) .empty(); } catch (const std::exception &e) { proj_log_error(ctx, __FUNCTION__, e.what()); } return false; } proj-9.6.0/src/iso19111/common.cpp000664 001754 001755 00000132165 14764566077 016403 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj.h" #include "proj_internal.h" #include "proj_json_streaming_writer.hpp" #include // M_PI #include #include #include #include using namespace NS_PROJ::internal; using namespace NS_PROJ::io; using namespace NS_PROJ::metadata; using namespace NS_PROJ::util; #if 0 namespace dropbox{ namespace oxygen { template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; }} #endif NS_PROJ_START namespace common { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct UnitOfMeasure::Private { std::string name_{}; double toSI_ = 1.0; UnitOfMeasure::Type type_{UnitOfMeasure::Type::UNKNOWN}; std::string codeSpace_{}; std::string code_{}; Private(const std::string &nameIn, double toSIIn, UnitOfMeasure::Type typeIn, const std::string &codeSpaceIn, const std::string &codeIn) : name_(nameIn), toSI_(toSIIn), type_(typeIn), codeSpace_(codeSpaceIn), code_(codeIn) {} }; //! @endcond // --------------------------------------------------------------------------- /** \brief Creates a UnitOfMeasure. */ UnitOfMeasure::UnitOfMeasure(const std::string &nameIn, double toSIIn, UnitOfMeasure::Type typeIn, const std::string &codeSpaceIn, const std::string &codeIn) : d(std::make_unique(nameIn, toSIIn, typeIn, codeSpaceIn, codeIn)) {} // --------------------------------------------------------------------------- UnitOfMeasure::UnitOfMeasure(const UnitOfMeasure &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress UnitOfMeasure::~UnitOfMeasure() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress UnitOfMeasure &UnitOfMeasure::operator=(const UnitOfMeasure &other) { if (this != &other) { *d = *(other.d); } return *this; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress UnitOfMeasure &UnitOfMeasure::operator=(UnitOfMeasure &&other) { *d = std::move(*(other.d)); other.d = nullptr; BaseObject::operator=(std::move(static_cast(other))); return *this; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress UnitOfMeasureNNPtr UnitOfMeasure::create(const UnitOfMeasure &other) { return util::nn_make_shared(other); } //! @endcond // --------------------------------------------------------------------------- /** \brief Return the name of the unit of measure. */ const std::string &UnitOfMeasure::name() PROJ_PURE_DEFN { return d->name_; } // --------------------------------------------------------------------------- /** \brief Return the conversion factor to the unit of the * International System of Units of the same Type. * * For example, for foot, this would be 0.3048 (metre) * * @return the conversion factor, or 0 if no conversion exists. */ double UnitOfMeasure::conversionToSI() PROJ_PURE_DEFN { return d->toSI_; } // --------------------------------------------------------------------------- /** \brief Return the type of the unit of measure. */ UnitOfMeasure::Type UnitOfMeasure::type() PROJ_PURE_DEFN { return d->type_; } // --------------------------------------------------------------------------- /** \brief Return the code space of the unit of measure. * * For example "EPSG" * * @return the code space, or empty string. */ const std::string &UnitOfMeasure::codeSpace() PROJ_PURE_DEFN { return d->codeSpace_; } // --------------------------------------------------------------------------- /** \brief Return the code of the unit of measure. * * @return the code, or empty string. */ const std::string &UnitOfMeasure::code() PROJ_PURE_DEFN { return d->code_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void UnitOfMeasure::_exportToWKT( WKTFormatter *formatter, const std::string &unitType) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == WKTFormatter::Version::WKT2; const auto l_type = type(); if (!unitType.empty()) { formatter->startNode(unitType, !codeSpace().empty()); } else if (formatter->forceUNITKeyword() && l_type != Type::PARAMETRIC) { formatter->startNode(WKTConstants::UNIT, !codeSpace().empty()); } else { if (isWKT2 && l_type == Type::LINEAR) { formatter->startNode(WKTConstants::LENGTHUNIT, !codeSpace().empty()); } else if (isWKT2 && l_type == Type::ANGULAR) { formatter->startNode(WKTConstants::ANGLEUNIT, !codeSpace().empty()); } else if (isWKT2 && l_type == Type::SCALE) { formatter->startNode(WKTConstants::SCALEUNIT, !codeSpace().empty()); } else if (isWKT2 && l_type == Type::TIME) { formatter->startNode(WKTConstants::TIMEUNIT, !codeSpace().empty()); } else if (isWKT2 && l_type == Type::PARAMETRIC) { formatter->startNode(WKTConstants::PARAMETRICUNIT, !codeSpace().empty()); } else { formatter->startNode(WKTConstants::UNIT, !codeSpace().empty()); } } { const auto &l_name = name(); const bool esri = formatter->useESRIDialect(); if (esri) { if (ci_equal(l_name, "degree")) { formatter->addQuotedString("Degree"); } else if (ci_equal(l_name, "grad")) { formatter->addQuotedString("Grad"); } else if (ci_equal(l_name, "metre")) { formatter->addQuotedString("Meter"); } else { formatter->addQuotedString(l_name); } } else { formatter->addQuotedString(l_name); } const auto &factor = conversionToSI(); if (!isWKT2 || l_type != Type::TIME || factor != 0.0) { // Some TIMEUNIT do not have a conversion factor formatter->add(factor); } if (!codeSpace().empty() && formatter->outputId()) { formatter->startNode( isWKT2 ? WKTConstants::ID : WKTConstants::AUTHORITY, false); formatter->addQuotedString(codeSpace()); const auto &l_code = code(); if (isWKT2) { try { (void)std::stoi(l_code); formatter->add(l_code); } catch (const std::exception &) { formatter->addQuotedString(l_code); } } else { formatter->addQuotedString(l_code); } formatter->endNode(); } } formatter->endNode(); } // --------------------------------------------------------------------------- void UnitOfMeasure::_exportToJSON( JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); const auto &l_codeSpace = codeSpace(); auto objContext( formatter->MakeObjectContext(nullptr, !l_codeSpace.empty())); writer->AddObjKey("type"); const auto l_type = type(); if (l_type == Type::LINEAR) { writer->Add("LinearUnit"); } else if (l_type == Type::ANGULAR) { writer->Add("AngularUnit"); } else if (l_type == Type::SCALE) { writer->Add("ScaleUnit"); } else if (l_type == Type::TIME) { writer->Add("TimeUnit"); } else if (l_type == Type::PARAMETRIC) { writer->Add("ParametricUnit"); } else { writer->Add("Unit"); } writer->AddObjKey("name"); const auto &l_name = name(); writer->Add(l_name); const auto &factor = conversionToSI(); writer->AddObjKey("conversion_factor"); writer->Add(factor, 15); if (!l_codeSpace.empty() && formatter->outputId()) { writer->AddObjKey("id"); auto idContext(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("authority"); writer->Add(l_codeSpace); writer->AddObjKey("code"); const auto &l_code = code(); try { writer->Add(std::stoi(l_code)); } catch (const std::exception &) { writer->Add(l_code); } } } //! @endcond // --------------------------------------------------------------------------- /** Returns whether two units of measures are equal. * * The comparison is based on the name. */ bool UnitOfMeasure::operator==(const UnitOfMeasure &other) PROJ_PURE_DEFN { return name() == other.name(); } // --------------------------------------------------------------------------- /** Returns whether two units of measures are different. * * The comparison is based on the name. */ bool UnitOfMeasure::operator!=(const UnitOfMeasure &other) PROJ_PURE_DEFN { return name() != other.name(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::string UnitOfMeasure::exportToPROJString() const { if (type() == Type::LINEAR) { auto proj_units = pj_list_linear_units(); for (int i = 0; proj_units[i].id != nullptr; i++) { if (::fabs(proj_units[i].factor - conversionToSI()) < 1e-10 * conversionToSI()) { return proj_units[i].id; } } } else if (type() == Type::ANGULAR) { auto proj_angular_units = pj_list_angular_units(); for (int i = 0; proj_angular_units[i].id != nullptr; i++) { if (::fabs(proj_angular_units[i].factor - conversionToSI()) < 1e-10 * conversionToSI()) { return proj_angular_units[i].id; } } } return std::string(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool UnitOfMeasure::_isEquivalentTo( const UnitOfMeasure &other, util::IComparable::Criterion criterion) const { if (criterion == util::IComparable::Criterion::STRICT) { return operator==(other); } return std::fabs(conversionToSI() - other.conversionToSI()) <= 1e-10 * std::fabs(conversionToSI()); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Measure::Private { double value_ = 0.0; UnitOfMeasure unit_{}; Private(double valueIn, const UnitOfMeasure &unitIn) : value_(valueIn), unit_(unitIn) {} }; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a Measure. */ Measure::Measure(double valueIn, const UnitOfMeasure &unitIn) : d(std::make_unique(valueIn, unitIn)) {} // --------------------------------------------------------------------------- Measure::Measure(const Measure &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Measure::~Measure() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the unit of the Measure. */ const UnitOfMeasure &Measure::unit() PROJ_PURE_DEFN { return d->unit_; } // --------------------------------------------------------------------------- /** \brief Return the value of the Measure, after conversion to the * corresponding * unit of the International System. */ double Measure::getSIValue() PROJ_PURE_DEFN { return d->value_ * d->unit_.conversionToSI(); } // --------------------------------------------------------------------------- /** \brief Return the value of the measure, expressed in the unit() */ double Measure::value() PROJ_PURE_DEFN { return d->value_; } // --------------------------------------------------------------------------- /** \brief Return the value of this measure expressed into the provided unit. */ double Measure::convertToUnit(const UnitOfMeasure &otherUnit) PROJ_PURE_DEFN { return getSIValue() / otherUnit.conversionToSI(); } // --------------------------------------------------------------------------- /** \brief Return whether two measures are equal. * * The comparison is done both on the value and the unit. */ bool Measure::operator==(const Measure &other) PROJ_PURE_DEFN { return d->value_ == other.d->value_ && d->unit_ == other.d->unit_; } // --------------------------------------------------------------------------- /** \brief Returns whether an object is equivalent to another one. * @param other other object to compare to * @param criterion comparison criterion. * @param maxRelativeError Maximum relative error allowed. * @return true if objects are equivalent. */ bool Measure::_isEquivalentTo(const Measure &other, util::IComparable::Criterion criterion, double maxRelativeError) const { if (criterion == util::IComparable::Criterion::STRICT) { return operator==(other); } const double SIValue = getSIValue(); const double otherSIValue = other.getSIValue(); // It is arguable that we have to deal with infinite values, but this // helps robustify some situations. if (std::isinf(SIValue) && std::isinf(otherSIValue)) return SIValue * otherSIValue > 0; return std::fabs(SIValue - otherSIValue) <= maxRelativeError * std::fabs(SIValue); } // --------------------------------------------------------------------------- /** \brief Instantiate a Scale. * * @param valueIn value */ Scale::Scale(double valueIn) : Measure(valueIn, UnitOfMeasure::SCALE_UNITY) {} // --------------------------------------------------------------------------- /** \brief Instantiate a Scale. * * @param valueIn value * @param unitIn unit. Constraint: unit.type() == UnitOfMeasure::Type::SCALE */ Scale::Scale(double valueIn, const UnitOfMeasure &unitIn) : Measure(valueIn, unitIn) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Scale::Scale(const Scale &) = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Scale::~Scale() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a Angle. * * @param valueIn value */ Angle::Angle(double valueIn) : Measure(valueIn, UnitOfMeasure::DEGREE) {} // --------------------------------------------------------------------------- /** \brief Instantiate a Angle. * * @param valueIn value * @param unitIn unit. Constraint: unit.type() == UnitOfMeasure::Type::ANGULAR */ Angle::Angle(double valueIn, const UnitOfMeasure &unitIn) : Measure(valueIn, unitIn) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Angle::Angle(const Angle &) = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Angle::~Angle() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a Length. * * @param valueIn value */ Length::Length(double valueIn) : Measure(valueIn, UnitOfMeasure::METRE) {} // --------------------------------------------------------------------------- /** \brief Instantiate a Length. * * @param valueIn value * @param unitIn unit. Constraint: unit.type() == UnitOfMeasure::Type::LINEAR */ Length::Length(double valueIn, const UnitOfMeasure &unitIn) : Measure(valueIn, unitIn) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Length::Length(const Length &) = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Length::~Length() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DateTime::Private { std::string str_{}; explicit Private(const std::string &str) : str_(str) {} }; //! @endcond // --------------------------------------------------------------------------- DateTime::DateTime() : d(std::make_unique(std::string())) {} // --------------------------------------------------------------------------- DateTime::DateTime(const std::string &str) : d(std::make_unique(str)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DateTime::DateTime(const DateTime &other) : d(std::make_unique(*(other.d))) {} //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DateTime &DateTime::operator=(const DateTime &other) { d->str_ = other.d->str_; return *this; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DateTime::~DateTime() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a DateTime. */ DateTime DateTime::create(const std::string &str) { return DateTime(str); } // --------------------------------------------------------------------------- /** \brief Return whether the DateTime is ISO:8601 compliant. * * \remark The current implementation is really simplistic, and aimed at * detecting date-times that are not ISO:8601 compliant. */ bool DateTime::isISO_8601() const { return !d->str_.empty() && d->str_[0] >= '0' && d->str_[0] <= '9' && d->str_.find(' ') == std::string::npos; } // --------------------------------------------------------------------------- /** \brief Return the DateTime as a string. */ std::string DateTime::toString() const { return d->str_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // cppcheck-suppress copyCtorAndEqOperator struct IdentifiedObject::Private { IdentifierNNPtr name{Identifier::create()}; std::vector identifiers{}; std::vector aliases{}; std::string remarks{}; bool isDeprecated{}; void setIdentifiers(const PropertyMap &properties); void setName(const PropertyMap &properties); void setAliases(const PropertyMap &properties); }; //! @endcond // --------------------------------------------------------------------------- IdentifiedObject::IdentifiedObject() : d(std::make_unique()) {} // --------------------------------------------------------------------------- IdentifiedObject::IdentifiedObject(const IdentifiedObject &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress IdentifiedObject::~IdentifiedObject() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the name of the object. * * Generally, the only interesting field of the name will be * name()->description(). */ const IdentifierNNPtr &IdentifiedObject::name() PROJ_PURE_DEFN { return d->name; } // --------------------------------------------------------------------------- /** \brief Return the name of the object. * * Return *(name()->description()) */ const std::string &IdentifiedObject::nameStr() PROJ_PURE_DEFN { return *(d->name->description()); } // --------------------------------------------------------------------------- /** \brief Return the identifier(s) of the object * * Generally, those will have Identifier::code() and Identifier::codeSpace() * filled. */ const std::vector & IdentifiedObject::identifiers() PROJ_PURE_DEFN { return d->identifiers; } // --------------------------------------------------------------------------- /** \brief Return the alias(es) of the object. */ const std::vector & IdentifiedObject::aliases() PROJ_PURE_DEFN { return d->aliases; } // --------------------------------------------------------------------------- /** \brief Return the (first) alias of the object as a string. * * Shortcut for aliases()[0]->toFullyQualifiedName()->toString() */ std::string IdentifiedObject::alias() PROJ_PURE_DEFN { if (d->aliases.empty()) return std::string(); return d->aliases[0]->toFullyQualifiedName()->toString(); } // --------------------------------------------------------------------------- /** \brief Return the EPSG code. * @return code, or 0 if not found */ int IdentifiedObject::getEPSGCode() PROJ_PURE_DEFN { for (const auto &id : identifiers()) { if (ci_equal(*(id->codeSpace()), metadata::Identifier::EPSG)) { return ::atoi(id->code().c_str()); } } return 0; } // --------------------------------------------------------------------------- /** \brief Return the remarks. */ const std::string &IdentifiedObject::remarks() PROJ_PURE_DEFN { return d->remarks; } // --------------------------------------------------------------------------- /** \brief Return whether the object is deprecated. * * \remark Extension of \ref ISO_19111_2019 */ bool IdentifiedObject::isDeprecated() PROJ_PURE_DEFN { return d->isDeprecated; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void IdentifiedObject::Private::setName( const PropertyMap &properties) // throw(InvalidValueTypeException) { const auto pVal = properties.get(NAME_KEY); if (!pVal) { return; } if (const auto genVal = dynamic_cast(pVal->get())) { if (genVal->type() == BoxedValue::Type::STRING) { name = Identifier::createFromDescription(genVal->stringValue()); } else { throw InvalidValueTypeException("Invalid value type for " + NAME_KEY); } } else { if (auto identifier = util::nn_dynamic_pointer_cast(*pVal)) { name = NN_NO_CHECK(identifier); } else { throw InvalidValueTypeException("Invalid value type for " + NAME_KEY); } } } // --------------------------------------------------------------------------- void IdentifiedObject::Private::setIdentifiers( const PropertyMap &properties) // throw(InvalidValueTypeException) { auto pVal = properties.get(IDENTIFIERS_KEY); if (!pVal) { pVal = properties.get(Identifier::CODE_KEY); if (pVal) { identifiers.clear(); identifiers.push_back( Identifier::create(std::string(), properties)); } return; } if (auto identifier = util::nn_dynamic_pointer_cast(*pVal)) { identifiers.clear(); identifiers.push_back(NN_NO_CHECK(identifier)); } else { if (auto array = dynamic_cast(pVal->get())) { identifiers.clear(); for (const auto &val : *array) { identifier = util::nn_dynamic_pointer_cast(val); if (identifier) { identifiers.push_back(NN_NO_CHECK(identifier)); } else { throw InvalidValueTypeException("Invalid value type for " + IDENTIFIERS_KEY); } } } else { throw InvalidValueTypeException("Invalid value type for " + IDENTIFIERS_KEY); } } } // --------------------------------------------------------------------------- void IdentifiedObject::Private::setAliases( const PropertyMap &properties) // throw(InvalidValueTypeException) { const auto pVal = properties.get(ALIAS_KEY); if (!pVal) { return; } if (auto l_name = util::nn_dynamic_pointer_cast(*pVal)) { aliases.clear(); aliases.push_back(NN_NO_CHECK(l_name)); } else { if (const auto array = dynamic_cast(pVal->get())) { aliases.clear(); for (const auto &val : *array) { l_name = util::nn_dynamic_pointer_cast(val); if (l_name) { aliases.push_back(NN_NO_CHECK(l_name)); } else { if (auto genVal = dynamic_cast(val.get())) { if (genVal->type() == BoxedValue::Type::STRING) { aliases.push_back(NameFactory::createLocalName( nullptr, genVal->stringValue())); } else { throw InvalidValueTypeException( "Invalid value type for " + ALIAS_KEY); } } else { throw InvalidValueTypeException( "Invalid value type for " + ALIAS_KEY); } } } } else { std::string temp; if (properties.getStringValue(ALIAS_KEY, temp)) { aliases.clear(); aliases.push_back(NameFactory::createLocalName(nullptr, temp)); } else { throw InvalidValueTypeException("Invalid value type for " + ALIAS_KEY); } } } } //! @endcond // --------------------------------------------------------------------------- void IdentifiedObject::setProperties( const PropertyMap &properties) // throw(InvalidValueTypeException) { d->setName(properties); d->setIdentifiers(properties); d->setAliases(properties); properties.getStringValue(REMARKS_KEY, d->remarks); { const auto pVal = properties.get(DEPRECATED_KEY); if (pVal) { if (const auto genVal = dynamic_cast(pVal->get())) { if (genVal->type() == BoxedValue::Type::BOOLEAN) { d->isDeprecated = genVal->booleanValue(); } else { throw InvalidValueTypeException("Invalid value type for " + DEPRECATED_KEY); } } else { throw InvalidValueTypeException("Invalid value type for " + DEPRECATED_KEY); } } } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void IdentifiedObject::formatID(WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == WKTFormatter::Version::WKT2; for (const auto &id : identifiers()) { id->_exportToWKT(formatter); if (!isWKT2) { break; } } } // --------------------------------------------------------------------------- void IdentifiedObject::formatRemarks(WKTFormatter *formatter) const { if (!remarks().empty()) { formatter->startNode(WKTConstants::REMARK, false); formatter->addQuotedString(remarks()); formatter->endNode(); } } // --------------------------------------------------------------------------- void IdentifiedObject::formatID(JSONFormatter *formatter) const { const auto &ids(identifiers()); auto writer = formatter->writer(); if (ids.size() == 1) { writer->AddObjKey("id"); ids.front()->_exportToJSON(formatter); } else if (!ids.empty()) { writer->AddObjKey("ids"); auto arrayContext(writer->MakeArrayContext()); for (const auto &id : ids) { id->_exportToJSON(formatter); } } } // --------------------------------------------------------------------------- void IdentifiedObject::formatRemarks(JSONFormatter *formatter) const { if (!remarks().empty()) { auto writer = formatter->writer(); writer->AddObjKey("remarks"); writer->Add(remarks()); } } // --------------------------------------------------------------------------- bool IdentifiedObject::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherIdObj = dynamic_cast(other); if (!otherIdObj) return false; return _isEquivalentTo(otherIdObj, criterion, dbContext); } // --------------------------------------------------------------------------- bool IdentifiedObject::_isEquivalentTo( const IdentifiedObject *otherIdObj, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) PROJ_PURE_DEFN { if (criterion == util::IComparable::Criterion::STRICT) { if (!ci_equal(nameStr(), otherIdObj->nameStr())) { return false; } // TODO test id etc } else { if (!metadata::Identifier::isEquivalentName( nameStr().c_str(), otherIdObj->nameStr().c_str())) { return hasEquivalentNameToUsingAlias(otherIdObj, dbContext); } } return true; } // --------------------------------------------------------------------------- bool IdentifiedObject::hasEquivalentNameToUsingAlias( const IdentifiedObject *, const io::DatabaseContextPtr &) const { return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ObjectDomain::Private { optional scope_{}; ExtentPtr domainOfValidity_{}; Private(const optional &scopeIn, const ExtentPtr &extent) : scope_(scopeIn), domainOfValidity_(extent) {} }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ObjectDomain::ObjectDomain(const optional &scopeIn, const ExtentPtr &extent) : d(std::make_unique(scopeIn, extent)) {} //! @endcond // --------------------------------------------------------------------------- ObjectDomain::ObjectDomain(const ObjectDomain &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ObjectDomain::~ObjectDomain() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the scope. * * @return the scope, or empty. */ const optional &ObjectDomain::scope() PROJ_PURE_DEFN { return d->scope_; } // --------------------------------------------------------------------------- /** \brief Return the domain of validity. * * @return the domain of validity, or nullptr. */ const ExtentPtr &ObjectDomain::domainOfValidity() PROJ_PURE_DEFN { return d->domainOfValidity_; } // --------------------------------------------------------------------------- /** \brief Instantiate a ObjectDomain. */ ObjectDomainNNPtr ObjectDomain::create(const optional &scopeIn, const ExtentPtr &extent) { return ObjectDomain::nn_make_shared(scopeIn, extent); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ObjectDomain::_exportToWKT(WKTFormatter *formatter) const { if (d->scope_.has_value()) { formatter->startNode(WKTConstants::SCOPE, false); formatter->addQuotedString(*(d->scope_)); formatter->endNode(); } else if (formatter->use2019Keywords()) { formatter->startNode(WKTConstants::SCOPE, false); formatter->addQuotedString("unknown"); formatter->endNode(); } if (d->domainOfValidity_) { if (d->domainOfValidity_->description().has_value()) { formatter->startNode(WKTConstants::AREA, false); formatter->addQuotedString(*(d->domainOfValidity_->description())); formatter->endNode(); } if (d->domainOfValidity_->geographicElements().size() == 1) { const auto bbox = dynamic_cast( d->domainOfValidity_->geographicElements()[0].get()); if (bbox) { formatter->startNode(WKTConstants::BBOX, false); formatter->add(bbox->southBoundLatitude()); formatter->add(bbox->westBoundLongitude()); formatter->add(bbox->northBoundLatitude()); formatter->add(bbox->eastBoundLongitude()); formatter->endNode(); } } if (d->domainOfValidity_->verticalElements().size() == 1) { auto extent = d->domainOfValidity_->verticalElements()[0]; formatter->startNode(WKTConstants::VERTICALEXTENT, false); formatter->add(extent->minimumValue()); formatter->add(extent->maximumValue()); extent->unit()->_exportToWKT(formatter); formatter->endNode(); } if (d->domainOfValidity_->temporalElements().size() == 1) { auto extent = d->domainOfValidity_->temporalElements()[0]; formatter->startNode(WKTConstants::TIMEEXTENT, false); if (DateTime::create(extent->start()).isISO_8601()) { formatter->add(extent->start()); } else { formatter->addQuotedString(extent->start()); } if (DateTime::create(extent->stop()).isISO_8601()) { formatter->add(extent->stop()); } else { formatter->addQuotedString(extent->stop()); } formatter->endNode(); } } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ObjectDomain::_exportToJSON(JSONFormatter *formatter) const { auto writer = formatter->writer(); if (d->scope_.has_value()) { writer->AddObjKey("scope"); writer->Add(*(d->scope_)); } if (d->domainOfValidity_) { if (d->domainOfValidity_->description().has_value()) { writer->AddObjKey("area"); writer->Add(*(d->domainOfValidity_->description())); } if (d->domainOfValidity_->geographicElements().size() == 1) { const auto bbox = dynamic_cast( d->domainOfValidity_->geographicElements()[0].get()); if (bbox) { writer->AddObjKey("bbox"); auto bboxContext(writer->MakeObjectContext()); writer->AddObjKey("south_latitude"); writer->Add(bbox->southBoundLatitude(), 15); writer->AddObjKey("west_longitude"); writer->Add(bbox->westBoundLongitude(), 15); writer->AddObjKey("north_latitude"); writer->Add(bbox->northBoundLatitude(), 15); writer->AddObjKey("east_longitude"); writer->Add(bbox->eastBoundLongitude(), 15); } } if (d->domainOfValidity_->verticalElements().size() == 1) { const auto &verticalExtent = d->domainOfValidity_->verticalElements().front(); writer->AddObjKey("vertical_extent"); auto bboxContext(writer->MakeObjectContext()); writer->AddObjKey("minimum"); writer->Add(verticalExtent->minimumValue(), 15); writer->AddObjKey("maximum"); writer->Add(verticalExtent->maximumValue(), 15); const auto &unit = verticalExtent->unit(); if (*unit != common::UnitOfMeasure::METRE) { writer->AddObjKey("unit"); unit->_exportToJSON(formatter); } } if (d->domainOfValidity_->temporalElements().size() == 1) { const auto &temporalExtent = d->domainOfValidity_->temporalElements().front(); writer->AddObjKey("temporal_extent"); auto bboxContext(writer->MakeObjectContext()); writer->AddObjKey("start"); writer->Add(temporalExtent->start()); writer->AddObjKey("end"); writer->Add(temporalExtent->stop()); } } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool ObjectDomain::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDomain = dynamic_cast(other); if (!otherDomain) return false; if (scope().has_value() != otherDomain->scope().has_value()) return false; if (*scope() != *otherDomain->scope()) return false; if ((domainOfValidity().get() != nullptr) ^ (otherDomain->domainOfValidity().get() != nullptr)) return false; return domainOfValidity().get() == nullptr || domainOfValidity()->_isEquivalentTo( otherDomain->domainOfValidity().get(), criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ObjectUsage::Private { std::vector domains_{}; }; //! @endcond // --------------------------------------------------------------------------- ObjectUsage::ObjectUsage() : d(std::make_unique()) {} // --------------------------------------------------------------------------- ObjectUsage::ObjectUsage(const ObjectUsage &other) : IdentifiedObject(other), d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ObjectUsage::~ObjectUsage() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the domains of the object. */ const std::vector &ObjectUsage::domains() PROJ_PURE_DEFN { return d->domains_; } // --------------------------------------------------------------------------- void ObjectUsage::setProperties( const PropertyMap &properties) // throw(InvalidValueTypeException) { IdentifiedObject::setProperties(properties); optional scope; properties.getStringValue(SCOPE_KEY, scope); ExtentPtr domainOfValidity; { const auto pVal = properties.get(DOMAIN_OF_VALIDITY_KEY); if (pVal) { domainOfValidity = util::nn_dynamic_pointer_cast(*pVal); if (!domainOfValidity) { throw InvalidValueTypeException("Invalid value type for " + DOMAIN_OF_VALIDITY_KEY); } } } if (scope.has_value() || domainOfValidity) { d->domains_.emplace_back(ObjectDomain::create(scope, domainOfValidity)); } { const auto pVal = properties.get(OBJECT_DOMAIN_KEY); if (pVal) { if (auto objectDomain = util::nn_dynamic_pointer_cast(*pVal)) { d->domains_.emplace_back(NN_NO_CHECK(objectDomain)); } else if (const auto array = dynamic_cast( pVal->get())) { for (const auto &val : *array) { objectDomain = util::nn_dynamic_pointer_cast(val); if (objectDomain) { d->domains_.emplace_back(NN_NO_CHECK(objectDomain)); } else { throw InvalidValueTypeException( "Invalid value type for " + OBJECT_DOMAIN_KEY); } } } else { throw InvalidValueTypeException("Invalid value type for " + OBJECT_DOMAIN_KEY); } } } } // --------------------------------------------------------------------------- void ObjectUsage::baseExportToWKT(WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == WKTFormatter::Version::WKT2; if (isWKT2 && formatter->outputUsage()) { auto l_domains = domains(); if (!l_domains.empty()) { if (formatter->use2019Keywords()) { for (const auto &domain : l_domains) { formatter->startNode(WKTConstants::USAGE, false); domain->_exportToWKT(formatter); formatter->endNode(); } } else { l_domains[0]->_exportToWKT(formatter); } } } if (formatter->outputId()) { formatID(formatter); } if (isWKT2) { formatRemarks(formatter); } } // --------------------------------------------------------------------------- void ObjectUsage::baseExportToJSON(JSONFormatter *formatter) const { auto writer = formatter->writer(); if (formatter->outputUsage()) { const auto &l_domains = domains(); if (l_domains.size() == 1) { l_domains[0]->_exportToJSON(formatter); } else if (!l_domains.empty()) { writer->AddObjKey("usages"); auto arrayContext(writer->MakeArrayContext(false)); for (const auto &domain : l_domains) { auto objContext(writer->MakeObjectContext()); domain->_exportToJSON(formatter); } } } if (formatter->outputId()) { formatID(formatter); } formatRemarks(formatter); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool ObjectUsage::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherObjUsage = dynamic_cast(other); if (!otherObjUsage) return false; // TODO: incomplete return IdentifiedObject::_isEquivalentTo(other, criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DataEpoch::Private { Measure coordinateEpoch_{}; explicit Private(const Measure &coordinateEpochIn) : coordinateEpoch_(coordinateEpochIn) {} }; //! @endcond // --------------------------------------------------------------------------- DataEpoch::DataEpoch() : d(std::make_unique(Measure())) {} // --------------------------------------------------------------------------- DataEpoch::DataEpoch(const Measure &coordinateEpochIn) : d(std::make_unique(coordinateEpochIn)) {} // --------------------------------------------------------------------------- DataEpoch::DataEpoch(const DataEpoch &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DataEpoch::~DataEpoch() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the coordinate epoch, as a measure in decimal year. */ const Measure &DataEpoch::coordinateEpoch() const { return d->coordinateEpoch_; } } // namespace common NS_PROJ_END proj-9.6.0/src/iso19111/coordinates.cpp000664 001754 001755 00000023271 14764566077 017422 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2023, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/coordinates.hpp" #include "proj/common.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj_json_streaming_writer.hpp" #include #include using namespace NS_PROJ::internal; NS_PROJ_START namespace coordinates { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CoordinateMetadata::Private { crs::CRSNNPtr crs_; util::optional coordinateEpoch_{}; explicit Private(const crs::CRSNNPtr &crs) : crs_(crs) {} Private(const crs::CRSNNPtr &crs, const common::DataEpoch &coordinateEpoch) : crs_(crs), coordinateEpoch_(coordinateEpoch) {} }; //! @endcond // --------------------------------------------------------------------------- CoordinateMetadata::CoordinateMetadata(const crs::CRSNNPtr &crsIn) : d(std::make_unique(crsIn)) {} // --------------------------------------------------------------------------- CoordinateMetadata::CoordinateMetadata(const crs::CRSNNPtr &crsIn, double coordinateEpochAsDecimalYearIn) : d(std::make_unique(crsIn, common::DataEpoch(common::Measure( coordinateEpochAsDecimalYearIn, common::UnitOfMeasure::YEAR)))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateMetadata::~CoordinateMetadata() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateMetadata from a static CRS. * @param crsIn a static CRS * @return new CoordinateMetadata. * @throw util::Exception if crsIn is a dynamic CRS. */ CoordinateMetadataNNPtr CoordinateMetadata::create(const crs::CRSNNPtr &crsIn) { if (crsIn->isDynamic(/*considerWGS84AsDynamic=*/false)) { throw util::Exception( "Coordinate epoch should be provided for a dynamic CRS"); } auto coordinateMetadata( CoordinateMetadata::nn_make_shared(crsIn)); coordinateMetadata->assignSelf(coordinateMetadata); return coordinateMetadata; } // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateMetadata from a dynamic CRS and an associated * coordinate epoch. * * @param crsIn a dynamic CRS * @param coordinateEpochIn coordinate epoch expressed in decimal year. * @return new CoordinateMetadata. * @throw util::Exception if crsIn is a static CRS. */ CoordinateMetadataNNPtr CoordinateMetadata::create(const crs::CRSNNPtr &crsIn, double coordinateEpochIn) { return create(crsIn, coordinateEpochIn, nullptr); } // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateMetadata from a dynamic CRS and an associated * coordinate epoch. * * @param crsIn a dynamic CRS * @param coordinateEpochIn coordinate epoch expressed in decimal year. * @param dbContext Database context (may be null) * @return new CoordinateMetadata. * @throw util::Exception if crsIn is a static CRS. */ CoordinateMetadataNNPtr CoordinateMetadata::create(const crs::CRSNNPtr &crsIn, double coordinateEpochIn, const io::DatabaseContextPtr &dbContext) { if (!crsIn->isDynamic(/*considerWGS84AsDynamic=*/true)) { bool ok = false; if (dbContext) { auto geodCrs = crsIn->extractGeodeticCRS(); if (geodCrs) { auto factory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), std::string()); ok = !factory ->getPointMotionOperationsFor(NN_NO_CHECK(geodCrs), false) .empty(); } } if (!ok) { throw util::Exception( "Coordinate epoch should not be provided for a static CRS"); } } auto coordinateMetadata( CoordinateMetadata::nn_make_shared( crsIn, coordinateEpochIn)); coordinateMetadata->assignSelf(coordinateMetadata); return coordinateMetadata; } // --------------------------------------------------------------------------- /** \brief Get the CRS associated with this CoordinateMetadata object. */ const crs::CRSNNPtr &CoordinateMetadata::crs() PROJ_PURE_DEFN { return d->crs_; } // --------------------------------------------------------------------------- /** \brief Get the coordinate epoch associated with this CoordinateMetadata * object. * * The coordinate epoch is mandatory for a dynamic CRS, * and forbidden for a static CRS. */ const util::optional & CoordinateMetadata::coordinateEpoch() PROJ_PURE_DEFN { return d->coordinateEpoch_; } // --------------------------------------------------------------------------- /** \brief Get the coordinate epoch associated with this CoordinateMetadata * object, as decimal year. * * The coordinate epoch is mandatory for a dynamic CRS, * and forbidden for a static CRS. */ double CoordinateMetadata::coordinateEpochAsDecimalYear() PROJ_PURE_DEFN { if (d->coordinateEpoch_.has_value()) { return getRoundedEpochInDecimalYear( d->coordinateEpoch_->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)); } return std::numeric_limits::quiet_NaN(); } // --------------------------------------------------------------------------- /** \brief Return a variant of this CoordinateMetadata "promoted" to a 3D one, * if not already the case. * * @param newName Name of the new underlying CRS. If empty, nameStr() will be * used. * @param dbContext Database context to look for potentially already registered * 3D CRS. May be nullptr. * @return a new CoordinateMetadata object promoted to 3D, or the current one if * already 3D or not applicable. */ CoordinateMetadataNNPtr CoordinateMetadata::promoteTo3D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const { auto crs = d->crs_->promoteTo3D(newName, dbContext); if (d->coordinateEpoch_.has_value()) { auto coordinateMetadata( CoordinateMetadata::nn_make_shared( crs, coordinateEpochAsDecimalYear())); coordinateMetadata->assignSelf(coordinateMetadata); return coordinateMetadata; } else { auto coordinateMetadata( CoordinateMetadata::nn_make_shared(crs)); coordinateMetadata->assignSelf(coordinateMetadata); return coordinateMetadata; } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateMetadata::_exportToWKT(io::WKTFormatter *formatter) const { if (formatter->version() != io::WKTFormatter::Version::WKT2 || !formatter->use2019Keywords()) { io::FormattingException::Throw( "CoordinateMetadata can only be exported since WKT2:2019"); } formatter->startNode(io::WKTConstants::COORDINATEMETADATA, false); crs()->_exportToWKT(formatter); if (d->coordinateEpoch_.has_value()) { formatter->startNode(io::WKTConstants::EPOCH, false); formatter->add(coordinateEpochAsDecimalYear()); formatter->endNode(); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateMetadata::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("CoordinateMetadata", false)); writer->AddObjKey("crs"); crs()->_exportToJSON(formatter); if (d->coordinateEpoch_.has_value()) { writer->AddObjKey("coordinateEpoch"); writer->Add(coordinateEpochAsDecimalYear()); } } //! @endcond } // namespace coordinates NS_PROJ_END proj-9.6.0/src/iso19111/coordinatesystem.cpp000664 001754 001755 00000157126 14764566077 020513 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/coordinatesystem.hpp" #include "proj/common.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/coordinatesystem_internal.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include using namespace NS_PROJ::internal; #if 0 namespace dropbox{ namespace oxygen { template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; }} #endif NS_PROJ_START namespace cs { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Meridian::Private { common::Angle longitude_{}; explicit Private(const common::Angle &longitude) : longitude_(longitude) {} }; //! @endcond // --------------------------------------------------------------------------- Meridian::Meridian(const common::Angle &longitudeIn) : d(std::make_unique(longitudeIn)) {} // --------------------------------------------------------------------------- #ifdef notdef Meridian::Meridian(const Meridian &other) : IdentifiedObject(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Meridian::~Meridian() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the longitude of the meridian that the axis follows from the * pole. * * @return the longitude. */ const common::Angle &Meridian::longitude() PROJ_PURE_DEFN { return d->longitude_; } // --------------------------------------------------------------------------- /** \brief Instantiate a Meridian. * * @param longitudeIn longitude of the meridian that the axis follows from the * pole. * @return new Meridian. */ MeridianNNPtr Meridian::create(const common::Angle &longitudeIn) { return Meridian::nn_make_shared(longitudeIn); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Meridian::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { formatter->startNode(io::WKTConstants::MERIDIAN, !identifiers().empty()); formatter->add(longitude().value()); longitude().unit()._exportToWKT(formatter, io::WKTConstants::ANGLEUNIT); if (formatter->outputId()) { formatID(formatter); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Meridian::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("Meridian", !identifiers().empty())); const auto &l_long = longitude(); writer->AddObjKey("longitude"); const auto &unit = l_long.unit(); if (unit == common::UnitOfMeasure::DEGREE) { writer->Add(l_long.value(), 15); } else { auto longitudeContext(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("value"); writer->Add(l_long.value(), 15); writer->AddObjKey("unit"); unit._exportToJSON(formatter); } if (formatter->outputId()) { formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CoordinateSystemAxis::Private { std::string abbreviation{}; const AxisDirection *direction = &(AxisDirection::UNSPECIFIED); common::UnitOfMeasure unit{}; util::optional rangeMeaning = util::optional(); util::optional minimumValue{}; util::optional maximumValue{}; MeridianPtr meridian{}; }; //! @endcond // --------------------------------------------------------------------------- CoordinateSystemAxis::CoordinateSystemAxis() : d(std::make_unique()) {} // --------------------------------------------------------------------------- #ifdef notdef CoordinateSystemAxis::CoordinateSystemAxis(const CoordinateSystemAxis &other) : IdentifiedObject(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateSystemAxis::~CoordinateSystemAxis() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the axis abbreviation. * * The abbreviation used for this coordinate system axis; this abbreviation * is also used to identify the coordinates in the coordinate tuple. * Examples are X and Y. * * @return the abbreviation. */ const std::string &CoordinateSystemAxis::abbreviation() PROJ_PURE_DEFN { return d->abbreviation; } // --------------------------------------------------------------------------- /** \brief Return the axis direction. * * The direction of this coordinate system axis (or in the case of Cartesian * projected coordinates, the direction of this coordinate system axis locally) * Examples: north or south, east or west, up or down. Within any set of * coordinate system axes, only one of each pair of terms can be used. For * Earth-fixed CRSs, this direction is often approximate and intended to * provide a human interpretable meaning to the axis. When a geodetic reference * frame is used, the precise directions of the axes may therefore vary * slightly from this approximate direction. Note that an EngineeringCRS often * requires specific descriptions of the directions of its coordinate system * axes. * * @return the direction. */ const AxisDirection &CoordinateSystemAxis::direction() PROJ_PURE_DEFN { return *(d->direction); } // --------------------------------------------------------------------------- /** \brief Return the axis unit. * * This is the spatial unit or temporal quantity used for this coordinate * system axis. The value of a coordinate in a coordinate tuple shall be * recorded using this unit. * * @return the axis unit. */ const common::UnitOfMeasure &CoordinateSystemAxis::unit() PROJ_PURE_DEFN { return d->unit; } // --------------------------------------------------------------------------- /** \brief Return the minimum value normally allowed for this axis, in the unit * for the axis. * * @return the minimum value, or empty. */ const util::optional & CoordinateSystemAxis::minimumValue() PROJ_PURE_DEFN { return d->minimumValue; } // --------------------------------------------------------------------------- /** \brief Return the maximum value normally allowed for this axis, in the unit * for the axis. * * @return the maximum value, or empty. */ const util::optional & CoordinateSystemAxis::maximumValue() PROJ_PURE_DEFN { return d->maximumValue; } // --------------------------------------------------------------------------- /** \brief Return the range meaning * * @return the range meaning, or empty. * @since 9.2 */ const util::optional & CoordinateSystemAxis::rangeMeaning() PROJ_PURE_DEFN { return d->rangeMeaning; } // --------------------------------------------------------------------------- /** \brief Return the meridian that the axis follows from the pole, for a * coordinate * reference system centered on a pole. * * @return the meridian, or null. */ const MeridianPtr &CoordinateSystemAxis::meridian() PROJ_PURE_DEFN { return d->meridian; } // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateSystemAxis. * * @param properties See \ref general_properties. The name should generally be * defined. * @param abbreviationIn Axis abbreviation (might be empty) * @param directionIn Axis direction * @param unitIn Axis unit * @param meridianIn The meridian that the axis follows from the pole, for a * coordinate * reference system centered on a pole, or nullptr * @return a new CoordinateSystemAxis. */ CoordinateSystemAxisNNPtr CoordinateSystemAxis::create( const util::PropertyMap &properties, const std::string &abbreviationIn, const AxisDirection &directionIn, const common::UnitOfMeasure &unitIn, const MeridianPtr &meridianIn) { auto csa(CoordinateSystemAxis::nn_make_shared()); csa->setProperties(properties); csa->d->abbreviation = abbreviationIn; csa->d->direction = &directionIn; csa->d->unit = unitIn; csa->d->meridian = meridianIn; return csa; } // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateSystemAxis. * * @param properties See \ref general_properties. The name should generally be * defined. * @param abbreviationIn Axis abbreviation (might be empty) * @param directionIn Axis direction * @param unitIn Axis unit * @param minimumValueIn Minimum value along axis * @param maximumValueIn Maximum value along axis * @param rangeMeaningIn Range Meaning * @param meridianIn The meridian that the axis follows from the pole, for a * coordinate * reference system centered on a pole, or nullptr * @return a new CoordinateSystemAxis. * @since 9.2 */ CoordinateSystemAxisNNPtr CoordinateSystemAxis::create( const util::PropertyMap &properties, const std::string &abbreviationIn, const AxisDirection &directionIn, const common::UnitOfMeasure &unitIn, const util::optional &minimumValueIn, const util::optional &maximumValueIn, const util::optional &rangeMeaningIn, const MeridianPtr &meridianIn) { auto csa(CoordinateSystemAxis::nn_make_shared()); csa->setProperties(properties); csa->d->abbreviation = abbreviationIn; csa->d->direction = &directionIn; csa->d->unit = unitIn; csa->d->minimumValue = minimumValueIn; csa->d->maximumValue = maximumValueIn; csa->d->rangeMeaning = rangeMeaningIn; csa->d->meridian = meridianIn; return csa; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateSystemAxis::_exportToWKT( // cppcheck-suppress passedByValue io::WKTFormatter *formatter) const // throw(FormattingException) { _exportToWKT(formatter, 0, false); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::string CoordinateSystemAxis::normalizeAxisName(const std::string &str) { if (str.empty()) { return str; } // on import, transform from WKT2 "longitude" to "Longitude", as in the // EPSG database. return toupper(str.substr(0, 1)) + str.substr(1); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateSystemAxis::_exportToWKT(io::WKTFormatter *formatter, int order, bool disableAbbrev) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; formatter->startNode(io::WKTConstants::AXIS, !identifiers().empty()); const std::string &axisName = nameStr(); const std::string &abbrev = abbreviation(); std::string parenthesizedAbbrev = std::string("(").append(abbrev).append(")"); std::string dir = direction().toString(); std::string axisDesignation; // It seems that the convention in WKT2 for axis name is first letter in // lower case. Whereas in WKT1 GDAL, it is in upper case (as in the EPSG // database) if (!axisName.empty()) { if (isWKT2) { axisDesignation = tolower(axisName.substr(0, 1)) + axisName.substr(1); } else { if (axisName == "Geodetic latitude") { axisDesignation = "Latitude"; } else if (axisName == "Geodetic longitude") { axisDesignation = "Longitude"; } else { axisDesignation = axisName; } } } if (!disableAbbrev && isWKT2 && // For geodetic CS, export the axis name without abbreviation !(axisName == AxisName::Latitude || axisName == AxisName::Longitude)) { if (!axisDesignation.empty() && !abbrev.empty()) { axisDesignation += " "; } if (!abbrev.empty()) { axisDesignation += parenthesizedAbbrev; } } if (!isWKT2) { dir = toupper(dir); if (direction() == AxisDirection::GEOCENTRIC_Z) { dir = AxisDirectionWKT1::NORTH; } else if (AxisDirectionWKT1::valueOf(dir) == nullptr) { dir = AxisDirectionWKT1::OTHER; } } else if (!abbrev.empty()) { // For geocentric CS, just put the abbreviation if (direction() == AxisDirection::GEOCENTRIC_X || direction() == AxisDirection::GEOCENTRIC_Y || direction() == AxisDirection::GEOCENTRIC_Z) { axisDesignation = std::move(parenthesizedAbbrev); } // For cartesian CS with Easting/Northing, export only the abbreviation else if ((order == 1 && axisName == AxisName::Easting && abbrev == AxisAbbreviation::E) || (order == 2 && axisName == AxisName::Northing && abbrev == AxisAbbreviation::N)) { axisDesignation = std::move(parenthesizedAbbrev); } } formatter->addQuotedString(axisDesignation); formatter->add(dir); const auto &l_meridian = meridian(); if (isWKT2 && l_meridian) { l_meridian->_exportToWKT(formatter); } if (formatter->outputAxisOrder() && order > 0) { formatter->startNode(io::WKTConstants::ORDER, false); formatter->add(order); formatter->endNode(); } if (formatter->outputUnit() && unit().type() != common::UnitOfMeasure::Type::NONE) { unit()._exportToWKT(formatter); } if (isWKT2 && formatter->use2019Keywords()) { if (d->minimumValue.has_value()) { formatter->startNode(io::WKTConstants::AXISMINVALUE, false); formatter->add(*(d->minimumValue)); formatter->endNode(); } if (d->maximumValue.has_value()) { formatter->startNode(io::WKTConstants::AXISMAXVALUE, false); formatter->add(*(d->maximumValue)); formatter->endNode(); } if (d->minimumValue.has_value() && d->maximumValue.has_value() && d->rangeMeaning.has_value()) { formatter->startNode(io::WKTConstants::RANGEMEANING, false); formatter->add(d->rangeMeaning->toString()); formatter->endNode(); } } if (formatter->outputId()) { formatID(formatter); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateSystemAxis::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("Axis", !identifiers().empty())); writer->AddObjKey("name"); writer->Add(nameStr()); writer->AddObjKey("abbreviation"); writer->Add(abbreviation()); writer->AddObjKey("direction"); writer->Add(direction().toString()); const auto &l_meridian = meridian(); if (l_meridian) { writer->AddObjKey("meridian"); formatter->setOmitTypeInImmediateChild(); l_meridian->_exportToJSON(formatter); } const auto &l_unit(unit()); if (l_unit == common::UnitOfMeasure::METRE || l_unit == common::UnitOfMeasure::DEGREE) { writer->AddObjKey("unit"); writer->Add(l_unit.name()); } else if (l_unit.type() != common::UnitOfMeasure::Type::NONE) { writer->AddObjKey("unit"); l_unit._exportToJSON(formatter); } if (d->minimumValue.has_value()) { writer->AddObjKey("minimum_value"); writer->Add(*(d->minimumValue)); } if (d->maximumValue.has_value()) { writer->AddObjKey("maximum_value"); writer->Add(*(d->maximumValue)); } if (d->minimumValue.has_value() && d->maximumValue.has_value() && d->rangeMeaning.has_value()) { writer->AddObjKey("range_meaning"); writer->Add(d->rangeMeaning->toString()); } if (formatter->outputId()) { formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool CoordinateSystemAxis::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherCSA = dynamic_cast(other); if (otherCSA == nullptr) { return false; } // For approximate comparison, only care about axis direction and unit. if (!(*(d->direction) == *(otherCSA->d->direction) && d->unit._isEquivalentTo(otherCSA->d->unit, criterion))) { return false; } if (criterion == util::IComparable::Criterion::STRICT) { if (!IdentifiedObject::_isEquivalentTo(other, criterion, dbContext)) { return false; } if (abbreviation() != otherCSA->abbreviation()) { return false; } // TODO other metadata } return true; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateSystemAxisNNPtr CoordinateSystemAxis::alterUnit(const common::UnitOfMeasure &newUnit) const { return create(util::PropertyMap().set(IdentifiedObject::NAME_KEY, name()), abbreviation(), direction(), newUnit, meridian()); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CoordinateSystem::Private { std::vector axisList{}; explicit Private(const std::vector &axisListIn) : axisList(axisListIn) {} }; //! @endcond // --------------------------------------------------------------------------- CoordinateSystem::CoordinateSystem( const std::vector &axisIn) : d(std::make_unique(axisIn)) {} // --------------------------------------------------------------------------- #ifdef notdef CoordinateSystem::CoordinateSystem(const CoordinateSystem &other) : IdentifiedObject(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateSystem::~CoordinateSystem() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the list of axes of this coordinate system. * * @return the axes. */ const std::vector & CoordinateSystem::axisList() PROJ_PURE_DEFN { return d->axisList; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateSystem::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { if (formatter->outputAxis() != io::WKTFormatter::OutputAxisRule::YES) { return; } const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; const auto &l_axisList = axisList(); if (isWKT2) { formatter->startNode(io::WKTConstants::CS_, !identifiers().empty()); formatter->add(getWKT2Type(formatter->use2019Keywords())); formatter->add(static_cast(l_axisList.size())); formatter->endNode(); formatter->startNode(std::string(), false); // anonymous indentation level } common::UnitOfMeasure unit = common::UnitOfMeasure::NONE; bool bAllSameUnit = true; bool bFirstUnit = true; for (const auto &axis : l_axisList) { const auto &l_unit = axis->unit(); if (bFirstUnit) { unit = l_unit; bFirstUnit = false; } else if (unit != l_unit) { bAllSameUnit = false; } } formatter->pushOutputUnit( isWKT2 && (!bAllSameUnit || !formatter->outputCSUnitOnlyOnceIfSame())); int order = 1; const bool disableAbbrev = (l_axisList.size() == 3 && l_axisList[0]->nameStr() == AxisName::Latitude && l_axisList[1]->nameStr() == AxisName::Longitude && l_axisList[2]->nameStr() == AxisName::Ellipsoidal_height); for (auto &axis : l_axisList) { int axisOrder = (isWKT2 && l_axisList.size() > 1) ? order : 0; axis->_exportToWKT(formatter, axisOrder, disableAbbrev); order++; } if (isWKT2 && !l_axisList.empty() && bAllSameUnit && formatter->outputCSUnitOnlyOnceIfSame()) { unit._exportToWKT(formatter); } formatter->popOutputUnit(); if (isWKT2) { formatter->endNode(); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateSystem::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext(formatter->MakeObjectContext("CoordinateSystem", !identifiers().empty())); writer->AddObjKey("subtype"); writer->Add(getWKT2Type(true)); writer->AddObjKey("axis"); { auto axisContext(writer->MakeArrayContext(false)); const auto &l_axisList = axisList(); for (auto &axis : l_axisList) { formatter->setOmitTypeInImmediateChild(); axis->_exportToJSON(formatter); } } if (formatter->outputId()) { formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool CoordinateSystem::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherCS = dynamic_cast(other); if (otherCS == nullptr || !IdentifiedObject::_isEquivalentTo(other, criterion, dbContext)) { return false; } const auto &list = axisList(); const auto &otherList = otherCS->axisList(); if (list.size() != otherList.size()) { return false; } if (getWKT2Type(true) != otherCS->getWKT2Type(true)) { return false; } for (size_t i = 0; i < list.size(); i++) { if (!list[i]->_isEquivalentTo(otherList[i].get(), criterion, dbContext)) { return false; } } return true; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress SphericalCS::~SphericalCS() = default; //! @endcond // --------------------------------------------------------------------------- SphericalCS::SphericalCS(const std::vector &axisIn) : CoordinateSystem(axisIn) {} // --------------------------------------------------------------------------- #ifdef notdef SphericalCS::SphericalCS(const SphericalCS &) = default; #endif // --------------------------------------------------------------------------- /** \brief Instantiate a SphericalCS. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @param axis3 The third axis. * @return a new SphericalCS. */ SphericalCSNNPtr SphericalCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3) { std::vector axis{axis1, axis2, axis3}; auto cs(SphericalCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- /** \brief Instantiate a SphericalCS with 2 axis. * * This is an extension to ISO19111 to support (planet)-ocentric CS with * geocentric latitude. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @return a new SphericalCS. */ SphericalCSNNPtr SphericalCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2) { std::vector axis{axis1, axis2}; auto cs(SphericalCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress EllipsoidalCS::~EllipsoidalCS() = default; //! @endcond // --------------------------------------------------------------------------- EllipsoidalCS::EllipsoidalCS( const std::vector &axisIn) : CoordinateSystem(axisIn) {} // --------------------------------------------------------------------------- #ifdef notdef EllipsoidalCS::EllipsoidalCS(const EllipsoidalCS &) = default; #endif // --------------------------------------------------------------------------- /** \brief Instantiate a EllipsoidalCS. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @return a new EllipsoidalCS. */ EllipsoidalCSNNPtr EllipsoidalCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2) { std::vector axis{axis1, axis2}; auto cs(EllipsoidalCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- /** \brief Instantiate a EllipsoidalCS. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @param axis3 The third axis. * @return a new EllipsoidalCS. */ EllipsoidalCSNNPtr EllipsoidalCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3) { std::vector axis{axis1, axis2, axis3}; auto cs(EllipsoidalCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateSystemAxisNNPtr CoordinateSystemAxis::createLAT_NORTH(const common::UnitOfMeasure &unit) { return create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Latitude), AxisAbbreviation::lat, AxisDirection::NORTH, unit); } CoordinateSystemAxisNNPtr CoordinateSystemAxis::createLONG_EAST(const common::UnitOfMeasure &unit) { return create(util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Longitude), AxisAbbreviation::lon, AxisDirection::EAST, unit); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a EllipsoidalCS with a Latitude (first) and Longitude * (second) axis. * * @param unit Angular unit of the axes. * @return a new EllipsoidalCS. */ EllipsoidalCSNNPtr EllipsoidalCS::createLatitudeLongitude(const common::UnitOfMeasure &unit) { return EllipsoidalCS::create(util::PropertyMap(), CoordinateSystemAxis::createLAT_NORTH(unit), CoordinateSystemAxis::createLONG_EAST(unit)); } // --------------------------------------------------------------------------- /** \brief Instantiate a EllipsoidalCS with a Latitude (first), Longitude * (second) axis and ellipsoidal height (third) axis. * * @param angularUnit Angular unit of the latitude and longitude axes. * @param linearUnit Linear unit of the ellipsoidal height axis. * @return a new EllipsoidalCS. */ EllipsoidalCSNNPtr EllipsoidalCS::createLatitudeLongitudeEllipsoidalHeight( const common::UnitOfMeasure &angularUnit, const common::UnitOfMeasure &linearUnit) { return EllipsoidalCS::create( util::PropertyMap(), CoordinateSystemAxis::createLAT_NORTH(angularUnit), CoordinateSystemAxis::createLONG_EAST(angularUnit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Ellipsoidal_height), AxisAbbreviation::h, AxisDirection::UP, linearUnit)); } // --------------------------------------------------------------------------- /** \brief Instantiate a EllipsoidalCS with a Longitude (first) and Latitude * (second) axis. * * @param unit Angular unit of the axes. * @return a new EllipsoidalCS. */ EllipsoidalCSNNPtr EllipsoidalCS::createLongitudeLatitude(const common::UnitOfMeasure &unit) { return EllipsoidalCS::create(util::PropertyMap(), CoordinateSystemAxis::createLONG_EAST(unit), CoordinateSystemAxis::createLAT_NORTH(unit)); } // --------------------------------------------------------------------------- /** \brief Instantiate a EllipsoidalCS with a Longitude (first), Latitude * (second) axis and ellipsoidal height (third) axis. * * @param angularUnit Angular unit of the latitude and longitude axes. * @param linearUnit Linear unit of the ellipsoidal height axis. * @return a new EllipsoidalCS. * @since 7.0 */ EllipsoidalCSNNPtr EllipsoidalCS::createLongitudeLatitudeEllipsoidalHeight( const common::UnitOfMeasure &angularUnit, const common::UnitOfMeasure &linearUnit) { return EllipsoidalCS::create( util::PropertyMap(), CoordinateSystemAxis::createLONG_EAST(angularUnit), CoordinateSystemAxis::createLAT_NORTH(angularUnit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Ellipsoidal_height), AxisAbbreviation::h, AxisDirection::UP, linearUnit)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return the axis order in an enumerated way. */ EllipsoidalCS::AxisOrder EllipsoidalCS::axisOrder() const { const auto &l_axisList = CoordinateSystem::getPrivate()->axisList; const auto &dir0 = l_axisList[0]->direction(); const auto &dir1 = l_axisList[1]->direction(); if (&dir0 == &AxisDirection::NORTH && &dir1 == &AxisDirection::EAST) { if (l_axisList.size() == 2) { return AxisOrder::LAT_NORTH_LONG_EAST; } else if (&l_axisList[2]->direction() == &AxisDirection::UP) { return AxisOrder::LAT_NORTH_LONG_EAST_HEIGHT_UP; } } else if (&dir0 == &AxisDirection::EAST && &dir1 == &AxisDirection::NORTH) { if (l_axisList.size() == 2) { return AxisOrder::LONG_EAST_LAT_NORTH; } else if (&l_axisList[2]->direction() == &AxisDirection::UP) { return AxisOrder::LONG_EAST_LAT_NORTH_HEIGHT_UP; } } return AxisOrder::OTHER; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress EllipsoidalCSNNPtr EllipsoidalCS::alterAngularUnit( const common::UnitOfMeasure &angularUnit) const { const auto &l_axisList = CoordinateSystem::getPrivate()->axisList; if (l_axisList.size() == 2) { return EllipsoidalCS::create(util::PropertyMap(), l_axisList[0]->alterUnit(angularUnit), l_axisList[1]->alterUnit(angularUnit)); } else { assert(l_axisList.size() == 3); return EllipsoidalCS::create( util::PropertyMap(), l_axisList[0]->alterUnit(angularUnit), l_axisList[1]->alterUnit(angularUnit), l_axisList[2]); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress EllipsoidalCSNNPtr EllipsoidalCS::alterLinearUnit(const common::UnitOfMeasure &linearUnit) const { const auto &l_axisList = CoordinateSystem::getPrivate()->axisList; if (l_axisList.size() == 2) { return EllipsoidalCS::create(util::PropertyMap(), l_axisList[0], l_axisList[1]); } else { assert(l_axisList.size() == 3); return EllipsoidalCS::create(util::PropertyMap(), l_axisList[0], l_axisList[1], l_axisList[2]->alterUnit(linearUnit)); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress VerticalCS::~VerticalCS() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress VerticalCS::VerticalCS(const CoordinateSystemAxisNNPtr &axisIn) : CoordinateSystem(std::vector{axisIn}) {} //! @endcond // --------------------------------------------------------------------------- #ifdef notdef VerticalCS::VerticalCS(const VerticalCS &) = default; #endif // --------------------------------------------------------------------------- /** \brief Instantiate a VerticalCS. * * @param properties See \ref general_properties. * @param axis The axis. * @return a new VerticalCS. */ VerticalCSNNPtr VerticalCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis) { auto cs(VerticalCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- /** \brief Instantiate a VerticalCS with a Gravity-related height axis * * @param unit linear unit. * @return a new VerticalCS. */ VerticalCSNNPtr VerticalCS::createGravityRelatedHeight(const common::UnitOfMeasure &unit) { auto cs(VerticalCS::nn_make_shared(CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, "Gravity-related height"), "H", AxisDirection::UP, unit))); return cs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress VerticalCSNNPtr VerticalCS::alterUnit(const common::UnitOfMeasure &unit) const { const auto &l_axisList = CoordinateSystem::getPrivate()->axisList; return VerticalCS::nn_make_shared( l_axisList[0]->alterUnit(unit)); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CartesianCS::~CartesianCS() = default; //! @endcond // --------------------------------------------------------------------------- CartesianCS::CartesianCS(const std::vector &axisIn) : CoordinateSystem(axisIn) {} // --------------------------------------------------------------------------- #ifdef notdef CartesianCS::CartesianCS(const CartesianCS &) = default; #endif // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2) { std::vector axis{axis1, axis2}; auto cs(CartesianCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @param axis3 The third axis. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3) { std::vector axis{axis1, axis2, axis3}; auto cs(CartesianCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS with a Easting (first) and Northing * (second) axis. * * @param unit Linear unit of the axes. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::createEastingNorthing(const common::UnitOfMeasure &unit) { return create(util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Easting), AxisAbbreviation::E, AxisDirection::EAST, unit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Northing), AxisAbbreviation::N, AxisDirection::NORTH, unit)); } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS with a Northing (first) and Easting * (second) axis. * * @param unit Linear unit of the axes. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::createNorthingEasting(const common::UnitOfMeasure &unit) { return create(util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Northing), AxisAbbreviation::N, AxisDirection::NORTH, unit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Easting), AxisAbbreviation::E, AxisDirection::EAST, unit)); } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS with a Westing (first) and Southing * (second) axis. * * @param unit Linear unit of the axes. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::createWestingSouthing(const common::UnitOfMeasure &unit) { return create(util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Easting), AxisAbbreviation::Y, AxisDirection::WEST, unit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Northing), AxisAbbreviation::X, AxisDirection::SOUTH, unit)); } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS, north-pole centered, * with a Easting (first) South-Oriented and * Northing (second) South-Oriented axis. * * @param unit Linear unit of the axes. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::createNorthPoleEastingSouthNorthingSouth( const common::UnitOfMeasure &unit) { return create(util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Easting), AxisAbbreviation::E, AxisDirection::SOUTH, unit, Meridian::create(common::Angle(90))), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Northing), AxisAbbreviation::N, AxisDirection::SOUTH, unit, Meridian::create(common::Angle(180)))); } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS, south-pole centered, * with a Easting (first) North-Oriented and * Northing (second) North-Oriented axis. * * @param unit Linear unit of the axes. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::createSouthPoleEastingNorthNorthingNorth( const common::UnitOfMeasure &unit) { return create(util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Easting), AxisAbbreviation::E, AxisDirection::NORTH, unit, Meridian::create(common::Angle(90))), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Northing), AxisAbbreviation::N, AxisDirection::NORTH, unit, Meridian::create(common::Angle(0)))); } // --------------------------------------------------------------------------- /** \brief Instantiate a CartesianCS with the three geocentric axes. * * @param unit Linear unit of the axes. * @return a new CartesianCS. */ CartesianCSNNPtr CartesianCS::createGeocentric(const common::UnitOfMeasure &unit) { return create(util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Geocentric_X), AxisAbbreviation::X, AxisDirection::GEOCENTRIC_X, unit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Geocentric_Y), AxisAbbreviation::Y, AxisDirection::GEOCENTRIC_Y, unit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Geocentric_Z), AxisAbbreviation::Z, AxisDirection::GEOCENTRIC_Z, unit)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CartesianCSNNPtr CartesianCS::alterUnit(const common::UnitOfMeasure &unit) const { const auto &l_axisList = CoordinateSystem::getPrivate()->axisList; if (l_axisList.size() == 2) { return CartesianCS::create(util::PropertyMap(), l_axisList[0]->alterUnit(unit), l_axisList[1]->alterUnit(unit)); } else { assert(l_axisList.size() == 3); return CartesianCS::create( util::PropertyMap(), l_axisList[0]->alterUnit(unit), l_axisList[1]->alterUnit(unit), l_axisList[2]->alterUnit(unit)); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress AffineCS::~AffineCS() = default; //! @endcond // --------------------------------------------------------------------------- AffineCS::AffineCS(const std::vector &axisIn) : CoordinateSystem(axisIn) {} // --------------------------------------------------------------------------- /** \brief Instantiate a AffineCS. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @return a new AffineCS. */ AffineCSNNPtr AffineCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2) { std::vector axis{axis1, axis2}; auto cs(AffineCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- /** \brief Instantiate a AffineCS. * * @param properties See \ref general_properties. * @param axis1 The first axis. * @param axis2 The second axis. * @param axis3 The third axis. * @return a new AffineCS. */ AffineCSNNPtr AffineCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axis1, const CoordinateSystemAxisNNPtr &axis2, const CoordinateSystemAxisNNPtr &axis3) { std::vector axis{axis1, axis2, axis3}; auto cs(AffineCS::nn_make_shared(axis)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress AffineCSNNPtr AffineCS::alterUnit(const common::UnitOfMeasure &unit) const { const auto &l_axisList = CoordinateSystem::getPrivate()->axisList; if (l_axisList.size() == 2) { return AffineCS::create(util::PropertyMap(), l_axisList[0]->alterUnit(unit), l_axisList[1]->alterUnit(unit)); } else { assert(l_axisList.size() == 3); return AffineCS::create( util::PropertyMap(), l_axisList[0]->alterUnit(unit), l_axisList[1]->alterUnit(unit), l_axisList[2]->alterUnit(unit)); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress OrdinalCS::~OrdinalCS() = default; //! @endcond // --------------------------------------------------------------------------- OrdinalCS::OrdinalCS(const std::vector &axisIn) : CoordinateSystem(axisIn) {} // --------------------------------------------------------------------------- #ifdef notdef OrdinalCS::OrdinalCS(const OrdinalCS &) = default; #endif // --------------------------------------------------------------------------- /** \brief Instantiate a OrdinalCS. * * @param properties See \ref general_properties. * @param axisIn List of axis. * @return a new OrdinalCS. */ OrdinalCSNNPtr OrdinalCS::create(const util::PropertyMap &properties, const std::vector &axisIn) { auto cs(OrdinalCS::nn_make_shared(axisIn)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ParametricCS::~ParametricCS() = default; //! @endcond // --------------------------------------------------------------------------- ParametricCS::ParametricCS(const std::vector &axisIn) : CoordinateSystem(axisIn) {} // --------------------------------------------------------------------------- #ifdef notdef ParametricCS::ParametricCS(const ParametricCS &) = default; #endif // --------------------------------------------------------------------------- /** \brief Instantiate a ParametricCS. * * @param properties See \ref general_properties. * @param axisIn Axis. * @return a new ParametricCS. */ ParametricCSNNPtr ParametricCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axisIn) { auto cs(ParametricCS::nn_make_shared( std::vector{axisIn})); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- AxisDirection::AxisDirection(const std::string &nameIn) : CodeList(nameIn) { auto lowerName = tolower(nameIn); assert(registry.find(lowerName) == registry.end()); registry[lowerName] = this; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const AxisDirection * AxisDirection::valueOf(const std::string &nameIn) noexcept { auto iter = registry.find(tolower(nameIn)); if (iter == registry.end()) return nullptr; return iter->second; } //! @endcond // --------------------------------------------------------------------------- RangeMeaning::RangeMeaning(const std::string &nameIn) : CodeList(nameIn) { auto lowerName = tolower(nameIn); assert(registry.find(lowerName) == registry.end()); registry[lowerName] = this; } // --------------------------------------------------------------------------- RangeMeaning::RangeMeaning() : CodeList(std::string()) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const RangeMeaning *RangeMeaning::valueOf(const std::string &nameIn) noexcept { auto iter = registry.find(tolower(nameIn)); if (iter == registry.end()) return nullptr; return iter->second; } //! @endcond //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- AxisDirectionWKT1::AxisDirectionWKT1(const std::string &nameIn) : CodeList(nameIn) { auto lowerName = tolower(nameIn); assert(registry.find(lowerName) == registry.end()); registry[lowerName] = this; } // --------------------------------------------------------------------------- const AxisDirectionWKT1 *AxisDirectionWKT1::valueOf(const std::string &nameIn) { auto iter = registry.find(tolower(nameIn)); if (iter == registry.end()) return nullptr; return iter->second; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TemporalCS::~TemporalCS() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TemporalCS::TemporalCS(const CoordinateSystemAxisNNPtr &axisIn) : CoordinateSystem(std::vector{axisIn}) {} //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DateTimeTemporalCS::~DateTimeTemporalCS() = default; //! @endcond // --------------------------------------------------------------------------- DateTimeTemporalCS::DateTimeTemporalCS(const CoordinateSystemAxisNNPtr &axisIn) : TemporalCS(axisIn) {} // --------------------------------------------------------------------------- /** \brief Instantiate a DateTimeTemporalCS. * * @param properties See \ref general_properties. * @param axisIn The axis. * @return a new DateTimeTemporalCS. */ DateTimeTemporalCSNNPtr DateTimeTemporalCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axisIn) { auto cs(DateTimeTemporalCS::nn_make_shared(axisIn)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- std::string DateTimeTemporalCS::getWKT2Type(bool use2019Keywords) const { return use2019Keywords ? WKT2_2019_TYPE : WKT2_2015_TYPE; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TemporalCountCS::~TemporalCountCS() = default; //! @endcond // --------------------------------------------------------------------------- TemporalCountCS::TemporalCountCS(const CoordinateSystemAxisNNPtr &axisIn) : TemporalCS(axisIn) {} // --------------------------------------------------------------------------- /** \brief Instantiate a TemporalCountCS. * * @param properties See \ref general_properties. * @param axisIn The axis. * @return a new TemporalCountCS. */ TemporalCountCSNNPtr TemporalCountCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axisIn) { auto cs(TemporalCountCS::nn_make_shared(axisIn)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- std::string TemporalCountCS::getWKT2Type(bool use2019Keywords) const { return use2019Keywords ? WKT2_2019_TYPE : WKT2_2015_TYPE; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TemporalMeasureCS::~TemporalMeasureCS() = default; //! @endcond // --------------------------------------------------------------------------- TemporalMeasureCS::TemporalMeasureCS(const CoordinateSystemAxisNNPtr &axisIn) : TemporalCS(axisIn) {} // --------------------------------------------------------------------------- /** \brief Instantiate a TemporalMeasureCS. * * @param properties See \ref general_properties. * @param axisIn The axis. * @return a new TemporalMeasureCS. */ TemporalMeasureCSNNPtr TemporalMeasureCS::create(const util::PropertyMap &properties, const CoordinateSystemAxisNNPtr &axisIn) { auto cs(TemporalMeasureCS::nn_make_shared(axisIn)); cs->setProperties(properties); return cs; } // --------------------------------------------------------------------------- std::string TemporalMeasureCS::getWKT2Type(bool use2019Keywords) const { return use2019Keywords ? WKT2_2019_TYPE : WKT2_2015_TYPE; } } // namespace cs NS_PROJ_END proj-9.6.0/src/iso19111/crs.cpp000664 001754 001755 00001074050 14764566077 015701 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif //! @cond Doxygen_Suppress #define DO_NOT_DEFINE_EXTERN_DERIVED_CRS_TEMPLATE //! @endcond #include "proj/crs.hpp" #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinatesystem.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/coordinatesystem_internal.hpp" #include "proj/internal/crs_internal.hpp" #include "proj/internal/datum_internal.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "operation/oputils.hpp" #include "proj_constants.h" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include #include #include #include using namespace NS_PROJ::internal; #if 0 namespace dropbox{ namespace oxygen { template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; }} #endif NS_PROJ_START namespace crs { //! @cond Doxygen_Suppress constexpr const char *PROMOTED_TO_3D_PRELUDE = "Promoted to 3D from "; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CRS::Private { BoundCRSPtr canonicalBoundCRS_{}; std::string extensionProj4_{}; bool implicitCS_ = false; bool over_ = false; bool allowNonConformantWKT1Export_ = false; // for what was initially a COMPD_CS with a VERT_CS with a datum type == // ellipsoidal height / 2002 CompoundCRSPtr originalCompoundCRS_{}; void setNonStandardProperties(const util::PropertyMap &properties) { { const auto pVal = properties.get("IMPLICIT_CS"); if (pVal) { if (const auto genVal = dynamic_cast(pVal->get())) { if (genVal->type() == util::BoxedValue::Type::BOOLEAN && genVal->booleanValue()) { implicitCS_ = true; } } } } { const auto pVal = properties.get("OVER"); if (pVal) { if (const auto genVal = dynamic_cast(pVal->get())) { if (genVal->type() == util::BoxedValue::Type::BOOLEAN && genVal->booleanValue()) { over_ = true; } } } } } }; //! @endcond // --------------------------------------------------------------------------- CRS::CRS() : d(std::make_unique()) {} // --------------------------------------------------------------------------- CRS::CRS(const CRS &other) : ObjectUsage(other), d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRS::~CRS() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return whether the CRS has an implicit coordinate system * (e.g from ESRI WKT) */ bool CRS::hasImplicitCS() const { return d->implicitCS_; } /** \brief Return whether the CRS has a +over flag */ bool CRS::hasOver() const { return d->over_; } //! @endcond // --------------------------------------------------------------------------- /** \brief Return the BoundCRS potentially attached to this CRS. * * In the case this method is called on a object returned by * BoundCRS::baseCRSWithCanonicalBoundCRS(), this method will return this * BoundCRS * * @return a BoundCRSPtr, that might be null. */ const BoundCRSPtr &CRS::canonicalBoundCRS() PROJ_PURE_DEFN { return d->canonicalBoundCRS_; } // --------------------------------------------------------------------------- /** \brief Return whether a CRS is a dynamic CRS. * * A dynamic CRS is a CRS that contains a geodetic CRS whose geodetic reference * frame is dynamic, or a vertical CRS whose vertical reference frame is * dynamic. * @param considerWGS84AsDynamic set to true to consider the WGS 84 / EPSG:6326 * datum ensemble as dynamic. * @since 9.2 */ bool CRS::isDynamic(bool considerWGS84AsDynamic) const { if (auto raw = extractGeodeticCRSRaw()) { const auto &l_datum = raw->datum(); if (l_datum) { if (dynamic_cast( l_datum.get())) { return true; } if (considerWGS84AsDynamic && l_datum->nameStr() == "World Geodetic System 1984") { return true; } } if (considerWGS84AsDynamic) { const auto &l_datumEnsemble = raw->datumEnsemble(); if (l_datumEnsemble && l_datumEnsemble->nameStr() == "World Geodetic System 1984 ensemble") { return true; } } } if (auto vertCRS = extractVerticalCRS()) { const auto &l_datum = vertCRS->datum(); if (l_datum && dynamic_cast( l_datum.get())) { return true; } } return false; } // --------------------------------------------------------------------------- /** \brief Return the GeodeticCRS of the CRS. * * Returns the GeodeticCRS contained in a CRS. This works currently with * input parameters of type GeodeticCRS or derived, ProjectedCRS, * CompoundCRS or BoundCRS. * * @return a GeodeticCRSPtr, that might be null. */ GeodeticCRSPtr CRS::extractGeodeticCRS() const { auto raw = extractGeodeticCRSRaw(); if (raw) { return std::dynamic_pointer_cast( raw->shared_from_this().as_nullable()); } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const GeodeticCRS *CRS::extractGeodeticCRSRaw() const { auto geodCRS = dynamic_cast(this); if (geodCRS) { return geodCRS; } auto projCRS = dynamic_cast(this); if (projCRS) { return projCRS->baseCRS()->extractGeodeticCRSRaw(); } auto compoundCRS = dynamic_cast(this); if (compoundCRS) { for (const auto &subCrs : compoundCRS->componentReferenceSystems()) { auto retGeogCRS = subCrs->extractGeodeticCRSRaw(); if (retGeogCRS) { return retGeogCRS; } } } auto boundCRS = dynamic_cast(this); if (boundCRS) { return boundCRS->baseCRS()->extractGeodeticCRSRaw(); } auto derivedProjectedCRS = dynamic_cast(this); if (derivedProjectedCRS) { return derivedProjectedCRS->baseCRS()->extractGeodeticCRSRaw(); } return nullptr; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const std::string &CRS::getExtensionProj4() const noexcept { return d->extensionProj4_; } //! @endcond // --------------------------------------------------------------------------- /** \brief Return the GeographicCRS of the CRS. * * Returns the GeographicCRS contained in a CRS. This works currently with * input parameters of type GeographicCRS or derived, ProjectedCRS, * CompoundCRS or BoundCRS. * * @return a GeographicCRSPtr, that might be null. */ GeographicCRSPtr CRS::extractGeographicCRS() const { auto raw = extractGeodeticCRSRaw(); if (raw) { return std::dynamic_pointer_cast( raw->shared_from_this().as_nullable()); } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static util::PropertyMap createPropertyMap(const common::IdentifiedObject *obj) { auto props = util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, obj->nameStr()); if (obj->isDeprecated()) { props.set(common::IdentifiedObject::DEPRECATED_KEY, true); } return props; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRSNNPtr CRS::alterGeodeticCRS(const GeodeticCRSNNPtr &newGeodCRS) const { if (dynamic_cast(this)) { return newGeodCRS; } if (auto projCRS = dynamic_cast(this)) { return ProjectedCRS::create(createPropertyMap(this), newGeodCRS, projCRS->derivingConversion(), projCRS->coordinateSystem()); } if (auto derivedProjCRS = dynamic_cast(this)) { auto newProjCRS = NN_CHECK_ASSERT(util::nn_dynamic_pointer_cast( derivedProjCRS->baseCRS()->alterGeodeticCRS(newGeodCRS))); return DerivedProjectedCRS::create(createPropertyMap(this), newProjCRS, derivedProjCRS->derivingConversion(), derivedProjCRS->coordinateSystem()); } if (auto compoundCRS = dynamic_cast(this)) { std::vector components; for (const auto &subCrs : compoundCRS->componentReferenceSystems()) { components.emplace_back(subCrs->alterGeodeticCRS(newGeodCRS)); } return CompoundCRS::create(createPropertyMap(this), components); } return NN_NO_CHECK( std::dynamic_pointer_cast(shared_from_this().as_nullable())); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRSNNPtr CRS::alterCSLinearUnit(const common::UnitOfMeasure &unit) const { { auto projCRS = dynamic_cast(this); if (projCRS) { return ProjectedCRS::create( createPropertyMap(this), projCRS->baseCRS(), projCRS->derivingConversion(), projCRS->coordinateSystem()->alterUnit(unit)); } } { auto geodCRS = dynamic_cast(this); if (geodCRS && geodCRS->isGeocentric()) { auto cs = dynamic_cast( geodCRS->coordinateSystem().get()); assert(cs); return GeodeticCRS::create( createPropertyMap(this), geodCRS->datum(), geodCRS->datumEnsemble(), cs->alterUnit(unit)); } } { auto geogCRS = dynamic_cast(this); if (geogCRS && geogCRS->coordinateSystem()->axisList().size() == 3) { return GeographicCRS::create( createPropertyMap(this), geogCRS->datum(), geogCRS->datumEnsemble(), geogCRS->coordinateSystem()->alterLinearUnit(unit)); } } { auto vertCRS = dynamic_cast(this); if (vertCRS) { return VerticalCRS::create( createPropertyMap(this), vertCRS->datum(), vertCRS->datumEnsemble(), vertCRS->coordinateSystem()->alterUnit(unit)); } } { auto engCRS = dynamic_cast(this); if (engCRS) { auto cartCS = util::nn_dynamic_pointer_cast( engCRS->coordinateSystem()); if (cartCS) { return EngineeringCRS::create(createPropertyMap(this), engCRS->datum(), cartCS->alterUnit(unit)); } else { auto vertCS = util::nn_dynamic_pointer_cast( engCRS->coordinateSystem()); if (vertCS) { return EngineeringCRS::create(createPropertyMap(this), engCRS->datum(), vertCS->alterUnit(unit)); } } } } { auto derivedProjCRS = dynamic_cast(this); if (derivedProjCRS) { auto cs = derivedProjCRS->coordinateSystem(); auto cartCS = util::nn_dynamic_pointer_cast(cs); if (cartCS) { cs = cartCS->alterUnit(unit); } return DerivedProjectedCRS::create( createPropertyMap(this), derivedProjCRS->baseCRS(), derivedProjCRS->derivingConversion(), cs); } } { auto compoundCRS = dynamic_cast(this); if (compoundCRS) { std::vector components; for (const auto &subCrs : compoundCRS->componentReferenceSystems()) { components.push_back(subCrs->alterCSLinearUnit(unit)); } return CompoundCRS::create(createPropertyMap(this), components); } } { auto boundCRS = dynamic_cast(this); if (boundCRS) { return BoundCRS::create( createPropertyMap(this), boundCRS->baseCRS()->alterCSLinearUnit(unit), boundCRS->hubCRS(), boundCRS->transformation()); } } return NN_NO_CHECK( std::dynamic_pointer_cast(shared_from_this().as_nullable())); } //! @endcond // --------------------------------------------------------------------------- /** \brief Return the VerticalCRS of the CRS. * * Returns the VerticalCRS contained in a CRS. This works currently with * input parameters of type VerticalCRS or derived, CompoundCRS or BoundCRS. * * @return a VerticalCRSPtr, that might be null. */ VerticalCRSPtr CRS::extractVerticalCRS() const { auto vertCRS = dynamic_cast(this); if (vertCRS) { return std::dynamic_pointer_cast( shared_from_this().as_nullable()); } auto compoundCRS = dynamic_cast(this); if (compoundCRS) { for (const auto &subCrs : compoundCRS->componentReferenceSystems()) { auto retVertCRS = subCrs->extractVerticalCRS(); if (retVertCRS) { return retVertCRS; } } } auto boundCRS = dynamic_cast(this); if (boundCRS) { return boundCRS->baseCRS()->extractVerticalCRS(); } return nullptr; } // --------------------------------------------------------------------------- /** \brief Returns potentially * a BoundCRS, with a transformation to EPSG:4326, wrapping this CRS * * If no such BoundCRS is possible, the object will be returned. * * The purpose of this method is to be able to format a PROJ.4 string with * a +towgs84 parameter or a WKT1:GDAL string with a TOWGS node. * * This method will fetch the GeographicCRS of this CRS and find a * transformation to EPSG:4326 using the domain of the validity of the main CRS, * and there's only one Helmert transformation. * * @return a CRS. */ CRSNNPtr CRS::createBoundCRSToWGS84IfPossible( const io::DatabaseContextPtr &dbContext, operation::CoordinateOperationContext::IntermediateCRSUse allowIntermediateCRSUse) const { auto thisAsCRS = NN_NO_CHECK( std::static_pointer_cast(shared_from_this().as_nullable())); auto boundCRS = util::nn_dynamic_pointer_cast(thisAsCRS); if (!boundCRS) { boundCRS = canonicalBoundCRS(); } if (boundCRS) { if (boundCRS->hubCRS()->_isEquivalentTo( GeographicCRS::EPSG_4326.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { return NN_NO_CHECK(boundCRS); } } auto compoundCRS = dynamic_cast(this); if (compoundCRS) { const auto &comps = compoundCRS->componentReferenceSystems(); if (comps.size() == 2) { auto horiz = comps[0]->createBoundCRSToWGS84IfPossible( dbContext, allowIntermediateCRSUse); auto vert = comps[1]->createBoundCRSToWGS84IfPossible( dbContext, allowIntermediateCRSUse); if (horiz.get() != comps[0].get() || vert.get() != comps[1].get()) { return CompoundCRS::create(createPropertyMap(this), {std::move(horiz), std::move(vert)}); } } return thisAsCRS; } if (!dbContext) { return thisAsCRS; } const auto &l_domains = domains(); metadata::ExtentPtr extent; if (!l_domains.empty()) { if (l_domains.size() == 2) { // Special case for the UTM ETRS89 CRS that have 2 domains since // EPSG v11.009. The "Pan-European conformal mapping at scales // larger than 1:500,000" one includes a slightly smaller one // "Engineering survey, topographic mapping" valid for some // countries. Let's take the larger one to get a transformation // valid for all domains. auto extent0 = l_domains[0]->domainOfValidity(); auto extent1 = l_domains[1]->domainOfValidity(); if (extent0 && extent1) { if (extent0->contains(NN_NO_CHECK(extent1))) { extent = std::move(extent0); } else if (extent1->contains(NN_NO_CHECK(extent0))) { extent = std::move(extent1); } } } if (!extent) { if (l_domains.size() > 1) { // If there are several domains of validity, then it is // extremely unlikely, we could get a single transformation // valid for all. At least, in the current state of the code of // createOperations() which returns a single extent, this can't // happen. return thisAsCRS; } extent = l_domains[0]->domainOfValidity(); } } std::string crs_authority; const auto &l_identifiers = identifiers(); // If the object has an authority, restrict the transformations to // come from that codespace too. This avoids for example EPSG:4269 // (NAD83) to use a (dubious) ESRI transformation. if (!l_identifiers.empty()) { crs_authority = *(l_identifiers[0]->codeSpace()); } auto authorities = dbContext->getAllowedAuthorities( crs_authority, metadata::Identifier::EPSG); if (authorities.empty()) { authorities.emplace_back(); } // Vertical CRS ? auto vertCRS = dynamic_cast(this); if (vertCRS) { auto hubCRS = util::nn_static_pointer_cast(GeographicCRS::EPSG_4979); for (const auto &authority : authorities) { try { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), authority == "any" ? std::string() : authority); auto ctxt = operation::CoordinateOperationContext::create( authFactory, extent, 0.0); ctxt->setAllowUseIntermediateCRS(allowIntermediateCRSUse); // ctxt->setSpatialCriterion( // operation::CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = operation::CoordinateOperationFactory::create() ->createOperations(hubCRS, thisAsCRS, ctxt); CRSPtr candidateBoundCRS; for (const auto &op : list) { auto transf = util::nn_dynamic_pointer_cast< operation::Transformation>(op); // Only keep transformations that use a known grid if (transf && !transf->hasBallparkTransformation()) { auto gridsNeeded = transf->gridsNeeded(dbContext, true); bool gridsKnown = !gridsNeeded.empty(); for (const auto &gridDesc : gridsNeeded) { if (gridDesc.packageName.empty() && !(!gridDesc.url.empty() && gridDesc.openLicense) && !gridDesc.available) { gridsKnown = false; break; } } if (gridsKnown) { if (candidateBoundCRS) { candidateBoundCRS = nullptr; break; } candidateBoundCRS = BoundCRS::create(thisAsCRS, hubCRS, NN_NO_CHECK(transf)) .as_nullable(); } } } if (candidateBoundCRS) { return NN_NO_CHECK(candidateBoundCRS); } } catch (const std::exception &) { } } return thisAsCRS; } // Geodetic/geographic CRS ? auto geodCRS = util::nn_dynamic_pointer_cast(thisAsCRS); auto geogCRS = extractGeographicCRS(); auto hubCRS = util::nn_static_pointer_cast(GeographicCRS::EPSG_4326); if (geodCRS && !geogCRS) { if (geodCRS->datumNonNull(dbContext)->nameStr() != "unknown" && geodCRS->_isEquivalentTo(GeographicCRS::EPSG_4978.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { return thisAsCRS; } hubCRS = util::nn_static_pointer_cast(GeodeticCRS::EPSG_4978); } else if (!geogCRS || (geogCRS->datumNonNull(dbContext)->nameStr() != "unknown" && geogCRS->_isEquivalentTo( GeographicCRS::EPSG_4326.get(), util::IComparable::Criterion::EQUIVALENT, dbContext))) { return thisAsCRS; } else { geodCRS = geogCRS; } for (const auto &authority : authorities) { try { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), authority == "any" ? std::string() : authority); metadata::ExtentPtr extentResolved(extent); if (!extent) { getResolvedCRS(thisAsCRS, authFactory, extentResolved); } auto ctxt = operation::CoordinateOperationContext::create( authFactory, extentResolved, 0.0); ctxt->setAllowUseIntermediateCRS(allowIntermediateCRSUse); // ctxt->setSpatialCriterion( // operation::CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = operation::CoordinateOperationFactory::create() ->createOperations(NN_NO_CHECK(geodCRS), hubCRS, ctxt); CRSPtr candidateBoundCRS; int candidateCount = 0; const auto takeIntoAccountCandidate = [&](const operation::TransformationNNPtr &transf) { if (transf->getTOWGS84Parameters(false).empty()) { return; } candidateCount++; if (candidateBoundCRS == nullptr) { candidateCount = 1; candidateBoundCRS = BoundCRS::create(thisAsCRS, hubCRS, transf) .as_nullable(); } }; for (const auto &op : list) { auto transf = util::nn_dynamic_pointer_cast( op); if (transf && !starts_with(transf->nameStr(), "Ballpark geo")) { takeIntoAccountCandidate(NN_NO_CHECK(transf)); } else { auto concatenated = dynamic_cast( op.get()); if (concatenated) { // Case for EPSG:4807 / "NTF (Paris)" that is made of a // longitude rotation followed by a Helmert // The prime meridian shift will be accounted elsewhere const auto &subops = concatenated->operations(); if (subops.size() == 2) { auto firstOpIsTransformation = dynamic_cast( subops[0].get()); auto firstOpIsConversion = dynamic_cast( subops[0].get()); if ((firstOpIsTransformation && firstOpIsTransformation ->isLongitudeRotation()) || (dynamic_cast(thisAsCRS.get()) && firstOpIsConversion)) { transf = util::nn_dynamic_pointer_cast< operation::Transformation>(subops[1]); if (transf && !starts_with(transf->nameStr(), "Ballpark geo")) { takeIntoAccountCandidate( NN_NO_CHECK(transf)); } } } } } } if (candidateCount == 1 && candidateBoundCRS) { return NN_NO_CHECK(candidateBoundCRS); } } catch (const std::exception &) { } } return thisAsCRS; } // --------------------------------------------------------------------------- /** \brief Returns a CRS whose coordinate system does not contain a vertical * component. * * As of PROJ 9.5, this method is an alias of demoteTo2D(std::string(), * nullptr), which deals with all potential CRS types. * * demoteTo2D() is a preferred alternative, especially when invoked with a * non-null database context, to perform a look-up in the database for * already registered 2D CRS. * * @return a CRS. */ CRSNNPtr CRS::stripVerticalComponent() const { return demoteTo2D(std::string(), nullptr); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return a shallow clone of this object. */ CRSNNPtr CRS::shallowClone() const { return _shallowClone(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRSNNPtr CRS::allowNonConformantWKT1Export() const { const auto boundCRS = dynamic_cast(this); if (boundCRS) { return BoundCRS::create( boundCRS->baseCRS()->allowNonConformantWKT1Export(), boundCRS->hubCRS(), boundCRS->transformation()); } auto crs(shallowClone()); crs->d->allowNonConformantWKT1Export_ = true; return crs; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRSNNPtr CRS::attachOriginalCompoundCRS(const CompoundCRSNNPtr &compoundCRS) const { const auto boundCRS = dynamic_cast(this); if (boundCRS) { return BoundCRS::create( boundCRS->baseCRS()->attachOriginalCompoundCRS(compoundCRS), boundCRS->hubCRS(), boundCRS->transformation()); } auto crs(shallowClone()); crs->d->originalCompoundCRS_ = compoundCRS.as_nullable(); return crs; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRSNNPtr CRS::alterName(const std::string &newName) const { auto crs = shallowClone(); auto newNameMod(newName); auto props = util::PropertyMap(); if (ends_with(newNameMod, " (deprecated)")) { newNameMod.resize(newNameMod.size() - strlen(" (deprecated)")); props.set(common::IdentifiedObject::DEPRECATED_KEY, true); } props.set(common::IdentifiedObject::NAME_KEY, newNameMod); crs->setProperties(props); return crs; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRSNNPtr CRS::alterId(const std::string &authName, const std::string &code) const { auto crs = shallowClone(); auto props = util::PropertyMap(); props.set(metadata::Identifier::CODESPACE_KEY, authName) .set(metadata::Identifier::CODE_KEY, code); crs->setProperties(props); return crs; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool mustAxisOrderBeSwitchedForVisualizationInternal( const std::vector &axisList) { const auto &dir0 = axisList[0]->direction(); const auto &dir1 = axisList[1]->direction(); if (&dir0 == &cs::AxisDirection::NORTH && &dir1 == &cs::AxisDirection::EAST) { return true; } // Address EPSG:32661 "WGS 84 / UPS North (N,E)" if (&dir0 == &cs::AxisDirection::SOUTH && &dir1 == &cs::AxisDirection::SOUTH) { const auto &meridian0 = axisList[0]->meridian(); const auto &meridian1 = axisList[1]->meridian(); return meridian0 != nullptr && meridian1 != nullptr && std::abs(meridian0->longitude().convertToUnit( common::UnitOfMeasure::DEGREE) - 180.0) < 1e-10 && std::abs(meridian1->longitude().convertToUnit( common::UnitOfMeasure::DEGREE) - 90.0) < 1e-10; } if (&dir0 == &cs::AxisDirection::NORTH && &dir1 == &cs::AxisDirection::NORTH) { const auto &meridian0 = axisList[0]->meridian(); const auto &meridian1 = axisList[1]->meridian(); return meridian0 != nullptr && meridian1 != nullptr && (( // Address EPSG:32761 "WGS 84 / UPS South (N,E)" std::abs(meridian0->longitude().convertToUnit( common::UnitOfMeasure::DEGREE) - 0.0) < 1e-10 && std::abs(meridian1->longitude().convertToUnit( common::UnitOfMeasure::DEGREE) - 90.0) < 1e-10) || // Address EPSG:5482 "RSRGD2000 / RSPS2000" (std::abs(meridian0->longitude().convertToUnit( common::UnitOfMeasure::DEGREE) - 180) < 1e-10 && std::abs(meridian1->longitude().convertToUnit( common::UnitOfMeasure::DEGREE) - -90.0) < 1e-10)); } return false; } // --------------------------------------------------------------------------- bool CRS::mustAxisOrderBeSwitchedForVisualization() const { if (const CompoundCRS *compoundCRS = dynamic_cast(this)) { const auto &comps = compoundCRS->componentReferenceSystems(); if (!comps.empty()) { return comps[0]->mustAxisOrderBeSwitchedForVisualization(); } } if (const GeographicCRS *geogCRS = dynamic_cast(this)) { return mustAxisOrderBeSwitchedForVisualizationInternal( geogCRS->coordinateSystem()->axisList()); } if (const ProjectedCRS *projCRS = dynamic_cast(this)) { return mustAxisOrderBeSwitchedForVisualizationInternal( projCRS->coordinateSystem()->axisList()); } if (const DerivedProjectedCRS *derivedProjCRS = dynamic_cast(this)) { return mustAxisOrderBeSwitchedForVisualizationInternal( derivedProjCRS->coordinateSystem()->axisList()); } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CRS::setProperties( const util::PropertyMap &properties) // throw(InvalidValueTypeException) { std::string l_remarks; std::string extensionProj4; properties.getStringValue(IdentifiedObject::REMARKS_KEY, l_remarks); properties.getStringValue("EXTENSION_PROJ4", extensionProj4); const char *PROJ_CRS_STRING_PREFIX = "PROJ CRS string: "; const char *PROJ_CRS_STRING_SUFFIX = ". "; const auto beginOfProjStringPos = l_remarks.find(PROJ_CRS_STRING_PREFIX); if (beginOfProjStringPos == std::string::npos && extensionProj4.empty()) { ObjectUsage::setProperties(properties); return; } util::PropertyMap newProperties(properties); // Parse remarks and extract EXTENSION_PROJ4 from it if (extensionProj4.empty()) { if (beginOfProjStringPos != std::string::npos) { const auto endOfProjStringPos = l_remarks.find(PROJ_CRS_STRING_SUFFIX, beginOfProjStringPos); if (endOfProjStringPos == std::string::npos) { extensionProj4 = l_remarks.substr( beginOfProjStringPos + strlen(PROJ_CRS_STRING_PREFIX)); } else { extensionProj4 = l_remarks.substr( beginOfProjStringPos + strlen(PROJ_CRS_STRING_PREFIX), endOfProjStringPos - beginOfProjStringPos - strlen(PROJ_CRS_STRING_PREFIX)); } } } if (!extensionProj4.empty()) { if (beginOfProjStringPos == std::string::npos) { // Add EXTENSION_PROJ4 to remarks l_remarks = PROJ_CRS_STRING_PREFIX + extensionProj4 + (l_remarks.empty() ? std::string() : PROJ_CRS_STRING_SUFFIX + l_remarks); } } newProperties.set(IdentifiedObject::REMARKS_KEY, l_remarks); ObjectUsage::setProperties(newProperties); d->extensionProj4_ = std::move(extensionProj4); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- CRSNNPtr CRS::applyAxisOrderReversal(const char *nameSuffix) const { const auto createProperties = [this, nameSuffix](const std::string &newNameIn = std::string()) { std::string newName(newNameIn); if (newName.empty()) { newName = nameStr(); if (ends_with(newName, NORMALIZED_AXIS_ORDER_SUFFIX_STR)) { newName.resize(newName.size() - strlen(NORMALIZED_AXIS_ORDER_SUFFIX_STR)); } else if (ends_with(newName, AXIS_ORDER_REVERSED_SUFFIX_STR)) { newName.resize(newName.size() - strlen(AXIS_ORDER_REVERSED_SUFFIX_STR)); } else { newName += nameSuffix; } } auto props = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, newName); const auto &l_domains = domains(); if (!l_domains.empty()) { auto array = util::ArrayOfBaseObject::create(); for (const auto &domain : l_domains) { array->add(domain); } if (!array->empty()) { props.set(common::ObjectUsage::OBJECT_DOMAIN_KEY, array); } } const auto &l_identifiers = identifiers(); const auto &l_remarks = remarks(); if (l_identifiers.size() == 1) { std::string remarks("Axis order reversed compared to "); if (!starts_with(l_remarks, remarks)) { remarks += *(l_identifiers[0]->codeSpace()); remarks += ':'; remarks += l_identifiers[0]->code(); if (!l_remarks.empty()) { remarks += ". "; remarks += l_remarks; } props.set(common::IdentifiedObject::REMARKS_KEY, remarks); } } else if (!l_remarks.empty()) { props.set(common::IdentifiedObject::REMARKS_KEY, l_remarks); } return props; }; if (const CompoundCRS *compoundCRS = dynamic_cast(this)) { const auto &comps = compoundCRS->componentReferenceSystems(); if (!comps.empty()) { std::vector newComps; newComps.emplace_back(comps[0]->applyAxisOrderReversal(nameSuffix)); std::string l_name = newComps.back()->nameStr(); for (size_t i = 1; i < comps.size(); i++) { newComps.emplace_back(comps[i]); l_name += " + "; l_name += newComps.back()->nameStr(); } return util::nn_static_pointer_cast( CompoundCRS::create(createProperties(l_name), newComps)); } } if (const GeographicCRS *geogCRS = dynamic_cast(this)) { const auto &axisList = geogCRS->coordinateSystem()->axisList(); auto cs = axisList.size() == 2 ? cs::EllipsoidalCS::create(util::PropertyMap(), axisList[1], axisList[0]) : cs::EllipsoidalCS::create(util::PropertyMap(), axisList[1], axisList[0], axisList[2]); return util::nn_static_pointer_cast( GeographicCRS::create(createProperties(), geogCRS->datum(), geogCRS->datumEnsemble(), cs)); } if (const ProjectedCRS *projCRS = dynamic_cast(this)) { const auto &axisList = projCRS->coordinateSystem()->axisList(); auto cs = axisList.size() == 2 ? cs::CartesianCS::create(util::PropertyMap(), axisList[1], axisList[0]) : cs::CartesianCS::create(util::PropertyMap(), axisList[1], axisList[0], axisList[2]); return util::nn_static_pointer_cast( ProjectedCRS::create(createProperties(), projCRS->baseCRS(), projCRS->derivingConversion(), cs)); } if (const DerivedProjectedCRS *derivedProjCRS = dynamic_cast(this)) { const auto &axisList = derivedProjCRS->coordinateSystem()->axisList(); auto cs = axisList.size() == 2 ? cs::CartesianCS::create(util::PropertyMap(), axisList[1], axisList[0]) : cs::CartesianCS::create(util::PropertyMap(), axisList[1], axisList[0], axisList[2]); return util::nn_static_pointer_cast(DerivedProjectedCRS::create( createProperties(), derivedProjCRS->baseCRS(), derivedProjCRS->derivingConversion(), cs)); } throw util::UnsupportedOperationException( "axis order reversal not supported on this type of CRS"); } // --------------------------------------------------------------------------- CRSNNPtr CRS::normalizeForVisualization() const { if (const CompoundCRS *compoundCRS = dynamic_cast(this)) { const auto &comps = compoundCRS->componentReferenceSystems(); if (!comps.empty() && comps[0]->mustAxisOrderBeSwitchedForVisualization()) { return applyAxisOrderReversal(NORMALIZED_AXIS_ORDER_SUFFIX_STR); } } if (const GeographicCRS *geogCRS = dynamic_cast(this)) { const auto &axisList = geogCRS->coordinateSystem()->axisList(); if (mustAxisOrderBeSwitchedForVisualizationInternal(axisList)) { return applyAxisOrderReversal(NORMALIZED_AXIS_ORDER_SUFFIX_STR); } } if (const ProjectedCRS *projCRS = dynamic_cast(this)) { const auto &axisList = projCRS->coordinateSystem()->axisList(); if (mustAxisOrderBeSwitchedForVisualizationInternal(axisList)) { return applyAxisOrderReversal(NORMALIZED_AXIS_ORDER_SUFFIX_STR); } } if (const DerivedProjectedCRS *derivedProjCRS = dynamic_cast(this)) { const auto &axisList = derivedProjCRS->coordinateSystem()->axisList(); if (mustAxisOrderBeSwitchedForVisualizationInternal(axisList)) { return applyAxisOrderReversal(NORMALIZED_AXIS_ORDER_SUFFIX_STR); } } if (const BoundCRS *boundCRS = dynamic_cast(this)) { auto baseNormCRS = boundCRS->baseCRS()->normalizeForVisualization(); return BoundCRS::create(baseNormCRS, boundCRS->hubCRS(), boundCRS->transformation()); } return NN_NO_CHECK( std::static_pointer_cast(shared_from_this().as_nullable())); } //! @endcond // --------------------------------------------------------------------------- /** \brief Identify the CRS with reference CRSs. * * The candidate CRSs are either hard-coded, or looked in the database when * authorityFactory is not null. * * Note that the implementation uses a set of heuristics to have a good * compromise of successful identifications over execution time. It might miss * legitimate matches in some circumstances. * * The method returns a list of matching reference CRS, and the percentage * (0-100) of confidence in the match. The list is sorted by decreasing * confidence. *
    *
  • 100% means that the name of the reference entry * perfectly matches the CRS name, and both are equivalent. In which case a * single result is returned. * Note: in the case of a GeographicCRS whose axis * order is implicit in the input definition (for example ESRI WKT), then axis * order is ignored for the purpose of identification. That is the CRS built * from * GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]], * PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] * will be identified to EPSG:4326, but will not pass a * isEquivalentTo(EPSG_4326, util::IComparable::Criterion::EQUIVALENT) test, * but rather isEquivalentTo(EPSG_4326, * util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS) *
  • *
  • 90% means that CRS are equivalent, but the names are not exactly the * same.
  • *
  • 70% means that CRS are equivalent), but the names do not match at * all.
  • *
  • 25% means that the CRS are not equivalent, but there is some similarity * in * the names.
  • *
* Other confidence values may be returned by some specialized implementations. * * This is implemented for GeodeticCRS, ProjectedCRS, VerticalCRS and * CompoundCRS. * * @param authorityFactory Authority factory (or null, but degraded * functionality) * @return a list of matching reference CRS, and the percentage (0-100) of * confidence in the match. */ std::list> CRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const { return _identify(authorityFactory); } // --------------------------------------------------------------------------- /** \brief Return CRSs that are non-deprecated substitutes for the current CRS. */ std::list CRS::getNonDeprecated(const io::DatabaseContextNNPtr &dbContext) const { std::list res; const auto &l_identifiers = identifiers(); if (l_identifiers.empty()) { return res; } const char *tableName = nullptr; if (dynamic_cast(this)) { tableName = "geodetic_crs"; } else if (dynamic_cast(this)) { tableName = "projected_crs"; } else if (dynamic_cast(this)) { tableName = "vertical_crs"; } else if (dynamic_cast(this)) { tableName = "compound_crs"; } if (!tableName) { return res; } const auto &id = l_identifiers[0]; auto tmpRes = dbContext->getNonDeprecated(tableName, *(id->codeSpace()), id->code()); for (const auto &pair : tmpRes) { res.emplace_back(io::AuthorityFactory::create(dbContext, pair.first) ->createCoordinateReferenceSystem(pair.second)); } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return the authority name to which this object is registered, or * has an indirect provenance. * * Typically this method called on EPSG:4269 (NAD83) promoted to 3D will return * "EPSG". * * Returns empty string if more than an authority or no originating authority is * found. */ std::string CRS::getOriginatingAuthName() const { const auto &ids = identifiers(); if (ids.size() == 1) { return *(ids[0]->codeSpace()); } if (ids.size() > 1) { return std::string(); } const auto &l_remarks = remarks(); if (starts_with(l_remarks, PROMOTED_TO_3D_PRELUDE)) { const auto pos = l_remarks.find(':'); if (pos != std::string::npos) { return l_remarks.substr(strlen(PROMOTED_TO_3D_PRELUDE), pos - strlen(PROMOTED_TO_3D_PRELUDE)); } } return std::string(); } //! @endcond // --------------------------------------------------------------------------- /** \brief Return a variant of this CRS "promoted" to a 3D one, if not already * the case. * * The new axis will be ellipsoidal height, oriented upwards, and with metre * units. * * @param newName Name of the new CRS. If empty, nameStr() will be used. * @param dbContext Database context to look for potentially already registered * 3D CRS. May be nullptr. * @return a new CRS promoted to 3D, or the current one if already 3D or not * applicable. * @since 6.3 */ CRSNNPtr CRS::promoteTo3D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const { auto upAxis = cs::CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, cs::AxisName::Ellipsoidal_height), cs::AxisAbbreviation::h, cs::AxisDirection::UP, common::UnitOfMeasure::METRE); return promoteTo3D(newName, dbContext, upAxis); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CRSNNPtr CRS::promoteTo3D(const std::string &newName, const io::DatabaseContextPtr &dbContext, const cs::CoordinateSystemAxisNNPtr &verticalAxisIfNotAlreadyPresent) const { const auto createProperties = [this, &newName]() { auto props = util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, !newName.empty() ? newName : nameStr()); const auto &l_domains = domains(); if (!l_domains.empty()) { auto array = util::ArrayOfBaseObject::create(); for (const auto &domain : l_domains) { auto extent = domain->domainOfValidity(); if (extent) { // Propagate only the extent, not the scope, as it might // imply more that we can guarantee with the promotion to // 3D. auto newDomain = common::ObjectDomain::create( util::optional(), extent); array->add(newDomain); } } if (!array->empty()) { props.set(common::ObjectUsage::OBJECT_DOMAIN_KEY, array); } } const auto &l_identifiers = identifiers(); const auto &l_remarks = remarks(); if (l_identifiers.size() == 1) { std::string remarks(PROMOTED_TO_3D_PRELUDE); remarks += *(l_identifiers[0]->codeSpace()); remarks += ':'; remarks += l_identifiers[0]->code(); if (!l_remarks.empty()) { remarks += ". "; remarks += l_remarks; } props.set(common::IdentifiedObject::REMARKS_KEY, remarks); } else if (!l_remarks.empty()) { props.set(common::IdentifiedObject::REMARKS_KEY, l_remarks); } return props; }; if (auto derivedGeogCRS = dynamic_cast(this)) { const auto &axisList = derivedGeogCRS->coordinateSystem()->axisList(); if (axisList.size() == 2) { auto cs = cs::EllipsoidalCS::create( util::PropertyMap(), axisList[0], axisList[1], verticalAxisIfNotAlreadyPresent); auto baseGeog3DCRS = util::nn_dynamic_pointer_cast( derivedGeogCRS->baseCRS()->promoteTo3D( std::string(), dbContext, verticalAxisIfNotAlreadyPresent)); return util::nn_static_pointer_cast( DerivedGeographicCRS::create( createProperties(), NN_CHECK_THROW(std::move(baseGeog3DCRS)), derivedGeogCRS->derivingConversion(), std::move(cs))); } } else if (auto derivedProjCRS = dynamic_cast(this)) { const auto &axisList = derivedProjCRS->coordinateSystem()->axisList(); if (axisList.size() == 2) { auto cs = cs::CartesianCS::create(util::PropertyMap(), axisList[0], axisList[1], verticalAxisIfNotAlreadyPresent); auto baseProj3DCRS = util::nn_dynamic_pointer_cast( derivedProjCRS->baseCRS()->promoteTo3D( std::string(), dbContext, verticalAxisIfNotAlreadyPresent)); return util::nn_static_pointer_cast( DerivedProjectedCRS::create( createProperties(), NN_CHECK_THROW(std::move(baseProj3DCRS)), derivedProjCRS->derivingConversion(), std::move(cs))); } } else if (auto geogCRS = dynamic_cast(this)) { const auto &axisList = geogCRS->coordinateSystem()->axisList(); if (axisList.size() == 2) { const auto &l_identifiers = identifiers(); // First check if there is a Geographic 3D CRS in the database // of the same name. // This is the common practice in the EPSG dataset. if (dbContext && l_identifiers.size() == 1) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), *(l_identifiers[0]->codeSpace())); auto res = authFactory->createObjectsFromName( nameStr(), {io::AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS}, false); if (!res.empty()) { const auto &firstRes = res.front(); const auto firstResGeog = dynamic_cast(firstRes.get()); const auto &firstResAxisList = firstResGeog->coordinateSystem()->axisList(); if (firstResAxisList[2]->_isEquivalentTo( verticalAxisIfNotAlreadyPresent.get(), util::IComparable::Criterion::EQUIVALENT) && geogCRS->is2DPartOf3D(NN_NO_CHECK(firstResGeog), dbContext)) { return NN_NO_CHECK( util::nn_dynamic_pointer_cast(firstRes)); } } } auto cs = cs::EllipsoidalCS::create( util::PropertyMap(), axisList[0], axisList[1], verticalAxisIfNotAlreadyPresent); return util::nn_static_pointer_cast( GeographicCRS::create(createProperties(), geogCRS->datum(), geogCRS->datumEnsemble(), std::move(cs))); } } else if (auto projCRS = dynamic_cast(this)) { const auto &axisList = projCRS->coordinateSystem()->axisList(); if (axisList.size() == 2) { auto base3DCRS = projCRS->baseCRS()->promoteTo3D(std::string(), dbContext); auto cs = cs::CartesianCS::create(util::PropertyMap(), axisList[0], axisList[1], verticalAxisIfNotAlreadyPresent); return util::nn_static_pointer_cast(ProjectedCRS::create( createProperties(), NN_NO_CHECK( util::nn_dynamic_pointer_cast(base3DCRS)), projCRS->derivingConversion(), std::move(cs))); } } else if (auto boundCRS = dynamic_cast(this)) { auto base3DCRS = boundCRS->baseCRS()->promoteTo3D( newName, dbContext, verticalAxisIfNotAlreadyPresent); auto transf = boundCRS->transformation(); if (!transf->getTOWGS84Parameters(false).empty()) { return BoundCRS::create( createProperties(), base3DCRS, boundCRS->hubCRS()->promoteTo3D(std::string(), dbContext), transf->promoteTo3D(std::string(), dbContext)); } else { return BoundCRS::create(base3DCRS, boundCRS->hubCRS(), std::move(transf)); } } return NN_NO_CHECK( std::static_pointer_cast(shared_from_this().as_nullable())); } //! @endcond // --------------------------------------------------------------------------- /** \brief Return a variant of this CRS "demoted" to a 2D one, if not already * the case. * * * @param newName Name of the new CRS. If empty, nameStr() will be used. * @param dbContext Database context to look for potentially already registered * 2D CRS. May be nullptr. * @return a new CRS demoted to 2D, or the current one if already 2D or not * applicable. * @since 6.3 */ CRSNNPtr CRS::demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const { if (auto derivedGeogCRS = dynamic_cast(this)) { return derivedGeogCRS->demoteTo2D(newName, dbContext); } else if (auto derivedProjCRS = dynamic_cast(this)) { return derivedProjCRS->demoteTo2D(newName, dbContext); } else if (auto geogCRS = dynamic_cast(this)) { return geogCRS->demoteTo2D(newName, dbContext); } else if (auto projCRS = dynamic_cast(this)) { return projCRS->demoteTo2D(newName, dbContext); } else if (auto boundCRS = dynamic_cast(this)) { auto base2DCRS = boundCRS->baseCRS()->demoteTo2D(newName, dbContext); auto transf = boundCRS->transformation(); if (!transf->getTOWGS84Parameters(false).empty()) { return BoundCRS::create( base2DCRS, boundCRS->hubCRS()->demoteTo2D(std::string(), dbContext), transf->demoteTo2D(std::string(), dbContext)); } else { return BoundCRS::create(base2DCRS, boundCRS->hubCRS(), transf); } } else if (auto compoundCRS = dynamic_cast(this)) { const auto &components = compoundCRS->componentReferenceSystems(); if (components.size() >= 2) { return components[0]; } } return NN_NO_CHECK( std::static_pointer_cast(shared_from_this().as_nullable())); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> CRS::_identify(const io::AuthorityFactoryPtr &) const { return {}; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct SingleCRS::Private { datum::DatumPtr datum{}; datum::DatumEnsemblePtr datumEnsemble{}; cs::CoordinateSystemNNPtr coordinateSystem; Private(const datum::DatumPtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::CoordinateSystemNNPtr &csIn) : datum(datumIn), datumEnsemble(datumEnsembleIn), coordinateSystem(csIn) { if ((datum ? 1 : 0) + (datumEnsemble ? 1 : 0) != 1) { throw util::Exception("datum or datumEnsemble should be set"); } } }; //! @endcond // --------------------------------------------------------------------------- SingleCRS::SingleCRS(const datum::DatumPtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::CoordinateSystemNNPtr &csIn) : d(std::make_unique(datumIn, datumEnsembleIn, csIn)) {} // --------------------------------------------------------------------------- SingleCRS::SingleCRS(const SingleCRS &other) : CRS(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress SingleCRS::~SingleCRS() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the datum::Datum associated with the CRS. * * This might be null, in which case datumEnsemble() return will not be null. * * @return a Datum that might be null. */ const datum::DatumPtr &SingleCRS::datum() PROJ_PURE_DEFN { return d->datum; } // --------------------------------------------------------------------------- /** \brief Return the datum::DatumEnsemble associated with the CRS. * * This might be null, in which case datum() return will not be null. * * @return a DatumEnsemble that might be null. */ const datum::DatumEnsemblePtr &SingleCRS::datumEnsemble() PROJ_PURE_DEFN { return d->datumEnsemble; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return the real datum or a synthesized one if a datumEnsemble. */ const datum::DatumNNPtr SingleCRS::datumNonNull(const io::DatabaseContextPtr &dbContext) const { return d->datum ? NN_NO_CHECK(d->datum) : d->datumEnsemble->asDatum(dbContext); } //! @endcond // --------------------------------------------------------------------------- /** \brief Return the cs::CoordinateSystem associated with the CRS. * * @return a CoordinateSystem. */ const cs::CoordinateSystemNNPtr &SingleCRS::coordinateSystem() PROJ_PURE_DEFN { return d->coordinateSystem; } // --------------------------------------------------------------------------- bool SingleCRS::baseIsEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherSingleCRS = dynamic_cast(other); if (otherSingleCRS == nullptr || (criterion == util::IComparable::Criterion::STRICT && !ObjectUsage::_isEquivalentTo(other, criterion, dbContext))) { return false; } // Check datum const auto &thisDatum = d->datum; const auto &otherDatum = otherSingleCRS->d->datum; const auto &thisDatumEnsemble = d->datumEnsemble; const auto &otherDatumEnsemble = otherSingleCRS->d->datumEnsemble; if (thisDatum && otherDatum) { if (!thisDatum->_isEquivalentTo(otherDatum.get(), criterion, dbContext)) { return false; } } else if (thisDatumEnsemble && otherDatumEnsemble) { if (!thisDatumEnsemble->_isEquivalentTo(otherDatumEnsemble.get(), criterion, dbContext)) { return false; } } if (criterion == util::IComparable::Criterion::STRICT) { if ((thisDatum != nullptr) ^ (otherDatum != nullptr)) { return false; } if ((thisDatumEnsemble != nullptr) ^ (otherDatumEnsemble != nullptr)) { return false; } } else { if (!datumNonNull(dbContext)->_isEquivalentTo( otherSingleCRS->datumNonNull(dbContext).get(), criterion, dbContext)) { return false; } } // Check coordinate system if (!(d->coordinateSystem->_isEquivalentTo( otherSingleCRS->d->coordinateSystem.get(), criterion, dbContext))) { return false; } // Now compare PROJ4 extensions const auto &thisProj4 = getExtensionProj4(); const auto &otherProj4 = otherSingleCRS->getExtensionProj4(); if (thisProj4.empty() && otherProj4.empty()) { return true; } if (!(thisProj4.empty() ^ otherProj4.empty())) { return true; } // Asks for a "normalized" output during toString(), aimed at comparing two // strings for equivalence. auto formatter1 = io::PROJStringFormatter::create(); formatter1->setNormalizeOutput(); formatter1->ingestPROJString(thisProj4); auto formatter2 = io::PROJStringFormatter::create(); formatter2->setNormalizeOutput(); formatter2->ingestPROJString(otherProj4); return formatter1->toString() == formatter2->toString(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void SingleCRS::exportDatumOrDatumEnsembleToWkt( io::WKTFormatter *formatter) const // throw(io::FormattingException) { const auto &l_datum = d->datum; if (l_datum) { l_datum->_exportToWKT(formatter); } else { const auto &l_datumEnsemble = d->datumEnsemble; assert(l_datumEnsemble); l_datumEnsemble->_exportToWKT(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GeodeticCRS::Private { std::vector velocityModel{}; datum::GeodeticReferenceFramePtr datum_; explicit Private(const datum::GeodeticReferenceFramePtr &datumIn) : datum_(datumIn) {} }; // --------------------------------------------------------------------------- static const datum::DatumEnsemblePtr & checkEnsembleForGeodeticCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &ensemble) { const char *msg = "One of Datum or DatumEnsemble should be defined"; if (datumIn) { if (!ensemble) { return ensemble; } msg = "Datum and DatumEnsemble should not be defined"; } else if (ensemble) { const auto &datums = ensemble->datums(); assert(!datums.empty()); auto grfFirst = dynamic_cast(datums[0].get()); if (grfFirst) { return ensemble; } msg = "Ensemble should contain GeodeticReferenceFrame"; } throw util::Exception(msg); } //! @endcond // --------------------------------------------------------------------------- GeodeticCRS::GeodeticCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::EllipsoidalCSNNPtr &csIn) : SingleCRS(datumIn, checkEnsembleForGeodeticCRS(datumIn, datumEnsembleIn), csIn), d(std::make_unique(datumIn)) {} // --------------------------------------------------------------------------- GeodeticCRS::GeodeticCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::SphericalCSNNPtr &csIn) : SingleCRS(datumIn, checkEnsembleForGeodeticCRS(datumIn, datumEnsembleIn), csIn), d(std::make_unique(datumIn)) {} // --------------------------------------------------------------------------- GeodeticCRS::GeodeticCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::CartesianCSNNPtr &csIn) : SingleCRS(datumIn, checkEnsembleForGeodeticCRS(datumIn, datumEnsembleIn), csIn), d(std::make_unique(datumIn)) {} // --------------------------------------------------------------------------- GeodeticCRS::GeodeticCRS(const GeodeticCRS &other) : SingleCRS(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeodeticCRS::~GeodeticCRS() = default; //! @endcond // --------------------------------------------------------------------------- CRSNNPtr GeodeticCRS::_shallowClone() const { auto crs(GeodeticCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- /** \brief Return the datum::GeodeticReferenceFrame associated with the CRS. * * @return a GeodeticReferenceFrame or null (in which case datumEnsemble() * should return a non-null pointer.) */ const datum::GeodeticReferenceFramePtr &GeodeticCRS::datum() PROJ_PURE_DEFN { return d->datum_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return the real datum or a synthesized one if a datumEnsemble. */ const datum::GeodeticReferenceFrameNNPtr GeodeticCRS::datumNonNull(const io::DatabaseContextPtr &dbContext) const { return NN_NO_CHECK( d->datum_ ? d->datum_ : util::nn_dynamic_pointer_cast( SingleCRS::getPrivate()->datumEnsemble->asDatum(dbContext))); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static datum::GeodeticReferenceFrame *oneDatum(const GeodeticCRS *crs) { const auto &l_datumEnsemble = crs->datumEnsemble(); assert(l_datumEnsemble); const auto &l_datums = l_datumEnsemble->datums(); return static_cast(l_datums[0].get()); } //! @endcond // --------------------------------------------------------------------------- /** \brief Return the PrimeMeridian associated with the GeodeticReferenceFrame * or with one of the GeodeticReferenceFrame of the datumEnsemble(). * * @return the PrimeMeridian. */ const datum::PrimeMeridianNNPtr &GeodeticCRS::primeMeridian() PROJ_PURE_DEFN { if (d->datum_) { return d->datum_->primeMeridian(); } return oneDatum(this)->primeMeridian(); } // --------------------------------------------------------------------------- /** \brief Return the ellipsoid associated with the GeodeticReferenceFrame * or with one of the GeodeticReferenceFrame of the datumEnsemble(). * * @return the PrimeMeridian. */ const datum::EllipsoidNNPtr &GeodeticCRS::ellipsoid() PROJ_PURE_DEFN { if (d->datum_) { return d->datum_->ellipsoid(); } return oneDatum(this)->ellipsoid(); } // --------------------------------------------------------------------------- /** \brief Return the velocity model associated with the CRS. * * @return a velocity model. might be null. */ const std::vector & GeodeticCRS::velocityModel() PROJ_PURE_DEFN { return d->velocityModel; } // --------------------------------------------------------------------------- /** \brief Return whether the CRS is a Cartesian geocentric one. * * A geocentric CRS is a geodetic CRS that has a Cartesian coordinate system * with three axis, whose direction is respectively * cs::AxisDirection::GEOCENTRIC_X, * cs::AxisDirection::GEOCENTRIC_Y and cs::AxisDirection::GEOCENTRIC_Z. * * @return true if the CRS is a geocentric CRS. */ bool GeodeticCRS::isGeocentric() PROJ_PURE_DEFN { const auto &cs = coordinateSystem(); const auto &axisList = cs->axisList(); return axisList.size() == 3 && dynamic_cast(cs.get()) != nullptr && &axisList[0]->direction() == &cs::AxisDirection::GEOCENTRIC_X && &axisList[1]->direction() == &cs::AxisDirection::GEOCENTRIC_Y && &axisList[2]->direction() == &cs::AxisDirection::GEOCENTRIC_Z; } // --------------------------------------------------------------------------- /** \brief Return whether the CRS is a Spherical planetocentric one. * * A Spherical planetocentric CRS is a geodetic CRS that has a spherical * (angular) coordinate system with 2 axis, which represent geocentric latitude/ * longitude or longitude/geocentric latitude. * * Such CRS are typically used in use case that apply to non-Earth bodies. * * @return true if the CRS is a Spherical planetocentric CRS. * * @since 8.2 */ bool GeodeticCRS::isSphericalPlanetocentric() PROJ_PURE_DEFN { const auto &cs = coordinateSystem(); const auto &axisList = cs->axisList(); return axisList.size() == 2 && dynamic_cast(cs.get()) != nullptr && ((ci_equal(axisList[0]->nameStr(), "planetocentric latitude") && ci_equal(axisList[1]->nameStr(), "planetocentric longitude")) || (ci_equal(axisList[0]->nameStr(), "planetocentric longitude") && ci_equal(axisList[1]->nameStr(), "planetocentric latitude"))); } // --------------------------------------------------------------------------- /** \brief Instantiate a GeodeticCRS from a datum::GeodeticReferenceFrame and a * cs::SphericalCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datum The datum of the CRS. * @param cs a SphericalCS. * @return new GeodeticCRS. */ GeodeticCRSNNPtr GeodeticCRS::create(const util::PropertyMap &properties, const datum::GeodeticReferenceFrameNNPtr &datum, const cs::SphericalCSNNPtr &cs) { return create(properties, datum.as_nullable(), nullptr, cs); } // --------------------------------------------------------------------------- /** \brief Instantiate a GeodeticCRS from a datum::GeodeticReferenceFrame or * datum::DatumEnsemble and a cs::SphericalCS. * * One and only one of datum or datumEnsemble should be set to a non-null value. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datum The datum of the CRS, or nullptr * @param datumEnsemble The datum ensemble of the CRS, or nullptr. * @param cs a SphericalCS. * @return new GeodeticCRS. */ GeodeticCRSNNPtr GeodeticCRS::create(const util::PropertyMap &properties, const datum::GeodeticReferenceFramePtr &datum, const datum::DatumEnsemblePtr &datumEnsemble, const cs::SphericalCSNNPtr &cs) { auto crs( GeodeticCRS::nn_make_shared(datum, datumEnsemble, cs)); crs->assignSelf(crs); crs->setProperties(properties); return crs; } // --------------------------------------------------------------------------- /** \brief Instantiate a GeodeticCRS from a datum::GeodeticReferenceFrame and a * cs::CartesianCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datum The datum of the CRS. * @param cs a CartesianCS. * @return new GeodeticCRS. */ GeodeticCRSNNPtr GeodeticCRS::create(const util::PropertyMap &properties, const datum::GeodeticReferenceFrameNNPtr &datum, const cs::CartesianCSNNPtr &cs) { return create(properties, datum.as_nullable(), nullptr, cs); } // --------------------------------------------------------------------------- /** \brief Instantiate a GeodeticCRS from a datum::GeodeticReferenceFrame or * datum::DatumEnsemble and a cs::CartesianCS. * * One and only one of datum or datumEnsemble should be set to a non-null value. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datum The datum of the CRS, or nullptr * @param datumEnsemble The datum ensemble of the CRS, or nullptr. * @param cs a CartesianCS * @return new GeodeticCRS. */ GeodeticCRSNNPtr GeodeticCRS::create(const util::PropertyMap &properties, const datum::GeodeticReferenceFramePtr &datum, const datum::DatumEnsemblePtr &datumEnsemble, const cs::CartesianCSNNPtr &cs) { auto crs( GeodeticCRS::nn_make_shared(datum, datumEnsemble, cs)); crs->assignSelf(crs); crs->setProperties(properties); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // Try to format a Geographic/ProjectedCRS 3D CRS as a // GEOGCS[]/PROJCS[],VERTCS[...,DATUM[],...] if we find corresponding objects static bool exportAsESRIWktCompoundCRSWithEllipsoidalHeight( const CRS *self, const GeodeticCRS *geodCRS, io::WKTFormatter *formatter) { const auto &dbContext = formatter->databaseContext(); if (!dbContext) { return false; } const auto l_datum = geodCRS->datumNonNull(formatter->databaseContext()); auto l_esri_name = dbContext->getAliasFromOfficialName( l_datum->nameStr(), "geodetic_datum", "ESRI"); if (l_esri_name.empty()) { l_esri_name = l_datum->nameStr(); } auto authFactory = io::AuthorityFactory::create(NN_NO_CHECK(dbContext), std::string()); auto list = authFactory->createObjectsFromName( l_esri_name, {io::AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME}, false /* approximate=false*/); if (list.empty()) { return false; } auto gdatum = util::nn_dynamic_pointer_cast(list.front()); if (gdatum == nullptr || gdatum->identifiers().empty()) { return false; } const auto &gdatum_ids = gdatum->identifiers(); auto vertCRSList = authFactory->createVerticalCRSFromDatum( "ESRI", "from_geogdatum_" + *gdatum_ids[0]->codeSpace() + '_' + gdatum_ids[0]->code()); self->demoteTo2D(std::string(), dbContext)->_exportToWKT(formatter); if (vertCRSList.size() == 1) { vertCRSList.front()->_exportToWKT(formatter); } else { // This will not be recognized properly by ESRI software // See https://github.com/OSGeo/PROJ/issues/2757 const auto &axisList = geodCRS->coordinateSystem()->axisList(); assert(axisList.size() == 3U); formatter->startNode(io::WKTConstants::VERTCS, false); auto vertcs_name = std::move(l_esri_name); if (starts_with(vertcs_name.c_str(), "GCS_")) vertcs_name = vertcs_name.substr(4); formatter->addQuotedString(vertcs_name); gdatum->_exportToWKT(formatter); // Seems to be a constant value... formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("Vertical_Shift"); formatter->add(0.0); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("Direction"); formatter->add( axisList[2]->direction() == cs::AxisDirection::UP ? 1.0 : -1.0); formatter->endNode(); axisList[2]->unit()._exportToWKT(formatter); formatter->endNode(); } return true; } // --------------------------------------------------------------------------- // Try to format a Geographic/ProjectedCRS 3D CRS as a // GEOGCS[]/PROJCS[],VERTCS["Ellipsoid (metre)",DATUM["Ellipsoid",2002],...] static void exportAsWKT1CompoundCRSWithEllipsoidalHeight( const CRSNNPtr &base2DCRS, const cs::CoordinateSystemAxisNNPtr &verticalAxis, io::WKTFormatter *formatter) { std::string verticalCRSName = "Ellipsoid ("; verticalCRSName += verticalAxis->unit().name(); verticalCRSName += ')'; auto vertDatum = datum::VerticalReferenceFrame::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, "Ellipsoid") .set("VERT_DATUM_TYPE", "2002")); auto vertCRS = VerticalCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, verticalCRSName), vertDatum.as_nullable(), nullptr, cs::VerticalCS::create(util::PropertyMap(), verticalAxis)); formatter->startNode(io::WKTConstants::COMPD_CS, false); formatter->addQuotedString(base2DCRS->nameStr() + " + " + verticalCRSName); base2DCRS->_exportToWKT(formatter); vertCRS->_exportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; const bool isGeographic = dynamic_cast(this) != nullptr; const auto &cs = coordinateSystem(); const auto &axisList = cs->axisList(); const bool isGeographic3D = isGeographic && axisList.size() == 3; const auto oldAxisOutputRule = formatter->outputAxis(); std::string l_name = nameStr(); const auto &dbContext = formatter->databaseContext(); const bool isESRIExport = !isWKT2 && formatter->useESRIDialect(); const auto &l_identifiers = identifiers(); if (isESRIExport && axisList.size() == 3) { if (!isGeographic) { io::FormattingException::Throw( "Geocentric CRS not supported in WKT1_ESRI"); } if (!formatter->isAllowedLINUNITNode()) { // Try to format the Geographic 3D CRS as a // GEOGCS[],VERTCS[...,DATUM[]] if we find corresponding objects if (dbContext) { if (exportAsESRIWktCompoundCRSWithEllipsoidalHeight( this, this, formatter)) { return; } } io::FormattingException::Throw( "Cannot export this Geographic 3D CRS in WKT1_ESRI"); } } if (!isWKT2 && !isESRIExport && formatter->isStrict() && isGeographic && axisList.size() == 3 && oldAxisOutputRule != io::WKTFormatter::OutputAxisRule::NO) { auto geogCRS2D = demoteTo2D(std::string(), dbContext); if (dbContext) { const auto res = geogCRS2D->identify(io::AuthorityFactory::create( NN_NO_CHECK(dbContext), metadata::Identifier::EPSG)); if (res.size() == 1) { const auto &front = res.front(); if (front.second == 100) { geogCRS2D = front.first; } } } if (CRS::getPrivate()->allowNonConformantWKT1Export_) { formatter->startNode(io::WKTConstants::COMPD_CS, false); formatter->addQuotedString(l_name + " + " + l_name); geogCRS2D->_exportToWKT(formatter); const std::vector oldTOWGSParameters( formatter->getTOWGS84Parameters()); formatter->setTOWGS84Parameters({}); geogCRS2D->_exportToWKT(formatter); formatter->setTOWGS84Parameters(oldTOWGSParameters); formatter->endNode(); return; } auto &originalCompoundCRS = CRS::getPrivate()->originalCompoundCRS_; if (originalCompoundCRS) { originalCompoundCRS->_exportToWKT(formatter); return; } if (formatter->isAllowedEllipsoidalHeightAsVerticalCRS()) { exportAsWKT1CompoundCRSWithEllipsoidalHeight(geogCRS2D, axisList[2], formatter); return; } io::FormattingException::Throw( "WKT1 does not support Geographic 3D CRS."); } formatter->startNode(isWKT2 ? ((formatter->use2019Keywords() && isGeographic) ? io::WKTConstants::GEOGCRS : io::WKTConstants::GEODCRS) : isGeocentric() ? io::WKTConstants::GEOCCS : io::WKTConstants::GEOGCS, !l_identifiers.empty()); if (isESRIExport) { std::string l_esri_name; if (l_name == "WGS 84") { l_esri_name = isGeographic3D ? "WGS_1984_3D" : "GCS_WGS_1984"; } else { if (dbContext) { const auto tableName = isGeographic3D ? "geographic_3D_crs" : "geodetic_crs"; if (!l_identifiers.empty()) { // Try to find the ESRI alias from the CRS identified by its // id const auto aliases = dbContext->getAliases(*(l_identifiers[0]->codeSpace()), l_identifiers[0]->code(), std::string(), // officialName, tableName, "ESRI"); if (aliases.size() == 1) l_esri_name = aliases.front(); } if (l_esri_name.empty()) { // Then find the ESRI alias from the CRS name l_esri_name = dbContext->getAliasFromOfficialName( l_name, tableName, "ESRI"); } if (l_esri_name.empty()) { // Then try to build an ESRI CRS from the CRS name, and if // there's one, the ESRI name is the CRS name auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), "ESRI"); const bool found = authFactory ->createObjectsFromName( l_name, {io::AuthorityFactory:: ObjectType::GEODETIC_CRS}, false // approximateMatch ) .size() == 1; if (found) l_esri_name = l_name; } } if (l_esri_name.empty()) { l_esri_name = io::WKTFormatter::morphNameToESRI(l_name); if (!starts_with(l_esri_name, "GCS_")) { l_esri_name = "GCS_" + l_esri_name; } } } const std::string &l_esri_name_ref(l_esri_name); l_name = l_esri_name_ref; } else if (!isWKT2 && isDeprecated()) { l_name += " (deprecated)"; } formatter->addQuotedString(l_name); const auto &unit = axisList[0]->unit(); formatter->pushAxisAngularUnit(common::UnitOfMeasure::create(unit)); exportDatumOrDatumEnsembleToWkt(formatter); primeMeridian()->_exportToWKT(formatter); formatter->popAxisAngularUnit(); if (!isWKT2) { unit._exportToWKT(formatter); } if (isGeographic3D && isESRIExport) { axisList[2]->unit()._exportToWKT(formatter, io::WKTConstants::LINUNIT); } if (oldAxisOutputRule == io::WKTFormatter::OutputAxisRule::WKT1_GDAL_EPSG_STYLE && isGeocentric()) { formatter->setOutputAxis(io::WKTFormatter::OutputAxisRule::YES); } cs->_exportToWKT(formatter); formatter->setOutputAxis(oldAxisOutputRule); ObjectUsage::baseExportToWKT(formatter); if (!isWKT2 && !isESRIExport) { const auto &extensionProj4 = CRS::getPrivate()->extensionProj4_; if (!extensionProj4.empty()) { formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4"); formatter->addQuotedString(extensionProj4); formatter->endNode(); } } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticCRS::addGeocentricUnitConversionIntoPROJString( io::PROJStringFormatter *formatter) const { const auto &axisList = coordinateSystem()->axisList(); const auto &unit = axisList[0]->unit(); if (!unit._isEquivalentTo(common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT)) { if (formatter->getCRSExport()) { io::FormattingException::Throw( "GeodeticCRS::exportToPROJString() only " "supports metre unit"); } formatter->addStep("unitconvert"); formatter->addParam("xy_in", "m"); formatter->addParam("z_in", "m"); { auto projUnit = unit.exportToPROJString(); if (!projUnit.empty()) { formatter->addParam("xy_out", projUnit); formatter->addParam("z_out", projUnit); return; } } const auto &toSI = unit.conversionToSI(); formatter->addParam("xy_out", toSI); formatter->addParam("z_out", toSI); } else if (formatter->getCRSExport()) { formatter->addParam("units", "m"); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticCRS::addAngularUnitConvertAndAxisSwap( io::PROJStringFormatter *formatter) const { const auto &axisList = coordinateSystem()->axisList(); formatter->addStep("unitconvert"); formatter->addParam("xy_in", "rad"); if (axisList.size() == 3 && !formatter->omitZUnitConversion()) { formatter->addParam("z_in", "m"); } { const auto &unitHoriz = axisList[0]->unit(); const auto projUnit = unitHoriz.exportToPROJString(); if (projUnit.empty()) { formatter->addParam("xy_out", unitHoriz.conversionToSI()); } else { formatter->addParam("xy_out", projUnit); } } if (axisList.size() == 3 && !formatter->omitZUnitConversion()) { const auto &unitZ = axisList[2]->unit(); auto projVUnit = unitZ.exportToPROJString(); if (projVUnit.empty()) { formatter->addParam("z_out", unitZ.conversionToSI()); } else { formatter->addParam("z_out", projVUnit); } } const char *order[2] = {nullptr, nullptr}; const char *one = "1"; const char *two = "2"; for (int i = 0; i < 2; i++) { const auto &dir = axisList[i]->direction(); if (&dir == &cs::AxisDirection::WEST) { order[i] = "-1"; } else if (&dir == &cs::AxisDirection::EAST) { order[i] = one; } else if (&dir == &cs::AxisDirection::SOUTH) { order[i] = "-2"; } else if (&dir == &cs::AxisDirection::NORTH) { order[i] = two; } } if (order[0] && order[1] && (order[0] != one || order[1] != two)) { formatter->addStep("axisswap"); char orderStr[10]; snprintf(orderStr, sizeof(orderStr), "%.2s,%.2s", order[0], order[1]); formatter->addParam("order", orderStr); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticCRS::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { const auto &extensionProj4 = CRS::getPrivate()->extensionProj4_; if (!extensionProj4.empty()) { formatter->ingestPROJString( replaceAll(extensionProj4, " +type=crs", "")); formatter->addNoDefs(false); return; } if (isGeocentric()) { if (!formatter->getCRSExport()) { formatter->addStep("cart"); } else { formatter->addStep("geocent"); } addDatumInfoToPROJString(formatter); addGeocentricUnitConversionIntoPROJString(formatter); } else if (isSphericalPlanetocentric()) { if (!formatter->getCRSExport()) { if (!formatter->omitProjLongLatIfPossible() || primeMeridian()->longitude().getSIValue() != 0.0 || !ellipsoid()->isSphere() || !formatter->getTOWGS84Parameters().empty() || !formatter->getHDatumExtension().empty()) { formatter->addStep("geoc"); addDatumInfoToPROJString(formatter); } addAngularUnitConvertAndAxisSwap(formatter); } else { io::FormattingException::Throw( "GeodeticCRS::exportToPROJString() not supported on spherical " "planetocentric coordinate systems"); // The below code now works as input to PROJ, but I'm not sure we // want to propagate this, given that we got cs2cs doing conversion // in the wrong direction in past versions. /*formatter->addStep("longlat"); formatter->addParam("geoc"); addDatumInfoToPROJString(formatter);*/ } } else { io::FormattingException::Throw( "GeodeticCRS::exportToPROJString() only " "supports geocentric or spherical planetocentric " "coordinate systems"); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticCRS::addDatumInfoToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { const auto &TOWGS84Params = formatter->getTOWGS84Parameters(); bool datumWritten = false; const auto &nadgrids = formatter->getHDatumExtension(); const auto l_datum = datumNonNull(formatter->databaseContext()); if (formatter->getCRSExport() && TOWGS84Params.empty() && nadgrids.empty() && l_datum->nameStr() != "unknown") { if (l_datum->_isEquivalentTo( datum::GeodeticReferenceFrame::EPSG_6326.get(), util::IComparable::Criterion::EQUIVALENT)) { datumWritten = true; formatter->addParam("datum", "WGS84"); } else if (l_datum->_isEquivalentTo( datum::GeodeticReferenceFrame::EPSG_6267.get(), util::IComparable::Criterion::EQUIVALENT)) { datumWritten = true; formatter->addParam("datum", "NAD27"); } else if (l_datum->_isEquivalentTo( datum::GeodeticReferenceFrame::EPSG_6269.get(), util::IComparable::Criterion::EQUIVALENT)) { datumWritten = true; if (formatter->getLegacyCRSToCRSContext()) { // We do not want datum=NAD83 to cause a useless towgs84=0,0,0 formatter->addParam("ellps", "GRS80"); } else { formatter->addParam("datum", "NAD83"); } } } if (!datumWritten) { ellipsoid()->_exportToPROJString(formatter); primeMeridian()->_exportToPROJString(formatter); } if (TOWGS84Params.size() == 7) { formatter->addParam("towgs84", TOWGS84Params); } if (!nadgrids.empty()) { formatter->addParam("nadgrids", nadgrids); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticCRS::_exportToJSONInternal( io::JSONFormatter *formatter, const char *objectName) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext(objectName, !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } const auto &l_datum(datum()); if (l_datum) { writer->AddObjKey("datum"); l_datum->_exportToJSON(formatter); } else { writer->AddObjKey("datum_ensemble"); formatter->setOmitTypeInImmediateChild(); datumEnsemble()->_exportToJSON(formatter); } writer->AddObjKey("coordinate_system"); formatter->setOmitTypeInImmediateChild(); coordinateSystem()->_exportToJSON(formatter); if (const auto dynamicGRF = dynamic_cast( l_datum.get())) { const auto &deformationModel = dynamicGRF->deformationModelName(); if (deformationModel.has_value()) { writer->AddObjKey("deformation_models"); auto arrayContext(writer->MakeArrayContext(false)); auto objectContext2(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("name"); writer->Add(*deformationModel); } } ObjectUsage::baseExportToJSON(formatter); } void GeodeticCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { _exportToJSONInternal(formatter, "GeodeticCRS"); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static util::IComparable::Criterion getStandardCriterion(util::IComparable::Criterion criterion) { return criterion == util::IComparable::Criterion:: EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS ? util::IComparable::Criterion::EQUIVALENT : criterion; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool GeodeticCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { if (other == nullptr || !util::isOfExactType(*other)) { return false; } return _isEquivalentToNoTypeCheck(other, criterion, dbContext); } bool GeodeticCRS::_isEquivalentToNoTypeCheck( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { const auto standardCriterion = getStandardCriterion(criterion); // TODO test velocityModel return SingleCRS::baseIsEquivalentTo(other, standardCriterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static util::PropertyMap createMapNameEPSGCode(const char *name, int code) { return util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, code); } //! @endcond // --------------------------------------------------------------------------- GeodeticCRSNNPtr GeodeticCRS::createEPSG_4978() { return create( createMapNameEPSGCode("WGS 84", 4978), datum::GeodeticReferenceFrame::EPSG_6326, cs::CartesianCS::createGeocentric(common::UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool hasCodeCompatibleOfAuthorityFactory( const common::IdentifiedObject *obj, const io::AuthorityFactoryPtr &authorityFactory) { const auto &ids = obj->identifiers(); if (!ids.empty() && authorityFactory->getAuthority().empty()) { return true; } for (const auto &id : ids) { if (*(id->codeSpace()) == authorityFactory->getAuthority()) { return true; } } return false; } static bool hasCodeCompatibleOfAuthorityFactory( const metadata::IdentifierNNPtr &id, const io::AuthorityFactoryPtr &authorityFactory) { if (authorityFactory->getAuthority().empty()) { return true; } return *(id->codeSpace()) == authorityFactory->getAuthority(); } //! @endcond // --------------------------------------------------------------------------- /** \brief Identify the CRS with reference CRSs. * * The candidate CRSs are either hard-coded, or looked in the database when * authorityFactory is not null. * * Note that the implementation uses a set of heuristics to have a good * compromise of successful identifications over execution time. It might miss * legitimate matches in some circumstances. * * The method returns a list of matching reference CRS, and the percentage * (0-100) of confidence in the match: *
    *
  • 100% means that the name of the reference entry * perfectly matches the CRS name, and both are equivalent. In which case a * single result is returned. * Note: in the case of a GeographicCRS whose axis * order is implicit in the input definition (for example ESRI WKT), then axis * order is ignored for the purpose of identification. That is the CRS built * from * GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]], * PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] * will be identified to EPSG:4326, but will not pass a * isEquivalentTo(EPSG_4326, util::IComparable::Criterion::EQUIVALENT) test, * but rather isEquivalentTo(EPSG_4326, * util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS) *
  • *
  • 90% means that CRS are equivalent, but the names are not exactly the * same. *
  • 70% means that CRS are equivalent (equivalent datum and coordinate * system), * but the names are not equivalent.
  • *
  • 60% means that ellipsoid, prime meridian and coordinate systems are * equivalent, but the CRS and datum names do not match.
  • *
  • 25% means that the CRS are not equivalent, but there is some similarity * in * the names.
  • *
* * @param authorityFactory Authority factory (or null, but degraded * functionality) * @return a list of matching reference CRS, and the percentage (0-100) of * confidence in the match. */ std::list> GeodeticCRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; const auto &thisName(nameStr()); io::DatabaseContextPtr dbContext = authorityFactory ? authorityFactory->databaseContext().as_nullable() : nullptr; const bool l_implicitCS = hasImplicitCS(); const auto crsCriterion = l_implicitCS ? util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS : util::IComparable::Criterion::EQUIVALENT; if (authorityFactory == nullptr || authorityFactory->getAuthority().empty() || authorityFactory->getAuthority() == metadata::Identifier::EPSG) { const GeographicCRSNNPtr candidatesCRS[] = {GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4267, GeographicCRS::EPSG_4269}; for (const auto &crs : candidatesCRS) { const bool nameEquivalent = metadata::Identifier::isEquivalentName( thisName.c_str(), crs->nameStr().c_str()); const bool nameEqual = thisName == crs->nameStr(); const bool isEq = _isEquivalentTo(crs.get(), crsCriterion, dbContext); if (nameEquivalent && isEq && (!authorityFactory || nameEqual)) { res.emplace_back(util::nn_static_pointer_cast(crs), nameEqual ? 100 : 90); return res; } else if (nameEqual && !isEq && !authorityFactory) { res.emplace_back(util::nn_static_pointer_cast(crs), 25); return res; } else if (isEq && !authorityFactory) { res.emplace_back(util::nn_static_pointer_cast(crs), 70); return res; } } } std::string geodetic_crs_type; if (isGeocentric()) { geodetic_crs_type = "geocentric"; } else { auto geogCRS = dynamic_cast(this); if (geogCRS) { if (coordinateSystem()->axisList().size() == 2) { geodetic_crs_type = "geographic 2D"; } else { geodetic_crs_type = "geographic 3D"; } } } if (authorityFactory) { const auto thisDatum(datumNonNull(dbContext)); auto searchByDatumCode = [this, &authorityFactory, &res, &geodetic_crs_type, crsCriterion, &dbContext](const common::IdentifiedObjectNNPtr &l_datum) { bool resModified = false; for (const auto &id : l_datum->identifiers()) { try { auto tempRes = authorityFactory->createGeodeticCRSFromDatum( *id->codeSpace(), id->code(), geodetic_crs_type); for (const auto &crs : tempRes) { if (_isEquivalentTo(crs.get(), crsCriterion, dbContext)) { res.emplace_back(crs, 70); resModified = true; } } } catch (const std::exception &) { } } return resModified; }; auto searchByEllipsoid = [this, &authorityFactory, &res, &thisDatum, &geodetic_crs_type, l_implicitCS, &dbContext]() { const auto &thisEllipsoid = thisDatum->ellipsoid(); const std::list ellipsoids( thisEllipsoid->identifiers().empty() ? authorityFactory->createEllipsoidFromExisting( thisEllipsoid) : std::list{thisEllipsoid}); for (const auto &ellps : ellipsoids) { for (const auto &id : ellps->identifiers()) { try { auto tempRes = authorityFactory->createGeodeticCRSFromEllipsoid( *id->codeSpace(), id->code(), geodetic_crs_type); for (const auto &crs : tempRes) { const auto crsDatum(crs->datumNonNull(dbContext)); if (crsDatum->ellipsoid()->_isEquivalentTo( ellps.get(), util::IComparable::Criterion::EQUIVALENT, dbContext) && crsDatum->primeMeridian()->_isEquivalentTo( thisDatum->primeMeridian().get(), util::IComparable::Criterion::EQUIVALENT, dbContext) && (l_implicitCS || coordinateSystem()->_isEquivalentTo( crs->coordinateSystem().get(), util::IComparable::Criterion::EQUIVALENT, dbContext))) { res.emplace_back(crs, 60); } } } catch (const std::exception &) { } } } }; const auto searchByDatumOrEllipsoid = [&authorityFactory, &thisDatum, searchByDatumCode, searchByEllipsoid]() { if (!thisDatum->identifiers().empty()) { searchByDatumCode(thisDatum); } else { auto candidateDatums = authorityFactory->createObjectsFromName( thisDatum->nameStr(), {io::AuthorityFactory::ObjectType:: GEODETIC_REFERENCE_FRAME}, false); bool resModified = false; for (const auto &candidateDatum : candidateDatums) { if (searchByDatumCode(candidateDatum)) resModified = true; } if (!resModified) { searchByEllipsoid(); } } }; const bool insignificantName = thisName.empty() || ci_equal(thisName, "unknown") || ci_equal(thisName, "unnamed"); if (insignificantName) { searchByDatumOrEllipsoid(); } else if (hasCodeCompatibleOfAuthorityFactory(this, authorityFactory)) { // If the CRS has already an id, check in the database for the // official object, and verify that they are equivalent. for (const auto &id : identifiers()) { if (hasCodeCompatibleOfAuthorityFactory(id, authorityFactory)) { try { auto crs = io::AuthorityFactory::create( authorityFactory->databaseContext(), *id->codeSpace()) ->createGeodeticCRS(id->code()); bool match = _isEquivalentTo(crs.get(), crsCriterion, dbContext); res.emplace_back(crs, match ? 100 : 25); return res; } catch (const std::exception &) { } } } } else { bool gotAbove25Pct = false; for (int ipass = 0; ipass < 2; ipass++) { const bool approximateMatch = ipass == 1; auto objects = authorityFactory->createObjectsFromName( thisName, {io::AuthorityFactory::ObjectType::GEODETIC_CRS}, approximateMatch); for (const auto &obj : objects) { auto crs = util::nn_dynamic_pointer_cast(obj); assert(crs); auto crsNN = NN_NO_CHECK(crs); if (_isEquivalentTo(crs.get(), crsCriterion, dbContext)) { if (crs->nameStr() == thisName) { res.clear(); res.emplace_back(crsNN, 100); return res; } const bool eqName = metadata::Identifier::isEquivalentName( thisName.c_str(), crs->nameStr().c_str()); res.emplace_back(crsNN, eqName ? 90 : 70); gotAbove25Pct = true; } else { res.emplace_back(crsNN, 25); } } if (!res.empty()) { break; } } if (!gotAbove25Pct) { searchByDatumOrEllipsoid(); } } const auto &thisCS(coordinateSystem()); // Sort results res.sort([&thisName, &thisDatum, &thisCS, &dbContext](const Pair &a, const Pair &b) { // First consider confidence if (a.second > b.second) { return true; } if (a.second < b.second) { return false; } // Then consider exact name matching const auto &aName(a.first->nameStr()); const auto &bName(b.first->nameStr()); if (aName == thisName && bName != thisName) { return true; } if (bName == thisName && aName != thisName) { return false; } // Then datum matching const auto aDatum(a.first->datumNonNull(dbContext)); const auto bDatum(b.first->datumNonNull(dbContext)); const auto thisEquivADatum(thisDatum->_isEquivalentTo( aDatum.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)); const auto thisEquivBDatum(thisDatum->_isEquivalentTo( bDatum.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)); if (thisEquivADatum && !thisEquivBDatum) { return true; } if (!thisEquivADatum && thisEquivBDatum) { return false; } // Then coordinate system matching const auto &aCS(a.first->coordinateSystem()); const auto &bCS(b.first->coordinateSystem()); const auto thisEquivACs(thisCS->_isEquivalentTo( aCS.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)); const auto thisEquivBCs(thisCS->_isEquivalentTo( bCS.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)); if (thisEquivACs && !thisEquivBCs) { return true; } if (!thisEquivACs && thisEquivBCs) { return false; } // Then dimension of the coordinate system matching const auto thisCSAxisListSize = thisCS->axisList().size(); const auto aCSAxistListSize = aCS->axisList().size(); const auto bCSAxistListSize = bCS->axisList().size(); if (thisCSAxisListSize == aCSAxistListSize && thisCSAxisListSize != bCSAxistListSize) { return true; } if (thisCSAxisListSize != aCSAxistListSize && thisCSAxisListSize == bCSAxistListSize) { return false; } // Favor the CRS whole ellipsoid names matches the ellipsoid // name (WGS84...) const bool aEllpsNameEqCRSName = metadata::Identifier::isEquivalentName( aDatum->ellipsoid()->nameStr().c_str(), a.first->nameStr().c_str()); const bool bEllpsNameEqCRSName = metadata::Identifier::isEquivalentName( bDatum->ellipsoid()->nameStr().c_str(), b.first->nameStr().c_str()); if (aEllpsNameEqCRSName && !bEllpsNameEqCRSName) { return true; } if (bEllpsNameEqCRSName && !aEllpsNameEqCRSName) { return false; } // Arbitrary final sorting criterion return aName < bName; }); // If there are results with 90% confidence, only keep those if (res.size() >= 2 && res.front().second == 90) { std::list newRes; for (const auto &pair : res) { if (pair.second == 90) { newRes.push_back(pair); } else { break; } } return newRes; } } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> GeodeticCRS::_identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; auto resTemp = identify(authorityFactory); for (const auto &pair : resTemp) { res.emplace_back(pair.first, pair.second); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GeographicCRS::Private { cs::EllipsoidalCSNNPtr coordinateSystem_; explicit Private(const cs::EllipsoidalCSNNPtr &csIn) : coordinateSystem_(csIn) {} }; //! @endcond // --------------------------------------------------------------------------- GeographicCRS::GeographicCRS(const datum::GeodeticReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::EllipsoidalCSNNPtr &csIn) : SingleCRS(datumIn, datumEnsembleIn, csIn), GeodeticCRS(datumIn, checkEnsembleForGeodeticCRS(datumIn, datumEnsembleIn), csIn), d(std::make_unique(csIn)) {} // --------------------------------------------------------------------------- GeographicCRS::GeographicCRS(const GeographicCRS &other) : SingleCRS(other), GeodeticCRS(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeographicCRS::~GeographicCRS() = default; //! @endcond // --------------------------------------------------------------------------- CRSNNPtr GeographicCRS::_shallowClone() const { auto crs(GeographicCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- /** \brief Return the cs::EllipsoidalCS associated with the CRS. * * @return a EllipsoidalCS. */ const cs::EllipsoidalCSNNPtr &GeographicCRS::coordinateSystem() PROJ_PURE_DEFN { return d->coordinateSystem_; } // --------------------------------------------------------------------------- /** \brief Instantiate a GeographicCRS from a datum::GeodeticReferenceFrameNNPtr * and a * cs::EllipsoidalCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datum The datum of the CRS. * @param cs a EllipsoidalCS. * @return new GeographicCRS. */ GeographicCRSNNPtr GeographicCRS::create(const util::PropertyMap &properties, const datum::GeodeticReferenceFrameNNPtr &datum, const cs::EllipsoidalCSNNPtr &cs) { return create(properties, datum.as_nullable(), nullptr, cs); } // --------------------------------------------------------------------------- /** \brief Instantiate a GeographicCRS from a datum::GeodeticReferenceFramePtr * or * datum::DatumEnsemble and a * cs::EllipsoidalCS. * * One and only one of datum or datumEnsemble should be set to a non-null value. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datum The datum of the CRS, or nullptr * @param datumEnsemble The datum ensemble of the CRS, or nullptr. * @param cs a EllipsoidalCS. * @return new GeographicCRS. */ GeographicCRSNNPtr GeographicCRS::create(const util::PropertyMap &properties, const datum::GeodeticReferenceFramePtr &datum, const datum::DatumEnsemblePtr &datumEnsemble, const cs::EllipsoidalCSNNPtr &cs) { GeographicCRSNNPtr crs( GeographicCRS::nn_make_shared(datum, datumEnsemble, cs)); crs->assignSelf(crs); crs->setProperties(properties); crs->CRS::getPrivate()->setNonStandardProperties(properties); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return whether the current GeographicCRS is the 2D part of the * other 3D GeographicCRS. */ bool GeographicCRS::is2DPartOf3D(util::nn other, const io::DatabaseContextPtr &dbContext) PROJ_PURE_DEFN { const auto &axis = d->coordinateSystem_->axisList(); const auto &otherAxis = other->d->coordinateSystem_->axisList(); if (!(axis.size() == 2 && otherAxis.size() == 3)) { return false; } const auto &firstAxis = axis[0]; const auto &secondAxis = axis[1]; const auto &otherFirstAxis = otherAxis[0]; const auto &otherSecondAxis = otherAxis[1]; if (!(firstAxis->_isEquivalentTo( otherFirstAxis.get(), util::IComparable::Criterion::EQUIVALENT) && secondAxis->_isEquivalentTo( otherSecondAxis.get(), util::IComparable::Criterion::EQUIVALENT))) { return false; } try { const auto thisDatum = datumNonNull(dbContext); const auto otherDatum = other->datumNonNull(dbContext); return thisDatum->_isEquivalentTo( otherDatum.get(), util::IComparable::Criterion::EQUIVALENT); } catch (const util::InvalidValueTypeException &) { // should not happen really, but potentially thrown by // Identifier::Private::setProperties() assert(false); return false; } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool GeographicCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { if (other == nullptr || !util::isOfExactType(*other)) { return false; } const auto standardCriterion = getStandardCriterion(criterion); if (GeodeticCRS::_isEquivalentToNoTypeCheck(other, standardCriterion, dbContext)) { // Make sure GeoPackage "Undefined geographic SRS" != EPSG:4326 const auto otherGeogCRS = dynamic_cast(other); if ((nameStr() == "Undefined geographic SRS" || otherGeogCRS->nameStr() == "Undefined geographic SRS") && otherGeogCRS->nameStr() != nameStr()) { return false; } return true; } if (criterion != util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS) { return false; } const auto axisOrder = coordinateSystem()->axisOrder(); if (axisOrder == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH || axisOrder == cs::EllipsoidalCS::AxisOrder::LAT_NORTH_LONG_EAST) { const auto &unit = coordinateSystem()->axisList()[0]->unit(); return GeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, nameStr()), datum(), datumEnsemble(), axisOrder == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH ? cs::EllipsoidalCS::createLatitudeLongitude(unit) : cs::EllipsoidalCS::createLongitudeLatitude(unit)) ->GeodeticCRS::_isEquivalentToNoTypeCheck(other, standardCriterion, dbContext); } if (axisOrder == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH_HEIGHT_UP || axisOrder == cs::EllipsoidalCS::AxisOrder::LAT_NORTH_LONG_EAST_HEIGHT_UP) { const auto &angularUnit = coordinateSystem()->axisList()[0]->unit(); const auto &linearUnit = coordinateSystem()->axisList()[2]->unit(); return GeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, nameStr()), datum(), datumEnsemble(), axisOrder == cs::EllipsoidalCS::AxisOrder:: LONG_EAST_LAT_NORTH_HEIGHT_UP ? cs::EllipsoidalCS:: createLatitudeLongitudeEllipsoidalHeight( angularUnit, linearUnit) : cs::EllipsoidalCS:: createLongitudeLatitudeEllipsoidalHeight( angularUnit, linearUnit)) ->GeodeticCRS::_isEquivalentToNoTypeCheck(other, standardCriterion, dbContext); } return false; } //! @endcond // --------------------------------------------------------------------------- GeographicCRSNNPtr GeographicCRS::createEPSG_4267() { return create(createMapNameEPSGCode("NAD27", 4267), datum::GeodeticReferenceFrame::EPSG_6267, cs::EllipsoidalCS::createLatitudeLongitude( common::UnitOfMeasure::DEGREE)); } // --------------------------------------------------------------------------- GeographicCRSNNPtr GeographicCRS::createEPSG_4269() { return create(createMapNameEPSGCode("NAD83", 4269), datum::GeodeticReferenceFrame::EPSG_6269, cs::EllipsoidalCS::createLatitudeLongitude( common::UnitOfMeasure::DEGREE)); } // --------------------------------------------------------------------------- GeographicCRSNNPtr GeographicCRS::createEPSG_4326() { return create(createMapNameEPSGCode("WGS 84", 4326), datum::GeodeticReferenceFrame::EPSG_6326, cs::EllipsoidalCS::createLatitudeLongitude( common::UnitOfMeasure::DEGREE)); } // --------------------------------------------------------------------------- GeographicCRSNNPtr GeographicCRS::createOGC_CRS84() { util::PropertyMap propertiesCRS; propertiesCRS .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::OGC) .set(metadata::Identifier::CODE_KEY, "CRS84") .set(common::IdentifiedObject::NAME_KEY, "WGS 84 (CRS84)"); return create(propertiesCRS, datum::GeodeticReferenceFrame::EPSG_6326, cs::EllipsoidalCS::createLongitudeLatitude( // Long Lat ! common::UnitOfMeasure::DEGREE)); } // --------------------------------------------------------------------------- GeographicCRSNNPtr GeographicCRS::createEPSG_4979() { return create( createMapNameEPSGCode("WGS 84", 4979), datum::GeodeticReferenceFrame::EPSG_6326, cs::EllipsoidalCS::createLatitudeLongitudeEllipsoidalHeight( common::UnitOfMeasure::DEGREE, common::UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- GeographicCRSNNPtr GeographicCRS::createEPSG_4807() { auto ellps(datum::Ellipsoid::createFlattenedSphere( createMapNameEPSGCode("Clarke 1880 (IGN)", 7011), common::Length(6378249.2), common::Scale(293.4660212936269))); auto cs(cs::EllipsoidalCS::createLatitudeLongitude( common::UnitOfMeasure::GRAD)); auto datum(datum::GeodeticReferenceFrame::create( createMapNameEPSGCode("Nouvelle Triangulation Francaise (Paris)", 6807), ellps, util::optional(), datum::PrimeMeridian::PARIS)); return create(createMapNameEPSGCode("NTF (Paris)", 4807), datum, cs); } // --------------------------------------------------------------------------- /** \brief Return a variant of this CRS "demoted" to a 2D one, if not already * the case. * * * @param newName Name of the new CRS. If empty, nameStr() will be used. * @param dbContext Database context to look for potentially already registered * 2D CRS. May be nullptr. * @return a new CRS demoted to 2D, or the current one if already 2D or not * applicable. * @since 6.3 */ GeographicCRSNNPtr GeographicCRS::demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const { const auto &axisList = coordinateSystem()->axisList(); if (axisList.size() == 3) { const auto &l_identifiers = identifiers(); // First check if there is a Geographic 2D CRS in the database // of the same name. // This is the common practice in the EPSG dataset. if (dbContext && l_identifiers.size() == 1) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), *(l_identifiers[0]->codeSpace())); auto res = authFactory->createObjectsFromName( nameStr(), {io::AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS}, false); if (!res.empty()) { const auto &firstRes = res.front(); auto firstResAsGeogCRS = util::nn_dynamic_pointer_cast(firstRes); if (firstResAsGeogCRS && firstResAsGeogCRS->is2DPartOf3D( NN_NO_CHECK(this), dbContext)) { return NN_NO_CHECK(firstResAsGeogCRS); } } } auto cs = cs::EllipsoidalCS::create(util::PropertyMap(), axisList[0], axisList[1]); return GeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, !newName.empty() ? newName : nameStr()), datum(), datumEnsemble(), cs); } return NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeographicCRS::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { const auto &extensionProj4 = CRS::getPrivate()->extensionProj4_; if (!extensionProj4.empty()) { formatter->ingestPROJString( replaceAll(extensionProj4, " +type=crs", "")); formatter->addNoDefs(false); return; } if (!formatter->omitProjLongLatIfPossible() || primeMeridian()->longitude().getSIValue() != 0.0 || !formatter->getTOWGS84Parameters().empty() || !formatter->getHDatumExtension().empty()) { formatter->addStep("longlat"); bool done = false; if (formatter->getLegacyCRSToCRSContext() && formatter->getHDatumExtension().empty() && formatter->getTOWGS84Parameters().empty()) { const auto l_datum = datumNonNull(formatter->databaseContext()); if (l_datum->_isEquivalentTo( datum::GeodeticReferenceFrame::EPSG_6326.get(), util::IComparable::Criterion::EQUIVALENT)) { done = true; formatter->addParam("ellps", "WGS84"); } else if (l_datum->_isEquivalentTo( datum::GeodeticReferenceFrame::EPSG_6269.get(), util::IComparable::Criterion::EQUIVALENT)) { done = true; // We do not want datum=NAD83 to cause a useless towgs84=0,0,0 formatter->addParam("ellps", "GRS80"); } } if (!done) { addDatumInfoToPROJString(formatter); } } if (!formatter->getCRSExport()) { addAngularUnitConvertAndAxisSwap(formatter); } if (hasOver()) { formatter->addParam("over"); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeographicCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { _exportToJSONInternal(formatter, "GeographicCRS"); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct VerticalCRS::Private { std::vector geoidModel{}; std::vector velocityModel{}; }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const datum::DatumEnsemblePtr & checkEnsembleForVerticalCRS(const datum::VerticalReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &ensemble) { const char *msg = "One of Datum or DatumEnsemble should be defined"; if (datumIn) { if (!ensemble) { return ensemble; } msg = "Datum and DatumEnsemble should not be defined"; } else if (ensemble) { const auto &datums = ensemble->datums(); assert(!datums.empty()); auto grfFirst = dynamic_cast(datums[0].get()); if (grfFirst) { return ensemble; } msg = "Ensemble should contain VerticalReferenceFrame"; } throw util::Exception(msg); } //! @endcond // --------------------------------------------------------------------------- VerticalCRS::VerticalCRS(const datum::VerticalReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::VerticalCSNNPtr &csIn) : SingleCRS(datumIn, checkEnsembleForVerticalCRS(datumIn, datumEnsembleIn), csIn), d(std::make_unique()) {} // --------------------------------------------------------------------------- VerticalCRS::VerticalCRS(const VerticalCRS &other) : SingleCRS(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress VerticalCRS::~VerticalCRS() = default; //! @endcond // --------------------------------------------------------------------------- CRSNNPtr VerticalCRS::_shallowClone() const { auto crs(VerticalCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- /** \brief Return the datum::VerticalReferenceFrame associated with the CRS. * * @return a VerticalReferenceFrame. */ const datum::VerticalReferenceFramePtr VerticalCRS::datum() const { return std::static_pointer_cast( SingleCRS::getPrivate()->datum); } // --------------------------------------------------------------------------- /** \brief Return the geoid model associated with the CRS. * * Geoid height model or height correction model linked to a geoid-based * vertical CRS. * * @return a geoid model. might be null */ const std::vector & VerticalCRS::geoidModel() PROJ_PURE_DEFN { return d->geoidModel; } // --------------------------------------------------------------------------- /** \brief Return the velocity model associated with the CRS. * * @return a velocity model. might be null. */ const std::vector & VerticalCRS::velocityModel() PROJ_PURE_DEFN { return d->velocityModel; } // --------------------------------------------------------------------------- /** \brief Return the cs::VerticalCS associated with the CRS. * * @return a VerticalCS. */ const cs::VerticalCSNNPtr VerticalCRS::coordinateSystem() const { return util::nn_static_pointer_cast( SingleCRS::getPrivate()->coordinateSystem); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return the real datum or a synthesized one if a datumEnsemble. */ const datum::VerticalReferenceFrameNNPtr VerticalCRS::datumNonNull(const io::DatabaseContextPtr &dbContext) const { return NN_NO_CHECK( util::nn_dynamic_pointer_cast( SingleCRS::datumNonNull(dbContext))); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void VerticalCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; formatter->startNode(isWKT2 ? io::WKTConstants::VERTCRS : formatter->useESRIDialect() ? io::WKTConstants::VERTCS : io::WKTConstants::VERT_CS, !identifiers().empty()); std::string l_name(nameStr()); const auto &dbContext = formatter->databaseContext(); if (formatter->useESRIDialect()) { bool aliasFound = false; if (dbContext) { auto l_alias = dbContext->getAliasFromOfficialName( l_name, "vertical_crs", "ESRI"); if (!l_alias.empty()) { l_name = std::move(l_alias); aliasFound = true; } } if (!aliasFound && dbContext) { auto authFactory = io::AuthorityFactory::create(NN_NO_CHECK(dbContext), "ESRI"); aliasFound = authFactory ->createObjectsFromName( l_name, {io::AuthorityFactory::ObjectType::VERTICAL_CRS}, false // approximateMatch ) .size() == 1; } if (!aliasFound) { l_name = io::WKTFormatter::morphNameToESRI(l_name); } } formatter->addQuotedString(l_name); const auto l_datum = datum(); if (formatter->useESRIDialect() && l_datum && l_datum->getWKT1DatumType() == "2002") { bool foundMatch = false; if (dbContext) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), std::string()); auto list = authFactory->createObjectsFromName( l_datum->nameStr(), {io::AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME}, false /* approximate=false*/); if (!list.empty()) { auto gdatum = util::nn_dynamic_pointer_cast(list.front()); if (gdatum) { gdatum->_exportToWKT(formatter); foundMatch = true; } } } if (!foundMatch) { // We should export a geodetic datum, but we cannot really do better l_datum->_exportToWKT(formatter); } } else { exportDatumOrDatumEnsembleToWkt(formatter); } const auto &cs = SingleCRS::getPrivate()->coordinateSystem; const auto &axisList = cs->axisList(); if (formatter->useESRIDialect()) { // Seems to be a constant value... formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("Vertical_Shift"); formatter->add(0.0); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("Direction"); formatter->add( axisList[0]->direction() == cs::AxisDirection::UP ? 1.0 : -1.0); formatter->endNode(); } if (!isWKT2) { axisList[0]->unit()._exportToWKT(formatter); } const auto oldAxisOutputRule = formatter->outputAxis(); if (oldAxisOutputRule == io::WKTFormatter::OutputAxisRule::WKT1_GDAL_EPSG_STYLE) { formatter->setOutputAxis(io::WKTFormatter::OutputAxisRule::YES); } cs->_exportToWKT(formatter); formatter->setOutputAxis(oldAxisOutputRule); if (isWKT2 && formatter->use2019Keywords() && !d->geoidModel.empty()) { for (const auto &model : d->geoidModel) { formatter->startNode(io::WKTConstants::GEOIDMODEL, false); formatter->addQuotedString(model->nameStr()); model->formatID(formatter); formatter->endNode(); } } ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void VerticalCRS::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { const auto &geoidgrids = formatter->getVDatumExtension(); if (!geoidgrids.empty()) { formatter->addParam("geoidgrids", geoidgrids); } const auto &geoidCRS = formatter->getGeoidCRSValue(); if (!geoidCRS.empty()) { formatter->addParam("geoid_crs", geoidCRS); } auto &axisList = coordinateSystem()->axisList(); if (!axisList.empty()) { auto projUnit = axisList[0]->unit().exportToPROJString(); if (projUnit.empty()) { formatter->addParam("vto_meter", axisList[0]->unit().conversionToSI()); } else { formatter->addParam("vunits", projUnit); } } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void VerticalCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("VerticalCRS", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } const auto &l_datum(datum()); if (l_datum) { writer->AddObjKey("datum"); l_datum->_exportToJSON(formatter); } else { writer->AddObjKey("datum_ensemble"); formatter->setOmitTypeInImmediateChild(); datumEnsemble()->_exportToJSON(formatter); } writer->AddObjKey("coordinate_system"); formatter->setOmitTypeInImmediateChild(); coordinateSystem()->_exportToJSON(formatter); const auto geoidModelExport = [&writer, &formatter](const operation::TransformationNNPtr &model) { auto objectContext2(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("name"); writer->Add(model->nameStr()); if (model->identifiers().empty()) { const auto &interpCRS = model->interpolationCRS(); if (interpCRS) { writer->AddObjKey("interpolation_crs"); interpCRS->_exportToJSON(formatter); } } model->formatID(formatter); }; if (d->geoidModel.size() == 1) { writer->AddObjKey("geoid_model"); geoidModelExport(d->geoidModel[0]); } else if (d->geoidModel.size() > 1) { writer->AddObjKey("geoid_models"); auto geoidModelsArrayContext(writer->MakeArrayContext(false)); for (const auto &model : d->geoidModel) { geoidModelExport(model); } } if (const auto dynamicVRF = dynamic_cast( l_datum.get())) { const auto &deformationModel = dynamicVRF->deformationModelName(); if (deformationModel.has_value()) { writer->AddObjKey("deformation_models"); auto arrayContext(writer->MakeArrayContext(false)); auto objectContext2(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("name"); writer->Add(*deformationModel); } } ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void VerticalCRS::addLinearUnitConvert( io::PROJStringFormatter *formatter) const { auto &axisList = coordinateSystem()->axisList(); if (!axisList.empty()) { if (axisList[0]->unit().conversionToSI() != 1.0) { formatter->addStep("unitconvert"); formatter->addParam("z_in", "m"); auto projVUnit = axisList[0]->unit().exportToPROJString(); if (projVUnit.empty()) { formatter->addParam("z_out", axisList[0]->unit().conversionToSI()); } else { formatter->addParam("z_out", projVUnit); } } } } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a VerticalCRS from a datum::VerticalReferenceFrame and a * cs::VerticalCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. The GEOID_MODEL property can be set * to a TransformationNNPtr object. * @param datumIn The datum of the CRS. * @param csIn a VerticalCS. * @return new VerticalCRS. */ VerticalCRSNNPtr VerticalCRS::create(const util::PropertyMap &properties, const datum::VerticalReferenceFrameNNPtr &datumIn, const cs::VerticalCSNNPtr &csIn) { return create(properties, datumIn.as_nullable(), nullptr, csIn); } // --------------------------------------------------------------------------- /** \brief Instantiate a VerticalCRS from a datum::VerticalReferenceFrame or * datum::DatumEnsemble and a cs::VerticalCS. * * One and only one of datum or datumEnsemble should be set to a non-null value. * * @param properties See \ref general_properties. * At minimum the name should be defined. The GEOID_MODEL property can be set * to a TransformationNNPtr object. * @param datumIn The datum of the CRS, or nullptr * @param datumEnsembleIn The datum ensemble of the CRS, or nullptr. * @param csIn a VerticalCS. * @return new VerticalCRS. */ VerticalCRSNNPtr VerticalCRS::create(const util::PropertyMap &properties, const datum::VerticalReferenceFramePtr &datumIn, const datum::DatumEnsemblePtr &datumEnsembleIn, const cs::VerticalCSNNPtr &csIn) { auto crs(VerticalCRS::nn_make_shared(datumIn, datumEnsembleIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); const auto geoidModelPtr = properties.get("GEOID_MODEL"); if (geoidModelPtr) { if (auto array = util::nn_dynamic_pointer_cast( *geoidModelPtr)) { for (const auto &item : *array) { auto transf = util::nn_dynamic_pointer_cast( item); if (transf) { crs->d->geoidModel.emplace_back(NN_NO_CHECK(transf)); } } } else if (auto transf = util::nn_dynamic_pointer_cast( *geoidModelPtr)) { crs->d->geoidModel.emplace_back(NN_NO_CHECK(transf)); } } return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool VerticalCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherVertCRS = dynamic_cast(other); if (otherVertCRS == nullptr || !util::isOfExactType(*otherVertCRS)) { return false; } // TODO test geoidModel and velocityModel return SingleCRS::baseIsEquivalentTo(other, criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- /** \brief Identify the CRS with reference CRSs. * * The candidate CRSs are looked in the database when * authorityFactory is not null. * * Note that the implementation uses a set of heuristics to have a good * compromise of successful identifications over execution time. It might miss * legitimate matches in some circumstances. * * The method returns a list of matching reference CRS, and the percentage * (0-100) of confidence in the match. * 100% means that the name of the reference entry * perfectly matches the CRS name, and both are equivalent. In which case a * single result is returned. * 90% means that CRS are equivalent, but the names are not exactly the same. * 70% means that CRS are equivalent (equivalent datum and coordinate system), * but the names are not equivalent. * 25% means that the CRS are not equivalent, but there is some similarity in * the names. * * @param authorityFactory Authority factory (if null, will return an empty * list) * @return a list of matching reference CRS, and the percentage (0-100) of * confidence in the match. */ std::list> VerticalCRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; const auto &thisName(nameStr()); if (authorityFactory) { const io::DatabaseContextNNPtr &dbContext = authorityFactory->databaseContext(); const bool insignificantName = thisName.empty() || ci_equal(thisName, "unknown") || ci_equal(thisName, "unnamed"); if (hasCodeCompatibleOfAuthorityFactory(this, authorityFactory)) { // If the CRS has already an id, check in the database for the // official object, and verify that they are equivalent. for (const auto &id : identifiers()) { if (hasCodeCompatibleOfAuthorityFactory(id, authorityFactory)) { try { auto crs = io::AuthorityFactory::create( dbContext, *id->codeSpace()) ->createVerticalCRS(id->code()); bool match = _isEquivalentTo( crs.get(), util::IComparable::Criterion::EQUIVALENT, dbContext); res.emplace_back(crs, match ? 100 : 25); return res; } catch (const std::exception &) { } } } } else if (!insignificantName) { for (int ipass = 0; ipass < 2; ipass++) { const bool approximateMatch = ipass == 1; auto objects = authorityFactory->createObjectsFromName( thisName, {io::AuthorityFactory::ObjectType::VERTICAL_CRS}, approximateMatch); for (const auto &obj : objects) { auto crs = util::nn_dynamic_pointer_cast(obj); assert(crs); auto crsNN = NN_NO_CHECK(crs); if (_isEquivalentTo( crs.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { if (crs->nameStr() == thisName) { res.clear(); res.emplace_back(crsNN, 100); return res; } res.emplace_back(crsNN, 90); } else { res.emplace_back(crsNN, 25); } } if (!res.empty()) { break; } } } // Sort results res.sort([&thisName](const Pair &a, const Pair &b) { // First consider confidence if (a.second > b.second) { return true; } if (a.second < b.second) { return false; } // Then consider exact name matching const auto &aName(a.first->nameStr()); const auto &bName(b.first->nameStr()); if (aName == thisName && bName != thisName) { return true; } if (bName == thisName && aName != thisName) { return false; } // Arbitrary final sorting criterion return aName < bName; }); // Keep only results of the highest confidence if (res.size() >= 2) { const auto highestConfidence = res.front().second; std::list newRes; for (const auto &pair : res) { if (pair.second == highestConfidence) { newRes.push_back(pair); } else { break; } } return newRes; } } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> VerticalCRS::_identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; auto resTemp = identify(authorityFactory); for (const auto &pair : resTemp) { res.emplace_back(pair.first, pair.second); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DerivedCRS::Private { SingleCRSNNPtr baseCRS_; operation::ConversionNNPtr derivingConversion_; Private(const SingleCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn) : baseCRS_(baseCRSIn), derivingConversion_(derivingConversionIn) {} // For the conversion make a _shallowClone(), so that we can later set // its targetCRS to this. Private(const Private &other) : baseCRS_(other.baseCRS_), derivingConversion_(other.derivingConversion_->shallowClone()) {} }; //! @endcond // --------------------------------------------------------------------------- // DerivedCRS is an abstract class, that virtually inherits from SingleCRS // Consequently the base constructor in SingleCRS will never be called by // that constructor. clang -Wabstract-vbase-init and VC++ underline this, but // other // compilers will complain if we don't call the base constructor. DerivedCRS::DerivedCRS(const SingleCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CoordinateSystemNNPtr & #if !defined(COMPILER_WARNS_ABOUT_ABSTRACT_VBASE_INIT) cs #endif ) : #if !defined(COMPILER_WARNS_ABOUT_ABSTRACT_VBASE_INIT) SingleCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), cs), #endif d(std::make_unique(baseCRSIn, derivingConversionIn)) { } // --------------------------------------------------------------------------- DerivedCRS::DerivedCRS(const DerivedCRS &other) : #if !defined(COMPILER_WARNS_ABOUT_ABSTRACT_VBASE_INIT) SingleCRS(other), #endif d(std::make_unique(*other.d)) { } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DerivedCRS::~DerivedCRS() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the base CRS of a DerivedCRS. * * @return the base CRS. */ const SingleCRSNNPtr &DerivedCRS::baseCRS() PROJ_PURE_DEFN { return d->baseCRS_; } // --------------------------------------------------------------------------- /** \brief Return the deriving conversion from the base CRS to this CRS. * * @return the deriving conversion. */ const operation::ConversionNNPtr DerivedCRS::derivingConversion() const { return d->derivingConversion_->shallowClone(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const operation::ConversionNNPtr & DerivedCRS::derivingConversionRef() PROJ_PURE_DEFN { return d->derivingConversion_; } //! @endcond // --------------------------------------------------------------------------- bool DerivedCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDerivedCRS = dynamic_cast(other); const auto standardCriterion = getStandardCriterion(criterion); if (otherDerivedCRS == nullptr || !SingleCRS::baseIsEquivalentTo(other, standardCriterion, dbContext)) { return false; } return d->baseCRS_->_isEquivalentTo(otherDerivedCRS->d->baseCRS_.get(), criterion, dbContext) && d->derivingConversion_->_isEquivalentTo( otherDerivedCRS->d->derivingConversion_.get(), standardCriterion, dbContext); } // --------------------------------------------------------------------------- void DerivedCRS::setDerivingConversionCRS() { derivingConversionRef()->setWeakSourceTargetCRS( baseCRS().as_nullable(), std::static_pointer_cast(shared_from_this().as_nullable())); } // --------------------------------------------------------------------------- void DerivedCRS::baseExportToWKT(io::WKTFormatter *formatter, const std::string &keyword, const std::string &baseKeyword) const { formatter->startNode(keyword, !identifiers().empty()); formatter->addQuotedString(nameStr()); const auto &l_baseCRS = d->baseCRS_; formatter->startNode(baseKeyword, formatter->use2019Keywords() && !l_baseCRS->identifiers().empty()); formatter->addQuotedString(l_baseCRS->nameStr()); l_baseCRS->exportDatumOrDatumEnsembleToWkt(formatter); if (formatter->use2019Keywords() && !(formatter->idOnTopLevelOnly() && formatter->topLevelHasId())) { l_baseCRS->formatID(formatter); } formatter->endNode(); formatter->setUseDerivingConversion(true); derivingConversionRef()->_exportToWKT(formatter); formatter->setUseDerivingConversion(false); coordinateSystem()->_exportToWKT(formatter); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DerivedCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext(className(), !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("base_crs"); baseCRS()->_exportToJSON(formatter); writer->AddObjKey("conversion"); formatter->setOmitTypeInImmediateChild(); derivingConversionRef()->_exportToJSON(formatter); writer->AddObjKey("coordinate_system"); formatter->setOmitTypeInImmediateChild(); coordinateSystem()->_exportToJSON(formatter); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ProjectedCRS::Private { GeodeticCRSNNPtr baseCRS_; cs::CartesianCSNNPtr cs_; Private(const GeodeticCRSNNPtr &baseCRSIn, const cs::CartesianCSNNPtr &csIn) : baseCRS_(baseCRSIn), cs_(csIn) {} inline const GeodeticCRSNNPtr &baseCRS() const { return baseCRS_; } inline const cs::CartesianCSNNPtr &coordinateSystem() const { return cs_; } }; //! @endcond // --------------------------------------------------------------------------- ProjectedCRS::ProjectedCRS( const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn) : SingleCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), DerivedCRS(baseCRSIn, derivingConversionIn, csIn), d(std::make_unique(baseCRSIn, csIn)) {} // --------------------------------------------------------------------------- ProjectedCRS::ProjectedCRS(const ProjectedCRS &other) : SingleCRS(other), DerivedCRS(other), d(std::make_unique(other.baseCRS(), other.coordinateSystem())) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ProjectedCRS::~ProjectedCRS() = default; //! @endcond // --------------------------------------------------------------------------- CRSNNPtr ProjectedCRS::_shallowClone() const { auto crs(ProjectedCRS::nn_make_shared(*this)); crs->assignSelf(crs); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- /** \brief Return the base CRS (a GeodeticCRS, which is generally a * GeographicCRS) of the ProjectedCRS. * * @return the base CRS. */ const GeodeticCRSNNPtr &ProjectedCRS::baseCRS() PROJ_PURE_DEFN { return d->baseCRS(); } // --------------------------------------------------------------------------- /** \brief Return the cs::CartesianCS associated with the CRS. * * @return a CartesianCS */ const cs::CartesianCSNNPtr &ProjectedCRS::coordinateSystem() PROJ_PURE_DEFN { return d->coordinateSystem(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ProjectedCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; const auto &l_identifiers = identifiers(); // Try to perfectly round-trip ESRI projectedCRS if the current object // perfectly matches the database definition const auto &dbContext = formatter->databaseContext(); std::string l_name(nameStr()); const auto &l_coordinateSystem = d->coordinateSystem(); const auto &axisList = l_coordinateSystem->axisList(); if (axisList.size() == 3 && !(isWKT2 && formatter->use2019Keywords())) { auto projCRS2D = demoteTo2D(std::string(), dbContext); if (dbContext) { const auto res = projCRS2D->identify(io::AuthorityFactory::create( NN_NO_CHECK(dbContext), metadata::Identifier::EPSG)); if (res.size() == 1) { const auto &front = res.front(); if (front.second == 100) { projCRS2D = front.first; } } } if (formatter->useESRIDialect() && dbContext) { // Try to format the ProjecteD 3D CRS as a // PROJCS[],VERTCS[...,DATUM[]] // if we find corresponding objects if (exportAsESRIWktCompoundCRSWithEllipsoidalHeight( this, baseCRS().as_nullable().get(), formatter)) { return; } } if (!formatter->useESRIDialect() && CRS::getPrivate()->allowNonConformantWKT1Export_) { formatter->startNode(io::WKTConstants::COMPD_CS, false); formatter->addQuotedString(l_name + " + " + baseCRS()->nameStr()); projCRS2D->_exportToWKT(formatter); baseCRS() ->demoteTo2D(std::string(), dbContext) ->_exportToWKT(formatter); formatter->endNode(); return; } auto &originalCompoundCRS = CRS::getPrivate()->originalCompoundCRS_; if (!formatter->useESRIDialect() && originalCompoundCRS) { originalCompoundCRS->_exportToWKT(formatter); return; } if (!formatter->useESRIDialect() && formatter->isAllowedEllipsoidalHeightAsVerticalCRS()) { exportAsWKT1CompoundCRSWithEllipsoidalHeight(projCRS2D, axisList[2], formatter); return; } io::FormattingException::Throw( "Projected 3D CRS can only be exported since WKT2:2019"); } std::string l_esri_name; if (formatter->useESRIDialect() && dbContext) { if (!l_identifiers.empty()) { // Try to find the ESRI alias from the CRS identified by its id const auto aliases = dbContext->getAliases( *(l_identifiers[0]->codeSpace()), l_identifiers[0]->code(), std::string(), // officialName, "projected_crs", "ESRI"); if (aliases.size() == 1) l_esri_name = aliases.front(); } if (l_esri_name.empty()) { // Then find the ESRI alias from the CRS name l_esri_name = dbContext->getAliasFromOfficialName( l_name, "projected_crs", "ESRI"); } if (l_esri_name.empty()) { // Then try to build an ESRI CRS from the CRS name, and if there's // one, the ESRI name is the CRS name auto authFactory = io::AuthorityFactory::create(NN_NO_CHECK(dbContext), "ESRI"); const bool found = authFactory ->createObjectsFromName( l_name, {io::AuthorityFactory::ObjectType::PROJECTED_CRS}, false // approximateMatch ) .size() == 1; if (found) l_esri_name = l_name; } if (!isWKT2 && !l_identifiers.empty() && *(l_identifiers[0]->codeSpace()) == "ESRI") { try { // If the id of the object is in the ESRI namespace, then // try to find the full ESRI WKT from the database const auto definition = dbContext->getTextDefinition( "projected_crs", "ESRI", l_identifiers[0]->code()); if (starts_with(definition, "PROJCS")) { auto crsFromFromDef = io::WKTParser() .attachDatabaseContext(dbContext) .createFromWKT(definition); if (_isEquivalentTo( dynamic_cast(crsFromFromDef.get()), util::IComparable::Criterion::EQUIVALENT)) { formatter->ingestWKTNode( io::WKTNode::createFrom(definition)); return; } } } catch (const std::exception &) { } } else if (!isWKT2 && !l_esri_name.empty()) { try { auto res = io::AuthorityFactory::create(NN_NO_CHECK(dbContext), "ESRI") ->createObjectsFromName( l_esri_name, {io::AuthorityFactory::ObjectType::PROJECTED_CRS}, false); if (res.size() == 1) { const auto definition = dbContext->getTextDefinition( "projected_crs", "ESRI", res.front()->identifiers()[0]->code()); if (starts_with(definition, "PROJCS")) { if (_isEquivalentTo( dynamic_cast(res.front().get()), util::IComparable::Criterion::EQUIVALENT)) { formatter->ingestWKTNode( io::WKTNode::createFrom(definition)); return; } } } } catch (const std::exception &) { } } } const auto exportAxis = [&l_coordinateSystem, &axisList, &formatter]() { const auto oldAxisOutputRule = formatter->outputAxis(); if (oldAxisOutputRule == io::WKTFormatter::OutputAxisRule::WKT1_GDAL_EPSG_STYLE) { if (&axisList[0]->direction() == &cs::AxisDirection::EAST && &axisList[1]->direction() == &cs::AxisDirection::NORTH) { formatter->setOutputAxis(io::WKTFormatter::OutputAxisRule::YES); } } l_coordinateSystem->_exportToWKT(formatter); formatter->setOutputAxis(oldAxisOutputRule); }; if (!isWKT2 && !formatter->useESRIDialect() && starts_with(nameStr(), "Popular Visualisation CRS / Mercator")) { formatter->startNode(io::WKTConstants::PROJCS, !l_identifiers.empty()); formatter->addQuotedString(nameStr()); formatter->setTOWGS84Parameters({0, 0, 0, 0, 0, 0, 0}); baseCRS()->_exportToWKT(formatter); formatter->setTOWGS84Parameters({}); formatter->startNode(io::WKTConstants::PROJECTION, false); formatter->addQuotedString("Mercator_1SP"); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("central_meridian"); formatter->add(0.0); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("scale_factor"); formatter->add(1.0); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("false_easting"); formatter->add(0.0); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("false_northing"); formatter->add(0.0); formatter->endNode(); axisList[0]->unit()._exportToWKT(formatter); exportAxis(); derivingConversionRef()->addWKTExtensionNode(formatter); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); return; } formatter->startNode(isWKT2 ? io::WKTConstants::PROJCRS : io::WKTConstants::PROJCS, !l_identifiers.empty()); if (formatter->useESRIDialect()) { if (l_esri_name.empty()) { l_name = io::WKTFormatter::morphNameToESRI(l_name); } else { const std::string &l_esri_name_ref(l_esri_name); l_name = l_esri_name_ref; } } if (!isWKT2 && !formatter->useESRIDialect() && isDeprecated()) { l_name += " (deprecated)"; } formatter->addQuotedString(l_name); const auto &l_baseCRS = d->baseCRS(); const auto &geodeticCRSAxisList = l_baseCRS->coordinateSystem()->axisList(); if (isWKT2) { formatter->startNode( (formatter->use2019Keywords() && dynamic_cast(l_baseCRS.get())) ? io::WKTConstants::BASEGEOGCRS : io::WKTConstants::BASEGEODCRS, formatter->use2019Keywords() && !l_baseCRS->identifiers().empty()); formatter->addQuotedString(l_baseCRS->nameStr()); l_baseCRS->exportDatumOrDatumEnsembleToWkt(formatter); // insert ellipsoidal cs unit when the units of the map // projection angular parameters are not explicitly given within those // parameters. See // http://docs.opengeospatial.org/is/12-063r5/12-063r5.html#61 if (formatter->primeMeridianOrParameterUnitOmittedIfSameAsAxis()) { geodeticCRSAxisList[0]->unit()._exportToWKT(formatter); } l_baseCRS->primeMeridian()->_exportToWKT(formatter); if (formatter->use2019Keywords() && !(formatter->idOnTopLevelOnly() && formatter->topLevelHasId())) { l_baseCRS->formatID(formatter); } formatter->endNode(); } else { const auto oldAxisOutputRule = formatter->outputAxis(); formatter->setOutputAxis(io::WKTFormatter::OutputAxisRule::NO); l_baseCRS->_exportToWKT(formatter); formatter->setOutputAxis(oldAxisOutputRule); } formatter->pushAxisLinearUnit( common::UnitOfMeasure::create(axisList[0]->unit())); formatter->pushAxisAngularUnit( common::UnitOfMeasure::create(geodeticCRSAxisList[0]->unit())); derivingConversionRef()->_exportToWKT(formatter); formatter->popAxisAngularUnit(); formatter->popAxisLinearUnit(); if (!isWKT2) { axisList[0]->unit()._exportToWKT(formatter); } exportAxis(); if (!isWKT2 && !formatter->useESRIDialect()) { const auto &extensionProj4 = CRS::getPrivate()->extensionProj4_; if (!extensionProj4.empty()) { formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4"); formatter->addQuotedString(extensionProj4); formatter->endNode(); } else { derivingConversionRef()->addWKTExtensionNode(formatter); } } ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); return; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ProjectedCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("ProjectedCRS", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("base_crs"); formatter->setAllowIDInImmediateChild(); baseCRS()->_exportToJSON(formatter); writer->AddObjKey("conversion"); formatter->setOmitTypeInImmediateChild(); derivingConversionRef()->_exportToJSON(formatter); writer->AddObjKey("coordinate_system"); formatter->setOmitTypeInImmediateChild(); coordinateSystem()->_exportToJSON(formatter); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- void ProjectedCRS::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { const auto &extensionProj4 = CRS::getPrivate()->extensionProj4_; if (!extensionProj4.empty()) { formatter->ingestPROJString( replaceAll(extensionProj4, " +type=crs", "")); formatter->addNoDefs(false); return; } derivingConversionRef()->_exportToPROJString(formatter); } // --------------------------------------------------------------------------- /** \brief Instantiate a ProjectedCRS from a base CRS, a deriving * operation::Conversion * and a coordinate system. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param baseCRSIn The base CRS, a GeodeticCRS that is generally a * GeographicCRS. * @param derivingConversionIn The deriving operation::Conversion (typically * using a map * projection method) * @param csIn The coordniate system. * @return new ProjectedCRS. */ ProjectedCRSNNPtr ProjectedCRS::create(const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn) { auto crs = ProjectedCRS::nn_make_shared( baseCRSIn, derivingConversionIn, csIn); crs->assignSelf(crs); crs->setProperties(properties); crs->setDerivingConversionCRS(); crs->CRS::getPrivate()->setNonStandardProperties(properties); return crs; } // --------------------------------------------------------------------------- bool ProjectedCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherProjCRS = dynamic_cast(other); if (otherProjCRS != nullptr && criterion == util::IComparable::Criterion::EQUIVALENT && (d->baseCRS_->hasImplicitCS() || otherProjCRS->d->baseCRS_->hasImplicitCS())) { // If one of the 2 base CRS has implicit coordinate system, then // relax the check. The axis order of the base CRS doesn't matter // for most purposes. criterion = util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS; } return other != nullptr && util::isOfExactType(*other) && DerivedCRS::_isEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ProjectedCRSNNPtr ProjectedCRS::alterParametersLinearUnit(const common::UnitOfMeasure &unit, bool convertToNewUnit) const { return create( createPropertyMap(this), baseCRS(), derivingConversion()->alterParametersLinearUnit(unit, convertToNewUnit), coordinateSystem()); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ProjectedCRS::addUnitConvertAndAxisSwap(io::PROJStringFormatter *formatter, bool axisSpecFound) const { ProjectedCRS::addUnitConvertAndAxisSwap(d->coordinateSystem()->axisList(), formatter, axisSpecFound); } void ProjectedCRS::addUnitConvertAndAxisSwap( const std::vector &axisListIn, io::PROJStringFormatter *formatter, bool axisSpecFound) { const auto &unit = axisListIn[0]->unit(); const auto *zUnit = axisListIn.size() == 3 ? &(axisListIn[2]->unit()) : nullptr; if (!unit._isEquivalentTo(common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT) || (zUnit && !zUnit->_isEquivalentTo(common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT))) { auto projUnit = unit.exportToPROJString(); const double toSI = unit.conversionToSI(); if (!formatter->getCRSExport()) { formatter->addStep("unitconvert"); formatter->addParam("xy_in", "m"); if (zUnit) formatter->addParam("z_in", "m"); if (projUnit.empty()) { formatter->addParam("xy_out", toSI); } else { formatter->addParam("xy_out", projUnit); } if (zUnit) { auto projZUnit = zUnit->exportToPROJString(); const double zToSI = zUnit->conversionToSI(); if (projZUnit.empty()) { formatter->addParam("z_out", zToSI); } else { formatter->addParam("z_out", projZUnit); } } } else { if (projUnit.empty()) { formatter->addParam("to_meter", toSI); } else { formatter->addParam("units", projUnit); } } } else if (formatter->getCRSExport() && !formatter->getLegacyCRSToCRSContext()) { formatter->addParam("units", "m"); } if (!axisSpecFound && (!formatter->getCRSExport() || formatter->getLegacyCRSToCRSContext())) { const auto &dir0 = axisListIn[0]->direction(); const auto &dir1 = axisListIn[1]->direction(); if (!(&dir0 == &cs::AxisDirection::EAST && &dir1 == &cs::AxisDirection::NORTH) && // For polar projections, that have south+south direction, // we don't want to mess with axes. dir0 != dir1) { const char *order[2] = {nullptr, nullptr}; for (int i = 0; i < 2; i++) { const auto &dir = axisListIn[i]->direction(); if (&dir == &cs::AxisDirection::WEST) order[i] = "-1"; else if (&dir == &cs::AxisDirection::EAST) order[i] = "1"; else if (&dir == &cs::AxisDirection::SOUTH) order[i] = "-2"; else if (&dir == &cs::AxisDirection::NORTH) order[i] = "2"; } if (order[0] && order[1]) { formatter->addStep("axisswap"); char orderStr[10]; snprintf(orderStr, sizeof(orderStr), "%.2s,%.2s", order[0], order[1]); formatter->addParam("order", orderStr); } } else { const auto &name0 = axisListIn[0]->nameStr(); const auto &name1 = axisListIn[1]->nameStr(); const bool northingEasting = ci_starts_with(name0, "northing") && ci_starts_with(name1, "easting"); // case of EPSG:32661 ["WGS 84 / UPS North (N,E)]" // case of EPSG:32761 ["WGS 84 / UPS South (N,E)]" if (((&dir0 == &cs::AxisDirection::SOUTH && &dir1 == &cs::AxisDirection::SOUTH) || (&dir0 == &cs::AxisDirection::NORTH && &dir1 == &cs::AxisDirection::NORTH)) && northingEasting) { formatter->addStep("axisswap"); formatter->addParam("order", "2,1"); } } } } //! @endcond // --------------------------------------------------------------------------- /** \brief Identify the CRS with reference CRSs. * * The candidate CRSs are either hard-coded, or looked in the database when * authorityFactory is not null. * * Note that the implementation uses a set of heuristics to have a good * compromise of successful identifications over execution time. It might miss * legitimate matches in some circumstances. * * The method returns a list of matching reference CRS, and the percentage * (0-100) of confidence in the match. The list is sorted by decreasing * confidence. * * 100% means that the name of the reference entry * perfectly matches the CRS name, and both are equivalent. In which case a * single result is returned. * 90% means that CRS are equivalent, but the names are not exactly the same. * 70% means that CRS are equivalent (equivalent base CRS, conversion and * coordinate system), but the names are not equivalent. * 60% means that CRS have strong similarity (equivalent base datum, conversion * and coordinate system), but the names are not equivalent. * 50% means that CRS have similarity (equivalent base ellipsoid and * conversion), * but the coordinate system do not match (e.g. different axis ordering or * axis unit). * 25% means that the CRS are not equivalent, but there is some similarity in * the names. * * For the purpose of this function, equivalence is tested with the * util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS, that is * to say that the axis order of the base GeographicCRS is ignored. * * @param authorityFactory Authority factory (or null, but degraded * functionality) * @return a list of matching reference CRS, and the percentage (0-100) of * confidence in the match. */ std::list> ProjectedCRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; const auto &thisName(nameStr()); io::DatabaseContextPtr dbContext = authorityFactory ? authorityFactory->databaseContext().as_nullable() : nullptr; std::list> baseRes; const auto &l_baseCRS(baseCRS()); const auto l_datum = l_baseCRS->datumNonNull(dbContext); const bool significantNameForDatum = !ci_starts_with(l_datum->nameStr(), "unknown") && l_datum->nameStr() != "unnamed"; const auto &ellipsoid = l_baseCRS->ellipsoid(); auto geogCRS = dynamic_cast(l_baseCRS.get()); if (geogCRS && geogCRS->coordinateSystem()->axisOrder() == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH) { baseRes = GeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, geogCRS->nameStr()), geogCRS->datum(), geogCRS->datumEnsemble(), cs::EllipsoidalCS::createLatitudeLongitude( geogCRS->coordinateSystem()->axisList()[0]->unit())) ->identify(authorityFactory); } else { baseRes = l_baseCRS->identify(authorityFactory); } int zone = 0; bool north = false; auto computeConfidence = [&thisName](const std::string &crsName) { return crsName == thisName ? 100 : metadata::Identifier::isEquivalentName(crsName.c_str(), thisName.c_str()) ? 90 : 70; }; const auto &conv = derivingConversionRef(); const auto &cs = coordinateSystem(); if (baseRes.size() == 1 && baseRes.front().second >= 70 && (authorityFactory == nullptr || authorityFactory->getAuthority().empty() || authorityFactory->getAuthority() == metadata::Identifier::EPSG) && conv->isUTM(zone, north) && cs->_isEquivalentTo( cs::CartesianCS::createEastingNorthing(common::UnitOfMeasure::METRE) .get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { auto computeUTMCRSName = [](const char *base, int l_zone, bool l_north) { return base + toString(l_zone) + (l_north ? "N" : "S"); }; if (baseRes.front().first->_isEquivalentTo( GeographicCRS::EPSG_4326.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { std::string crsName( computeUTMCRSName("WGS 84 / UTM zone ", zone, north)); res.emplace_back( ProjectedCRS::create( createMapNameEPSGCode(crsName.c_str(), (north ? 32600 : 32700) + zone), GeographicCRS::EPSG_4326, conv->identify(), cs), computeConfidence(crsName)); return res; } else if (((zone >= 1 && zone <= 22) || zone == 59 || zone == 60) && north && baseRes.front().first->_isEquivalentTo( GeographicCRS::EPSG_4267.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { std::string crsName( computeUTMCRSName("NAD27 / UTM zone ", zone, north)); res.emplace_back( ProjectedCRS::create( createMapNameEPSGCode(crsName.c_str(), (zone >= 59) ? 3370 + zone - 59 : 26700 + zone), GeographicCRS::EPSG_4267, conv->identify(), cs), computeConfidence(crsName)); return res; } else if (((zone >= 1 && zone <= 23) || zone == 59 || zone == 60) && north && baseRes.front().first->_isEquivalentTo( GeographicCRS::EPSG_4269.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { std::string crsName( computeUTMCRSName("NAD83 / UTM zone ", zone, north)); res.emplace_back( ProjectedCRS::create( createMapNameEPSGCode(crsName.c_str(), (zone >= 59) ? 3372 + zone - 59 : 26900 + zone), GeographicCRS::EPSG_4269, conv->identify(), cs), computeConfidence(crsName)); return res; } } const bool l_implicitCS = hasImplicitCS(); const auto addCRS = [&](const ProjectedCRSNNPtr &crs, const bool eqName, bool hasNonMatchingId) -> Pair { const auto &l_unit = cs->axisList()[0]->unit(); if ((_isEquivalentTo(crs.get(), util::IComparable::Criterion:: EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS, dbContext) || (l_implicitCS && l_unit._isEquivalentTo( crs->coordinateSystem()->axisList()[0]->unit(), util::IComparable::Criterion::EQUIVALENT) && l_baseCRS->_isEquivalentTo( crs->baseCRS().get(), util::IComparable::Criterion:: EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS, dbContext) && derivingConversionRef()->_isEquivalentTo( crs->derivingConversionRef().get(), util::IComparable::Criterion::EQUIVALENT, dbContext))) && !((baseCRS()->datumNonNull(dbContext)->nameStr() == "unknown" && crs->baseCRS()->datumNonNull(dbContext)->nameStr() != "unknown") || (baseCRS()->datumNonNull(dbContext)->nameStr() != "unknown" && crs->baseCRS()->datumNonNull(dbContext)->nameStr() == "unknown"))) { if (crs->nameStr() == thisName) { res.clear(); res.emplace_back(crs, hasNonMatchingId ? 70 : 100); } else { res.emplace_back(crs, eqName ? 90 : 70); } } else if (ellipsoid->_isEquivalentTo( crs->baseCRS()->ellipsoid().get(), util::IComparable::Criterion::EQUIVALENT, dbContext) && derivingConversionRef()->_isEquivalentTo( crs->derivingConversionRef().get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { if ((l_implicitCS && l_unit._isEquivalentTo( crs->coordinateSystem()->axisList()[0]->unit(), util::IComparable::Criterion::EQUIVALENT)) || cs->_isEquivalentTo(crs->coordinateSystem().get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { if (!significantNameForDatum || l_datum->_isEquivalentTo( crs->baseCRS()->datumNonNull(dbContext).get(), util::IComparable::Criterion::EQUIVALENT)) { res.emplace_back(crs, 70); } else { res.emplace_back(crs, 60); } } else { res.emplace_back(crs, 50); } } else { res.emplace_back(crs, 25); } return res.back(); }; if (authorityFactory) { const bool insignificantName = thisName.empty() || ci_equal(thisName, "unknown") || ci_equal(thisName, "unnamed"); bool foundEquivalentName = false; bool hasNonMatchingId = false; if (hasCodeCompatibleOfAuthorityFactory(this, authorityFactory)) { // If the CRS has already an id, check in the database for the // official object, and verify that they are equivalent. for (const auto &id : identifiers()) { if (hasCodeCompatibleOfAuthorityFactory(id, authorityFactory)) { try { auto crs = io::AuthorityFactory::create( authorityFactory->databaseContext(), *id->codeSpace()) ->createProjectedCRS(id->code()); bool match = _isEquivalentTo( crs.get(), util::IComparable::Criterion:: EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS, dbContext); res.emplace_back(crs, match ? 100 : 25); if (match) { return res; } } catch (const std::exception &) { } } } hasNonMatchingId = true; } else if (!insignificantName) { for (int ipass = 0; ipass < 2; ipass++) { const bool approximateMatch = ipass == 1; auto objects = authorityFactory->createObjectsFromNameEx( thisName, {io::AuthorityFactory::ObjectType::PROJECTED_CRS}, approximateMatch); for (const auto &pairObjName : objects) { auto crs = util::nn_dynamic_pointer_cast( pairObjName.first); assert(crs); auto crsNN = NN_NO_CHECK(crs); const bool eqName = metadata::Identifier::isEquivalentName( thisName.c_str(), pairObjName.second.c_str()); foundEquivalentName |= eqName; if (addCRS(crsNN, eqName, false).second == 100) { return res; } } if (!res.empty()) { break; } } } const auto lambdaSort = [&thisName](const Pair &a, const Pair &b) { // First consider confidence if (a.second > b.second) { return true; } if (a.second < b.second) { return false; } // Then consider exact name matching const auto &aName(a.first->nameStr()); const auto &bName(b.first->nameStr()); if (aName == thisName && bName != thisName) { return true; } if (bName == thisName && aName != thisName) { return false; } // Arbitrary final sorting criterion return aName < bName; }; // Sort results res.sort(lambdaSort); if (!foundEquivalentName && (res.empty() || res.front().second < 50)) { std::set> alreadyKnown; for (const auto &pair : res) { const auto &ids = pair.first->identifiers(); assert(!ids.empty()); alreadyKnown.insert(std::pair( *(ids[0]->codeSpace()), ids[0]->code())); } auto self = NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); auto candidates = authorityFactory->createProjectedCRSFromExisting(self); for (const auto &crs : candidates) { const auto &ids = crs->identifiers(); assert(!ids.empty()); if (alreadyKnown.find(std::pair( *(ids[0]->codeSpace()), ids[0]->code())) != alreadyKnown.end()) { continue; } addCRS(crs, insignificantName, hasNonMatchingId); } res.sort(lambdaSort); } // Keep only results of the highest confidence if (res.size() >= 2) { const auto highestConfidence = res.front().second; std::list newRes; for (const auto &pair : res) { if (pair.second == highestConfidence) { newRes.push_back(pair); } else { break; } } return newRes; } } return res; } // --------------------------------------------------------------------------- /** \brief Return a variant of this CRS "demoted" to a 2D one, if not already * the case. * * * @param newName Name of the new CRS. If empty, nameStr() will be used. * @param dbContext Database context to look for potentially already registered * 2D CRS. May be nullptr. * @return a new CRS demoted to 2D, or the current one if already 2D or not * applicable. * @since 6.3 */ ProjectedCRSNNPtr ProjectedCRS::demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const { const auto &axisList = coordinateSystem()->axisList(); if (axisList.size() == 3) { auto cs = cs::CartesianCS::create(util::PropertyMap(), axisList[0], axisList[1]); const auto &l_baseCRS = baseCRS(); const auto geogCRS = dynamic_cast(l_baseCRS.get()); const auto newBaseCRS = geogCRS ? util::nn_static_pointer_cast( geogCRS->demoteTo2D(std::string(), dbContext)) : l_baseCRS; return ProjectedCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, !newName.empty() ? newName : nameStr()), newBaseCRS, derivingConversion(), cs); } return NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> ProjectedCRS::_identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; auto resTemp = identify(authorityFactory); for (const auto &pair : resTemp) { res.emplace_back(pair.first, pair.second); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress InvalidCompoundCRSException::InvalidCompoundCRSException(const char *message) : Exception(message) {} // --------------------------------------------------------------------------- InvalidCompoundCRSException::InvalidCompoundCRSException( const std::string &message) : Exception(message) {} // --------------------------------------------------------------------------- InvalidCompoundCRSException::~InvalidCompoundCRSException() = default; // --------------------------------------------------------------------------- InvalidCompoundCRSException::InvalidCompoundCRSException( const InvalidCompoundCRSException &) = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CompoundCRS::Private { std::vector components_{}; }; //! @endcond // --------------------------------------------------------------------------- CompoundCRS::CompoundCRS(const std::vector &components) : CRS(), d(std::make_unique()) { d->components_ = components; } // --------------------------------------------------------------------------- CompoundCRS::CompoundCRS(const CompoundCRS &other) : CRS(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CompoundCRS::~CompoundCRS() = default; //! @endcond // --------------------------------------------------------------------------- CRSNNPtr CompoundCRS::_shallowClone() const { auto crs(CompoundCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- /** \brief Return the components of a CompoundCRS. * * @return the components. */ const std::vector & CompoundCRS::componentReferenceSystems() PROJ_PURE_DEFN { return d->components_; } // --------------------------------------------------------------------------- /** \brief Instantiate a CompoundCRS from a vector of CRS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param components the component CRS of the CompoundCRS. * @return new CompoundCRS. * @throw InvalidCompoundCRSException if the object cannot be constructed. */ CompoundCRSNNPtr CompoundCRS::create(const util::PropertyMap &properties, const std::vector &components) { if (components.size() < 2) { throw InvalidCompoundCRSException( "compound CRS should have at least 2 components"); } auto comp0 = components[0].get(); auto comp0Bound = dynamic_cast(comp0); if (comp0Bound) { comp0 = comp0Bound->baseCRS().get(); } auto comp0Geog = dynamic_cast(comp0); auto comp0Proj = dynamic_cast(comp0); auto comp0DerPr = dynamic_cast(comp0); auto comp0Eng = dynamic_cast(comp0); auto comp1 = components[1].get(); auto comp1Bound = dynamic_cast(comp1); if (comp1Bound) { comp1 = comp1Bound->baseCRS().get(); } auto comp1Vert = dynamic_cast(comp1); auto comp1Eng = dynamic_cast(comp1); // Loose validation based on // http://docs.opengeospatial.org/as/18-005r5/18-005r5.html#34 bool ok = false; const bool comp1IsVertOrEng1 = comp1Vert || (comp1Eng && comp1Eng->coordinateSystem()->axisList().size() == 1); if ((comp0Geog && comp0Geog->coordinateSystem()->axisList().size() == 2 && comp1IsVertOrEng1) || (comp0Proj && comp0Proj->coordinateSystem()->axisList().size() == 2 && comp1IsVertOrEng1) || (comp0DerPr && comp0DerPr->coordinateSystem()->axisList().size() == 2 && comp1IsVertOrEng1) || (comp0Eng && comp0Eng->coordinateSystem()->axisList().size() <= 2 && comp1Vert)) { // Spatial compound coordinate reference system ok = true; } else { bool isComp0Spatial = comp0Geog || comp0Proj || comp0DerPr || comp0Eng || dynamic_cast(comp0) || dynamic_cast(comp0); if (isComp0Spatial && dynamic_cast(comp1)) { // Spatio-temporal compound coordinate reference system ok = true; } else if (isComp0Spatial && dynamic_cast(comp1)) { // Spatio-parametric compound coordinate reference system ok = true; } } if (!ok) { throw InvalidCompoundCRSException( "components of the compound CRS do not belong to one of the " "allowed combinations of " "http://docs.opengeospatial.org/as/18-005r5/18-005r5.html#34"); } auto compoundCRS(CompoundCRS::nn_make_shared(components)); compoundCRS->assignSelf(compoundCRS); compoundCRS->setProperties(properties); if (!properties.get(common::IdentifiedObject::NAME_KEY)) { std::string name; for (const auto &crs : components) { if (!name.empty()) { name += " + "; } const auto &l_name = crs->nameStr(); if (!l_name.empty()) { name += l_name; } else { name += "unnamed"; } } util::PropertyMap propertyName; propertyName.set(common::IdentifiedObject::NAME_KEY, name); compoundCRS->setProperties(propertyName); } return compoundCRS; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Instantiate a CompoundCRS, a Geographic 3D CRS or a Projected CRS * from a vector of CRS. * * Be a bit "lax", in allowing formulations like EPSG:4326+4326 or * EPSG:32631+4326 to express Geographic 3D CRS / Projected3D CRS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param components the component CRS of the CompoundCRS. * @return new CRS. * @throw InvalidCompoundCRSException if the object cannot be constructed. */ CRSNNPtr CompoundCRS::createLax(const util::PropertyMap &properties, const std::vector &components, const io::DatabaseContextPtr &dbContext) { if (components.size() == 2) { auto comp0 = components[0].get(); auto comp1 = components[1].get(); auto comp0Geog = dynamic_cast(comp0); auto comp0Proj = dynamic_cast(comp0); auto comp0Bound = dynamic_cast(comp0); if (comp0Geog == nullptr && comp0Proj == nullptr) { if (comp0Bound) { const auto *baseCRS = comp0Bound->baseCRS().get(); comp0Geog = dynamic_cast(baseCRS); comp0Proj = dynamic_cast(baseCRS); } } auto comp1Geog = dynamic_cast(comp1); if ((comp0Geog != nullptr || comp0Proj != nullptr) && comp1Geog != nullptr) { const auto horizGeog = (comp0Proj != nullptr) ? comp0Proj->baseCRS().as_nullable().get() : comp0Geog; if (horizGeog->_isEquivalentTo( comp1Geog->demoteTo2D(std::string(), dbContext).get())) { return components[0] ->promoteTo3D(std::string(), dbContext) ->allowNonConformantWKT1Export(); } throw InvalidCompoundCRSException( "The 'vertical' geographic CRS is not equivalent to the " "geographic CRS of the horizontal part"); } // Detect a COMPD_CS whose VERT_CS is for ellipoidal heights auto comp1Vert = util::nn_dynamic_pointer_cast(components[1]); if (comp1Vert != nullptr && comp1Vert->datum() && comp1Vert->datum()->getWKT1DatumType() == "2002") { const auto &axis = comp1Vert->coordinateSystem()->axisList()[0]; std::string name(components[0]->nameStr()); if (!(axis->unit()._isEquivalentTo( common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT) && &(axis->direction()) == &(cs::AxisDirection::UP))) { name += " (" + comp1Vert->nameStr() + ')'; } auto newVertAxis = cs::CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, cs::AxisName::Ellipsoidal_height), cs::AxisAbbreviation::h, axis->direction(), axis->unit()); return components[0] ->promoteTo3D(name, dbContext, newVertAxis) ->attachOriginalCompoundCRS(create( properties, comp0Bound ? std::vector{comp0Bound->baseCRS(), components[1]} : components)); } } return create(properties, components); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CompoundCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; const auto &l_components = componentReferenceSystems(); if (!isWKT2 && formatter->useESRIDialect() && l_components.size() == 2) { l_components[0]->_exportToWKT(formatter); l_components[1]->_exportToWKT(formatter); } else { formatter->startNode(isWKT2 ? io::WKTConstants::COMPOUNDCRS : io::WKTConstants::COMPD_CS, !identifiers().empty()); formatter->addQuotedString(nameStr()); if (!l_components.empty()) { formatter->setGeogCRSOfCompoundCRS( l_components[0]->extractGeographicCRS()); } for (const auto &crs : l_components) { crs->_exportToWKT(formatter); } formatter->setGeogCRSOfCompoundCRS(nullptr); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CompoundCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("CompoundCRS", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("components"); { auto componentsContext(writer->MakeArrayContext(false)); for (const auto &crs : componentReferenceSystems()) { crs->_exportToJSON(formatter); } } ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- void CompoundCRS::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { const auto &l_components = componentReferenceSystems(); if (!l_components.empty()) { formatter->setGeogCRSOfCompoundCRS( l_components[0]->extractGeographicCRS()); } for (const auto &crs : l_components) { auto crs_exportable = dynamic_cast(crs.get()); if (crs_exportable) { crs_exportable->_exportToPROJString(formatter); } } formatter->setGeogCRSOfCompoundCRS(nullptr); } // --------------------------------------------------------------------------- bool CompoundCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherCompoundCRS = dynamic_cast(other); if (otherCompoundCRS == nullptr || (criterion == util::IComparable::Criterion::STRICT && !ObjectUsage::_isEquivalentTo(other, criterion, dbContext))) { return false; } const auto &components = componentReferenceSystems(); const auto &otherComponents = otherCompoundCRS->componentReferenceSystems(); if (components.size() != otherComponents.size()) { return false; } for (size_t i = 0; i < components.size(); i++) { if (!components[i]->_isEquivalentTo(otherComponents[i].get(), criterion, dbContext)) { return false; } } return true; } // --------------------------------------------------------------------------- /** \brief Identify the CRS with reference CRSs. * * The candidate CRSs are looked in the database when * authorityFactory is not null. * * Note that the implementation uses a set of heuristics to have a good * compromise of successful identifications over execution time. It might miss * legitimate matches in some circumstances. * * The method returns a list of matching reference CRS, and the percentage * (0-100) of confidence in the match. The list is sorted by decreasing * confidence. * * 100% means that the name of the reference entry * perfectly matches the CRS name, and both are equivalent. In which case a * single result is returned. * 90% means that CRS are equivalent, but the names are not exactly the same. * 70% means that CRS are equivalent (equivalent horizontal and vertical CRS), * but the names are not equivalent. * 25% means that the CRS are not equivalent, but there is some similarity in * the names. * * @param authorityFactory Authority factory (if null, will return an empty * list) * @return a list of matching reference CRS, and the percentage (0-100) of * confidence in the match. */ std::list> CompoundCRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; const auto &thisName(nameStr()); const auto &components = componentReferenceSystems(); bool l_implicitCS = components[0]->hasImplicitCS(); if (!l_implicitCS) { const auto projCRS = dynamic_cast(components[0].get()); if (projCRS) { l_implicitCS = projCRS->baseCRS()->hasImplicitCS(); } } const auto crsCriterion = l_implicitCS ? util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS : util::IComparable::Criterion::EQUIVALENT; if (authorityFactory) { const io::DatabaseContextNNPtr &dbContext = authorityFactory->databaseContext(); const bool insignificantName = thisName.empty() || ci_equal(thisName, "unknown") || ci_equal(thisName, "unnamed"); bool foundEquivalentName = false; if (hasCodeCompatibleOfAuthorityFactory(this, authorityFactory)) { // If the CRS has already an id, check in the database for the // official object, and verify that they are equivalent. for (const auto &id : identifiers()) { if (hasCodeCompatibleOfAuthorityFactory(id, authorityFactory)) { try { auto crs = io::AuthorityFactory::create( dbContext, *id->codeSpace()) ->createCompoundCRS(id->code()); bool match = _isEquivalentTo(crs.get(), crsCriterion, dbContext); res.emplace_back(crs, match ? 100 : 25); return res; } catch (const std::exception &) { } } } } else if (!insignificantName) { for (int ipass = 0; ipass < 2; ipass++) { const bool approximateMatch = ipass == 1; auto objects = authorityFactory->createObjectsFromName( thisName, {io::AuthorityFactory::ObjectType::COMPOUND_CRS}, approximateMatch); for (const auto &obj : objects) { auto crs = util::nn_dynamic_pointer_cast(obj); assert(crs); auto crsNN = NN_NO_CHECK(crs); const bool eqName = metadata::Identifier::isEquivalentName( thisName.c_str(), crs->nameStr().c_str()); foundEquivalentName |= eqName; if (_isEquivalentTo(crs.get(), crsCriterion, dbContext)) { if (crs->nameStr() == thisName) { res.clear(); res.emplace_back(crsNN, 100); return res; } res.emplace_back(crsNN, eqName ? 90 : 70); } else { res.emplace_back(crsNN, 25); } } if (!res.empty()) { break; } } } const auto lambdaSort = [&thisName](const Pair &a, const Pair &b) { // First consider confidence if (a.second > b.second) { return true; } if (a.second < b.second) { return false; } // Then consider exact name matching const auto &aName(a.first->nameStr()); const auto &bName(b.first->nameStr()); if (aName == thisName && bName != thisName) { return true; } if (bName == thisName && aName != thisName) { return false; } // Arbitrary final sorting criterion return aName < bName; }; // Sort results res.sort(lambdaSort); if (identifiers().empty() && !foundEquivalentName && (res.empty() || res.front().second < 50)) { std::set> alreadyKnown; for (const auto &pair : res) { const auto &ids = pair.first->identifiers(); assert(!ids.empty()); alreadyKnown.insert(std::pair( *(ids[0]->codeSpace()), ids[0]->code())); } auto self = NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); auto candidates = authorityFactory->createCompoundCRSFromExisting(self); for (const auto &crs : candidates) { const auto &ids = crs->identifiers(); assert(!ids.empty()); if (alreadyKnown.find(std::pair( *(ids[0]->codeSpace()), ids[0]->code())) != alreadyKnown.end()) { continue; } if (_isEquivalentTo(crs.get(), crsCriterion, dbContext)) { res.emplace_back(crs, insignificantName ? 90 : 70); } else { res.emplace_back(crs, 25); } } res.sort(lambdaSort); // If there's a single candidate at 90% confidence with same name, // then promote it to 100% if (res.size() == 1 && res.front().second == 90 && thisName == res.front().first->nameStr()) { res.front().second = 100; } } // If we didn't find a match for the CompoundCRS, check if the // horizontal and vertical parts are not themselves well known. if (identifiers().empty() && res.empty() && components.size() == 2) { auto candidatesHorizCRS = components[0]->identify(authorityFactory); auto candidatesVertCRS = components[1]->identify(authorityFactory); if (candidatesHorizCRS.size() == 1 && candidatesVertCRS.size() == 1 && candidatesHorizCRS.front().second >= 70 && candidatesVertCRS.front().second >= 70) { auto newCRS = CompoundCRS::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, candidatesHorizCRS.front().first->nameStr() + " + " + candidatesVertCRS.front().first->nameStr()), {candidatesHorizCRS.front().first, candidatesVertCRS.front().first}); const bool eqName = metadata::Identifier::isEquivalentName( thisName.c_str(), newCRS->nameStr().c_str()); res.emplace_back( newCRS, std::min(thisName == newCRS->nameStr() ? 100 : eqName ? 90 : 70, std::min(candidatesHorizCRS.front().second, candidatesVertCRS.front().second))); } } // Keep only results of the highest confidence if (res.size() >= 2) { const auto highestConfidence = res.front().second; std::list newRes; for (const auto &pair : res) { if (pair.second == highestConfidence) { newRes.push_back(pair); } else { break; } } return newRes; } } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> CompoundCRS::_identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; auto resTemp = identify(authorityFactory); for (const auto &pair : resTemp) { res.emplace_back(pair.first, pair.second); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PROJ_INTERNAL BoundCRS::Private { CRSNNPtr baseCRS_; CRSNNPtr hubCRS_; operation::TransformationNNPtr transformation_; Private(const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn); inline const CRSNNPtr &baseCRS() const { return baseCRS_; } inline const CRSNNPtr &hubCRS() const { return hubCRS_; } inline const operation::TransformationNNPtr &transformation() const { return transformation_; } }; BoundCRS::Private::Private( const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn) : baseCRS_(baseCRSIn), hubCRS_(hubCRSIn), transformation_(transformationIn) {} //! @endcond // --------------------------------------------------------------------------- BoundCRS::BoundCRS(const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn) : d(std::make_unique(baseCRSIn, hubCRSIn, transformationIn)) {} // --------------------------------------------------------------------------- BoundCRS::BoundCRS(const BoundCRS &other) : CRS(other), d(std::make_unique(other.d->baseCRS(), other.d->hubCRS(), other.d->transformation())) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress BoundCRS::~BoundCRS() = default; //! @endcond // --------------------------------------------------------------------------- BoundCRSNNPtr BoundCRS::shallowCloneAsBoundCRS() const { auto crs(BoundCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- CRSNNPtr BoundCRS::_shallowClone() const { return shallowCloneAsBoundCRS(); } // --------------------------------------------------------------------------- /** \brief Return the base CRS. * * This is the CRS into which coordinates of the BoundCRS are expressed. * * @return the base CRS. */ const CRSNNPtr &BoundCRS::baseCRS() PROJ_PURE_DEFN { return d->baseCRS_; } // --------------------------------------------------------------------------- // The only legit caller is BoundCRS::baseCRSWithCanonicalBoundCRS() void CRS::setCanonicalBoundCRS(const BoundCRSNNPtr &boundCRS) { d->canonicalBoundCRS_ = boundCRS; } // --------------------------------------------------------------------------- /** \brief Return a shallow clone of the base CRS that points to a * shallow clone of this BoundCRS. * * The base CRS is the CRS into which coordinates of the BoundCRS are expressed. * * The returned CRS will actually be a shallow clone of the actual base CRS, * with the extra property that CRS::canonicalBoundCRS() will point to a * shallow clone of this BoundCRS. Use this only if you want to work with * the base CRS object rather than the BoundCRS, but wanting to be able to * retrieve the BoundCRS later. * * @return the base CRS. */ CRSNNPtr BoundCRS::baseCRSWithCanonicalBoundCRS() const { auto baseCRSClone = baseCRS()->_shallowClone(); baseCRSClone->setCanonicalBoundCRS(shallowCloneAsBoundCRS()); return baseCRSClone; } // --------------------------------------------------------------------------- /** \brief Return the target / hub CRS. * * @return the hub CRS. */ const CRSNNPtr &BoundCRS::hubCRS() PROJ_PURE_DEFN { return d->hubCRS_; } // --------------------------------------------------------------------------- /** \brief Return the transformation to the hub RS. * * @return transformation. */ const operation::TransformationNNPtr & BoundCRS::transformation() PROJ_PURE_DEFN { return d->transformation_; } // --------------------------------------------------------------------------- /** \brief Instantiate a BoundCRS from a base CRS, a hub CRS and a * transformation. * * @param properties See \ref general_properties. * @param baseCRSIn base CRS. * @param hubCRSIn hub CRS. * @param transformationIn transformation from base CRS to hub CRS. * @return new BoundCRS. * @since PROJ 8.2 */ BoundCRSNNPtr BoundCRS::create(const util::PropertyMap &properties, const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn) { auto crs = BoundCRS::nn_make_shared(baseCRSIn, hubCRSIn, transformationIn); crs->assignSelf(crs); const auto &l_name = baseCRSIn->nameStr(); if (properties.get(common::IdentifiedObject::NAME_KEY) == nullptr && !l_name.empty()) { auto newProperties(properties); newProperties.set(common::IdentifiedObject::NAME_KEY, l_name); crs->setProperties(newProperties); } else { crs->setProperties(properties); } return crs; } // --------------------------------------------------------------------------- /** \brief Instantiate a BoundCRS from a base CRS, a hub CRS and a * transformation. * * @param baseCRSIn base CRS. * @param hubCRSIn hub CRS. * @param transformationIn transformation from base CRS to hub CRS. * @return new BoundCRS. */ BoundCRSNNPtr BoundCRS::create(const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn, const operation::TransformationNNPtr &transformationIn) { return create(util::PropertyMap(), baseCRSIn, hubCRSIn, transformationIn); } // --------------------------------------------------------------------------- /** \brief Instantiate a BoundCRS from a base CRS and TOWGS84 parameters * * @param baseCRSIn base CRS. * @param TOWGS84Parameters a vector of 3 or 7 double values representing WKT1 * TOWGS84 parameter. * @return new BoundCRS. */ BoundCRSNNPtr BoundCRS::createFromTOWGS84(const CRSNNPtr &baseCRSIn, const std::vector &TOWGS84Parameters) { auto transf = operation::Transformation::createTOWGS84(baseCRSIn, TOWGS84Parameters); return create(baseCRSIn, transf->targetCRS(), transf); } // --------------------------------------------------------------------------- /** \brief Instantiate a BoundCRS from a base CRS and nadgrids parameters * * @param baseCRSIn base CRS. * @param filename Horizontal grid filename * @return new BoundCRS. */ BoundCRSNNPtr BoundCRS::createFromNadgrids(const CRSNNPtr &baseCRSIn, const std::string &filename) { const auto sourceGeographicCRS = baseCRSIn->extractGeographicCRS(); auto transformationSourceCRS = sourceGeographicCRS ? NN_NO_CHECK(std::static_pointer_cast(sourceGeographicCRS)) : baseCRSIn; if (sourceGeographicCRS != nullptr && sourceGeographicCRS->primeMeridian()->longitude().getSIValue() != 0.0) { transformationSourceCRS = GeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, sourceGeographicCRS->nameStr() + " (with Greenwich prime meridian)"), datum::GeodeticReferenceFrame::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, sourceGeographicCRS->datumNonNull(nullptr)->nameStr() + " (with Greenwich prime meridian)"), sourceGeographicCRS->datumNonNull(nullptr)->ellipsoid(), util::optional(), datum::PrimeMeridian::GREENWICH), cs::EllipsoidalCS::createLatitudeLongitude( common::UnitOfMeasure::DEGREE)); } std::string transformationName = transformationSourceCRS->nameStr(); transformationName += " to WGS84"; return create( baseCRSIn, GeographicCRS::EPSG_4326, operation::Transformation::createNTv2( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, transformationName), transformationSourceCRS, GeographicCRS::EPSG_4326, filename, std::vector())); } // --------------------------------------------------------------------------- bool BoundCRS::isTOWGS84Compatible() const { return dynamic_cast(d->hubCRS().get()) != nullptr && ci_equal(d->hubCRS()->nameStr(), "WGS 84"); } // --------------------------------------------------------------------------- std::string BoundCRS::getHDatumPROJ4GRIDS( const io::DatabaseContextPtr &databaseContext) const { if (ci_equal(d->hubCRS()->nameStr(), "WGS 84")) { if (databaseContext) { return d->transformation() ->substitutePROJAlternativeGridNames( NN_NO_CHECK(databaseContext)) ->getPROJ4NadgridsCompatibleFilename(); } return d->transformation()->getPROJ4NadgridsCompatibleFilename(); } return std::string(); } // --------------------------------------------------------------------------- std::string BoundCRS::getVDatumPROJ4GRIDS(const crs::GeographicCRS *geogCRSOfCompoundCRS, const char **outGeoidCRSValue) const { // When importing from WKT1 PROJ4_GRIDS extension, we used to hardcode // "WGS 84" as the hub CRS, so let's test that for backward compatibility. if (dynamic_cast(d->baseCRS().get()) && ci_equal(d->hubCRS()->nameStr(), "WGS 84")) { if (outGeoidCRSValue) *outGeoidCRSValue = "WGS84"; return d->transformation()->getHeightToGeographic3DFilename(); } else if (geogCRSOfCompoundCRS && dynamic_cast(d->baseCRS().get()) && ci_equal(d->hubCRS()->nameStr(), geogCRSOfCompoundCRS->nameStr())) { if (outGeoidCRSValue) *outGeoidCRSValue = "horizontal_crs"; return d->transformation()->getHeightToGeographic3DFilename(); } return std::string(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void BoundCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (isWKT2) { formatter->startNode(io::WKTConstants::BOUNDCRS, false); formatter->startNode(io::WKTConstants::SOURCECRS, false); d->baseCRS()->_exportToWKT(formatter); formatter->endNode(); formatter->startNode(io::WKTConstants::TARGETCRS, false); d->hubCRS()->_exportToWKT(formatter); formatter->endNode(); formatter->setAbridgedTransformation(true); d->transformation()->_exportToWKT(formatter); formatter->setAbridgedTransformation(false); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } else { auto vdatumProj4GridName = getVDatumPROJ4GRIDS( formatter->getGeogCRSOfCompoundCRS().get(), nullptr); if (!vdatumProj4GridName.empty()) { formatter->setVDatumExtension(vdatumProj4GridName); d->baseCRS()->_exportToWKT(formatter); formatter->setVDatumExtension(std::string()); return; } auto hdatumProj4GridName = getHDatumPROJ4GRIDS(formatter->databaseContext()); if (!hdatumProj4GridName.empty()) { formatter->setHDatumExtension(hdatumProj4GridName); d->baseCRS()->_exportToWKT(formatter); formatter->setHDatumExtension(std::string()); return; } if (!isTOWGS84Compatible()) { io::FormattingException::Throw( "Cannot export BoundCRS with non-WGS 84 hub CRS in WKT1"); } auto params = d->transformation()->getTOWGS84Parameters(true); if (!formatter->useESRIDialect()) { formatter->setTOWGS84Parameters(params); } d->baseCRS()->_exportToWKT(formatter); formatter->setTOWGS84Parameters(std::vector()); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void BoundCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); const auto &l_name = nameStr(); auto objectContext(formatter->MakeObjectContext("BoundCRS", false)); const auto &l_sourceCRS = d->baseCRS(); if (!l_name.empty() && l_name != l_sourceCRS->nameStr()) { writer->AddObjKey("name"); writer->Add(l_name); } writer->AddObjKey("source_crs"); l_sourceCRS->_exportToJSON(formatter); writer->AddObjKey("target_crs"); const auto &l_targetCRS = d->hubCRS(); l_targetCRS->_exportToJSON(formatter); writer->AddObjKey("transformation"); formatter->setOmitTypeInImmediateChild(); formatter->setAbridgedTransformation(true); // Only write the source_crs of the transformation if it is different from // the source_crs of the BoundCRS. But don't do it for projectedCRS if its // base CRS matches the source_crs of the transformation and the targetCRS // is geographic const auto sourceCRSAsProjectedCRS = dynamic_cast(l_sourceCRS.get()); if (!l_sourceCRS->_isEquivalentTo( d->transformation()->sourceCRS().get(), util::IComparable::Criterion::EQUIVALENT) && (sourceCRSAsProjectedCRS == nullptr || (dynamic_cast(l_targetCRS.get()) && !sourceCRSAsProjectedCRS->baseCRS()->_isEquivalentTo( d->transformation()->sourceCRS().get(), util::IComparable::Criterion::EQUIVALENT)))) { formatter->setAbridgedTransformationWriteSourceCRS(true); } d->transformation()->_exportToJSON(formatter); formatter->setAbridgedTransformation(false); formatter->setAbridgedTransformationWriteSourceCRS(false); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- void BoundCRS::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { auto crs_exportable = dynamic_cast(d->baseCRS_.get()); if (!crs_exportable) { io::FormattingException::Throw( "baseCRS of BoundCRS cannot be exported as a PROJ string"); } const char *geoidCRSValue = ""; auto vdatumProj4GridName = getVDatumPROJ4GRIDS( formatter->getGeogCRSOfCompoundCRS().get(), &geoidCRSValue); if (!vdatumProj4GridName.empty()) { formatter->setVDatumExtension(vdatumProj4GridName, geoidCRSValue); crs_exportable->_exportToPROJString(formatter); formatter->setVDatumExtension(std::string(), std::string()); } else { auto hdatumProj4GridName = getHDatumPROJ4GRIDS(formatter->databaseContext()); if (!hdatumProj4GridName.empty()) { formatter->setHDatumExtension(hdatumProj4GridName); crs_exportable->_exportToPROJString(formatter); formatter->setHDatumExtension(std::string()); } else { if (isTOWGS84Compatible()) { auto params = transformation()->getTOWGS84Parameters(true); formatter->setTOWGS84Parameters(params); } crs_exportable->_exportToPROJString(formatter); formatter->setTOWGS84Parameters(std::vector()); } } } // --------------------------------------------------------------------------- bool BoundCRS::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherBoundCRS = dynamic_cast(other); if (otherBoundCRS == nullptr || (criterion == util::IComparable::Criterion::STRICT && !ObjectUsage::_isEquivalentTo(other, criterion, dbContext))) { return false; } const auto standardCriterion = getStandardCriterion(criterion); return d->baseCRS_->_isEquivalentTo(otherBoundCRS->d->baseCRS_.get(), criterion, dbContext) && d->hubCRS_->_isEquivalentTo(otherBoundCRS->d->hubCRS_.get(), criterion, dbContext) && d->transformation_->_isEquivalentTo( otherBoundCRS->d->transformation_.get(), standardCriterion, dbContext); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> BoundCRS::_identify(const io::AuthorityFactoryPtr &authorityFactory) const { typedef std::pair Pair; std::list res; if (!authorityFactory) return res; std::list resMatchOfTransfToWGS84; const io::DatabaseContextNNPtr &dbContext = authorityFactory->databaseContext(); if (d->hubCRS_->_isEquivalentTo(GeographicCRS::EPSG_4326.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { auto resTemp = d->baseCRS_->identify(authorityFactory); std::string refTransfPROJString; bool refTransfPROJStringValid = false; auto refTransf = d->transformation_->normalizeForVisualization(); try { refTransfPROJString = refTransf->exportToPROJString( io::PROJStringFormatter::create().get()); refTransfPROJString = replaceAll( refTransfPROJString, " +rx=0 +ry=0 +rz=0 +s=0 +convention=position_vector", ""); refTransfPROJStringValid = true; } catch (const std::exception &) { } bool refIsNullTransform = false; if (isTOWGS84Compatible()) { auto params = transformation()->getTOWGS84Parameters(true); if (params == std::vector{0, 0, 0, 0, 0, 0, 0}) { refIsNullTransform = true; } } for (const auto &pair : resTemp) { const auto &candidateBaseCRS = pair.first; auto projCRS = dynamic_cast(candidateBaseCRS.get()); auto geodCRS = projCRS ? projCRS->baseCRS().as_nullable() : util::nn_dynamic_pointer_cast( candidateBaseCRS); if (geodCRS) { auto context = operation::CoordinateOperationContext::create( authorityFactory, nullptr, 0.0); context->setSpatialCriterion( operation::CoordinateOperationContext::SpatialCriterion:: PARTIAL_INTERSECTION); auto ops = operation::CoordinateOperationFactory::create() ->createOperations(NN_NO_CHECK(geodCRS), GeographicCRS::EPSG_4326, context); bool foundOp = false; for (const auto &op : ops) { auto opNormalized = op->normalizeForVisualization(); std::string opTransfPROJString; bool opTransfPROJStringValid = false; const auto &opName = op->nameStr(); if (starts_with( opName, operation::BALLPARK_GEOCENTRIC_TRANSLATION) || starts_with(opName, operation::NULL_GEOGRAPHIC_OFFSET)) { if (refIsNullTransform) { res.emplace_back(create(candidateBaseCRS, d->hubCRS_, transformation()), pair.second); foundOp = true; break; } continue; } try { opTransfPROJString = opNormalized->exportToPROJString( io::PROJStringFormatter::create().get()); opTransfPROJStringValid = true; opTransfPROJString = replaceAll(opTransfPROJString, " +rx=0 +ry=0 +rz=0 +s=0 " "+convention=position_vector", ""); } catch (const std::exception &) { } if ((refTransfPROJStringValid && opTransfPROJStringValid && refTransfPROJString == opTransfPROJString) || opNormalized->_isEquivalentTo( refTransf.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { resMatchOfTransfToWGS84.emplace_back( create(candidateBaseCRS, d->hubCRS_, NN_NO_CHECK(util::nn_dynamic_pointer_cast< operation::Transformation>(op))), pair.second); foundOp = true; break; } } if (!foundOp) { res.emplace_back( create(candidateBaseCRS, d->hubCRS_, transformation()), std::min(70, pair.second)); } } } } return !resMatchOfTransfToWGS84.empty() ? resMatchOfTransfToWGS84 : res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DerivedGeodeticCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DerivedGeodeticCRS::~DerivedGeodeticCRS() = default; //! @endcond // --------------------------------------------------------------------------- DerivedGeodeticCRS::DerivedGeodeticCRS( const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn) : SingleCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), GeodeticCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), DerivedCRS(baseCRSIn, derivingConversionIn, csIn), d(nullptr) {} // --------------------------------------------------------------------------- DerivedGeodeticCRS::DerivedGeodeticCRS( const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::SphericalCSNNPtr &csIn) : SingleCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), GeodeticCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), DerivedCRS(baseCRSIn, derivingConversionIn, csIn), d(nullptr) {} // --------------------------------------------------------------------------- DerivedGeodeticCRS::DerivedGeodeticCRS(const DerivedGeodeticCRS &other) : SingleCRS(other), GeodeticCRS(other), DerivedCRS(other), d(nullptr) {} // --------------------------------------------------------------------------- CRSNNPtr DerivedGeodeticCRS::_shallowClone() const { auto crs(DerivedGeodeticCRS::nn_make_shared(*this)); crs->assignSelf(crs); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- /** \brief Return the base CRS (a GeodeticCRS) of a DerivedGeodeticCRS. * * @return the base CRS. */ const GeodeticCRSNNPtr DerivedGeodeticCRS::baseCRS() const { return NN_NO_CHECK(util::nn_dynamic_pointer_cast( DerivedCRS::getPrivate()->baseCRS_)); } // --------------------------------------------------------------------------- /** \brief Instantiate a DerivedGeodeticCRS from a base CRS, a deriving * conversion and a cs::CartesianCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param baseCRSIn base CRS. * @param derivingConversionIn the deriving conversion from the base CRS to this * CRS. * @param csIn the coordinate system. * @return new DerivedGeodeticCRS. */ DerivedGeodeticCRSNNPtr DerivedGeodeticCRS::create( const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CartesianCSNNPtr &csIn) { auto crs(DerivedGeodeticCRS::nn_make_shared( baseCRSIn, derivingConversionIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- /** \brief Instantiate a DerivedGeodeticCRS from a base CRS, a deriving * conversion and a cs::SphericalCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param baseCRSIn base CRS. * @param derivingConversionIn the deriving conversion from the base CRS to this * CRS. * @param csIn the coordinate system. * @return new DerivedGeodeticCRS. */ DerivedGeodeticCRSNNPtr DerivedGeodeticCRS::create( const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::SphericalCSNNPtr &csIn) { auto crs(DerivedGeodeticCRS::nn_make_shared( baseCRSIn, derivingConversionIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DerivedGeodeticCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { io::FormattingException::Throw( "DerivedGeodeticCRS can only be exported to WKT2"); } formatter->startNode(io::WKTConstants::GEODCRS, !identifiers().empty()); formatter->addQuotedString(nameStr()); auto l_baseCRS = baseCRS(); formatter->startNode((formatter->use2019Keywords() && dynamic_cast(l_baseCRS.get())) ? io::WKTConstants::BASEGEOGCRS : io::WKTConstants::BASEGEODCRS, !baseCRS()->identifiers().empty()); formatter->addQuotedString(l_baseCRS->nameStr()); auto l_datum = l_baseCRS->datum(); if (l_datum) { l_datum->_exportToWKT(formatter); } else { auto l_datumEnsemble = datumEnsemble(); assert(l_datumEnsemble); l_datumEnsemble->_exportToWKT(formatter); } l_baseCRS->primeMeridian()->_exportToWKT(formatter); formatter->endNode(); formatter->setUseDerivingConversion(true); derivingConversionRef()->_exportToWKT(formatter); formatter->setUseDerivingConversion(false); coordinateSystem()->_exportToWKT(formatter); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- void DerivedGeodeticCRS::_exportToPROJString( io::PROJStringFormatter *) const // throw(io::FormattingException) { throw io::FormattingException( "DerivedGeodeticCRS cannot be exported to PROJ string"); } // --------------------------------------------------------------------------- bool DerivedGeodeticCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDerivedCRS = dynamic_cast(other); return otherDerivedCRS != nullptr && DerivedCRS::_isEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> DerivedGeodeticCRS::_identify(const io::AuthorityFactoryPtr &factory) const { return CRS::_identify(factory); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DerivedGeographicCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DerivedGeographicCRS::~DerivedGeographicCRS() = default; //! @endcond // --------------------------------------------------------------------------- DerivedGeographicCRS::DerivedGeographicCRS( const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::EllipsoidalCSNNPtr &csIn) : SingleCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), GeographicCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), DerivedCRS(baseCRSIn, derivingConversionIn, csIn), d(nullptr) {} // --------------------------------------------------------------------------- DerivedGeographicCRS::DerivedGeographicCRS(const DerivedGeographicCRS &other) : SingleCRS(other), GeographicCRS(other), DerivedCRS(other), d(nullptr) {} // --------------------------------------------------------------------------- CRSNNPtr DerivedGeographicCRS::_shallowClone() const { auto crs(DerivedGeographicCRS::nn_make_shared(*this)); crs->assignSelf(crs); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- /** \brief Return the base CRS (a GeodeticCRS) of a DerivedGeographicCRS. * * @return the base CRS. */ const GeodeticCRSNNPtr DerivedGeographicCRS::baseCRS() const { return NN_NO_CHECK(util::nn_dynamic_pointer_cast( DerivedCRS::getPrivate()->baseCRS_)); } // --------------------------------------------------------------------------- /** \brief Instantiate a DerivedGeographicCRS from a base CRS, a deriving * conversion and a cs::EllipsoidalCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param baseCRSIn base CRS. * @param derivingConversionIn the deriving conversion from the base CRS to this * CRS. * @param csIn the coordinate system. * @return new DerivedGeographicCRS. */ DerivedGeographicCRSNNPtr DerivedGeographicCRS::create( const util::PropertyMap &properties, const GeodeticCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::EllipsoidalCSNNPtr &csIn) { auto crs(DerivedGeographicCRS::nn_make_shared( baseCRSIn, derivingConversionIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DerivedGeographicCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { io::FormattingException::Throw( "DerivedGeographicCRS can only be exported to WKT2"); } formatter->startNode(formatter->use2019Keywords() ? io::WKTConstants::GEOGCRS : io::WKTConstants::GEODCRS, !identifiers().empty()); formatter->addQuotedString(nameStr()); auto l_baseCRS = baseCRS(); formatter->startNode((formatter->use2019Keywords() && dynamic_cast(l_baseCRS.get())) ? io::WKTConstants::BASEGEOGCRS : io::WKTConstants::BASEGEODCRS, !l_baseCRS->identifiers().empty()); formatter->addQuotedString(l_baseCRS->nameStr()); l_baseCRS->exportDatumOrDatumEnsembleToWkt(formatter); l_baseCRS->primeMeridian()->_exportToWKT(formatter); formatter->endNode(); formatter->setUseDerivingConversion(true); derivingConversionRef()->_exportToWKT(formatter); formatter->setUseDerivingConversion(false); coordinateSystem()->_exportToWKT(formatter); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- void DerivedGeographicCRS::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(io::FormattingException) { const auto &l_conv = derivingConversionRef(); const auto &methodName = l_conv->method()->nameStr(); for (const char *substr : {"PROJ ob_tran o_proj=longlat", "PROJ ob_tran o_proj=lonlat", "PROJ ob_tran o_proj=latlon", "PROJ ob_tran o_proj=latlong"}) { if (starts_with(methodName, substr)) { l_conv->_exportToPROJString(formatter); return; } } if (ci_equal(methodName, PROJ_WKT2_NAME_METHOD_POLE_ROTATION_GRIB_CONVENTION) || ci_equal(methodName, PROJ_WKT2_NAME_METHOD_POLE_ROTATION_NETCDF_CF_CONVENTION)) { l_conv->_exportToPROJString(formatter); return; } throw io::FormattingException( "DerivedGeographicCRS cannot be exported to PROJ string"); } // --------------------------------------------------------------------------- bool DerivedGeographicCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDerivedCRS = dynamic_cast(other); return otherDerivedCRS != nullptr && DerivedCRS::_isEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- /** \brief Return a variant of this CRS "demoted" to a 2D one, if not already * the case. * * * @param newName Name of the new CRS. If empty, nameStr() will be used. * @param dbContext Database context to look for potentially already registered * 2D CRS. May be nullptr. * @return a new CRS demoted to 2D, or the current one if already 2D or not * applicable. * @since 8.1.1 */ DerivedGeographicCRSNNPtr DerivedGeographicCRS::demoteTo2D( const std::string &newName, const io::DatabaseContextPtr &dbContext) const { const auto &axisList = coordinateSystem()->axisList(); if (axisList.size() == 3) { auto cs = cs::EllipsoidalCS::create(util::PropertyMap(), axisList[0], axisList[1]); auto baseGeog2DCRS = util::nn_dynamic_pointer_cast( baseCRS()->demoteTo2D(std::string(), dbContext)); return DerivedGeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, !newName.empty() ? newName : nameStr()), NN_CHECK_THROW(std::move(baseGeog2DCRS)), derivingConversion(), std::move(cs)); } return NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> DerivedGeographicCRS::_identify(const io::AuthorityFactoryPtr &factory) const { return CRS::_identify(factory); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DerivedProjectedCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DerivedProjectedCRS::~DerivedProjectedCRS() = default; //! @endcond // --------------------------------------------------------------------------- DerivedProjectedCRS::DerivedProjectedCRS( const ProjectedCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CoordinateSystemNNPtr &csIn) : SingleCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), DerivedCRS(baseCRSIn, derivingConversionIn, csIn), d(nullptr) {} // --------------------------------------------------------------------------- DerivedProjectedCRS::DerivedProjectedCRS(const DerivedProjectedCRS &other) : SingleCRS(other), DerivedCRS(other), d(nullptr) {} // --------------------------------------------------------------------------- CRSNNPtr DerivedProjectedCRS::_shallowClone() const { auto crs(DerivedProjectedCRS::nn_make_shared(*this)); crs->assignSelf(crs); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- /** \brief Return the base CRS (a ProjectedCRS) of a DerivedProjectedCRS. * * @return the base CRS. */ const ProjectedCRSNNPtr DerivedProjectedCRS::baseCRS() const { return NN_NO_CHECK(util::nn_dynamic_pointer_cast( DerivedCRS::getPrivate()->baseCRS_)); } // --------------------------------------------------------------------------- /** \brief Instantiate a DerivedProjectedCRS from a base CRS, a deriving * conversion and a cs::CS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param baseCRSIn base CRS. * @param derivingConversionIn the deriving conversion from the base CRS to this * CRS. * @param csIn the coordinate system. * @return new DerivedProjectedCRS. */ DerivedProjectedCRSNNPtr DerivedProjectedCRS::create( const util::PropertyMap &properties, const ProjectedCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::CoordinateSystemNNPtr &csIn) { auto crs(DerivedProjectedCRS::nn_make_shared( baseCRSIn, derivingConversionIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- /** \brief Return a variant of this CRS "demoted" to a 2D one, if not already * the case. * * * @param newName Name of the new CRS. If empty, nameStr() will be used. * @param dbContext Database context to look for potentially already registered * 2D CRS. May be nullptr. * @return a new CRS demoted to 2D, or the current one if already 2D or not * applicable. * @since 9.1.1 */ DerivedProjectedCRSNNPtr DerivedProjectedCRS::demoteTo2D(const std::string &newName, const io::DatabaseContextPtr &dbContext) const { const auto &axisList = coordinateSystem()->axisList(); if (axisList.size() == 3) { auto cs = cs::CartesianCS::create(util::PropertyMap(), axisList[0], axisList[1]); auto baseProj2DCRS = util::nn_dynamic_pointer_cast( baseCRS()->demoteTo2D(std::string(), dbContext)); return DerivedProjectedCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, !newName.empty() ? newName : nameStr()), NN_CHECK_THROW(std::move(baseProj2DCRS)), derivingConversion(), std::move(cs)); } return NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DerivedProjectedCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2 || !formatter->use2019Keywords()) { io::FormattingException::Throw( "DerivedProjectedCRS can only be exported to WKT2:2019"); } formatter->startNode(io::WKTConstants::DERIVEDPROJCRS, !identifiers().empty()); formatter->addQuotedString(nameStr()); { auto l_baseProjCRS = baseCRS(); formatter->startNode(io::WKTConstants::BASEPROJCRS, !l_baseProjCRS->identifiers().empty()); formatter->addQuotedString(l_baseProjCRS->nameStr()); auto l_baseGeodCRS = l_baseProjCRS->baseCRS(); auto &geodeticCRSAxisList = l_baseGeodCRS->coordinateSystem()->axisList(); formatter->startNode( dynamic_cast(l_baseGeodCRS.get()) ? io::WKTConstants::BASEGEOGCRS : io::WKTConstants::BASEGEODCRS, !l_baseGeodCRS->identifiers().empty()); formatter->addQuotedString(l_baseGeodCRS->nameStr()); l_baseGeodCRS->exportDatumOrDatumEnsembleToWkt(formatter); // insert ellipsoidal cs unit when the units of the map // projection angular parameters are not explicitly given within those // parameters. See // http://docs.opengeospatial.org/is/12-063r5/12-063r5.html#61 if (formatter->primeMeridianOrParameterUnitOmittedIfSameAsAxis() && !geodeticCRSAxisList.empty()) { geodeticCRSAxisList[0]->unit()._exportToWKT(formatter); } l_baseGeodCRS->primeMeridian()->_exportToWKT(formatter); formatter->endNode(); l_baseProjCRS->derivingConversionRef()->_exportToWKT(formatter); const auto &baseCSAxisList = l_baseProjCRS->coordinateSystem()->axisList(); // Current WKT grammar (as of WKT2 18-010r11) does not allow a // BASEPROJCRS.CS node, but in situations where this is ambiguous, emit // one. Cf WKTParser::Private::buildProjectedCRS() for more details if (!baseCSAxisList.empty() && baseCSAxisList[0]->unit() != common::UnitOfMeasure::METRE && l_baseProjCRS->identifiers().empty()) { bool knownBaseCRS = false; auto &dbContext = formatter->databaseContext(); if (dbContext) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), std::string()); auto res = authFactory->createObjectsFromName( l_baseProjCRS->nameStr(), {io::AuthorityFactory::ObjectType::PROJECTED_CRS}, false, 2); if (res.size() == 1) { knownBaseCRS = true; } } if (!knownBaseCRS) { l_baseProjCRS->coordinateSystem()->_exportToWKT(formatter); } } if (identifiers().empty() && !l_baseProjCRS->identifiers().empty()) { l_baseProjCRS->formatID(formatter); } formatter->endNode(); } formatter->setUseDerivingConversion(true); derivingConversionRef()->_exportToWKT(formatter); formatter->setUseDerivingConversion(false); coordinateSystem()->_exportToWKT(formatter); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- bool DerivedProjectedCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDerivedCRS = dynamic_cast(other); return otherDerivedCRS != nullptr && DerivedCRS::_isEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DerivedProjectedCRS::addUnitConvertAndAxisSwap( io::PROJStringFormatter *formatter) const { ProjectedCRS::addUnitConvertAndAxisSwap(coordinateSystem()->axisList(), formatter, false); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct TemporalCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TemporalCRS::~TemporalCRS() = default; //! @endcond // --------------------------------------------------------------------------- TemporalCRS::TemporalCRS(const datum::TemporalDatumNNPtr &datumIn, const cs::TemporalCSNNPtr &csIn) : SingleCRS(datumIn.as_nullable(), nullptr, csIn), d(nullptr) {} // --------------------------------------------------------------------------- TemporalCRS::TemporalCRS(const TemporalCRS &other) : SingleCRS(other), d(nullptr) {} // --------------------------------------------------------------------------- CRSNNPtr TemporalCRS::_shallowClone() const { auto crs(TemporalCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- /** \brief Return the datum::TemporalDatum associated with the CRS. * * @return a TemporalDatum */ const datum::TemporalDatumNNPtr TemporalCRS::datum() const { return NN_NO_CHECK(std::static_pointer_cast( SingleCRS::getPrivate()->datum)); } // --------------------------------------------------------------------------- /** \brief Return the cs::TemporalCS associated with the CRS. * * @return a TemporalCS */ const cs::TemporalCSNNPtr TemporalCRS::coordinateSystem() const { return util::nn_static_pointer_cast( SingleCRS::getPrivate()->coordinateSystem); } // --------------------------------------------------------------------------- /** \brief Instantiate a TemporalCRS from a datum and a coordinate system. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datumIn the datum. * @param csIn the coordinate system. * @return new TemporalCRS. */ TemporalCRSNNPtr TemporalCRS::create(const util::PropertyMap &properties, const datum::TemporalDatumNNPtr &datumIn, const cs::TemporalCSNNPtr &csIn) { auto crs(TemporalCRS::nn_make_shared(datumIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void TemporalCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { io::FormattingException::Throw( "TemporalCRS can only be exported to WKT2"); } formatter->startNode(io::WKTConstants::TIMECRS, !identifiers().empty()); formatter->addQuotedString(nameStr()); datum()->_exportToWKT(formatter); coordinateSystem()->_exportToWKT(formatter); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void TemporalCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("TemporalCRS", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("datum"); formatter->setOmitTypeInImmediateChild(); datum()->_exportToJSON(formatter); writer->AddObjKey("coordinate_system"); formatter->setOmitTypeInImmediateChild(); coordinateSystem()->_exportToJSON(formatter); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- bool TemporalCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherTemporalCRS = dynamic_cast(other); return otherTemporalCRS != nullptr && SingleCRS::baseIsEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct EngineeringCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress EngineeringCRS::~EngineeringCRS() = default; //! @endcond // --------------------------------------------------------------------------- EngineeringCRS::EngineeringCRS(const datum::EngineeringDatumNNPtr &datumIn, const cs::CoordinateSystemNNPtr &csIn) : SingleCRS(datumIn.as_nullable(), nullptr, csIn), d(std::make_unique()) {} // --------------------------------------------------------------------------- EngineeringCRS::EngineeringCRS(const EngineeringCRS &other) : SingleCRS(other), d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- CRSNNPtr EngineeringCRS::_shallowClone() const { auto crs(EngineeringCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- /** \brief Return the datum::EngineeringDatum associated with the CRS. * * @return a EngineeringDatum */ const datum::EngineeringDatumNNPtr EngineeringCRS::datum() const { return NN_NO_CHECK(std::static_pointer_cast( SingleCRS::getPrivate()->datum)); } // --------------------------------------------------------------------------- /** \brief Instantiate a EngineeringCRS from a datum and a coordinate system. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datumIn the datum. * @param csIn the coordinate system. * @return new EngineeringCRS. */ EngineeringCRSNNPtr EngineeringCRS::create(const util::PropertyMap &properties, const datum::EngineeringDatumNNPtr &datumIn, const cs::CoordinateSystemNNPtr &csIn) { auto crs(EngineeringCRS::nn_make_shared(datumIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void EngineeringCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; formatter->startNode(isWKT2 ? io::WKTConstants::ENGCRS : io::WKTConstants::LOCAL_CS, !identifiers().empty()); formatter->addQuotedString(nameStr()); const auto &datumName = datum()->nameStr(); if (isWKT2 || (!datumName.empty() && datumName != UNKNOWN_ENGINEERING_DATUM)) { datum()->_exportToWKT(formatter); } if (!isWKT2) { coordinateSystem()->axisList()[0]->unit()._exportToWKT(formatter); } const auto oldAxisOutputRule = formatter->outputAxis(); formatter->setOutputAxis(io::WKTFormatter::OutputAxisRule::YES); coordinateSystem()->_exportToWKT(formatter); formatter->setOutputAxis(oldAxisOutputRule); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void EngineeringCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("EngineeringCRS", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("datum"); formatter->setOmitTypeInImmediateChild(); datum()->_exportToJSON(formatter); writer->AddObjKey("coordinate_system"); formatter->setOmitTypeInImmediateChild(); coordinateSystem()->_exportToJSON(formatter); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- bool EngineeringCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherEngineeringCRS = dynamic_cast(other); if (otherEngineeringCRS == nullptr || (criterion == util::IComparable::Criterion::STRICT && !ObjectUsage::_isEquivalentTo(other, criterion, dbContext))) { return false; } // Check datum const auto &thisDatum = datum(); const auto &otherDatum = otherEngineeringCRS->datum(); if (!thisDatum->_isEquivalentTo(otherDatum.get(), criterion, dbContext)) { return false; } // Check coordinate system const auto &thisCS = coordinateSystem(); const auto &otherCS = otherEngineeringCRS->coordinateSystem(); if (!(thisCS->_isEquivalentTo(otherCS.get(), criterion, dbContext))) { const auto thisCartCS = dynamic_cast(thisCS.get()); const auto otherCartCS = dynamic_cast(otherCS.get()); const auto &thisAxisList = thisCS->axisList(); const auto &otherAxisList = otherCS->axisList(); // Check particular case of // https://github.com/r-spatial/sf/issues/2049#issuecomment-1486600723 if (criterion != util::IComparable::Criterion::STRICT && thisCartCS && otherCartCS && thisAxisList.size() == 2 && otherAxisList.size() == 2 && ((&thisAxisList[0]->direction() == &cs::AxisDirection::UNSPECIFIED && &thisAxisList[1]->direction() == &cs::AxisDirection::UNSPECIFIED) || (&otherAxisList[0]->direction() == &cs::AxisDirection::UNSPECIFIED && &otherAxisList[1]->direction() == &cs::AxisDirection::UNSPECIFIED)) && ((thisAxisList[0]->nameStr() == "X" && otherAxisList[0]->nameStr() == "Easting" && thisAxisList[1]->nameStr() == "Y" && otherAxisList[1]->nameStr() == "Northing") || (otherAxisList[0]->nameStr() == "X" && thisAxisList[0]->nameStr() == "Easting" && otherAxisList[1]->nameStr() == "Y" && thisAxisList[1]->nameStr() == "Northing"))) { return true; } return false; } return true; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ParametricCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ParametricCRS::~ParametricCRS() = default; //! @endcond // --------------------------------------------------------------------------- ParametricCRS::ParametricCRS(const datum::ParametricDatumNNPtr &datumIn, const cs::ParametricCSNNPtr &csIn) : SingleCRS(datumIn.as_nullable(), nullptr, csIn), d(nullptr) {} // --------------------------------------------------------------------------- ParametricCRS::ParametricCRS(const ParametricCRS &other) : SingleCRS(other), d(nullptr) {} // --------------------------------------------------------------------------- CRSNNPtr ParametricCRS::_shallowClone() const { auto crs(ParametricCRS::nn_make_shared(*this)); crs->assignSelf(crs); return crs; } // --------------------------------------------------------------------------- /** \brief Return the datum::ParametricDatum associated with the CRS. * * @return a ParametricDatum */ const datum::ParametricDatumNNPtr ParametricCRS::datum() const { return NN_NO_CHECK(std::static_pointer_cast( SingleCRS::getPrivate()->datum)); } // --------------------------------------------------------------------------- /** \brief Return the cs::TemporalCS associated with the CRS. * * @return a TemporalCS */ const cs::ParametricCSNNPtr ParametricCRS::coordinateSystem() const { return util::nn_static_pointer_cast( SingleCRS::getPrivate()->coordinateSystem); } // --------------------------------------------------------------------------- /** \brief Instantiate a ParametricCRS from a datum and a coordinate system. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datumIn the datum. * @param csIn the coordinate system. * @return new ParametricCRS. */ ParametricCRSNNPtr ParametricCRS::create(const util::PropertyMap &properties, const datum::ParametricDatumNNPtr &datumIn, const cs::ParametricCSNNPtr &csIn) { auto crs(ParametricCRS::nn_make_shared(datumIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ParametricCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { io::FormattingException::Throw( "ParametricCRS can only be exported to WKT2"); } formatter->startNode(io::WKTConstants::PARAMETRICCRS, !identifiers().empty()); formatter->addQuotedString(nameStr()); datum()->_exportToWKT(formatter); coordinateSystem()->_exportToWKT(formatter); ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ParametricCRS::_exportToJSON( io::JSONFormatter *formatter) const // throw(io::FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("ParametricCRS", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("datum"); formatter->setOmitTypeInImmediateChild(); datum()->_exportToJSON(formatter); writer->AddObjKey("coordinate_system"); formatter->setOmitTypeInImmediateChild(); coordinateSystem()->_exportToJSON(formatter); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- bool ParametricCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherParametricCRS = dynamic_cast(other); return otherParametricCRS != nullptr && SingleCRS::baseIsEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DerivedVerticalCRS::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DerivedVerticalCRS::~DerivedVerticalCRS() = default; //! @endcond // --------------------------------------------------------------------------- DerivedVerticalCRS::DerivedVerticalCRS( const VerticalCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::VerticalCSNNPtr &csIn) : SingleCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), VerticalCRS(baseCRSIn->datum(), baseCRSIn->datumEnsemble(), csIn), DerivedCRS(baseCRSIn, derivingConversionIn, csIn), d(nullptr) {} // --------------------------------------------------------------------------- DerivedVerticalCRS::DerivedVerticalCRS(const DerivedVerticalCRS &other) : SingleCRS(other), VerticalCRS(other), DerivedCRS(other), d(nullptr) {} // --------------------------------------------------------------------------- CRSNNPtr DerivedVerticalCRS::_shallowClone() const { auto crs(DerivedVerticalCRS::nn_make_shared(*this)); crs->assignSelf(crs); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- /** \brief Return the base CRS (a VerticalCRS) of a DerivedVerticalCRS. * * @return the base CRS. */ const VerticalCRSNNPtr DerivedVerticalCRS::baseCRS() const { return NN_NO_CHECK(util::nn_dynamic_pointer_cast( DerivedCRS::getPrivate()->baseCRS_)); } // --------------------------------------------------------------------------- /** \brief Instantiate a DerivedVerticalCRS from a base CRS, a deriving * conversion and a cs::VerticalCS. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param baseCRSIn base CRS. * @param derivingConversionIn the deriving conversion from the base CRS to this * CRS. * @param csIn the coordinate system. * @return new DerivedVerticalCRS. */ DerivedVerticalCRSNNPtr DerivedVerticalCRS::create( const util::PropertyMap &properties, const VerticalCRSNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const cs::VerticalCSNNPtr &csIn) { auto crs(DerivedVerticalCRS::nn_make_shared( baseCRSIn, derivingConversionIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DerivedVerticalCRS::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { bool useBaseMethod = true; const DerivedVerticalCRS *dvcrs = this; while (true) { // If the derived vertical CRS is obtained through simple conversion // methods that just do unit change or height/depth reversal, export // it as a regular VerticalCRS const int methodCode = dvcrs->derivingConversionRef()->method()->getEPSGCode(); if (methodCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT || methodCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR || methodCode == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) { dvcrs = dynamic_cast(baseCRS().get()); if (dvcrs == nullptr) { break; } } else { useBaseMethod = false; break; } } if (useBaseMethod) { VerticalCRS::_exportToWKT(formatter); return; } io::FormattingException::Throw( "DerivedVerticalCRS can only be exported to WKT2"); } baseExportToWKT(formatter, io::WKTConstants::VERTCRS, io::WKTConstants::BASEVERTCRS); } //! @endcond // --------------------------------------------------------------------------- void DerivedVerticalCRS::_exportToPROJString( io::PROJStringFormatter *) const // throw(io::FormattingException) { throw io::FormattingException( "DerivedVerticalCRS cannot be exported to PROJ string"); } // --------------------------------------------------------------------------- bool DerivedVerticalCRS::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDerivedCRS = dynamic_cast(other); return otherDerivedCRS != nullptr && DerivedCRS::_isEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list> DerivedVerticalCRS::_identify(const io::AuthorityFactoryPtr &factory) const { return CRS::_identify(factory); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress template struct DerivedCRSTemplate::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress template DerivedCRSTemplate::~DerivedCRSTemplate() = default; //! @endcond // --------------------------------------------------------------------------- template DerivedCRSTemplate::DerivedCRSTemplate( const BaseNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const CSNNPtr &csIn) : SingleCRS(baseCRSIn->datum().as_nullable(), nullptr, csIn), BaseType(baseCRSIn->datum(), csIn), DerivedCRS(baseCRSIn, derivingConversionIn, csIn), d(nullptr) {} // --------------------------------------------------------------------------- template DerivedCRSTemplate::DerivedCRSTemplate( const DerivedCRSTemplate &other) : SingleCRS(other), BaseType(other), DerivedCRS(other), d(nullptr) {} // --------------------------------------------------------------------------- template const typename DerivedCRSTemplate::BaseNNPtr DerivedCRSTemplate::baseCRS() const { auto l_baseCRS = DerivedCRS::getPrivate()->baseCRS_; return NN_NO_CHECK(util::nn_dynamic_pointer_cast(l_baseCRS)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress template CRSNNPtr DerivedCRSTemplate::_shallowClone() const { auto crs(DerivedCRSTemplate::nn_make_shared(*this)); crs->assignSelf(crs); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- template typename DerivedCRSTemplate::NNPtr DerivedCRSTemplate::create( const util::PropertyMap &properties, const BaseNNPtr &baseCRSIn, const operation::ConversionNNPtr &derivingConversionIn, const CSNNPtr &csIn) { auto crs(DerivedCRSTemplate::nn_make_shared( baseCRSIn, derivingConversionIn, csIn)); crs->assignSelf(crs); crs->setProperties(properties); crs->setDerivingConversionCRS(); return crs; } // --------------------------------------------------------------------------- template const char *DerivedCRSTemplate::className() const { return DerivedCRSTraits::CRSName().c_str(); } // --------------------------------------------------------------------------- static void DerivedCRSTemplateCheckExportToWKT(io::WKTFormatter *formatter, const std::string &crsName, bool wkt2_2019_only) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2 || (wkt2_2019_only && !formatter->use2019Keywords())) { io::FormattingException::Throw(crsName + " can only be exported to WKT2" + (wkt2_2019_only ? ":2019" : "")); } } // --------------------------------------------------------------------------- template void DerivedCRSTemplate::_exportToWKT( io::WKTFormatter *formatter) const { DerivedCRSTemplateCheckExportToWKT(formatter, DerivedCRSTraits::CRSName(), DerivedCRSTraits::wkt2_2019_only); baseExportToWKT(formatter, DerivedCRSTraits::WKTKeyword(), DerivedCRSTraits::WKTBaseKeyword()); } // --------------------------------------------------------------------------- template bool DerivedCRSTemplate::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDerivedCRS = dynamic_cast(other); return otherDerivedCRS != nullptr && DerivedCRS::_isEquivalentTo(other, criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string STRING_DerivedEngineeringCRS("DerivedEngineeringCRS"); const std::string &DerivedEngineeringCRSTraits::CRSName() { return STRING_DerivedEngineeringCRS; } const std::string &DerivedEngineeringCRSTraits::WKTKeyword() { return io::WKTConstants::ENGCRS; } const std::string &DerivedEngineeringCRSTraits::WKTBaseKeyword() { return io::WKTConstants::BASEENGCRS; } template class DerivedCRSTemplate; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string STRING_DerivedParametricCRS("DerivedParametricCRS"); const std::string &DerivedParametricCRSTraits::CRSName() { return STRING_DerivedParametricCRS; } const std::string &DerivedParametricCRSTraits::WKTKeyword() { return io::WKTConstants::PARAMETRICCRS; } const std::string &DerivedParametricCRSTraits::WKTBaseKeyword() { return io::WKTConstants::BASEPARAMCRS; } template class DerivedCRSTemplate; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string STRING_DerivedTemporalCRS("DerivedTemporalCRS"); const std::string &DerivedTemporalCRSTraits::CRSName() { return STRING_DerivedTemporalCRS; } const std::string &DerivedTemporalCRSTraits::WKTKeyword() { return io::WKTConstants::TIMECRS; } const std::string &DerivedTemporalCRSTraits::WKTBaseKeyword() { return io::WKTConstants::BASETIMECRS; } template class DerivedCRSTemplate; //! @endcond // --------------------------------------------------------------------------- } // namespace crs NS_PROJ_END proj-9.6.0/src/iso19111/datum.cpp000664 001754 001755 00000305615 14764566077 016227 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/datum.hpp" #include "proj/common.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/datum_internal.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // clang-format on #include "proj_json_streaming_writer.hpp" #include #include #include #include using namespace NS_PROJ::internal; #if 0 namespace dropbox{ namespace oxygen { template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; }} #endif NS_PROJ_START namespace datum { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static util::PropertyMap createMapNameEPSGCode(const char *name, int code) { return util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, code); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Datum::Private { util::optional anchorDefinition{}; std::shared_ptr> anchorEpoch = std::make_shared>(); util::optional publicationDate{}; common::IdentifiedObjectPtr conventionalRS{}; // cppcheck-suppress functionStatic void exportAnchorDefinition(io::WKTFormatter *formatter) const; // cppcheck-suppress functionStatic void exportAnchorEpoch(io::WKTFormatter *formatter) const; // cppcheck-suppress functionStatic void exportAnchorDefinition(io::JSONFormatter *formatter) const; // cppcheck-suppress functionStatic void exportAnchorEpoch(io::JSONFormatter *formatter) const; }; // --------------------------------------------------------------------------- void Datum::Private::exportAnchorDefinition(io::WKTFormatter *formatter) const { if (anchorDefinition) { formatter->startNode(io::WKTConstants::ANCHOR, false); formatter->addQuotedString(*anchorDefinition); formatter->endNode(); } } // --------------------------------------------------------------------------- void Datum::Private::exportAnchorEpoch(io::WKTFormatter *formatter) const { if (anchorEpoch->has_value()) { formatter->startNode(io::WKTConstants::ANCHOREPOCH, false); const double year = (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR); formatter->add(getRoundedEpochInDecimalYear(year)); formatter->endNode(); } } // --------------------------------------------------------------------------- void Datum::Private::exportAnchorDefinition( io::JSONFormatter *formatter) const { if (anchorDefinition) { auto writer = formatter->writer(); writer->AddObjKey("anchor"); writer->Add(*anchorDefinition); } } // --------------------------------------------------------------------------- void Datum::Private::exportAnchorEpoch(io::JSONFormatter *formatter) const { if (anchorEpoch->has_value()) { auto writer = formatter->writer(); writer->AddObjKey("anchor_epoch"); const double year = (*anchorEpoch)->convertToUnit(common::UnitOfMeasure::YEAR); writer->Add(getRoundedEpochInDecimalYear(year)); } } //! @endcond // --------------------------------------------------------------------------- Datum::Datum() : d(std::make_unique()) {} // --------------------------------------------------------------------------- #ifdef notdef Datum::Datum(const Datum &other) : ObjectUsage(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Datum::~Datum() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the anchor definition. * * A description - possibly including coordinates of an identified point or * points - of the relationship used to anchor a coordinate system to the * Earth or alternate object. *
    *
  • For modern geodetic reference frames the anchor may be a set of station * coordinates; if the reference frame is dynamic it will also include * coordinate velocities. For a traditional geodetic datum, this anchor may be * a point known as the fundamental point, which is traditionally the point * where the relationship between geoid and ellipsoid is defined, together * with a direction from that point.
  • *
  • For a vertical reference frame the anchor may be the zero level at one * or more defined locations or a conventionally defined surface.
  • *
  • For an engineering datum, the anchor may be an identified physical point * with the orientation defined relative to the object.
  • *
* * @return the anchor definition, or empty. */ const util::optional &Datum::anchorDefinition() const { return d->anchorDefinition; } // --------------------------------------------------------------------------- /** \brief Return the anchor epoch. * * Epoch at which a static reference frame matches a dynamic reference frame * from which it has been derived. * * Note: Not to be confused with the frame reference epoch of dynamic geodetic * and dynamic vertical reference frames. Nor with the epoch at which a * reference frame is defined to be aligned with another reference frame; * this information should be included in the datum anchor definition. * * @return the anchor epoch, or empty. * @since 9.2 */ const util::optional &Datum::anchorEpoch() const { return *(d->anchorEpoch); } // --------------------------------------------------------------------------- /** \brief Return the date on which the datum definition was published. * * \note Departure from \ref ISO_19111_2019 : we return a DateTime instead of * a Citation::Date. * * @return the publication date, or empty. */ const util::optional &Datum::publicationDate() const { return d->publicationDate; } // --------------------------------------------------------------------------- /** \brief Return the conventional reference system. * * This is the name, identifier, alias and remarks for the terrestrial * reference system or vertical reference system realized by this reference * frame, for example "ITRS" for ITRF88 through ITRF2008 and ITRF2014, or * "EVRS" for EVRF2000 and EVRF2007. * * @return the conventional reference system, or nullptr. */ const common::IdentifiedObjectPtr &Datum::conventionalRS() const { return d->conventionalRS; } // --------------------------------------------------------------------------- void Datum::setAnchor(const util::optional &anchor) { d->anchorDefinition = anchor; } // --------------------------------------------------------------------------- void Datum::setAnchorEpoch(const util::optional &anchorEpoch) { d->anchorEpoch = std::make_shared>(anchorEpoch); } // --------------------------------------------------------------------------- void Datum::setProperties( const util::PropertyMap &properties) // throw(InvalidValueTypeException) { std::string publicationDateResult; properties.getStringValue("PUBLICATION_DATE", publicationDateResult); if (!publicationDateResult.empty()) { d->publicationDate = common::DateTime::create(publicationDateResult); } std::string anchorEpoch; properties.getStringValue("ANCHOR_EPOCH", anchorEpoch); if (!anchorEpoch.empty()) { bool success = false; const double anchorEpochYear = c_locale_stod(anchorEpoch, success); if (success) { setAnchorEpoch(util::optional( common::Measure(anchorEpochYear, common::UnitOfMeasure::YEAR))); } } ObjectUsage::setProperties(properties); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool Datum::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDatum = dynamic_cast(other); if (otherDatum == nullptr || !ObjectUsage::_isEquivalentTo(other, criterion, dbContext)) { return false; } if (criterion == util::IComparable::Criterion::STRICT) { if ((anchorDefinition().has_value() ^ otherDatum->anchorDefinition().has_value())) { return false; } if (anchorDefinition().has_value() && otherDatum->anchorDefinition().has_value() && *anchorDefinition() != *otherDatum->anchorDefinition()) { return false; } if ((publicationDate().has_value() ^ otherDatum->publicationDate().has_value())) { return false; } if (publicationDate().has_value() && otherDatum->publicationDate().has_value() && publicationDate()->toString() != otherDatum->publicationDate()->toString()) { return false; } if (((conventionalRS() != nullptr) ^ (otherDatum->conventionalRS() != nullptr))) { return false; } if (conventionalRS() && otherDatum->conventionalRS() && conventionalRS()->_isEquivalentTo( otherDatum->conventionalRS().get(), criterion, dbContext)) { return false; } } return true; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PrimeMeridian::Private { common::Angle longitude_{}; explicit Private(const common::Angle &longitude) : longitude_(longitude) {} }; //! @endcond // --------------------------------------------------------------------------- PrimeMeridian::PrimeMeridian(const common::Angle &longitudeIn) : d(std::make_unique(longitudeIn)) {} // --------------------------------------------------------------------------- #ifdef notdef PrimeMeridian::PrimeMeridian(const PrimeMeridian &other) : common::IdentifiedObject(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PrimeMeridian::~PrimeMeridian() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the longitude of the prime meridian. * * It is measured from the internationally-recognised reference meridian * ('Greenwich meridian'), positive eastward. * The default value is 0 degrees. * * @return the longitude of the prime meridian. */ const common::Angle &PrimeMeridian::longitude() PROJ_PURE_DEFN { return d->longitude_; } // --------------------------------------------------------------------------- /** \brief Instantiate a PrimeMeridian. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param longitudeIn the longitude of the prime meridian. * @return new PrimeMeridian. */ PrimeMeridianNNPtr PrimeMeridian::create(const util::PropertyMap &properties, const common::Angle &longitudeIn) { auto pm(PrimeMeridian::nn_make_shared(longitudeIn)); pm->setProperties(properties); return pm; } // --------------------------------------------------------------------------- const PrimeMeridianNNPtr PrimeMeridian::createGREENWICH() { return create(createMapNameEPSGCode("Greenwich", 8901), common::Angle(0)); } // --------------------------------------------------------------------------- const PrimeMeridianNNPtr PrimeMeridian::createREFERENCE_MERIDIAN() { return create(util::PropertyMap().set(IdentifiedObject::NAME_KEY, "Reference meridian"), common::Angle(0)); } // --------------------------------------------------------------------------- const PrimeMeridianNNPtr PrimeMeridian::createPARIS() { return create(createMapNameEPSGCode("Paris", 8903), common::Angle(2.5969213, common::UnitOfMeasure::GRAD)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void PrimeMeridian::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; std::string l_name(name()->description().has_value() ? nameStr() : "Greenwich"); if (!(isWKT2 && formatter->primeMeridianOmittedIfGreenwich() && l_name == "Greenwich")) { formatter->startNode(io::WKTConstants::PRIMEM, !identifiers().empty()); if (formatter->useESRIDialect()) { bool aliasFound = false; const auto &dbContext = formatter->databaseContext(); if (dbContext) { auto l_alias = dbContext->getAliasFromOfficialName( l_name, "prime_meridian", "ESRI"); if (!l_alias.empty()) { l_name = std::move(l_alias); aliasFound = true; } } if (!aliasFound && dbContext) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), "ESRI"); aliasFound = authFactory ->createObjectsFromName( l_name, {io::AuthorityFactory::ObjectType::PRIME_MERIDIAN}, false // approximateMatch ) .size() == 1; } if (!aliasFound) { l_name = io::WKTFormatter::morphNameToESRI(l_name); } } formatter->addQuotedString(l_name); const auto &l_long = longitude(); if (formatter->primeMeridianInDegree()) { formatter->add(l_long.convertToUnit(common::UnitOfMeasure::DEGREE)); } else { formatter->add(l_long.value()); } const auto &unit = l_long.unit(); if (isWKT2) { if (!(formatter ->primeMeridianOrParameterUnitOmittedIfSameAsAxis() && unit == *(formatter->axisAngularUnit()))) { unit._exportToWKT(formatter, io::WKTConstants::ANGLEUNIT); } } else if (!formatter->primeMeridianInDegree()) { unit._exportToWKT(formatter); } if (formatter->outputId()) { formatID(formatter); } formatter->endNode(); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void PrimeMeridian::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("PrimeMeridian", !identifiers().empty())); writer->AddObjKey("name"); std::string l_name = name()->description().has_value() ? nameStr() : "Greenwich"; writer->Add(l_name); const auto &l_long = longitude(); writer->AddObjKey("longitude"); const auto &unit = l_long.unit(); if (unit == common::UnitOfMeasure::DEGREE) { writer->Add(l_long.value(), 15); } else { auto longitudeContext(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("value"); writer->Add(l_long.value(), 15); writer->AddObjKey("unit"); unit._exportToJSON(formatter); } if (formatter->outputId()) { formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::string PrimeMeridian::getPROJStringWellKnownName(const common::Angle &angle) { const double valRad = angle.getSIValue(); std::string projPMName; PJ_CONTEXT *ctxt = proj_context_create(); auto proj_pm = proj_list_prime_meridians(); for (int i = 0; proj_pm[i].id != nullptr; ++i) { double valRefRad = dmstor_ctx(ctxt, proj_pm[i].defn, nullptr); if (::fabs(valRad - valRefRad) < 1e-10) { projPMName = proj_pm[i].id; break; } } proj_context_destroy(ctxt); return projPMName; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void PrimeMeridian::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(FormattingException) { if (longitude().getSIValue() != 0) { std::string projPMName(getPROJStringWellKnownName(longitude())); if (!projPMName.empty()) { formatter->addParam("pm", projPMName); } else { const double valDeg = longitude().convertToUnit(common::UnitOfMeasure::DEGREE); formatter->addParam("pm", valDeg); } } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool PrimeMeridian::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherPM = dynamic_cast(other); if (otherPM == nullptr || !IdentifiedObject::_isEquivalentTo(other, criterion, dbContext)) { return false; } // In MapInfo, the Paris prime meridian is returned as 2.3372291666667 // instead of the official value of 2.33722917, which is a relative // error in the 1e-9 range. return longitude()._isEquivalentTo(otherPM->longitude(), criterion, 1e-8); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Ellipsoid::Private { common::Length semiMajorAxis_{}; util::optional inverseFlattening_{}; util::optional semiMinorAxis_{}; util::optional semiMedianAxis_{}; std::string celestialBody_{}; explicit Private(const common::Length &radius, const std::string &celestialBody) : semiMajorAxis_(radius), celestialBody_(celestialBody) {} Private(const common::Length &semiMajorAxisIn, const common::Scale &invFlattening, const std::string &celestialBody) : semiMajorAxis_(semiMajorAxisIn), inverseFlattening_(invFlattening), celestialBody_(celestialBody) {} Private(const common::Length &semiMajorAxisIn, const common::Length &semiMinorAxisIn, const std::string &celestialBody) : semiMajorAxis_(semiMajorAxisIn), semiMinorAxis_(semiMinorAxisIn), celestialBody_(celestialBody) {} }; //! @endcond // --------------------------------------------------------------------------- Ellipsoid::Ellipsoid(const common::Length &radius, const std::string &celestialBodyIn) : d(std::make_unique(radius, celestialBodyIn)) {} // --------------------------------------------------------------------------- Ellipsoid::Ellipsoid(const common::Length &semiMajorAxisIn, const common::Scale &invFlattening, const std::string &celestialBodyIn) : d(std::make_unique(semiMajorAxisIn, invFlattening, celestialBodyIn)) {} // --------------------------------------------------------------------------- Ellipsoid::Ellipsoid(const common::Length &semiMajorAxisIn, const common::Length &semiMinorAxisIn, const std::string &celestialBodyIn) : d(std::make_unique(semiMajorAxisIn, semiMinorAxisIn, celestialBodyIn)) {} // --------------------------------------------------------------------------- #ifdef notdef Ellipsoid::Ellipsoid(const Ellipsoid &other) : common::IdentifiedObject(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Ellipsoid::~Ellipsoid() = default; Ellipsoid::Ellipsoid(const Ellipsoid &other) : IdentifiedObject(other), d(std::make_unique(*(other.d))) {} //! @endcond // --------------------------------------------------------------------------- /** \brief Return the length of the semi-major axis of the ellipsoid. * * @return the semi-major axis. */ const common::Length &Ellipsoid::semiMajorAxis() PROJ_PURE_DEFN { return d->semiMajorAxis_; } // --------------------------------------------------------------------------- /** \brief Return the inverse flattening value of the ellipsoid, if the * ellipsoid * has been defined with this value. * * @see computeInverseFlattening() that will always return a valid value of the * inverse flattening, whether the ellipsoid has been defined through inverse * flattening or semi-minor axis. * * @return the inverse flattening value of the ellipsoid, or empty. */ const util::optional & Ellipsoid::inverseFlattening() PROJ_PURE_DEFN { return d->inverseFlattening_; } // --------------------------------------------------------------------------- /** \brief Return the length of the semi-minor axis of the ellipsoid, if the * ellipsoid * has been defined with this value. * * @see computeSemiMinorAxis() that will always return a valid value of the * semi-minor axis, whether the ellipsoid has been defined through inverse * flattening or semi-minor axis. * * @return the semi-minor axis of the ellipsoid, or empty. */ const util::optional & Ellipsoid::semiMinorAxis() PROJ_PURE_DEFN { return d->semiMinorAxis_; } // --------------------------------------------------------------------------- /** \brief Return whether the ellipsoid is spherical. * * That is to say is semiMajorAxis() == computeSemiMinorAxis(). * * A sphere is completely defined by the semi-major axis, which is the radius * of the sphere. * * @return true if the ellipsoid is spherical. */ bool Ellipsoid::isSphere() PROJ_PURE_DEFN { if (d->inverseFlattening_.has_value()) { return d->inverseFlattening_->value() == 0; } if (semiMinorAxis().has_value()) { return semiMajorAxis() == *semiMinorAxis(); } return true; } // --------------------------------------------------------------------------- /** \brief Return the length of the semi-median axis of a triaxial ellipsoid * * This parameter is not required for a biaxial ellipsoid. * * @return the semi-median axis of the ellipsoid, or empty. */ const util::optional & Ellipsoid::semiMedianAxis() PROJ_PURE_DEFN { return d->semiMedianAxis_; } // --------------------------------------------------------------------------- /** \brief Return or compute the inverse flattening value of the ellipsoid. * * If computed, the inverse flattening is the result of a / (a - b), * where a is the semi-major axis and b the semi-minor axis. * * @return the inverse flattening value of the ellipsoid, or 0 for a sphere. */ double Ellipsoid::computedInverseFlattening() PROJ_PURE_DEFN { if (d->inverseFlattening_.has_value()) { return d->inverseFlattening_->getSIValue(); } if (d->semiMinorAxis_.has_value()) { const double a = d->semiMajorAxis_.getSIValue(); const double b = d->semiMinorAxis_->getSIValue(); return (a == b) ? 0.0 : a / (a - b); } return 0.0; } // --------------------------------------------------------------------------- /** \brief Return the squared eccentricity of the ellipsoid. * * @return the squared eccentricity, or a negative value if invalid. */ double Ellipsoid::squaredEccentricity() PROJ_PURE_DEFN { const double rf = computedInverseFlattening(); // coverity[divide_by_zero] const double f = rf != 0.0 ? 1. / rf : 0.0; const double e2 = f * (2 - f); return e2; } // --------------------------------------------------------------------------- /** \brief Return or compute the length of the semi-minor axis of the ellipsoid. * * If computed, the semi-minor axis is the result of a * (1 - 1 / rf) * where a is the semi-major axis and rf the reverse/inverse flattening. * @return the semi-minor axis of the ellipsoid. */ common::Length Ellipsoid::computeSemiMinorAxis() const { if (d->semiMinorAxis_.has_value()) { return *d->semiMinorAxis_; } if (inverseFlattening().has_value()) { return common::Length( (1.0 - 1.0 / d->inverseFlattening_->getSIValue()) * d->semiMajorAxis_.value(), d->semiMajorAxis_.unit()); } return d->semiMajorAxis_; } // --------------------------------------------------------------------------- /** \brief Return the name of the celestial body on which the ellipsoid refers * to. */ const std::string &Ellipsoid::celestialBody() PROJ_PURE_DEFN { return d->celestialBody_; } // --------------------------------------------------------------------------- /** \brief Instantiate a Ellipsoid as a sphere. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param radius the sphere radius (semi-major axis). * @param celestialBody Name of the celestial body on which the ellipsoid refers * to. * @return new Ellipsoid. */ EllipsoidNNPtr Ellipsoid::createSphere(const util::PropertyMap &properties, const common::Length &radius, const std::string &celestialBody) { auto ellipsoid(Ellipsoid::nn_make_shared(radius, celestialBody)); ellipsoid->setProperties(properties); return ellipsoid; } // --------------------------------------------------------------------------- /** \brief Instantiate a Ellipsoid from its inverse/reverse flattening. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param semiMajorAxisIn the semi-major axis. * @param invFlattening the inverse/reverse flattening. If set to 0, this will * be considered as a sphere. * @param celestialBody Name of the celestial body on which the ellipsoid refers * to. * @return new Ellipsoid. */ EllipsoidNNPtr Ellipsoid::createFlattenedSphere( const util::PropertyMap &properties, const common::Length &semiMajorAxisIn, const common::Scale &invFlattening, const std::string &celestialBody) { if (invFlattening.value() == 0) { auto ellipsoid(Ellipsoid::nn_make_shared(semiMajorAxisIn, celestialBody)); ellipsoid->setProperties(properties); return ellipsoid; } else { auto ellipsoid(Ellipsoid::nn_make_shared( semiMajorAxisIn, invFlattening, celestialBody)); ellipsoid->setProperties(properties); return ellipsoid; } } // --------------------------------------------------------------------------- /** \brief Instantiate a Ellipsoid from the value of its two semi axis. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param semiMajorAxisIn the semi-major axis. * @param semiMinorAxisIn the semi-minor axis. * @param celestialBody Name of the celestial body on which the ellipsoid refers * to. * @return new Ellipsoid. */ EllipsoidNNPtr Ellipsoid::createTwoAxis(const util::PropertyMap &properties, const common::Length &semiMajorAxisIn, const common::Length &semiMinorAxisIn, const std::string &celestialBody) { auto ellipsoid(Ellipsoid::nn_make_shared( semiMajorAxisIn, semiMinorAxisIn, celestialBody)); ellipsoid->setProperties(properties); return ellipsoid; } // --------------------------------------------------------------------------- const EllipsoidNNPtr Ellipsoid::createCLARKE_1866() { return createTwoAxis(createMapNameEPSGCode("Clarke 1866", 7008), common::Length(6378206.4), common::Length(6356583.8)); } // --------------------------------------------------------------------------- const EllipsoidNNPtr Ellipsoid::createWGS84() { return createFlattenedSphere(createMapNameEPSGCode("WGS 84", 7030), common::Length(6378137), common::Scale(298.257223563)); } // --------------------------------------------------------------------------- const EllipsoidNNPtr Ellipsoid::createGRS1980() { return createFlattenedSphere(createMapNameEPSGCode("GRS 1980", 7019), common::Length(6378137), common::Scale(298.257222101)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Ellipsoid::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; formatter->startNode(isWKT2 ? io::WKTConstants::ELLIPSOID : io::WKTConstants::SPHEROID, !identifiers().empty()); { std::string l_name(nameStr()); if (l_name.empty()) { formatter->addQuotedString("unnamed"); } else { if (formatter->useESRIDialect()) { if (l_name == "WGS 84") { l_name = "WGS_1984"; } else { bool aliasFound = false; const auto &dbContext = formatter->databaseContext(); if (dbContext) { auto l_alias = dbContext->getAliasFromOfficialName( l_name, "ellipsoid", "ESRI"); if (!l_alias.empty()) { l_name = std::move(l_alias); aliasFound = true; } } if (!aliasFound && dbContext) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), "ESRI"); aliasFound = authFactory ->createObjectsFromName( l_name, {io::AuthorityFactory::ObjectType:: ELLIPSOID}, false // approximateMatch ) .size() == 1; } if (!aliasFound) { l_name = io::WKTFormatter::morphNameToESRI(l_name); } } } formatter->addQuotedString(l_name); } const auto &semiMajor = semiMajorAxis(); if (isWKT2) { formatter->add(semiMajor.value()); } else { formatter->add(semiMajor.getSIValue()); } formatter->add(computedInverseFlattening()); const auto &unit = semiMajor.unit(); if (isWKT2 && !(formatter->ellipsoidUnitOmittedIfMetre() && unit == common::UnitOfMeasure::METRE)) { unit._exportToWKT(formatter, io::WKTConstants::LENGTHUNIT); } if (formatter->outputId()) { formatID(formatter); } } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Ellipsoid::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("Ellipsoid", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } const auto &semiMajor = semiMajorAxis(); const auto &semiMajorUnit = semiMajor.unit(); writer->AddObjKey(isSphere() ? "radius" : "semi_major_axis"); if (semiMajorUnit == common::UnitOfMeasure::METRE) { writer->Add(semiMajor.value(), 15); } else { auto objContext(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("value"); writer->Add(semiMajor.value(), 15); writer->AddObjKey("unit"); semiMajorUnit._exportToJSON(formatter); } if (!isSphere()) { const auto &l_inverseFlattening = inverseFlattening(); if (l_inverseFlattening.has_value()) { writer->AddObjKey("inverse_flattening"); writer->Add(l_inverseFlattening->getSIValue(), 15); } else { writer->AddObjKey("semi_minor_axis"); const auto &l_semiMinorAxis(semiMinorAxis()); const auto &semiMinorAxisUnit(l_semiMinorAxis->unit()); if (semiMinorAxisUnit == common::UnitOfMeasure::METRE) { writer->Add(l_semiMinorAxis->value(), 15); } else { auto objContext(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("value"); writer->Add(l_semiMinorAxis->value(), 15); writer->AddObjKey("unit"); semiMinorAxisUnit._exportToJSON(formatter); } } } if (formatter->outputId()) { formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- bool Ellipsoid::lookForProjWellKnownEllps(std::string &projEllpsName, std::string &ellpsName) const { const double a = semiMajorAxis().getSIValue(); const double b = computeSemiMinorAxis().getSIValue(); const double rf = computedInverseFlattening(); auto proj_ellps = proj_list_ellps(); for (int i = 0; proj_ellps[i].id != nullptr; i++) { assert(strncmp(proj_ellps[i].major, "a=", 2) == 0); const double a_iter = c_locale_stod(proj_ellps[i].major + 2); if (::fabs(a - a_iter) < 1e-10 * a_iter) { if (strncmp(proj_ellps[i].ell, "b=", 2) == 0) { const double b_iter = c_locale_stod(proj_ellps[i].ell + 2); if (::fabs(b - b_iter) < 1e-10 * b_iter) { projEllpsName = proj_ellps[i].id; ellpsName = proj_ellps[i].name; if (starts_with(ellpsName, "GRS 1980")) { ellpsName = "GRS 1980"; } return true; } } else { assert(strncmp(proj_ellps[i].ell, "rf=", 3) == 0); const double rf_iter = c_locale_stod(proj_ellps[i].ell + 3); if (::fabs(rf - rf_iter) < 1e-10 * rf_iter) { projEllpsName = proj_ellps[i].id; ellpsName = proj_ellps[i].name; if (starts_with(ellpsName, "GRS 1980")) { ellpsName = "GRS 1980"; } return true; } } } } return false; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Ellipsoid::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(FormattingException) { const double a = semiMajorAxis().getSIValue(); std::string projEllpsName; std::string ellpsName; if (lookForProjWellKnownEllps(projEllpsName, ellpsName)) { formatter->addParam("ellps", projEllpsName); return; } if (isSphere()) { formatter->addParam("R", a); } else { formatter->addParam("a", a); if (inverseFlattening().has_value()) { const double rf = computedInverseFlattening(); formatter->addParam("rf", rf); } else { const double b = computeSemiMinorAxis().getSIValue(); formatter->addParam("b", b); } } } //! @endcond // --------------------------------------------------------------------------- /** \brief Return a Ellipsoid object where some parameters are better * identified. * * @return a new Ellipsoid. */ EllipsoidNNPtr Ellipsoid::identify() const { auto newEllipsoid = Ellipsoid::nn_make_shared(*this); newEllipsoid->assignSelf( util::nn_static_pointer_cast(newEllipsoid)); if (name()->description()->empty() || nameStr() == "unknown") { std::string projEllpsName; std::string ellpsName; if (lookForProjWellKnownEllps(projEllpsName, ellpsName)) { newEllipsoid->setProperties( util::PropertyMap().set(IdentifiedObject::NAME_KEY, ellpsName)); } } return newEllipsoid; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool Ellipsoid::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherEllipsoid = dynamic_cast(other); if (otherEllipsoid == nullptr || (criterion == util::IComparable::Criterion::STRICT && !IdentifiedObject::_isEquivalentTo(other, criterion, dbContext))) { return false; } // PROJ "clrk80" name is "Clarke 1880 mod." and GDAL tends to // export to it a number of Clarke 1880 variants, so be lax if (criterion != util::IComparable::Criterion::STRICT && (nameStr() == "Clarke 1880 mod." || otherEllipsoid->nameStr() == "Clarke 1880 mod.")) { return std::fabs(semiMajorAxis().getSIValue() - otherEllipsoid->semiMajorAxis().getSIValue()) < 1e-8 * semiMajorAxis().getSIValue() && std::fabs(computedInverseFlattening() - otherEllipsoid->computedInverseFlattening()) < 1e-5 * computedInverseFlattening(); } if (!semiMajorAxis()._isEquivalentTo(otherEllipsoid->semiMajorAxis(), criterion)) { return false; } const auto &l_semiMinorAxis = semiMinorAxis(); const auto &l_other_semiMinorAxis = otherEllipsoid->semiMinorAxis(); if (l_semiMinorAxis.has_value() && l_other_semiMinorAxis.has_value()) { if (!l_semiMinorAxis->_isEquivalentTo(*l_other_semiMinorAxis, criterion)) { return false; } } const auto &l_inverseFlattening = inverseFlattening(); const auto &l_other_sinverseFlattening = otherEllipsoid->inverseFlattening(); if (l_inverseFlattening.has_value() && l_other_sinverseFlattening.has_value()) { if (!l_inverseFlattening->_isEquivalentTo(*l_other_sinverseFlattening, criterion)) { return false; } } if (criterion == util::IComparable::Criterion::STRICT) { if ((l_semiMinorAxis.has_value() ^ l_other_semiMinorAxis.has_value())) { return false; } if ((l_inverseFlattening.has_value() ^ l_other_sinverseFlattening.has_value())) { return false; } } else { if (!computeSemiMinorAxis()._isEquivalentTo( otherEllipsoid->computeSemiMinorAxis(), criterion)) { return false; } } const auto &l_semiMedianAxis = semiMedianAxis(); const auto &l_other_semiMedianAxis = otherEllipsoid->semiMedianAxis(); if ((l_semiMedianAxis.has_value() ^ l_other_semiMedianAxis.has_value())) { return false; } if (l_semiMedianAxis.has_value() && l_other_semiMedianAxis.has_value()) { if (!l_semiMedianAxis->_isEquivalentTo(*l_other_semiMedianAxis, criterion)) { return false; } } return true; } //! @endcond // --------------------------------------------------------------------------- std::string Ellipsoid::guessBodyName(const io::DatabaseContextPtr &dbContext, double a, const std::string &ellpsName) { constexpr double earthMeanRadius = 6375000.0; if (std::fabs(a - earthMeanRadius) < REL_ERROR_FOR_SAME_CELESTIAL_BODY * earthMeanRadius) { return Ellipsoid::EARTH; } if (dbContext) { try { auto factory = io::AuthorityFactory::create(NN_NO_CHECK(dbContext), std::string()); if (!ellpsName.empty()) { auto matches = factory->createObjectsFromName( ellpsName, {io::AuthorityFactory::ObjectType::ELLIPSOID}, true, 1); if (!matches.empty()) { auto ellps = static_cast(matches.front().get()); if (std::fabs(a - ellps->semiMajorAxis().getSIValue()) < REL_ERROR_FOR_SAME_CELESTIAL_BODY * a) { return ellps->celestialBody(); } } } return factory->identifyBodyFromSemiMajorAxis( a, REL_ERROR_FOR_SAME_CELESTIAL_BODY); } catch (const std::exception &) { } } return NON_EARTH_BODY; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GeodeticReferenceFrame::Private { PrimeMeridianNNPtr primeMeridian_; EllipsoidNNPtr ellipsoid_; Private(const EllipsoidNNPtr &ellipsoidIn, const PrimeMeridianNNPtr &primeMeridianIn) : primeMeridian_(primeMeridianIn), ellipsoid_(ellipsoidIn) {} }; //! @endcond // --------------------------------------------------------------------------- GeodeticReferenceFrame::GeodeticReferenceFrame( const EllipsoidNNPtr &ellipsoidIn, const PrimeMeridianNNPtr &primeMeridianIn) : d(std::make_unique(ellipsoidIn, primeMeridianIn)) {} // --------------------------------------------------------------------------- #ifdef notdef GeodeticReferenceFrame::GeodeticReferenceFrame( const GeodeticReferenceFrame &other) : Datum(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeodeticReferenceFrame::~GeodeticReferenceFrame() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the PrimeMeridian associated with a GeodeticReferenceFrame. * * @return the PrimeMeridian. */ const PrimeMeridianNNPtr & GeodeticReferenceFrame::primeMeridian() PROJ_PURE_DEFN { return d->primeMeridian_; } // --------------------------------------------------------------------------- /** \brief Return the Ellipsoid associated with a GeodeticReferenceFrame. * * \note The \ref ISO_19111_2019 modelling allows (but discourages) a * GeodeticReferenceFrame * to not be associated with a Ellipsoid in the case where it is used by a * geocentric crs::GeodeticCRS. We have made the choice of making the ellipsoid * specification compulsory. * * @return the Ellipsoid. */ const EllipsoidNNPtr &GeodeticReferenceFrame::ellipsoid() PROJ_PURE_DEFN { return d->ellipsoid_; } // --------------------------------------------------------------------------- /** \brief Instantiate a GeodeticReferenceFrame * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param ellipsoid the Ellipsoid. * @param anchor the anchor definition, or empty. * @param primeMeridian the PrimeMeridian. * @return new GeodeticReferenceFrame. */ GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::create(const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid, const util::optional &anchor, const PrimeMeridianNNPtr &primeMeridian) { GeodeticReferenceFrameNNPtr grf( GeodeticReferenceFrame::nn_make_shared( ellipsoid, primeMeridian)); grf->setAnchor(anchor); grf->setProperties(properties); return grf; } // --------------------------------------------------------------------------- /** \brief Instantiate a GeodeticReferenceFrame * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param ellipsoid the Ellipsoid. * @param anchor the anchor definition, or empty. * @param anchorEpoch the anchor epoch, or empty. * @param primeMeridian the PrimeMeridian. * @return new GeodeticReferenceFrame. * @since 9.2 */ GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::create( const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid, const util::optional &anchor, const util::optional &anchorEpoch, const PrimeMeridianNNPtr &primeMeridian) { GeodeticReferenceFrameNNPtr grf( GeodeticReferenceFrame::nn_make_shared( ellipsoid, primeMeridian)); grf->setAnchor(anchor); grf->setAnchorEpoch(anchorEpoch); grf->setProperties(properties); return grf; } // --------------------------------------------------------------------------- const GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::createEPSG_6267() { return create(createMapNameEPSGCode("North American Datum 1927", 6267), Ellipsoid::CLARKE_1866, util::optional(), PrimeMeridian::GREENWICH); } // --------------------------------------------------------------------------- const GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::createEPSG_6269() { return create(createMapNameEPSGCode("North American Datum 1983", 6269), Ellipsoid::GRS1980, util::optional(), PrimeMeridian::GREENWICH); } // --------------------------------------------------------------------------- const GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::createEPSG_6326() { return create(createMapNameEPSGCode("World Geodetic System 1984", 6326), Ellipsoid::WGS84, util::optional(), PrimeMeridian::GREENWICH); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticReferenceFrame::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; const auto &ids = identifiers(); formatter->startNode(io::WKTConstants::DATUM, !ids.empty()); std::string l_name(nameStr()); if (l_name.empty()) { l_name = "unnamed"; } if (!isWKT2) { if (formatter->useESRIDialect()) { if (l_name == "World Geodetic System 1984") { l_name = "D_WGS_1984"; } else { bool aliasFound = false; const auto &dbContext = formatter->databaseContext(); if (dbContext) { auto l_alias = dbContext->getAliasFromOfficialName( l_name, "geodetic_datum", "ESRI"); size_t pos; if (!l_alias.empty()) { l_name = std::move(l_alias); aliasFound = true; } else if ((pos = l_name.find(" (")) != std::string::npos) { l_alias = dbContext->getAliasFromOfficialName( l_name.substr(0, pos), "geodetic_datum", "ESRI"); if (!l_alias.empty()) { l_name = std::move(l_alias); aliasFound = true; } } } if (!aliasFound && dbContext) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), "ESRI"); aliasFound = authFactory ->createObjectsFromName( l_name, {io::AuthorityFactory::ObjectType:: GEODETIC_REFERENCE_FRAME}, false // approximateMatch ) .size() == 1; } if (!aliasFound) { l_name = io::WKTFormatter::morphNameToESRI(l_name); if (!starts_with(l_name, "D_")) { l_name = "D_" + l_name; } } } } else { // Replace spaces by underscore for datum names coming from EPSG // so as to emulate GDAL < 3 importFromEPSG() if (ids.size() == 1 && *(ids.front()->codeSpace()) == "EPSG") { l_name = io::WKTFormatter::morphNameToESRI(l_name); } else if (ids.empty()) { const auto &dbContext = formatter->databaseContext(); if (dbContext) { auto factory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), std::string()); // We use anonymous authority and approximate matching, so // as to trigger the caching done in createObjectsFromName() // in that case. auto matches = factory->createObjectsFromName( l_name, {io::AuthorityFactory::ObjectType:: GEODETIC_REFERENCE_FRAME}, true, 2); if (matches.size() == 1) { const auto &match = matches.front(); const auto &matchId = match->identifiers(); if (matchId.size() == 1 && *(matchId.front()->codeSpace()) == "EPSG" && metadata::Identifier::isEquivalentName( l_name.c_str(), match->nameStr().c_str())) { l_name = io::WKTFormatter::morphNameToESRI(l_name); } } } } if (l_name == "World_Geodetic_System_1984") { l_name = "WGS_1984"; } } } formatter->addQuotedString(l_name); ellipsoid()->_exportToWKT(formatter); if (isWKT2) { Datum::getPrivate()->exportAnchorDefinition(formatter); if (formatter->use2019Keywords()) { Datum::getPrivate()->exportAnchorEpoch(formatter); } } else { const auto &TOWGS84Params = formatter->getTOWGS84Parameters(); if (TOWGS84Params.size() == 7) { formatter->startNode(io::WKTConstants::TOWGS84, false); for (const auto &val : TOWGS84Params) { formatter->add(val, 12); } formatter->endNode(); } std::string extension = formatter->getHDatumExtension(); if (!extension.empty()) { formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4_GRIDS"); formatter->addQuotedString(extension); formatter->endNode(); } } if (formatter->outputId()) { formatID(formatter); } // the PRIMEM is exported as a child of the CRS formatter->endNode(); if (formatter->isAtTopLevel()) { const auto &l_primeMeridian(primeMeridian()); if (l_primeMeridian->nameStr() != "Greenwich") { l_primeMeridian->_exportToWKT(formatter); } } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void GeodeticReferenceFrame::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto dynamicGRF = dynamic_cast(this); auto objectContext(formatter->MakeObjectContext( dynamicGRF ? "DynamicGeodeticReferenceFrame" : "GeodeticReferenceFrame", !identifiers().empty())); auto writer = formatter->writer(); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } Datum::getPrivate()->exportAnchorDefinition(formatter); Datum::getPrivate()->exportAnchorEpoch(formatter); if (dynamicGRF) { writer->AddObjKey("frame_reference_epoch"); writer->Add(dynamicGRF->frameReferenceEpoch().value()); } writer->AddObjKey("ellipsoid"); formatter->setOmitTypeInImmediateChild(); ellipsoid()->_exportToJSON(formatter); const auto &l_primeMeridian(primeMeridian()); if (l_primeMeridian->nameStr() != "Greenwich") { writer->AddObjKey("prime_meridian"); formatter->setOmitTypeInImmediateChild(); primeMeridian()->_exportToJSON(formatter); } ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool GeodeticReferenceFrame::isEquivalentToNoExactTypeCheck( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherGRF = dynamic_cast(other); if (otherGRF == nullptr || !Datum::_isEquivalentTo(other, criterion, dbContext)) { return false; } return primeMeridian()->_isEquivalentTo(otherGRF->primeMeridian().get(), criterion, dbContext) && ellipsoid()->_isEquivalentTo(otherGRF->ellipsoid().get(), criterion, dbContext); } // --------------------------------------------------------------------------- bool GeodeticReferenceFrame::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { if (criterion == Criterion::STRICT && !util::isOfExactType(*other)) { return false; } return isEquivalentToNoExactTypeCheck(other, criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- bool GeodeticReferenceFrame::hasEquivalentNameToUsingAlias( const IdentifiedObject *other, const io::DatabaseContextPtr &dbContext) const { if (nameStr() == other->nameStr() || nameStr() == "unknown" || other->nameStr() == "unknown") { return true; } if (ci_starts_with(nameStr(), UNKNOWN_BASED_ON) || ci_starts_with(other->nameStr(), UNKNOWN_BASED_ON)) { return false; } if (dbContext) { if (!identifiers().empty()) { const auto &id = identifiers().front(); const std::string officialNameFromId = dbContext->getName( "geodetic_datum", *(id->codeSpace()), id->code()); const auto aliasesResult = dbContext->getAliases(*(id->codeSpace()), id->code(), nameStr(), "geodetic_datum", std::string()); const auto isNameMatching = [&aliasesResult, &officialNameFromId](const std::string &name) { const char *nameCstr = name.c_str(); if (metadata::Identifier::isEquivalentName( nameCstr, officialNameFromId.c_str())) { return true; } else { for (const auto &aliasResult : aliasesResult) { if (metadata::Identifier::isEquivalentName( nameCstr, aliasResult.c_str())) { return true; } } } return false; }; return isNameMatching(nameStr()) && isNameMatching(other->nameStr()); } else if (!other->identifiers().empty()) { auto otherGRF = dynamic_cast(other); if (otherGRF) { return otherGRF->hasEquivalentNameToUsingAlias(this, dbContext); } return false; } auto aliasesResult = dbContext->getAliases(std::string(), std::string(), nameStr(), "geodetic_datum", std::string()); const char *otherName = other->nameStr().c_str(); for (const auto &aliasResult : aliasesResult) { if (metadata::Identifier::isEquivalentName(otherName, aliasResult.c_str())) { return true; } } } return false; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DynamicGeodeticReferenceFrame::Private { common::Measure frameReferenceEpoch{}; util::optional deformationModelName{}; explicit Private(const common::Measure &frameReferenceEpochIn) : frameReferenceEpoch(frameReferenceEpochIn) {} }; //! @endcond // --------------------------------------------------------------------------- DynamicGeodeticReferenceFrame::DynamicGeodeticReferenceFrame( const EllipsoidNNPtr &ellipsoidIn, const PrimeMeridianNNPtr &primeMeridianIn, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn) : GeodeticReferenceFrame(ellipsoidIn, primeMeridianIn), d(std::make_unique(frameReferenceEpochIn)) { d->deformationModelName = deformationModelNameIn; } // --------------------------------------------------------------------------- #ifdef notdef DynamicGeodeticReferenceFrame::DynamicGeodeticReferenceFrame( const DynamicGeodeticReferenceFrame &other) : GeodeticReferenceFrame(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DynamicGeodeticReferenceFrame::~DynamicGeodeticReferenceFrame() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the epoch to which the coordinates of stations defining the * dynamic geodetic reference frame are referenced. * * Usually given as a decimal year e.g. 2016.47. * * @return the frame reference epoch. */ const common::Measure & DynamicGeodeticReferenceFrame::frameReferenceEpoch() const { return d->frameReferenceEpoch; } // --------------------------------------------------------------------------- /** \brief Return the name of the deformation model. * * @note This is an extension to the \ref ISO_19111_2019 modeling, to * hold the content of the DYNAMIC.MODEL WKT2 node. * * @return the name of the deformation model. */ const util::optional & DynamicGeodeticReferenceFrame::deformationModelName() const { return d->deformationModelName; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool DynamicGeodeticReferenceFrame::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { if (criterion == Criterion::STRICT && !util::isOfExactType(*other)) { return false; } if (!GeodeticReferenceFrame::isEquivalentToNoExactTypeCheck( other, criterion, dbContext)) { return false; } auto otherDGRF = dynamic_cast(other); if (otherDGRF == nullptr) { // we can go here only if criterion != Criterion::STRICT, and thus // given the above check we can consider the objects equivalent. return true; } return frameReferenceEpoch()._isEquivalentTo( otherDGRF->frameReferenceEpoch(), criterion) && metadata::Identifier::isEquivalentName( deformationModelName()->c_str(), otherDGRF->deformationModelName()->c_str()); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DynamicGeodeticReferenceFrame::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (isWKT2 && formatter->use2019Keywords()) { formatter->startNode(io::WKTConstants::DYNAMIC, false); formatter->startNode(io::WKTConstants::FRAMEEPOCH, false); formatter->add( frameReferenceEpoch().convertToUnit(common::UnitOfMeasure::YEAR)); formatter->endNode(); if (deformationModelName().has_value() && !deformationModelName()->empty()) { formatter->startNode(io::WKTConstants::MODEL, false); formatter->addQuotedString(*deformationModelName()); formatter->endNode(); } formatter->endNode(); } GeodeticReferenceFrame::_exportToWKT(formatter); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a DynamicGeodeticReferenceFrame * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param ellipsoid the Ellipsoid. * @param anchor the anchor definition, or empty. * @param primeMeridian the PrimeMeridian. * @param frameReferenceEpochIn the frame reference epoch. * @param deformationModelNameIn deformation model name, or empty * @return new DynamicGeodeticReferenceFrame. */ DynamicGeodeticReferenceFrameNNPtr DynamicGeodeticReferenceFrame::create( const util::PropertyMap &properties, const EllipsoidNNPtr &ellipsoid, const util::optional &anchor, const PrimeMeridianNNPtr &primeMeridian, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn) { DynamicGeodeticReferenceFrameNNPtr grf( DynamicGeodeticReferenceFrame::nn_make_shared< DynamicGeodeticReferenceFrame>(ellipsoid, primeMeridian, frameReferenceEpochIn, deformationModelNameIn)); grf->setAnchor(anchor); grf->setProperties(properties); return grf; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DatumEnsemble::Private { std::vector datums{}; metadata::PositionalAccuracyNNPtr positionalAccuracy; Private(const std::vector &datumsIn, const metadata::PositionalAccuracyNNPtr &accuracy) : datums(datumsIn), positionalAccuracy(accuracy) {} }; //! @endcond // --------------------------------------------------------------------------- DatumEnsemble::DatumEnsemble(const std::vector &datumsIn, const metadata::PositionalAccuracyNNPtr &accuracy) : d(std::make_unique(datumsIn, accuracy)) {} // --------------------------------------------------------------------------- #ifdef notdef DatumEnsemble::DatumEnsemble(const DatumEnsemble &other) : common::ObjectUsage(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DatumEnsemble::~DatumEnsemble() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the set of datums which may be considered to be * insignificantly different from each other. * * @return the set of datums of the DatumEnsemble. */ const std::vector &DatumEnsemble::datums() const { return d->datums; } // --------------------------------------------------------------------------- /** \brief Return the inaccuracy introduced through use of this collection of * datums. * * It is an indication of the differences in coordinate values at all points * between the various realizations that have been grouped into this datum * ensemble. * * @return the accuracy. */ const metadata::PositionalAccuracyNNPtr & DatumEnsemble::positionalAccuracy() const { return d->positionalAccuracy; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DatumNNPtr DatumEnsemble::asDatum(const io::DatabaseContextPtr &dbContext) const { const auto &l_datums = datums(); auto *grf = dynamic_cast(l_datums[0].get()); const auto &l_identifiers = identifiers(); if (dbContext) { if (!l_identifiers.empty()) { const auto &id = l_identifiers[0]; try { auto factory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), *(id->codeSpace())); if (grf) { return factory->createGeodeticDatum(id->code()); } else { return factory->createVerticalDatum(id->code()); } } catch (const std::exception &) { } } } std::string l_name(nameStr()); if (grf) { // Remap to traditional datum names if (l_name == "World Geodetic System 1984 ensemble") { l_name = "World Geodetic System 1984"; } else if (l_name == "European Terrestrial Reference System 1989 ensemble") { l_name = "European Terrestrial Reference System 1989"; } } auto props = util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, l_name); if (isDeprecated()) { props.set(common::IdentifiedObject::DEPRECATED_KEY, true); } if (!l_identifiers.empty()) { const auto &id = l_identifiers[0]; props.set(metadata::Identifier::CODESPACE_KEY, *(id->codeSpace())) .set(metadata::Identifier::CODE_KEY, id->code()); } const auto &l_usages = domains(); if (!l_usages.empty()) { auto array(util::ArrayOfBaseObject::create()); for (const auto &usage : l_usages) { array->add(usage); } props.set(common::ObjectUsage::OBJECT_DOMAIN_KEY, util::nn_static_pointer_cast(array)); } const auto anchor = util::optional(); if (grf) { return GeodeticReferenceFrame::create(props, grf->ellipsoid(), anchor, grf->primeMeridian()); } else { assert(dynamic_cast(l_datums[0].get())); return datum::VerticalReferenceFrame::create(props, anchor); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DatumEnsemble::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2 || !formatter->use2019Keywords()) { return asDatum(formatter->databaseContext())->_exportToWKT(formatter); } const auto &l_datums = datums(); assert(!l_datums.empty()); formatter->startNode(io::WKTConstants::ENSEMBLE, false); const auto &l_name = nameStr(); if (!l_name.empty()) { formatter->addQuotedString(l_name); } else { formatter->addQuotedString("unnamed"); } for (const auto &datum : l_datums) { formatter->startNode(io::WKTConstants::MEMBER, !datum->identifiers().empty()); const auto &l_datum_name = datum->nameStr(); if (!l_datum_name.empty()) { formatter->addQuotedString(l_datum_name); } else { formatter->addQuotedString("unnamed"); } if (formatter->outputId()) { datum->formatID(formatter); } formatter->endNode(); } auto grfFirst = std::dynamic_pointer_cast( l_datums[0].as_nullable()); if (grfFirst) { grfFirst->ellipsoid()->_exportToWKT(formatter); } formatter->startNode(io::WKTConstants::ENSEMBLEACCURACY, false); formatter->add(positionalAccuracy()->value()); formatter->endNode(); // In theory, we should do the following, but currently the WKT grammar // doesn't allow this // ObjectUsage::baseExportToWKT(formatter); if (formatter->outputId()) { formatID(formatter); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DatumEnsemble::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto objectContext( formatter->MakeObjectContext("DatumEnsemble", !identifiers().empty())); auto writer = formatter->writer(); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } const auto &l_datums = datums(); writer->AddObjKey("members"); { auto membersContext(writer->MakeArrayContext(false)); for (const auto &datum : l_datums) { auto memberContext(writer->MakeObjectContext()); writer->AddObjKey("name"); const auto &l_datum_name = datum->nameStr(); if (!l_datum_name.empty()) { writer->Add(l_datum_name); } else { writer->Add("unnamed"); } datum->formatID(formatter); } } auto grfFirst = std::dynamic_pointer_cast( l_datums[0].as_nullable()); if (grfFirst) { writer->AddObjKey("ellipsoid"); formatter->setOmitTypeInImmediateChild(); grfFirst->ellipsoid()->_exportToJSON(formatter); } writer->AddObjKey("accuracy"); writer->Add(positionalAccuracy()->value()); formatID(formatter); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a DatumEnsemble. * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param datumsIn Array of at least 2 datums. * @param accuracy Accuracy of the datum ensemble * @return new DatumEnsemble. * @throw util::Exception in case of error. */ DatumEnsembleNNPtr DatumEnsemble::create( const util::PropertyMap &properties, const std::vector &datumsIn, const metadata::PositionalAccuracyNNPtr &accuracy) // throw(Exception) { if (datumsIn.size() < 2) { throw util::Exception("ensemble should have at least 2 datums"); } if (auto grfFirst = dynamic_cast(datumsIn[0].get())) { for (size_t i = 1; i < datumsIn.size(); i++) { auto grf = dynamic_cast(datumsIn[i].get()); if (!grf) { throw util::Exception( "ensemble should have consistent datum types"); } if (!grfFirst->ellipsoid()->_isEquivalentTo( grf->ellipsoid().get())) { throw util::Exception( "ensemble should have datums with identical ellipsoid"); } if (!grfFirst->primeMeridian()->_isEquivalentTo( grf->primeMeridian().get())) { throw util::Exception( "ensemble should have datums with identical " "prime meridian"); } } } else if (dynamic_cast(datumsIn[0].get())) { for (size_t i = 1; i < datumsIn.size(); i++) { if (!dynamic_cast(datumsIn[i].get())) { throw util::Exception( "ensemble should have consistent datum types"); } } } auto ensemble( DatumEnsemble::nn_make_shared(datumsIn, accuracy)); ensemble->setProperties(properties); return ensemble; } // --------------------------------------------------------------------------- RealizationMethod::RealizationMethod(const std::string &nameIn) : CodeList(nameIn) {} // --------------------------------------------------------------------------- RealizationMethod & RealizationMethod::operator=(const RealizationMethod &other) { CodeList::operator=(other); return *this; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct VerticalReferenceFrame::Private { util::optional realizationMethod_{}; // 2005 = CS_VD_GeoidModelDerived from OGC 01-009 std::string wkt1DatumType_{"2005"}; }; //! @endcond // --------------------------------------------------------------------------- VerticalReferenceFrame::VerticalReferenceFrame( const util::optional &realizationMethodIn) : d(std::make_unique()) { if (!realizationMethodIn->toString().empty()) { d->realizationMethod_ = *realizationMethodIn; } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress VerticalReferenceFrame::~VerticalReferenceFrame() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the method through which this vertical reference frame is * realized. * * @return the realization method. */ const util::optional & VerticalReferenceFrame::realizationMethod() const { return d->realizationMethod_; } // --------------------------------------------------------------------------- /** \brief Instantiate a VerticalReferenceFrame * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param anchor the anchor definition, or empty. * @param realizationMethodIn the realization method, or empty. * @return new VerticalReferenceFrame. */ VerticalReferenceFrameNNPtr VerticalReferenceFrame::create( const util::PropertyMap &properties, const util::optional &anchor, const util::optional &realizationMethodIn) { auto rf(VerticalReferenceFrame::nn_make_shared( realizationMethodIn)); rf->setAnchor(anchor); rf->setProperties(properties); properties.getStringValue("VERT_DATUM_TYPE", rf->d->wkt1DatumType_); return rf; } // --------------------------------------------------------------------------- /** \brief Instantiate a VerticalReferenceFrame * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param anchor the anchor definition, or empty. * @param anchorEpoch the anchor epoch, or empty. * @param realizationMethodIn the realization method, or empty. * @return new VerticalReferenceFrame. * @since 9.2 */ VerticalReferenceFrameNNPtr VerticalReferenceFrame::create( const util::PropertyMap &properties, const util::optional &anchor, const util::optional &anchorEpoch, const util::optional &realizationMethodIn) { auto rf(VerticalReferenceFrame::nn_make_shared( realizationMethodIn)); rf->setAnchor(anchor); rf->setAnchorEpoch(anchorEpoch); rf->setProperties(properties); properties.getStringValue("VERT_DATUM_TYPE", rf->d->wkt1DatumType_); return rf; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const std::string &VerticalReferenceFrame::getWKT1DatumType() const { return d->wkt1DatumType_; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void VerticalReferenceFrame::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; formatter->startNode(isWKT2 ? io::WKTConstants::VDATUM : formatter->useESRIDialect() ? io::WKTConstants::VDATUM : io::WKTConstants::VERT_DATUM, !identifiers().empty()); std::string l_name(nameStr()); if (!l_name.empty()) { if (!isWKT2 && formatter->useESRIDialect()) { bool aliasFound = false; const auto &dbContext = formatter->databaseContext(); if (dbContext) { auto l_alias = dbContext->getAliasFromOfficialName( l_name, "vertical_datum", "ESRI"); if (!l_alias.empty()) { l_name = std::move(l_alias); aliasFound = true; } } if (!aliasFound && dbContext) { auto authFactory = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), "ESRI"); aliasFound = authFactory ->createObjectsFromName( l_name, {io::AuthorityFactory::ObjectType:: VERTICAL_REFERENCE_FRAME}, false // approximateMatch ) .size() == 1; } if (!aliasFound) { l_name = io::WKTFormatter::morphNameToESRI(l_name); } } formatter->addQuotedString(l_name); } else { formatter->addQuotedString("unnamed"); } if (isWKT2) { Datum::getPrivate()->exportAnchorDefinition(formatter); if (formatter->use2019Keywords()) { Datum::getPrivate()->exportAnchorEpoch(formatter); } } else if (!formatter->useESRIDialect()) { formatter->add(d->wkt1DatumType_); const auto &extension = formatter->getVDatumExtension(); if (!extension.empty()) { formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4_GRIDS"); formatter->addQuotedString(extension); formatter->endNode(); } } if (formatter->outputId()) { formatID(formatter); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void VerticalReferenceFrame::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto dynamicGRF = dynamic_cast(this); auto objectContext(formatter->MakeObjectContext( dynamicGRF ? "DynamicVerticalReferenceFrame" : "VerticalReferenceFrame", !identifiers().empty())); auto writer = formatter->writer(); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } Datum::getPrivate()->exportAnchorDefinition(formatter); Datum::getPrivate()->exportAnchorEpoch(formatter); if (dynamicGRF) { writer->AddObjKey("frame_reference_epoch"); writer->Add(dynamicGRF->frameReferenceEpoch().value()); } ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool VerticalReferenceFrame::isEquivalentToNoExactTypeCheck( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherVRF = dynamic_cast(other); if (otherVRF == nullptr || !Datum::_isEquivalentTo(other, criterion, dbContext)) { return false; } if ((realizationMethod().has_value() ^ otherVRF->realizationMethod().has_value())) { return false; } if (realizationMethod().has_value() && otherVRF->realizationMethod().has_value()) { if (*(realizationMethod()) != *(otherVRF->realizationMethod())) { return false; } } return true; } // --------------------------------------------------------------------------- bool VerticalReferenceFrame::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { if (criterion == Criterion::STRICT && !util::isOfExactType(*other)) { return false; } return isEquivalentToNoExactTypeCheck(other, criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct DynamicVerticalReferenceFrame::Private { common::Measure frameReferenceEpoch{}; util::optional deformationModelName{}; explicit Private(const common::Measure &frameReferenceEpochIn) : frameReferenceEpoch(frameReferenceEpochIn) {} }; //! @endcond // --------------------------------------------------------------------------- DynamicVerticalReferenceFrame::DynamicVerticalReferenceFrame( const util::optional &realizationMethodIn, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn) : VerticalReferenceFrame(realizationMethodIn), d(std::make_unique(frameReferenceEpochIn)) { d->deformationModelName = deformationModelNameIn; } // --------------------------------------------------------------------------- #ifdef notdef DynamicVerticalReferenceFrame::DynamicVerticalReferenceFrame( const DynamicVerticalReferenceFrame &other) : VerticalReferenceFrame(other), d(std::make_unique(*other.d)) {} #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DynamicVerticalReferenceFrame::~DynamicVerticalReferenceFrame() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the epoch to which the coordinates of stations defining the * dynamic geodetic reference frame are referenced. * * Usually given as a decimal year e.g. 2016.47. * * @return the frame reference epoch. */ const common::Measure & DynamicVerticalReferenceFrame::frameReferenceEpoch() const { return d->frameReferenceEpoch; } // --------------------------------------------------------------------------- /** \brief Return the name of the deformation model. * * @note This is an extension to the \ref ISO_19111_2019 modeling, to * hold the content of the DYNAMIC.MODEL WKT2 node. * * @return the name of the deformation model. */ const util::optional & DynamicVerticalReferenceFrame::deformationModelName() const { return d->deformationModelName; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool DynamicVerticalReferenceFrame::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { if (criterion == Criterion::STRICT && !util::isOfExactType(*other)) { return false; } if (!VerticalReferenceFrame::isEquivalentToNoExactTypeCheck( other, criterion, dbContext)) { return false; } auto otherDGRF = dynamic_cast(other); if (otherDGRF == nullptr) { // we can go here only if criterion != Criterion::STRICT, and thus // given the above check we can consider the objects equivalent. return true; } return frameReferenceEpoch()._isEquivalentTo( otherDGRF->frameReferenceEpoch(), criterion) && metadata::Identifier::isEquivalentName( deformationModelName()->c_str(), otherDGRF->deformationModelName()->c_str()); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void DynamicVerticalReferenceFrame::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (isWKT2 && formatter->use2019Keywords()) { formatter->startNode(io::WKTConstants::DYNAMIC, false); formatter->startNode(io::WKTConstants::FRAMEEPOCH, false); formatter->add( frameReferenceEpoch().convertToUnit(common::UnitOfMeasure::YEAR)); formatter->endNode(); if (!deformationModelName()->empty()) { formatter->startNode(io::WKTConstants::MODEL, false); formatter->addQuotedString(*deformationModelName()); formatter->endNode(); } formatter->endNode(); } VerticalReferenceFrame::_exportToWKT(formatter); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a DynamicVerticalReferenceFrame * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param anchor the anchor definition, or empty. * @param realizationMethodIn the realization method, or empty. * @param frameReferenceEpochIn the frame reference epoch. * @param deformationModelNameIn deformation model name, or empty * @return new DynamicVerticalReferenceFrame. */ DynamicVerticalReferenceFrameNNPtr DynamicVerticalReferenceFrame::create( const util::PropertyMap &properties, const util::optional &anchor, const util::optional &realizationMethodIn, const common::Measure &frameReferenceEpochIn, const util::optional &deformationModelNameIn) { DynamicVerticalReferenceFrameNNPtr grf( DynamicVerticalReferenceFrame::nn_make_shared< DynamicVerticalReferenceFrame>(realizationMethodIn, frameReferenceEpochIn, deformationModelNameIn)); grf->setAnchor(anchor); grf->setProperties(properties); return grf; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct TemporalDatum::Private { common::DateTime temporalOrigin_; std::string calendar_; Private(const common::DateTime &temporalOriginIn, const std::string &calendarIn) : temporalOrigin_(temporalOriginIn), calendar_(calendarIn) {} }; //! @endcond // --------------------------------------------------------------------------- TemporalDatum::TemporalDatum(const common::DateTime &temporalOriginIn, const std::string &calendarIn) : d(std::make_unique(temporalOriginIn, calendarIn)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TemporalDatum::~TemporalDatum() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the date and time to which temporal coordinates are * referenced, expressed in conformance with ISO 8601. * * @return the temporal origin. */ const common::DateTime &TemporalDatum::temporalOrigin() const { return d->temporalOrigin_; } // --------------------------------------------------------------------------- /** \brief Return the calendar to which the temporal origin is referenced * * Default value: TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN. * * @return the calendar. */ const std::string &TemporalDatum::calendar() const { return d->calendar_; } // --------------------------------------------------------------------------- /** \brief Instantiate a TemporalDatum * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param temporalOriginIn the temporal origin into which temporal coordinates * are referenced. * @param calendarIn the calendar (generally * TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN) * @return new TemporalDatum. */ TemporalDatumNNPtr TemporalDatum::create(const util::PropertyMap &properties, const common::DateTime &temporalOriginIn, const std::string &calendarIn) { auto datum(TemporalDatum::nn_make_shared(temporalOriginIn, calendarIn)); datum->setProperties(properties); return datum; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void TemporalDatum::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { throw io::FormattingException( "TemporalDatum can only be exported to WKT2"); } formatter->startNode(io::WKTConstants::TDATUM, !identifiers().empty()); formatter->addQuotedString(nameStr()); if (formatter->use2019Keywords()) { formatter->startNode(io::WKTConstants::CALENDAR, false); formatter->addQuotedString(calendar()); formatter->endNode(); } const auto &timeOriginStr = temporalOrigin().toString(); if (!timeOriginStr.empty()) { formatter->startNode(io::WKTConstants::TIMEORIGIN, false); if (temporalOrigin().isISO_8601()) { formatter->add(timeOriginStr); } else { formatter->addQuotedString(timeOriginStr); } formatter->endNode(); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void TemporalDatum::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto objectContext( formatter->MakeObjectContext("TemporalDatum", !identifiers().empty())); auto writer = formatter->writer(); writer->AddObjKey("name"); writer->Add(nameStr()); writer->AddObjKey("calendar"); writer->Add(calendar()); const auto &timeOriginStr = temporalOrigin().toString(); if (!timeOriginStr.empty()) { writer->AddObjKey("time_origin"); writer->Add(timeOriginStr); } ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool TemporalDatum::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherTD = dynamic_cast(other); if (otherTD == nullptr || !Datum::_isEquivalentTo(other, criterion, dbContext)) { return false; } return temporalOrigin().toString() == otherTD->temporalOrigin().toString() && calendar() == otherTD->calendar(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct EngineeringDatum::Private {}; //! @endcond // --------------------------------------------------------------------------- EngineeringDatum::EngineeringDatum() : d(nullptr) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress EngineeringDatum::~EngineeringDatum() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a EngineeringDatum * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param anchor the anchor definition, or empty. * @return new EngineeringDatum. */ EngineeringDatumNNPtr EngineeringDatum::create(const util::PropertyMap &properties, const util::optional &anchor) { auto datum(EngineeringDatum::nn_make_shared()); datum->setAnchor(anchor); datum->setProperties(properties); return datum; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void EngineeringDatum::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; formatter->startNode(isWKT2 ? io::WKTConstants::EDATUM : io::WKTConstants::LOCAL_DATUM, !identifiers().empty()); formatter->addQuotedString(nameStr()); if (isWKT2) { Datum::getPrivate()->exportAnchorDefinition(formatter); } else { // Somewhat picked up arbitrarily from OGC 01-009: // CS_LD_Max (Attribute) : 32767 // Highest possible value for local datum types. formatter->add(32767); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void EngineeringDatum::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto objectContext(formatter->MakeObjectContext("EngineeringDatum", !identifiers().empty())); auto writer = formatter->writer(); writer->AddObjKey("name"); writer->Add(nameStr()); Datum::getPrivate()->exportAnchorDefinition(formatter); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool EngineeringDatum::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherDatum = dynamic_cast(other); if (otherDatum == nullptr) { return false; } if (criterion != util::IComparable::Criterion::STRICT && (nameStr().empty() || nameStr() == UNKNOWN_ENGINEERING_DATUM) && (otherDatum->nameStr().empty() || otherDatum->nameStr() == UNKNOWN_ENGINEERING_DATUM)) { return true; } return Datum::_isEquivalentTo(other, criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ParametricDatum::Private {}; //! @endcond // --------------------------------------------------------------------------- ParametricDatum::ParametricDatum() : d(nullptr) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ParametricDatum::~ParametricDatum() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a ParametricDatum * * @param properties See \ref general_properties. * At minimum the name should be defined. * @param anchor the anchor definition, or empty. * @return new ParametricDatum. */ ParametricDatumNNPtr ParametricDatum::create(const util::PropertyMap &properties, const util::optional &anchor) { auto datum(ParametricDatum::nn_make_shared()); datum->setAnchor(anchor); datum->setProperties(properties); return datum; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ParametricDatum::_exportToWKT( io::WKTFormatter *formatter) const // throw(FormattingException) { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { throw io::FormattingException( "ParametricDatum can only be exported to WKT2"); } formatter->startNode(io::WKTConstants::PDATUM, !identifiers().empty()); formatter->addQuotedString(nameStr()); Datum::getPrivate()->exportAnchorDefinition(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ParametricDatum::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto objectContext(formatter->MakeObjectContext("ParametricDatum", !identifiers().empty())); auto writer = formatter->writer(); writer->AddObjKey("name"); writer->Add(nameStr()); Datum::getPrivate()->exportAnchorDefinition(formatter); ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool ParametricDatum::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherTD = dynamic_cast(other); if (otherTD == nullptr || !Datum::_isEquivalentTo(other, criterion, dbContext)) { return false; } return true; } //! @endcond } // namespace datum NS_PROJ_END proj-9.6.0/src/iso19111/factory.cpp000664 001754 001755 00001470236 14764566077 016567 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinates.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj/internal/lru_cache.hpp" #include "proj/internal/tracing.hpp" #include "operation/coordinateoperation_internal.hpp" #include "operation/parammappings.hpp" #include "filemanager.hpp" #include "sqlite3_utils.hpp" #include #include #include #include #include #include #include #include #include #include #include #include // std::ostringstream #include #include #include "proj_constants.h" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // clang-format on #include #ifdef EMBED_RESOURCE_FILES #include "embedded_resources.h" #endif // Custom SQLite VFS as our database is not supposed to be modified in // parallel. This is slightly faster #define ENABLE_CUSTOM_LOCKLESS_VFS #if defined(_WIN32) && defined(PROJ_HAS_PTHREADS) #undef PROJ_HAS_PTHREADS #endif /* SQLite3 might use seak()+read() or pread[64]() to read data */ /* The later allows the same SQLite handle to be safely used in forked */ /* children of a parent process, while the former doesn't. */ /* So we use pthread_atfork() to set a flag in forked children, to ask them */ /* to close and reopen their database handle. */ #if defined(PROJ_HAS_PTHREADS) && !defined(SQLITE_USE_PREAD) #include #define REOPEN_SQLITE_DB_AFTER_FORK #endif using namespace NS_PROJ::internal; using namespace NS_PROJ::common; NS_PROJ_START namespace io { //! @cond Doxygen_Suppress // CRS subtypes #define GEOG_2D "geographic 2D" #define GEOG_3D "geographic 3D" #define GEOCENTRIC "geocentric" #define OTHER "other" #define PROJECTED "projected" #define ENGINEERING "engineering" #define VERTICAL "vertical" #define COMPOUND "compound" #define GEOG_2D_SINGLE_QUOTED "'geographic 2D'" #define GEOG_3D_SINGLE_QUOTED "'geographic 3D'" #define GEOCENTRIC_SINGLE_QUOTED "'geocentric'" // Coordinate system types constexpr const char *CS_TYPE_ELLIPSOIDAL = cs::EllipsoidalCS::WKT2_TYPE; constexpr const char *CS_TYPE_CARTESIAN = cs::CartesianCS::WKT2_TYPE; constexpr const char *CS_TYPE_SPHERICAL = cs::SphericalCS::WKT2_TYPE; constexpr const char *CS_TYPE_VERTICAL = cs::VerticalCS::WKT2_TYPE; constexpr const char *CS_TYPE_ORDINAL = cs::OrdinalCS::WKT2_TYPE; // See data/sql/metadata.sql for the semantics of those constants constexpr int DATABASE_LAYOUT_VERSION_MAJOR = 1; // If the code depends on the new additions, then DATABASE_LAYOUT_VERSION_MINOR // must be incremented. constexpr int DATABASE_LAYOUT_VERSION_MINOR = 5; constexpr size_t N_MAX_PARAMS = 7; #ifdef EMBED_RESOURCE_FILES constexpr const char *EMBEDDED_PROJ_DB = "__embedded_proj_db__"; #endif // --------------------------------------------------------------------------- struct SQLValues { enum class Type { STRING, INT, DOUBLE }; // cppcheck-suppress noExplicitConstructor SQLValues(const std::string &value) : type_(Type::STRING), str_(value) {} // cppcheck-suppress noExplicitConstructor SQLValues(int value) : type_(Type::INT), int_(value) {} // cppcheck-suppress noExplicitConstructor SQLValues(double value) : type_(Type::DOUBLE), double_(value) {} const Type &type() const { return type_; } // cppcheck-suppress functionStatic const std::string &stringValue() const { return str_; } // cppcheck-suppress functionStatic int intValue() const { return int_; } // cppcheck-suppress functionStatic double doubleValue() const { return double_; } private: Type type_; std::string str_{}; int int_ = 0; double double_ = 0.0; }; // --------------------------------------------------------------------------- using SQLRow = std::vector; using SQLResultSet = std::list; using ListOfParams = std::list; // --------------------------------------------------------------------------- static double PROJ_SQLITE_GetValAsDouble(sqlite3_value *val, bool &gotVal) { switch (sqlite3_value_type(val)) { case SQLITE_FLOAT: gotVal = true; return sqlite3_value_double(val); case SQLITE_INTEGER: gotVal = true; return static_cast(sqlite3_value_int64(val)); default: gotVal = false; return 0.0; } } // --------------------------------------------------------------------------- static void PROJ_SQLITE_pseudo_area_from_swne(sqlite3_context *pContext, int /* argc */, sqlite3_value **argv) { bool b0, b1, b2, b3; double south_lat = PROJ_SQLITE_GetValAsDouble(argv[0], b0); double west_lon = PROJ_SQLITE_GetValAsDouble(argv[1], b1); double north_lat = PROJ_SQLITE_GetValAsDouble(argv[2], b2); double east_lon = PROJ_SQLITE_GetValAsDouble(argv[3], b3); if (!b0 || !b1 || !b2 || !b3) { sqlite3_result_null(pContext); return; } // Deal with area crossing antimeridian if (east_lon < west_lon) { east_lon += 360.0; } // Integrate cos(lat) between south_lat and north_lat double pseudo_area = (east_lon - west_lon) * (std::sin(common::Angle(north_lat).getSIValue()) - std::sin(common::Angle(south_lat).getSIValue())); sqlite3_result_double(pContext, pseudo_area); } // --------------------------------------------------------------------------- static void PROJ_SQLITE_intersects_bbox(sqlite3_context *pContext, int /* argc */, sqlite3_value **argv) { bool b0, b1, b2, b3, b4, b5, b6, b7; double south_lat1 = PROJ_SQLITE_GetValAsDouble(argv[0], b0); double west_lon1 = PROJ_SQLITE_GetValAsDouble(argv[1], b1); double north_lat1 = PROJ_SQLITE_GetValAsDouble(argv[2], b2); double east_lon1 = PROJ_SQLITE_GetValAsDouble(argv[3], b3); double south_lat2 = PROJ_SQLITE_GetValAsDouble(argv[4], b4); double west_lon2 = PROJ_SQLITE_GetValAsDouble(argv[5], b5); double north_lat2 = PROJ_SQLITE_GetValAsDouble(argv[6], b6); double east_lon2 = PROJ_SQLITE_GetValAsDouble(argv[7], b7); if (!b0 || !b1 || !b2 || !b3 || !b4 || !b5 || !b6 || !b7) { sqlite3_result_null(pContext); return; } auto bbox1 = metadata::GeographicBoundingBox::create(west_lon1, south_lat1, east_lon1, north_lat1); auto bbox2 = metadata::GeographicBoundingBox::create(west_lon2, south_lat2, east_lon2, north_lat2); sqlite3_result_int(pContext, bbox1->intersects(bbox2) ? 1 : 0); } // --------------------------------------------------------------------------- class SQLiteHandle { std::string path_{}; sqlite3 *sqlite_handle_ = nullptr; bool close_handle_ = true; #ifdef REOPEN_SQLITE_DB_AFTER_FORK bool is_valid_ = true; #endif int nLayoutVersionMajor_ = 0; int nLayoutVersionMinor_ = 0; #if defined(ENABLE_CUSTOM_LOCKLESS_VFS) || defined(EMBED_RESOURCE_FILES) std::unique_ptr vfs_{}; #endif SQLiteHandle(const SQLiteHandle &) = delete; SQLiteHandle &operator=(const SQLiteHandle &) = delete; SQLiteHandle(sqlite3 *sqlite_handle, bool close_handle) : sqlite_handle_(sqlite_handle), close_handle_(close_handle) { assert(sqlite_handle_); } // cppcheck-suppress functionStatic void initialize(); SQLResultSet run(const std::string &sql, const ListOfParams ¶meters = ListOfParams(), bool useMaxFloatPrecision = false); public: ~SQLiteHandle(); const std::string &path() const { return path_; } sqlite3 *handle() { return sqlite_handle_; } #ifdef REOPEN_SQLITE_DB_AFTER_FORK bool isValid() const { return is_valid_; } void invalidate() { is_valid_ = false; } #endif static std::shared_ptr open(PJ_CONTEXT *ctx, const std::string &path); // might not be shared between thread depending how the handle was opened! static std::shared_ptr initFromExisting(sqlite3 *sqlite_handle, bool close_handle, int nLayoutVersionMajor, int nLayoutVersionMinor); static std::unique_ptr initFromExistingUniquePtr(sqlite3 *sqlite_handle, bool close_handle); void checkDatabaseLayout(const std::string &mainDbPath, const std::string &path, const std::string &dbNamePrefix); SQLResultSet run(sqlite3_stmt *stmt, const std::string &sql, const ListOfParams ¶meters = ListOfParams(), bool useMaxFloatPrecision = false); inline int getLayoutVersionMajor() const { return nLayoutVersionMajor_; } inline int getLayoutVersionMinor() const { return nLayoutVersionMinor_; } }; // --------------------------------------------------------------------------- SQLiteHandle::~SQLiteHandle() { if (close_handle_) { sqlite3_close(sqlite_handle_); } } // --------------------------------------------------------------------------- std::shared_ptr SQLiteHandle::open(PJ_CONTEXT *ctx, const std::string &pathIn) { std::string path(pathIn); const int sqlite3VersionNumber = sqlite3_libversion_number(); // Minimum version for correct performance: 3.11 if (sqlite3VersionNumber < 3 * 1000000 + 11 * 1000) { pj_log(ctx, PJ_LOG_ERROR, "SQLite3 version is %s, whereas at least 3.11 should be used", sqlite3_libversion()); } std::string vfsName; #if defined(ENABLE_CUSTOM_LOCKLESS_VFS) || defined(EMBED_RESOURCE_FILES) std::unique_ptr vfs; #endif #ifdef EMBED_RESOURCE_FILES if (path == EMBEDDED_PROJ_DB && ctx->custom_sqlite3_vfs_name.empty()) { unsigned int proj_db_size = 0; const unsigned char *proj_db = pj_get_embedded_proj_db(&proj_db_size); vfs = SQLite3VFS::createMem(proj_db, proj_db_size); if (vfs == nullptr) { throw FactoryException("Open of " + path + " failed"); } std::ostringstream buffer; buffer << "file:/proj.db?immutable=1&ptr="; buffer << reinterpret_cast(proj_db); buffer << "&sz="; buffer << proj_db_size; buffer << "&max="; buffer << proj_db_size; buffer << "&vfs="; buffer << vfs->name(); path = buffer.str(); } else #endif #ifdef ENABLE_CUSTOM_LOCKLESS_VFS if (ctx->custom_sqlite3_vfs_name.empty()) { vfs = SQLite3VFS::create(false, true, true); if (vfs == nullptr) { throw FactoryException("Open of " + path + " failed"); } vfsName = vfs->name(); } else #endif { vfsName = ctx->custom_sqlite3_vfs_name; } sqlite3 *sqlite_handle = nullptr; // SQLITE_OPEN_FULLMUTEX as this will be used from concurrent threads if (sqlite3_open_v2( path.c_str(), &sqlite_handle, SQLITE_OPEN_READONLY | SQLITE_OPEN_FULLMUTEX | SQLITE_OPEN_URI, vfsName.empty() ? nullptr : vfsName.c_str()) != SQLITE_OK || !sqlite_handle) { if (sqlite_handle != nullptr) { sqlite3_close(sqlite_handle); } throw FactoryException("Open of " + path + " failed"); } auto handle = std::shared_ptr(new SQLiteHandle(sqlite_handle, true)); #if defined(ENABLE_CUSTOM_LOCKLESS_VFS) || defined(EMBED_RESOURCE_FILES) handle->vfs_ = std::move(vfs); #endif handle->initialize(); handle->path_ = path; handle->checkDatabaseLayout(path, path, std::string()); return handle; } // --------------------------------------------------------------------------- std::shared_ptr SQLiteHandle::initFromExisting(sqlite3 *sqlite_handle, bool close_handle, int nLayoutVersionMajor, int nLayoutVersionMinor) { auto handle = std::shared_ptr( new SQLiteHandle(sqlite_handle, close_handle)); handle->nLayoutVersionMajor_ = nLayoutVersionMajor; handle->nLayoutVersionMinor_ = nLayoutVersionMinor; handle->initialize(); return handle; } // --------------------------------------------------------------------------- std::unique_ptr SQLiteHandle::initFromExistingUniquePtr(sqlite3 *sqlite_handle, bool close_handle) { auto handle = std::unique_ptr( new SQLiteHandle(sqlite_handle, close_handle)); handle->initialize(); return handle; } // --------------------------------------------------------------------------- SQLResultSet SQLiteHandle::run(sqlite3_stmt *stmt, const std::string &sql, const ListOfParams ¶meters, bool useMaxFloatPrecision) { int nBindField = 1; for (const auto ¶m : parameters) { const auto ¶mType = param.type(); if (paramType == SQLValues::Type::STRING) { const auto &strValue = param.stringValue(); sqlite3_bind_text(stmt, nBindField, strValue.c_str(), static_cast(strValue.size()), SQLITE_TRANSIENT); } else if (paramType == SQLValues::Type::INT) { sqlite3_bind_int(stmt, nBindField, param.intValue()); } else { assert(paramType == SQLValues::Type::DOUBLE); sqlite3_bind_double(stmt, nBindField, param.doubleValue()); } nBindField++; } #ifdef TRACE_DATABASE size_t nPos = 0; std::string sqlSubst(sql); for (const auto ¶m : parameters) { nPos = sqlSubst.find('?', nPos); assert(nPos != std::string::npos); std::string strValue; const auto paramType = param.type(); if (paramType == SQLValues::Type::STRING) { strValue = '\'' + param.stringValue() + '\''; } else if (paramType == SQLValues::Type::INT) { strValue = toString(param.intValue()); } else { strValue = toString(param.doubleValue()); } sqlSubst = sqlSubst.substr(0, nPos) + strValue + sqlSubst.substr(nPos + 1); nPos += strValue.size(); } logTrace(sqlSubst, "DATABASE"); #endif SQLResultSet result; const int column_count = sqlite3_column_count(stmt); while (true) { int ret = sqlite3_step(stmt); if (ret == SQLITE_ROW) { SQLRow row(column_count); for (int i = 0; i < column_count; i++) { if (useMaxFloatPrecision && sqlite3_column_type(stmt, i) == SQLITE_FLOAT) { // sqlite3_column_text() does not use maximum precision std::ostringstream buffer; buffer.imbue(std::locale::classic()); buffer << std::setprecision(18); buffer << sqlite3_column_double(stmt, i); row[i] = buffer.str(); } else { const char *txt = reinterpret_cast( sqlite3_column_text(stmt, i)); if (txt) { row[i] = txt; } } } result.emplace_back(std::move(row)); } else if (ret == SQLITE_DONE) { break; } else { throw FactoryException(std::string("SQLite error on ") .append(sql) .append(": code = ") .append(internal::toString(ret)) .append(", msg = ") .append(sqlite3_errmsg(sqlite_handle_))); } } return result; } // --------------------------------------------------------------------------- SQLResultSet SQLiteHandle::run(const std::string &sql, const ListOfParams ¶meters, bool useMaxFloatPrecision) { sqlite3_stmt *stmt = nullptr; try { if (sqlite3_prepare_v2(sqlite_handle_, sql.c_str(), static_cast(sql.size()), &stmt, nullptr) != SQLITE_OK) { throw FactoryException("SQLite error on " + sql + ": " + sqlite3_errmsg(sqlite_handle_)); } auto ret = run(stmt, sql, parameters, useMaxFloatPrecision); sqlite3_finalize(stmt); return ret; } catch (const std::exception &) { if (stmt) sqlite3_finalize(stmt); throw; } } // --------------------------------------------------------------------------- void SQLiteHandle::checkDatabaseLayout(const std::string &mainDbPath, const std::string &path, const std::string &dbNamePrefix) { if (!dbNamePrefix.empty() && run("SELECT 1 FROM " + dbNamePrefix + "sqlite_master WHERE name = 'metadata'") .empty()) { // Accept auxiliary databases without metadata table (sparse DBs) return; } auto res = run("SELECT key, value FROM " + dbNamePrefix + "metadata WHERE key IN " "('DATABASE.LAYOUT.VERSION.MAJOR', " "'DATABASE.LAYOUT.VERSION.MINOR')"); if (res.empty() && !dbNamePrefix.empty()) { // Accept auxiliary databases without layout metadata. return; } if (res.size() != 2) { throw FactoryException( path + " lacks DATABASE.LAYOUT.VERSION.MAJOR / " "DATABASE.LAYOUT.VERSION.MINOR " "metadata. It comes from another PROJ installation."); } int major = 0; int minor = 0; for (const auto &row : res) { if (row[0] == "DATABASE.LAYOUT.VERSION.MAJOR") { major = atoi(row[1].c_str()); } else if (row[0] == "DATABASE.LAYOUT.VERSION.MINOR") { minor = atoi(row[1].c_str()); } } if (major != DATABASE_LAYOUT_VERSION_MAJOR) { throw FactoryException( path + " contains DATABASE.LAYOUT.VERSION.MAJOR = " + toString(major) + " whereas " + toString(DATABASE_LAYOUT_VERSION_MAJOR) + " is expected. " "It comes from another PROJ installation."); } if (minor < DATABASE_LAYOUT_VERSION_MINOR) { throw FactoryException( path + " contains DATABASE.LAYOUT.VERSION.MINOR = " + toString(minor) + " whereas a number >= " + toString(DATABASE_LAYOUT_VERSION_MINOR) + " is expected. " "It comes from another PROJ installation."); } if (dbNamePrefix.empty()) { nLayoutVersionMajor_ = major; nLayoutVersionMinor_ = minor; } else if (nLayoutVersionMajor_ != major || nLayoutVersionMinor_ != minor) { throw FactoryException( "Auxiliary database " + path + " contains a DATABASE.LAYOUT.VERSION = " + toString(major) + '.' + toString(minor) + " which is different from the one from the main database " + mainDbPath + " which is " + toString(nLayoutVersionMajor_) + '.' + toString(nLayoutVersionMinor_)); } } // --------------------------------------------------------------------------- #ifndef SQLITE_DETERMINISTIC #define SQLITE_DETERMINISTIC 0 #endif void SQLiteHandle::initialize() { // There is a bug in sqlite 3.38.0 with some complex queries. // Cf https://github.com/OSGeo/PROJ/issues/3077 // Disabling Bloom-filter pull-down optimization as suggested in // https://sqlite.org/forum/forumpost/7d3a75438c const int sqlite3VersionNumber = sqlite3_libversion_number(); if (sqlite3VersionNumber == 3 * 1000000 + 38 * 1000) { sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite_handle_, 0x100000); } sqlite3_create_function(sqlite_handle_, "pseudo_area_from_swne", 4, SQLITE_UTF8 | SQLITE_DETERMINISTIC, nullptr, PROJ_SQLITE_pseudo_area_from_swne, nullptr, nullptr); sqlite3_create_function(sqlite_handle_, "intersects_bbox", 8, SQLITE_UTF8 | SQLITE_DETERMINISTIC, nullptr, PROJ_SQLITE_intersects_bbox, nullptr, nullptr); } // --------------------------------------------------------------------------- class SQLiteHandleCache { #ifdef REOPEN_SQLITE_DB_AFTER_FORK bool firstTime_ = true; #endif std::mutex sMutex_{}; // Map dbname to SQLiteHandle lru11::Cache> cache_{}; public: static SQLiteHandleCache &get(); std::shared_ptr getHandle(const std::string &path, PJ_CONTEXT *ctx); void clear(); #ifdef REOPEN_SQLITE_DB_AFTER_FORK void invalidateHandles(); #endif }; // --------------------------------------------------------------------------- SQLiteHandleCache &SQLiteHandleCache::get() { // Global cache static SQLiteHandleCache gSQLiteHandleCache; return gSQLiteHandleCache; } // --------------------------------------------------------------------------- void SQLiteHandleCache::clear() { std::lock_guard lock(sMutex_); cache_.clear(); } // --------------------------------------------------------------------------- std::shared_ptr SQLiteHandleCache::getHandle(const std::string &path, PJ_CONTEXT *ctx) { std::lock_guard lock(sMutex_); #ifdef REOPEN_SQLITE_DB_AFTER_FORK if (firstTime_) { firstTime_ = false; pthread_atfork( []() { // This mutex needs to be acquired by 'invalidateHandles()'. // The forking thread needs to own this mutex during the fork. // Otherwise there's an opporunity for another thread to own // the mutex during the fork, leaving the child process unable // to acquire the mutex in invalidateHandles(). SQLiteHandleCache::get().sMutex_.lock(); }, []() { SQLiteHandleCache::get().sMutex_.unlock(); }, []() { SQLiteHandleCache::get().sMutex_.unlock(); SQLiteHandleCache::get().invalidateHandles(); }); } #endif std::shared_ptr handle; std::string key = path + ctx->custom_sqlite3_vfs_name; if (!cache_.tryGet(key, handle)) { handle = SQLiteHandle::open(ctx, path); cache_.insert(key, handle); } return handle; } #ifdef REOPEN_SQLITE_DB_AFTER_FORK // --------------------------------------------------------------------------- void SQLiteHandleCache::invalidateHandles() { std::lock_guard lock(sMutex_); const auto lambda = [](const lru11::KeyValuePair> &kvp) { kvp.value->invalidate(); }; cache_.cwalk(lambda); cache_.clear(); } #endif // --------------------------------------------------------------------------- struct DatabaseContext::Private { Private(); ~Private(); void open(const std::string &databasePath, PJ_CONTEXT *ctx); void setHandle(sqlite3 *sqlite_handle); const std::shared_ptr &handle(); PJ_CONTEXT *pjCtxt() const { return pjCtxt_; } void setPjCtxt(PJ_CONTEXT *ctxt) { pjCtxt_ = ctxt; } SQLResultSet run(const std::string &sql, const ListOfParams ¶meters = ListOfParams(), bool useMaxFloatPrecision = false); std::vector getDatabaseStructure(); // cppcheck-suppress functionStatic const std::string &getPath() const { return databasePath_; } void attachExtraDatabases( const std::vector &auxiliaryDatabasePaths); // Mechanism to detect recursion in calls from // AuthorityFactory::createXXX() -> createFromUserInput() -> // AuthorityFactory::createXXX() struct RecursionDetector { explicit RecursionDetector(const DatabaseContextNNPtr &context) : dbContext_(context) { if (dbContext_->getPrivate()->recLevel_ == 2) { // Throw exception before incrementing, since the destructor // will not be called throw FactoryException("Too many recursive calls"); } ++dbContext_->getPrivate()->recLevel_; } ~RecursionDetector() { --dbContext_->getPrivate()->recLevel_; } private: DatabaseContextNNPtr dbContext_; }; std::map> &getMapCanonicalizeGRFName() { return mapCanonicalizeGRFName_; } // cppcheck-suppress functionStatic common::UnitOfMeasurePtr getUOMFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const common::UnitOfMeasureNNPtr &uom); // cppcheck-suppress functionStatic crs::CRSPtr getCRSFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const crs::CRSNNPtr &crs); datum::GeodeticReferenceFramePtr // cppcheck-suppress functionStatic getGeodeticDatumFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const datum::GeodeticReferenceFrameNNPtr &datum); datum::DatumEnsemblePtr // cppcheck-suppress functionStatic getDatumEnsembleFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const datum::DatumEnsembleNNPtr &datumEnsemble); datum::EllipsoidPtr // cppcheck-suppress functionStatic getEllipsoidFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const datum::EllipsoidNNPtr &ellipsoid); datum::PrimeMeridianPtr // cppcheck-suppress functionStatic getPrimeMeridianFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const datum::PrimeMeridianNNPtr &pm); // cppcheck-suppress functionStatic cs::CoordinateSystemPtr getCoordinateSystemFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const cs::CoordinateSystemNNPtr &cs); // cppcheck-suppress functionStatic metadata::ExtentPtr getExtentFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const metadata::ExtentNNPtr &extent); // cppcheck-suppress functionStatic bool getCRSToCRSCoordOpFromCache( const std::string &code, std::vector &list); // cppcheck-suppress functionStatic void cache(const std::string &code, const std::vector &list); struct GridInfoCache { std::string fullFilename{}; std::string packageName{}; std::string url{}; bool found = false; bool directDownload = false; bool openLicense = false; bool gridAvailable = false; }; // cppcheck-suppress functionStatic bool getGridInfoFromCache(const std::string &code, GridInfoCache &info); // cppcheck-suppress functionStatic void evictGridInfoFromCache(const std::string &code); // cppcheck-suppress functionStatic void cache(const std::string &code, const GridInfoCache &info); struct VersionedAuthName { std::string versionedAuthName{}; std::string authName{}; std::string version{}; int priority = 0; }; const std::vector &getCacheAuthNameWithVersion(); private: friend class DatabaseContext; // This is a manual implementation of std::enable_shared_from_this<> that // avoids publicly deriving from it. std::weak_ptr self_{}; std::string databasePath_{}; std::vector auxiliaryDatabasePaths_{}; std::shared_ptr sqlite_handle_{}; unsigned int queryCounter_ = 0; std::map mapSqlToStatement_{}; PJ_CONTEXT *pjCtxt_ = nullptr; int recLevel_ = 0; bool detach_ = false; std::string lastMetadataValue_{}; std::map> mapCanonicalizeGRFName_{}; // Used by startInsertStatementsSession() and related functions std::string memoryDbForInsertPath_{}; std::unique_ptr memoryDbHandle_{}; using LRUCacheOfObjects = lru11::Cache; static constexpr size_t CACHE_SIZE = 128; LRUCacheOfObjects cacheUOM_{CACHE_SIZE}; LRUCacheOfObjects cacheCRS_{CACHE_SIZE}; LRUCacheOfObjects cacheEllipsoid_{CACHE_SIZE}; LRUCacheOfObjects cacheGeodeticDatum_{CACHE_SIZE}; LRUCacheOfObjects cacheDatumEnsemble_{CACHE_SIZE}; LRUCacheOfObjects cachePrimeMeridian_{CACHE_SIZE}; LRUCacheOfObjects cacheCS_{CACHE_SIZE}; LRUCacheOfObjects cacheExtent_{CACHE_SIZE}; lru11::Cache> cacheCRSToCrsCoordOp_{CACHE_SIZE}; lru11::Cache cacheGridInfo_{CACHE_SIZE}; std::map> cacheAllowedAuthorities_{}; lru11::Cache> cacheAliasNames_{ CACHE_SIZE}; lru11::Cache cacheNames_{CACHE_SIZE}; std::vector cacheAuthNameWithVersion_{}; static void insertIntoCache(LRUCacheOfObjects &cache, const std::string &code, const util::BaseObjectPtr &obj); static void getFromCache(LRUCacheOfObjects &cache, const std::string &code, util::BaseObjectPtr &obj); void closeDB() noexcept; void clearCaches(); std::string findFreeCode(const std::string &tableName, const std::string &authName, const std::string &codePrototype); void identify(const DatabaseContextNNPtr &dbContext, const cs::CoordinateSystemNNPtr &obj, std::string &authName, std::string &code); void identifyOrInsert(const DatabaseContextNNPtr &dbContext, const cs::CoordinateSystemNNPtr &obj, const std::string &ownerType, const std::string &ownerAuthName, const std::string &ownerCode, std::string &authName, std::string &code, std::vector &sqlStatements); void identify(const DatabaseContextNNPtr &dbContext, const common::UnitOfMeasure &obj, std::string &authName, std::string &code); void identifyOrInsert(const DatabaseContextNNPtr &dbContext, const common::UnitOfMeasure &unit, const std::string &ownerAuthName, std::string &authName, std::string &code, std::vector &sqlStatements); void appendSql(std::vector &sqlStatements, const std::string &sql); void identifyOrInsertUsages(const common::ObjectUsageNNPtr &obj, const std::string &tableName, const std::string &authName, const std::string &code, const std::vector &allowedAuthorities, std::vector &sqlStatements); std::vector getInsertStatementsFor(const datum::PrimeMeridianNNPtr &pm, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const datum::EllipsoidNNPtr &ellipsoid, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const datum::GeodeticReferenceFrameNNPtr &datum, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const datum::DatumEnsembleNNPtr &ensemble, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const crs::GeodeticCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const crs::ProjectedCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const datum::VerticalReferenceFrameNNPtr &datum, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const crs::VerticalCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); std::vector getInsertStatementsFor(const crs::CompoundCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities); Private(const Private &) = delete; Private &operator=(const Private &) = delete; }; // --------------------------------------------------------------------------- DatabaseContext::Private::Private() = default; // --------------------------------------------------------------------------- DatabaseContext::Private::~Private() { assert(recLevel_ == 0); closeDB(); } // --------------------------------------------------------------------------- void DatabaseContext::Private::closeDB() noexcept { if (detach_) { // Workaround a bug visible in SQLite 3.8.1 and 3.8.2 that causes // a crash in TEST(factory, attachExtraDatabases_auxiliary) // due to possible wrong caching of key info. // The bug is specific to using a memory file with shared cache as an // auxiliary DB. // The fix was likely in 3.8.8 // https://github.com/mackyle/sqlite/commit/d412d4b8731991ecbd8811874aa463d0821673eb // But just after 3.8.2, // https://github.com/mackyle/sqlite/commit/ccf328c4318eacedab9ed08c404bc4f402dcad19 // also seemed to hide the issue. // Detaching a database hides the issue, not sure if it is by chance... try { run("DETACH DATABASE db_0"); } catch (...) { } detach_ = false; } for (auto &pair : mapSqlToStatement_) { sqlite3_finalize(pair.second); } mapSqlToStatement_.clear(); sqlite_handle_.reset(); } // --------------------------------------------------------------------------- void DatabaseContext::Private::clearCaches() { cacheUOM_.clear(); cacheCRS_.clear(); cacheEllipsoid_.clear(); cacheGeodeticDatum_.clear(); cacheDatumEnsemble_.clear(); cachePrimeMeridian_.clear(); cacheCS_.clear(); cacheExtent_.clear(); cacheCRSToCrsCoordOp_.clear(); cacheGridInfo_.clear(); cacheAllowedAuthorities_.clear(); cacheAliasNames_.clear(); cacheNames_.clear(); } // --------------------------------------------------------------------------- const std::shared_ptr &DatabaseContext::Private::handle() { #ifdef REOPEN_SQLITE_DB_AFTER_FORK if (sqlite_handle_ && !sqlite_handle_->isValid()) { closeDB(); open(databasePath_, pjCtxt_); if (!auxiliaryDatabasePaths_.empty()) { attachExtraDatabases(auxiliaryDatabasePaths_); } } #endif return sqlite_handle_; } // --------------------------------------------------------------------------- void DatabaseContext::Private::insertIntoCache(LRUCacheOfObjects &cache, const std::string &code, const util::BaseObjectPtr &obj) { cache.insert(code, obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::getFromCache(LRUCacheOfObjects &cache, const std::string &code, util::BaseObjectPtr &obj) { cache.tryGet(code, obj); } // --------------------------------------------------------------------------- bool DatabaseContext::Private::getCRSToCRSCoordOpFromCache( const std::string &code, std::vector &list) { return cacheCRSToCrsCoordOp_.tryGet(code, list); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache( const std::string &code, const std::vector &list) { cacheCRSToCrsCoordOp_.insert(code, list); } // --------------------------------------------------------------------------- crs::CRSPtr DatabaseContext::Private::getCRSFromCache(const std::string &code) { util::BaseObjectPtr obj; getFromCache(cacheCRS_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache(const std::string &code, const crs::CRSNNPtr &crs) { insertIntoCache(cacheCRS_, code, crs.as_nullable()); } // --------------------------------------------------------------------------- common::UnitOfMeasurePtr DatabaseContext::Private::getUOMFromCache(const std::string &code) { util::BaseObjectPtr obj; getFromCache(cacheUOM_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache(const std::string &code, const common::UnitOfMeasureNNPtr &uom) { insertIntoCache(cacheUOM_, code, uom.as_nullable()); } // --------------------------------------------------------------------------- datum::GeodeticReferenceFramePtr DatabaseContext::Private::getGeodeticDatumFromCache(const std::string &code) { util::BaseObjectPtr obj; getFromCache(cacheGeodeticDatum_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache( const std::string &code, const datum::GeodeticReferenceFrameNNPtr &datum) { insertIntoCache(cacheGeodeticDatum_, code, datum.as_nullable()); } // --------------------------------------------------------------------------- datum::DatumEnsemblePtr DatabaseContext::Private::getDatumEnsembleFromCache(const std::string &code) { util::BaseObjectPtr obj; getFromCache(cacheDatumEnsemble_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache( const std::string &code, const datum::DatumEnsembleNNPtr &datumEnsemble) { insertIntoCache(cacheDatumEnsemble_, code, datumEnsemble.as_nullable()); } // --------------------------------------------------------------------------- datum::EllipsoidPtr DatabaseContext::Private::getEllipsoidFromCache(const std::string &code) { util::BaseObjectPtr obj; getFromCache(cacheEllipsoid_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache(const std::string &code, const datum::EllipsoidNNPtr &ellps) { insertIntoCache(cacheEllipsoid_, code, ellps.as_nullable()); } // --------------------------------------------------------------------------- datum::PrimeMeridianPtr DatabaseContext::Private::getPrimeMeridianFromCache(const std::string &code) { util::BaseObjectPtr obj; getFromCache(cachePrimeMeridian_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache(const std::string &code, const datum::PrimeMeridianNNPtr &pm) { insertIntoCache(cachePrimeMeridian_, code, pm.as_nullable()); } // --------------------------------------------------------------------------- cs::CoordinateSystemPtr DatabaseContext::Private::getCoordinateSystemFromCache( const std::string &code) { util::BaseObjectPtr obj; getFromCache(cacheCS_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache(const std::string &code, const cs::CoordinateSystemNNPtr &cs) { insertIntoCache(cacheCS_, code, cs.as_nullable()); } // --------------------------------------------------------------------------- metadata::ExtentPtr DatabaseContext::Private::getExtentFromCache(const std::string &code) { util::BaseObjectPtr obj; getFromCache(cacheExtent_, code, obj); return std::static_pointer_cast(obj); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache(const std::string &code, const metadata::ExtentNNPtr &extent) { insertIntoCache(cacheExtent_, code, extent.as_nullable()); } // --------------------------------------------------------------------------- bool DatabaseContext::Private::getGridInfoFromCache(const std::string &code, GridInfoCache &info) { return cacheGridInfo_.tryGet(code, info); } // --------------------------------------------------------------------------- void DatabaseContext::Private::evictGridInfoFromCache(const std::string &code) { cacheGridInfo_.remove(code); } // --------------------------------------------------------------------------- void DatabaseContext::Private::cache(const std::string &code, const GridInfoCache &info) { cacheGridInfo_.insert(code, info); } // --------------------------------------------------------------------------- void DatabaseContext::Private::open(const std::string &databasePath, PJ_CONTEXT *ctx) { if (!ctx) { ctx = pj_get_default_ctx(); } setPjCtxt(ctx); std::string path(databasePath); if (path.empty()) { #ifndef USE_ONLY_EMBEDDED_RESOURCE_FILES path.resize(2048); const bool found = pj_find_file(pjCtxt(), "proj.db", &path[0], path.size() - 1) != 0; path.resize(strlen(path.c_str())); if (!found) #endif { #ifdef EMBED_RESOURCE_FILES path = EMBEDDED_PROJ_DB; #else throw FactoryException("Cannot find proj.db"); #endif } } sqlite_handle_ = SQLiteHandleCache::get().getHandle(path, ctx); databasePath_ = sqlite_handle_->path(); } // --------------------------------------------------------------------------- void DatabaseContext::Private::setHandle(sqlite3 *sqlite_handle) { assert(sqlite_handle); assert(!sqlite_handle_); sqlite_handle_ = SQLiteHandle::initFromExisting(sqlite_handle, false, 0, 0); } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getDatabaseStructure() { const std::string dbNamePrefix(auxiliaryDatabasePaths_.empty() && memoryDbForInsertPath_.empty() ? "" : "db_0."); const auto sqlBegin("SELECT sql||';' FROM " + dbNamePrefix + "sqlite_master WHERE type = "); const char *tableType = "'table' AND name NOT LIKE 'sqlite_stat%'"; const char *const objectTypes[] = {tableType, "'view'", "'trigger'"}; std::vector res; for (const auto &objectType : objectTypes) { const auto sqlRes = run(sqlBegin + objectType); for (const auto &row : sqlRes) { res.emplace_back(row[0]); } } if (sqlite_handle_->getLayoutVersionMajor() > 0) { res.emplace_back( "INSERT INTO metadata VALUES('DATABASE.LAYOUT.VERSION.MAJOR'," + toString(sqlite_handle_->getLayoutVersionMajor()) + ");"); res.emplace_back( "INSERT INTO metadata VALUES('DATABASE.LAYOUT.VERSION.MINOR'," + toString(sqlite_handle_->getLayoutVersionMinor()) + ");"); } return res; } // --------------------------------------------------------------------------- void DatabaseContext::Private::attachExtraDatabases( const std::vector &auxiliaryDatabasePaths) { auto l_handle = handle(); assert(l_handle); auto tables = run("SELECT name FROM sqlite_master WHERE type IN ('table', 'view') " "AND name NOT LIKE 'sqlite_stat%'"); std::map> tableStructure; for (const auto &rowTable : tables) { const auto &tableName = rowTable[0]; auto tableInfo = run("PRAGMA table_info(\"" + replaceAll(tableName, "\"", "\"\"") + "\")"); for (const auto &rowCol : tableInfo) { const auto &colName = rowCol[1]; tableStructure[tableName].push_back(colName); } } const int nLayoutVersionMajor = l_handle->getLayoutVersionMajor(); const int nLayoutVersionMinor = l_handle->getLayoutVersionMinor(); closeDB(); if (auxiliaryDatabasePaths.empty()) { open(databasePath_, pjCtxt()); return; } sqlite3 *sqlite_handle = nullptr; sqlite3_open_v2( ":memory:", &sqlite_handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_URI, nullptr); if (!sqlite_handle) { throw FactoryException("cannot create in memory database"); } sqlite_handle_ = SQLiteHandle::initFromExisting( sqlite_handle, true, nLayoutVersionMajor, nLayoutVersionMinor); l_handle = sqlite_handle_; run("ATTACH DATABASE ? AS db_0", {databasePath_}); detach_ = true; int count = 1; for (const auto &otherDbPath : auxiliaryDatabasePaths) { const auto attachedDbName("db_" + toString(static_cast(count))); std::string sql = "ATTACH DATABASE ? AS "; sql += attachedDbName; count++; run(sql, {otherDbPath}); l_handle->checkDatabaseLayout(databasePath_, otherDbPath, attachedDbName + '.'); } for (const auto &pair : tableStructure) { std::string sql("CREATE TEMP VIEW "); sql += pair.first; sql += " AS "; for (size_t i = 0; i <= auxiliaryDatabasePaths.size(); ++i) { std::string selectFromAux("SELECT "); bool firstCol = true; for (const auto &colName : pair.second) { if (!firstCol) { selectFromAux += ", "; } firstCol = false; selectFromAux += colName; } selectFromAux += " FROM db_"; selectFromAux += toString(static_cast(i)); selectFromAux += "."; selectFromAux += pair.first; try { // Check that the request will succeed. In case of 'sparse' // databases... run(selectFromAux + " LIMIT 0"); if (i > 0) { sql += " UNION ALL "; } sql += selectFromAux; } catch (const std::exception &) { } } run(sql); } } // --------------------------------------------------------------------------- SQLResultSet DatabaseContext::Private::run(const std::string &sql, const ListOfParams ¶meters, bool useMaxFloatPrecision) { auto l_handle = handle(); assert(l_handle); sqlite3_stmt *stmt = nullptr; auto iter = mapSqlToStatement_.find(sql); if (iter != mapSqlToStatement_.end()) { stmt = iter->second; sqlite3_reset(stmt); } else { if (sqlite3_prepare_v2(l_handle->handle(), sql.c_str(), static_cast(sql.size()), &stmt, nullptr) != SQLITE_OK) { throw FactoryException("SQLite error on " + sql + ": " + sqlite3_errmsg(l_handle->handle())); } mapSqlToStatement_.insert( std::pair(sql, stmt)); } ++queryCounter_; return l_handle->run(stmt, sql, parameters, useMaxFloatPrecision); } // --------------------------------------------------------------------------- static std::string formatStatement(const char *fmt, ...) { std::string res; va_list args; va_start(args, fmt); for (int i = 0; fmt[i] != '\0'; ++i) { if (fmt[i] == '%') { if (fmt[i + 1] == '%') { res += '%'; } else if (fmt[i + 1] == 'q') { const char *arg = va_arg(args, const char *); for (int j = 0; arg[j] != '\0'; ++j) { if (arg[j] == '\'') res += arg[j]; res += arg[j]; } } else if (fmt[i + 1] == 'Q') { const char *arg = va_arg(args, const char *); if (arg == nullptr) res += "NULL"; else { res += '\''; for (int j = 0; arg[j] != '\0'; ++j) { if (arg[j] == '\'') res += arg[j]; res += arg[j]; } res += '\''; } } else if (fmt[i + 1] == 's') { const char *arg = va_arg(args, const char *); res += arg; } else if (fmt[i + 1] == 'f') { const double arg = va_arg(args, double); res += toString(arg); } else if (fmt[i + 1] == 'd') { const int arg = va_arg(args, int); res += toString(arg); } else { va_end(args); throw FactoryException( "Unsupported formatter in formatStatement()"); } ++i; } else { res += fmt[i]; } } va_end(args); return res; } // --------------------------------------------------------------------------- void DatabaseContext::Private::appendSql( std::vector &sqlStatements, const std::string &sql) { sqlStatements.emplace_back(sql); char *errMsg = nullptr; if (sqlite3_exec(memoryDbHandle_->handle(), sql.c_str(), nullptr, nullptr, &errMsg) != SQLITE_OK) { std::string s("Cannot execute " + sql); if (errMsg) { s += " : "; s += errMsg; } sqlite3_free(errMsg); throw FactoryException(s); } sqlite3_free(errMsg); } // --------------------------------------------------------------------------- static void identifyFromNameOrCode( const DatabaseContextNNPtr &dbContext, const std::vector &allowedAuthorities, const std::string &authNameParent, const common::IdentifiedObjectNNPtr &obj, std::function( const AuthorityFactoryNNPtr &authFactory, const std::string &)> instantiateFunc, AuthorityFactory::ObjectType objType, std::string &authName, std::string &code) { auto allowedAuthoritiesTmp(allowedAuthorities); allowedAuthoritiesTmp.emplace_back(authNameParent); for (const auto &id : obj->identifiers()) { try { const auto &idAuthName = *(id->codeSpace()); if (std::find(allowedAuthoritiesTmp.begin(), allowedAuthoritiesTmp.end(), idAuthName) != allowedAuthoritiesTmp.end()) { const auto factory = AuthorityFactory::create(dbContext, idAuthName); if (instantiateFunc(factory, id->code()) ->isEquivalentTo( obj.get(), util::IComparable::Criterion::EQUIVALENT)) { authName = idAuthName; code = id->code(); return; } } } catch (const std::exception &) { } } for (const auto &allowedAuthority : allowedAuthoritiesTmp) { const auto factory = AuthorityFactory::create(dbContext, allowedAuthority); const auto candidates = factory->createObjectsFromName(obj->nameStr(), {objType}, false, 0); for (const auto &candidate : candidates) { const auto &ids = candidate->identifiers(); if (!ids.empty() && candidate->isEquivalentTo( obj.get(), util::IComparable::Criterion::EQUIVALENT)) { const auto &id = ids.front(); authName = *(id->codeSpace()); code = id->code(); return; } } } } // --------------------------------------------------------------------------- static void identifyFromNameOrCode(const DatabaseContextNNPtr &dbContext, const std::vector &allowedAuthorities, const std::string &authNameParent, const datum::DatumEnsembleNNPtr &obj, std::string &authName, std::string &code) { const char *type = "geodetic_datum"; if (!obj->datums().empty() && dynamic_cast( obj->datums().front().get())) { type = "vertical_datum"; } const auto instantiateFunc = [&type](const AuthorityFactoryNNPtr &authFactory, const std::string &lCode) { return util::nn_static_pointer_cast( authFactory->createDatumEnsemble(lCode, type)); }; identifyFromNameOrCode( dbContext, allowedAuthorities, authNameParent, obj, instantiateFunc, AuthorityFactory::ObjectType::DATUM_ENSEMBLE, authName, code); } // --------------------------------------------------------------------------- static void identifyFromNameOrCode(const DatabaseContextNNPtr &dbContext, const std::vector &allowedAuthorities, const std::string &authNameParent, const datum::GeodeticReferenceFrameNNPtr &obj, std::string &authName, std::string &code) { const auto instantiateFunc = [](const AuthorityFactoryNNPtr &authFactory, const std::string &lCode) { return util::nn_static_pointer_cast( authFactory->createGeodeticDatum(lCode)); }; identifyFromNameOrCode( dbContext, allowedAuthorities, authNameParent, obj, instantiateFunc, AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME, authName, code); } // --------------------------------------------------------------------------- static void identifyFromNameOrCode(const DatabaseContextNNPtr &dbContext, const std::vector &allowedAuthorities, const std::string &authNameParent, const datum::EllipsoidNNPtr &obj, std::string &authName, std::string &code) { const auto instantiateFunc = [](const AuthorityFactoryNNPtr &authFactory, const std::string &lCode) { return util::nn_static_pointer_cast( authFactory->createEllipsoid(lCode)); }; identifyFromNameOrCode( dbContext, allowedAuthorities, authNameParent, obj, instantiateFunc, AuthorityFactory::ObjectType::ELLIPSOID, authName, code); } // --------------------------------------------------------------------------- static void identifyFromNameOrCode(const DatabaseContextNNPtr &dbContext, const std::vector &allowedAuthorities, const std::string &authNameParent, const datum::PrimeMeridianNNPtr &obj, std::string &authName, std::string &code) { const auto instantiateFunc = [](const AuthorityFactoryNNPtr &authFactory, const std::string &lCode) { return util::nn_static_pointer_cast( authFactory->createPrimeMeridian(lCode)); }; identifyFromNameOrCode( dbContext, allowedAuthorities, authNameParent, obj, instantiateFunc, AuthorityFactory::ObjectType::PRIME_MERIDIAN, authName, code); } // --------------------------------------------------------------------------- static void identifyFromNameOrCode(const DatabaseContextNNPtr &dbContext, const std::vector &allowedAuthorities, const std::string &authNameParent, const datum::VerticalReferenceFrameNNPtr &obj, std::string &authName, std::string &code) { const auto instantiateFunc = [](const AuthorityFactoryNNPtr &authFactory, const std::string &lCode) { return util::nn_static_pointer_cast( authFactory->createVerticalDatum(lCode)); }; identifyFromNameOrCode( dbContext, allowedAuthorities, authNameParent, obj, instantiateFunc, AuthorityFactory::ObjectType::VERTICAL_REFERENCE_FRAME, authName, code); } // --------------------------------------------------------------------------- static void identifyFromNameOrCode(const DatabaseContextNNPtr &dbContext, const std::vector &allowedAuthorities, const std::string &authNameParent, const datum::DatumNNPtr &obj, std::string &authName, std::string &code) { if (const auto geodeticDatum = util::nn_dynamic_pointer_cast(obj)) { identifyFromNameOrCode(dbContext, allowedAuthorities, authNameParent, NN_NO_CHECK(geodeticDatum), authName, code); } else if (const auto verticalDatum = util::nn_dynamic_pointer_cast( obj)) { identifyFromNameOrCode(dbContext, allowedAuthorities, authNameParent, NN_NO_CHECK(verticalDatum), authName, code); } else { throw FactoryException("Unhandled type of datum"); } } // --------------------------------------------------------------------------- static const char *getCSDatabaseType(const cs::CoordinateSystemNNPtr &obj) { if (dynamic_cast(obj.get())) { return CS_TYPE_ELLIPSOIDAL; } else if (dynamic_cast(obj.get())) { return CS_TYPE_CARTESIAN; } else if (dynamic_cast(obj.get())) { return CS_TYPE_VERTICAL; } return nullptr; } // --------------------------------------------------------------------------- std::string DatabaseContext::Private::findFreeCode(const std::string &tableName, const std::string &authName, const std::string &codePrototype) { std::string code(codePrototype); if (run("SELECT 1 FROM " + tableName + " WHERE auth_name = ? AND code = ?", {authName, code}) .empty()) { return code; } for (int counter = 2; counter < 10; counter++) { code = codePrototype + '_' + toString(counter); if (run("SELECT 1 FROM " + tableName + " WHERE auth_name = ? AND code = ?", {authName, code}) .empty()) { return code; } } // shouldn't happen hopefully... throw FactoryException("Cannot insert " + tableName + ": too many similar codes"); } // --------------------------------------------------------------------------- static const char *getUnitDatabaseType(const common::UnitOfMeasure &unit) { switch (unit.type()) { case common::UnitOfMeasure::Type::LINEAR: return "length"; case common::UnitOfMeasure::Type::ANGULAR: return "angle"; case common::UnitOfMeasure::Type::SCALE: return "scale"; case common::UnitOfMeasure::Type::TIME: return "time"; default: break; } return nullptr; } // --------------------------------------------------------------------------- void DatabaseContext::Private::identify(const DatabaseContextNNPtr &dbContext, const common::UnitOfMeasure &obj, std::string &authName, std::string &code) { // Identify quickly a few well-known units const double convFactor = obj.conversionToSI(); switch (obj.type()) { case common::UnitOfMeasure::Type::LINEAR: { if (convFactor == 1.0) { authName = metadata::Identifier::EPSG; code = "9001"; return; } break; } case common::UnitOfMeasure::Type::ANGULAR: { constexpr double CONV_FACTOR_DEGREE = 1.74532925199432781271e-02; if (std::abs(convFactor - CONV_FACTOR_DEGREE) <= 1e-10 * CONV_FACTOR_DEGREE) { authName = metadata::Identifier::EPSG; code = "9102"; return; } break; } case common::UnitOfMeasure::Type::SCALE: { if (convFactor == 1.0) { authName = metadata::Identifier::EPSG; code = "9201"; return; } break; } default: break; } std::string sql("SELECT auth_name, code FROM unit_of_measure " "WHERE abs(conv_factor - ?) <= 1e-10 * conv_factor"); ListOfParams params{convFactor}; const char *type = getUnitDatabaseType(obj); if (type) { sql += " AND type = ?"; params.emplace_back(std::string(type)); } sql += " ORDER BY auth_name, code"; const auto res = run(sql, params); for (const auto &row : res) { const auto &rowAuthName = row[0]; const auto &rowCode = row[1]; const auto tmpAuthFactory = AuthorityFactory::create(dbContext, rowAuthName); try { tmpAuthFactory->createUnitOfMeasure(rowCode); authName = rowAuthName; code = rowCode; return; } catch (const std::exception &) { } } } // --------------------------------------------------------------------------- void DatabaseContext::Private::identifyOrInsert( const DatabaseContextNNPtr &dbContext, const common::UnitOfMeasure &unit, const std::string &ownerAuthName, std::string &authName, std::string &code, std::vector &sqlStatements) { authName = unit.codeSpace(); code = unit.code(); if (authName.empty()) { identify(dbContext, unit, authName, code); } if (!authName.empty()) { return; } const char *type = getUnitDatabaseType(unit); if (type == nullptr) { throw FactoryException("Cannot insert this type of UnitOfMeasure"); } // Insert new record authName = ownerAuthName; const std::string codePrototype(replaceAll(toupper(unit.name()), " ", "_")); code = findFreeCode("unit_of_measure", authName, codePrototype); const auto sql = formatStatement( "INSERT INTO unit_of_measure VALUES('%q','%q','%q','%q',%f,NULL,0);", authName.c_str(), code.c_str(), unit.name().c_str(), type, unit.conversionToSI()); appendSql(sqlStatements, sql); } // --------------------------------------------------------------------------- void DatabaseContext::Private::identify(const DatabaseContextNNPtr &dbContext, const cs::CoordinateSystemNNPtr &obj, std::string &authName, std::string &code) { const auto &axisList = obj->axisList(); if (axisList.size() == 1U && axisList[0]->unit()._isEquivalentTo(UnitOfMeasure::METRE) && &(axisList[0]->direction()) == &cs::AxisDirection::UP && (axisList[0]->nameStr() == "Up" || axisList[0]->nameStr() == "Gravity-related height")) { // preferred coordinate system for gravity-related height authName = metadata::Identifier::EPSG; code = "6499"; return; } std::string sql( "SELECT auth_name, code FROM coordinate_system WHERE dimension = ?"); ListOfParams params{static_cast(axisList.size())}; const char *type = getCSDatabaseType(obj); if (type) { sql += " AND type = ?"; params.emplace_back(std::string(type)); } sql += " ORDER BY auth_name, code"; const auto res = run(sql, params); for (const auto &row : res) { const auto &rowAuthName = row[0]; const auto &rowCode = row[1]; const auto tmpAuthFactory = AuthorityFactory::create(dbContext, rowAuthName); try { const auto cs = tmpAuthFactory->createCoordinateSystem(rowCode); if (cs->_isEquivalentTo(obj.get(), util::IComparable::Criterion::EQUIVALENT)) { authName = rowAuthName; code = rowCode; if (authName == metadata::Identifier::EPSG && code == "4400") { // preferred coordinate system for cartesian // Easting, Northing return; } if (authName == metadata::Identifier::EPSG && code == "6422") { // preferred coordinate system for geographic lat, long return; } if (authName == metadata::Identifier::EPSG && code == "6423") { // preferred coordinate system for geographic lat, long, h return; } } } catch (const std::exception &) { } } } // --------------------------------------------------------------------------- void DatabaseContext::Private::identifyOrInsert( const DatabaseContextNNPtr &dbContext, const cs::CoordinateSystemNNPtr &obj, const std::string &ownerType, const std::string &ownerAuthName, const std::string &ownerCode, std::string &authName, std::string &code, std::vector &sqlStatements) { identify(dbContext, obj, authName, code); if (!authName.empty()) { return; } const char *type = getCSDatabaseType(obj); if (type == nullptr) { throw FactoryException("Cannot insert this type of CoordinateSystem"); } // Insert new record in coordinate_system authName = ownerAuthName; const std::string codePrototype("CS_" + ownerType + '_' + ownerCode); code = findFreeCode("coordinate_system", authName, codePrototype); const auto &axisList = obj->axisList(); { const auto sql = formatStatement( "INSERT INTO coordinate_system VALUES('%q','%q','%q',%d);", authName.c_str(), code.c_str(), type, static_cast(axisList.size())); appendSql(sqlStatements, sql); } // Insert new records for the axis for (int i = 0; i < static_cast(axisList.size()); ++i) { const auto &axis = axisList[i]; std::string uomAuthName; std::string uomCode; identifyOrInsert(dbContext, axis->unit(), ownerAuthName, uomAuthName, uomCode, sqlStatements); const auto sql = formatStatement( "INSERT INTO axis VALUES(" "'%q','%q','%q','%q','%q','%q','%q',%d,'%q','%q');", authName.c_str(), (code + "_AXIS_" + toString(i + 1)).c_str(), axis->nameStr().c_str(), axis->abbreviation().c_str(), axis->direction().toString().c_str(), authName.c_str(), code.c_str(), i + 1, uomAuthName.c_str(), uomCode.c_str()); appendSql(sqlStatements, sql); } } // --------------------------------------------------------------------------- static void addAllowedAuthoritiesCond(const std::vector &allowedAuthorities, const std::string &authName, std::string &sql, ListOfParams ¶ms) { sql += "auth_name IN (?"; params.emplace_back(authName); for (const auto &allowedAuthority : allowedAuthorities) { sql += ",?"; params.emplace_back(allowedAuthority); } sql += ')'; } // --------------------------------------------------------------------------- void DatabaseContext::Private::identifyOrInsertUsages( const common::ObjectUsageNNPtr &obj, const std::string &tableName, const std::string &authName, const std::string &code, const std::vector &allowedAuthorities, std::vector &sqlStatements) { std::string usageCode("USAGE_"); const std::string upperTableName(toupper(tableName)); if (!starts_with(code, upperTableName)) { usageCode += upperTableName; usageCode += '_'; } usageCode += code; const auto &domains = obj->domains(); if (domains.empty()) { const auto sql = formatStatement("INSERT INTO usage VALUES('%q','%q','%q','%q','%q'," "'PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');", authName.c_str(), usageCode.c_str(), tableName.c_str(), authName.c_str(), code.c_str()); appendSql(sqlStatements, sql); return; } int usageCounter = 1; for (const auto &domain : domains) { std::string scopeAuthName; std::string scopeCode; const auto &scope = domain->scope(); if (scope.has_value()) { std::string sql = "SELECT auth_name, code, " "(CASE WHEN auth_name = 'EPSG' THEN 0 ELSE 1 END) " "AS order_idx " "FROM scope WHERE scope = ? AND deprecated = 0 AND "; ListOfParams params{*scope}; addAllowedAuthoritiesCond(allowedAuthorities, authName, sql, params); sql += " ORDER BY order_idx, auth_name, code"; const auto rows = run(sql, params); if (!rows.empty()) { const auto &row = rows.front(); scopeAuthName = row[0]; scopeCode = row[1]; } else { scopeAuthName = authName; scopeCode = "SCOPE_"; scopeCode += tableName; scopeCode += '_'; scopeCode += code; const auto sqlToInsert = formatStatement( "INSERT INTO scope VALUES('%q','%q','%q',0);", scopeAuthName.c_str(), scopeCode.c_str(), scope->c_str()); appendSql(sqlStatements, sqlToInsert); } } else { scopeAuthName = "PROJ"; scopeCode = "SCOPE_UNKNOWN"; } std::string extentAuthName("PROJ"); std::string extentCode("EXTENT_UNKNOWN"); const auto &extent = domain->domainOfValidity(); if (extent) { const auto &geogElts = extent->geographicElements(); if (!geogElts.empty()) { const auto bbox = dynamic_cast( geogElts.front().get()); if (bbox) { std::string sql = "SELECT auth_name, code, " "(CASE WHEN auth_name = 'EPSG' THEN 0 ELSE 1 END) " "AS order_idx " "FROM extent WHERE south_lat = ? AND north_lat = ? " "AND west_lon = ? AND east_lon = ? AND deprecated = 0 " "AND "; ListOfParams params{ bbox->southBoundLatitude(), bbox->northBoundLatitude(), bbox->westBoundLongitude(), bbox->eastBoundLongitude()}; addAllowedAuthoritiesCond(allowedAuthorities, authName, sql, params); sql += " ORDER BY order_idx, auth_name, code"; const auto rows = run(sql, params); if (!rows.empty()) { const auto &row = rows.front(); extentAuthName = row[0]; extentCode = row[1]; } else { extentAuthName = authName; extentCode = "EXTENT_"; extentCode += tableName; extentCode += '_'; extentCode += code; std::string description(*(extent->description())); if (description.empty()) { description = "unknown"; } const auto sqlToInsert = formatStatement( "INSERT INTO extent " "VALUES('%q','%q','%q','%q',%f,%f,%f,%f,0);", extentAuthName.c_str(), extentCode.c_str(), description.c_str(), description.c_str(), bbox->southBoundLatitude(), bbox->northBoundLatitude(), bbox->westBoundLongitude(), bbox->eastBoundLongitude()); appendSql(sqlStatements, sqlToInsert); } } } } if (domains.size() > 1) { usageCode += '_'; usageCode += toString(usageCounter); } const auto sql = formatStatement( "INSERT INTO usage VALUES('%q','%q','%q','%q','%q'," "'%q','%q','%q','%q');", authName.c_str(), usageCode.c_str(), tableName.c_str(), authName.c_str(), code.c_str(), extentAuthName.c_str(), extentCode.c_str(), scopeAuthName.c_str(), scopeCode.c_str()); appendSql(sqlStatements, sql); usageCounter++; } } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const datum::PrimeMeridianNNPtr &pm, const std::string &authName, const std::string &code, bool /*numericCode*/, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); // Check if the object is already known under that code std::string pmAuthName; std::string pmCode; identifyFromNameOrCode(self, allowedAuthorities, authName, pm, pmAuthName, pmCode); if (pmAuthName == authName && pmCode == code) { return {}; } std::vector sqlStatements; // Insert new record in prime_meridian table std::string uomAuthName; std::string uomCode; identifyOrInsert(self, pm->longitude().unit(), authName, uomAuthName, uomCode, sqlStatements); const auto sql = formatStatement( "INSERT INTO prime_meridian VALUES(" "'%q','%q','%q',%f,'%q','%q',0);", authName.c_str(), code.c_str(), pm->nameStr().c_str(), pm->longitude().value(), uomAuthName.c_str(), uomCode.c_str()); appendSql(sqlStatements, sql); return sqlStatements; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const datum::EllipsoidNNPtr &ellipsoid, const std::string &authName, const std::string &code, bool /*numericCode*/, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); // Check if the object is already known under that code std::string ellipsoidAuthName; std::string ellipsoidCode; identifyFromNameOrCode(self, allowedAuthorities, authName, ellipsoid, ellipsoidAuthName, ellipsoidCode); if (ellipsoidAuthName == authName && ellipsoidCode == code) { return {}; } std::vector sqlStatements; // Find or insert celestial body const auto &semiMajorAxis = ellipsoid->semiMajorAxis(); const double semiMajorAxisMetre = semiMajorAxis.getSIValue(); constexpr double tolerance = 0.005; std::string bodyAuthName; std::string bodyCode; auto res = run("SELECT auth_name, code, " "(ABS(semi_major_axis - ?) / semi_major_axis ) " "AS rel_error FROM celestial_body WHERE rel_error <= ?", {semiMajorAxisMetre, tolerance}); if (!res.empty()) { const auto &row = res.front(); bodyAuthName = row[0]; bodyCode = row[1]; } else { bodyAuthName = authName; bodyCode = "BODY_" + code; const auto bodyName = "Body of " + ellipsoid->nameStr(); const auto sql = formatStatement( "INSERT INTO celestial_body VALUES('%q','%q','%q',%f);", bodyAuthName.c_str(), bodyCode.c_str(), bodyName.c_str(), semiMajorAxisMetre); appendSql(sqlStatements, sql); } // Insert new record in ellipsoid table std::string uomAuthName; std::string uomCode; identifyOrInsert(self, semiMajorAxis.unit(), authName, uomAuthName, uomCode, sqlStatements); std::string invFlattening("NULL"); std::string semiMinorAxis("NULL"); if (ellipsoid->isSphere() || ellipsoid->semiMinorAxis().has_value()) { semiMinorAxis = toString(ellipsoid->computeSemiMinorAxis().value()); } else { invFlattening = toString(ellipsoid->computedInverseFlattening()); } const auto sql = formatStatement( "INSERT INTO ellipsoid VALUES(" "'%q','%q','%q','%q','%q','%q',%f,'%q','%q',%s,%s,0);", authName.c_str(), code.c_str(), ellipsoid->nameStr().c_str(), "", // description bodyAuthName.c_str(), bodyCode.c_str(), semiMajorAxis.value(), uomAuthName.c_str(), uomCode.c_str(), invFlattening.c_str(), semiMinorAxis.c_str()); appendSql(sqlStatements, sql); return sqlStatements; } // --------------------------------------------------------------------------- static std::string anchorEpochToStr(double val) { constexpr int BUF_SIZE = 16; char szBuffer[BUF_SIZE]; sqlite3_snprintf(BUF_SIZE, szBuffer, "%.3f", val); return szBuffer; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const datum::GeodeticReferenceFrameNNPtr &datum, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); // Check if the object is already known under that code std::string datumAuthName; std::string datumCode; identifyFromNameOrCode(self, allowedAuthorities, authName, datum, datumAuthName, datumCode); if (datumAuthName == authName && datumCode == code) { return {}; } std::vector sqlStatements; // Find or insert ellipsoid std::string ellipsoidAuthName; std::string ellipsoidCode; const auto &ellipsoidOfDatum = datum->ellipsoid(); identifyFromNameOrCode(self, allowedAuthorities, authName, ellipsoidOfDatum, ellipsoidAuthName, ellipsoidCode); if (ellipsoidAuthName.empty()) { ellipsoidAuthName = authName; if (numericCode) { ellipsoidCode = self->suggestsCodeFor(ellipsoidOfDatum, ellipsoidAuthName, true); } else { ellipsoidCode = "ELLPS_" + code; } sqlStatements = self->getInsertStatementsFor( ellipsoidOfDatum, ellipsoidAuthName, ellipsoidCode, numericCode, allowedAuthorities); } // Find or insert prime meridian std::string pmAuthName; std::string pmCode; const auto &pmOfDatum = datum->primeMeridian(); identifyFromNameOrCode(self, allowedAuthorities, authName, pmOfDatum, pmAuthName, pmCode); if (pmAuthName.empty()) { pmAuthName = authName; if (numericCode) { pmCode = self->suggestsCodeFor(pmOfDatum, pmAuthName, true); } else { pmCode = "PM_" + code; } const auto sqlStatementsTmp = self->getInsertStatementsFor( pmOfDatum, pmAuthName, pmCode, numericCode, allowedAuthorities); sqlStatements.insert(sqlStatements.end(), sqlStatementsTmp.begin(), sqlStatementsTmp.end()); } // Insert new record in geodetic_datum table std::string publicationDate("NULL"); if (datum->publicationDate().has_value()) { publicationDate = '\''; publicationDate += replaceAll(datum->publicationDate()->toString(), "'", "''"); publicationDate += '\''; } std::string frameReferenceEpoch("NULL"); const auto dynamicDatum = dynamic_cast(datum.get()); if (dynamicDatum) { frameReferenceEpoch = toString(dynamicDatum->frameReferenceEpoch().value()); } const std::string anchor(*(datum->anchorDefinition())); const util::optional &anchorEpoch = datum->anchorEpoch(); const auto sql = formatStatement( "INSERT INTO geodetic_datum VALUES(" "'%q','%q','%q','%q','%q','%q','%q','%q',%s,%s,NULL,%Q,%s,0);", authName.c_str(), code.c_str(), datum->nameStr().c_str(), "", // description ellipsoidAuthName.c_str(), ellipsoidCode.c_str(), pmAuthName.c_str(), pmCode.c_str(), publicationDate.c_str(), frameReferenceEpoch.c_str(), anchor.empty() ? nullptr : anchor.c_str(), anchorEpoch.has_value() ? anchorEpochToStr( anchorEpoch->convertToUnit(common::UnitOfMeasure::YEAR)) .c_str() : "NULL"); appendSql(sqlStatements, sql); identifyOrInsertUsages(datum, "geodetic_datum", authName, code, allowedAuthorities, sqlStatements); return sqlStatements; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const datum::DatumEnsembleNNPtr &ensemble, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); // Check if the object is already known under that code std::string datumAuthName; std::string datumCode; identifyFromNameOrCode(self, allowedAuthorities, authName, ensemble, datumAuthName, datumCode); if (datumAuthName == authName && datumCode == code) { return {}; } std::vector sqlStatements; const auto &members = ensemble->datums(); assert(!members.empty()); int counter = 1; std::vector> membersId; for (const auto &member : members) { std::string memberAuthName; std::string memberCode; identifyFromNameOrCode(self, allowedAuthorities, authName, member, memberAuthName, memberCode); if (memberAuthName.empty()) { memberAuthName = authName; if (numericCode) { memberCode = self->suggestsCodeFor(member, memberAuthName, true); } else { memberCode = "MEMBER_" + toString(counter) + "_OF_" + code; } const auto sqlStatementsTmp = self->getInsertStatementsFor(member, memberAuthName, memberCode, numericCode, allowedAuthorities); sqlStatements.insert(sqlStatements.end(), sqlStatementsTmp.begin(), sqlStatementsTmp.end()); } membersId.emplace_back( std::pair(memberAuthName, memberCode)); ++counter; } const bool isGeodetic = util::nn_dynamic_pointer_cast( members.front()) != nullptr; // Insert new record in geodetic_datum/vertical_datum table const double accuracy = c_locale_stod(ensemble->positionalAccuracy()->value()); if (isGeodetic) { const auto firstDatum = AuthorityFactory::create(self, membersId.front().first) ->createGeodeticDatum(membersId.front().second); const auto &ellipsoid = firstDatum->ellipsoid(); const auto &ellipsoidIds = ellipsoid->identifiers(); assert(!ellipsoidIds.empty()); const std::string &ellipsoidAuthName = *(ellipsoidIds.front()->codeSpace()); const std::string &ellipsoidCode = ellipsoidIds.front()->code(); const auto &pm = firstDatum->primeMeridian(); const auto &pmIds = pm->identifiers(); assert(!pmIds.empty()); const std::string &pmAuthName = *(pmIds.front()->codeSpace()); const std::string &pmCode = pmIds.front()->code(); const std::string anchor(*(firstDatum->anchorDefinition())); const util::optional &anchorEpoch = firstDatum->anchorEpoch(); const auto sql = formatStatement( "INSERT INTO geodetic_datum VALUES(" "'%q','%q','%q','%q','%q','%q','%q','%q',NULL,NULL,%f,%Q,%s,0);", authName.c_str(), code.c_str(), ensemble->nameStr().c_str(), "", // description ellipsoidAuthName.c_str(), ellipsoidCode.c_str(), pmAuthName.c_str(), pmCode.c_str(), accuracy, anchor.empty() ? nullptr : anchor.c_str(), anchorEpoch.has_value() ? anchorEpochToStr( anchorEpoch->convertToUnit(common::UnitOfMeasure::YEAR)) .c_str() : "NULL"); appendSql(sqlStatements, sql); } else { const auto firstDatum = AuthorityFactory::create(self, membersId.front().first) ->createVerticalDatum(membersId.front().second); const std::string anchor(*(firstDatum->anchorDefinition())); const util::optional &anchorEpoch = firstDatum->anchorEpoch(); const auto sql = formatStatement( "INSERT INTO vertical_datum VALUES(" "'%q','%q','%q','%q',NULL,NULL,%f,%Q,%s,0);", authName.c_str(), code.c_str(), ensemble->nameStr().c_str(), "", // description accuracy, anchor.empty() ? nullptr : anchor.c_str(), anchorEpoch.has_value() ? anchorEpochToStr( anchorEpoch->convertToUnit(common::UnitOfMeasure::YEAR)) .c_str() : "NULL"); appendSql(sqlStatements, sql); } identifyOrInsertUsages(ensemble, isGeodetic ? "geodetic_datum" : "vertical_datum", authName, code, allowedAuthorities, sqlStatements); const char *tableName = isGeodetic ? "geodetic_datum_ensemble_member" : "vertical_datum_ensemble_member"; counter = 1; for (const auto &authCodePair : membersId) { const auto sql = formatStatement( "INSERT INTO %s VALUES(" "'%q','%q','%q','%q',%d);", tableName, authName.c_str(), code.c_str(), authCodePair.first.c_str(), authCodePair.second.c_str(), counter); appendSql(sqlStatements, sql); ++counter; } return sqlStatements; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const crs::GeodeticCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); std::vector sqlStatements; // Find or insert datum/datum ensemble std::string datumAuthName; std::string datumCode; const auto &ensemble = crs->datumEnsemble(); if (ensemble) { const auto ensembleNN = NN_NO_CHECK(ensemble); identifyFromNameOrCode(self, allowedAuthorities, authName, ensembleNN, datumAuthName, datumCode); if (datumAuthName.empty()) { datumAuthName = authName; if (numericCode) { datumCode = self->suggestsCodeFor(ensembleNN, datumAuthName, true); } else { datumCode = "GEODETIC_DATUM_" + code; } sqlStatements = self->getInsertStatementsFor( ensembleNN, datumAuthName, datumCode, numericCode, allowedAuthorities); } } else { const auto &datum = crs->datum(); assert(datum); const auto datumNN = NN_NO_CHECK(datum); identifyFromNameOrCode(self, allowedAuthorities, authName, datumNN, datumAuthName, datumCode); if (datumAuthName.empty()) { datumAuthName = authName; if (numericCode) { datumCode = self->suggestsCodeFor(datumNN, datumAuthName, true); } else { datumCode = "GEODETIC_DATUM_" + code; } sqlStatements = self->getInsertStatementsFor(datumNN, datumAuthName, datumCode, numericCode, allowedAuthorities); } } // Find or insert coordinate system const auto &coordinateSystem = crs->coordinateSystem(); std::string csAuthName; std::string csCode; identifyOrInsert(self, coordinateSystem, "GEODETIC_CRS", authName, code, csAuthName, csCode, sqlStatements); const char *type = GEOG_2D; if (coordinateSystem->axisList().size() == 3) { if (dynamic_cast(crs.get())) { type = GEOG_3D; } else { type = GEOCENTRIC; } } // Insert new record in geodetic_crs table const auto sql = formatStatement("INSERT INTO geodetic_crs VALUES(" "'%q','%q','%q','%q','%q','%q','%q','%q','%q',NULL,0);", authName.c_str(), code.c_str(), crs->nameStr().c_str(), "", // description type, csAuthName.c_str(), csCode.c_str(), datumAuthName.c_str(), datumCode.c_str()); appendSql(sqlStatements, sql); identifyOrInsertUsages(crs, "geodetic_crs", authName, code, allowedAuthorities, sqlStatements); return sqlStatements; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const crs::ProjectedCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); std::vector sqlStatements; // Find or insert base geodetic CRS const auto &baseCRS = crs->baseCRS(); std::string geodAuthName; std::string geodCode; auto allowedAuthoritiesTmp(allowedAuthorities); allowedAuthoritiesTmp.emplace_back(authName); for (const auto &allowedAuthority : allowedAuthoritiesTmp) { const auto factory = AuthorityFactory::create(self, allowedAuthority); const auto candidates = baseCRS->identify(factory); for (const auto &candidate : candidates) { if (candidate.second == 100) { const auto &ids = candidate.first->identifiers(); if (!ids.empty()) { const auto &id = ids.front(); geodAuthName = *(id->codeSpace()); geodCode = id->code(); break; } } if (!geodAuthName.empty()) { break; } } } if (geodAuthName.empty()) { geodAuthName = authName; geodCode = "GEODETIC_CRS_" + code; sqlStatements = self->getInsertStatementsFor( baseCRS, geodAuthName, geodCode, numericCode, allowedAuthorities); } // Insert new record in conversion table const auto &conversion = crs->derivingConversionRef(); std::string convAuthName(authName); std::string convCode("CONVERSION_" + code); if (numericCode) { convCode = self->suggestsCodeFor(conversion, convAuthName, true); } { const auto &method = conversion->method(); const auto &methodIds = method->identifiers(); std::string methodAuthName; std::string methodCode; const operation::MethodMapping *methodMapping = nullptr; if (methodIds.empty()) { const int epsgCode = method->getEPSGCode(); if (epsgCode > 0) { methodAuthName = metadata::Identifier::EPSG; methodCode = toString(epsgCode); } else { const auto &methodName = method->nameStr(); size_t nProjectionMethodMappings = 0; const auto projectionMethodMappings = operation::getProjectionMethodMappings( nProjectionMethodMappings); for (size_t i = 0; i < nProjectionMethodMappings; ++i) { const auto &mapping = projectionMethodMappings[i]; if (metadata::Identifier::isEquivalentName( mapping.wkt2_name, methodName.c_str())) { methodMapping = &mapping; } } if (methodMapping == nullptr || methodMapping->proj_name_main == nullptr) { throw FactoryException("Cannot insert projection with " "method without identifier"); } methodAuthName = "PROJ"; methodCode = methodMapping->proj_name_main; if (methodMapping->proj_name_aux) { methodCode += ' '; methodCode += methodMapping->proj_name_aux; } } } else { const auto &methodId = methodIds.front(); methodAuthName = *(methodId->codeSpace()); methodCode = methodId->code(); } auto sql = formatStatement("INSERT INTO conversion VALUES(" "'%q','%q','%q','','%q','%q','%q'", convAuthName.c_str(), convCode.c_str(), conversion->nameStr().c_str(), methodAuthName.c_str(), methodCode.c_str(), method->nameStr().c_str()); const auto &srcValues = conversion->parameterValues(); if (srcValues.size() > N_MAX_PARAMS) { throw FactoryException("Cannot insert projection with more than " + toString(static_cast(N_MAX_PARAMS)) + " parameters"); } std::vector values; if (methodMapping == nullptr) { if (methodAuthName == metadata::Identifier::EPSG) { methodMapping = operation::getMapping(atoi(methodCode.c_str())); } else { methodMapping = operation::getMapping(method->nameStr().c_str()); } } if (methodMapping != nullptr) { // Re-order projection parameters in their reference order for (size_t j = 0; methodMapping->params[j] != nullptr; ++j) { for (size_t i = 0; i < srcValues.size(); ++i) { auto opParamValue = dynamic_cast< const operation::OperationParameterValue *>( srcValues[i].get()); if (!opParamValue) { throw FactoryException("Cannot insert projection with " "non-OperationParameterValue"); } if (methodMapping->params[j]->wkt2_name && opParamValue->parameter()->nameStr() == methodMapping->params[j]->wkt2_name) { values.emplace_back(srcValues[i]); } } } } if (values.size() != srcValues.size()) { values = srcValues; } for (const auto &genOpParamvalue : values) { auto opParamValue = dynamic_cast( genOpParamvalue.get()); if (!opParamValue) { throw FactoryException("Cannot insert projection with " "non-OperationParameterValue"); } const auto ¶m = opParamValue->parameter(); const auto ¶mIds = param->identifiers(); std::string paramAuthName; std::string paramCode; if (paramIds.empty()) { const int paramEPSGCode = param->getEPSGCode(); if (paramEPSGCode == 0) { throw FactoryException( "Cannot insert projection with method parameter " "without identifier"); } paramAuthName = metadata::Identifier::EPSG; paramCode = toString(paramEPSGCode); } else { const auto ¶mId = paramIds.front(); paramAuthName = *(paramId->codeSpace()); paramCode = paramId->code(); } const auto &value = opParamValue->parameterValue()->value(); const auto &unit = value.unit(); std::string uomAuthName; std::string uomCode; identifyOrInsert(self, unit, authName, uomAuthName, uomCode, sqlStatements); sql += formatStatement(",'%q','%q','%q',%f,'%q','%q'", paramAuthName.c_str(), paramCode.c_str(), param->nameStr().c_str(), value.value(), uomAuthName.c_str(), uomCode.c_str()); } for (size_t i = values.size(); i < N_MAX_PARAMS; ++i) { sql += ",NULL,NULL,NULL,NULL,NULL,NULL"; } sql += ",0);"; appendSql(sqlStatements, sql); identifyOrInsertUsages(crs, "conversion", convAuthName, convCode, allowedAuthorities, sqlStatements); } // Find or insert coordinate system const auto &coordinateSystem = crs->coordinateSystem(); std::string csAuthName; std::string csCode; identifyOrInsert(self, coordinateSystem, "PROJECTED_CRS", authName, code, csAuthName, csCode, sqlStatements); // Insert new record in projected_crs table const auto sql = formatStatement( "INSERT INTO projected_crs VALUES(" "'%q','%q','%q','%q','%q','%q','%q','%q','%q','%q',NULL,0);", authName.c_str(), code.c_str(), crs->nameStr().c_str(), "", // description csAuthName.c_str(), csCode.c_str(), geodAuthName.c_str(), geodCode.c_str(), convAuthName.c_str(), convCode.c_str()); appendSql(sqlStatements, sql); identifyOrInsertUsages(crs, "projected_crs", authName, code, allowedAuthorities, sqlStatements); return sqlStatements; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const datum::VerticalReferenceFrameNNPtr &datum, const std::string &authName, const std::string &code, bool /* numericCode */, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); std::vector sqlStatements; // Check if the object is already known under that code std::string datumAuthName; std::string datumCode; identifyFromNameOrCode(self, allowedAuthorities, authName, datum, datumAuthName, datumCode); if (datumAuthName == authName && datumCode == code) { return {}; } // Insert new record in vertical_datum table std::string publicationDate("NULL"); if (datum->publicationDate().has_value()) { publicationDate = '\''; publicationDate += replaceAll(datum->publicationDate()->toString(), "'", "''"); publicationDate += '\''; } std::string frameReferenceEpoch("NULL"); const auto dynamicDatum = dynamic_cast(datum.get()); if (dynamicDatum) { frameReferenceEpoch = toString(dynamicDatum->frameReferenceEpoch().value()); } const std::string anchor(*(datum->anchorDefinition())); const util::optional &anchorEpoch = datum->anchorEpoch(); const auto sql = formatStatement( "INSERT INTO vertical_datum VALUES(" "'%q','%q','%q','%q',%s,%s,NULL,%Q,%s,0);", authName.c_str(), code.c_str(), datum->nameStr().c_str(), "", // description publicationDate.c_str(), frameReferenceEpoch.c_str(), anchor.empty() ? nullptr : anchor.c_str(), anchorEpoch.has_value() ? anchorEpochToStr( anchorEpoch->convertToUnit(common::UnitOfMeasure::YEAR)) .c_str() : "NULL"); appendSql(sqlStatements, sql); identifyOrInsertUsages(datum, "vertical_datum", authName, code, allowedAuthorities, sqlStatements); return sqlStatements; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const crs::VerticalCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); std::vector sqlStatements; // Find or insert datum/datum ensemble std::string datumAuthName; std::string datumCode; const auto &ensemble = crs->datumEnsemble(); if (ensemble) { const auto ensembleNN = NN_NO_CHECK(ensemble); identifyFromNameOrCode(self, allowedAuthorities, authName, ensembleNN, datumAuthName, datumCode); if (datumAuthName.empty()) { datumAuthName = authName; if (numericCode) { datumCode = self->suggestsCodeFor(ensembleNN, datumAuthName, true); } else { datumCode = "VERTICAL_DATUM_" + code; } sqlStatements = self->getInsertStatementsFor( ensembleNN, datumAuthName, datumCode, numericCode, allowedAuthorities); } } else { const auto &datum = crs->datum(); assert(datum); const auto datumNN = NN_NO_CHECK(datum); identifyFromNameOrCode(self, allowedAuthorities, authName, datumNN, datumAuthName, datumCode); if (datumAuthName.empty()) { datumAuthName = authName; if (numericCode) { datumCode = self->suggestsCodeFor(datumNN, datumAuthName, true); } else { datumCode = "VERTICAL_DATUM_" + code; } sqlStatements = self->getInsertStatementsFor(datumNN, datumAuthName, datumCode, numericCode, allowedAuthorities); } } // Find or insert coordinate system const auto &coordinateSystem = crs->coordinateSystem(); std::string csAuthName; std::string csCode; identifyOrInsert(self, coordinateSystem, "VERTICAL_CRS", authName, code, csAuthName, csCode, sqlStatements); // Insert new record in vertical_crs table const auto sql = formatStatement("INSERT INTO vertical_crs VALUES(" "'%q','%q','%q','%q','%q','%q','%q','%q',0);", authName.c_str(), code.c_str(), crs->nameStr().c_str(), "", // description csAuthName.c_str(), csCode.c_str(), datumAuthName.c_str(), datumCode.c_str()); appendSql(sqlStatements, sql); identifyOrInsertUsages(crs, "vertical_crs", authName, code, allowedAuthorities, sqlStatements); return sqlStatements; } // --------------------------------------------------------------------------- std::vector DatabaseContext::Private::getInsertStatementsFor( const crs::CompoundCRSNNPtr &crs, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities) { const auto self = NN_NO_CHECK(self_.lock()); std::vector sqlStatements; int counter = 1; std::vector> componentsId; const auto &components = crs->componentReferenceSystems(); if (components.size() != 2) { throw FactoryException( "Cannot insert compound CRS with number of components != 2"); } auto allowedAuthoritiesTmp(allowedAuthorities); allowedAuthoritiesTmp.emplace_back(authName); for (const auto &component : components) { std::string compAuthName; std::string compCode; for (const auto &allowedAuthority : allowedAuthoritiesTmp) { const auto factory = AuthorityFactory::create(self, allowedAuthority); const auto candidates = component->identify(factory); for (const auto &candidate : candidates) { if (candidate.second == 100) { const auto &ids = candidate.first->identifiers(); if (!ids.empty()) { const auto &id = ids.front(); compAuthName = *(id->codeSpace()); compCode = id->code(); break; } } if (!compAuthName.empty()) { break; } } } if (compAuthName.empty()) { compAuthName = authName; if (numericCode) { compCode = self->suggestsCodeFor(component, compAuthName, true); } else { compCode = "COMPONENT_" + code + '_' + toString(counter); } const auto sqlStatementsTmp = self->getInsertStatementsFor(component, compAuthName, compCode, numericCode, allowedAuthorities); sqlStatements.insert(sqlStatements.end(), sqlStatementsTmp.begin(), sqlStatementsTmp.end()); } componentsId.emplace_back( std::pair(compAuthName, compCode)); ++counter; } // Insert new record in compound_crs table const auto sql = formatStatement( "INSERT INTO compound_crs VALUES(" "'%q','%q','%q','%q','%q','%q','%q','%q',0);", authName.c_str(), code.c_str(), crs->nameStr().c_str(), "", // description componentsId[0].first.c_str(), componentsId[0].second.c_str(), componentsId[1].first.c_str(), componentsId[1].second.c_str()); appendSql(sqlStatements, sql); identifyOrInsertUsages(crs, "compound_crs", authName, code, allowedAuthorities, sqlStatements); return sqlStatements; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DatabaseContext::~DatabaseContext() { try { stopInsertStatementsSession(); } catch (const std::exception &) { } } //! @endcond // --------------------------------------------------------------------------- DatabaseContext::DatabaseContext() : d(std::make_unique()) {} // --------------------------------------------------------------------------- /** \brief Instantiate a database context. * * This database context should be used only by one thread at a time. * * @param databasePath Path and filename of the database. Might be empty * string for the default rules to locate the default proj.db * @param auxiliaryDatabasePaths Path and filename of auxiliary databases. * Might be empty. * Starting with PROJ 8.1, if this parameter is an empty array, * the PROJ_AUX_DB environment variable will be used, if set. * It must contain one or several paths. If several paths are * provided, they must be separated by the colon (:) character on Unix, and * on Windows, by the semi-colon (;) character. * @param ctx Context used for file search. * @throw FactoryException if the database cannot be opened. */ DatabaseContextNNPtr DatabaseContext::create(const std::string &databasePath, const std::vector &auxiliaryDatabasePaths, PJ_CONTEXT *ctx) { auto dbCtx = DatabaseContext::nn_make_shared(); auto dbCtxPrivate = dbCtx->getPrivate(); dbCtxPrivate->open(databasePath, ctx); auto auxDbs(auxiliaryDatabasePaths); if (auxDbs.empty()) { const char *auxDbStr = getenv("PROJ_AUX_DB"); if (auxDbStr) { #ifdef _WIN32 const char *delim = ";"; #else const char *delim = ":"; #endif auxDbs = split(auxDbStr, delim); } } if (!auxDbs.empty()) { dbCtxPrivate->attachExtraDatabases(auxDbs); dbCtxPrivate->auxiliaryDatabasePaths_ = std::move(auxDbs); } dbCtxPrivate->self_ = dbCtx.as_nullable(); return dbCtx; } // --------------------------------------------------------------------------- /** \brief Return the list of authorities used in the database. */ std::set DatabaseContext::getAuthorities() const { auto res = d->run("SELECT auth_name FROM authority_list"); std::set list; for (const auto &row : res) { list.insert(row[0]); } return list; } // --------------------------------------------------------------------------- /** \brief Return the list of SQL commands (CREATE TABLE, CREATE TRIGGER, * CREATE VIEW) needed to initialize a new database. */ std::vector DatabaseContext::getDatabaseStructure() const { return d->getDatabaseStructure(); } // --------------------------------------------------------------------------- /** \brief Return the path to the database. */ const std::string &DatabaseContext::getPath() const { return d->getPath(); } // --------------------------------------------------------------------------- /** \brief Return a metadata item. * * Value remains valid while this is alive and to the next call to getMetadata */ const char *DatabaseContext::getMetadata(const char *key) const { auto res = d->run("SELECT value FROM metadata WHERE key = ?", {std::string(key)}); if (res.empty()) { return nullptr; } d->lastMetadataValue_ = res.front()[0]; return d->lastMetadataValue_.c_str(); } // --------------------------------------------------------------------------- /** \brief Starts a session for getInsertStatementsFor() * * Starts a new session for one or several calls to getInsertStatementsFor(). * An insertion session guarantees that the inserted objects will not create * conflicting intermediate objects. * * The session must be stopped with stopInsertStatementsSession(). * * Only one session may be active at a time for a given database context. * * @throw FactoryException in case of error. * @since 8.1 */ void DatabaseContext::startInsertStatementsSession() { if (d->memoryDbHandle_) { throw FactoryException( "startInsertStatementsSession() cannot be invoked until " "stopInsertStatementsSession() is."); } d->memoryDbForInsertPath_.clear(); const auto sqlStatements = getDatabaseStructure(); // Create a in-memory temporary sqlite3 database std::ostringstream buffer; buffer << "file:temp_db_for_insert_statements_"; buffer << this; buffer << ".db?mode=memory&cache=shared"; d->memoryDbForInsertPath_ = buffer.str(); sqlite3 *memoryDbHandle = nullptr; sqlite3_open_v2( d->memoryDbForInsertPath_.c_str(), &memoryDbHandle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_URI, nullptr); if (memoryDbHandle == nullptr) { throw FactoryException("Cannot create in-memory database"); } d->memoryDbHandle_ = SQLiteHandle::initFromExistingUniquePtr(memoryDbHandle, true); // Fill the structure of this database for (const auto &sql : sqlStatements) { char *errmsg = nullptr; if (sqlite3_exec(d->memoryDbHandle_->handle(), sql.c_str(), nullptr, nullptr, &errmsg) != SQLITE_OK) { const auto sErrMsg = "Cannot execute " + sql + ": " + (errmsg ? errmsg : ""); sqlite3_free(errmsg); throw FactoryException(sErrMsg); } sqlite3_free(errmsg); } // Attach this database to the current one(s) auto auxiliaryDatabasePaths(d->auxiliaryDatabasePaths_); auxiliaryDatabasePaths.push_back(d->memoryDbForInsertPath_); d->attachExtraDatabases(auxiliaryDatabasePaths); } // --------------------------------------------------------------------------- /** \brief Suggests a database code for the passed object. * * Supported type of objects are PrimeMeridian, Ellipsoid, Datum, DatumEnsemble, * GeodeticCRS, ProjectedCRS, VerticalCRS, CompoundCRS, BoundCRS, Conversion. * * @param object Object for which to suggest a code. * @param authName Authority name into which the object will be inserted. * @param numericCode Whether the code should be numeric, or derived from the * object name. * @return the suggested code, that is guaranteed to not conflict with an * existing one. * * @throw FactoryException in case of error. * @since 8.1 */ std::string DatabaseContext::suggestsCodeFor(const common::IdentifiedObjectNNPtr &object, const std::string &authName, bool numericCode) { const char *tableName = "prime_meridian"; if (dynamic_cast(object.get())) { // tableName = "prime_meridian"; } else if (dynamic_cast(object.get())) { tableName = "ellipsoid"; } else if (dynamic_cast( object.get())) { tableName = "geodetic_datum"; } else if (dynamic_cast( object.get())) { tableName = "vertical_datum"; } else if (const auto ensemble = dynamic_cast(object.get())) { const auto &datums = ensemble->datums(); if (!datums.empty() && dynamic_cast( datums[0].get())) { tableName = "geodetic_datum"; } else { tableName = "vertical_datum"; } } else if (const auto boundCRS = dynamic_cast(object.get())) { return suggestsCodeFor(boundCRS->baseCRS(), authName, numericCode); } else if (dynamic_cast(object.get())) { tableName = "crs_view"; } else if (dynamic_cast(object.get())) { tableName = "conversion"; } else { throw FactoryException("suggestsCodeFor(): unhandled type of object"); } if (numericCode) { std::string sql("SELECT MAX(code) FROM "); sql += tableName; sql += " WHERE auth_name = ? AND code >= '1' AND code <= '999999999' " "AND upper(code) = lower(code)"; const auto res = d->run(sql, {authName}); if (res.empty()) { return "1"; } return toString(atoi(res.front()[0].c_str()) + 1); } std::string code; code.reserve(object->nameStr().size()); bool insertUnderscore = false; for (const auto ch : toupper(object->nameStr())) { if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z')) { if (insertUnderscore && code.back() != '_') code += '_'; code += ch; insertUnderscore = false; } else { insertUnderscore = true; } } return d->findFreeCode(tableName, authName, code); } // --------------------------------------------------------------------------- /** \brief Returns SQL statements needed to insert the passed object into the * database. * * startInsertStatementsSession() must have been called previously. * * @param object The object to insert into the database. Currently only * PrimeMeridian, Ellipsoid, Datum, GeodeticCRS, ProjectedCRS, * VerticalCRS, CompoundCRS or BoundCRS are supported. * @param authName Authority name into which the object will be inserted. * @param code Code with which the object will be inserted. * @param numericCode Whether intermediate objects that can be created should * use numeric codes (true), or may be alphanumeric (false) * @param allowedAuthorities Authorities to which intermediate objects are * allowed to refer to. authName will be implicitly * added to it. Note that unit, coordinate * systems, projection methods and parameters will in * any case be allowed to refer to EPSG. * @throw FactoryException in case of error. * @since 8.1 */ std::vector DatabaseContext::getInsertStatementsFor( const common::IdentifiedObjectNNPtr &object, const std::string &authName, const std::string &code, bool numericCode, const std::vector &allowedAuthorities) { if (d->memoryDbHandle_ == nullptr) { throw FactoryException( "startInsertStatementsSession() should be invoked first"); } const auto crs = util::nn_dynamic_pointer_cast(object); if (crs) { // Check if the object is already known under that code const auto self = NN_NO_CHECK(d->self_.lock()); auto allowedAuthoritiesTmp(allowedAuthorities); allowedAuthoritiesTmp.emplace_back(authName); for (const auto &allowedAuthority : allowedAuthoritiesTmp) { const auto factory = AuthorityFactory::create(self, allowedAuthority); const auto candidates = crs->identify(factory); for (const auto &candidate : candidates) { if (candidate.second == 100) { const auto &ids = candidate.first->identifiers(); for (const auto &id : ids) { if (*(id->codeSpace()) == authName && id->code() == code) { return {}; } } } } } } if (const auto pm = util::nn_dynamic_pointer_cast(object)) { return d->getInsertStatementsFor(NN_NO_CHECK(pm), authName, code, numericCode, allowedAuthorities); } else if (const auto ellipsoid = util::nn_dynamic_pointer_cast(object)) { return d->getInsertStatementsFor(NN_NO_CHECK(ellipsoid), authName, code, numericCode, allowedAuthorities); } else if (const auto geodeticDatum = util::nn_dynamic_pointer_cast( object)) { return d->getInsertStatementsFor(NN_NO_CHECK(geodeticDatum), authName, code, numericCode, allowedAuthorities); } else if (const auto ensemble = util::nn_dynamic_pointer_cast(object)) { return d->getInsertStatementsFor(NN_NO_CHECK(ensemble), authName, code, numericCode, allowedAuthorities); } else if (const auto geodCRS = std::dynamic_pointer_cast(crs)) { return d->getInsertStatementsFor(NN_NO_CHECK(geodCRS), authName, code, numericCode, allowedAuthorities); } else if (const auto projCRS = std::dynamic_pointer_cast(crs)) { return d->getInsertStatementsFor(NN_NO_CHECK(projCRS), authName, code, numericCode, allowedAuthorities); } else if (const auto verticalDatum = util::nn_dynamic_pointer_cast( object)) { return d->getInsertStatementsFor(NN_NO_CHECK(verticalDatum), authName, code, numericCode, allowedAuthorities); } else if (const auto vertCRS = std::dynamic_pointer_cast(crs)) { return d->getInsertStatementsFor(NN_NO_CHECK(vertCRS), authName, code, numericCode, allowedAuthorities); } else if (const auto compoundCRS = std::dynamic_pointer_cast(crs)) { return d->getInsertStatementsFor(NN_NO_CHECK(compoundCRS), authName, code, numericCode, allowedAuthorities); } else if (const auto boundCRS = std::dynamic_pointer_cast(crs)) { return getInsertStatementsFor(boundCRS->baseCRS(), authName, code, numericCode, allowedAuthorities); } else { throw FactoryException( "getInsertStatementsFor(): unhandled type of object"); } } // --------------------------------------------------------------------------- /** \brief Stops an insertion session started with * startInsertStatementsSession() * * @since 8.1 */ void DatabaseContext::stopInsertStatementsSession() { if (d->memoryDbHandle_) { d->clearCaches(); d->attachExtraDatabases(d->auxiliaryDatabasePaths_); d->memoryDbHandle_.reset(); d->memoryDbForInsertPath_.clear(); } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress DatabaseContextNNPtr DatabaseContext::create(void *sqlite_handle) { auto ctxt = DatabaseContext::nn_make_shared(); ctxt->getPrivate()->setHandle(static_cast(sqlite_handle)); return ctxt; } // --------------------------------------------------------------------------- void *DatabaseContext::getSqliteHandle() const { return d->handle()->handle(); } // --------------------------------------------------------------------------- bool DatabaseContext::lookForGridAlternative(const std::string &officialName, std::string &projFilename, std::string &projFormat, bool &inverse) const { auto res = d->run( "SELECT proj_grid_name, proj_grid_format, inverse_direction FROM " "grid_alternatives WHERE original_grid_name = ? AND " "proj_grid_name <> ''", {officialName}); if (res.empty()) { return false; } const auto &row = res.front(); projFilename = row[0]; projFormat = row[1]; inverse = row[2] == "1"; return true; } // --------------------------------------------------------------------------- static std::string makeCachedGridKey(const std::string &projFilename, bool networkEnabled, bool considerKnownGridsAsAvailable) { std::string key(projFilename); key += networkEnabled ? "true" : "false"; key += considerKnownGridsAsAvailable ? "true" : "false"; return key; } // --------------------------------------------------------------------------- /** Invalidates information related to projFilename that might have been * previously cached by lookForGridInfo(). * * This is useful when downloading a new grid during a session. */ void DatabaseContext::invalidateGridInfo(const std::string &projFilename) { d->evictGridInfoFromCache(makeCachedGridKey(projFilename, false, false)); d->evictGridInfoFromCache(makeCachedGridKey(projFilename, false, true)); d->evictGridInfoFromCache(makeCachedGridKey(projFilename, true, false)); d->evictGridInfoFromCache(makeCachedGridKey(projFilename, true, true)); } // --------------------------------------------------------------------------- bool DatabaseContext::lookForGridInfo( const std::string &projFilename, bool considerKnownGridsAsAvailable, std::string &fullFilename, std::string &packageName, std::string &url, bool &directDownload, bool &openLicense, bool &gridAvailable) const { Private::GridInfoCache info; if (projFilename == "null") { // Special case for implicit "null" grid. fullFilename.clear(); packageName.clear(); url.clear(); directDownload = false; openLicense = true; gridAvailable = true; return true; } auto ctxt = d->pjCtxt(); if (ctxt == nullptr) { ctxt = pj_get_default_ctx(); d->setPjCtxt(ctxt); } const std::string key(makeCachedGridKey( projFilename, proj_context_is_network_enabled(ctxt) != false, considerKnownGridsAsAvailable)); if (d->getGridInfoFromCache(key, info)) { fullFilename = info.fullFilename; packageName = info.packageName; url = info.url; directDownload = info.directDownload; openLicense = info.openLicense; gridAvailable = info.gridAvailable; return info.found; } fullFilename.clear(); packageName.clear(); url.clear(); openLicense = false; directDownload = false; gridAvailable = false; const auto resolveFullFilename = [ctxt, &fullFilename, &projFilename]() { fullFilename.resize(2048); const int errno_before = proj_context_errno(ctxt); bool lGridAvailable = NS_PROJ::FileManager::open_resource_file( ctxt, projFilename.c_str(), &fullFilename[0], fullFilename.size() - 1) != nullptr; proj_context_errno_set(ctxt, errno_before); fullFilename.resize(strlen(fullFilename.c_str())); return lGridAvailable; }; auto res = d->run("SELECT " "grid_packages.package_name, " "grid_alternatives.url, " "grid_packages.url AS package_url, " "grid_alternatives.open_license, " "grid_packages.open_license AS package_open_license, " "grid_alternatives.direct_download, " "grid_packages.direct_download AS package_direct_download, " "grid_alternatives.proj_grid_name, " "grid_alternatives.old_proj_grid_name " "FROM grid_alternatives " "LEFT JOIN grid_packages ON " "grid_alternatives.package_name = grid_packages.package_name " "WHERE proj_grid_name = ? OR old_proj_grid_name = ?", {projFilename, projFilename}); bool ret = !res.empty(); if (ret) { const auto &row = res.front(); packageName = std::move(row[0]); url = row[1].empty() ? std::move(row[2]) : std::move(row[1]); openLicense = (row[3].empty() ? row[4] : row[3]) == "1"; directDownload = (row[5].empty() ? row[6] : row[5]) == "1"; const auto &proj_grid_name = row[7]; const auto &old_proj_grid_name = row[8]; if (proj_grid_name != old_proj_grid_name && old_proj_grid_name == projFilename) { std::string fullFilenameNewName; fullFilenameNewName.resize(2048); const int errno_before = proj_context_errno(ctxt); bool gridAvailableWithNewName = pj_find_file(ctxt, proj_grid_name.c_str(), &fullFilenameNewName[0], fullFilenameNewName.size() - 1) != 0; proj_context_errno_set(ctxt, errno_before); fullFilenameNewName.resize(strlen(fullFilenameNewName.c_str())); if (gridAvailableWithNewName) { gridAvailable = true; fullFilename = std::move(fullFilenameNewName); } } if (!gridAvailable && considerKnownGridsAsAvailable && (!packageName.empty() || (!url.empty() && openLicense))) { // In considerKnownGridsAsAvailable mode, try to fetch the local // file name if it exists, but do not attempt network access. const auto network_was_enabled = proj_context_is_network_enabled(ctxt); proj_context_set_enable_network(ctxt, false); (void)resolveFullFilename(); proj_context_set_enable_network(ctxt, network_was_enabled); gridAvailable = true; } info.packageName = packageName; std::string endpoint(proj_context_get_url_endpoint(d->pjCtxt())); if (!endpoint.empty() && starts_with(url, "https://cdn.proj.org/")) { if (endpoint.back() != '/') { endpoint += '/'; } url = endpoint + url.substr(strlen("https://cdn.proj.org/")); } info.directDownload = directDownload; info.openLicense = openLicense; if (!gridAvailable) { gridAvailable = resolveFullFilename(); } } else { gridAvailable = resolveFullFilename(); if (starts_with(fullFilename, "http://") || starts_with(fullFilename, "https://")) { url = fullFilename; fullFilename.clear(); } } info.fullFilename = fullFilename; info.url = url; info.gridAvailable = gridAvailable; info.found = ret; d->cache(key, info); return ret; } // --------------------------------------------------------------------------- /** Returns the number of queries to the database since the creation of this * instance. */ unsigned int DatabaseContext::getQueryCounter() const { return d->queryCounter_; } // --------------------------------------------------------------------------- bool DatabaseContext::isKnownName(const std::string &name, const std::string &tableName) const { std::string sql("SELECT 1 FROM \""); sql += replaceAll(tableName, "\"", "\"\""); sql += "\" WHERE name = ? LIMIT 1"; return !d->run(sql, {name}).empty(); } // --------------------------------------------------------------------------- std::string DatabaseContext::getProjGridName(const std::string &oldProjGridName) { auto res = d->run("SELECT proj_grid_name FROM grid_alternatives WHERE " "old_proj_grid_name = ?", {oldProjGridName}); if (res.empty()) { return std::string(); } return res.front()[0]; } // --------------------------------------------------------------------------- std::string DatabaseContext::getOldProjGridName(const std::string &gridName) { auto res = d->run("SELECT old_proj_grid_name FROM grid_alternatives WHERE " "proj_grid_name = ?", {gridName}); if (res.empty()) { return std::string(); } return res.front()[0]; } // --------------------------------------------------------------------------- // scripts/build_db_from_esri.py adds a second alias for // names that have '[' in them. See get_old_esri_name() // in scripts/build_db_from_esri.py // So if we only have two aliases detect that situation to get the official // new name static std::string getUniqueEsriAlias(const std::list &l) { std::string first = l.front(); std::string second = *(std::next(l.begin())); if (second.find('[') != std::string::npos) std::swap(first, second); if (replaceAll(replaceAll(replaceAll(first, "[", ""), "]", ""), "-", "_") == second) { return first; } return std::string(); } // --------------------------------------------------------------------------- /** \brief Gets the alias name from an official name. * * @param officialName Official name. Mandatory * @param tableName Table name/category. Mandatory. * "geographic_2D_crs" and "geographic_3D_crs" are also * accepted as special names to add a constraint on the "type" * column of the "geodetic_crs" table. * @param source Source of the alias. Mandatory * @return Alias name (or empty if not found). * @throw FactoryException in case of error. */ std::string DatabaseContext::getAliasFromOfficialName(const std::string &officialName, const std::string &tableName, const std::string &source) const { std::string sql("SELECT auth_name, code FROM \""); const auto genuineTableName = tableName == "geographic_2D_crs" || tableName == "geographic_3D_crs" ? "geodetic_crs" : tableName; sql += replaceAll(genuineTableName, "\"", "\"\""); sql += "\" WHERE name = ?"; if (tableName == "geodetic_crs" || tableName == "geographic_2D_crs") { sql += " AND type = " GEOG_2D_SINGLE_QUOTED; } else if (tableName == "geographic_3D_crs") { sql += " AND type = " GEOG_3D_SINGLE_QUOTED; } sql += " ORDER BY deprecated"; auto res = d->run(sql, {officialName}); // Sorry for the hack excluding NAD83 + geographic_3D_crs, but otherwise // EPSG has a weird alias from NAD83 to EPSG:4152 which happens to be // NAD83(HARN), and that's definitely not desirable. if (res.empty() && !(officialName == "NAD83" && tableName == "geographic_3D_crs")) { res = d->run( "SELECT auth_name, code FROM alias_name WHERE table_name = ? AND " "alt_name = ? AND source IN ('EPSG', 'PROJ')", {genuineTableName, officialName}); if (res.size() != 1) { return std::string(); } } for (const auto &row : res) { auto res2 = d->run("SELECT alt_name FROM alias_name WHERE table_name = ? AND " "auth_name = ? AND code = ? AND source = ?", {genuineTableName, row[0], row[1], source}); if (!res2.empty()) { if (res2.size() == 2 && source == "ESRI") { std::list l; l.emplace_back(res2.front()[0]); l.emplace_back((*(std::next(res2.begin())))[0]); std::string uniqueEsriAlias = getUniqueEsriAlias(l); if (!uniqueEsriAlias.empty()) return uniqueEsriAlias; } return res2.front()[0]; } } return std::string(); } // --------------------------------------------------------------------------- /** \brief Gets the alias names for an object. * * Either authName + code or officialName must be non empty. * * @param authName Authority. * @param code Code. * @param officialName Official name. * @param tableName Table name/category. Mandatory. * "geographic_2D_crs" and "geographic_3D_crs" are also * accepted as special names to add a constraint on the "type" * column of the "geodetic_crs" table. * @param source Source of the alias. May be empty. * @return Aliases */ std::list DatabaseContext::getAliases( const std::string &authName, const std::string &code, const std::string &officialName, const std::string &tableName, const std::string &source) const { std::list res; const auto key(authName + code + officialName + tableName + source); if (d->cacheAliasNames_.tryGet(key, res)) { return res; } std::string resolvedAuthName(authName); std::string resolvedCode(code); const auto genuineTableName = tableName == "geographic_2D_crs" || tableName == "geographic_3D_crs" ? "geodetic_crs" : tableName; if (authName.empty() || code.empty()) { std::string sql("SELECT auth_name, code FROM \""); sql += replaceAll(genuineTableName, "\"", "\"\""); sql += "\" WHERE name = ?"; if (tableName == "geodetic_crs" || tableName == "geographic_2D_crs") { sql += " AND type = " GEOG_2D_SINGLE_QUOTED; } else if (tableName == "geographic_3D_crs") { sql += " AND type = " GEOG_3D_SINGLE_QUOTED; } sql += " ORDER BY deprecated"; auto resSql = d->run(sql, {officialName}); if (resSql.empty()) { resSql = d->run("SELECT auth_name, code FROM alias_name WHERE " "table_name = ? AND " "alt_name = ? AND source IN ('EPSG', 'PROJ')", {genuineTableName, officialName}); if (resSql.size() != 1) { d->cacheAliasNames_.insert(key, res); return res; } } const auto &row = resSql.front(); resolvedAuthName = row[0]; resolvedCode = row[1]; } std::string sql("SELECT alt_name FROM alias_name WHERE table_name = ? AND " "auth_name = ? AND code = ?"); ListOfParams params{genuineTableName, resolvedAuthName, resolvedCode}; if (!source.empty()) { sql += " AND source = ?"; params.emplace_back(source); } auto resSql = d->run(sql, params); for (const auto &row : resSql) { res.emplace_back(row[0]); } if (res.size() == 2 && source == "ESRI") { const auto uniqueEsriAlias = getUniqueEsriAlias(res); if (!uniqueEsriAlias.empty()) { res.clear(); res.emplace_back(uniqueEsriAlias); } } d->cacheAliasNames_.insert(key, res); return res; } // --------------------------------------------------------------------------- /** \brief Return the 'name' column of a table for an object * * @param tableName Table name/category. * @param authName Authority name of the object. * @param code Code of the object * @return Name (or empty) * @throw FactoryException in case of error. */ std::string DatabaseContext::getName(const std::string &tableName, const std::string &authName, const std::string &code) const { std::string res; const auto key(tableName + authName + code); if (d->cacheNames_.tryGet(key, res)) { return res; } std::string sql("SELECT name FROM \""); sql += replaceAll(tableName, "\"", "\"\""); sql += "\" WHERE auth_name = ? AND code = ?"; auto sqlRes = d->run(sql, {authName, code}); if (sqlRes.empty()) { res.clear(); } else { res = sqlRes.front()[0]; } d->cacheNames_.insert(key, res); return res; } // --------------------------------------------------------------------------- /** \brief Return the 'text_definition' column of a table for an object * * @param tableName Table name/category. * @param authName Authority name of the object. * @param code Code of the object * @return Text definition (or empty) * @throw FactoryException in case of error. */ std::string DatabaseContext::getTextDefinition(const std::string &tableName, const std::string &authName, const std::string &code) const { std::string sql("SELECT text_definition FROM \""); sql += replaceAll(tableName, "\"", "\"\""); sql += "\" WHERE auth_name = ? AND code = ?"; auto res = d->run(sql, {authName, code}); if (res.empty()) { return std::string(); } return res.front()[0]; } // --------------------------------------------------------------------------- /** \brief Return the allowed authorities when researching transformations * between different authorities. * * @throw FactoryException in case of error. */ std::vector DatabaseContext::getAllowedAuthorities( const std::string &sourceAuthName, const std::string &targetAuthName) const { const auto key(sourceAuthName + targetAuthName); auto hit = d->cacheAllowedAuthorities_.find(key); if (hit != d->cacheAllowedAuthorities_.end()) { return hit->second; } auto sqlRes = d->run( "SELECT allowed_authorities FROM authority_to_authority_preference " "WHERE source_auth_name = ? AND target_auth_name = ?", {sourceAuthName, targetAuthName}); if (sqlRes.empty()) { sqlRes = d->run( "SELECT allowed_authorities FROM authority_to_authority_preference " "WHERE source_auth_name = ? AND target_auth_name = 'any'", {sourceAuthName}); } if (sqlRes.empty()) { sqlRes = d->run( "SELECT allowed_authorities FROM authority_to_authority_preference " "WHERE source_auth_name = 'any' AND target_auth_name = ?", {targetAuthName}); } if (sqlRes.empty()) { sqlRes = d->run( "SELECT allowed_authorities FROM authority_to_authority_preference " "WHERE source_auth_name = 'any' AND target_auth_name = 'any'", {}); } if (sqlRes.empty()) { d->cacheAllowedAuthorities_[key] = std::vector(); return std::vector(); } auto res = split(sqlRes.front()[0], ','); d->cacheAllowedAuthorities_[key] = res; return res; } // --------------------------------------------------------------------------- std::list> DatabaseContext::getNonDeprecated(const std::string &tableName, const std::string &authName, const std::string &code) const { auto sqlRes = d->run("SELECT replacement_auth_name, replacement_code, source " "FROM deprecation " "WHERE table_name = ? AND deprecated_auth_name = ? " "AND deprecated_code = ?", {tableName, authName, code}); std::list> res; for (const auto &row : sqlRes) { const auto &source = row[2]; if (source == "PROJ") { const auto &replacement_auth_name = row[0]; const auto &replacement_code = row[1]; res.emplace_back(replacement_auth_name, replacement_code); } } if (!res.empty()) { return res; } for (const auto &row : sqlRes) { const auto &replacement_auth_name = row[0]; const auto &replacement_code = row[1]; res.emplace_back(replacement_auth_name, replacement_code); } return res; } // --------------------------------------------------------------------------- const std::vector & DatabaseContext::Private::getCacheAuthNameWithVersion() { if (cacheAuthNameWithVersion_.empty()) { const auto sqlRes = run("SELECT versioned_auth_name, auth_name, version, priority " "FROM versioned_auth_name_mapping"); for (const auto &row : sqlRes) { VersionedAuthName van; van.versionedAuthName = row[0]; van.authName = row[1]; van.version = row[2]; van.priority = atoi(row[3].c_str()); cacheAuthNameWithVersion_.emplace_back(std::move(van)); } } return cacheAuthNameWithVersion_; } // --------------------------------------------------------------------------- // From IAU_2015 returns (IAU,2015) bool DatabaseContext::getAuthorityAndVersion( const std::string &versionedAuthName, std::string &authNameOut, std::string &versionOut) { for (const auto &van : d->getCacheAuthNameWithVersion()) { if (van.versionedAuthName == versionedAuthName) { authNameOut = van.authName; versionOut = van.version; return true; } } return false; } // --------------------------------------------------------------------------- // From IAU and 2015, returns IAU_2015 bool DatabaseContext::getVersionedAuthority(const std::string &authName, const std::string &version, std::string &versionedAuthNameOut) { for (const auto &van : d->getCacheAuthNameWithVersion()) { if (van.authName == authName && van.version == version) { versionedAuthNameOut = van.versionedAuthName; return true; } } return false; } // --------------------------------------------------------------------------- // From IAU returns IAU_latest, ... IAU_2015 std::vector DatabaseContext::getVersionedAuthoritiesFromName(const std::string &authName) { typedef std::pair VersionedAuthNamePriority; std::vector tmp; for (const auto &van : d->getCacheAuthNameWithVersion()) { if (van.authName == authName) { tmp.emplace_back( VersionedAuthNamePriority(van.versionedAuthName, van.priority)); } } std::vector res; if (!tmp.empty()) { // Sort by decreasing priority std::sort(tmp.begin(), tmp.end(), [](const VersionedAuthNamePriority &a, const VersionedAuthNamePriority &b) { return b.second > a.second; }); for (const auto &pair : tmp) res.emplace_back(pair.first); } return res; } // --------------------------------------------------------------------------- std::vector DatabaseContext::getTransformationsForGridName( const DatabaseContextNNPtr &databaseContext, const std::string &gridName) { auto sqlRes = databaseContext->d->run( "SELECT auth_name, code FROM grid_transformation " "WHERE grid_name = ? OR grid_name IN " "(SELECT original_grid_name FROM grid_alternatives " "WHERE proj_grid_name = ?) ORDER BY auth_name, code", {gridName, gridName}); std::vector res; for (const auto &row : sqlRes) { res.emplace_back(AuthorityFactory::create(databaseContext, row[0]) ->createCoordinateOperation(row[1], true)); } return res; } // --------------------------------------------------------------------------- // Fixes wrong towgs84 values returned by epsg.io when using a Coordinate Frame // transformation, where they neglect to reverse the sign of the rotation terms. // Cf https://github.com/OSGeo/PROJ/issues/4170 and // https://github.com/maptiler/epsg.io/issues/194 // We do that only when we found a valid Coordinate Frame rotation that // has the same numeric values (and no corresponding Position Vector // transformation with same values, or Coordinate Frame transformation with // opposite sign for rotation terms, both are highly unlikely) bool DatabaseContext::toWGS84AutocorrectWrongValues( double &tx, double &ty, double &tz, double &rx, double &ry, double &rz, double &scale_difference) const { if (rx == 0 && ry == 0 && rz == 0) return false; // 9606: Coordinate Frame rotation (geog2D domain) // 9607: Position Vector transformation (geog2D domain) std::string sql( "SELECT DISTINCT method_code " "FROM helmert_transformation_table WHERE " "abs(tx - ?) <= 1e-8 * abs(tx) AND " "abs(ty - ?) <= 1e-8 * abs(ty) AND " "abs(tz - ?) <= 1e-8 * abs(tz) AND " "abs(rx - ?) <= 1e-8 * abs(rx) AND " "abs(ry - ?) <= 1e-8 * abs(ry) AND " "abs(rz - ?) <= 1e-8 * abs(rz) AND " "abs(scale_difference - ?) <= 1e-8 * abs(scale_difference) AND " "method_auth_name = 'EPSG' AND " "method_code IN (9606, 9607) AND " "translation_uom_auth_name = 'EPSG' AND " "translation_uom_code = 9001 AND " // metre "rotation_uom_auth_name = 'EPSG' AND " "rotation_uom_code = 9104 AND " // arc-second "scale_difference_uom_auth_name = 'EPSG' AND " "scale_difference_uom_code = 9202 AND " // parts per million "deprecated = 0"); ListOfParams params; params.emplace_back(tx); params.emplace_back(ty); params.emplace_back(tz); params.emplace_back(rx); params.emplace_back(ry); params.emplace_back(rz); params.emplace_back(scale_difference); bool bFound9606 = false; bool bFound9607 = false; for (const auto &row : d->run(sql, params)) { if (row[0] == "9606") { bFound9606 = true; } else if (row[0] == "9607") { bFound9607 = true; } } if (bFound9607 && !bFound9606) { params.clear(); params.emplace_back(tx); params.emplace_back(ty); params.emplace_back(tz); params.emplace_back(-rx); params.emplace_back(-ry); params.emplace_back(-rz); params.emplace_back(scale_difference); if (d->run(sql, params).empty()) { if (d->pjCtxt()) { pj_log(d->pjCtxt(), PJ_LOG_ERROR, "Auto-correcting wrong sign of rotation terms of " "TOWGS84 clause from %s,%s,%s,%s,%s,%s,%s to " "%s,%s,%s,%s,%s,%s,%s", internal::toString(tx).c_str(), internal::toString(ty).c_str(), internal::toString(tz).c_str(), internal::toString(rx).c_str(), internal::toString(ry).c_str(), internal::toString(rz).c_str(), internal::toString(scale_difference).c_str(), internal::toString(tx).c_str(), internal::toString(ty).c_str(), internal::toString(tz).c_str(), internal::toString(-rx).c_str(), internal::toString(-ry).c_str(), internal::toString(-rz).c_str(), internal::toString(scale_difference).c_str()); } rx = -rx; ry = -ry; rz = -rz; return true; } } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct AuthorityFactory::Private { Private(const DatabaseContextNNPtr &contextIn, const std::string &authorityName) : context_(contextIn), authority_(authorityName) {} inline const std::string &authority() PROJ_PURE_DEFN { return authority_; } inline const DatabaseContextNNPtr &context() PROJ_PURE_DEFN { return context_; } // cppcheck-suppress functionStatic void setThis(AuthorityFactoryNNPtr factory) { thisFactory_ = factory.as_nullable(); } // cppcheck-suppress functionStatic AuthorityFactoryPtr getSharedFromThis() { return thisFactory_.lock(); } inline AuthorityFactoryNNPtr createFactory(const std::string &auth_name) { if (auth_name == authority_) { return NN_NO_CHECK(thisFactory_.lock()); } return AuthorityFactory::create(context_, auth_name); } bool rejectOpDueToMissingGrid(const operation::CoordinateOperationNNPtr &op, bool considerKnownGridsAsAvailable); UnitOfMeasure createUnitOfMeasure(const std::string &auth_name, const std::string &code); util::PropertyMap createProperties(const std::string &code, const std::string &name, bool deprecated, const std::vector &usages); util::PropertyMap createPropertiesSearchUsages(const std::string &table_name, const std::string &code, const std::string &name, bool deprecated); util::PropertyMap createPropertiesSearchUsages( const std::string &table_name, const std::string &code, const std::string &name, bool deprecated, const std::string &remarks); SQLResultSet run(const std::string &sql, const ListOfParams ¶meters = ListOfParams()); SQLResultSet runWithCodeParam(const std::string &sql, const std::string &code); SQLResultSet runWithCodeParam(const char *sql, const std::string &code); bool hasAuthorityRestriction() const { return !authority_.empty() && authority_ != "any"; } SQLResultSet createProjectedCRSBegin(const std::string &code); crs::ProjectedCRSNNPtr createProjectedCRSEnd(const std::string &code, const SQLResultSet &res); private: DatabaseContextNNPtr context_; std::string authority_; std::weak_ptr thisFactory_{}; }; // --------------------------------------------------------------------------- SQLResultSet AuthorityFactory::Private::run(const std::string &sql, const ListOfParams ¶meters) { return context()->getPrivate()->run(sql, parameters); } // --------------------------------------------------------------------------- SQLResultSet AuthorityFactory::Private::runWithCodeParam(const std::string &sql, const std::string &code) { return run(sql, {authority(), code}); } // --------------------------------------------------------------------------- SQLResultSet AuthorityFactory::Private::runWithCodeParam(const char *sql, const std::string &code) { return runWithCodeParam(std::string(sql), code); } // --------------------------------------------------------------------------- UnitOfMeasure AuthorityFactory::Private::createUnitOfMeasure(const std::string &auth_name, const std::string &code) { return *(createFactory(auth_name)->createUnitOfMeasure(code)); } // --------------------------------------------------------------------------- util::PropertyMap AuthorityFactory::Private::createProperties( const std::string &code, const std::string &name, bool deprecated, const std::vector &usages) { auto props = util::PropertyMap() .set(metadata::Identifier::CODESPACE_KEY, authority()) .set(metadata::Identifier::CODE_KEY, code) .set(common::IdentifiedObject::NAME_KEY, name); if (deprecated) { props.set(common::IdentifiedObject::DEPRECATED_KEY, true); } if (!usages.empty()) { auto array(util::ArrayOfBaseObject::create()); for (const auto &usage : usages) { array->add(usage); } props.set(common::ObjectUsage::OBJECT_DOMAIN_KEY, util::nn_static_pointer_cast(array)); } return props; } // --------------------------------------------------------------------------- util::PropertyMap AuthorityFactory::Private::createPropertiesSearchUsages( const std::string &table_name, const std::string &code, const std::string &name, bool deprecated) { SQLResultSet res; if (table_name == "geodetic_crs" && code == "4326" && authority() == "EPSG") { // EPSG v10.077 has changed the extent from 1262 to 2830, whose // description is super verbose. // Cf https://epsg.org/closed-change-request/browse/id/2022.086 // To avoid churn in our WKT2 output, hot patch to the usage of // 10.076 and earlier res = run("SELECT extent.description, extent.south_lat, " "extent.north_lat, extent.west_lon, extent.east_lon, " "scope.scope, 0 AS score FROM extent, scope WHERE " "extent.code = 1262 and scope.code = 1183"); } else { const std::string sql( "SELECT extent.description, extent.south_lat, " "extent.north_lat, extent.west_lon, extent.east_lon, " "scope.scope, " "(CASE WHEN scope.scope LIKE '%large scale%' THEN 0 ELSE 1 END) " "AS score " "FROM usage " "JOIN extent ON usage.extent_auth_name = extent.auth_name AND " "usage.extent_code = extent.code " "JOIN scope ON usage.scope_auth_name = scope.auth_name AND " "usage.scope_code = scope.code " "WHERE object_table_name = ? AND object_auth_name = ? AND " "object_code = ? AND " // We voluntary exclude extent and scope with a specific code "NOT (usage.extent_auth_name = 'PROJ' AND " "usage.extent_code = 'EXTENT_UNKNOWN') AND " "NOT (usage.scope_auth_name = 'PROJ' AND " "usage.scope_code = 'SCOPE_UNKNOWN') " "ORDER BY score, usage.auth_name, usage.code"); res = run(sql, {table_name, authority(), code}); } std::vector usages; for (const auto &row : res) { try { size_t idx = 0; const auto &extent_description = row[idx++]; const auto &south_lat_str = row[idx++]; const auto &north_lat_str = row[idx++]; const auto &west_lon_str = row[idx++]; const auto &east_lon_str = row[idx++]; const auto &scope = row[idx]; util::optional scopeOpt; if (!scope.empty()) { scopeOpt = scope; } metadata::ExtentPtr extent; if (south_lat_str.empty()) { extent = metadata::Extent::create( util::optional(extent_description), {}, {}, {}) .as_nullable(); } else { double south_lat = c_locale_stod(south_lat_str); double north_lat = c_locale_stod(north_lat_str); double west_lon = c_locale_stod(west_lon_str); double east_lon = c_locale_stod(east_lon_str); auto bbox = metadata::GeographicBoundingBox::create( west_lon, south_lat, east_lon, north_lat); extent = metadata::Extent::create( util::optional(extent_description), std::vector{bbox}, std::vector(), std::vector()) .as_nullable(); } usages.emplace_back(ObjectDomain::create(scopeOpt, extent)); } catch (const std::exception &) { } } return createProperties(code, name, deprecated, std::move(usages)); } // --------------------------------------------------------------------------- util::PropertyMap AuthorityFactory::Private::createPropertiesSearchUsages( const std::string &table_name, const std::string &code, const std::string &name, bool deprecated, const std::string &remarks) { auto props = createPropertiesSearchUsages(table_name, code, name, deprecated); if (!remarks.empty()) props.set(common::IdentifiedObject::REMARKS_KEY, remarks); return props; } // --------------------------------------------------------------------------- bool AuthorityFactory::Private::rejectOpDueToMissingGrid( const operation::CoordinateOperationNNPtr &op, bool considerKnownGridsAsAvailable) { struct DisableNetwork { const DatabaseContextNNPtr &m_dbContext; bool m_old_network_enabled = false; explicit DisableNetwork(const DatabaseContextNNPtr &l_context) : m_dbContext(l_context) { auto ctxt = m_dbContext->d->pjCtxt(); if (ctxt == nullptr) { ctxt = pj_get_default_ctx(); m_dbContext->d->setPjCtxt(ctxt); } m_old_network_enabled = proj_context_is_network_enabled(ctxt) != FALSE; if (m_old_network_enabled) proj_context_set_enable_network(ctxt, false); } ~DisableNetwork() { if (m_old_network_enabled) { auto ctxt = m_dbContext->d->pjCtxt(); proj_context_set_enable_network(ctxt, true); } } }; auto &l_context = context(); // Temporarily disable networking as we are only interested in known grids DisableNetwork disabler(l_context); for (const auto &gridDesc : op->gridsNeeded(l_context, considerKnownGridsAsAvailable)) { if (!gridDesc.available) { return true; } } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress AuthorityFactory::~AuthorityFactory() = default; //! @endcond // --------------------------------------------------------------------------- AuthorityFactory::AuthorityFactory(const DatabaseContextNNPtr &context, const std::string &authorityName) : d(std::make_unique(context, authorityName)) {} // --------------------------------------------------------------------------- // clang-format off /** \brief Instantiate a AuthorityFactory. * * The authority name might be set to the empty string in the particular case * where createFromCoordinateReferenceSystemCodes(const std::string&,const std::string&,const std::string&,const std::string&) const * is called. * * @param context Context. * @param authorityName Authority name. * @return new AuthorityFactory. */ // clang-format on AuthorityFactoryNNPtr AuthorityFactory::create(const DatabaseContextNNPtr &context, const std::string &authorityName) { const auto getFactory = [&context, &authorityName]() { for (const auto &knownName : {metadata::Identifier::EPSG.c_str(), "ESRI", "PROJ"}) { if (ci_equal(authorityName, knownName)) { return AuthorityFactory::nn_make_shared( context, knownName); } } return AuthorityFactory::nn_make_shared( context, authorityName); }; auto factory = getFactory(); factory->d->setThis(factory); return factory; } // --------------------------------------------------------------------------- /** \brief Returns the database context. */ const DatabaseContextNNPtr &AuthorityFactory::databaseContext() const { return d->context(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress AuthorityFactory::CRSInfo::CRSInfo() : authName{}, code{}, name{}, type{ObjectType::CRS}, deprecated{}, bbox_valid{}, west_lon_degree{}, south_lat_degree{}, east_lon_degree{}, north_lat_degree{}, areaName{}, projectionMethodName{}, celestialBodyName{} {} //! @endcond // --------------------------------------------------------------------------- /** \brief Returns an arbitrary object from a code. * * The returned object will typically be an instance of Datum, * CoordinateSystem, ReferenceSystem or CoordinateOperation. If the type of * the object is know at compile time, it is recommended to invoke the most * precise method instead of this one (for example * createCoordinateReferenceSystem(code) instead of createObject(code) * if the caller know he is asking for a coordinate reference system). * * If there are several objects with the same code, a FactoryException is * thrown. * * @param code Object code allocated by authority. (e.g. "4326") * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ util::BaseObjectNNPtr AuthorityFactory::createObject(const std::string &code) const { auto res = d->runWithCodeParam("SELECT table_name, type FROM object_view " "WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("not found", d->authority(), code); } if (res.size() != 1) { std::string msg( "More than one object matching specified code. Objects found in "); bool first = true; for (const auto &row : res) { if (!first) msg += ", "; msg += row[0]; first = false; } throw FactoryException(msg); } const auto &first_row = res.front(); const auto &table_name = first_row[0]; const auto &type = first_row[1]; if (table_name == "extent") { return util::nn_static_pointer_cast( createExtent(code)); } if (table_name == "unit_of_measure") { return util::nn_static_pointer_cast( createUnitOfMeasure(code)); } if (table_name == "prime_meridian") { return util::nn_static_pointer_cast( createPrimeMeridian(code)); } if (table_name == "ellipsoid") { return util::nn_static_pointer_cast( createEllipsoid(code)); } if (table_name == "geodetic_datum") { if (type == "ensemble") { return util::nn_static_pointer_cast( createDatumEnsemble(code, table_name)); } return util::nn_static_pointer_cast( createGeodeticDatum(code)); } if (table_name == "vertical_datum") { if (type == "ensemble") { return util::nn_static_pointer_cast( createDatumEnsemble(code, table_name)); } return util::nn_static_pointer_cast( createVerticalDatum(code)); } if (table_name == "engineering_datum") { return util::nn_static_pointer_cast( createEngineeringDatum(code)); } if (table_name == "geodetic_crs") { return util::nn_static_pointer_cast( createGeodeticCRS(code)); } if (table_name == "vertical_crs") { return util::nn_static_pointer_cast( createVerticalCRS(code)); } if (table_name == "projected_crs") { return util::nn_static_pointer_cast( createProjectedCRS(code)); } if (table_name == "compound_crs") { return util::nn_static_pointer_cast( createCompoundCRS(code)); } if (table_name == "engineering_crs") { return util::nn_static_pointer_cast( createEngineeringCRS(code)); } if (table_name == "conversion") { return util::nn_static_pointer_cast( createConversion(code)); } if (table_name == "helmert_transformation" || table_name == "grid_transformation" || table_name == "other_transformation" || table_name == "concatenated_operation") { return util::nn_static_pointer_cast( createCoordinateOperation(code, false)); } throw FactoryException("unimplemented factory for " + res.front()[0]); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static FactoryException buildFactoryException(const char *type, const std::string &authName, const std::string &code, const std::exception &ex) { return FactoryException(std::string("cannot build ") + type + " " + authName + ":" + code + ": " + ex.what()); } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns a metadata::Extent from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ metadata::ExtentNNPtr AuthorityFactory::createExtent(const std::string &code) const { const auto cacheKey(d->authority() + code); { auto extent = d->context()->d->getExtentFromCache(cacheKey); if (extent) { return NN_NO_CHECK(extent); } } auto sql = "SELECT description, south_lat, north_lat, west_lon, east_lon, " "deprecated FROM extent WHERE auth_name = ? AND code = ?"; auto res = d->runWithCodeParam(sql, code); if (res.empty()) { throw NoSuchAuthorityCodeException("extent not found", d->authority(), code); } try { const auto &row = res.front(); const auto &description = row[0]; if (row[1].empty()) { auto extent = metadata::Extent::create( util::optional(description), {}, {}, {}); d->context()->d->cache(cacheKey, extent); return extent; } double south_lat = c_locale_stod(row[1]); double north_lat = c_locale_stod(row[2]); double west_lon = c_locale_stod(row[3]); double east_lon = c_locale_stod(row[4]); auto bbox = metadata::GeographicBoundingBox::create( west_lon, south_lat, east_lon, north_lat); auto extent = metadata::Extent::create( util::optional(description), std::vector{bbox}, std::vector(), std::vector()); d->context()->d->cache(cacheKey, extent); return extent; } catch (const std::exception &ex) { throw buildFactoryException("extent", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a common::UnitOfMeasure from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ UnitOfMeasureNNPtr AuthorityFactory::createUnitOfMeasure(const std::string &code) const { const auto cacheKey(d->authority() + code); { auto uom = d->context()->d->getUOMFromCache(cacheKey); if (uom) { return NN_NO_CHECK(uom); } } auto res = d->context()->d->run( "SELECT name, conv_factor, type, deprecated FROM unit_of_measure WHERE " "auth_name = ? AND code = ?", {d->authority(), code}, true); if (res.empty()) { throw NoSuchAuthorityCodeException("unit of measure not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = (row[0] == "degree (supplier to define representation)") ? UnitOfMeasure::DEGREE.name() : row[0]; double conv_factor = (code == "9107" || code == "9108") ? UnitOfMeasure::DEGREE.conversionToSI() : c_locale_stod(row[1]); constexpr double EPS = 1e-10; if (std::fabs(conv_factor - UnitOfMeasure::DEGREE.conversionToSI()) < EPS * UnitOfMeasure::DEGREE.conversionToSI()) { conv_factor = UnitOfMeasure::DEGREE.conversionToSI(); } if (std::fabs(conv_factor - UnitOfMeasure::ARC_SECOND.conversionToSI()) < EPS * UnitOfMeasure::ARC_SECOND.conversionToSI()) { conv_factor = UnitOfMeasure::ARC_SECOND.conversionToSI(); } const auto &type_str = row[2]; UnitOfMeasure::Type unitType = UnitOfMeasure::Type::UNKNOWN; if (type_str == "length") unitType = UnitOfMeasure::Type::LINEAR; else if (type_str == "angle") unitType = UnitOfMeasure::Type::ANGULAR; else if (type_str == "scale") unitType = UnitOfMeasure::Type::SCALE; else if (type_str == "time") unitType = UnitOfMeasure::Type::TIME; auto uom = util::nn_make_shared( name, conv_factor, unitType, d->authority(), code); d->context()->d->cache(cacheKey, uom); return uom; } catch (const std::exception &ex) { throw buildFactoryException("unit of measure", d->authority(), code, ex); } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static double normalizeMeasure(const std::string &uom_code, const std::string &value, std::string &normalized_uom_code) { if (uom_code == "9110") // DDD.MMSSsss..... { double normalized_value = c_locale_stod(value); std::ostringstream buffer; buffer.imbue(std::locale::classic()); constexpr size_t precision = 12; buffer << std::fixed << std::setprecision(precision) << normalized_value; auto formatted = buffer.str(); size_t dotPos = formatted.find('.'); assert(dotPos + 1 + precision == formatted.size()); auto minutes = formatted.substr(dotPos + 1, 2); auto seconds = formatted.substr(dotPos + 3); assert(seconds.size() == precision - 2); normalized_value = (normalized_value < 0 ? -1.0 : 1.0) * (std::floor(std::fabs(normalized_value)) + c_locale_stod(minutes) / 60. + (c_locale_stod(seconds) / std::pow(10, seconds.size() - 2)) / 3600.); normalized_uom_code = common::UnitOfMeasure::DEGREE.code(); /* coverity[overflow_sink] */ return normalized_value; } else { normalized_uom_code = uom_code; return c_locale_stod(value); } } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns a datum::PrimeMeridian from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ datum::PrimeMeridianNNPtr AuthorityFactory::createPrimeMeridian(const std::string &code) const { const auto cacheKey(d->authority() + code); { auto pm = d->context()->d->getPrimeMeridianFromCache(cacheKey); if (pm) { return NN_NO_CHECK(pm); } } auto res = d->runWithCodeParam( "SELECT name, longitude, uom_auth_name, uom_code, deprecated FROM " "prime_meridian WHERE " "auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("prime meridian not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &longitude = row[1]; const auto &uom_auth_name = row[2]; const auto &uom_code = row[3]; const bool deprecated = row[4] == "1"; std::string normalized_uom_code(uom_code); const double normalized_value = normalizeMeasure(uom_code, longitude, normalized_uom_code); auto uom = d->createUnitOfMeasure(uom_auth_name, normalized_uom_code); auto props = d->createProperties(code, name, deprecated, {}); auto pm = datum::PrimeMeridian::create( props, common::Angle(normalized_value, uom)); d->context()->d->cache(cacheKey, pm); return pm; } catch (const std::exception &ex) { throw buildFactoryException("prime meridian", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Identify a celestial body from an approximate radius. * * @param semi_major_axis Approximate semi-major axis. * @param tolerance Relative error allowed. * @return celestial body name if one single match found. * @throw FactoryException in case of error. */ std::string AuthorityFactory::identifyBodyFromSemiMajorAxis(double semi_major_axis, double tolerance) const { auto res = d->run("SELECT DISTINCT name, " "(ABS(semi_major_axis - ?) / semi_major_axis ) AS rel_error " "FROM celestial_body WHERE rel_error <= ? " "ORDER BY rel_error, name", {semi_major_axis, tolerance}); if (res.empty()) { throw FactoryException("no match found"); } constexpr int IDX_NAME = 0; if (res.size() > 1) { constexpr int IDX_REL_ERROR = 1; // If the first object has a relative error of 0 and the next one // a non-zero error, then use the first one. if (res.front()[IDX_REL_ERROR] == "0" && (*std::next(res.begin()))[IDX_REL_ERROR] != "0") { return res.front()[IDX_NAME]; } for (const auto &row : res) { if (row[IDX_NAME] != res.front()[IDX_NAME]) { throw FactoryException("more than one match found"); } } } return res.front()[IDX_NAME]; } // --------------------------------------------------------------------------- /** \brief Returns a datum::Ellipsoid from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ datum::EllipsoidNNPtr AuthorityFactory::createEllipsoid(const std::string &code) const { const auto cacheKey(d->authority() + code); { auto ellps = d->context()->d->getEllipsoidFromCache(cacheKey); if (ellps) { return NN_NO_CHECK(ellps); } } auto res = d->runWithCodeParam( "SELECT ellipsoid.name, ellipsoid.semi_major_axis, " "ellipsoid.uom_auth_name, ellipsoid.uom_code, " "ellipsoid.inv_flattening, ellipsoid.semi_minor_axis, " "celestial_body.name AS body_name, ellipsoid.deprecated FROM " "ellipsoid JOIN celestial_body " "ON ellipsoid.celestial_body_auth_name = celestial_body.auth_name AND " "ellipsoid.celestial_body_code = celestial_body.code WHERE " "ellipsoid.auth_name = ? AND ellipsoid.code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("ellipsoid not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &semi_major_axis_str = row[1]; double semi_major_axis = c_locale_stod(semi_major_axis_str); const auto &uom_auth_name = row[2]; const auto &uom_code = row[3]; const auto &inv_flattening_str = row[4]; const auto &semi_minor_axis_str = row[5]; const auto &body = row[6]; const bool deprecated = row[7] == "1"; auto uom = d->createUnitOfMeasure(uom_auth_name, uom_code); auto props = d->createProperties(code, name, deprecated, {}); if (!inv_flattening_str.empty()) { auto ellps = datum::Ellipsoid::createFlattenedSphere( props, common::Length(semi_major_axis, uom), common::Scale(c_locale_stod(inv_flattening_str)), body); d->context()->d->cache(cacheKey, ellps); return ellps; } else if (semi_major_axis_str == semi_minor_axis_str) { auto ellps = datum::Ellipsoid::createSphere( props, common::Length(semi_major_axis, uom), body); d->context()->d->cache(cacheKey, ellps); return ellps; } else { auto ellps = datum::Ellipsoid::createTwoAxis( props, common::Length(semi_major_axis, uom), common::Length(c_locale_stod(semi_minor_axis_str), uom), body); d->context()->d->cache(cacheKey, ellps); return ellps; } } catch (const std::exception &ex) { throw buildFactoryException("ellipsoid", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a datum::GeodeticReferenceFrame from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ datum::GeodeticReferenceFrameNNPtr AuthorityFactory::createGeodeticDatum(const std::string &code) const { datum::GeodeticReferenceFramePtr datum; datum::DatumEnsemblePtr datumEnsemble; constexpr bool turnEnsembleAsDatum = true; createGeodeticDatumOrEnsemble(code, datum, datumEnsemble, turnEnsembleAsDatum); return NN_NO_CHECK(datum); } // --------------------------------------------------------------------------- void AuthorityFactory::createGeodeticDatumOrEnsemble( const std::string &code, datum::GeodeticReferenceFramePtr &outDatum, datum::DatumEnsemblePtr &outDatumEnsemble, bool turnEnsembleAsDatum) const { const auto cacheKey(d->authority() + code); { outDatumEnsemble = d->context()->d->getDatumEnsembleFromCache(cacheKey); if (outDatumEnsemble) { if (!turnEnsembleAsDatum) return; outDatumEnsemble = nullptr; } outDatum = d->context()->d->getGeodeticDatumFromCache(cacheKey); if (outDatum) { return; } } auto res = d->runWithCodeParam( "SELECT name, ellipsoid_auth_name, ellipsoid_code, " "prime_meridian_auth_name, prime_meridian_code, " "publication_date, frame_reference_epoch, " "ensemble_accuracy, anchor, anchor_epoch, deprecated " "FROM geodetic_datum " "WHERE " "auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("geodetic datum not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &ellipsoid_auth_name = row[1]; const auto &ellipsoid_code = row[2]; const auto &prime_meridian_auth_name = row[3]; const auto &prime_meridian_code = row[4]; const auto &publication_date = row[5]; const auto &frame_reference_epoch = row[6]; const auto &ensemble_accuracy = row[7]; const auto &anchor = row[8]; const auto &anchor_epoch = row[9]; const bool deprecated = row[10] == "1"; std::string massagedName = name; if (turnEnsembleAsDatum) { if (name == "World Geodetic System 1984 ensemble") { massagedName = "World Geodetic System 1984"; } else if (name == "European Terrestrial Reference System 1989 ensemble") { massagedName = "European Terrestrial Reference System 1989"; } } auto props = d->createPropertiesSearchUsages("geodetic_datum", code, massagedName, deprecated); if (!turnEnsembleAsDatum && !ensemble_accuracy.empty()) { auto resMembers = d->run("SELECT member_auth_name, member_code FROM " "geodetic_datum_ensemble_member WHERE " "ensemble_auth_name = ? AND ensemble_code = ? " "ORDER BY sequence", {d->authority(), code}); std::vector members; for (const auto &memberRow : resMembers) { members.push_back( d->createFactory(memberRow[0])->createDatum(memberRow[1])); } auto datumEnsemble = datum::DatumEnsemble::create( props, std::move(members), metadata::PositionalAccuracy::create(ensemble_accuracy)); d->context()->d->cache(cacheKey, datumEnsemble); outDatumEnsemble = datumEnsemble.as_nullable(); } else { auto ellipsoid = d->createFactory(ellipsoid_auth_name) ->createEllipsoid(ellipsoid_code); auto pm = d->createFactory(prime_meridian_auth_name) ->createPrimeMeridian(prime_meridian_code); auto anchorOpt = util::optional(); if (!anchor.empty()) anchorOpt = anchor; if (!publication_date.empty()) { props.set("PUBLICATION_DATE", publication_date); } if (!anchor_epoch.empty()) { props.set("ANCHOR_EPOCH", anchor_epoch); } auto datum = frame_reference_epoch.empty() ? datum::GeodeticReferenceFrame::create( props, ellipsoid, anchorOpt, pm) : util::nn_static_pointer_cast< datum::GeodeticReferenceFrame>( datum::DynamicGeodeticReferenceFrame::create( props, ellipsoid, anchorOpt, pm, common::Measure( c_locale_stod(frame_reference_epoch), common::UnitOfMeasure::YEAR), util::optional())); d->context()->d->cache(cacheKey, datum); outDatum = datum.as_nullable(); } } catch (const std::exception &ex) { throw buildFactoryException("geodetic reference frame", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a datum::VerticalReferenceFrame from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ datum::VerticalReferenceFrameNNPtr AuthorityFactory::createVerticalDatum(const std::string &code) const { datum::VerticalReferenceFramePtr datum; datum::DatumEnsemblePtr datumEnsemble; constexpr bool turnEnsembleAsDatum = true; createVerticalDatumOrEnsemble(code, datum, datumEnsemble, turnEnsembleAsDatum); return NN_NO_CHECK(datum); } // --------------------------------------------------------------------------- void AuthorityFactory::createVerticalDatumOrEnsemble( const std::string &code, datum::VerticalReferenceFramePtr &outDatum, datum::DatumEnsemblePtr &outDatumEnsemble, bool turnEnsembleAsDatum) const { auto res = d->runWithCodeParam("SELECT name, publication_date, " "frame_reference_epoch, ensemble_accuracy, anchor, " "anchor_epoch, deprecated FROM " "vertical_datum WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("vertical datum not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &publication_date = row[1]; const auto &frame_reference_epoch = row[2]; const auto &ensemble_accuracy = row[3]; const auto &anchor = row[4]; const auto &anchor_epoch = row[5]; const bool deprecated = row[6] == "1"; auto props = d->createPropertiesSearchUsages("vertical_datum", code, name, deprecated); if (!turnEnsembleAsDatum && !ensemble_accuracy.empty()) { auto resMembers = d->run("SELECT member_auth_name, member_code FROM " "vertical_datum_ensemble_member WHERE " "ensemble_auth_name = ? AND ensemble_code = ? " "ORDER BY sequence", {d->authority(), code}); std::vector members; for (const auto &memberRow : resMembers) { members.push_back( d->createFactory(memberRow[0])->createDatum(memberRow[1])); } auto datumEnsemble = datum::DatumEnsemble::create( props, std::move(members), metadata::PositionalAccuracy::create(ensemble_accuracy)); outDatumEnsemble = datumEnsemble.as_nullable(); } else { if (!publication_date.empty()) { props.set("PUBLICATION_DATE", publication_date); } if (!anchor_epoch.empty()) { props.set("ANCHOR_EPOCH", anchor_epoch); } if (d->authority() == "ESRI" && starts_with(code, "from_geogdatum_")) { props.set("VERT_DATUM_TYPE", "2002"); } auto anchorOpt = util::optional(); if (!anchor.empty()) anchorOpt = anchor; if (frame_reference_epoch.empty()) { outDatum = datum::VerticalReferenceFrame::create(props, anchorOpt) .as_nullable(); } else { outDatum = datum::DynamicVerticalReferenceFrame::create( props, anchorOpt, util::optional(), common::Measure(c_locale_stod(frame_reference_epoch), common::UnitOfMeasure::YEAR), util::optional()) .as_nullable(); } } } catch (const std::exception &ex) { throw buildFactoryException("vertical reference frame", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a datum::EngineeringDatum from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. * @since 9.6 */ datum::EngineeringDatumNNPtr AuthorityFactory::createEngineeringDatum(const std::string &code) const { auto res = d->runWithCodeParam( "SELECT name, publication_date, " "anchor, anchor_epoch, deprecated FROM " "engineering_datum WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("engineering datum not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &publication_date = row[1]; const auto &anchor = row[2]; const auto &anchor_epoch = row[3]; const bool deprecated = row[4] == "1"; auto props = d->createPropertiesSearchUsages("engineering_datum", code, name, deprecated); if (!publication_date.empty()) { props.set("PUBLICATION_DATE", publication_date); } if (!anchor_epoch.empty()) { props.set("ANCHOR_EPOCH", anchor_epoch); } auto anchorOpt = util::optional(); if (!anchor.empty()) anchorOpt = anchor; return datum::EngineeringDatum::create(props, anchorOpt); } catch (const std::exception &ex) { throw buildFactoryException("engineering datum", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a datum::DatumEnsemble from the specified code. * * @param code Object code allocated by authority. * @param type "geodetic_datum", "vertical_datum" or empty string if unknown * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ datum::DatumEnsembleNNPtr AuthorityFactory::createDatumEnsemble(const std::string &code, const std::string &type) const { auto res = d->run( "SELECT 'geodetic_datum', name, ensemble_accuracy, deprecated FROM " "geodetic_datum WHERE " "auth_name = ? AND code = ? AND ensemble_accuracy IS NOT NULL " "UNION ALL " "SELECT 'vertical_datum', name, ensemble_accuracy, deprecated FROM " "vertical_datum WHERE " "auth_name = ? AND code = ? AND ensemble_accuracy IS NOT NULL", {d->authority(), code, d->authority(), code}); if (res.empty()) { throw NoSuchAuthorityCodeException("datum ensemble not found", d->authority(), code); } for (const auto &row : res) { const std::string &gotType = row[0]; const std::string &name = row[1]; const std::string &ensembleAccuracy = row[2]; const bool deprecated = row[3] == "1"; if (type.empty() || type == gotType) { auto resMembers = d->run("SELECT member_auth_name, member_code FROM " + gotType + "_ensemble_member WHERE " "ensemble_auth_name = ? AND ensemble_code = ? " "ORDER BY sequence", {d->authority(), code}); std::vector members; for (const auto &memberRow : resMembers) { members.push_back( d->createFactory(memberRow[0])->createDatum(memberRow[1])); } auto props = d->createPropertiesSearchUsages(gotType, code, name, deprecated); return datum::DatumEnsemble::create( props, std::move(members), metadata::PositionalAccuracy::create(ensembleAccuracy)); } } throw NoSuchAuthorityCodeException("datum ensemble not found", d->authority(), code); } // --------------------------------------------------------------------------- /** \brief Returns a datum::Datum from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ datum::DatumNNPtr AuthorityFactory::createDatum(const std::string &code) const { auto res = d->run( "SELECT 'geodetic_datum' FROM geodetic_datum WHERE " "auth_name = ? AND code = ? " "UNION ALL SELECT 'vertical_datum' FROM vertical_datum WHERE " "auth_name = ? AND code = ? " "UNION ALL SELECT 'engineering_datum' FROM engineering_datum " "WHERE " "auth_name = ? AND code = ?", {d->authority(), code, d->authority(), code, d->authority(), code}); if (res.empty()) { throw NoSuchAuthorityCodeException("datum not found", d->authority(), code); } const auto &type = res.front()[0]; if (type == "geodetic_datum") { return createGeodeticDatum(code); } if (type == "vertical_datum") { return createVerticalDatum(code); } return createEngineeringDatum(code); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static cs::MeridianPtr createMeridian(const std::string &val) { try { const std::string degW(std::string("\xC2\xB0") + "W"); if (ends_with(val, degW)) { return cs::Meridian::create(common::Angle( -c_locale_stod(val.substr(0, val.size() - degW.size())))); } const std::string degE(std::string("\xC2\xB0") + "E"); if (ends_with(val, degE)) { return cs::Meridian::create(common::Angle( c_locale_stod(val.substr(0, val.size() - degE.size())))); } } catch (const std::exception &) { } return nullptr; } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns a cs::CoordinateSystem from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ cs::CoordinateSystemNNPtr AuthorityFactory::createCoordinateSystem(const std::string &code) const { const auto cacheKey(d->authority() + code); { auto cs = d->context()->d->getCoordinateSystemFromCache(cacheKey); if (cs) { return NN_NO_CHECK(cs); } } auto res = d->runWithCodeParam( "SELECT axis.name, abbrev, orientation, uom_auth_name, uom_code, " "cs.type FROM " "axis LEFT JOIN coordinate_system cs ON " "axis.coordinate_system_auth_name = cs.auth_name AND " "axis.coordinate_system_code = cs.code WHERE " "coordinate_system_auth_name = ? AND coordinate_system_code = ? ORDER " "BY coordinate_system_order", code); if (res.empty()) { throw NoSuchAuthorityCodeException("coordinate system not found", d->authority(), code); } const auto &csType = res.front()[5]; std::vector axisList; for (const auto &row : res) { const auto &name = row[0]; const auto &abbrev = row[1]; const auto &orientation = row[2]; const auto &uom_auth_name = row[3]; const auto &uom_code = row[4]; if (uom_auth_name.empty() && csType != CS_TYPE_ORDINAL) { throw FactoryException("no unit of measure for an axis is only " "supported for ordinatal CS"); } auto uom = uom_auth_name.empty() ? common::UnitOfMeasure::NONE : d->createUnitOfMeasure(uom_auth_name, uom_code); auto props = util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, name); const cs::AxisDirection *direction = cs::AxisDirection::valueOf(orientation); cs::MeridianPtr meridian; if (direction == nullptr) { if (orientation == "Geocentre > equator/0" "\xC2\xB0" "E") { direction = &(cs::AxisDirection::GEOCENTRIC_X); } else if (orientation == "Geocentre > equator/90" "\xC2\xB0" "E") { direction = &(cs::AxisDirection::GEOCENTRIC_Y); } else if (orientation == "Geocentre > north pole") { direction = &(cs::AxisDirection::GEOCENTRIC_Z); } else if (starts_with(orientation, "North along ")) { direction = &(cs::AxisDirection::NORTH); meridian = createMeridian(orientation.substr(strlen("North along "))); } else if (starts_with(orientation, "South along ")) { direction = &(cs::AxisDirection::SOUTH); meridian = createMeridian(orientation.substr(strlen("South along "))); } else { throw FactoryException("unknown axis direction: " + orientation); } } axisList.emplace_back(cs::CoordinateSystemAxis::create( props, abbrev, *direction, uom, meridian)); } const auto cacheAndRet = [this, &cacheKey](const cs::CoordinateSystemNNPtr &cs) { d->context()->d->cache(cacheKey, cs); return cs; }; auto props = util::PropertyMap() .set(metadata::Identifier::CODESPACE_KEY, d->authority()) .set(metadata::Identifier::CODE_KEY, code); if (csType == CS_TYPE_ELLIPSOIDAL) { if (axisList.size() == 2) { return cacheAndRet( cs::EllipsoidalCS::create(props, axisList[0], axisList[1])); } if (axisList.size() == 3) { return cacheAndRet(cs::EllipsoidalCS::create( props, axisList[0], axisList[1], axisList[2])); } throw FactoryException("invalid number of axis for EllipsoidalCS"); } if (csType == CS_TYPE_CARTESIAN) { if (axisList.size() == 2) { return cacheAndRet( cs::CartesianCS::create(props, axisList[0], axisList[1])); } if (axisList.size() == 3) { return cacheAndRet(cs::CartesianCS::create( props, axisList[0], axisList[1], axisList[2])); } throw FactoryException("invalid number of axis for CartesianCS"); } if (csType == CS_TYPE_SPHERICAL) { if (axisList.size() == 2) { return cacheAndRet( cs::SphericalCS::create(props, axisList[0], axisList[1])); } if (axisList.size() == 3) { return cacheAndRet(cs::SphericalCS::create( props, axisList[0], axisList[1], axisList[2])); } throw FactoryException("invalid number of axis for SphericalCS"); } if (csType == CS_TYPE_VERTICAL) { if (axisList.size() == 1) { return cacheAndRet(cs::VerticalCS::create(props, axisList[0])); } throw FactoryException("invalid number of axis for VerticalCS"); } if (csType == CS_TYPE_ORDINAL) { return cacheAndRet(cs::OrdinalCS::create(props, axisList)); } throw FactoryException("unhandled coordinate system type: " + csType); } // --------------------------------------------------------------------------- /** \brief Returns a crs::GeodeticCRS from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ crs::GeodeticCRSNNPtr AuthorityFactory::createGeodeticCRS(const std::string &code) const { return createGeodeticCRS(code, false); } // --------------------------------------------------------------------------- /** \brief Returns a crs::GeographicCRS from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ crs::GeographicCRSNNPtr AuthorityFactory::createGeographicCRS(const std::string &code) const { auto crs(util::nn_dynamic_pointer_cast( createGeodeticCRS(code, true))); if (!crs) { throw NoSuchAuthorityCodeException("geographicCRS not found", d->authority(), code); } return NN_NO_CHECK(crs); } // --------------------------------------------------------------------------- static crs::GeodeticCRSNNPtr cloneWithProps(const crs::GeodeticCRSNNPtr &geodCRS, const util::PropertyMap &props) { auto cs = geodCRS->coordinateSystem(); auto ellipsoidalCS = util::nn_dynamic_pointer_cast(cs); if (ellipsoidalCS) { return crs::GeographicCRS::create(props, geodCRS->datum(), geodCRS->datumEnsemble(), NN_NO_CHECK(ellipsoidalCS)); } auto geocentricCS = util::nn_dynamic_pointer_cast(cs); if (geocentricCS) { return crs::GeodeticCRS::create(props, geodCRS->datum(), geodCRS->datumEnsemble(), NN_NO_CHECK(geocentricCS)); } return geodCRS; } // --------------------------------------------------------------------------- crs::GeodeticCRSNNPtr AuthorityFactory::createGeodeticCRS(const std::string &code, bool geographicOnly) const { const auto cacheKey(d->authority() + code); auto crs = d->context()->d->getCRSFromCache(cacheKey); if (crs) { auto geogCRS = std::dynamic_pointer_cast(crs); if (geogCRS) { return NN_NO_CHECK(geogCRS); } throw NoSuchAuthorityCodeException("geodeticCRS not found", d->authority(), code); } std::string sql("SELECT name, type, coordinate_system_auth_name, " "coordinate_system_code, datum_auth_name, datum_code, " "text_definition, deprecated, description FROM " "geodetic_crs WHERE auth_name = ? AND code = ?"); if (geographicOnly) { sql += " AND type in (" GEOG_2D_SINGLE_QUOTED "," GEOG_3D_SINGLE_QUOTED ")"; } auto res = d->runWithCodeParam(sql, code); if (res.empty()) { throw NoSuchAuthorityCodeException("geodeticCRS not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &type = row[1]; const auto &cs_auth_name = row[2]; const auto &cs_code = row[3]; const auto &datum_auth_name = row[4]; const auto &datum_code = row[5]; const auto &text_definition = row[6]; const bool deprecated = row[7] == "1"; const auto &remarks = row[8]; auto props = d->createPropertiesSearchUsages("geodetic_crs", code, name, deprecated, remarks); if (!text_definition.empty()) { DatabaseContext::Private::RecursionDetector detector(d->context()); auto obj = createFromUserInput( pj_add_type_crs_if_needed(text_definition), d->context()); auto geodCRS = util::nn_dynamic_pointer_cast(obj); if (geodCRS) { auto crsRet = cloneWithProps(NN_NO_CHECK(geodCRS), props); d->context()->d->cache(cacheKey, crsRet); return crsRet; } auto boundCRS = dynamic_cast(obj.get()); if (boundCRS) { geodCRS = util::nn_dynamic_pointer_cast( boundCRS->baseCRS()); if (geodCRS) { auto newBoundCRS = crs::BoundCRS::create( cloneWithProps(NN_NO_CHECK(geodCRS), props), boundCRS->hubCRS(), boundCRS->transformation()); return NN_NO_CHECK( util::nn_dynamic_pointer_cast( newBoundCRS->baseCRSWithCanonicalBoundCRS())); } } throw FactoryException( "text_definition does not define a GeodeticCRS"); } auto cs = d->createFactory(cs_auth_name)->createCoordinateSystem(cs_code); datum::GeodeticReferenceFramePtr datum; datum::DatumEnsemblePtr datumEnsemble; constexpr bool turnEnsembleAsDatum = false; d->createFactory(datum_auth_name) ->createGeodeticDatumOrEnsemble(datum_code, datum, datumEnsemble, turnEnsembleAsDatum); auto ellipsoidalCS = util::nn_dynamic_pointer_cast(cs); if ((type == GEOG_2D || type == GEOG_3D) && ellipsoidalCS) { auto crsRet = crs::GeographicCRS::create( props, datum, datumEnsemble, NN_NO_CHECK(ellipsoidalCS)); d->context()->d->cache(cacheKey, crsRet); return crsRet; } auto geocentricCS = util::nn_dynamic_pointer_cast(cs); if (type == GEOCENTRIC && geocentricCS) { auto crsRet = crs::GeodeticCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(geocentricCS)); d->context()->d->cache(cacheKey, crsRet); return crsRet; } auto sphericalCS = util::nn_dynamic_pointer_cast(cs); if (type == OTHER && sphericalCS) { auto crsRet = crs::GeodeticCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(sphericalCS)); d->context()->d->cache(cacheKey, crsRet); return crsRet; } throw FactoryException("unsupported (type, CS type) for geodeticCRS: " + type + ", " + cs->getWKT2Type(true)); } catch (const std::exception &ex) { throw buildFactoryException("geodeticCRS", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a crs::VerticalCRS from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ crs::VerticalCRSNNPtr AuthorityFactory::createVerticalCRS(const std::string &code) const { const auto cacheKey(d->authority() + code); auto crs = d->context()->d->getCRSFromCache(cacheKey); if (crs) { auto projCRS = std::dynamic_pointer_cast(crs); if (projCRS) { return NN_NO_CHECK(projCRS); } throw NoSuchAuthorityCodeException("verticalCRS not found", d->authority(), code); } auto res = d->runWithCodeParam( "SELECT name, coordinate_system_auth_name, " "coordinate_system_code, datum_auth_name, datum_code, " "deprecated FROM " "vertical_crs WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("verticalCRS not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &cs_auth_name = row[1]; const auto &cs_code = row[2]; const auto &datum_auth_name = row[3]; const auto &datum_code = row[4]; const bool deprecated = row[5] == "1"; auto cs = d->createFactory(cs_auth_name)->createCoordinateSystem(cs_code); datum::VerticalReferenceFramePtr datum; datum::DatumEnsemblePtr datumEnsemble; constexpr bool turnEnsembleAsDatum = false; d->createFactory(datum_auth_name) ->createVerticalDatumOrEnsemble(datum_code, datum, datumEnsemble, turnEnsembleAsDatum); auto props = d->createPropertiesSearchUsages("vertical_crs", code, name, deprecated); auto verticalCS = util::nn_dynamic_pointer_cast(cs); if (verticalCS) { auto crsRet = crs::VerticalCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(verticalCS)); d->context()->d->cache(cacheKey, crsRet); return crsRet; } throw FactoryException("unsupported CS type for verticalCRS: " + cs->getWKT2Type(true)); } catch (const std::exception &ex) { throw buildFactoryException("verticalCRS", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a crs::EngineeringCRS from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. * @since 9.6 */ crs::EngineeringCRSNNPtr AuthorityFactory::createEngineeringCRS(const std::string &code) const { const auto cacheKey(d->authority() + code); auto crs = d->context()->d->getCRSFromCache(cacheKey); if (crs) { auto engCRS = std::dynamic_pointer_cast(crs); if (engCRS) { return NN_NO_CHECK(engCRS); } throw NoSuchAuthorityCodeException("engineeringCRS not found", d->authority(), code); } auto res = d->runWithCodeParam( "SELECT name, coordinate_system_auth_name, " "coordinate_system_code, datum_auth_name, datum_code, " "deprecated FROM " "engineering_crs WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("engineeringCRS not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &cs_auth_name = row[1]; const auto &cs_code = row[2]; const auto &datum_auth_name = row[3]; const auto &datum_code = row[4]; const bool deprecated = row[5] == "1"; auto cs = d->createFactory(cs_auth_name)->createCoordinateSystem(cs_code); auto datum = d->createFactory(datum_auth_name) ->createEngineeringDatum(datum_code); auto props = d->createPropertiesSearchUsages("engineering_crs", code, name, deprecated); auto crsRet = crs::EngineeringCRS::create(props, datum, cs); d->context()->d->cache(cacheKey, crsRet); return crsRet; } catch (const std::exception &ex) { throw buildFactoryException("engineeringCRS", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a operation::Conversion from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ operation::ConversionNNPtr AuthorityFactory::createConversion(const std::string &code) const { static const char *sql = "SELECT name, description, " "method_auth_name, method_code, method_name, " "param1_auth_name, param1_code, param1_name, param1_value, " "param1_uom_auth_name, param1_uom_code, " "param2_auth_name, param2_code, param2_name, param2_value, " "param2_uom_auth_name, param2_uom_code, " "param3_auth_name, param3_code, param3_name, param3_value, " "param3_uom_auth_name, param3_uom_code, " "param4_auth_name, param4_code, param4_name, param4_value, " "param4_uom_auth_name, param4_uom_code, " "param5_auth_name, param5_code, param5_name, param5_value, " "param5_uom_auth_name, param5_uom_code, " "param6_auth_name, param6_code, param6_name, param6_value, " "param6_uom_auth_name, param6_uom_code, " "param7_auth_name, param7_code, param7_name, param7_value, " "param7_uom_auth_name, param7_uom_code, " "deprecated FROM conversion WHERE auth_name = ? AND code = ?"; auto res = d->runWithCodeParam(sql, code); if (res.empty()) { try { // Conversions using methods Change of Vertical Unit or // Height Depth Reversal are stored in other_transformation auto op = createCoordinateOperation( code, false /* allowConcatenated */, false /* usePROJAlternativeGridNames */, "other_transformation"); auto conv = util::nn_dynamic_pointer_cast(op); if (conv) { return NN_NO_CHECK(conv); } } catch (const std::exception &) { } throw NoSuchAuthorityCodeException("conversion not found", d->authority(), code); } try { const auto &row = res.front(); size_t idx = 0; const auto &name = row[idx++]; const auto &description = row[idx++]; const auto &method_auth_name = row[idx++]; const auto &method_code = row[idx++]; const auto &method_name = row[idx++]; const size_t base_param_idx = idx; std::vector parameters; std::vector values; for (size_t i = 0; i < N_MAX_PARAMS; ++i) { const auto ¶m_auth_name = row[base_param_idx + i * 6 + 0]; if (param_auth_name.empty()) { break; } const auto ¶m_code = row[base_param_idx + i * 6 + 1]; const auto ¶m_name = row[base_param_idx + i * 6 + 2]; const auto ¶m_value = row[base_param_idx + i * 6 + 3]; const auto ¶m_uom_auth_name = row[base_param_idx + i * 6 + 4]; const auto ¶m_uom_code = row[base_param_idx + i * 6 + 5]; parameters.emplace_back(operation::OperationParameter::create( util::PropertyMap() .set(metadata::Identifier::CODESPACE_KEY, param_auth_name) .set(metadata::Identifier::CODE_KEY, param_code) .set(common::IdentifiedObject::NAME_KEY, param_name))); std::string normalized_uom_code(param_uom_code); const double normalized_value = normalizeMeasure( param_uom_code, param_value, normalized_uom_code); auto uom = d->createUnitOfMeasure(param_uom_auth_name, normalized_uom_code); values.emplace_back(operation::ParameterValue::create( common::Measure(normalized_value, uom))); } const bool deprecated = row[base_param_idx + N_MAX_PARAMS * 6] == "1"; auto propConversion = d->createPropertiesSearchUsages( "conversion", code, name, deprecated); if (!description.empty()) propConversion.set(common::IdentifiedObject::REMARKS_KEY, description); auto propMethod = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, method_name); if (!method_auth_name.empty()) { propMethod .set(metadata::Identifier::CODESPACE_KEY, method_auth_name) .set(metadata::Identifier::CODE_KEY, method_code); } return operation::Conversion::create(propConversion, propMethod, parameters, values); } catch (const std::exception &ex) { throw buildFactoryException("conversion", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a crs::ProjectedCRS from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ crs::ProjectedCRSNNPtr AuthorityFactory::createProjectedCRS(const std::string &code) const { const auto cacheKey(d->authority() + code); auto crs = d->context()->d->getCRSFromCache(cacheKey); if (crs) { auto projCRS = std::dynamic_pointer_cast(crs); if (projCRS) { return NN_NO_CHECK(projCRS); } throw NoSuchAuthorityCodeException("projectedCRS not found", d->authority(), code); } return d->createProjectedCRSEnd(code, d->createProjectedCRSBegin(code)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** Returns the result of the SQL query needed by createProjectedCRSEnd * * The split in two functions is for createFromCoordinateReferenceSystemCodes() * convenience, to avoid throwing exceptions. */ SQLResultSet AuthorityFactory::Private::createProjectedCRSBegin(const std::string &code) { return runWithCodeParam( "SELECT name, coordinate_system_auth_name, " "coordinate_system_code, geodetic_crs_auth_name, geodetic_crs_code, " "conversion_auth_name, conversion_code, " "text_definition, " "deprecated FROM projected_crs WHERE auth_name = ? AND code = ?", code); } // --------------------------------------------------------------------------- /** Build a ProjectedCRS from the result of createProjectedCRSBegin() */ crs::ProjectedCRSNNPtr AuthorityFactory::Private::createProjectedCRSEnd(const std::string &code, const SQLResultSet &res) { const auto cacheKey(authority() + code); if (res.empty()) { throw NoSuchAuthorityCodeException("projectedCRS not found", authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &cs_auth_name = row[1]; const auto &cs_code = row[2]; const auto &geodetic_crs_auth_name = row[3]; const auto &geodetic_crs_code = row[4]; const auto &conversion_auth_name = row[5]; const auto &conversion_code = row[6]; const auto &text_definition = row[7]; const bool deprecated = row[8] == "1"; auto props = createPropertiesSearchUsages("projected_crs", code, name, deprecated); if (!text_definition.empty()) { DatabaseContext::Private::RecursionDetector detector(context()); auto obj = createFromUserInput( pj_add_type_crs_if_needed(text_definition), context()); auto projCRS = dynamic_cast(obj.get()); if (projCRS) { auto conv = projCRS->derivingConversion(); auto newConv = (conv->nameStr() == "unnamed") ? operation::Conversion::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, name), conv->method(), conv->parameterValues()) : std::move(conv); auto crsRet = crs::ProjectedCRS::create( props, projCRS->baseCRS(), newConv, projCRS->coordinateSystem()); context()->d->cache(cacheKey, crsRet); return crsRet; } auto boundCRS = dynamic_cast(obj.get()); if (boundCRS) { projCRS = dynamic_cast( boundCRS->baseCRS().get()); if (projCRS) { auto newBoundCRS = crs::BoundCRS::create( crs::ProjectedCRS::create(props, projCRS->baseCRS(), projCRS->derivingConversion(), projCRS->coordinateSystem()), boundCRS->hubCRS(), boundCRS->transformation()); return NN_NO_CHECK( util::nn_dynamic_pointer_cast( newBoundCRS->baseCRSWithCanonicalBoundCRS())); } } throw FactoryException( "text_definition does not define a ProjectedCRS"); } auto cs = createFactory(cs_auth_name)->createCoordinateSystem(cs_code); auto baseCRS = createFactory(geodetic_crs_auth_name) ->createGeodeticCRS(geodetic_crs_code); auto conv = createFactory(conversion_auth_name) ->createConversion(conversion_code); if (conv->nameStr() == "unnamed") { conv = conv->shallowClone(); conv->setProperties(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, name)); } auto cartesianCS = util::nn_dynamic_pointer_cast(cs); if (cartesianCS) { auto crsRet = crs::ProjectedCRS::create(props, baseCRS, conv, NN_NO_CHECK(cartesianCS)); context()->d->cache(cacheKey, crsRet); return crsRet; } throw FactoryException("unsupported CS type for projectedCRS: " + cs->getWKT2Type(true)); } catch (const std::exception &ex) { throw buildFactoryException("projectedCRS", authority(), code, ex); } } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns a crs::CompoundCRS from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ crs::CompoundCRSNNPtr AuthorityFactory::createCompoundCRS(const std::string &code) const { auto res = d->runWithCodeParam("SELECT name, horiz_crs_auth_name, horiz_crs_code, " "vertical_crs_auth_name, vertical_crs_code, " "deprecated FROM " "compound_crs WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("compoundCRS not found", d->authority(), code); } try { const auto &row = res.front(); const auto &name = row[0]; const auto &horiz_crs_auth_name = row[1]; const auto &horiz_crs_code = row[2]; const auto &vertical_crs_auth_name = row[3]; const auto &vertical_crs_code = row[4]; const bool deprecated = row[5] == "1"; auto horizCRS = d->createFactory(horiz_crs_auth_name) ->createCoordinateReferenceSystem(horiz_crs_code, false); auto vertCRS = d->createFactory(vertical_crs_auth_name) ->createVerticalCRS(vertical_crs_code); auto props = d->createPropertiesSearchUsages("compound_crs", code, name, deprecated); return crs::CompoundCRS::create( props, std::vector{std::move(horizCRS), std::move(vertCRS)}); } catch (const std::exception &ex) { throw buildFactoryException("compoundCRS", d->authority(), code, ex); } } // --------------------------------------------------------------------------- /** \brief Returns a crs::CRS from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ crs::CRSNNPtr AuthorityFactory::createCoordinateReferenceSystem( const std::string &code) const { return createCoordinateReferenceSystem(code, true); } //! @cond Doxygen_Suppress crs::CRSNNPtr AuthorityFactory::createCoordinateReferenceSystem(const std::string &code, bool allowCompound) const { const auto cacheKey(d->authority() + code); auto crs = d->context()->d->getCRSFromCache(cacheKey); if (crs) { return NN_NO_CHECK(crs); } if (d->authority() == metadata::Identifier::OGC) { if (code == "AnsiDate") { // Derived from http://www.opengis.net/def/crs/OGC/0/AnsiDate return crs::TemporalCRS::create( util::PropertyMap() // above URL indicates Julian Date" as name... likely wrong .set(common::IdentifiedObject::NAME_KEY, "Ansi Date") .set(metadata::Identifier::CODESPACE_KEY, d->authority()) .set(metadata::Identifier::CODE_KEY, code), datum::TemporalDatum::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "Epoch time for the ANSI date (1-Jan-1601, 00h00 UTC) " "as day 1."), common::DateTime::create("1600-12-31T00:00:00Z"), datum::TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN), cs::TemporalCountCS::create( util::PropertyMap(), cs::CoordinateSystemAxis::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "Time"), "T", cs::AxisDirection::FUTURE, common::UnitOfMeasure("day", 0, UnitOfMeasure::Type::TIME)))); } if (code == "JulianDate") { // Derived from http://www.opengis.net/def/crs/OGC/0/JulianDate return crs::TemporalCRS::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, "Julian Date") .set(metadata::Identifier::CODESPACE_KEY, d->authority()) .set(metadata::Identifier::CODE_KEY, code), datum::TemporalDatum::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "The beginning of the Julian period."), common::DateTime::create("-4714-11-24T12:00:00Z"), datum::TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN), cs::TemporalCountCS::create( util::PropertyMap(), cs::CoordinateSystemAxis::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "Time"), "T", cs::AxisDirection::FUTURE, common::UnitOfMeasure("day", 0, UnitOfMeasure::Type::TIME)))); } if (code == "UnixTime") { // Derived from http://www.opengis.net/def/crs/OGC/0/UnixTime return crs::TemporalCRS::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, "Unix Time") .set(metadata::Identifier::CODESPACE_KEY, d->authority()) .set(metadata::Identifier::CODE_KEY, code), datum::TemporalDatum::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, "Unix epoch"), common::DateTime::create("1970-01-01T00:00:00Z"), datum::TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN), cs::TemporalCountCS::create( util::PropertyMap(), cs::CoordinateSystemAxis::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "Time"), "T", cs::AxisDirection::FUTURE, common::UnitOfMeasure::SECOND))); } if (code == "84") { return createCoordinateReferenceSystem("CRS84", false); } } auto res = d->runWithCodeParam( "SELECT type FROM crs_view WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("crs not found", d->authority(), code); } const auto &type = res.front()[0]; if (type == GEOG_2D || type == GEOG_3D || type == GEOCENTRIC || type == OTHER) { return createGeodeticCRS(code); } if (type == VERTICAL) { return createVerticalCRS(code); } if (type == PROJECTED) { return createProjectedCRS(code); } if (type == ENGINEERING) { return createEngineeringCRS(code); } if (allowCompound && type == COMPOUND) { return createCompoundCRS(code); } throw FactoryException("unhandled CRS type: " + type); } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns a coordinates::CoordinateMetadata from the specified code. * * @param code Object code allocated by authority. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. * @since 9.4 */ coordinates::CoordinateMetadataNNPtr AuthorityFactory::createCoordinateMetadata(const std::string &code) const { auto res = d->runWithCodeParam( "SELECT crs_auth_name, crs_code, crs_text_definition, coordinate_epoch " "FROM coordinate_metadata WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("coordinate_metadata not found", d->authority(), code); } try { const auto &row = res.front(); const auto &crs_auth_name = row[0]; const auto &crs_code = row[1]; const auto &crs_text_definition = row[2]; const auto &coordinate_epoch = row[3]; auto l_context = d->context(); DatabaseContext::Private::RecursionDetector detector(l_context); auto crs = !crs_auth_name.empty() ? d->createFactory(crs_auth_name) ->createCoordinateReferenceSystem(crs_code) .as_nullable() : util::nn_dynamic_pointer_cast( createFromUserInput(crs_text_definition, l_context)); if (!crs) { throw FactoryException( std::string("cannot build CoordinateMetadata ") + d->authority() + ":" + code + ": cannot build CRS"); } if (coordinate_epoch.empty()) { return coordinates::CoordinateMetadata::create(NN_NO_CHECK(crs)); } else { return coordinates::CoordinateMetadata::create( NN_NO_CHECK(crs), c_locale_stod(coordinate_epoch), l_context.as_nullable()); } } catch (const std::exception &ex) { throw buildFactoryException("CoordinateMetadata", d->authority(), code, ex); } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static util::PropertyMap createMapNameEPSGCode(const std::string &name, int code) { return util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, code); } // --------------------------------------------------------------------------- static operation::OperationParameterNNPtr createOpParamNameEPSGCode(int code) { const char *name = operation::OperationParameter::getNameForEPSGCode(code); assert(name); return operation::OperationParameter::create( createMapNameEPSGCode(name, code)); } static operation::ParameterValueNNPtr createLength(const std::string &value, const UnitOfMeasure &uom) { return operation::ParameterValue::create( common::Length(c_locale_stod(value), uom)); } static operation::ParameterValueNNPtr createAngle(const std::string &value, const UnitOfMeasure &uom) { return operation::ParameterValue::create( common::Angle(c_locale_stod(value), uom)); } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns a operation::CoordinateOperation from the specified code. * * @param code Object code allocated by authority. * @param usePROJAlternativeGridNames Whether PROJ alternative grid names * should be substituted to the official grid names. * @return object. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ operation::CoordinateOperationNNPtr AuthorityFactory::createCoordinateOperation( const std::string &code, bool usePROJAlternativeGridNames) const { return createCoordinateOperation(code, true, usePROJAlternativeGridNames, std::string()); } operation::CoordinateOperationNNPtr AuthorityFactory::createCoordinateOperation( const std::string &code, bool allowConcatenated, bool usePROJAlternativeGridNames, const std::string &typeIn) const { std::string type(typeIn); if (type.empty()) { auto res = d->runWithCodeParam( "SELECT type FROM coordinate_operation_with_conversion_view " "WHERE auth_name = ? AND code = ?", code); if (res.empty()) { throw NoSuchAuthorityCodeException("coordinate operation not found", d->authority(), code); } type = res.front()[0]; } if (type == "conversion") { return createConversion(code); } if (type == "helmert_transformation") { auto res = d->runWithCodeParam( "SELECT name, description, " "method_auth_name, method_code, method_name, " "source_crs_auth_name, source_crs_code, target_crs_auth_name, " "target_crs_code, " "accuracy, tx, ty, tz, translation_uom_auth_name, " "translation_uom_code, rx, ry, rz, rotation_uom_auth_name, " "rotation_uom_code, scale_difference, " "scale_difference_uom_auth_name, scale_difference_uom_code, " "rate_tx, rate_ty, rate_tz, rate_translation_uom_auth_name, " "rate_translation_uom_code, rate_rx, rate_ry, rate_rz, " "rate_rotation_uom_auth_name, rate_rotation_uom_code, " "rate_scale_difference, rate_scale_difference_uom_auth_name, " "rate_scale_difference_uom_code, epoch, epoch_uom_auth_name, " "epoch_uom_code, px, py, pz, pivot_uom_auth_name, pivot_uom_code, " "operation_version, deprecated FROM " "helmert_transformation WHERE auth_name = ? AND code = ?", code); if (res.empty()) { // shouldn't happen if foreign keys are OK throw NoSuchAuthorityCodeException( "helmert_transformation not found", d->authority(), code); } try { const auto &row = res.front(); size_t idx = 0; const auto &name = row[idx++]; const auto &description = row[idx++]; const auto &method_auth_name = row[idx++]; const auto &method_code = row[idx++]; const auto &method_name = row[idx++]; const auto &source_crs_auth_name = row[idx++]; const auto &source_crs_code = row[idx++]; const auto &target_crs_auth_name = row[idx++]; const auto &target_crs_code = row[idx++]; const auto &accuracy = row[idx++]; const auto &tx = row[idx++]; const auto &ty = row[idx++]; const auto &tz = row[idx++]; const auto &translation_uom_auth_name = row[idx++]; const auto &translation_uom_code = row[idx++]; const auto &rx = row[idx++]; const auto &ry = row[idx++]; const auto &rz = row[idx++]; const auto &rotation_uom_auth_name = row[idx++]; const auto &rotation_uom_code = row[idx++]; const auto &scale_difference = row[idx++]; const auto &scale_difference_uom_auth_name = row[idx++]; const auto &scale_difference_uom_code = row[idx++]; const auto &rate_tx = row[idx++]; const auto &rate_ty = row[idx++]; const auto &rate_tz = row[idx++]; const auto &rate_translation_uom_auth_name = row[idx++]; const auto &rate_translation_uom_code = row[idx++]; const auto &rate_rx = row[idx++]; const auto &rate_ry = row[idx++]; const auto &rate_rz = row[idx++]; const auto &rate_rotation_uom_auth_name = row[idx++]; const auto &rate_rotation_uom_code = row[idx++]; const auto &rate_scale_difference = row[idx++]; const auto &rate_scale_difference_uom_auth_name = row[idx++]; const auto &rate_scale_difference_uom_code = row[idx++]; const auto &epoch = row[idx++]; const auto &epoch_uom_auth_name = row[idx++]; const auto &epoch_uom_code = row[idx++]; const auto &px = row[idx++]; const auto &py = row[idx++]; const auto &pz = row[idx++]; const auto &pivot_uom_auth_name = row[idx++]; const auto &pivot_uom_code = row[idx++]; const auto &operation_version = row[idx++]; const auto &deprecated_str = row[idx++]; const bool deprecated = deprecated_str == "1"; assert(idx == row.size()); auto uom_translation = d->createUnitOfMeasure( translation_uom_auth_name, translation_uom_code); auto uom_epoch = epoch_uom_auth_name.empty() ? common::UnitOfMeasure::NONE : d->createUnitOfMeasure(epoch_uom_auth_name, epoch_uom_code); auto sourceCRS = d->createFactory(source_crs_auth_name) ->createCoordinateReferenceSystem(source_crs_code); auto targetCRS = d->createFactory(target_crs_auth_name) ->createCoordinateReferenceSystem(target_crs_code); std::vector parameters; std::vector values; parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION)); values.emplace_back(createLength(tx, uom_translation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION)); values.emplace_back(createLength(ty, uom_translation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION)); values.emplace_back(createLength(tz, uom_translation)); if (!rx.empty()) { // Helmert 7-, 8-, 10- or 15- parameter cases auto uom_rotation = d->createUnitOfMeasure( rotation_uom_auth_name, rotation_uom_code); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_X_AXIS_ROTATION)); values.emplace_back(createAngle(rx, uom_rotation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_Y_AXIS_ROTATION)); values.emplace_back(createAngle(ry, uom_rotation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_Z_AXIS_ROTATION)); values.emplace_back(createAngle(rz, uom_rotation)); auto uom_scale_difference = scale_difference_uom_auth_name.empty() ? common::UnitOfMeasure::NONE : d->createUnitOfMeasure(scale_difference_uom_auth_name, scale_difference_uom_code); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_SCALE_DIFFERENCE)); values.emplace_back(operation::ParameterValue::create( common::Scale(c_locale_stod(scale_difference), uom_scale_difference))); } if (!rate_tx.empty()) { // Helmert 15-parameter auto uom_rate_translation = d->createUnitOfMeasure( rate_translation_uom_auth_name, rate_translation_uom_code); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_X_AXIS_TRANSLATION)); values.emplace_back( createLength(rate_tx, uom_rate_translation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_Y_AXIS_TRANSLATION)); values.emplace_back( createLength(rate_ty, uom_rate_translation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_Z_AXIS_TRANSLATION)); values.emplace_back( createLength(rate_tz, uom_rate_translation)); auto uom_rate_rotation = d->createUnitOfMeasure( rate_rotation_uom_auth_name, rate_rotation_uom_code); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_X_AXIS_ROTATION)); values.emplace_back(createAngle(rate_rx, uom_rate_rotation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_Y_AXIS_ROTATION)); values.emplace_back(createAngle(rate_ry, uom_rate_rotation)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_Z_AXIS_ROTATION)); values.emplace_back(createAngle(rate_rz, uom_rate_rotation)); auto uom_rate_scale_difference = d->createUnitOfMeasure(rate_scale_difference_uom_auth_name, rate_scale_difference_uom_code); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_SCALE_DIFFERENCE)); values.emplace_back(operation::ParameterValue::create( common::Scale(c_locale_stod(rate_scale_difference), uom_rate_scale_difference))); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_REFERENCE_EPOCH)); values.emplace_back(operation::ParameterValue::create( common::Measure(c_locale_stod(epoch), uom_epoch))); } else if (uom_epoch != common::UnitOfMeasure::NONE) { // Helmert 8-parameter parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_TRANSFORMATION_REFERENCE_EPOCH)); values.emplace_back(operation::ParameterValue::create( common::Measure(c_locale_stod(epoch), uom_epoch))); } else if (!px.empty()) { // Molodensky-Badekas case auto uom_pivot = d->createUnitOfMeasure(pivot_uom_auth_name, pivot_uom_code); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT)); values.emplace_back(createLength(px, uom_pivot)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT)); values.emplace_back(createLength(py, uom_pivot)); parameters.emplace_back(createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_ORDINATE_3_EVAL_POINT)); values.emplace_back(createLength(pz, uom_pivot)); } auto props = d->createPropertiesSearchUsages( type, code, name, deprecated, description); if (!operation_version.empty()) { props.set(operation::CoordinateOperation::OPERATION_VERSION_KEY, operation_version); } auto propsMethod = util::PropertyMap() .set(metadata::Identifier::CODESPACE_KEY, method_auth_name) .set(metadata::Identifier::CODE_KEY, method_code) .set(common::IdentifiedObject::NAME_KEY, method_name); std::vector accuracies; if (!accuracy.empty() && accuracy != "999.0") { accuracies.emplace_back( metadata::PositionalAccuracy::create(accuracy)); } return operation::Transformation::create( props, sourceCRS, targetCRS, nullptr, propsMethod, parameters, values, accuracies); } catch (const std::exception &ex) { throw buildFactoryException("transformation", d->authority(), code, ex); } } if (type == "grid_transformation") { auto res = d->runWithCodeParam( "SELECT name, description, " "method_auth_name, method_code, method_name, " "source_crs_auth_name, source_crs_code, target_crs_auth_name, " "target_crs_code, " "accuracy, grid_param_auth_name, grid_param_code, grid_param_name, " "grid_name, " "grid2_param_auth_name, grid2_param_code, grid2_param_name, " "grid2_name, " "interpolation_crs_auth_name, interpolation_crs_code, " "operation_version, deprecated FROM " "grid_transformation WHERE auth_name = ? AND code = ?", code); if (res.empty()) { // shouldn't happen if foreign keys are OK throw NoSuchAuthorityCodeException("grid_transformation not found", d->authority(), code); } try { const auto &row = res.front(); size_t idx = 0; const auto &name = row[idx++]; const auto &description = row[idx++]; const auto &method_auth_name = row[idx++]; const auto &method_code = row[idx++]; const auto &method_name = row[idx++]; const auto &source_crs_auth_name = row[idx++]; const auto &source_crs_code = row[idx++]; const auto &target_crs_auth_name = row[idx++]; const auto &target_crs_code = row[idx++]; const auto &accuracy = row[idx++]; const auto &grid_param_auth_name = row[idx++]; const auto &grid_param_code = row[idx++]; const auto &grid_param_name = row[idx++]; const auto &grid_name = row[idx++]; const auto &grid2_param_auth_name = row[idx++]; const auto &grid2_param_code = row[idx++]; const auto &grid2_param_name = row[idx++]; const auto &grid2_name = row[idx++]; const auto &interpolation_crs_auth_name = row[idx++]; const auto &interpolation_crs_code = row[idx++]; const auto &operation_version = row[idx++]; const auto &deprecated_str = row[idx++]; const bool deprecated = deprecated_str == "1"; assert(idx == row.size()); auto sourceCRS = d->createFactory(source_crs_auth_name) ->createCoordinateReferenceSystem(source_crs_code); auto targetCRS = d->createFactory(target_crs_auth_name) ->createCoordinateReferenceSystem(target_crs_code); auto interpolationCRS = interpolation_crs_auth_name.empty() ? nullptr : d->createFactory(interpolation_crs_auth_name) ->createCoordinateReferenceSystem( interpolation_crs_code) .as_nullable(); std::vector parameters; std::vector values; parameters.emplace_back(operation::OperationParameter::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, grid_param_name) .set(metadata::Identifier::CODESPACE_KEY, grid_param_auth_name) .set(metadata::Identifier::CODE_KEY, grid_param_code))); values.emplace_back( operation::ParameterValue::createFilename(grid_name)); if (!grid2_name.empty()) { parameters.emplace_back(operation::OperationParameter::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, grid2_param_name) .set(metadata::Identifier::CODESPACE_KEY, grid2_param_auth_name) .set(metadata::Identifier::CODE_KEY, grid2_param_code))); values.emplace_back( operation::ParameterValue::createFilename(grid2_name)); } auto props = d->createPropertiesSearchUsages( type, code, name, deprecated, description); if (!operation_version.empty()) { props.set(operation::CoordinateOperation::OPERATION_VERSION_KEY, operation_version); } auto propsMethod = util::PropertyMap() .set(metadata::Identifier::CODESPACE_KEY, method_auth_name) .set(metadata::Identifier::CODE_KEY, method_code) .set(common::IdentifiedObject::NAME_KEY, method_name); std::vector accuracies; if (!accuracy.empty() && accuracy != "999.0") { accuracies.emplace_back( metadata::PositionalAccuracy::create(accuracy)); } // A bit fragile to detect the operation type with the method name, // but not worth changing the database model if (starts_with(method_name, "Point motion")) { if (!sourceCRS->isEquivalentTo(targetCRS.get())) { throw operation::InvalidOperation( "source_crs and target_crs should be the same for a " "PointMotionOperation"); } auto pmo = operation::PointMotionOperation::create( props, sourceCRS, propsMethod, parameters, values, accuracies); if (usePROJAlternativeGridNames) { return pmo->substitutePROJAlternativeGridNames( d->context()); } return pmo; } auto transf = operation::Transformation::create( props, sourceCRS, targetCRS, interpolationCRS, propsMethod, parameters, values, accuracies); if (usePROJAlternativeGridNames) { return transf->substitutePROJAlternativeGridNames(d->context()); } return transf; } catch (const std::exception &ex) { throw buildFactoryException("transformation", d->authority(), code, ex); } } if (type == "other_transformation") { std::ostringstream buffer; buffer.imbue(std::locale::classic()); buffer << "SELECT name, description, " "method_auth_name, method_code, method_name, " "source_crs_auth_name, source_crs_code, target_crs_auth_name, " "target_crs_code, " "interpolation_crs_auth_name, interpolation_crs_code, " "operation_version, accuracy, deprecated"; for (size_t i = 1; i <= N_MAX_PARAMS; ++i) { buffer << ", param" << i << "_auth_name"; buffer << ", param" << i << "_code"; buffer << ", param" << i << "_name"; buffer << ", param" << i << "_value"; buffer << ", param" << i << "_uom_auth_name"; buffer << ", param" << i << "_uom_code"; } buffer << " FROM other_transformation " "WHERE auth_name = ? AND code = ?"; auto res = d->runWithCodeParam(buffer.str(), code); if (res.empty()) { // shouldn't happen if foreign keys are OK throw NoSuchAuthorityCodeException("other_transformation not found", d->authority(), code); } try { const auto &row = res.front(); size_t idx = 0; const auto &name = row[idx++]; const auto &description = row[idx++]; const auto &method_auth_name = row[idx++]; const auto &method_code = row[idx++]; const auto &method_name = row[idx++]; const auto &source_crs_auth_name = row[idx++]; const auto &source_crs_code = row[idx++]; const auto &target_crs_auth_name = row[idx++]; const auto &target_crs_code = row[idx++]; const auto &interpolation_crs_auth_name = row[idx++]; const auto &interpolation_crs_code = row[idx++]; const auto &operation_version = row[idx++]; const auto &accuracy = row[idx++]; const auto &deprecated_str = row[idx++]; const bool deprecated = deprecated_str == "1"; const size_t base_param_idx = idx; std::vector parameters; std::vector values; for (size_t i = 0; i < N_MAX_PARAMS; ++i) { const auto ¶m_auth_name = row[base_param_idx + i * 6 + 0]; if (param_auth_name.empty()) { break; } const auto ¶m_code = row[base_param_idx + i * 6 + 1]; const auto ¶m_name = row[base_param_idx + i * 6 + 2]; const auto ¶m_value = row[base_param_idx + i * 6 + 3]; const auto ¶m_uom_auth_name = row[base_param_idx + i * 6 + 4]; const auto ¶m_uom_code = row[base_param_idx + i * 6 + 5]; parameters.emplace_back(operation::OperationParameter::create( util::PropertyMap() .set(metadata::Identifier::CODESPACE_KEY, param_auth_name) .set(metadata::Identifier::CODE_KEY, param_code) .set(common::IdentifiedObject::NAME_KEY, param_name))); std::string normalized_uom_code(param_uom_code); const double normalized_value = normalizeMeasure( param_uom_code, param_value, normalized_uom_code); auto uom = d->createUnitOfMeasure(param_uom_auth_name, normalized_uom_code); values.emplace_back(operation::ParameterValue::create( common::Measure(normalized_value, uom))); } idx = base_param_idx + 6 * N_MAX_PARAMS; (void)idx; assert(idx == row.size()); auto sourceCRS = d->createFactory(source_crs_auth_name) ->createCoordinateReferenceSystem(source_crs_code); auto targetCRS = d->createFactory(target_crs_auth_name) ->createCoordinateReferenceSystem(target_crs_code); auto interpolationCRS = interpolation_crs_auth_name.empty() ? nullptr : d->createFactory(interpolation_crs_auth_name) ->createCoordinateReferenceSystem( interpolation_crs_code) .as_nullable(); auto props = d->createPropertiesSearchUsages( type, code, name, deprecated, description); if (!operation_version.empty()) { props.set(operation::CoordinateOperation::OPERATION_VERSION_KEY, operation_version); } std::vector accuracies; if (!accuracy.empty() && accuracy != "999.0") { accuracies.emplace_back( metadata::PositionalAccuracy::create(accuracy)); } if (method_auth_name == "PROJ") { if (method_code == "PROJString") { auto op = operation::SingleOperation::createPROJBased( props, method_name, sourceCRS, targetCRS, accuracies); op->setCRSs(sourceCRS, targetCRS, interpolationCRS); return op; } else if (method_code == "WKT") { auto op = util::nn_dynamic_pointer_cast< operation::CoordinateOperation>( WKTParser().createFromWKT(method_name)); if (!op) { throw FactoryException("WKT string does not express a " "coordinate operation"); } op->setCRSs(sourceCRS, targetCRS, interpolationCRS); return NN_NO_CHECK(op); } } auto propsMethod = util::PropertyMap() .set(metadata::Identifier::CODESPACE_KEY, method_auth_name) .set(metadata::Identifier::CODE_KEY, method_code) .set(common::IdentifiedObject::NAME_KEY, method_name); if (method_auth_name == metadata::Identifier::EPSG) { int method_code_int = std::atoi(method_code.c_str()); if (operation::isAxisOrderReversal(method_code_int) || method_code_int == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT || method_code_int == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR || method_code_int == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) { auto op = operation::Conversion::create(props, propsMethod, parameters, values); op->setCRSs(sourceCRS, targetCRS, interpolationCRS); return op; } } return operation::Transformation::create( props, sourceCRS, targetCRS, interpolationCRS, propsMethod, parameters, values, accuracies); } catch (const std::exception &ex) { throw buildFactoryException("transformation", d->authority(), code, ex); } } if (allowConcatenated && type == "concatenated_operation") { auto res = d->runWithCodeParam( "SELECT name, description, " "source_crs_auth_name, source_crs_code, " "target_crs_auth_name, target_crs_code, " "accuracy, " "operation_version, deprecated FROM " "concatenated_operation WHERE auth_name = ? AND code = ?", code); if (res.empty()) { // shouldn't happen if foreign keys are OK throw NoSuchAuthorityCodeException( "concatenated_operation not found", d->authority(), code); } auto resSteps = d->runWithCodeParam( "SELECT step_auth_name, step_code, step_direction FROM " "concatenated_operation_step WHERE operation_auth_name = ? " "AND operation_code = ? ORDER BY step_number", code); try { const auto &row = res.front(); size_t idx = 0; const auto &name = row[idx++]; const auto &description = row[idx++]; const auto &source_crs_auth_name = row[idx++]; const auto &source_crs_code = row[idx++]; const auto &target_crs_auth_name = row[idx++]; const auto &target_crs_code = row[idx++]; const auto &accuracy = row[idx++]; const auto &operation_version = row[idx++]; const auto &deprecated_str = row[idx++]; const bool deprecated = deprecated_str == "1"; std::vector operations; size_t countExplicitDirection = 0; for (const auto &rowStep : resSteps) { const auto &step_auth_name = rowStep[0]; const auto &step_code = rowStep[1]; const auto &step_direction = rowStep[2]; auto stepOp = d->createFactory(step_auth_name) ->createCoordinateOperation(step_code, false, usePROJAlternativeGridNames, std::string()); if (step_direction == "forward") { ++countExplicitDirection; operations.push_back(std::move(stepOp)); } else if (step_direction == "reverse") { ++countExplicitDirection; operations.push_back(stepOp->inverse()); } else { operations.push_back(std::move(stepOp)); } } if (countExplicitDirection > 0 && countExplicitDirection != resSteps.size()) { throw FactoryException("not all steps have a defined direction " "for concatenated operation " + code); } const bool fixDirectionAllowed = (countExplicitDirection == 0); operation::ConcatenatedOperation::fixSteps( d->createFactory(source_crs_auth_name) ->createCoordinateReferenceSystem(source_crs_code), d->createFactory(target_crs_auth_name) ->createCoordinateReferenceSystem(target_crs_code), operations, d->context(), fixDirectionAllowed); auto props = d->createPropertiesSearchUsages( type, code, name, deprecated, description); if (!operation_version.empty()) { props.set(operation::CoordinateOperation::OPERATION_VERSION_KEY, operation_version); } std::vector accuracies; if (!accuracy.empty()) { if (accuracy != "999.0") { accuracies.emplace_back( metadata::PositionalAccuracy::create(accuracy)); } } else { // Try to compute a reasonable accuracy from the members double totalAcc = -1; try { for (const auto &op : operations) { auto accs = op->coordinateOperationAccuracies(); if (accs.size() == 1) { double acc = c_locale_stod(accs[0]->value()); if (totalAcc < 0) { totalAcc = acc; } else { totalAcc += acc; } } else if (dynamic_cast( op.get())) { // A conversion is perfectly accurate. if (totalAcc < 0) { totalAcc = 0; } } else { totalAcc = -1; break; } } if (totalAcc >= 0) { accuracies.emplace_back( metadata::PositionalAccuracy::create( toString(totalAcc))); } } catch (const std::exception &) { } } return operation::ConcatenatedOperation::create(props, operations, accuracies); } catch (const std::exception &ex) { throw buildFactoryException("transformation", d->authority(), code, ex); } } throw FactoryException("unhandled coordinate operation type: " + type); } // --------------------------------------------------------------------------- /** \brief Returns a list operation::CoordinateOperation between two CRS. * * The list is ordered with preferred operations first. No attempt is made * at inferring operations that are not explicitly in the database. * * Deprecated operations are rejected. * * @param sourceCRSCode Source CRS code allocated by authority. * @param targetCRSCode Source CRS code allocated by authority. * @return list of coordinate operations * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ std::vector AuthorityFactory::createFromCoordinateReferenceSystemCodes( const std::string &sourceCRSCode, const std::string &targetCRSCode) const { return createFromCoordinateReferenceSystemCodes( d->authority(), sourceCRSCode, d->authority(), targetCRSCode, false, false, false, false); } // --------------------------------------------------------------------------- /** \brief Returns a list of geoid models available for that crs * * The list includes the geoid models connected directly with the crs, * or via "Height Depth Reversal" or "Change of Vertical Unit" transformations * * @param code crs code allocated by authority. * @return list of geoid model names * @throw FactoryException in case of error. */ std::list AuthorityFactory::getGeoidModels(const std::string &code) const { ListOfParams params; std::string sql; sql += "SELECT DISTINCT GM0.name " " FROM geoid_model GM0 " "INNER JOIN grid_transformation GT0 " " ON GT0.code = GM0.operation_code " " AND GT0.auth_name = GM0.operation_auth_name " " AND GT0.target_crs_code = ? "; params.emplace_back(code); if (d->hasAuthorityRestriction()) { sql += " AND GT0.target_crs_auth_name = ? "; params.emplace_back(d->authority()); } /// The second part of the query is for CRSs that use that geoid model via /// Height Depth Reversal (EPSG:1068) or Change of Vertical Unit (EPSG:1069) sql += "UNION " "SELECT DISTINCT GM0.name " " FROM geoid_model GM0 " "INNER JOIN grid_transformation GT1 " " ON GT1.code = GM0.operation_code " " AND GT1.auth_name = GM0.operation_auth_name " "INNER JOIN other_transformation OT1 " " ON OT1.source_crs_code = GT1.target_crs_code " " AND OT1.source_crs_auth_name = GT1.target_crs_auth_name " " AND OT1.method_auth_name = 'EPSG' " " AND OT1.method_code IN (1068, 1069, 1104) " " AND OT1.target_crs_code = ? "; params.emplace_back(code); if (d->hasAuthorityRestriction()) { sql += " AND OT1.target_crs_auth_name = ? "; params.emplace_back(d->authority()); } /// The third part of the query is for CRSs that use that geoid model via /// other_transformation table twice, like transforming depth and feet sql += "UNION " "SELECT DISTINCT GM0.name " " FROM geoid_model GM0 " "INNER JOIN grid_transformation GT1 " " ON GT1.code = GM0.operation_code " " AND GT1.auth_name = GM0.operation_auth_name " "INNER JOIN other_transformation OT1 " " ON OT1.source_crs_code = GT1.target_crs_code " " AND OT1.source_crs_auth_name = GT1.target_crs_auth_name " " AND OT1.method_auth_name = 'EPSG' " " AND OT1.method_code IN (1068, 1069, 1104) " "INNER JOIN other_transformation OT2 " " ON OT2.source_crs_code = OT1.target_crs_code " " AND OT2.source_crs_auth_name = OT1.target_crs_auth_name " " AND OT2.method_code IN (1068, 1069, 1104) " " AND OT2.target_crs_code = ? "; params.emplace_back(code); if (d->hasAuthorityRestriction()) { sql += " AND OT2.target_crs_auth_name = ? "; params.emplace_back(d->authority()); } sql += " ORDER BY 1 "; auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { res.push_back(row[0]); } return res; } // --------------------------------------------------------------------------- /** \brief Returns a list operation::CoordinateOperation between two CRS. * * The list is ordered with preferred operations first. No attempt is made * at inferring operations that are not explicitly in the database (see * createFromCRSCodesWithIntermediates() for that), and only * source -> target operations are searched (i.e. if target -> source is * present, you need to call this method with the arguments reversed, and apply * the reverse transformations). * * Deprecated operations are rejected. * * If getAuthority() returns empty, then coordinate operations from all * authorities are considered. * * @param sourceCRSAuthName Authority name of sourceCRSCode * @param sourceCRSCode Source CRS code allocated by authority * sourceCRSAuthName. * @param targetCRSAuthName Authority name of targetCRSCode * @param targetCRSCode Source CRS code allocated by authority * targetCRSAuthName. * @param usePROJAlternativeGridNames Whether PROJ alternative grid names * should be substituted to the official grid names. * @param discardIfMissingGrid Whether coordinate operations that reference * missing grids should be removed from the result set. * @param considerKnownGridsAsAvailable Whether known grids should be considered * as available (typically when network is enabled). * @param discardSuperseded Whether coordinate operations that are superseded * (but not deprecated) should be removed from the result set. * @param tryReverseOrder whether to search in the reverse order too (and thus * inverse results found that way) * @param reportOnlyIntersectingTransformations if intersectingExtent1 and * intersectingExtent2 should be honored in a strict way. * @param intersectingExtent1 Optional extent that the resulting operations * must intersect. * @param intersectingExtent2 Optional extent that the resulting operations * must intersect. * @return list of coordinate operations * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ std::vector AuthorityFactory::createFromCoordinateReferenceSystemCodes( const std::string &sourceCRSAuthName, const std::string &sourceCRSCode, const std::string &targetCRSAuthName, const std::string &targetCRSCode, bool usePROJAlternativeGridNames, bool discardIfMissingGrid, bool considerKnownGridsAsAvailable, bool discardSuperseded, bool tryReverseOrder, bool reportOnlyIntersectingTransformations, const metadata::ExtentPtr &intersectingExtent1, const metadata::ExtentPtr &intersectingExtent2) const { auto cacheKey(d->authority()); cacheKey += sourceCRSAuthName.empty() ? "{empty}" : sourceCRSAuthName; cacheKey += sourceCRSCode; cacheKey += targetCRSAuthName.empty() ? "{empty}" : targetCRSAuthName; cacheKey += targetCRSCode; cacheKey += (usePROJAlternativeGridNames ? '1' : '0'); cacheKey += (discardIfMissingGrid ? '1' : '0'); cacheKey += (considerKnownGridsAsAvailable ? '1' : '0'); cacheKey += (discardSuperseded ? '1' : '0'); cacheKey += (tryReverseOrder ? '1' : '0'); cacheKey += (reportOnlyIntersectingTransformations ? '1' : '0'); for (const auto &extent : {intersectingExtent1, intersectingExtent2}) { if (extent) { const auto &geogExtent = extent->geographicElements(); if (geogExtent.size() == 1) { auto bbox = dynamic_cast( geogExtent[0].get()); if (bbox) { cacheKey += toString(bbox->southBoundLatitude()); cacheKey += toString(bbox->westBoundLongitude()); cacheKey += toString(bbox->northBoundLatitude()); cacheKey += toString(bbox->eastBoundLongitude()); } } } } std::vector list; if (d->context()->d->getCRSToCRSCoordOpFromCache(cacheKey, list)) { return list; } // Check if sourceCRS would be the base of a ProjectedCRS targetCRS // In which case use the conversion of the ProjectedCRS if (!targetCRSAuthName.empty()) { auto targetFactory = d->createFactory(targetCRSAuthName); const auto cacheKeyProjectedCRS(targetFactory->d->authority() + targetCRSCode); auto crs = targetFactory->d->context()->d->getCRSFromCache( cacheKeyProjectedCRS); crs::ProjectedCRSPtr targetProjCRS; if (crs) { targetProjCRS = std::dynamic_pointer_cast(crs); } else { const auto sqlRes = targetFactory->d->createProjectedCRSBegin(targetCRSCode); if (!sqlRes.empty()) { try { targetProjCRS = targetFactory->d ->createProjectedCRSEnd(targetCRSCode, sqlRes) .as_nullable(); } catch (const std::exception &) { } } } if (targetProjCRS) { const auto &baseIds = targetProjCRS->baseCRS()->identifiers(); if (sourceCRSAuthName.empty() || (!baseIds.empty() && *(baseIds.front()->codeSpace()) == sourceCRSAuthName && baseIds.front()->code() == sourceCRSCode)) { bool ok = true; auto conv = targetProjCRS->derivingConversion(); if (d->hasAuthorityRestriction()) { ok = *(conv->identifiers().front()->codeSpace()) == d->authority(); } if (ok) { list.emplace_back(conv); d->context()->d->cache(cacheKey, list); return list; } } } } std::string sql; if (discardSuperseded) { sql = "SELECT cov.source_crs_auth_name, cov.source_crs_code, " "cov.target_crs_auth_name, cov.target_crs_code, " "cov.auth_name, cov.code, cov.table_name, " "extent.south_lat, extent.west_lon, extent.north_lat, " "extent.east_lon, " "ss.replacement_auth_name, ss.replacement_code, " "(gt.auth_name IS NOT NULL) AS replacement_is_grid_transform, " "(ga.proj_grid_name IS NOT NULL) AS replacement_is_known_grid " "FROM " "coordinate_operation_view cov " "JOIN usage ON " "usage.object_table_name = cov.table_name AND " "usage.object_auth_name = cov.auth_name AND " "usage.object_code = cov.code " "JOIN extent " "ON extent.auth_name = usage.extent_auth_name AND " "extent.code = usage.extent_code " "LEFT JOIN supersession ss ON " "ss.superseded_table_name = cov.table_name AND " "ss.superseded_auth_name = cov.auth_name AND " "ss.superseded_code = cov.code AND " "ss.superseded_table_name = ss.replacement_table_name AND " "ss.same_source_target_crs = 1 " "LEFT JOIN grid_transformation gt ON " "gt.auth_name = ss.replacement_auth_name AND " "gt.code = ss.replacement_code " "LEFT JOIN grid_alternatives ga ON " "ga.original_grid_name = gt.grid_name " "WHERE "; } else { sql = "SELECT source_crs_auth_name, source_crs_code, " "target_crs_auth_name, target_crs_code, " "cov.auth_name, cov.code, cov.table_name, " "extent.south_lat, extent.west_lon, extent.north_lat, " "extent.east_lon " "FROM " "coordinate_operation_view cov " "JOIN usage ON " "usage.object_table_name = cov.table_name AND " "usage.object_auth_name = cov.auth_name AND " "usage.object_code = cov.code " "JOIN extent " "ON extent.auth_name = usage.extent_auth_name AND " "extent.code = usage.extent_code " "WHERE "; } ListOfParams params; if (!sourceCRSAuthName.empty() && !targetCRSAuthName.empty()) { if (tryReverseOrder) { sql += "((cov.source_crs_auth_name = ? AND cov.source_crs_code = ? " "AND " "cov.target_crs_auth_name = ? AND cov.target_crs_code = ?) " "OR " "(cov.source_crs_auth_name = ? AND cov.source_crs_code = ? " "AND " "cov.target_crs_auth_name = ? AND cov.target_crs_code = ?)) " "AND "; params.emplace_back(sourceCRSAuthName); params.emplace_back(sourceCRSCode); params.emplace_back(targetCRSAuthName); params.emplace_back(targetCRSCode); params.emplace_back(targetCRSAuthName); params.emplace_back(targetCRSCode); params.emplace_back(sourceCRSAuthName); params.emplace_back(sourceCRSCode); } else { sql += "cov.source_crs_auth_name = ? AND cov.source_crs_code = ? " "AND " "cov.target_crs_auth_name = ? AND cov.target_crs_code = ? " "AND "; params.emplace_back(sourceCRSAuthName); params.emplace_back(sourceCRSCode); params.emplace_back(targetCRSAuthName); params.emplace_back(targetCRSCode); } } else if (!sourceCRSAuthName.empty()) { if (tryReverseOrder) { sql += "((cov.source_crs_auth_name = ? AND cov.source_crs_code = ? " ")OR " "(cov.target_crs_auth_name = ? AND cov.target_crs_code = ?))" " AND "; params.emplace_back(sourceCRSAuthName); params.emplace_back(sourceCRSCode); params.emplace_back(sourceCRSAuthName); params.emplace_back(sourceCRSCode); } else { sql += "cov.source_crs_auth_name = ? AND cov.source_crs_code = ? " "AND "; params.emplace_back(sourceCRSAuthName); params.emplace_back(sourceCRSCode); } } else if (!targetCRSAuthName.empty()) { if (tryReverseOrder) { sql += "((cov.source_crs_auth_name = ? AND cov.source_crs_code = ?)" " OR " "(cov.target_crs_auth_name = ? AND cov.target_crs_code = ?))" " AND "; params.emplace_back(targetCRSAuthName); params.emplace_back(targetCRSCode); params.emplace_back(targetCRSAuthName); params.emplace_back(targetCRSCode); } else { sql += "cov.target_crs_auth_name = ? AND cov.target_crs_code = ? " "AND "; params.emplace_back(targetCRSAuthName); params.emplace_back(targetCRSCode); } } sql += "cov.deprecated = 0"; if (d->hasAuthorityRestriction()) { sql += " AND cov.auth_name = ?"; params.emplace_back(d->authority()); } sql += " ORDER BY pseudo_area_from_swne(south_lat, west_lon, north_lat, " "east_lon) DESC, " "(CASE WHEN cov.accuracy is NULL THEN 1 ELSE 0 END), cov.accuracy"; auto res = d->run(sql, params); std::set> setTransf; if (discardSuperseded) { for (const auto &row : res) { const auto &auth_name = row[4]; const auto &code = row[5]; setTransf.insert( std::pair(auth_name, code)); } } // Do a pass to determine if there are transformations that intersect // intersectingExtent1 & intersectingExtent2 std::vector intersectingTransformations; intersectingTransformations.resize(res.size()); bool hasIntersectingTransformations = false; size_t i = 0; for (const auto &row : res) { size_t thisI = i; ++i; if (discardSuperseded) { const auto &replacement_auth_name = row[11]; const auto &replacement_code = row[12]; const bool replacement_is_grid_transform = row[13] == "1"; const bool replacement_is_known_grid = row[14] == "1"; if (!replacement_auth_name.empty() && // Ignore supersession if the replacement uses a unknown grid !(replacement_is_grid_transform && !replacement_is_known_grid) && setTransf.find(std::pair( replacement_auth_name, replacement_code)) != setTransf.end()) { // Skip transformations that are superseded by others that got // returned in the result set. continue; } } bool intersecting = true; try { double south_lat = c_locale_stod(row[7]); double west_lon = c_locale_stod(row[8]); double north_lat = c_locale_stod(row[9]); double east_lon = c_locale_stod(row[10]); auto transf_extent = metadata::Extent::createFromBBOX( west_lon, south_lat, east_lon, north_lat); for (const auto &extent : {intersectingExtent1, intersectingExtent2}) { if (extent) { if (!transf_extent->intersects(NN_NO_CHECK(extent))) { intersecting = false; break; } } } } catch (const std::exception &) { } intersectingTransformations[thisI] = intersecting; if (intersecting) hasIntersectingTransformations = true; } // If there are intersecting transformations, then only report those ones // If there are no intersecting transformations, report all of them // This is for the "projinfo -s EPSG:32631 -t EPSG:2171" use case where we // still want to be able to use the Pulkovo datum shift if EPSG:32631 // coordinates are used i = 0; for (const auto &row : res) { size_t thisI = i; ++i; if ((hasIntersectingTransformations || reportOnlyIntersectingTransformations) && !intersectingTransformations[thisI]) { continue; } if (discardSuperseded) { const auto &replacement_auth_name = row[11]; const auto &replacement_code = row[12]; const bool replacement_is_grid_transform = row[13] == "1"; const bool replacement_is_known_grid = row[14] == "1"; if (!replacement_auth_name.empty() && // Ignore supersession if the replacement uses a unknown grid !(replacement_is_grid_transform && !replacement_is_known_grid) && setTransf.find(std::pair( replacement_auth_name, replacement_code)) != setTransf.end()) { // Skip transformations that are superseded by others that got // returned in the result set. continue; } } const auto &source_crs_auth_name = row[0]; const auto &source_crs_code = row[1]; const auto &target_crs_auth_name = row[2]; const auto &target_crs_code = row[3]; const auto &auth_name = row[4]; const auto &code = row[5]; const auto &table_name = row[6]; try { auto op = d->createFactory(auth_name)->createCoordinateOperation( code, true, usePROJAlternativeGridNames, table_name); if (tryReverseOrder && (!sourceCRSAuthName.empty() ? (source_crs_auth_name != sourceCRSAuthName || source_crs_code != sourceCRSCode) : (target_crs_auth_name != targetCRSAuthName || target_crs_code != targetCRSCode))) { op = op->inverse(); } if (!discardIfMissingGrid || !d->rejectOpDueToMissingGrid(op, considerKnownGridsAsAvailable)) { list.emplace_back(op); } } catch (const std::exception &e) { // Mostly for debugging purposes when using an inconsistent // database if (getenv("PROJ_IGNORE_INSTANTIATION_ERRORS")) { fprintf(stderr, "Ignoring invalid operation: %s\n", e.what()); } else { throw; } } } d->context()->d->cache(cacheKey, list); return list; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool useIrrelevantPivot(const operation::CoordinateOperationNNPtr &op, const std::string &sourceCRSAuthName, const std::string &sourceCRSCode, const std::string &targetCRSAuthName, const std::string &targetCRSCode) { auto concat = dynamic_cast(op.get()); if (!concat) { return false; } auto ops = concat->operations(); for (size_t i = 0; i + 1 < ops.size(); i++) { auto targetCRS = ops[i]->targetCRS(); if (targetCRS) { const auto &ids = targetCRS->identifiers(); if (ids.size() == 1 && ((*ids[0]->codeSpace() == sourceCRSAuthName && ids[0]->code() == sourceCRSCode) || (*ids[0]->codeSpace() == targetCRSAuthName && ids[0]->code() == targetCRSCode))) { return true; } } } return false; } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns a list operation::CoordinateOperation between two CRS, * using intermediate codes. * * The list is ordered with preferred operations first. * * Deprecated operations are rejected. * * The method will take care of considering all potential combinations (i.e. * contrary to createFromCoordinateReferenceSystemCodes(), you do not need to * call it with sourceCRS and targetCRS switched) * * If getAuthority() returns empty, then coordinate operations from all * authorities are considered. * * @param sourceCRSAuthName Authority name of sourceCRSCode * @param sourceCRSCode Source CRS code allocated by authority * sourceCRSAuthName. * @param targetCRSAuthName Authority name of targetCRSCode * @param targetCRSCode Source CRS code allocated by authority * targetCRSAuthName. * @param usePROJAlternativeGridNames Whether PROJ alternative grid names * should be substituted to the official grid names. * @param discardIfMissingGrid Whether coordinate operations that reference * missing grids should be removed from the result set. * @param considerKnownGridsAsAvailable Whether known grids should be considered * as available (typically when network is enabled). * @param discardSuperseded Whether coordinate operations that are superseded * (but not deprecated) should be removed from the result set. * @param intermediateCRSAuthCodes List of (auth_name, code) of CRS that can be * used as potential intermediate CRS. If the list is empty, the database will * be used to find common CRS in operations involving both the source and * target CRS. * @param allowedIntermediateObjectType Restrict the type of the intermediate * object considered. * Only ObjectType::CRS and ObjectType::GEOGRAPHIC_CRS supported currently * @param allowedAuthorities One or several authority name allowed for the two * coordinate operations that are going to be searched. When this vector is * no empty, it overrides the authority of this object. This is useful for * example when the coordinate operations to chain belong to two different * allowed authorities. * @param intersectingExtent1 Optional extent that the resulting operations * must intersect. * @param intersectingExtent2 Optional extent that the resulting operations * must intersect. * @return list of coordinate operations * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ std::vector AuthorityFactory::createFromCRSCodesWithIntermediates( const std::string &sourceCRSAuthName, const std::string &sourceCRSCode, const std::string &targetCRSAuthName, const std::string &targetCRSCode, bool usePROJAlternativeGridNames, bool discardIfMissingGrid, bool considerKnownGridsAsAvailable, bool discardSuperseded, const std::vector> &intermediateCRSAuthCodes, ObjectType allowedIntermediateObjectType, const std::vector &allowedAuthorities, const metadata::ExtentPtr &intersectingExtent1, const metadata::ExtentPtr &intersectingExtent2) const { std::vector listTmp; if (sourceCRSAuthName == targetCRSAuthName && sourceCRSCode == targetCRSCode) { return listTmp; } const auto CheckIfHasOperations = [=](const std::string &auth_name, const std::string &code) { return !(d->run("SELECT 1 FROM coordinate_operation_view WHERE " "(source_crs_auth_name = ? AND source_crs_code = ?) OR " "(target_crs_auth_name = ? AND target_crs_code = ?) " "LIMIT 1", {auth_name, code, auth_name, code}) .empty()); }; // If the source or target CRS are not the source or target of an operation, // do not run the next costly requests. if (!CheckIfHasOperations(sourceCRSAuthName, sourceCRSCode) || !CheckIfHasOperations(targetCRSAuthName, targetCRSCode)) { return listTmp; } const std::string sqlProlog( discardSuperseded ? "SELECT v1.table_name as table1, " "v1.auth_name AS auth_name1, v1.code AS code1, " "v1.accuracy AS accuracy1, " "v2.table_name as table2, " "v2.auth_name AS auth_name2, v2.code AS code2, " "v2.accuracy as accuracy2, " "a1.south_lat AS south_lat1, " "a1.west_lon AS west_lon1, " "a1.north_lat AS north_lat1, " "a1.east_lon AS east_lon1, " "a2.south_lat AS south_lat2, " "a2.west_lon AS west_lon2, " "a2.north_lat AS north_lat2, " "a2.east_lon AS east_lon2, " "ss1.replacement_auth_name AS replacement_auth_name1, " "ss1.replacement_code AS replacement_code1, " "ss2.replacement_auth_name AS replacement_auth_name2, " "ss2.replacement_code AS replacement_code2 " "FROM coordinate_operation_view v1 " "JOIN coordinate_operation_view v2 " : "SELECT v1.table_name as table1, " "v1.auth_name AS auth_name1, v1.code AS code1, " "v1.accuracy AS accuracy1, " "v2.table_name as table2, " "v2.auth_name AS auth_name2, v2.code AS code2, " "v2.accuracy as accuracy2, " "a1.south_lat AS south_lat1, " "a1.west_lon AS west_lon1, " "a1.north_lat AS north_lat1, " "a1.east_lon AS east_lon1, " "a2.south_lat AS south_lat2, " "a2.west_lon AS west_lon2, " "a2.north_lat AS north_lat2, " "a2.east_lon AS east_lon2 " "FROM coordinate_operation_view v1 " "JOIN coordinate_operation_view v2 "); const char *joinSupersession = "LEFT JOIN supersession ss1 ON " "ss1.superseded_table_name = v1.table_name AND " "ss1.superseded_auth_name = v1.auth_name AND " "ss1.superseded_code = v1.code AND " "ss1.superseded_table_name = ss1.replacement_table_name AND " "ss1.same_source_target_crs = 1 " "LEFT JOIN supersession ss2 ON " "ss2.superseded_table_name = v2.table_name AND " "ss2.superseded_auth_name = v2.auth_name AND " "ss2.superseded_code = v2.code AND " "ss2.superseded_table_name = ss2.replacement_table_name AND " "ss2.same_source_target_crs = 1 "; const std::string joinArea( (discardSuperseded ? std::string(joinSupersession) : std::string()) .append("JOIN usage u1 ON " "u1.object_table_name = v1.table_name AND " "u1.object_auth_name = v1.auth_name AND " "u1.object_code = v1.code " "JOIN extent a1 " "ON a1.auth_name = u1.extent_auth_name AND " "a1.code = u1.extent_code " "JOIN usage u2 ON " "u2.object_table_name = v2.table_name AND " "u2.object_auth_name = v2.auth_name AND " "u2.object_code = v2.code " "JOIN extent a2 " "ON a2.auth_name = u2.extent_auth_name AND " "a2.code = u2.extent_code ")); const std::string orderBy( "ORDER BY (CASE WHEN accuracy1 is NULL THEN 1 ELSE 0 END) + " "(CASE WHEN accuracy2 is NULL THEN 1 ELSE 0 END), " "accuracy1 + accuracy2"); // Case (source->intermediate) and (intermediate->target) std::string sql( sqlProlog + "ON v1.target_crs_auth_name = v2.source_crs_auth_name " "AND v1.target_crs_code = v2.source_crs_code " + joinArea + "WHERE v1.source_crs_auth_name = ? AND v1.source_crs_code = ? " "AND v2.target_crs_auth_name = ? AND v2.target_crs_code = ? "); std::string minDate; std::string criterionOnIntermediateCRS; const auto sourceCRS = d->createFactory(sourceCRSAuthName) ->createCoordinateReferenceSystem(sourceCRSCode); const auto targetCRS = d->createFactory(targetCRSAuthName) ->createCoordinateReferenceSystem(targetCRSCode); const bool ETRFtoETRF = starts_with(sourceCRS->nameStr(), "ETRF") && starts_with(targetCRS->nameStr(), "ETRF"); if (allowedIntermediateObjectType == ObjectType::GEOGRAPHIC_CRS) { const auto &sourceGeogCRS = dynamic_cast(sourceCRS.get()); const auto &targetGeogCRS = dynamic_cast(targetCRS.get()); if (sourceGeogCRS && targetGeogCRS) { const auto &sourceDatum = sourceGeogCRS->datum(); const auto &targetDatum = targetGeogCRS->datum(); if (sourceDatum && sourceDatum->publicationDate().has_value() && targetDatum && targetDatum->publicationDate().has_value()) { const auto sourceDate( sourceDatum->publicationDate()->toString()); const auto targetDate( targetDatum->publicationDate()->toString()); minDate = std::min(sourceDate, targetDate); // Check that the datum of the intermediateCRS has a publication // date most recent that the one of the source and the target // CRS Except when using the usual WGS84 pivot which happens to // have a NULL publication date. criterionOnIntermediateCRS = "AND EXISTS(SELECT 1 FROM geodetic_crs x " "JOIN geodetic_datum y " "ON " "y.auth_name = x.datum_auth_name AND " "y.code = x.datum_code " "WHERE " "x.auth_name = v1.target_crs_auth_name AND " "x.code = v1.target_crs_code AND " "x.type IN ('geographic 2D', 'geographic 3D') AND " "(y.publication_date IS NULL OR " "(y.publication_date >= '" + minDate + "'))) "; } } if (criterionOnIntermediateCRS.empty()) { criterionOnIntermediateCRS = "AND EXISTS(SELECT 1 FROM geodetic_crs x WHERE " "x.auth_name = v1.target_crs_auth_name AND " "x.code = v1.target_crs_code AND " "x.type IN ('geographic 2D', 'geographic 3D')) "; } sql += criterionOnIntermediateCRS; } auto params = ListOfParams{sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode}; std::string additionalWhere( "AND v1.deprecated = 0 AND v2.deprecated = 0 " "AND intersects_bbox(south_lat1, west_lon1, north_lat1, east_lon1, " "south_lat2, west_lon2, north_lat2, east_lon2) = 1 "); if (!allowedAuthorities.empty()) { additionalWhere += "AND v1.auth_name IN ("; for (size_t i = 0; i < allowedAuthorities.size(); i++) { if (i > 0) additionalWhere += ','; additionalWhere += '?'; } additionalWhere += ") AND v2.auth_name IN ("; for (size_t i = 0; i < allowedAuthorities.size(); i++) { if (i > 0) additionalWhere += ','; additionalWhere += '?'; } additionalWhere += ')'; for (const auto &allowedAuthority : allowedAuthorities) { params.emplace_back(allowedAuthority); } for (const auto &allowedAuthority : allowedAuthorities) { params.emplace_back(allowedAuthority); } } if (d->hasAuthorityRestriction()) { additionalWhere += "AND v1.auth_name = ? AND v2.auth_name = ? "; params.emplace_back(d->authority()); params.emplace_back(d->authority()); } for (const auto &extent : {intersectingExtent1, intersectingExtent2}) { if (extent) { const auto &geogExtent = extent->geographicElements(); if (geogExtent.size() == 1) { auto bbox = dynamic_cast( geogExtent[0].get()); if (bbox) { const double south_lat = bbox->southBoundLatitude(); const double west_lon = bbox->westBoundLongitude(); const double north_lat = bbox->northBoundLatitude(); const double east_lon = bbox->eastBoundLongitude(); if (south_lat != -90.0 || west_lon != -180.0 || north_lat != 90.0 || east_lon != 180.0) { additionalWhere += "AND intersects_bbox(south_lat1, " "west_lon1, north_lat1, east_lon1, ?, ?, ?, ?) AND " "intersects_bbox(south_lat2, west_lon2, " "north_lat2, east_lon2, ?, ?, ?, ?) "; params.emplace_back(south_lat); params.emplace_back(west_lon); params.emplace_back(north_lat); params.emplace_back(east_lon); params.emplace_back(south_lat); params.emplace_back(west_lon); params.emplace_back(north_lat); params.emplace_back(east_lon); } } } } } const auto buildIntermediateWhere = [&intermediateCRSAuthCodes](const std::string &first_field, const std::string &second_field) { if (intermediateCRSAuthCodes.empty()) { return std::string(); } std::string l_sql(" AND ("); for (size_t i = 0; i < intermediateCRSAuthCodes.size(); ++i) { if (i > 0) { l_sql += " OR"; } l_sql += "(v1." + first_field + "_crs_auth_name = ? AND "; l_sql += "v1." + first_field + "_crs_code = ? AND "; l_sql += "v2." + second_field + "_crs_auth_name = ? AND "; l_sql += "v2." + second_field + "_crs_code = ?) "; } l_sql += ')'; return l_sql; }; std::string intermediateWhere = buildIntermediateWhere("target", "source"); for (const auto &pair : intermediateCRSAuthCodes) { params.emplace_back(pair.first); params.emplace_back(pair.second); params.emplace_back(pair.first); params.emplace_back(pair.second); } auto res = d->run(sql + additionalWhere + intermediateWhere + orderBy, params); const auto filterOutSuperseded = [](SQLResultSet &&resultSet) { std::set> setTransf1; std::set> setTransf2; for (const auto &row : resultSet) { // table1 const auto &auth_name1 = row[1]; const auto &code1 = row[2]; // accuracy1 // table2 const auto &auth_name2 = row[5]; const auto &code2 = row[6]; setTransf1.insert( std::pair(auth_name1, code1)); setTransf2.insert( std::pair(auth_name2, code2)); } SQLResultSet filteredResultSet; for (const auto &row : resultSet) { const auto &replacement_auth_name1 = row[16]; const auto &replacement_code1 = row[17]; const auto &replacement_auth_name2 = row[18]; const auto &replacement_code2 = row[19]; if (!replacement_auth_name1.empty() && setTransf1.find(std::pair( replacement_auth_name1, replacement_code1)) != setTransf1.end()) { // Skip transformations that are superseded by others that got // returned in the result set. continue; } if (!replacement_auth_name2.empty() && setTransf2.find(std::pair( replacement_auth_name2, replacement_code2)) != setTransf2.end()) { // Skip transformations that are superseded by others that got // returned in the result set. continue; } filteredResultSet.emplace_back(row); } return filteredResultSet; }; if (discardSuperseded) { res = filterOutSuperseded(std::move(res)); } const auto checkPivotForETRFToETRF = [ETRFtoETRF, &sourceCRS, &targetCRS](const crs::CRSPtr &intermediateCRS) { // Make sure that ETRF2000 to ETRF2014 doesn't go through ITRF9x or // ITRF>2014 if (ETRFtoETRF && intermediateCRS && starts_with(intermediateCRS->nameStr(), "ITRF")) { const auto normalizeDate = [](int v) { return (v >= 80 && v <= 99) ? v + 1900 : v; }; const int srcDate = normalizeDate( atoi(sourceCRS->nameStr().c_str() + strlen("ETRF"))); const int tgtDate = normalizeDate( atoi(targetCRS->nameStr().c_str() + strlen("ETRF"))); const int intermDate = normalizeDate( atoi(intermediateCRS->nameStr().c_str() + strlen("ITRF"))); if (srcDate > 0 && tgtDate > 0 && intermDate > 0) { if (intermDate < std::min(srcDate, tgtDate) || intermDate > std::max(srcDate, tgtDate)) { return false; } } } return true; }; for (const auto &row : res) { const auto &table1 = row[0]; const auto &auth_name1 = row[1]; const auto &code1 = row[2]; // const auto &accuracy1 = row[3]; const auto &table2 = row[4]; const auto &auth_name2 = row[5]; const auto &code2 = row[6]; // const auto &accuracy2 = row[7]; try { auto op1 = d->createFactory(auth_name1) ->createCoordinateOperation( code1, true, usePROJAlternativeGridNames, table1); if (useIrrelevantPivot(op1, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } if (!checkPivotForETRFToETRF(op1->targetCRS())) { continue; } auto op2 = d->createFactory(auth_name2) ->createCoordinateOperation( code2, true, usePROJAlternativeGridNames, table2); if (useIrrelevantPivot(op2, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } listTmp.emplace_back( operation::ConcatenatedOperation::createComputeMetadata( {std::move(op1), std::move(op2)}, false)); } catch (const std::exception &e) { // Mostly for debugging purposes when using an inconsistent // database if (getenv("PROJ_IGNORE_INSTANTIATION_ERRORS")) { fprintf(stderr, "Ignoring invalid operation: %s\n", e.what()); } else { throw; } } } // Case (source->intermediate) and (target->intermediate) sql = sqlProlog + "ON v1.target_crs_auth_name = v2.target_crs_auth_name " "AND v1.target_crs_code = v2.target_crs_code " + joinArea + "WHERE v1.source_crs_auth_name = ? AND v1.source_crs_code = ? " "AND v2.source_crs_auth_name = ? AND v2.source_crs_code = ? "; if (allowedIntermediateObjectType == ObjectType::GEOGRAPHIC_CRS) { sql += criterionOnIntermediateCRS; } intermediateWhere = buildIntermediateWhere("target", "target"); res = d->run(sql + additionalWhere + intermediateWhere + orderBy, params); if (discardSuperseded) { res = filterOutSuperseded(std::move(res)); } for (const auto &row : res) { const auto &table1 = row[0]; const auto &auth_name1 = row[1]; const auto &code1 = row[2]; // const auto &accuracy1 = row[3]; const auto &table2 = row[4]; const auto &auth_name2 = row[5]; const auto &code2 = row[6]; // const auto &accuracy2 = row[7]; try { auto op1 = d->createFactory(auth_name1) ->createCoordinateOperation( code1, true, usePROJAlternativeGridNames, table1); if (useIrrelevantPivot(op1, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } if (!checkPivotForETRFToETRF(op1->targetCRS())) { continue; } auto op2 = d->createFactory(auth_name2) ->createCoordinateOperation( code2, true, usePROJAlternativeGridNames, table2); if (useIrrelevantPivot(op2, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } listTmp.emplace_back( operation::ConcatenatedOperation::createComputeMetadata( {std::move(op1), op2->inverse()}, false)); } catch (const std::exception &e) { // Mostly for debugging purposes when using an inconsistent // database if (getenv("PROJ_IGNORE_INSTANTIATION_ERRORS")) { fprintf(stderr, "Ignoring invalid operation: %s\n", e.what()); } else { throw; } } } // Case (intermediate->source) and (intermediate->target) sql = sqlProlog + "ON v1.source_crs_auth_name = v2.source_crs_auth_name " "AND v1.source_crs_code = v2.source_crs_code " + joinArea + "WHERE v1.target_crs_auth_name = ? AND v1.target_crs_code = ? " "AND v2.target_crs_auth_name = ? AND v2.target_crs_code = ? "; if (allowedIntermediateObjectType == ObjectType::GEOGRAPHIC_CRS) { if (!minDate.empty()) { criterionOnIntermediateCRS = "AND EXISTS(SELECT 1 FROM geodetic_crs x " "JOIN geodetic_datum y " "ON " "y.auth_name = x.datum_auth_name AND " "y.code = x.datum_code " "WHERE " "x.auth_name = v1.source_crs_auth_name AND " "x.code = v1.source_crs_code AND " "x.type IN ('geographic 2D', 'geographic 3D') AND " "(y.publication_date IS NULL OR " "(y.publication_date >= '" + minDate + "'))) "; } else { criterionOnIntermediateCRS = "AND EXISTS(SELECT 1 FROM geodetic_crs x WHERE " "x.auth_name = v1.source_crs_auth_name AND " "x.code = v1.source_crs_code AND " "x.type IN ('geographic 2D', 'geographic 3D')) "; } sql += criterionOnIntermediateCRS; } intermediateWhere = buildIntermediateWhere("source", "source"); res = d->run(sql + additionalWhere + intermediateWhere + orderBy, params); if (discardSuperseded) { res = filterOutSuperseded(std::move(res)); } for (const auto &row : res) { const auto &table1 = row[0]; const auto &auth_name1 = row[1]; const auto &code1 = row[2]; // const auto &accuracy1 = row[3]; const auto &table2 = row[4]; const auto &auth_name2 = row[5]; const auto &code2 = row[6]; // const auto &accuracy2 = row[7]; try { auto op1 = d->createFactory(auth_name1) ->createCoordinateOperation( code1, true, usePROJAlternativeGridNames, table1); if (useIrrelevantPivot(op1, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } if (!checkPivotForETRFToETRF(op1->sourceCRS())) { continue; } auto op2 = d->createFactory(auth_name2) ->createCoordinateOperation( code2, true, usePROJAlternativeGridNames, table2); if (useIrrelevantPivot(op2, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } listTmp.emplace_back( operation::ConcatenatedOperation::createComputeMetadata( {op1->inverse(), std::move(op2)}, false)); } catch (const std::exception &e) { // Mostly for debugging purposes when using an inconsistent // database if (getenv("PROJ_IGNORE_INSTANTIATION_ERRORS")) { fprintf(stderr, "Ignoring invalid operation: %s\n", e.what()); } else { throw; } } } // Case (intermediate->source) and (target->intermediate) sql = sqlProlog + "ON v1.source_crs_auth_name = v2.target_crs_auth_name " "AND v1.source_crs_code = v2.target_crs_code " + joinArea + "WHERE v1.target_crs_auth_name = ? AND v1.target_crs_code = ? " "AND v2.source_crs_auth_name = ? AND v2.source_crs_code = ? "; if (allowedIntermediateObjectType == ObjectType::GEOGRAPHIC_CRS) { sql += criterionOnIntermediateCRS; } intermediateWhere = buildIntermediateWhere("source", "target"); res = d->run(sql + additionalWhere + intermediateWhere + orderBy, params); if (discardSuperseded) { res = filterOutSuperseded(std::move(res)); } for (const auto &row : res) { const auto &table1 = row[0]; const auto &auth_name1 = row[1]; const auto &code1 = row[2]; // const auto &accuracy1 = row[3]; const auto &table2 = row[4]; const auto &auth_name2 = row[5]; const auto &code2 = row[6]; // const auto &accuracy2 = row[7]; try { auto op1 = d->createFactory(auth_name1) ->createCoordinateOperation( code1, true, usePROJAlternativeGridNames, table1); if (useIrrelevantPivot(op1, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } if (!checkPivotForETRFToETRF(op1->sourceCRS())) { continue; } auto op2 = d->createFactory(auth_name2) ->createCoordinateOperation( code2, true, usePROJAlternativeGridNames, table2); if (useIrrelevantPivot(op2, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { continue; } listTmp.emplace_back( operation::ConcatenatedOperation::createComputeMetadata( {op1->inverse(), op2->inverse()}, false)); } catch (const std::exception &e) { // Mostly for debugging purposes when using an inconsistent // database if (getenv("PROJ_IGNORE_INSTANTIATION_ERRORS")) { fprintf(stderr, "Ignoring invalid operation: %s\n", e.what()); } else { throw; } } } std::vector list; for (const auto &op : listTmp) { if (!discardIfMissingGrid || !d->rejectOpDueToMissingGrid(op, considerKnownGridsAsAvailable)) { list.emplace_back(op); } } return list; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct TrfmInfo { std::string situation{}; std::string table_name{}; std::string auth_name{}; std::string code{}; std::string name{}; double west = 0; double south = 0; double east = 0; double north = 0; }; // --------------------------------------------------------------------------- std::vector AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates( const crs::CRSNNPtr &sourceCRS, const std::string &sourceCRSAuthName, const std::string &sourceCRSCode, const crs::CRSNNPtr &targetCRS, const std::string &targetCRSAuthName, const std::string &targetCRSCode, bool usePROJAlternativeGridNames, bool discardIfMissingGrid, bool considerKnownGridsAsAvailable, bool discardSuperseded, const std::vector &allowedAuthorities, const metadata::ExtentPtr &intersectingExtent1, const metadata::ExtentPtr &intersectingExtent2) const { std::vector listTmp; if (sourceCRSAuthName == targetCRSAuthName && sourceCRSCode == targetCRSCode) { return listTmp; } const auto sourceGeodCRS = dynamic_cast(sourceCRS.get()); const auto targetGeodCRS = dynamic_cast(targetCRS.get()); if (!sourceGeodCRS || !targetGeodCRS) { return listTmp; } const auto GetListCRSWithSameDatum = [this](const crs::GeodeticCRS *crs, const std::string &crsAuthName, const std::string &crsCode) { // Find all geodetic CRS that share the same datum as the CRS SQLResultSet listCRS; const common::IdentifiedObject *obj = crs->datum().get(); if (obj == nullptr) obj = crs->datumEnsemble().get(); assert(obj != nullptr); const auto &ids = obj->identifiers(); std::string datumAuthName; std::string datumCode; if (!ids.empty()) { const auto &id = ids.front(); datumAuthName = *(id->codeSpace()); datumCode = id->code(); } else { const auto res = d->run("SELECT datum_auth_name, datum_code FROM " "geodetic_crs WHERE auth_name = ? AND code = ?", {crsAuthName, crsCode}); if (res.size() != 1) { return listCRS; } const auto &row = res.front(); datumAuthName = row[0]; datumCode = row[1]; } listCRS = d->run("SELECT auth_name, code FROM geodetic_crs WHERE " "datum_auth_name = ? AND datum_code = ? AND deprecated = 0", {datumAuthName, datumCode}); if (listCRS.empty()) { // Can happen if the CRS is deprecated listCRS.emplace_back(SQLRow{crsAuthName, crsCode}); } return listCRS; }; const SQLResultSet listSourceCRS = GetListCRSWithSameDatum( sourceGeodCRS, sourceCRSAuthName, sourceCRSCode); const SQLResultSet listTargetCRS = GetListCRSWithSameDatum( targetGeodCRS, targetCRSAuthName, targetCRSCode); if (listSourceCRS.empty() || listTargetCRS.empty()) { // would happen only if we had CRS objects in the database without a // link to a datum. return listTmp; } ListOfParams params; const auto BuildSQLPart = [this, &allowedAuthorities, ¶ms, &listSourceCRS, &listTargetCRS](bool isSourceCRS, bool selectOnTarget) { std::string situation; if (isSourceCRS) situation = "src"; else situation = "tgt"; if (selectOnTarget) situation += "_is_tgt"; else situation += "_is_src"; const std::string prefix1(selectOnTarget ? "source" : "target"); const std::string prefix2(selectOnTarget ? "target" : "source"); std::string sql("SELECT '"); sql += situation; sql += "' as situation, v.table_name, v.auth_name, " "v.code, v.name, gcrs.datum_auth_name, gcrs.datum_code, " "a.west_lon, a.south_lat, a.east_lon, a.north_lat " "FROM coordinate_operation_view v " "JOIN geodetic_crs gcrs on gcrs.auth_name = "; sql += prefix1; sql += "_crs_auth_name AND gcrs.code = "; sql += prefix1; sql += "_crs_code " "LEFT JOIN usage u ON " "u.object_table_name = v.table_name AND " "u.object_auth_name = v.auth_name AND " "u.object_code = v.code " "LEFT JOIN extent a " "ON a.auth_name = u.extent_auth_name AND " "a.code = u.extent_code " "WHERE v.deprecated = 0 AND ("; std::string cond; const auto &list = isSourceCRS ? listSourceCRS : listTargetCRS; for (const auto &row : list) { if (!cond.empty()) cond += " OR "; cond += '('; cond += prefix2; cond += "_crs_auth_name = ? AND "; cond += prefix2; cond += "_crs_code = ?)"; params.emplace_back(row[0]); params.emplace_back(row[1]); } sql += cond; sql += ") "; if (!allowedAuthorities.empty()) { sql += "AND v.auth_name IN ("; for (size_t i = 0; i < allowedAuthorities.size(); i++) { if (i > 0) sql += ','; sql += '?'; } sql += ") "; for (const auto &allowedAuthority : allowedAuthorities) { params.emplace_back(allowedAuthority); } } if (d->hasAuthorityRestriction()) { sql += "AND v.auth_name = ? "; params.emplace_back(d->authority()); } return sql; }; std::string sql(BuildSQLPart(true, true)); sql += "UNION ALL "; sql += BuildSQLPart(false, true); sql += "UNION ALL "; sql += BuildSQLPart(true, false); sql += "UNION ALL "; sql += BuildSQLPart(false, false); // fprintf(stderr, "sql : %s\n", sql.c_str()); // Find all operations that have as source/target CRS a CRS that // share the same datum as the source or targetCRS const auto res = d->run(sql, params); std::map> mapIntermDatumOfSource; std::map> mapIntermDatumOfTarget; for (const auto &row : res) { try { TrfmInfo trfm; trfm.situation = row[0]; trfm.table_name = row[1]; trfm.auth_name = row[2]; trfm.code = row[3]; trfm.name = row[4]; const auto &datum_auth_name = row[5]; const auto &datum_code = row[6]; trfm.west = c_locale_stod(row[7]); trfm.south = c_locale_stod(row[8]); trfm.east = c_locale_stod(row[9]); trfm.north = c_locale_stod(row[10]); const std::string key = std::string(datum_auth_name).append(":").append(datum_code); if (trfm.situation == "src_is_tgt" || trfm.situation == "src_is_src") mapIntermDatumOfSource[key].emplace_back(std::move(trfm)); else mapIntermDatumOfTarget[key].emplace_back(std::move(trfm)); } catch (const std::exception &) { } } std::vector extraBbox; for (const auto &extent : {intersectingExtent1, intersectingExtent2}) { if (extent) { const auto &geogExtent = extent->geographicElements(); if (geogExtent.size() == 1) { auto bbox = dynamic_cast( geogExtent[0].get()); if (bbox) { const double south_lat = bbox->southBoundLatitude(); const double west_lon = bbox->westBoundLongitude(); const double north_lat = bbox->northBoundLatitude(); const double east_lon = bbox->eastBoundLongitude(); if (south_lat != -90.0 || west_lon != -180.0 || north_lat != 90.0 || east_lon != 180.0) { extraBbox.emplace_back(bbox); } } } } } std::map oMapTrfmKeyToOp; std::list> candidates; std::map setOfTransformations; const auto MakeKey = [](const TrfmInfo &trfm) { return trfm.table_name + '_' + trfm.auth_name + '_' + trfm.code; }; // Find transformations that share a pivot datum, and do bbox filtering for (const auto &kvSource : mapIntermDatumOfSource) { const auto &listTrmfSource = kvSource.second; auto iter = mapIntermDatumOfTarget.find(kvSource.first); if (iter == mapIntermDatumOfTarget.end()) continue; const auto &listTrfmTarget = iter->second; for (const auto &trfmSource : listTrmfSource) { auto bbox1 = metadata::GeographicBoundingBox::create( trfmSource.west, trfmSource.south, trfmSource.east, trfmSource.north); bool okBbox1 = true; for (const auto bbox : extraBbox) okBbox1 &= bbox->intersects(bbox1); if (!okBbox1) continue; const std::string key1 = MakeKey(trfmSource); for (const auto &trfmTarget : listTrfmTarget) { auto bbox2 = metadata::GeographicBoundingBox::create( trfmTarget.west, trfmTarget.south, trfmTarget.east, trfmTarget.north); if (!bbox1->intersects(bbox2)) continue; bool okBbox2 = true; for (const auto bbox : extraBbox) okBbox2 &= bbox->intersects(bbox2); if (!okBbox2) continue; operation::CoordinateOperationPtr op1; if (oMapTrfmKeyToOp.find(key1) == oMapTrfmKeyToOp.end()) { auto op1NN = d->createFactory(trfmSource.auth_name) ->createCoordinateOperation( trfmSource.code, true, usePROJAlternativeGridNames, trfmSource.table_name); op1 = op1NN.as_nullable(); if (useIrrelevantPivot(op1NN, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { op1.reset(); } oMapTrfmKeyToOp[key1] = op1; } else { op1 = oMapTrfmKeyToOp[key1]; } if (op1 == nullptr) continue; const std::string key2 = MakeKey(trfmTarget); operation::CoordinateOperationPtr op2; if (oMapTrfmKeyToOp.find(key2) == oMapTrfmKeyToOp.end()) { auto op2NN = d->createFactory(trfmTarget.auth_name) ->createCoordinateOperation( trfmTarget.code, true, usePROJAlternativeGridNames, trfmTarget.table_name); op2 = op2NN.as_nullable(); if (useIrrelevantPivot(op2NN, sourceCRSAuthName, sourceCRSCode, targetCRSAuthName, targetCRSCode)) { op2.reset(); } oMapTrfmKeyToOp[key2] = op2; } else { op2 = oMapTrfmKeyToOp[key2]; } if (op2 == nullptr) continue; candidates.emplace_back( std::pair(trfmSource, trfmTarget)); setOfTransformations[key1] = trfmSource; setOfTransformations[key2] = trfmTarget; } } } std::set setSuperseded; if (discardSuperseded && !setOfTransformations.empty()) { std::string findSupersededSql( "SELECT superseded_table_name, " "superseded_auth_name, superseded_code, " "replacement_auth_name, replacement_code " "FROM supersession WHERE same_source_target_crs = 1 AND ("); bool findSupersededFirstWhere = true; ListOfParams findSupersededParams; const auto keyMapSupersession = [](const std::string &table_name, const std::string &auth_name, const std::string &code) { return table_name + auth_name + code; }; std::set> setTransf; for (const auto &kv : setOfTransformations) { const auto &table = kv.second.table_name; const auto &auth_name = kv.second.auth_name; const auto &code = kv.second.code; if (!findSupersededFirstWhere) findSupersededSql += " OR "; findSupersededFirstWhere = false; findSupersededSql += "(superseded_table_name = ? AND replacement_table_name = " "superseded_table_name AND superseded_auth_name = ? AND " "superseded_code = ?)"; findSupersededParams.push_back(table); findSupersededParams.push_back(auth_name); findSupersededParams.push_back(code); setTransf.insert( std::pair(auth_name, code)); } findSupersededSql += ')'; std::map>> mapSupersession; const auto resSuperseded = d->run(findSupersededSql, findSupersededParams); for (const auto &row : resSuperseded) { const auto &superseded_table_name = row[0]; const auto &superseded_auth_name = row[1]; const auto &superseded_code = row[2]; const auto &replacement_auth_name = row[3]; const auto &replacement_code = row[4]; mapSupersession[keyMapSupersession(superseded_table_name, superseded_auth_name, superseded_code)] .push_back(std::pair( replacement_auth_name, replacement_code)); } for (const auto &kv : setOfTransformations) { const auto &table = kv.second.table_name; const auto &auth_name = kv.second.auth_name; const auto &code = kv.second.code; const auto iter = mapSupersession.find( keyMapSupersession(table, auth_name, code)); if (iter != mapSupersession.end()) { bool foundReplacement = false; for (const auto &replacement : iter->second) { const auto &replacement_auth_name = replacement.first; const auto &replacement_code = replacement.second; if (setTransf.find(std::pair( replacement_auth_name, replacement_code)) != setTransf.end()) { // Skip transformations that are superseded by others // that got // returned in the result set. foundReplacement = true; break; } } if (foundReplacement) { setSuperseded.insert(kv.first); } } } } std::string sourceDatumPubDate; const auto sourceDatum = sourceGeodCRS->datumNonNull(d->context()); if (sourceDatum->publicationDate().has_value()) { sourceDatumPubDate = sourceDatum->publicationDate()->toString(); } std::string targetDatumPubDate; const auto targetDatum = targetGeodCRS->datumNonNull(d->context()); if (targetDatum->publicationDate().has_value()) { targetDatumPubDate = targetDatum->publicationDate()->toString(); } const std::string mostAncientDatumPubDate = (!targetDatumPubDate.empty() && (sourceDatumPubDate.empty() || targetDatumPubDate < sourceDatumPubDate)) ? targetDatumPubDate : sourceDatumPubDate; auto opFactory = operation::CoordinateOperationFactory::create(); for (const auto &pair : candidates) { const auto &trfmSource = pair.first; const auto &trfmTarget = pair.second; const std::string key1 = MakeKey(trfmSource); const std::string key2 = MakeKey(trfmTarget); if (setSuperseded.find(key1) != setSuperseded.end() || setSuperseded.find(key2) != setSuperseded.end()) { continue; } auto op1 = oMapTrfmKeyToOp[key1]; auto op2 = oMapTrfmKeyToOp[key2]; auto op1NN = NN_NO_CHECK(op1); auto op2NN = NN_NO_CHECK(op2); if (trfmSource.situation == "src_is_tgt") op1NN = op1NN->inverse(); if (trfmTarget.situation == "tgt_is_src") op2NN = op2NN->inverse(); const auto &op1Source = op1NN->sourceCRS(); const auto &op1Target = op1NN->targetCRS(); const auto &op2Source = op2NN->sourceCRS(); const auto &op2Target = op2NN->targetCRS(); if (!(op1Source && op1Target && op2Source && op2Target)) { continue; } // Skip operations using a datum that is older than the source or // target datum (e.g to avoid ED50 to WGS84 to go through NTF) if (!mostAncientDatumPubDate.empty()) { const auto isOlderCRS = [this, &mostAncientDatumPubDate]( const crs::CRSPtr &crs) { const auto geogCRS = dynamic_cast(crs.get()); if (geogCRS) { const auto datum = geogCRS->datumNonNull(d->context()); // Hum, theoretically we'd want to check // datum->publicationDate()->toString() < // mostAncientDatumPubDate but that would exclude doing // IG05/12 Intermediate CRS to ITRF2014 through ITRF2008, // since IG05/12 Intermediate CRS has been published later // than ITRF2008. So use a cut of date for ancient vs // "modern" era. constexpr const char *CUT_OFF_DATE = "1900-01-01"; if (datum->publicationDate().has_value() && datum->publicationDate()->toString() < CUT_OFF_DATE && mostAncientDatumPubDate > CUT_OFF_DATE) { return true; } } return false; }; if (isOlderCRS(op1Source) || isOlderCRS(op1Target) || isOlderCRS(op2Source) || isOlderCRS(op2Target)) continue; } std::vector steps; if (!sourceCRS->isEquivalentTo( op1Source.get(), util::IComparable::Criterion::EQUIVALENT)) { auto opFirst = opFactory->createOperation(sourceCRS, NN_NO_CHECK(op1Source)); assert(opFirst); steps.emplace_back(NN_NO_CHECK(opFirst)); } steps.emplace_back(op1NN); if (!op1Target->isEquivalentTo( op2Source.get(), util::IComparable::Criterion::EQUIVALENT)) { auto opMiddle = opFactory->createOperation(NN_NO_CHECK(op1Target), NN_NO_CHECK(op2Source)); assert(opMiddle); steps.emplace_back(NN_NO_CHECK(opMiddle)); } steps.emplace_back(op2NN); if (!op2Target->isEquivalentTo( targetCRS.get(), util::IComparable::Criterion::EQUIVALENT)) { auto opLast = opFactory->createOperation(NN_NO_CHECK(op2Target), targetCRS); assert(opLast); steps.emplace_back(NN_NO_CHECK(opLast)); } listTmp.emplace_back( operation::ConcatenatedOperation::createComputeMetadata(steps, false)); } std::vector list; for (const auto &op : listTmp) { if (!discardIfMissingGrid || !d->rejectOpDueToMissingGrid(op, considerKnownGridsAsAvailable)) { list.emplace_back(op); } } return list; } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns the authority name associated to this factory. * @return name. */ const std::string &AuthorityFactory::getAuthority() PROJ_PURE_DEFN { return d->authority(); } // --------------------------------------------------------------------------- /** \brief Returns the set of authority codes of the given object type. * * @param type Object type. * @param allowDeprecated whether we should return deprecated objects as well. * @return the set of authority codes for spatial reference objects of the given * type * @throw FactoryException in case of error. */ std::set AuthorityFactory::getAuthorityCodes(const ObjectType &type, bool allowDeprecated) const { std::string sql; switch (type) { case ObjectType::PRIME_MERIDIAN: sql = "SELECT code FROM prime_meridian WHERE "; break; case ObjectType::ELLIPSOID: sql = "SELECT code FROM ellipsoid WHERE "; break; case ObjectType::DATUM: sql = "SELECT code FROM object_view WHERE table_name IN " "('geodetic_datum', 'vertical_datum', 'engineering_datum') AND "; break; case ObjectType::GEODETIC_REFERENCE_FRAME: sql = "SELECT code FROM geodetic_datum WHERE "; break; case ObjectType::DYNAMIC_GEODETIC_REFERENCE_FRAME: sql = "SELECT code FROM geodetic_datum WHERE " "frame_reference_epoch IS NOT NULL AND "; break; case ObjectType::VERTICAL_REFERENCE_FRAME: sql = "SELECT code FROM vertical_datum WHERE "; break; case ObjectType::DYNAMIC_VERTICAL_REFERENCE_FRAME: sql = "SELECT code FROM vertical_datum WHERE " "frame_reference_epoch IS NOT NULL AND "; break; case ObjectType::ENGINEERING_DATUM: sql = "SELECT code FROM engineering_datum WHERE "; break; case ObjectType::CRS: sql = "SELECT code FROM crs_view WHERE "; break; case ObjectType::GEODETIC_CRS: sql = "SELECT code FROM geodetic_crs WHERE "; break; case ObjectType::GEOCENTRIC_CRS: sql = "SELECT code FROM geodetic_crs WHERE type " "= " GEOCENTRIC_SINGLE_QUOTED " AND "; break; case ObjectType::GEOGRAPHIC_CRS: sql = "SELECT code FROM geodetic_crs WHERE type IN " "(" GEOG_2D_SINGLE_QUOTED "," GEOG_3D_SINGLE_QUOTED ") AND "; break; case ObjectType::GEOGRAPHIC_2D_CRS: sql = "SELECT code FROM geodetic_crs WHERE type = " GEOG_2D_SINGLE_QUOTED " AND "; break; case ObjectType::GEOGRAPHIC_3D_CRS: sql = "SELECT code FROM geodetic_crs WHERE type = " GEOG_3D_SINGLE_QUOTED " AND "; break; case ObjectType::VERTICAL_CRS: sql = "SELECT code FROM vertical_crs WHERE "; break; case ObjectType::PROJECTED_CRS: sql = "SELECT code FROM projected_crs WHERE "; break; case ObjectType::COMPOUND_CRS: sql = "SELECT code FROM compound_crs WHERE "; break; case ObjectType::ENGINEERING_CRS: sql = "SELECT code FROM engineering_crs WHERE "; break; case ObjectType::COORDINATE_OPERATION: sql = "SELECT code FROM coordinate_operation_with_conversion_view WHERE "; break; case ObjectType::CONVERSION: sql = "SELECT code FROM conversion WHERE "; break; case ObjectType::TRANSFORMATION: sql = "SELECT code FROM coordinate_operation_view WHERE table_name != " "'concatenated_operation' AND "; break; case ObjectType::CONCATENATED_OPERATION: sql = "SELECT code FROM concatenated_operation WHERE "; break; case ObjectType::DATUM_ENSEMBLE: sql = "SELECT code FROM object_view WHERE table_name IN " "('geodetic_datum', 'vertical_datum') AND " "type = 'ensemble' AND "; break; } sql += "auth_name = ?"; if (!allowDeprecated) { sql += " AND deprecated = 0"; } auto res = d->run(sql, {d->authority()}); std::set set; for (const auto &row : res) { set.insert(row[0]); } return set; } // --------------------------------------------------------------------------- /** \brief Gets a description of the object corresponding to a code. * * \note In case of several objects of different types with the same code, * one of them will be arbitrarily selected. But if a CRS object is found, it * will be selected. * * @param code Object code allocated by authority. (e.g. "4326") * @return description. * @throw NoSuchAuthorityCodeException if there is no matching object. * @throw FactoryException in case of other errors. */ std::string AuthorityFactory::getDescriptionText(const std::string &code) const { auto sql = "SELECT name, table_name FROM object_view WHERE auth_name = ? " "AND code = ? ORDER BY table_name"; auto sqlRes = d->runWithCodeParam(sql, code); if (sqlRes.empty()) { throw NoSuchAuthorityCodeException("object not found", d->authority(), code); } std::string text; for (const auto &row : sqlRes) { const auto &tableName = row[1]; if (tableName == "geodetic_crs" || tableName == "projected_crs" || tableName == "vertical_crs" || tableName == "compound_crs" || tableName == "engineering_crs") { return row[0]; } else if (text.empty()) { text = row[0]; } } return text; } // --------------------------------------------------------------------------- /** \brief Return a list of information on CRS objects * * This is functionally equivalent of listing the codes from an authority, * instantiating * a CRS object for each of them and getting the information from this CRS * object, but this implementation has much less overhead. * * @throw FactoryException in case of error. */ std::list AuthorityFactory::getCRSInfoList() const { const auto getSqlArea = [](const char *table_name) { std::string sql("LEFT JOIN usage u ON u.object_table_name = '"); sql += table_name; sql += "' AND " "u.object_auth_name = c.auth_name AND " "u.object_code = c.code " "LEFT JOIN extent a " "ON a.auth_name = u.extent_auth_name AND " "a.code = u.extent_code "; return sql; }; const auto getJoinCelestialBody = [](const char *crs_alias) { std::string sql("LEFT JOIN geodetic_datum gd ON gd.auth_name = "); sql += crs_alias; sql += ".datum_auth_name AND gd.code = "; sql += crs_alias; sql += ".datum_code " "LEFT JOIN ellipsoid e ON e.auth_name = gd.ellipsoid_auth_name " "AND e.code = gd.ellipsoid_code " "LEFT JOIN celestial_body cb ON " "cb.auth_name = e.celestial_body_auth_name " "AND cb.code = e.celestial_body_code "; return sql; }; std::string sql = "SELECT * FROM (" "SELECT c.auth_name, c.code, c.name, c.type, " "c.deprecated, " "a.west_lon, a.south_lat, a.east_lon, a.north_lat, " "a.description, NULL, cb.name FROM geodetic_crs c "; sql += getSqlArea("geodetic_crs"); sql += getJoinCelestialBody("c"); ListOfParams params; if (d->hasAuthorityRestriction()) { sql += "WHERE c.auth_name = ? "; params.emplace_back(d->authority()); } sql += "UNION ALL SELECT c.auth_name, c.code, c.name, 'projected', " "c.deprecated, " "a.west_lon, a.south_lat, a.east_lon, a.north_lat, " "a.description, cm.name, cb.name AS conversion_method_name FROM " "projected_crs c " "LEFT JOIN conversion_table conv ON " "c.conversion_auth_name = conv.auth_name AND " "c.conversion_code = conv.code " "LEFT JOIN conversion_method cm ON " "conv.method_auth_name = cm.auth_name AND " "conv.method_code = cm.code " "LEFT JOIN geodetic_crs gcrs ON " "gcrs.auth_name = c.geodetic_crs_auth_name " "AND gcrs.code = c.geodetic_crs_code "; sql += getSqlArea("projected_crs"); sql += getJoinCelestialBody("gcrs"); if (d->hasAuthorityRestriction()) { sql += "WHERE c.auth_name = ? "; params.emplace_back(d->authority()); } // FIXME: we can't handle non-EARTH vertical CRS for now sql += "UNION ALL SELECT c.auth_name, c.code, c.name, 'vertical', " "c.deprecated, " "a.west_lon, a.south_lat, a.east_lon, a.north_lat, " "a.description, NULL, 'Earth' FROM vertical_crs c "; sql += getSqlArea("vertical_crs"); if (d->hasAuthorityRestriction()) { sql += "WHERE c.auth_name = ? "; params.emplace_back(d->authority()); } // FIXME: we can't handle non-EARTH compound CRS for now sql += "UNION ALL SELECT c.auth_name, c.code, c.name, 'compound', " "c.deprecated, " "a.west_lon, a.south_lat, a.east_lon, a.north_lat, " "a.description, NULL, 'Earth' FROM compound_crs c "; sql += getSqlArea("compound_crs"); if (d->hasAuthorityRestriction()) { sql += "WHERE c.auth_name = ? "; params.emplace_back(d->authority()); } // FIXME: we can't handle non-EARTH compound CRS for now sql += "UNION ALL SELECT c.auth_name, c.code, c.name, 'engineering', " "c.deprecated, " "a.west_lon, a.south_lat, a.east_lon, a.north_lat, " "a.description, NULL, 'Earth' FROM engineering_crs c "; sql += getSqlArea("engineering_crs"); if (d->hasAuthorityRestriction()) { sql += "WHERE c.auth_name = ? "; params.emplace_back(d->authority()); } sql += ") r ORDER BY auth_name, code"; auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { AuthorityFactory::CRSInfo info; info.authName = row[0]; info.code = row[1]; info.name = row[2]; const auto &type = row[3]; if (type == GEOG_2D) { info.type = AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS; } else if (type == GEOG_3D) { info.type = AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS; } else if (type == GEOCENTRIC) { info.type = AuthorityFactory::ObjectType::GEOCENTRIC_CRS; } else if (type == OTHER) { info.type = AuthorityFactory::ObjectType::GEODETIC_CRS; } else if (type == PROJECTED) { info.type = AuthorityFactory::ObjectType::PROJECTED_CRS; } else if (type == VERTICAL) { info.type = AuthorityFactory::ObjectType::VERTICAL_CRS; } else if (type == COMPOUND) { info.type = AuthorityFactory::ObjectType::COMPOUND_CRS; } else if (type == ENGINEERING) { info.type = AuthorityFactory::ObjectType::ENGINEERING_CRS; } info.deprecated = row[4] == "1"; if (row[5].empty()) { info.bbox_valid = false; } else { info.bbox_valid = true; info.west_lon_degree = c_locale_stod(row[5]); info.south_lat_degree = c_locale_stod(row[6]); info.east_lon_degree = c_locale_stod(row[7]); info.north_lat_degree = c_locale_stod(row[8]); } info.areaName = row[9]; info.projectionMethodName = row[10]; info.celestialBodyName = row[11]; res.emplace_back(info); } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress AuthorityFactory::UnitInfo::UnitInfo() : authName{}, code{}, name{}, category{}, convFactor{}, projShortName{}, deprecated{} {} //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress AuthorityFactory::CelestialBodyInfo::CelestialBodyInfo() : authName{}, name{} {} //! @endcond // --------------------------------------------------------------------------- /** \brief Return the list of units. * @throw FactoryException in case of error. * * @since 7.1 */ std::list AuthorityFactory::getUnitList() const { std::string sql = "SELECT auth_name, code, name, type, conv_factor, " "proj_short_name, deprecated FROM unit_of_measure"; ListOfParams params; if (d->hasAuthorityRestriction()) { sql += " WHERE auth_name = ?"; params.emplace_back(d->authority()); } sql += " ORDER BY auth_name, code"; auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { AuthorityFactory::UnitInfo info; info.authName = row[0]; info.code = row[1]; info.name = row[2]; const std::string &raw_category(row[3]); if (raw_category == "length") { info.category = info.name.find(" per ") != std::string::npos ? "linear_per_time" : "linear"; } else if (raw_category == "angle") { info.category = info.name.find(" per ") != std::string::npos ? "angular_per_time" : "angular"; } else if (raw_category == "scale") { info.category = info.name.find(" per year") != std::string::npos || info.name.find(" per second") != std::string::npos ? "scale_per_time" : "scale"; } else { info.category = raw_category; } info.convFactor = row[4].empty() ? 0 : c_locale_stod(row[4]); info.projShortName = row[5]; info.deprecated = row[6] == "1"; res.emplace_back(info); } return res; } // --------------------------------------------------------------------------- /** \brief Return the list of celestial bodies. * @throw FactoryException in case of error. * * @since 8.1 */ std::list AuthorityFactory::getCelestialBodyList() const { std::string sql = "SELECT auth_name, name FROM celestial_body"; ListOfParams params; if (d->hasAuthorityRestriction()) { sql += " WHERE auth_name = ?"; params.emplace_back(d->authority()); } sql += " ORDER BY auth_name, name"; auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { AuthorityFactory::CelestialBodyInfo info; info.authName = row[0]; info.name = row[1]; res.emplace_back(info); } return res; } // --------------------------------------------------------------------------- /** \brief Gets the official name from a possibly alias name. * * @param aliasedName Alias name. * @param tableName Table name/category. Can help in case of ambiguities. * Or empty otherwise. * @param source Source of the alias. Can help in case of ambiguities. * Or empty otherwise. * @param tryEquivalentNameSpelling whether the comparison of aliasedName with * the alt_name column of the alias_name table should be done with using * metadata::Identifier::isEquivalentName() rather than strict string * comparison; * @param outTableName Table name in which the official name has been found. * @param outAuthName Authority name of the official name that has been found. * @param outCode Code of the official name that has been found. * @return official name (or empty if not found). * @throw FactoryException in case of error. */ std::string AuthorityFactory::getOfficialNameFromAlias( const std::string &aliasedName, const std::string &tableName, const std::string &source, bool tryEquivalentNameSpelling, std::string &outTableName, std::string &outAuthName, std::string &outCode) const { if (tryEquivalentNameSpelling) { std::string sql( "SELECT table_name, auth_name, code, alt_name FROM alias_name"); ListOfParams params; if (!tableName.empty()) { sql += " WHERE table_name = ?"; params.push_back(tableName); } if (!source.empty()) { if (!tableName.empty()) { sql += " AND "; } else { sql += " WHERE "; } sql += "source = ?"; params.push_back(source); } auto res = d->run(sql, params); if (res.empty()) { return std::string(); } for (const auto &row : res) { const auto &alt_name = row[3]; if (metadata::Identifier::isEquivalentName(alt_name.c_str(), aliasedName.c_str())) { outTableName = row[0]; outAuthName = row[1]; outCode = row[2]; sql = "SELECT name FROM \""; sql += replaceAll(outTableName, "\"", "\"\""); sql += "\" WHERE auth_name = ? AND code = ?"; res = d->run(sql, {outAuthName, outCode}); if (res.empty()) { // shouldn't happen normally return std::string(); } return res.front()[0]; } } return std::string(); } else { std::string sql( "SELECT table_name, auth_name, code FROM alias_name WHERE " "alt_name = ?"); ListOfParams params{aliasedName}; if (!tableName.empty()) { sql += " AND table_name = ?"; params.push_back(tableName); } if (!source.empty()) { sql += " AND source = ?"; params.push_back(source); } auto res = d->run(sql, params); if (res.empty()) { return std::string(); } params.clear(); sql.clear(); bool first = true; for (const auto &row : res) { if (!first) sql += " UNION ALL "; first = false; outTableName = row[0]; outAuthName = row[1]; outCode = row[2]; sql += "SELECT name, ? AS table_name, auth_name, code, deprecated " "FROM \""; sql += replaceAll(outTableName, "\"", "\"\""); sql += "\" WHERE auth_name = ? AND code = ?"; params.emplace_back(outTableName); params.emplace_back(outAuthName); params.emplace_back(outCode); } sql = "SELECT name, table_name, auth_name, code FROM (" + sql + ") x ORDER BY deprecated LIMIT 1"; res = d->run(sql, params); if (res.empty()) { // shouldn't happen normally return std::string(); } const auto &row = res.front(); outTableName = row[1]; outAuthName = row[2]; outCode = row[3]; return row[0]; } } // --------------------------------------------------------------------------- /** \brief Return a list of objects, identified by their name * * @param searchedName Searched name. Must be at least 2 character long. * @param allowedObjectTypes List of object types into which to search. If * empty, all object types will be searched. * @param approximateMatch Whether approximate name identification is allowed. * @param limitResultCount Maximum number of results to return. * Or 0 for unlimited. * @return list of matched objects. * @throw FactoryException in case of error. */ std::list AuthorityFactory::createObjectsFromName( const std::string &searchedName, const std::vector &allowedObjectTypes, bool approximateMatch, size_t limitResultCount) const { std::list res; const auto resTmp(createObjectsFromNameEx( searchedName, allowedObjectTypes, approximateMatch, limitResultCount)); for (const auto &pair : resTmp) { res.emplace_back(pair.first); } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return a list of objects, identifier by their name, with the name * on which the match occurred. * * The name on which the match occurred might be different from the object name, * if the match has been done on an alias name of that object. * * @param searchedName Searched name. Must be at least 2 character long. * @param allowedObjectTypes List of object types into which to search. If * empty, all object types will be searched. * @param approximateMatch Whether approximate name identification is allowed. * @param limitResultCount Maximum number of results to return. * Or 0 for unlimited. * @return list of matched objects. * @throw FactoryException in case of error. */ std::list AuthorityFactory::createObjectsFromNameEx( const std::string &searchedName, const std::vector &allowedObjectTypes, bool approximateMatch, size_t limitResultCount) const { std::string searchedNameWithoutDeprecated(searchedName); bool deprecated = false; if (ends_with(searchedNameWithoutDeprecated, " (deprecated)")) { deprecated = true; searchedNameWithoutDeprecated.resize( searchedNameWithoutDeprecated.size() - strlen(" (deprecated)")); } const std::string canonicalizedSearchedName( metadata::Identifier::canonicalizeName(searchedNameWithoutDeprecated)); if (canonicalizedSearchedName.size() <= 1) { return {}; } std::string sql( "SELECT table_name, auth_name, code, name, deprecated, is_alias " "FROM ("); const auto getTableAndTypeConstraints = [&allowedObjectTypes, &searchedName]() { typedef std::pair TableType; std::list res; // Hide ESRI D_ vertical datums const bool startsWithDUnderscore = starts_with(searchedName, "D_"); if (allowedObjectTypes.empty()) { for (const auto &tableName : {"prime_meridian", "ellipsoid", "geodetic_datum", "vertical_datum", "engineering_datum", "geodetic_crs", "projected_crs", "vertical_crs", "compound_crs", "engineering_crs", "conversion", "helmert_transformation", "grid_transformation", "other_transformation", "concatenated_operation"}) { if (!(startsWithDUnderscore && strcmp(tableName, "vertical_datum") == 0)) { res.emplace_back(TableType(tableName, std::string())); } } } else { for (const auto type : allowedObjectTypes) { switch (type) { case ObjectType::PRIME_MERIDIAN: res.emplace_back( TableType("prime_meridian", std::string())); break; case ObjectType::ELLIPSOID: res.emplace_back(TableType("ellipsoid", std::string())); break; case ObjectType::DATUM: res.emplace_back( TableType("geodetic_datum", std::string())); if (!startsWithDUnderscore) { res.emplace_back( TableType("vertical_datum", std::string())); res.emplace_back( TableType("engineering_datum", std::string())); } break; case ObjectType::GEODETIC_REFERENCE_FRAME: res.emplace_back( TableType("geodetic_datum", std::string())); break; case ObjectType::DYNAMIC_GEODETIC_REFERENCE_FRAME: res.emplace_back( TableType("geodetic_datum", "frame_reference_epoch")); break; case ObjectType::VERTICAL_REFERENCE_FRAME: res.emplace_back( TableType("vertical_datum", std::string())); break; case ObjectType::DYNAMIC_VERTICAL_REFERENCE_FRAME: res.emplace_back( TableType("vertical_datum", "frame_reference_epoch")); break; case ObjectType::ENGINEERING_DATUM: res.emplace_back( TableType("engineering_datum", std::string())); break; case ObjectType::CRS: res.emplace_back(TableType("geodetic_crs", std::string())); res.emplace_back(TableType("projected_crs", std::string())); res.emplace_back(TableType("vertical_crs", std::string())); res.emplace_back(TableType("compound_crs", std::string())); res.emplace_back( TableType("engineering_crs", std::string())); break; case ObjectType::GEODETIC_CRS: res.emplace_back(TableType("geodetic_crs", std::string())); break; case ObjectType::GEOCENTRIC_CRS: res.emplace_back(TableType("geodetic_crs", GEOCENTRIC)); break; case ObjectType::GEOGRAPHIC_CRS: res.emplace_back(TableType("geodetic_crs", GEOG_2D)); res.emplace_back(TableType("geodetic_crs", GEOG_3D)); break; case ObjectType::GEOGRAPHIC_2D_CRS: res.emplace_back(TableType("geodetic_crs", GEOG_2D)); break; case ObjectType::GEOGRAPHIC_3D_CRS: res.emplace_back(TableType("geodetic_crs", GEOG_3D)); break; case ObjectType::PROJECTED_CRS: res.emplace_back(TableType("projected_crs", std::string())); break; case ObjectType::VERTICAL_CRS: res.emplace_back(TableType("vertical_crs", std::string())); break; case ObjectType::COMPOUND_CRS: res.emplace_back(TableType("compound_crs", std::string())); break; case ObjectType::ENGINEERING_CRS: res.emplace_back( TableType("engineering_crs", std::string())); break; case ObjectType::COORDINATE_OPERATION: res.emplace_back(TableType("conversion", std::string())); res.emplace_back( TableType("helmert_transformation", std::string())); res.emplace_back( TableType("grid_transformation", std::string())); res.emplace_back( TableType("other_transformation", std::string())); res.emplace_back( TableType("concatenated_operation", std::string())); break; case ObjectType::CONVERSION: res.emplace_back(TableType("conversion", std::string())); break; case ObjectType::TRANSFORMATION: res.emplace_back( TableType("helmert_transformation", std::string())); res.emplace_back( TableType("grid_transformation", std::string())); res.emplace_back( TableType("other_transformation", std::string())); break; case ObjectType::CONCATENATED_OPERATION: res.emplace_back( TableType("concatenated_operation", std::string())); break; case ObjectType::DATUM_ENSEMBLE: res.emplace_back(TableType("geodetic_datum", "ensemble")); res.emplace_back(TableType("vertical_datum", "ensemble")); break; } } } return res; }; bool datumEnsembleAllowed = false; if (allowedObjectTypes.empty()) { datumEnsembleAllowed = true; } else { for (const auto type : allowedObjectTypes) { if (type == ObjectType::DATUM_ENSEMBLE) { datumEnsembleAllowed = true; break; } } } const auto listTableNameType = getTableAndTypeConstraints(); bool first = true; ListOfParams params; for (const auto &tableNameTypePair : listTableNameType) { if (!first) { sql += " UNION "; } first = false; sql += "SELECT '"; sql += tableNameTypePair.first; sql += "' AS table_name, auth_name, code, name, deprecated, " "0 AS is_alias FROM "; sql += tableNameTypePair.first; sql += " WHERE 1 = 1 "; if (!tableNameTypePair.second.empty()) { if (tableNameTypePair.second == "frame_reference_epoch") { sql += "AND frame_reference_epoch IS NOT NULL "; } else if (tableNameTypePair.second == "ensemble") { sql += "AND ensemble_accuracy IS NOT NULL "; } else { sql += "AND type = '"; sql += tableNameTypePair.second; sql += "' "; } } if (deprecated) { sql += "AND deprecated = 1 "; } if (!approximateMatch) { sql += "AND name = ? COLLATE NOCASE "; params.push_back(searchedNameWithoutDeprecated); } if (d->hasAuthorityRestriction()) { sql += "AND auth_name = ? "; params.emplace_back(d->authority()); } sql += " UNION SELECT '"; sql += tableNameTypePair.first; sql += "' AS table_name, " "ov.auth_name AS auth_name, " "ov.code AS code, a.alt_name AS name, " "ov.deprecated AS deprecated, 1 as is_alias FROM "; sql += tableNameTypePair.first; sql += " ov " "JOIN alias_name a ON " "ov.auth_name = a.auth_name AND ov.code = a.code WHERE " "a.table_name = '"; sql += tableNameTypePair.first; sql += "' "; if (!tableNameTypePair.second.empty()) { if (tableNameTypePair.second == "frame_reference_epoch") { sql += "AND ov.frame_reference_epoch IS NOT NULL "; } else if (tableNameTypePair.second == "ensemble") { sql += "AND ov.ensemble_accuracy IS NOT NULL "; } else { sql += "AND ov.type = '"; sql += tableNameTypePair.second; sql += "' "; } } if (deprecated) { sql += "AND ov.deprecated = 1 "; } if (!approximateMatch) { sql += "AND a.alt_name = ? COLLATE NOCASE "; params.push_back(searchedNameWithoutDeprecated); } if (d->hasAuthorityRestriction()) { sql += "AND ov.auth_name = ? "; params.emplace_back(d->authority()); } } sql += ") ORDER BY deprecated, is_alias, length(name), name"; if (limitResultCount > 0 && limitResultCount < static_cast(std::numeric_limits::max()) && !approximateMatch) { sql += " LIMIT "; sql += toString(static_cast(limitResultCount)); } std::list res; std::set> setIdentified; // Querying geodetic datum is a super hot path when importing from WKT1 // so cache results. if (allowedObjectTypes.size() == 1 && allowedObjectTypes[0] == ObjectType::GEODETIC_REFERENCE_FRAME && approximateMatch && d->authority().empty()) { auto &mapCanonicalizeGRFName = d->context()->getPrivate()->getMapCanonicalizeGRFName(); if (mapCanonicalizeGRFName.empty()) { auto sqlRes = d->run(sql, params); for (const auto &row : sqlRes) { const auto &name = row[3]; const auto &deprecatedStr = row[4]; const auto canonicalizedName( metadata::Identifier::canonicalizeName(name)); auto &v = mapCanonicalizeGRFName[canonicalizedName]; if (deprecatedStr == "0" || v.empty() || v.front()[4] == "1") { v.push_back(row); } } } auto iter = mapCanonicalizeGRFName.find(canonicalizedSearchedName); if (iter != mapCanonicalizeGRFName.end()) { const auto &listOfRow = iter->second; for (const auto &row : listOfRow) { const auto &auth_name = row[1]; const auto &code = row[2]; const auto key = std::pair(auth_name, code); if (setIdentified.find(key) != setIdentified.end()) { continue; } setIdentified.insert(key); auto factory = d->createFactory(auth_name); const auto &name = row[3]; res.emplace_back( PairObjectName(factory->createGeodeticDatum(code), name)); if (limitResultCount > 0 && res.size() == limitResultCount) { break; } } } else { for (const auto &pair : mapCanonicalizeGRFName) { const auto &listOfRow = pair.second; for (const auto &row : listOfRow) { const auto &name = row[3]; bool match = ci_find(name, searchedNameWithoutDeprecated) != std::string::npos; if (!match) { const auto &canonicalizedName(pair.first); match = ci_find(canonicalizedName, canonicalizedSearchedName) != std::string::npos; } if (!match) { continue; } const auto &auth_name = row[1]; const auto &code = row[2]; auto key = std::pair(auth_name, code); if (setIdentified.find(key) != setIdentified.end()) { continue; } setIdentified.insert(std::move(key)); auto factory = d->createFactory(auth_name); res.emplace_back(PairObjectName( factory->createGeodeticDatum(code), name)); if (limitResultCount > 0 && res.size() == limitResultCount) { break; } } if (limitResultCount > 0 && res.size() == limitResultCount) { break; } } } } else { auto sqlRes = d->run(sql, params); bool isFirst = true; bool firstIsDeprecated = false; size_t countExactMatch = 0; size_t countExactMatchOnAlias = 0; std::size_t hashCodeFirstMatch = 0; for (const auto &row : sqlRes) { const auto &name = row[3]; if (approximateMatch) { bool match = ci_find(name, searchedNameWithoutDeprecated) != std::string::npos; if (!match) { const auto canonicalizedName( metadata::Identifier::canonicalizeName(name)); match = ci_find(canonicalizedName, canonicalizedSearchedName) != std::string::npos; } if (!match) { continue; } } const auto &table_name = row[0]; const auto &auth_name = row[1]; const auto &code = row[2]; auto key = std::pair(auth_name, code); if (setIdentified.find(key) != setIdentified.end()) { continue; } setIdentified.insert(std::move(key)); const auto &deprecatedStr = row[4]; if (isFirst) { firstIsDeprecated = deprecatedStr == "1"; isFirst = false; } if (deprecatedStr == "1" && !res.empty() && !firstIsDeprecated) { break; } auto factory = d->createFactory(auth_name); auto getObject = [&factory, datumEnsembleAllowed]( const std::string &l_table_name, const std::string &l_code) -> common::IdentifiedObjectNNPtr { if (l_table_name == "prime_meridian") { return factory->createPrimeMeridian(l_code); } else if (l_table_name == "ellipsoid") { return factory->createEllipsoid(l_code); } else if (l_table_name == "geodetic_datum") { if (datumEnsembleAllowed) { datum::GeodeticReferenceFramePtr datum; datum::DatumEnsemblePtr datumEnsemble; constexpr bool turnEnsembleAsDatum = false; factory->createGeodeticDatumOrEnsemble( l_code, datum, datumEnsemble, turnEnsembleAsDatum); if (datum) { return NN_NO_CHECK(datum); } assert(datumEnsemble); return NN_NO_CHECK(datumEnsemble); } return factory->createGeodeticDatum(l_code); } else if (l_table_name == "vertical_datum") { if (datumEnsembleAllowed) { datum::VerticalReferenceFramePtr datum; datum::DatumEnsemblePtr datumEnsemble; constexpr bool turnEnsembleAsDatum = false; factory->createVerticalDatumOrEnsemble( l_code, datum, datumEnsemble, turnEnsembleAsDatum); if (datum) { return NN_NO_CHECK(datum); } assert(datumEnsemble); return NN_NO_CHECK(datumEnsemble); } return factory->createVerticalDatum(l_code); } else if (l_table_name == "engineering_datum") { return factory->createEngineeringDatum(l_code); } else if (l_table_name == "geodetic_crs") { return factory->createGeodeticCRS(l_code); } else if (l_table_name == "projected_crs") { return factory->createProjectedCRS(l_code); } else if (l_table_name == "vertical_crs") { return factory->createVerticalCRS(l_code); } else if (l_table_name == "compound_crs") { return factory->createCompoundCRS(l_code); } else if (l_table_name == "engineering_crs") { return factory->createEngineeringCRS(l_code); } else if (l_table_name == "conversion") { return factory->createConversion(l_code); } else if (l_table_name == "grid_transformation" || l_table_name == "helmert_transformation" || l_table_name == "other_transformation" || l_table_name == "concatenated_operation") { return factory->createCoordinateOperation(l_code, true); } throw std::runtime_error("Unsupported table_name"); }; const auto obj = getObject(table_name, code); if (metadata::Identifier::isEquivalentName( obj->nameStr().c_str(), searchedName.c_str(), false)) { countExactMatch++; } else if (metadata::Identifier::isEquivalentName( name.c_str(), searchedName.c_str(), false)) { countExactMatchOnAlias++; } const auto objPtr = obj.get(); if (res.empty()) { hashCodeFirstMatch = typeid(*objPtr).hash_code(); } else if (hashCodeFirstMatch != typeid(*objPtr).hash_code()) { hashCodeFirstMatch = 0; } res.emplace_back(PairObjectName(obj, name)); if (limitResultCount > 0 && res.size() == limitResultCount) { break; } } // If we found several objects that are an exact match, and all objects // have the same type, and we are not in approximate mode, only keep the // objects with the exact name match. if ((countExactMatch + countExactMatchOnAlias) >= 1 && hashCodeFirstMatch != 0 && !approximateMatch) { std::list resTmp; bool biggerDifferencesAllowed = (countExactMatch == 0); for (const auto &pair : res) { if (metadata::Identifier::isEquivalentName( pair.first->nameStr().c_str(), searchedName.c_str(), biggerDifferencesAllowed) || (countExactMatch == 0 && metadata::Identifier::isEquivalentName( pair.second.c_str(), searchedName.c_str(), biggerDifferencesAllowed))) { resTmp.emplace_back(pair); } } res = std::move(resTmp); } } auto sortLambda = [](const PairObjectName &a, const PairObjectName &b) { const auto &aName = a.first->nameStr(); const auto &bName = b.first->nameStr(); if (aName.size() < bName.size()) { return true; } if (aName.size() > bName.size()) { return false; } const auto &aIds = a.first->identifiers(); const auto &bIds = b.first->identifiers(); if (aIds.size() < bIds.size()) { return true; } if (aIds.size() > bIds.size()) { return false; } for (size_t idx = 0; idx < aIds.size(); idx++) { const auto &aCodeSpace = *aIds[idx]->codeSpace(); const auto &bCodeSpace = *bIds[idx]->codeSpace(); const auto codeSpaceComparison = aCodeSpace.compare(bCodeSpace); if (codeSpaceComparison < 0) { return true; } if (codeSpaceComparison > 0) { return false; } const auto &aCode = aIds[idx]->code(); const auto &bCode = bIds[idx]->code(); const auto codeComparison = aCode.compare(bCode); if (codeComparison < 0) { return true; } if (codeComparison > 0) { return false; } } return strcmp(typeid(a.first.get()).name(), typeid(b.first.get()).name()) < 0; }; res.sort(sortLambda); return res; } //! @endcond // --------------------------------------------------------------------------- /** \brief Return a list of area of use from their name * * @param name Searched name. * @param approximateMatch Whether approximate name identification is allowed. * @return list of (auth_name, code) of matched objects. * @throw FactoryException in case of error. */ std::list> AuthorityFactory::listAreaOfUseFromName(const std::string &name, bool approximateMatch) const { std::string sql( "SELECT auth_name, code FROM extent WHERE deprecated = 0 AND "); ListOfParams params; if (d->hasAuthorityRestriction()) { sql += " auth_name = ? AND "; params.emplace_back(d->authority()); } sql += "name LIKE ?"; if (!approximateMatch) { params.push_back(name); } else { params.push_back('%' + name + '%'); } auto sqlRes = d->run(sql, params); std::list> res; for (const auto &row : sqlRes) { res.emplace_back(row[0], row[1]); } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list AuthorityFactory::createEllipsoidFromExisting( const datum::EllipsoidNNPtr &ellipsoid) const { std::string sql( "SELECT auth_name, code FROM ellipsoid WHERE " "abs(semi_major_axis - ?) < 1e-10 * abs(semi_major_axis) AND " "((semi_minor_axis IS NOT NULL AND " "abs(semi_minor_axis - ?) < 1e-10 * abs(semi_minor_axis)) OR " "((inv_flattening IS NOT NULL AND " "abs(inv_flattening - ?) < 1e-10 * abs(inv_flattening))))"); ListOfParams params{ellipsoid->semiMajorAxis().getSIValue(), ellipsoid->computeSemiMinorAxis().getSIValue(), ellipsoid->computedInverseFlattening()}; auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back(d->createFactory(auth_name)->createEllipsoid(code)); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list AuthorityFactory::createGeodeticCRSFromDatum( const std::string &datum_auth_name, const std::string &datum_code, const std::string &geodetic_crs_type) const { std::string sql( "SELECT auth_name, code FROM geodetic_crs WHERE " "datum_auth_name = ? AND datum_code = ? AND deprecated = 0"); ListOfParams params{datum_auth_name, datum_code}; if (d->hasAuthorityRestriction()) { sql += " AND auth_name = ?"; params.emplace_back(d->authority()); } if (!geodetic_crs_type.empty()) { sql += " AND type = ?"; params.emplace_back(geodetic_crs_type); } sql += " ORDER BY auth_name, code"; auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back(d->createFactory(auth_name)->createGeodeticCRS(code)); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list AuthorityFactory::createGeodeticCRSFromDatum( const datum::GeodeticReferenceFrameNNPtr &datum, const std::string &preferredAuthName, const std::string &geodetic_crs_type) const { std::list candidates; const auto &ids = datum->identifiers(); const auto &datumName = datum->nameStr(); if (!ids.empty()) { for (const auto &id : ids) { const auto &authName = *(id->codeSpace()); const auto &code = id->code(); if (!authName.empty()) { const auto tmpFactory = (preferredAuthName == authName) ? create(databaseContext(), authName) : NN_NO_CHECK(d->getSharedFromThis()); auto l_candidates = tmpFactory->createGeodeticCRSFromDatum( authName, code, geodetic_crs_type); for (const auto &candidate : l_candidates) { candidates.emplace_back(candidate); } } } } else if (datumName != "unknown" && datumName != "unnamed") { auto matches = createObjectsFromName( datumName, {io::AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME}, false, 2); if (matches.size() == 1) { const auto &match = matches.front(); if (datum->_isEquivalentTo(match.get(), util::IComparable::Criterion::EQUIVALENT, databaseContext().as_nullable()) && !match->identifiers().empty()) { return createGeodeticCRSFromDatum( util::nn_static_pointer_cast( match), preferredAuthName, geodetic_crs_type); } } } return candidates; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list AuthorityFactory::createVerticalCRSFromDatum( const std::string &datum_auth_name, const std::string &datum_code) const { std::string sql( "SELECT auth_name, code FROM vertical_crs WHERE " "datum_auth_name = ? AND datum_code = ? AND deprecated = 0"); ListOfParams params{datum_auth_name, datum_code}; if (d->hasAuthorityRestriction()) { sql += " AND auth_name = ?"; params.emplace_back(d->authority()); } auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back(d->createFactory(auth_name)->createVerticalCRS(code)); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list AuthorityFactory::createGeodeticCRSFromEllipsoid( const std::string &ellipsoid_auth_name, const std::string &ellipsoid_code, const std::string &geodetic_crs_type) const { std::string sql( "SELECT geodetic_crs.auth_name, geodetic_crs.code FROM geodetic_crs " "JOIN geodetic_datum ON " "geodetic_crs.datum_auth_name = geodetic_datum.auth_name AND " "geodetic_crs.datum_code = geodetic_datum.code WHERE " "geodetic_datum.ellipsoid_auth_name = ? AND " "geodetic_datum.ellipsoid_code = ? AND " "geodetic_datum.deprecated = 0 AND " "geodetic_crs.deprecated = 0"); ListOfParams params{ellipsoid_auth_name, ellipsoid_code}; if (d->hasAuthorityRestriction()) { sql += " AND geodetic_crs.auth_name = ?"; params.emplace_back(d->authority()); } if (!geodetic_crs_type.empty()) { sql += " AND geodetic_crs.type = ?"; params.emplace_back(geodetic_crs_type); } auto sqlRes = d->run(sql, params); std::list res; for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back(d->createFactory(auth_name)->createGeodeticCRS(code)); } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static std::string buildSqlLookForAuthNameCode( const std::list> &list, ListOfParams ¶ms, const char *prefixField) { std::string sql("("); std::set authorities; for (const auto &crs : list) { auto boundCRS = dynamic_cast(crs.first.get()); const auto &ids = boundCRS ? boundCRS->baseCRS()->identifiers() : crs.first->identifiers(); if (!ids.empty()) { authorities.insert(*(ids[0]->codeSpace())); } } bool firstAuth = true; for (const auto &auth_name : authorities) { if (!firstAuth) { sql += " OR "; } firstAuth = false; sql += "( "; sql += prefixField; sql += "auth_name = ? AND "; sql += prefixField; sql += "code IN ("; params.emplace_back(auth_name); bool firstGeodCRSForAuth = true; for (const auto &crs : list) { auto boundCRS = dynamic_cast(crs.first.get()); const auto &ids = boundCRS ? boundCRS->baseCRS()->identifiers() : crs.first->identifiers(); if (!ids.empty() && *(ids[0]->codeSpace()) == auth_name) { if (!firstGeodCRSForAuth) { sql += ','; } firstGeodCRSForAuth = false; sql += '?'; params.emplace_back(ids[0]->code()); } } sql += "))"; } sql += ')'; return sql; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::list AuthorityFactory::createProjectedCRSFromExisting( const crs::ProjectedCRSNNPtr &crs) const { std::list res; const auto &conv = crs->derivingConversionRef(); const auto &method = conv->method(); const auto methodEPSGCode = method->getEPSGCode(); if (methodEPSGCode == 0) { return res; } auto lockedThisFactory(d->getSharedFromThis()); assert(lockedThisFactory); const auto &baseCRS(crs->baseCRS()); auto candidatesGeodCRS = baseCRS->crs::CRS::identify(lockedThisFactory); auto geogCRS = dynamic_cast(baseCRS.get()); if (geogCRS) { const auto axisOrder = geogCRS->coordinateSystem()->axisOrder(); if (axisOrder == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH || axisOrder == cs::EllipsoidalCS::AxisOrder::LAT_NORTH_LONG_EAST) { const auto &unit = geogCRS->coordinateSystem()->axisList()[0]->unit(); auto otherOrderGeogCRS = crs::GeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, geogCRS->nameStr()), geogCRS->datum(), geogCRS->datumEnsemble(), axisOrder == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH ? cs::EllipsoidalCS::createLatitudeLongitude(unit) : cs::EllipsoidalCS::createLongitudeLatitude(unit)); auto otherCandidatesGeodCRS = otherOrderGeogCRS->crs::CRS::identify(lockedThisFactory); candidatesGeodCRS.insert(candidatesGeodCRS.end(), otherCandidatesGeodCRS.begin(), otherCandidatesGeodCRS.end()); } } std::string sql( "SELECT projected_crs.auth_name, projected_crs.code FROM projected_crs " "JOIN conversion_table conv ON " "projected_crs.conversion_auth_name = conv.auth_name AND " "projected_crs.conversion_code = conv.code WHERE " "projected_crs.deprecated = 0 AND "); ListOfParams params; if (!candidatesGeodCRS.empty()) { sql += buildSqlLookForAuthNameCode(candidatesGeodCRS, params, "projected_crs.geodetic_crs_"); sql += " AND "; } sql += "conv.method_auth_name = 'EPSG' AND " "conv.method_code = ?"; params.emplace_back(toString(methodEPSGCode)); if (d->hasAuthorityRestriction()) { sql += " AND projected_crs.auth_name = ?"; params.emplace_back(d->authority()); } int iParam = 0; bool hasLat1stStd = false; double lat1stStd = 0; int iParamLat1stStd = 0; bool hasLat2ndStd = false; double lat2ndStd = 0; int iParamLat2ndStd = 0; for (const auto &genOpParamvalue : conv->parameterValues()) { iParam++; auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (!opParamvalue) { break; } const auto paramEPSGCode = opParamvalue->parameter()->getEPSGCode(); const auto ¶meterValue = opParamvalue->parameterValue(); if (!(paramEPSGCode > 0 && parameterValue->type() == operation::ParameterValue::Type::MEASURE)) { break; } const auto &measure = parameterValue->value(); const auto &unit = measure.unit(); if (unit == common::UnitOfMeasure::DEGREE && baseCRS->coordinateSystem()->axisList()[0]->unit() == unit) { if (methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP) { // Special case for standard parallels of LCC_2SP. See below if (paramEPSGCode == EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL) { hasLat1stStd = true; lat1stStd = measure.value(); iParamLat1stStd = iParam; continue; } else if (paramEPSGCode == EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL) { hasLat2ndStd = true; lat2ndStd = measure.value(); iParamLat2ndStd = iParam; continue; } } const auto iParamAsStr(toString(iParam)); sql += " AND conv.param"; sql += iParamAsStr; sql += "_code = ? AND conv.param"; sql += iParamAsStr; sql += "_auth_name = 'EPSG' AND conv.param"; sql += iParamAsStr; sql += "_value BETWEEN ? AND ?"; // As angles might be expressed with the odd unit EPSG:9110 // "sexagesimal DMS", we have to provide a broad range params.emplace_back(toString(paramEPSGCode)); params.emplace_back(measure.value() - 1); params.emplace_back(measure.value() + 1); } } // Special case for standard parallels of LCC_2SP: they can be switched if (methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP && hasLat1stStd && hasLat2ndStd) { const auto iParam1AsStr(toString(iParamLat1stStd)); const auto iParam2AsStr(toString(iParamLat2ndStd)); sql += " AND conv.param"; sql += iParam1AsStr; sql += "_code = ? AND conv.param"; sql += iParam1AsStr; sql += "_auth_name = 'EPSG' AND conv.param"; sql += iParam2AsStr; sql += "_code = ? AND conv.param"; sql += iParam2AsStr; sql += "_auth_name = 'EPSG' AND (("; params.emplace_back( toString(EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL)); params.emplace_back( toString(EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL)); double val1 = lat1stStd; double val2 = lat2ndStd; for (int i = 0; i < 2; i++) { if (i == 1) { sql += ") OR ("; std::swap(val1, val2); } sql += "conv.param"; sql += iParam1AsStr; sql += "_value BETWEEN ? AND ? AND conv.param"; sql += iParam2AsStr; sql += "_value BETWEEN ? AND ?"; params.emplace_back(val1 - 1); params.emplace_back(val1 + 1); params.emplace_back(val2 - 1); params.emplace_back(val2 + 1); } sql += "))"; } auto sqlRes = d->run(sql, params); params.clear(); sql = "SELECT auth_name, code FROM projected_crs WHERE " "deprecated = 0 AND conversion_auth_name IS NULL AND "; if (!candidatesGeodCRS.empty()) { sql += buildSqlLookForAuthNameCode(candidatesGeodCRS, params, "geodetic_crs_"); sql += " AND "; } const auto escapeLikeStr = [](const std::string &str) { return replaceAll(replaceAll(replaceAll(str, "\\", "\\\\"), "_", "\\_"), "%", "\\%"); }; const auto ellpsSemiMajorStr = toString(baseCRS->ellipsoid()->semiMajorAxis().getSIValue(), 10); sql += "(text_definition LIKE ? ESCAPE '\\'"; // WKT2 definition { std::string patternVal("%"); patternVal += ','; patternVal += ellpsSemiMajorStr; patternVal += '%'; patternVal += escapeLikeStr(method->nameStr()); patternVal += '%'; params.emplace_back(patternVal); } const auto *mapping = getMapping(method.get()); if (mapping && mapping->proj_name_main) { sql += " OR (text_definition LIKE ? AND (text_definition LIKE ?"; std::string patternVal("%"); patternVal += "proj="; patternVal += mapping->proj_name_main; patternVal += '%'; params.emplace_back(patternVal); // could be a= or R= patternVal = "%="; patternVal += ellpsSemiMajorStr; patternVal += '%'; params.emplace_back(patternVal); std::string projEllpsName; std::string ellpsName; if (baseCRS->ellipsoid()->lookForProjWellKnownEllps(projEllpsName, ellpsName)) { sql += " OR text_definition LIKE ?"; // Could be ellps= or datum= patternVal = "%="; patternVal += projEllpsName; patternVal += '%'; params.emplace_back(patternVal); } sql += "))"; } // WKT1_GDAL definition const char *wkt1GDALMethodName = conv->getWKT1GDALMethodName(); if (wkt1GDALMethodName) { sql += " OR text_definition LIKE ? ESCAPE '\\'"; std::string patternVal("%"); patternVal += ','; patternVal += ellpsSemiMajorStr; patternVal += '%'; patternVal += escapeLikeStr(wkt1GDALMethodName); patternVal += '%'; params.emplace_back(patternVal); } // WKT1_ESRI definition const char *esriMethodName = conv->getESRIMethodName(); if (esriMethodName) { sql += " OR text_definition LIKE ? ESCAPE '\\'"; std::string patternVal("%"); patternVal += ','; patternVal += ellpsSemiMajorStr; patternVal += '%'; patternVal += escapeLikeStr(esriMethodName); patternVal += '%'; auto fe = &conv->parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_EASTING); if (*fe == Measure()) { fe = &conv->parameterValueMeasure( EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN); } if (!(*fe == Measure())) { patternVal += "PARAMETER[\"False\\_Easting\","; patternVal += toString(fe->convertToUnit( crs->coordinateSystem()->axisList()[0]->unit()), 10); patternVal += '%'; } auto lat = &conv->parameterValueMeasure( EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN); if (*lat == Measure()) { lat = &conv->parameterValueMeasure( EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN); } if (!(*lat == Measure())) { patternVal += "PARAMETER[\"Latitude\\_Of\\_Origin\","; const auto &angularUnit = dynamic_cast(crs->baseCRS().get()) ? crs->baseCRS()->coordinateSystem()->axisList()[0]->unit() : UnitOfMeasure::DEGREE; patternVal += toString(lat->convertToUnit(angularUnit), 10); patternVal += '%'; } params.emplace_back(patternVal); } sql += ")"; if (d->hasAuthorityRestriction()) { sql += " AND auth_name = ?"; params.emplace_back(d->authority()); } auto sqlRes2 = d->run(sql, params); if (sqlRes.size() <= 200) { for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back( d->createFactory(auth_name)->createProjectedCRS(code)); } } if (sqlRes2.size() <= 200) { for (const auto &row : sqlRes2) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back( d->createFactory(auth_name)->createProjectedCRS(code)); } } return res; } // --------------------------------------------------------------------------- std::list AuthorityFactory::createCompoundCRSFromExisting( const crs::CompoundCRSNNPtr &crs) const { std::list res; auto lockedThisFactory(d->getSharedFromThis()); assert(lockedThisFactory); const auto &components = crs->componentReferenceSystems(); if (components.size() != 2) { return res; } auto candidatesHorizCRS = components[0]->identify(lockedThisFactory); auto candidatesVertCRS = components[1]->identify(lockedThisFactory); if (candidatesHorizCRS.empty() && candidatesVertCRS.empty()) { return res; } std::string sql("SELECT auth_name, code FROM compound_crs WHERE " "deprecated = 0 AND "); ListOfParams params; bool addAnd = false; if (!candidatesHorizCRS.empty()) { sql += buildSqlLookForAuthNameCode(candidatesHorizCRS, params, "horiz_crs_"); addAnd = true; } if (!candidatesVertCRS.empty()) { if (addAnd) { sql += " AND "; } sql += buildSqlLookForAuthNameCode(candidatesVertCRS, params, "vertical_crs_"); addAnd = true; } if (d->hasAuthorityRestriction()) { if (addAnd) { sql += " AND "; } sql += "auth_name = ?"; params.emplace_back(d->authority()); } auto sqlRes = d->run(sql, params); for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back(d->createFactory(auth_name)->createCompoundCRS(code)); } return res; } // --------------------------------------------------------------------------- std::vector AuthorityFactory::getTransformationsForGeoid( const std::string &geoidName, bool usePROJAlternativeGridNames) const { std::vector res; const std::string sql("SELECT operation_auth_name, operation_code FROM " "geoid_model WHERE name = ?"); auto sqlRes = d->run(sql, {geoidName}); for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; res.emplace_back(d->createFactory(auth_name)->createCoordinateOperation( code, usePROJAlternativeGridNames)); } return res; } // --------------------------------------------------------------------------- std::vector AuthorityFactory::getPointMotionOperationsFor( const crs::GeodeticCRSNNPtr &crs, bool usePROJAlternativeGridNames) const { std::vector res; const auto crsList = createGeodeticCRSFromDatum(crs->datumNonNull(d->context()), /* preferredAuthName = */ std::string(), /* geodetic_crs_type = */ std::string()); if (crsList.empty()) return res; std::string sql("SELECT auth_name, code FROM coordinate_operation_view " "WHERE source_crs_auth_name = target_crs_auth_name AND " "source_crs_code = target_crs_code AND deprecated = 0 AND " "("); bool addOr = false; ListOfParams params; for (const auto &candidateCrs : crsList) { if (addOr) sql += " OR "; addOr = true; sql += "(source_crs_auth_name = ? AND source_crs_code = ?)"; const auto &ids = candidateCrs->identifiers(); params.emplace_back(*(ids[0]->codeSpace())); params.emplace_back(ids[0]->code()); } sql += ")"; if (d->hasAuthorityRestriction()) { sql += " AND auth_name = ?"; params.emplace_back(d->authority()); } auto sqlRes = d->run(sql, params); for (const auto &row : sqlRes) { const auto &auth_name = row[0]; const auto &code = row[1]; auto pmo = util::nn_dynamic_pointer_cast( d->createFactory(auth_name)->createCoordinateOperation( code, usePROJAlternativeGridNames)); if (pmo) { res.emplace_back(NN_NO_CHECK(pmo)); } } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress FactoryException::FactoryException(const char *message) : Exception(message) {} // --------------------------------------------------------------------------- FactoryException::FactoryException(const std::string &message) : Exception(message) {} // --------------------------------------------------------------------------- FactoryException::~FactoryException() = default; // --------------------------------------------------------------------------- FactoryException::FactoryException(const FactoryException &) = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct NoSuchAuthorityCodeException::Private { std::string authority_; std::string code_; Private(const std::string &authority, const std::string &code) : authority_(authority), code_(code) {} }; // --------------------------------------------------------------------------- NoSuchAuthorityCodeException::NoSuchAuthorityCodeException( const std::string &message, const std::string &authority, const std::string &code) : FactoryException(message), d(std::make_unique(authority, code)) { } // --------------------------------------------------------------------------- NoSuchAuthorityCodeException::~NoSuchAuthorityCodeException() = default; // --------------------------------------------------------------------------- NoSuchAuthorityCodeException::NoSuchAuthorityCodeException( const NoSuchAuthorityCodeException &other) : FactoryException(other), d(std::make_unique(*(other.d))) {} //! @endcond // --------------------------------------------------------------------------- /** \brief Returns authority name. */ const std::string &NoSuchAuthorityCodeException::getAuthority() const { return d->authority_; } // --------------------------------------------------------------------------- /** \brief Returns authority code. */ const std::string &NoSuchAuthorityCodeException::getAuthorityCode() const { return d->code_; } // --------------------------------------------------------------------------- } // namespace io NS_PROJ_END // --------------------------------------------------------------------------- void pj_clear_sqlite_cache() { NS_PROJ::io::SQLiteHandleCache::get().clear(); } proj-9.6.0/src/iso19111/internal.cpp000664 001754 001755 00000027520 14764566077 016725 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/internal/internal.hpp" #include #include #include #ifdef _MSC_VER #include #else #include #endif #include #include // std::setprecision #include #include // std::istringstream and std::ostringstream #include #include "sqlite3.h" NS_PROJ_START namespace internal { // --------------------------------------------------------------------------- /** * Replace all occurrences of before with after. */ std::string replaceAll(const std::string &str, const std::string &before, const std::string &after) { std::string ret(str); const size_t nBeforeSize = before.size(); const size_t nAfterSize = after.size(); if (nBeforeSize) { size_t nStartPos = 0; while ((nStartPos = ret.find(before, nStartPos)) != std::string::npos) { ret.replace(nStartPos, nBeforeSize, after); nStartPos += nAfterSize; } } return ret; } // --------------------------------------------------------------------------- inline static bool EQUALN(const char *a, const char *b, size_t size) { #ifdef _MSC_VER return _strnicmp(a, b, size) == 0; #else return strncasecmp(a, b, size) == 0; #endif } /** * Case-insensitive equality test */ bool ci_equal(const std::string &a, const std::string &b) noexcept { const auto size = a.size(); if (size != b.size()) { return false; } return EQUALN(a.c_str(), b.c_str(), size); } bool ci_equal(const std::string &a, const char *b) noexcept { const auto size = a.size(); if (size != strlen(b)) { return false; } return EQUALN(a.c_str(), b, size); } bool ci_equal(const char *a, const char *b) noexcept { const auto size = strlen(a); if (size != strlen(b)) { return false; } return EQUALN(a, b, size); } // --------------------------------------------------------------------------- bool ci_less(const std::string &a, const std::string &b) noexcept { #ifdef _MSC_VER return _stricmp(a.c_str(), b.c_str()) < 0; #else return strcasecmp(a.c_str(), b.c_str()) < 0; #endif } // --------------------------------------------------------------------------- /** * Convert to lower case. */ std::string tolower(const std::string &str) { std::string ret(str); for (size_t i = 0; i < ret.size(); i++) ret[i] = static_cast(::tolower(ret[i])); return ret; } // --------------------------------------------------------------------------- /** * Convert to upper case. */ std::string toupper(const std::string &str) { std::string ret(str); for (size_t i = 0; i < ret.size(); i++) ret[i] = static_cast(::toupper(ret[i])); return ret; } // --------------------------------------------------------------------------- /** Strip leading and trailing double quote characters */ std::string stripQuotes(const std::string &str) { if (str.size() >= 2 && str[0] == '"' && str.back() == '"') { return str.substr(1, str.size() - 2); } return str; } // --------------------------------------------------------------------------- size_t ci_find(const std::string &str, const char *needle) noexcept { const size_t needleSize = strlen(needle); for (size_t i = 0; i + needleSize <= str.size(); i++) { if (EQUALN(str.c_str() + i, needle, needleSize)) { return i; } } return std::string::npos; } // --------------------------------------------------------------------------- size_t ci_find(const std::string &str, const std::string &needle, size_t startPos) noexcept { const size_t needleSize = needle.size(); for (size_t i = startPos; i + needleSize <= str.size(); i++) { if (EQUALN(str.c_str() + i, needle.c_str(), needleSize)) { return i; } } return std::string::npos; } // --------------------------------------------------------------------------- /* bool starts_with(const std::string &str, const std::string &prefix) noexcept { if (str.size() < prefix.size()) { return false; } return std::memcmp(str.c_str(), prefix.c_str(), prefix.size()) == 0; } */ // --------------------------------------------------------------------------- /* bool starts_with(const std::string &str, const char *prefix) noexcept { const size_t prefixSize = std::strlen(prefix); if (str.size() < prefixSize) { return false; } return std::memcmp(str.c_str(), prefix, prefixSize) == 0; } */ // --------------------------------------------------------------------------- bool ci_starts_with(const char *str, const char *prefix) noexcept { const auto str_size = strlen(str); const auto prefix_size = strlen(prefix); if (str_size < prefix_size) { return false; } return EQUALN(str, prefix, prefix_size); } // --------------------------------------------------------------------------- bool ci_starts_with(const std::string &str, const std::string &prefix) noexcept { if (str.size() < prefix.size()) { return false; } return EQUALN(str.c_str(), prefix.c_str(), prefix.size()); } // --------------------------------------------------------------------------- bool ends_with(const std::string &str, const std::string &suffix) noexcept { if (str.size() < suffix.size()) { return false; } return std::memcmp(str.c_str() + str.size() - suffix.size(), suffix.c_str(), suffix.size()) == 0; } // --------------------------------------------------------------------------- double c_locale_stod(const std::string &s) { bool success; double val = c_locale_stod(s, success); if (!success) { throw std::invalid_argument("non double value"); } return val; } double c_locale_stod(const std::string &s, bool &success) { success = true; const auto s_size = s.size(); // Fast path if (s_size > 0 && s_size < 15) { std::int64_t acc = 0; std::int64_t div = 1; bool afterDot = false; size_t i = 0; if (s[0] == '-') { ++i; div = -1; } else if (s[0] == '+') { ++i; } for (; i < s_size; ++i) { const auto ch = s[i]; if (ch >= '0' && ch <= '9') { acc = acc * 10 + ch - '0'; if (afterDot) { div *= 10; } } else if (ch == '.') { afterDot = true; } else { div = 0; } } if (div) { return static_cast(acc) / div; } } std::istringstream iss(s); iss.imbue(std::locale::classic()); double d; iss >> d; if (!iss.eof() || iss.fail()) { success = false; d = 0; } return d; } // --------------------------------------------------------------------------- std::vector split(const std::string &str, char separator) { std::vector res; size_t lastPos = 0; size_t newPos = 0; while ((newPos = str.find(separator, lastPos)) != std::string::npos) { res.push_back(str.substr(lastPos, newPos - lastPos)); lastPos = newPos + 1; } res.push_back(str.substr(lastPos)); return res; } // --------------------------------------------------------------------------- std::vector split(const std::string &str, const std::string &separator) { std::vector res; size_t lastPos = 0; size_t newPos = 0; while ((newPos = str.find(separator, lastPos)) != std::string::npos) { res.push_back(str.substr(lastPos, newPos - lastPos)); lastPos = newPos + separator.size(); } res.push_back(str.substr(lastPos)); return res; } // --------------------------------------------------------------------------- #ifdef _WIN32 // For some reason, sqlite3_snprintf() in the sqlite3 builds used on AppVeyor // doesn't round identically to the Unix builds, and thus breaks a number of // unit test. So to avoid this, use the stdlib formatting std::string toString(int val) { std::ostringstream buffer; buffer.imbue(std::locale::classic()); buffer << val; return buffer.str(); } std::string toString(double val, int precision) { std::ostringstream buffer; buffer.imbue(std::locale::classic()); buffer << std::setprecision(precision); buffer << val; auto str = buffer.str(); if (precision == 15 && str.find("9999999999") != std::string::npos) { buffer.str(""); buffer.clear(); buffer << std::setprecision(14); buffer << val; return buffer.str(); } return str; } #else std::string toString(int val) { // use sqlite3 API that is slightly faster than std::ostringstream // with forcing the C locale. sqlite3_snprintf() emulates a C locale. constexpr int BUF_SIZE = 16; char szBuffer[BUF_SIZE]; sqlite3_snprintf(BUF_SIZE, szBuffer, "%d", val); return szBuffer; } std::string toString(double val, int precision) { // use sqlite3 API that is slightly faster than std::ostringstream // with forcing the C locale. sqlite3_snprintf() emulates a C locale. constexpr int BUF_SIZE = 32; char szBuffer[BUF_SIZE]; sqlite3_snprintf(BUF_SIZE, szBuffer, "%.*g", precision, val); if (precision == 15 && strstr(szBuffer, "9999999999")) { sqlite3_snprintf(BUF_SIZE, szBuffer, "%.14g", val); } return szBuffer; } #endif // --------------------------------------------------------------------------- std::string concat(const char *a, const std::string &b) { std::string res(a); res += b; return res; } std::string concat(const char *a, const std::string &b, const char *c) { std::string res(a); res += b; res += c; return res; } // --------------------------------------------------------------------------- // Avoid rounding issues due to year -> second (SI unit) -> year roundtrips double getRoundedEpochInDecimalYear(double year) { // Try to see if the value is close to xxxx.yyy decimal year. if (std::fabs(1000 * year - std::round(1000 * year)) <= 1e-3) { year = std::round(1000 * year) / 1000.0; } return year; } // --------------------------------------------------------------------------- } // namespace internal NS_PROJ_END proj-9.6.0/src/iso19111/io.cpp000664 001754 001755 00002002106 14764566077 015513 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include #include #include #include #include #include #include #include #include #include #include // std::istringstream #include #include #include #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinates.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "operation/coordinateoperation_internal.hpp" #include "operation/esriparammappings.hpp" #include "operation/oputils.hpp" #include "operation/parammappings.hpp" #include "proj/internal/coordinatesystem_internal.hpp" #include "proj/internal/datum_internal.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj/internal/include_nlohmann_json.hpp" #include "proj_constants.h" #include "proj_json_streaming_writer.hpp" #include "wkt1_parser.h" #include "wkt2_parser.h" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // clang-format on using namespace NS_PROJ::common; using namespace NS_PROJ::coordinates; using namespace NS_PROJ::crs; using namespace NS_PROJ::cs; using namespace NS_PROJ::datum; using namespace NS_PROJ::internal; using namespace NS_PROJ::metadata; using namespace NS_PROJ::operation; using namespace NS_PROJ::util; using json = nlohmann::json; //! @cond Doxygen_Suppress static const std::string emptyString{}; //! @endcond #if 0 namespace dropbox{ namespace oxygen { template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn>::~nn() = default; template<> nn > >::~nn() = default; template<> nn > >::~nn() = default; template<> nn > >::~nn() = default; }} #endif NS_PROJ_START namespace io { //! @cond Doxygen_Suppress const char *JSONFormatter::PROJJSON_v0_7 = "https://proj.org/schemas/v0.7/projjson.schema.json"; #define PROJJSON_DEFAULT_VERSION JSONFormatter::PROJJSON_v0_7 //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress IWKTExportable::~IWKTExportable() = default; // --------------------------------------------------------------------------- std::string IWKTExportable::exportToWKT(WKTFormatter *formatter) const { _exportToWKT(formatter); return formatter->toString(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct WKTFormatter::Private { struct Params { WKTFormatter::Convention convention_ = WKTFormatter::Convention::WKT2; WKTFormatter::Version version_ = WKTFormatter::Version::WKT2; bool multiLine_ = true; bool strict_ = true; int indentWidth_ = 4; bool idOnTopLevelOnly_ = false; bool outputAxisOrder_ = false; bool primeMeridianOmittedIfGreenwich_ = false; bool ellipsoidUnitOmittedIfMetre_ = false; bool primeMeridianOrParameterUnitOmittedIfSameAsAxis_ = false; bool forceUNITKeyword_ = false; bool outputCSUnitOnlyOnceIfSame_ = false; bool primeMeridianInDegree_ = false; bool use2019Keywords_ = false; bool useESRIDialect_ = false; bool allowEllipsoidalHeightAsVerticalCRS_ = false; bool allowLINUNITNode_ = false; OutputAxisRule outputAxis_ = WKTFormatter::OutputAxisRule::YES; }; Params params_{}; DatabaseContextPtr dbContext_{}; int indentLevel_ = 0; int level_ = 0; std::vector stackHasChild_{}; std::vector stackHasId_{false}; std::vector stackEmptyKeyword_{}; std::vector stackDisableUsage_{}; std::vector outputUnitStack_{true}; std::vector outputIdStack_{true}; std::vector axisLinearUnitStack_{ util::nn_make_shared(UnitOfMeasure::METRE)}; std::vector axisAngularUnitStack_{ util::nn_make_shared(UnitOfMeasure::DEGREE)}; bool abridgedTransformation_ = false; bool useDerivingConversion_ = false; std::vector toWGS84Parameters_{}; std::string hDatumExtension_{}; std::string vDatumExtension_{}; crs::GeographicCRSPtr geogCRSOfCompoundCRS_{}; std::string result_{}; // cppcheck-suppress functionStatic void addNewLine(); void addIndentation(); // cppcheck-suppress functionStatic void startNewChild(); }; //! @endcond // --------------------------------------------------------------------------- /** \brief Constructs a new formatter. * * A formatter can be used only once (its internal state is mutated) * * Its default behavior can be adjusted with the different setters. * * @param convention WKT flavor. Defaults to Convention::WKT2 * @param dbContext Database context, to allow queries in it if needed. * This is used for example for WKT1_ESRI output to do name substitutions. * * @return new formatter. */ WKTFormatterNNPtr WKTFormatter::create(Convention convention, // cppcheck-suppress passedByValue DatabaseContextPtr dbContext) { auto ret = NN_NO_CHECK(WKTFormatter::make_unique(convention)); ret->d->dbContext_ = std::move(dbContext); return ret; } // --------------------------------------------------------------------------- /** \brief Constructs a new formatter from another one. * * A formatter can be used only once (its internal state is mutated) * * Its default behavior can be adjusted with the different setters. * * @param other source formatter. * @return new formatter. */ WKTFormatterNNPtr WKTFormatter::create(const WKTFormatterNNPtr &other) { auto f = create(other->d->params_.convention_, other->d->dbContext_); f->d->params_ = other->d->params_; return f; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress WKTFormatter::~WKTFormatter() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Whether to use multi line output or not. */ WKTFormatter &WKTFormatter::setMultiLine(bool multiLine) noexcept { d->params_.multiLine_ = multiLine; return *this; } // --------------------------------------------------------------------------- /** \brief Set number of spaces for each indentation level (defaults to 4). */ WKTFormatter &WKTFormatter::setIndentationWidth(int width) noexcept { d->params_.indentWidth_ = width; return *this; } // --------------------------------------------------------------------------- /** \brief Set whether AXIS nodes should be output. */ WKTFormatter & WKTFormatter::setOutputAxis(OutputAxisRule outputAxisIn) noexcept { d->params_.outputAxis_ = outputAxisIn; return *this; } // --------------------------------------------------------------------------- /** \brief Set whether the formatter should operate on strict more or not. * * The default is strict mode, in which case a FormattingException can be * thrown. * In non-strict mode, a Geographic 3D CRS can be for example exported as * WKT1_GDAL with 3 axes, whereas this is normally not allowed. */ WKTFormatter &WKTFormatter::setStrict(bool strictIn) noexcept { d->params_.strict_ = strictIn; return *this; } // --------------------------------------------------------------------------- /** \brief Returns whether the formatter is in strict mode. */ bool WKTFormatter::isStrict() const noexcept { return d->params_.strict_; } // --------------------------------------------------------------------------- /** \brief Set whether the formatter should export, in WKT1, a Geographic or * Projected 3D CRS as a compound CRS whose vertical part represents an * ellipsoidal height. */ WKTFormatter & WKTFormatter::setAllowEllipsoidalHeightAsVerticalCRS(bool allow) noexcept { d->params_.allowEllipsoidalHeightAsVerticalCRS_ = allow; return *this; } // --------------------------------------------------------------------------- /** \brief Return whether the formatter should export, in WKT1, a Geographic or * Projected 3D CRS as a compound CRS whose vertical part represents an * ellipsoidal height. */ bool WKTFormatter::isAllowedEllipsoidalHeightAsVerticalCRS() const noexcept { return d->params_.allowEllipsoidalHeightAsVerticalCRS_; } // --------------------------------------------------------------------------- /** \brief Set whether the formatter should export, in WKT1_ESRI, a Geographic * 3D CRS with the relatively new (ArcGIS Pro >= 2.7) LINUNIT node. * Defaults to true. * @since PROJ 9.1 */ WKTFormatter &WKTFormatter::setAllowLINUNITNode(bool allow) noexcept { d->params_.allowLINUNITNode_ = allow; return *this; } // --------------------------------------------------------------------------- /** \brief Return whether the formatter should export, in WKT1_ESRI, a * Geographic 3D CRS with the relatively new (ArcGIS Pro >= 2.7) LINUNIT node. * Defaults to true. * @since PROJ 9.1 */ bool WKTFormatter::isAllowedLINUNITNode() const noexcept { return d->params_.allowLINUNITNode_; } // --------------------------------------------------------------------------- /** Returns the WKT string from the formatter. */ const std::string &WKTFormatter::toString() const { if (d->indentLevel_ > 0 || d->level_ > 0) { // For intermediary nodes, the formatter is in a inconsistent // state. throw FormattingException("toString() called on intermediate nodes"); } if (d->axisLinearUnitStack_.size() != 1) throw FormattingException( "Unbalanced pushAxisLinearUnit() / popAxisLinearUnit()"); if (d->axisAngularUnitStack_.size() != 1) throw FormattingException( "Unbalanced pushAxisAngularUnit() / popAxisAngularUnit()"); if (d->outputIdStack_.size() != 1) throw FormattingException("Unbalanced pushOutputId() / popOutputId()"); if (d->outputUnitStack_.size() != 1) throw FormattingException( "Unbalanced pushOutputUnit() / popOutputUnit()"); if (d->stackHasId_.size() != 1) throw FormattingException("Unbalanced pushHasId() / popHasId()"); if (!d->stackDisableUsage_.empty()) throw FormattingException( "Unbalanced pushDisableUsage() / popDisableUsage()"); return d->result_; } //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- WKTFormatter::WKTFormatter(Convention convention) : d(std::make_unique()) { d->params_.convention_ = convention; switch (convention) { case Convention::WKT2_2019: d->params_.use2019Keywords_ = true; PROJ_FALLTHROUGH; case Convention::WKT2: d->params_.version_ = WKTFormatter::Version::WKT2; d->params_.outputAxisOrder_ = true; break; case Convention::WKT2_2019_SIMPLIFIED: d->params_.use2019Keywords_ = true; PROJ_FALLTHROUGH; case Convention::WKT2_SIMPLIFIED: d->params_.version_ = WKTFormatter::Version::WKT2; d->params_.idOnTopLevelOnly_ = true; d->params_.outputAxisOrder_ = false; d->params_.primeMeridianOmittedIfGreenwich_ = true; d->params_.ellipsoidUnitOmittedIfMetre_ = true; d->params_.primeMeridianOrParameterUnitOmittedIfSameAsAxis_ = true; d->params_.forceUNITKeyword_ = true; d->params_.outputCSUnitOnlyOnceIfSame_ = true; break; case Convention::WKT1_GDAL: d->params_.version_ = WKTFormatter::Version::WKT1; d->params_.outputAxisOrder_ = false; d->params_.forceUNITKeyword_ = true; d->params_.primeMeridianInDegree_ = true; d->params_.outputAxis_ = WKTFormatter::OutputAxisRule::WKT1_GDAL_EPSG_STYLE; break; case Convention::WKT1_ESRI: d->params_.version_ = WKTFormatter::Version::WKT1; d->params_.outputAxisOrder_ = false; d->params_.forceUNITKeyword_ = true; d->params_.primeMeridianInDegree_ = true; d->params_.useESRIDialect_ = true; d->params_.multiLine_ = false; d->params_.outputAxis_ = WKTFormatter::OutputAxisRule::NO; d->params_.allowLINUNITNode_ = true; break; default: assert(false); break; } } // --------------------------------------------------------------------------- WKTFormatter &WKTFormatter::setOutputId(bool outputIdIn) { if (d->indentLevel_ != 0) { throw Exception( "setOutputId() shall only be called when the stack state is empty"); } d->outputIdStack_[0] = outputIdIn; return *this; } // --------------------------------------------------------------------------- void WKTFormatter::Private::addNewLine() { result_ += '\n'; } // --------------------------------------------------------------------------- void WKTFormatter::Private::addIndentation() { result_ += std::string( static_cast(indentLevel_) * params_.indentWidth_, ' '); } // --------------------------------------------------------------------------- void WKTFormatter::enter() { if (d->indentLevel_ == 0 && d->level_ == 0) { d->stackHasChild_.push_back(false); } ++d->level_; } // --------------------------------------------------------------------------- void WKTFormatter::leave() { assert(d->level_ > 0); --d->level_; if (d->indentLevel_ == 0 && d->level_ == 0) { d->stackHasChild_.pop_back(); } } // --------------------------------------------------------------------------- bool WKTFormatter::isAtTopLevel() const { return d->level_ == 0 && d->indentLevel_ == 0; } // --------------------------------------------------------------------------- void WKTFormatter::startNode(const std::string &keyword, bool hasId) { if (!d->stackHasChild_.empty()) { d->startNewChild(); } else if (!d->result_.empty()) { d->result_ += ','; if (d->params_.multiLine_ && !keyword.empty()) { d->addNewLine(); } } if (d->params_.multiLine_) { if ((d->indentLevel_ || d->level_) && !keyword.empty()) { if (!d->result_.empty()) { d->addNewLine(); } d->addIndentation(); } } if (!keyword.empty()) { d->result_ += keyword; d->result_ += '['; } d->indentLevel_++; d->stackHasChild_.push_back(false); d->stackEmptyKeyword_.push_back(keyword.empty()); // Starting from a node that has a ID, we should emit ID nodes for : // - this node // - and for METHOD&PARAMETER nodes in WKT2, unless idOnTopLevelOnly_ is // set. // For WKT2, all other intermediate nodes shouldn't have ID ("not // recommended") if (!d->params_.idOnTopLevelOnly_ && d->indentLevel_ >= 2 && d->params_.version_ == WKTFormatter::Version::WKT2 && (keyword == WKTConstants::METHOD || keyword == WKTConstants::PARAMETER)) { pushOutputId(d->outputIdStack_[0]); } else if (d->indentLevel_ >= 2 && d->params_.version_ == WKTFormatter::Version::WKT2) { pushOutputId(d->outputIdStack_[0] && !d->stackHasId_.back()); } else { pushOutputId(outputId()); } d->stackHasId_.push_back(hasId || d->stackHasId_.back()); } // --------------------------------------------------------------------------- void WKTFormatter::endNode() { assert(d->indentLevel_ > 0); d->stackHasId_.pop_back(); popOutputId(); d->indentLevel_--; bool emptyKeyword = d->stackEmptyKeyword_.back(); d->stackEmptyKeyword_.pop_back(); d->stackHasChild_.pop_back(); if (!emptyKeyword) d->result_ += ']'; } // --------------------------------------------------------------------------- WKTFormatter &WKTFormatter::simulCurNodeHasId() { d->stackHasId_.back() = true; return *this; } // --------------------------------------------------------------------------- void WKTFormatter::Private::startNewChild() { assert(!stackHasChild_.empty()); if (stackHasChild_.back()) { result_ += ','; } stackHasChild_.back() = true; } // --------------------------------------------------------------------------- void WKTFormatter::addQuotedString(const char *str) { addQuotedString(std::string(str)); } void WKTFormatter::addQuotedString(const std::string &str) { d->startNewChild(); d->result_ += '"'; d->result_ += replaceAll(str, "\"", "\"\""); d->result_ += '"'; } // --------------------------------------------------------------------------- void WKTFormatter::add(const std::string &str) { d->startNewChild(); d->result_ += str; } // --------------------------------------------------------------------------- void WKTFormatter::add(int number) { d->startNewChild(); d->result_ += internal::toString(number); } // --------------------------------------------------------------------------- #ifdef __MINGW32__ static std::string normalizeExponent(const std::string &in) { // mingw will output 1e-0xy instead of 1e-xy. Fix that auto pos = in.find("e-0"); if (pos == std::string::npos) { return in; } if (pos + 4 < in.size() && isdigit(in[pos + 3]) && isdigit(in[pos + 4])) { return in.substr(0, pos + 2) + in.substr(pos + 3); } return in; } #else static inline std::string normalizeExponent(const std::string &in) { return in; } #endif static inline std::string normalizeSerializedString(const std::string &in) { auto ret(normalizeExponent(in)); return ret; } // --------------------------------------------------------------------------- void WKTFormatter::add(double number, int precision) { d->startNewChild(); if (number == 0.0) { if (d->params_.useESRIDialect_) { d->result_ += "0.0"; } else { d->result_ += '0'; } } else { std::string val( normalizeSerializedString(internal::toString(number, precision))); d->result_ += replaceAll(val, "e", "E"); if (d->params_.useESRIDialect_ && val.find('.') == std::string::npos) { d->result_ += ".0"; } } } // --------------------------------------------------------------------------- void WKTFormatter::pushOutputUnit(bool outputUnitIn) { d->outputUnitStack_.push_back(outputUnitIn); } // --------------------------------------------------------------------------- void WKTFormatter::popOutputUnit() { d->outputUnitStack_.pop_back(); } // --------------------------------------------------------------------------- bool WKTFormatter::outputUnit() const { return d->outputUnitStack_.back(); } // --------------------------------------------------------------------------- void WKTFormatter::pushOutputId(bool outputIdIn) { d->outputIdStack_.push_back(outputIdIn); } // --------------------------------------------------------------------------- void WKTFormatter::popOutputId() { d->outputIdStack_.pop_back(); } // --------------------------------------------------------------------------- bool WKTFormatter::outputId() const { return !d->params_.useESRIDialect_ && d->outputIdStack_.back(); } // --------------------------------------------------------------------------- void WKTFormatter::pushHasId(bool hasId) { d->stackHasId_.push_back(hasId); } // --------------------------------------------------------------------------- void WKTFormatter::popHasId() { d->stackHasId_.pop_back(); } // --------------------------------------------------------------------------- void WKTFormatter::pushDisableUsage() { d->stackDisableUsage_.push_back(true); } // --------------------------------------------------------------------------- void WKTFormatter::popDisableUsage() { d->stackDisableUsage_.pop_back(); } // --------------------------------------------------------------------------- bool WKTFormatter::outputUsage() const { return outputId() && d->stackDisableUsage_.empty(); } // --------------------------------------------------------------------------- void WKTFormatter::pushAxisLinearUnit(const UnitOfMeasureNNPtr &unit) { d->axisLinearUnitStack_.push_back(unit); } // --------------------------------------------------------------------------- void WKTFormatter::popAxisLinearUnit() { d->axisLinearUnitStack_.pop_back(); } // --------------------------------------------------------------------------- const UnitOfMeasureNNPtr &WKTFormatter::axisLinearUnit() const { return d->axisLinearUnitStack_.back(); } // --------------------------------------------------------------------------- void WKTFormatter::pushAxisAngularUnit(const UnitOfMeasureNNPtr &unit) { d->axisAngularUnitStack_.push_back(unit); } // --------------------------------------------------------------------------- void WKTFormatter::popAxisAngularUnit() { d->axisAngularUnitStack_.pop_back(); } // --------------------------------------------------------------------------- const UnitOfMeasureNNPtr &WKTFormatter::axisAngularUnit() const { return d->axisAngularUnitStack_.back(); } // --------------------------------------------------------------------------- WKTFormatter::OutputAxisRule WKTFormatter::outputAxis() const { return d->params_.outputAxis_; } // --------------------------------------------------------------------------- bool WKTFormatter::outputAxisOrder() const { return d->params_.outputAxisOrder_; } // --------------------------------------------------------------------------- bool WKTFormatter::primeMeridianOmittedIfGreenwich() const { return d->params_.primeMeridianOmittedIfGreenwich_; } // --------------------------------------------------------------------------- bool WKTFormatter::ellipsoidUnitOmittedIfMetre() const { return d->params_.ellipsoidUnitOmittedIfMetre_; } // --------------------------------------------------------------------------- bool WKTFormatter::primeMeridianOrParameterUnitOmittedIfSameAsAxis() const { return d->params_.primeMeridianOrParameterUnitOmittedIfSameAsAxis_; } // --------------------------------------------------------------------------- bool WKTFormatter::outputCSUnitOnlyOnceIfSame() const { return d->params_.outputCSUnitOnlyOnceIfSame_; } // --------------------------------------------------------------------------- bool WKTFormatter::forceUNITKeyword() const { return d->params_.forceUNITKeyword_; } // --------------------------------------------------------------------------- bool WKTFormatter::primeMeridianInDegree() const { return d->params_.primeMeridianInDegree_; } // --------------------------------------------------------------------------- bool WKTFormatter::idOnTopLevelOnly() const { return d->params_.idOnTopLevelOnly_; } // --------------------------------------------------------------------------- bool WKTFormatter::topLevelHasId() const { return d->stackHasId_.size() >= 2 && d->stackHasId_[1]; } // --------------------------------------------------------------------------- WKTFormatter::Version WKTFormatter::version() const { return d->params_.version_; } // --------------------------------------------------------------------------- bool WKTFormatter::use2019Keywords() const { return d->params_.use2019Keywords_; } // --------------------------------------------------------------------------- bool WKTFormatter::useESRIDialect() const { return d->params_.useESRIDialect_; } // --------------------------------------------------------------------------- const DatabaseContextPtr &WKTFormatter::databaseContext() const { return d->dbContext_; } // --------------------------------------------------------------------------- void WKTFormatter::setAbridgedTransformation(bool outputIn) { d->abridgedTransformation_ = outputIn; } // --------------------------------------------------------------------------- bool WKTFormatter::abridgedTransformation() const { return d->abridgedTransformation_; } // --------------------------------------------------------------------------- void WKTFormatter::setUseDerivingConversion(bool useDerivingConversionIn) { d->useDerivingConversion_ = useDerivingConversionIn; } // --------------------------------------------------------------------------- bool WKTFormatter::useDerivingConversion() const { return d->useDerivingConversion_; } // --------------------------------------------------------------------------- void WKTFormatter::setTOWGS84Parameters(const std::vector ¶ms) { d->toWGS84Parameters_ = params; } // --------------------------------------------------------------------------- const std::vector &WKTFormatter::getTOWGS84Parameters() const { return d->toWGS84Parameters_; } // --------------------------------------------------------------------------- void WKTFormatter::setVDatumExtension(const std::string &filename) { d->vDatumExtension_ = filename; } // --------------------------------------------------------------------------- const std::string &WKTFormatter::getVDatumExtension() const { return d->vDatumExtension_; } // --------------------------------------------------------------------------- void WKTFormatter::setHDatumExtension(const std::string &filename) { d->hDatumExtension_ = filename; } // --------------------------------------------------------------------------- const std::string &WKTFormatter::getHDatumExtension() const { return d->hDatumExtension_; } // --------------------------------------------------------------------------- void WKTFormatter::setGeogCRSOfCompoundCRS(const crs::GeographicCRSPtr &crs) { d->geogCRSOfCompoundCRS_ = crs; } // --------------------------------------------------------------------------- const crs::GeographicCRSPtr &WKTFormatter::getGeogCRSOfCompoundCRS() const { return d->geogCRSOfCompoundCRS_; } // --------------------------------------------------------------------------- std::string WKTFormatter::morphNameToESRI(const std::string &name) { for (const auto *suffix : {"(m)", "(ftUS)", "(E-N)", "(N-E)"}) { if (ends_with(name, suffix)) { return morphNameToESRI( name.substr(0, name.size() - strlen(suffix))) + suffix; } } std::string ret; bool insertUnderscore = false; // Replace any special character by underscore, except at the beginning // and of the name where those characters are removed. for (char ch : name) { if (ch == '+' || ch == '-' || (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { if (insertUnderscore && !ret.empty()) { ret += '_'; } ret += ch; insertUnderscore = false; } else { insertUnderscore = true; } } return ret; } // --------------------------------------------------------------------------- void WKTFormatter::ingestWKTNode(const WKTNodeNNPtr &node) { startNode(node->value(), true); for (const auto &child : node->children()) { if (!child->children().empty()) { ingestWKTNode(child); } else { add(child->value()); } } endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static WKTNodeNNPtr null_node(NN_NO_CHECK(std::make_unique(std::string()))); static inline bool isNull(const WKTNodeNNPtr &node) { return &node == &null_node; } struct WKTNode::Private { std::string value_{}; std::vector children_{}; explicit Private(const std::string &valueIn) : value_(valueIn) {} // cppcheck-suppress functionStatic inline const std::string &value() PROJ_PURE_DEFN { return value_; } // cppcheck-suppress functionStatic inline const std::vector &children() PROJ_PURE_DEFN { return children_; } // cppcheck-suppress functionStatic inline size_t childrenSize() PROJ_PURE_DEFN { return children_.size(); } // cppcheck-suppress functionStatic const WKTNodeNNPtr &lookForChild(const std::string &childName, int occurrence) const noexcept; // cppcheck-suppress functionStatic const WKTNodeNNPtr &lookForChild(const std::string &name) const noexcept; // cppcheck-suppress functionStatic const WKTNodeNNPtr &lookForChild(const std::string &name, const std::string &name2) const noexcept; // cppcheck-suppress functionStatic const WKTNodeNNPtr &lookForChild(const std::string &name, const std::string &name2, const std::string &name3) const noexcept; // cppcheck-suppress functionStatic const WKTNodeNNPtr &lookForChild(const std::string &name, const std::string &name2, const std::string &name3, const std::string &name4) const noexcept; }; #define GP() getPrivate() // --------------------------------------------------------------------------- const WKTNodeNNPtr & WKTNode::Private::lookForChild(const std::string &childName, int occurrence) const noexcept { int occCount = 0; for (const auto &child : children_) { if (ci_equal(child->GP()->value(), childName)) { if (occurrence == occCount) { return child; } occCount++; } } return null_node; } const WKTNodeNNPtr & WKTNode::Private::lookForChild(const std::string &name) const noexcept { for (const auto &child : children_) { const auto &v = child->GP()->value(); if (ci_equal(v, name)) { return child; } } return null_node; } const WKTNodeNNPtr & WKTNode::Private::lookForChild(const std::string &name, const std::string &name2) const noexcept { for (const auto &child : children_) { const auto &v = child->GP()->value(); if (ci_equal(v, name) || ci_equal(v, name2)) { return child; } } return null_node; } const WKTNodeNNPtr & WKTNode::Private::lookForChild(const std::string &name, const std::string &name2, const std::string &name3) const noexcept { for (const auto &child : children_) { const auto &v = child->GP()->value(); if (ci_equal(v, name) || ci_equal(v, name2) || ci_equal(v, name3)) { return child; } } return null_node; } const WKTNodeNNPtr &WKTNode::Private::lookForChild( const std::string &name, const std::string &name2, const std::string &name3, const std::string &name4) const noexcept { for (const auto &child : children_) { const auto &v = child->GP()->value(); if (ci_equal(v, name) || ci_equal(v, name2) || ci_equal(v, name3) || ci_equal(v, name4)) { return child; } } return null_node; } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a WKTNode. * * @param valueIn the name of the node. */ WKTNode::WKTNode(const std::string &valueIn) : d(std::make_unique(valueIn)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress WKTNode::~WKTNode() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Adds a child to the current node. * * @param child child to add. This should not be a parent of this node. */ void WKTNode::addChild(WKTNodeNNPtr &&child) { d->children_.push_back(std::move(child)); } // --------------------------------------------------------------------------- /** \brief Return the (occurrence-1)th sub-node of name childName. * * @param childName name of the child. * @param occurrence occurrence index (starting at 0) * @return the child, or nullptr. */ const WKTNodePtr &WKTNode::lookForChild(const std::string &childName, int occurrence) const noexcept { int occCount = 0; for (const auto &child : d->children_) { if (ci_equal(child->GP()->value(), childName)) { if (occurrence == occCount) { return child; } occCount++; } } return null_node; } // --------------------------------------------------------------------------- /** \brief Return the count of children of given name. * * @param childName name of the children to look for. * @return count */ int WKTNode::countChildrenOfName(const std::string &childName) const noexcept { int occCount = 0; for (const auto &child : d->children_) { if (ci_equal(child->GP()->value(), childName)) { occCount++; } } return occCount; } // --------------------------------------------------------------------------- /** \brief Return the value of a node. */ const std::string &WKTNode::value() const { return d->value_; } // --------------------------------------------------------------------------- /** \brief Return the children of a node. */ const std::vector &WKTNode::children() const { return d->children_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static size_t skipSpace(const std::string &str, size_t start) { size_t i = start; while (i < str.size() && ::isspace(static_cast(str[i]))) { ++i; } return i; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // As used in examples of OGC 12-063r5 static const std::string startPrintedQuote("\xE2\x80\x9C"); static const std::string endPrintedQuote("\xE2\x80\x9D"); //! @endcond WKTNodeNNPtr WKTNode::createFrom(const std::string &wkt, size_t indexStart, int recLevel, size_t &indexEnd) { if (recLevel == 16) { throw ParsingException("too many nesting levels"); } std::string value; size_t i = skipSpace(wkt, indexStart); if (i == wkt.size()) { throw ParsingException("whitespace only string"); } std::string closingStringMarker; bool inString = false; for (; i < wkt.size() && (inString || (wkt[i] != '[' && wkt[i] != '(' && wkt[i] != ',' && wkt[i] != ']' && wkt[i] != ')' && !::isspace(static_cast(wkt[i])))); ++i) { if (wkt[i] == '"') { if (!inString) { inString = true; closingStringMarker = "\""; } else if (closingStringMarker == "\"") { if (i + 1 < wkt.size() && wkt[i + 1] == '"') { i++; } else { inString = false; closingStringMarker.clear(); } } } else if (i + 3 <= wkt.size() && wkt.substr(i, 3) == startPrintedQuote) { if (!inString) { inString = true; closingStringMarker = endPrintedQuote; value += '"'; i += 2; continue; } } else if (i + 3 <= wkt.size() && closingStringMarker == endPrintedQuote && wkt.substr(i, 3) == endPrintedQuote) { inString = false; closingStringMarker.clear(); value += '"'; i += 2; continue; } value += wkt[i]; } i = skipSpace(wkt, i); if (i == wkt.size()) { if (indexStart == 0) { throw ParsingException("missing ["); } else { throw ParsingException("missing , or ]"); } } auto node = NN_NO_CHECK(std::make_unique(value)); if (indexStart > 0) { if (wkt[i] == ',') { indexEnd = i + 1; return node; } if (wkt[i] == ']' || wkt[i] == ')') { indexEnd = i; return node; } } if (wkt[i] != '[' && wkt[i] != '(') { throw ParsingException("missing ["); } ++i; // skip [ i = skipSpace(wkt, i); while (i < wkt.size() && wkt[i] != ']' && wkt[i] != ')') { size_t indexEndChild; node->addChild(createFrom(wkt, i, recLevel + 1, indexEndChild)); assert(indexEndChild > i); i = indexEndChild; i = skipSpace(wkt, i); if (i < wkt.size() && wkt[i] == ',') { ++i; i = skipSpace(wkt, i); } } if (i == wkt.size() || (wkt[i] != ']' && wkt[i] != ')')) { throw ParsingException("missing ]"); } indexEnd = i + 1; return node; } // --------------------------------------------------------------------------- /** \brief Instantiate a WKTNode hierarchy from a WKT string. * * @param wkt the WKT string to parse. * @param indexStart the start index in the wkt string. * @throw ParsingException if the string cannot be parsed. */ WKTNodeNNPtr WKTNode::createFrom(const std::string &wkt, size_t indexStart) { size_t indexEnd; return createFrom(wkt, indexStart, 0, indexEnd); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static std::string escapeIfQuotedString(const std::string &str) { if (str.size() > 2 && str[0] == '"' && str.back() == '"') { std::string res("\""); res += replaceAll(str.substr(1, str.size() - 2), "\"", "\"\""); res += '"'; return res; } else { return str; } } //! @endcond // --------------------------------------------------------------------------- /** \brief Return a WKT representation of the tree structure. */ std::string WKTNode::toString() const { std::string str(escapeIfQuotedString(d->value_)); if (!d->children_.empty()) { str += "["; bool first = true; for (auto &child : d->children_) { if (!first) { str += ','; } first = false; str += child->toString(); } str += "]"; } return str; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct WKTParser::Private { struct ci_less_struct { bool operator()(const std::string &lhs, const std::string &rhs) const noexcept { return ci_less(lhs, rhs); } }; bool strict_ = true; bool unsetIdentifiersIfIncompatibleDef_ = true; std::list warningList_{}; std::list grammarErrorList_{}; std::vector toWGS84Parameters_{}; std::string datumPROJ4Grids_{}; bool esriStyle_ = false; bool maybeEsriStyle_ = false; DatabaseContextPtr dbContext_{}; crs::GeographicCRSPtr geogCRSOfCompoundCRS_{}; static constexpr unsigned int MAX_PROPERTY_SIZE = 1024; std::vector> properties_{}; Private() = default; ~Private() = default; Private(const Private &) = delete; Private &operator=(const Private &) = delete; void emitRecoverableWarning(const std::string &warningMsg); void emitGrammarError(const std::string &errorMsg); void emitRecoverableMissingUNIT(const std::string &parentNodeName, const UnitOfMeasure &fallbackUnit); BaseObjectNNPtr build(const WKTNodeNNPtr &node); IdentifierPtr buildId(const WKTNodeNNPtr &parentNode, const WKTNodeNNPtr &node, bool tolerant, bool removeInverseOf); PropertyMap &buildProperties(const WKTNodeNNPtr &node, bool removeInverseOf = false, bool hasName = true); ObjectDomainPtr buildObjectDomain(const WKTNodeNNPtr &node); static std::string stripQuotes(const WKTNodeNNPtr &node); static double asDouble(const WKTNodeNNPtr &node); UnitOfMeasure buildUnit(const WKTNodeNNPtr &node, UnitOfMeasure::Type type = UnitOfMeasure::Type::UNKNOWN); UnitOfMeasure buildUnitInSubNode( const WKTNodeNNPtr &node, common::UnitOfMeasure::Type type = UnitOfMeasure::Type::UNKNOWN); EllipsoidNNPtr buildEllipsoid(const WKTNodeNNPtr &node); PrimeMeridianNNPtr buildPrimeMeridian(const WKTNodeNNPtr &node, const UnitOfMeasure &defaultAngularUnit); static optional getAnchor(const WKTNodeNNPtr &node); static optional getAnchorEpoch(const WKTNodeNNPtr &node); static void parseDynamic(const WKTNodeNNPtr &dynamicNode, double &frameReferenceEpoch, util::optional &modelName); GeodeticReferenceFrameNNPtr buildGeodeticReferenceFrame(const WKTNodeNNPtr &node, const PrimeMeridianNNPtr &primeMeridian, const WKTNodeNNPtr &dynamicNode); DatumEnsembleNNPtr buildDatumEnsemble(const WKTNodeNNPtr &node, const PrimeMeridianPtr &primeMeridian, bool expectEllipsoid); MeridianNNPtr buildMeridian(const WKTNodeNNPtr &node); CoordinateSystemAxisNNPtr buildAxis(const WKTNodeNNPtr &node, const UnitOfMeasure &unitIn, const UnitOfMeasure::Type &unitType, bool isGeocentric, int expectedOrderNum); CoordinateSystemNNPtr buildCS(const WKTNodeNNPtr &node, /* maybe null */ const WKTNodeNNPtr &parentNode, const UnitOfMeasure &defaultAngularUnit); GeodeticCRSNNPtr buildGeodeticCRS(const WKTNodeNNPtr &node); CRSNNPtr buildDerivedGeodeticCRS(const WKTNodeNNPtr &node); static UnitOfMeasure guessUnitForParameter(const std::string ¶mName, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit); void consumeParameters(const WKTNodeNNPtr &node, bool isAbridged, std::vector ¶meters, std::vector &values, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit); static std::string getExtensionProj4(const WKTNode::Private *nodeP); static void addExtensionProj4ToProp(const WKTNode::Private *nodeP, PropertyMap &props); ConversionNNPtr buildConversion(const WKTNodeNNPtr &node, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit); static bool hasWebMercPROJ4String(const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode); static std::string projectionGetParameter(const WKTNodeNNPtr &projCRSNode, const char *paramName); ConversionNNPtr buildProjection(const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit); ConversionNNPtr buildProjectionStandard(const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit); const ESRIMethodMapping * getESRIMapping(const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, std::map &mapParamNameToValue); static ConversionNNPtr buildProjectionFromESRI(const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit, const ESRIMethodMapping *esriMapping, std::map &mapParamNameToValue); ConversionNNPtr buildProjectionFromESRI(const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit); ProjectedCRSNNPtr buildProjectedCRS(const WKTNodeNNPtr &node); VerticalReferenceFrameNNPtr buildVerticalReferenceFrame(const WKTNodeNNPtr &node, const WKTNodeNNPtr &dynamicNode); TemporalDatumNNPtr buildTemporalDatum(const WKTNodeNNPtr &node); EngineeringDatumNNPtr buildEngineeringDatum(const WKTNodeNNPtr &node); ParametricDatumNNPtr buildParametricDatum(const WKTNodeNNPtr &node); CRSNNPtr buildVerticalCRS(const WKTNodeNNPtr &node); DerivedVerticalCRSNNPtr buildDerivedVerticalCRS(const WKTNodeNNPtr &node); CRSNNPtr buildCompoundCRS(const WKTNodeNNPtr &node); BoundCRSNNPtr buildBoundCRS(const WKTNodeNNPtr &node); TemporalCSNNPtr buildTemporalCS(const WKTNodeNNPtr &parentNode); TemporalCRSNNPtr buildTemporalCRS(const WKTNodeNNPtr &node); DerivedTemporalCRSNNPtr buildDerivedTemporalCRS(const WKTNodeNNPtr &node); EngineeringCRSNNPtr buildEngineeringCRS(const WKTNodeNNPtr &node); EngineeringCRSNNPtr buildEngineeringCRSFromLocalCS(const WKTNodeNNPtr &node); DerivedEngineeringCRSNNPtr buildDerivedEngineeringCRS(const WKTNodeNNPtr &node); ParametricCSNNPtr buildParametricCS(const WKTNodeNNPtr &parentNode); ParametricCRSNNPtr buildParametricCRS(const WKTNodeNNPtr &node); DerivedParametricCRSNNPtr buildDerivedParametricCRS(const WKTNodeNNPtr &node); DerivedProjectedCRSNNPtr buildDerivedProjectedCRS(const WKTNodeNNPtr &node); CRSPtr buildCRS(const WKTNodeNNPtr &node); TransformationNNPtr buildCoordinateOperation(const WKTNodeNNPtr &node); PointMotionOperationNNPtr buildPointMotionOperation(const WKTNodeNNPtr &node); ConcatenatedOperationNNPtr buildConcatenatedOperation(const WKTNodeNNPtr &node); CoordinateMetadataNNPtr buildCoordinateMetadata(const WKTNodeNNPtr &node); }; //! @endcond // --------------------------------------------------------------------------- WKTParser::WKTParser() : d(std::make_unique()) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress WKTParser::~WKTParser() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Set whether parsing should be done in strict mode. */ WKTParser &WKTParser::setStrict(bool strict) { d->strict_ = strict; return *this; } // --------------------------------------------------------------------------- /** \brief Set whether object identifiers should be unset when there is * a contradiction between the definition from WKT and the one from * the database. * * At time of writing, this only applies to the base geographic CRS of a * projected CRS, when comparing its coordinate system. */ WKTParser &WKTParser::setUnsetIdentifiersIfIncompatibleDef(bool unset) { d->unsetIdentifiersIfIncompatibleDef_ = unset; return *this; } // --------------------------------------------------------------------------- /** \brief Return the list of warnings found during parsing. * * \note The list might be non-empty only is setStrict(false) has been called. */ std::list WKTParser::warningList() const { return d->warningList_; } // --------------------------------------------------------------------------- /** \brief Return the list of grammar errors found during parsing. * * Grammar errors are non-compliance issues with respect to the WKT grammar. * * \note The list might be non-empty only is setStrict(false) has been called. * * @since PROJ 9.5 */ std::list WKTParser::grammarErrorList() const { return d->grammarErrorList_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void WKTParser::Private::emitRecoverableWarning(const std::string &errorMsg) { if (strict_) { throw ParsingException(errorMsg); } else { warningList_.push_back(errorMsg); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void WKTParser::Private::emitGrammarError(const std::string &errorMsg) { if (strict_) { throw ParsingException(errorMsg); } else { grammarErrorList_.push_back(errorMsg); } } //! @endcond // --------------------------------------------------------------------------- static double asDouble(const std::string &val) { return c_locale_stod(val); } // --------------------------------------------------------------------------- PROJ_NO_RETURN static void ThrowNotEnoughChildren(const std::string &nodeName) { throw ParsingException( concat("not enough children in ", nodeName, " node")); } // --------------------------------------------------------------------------- PROJ_NO_RETURN static void ThrowNotRequiredNumberOfChildren(const std::string &nodeName) { throw ParsingException( concat("not required number of children in ", nodeName, " node")); } // --------------------------------------------------------------------------- PROJ_NO_RETURN static void ThrowMissing(const std::string &nodeName) { throw ParsingException(concat("missing ", nodeName, " node")); } // --------------------------------------------------------------------------- PROJ_NO_RETURN static void ThrowNotExpectedCSType(const std::string &expectedCSType) { throw ParsingException(concat("CS node is not of type ", expectedCSType)); } // --------------------------------------------------------------------------- static ParsingException buildRethrow(const char *funcName, const std::exception &e) { std::string res(funcName); res += ": "; res += e.what(); return ParsingException(res); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::string WKTParser::Private::stripQuotes(const WKTNodeNNPtr &node) { return ::stripQuotes(node->GP()->value()); } // --------------------------------------------------------------------------- double WKTParser::Private::asDouble(const WKTNodeNNPtr &node) { return io::asDouble(node->GP()->value()); } // --------------------------------------------------------------------------- IdentifierPtr WKTParser::Private::buildId(const WKTNodeNNPtr &parentNode, const WKTNodeNNPtr &node, bool tolerant, bool removeInverseOf) { const auto *nodeP = node->GP(); const auto &nodeChildren = nodeP->children(); if (nodeChildren.size() >= 2) { auto codeSpace = stripQuotes(nodeChildren[0]); if (removeInverseOf && starts_with(codeSpace, "INVERSE(") && codeSpace.back() == ')') { codeSpace = codeSpace.substr(strlen("INVERSE(")); codeSpace.resize(codeSpace.size() - 1); } PropertyMap propertiesId; if (nodeChildren.size() >= 3 && nodeChildren[2]->GP()->childrenSize() == 0) { std::string version = stripQuotes(nodeChildren[2]); // IAU + 2015 -> IAU_2015 if (dbContext_) { std::string codeSpaceOut; if (dbContext_->getVersionedAuthority(codeSpace, version, codeSpaceOut)) { codeSpace = std::move(codeSpaceOut); version.clear(); } } if (!version.empty()) { propertiesId.set(Identifier::VERSION_KEY, version); } } auto code = stripQuotes(nodeChildren[1]); // Prior to PROJ 9.5, when synthetizing an ID for a CONVERSION UTM Zone // south, we generated a wrong value. Auto-fix that const auto &parentNodeKeyword(parentNode->GP()->value()); if (parentNodeKeyword == WKTConstants::CONVERSION && codeSpace == Identifier::EPSG) { const auto &parentNodeChildren = parentNode->GP()->children(); if (!parentNodeChildren.empty()) { const auto parentNodeName(stripQuotes(parentNodeChildren[0])); if (ci_starts_with(parentNodeName, "UTM Zone ") && parentNodeName.find('S') != std::string::npos) { const int nZone = atoi(parentNodeName.c_str() + strlen("UTM Zone ")); if (nZone >= 1 && nZone <= 60) { code = internal::toString(16100 + nZone); } } } } auto &citationNode = nodeP->lookForChild(WKTConstants::CITATION); auto &uriNode = nodeP->lookForChild(WKTConstants::URI); propertiesId.set(Identifier::CODESPACE_KEY, codeSpace); bool authoritySet = false; /*if (!isNull(citationNode))*/ { const auto *citationNodeP = citationNode->GP(); if (citationNodeP->childrenSize() == 1) { authoritySet = true; propertiesId.set(Identifier::AUTHORITY_KEY, stripQuotes(citationNodeP->children()[0])); } } if (!authoritySet) { propertiesId.set(Identifier::AUTHORITY_KEY, codeSpace); } /*if (!isNull(uriNode))*/ { const auto *uriNodeP = uriNode->GP(); if (uriNodeP->childrenSize() == 1) { propertiesId.set(Identifier::URI_KEY, stripQuotes(uriNodeP->children()[0])); } } return Identifier::create(code, propertiesId); } else if (strict_ || !tolerant) { ThrowNotEnoughChildren(nodeP->value()); } else { std::string msg("not enough children in "); msg += nodeP->value(); msg += " node"; warningList_.emplace_back(std::move(msg)); } return nullptr; } // --------------------------------------------------------------------------- PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node, bool removeInverseOf, bool hasName) { if (properties_.size() >= MAX_PROPERTY_SIZE) { throw ParsingException("MAX_PROPERTY_SIZE reached"); } properties_.push_back(std::make_unique()); auto properties = properties_.back().get(); std::string authNameFromAlias; std::string codeFromAlias; const auto *nodeP = node->GP(); const auto &nodeChildren = nodeP->children(); auto identifiers = ArrayOfBaseObject::create(); for (const auto &subNode : nodeChildren) { const auto &subNodeName(subNode->GP()->value()); if (ci_equal(subNodeName, WKTConstants::ID) || ci_equal(subNodeName, WKTConstants::AUTHORITY)) { auto id = buildId(node, subNode, true, removeInverseOf); if (id) { identifiers->add(NN_NO_CHECK(id)); } } } if (hasName && !nodeChildren.empty()) { const auto &nodeName(nodeP->value()); auto name(stripQuotes(nodeChildren[0])); if (removeInverseOf && starts_with(name, "Inverse of ")) { name = name.substr(strlen("Inverse of ")); } if (ends_with(name, " (deprecated)")) { name.resize(name.size() - strlen(" (deprecated)")); properties->set(common::IdentifiedObject::DEPRECATED_KEY, true); } // Oracle WKT can contain names like // "Reseau Geodesique Francais 1993 (EPSG ID 6171)" // for WKT attributes to the auth_name = "IGN - Paris" // Strip that suffix from the name and assign a true EPSG code to the // object if (identifiers->empty()) { const auto pos = name.find(" (EPSG ID "); if (pos != std::string::npos && name.back() == ')') { const auto code = name.substr(pos + strlen(" (EPSG ID "), name.size() - 1 - pos - strlen(" (EPSG ID ")); name.resize(pos); PropertyMap propertiesId; propertiesId.set(Identifier::CODESPACE_KEY, Identifier::EPSG); propertiesId.set(Identifier::AUTHORITY_KEY, Identifier::EPSG); identifiers->add(Identifier::create(code, propertiesId)); } } const char *tableNameForAlias = nullptr; if (ci_equal(nodeName, WKTConstants::GEOGCS)) { if (starts_with(name, "GCS_")) { esriStyle_ = true; if (name == "GCS_WGS_1984") { name = "WGS 84"; } else if (name == "GCS_unknown") { name = "unknown"; } else { tableNameForAlias = "geodetic_crs"; } } } else if (esriStyle_ && ci_equal(nodeName, WKTConstants::SPHEROID)) { if (name == "WGS_1984") { name = "WGS 84"; authNameFromAlias = Identifier::EPSG; codeFromAlias = "7030"; } else { tableNameForAlias = "ellipsoid"; } } if (dbContext_ && tableNameForAlias) { std::string outTableName; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); auto officialName = authFactory->getOfficialNameFromAlias( name, tableNameForAlias, "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { name = std::move(officialName); // Clearing authority for geodetic_crs because of // potential axis order mismatch. if (strcmp(tableNameForAlias, "geodetic_crs") == 0) { authNameFromAlias.clear(); codeFromAlias.clear(); } } } properties->set(IdentifiedObject::NAME_KEY, name); } if (identifiers->empty() && !authNameFromAlias.empty()) { identifiers->add(Identifier::create( codeFromAlias, PropertyMap() .set(Identifier::CODESPACE_KEY, authNameFromAlias) .set(Identifier::AUTHORITY_KEY, authNameFromAlias))); } if (!identifiers->empty()) { properties->set(IdentifiedObject::IDENTIFIERS_KEY, identifiers); } auto &remarkNode = nodeP->lookForChild(WKTConstants::REMARK); if (!isNull(remarkNode)) { const auto &remarkChildren = remarkNode->GP()->children(); if (remarkChildren.size() == 1) { properties->set(IdentifiedObject::REMARKS_KEY, stripQuotes(remarkChildren[0])); } else { ThrowNotRequiredNumberOfChildren(remarkNode->GP()->value()); } } ArrayOfBaseObjectNNPtr array = ArrayOfBaseObject::create(); for (const auto &subNode : nodeP->children()) { const auto &subNodeName(subNode->GP()->value()); if (ci_equal(subNodeName, WKTConstants::USAGE)) { auto objectDomain = buildObjectDomain(subNode); if (!objectDomain) { throw ParsingException( concat("missing children in ", subNodeName, " node")); } array->add(NN_NO_CHECK(objectDomain)); } } if (!array->empty()) { properties->set(ObjectUsage::OBJECT_DOMAIN_KEY, array); } else { auto objectDomain = buildObjectDomain(node); if (objectDomain) { properties->set(ObjectUsage::OBJECT_DOMAIN_KEY, NN_NO_CHECK(objectDomain)); } } auto &versionNode = nodeP->lookForChild(WKTConstants::VERSION); if (!isNull(versionNode)) { const auto &versionChildren = versionNode->GP()->children(); if (versionChildren.size() == 1) { properties->set(CoordinateOperation::OPERATION_VERSION_KEY, stripQuotes(versionChildren[0])); } else { ThrowNotRequiredNumberOfChildren(versionNode->GP()->value()); } } return *properties; } // --------------------------------------------------------------------------- ObjectDomainPtr WKTParser::Private::buildObjectDomain(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &scopeNode = nodeP->lookForChild(WKTConstants::SCOPE); auto &areaNode = nodeP->lookForChild(WKTConstants::AREA); auto &bboxNode = nodeP->lookForChild(WKTConstants::BBOX); auto &verticalExtentNode = nodeP->lookForChild(WKTConstants::VERTICALEXTENT); auto &temporalExtentNode = nodeP->lookForChild(WKTConstants::TIMEEXTENT); if (!isNull(scopeNode) || !isNull(areaNode) || !isNull(bboxNode) || !isNull(verticalExtentNode) || !isNull(temporalExtentNode)) { optional scope; const auto *scopeNodeP = scopeNode->GP(); const auto &scopeChildren = scopeNodeP->children(); if (scopeChildren.size() == 1) { scope = stripQuotes(scopeChildren[0]); } ExtentPtr extent; if (!isNull(areaNode) || !isNull(bboxNode)) { util::optional description; std::vector geogExtent; std::vector verticalExtent; std::vector temporalExtent; if (!isNull(areaNode)) { const auto &areaChildren = areaNode->GP()->children(); if (areaChildren.size() == 1) { description = stripQuotes(areaChildren[0]); } else { ThrowNotRequiredNumberOfChildren(areaNode->GP()->value()); } } if (!isNull(bboxNode)) { const auto &bboxChildren = bboxNode->GP()->children(); if (bboxChildren.size() == 4) { try { double south = asDouble(bboxChildren[0]); double west = asDouble(bboxChildren[1]); double north = asDouble(bboxChildren[2]); double east = asDouble(bboxChildren[3]); auto bbox = GeographicBoundingBox::create(west, south, east, north); geogExtent.emplace_back(bbox); } catch (const std::exception &) { throw ParsingException(concat("not 4 double values in ", bboxNode->GP()->value(), " node")); } } else { ThrowNotRequiredNumberOfChildren(bboxNode->GP()->value()); } } if (!isNull(verticalExtentNode)) { const auto &verticalExtentChildren = verticalExtentNode->GP()->children(); const auto verticalExtentChildrenSize = verticalExtentChildren.size(); if (verticalExtentChildrenSize == 2 || verticalExtentChildrenSize == 3) { double min; double max; try { min = asDouble(verticalExtentChildren[0]); max = asDouble(verticalExtentChildren[1]); } catch (const std::exception &) { throw ParsingException( concat("not 2 double values in ", verticalExtentNode->GP()->value(), " node")); } UnitOfMeasure unit = UnitOfMeasure::METRE; if (verticalExtentChildrenSize == 3) { unit = buildUnit(verticalExtentChildren[2], UnitOfMeasure::Type::LINEAR); } verticalExtent.emplace_back(VerticalExtent::create( min, max, util::nn_make_shared(unit))); } else { ThrowNotRequiredNumberOfChildren( verticalExtentNode->GP()->value()); } } if (!isNull(temporalExtentNode)) { const auto &temporalExtentChildren = temporalExtentNode->GP()->children(); if (temporalExtentChildren.size() == 2) { temporalExtent.emplace_back(TemporalExtent::create( stripQuotes(temporalExtentChildren[0]), stripQuotes(temporalExtentChildren[1]))); } else { ThrowNotRequiredNumberOfChildren( temporalExtentNode->GP()->value()); } } extent = Extent::create(description, geogExtent, verticalExtent, temporalExtent) .as_nullable(); } return ObjectDomain::create(scope, extent).as_nullable(); } return nullptr; } // --------------------------------------------------------------------------- UnitOfMeasure WKTParser::Private::buildUnit(const WKTNodeNNPtr &node, UnitOfMeasure::Type type) { const auto *nodeP = node->GP(); const auto &children = nodeP->children(); if ((type != UnitOfMeasure::Type::TIME && children.size() < 2) || (type == UnitOfMeasure::Type::TIME && children.size() < 1)) { ThrowNotEnoughChildren(nodeP->value()); } try { std::string unitName(stripQuotes(children[0])); PropertyMap properties(buildProperties(node)); auto &idNode = nodeP->lookForChild(WKTConstants::ID, WKTConstants::AUTHORITY); if (!isNull(idNode) && idNode->GP()->childrenSize() < 2) { emitRecoverableWarning("not enough children in " + idNode->GP()->value() + " node"); } const bool hasValidIdNode = !isNull(idNode) && idNode->GP()->childrenSize() >= 2; const auto &idNodeChildren(idNode->GP()->children()); std::string codeSpace(hasValidIdNode ? stripQuotes(idNodeChildren[0]) : std::string()); std::string code(hasValidIdNode ? stripQuotes(idNodeChildren[1]) : std::string()); bool queryDb = true; if (type == UnitOfMeasure::Type::UNKNOWN) { if (ci_equal(unitName, "METER") || ci_equal(unitName, "METRE")) { type = UnitOfMeasure::Type::LINEAR; unitName = "metre"; if (codeSpace.empty()) { codeSpace = Identifier::EPSG; code = "9001"; queryDb = false; } } else if (ci_equal(unitName, "DEGREE") || ci_equal(unitName, "GRAD")) { type = UnitOfMeasure::Type::ANGULAR; } } if (esriStyle_ && dbContext_ && queryDb) { std::string outTableName; std::string authNameFromAlias; std::string codeFromAlias; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); auto officialName = authFactory->getOfficialNameFromAlias( unitName, "unit_of_measure", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { unitName = std::move(officialName); codeSpace = std::move(authNameFromAlias); code = std::move(codeFromAlias); } } double convFactor = children.size() >= 2 ? asDouble(children[1]) : 0.0; constexpr double US_FOOT_CONV_FACTOR = 12.0 / 39.37; constexpr double REL_ERROR = 1e-10; // Fix common rounding errors if (std::fabs(convFactor - UnitOfMeasure::DEGREE.conversionToSI()) < REL_ERROR * convFactor) { convFactor = UnitOfMeasure::DEGREE.conversionToSI(); } else if (std::fabs(convFactor - US_FOOT_CONV_FACTOR) < REL_ERROR * convFactor) { convFactor = US_FOOT_CONV_FACTOR; } return UnitOfMeasure(unitName, convFactor, type, codeSpace, code); } catch (const std::exception &e) { throw buildRethrow(__FUNCTION__, e); } } // --------------------------------------------------------------------------- // node here is a parent node, not a UNIT/LENGTHUNIT/ANGLEUNIT/TIMEUNIT/... node UnitOfMeasure WKTParser::Private::buildUnitInSubNode(const WKTNodeNNPtr &node, UnitOfMeasure::Type type) { const auto *nodeP = node->GP(); { auto &unitNode = nodeP->lookForChild(WKTConstants::LENGTHUNIT); if (!isNull(unitNode)) { return buildUnit(unitNode, UnitOfMeasure::Type::LINEAR); } } { auto &unitNode = nodeP->lookForChild(WKTConstants::ANGLEUNIT); if (!isNull(unitNode)) { return buildUnit(unitNode, UnitOfMeasure::Type::ANGULAR); } } { auto &unitNode = nodeP->lookForChild(WKTConstants::SCALEUNIT); if (!isNull(unitNode)) { return buildUnit(unitNode, UnitOfMeasure::Type::SCALE); } } { auto &unitNode = nodeP->lookForChild(WKTConstants::TIMEUNIT); if (!isNull(unitNode)) { return buildUnit(unitNode, UnitOfMeasure::Type::TIME); } } { auto &unitNode = nodeP->lookForChild(WKTConstants::TEMPORALQUANTITY); if (!isNull(unitNode)) { return buildUnit(unitNode, UnitOfMeasure::Type::TIME); } } { auto &unitNode = nodeP->lookForChild(WKTConstants::PARAMETRICUNIT); if (!isNull(unitNode)) { return buildUnit(unitNode, UnitOfMeasure::Type::PARAMETRIC); } } { auto &unitNode = nodeP->lookForChild(WKTConstants::UNIT); if (!isNull(unitNode)) { return buildUnit(unitNode, type); } } return UnitOfMeasure::NONE; } // --------------------------------------------------------------------------- EllipsoidNNPtr WKTParser::Private::buildEllipsoid(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); const auto &children = nodeP->children(); if (children.size() < 3) { ThrowNotEnoughChildren(nodeP->value()); } try { UnitOfMeasure unit = buildUnitInSubNode(node, UnitOfMeasure::Type::LINEAR); if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure::METRE; } Length semiMajorAxis(asDouble(children[1]), unit); // Some WKT in the wild use "inf". Cf SPHEROID["unnamed",6370997,"inf"] // in https://zenodo.org/record/3878979#.Y_P4g4CZNH4, // https://zenodo.org/record/5831940#.Y_P4i4CZNH5 // or https://grasswiki.osgeo.org/wiki/Marine_Science const auto &invFlatteningChild = children[2]; if (invFlatteningChild->GP()->value() == "\"inf\"") { emitRecoverableWarning("Inverse flattening = \"inf\" is not " "conformant, but understood"); } Scale invFlattening(invFlatteningChild->GP()->value() == "\"inf\"" ? 0 : asDouble(invFlatteningChild)); const auto ellpsProperties = buildProperties(node); std::string ellpsName; ellpsProperties.getStringValue(IdentifiedObject::NAME_KEY, ellpsName); const auto celestialBody(Ellipsoid::guessBodyName( dbContext_, semiMajorAxis.getSIValue(), ellpsName)); if (invFlattening.getSIValue() == 0) { return Ellipsoid::createSphere(ellpsProperties, semiMajorAxis, celestialBody); } else { return Ellipsoid::createFlattenedSphere( ellpsProperties, semiMajorAxis, invFlattening, celestialBody); } } catch (const std::exception &e) { throw buildRethrow(__FUNCTION__, e); } } // --------------------------------------------------------------------------- PrimeMeridianNNPtr WKTParser::Private::buildPrimeMeridian( const WKTNodeNNPtr &node, const UnitOfMeasure &defaultAngularUnit) { const auto *nodeP = node->GP(); const auto &children = nodeP->children(); if (children.size() < 2) { ThrowNotEnoughChildren(nodeP->value()); } auto name = stripQuotes(children[0]); UnitOfMeasure unit = buildUnitInSubNode(node, UnitOfMeasure::Type::ANGULAR); if (unit == UnitOfMeasure::NONE) { unit = defaultAngularUnit; if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure::DEGREE; } } try { double angleValue = asDouble(children[1]); // Correct for GDAL WKT1 and WKT1-ESRI departure if (name == "Paris" && std::fabs(angleValue - 2.33722917) < 1e-8 && unit._isEquivalentTo(UnitOfMeasure::GRAD, util::IComparable::Criterion::EQUIVALENT)) { angleValue = 2.5969213; } else { static const struct { const char *name; int deg; int min; double sec; } primeMeridiansDMS[] = { {"Lisbon", -9, 7, 54.862}, {"Bogota", -74, 4, 51.3}, {"Madrid", -3, 41, 14.55}, {"Rome", 12, 27, 8.4}, {"Bern", 7, 26, 22.5}, {"Jakarta", 106, 48, 27.79}, {"Ferro", -17, 40, 0}, {"Brussels", 4, 22, 4.71}, {"Stockholm", 18, 3, 29.8}, {"Athens", 23, 42, 58.815}, {"Oslo", 10, 43, 22.5}, {"Paris RGS", 2, 20, 13.95}, {"Paris_RGS", 2, 20, 13.95}}; // Current epsg.org output may use the EPSG:9110 "sexagesimal DMS" // unit and a DD.MMSSsss value, but this will likely be changed to // use decimal degree. // Or WKT1 may for example use the Paris RGS decimal degree value // but with a GEOGCS with UNIT["Grad"] for (const auto &pmDef : primeMeridiansDMS) { if (name == pmDef.name) { double dmsAsDecimalValue = (pmDef.deg >= 0 ? 1 : -1) * (std::abs(pmDef.deg) + pmDef.min / 100. + pmDef.sec / 10000.); double dmsAsDecimalDegreeValue = (pmDef.deg >= 0 ? 1 : -1) * (std::abs(pmDef.deg) + pmDef.min / 60. + pmDef.sec / 3600.); if (std::fabs(angleValue - dmsAsDecimalValue) < 1e-8 || std::fabs(angleValue - dmsAsDecimalDegreeValue) < 1e-8) { angleValue = dmsAsDecimalDegreeValue; unit = UnitOfMeasure::DEGREE; } break; } } } auto &properties = buildProperties(node); if (dbContext_ && esriStyle_) { std::string outTableName; std::string codeFromAlias; std::string authNameFromAlias; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); auto officialName = authFactory->getOfficialNameFromAlias( name, "prime_meridian", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { properties.set(IdentifiedObject::NAME_KEY, officialName); if (!authNameFromAlias.empty()) { auto identifiers = ArrayOfBaseObject::create(); identifiers->add(Identifier::create( codeFromAlias, PropertyMap() .set(Identifier::CODESPACE_KEY, authNameFromAlias) .set(Identifier::AUTHORITY_KEY, authNameFromAlias))); properties.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers); } } } Angle angle(angleValue, unit); return PrimeMeridian::create(properties, angle); } catch (const std::exception &e) { throw buildRethrow(__FUNCTION__, e); } } // --------------------------------------------------------------------------- optional WKTParser::Private::getAnchor(const WKTNodeNNPtr &node) { auto &anchorNode = node->GP()->lookForChild(WKTConstants::ANCHOR); if (anchorNode->GP()->childrenSize() == 1) { return optional( stripQuotes(anchorNode->GP()->children()[0])); } return optional(); } // --------------------------------------------------------------------------- optional WKTParser::Private::getAnchorEpoch(const WKTNodeNNPtr &node) { auto &anchorEpochNode = node->GP()->lookForChild(WKTConstants::ANCHOREPOCH); if (anchorEpochNode->GP()->childrenSize() == 1) { try { double value = asDouble(anchorEpochNode->GP()->children()[0]); return optional( common::Measure(value, common::UnitOfMeasure::YEAR)); } catch (const std::exception &e) { throw buildRethrow(__FUNCTION__, e); } } return optional(); } // --------------------------------------------------------------------------- static const PrimeMeridianNNPtr & fixupPrimeMeridan(const EllipsoidNNPtr &ellipsoid, const PrimeMeridianNNPtr &pm) { return (ellipsoid->celestialBody() != Ellipsoid::EARTH && pm.get() == PrimeMeridian::GREENWICH.get()) ? PrimeMeridian::REFERENCE_MERIDIAN : pm; } // --------------------------------------------------------------------------- GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame( const WKTNodeNNPtr &node, const PrimeMeridianNNPtr &primeMeridian, const WKTNodeNNPtr &dynamicNode) { const auto *nodeP = node->GP(); auto &ellipsoidNode = nodeP->lookForChild(WKTConstants::ELLIPSOID, WKTConstants::SPHEROID); if (isNull(ellipsoidNode)) { ThrowMissing(WKTConstants::ELLIPSOID); } auto &properties = buildProperties(node); // do that before buildEllipsoid() so that esriStyle_ can be set auto name = stripQuotes(nodeP->children()[0]); const auto identifyFromName = [&](const std::string &l_name) { if (dbContext_) { auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); auto res = authFactory->createObjectsFromName( l_name, {AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME}, true, 1); if (!res.empty()) { bool foundDatumName = false; const auto &refDatum = res.front(); if (metadata::Identifier::isEquivalentName( l_name.c_str(), refDatum->nameStr().c_str())) { foundDatumName = true; } else if (refDatum->identifiers().size() == 1) { const auto &id = refDatum->identifiers()[0]; const auto aliases = authFactory->databaseContext()->getAliases( *id->codeSpace(), id->code(), refDatum->nameStr(), "geodetic_datum", std::string()); for (const auto &alias : aliases) { if (metadata::Identifier::isEquivalentName( l_name.c_str(), alias.c_str())) { foundDatumName = true; break; } } } if (foundDatumName) { properties.set(IdentifiedObject::NAME_KEY, refDatum->nameStr()); if (!properties.get(Identifier::CODESPACE_KEY) && refDatum->identifiers().size() == 1) { const auto &id = refDatum->identifiers()[0]; auto identifiers = ArrayOfBaseObject::create(); identifiers->add(Identifier::create( id->code(), PropertyMap() .set(Identifier::CODESPACE_KEY, *id->codeSpace()) .set(Identifier::AUTHORITY_KEY, *id->codeSpace()))); properties.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers); } return true; } } else { // Get official name from database if AUTHORITY is present auto &idNode = nodeP->lookForChild(WKTConstants::AUTHORITY); if (!isNull(idNode)) { try { auto id = buildId(node, idNode, false, false); auto authFactory2 = AuthorityFactory::create( NN_NO_CHECK(dbContext_), *id->codeSpace()); auto dbDatum = authFactory2->createGeodeticDatum(id->code()); properties.set(IdentifiedObject::NAME_KEY, dbDatum->nameStr()); return true; } catch (const std::exception &) { } } } } return false; }; // Remap GDAL WGS_1984 to EPSG v9 "World Geodetic System 1984" official // name. // Also remap EPSG v10 datum ensemble names to non-ensemble EPSG v9 bool nameSet = false; if (name == "WGS_1984" || name == "World Geodetic System 1984 ensemble") { nameSet = true; properties.set(IdentifiedObject::NAME_KEY, GeodeticReferenceFrame::EPSG_6326->nameStr()); } else if (name == "European Terrestrial Reference System 1989 ensemble") { nameSet = true; properties.set(IdentifiedObject::NAME_KEY, "European Terrestrial Reference System 1989"); } // If we got hints this might be a ESRI WKT, then check in the DB to // confirm std::string officialName; std::string authNameFromAlias; std::string codeFromAlias; if (!nameSet && maybeEsriStyle_ && dbContext_ && !(starts_with(name, "D_") || esriStyle_)) { std::string outTableName; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); officialName = authFactory->getOfficialNameFromAlias( name, "geodetic_datum", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { maybeEsriStyle_ = false; esriStyle_ = true; } } if (!nameSet && (starts_with(name, "D_") || esriStyle_)) { esriStyle_ = true; const char *tableNameForAlias = nullptr; if (name == "D_WGS_1984") { name = "World Geodetic System 1984"; authNameFromAlias = Identifier::EPSG; codeFromAlias = "6326"; } else if (name == "D_ETRS_1989") { name = "European Terrestrial Reference System 1989"; authNameFromAlias = Identifier::EPSG; codeFromAlias = "6258"; } else if (name == "D_unknown") { name = "unknown"; } else { tableNameForAlias = "geodetic_datum"; } bool setNameAndId = true; if (dbContext_ && tableNameForAlias) { if (officialName.empty()) { std::string outTableName; auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext_), std::string()); officialName = authFactory->getOfficialNameFromAlias( name, tableNameForAlias, "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); } if (officialName.empty()) { if (starts_with(name, "D_")) { // For the case of "D_GDA2020" where there is no D_GDA2020 // ESRI alias, so just try without the D_ prefix. const auto nameWithoutDPrefix = name.substr(2); if (identifyFromName(nameWithoutDPrefix)) { setNameAndId = false; // already done in identifyFromName() } } } else { if (primeMeridian->nameStr() != PrimeMeridian::GREENWICH->nameStr()) { auto nameWithPM = officialName + " (" + primeMeridian->nameStr() + ")"; if (dbContext_->isKnownName(nameWithPM, "geodetic_datum")) { officialName = std::move(nameWithPM); } } name = std::move(officialName); } } if (setNameAndId) { properties.set(IdentifiedObject::NAME_KEY, name); if (!authNameFromAlias.empty()) { auto identifiers = ArrayOfBaseObject::create(); identifiers->add(Identifier::create( codeFromAlias, PropertyMap() .set(Identifier::CODESPACE_KEY, authNameFromAlias) .set(Identifier::AUTHORITY_KEY, authNameFromAlias))); properties.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers); } } } else if (!nameSet && name.find('_') != std::string::npos) { // Likely coming from WKT1 identifyFromName(name); } auto ellipsoid = buildEllipsoid(ellipsoidNode); const auto &primeMeridianModified = fixupPrimeMeridan(ellipsoid, primeMeridian); auto &TOWGS84Node = nodeP->lookForChild(WKTConstants::TOWGS84); if (!isNull(TOWGS84Node)) { const auto &TOWGS84Children = TOWGS84Node->GP()->children(); const size_t TOWGS84Size = TOWGS84Children.size(); if (TOWGS84Size == 3 || TOWGS84Size == 7) { try { for (const auto &child : TOWGS84Children) { toWGS84Parameters_.push_back(asDouble(child)); } if (TOWGS84Size == 7 && dbContext_) { dbContext_->toWGS84AutocorrectWrongValues( toWGS84Parameters_[0], toWGS84Parameters_[1], toWGS84Parameters_[2], toWGS84Parameters_[3], toWGS84Parameters_[4], toWGS84Parameters_[5], toWGS84Parameters_[6]); } for (size_t i = TOWGS84Size; i < 7; ++i) { toWGS84Parameters_.push_back(0.0); } } catch (const std::exception &) { throw ParsingException("Invalid TOWGS84 node"); } } else { throw ParsingException("Invalid TOWGS84 node"); } } auto &extensionNode = nodeP->lookForChild(WKTConstants::EXTENSION); const auto &extensionChildren = extensionNode->GP()->children(); if (extensionChildren.size() == 2) { if (ci_equal(stripQuotes(extensionChildren[0]), "PROJ4_GRIDS")) { datumPROJ4Grids_ = stripQuotes(extensionChildren[1]); } } if (!isNull(dynamicNode)) { double frameReferenceEpoch = 0.0; util::optional modelName; parseDynamic(dynamicNode, frameReferenceEpoch, modelName); return DynamicGeodeticReferenceFrame::create( properties, ellipsoid, getAnchor(node), primeMeridianModified, common::Measure(frameReferenceEpoch, common::UnitOfMeasure::YEAR), modelName); } return GeodeticReferenceFrame::create(properties, ellipsoid, getAnchor(node), getAnchorEpoch(node), primeMeridianModified); } // --------------------------------------------------------------------------- DatumEnsembleNNPtr WKTParser::Private::buildDatumEnsemble(const WKTNodeNNPtr &node, const PrimeMeridianPtr &primeMeridian, bool expectEllipsoid) { const auto *nodeP = node->GP(); auto &ellipsoidNode = nodeP->lookForChild(WKTConstants::ELLIPSOID, WKTConstants::SPHEROID); if (expectEllipsoid && isNull(ellipsoidNode)) { ThrowMissing(WKTConstants::ELLIPSOID); } std::vector datums; for (const auto &subNode : nodeP->children()) { if (ci_equal(subNode->GP()->value(), WKTConstants::MEMBER)) { if (subNode->GP()->childrenSize() == 0) { throw ParsingException("Invalid MEMBER node"); } if (expectEllipsoid) { datums.emplace_back(GeodeticReferenceFrame::create( buildProperties(subNode), buildEllipsoid(ellipsoidNode), optional(), primeMeridian ? NN_NO_CHECK(primeMeridian) : PrimeMeridian::GREENWICH)); } else { datums.emplace_back( VerticalReferenceFrame::create(buildProperties(subNode))); } } } auto &accuracyNode = nodeP->lookForChild(WKTConstants::ENSEMBLEACCURACY); auto &accuracyNodeChildren = accuracyNode->GP()->children(); if (accuracyNodeChildren.empty()) { ThrowMissing(WKTConstants::ENSEMBLEACCURACY); } auto accuracy = PositionalAccuracy::create(accuracyNodeChildren[0]->GP()->value()); try { return DatumEnsemble::create(buildProperties(node), datums, accuracy); } catch (const util::Exception &e) { throw buildRethrow(__FUNCTION__, e); } } // --------------------------------------------------------------------------- MeridianNNPtr WKTParser::Private::buildMeridian(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); const auto &children = nodeP->children(); if (children.size() < 2) { ThrowNotEnoughChildren(nodeP->value()); } UnitOfMeasure unit = buildUnitInSubNode(node, UnitOfMeasure::Type::ANGULAR); try { double angleValue = asDouble(children[0]); Angle angle(angleValue, unit); return Meridian::create(angle); } catch (const std::exception &e) { throw buildRethrow(__FUNCTION__, e); } } // --------------------------------------------------------------------------- PROJ_NO_RETURN static void ThrowParsingExceptionMissingUNIT() { throw ParsingException("buildCS: missing UNIT"); } // --------------------------------------------------------------------------- CoordinateSystemAxisNNPtr WKTParser::Private::buildAxis(const WKTNodeNNPtr &node, const UnitOfMeasure &unitIn, const UnitOfMeasure::Type &unitType, bool isGeocentric, int expectedOrderNum) { const auto *nodeP = node->GP(); const auto &children = nodeP->children(); if (children.size() < 2) { ThrowNotEnoughChildren(nodeP->value()); } auto &orderNode = nodeP->lookForChild(WKTConstants::ORDER); if (!isNull(orderNode)) { const auto &orderNodeChildren = orderNode->GP()->children(); if (orderNodeChildren.size() != 1) { ThrowNotEnoughChildren(WKTConstants::ORDER); } const auto &order = orderNodeChildren[0]->GP()->value(); int orderNum; try { orderNum = std::stoi(order); } catch (const std::exception &) { throw ParsingException( concat("buildAxis: invalid ORDER value: ", order)); } if (orderNum != expectedOrderNum) { throw ParsingException( concat("buildAxis: did not get expected ORDER value: ", order)); } } // The axis designation in WK2 can be: "name", "(abbrev)" or "name // (abbrev)" std::string axisDesignation(stripQuotes(children[0])); size_t sepPos = axisDesignation.find(" ("); std::string axisName; std::string abbreviation; if (sepPos != std::string::npos && axisDesignation.back() == ')') { axisName = CoordinateSystemAxis::normalizeAxisName( axisDesignation.substr(0, sepPos)); abbreviation = axisDesignation.substr(sepPos + 2); abbreviation.resize(abbreviation.size() - 1); } else if (!axisDesignation.empty() && axisDesignation[0] == '(' && axisDesignation.back() == ')') { abbreviation = axisDesignation.substr(1, axisDesignation.size() - 2); if (abbreviation == AxisAbbreviation::E) { axisName = AxisName::Easting; } else if (abbreviation == AxisAbbreviation::N) { axisName = AxisName::Northing; } else if (abbreviation == AxisAbbreviation::lat) { axisName = AxisName::Latitude; } else if (abbreviation == AxisAbbreviation::lon) { axisName = AxisName::Longitude; } } else { axisName = CoordinateSystemAxis::normalizeAxisName(axisDesignation); if (axisName == AxisName::Latitude) { abbreviation = AxisAbbreviation::lat; } else if (axisName == AxisName::Longitude) { abbreviation = AxisAbbreviation::lon; } else if (axisName == AxisName::Ellipsoidal_height) { abbreviation = AxisAbbreviation::h; } } const std::string &dirString = children[1]->GP()->value(); const AxisDirection *direction = AxisDirection::valueOf(dirString); // WKT2, geocentric CS: axis names are omitted if (axisName.empty()) { if (direction == &AxisDirection::GEOCENTRIC_X && abbreviation == AxisAbbreviation::X) { axisName = AxisName::Geocentric_X; } else if (direction == &AxisDirection::GEOCENTRIC_Y && abbreviation == AxisAbbreviation::Y) { axisName = AxisName::Geocentric_Y; } else if (direction == &AxisDirection::GEOCENTRIC_Z && abbreviation == AxisAbbreviation::Z) { axisName = AxisName::Geocentric_Z; } } // WKT1 if (!direction && isGeocentric && axisName == AxisName::Geocentric_X) { abbreviation = AxisAbbreviation::X; direction = &AxisDirection::GEOCENTRIC_X; } else if (!direction && isGeocentric && axisName == AxisName::Geocentric_Y) { abbreviation = AxisAbbreviation::Y; direction = &AxisDirection::GEOCENTRIC_Y; } else if (isGeocentric && axisName == AxisName::Geocentric_Z && (dirString == AxisDirectionWKT1::NORTH.toString() || dirString == AxisDirectionWKT1::OTHER.toString())) { abbreviation = AxisAbbreviation::Z; direction = &AxisDirection::GEOCENTRIC_Z; } else if (dirString == AxisDirectionWKT1::OTHER.toString()) { direction = &AxisDirection::UNSPECIFIED; } else if (dirString == "UNKNOWN") { // Found in WKT1 of NSIDC's EASE-Grid Sea Ice Age datasets. // Cf https://github.com/OSGeo/gdal/issues/7210 emitRecoverableWarning("UNKNOWN is not a valid direction name."); direction = &AxisDirection::UNSPECIFIED; } if (!direction) { throw ParsingException( concat("unhandled axis direction: ", children[1]->GP()->value())); } UnitOfMeasure unit(buildUnitInSubNode(node)); if (unit == UnitOfMeasure::NONE) { // If no unit in the AXIS node, use the one potentially coming from // the CS. unit = unitIn; if (unit == UnitOfMeasure::NONE && unitType != UnitOfMeasure::Type::NONE && unitType != UnitOfMeasure::Type::TIME) { ThrowParsingExceptionMissingUNIT(); } } auto &meridianNode = nodeP->lookForChild(WKTConstants::MERIDIAN); util::optional minVal; auto &axisMinValueNode = nodeP->lookForChild(WKTConstants::AXISMINVALUE); if (!isNull(axisMinValueNode)) { const auto &axisMinValueNodeChildren = axisMinValueNode->GP()->children(); if (axisMinValueNodeChildren.size() != 1) { ThrowNotEnoughChildren(WKTConstants::AXISMINVALUE); } const auto &val = axisMinValueNodeChildren[0]; try { minVal = asDouble(val); } catch (const std::exception &) { throw ParsingException(concat( "buildAxis: invalid AXISMINVALUE value: ", val->GP()->value())); } } util::optional maxVal; auto &axisMaxValueNode = nodeP->lookForChild(WKTConstants::AXISMAXVALUE); if (!isNull(axisMaxValueNode)) { const auto &axisMaxValueNodeChildren = axisMaxValueNode->GP()->children(); if (axisMaxValueNodeChildren.size() != 1) { ThrowNotEnoughChildren(WKTConstants::AXISMAXVALUE); } const auto &val = axisMaxValueNodeChildren[0]; try { maxVal = asDouble(val); } catch (const std::exception &) { throw ParsingException(concat( "buildAxis: invalid AXISMAXVALUE value: ", val->GP()->value())); } } util::optional rangeMeaning; auto &rangeMeaningNode = nodeP->lookForChild(WKTConstants::RANGEMEANING); if (!isNull(rangeMeaningNode)) { const auto &rangeMeaningNodeChildren = rangeMeaningNode->GP()->children(); if (rangeMeaningNodeChildren.size() != 1) { ThrowNotEnoughChildren(WKTConstants::RANGEMEANING); } const std::string &val = rangeMeaningNodeChildren[0]->GP()->value(); const RangeMeaning *meaning = RangeMeaning::valueOf(val); if (meaning == nullptr) { throw ParsingException( concat("buildAxis: invalid RANGEMEANING value: ", val)); } rangeMeaning = util::optional(*meaning); } return CoordinateSystemAxis::create( buildProperties(node).set(IdentifiedObject::NAME_KEY, axisName), abbreviation, *direction, unit, minVal, maxVal, rangeMeaning, !isNull(meridianNode) ? buildMeridian(meridianNode).as_nullable() : nullptr); } // --------------------------------------------------------------------------- static const PropertyMap emptyPropertyMap{}; // --------------------------------------------------------------------------- PROJ_NO_RETURN static void ThrowParsingException(const std::string &msg) { throw ParsingException(msg); } // --------------------------------------------------------------------------- static ParsingException buildParsingExceptionInvalidAxisCount(const std::string &csType) { return ParsingException( concat("buildCS: invalid CS axis count for ", csType)); } // --------------------------------------------------------------------------- void WKTParser::Private::emitRecoverableMissingUNIT( const std::string &parentNodeName, const UnitOfMeasure &fallbackUnit) { std::string msg("buildCS: missing UNIT in "); msg += parentNodeName; if (!strict_ && fallbackUnit == UnitOfMeasure::METRE) { msg += ". Assuming metre"; } else if (!strict_ && fallbackUnit == UnitOfMeasure::DEGREE) { msg += ". Assuming degree"; } emitRecoverableWarning(msg); } // --------------------------------------------------------------------------- CoordinateSystemNNPtr WKTParser::Private::buildCS(const WKTNodeNNPtr &node, /* maybe null */ const WKTNodeNNPtr &parentNode, const UnitOfMeasure &defaultAngularUnit) { bool isGeocentric = false; std::string csType; const int numberOfAxis = parentNode->countChildrenOfName(WKTConstants::AXIS); int axisCount = numberOfAxis; const auto &parentNodeName = parentNode->GP()->value(); if (!isNull(node)) { const auto *nodeP = node->GP(); const auto &children = nodeP->children(); if (children.size() < 2) { ThrowNotEnoughChildren(nodeP->value()); } csType = children[0]->GP()->value(); try { axisCount = std::stoi(children[1]->GP()->value()); } catch (const std::exception &) { ThrowParsingException(concat("buildCS: invalid CS axis count: ", children[1]->GP()->value())); } } else { const char *csTypeCStr = CartesianCS::WKT2_TYPE; if (ci_equal(parentNodeName, WKTConstants::GEOCCS)) { // csTypeCStr = CartesianCS::WKT2_TYPE; isGeocentric = true; if (axisCount == 0) { auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::LINEAR); if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure::METRE; emitRecoverableMissingUNIT(parentNodeName, unit); } return CartesianCS::createGeocentric(unit); } } else if (ci_equal(parentNodeName, WKTConstants::GEOGCS)) { csTypeCStr = EllipsoidalCS::WKT2_TYPE; if (axisCount == 0) { // Missing axis with GEOGCS ? Presumably Long/Lat order // implied auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::ANGULAR); if (unit == UnitOfMeasure::NONE) { unit = defaultAngularUnit; emitRecoverableMissingUNIT(parentNodeName, unit); } // ESRI WKT for geographic 3D CRS auto &linUnitNode = parentNode->GP()->lookForChild(WKTConstants::LINUNIT); if (!isNull(linUnitNode)) { return EllipsoidalCS:: createLongitudeLatitudeEllipsoidalHeight( unit, buildUnit(linUnitNode, UnitOfMeasure::Type::LINEAR)); } // WKT1 --> long/lat return EllipsoidalCS::createLongitudeLatitude(unit); } } else if (ci_equal(parentNodeName, WKTConstants::BASEGEODCRS) || ci_equal(parentNodeName, WKTConstants::BASEGEOGCRS)) { csTypeCStr = EllipsoidalCS::WKT2_TYPE; if (axisCount == 0) { auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::ANGULAR); if (unit == UnitOfMeasure::NONE) { unit = defaultAngularUnit; } // WKT2 --> presumably lat/long return EllipsoidalCS::createLatitudeLongitude(unit); } } else if (ci_equal(parentNodeName, WKTConstants::PROJCS) || ci_equal(parentNodeName, WKTConstants::BASEPROJCRS) || ci_equal(parentNodeName, WKTConstants::BASEENGCRS)) { csTypeCStr = CartesianCS::WKT2_TYPE; if (axisCount == 0) { auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::LINEAR); if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure::METRE; if (ci_equal(parentNodeName, WKTConstants::PROJCS)) { emitRecoverableMissingUNIT(parentNodeName, unit); } } return CartesianCS::createEastingNorthing(unit); } } else if (ci_equal(parentNodeName, WKTConstants::VERT_CS) || ci_equal(parentNodeName, WKTConstants::VERTCS) || ci_equal(parentNodeName, WKTConstants::BASEVERTCRS)) { csTypeCStr = VerticalCS::WKT2_TYPE; bool downDirection = false; if (ci_equal(parentNodeName, WKTConstants::VERTCS)) // ESRI { for (const auto &childNode : parentNode->GP()->children()) { const auto &childNodeChildren = childNode->GP()->children(); if (childNodeChildren.size() == 2 && ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER) && childNodeChildren[0]->GP()->value() == "\"Direction\"") { const auto ¶mValue = childNodeChildren[1]->GP()->value(); try { double val = asDouble(childNodeChildren[1]); if (val == 1.0) { // ok } else if (val == -1.0) { downDirection = true; } } catch (const std::exception &) { throw ParsingException( concat("unhandled parameter value type : ", paramValue)); } } } } if (axisCount == 0) { auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::LINEAR); if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure::METRE; if (ci_equal(parentNodeName, WKTConstants::VERT_CS) || ci_equal(parentNodeName, WKTConstants::VERTCS)) { emitRecoverableMissingUNIT(parentNodeName, unit); } } if (downDirection) { return VerticalCS::create( util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, "depth"), "D", AxisDirection::DOWN, unit)); } return VerticalCS::createGravityRelatedHeight(unit); } } else if (ci_equal(parentNodeName, WKTConstants::LOCAL_CS)) { if (axisCount == 0) { auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::LINEAR); if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure::METRE; } return CartesianCS::createEastingNorthing(unit); } else if (axisCount == 1) { csTypeCStr = VerticalCS::WKT2_TYPE; } else if (axisCount == 2 || axisCount == 3) { csTypeCStr = CartesianCS::WKT2_TYPE; } else { throw ParsingException( "buildCS: unexpected AXIS count for LOCAL_CS"); } } else if (ci_equal(parentNodeName, WKTConstants::BASEPARAMCRS)) { csTypeCStr = ParametricCS::WKT2_TYPE; if (axisCount == 0) { auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::LINEAR); if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure("unknown", 1, UnitOfMeasure::Type::PARAMETRIC); } return ParametricCS::create( emptyPropertyMap, CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unknown parametric"), std::string(), AxisDirection::UNSPECIFIED, unit)); } } else if (ci_equal(parentNodeName, WKTConstants::BASETIMECRS)) { csTypeCStr = TemporalCS::WKT2_2015_TYPE; if (axisCount == 0) { auto unit = buildUnitInSubNode(parentNode, UnitOfMeasure::Type::TIME); if (unit == UnitOfMeasure::NONE) { unit = UnitOfMeasure("unknown", 1, UnitOfMeasure::Type::TIME); } return DateTimeTemporalCS::create( emptyPropertyMap, CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unknown temporal"), std::string(), AxisDirection::FUTURE, unit)); } } else { // Shouldn't happen normally throw ParsingException( concat("buildCS: unexpected parent node: ", parentNodeName)); } csType = csTypeCStr; } if (axisCount != 1 && axisCount != 2 && axisCount != 3) { throw buildParsingExceptionInvalidAxisCount(csType); } if (numberOfAxis != axisCount) { throw ParsingException("buildCS: declared number of axis by CS node " "and number of AXIS are inconsistent"); } const auto unitType = ci_equal(csType, EllipsoidalCS::WKT2_TYPE) ? UnitOfMeasure::Type::ANGULAR : ci_equal(csType, OrdinalCS::WKT2_TYPE) ? UnitOfMeasure::Type::NONE : ci_equal(csType, ParametricCS::WKT2_TYPE) ? UnitOfMeasure::Type::PARAMETRIC : ci_equal(csType, CartesianCS::WKT2_TYPE) || ci_equal(csType, VerticalCS::WKT2_TYPE) || ci_equal(csType, AffineCS::WKT2_TYPE) ? UnitOfMeasure::Type::LINEAR : (ci_equal(csType, TemporalCS::WKT2_2015_TYPE) || ci_equal(csType, DateTimeTemporalCS::WKT2_2019_TYPE) || ci_equal(csType, TemporalCountCS::WKT2_2019_TYPE) || ci_equal(csType, TemporalMeasureCS::WKT2_2019_TYPE)) ? UnitOfMeasure::Type::TIME : UnitOfMeasure::Type::UNKNOWN; UnitOfMeasure unit = buildUnitInSubNode(parentNode, unitType); if (unit == UnitOfMeasure::NONE) { if (ci_equal(parentNodeName, WKTConstants::VERT_CS) || ci_equal(parentNodeName, WKTConstants::VERTCS)) { unit = UnitOfMeasure::METRE; emitRecoverableMissingUNIT(parentNodeName, unit); } } std::vector axisList; for (int i = 0; i < axisCount; i++) { axisList.emplace_back( buildAxis(parentNode->GP()->lookForChild(WKTConstants::AXIS, i), unit, unitType, isGeocentric, i + 1)); } const PropertyMap &csMap = emptyPropertyMap; if (ci_equal(csType, EllipsoidalCS::WKT2_TYPE)) { if (axisCount == 2) { return EllipsoidalCS::create(csMap, axisList[0], axisList[1]); } else if (axisCount == 3) { return EllipsoidalCS::create(csMap, axisList[0], axisList[1], axisList[2]); } } else if (ci_equal(csType, CartesianCS::WKT2_TYPE)) { if (axisCount == 2) { return CartesianCS::create(csMap, axisList[0], axisList[1]); } else if (axisCount == 3) { return CartesianCS::create(csMap, axisList[0], axisList[1], axisList[2]); } } else if (ci_equal(csType, AffineCS::WKT2_TYPE)) { if (axisCount == 2) { return AffineCS::create(csMap, axisList[0], axisList[1]); } else if (axisCount == 3) { return AffineCS::create(csMap, axisList[0], axisList[1], axisList[2]); } } else if (ci_equal(csType, VerticalCS::WKT2_TYPE)) { if (axisCount == 1) { return VerticalCS::create(csMap, axisList[0]); } } else if (ci_equal(csType, SphericalCS::WKT2_TYPE)) { if (axisCount == 2) { // Extension to ISO19111 to support (planet)-ocentric CS with // geocentric latitude return SphericalCS::create(csMap, axisList[0], axisList[1]); } else if (axisCount == 3) { return SphericalCS::create(csMap, axisList[0], axisList[1], axisList[2]); } } else if (ci_equal(csType, OrdinalCS::WKT2_TYPE)) { // WKT2-2019 return OrdinalCS::create(csMap, axisList); } else if (ci_equal(csType, ParametricCS::WKT2_TYPE)) { if (axisCount == 1) { return ParametricCS::create(csMap, axisList[0]); } } else if (ci_equal(csType, TemporalCS::WKT2_2015_TYPE)) { if (axisCount == 1) { if (isNull( parentNode->GP()->lookForChild(WKTConstants::TIMEUNIT)) && isNull(parentNode->GP()->lookForChild(WKTConstants::UNIT))) { return DateTimeTemporalCS::create(csMap, axisList[0]); } else { // Default to TemporalMeasureCS // TemporalCount could also be possible return TemporalMeasureCS::create(csMap, axisList[0]); } } } else if (ci_equal(csType, DateTimeTemporalCS::WKT2_2019_TYPE)) { if (axisCount == 1) { return DateTimeTemporalCS::create(csMap, axisList[0]); } } else if (ci_equal(csType, TemporalCountCS::WKT2_2019_TYPE)) { if (axisCount == 1) { return TemporalCountCS::create(csMap, axisList[0]); } } else if (ci_equal(csType, TemporalMeasureCS::WKT2_2019_TYPE)) { if (axisCount == 1) { return TemporalMeasureCS::create(csMap, axisList[0]); } } else { throw ParsingException(concat("unhandled CS type: ", csType)); } throw buildParsingExceptionInvalidAxisCount(csType); } // --------------------------------------------------------------------------- std::string WKTParser::Private::getExtensionProj4(const WKTNode::Private *nodeP) { auto &extensionNode = nodeP->lookForChild(WKTConstants::EXTENSION); const auto &extensionChildren = extensionNode->GP()->children(); if (extensionChildren.size() == 2) { if (ci_equal(stripQuotes(extensionChildren[0]), "PROJ4")) { return stripQuotes(extensionChildren[1]); } } return std::string(); } // --------------------------------------------------------------------------- void WKTParser::Private::addExtensionProj4ToProp(const WKTNode::Private *nodeP, PropertyMap &props) { const auto extensionProj4(getExtensionProj4(nodeP)); if (!extensionProj4.empty()) { props.set("EXTENSION_PROJ4", extensionProj4); } } // --------------------------------------------------------------------------- GeodeticCRSNNPtr WKTParser::Private::buildGeodeticCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &datumNode = nodeP->lookForChild( WKTConstants::DATUM, WKTConstants::GEODETICDATUM, WKTConstants::TRF); auto &ensembleNode = nodeP->lookForChild(WKTConstants::ENSEMBLE); if (isNull(datumNode) && isNull(ensembleNode)) { throw ParsingException("Missing DATUM or ENSEMBLE node"); } // Do that now so that esriStyle_ can be set before buildPrimeMeridian() auto props = buildProperties(node); auto &dynamicNode = nodeP->lookForChild(WKTConstants::DYNAMIC); auto &csNode = nodeP->lookForChild(WKTConstants::CS_); const auto &nodeName = nodeP->value(); if (isNull(csNode) && !ci_equal(nodeName, WKTConstants::GEOGCS) && !ci_equal(nodeName, WKTConstants::GEOCCS) && !ci_equal(nodeName, WKTConstants::BASEGEODCRS) && !ci_equal(nodeName, WKTConstants::BASEGEOGCRS)) { ThrowMissing(WKTConstants::CS_); } auto &primeMeridianNode = nodeP->lookForChild(WKTConstants::PRIMEM, WKTConstants::PRIMEMERIDIAN); if (isNull(primeMeridianNode)) { // PRIMEM is required in WKT1 if (ci_equal(nodeName, WKTConstants::GEOGCS) || ci_equal(nodeName, WKTConstants::GEOCCS)) { emitRecoverableWarning(nodeName + " should have a PRIMEM node"); } } auto angularUnit = buildUnitInSubNode(node, ci_equal(nodeName, WKTConstants::GEOGCS) ? UnitOfMeasure::Type::ANGULAR : UnitOfMeasure::Type::UNKNOWN); if (angularUnit.type() != UnitOfMeasure::Type::ANGULAR) { angularUnit = UnitOfMeasure::NONE; } auto primeMeridian = !isNull(primeMeridianNode) ? buildPrimeMeridian(primeMeridianNode, angularUnit) : PrimeMeridian::GREENWICH; if (angularUnit == UnitOfMeasure::NONE) { angularUnit = primeMeridian->longitude().unit(); } addExtensionProj4ToProp(nodeP, props); // No explicit AXIS node ? (WKT1) if (isNull(nodeP->lookForChild(WKTConstants::AXIS))) { props.set("IMPLICIT_CS", true); } const std::string crsName = stripQuotes(nodeP->children()[0]); if (esriStyle_ && dbContext_) { std::string outTableName; std::string authNameFromAlias; std::string codeFromAlias; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); auto officialName = authFactory->getOfficialNameFromAlias( crsName, "geodetic_crs", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { props.set(IdentifiedObject::NAME_KEY, officialName); } } auto datum = !isNull(datumNode) ? buildGeodeticReferenceFrame(datumNode, primeMeridian, dynamicNode) .as_nullable() : nullptr; auto datumEnsemble = !isNull(ensembleNode) ? buildDatumEnsemble(ensembleNode, primeMeridian, true) .as_nullable() : nullptr; auto cs = buildCS(csNode, node, angularUnit); // If there's no CS[] node, typically for a BASEGEODCRS of a projected CRS, // in a few rare cases, this might be a Geocentric CRS, and thus a // Cartesian CS, and not the ellipsoidalCS we assumed above. The only way // to figure that is to resolve the CRS from its code... if (isNull(csNode) && dbContext_ && ci_equal(nodeName, WKTConstants::BASEGEODCRS)) { const auto &nodeChildren = nodeP->children(); for (const auto &subNode : nodeChildren) { const auto &subNodeName(subNode->GP()->value()); if (ci_equal(subNodeName, WKTConstants::ID) || ci_equal(subNodeName, WKTConstants::AUTHORITY)) { auto id = buildId(node, subNode, true, false); if (id) { try { auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext_), *id->codeSpace()); auto dbCRS = authFactory->createGeodeticCRS(id->code()); cs = dbCRS->coordinateSystem(); } catch (const util::Exception &) { } } } } } auto ellipsoidalCS = nn_dynamic_pointer_cast(cs); if (ellipsoidalCS) { if (ci_equal(nodeName, WKTConstants::GEOCCS)) { throw ParsingException("ellipsoidal CS not expected in GEOCCS"); } try { auto crs = GeographicCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(ellipsoidalCS)); // In case of missing CS node, or to check it, query the coordinate // system from the DB if possible (typically for the baseCRS of a // ProjectedCRS) if (!crs->identifiers().empty() && dbContext_) { GeographicCRSPtr dbCRS; try { const auto &id = crs->identifiers()[0]; auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext_), *id->codeSpace()); dbCRS = authFactory->createGeographicCRS(id->code()) .as_nullable(); } catch (const util::Exception &) { } if (dbCRS && (!isNull(csNode) || node->countChildrenOfName(WKTConstants::AXIS) != 0) && !ellipsoidalCS->_isEquivalentTo( dbCRS->coordinateSystem().get(), util::IComparable::Criterion::EQUIVALENT)) { if (unsetIdentifiersIfIncompatibleDef_) { emitRecoverableWarning( "Coordinate system of GeographicCRS in the WKT " "definition is different from the one of the " "authority. Unsetting the identifier to avoid " "confusion"); props.unset(Identifier::CODESPACE_KEY); props.unset(Identifier::AUTHORITY_KEY); props.unset(IdentifiedObject::IDENTIFIERS_KEY); } crs = GeographicCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(ellipsoidalCS)); } else if (dbCRS) { auto csFromDB = dbCRS->coordinateSystem(); auto csFromDBAltered = csFromDB; if (!isNull(nodeP->lookForChild(WKTConstants::UNIT))) { csFromDBAltered = csFromDB->alterAngularUnit(angularUnit); if (unsetIdentifiersIfIncompatibleDef_ && !csFromDBAltered->_isEquivalentTo( csFromDB.get(), util::IComparable::Criterion::EQUIVALENT)) { emitRecoverableWarning( "Coordinate system of GeographicCRS in the WKT " "definition is different from the one of the " "authority. Unsetting the identifier to avoid " "confusion"); props.unset(Identifier::CODESPACE_KEY); props.unset(Identifier::AUTHORITY_KEY); props.unset(IdentifiedObject::IDENTIFIERS_KEY); } } crs = GeographicCRS::create(props, datum, datumEnsemble, csFromDBAltered); } } return crs; } catch (const util::Exception &e) { throw ParsingException(std::string("buildGeodeticCRS: ") + e.what()); } } else if (ci_equal(nodeName, WKTConstants::GEOGCRS) || ci_equal(nodeName, WKTConstants::GEOGRAPHICCRS) || ci_equal(nodeName, WKTConstants::BASEGEOGCRS)) { // This is a WKT2-2019 GeographicCRS. An ellipsoidal CS is expected throw ParsingException(concat("ellipsoidal CS expected, but found ", cs->getWKT2Type(true))); } auto cartesianCS = nn_dynamic_pointer_cast(cs); if (cartesianCS) { if (cartesianCS->axisList().size() != 3) { throw ParsingException( "Cartesian CS for a GeodeticCRS should have 3 axis"); } try { return GeodeticCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(cartesianCS)); } catch (const util::Exception &e) { throw ParsingException(std::string("buildGeodeticCRS: ") + e.what()); } } auto sphericalCS = nn_dynamic_pointer_cast(cs); if (sphericalCS) { try { return GeodeticCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(sphericalCS)); } catch (const util::Exception &e) { throw ParsingException(std::string("buildGeodeticCRS: ") + e.what()); } } throw ParsingException( concat("unhandled CS type: ", cs->getWKT2Type(true))); } // --------------------------------------------------------------------------- CRSNNPtr WKTParser::Private::buildDerivedGeodeticCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &baseGeodCRSNode = nodeP->lookForChild(WKTConstants::BASEGEODCRS, WKTConstants::BASEGEOGCRS); // given the constraints enforced on calling code path assert(!isNull(baseGeodCRSNode)); auto baseGeodCRS = buildGeodeticCRS(baseGeodCRSNode); auto &derivingConversionNode = nodeP->lookForChild(WKTConstants::DERIVINGCONVERSION); if (isNull(derivingConversionNode)) { ThrowMissing(WKTConstants::DERIVINGCONVERSION); } auto derivingConversion = buildConversion( derivingConversionNode, UnitOfMeasure::NONE, UnitOfMeasure::NONE); auto &csNode = nodeP->lookForChild(WKTConstants::CS_); if (isNull(csNode)) { ThrowMissing(WKTConstants::CS_); } auto cs = buildCS(csNode, node, UnitOfMeasure::NONE); auto ellipsoidalCS = nn_dynamic_pointer_cast(cs); if (ellipsoidalCS) { if (ellipsoidalCS->axisList().size() == 3 && baseGeodCRS->coordinateSystem()->axisList().size() == 2) { baseGeodCRS = NN_NO_CHECK(util::nn_dynamic_pointer_cast( baseGeodCRS->promoteTo3D(std::string(), dbContext_))); } return DerivedGeographicCRS::create(buildProperties(node), baseGeodCRS, derivingConversion, NN_NO_CHECK(ellipsoidalCS)); } else if (ci_equal(nodeP->value(), WKTConstants::GEOGCRS)) { // This is a WKT2-2019 GeographicCRS. An ellipsoidal CS is expected throw ParsingException(concat("ellipsoidal CS expected, but found ", cs->getWKT2Type(true))); } auto cartesianCS = nn_dynamic_pointer_cast(cs); if (cartesianCS) { if (cartesianCS->axisList().size() != 3) { throw ParsingException( "Cartesian CS for a GeodeticCRS should have 3 axis"); } return DerivedGeodeticCRS::create(buildProperties(node), baseGeodCRS, derivingConversion, NN_NO_CHECK(cartesianCS)); } auto sphericalCS = nn_dynamic_pointer_cast(cs); if (sphericalCS) { return DerivedGeodeticCRS::create(buildProperties(node), baseGeodCRS, derivingConversion, NN_NO_CHECK(sphericalCS)); } throw ParsingException( concat("unhandled CS type: ", cs->getWKT2Type(true))); } // --------------------------------------------------------------------------- UnitOfMeasure WKTParser::Private::guessUnitForParameter( const std::string ¶mName, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit) { UnitOfMeasure unit; // scale must be first because of 'Scale factor on pseudo standard parallel' if (ci_find(paramName, "scale") != std::string::npos || ci_find(paramName, "scaling factor") != std::string::npos) { unit = UnitOfMeasure::SCALE_UNITY; } else if (ci_find(paramName, "latitude") != std::string::npos || ci_find(paramName, "longitude") != std::string::npos || ci_find(paramName, "meridian") != std::string::npos || ci_find(paramName, "parallel") != std::string::npos || ci_find(paramName, "azimuth") != std::string::npos || ci_find(paramName, "angle") != std::string::npos || ci_find(paramName, "heading") != std::string::npos || ci_find(paramName, "rotation") != std::string::npos) { unit = defaultAngularUnit; } else if (ci_find(paramName, "easting") != std::string::npos || ci_find(paramName, "northing") != std::string::npos || ci_find(paramName, "height") != std::string::npos) { unit = defaultLinearUnit; } return unit; } // --------------------------------------------------------------------------- static bool isEPSGCodeForInterpolationParameter(const OperationParameterNNPtr ¶meter) { const auto &name = parameter->nameStr(); const auto epsgCode = parameter->getEPSGCode(); return name == EPSG_NAME_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS || epsgCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS || name == EPSG_NAME_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS || epsgCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS; } // --------------------------------------------------------------------------- static bool isIntegerParameter(const OperationParameterNNPtr ¶meter) { return isEPSGCodeForInterpolationParameter(parameter); } // --------------------------------------------------------------------------- void WKTParser::Private::consumeParameters( const WKTNodeNNPtr &node, bool isAbridged, std::vector ¶meters, std::vector &values, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit) { for (const auto &childNode : node->GP()->children()) { const auto &childNodeChildren = childNode->GP()->children(); if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER)) { if (childNodeChildren.size() < 2) { ThrowNotEnoughChildren(childNode->GP()->value()); } parameters.push_back( OperationParameter::create(buildProperties(childNode))); const auto ¶mValue = childNodeChildren[1]->GP()->value(); if (!paramValue.empty() && paramValue[0] == '"') { values.push_back( ParameterValue::create(stripQuotes(childNodeChildren[1]))); } else { try { double val = asDouble(childNodeChildren[1]); auto unit = buildUnitInSubNode(childNode); if (unit == UnitOfMeasure::NONE) { const auto ¶mName = childNodeChildren[0]->GP()->value(); unit = guessUnitForParameter( paramName, defaultLinearUnit, defaultAngularUnit); } if (isAbridged) { const auto ¶mName = parameters.back()->nameStr(); int paramEPSGCode = 0; const auto ¶mIds = parameters.back()->identifiers(); if (paramIds.size() == 1 && ci_equal(*(paramIds[0]->codeSpace()), Identifier::EPSG)) { paramEPSGCode = ::atoi(paramIds[0]->code().c_str()); } const common::UnitOfMeasure *pUnit = nullptr; if (OperationParameterValue::convertFromAbridged( paramName, val, pUnit, paramEPSGCode)) { unit = *pUnit; parameters.back() = OperationParameter::create( buildProperties(childNode) .set(Identifier::CODESPACE_KEY, Identifier::EPSG) .set(Identifier::CODE_KEY, paramEPSGCode)); } } if (isIntegerParameter(parameters.back())) { values.push_back(ParameterValue::create( std::stoi(childNodeChildren[1]->GP()->value()))); } else { values.push_back( ParameterValue::create(Measure(val, unit))); } } catch (const std::exception &) { throw ParsingException(concat( "unhandled parameter value type : ", paramValue)); } } } else if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETERFILE)) { if (childNodeChildren.size() < 2) { ThrowNotEnoughChildren(childNode->GP()->value()); } parameters.push_back( OperationParameter::create(buildProperties(childNode))); values.push_back(ParameterValue::createFilename( stripQuotes(childNodeChildren[1]))); } } } // --------------------------------------------------------------------------- static CRSPtr dealWithEPSGCodeForInterpolationCRSParameter( DatabaseContextPtr &dbContext, std::vector ¶meters, std::vector &values); ConversionNNPtr WKTParser::Private::buildConversion(const WKTNodeNNPtr &node, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit) { auto &methodNode = node->GP()->lookForChild(WKTConstants::METHOD, WKTConstants::PROJECTION); if (isNull(methodNode)) { ThrowMissing(WKTConstants::METHOD); } if (methodNode->GP()->childrenSize() == 0) { ThrowNotEnoughChildren(WKTConstants::METHOD); } std::vector parameters; std::vector values; consumeParameters(node, false, parameters, values, defaultLinearUnit, defaultAngularUnit); auto interpolationCRS = dealWithEPSGCodeForInterpolationCRSParameter( dbContext_, parameters, values); auto &convProps = buildProperties(node); auto &methodProps = buildProperties(methodNode); std::string convName; std::string methodName; if (convProps.getStringValue(IdentifiedObject::NAME_KEY, convName) && methodProps.getStringValue(IdentifiedObject::NAME_KEY, methodName) && starts_with(convName, "Inverse of ") && starts_with(methodName, "Inverse of ")) { auto &invConvProps = buildProperties(node, true); auto &invMethodProps = buildProperties(methodNode, true); auto conv = NN_NO_CHECK(util::nn_dynamic_pointer_cast( Conversion::create(invConvProps, invMethodProps, parameters, values) ->inverse())); if (interpolationCRS) conv->setInterpolationCRS(interpolationCRS); return conv; } auto conv = Conversion::create(convProps, methodProps, parameters, values); if (interpolationCRS) conv->setInterpolationCRS(interpolationCRS); return conv; } // --------------------------------------------------------------------------- static CRSPtr dealWithEPSGCodeForInterpolationCRSParameter( DatabaseContextPtr &dbContext, std::vector ¶meters, std::vector &values) { // Transform EPSG hacky PARAMETER["EPSG code for Interpolation CRS", // crs_epsg_code] into proper interpolation CRS if (dbContext != nullptr) { for (size_t i = 0; i < parameters.size(); ++i) { if (isEPSGCodeForInterpolationParameter(parameters[i])) { const int code = values[i]->integerValue(); try { auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext), Identifier::EPSG); auto interpolationCRS = authFactory ->createGeographicCRS(internal::toString(code)) .as_nullable(); parameters.erase(parameters.begin() + i); values.erase(values.begin() + i); return interpolationCRS; } catch (const util::Exception &) { } } } } return nullptr; } // --------------------------------------------------------------------------- TransformationNNPtr WKTParser::Private::buildCoordinateOperation(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &methodNode = nodeP->lookForChild(WKTConstants::METHOD); if (isNull(methodNode)) { ThrowMissing(WKTConstants::METHOD); } if (methodNode->GP()->childrenSize() == 0) { ThrowNotEnoughChildren(WKTConstants::METHOD); } auto &sourceCRSNode = nodeP->lookForChild(WKTConstants::SOURCECRS); if (/*isNull(sourceCRSNode) ||*/ sourceCRSNode->GP()->childrenSize() != 1) { ThrowMissing(WKTConstants::SOURCECRS); } auto sourceCRS = buildCRS(sourceCRSNode->GP()->children()[0]); if (!sourceCRS) { throw ParsingException("Invalid content in SOURCECRS node"); } auto &targetCRSNode = nodeP->lookForChild(WKTConstants::TARGETCRS); if (/*isNull(targetCRSNode) ||*/ targetCRSNode->GP()->childrenSize() != 1) { ThrowMissing(WKTConstants::TARGETCRS); } auto targetCRS = buildCRS(targetCRSNode->GP()->children()[0]); if (!targetCRS) { throw ParsingException("Invalid content in TARGETCRS node"); } auto &interpolationCRSNode = nodeP->lookForChild(WKTConstants::INTERPOLATIONCRS); CRSPtr interpolationCRS; if (/*!isNull(interpolationCRSNode) && */ interpolationCRSNode->GP() ->childrenSize() == 1) { interpolationCRS = buildCRS(interpolationCRSNode->GP()->children()[0]); } std::vector parameters; std::vector values; const auto &defaultLinearUnit = UnitOfMeasure::NONE; const auto &defaultAngularUnit = UnitOfMeasure::NONE; consumeParameters(node, false, parameters, values, defaultLinearUnit, defaultAngularUnit); if (interpolationCRS == nullptr) interpolationCRS = dealWithEPSGCodeForInterpolationCRSParameter( dbContext_, parameters, values); std::vector accuracies; auto &accuracyNode = nodeP->lookForChild(WKTConstants::OPERATIONACCURACY); if (/*!isNull(accuracyNode) && */ accuracyNode->GP()->childrenSize() == 1) { accuracies.push_back(PositionalAccuracy::create( stripQuotes(accuracyNode->GP()->children()[0]))); } return Transformation::create(buildProperties(node), NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), interpolationCRS, buildProperties(methodNode), parameters, values, accuracies); } // --------------------------------------------------------------------------- PointMotionOperationNNPtr WKTParser::Private::buildPointMotionOperation(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &methodNode = nodeP->lookForChild(WKTConstants::METHOD); if (isNull(methodNode)) { ThrowMissing(WKTConstants::METHOD); } if (methodNode->GP()->childrenSize() == 0) { ThrowNotEnoughChildren(WKTConstants::METHOD); } auto &sourceCRSNode = nodeP->lookForChild(WKTConstants::SOURCECRS); if (sourceCRSNode->GP()->childrenSize() != 1) { ThrowMissing(WKTConstants::SOURCECRS); } auto sourceCRS = buildCRS(sourceCRSNode->GP()->children()[0]); if (!sourceCRS) { throw ParsingException("Invalid content in SOURCECRS node"); } std::vector parameters; std::vector values; const auto &defaultLinearUnit = UnitOfMeasure::NONE; const auto &defaultAngularUnit = UnitOfMeasure::NONE; consumeParameters(node, false, parameters, values, defaultLinearUnit, defaultAngularUnit); std::vector accuracies; auto &accuracyNode = nodeP->lookForChild(WKTConstants::OPERATIONACCURACY); if (/*!isNull(accuracyNode) && */ accuracyNode->GP()->childrenSize() == 1) { accuracies.push_back(PositionalAccuracy::create( stripQuotes(accuracyNode->GP()->children()[0]))); } return PointMotionOperation::create( buildProperties(node), NN_NO_CHECK(sourceCRS), buildProperties(methodNode), parameters, values, accuracies); } // --------------------------------------------------------------------------- ConcatenatedOperationNNPtr WKTParser::Private::buildConcatenatedOperation(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &sourceCRSNode = nodeP->lookForChild(WKTConstants::SOURCECRS); if (/*isNull(sourceCRSNode) ||*/ sourceCRSNode->GP()->childrenSize() != 1) { ThrowMissing(WKTConstants::SOURCECRS); } auto sourceCRS = buildCRS(sourceCRSNode->GP()->children()[0]); if (!sourceCRS) { throw ParsingException("Invalid content in SOURCECRS node"); } auto &targetCRSNode = nodeP->lookForChild(WKTConstants::TARGETCRS); if (/*isNull(targetCRSNode) ||*/ targetCRSNode->GP()->childrenSize() != 1) { ThrowMissing(WKTConstants::TARGETCRS); } auto targetCRS = buildCRS(targetCRSNode->GP()->children()[0]); if (!targetCRS) { throw ParsingException("Invalid content in TARGETCRS node"); } std::vector operations; for (const auto &childNode : nodeP->children()) { if (ci_equal(childNode->GP()->value(), WKTConstants::STEP)) { if (childNode->GP()->childrenSize() != 1) { throw ParsingException("Invalid content in STEP node"); } auto op = nn_dynamic_pointer_cast( build(childNode->GP()->children()[0])); if (!op) { throw ParsingException("Invalid content in STEP node"); } operations.emplace_back(NN_NO_CHECK(op)); } } ConcatenatedOperation::fixSteps( NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), operations, dbContext_, /* fixDirectionAllowed = */ true); std::vector accuracies; auto &accuracyNode = nodeP->lookForChild(WKTConstants::OPERATIONACCURACY); if (/*!isNull(accuracyNode) && */ accuracyNode->GP()->childrenSize() == 1) { accuracies.push_back(PositionalAccuracy::create( stripQuotes(accuracyNode->GP()->children()[0]))); } try { return ConcatenatedOperation::create(buildProperties(node), operations, accuracies); } catch (const InvalidOperation &e) { throw ParsingException( std::string("Cannot build concatenated operation: ") + e.what()); } } // --------------------------------------------------------------------------- bool WKTParser::Private::hasWebMercPROJ4String( const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode) { if (projectionNode->GP()->childrenSize() == 0) { ThrowNotEnoughChildren(WKTConstants::PROJECTION); } const std::string wkt1ProjectionName = stripQuotes(projectionNode->GP()->children()[0]); auto &extensionNode = projCRSNode->lookForChild(WKTConstants::EXTENSION); if (metadata::Identifier::isEquivalentName(wkt1ProjectionName.c_str(), "Mercator_1SP") && projCRSNode->countChildrenOfName("center_latitude") == 0) { // Hack to detect the hacky way of encodign webmerc in GDAL WKT1 // with a EXTENSION["PROJ4", "+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"] node if (extensionNode && extensionNode->GP()->childrenSize() == 2 && ci_equal(stripQuotes(extensionNode->GP()->children()[0]), "PROJ4")) { std::string projString = stripQuotes(extensionNode->GP()->children()[1]); if (projString.find("+proj=merc") != std::string::npos && projString.find("+a=6378137") != std::string::npos && projString.find("+b=6378137") != std::string::npos && projString.find("+lon_0=0") != std::string::npos && projString.find("+x_0=0") != std::string::npos && projString.find("+y_0=0") != std::string::npos && projString.find("+nadgrids=@null") != std::string::npos && (projString.find("+lat_ts=") == std::string::npos || projString.find("+lat_ts=0") != std::string::npos) && (projString.find("+k=") == std::string::npos || projString.find("+k=1") != std::string::npos) && (projString.find("+units=") == std::string::npos || projString.find("+units=m") != std::string::npos)) { return true; } } } return false; } // --------------------------------------------------------------------------- static const MethodMapping * selectSphericalOrEllipsoidal(const MethodMapping *mapping, const GeodeticCRSNNPtr &baseGeodCRS) { if (mapping->epsg_code == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL || mapping->epsg_code == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA) { mapping = getMapping( baseGeodCRS->ellipsoid()->isSphere() ? EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL : EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA); } else if (mapping->epsg_code == EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL || mapping->epsg_code == EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA) { mapping = getMapping( baseGeodCRS->ellipsoid()->isSphere() ? EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL : EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA); } else if (mapping->epsg_code == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL || mapping->epsg_code == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL) { mapping = getMapping(baseGeodCRS->ellipsoid()->isSphere() ? EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL : EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL); } return mapping; } // --------------------------------------------------------------------------- const ESRIMethodMapping *WKTParser::Private::getESRIMapping( const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, std::map &mapParamNameToValue) { const std::string esriProjectionName = stripQuotes(projectionNode->GP()->children()[0]); // Lambert_Conformal_Conic or Krovak may map to different WKT2 methods // depending // on the parameters / their values const auto esriMappings = getMappingsFromESRI(esriProjectionName); if (esriMappings.empty()) { return nullptr; } // Build a map of present parameters for (const auto &childNode : projCRSNode->GP()->children()) { if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER)) { const auto &childNodeChildren = childNode->GP()->children(); if (childNodeChildren.size() < 2) { ThrowNotEnoughChildren(WKTConstants::PARAMETER); } const std::string parameterName(stripQuotes(childNodeChildren[0])); const auto ¶mValue = childNodeChildren[1]->GP()->value(); mapParamNameToValue[parameterName] = paramValue; } } // Compare parameters present with the ones expected in the mapping const ESRIMethodMapping *esriMapping = nullptr; int bestMatchCount = -1; for (const auto &mapping : esriMappings) { int matchCount = 0; int unmatchCount = 0; for (const auto *param = mapping->params; param->esri_name; ++param) { auto iter = mapParamNameToValue.find(param->esri_name); if (iter != mapParamNameToValue.end()) { if (param->wkt2_name == nullptr) { bool ok = true; try { if (io::asDouble(param->fixed_value) == io::asDouble(iter->second)) { matchCount++; } else { ok = false; } } catch (const std::exception &) { ok = false; } if (!ok) { matchCount = -1; break; } } else { matchCount++; } } else if (param->is_fixed_value) { mapParamNameToValue[param->esri_name] = param->fixed_value; } else { unmatchCount++; } } if (matchCount > bestMatchCount && !(maybeEsriStyle_ && unmatchCount >= matchCount)) { esriMapping = mapping; bestMatchCount = matchCount; } } return esriMapping; } // --------------------------------------------------------------------------- ConversionNNPtr WKTParser::Private::buildProjectionFromESRI( const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit, const ESRIMethodMapping *esriMapping, std::map &mapParamNameToValue) { std::map mapWKT2NameToESRIName; for (const auto *param = esriMapping->params; param->esri_name; ++param) { if (param->wkt2_name) { mapWKT2NameToESRIName[param->wkt2_name] = param->esri_name; } } const std::string esriProjectionName = stripQuotes(projectionNode->GP()->children()[0]); const char *projectionMethodWkt2Name = esriMapping->wkt2_name; if (ci_equal(esriProjectionName, "Krovak")) { const std::string projCRSName = stripQuotes(projCRSNode->GP()->children()[0]); if (projCRSName.find("_East_North") != std::string::npos) { projectionMethodWkt2Name = EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED; } } const auto *wkt2_mapping = getMapping(projectionMethodWkt2Name); if (ci_equal(esriProjectionName, "Stereographic")) { try { const auto iterLatitudeOfOrigin = mapParamNameToValue.find("Latitude_Of_Origin"); if (iterLatitudeOfOrigin != mapParamNameToValue.end() && std::fabs(io::asDouble(iterLatitudeOfOrigin->second)) == 90.0) { wkt2_mapping = getMapping(EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A); } } catch (const std::exception &) { } } assert(wkt2_mapping); wkt2_mapping = selectSphericalOrEllipsoidal(wkt2_mapping, baseGeodCRS); PropertyMap propertiesMethod; propertiesMethod.set(IdentifiedObject::NAME_KEY, wkt2_mapping->wkt2_name); if (wkt2_mapping->epsg_code != 0) { propertiesMethod.set(Identifier::CODE_KEY, wkt2_mapping->epsg_code); propertiesMethod.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } std::vector parameters; std::vector values; if (wkt2_mapping->epsg_code == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL && ci_equal(esriProjectionName, "Plate_Carree")) { // Add a fixed Latitude of 1st parallel = 0 so as to have all // parameters expected by Equidistant Cylindrical. mapWKT2NameToESRIName[EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL] = "Standard_Parallel_1"; mapParamNameToValue["Standard_Parallel_1"] = "0"; } else if ((wkt2_mapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A || wkt2_mapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B) && !ci_equal(esriProjectionName, "Rectified_Skew_Orthomorphic_Natural_Origin") && !ci_equal(esriProjectionName, "Rectified_Skew_Orthomorphic_Center")) { // ESRI WKT lacks the angle to skew grid // Take it from the azimuth value mapWKT2NameToESRIName [EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID] = "Azimuth"; } for (int i = 0; wkt2_mapping->params[i] != nullptr; i++) { const auto *paramMapping = wkt2_mapping->params[i]; auto iter = mapWKT2NameToESRIName.find(paramMapping->wkt2_name); if (iter == mapWKT2NameToESRIName.end()) { continue; } const auto &esriParamName = iter->second; auto iter2 = mapParamNameToValue.find(esriParamName); auto mapParamNameToValueEnd = mapParamNameToValue.end(); if (iter2 == mapParamNameToValueEnd) { // In case we don't find a direct match, try the aliases for (iter2 = mapParamNameToValue.begin(); iter2 != mapParamNameToValueEnd; ++iter2) { if (areEquivalentParameters(iter2->first, esriParamName)) { break; } } if (iter2 == mapParamNameToValueEnd) { continue; } } PropertyMap propertiesParameter; propertiesParameter.set(IdentifiedObject::NAME_KEY, paramMapping->wkt2_name); if (paramMapping->epsg_code != 0) { propertiesParameter.set(Identifier::CODE_KEY, paramMapping->epsg_code); propertiesParameter.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } parameters.push_back(OperationParameter::create(propertiesParameter)); try { double val = io::asDouble(iter2->second); auto unit = guessUnitForParameter( paramMapping->wkt2_name, defaultLinearUnit, defaultAngularUnit); values.push_back(ParameterValue::create(Measure(val, unit))); } catch (const std::exception &) { throw ParsingException( concat("unhandled parameter value type : ", iter2->second)); } } return Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, esriProjectionName == "Gauss_Kruger" ? "unnnamed (Gauss Kruger)" : "unnamed"), propertiesMethod, parameters, values) ->identify(); } // --------------------------------------------------------------------------- ConversionNNPtr WKTParser::Private::buildProjectionFromESRI( const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit) { std::map mapParamNameToValue; const auto esriMapping = getESRIMapping(projCRSNode, projectionNode, mapParamNameToValue); if (esriMapping == nullptr) { return buildProjectionStandard(baseGeodCRS, projCRSNode, projectionNode, defaultLinearUnit, defaultAngularUnit); } return buildProjectionFromESRI(baseGeodCRS, projCRSNode, projectionNode, defaultLinearUnit, defaultAngularUnit, esriMapping, mapParamNameToValue); } // --------------------------------------------------------------------------- ConversionNNPtr WKTParser::Private::buildProjection( const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit) { if (projectionNode->GP()->childrenSize() == 0) { ThrowNotEnoughChildren(WKTConstants::PROJECTION); } if (esriStyle_ || maybeEsriStyle_) { return buildProjectionFromESRI(baseGeodCRS, projCRSNode, projectionNode, defaultLinearUnit, defaultAngularUnit); } return buildProjectionStandard(baseGeodCRS, projCRSNode, projectionNode, defaultLinearUnit, defaultAngularUnit); } // --------------------------------------------------------------------------- std::string WKTParser::Private::projectionGetParameter(const WKTNodeNNPtr &projCRSNode, const char *paramName) { for (const auto &childNode : projCRSNode->GP()->children()) { if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER)) { const auto &childNodeChildren = childNode->GP()->children(); if (childNodeChildren.size() == 2 && metadata::Identifier::isEquivalentName( stripQuotes(childNodeChildren[0]).c_str(), paramName)) { return childNodeChildren[1]->GP()->value(); } } } return std::string(); } // --------------------------------------------------------------------------- ConversionNNPtr WKTParser::Private::buildProjectionStandard( const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit, const UnitOfMeasure &defaultAngularUnit) { std::string wkt1ProjectionName = stripQuotes(projectionNode->GP()->children()[0]); std::vector parameters; std::vector values; bool tryToIdentifyWKT1Method = true; auto &extensionNode = projCRSNode->lookForChild(WKTConstants::EXTENSION); const auto &extensionChildren = extensionNode->GP()->children(); bool gdal_3026_hack = false; if (metadata::Identifier::isEquivalentName(wkt1ProjectionName.c_str(), "Mercator_1SP") && projectionGetParameter(projCRSNode, "center_latitude").empty()) { // Hack for https://trac.osgeo.org/gdal/ticket/3026 std::string lat0( projectionGetParameter(projCRSNode, "latitude_of_origin")); if (!lat0.empty() && lat0 != "0" && lat0 != "0.0") { wkt1ProjectionName = "Mercator_2SP"; gdal_3026_hack = true; } else { // The latitude of origin, which should always be zero, is // missing // in GDAL WKT1, but provisionned in the EPSG Mercator_1SP // definition, // so add it manually. PropertyMap propertiesParameter; propertiesParameter.set(IdentifiedObject::NAME_KEY, "Latitude of natural origin"); propertiesParameter.set(Identifier::CODE_KEY, 8801); propertiesParameter.set(Identifier::CODESPACE_KEY, Identifier::EPSG); parameters.push_back( OperationParameter::create(propertiesParameter)); values.push_back( ParameterValue::create(Measure(0, UnitOfMeasure::DEGREE))); } } else if (metadata::Identifier::isEquivalentName( wkt1ProjectionName.c_str(), "Polar_Stereographic")) { std::map mapParameters; for (const auto &childNode : projCRSNode->GP()->children()) { const auto &childNodeChildren = childNode->GP()->children(); if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER) && childNodeChildren.size() == 2) { const std::string wkt1ParameterName( stripQuotes(childNodeChildren[0])); try { double val = asDouble(childNodeChildren[1]); auto unit = guessUnitForParameter(wkt1ParameterName, defaultLinearUnit, defaultAngularUnit); mapParameters.insert(std::pair( tolower(wkt1ParameterName), Measure(val, unit))); } catch (const std::exception &) { } } } Measure latitudeOfOrigin = mapParameters["latitude_of_origin"]; Measure centralMeridian = mapParameters["central_meridian"]; Measure scaleFactorFromMap = mapParameters["scale_factor"]; Measure scaleFactor((scaleFactorFromMap.unit() == UnitOfMeasure::NONE) ? Measure(1.0, UnitOfMeasure::SCALE_UNITY) : scaleFactorFromMap); Measure falseEasting = mapParameters["false_easting"]; Measure falseNorthing = mapParameters["false_northing"]; if (latitudeOfOrigin.unit() != UnitOfMeasure::NONE && scaleFactor.getSIValue() == 1.0) { return Conversion::createPolarStereographicVariantB( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(latitudeOfOrigin.value(), latitudeOfOrigin.unit()), Angle(centralMeridian.value(), centralMeridian.unit()), Length(falseEasting.value(), falseEasting.unit()), Length(falseNorthing.value(), falseNorthing.unit())); } if (latitudeOfOrigin.unit() != UnitOfMeasure::NONE && std::fabs(std::fabs(latitudeOfOrigin.convertToUnit( UnitOfMeasure::DEGREE)) - 90.0) < 1e-10) { return Conversion::createPolarStereographicVariantA( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(latitudeOfOrigin.value(), latitudeOfOrigin.unit()), Angle(centralMeridian.value(), centralMeridian.unit()), Scale(scaleFactor.value(), scaleFactor.unit()), Length(falseEasting.value(), falseEasting.unit()), Length(falseNorthing.value(), falseNorthing.unit())); } tryToIdentifyWKT1Method = false; // Import GDAL PROJ4 extension nodes } else if (extensionChildren.size() == 2 && ci_equal(stripQuotes(extensionChildren[0]), "PROJ4")) { std::string projString = stripQuotes(extensionChildren[1]); if (starts_with(projString, "+proj=")) { if (projString.find(" +type=crs") == std::string::npos) { projString += " +type=crs"; } try { auto projObj = PROJStringParser().createFromPROJString(projString); auto projObjCrs = nn_dynamic_pointer_cast(projObj); if (projObjCrs) { return projObjCrs->derivingConversion(); } } catch (const io::ParsingException &) { } } } std::string projectionName(std::move(wkt1ProjectionName)); const MethodMapping *mapping = tryToIdentifyWKT1Method ? getMappingFromWKT1(projectionName) : nullptr; if (!mapping) { // Sometimes non-WKT1:ESRI looking WKT can actually use WKT1:ESRI // projection definitions std::map mapParamNameToValue; const auto esriMapping = getESRIMapping(projCRSNode, projectionNode, mapParamNameToValue); if (esriMapping != nullptr) { return buildProjectionFromESRI( baseGeodCRS, projCRSNode, projectionNode, defaultLinearUnit, defaultAngularUnit, esriMapping, mapParamNameToValue); } } if (mapping) { mapping = selectSphericalOrEllipsoidal(mapping, baseGeodCRS); } else if (metadata::Identifier::isEquivalentName( projectionName.c_str(), "Lambert Conformal Conic")) { // Lambert Conformal Conic or Lambert_Conformal_Conic are respectively // used by Oracle WKT and Trimble for either LCC 1SP or 2SP, so we // have to look at parameters to figure out the variant. bool found2ndStdParallel = false; bool foundScaleFactor = false; for (const auto &childNode : projCRSNode->GP()->children()) { if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER)) { const auto &childNodeChildren = childNode->GP()->children(); if (childNodeChildren.size() < 2) { ThrowNotEnoughChildren(WKTConstants::PARAMETER); } const std::string wkt1ParameterName( stripQuotes(childNodeChildren[0])); if (metadata::Identifier::isEquivalentName( wkt1ParameterName.c_str(), WKT1_STANDARD_PARALLEL_2)) { found2ndStdParallel = true; } else if (metadata::Identifier::isEquivalentName( wkt1ParameterName.c_str(), WKT1_SCALE_FACTOR)) { foundScaleFactor = true; } } } if (found2ndStdParallel && !foundScaleFactor) { mapping = getMapping(EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); } else if (!found2ndStdParallel && foundScaleFactor) { mapping = getMapping(EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); } else if (found2ndStdParallel && foundScaleFactor) { // Not sure if that happens mapping = getMapping( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN); } } // For Krovak, we need to look at axis to decide between the Krovak and // Krovak East-North Oriented methods if (ci_equal(projectionName, "Krovak") && projCRSNode->countChildrenOfName(WKTConstants::AXIS) == 2 && &buildAxis(projCRSNode->GP()->lookForChild(WKTConstants::AXIS, 0), defaultLinearUnit, UnitOfMeasure::Type::LINEAR, false, 1) ->direction() == &AxisDirection::SOUTH && &buildAxis(projCRSNode->GP()->lookForChild(WKTConstants::AXIS, 1), defaultLinearUnit, UnitOfMeasure::Type::LINEAR, false, 2) ->direction() == &AxisDirection::WEST) { mapping = getMapping(EPSG_CODE_METHOD_KROVAK); } PropertyMap propertiesMethod; if (mapping) { projectionName = mapping->wkt2_name; if (mapping->epsg_code != 0) { propertiesMethod.set(Identifier::CODE_KEY, mapping->epsg_code); propertiesMethod.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } } propertiesMethod.set(IdentifiedObject::NAME_KEY, projectionName); std::vector foundParameters; if (mapping) { size_t countParams = 0; while (mapping->params[countParams] != nullptr) { ++countParams; } foundParameters.resize(countParams); } for (const auto &childNode : projCRSNode->GP()->children()) { if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER)) { const auto &childNodeChildren = childNode->GP()->children(); if (childNodeChildren.size() < 2) { ThrowNotEnoughChildren(WKTConstants::PARAMETER); } const auto ¶mValue = childNodeChildren[1]->GP()->value(); PropertyMap propertiesParameter; const std::string wkt1ParameterName( stripQuotes(childNodeChildren[0])); std::string parameterName(wkt1ParameterName); if (gdal_3026_hack) { if (ci_equal(parameterName, "latitude_of_origin")) { parameterName = "standard_parallel_1"; } else if (ci_equal(parameterName, "scale_factor") && paramValue == "1") { continue; } } auto *paramMapping = mapping ? getMappingFromWKT1(mapping, parameterName) : nullptr; if (mapping && mapping->epsg_code == EPSG_CODE_METHOD_MERCATOR_VARIANT_B && ci_equal(parameterName, "latitude_of_origin")) { // Some illegal formulations of Mercator_2SP have a unexpected // latitude_of_origin parameter. We accept it on import, but // do not accept it when exporting to PROJ string, unless it is // zero. // No need to try to update foundParameters[] as this is a // unexpected one. parameterName = EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN; propertiesParameter.set( Identifier::CODE_KEY, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN); propertiesParameter.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } else if (mapping && paramMapping) { for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) { if (mapping->params[idx] == paramMapping) { foundParameters[idx] = true; break; } } parameterName = paramMapping->wkt2_name; if (paramMapping->epsg_code != 0) { propertiesParameter.set(Identifier::CODE_KEY, paramMapping->epsg_code); propertiesParameter.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } } propertiesParameter.set(IdentifiedObject::NAME_KEY, parameterName); parameters.push_back( OperationParameter::create(propertiesParameter)); try { double val = io::asDouble(paramValue); auto unit = guessUnitForParameter( wkt1ParameterName, defaultLinearUnit, defaultAngularUnit); values.push_back(ParameterValue::create(Measure(val, unit))); } catch (const std::exception &) { throw ParsingException( concat("unhandled parameter value type : ", paramValue)); } } } // Add back important parameters that should normally be present, but // are sometimes missing. Currently we only deal with Scale factor at // natural origin. This is to avoid a default value of 0 to slip in later. // But such WKT should be considered invalid. if (mapping) { for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) { if (!foundParameters[idx] && mapping->params[idx]->epsg_code == EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN) { emitRecoverableWarning( "The WKT string lacks a value " "for " EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN ". Default it to 1."); PropertyMap propertiesParameter; propertiesParameter.set( Identifier::CODE_KEY, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN); propertiesParameter.set(Identifier::CODESPACE_KEY, Identifier::EPSG); propertiesParameter.set( IdentifiedObject::NAME_KEY, EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN); parameters.push_back( OperationParameter::create(propertiesParameter)); values.push_back(ParameterValue::create( Measure(1.0, UnitOfMeasure::SCALE_UNITY))); } } } if (mapping && (mapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A || mapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B)) { // Special case when importing some GDAL WKT of Hotine Oblique Mercator // that have a Azimuth parameter but lacks the Rectified Grid Angle. // We have code in the exportToPROJString() to deal with that situation, // but also adds the rectified grid angle from the azimuth on import. bool foundAngleRecifiedToSkewGrid = false; bool foundAzimuth = false; for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) { if (foundParameters[idx] && mapping->params[idx]->epsg_code == EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID) { foundAngleRecifiedToSkewGrid = true; } else if (foundParameters[idx] && mapping->params[idx]->epsg_code == EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE) { foundAzimuth = true; } } if (!foundAngleRecifiedToSkewGrid && foundAzimuth) { for (size_t idx = 0; idx < parameters.size(); ++idx) { if (parameters[idx]->getEPSGCode() == EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE) { PropertyMap propertiesParameter; propertiesParameter.set( Identifier::CODE_KEY, EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID); propertiesParameter.set(Identifier::CODESPACE_KEY, Identifier::EPSG); propertiesParameter.set( IdentifiedObject::NAME_KEY, EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID); parameters.push_back( OperationParameter::create(propertiesParameter)); values.push_back(values[idx]); } } } } return Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), propertiesMethod, parameters, values) ->identify(); } // --------------------------------------------------------------------------- static ProjectedCRSNNPtr createPseudoMercator(const PropertyMap &props, const cs::CartesianCSNNPtr &cs) { auto conversion = Conversion::createPopularVisualisationPseudoMercator( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(0), Angle(0), Length(0), Length(0)); return ProjectedCRS::create(props, GeographicCRS::EPSG_4326, conversion, cs); } // --------------------------------------------------------------------------- ProjectedCRSNNPtr WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &conversionNode = nodeP->lookForChild(WKTConstants::CONVERSION); auto &projectionNode = nodeP->lookForChild(WKTConstants::PROJECTION); if (isNull(conversionNode) && isNull(projectionNode)) { ThrowMissing(WKTConstants::CONVERSION); } auto &baseGeodCRSNode = nodeP->lookForChild(WKTConstants::BASEGEODCRS, WKTConstants::BASEGEOGCRS, WKTConstants::GEOGCS); if (isNull(baseGeodCRSNode)) { throw ParsingException( "Missing BASEGEODCRS / BASEGEOGCRS / GEOGCS node"); } auto baseGeodCRS = buildGeodeticCRS(baseGeodCRSNode); auto props = buildProperties(node); auto &csNode = nodeP->lookForChild(WKTConstants::CS_); const auto &nodeValue = nodeP->value(); if (isNull(csNode) && !ci_equal(nodeValue, WKTConstants::PROJCS) && !ci_equal(nodeValue, WKTConstants::BASEPROJCRS)) { ThrowMissing(WKTConstants::CS_); } const std::string projCRSName = stripQuotes(nodeP->children()[0]); auto cs = [this, &projCRSName, &nodeP, &csNode, &node, &nodeValue, &conversionNode]() -> CoordinateSystemNNPtr { if (isNull(csNode) && ci_equal(nodeValue, WKTConstants::BASEPROJCRS) && !isNull(conversionNode)) { // A BASEPROJCRS (as of WKT2 18-010r11) normally lacks an explicit // CS[] which cause issues to properly instantiate it. So we first // start by trying to identify the BASEPROJCRS by its id or name. // And fallback to exploring the conversion parameters to infer the // CS AXIS unit from the linear parameter unit... Not fully bullet // proof. if (dbContext_) { // Get official name from database if ID is present auto &idNode = nodeP->lookForChild(WKTConstants::ID); if (!isNull(idNode)) { try { auto id = buildId(node, idNode, false, false); auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext_), *id->codeSpace()); auto projCRS = authFactory->createProjectedCRS(id->code()); return projCRS->coordinateSystem(); } catch (const std::exception &) { } } auto authFactory = AuthorityFactory::create( NN_NO_CHECK(dbContext_), std::string()); auto res = authFactory->createObjectsFromName( projCRSName, {AuthorityFactory::ObjectType::PROJECTED_CRS}, false, 2); if (res.size() == 1) { auto projCRS = dynamic_cast(res.front().get()); if (projCRS) { return projCRS->coordinateSystem(); } } } auto conv = buildConversion(conversionNode, UnitOfMeasure::METRE, UnitOfMeasure::DEGREE); UnitOfMeasure linearUOM = UnitOfMeasure::NONE; for (const auto &genOpParamvalue : conv->parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meterValue = opParamvalue->parameterValue(); if (parameterValue->type() == operation::ParameterValue::Type::MEASURE) { const auto &measure = parameterValue->value(); const auto &unit = measure.unit(); if (unit.type() == UnitOfMeasure::Type::LINEAR) { if (linearUOM == UnitOfMeasure::NONE) { linearUOM = unit; } else if (linearUOM != unit) { linearUOM = UnitOfMeasure::NONE; break; } } } } } if (linearUOM != UnitOfMeasure::NONE) { return CartesianCS::createEastingNorthing(linearUOM); } } return buildCS(csNode, node, UnitOfMeasure::NONE); }(); auto cartesianCS = nn_dynamic_pointer_cast(cs); if (esriStyle_ && dbContext_) { if (cartesianCS) { std::string outTableName; std::string authNameFromAlias; std::string codeFromAlias; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); auto officialName = authFactory->getOfficialNameFromAlias( projCRSName, "projected_crs", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { // Special case for https://github.com/OSGeo/PROJ/issues/2086 // The name of the CRS to identify is // NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501 // whereas it should be // NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501_Feet constexpr double US_FOOT_CONV_FACTOR = 12.0 / 39.37; if (projCRSName.find("_FIPS_") != std::string::npos && projCRSName.find("_Feet") == std::string::npos && std::fabs( cartesianCS->axisList()[0]->unit().conversionToSI() - US_FOOT_CONV_FACTOR) < 1e-10 * US_FOOT_CONV_FACTOR) { auto officialNameFromFeet = authFactory->getOfficialNameFromAlias( projCRSName + "_Feet", "projected_crs", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialNameFromFeet.empty()) { officialName = std::move(officialNameFromFeet); } } props.set(IdentifiedObject::NAME_KEY, officialName); } } } if (isNull(conversionNode) && hasWebMercPROJ4String(node, projectionNode) && cartesianCS) { toWGS84Parameters_.clear(); return createPseudoMercator(props, NN_NO_CHECK(cartesianCS)); } // WGS_84_Pseudo_Mercator: Particular case for corrupted ESRI WKT generated // by older GDAL versions // https://trac.osgeo.org/gdal/changeset/30732 // WGS_1984_Web_Mercator: deprecated ESRI:102113 if (cartesianCS && (metadata::Identifier::isEquivalentName( projCRSName.c_str(), "WGS_84_Pseudo_Mercator") || metadata::Identifier::isEquivalentName( projCRSName.c_str(), "WGS_1984_Web_Mercator"))) { toWGS84Parameters_.clear(); return createPseudoMercator(props, NN_NO_CHECK(cartesianCS)); } // For WKT2, if there is no explicit parameter unit, use metre for linear // units and degree for angular units const UnitOfMeasure linearUnit( !isNull(conversionNode) ? UnitOfMeasure::METRE : buildUnitInSubNode(node, UnitOfMeasure::Type::LINEAR)); const auto &angularUnit = !isNull(conversionNode) ? UnitOfMeasure::DEGREE : baseGeodCRS->coordinateSystem()->axisList()[0]->unit(); auto conversion = !isNull(conversionNode) ? buildConversion(conversionNode, linearUnit, angularUnit) : buildProjection(baseGeodCRS, node, projectionNode, linearUnit, angularUnit); // No explicit AXIS node ? (WKT1) if (isNull(nodeP->lookForChild(WKTConstants::AXIS))) { props.set("IMPLICIT_CS", true); } if (isNull(csNode) && node->countChildrenOfName(WKTConstants::AXIS) == 0) { const auto methodCode = conversion->method()->getEPSGCode(); // Krovak south oriented ? if (methodCode == EPSG_CODE_METHOD_KROVAK) { cartesianCS = CartesianCS::create( PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Southing), emptyString, AxisDirection::SOUTH, linearUnit), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Westing), emptyString, AxisDirection::WEST, linearUnit)) .as_nullable(); } else if (methodCode == EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A || methodCode == EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA) { // It is likely that the ESRI definition of EPSG:32661 (UPS North) & // EPSG:32761 (UPS South) uses the easting-northing order, instead // of the EPSG northing-easting order. // Same for WKT1_GDAL const double lat0 = conversion->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, common::UnitOfMeasure::DEGREE); if (std::fabs(lat0 - 90) < 1e-10) { cartesianCS = CartesianCS::createNorthPoleEastingSouthNorthingSouth( linearUnit) .as_nullable(); } else if (std::fabs(lat0 - -90) < 1e-10) { cartesianCS = CartesianCS::createSouthPoleEastingNorthNorthingNorth( linearUnit) .as_nullable(); } } else if (methodCode == EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B) { const double lat_ts = conversion->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL, common::UnitOfMeasure::DEGREE); if (lat_ts > 0) { cartesianCS = CartesianCS::createNorthPoleEastingSouthNorthingSouth( linearUnit) .as_nullable(); } else if (lat_ts < 0) { cartesianCS = CartesianCS::createSouthPoleEastingNorthNorthingNorth( linearUnit) .as_nullable(); } } else if (methodCode == EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED) { cartesianCS = CartesianCS::createWestingSouthing(linearUnit).as_nullable(); } } if (!cartesianCS) { ThrowNotExpectedCSType(CartesianCS::WKT2_TYPE); } if (cartesianCS->axisList().size() == 3 && baseGeodCRS->coordinateSystem()->axisList().size() == 2) { baseGeodCRS = NN_NO_CHECK(util::nn_dynamic_pointer_cast( baseGeodCRS->promoteTo3D(std::string(), dbContext_))); } addExtensionProj4ToProp(nodeP, props); return ProjectedCRS::create(props, baseGeodCRS, conversion, NN_NO_CHECK(cartesianCS)); } // --------------------------------------------------------------------------- void WKTParser::Private::parseDynamic(const WKTNodeNNPtr &dynamicNode, double &frameReferenceEpoch, util::optional &modelName) { auto &frameEpochNode = dynamicNode->lookForChild(WKTConstants::FRAMEEPOCH); const auto &frameEpochChildren = frameEpochNode->GP()->children(); if (frameEpochChildren.empty()) { ThrowMissing(WKTConstants::FRAMEEPOCH); } try { frameReferenceEpoch = asDouble(frameEpochChildren[0]); } catch (const std::exception &) { throw ParsingException("Invalid FRAMEEPOCH node"); } auto &modelNode = dynamicNode->GP()->lookForChild( WKTConstants::MODEL, WKTConstants::VELOCITYGRID); const auto &modelChildren = modelNode->GP()->children(); if (modelChildren.size() == 1) { modelName = stripQuotes(modelChildren[0]); } } // --------------------------------------------------------------------------- VerticalReferenceFrameNNPtr WKTParser::Private::buildVerticalReferenceFrame( const WKTNodeNNPtr &node, const WKTNodeNNPtr &dynamicNode) { if (!isNull(dynamicNode)) { double frameReferenceEpoch = 0.0; util::optional modelName; parseDynamic(dynamicNode, frameReferenceEpoch, modelName); return DynamicVerticalReferenceFrame::create( buildProperties(node), getAnchor(node), optional(), common::Measure(frameReferenceEpoch, common::UnitOfMeasure::YEAR), modelName); } // WKT1 VERT_DATUM has a datum type after the datum name const auto *nodeP = node->GP(); const std::string &name(nodeP->value()); auto &props = buildProperties(node); const auto &children = nodeP->children(); if (esriStyle_ && dbContext_ && !children.empty()) { std::string outTableName; std::string authNameFromAlias; std::string codeFromAlias; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); const std::string datumName = stripQuotes(children[0]); auto officialName = authFactory->getOfficialNameFromAlias( datumName, "vertical_datum", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { props.set(IdentifiedObject::NAME_KEY, officialName); } } if (ci_equal(name, WKTConstants::VERT_DATUM)) { if (children.size() >= 2) { props.set("VERT_DATUM_TYPE", children[1]->GP()->value()); } } return VerticalReferenceFrame::create(props, getAnchor(node), getAnchorEpoch(node)); } // --------------------------------------------------------------------------- TemporalDatumNNPtr WKTParser::Private::buildTemporalDatum(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &calendarNode = nodeP->lookForChild(WKTConstants::CALENDAR); std::string calendar = TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN; const auto &calendarChildren = calendarNode->GP()->children(); if (calendarChildren.size() == 1) { calendar = stripQuotes(calendarChildren[0]); } auto &timeOriginNode = nodeP->lookForChild(WKTConstants::TIMEORIGIN); std::string originStr; const auto &timeOriginNodeChildren = timeOriginNode->GP()->children(); if (timeOriginNodeChildren.size() == 1) { originStr = stripQuotes(timeOriginNodeChildren[0]); } auto origin = DateTime::create(originStr); return TemporalDatum::create(buildProperties(node), origin, calendar); } // --------------------------------------------------------------------------- EngineeringDatumNNPtr WKTParser::Private::buildEngineeringDatum(const WKTNodeNNPtr &node) { return EngineeringDatum::create(buildProperties(node), getAnchor(node)); } // --------------------------------------------------------------------------- ParametricDatumNNPtr WKTParser::Private::buildParametricDatum(const WKTNodeNNPtr &node) { return ParametricDatum::create(buildProperties(node), getAnchor(node)); } // --------------------------------------------------------------------------- static CRSNNPtr createBoundCRSSourceTransformationCRS(const crs::CRSPtr &sourceCRS, const crs::CRSPtr &targetCRS) { CRSPtr sourceTransformationCRS; if (dynamic_cast(targetCRS.get())) { GeographicCRSPtr sourceGeographicCRS = sourceCRS->extractGeographicCRS(); sourceTransformationCRS = sourceGeographicCRS; if (sourceGeographicCRS) { const auto &sourceDatum = sourceGeographicCRS->datum(); if (sourceDatum != nullptr && sourceGeographicCRS->primeMeridian() ->longitude() .getSIValue() != 0.0) { sourceTransformationCRS = GeographicCRS::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, sourceGeographicCRS->nameStr() + " (with Greenwich prime meridian)"), datum::GeodeticReferenceFrame::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, sourceDatum->nameStr() + " (with Greenwich prime meridian)"), sourceDatum->ellipsoid(), util::optional(), datum::PrimeMeridian::GREENWICH), sourceGeographicCRS->coordinateSystem()) .as_nullable(); } } else { auto vertSourceCRS = std::dynamic_pointer_cast(sourceCRS); if (!vertSourceCRS) { throw ParsingException( "Cannot find GeographicCRS or VerticalCRS in sourceCRS"); } const auto &axis = vertSourceCRS->coordinateSystem()->axisList()[0]; if (axis->unit() == common::UnitOfMeasure::METRE && &(axis->direction()) == &AxisDirection::UP) { sourceTransformationCRS = sourceCRS; } else { std::string sourceTransformationCRSName( vertSourceCRS->nameStr()); if (ends_with(sourceTransformationCRSName, " (ftUS)")) { sourceTransformationCRSName.resize( sourceTransformationCRSName.size() - strlen(" (ftUS)")); } if (ends_with(sourceTransformationCRSName, " depth")) { sourceTransformationCRSName.resize( sourceTransformationCRSName.size() - strlen(" depth")); } if (!ends_with(sourceTransformationCRSName, " height")) { sourceTransformationCRSName += " height"; } sourceTransformationCRS = VerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, sourceTransformationCRSName), vertSourceCRS->datum(), vertSourceCRS->datumEnsemble(), VerticalCS::createGravityRelatedHeight( common::UnitOfMeasure::METRE)) .as_nullable(); } } } else { sourceTransformationCRS = sourceCRS; } return NN_NO_CHECK(sourceTransformationCRS); } // --------------------------------------------------------------------------- CRSNNPtr WKTParser::Private::buildVerticalCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); const auto &nodeValue = nodeP->value(); auto &vdatumNode = nodeP->lookForChild(WKTConstants::VDATUM, WKTConstants::VERT_DATUM, WKTConstants::VERTICALDATUM, WKTConstants::VRF); auto &ensembleNode = nodeP->lookForChild(WKTConstants::ENSEMBLE); // like in ESRI VERTCS["WGS_1984",DATUM["D_WGS_1984", // SPHEROID["WGS_1984",6378137.0,298.257223563]], // PARAMETER["Vertical_Shift",0.0], // PARAMETER["Direction",1.0],UNIT["Meter",1.0] auto &geogDatumNode = ci_equal(nodeValue, WKTConstants::VERTCS) ? nodeP->lookForChild(WKTConstants::DATUM) : null_node; if (isNull(vdatumNode) && isNull(geogDatumNode) && isNull(ensembleNode)) { throw ParsingException("Missing VDATUM or ENSEMBLE node"); } for (const auto &childNode : nodeP->children()) { const auto &childNodeChildren = childNode->GP()->children(); if (childNodeChildren.size() == 2 && ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER) && childNodeChildren[0]->GP()->value() == "\"Vertical_Shift\"") { esriStyle_ = true; break; } } auto &dynamicNode = nodeP->lookForChild(WKTConstants::DYNAMIC); auto vdatum = !isNull(geogDatumNode) ? VerticalReferenceFrame::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, buildGeodeticReferenceFrame(geogDatumNode, PrimeMeridian::GREENWICH, null_node) ->nameStr()) .set("VERT_DATUM_TYPE", "2002")) .as_nullable() : !isNull(vdatumNode) ? buildVerticalReferenceFrame(vdatumNode, dynamicNode).as_nullable() : nullptr; auto datumEnsemble = !isNull(ensembleNode) ? buildDatumEnsemble(ensembleNode, nullptr, false).as_nullable() : nullptr; auto &csNode = nodeP->lookForChild(WKTConstants::CS_); if (isNull(csNode) && !ci_equal(nodeValue, WKTConstants::VERT_CS) && !ci_equal(nodeValue, WKTConstants::VERTCS) && !ci_equal(nodeValue, WKTConstants::BASEVERTCRS)) { ThrowMissing(WKTConstants::CS_); } auto verticalCS = nn_dynamic_pointer_cast( buildCS(csNode, node, UnitOfMeasure::NONE)); if (!verticalCS) { ThrowNotExpectedCSType(VerticalCS::WKT2_TYPE); } if (vdatum && vdatum->getWKT1DatumType() == "2002" && &(verticalCS->axisList()[0]->direction()) == &(AxisDirection::UP)) { verticalCS = VerticalCS::create( util::PropertyMap(), CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, "ellipsoidal height"), "h", AxisDirection::UP, verticalCS->axisList()[0]->unit())) .as_nullable(); } auto &props = buildProperties(node); if (esriStyle_ && dbContext_) { std::string outTableName; std::string authNameFromAlias; std::string codeFromAlias; auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); const std::string vertCRSName = stripQuotes(nodeP->children()[0]); auto officialName = authFactory->getOfficialNameFromAlias( vertCRSName, "vertical_crs", "ESRI", false, outTableName, authNameFromAlias, codeFromAlias); if (!officialName.empty()) { props.set(IdentifiedObject::NAME_KEY, officialName); } } // Deal with Lidar WKT1 VertCRS that embeds geoid model in CRS name, // following conventions from // https://pubs.usgs.gov/tm/11b4/pdf/tm11-B4.pdf // page 9 if (ci_equal(nodeValue, WKTConstants::VERT_CS) || ci_equal(nodeValue, WKTConstants::VERTCS)) { std::string name; if (props.getStringValue(IdentifiedObject::NAME_KEY, name)) { std::string geoidName; for (const char *prefix : {"NAVD88 - ", "NAVD88 via ", "NAVD88 height - ", "NAVD88 height (ftUS) - "}) { if (starts_with(name, prefix)) { geoidName = name.substr(strlen(prefix)); auto pos = geoidName.find_first_of(" ("); if (pos != std::string::npos) { geoidName.resize(pos); } break; } } if (!geoidName.empty()) { const auto &axis = verticalCS->axisList()[0]; const auto &dir = axis->direction(); if (dir == cs::AxisDirection::UP) { if (axis->unit() == common::UnitOfMeasure::METRE) { props.set(IdentifiedObject::NAME_KEY, "NAVD88 height"); props.set(Identifier::CODE_KEY, 5703); props.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } else if (axis->unit().name() == "US survey foot") { props.set(IdentifiedObject::NAME_KEY, "NAVD88 height (ftUS)"); props.set(Identifier::CODE_KEY, 6360); props.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } } PropertyMap propsModel; propsModel.set(IdentifiedObject::NAME_KEY, toupper(geoidName)); PropertyMap propsDatum; propsDatum.set(IdentifiedObject::NAME_KEY, "North American Vertical Datum 1988"); propsDatum.set(Identifier::CODE_KEY, 5103); propsDatum.set(Identifier::CODESPACE_KEY, Identifier::EPSG); vdatum = VerticalReferenceFrame::create(propsDatum).as_nullable(); const auto dummyCRS = VerticalCRS::create(PropertyMap(), vdatum, datumEnsemble, NN_NO_CHECK(verticalCS)); const auto model(Transformation::create( propsModel, dummyCRS, dummyCRS, nullptr, OperationMethod::create( PropertyMap(), std::vector()), {}, {})); props.set("GEOID_MODEL", model); } } } auto &geoidModelNode = nodeP->lookForChild(WKTConstants::GEOIDMODEL); if (!isNull(geoidModelNode)) { ArrayOfBaseObjectNNPtr arrayModels = ArrayOfBaseObject::create(); for (const auto &childNode : nodeP->children()) { const auto &childNodeChildren = childNode->GP()->children(); if (childNodeChildren.size() >= 1 && ci_equal(childNode->GP()->value(), WKTConstants::GEOIDMODEL)) { auto &propsModel = buildProperties(childNode); const auto dummyCRS = VerticalCRS::create(PropertyMap(), vdatum, datumEnsemble, NN_NO_CHECK(verticalCS)); const auto model(Transformation::create( propsModel, dummyCRS, dummyCRS, nullptr, OperationMethod::create( PropertyMap(), std::vector()), {}, {})); arrayModels->add(model); } } props.set("GEOID_MODEL", arrayModels); } auto crs = nn_static_pointer_cast(VerticalCRS::create( props, vdatum, datumEnsemble, NN_NO_CHECK(verticalCS))); if (!isNull(vdatumNode)) { auto &extensionNode = vdatumNode->lookForChild(WKTConstants::EXTENSION); const auto &extensionChildren = extensionNode->GP()->children(); if (extensionChildren.size() == 2) { if (ci_equal(stripQuotes(extensionChildren[0]), "PROJ4_GRIDS")) { const auto gridName(stripQuotes(extensionChildren[1])); // This is the expansion of EPSG:5703 by old GDAL versions. // See // https://trac.osgeo.org/metacrs/changeset?reponame=&new=2281%40geotiff%2Ftrunk%2Flibgeotiff%2Fcsv%2Fvertcs.override.csv&old=1893%40geotiff%2Ftrunk%2Flibgeotiff%2Fcsv%2Fvertcs.override.csv // It is unlikely that the user really explicitly wants this. if (gridName != "g2003conus.gtx,g2003alaska.gtx," "g2003h01.gtx,g2003p01.gtx" && gridName != "g2012a_conus.gtx,g2012a_alaska.gtx," "g2012a_guam.gtx,g2012a_hawaii.gtx," "g2012a_puertorico.gtx,g2012a_samoa.gtx") { auto geogCRS = geogCRSOfCompoundCRS_ && geogCRSOfCompoundCRS_->primeMeridian() ->longitude() .getSIValue() == 0 && geogCRSOfCompoundCRS_->coordinateSystem() ->axisList()[0] ->unit() == UnitOfMeasure::DEGREE ? geogCRSOfCompoundCRS_->promoteTo3D(std::string(), dbContext_) : GeographicCRS::EPSG_4979; auto sourceTransformationCRS = createBoundCRSSourceTransformationCRS( crs.as_nullable(), geogCRS.as_nullable()); auto transformation = Transformation:: createGravityRelatedHeightToGeographic3D( PropertyMap().set( IdentifiedObject::NAME_KEY, sourceTransformationCRS->nameStr() + " to " + geogCRS->nameStr() + " ellipsoidal height"), sourceTransformationCRS, geogCRS, nullptr, gridName, std::vector()); return nn_static_pointer_cast( BoundCRS::create(crs, geogCRS, transformation)); } } } } return crs; } // --------------------------------------------------------------------------- DerivedVerticalCRSNNPtr WKTParser::Private::buildDerivedVerticalCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &baseVertCRSNode = nodeP->lookForChild(WKTConstants::BASEVERTCRS); // given the constraints enforced on calling code path assert(!isNull(baseVertCRSNode)); auto baseVertCRS_tmp = buildVerticalCRS(baseVertCRSNode); auto baseVertCRS = NN_NO_CHECK(baseVertCRS_tmp->extractVerticalCRS()); auto &derivingConversionNode = nodeP->lookForChild(WKTConstants::DERIVINGCONVERSION); if (isNull(derivingConversionNode)) { ThrowMissing(WKTConstants::DERIVINGCONVERSION); } auto derivingConversion = buildConversion( derivingConversionNode, UnitOfMeasure::NONE, UnitOfMeasure::NONE); auto &csNode = nodeP->lookForChild(WKTConstants::CS_); if (isNull(csNode)) { ThrowMissing(WKTConstants::CS_); } auto cs = buildCS(csNode, node, UnitOfMeasure::NONE); auto verticalCS = nn_dynamic_pointer_cast(cs); if (!verticalCS) { throw ParsingException( concat("vertical CS expected, but found ", cs->getWKT2Type(true))); } return DerivedVerticalCRS::create(buildProperties(node), baseVertCRS, derivingConversion, NN_NO_CHECK(verticalCS)); } // --------------------------------------------------------------------------- CRSNNPtr WKTParser::Private::buildCompoundCRS(const WKTNodeNNPtr &node) { std::vector components; bool bFirstNode = true; for (const auto &child : node->GP()->children()) { auto crs = buildCRS(child); if (crs) { if (bFirstNode) { geogCRSOfCompoundCRS_ = crs->extractGeographicCRS(); bFirstNode = false; } components.push_back(NN_NO_CHECK(crs)); } } if (ci_equal(node->GP()->value(), WKTConstants::COMPD_CS)) { return CompoundCRS::createLax(buildProperties(node), components, dbContext_); } else { return CompoundCRS::create(buildProperties(node), components); } } // --------------------------------------------------------------------------- static TransformationNNPtr buildTransformationForBoundCRS( DatabaseContextPtr &dbContext, const util::PropertyMap &abridgedNodeProperties, const util::PropertyMap &methodNodeProperties, const CRSNNPtr &sourceCRS, const CRSNNPtr &targetCRS, std::vector ¶meters, std::vector &values) { auto interpolationCRS = dealWithEPSGCodeForInterpolationCRSParameter( dbContext, parameters, values); const auto sourceTransformationCRS( createBoundCRSSourceTransformationCRS(sourceCRS, targetCRS)); auto transformation = Transformation::create( abridgedNodeProperties, sourceTransformationCRS, targetCRS, interpolationCRS, methodNodeProperties, parameters, values, std::vector()); // If the transformation is a "Geographic3D to GravityRelatedHeight" one, // then the sourceCRS is expected to be a GeographicCRS and the target a // VerticalCRS. Due to how things work in a BoundCRS, we have the opposite, // so use our "GravityRelatedHeight to Geographic3D" method instead. if (Transformation::isGeographic3DToGravityRelatedHeight( transformation->method(), true) && dynamic_cast(sourceTransformationCRS.get()) && dynamic_cast(targetCRS.get())) { auto fileParameter = transformation->parameterValue( EPSG_NAME_PARAMETER_GEOID_CORRECTION_FILENAME, EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { const auto &filename = fileParameter->valueFile(); transformation = Transformation::createGravityRelatedHeightToGeographic3D( abridgedNodeProperties, sourceTransformationCRS, targetCRS, interpolationCRS, filename, std::vector()); } } return transformation; } // --------------------------------------------------------------------------- BoundCRSNNPtr WKTParser::Private::buildBoundCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &abridgedNode = nodeP->lookForChild(WKTConstants::ABRIDGEDTRANSFORMATION); if (isNull(abridgedNode)) { ThrowNotEnoughChildren(WKTConstants::ABRIDGEDTRANSFORMATION); } auto &methodNode = abridgedNode->GP()->lookForChild(WKTConstants::METHOD); if (isNull(methodNode)) { ThrowMissing(WKTConstants::METHOD); } if (methodNode->GP()->childrenSize() == 0) { ThrowNotEnoughChildren(WKTConstants::METHOD); } auto &sourceCRSNode = nodeP->lookForChild(WKTConstants::SOURCECRS); const auto &sourceCRSNodeChildren = sourceCRSNode->GP()->children(); if (sourceCRSNodeChildren.size() != 1) { ThrowNotEnoughChildren(WKTConstants::SOURCECRS); } auto sourceCRS = buildCRS(sourceCRSNodeChildren[0]); if (!sourceCRS) { throw ParsingException("Invalid content in SOURCECRS node"); } auto &targetCRSNode = nodeP->lookForChild(WKTConstants::TARGETCRS); const auto &targetCRSNodeChildren = targetCRSNode->GP()->children(); if (targetCRSNodeChildren.size() != 1) { ThrowNotEnoughChildren(WKTConstants::TARGETCRS); } auto targetCRS = buildCRS(targetCRSNodeChildren[0]); if (!targetCRS) { throw ParsingException("Invalid content in TARGETCRS node"); } std::vector parameters; std::vector values; const auto &defaultLinearUnit = UnitOfMeasure::NONE; const auto &defaultAngularUnit = UnitOfMeasure::NONE; consumeParameters(abridgedNode, true, parameters, values, defaultLinearUnit, defaultAngularUnit); const auto nnSourceCRS = NN_NO_CHECK(sourceCRS); const auto nnTargetCRS = NN_NO_CHECK(targetCRS); const auto transformation = buildTransformationForBoundCRS( dbContext_, buildProperties(abridgedNode), buildProperties(methodNode), nnSourceCRS, nnTargetCRS, parameters, values); return BoundCRS::create(buildProperties(node, false, false), NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), transformation); } // --------------------------------------------------------------------------- TemporalCSNNPtr WKTParser::Private::buildTemporalCS(const WKTNodeNNPtr &parentNode) { auto &csNode = parentNode->GP()->lookForChild(WKTConstants::CS_); if (isNull(csNode) && !ci_equal(parentNode->GP()->value(), WKTConstants::BASETIMECRS)) { ThrowMissing(WKTConstants::CS_); } auto cs = buildCS(csNode, parentNode, UnitOfMeasure::NONE); auto temporalCS = nn_dynamic_pointer_cast(cs); if (!temporalCS) { ThrowNotExpectedCSType(TemporalCS::WKT2_2015_TYPE); } return NN_NO_CHECK(temporalCS); } // --------------------------------------------------------------------------- TemporalCRSNNPtr WKTParser::Private::buildTemporalCRS(const WKTNodeNNPtr &node) { auto &datumNode = node->GP()->lookForChild(WKTConstants::TDATUM, WKTConstants::TIMEDATUM); if (isNull(datumNode)) { throw ParsingException("Missing TDATUM / TIMEDATUM node"); } return TemporalCRS::create(buildProperties(node), buildTemporalDatum(datumNode), buildTemporalCS(node)); } // --------------------------------------------------------------------------- DerivedTemporalCRSNNPtr WKTParser::Private::buildDerivedTemporalCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &baseCRSNode = nodeP->lookForChild(WKTConstants::BASETIMECRS); // given the constraints enforced on calling code path assert(!isNull(baseCRSNode)); auto &derivingConversionNode = nodeP->lookForChild(WKTConstants::DERIVINGCONVERSION); if (isNull(derivingConversionNode)) { ThrowNotEnoughChildren(WKTConstants::DERIVINGCONVERSION); } return DerivedTemporalCRS::create( buildProperties(node), buildTemporalCRS(baseCRSNode), buildConversion(derivingConversionNode, UnitOfMeasure::NONE, UnitOfMeasure::NONE), buildTemporalCS(node)); } // --------------------------------------------------------------------------- EngineeringCRSNNPtr WKTParser::Private::buildEngineeringCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &datumNode = nodeP->lookForChild(WKTConstants::EDATUM, WKTConstants::ENGINEERINGDATUM); if (isNull(datumNode)) { throw ParsingException("Missing EDATUM / ENGINEERINGDATUM node"); } auto &csNode = nodeP->lookForChild(WKTConstants::CS_); if (isNull(csNode) && !ci_equal(nodeP->value(), WKTConstants::BASEENGCRS)) { ThrowMissing(WKTConstants::CS_); } auto cs = buildCS(csNode, node, UnitOfMeasure::NONE); return EngineeringCRS::create(buildProperties(node), buildEngineeringDatum(datumNode), cs); } // --------------------------------------------------------------------------- EngineeringCRSNNPtr WKTParser::Private::buildEngineeringCRSFromLocalCS(const WKTNodeNNPtr &node) { auto &datumNode = node->GP()->lookForChild(WKTConstants::LOCAL_DATUM); auto cs = buildCS(null_node, node, UnitOfMeasure::NONE); auto datum = EngineeringDatum::create( !isNull(datumNode) ? buildProperties(datumNode) : // In theory OGC 01-009 mandates LOCAL_DATUM, but GDAL // has a tradition of emitting just LOCAL_CS["foo"] []() { PropertyMap map; map.set(IdentifiedObject::NAME_KEY, UNKNOWN_ENGINEERING_DATUM); return map; }()); return EngineeringCRS::create(buildProperties(node), datum, cs); } // --------------------------------------------------------------------------- DerivedEngineeringCRSNNPtr WKTParser::Private::buildDerivedEngineeringCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &baseEngCRSNode = nodeP->lookForChild(WKTConstants::BASEENGCRS); // given the constraints enforced on calling code path assert(!isNull(baseEngCRSNode)); auto baseEngCRS = buildEngineeringCRS(baseEngCRSNode); auto &derivingConversionNode = nodeP->lookForChild(WKTConstants::DERIVINGCONVERSION); if (isNull(derivingConversionNode)) { ThrowNotEnoughChildren(WKTConstants::DERIVINGCONVERSION); } auto derivingConversion = buildConversion( derivingConversionNode, UnitOfMeasure::NONE, UnitOfMeasure::NONE); auto &csNode = nodeP->lookForChild(WKTConstants::CS_); if (isNull(csNode)) { ThrowMissing(WKTConstants::CS_); } auto cs = buildCS(csNode, node, UnitOfMeasure::NONE); return DerivedEngineeringCRS::create(buildProperties(node), baseEngCRS, derivingConversion, cs); } // --------------------------------------------------------------------------- ParametricCSNNPtr WKTParser::Private::buildParametricCS(const WKTNodeNNPtr &parentNode) { auto &csNode = parentNode->GP()->lookForChild(WKTConstants::CS_); if (isNull(csNode) && !ci_equal(parentNode->GP()->value(), WKTConstants::BASEPARAMCRS)) { ThrowMissing(WKTConstants::CS_); } auto cs = buildCS(csNode, parentNode, UnitOfMeasure::NONE); auto parametricCS = nn_dynamic_pointer_cast(cs); if (!parametricCS) { ThrowNotExpectedCSType(ParametricCS::WKT2_TYPE); } return NN_NO_CHECK(parametricCS); } // --------------------------------------------------------------------------- ParametricCRSNNPtr WKTParser::Private::buildParametricCRS(const WKTNodeNNPtr &node) { auto &datumNode = node->GP()->lookForChild(WKTConstants::PDATUM, WKTConstants::PARAMETRICDATUM); if (isNull(datumNode)) { throw ParsingException("Missing PDATUM / PARAMETRICDATUM node"); } return ParametricCRS::create(buildProperties(node), buildParametricDatum(datumNode), buildParametricCS(node)); } // --------------------------------------------------------------------------- DerivedParametricCRSNNPtr WKTParser::Private::buildDerivedParametricCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &baseParamCRSNode = nodeP->lookForChild(WKTConstants::BASEPARAMCRS); // given the constraints enforced on calling code path assert(!isNull(baseParamCRSNode)); auto &derivingConversionNode = nodeP->lookForChild(WKTConstants::DERIVINGCONVERSION); if (isNull(derivingConversionNode)) { ThrowNotEnoughChildren(WKTConstants::DERIVINGCONVERSION); } return DerivedParametricCRS::create( buildProperties(node), buildParametricCRS(baseParamCRSNode), buildConversion(derivingConversionNode, UnitOfMeasure::NONE, UnitOfMeasure::NONE), buildParametricCS(node)); } // --------------------------------------------------------------------------- DerivedProjectedCRSNNPtr WKTParser::Private::buildDerivedProjectedCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); auto &baseProjCRSNode = nodeP->lookForChild(WKTConstants::BASEPROJCRS); if (isNull(baseProjCRSNode)) { ThrowNotEnoughChildren(WKTConstants::BASEPROJCRS); } auto baseProjCRS = buildProjectedCRS(baseProjCRSNode); auto &conversionNode = nodeP->lookForChild(WKTConstants::DERIVINGCONVERSION); if (isNull(conversionNode)) { ThrowNotEnoughChildren(WKTConstants::DERIVINGCONVERSION); } auto linearUnit = buildUnitInSubNode(node); const auto &angularUnit = baseProjCRS->baseCRS()->coordinateSystem()->axisList()[0]->unit(); auto conversion = buildConversion(conversionNode, linearUnit, angularUnit); auto &csNode = nodeP->lookForChild(WKTConstants::CS_); if (isNull(csNode) && !ci_equal(nodeP->value(), WKTConstants::PROJCS)) { ThrowMissing(WKTConstants::CS_); } auto cs = buildCS(csNode, node, UnitOfMeasure::NONE); if (cs->axisList().size() == 3 && baseProjCRS->coordinateSystem()->axisList().size() == 2) { baseProjCRS = NN_NO_CHECK(util::nn_dynamic_pointer_cast( baseProjCRS->promoteTo3D(std::string(), dbContext_))); } return DerivedProjectedCRS::create(buildProperties(node), baseProjCRS, conversion, cs); } // --------------------------------------------------------------------------- CoordinateMetadataNNPtr WKTParser::Private::buildCoordinateMetadata(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); const auto &l_children = nodeP->children(); if (l_children.empty()) { ThrowNotEnoughChildren(WKTConstants::COORDINATEMETADATA); } auto crs = buildCRS(l_children[0]); if (!crs) { throw ParsingException("Invalid content in CRS node"); } auto &epochNode = nodeP->lookForChild(WKTConstants::EPOCH); if (!isNull(epochNode)) { const auto &epochChildren = epochNode->GP()->children(); if (epochChildren.empty()) { ThrowMissing(WKTConstants::EPOCH); } double coordinateEpoch; try { coordinateEpoch = asDouble(epochChildren[0]); } catch (const std::exception &) { throw ParsingException("Invalid EPOCH node"); } return CoordinateMetadata::create(NN_NO_CHECK(crs), coordinateEpoch, dbContext_); } return CoordinateMetadata::create(NN_NO_CHECK(crs)); } // --------------------------------------------------------------------------- static bool isGeodeticCRS(const std::string &name) { return ci_equal(name, WKTConstants::GEODCRS) || // WKT2 ci_equal(name, WKTConstants::GEODETICCRS) || // WKT2 ci_equal(name, WKTConstants::GEOGCRS) || // WKT2 2019 ci_equal(name, WKTConstants::GEOGRAPHICCRS) || // WKT2 2019 ci_equal(name, WKTConstants::GEOGCS) || // WKT1 ci_equal(name, WKTConstants::GEOCCS); // WKT1 } // --------------------------------------------------------------------------- CRSPtr WKTParser::Private::buildCRS(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); const std::string &name(nodeP->value()); const auto applyHorizontalBoundCRSParams = [&](const CRSNNPtr &crs) { if (!toWGS84Parameters_.empty()) { auto ret = BoundCRS::createFromTOWGS84(crs, toWGS84Parameters_); toWGS84Parameters_.clear(); return util::nn_static_pointer_cast(ret); } else if (!datumPROJ4Grids_.empty()) { auto ret = BoundCRS::createFromNadgrids(crs, datumPROJ4Grids_); datumPROJ4Grids_.clear(); return util::nn_static_pointer_cast(ret); } return crs; }; if (isGeodeticCRS(name)) { if (!isNull(nodeP->lookForChild(WKTConstants::BASEGEOGCRS, WKTConstants::BASEGEODCRS))) { return util::nn_static_pointer_cast( applyHorizontalBoundCRSParams(buildDerivedGeodeticCRS(node))); } else { return util::nn_static_pointer_cast( applyHorizontalBoundCRSParams(buildGeodeticCRS(node))); } } if (ci_equal(name, WKTConstants::PROJCS) || ci_equal(name, WKTConstants::PROJCRS) || ci_equal(name, WKTConstants::PROJECTEDCRS)) { // Get the EXTENSION "PROJ4" node before attempting to call // buildProjectedCRS() since formulations of WKT1_GDAL from GDAL 2.x // with the netCDF driver and the lack the required UNIT[] node std::string projString = getExtensionProj4(nodeP); if (!projString.empty() && (starts_with(projString, "+proj=ob_tran +o_proj=longlat") || starts_with(projString, "+proj=ob_tran +o_proj=lonlat") || starts_with(projString, "+proj=ob_tran +o_proj=latlong") || starts_with(projString, "+proj=ob_tran +o_proj=latlon"))) { // Those are not a projected CRS, but a DerivedGeographic one... if (projString.find(" +type=crs") == std::string::npos) { projString += " +type=crs"; } try { auto projObj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast(projObj); if (crs) { return util::nn_static_pointer_cast( applyHorizontalBoundCRSParams(NN_NO_CHECK(crs))); } } catch (const io::ParsingException &) { } } return util::nn_static_pointer_cast( applyHorizontalBoundCRSParams(buildProjectedCRS(node))); } if (ci_equal(name, WKTConstants::VERT_CS) || ci_equal(name, WKTConstants::VERTCS) || ci_equal(name, WKTConstants::VERTCRS) || ci_equal(name, WKTConstants::VERTICALCRS)) { if (!isNull(nodeP->lookForChild(WKTConstants::BASEVERTCRS))) { return util::nn_static_pointer_cast( buildDerivedVerticalCRS(node)); } else { return util::nn_static_pointer_cast(buildVerticalCRS(node)); } } if (ci_equal(name, WKTConstants::COMPD_CS) || ci_equal(name, WKTConstants::COMPOUNDCRS)) { return util::nn_static_pointer_cast(buildCompoundCRS(node)); } if (ci_equal(name, WKTConstants::BOUNDCRS)) { return util::nn_static_pointer_cast(buildBoundCRS(node)); } if (ci_equal(name, WKTConstants::TIMECRS)) { if (!isNull(nodeP->lookForChild(WKTConstants::BASETIMECRS))) { return util::nn_static_pointer_cast( buildDerivedTemporalCRS(node)); } else { return util::nn_static_pointer_cast(buildTemporalCRS(node)); } } if (ci_equal(name, WKTConstants::DERIVEDPROJCRS)) { return util::nn_static_pointer_cast( buildDerivedProjectedCRS(node)); } if (ci_equal(name, WKTConstants::ENGCRS) || ci_equal(name, WKTConstants::ENGINEERINGCRS)) { if (!isNull(nodeP->lookForChild(WKTConstants::BASEENGCRS))) { return util::nn_static_pointer_cast( buildDerivedEngineeringCRS(node)); } else { return util::nn_static_pointer_cast(buildEngineeringCRS(node)); } } if (ci_equal(name, WKTConstants::LOCAL_CS)) { return util::nn_static_pointer_cast( buildEngineeringCRSFromLocalCS(node)); } if (ci_equal(name, WKTConstants::PARAMETRICCRS)) { if (!isNull(nodeP->lookForChild(WKTConstants::BASEPARAMCRS))) { return util::nn_static_pointer_cast( buildDerivedParametricCRS(node)); } else { return util::nn_static_pointer_cast(buildParametricCRS(node)); } } return nullptr; } // --------------------------------------------------------------------------- BaseObjectNNPtr WKTParser::Private::build(const WKTNodeNNPtr &node) { const auto *nodeP = node->GP(); const std::string &name(nodeP->value()); auto crs = buildCRS(node); if (crs) { return util::nn_static_pointer_cast(NN_NO_CHECK(crs)); } // Datum handled by caller code WKTParser::createFromWKT() if (ci_equal(name, WKTConstants::ENSEMBLE)) { return util::nn_static_pointer_cast(buildDatumEnsemble( node, PrimeMeridian::GREENWICH, !isNull(nodeP->lookForChild(WKTConstants::ELLIPSOID)))); } if (ci_equal(name, WKTConstants::VDATUM) || ci_equal(name, WKTConstants::VERT_DATUM) || ci_equal(name, WKTConstants::VERTICALDATUM) || ci_equal(name, WKTConstants::VRF)) { return util::nn_static_pointer_cast( buildVerticalReferenceFrame(node, null_node)); } if (ci_equal(name, WKTConstants::TDATUM) || ci_equal(name, WKTConstants::TIMEDATUM)) { return util::nn_static_pointer_cast( buildTemporalDatum(node)); } if (ci_equal(name, WKTConstants::EDATUM) || ci_equal(name, WKTConstants::ENGINEERINGDATUM)) { return util::nn_static_pointer_cast( buildEngineeringDatum(node)); } if (ci_equal(name, WKTConstants::PDATUM) || ci_equal(name, WKTConstants::PARAMETRICDATUM)) { return util::nn_static_pointer_cast( buildParametricDatum(node)); } if (ci_equal(name, WKTConstants::ELLIPSOID) || ci_equal(name, WKTConstants::SPHEROID)) { return util::nn_static_pointer_cast(buildEllipsoid(node)); } if (ci_equal(name, WKTConstants::COORDINATEOPERATION)) { auto transf = buildCoordinateOperation(node); const char *prefixes[] = { "PROJ-based operation method: ", "PROJ-based operation method (approximate): "}; for (const char *prefix : prefixes) { if (starts_with(transf->method()->nameStr(), prefix)) { auto projString = transf->method()->nameStr().substr(strlen(prefix)); return util::nn_static_pointer_cast( PROJBasedOperation::create( PropertyMap(), projString, transf->sourceCRS(), transf->targetCRS(), transf->coordinateOperationAccuracies())); } } return util::nn_static_pointer_cast(transf); } if (ci_equal(name, WKTConstants::CONVERSION)) { auto conv = buildConversion(node, UnitOfMeasure::METRE, UnitOfMeasure::DEGREE); if (starts_with(conv->method()->nameStr(), "PROJ-based operation method: ")) { auto projString = conv->method()->nameStr().substr( strlen("PROJ-based operation method: ")); return util::nn_static_pointer_cast( PROJBasedOperation::create(PropertyMap(), projString, nullptr, nullptr, {})); } return util::nn_static_pointer_cast(conv); } if (ci_equal(name, WKTConstants::CONCATENATEDOPERATION)) { return util::nn_static_pointer_cast( buildConcatenatedOperation(node)); } if (ci_equal(name, WKTConstants::POINTMOTIONOPERATION)) { return util::nn_static_pointer_cast( buildPointMotionOperation(node)); } if (ci_equal(name, WKTConstants::ID) || ci_equal(name, WKTConstants::AUTHORITY)) { return util::nn_static_pointer_cast( NN_NO_CHECK(buildId(node, node, false, false))); } if (ci_equal(name, WKTConstants::COORDINATEMETADATA)) { return util::nn_static_pointer_cast( buildCoordinateMetadata(node)); } throw ParsingException(concat("unhandled keyword: ", name)); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress class JSONParser { DatabaseContextPtr dbContext_{}; std::string deformationModelName_{}; static std::string getString(const json &j, const char *key); static json getObject(const json &j, const char *key); static json getArray(const json &j, const char *key); static int getInteger(const json &j, const char *key); static double getNumber(const json &j, const char *key); static UnitOfMeasure getUnit(const json &j, const char *key); static std::string getName(const json &j); static std::string getType(const json &j); static Length getLength(const json &j, const char *key); static Measure getMeasure(const json &j); IdentifierNNPtr buildId(const json &parentJ, const json &j, bool removeInverseOf); static ObjectDomainPtr buildObjectDomain(const json &j); PropertyMap buildProperties(const json &j, bool removeInverseOf = false, bool nameRequired = true); GeographicCRSNNPtr buildGeographicCRS(const json &j); GeodeticCRSNNPtr buildGeodeticCRS(const json &j); ProjectedCRSNNPtr buildProjectedCRS(const json &j); ConversionNNPtr buildConversion(const json &j); DatumEnsembleNNPtr buildDatumEnsemble(const json &j); GeodeticReferenceFrameNNPtr buildGeodeticReferenceFrame(const json &j); VerticalReferenceFrameNNPtr buildVerticalReferenceFrame(const json &j); DynamicGeodeticReferenceFrameNNPtr buildDynamicGeodeticReferenceFrame(const json &j); DynamicVerticalReferenceFrameNNPtr buildDynamicVerticalReferenceFrame(const json &j); EllipsoidNNPtr buildEllipsoid(const json &j); PrimeMeridianNNPtr buildPrimeMeridian(const json &j); CoordinateSystemNNPtr buildCS(const json &j); MeridianNNPtr buildMeridian(const json &j); CoordinateSystemAxisNNPtr buildAxis(const json &j); VerticalCRSNNPtr buildVerticalCRS(const json &j); CRSNNPtr buildCRS(const json &j); CompoundCRSNNPtr buildCompoundCRS(const json &j); BoundCRSNNPtr buildBoundCRS(const json &j); TransformationNNPtr buildTransformation(const json &j); PointMotionOperationNNPtr buildPointMotionOperation(const json &j); ConcatenatedOperationNNPtr buildConcatenatedOperation(const json &j); CoordinateMetadataNNPtr buildCoordinateMetadata(const json &j); void buildGeodeticDatumOrDatumEnsemble(const json &j, GeodeticReferenceFramePtr &datum, DatumEnsemblePtr &datumEnsemble); static util::optional getAnchor(const json &j) { util::optional anchor; if (j.contains("anchor")) { anchor = getString(j, "anchor"); } return anchor; } static util::optional getAnchorEpoch(const json &j) { if (j.contains("anchor_epoch")) { return util::optional(common::Measure( getNumber(j, "anchor_epoch"), common::UnitOfMeasure::YEAR)); } return util::optional(); } EngineeringDatumNNPtr buildEngineeringDatum(const json &j) { return EngineeringDatum::create(buildProperties(j), getAnchor(j)); } ParametricDatumNNPtr buildParametricDatum(const json &j) { return ParametricDatum::create(buildProperties(j), getAnchor(j)); } TemporalDatumNNPtr buildTemporalDatum(const json &j) { auto calendar = getString(j, "calendar"); auto origin = DateTime::create(j.contains("time_origin") ? getString(j, "time_origin") : std::string()); return TemporalDatum::create(buildProperties(j), origin, calendar); } template util::nn> buildCRS(const json &j, DatumBuilderType f) { auto datum = (this->*f)(getObject(j, "datum")); auto cs = buildCS(getObject(j, "coordinate_system")); auto csCast = util::nn_dynamic_pointer_cast(cs); if (!csCast) { throw ParsingException("coordinate_system not of expected type"); } return TargetCRS::create(buildProperties(j), datum, NN_NO_CHECK(csCast)); } template util::nn> buildDerivedCRS(const json &j) { auto baseCRSObj = create(getObject(j, "base_crs")); auto baseCRS = util::nn_dynamic_pointer_cast(baseCRSObj); if (!baseCRS) { throw ParsingException("base_crs not of expected type"); } auto cs = buildCS(getObject(j, "coordinate_system")); auto csCast = util::nn_dynamic_pointer_cast(cs); if (!csCast) { throw ParsingException("coordinate_system not of expected type"); } auto conv = buildConversion(getObject(j, "conversion")); return TargetCRS::create(buildProperties(j), NN_NO_CHECK(baseCRS), conv, NN_NO_CHECK(csCast)); } public: JSONParser() = default; JSONParser &attachDatabaseContext(const DatabaseContextPtr &dbContext) { dbContext_ = dbContext; return *this; } BaseObjectNNPtr create(const json &j); }; // --------------------------------------------------------------------------- std::string JSONParser::getString(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } auto v = j[key]; if (!v.is_string()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a string"); } return v.get(); } // --------------------------------------------------------------------------- json JSONParser::getObject(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } auto v = j[key]; if (!v.is_object()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a object"); } return v.get(); } // --------------------------------------------------------------------------- json JSONParser::getArray(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } auto v = j[key]; if (!v.is_array()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a array"); } return v.get(); } // --------------------------------------------------------------------------- int JSONParser::getInteger(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } auto v = j[key]; if (!v.is_number()) { throw ParsingException(std::string("The value of \"") + key + "\" should be an integer"); } const double dbl = v.get(); if (!(dbl >= std::numeric_limits::min() && dbl <= std::numeric_limits::max() && static_cast(dbl) == dbl)) { throw ParsingException(std::string("The value of \"") + key + "\" should be an integer"); } return static_cast(dbl); } // --------------------------------------------------------------------------- double JSONParser::getNumber(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } auto v = j[key]; if (!v.is_number()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a number"); } return v.get(); } // --------------------------------------------------------------------------- UnitOfMeasure JSONParser::getUnit(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } auto v = j[key]; if (v.is_string()) { auto vStr = v.get(); for (const auto &unit : {UnitOfMeasure::METRE, UnitOfMeasure::DEGREE, UnitOfMeasure::SCALE_UNITY}) { if (vStr == unit.name()) return unit; } throw ParsingException("Unknown unit name: " + vStr); } if (!v.is_object()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a string or an object"); } auto typeStr = getType(v); UnitOfMeasure::Type type = UnitOfMeasure::Type::UNKNOWN; if (typeStr == "LinearUnit") { type = UnitOfMeasure::Type::LINEAR; } else if (typeStr == "AngularUnit") { type = UnitOfMeasure::Type::ANGULAR; } else if (typeStr == "ScaleUnit") { type = UnitOfMeasure::Type::SCALE; } else if (typeStr == "TimeUnit") { type = UnitOfMeasure::Type::TIME; } else if (typeStr == "ParametricUnit") { type = UnitOfMeasure::Type::PARAMETRIC; } else if (typeStr == "Unit") { type = UnitOfMeasure::Type::UNKNOWN; } else { throw ParsingException("Unsupported value of \"type\""); } auto nameStr = getName(v); auto convFactor = getNumber(v, "conversion_factor"); std::string authorityStr; std::string codeStr; if (v.contains("authority") && v.contains("code")) { authorityStr = getString(v, "authority"); auto code = v["code"]; if (code.is_string()) { codeStr = code.get(); } else if (code.is_number_integer()) { codeStr = internal::toString(code.get()); } else { throw ParsingException("Unexpected type for value of \"code\""); } } return UnitOfMeasure(nameStr, convFactor, type, authorityStr, codeStr); } // --------------------------------------------------------------------------- std::string JSONParser::getName(const json &j) { return getString(j, "name"); } // --------------------------------------------------------------------------- std::string JSONParser::getType(const json &j) { return getString(j, "type"); } // --------------------------------------------------------------------------- Length JSONParser::getLength(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } auto v = j[key]; if (v.is_number()) { return Length(v.get(), UnitOfMeasure::METRE); } if (v.is_object()) { return Length(getMeasure(v)); } throw ParsingException(std::string("The value of \"") + key + "\" should be a number or an object"); } // --------------------------------------------------------------------------- Measure JSONParser::getMeasure(const json &j) { return Measure(getNumber(j, "value"), getUnit(j, "unit")); } // --------------------------------------------------------------------------- ObjectDomainPtr JSONParser::buildObjectDomain(const json &j) { optional scope; if (j.contains("scope")) { scope = getString(j, "scope"); } std::string area; if (j.contains("area")) { area = getString(j, "area"); } std::vector geogExtent; if (j.contains("bbox")) { auto bbox = getObject(j, "bbox"); double south = getNumber(bbox, "south_latitude"); double west = getNumber(bbox, "west_longitude"); double north = getNumber(bbox, "north_latitude"); double east = getNumber(bbox, "east_longitude"); geogExtent.emplace_back( GeographicBoundingBox::create(west, south, east, north)); } std::vector verticalExtent; if (j.contains("vertical_extent")) { const auto vertical_extent = getObject(j, "vertical_extent"); const auto min = getNumber(vertical_extent, "minimum"); const auto max = getNumber(vertical_extent, "maximum"); const auto unit = vertical_extent.contains("unit") ? getUnit(vertical_extent, "unit") : UnitOfMeasure::METRE; verticalExtent.emplace_back(VerticalExtent::create( min, max, util::nn_make_shared(unit))); } std::vector temporalExtent; if (j.contains("temporal_extent")) { const auto temporal_extent = getObject(j, "temporal_extent"); const auto start = getString(temporal_extent, "start"); const auto end = getString(temporal_extent, "end"); temporalExtent.emplace_back(TemporalExtent::create(start, end)); } if (scope.has_value() || !area.empty() || !geogExtent.empty() || !verticalExtent.empty() || !temporalExtent.empty()) { util::optional description; if (!area.empty()) description = area; ExtentPtr extent; if (description.has_value() || !geogExtent.empty() || !verticalExtent.empty() || !temporalExtent.empty()) { extent = Extent::create(description, geogExtent, verticalExtent, temporalExtent) .as_nullable(); } return ObjectDomain::create(scope, extent).as_nullable(); } return nullptr; } // --------------------------------------------------------------------------- IdentifierNNPtr JSONParser::buildId(const json &parentJ, const json &j, bool removeInverseOf) { PropertyMap propertiesId; auto codeSpace(getString(j, "authority")); if (removeInverseOf && starts_with(codeSpace, "INVERSE(") && codeSpace.back() == ')') { codeSpace = codeSpace.substr(strlen("INVERSE(")); codeSpace.resize(codeSpace.size() - 1); } std::string version; if (j.contains("version")) { auto versionJ = j["version"]; if (versionJ.is_string()) { version = versionJ.get(); } else if (versionJ.is_number()) { const double dblVersion = versionJ.get(); if (dblVersion >= std::numeric_limits::min() && dblVersion <= std::numeric_limits::max() && static_cast(dblVersion) == dblVersion) { version = internal::toString(static_cast(dblVersion)); } else { version = internal::toString(dblVersion, /*precision=*/15); } } else { throw ParsingException("Unexpected type for value of \"version\""); } } // IAU + 2015 -> IAU_2015 if (dbContext_ && !version.empty()) { std::string codeSpaceOut; if (dbContext_->getVersionedAuthority(codeSpace, version, codeSpaceOut)) { codeSpace = std::move(codeSpaceOut); version.clear(); } } propertiesId.set(metadata::Identifier::CODESPACE_KEY, codeSpace); propertiesId.set(metadata::Identifier::AUTHORITY_KEY, codeSpace); if (!j.contains("code")) { throw ParsingException("Missing \"code\" key"); } std::string code; auto codeJ = j["code"]; if (codeJ.is_string()) { code = codeJ.get(); } else if (codeJ.is_number_integer()) { code = internal::toString(codeJ.get()); } else { throw ParsingException("Unexpected type for value of \"code\""); } // Prior to PROJ 9.5, when synthetizing an ID for a CONVERSION UTM Zone // south, we generated a wrong value. Auto-fix that if (parentJ.contains("type") && getType(parentJ) == "Conversion" && codeSpace == Identifier::EPSG && parentJ.contains("name")) { const auto parentNodeName(getName(parentJ)); if (ci_starts_with(parentNodeName, "UTM Zone ") && parentNodeName.find('S') != std::string::npos) { const int nZone = atoi(parentNodeName.c_str() + strlen("UTM Zone ")); if (nZone >= 1 && nZone <= 60) { code = internal::toString(16100 + nZone); } } } if (!version.empty()) { propertiesId.set(Identifier::VERSION_KEY, version); } if (j.contains("authority_citation")) { propertiesId.set(Identifier::AUTHORITY_KEY, getString(j, "authority_citation")); } if (j.contains("uri")) { propertiesId.set(Identifier::URI_KEY, getString(j, "uri")); } return Identifier::create(code, propertiesId); } // --------------------------------------------------------------------------- PropertyMap JSONParser::buildProperties(const json &j, bool removeInverseOf, bool nameRequired) { PropertyMap map; if (j.contains("name") || nameRequired) { std::string name(getName(j)); if (removeInverseOf && starts_with(name, "Inverse of ")) { name = name.substr(strlen("Inverse of ")); } map.set(IdentifiedObject::NAME_KEY, name); } if (j.contains("ids")) { auto idsJ = getArray(j, "ids"); auto identifiers = ArrayOfBaseObject::create(); for (const auto &idJ : idsJ) { if (!idJ.is_object()) { throw ParsingException( "Unexpected type for value of \"ids\" child"); } identifiers->add(buildId(j, idJ, removeInverseOf)); } map.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers); } else if (j.contains("id")) { auto idJ = getObject(j, "id"); auto identifiers = ArrayOfBaseObject::create(); identifiers->add(buildId(j, idJ, removeInverseOf)); map.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers); } if (j.contains("remarks")) { map.set(IdentifiedObject::REMARKS_KEY, getString(j, "remarks")); } if (j.contains("usages")) { ArrayOfBaseObjectNNPtr array = ArrayOfBaseObject::create(); auto usages = j["usages"]; if (!usages.is_array()) { throw ParsingException("Unexpected type for value of \"usages\""); } for (const auto &usage : usages) { if (!usage.is_object()) { throw ParsingException( "Unexpected type for value of \"usages\" child"); } auto objectDomain = buildObjectDomain(usage); if (!objectDomain) { throw ParsingException("missing children in \"usages\" child"); } array->add(NN_NO_CHECK(objectDomain)); } if (!array->empty()) { map.set(ObjectUsage::OBJECT_DOMAIN_KEY, array); } } else { auto objectDomain = buildObjectDomain(j); if (objectDomain) { map.set(ObjectUsage::OBJECT_DOMAIN_KEY, NN_NO_CHECK(objectDomain)); } } return map; } // --------------------------------------------------------------------------- BaseObjectNNPtr JSONParser::create(const json &j) { if (!j.is_object()) { throw ParsingException("JSON object expected"); } auto type = getString(j, "type"); if (type == "GeographicCRS") { return buildGeographicCRS(j); } if (type == "GeodeticCRS") { return buildGeodeticCRS(j); } if (type == "ProjectedCRS") { return buildProjectedCRS(j); } if (type == "VerticalCRS") { return buildVerticalCRS(j); } if (type == "CompoundCRS") { return buildCompoundCRS(j); } if (type == "BoundCRS") { return buildBoundCRS(j); } if (type == "EngineeringCRS") { return buildCRS(j, &JSONParser::buildEngineeringDatum); } if (type == "ParametricCRS") { return buildCRS(j, &JSONParser::buildParametricDatum); } if (type == "TemporalCRS") { return buildCRS(j, &JSONParser::buildTemporalDatum); } if (type == "DerivedGeodeticCRS") { auto baseCRSObj = create(getObject(j, "base_crs")); auto baseCRS = util::nn_dynamic_pointer_cast(baseCRSObj); if (!baseCRS) { throw ParsingException("base_crs not of expected type"); } auto cs = buildCS(getObject(j, "coordinate_system")); auto conv = buildConversion(getObject(j, "conversion")); auto csCartesian = util::nn_dynamic_pointer_cast(cs); if (csCartesian) return DerivedGeodeticCRS::create(buildProperties(j), NN_NO_CHECK(baseCRS), conv, NN_NO_CHECK(csCartesian)); auto csSpherical = util::nn_dynamic_pointer_cast(cs); if (csSpherical) return DerivedGeodeticCRS::create(buildProperties(j), NN_NO_CHECK(baseCRS), conv, NN_NO_CHECK(csSpherical)); throw ParsingException("coordinate_system not of expected type"); } if (type == "DerivedGeographicCRS") { return buildDerivedCRS(j); } if (type == "DerivedProjectedCRS") { return buildDerivedCRS(j); } if (type == "DerivedVerticalCRS") { return buildDerivedCRS(j); } if (type == "DerivedEngineeringCRS") { return buildDerivedCRS(j); } if (type == "DerivedParametricCRS") { return buildDerivedCRS(j); } if (type == "DerivedTemporalCRS") { return buildDerivedCRS(j); } if (type == "DatumEnsemble") { return buildDatumEnsemble(j); } if (type == "GeodeticReferenceFrame") { return buildGeodeticReferenceFrame(j); } if (type == "VerticalReferenceFrame") { return buildVerticalReferenceFrame(j); } if (type == "DynamicGeodeticReferenceFrame") { return buildDynamicGeodeticReferenceFrame(j); } if (type == "DynamicVerticalReferenceFrame") { return buildDynamicVerticalReferenceFrame(j); } if (type == "EngineeringDatum") { return buildEngineeringDatum(j); } if (type == "ParametricDatum") { return buildParametricDatum(j); } if (type == "TemporalDatum") { return buildTemporalDatum(j); } if (type == "Ellipsoid") { return buildEllipsoid(j); } if (type == "PrimeMeridian") { return buildPrimeMeridian(j); } if (type == "CoordinateSystem") { return buildCS(j); } if (type == "Conversion") { return buildConversion(j); } if (type == "Transformation") { return buildTransformation(j); } if (type == "PointMotionOperation") { return buildPointMotionOperation(j); } if (type == "ConcatenatedOperation") { return buildConcatenatedOperation(j); } if (type == "CoordinateMetadata") { return buildCoordinateMetadata(j); } if (type == "Axis") { return buildAxis(j); } throw ParsingException("Unsupported value of \"type\""); } // --------------------------------------------------------------------------- void JSONParser::buildGeodeticDatumOrDatumEnsemble( const json &j, GeodeticReferenceFramePtr &datum, DatumEnsemblePtr &datumEnsemble) { if (j.contains("datum")) { auto datumJ = getObject(j, "datum"); if (j.contains("deformation_models")) { auto deformationModelsJ = getArray(j, "deformation_models"); if (!deformationModelsJ.empty()) { const auto &deformationModelJ = deformationModelsJ[0]; deformationModelName_ = getString(deformationModelJ, "name"); // We can handle only one for now } } datum = util::nn_dynamic_pointer_cast( create(datumJ)); if (!datum) { throw ParsingException("datum of wrong type"); } deformationModelName_.clear(); } else { datumEnsemble = buildDatumEnsemble(getObject(j, "datum_ensemble")).as_nullable(); } } // --------------------------------------------------------------------------- GeographicCRSNNPtr JSONParser::buildGeographicCRS(const json &j) { GeodeticReferenceFramePtr datum; DatumEnsemblePtr datumEnsemble; buildGeodeticDatumOrDatumEnsemble(j, datum, datumEnsemble); auto csJ = getObject(j, "coordinate_system"); auto ellipsoidalCS = util::nn_dynamic_pointer_cast(buildCS(csJ)); if (!ellipsoidalCS) { throw ParsingException("expected an ellipsoidal CS"); } return GeographicCRS::create(buildProperties(j), datum, datumEnsemble, NN_NO_CHECK(ellipsoidalCS)); } // --------------------------------------------------------------------------- GeodeticCRSNNPtr JSONParser::buildGeodeticCRS(const json &j) { GeodeticReferenceFramePtr datum; DatumEnsemblePtr datumEnsemble; buildGeodeticDatumOrDatumEnsemble(j, datum, datumEnsemble); auto csJ = getObject(j, "coordinate_system"); auto cs = buildCS(csJ); auto props = buildProperties(j); auto cartesianCS = nn_dynamic_pointer_cast(cs); if (cartesianCS) { if (cartesianCS->axisList().size() != 3) { throw ParsingException( "Cartesian CS for a GeodeticCRS should have 3 axis"); } try { return GeodeticCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(cartesianCS)); } catch (const util::Exception &e) { throw ParsingException(std::string("buildGeodeticCRS: ") + e.what()); } } auto sphericalCS = nn_dynamic_pointer_cast(cs); if (sphericalCS) { try { return GeodeticCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(sphericalCS)); } catch (const util::Exception &e) { throw ParsingException(std::string("buildGeodeticCRS: ") + e.what()); } } throw ParsingException("expected a Cartesian or spherical CS"); } // --------------------------------------------------------------------------- ProjectedCRSNNPtr JSONParser::buildProjectedCRS(const json &j) { auto jBaseCRS = getObject(j, "base_crs"); auto jBaseCS = getObject(jBaseCRS, "coordinate_system"); auto baseCS = buildCS(jBaseCS); auto baseCRS = dynamic_cast(baseCS.get()) != nullptr ? util::nn_static_pointer_cast( buildGeographicCRS(jBaseCRS)) : buildGeodeticCRS(jBaseCRS); auto csJ = getObject(j, "coordinate_system"); auto cartesianCS = util::nn_dynamic_pointer_cast(buildCS(csJ)); if (!cartesianCS) { throw ParsingException("expected a Cartesian CS"); } auto conv = buildConversion(getObject(j, "conversion")); return ProjectedCRS::create(buildProperties(j), baseCRS, conv, NN_NO_CHECK(cartesianCS)); } // --------------------------------------------------------------------------- VerticalCRSNNPtr JSONParser::buildVerticalCRS(const json &j) { VerticalReferenceFramePtr datum; DatumEnsemblePtr datumEnsemble; if (j.contains("datum")) { auto datumJ = getObject(j, "datum"); if (j.contains("deformation_models")) { auto deformationModelsJ = getArray(j, "deformation_models"); if (!deformationModelsJ.empty()) { const auto &deformationModelJ = deformationModelsJ[0]; deformationModelName_ = getString(deformationModelJ, "name"); // We can handle only one for now } } datum = util::nn_dynamic_pointer_cast( create(datumJ)); if (!datum) { throw ParsingException("datum of wrong type"); } } else { datumEnsemble = buildDatumEnsemble(getObject(j, "datum_ensemble")).as_nullable(); } auto csJ = getObject(j, "coordinate_system"); auto verticalCS = util::nn_dynamic_pointer_cast(buildCS(csJ)); if (!verticalCS) { throw ParsingException("expected a vertical CS"); } const auto buildGeoidModel = [this, &datum, &datumEnsemble, &verticalCS](const json &geoidModelJ) { auto propsModel = buildProperties(geoidModelJ); const auto dummyCRS = VerticalCRS::create( PropertyMap(), datum, datumEnsemble, NN_NO_CHECK(verticalCS)); CRSPtr interpolationCRS; if (geoidModelJ.contains("interpolation_crs")) { auto interpolationCRSJ = getObject(geoidModelJ, "interpolation_crs"); interpolationCRS = buildCRS(interpolationCRSJ).as_nullable(); } return Transformation::create( propsModel, dummyCRS, GeographicCRS::EPSG_4979, // arbitrarily chosen. Ignored, interpolationCRS, OperationMethod::create(PropertyMap(), std::vector()), {}, {}); }; auto props = buildProperties(j); if (j.contains("geoid_model")) { auto geoidModelJ = getObject(j, "geoid_model"); props.set("GEOID_MODEL", buildGeoidModel(geoidModelJ)); } else if (j.contains("geoid_models")) { auto geoidModelsJ = getArray(j, "geoid_models"); auto geoidModels = ArrayOfBaseObject::create(); for (const auto &geoidModelJ : geoidModelsJ) { geoidModels->add(buildGeoidModel(geoidModelJ)); } props.set("GEOID_MODEL", geoidModels); } return VerticalCRS::create(props, datum, datumEnsemble, NN_NO_CHECK(verticalCS)); } // --------------------------------------------------------------------------- CRSNNPtr JSONParser::buildCRS(const json &j) { auto crs = util::nn_dynamic_pointer_cast(create(j)); if (crs) { return NN_NO_CHECK(crs); } throw ParsingException("Object is not a CRS"); } // --------------------------------------------------------------------------- CompoundCRSNNPtr JSONParser::buildCompoundCRS(const json &j) { auto componentsJ = getArray(j, "components"); std::vector components; for (const auto &componentJ : componentsJ) { if (!componentJ.is_object()) { throw ParsingException( "Unexpected type for a \"components\" child"); } components.push_back(buildCRS(componentJ)); } return CompoundCRS::create(buildProperties(j), components); } // --------------------------------------------------------------------------- ConversionNNPtr JSONParser::buildConversion(const json &j) { auto methodJ = getObject(j, "method"); auto convProps = buildProperties(j); auto methodProps = buildProperties(methodJ); if (!j.contains("parameters")) { return Conversion::create(convProps, methodProps, {}, {}); } auto parametersJ = getArray(j, "parameters"); std::vector parameters; std::vector values; for (const auto ¶m : parametersJ) { if (!param.is_object()) { throw ParsingException( "Unexpected type for a \"parameters\" child"); } parameters.emplace_back( OperationParameter::create(buildProperties(param))); if (isIntegerParameter(parameters.back())) { values.emplace_back( ParameterValue::create(getInteger(param, "value"))); } else { values.emplace_back(ParameterValue::create(getMeasure(param))); } } auto interpolationCRS = dealWithEPSGCodeForInterpolationCRSParameter( dbContext_, parameters, values); std::string convName; std::string methodName; if (convProps.getStringValue(IdentifiedObject::NAME_KEY, convName) && methodProps.getStringValue(IdentifiedObject::NAME_KEY, methodName) && starts_with(convName, "Inverse of ") && starts_with(methodName, "Inverse of ")) { auto invConvProps = buildProperties(j, true); auto invMethodProps = buildProperties(methodJ, true); auto conv = NN_NO_CHECK(util::nn_dynamic_pointer_cast( Conversion::create(invConvProps, invMethodProps, parameters, values) ->inverse())); if (interpolationCRS) conv->setInterpolationCRS(interpolationCRS); return conv; } auto conv = Conversion::create(convProps, methodProps, parameters, values); if (interpolationCRS) conv->setInterpolationCRS(interpolationCRS); return conv; } // --------------------------------------------------------------------------- BoundCRSNNPtr JSONParser::buildBoundCRS(const json &j) { auto sourceCRS = buildCRS(getObject(j, "source_crs")); auto targetCRS = buildCRS(getObject(j, "target_crs")); auto transformationJ = getObject(j, "transformation"); auto methodJ = getObject(transformationJ, "method"); auto parametersJ = getArray(transformationJ, "parameters"); std::vector parameters; std::vector values; for (const auto ¶m : parametersJ) { if (!param.is_object()) { throw ParsingException( "Unexpected type for a \"parameters\" child"); } parameters.emplace_back( OperationParameter::create(buildProperties(param))); if (param.contains("value")) { auto v = param["value"]; if (v.is_string()) { values.emplace_back( ParameterValue::createFilename(v.get())); continue; } } values.emplace_back(ParameterValue::create(getMeasure(param))); } const auto transformation = [&]() { // Unofficial extension / mostly for testing purposes. // Allow to explicitly specify the source_crs of the transformation of // the boundCRS if it is not the source_crs of the BoundCRS. Cf // https://github.com/OSGeo/PROJ/issues/3428 use case if (transformationJ.contains("source_crs")) { auto sourceTransformationCRS = buildCRS(getObject(transformationJ, "source_crs")); auto interpolationCRS = dealWithEPSGCodeForInterpolationCRSParameter( dbContext_, parameters, values); return Transformation::create( buildProperties(transformationJ), sourceTransformationCRS, targetCRS, interpolationCRS, buildProperties(methodJ), parameters, values, std::vector()); } return buildTransformationForBoundCRS( dbContext_, buildProperties(transformationJ), buildProperties(methodJ), sourceCRS, targetCRS, parameters, values); }(); return BoundCRS::create(buildProperties(j, /* removeInverseOf= */ false, /* nameRequired=*/false), sourceCRS, targetCRS, transformation); } // --------------------------------------------------------------------------- TransformationNNPtr JSONParser::buildTransformation(const json &j) { auto sourceCRS = buildCRS(getObject(j, "source_crs")); auto targetCRS = buildCRS(getObject(j, "target_crs")); auto methodJ = getObject(j, "method"); auto parametersJ = getArray(j, "parameters"); std::vector parameters; std::vector values; for (const auto ¶m : parametersJ) { if (!param.is_object()) { throw ParsingException( "Unexpected type for a \"parameters\" child"); } parameters.emplace_back( OperationParameter::create(buildProperties(param))); if (param.contains("value")) { auto v = param["value"]; if (v.is_string()) { values.emplace_back( ParameterValue::createFilename(v.get())); continue; } } values.emplace_back(ParameterValue::create(getMeasure(param))); } CRSPtr interpolationCRS; if (j.contains("interpolation_crs")) { interpolationCRS = buildCRS(getObject(j, "interpolation_crs")).as_nullable(); } std::vector accuracies; if (j.contains("accuracy")) { accuracies.push_back( PositionalAccuracy::create(getString(j, "accuracy"))); } return Transformation::create(buildProperties(j), sourceCRS, targetCRS, interpolationCRS, buildProperties(methodJ), parameters, values, accuracies); } // --------------------------------------------------------------------------- PointMotionOperationNNPtr JSONParser::buildPointMotionOperation(const json &j) { auto sourceCRS = buildCRS(getObject(j, "source_crs")); auto methodJ = getObject(j, "method"); auto parametersJ = getArray(j, "parameters"); std::vector parameters; std::vector values; for (const auto ¶m : parametersJ) { if (!param.is_object()) { throw ParsingException( "Unexpected type for a \"parameters\" child"); } parameters.emplace_back( OperationParameter::create(buildProperties(param))); if (param.contains("value")) { auto v = param["value"]; if (v.is_string()) { values.emplace_back( ParameterValue::createFilename(v.get())); continue; } } values.emplace_back(ParameterValue::create(getMeasure(param))); } std::vector accuracies; if (j.contains("accuracy")) { accuracies.push_back( PositionalAccuracy::create(getString(j, "accuracy"))); } return PointMotionOperation::create(buildProperties(j), sourceCRS, buildProperties(methodJ), parameters, values, accuracies); } // --------------------------------------------------------------------------- ConcatenatedOperationNNPtr JSONParser::buildConcatenatedOperation(const json &j) { auto sourceCRS = buildCRS(getObject(j, "source_crs")); auto targetCRS = buildCRS(getObject(j, "target_crs")); auto stepsJ = getArray(j, "steps"); std::vector operations; for (const auto &stepJ : stepsJ) { if (!stepJ.is_object()) { throw ParsingException("Unexpected type for a \"steps\" child"); } auto op = nn_dynamic_pointer_cast(create(stepJ)); if (!op) { throw ParsingException("Invalid content in a \"steps\" child"); } operations.emplace_back(NN_NO_CHECK(op)); } ConcatenatedOperation::fixSteps(sourceCRS, targetCRS, operations, dbContext_, /* fixDirectionAllowed = */ true); std::vector accuracies; if (j.contains("accuracy")) { accuracies.push_back( PositionalAccuracy::create(getString(j, "accuracy"))); } try { return ConcatenatedOperation::create(buildProperties(j), operations, accuracies); } catch (const InvalidOperation &e) { throw ParsingException( std::string("Cannot build concatenated operation: ") + e.what()); } } // --------------------------------------------------------------------------- CoordinateMetadataNNPtr JSONParser::buildCoordinateMetadata(const json &j) { auto crs = buildCRS(getObject(j, "crs")); if (j.contains("coordinateEpoch")) { auto jCoordinateEpoch = j["coordinateEpoch"]; if (jCoordinateEpoch.is_number()) { return CoordinateMetadata::create( crs, jCoordinateEpoch.get(), dbContext_); } throw ParsingException( "Unexpected type for value of \"coordinateEpoch\""); } return CoordinateMetadata::create(crs); } // --------------------------------------------------------------------------- MeridianNNPtr JSONParser::buildMeridian(const json &j) { if (!j.contains("longitude")) { throw ParsingException("Missing \"longitude\" key"); } auto longitude = j["longitude"]; if (longitude.is_number()) { return Meridian::create( Angle(longitude.get(), UnitOfMeasure::DEGREE)); } else if (longitude.is_object()) { return Meridian::create(Angle(getMeasure(longitude))); } throw ParsingException("Unexpected type for value of \"longitude\""); } // --------------------------------------------------------------------------- CoordinateSystemAxisNNPtr JSONParser::buildAxis(const json &j) { auto dirString = getString(j, "direction"); auto abbreviation = getString(j, "abbreviation"); const UnitOfMeasure unit( j.contains("unit") ? getUnit(j, "unit") : UnitOfMeasure(std::string(), 1.0, UnitOfMeasure::Type::NONE)); auto direction = AxisDirection::valueOf(dirString); if (!direction) { throw ParsingException(concat("unhandled axis direction: ", dirString)); } auto meridian = j.contains("meridian") ? buildMeridian(getObject(j, "meridian")).as_nullable() : nullptr; util::optional minVal; if (j.contains("minimum_value")) { minVal = getNumber(j, "minimum_value"); } util::optional maxVal; if (j.contains("maximum_value")) { maxVal = getNumber(j, "maximum_value"); } util::optional rangeMeaning; if (j.contains("range_meaning")) { const auto val = getString(j, "range_meaning"); const RangeMeaning *meaning = RangeMeaning::valueOf(val); if (meaning == nullptr) { throw ParsingException( concat("buildAxis: invalid range_meaning value: ", val)); } rangeMeaning = util::optional(*meaning); } return CoordinateSystemAxis::create(buildProperties(j), abbreviation, *direction, unit, minVal, maxVal, rangeMeaning, meridian); } // --------------------------------------------------------------------------- CoordinateSystemNNPtr JSONParser::buildCS(const json &j) { auto subtype = getString(j, "subtype"); if (!j.contains("axis")) { throw ParsingException("Missing \"axis\" key"); } auto jAxisList = j["axis"]; if (!jAxisList.is_array()) { throw ParsingException("Unexpected type for value of \"axis\""); } std::vector axisList; for (const auto &axis : jAxisList) { if (!axis.is_object()) { throw ParsingException( "Unexpected type for value of a \"axis\" member"); } axisList.emplace_back(buildAxis(axis)); } const PropertyMap &csMap = emptyPropertyMap; const auto axisCount = axisList.size(); if (subtype == EllipsoidalCS::WKT2_TYPE) { if (axisCount == 2) { return EllipsoidalCS::create(csMap, axisList[0], axisList[1]); } if (axisCount == 3) { return EllipsoidalCS::create(csMap, axisList[0], axisList[1], axisList[2]); } throw ParsingException("Expected 2 or 3 axis"); } if (subtype == CartesianCS::WKT2_TYPE) { if (axisCount == 2) { return CartesianCS::create(csMap, axisList[0], axisList[1]); } if (axisCount == 3) { return CartesianCS::create(csMap, axisList[0], axisList[1], axisList[2]); } throw ParsingException("Expected 2 or 3 axis"); } if (subtype == AffineCS::WKT2_TYPE) { if (axisCount == 2) { return AffineCS::create(csMap, axisList[0], axisList[1]); } if (axisCount == 3) { return AffineCS::create(csMap, axisList[0], axisList[1], axisList[2]); } throw ParsingException("Expected 2 or 3 axis"); } if (subtype == VerticalCS::WKT2_TYPE) { if (axisCount == 1) { return VerticalCS::create(csMap, axisList[0]); } throw ParsingException("Expected 1 axis"); } if (subtype == SphericalCS::WKT2_TYPE) { if (axisCount == 2) { // Extension to ISO19111 to support (planet)-ocentric CS with // geocentric latitude return SphericalCS::create(csMap, axisList[0], axisList[1]); } else if (axisCount == 3) { return SphericalCS::create(csMap, axisList[0], axisList[1], axisList[2]); } throw ParsingException("Expected 2 or 3 axis"); } if (subtype == OrdinalCS::WKT2_TYPE) { return OrdinalCS::create(csMap, axisList); } if (subtype == ParametricCS::WKT2_TYPE) { if (axisCount == 1) { return ParametricCS::create(csMap, axisList[0]); } throw ParsingException("Expected 1 axis"); } if (subtype == DateTimeTemporalCS::WKT2_2019_TYPE) { if (axisCount == 1) { return DateTimeTemporalCS::create(csMap, axisList[0]); } throw ParsingException("Expected 1 axis"); } if (subtype == TemporalCountCS::WKT2_2019_TYPE) { if (axisCount == 1) { return TemporalCountCS::create(csMap, axisList[0]); } throw ParsingException("Expected 1 axis"); } if (subtype == TemporalMeasureCS::WKT2_2019_TYPE) { if (axisCount == 1) { return TemporalMeasureCS::create(csMap, axisList[0]); } throw ParsingException("Expected 1 axis"); } throw ParsingException("Unhandled value for subtype"); } // --------------------------------------------------------------------------- DatumEnsembleNNPtr JSONParser::buildDatumEnsemble(const json &j) { auto membersJ = getArray(j, "members"); std::vector datums; const bool hasEllipsoid(j.contains("ellipsoid")); for (const auto &memberJ : membersJ) { if (!memberJ.is_object()) { throw ParsingException( "Unexpected type for value of a \"members\" member"); } auto datumName(getName(memberJ)); bool datumAdded = false; if (dbContext_ && memberJ.contains("id")) { auto id = getObject(memberJ, "id"); auto authority = getString(id, "authority"); auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), authority); auto code = id["code"]; std::string codeStr; if (code.is_string()) { codeStr = code.get(); } else if (code.is_number_integer()) { codeStr = internal::toString(code.get()); } else { throw ParsingException("Unexpected type for value of \"code\""); } try { datums.push_back(authFactory->createDatum(codeStr)); datumAdded = true; } catch (const std::exception &) { // Silently ignore, as this isn't necessary an error. // If an older PROJ version parses a DatumEnsemble object of // a more recent PROJ version where the datum ensemble got // a new member, it might be unknown from the older PROJ. } } if (dbContext_ && !datumAdded) { auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string()); auto list = authFactory->createObjectsFromName( datumName, {AuthorityFactory::ObjectType::DATUM}, false /* approximate=false*/); if (!list.empty()) { auto datum = util::nn_dynamic_pointer_cast(list.front()); if (!datum) throw ParsingException( "DatumEnsemble member is not a datum"); datums.push_back(NN_NO_CHECK(datum)); datumAdded = true; } } if (!datumAdded) { // Fallback if no db match if (hasEllipsoid) { datums.emplace_back(GeodeticReferenceFrame::create( buildProperties(memberJ), buildEllipsoid(getObject(j, "ellipsoid")), optional(), PrimeMeridian::GREENWICH)); } else { datums.emplace_back( VerticalReferenceFrame::create(buildProperties(memberJ))); } } } return DatumEnsemble::create( buildProperties(j), datums, PositionalAccuracy::create(getString(j, "accuracy"))); } // --------------------------------------------------------------------------- GeodeticReferenceFrameNNPtr JSONParser::buildGeodeticReferenceFrame(const json &j) { auto ellipsoidJ = getObject(j, "ellipsoid"); auto pm = j.contains("prime_meridian") ? buildPrimeMeridian(getObject(j, "prime_meridian")) : PrimeMeridian::GREENWICH; return GeodeticReferenceFrame::create(buildProperties(j), buildEllipsoid(ellipsoidJ), getAnchor(j), getAnchorEpoch(j), pm); } // --------------------------------------------------------------------------- DynamicGeodeticReferenceFrameNNPtr JSONParser::buildDynamicGeodeticReferenceFrame(const json &j) { auto ellipsoidJ = getObject(j, "ellipsoid"); auto pm = j.contains("prime_meridian") ? buildPrimeMeridian(getObject(j, "prime_meridian")) : PrimeMeridian::GREENWICH; Measure frameReferenceEpoch(getNumber(j, "frame_reference_epoch"), UnitOfMeasure::YEAR); optional deformationModel; if (j.contains("deformation_model")) { // Before PROJJSON v0.5 / PROJ 9.1 deformationModel = getString(j, "deformation_model"); } else if (!deformationModelName_.empty()) { deformationModel = deformationModelName_; } return DynamicGeodeticReferenceFrame::create( buildProperties(j), buildEllipsoid(ellipsoidJ), getAnchor(j), pm, frameReferenceEpoch, deformationModel); } // --------------------------------------------------------------------------- VerticalReferenceFrameNNPtr JSONParser::buildVerticalReferenceFrame(const json &j) { return VerticalReferenceFrame::create(buildProperties(j), getAnchor(j), getAnchorEpoch(j)); } // --------------------------------------------------------------------------- DynamicVerticalReferenceFrameNNPtr JSONParser::buildDynamicVerticalReferenceFrame(const json &j) { Measure frameReferenceEpoch(getNumber(j, "frame_reference_epoch"), UnitOfMeasure::YEAR); optional deformationModel; if (j.contains("deformation_model")) { // Before PROJJSON v0.5 / PROJ 9.1 deformationModel = getString(j, "deformation_model"); } else if (!deformationModelName_.empty()) { deformationModel = deformationModelName_; } return DynamicVerticalReferenceFrame::create( buildProperties(j), getAnchor(j), util::optional(), frameReferenceEpoch, deformationModel); } // --------------------------------------------------------------------------- PrimeMeridianNNPtr JSONParser::buildPrimeMeridian(const json &j) { if (!j.contains("longitude")) { throw ParsingException("Missing \"longitude\" key"); } auto longitude = j["longitude"]; if (longitude.is_number()) { return PrimeMeridian::create( buildProperties(j), Angle(longitude.get(), UnitOfMeasure::DEGREE)); } else if (longitude.is_object()) { return PrimeMeridian::create(buildProperties(j), Angle(getMeasure(longitude))); } throw ParsingException("Unexpected type for value of \"longitude\""); } // --------------------------------------------------------------------------- EllipsoidNNPtr JSONParser::buildEllipsoid(const json &j) { if (j.contains("semi_major_axis")) { auto semiMajorAxis = getLength(j, "semi_major_axis"); const auto ellpsProperties = buildProperties(j); std::string ellpsName; ellpsProperties.getStringValue(IdentifiedObject::NAME_KEY, ellpsName); const auto celestialBody(Ellipsoid::guessBodyName( dbContext_, semiMajorAxis.getSIValue(), ellpsName)); if (j.contains("semi_minor_axis")) { return Ellipsoid::createTwoAxis(ellpsProperties, semiMajorAxis, getLength(j, "semi_minor_axis"), celestialBody); } else if (j.contains("inverse_flattening")) { return Ellipsoid::createFlattenedSphere( ellpsProperties, semiMajorAxis, Scale(getNumber(j, "inverse_flattening")), celestialBody); } else { throw ParsingException( "Missing semi_minor_axis or inverse_flattening"); } } else if (j.contains("radius")) { auto radius = getLength(j, "radius"); const auto celestialBody( Ellipsoid::guessBodyName(dbContext_, radius.getSIValue())); return Ellipsoid::createSphere(buildProperties(j), radius, celestialBody); } throw ParsingException("Missing semi_major_axis or radius"); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // import a CRS encoded as OGC Best Practice document 11-135. static const char *const crsURLPrefixes[] = { "http://opengis.net/def/crs", "https://opengis.net/def/crs", "http://www.opengis.net/def/crs", "https://www.opengis.net/def/crs", "www.opengis.net/def/crs", }; static bool isCRSURL(const std::string &text) { for (const auto crsURLPrefix : crsURLPrefixes) { if (starts_with(text, crsURLPrefix)) { return true; } } return false; } static CRSNNPtr importFromCRSURL(const std::string &text, const DatabaseContextNNPtr &dbContext) { // e.g http://www.opengis.net/def/crs/EPSG/0/4326 std::vector parts; for (const auto crsURLPrefix : crsURLPrefixes) { if (starts_with(text, crsURLPrefix)) { parts = split(text.substr(strlen(crsURLPrefix)), '/'); break; } } // e.g // "http://www.opengis.net/def/crs-compound?1=http://www.opengis.net/def/crs/EPSG/0/4326&2=http://www.opengis.net/def/crs/EPSG/0/3855" if (!parts.empty() && starts_with(parts[0], "-compound?")) { parts = split(text.substr(text.find('?') + 1), '&'); std::map mapParts; for (const auto &part : parts) { const auto queryParam = split(part, '='); if (queryParam.size() != 2) { throw ParsingException("invalid OGC CRS URL"); } try { mapParts[std::stoi(queryParam[0])] = queryParam[1]; } catch (const std::exception &) { throw ParsingException("invalid OGC CRS URL"); } } std::vector components; std::string name; for (size_t i = 1; i <= mapParts.size(); ++i) { const auto iter = mapParts.find(static_cast(i)); if (iter == mapParts.end()) { throw ParsingException("invalid OGC CRS URL"); } components.emplace_back(importFromCRSURL(iter->second, dbContext)); if (!name.empty()) { name += " + "; } name += components.back()->nameStr(); } return CompoundCRS::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, name), components); } if (parts.size() < 4) { throw ParsingException("invalid OGC CRS URL"); } const auto &auth_name = parts[1]; const auto &code = parts[3]; try { auto factoryCRS = AuthorityFactory::create(dbContext, auth_name); return factoryCRS->createCoordinateReferenceSystem(code, true); } catch (...) { const auto &version = parts[2]; if (version.empty() || version == "0") { const auto authoritiesFromAuthName = dbContext->getVersionedAuthoritiesFromName(auth_name); for (const auto &authNameVersioned : authoritiesFromAuthName) { try { auto factoryCRS = AuthorityFactory::create(dbContext, authNameVersioned); return factoryCRS->createCoordinateReferenceSystem(code, true); } catch (...) { } } throw; } std::string authNameWithVersion; if (!dbContext->getVersionedAuthority(auth_name, version, authNameWithVersion)) { throw; } auto factoryCRS = AuthorityFactory::create(dbContext, authNameWithVersion); return factoryCRS->createCoordinateReferenceSystem(code, true); } } // --------------------------------------------------------------------------- /* Import a CRS encoded as WMSAUTO string. * * Note that the WMS 1.3 specification does not include the * units code, while apparently earlier specs do. We try to * guess around this. * * (code derived from GDAL's importFromWMSAUTO()) */ static CRSNNPtr importFromWMSAUTO(const std::string &text) { int nUnitsId = 9001; double dfRefLong; double dfRefLat = 0.0; assert(ci_starts_with(text, "AUTO:")); const auto parts = split(text.substr(strlen("AUTO:")), ','); try { constexpr int AUTO_MOLLWEIDE = 42005; if (parts.size() == 4) { nUnitsId = std::stoi(parts[1]); dfRefLong = c_locale_stod(parts[2]); dfRefLat = c_locale_stod(parts[3]); } else if (parts.size() == 3 && std::stoi(parts[0]) == AUTO_MOLLWEIDE) { nUnitsId = std::stoi(parts[1]); dfRefLong = c_locale_stod(parts[2]); } else if (parts.size() == 3) { dfRefLong = c_locale_stod(parts[1]); dfRefLat = c_locale_stod(parts[2]); } else if (parts.size() == 2 && std::stoi(parts[0]) == AUTO_MOLLWEIDE) { dfRefLong = c_locale_stod(parts[1]); } else { throw ParsingException("invalid WMS AUTO CRS definition"); } const auto getConversion = [dfRefLong, dfRefLat, &parts]() { const int nProjId = std::stoi(parts[0]); switch (nProjId) { case 42001: // Auto UTM if (!(dfRefLong >= -180 && dfRefLong < 180)) { throw ParsingException("invalid WMS AUTO CRS definition: " "invalid longitude"); } return Conversion::createUTM( util::PropertyMap(), static_cast(floor((dfRefLong + 180.0) / 6.0)) + 1, dfRefLat >= 0.0); case 42002: // Auto TM (strangely very UTM-like). return Conversion::createTransverseMercator( util::PropertyMap(), common::Angle(0), common::Angle(dfRefLong), common::Scale(0.9996), common::Length(500000), common::Length((dfRefLat >= 0.0) ? 0.0 : 10000000.0)); case 42003: // Auto Orthographic. return Conversion::createOrthographic( util::PropertyMap(), common::Angle(dfRefLat), common::Angle(dfRefLong), common::Length(0), common::Length(0)); case 42004: // Auto Equirectangular return Conversion::createEquidistantCylindrical( util::PropertyMap(), common::Angle(dfRefLat), common::Angle(dfRefLong), common::Length(0), common::Length(0)); case 42005: // MSVC 2015 thinks that AUTO_MOLLWEIDE is not constant return Conversion::createMollweide( util::PropertyMap(), common::Angle(dfRefLong), common::Length(0), common::Length(0)); default: throw ParsingException("invalid WMS AUTO CRS definition: " "unsupported projection id"); } }; const auto getUnits = [nUnitsId]() -> const UnitOfMeasure & { switch (nUnitsId) { case 9001: return UnitOfMeasure::METRE; case 9002: return UnitOfMeasure::FOOT; case 9003: return UnitOfMeasure::US_FOOT; default: throw ParsingException("invalid WMS AUTO CRS definition: " "unsupported units code"); } }; return crs::ProjectedCRS::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), crs::GeographicCRS::EPSG_4326, getConversion(), cs::CartesianCS::createEastingNorthing(getUnits())); } catch (const std::exception &) { throw ParsingException("invalid WMS AUTO CRS definition"); } } // --------------------------------------------------------------------------- static BaseObjectNNPtr createFromURNPart(const DatabaseContextPtr &dbContext, const std::string &type, const std::string &authName, const std::string &version, const std::string &code) { if (!dbContext) { throw ParsingException("no database context specified"); } try { auto factory = AuthorityFactory::create(NN_NO_CHECK(dbContext), authName); if (type == "crs") { return factory->createCoordinateReferenceSystem(code); } if (type == "coordinateOperation") { return factory->createCoordinateOperation(code, true); } if (type == "datum") { return factory->createDatum(code); } if (type == "ensemble") { return factory->createDatumEnsemble(code); } if (type == "ellipsoid") { return factory->createEllipsoid(code); } if (type == "meridian") { return factory->createPrimeMeridian(code); } // Extension of OGC URN syntax to CoordinateMetadata if (type == "coordinateMetadata") { return factory->createCoordinateMetadata(code); } throw ParsingException(concat("unhandled object type: ", type)); } catch (...) { if (version.empty()) { const auto authoritiesFromAuthName = dbContext->getVersionedAuthoritiesFromName(authName); for (const auto &authNameVersioned : authoritiesFromAuthName) { try { return createFromURNPart(dbContext, type, authNameVersioned, std::string(), code); } catch (...) { } } throw; } std::string authNameWithVersion; if (!dbContext->getVersionedAuthority(authName, version, authNameWithVersion)) { throw; } return createFromURNPart(dbContext, type, authNameWithVersion, std::string(), code); } } // --------------------------------------------------------------------------- static BaseObjectNNPtr createFromUserInput(const std::string &text, const DatabaseContextPtr &dbContext, bool usePROJ4InitRules, PJ_CONTEXT *ctx, bool ignoreCoordinateEpoch) { std::size_t idxFirstCharNotSpace = text.find_first_not_of(" \t\r\n"); if (idxFirstCharNotSpace > 0 && idxFirstCharNotSpace != std::string::npos) { return createFromUserInput(text.substr(idxFirstCharNotSpace), dbContext, usePROJ4InitRules, ctx, ignoreCoordinateEpoch); } // Parse strings like "ITRF2014 @ 2025.0" const auto posAt = text.find('@'); if (!ignoreCoordinateEpoch && posAt != std::string::npos) { // Try first as if belonged to the name try { return createFromUserInput(text, dbContext, usePROJ4InitRules, ctx, /* ignoreCoordinateEpoch = */ true); } catch (...) { } std::string leftPart = text.substr(0, posAt); while (!leftPart.empty() && leftPart.back() == ' ') leftPart.resize(leftPart.size() - 1); const auto nonSpacePos = text.find_first_not_of(' ', posAt + 1); if (nonSpacePos != std::string::npos) { auto obj = createFromUserInput(leftPart, dbContext, usePROJ4InitRules, ctx, /* ignoreCoordinateEpoch = */ true); auto crs = nn_dynamic_pointer_cast(obj); if (crs) { double epoch; try { epoch = c_locale_stod(text.substr(nonSpacePos)); } catch (const std::exception &) { throw ParsingException("non-numeric value after @"); } try { return CoordinateMetadata::create(NN_NO_CHECK(crs), epoch, dbContext); } catch (const std::exception &e) { throw ParsingException( std::string( "CoordinateMetadata::create() failed with: ") + e.what()); } } } } if (!text.empty() && text[0] == '{') { json j; try { j = json::parse(text); } catch (const std::exception &e) { throw ParsingException(e.what()); } return JSONParser().attachDatabaseContext(dbContext).create(j); } if (!ci_starts_with(text, "step proj=") && !ci_starts_with(text, "step +proj=")) { for (const auto &wktConstant : WKTConstants::constants()) { if (ci_starts_with(text, wktConstant)) { for (auto wkt = text.c_str() + wktConstant.size(); *wkt != '\0'; ++wkt) { if (isspace(static_cast(*wkt))) continue; if (*wkt == '[') { return WKTParser() .attachDatabaseContext(dbContext) .setStrict(false) .createFromWKT(text); } break; } } } } const char *textWithoutPlusPrefix = text.c_str(); if (textWithoutPlusPrefix[0] == '+') textWithoutPlusPrefix++; if (strncmp(textWithoutPlusPrefix, "proj=", strlen("proj=")) == 0 || text.find(" +proj=") != std::string::npos || text.find(" proj=") != std::string::npos || strncmp(textWithoutPlusPrefix, "init=", strlen("init=")) == 0 || text.find(" +init=") != std::string::npos || text.find(" init=") != std::string::npos || strncmp(textWithoutPlusPrefix, "title=", strlen("title=")) == 0) { return PROJStringParser() .attachDatabaseContext(dbContext) .attachContext(ctx) .setUsePROJ4InitRules(ctx != nullptr ? (proj_context_get_use_proj4_init_rules( ctx, false) == TRUE) : usePROJ4InitRules) .createFromPROJString(text); } if (isCRSURL(text) && dbContext) { return importFromCRSURL(text, NN_NO_CHECK(dbContext)); } if (ci_starts_with(text, "AUTO:")) { return importFromWMSAUTO(text); } auto tokens = split(text, ':'); if (tokens.size() == 2) { if (!dbContext) { throw ParsingException("no database context specified"); } DatabaseContextNNPtr dbContextNNPtr(NN_NO_CHECK(dbContext)); const auto &authName = tokens[0]; const auto &code = tokens[1]; auto factory = AuthorityFactory::create(dbContextNNPtr, authName); try { return factory->createCoordinateReferenceSystem(code); } catch (...) { // Convenience for well-known misused code // See https://github.com/OSGeo/PROJ/issues/1730 if (ci_equal(authName, "EPSG") && code == "102100") { factory = AuthorityFactory::create(dbContextNNPtr, "ESRI"); return factory->createCoordinateReferenceSystem(code); } const auto authoritiesFromAuthName = dbContextNNPtr->getVersionedAuthoritiesFromName(authName); for (const auto &authNameVersioned : authoritiesFromAuthName) { factory = AuthorityFactory::create(dbContextNNPtr, authNameVersioned); try { return factory->createCoordinateReferenceSystem(code); } catch (...) { } } const auto allAuthorities = dbContextNNPtr->getAuthorities(); for (const auto &authCandidate : allAuthorities) { if (ci_equal(authCandidate, authName)) { factory = AuthorityFactory::create(dbContextNNPtr, authCandidate); try { return factory->createCoordinateReferenceSystem(code); } catch (...) { // EPSG:4326+3855 auto tokensCode = split(code, '+'); if (tokensCode.size() == 2) { auto crs1(factory->createCoordinateReferenceSystem( tokensCode[0], false)); auto crs2(factory->createCoordinateReferenceSystem( tokensCode[1], false)); return CompoundCRS::createLax( util::PropertyMap().set( IdentifiedObject::NAME_KEY, crs1->nameStr() + " + " + crs2->nameStr()), {crs1, crs2}, dbContext); } throw; } } } throw; } } else if (tokens.size() == 3) { // ESRI:103668+EPSG:5703 ... compound auto tokensCenter = split(tokens[1], '+'); if (tokensCenter.size() == 2) { if (!dbContext) { throw ParsingException("no database context specified"); } DatabaseContextNNPtr dbContextNNPtr(NN_NO_CHECK(dbContext)); const auto &authName1 = tokens[0]; const auto &code1 = tokensCenter[0]; const auto &authName2 = tokensCenter[1]; const auto &code2 = tokens[2]; auto factory1 = AuthorityFactory::create(dbContextNNPtr, authName1); auto crs1 = factory1->createCoordinateReferenceSystem(code1, false); auto factory2 = AuthorityFactory::create(dbContextNNPtr, authName2); auto crs2 = factory2->createCoordinateReferenceSystem(code2, false); return CompoundCRS::createLax( util::PropertyMap().set(IdentifiedObject::NAME_KEY, crs1->nameStr() + " + " + crs2->nameStr()), {crs1, crs2}, dbContext); } } if (starts_with(text, "urn:ogc:def:crs,")) { if (!dbContext) { throw ParsingException("no database context specified"); } auto tokensComma = split(text, ','); if (tokensComma.size() == 4 && starts_with(tokensComma[1], "crs:") && starts_with(tokensComma[2], "cs:") && starts_with(tokensComma[3], "coordinateOperation:")) { // OGC 07-092r2: para 7.5.4 // URN combined references for projected or derived CRSs const auto &crsPart = tokensComma[1]; const auto tokensCRS = split(crsPart, ':'); if (tokensCRS.size() != 4) { throw ParsingException( concat("invalid crs component: ", crsPart)); } auto factoryCRS = AuthorityFactory::create(NN_NO_CHECK(dbContext), tokensCRS[1]); auto baseCRS = factoryCRS->createCoordinateReferenceSystem(tokensCRS[3], true); const auto &csPart = tokensComma[2]; auto tokensCS = split(csPart, ':'); if (tokensCS.size() != 4) { throw ParsingException( concat("invalid cs component: ", csPart)); } auto factoryCS = AuthorityFactory::create(NN_NO_CHECK(dbContext), tokensCS[1]); auto cs = factoryCS->createCoordinateSystem(tokensCS[3]); const auto &opPart = tokensComma[3]; auto tokensOp = split(opPart, ':'); if (tokensOp.size() != 4) { throw ParsingException( concat("invalid coordinateOperation component: ", opPart)); } auto factoryOp = AuthorityFactory::create(NN_NO_CHECK(dbContext), tokensOp[1]); auto op = factoryOp->createCoordinateOperation(tokensOp[3], true); const auto &baseName = baseCRS->nameStr(); std::string name(baseName); auto geogCRS = util::nn_dynamic_pointer_cast(baseCRS); if (geogCRS && geogCRS->coordinateSystem()->axisList().size() == 3 && baseName.find("3D") == std::string::npos) { name += " (3D)"; } name += " / "; name += op->nameStr(); auto props = util::PropertyMap().set(IdentifiedObject::NAME_KEY, name); if (auto conv = util::nn_dynamic_pointer_cast(op)) { auto convNN = NN_NO_CHECK(conv); if (geogCRS != nullptr) { auto geogCRSNN = NN_NO_CHECK(geogCRS); if (CartesianCSPtr ccs = util::nn_dynamic_pointer_cast(cs)) { return ProjectedCRS::create(props, geogCRSNN, convNN, NN_NO_CHECK(ccs)); } if (EllipsoidalCSPtr ecs = util::nn_dynamic_pointer_cast(cs)) { return DerivedGeographicCRS::create( props, geogCRSNN, convNN, NN_NO_CHECK(ecs)); } } else if (dynamic_cast(baseCRS.get()) && dynamic_cast(cs.get())) { return DerivedGeodeticCRS::create( props, NN_NO_CHECK(util::nn_dynamic_pointer_cast( baseCRS)), convNN, NN_NO_CHECK( util::nn_dynamic_pointer_cast(cs))); } else if (auto pcrs = util::nn_dynamic_pointer_cast( baseCRS)) { return DerivedProjectedCRS::create(props, NN_NO_CHECK(pcrs), convNN, cs); } else if (auto vertBaseCRS = util::nn_dynamic_pointer_cast( baseCRS)) { if (auto vertCS = util::nn_dynamic_pointer_cast(cs)) { const int methodCode = convNN->method()->getEPSGCode(); std::string newName(baseName); std::string unitNameSuffix; for (const char *suffix : {" (ft)", " (ftUS)"}) { if (ends_with(newName, suffix)) { unitNameSuffix = suffix; newName.resize(newName.size() - strlen(suffix)); break; } } bool newNameOk = false; if (methodCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR || methodCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT) { const auto &unitName = vertCS->axisList()[0]->unit().name(); if (unitName == UnitOfMeasure::METRE.name()) { newNameOk = true; } else if (unitName == UnitOfMeasure::FOOT.name()) { newName += " (ft)"; newNameOk = true; } else if (unitName == UnitOfMeasure::US_FOOT.name()) { newName += " (ftUS)"; newNameOk = true; } } else if (methodCode == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) { if (ends_with(newName, " height")) { newName.resize(newName.size() - strlen(" height")); newName += " depth"; newName += unitNameSuffix; newNameOk = true; } else if (ends_with(newName, " depth")) { newName.resize(newName.size() - strlen(" depth")); newName += " height"; newName += unitNameSuffix; newNameOk = true; } } if (newNameOk) { props.set(IdentifiedObject::NAME_KEY, newName); } return DerivedVerticalCRS::create( props, NN_NO_CHECK(vertBaseCRS), convNN, NN_NO_CHECK(vertCS)); } } } throw ParsingException("unsupported combination of baseCRS, CS " "and coordinateOperation for a " "DerivedCRS"); } // OGC 07-092r2: para 7.5.2 // URN combined references for compound coordinate reference systems std::vector components; std::string name; for (size_t i = 1; i < tokensComma.size(); i++) { tokens = split(tokensComma[i], ':'); if (tokens.size() != 4) { throw ParsingException( concat("invalid crs component: ", tokensComma[i])); } const auto &type = tokens[0]; auto factory = AuthorityFactory::create(NN_NO_CHECK(dbContext), tokens[1]); const auto &code = tokens[3]; if (type == "crs") { auto crs(factory->createCoordinateReferenceSystem(code, false)); components.emplace_back(crs); if (!name.empty()) { name += " + "; } name += crs->nameStr(); } else { throw ParsingException( concat("unexpected object type: ", type)); } } return CompoundCRS::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, name), components); } // OGC 07-092r2: para 7.5.3 // 7.5.3 URN combined references for concatenated operations if (starts_with(text, "urn:ogc:def:coordinateOperation,")) { if (!dbContext) { throw ParsingException("no database context specified"); } auto tokensComma = split(text, ','); std::vector components; for (size_t i = 1; i < tokensComma.size(); i++) { tokens = split(tokensComma[i], ':'); if (tokens.size() != 4) { throw ParsingException(concat( "invalid coordinateOperation component: ", tokensComma[i])); } const auto &type = tokens[0]; auto factory = AuthorityFactory::create(NN_NO_CHECK(dbContext), tokens[1]); const auto &code = tokens[3]; if (type == "coordinateOperation") { auto op(factory->createCoordinateOperation(code, false)); components.emplace_back(op); } else { throw ParsingException( concat("unexpected object type: ", type)); } } return ConcatenatedOperation::createComputeMetadata(components, true); } // urn:ogc:def:crs:EPSG::4326 if (tokens.size() == 7 && tolower(tokens[0]) == "urn") { const std::string type(tokens[3] == "CRS" ? "crs" : tokens[3]); const auto &authName = tokens[4]; const auto &version = tokens[5]; const auto &code = tokens[6]; return createFromURNPart(dbContext, type, authName, version, code); } // urn:ogc:def:crs:OGC::AUTO42001:-117:33 if (tokens.size() > 7 && tokens[0] == "urn" && tokens[4] == "OGC" && ci_starts_with(tokens[6], "AUTO")) { const auto textAUTO = text.substr(text.find(":AUTO") + 5); return importFromWMSAUTO("AUTO:" + replaceAll(textAUTO, ":", ",")); } // Legacy urn:opengis:crs:EPSG:0:4326 (note the missing def: compared to // above) if (tokens.size() == 6 && tokens[0] == "urn" && tokens[2] != "def") { const auto &type = tokens[2]; const auto &authName = tokens[3]; const auto &version = tokens[4]; const auto &code = tokens[5]; return createFromURNPart(dbContext, type, authName, version, code); } // Legacy urn:x-ogc:def:crs:EPSG:4326 (note the missing version) if (tokens.size() == 6 && tokens[0] == "urn") { const auto &type = tokens[3]; const auto &authName = tokens[4]; const auto &code = tokens[5]; return createFromURNPart(dbContext, type, authName, std::string(), code); } if (dbContext) { auto factory = AuthorityFactory::create(NN_NO_CHECK(dbContext), std::string()); const auto searchObject = [&factory]( const std::string &objectName, bool approximateMatch, const std::vector &objectTypes) -> IdentifiedObjectPtr { constexpr size_t limitResultCount = 10; auto res = factory->createObjectsFromName( objectName, objectTypes, approximateMatch, limitResultCount); if (res.size() == 1) { return res.front().as_nullable(); } if (res.size() > 1) { if (objectTypes.size() == 1 && objectTypes[0] == AuthorityFactory::ObjectType::CRS) { for (size_t ndim = 2; ndim <= 3; ndim++) { for (const auto &obj : res) { auto crs = dynamic_cast(obj.get()); if (crs && crs->coordinateSystem()->axisList().size() == ndim) { return obj.as_nullable(); } } } } // If there's exactly only one object whose name is equivalent // to the user input, return it. for (int pass = 0; pass <= 1; ++pass) { IdentifiedObjectPtr identifiedObj; for (const auto &obj : res) { if (Identifier::isEquivalentName( obj->nameStr().c_str(), objectName.c_str(), /* biggerDifferencesAllowed = */ pass == 1)) { if (identifiedObj == nullptr) { identifiedObj = obj.as_nullable(); } else { identifiedObj = nullptr; break; } } } if (identifiedObj) { return identifiedObj; } } std::string msg("several objects matching this name: "); bool first = true; for (const auto &obj : res) { if (msg.size() > 200) { msg += ", ..."; break; } if (!first) { msg += ", "; } first = false; msg += obj->nameStr(); } throw ParsingException(msg); } return nullptr; }; const auto searchCRS = [&searchObject](const std::string &objectName) { const auto objectTypes = std::vector{ AuthorityFactory::ObjectType::CRS}; { constexpr bool approximateMatch = false; auto ret = searchObject(objectName, approximateMatch, objectTypes); if (ret) return ret; } constexpr bool approximateMatch = true; return searchObject(objectName, approximateMatch, objectTypes); }; // strings like "WGS 84 + EGM96 height" CompoundCRSPtr compoundCRS; try { const auto tokensCompound = split(text, " + "); if (tokensCompound.size() == 2) { auto obj1 = searchCRS(tokensCompound[0]); auto obj2 = searchCRS(tokensCompound[1]); auto crs1 = std::dynamic_pointer_cast(obj1); auto crs2 = std::dynamic_pointer_cast(obj2); if (crs1 && crs2) { compoundCRS = CompoundCRS::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, crs1->nameStr() + " + " + crs2->nameStr()), {NN_NO_CHECK(crs1), NN_NO_CHECK(crs2)}) .as_nullable(); } } } catch (const std::exception &) { } // First pass: exact match on CRS objects // Second pass: exact match on other objects // Third pass: approximate match on CRS objects // Fourth pass: approximate match on other objects // But only allow approximate matching if the size of the text is // large enough (>= 5), otherwise we get a lot of false positives: // "foo" -> "Amersfoort", "bar" -> "Barbados 1938" // Also only accept approximate matching if the ratio between the // input and match size is not too small, so that "omerc" doesn't match // with "WGS 84 / Pseudo-Mercator" const int maxNumberPasses = text.size() <= 4 ? 2 : 4; for (int pass = 0; pass < maxNumberPasses; ++pass) { const bool approximateMatch = (pass >= 2); auto ret = searchObject( text, approximateMatch, (pass == 0 || pass == 2) ? std::vector< AuthorityFactory::ObjectType>{AuthorityFactory:: ObjectType::CRS} : std::vector{ AuthorityFactory::ObjectType::ELLIPSOID, AuthorityFactory::ObjectType::DATUM, AuthorityFactory::ObjectType::DATUM_ENSEMBLE, AuthorityFactory::ObjectType::COORDINATE_OPERATION}); if (ret) { if (!approximateMatch || ret->nameStr().size() < 2 * text.size()) return NN_NO_CHECK(ret); } if (compoundCRS) { if (!approximateMatch || compoundCRS->nameStr().size() < 2 * text.size()) return NN_NO_CHECK(compoundCRS); } } } throw ParsingException("unrecognized format / unknown name"); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a sub-class of BaseObject from a user specified text. * * The text can be a: *
    *
  • WKT string
  • *
  • PROJ string
  • *
  • database code, prefixed by its authority. e.g. "EPSG:4326"
  • *
  • OGC URN. e.g. "urn:ogc:def:crs:EPSG::4326", * "urn:ogc:def:coordinateOperation:EPSG::1671", * "urn:ogc:def:ellipsoid:EPSG::7001" * or "urn:ogc:def:datum:EPSG::6326"
  • *
  • OGC URN combining references for compound coordinate reference systems * e.g. "urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717" * We also accept a custom abbreviated syntax EPSG:2393+5717 * or ESRI:103668+EPSG:5703 *
  • *
  • OGC URN combining references for references for projected or derived * CRSs * e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)" * "urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031" *
  • *
  • Extension of OGC URN for CoordinateMetadata. * e.g. * "urn:ogc:def:coordinateMetadata:NRCAN::NAD83_CSRS_1997_MTM11_HT2_1997"
  • *
  • OGC URN combining references for concatenated operations * e.g. * "urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618"
  • *
  • OGC URL for a single CRS. e.g. * "http://www.opengis.net/def/crs/EPSG/0/4326"
  • *
  • OGC URL for a compound * CRS. e.g * "http://www.opengis.net/def/crs-compound?1=http://www.opengis.net/def/crs/EPSG/0/4326&2=http://www.opengis.net/def/crs/EPSG/0/3855"
  • *
  • an Object name. e.g "WGS 84", "WGS 84 / UTM zone 31N". In that case as * uniqueness is not guaranteed, the function may apply heuristics to * determine the appropriate best match.
  • *
  • a CRS name and a coordinate epoch, separated with '@'. For example * "ITRF2014@2025.0". (added in PROJ 9.2)
  • *
  • a compound CRS made from two object names separated with " + ". * e.g. "WGS 84 + EGM96 height"
  • *
  • PROJJSON string
  • *
* * @param text One of the above mentioned text format * @param dbContext Database context, or nullptr (in which case database * lookups will not work) * @param usePROJ4InitRules When set to true, * init=epsg:XXXX syntax will be allowed and will be interpreted according to * PROJ.4 and PROJ.5 rules, that is geodeticCRS will have longitude, latitude * order and will expect/output coordinates in radians. ProjectedCRS will have * easting, northing axis order (except the ones with Transverse Mercator South * Orientated projection). In that mode, the epsg:XXXX syntax will be also * interpreted the same way. * @throw ParsingException if the string cannot be parsed. */ BaseObjectNNPtr createFromUserInput(const std::string &text, const DatabaseContextPtr &dbContext, bool usePROJ4InitRules) { return createFromUserInput(text, dbContext, usePROJ4InitRules, nullptr, /* ignoreCoordinateEpoch = */ false); } // --------------------------------------------------------------------------- /** \brief Instantiate a sub-class of BaseObject from a user specified text. * * The text can be a: *
    *
  • WKT string
  • *
  • PROJ string
  • *
  • database code, prefixed by its authority. e.g. "EPSG:4326"
  • *
  • OGC URN. e.g. "urn:ogc:def:crs:EPSG::4326", * "urn:ogc:def:coordinateOperation:EPSG::1671", * "urn:ogc:def:ellipsoid:EPSG::7001" * or "urn:ogc:def:datum:EPSG::6326"
  • *
  • OGC URN combining references for compound coordinate reference systems * e.g. "urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717" * We also accept a custom abbreviated syntax EPSG:2393+5717 *
  • *
  • OGC URN combining references for references for projected or derived * CRSs * e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)" * "urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031" *
  • *
  • Extension of OGC URN for CoordinateMetadata. * e.g. * "urn:ogc:def:coordinateMetadata:NRCAN::NAD83_CSRS_1997_MTM11_HT2_1997"
  • *
  • OGC URN combining references for concatenated operations * e.g. * "urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618"
  • *
  • an Object name. e.g "WGS 84", "WGS 84 / UTM zone 31N". In that case as * uniqueness is not guaranteed, the function may apply heuristics to * determine the appropriate best match.
  • *
  • a compound CRS made from two object names separated with " + ". * e.g. "WGS 84 + EGM96 height"
  • *
  • PROJJSON string
  • *
* * @param text One of the above mentioned text format * @param ctx PROJ context * @throw ParsingException if the string cannot be parsed. */ BaseObjectNNPtr createFromUserInput(const std::string &text, PJ_CONTEXT *ctx) { DatabaseContextPtr dbContext; try { if (ctx != nullptr) { // Only connect to proj.db if needed if (text.find("proj=") == std::string::npos || text.find("init=") != std::string::npos) { dbContext = ctx->get_cpp_context()->getDatabaseContext().as_nullable(); } } } catch (const std::exception &) { } return createFromUserInput(text, dbContext, false, ctx, /* ignoreCoordinateEpoch = */ false); } // --------------------------------------------------------------------------- /** \brief Instantiate a sub-class of BaseObject from a WKT string. * * By default, validation is strict (to the extent of the checks that are * actually implemented. Currently only WKT1 strict grammar is checked), and * any issue detected will cause an exception to be thrown, unless * setStrict(false) is called priorly. * * In non-strict mode, non-fatal issues will be recovered and simply listed * in warningList(). This does not prevent more severe errors to cause an * exception to be thrown. * * @throw ParsingException if the string cannot be parsed. */ BaseObjectNNPtr WKTParser::createFromWKT(const std::string &wkt) { const auto dialect = guessDialect(wkt); d->maybeEsriStyle_ = (dialect == WKTGuessedDialect::WKT1_ESRI); if (d->maybeEsriStyle_) { if (wkt.find("PARAMETER[\"X_Scale\",") != std::string::npos) { d->esriStyle_ = true; d->maybeEsriStyle_ = false; } } const auto build = [this, &wkt]() -> BaseObjectNNPtr { size_t indexEnd; WKTNodeNNPtr root = WKTNode::createFrom(wkt, 0, 0, indexEnd); const std::string &name(root->GP()->value()); if (ci_equal(name, WKTConstants::DATUM) || ci_equal(name, WKTConstants::GEODETICDATUM) || ci_equal(name, WKTConstants::TRF)) { auto primeMeridian = PrimeMeridian::GREENWICH; if (indexEnd < wkt.size()) { indexEnd = skipSpace(wkt, indexEnd); if (indexEnd < wkt.size() && wkt[indexEnd] == ',') { ++indexEnd; indexEnd = skipSpace(wkt, indexEnd); if (indexEnd < wkt.size() && ci_starts_with(wkt.c_str() + indexEnd, WKTConstants::PRIMEM.c_str())) { primeMeridian = d->buildPrimeMeridian( WKTNode::createFrom(wkt, indexEnd, 0, indexEnd), UnitOfMeasure::DEGREE); } } } return d->buildGeodeticReferenceFrame(root, primeMeridian, null_node); } else if (ci_equal(name, WKTConstants::GEOGCS) || ci_equal(name, WKTConstants::PROJCS)) { // Parse implicit compoundCRS from ESRI that is // "PROJCS[...],VERTCS[...]" or "GEOGCS[...],VERTCS[...]" if (indexEnd < wkt.size()) { indexEnd = skipSpace(wkt, indexEnd); if (indexEnd < wkt.size() && wkt[indexEnd] == ',') { ++indexEnd; indexEnd = skipSpace(wkt, indexEnd); if (indexEnd < wkt.size() && ci_starts_with(wkt.c_str() + indexEnd, WKTConstants::VERTCS.c_str())) { auto horizCRS = d->buildCRS(root); if (horizCRS) { auto vertCRS = d->buildVerticalCRS(WKTNode::createFrom( wkt, indexEnd, 0, indexEnd)); return CompoundCRS::createLax( util::PropertyMap().set( IdentifiedObject::NAME_KEY, horizCRS->nameStr() + " + " + vertCRS->nameStr()), {NN_NO_CHECK(horizCRS), vertCRS}, d->dbContext_); } } } } } return d->build(root); }; auto obj = build(); if (dialect == WKTGuessedDialect::WKT1_GDAL || dialect == WKTGuessedDialect::WKT1_ESRI) { auto errorMsg = pj_wkt1_parse(wkt); if (!errorMsg.empty()) { d->emitGrammarError(errorMsg); } } else if (dialect == WKTGuessedDialect::WKT2_2015 || dialect == WKTGuessedDialect::WKT2_2019) { auto errorMsg = pj_wkt2_parse(wkt); if (!errorMsg.empty()) { d->emitGrammarError(errorMsg); } } return obj; } // --------------------------------------------------------------------------- /** \brief Attach a database context, to allow queries in it if needed. */ WKTParser & WKTParser::attachDatabaseContext(const DatabaseContextPtr &dbContext) { d->dbContext_ = dbContext; return *this; } // --------------------------------------------------------------------------- /** \brief Guess the "dialect" of the WKT string. */ WKTParser::WKTGuessedDialect WKTParser::guessDialect(const std::string &inputWkt) noexcept { std::string wkt = inputWkt; std::size_t idxFirstCharNotSpace = wkt.find_first_not_of(" \t\r\n"); if (idxFirstCharNotSpace > 0 && idxFirstCharNotSpace != std::string::npos) { wkt = wkt.substr(idxFirstCharNotSpace); } if (ci_starts_with(wkt, WKTConstants::VERTCS)) { return WKTGuessedDialect::WKT1_ESRI; } const std::string *const wkt1_keywords[] = { &WKTConstants::GEOCCS, &WKTConstants::GEOGCS, &WKTConstants::COMPD_CS, &WKTConstants::PROJCS, &WKTConstants::VERT_CS, &WKTConstants::LOCAL_CS}; for (const auto &pointerKeyword : wkt1_keywords) { if (ci_starts_with(wkt, *pointerKeyword)) { if ((ci_find(wkt, "GEOGCS[\"GCS_") != std::string::npos || (!ci_starts_with(wkt, WKTConstants::LOCAL_CS) && ci_find(wkt, "AXIS[") == std::string::npos && ci_find(wkt, "AUTHORITY[") == std::string::npos)) && // WKT1:GDAL and WKT1:ESRI have both a // Hotine_Oblique_Mercator_Azimuth_Center If providing a // WKT1:GDAL without AXIS, we may wrongly detect it as WKT1:ESRI // and skip the rectified_grid_angle parameter cf // https://github.com/OSGeo/PROJ/issues/3279 ci_find(wkt, "PARAMETER[\"rectified_grid_angle") == std::string::npos) { return WKTGuessedDialect::WKT1_ESRI; } return WKTGuessedDialect::WKT1_GDAL; } } const std::string *const wkt2_2019_only_keywords[] = { &WKTConstants::GEOGCRS, // contained in previous one // &WKTConstants::BASEGEOGCRS, &WKTConstants::CONCATENATEDOPERATION, &WKTConstants::USAGE, &WKTConstants::DYNAMIC, &WKTConstants::FRAMEEPOCH, &WKTConstants::MODEL, &WKTConstants::VELOCITYGRID, &WKTConstants::ENSEMBLE, &WKTConstants::DERIVEDPROJCRS, &WKTConstants::BASEPROJCRS, &WKTConstants::GEOGRAPHICCRS, &WKTConstants::TRF, &WKTConstants::VRF, &WKTConstants::POINTMOTIONOPERATION}; for (const auto &pointerKeyword : wkt2_2019_only_keywords) { auto pos = ci_find(wkt, *pointerKeyword); if (pos != std::string::npos && wkt[pos + pointerKeyword->size()] == '[') { return WKTGuessedDialect::WKT2_2019; } } static const char *const wkt2_2019_only_substrings[] = { "CS[TemporalDateTime,", "CS[TemporalCount,", "CS[TemporalMeasure,", }; for (const auto &substrings : wkt2_2019_only_substrings) { if (ci_find(wkt, substrings) != std::string::npos) { return WKTGuessedDialect::WKT2_2019; } } for (const auto &wktConstant : WKTConstants::constants()) { if (ci_starts_with(wkt, wktConstant)) { for (auto wktPtr = wkt.c_str() + wktConstant.size(); *wktPtr != '\0'; ++wktPtr) { if (isspace(static_cast(*wktPtr))) continue; if (*wktPtr == '[') { return WKTGuessedDialect::WKT2_2015; } break; } } } return WKTGuessedDialect::NOT_WKT; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress FormattingException::FormattingException(const char *message) : Exception(message) {} // --------------------------------------------------------------------------- FormattingException::FormattingException(const std::string &message) : Exception(message) {} // --------------------------------------------------------------------------- FormattingException::FormattingException(const FormattingException &) = default; // --------------------------------------------------------------------------- FormattingException::~FormattingException() = default; // --------------------------------------------------------------------------- void FormattingException::Throw(const char *msg) { throw FormattingException(msg); } // --------------------------------------------------------------------------- void FormattingException::Throw(const std::string &msg) { throw FormattingException(msg); } // --------------------------------------------------------------------------- ParsingException::ParsingException(const char *message) : Exception(message) {} // --------------------------------------------------------------------------- ParsingException::ParsingException(const std::string &message) : Exception(message) {} // --------------------------------------------------------------------------- ParsingException::ParsingException(const ParsingException &) = default; // --------------------------------------------------------------------------- ParsingException::~ParsingException() = default; // --------------------------------------------------------------------------- IPROJStringExportable::~IPROJStringExportable() = default; // --------------------------------------------------------------------------- std::string IPROJStringExportable::exportToPROJString( PROJStringFormatter *formatter) const { const bool bIsCRS = dynamic_cast(this) != nullptr; if (bIsCRS) { formatter->setCRSExport(true); } _exportToPROJString(formatter); if (formatter->getAddNoDefs() && bIsCRS) { if (!formatter->hasParam("no_defs")) { formatter->addParam("no_defs"); } } if (bIsCRS) { if (!formatter->hasParam("type")) { formatter->addParam("type", "crs"); } formatter->setCRSExport(false); } return formatter->toString(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Step { std::string name{}; bool isInit = false; bool inverted{false}; struct KeyValue { std::string key{}; std::string value{}; bool usedByParser = false; // only for PROJStringParser used explicit KeyValue(const std::string &keyIn) : key(keyIn) {} KeyValue(const char *keyIn, const std::string &valueIn); KeyValue(const std::string &keyIn, const std::string &valueIn) : key(keyIn), value(valueIn) {} // cppcheck-suppress functionStatic bool keyEquals(const char *otherKey) const noexcept { return key == otherKey; } // cppcheck-suppress functionStatic bool equals(const char *otherKey, const char *otherVal) const noexcept { return key == otherKey && value == otherVal; } bool operator==(const KeyValue &other) const noexcept { return key == other.key && value == other.value; } bool operator!=(const KeyValue &other) const noexcept { return key != other.key || value != other.value; } }; std::vector paramValues{}; bool hasKey(const char *keyName) const { for (const auto &kv : paramValues) { if (kv.key == keyName) { return true; } } return false; } }; Step::KeyValue::KeyValue(const char *keyIn, const std::string &valueIn) : key(keyIn), value(valueIn) {} struct PROJStringFormatter::Private { PROJStringFormatter::Convention convention_ = PROJStringFormatter::Convention::PROJ_5; std::vector toWGS84Parameters_{}; std::string vDatumExtension_{}; std::string geoidCRSValue_{}; std::string hDatumExtension_{}; crs::GeographicCRSPtr geogCRSOfCompoundCRS_{}; std::list steps_{}; std::vector globalParamValues_{}; struct InversionStackElt { std::list::iterator startIter{}; bool iterValid = false; bool currentInversionState = false; }; std::vector inversionStack_{InversionStackElt()}; bool omitProjLongLatIfPossible_ = false; std::vector omitZUnitConversion_{false}; std::vector omitHorizontalConversionInVertTransformation_{false}; DatabaseContextPtr dbContext_{}; bool useApproxTMerc_ = false; bool addNoDefs_ = true; bool coordOperationOptimizations_ = false; bool crsExport_ = false; bool legacyCRSToCRSContext_ = false; bool multiLine_ = false; bool normalizeOutput_ = false; int indentWidth_ = 2; int indentLevel_ = 0; int maxLineLength_ = 80; std::string result_{}; // cppcheck-suppress functionStatic void appendToResult(const char *str); // cppcheck-suppress functionStatic void addStep(); }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PROJStringFormatter::PROJStringFormatter(Convention conventionIn, const DatabaseContextPtr &dbContext) : d(std::make_unique()) { d->convention_ = conventionIn; d->dbContext_ = dbContext; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PROJStringFormatter::~PROJStringFormatter() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Constructs a new formatter. * * A formatter can be used only once (its internal state is mutated) * * Its default behavior can be adjusted with the different setters. * * @param conventionIn PROJ string flavor. Defaults to Convention::PROJ_5 * @param dbContext Database context (can help to find alternative grid names). * May be nullptr * @return new formatter. */ PROJStringFormatterNNPtr PROJStringFormatter::create(Convention conventionIn, DatabaseContextPtr dbContext) { return NN_NO_CHECK(PROJStringFormatter::make_unique( conventionIn, dbContext)); } // --------------------------------------------------------------------------- /** \brief Set whether approximate Transverse Mercator or UTM should be used */ void PROJStringFormatter::setUseApproxTMerc(bool flag) { d->useApproxTMerc_ = flag; } // --------------------------------------------------------------------------- /** \brief Whether to use multi line output or not. */ PROJStringFormatter & PROJStringFormatter::setMultiLine(bool multiLine) noexcept { d->multiLine_ = multiLine; return *this; } // --------------------------------------------------------------------------- /** \brief Set number of spaces for each indentation level (defaults to 2). */ PROJStringFormatter & PROJStringFormatter::setIndentationWidth(int width) noexcept { d->indentWidth_ = width; return *this; } // --------------------------------------------------------------------------- /** \brief Set the maximum size of a line (when multiline output is enable). * Can be set to 0 for unlimited length. */ PROJStringFormatter & PROJStringFormatter::setMaxLineLength(int maxLineLength) noexcept { d->maxLineLength_ = maxLineLength; return *this; } // --------------------------------------------------------------------------- /** \brief Returns the PROJ string. */ const std::string &PROJStringFormatter::toString() const { assert(d->inversionStack_.size() == 1); d->result_.clear(); auto &steps = d->steps_; if (d->normalizeOutput_) { // Sort +key=value options of each step in lexicographic order. for (auto &step : steps) { std::sort(step.paramValues.begin(), step.paramValues.end(), [](const Step::KeyValue &a, const Step::KeyValue &b) { return a.key < b.key; }); } } for (auto iter = steps.begin(); iter != steps.end();) { // Remove no-op helmert auto &step = *iter; const auto paramCount = step.paramValues.size(); if (step.name == "helmert" && (paramCount == 3 || paramCount == 8) && step.paramValues[0].equals("x", "0") && step.paramValues[1].equals("y", "0") && step.paramValues[2].equals("z", "0") && (paramCount == 3 || (step.paramValues[3].equals("rx", "0") && step.paramValues[4].equals("ry", "0") && step.paramValues[5].equals("rz", "0") && step.paramValues[6].equals("s", "0") && step.paramValues[7].keyEquals("convention")))) { iter = steps.erase(iter); } else if (d->coordOperationOptimizations_ && step.name == "unitconvert" && paramCount == 2 && step.paramValues[0].keyEquals("xy_in") && step.paramValues[1].keyEquals("xy_out") && step.paramValues[0].value == step.paramValues[1].value) { iter = steps.erase(iter); } else if (step.name == "push" && step.inverted) { step.name = "pop"; step.inverted = false; ++iter; } else if (step.name == "pop" && step.inverted) { step.name = "push"; step.inverted = false; ++iter; } else if (step.name == "noop" && steps.size() > 1) { iter = steps.erase(iter); } else { ++iter; } } for (auto &step : steps) { if (!step.inverted) { continue; } const auto paramCount = step.paramValues.size(); // axisswap order=2,1 (or 1,-2) is its own inverse if (step.name == "axisswap" && paramCount == 1 && (step.paramValues[0].equals("order", "2,1") || step.paramValues[0].equals("order", "1,-2"))) { step.inverted = false; continue; } // axisswap inv order=2,-1 ==> axisswap order -2,1 if (step.name == "axisswap" && paramCount == 1 && step.paramValues[0].equals("order", "2,-1")) { step.inverted = false; step.paramValues[0] = Step::KeyValue("order", "-2,1"); continue; } // axisswap order=1,2,-3 is its own inverse if (step.name == "axisswap" && paramCount == 1 && step.paramValues[0].equals("order", "1,2,-3")) { step.inverted = false; continue; } // handle unitconvert inverse if (step.name == "unitconvert" && paramCount == 2 && step.paramValues[0].keyEquals("xy_in") && step.paramValues[1].keyEquals("xy_out")) { std::swap(step.paramValues[0].value, step.paramValues[1].value); step.inverted = false; continue; } if (step.name == "unitconvert" && paramCount == 2 && step.paramValues[0].keyEquals("z_in") && step.paramValues[1].keyEquals("z_out")) { std::swap(step.paramValues[0].value, step.paramValues[1].value); step.inverted = false; continue; } if (step.name == "unitconvert" && paramCount == 4 && step.paramValues[0].keyEquals("xy_in") && step.paramValues[1].keyEquals("z_in") && step.paramValues[2].keyEquals("xy_out") && step.paramValues[3].keyEquals("z_out")) { std::swap(step.paramValues[0].value, step.paramValues[2].value); std::swap(step.paramValues[1].value, step.paramValues[3].value); step.inverted = false; continue; } } { auto iterCur = steps.begin(); if (iterCur != steps.end()) { ++iterCur; } while (iterCur != steps.end()) { assert(iterCur != steps.begin()); auto iterPrev = std::prev(iterCur); auto &prevStep = *iterPrev; auto &curStep = *iterCur; const auto curStepParamCount = curStep.paramValues.size(); const auto prevStepParamCount = prevStep.paramValues.size(); const auto deletePrevAndCurIter = [&steps, &iterPrev, &iterCur]() { iterCur = steps.erase(iterPrev, std::next(iterCur)); if (iterCur != steps.begin()) iterCur = std::prev(iterCur); if (iterCur == steps.begin() && iterCur != steps.end()) ++iterCur; }; // longlat (or its inverse) with ellipsoid only is a no-op // do that only for an internal step if (std::next(iterCur) != steps.end() && curStep.name == "longlat" && curStepParamCount == 1 && curStep.paramValues[0].keyEquals("ellps")) { iterCur = steps.erase(iterCur); continue; } // push v_x followed by pop v_x is a no-op. if (curStep.name == "pop" && prevStep.name == "push" && !curStep.inverted && !prevStep.inverted && curStepParamCount == 1 && prevStepParamCount == 1 && curStep.paramValues[0].key == prevStep.paramValues[0].key) { deletePrevAndCurIter(); continue; } // pop v_x followed by push v_x is, almost, a no-op. For our // purposes, // we consider it as a no-op for better pipeline optimizations. if (curStep.name == "push" && prevStep.name == "pop" && !curStep.inverted && !prevStep.inverted && curStepParamCount == 1 && prevStepParamCount == 1 && curStep.paramValues[0].key == prevStep.paramValues[0].key) { deletePrevAndCurIter(); continue; } // unitconvert (xy) followed by its inverse is a no-op if (curStep.name == "unitconvert" && prevStep.name == "unitconvert" && !curStep.inverted && !prevStep.inverted && curStepParamCount == 2 && prevStepParamCount == 2 && curStep.paramValues[0].keyEquals("xy_in") && prevStep.paramValues[0].keyEquals("xy_in") && curStep.paramValues[1].keyEquals("xy_out") && prevStep.paramValues[1].keyEquals("xy_out") && curStep.paramValues[0].value == prevStep.paramValues[1].value && curStep.paramValues[1].value == prevStep.paramValues[0].value) { deletePrevAndCurIter(); continue; } // unitconvert (z) followed by its inverse is a no-op if (curStep.name == "unitconvert" && prevStep.name == "unitconvert" && !curStep.inverted && !prevStep.inverted && curStepParamCount == 2 && prevStepParamCount == 2 && curStep.paramValues[0].keyEquals("z_in") && prevStep.paramValues[0].keyEquals("z_in") && curStep.paramValues[1].keyEquals("z_out") && prevStep.paramValues[1].keyEquals("z_out") && curStep.paramValues[0].value == prevStep.paramValues[1].value && curStep.paramValues[1].value == prevStep.paramValues[0].value) { deletePrevAndCurIter(); continue; } // unitconvert (xyz) followed by its inverse is a no-op if (curStep.name == "unitconvert" && prevStep.name == "unitconvert" && !curStep.inverted && !prevStep.inverted && curStepParamCount == 4 && prevStepParamCount == 4 && curStep.paramValues[0].keyEquals("xy_in") && prevStep.paramValues[0].keyEquals("xy_in") && curStep.paramValues[1].keyEquals("z_in") && prevStep.paramValues[1].keyEquals("z_in") && curStep.paramValues[2].keyEquals("xy_out") && prevStep.paramValues[2].keyEquals("xy_out") && curStep.paramValues[3].keyEquals("z_out") && prevStep.paramValues[3].keyEquals("z_out") && curStep.paramValues[0].value == prevStep.paramValues[2].value && curStep.paramValues[1].value == prevStep.paramValues[3].value && curStep.paramValues[2].value == prevStep.paramValues[0].value && curStep.paramValues[3].value == prevStep.paramValues[1].value) { deletePrevAndCurIter(); continue; } const auto deletePrevIter = [&steps, &iterPrev, &iterCur]() { steps.erase(iterPrev, iterCur); if (iterCur != steps.begin()) iterCur = std::prev(iterCur); if (iterCur == steps.begin()) ++iterCur; }; // combine unitconvert (xy) and unitconvert (z) bool changeDone = false; for (int k = 0; k < 2; ++k) { auto &first = (k == 0) ? curStep : prevStep; auto &second = (k == 0) ? prevStep : curStep; if (first.name == "unitconvert" && second.name == "unitconvert" && !first.inverted && !second.inverted && first.paramValues.size() == 2 && second.paramValues.size() == 2 && second.paramValues[0].keyEquals("xy_in") && second.paramValues[1].keyEquals("xy_out") && first.paramValues[0].keyEquals("z_in") && first.paramValues[1].keyEquals("z_out")) { const std::string xy_in(second.paramValues[0].value); const std::string xy_out(second.paramValues[1].value); const std::string z_in(first.paramValues[0].value); const std::string z_out(first.paramValues[1].value); iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("xy_in", xy_in)); iterCur->paramValues.emplace_back( Step::KeyValue("z_in", z_in)); iterCur->paramValues.emplace_back( Step::KeyValue("xy_out", xy_out)); iterCur->paramValues.emplace_back( Step::KeyValue("z_out", z_out)); deletePrevIter(); changeDone = true; break; } } if (changeDone) { continue; } // +step +proj=unitconvert +xy_in=X1 +xy_out=X2 // +step +proj=unitconvert +xy_in=X2 +z_in=Z1 +xy_out=X1 +z_out=Z2 // ==> step +proj=unitconvert +z_in=Z1 +z_out=Z2 for (int k = 0; k < 2; ++k) { auto &first = (k == 0) ? curStep : prevStep; auto &second = (k == 0) ? prevStep : curStep; if (first.name == "unitconvert" && second.name == "unitconvert" && !first.inverted && !second.inverted && first.paramValues.size() == 4 && second.paramValues.size() == 2 && first.paramValues[0].keyEquals("xy_in") && first.paramValues[1].keyEquals("z_in") && first.paramValues[2].keyEquals("xy_out") && first.paramValues[3].keyEquals("z_out") && second.paramValues[0].keyEquals("xy_in") && second.paramValues[1].keyEquals("xy_out") && first.paramValues[0].value == second.paramValues[1].value && first.paramValues[2].value == second.paramValues[0].value) { const std::string z_in(first.paramValues[1].value); const std::string z_out(first.paramValues[3].value); if (z_in != z_out) { iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("z_in", z_in)); iterCur->paramValues.emplace_back( Step::KeyValue("z_out", z_out)); deletePrevIter(); } else { deletePrevAndCurIter(); } changeDone = true; break; } } if (changeDone) { continue; } // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z2 // +step +proj=unitconvert +z_in=Z2 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 // +z_out=Z3 if (prevStep.name == "unitconvert" && curStep.name == "unitconvert" && !prevStep.inverted && !curStep.inverted && prevStep.paramValues.size() == 4 && curStep.paramValues.size() == 2 && prevStep.paramValues[0].keyEquals("xy_in") && prevStep.paramValues[1].keyEquals("z_in") && prevStep.paramValues[2].keyEquals("xy_out") && prevStep.paramValues[3].keyEquals("z_out") && curStep.paramValues[0].keyEquals("z_in") && curStep.paramValues[1].keyEquals("z_out") && prevStep.paramValues[3].value == curStep.paramValues[0].value) { const std::string xy_in(prevStep.paramValues[0].value); const std::string z_in(prevStep.paramValues[1].value); const std::string xy_out(prevStep.paramValues[2].value); const std::string z_out(curStep.paramValues[1].value); iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("xy_in", xy_in)); iterCur->paramValues.emplace_back(Step::KeyValue("z_in", z_in)); iterCur->paramValues.emplace_back( Step::KeyValue("xy_out", xy_out)); iterCur->paramValues.emplace_back( Step::KeyValue("z_out", z_out)); deletePrevIter(); continue; } // +step +proj=unitconvert +z_in=Z1 +z_out=Z2 // +step +proj=unitconvert +xy_in=X1 +z_in=Z2 +xy_out=X2 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 // +z_out=Z3 if (prevStep.name == "unitconvert" && curStep.name == "unitconvert" && !prevStep.inverted && !curStep.inverted && prevStep.paramValues.size() == 2 && curStep.paramValues.size() == 4 && prevStep.paramValues[0].keyEquals("z_in") && prevStep.paramValues[1].keyEquals("z_out") && curStep.paramValues[0].keyEquals("xy_in") && curStep.paramValues[1].keyEquals("z_in") && curStep.paramValues[2].keyEquals("xy_out") && curStep.paramValues[3].keyEquals("z_out") && prevStep.paramValues[1].value == curStep.paramValues[1].value) { const std::string xy_in(curStep.paramValues[0].value); const std::string z_in(prevStep.paramValues[0].value); const std::string xy_out(curStep.paramValues[2].value); const std::string z_out(curStep.paramValues[3].value); iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("xy_in", xy_in)); iterCur->paramValues.emplace_back(Step::KeyValue("z_in", z_in)); iterCur->paramValues.emplace_back( Step::KeyValue("xy_out", xy_out)); iterCur->paramValues.emplace_back( Step::KeyValue("z_out", z_out)); deletePrevIter(); continue; } // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z2 // +step +proj=unitconvert +xy_in=X2 +xy_out=X3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X3 // +z_out=Z2 if (prevStep.name == "unitconvert" && curStep.name == "unitconvert" && !prevStep.inverted && !curStep.inverted && prevStep.paramValues.size() == 4 && curStep.paramValues.size() == 2 && prevStep.paramValues[0].keyEquals("xy_in") && prevStep.paramValues[1].keyEquals("z_in") && prevStep.paramValues[2].keyEquals("xy_out") && prevStep.paramValues[3].keyEquals("z_out") && curStep.paramValues[0].keyEquals("xy_in") && curStep.paramValues[1].keyEquals("xy_out") && prevStep.paramValues[2].value == curStep.paramValues[0].value) { const std::string xy_in(prevStep.paramValues[0].value); const std::string z_in(prevStep.paramValues[1].value); const std::string xy_out(curStep.paramValues[1].value); const std::string z_out(prevStep.paramValues[3].value); iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("xy_in", xy_in)); iterCur->paramValues.emplace_back(Step::KeyValue("z_in", z_in)); iterCur->paramValues.emplace_back( Step::KeyValue("xy_out", xy_out)); iterCur->paramValues.emplace_back( Step::KeyValue("z_out", z_out)); deletePrevIter(); continue; } // clang-format off // A bit odd. Used to simplify geog3d_feet -> EPSG:6318+6360 // of https://github.com/OSGeo/PROJ/issues/3938 // where we get originally // +step +proj=unitconvert +xy_in=deg +z_in=ft +xy_out=rad +z_out=us-ft // +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m // and want it simplified as: // +step +proj=unitconvert +xy_in=deg +z_in=ft +xy_out=deg +z_out=us-ft // // More generally: // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z2 // +step +proj=unitconvert +xy_in=X2 +z_in=Z3 +xy_out=X3 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X3 +z_out=Z2 // clang-format on if (prevStep.name == "unitconvert" && curStep.name == "unitconvert" && !prevStep.inverted && !curStep.inverted && prevStep.paramValues.size() == 4 && curStep.paramValues.size() == 4 && prevStep.paramValues[0].keyEquals("xy_in") && prevStep.paramValues[1].keyEquals("z_in") && prevStep.paramValues[2].keyEquals("xy_out") && prevStep.paramValues[3].keyEquals("z_out") && curStep.paramValues[0].keyEquals("xy_in") && curStep.paramValues[1].keyEquals("z_in") && curStep.paramValues[2].keyEquals("xy_out") && curStep.paramValues[3].keyEquals("z_out") && prevStep.paramValues[2].value == curStep.paramValues[0].value && curStep.paramValues[1].value == curStep.paramValues[3].value) { const std::string xy_in(prevStep.paramValues[0].value); const std::string z_in(prevStep.paramValues[1].value); const std::string xy_out(curStep.paramValues[2].value); const std::string z_out(prevStep.paramValues[3].value); iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("xy_in", xy_in)); iterCur->paramValues.emplace_back(Step::KeyValue("z_in", z_in)); iterCur->paramValues.emplace_back( Step::KeyValue("xy_out", xy_out)); iterCur->paramValues.emplace_back( Step::KeyValue("z_out", z_out)); deletePrevIter(); continue; } // clang-format off // Variant of above // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z1 // +step +proj=unitconvert +xy_in=X2 +z_in=Z2 +xy_out=X3 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z2 +xy_out=X3 +z_out=Z3 // clang-format on if (prevStep.name == "unitconvert" && curStep.name == "unitconvert" && !prevStep.inverted && !curStep.inverted && prevStep.paramValues.size() == 4 && curStep.paramValues.size() == 4 && prevStep.paramValues[0].keyEquals("xy_in") && prevStep.paramValues[1].keyEquals("z_in") && prevStep.paramValues[2].keyEquals("xy_out") && prevStep.paramValues[3].keyEquals("z_out") && curStep.paramValues[0].keyEquals("xy_in") && curStep.paramValues[1].keyEquals("z_in") && curStep.paramValues[2].keyEquals("xy_out") && curStep.paramValues[3].keyEquals("z_out") && prevStep.paramValues[1].value == prevStep.paramValues[3].value && curStep.paramValues[0].value == prevStep.paramValues[2].value) { const std::string xy_in(prevStep.paramValues[0].value); const std::string z_in(curStep.paramValues[1].value); const std::string xy_out(curStep.paramValues[2].value); const std::string z_out(curStep.paramValues[3].value); iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("xy_in", xy_in)); iterCur->paramValues.emplace_back(Step::KeyValue("z_in", z_in)); iterCur->paramValues.emplace_back( Step::KeyValue("xy_out", xy_out)); iterCur->paramValues.emplace_back( Step::KeyValue("z_out", z_out)); deletePrevIter(); continue; } // unitconvert (1), axisswap order=2,1, unitconvert(2) ==> // axisswap order=2,1, unitconvert (1), unitconvert(2) which // will get further optimized by previous case if (std::next(iterCur) != steps.end() && prevStep.name == "unitconvert" && curStep.name == "axisswap" && curStepParamCount == 1 && curStep.paramValues[0].equals("order", "2,1")) { auto iterNext = std::next(iterCur); auto &nextStep = *iterNext; if (nextStep.name == "unitconvert") { std::swap(*iterPrev, *iterCur); ++iterCur; continue; } } // axisswap order=2,1 followed by itself is a no-op if (curStep.name == "axisswap" && prevStep.name == "axisswap" && curStepParamCount == 1 && prevStepParamCount == 1 && curStep.paramValues[0].equals("order", "2,1") && prevStep.paramValues[0].equals("order", "2,1")) { deletePrevAndCurIter(); continue; } // axisswap order=2,-1 followed by axisswap order=-2,1 is a no-op if (curStep.name == "axisswap" && prevStep.name == "axisswap" && curStepParamCount == 1 && prevStepParamCount == 1 && !prevStep.inverted && prevStep.paramValues[0].equals("order", "2,-1") && !curStep.inverted && curStep.paramValues[0].equals("order", "-2,1")) { deletePrevAndCurIter(); continue; } // axisswap order=2,-1 followed by axisswap order=1,-2 is // equivalent to axisswap order=2,1 if (curStep.name == "axisswap" && prevStep.name == "axisswap" && curStepParamCount == 1 && prevStepParamCount == 1 && !prevStep.inverted && prevStep.paramValues[0].equals("order", "2,-1") && !curStep.inverted && curStep.paramValues[0].equals("order", "1,-2")) { prevStep.inverted = false; prevStep.paramValues[0] = Step::KeyValue("order", "2,1"); // Delete this iter iterCur = steps.erase(iterCur); continue; } // axisswap order=2,1 followed by axisswap order=2,-1 is // equivalent to axisswap order=1,-2 // Same for axisswap order=-2,1 followed by axisswap order=2,1 if (curStep.name == "axisswap" && prevStep.name == "axisswap" && curStepParamCount == 1 && prevStepParamCount == 1 && ((prevStep.paramValues[0].equals("order", "2,1") && !curStep.inverted && curStep.paramValues[0].equals("order", "2,-1")) || (prevStep.paramValues[0].equals("order", "-2,1") && !prevStep.inverted && curStep.paramValues[0].equals("order", "2,1")))) { prevStep.inverted = false; prevStep.paramValues[0] = Step::KeyValue("order", "1,-2"); // Delete this iter iterCur = steps.erase(iterCur); continue; } // axisswap order=2,1, unitconvert, axisswap order=2,1 -> can // suppress axisswap if (std::next(iterCur) != steps.end() && prevStep.name == "axisswap" && curStep.name == "unitconvert" && prevStepParamCount == 1 && prevStep.paramValues[0].equals("order", "2,1")) { auto iterNext = std::next(iterCur); auto &nextStep = *iterNext; if (nextStep.name == "axisswap" && nextStep.paramValues.size() == 1 && nextStep.paramValues[0].equals("order", "2,1")) { steps.erase(iterPrev); steps.erase(iterNext); // Coverity complains about invalid usage of iterCur // due to the above erase(iterNext). To the best of our // understanding, this is a false-positive. // coverity[use_iterator] if (iterCur != steps.begin()) iterCur = std::prev(iterCur); if (iterCur == steps.begin()) ++iterCur; continue; } } // for practical purposes WGS84 and GRS80 ellipsoids are // equivalents (cartesian transform between both lead to differences // of the order of 1e-14 deg..). // No need to do a cart roundtrip for that... // and actually IGNF uses the GRS80 definition for the WGS84 datum if (curStep.name == "cart" && prevStep.name == "cart" && curStep.inverted == !prevStep.inverted && curStepParamCount == 1 && prevStepParamCount == 1 && ((curStep.paramValues[0].equals("ellps", "WGS84") && prevStep.paramValues[0].equals("ellps", "GRS80")) || (curStep.paramValues[0].equals("ellps", "GRS80") && prevStep.paramValues[0].equals("ellps", "WGS84")))) { deletePrevAndCurIter(); continue; } if (curStep.name == "helmert" && prevStep.name == "helmert" && !curStep.inverted && !prevStep.inverted && curStepParamCount == 3 && curStepParamCount == prevStepParamCount) { std::map leftParamsMap; std::map rightParamsMap; try { for (const auto &kv : prevStep.paramValues) { leftParamsMap[kv.key] = c_locale_stod(kv.value); } for (const auto &kv : curStep.paramValues) { rightParamsMap[kv.key] = c_locale_stod(kv.value); } } catch (const std::invalid_argument &) { break; } const std::string x("x"); const std::string y("y"); const std::string z("z"); if (leftParamsMap.find(x) != leftParamsMap.end() && leftParamsMap.find(y) != leftParamsMap.end() && leftParamsMap.find(z) != leftParamsMap.end() && rightParamsMap.find(x) != rightParamsMap.end() && rightParamsMap.find(y) != rightParamsMap.end() && rightParamsMap.find(z) != rightParamsMap.end()) { const double xSum = leftParamsMap[x] + rightParamsMap[x]; const double ySum = leftParamsMap[y] + rightParamsMap[y]; const double zSum = leftParamsMap[z] + rightParamsMap[z]; if (xSum == 0.0 && ySum == 0.0 && zSum == 0.0) { deletePrevAndCurIter(); } else { prevStep.paramValues[0] = Step::KeyValue("x", internal::toString(xSum)); prevStep.paramValues[1] = Step::KeyValue("y", internal::toString(ySum)); prevStep.paramValues[2] = Step::KeyValue("z", internal::toString(zSum)); // Delete this iter iterCur = steps.erase(iterCur); } continue; } } // Helmert followed by its inverse is a no-op if (curStep.name == "helmert" && prevStep.name == "helmert" && !curStep.inverted && !prevStep.inverted && curStepParamCount == prevStepParamCount) { std::set leftParamsSet; std::set rightParamsSet; std::map leftParamsMap; std::map rightParamsMap; for (const auto &kv : prevStep.paramValues) { leftParamsSet.insert(kv.key); leftParamsMap[kv.key] = kv.value; } for (const auto &kv : curStep.paramValues) { rightParamsSet.insert(kv.key); rightParamsMap[kv.key] = kv.value; } if (leftParamsSet == rightParamsSet) { bool doErase = true; try { for (const auto ¶m : leftParamsSet) { if (param == "convention" || param == "t_epoch" || param == "t_obs") { if (leftParamsMap[param] != rightParamsMap[param]) { doErase = false; break; } } else if (c_locale_stod(leftParamsMap[param]) != -c_locale_stod(rightParamsMap[param])) { doErase = false; break; } } } catch (const std::invalid_argument &) { break; } if (doErase) { deletePrevAndCurIter(); continue; } } } // The following should be optimized as a no-op // +step +proj=helmert +x=25 +y=-141 +z=-78.5 +rx=0 +ry=-0.35 // +rz=-0.736 +s=0 +convention=coordinate_frame // +step +inv +proj=helmert +x=25 +y=-141 +z=-78.5 +rx=0 +ry=0.35 // +rz=0.736 +s=0 +convention=position_vector if (curStep.name == "helmert" && prevStep.name == "helmert" && ((curStep.inverted && !prevStep.inverted) || (!curStep.inverted && prevStep.inverted)) && curStepParamCount == prevStepParamCount) { std::set leftParamsSet; std::set rightParamsSet; std::map leftParamsMap; std::map rightParamsMap; for (const auto &kv : prevStep.paramValues) { leftParamsSet.insert(kv.key); leftParamsMap[kv.key] = kv.value; } for (const auto &kv : curStep.paramValues) { rightParamsSet.insert(kv.key); rightParamsMap[kv.key] = kv.value; } if (leftParamsSet == rightParamsSet) { bool doErase = true; try { for (const auto ¶m : leftParamsSet) { if (param == "convention") { // Convention must be different if (leftParamsMap[param] == rightParamsMap[param]) { doErase = false; break; } } else if (param == "rx" || param == "ry" || param == "rz" || param == "drx" || param == "dry" || param == "drz") { // Rotational parameters should have opposite // value if (c_locale_stod(leftParamsMap[param]) != -c_locale_stod(rightParamsMap[param])) { doErase = false; break; } } else { // Non rotational parameters should have the // same value if (leftParamsMap[param] != rightParamsMap[param]) { doErase = false; break; } } } } catch (const std::invalid_argument &) { break; } if (doErase) { deletePrevAndCurIter(); continue; } } } // Optimize patterns like Krovak (South West) to Krovak East North // (also applies to Modified Krovak) // +step +inv +proj=krovak +axis=swu +lat_0=49.5 // +lon_0=24.8333333333333 // +alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel // +step +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 // +alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel // as: // +step +proj=axisswap +order=-2,-1 // Also applies for the symmetrical case where +axis=swu is on the // second step. if (curStep.inverted != prevStep.inverted && curStep.name == prevStep.name && ((curStepParamCount + 1 == prevStepParamCount && prevStep.paramValues[0].equals("axis", "swu")) || (prevStepParamCount + 1 == curStepParamCount && curStep.paramValues[0].equals("axis", "swu")))) { const auto &swStep = (curStepParamCount < prevStepParamCount) ? prevStep : curStep; const auto &enStep = (curStepParamCount < prevStepParamCount) ? curStep : prevStep; // Check if all remaining parameters (except leading axis=swu // in swStep) are identical. bool allSame = true; for (size_t j = 0; j < std::min(curStepParamCount, prevStepParamCount); j++) { if (enStep.paramValues[j] != swStep.paramValues[j + 1]) { allSame = false; break; } } if (allSame) { iterCur->inverted = false; iterCur->name = "axisswap"; iterCur->paramValues.clear(); iterCur->paramValues.emplace_back( Step::KeyValue("order", "-2,-1")); deletePrevIter(); continue; } } // detect a step and its inverse if (curStep.inverted != prevStep.inverted && curStep.name == prevStep.name && curStepParamCount == prevStepParamCount) { bool allSame = true; for (size_t j = 0; j < curStepParamCount; j++) { if (curStep.paramValues[j] != prevStep.paramValues[j]) { allSame = false; break; } } if (allSame) { deletePrevAndCurIter(); continue; } } ++iterCur; } } { auto iterCur = steps.begin(); if (iterCur != steps.end()) { ++iterCur; } while (iterCur != steps.end()) { assert(iterCur != steps.begin()); auto iterPrev = std::prev(iterCur); auto &prevStep = *iterPrev; auto &curStep = *iterCur; const auto curStepParamCount = curStep.paramValues.size(); const auto prevStepParamCount = prevStep.paramValues.size(); // +step +proj=hgridshift +grids=grid_A // +step +proj=vgridshift [...] <== curStep // +step +inv +proj=hgridshift +grids=grid_A // ==> // +step +proj=push +v_1 +v_2 // +step +proj=hgridshift +grids=grid_A +omit_inv // +step +proj=vgridshift [...] // +step +inv +proj=hgridshift +grids=grid_A +omit_fwd // +step +proj=pop +v_1 +v_2 if (std::next(iterCur) != steps.end() && prevStep.name == "hgridshift" && prevStepParamCount == 1 && curStep.name == "vgridshift") { auto iterNext = std::next(iterCur); auto &nextStep = *iterNext; if (nextStep.name == "hgridshift" && nextStep.inverted != prevStep.inverted && nextStep.paramValues.size() == 1 && prevStep.paramValues[0] == nextStep.paramValues[0]) { Step pushStep; pushStep.name = "push"; pushStep.paramValues.emplace_back("v_1"); pushStep.paramValues.emplace_back("v_2"); steps.insert(iterPrev, pushStep); prevStep.paramValues.emplace_back("omit_inv"); nextStep.paramValues.emplace_back("omit_fwd"); Step popStep; popStep.name = "pop"; popStep.paramValues.emplace_back("v_1"); popStep.paramValues.emplace_back("v_2"); steps.insert(std::next(iterNext), popStep); continue; } } // +step +proj=unitconvert +xy_in=rad +xy_out=deg // +step +proj=axisswap +order=2,1 // +step +proj=push +v_1 +v_2 // +step +proj=axisswap +order=2,1 // +step +proj=unitconvert +xy_in=deg +xy_out=rad // +step +proj=vgridshift ... // +step +proj=unitconvert +xy_in=rad +xy_out=deg // +step +proj=axisswap +order=2,1 // +step +proj=pop +v_1 +v_2 // ==> // +step +proj=vgridshift ... // +step +proj=unitconvert +xy_in=rad +xy_out=deg // +step +proj=axisswap +order=2,1 if (prevStep.name == "unitconvert" && prevStepParamCount == 2 && prevStep.paramValues[0].equals("xy_in", "rad") && prevStep.paramValues[1].equals("xy_out", "deg") && curStep.name == "axisswap" && curStepParamCount == 1 && curStep.paramValues[0].equals("order", "2,1")) { auto iterNext = std::next(iterCur); bool ok = false; if (iterNext != steps.end()) { auto &nextStep = *iterNext; if (nextStep.name == "push" && nextStep.paramValues.size() == 2 && nextStep.paramValues[0].keyEquals("v_1") && nextStep.paramValues[1].keyEquals("v_2")) { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "axisswap" && nextStep.paramValues.size() == 1 && nextStep.paramValues[0].equals("order", "2,1")) { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "unitconvert" && nextStep.paramValues.size() == 2 && nextStep.paramValues[0].equals("xy_in", "deg") && nextStep.paramValues[1].equals("xy_out", "rad")) { ok = true; iterNext = std::next(iterNext); } } auto iterVgridshift = iterNext; ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "vgridshift") { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "unitconvert" && nextStep.paramValues.size() == 2 && nextStep.paramValues[0].equals("xy_in", "rad") && nextStep.paramValues[1].equals("xy_out", "deg")) { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "axisswap" && nextStep.paramValues.size() == 1 && nextStep.paramValues[0].equals("order", "2,1")) { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "pop" && nextStep.paramValues.size() == 2 && nextStep.paramValues[0].keyEquals("v_1") && nextStep.paramValues[1].keyEquals("v_2")) { ok = true; // iterNext = std::next(iterNext); } } if (ok) { steps.erase(iterPrev, iterVgridshift); steps.erase(iterNext, std::next(iterNext)); iterPrev = std::prev(iterVgridshift); iterCur = iterVgridshift; continue; } } // +step +proj=axisswap +order=2,1 // +step +proj=unitconvert +xy_in=deg +xy_out=rad // +step +proj=vgridshift ... // +step +proj=unitconvert +xy_in=rad +xy_out=deg // +step +proj=axisswap +order=2,1 // +step +proj=push +v_1 +v_2 // +step +proj=axisswap +order=2,1 // +step +proj=unitconvert +xy_in=deg +xy_out=rad // ==> // +step +proj=push +v_1 +v_2 // +step +proj=axisswap +order=2,1 // +step +proj=unitconvert +xy_in=deg +xy_out=rad // +step +proj=vgridshift ... if (prevStep.name == "axisswap" && prevStepParamCount == 1 && prevStep.paramValues[0].equals("order", "2,1") && curStep.name == "unitconvert" && curStepParamCount == 2 && !curStep.inverted && curStep.paramValues[0].equals("xy_in", "deg") && curStep.paramValues[1].equals("xy_out", "rad")) { auto iterNext = std::next(iterCur); bool ok = false; auto iterVgridshift = iterNext; if (iterNext != steps.end()) { auto &nextStep = *iterNext; if (nextStep.name == "vgridshift") { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "unitconvert" && !nextStep.inverted && nextStep.paramValues.size() == 2 && nextStep.paramValues[0].equals("xy_in", "rad") && nextStep.paramValues[1].equals("xy_out", "deg")) { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "axisswap" && nextStep.paramValues.size() == 1 && nextStep.paramValues[0].equals("order", "2,1")) { ok = true; iterNext = std::next(iterNext); } } auto iterPush = iterNext; ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "push" && nextStep.paramValues.size() == 2 && nextStep.paramValues[0].keyEquals("v_1") && nextStep.paramValues[1].keyEquals("v_2")) { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "axisswap" && nextStep.paramValues.size() == 1 && nextStep.paramValues[0].equals("order", "2,1")) { ok = true; iterNext = std::next(iterNext); } } ok &= iterNext != steps.end(); if (ok) { ok = false; auto &nextStep = *iterNext; if (nextStep.name == "unitconvert" && nextStep.paramValues.size() == 2 && !nextStep.inverted && nextStep.paramValues[0].equals("xy_in", "deg") && nextStep.paramValues[1].equals("xy_out", "rad")) { ok = true; // iterNext = std::next(iterNext); } } if (ok) { Step stepVgridshift(*iterVgridshift); steps.erase(iterPrev, iterPush); steps.insert(std::next(iterNext), std::move(stepVgridshift)); iterPrev = iterPush; iterCur = std::next(iterPush); continue; } } ++iterCur; } } { auto iterCur = steps.begin(); if (iterCur != steps.end()) { ++iterCur; } while (iterCur != steps.end()) { assert(iterCur != steps.begin()); auto iterPrev = std::prev(iterCur); auto &prevStep = *iterPrev; auto &curStep = *iterCur; const auto curStepParamCount = curStep.paramValues.size(); const auto prevStepParamCount = prevStep.paramValues.size(); const auto deletePrevAndCurIter = [&steps, &iterPrev, &iterCur]() { iterCur = steps.erase(iterPrev, std::next(iterCur)); if (iterCur != steps.begin()) iterCur = std::prev(iterCur); if (iterCur == steps.begin() && iterCur != steps.end()) ++iterCur; }; // axisswap order=2,1 followed by itself is a no-op if (curStep.name == "axisswap" && prevStep.name == "axisswap" && curStepParamCount == 1 && prevStepParamCount == 1 && curStep.paramValues[0].equals("order", "2,1") && prevStep.paramValues[0].equals("order", "2,1")) { deletePrevAndCurIter(); continue; } // detect a step and its inverse if (curStep.inverted != prevStep.inverted && curStep.name == prevStep.name && curStepParamCount == prevStepParamCount) { bool allSame = true; for (size_t j = 0; j < curStepParamCount; j++) { if (curStep.paramValues[j] != prevStep.paramValues[j]) { allSame = false; break; } } if (allSame) { deletePrevAndCurIter(); continue; } } ++iterCur; } } if (steps.size() > 1 || (steps.size() == 1 && (steps.front().inverted || steps.front().hasKey("omit_inv") || steps.front().hasKey("omit_fwd") || !d->globalParamValues_.empty()))) { d->appendToResult("+proj=pipeline"); for (const auto ¶mValue : d->globalParamValues_) { d->appendToResult("+"); d->result_ += paramValue.key; if (!paramValue.value.empty()) { d->result_ += '='; d->result_ += pj_double_quote_string_param_if_needed(paramValue.value); } } if (d->multiLine_) { d->indentLevel_++; } } for (const auto &step : steps) { std::string curLine; if (!d->result_.empty()) { if (d->multiLine_) { curLine = std::string(static_cast(d->indentLevel_) * d->indentWidth_, ' '); curLine += "+step"; } else { curLine = " +step"; } } if (step.inverted) { curLine += " +inv"; } if (!step.name.empty()) { if (!curLine.empty()) curLine += ' '; curLine += step.isInit ? "+init=" : "+proj="; curLine += step.name; } for (const auto ¶mValue : step.paramValues) { std::string newKV = "+"; newKV += paramValue.key; if (!paramValue.value.empty()) { newKV += '='; newKV += pj_double_quote_string_param_if_needed(paramValue.value); } if (d->maxLineLength_ > 0 && d->multiLine_ && curLine.size() + newKV.size() > static_cast(d->maxLineLength_)) { if (!d->result_.empty()) d->result_ += '\n'; d->result_ += curLine; curLine = std::string(static_cast(d->indentLevel_) * d->indentWidth_ + strlen("+step "), ' '); } else { if (!curLine.empty()) curLine += ' '; } curLine += newKV; } if (d->multiLine_ && !d->result_.empty()) d->result_ += '\n'; d->result_ += curLine; } if (d->result_.empty()) { d->appendToResult("+proj=noop"); } return d->result_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PROJStringFormatter::Convention PROJStringFormatter::convention() const { return d->convention_; } // --------------------------------------------------------------------------- // Return the number of steps in the pipeline. // Note: this value will change after calling toString() that will run // optimizations. size_t PROJStringFormatter::getStepCount() const { return d->steps_.size(); } // --------------------------------------------------------------------------- bool PROJStringFormatter::getUseApproxTMerc() const { return d->useApproxTMerc_; } // --------------------------------------------------------------------------- void PROJStringFormatter::setCoordinateOperationOptimizations(bool enable) { d->coordOperationOptimizations_ = enable; } // --------------------------------------------------------------------------- void PROJStringFormatter::Private::appendToResult(const char *str) { if (!result_.empty()) { result_ += ' '; } result_ += str; } // --------------------------------------------------------------------------- static void PROJStringSyntaxParser(const std::string &projString, std::vector &steps, std::vector &globalParamValues, std::string &title) { std::vector tokens; bool hasProj = false; bool hasInit = false; bool hasPipeline = false; std::string projStringModified(projString); // Special case for "+title=several words +foo=bar" if (starts_with(projStringModified, "+title=") && projStringModified.size() > 7 && projStringModified[7] != '"') { const auto plusPos = projStringModified.find(" +", 1); const auto spacePos = projStringModified.find(' '); if (plusPos != std::string::npos && spacePos != std::string::npos && spacePos < plusPos) { std::string tmp("+title="); tmp += pj_double_quote_string_param_if_needed( projStringModified.substr(7, plusPos - 7)); tmp += projStringModified.substr(plusPos); projStringModified = std::move(tmp); } } size_t argc = pj_trim_argc(&projStringModified[0]); char **argv = pj_trim_argv(argc, &projStringModified[0]); for (size_t i = 0; i < argc; i++) { std::string token(argv[i]); if (!hasPipeline && token == "proj=pipeline") { hasPipeline = true; } else if (!hasProj && starts_with(token, "proj=")) { hasProj = true; } else if (!hasInit && starts_with(token, "init=")) { hasInit = true; } tokens.emplace_back(token); } free(argv); if (!hasPipeline) { if (hasProj || hasInit) { steps.push_back(Step()); } for (auto &word : tokens) { if (starts_with(word, "proj=") && !hasInit && steps.back().name.empty()) { assert(hasProj); auto stepName = word.substr(strlen("proj=")); steps.back().name = std::move(stepName); } else if (starts_with(word, "init=")) { assert(hasInit); auto initName = word.substr(strlen("init=")); steps.back().name = std::move(initName); steps.back().isInit = true; } else if (word == "inv") { if (!steps.empty()) { steps.back().inverted = true; } } else if (starts_with(word, "title=")) { title = word.substr(strlen("title=")); } else if (word != "step") { const auto pos = word.find('='); const auto key = word.substr(0, pos); Step::KeyValue pair( (pos != std::string::npos) ? Step::KeyValue(key, word.substr(pos + 1)) : Step::KeyValue(key)); if (steps.empty()) { globalParamValues.push_back(std::move(pair)); } else { steps.back().paramValues.push_back(std::move(pair)); } } } return; } bool inPipeline = false; bool invGlobal = false; for (auto &word : tokens) { if (word == "proj=pipeline") { if (inPipeline) { throw ParsingException("nested pipeline not supported"); } inPipeline = true; } else if (word == "step") { if (!inPipeline) { throw ParsingException("+step found outside pipeline"); } steps.push_back(Step()); } else if (word == "inv") { if (steps.empty()) { invGlobal = true; } else { steps.back().inverted = true; } } else if (inPipeline && !steps.empty() && starts_with(word, "proj=") && steps.back().name.empty()) { auto stepName = word.substr(strlen("proj=")); steps.back().name = std::move(stepName); } else if (inPipeline && !steps.empty() && starts_with(word, "init=") && steps.back().name.empty()) { auto initName = word.substr(strlen("init=")); steps.back().name = std::move(initName); steps.back().isInit = true; } else if (!inPipeline && starts_with(word, "title=")) { title = word.substr(strlen("title=")); } else { const auto pos = word.find('='); auto key = word.substr(0, pos); Step::KeyValue pair((pos != std::string::npos) ? Step::KeyValue(key, word.substr(pos + 1)) : Step::KeyValue(key)); if (steps.empty()) { globalParamValues.emplace_back(std::move(pair)); } else { steps.back().paramValues.emplace_back(std::move(pair)); } } } if (invGlobal) { for (auto &step : steps) { step.inverted = !step.inverted; } std::reverse(steps.begin(), steps.end()); } } // --------------------------------------------------------------------------- void PROJStringFormatter::ingestPROJString( const std::string &str) // throw ParsingException { std::vector steps; std::string title; PROJStringSyntaxParser(str, steps, d->globalParamValues_, title); d->steps_.insert(d->steps_.end(), steps.begin(), steps.end()); } // --------------------------------------------------------------------------- void PROJStringFormatter::setCRSExport(bool b) { d->crsExport_ = b; } // --------------------------------------------------------------------------- bool PROJStringFormatter::getCRSExport() const { return d->crsExport_; } // --------------------------------------------------------------------------- void PROJStringFormatter::startInversion() { PROJStringFormatter::Private::InversionStackElt elt; elt.startIter = d->steps_.end(); if (elt.startIter != d->steps_.begin()) { elt.iterValid = true; --elt.startIter; // point to the last valid element } else { elt.iterValid = false; } elt.currentInversionState = !d->inversionStack_.back().currentInversionState; d->inversionStack_.push_back(elt); } // --------------------------------------------------------------------------- void PROJStringFormatter::stopInversion() { assert(!d->inversionStack_.empty()); auto startIter = d->inversionStack_.back().startIter; if (!d->inversionStack_.back().iterValid) { startIter = d->steps_.begin(); } else { ++startIter; // advance after the last valid element we marked above } // Invert the inversion status of the steps between the start point and // the current end of steps for (auto iter = startIter; iter != d->steps_.end(); ++iter) { iter->inverted = !iter->inverted; for (auto ¶mValue : iter->paramValues) { if (paramValue.key == "omit_fwd") paramValue.key = "omit_inv"; else if (paramValue.key == "omit_inv") paramValue.key = "omit_fwd"; } } // And reverse the order of steps in that range as well. std::reverse(startIter, d->steps_.end()); d->inversionStack_.pop_back(); } // --------------------------------------------------------------------------- bool PROJStringFormatter::isInverted() const { return d->inversionStack_.back().currentInversionState; } // --------------------------------------------------------------------------- void PROJStringFormatter::Private::addStep() { steps_.emplace_back(Step()); } // --------------------------------------------------------------------------- void PROJStringFormatter::addStep(const char *stepName) { d->addStep(); d->steps_.back().name.assign(stepName); } // --------------------------------------------------------------------------- void PROJStringFormatter::addStep(const std::string &stepName) { d->addStep(); d->steps_.back().name = stepName; } // --------------------------------------------------------------------------- void PROJStringFormatter::setCurrentStepInverted(bool inverted) { assert(!d->steps_.empty()); d->steps_.back().inverted = inverted; } // --------------------------------------------------------------------------- bool PROJStringFormatter::hasParam(const char *paramName) const { if (!d->steps_.empty()) { for (const auto ¶mValue : d->steps_.back().paramValues) { if (paramValue.keyEquals(paramName)) { return true; } } } return false; } // --------------------------------------------------------------------------- void PROJStringFormatter::addNoDefs(bool b) { d->addNoDefs_ = b; } // --------------------------------------------------------------------------- bool PROJStringFormatter::getAddNoDefs() const { return d->addNoDefs_; } // --------------------------------------------------------------------------- void PROJStringFormatter::addParam(const std::string ¶mName) { if (d->steps_.empty()) { d->addStep(); } d->steps_.back().paramValues.push_back(Step::KeyValue(paramName)); } // --------------------------------------------------------------------------- void PROJStringFormatter::addParam(const char *paramName, int val) { addParam(std::string(paramName), val); } void PROJStringFormatter::addParam(const std::string ¶mName, int val) { addParam(paramName, internal::toString(val)); } // --------------------------------------------------------------------------- static std::string formatToString(double val) { if (std::abs(val * 10 - std::round(val * 10)) < 1e-8) { // For the purpose of // https://www.epsg-registry.org/export.htm?wkt=urn:ogc:def:crs:EPSG::27561 // Latitude of natural of origin to be properly rounded from 55 grad // to // 49.5 deg val = std::round(val * 10) / 10; } return normalizeSerializedString(internal::toString(val)); } // --------------------------------------------------------------------------- void PROJStringFormatter::addParam(const char *paramName, double val) { addParam(std::string(paramName), val); } void PROJStringFormatter::addParam(const std::string ¶mName, double val) { addParam(paramName, formatToString(val)); } // --------------------------------------------------------------------------- void PROJStringFormatter::addParam(const char *paramName, const std::vector &vals) { std::string paramValue; for (size_t i = 0; i < vals.size(); ++i) { if (i > 0) { paramValue += ','; } paramValue += formatToString(vals[i]); } addParam(paramName, paramValue); } // --------------------------------------------------------------------------- void PROJStringFormatter::addParam(const char *paramName, const char *val) { addParam(std::string(paramName), val); } void PROJStringFormatter::addParam(const char *paramName, const std::string &val) { addParam(std::string(paramName), val); } void PROJStringFormatter::addParam(const std::string ¶mName, const char *val) { addParam(paramName, std::string(val)); } // --------------------------------------------------------------------------- void PROJStringFormatter::addParam(const std::string ¶mName, const std::string &val) { if (d->steps_.empty()) { d->addStep(); } d->steps_.back().paramValues.push_back(Step::KeyValue(paramName, val)); } // --------------------------------------------------------------------------- void PROJStringFormatter::setTOWGS84Parameters( const std::vector ¶ms) { d->toWGS84Parameters_ = params; } // --------------------------------------------------------------------------- const std::vector &PROJStringFormatter::getTOWGS84Parameters() const { return d->toWGS84Parameters_; } // --------------------------------------------------------------------------- std::set PROJStringFormatter::getUsedGridNames() const { std::set res; for (const auto &step : d->steps_) { for (const auto ¶m : step.paramValues) { if (param.keyEquals("grids") || param.keyEquals("file")) { const auto gridNames = split(param.value, ","); for (const auto &gridName : gridNames) { res.insert(gridName); } } } } return res; } // --------------------------------------------------------------------------- bool PROJStringFormatter::requiresPerCoordinateInputTime() const { for (const auto &step : d->steps_) { if (step.name == "set" && !step.inverted) { for (const auto ¶m : step.paramValues) { if (param.keyEquals("v_4")) { return false; } } } else if (step.name == "helmert") { for (const auto ¶m : step.paramValues) { if (param.keyEquals("t_epoch")) { return true; } } } else if (step.name == "deformation") { for (const auto ¶m : step.paramValues) { if (param.keyEquals("t_epoch")) { return true; } } } else if (step.name == "defmodel") { return true; } } return false; } // --------------------------------------------------------------------------- void PROJStringFormatter::setVDatumExtension(const std::string &filename, const std::string &geoidCRSValue) { d->vDatumExtension_ = filename; d->geoidCRSValue_ = geoidCRSValue; } // --------------------------------------------------------------------------- const std::string &PROJStringFormatter::getVDatumExtension() const { return d->vDatumExtension_; } // --------------------------------------------------------------------------- const std::string &PROJStringFormatter::getGeoidCRSValue() const { return d->geoidCRSValue_; } // --------------------------------------------------------------------------- void PROJStringFormatter::setHDatumExtension(const std::string &filename) { d->hDatumExtension_ = filename; } // --------------------------------------------------------------------------- const std::string &PROJStringFormatter::getHDatumExtension() const { return d->hDatumExtension_; } // --------------------------------------------------------------------------- void PROJStringFormatter::setGeogCRSOfCompoundCRS( const crs::GeographicCRSPtr &crs) { d->geogCRSOfCompoundCRS_ = crs; } // --------------------------------------------------------------------------- const crs::GeographicCRSPtr & PROJStringFormatter::getGeogCRSOfCompoundCRS() const { return d->geogCRSOfCompoundCRS_; } // --------------------------------------------------------------------------- void PROJStringFormatter::setOmitProjLongLatIfPossible(bool omit) { assert(d->omitProjLongLatIfPossible_ ^ omit); d->omitProjLongLatIfPossible_ = omit; } // --------------------------------------------------------------------------- bool PROJStringFormatter::omitProjLongLatIfPossible() const { return d->omitProjLongLatIfPossible_; } // --------------------------------------------------------------------------- void PROJStringFormatter::pushOmitZUnitConversion() { d->omitZUnitConversion_.push_back(true); } // --------------------------------------------------------------------------- void PROJStringFormatter::popOmitZUnitConversion() { assert(d->omitZUnitConversion_.size() > 1); d->omitZUnitConversion_.pop_back(); } // --------------------------------------------------------------------------- bool PROJStringFormatter::omitZUnitConversion() const { return d->omitZUnitConversion_.back(); } // --------------------------------------------------------------------------- void PROJStringFormatter::pushOmitHorizontalConversionInVertTransformation() { d->omitHorizontalConversionInVertTransformation_.push_back(true); } // --------------------------------------------------------------------------- void PROJStringFormatter::popOmitHorizontalConversionInVertTransformation() { assert(d->omitHorizontalConversionInVertTransformation_.size() > 1); d->omitHorizontalConversionInVertTransformation_.pop_back(); } // --------------------------------------------------------------------------- bool PROJStringFormatter::omitHorizontalConversionInVertTransformation() const { return d->omitHorizontalConversionInVertTransformation_.back(); } // --------------------------------------------------------------------------- void PROJStringFormatter::setLegacyCRSToCRSContext(bool legacyContext) { d->legacyCRSToCRSContext_ = legacyContext; } // --------------------------------------------------------------------------- bool PROJStringFormatter::getLegacyCRSToCRSContext() const { return d->legacyCRSToCRSContext_; } // --------------------------------------------------------------------------- /** Asks for a "normalized" output during toString(), aimed at comparing two * strings for equivalence. * * This consists for now in sorting the +key=value option in lexicographic * order. */ PROJStringFormatter &PROJStringFormatter::setNormalizeOutput() { d->normalizeOutput_ = true; return *this; } // --------------------------------------------------------------------------- const DatabaseContextPtr &PROJStringFormatter::databaseContext() const { return d->dbContext_; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PROJStringParser::Private { DatabaseContextPtr dbContext_{}; PJ_CONTEXT *ctx_{}; bool usePROJ4InitRules_ = false; std::vector warningList_{}; std::string projString_{}; std::vector steps_{}; std::vector globalParamValues_{}; std::string title_{}; bool ignoreNadgrids_ = false; template // cppcheck-suppress functionStatic bool hasParamValue(Step &step, const T key) { for (auto &pair : globalParamValues_) { if (ci_equal(pair.key, key)) { pair.usedByParser = true; return true; } } for (auto &pair : step.paramValues) { if (ci_equal(pair.key, key)) { pair.usedByParser = true; return true; } } return false; } template // cppcheck-suppress functionStatic const std::string &getGlobalParamValue(T key) { for (auto &pair : globalParamValues_) { if (ci_equal(pair.key, key)) { pair.usedByParser = true; return pair.value; } } return emptyString; } template // cppcheck-suppress functionStatic const std::string &getParamValue(Step &step, const T key) { for (auto &pair : globalParamValues_) { if (ci_equal(pair.key, key)) { pair.usedByParser = true; return pair.value; } } for (auto &pair : step.paramValues) { if (ci_equal(pair.key, key)) { pair.usedByParser = true; return pair.value; } } return emptyString; } static const std::string &getParamValueK(Step &step) { for (auto &pair : step.paramValues) { if (ci_equal(pair.key, "k") || ci_equal(pair.key, "k_0")) { pair.usedByParser = true; return pair.value; } } return emptyString; } // cppcheck-suppress functionStatic bool hasUnusedParameters(const Step &step) const { if (steps_.size() == 1) { for (const auto &pair : step.paramValues) { if (pair.key != "no_defs" && !pair.usedByParser) { return true; } } } return false; } // cppcheck-suppress functionStatic std::string guessBodyName(double a); PrimeMeridianNNPtr buildPrimeMeridian(Step &step); GeodeticReferenceFrameNNPtr buildDatum(Step &step, const std::string &title); GeodeticCRSNNPtr buildGeodeticCRS(int iStep, int iUnitConvert, int iAxisSwap, bool ignorePROJAxis); GeodeticCRSNNPtr buildGeocentricCRS(int iStep, int iUnitConvert); CRSNNPtr buildProjectedCRS(int iStep, const GeodeticCRSNNPtr &geogCRS, int iUnitConvert, int iAxisSwap); CRSNNPtr buildBoundOrCompoundCRSIfNeeded(int iStep, CRSNNPtr crs); UnitOfMeasure buildUnit(Step &step, const std::string &unitsParamName, const std::string &toMeterParamName); enum class AxisType { REGULAR, NORTH_POLE, SOUTH_POLE }; std::vector processAxisSwap(Step &step, const UnitOfMeasure &unit, int iAxisSwap, AxisType axisType, bool ignorePROJAxis); EllipsoidalCSNNPtr buildEllipsoidalCS(int iStep, int iUnitConvert, int iAxisSwap, bool ignorePROJAxis); SphericalCSNNPtr buildSphericalCS(int iStep, int iUnitConvert, int iAxisSwap, bool ignorePROJAxis); }; //! @endcond // --------------------------------------------------------------------------- PROJStringParser::PROJStringParser() : d(std::make_unique()) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PROJStringParser::~PROJStringParser() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Attach a database context, to allow queries in it if needed. */ PROJStringParser & PROJStringParser::attachDatabaseContext(const DatabaseContextPtr &dbContext) { d->dbContext_ = dbContext; return *this; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PROJStringParser &PROJStringParser::attachContext(PJ_CONTEXT *ctx) { d->ctx_ = ctx; return *this; } //! @endcond // --------------------------------------------------------------------------- /** \brief Set how init=epsg:XXXX syntax should be interpreted. * * @param enable When set to true, * init=epsg:XXXX syntax will be allowed and will be interpreted according to * PROJ.4 and PROJ.5 rules, that is geodeticCRS will have longitude, latitude * order and will expect/output coordinates in radians. ProjectedCRS will have * easting, northing axis order (except the ones with Transverse Mercator South * Orientated projection). */ PROJStringParser &PROJStringParser::setUsePROJ4InitRules(bool enable) { d->usePROJ4InitRules_ = enable; return *this; } // --------------------------------------------------------------------------- /** \brief Return the list of warnings found during parsing. */ std::vector PROJStringParser::warningList() const { return d->warningList_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- static const struct LinearUnitDesc { const char *projName; const char *convToMeter; const char *name; int epsgCode; } linearUnitDescs[] = { {"mm", "0.001", "millimetre", 1025}, {"cm", "0.01", "centimetre", 1033}, {"m", "1.0", "metre", 9001}, {"meter", "1.0", "metre", 9001}, // alternative {"metre", "1.0", "metre", 9001}, // alternative {"ft", "0.3048", "foot", 9002}, {"us-ft", "0.3048006096012192", "US survey foot", 9003}, {"fath", "1.8288", "fathom", 9014}, {"kmi", "1852", "nautical mile", 9030}, {"us-ch", "20.11684023368047", "US survey chain", 9033}, {"us-mi", "1609.347218694437", "US survey mile", 9035}, {"km", "1000.0", "kilometre", 9036}, {"ind-ft", "0.30479841", "Indian foot (1937)", 9081}, {"ind-yd", "0.91439523", "Indian yard (1937)", 9085}, {"mi", "1609.344", "Statute mile", 9093}, {"yd", "0.9144", "yard", 9096}, {"ch", "20.1168", "chain", 9097}, {"link", "0.201168", "link", 9098}, {"dm", "0.1", "decimetre", 0}, // no EPSG equivalent {"in", "0.0254", "inch", 0}, // no EPSG equivalent {"us-in", "0.025400050800101", "US survey inch", 0}, // no EPSG equivalent {"us-yd", "0.914401828803658", "US survey yard", 0}, // no EPSG equivalent {"ind-ch", "20.11669506", "Indian chain", 0}, // no EPSG equivalent }; static const LinearUnitDesc *getLinearUnits(const std::string &projName) { for (const auto &desc : linearUnitDescs) { if (desc.projName == projName) return &desc; } return nullptr; } static const LinearUnitDesc *getLinearUnits(double toMeter) { for (const auto &desc : linearUnitDescs) { if (std::fabs(c_locale_stod(desc.convToMeter) - toMeter) < 1e-10 * toMeter) { return &desc; } } return nullptr; } // --------------------------------------------------------------------------- static UnitOfMeasure _buildUnit(const LinearUnitDesc *unitsMatch) { std::string unitsCode; if (unitsMatch->epsgCode) { std::ostringstream buffer; buffer.imbue(std::locale::classic()); buffer << unitsMatch->epsgCode; unitsCode = buffer.str(); } return UnitOfMeasure( unitsMatch->name, c_locale_stod(unitsMatch->convToMeter), UnitOfMeasure::Type::LINEAR, unitsMatch->epsgCode ? Identifier::EPSG : std::string(), unitsCode); } // --------------------------------------------------------------------------- static UnitOfMeasure _buildUnit(double to_meter_value) { // TODO: look-up in EPSG catalog if (to_meter_value == 0) { throw ParsingException("invalid unit value"); } return UnitOfMeasure("unknown", to_meter_value, UnitOfMeasure::Type::LINEAR); } // --------------------------------------------------------------------------- UnitOfMeasure PROJStringParser::Private::buildUnit(Step &step, const std::string &unitsParamName, const std::string &toMeterParamName) { UnitOfMeasure unit = UnitOfMeasure::METRE; const LinearUnitDesc *unitsMatch = nullptr; const auto &projUnits = getParamValue(step, unitsParamName); if (!projUnits.empty()) { unitsMatch = getLinearUnits(projUnits); if (unitsMatch == nullptr) { throw ParsingException("unhandled " + unitsParamName + "=" + projUnits); } } const auto &toMeter = getParamValue(step, toMeterParamName); if (!toMeter.empty()) { double to_meter_value; try { to_meter_value = c_locale_stod(toMeter); } catch (const std::invalid_argument &) { throw ParsingException("invalid value for " + toMeterParamName); } unitsMatch = getLinearUnits(to_meter_value); if (unitsMatch == nullptr) { unit = _buildUnit(to_meter_value); } } if (unitsMatch) { unit = _buildUnit(unitsMatch); } return unit; } // --------------------------------------------------------------------------- static const struct DatumDesc { const char *projName; const char *gcsName; int gcsCode; const char *datumName; int datumCode; const char *ellipsoidName; int ellipsoidCode; double a; double rf; } datumDescs[] = { {"GGRS87", "GGRS87", 4121, "Greek Geodetic Reference System 1987", 6121, "GRS 1980", 7019, 6378137, 298.257222101}, {"potsdam", "DHDN", 4314, "Deutsches Hauptdreiecksnetz", 6314, "Bessel 1841", 7004, 6377397.155, 299.1528128}, {"carthage", "Carthage", 4223, "Carthage", 6223, "Clarke 1880 (IGN)", 7011, 6378249.2, 293.4660213}, {"hermannskogel", "MGI", 4312, "Militar-Geographische Institut", 6312, "Bessel 1841", 7004, 6377397.155, 299.1528128}, {"ire65", "TM65", 4299, "TM65", 6299, "Airy Modified 1849", 7002, 6377340.189, 299.3249646}, {"nzgd49", "NZGD49", 4272, "New Zealand Geodetic Datum 1949", 6272, "International 1924", 7022, 6378388, 297}, {"OSGB36", "OSGB 1936", 4277, "OSGB 1936", 6277, "Airy 1830", 7001, 6377563.396, 299.3249646}, }; // --------------------------------------------------------------------------- static bool isGeographicStep(const std::string &name) { return name == "longlat" || name == "lonlat" || name == "latlong" || name == "latlon"; } // --------------------------------------------------------------------------- static bool isGeocentricStep(const std::string &name) { return name == "geocent" || name == "cart"; } // --------------------------------------------------------------------------- static bool isTopocentricStep(const std::string &name) { return name == "topocentric"; } // --------------------------------------------------------------------------- static bool isProjectedStep(const std::string &name) { if (name == "etmerc" || name == "utm" || !getMappingsFromPROJName(name).empty()) { return true; } // IMPROVE ME: have a better way of distinguishing projections from // other // transformations. if (name == "pipeline" || name == "geoc" || name == "deformation" || name == "helmert" || name == "hgridshift" || name == "molodensky" || name == "vgridshift") { return false; } const auto *operations = proj_list_operations(); for (int i = 0; operations[i].id != nullptr; ++i) { if (name == operations[i].id) { return true; } } return false; } // --------------------------------------------------------------------------- static PropertyMap createMapWithUnknownName() { return PropertyMap().set(common::IdentifiedObject::NAME_KEY, "unknown"); } // --------------------------------------------------------------------------- PrimeMeridianNNPtr PROJStringParser::Private::buildPrimeMeridian(Step &step) { PrimeMeridianNNPtr pm = PrimeMeridian::GREENWICH; const auto &pmStr = getParamValue(step, "pm"); if (!pmStr.empty()) { char *end; double pmValue = dmstor(pmStr.c_str(), &end) * RAD_TO_DEG; if (pmValue != HUGE_VAL && *end == '\0') { pm = PrimeMeridian::create(createMapWithUnknownName(), Angle(pmValue)); } else { bool found = false; if (pmStr == "paris") { found = true; pm = PrimeMeridian::PARIS; } auto proj_prime_meridians = proj_list_prime_meridians(); for (int i = 0; !found && proj_prime_meridians[i].id != nullptr; i++) { if (pmStr == proj_prime_meridians[i].id) { found = true; std::string name = static_cast(::toupper(pmStr[0])) + pmStr.substr(1); pmValue = dmstor(proj_prime_meridians[i].defn, nullptr) * RAD_TO_DEG; pm = PrimeMeridian::create( PropertyMap().set(IdentifiedObject::NAME_KEY, name), Angle(pmValue)); break; } } if (!found) { throw ParsingException("unknown pm " + pmStr); } } } return pm; } // --------------------------------------------------------------------------- std::string PROJStringParser::Private::guessBodyName(double a) { auto ret = Ellipsoid::guessBodyName(dbContext_, a); if (ret == NON_EARTH_BODY && dbContext_ == nullptr && ctx_ != nullptr) { dbContext_ = ctx_->get_cpp_context()->getDatabaseContext().as_nullable(); if (dbContext_) { ret = Ellipsoid::guessBodyName(dbContext_, a); } } return ret; } // --------------------------------------------------------------------------- GeodeticReferenceFrameNNPtr PROJStringParser::Private::buildDatum(Step &step, const std::string &title) { std::string ellpsStr = getParamValue(step, "ellps"); const auto &datumStr = getParamValue(step, "datum"); const auto &RStr = getParamValue(step, "R"); const auto &aStr = getParamValue(step, "a"); const auto &bStr = getParamValue(step, "b"); const auto &rfStr = getParamValue(step, "rf"); const auto &fStr = getParamValue(step, "f"); const auto &esStr = getParamValue(step, "es"); const auto &eStr = getParamValue(step, "e"); double a = -1.0; double b = -1.0; double rf = -1.0; const util::optional optionalEmptyString{}; const bool numericParamPresent = !RStr.empty() || !aStr.empty() || !bStr.empty() || !rfStr.empty() || !fStr.empty() || !esStr.empty() || !eStr.empty(); if (!numericParamPresent && ellpsStr.empty() && datumStr.empty() && (step.name == "krovak" || step.name == "mod_krovak")) { ellpsStr = "bessel"; } PrimeMeridianNNPtr pm(buildPrimeMeridian(step)); PropertyMap grfMap; const auto &nadgrids = getParamValue(step, "nadgrids"); const auto &towgs84 = getParamValue(step, "towgs84"); std::string datumNameSuffix; if (!nadgrids.empty()) { datumNameSuffix = " using nadgrids=" + nadgrids; } else if (!towgs84.empty()) { datumNameSuffix = " using towgs84=" + towgs84; } // It is arguable that we allow the prime meridian of a datum defined by // its name to be overridden, but this is found at least in a regression // test // of GDAL. So let's keep the ellipsoid part of the datum in that case and // use the specified prime meridian. const auto overridePmIfNeeded = [&pm, &datumNameSuffix](const GeodeticReferenceFrameNNPtr &grf) { if (pm->_isEquivalentTo(PrimeMeridian::GREENWICH.get())) { return grf; } else { return GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, UNKNOWN_BASED_ON + grf->ellipsoid()->nameStr() + " ellipsoid" + datumNameSuffix), grf->ellipsoid(), grf->anchorDefinition(), pm); } }; // R take precedence if (!RStr.empty()) { double R; try { R = c_locale_stod(RStr); } catch (const std::invalid_argument &) { throw ParsingException("Invalid R value"); } auto ellipsoid = Ellipsoid::createSphere(createMapWithUnknownName(), Length(R), guessBodyName(R)); return GeodeticReferenceFrame::create( grfMap.set(IdentifiedObject::NAME_KEY, title.empty() ? "unknown" + datumNameSuffix : title), ellipsoid, optionalEmptyString, fixupPrimeMeridan(ellipsoid, pm)); } if (!datumStr.empty()) { auto l_datum = [&datumStr, &overridePmIfNeeded, &grfMap, &optionalEmptyString, &pm]() { if (datumStr == "WGS84") { return overridePmIfNeeded(GeodeticReferenceFrame::EPSG_6326); } else if (datumStr == "NAD83") { return overridePmIfNeeded(GeodeticReferenceFrame::EPSG_6269); } else if (datumStr == "NAD27") { return overridePmIfNeeded(GeodeticReferenceFrame::EPSG_6267); } else { for (const auto &datumDesc : datumDescs) { if (datumStr == datumDesc.projName) { (void)datumDesc.gcsName; // to please cppcheck (void)datumDesc.gcsCode; // to please cppcheck auto ellipsoid = Ellipsoid::createFlattenedSphere( grfMap .set(IdentifiedObject::NAME_KEY, datumDesc.ellipsoidName) .set(Identifier::CODESPACE_KEY, Identifier::EPSG) .set(Identifier::CODE_KEY, datumDesc.ellipsoidCode), Length(datumDesc.a), Scale(datumDesc.rf)); return GeodeticReferenceFrame::create( grfMap .set(IdentifiedObject::NAME_KEY, datumDesc.datumName) .set(Identifier::CODESPACE_KEY, Identifier::EPSG) .set(Identifier::CODE_KEY, datumDesc.datumCode), ellipsoid, optionalEmptyString, pm); } } } throw ParsingException("unknown datum " + datumStr); }(); if (!numericParamPresent) { return l_datum; } a = l_datum->ellipsoid()->semiMajorAxis().getSIValue(); rf = l_datum->ellipsoid()->computedInverseFlattening(); } else if (!ellpsStr.empty()) { auto l_datum = [&ellpsStr, &title, &grfMap, &optionalEmptyString, &pm, &datumNameSuffix]() { if (ellpsStr == "WGS84") { return GeodeticReferenceFrame::create( grfMap.set(IdentifiedObject::NAME_KEY, title.empty() ? std::string(UNKNOWN_BASED_ON) .append("WGS 84 ellipsoid") .append(datumNameSuffix) : title), Ellipsoid::WGS84, optionalEmptyString, pm); } else if (ellpsStr == "GRS80") { return GeodeticReferenceFrame::create( grfMap.set(IdentifiedObject::NAME_KEY, title.empty() ? std::string(UNKNOWN_BASED_ON) .append("GRS 1980 ellipsoid") .append(datumNameSuffix) : title), Ellipsoid::GRS1980, optionalEmptyString, pm); } else { auto proj_ellps = proj_list_ellps(); for (int i = 0; proj_ellps[i].id != nullptr; i++) { if (ellpsStr == proj_ellps[i].id) { assert(strncmp(proj_ellps[i].major, "a=", 2) == 0); const double a_iter = c_locale_stod(proj_ellps[i].major + 2); EllipsoidPtr ellipsoid; PropertyMap ellpsMap; if (strncmp(proj_ellps[i].ell, "b=", 2) == 0) { const double b_iter = c_locale_stod(proj_ellps[i].ell + 2); ellipsoid = Ellipsoid::createTwoAxis( ellpsMap.set(IdentifiedObject::NAME_KEY, proj_ellps[i].name), Length(a_iter), Length(b_iter)) .as_nullable(); } else { assert(strncmp(proj_ellps[i].ell, "rf=", 3) == 0); const double rf_iter = c_locale_stod(proj_ellps[i].ell + 3); ellipsoid = Ellipsoid::createFlattenedSphere( ellpsMap.set(IdentifiedObject::NAME_KEY, proj_ellps[i].name), Length(a_iter), Scale(rf_iter)) .as_nullable(); } return GeodeticReferenceFrame::create( grfMap.set(IdentifiedObject::NAME_KEY, title.empty() ? std::string(UNKNOWN_BASED_ON) .append(proj_ellps[i].name) .append(" ellipsoid") .append(datumNameSuffix) : title), NN_NO_CHECK(ellipsoid), optionalEmptyString, pm); } } throw ParsingException("unknown ellipsoid " + ellpsStr); } }(); if (!numericParamPresent) { return l_datum; } a = l_datum->ellipsoid()->semiMajorAxis().getSIValue(); if (l_datum->ellipsoid()->semiMinorAxis().has_value()) { b = l_datum->ellipsoid()->semiMinorAxis()->getSIValue(); } else { rf = l_datum->ellipsoid()->computedInverseFlattening(); } } if (!aStr.empty()) { try { a = c_locale_stod(aStr); } catch (const std::invalid_argument &) { throw ParsingException("Invalid a value"); } } const auto createGRF = [&grfMap, &title, &optionalEmptyString, &datumNameSuffix, &pm](const EllipsoidNNPtr &ellipsoid) { std::string datumName(title); if (title.empty()) { if (ellipsoid->nameStr() != "unknown") { datumName = UNKNOWN_BASED_ON; datumName += ellipsoid->nameStr(); datumName += " ellipsoid"; } else { datumName = "unknown"; } datumName += datumNameSuffix; } return GeodeticReferenceFrame::create( grfMap.set(IdentifiedObject::NAME_KEY, datumName), ellipsoid, optionalEmptyString, fixupPrimeMeridan(ellipsoid, pm)); }; if (a > 0 && (b > 0 || !bStr.empty())) { if (!bStr.empty()) { try { b = c_locale_stod(bStr); } catch (const std::invalid_argument &) { throw ParsingException("Invalid b value"); } } auto ellipsoid = Ellipsoid::createTwoAxis(createMapWithUnknownName(), Length(a), Length(b), guessBodyName(a)) ->identify(); return createGRF(ellipsoid); } else if (a > 0 && (rf >= 0 || !rfStr.empty())) { if (!rfStr.empty()) { try { rf = c_locale_stod(rfStr); } catch (const std::invalid_argument &) { throw ParsingException("Invalid rf value"); } } auto ellipsoid = Ellipsoid::createFlattenedSphere( createMapWithUnknownName(), Length(a), Scale(rf), guessBodyName(a)) ->identify(); return createGRF(ellipsoid); } else if (a > 0 && !fStr.empty()) { double f; try { f = c_locale_stod(fStr); } catch (const std::invalid_argument &) { throw ParsingException("Invalid f value"); } auto ellipsoid = Ellipsoid::createFlattenedSphere( createMapWithUnknownName(), Length(a), Scale(f != 0.0 ? 1.0 / f : 0.0), guessBodyName(a)) ->identify(); return createGRF(ellipsoid); } else if (a > 0 && !eStr.empty()) { double e; try { e = c_locale_stod(eStr); } catch (const std::invalid_argument &) { throw ParsingException("Invalid e value"); } double alpha = asin(e); /* angular eccentricity */ double f = 1 - cos(alpha); /* = 1 - sqrt (1 - es); */ auto ellipsoid = Ellipsoid::createFlattenedSphere( createMapWithUnknownName(), Length(a), Scale(f != 0.0 ? 1.0 / f : 0.0), guessBodyName(a)) ->identify(); return createGRF(ellipsoid); } else if (a > 0 && !esStr.empty()) { double es; try { es = c_locale_stod(esStr); } catch (const std::invalid_argument &) { throw ParsingException("Invalid es value"); } double f = 1 - sqrt(1 - es); auto ellipsoid = Ellipsoid::createFlattenedSphere( createMapWithUnknownName(), Length(a), Scale(f != 0.0 ? 1.0 / f : 0.0), guessBodyName(a)) ->identify(); return createGRF(ellipsoid); } // If only a is specified, create a sphere if (a > 0 && bStr.empty() && rfStr.empty() && eStr.empty() && esStr.empty()) { auto ellipsoid = Ellipsoid::createSphere(createMapWithUnknownName(), Length(a), guessBodyName(a)); return createGRF(ellipsoid); } if (!bStr.empty() && aStr.empty()) { throw ParsingException("b found, but a missing"); } if (!rfStr.empty() && aStr.empty()) { throw ParsingException("rf found, but a missing"); } if (!fStr.empty() && aStr.empty()) { throw ParsingException("f found, but a missing"); } if (!eStr.empty() && aStr.empty()) { throw ParsingException("e found, but a missing"); } if (!esStr.empty() && aStr.empty()) { throw ParsingException("es found, but a missing"); } return overridePmIfNeeded(GeodeticReferenceFrame::EPSG_6326); } // --------------------------------------------------------------------------- static const MeridianPtr nullMeridian{}; static CoordinateSystemAxisNNPtr createAxis(const std::string &name, const std::string &abbreviation, const AxisDirection &direction, const common::UnitOfMeasure &unit, const MeridianPtr &meridian = nullMeridian) { return CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, name), abbreviation, direction, unit, meridian); } std::vector PROJStringParser::Private::processAxisSwap(Step &step, const UnitOfMeasure &unit, int iAxisSwap, AxisType axisType, bool ignorePROJAxis) { assert(iAxisSwap < 0 || ci_equal(steps_[iAxisSwap].name, "axisswap")); const bool isGeographic = unit.type() == UnitOfMeasure::Type::ANGULAR; const bool isSpherical = isGeographic && hasParamValue(step, "geoc"); const auto &eastName = isSpherical ? "Planetocentric longitude" : isGeographic ? AxisName::Longitude : AxisName::Easting; const auto &eastAbbev = isSpherical ? "V" : isGeographic ? AxisAbbreviation::lon : AxisAbbreviation::E; const auto &eastDir = isGeographic ? AxisDirection::EAST : (axisType == AxisType::NORTH_POLE) ? AxisDirection::SOUTH : (axisType == AxisType::SOUTH_POLE) ? AxisDirection::NORTH : AxisDirection::EAST; CoordinateSystemAxisNNPtr east = createAxis( eastName, eastAbbev, eastDir, unit, (!isGeographic && (axisType == AxisType::NORTH_POLE || axisType == AxisType::SOUTH_POLE)) ? Meridian::create(Angle(90, UnitOfMeasure::DEGREE)).as_nullable() : nullMeridian); const auto &northName = isSpherical ? "Planetocentric latitude" : isGeographic ? AxisName::Latitude : AxisName::Northing; const auto &northAbbev = isSpherical ? "U" : isGeographic ? AxisAbbreviation::lat : AxisAbbreviation::N; const auto &northDir = isGeographic ? AxisDirection::NORTH : (axisType == AxisType::NORTH_POLE) ? AxisDirection::SOUTH /*: (axisType == AxisType::SOUTH_POLE) ? AxisDirection::NORTH*/ : AxisDirection::NORTH; const CoordinateSystemAxisNNPtr north = createAxis( northName, northAbbev, northDir, unit, isGeographic ? nullMeridian : (axisType == AxisType::NORTH_POLE) ? Meridian::create(Angle(180, UnitOfMeasure::DEGREE)).as_nullable() : (axisType == AxisType::SOUTH_POLE) ? Meridian::create(Angle(0, UnitOfMeasure::DEGREE)).as_nullable() : nullMeridian); CoordinateSystemAxisNNPtr west = createAxis(isSpherical ? "Planetocentric longitude" : isGeographic ? AxisName::Longitude : AxisName::Westing, isSpherical ? "V" : isGeographic ? AxisAbbreviation::lon : std::string(), AxisDirection::WEST, unit); CoordinateSystemAxisNNPtr south = createAxis(isSpherical ? "Planetocentric latitude" : isGeographic ? AxisName::Latitude : AxisName::Southing, isSpherical ? "U" : isGeographic ? AxisAbbreviation::lat : std::string(), AxisDirection::SOUTH, unit); std::vector axis{east, north}; const auto &axisStr = getParamValue(step, "axis"); if (!ignorePROJAxis && !axisStr.empty()) { if (axisStr.size() == 3) { for (int i = 0; i < 2; i++) { if (axisStr[i] == 'n') { axis[i] = north; } else if (axisStr[i] == 's') { axis[i] = south; } else if (axisStr[i] == 'e') { axis[i] = east; } else if (axisStr[i] == 'w') { axis[i] = west; } else { throw ParsingException("Unhandled axis=" + axisStr); } } } else { throw ParsingException("Unhandled axis=" + axisStr); } } else if (iAxisSwap >= 0) { auto &stepAxisSwap = steps_[iAxisSwap]; const auto &orderStr = getParamValue(stepAxisSwap, "order"); auto orderTab = split(orderStr, ','); if (orderTab.size() != 2) { throw ParsingException("Unhandled order=" + orderStr); } if (stepAxisSwap.inverted) { throw ParsingException("Unhandled +inv for +proj=axisswap"); } for (size_t i = 0; i < 2; i++) { if (orderTab[i] == "1") { axis[i] = east; } else if (orderTab[i] == "-1") { axis[i] = west; } else if (orderTab[i] == "2") { axis[i] = north; } else if (orderTab[i] == "-2") { axis[i] = south; } else { throw ParsingException("Unhandled order=" + orderStr); } } } else if ((step.name == "krovak" || step.name == "mod_krovak") && hasParamValue(step, "czech")) { axis[0] = std::move(west); axis[1] = std::move(south); } return axis; } // --------------------------------------------------------------------------- EllipsoidalCSNNPtr PROJStringParser::Private::buildEllipsoidalCS( int iStep, int iUnitConvert, int iAxisSwap, bool ignorePROJAxis) { auto &step = steps_[iStep]; assert(iUnitConvert < 0 || ci_equal(steps_[iUnitConvert].name, "unitconvert")); UnitOfMeasure angularUnit = UnitOfMeasure::DEGREE; if (iUnitConvert >= 0) { auto &stepUnitConvert = steps_[iUnitConvert]; const std::string *xy_in = &getParamValue(stepUnitConvert, "xy_in"); const std::string *xy_out = &getParamValue(stepUnitConvert, "xy_out"); if (stepUnitConvert.inverted) { std::swap(xy_in, xy_out); } if (iUnitConvert < iStep) { std::swap(xy_in, xy_out); } if (xy_in->empty() || xy_out->empty() || *xy_in != "rad" || (*xy_out != "rad" && *xy_out != "deg" && *xy_out != "grad")) { throw ParsingException("unhandled values for xy_in and/or xy_out"); } if (*xy_out == "rad") { angularUnit = UnitOfMeasure::RADIAN; } else if (*xy_out == "grad") { angularUnit = UnitOfMeasure::GRAD; } } std::vector axis = processAxisSwap( step, angularUnit, iAxisSwap, AxisType::REGULAR, ignorePROJAxis); CoordinateSystemAxisNNPtr up = CoordinateSystemAxis::create( util::PropertyMap().set(IdentifiedObject::NAME_KEY, AxisName::Ellipsoidal_height), AxisAbbreviation::h, AxisDirection::UP, buildUnit(step, "vunits", "vto_meter")); return (!hasParamValue(step, "geoidgrids") && (hasParamValue(step, "vunits") || hasParamValue(step, "vto_meter"))) ? EllipsoidalCS::create(emptyPropertyMap, axis[0], axis[1], up) : EllipsoidalCS::create(emptyPropertyMap, axis[0], axis[1]); } // --------------------------------------------------------------------------- SphericalCSNNPtr PROJStringParser::Private::buildSphericalCS( int iStep, int iUnitConvert, int iAxisSwap, bool ignorePROJAxis) { auto &step = steps_[iStep]; assert(iUnitConvert < 0 || ci_equal(steps_[iUnitConvert].name, "unitconvert")); UnitOfMeasure angularUnit = UnitOfMeasure::DEGREE; if (iUnitConvert >= 0) { auto &stepUnitConvert = steps_[iUnitConvert]; const std::string *xy_in = &getParamValue(stepUnitConvert, "xy_in"); const std::string *xy_out = &getParamValue(stepUnitConvert, "xy_out"); if (stepUnitConvert.inverted) { std::swap(xy_in, xy_out); } if (iUnitConvert < iStep) { std::swap(xy_in, xy_out); } if (xy_in->empty() || xy_out->empty() || *xy_in != "rad" || (*xy_out != "rad" && *xy_out != "deg" && *xy_out != "grad")) { throw ParsingException("unhandled values for xy_in and/or xy_out"); } if (*xy_out == "rad") { angularUnit = UnitOfMeasure::RADIAN; } else if (*xy_out == "grad") { angularUnit = UnitOfMeasure::GRAD; } } std::vector axis = processAxisSwap( step, angularUnit, iAxisSwap, AxisType::REGULAR, ignorePROJAxis); return SphericalCS::create(emptyPropertyMap, axis[0], axis[1]); } // --------------------------------------------------------------------------- static double getNumericValue(const std::string ¶mValue, bool *pHasError = nullptr) { bool success; double value = c_locale_stod(paramValue, success); if (pHasError) *pHasError = !success; return value; } // --------------------------------------------------------------------------- namespace { template inline void ignoreRetVal(T) {} } // namespace GeodeticCRSNNPtr PROJStringParser::Private::buildGeodeticCRS( int iStep, int iUnitConvert, int iAxisSwap, bool ignorePROJAxis) { auto &step = steps_[iStep]; const bool l_isGeographicStep = isGeographicStep(step.name); const auto &title = l_isGeographicStep ? title_ : emptyString; // units=m is often found in the wild. // No need to create a extension string for this ignoreRetVal(hasParamValue(step, "units")); auto datum = buildDatum(step, title); auto props = PropertyMap().set(IdentifiedObject::NAME_KEY, title.empty() ? "unknown" : title); if (l_isGeographicStep && (hasUnusedParameters(step) || getNumericValue(getParamValue(step, "lon_0")) != 0.0)) { props.set("EXTENSION_PROJ4", projString_); } props.set("IMPLICIT_CS", true); if (!hasParamValue(step, "geoc")) { auto cs = buildEllipsoidalCS(iStep, iUnitConvert, iAxisSwap, ignorePROJAxis); return GeographicCRS::create(props, datum, cs); } else { auto cs = buildSphericalCS(iStep, iUnitConvert, iAxisSwap, ignorePROJAxis); return GeodeticCRS::create(props, datum, cs); } } // --------------------------------------------------------------------------- GeodeticCRSNNPtr PROJStringParser::Private::buildGeocentricCRS(int iStep, int iUnitConvert) { auto &step = steps_[iStep]; assert(isGeocentricStep(step.name) || isTopocentricStep(step.name)); assert(iUnitConvert < 0 || ci_equal(steps_[iUnitConvert].name, "unitconvert")); const auto &title = title_; auto datum = buildDatum(step, title); UnitOfMeasure unit = buildUnit(step, "units", ""); if (iUnitConvert >= 0) { auto &stepUnitConvert = steps_[iUnitConvert]; const std::string *xy_in = &getParamValue(stepUnitConvert, "xy_in"); const std::string *xy_out = &getParamValue(stepUnitConvert, "xy_out"); const std::string *z_in = &getParamValue(stepUnitConvert, "z_in"); const std::string *z_out = &getParamValue(stepUnitConvert, "z_out"); if (stepUnitConvert.inverted) { std::swap(xy_in, xy_out); std::swap(z_in, z_out); } if (xy_in->empty() || xy_out->empty() || *xy_in != "m" || *z_in != "m" || *xy_out != *z_out) { throw ParsingException( "unhandled values for xy_in, z_in, xy_out or z_out"); } const LinearUnitDesc *unitsMatch = nullptr; try { double to_meter_value = c_locale_stod(*xy_out); unitsMatch = getLinearUnits(to_meter_value); if (unitsMatch == nullptr) { unit = _buildUnit(to_meter_value); } } catch (const std::invalid_argument &) { unitsMatch = getLinearUnits(*xy_out); if (!unitsMatch) { throw ParsingException( "unhandled values for xy_in, z_in, xy_out or z_out"); } unit = _buildUnit(unitsMatch); } } auto props = PropertyMap().set(IdentifiedObject::NAME_KEY, title.empty() ? "unknown" : title); auto cs = CartesianCS::createGeocentric(unit); if (hasUnusedParameters(step)) { props.set("EXTENSION_PROJ4", projString_); } return GeodeticCRS::create(props, datum, cs); } // --------------------------------------------------------------------------- CRSNNPtr PROJStringParser::Private::buildBoundOrCompoundCRSIfNeeded(int iStep, CRSNNPtr crs) { auto &step = steps_[iStep]; const auto &nadgrids = getParamValue(step, "nadgrids"); const auto &towgs84 = getParamValue(step, "towgs84"); // nadgrids has the priority over towgs84 if (!ignoreNadgrids_ && !nadgrids.empty()) { crs = BoundCRS::createFromNadgrids(crs, nadgrids); } else if (!towgs84.empty()) { std::vector towgs84Values; const auto tokens = split(towgs84, ','); for (const auto &str : tokens) { try { towgs84Values.push_back(c_locale_stod(str)); } catch (const std::invalid_argument &) { throw ParsingException("Non numerical value in towgs84 clause"); } } if (towgs84Values.size() == 7 && dbContext_) { if (dbContext_->toWGS84AutocorrectWrongValues( towgs84Values[0], towgs84Values[1], towgs84Values[2], towgs84Values[3], towgs84Values[4], towgs84Values[5], towgs84Values[6])) { for (auto &pair : step.paramValues) { if (ci_equal(pair.key, "towgs84")) { pair.value.clear(); for (int i = 0; i < 7; ++i) { if (i > 0) pair.value += ','; pair.value += internal::toString(towgs84Values[i]); } break; } } } } crs = BoundCRS::createFromTOWGS84(crs, towgs84Values); } const auto &geoidgrids = getParamValue(step, "geoidgrids"); if (!geoidgrids.empty()) { auto vdatum = VerticalReferenceFrame::create( PropertyMap().set(common::IdentifiedObject::NAME_KEY, "unknown using geoidgrids=" + geoidgrids)); const UnitOfMeasure unit = buildUnit(step, "vunits", "vto_meter"); auto vcrs = VerticalCRS::create(createMapWithUnknownName(), vdatum, VerticalCS::createGravityRelatedHeight(unit)); CRSNNPtr geogCRS = GeographicCRS::EPSG_4979; // default const auto &geoid_crs = getParamValue(step, "geoid_crs"); if (!geoid_crs.empty()) { if (geoid_crs == "WGS84") { // nothing to do } else if (geoid_crs == "horizontal_crs") { auto geogCRSOfCompoundCRS = crs->extractGeographicCRS(); if (geogCRSOfCompoundCRS && geogCRSOfCompoundCRS->primeMeridian() ->longitude() .getSIValue() == 0 && geogCRSOfCompoundCRS->coordinateSystem() ->axisList()[0] ->unit() == UnitOfMeasure::DEGREE) { geogCRS = geogCRSOfCompoundCRS->promoteTo3D(std::string(), nullptr); } else if (geogCRSOfCompoundCRS) { auto geogCRSOfCompoundCRSDatum = geogCRSOfCompoundCRS->datumNonNull(nullptr); geogCRS = GeographicCRS::create( createMapWithUnknownName(), datum::GeodeticReferenceFrame::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, geogCRSOfCompoundCRSDatum->nameStr() + " (with Greenwich prime meridian)"), geogCRSOfCompoundCRSDatum->ellipsoid(), util::optional(), datum::PrimeMeridian::GREENWICH), EllipsoidalCS::createLongitudeLatitudeEllipsoidalHeight( UnitOfMeasure::DEGREE, UnitOfMeasure::METRE)); } } else { throw ParsingException("Unsupported value for geoid_crs: " "should be 'WGS84' or 'horizontal_crs'"); } } auto transformation = Transformation::createGravityRelatedHeightToGeographic3D( PropertyMap().set(IdentifiedObject::NAME_KEY, "unknown to " + geogCRS->nameStr() + " ellipsoidal height"), VerticalCRS::create(createMapWithUnknownName(), vdatum, VerticalCS::createGravityRelatedHeight( common::UnitOfMeasure::METRE)), geogCRS, nullptr, geoidgrids, std::vector()); auto boundvcrs = BoundCRS::create(vcrs, geogCRS, transformation); crs = CompoundCRS::create(createMapWithUnknownName(), std::vector{crs, boundvcrs}); } return crs; } // --------------------------------------------------------------------------- static double getAngularValue(const std::string ¶mValue, bool *pHasError = nullptr) { char *endptr = nullptr; double value = dmstor(paramValue.c_str(), &endptr) * RAD_TO_DEG; if (value == HUGE_VAL || endptr != paramValue.c_str() + paramValue.size()) { if (pHasError) *pHasError = true; return 0.0; } if (pHasError) *pHasError = false; return value; } // --------------------------------------------------------------------------- static bool is_in_stringlist(const std::string &str, const char *stringlist) { if (str.empty()) return false; const char *haystack = stringlist; while (true) { const char *res = strstr(haystack, str.c_str()); if (res == nullptr) return false; if ((res == stringlist || res[-1] == ',') && (res[str.size()] == ',' || res[str.size()] == '\0')) return true; haystack += str.size(); } } // --------------------------------------------------------------------------- CRSNNPtr PROJStringParser::Private::buildProjectedCRS(int iStep, const GeodeticCRSNNPtr &geodCRS, int iUnitConvert, int iAxisSwap) { auto &step = steps_[iStep]; const auto mappings = getMappingsFromPROJName(step.name); const MethodMapping *mapping = mappings.empty() ? nullptr : mappings[0]; bool foundStrictlyMatchingMapping = false; if (mappings.size() >= 2) { // To distinguish for example +ortho from +ortho +f=0 bool allMappingsHaveAuxParam = true; for (const auto *mappingIter : mappings) { if (mappingIter->proj_name_aux == nullptr) { allMappingsHaveAuxParam = false; } if (mappingIter->proj_name_aux != nullptr && strchr(mappingIter->proj_name_aux, '=') == nullptr && hasParamValue(step, mappingIter->proj_name_aux)) { foundStrictlyMatchingMapping = true; mapping = mappingIter; break; } else if (mappingIter->proj_name_aux != nullptr && strchr(mappingIter->proj_name_aux, '=') != nullptr) { const auto tokens = split(mappingIter->proj_name_aux, '='); if (tokens.size() == 2 && getParamValue(step, tokens[0]) == tokens[1]) { foundStrictlyMatchingMapping = true; mapping = mappingIter; break; } } } if (allMappingsHaveAuxParam && !foundStrictlyMatchingMapping) { mapping = nullptr; } } if (mapping && !foundStrictlyMatchingMapping) { mapping = selectSphericalOrEllipsoidal(mapping, geodCRS); } assert(isProjectedStep(step.name)); assert(iUnitConvert < 0 || ci_equal(steps_[iUnitConvert].name, "unitconvert")); const auto &title = title_; if (!buildPrimeMeridian(step)->longitude()._isEquivalentTo( geodCRS->primeMeridian()->longitude(), util::IComparable::Criterion::EQUIVALENT)) { throw ParsingException("inconsistent pm values between projectedCRS " "and its base geographicalCRS"); } auto axisType = AxisType::REGULAR; bool bWebMercator = false; std::string webMercatorName("WGS 84 / Pseudo-Mercator"); if (step.name == "tmerc" && ((getParamValue(step, "axis") == "wsu" && iAxisSwap < 0) || (iAxisSwap > 0 && getParamValue(steps_[iAxisSwap], "order") == "-1,-2"))) { mapping = getMapping(EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED); } else if (step.name == "etmerc") { mapping = getMapping(EPSG_CODE_METHOD_TRANSVERSE_MERCATOR); } else if (step.name == "lcc") { const auto &lat_0 = getParamValue(step, "lat_0"); const auto &lat_1 = getParamValue(step, "lat_1"); const auto &lat_2 = getParamValue(step, "lat_2"); const auto &k = getParamValueK(step); if (lat_2.empty() && !lat_0.empty() && !lat_1.empty()) { if (lat_0 == lat_1 || // For some reason with gcc 5.3.1-14ubuntu2 32bit, the following // comparison returns false even if lat_0 == lat_1. Smells like // a compiler bug getAngularValue(lat_0) == getAngularValue(lat_1)) { mapping = getMapping(EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); } else { mapping = getMapping( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP_VARIANT_B); } } else if (!k.empty() && getNumericValue(k) != 1.0) { mapping = getMapping( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN); } else { mapping = getMapping(EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); } } else if (step.name == "aeqd" && hasParamValue(step, "guam")) { mapping = getMapping(EPSG_CODE_METHOD_GUAM_PROJECTION); } else if (step.name == "geos" && getParamValue(step, "sweep") == "x") { mapping = getMapping(PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X); } else if (step.name == "geos") { mapping = getMapping(PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_Y); } else if (step.name == "omerc") { if (hasParamValue(step, "no_rot")) { mapping = nullptr; } else if (hasParamValue(step, "no_uoff") || hasParamValue(step, "no_off")) { mapping = getMapping(EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A); } else if (hasParamValue(step, "lat_1") && hasParamValue(step, "lon_1") && hasParamValue(step, "lat_2") && hasParamValue(step, "lon_2")) { mapping = getMapping( PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN); } else { mapping = getMapping(EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B); } } else if (step.name == "somerc") { mapping = getMapping(EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B); if (!hasParamValue(step, "alpha") && !hasParamValue(step, "gamma") && !hasParamValue(step, "lonc")) { step.paramValues.emplace_back(Step::KeyValue("alpha", "90")); step.paramValues.emplace_back(Step::KeyValue("gamma", "90")); step.paramValues.emplace_back( Step::KeyValue("lonc", getParamValue(step, "lon_0"))); } } else if (step.name == "krovak" && ((iAxisSwap < 0 && getParamValue(step, "axis") == "swu" && !hasParamValue(step, "czech")) || (iAxisSwap > 0 && getParamValue(steps_[iAxisSwap], "order") == "-2,-1" && !hasParamValue(step, "czech")))) { mapping = getMapping(EPSG_CODE_METHOD_KROVAK); } else if (step.name == "krovak" && iAxisSwap < 0 && hasParamValue(step, "czech") && !hasParamValue(step, "axis")) { mapping = getMapping(EPSG_CODE_METHOD_KROVAK); } else if (step.name == "mod_krovak" && ((iAxisSwap < 0 && getParamValue(step, "axis") == "swu" && !hasParamValue(step, "czech")) || (iAxisSwap > 0 && getParamValue(steps_[iAxisSwap], "order") == "-2,-1" && !hasParamValue(step, "czech")))) { mapping = getMapping(EPSG_CODE_METHOD_KROVAK_MODIFIED); } else if (step.name == "mod_krovak" && iAxisSwap < 0 && hasParamValue(step, "czech") && !hasParamValue(step, "axis")) { mapping = getMapping(EPSG_CODE_METHOD_KROVAK_MODIFIED); } else if (step.name == "merc") { if (hasParamValue(step, "a") && hasParamValue(step, "b") && getParamValue(step, "a") == getParamValue(step, "b") && (!hasParamValue(step, "lat_ts") || getAngularValue(getParamValue(step, "lat_ts")) == 0.0) && getNumericValue(getParamValueK(step)) == 1.0 && getParamValue(step, "nadgrids") == "@null") { mapping = getMapping( EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR); for (size_t i = 0; i < step.paramValues.size(); ++i) { if (ci_equal(step.paramValues[i].key, "nadgrids")) { ignoreNadgrids_ = true; break; } } if (getNumericValue(getParamValue(step, "a")) == 6378137 && getAngularValue(getParamValue(step, "lon_0")) == 0.0 && getAngularValue(getParamValue(step, "lat_0")) == 0.0 && getAngularValue(getParamValue(step, "x_0")) == 0.0 && getAngularValue(getParamValue(step, "y_0")) == 0.0) { bWebMercator = true; if (hasParamValue(step, "units") && getParamValue(step, "units") != "m") { webMercatorName += " (unit " + getParamValue(step, "units") + ')'; } } } else if (hasParamValue(step, "lat_ts")) { if (hasParamValue(step, "R_C") && !geodCRS->ellipsoid()->isSphere() && getAngularValue(getParamValue(step, "lat_ts")) != 0) { throw ParsingException("lat_ts != 0 not supported for " "spherical Mercator on an ellipsoid"); } mapping = getMapping(EPSG_CODE_METHOD_MERCATOR_VARIANT_B); } else if (hasParamValue(step, "R_C")) { const auto &k = getParamValueK(step); if (!k.empty() && getNumericValue(k) != 1.0) { if (geodCRS->ellipsoid()->isSphere()) { mapping = getMapping(EPSG_CODE_METHOD_MERCATOR_VARIANT_A); } else { throw ParsingException( "k_0 != 1 not supported for spherical Mercator on an " "ellipsoid"); } } else { mapping = getMapping(EPSG_CODE_METHOD_MERCATOR_SPHERICAL); } } else { mapping = getMapping(EPSG_CODE_METHOD_MERCATOR_VARIANT_A); } } else if (step.name == "stere") { if (hasParamValue(step, "lat_0") && std::fabs(std::fabs(getAngularValue(getParamValue(step, "lat_0"))) - 90.0) < 1e-10) { const double lat_0 = getAngularValue(getParamValue(step, "lat_0")); if (lat_0 > 0) { axisType = AxisType::NORTH_POLE; } else { axisType = AxisType::SOUTH_POLE; } const auto &lat_ts = getParamValue(step, "lat_ts"); const auto &k = getParamValueK(step); if (!lat_ts.empty() && std::fabs(getAngularValue(lat_ts) - lat_0) > 1e-10 && !k.empty() && std::fabs(getNumericValue(k) - 1) > 1e-10) { throw ParsingException("lat_ts != lat_0 and k != 1 not " "supported for Polar Stereographic"); } if (!lat_ts.empty() && (k.empty() || std::fabs(getNumericValue(k) - 1) < 1e-10)) { mapping = getMapping(EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B); } else { mapping = getMapping(EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A); } } else { mapping = getMapping(PROJ_WKT2_NAME_METHOD_STEREOGRAPHIC); } } else if (step.name == "laea") { if (hasParamValue(step, "lat_0") && std::fabs(std::fabs(getAngularValue(getParamValue(step, "lat_0"))) - 90.0) < 1e-10) { const double lat_0 = getAngularValue(getParamValue(step, "lat_0")); if (lat_0 > 0) { axisType = AxisType::NORTH_POLE; } else { axisType = AxisType::SOUTH_POLE; } } } else if (step.name == "ortho") { const std::string &k = getParamValueK(step); if ((!k.empty() && getNumericValue(k) != 1.0) || (hasParamValue(step, "alpha") && getNumericValue(getParamValue(step, "alpha")) != 0.0)) { mapping = getMapping(EPSG_CODE_METHOD_LOCAL_ORTHOGRAPHIC); } } UnitOfMeasure unit = buildUnit(step, "units", "to_meter"); if (iUnitConvert >= 0) { auto &stepUnitConvert = steps_[iUnitConvert]; const std::string *xy_in = &getParamValue(stepUnitConvert, "xy_in"); const std::string *xy_out = &getParamValue(stepUnitConvert, "xy_out"); if (stepUnitConvert.inverted) { std::swap(xy_in, xy_out); } if (xy_in->empty() || xy_out->empty() || *xy_in != "m") { if (step.name != "ob_tran") { throw ParsingException( "unhandled values for xy_in and/or xy_out"); } } const LinearUnitDesc *unitsMatch = nullptr; try { double to_meter_value = c_locale_stod(*xy_out); unitsMatch = getLinearUnits(to_meter_value); if (unitsMatch == nullptr) { unit = _buildUnit(to_meter_value); } } catch (const std::invalid_argument &) { unitsMatch = getLinearUnits(*xy_out); if (!unitsMatch) { if (step.name != "ob_tran") { throw ParsingException( "unhandled values for xy_in and/or xy_out"); } } else { unit = _buildUnit(unitsMatch); } } } ConversionPtr conv; auto mapWithUnknownName = createMapWithUnknownName(); if (step.name == "utm") { const int zone = std::atoi(getParamValue(step, "zone").c_str()); const bool north = !hasParamValue(step, "south"); conv = Conversion::createUTM(emptyPropertyMap, zone, north).as_nullable(); } else if (mapping) { auto methodMap = PropertyMap().set(IdentifiedObject::NAME_KEY, mapping->wkt2_name); if (mapping->epsg_code) { methodMap.set(Identifier::CODESPACE_KEY, Identifier::EPSG) .set(Identifier::CODE_KEY, mapping->epsg_code); } std::vector parameters; std::vector values; for (int i = 0; mapping->params[i] != nullptr; i++) { const auto *param = mapping->params[i]; std::string proj_name(param->proj_name ? param->proj_name : ""); const std::string *paramValue = (proj_name == "k" || proj_name == "k_0") ? &getParamValueK(step) : !proj_name.empty() ? &getParamValue(step, proj_name) : &emptyString; double value = 0; if (!paramValue->empty()) { bool hasError = false; if (param->unit_type == UnitOfMeasure::Type::ANGULAR) { value = getAngularValue(*paramValue, &hasError); } else { value = getNumericValue(*paramValue, &hasError); } if (hasError) { throw ParsingException("invalid value for " + proj_name); } } // For omerc, if gamma is missing, the default value is // alpha else if (step.name == "omerc" && proj_name == "gamma") { paramValue = &getParamValue(step, "alpha"); if (!paramValue->empty()) { value = getAngularValue(*paramValue); } } else if (step.name == "krovak" || step.name == "mod_krovak") { // Keep it in sync with defaults of krovak.cpp if (param->epsg_code == EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE) { value = 49.5; } else if (param->epsg_code == EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN) { value = 24.833333333333333333; } else if (param->epsg_code == EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS) { value = 30.28813975277777776; } else if ( param->epsg_code == EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL) { value = 78.5; } else if ( param->epsg_code == EPSG_CODE_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL) { value = 0.9999; } } else if (step.name == "cea" && proj_name == "lat_ts") { paramValue = &getParamValueK(step); if (!paramValue->empty()) { bool hasError = false; const double k = getNumericValue(*paramValue, &hasError); if (hasError) { throw ParsingException("invalid value for k/k_0"); } if (k >= 0 && k <= 1) { const double es = geodCRS->ellipsoid()->squaredEccentricity(); if (es < 0 || es == 1) { throw ParsingException("Invalid flattening"); } value = Angle(acos(k * sqrt((1 - es) / (1 - k * k * es))), UnitOfMeasure::RADIAN) .convertToUnit(UnitOfMeasure::DEGREE); } else { throw ParsingException("k/k_0 should be in [0,1]"); } } } else if (param->unit_type == UnitOfMeasure::Type::SCALE) { value = 1; } else if (step.name == "peirce_q" && proj_name == "lat_0") { value = 90; } PropertyMap propertiesParameter; propertiesParameter.set(IdentifiedObject::NAME_KEY, param->wkt2_name); if (param->epsg_code) { propertiesParameter.set(Identifier::CODE_KEY, param->epsg_code); propertiesParameter.set(Identifier::CODESPACE_KEY, Identifier::EPSG); } parameters.push_back( OperationParameter::create(propertiesParameter)); // In PROJ convention, angular parameters are always in degree // and linear parameters always in metre. double valRounded = param->unit_type == UnitOfMeasure::Type::LINEAR ? Length(value, UnitOfMeasure::METRE).convertToUnit(unit) : value; if (std::fabs(valRounded - std::round(valRounded)) < 1e-8) { valRounded = std::round(valRounded); } values.push_back(ParameterValue::create( Measure(valRounded, param->unit_type == UnitOfMeasure::Type::ANGULAR ? UnitOfMeasure::DEGREE : param->unit_type == UnitOfMeasure::Type::LINEAR ? unit : param->unit_type == UnitOfMeasure::Type::SCALE ? UnitOfMeasure::SCALE_UNITY : UnitOfMeasure::NONE))); } if (step.name == "tmerc" && hasParamValue(step, "approx")) { methodMap.set("proj_method", "tmerc approx"); } else if (step.name == "utm" && hasParamValue(step, "approx")) { methodMap.set("proj_method", "utm approx"); } conv = Conversion::create(mapWithUnknownName, methodMap, parameters, values) .as_nullable(); } else { std::vector parameters; std::vector values; std::string methodName = "PROJ " + step.name; for (const auto ¶m : step.paramValues) { if (is_in_stringlist(param.key, "wktext,no_defs,datum,ellps,a,b,R,f,rf," "towgs84,nadgrids,geoidgrids," "units,to_meter,vunits,vto_meter,type")) { continue; } if (param.value.empty()) { methodName += " " + param.key; } else if (isalpha(param.value[0])) { methodName += " " + param.key + "=" + param.value; } else { parameters.push_back(OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, param.key))); bool hasError = false; if (is_in_stringlist(param.key, "x_0,y_0,h,h_0")) { double value = getNumericValue(param.value, &hasError); values.push_back(ParameterValue::create( Measure(value, UnitOfMeasure::METRE))); } else if (is_in_stringlist( param.key, "k,k_0," "north_square,south_square," // rhealpix "n,m," // sinu "q," // urm5 "path,lsat," // lsat "W,M," // hammer "aperture,resolution," // isea )) { double value = getNumericValue(param.value, &hasError); values.push_back(ParameterValue::create( Measure(value, UnitOfMeasure::SCALE_UNITY))); } else { double value = getAngularValue(param.value, &hasError); values.push_back(ParameterValue::create( Measure(value, UnitOfMeasure::DEGREE))); } if (hasError) { throw ParsingException("invalid value for " + param.key); } } } conv = Conversion::create( mapWithUnknownName, PropertyMap().set(IdentifiedObject::NAME_KEY, methodName), parameters, values) .as_nullable(); for (const char *substr : {"PROJ ob_tran o_proj=longlat", "PROJ ob_tran o_proj=lonlat", "PROJ ob_tran o_proj=latlon", "PROJ ob_tran o_proj=latlong"}) { if (starts_with(methodName, substr)) { auto geogCRS = util::nn_dynamic_pointer_cast(geodCRS); if (geogCRS) { return DerivedGeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), NN_NO_CHECK(geogCRS), NN_NO_CHECK(conv), buildEllipsoidalCS(iStep, iUnitConvert, iAxisSwap, false)); } } } } std::vector axis = processAxisSwap(step, unit, iAxisSwap, axisType, false); auto csGeodCRS = geodCRS->coordinateSystem(); auto cs = csGeodCRS->axisList().size() == 2 ? CartesianCS::create(emptyPropertyMap, axis[0], axis[1]) : CartesianCS::create(emptyPropertyMap, axis[0], axis[1], csGeodCRS->axisList()[2]); if (isTopocentricStep(step.name)) { cs = CartesianCS::create( emptyPropertyMap, createAxis("topocentric East", "U", AxisDirection::EAST, unit), createAxis("topocentric North", "V", AxisDirection::NORTH, unit), createAxis("topocentric Up", "W", AxisDirection::UP, unit)); } auto props = PropertyMap().set(IdentifiedObject::NAME_KEY, title.empty() ? "unknown" : title); if (hasUnusedParameters(step)) { props.set("EXTENSION_PROJ4", projString_); } props.set("IMPLICIT_CS", true); CRSNNPtr crs = bWebMercator ? createPseudoMercator( props.set(IdentifiedObject::NAME_KEY, webMercatorName), cs) : ProjectedCRS::create(props, geodCRS, NN_NO_CHECK(conv), cs); return crs; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const metadata::ExtentPtr nullExtent{}; static const metadata::ExtentPtr &getExtent(const crs::CRS *crs) { const auto &domains = crs->domains(); if (!domains.empty()) { return domains[0]->domainOfValidity(); } return nullExtent; } //! @endcond namespace { struct PJContextHolder { PJ_CONTEXT *ctx_; bool bFree_; PJContextHolder(PJ_CONTEXT *ctx, bool bFree) : ctx_(ctx), bFree_(bFree) {} ~PJContextHolder() { if (bFree_) proj_context_destroy(ctx_); } PJContextHolder(const PJContextHolder &) = delete; PJContextHolder &operator=(const PJContextHolder &) = delete; }; } // namespace // --------------------------------------------------------------------------- /** \brief Instantiate a sub-class of BaseObject from a PROJ string. * * The projString must contain +type=crs for the object to be detected as a * CRS instead of a CoordinateOperation. * * @throw ParsingException if the string cannot be parsed. */ BaseObjectNNPtr PROJStringParser::createFromPROJString(const std::string &projString) { // In some abnormal situations involving init=epsg:XXXX syntax, we could // have infinite loop if (d->ctx_ && d->ctx_->projStringParserCreateFromPROJStringRecursionCounter == 2) { throw ParsingException( "Infinite recursion in PROJStringParser::createFromPROJString()"); } d->steps_.clear(); d->title_.clear(); d->globalParamValues_.clear(); d->projString_ = projString; PROJStringSyntaxParser(projString, d->steps_, d->globalParamValues_, d->title_); if (d->steps_.empty()) { const auto &vunits = d->getGlobalParamValue("vunits"); const auto &vto_meter = d->getGlobalParamValue("vto_meter"); if (!vunits.empty() || !vto_meter.empty()) { Step fakeStep; if (!vunits.empty()) { fakeStep.paramValues.emplace_back( Step::KeyValue("vunits", vunits)); } if (!vto_meter.empty()) { fakeStep.paramValues.emplace_back( Step::KeyValue("vto_meter", vto_meter)); } auto vdatum = VerticalReferenceFrame::create(createMapWithUnknownName()); auto vcrs = VerticalCRS::create( createMapWithUnknownName(), vdatum, VerticalCS::createGravityRelatedHeight( d->buildUnit(fakeStep, "vunits", "vto_meter"))); return vcrs; } } const bool isGeocentricCRS = ((d->steps_.size() == 1 && d->getParamValue(d->steps_[0], "type") == "crs") || (d->steps_.size() == 2 && d->steps_[1].name == "unitconvert")) && !d->steps_[0].inverted && isGeocentricStep(d->steps_[0].name); const bool isTopocentricCRS = (d->steps_.size() == 1 && isTopocentricStep(d->steps_[0].name) && d->getParamValue(d->steps_[0], "type") == "crs"); // +init=xxxx:yyyy syntax if (d->steps_.size() == 1 && d->steps_[0].isInit && !d->steps_[0].inverted) { auto ctx = d->ctx_ ? d->ctx_ : proj_context_create(); if (!ctx) { throw ParsingException("out of memory"); } PJContextHolder contextHolder(ctx, ctx != d->ctx_); // Those used to come from a text init file // We only support them in compatibility mode const std::string &stepName = d->steps_[0].name; if (ci_starts_with(stepName, "epsg:") || ci_starts_with(stepName, "IGNF:")) { struct BackupContextErrno { PJ_CONTEXT *m_ctxt = nullptr; int m_last_errno = 0; explicit BackupContextErrno(PJ_CONTEXT *ctxtIn) : m_ctxt(ctxtIn), m_last_errno(m_ctxt->last_errno) { m_ctxt->debug_level = PJ_LOG_ERROR; } ~BackupContextErrno() { m_ctxt->last_errno = m_last_errno; } BackupContextErrno(const BackupContextErrno &) = delete; BackupContextErrno & operator=(const BackupContextErrno &) = delete; }; BackupContextErrno backupContextErrno(ctx); bool usePROJ4InitRules = d->usePROJ4InitRules_; if (!usePROJ4InitRules) { usePROJ4InitRules = proj_context_get_use_proj4_init_rules(ctx, FALSE) == TRUE; } if (!usePROJ4InitRules) { throw ParsingException("init=epsg:/init=IGNF: syntax not " "supported in non-PROJ4 emulation mode"); } char unused[256]; std::string initname(stepName); initname.resize(initname.find(':')); int file_found = pj_find_file(ctx, initname.c_str(), unused, sizeof(unused)); if (!file_found) { auto obj = createFromUserInput(stepName, d->dbContext_, true); auto crs = dynamic_cast(obj.get()); bool hasSignificantParamValues = false; bool hasOver = false; for (const auto &kv : d->steps_[0].paramValues) { if (kv.key == "over") { hasOver = true; } else if (!((kv.key == "type" && kv.value == "crs") || kv.key == "wktext" || kv.key == "no_defs")) { hasSignificantParamValues = true; break; } } if (crs && !hasSignificantParamValues) { PropertyMap properties; properties.set(IdentifiedObject::NAME_KEY, d->title_.empty() ? crs->nameStr() : d->title_); if (hasOver) { properties.set("OVER", true); } const auto &extent = getExtent(crs); if (extent) { properties.set( common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } auto geogCRS = dynamic_cast(crs); if (geogCRS) { const auto &cs = geogCRS->coordinateSystem(); // Override with longitude latitude in degrees return GeographicCRS::create( properties, geogCRS->datum(), geogCRS->datumEnsemble(), cs->axisList().size() == 2 ? EllipsoidalCS::createLongitudeLatitude( UnitOfMeasure::DEGREE) : EllipsoidalCS:: createLongitudeLatitudeEllipsoidalHeight( UnitOfMeasure::DEGREE, cs->axisList()[2]->unit())); } auto projCRS = dynamic_cast(crs); if (projCRS) { // Override with easting northing order const auto conv = projCRS->derivingConversion(); if (conv->method()->getEPSGCode() != EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED) { return ProjectedCRS::create( properties, projCRS->baseCRS(), conv, CartesianCS::createEastingNorthing( projCRS->coordinateSystem() ->axisList()[0] ->unit())); } } return obj; } auto projStringExportable = dynamic_cast(crs); if (projStringExportable) { std::string expanded; if (!d->title_.empty()) { expanded = "title="; expanded += pj_double_quote_string_param_if_needed(d->title_); } for (const auto &pair : d->steps_[0].paramValues) { if (!expanded.empty()) expanded += ' '; expanded += '+'; expanded += pair.key; if (!pair.value.empty()) { expanded += '='; expanded += pj_double_quote_string_param_if_needed( pair.value); } } expanded += ' '; expanded += projStringExportable->exportToPROJString( PROJStringFormatter::create().get()); return createFromPROJString(expanded); } } } paralist *init = pj_mkparam(("init=" + d->steps_[0].name).c_str()); if (!init) { throw ParsingException("out of memory"); } ctx->projStringParserCreateFromPROJStringRecursionCounter++; paralist *list = pj_expand_init(ctx, init); ctx->projStringParserCreateFromPROJStringRecursionCounter--; if (!list) { free(init); throw ParsingException("cannot expand " + projString); } std::string expanded; if (!d->title_.empty()) { expanded = "title=" + pj_double_quote_string_param_if_needed(d->title_); } bool first = true; bool has_init_term = false; for (auto t = list; t;) { if (!expanded.empty()) { expanded += ' '; } if (first) { // first parameter is the init= itself first = false; } else if (starts_with(t->param, "init=")) { has_init_term = true; } else { expanded += t->param; } auto n = t->next; free(t); t = n; } for (const auto &pair : d->steps_[0].paramValues) { expanded += " +"; expanded += pair.key; if (!pair.value.empty()) { expanded += '='; expanded += pj_double_quote_string_param_if_needed(pair.value); } } if (!has_init_term) { return createFromPROJString(expanded); } } int iFirstGeogStep = -1; int iSecondGeogStep = -1; int iProjStep = -1; int iFirstUnitConvert = -1; int iSecondUnitConvert = -1; int iFirstAxisSwap = -1; int iSecondAxisSwap = -1; bool unexpectedStructure = d->steps_.empty(); for (int i = 0; i < static_cast(d->steps_.size()); i++) { const auto &stepName = d->steps_[i].name; if (isGeographicStep(stepName)) { if (iFirstGeogStep < 0) { iFirstGeogStep = i; } else if (iSecondGeogStep < 0) { iSecondGeogStep = i; } else { unexpectedStructure = true; break; } } else if (ci_equal(stepName, "unitconvert")) { if (iFirstUnitConvert < 0) { iFirstUnitConvert = i; } else if (iSecondUnitConvert < 0) { iSecondUnitConvert = i; } else { unexpectedStructure = true; break; } } else if (ci_equal(stepName, "axisswap")) { if (iFirstAxisSwap < 0) { iFirstAxisSwap = i; } else if (iSecondAxisSwap < 0) { iSecondAxisSwap = i; } else { unexpectedStructure = true; break; } } else if (isProjectedStep(stepName)) { if (iProjStep >= 0) { unexpectedStructure = true; break; } iProjStep = i; } else { unexpectedStructure = true; break; } } if (!d->steps_.empty()) { // CRS candidate if ((d->steps_.size() == 1 && d->getParamValue(d->steps_[0], "type") != "crs") || (d->steps_.size() > 1 && d->getGlobalParamValue("type") != "crs")) { unexpectedStructure = true; } } struct Logger { std::string msg{}; // cppcheck-suppress functionStatic void setMessage(const char *msgIn) noexcept { try { msg = msgIn; } catch (const std::exception &) { } } static void log(void *user_data, int level, const char *msg) { if (level == PJ_LOG_ERROR) { static_cast(user_data)->setMessage(msg); } } }; // If the structure is not recognized, then try to instantiate the // pipeline, and if successful, wrap it in a PROJBasedOperation Logger logger; bool valid; auto pj_context = d->ctx_ ? d->ctx_ : proj_context_create(); if (!pj_context) { throw ParsingException("out of memory"); } // Backup error logger and level, and install temporary handler auto old_logger = pj_context->logger; auto old_logger_app_data = pj_context->logger_app_data; auto log_level = proj_log_level(pj_context, PJ_LOG_ERROR); proj_log_func(pj_context, &logger, Logger::log); if (pj_context != d->ctx_) { proj_context_use_proj4_init_rules(pj_context, d->usePROJ4InitRules_); } pj_context->projStringParserCreateFromPROJStringRecursionCounter++; auto pj = pj_create_internal( pj_context, (projString.find("type=crs") != std::string::npos ? projString + " +disable_grid_presence_check" : projString) .c_str()); pj_context->projStringParserCreateFromPROJStringRecursionCounter--; valid = pj != nullptr; // Restore initial error logger and level proj_log_level(pj_context, log_level); pj_context->logger = old_logger; pj_context->logger_app_data = old_logger_app_data; // Remove parameters not understood by PROJ. if (valid && d->steps_.size() == 1) { std::vector newParamValues{}; std::set foundKeys; auto &step = d->steps_[0]; for (auto &kv : step.paramValues) { bool recognizedByPROJ = false; if (foundKeys.find(kv.key) != foundKeys.end()) { continue; } foundKeys.insert(kv.key); if ((step.name == "krovak" || step.name == "mod_krovak") && kv.key == "alpha") { // We recognize it in our CRS parsing code recognizedByPROJ = true; } else { for (auto cur = pj->params; cur; cur = cur->next) { const char *equal = strchr(cur->param, '='); if (equal && static_cast(equal - cur->param) == kv.key.size()) { if (memcmp(cur->param, kv.key.c_str(), kv.key.size()) == 0) { recognizedByPROJ = (cur->used == 1); break; } } else if (strcmp(cur->param, kv.key.c_str()) == 0) { recognizedByPROJ = (cur->used == 1); break; } } } if (!recognizedByPROJ && kv.key == "geoid_crs") { for (auto &pair : step.paramValues) { if (ci_equal(pair.key, "geoidgrids")) { recognizedByPROJ = true; break; } } } if (recognizedByPROJ) { newParamValues.emplace_back(kv); } } step.paramValues = std::move(newParamValues); d->projString_.clear(); if (!step.name.empty()) { d->projString_ += step.isInit ? "+init=" : "+proj="; d->projString_ += step.name; } for (const auto ¶mValue : step.paramValues) { if (!d->projString_.empty()) { d->projString_ += ' '; } d->projString_ += '+'; d->projString_ += paramValue.key; if (!paramValue.value.empty()) { d->projString_ += '='; d->projString_ += pj_double_quote_string_param_if_needed(paramValue.value); } } } proj_destroy(pj); if (!valid) { const int l_errno = proj_context_errno(pj_context); std::string msg("Error " + toString(l_errno) + " (" + proj_errno_string(l_errno) + ")"); if (!logger.msg.empty()) { msg += ": "; msg += logger.msg; } logger.msg = std::move(msg); } if (pj_context != d->ctx_) { proj_context_destroy(pj_context); } if (!valid) { throw ParsingException(logger.msg); } if (isGeocentricCRS) { // First run is dry run to mark all recognized/unrecognized tokens for (int iter = 0; iter < 2; iter++) { auto obj = d->buildBoundOrCompoundCRSIfNeeded( 0, d->buildGeocentricCRS(0, (d->steps_.size() == 2 && d->steps_[1].name == "unitconvert") ? 1 : -1)); if (iter == 1) { return nn_static_pointer_cast(obj); } } } if (isTopocentricCRS) { // First run is dry run to mark all recognized/unrecognized tokens for (int iter = 0; iter < 2; iter++) { auto obj = d->buildBoundOrCompoundCRSIfNeeded( 0, d->buildProjectedCRS(0, d->buildGeocentricCRS(0, -1), -1, -1)); if (iter == 1) { return nn_static_pointer_cast(obj); } } } if (!unexpectedStructure) { if (iFirstGeogStep == 0 && !d->steps_[iFirstGeogStep].inverted && iSecondGeogStep < 0 && iProjStep < 0 && (iFirstUnitConvert < 0 || iSecondUnitConvert < 0) && (iFirstAxisSwap < 0 || iSecondAxisSwap < 0)) { // First run is dry run to mark all recognized/unrecognized tokens for (int iter = 0; iter < 2; iter++) { auto obj = d->buildBoundOrCompoundCRSIfNeeded( 0, d->buildGeodeticCRS(iFirstGeogStep, iFirstUnitConvert, iFirstAxisSwap, false)); if (iter == 1) { return nn_static_pointer_cast(obj); } } } if (iProjStep >= 0 && !d->steps_[iProjStep].inverted && (iFirstGeogStep < 0 || iFirstGeogStep + 1 == iProjStep) && iSecondGeogStep < 0) { if (iFirstGeogStep < 0) iFirstGeogStep = iProjStep; // First run is dry run to mark all recognized/unrecognized tokens for (int iter = 0; iter < 2; iter++) { auto obj = d->buildBoundOrCompoundCRSIfNeeded( iProjStep, d->buildProjectedCRS( iProjStep, d->buildGeodeticCRS(iFirstGeogStep, iFirstUnitConvert < iFirstGeogStep ? iFirstUnitConvert : -1, iFirstAxisSwap < iFirstGeogStep ? iFirstAxisSwap : -1, true), iFirstUnitConvert < iFirstGeogStep ? iSecondUnitConvert : iFirstUnitConvert, iFirstAxisSwap < iFirstGeogStep ? iSecondAxisSwap : iFirstAxisSwap)); if (iter == 1) { return nn_static_pointer_cast(obj); } } } } auto props = PropertyMap(); if (!d->title_.empty()) { props.set(IdentifiedObject::NAME_KEY, d->title_); } return operation::SingleOperation::createPROJBased(props, projString, nullptr, nullptr, {}); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct JSONFormatter::Private { CPLJSonStreamingWriter writer_{nullptr, nullptr}; DatabaseContextPtr dbContext_{}; std::vector stackHasId_{false}; std::vector outputIdStack_{true}; bool allowIDInImmediateChild_ = false; bool omitTypeInImmediateChild_ = false; bool abridgedTransformation_ = false; bool abridgedTransformationWriteSourceCRS_ = false; std::string schema_ = PROJJSON_DEFAULT_VERSION; // cppcheck-suppress functionStatic void pushOutputId(bool outputIdIn) { outputIdStack_.push_back(outputIdIn); } // cppcheck-suppress functionStatic void popOutputId() { outputIdStack_.pop_back(); } }; //! @endcond // --------------------------------------------------------------------------- /** \brief Constructs a new formatter. * * A formatter can be used only once (its internal state is mutated) * * @return new formatter. */ JSONFormatterNNPtr JSONFormatter::create( // cppcheck-suppress passedByValue DatabaseContextPtr dbContext) { auto ret = NN_NO_CHECK(JSONFormatter::make_unique()); ret->d->dbContext_ = std::move(dbContext); return ret; } // --------------------------------------------------------------------------- /** \brief Whether to use multi line output or not. */ JSONFormatter &JSONFormatter::setMultiLine(bool multiLine) noexcept { d->writer_.SetPrettyFormatting(multiLine); return *this; } // --------------------------------------------------------------------------- /** \brief Set number of spaces for each indentation level (defaults to 4). */ JSONFormatter &JSONFormatter::setIndentationWidth(int width) noexcept { d->writer_.SetIndentationSize(width); return *this; } // --------------------------------------------------------------------------- /** \brief Set the value of the "$schema" key in the top level object. * * If set to empty string, it will not be written. */ JSONFormatter &JSONFormatter::setSchema(const std::string &schema) noexcept { d->schema_ = schema; return *this; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress JSONFormatter::JSONFormatter() : d(std::make_unique()) {} // --------------------------------------------------------------------------- JSONFormatter::~JSONFormatter() = default; // --------------------------------------------------------------------------- CPLJSonStreamingWriter *JSONFormatter::writer() const { return &(d->writer_); } // --------------------------------------------------------------------------- const DatabaseContextPtr &JSONFormatter::databaseContext() const { return d->dbContext_; } // --------------------------------------------------------------------------- bool JSONFormatter::outputId() const { return d->outputIdStack_.back(); } // --------------------------------------------------------------------------- bool JSONFormatter::outputUsage(bool calledBeforeObjectContext) const { return outputId() && d->outputIdStack_.size() == (calledBeforeObjectContext ? 1U : 2U); } // --------------------------------------------------------------------------- void JSONFormatter::setAllowIDInImmediateChild() { d->allowIDInImmediateChild_ = true; } // --------------------------------------------------------------------------- void JSONFormatter::setOmitTypeInImmediateChild() { d->omitTypeInImmediateChild_ = true; } // --------------------------------------------------------------------------- JSONFormatter::ObjectContext::ObjectContext(JSONFormatter &formatter, const char *objectType, bool hasId) : m_formatter(formatter) { m_formatter.d->writer_.StartObj(); if (m_formatter.d->outputIdStack_.size() == 1 && !m_formatter.d->schema_.empty()) { m_formatter.d->writer_.AddObjKey("$schema"); m_formatter.d->writer_.Add(m_formatter.d->schema_); } if (objectType && !m_formatter.d->omitTypeInImmediateChild_) { m_formatter.d->writer_.AddObjKey("type"); m_formatter.d->writer_.Add(objectType); } m_formatter.d->omitTypeInImmediateChild_ = false; // All intermediate nodes shouldn't have ID if a parent has an ID // unless explicitly enabled. if (m_formatter.d->allowIDInImmediateChild_) { m_formatter.d->pushOutputId(m_formatter.d->outputIdStack_[0]); m_formatter.d->allowIDInImmediateChild_ = false; } else { m_formatter.d->pushOutputId(m_formatter.d->outputIdStack_[0] && !m_formatter.d->stackHasId_.back()); } m_formatter.d->stackHasId_.push_back(hasId || m_formatter.d->stackHasId_.back()); } // --------------------------------------------------------------------------- JSONFormatter::ObjectContext::~ObjectContext() { m_formatter.d->writer_.EndObj(); m_formatter.d->stackHasId_.pop_back(); m_formatter.d->popOutputId(); } // --------------------------------------------------------------------------- void JSONFormatter::setAbridgedTransformation(bool outputIn) { d->abridgedTransformation_ = outputIn; } // --------------------------------------------------------------------------- bool JSONFormatter::abridgedTransformation() const { return d->abridgedTransformation_; } // --------------------------------------------------------------------------- void JSONFormatter::setAbridgedTransformationWriteSourceCRS(bool writeCRS) { d->abridgedTransformationWriteSourceCRS_ = writeCRS; } // --------------------------------------------------------------------------- bool JSONFormatter::abridgedTransformationWriteSourceCRS() const { return d->abridgedTransformationWriteSourceCRS_; } //! @endcond // --------------------------------------------------------------------------- /** \brief Return the serialized JSON. */ const std::string &JSONFormatter::toString() const { return d->writer_.GetString(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress IJSONExportable::~IJSONExportable() = default; // --------------------------------------------------------------------------- std::string IJSONExportable::exportToJSON(JSONFormatter *formatter) const { _exportToJSON(formatter); return formatter->toString(); } //! @endcond } // namespace io NS_PROJ_END proj-9.6.0/src/iso19111/metadata.cpp000664 001754 001755 00000145641 14764566077 016676 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/metadata.hpp" #include "proj/common.hpp" #include "proj/io.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include #include using namespace NS_PROJ::internal; using namespace NS_PROJ::io; using namespace NS_PROJ::util; #if 0 namespace dropbox{ namespace oxygen { template<> nn>::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; }} #endif NS_PROJ_START namespace metadata { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Citation::Private { optional title{}; }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Citation::Citation() : d(std::make_unique()) {} //! @endcond // --------------------------------------------------------------------------- /** \brief Constructs a citation by its title. */ Citation::Citation(const std::string &titleIn) : d(std::make_unique()) { d->title = titleIn; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Citation::Citation(const Citation &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- Citation::~Citation() = default; // --------------------------------------------------------------------------- Citation &Citation::operator=(const Citation &other) { if (this != &other) { *d = *other.d; } return *this; } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns the name by which the cited resource is known. */ const optional &Citation::title() PROJ_PURE_DEFN { return d->title; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GeographicExtent::Private {}; //! @endcond // --------------------------------------------------------------------------- GeographicExtent::GeographicExtent() : d(std::make_unique()) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeographicExtent::~GeographicExtent() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GeographicBoundingBox::Private { double west_{}; double south_{}; double east_{}; double north_{}; Private(double west, double south, double east, double north) : west_(west), south_(south), east_(east), north_(north) {} bool intersects(const Private &other) const; std::unique_ptr intersection(const Private &other) const; }; //! @endcond // --------------------------------------------------------------------------- GeographicBoundingBox::GeographicBoundingBox(double west, double south, double east, double north) : GeographicExtent(), d(std::make_unique(west, south, east, north)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeographicBoundingBox::~GeographicBoundingBox() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Returns the western-most coordinate of the limit of the dataset * extent. * * The unit is degrees. * * If eastBoundLongitude < westBoundLongitude(), then the bounding box crosses * the anti-meridian. */ double GeographicBoundingBox::westBoundLongitude() PROJ_PURE_DEFN { return d->west_; } // --------------------------------------------------------------------------- /** \brief Returns the southern-most coordinate of the limit of the dataset * extent. * * The unit is degrees. */ double GeographicBoundingBox::southBoundLatitude() PROJ_PURE_DEFN { return d->south_; } // --------------------------------------------------------------------------- /** \brief Returns the eastern-most coordinate of the limit of the dataset * extent. * * The unit is degrees. * * If eastBoundLongitude < westBoundLongitude(), then the bounding box crosses * the anti-meridian. */ double GeographicBoundingBox::eastBoundLongitude() PROJ_PURE_DEFN { return d->east_; } // --------------------------------------------------------------------------- /** \brief Returns the northern-most coordinate of the limit of the dataset * extent. * * The unit is degrees. */ double GeographicBoundingBox::northBoundLatitude() PROJ_PURE_DEFN { return d->north_; } // --------------------------------------------------------------------------- /** \brief Instantiate a GeographicBoundingBox. * * If east < west, then the bounding box crosses the anti-meridian. * * @param west Western-most coordinate of the limit of the dataset extent (in * degrees). * @param south Southern-most coordinate of the limit of the dataset extent (in * degrees). * @param east Eastern-most coordinate of the limit of the dataset extent (in * degrees). * @param north Northern-most coordinate of the limit of the dataset extent (in * degrees). * @return a new GeographicBoundingBox. */ GeographicBoundingBoxNNPtr GeographicBoundingBox::create(double west, double south, double east, double north) { if (std::isnan(west) || std::isnan(south) || std::isnan(east) || std::isnan(north)) { throw InvalidValueTypeException( "GeographicBoundingBox::create() does not accept NaN values"); } if (south > north) { throw InvalidValueTypeException( "GeographicBoundingBox::create() does not accept south > north"); } // Avoid creating a degenerate bounding box if reduced to a point or a line if (west == east) { if (west > -180) west = std::nextafter(west, -std::numeric_limits::infinity()); if (east < 180) east = std::nextafter(east, std::numeric_limits::infinity()); } if (south == north) { if (south > -90) south = std::nextafter(south, -std::numeric_limits::infinity()); if (north < 90) north = std::nextafter(north, std::numeric_limits::infinity()); } return GeographicBoundingBox::nn_make_shared( west, south, east, north); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool GeographicBoundingBox::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion, const io::DatabaseContextPtr &) const { auto otherExtent = dynamic_cast(other); if (!otherExtent) return false; return d->west_ == otherExtent->d->west_ && d->south_ == otherExtent->d->south_ && d->east_ == otherExtent->d->east_ && d->north_ == otherExtent->d->north_; } //! @endcond // --------------------------------------------------------------------------- bool GeographicBoundingBox::contains(const GeographicExtentNNPtr &other) const { auto otherExtent = dynamic_cast(other.get()); if (!otherExtent) { return false; } const double W = d->west_; const double E = d->east_; const double N = d->north_; const double S = d->south_; const double oW = otherExtent->d->west_; const double oE = otherExtent->d->east_; const double oN = otherExtent->d->north_; const double oS = otherExtent->d->south_; if (!(S <= oS && N >= oN)) { return false; } if (W == -180.0 && E == 180.0) { return oW != oE; } if (oW == -180.0 && oE == 180.0) { return false; } // Normal bounding box ? if (W < E) { if (oW < oE) { return W <= oW && E >= oE; } else { return false; } // No: crossing antimerian } else { if (oW < oE) { if (oW >= W) { return true; } else if (oE <= E) { return true; } else { return false; } } else { return W <= oW && E >= oE; } } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool GeographicBoundingBox::Private::intersects(const Private &other) const { const double W = west_; const double E = east_; const double N = north_; const double S = south_; const double oW = other.west_; const double oE = other.east_; const double oN = other.north_; const double oS = other.south_; // Check intersection along the latitude axis if (N < oS || S > oN) { return false; } // Check world coverage of this bbox, and other bbox overlapping // antimeridian (e.g. oW=175 and oE=-175) // Check oW > oE written for symmetry with the intersection() method. if (W == -180.0 && E == 180.0 && oW > oE) { return true; } // Check world coverage of other bbox, and this bbox overlapping // antimeridian (e.g. W=175 and E=-175) // Check W > E written for symmetry with the intersection() method. if (oW == -180.0 && oE == 180.0 && W > E) { return true; } // Normal bounding box ? if (W <= E) { if (oW <= oE) { if (std::max(W, oW) < std::min(E, oE)) { return true; } return false; } // Bail out on longitudes not in [-180,180]. We could probably make // some sense of them, but this check at least avoid potential infinite // recursion. if (oW > 180 || oE < -180) { return false; } return intersects(Private(oW, oS, 180.0, oN)) || intersects(Private(-180.0, oS, oE, oN)); // No: crossing antimeridian } else { if (oW <= oE) { return other.intersects(*this); } return true; } } //! @endcond bool GeographicBoundingBox::intersects( const GeographicExtentNNPtr &other) const { auto otherExtent = dynamic_cast(other.get()); if (!otherExtent) { return false; } return d->intersects(*(otherExtent->d)); } // --------------------------------------------------------------------------- GeographicExtentPtr GeographicBoundingBox::intersection(const GeographicExtentNNPtr &other) const { auto otherExtent = dynamic_cast(other.get()); if (!otherExtent) { return nullptr; } auto ret = d->intersection(*(otherExtent->d)); if (ret) { auto bbox = GeographicBoundingBox::create(ret->west_, ret->south_, ret->east_, ret->north_); return bbox.as_nullable(); } return nullptr; } //! @cond Doxygen_Suppress std::unique_ptr GeographicBoundingBox::Private::intersection(const Private &otherExtent) const { const double W = west_; const double E = east_; const double N = north_; const double S = south_; const double oW = otherExtent.west_; const double oE = otherExtent.east_; const double oN = otherExtent.north_; const double oS = otherExtent.south_; // Check intersection along the latitude axis if (N < oS || S > oN) { return nullptr; } // Check world coverage of this bbox, and other bbox overlapping // antimeridian (e.g. oW=175 and oE=-175) if (W == -180.0 && E == 180.0 && oW > oE) { return std::make_unique(oW, std::max(S, oS), oE, std::min(N, oN)); } // Check world coverage of other bbox, and this bbox overlapping // antimeridian (e.g. W=175 and E=-175) if (oW == -180.0 && oE == 180.0 && W > E) { return std::make_unique(W, std::max(S, oS), E, std::min(N, oN)); } // Normal bounding box ? if (W <= E) { if (oW <= oE) { const double resW = std::max(W, oW); const double resE = std::min(E, oE); if (resW < resE) { return std::make_unique(resW, std::max(S, oS), resE, std::min(N, oN)); } return nullptr; } // Bail out on longitudes not in [-180,180]. We could probably make // some sense of them, but this check at least avoid potential infinite // recursion. if (oW > 180 || oE < -180) { return nullptr; } // Return larger of two parts of the multipolygon auto inter1 = intersection(Private(oW, oS, 180.0, oN)); auto inter2 = intersection(Private(-180.0, oS, oE, oN)); if (!inter1) { return inter2; } if (!inter2) { return inter1; } if (inter1->east_ - inter1->west_ > inter2->east_ - inter2->west_) { return inter1; } return inter2; // No: crossing antimeridian } else { if (oW <= oE) { return otherExtent.intersection(*this); } return std::make_unique(std::max(W, oW), std::max(S, oS), std::min(E, oE), std::min(N, oN)); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct VerticalExtent::Private { double minimum_{}; double maximum_{}; common::UnitOfMeasureNNPtr unit_; Private(double minimum, double maximum, const common::UnitOfMeasureNNPtr &unit) : minimum_(minimum), maximum_(maximum), unit_(unit) {} }; //! @endcond // --------------------------------------------------------------------------- VerticalExtent::VerticalExtent(double minimumIn, double maximumIn, const common::UnitOfMeasureNNPtr &unitIn) : d(std::make_unique(minimumIn, maximumIn, unitIn)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress VerticalExtent::~VerticalExtent() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Returns the minimum of the vertical extent. */ double VerticalExtent::minimumValue() PROJ_PURE_DEFN { return d->minimum_; } // --------------------------------------------------------------------------- /** \brief Returns the maximum of the vertical extent. */ double VerticalExtent::maximumValue() PROJ_PURE_DEFN { return d->maximum_; } // --------------------------------------------------------------------------- /** \brief Returns the unit of the vertical extent. */ common::UnitOfMeasureNNPtr &VerticalExtent::unit() PROJ_PURE_DEFN { return d->unit_; } // --------------------------------------------------------------------------- /** \brief Instantiate a VerticalExtent. * * @param minimumIn minimum. * @param maximumIn maximum. * @param unitIn unit. * @return a new VerticalExtent. */ VerticalExtentNNPtr VerticalExtent::create(double minimumIn, double maximumIn, const common::UnitOfMeasureNNPtr &unitIn) { return VerticalExtent::nn_make_shared(minimumIn, maximumIn, unitIn); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool VerticalExtent::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion, const io::DatabaseContextPtr &) const { auto otherExtent = dynamic_cast(other); if (!otherExtent) return false; return d->minimum_ == otherExtent->d->minimum_ && d->maximum_ == otherExtent->d->maximum_ && d->unit_ == otherExtent->d->unit_; } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns whether this extent contains the other one. */ bool VerticalExtent::contains(const VerticalExtentNNPtr &other) const { const double thisUnitToSI = d->unit_->conversionToSI(); const double otherUnitToSI = other->d->unit_->conversionToSI(); return d->minimum_ * thisUnitToSI <= other->d->minimum_ * otherUnitToSI && d->maximum_ * thisUnitToSI >= other->d->maximum_ * otherUnitToSI; } // --------------------------------------------------------------------------- /** \brief Returns whether this extent intersects the other one. */ bool VerticalExtent::intersects(const VerticalExtentNNPtr &other) const { const double thisUnitToSI = d->unit_->conversionToSI(); const double otherUnitToSI = other->d->unit_->conversionToSI(); return d->minimum_ * thisUnitToSI <= other->d->maximum_ * otherUnitToSI && d->maximum_ * thisUnitToSI >= other->d->minimum_ * otherUnitToSI; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct TemporalExtent::Private { std::string start_{}; std::string stop_{}; Private(const std::string &start, const std::string &stop) : start_(start), stop_(stop) {} }; //! @endcond // --------------------------------------------------------------------------- TemporalExtent::TemporalExtent(const std::string &startIn, const std::string &stopIn) : d(std::make_unique(startIn, stopIn)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TemporalExtent::~TemporalExtent() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Returns the start of the temporal extent. */ const std::string &TemporalExtent::start() PROJ_PURE_DEFN { return d->start_; } // --------------------------------------------------------------------------- /** \brief Returns the end of the temporal extent. */ const std::string &TemporalExtent::stop() PROJ_PURE_DEFN { return d->stop_; } // --------------------------------------------------------------------------- /** \brief Instantiate a TemporalExtent. * * @param start start. * @param stop stop. * @return a new TemporalExtent. */ TemporalExtentNNPtr TemporalExtent::create(const std::string &start, const std::string &stop) { return TemporalExtent::nn_make_shared(start, stop); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool TemporalExtent::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion, const io::DatabaseContextPtr &) const { auto otherExtent = dynamic_cast(other); if (!otherExtent) return false; return start() == otherExtent->start() && stop() == otherExtent->stop(); } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns whether this extent contains the other one. */ bool TemporalExtent::contains(const TemporalExtentNNPtr &other) const { return start() <= other->start() && stop() >= other->stop(); } // --------------------------------------------------------------------------- /** \brief Returns whether this extent intersects the other one. */ bool TemporalExtent::intersects(const TemporalExtentNNPtr &other) const { return start() <= other->stop() && stop() >= other->start(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Extent::Private { optional description_{}; std::vector geographicElements_{}; std::vector verticalElements_{}; std::vector temporalElements_{}; }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Extent::Extent() : d(std::make_unique()) {} // --------------------------------------------------------------------------- Extent::Extent(const Extent &other) : d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- Extent::~Extent() = default; //! @endcond // --------------------------------------------------------------------------- /** Return a textual description of the extent. * * @return the description, or empty. */ const optional &Extent::description() PROJ_PURE_DEFN { return d->description_; } // --------------------------------------------------------------------------- /** Return the geographic element(s) of the extent * * @return the geographic element(s), or empty. */ const std::vector & Extent::geographicElements() PROJ_PURE_DEFN { return d->geographicElements_; } // --------------------------------------------------------------------------- /** Return the vertical element(s) of the extent * * @return the vertical element(s), or empty. */ const std::vector & Extent::verticalElements() PROJ_PURE_DEFN { return d->verticalElements_; } // --------------------------------------------------------------------------- /** Return the temporal element(s) of the extent * * @return the temporal element(s), or empty. */ const std::vector & Extent::temporalElements() PROJ_PURE_DEFN { return d->temporalElements_; } // --------------------------------------------------------------------------- /** \brief Instantiate a Extent. * * @param descriptionIn Textual description, or empty. * @param geographicElementsIn Geographic element(s), or empty. * @param verticalElementsIn Vertical element(s), or empty. * @param temporalElementsIn Temporal element(s), or empty. * @return a new Extent. */ ExtentNNPtr Extent::create(const optional &descriptionIn, const std::vector &geographicElementsIn, const std::vector &verticalElementsIn, const std::vector &temporalElementsIn) { auto extent = Extent::nn_make_shared(); extent->assignSelf(extent); extent->d->description_ = descriptionIn; extent->d->geographicElements_ = geographicElementsIn; extent->d->verticalElements_ = verticalElementsIn; extent->d->temporalElements_ = temporalElementsIn; return extent; } // --------------------------------------------------------------------------- /** \brief Instantiate a Extent from a bounding box * * @param west Western-most coordinate of the limit of the dataset extent (in * degrees). * @param south Southern-most coordinate of the limit of the dataset extent (in * degrees). * @param east Eastern-most coordinate of the limit of the dataset extent (in * degrees). * @param north Northern-most coordinate of the limit of the dataset extent (in * degrees). * @param descriptionIn Textual description, or empty. * @return a new Extent. */ ExtentNNPtr Extent::createFromBBOX(double west, double south, double east, double north, const util::optional &descriptionIn) { return create( descriptionIn, std::vector{ nn_static_pointer_cast( GeographicBoundingBox::create(west, south, east, north))}, std::vector(), std::vector()); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool Extent::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherExtent = dynamic_cast(other); bool ret = (otherExtent && description().has_value() == otherExtent->description().has_value() && *description() == *otherExtent->description() && d->geographicElements_.size() == otherExtent->d->geographicElements_.size() && d->verticalElements_.size() == otherExtent->d->verticalElements_.size() && d->temporalElements_.size() == otherExtent->d->temporalElements_.size()); if (ret) { for (size_t i = 0; ret && i < d->geographicElements_.size(); ++i) { ret = d->geographicElements_[i]->_isEquivalentTo( otherExtent->d->geographicElements_[i].get(), criterion, dbContext); } for (size_t i = 0; ret && i < d->verticalElements_.size(); ++i) { ret = d->verticalElements_[i]->_isEquivalentTo( otherExtent->d->verticalElements_[i].get(), criterion, dbContext); } for (size_t i = 0; ret && i < d->temporalElements_.size(); ++i) { ret = d->temporalElements_[i]->_isEquivalentTo( otherExtent->d->temporalElements_[i].get(), criterion, dbContext); } } return ret; } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns whether this extent contains the other one. * * Behavior only well specified if each sub-extent category as at most * one element. */ bool Extent::contains(const ExtentNNPtr &other) const { bool res = true; if (d->geographicElements_.size() == 1 && other->d->geographicElements_.size() == 1) { res = d->geographicElements_[0]->contains( other->d->geographicElements_[0]); } if (res && d->verticalElements_.size() == 1 && other->d->verticalElements_.size() == 1) { res = d->verticalElements_[0]->contains(other->d->verticalElements_[0]); } if (res && d->temporalElements_.size() == 1 && other->d->temporalElements_.size() == 1) { res = d->temporalElements_[0]->contains(other->d->temporalElements_[0]); } return res; } // --------------------------------------------------------------------------- /** \brief Returns whether this extent intersects the other one. * * Behavior only well specified if each sub-extent category as at most * one element. */ bool Extent::intersects(const ExtentNNPtr &other) const { bool res = true; if (d->geographicElements_.size() == 1 && other->d->geographicElements_.size() == 1) { res = d->geographicElements_[0]->intersects( other->d->geographicElements_[0]); } if (res && d->verticalElements_.size() == 1 && other->d->verticalElements_.size() == 1) { res = d->verticalElements_[0]->intersects(other->d->verticalElements_[0]); } if (res && d->temporalElements_.size() == 1 && other->d->temporalElements_.size() == 1) { res = d->temporalElements_[0]->intersects(other->d->temporalElements_[0]); } return res; } // --------------------------------------------------------------------------- /** \brief Returns the intersection of this extent with another one. * * Behavior only well specified if there is one single GeographicExtent * in each object. * Returns nullptr otherwise. */ ExtentPtr Extent::intersection(const ExtentNNPtr &other) const { if (d->geographicElements_.size() == 1 && other->d->geographicElements_.size() == 1) { if (contains(other)) { return other.as_nullable(); } auto self = util::nn_static_pointer_cast(shared_from_this()); if (other->contains(self)) { return self.as_nullable(); } auto geogIntersection = d->geographicElements_[0]->intersection( other->d->geographicElements_[0]); if (geogIntersection) { return create(util::optional(), std::vector{ NN_NO_CHECK(geogIntersection)}, std::vector{}, std::vector{}); } } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Identifier::Private { optional authority_{}; std::string code_{}; optional codeSpace_{}; optional version_{}; optional description_{}; optional uri_{}; Private() = default; Private(const std::string &codeIn, const PropertyMap &properties) : code_(codeIn) { setProperties(properties); } private: // cppcheck-suppress functionStatic void setProperties(const PropertyMap &properties); }; // --------------------------------------------------------------------------- void Identifier::Private::setProperties( const PropertyMap &properties) // throw(InvalidValueTypeException) { { const auto pVal = properties.get(AUTHORITY_KEY); if (pVal) { if (auto genVal = dynamic_cast(pVal->get())) { if (genVal->type() == BoxedValue::Type::STRING) { authority_ = Citation(genVal->stringValue()); } else { throw InvalidValueTypeException("Invalid value type for " + AUTHORITY_KEY); } } else { auto citation = dynamic_cast(pVal->get()); if (citation) { authority_ = *citation; } else { throw InvalidValueTypeException("Invalid value type for " + AUTHORITY_KEY); } } } } { const auto pVal = properties.get(CODE_KEY); if (pVal) { if (auto genVal = dynamic_cast(pVal->get())) { if (genVal->type() == BoxedValue::Type::INTEGER) { code_ = toString(genVal->integerValue()); } else if (genVal->type() == BoxedValue::Type::STRING) { code_ = genVal->stringValue(); } else { throw InvalidValueTypeException("Invalid value type for " + CODE_KEY); } } else { throw InvalidValueTypeException("Invalid value type for " + CODE_KEY); } } } properties.getStringValue(CODESPACE_KEY, codeSpace_); properties.getStringValue(VERSION_KEY, version_); properties.getStringValue(DESCRIPTION_KEY, description_); properties.getStringValue(URI_KEY, uri_); } //! @endcond // --------------------------------------------------------------------------- Identifier::Identifier(const std::string &codeIn, const util::PropertyMap &properties) : d(std::make_unique(codeIn, properties)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- Identifier::Identifier() : d(std::make_unique()) {} // --------------------------------------------------------------------------- Identifier::Identifier(const Identifier &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- Identifier::~Identifier() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a Identifier. * * @param codeIn Alphanumeric value identifying an instance in the codespace * @param properties See \ref general_properties. * Generally, the Identifier::CODESPACE_KEY should be set. * @return a new Identifier. */ IdentifierNNPtr Identifier::create(const std::string &codeIn, const PropertyMap &properties) { return Identifier::nn_make_shared(codeIn, properties); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress IdentifierNNPtr Identifier::createFromDescription(const std::string &descriptionIn) { auto id = Identifier::nn_make_shared(); id->d->description_ = descriptionIn; return id; } //! @endcond // --------------------------------------------------------------------------- /** \brief Return a citation for the organization responsible for definition and * maintenance of the code. * * @return the citation for the authority, or empty. */ const optional &Identifier::authority() PROJ_PURE_DEFN { return d->authority_; } // --------------------------------------------------------------------------- /** \brief Return the alphanumeric value identifying an instance in the * codespace. * * e.g. "4326" (for EPSG:4326 WGS 84 GeographicCRS) * * @return the code. */ const std::string &Identifier::code() PROJ_PURE_DEFN { return d->code_; } // --------------------------------------------------------------------------- /** \brief Return the organization responsible for definition and maintenance of * the code. * * e.g "EPSG" * * @return the authority codespace, or empty. */ const optional &Identifier::codeSpace() PROJ_PURE_DEFN { return d->codeSpace_; } // --------------------------------------------------------------------------- /** \brief Return the version identifier for the namespace. * * When appropriate, the edition is identified by the effective date, coded * using ISO 8601 date format. * * @return the version or empty. */ const optional &Identifier::version() PROJ_PURE_DEFN { return d->version_; } // --------------------------------------------------------------------------- /** \brief Return the natural language description of the meaning of the code * value. * * @return the description or empty. */ const optional &Identifier::description() PROJ_PURE_DEFN { return d->description_; } // --------------------------------------------------------------------------- /** \brief Return the URI of the identifier. * * @return the URI or empty. */ const optional &Identifier::uri() PROJ_PURE_DEFN { return d->uri_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Identifier::_exportToWKT(WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == WKTFormatter::Version::WKT2; const std::string &l_code = code(); std::string l_codeSpace = *codeSpace(); std::string l_version = *version(); const auto &dbContext = formatter->databaseContext(); if (dbContext) { dbContext->getAuthorityAndVersion(*codeSpace(), l_codeSpace, l_version); } if (!l_codeSpace.empty() && !l_code.empty()) { if (isWKT2) { formatter->startNode(WKTConstants::ID, false); formatter->addQuotedString(l_codeSpace); try { (void)std::stoi(l_code); formatter->add(l_code); } catch (const std::exception &) { formatter->addQuotedString(l_code); } if (!l_version.empty()) { bool isDouble = false; (void)c_locale_stod(l_version, isDouble); if (isDouble) { formatter->add(l_version); } else { formatter->addQuotedString(l_version); } } if (authority().has_value() && *(authority()->title()) != *codeSpace()) { formatter->startNode(WKTConstants::CITATION, false); formatter->addQuotedString(*(authority()->title())); formatter->endNode(); } if (uri().has_value()) { formatter->startNode(WKTConstants::URI, false); formatter->addQuotedString(*(uri())); formatter->endNode(); } formatter->endNode(); } else { formatter->startNode(WKTConstants::AUTHORITY, false); formatter->addQuotedString(l_codeSpace); formatter->addQuotedString(l_code); formatter->endNode(); } } } // --------------------------------------------------------------------------- void Identifier::_exportToJSON(JSONFormatter *formatter) const { const std::string &l_code = code(); std::string l_codeSpace = *codeSpace(); std::string l_version = *version(); const auto &dbContext = formatter->databaseContext(); if (dbContext) { dbContext->getAuthorityAndVersion(*codeSpace(), l_codeSpace, l_version); } if (!l_codeSpace.empty() && !l_code.empty()) { auto writer = formatter->writer(); auto objContext(formatter->MakeObjectContext(nullptr, false)); writer->AddObjKey("authority"); writer->Add(l_codeSpace); writer->AddObjKey("code"); try { writer->Add(std::stoi(l_code)); } catch (const std::exception &) { writer->Add(l_code); } if (!l_version.empty()) { writer->AddObjKey("version"); bool isDouble = false; (void)c_locale_stod(l_version, isDouble); if (isDouble) { writer->AddUnquoted(l_version.c_str()); } else { writer->Add(l_version); } } if (authority().has_value() && *(authority()->title()) != *codeSpace()) { writer->AddObjKey("authority_citation"); writer->Add(*(authority()->title())); } if (uri().has_value()) { writer->AddObjKey("uri"); writer->Add(*(uri())); } } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool isIgnoredChar(char ch) { return ch == ' ' || ch == '_' || ch == '-' || ch == '/' || ch == '(' || ch == ')' || ch == '.' || ch == '&' || ch == ','; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static char lower(char ch) { return ch >= 'A' && ch <= 'Z' ? ch - 'A' + 'a' : ch; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const struct utf8_to_lower { const char *utf8; char ascii; } map_utf8_to_lower[] = { {"\xc3\xa1", 'a'}, // a acute {"\xc3\xa4", 'a'}, // a tremma {"\xc4\x9b", 'e'}, // e reverse circumflex {"\xc3\xa8", 'e'}, // e grave {"\xc3\xa9", 'e'}, // e acute {"\xc3\xab", 'e'}, // e tremma {"\xc3\xad", 'i'}, // i grave {"\xc3\xb4", 'o'}, // o circumflex {"\xc3\xb6", 'o'}, // o tremma {"\xc3\xa7", 'c'}, // c cedilla }; static const struct utf8_to_lower *get_ascii_replacement(const char *c_str) { for (const auto &pair : map_utf8_to_lower) { if (*c_str == pair.utf8[0] && strncmp(c_str, pair.utf8, strlen(pair.utf8)) == 0) { return &pair; } } return nullptr; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** Checks if needle is a substring of c_str. * * e.g matchesLowerCase("JavaScript", "java") returns true */ static bool matchesLowerCase(const char *c_str, const char *needle) { size_t i = 0; for (; c_str[i] && needle[i]; ++i) { if (lower(c_str[i]) != lower(needle[i])) { return false; } } return needle[i] == 0; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static inline bool isdigit(char ch) { return ch >= '0' && ch <= '9'; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::string Identifier::canonicalizeName(const std::string &str, bool biggerDifferencesAllowed) { std::string res; const char *c_str = str.c_str(); for (size_t i = 0; c_str[i] != 0; ++i) { const auto ch = lower(c_str[i]); if (ch == ' ' && c_str[i + 1] == '+' && c_str[i + 2] == ' ') { i += 2; continue; } // Canonicalize "19dd" (where d is a digit) as "dd" if (ch == '1' && !res.empty() && !isdigit(res.back()) && c_str[i + 1] == '9' && isdigit(c_str[i + 2]) && isdigit(c_str[i + 3])) { ++i; continue; } if (biggerDifferencesAllowed) { const auto skipSubstring = [](char l_ch, const char *l_str, size_t &idx, const char *substr) { if (l_ch == substr[0] && idx > 0 && isIgnoredChar(l_str[idx - 1]) && matchesLowerCase(l_str + idx, substr)) { idx += strlen(substr) - 1; return true; } return false; }; // Skip "zone" or "height" if preceding character is a space if (skipSubstring(ch, c_str, i, "zone") || skipSubstring(ch, c_str, i, "height")) { continue; } // Replace a substring by its first character if preceding character // is a space or a digit const auto replaceByFirstChar = [](char l_ch, const char *l_str, size_t &idx, const char *substr, std::string &l_res) { if (l_ch == substr[0] && idx > 0 && (isIgnoredChar(l_str[idx - 1]) || isdigit(l_str[idx - 1])) && matchesLowerCase(l_str + idx, substr)) { l_res.push_back(l_ch); idx += strlen(substr) - 1; return true; } return false; }; // Replace "north" or "south" by its first character if preceding // character is a space or a digit if (replaceByFirstChar(ch, c_str, i, "north", res) || replaceByFirstChar(ch, c_str, i, "south", res)) { continue; } } if (static_cast(ch) > 127) { const auto *replacement = get_ascii_replacement(c_str + i); if (replacement) { res.push_back(replacement->ascii); i += strlen(replacement->utf8) - 1; continue; } } if (!isIgnoredChar(ch)) { res.push_back(ch); } } return res; } //! @endcond // --------------------------------------------------------------------------- /** \brief Returns whether two names are considered equivalent. * * Two names are equivalent by removing any space, underscore, dash, slash, * { or } character from them, and comparing in a case insensitive way. * * @param a first string * @param b second string * @param biggerDifferencesAllowed if true, "height" and "zone" words are * ignored, and "north" is shortened as "n" and "south" as "n". * @since 9.6 */ bool Identifier::isEquivalentName(const char *a, const char *b, bool biggerDifferencesAllowed) noexcept { size_t i = 0; size_t j = 0; char lastValidA = 0; char lastValidB = 0; while (a[i] != 0 || b[j] != 0) { char aCh = lower(a[i]); char bCh = lower(b[j]); if (aCh == ' ' && a[i + 1] == '+' && a[i + 2] == ' ' && a[i + 3] != 0) { i += 3; continue; } if (bCh == ' ' && b[j + 1] == '+' && b[j + 2] == ' ' && b[j + 3] != 0) { j += 3; continue; } if (isIgnoredChar(aCh)) { ++i; continue; } if (isIgnoredChar(bCh)) { ++j; continue; } // Canonicalize "19dd" (where d is a digit) as "dd" if (aCh == '1' && !isdigit(lastValidA) && a[i + 1] == '9' && isdigit(a[i + 2]) && isdigit(a[i + 3])) { i += 2; lastValidA = '9'; continue; } if (bCh == '1' && !isdigit(lastValidB) && b[j + 1] == '9' && isdigit(b[j + 2]) && isdigit(b[j + 3])) { j += 2; lastValidB = '9'; continue; } if (biggerDifferencesAllowed) { // Skip a substring if preceding character is a space const auto skipSubString = [](char ch, const char *str, size_t &idx, const char *substr) { if (ch == substr[0] && idx > 0 && isIgnoredChar(str[idx - 1]) && matchesLowerCase(str + idx, substr)) { idx += strlen(substr); return true; } return false; }; bool skip = false; if (skipSubString(aCh, a, i, "zone")) skip = true; if (skipSubString(bCh, b, j, "zone")) skip = true; if (skip) continue; if (skipSubString(aCh, a, i, "height")) skip = true; if (skipSubString(bCh, b, j, "height")) skip = true; if (skip) continue; // Replace a substring by its first character if preceding character // is a space or a digit const auto replaceByFirstChar = [](char ch, const char *str, size_t &idx, const char *substr) { if (ch == substr[0] && idx > 0 && (isIgnoredChar(str[idx - 1]) || isdigit(str[idx - 1])) && matchesLowerCase(str + idx, substr)) { idx += strlen(substr) - 1; return true; } return false; }; if (!replaceByFirstChar(aCh, a, i, "north")) replaceByFirstChar(aCh, a, i, "south"); if (!replaceByFirstChar(bCh, b, j, "north")) replaceByFirstChar(bCh, b, j, "south"); } if (static_cast(aCh) > 127) { const auto *replacement = get_ascii_replacement(a + i); if (replacement) { aCh = replacement->ascii; i += strlen(replacement->utf8) - 1; } } if (static_cast(bCh) > 127) { const auto *replacement = get_ascii_replacement(b + j); if (replacement) { bCh = replacement->ascii; j += strlen(replacement->utf8) - 1; } } if (aCh != bCh) { return false; } lastValidA = aCh; lastValidB = bCh; if (aCh != 0) ++i; if (bCh != 0) ++j; } return true; } // --------------------------------------------------------------------------- /** \brief Returns whether two names are considered equivalent. * * Two names are equivalent by removing any space, underscore, dash, slash, * { or } character from them, and comparing in a case insensitive way. */ bool Identifier::isEquivalentName(const char *a, const char *b) noexcept { return isEquivalentName(a, b, /* biggerDifferencesAllowed = */ true); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PositionalAccuracy::Private { std::string value_{}; }; //! @endcond // --------------------------------------------------------------------------- PositionalAccuracy::PositionalAccuracy(const std::string &valueIn) : d(std::make_unique()) { d->value_ = valueIn; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PositionalAccuracy::~PositionalAccuracy() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the value of the positional accuracy. */ const std::string &PositionalAccuracy::value() PROJ_PURE_DEFN { return d->value_; } // --------------------------------------------------------------------------- /** \brief Instantiate a PositionalAccuracy. * * @param valueIn positional accuracy value. * @return a new PositionalAccuracy. */ PositionalAccuracyNNPtr PositionalAccuracy::create(const std::string &valueIn) { return PositionalAccuracy::nn_make_shared(valueIn); } } // namespace metadata NS_PROJ_END proj-9.6.0/src/iso19111/operation/000775 001754 001755 00000000000 14764566152 016371 5ustar00e012349e012349000000 000000 proj-9.6.0/src/iso19111/operation/concatenatedoperation.cpp000664 001754 001755 00000121774 14764566077 023470 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/crs_internal.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "coordinateoperation_internal.hpp" #include "oputils.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // M_PI // clang-format on #include "proj_constants.h" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include #include #include #include using namespace NS_PROJ::internal; // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ConcatenatedOperation::Private { std::vector operations_{}; bool computedName_ = false; explicit Private(const std::vector &operationsIn) : operations_(operationsIn) {} Private(const Private &) = default; }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ConcatenatedOperation::~ConcatenatedOperation() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ConcatenatedOperation::ConcatenatedOperation(const ConcatenatedOperation &other) : CoordinateOperation(other), d(std::make_unique(*(other.d))) {} //! @endcond // --------------------------------------------------------------------------- ConcatenatedOperation::ConcatenatedOperation( const std::vector &operationsIn) : CoordinateOperation(), d(std::make_unique(operationsIn)) { for (const auto &op : operationsIn) { if (op->requiresPerCoordinateInputTime()) { setRequiresPerCoordinateInputTime(true); break; } } } // --------------------------------------------------------------------------- /** \brief Return the operation steps of the concatenated operation. * * @return the operation steps. */ const std::vector & ConcatenatedOperation::operations() const { return d->operations_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool areCRSMoreOrLessEquivalent(const crs::CRS *a, const crs::CRS *b) { const auto &aIds = a->identifiers(); const auto &bIds = b->identifiers(); if (aIds.size() == 1 && bIds.size() == 1 && aIds[0]->code() == bIds[0]->code() && *aIds[0]->codeSpace() == *bIds[0]->codeSpace()) { return true; } if (a->_isEquivalentTo(b, util::IComparable::Criterion::EQUIVALENT)) { return true; } // This is for example for EPSG:10146 which is EPSG:9471 // (INAGeoid2020 v1 height) // to EPSG:20036 (INAGeoid2020 v2 height), but chains // EPSG:9629 (SRGI2013 to SRGI2013 + INAGeoid2020 v1 height (1)) // with EPSG:10145 (SRGI2013 to SRGI2013 + INAGeoid2020 v2 height (1)) const auto compoundA = dynamic_cast(a); const auto compoundB = dynamic_cast(b); if (compoundA && !compoundB) return areCRSMoreOrLessEquivalent( compoundA->componentReferenceSystems()[1].get(), b); else if (!compoundA && compoundB) return areCRSMoreOrLessEquivalent( a, compoundB->componentReferenceSystems()[1].get()); return false; } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a ConcatenatedOperation * * @param properties See \ref general_properties. At minimum the name should * be * defined. * @param operationsIn Vector of the CoordinateOperation steps. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. * @throws InvalidOperation if the object cannot be constructed. */ ConcatenatedOperationNNPtr ConcatenatedOperation::create( const util::PropertyMap &properties, const std::vector &operationsIn, const std::vector &accuracies) // throw InvalidOperation { if (operationsIn.size() < 2) { throw InvalidOperation( "ConcatenatedOperation must have at least 2 operations"); } crs::CRSPtr lastTargetCRS; crs::CRSPtr interpolationCRS; bool interpolationCRSValid = true; for (size_t i = 0; i < operationsIn.size(); i++) { auto l_sourceCRS = operationsIn[i]->sourceCRS(); auto l_targetCRS = operationsIn[i]->targetCRS(); if (interpolationCRSValid) { auto subOpInterpCRS = operationsIn[i]->interpolationCRS(); if (interpolationCRS == nullptr) interpolationCRS = std::move(subOpInterpCRS); else if (subOpInterpCRS == nullptr || !(subOpInterpCRS->isEquivalentTo( interpolationCRS.get(), util::IComparable::Criterion::EQUIVALENT))) { interpolationCRS = nullptr; interpolationCRSValid = false; } } if (l_sourceCRS == nullptr || l_targetCRS == nullptr) { throw InvalidOperation("At least one of the operation lacks a " "source and/or target CRS"); } if (i >= 1) { if (!areCRSMoreOrLessEquivalent(l_sourceCRS.get(), lastTargetCRS.get())) { #ifdef DEBUG_CONCATENATED_OPERATION std::cerr << "Step " << i - 1 << ": " << operationsIn[i - 1]->nameStr() << std::endl; std::cerr << "Step " << i << ": " << operationsIn[i]->nameStr() << std::endl; { auto f(io::WKTFormatter::create( io::WKTFormatter::Convention::WKT2_2019)); std::cerr << "Source CRS of step " << i << ":" << std::endl; std::cerr << l_sourceCRS->exportToWKT(f.get()) << std::endl; } { auto f(io::WKTFormatter::create( io::WKTFormatter::Convention::WKT2_2019)); std::cerr << "Target CRS of step " << i - 1 << ":" << std::endl; std::cerr << lastTargetCRS->exportToWKT(f.get()) << std::endl; } #endif throw InvalidOperation( "Inconsistent chaining of CRS in operations"); } } lastTargetCRS = std::move(l_targetCRS); } // When chaining VerticalCRS -> GeographicCRS -> VerticalCRS, use // GeographicCRS as the interpolationCRS const auto l_sourceCRS = NN_NO_CHECK(operationsIn[0]->sourceCRS()); const auto l_targetCRS = NN_NO_CHECK(operationsIn.back()->targetCRS()); if (operationsIn.size() == 2 && interpolationCRS == nullptr && dynamic_cast(l_sourceCRS.get()) != nullptr && dynamic_cast(l_targetCRS.get()) != nullptr) { const auto geog1 = dynamic_cast( operationsIn[0]->targetCRS().get()); const auto geog2 = dynamic_cast( operationsIn[1]->sourceCRS().get()); if (geog1 != nullptr && geog2 != nullptr && geog1->_isEquivalentTo(geog2, util::IComparable::Criterion::EQUIVALENT)) { interpolationCRS = operationsIn[0]->targetCRS(); } } auto op = ConcatenatedOperation::nn_make_shared( operationsIn); op->assignSelf(op); op->setProperties(properties); op->setCRSs(l_sourceCRS, l_targetCRS, interpolationCRS); op->setAccuracies(accuracies); #ifdef DEBUG_CONCATENATED_OPERATION { auto f( io::WKTFormatter::create(io::WKTFormatter::Convention::WKT2_2019)); std::cerr << "ConcatenatedOperation::create()" << std::endl; std::cerr << op->exportToWKT(f.get()) << std::endl; } #endif return op; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- /* static */ void ConcatenatedOperation::setCRSsUpdateInverse(CoordinateOperation *co, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { co->setCRSsUpdateInverse(sourceCRS, targetCRS, co->interpolationCRS()); } // --------------------------------------------------------------------------- void ConcatenatedOperation::fixSteps( const crs::CRSNNPtr &concatOpSourceCRS, const crs::CRSNNPtr &concatOpTargetCRS, std::vector &operationsInOut, const io::DatabaseContextPtr & /*dbContext*/, bool fixDirectionAllowed) { // Set of heuristics to assign CRS to steps, and possibly reverse them. const auto isGeographic = [](const crs::CRS *crs) -> bool { return dynamic_cast(crs) != nullptr; }; const auto isGeocentric = [](const crs::CRS *crs) -> bool { const auto geodCRS = dynamic_cast(crs); return (geodCRS && geodCRS->isGeocentric()); }; // Apply axis order reversal operation on first operation if needed // to set CRSs on it if (operationsInOut.size() >= 1) { auto &op = operationsInOut.front(); auto l_sourceCRS = op->sourceCRS(); auto l_targetCRS = op->targetCRS(); auto conv = dynamic_cast(op.get()); if (conv && !l_sourceCRS && !l_targetCRS && isAxisOrderReversal(conv->method()->getEPSGCode())) { auto reversedCRS = concatOpSourceCRS->applyAxisOrderReversal( NORMALIZED_AXIS_ORDER_SUFFIX_STR); setCRSsUpdateInverse(op.get(), concatOpSourceCRS, reversedCRS); } } // Apply axis order reversal operation on last operation if needed // to set CRSs on it if (operationsInOut.size() >= 2) { auto &op = operationsInOut.back(); auto l_sourceCRS = op->sourceCRS(); auto l_targetCRS = op->targetCRS(); auto conv = dynamic_cast(op.get()); if (conv && !l_sourceCRS && !l_targetCRS && isAxisOrderReversal(conv->method()->getEPSGCode())) { auto reversedCRS = concatOpTargetCRS->applyAxisOrderReversal( NORMALIZED_AXIS_ORDER_SUFFIX_STR); setCRSsUpdateInverse(op.get(), reversedCRS, concatOpTargetCRS); } } // If the first operation is a transformation whose target CRS matches the // source CRS of the concatenated operation, then reverse it. if (fixDirectionAllowed && operationsInOut.size() >= 2) { auto &op = operationsInOut.front(); auto l_sourceCRS = op->sourceCRS(); auto l_targetCRS = op->targetCRS(); if (l_sourceCRS && l_targetCRS && !areCRSMoreOrLessEquivalent(l_sourceCRS.get(), concatOpSourceCRS.get()) && areCRSMoreOrLessEquivalent(l_targetCRS.get(), concatOpSourceCRS.get())) { op = op->inverse(); } } // If the last operation is a transformation whose source CRS matches the // target CRS of the concatenated operation, then reverse it. if (fixDirectionAllowed && operationsInOut.size() >= 2) { auto &op = operationsInOut.back(); auto l_sourceCRS = op->sourceCRS(); auto l_targetCRS = op->targetCRS(); if (l_sourceCRS && l_targetCRS && !areCRSMoreOrLessEquivalent(l_targetCRS.get(), concatOpTargetCRS.get()) && areCRSMoreOrLessEquivalent(l_sourceCRS.get(), concatOpTargetCRS.get())) { op = op->inverse(); } } const auto extractDerivedCRS = [](const crs::CRS *crs) -> const crs::DerivedCRS * { auto derivedCRS = dynamic_cast(crs); if (derivedCRS) return derivedCRS; auto compoundCRS = dynamic_cast(crs); if (compoundCRS) { derivedCRS = dynamic_cast( compoundCRS->componentReferenceSystems().front().get()); if (derivedCRS) return derivedCRS; } return nullptr; }; for (size_t i = 0; i < operationsInOut.size(); ++i) { auto &op = operationsInOut[i]; auto l_sourceCRS = op->sourceCRS(); auto l_targetCRS = op->targetCRS(); auto conv = dynamic_cast(op.get()); if (conv && i == 0 && !l_sourceCRS && !l_targetCRS) { if (auto derivedCRS = extractDerivedCRS(concatOpSourceCRS.get())) { if (i + 1 < operationsInOut.size()) { // use the sourceCRS of the next operation as our target CRS l_targetCRS = operationsInOut[i + 1]->sourceCRS(); // except if it looks like the next operation should // actually be reversed !!! if (l_targetCRS && !areCRSMoreOrLessEquivalent( l_targetCRS.get(), derivedCRS->baseCRS().get()) && operationsInOut[i + 1]->targetCRS() && areCRSMoreOrLessEquivalent( operationsInOut[i + 1]->targetCRS().get(), derivedCRS->baseCRS().get())) { l_targetCRS = operationsInOut[i + 1]->targetCRS(); } } if (!l_targetCRS) { l_targetCRS = derivedCRS->baseCRS().as_nullable(); } auto invConv = util::nn_dynamic_pointer_cast(op); auto nn_targetCRS = NN_NO_CHECK(l_targetCRS); if (invConv) { setCRSsUpdateInverse(op.get(), concatOpSourceCRS, nn_targetCRS); } else if (fixDirectionAllowed) { op->setCRSs(nn_targetCRS, concatOpSourceCRS, nullptr); op = op->inverse(); } } else if (i + 1 < operationsInOut.size()) { /* coverity[copy_paste_error] */ l_targetCRS = operationsInOut[i + 1]->sourceCRS(); if (l_targetCRS) { setCRSsUpdateInverse(op.get(), concatOpSourceCRS, NN_NO_CHECK(l_targetCRS)); } } } else if (conv && i + 1 == operationsInOut.size() && !l_sourceCRS && !l_targetCRS) { auto derivedCRS = extractDerivedCRS(concatOpTargetCRS.get()); if (derivedCRS) { if (i >= 1) { // use the targetCRS of the previous operation as our source // CRS l_sourceCRS = operationsInOut[i - 1]->targetCRS(); // except if it looks like the previous operation should // actually be reversed !!! if (l_sourceCRS && !areCRSMoreOrLessEquivalent( l_sourceCRS.get(), derivedCRS->baseCRS().get()) && operationsInOut[i - 1]->sourceCRS() && areCRSMoreOrLessEquivalent( operationsInOut[i - 1]->sourceCRS().get(), derivedCRS->baseCRS().get())) { l_sourceCRS = operationsInOut[i - 1]->sourceCRS(); operationsInOut[i - 1] = operationsInOut[i - 1]->inverse(); } } if (!l_sourceCRS) { l_sourceCRS = derivedCRS->baseCRS().as_nullable(); } setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS); } else if (i >= 1) { l_sourceCRS = operationsInOut[i - 1]->targetCRS(); if (l_sourceCRS) { derivedCRS = extractDerivedCRS(l_sourceCRS.get()); if (fixDirectionAllowed && derivedCRS && conv->isEquivalentTo( derivedCRS->derivingConversion().get(), util::IComparable::Criterion::EQUIVALENT)) { op = op->inverse(); } setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS); } } } else if (conv && i > 0 && i < operationsInOut.size() - 1) { l_sourceCRS = operationsInOut[i - 1]->targetCRS(); l_targetCRS = operationsInOut[i + 1]->sourceCRS(); // For an intermediate conversion, use the target CRS of the // previous step and the source CRS of the next step if (l_sourceCRS && l_targetCRS) { // If the sourceCRS is a projectedCRS and the target a // geographic one, then we must inverse the operation. See // https://github.com/OSGeo/PROJ/issues/2817 if (fixDirectionAllowed && dynamic_cast( l_sourceCRS.get()) && dynamic_cast( l_targetCRS.get())) { op = op->inverse(); setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK(l_targetCRS)); } else { setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK(l_targetCRS)); // Deal with special case of // https://github.com/OSGeo/PROJ/issues/4116 where EPSG:7989 // -- NAVD88 height to NAVD88 depth conversion is chained // with "NAD83(FBN)+LMSL to NAD83(FBN)+NAVD88 depth" The // latter must thus be inversed const auto nPosTo = conv->nameStr().find(" to "); const auto nPosToNextOp = operationsInOut[i + 1]->nameStr().find(" to "); if (fixDirectionAllowed && nPosTo != std::string::npos && nPosToNextOp != std::string::npos) { const std::string convTo = conv->nameStr().substr(nPosTo + strlen(" to ")); const std::string nextOpFrom = operationsInOut[i + 1]->nameStr().substr( 0, nPosToNextOp); const std::string nextOpTo = operationsInOut[i + 1]->nameStr().substr( nPosToNextOp + strlen(" to ")); if (nextOpTo.find(convTo) != std::string::npos && nextOpFrom.find(convTo) == std::string::npos && operationsInOut[i + 1]->sourceCRS()) { operationsInOut[i + 1] = operationsInOut[i + 1]->inverse(); setCRSsUpdateInverse( op.get(), NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK( operationsInOut[i + 1]->sourceCRS())); } } } } else if (l_sourceCRS && l_targetCRS == nullptr && conv->method()->getEPSGCode() == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) { // Needed for EPSG:7987 e.g. auto vertCRS = dynamic_cast(l_sourceCRS.get()); if (vertCRS && ends_with(l_sourceCRS->nameStr(), " height") && &vertCRS->coordinateSystem()->axisList()[0]->direction() == &cs::AxisDirection::UP) { setCRSsUpdateInverse( op.get(), NN_NO_CHECK(l_sourceCRS), crs::VerticalCRS::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, l_sourceCRS->nameStr().substr( 0, l_sourceCRS->nameStr().size() - strlen(" height")) + " depth"), vertCRS->datum(), vertCRS->datumEnsemble(), cs::VerticalCS::create( util::PropertyMap(), cs::CoordinateSystemAxis::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "Gravity-related depth"), "D", cs::AxisDirection::DOWN, vertCRS->coordinateSystem() ->axisList()[0] ->unit())))); } } } else if (!conv && l_sourceCRS && l_targetCRS) { // Transformations might be mentioned in their forward directions, // whereas we should instead use the reverse path. auto prevOpTarget = (i == 0) ? concatOpSourceCRS.as_nullable() : operationsInOut[i - 1]->targetCRS(); if (prevOpTarget == nullptr) { throw InvalidOperation( "Cannot determine targetCRS of operation at step " + toString(static_cast(i))); } if (areCRSMoreOrLessEquivalent(l_sourceCRS.get(), prevOpTarget.get())) { // do nothing } else if (fixDirectionAllowed && areCRSMoreOrLessEquivalent(l_targetCRS.get(), prevOpTarget.get())) { op = op->inverse(); } // Below is needed for EPSG:9103 which chains NAD83(2011) geographic // 2D with NAD83(2011) geocentric else if (l_sourceCRS->nameStr() == prevOpTarget->nameStr() && ((isGeographic(l_sourceCRS.get()) && isGeocentric(prevOpTarget.get())) || (isGeocentric(l_sourceCRS.get()) && isGeographic(prevOpTarget.get())))) { auto newOp(Conversion::createGeographicGeocentric( NN_NO_CHECK(prevOpTarget), NN_NO_CHECK(l_sourceCRS))); operationsInOut.insert(operationsInOut.begin() + i, newOp); } else if (l_targetCRS->nameStr() == prevOpTarget->nameStr() && ((isGeographic(l_targetCRS.get()) && isGeocentric(prevOpTarget.get())) || (isGeocentric(l_targetCRS.get()) && isGeographic(prevOpTarget.get())))) { auto newOp(Conversion::createGeographicGeocentric( NN_NO_CHECK(prevOpTarget), NN_NO_CHECK(l_targetCRS))); operationsInOut.insert(operationsInOut.begin() + i, newOp); // Particular case for https://github.com/OSGeo/PROJ/issues/3819 // where the antepenultimate transformation goes to A // (geographic 3D) // and the last transformation is a NADCON 3D // but between A (geographic 2D) to B (geographic 2D), and the // concatenated transformation target CRS is B (geographic 3D) // This is due to an oddity of the EPSG database that registers // the NADCON 3D transformation between the 2D geographic CRS // and not the 3D ones. } else if (i + 1 == operationsInOut.size() && l_sourceCRS->nameStr() == prevOpTarget->nameStr() && l_targetCRS->nameStr() == concatOpTargetCRS->nameStr() && isGeographic(l_targetCRS.get()) && isGeographic(concatOpTargetCRS.get()) && isGeographic(l_sourceCRS.get()) && isGeographic(prevOpTarget.get()) && dynamic_cast( prevOpTarget.get()) ->coordinateSystem() ->axisList() .size() == 3 && dynamic_cast( l_sourceCRS.get()) ->coordinateSystem() ->axisList() .size() == 2 && dynamic_cast( l_targetCRS.get()) ->coordinateSystem() ->axisList() .size() == 2) { const auto transf = dynamic_cast(op.get()); if (transf && (transf->method()->getEPSGCode() == EPSG_CODE_METHOD_NADCON5_3D || transf->parameterValue( PROJ_WKT2_PARAMETER_LATITUDE_LONGITUDE_ELLIPOISDAL_HEIGHT_DIFFERENCE_FILE, 0))) { setCRSsUpdateInverse(op.get(), NN_NO_CHECK(prevOpTarget), concatOpTargetCRS); } } } } if (!operationsInOut.empty()) { auto l_sourceCRS = operationsInOut.front()->sourceCRS(); if (l_sourceCRS && !areCRSMoreOrLessEquivalent( l_sourceCRS.get(), concatOpSourceCRS.get())) { throw InvalidOperation("The source CRS of the first step of " "concatenated operation is not the same " "as the source CRS of the concatenated " "operation itself"); } auto l_targetCRS = operationsInOut.back()->targetCRS(); if (l_targetCRS && !areCRSMoreOrLessEquivalent( l_targetCRS.get(), concatOpTargetCRS.get())) { if (l_targetCRS->nameStr() == concatOpTargetCRS->nameStr() && ((isGeographic(l_targetCRS.get()) && isGeocentric(concatOpTargetCRS.get())) || (isGeocentric(l_targetCRS.get()) && isGeographic(concatOpTargetCRS.get())))) { auto newOp(Conversion::createGeographicGeocentric( NN_NO_CHECK(l_targetCRS), concatOpTargetCRS)); operationsInOut.push_back(newOp); } else { throw InvalidOperation("The target CRS of the last step of " "concatenated operation is not the same " "as the target CRS of the concatenated " "operation itself"); } } } } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a ConcatenatedOperation, or return a single * coordinate * operation. * * This computes its accuracy from the sum of its member operations, its * extent * * @param operationsIn Vector of the CoordinateOperation steps. * @param checkExtent Whether we should check the non-emptiness of the * intersection * of the extents of the operations * @throws InvalidOperation if the object cannot be constructed. */ CoordinateOperationNNPtr ConcatenatedOperation::createComputeMetadata( const std::vector &operationsIn, bool checkExtent) // throw InvalidOperation { util::PropertyMap properties; if (operationsIn.size() == 1) { return operationsIn[0]; } std::vector flattenOps; bool hasBallparkTransformation = false; for (const auto &subOp : operationsIn) { hasBallparkTransformation |= subOp->hasBallparkTransformation(); auto subOpConcat = dynamic_cast(subOp.get()); if (subOpConcat) { auto subOps = subOpConcat->operations(); for (const auto &subSubOp : subOps) { flattenOps.emplace_back(subSubOp); } } else { flattenOps.emplace_back(subOp); } } // Remove consecutive inverse operations if (flattenOps.size() > 2) { std::vector indices; for (size_t i = 0; i < flattenOps.size(); ++i) indices.push_back(i); while (true) { bool bHasChanged = false; for (size_t i = 0; i + 1 < indices.size(); ++i) { if (flattenOps[indices[i]]->_isEquivalentTo( flattenOps[indices[i + 1]]->inverse().get(), util::IComparable::Criterion::EQUIVALENT) && flattenOps[indices[i]]->sourceCRS()->_isEquivalentTo( flattenOps[indices[i + 1]]->targetCRS().get(), util::IComparable::Criterion::EQUIVALENT)) { indices.erase(indices.begin() + i, indices.begin() + i + 2); bHasChanged = true; break; } } // We bail out if indices.size() == 2, because potentially // the last 2 remaining ones could auto-cancel, and we would have // to have a special case for that (and this happens in practice). if (!bHasChanged || indices.size() <= 2) break; } if (indices.size() < flattenOps.size()) { std::vector flattenOpsNew; for (size_t i = 0; i < indices.size(); ++i) { flattenOpsNew.emplace_back(flattenOps[indices[i]]); } flattenOps = std::move(flattenOpsNew); } } if (flattenOps.size() == 1) { return flattenOps[0]; } properties.set(common::IdentifiedObject::NAME_KEY, computeConcatenatedName(flattenOps)); bool emptyIntersection = false; auto extent = getExtent(flattenOps, false, emptyIntersection); if (checkExtent && emptyIntersection) { std::string msg( "empty intersection of area of validity of concatenated " "operations"); throw InvalidOperationEmptyIntersection(msg); } if (extent) { properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } std::vector accuracies; const double accuracy = getAccuracy(flattenOps); if (accuracy >= 0.0) { accuracies.emplace_back( metadata::PositionalAccuracy::create(toString(accuracy))); } auto op = create(properties, flattenOps, accuracies); op->setHasBallparkTransformation(hasBallparkTransformation); op->d->computedName_ = true; return op; } // --------------------------------------------------------------------------- CoordinateOperationNNPtr ConcatenatedOperation::inverse() const { std::vector inversedOperations; auto l_operations = operations(); inversedOperations.reserve(l_operations.size()); for (const auto &operation : l_operations) { inversedOperations.emplace_back(operation->inverse()); } std::reverse(inversedOperations.begin(), inversedOperations.end()); auto properties = createPropertiesForInverse(this, false, false); if (d->computedName_) { properties.set(common::IdentifiedObject::NAME_KEY, computeConcatenatedName(inversedOperations)); } auto op = create(properties, inversedOperations, coordinateOperationAccuracies()); op->d->computedName_ = d->computedName_; op->setHasBallparkTransformation(hasBallparkTransformation()); op->setSourceCoordinateEpoch(targetCoordinateEpoch()); op->setTargetCoordinateEpoch(sourceCoordinateEpoch()); return op; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ConcatenatedOperation::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2 || !formatter->use2019Keywords()) { throw io::FormattingException( "Transformation can only be exported to WKT2:2019"); } formatter->startNode(io::WKTConstants::CONCATENATEDOPERATION, !identifiers().empty()); formatter->addQuotedString(nameStr()); if (formatter->use2019Keywords()) { const auto &version = operationVersion(); if (version.has_value()) { formatter->startNode(io::WKTConstants::VERSION, false); formatter->addQuotedString(*version); formatter->endNode(); } } exportSourceCRSAndTargetCRSToWKT(this, formatter); const bool canExportOperationId = !(formatter->idOnTopLevelOnly() && formatter->topLevelHasId()); const bool hasDomains = !domains().empty(); if (hasDomains) { formatter->pushDisableUsage(); } for (const auto &operation : operations()) { formatter->startNode(io::WKTConstants::STEP, false); if (canExportOperationId && !operation->identifiers().empty()) { // fake that top node has no id, so that the operation id is // considered formatter->pushHasId(false); operation->_exportToWKT(formatter); formatter->popHasId(); } else { operation->_exportToWKT(formatter); } formatter->endNode(); } if (hasDomains) { formatter->popDisableUsage(); } if (!coordinateOperationAccuracies().empty()) { formatter->startNode(io::WKTConstants::OPERATIONACCURACY, false); formatter->add(coordinateOperationAccuracies()[0]->value()); formatter->endNode(); } ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ConcatenatedOperation::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext(formatter->MakeObjectContext("ConcatenatedOperation", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("source_crs"); formatter->setAllowIDInImmediateChild(); sourceCRS()->_exportToJSON(formatter); writer->AddObjKey("target_crs"); formatter->setAllowIDInImmediateChild(); targetCRS()->_exportToJSON(formatter); writer->AddObjKey("steps"); { auto parametersContext(writer->MakeArrayContext(false)); for (const auto &operation : operations()) { formatter->setAllowIDInImmediateChild(); operation->_exportToJSON(formatter); } } if (!coordinateOperationAccuracies().empty()) { writer->AddObjKey("accuracy"); writer->Add(coordinateOperationAccuracies()[0]->value()); } ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateOperationNNPtr ConcatenatedOperation::_shallowClone() const { auto op = ConcatenatedOperation::nn_make_shared(*this); std::vector ops; for (const auto &subOp : d->operations_) { ops.emplace_back(subOp->shallowClone()); } op->d->operations_ = std::move(ops); op->assignSelf(op); op->setCRSs(this, false); return util::nn_static_pointer_cast(op); } //! @endcond // --------------------------------------------------------------------------- void ConcatenatedOperation::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(FormattingException) { double sourceYear = sourceCoordinateEpoch().has_value() ? getRoundedEpochInDecimalYear( sourceCoordinateEpoch()->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)) : 0; double targetYear = targetCoordinateEpoch().has_value() ? getRoundedEpochInDecimalYear( targetCoordinateEpoch()->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)) : 0; if (sourceYear > 0 && targetYear == 0) targetYear = sourceYear; else if (targetYear > 0 && sourceYear == 0) sourceYear = targetYear; if (sourceYear > 0) { formatter->addStep("set"); formatter->addParam("v_4", sourceYear); } for (const auto &operation : operations()) { operation->_exportToPROJString(formatter); } if (targetYear > 0) { formatter->addStep("set"); formatter->addParam("v_4", targetYear); } } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool ConcatenatedOperation::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherCO = dynamic_cast(other); if (otherCO == nullptr || (criterion == util::IComparable::Criterion::STRICT && !ObjectUsage::_isEquivalentTo(other, criterion, dbContext))) { return false; } const auto &steps = operations(); const auto &otherSteps = otherCO->operations(); if (steps.size() != otherSteps.size()) { return false; } for (size_t i = 0; i < steps.size(); i++) { if (!steps[i]->_isEquivalentTo(otherSteps[i].get(), criterion, dbContext)) { return false; } } return true; } //! @endcond // --------------------------------------------------------------------------- std::set ConcatenatedOperation::gridsNeeded( const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const { std::set res; for (const auto &operation : operations()) { const auto l_gridsNeeded = operation->gridsNeeded( databaseContext, considerKnownGridsAsAvailable); for (const auto &gridDesc : l_gridsNeeded) { res.insert(gridDesc); } } return res; } // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/conversion.cpp000664 001754 001755 00000607002 14764566077 021275 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj/internal/tracing.hpp" #include "coordinateoperation_internal.hpp" #include "esriparammappings.hpp" #include "operationmethod_private.hpp" #include "oputils.hpp" #include "parammappings.hpp" #include "vectorofvaluesparams.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // M_PI // clang-format on #include "proj_constants.h" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include #include #include #include using namespace NS_PROJ::internal; // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { //! @cond Doxygen_Suppress constexpr double UTM_LATITUDE_OF_NATURAL_ORIGIN = 0.0; constexpr double UTM_SCALE_FACTOR = 0.9996; constexpr double UTM_FALSE_EASTING = 500000.0; constexpr double UTM_NORTH_FALSE_NORTHING = 0.0; constexpr double UTM_SOUTH_FALSE_NORTHING = 10000000.0; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Conversion::Private {}; //! @endcond // --------------------------------------------------------------------------- Conversion::Conversion(const OperationMethodNNPtr &methodIn, const std::vector &values) : SingleOperation(methodIn), d(nullptr) { setParameterValues(values); } // --------------------------------------------------------------------------- Conversion::Conversion(const Conversion &other) : CoordinateOperation(other), SingleOperation(other), d(nullptr) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Conversion::~Conversion() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ConversionNNPtr Conversion::shallowClone() const { auto conv = Conversion::nn_make_shared(*this); conv->assignSelf(conv); conv->setCRSs(this, false); return conv; } CoordinateOperationNNPtr Conversion::_shallowClone() const { return util::nn_static_pointer_cast(shallowClone()); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ConversionNNPtr Conversion::alterParametersLinearUnit(const common::UnitOfMeasure &unit, bool convertToNewUnit) const { std::vector newValues; bool changesDone = false; for (const auto &genOpParamvalue : parameterValues()) { bool updated = false; auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶mValue = opParamvalue->parameterValue(); if (paramValue->type() == ParameterValue::Type::MEASURE) { const auto &measure = paramValue->value(); if (measure.unit().type() == common::UnitOfMeasure::Type::LINEAR) { if (!measure.unit()._isEquivalentTo( unit, util::IComparable::Criterion::EQUIVALENT)) { const double newValue = convertToNewUnit ? measure.convertToUnit(unit) : measure.value(); newValues.emplace_back(OperationParameterValue::create( opParamvalue->parameter(), ParameterValue::create( common::Measure(newValue, unit)))); updated = true; } } } } if (updated) { changesDone = true; } else { newValues.emplace_back(genOpParamvalue); } } if (changesDone) { auto conv = create(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "unknown"), method(), newValues); conv->setCRSs(this, false); return conv; } else { return NN_NO_CHECK( util::nn_dynamic_pointer_cast(shared_from_this())); } } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a Conversion from a vector of GeneralParameterValue. * * @param properties See \ref general_properties. At minimum the name should be * defined. * @param methodIn the operation method. * @param values the values. * @return a new Conversion. * @throws InvalidOperation if the object cannot be constructed. */ ConversionNNPtr Conversion::create(const util::PropertyMap &properties, const OperationMethodNNPtr &methodIn, const std::vector &values) // throw InvalidOperation { if (methodIn->parameters().size() != values.size()) { throw InvalidOperation( "Inconsistent number of parameters and parameter values"); } auto conv = Conversion::nn_make_shared(methodIn, values); conv->assignSelf(conv); conv->setProperties(properties); return conv; } // --------------------------------------------------------------------------- /** \brief Instantiate a Conversion and its OperationMethod * * @param propertiesConversion See \ref general_properties of the conversion. * At minimum the name should be defined. * @param propertiesOperationMethod See \ref general_properties of the operation * method. At minimum the name should be defined. * @param parameters the operation parameters. * @param values the operation values. Constraint: * values.size() == parameters.size() * @return a new Conversion. * @throws InvalidOperation if the object cannot be constructed. */ ConversionNNPtr Conversion::create( const util::PropertyMap &propertiesConversion, const util::PropertyMap &propertiesOperationMethod, const std::vector ¶meters, const std::vector &values) // throw InvalidOperation { OperationMethodNNPtr op( OperationMethod::create(propertiesOperationMethod, parameters)); if (parameters.size() != values.size()) { throw InvalidOperation( "Inconsistent number of parameters and parameter values"); } std::vector generalParameterValues; generalParameterValues.reserve(values.size()); for (size_t i = 0; i < values.size(); i++) { generalParameterValues.push_back( OperationParameterValue::create(parameters[i], values[i])); } return create(propertiesConversion, op, generalParameterValues); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- static util::PropertyMap getUTMConversionProperty(const util::PropertyMap &properties, int zone, bool north) { if (!properties.get(common::IdentifiedObject::NAME_KEY)) { std::string conversionName("UTM zone "); conversionName += toString(zone); conversionName += (north ? 'N' : 'S'); return createMapNameEPSGCode(conversionName, (north ? 16000 : 16100) + zone); } else { return properties; } } // --------------------------------------------------------------------------- static ConversionNNPtr createConversion(const util::PropertyMap &properties, const MethodMapping *mapping, const std::vector &values) { std::vector parameters; for (int i = 0; mapping->params != nullptr && mapping->params[i] != nullptr; i++) { const auto *param = mapping->params[i]; auto paramProperties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, param->wkt2_name); if (param->epsg_code != 0) { paramProperties .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, param->epsg_code); } parameters.push_back(OperationParameter::create(paramProperties)); } auto methodProperties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, mapping->wkt2_name); if (mapping->epsg_code != 0) { methodProperties .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, mapping->epsg_code); } return Conversion::create( addDefaultNameIfNeeded(properties, mapping->wkt2_name), methodProperties, parameters, values); } //! @endcond // --------------------------------------------------------------------------- ConversionNNPtr Conversion::create(const util::PropertyMap &properties, int method_epsg_code, const std::vector &values) { const MethodMapping *mapping = getMapping(method_epsg_code); assert(mapping); return createConversion(properties, mapping, values); } // --------------------------------------------------------------------------- ConversionNNPtr Conversion::create(const util::PropertyMap &properties, const char *method_wkt2_name, const std::vector &values) { const MethodMapping *mapping = getMapping(method_wkt2_name); assert(mapping); return createConversion(properties, mapping, values); } // --------------------------------------------------------------------------- /** \brief Instantiate a * * Universal Transverse Mercator conversion. * * UTM is a family of conversions, of EPSG codes from 16001 to 16060 for the * northern hemisphere, and 17001 to 17060 for the southern hemisphere, * based on the Transverse Mercator projection method. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param zone UTM zone number between 1 and 60. * @param north true for UTM northern hemisphere, false for UTM southern * hemisphere. * @return a new Conversion. */ ConversionNNPtr Conversion::createUTM(const util::PropertyMap &properties, int zone, bool north) { if (zone < 1 || zone > 60) { throw InvalidOperation("Invalid zone number"); } return create( getUTMConversionProperty(properties, zone, north), EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, createParams(common::Angle(UTM_LATITUDE_OF_NATURAL_ORIGIN), common::Angle(zone * 6.0 - 183.0), common::Scale(UTM_SCALE_FACTOR), common::Length(UTM_FALSE_EASTING), common::Length(north ? UTM_NORTH_FALSE_NORTHING : UTM_SOUTH_FALSE_NORTHING))); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Transverse Mercator projection method. * * This method is defined as * * EPSG:9807. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createTransverseMercator( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Gauss Schreiber Transverse Mercator projection method. * * This method is also known as Gauss-Laborde Reunion. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createGaussSchreiberTransverseMercator( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_GAUSS_SCHREIBER_TRANSVERSE_MERCATOR, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Transverse Mercator South Orientated projection method. * * This method is defined as * * EPSG:9808. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createTransverseMercatorSouthOriented( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Two Point Equidistant projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFirstPoint Latitude of first point. * @param longitudeFirstPoint Longitude of first point. * @param latitudeSecondPoint Latitude of second point. * @param longitudeSeconPoint Longitude of second point. * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createTwoPointEquidistant(const util::PropertyMap &properties, const common::Angle &latitudeFirstPoint, const common::Angle &longitudeFirstPoint, const common::Angle &latitudeSecondPoint, const common::Angle &longitudeSeconPoint, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_TWO_POINT_EQUIDISTANT, createParams(latitudeFirstPoint, longitudeFirstPoint, latitudeSecondPoint, longitudeSeconPoint, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Tunisia Mapping Grid projection * method. * * This method is defined as * * EPSG:9816. * * \note There is currently no implementation of the method formulas in PROJ. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. * @deprecated. Use createTunisiaMiningGrid() instead */ ConversionNNPtr Conversion::createTunisiaMappingGrid( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_TUNISIA_MINING_GRID, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Tunisia Mining Grid projection * method. * * This method is defined as * * EPSG:9816. * * \note There is currently no implementation of the method formulas in PROJ. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. * @since 9.2 */ ConversionNNPtr Conversion::createTunisiaMiningGrid( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_TUNISIA_MINING_GRID, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Albers Conic Equal Area projection method. * * This method is defined as * * EPSG:9822. * * @note the order of arguments is conformant with the corresponding EPSG * mode and different than OGRSpatialReference::setACEA() of GDAL <= 2.3 * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFalseOrigin See \ref latitude_false_origin * @param longitudeFalseOrigin See \ref longitude_false_origin * @param latitudeFirstParallel See \ref latitude_first_std_parallel * @param latitudeSecondParallel See \ref latitude_second_std_parallel * @param eastingFalseOrigin See \ref easting_false_origin * @param northingFalseOrigin See \ref northing_false_origin * @return a new Conversion. */ ConversionNNPtr Conversion::createAlbersEqualArea(const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin) { return create(properties, EPSG_CODE_METHOD_ALBERS_EQUAL_AREA, createParams(latitudeFalseOrigin, longitudeFalseOrigin, latitudeFirstParallel, latitudeSecondParallel, eastingFalseOrigin, northingFalseOrigin)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Conic Conformal 1SP projection method. * * This method is defined as * * EPSG:9801. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createLambertConicConformal_1SP( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Conic Conformal 1SP Variant B projection method. * * This method is defined as * * EPSG:1102. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeNatOrigin See \ref center_latitude * @param scale See \ref scale * @param latitudeFalseOrigin See \ref latitude_false_origin * @param longitudeFalseOrigin See \ref longitude_false_origin * @param eastingFalseOrigin See \ref easting_false_origin * @param northingFalseOrigin See \ref northing_false_origin * @return a new Conversion. * @since 9.2.1 */ ConversionNNPtr Conversion::createLambertConicConformal_1SP_VariantB( const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Scale &scale, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin) { return create(properties, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP_VARIANT_B, createParams(latitudeNatOrigin, scale, latitudeFalseOrigin, longitudeFalseOrigin, eastingFalseOrigin, northingFalseOrigin)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Conic Conformal 2SP projection method. * * This method is defined as * * EPSG:9802. * * @note the order of arguments is conformant with the corresponding EPSG * mode and different than OGRSpatialReference::setLCC() of GDAL <= 2.3 * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFalseOrigin See \ref latitude_false_origin * @param longitudeFalseOrigin See \ref longitude_false_origin * @param latitudeFirstParallel See \ref latitude_first_std_parallel * @param latitudeSecondParallel See \ref latitude_second_std_parallel * @param eastingFalseOrigin See \ref easting_false_origin * @param northingFalseOrigin See \ref northing_false_origin * @return a new Conversion. */ ConversionNNPtr Conversion::createLambertConicConformal_2SP( const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin) { return create(properties, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP, createParams(latitudeFalseOrigin, longitudeFalseOrigin, latitudeFirstParallel, latitudeSecondParallel, eastingFalseOrigin, northingFalseOrigin)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Conic Conformal (2SP Michigan) projection method. * * This method is defined as * * EPSG:1051. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFalseOrigin See \ref latitude_false_origin * @param longitudeFalseOrigin See \ref longitude_false_origin * @param latitudeFirstParallel See \ref latitude_first_std_parallel * @param latitudeSecondParallel See \ref latitude_second_std_parallel * @param eastingFalseOrigin See \ref easting_false_origin * @param northingFalseOrigin See \ref northing_false_origin * @param ellipsoidScalingFactor Ellipsoid scaling factor. * @return a new Conversion. */ ConversionNNPtr Conversion::createLambertConicConformal_2SP_Michigan( const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin, const common::Scale &ellipsoidScalingFactor) { return create(properties, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN, createParams(latitudeFalseOrigin, longitudeFalseOrigin, latitudeFirstParallel, latitudeSecondParallel, eastingFalseOrigin, northingFalseOrigin, ellipsoidScalingFactor)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Conic Conformal (2SP Belgium) projection method. * * This method is defined as * * EPSG:9803. * * \warning The formulas used currently in PROJ are, incorrectly, the ones of * the regular LCC_2SP method. * * @note the order of arguments is conformant with the corresponding EPSG * mode and different than OGRSpatialReference::setLCCB() of GDAL <= 2.3 * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFalseOrigin See \ref latitude_false_origin * @param longitudeFalseOrigin See \ref longitude_false_origin * @param latitudeFirstParallel See \ref latitude_first_std_parallel * @param latitudeSecondParallel See \ref latitude_second_std_parallel * @param eastingFalseOrigin See \ref easting_false_origin * @param northingFalseOrigin See \ref northing_false_origin * @return a new Conversion. */ ConversionNNPtr Conversion::createLambertConicConformal_2SP_Belgium( const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin) { return create(properties, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM, createParams(latitudeFalseOrigin, longitudeFalseOrigin, latitudeFirstParallel, latitudeSecondParallel, eastingFalseOrigin, northingFalseOrigin)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Azimuthal Equidistant projection method. * * This method is defined as * * EPSG:1125. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeNatOrigin See \ref center_latitude * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createAzimuthalEquidistant( const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_AZIMUTHAL_EQUIDISTANT, createParams(latitudeNatOrigin, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Guam Projection method. * * This method is defined as * * EPSG:9831. * * @param properties See \ref general_properties of the conversion. If the name *is * not provided, it is automatically set. * @param latitudeNatOrigin See \ref center_latitude * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createGuamProjection( const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_GUAM_PROJECTION, createParams(latitudeNatOrigin, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Bonne projection method. * * This method is defined as * * EPSG:9827. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeNatOrigin See \ref center_latitude . PROJ calls its the * standard parallel 1. * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createBonne(const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_BONNE, createParams(latitudeNatOrigin, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Cylindrical Equal Area (Spherical) projection method. * * This method is defined as * * EPSG:9834. * * \warning The PROJ cea computation code would select the ellipsoidal form if * a non-spherical ellipsoid is used for the base GeographicCRS. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFirstParallel See \ref latitude_first_std_parallel. * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createLambertCylindricalEqualAreaSpherical( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL, createParams(latitudeFirstParallel, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Cylindrical Equal Area (ellipsoidal form) projection method. * * This method is defined as * * EPSG:9835. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFirstParallel See \ref latitude_first_std_parallel. * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createLambertCylindricalEqualArea( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA, createParams(latitudeFirstParallel, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Cassini-Soldner projection method. * * This method is defined as * * EPSG:9806. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createCassiniSoldner( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_CASSINI_SOLDNER, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Equidistant Conic projection method. * * This method is defined as * * EPSG:1119. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFalseOrigin See \ref latitude_false_origin * @param longitudeFalseOrigin See \ref longitude_false_origin * @param latitudeFirstParallel See \ref latitude_first_std_parallel * @param latitudeSecondParallel See \ref latitude_second_std_parallel * @param eastingFalseOrigin See \ref easting_false_origin * @param northingFalseOrigin See \ref northing_false_origin * @return a new Conversion. */ ConversionNNPtr Conversion::createEquidistantConic(const util::PropertyMap &properties, const common::Angle &latitudeFalseOrigin, const common::Angle &longitudeFalseOrigin, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &eastingFalseOrigin, const common::Length &northingFalseOrigin) { return create(properties, EPSG_CODE_METHOD_EQUIDISTANT_CONIC, createParams(latitudeFalseOrigin, longitudeFalseOrigin, latitudeFirstParallel, latitudeSecondParallel, eastingFalseOrigin, northingFalseOrigin)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Eckert I projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEckertI(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_ECKERT_I, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Eckert II projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEckertII( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_ECKERT_II, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Eckert III projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEckertIII( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_ECKERT_III, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Eckert IV projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEckertIV( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_ECKERT_IV, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Eckert V projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEckertV(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_ECKERT_V, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Eckert VI projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEckertVI( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_ECKERT_VI, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Equidistant Cylindrical projection method. * * This is also known as the Equirectangular method, and in the particular case * where the latitude of first parallel is 0. * * This method is defined as * * EPSG:1028. * * @note This is the equivalent OGRSpatialReference::SetEquirectangular2( * 0.0, latitudeFirstParallel, falseEasting, falseNorthing ) of GDAL <= 2.3, * where the lat_0 / center_latitude parameter is forced to 0. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFirstParallel See \ref latitude_first_std_parallel. * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEquidistantCylindrical( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL, createParams(latitudeFirstParallel, 0.0, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Equidistant Cylindrical (Spherical) projection method. * * This is also known as the Equirectangular method, and in the particular case * where the latitude of first parallel is 0. * * This method is defined as * * EPSG:1029. * * @note This is the equivalent OGRSpatialReference::SetEquirectangular2( * 0.0, latitudeFirstParallel, falseEasting, falseNorthing ) of GDAL <= 2.3, * where the lat_0 / center_latitude parameter is forced to 0. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFirstParallel See \ref latitude_first_std_parallel. * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEquidistantCylindricalSpherical( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL, createParams(latitudeFirstParallel, 0.0, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Gall (Stereographic) projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createGall(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_GALL_STEREOGRAPHIC, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Goode Homolosine projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createGoodeHomolosine( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_GOODE_HOMOLOSINE, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Interrupted Goode Homolosine projection method. * * There is no equivalent in EPSG. * * @note OGRSpatialReference::SetIGH() of GDAL <= 2.3 assumes the 3 * projection * parameters to be zero and this is the nominal case. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createInterruptedGoodeHomolosine( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Geostationary Satellite View projection method, * with the sweep angle axis of the viewing instrument being x * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param height Height of the view point above the Earth. * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createGeostationarySatelliteSweepX( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &height, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X, createParams(centerLong, height, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Geostationary Satellite View projection method, * with the sweep angle axis of the viewing instrument being y. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param height Height of the view point above the Earth. * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createGeostationarySatelliteSweepY( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &height, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_Y, createParams(centerLong, height, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Gnomonic projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createGnomonic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, PROJ_WKT2_NAME_METHOD_GNOMONIC, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Hotine Oblique Mercator (Variant A) projection method. * * This is the variant with the no_uoff parameter, which corresponds to * GDAL >=2.3 Hotine_Oblique_Mercator projection. * In this variant, the false grid coordinates are * defined at the intersection of the initial line and the aposphere (the * equator on one of the intermediate surfaces inherent in the method), that is * at the natural origin of the coordinate system). * * This method is defined as * * EPSG:9812. * * \note In the case where azimuthInitialLine = angleFromRectifiedToSkrewGrid = * 90deg, this maps to the * * Swiss Oblique Mercator formulas. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeProjectionCentre See \ref latitude_projection_centre * @param longitudeProjectionCentre See \ref longitude_projection_centre * @param azimuthInitialLine See \ref azimuth_initial_line * @param angleFromRectifiedToSkrewGrid See * \ref angle_from_recitfied_to_skrew_grid * @param scale See \ref scale_factor_initial_line * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createHotineObliqueMercatorVariantA( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeProjectionCentre, const common::Angle &azimuthInitialLine, const common::Angle &angleFromRectifiedToSkrewGrid, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A, createParams(latitudeProjectionCentre, longitudeProjectionCentre, azimuthInitialLine, angleFromRectifiedToSkrewGrid, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Hotine Oblique Mercator (Variant B) projection method. * * This is the variant without the no_uoff parameter, which corresponds to * GDAL >=2.3 Hotine_Oblique_Mercator_Azimuth_Center projection. * In this variant, the false grid coordinates are defined at the projection *centre. * * This method is defined as * * EPSG:9815. * * \note In the case where azimuthInitialLine = angleFromRectifiedToSkrewGrid = * 90deg, this maps to the * * Swiss Oblique Mercator formulas. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeProjectionCentre See \ref latitude_projection_centre * @param longitudeProjectionCentre See \ref longitude_projection_centre * @param azimuthInitialLine See \ref azimuth_initial_line * @param angleFromRectifiedToSkrewGrid See * \ref angle_from_recitfied_to_skrew_grid * @param scale See \ref scale_factor_initial_line * @param eastingProjectionCentre See \ref easting_projection_centre * @param northingProjectionCentre See \ref northing_projection_centre * @return a new Conversion. */ ConversionNNPtr Conversion::createHotineObliqueMercatorVariantB( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeProjectionCentre, const common::Angle &azimuthInitialLine, const common::Angle &angleFromRectifiedToSkrewGrid, const common::Scale &scale, const common::Length &eastingProjectionCentre, const common::Length &northingProjectionCentre) { return create( properties, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B, createParams(latitudeProjectionCentre, longitudeProjectionCentre, azimuthInitialLine, angleFromRectifiedToSkrewGrid, scale, eastingProjectionCentre, northingProjectionCentre)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Hotine Oblique Mercator Two Point Natural Origin projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeProjectionCentre See \ref latitude_projection_centre * @param latitudePoint1 Latitude of point 1. * @param longitudePoint1 Latitude of point 1. * @param latitudePoint2 Latitude of point 2. * @param longitudePoint2 Longitude of point 2. * @param scale See \ref scale_factor_initial_line * @param eastingProjectionCentre See \ref easting_projection_centre * @param northingProjectionCentre See \ref northing_projection_centre * @return a new Conversion. */ ConversionNNPtr Conversion::createHotineObliqueMercatorTwoPointNaturalOrigin( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &latitudePoint1, const common::Angle &longitudePoint1, const common::Angle &latitudePoint2, const common::Angle &longitudePoint2, const common::Scale &scale, const common::Length &eastingProjectionCentre, const common::Length &northingProjectionCentre) { return create( properties, PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN, { ParameterValue::create(latitudeProjectionCentre), ParameterValue::create(latitudePoint1), ParameterValue::create(longitudePoint1), ParameterValue::create(latitudePoint2), ParameterValue::create(longitudePoint2), ParameterValue::create(scale), ParameterValue::create(eastingProjectionCentre), ParameterValue::create(northingProjectionCentre), }); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Laborde Oblique Mercator projection method. * * This method is defined as * * EPSG:9813. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeProjectionCentre See \ref latitude_projection_centre * @param longitudeProjectionCentre See \ref longitude_projection_centre * @param azimuthInitialLine See \ref azimuth_initial_line * @param scale See \ref scale_factor_initial_line * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createLabordeObliqueMercator( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeProjectionCentre, const common::Angle &azimuthInitialLine, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_LABORDE_OBLIQUE_MERCATOR, createParams(latitudeProjectionCentre, longitudeProjectionCentre, azimuthInitialLine, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * International Map of the World Polyconic projection method. * * There is no equivalent in EPSG. * * @note the order of arguments is conformant with the corresponding EPSG * mode and different than OGRSpatialReference::SetIWMPolyconic() of GDAL <= *2.3 * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param latitudeFirstParallel See \ref latitude_first_std_parallel * @param latitudeSecondParallel See \ref latitude_second_std_parallel * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createInternationalMapWorldPolyconic( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Angle &latitudeFirstParallel, const common::Angle &latitudeSecondParallel, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_INTERNATIONAL_MAP_WORLD_POLYCONIC, createParams(centerLong, latitudeFirstParallel, latitudeSecondParallel, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Krovak (north oriented) projection method. * * This method is defined as * * EPSG:1041. * * The coordinates are returned in the "GIS friendly" order: easting, northing. * This method is similar to createKrovak(), except that the later returns * projected values as southing, westing, where * southing(Krovak) = -northing(Krovak_North) and * westing(Krovak) = -easting(Krovak_North). * * @note The current PROJ implementation of Krovak hard-codes * colatitudeConeAxis = 30deg17'17.30311" * and latitudePseudoStandardParallel = 78deg30'N, which are the values used for * the ProjectedCRS S-JTSK (Ferro) / Krovak East North (EPSG:5221). * It also hard-codes the parameters of the Bessel ellipsoid typically used for * Krovak. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeProjectionCentre See \ref latitude_projection_centre * @param longitudeOfOrigin See \ref longitude_of_origin * @param colatitudeConeAxis See \ref colatitude_cone_axis * @param latitudePseudoStandardParallel See \ref *latitude_pseudo_standard_parallel * @param scaleFactorPseudoStandardParallel See \ref *scale_factor_pseudo_standard_parallel * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createKrovakNorthOriented( const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeOfOrigin, const common::Angle &colatitudeConeAxis, const common::Angle &latitudePseudoStandardParallel, const common::Scale &scaleFactorPseudoStandardParallel, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_KROVAK_NORTH_ORIENTED, createParams(latitudeProjectionCentre, longitudeOfOrigin, colatitudeConeAxis, latitudePseudoStandardParallel, scaleFactorPseudoStandardParallel, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Krovak projection method. * * This method is defined as * * EPSG:9819. * * The coordinates are returned in the historical order: southing, westing * This method is similar to createKrovakNorthOriented(), except that the later *returns * projected values as easting, northing, where * easting(Krovak_North) = -westing(Krovak) and * northing(Krovak_North) = -southing(Krovak). * * @note The current PROJ implementation of Krovak hard-codes * colatitudeConeAxis = 30deg17'17.30311" * and latitudePseudoStandardParallel = 78deg30'N, which are the values used for * the ProjectedCRS S-JTSK (Ferro) / Krovak East North (EPSG:5221). * It also hard-codes the parameters of the Bessel ellipsoid typically used for * Krovak. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeProjectionCentre See \ref latitude_projection_centre * @param longitudeOfOrigin See \ref longitude_of_origin * @param colatitudeConeAxis See \ref colatitude_cone_axis * @param latitudePseudoStandardParallel See \ref *latitude_pseudo_standard_parallel * @param scaleFactorPseudoStandardParallel See \ref *scale_factor_pseudo_standard_parallel * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createKrovak(const util::PropertyMap &properties, const common::Angle &latitudeProjectionCentre, const common::Angle &longitudeOfOrigin, const common::Angle &colatitudeConeAxis, const common::Angle &latitudePseudoStandardParallel, const common::Scale &scaleFactorPseudoStandardParallel, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_KROVAK, createParams(latitudeProjectionCentre, longitudeOfOrigin, colatitudeConeAxis, latitudePseudoStandardParallel, scaleFactorPseudoStandardParallel, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Lambert Azimuthal Equal Area projection method. * * This method is defined as * * EPSG:9820. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeNatOrigin See \ref center_latitude * @param longitudeNatOrigin See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createLambertAzimuthalEqualArea( const util::PropertyMap &properties, const common::Angle &latitudeNatOrigin, const common::Angle &longitudeNatOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA, createParams(latitudeNatOrigin, longitudeNatOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Miller Cylindrical projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createMillerCylindrical( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_MILLER_CYLINDRICAL, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Mercator (variant A) projection method. * * This is the A variant, also known as Mercator (1SP), defined with the scale * factor. Note that latitude of natural origin (centerLat) is a parameter, * but unused in the transformation formulas. * * This method is defined as * * EPSG:9804. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude . Should be 0. * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createMercatorVariantA( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_MERCATOR_VARIANT_A, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Mercator (variant B) projection method. * * This is the B variant, also known as Mercator (2SP), defined with the * latitude of the first standard parallel (the second standard parallel is * implicitly the opposite value). The latitude of natural origin is fixed to * zero. * * This method is defined as * * EPSG:9805. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeFirstParallel See \ref latitude_first_std_parallel * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createMercatorVariantB( const util::PropertyMap &properties, const common::Angle &latitudeFirstParallel, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_MERCATOR_VARIANT_B, createParams(latitudeFirstParallel, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Popular Visualisation Pseudo Mercator projection method. * * Also known as WebMercator. Mostly/only used for Projected CRS EPSG:3857 * (WGS 84 / Pseudo-Mercator) * * This method is defined as * * EPSG:1024. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude . Usually 0 * @param centerLong See \ref center_longitude . Usually 0 * @param falseEasting See \ref false_easting . Usually 0 * @param falseNorthing See \ref false_northing . Usually 0 * @return a new Conversion. */ ConversionNNPtr Conversion::createPopularVisualisationPseudoMercator( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- // clang-format off /** \brief Instantiate a conversion based on the * * Mercator projection method, using its spherical formulation * * When used with an ellipsoid, the radius used is the radius of the conformal * sphere at centerLat. * * This method is defined as * * EPSG:1026. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude . Usually 0 * @param centerLong See \ref center_longitude . Usually 0 * @param falseEasting See \ref false_easting . Usually 0 * @param falseNorthing See \ref false_northing . Usually 0 * @return a new Conversion. * @since 9.3 */ ConversionNNPtr Conversion::createMercatorSpherical( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_MERCATOR_SPHERICAL, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // clang-format on // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Mollweide projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createMollweide( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_MOLLWEIDE, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * New Zealand Map Grid projection method. * * This method is defined as * * EPSG:9811. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createNewZealandMappingGrid( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_NZMG, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Oblique Stereographic (alternative) projection method. * * This method is defined as * * EPSG:9809. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createObliqueStereographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_OBLIQUE_STEREOGRAPHIC, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Orthographic projection method. * * This method is defined as * * EPSG:9840. * * \note Before PROJ 7.2, only the spherical formulation was implemented. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createOrthographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_ORTHOGRAPHIC, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Orthographic projection method. * * This method is defined as * * EPSG:1130. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param azimuthInitialLine See \ref azimuth_initial_line * @param scale See \ref scale_factor_initial_line * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createLocalOrthographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Angle &azimuthInitialLine, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_LOCAL_ORTHOGRAPHIC, createParams(centerLat, centerLong, azimuthInitialLine, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * American Polyconic projection method. * * This method is defined as * * EPSG:9818. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createAmericanPolyconic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, EPSG_CODE_METHOD_AMERICAN_POLYCONIC, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Polar Stereographic (Variant A) projection method. * * This method is defined as * * EPSG:9810. * * This is the variant of polar stereographic defined with a scale factor. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude . Should be 90 deg ou -90 deg. * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createPolarStereographicVariantA( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Polar Stereographic (Variant B) projection method. * * This method is defined as * * EPSG:9829. * * This is the variant of polar stereographic defined with a latitude of * standard parallel. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeStandardParallel See \ref latitude_std_parallel * @param longitudeOfOrigin See \ref longitude_of_origin * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createPolarStereographicVariantB( const util::PropertyMap &properties, const common::Angle &latitudeStandardParallel, const common::Angle &longitudeOfOrigin, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B, createParams(latitudeStandardParallel, longitudeOfOrigin, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Robinson projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createRobinson( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_ROBINSON, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Sinusoidal projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createSinusoidal( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_SINUSOIDAL, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Stereographic projection method. * * There is no equivalent in EPSG. This method implements the original "Oblique * Stereographic" method described in "Snyder's Map Projections - A Working *manual", * which is different from the "Oblique Stereographic (alternative)" method * implemented in createObliqueStereographic(). * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param scale See \ref scale * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createStereographic( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Scale &scale, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_STEREOGRAPHIC, createParams(centerLat, centerLong, scale, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Van der Grinten projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createVanDerGrinten( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_VAN_DER_GRINTEN, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Wagner I projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createWagnerI(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_WAGNER_I, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Wagner II projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createWagnerII( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_WAGNER_II, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Wagner III projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param latitudeTrueScale Latitude of true scale. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createWagnerIII( const util::PropertyMap &properties, const common::Angle &latitudeTrueScale, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_WAGNER_III, createParams(latitudeTrueScale, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Wagner IV projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createWagnerIV( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_WAGNER_IV, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Wagner V projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createWagnerV(const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_WAGNER_V, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Wagner VI projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createWagnerVI( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_WAGNER_VI, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Wagner VII projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createWagnerVII( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, PROJ_WKT2_NAME_METHOD_WAGNER_VII, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Quadrilateralized Spherical Cube projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLat See \ref center_latitude * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createQuadrilateralizedSphericalCube( const util::PropertyMap &properties, const common::Angle ¢erLat, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create( properties, PROJ_WKT2_NAME_METHOD_QUADRILATERALIZED_SPHERICAL_CUBE, createParams(centerLat, centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Spherical Cross-Track Height projection method. * * There is no equivalent in EPSG. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param pegPointLat Peg point latitude. * @param pegPointLong Peg point longitude. * @param pegPointHeading Peg point heading. * @param pegPointHeight Peg point height. * @return a new Conversion. */ ConversionNNPtr Conversion::createSphericalCrossTrackHeight( const util::PropertyMap &properties, const common::Angle &pegPointLat, const common::Angle &pegPointLong, const common::Angle &pegPointHeading, const common::Length &pegPointHeight) { return create(properties, PROJ_WKT2_NAME_METHOD_SPHERICAL_CROSS_TRACK_HEIGHT, createParams(pegPointLat, pegPointLong, pegPointHeading, pegPointHeight)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Equal Earth projection method. * * This method is defined as * * EPSG:1078. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param centerLong See \ref center_longitude * @param falseEasting See \ref false_easting * @param falseNorthing See \ref false_northing * @return a new Conversion. */ ConversionNNPtr Conversion::createEqualEarth( const util::PropertyMap &properties, const common::Angle ¢erLong, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_EQUAL_EARTH, createParams(centerLong, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the * * Vertical Perspective projection method. * * This method is defined as * * EPSG:9838. * * The PROJ implementation of the EPSG Vertical Perspective has the current * limitations with respect to the method described in EPSG: *
    *
  • it is a 2D-only method, ignoring the ellipsoidal height of the point to * project.
  • *
  • it has only a spherical development.
  • *
  • the height of the topocentric origin is ignored, and thus assumed to be * 0.
  • *
* * For completeness, PROJ adds the falseEasting and falseNorthing parameter, * which are not described in EPSG. They should usually be set to 0. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param topoOriginLat Latitude of topocentric origin * @param topoOriginLong Longitude of topocentric origin * @param topoOriginHeight Ellipsoidal height of topocentric origin. Ignored by * PROJ (that is assumed to be 0) * @param viewPointHeight Viewpoint height with respect to the * topocentric/mapping plane. In the case where topoOriginHeight = 0, this is * the height above the ellipsoid surface at topoOriginLat, topoOriginLong. * @param falseEasting See \ref false_easting . (not in EPSG) * @param falseNorthing See \ref false_northing . (not in EPSG) * @return a new Conversion. * * @since 6.3 */ ConversionNNPtr Conversion::createVerticalPerspective( const util::PropertyMap &properties, const common::Angle &topoOriginLat, const common::Angle &topoOriginLong, const common::Length &topoOriginHeight, const common::Length &viewPointHeight, const common::Length &falseEasting, const common::Length &falseNorthing) { return create(properties, EPSG_CODE_METHOD_VERTICAL_PERSPECTIVE, createParams(topoOriginLat, topoOriginLong, topoOriginHeight, viewPointHeight, falseEasting, falseNorthing)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Pole Rotation method, using * the conventions of the GRIB 1 and GRIB 2 data formats. * * Those are mentioned in the Note 2 of * https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_temp3-1.shtml * * Several conventions for the pole rotation method exists. * The parameters provided in this method are remapped to the PROJ ob_tran * operation with: *
 * +proj=ob_tran +o_proj=longlat +o_lon_p=-rotationAngle
 *                               +o_lat_p=-southPoleLatInUnrotatedCRS
 *                               +lon_0=southPoleLongInUnrotatedCRS
 * 
* * Another implementation of that convention is also in the netcdf-java library: * https://github.com/Unidata/netcdf-java/blob/3ce72c0cd167609ed8c69152bb4a004d1daa9273/cdm/core/src/main/java/ucar/unidata/geoloc/projection/RotatedLatLon.java * * The PROJ implementation of this method assumes a spherical ellipsoid. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param southPoleLatInUnrotatedCRS Latitude of the point from the unrotated * CRS, expressed in the unrotated CRS, that will become the south pole of the * rotated CRS. * @param southPoleLongInUnrotatedCRS Longitude of the point from the unrotated * CRS, expressed in the unrotated CRS, that will become the south pole of the * rotated CRS. * @param axisRotation The angle of rotation about the new polar * axis (measured clockwise when looking from the southern to the northern pole) * of the coordinate system, assuming the new axis to have been obtained by * first rotating the sphere through southPoleLongInUnrotatedCRS degrees about * the geographic polar axis and then rotating through * (90 + southPoleLatInUnrotatedCRS) degrees so that the southern pole moved * along the (previously rotated) Greenwich meridian. * @return a new Conversion. * * @since 7.0 */ ConversionNNPtr Conversion::createPoleRotationGRIBConvention( const util::PropertyMap &properties, const common::Angle &southPoleLatInUnrotatedCRS, const common::Angle &southPoleLongInUnrotatedCRS, const common::Angle &axisRotation) { return create(properties, PROJ_WKT2_NAME_METHOD_POLE_ROTATION_GRIB_CONVENTION, createParams(southPoleLatInUnrotatedCRS, southPoleLongInUnrotatedCRS, axisRotation)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Pole Rotation method, using * the conventions of the netCDF CF convention for the netCDF format. * * Those are mentioned in the Note 2 of * https://cfconventions.org/Data/cf-conventions/cf-conventions-1.8/cf-conventions.html#_rotated_pole * * Several conventions for the pole rotation method exists. * The parameters provided in this method are remapped to the PROJ ob_tran * operation with: *
 * +proj=ob_tran +o_proj=longlat +o_lon_p=northPoleGridLongitude
 *                               +o_lat_p=gridNorthPoleLatitude
 *                               +lon_0=180+gridNorthPoleLongitude
 * 
* * Another implementation of that convention is also in the netcdf-java library: * https://github.com/Unidata/netcdf-java/blob/3ce72c0cd167609ed8c69152bb4a004d1daa9273/cdm/core/src/main/java/ucar/unidata/geoloc/projection/RotatedPole.java * * The PROJ implementation of this method assumes a spherical ellipsoid. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param gridNorthPoleLatitude True latitude of the north pole of the rotated * grid * @param gridNorthPoleLongitude True longitude of the north pole of the rotated * grid. * @param northPoleGridLongitude Longitude of the true north pole in the rotated * grid. * @return a new Conversion. * * @since 8.2 */ ConversionNNPtr Conversion::createPoleRotationNetCDFCFConvention( const util::PropertyMap &properties, const common::Angle &gridNorthPoleLatitude, const common::Angle &gridNorthPoleLongitude, const common::Angle &northPoleGridLongitude) { return create(properties, PROJ_WKT2_NAME_METHOD_POLE_ROTATION_NETCDF_CF_CONVENTION, createParams(gridNorthPoleLatitude, gridNorthPoleLongitude, northPoleGridLongitude)); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Change of Vertical Unit * method. * * This method is defined as * * EPSG:1069 [DEPRECATED]. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param factor Conversion factor * @return a new Conversion. */ ConversionNNPtr Conversion::createChangeVerticalUnit(const util::PropertyMap &properties, const common::Scale &factor) { return create( properties, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT), VectorOfParameters{ createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR), }, VectorOfValues{ factor, }); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Change of Vertical Unit * method (without explicit conversion factor) * * This method is defined as * * EPSG:1104. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @return a new Conversion. */ ConversionNNPtr Conversion::createChangeVerticalUnit(const util::PropertyMap &properties) { return create(properties, createMethodMapNameEPSGCode( EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR), VectorOfParameters{}, VectorOfValues{}); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Height Depth Reversal * method. * * This method is defined as * * EPSG:1068. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @return a new Conversion. * @since 6.3 */ ConversionNNPtr Conversion::createHeightDepthReversal(const util::PropertyMap &properties) { return create( properties, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL), {}, {}); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Axis order reversal method * * This swaps the longitude, latitude axis. * * This method is defined as * * EPSG:9843 for 2D or * * EPSG:9844 for Geographic3D horizontal. * * @param is3D Whether this should apply on 3D geographicCRS * @return a new Conversion. */ ConversionNNPtr Conversion::createAxisOrderReversal(bool is3D) { if (is3D) { return create(createMapNameEPSGCode(AXIS_ORDER_CHANGE_3D_NAME, 15499), createMethodMapNameEPSGCode( EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_3D), {}, {}); } return create( createMapNameEPSGCode(AXIS_ORDER_CHANGE_2D_NAME, 15498), createMethodMapNameEPSGCode(EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_2D), {}, {}); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion based on the Geographic/Geocentric method. * * This method is defined as * * EPSG:9602. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @return a new Conversion. */ ConversionNNPtr Conversion::createGeographicGeocentric(const util::PropertyMap &properties) { return create( properties, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_GEOGRAPHIC_GEOCENTRIC), {}, {}); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ConversionNNPtr Conversion::createGeographicGeocentric(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, buildOpName("Conversion", sourceCRS, targetCRS)); auto conv = createGeographicGeocentric(properties); conv->setCRSs(sourceCRS, targetCRS, nullptr); return conv; } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion between a GeographicCRS and a spherical * planetocentric GeodeticCRS * * This method performs conversion between geodetic latitude and geocentric * latitude * * @return a new Conversion. */ ConversionNNPtr Conversion::createGeographicGeocentricLatitude(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, buildOpName("Conversion", sourceCRS, targetCRS)); auto conv = create( properties, PROJ_WKT2_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC_LATITUDE, {}); conv->setCRSs(sourceCRS, targetCRS, nullptr); return conv; } // --------------------------------------------------------------------------- InverseConversion::InverseConversion(const ConversionNNPtr &forward) : Conversion( OperationMethod::create(createPropertiesForInverse(forward->method()), forward->method()->parameters()), forward->parameterValues()), InverseCoordinateOperation(forward, true) { setPropertiesFromForward(); } // --------------------------------------------------------------------------- InverseConversion::~InverseConversion() = default; // --------------------------------------------------------------------------- ConversionNNPtr InverseConversion::inverseAsConversion() const { return NN_NO_CHECK( util::nn_dynamic_pointer_cast(forwardOperation_)); } // --------------------------------------------------------------------------- CoordinateOperationNNPtr InverseConversion::create(const ConversionNNPtr &forward) { auto conv = util::nn_make_shared(forward); conv->assignSelf(conv); return conv; } // --------------------------------------------------------------------------- CoordinateOperationNNPtr InverseConversion::_shallowClone() const { auto op = InverseConversion::nn_make_shared( inverseAsConversion()->shallowClone()); op->assignSelf(op); op->setCRSs(this, false); return util::nn_static_pointer_cast(op); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool isAxisOrderReversal2D(int methodEPSGCode) { return methodEPSGCode == EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_2D; } static bool isAxisOrderReversal3D(int methodEPSGCode) { return methodEPSGCode == EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_3D; } bool isAxisOrderReversal(int methodEPSGCode) { return isAxisOrderReversal2D(methodEPSGCode) || isAxisOrderReversal3D(methodEPSGCode); } //! @endcond // --------------------------------------------------------------------------- CoordinateOperationNNPtr Conversion::inverse() const { const int methodEPSGCode = method()->getEPSGCode(); if (methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT) { const double convFactor = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR); if (convFactor == 0) { throw InvalidOperation("Invalid conversion factor"); } // coverity[divide_by_zero] const double invConvFactor = 1.0 / convFactor; auto conv = createChangeVerticalUnit( createPropertiesForInverse(this, false, false), common::Scale(invConvFactor)); conv->setCRSs(this, true); return conv; } if (methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR) { auto conv = createChangeVerticalUnit( createPropertiesForInverse(this, false, false)); conv->setCRSs(this, true); return conv; } const bool l_isAxisOrderReversal2D = isAxisOrderReversal2D(methodEPSGCode); const bool l_isAxisOrderReversal3D = isAxisOrderReversal3D(methodEPSGCode); if (l_isAxisOrderReversal2D || l_isAxisOrderReversal3D) { auto conv = createAxisOrderReversal(l_isAxisOrderReversal3D); conv->setCRSs(this, true); return conv; } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC_GEOCENTRIC) { auto conv = createGeographicGeocentric( createPropertiesForInverse(this, false, false)); conv->setCRSs(this, true); return conv; } if (methodEPSGCode == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) { auto conv = createHeightDepthReversal( createPropertiesForInverse(this, false, false)); conv->setCRSs(this, true); return conv; } if (method()->nameStr() == PROJ_WKT2_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC_LATITUDE) { auto conv = create(createPropertiesForInverse(this, false, false), PROJ_WKT2_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC_LATITUDE, {}); conv->setCRSs(this, true); return conv; } return InverseConversion::create(NN_NO_CHECK( util::nn_dynamic_pointer_cast(shared_from_this()))); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static double msfn(double phi, double e2) { const double sinphi = std::sin(phi); const double cosphi = std::cos(phi); return pj_msfn(sinphi, cosphi, e2); } // --------------------------------------------------------------------------- static double tsfn(double phi, double ec) { const double sinphi = std::sin(phi); return pj_tsfn(phi, sinphi, ec); } // --------------------------------------------------------------------------- // Function whose zeroes are the sin of the standard parallels of LCC_2SP static double lcc_1sp_to_2sp_f(double sinphi, double K, double ec, double n) { const double x = sinphi; const double ecx = ec * x; return (1 - x * x) / (1 - ecx * ecx) - K * K * std::pow((1.0 - x) / (1.0 + x) * std::pow((1.0 + ecx) / (1.0 - ecx), ec), n); } // --------------------------------------------------------------------------- // Find the sin of the standard parallels of LCC_2SP static double find_zero_lcc_1sp_to_2sp_f(double sinphi0, bool bNorth, double K, double ec) { double a, b; double f_a; if (bNorth) { // Look for zero above phi0 a = sinphi0; b = 1.0; // sin(North pole) f_a = 1.0; // some positive value, but we only care about the sign } else { // Look for zero below phi0 a = -1.0; // sin(South pole) b = sinphi0; f_a = -1.0; // minus infinity in fact, but we only care about the sign } // We use dichotomy search. lcc_1sp_to_2sp_f() is positive at sinphi_init, // has a zero in ]-1,sinphi0[ and ]sinphi0,1[ ranges for (int N = 0; N < 100; N++) { double c = (a + b) / 2; double f_c = lcc_1sp_to_2sp_f(c, K, ec, sinphi0); if (f_c == 0.0 || (b - a) < 1e-18) { return c; } if ((f_c > 0 && f_a > 0) || (f_c < 0 && f_a < 0)) { a = c; f_a = f_c; } else { b = c; } } return (a + b) / 2; } static inline double DegToRad(double x) { return x / 180.0 * M_PI; } static inline double RadToDeg(double x) { return x / M_PI * 180.0; } //! @endcond // --------------------------------------------------------------------------- /** * \brief Return an equivalent projection. * * Currently implemented: *
    *
  • EPSG_CODE_METHOD_MERCATOR_VARIANT_A (1SP) to * EPSG_CODE_METHOD_MERCATOR_VARIANT_B (2SP)
  • *
  • EPSG_CODE_METHOD_MERCATOR_VARIANT_B (2SP) to * EPSG_CODE_METHOD_MERCATOR_VARIANT_A (1SP)
  • *
  • EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP to * EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP
  • *
  • EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP to * EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP
  • *
* * @param targetEPSGCode EPSG code of the target method. * @return new conversion, or nullptr */ ConversionPtr Conversion::convertToOtherMethod(int targetEPSGCode) const { const int current_epsg_code = method()->getEPSGCode(); if (current_epsg_code == targetEPSGCode) { return util::nn_dynamic_pointer_cast(shared_from_this()); } auto geogCRS = dynamic_cast(sourceCRS().get()); if (!geogCRS) { return nullptr; } const double e2 = geogCRS->ellipsoid()->squaredEccentricity(); if (e2 < 0) { return nullptr; } if (current_epsg_code == EPSG_CODE_METHOD_MERCATOR_VARIANT_A && targetEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_B && parameterValueNumericAsSI( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN) == 0.0) { const double k0 = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN); if (!(k0 > 0 && k0 <= 1.0 + 1e-10)) return nullptr; // coverity[divide_by_zero] const double dfStdP1Lat = (k0 >= 1.0) ? 0.0 : std::acos(std::sqrt((1.0 - e2) / ((1.0 / (k0 * k0)) - e2))); auto latitudeFirstParallel = common::Angle( common::Angle(dfStdP1Lat, common::UnitOfMeasure::RADIAN) .convertToUnit(common::UnitOfMeasure::DEGREE), common::UnitOfMeasure::DEGREE); auto conv = createMercatorVariantB( util::PropertyMap(), latitudeFirstParallel, common::Angle(parameterValueMeasure( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN)), common::Length( parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_EASTING)), common::Length( parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_NORTHING))); conv->setCRSs(this, false); return conv.as_nullable(); } if (current_epsg_code == EPSG_CODE_METHOD_MERCATOR_VARIANT_B && targetEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_A) { const double phi1 = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL); if (!(std::fabs(phi1) < M_PI / 2)) return nullptr; const double k0 = msfn(phi1, e2); auto conv = createMercatorVariantA( util::PropertyMap(), common::Angle(0.0, common::UnitOfMeasure::DEGREE), common::Angle(parameterValueMeasure( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN)), common::Scale(k0, common::UnitOfMeasure::SCALE_UNITY), common::Length( parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_EASTING)), common::Length( parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_NORTHING))); conv->setCRSs(this, false); return conv.as_nullable(); } if (current_epsg_code == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP && targetEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP) { // Notations m0, t0, n, m1, t1, F are those of the EPSG guidance // "1.3.1.1 Lambert Conic Conformal (2SP)" and // "1.3.1.2 Lambert Conic Conformal (1SP)" and // or Snyder pages 106-109 auto latitudeOfOrigin = common::Angle(parameterValueMeasure( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN)); const double phi0 = latitudeOfOrigin.getSIValue(); const double k0 = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN); if (!(std::fabs(phi0) < M_PI / 2)) return nullptr; if (!(k0 > 0 && k0 <= 1.0 + 1e-10)) return nullptr; const double ec = std::sqrt(e2); const double m0 = msfn(phi0, e2); const double t0 = tsfn(phi0, ec); const double n = sin(phi0); if (std::fabs(n) < 1e-10) return nullptr; if (fabs(k0 - 1.0) <= 1e-10) { auto conv = createLambertConicConformal_2SP( util::PropertyMap(), latitudeOfOrigin, common::Angle(parameterValueMeasure( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN)), latitudeOfOrigin, latitudeOfOrigin, common::Length( parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_EASTING)), common::Length( parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_NORTHING))); conv->setCRSs(this, false); return conv.as_nullable(); } else { const double K = k0 * m0 / std::pow(t0, n); const double phi1 = std::asin(find_zero_lcc_1sp_to_2sp_f(n, true, K, ec)); const double phi2 = std::asin(find_zero_lcc_1sp_to_2sp_f(n, false, K, ec)); double phi1Deg = RadToDeg(phi1); double phi2Deg = RadToDeg(phi2); // Try to round to hundreth of degree if very close to it if (std::fabs(phi1Deg * 1000 - std::floor(phi1Deg * 1000 + 0.5)) < 1e-8) phi1Deg = floor(phi1Deg * 1000 + 0.5) / 1000; if (std::fabs(phi2Deg * 1000 - std::floor(phi2Deg * 1000 + 0.5)) < 1e-8) phi2Deg = std::floor(phi2Deg * 1000 + 0.5) / 1000; // The following improvement is too turn the LCC1SP equivalent of // EPSG:2154 to the real LCC2SP // If the computed latitude of origin is close to .0 or .5 degrees // then check if rounding it to it will get a false northing // close to an integer const double FN = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_FALSE_NORTHING); const double latitudeOfOriginDeg = latitudeOfOrigin.convertToUnit(common::UnitOfMeasure::DEGREE); if (std::fabs(latitudeOfOriginDeg * 2 - std::floor(latitudeOfOriginDeg * 2 + 0.5)) < 0.2) { const double dfRoundedLatOfOrig = std::floor(latitudeOfOriginDeg * 2 + 0.5) / 2; const double m1 = msfn(phi1, e2); const double t1 = tsfn(phi1, ec); const double F = m1 / (n * std::pow(t1, n)); const double a = geogCRS->ellipsoid()->semiMajorAxis().getSIValue(); const double tRoundedLatOfOrig = tsfn(DegToRad(dfRoundedLatOfOrig), ec); const double FN_correction = a * F * (std::pow(tRoundedLatOfOrig, n) - std::pow(t0, n)); const double FN_corrected = FN - FN_correction; const double FN_corrected_rounded = std::floor(FN_corrected + 0.5); if (std::fabs(FN_corrected - FN_corrected_rounded) < 1e-8) { auto conv = createLambertConicConformal_2SP( util::PropertyMap(), common::Angle(dfRoundedLatOfOrig, common::UnitOfMeasure::DEGREE), common::Angle(parameterValueMeasure( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN)), common::Angle(phi1Deg, common::UnitOfMeasure::DEGREE), common::Angle(phi2Deg, common::UnitOfMeasure::DEGREE), common::Length(parameterValueMeasure( EPSG_CODE_PARAMETER_FALSE_EASTING)), common::Length(FN_corrected_rounded)); conv->setCRSs(this, false); return conv.as_nullable(); } } auto conv = createLambertConicConformal_2SP( util::PropertyMap(), latitudeOfOrigin, common::Angle(parameterValueMeasure( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN)), common::Angle(phi1Deg, common::UnitOfMeasure::DEGREE), common::Angle(phi2Deg, common::UnitOfMeasure::DEGREE), common::Length( parameterValueMeasure(EPSG_CODE_PARAMETER_FALSE_EASTING)), common::Length(FN)); conv->setCRSs(this, false); return conv.as_nullable(); } } if (current_epsg_code == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP && targetEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP) { // Notations m0, t0, m1, t1, m2, t2 n, F are those of the EPSG guidance // "1.3.1.1 Lambert Conic Conformal (2SP)" and // "1.3.1.2 Lambert Conic Conformal (1SP)" and // or Snyder pages 106-109 const double phiF = parameterValueMeasure(EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN) .getSIValue(); const double phi1 = parameterValueMeasure(EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL) .getSIValue(); const double phi2 = parameterValueMeasure(EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL) .getSIValue(); if (!(std::fabs(phiF) < M_PI / 2)) return nullptr; if (!(std::fabs(phi1) < M_PI / 2)) return nullptr; if (!(std::fabs(phi2) < M_PI / 2)) return nullptr; const double ec = std::sqrt(e2); const double m1 = msfn(phi1, e2); const double m2 = msfn(phi2, e2); const double t1 = tsfn(phi1, ec); const double t2 = tsfn(phi2, ec); const double n_denom = std::log(t1) - std::log(t2); const double n = (std::fabs(n_denom) < 1e-10) ? std::sin(phi1) : (std::log(m1) - std::log(m2)) / n_denom; if (std::fabs(n) < 1e-10) return nullptr; const double F = m1 / (n * std::pow(t1, n)); const double phi0 = std::asin(n); const double m0 = msfn(phi0, e2); const double t0 = tsfn(phi0, ec); const double F0 = m0 / (n * std::pow(t0, n)); const double k0 = F / F0; const double a = geogCRS->ellipsoid()->semiMajorAxis().getSIValue(); const double tF = tsfn(phiF, ec); const double FN_correction = a * F * (std::pow(tF, n) - std::pow(t0, n)); double phi0Deg = RadToDeg(phi0); // Try to round to thousandth of degree if very close to it if (std::fabs(phi0Deg * 1000 - std::floor(phi0Deg * 1000 + 0.5)) < 1e-8) phi0Deg = std::floor(phi0Deg * 1000 + 0.5) / 1000; auto conv = createLambertConicConformal_1SP( util::PropertyMap(), common::Angle(phi0Deg, common::UnitOfMeasure::DEGREE), common::Angle(parameterValueMeasure( EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN)), common::Scale(k0), common::Length(parameterValueMeasure( EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN)), common::Length( parameterValueNumericAsSI( EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN) + (std::fabs(FN_correction) > 1e-8 ? FN_correction : 0))); conv->setCRSs(this, false); return conv.as_nullable(); } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const ESRIMethodMapping *getESRIMapping(const std::string &wkt2_name, int epsg_code) { size_t nEsriMappings = 0; const auto esriMappings = getEsriMappings(nEsriMappings); for (size_t i = 0; i < nEsriMappings; ++i) { const auto &mapping = esriMappings[i]; if ((epsg_code != 0 && mapping.epsg_code == epsg_code) || ci_equal(wkt2_name, mapping.wkt2_name)) { return &mapping; } } return nullptr; } // --------------------------------------------------------------------------- static void getESRIMethodNameAndParams(const Conversion *conv, const std::string &methodName, int methodEPSGCode, const char *&esriMethodName, const ESRIParamMapping *&esriParams) { esriParams = nullptr; esriMethodName = nullptr; const auto *esriMapping = getESRIMapping(methodName, methodEPSGCode); const auto l_targetCRS = conv->targetCRS(); if (esriMapping) { esriParams = esriMapping->params; esriMethodName = esriMapping->esri_name; if (esriMapping->epsg_code == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL || esriMapping->epsg_code == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL) { if (l_targetCRS && ci_find(l_targetCRS->nameStr(), "Plate Carree") != std::string::npos && conv->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN) == 0.0) { esriParams = paramsESRI_Plate_Carree; esriMethodName = "Plate_Carree"; } else { esriParams = paramsESRI_Equidistant_Cylindrical; esriMethodName = "Equidistant_Cylindrical"; } } else if (esriMapping->epsg_code == EPSG_CODE_METHOD_TRANSVERSE_MERCATOR) { if (ci_find(conv->nameStr(), "Gauss Kruger") != std::string::npos || (l_targetCRS && (ci_find(l_targetCRS->nameStr(), "Gauss") != std::string::npos || ci_find(l_targetCRS->nameStr(), "GK_") != std::string::npos))) { esriParams = paramsESRI_Gauss_Kruger; esriMethodName = "Gauss_Kruger"; } else { esriParams = paramsESRI_Transverse_Mercator; esriMethodName = "Transverse_Mercator"; } } else if (esriMapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A) { if (std::abs( conv->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE) - conv->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID)) < 1e-15) { esriParams = paramsESRI_Hotine_Oblique_Mercator_Azimuth_Natural_Origin; esriMethodName = "Hotine_Oblique_Mercator_Azimuth_Natural_Origin"; } else { esriParams = paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin; esriMethodName = "Rectified_Skew_Orthomorphic_Natural_Origin"; } } else if (esriMapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B) { if (std::abs( conv->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE) - conv->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID)) < 1e-15) { esriParams = paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center; esriMethodName = "Hotine_Oblique_Mercator_Azimuth_Center"; } else { esriParams = paramsESRI_Rectified_Skew_Orthomorphic_Center; esriMethodName = "Rectified_Skew_Orthomorphic_Center"; } } else if (esriMapping->epsg_code == EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A) { // Quite empiric, but looking at pe_list_projcs.csv, the only // CRS that use Polar_Stereographic_Variant_A are EPSG:5041 and 5042 if (l_targetCRS && // EPSG:5041 (l_targetCRS->nameStr() == "WGS 84 / UPS North (E,N)" || // EPSG:5042 l_targetCRS->nameStr() == "WGS 84 / UPS South (E,N)")) { esriMethodName = "Polar_Stereographic_Variant_A"; } else { esriMethodName = "Stereographic"; } } else if (esriMapping->epsg_code == EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B) { if (conv->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL) > 0) { esriMethodName = "Stereographic_North_Pole"; } else { esriMethodName = "Stereographic_South_Pole"; } } else if (esriMapping->epsg_code == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA) { if (std::abs(conv->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, common::UnitOfMeasure::DEGREE) - 30.0) < 1e-10) { esriMethodName = "Behrmann"; } else { esriMethodName = "Cylindrical_Equal_Area"; } } } } // --------------------------------------------------------------------------- const char *Conversion::getESRIMethodName() const { const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const auto methodEPSGCode = l_method->getEPSGCode(); const ESRIParamMapping *esriParams = nullptr; const char *esriMethodName = nullptr; getESRIMethodNameAndParams(this, methodName, methodEPSGCode, esriMethodName, esriParams); return esriMethodName; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const char *Conversion::getWKT1GDALMethodName() const { const auto &l_method = method(); const auto methodEPSGCode = l_method->getEPSGCode(); if (methodEPSGCode == EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR) { return "Mercator_1SP"; } const MethodMapping *mapping = getMapping(l_method.get()); return mapping ? mapping->wkt1_name : nullptr; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Conversion::_exportToWKT(io::WKTFormatter *formatter) const { const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const auto methodEPSGCode = l_method->getEPSGCode(); const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2 && formatter->useESRIDialect()) { if (methodEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_A) { auto eqConv = convertToOtherMethod(EPSG_CODE_METHOD_MERCATOR_VARIANT_B); if (eqConv) { eqConv->_exportToWKT(formatter); return; } } } if (isWKT2) { formatter->startNode(formatter->useDerivingConversion() ? io::WKTConstants::DERIVINGCONVERSION : io::WKTConstants::CONVERSION, !identifiers().empty()); formatter->addQuotedString(nameStr()); } else { formatter->enter(); formatter->pushOutputUnit(false); formatter->pushOutputId(false); } #ifdef DEBUG_CONVERSION_ID if (sourceCRS() && targetCRS()) { formatter->startNode("SOURCECRS_ID", false); sourceCRS()->formatID(formatter); formatter->endNode(); formatter->startNode("TARGETCRS_ID", false); targetCRS()->formatID(formatter); formatter->endNode(); } #endif bool bAlreadyWritten = false; if (!isWKT2 && formatter->useESRIDialect()) { const ESRIParamMapping *esriParams = nullptr; const char *esriMethodName = nullptr; getESRIMethodNameAndParams(this, methodName, methodEPSGCode, esriMethodName, esriParams); if (esriMethodName && esriParams) { formatter->startNode(io::WKTConstants::PROJECTION, false); formatter->addQuotedString(esriMethodName); formatter->endNode(); for (int i = 0; esriParams[i].esri_name != nullptr; i++) { const auto &esriParam = esriParams[i]; formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString(esriParam.esri_name); if (esriParam.wkt2_name) { const auto &pv = parameterValue(esriParam.wkt2_name, esriParam.epsg_code); if (pv && pv->type() == ParameterValue::Type::MEASURE) { const auto &v = pv->value(); // as we don't output the natural unit, output // to the registered linear / angular unit. const auto &unitType = v.unit().type(); if (unitType == common::UnitOfMeasure::Type::LINEAR) { formatter->add(v.convertToUnit( *(formatter->axisLinearUnit()))); } else if (unitType == common::UnitOfMeasure::Type::ANGULAR) { const auto &angUnit = *(formatter->axisAngularUnit()); double val = v.convertToUnit(angUnit); if (angUnit == common::UnitOfMeasure::DEGREE) { if (val > 180.0) { val -= 360.0; } else if (val < -180.0) { val += 360.0; } } formatter->add(val); } else { formatter->add(v.getSIValue()); } } else if (ci_find(esriParam.esri_name, "scale") != std::string::npos) { formatter->add(1.0); } else { formatter->add(0.0); } } else { formatter->add(esriParam.fixed_value); } formatter->endNode(); } bAlreadyWritten = true; } } else if (!isWKT2) { if (methodEPSGCode == EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR) { const double latitudeOrigin = parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, common::UnitOfMeasure::DEGREE); if (latitudeOrigin != 0) { throw io::FormattingException( std::string("Unsupported value for ") + EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN); } bAlreadyWritten = true; formatter->startNode(io::WKTConstants::PROJECTION, false); formatter->addQuotedString("Mercator_1SP"); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("central_meridian"); const double centralMeridian = parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, common::UnitOfMeasure::DEGREE); formatter->add(centralMeridian); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("scale_factor"); formatter->add(1.0); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("false_easting"); const double falseEasting = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_FALSE_EASTING); formatter->add(falseEasting); formatter->endNode(); formatter->startNode(io::WKTConstants::PARAMETER, false); formatter->addQuotedString("false_northing"); const double falseNorthing = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_FALSE_NORTHING); formatter->add(falseNorthing); formatter->endNode(); } else if (starts_with(methodName, "PROJ ")) { bAlreadyWritten = true; formatter->startNode(io::WKTConstants::PROJECTION, false); formatter->addQuotedString("custom_proj4"); formatter->endNode(); } } if (!bAlreadyWritten) { l_method->_exportToWKT(formatter); const MethodMapping *mapping = !isWKT2 ? getMapping(l_method.get()) : nullptr; bool hasInterpolationCRSParameter = false; for (const auto &genOpParamvalue : parameterValues()) { const auto opParamvalue = dynamic_cast( genOpParamvalue.get()); const int paramEPSGCode = opParamvalue ? opParamvalue->parameter()->getEPSGCode() : 0; // EPSG has normally no Latitude of natural origin for Equidistant // Cylindrical but PROJ can handle it, so output the parameter if // not zero if ((methodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL || methodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL)) { if (paramEPSGCode == EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN) { const auto ¶mValue = opParamvalue->parameterValue(); if (paramValue->type() == ParameterValue::Type::MEASURE) { const auto &measure = paramValue->value(); if (measure.getSIValue() == 0) { continue; } } } } // Same for false easting / false northing for Vertical Perspective else if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_PERSPECTIVE) { if (paramEPSGCode == EPSG_CODE_PARAMETER_FALSE_EASTING || paramEPSGCode == EPSG_CODE_PARAMETER_FALSE_NORTHING) { const auto ¶mValue = opParamvalue->parameterValue(); if (paramValue->type() == ParameterValue::Type::MEASURE) { const auto &measure = paramValue->value(); if (measure.getSIValue() == 0) { continue; } } } } if (paramEPSGCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS || paramEPSGCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS) { hasInterpolationCRSParameter = true; } genOpParamvalue->_exportToWKT(formatter, mapping); } // If we have an interpolation CRS that has a EPSG code, then // we can export it as a PARAMETER[] const auto l_interpolationCRS = interpolationCRS(); if (!hasInterpolationCRSParameter && l_interpolationCRS) { const auto code = l_interpolationCRS->getEPSGCode(); if (code != 0) { createOperationParameterValueFromInterpolationCRS( methodEPSGCode, code) ->_exportToWKT(formatter, mapping); } } } if (isWKT2) { if (formatter->outputId()) { formatID(formatter); } formatter->endNode(); } else { formatter->popOutputUnit(); formatter->popOutputId(); formatter->leave(); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Conversion::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext( formatter->MakeObjectContext("Conversion", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("method"); formatter->setOmitTypeInImmediateChild(); formatter->setAllowIDInImmediateChild(); const auto &l_method = method(); l_method->_exportToJSON(formatter); const auto &l_parameterValues = parameterValues(); const auto l_interpolationCRS = interpolationCRS(); if (!l_parameterValues.empty() || l_interpolationCRS) { writer->AddObjKey("parameters"); { bool hasInterpolationCRSParameter = false; auto parametersContext(writer->MakeArrayContext(false)); for (const auto &genOpParamvalue : l_parameterValues) { const auto opParamvalue = dynamic_cast( genOpParamvalue.get()); const int paramEPSGCode = opParamvalue ? opParamvalue->parameter()->getEPSGCode() : 0; if (paramEPSGCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS || paramEPSGCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS) { hasInterpolationCRSParameter = true; } formatter->setAllowIDInImmediateChild(); formatter->setOmitTypeInImmediateChild(); genOpParamvalue->_exportToJSON(formatter); } // If we have an interpolation CRS that has a EPSG code, then // we can export it as a parameter if (!hasInterpolationCRSParameter && l_interpolationCRS) { const auto methodEPSGCode = l_method->getEPSGCode(); const auto code = l_interpolationCRS->getEPSGCode(); if (code != 0) { formatter->setAllowIDInImmediateChild(); formatter->setOmitTypeInImmediateChild(); createOperationParameterValueFromInterpolationCRS( methodEPSGCode, code) ->_exportToJSON(formatter); } } } } if (formatter->outputId()) { formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool createPROJ4WebMercator(const Conversion *conv, io::PROJStringFormatter *formatter) { const double centralMeridian = conv->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, common::UnitOfMeasure::DEGREE); const double falseEasting = conv->parameterValueNumericAsSI(EPSG_CODE_PARAMETER_FALSE_EASTING); const double falseNorthing = conv->parameterValueNumericAsSI(EPSG_CODE_PARAMETER_FALSE_NORTHING); auto sourceCRS = conv->sourceCRS(); auto geogCRS = dynamic_cast(sourceCRS.get()); if (!geogCRS) { return false; } std::string units("m"); auto targetCRS = conv->targetCRS(); auto targetProjCRS = dynamic_cast(targetCRS.get()); if (targetProjCRS) { const auto &axisList = targetProjCRS->coordinateSystem()->axisList(); const auto &unit = axisList[0]->unit(); if (!unit._isEquivalentTo(common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT)) { auto projUnit = unit.exportToPROJString(); if (!projUnit.empty()) { units = std::move(projUnit); } else { return false; } } } formatter->addStep("merc"); const double a = geogCRS->ellipsoid()->semiMajorAxis().getSIValue(); formatter->addParam("a", a); formatter->addParam("b", a); formatter->addParam("lat_ts", 0.0); formatter->addParam("lon_0", centralMeridian); formatter->addParam("x_0", falseEasting); formatter->addParam("y_0", falseNorthing); formatter->addParam("k", 1.0); formatter->addParam("units", units); formatter->addParam("nadgrids", "@null"); if (targetProjCRS && targetProjCRS->hasOver()) { formatter->addParam("over"); } formatter->addParam("wktext"); formatter->addParam("no_defs"); return true; } // --------------------------------------------------------------------------- static bool createPROJExtensionFromCustomProj(const Conversion *conv, io::PROJStringFormatter *formatter, bool forExtensionNode) { const auto &methodName = conv->method()->nameStr(); assert(starts_with(methodName, "PROJ ")); auto tokens = split(methodName, ' '); formatter->addStep(tokens[1]); if (forExtensionNode) { auto sourceCRS = conv->sourceCRS(); auto geogCRS = dynamic_cast(sourceCRS.get()); if (!geogCRS) { return false; } geogCRS->addDatumInfoToPROJString(formatter); } for (size_t i = 2; i < tokens.size(); i++) { auto kv = split(tokens[i], '='); if (kv.size() == 2) { formatter->addParam(kv[0], kv[1]); } else { formatter->addParam(tokens[i]); } } for (const auto &genOpParamvalue : conv->parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶mValue = opParamvalue->parameterValue(); if (paramValue->type() == ParameterValue::Type::MEASURE) { const auto &measure = paramValue->value(); const auto unitType = measure.unit().type(); if (unitType == common::UnitOfMeasure::Type::LINEAR) { formatter->addParam(paramName, measure.getSIValue()); } else if (unitType == common::UnitOfMeasure::Type::ANGULAR) { formatter->addParam( paramName, measure.convertToUnit(common::UnitOfMeasure::DEGREE)); } else { formatter->addParam(paramName, measure.value()); } } } } if (forExtensionNode) { formatter->addParam("wktext"); formatter->addParam("no_defs"); } return true; } //! @endcond // --------------------------------------------------------------------------- bool Conversion::addWKTExtensionNode(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const int methodEPSGCode = l_method->getEPSGCode(); if (l_method->getPrivate()->projMethodOverride_ == "tmerc approx" || l_method->getPrivate()->projMethodOverride_ == "utm approx") { auto projFormatter = io::PROJStringFormatter::create(); projFormatter->setCRSExport(true); projFormatter->setUseApproxTMerc(true); formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4"); _exportToPROJString(projFormatter.get()); projFormatter->addParam("no_defs"); formatter->addQuotedString(projFormatter->toString()); formatter->endNode(); return true; } else if (methodEPSGCode == EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR || nameStr() == "Popular Visualisation Mercator") { auto projFormatter = io::PROJStringFormatter::create(); projFormatter->setCRSExport(true); if (createPROJ4WebMercator(this, projFormatter.get())) { formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4"); formatter->addQuotedString(projFormatter->toString()); formatter->endNode(); return true; } } else if (starts_with(methodName, "PROJ ")) { auto projFormatter = io::PROJStringFormatter::create(); projFormatter->setCRSExport(true); if (createPROJExtensionFromCustomProj(this, projFormatter.get(), true)) { formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4"); formatter->addQuotedString(projFormatter->toString()); formatter->endNode(); return true; } } else if (methodName == PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X) { auto projFormatter = io::PROJStringFormatter::create(); projFormatter->setCRSExport(true); formatter->startNode(io::WKTConstants::EXTENSION, false); formatter->addQuotedString("PROJ4"); _exportToPROJString(projFormatter.get()); projFormatter->addParam("no_defs"); formatter->addQuotedString(projFormatter->toString()); formatter->endNode(); return true; } } return false; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Conversion::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(FormattingException) { const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const int methodEPSGCode = l_method->getEPSGCode(); const bool isZUnitConversion = methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT || methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR; const bool isAffineParametric = methodEPSGCode == EPSG_CODE_METHOD_AFFINE_PARAMETRIC_TRANSFORMATION; const bool isSimilarity = methodEPSGCode == EPSG_CODE_METHOD_SIMILARITY_TRANSFORMATION; const bool isGeographicGeocentric = methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC_GEOCENTRIC; const bool isGeographicOffsets = methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS || methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS || methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS; const bool isHeightDepthReversal = methodEPSGCode == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL; const bool applySourceCRSModifiers = !isZUnitConversion && !isAffineParametric && !isSimilarity && !isAxisOrderReversal(methodEPSGCode) && !isGeographicGeocentric && !isGeographicOffsets && !isHeightDepthReversal; bool applyTargetCRSModifiers = applySourceCRSModifiers; if (formatter->getCRSExport()) { if (methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TOPOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC_TOPOCENTRIC) { throw io::FormattingException("Transformation cannot be exported " "as a PROJ.4 string (but can be part " "of a PROJ pipeline)"); } } auto l_sourceCRS = sourceCRS(); auto l_targetCRS = targetCRS(); if (methodName == PROJ_WKT2_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC_LATITUDE) { const auto extractGeodeticCRSIfGeodeticCRSOrEquivalent = [](const crs::CRSPtr &crs) { auto geodCRS = std::dynamic_pointer_cast(crs); if (!geodCRS) { auto compoundCRS = std::dynamic_pointer_cast(crs); if (compoundCRS) { const auto &components = compoundCRS->componentReferenceSystems(); if (!components.empty()) { geodCRS = util::nn_dynamic_pointer_cast( components[0]); if (!geodCRS) { auto boundCRS = util::nn_dynamic_pointer_cast< crs::BoundCRS>(components[0]); if (boundCRS) { geodCRS = util::nn_dynamic_pointer_cast< crs::GeodeticCRS>(boundCRS->baseCRS()); } } } } else { auto boundCRS = std::dynamic_pointer_cast(crs); if (boundCRS) { geodCRS = util::nn_dynamic_pointer_cast( boundCRS->baseCRS()); } } } return geodCRS; }; auto sourceCRSGeod = dynamic_cast( extractGeodeticCRSIfGeodeticCRSOrEquivalent(l_sourceCRS).get()); auto targetCRSGeod = dynamic_cast( extractGeodeticCRSIfGeodeticCRSOrEquivalent(l_targetCRS).get()); if (sourceCRSGeod && targetCRSGeod) { auto sourceCRSGeog = dynamic_cast(sourceCRSGeod); auto targetCRSGeog = dynamic_cast(targetCRSGeod); bool isSrcGeocentricLat = sourceCRSGeod->isSphericalPlanetocentric(); bool isSrcGeographic = sourceCRSGeog != nullptr; bool isTargetGeocentricLat = targetCRSGeod->isSphericalPlanetocentric(); bool isTargetGeographic = targetCRSGeog != nullptr; if ((isSrcGeocentricLat && isTargetGeographic) || (isSrcGeographic && isTargetGeocentricLat)) { formatter->setOmitProjLongLatIfPossible(true); formatter->startInversion(); sourceCRSGeod->_exportToPROJString(formatter); formatter->stopInversion(); targetCRSGeod->_exportToPROJString(formatter); formatter->setOmitProjLongLatIfPossible(false); return; } } throw io::FormattingException("Invalid nature of source and/or " "targetCRS for Geographic latitude / " "Geocentric latitude" "conversion"); } crs::GeographicCRSPtr srcGeogCRS; if (!formatter->getCRSExport() && l_sourceCRS && applySourceCRSModifiers) { crs::CRSPtr horiz = l_sourceCRS; const auto compound = dynamic_cast(l_sourceCRS.get()); if (compound) { const auto &components = compound->componentReferenceSystems(); if (!components.empty()) { horiz = components.front().as_nullable(); const auto boundCRS = dynamic_cast(horiz.get()); if (boundCRS) { horiz = boundCRS->baseCRS().as_nullable(); } } } auto srcGeodCRS = dynamic_cast(horiz.get()); if (srcGeodCRS) { srcGeogCRS = std::dynamic_pointer_cast(horiz); } if (srcGeodCRS && (srcGeogCRS || srcGeodCRS->isSphericalPlanetocentric())) { formatter->setOmitProjLongLatIfPossible(true); formatter->startInversion(); srcGeodCRS->_exportToPROJString(formatter); formatter->stopInversion(); formatter->setOmitProjLongLatIfPossible(false); } auto projCRS = dynamic_cast(horiz.get()); if (projCRS) { formatter->startInversion(); formatter->pushOmitZUnitConversion(); projCRS->addUnitConvertAndAxisSwap(formatter, false); formatter->popOmitZUnitConversion(); formatter->stopInversion(); } } const auto &convName = nameStr(); bool bConversionDone = false; bool bEllipsoidParametersDone = false; bool useApprox = false; if (methodEPSGCode == EPSG_CODE_METHOD_TRANSVERSE_MERCATOR) { // Check for UTM int zone = 0; bool north = true; useApprox = formatter->getUseApproxTMerc() || l_method->getPrivate()->projMethodOverride_ == "tmerc approx" || l_method->getPrivate()->projMethodOverride_ == "utm approx"; if (isUTM(zone, north)) { bConversionDone = true; formatter->addStep("utm"); if (useApprox) { formatter->addParam("approx"); } formatter->addParam("zone", zone); if (!north) { formatter->addParam("south"); } } } else if (methodEPSGCode == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A) { const double azimuth = parameterValueNumeric(EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, common::UnitOfMeasure::DEGREE); const double angleRectifiedToSkewGrid = parameterValueNumeric( EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, common::UnitOfMeasure::DEGREE); // Map to Swiss Oblique Mercator / somerc if (std::fabs(azimuth - 90) < 1e-4 && std::fabs(angleRectifiedToSkewGrid - 90) < 1e-4) { bConversionDone = true; formatter->addStep("somerc"); formatter->addParam( "lat_0", parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, common::UnitOfMeasure::DEGREE)); formatter->addParam( "lon_0", parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, common::UnitOfMeasure::DEGREE)); formatter->addParam( "k_0", parameterValueNumericAsSI( EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE)); formatter->addParam("x_0", parameterValueNumericAsSI( EPSG_CODE_PARAMETER_FALSE_EASTING)); formatter->addParam("y_0", parameterValueNumericAsSI( EPSG_CODE_PARAMETER_FALSE_NORTHING)); } } else if (methodEPSGCode == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B) { const double azimuth = parameterValueNumeric(EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, common::UnitOfMeasure::DEGREE); const double angleRectifiedToSkewGrid = parameterValueNumeric( EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, common::UnitOfMeasure::DEGREE); // Map to Swiss Oblique Mercator / somerc if (std::fabs(azimuth - 90) < 1e-4 && std::fabs(angleRectifiedToSkewGrid - 90) < 1e-4) { bConversionDone = true; formatter->addStep("somerc"); formatter->addParam( "lat_0", parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, common::UnitOfMeasure::DEGREE)); formatter->addParam( "lon_0", parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, common::UnitOfMeasure::DEGREE)); formatter->addParam( "k_0", parameterValueNumericAsSI( EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE)); formatter->addParam( "x_0", parameterValueNumericAsSI( EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE)); formatter->addParam( "y_0", parameterValueNumericAsSI( EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE)); } } else if (methodEPSGCode == EPSG_CODE_METHOD_KROVAK_NORTH_ORIENTED || methodEPSGCode == EPSG_CODE_METHOD_KROVAK_MODIFIED_NORTH_ORIENTED) { double colatitude = parameterValueNumeric(EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS, common::UnitOfMeasure::DEGREE); double latitudePseudoStandardParallel = parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, common::UnitOfMeasure::DEGREE); // 30deg 17' 17.30311'' = 30.28813975277777776 // 30deg 17' 17.303'' = 30.288139722222223 as used in GDAL WKT1 if (std::fabs(colatitude - 30.2881397) > 1e-7) { throw io::FormattingException( std::string("Unsupported value for ") + EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS); } if (std::fabs(latitudePseudoStandardParallel - 78.5) > 1e-8) { throw io::FormattingException( std::string("Unsupported value for ") + EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL); } } else if (methodEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_A) { double latitudeOrigin = parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, common::UnitOfMeasure::DEGREE); if (latitudeOrigin != 0) { throw io::FormattingException( std::string("Unsupported value for ") + EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN); } } else if (methodEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_B) { const auto &scaleFactor = parameterValueMeasure(WKT1_SCALE_FACTOR, 0); if (scaleFactor.unit().type() != common::UnitOfMeasure::Type::UNKNOWN && std::fabs(scaleFactor.getSIValue() - 1.0) > 1e-10) { throw io::FormattingException( "Unexpected presence of scale factor in Mercator (variant B)"); } double latitudeOrigin = parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, common::UnitOfMeasure::DEGREE); if (latitudeOrigin != 0) { throw io::FormattingException( std::string("Unsupported value for ") + EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN); } } else if (methodEPSGCode == EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED) { // We map TMSO to tmerc with axis=wsu. This only works if false easting // and northings are zero, which is the case in practice for South // African and Namibian EPSG CRS const auto falseEasting = parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_EASTING, common::UnitOfMeasure::METRE); if (falseEasting != 0) { throw io::FormattingException( std::string("Unsupported value for ") + EPSG_NAME_PARAMETER_FALSE_EASTING); } const auto falseNorthing = parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_NORTHING, common::UnitOfMeasure::METRE); if (falseNorthing != 0) { throw io::FormattingException( std::string("Unsupported value for ") + EPSG_NAME_PARAMETER_FALSE_NORTHING); } // PROJ.4 specific hack for webmercator } else if (formatter->getCRSExport() && methodEPSGCode == EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR) { if (!createPROJ4WebMercator(this, formatter)) { throw io::FormattingException( std::string("Cannot export ") + EPSG_NAME_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR + " as PROJ.4 string outside of a ProjectedCRS context"); } bConversionDone = true; bEllipsoidParametersDone = true; applyTargetCRSModifiers = false; } else if (ci_equal(convName, "Popular Visualisation Mercator")) { if (formatter->getCRSExport()) { if (!createPROJ4WebMercator(this, formatter)) { throw io::FormattingException(concat( "Cannot export ", convName, " as PROJ.4 string outside of a ProjectedCRS context")); } applyTargetCRSModifiers = false; } else { formatter->addStep("webmerc"); if (l_sourceCRS) { datum::Ellipsoid::WGS84->_exportToPROJString(formatter); } } bConversionDone = true; bEllipsoidParametersDone = true; } else if (starts_with(methodName, "PROJ ")) { bConversionDone = true; createPROJExtensionFromCustomProj(this, formatter, false); } else if (ci_equal(methodName, PROJ_WKT2_NAME_METHOD_POLE_ROTATION_GRIB_CONVENTION)) { double southPoleLat = parameterValueNumeric( PROJ_WKT2_NAME_PARAMETER_SOUTH_POLE_LATITUDE_GRIB_CONVENTION, common::UnitOfMeasure::DEGREE); double southPoleLong = parameterValueNumeric( PROJ_WKT2_NAME_PARAMETER_SOUTH_POLE_LONGITUDE_GRIB_CONVENTION, common::UnitOfMeasure::DEGREE); double rotation = parameterValueNumeric( PROJ_WKT2_NAME_PARAMETER_AXIS_ROTATION_GRIB_CONVENTION, common::UnitOfMeasure::DEGREE); formatter->addStep("ob_tran"); formatter->addParam("o_proj", "longlat"); formatter->addParam("o_lon_p", -rotation); formatter->addParam("o_lat_p", -southPoleLat); formatter->addParam("lon_0", southPoleLong); bConversionDone = true; } else if (ci_equal( methodName, PROJ_WKT2_NAME_METHOD_POLE_ROTATION_NETCDF_CF_CONVENTION)) { double gridNorthPoleLatitude = parameterValueNumeric( PROJ_WKT2_NAME_PARAMETER_GRID_NORTH_POLE_LATITUDE_NETCDF_CONVENTION, common::UnitOfMeasure::DEGREE); double gridNorthPoleLongitude = parameterValueNumeric( PROJ_WKT2_NAME_PARAMETER_GRID_NORTH_POLE_LONGITUDE_NETCDF_CONVENTION, common::UnitOfMeasure::DEGREE); double northPoleGridLongitude = parameterValueNumeric( PROJ_WKT2_NAME_PARAMETER_NORTH_POLE_GRID_LONGITUDE_NETCDF_CONVENTION, common::UnitOfMeasure::DEGREE); formatter->addStep("ob_tran"); formatter->addParam("o_proj", "longlat"); formatter->addParam("o_lon_p", northPoleGridLongitude); formatter->addParam("o_lat_p", gridNorthPoleLatitude); formatter->addParam("lon_0", 180 + gridNorthPoleLongitude); bConversionDone = true; } else if (ci_equal(methodName, "Adams_Square_II")) { // Look for ESRI method and parameter names (to be opposed // to the OGC WKT2 names we use elsewhere, because there's no mapping // of those parameters to OGC WKT2) // We at least support ESRI:54098 WGS_1984_Adams_Square_II and // ESRI:54099 WGS_1984_Spilhaus_Ocean_Map_in_Square // More generally, we think our implementation of +proj=spilhaus // matches ESRI Adams_Square_II with just a sqrt(2) factor difference // for the scale factor, with a ~20 cm difference (difference in // ell_int_5() computation?) const double falseEasting = parameterValueNumeric( "False_Easting", common::UnitOfMeasure::METRE); const double falseNorthing = parameterValueNumeric( "False_Northing", common::UnitOfMeasure::METRE); const double scaleFactor = parameterValue("Scale_Factor", 0) ? parameterValueNumeric("Scale_Factor", common::UnitOfMeasure::SCALE_UNITY) : 1.0; const double azimuth = parameterValueNumeric("Azimuth", common::UnitOfMeasure::DEGREE); const double longitudeOfCenter = parameterValueNumeric( "Longitude_Of_Center", common::UnitOfMeasure::DEGREE); const double latitudeOfCenter = parameterValueNumeric( "Latitude_Of_Center", common::UnitOfMeasure::DEGREE); const double XYPlaneRotation = parameterValueNumeric( "XY_Plane_Rotation", common::UnitOfMeasure::DEGREE); formatter->addStep("spilhaus"); formatter->addParam("lat_0", latitudeOfCenter); formatter->addParam("lon_0", longitudeOfCenter); formatter->addParam("azi", azimuth); formatter->addParam("k_0", M_SQRT2 * scaleFactor); formatter->addParam("rot", XYPlaneRotation); formatter->addParam("x_0", falseEasting); formatter->addParam("y_0", falseNorthing); bConversionDone = true; } else if (ci_equal(methodName, PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE) || ci_equal(methodName, PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND)) { const auto &scaleFactor = parameterValueMeasure( EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN); if (scaleFactor.unit().type() != common::UnitOfMeasure::Type::UNKNOWN && std::fabs(scaleFactor.getSIValue() - 1.0) > 1e-10) { throw io::FormattingException( "Only scale factor = 1 handled for Peirce Quincuncial"); } const auto &latitudeOfOriginDeg = parameterValueMeasure( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN); if (latitudeOfOriginDeg.unit().type() != common::UnitOfMeasure::Type::UNKNOWN && std::fabs(parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, common::UnitOfMeasure::DEGREE) - 90.0) > 1e-10) { throw io::FormattingException("Only latitude of natural origin = " "90 handled for Peirce Quincuncial"); } } else if (formatter->convention() == io::PROJStringFormatter::Convention::PROJ_5 && isZUnitConversion) { double convFactor; if (methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT) { convFactor = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR); } else { assert(methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR); const auto vertSrcCRS = dynamic_cast(l_sourceCRS.get()); const auto vertTgtCRS = dynamic_cast(l_targetCRS.get()); if (vertSrcCRS && vertTgtCRS) { const double convSrc = vertSrcCRS->coordinateSystem() ->axisList()[0] ->unit() .conversionToSI(); const double convDst = vertTgtCRS->coordinateSystem() ->axisList()[0] ->unit() .conversionToSI(); convFactor = convSrc / convDst; } else { throw io::FormattingException( "Export of " "EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR " "conversion to a PROJ string " "requires an input and output vertical CRS"); } } exportToPROJStringChangeVerticalUnit(formatter, convFactor); bConversionDone = true; bEllipsoidParametersDone = true; } else if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC_TOPOCENTRIC) { if (!srcGeogCRS) { throw io::FormattingException( "Export of Geographic/Topocentric conversion to a PROJ string " "requires an input geographic CRS"); } formatter->addStep("cart"); srcGeogCRS->ellipsoid()->_exportToPROJString(formatter); formatter->addStep("topocentric"); const auto latOrigin = parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN, common::UnitOfMeasure::DEGREE); const auto longOrigin = parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN, common::UnitOfMeasure::DEGREE); const auto heightOrigin = parameterValueNumeric( EPSG_CODE_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN, common::UnitOfMeasure::METRE); formatter->addParam("lat_0", latOrigin); formatter->addParam("lon_0", longOrigin); formatter->addParam("h_0", heightOrigin); bConversionDone = true; } bool bAxisSpecFound = false; if (!bConversionDone) { const MethodMapping *mapping = getMapping(l_method.get()); if (mapping && mapping->proj_name_main) { formatter->addStep(mapping->proj_name_main); if (useApprox) { formatter->addParam("approx"); } if (mapping->proj_name_aux) { bool addAux = true; if (internal::starts_with(mapping->proj_name_aux, "axis=")) { if (mapping->epsg_code == EPSG_CODE_METHOD_KROVAK || mapping->epsg_code == EPSG_CODE_METHOD_KROVAK_MODIFIED) { auto projCRS = dynamic_cast( l_targetCRS.get()); if (projCRS) { const auto &axisList = projCRS->coordinateSystem()->axisList(); if (axisList[0]->direction() == cs::AxisDirection::WEST && axisList[1]->direction() == cs::AxisDirection::SOUTH) { formatter->addParam("czech"); addAux = false; } } } bAxisSpecFound = true; } // No need to add explicit f=0 or R_A if the ellipsoid is a // sphere if (strcmp(mapping->proj_name_aux, "f=0") == 0 || strcmp(mapping->proj_name_aux, "R_A") == 0) { crs::CRS *horiz = l_sourceCRS.get(); const auto compound = dynamic_cast(horiz); if (compound) { const auto &components = compound->componentReferenceSystems(); if (!components.empty()) { horiz = components.front().get(); const auto boundCRS = dynamic_cast(horiz); if (boundCRS) { horiz = boundCRS->baseCRS().get(); } } } auto geogCRS = dynamic_cast(horiz); if (geogCRS && geogCRS->ellipsoid()->isSphere()) { addAux = false; } } if (addAux) { auto kv = split(mapping->proj_name_aux, '='); if (kv.size() == 2) { formatter->addParam(kv[0], kv[1]); } else { formatter->addParam(mapping->proj_name_aux); } } } if (mapping->epsg_code == EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B) { double latitudeStdParallel = parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL, common::UnitOfMeasure::DEGREE); formatter->addParam("lat_0", (latitudeStdParallel >= 0) ? 90.0 : -90.0); } for (int i = 0; mapping->params[i] != nullptr; i++) { const auto *param = mapping->params[i]; if (!param->proj_name) { continue; } const auto &value = parameterValueMeasure(param->wkt2_name, param->epsg_code); double valueConverted = 0; if (value == nullMeasure) { // Deal with missing values. In an ideal world, this would // not happen if (param->epsg_code == EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN) { valueConverted = 1.0; } if ((mapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A || mapping->epsg_code == EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B) && param->epsg_code == EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID) { // Do not use 0 as the default value for +gamma of // proj=omerc continue; } } else if (param->unit_type == common::UnitOfMeasure::Type::ANGULAR) { valueConverted = value.convertToUnit(common::UnitOfMeasure::DEGREE); } else { valueConverted = value.getSIValue(); } if (mapping->epsg_code == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP && strcmp(param->proj_name, "lat_1") == 0) { formatter->addParam(param->proj_name, valueConverted); formatter->addParam("lat_0", valueConverted); } else { formatter->addParam(param->proj_name, valueConverted); } } } else { if (!exportToPROJStringGeneric(formatter)) { throw io::FormattingException( concat("Unsupported conversion method: ", methodName)); } } } if (l_targetCRS && applyTargetCRSModifiers) { crs::CRS *horiz = l_targetCRS.get(); const auto compound = dynamic_cast(horiz); if (compound) { const auto &components = compound->componentReferenceSystems(); if (!components.empty()) { horiz = components.front().get(); } } auto derivedProjCRS = dynamic_cast(horiz); // horiz != nullptr: only to make clang static analyzer happy if (!bEllipsoidParametersDone && horiz != nullptr && derivedProjCRS == nullptr) { auto targetGeodCRS = horiz->extractGeodeticCRS(); auto targetGeogCRS = std::dynamic_pointer_cast(targetGeodCRS); if (targetGeogCRS) { if (formatter->getCRSExport()) { targetGeogCRS->addDatumInfoToPROJString(formatter); } else { targetGeogCRS->ellipsoid()->_exportToPROJString(formatter); targetGeogCRS->primeMeridian()->_exportToPROJString( formatter); } } else if (targetGeodCRS) { targetGeodCRS->ellipsoid()->_exportToPROJString(formatter); } } auto projCRS = dynamic_cast(horiz); if (projCRS == nullptr) { auto boundCRS = dynamic_cast(horiz); if (boundCRS) { projCRS = dynamic_cast( boundCRS->baseCRS().get()); } } if (projCRS) { formatter->pushOmitZUnitConversion(); projCRS->addUnitConvertAndAxisSwap(formatter, bAxisSpecFound); formatter->popOmitZUnitConversion(); if (projCRS->hasOver()) { formatter->addParam("over"); } } else { if (derivedProjCRS) { formatter->pushOmitZUnitConversion(); derivedProjCRS->addUnitConvertAndAxisSwap(formatter); formatter->popOmitZUnitConversion(); } } auto derivedGeographicCRS = dynamic_cast(horiz); if (!formatter->getCRSExport() && derivedGeographicCRS) { formatter->setOmitProjLongLatIfPossible(true); derivedGeographicCRS->addAngularUnitConvertAndAxisSwap(formatter); formatter->setOmitProjLongLatIfPossible(false); } } } //! @endcond // --------------------------------------------------------------------------- /** \brief Return whether a conversion is a * * Universal Transverse Mercator conversion. * * @param[out] zone UTM zone number between 1 and 60. * @param[out] north true for UTM northern hemisphere, false for UTM southern * hemisphere. * @return true if it is a UTM conversion. */ bool Conversion::isUTM(int &zone, bool &north) const { zone = 0; north = true; if (method()->getEPSGCode() == EPSG_CODE_METHOD_TRANSVERSE_MERCATOR) { // Check for UTM bool bLatitudeNatOriginUTM = false; bool bScaleFactorUTM = false; bool bFalseEastingUTM = false; bool bFalseNorthingUTM = false; for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto epsg_code = opParamvalue->parameter()->getEPSGCode(); const auto &l_parameterValue = opParamvalue->parameterValue(); if (l_parameterValue->type() == ParameterValue::Type::MEASURE) { const auto &measure = l_parameterValue->value(); if (epsg_code == EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN && std::fabs(measure.value() - UTM_LATITUDE_OF_NATURAL_ORIGIN) < 1e-10) { bLatitudeNatOriginUTM = true; } else if ( (epsg_code == EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN || epsg_code == EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN) && measure.unit()._isEquivalentTo( common::UnitOfMeasure::DEGREE, util::IComparable::Criterion::EQUIVALENT)) { double dfZone = (measure.value() + 183.0) / 6.0; if (dfZone > 0.9 && dfZone < 60.1 && std::abs(dfZone - std::round(dfZone)) < 1e-10) { zone = static_cast(std::lround(dfZone)); } } else if ( epsg_code == EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN && measure.unit()._isEquivalentTo( common::UnitOfMeasure::SCALE_UNITY, util::IComparable::Criterion::EQUIVALENT) && std::fabs(measure.value() - UTM_SCALE_FACTOR) < 1e-10) { bScaleFactorUTM = true; } else if (epsg_code == EPSG_CODE_PARAMETER_FALSE_EASTING && measure.value() == UTM_FALSE_EASTING && measure.unit()._isEquivalentTo( common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT)) { bFalseEastingUTM = true; } else if (epsg_code == EPSG_CODE_PARAMETER_FALSE_NORTHING && measure.unit()._isEquivalentTo( common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT)) { if (std::fabs(measure.value() - UTM_NORTH_FALSE_NORTHING) < 1e-10) { bFalseNorthingUTM = true; north = true; } else if (std::fabs(measure.value() - UTM_SOUTH_FALSE_NORTHING) < 1e-10) { bFalseNorthingUTM = true; north = false; } } } } } if (bLatitudeNatOriginUTM && zone > 0 && bScaleFactorUTM && bFalseEastingUTM && bFalseNorthingUTM) { return true; } } return false; } // --------------------------------------------------------------------------- /** \brief Return a Conversion object where some parameters are better * identified. * * @return a new Conversion. */ ConversionNNPtr Conversion::identify() const { auto newConversion = Conversion::nn_make_shared(*this); newConversion->assignSelf(newConversion); if (method()->getEPSGCode() == EPSG_CODE_METHOD_TRANSVERSE_MERCATOR) { // Check for UTM int zone = 0; bool north = true; if (isUTM(zone, north)) { newConversion->setProperties( getUTMConversionProperty(util::PropertyMap(), zone, north)); } } return newConversion; } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion with method Geographic 2D offsets * * This method is defined as * * EPSG:9619. * * @param properties See \ref general_properties of the conversion. * At minimum the name should be defined. * @param offsetLat Latitude offset to add. * @param offsetLong Longitude offset to add. * @return new conversion. */ ConversionNNPtr Conversion::createGeographic2DOffsets(const util::PropertyMap &properties, const common::Angle &offsetLat, const common::Angle &offsetLong) { return create( properties, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LATITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET)}, VectorOfValues{offsetLat, offsetLong}); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion with method Geographic 3D offsets * * This method is defined as * * EPSG:9660. * * @param properties See \ref general_properties of the Conversion. * At minimum the name should be defined. * @param offsetLat Latitude offset to add. * @param offsetLong Longitude offset to add. * @param offsetHeight Height offset to add. * @return new Conversion. */ ConversionNNPtr Conversion::createGeographic3DOffsets( const util::PropertyMap &properties, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight) { return create( properties, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LATITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_VERTICAL_OFFSET)}, VectorOfValues{offsetLat, offsetLong, offsetHeight}); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion with method Geographic 2D with * height * offsets * * This method is defined as * * EPSG:9618. * * @param properties See \ref general_properties of the Conversion. * At minimum the name should be defined. * @param offsetLat Latitude offset to add. * @param offsetLong Longitude offset to add. * @param offsetHeight Geoid undulation to add. * @return new Conversion. */ ConversionNNPtr Conversion::createGeographic2DWithHeightOffsets( const util::PropertyMap &properties, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight) { return create( properties, createMethodMapNameEPSGCode( EPSG_CODE_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LATITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_GEOID_HEIGHT)}, VectorOfValues{offsetLat, offsetLong, offsetHeight}); } // --------------------------------------------------------------------------- /** \brief Instantiate a conversion with method Vertical Offset. * * This method is defined as * * EPSG:9616. * * @param properties See \ref general_properties of the Conversion. * At minimum the name should be defined. * @param offsetHeight Geoid undulation to add. * @return new Conversion. */ ConversionNNPtr Conversion::createVerticalOffset(const util::PropertyMap &properties, const common::Length &offsetHeight) { return create(properties, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_VERTICAL_OFFSET), VectorOfParameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_VERTICAL_OFFSET)}, VectorOfValues{offsetHeight}); } // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/coordinateoperation_internal.hpp000664 001754 001755 00000023427 14764566077 025064 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #error This file should only be included from a PROJ cpp file #endif #ifndef COORDINATEOPERATION_INTERNAL_HH_INCLUDED #define COORDINATEOPERATION_INTERNAL_HH_INCLUDED #include "proj/coordinateoperation.hpp" #include //! @cond Doxygen_Suppress NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- bool isAxisOrderReversal(int methodEPSGCode); // --------------------------------------------------------------------------- class InverseCoordinateOperation; /** Shared pointer of InverseCoordinateOperation */ using InverseCoordinateOperationPtr = std::shared_ptr; /** Non-null shared pointer of InverseCoordinateOperation */ using InverseCoordinateOperationNNPtr = util::nn; /** \brief Inverse operation of a CoordinateOperation. * * This is used when there is no straightforward way of building another * subclass of CoordinateOperation that models the inverse operation. */ class InverseCoordinateOperation : virtual public CoordinateOperation { public: InverseCoordinateOperation( const CoordinateOperationNNPtr &forwardOperationIn, bool wktSupportsInversion); ~InverseCoordinateOperation() override; void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override; CoordinateOperationNNPtr inverse() const override; const CoordinateOperationNNPtr &forwardOperation() const { return forwardOperation_; } protected: CoordinateOperationNNPtr forwardOperation_; bool wktSupportsInversion_; void setPropertiesFromForward(); }; // --------------------------------------------------------------------------- /** \brief Inverse of a conversion. */ class InverseConversion : public Conversion, public InverseCoordinateOperation { public: explicit InverseConversion(const ConversionNNPtr &forward); ~InverseConversion() override; void _exportToWKT(io::WKTFormatter *formatter) const override { Conversion::_exportToWKT(formatter); } void _exportToJSON(io::JSONFormatter *formatter) const override { Conversion::_exportToJSON(formatter); } void _exportToPROJString(io::PROJStringFormatter *formatter) const override { InverseCoordinateOperation::_exportToPROJString(formatter); } bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override { return InverseCoordinateOperation::_isEquivalentTo(other, criterion, dbContext); } CoordinateOperationNNPtr inverse() const override { return InverseCoordinateOperation::inverse(); } ConversionNNPtr inverseAsConversion() const; #ifdef _MSC_VER // To avoid a warning C4250: 'osgeo::proj::operation::InverseConversion': // inherits // 'osgeo::proj::operation::SingleOperation::osgeo::proj::operation::SingleOperation::gridsNeeded' // via dominance std::set gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const override { return SingleOperation::gridsNeeded(databaseContext, considerKnownGridsAsAvailable); } #endif static CoordinateOperationNNPtr create(const ConversionNNPtr &forward); CoordinateOperationNNPtr _shallowClone() const override; }; // --------------------------------------------------------------------------- /** \brief Inverse of a transformation. */ class InverseTransformation : public Transformation, public InverseCoordinateOperation { public: explicit InverseTransformation(const TransformationNNPtr &forward); ~InverseTransformation() override; void _exportToWKT(io::WKTFormatter *formatter) const override; void _exportToPROJString(io::PROJStringFormatter *formatter) const override { return InverseCoordinateOperation::_exportToPROJString(formatter); } void _exportToJSON(io::JSONFormatter *formatter) const override { Transformation::_exportToJSON(formatter); } bool _isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion = util::IComparable::Criterion::STRICT, const io::DatabaseContextPtr &dbContext = nullptr) const override { return InverseCoordinateOperation::_isEquivalentTo(other, criterion, dbContext); } CoordinateOperationNNPtr inverse() const override { return InverseCoordinateOperation::inverse(); } TransformationNNPtr inverseAsTransformation() const; #ifdef _MSC_VER // To avoid a warning C4250: // 'osgeo::proj::operation::InverseTransformation': inherits // 'osgeo::proj::operation::SingleOperation::osgeo::proj::operation::SingleOperation::gridsNeeded' // via dominance std::set gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const override { return SingleOperation::gridsNeeded(databaseContext, considerKnownGridsAsAvailable); } #endif static TransformationNNPtr create(const TransformationNNPtr &forward); CoordinateOperationNNPtr _shallowClone() const override; }; // --------------------------------------------------------------------------- class PROJBasedOperation; /** Shared pointer of PROJBasedOperation */ using PROJBasedOperationPtr = std::shared_ptr; /** Non-null shared pointer of PROJBasedOperation */ using PROJBasedOperationNNPtr = util::nn; /** \brief A PROJ-string based coordinate operation. */ class PROJBasedOperation : public SingleOperation { public: ~PROJBasedOperation() override; void _exportToWKT(io::WKTFormatter *formatter) const override; // throw(io::FormattingException) CoordinateOperationNNPtr inverse() const override; static PROJBasedOperationNNPtr create(const util::PropertyMap &properties, const std::string &PROJString, const crs::CRSPtr &sourceCRS, const crs::CRSPtr &targetCRS, const std::vector &accuracies); static PROJBasedOperationNNPtr create(const util::PropertyMap &properties, const io::IPROJStringExportableNNPtr &projExportable, bool inverse, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const crs::CRSPtr &interpolationCRS, const std::vector &accuracies, bool hasRoughTransformation); std::set gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const override; protected: PROJBasedOperation(const PROJBasedOperation &) = default; explicit PROJBasedOperation(const OperationMethodNNPtr &methodIn); void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) void _exportToJSON(io::JSONFormatter *formatter) const override; // throw(FormattingException) CoordinateOperationNNPtr _shallowClone() const override; INLINED_MAKE_SHARED private: std::string projString_{}; io::IPROJStringExportablePtr projStringExportable_{}; bool inverse_ = false; }; // --------------------------------------------------------------------------- class InvalidOperationEmptyIntersection : public InvalidOperation { public: explicit InvalidOperationEmptyIntersection(const std::string &message); InvalidOperationEmptyIntersection( const InvalidOperationEmptyIntersection &other); ~InvalidOperationEmptyIntersection() override; }; } // namespace operation NS_PROJ_END //! @endcond #endif // COORDINATEOPERATION_INTERNAL_HH_INCLUDED proj-9.6.0/src/iso19111/operation/coordinateoperation_private.hpp000664 001754 001755 00000007643 14764566077 024724 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef COORDINATEROPERATION_PRIVATE_HPP #define COORDINATEROPERATION_PRIVATE_HPP #include "proj/coordinateoperation.hpp" #include "proj/util.hpp" // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CoordinateOperation::Private { util::optional operationVersion_{}; std::vector coordinateOperationAccuracies_{}; std::weak_ptr sourceCRSWeak_{}; std::weak_ptr targetCRSWeak_{}; crs::CRSPtr interpolationCRS_{}; std::shared_ptr> sourceCoordinateEpoch_{ std::make_shared>()}; std::shared_ptr> targetCoordinateEpoch_{ std::make_shared>()}; bool hasBallparkTransformation_ = false; bool requiresPerCoordinateInputTime_ = false; // do not set this for a ProjectedCRS.definingConversion struct CRSStrongRef { crs::CRSNNPtr sourceCRS_; crs::CRSNNPtr targetCRS_; CRSStrongRef(const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn) : sourceCRS_(sourceCRSIn), targetCRS_(targetCRSIn) {} }; std::unique_ptr strongRef_{}; Private() = default; Private(const Private &other) : operationVersion_(other.operationVersion_), coordinateOperationAccuracies_(other.coordinateOperationAccuracies_), sourceCRSWeak_(other.sourceCRSWeak_), targetCRSWeak_(other.targetCRSWeak_), interpolationCRS_(other.interpolationCRS_), sourceCoordinateEpoch_(other.sourceCoordinateEpoch_), targetCoordinateEpoch_(other.targetCoordinateEpoch_), hasBallparkTransformation_(other.hasBallparkTransformation_), requiresPerCoordinateInputTime_( other.requiresPerCoordinateInputTime_), strongRef_(other.strongRef_ ? std::make_unique(*(other.strongRef_)) : nullptr) {} Private &operator=(const Private &) = delete; }; //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END #endif // COORDINATEROPERATION_PRIVATE_HPP proj-9.6.0/src/iso19111/operation/coordinateoperationfactory.cpp000664 001754 001755 00001213552 14764566077 024554 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinates.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/datum_internal.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj/internal/tracing.hpp" #include "coordinateoperation_internal.hpp" #include "coordinateoperation_private.hpp" #include "oputils.hpp" #include "vectorofvaluesparams.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // M_PI // clang-format on #include "proj_constants.h" #include #include #include #include #include #include #include #include // #define TRACE_CREATE_OPERATIONS // #define DEBUG_SORT // #define DEBUG_CONCATENATED_OPERATION #if defined(DEBUG_SORT) || defined(DEBUG_CONCATENATED_OPERATION) #include void dumpWKT(const NS_PROJ::crs::CRS *crs); void dumpWKT(const NS_PROJ::crs::CRS *crs) { auto f(NS_PROJ::io::WKTFormatter::create( NS_PROJ::io::WKTFormatter::Convention::WKT2_2019)); std::cerr << crs->exportToWKT(f.get()) << std::endl; } void dumpWKT(const NS_PROJ::crs::CRSPtr &crs); void dumpWKT(const NS_PROJ::crs::CRSPtr &crs) { dumpWKT(crs.get()); } void dumpWKT(const NS_PROJ::crs::CRSNNPtr &crs); void dumpWKT(const NS_PROJ::crs::CRSNNPtr &crs) { dumpWKT(crs.as_nullable().get()); } void dumpWKT(const NS_PROJ::crs::GeographicCRSPtr &crs); void dumpWKT(const NS_PROJ::crs::GeographicCRSPtr &crs) { dumpWKT(crs.get()); } void dumpWKT(const NS_PROJ::crs::GeographicCRSNNPtr &crs); void dumpWKT(const NS_PROJ::crs::GeographicCRSNNPtr &crs) { dumpWKT(crs.as_nullable().get()); } #endif using namespace NS_PROJ::internal; // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- #ifdef TRACE_CREATE_OPERATIONS //! @cond Doxygen_Suppress static std::string objectAsStr(const common::IdentifiedObject *obj) { std::string ret(obj->nameStr()); const auto &ids = obj->identifiers(); if (const auto *geogCRS = dynamic_cast(obj)) { if (geogCRS->coordinateSystem()->axisList().size() == 3U) ret += " (geographic3D)"; else ret += " (geographic2D)"; } if (const auto *geodCRS = dynamic_cast(obj)) { if (geodCRS->isGeocentric()) { ret += " (geocentric)"; } } if (!ids.empty()) { ret += " ("; ret += (*ids[0]->codeSpace()) + ":" + ids[0]->code(); ret += ")"; } return ret; } //! @endcond #endif // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static double getPseudoArea(const metadata::ExtentPtr &extent) { if (!extent) return 0.0; const auto &geographicElements = extent->geographicElements(); if (geographicElements.empty()) return 0.0; auto bbox = dynamic_cast( geographicElements[0].get()); if (!bbox) return 0; double w = bbox->westBoundLongitude(); double s = bbox->southBoundLatitude(); double e = bbox->eastBoundLongitude(); double n = bbox->northBoundLatitude(); if (w > e) { e += 360.0; } // Integrate cos(lat) between south_lat and north_lat return (e - w) * (std::sin(common::Angle(n).getSIValue()) - std::sin(common::Angle(s).getSIValue())); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CoordinateOperationContext::Private { io::AuthorityFactoryPtr authorityFactory_{}; metadata::ExtentPtr extent_{}; double accuracy_ = 0.0; SourceTargetCRSExtentUse sourceAndTargetCRSExtentUse_ = CoordinateOperationContext::SourceTargetCRSExtentUse::SMALLEST; SpatialCriterion spatialCriterion_ = CoordinateOperationContext::SpatialCriterion::STRICT_CONTAINMENT; bool usePROJNames_ = true; GridAvailabilityUse gridAvailabilityUse_ = GridAvailabilityUse::USE_FOR_SORTING; IntermediateCRSUse allowUseIntermediateCRS_ = CoordinateOperationContext:: IntermediateCRSUse::IF_NO_DIRECT_TRANSFORMATION; std::vector> intermediateCRSAuthCodes_{}; bool discardSuperseded_ = true; bool allowBallpark_ = true; std::shared_ptr> sourceCoordinateEpoch_{ std::make_shared>()}; std::shared_ptr> targetCoordinateEpoch_{ std::make_shared>()}; Private() = default; Private(const Private &) = default; }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateOperationContext::~CoordinateOperationContext() = default; //! @endcond // --------------------------------------------------------------------------- CoordinateOperationContext::CoordinateOperationContext() : d(std::make_unique()) {} // --------------------------------------------------------------------------- CoordinateOperationContext::CoordinateOperationContext( const CoordinateOperationContext &other) : d(std::make_unique(*(other.d))) {} // --------------------------------------------------------------------------- /** \brief Return the authority factory, or null */ const io::AuthorityFactoryPtr & CoordinateOperationContext::getAuthorityFactory() const { return d->authorityFactory_; } // --------------------------------------------------------------------------- /** \brief Return the desired area of interest, or null */ const metadata::ExtentPtr & CoordinateOperationContext::getAreaOfInterest() const { return d->extent_; } // --------------------------------------------------------------------------- /** \brief Set the desired area of interest, or null */ void CoordinateOperationContext::setAreaOfInterest( const metadata::ExtentPtr &extent) { d->extent_ = extent; } // --------------------------------------------------------------------------- /** \brief Return the desired accuracy (in metre), or 0 */ double CoordinateOperationContext::getDesiredAccuracy() const { return d->accuracy_; } // --------------------------------------------------------------------------- /** \brief Set the desired accuracy (in metre), or 0 */ void CoordinateOperationContext::setDesiredAccuracy(double accuracy) { d->accuracy_ = accuracy; } // --------------------------------------------------------------------------- /** \brief Return whether ballpark transformations are allowed */ bool CoordinateOperationContext::getAllowBallparkTransformations() const { return d->allowBallpark_; } // --------------------------------------------------------------------------- /** \brief Set whether ballpark transformations are allowed */ void CoordinateOperationContext::setAllowBallparkTransformations(bool allow) { d->allowBallpark_ = allow; } // --------------------------------------------------------------------------- /** \brief Set how source and target CRS extent should be used * when considering if a transformation can be used (only takes effect if * no area of interest is explicitly defined). * * The default is * CoordinateOperationContext::SourceTargetCRSExtentUse::SMALLEST. */ void CoordinateOperationContext::setSourceAndTargetCRSExtentUse( SourceTargetCRSExtentUse use) { d->sourceAndTargetCRSExtentUse_ = use; } // --------------------------------------------------------------------------- /** \brief Return how source and target CRS extent should be used * when considering if a transformation can be used (only takes effect if * no area of interest is explicitly defined). * * The default is * CoordinateOperationContext::SourceTargetCRSExtentUse::SMALLEST. */ CoordinateOperationContext::SourceTargetCRSExtentUse CoordinateOperationContext::getSourceAndTargetCRSExtentUse() const { return d->sourceAndTargetCRSExtentUse_; } // --------------------------------------------------------------------------- /** \brief Set the spatial criterion to use when comparing the area of * validity * of coordinate operations with the area of interest / area of validity of * source and target CRS. * * The default is STRICT_CONTAINMENT. */ void CoordinateOperationContext::setSpatialCriterion( SpatialCriterion criterion) { d->spatialCriterion_ = criterion; } // --------------------------------------------------------------------------- /** \brief Return the spatial criterion to use when comparing the area of * validity * of coordinate operations with the area of interest / area of validity of * source and target CRS. * * The default is STRICT_CONTAINMENT. */ CoordinateOperationContext::SpatialCriterion CoordinateOperationContext::getSpatialCriterion() const { return d->spatialCriterion_; } // --------------------------------------------------------------------------- /** \brief Set whether PROJ alternative grid names should be substituted to * the official authority names. * * This only has effect is an authority factory with a non-null database context * has been attached to this context. * * If set to false, it is still possible to * obtain later the substitution by using io::PROJStringFormatter::create() * with a non-null database context. * * The default is true. */ void CoordinateOperationContext::setUsePROJAlternativeGridNames( bool usePROJNames) { d->usePROJNames_ = usePROJNames; } // --------------------------------------------------------------------------- /** \brief Return whether PROJ alternative grid names should be substituted to * the official authority names. * * The default is true. */ bool CoordinateOperationContext::getUsePROJAlternativeGridNames() const { return d->usePROJNames_; } // --------------------------------------------------------------------------- /** \brief Return whether transformations that are superseded (but not * deprecated) * should be discarded. * * The default is true. */ bool CoordinateOperationContext::getDiscardSuperseded() const { return d->discardSuperseded_; } // --------------------------------------------------------------------------- /** \brief Set whether transformations that are superseded (but not deprecated) * should be discarded. * * The default is true. */ void CoordinateOperationContext::setDiscardSuperseded(bool discard) { d->discardSuperseded_ = discard; } // --------------------------------------------------------------------------- /** \brief Set how grid availability is used. * * The default is USE_FOR_SORTING. */ void CoordinateOperationContext::setGridAvailabilityUse( GridAvailabilityUse use) { d->gridAvailabilityUse_ = use; } // --------------------------------------------------------------------------- /** \brief Return how grid availability is used. * * The default is USE_FOR_SORTING. */ CoordinateOperationContext::GridAvailabilityUse CoordinateOperationContext::getGridAvailabilityUse() const { return d->gridAvailabilityUse_; } // --------------------------------------------------------------------------- /** \brief Set whether an intermediate pivot CRS can be used for researching * coordinate operations between a source and target CRS. * * Concretely if in the database there is an operation from A to C * (or C to A), and another one from C to B (or B to C), but no direct * operation between A and B, setting this parameter to * ALWAYS/IF_NO_DIRECT_TRANSFORMATION, allow chaining both operations. * * The current implementation is limited to researching one intermediate * step. * * By default, with the IF_NO_DIRECT_TRANSFORMATION strategy, all potential * C candidates will be used if there is no direct transformation. */ void CoordinateOperationContext::setAllowUseIntermediateCRS( IntermediateCRSUse use) { d->allowUseIntermediateCRS_ = use; } // --------------------------------------------------------------------------- /** \brief Return whether an intermediate pivot CRS can be used for researching * coordinate operations between a source and target CRS. * * Concretely if in the database there is an operation from A to C * (or C to A), and another one from C to B (or B to C), but no direct * operation between A and B, setting this parameter to * ALWAYS/IF_NO_DIRECT_TRANSFORMATION, allow chaining both operations. * * The default is IF_NO_DIRECT_TRANSFORMATION. */ CoordinateOperationContext::IntermediateCRSUse CoordinateOperationContext::getAllowUseIntermediateCRS() const { return d->allowUseIntermediateCRS_; } // --------------------------------------------------------------------------- /** \brief Restrict the potential pivot CRSs that can be used when trying to * build a coordinate operation between two CRS that have no direct operation. * * @param intermediateCRSAuthCodes a vector of (auth_name, code) that can be * used as potential pivot RS */ void CoordinateOperationContext::setIntermediateCRS( const std::vector> &intermediateCRSAuthCodes) { d->intermediateCRSAuthCodes_ = intermediateCRSAuthCodes; } // --------------------------------------------------------------------------- /** \brief Return the potential pivot CRSs that can be used when trying to * build a coordinate operation between two CRS that have no direct operation. * */ const std::vector> & CoordinateOperationContext::getIntermediateCRS() const { return d->intermediateCRSAuthCodes_; } // --------------------------------------------------------------------------- /** \brief Set the source coordinate epoch. */ void CoordinateOperationContext::setSourceCoordinateEpoch( const util::optional &epoch) { d->sourceCoordinateEpoch_ = std::make_shared>(epoch); } // --------------------------------------------------------------------------- /** \brief Return the source coordinate epoch. */ const util::optional & CoordinateOperationContext::getSourceCoordinateEpoch() const { return *(d->sourceCoordinateEpoch_); } // --------------------------------------------------------------------------- /** \brief Set the target coordinate epoch. */ void CoordinateOperationContext::setTargetCoordinateEpoch( const util::optional &epoch) { d->targetCoordinateEpoch_ = std::make_shared>(epoch); } // --------------------------------------------------------------------------- /** \brief Return the target coordinate epoch. */ const util::optional & CoordinateOperationContext::getTargetCoordinateEpoch() const { return *(d->targetCoordinateEpoch_); } // --------------------------------------------------------------------------- /** \brief Creates a context for a coordinate operation. * * If a non null authorityFactory is provided, the resulting context should * not be used simultaneously by more than one thread. * * If authorityFactory->getAuthority() is the empty string, then coordinate * operations from any authority will be searched, with the restrictions set * in the authority_to_authority_preference database table. * If authorityFactory->getAuthority() is set to "any", then coordinate * operations from any authority will be searched * If authorityFactory->getAuthority() is a non-empty string different of "any", * then coordinate operations will be searched only in that authority namespace. * * @param authorityFactory Authority factory, or null if no database lookup * is allowed. * Use io::authorityFactory::create(context, std::string()) to allow all * authorities to be used. * @param extent Area of interest, or null if none is known. * @param accuracy Maximum allowed accuracy in metre, as specified in or * 0 to get best accuracy. * @return a new context. */ CoordinateOperationContextNNPtr CoordinateOperationContext::create( const io::AuthorityFactoryPtr &authorityFactory, const metadata::ExtentPtr &extent, double accuracy) { auto ctxt = NN_NO_CHECK( CoordinateOperationContext::make_unique()); ctxt->d->authorityFactory_ = authorityFactory; ctxt->d->extent_ = extent; ctxt->d->accuracy_ = accuracy; return ctxt; } // --------------------------------------------------------------------------- /** \brief Clone a coordinate operation context. * * @return a new context. * @since 9.2 */ CoordinateOperationContextNNPtr CoordinateOperationContext::clone() const { return NN_NO_CHECK( CoordinateOperationContext::make_unique( *this)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CoordinateOperationFactory::Private { struct Context { // This is the extent of the source CRS and target CRS of the initial // CoordinateOperationFactory::createOperations() public call, not // necessarily the ones of intermediate // CoordinateOperationFactory::Private::createOperations() calls. // This is used to compare transformations area of use against the // area of use of the source & target CRS. const metadata::ExtentPtr &extent1; const metadata::ExtentPtr &extent2; const CoordinateOperationContextNNPtr &context; bool inCreateOperationsWithDatumPivotAntiRecursion = false; bool inCreateOperationsGeogToVertWithAlternativeGeog = false; bool inCreateOperationsGeogToVertWithIntermediateVert = false; bool skipHorizontalTransformation = false; int nRecLevelCreateOperations = 0; std::map, std::list>> cacheNameToCRS{}; // Normally there should be at most one element in this stack // This is set when computing a CompoundCRS to GeogCRS operation to // relate the VerticalCRS of the CompoundCRS to the geographicCRS of // the horizontal component of the CompoundCRS. This is especially // used if the VerticalCRS is a DerivedVerticalCRS using a // (non-standard) "Ellipsoid" vertical datum std::vector geogCRSOfVertCRSStack{}; Context(const metadata::ExtentPtr &extent1In, const metadata::ExtentPtr &extent2In, const CoordinateOperationContextNNPtr &contextIn) : extent1(extent1In), extent2(extent2In), context(contextIn) {} }; static std::vector createOperations(const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Context &context); private: static constexpr bool disallowEmptyIntersection = true; static void buildCRSIds(const crs::CRSNNPtr &crs, Private::Context &context, std::list> &ids); static std::vector findOpsInRegistryDirect( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, bool &resNonEmptyBeforeFiltering); static std::vector findOpsInRegistryDirectTo(const crs::CRSNNPtr &targetCRS, Private::Context &context); static std::vector findsOpsInRegistryWithIntermediate( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, bool useCreateBetweenGeodeticCRSWithDatumBasedIntermediates); static void createOperationsFromProj4Ext( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const crs::BoundCRS *boundSrc, const crs::BoundCRS *boundDst, std::vector &res); static bool createOperationsFromDatabase( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst, const crs::GeographicCRS *geogSrc, const crs::GeographicCRS *geogDst, const crs::VerticalCRS *vertSrc, const crs::VerticalCRS *vertDst, std::vector &res); static std::vector createOperationsGeogToVertFromGeoid(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const crs::VerticalCRS *vertDst, Context &context); static std::vector createOperationsGeogToVertWithIntermediateVert( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, const crs::VerticalCRS *vertDst, Context &context); static std::vector createOperationsGeogToVertWithAlternativeGeog( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Context &context); static void createOperationsFromDatabaseWithVertCRS( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeographicCRS *geogSrc, const crs::GeographicCRS *geogDst, const crs::VerticalCRS *vertSrc, const crs::VerticalCRS *vertDst, std::vector &res); static void createOperationsGeodToGeod( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst, std::vector &res, bool forceBallpark); static void createOperationsFromSphericalPlanetocentric( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeodeticCRS *geodSrc, std::vector &res); static void createOperationsFromBoundOfSphericalPlanetocentric( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::GeodeticCRSNNPtr &geodSrcBase, std::vector &res); static void createOperationsDerivedTo( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::DerivedCRS *derivedSrc, std::vector &res); static void createOperationsBoundToGeog( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::GeographicCRS *geogDst, std::vector &res); static void createOperationsBoundToVert( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::VerticalCRS *vertDst, std::vector &res); static void createOperationsVertToVert( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::VerticalCRS *vertSrc, const crs::VerticalCRS *vertDst, std::vector &res); static void createOperationsVertToGeog( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::VerticalCRS *vertSrc, const crs::GeographicCRS *geogDst, std::vector &res); static void createOperationsVertToGeogSynthetized( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::VerticalCRS *vertSrc, const crs::GeographicCRS *geogDst, std::vector &res); static void createOperationsBoundToBound( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::BoundCRS *boundDst, std::vector &res); static void createOperationsCompoundToGeog( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::CompoundCRS *compoundSrc, const crs::GeographicCRS *geogDst, std::vector &res); static void createOperationsToGeod(const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeodeticCRS *geodDst, std::vector &res); static void createOperationsCompoundToCompound( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::CompoundCRS *compoundSrc, const crs::CompoundCRS *compoundDst, std::vector &res); static void createOperationsBoundToCompound( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::CompoundCRS *compoundDst, std::vector &res); static std::vector createOperationsGeogToGeog( std::vector &res, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::GeographicCRS *geogSrc, const crs::GeographicCRS *geogDst, bool forceBallpark); static void createOperationsWithDatumPivot( std::vector &res, const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst, Context &context); static bool hasPerfectAccuracyResult(const std::vector &res, const Context &context); static void setCRSs(CoordinateOperation *co, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS); }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateOperationFactory::~CoordinateOperationFactory() = default; //! @endcond // --------------------------------------------------------------------------- CoordinateOperationFactory::CoordinateOperationFactory() : d(nullptr) {} // --------------------------------------------------------------------------- /** \brief Find a CoordinateOperation from sourceCRS to targetCRS. * * This is a helper of createOperations(), using a coordinate operation * context * with no authority factory (so no catalog searching is done), no desired * accuracy and no area of interest. * This returns the first operation of the result set of createOperations(), * or null if none found. * * @param sourceCRS source CRS. * @param targetCRS source CRS. * @return a CoordinateOperation or nullptr. */ CoordinateOperationPtr CoordinateOperationFactory::createOperation( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) const { auto res = createOperations( sourceCRS, targetCRS, CoordinateOperationContext::create(nullptr, nullptr, 0.0)); if (!res.empty()) { return res[0]; } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- struct PrecomputedOpCharacteristics { double area_{}; double accuracy_{}; bool isPROJExportable_ = false; bool hasGrids_ = false; bool gridsAvailable_ = false; bool gridsKnown_ = false; size_t stepCount_ = 0; size_t projStepCount_ = 0; bool isApprox_ = false; bool hasBallparkVertical_ = false; bool isNullTransformation_ = false; PrecomputedOpCharacteristics() = default; PrecomputedOpCharacteristics(double area, double accuracy, bool isPROJExportable, bool hasGrids, bool gridsAvailable, bool gridsKnown, size_t stepCount, size_t projStepCount, bool isApprox, bool hasBallparkVertical, bool isNullTransformation) : area_(area), accuracy_(accuracy), isPROJExportable_(isPROJExportable), hasGrids_(hasGrids), gridsAvailable_(gridsAvailable), gridsKnown_(gridsKnown), stepCount_(stepCount), projStepCount_(projStepCount), isApprox_(isApprox), hasBallparkVertical_(hasBallparkVertical), isNullTransformation_(isNullTransformation) {} }; // --------------------------------------------------------------------------- // We could have used a lambda instead of this old-school way, but // filterAndSort() is already huge. struct SortFunction { explicit SortFunction(const std::map &mapIn) : map(mapIn), BALLPARK_GEOGRAPHIC_OFFSET_FROM( std::string(BALLPARK_GEOGRAPHIC_OFFSET) + " from ") {} // Sorting function // Return true if a < b bool compare(const CoordinateOperationNNPtr &a, const CoordinateOperationNNPtr &b) const { auto iterA = map.find(a.get()); assert(iterA != map.end()); auto iterB = map.find(b.get()); assert(iterB != map.end()); // CAUTION: the order of the comparisons is extremely important // to get the intended result. if (iterA->second.isPROJExportable_ && !iterB->second.isPROJExportable_) { return true; } if (!iterA->second.isPROJExportable_ && iterB->second.isPROJExportable_) { return false; } if (!iterA->second.isApprox_ && iterB->second.isApprox_) { return true; } if (iterA->second.isApprox_ && !iterB->second.isApprox_) { return false; } if (!iterA->second.hasBallparkVertical_ && iterB->second.hasBallparkVertical_) { return true; } if (iterA->second.hasBallparkVertical_ && !iterB->second.hasBallparkVertical_) { return false; } if (!iterA->second.isNullTransformation_ && iterB->second.isNullTransformation_) { return true; } if (iterA->second.isNullTransformation_ && !iterB->second.isNullTransformation_) { return false; } // Operations where grids are all available go before other if (iterA->second.gridsAvailable_ && !iterB->second.gridsAvailable_) { return true; } if (iterB->second.gridsAvailable_ && !iterA->second.gridsAvailable_) { return false; } // Operations where grids are all known in our DB go before other if (iterA->second.gridsKnown_ && !iterB->second.gridsKnown_) { return true; } if (iterB->second.gridsKnown_ && !iterA->second.gridsKnown_) { return false; } // Operations with known accuracy go before those with unknown accuracy const double accuracyA = iterA->second.accuracy_; const double accuracyB = iterB->second.accuracy_; if (accuracyA >= 0 && accuracyB < 0) { return true; } if (accuracyB >= 0 && accuracyA < 0) { return false; } if (accuracyA < 0 && accuracyB < 0) { // unknown accuracy ? then prefer operations with grids, which // are likely to have best practical accuracy if (iterA->second.hasGrids_ && !iterB->second.hasGrids_) { return true; } if (!iterA->second.hasGrids_ && iterB->second.hasGrids_) { return false; } } // Operations with larger non-zero area of use go before those with // lower one const double areaA = iterA->second.area_; const double areaB = iterB->second.area_; if (areaA > 0) { if (areaA > areaB) { return true; } if (areaA < areaB) { return false; } } else if (areaB > 0) { return false; } // Operations with better accuracy go before those with worse one if (accuracyA >= 0 && accuracyA < accuracyB) { return true; } if (accuracyB >= 0 && accuracyB < accuracyA) { return false; } if (accuracyA >= 0 && accuracyA == accuracyB) { // same accuracy ? then prefer operations without grids if (!iterA->second.hasGrids_ && iterB->second.hasGrids_) { return true; } if (iterA->second.hasGrids_ && !iterB->second.hasGrids_) { return false; } } // The less intermediate steps, the better if (iterA->second.stepCount_ < iterB->second.stepCount_) { return true; } if (iterB->second.stepCount_ < iterA->second.stepCount_) { return false; } // Compare number of steps in PROJ pipeline, and prefer the ones // with less operations. if (iterA->second.projStepCount_ != 0 && iterB->second.projStepCount_ != 0) { if (iterA->second.projStepCount_ < iterB->second.projStepCount_) { return true; } if (iterB->second.projStepCount_ < iterA->second.projStepCount_) { return false; } } const auto &a_name = a->nameStr(); const auto &b_name = b->nameStr(); // Make sure that // "Ballpark geographic offset from NAD83(CSRS)v6 to NAD83(CSRS)" // has more priority than // "Ballpark geographic offset from ITRF2008 to NAD83(CSRS)" const auto posA = a_name.find(BALLPARK_GEOGRAPHIC_OFFSET_FROM); const auto posB = b_name.find(BALLPARK_GEOGRAPHIC_OFFSET_FROM); if (posA != std::string::npos && posB != std::string::npos) { const auto pos2A = a_name.find(" to ", posA); const auto pos2B = b_name.find(" to ", posB); if (pos2A != std::string::npos && pos2B != std::string::npos) { const auto pos3A = a_name.find(" + ", pos2A); const auto pos3B = b_name.find(" + ", pos2B); const std::string fromA = a_name.substr( posA + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size(), pos2A - (posA + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size())); const std::string toA = a_name.substr(pos2A + strlen(" to "), pos3A == std::string::npos ? pos3A : pos3A - (pos2A + strlen(" to "))); const std::string fromB = b_name.substr( posB + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size(), pos2B - (posB + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size())); const std::string toB = b_name.substr(pos2B + strlen(" to "), pos3B == std::string::npos ? pos3B : pos3B - (pos2B + strlen(" to "))); const bool similarCRSInA = (fromA.find(toA) == 0 || toA.find(fromA) == 0); const bool similarCRSInB = (fromB.find(toB) == 0 || toB.find(fromB) == 0); if (similarCRSInA && !similarCRSInB) { return true; } if (!similarCRSInA && similarCRSInB) { return false; } } } // The shorter name, the better ? if (a_name.size() < b_name.size()) { return true; } if (b_name.size() < a_name.size()) { return false; } // Arbitrary final criterion. We actually return the greater element // first, so that "Amersfoort to WGS 84 (4)" is presented before // "Amersfoort to WGS 84 (3)", which is probably a better guess. // Except for French NTF (Paris) to NTF, where the (1) conversion // should be preferred because in the remarks of (2), it is mentioned // OGP prefers value from IGN Paris (code 1467)... if (a_name.find("NTF (Paris) to NTF (1)") != std::string::npos && b_name.find("NTF (Paris) to NTF (2)") != std::string::npos) { return true; } if (a_name.find("NTF (Paris) to NTF (2)") != std::string::npos && b_name.find("NTF (Paris) to NTF (1)") != std::string::npos) { return false; } if (a_name.find("NTF (Paris) to RGF93 v1 (1)") != std::string::npos && b_name.find("NTF (Paris) to RGF93 v1 (2)") != std::string::npos) { return true; } if (a_name.find("NTF (Paris) to RGF93 v1 (2)") != std::string::npos && b_name.find("NTF (Paris) to RGF93 v1 (1)") != std::string::npos) { return false; } return a_name > b_name; } bool operator()(const CoordinateOperationNNPtr &a, const CoordinateOperationNNPtr &b) const { const bool ret = compare(a, b); #if 0 std::cerr << a->nameStr() << " < " << b->nameStr() << " : " << ret << std::endl; #endif return ret; } SortFunction(const SortFunction &) = default; SortFunction &operator=(const SortFunction &) = delete; SortFunction(SortFunction &&) = default; SortFunction &operator=(SortFunction &&) = delete; private: const std::map ↦ const std::string BALLPARK_GEOGRAPHIC_OFFSET_FROM; }; // --------------------------------------------------------------------------- static size_t getStepCount(const CoordinateOperationNNPtr &op) { auto concat = dynamic_cast(op.get()); size_t stepCount = 1; if (concat) { stepCount = concat->operations().size(); } return stepCount; } // --------------------------------------------------------------------------- // Return number of steps that are transformations (and not conversions) static size_t getTransformationStepCount(const CoordinateOperationNNPtr &op) { auto concat = dynamic_cast(op.get()); size_t stepCount = 1; if (concat) { stepCount = 0; for (const auto &subOp : concat->operations()) { if (dynamic_cast(subOp.get()) == nullptr) { stepCount++; } } } return stepCount; } // --------------------------------------------------------------------------- static bool isNullTransformation(const std::string &name) { if (name.find(" + ") != std::string::npos) return false; return starts_with(name, BALLPARK_GEOCENTRIC_TRANSLATION) || starts_with(name, BALLPARK_GEOGRAPHIC_OFFSET) || starts_with(name, NULL_GEOGRAPHIC_OFFSET) || starts_with(name, NULL_GEOCENTRIC_TRANSLATION); } // --------------------------------------------------------------------------- struct FilterResults { FilterResults(const std::vector &sourceListIn, const CoordinateOperationContextNNPtr &contextIn, const metadata::ExtentPtr &extent1In, const metadata::ExtentPtr &extent2In, bool forceStrictContainmentTest) : sourceList(sourceListIn), context(contextIn), extent1(extent1In), extent2(extent2In), areaOfInterest(context->getAreaOfInterest()), areaOfInterestUserSpecified(areaOfInterest != nullptr), desiredAccuracy(context->getDesiredAccuracy()), sourceAndTargetCRSExtentUse( context->getSourceAndTargetCRSExtentUse()) { computeAreaOfInterest(); filterOut(forceStrictContainmentTest); } FilterResults &andSort() { sort(); // And now that we have a sorted list, we can remove uninteresting // results // ... removeSyntheticNullTransforms(); removeUninterestingOps(); removeDuplicateOps(); removeSyntheticNullTransforms(); return *this; } // ---------------------------------------------------------------------- // cppcheck-suppress functionStatic const std::vector &getRes() { return res; } // ---------------------------------------------------------------------- private: const std::vector &sourceList; const CoordinateOperationContextNNPtr &context; const metadata::ExtentPtr &extent1; const metadata::ExtentPtr &extent2; metadata::ExtentPtr areaOfInterest; const bool areaOfInterestUserSpecified; const double desiredAccuracy = context->getDesiredAccuracy(); const CoordinateOperationContext::SourceTargetCRSExtentUse sourceAndTargetCRSExtentUse; bool hasOpThatContainsAreaOfInterestAndNoGrid = false; std::vector res{}; // ---------------------------------------------------------------------- void computeAreaOfInterest() { // Compute an area of interest from the CRS extent if the user did // not specify one if (!areaOfInterest) { if (sourceAndTargetCRSExtentUse == CoordinateOperationContext::SourceTargetCRSExtentUse:: INTERSECTION) { if (extent1 && extent2) { areaOfInterest = extent1->intersection(NN_NO_CHECK(extent2)); } } else if (sourceAndTargetCRSExtentUse == CoordinateOperationContext::SourceTargetCRSExtentUse:: SMALLEST) { if (extent1 && extent2) { if (getPseudoArea(extent1) < getPseudoArea(extent2)) { areaOfInterest = extent1; } else { areaOfInterest = extent2; } } else if (extent1) { areaOfInterest = extent1; } else { areaOfInterest = extent2; } } } } // --------------------------------------------------------------------------- void filterOut(bool forceStrictContainmentTest) { // Filter out operations that do not match the expected accuracy // and area of use. const auto spatialCriterion = forceStrictContainmentTest ? CoordinateOperationContext::SpatialCriterion:: STRICT_CONTAINMENT : context->getSpatialCriterion(); bool hasOnlyBallpark = true; bool hasNonBallparkWithoutExtent = false; bool hasNonBallparkOpWithExtent = false; const bool allowBallpark = context->getAllowBallparkTransformations(); bool foundExtentWithExpectedDescription = false; if (areaOfInterestUserSpecified && areaOfInterest && areaOfInterest->description().has_value()) { for (const auto &op : sourceList) { bool emptyIntersection = false; auto extent = getExtent(op, true, emptyIntersection); if (extent && extent->description().has_value()) { if (*(areaOfInterest->description()) == *(extent->description())) { foundExtentWithExpectedDescription = true; break; } } } } for (const auto &op : sourceList) { if (desiredAccuracy != 0) { const double accuracy = getAccuracy(op); if (accuracy < 0 || accuracy > desiredAccuracy) { continue; } } if (!allowBallpark && op->hasBallparkTransformation()) { continue; } if (areaOfInterest) { bool emptyIntersection = false; auto extent = getExtent(op, true, emptyIntersection); if (!extent) { if (!op->hasBallparkTransformation()) { hasNonBallparkWithoutExtent = true; } continue; } if (foundExtentWithExpectedDescription && (!extent->description().has_value() || *(areaOfInterest->description()) != *(extent->description()))) { continue; } if (!op->hasBallparkTransformation()) { hasNonBallparkOpWithExtent = true; } bool extentContains = extent->contains(NN_NO_CHECK(areaOfInterest)); if (!hasOpThatContainsAreaOfInterestAndNoGrid && extentContains) { if (!op->hasBallparkTransformation() && op->gridsNeeded(nullptr, true).empty()) { hasOpThatContainsAreaOfInterestAndNoGrid = true; } } if (spatialCriterion == CoordinateOperationContext::SpatialCriterion:: STRICT_CONTAINMENT && !extentContains) { continue; } if (spatialCriterion == CoordinateOperationContext::SpatialCriterion:: PARTIAL_INTERSECTION && !extent->intersects(NN_NO_CHECK(areaOfInterest))) { continue; } } else if (sourceAndTargetCRSExtentUse == CoordinateOperationContext::SourceTargetCRSExtentUse:: BOTH) { bool emptyIntersection = false; auto extent = getExtent(op, true, emptyIntersection); if (!extent) { if (!op->hasBallparkTransformation()) { hasNonBallparkWithoutExtent = true; } continue; } if (!op->hasBallparkTransformation()) { hasNonBallparkOpWithExtent = true; } bool extentContainsExtent1 = !extent1 || extent->contains(NN_NO_CHECK(extent1)); bool extentContainsExtent2 = !extent2 || extent->contains(NN_NO_CHECK(extent2)); if (!hasOpThatContainsAreaOfInterestAndNoGrid && extentContainsExtent1 && extentContainsExtent2) { if (!op->hasBallparkTransformation() && op->gridsNeeded(nullptr, true).empty()) { hasOpThatContainsAreaOfInterestAndNoGrid = true; } } if (spatialCriterion == CoordinateOperationContext::SpatialCriterion:: STRICT_CONTAINMENT) { if (!extentContainsExtent1 || !extentContainsExtent2) { continue; } } else if (spatialCriterion == CoordinateOperationContext::SpatialCriterion:: PARTIAL_INTERSECTION) { bool extentIntersectsExtent1 = !extent1 || extent->intersects(NN_NO_CHECK(extent1)); bool extentIntersectsExtent2 = extent2 && extent->intersects(NN_NO_CHECK(extent2)); if (!extentIntersectsExtent1 || !extentIntersectsExtent2) { continue; } } } if (!op->hasBallparkTransformation()) { hasOnlyBallpark = false; } res.emplace_back(op); } // In case no operation has an extent and no result is found, // retain all initial operations that match accuracy criterion. if ((res.empty() && !hasNonBallparkOpWithExtent) || (hasOnlyBallpark && hasNonBallparkWithoutExtent)) { for (const auto &op : sourceList) { if (desiredAccuracy != 0) { const double accuracy = getAccuracy(op); if (accuracy < 0 || accuracy > desiredAccuracy) { continue; } } if (!allowBallpark && op->hasBallparkTransformation()) { continue; } res.emplace_back(op); } } } // ---------------------------------------------------------------------- void sort() { // Precompute a number of parameters for each operation that will be // useful for the sorting. std::map map; const auto gridAvailabilityUse = context->getGridAvailabilityUse(); for (const auto &op : res) { bool dummy = false; auto extentOp = getExtent(op, true, dummy); double area = 0.0; if (extentOp) { if (areaOfInterest) { area = getPseudoArea( extentOp->intersection(NN_NO_CHECK(areaOfInterest))); } else if (extent1 && extent2) { auto x = extentOp->intersection(NN_NO_CHECK(extent1)); auto y = extentOp->intersection(NN_NO_CHECK(extent2)); area = getPseudoArea(x) + getPseudoArea(y) - ((x && y) ? getPseudoArea(x->intersection(NN_NO_CHECK(y))) : 0.0); } else if (extent1) { area = getPseudoArea( extentOp->intersection(NN_NO_CHECK(extent1))); } else if (extent2) { area = getPseudoArea( extentOp->intersection(NN_NO_CHECK(extent2))); } else { area = getPseudoArea(extentOp); } } bool hasGrids = false; bool gridsAvailable = true; bool gridsKnown = true; if (context->getAuthorityFactory()) { const auto gridsNeeded = op->gridsNeeded( context->getAuthorityFactory()->databaseContext(), gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: KNOWN_AVAILABLE); for (const auto &gridDesc : gridsNeeded) { hasGrids = true; if (gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: USE_FOR_SORTING && !gridDesc.available) { gridsAvailable = false; } if (gridDesc.packageName.empty() && !(!gridDesc.url.empty() && gridDesc.openLicense) && !gridDesc.available) { gridsKnown = false; } } } const auto stepCount = getStepCount(op); bool isPROJExportable = false; auto formatter = io::PROJStringFormatter::create(); size_t projStepCount = 0; try { const auto str = op->exportToPROJString(formatter.get()); // Grids might be missing, but at least this is something // PROJ could potentially process isPROJExportable = true; // We exclude pipelines with +proj=xyzgridshift as they // generate more steps, but are more precise. if (str.find("+proj=xyzgridshift") == std::string::npos) { auto formatter2 = io::PROJStringFormatter::create(); formatter2->ingestPROJString(str); projStepCount = formatter2->getStepCount(); } } catch (const std::exception &) { } #if 0 std::cerr << "name=" << op->nameStr() << " "; std::cerr << "area=" << area << " "; std::cerr << "accuracy=" << getAccuracy(op) << " "; std::cerr << "isPROJExportable=" << isPROJExportable << " "; std::cerr << "hasGrids=" << hasGrids << " "; std::cerr << "gridsAvailable=" << gridsAvailable << " "; std::cerr << "gridsKnown=" << gridsKnown << " "; std::cerr << "stepCount=" << stepCount << " "; std::cerr << "projStepCount=" << projStepCount << " "; std::cerr << "ballpark=" << op->hasBallparkTransformation() << " "; std::cerr << "vertBallpark=" << (op->nameStr().find( BALLPARK_VERTICAL_TRANSFORMATION) != std::string::npos) << " "; std::cerr << "isNull=" << isNullTransformation(op->nameStr()) << " "; std::cerr << std::endl; #endif map[op.get()] = PrecomputedOpCharacteristics( area, getAccuracy(op), isPROJExportable, hasGrids, gridsAvailable, gridsKnown, stepCount, projStepCount, op->hasBallparkTransformation(), op->nameStr().find(BALLPARK_VERTICAL_TRANSFORMATION) != std::string::npos, isNullTransformation(op->nameStr())); } // Sort ! std::sort(res.begin(), res.end(), SortFunction(map)); // Debug code to check consistency of the sort function #ifdef DEBUG_SORT constexpr bool debugSort = true; #elif !defined(NDEBUG) const bool debugSort = getenv("PROJ_DEBUG_SORT_FUNCT") != nullptr; #endif #if defined(DEBUG_SORT) || !defined(NDEBUG) if (debugSort) { SortFunction sortFunc(map); const bool assertIfIssue = !(getenv("PROJ_DEBUG_SORT_FUNCT_ASSERT") != nullptr); for (size_t i = 0; i < res.size(); ++i) { for (size_t j = i + 1; j < res.size(); ++j) { if (sortFunc(res[j], res[i])) { #ifdef DEBUG_SORT std::cerr << "Sorting issue with entry " << i << "(" << res[i]->nameStr() << ") and " << j << "(" << res[j]->nameStr() << ")" << std::endl; #endif if (assertIfIssue) { assert(false); } } } } } #endif } // ---------------------------------------------------------------------- void removeSyntheticNullTransforms() { // If we have more than one result, and than the last result is the // default "Ballpark geographic offset" or "Ballpark geocentric // translation" operations we have synthesized, and that at least one // operation has the desired area of interest and does not require the // use of grids, remove it as all previous results are necessarily // better if (hasOpThatContainsAreaOfInterestAndNoGrid && res.size() > 1) { const auto &opLast = res.back(); if (opLast->hasBallparkTransformation() || isNullTransformation(opLast->nameStr())) { std::vector resTemp; for (size_t i = 0; i < res.size() - 1; i++) { resTemp.emplace_back(res[i]); } res = std::move(resTemp); } } } // ---------------------------------------------------------------------- void removeUninterestingOps() { // Eliminate operations that bring nothing, ie for a given area of use, // do not keep operations that have similar or worse accuracy, but // involve more (non conversion) steps std::vector resTemp; metadata::ExtentPtr lastExtent; double lastAccuracy = -1; size_t lastStepCount = 0; CoordinateOperationPtr lastOp; bool first = true; for (const auto &op : res) { const auto curAccuracy = getAccuracy(op); bool dummy = false; auto curExtent = getExtent(op, true, dummy); // If a concatenated operation has an identifier, consider it as // a single step (to be opposed to synthesized concatenated // operations). Helps for example to get EPSG:8537, // "Egypt 1907 to WGS 84 (2)" const auto curStepCount = op->identifiers().empty() ? getTransformationStepCount(op) : 1; if (first) { resTemp.emplace_back(op); first = false; } else { if (lastOp->_isEquivalentTo(op.get())) { continue; } const bool sameExtent = ((!curExtent && !lastExtent) || (curExtent && lastExtent && curExtent->contains(NN_NO_CHECK(lastExtent)) && lastExtent->contains(NN_NO_CHECK(curExtent)))); if (((curAccuracy >= lastAccuracy && lastAccuracy >= 0) || (curAccuracy < 0 && lastAccuracy >= 0)) && sameExtent && curStepCount > lastStepCount) { continue; } resTemp.emplace_back(op); } lastOp = op.as_nullable(); lastStepCount = curStepCount; lastExtent = std::move(curExtent); lastAccuracy = curAccuracy; } res = std::move(resTemp); } // ---------------------------------------------------------------------- // cppcheck-suppress functionStatic void removeDuplicateOps() { if (res.size() <= 1) { return; } // When going from EPSG:4807 (NTF Paris) to EPSG:4171 (RGC93), we get // EPSG:7811, NTF (Paris) to RGF93 (2), 1 m // and unknown id, NTF (Paris) to NTF (1) + Inverse of RGF93 to NTF (2), // 1 m // both have same PROJ string and extent // Do not keep the later (that has more steps) as it adds no value. std::set setPROJPlusExtent; std::vector resTemp; for (const auto &op : res) { auto formatter = io::PROJStringFormatter::create(); try { std::string key(op->exportToPROJString(formatter.get())); bool dummy = false; auto extentOp = getExtent(op, true, dummy); if (extentOp) { const auto &geogElts = extentOp->geographicElements(); if (geogElts.size() == 1) { auto bbox = dynamic_cast< const metadata::GeographicBoundingBox *>( geogElts[0].get()); if (bbox) { double w = bbox->westBoundLongitude(); double s = bbox->southBoundLatitude(); double e = bbox->eastBoundLongitude(); double n = bbox->northBoundLatitude(); key += "-"; key += toString(w); key += "-"; key += toString(s); key += "-"; key += toString(e); key += "-"; key += toString(n); } } } if (setPROJPlusExtent.find(key) == setPROJPlusExtent.end()) { resTemp.emplace_back(op); setPROJPlusExtent.insert(std::move(key)); } } catch (const std::exception &) { resTemp.emplace_back(op); } } res = std::move(resTemp); } }; // --------------------------------------------------------------------------- /** \brief Filter operations and sort them given context. * * If a desired accuracy is specified, only keep operations whose accuracy * is at least the desired one. * If an area of interest is specified, only keep operations whose area of * use include the area of interest. * Then sort remaining operations by descending area of use, and increasing * accuracy. */ static std::vector filterAndSort(const std::vector &sourceList, const CoordinateOperationContextNNPtr &context, const metadata::ExtentPtr &extent1, const metadata::ExtentPtr &extent2) { #ifdef TRACE_CREATE_OPERATIONS ENTER_FUNCTION(); logTrace("number of results before filter and sort: " + toString(static_cast(sourceList.size()))); #endif FilterResults filterResults(sourceList, context, extent1, extent2, false); filterResults.andSort(); const auto &resFiltered = filterResults.getRes(); #ifdef TRACE_CREATE_OPERATIONS logTrace("number of results after filter and sort: " + toString(static_cast(resFiltered.size()))); #endif return resFiltered; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // Apply the inverse() method on all elements of the input list static std::vector applyInverse(const std::vector &list) { auto res = list; for (auto &op : res) { #ifdef DEBUG auto opNew = op->inverse(); assert(opNew->targetCRS()->isEquivalentTo(op->sourceCRS().get())); assert(opNew->sourceCRS()->isEquivalentTo(op->targetCRS().get())); op = opNew; #else op = op->inverse(); #endif } return res; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void CoordinateOperationFactory::Private::buildCRSIds( const crs::CRSNNPtr &crs, Private::Context &context, std::list> &ids) { const auto &authFactory = context.context->getAuthorityFactory(); assert(authFactory); for (const auto &id : crs->identifiers()) { const auto &authName = *(id->codeSpace()); const auto &code = id->code(); if (!authName.empty()) { const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), authName); try { // Consistency check for the ID attached to the object. // See https://github.com/OSGeo/PROJ/issues/1982 where EPSG:4656 // is attached to a GeographicCRS whereas it is a ProjectedCRS if (tmpAuthFactory->createCoordinateReferenceSystem(code) ->_isEquivalentTo( crs.get(), util::IComparable::Criterion:: EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)) { ids.emplace_back(authName, code); } else { // TODO? log this inconsistency } } catch (const std::exception &) { // TODO? log this inconsistency } } } if (ids.empty() && !ci_equal(crs->nameStr(), "unknown")) { std::vector allowedObjects; auto geogCRS = dynamic_cast(crs.get()); if (geogCRS) { if (geogCRS->datumNonNull(authFactory->databaseContext()) ->nameStr() == "unknown") { return; } allowedObjects.push_back( geogCRS->coordinateSystem()->axisList().size() == 2 ? io::AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS : io::AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS); } else if (dynamic_cast(crs.get())) { allowedObjects.push_back( io::AuthorityFactory::ObjectType::PROJECTED_CRS); } else if (dynamic_cast(crs.get())) { allowedObjects.push_back( io::AuthorityFactory::ObjectType::VERTICAL_CRS); } if (!allowedObjects.empty()) { const std::pair key( allowedObjects[0], crs->nameStr()); auto iter = context.cacheNameToCRS.find(key); if (iter != context.cacheNameToCRS.end()) { ids = iter->second; return; } const auto &authFactoryName = authFactory->getAuthority(); try { const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), (authFactoryName.empty() || authFactoryName == "any") ? std::string() : authFactoryName); auto matches = tmpAuthFactory->createObjectsFromName( crs->nameStr(), allowedObjects, false, 2); if (matches.size() == 1 && crs->_isEquivalentTo( matches.front().get(), util::IComparable::Criterion::EQUIVALENT) && !matches.front()->identifiers().empty()) { const auto &tmpIds = matches.front()->identifiers(); ids.emplace_back(*(tmpIds[0]->codeSpace()), tmpIds[0]->code()); } } catch (const std::exception &) { } context.cacheNameToCRS[key] = ids; } } } // --------------------------------------------------------------------------- static std::vector getCandidateAuthorities(const io::AuthorityFactoryPtr &authFactory, const std::string &srcAuthName, const std::string &targetAuthName) { const auto &authFactoryName = authFactory->getAuthority(); std::vector authorities; if (authFactoryName.empty()) { for (const std::string &authName : authFactory->databaseContext()->getAllowedAuthorities( srcAuthName, targetAuthName)) { authorities.emplace_back(authName == "any" ? std::string() : authName); } if (authorities.empty()) { authorities.emplace_back(); } } else { authorities.emplace_back(authFactoryName == "any" ? std::string() : authFactoryName); } return authorities; } // --------------------------------------------------------------------------- // Look in the authority registry for operations from sourceCRS to targetCRS std::vector CoordinateOperationFactory::Private::findOpsInRegistryDirect( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, bool &resNonEmptyBeforeFiltering) { const auto &authFactory = context.context->getAuthorityFactory(); assert(authFactory); if ((sourceCRS->identifiers().empty() && ci_equal(sourceCRS->nameStr(), "unknown")) || (targetCRS->identifiers().empty() && ci_equal(targetCRS->nameStr(), "unknown"))) { return {}; } #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("findOpsInRegistryDirect(" + objectAsStr(sourceCRS.get()) + " --> " + objectAsStr(targetCRS.get()) + ")"); #endif resNonEmptyBeforeFiltering = false; std::list> sourceIds; std::list> targetIds; buildCRSIds(sourceCRS, context, sourceIds); buildCRSIds(targetCRS, context, targetIds); const auto gridAvailabilityUse = context.context->getGridAvailabilityUse(); for (const auto &idSrc : sourceIds) { const auto &srcAuthName = idSrc.first; const auto &srcCode = idSrc.second; for (const auto &idTarget : targetIds) { const auto &targetAuthName = idTarget.first; const auto &targetCode = idTarget.second; const auto authorities(getCandidateAuthorities( authFactory, srcAuthName, targetAuthName)); std::vector res; for (const auto &authName : authorities) { const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), authName); auto resTmp = tmpAuthFactory->createFromCoordinateReferenceSystemCodes( srcAuthName, srcCode, targetAuthName, targetCode, context.context->getUsePROJAlternativeGridNames(), gridAvailabilityUse == CoordinateOperationContext:: GridAvailabilityUse:: DISCARD_OPERATION_IF_MISSING_GRID || gridAvailabilityUse == CoordinateOperationContext:: GridAvailabilityUse::KNOWN_AVAILABLE, gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: KNOWN_AVAILABLE, context.context->getDiscardSuperseded(), true, false, context.extent1, context.extent2); res.insert(res.end(), resTmp.begin(), resTmp.end()); if (authName == "PROJ") { // Do not stop at the first transformations available in // the PROJ namespace, but allow the next authority to // continue continue; } if (!res.empty()) { resNonEmptyBeforeFiltering = true; auto resFiltered = FilterResults(res, context.context, context.extent1, context.extent2, false) .getRes(); #ifdef TRACE_CREATE_OPERATIONS logTrace("filtering reduced from " + toString(static_cast(res.size())) + " to " + toString(static_cast(resFiltered.size()))); #endif return resFiltered; } } } } return std::vector(); } // --------------------------------------------------------------------------- // Look in the authority registry for operations to targetCRS std::vector CoordinateOperationFactory::Private::findOpsInRegistryDirectTo( const crs::CRSNNPtr &targetCRS, Private::Context &context) { #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("findOpsInRegistryDirectTo({any} -->" + objectAsStr(targetCRS.get()) + ")"); #endif const auto &authFactory = context.context->getAuthorityFactory(); assert(authFactory); std::list> ids; buildCRSIds(targetCRS, context, ids); const auto gridAvailabilityUse = context.context->getGridAvailabilityUse(); for (const auto &id : ids) { const auto &targetAuthName = id.first; const auto &targetCode = id.second; const auto authorities(getCandidateAuthorities( authFactory, targetAuthName, targetAuthName)); std::vector res; for (const auto &authName : authorities) { const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), authName); auto resTmp = tmpAuthFactory->createFromCoordinateReferenceSystemCodes( std::string(), std::string(), targetAuthName, targetCode, context.context->getUsePROJAlternativeGridNames(), gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: DISCARD_OPERATION_IF_MISSING_GRID || gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: KNOWN_AVAILABLE, gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: KNOWN_AVAILABLE, context.context->getDiscardSuperseded(), true, true, context.extent1, context.extent2); res.insert(res.end(), resTmp.begin(), resTmp.end()); if (authName == "PROJ") { // Do not stop at the first transformations available in // the PROJ namespace, but allow the next authority to continue continue; } if (!res.empty()) { auto resFiltered = FilterResults(res, context.context, context.extent1, context.extent2, false) .getRes(); #ifdef TRACE_CREATE_OPERATIONS logTrace("filtering reduced from " + toString(static_cast(res.size())) + " to " + toString(static_cast(resFiltered.size()))); #endif return resFiltered; } } } return std::vector(); } //! @endcond // --------------------------------------------------------------------------- static std::list findCandidateGeodCRSForDatum(const io::AuthorityFactoryPtr &authFactory, const crs::GeodeticCRS *crs, const datum::GeodeticReferenceFrameNNPtr &datum) { std::string preferredAuthName; const auto &crsIds = crs->identifiers(); if (crsIds.size() == 1) preferredAuthName = *(crsIds.front()->codeSpace()); return authFactory->createGeodeticCRSFromDatum(datum, preferredAuthName, std::string()); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static bool isSameGeodeticDatum(const datum::GeodeticReferenceFrameNNPtr &datum1, const datum::GeodeticReferenceFrameNNPtr &datum2, const io::DatabaseContextPtr &dbContext) { if (datum1->nameStr() == "unknown" && datum2->nameStr() != "unknown") return false; if (datum2->nameStr() == "unknown" && datum1->nameStr() != "unknown") return false; return datum1->_isEquivalentTo( datum2.get(), util::IComparable::Criterion::EQUIVALENT, dbContext); } // --------------------------------------------------------------------------- // Look in the authority registry for operations from sourceCRS to targetCRS // using an intermediate pivot std::vector CoordinateOperationFactory::Private::findsOpsInRegistryWithIntermediate( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, bool useCreateBetweenGeodeticCRSWithDatumBasedIntermediates) { #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("findsOpsInRegistryWithIntermediate(" + objectAsStr(sourceCRS.get()) + " --> " + objectAsStr(targetCRS.get()) + ")"); #endif const auto &authFactory = context.context->getAuthorityFactory(); assert(authFactory); const auto dbContext = authFactory->databaseContext().as_nullable(); const auto geodSrc = dynamic_cast(sourceCRS.get()); const auto datumSrc = geodSrc ? geodSrc->datumNonNull(dbContext).as_nullable() : nullptr; // Optimization: check if the source/target CRS have no chance to match // a database entry if (datumSrc && datumSrc->identifiers().empty() && (ci_equal(datumSrc->nameStr(), "unknown") || ci_starts_with(datumSrc->nameStr(), UNKNOWN_BASED_ON))) return {}; if (!geodSrc && dynamic_cast(sourceCRS.get())) return {}; const auto geodDst = dynamic_cast(targetCRS.get()); const auto datumDst = geodDst ? geodDst->datumNonNull(dbContext).as_nullable() : nullptr; if (datumDst && datumDst->identifiers().empty() && (ci_equal(datumDst->nameStr(), "unknown") || ci_starts_with(datumDst->nameStr(), UNKNOWN_BASED_ON))) return {}; if (!geodDst && dynamic_cast(targetCRS.get())) return {}; std::list> sourceIds; buildCRSIds(sourceCRS, context, sourceIds); if (sourceIds.empty()) { if (geodSrc) { const std::string originatingAuthSrc = geodSrc->getOriginatingAuthName(); const auto candidatesSrcGeod(findCandidateGeodCRSForDatum( authFactory, geodSrc, NN_NO_CHECK(datumSrc))); std::vector res; for (const auto &candidateSrcGeod : candidatesSrcGeod) { // Restrict to using only objects that have the same authority // as geodSrc. const auto &candidateIds = candidateSrcGeod->identifiers(); if ((originatingAuthSrc.empty() || (candidateIds.size() == 1 && *(candidateIds[0]->codeSpace()) == originatingAuthSrc) || candidateIds.size() > 1) && candidateSrcGeod->coordinateSystem()->axisList().size() == geodSrc->coordinateSystem()->axisList().size() && ((dynamic_cast(sourceCRS.get()) != nullptr) == (dynamic_cast( candidateSrcGeod.get()) != nullptr))) { if (geodDst) { const auto candidateSrcDatum = candidateSrcGeod->datumNonNull(dbContext); const bool sameGeodeticDatum = isSameGeodeticDatum( candidateSrcDatum, NN_NO_CHECK(datumDst), dbContext); if (sameGeodeticDatum) { continue; } } const auto opsWithIntermediate = findsOpsInRegistryWithIntermediate( candidateSrcGeod, targetCRS, context, useCreateBetweenGeodeticCRSWithDatumBasedIntermediates); if (!opsWithIntermediate.empty()) { const auto opsFirst = createOperations( sourceCRS, util::optional(), candidateSrcGeod, util::optional(), context); for (const auto &opFirst : opsFirst) { for (const auto &opSecond : opsWithIntermediate) { try { res.emplace_back( ConcatenatedOperation:: createComputeMetadata( {opFirst, opSecond}, disallowEmptyIntersection)); } catch ( const InvalidOperationEmptyIntersection &) { } } } if (!res.empty()) return res; } } } } return std::vector(); } std::list> targetIds; buildCRSIds(targetCRS, context, targetIds); if (targetIds.empty()) { return applyInverse(findsOpsInRegistryWithIntermediate( targetCRS, sourceCRS, context, useCreateBetweenGeodeticCRSWithDatumBasedIntermediates)); } const auto gridAvailabilityUse = context.context->getGridAvailabilityUse(); for (const auto &idSrc : sourceIds) { const auto &srcAuthName = idSrc.first; const auto &srcCode = idSrc.second; for (const auto &idTarget : targetIds) { const auto &targetAuthName = idTarget.first; const auto &targetCode = idTarget.second; const auto authorities(getCandidateAuthorities( authFactory, srcAuthName, targetAuthName)); assert(!authorities.empty()); const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), (authFactory->getAuthority() == "any" || authorities.size() > 1) ? std::string() : authorities.front()); std::vector res; if (useCreateBetweenGeodeticCRSWithDatumBasedIntermediates) { res = tmpAuthFactory ->createBetweenGeodeticCRSWithDatumBasedIntermediates( sourceCRS, srcAuthName, srcCode, targetCRS, targetAuthName, targetCode, context.context->getUsePROJAlternativeGridNames(), gridAvailabilityUse == CoordinateOperationContext:: GridAvailabilityUse:: DISCARD_OPERATION_IF_MISSING_GRID || gridAvailabilityUse == CoordinateOperationContext:: GridAvailabilityUse::KNOWN_AVAILABLE, gridAvailabilityUse == CoordinateOperationContext:: GridAvailabilityUse::KNOWN_AVAILABLE, context.context->getDiscardSuperseded(), authFactory->getAuthority() != "any" && authorities.size() > 1 ? authorities : std::vector(), context.extent1, context.extent2); } else { io::AuthorityFactory::ObjectType intermediateObjectType = io::AuthorityFactory::ObjectType::CRS; // If doing GeogCRS --> GeogCRS, only use GeogCRS as // intermediate CRS // Avoid weird behavior when doing NAD83 -> NAD83(2011) // that would go through NAVD88 otherwise. if (context.context->getIntermediateCRS().empty() && dynamic_cast(sourceCRS.get()) && dynamic_cast(targetCRS.get())) { intermediateObjectType = io::AuthorityFactory::ObjectType::GEOGRAPHIC_CRS; } res = tmpAuthFactory->createFromCRSCodesWithIntermediates( srcAuthName, srcCode, targetAuthName, targetCode, context.context->getUsePROJAlternativeGridNames(), gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: DISCARD_OPERATION_IF_MISSING_GRID || gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: KNOWN_AVAILABLE, gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: KNOWN_AVAILABLE, context.context->getDiscardSuperseded(), context.context->getIntermediateCRS(), intermediateObjectType, authFactory->getAuthority() != "any" && authorities.size() > 1 ? authorities : std::vector(), context.extent1, context.extent2); } if (!res.empty()) { auto resFiltered = FilterResults(res, context.context, context.extent1, context.extent2, false) .getRes(); #ifdef TRACE_CREATE_OPERATIONS logTrace("filtering reduced from " + toString(static_cast(res.size())) + " to " + toString(static_cast(resFiltered.size()))); #endif return resFiltered; } } } return std::vector(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static TransformationNNPtr createBallparkGeographicOffset( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const io::DatabaseContextPtr &dbContext, bool forceBallpark) { const crs::GeographicCRS *geogSrc = dynamic_cast(sourceCRS.get()); const crs::GeographicCRS *geogDst = dynamic_cast(targetCRS.get()); const bool isSameDatum = !forceBallpark && geogSrc && geogDst && isSameGeodeticDatum(geogSrc->datumNonNull(dbContext), geogDst->datumNonNull(dbContext), dbContext); auto name = buildOpName(isSameDatum ? NULL_GEOGRAPHIC_OFFSET : BALLPARK_GEOGRAPHIC_OFFSET, sourceCRS, targetCRS); const auto &sourceCRSExtent = getExtent(sourceCRS); const auto &targetCRSExtent = getExtent(targetCRS); const bool sameExtent = sourceCRSExtent && targetCRSExtent && sourceCRSExtent->_isEquivalentTo( targetCRSExtent.get(), util::IComparable::Criterion::EQUIVALENT); util::PropertyMap map; map.set(common::IdentifiedObject::NAME_KEY, name) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, sameExtent ? NN_NO_CHECK(sourceCRSExtent) : metadata::Extent::WORLD); const common::Angle angle0(0); std::vector accuracies; if (isSameDatum) { accuracies.emplace_back(metadata::PositionalAccuracy::create("0")); } const auto singleSourceCRS = dynamic_cast(sourceCRS.get()); const auto singleTargetCRS = dynamic_cast(targetCRS.get()); if ((singleSourceCRS && singleSourceCRS->coordinateSystem()->axisList().size() == 3) || (singleTargetCRS && singleTargetCRS->coordinateSystem()->axisList().size() == 3)) { return Transformation::createGeographic3DOffsets( map, sourceCRS, targetCRS, angle0, angle0, common::Length(0), accuracies); } else { return Transformation::createGeographic2DOffsets( map, sourceCRS, targetCRS, angle0, angle0, accuracies); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- struct MyPROJStringExportableGeodToGeod final : public io::IPROJStringExportable { crs::GeodeticCRSPtr geodSrc{}; crs::GeodeticCRSPtr geodDst{}; MyPROJStringExportableGeodToGeod(const crs::GeodeticCRSPtr &geodSrcIn, const crs::GeodeticCRSPtr &geodDstIn) : geodSrc(geodSrcIn), geodDst(geodDstIn) {} ~MyPROJStringExportableGeodToGeod() override; void // cppcheck-suppress functionStatic _exportToPROJString(io::PROJStringFormatter *formatter) const override { formatter->startInversion(); geodSrc->_exportToPROJString(formatter); formatter->stopInversion(); geodDst->_exportToPROJString(formatter); } }; MyPROJStringExportableGeodToGeod::~MyPROJStringExportableGeodToGeod() = default; // --------------------------------------------------------------------------- struct MyPROJStringExportableHorizVertical final : public io::IPROJStringExportable { CoordinateOperationPtr horizTransform{}; CoordinateOperationPtr verticalTransform{}; crs::GeographicCRSPtr geogDst{}; MyPROJStringExportableHorizVertical( const CoordinateOperationPtr &horizTransformIn, const CoordinateOperationPtr &verticalTransformIn, const crs::GeographicCRSPtr &geogDstIn) : horizTransform(horizTransformIn), verticalTransform(verticalTransformIn), geogDst(geogDstIn) {} ~MyPROJStringExportableHorizVertical() override; void // cppcheck-suppress functionStatic _exportToPROJString(io::PROJStringFormatter *formatter) const override { horizTransform->_exportToPROJString(formatter); formatter->startInversion(); geogDst->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); formatter->pushOmitHorizontalConversionInVertTransformation(); verticalTransform->_exportToPROJString(formatter); formatter->popOmitHorizontalConversionInVertTransformation(); formatter->pushOmitZUnitConversion(); geogDst->addAngularUnitConvertAndAxisSwap(formatter); formatter->popOmitZUnitConversion(); } }; MyPROJStringExportableHorizVertical::~MyPROJStringExportableHorizVertical() = default; // --------------------------------------------------------------------------- struct MyPROJStringExportableHorizVerticalHorizPROJBased final : public io::IPROJStringExportable { CoordinateOperationPtr opSrcCRSToGeogCRS{}; CoordinateOperationPtr verticalTransform{}; CoordinateOperationPtr opGeogCRStoDstCRS{}; crs::SingleCRSPtr interpolationCRS{}; MyPROJStringExportableHorizVerticalHorizPROJBased( const CoordinateOperationPtr &opSrcCRSToGeogCRSIn, const CoordinateOperationPtr &verticalTransformIn, const CoordinateOperationPtr &opGeogCRStoDstCRSIn, const crs::SingleCRSPtr &interpolationCRSIn) : opSrcCRSToGeogCRS(opSrcCRSToGeogCRSIn), verticalTransform(verticalTransformIn), opGeogCRStoDstCRS(opGeogCRStoDstCRSIn), interpolationCRS(interpolationCRSIn) {} ~MyPROJStringExportableHorizVerticalHorizPROJBased() override; void // cppcheck-suppress functionStatic _exportToPROJString(io::PROJStringFormatter *formatter) const override { bool saveHorizontalCoords = false; const auto transf = dynamic_cast(opSrcCRSToGeogCRS.get()); if (transf && opSrcCRSToGeogCRS->sourceCRS()->_isEquivalentTo( opGeogCRStoDstCRS->targetCRS() ->demoteTo2D(std::string(), nullptr) .get(), util::IComparable::Criterion::EQUIVALENT)) { int methodEPSGCode = transf->method()->getEPSGCode(); if (methodEPSGCode == 0) { // If the transformation is actually an inverse transformation, // we will not get the EPSG code. So get the forward // transformation. const auto invTrans = transf->inverse(); const auto invTransAsTrans = dynamic_cast(invTrans.get()); if (invTransAsTrans) methodEPSGCode = invTransAsTrans->method()->getEPSGCode(); } const bool bGeocentricTranslation = methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D; if ((bGeocentricTranslation && !(transf->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION) == 0 && transf->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION) == 0 && transf->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION) == 0)) || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D) { saveHorizontalCoords = true; } } if (saveHorizontalCoords) { formatter->addStep("push"); formatter->addParam("v_1"); formatter->addParam("v_2"); } auto interpolationCRSGeog = dynamic_cast(interpolationCRS.get()); auto interpolationCRSProj = dynamic_cast(interpolationCRS.get()); formatter->pushOmitZUnitConversion(); opSrcCRSToGeogCRS->_exportToPROJString(formatter); formatter->startInversion(); if (interpolationCRSGeog) interpolationCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); else if (interpolationCRSProj) interpolationCRSProj->addUnitConvertAndAxisSwap(formatter, false); formatter->stopInversion(); formatter->popOmitZUnitConversion(); formatter->pushOmitHorizontalConversionInVertTransformation(); verticalTransform->_exportToPROJString(formatter); formatter->popOmitHorizontalConversionInVertTransformation(); formatter->pushOmitZUnitConversion(); if (interpolationCRSGeog) interpolationCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); else if (interpolationCRSProj) interpolationCRSProj->addUnitConvertAndAxisSwap(formatter, false); opGeogCRStoDstCRS->_exportToPROJString(formatter); formatter->popOmitZUnitConversion(); if (saveHorizontalCoords) { formatter->addStep("pop"); formatter->addParam("v_1"); formatter->addParam("v_2"); } } }; MyPROJStringExportableHorizVerticalHorizPROJBased:: ~MyPROJStringExportableHorizVerticalHorizPROJBased() = default; // --------------------------------------------------------------------------- struct MyPROJStringExportableHorizNullVertical final : public io::IPROJStringExportable { CoordinateOperationPtr horizTransform{}; explicit MyPROJStringExportableHorizNullVertical( const CoordinateOperationPtr &horizTransformIn) : horizTransform(horizTransformIn) {} ~MyPROJStringExportableHorizNullVertical() override; void // cppcheck-suppress functionStatic _exportToPROJString(io::PROJStringFormatter *formatter) const override { horizTransform->_exportToPROJString(formatter); } }; MyPROJStringExportableHorizNullVertical:: ~MyPROJStringExportableHorizNullVertical() = default; //! @endcond } // namespace operation NS_PROJ_END #if 0 namespace dropbox{ namespace oxygen { template<> nn>::~nn() = default; template<> nn>::~nn() = default; template<> nn>::~nn() = default; template<> nn>::~nn() = default; }} #endif NS_PROJ_START namespace operation { //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- static std::string buildTransfName(const std::string &srcName, const std::string &targetName) { std::string name("Transformation from "); name += srcName; name += " to "; name += targetName; return name; } // --------------------------------------------------------------------------- static std::string buildConvName(const std::string &srcName, const std::string &targetName) { std::string name("Conversion from "); name += srcName; name += " to "; name += targetName; return name; } // --------------------------------------------------------------------------- static SingleOperationNNPtr createPROJBased( const util::PropertyMap &properties, const io::IPROJStringExportableNNPtr &projExportable, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const crs::CRSPtr &interpolationCRS, const std::vector &accuracies, bool hasBallparkTransformation) { return util::nn_static_pointer_cast( PROJBasedOperation::create(properties, projExportable, false, sourceCRS, targetCRS, interpolationCRS, accuracies, hasBallparkTransformation)); } // --------------------------------------------------------------------------- static CoordinateOperationNNPtr createGeodToGeodPROJBased(const crs::CRSNNPtr &geodSrc, const crs::CRSNNPtr &geodDst) { auto exportable = util::nn_make_shared( util::nn_dynamic_pointer_cast(geodSrc), util::nn_dynamic_pointer_cast(geodDst)); auto properties = util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, buildTransfName(geodSrc->nameStr(), geodDst->nameStr())) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD); return createPROJBased(properties, exportable, geodSrc, geodDst, nullptr, {}, false); } // --------------------------------------------------------------------------- static std::string getRemarks(const std::vector &ops) { std::string remarks; for (const auto &op : ops) { const auto &opRemarks = op->remarks(); if (!opRemarks.empty()) { if (!remarks.empty()) { remarks += '\n'; } std::string opName(op->nameStr()); if (starts_with(opName, INVERSE_OF)) { opName = opName.substr(INVERSE_OF.size()); } remarks += "For "; remarks += opName; const auto &ids = op->identifiers(); if (!ids.empty()) { std::string authority(*ids.front()->codeSpace()); if (starts_with(authority, "INVERSE(") && authority.back() == ')') { authority = authority.substr(strlen("INVERSE("), authority.size() - 1 - strlen("INVERSE(")); } if (starts_with(authority, "DERIVED_FROM(") && authority.back() == ')') { authority = authority.substr(strlen("DERIVED_FROM("), authority.size() - 1 - strlen("DERIVED_FROM(")); } remarks += " ("; remarks += authority; remarks += ':'; remarks += ids.front()->code(); remarks += ')'; } remarks += ": "; remarks += opRemarks; } } return remarks; } // --------------------------------------------------------------------------- static CoordinateOperationNNPtr createHorizVerticalPROJBased( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const operation::CoordinateOperationNNPtr &horizTransform, const operation::CoordinateOperationNNPtr &verticalTransform, bool checkExtent) { auto geogDst = util::nn_dynamic_pointer_cast(targetCRS); assert(geogDst); auto exportable = util::nn_make_shared( horizTransform, verticalTransform, geogDst); const bool horizTransformIsNoOp = starts_with(horizTransform->nameStr(), NULL_GEOGRAPHIC_OFFSET) && horizTransform->nameStr().find(" + ") == std::string::npos; if (horizTransformIsNoOp) { auto properties = util::PropertyMap(); properties.set(common::IdentifiedObject::NAME_KEY, verticalTransform->nameStr()); bool dummy = false; auto extent = getExtent(verticalTransform, true, dummy); if (extent) { properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } const auto &remarks = verticalTransform->remarks(); if (!remarks.empty()) { properties.set(common::IdentifiedObject::REMARKS_KEY, remarks); } auto accuracies = verticalTransform->coordinateOperationAccuracies(); if (accuracies.empty() && dynamic_cast(verticalTransform.get())) { accuracies.emplace_back(metadata::PositionalAccuracy::create("0")); } return createPROJBased(properties, exportable, sourceCRS, targetCRS, nullptr, accuracies, verticalTransform->hasBallparkTransformation()); } else { bool emptyIntersection = false; auto ops = std::vector{horizTransform, verticalTransform}; auto extent = getExtent(ops, true, emptyIntersection); if (checkExtent && emptyIntersection) { std::string msg( "empty intersection of area of validity of concatenated " "operations"); throw InvalidOperationEmptyIntersection(msg); } auto properties = util::PropertyMap(); properties.set(common::IdentifiedObject::NAME_KEY, computeConcatenatedName(ops)); if (extent) { properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } const auto remarks = getRemarks(ops); if (!remarks.empty()) { properties.set(common::IdentifiedObject::REMARKS_KEY, remarks); } std::vector accuracies; const double accuracy = getAccuracy(ops); if (accuracy >= 0.0) { accuracies.emplace_back( metadata::PositionalAccuracy::create(toString(accuracy))); } return createPROJBased( properties, exportable, sourceCRS, targetCRS, nullptr, accuracies, horizTransform->hasBallparkTransformation() || verticalTransform->hasBallparkTransformation()); } } // --------------------------------------------------------------------------- static CoordinateOperationNNPtr createHorizVerticalHorizPROJBased( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const operation::CoordinateOperationNNPtr &opSrcCRSToGeogCRS, const operation::CoordinateOperationNNPtr &verticalTransform, const operation::CoordinateOperationNNPtr &opGeogCRStoDstCRS, const crs::SingleCRSPtr &interpolationCRS, bool checkExtent) { auto exportable = util::nn_make_shared( opSrcCRSToGeogCRS, verticalTransform, opGeogCRStoDstCRS, interpolationCRS); std::vector ops; if (!(starts_with(opSrcCRSToGeogCRS->nameStr(), NULL_GEOGRAPHIC_OFFSET) && opSrcCRSToGeogCRS->nameStr().find(" + ") == std::string::npos)) { ops.emplace_back(opSrcCRSToGeogCRS); } ops.emplace_back(verticalTransform); if (!(starts_with(opGeogCRStoDstCRS->nameStr(), NULL_GEOGRAPHIC_OFFSET) && opGeogCRStoDstCRS->nameStr().find(" + ") == std::string::npos)) { ops.emplace_back(opGeogCRStoDstCRS); } std::vector opsForRemarks; std::vector opsForAccuracy; std::string opName; if (ops.size() == 3 && opGeogCRStoDstCRS->inverse()->_isEquivalentTo( opSrcCRSToGeogCRS.get(), util::IComparable::Criterion::EQUIVALENT)) { opsForRemarks.emplace_back(opSrcCRSToGeogCRS); opsForRemarks.emplace_back(verticalTransform); // Only taking into account the accuracy of the vertical transform when // opSrcCRSToGeogCRS and opGeogCRStoDstCRS are reversed and cancel // themselves would make sense. Unfortunately it causes // EPSG:4313+5710 (BD72 + Ostend height) to EPSG:9707 // (WGS 84 + EGM96 height) to use a non-ideal pipeline. // opsForAccuracy.emplace_back(verticalTransform); opsForAccuracy = ops; opName = verticalTransform->nameStr() + " using "; if (!starts_with(opSrcCRSToGeogCRS->nameStr(), "Inverse of")) opName += opSrcCRSToGeogCRS->nameStr(); else opName += opGeogCRStoDstCRS->nameStr(); } else { opsForRemarks = ops; opsForAccuracy = ops; opName = computeConcatenatedName(ops); } bool hasBallparkTransformation = false; for (const auto &op : ops) { hasBallparkTransformation |= op->hasBallparkTransformation(); } bool emptyIntersection = false; auto extent = getExtent(ops, false, emptyIntersection); if (checkExtent && emptyIntersection) { std::string msg( "empty intersection of area of validity of concatenated " "operations"); throw InvalidOperationEmptyIntersection(msg); } auto properties = util::PropertyMap(); properties.set(common::IdentifiedObject::NAME_KEY, opName); if (extent) { properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } const auto remarks = getRemarks(opsForRemarks); if (!remarks.empty()) { properties.set(common::IdentifiedObject::REMARKS_KEY, remarks); } std::vector accuracies; const double accuracy = getAccuracy(opsForAccuracy); if (accuracy >= 0.0) { accuracies.emplace_back( metadata::PositionalAccuracy::create(toString(accuracy))); } return createPROJBased(properties, exportable, sourceCRS, targetCRS, nullptr, accuracies, hasBallparkTransformation); } // --------------------------------------------------------------------------- static CoordinateOperationNNPtr createHorizNullVerticalPROJBased( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const operation::CoordinateOperationNNPtr &horizTransform, const operation::CoordinateOperationNNPtr &verticalTransform) { auto exportable = util::nn_make_shared( horizTransform); std::vector ops = {horizTransform, verticalTransform}; const std::string opName = computeConcatenatedName(ops); auto properties = util::PropertyMap(); properties.set(common::IdentifiedObject::NAME_KEY, opName); bool emptyIntersection = false; auto extent = getExtent(ops, false, emptyIntersection); if (extent) { properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } const auto remarks = getRemarks(ops); if (!remarks.empty()) { properties.set(common::IdentifiedObject::REMARKS_KEY, remarks); } return createPROJBased(properties, exportable, sourceCRS, targetCRS, nullptr, {}, /*hasBallparkTransformation=*/true); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::vector CoordinateOperationFactory::Private::createOperationsGeogToGeog( std::vector &res, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::GeographicCRS *geogSrc, const crs::GeographicCRS *geogDst, bool forceBallpark) { assert(sourceCRS.get() == geogSrc); assert(targetCRS.get() == geogDst); const auto &src_pm = geogSrc->primeMeridian()->longitude(); const auto &dst_pm = geogDst->primeMeridian()->longitude(); const common::Angle offset_pm( (src_pm.unit() == dst_pm.unit()) ? common::Angle(src_pm.value() - dst_pm.value(), src_pm.unit()) : common::Angle( src_pm.convertToUnit(common::UnitOfMeasure::DEGREE) - dst_pm.convertToUnit(common::UnitOfMeasure::DEGREE), common::UnitOfMeasure::DEGREE)); double vconvSrc = 1.0; const auto &srcCS = geogSrc->coordinateSystem(); const auto &srcAxisList = srcCS->axisList(); if (srcAxisList.size() == 3) { vconvSrc = srcAxisList[2]->unit().conversionToSI(); } double vconvDst = 1.0; const auto &dstCS = geogDst->coordinateSystem(); const auto &dstAxisList = dstCS->axisList(); if (dstAxisList.size() == 3) { vconvDst = dstAxisList[2]->unit().conversionToSI(); } std::string name(buildTransfName(geogSrc->nameStr(), geogDst->nameStr())); const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const bool sameDatum = !forceBallpark && isSameGeodeticDatum(geogSrc->datumNonNull(dbContext), geogDst->datumNonNull(dbContext), dbContext); // Do the CRS differ by their axis order ? bool axisReversal2D = false; bool axisReversal3D = false; if (!srcCS->_isEquivalentTo(dstCS.get(), util::IComparable::Criterion::EQUIVALENT)) { auto srcOrder = srcCS->axisOrder(); auto dstOrder = dstCS->axisOrder(); if (((srcOrder == cs::EllipsoidalCS::AxisOrder::LAT_NORTH_LONG_EAST || srcOrder == cs::EllipsoidalCS::AxisOrder:: LAT_NORTH_LONG_EAST_HEIGHT_UP) && (dstOrder == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH || dstOrder == cs::EllipsoidalCS::AxisOrder:: LONG_EAST_LAT_NORTH_HEIGHT_UP)) || ((srcOrder == cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH || srcOrder == cs::EllipsoidalCS::AxisOrder:: LONG_EAST_LAT_NORTH_HEIGHT_UP) && (dstOrder == cs::EllipsoidalCS::AxisOrder::LAT_NORTH_LONG_EAST || dstOrder == cs::EllipsoidalCS::AxisOrder:: LAT_NORTH_LONG_EAST_HEIGHT_UP))) { if (srcAxisList.size() == 3 || dstAxisList.size() == 3) axisReversal3D = true; else axisReversal2D = true; } } // Do they differ by vertical units ? if (vconvSrc != vconvDst && geogSrc->ellipsoid()->_isEquivalentTo( geogDst->ellipsoid().get(), util::IComparable::Criterion::EQUIVALENT)) { if (offset_pm.value() == 0 && !axisReversal2D && !axisReversal3D) { // If only by vertical units, use a Change of Vertical // Unit transformation if (vconvDst == 0) throw InvalidOperation("Conversion factor of target unit is 0"); const double factor = vconvSrc / vconvDst; auto conv = Conversion::createChangeVerticalUnit( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, name), common::Scale(factor)); conv->setCRSs(sourceCRS, targetCRS, nullptr); conv->setHasBallparkTransformation(!sameDatum); res.push_back(conv); return res; } else { auto op = createGeodToGeodPROJBased(sourceCRS, targetCRS); op->setHasBallparkTransformation(!sameDatum); res.emplace_back(op); return res; } } // Do the CRS differ only by their axis order ? if (sameDatum && (axisReversal2D || axisReversal3D)) { auto conv = Conversion::createAxisOrderReversal(axisReversal3D); conv->setCRSs(sourceCRS, targetCRS, nullptr); res.emplace_back(conv); return res; } std::vector steps; // If both are geographic and only differ by their prime // meridian, // apply a longitude rotation transformation. if (geogSrc->ellipsoid()->_isEquivalentTo( geogDst->ellipsoid().get(), util::IComparable::Criterion::EQUIVALENT) && src_pm.getSIValue() != dst_pm.getSIValue()) { steps.emplace_back(Transformation::createLongitudeRotation( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), sourceCRS, targetCRS, offset_pm)); // If only the target has a non-zero prime meridian, chain a // null geographic offset and then the longitude rotation } else if (src_pm.getSIValue() == 0 && dst_pm.getSIValue() != 0) { auto datum = datum::GeodeticReferenceFrame::create( util::PropertyMap(), geogDst->ellipsoid(), util::optional(), geogSrc->primeMeridian()); std::string interm_crs_name(geogDst->nameStr()); interm_crs_name += " altered to use prime meridian of "; interm_crs_name += geogSrc->nameStr(); auto interm_crs = util::nn_static_pointer_cast(crs::GeographicCRS::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, interm_crs_name) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), datum, dstCS)); steps.emplace_back(createBallparkGeographicOffset( sourceCRS, interm_crs, dbContext, forceBallpark)); steps.emplace_back(Transformation::createLongitudeRotation( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, buildTransfName(geogSrc->nameStr(), interm_crs->nameStr())) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), interm_crs, targetCRS, offset_pm)); } else { // If the prime meridians are different, chain a longitude // rotation and the null geographic offset. if (src_pm.getSIValue() != dst_pm.getSIValue()) { auto datum = datum::GeodeticReferenceFrame::create( util::PropertyMap(), geogSrc->ellipsoid(), util::optional(), geogDst->primeMeridian()); std::string interm_crs_name(geogSrc->nameStr()); interm_crs_name += " altered to use prime meridian of "; interm_crs_name += geogDst->nameStr(); auto interm_crs = util::nn_static_pointer_cast( crs::GeographicCRS::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, interm_crs_name), datum, srcCS)); steps.emplace_back(Transformation::createLongitudeRotation( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, buildTransfName(geogSrc->nameStr(), interm_crs->nameStr())) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), sourceCRS, interm_crs, offset_pm)); steps.emplace_back(createBallparkGeographicOffset( interm_crs, targetCRS, dbContext, forceBallpark)); } else { steps.emplace_back(createBallparkGeographicOffset( sourceCRS, targetCRS, dbContext, forceBallpark)); } } auto op = ConcatenatedOperation::createComputeMetadata( steps, disallowEmptyIntersection); op->setHasBallparkTransformation(!sameDatum); res.emplace_back(op); return res; } // --------------------------------------------------------------------------- static bool hasIdentifiers(const CoordinateOperationNNPtr &op) { if (!op->identifiers().empty()) { return true; } auto concatenated = dynamic_cast(op.get()); if (concatenated) { for (const auto &subOp : concatenated->operations()) { if (hasIdentifiers(subOp)) { return true; } } } return false; } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::setCRSs( CoordinateOperation *co, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { co->setCRSsUpdateInverse(sourceCRS, targetCRS, co->interpolationCRS()); } // --------------------------------------------------------------------------- static bool hasResultSetOnlyResultsWithPROJStep( const std::vector &res) { for (const auto &op : res) { auto concat = dynamic_cast(op.get()); if (concat) { bool hasPROJStep = false; const auto &steps = concat->operations(); for (const auto &step : steps) { const auto &ids = step->identifiers(); if (!ids.empty()) { const auto &opAuthority = *(ids.front()->codeSpace()); if (opAuthority == "PROJ" || opAuthority == "INVERSE(PROJ)" || opAuthority == "DERIVED_FROM(PROJ)") { hasPROJStep = true; break; } } } if (!hasPROJStep) { return false; } } else { return false; } } return true; } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsWithDatumPivot( std::vector &res, const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst, Private::Context &context) { #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("createOperationsWithDatumPivot(" + objectAsStr(sourceCRS.get()) + "," + objectAsStr(targetCRS.get()) + ")"); #endif struct CreateOperationsWithDatumPivotAntiRecursion { Context &context; explicit CreateOperationsWithDatumPivotAntiRecursion(Context &contextIn) : context(contextIn) { assert(!context.inCreateOperationsWithDatumPivotAntiRecursion); context.inCreateOperationsWithDatumPivotAntiRecursion = true; } ~CreateOperationsWithDatumPivotAntiRecursion() { context.inCreateOperationsWithDatumPivotAntiRecursion = false; } }; CreateOperationsWithDatumPivotAntiRecursion guard(context); const auto &authFactory = context.context->getAuthorityFactory(); const auto &dbContext = authFactory->databaseContext(); const auto srcDatum = geodSrc->datumNonNull(dbContext.as_nullable()); if (srcDatum->identifiers().empty() && (ci_equal(srcDatum->nameStr(), "unknown") || ci_starts_with(srcDatum->nameStr(), UNKNOWN_BASED_ON))) return; const auto dstDatum = geodDst->datumNonNull(dbContext.as_nullable()); if (dstDatum->identifiers().empty() && (ci_equal(dstDatum->nameStr(), "unknown") || ci_starts_with(dstDatum->nameStr(), UNKNOWN_BASED_ON))) return; const auto candidatesSrcGeod( findCandidateGeodCRSForDatum(authFactory, geodSrc, srcDatum)); const auto candidatesDstGeod( findCandidateGeodCRSForDatum(authFactory, geodDst, dstDatum)); const bool sourceAndTargetAre3D = geodSrc->coordinateSystem()->axisList().size() == 3 && geodDst->coordinateSystem()->axisList().size() == 3; auto createTransformations = [&](const crs::CRSNNPtr &candidateSrcGeod, const crs::CRSNNPtr &candidateDstGeod, const CoordinateOperationNNPtr &opFirst, bool isNullFirst, bool useOnlyDirectRegistryOp) { bool resNonEmptyBeforeFiltering; // Deal with potential epoch change std::vector opsEpochChangeSrc; std::vector opsEpochChangeDst; if (sourceEpoch.has_value() && targetEpoch.has_value() && !sourceEpoch->coordinateEpoch()._isEquivalentTo( targetEpoch->coordinateEpoch())) { const auto pmoSrc = context.context->getAuthorityFactory() ->getPointMotionOperationsFor( NN_NO_CHECK( util::nn_dynamic_pointer_cast( candidateSrcGeod)), true); if (!pmoSrc.empty()) { opsEpochChangeSrc = createOperations(candidateSrcGeod, sourceEpoch, candidateSrcGeod, targetEpoch, context); } else { const auto pmoDst = context.context->getAuthorityFactory() ->getPointMotionOperationsFor( NN_NO_CHECK( util::nn_dynamic_pointer_cast( candidateDstGeod)), true); if (!pmoDst.empty()) { opsEpochChangeDst = createOperations( candidateDstGeod, sourceEpoch, candidateDstGeod, targetEpoch, context); } } } const std::vector opsSecond( useOnlyDirectRegistryOp ? findOpsInRegistryDirect(candidateSrcGeod, candidateDstGeod, context, resNonEmptyBeforeFiltering) : createOperations(candidateSrcGeod, targetEpoch, candidateDstGeod, targetEpoch, context)); const auto opsThird = createOperations( sourceAndTargetAre3D ? candidateDstGeod->promoteTo3D(std::string(), dbContext) : candidateDstGeod, targetEpoch, targetCRS, targetEpoch, context); assert(!opsThird.empty()); const CoordinateOperationNNPtr &opThird(opsThird[0]); const auto nIters = std::max( 1, std::max(opsEpochChangeSrc.size(), opsEpochChangeDst.size())); for (size_t iEpochChange = 0; iEpochChange < nIters; ++iEpochChange) { for (auto &opSecond : opsSecond) { // Check that it is not a transformation synthesized by // ourselves if (!hasIdentifiers(opSecond)) { continue; } // And even if it is a referenced transformation, check that // it is not a trivial one auto so = dynamic_cast(opSecond.get()); if (so && isAxisOrderReversal(so->method()->getEPSGCode())) { continue; } std::vector subOps; const bool isNullThird = isNullTransformation(opThird->nameStr()); CoordinateOperationNNPtr opSecondCloned( (isNullFirst || isNullThird || sourceAndTargetAre3D) ? opSecond->shallowClone() : opSecond); if (isNullFirst || isNullThird) { if (opSecondCloned->identifiers().size() == 1 && (*opSecondCloned->identifiers()[0]->codeSpace()) .find("DERIVED_FROM") == std::string::npos) { { util::PropertyMap map; addModifiedIdentifier(map, opSecondCloned.get(), false, true); opSecondCloned->setProperties(map); } auto invCO = dynamic_cast( opSecondCloned.get()); if (invCO) { auto invCOForward = invCO->forwardOperation().get(); if (invCOForward->identifiers().size() == 1 && (*invCOForward->identifiers()[0]->codeSpace()) .find("DERIVED_FROM") == std::string::npos) { util::PropertyMap map; addModifiedIdentifier(map, invCOForward, false, true); invCOForward->setProperties(map); } } } } if (sourceAndTargetAre3D) { // Force Helmert operations to use the 3D domain, even if // the ones we found in EPSG are advertised for the 2D // domain. auto concat = dynamic_cast( opSecondCloned.get()); if (concat) { std::vector newSteps; for (const auto &step : concat->operations()) { auto newStep = step->shallowClone(); setCRSs(newStep.get(), newStep->sourceCRS()->promoteTo3D( std::string(), dbContext), newStep->targetCRS()->promoteTo3D( std::string(), dbContext)); newSteps.emplace_back(newStep); } opSecondCloned = ConcatenatedOperation::createComputeMetadata( newSteps, disallowEmptyIntersection); } else { setCRSs(opSecondCloned.get(), opSecondCloned->sourceCRS()->promoteTo3D( std::string(), dbContext), opSecondCloned->targetCRS()->promoteTo3D( std::string(), dbContext)); } } if (!isNullFirst) { subOps.emplace_back(opFirst); } if (!opsEpochChangeSrc.empty()) { subOps.emplace_back(opsEpochChangeSrc[iEpochChange]); } subOps.emplace_back(opSecondCloned); if (!opsEpochChangeDst.empty()) { subOps.emplace_back(opsEpochChangeDst[iEpochChange]); } if (!isNullThird) { subOps.emplace_back(opThird); } subOps[0] = subOps[0]->shallowClone(); if (subOps[0]->targetCRS()) setCRSs(subOps[0].get(), sourceCRS, NN_NO_CHECK(subOps[0]->targetCRS())); subOps.back() = subOps.back()->shallowClone(); if (subOps[0]->sourceCRS()) setCRSs(subOps.back().get(), NN_NO_CHECK(subOps.back()->sourceCRS()), targetCRS); #ifdef TRACE_CREATE_OPERATIONS std::string debugStr; for (const auto &op : subOps) { if (!debugStr.empty()) { debugStr += " + "; } debugStr += objectAsStr(op.get()); debugStr += " ("; debugStr += objectAsStr(op->sourceCRS().get()); debugStr += "->"; debugStr += objectAsStr(op->targetCRS().get()); debugStr += ")"; } logTrace("transformation " + debugStr); #endif try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( subOps, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } }; // The below logic is thus quite fragile, and attempts at changing it // result in degraded results for other use cases... // // Start in priority with candidates that have exactly the same name as // the sourceCRS and targetCRS (Typically for the case of init=IGNF:XXXX); // and then attempt candidate geodetic CRS with different names // // Transformation from IGNF:NTFP to IGNF:RGF93G, // using // NTF geographiques Paris (gr) vers NTF GEOGRAPHIQUES GREENWICH (DMS) + // NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers RGF93 (ETRS89) // that is using ntf_r93.gsb, is horribly dependent // of IGNF:RGF93G being returned before IGNF:RGF93GEO in candidatesDstGeod. // If RGF93GEO is returned before then we go through WGS84 and use // instead a Helmert transformation. // // Actually, in the general case, we do the lookup in 3 passes with the 2 // above steps in each pass: // - one first pass where we only consider direct transformations (no // other intermediate CRS) // - a second pass where we allow transformation through another // intermediate CRS, but we make sure the candidate geodetic CRS are of // the same type // - a third where we allow transformation through another // intermediate CRS, where the candidate geodetic CRS are of different // type. // ... but when transforming between 2 IGNF CRS, we do just one single pass // by allowing directly all transformation. There is no strong reason for // that particular case, except that otherwise we'd get different results // for test/cli/test_cs2cs_ignf.yaml when transforming a point outside // the area of validity... Not totally sure the behavior we try to preserve // here with the particular case is fundamentally better than the general // case. The general case is needed typically for the RGNC91-93 -> RGNC15 // transformation where we we need to actually use a transformation between // RGNC91-93 (lon-lat) -> RGNC15 (lon-lat), and not chain 2 no-op // transformations RGNC91-93 -> WGS 84 and RGNC15 -> WGS84. const auto isIGNF = [](const crs::CRSNNPtr &crs) { const auto &ids = crs->identifiers(); return !ids.empty() && *(ids.front()->codeSpace()) == "IGNF"; }; const int nIters = (isIGNF(sourceCRS) && isIGNF(targetCRS)) ? 1 : 3; const auto getType = [](const crs::GeodeticCRSNNPtr &crs) { if (auto geogCRS = dynamic_cast(crs.get())) { if (geogCRS->coordinateSystem()->axisList().size() == 3) return 1; return 0; } return 2; }; for (int iter = 0; iter < nIters; ++iter) { const bool useOnlyDirectRegistryOp = (iter == 0 && nIters == 3); for (const auto &candidateSrcGeod : candidatesSrcGeod) { if (candidateSrcGeod->nameStr() == sourceCRS->nameStr()) { const auto typeSource = (iter >= 1) ? getType(candidateSrcGeod) : -1; auto sourceSrcGeodModified(sourceAndTargetAre3D ? candidateSrcGeod->promoteTo3D( std::string(), dbContext) : candidateSrcGeod); for (const auto &candidateDstGeod : candidatesDstGeod) { if (candidateDstGeod->nameStr() == targetCRS->nameStr()) { if (iter == 1) { if (typeSource != getType(candidateDstGeod)) { continue; } } else if (iter == 2) { if (typeSource == getType(candidateDstGeod)) { continue; } } #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("iter=" + toString(iter) + ", try " + objectAsStr(sourceCRS.get()) + "->" + objectAsStr(candidateSrcGeod.get()) + "->" + objectAsStr(candidateDstGeod.get()) + "->" + objectAsStr(targetCRS.get()) + ")"); #endif const auto opsFirst = createOperations( sourceCRS, sourceEpoch, sourceSrcGeodModified, sourceEpoch, context); assert(!opsFirst.empty()); const bool isNullFirst = isNullTransformation(opsFirst[0]->nameStr()); createTransformations( candidateSrcGeod, candidateDstGeod, opsFirst[0], isNullFirst, useOnlyDirectRegistryOp); if (!res.empty()) { if (hasResultSetOnlyResultsWithPROJStep(res)) { continue; } return; } } } } } for (const auto &candidateSrcGeod : candidatesSrcGeod) { const bool bSameSrcName = candidateSrcGeod->nameStr() == sourceCRS->nameStr(); #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK(""); #endif auto sourceSrcGeodModified( sourceAndTargetAre3D ? candidateSrcGeod->promoteTo3D(std::string(), dbContext) : candidateSrcGeod); const auto opsFirst = createOperations(sourceCRS, sourceEpoch, sourceSrcGeodModified, sourceEpoch, context); assert(!opsFirst.empty()); const bool isNullFirst = isNullTransformation(opsFirst[0]->nameStr()); for (const auto &candidateDstGeod : candidatesDstGeod) { if (bSameSrcName && candidateDstGeod->nameStr() == targetCRS->nameStr()) { continue; } #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("try " + objectAsStr(sourceCRS.get()) + "->" + objectAsStr(candidateSrcGeod.get()) + "->" + objectAsStr(candidateDstGeod.get()) + "->" + objectAsStr(targetCRS.get()) + ")"); #endif createTransformations(candidateSrcGeod, candidateDstGeod, opsFirst[0], isNullFirst, useOnlyDirectRegistryOp); if (!res.empty() && !hasResultSetOnlyResultsWithPROJStep(res)) { return; } } } } } // --------------------------------------------------------------------------- static CoordinateOperationNNPtr createBallparkGeocentricTranslation(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { std::string name(BALLPARK_GEOCENTRIC_TRANSLATION); name += " from "; name += sourceCRS->nameStr(); name += " to "; name += targetCRS->nameStr(); return util::nn_static_pointer_cast( Transformation::createGeocentricTranslations( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), sourceCRS, targetCRS, 0.0, 0.0, 0.0, {})); } // --------------------------------------------------------------------------- bool CoordinateOperationFactory::Private::hasPerfectAccuracyResult( const std::vector &res, const Context &context) { auto resTmp = FilterResults(res, context.context, context.extent1, context.extent2, true) .getRes(); for (const auto &op : resTmp) { const double acc = getAccuracy(op); if (acc == 0.0) { return true; } } return false; } // --------------------------------------------------------------------------- std::vector CoordinateOperationFactory::Private::createOperations( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context) { #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("createOperations(" + objectAsStr(sourceCRS.get()) + " --> " + objectAsStr(targetCRS.get()) + ")"); #endif #ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION // 10 is arbitrary and hopefully large enough for all transformations PROJ // can handle. // At time of writing 7 is the maximum known to be required by a few tests // like // operation.compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert_WKT1_same_geoidgrids_context // We don't enable that check for fuzzing, to be able to detect // the root cause of recursions. if (context.nRecLevelCreateOperations == 10) { throw InvalidOperation("Too deep recursion in createOperations()"); } #endif struct RecLevelIncrementer { Private::Context &context_; explicit inline RecLevelIncrementer(Private::Context &contextIn) : context_(contextIn) { ++context_.nRecLevelCreateOperations; } inline ~RecLevelIncrementer() { --context_.nRecLevelCreateOperations; } }; RecLevelIncrementer recLevelIncrementer(context); std::vector res; auto boundSrc = dynamic_cast(sourceCRS.get()); auto boundDst = dynamic_cast(targetCRS.get()); const auto &sourceProj4Ext = boundSrc ? boundSrc->baseCRS()->getExtensionProj4() : sourceCRS->getExtensionProj4(); const auto &targetProj4Ext = boundDst ? boundDst->baseCRS()->getExtensionProj4() : targetCRS->getExtensionProj4(); if (!sourceProj4Ext.empty() || !targetProj4Ext.empty()) { createOperationsFromProj4Ext(sourceCRS, targetCRS, boundSrc, boundDst, res); return res; } auto geodSrc = dynamic_cast(sourceCRS.get()); auto geodDst = dynamic_cast(targetCRS.get()); auto geogSrc = dynamic_cast(sourceCRS.get()); auto geogDst = dynamic_cast(targetCRS.get()); auto vertSrc = dynamic_cast(sourceCRS.get()); auto vertDst = dynamic_cast(targetCRS.get()); // First look-up if the registry provide us with operations. auto derivedSrc = dynamic_cast(sourceCRS.get()); auto derivedDst = dynamic_cast(targetCRS.get()); const auto &authFactory = context.context->getAuthorityFactory(); if (authFactory && (derivedSrc == nullptr || !derivedSrc->baseCRS()->_isEquivalentTo( targetCRS.get(), util::IComparable::Criterion::EQUIVALENT)) && (derivedDst == nullptr || !derivedDst->baseCRS()->_isEquivalentTo( sourceCRS.get(), util::IComparable::Criterion::EQUIVALENT))) { if (createOperationsFromDatabase( sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, geodSrc, geodDst, geogSrc, geogDst, vertSrc, vertDst, res)) { return res; } } if (geodSrc && geodSrc->isSphericalPlanetocentric()) { createOperationsFromSphericalPlanetocentric(sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, geodSrc, res); return res; } else if (geodDst && geodDst->isSphericalPlanetocentric()) { return applyInverse(createOperations(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } // Special case if both CRS are geodetic if (geodSrc && geodDst && !derivedSrc && !derivedDst) { createOperationsGeodToGeod(sourceCRS, targetCRS, context, geodSrc, geodDst, res, /*forceBallpark=*/false); return res; } if (boundSrc) { auto geodSrcBase = util::nn_dynamic_pointer_cast( boundSrc->baseCRS()); if (geodSrcBase && geodSrcBase->isSphericalPlanetocentric()) { createOperationsFromBoundOfSphericalPlanetocentric( sourceCRS, targetCRS, context, boundSrc, NN_NO_CHECK(geodSrcBase), res); return res; } } else if (boundDst) { auto geodDstBase = util::nn_dynamic_pointer_cast( boundDst->baseCRS()); if (geodDstBase && geodDstBase->isSphericalPlanetocentric()) { return applyInverse(createOperations( targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } } // If the source is a derived CRS, then chain the inverse of its // deriving conversion, with transforms from its baseCRS to the // targetCRS if (derivedSrc) { createOperationsDerivedTo(sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, derivedSrc, res); return res; } // reverse of previous case if (derivedDst) { return applyInverse(createOperations(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } // Order of comparison between the geogDst vs geodDst is important if (boundSrc && geogDst) { createOperationsBoundToGeog(sourceCRS, targetCRS, context, boundSrc, geogDst, res); return res; } else if (boundSrc && geodDst) { createOperationsToGeod(sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, geodDst, res); return res; } // reverse of previous case if (geodSrc && boundDst) { return applyInverse(createOperations(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } // vertCRS (as boundCRS with transformation to target vertCRS) to // vertCRS if (boundSrc && vertDst) { createOperationsBoundToVert(sourceCRS, targetCRS, context, boundSrc, vertDst, res); return res; } // reverse of previous case if (boundDst && vertSrc) { return applyInverse(createOperations(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } if (vertSrc && vertDst) { createOperationsVertToVert(sourceCRS, targetCRS, context, vertSrc, vertDst, res); return res; } // A bit odd case as we are comparing apples to oranges, but in case // the vertical unit differ, do something useful. if (vertSrc && geogDst) { createOperationsVertToGeog(sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, vertSrc, geogDst, res); return res; } // reverse of previous case if (vertDst && geogSrc) { return applyInverse(createOperations(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } // boundCRS to boundCRS if (boundSrc && boundDst) { createOperationsBoundToBound(sourceCRS, targetCRS, context, boundSrc, boundDst, res); return res; } auto compoundSrc = dynamic_cast(sourceCRS.get()); // Order of comparison between the geogDst vs geodDst is important if (compoundSrc && geogDst) { createOperationsCompoundToGeog(sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, compoundSrc, geogDst, res); return res; } else if (compoundSrc && geodDst) { createOperationsToGeod(sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, geodDst, res); return res; } // reverse of previous cases auto compoundDst = dynamic_cast(targetCRS.get()); if (geodSrc && compoundDst) { return applyInverse(createOperations(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } if (compoundSrc && compoundDst) { createOperationsCompoundToCompound(sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, compoundSrc, compoundDst, res); return res; } // '+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +type=crs' to // '+proj=longlat +ellps=GRS80 +nadgrids=@bar.gsb +geoidgrids=@bar.gtx // +type=crs' if (boundSrc && compoundDst) { createOperationsBoundToCompound(sourceCRS, targetCRS, context, boundSrc, compoundDst, res); return res; } // reverse of previous case if (boundDst && compoundSrc) { return applyInverse(createOperations(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context)); } if (dynamic_cast(sourceCRS.get()) && sourceCRS->_isEquivalentTo(targetCRS.get())) { std::string name("Identity transformation from "); name += sourceCRS->nameStr(); name += " to "; name += targetCRS->nameStr(); res.push_back(Transformation::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), sourceCRS, targetCRS, nullptr, createMethodMapNameEPSGCode( EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_EASTING_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_NORTHING_OFFSET), }, VectorOfValues{ common::Length(0), common::Length(0), }, {metadata::PositionalAccuracy::create("0")})); } return res; } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsFromProj4Ext( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const crs::BoundCRS *boundSrc, const crs::BoundCRS *boundDst, std::vector &res) { ENTER_FUNCTION(); auto sourceProjExportable = dynamic_cast( boundSrc ? boundSrc : sourceCRS.get()); auto targetProjExportable = dynamic_cast( boundDst ? boundDst : targetCRS.get()); if (!sourceProjExportable) { throw InvalidOperation("Source CRS is not PROJ exportable"); } if (!targetProjExportable) { throw InvalidOperation("Target CRS is not PROJ exportable"); } auto projFormatter = io::PROJStringFormatter::create(); projFormatter->setCRSExport(true); projFormatter->setLegacyCRSToCRSContext(true); projFormatter->startInversion(); sourceProjExportable->_exportToPROJString(projFormatter.get()); auto geogSrc = dynamic_cast( boundSrc ? boundSrc->baseCRS().get() : sourceCRS.get()); if (geogSrc) { auto tmpFormatter = io::PROJStringFormatter::create(); geogSrc->addAngularUnitConvertAndAxisSwap(tmpFormatter.get()); projFormatter->ingestPROJString(tmpFormatter->toString()); } projFormatter->stopInversion(); targetProjExportable->_exportToPROJString(projFormatter.get()); auto geogDst = dynamic_cast( boundDst ? boundDst->baseCRS().get() : targetCRS.get()); if (geogDst) { auto tmpFormatter = io::PROJStringFormatter::create(); geogDst->addAngularUnitConvertAndAxisSwap(tmpFormatter.get()); projFormatter->ingestPROJString(tmpFormatter->toString()); } auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr())); res.emplace_back(SingleOperation::createPROJBased( properties, projFormatter->toString(), sourceCRS, targetCRS, {})); } // --------------------------------------------------------------------------- bool CoordinateOperationFactory::Private::createOperationsFromDatabase( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst, const crs::GeographicCRS *geogSrc, const crs::GeographicCRS *geogDst, const crs::VerticalCRS *vertSrc, const crs::VerticalCRS *vertDst, std::vector &res) { ENTER_FUNCTION(); if (geogSrc && vertDst) { createOperationsFromDatabase(targetCRS, targetEpoch, sourceCRS, sourceEpoch, context, geodDst, geodSrc, geogDst, geogSrc, vertDst, vertSrc, res); res = applyInverse(res); } else if (geogDst && vertSrc) { res = applyInverse(createOperationsGeogToVertFromGeoid( targetCRS, sourceCRS, vertSrc, context)); if (!res.empty()) { createOperationsVertToGeogSynthetized(sourceCRS, targetCRS, context, vertSrc, geogDst, res); } } if (!res.empty()) { return true; } // Use PointMotionOperations if appropriate and available if (geodSrc && geodDst && sourceEpoch.has_value() && targetEpoch.has_value() && !sourceEpoch->coordinateEpoch()._isEquivalentTo( targetEpoch->coordinateEpoch())) { const auto pmoSrc = context.context->getAuthorityFactory()->getPointMotionOperationsFor( NN_NO_CHECK( util::nn_dynamic_pointer_cast(sourceCRS)), true); if (!pmoSrc.empty()) { const auto pmoDst = context.context->getAuthorityFactory() ->getPointMotionOperationsFor( NN_NO_CHECK( util::nn_dynamic_pointer_cast( targetCRS)), true); if (pmoDst.size() == pmoSrc.size()) { bool ok = true; for (size_t i = 0; i < pmoSrc.size(); ++i) { if (pmoSrc[i]->_isEquivalentTo(pmoDst[i].get())) { auto pmo = pmoSrc[i]->cloneWithEpochs(*sourceEpoch, *targetEpoch); std::vector ops; if (!pmo->sourceCRS()->_isEquivalentTo( sourceCRS.get(), util::IComparable::Criterion::EQUIVALENT)) { auto tmp = createOperations(sourceCRS, sourceEpoch, pmo->sourceCRS(), sourceEpoch, context); assert(!tmp.empty()); ops.emplace_back(tmp.front()); } ops.emplace_back(pmo); // pmo->sourceCRS() == pmo->targetCRS() by definition if (!pmo->sourceCRS()->_isEquivalentTo( targetCRS.get(), util::IComparable::Criterion::EQUIVALENT)) { auto tmp = createOperations(pmo->sourceCRS(), targetEpoch, targetCRS, targetEpoch, context); assert(!tmp.empty()); ops.emplace_back(tmp.front()); } res.emplace_back( ConcatenatedOperation::createComputeMetadata( ops, disallowEmptyIntersection)); } else { ok = false; break; } } if (ok) { std::vector resTmp; createOperationsGeodToGeod(sourceCRS, targetCRS, context, geodSrc, geodDst, resTmp, /*forceBallpark=*/true); res.insert(res.end(), resTmp.begin(), resTmp.end()); return true; } } } } bool resFindDirectNonEmptyBeforeFiltering = false; res = findOpsInRegistryDirect(sourceCRS, targetCRS, context, resFindDirectNonEmptyBeforeFiltering); // If we get at least a result with perfect accuracy, do not // bother generating synthetic transforms. if (hasPerfectAccuracyResult(res, context)) { return true; } bool doFilterAndCheckPerfectOp = false; bool sameGeodeticDatum = false; if (vertSrc || vertDst) { if (res.empty()) { if (geogSrc && geogSrc->coordinateSystem()->axisList().size() == 2 && vertDst) { auto dbContext = context.context->getAuthorityFactory()->databaseContext(); auto resTmp = findOpsInRegistryDirect( sourceCRS->promoteTo3D(std::string(), dbContext), targetCRS, context, resFindDirectNonEmptyBeforeFiltering); for (auto &op : resTmp) { auto newOp = op->shallowClone(); setCRSs(newOp.get(), sourceCRS, targetCRS); res.emplace_back(newOp); } } else if (geogDst && geogDst->coordinateSystem()->axisList().size() == 2 && vertSrc) { auto dbContext = context.context->getAuthorityFactory()->databaseContext(); auto resTmp = findOpsInRegistryDirect( sourceCRS, targetCRS->promoteTo3D(std::string(), dbContext), context, resFindDirectNonEmptyBeforeFiltering); for (auto &op : resTmp) { auto newOp = op->shallowClone(); setCRSs(newOp.get(), sourceCRS, targetCRS); res.emplace_back(newOp); } } } if (res.empty()) { createOperationsFromDatabaseWithVertCRS( sourceCRS, sourceEpoch, targetCRS, targetEpoch, context, geogSrc, geogDst, vertSrc, vertDst, res); } } else if (geodSrc && geodDst) { const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory->databaseContext().as_nullable(); const auto srcDatum = geodSrc->datumNonNull(dbContext); const auto dstDatum = geodDst->datumNonNull(dbContext); sameGeodeticDatum = isSameGeodeticDatum(srcDatum, dstDatum, dbContext); if (res.empty() && !sameGeodeticDatum && !context.inCreateOperationsWithDatumPivotAntiRecursion) { // If we still didn't find a transformation, and that the source // and target are GeodeticCRS, then go through their underlying // datum to find potential transformations between other // GeodeticCRSs // that are made of those datum // The typical example is if transforming between two // GeographicCRS, // but transformations are only available between their // corresponding geocentric CRS. createOperationsWithDatumPivot(res, sourceCRS, sourceEpoch, targetCRS, targetEpoch, geodSrc, geodDst, context); doFilterAndCheckPerfectOp = !res.empty(); } } bool foundInstantiableOp = false; // FIXME: the limitation to .size() == 1 is just for the // -s EPSG:4959+5759 -t "EPSG:4959+7839" case // finding EPSG:7860 'NZVD2016 height to Auckland 1946 // height (1)', which uses the EPSG:1071 'Vertical Offset by Grid // Interpolation (NZLVD)' method which is not currently implemented by PROJ // (cannot deal with .csv files) // Initially the test was written to iterate over for all operations of a // non-empty res, but this causes failures in the test suite when no grids // are installed at all. Ideally we should tweak the test suite to be // robust to that, or skip some tests. if (res.size() == 1) { try { res.front()->exportToPROJString( io::PROJStringFormatter::create().get()); foundInstantiableOp = true; } catch (const std::exception &) { } if (!foundInstantiableOp) { resFindDirectNonEmptyBeforeFiltering = false; } } else if (res.size() > 1) { foundInstantiableOp = true; } // NAD27 to NAD83 has tens of results already. No need to look // for a pivot if (!sameGeodeticDatum && (((res.empty() || !foundInstantiableOp) && !resFindDirectNonEmptyBeforeFiltering && context.context->getAllowUseIntermediateCRS() == CoordinateOperationContext::IntermediateCRSUse:: IF_NO_DIRECT_TRANSFORMATION) || context.context->getAllowUseIntermediateCRS() == CoordinateOperationContext::IntermediateCRSUse::ALWAYS || getenv("PROJ_FORCE_SEARCH_PIVOT"))) { auto resWithIntermediate = findsOpsInRegistryWithIntermediate( sourceCRS, targetCRS, context, false); res.insert(res.end(), resWithIntermediate.begin(), resWithIntermediate.end()); doFilterAndCheckPerfectOp = !res.empty(); } // Browse through candidate operations and check if their area of use // is sufficiently large compared to the area of use of the // source/target CRS. If it is not, we might need to extend the lookup // to using intermediate CRSs. // But only do that if we have a relatively small number of solutions. // Otherwise we might just spend time appending more dubious solutions. bool tooSmallAreas = false; // 10: arbitrary threshold so that particular case triggers for // EPSG:9989 (ITRF2000) to EPSG:4937 (ETRS89), but not for // "WGS 84" to "NAD83(CSRS)v2", to avoid excessive computation time. if (!res.empty() && res.size() < 10) { const auto &areaOfInterest = context.context->getAreaOfInterest(); double targetArea = 0.0; if (areaOfInterest) { targetArea = getPseudoArea(NN_NO_CHECK(areaOfInterest)); } else if (context.extent1) { if (context.extent2) { auto intersection = context.extent1->intersection(NN_NO_CHECK(context.extent2)); if (intersection) targetArea = getPseudoArea(NN_NO_CHECK(intersection)); } else { targetArea = getPseudoArea(NN_NO_CHECK(context.extent1)); } } else if (context.extent2) { targetArea = getPseudoArea(NN_NO_CHECK(context.extent2)); } if (targetArea > 0) { tooSmallAreas = true; for (const auto &op : res) { bool dummy = false; auto extentOp = getExtent(op, true, dummy); double area = 0.0; if (extentOp) { if (areaOfInterest) { area = getPseudoArea(extentOp->intersection( NN_NO_CHECK(areaOfInterest))); } else if (context.extent1 && context.extent2) { auto x = extentOp->intersection( NN_NO_CHECK(context.extent1)); auto y = extentOp->intersection( NN_NO_CHECK(context.extent2)); area = getPseudoArea(x) + getPseudoArea(y) - ((x && y) ? getPseudoArea( x->intersection(NN_NO_CHECK(y))) : 0.0); } else if (context.extent1) { area = getPseudoArea(extentOp->intersection( NN_NO_CHECK(context.extent1))); } else if (context.extent2) { area = getPseudoArea(extentOp->intersection( NN_NO_CHECK(context.extent2))); } else { area = getPseudoArea(extentOp); } } constexpr double HALF_RATIO = 0.5; if (area > HALF_RATIO * targetArea) { tooSmallAreas = false; break; } } } } if ((res.empty() || tooSmallAreas) && !context.inCreateOperationsWithDatumPivotAntiRecursion && !resFindDirectNonEmptyBeforeFiltering && geodSrc && geodDst && !sameGeodeticDatum && context.context->getIntermediateCRS().empty() && context.context->getAllowUseIntermediateCRS() != CoordinateOperationContext::IntermediateCRSUse::NEVER) { // Currently triggered by "IG05/12 Intermediate CRS" to ITRF2014 std::set oSetNames; if (tooSmallAreas) { for (const auto &op : res) { oSetNames.insert(op->nameStr()); } } auto resWithIntermediate = findsOpsInRegistryWithIntermediate( sourceCRS, targetCRS, context, true); if (tooSmallAreas && !res.empty()) { // Only insert operations we didn't already find for (const auto &op : resWithIntermediate) { if (oSetNames.find(op->nameStr()) == oSetNames.end()) { res.emplace_back(op); } } } else { res.insert(res.end(), resWithIntermediate.begin(), resWithIntermediate.end()); } doFilterAndCheckPerfectOp = !res.empty(); } if (doFilterAndCheckPerfectOp) { // If we get at least a result with perfect accuracy, do not bother // generating synthetic transforms. if (hasPerfectAccuracyResult(res, context)) { return true; } } return false; } // --------------------------------------------------------------------------- static std::vector findCandidateVertCRSForDatum(const io::AuthorityFactoryPtr &authFactory, const datum::VerticalReferenceFrame *datum) { std::vector candidates; assert(datum); const auto &ids = datum->identifiers(); const auto &datumName = datum->nameStr(); if (!ids.empty()) { for (const auto &id : ids) { const auto &authName = *(id->codeSpace()); const auto &code = id->code(); if (!authName.empty()) { auto l_candidates = authFactory->createVerticalCRSFromDatum(authName, code); for (const auto &candidate : l_candidates) { candidates.emplace_back(candidate); } } } } else if (datumName != "unknown" && datumName != "unnamed") { auto matches = authFactory->createObjectsFromName( datumName, {io::AuthorityFactory::ObjectType::VERTICAL_REFERENCE_FRAME}, false, 2); if (matches.size() == 1) { const auto &match = matches.front(); if (datum->_isEquivalentTo( match.get(), util::IComparable::Criterion::EQUIVALENT, authFactory->databaseContext().as_nullable()) && !match->identifiers().empty()) { return findCandidateVertCRSForDatum( authFactory, dynamic_cast( match.get())); } } } return candidates; } // --------------------------------------------------------------------------- std::vector CoordinateOperationFactory::Private::createOperationsGeogToVertFromGeoid( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const crs::VerticalCRS *vertDst, Private::Context &context) { ENTER_FUNCTION(); const auto useTransf = [&sourceCRS, &targetCRS, &context, vertDst](const CoordinateOperationNNPtr &op) { // If the source geographic CRS has a non-metre vertical unit, we need // to create an intermediate and operation to do the vertical unit // conversion from that vertical unit to the one of the geographic CRS // of the source of the operation const auto geogCRS = dynamic_cast(sourceCRS.get()); assert(geogCRS); const auto &srcAxisList = geogCRS->coordinateSystem()->axisList(); CoordinateOperationPtr opPtr; const auto opSourceCRSGeog = dynamic_cast(op->sourceCRS().get()); // I assume opSourceCRSGeog should always be null in practice... if (opSourceCRSGeog && srcAxisList.size() == 3 && srcAxisList[2]->unit().conversionToSI() != 1) { const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; auto tmpCRSWithSrcZ = opSourceCRSGeog->demoteTo2D(std::string(), dbContext) ->promoteTo3D(std::string(), dbContext, srcAxisList[2]); std::vector opsUnitConvert; createOperationsGeogToGeog( opsUnitConvert, tmpCRSWithSrcZ, NN_NO_CHECK(op->sourceCRS()), context, dynamic_cast(tmpCRSWithSrcZ.get()), opSourceCRSGeog, /*forceBallpark=*/false); assert(opsUnitConvert.size() == 1); opPtr = opsUnitConvert.front().as_nullable(); } std::vector ops; if (opPtr) ops.emplace_back(NN_NO_CHECK(opPtr)); ops.emplace_back(op); const auto targetOp = dynamic_cast(op->targetCRS().get()); assert(targetOp); if (targetOp->_isEquivalentTo( vertDst, util::IComparable::Criterion::EQUIVALENT)) { auto ret = ConcatenatedOperation::createComputeMetadata( ops, disallowEmptyIntersection); return ret; } std::vector tmp; createOperationsVertToVert(NN_NO_CHECK(op->targetCRS()), targetCRS, context, targetOp, vertDst, tmp); assert(!tmp.empty()); ops.emplace_back(tmp.front()); auto ret = ConcatenatedOperation::createComputeMetadata( ops, disallowEmptyIntersection); return ret; }; const auto getProjGeoidTransformation = [&sourceCRS, &targetCRS, &vertDst, &context](const CoordinateOperationNNPtr &model, const std::string &projFilename) { const auto getNameVertCRSMetre = [](const std::string &name) { if (name.empty()) return std::string("unnamed"); auto ret(name); bool haveOriginalUnit = false; if (name.back() == ')') { const auto pos = ret.rfind(" ("); if (pos != std::string::npos) { haveOriginalUnit = true; ret = ret.substr(0, pos); } } const auto pos = ret.rfind(" depth"); if (pos != std::string::npos) { ret = ret.substr(0, pos) + " height"; } if (!haveOriginalUnit) { ret += " (metre)"; } return ret; }; const auto &axis = vertDst->coordinateSystem()->axisList()[0]; const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const auto geogSrcCRS = dynamic_cast( model->interpolationCRS().get()) ? NN_NO_CHECK(model->interpolationCRS()) : sourceCRS->demoteTo2D(std::string(), dbContext) ->promoteTo3D(std::string(), dbContext); const auto vertCRSMetre = axis->unit() == common::UnitOfMeasure::METRE && axis->direction() == cs::AxisDirection::UP ? targetCRS : util::nn_static_pointer_cast( crs::VerticalCRS::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, getNameVertCRSMetre(targetCRS->nameStr())), vertDst->datum(), vertDst->datumEnsemble(), cs::VerticalCS::createGravityRelatedHeight( common::UnitOfMeasure::METRE))); auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, buildOpName("Transformation", vertCRSMetre, geogSrcCRS)); // Try to find a representative value for the accuracy of this grid // from the registered transformations. std::vector accuracies; const auto &modelAccuracies = model->coordinateOperationAccuracies(); std::vector transformationsForGrid; if (authFactory) { transformationsForGrid = io::DatabaseContext::getTransformationsForGridName( authFactory->databaseContext(), projFilename); } // Only select transformations whose datum of the target vertical // CRS match the one of the target vertical CRS of interest (when // there's such match) Helps for example if specifying GEOID // g2012bp0 whose has a record for Puerto Rico and another one for // Virgin Islands. { std::vector transformationsForGridMatchingDatum; for (const auto &op : transformationsForGrid) { const auto opTargetCRS = dynamic_cast( op->targetCRS().get()); if (opTargetCRS && opTargetCRS->datumNonNull(dbContext)->_isEquivalentTo( vertDst->datumNonNull(dbContext).get(), util::IComparable::Criterion::EQUIVALENT)) { transformationsForGridMatchingDatum.push_back(op); } } if (!transformationsForGridMatchingDatum.empty()) { transformationsForGrid = std::move(transformationsForGridMatchingDatum); } } double accuracy = -1; size_t idx = static_cast(-1); if (modelAccuracies.empty()) { if (authFactory) { for (size_t i = 0; i < transformationsForGrid.size(); ++i) { const auto &transf = transformationsForGrid[i]; const double transfAcc = getAccuracy(transf); if (transfAcc - accuracy > 1e-10) { accuracy = transfAcc; idx = i; } } if (accuracy >= 0) { accuracies.emplace_back( metadata::PositionalAccuracy::create( toString(accuracy))); } } } // Set extent bool dummy = false; // Use in priority the one of the geoid model transformation auto extent = getExtent(model, true, dummy); // Otherwise fallback to the extent of a transformation using // the grid. if (extent == nullptr && authFactory != nullptr) { if (idx != static_cast(-1)) { const auto &transf = transformationsForGrid[idx]; extent = getExtent(transf, true, dummy); } else if (!transformationsForGrid.empty()) { const auto &transf = transformationsForGrid.front(); extent = getExtent(transf, true, dummy); } } if (extent) { properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } return Transformation::createGravityRelatedHeightToGeographic3D( properties, vertCRSMetre, geogSrcCRS, nullptr, projFilename, !modelAccuracies.empty() ? modelAccuracies : accuracies); }; std::vector res; const auto &authFactory = context.context->getAuthorityFactory(); if (authFactory) { const auto &models = vertDst->geoidModel(); for (const auto &model : models) { const auto &modelName = model->nameStr(); const auto &modelIds = model->identifiers(); const std::vector transformations( !modelIds.empty() ? std::vector< CoordinateOperationNNPtr>{io::AuthorityFactory::create( authFactory ->databaseContext(), *(modelIds[0] ->codeSpace())) ->createCoordinateOperation( modelIds[0]->code(), true)} : starts_with(modelName, "PROJ ") ? std::vector< CoordinateOperationNNPtr>{getProjGeoidTransformation( model, modelName.substr(strlen("PROJ ")))} : authFactory->getTransformationsForGeoid( modelName, context.context->getUsePROJAlternativeGridNames())); for (const auto &transf : transformations) { if (dynamic_cast( transf->sourceCRS().get()) && dynamic_cast( transf->targetCRS().get())) { res.push_back(useTransf(transf)); } else if (dynamic_cast( transf->targetCRS().get()) && dynamic_cast( transf->sourceCRS().get())) { res.push_back(useTransf(transf->inverse())); } } } } return res; } // --------------------------------------------------------------------------- std::vector CoordinateOperationFactory::Private:: createOperationsGeogToVertWithIntermediateVert( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, const crs::VerticalCRS *vertDst, Private::Context &context) { ENTER_FUNCTION(); std::vector res; struct AntiRecursionGuard { Context &context; explicit AntiRecursionGuard(Context &contextIn) : context(contextIn) { assert(!context.inCreateOperationsGeogToVertWithIntermediateVert); context.inCreateOperationsGeogToVertWithIntermediateVert = true; } ~AntiRecursionGuard() { context.inCreateOperationsGeogToVertWithIntermediateVert = false; } }; AntiRecursionGuard guard(context); const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory->databaseContext().as_nullable(); auto candidatesVert = findCandidateVertCRSForDatum( authFactory, vertDst->datumNonNull(dbContext).get()); for (const auto &candidateVert : candidatesVert) { auto resTmp = createOperations(sourceCRS, sourceEpoch, candidateVert, sourceEpoch, context); if (!resTmp.empty()) { const auto opsSecond = createOperations( candidateVert, sourceEpoch, targetCRS, targetEpoch, context); if (!opsSecond.empty()) { // The transformation from candidateVert to targetCRS should // be just a unit change typically, so take only the first one, // which is likely/hopefully the only one. for (const auto &opFirst : resTmp) { if (hasIdentifiers(opFirst)) { if (candidateVert->_isEquivalentTo( targetCRS.get(), util::IComparable::Criterion::EQUIVALENT)) { res.emplace_back(opFirst); } else { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opFirst, opsSecond.front()}, disallowEmptyIntersection)); } } } if (!res.empty()) break; } } } return res; } // --------------------------------------------------------------------------- std::vector CoordinateOperationFactory::Private:: createOperationsGeogToVertWithAlternativeGeog( const crs::CRSNNPtr &sourceCRS, // geographic CRS const crs::CRSNNPtr &targetCRS, // vertical CRS Private::Context &context) { ENTER_FUNCTION(); std::vector res; struct AntiRecursionGuard { Context &context; explicit AntiRecursionGuard(Context &contextIn) : context(contextIn) { assert(!context.inCreateOperationsGeogToVertWithAlternativeGeog); context.inCreateOperationsGeogToVertWithAlternativeGeog = true; } ~AntiRecursionGuard() { context.inCreateOperationsGeogToVertWithAlternativeGeog = false; } }; AntiRecursionGuard guard(context); // Generally EPSG has operations from GeogCrs to VertCRS auto ops = findOpsInRegistryDirectTo(targetCRS, context); const auto geogCRS = dynamic_cast(sourceCRS.get()); assert(geogCRS); const auto &srcAxisList = geogCRS->coordinateSystem()->axisList(); for (const auto &op : ops) { const auto tmpCRS = dynamic_cast(op->sourceCRS().get()); if (tmpCRS) { if (srcAxisList.size() == 3 && srcAxisList[2]->unit().conversionToSI() != 1) { const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory->databaseContext().as_nullable(); auto tmpCRSWithSrcZ = tmpCRS->demoteTo2D(std::string(), dbContext) ->promoteTo3D(std::string(), dbContext, srcAxisList[2]); std::vector opsUnitConvert; createOperationsGeogToGeog( opsUnitConvert, tmpCRSWithSrcZ, NN_NO_CHECK(op->sourceCRS()), context, dynamic_cast( tmpCRSWithSrcZ.get()), tmpCRS, /*forceBallpark=*/false); assert(opsUnitConvert.size() == 1); auto concat = ConcatenatedOperation::createComputeMetadata( {opsUnitConvert.front(), op}, disallowEmptyIntersection); res.emplace_back(concat); } else { res.emplace_back(op); } } } return res; } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private:: createOperationsFromDatabaseWithVertCRS( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeographicCRS *geogSrc, const crs::GeographicCRS *geogDst, const crs::VerticalCRS *vertSrc, const crs::VerticalCRS *vertDst, std::vector &res) { // Typically to transform from "NAVD88 height (ftUS)" to a geog CRS // by using transformations of "NAVD88 height" (metre) to that geog CRS if (res.empty() && !context.inCreateOperationsGeogToVertWithIntermediateVert && geogSrc && vertDst) { res = createOperationsGeogToVertWithIntermediateVert( sourceCRS, sourceEpoch, targetCRS, targetEpoch, vertDst, context); } else if (res.empty() && !context.inCreateOperationsGeogToVertWithIntermediateVert && geogDst && vertSrc) { res = applyInverse(createOperationsGeogToVertWithIntermediateVert( targetCRS, targetEpoch, sourceCRS, sourceEpoch, vertSrc, context)); } // NAD83 only exists in 2D version in EPSG, so if it has been // promoted to 3D, when researching a vertical to geog // transformation, try to down cast to 2D. const auto geog3DToVertTryThroughGeog2D = [&res, &context](const crs::GeographicCRS *geogSrcIn, const crs::VerticalCRS *vertDstIn, const crs::CRSNNPtr &targetCRSIn) { const auto &authFactory = context.context->getAuthorityFactory(); if (res.empty() && geogSrcIn && vertDstIn && authFactory && geogSrcIn->coordinateSystem()->axisList().size() == 3) { const auto &dbContext = authFactory->databaseContext(); const auto candidatesSrcGeod(findCandidateGeodCRSForDatum( authFactory, geogSrcIn, geogSrcIn->datumNonNull(dbContext))); for (const auto &candidate : candidatesSrcGeod) { auto geogCandidate = util::nn_dynamic_pointer_cast( candidate); if (geogCandidate && geogCandidate->coordinateSystem()->axisList().size() == 2) { bool ignored; res = findOpsInRegistryDirect( NN_NO_CHECK(geogCandidate), targetCRSIn, context, ignored); break; } } return true; } return false; }; if (geog3DToVertTryThroughGeog2D(geogSrc, vertDst, targetCRS)) { // do nothing } else if (geog3DToVertTryThroughGeog2D(geogDst, vertSrc, sourceCRS)) { res = applyInverse(res); } // There's no direct transformation from NAVD88 height to WGS84, // so try to research all transformations from NAVD88 to another // intermediate GeographicCRS. if (res.empty() && !context.inCreateOperationsGeogToVertWithAlternativeGeog && geogSrc && vertDst) { res = createOperationsGeogToVertWithAlternativeGeog(sourceCRS, targetCRS, context); } else if (res.empty() && !context.inCreateOperationsGeogToVertWithAlternativeGeog && geogDst && vertSrc) { res = applyInverse(createOperationsGeogToVertWithAlternativeGeog( targetCRS, sourceCRS, context)); } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsGeodToGeod( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst, std::vector &res, bool forceBallpark) { ENTER_FUNCTION(); const auto &srcEllps = geodSrc->ellipsoid(); const auto &dstEllps = geodDst->ellipsoid(); if (srcEllps->celestialBody() == dstEllps->celestialBody() && srcEllps->celestialBody() != NON_EARTH_BODY) { // Same celestial body, with a known name (that is not the generic // NON_EARTH_BODY used when we can't guess it) ==> compatible } else if ((srcEllps->celestialBody() != dstEllps->celestialBody() && srcEllps->celestialBody() != NON_EARTH_BODY && dstEllps->celestialBody() != NON_EARTH_BODY) || std::fabs(srcEllps->semiMajorAxis().getSIValue() - dstEllps->semiMajorAxis().getSIValue()) > REL_ERROR_FOR_SAME_CELESTIAL_BODY * dstEllps->semiMajorAxis().getSIValue()) { const char *envVarVal = getenv("PROJ_IGNORE_CELESTIAL_BODY"); if (envVarVal == nullptr || ci_equal(envVarVal, "NO") || ci_equal(envVarVal, "FALSE") || ci_equal(envVarVal, "OFF")) { std::string osMsg( "Source and target ellipsoid do not belong to the same " "celestial body ("); osMsg += srcEllps->celestialBody(); osMsg += " vs "; osMsg += dstEllps->celestialBody(); osMsg += ")."; if (envVarVal == nullptr) { osMsg += " You may override this check by setting the " "PROJ_IGNORE_CELESTIAL_BODY environment variable " "to YES."; } throw util::UnsupportedOperationException(osMsg.c_str()); } } auto geogSrc = dynamic_cast(geodSrc); auto geogDst = dynamic_cast(geodDst); if (geogSrc && geogDst) { createOperationsGeogToGeog(res, sourceCRS, targetCRS, context, geogSrc, geogDst, forceBallpark); return; } const bool isSrcGeocentric = geodSrc->isGeocentric(); const bool isSrcGeographic = geogSrc != nullptr; const bool isTargetGeocentric = geodDst->isGeocentric(); const bool isTargetGeographic = geogDst != nullptr; const auto IsSameDatum = [&context, &geodSrc, &geodDst]() { const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; return geodSrc->datumNonNull(dbContext)->_isEquivalentTo( geodDst->datumNonNull(dbContext).get(), util::IComparable::Criterion::EQUIVALENT); }; if (((isSrcGeocentric && isTargetGeographic) || (isSrcGeographic && isTargetGeocentric))) { // Same datum ? if (IsSameDatum()) { if (forceBallpark) { auto op = createGeodToGeodPROJBased(sourceCRS, targetCRS); op->setHasBallparkTransformation(true); res.emplace_back(op); } else { res.emplace_back(Conversion::createGeographicGeocentric( sourceCRS, targetCRS)); } } else if (isSrcGeocentric && geogDst) { #if 0 // The below logic was used between PROJ >= 6.0 and < 9.2 // It assumed that the geocentric origin of the 2 datums // matched. std::string interm_crs_name(geogDst->nameStr()); interm_crs_name += " (geocentric)"; auto interm_crs = util::nn_static_pointer_cast(crs::GeodeticCRS::create( addDomains(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, interm_crs_name), geogDst), geogDst->datum(), geogDst->datumEnsemble(), NN_CHECK_ASSERT( util::nn_dynamic_pointer_cast( geodSrc->coordinateSystem())))); auto opFirst = createBallparkGeocentricTranslation(sourceCRS, interm_crs); auto opSecond = Conversion::createGeographicGeocentric(interm_crs, targetCRS); #else // The below logic is used since PROJ >= 9.2. It emulates the // behavior of PROJ < 6 by converting from the source geocentric CRS // to its corresponding geographic CRS, and then doing a null // geographic offset between that CRS and the target geographic CRS std::string interm_crs_name(geodSrc->nameStr()); interm_crs_name += " (geographic)"; auto interm_crs = util::nn_static_pointer_cast( crs::GeographicCRS::create( addDomains(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, interm_crs_name), geodSrc), geodSrc->datum(), geodSrc->datumEnsemble(), cs::EllipsoidalCS::createLongitudeLatitudeEllipsoidalHeight( common::UnitOfMeasure::DEGREE, common::UnitOfMeasure::METRE))); auto opFirst = Conversion::createGeographicGeocentric(sourceCRS, interm_crs); auto opsSecond = createOperations( interm_crs, util::optional(), targetCRS, util::optional(), context); for (const auto &opSecond : opsSecond) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opFirst, opSecond}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } #endif } else { // Apply previous case in reverse way std::vector resTmp; createOperationsGeodToGeod(targetCRS, sourceCRS, context, geodDst, geodSrc, resTmp, forceBallpark); resTmp = applyInverse(resTmp); res.insert(res.end(), resTmp.begin(), resTmp.end()); } return; } if (isSrcGeocentric && isTargetGeocentric) { if (!forceBallpark && (sourceCRS->_isEquivalentTo( targetCRS.get(), util::IComparable::Criterion::EQUIVALENT) || IsSameDatum())) { std::string name(NULL_GEOCENTRIC_TRANSLATION); name += " from "; name += sourceCRS->nameStr(); name += " to "; name += targetCRS->nameStr(); res.emplace_back(Transformation::createGeocentricTranslations( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), sourceCRS, targetCRS, 0.0, 0.0, 0.0, {metadata::PositionalAccuracy::create("0")})); } else { res.emplace_back( createBallparkGeocentricTranslation(sourceCRS, targetCRS)); } return; } // Transformation between two geodetic systems of unknown type // This should normally not be triggered with "standard" CRS res.emplace_back(createGeodToGeodPROJBased(sourceCRS, targetCRS)); } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private:: createOperationsFromSphericalPlanetocentric( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeodeticCRS *geodSrc, std::vector &res) { ENTER_FUNCTION(); const auto IsSameDatum = [&context, &geodSrc](const crs::GeodeticCRS *geodDst) { const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; return geodSrc->datumNonNull(dbContext)->_isEquivalentTo( geodDst->datumNonNull(dbContext).get(), util::IComparable::Criterion::EQUIVALENT); }; auto geogDst = dynamic_cast(targetCRS.get()); if (geogDst && IsSameDatum(geogDst)) { res.emplace_back(Conversion::createGeographicGeocentricLatitude( sourceCRS, targetCRS)); return; } // Create an intermediate geographic CRS with the same datum as the // source spherical planetocentric one std::string interm_crs_name(geodSrc->nameStr()); interm_crs_name += " (geographic)"; auto interm_crs = util::nn_static_pointer_cast(crs::GeographicCRS::create( addDomains(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, interm_crs_name), geodSrc), geodSrc->datum(), geodSrc->datumEnsemble(), cs::EllipsoidalCS::createLatitudeLongitude( common::UnitOfMeasure::DEGREE))); auto opFirst = Conversion::createGeographicGeocentricLatitude(sourceCRS, interm_crs); auto opsSecond = createOperations(interm_crs, sourceEpoch, targetCRS, targetEpoch, context); for (const auto &opSecond : opsSecond) { try { res.emplace_back(ConcatenatedOperation::createComputeMetadata( {opFirst, opSecond}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private:: createOperationsFromBoundOfSphericalPlanetocentric( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::GeodeticCRSNNPtr &geodSrcBase, std::vector &res) { ENTER_FUNCTION(); // Create an intermediate geographic CRS with the same datum as the // source spherical planetocentric one std::string interm_crs_name(geodSrcBase->nameStr()); interm_crs_name += " (geographic)"; auto intermGeog = util::nn_static_pointer_cast(crs::GeographicCRS::create( addDomains(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, interm_crs_name), geodSrcBase.get()), geodSrcBase->datum(), geodSrcBase->datumEnsemble(), cs::EllipsoidalCS::createLatitudeLongitude( common::UnitOfMeasure::DEGREE))); // Create an intermediate boundCRS wrapping the above intermediate // geographic CRS auto transf = boundSrc->transformation()->shallowClone(); // keep a reference to the target before patching it with itself // (this is due to our abuse of passing shared_ptr by reference auto transfTarget = transf->targetCRS(); setCRSs(transf.get(), intermGeog, transfTarget); auto intermBoundCRS = crs::BoundCRS::create(intermGeog, boundSrc->hubCRS(), transf); auto opFirst = Conversion::createGeographicGeocentricLatitude(geodSrcBase, intermGeog); setCRSs(opFirst.get(), sourceCRS, intermBoundCRS); auto opsSecond = createOperations( intermBoundCRS, util::optional(), targetCRS, util::optional(), context); for (const auto &opSecond : opsSecond) { try { auto opSecondClone = opSecond->shallowClone(); // In theory, we should not need that setCRSs() forcing, but due // how BoundCRS transformations are implemented currently, we // need it in practice. setCRSs(opSecondClone.get(), intermBoundCRS, targetCRS); res.emplace_back(ConcatenatedOperation::createComputeMetadata( {opFirst, std::move(opSecondClone)}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsDerivedTo( const crs::CRSNNPtr & /*sourceCRS*/, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::DerivedCRS *derivedSrc, std::vector &res) { ENTER_FUNCTION(); auto opFirst = derivedSrc->derivingConversion()->inverse(); // Small optimization if the targetCRS is the baseCRS of the source // derivedCRS. if (derivedSrc->baseCRS()->_isEquivalentTo( targetCRS.get(), util::IComparable::Criterion::EQUIVALENT)) { res.emplace_back(opFirst); return; } auto opsSecond = createOperations(derivedSrc->baseCRS(), sourceEpoch, targetCRS, targetEpoch, context); // Optimization to remove a no-op "Conversion from WGS 84 to WGS 84" // when transforming from EPSG:4979 to a CompoundCRS whose vertical CRS // is a DerivedVerticalCRS of a datum with ellipsoid height. if (opsSecond.size() == 1 && !opsSecond.front()->hasBallparkTransformation() && dynamic_cast(derivedSrc->baseCRS().get()) && !dynamic_cast(derivedSrc->baseCRS().get()) && dynamic_cast(targetCRS.get()) && !dynamic_cast(targetCRS.get())) { auto conv = dynamic_cast(opsSecond.front().get()); if (conv && conv->nameStr() == buildConvName(targetCRS->nameStr(), targetCRS->nameStr()) && conv->method()->getEPSGCode() == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT && conv->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR) == 1.0) { res.emplace_back(opFirst); return; } } for (const auto &opSecond : opsSecond) { try { res.emplace_back(ConcatenatedOperation::createComputeMetadata( {opFirst, opSecond}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsBoundToGeog( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::GeographicCRS *geogDst, std::vector &res) { ENTER_FUNCTION(); const auto &hubSrc = boundSrc->hubCRS(); auto hubSrcGeog = dynamic_cast(hubSrc.get()); auto geogCRSOfBaseOfBoundSrc = boundSrc->baseCRS()->extractGeographicCRS(); { // If geogCRSOfBaseOfBoundSrc is a DerivedGeographicCRS, use its base // instead (if it is a GeographicCRS) auto derivedGeogCRS = std::dynamic_pointer_cast( geogCRSOfBaseOfBoundSrc); if (derivedGeogCRS) { auto baseCRS = std::dynamic_pointer_cast( derivedGeogCRS->baseCRS().as_nullable()); if (baseCRS) { geogCRSOfBaseOfBoundSrc = std::move(baseCRS); } } } const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const auto geogDstDatum = geogDst->datumNonNull(dbContext); // If the underlying datum of the source is the same as the target, do // not consider the boundCRS at all, but just its base if (geogCRSOfBaseOfBoundSrc) { auto geogCRSOfBaseOfBoundSrcDatum = geogCRSOfBaseOfBoundSrc->datumNonNull(dbContext); if (geogCRSOfBaseOfBoundSrcDatum->_isEquivalentTo( geogDstDatum.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { res = createOperations( boundSrc->baseCRS(), util::optional(), targetCRS, util::optional(), context); return; } } bool triedBoundCrsToGeogCRSSameAsHubCRS = false; // Is it: boundCRS to a geogCRS that is the same as the hubCRS ? if (hubSrcGeog && geogCRSOfBaseOfBoundSrc && (hubSrcGeog->_isEquivalentTo( geogDst, util::IComparable::Criterion::EQUIVALENT) || hubSrcGeog->is2DPartOf3D(NN_NO_CHECK(geogDst), dbContext))) { triedBoundCrsToGeogCRSSameAsHubCRS = true; CoordinateOperationPtr opIntermediate; if (!geogCRSOfBaseOfBoundSrc->_isEquivalentTo( boundSrc->transformation()->sourceCRS().get(), util::IComparable::Criterion::EQUIVALENT)) { auto opsIntermediate = createOperations(NN_NO_CHECK(geogCRSOfBaseOfBoundSrc), util::optional(), boundSrc->transformation()->sourceCRS(), util::optional(), context); assert(!opsIntermediate.empty()); opIntermediate = opsIntermediate.front(); } if (boundSrc->baseCRS() == geogCRSOfBaseOfBoundSrc) { if (opIntermediate) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {NN_NO_CHECK(opIntermediate), boundSrc->transformation()}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } else { // Optimization to avoid creating a useless concatenated // operation res.emplace_back(boundSrc->transformation()); } return; } auto opsFirst = createOperations( boundSrc->baseCRS(), util::optional(), NN_NO_CHECK(geogCRSOfBaseOfBoundSrc), util::optional(), context); if (!opsFirst.empty()) { for (const auto &opFirst : opsFirst) { try { std::vector subops; subops.emplace_back(opFirst); if (opIntermediate) { subops.emplace_back(NN_NO_CHECK(opIntermediate)); } subops.emplace_back(boundSrc->transformation()); res.emplace_back( ConcatenatedOperation::createComputeMetadata( subops, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } if (!res.empty()) { return; } } // If the datum are equivalent, this is also fine } else if (geogCRSOfBaseOfBoundSrc && hubSrcGeog && hubSrcGeog->datumNonNull(dbContext)->_isEquivalentTo( geogDstDatum.get(), util::IComparable::Criterion::EQUIVALENT)) { auto opsFirst = createOperations( boundSrc->baseCRS(), util::optional(), NN_NO_CHECK(geogCRSOfBaseOfBoundSrc), util::optional(), context); auto opsLast = createOperations( hubSrc, util::optional(), targetCRS, util::optional(), context); if (!opsFirst.empty() && !opsLast.empty()) { CoordinateOperationPtr opIntermediate; if (!geogCRSOfBaseOfBoundSrc->_isEquivalentTo( boundSrc->transformation()->sourceCRS().get(), util::IComparable::Criterion::EQUIVALENT)) { auto opsIntermediate = createOperations( NN_NO_CHECK(geogCRSOfBaseOfBoundSrc), util::optional(), boundSrc->transformation()->sourceCRS(), util::optional(), context); assert(!opsIntermediate.empty()); opIntermediate = opsIntermediate.front(); } for (const auto &opFirst : opsFirst) { for (const auto &opLast : opsLast) { try { std::vector subops; subops.emplace_back(opFirst); if (opIntermediate) { subops.emplace_back(NN_NO_CHECK(opIntermediate)); } subops.emplace_back(boundSrc->transformation()); subops.emplace_back(opLast); res.emplace_back( ConcatenatedOperation::createComputeMetadata( subops, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } if (!res.empty()) { return; } } // Consider WGS 84 and NAD83 as equivalent in that context if the // geogCRSOfBaseOfBoundSrc ellipsoid is Clarke66 (for NAD27) // Case of "+proj=latlong +ellps=clrk66 // +nadgrids=ntv1_can.dat,conus" // to "+proj=latlong +datum=NAD83" } else if (geogCRSOfBaseOfBoundSrc && hubSrcGeog && geogCRSOfBaseOfBoundSrc->ellipsoid()->_isEquivalentTo( datum::Ellipsoid::CLARKE_1866.get(), util::IComparable::Criterion::EQUIVALENT, dbContext) && hubSrcGeog->datumNonNull(dbContext)->_isEquivalentTo( datum::GeodeticReferenceFrame::EPSG_6326.get(), util::IComparable::Criterion::EQUIVALENT, dbContext) && geogDstDatum->_isEquivalentTo( datum::GeodeticReferenceFrame::EPSG_6269.get(), util::IComparable::Criterion::EQUIVALENT, dbContext)) { auto nnGeogCRSOfBaseOfBoundSrc = NN_NO_CHECK(geogCRSOfBaseOfBoundSrc); if (boundSrc->baseCRS()->_isEquivalentTo( nnGeogCRSOfBaseOfBoundSrc.get(), util::IComparable::Criterion::EQUIVALENT)) { auto transf = boundSrc->transformation()->shallowClone(); transf->setProperties(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, buildTransfName(boundSrc->baseCRS()->nameStr(), targetCRS->nameStr()))); transf->setCRSs(boundSrc->baseCRS(), targetCRS, nullptr); res.emplace_back(transf); return; } else { auto opsFirst = createOperations( boundSrc->baseCRS(), util::optional(), nnGeogCRSOfBaseOfBoundSrc, util::optional(), context); auto transf = boundSrc->transformation()->shallowClone(); transf->setProperties(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, buildTransfName(nnGeogCRSOfBaseOfBoundSrc->nameStr(), targetCRS->nameStr()))); transf->setCRSs(nnGeogCRSOfBaseOfBoundSrc, targetCRS, nullptr); if (!opsFirst.empty()) { for (const auto &opFirst : opsFirst) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opFirst, transf}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } if (!res.empty()) { return; } } } } if (hubSrcGeog && hubSrcGeog->_isEquivalentTo(geogDst, util::IComparable::Criterion::EQUIVALENT) && dynamic_cast(boundSrc->baseCRS().get())) { auto transfSrc = boundSrc->transformation()->sourceCRS(); if (dynamic_cast(transfSrc.get()) && !boundSrc->baseCRS()->_isEquivalentTo( transfSrc.get(), util::IComparable::Criterion::EQUIVALENT)) { auto opsFirst = createOperations( boundSrc->baseCRS(), util::optional(), transfSrc, util::optional(), context); for (const auto &opFirst : opsFirst) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opFirst, boundSrc->transformation()}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } return; } res.emplace_back(boundSrc->transformation()); return; } if (!triedBoundCrsToGeogCRSSameAsHubCRS && hubSrcGeog && geogCRSOfBaseOfBoundSrc) { // This one should go to the above 'Is it: boundCRS to a geogCRS // that is the same as the hubCRS ?' case auto opsFirst = createOperations( sourceCRS, util::optional(), hubSrc, util::optional(), context); auto opsLast = createOperations( hubSrc, util::optional(), targetCRS, util::optional(), context); if (!opsFirst.empty() && !opsLast.empty()) { for (const auto &opFirst : opsFirst) { for (const auto &opLast : opsLast) { // Exclude artificial transformations from the hub // to the target CRS, if it is the only one. if (opsLast.size() > 1 || !opLast->hasBallparkTransformation()) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opFirst, opLast}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } else { // std::cerr << "excluded " << opLast->nameStr() << // std::endl; } } } if (!res.empty()) { return; } } } auto vertCRSOfBaseOfBoundSrc = dynamic_cast(boundSrc->baseCRS().get()); // The test for hubSrcGeog not being a DerivedCRS is to avoid infinite // recursion in a scenario involving a // BoundCRS[SourceCRS[VertCRS],TargetCRS[DerivedGeographicCRS]] to a // GeographicCRS if (vertCRSOfBaseOfBoundSrc && hubSrcGeog && dynamic_cast(hubSrcGeog) == nullptr) { auto opsFirst = createOperations( sourceCRS, util::optional(), hubSrc, util::optional(), context); if (context.skipHorizontalTransformation) { if (!opsFirst.empty()) { const auto &hubAxisList = hubSrcGeog->coordinateSystem()->axisList(); const auto &targetAxisList = geogDst->coordinateSystem()->axisList(); if (hubAxisList.size() == 3 && targetAxisList.size() == 3 && !hubAxisList[2]->_isEquivalentTo( targetAxisList[2].get(), util::IComparable::Criterion::EQUIVALENT)) { const auto &srcAxis = hubAxisList[2]; const double convSrc = srcAxis->unit().conversionToSI(); const auto &dstAxis = targetAxisList[2]; const double convDst = dstAxis->unit().conversionToSI(); const bool srcIsUp = srcAxis->direction() == cs::AxisDirection::UP; const bool srcIsDown = srcAxis->direction() == cs::AxisDirection::DOWN; const bool dstIsUp = dstAxis->direction() == cs::AxisDirection::UP; const bool dstIsDown = dstAxis->direction() == cs::AxisDirection::DOWN; const bool heightDepthReversal = ((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp)); if (convDst == 0) throw InvalidOperation( "Conversion factor of target unit is 0"); const double factor = convSrc / convDst; auto conv = Conversion::createChangeVerticalUnit( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, "Change of vertical unit"), common::Scale(heightDepthReversal ? -factor : factor)); conv->setCRSs( hubSrc, hubSrc->demoteTo2D(std::string(), dbContext) ->promoteTo3D(std::string(), dbContext, dstAxis), nullptr); for (const auto &op : opsFirst) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {op, conv}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } else { res = std::move(opsFirst); } } return; } else { auto opsSecond = createOperations( hubSrc, util::optional(), targetCRS, util::optional(), context); if (!opsFirst.empty() && !opsSecond.empty()) { for (const auto &opFirst : opsFirst) { for (const auto &opLast : opsSecond) { // Exclude artificial transformations from the hub // to the target CRS if (!opLast->hasBallparkTransformation()) { try { res.emplace_back( ConcatenatedOperation:: createComputeMetadata( {opFirst, opLast}, disallowEmptyIntersection)); } catch ( const InvalidOperationEmptyIntersection &) { } } else { // std::cerr << "excluded " << opLast->nameStr() << // std::endl; } } } if (!res.empty()) { return; } } } } res = createOperations(boundSrc->baseCRS(), util::optional(), targetCRS, util::optional(), context); } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsBoundToVert( const crs::CRSNNPtr & /*sourceCRS*/, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::VerticalCRS *vertDst, std::vector &res) { ENTER_FUNCTION(); auto baseSrcVert = dynamic_cast(boundSrc->baseCRS().get()); const auto &hubSrc = boundSrc->hubCRS(); auto hubSrcVert = dynamic_cast(hubSrc.get()); if (baseSrcVert && hubSrcVert && vertDst->_isEquivalentTo(hubSrcVert, util::IComparable::Criterion::EQUIVALENT)) { res.emplace_back(boundSrc->transformation()); return; } res = createOperations(boundSrc->baseCRS(), util::optional(), targetCRS, util::optional(), context); } // --------------------------------------------------------------------------- static std::string getBallparkTransformationVertToVert(const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { auto name = buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr()); name += " ("; name += BALLPARK_VERTICAL_TRANSFORMATION; name += ')'; return name; } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsVertToVert( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::VerticalCRS *vertSrc, const crs::VerticalCRS *vertDst, std::vector &res) { ENTER_FUNCTION(); const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const auto srcDatum = vertSrc->datumNonNull(dbContext); const auto dstDatum = vertDst->datumNonNull(dbContext); const bool equivalentVDatum = srcDatum->_isEquivalentTo( dstDatum.get(), util::IComparable::Criterion::EQUIVALENT, dbContext); const auto &srcAxis = vertSrc->coordinateSystem()->axisList()[0]; const double convSrc = srcAxis->unit().conversionToSI(); const auto &dstAxis = vertDst->coordinateSystem()->axisList()[0]; const double convDst = dstAxis->unit().conversionToSI(); const bool srcIsUp = srcAxis->direction() == cs::AxisDirection::UP; const bool srcIsDown = srcAxis->direction() == cs::AxisDirection::DOWN; const bool dstIsUp = dstAxis->direction() == cs::AxisDirection::UP; const bool dstIsDown = dstAxis->direction() == cs::AxisDirection::DOWN; const bool heightDepthReversal = ((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp)); if (convDst == 0) throw InvalidOperation("Conversion factor of target unit is 0"); const double factor = convSrc / convDst; const auto &sourceCRSExtent = getExtent(sourceCRS); const auto &targetCRSExtent = getExtent(targetCRS); const bool sameExtent = sourceCRSExtent && targetCRSExtent && sourceCRSExtent->_isEquivalentTo( targetCRSExtent.get(), util::IComparable::Criterion::EQUIVALENT); util::PropertyMap map; map.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, sameExtent ? NN_NO_CHECK(sourceCRSExtent) : metadata::Extent::WORLD); if (!equivalentVDatum) { const auto name = getBallparkTransformationVertToVert(sourceCRS, targetCRS); auto conv = Transformation::createChangeVerticalUnit( map.set(common::IdentifiedObject::NAME_KEY, name), sourceCRS, targetCRS, // In case of a height depth reversal, we should probably have // 2 steps instead of putting a negative factor... common::Scale(heightDepthReversal ? -factor : factor), {}); conv->setHasBallparkTransformation(true); res.push_back(conv); } else if (convSrc != convDst || !heightDepthReversal) { auto name = buildConvName(sourceCRS->nameStr(), targetCRS->nameStr()); auto conv = Conversion::createChangeVerticalUnit( map.set(common::IdentifiedObject::NAME_KEY, name), // In case of a height depth reversal, we should probably have // 2 steps instead of putting a negative factor... common::Scale(heightDepthReversal ? -factor : factor)); conv->setCRSs(sourceCRS, targetCRS, nullptr); res.push_back(conv); } else { auto name = buildConvName(sourceCRS->nameStr(), targetCRS->nameStr()); auto conv = Conversion::createHeightDepthReversal( map.set(common::IdentifiedObject::NAME_KEY, name)); conv->setCRSs(sourceCRS, targetCRS, nullptr); res.push_back(conv); } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsVertToGeog( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::VerticalCRS *vertSrc, const crs::GeographicCRS *geogDst, std::vector &res) { ENTER_FUNCTION(); if (vertSrc->identifiers().empty()) { const auto &vertSrcName = vertSrc->nameStr(); const auto &authFactory = context.context->getAuthorityFactory(); if (authFactory != nullptr && vertSrcName != "unnamed" && vertSrcName != "unknown") { auto matches = authFactory->createObjectsFromName( vertSrcName, {io::AuthorityFactory::ObjectType::VERTICAL_CRS}, false, 2); if (matches.size() == 1) { const auto &match = matches.front(); if (vertSrc->_isEquivalentTo( match.get(), util::IComparable::Criterion::EQUIVALENT) && !match->identifiers().empty()) { auto resTmp = createOperations( NN_NO_CHECK( util::nn_dynamic_pointer_cast( match)), sourceEpoch, targetCRS, targetEpoch, context); res.insert(res.end(), resTmp.begin(), resTmp.end()); return; } } } } createOperationsVertToGeogSynthetized(sourceCRS, targetCRS, context, vertSrc, geogDst, res); } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsVertToGeogSynthetized( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::VerticalCRS *vertSrc, const crs::GeographicCRS *geogDst, std::vector &res) { ENTER_FUNCTION(); const auto &srcAxis = vertSrc->coordinateSystem()->axisList()[0]; const double convSrc = srcAxis->unit().conversionToSI(); double convDst = 1.0; const auto &geogAxis = geogDst->coordinateSystem()->axisList(); bool dstIsUp = true; bool dstIsDown = false; if (geogAxis.size() == 3) { const auto &dstAxis = geogAxis[2]; convDst = dstAxis->unit().conversionToSI(); dstIsUp = dstAxis->direction() == cs::AxisDirection::UP; dstIsDown = dstAxis->direction() == cs::AxisDirection::DOWN; } const bool srcIsUp = srcAxis->direction() == cs::AxisDirection::UP; const bool srcIsDown = srcAxis->direction() == cs::AxisDirection::DOWN; const bool heightDepthReversal = ((srcIsUp && dstIsDown) || (srcIsDown && dstIsUp)); if (convDst == 0) throw InvalidOperation("Conversion factor of target unit is 0"); const double factor = convSrc / convDst; const auto &sourceCRSExtent = getExtent(sourceCRS); const auto &targetCRSExtent = getExtent(targetCRS); const bool sameExtent = sourceCRSExtent && targetCRSExtent && sourceCRSExtent->_isEquivalentTo( targetCRSExtent.get(), util::IComparable::Criterion::EQUIVALENT); const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const auto vertDatum = vertSrc->datumNonNull(dbContext); const auto &vertDatumName = vertDatum->nameStr(); const auto geogDstDatum = geogDst->datumNonNull(dbContext); const auto &geogDstDatumName = geogDstDatum->nameStr(); // We accept a vertical CRS whose datum name is the same datum name as the // source geographic CRS, or whose datum name is "Ellipsoid" if it is part // of a CompoundCRS whose horizontal CRS has a geodetic datum of the same // datum name as the source geographic CRS, to mean an ellipsoidal height. // This is against OGC Topic 2, and an extension needed for use case of // https://github.com/OSGeo/PROJ/issues/4175 const bool bIsSameDatum = vertDatumName != "unknown" && (vertDatumName == geogDstDatumName || (vertDatumName == "Ellipsoid" && !context.geogCRSOfVertCRSStack.empty() && context.geogCRSOfVertCRSStack.back() ->datumNonNull(dbContext) ->nameStr() == geogDstDatumName)); std::string transfName; if (bIsSameDatum) { transfName = buildConvName(factor != 1.0 ? sourceCRS->nameStr() : targetCRS->nameStr(), targetCRS->nameStr()); } else { transfName = buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr()); transfName += " ("; transfName += BALLPARK_VERTICAL_TRANSFORMATION_NO_ELLIPSOID_VERT_HEIGHT; transfName += ')'; } util::PropertyMap map; map.set(common::IdentifiedObject::NAME_KEY, transfName) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, sameExtent ? NN_NO_CHECK(sourceCRSExtent) : metadata::Extent::WORLD); if (bIsSameDatum) { auto conv = Conversion::createChangeVerticalUnit( map, common::Scale(heightDepthReversal ? -factor : factor)); conv->setCRSs(sourceCRS, targetCRS, nullptr); res.push_back(conv); } else { auto transf = Transformation::createChangeVerticalUnit( map, sourceCRS, targetCRS, common::Scale(heightDepthReversal ? -factor : factor), {}); transf->setHasBallparkTransformation(true); res.push_back(transf); } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsBoundToBound( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::BoundCRS *boundDst, std::vector &res) { ENTER_FUNCTION(); // BoundCRS to BoundCRS of horizontal CRS using the same (geographic) hub const auto &hubSrc = boundSrc->hubCRS(); auto hubSrcGeog = dynamic_cast(hubSrc.get()); const auto &hubDst = boundDst->hubCRS(); auto hubDstGeog = dynamic_cast(hubDst.get()); if (hubSrcGeog && hubDstGeog && hubSrcGeog->_isEquivalentTo(hubDstGeog, util::IComparable::Criterion::EQUIVALENT)) { auto opsFirst = createOperations( sourceCRS, util::optional(), hubSrc, util::optional(), context); auto opsLast = createOperations( hubSrc, util::optional(), targetCRS, util::optional(), context); for (const auto &opFirst : opsFirst) { for (const auto &opLast : opsLast) { try { std::vector ops; ops.push_back(opFirst); ops.push_back(opLast); res.emplace_back( ConcatenatedOperation::createComputeMetadata( ops, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } if (!res.empty()) { return; } } // BoundCRS to BoundCRS of vertical CRS using the same vertical datum // ==> ignore the bound transformation auto baseOfBoundSrcAsVertCRS = dynamic_cast(boundSrc->baseCRS().get()); auto baseOfBoundDstAsVertCRS = dynamic_cast(boundDst->baseCRS().get()); if (baseOfBoundSrcAsVertCRS && baseOfBoundDstAsVertCRS) { const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const auto datumSrc = baseOfBoundSrcAsVertCRS->datumNonNull(dbContext); const auto datumDst = baseOfBoundDstAsVertCRS->datumNonNull(dbContext); if (datumSrc->nameStr() == datumDst->nameStr() && (datumSrc->nameStr() != "unknown" || boundSrc->transformation()->_isEquivalentTo( boundDst->transformation().get(), util::IComparable::Criterion::EQUIVALENT))) { res = createOperations( boundSrc->baseCRS(), util::optional(), boundDst->baseCRS(), util::optional(), context); return; } } // BoundCRS to BoundCRS of vertical CRS auto vertCRSOfBaseOfBoundSrc = boundSrc->baseCRS()->extractVerticalCRS(); auto vertCRSOfBaseOfBoundDst = boundDst->baseCRS()->extractVerticalCRS(); if (hubSrcGeog && hubDstGeog && hubSrcGeog->_isEquivalentTo(hubDstGeog, util::IComparable::Criterion::EQUIVALENT) && vertCRSOfBaseOfBoundSrc && vertCRSOfBaseOfBoundDst) { auto opsFirst = createOperations( sourceCRS, util::optional(), hubSrc, util::optional(), context); auto opsLast = createOperations( hubSrc, util::optional(), targetCRS, util::optional(), context); if (!opsFirst.empty() && !opsLast.empty()) { for (const auto &opFirst : opsFirst) { for (const auto &opLast : opsLast) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opFirst, opLast}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } if (!res.empty()) { return; } } } res = createOperations( boundSrc->baseCRS(), util::optional(), boundDst->baseCRS(), util::optional(), context); } // --------------------------------------------------------------------------- static std::vector getOps(const CoordinateOperationNNPtr &op) { auto concatenated = dynamic_cast(op.get()); if (concatenated) return concatenated->operations(); return {op}; } // --------------------------------------------------------------------------- static std::string normalize2D3DInName(const std::string &s) { std::string out = s; const char *const patterns[] = { " (2D)", " (geographic3D horizontal)", " (geog2D)", " (geog3D)", }; for (const char *pattern : patterns) { out = replaceAll(out, pattern, ""); } return out; } // --------------------------------------------------------------------------- static bool useCompatibleTransformationsForSameSourceTarget( const CoordinateOperationNNPtr &opA, const CoordinateOperationNNPtr &opB) { const auto subOpsA = getOps(opA); const auto subOpsB = getOps(opB); for (const auto &subOpA : subOpsA) { if (!dynamic_cast(subOpA.get())) continue; const auto subOpAName = normalize2D3DInName(subOpA->nameStr()); const auto &subOpASourceCRSName = subOpA->sourceCRS()->nameStr(); const auto &subOpATargetCRSName = subOpA->targetCRS()->nameStr(); if (subOpASourceCRSName == "unknown" || subOpATargetCRSName == "unknown") continue; for (const auto &subOpB : subOpsB) { if (!dynamic_cast(subOpB.get())) continue; const auto &subOpBSourceCRSName = subOpB->sourceCRS()->nameStr(); const auto &subOpBTargetCRSName = subOpB->targetCRS()->nameStr(); if (subOpBSourceCRSName == "unknown" || subOpBTargetCRSName == "unknown") continue; if (subOpASourceCRSName == subOpBSourceCRSName && subOpATargetCRSName == subOpBTargetCRSName) { const auto &subOpBName = normalize2D3DInName(subOpB->nameStr()); if (starts_with(subOpAName, NULL_GEOGRAPHIC_OFFSET) && starts_with(subOpB->nameStr(), NULL_GEOGRAPHIC_OFFSET)) { continue; } if (subOpAName != subOpBName) { return false; } } else if (subOpASourceCRSName == subOpBTargetCRSName && subOpATargetCRSName == subOpBSourceCRSName) { const auto &subOpBName = subOpB->nameStr(); if (starts_with(subOpAName, NULL_GEOGRAPHIC_OFFSET) && starts_with(subOpBName, NULL_GEOGRAPHIC_OFFSET)) { continue; } if (subOpAName != normalize2D3DInName(subOpB->inverse()->nameStr())) { return false; } } } } return true; } // --------------------------------------------------------------------------- static crs::GeographicCRSPtr getInterpolationGeogCRS(const CoordinateOperationNNPtr &verticalTransform, const io::DatabaseContextPtr &dbContext) { crs::GeographicCRSPtr interpolationGeogCRS; auto transformationVerticalTransform = dynamic_cast(verticalTransform.get()); if (transformationVerticalTransform == nullptr) { const auto concat = dynamic_cast( verticalTransform.get()); if (concat) { const auto &steps = concat->operations(); // Is this change of unit and/or height depth reversal + // transformation ? for (const auto &step : steps) { const auto transf = dynamic_cast(step.get()); if (transf) { // Only support a single Transformation in the steps if (transformationVerticalTransform != nullptr) { transformationVerticalTransform = nullptr; break; } transformationVerticalTransform = transf; } } } } if (transformationVerticalTransform && !transformationVerticalTransform->hasBallparkTransformation()) { auto interpTransformCRS = transformationVerticalTransform->interpolationCRS(); if (interpTransformCRS) { interpolationGeogCRS = std::dynamic_pointer_cast( interpTransformCRS); } else { // If no explicit interpolation CRS, then // this will be the geographic CRS of the // vertical to geog transformation interpolationGeogCRS = std::dynamic_pointer_cast( transformationVerticalTransform->targetCRS().as_nullable()); } } if (interpolationGeogCRS) { if (interpolationGeogCRS->coordinateSystem()->axisList().size() == 3) { // We need to force the interpolation CRS, which // will // frequently be 3D, to 2D to avoid transformations // between source CRS and interpolation CRS to have // 3D terms. interpolationGeogCRS = interpolationGeogCRS->demoteTo2D(std::string(), dbContext) .as_nullable(); } } return interpolationGeogCRS; } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsCompoundToGeog( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::CompoundCRS *compoundSrc, const crs::GeographicCRS *geogDst, std::vector &res) { ENTER_FUNCTION(); const auto &authFactory = context.context->getAuthorityFactory(); const auto &componentsSrc = compoundSrc->componentReferenceSystems(); if (!componentsSrc.empty()) { const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; if (componentsSrc.size() == 2) { auto derivedHSrc = dynamic_cast(componentsSrc[0].get()); if (derivedHSrc) { std::vector intermComponents{ derivedHSrc->baseCRS(), componentsSrc[1]}; auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, intermComponents[0]->nameStr() + " + " + intermComponents[1]->nameStr()); auto intermCompound = crs::CompoundCRS::create(properties, intermComponents); auto opsFirst = createOperations(sourceCRS, sourceEpoch, intermCompound, sourceEpoch, context); assert(!opsFirst.empty()); auto opsLast = createOperations(intermCompound, sourceEpoch, targetCRS, targetEpoch, context); for (const auto &opLast : opsLast) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opsFirst.front(), opLast}, disallowEmptyIntersection)); } catch (const std::exception &) { } } return; } auto geogSrc = dynamic_cast( componentsSrc[0].get()); // Sorry for this hack... aimed at transforming // "NAD83(CSRS)v7 + CGVD2013a(1997) height @ 1997" to "NAD83(CSRS)v7 // @ 1997" to "NAD83(CSRS)v3 + CGVD2013a(1997) height" to // "NAD83(CSRS)v3" OR "NAD83(CSRS)v7 + CGVD2013a(2002) height @ // 2002" to "NAD83(CSRS)v7 @ 2002" to "NAD83(CSRS)v4 + // CGVD2013a(2002) height" to "NAD83(CSRS)v4" if (dbContext && geogSrc && geogSrc->nameStr() == "NAD83(CSRS)v7" && sourceEpoch.has_value() && geogDst->coordinateSystem()->axisList().size() == 3U && geogDst->nameStr() == geogSrc->nameStr() && targetEpoch.has_value() && sourceEpoch->coordinateEpoch()._isEquivalentTo( targetEpoch->coordinateEpoch())) { const bool is1997 = std::abs(sourceEpoch->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR) - 1997) < 1e-10; const bool is2002 = std::abs(sourceEpoch->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR) - 2002) < 1e-10; try { auto authFactoryEPSG = io::AuthorityFactory::create( authFactory->databaseContext(), "EPSG"); if (geogSrc->_isEquivalentTo( authFactoryEPSG ->createCoordinateReferenceSystem("8255") .get(), util::IComparable::Criterion:: EQUIVALENT) && // NAD83(CSRS)v7 // 2D geogDst->_isEquivalentTo( authFactoryEPSG ->createCoordinateReferenceSystem("8254") .get(), util::IComparable::Criterion:: EQUIVALENT) && // NAD83(CSRS)v7 // 3D ((is1997 && componentsSrc[1]->nameStr() == "CGVD2013a(1997) height") || (is2002 && componentsSrc[1]->nameStr() == "CGVD2013a(2002) height"))) { std::vector intermComponents{ authFactoryEPSG->createCoordinateReferenceSystem( is1997 ? "8240" : // NAD83(CSRS)v3 2D "8246" // NAD83(CSRS)v4 2D ), componentsSrc[1]}; auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, intermComponents[0]->nameStr() + " + " + intermComponents[1]->nameStr()); auto newCompound = crs::CompoundCRS::create( properties, intermComponents); auto ops = createOperations( newCompound, sourceEpoch, authFactoryEPSG->createCoordinateReferenceSystem( is1997 ? "8239" : // NAD83(CSRS)v3 3D "8244" // NAD83(CSRS)v4 3D ), sourceEpoch, context); for (const auto &op : ops) { auto opClone = op->shallowClone(); setCRSs(opClone.get(), sourceCRS, targetCRS); res.emplace_back(opClone); } return; } } catch (const std::exception &) { } } auto boundSrc = dynamic_cast(componentsSrc[0].get()); if (boundSrc) { derivedHSrc = dynamic_cast( boundSrc->baseCRS().get()); if (derivedHSrc) { std::vector intermComponents{ crs::BoundCRS::create(derivedHSrc->baseCRS(), boundSrc->hubCRS(), boundSrc->transformation()), componentsSrc[1]}; auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, intermComponents[0]->nameStr() + " + " + intermComponents[1]->nameStr()); auto intermCompound = crs::CompoundCRS::create(properties, intermComponents); auto opsFirst = createOperations(sourceCRS, sourceEpoch, intermCompound, sourceEpoch, context); assert(!opsFirst.empty()); auto opsLast = createOperations(intermCompound, sourceEpoch, targetCRS, targetEpoch, context); for (const auto &opLast : opsLast) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {opsFirst.front(), opLast}, disallowEmptyIntersection)); } catch (const std::exception &) { } } return; } } } // Deal with "+proj=something +geoidgrids +nadgrids/+towgs84" to // another CRS whose datum is not the same as the horizontal datum // of the source if (componentsSrc.size() == 2) { auto comp0Bound = dynamic_cast(componentsSrc[0].get()); auto comp1Bound = dynamic_cast(componentsSrc[1].get()); auto comp0Geog = componentsSrc[0]->extractGeographicCRS(); auto dstGeog = targetCRS->extractGeographicCRS(); if (comp0Bound && comp1Bound && comp0Geog && comp1Bound->hubCRS() ->demoteTo2D(std::string(), dbContext) ->isEquivalentTo( comp0Geog.get(), util::IComparable::Criterion::EQUIVALENT) && dstGeog && !comp0Geog->datumNonNull(dbContext)->isEquivalentTo( dstGeog->datumNonNull(dbContext).get(), util::IComparable::Criterion::EQUIVALENT)) { const auto &op1Dest = comp1Bound->hubCRS(); const auto ops1 = createOperations( crs::CompoundCRS::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, std::string()), {comp0Bound->baseCRS(), componentsSrc[1]}), util::optional(), op1Dest, util::optional(), context); const auto op2Dest = comp0Bound->hubCRS()->promoteTo3D(std::string(), dbContext); const auto ops2 = createOperations( crs::BoundCRS::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, std::string()), NN_NO_CHECK(comp0Geog), comp0Bound->hubCRS(), comp0Bound->transformation()) ->promoteTo3D(std::string(), dbContext), util::optional(), op2Dest, util::optional(), context); const auto ops3 = createOperations( op2Dest, util::optional(), targetCRS, util::optional(), context); for (const auto &op1 : ops1) { auto op1Clone = op1->shallowClone(); setCRSs(op1Clone.get(), sourceCRS, op1Dest); for (const auto &op2 : ops2) { auto op2Clone = op2->shallowClone(); setCRSs(op2Clone.get(), op1Dest, op2Dest); for (const auto &op3 : ops3) { try { res.emplace_back( ConcatenatedOperation:: createComputeMetadata( {op1Clone, op2Clone, op3}, disallowEmptyIntersection)); } catch (const std::exception &) { } } } } if (!res.empty()) { return; } } } // Only do a vertical transformation if the target CRS is 3D. const auto dstSingle = dynamic_cast(targetCRS.get()); if (dstSingle && dstSingle->coordinateSystem()->axisList().size() == 2) { auto tmp = createOperations(componentsSrc[0], sourceEpoch, targetCRS, targetEpoch, context); for (const auto &op : tmp) { auto opClone = op->shallowClone(); setCRSs(opClone.get(), sourceCRS, targetCRS); res.emplace_back(opClone); } return; } std::vector horizTransforms; auto srcGeogCRS = componentsSrc[0]->extractGeographicCRS(); if (srcGeogCRS) { horizTransforms = createOperations(componentsSrc[0], sourceEpoch, targetCRS, targetEpoch, context); } std::vector verticalTransforms; if (componentsSrc.size() >= 2 && componentsSrc[1]->extractVerticalCRS()) { struct SetSkipHorizontalTransform { Context &context; explicit SetSkipHorizontalTransform(Context &contextIn) : context(contextIn) { assert(!context.skipHorizontalTransformation); context.skipHorizontalTransformation = true; } ~SetSkipHorizontalTransform() { context.skipHorizontalTransformation = false; } }; SetSkipHorizontalTransform setSkipHorizontalTransform(context); struct SetGeogCRSOfVertCRS { Context &context; const bool hasPushed; explicit SetGeogCRSOfVertCRS( Context &contextIn, const crs::GeographicCRSPtr &geogCRS) : context(contextIn), hasPushed(geogCRS != nullptr) { if (geogCRS) context.geogCRSOfVertCRSStack.push_back( NN_NO_CHECK(geogCRS)); } ~SetGeogCRSOfVertCRS() { if (hasPushed) context.geogCRSOfVertCRSStack.pop_back(); } }; SetGeogCRSOfVertCRS setGeogCRSOfVertCRS(context, srcGeogCRS); verticalTransforms = createOperations( componentsSrc[1], util::optional(), targetCRS->promoteTo3D(std::string(), dbContext), util::optional(), context); bool foundRegisteredTransformWithAllGridsAvailable = false; const auto gridAvailabilityUse = context.context->getGridAvailabilityUse(); const bool ignoreMissingGrids = gridAvailabilityUse == CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY; for (const auto &op : verticalTransforms) { if (hasIdentifiers(op) && dbContext) { bool missingGrid = false; if (!ignoreMissingGrids) { const auto gridsNeeded = op->gridsNeeded( dbContext, gridAvailabilityUse == CoordinateOperationContext:: GridAvailabilityUse::KNOWN_AVAILABLE); for (const auto &gridDesc : gridsNeeded) { if (!gridDesc.available) { missingGrid = true; break; } } } if (!missingGrid) { foundRegisteredTransformWithAllGridsAvailable = true; break; } } } if (srcGeogCRS && !srcGeogCRS->_isEquivalentTo( geogDst, util::IComparable::Criterion::EQUIVALENT) && !srcGeogCRS->is2DPartOf3D(NN_NO_CHECK(geogDst), dbContext)) { auto geogCRSTmp = NN_NO_CHECK(srcGeogCRS) ->demoteTo2D(std::string(), dbContext) ->promoteTo3D( std::string(), dbContext, geogDst->coordinateSystem()->axisList().size() == 3 ? geogDst->coordinateSystem()->axisList()[2] : cs::VerticalCS::createGravityRelatedHeight( common::UnitOfMeasure::METRE) ->axisList()[0]); auto verticalTransformsTmp = createOperations( componentsSrc[1], util::optional(), geogCRSTmp, util::optional(), context); bool foundRegisteredTransform = false; bool foundRegisteredTransformWithAllGridsAvailable2 = false; for (const auto &op : verticalTransformsTmp) { if (hasIdentifiers(op) && dbContext) { bool missingGrid = false; if (!ignoreMissingGrids) { const auto gridsNeeded = op->gridsNeeded( dbContext, gridAvailabilityUse == CoordinateOperationContext:: GridAvailabilityUse::KNOWN_AVAILABLE); for (const auto &gridDesc : gridsNeeded) { if (!gridDesc.available) { missingGrid = true; break; } } } foundRegisteredTransform = true; if (!missingGrid) { foundRegisteredTransformWithAllGridsAvailable2 = true; break; } } } if (foundRegisteredTransformWithAllGridsAvailable2 && !foundRegisteredTransformWithAllGridsAvailable) { verticalTransforms = std::move(verticalTransformsTmp); } else if (foundRegisteredTransform) { verticalTransforms.insert(verticalTransforms.end(), verticalTransformsTmp.begin(), verticalTransformsTmp.end()); } } } if (horizTransforms.empty() || verticalTransforms.empty()) { res = std::move(horizTransforms); return; } typedef std::pair, std::vector> PairOfTransforms; std::map cacheHorizToInterpAndInterpToTarget; for (const auto &verticalTransform : verticalTransforms) { #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("Considering vertical transform " + objectAsStr(verticalTransform.get())); #endif crs::GeographicCRSPtr interpolationGeogCRS = getInterpolationGeogCRS(verticalTransform, dbContext); if (interpolationGeogCRS) { #ifdef TRACE_CREATE_OPERATIONS logTrace("Using " + objectAsStr(interpolationGeogCRS.get()) + " as interpolation CRS"); #endif std::vector srcToInterpOps; std::vector interpToTargetOps; std::string key; const auto &ids = interpolationGeogCRS->identifiers(); if (!ids.empty()) { key = (*ids.front()->codeSpace()) + ':' + ids.front()->code(); } const auto computeOpsToInterp = [&srcToInterpOps, &interpToTargetOps, &componentsSrc, &interpolationGeogCRS, &targetCRS, &geogDst, &dbContext, &context]() { // Do the sourceCRS to interpolation CRS in 2D only // to avoid altering the orthometric elevation srcToInterpOps = createOperations( componentsSrc[0], util::optional(), NN_NO_CHECK(interpolationGeogCRS), util::optional(), context); // e.g when doing COMPOUND_CRS[ // NAD83(CRS)+TOWGS84[0,0,0], // CGVD28 height + EXTENSION["PROJ4_GRIDS","HT2_0.gtx"] // to NAD83(CRS) 3D const auto boundSrc = dynamic_cast(componentsSrc[0].get()); if (boundSrc && boundSrc->baseCRS()->isEquivalentTo( targetCRS->demoteTo2D(std::string(), dbContext) .get(), util::IComparable::Criterion::EQUIVALENT) && boundSrc->hubCRS()->isEquivalentTo( interpolationGeogCRS ->demoteTo2D(std::string(), dbContext) .get(), util::IComparable::Criterion::EQUIVALENT)) { // Make sure to use the same horizontal transformation // (likely a null shift) interpToTargetOps = applyInverse(srcToInterpOps); return; } // But do the interpolation CRS to targetCRS in 3D // to have proper ellipsoid height transformation. // We need to force the vertical axis of this 3D'ified // interpolation CRS to be the same as the target CRS, // to avoid potential double vertical unit conversion, // as the vertical transformation already takes care of // that. auto interp3D = interpolationGeogCRS ->demoteTo2D(std::string(), dbContext) ->promoteTo3D( std::string(), dbContext, geogDst->coordinateSystem() ->axisList() .size() == 3 ? geogDst->coordinateSystem()->axisList()[2] : cs::VerticalCS:: createGravityRelatedHeight( common::UnitOfMeasure::METRE) ->axisList()[0]); interpToTargetOps = createOperations( interp3D, util::optional(), targetCRS, util::optional(), context); }; if (!key.empty()) { auto iter = cacheHorizToInterpAndInterpToTarget.find(key); if (iter == cacheHorizToInterpAndInterpToTarget.end()) { #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("looking for horizontal transformation " "from source to interpCRS and interpCRS to " "target"); #endif computeOpsToInterp(); cacheHorizToInterpAndInterpToTarget[key] = PairOfTransforms(srcToInterpOps, interpToTargetOps); } else { srcToInterpOps = iter->second.first; interpToTargetOps = iter->second.second; } } else { #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("looking for horizontal transformation " "from source to interpCRS and interpCRS to " "target"); #endif computeOpsToInterp(); } #ifdef TRACE_CREATE_OPERATIONS ENTER_BLOCK("creating HorizVerticalHorizPROJBased operations"); #endif const bool srcAndTargetGeogAreSame = componentsSrc[0]->isEquivalentTo( targetCRS->demoteTo2D(std::string(), dbContext).get(), util::IComparable::Criterion::EQUIVALENT); // Lambda to add to the set the name of geodetic datum of the // CRS const auto addDatumOfToSet = [&dbContext]( std::set &set, const crs::CRSNNPtr &crs) { auto geodCRS = crs->extractGeodeticCRS(); if (geodCRS) { set.insert(geodCRS->datumNonNull(dbContext)->nameStr()); } }; // Lambda to return the set of names of geodetic datums used // by the source and target CRS of a list of operations. const auto makeDatumSet = [&addDatumOfToSet]( const std::vector &ops) { std::set datumSetOps; for (const auto &subOp : ops) { if (!dynamic_cast( subOp.get())) continue; addDatumOfToSet(datumSetOps, NN_NO_CHECK(subOp->sourceCRS())); addDatumOfToSet(datumSetOps, NN_NO_CHECK(subOp->targetCRS())); } return datumSetOps; }; std::map> mapSetDatumsUsed; if (srcAndTargetGeogAreSame) { // When the geographic CRS of the source and target, we // want to make sure that the transformation from the // source to the interpolation CRS uses the same datums as // the one from the interpolation CRS to the target CRS. // A simplistic view would be that the srcToInterp and // interpToTarget should be the same, but they are // subtelties, like interpToTarget being done in 3D, so with // additional conversion steps, slightly different names in // operations between 2D and 3D. The initial filter on // checking that we use the same set of datum enable us // to be confident we reject upfront geodetically-dubious // operations. for (const auto &op : srcToInterpOps) { mapSetDatumsUsed[op.get()] = makeDatumSet(getOps(op)); } for (const auto &op : interpToTargetOps) { mapSetDatumsUsed[op.get()] = makeDatumSet(getOps(op)); } } const bool hasOnlyOneOp = srcToInterpOps.size() == 1 && interpToTargetOps.size() == 1; for (const auto &srcToInterp : srcToInterpOps) { for (const auto &interpToTarget : interpToTargetOps) { if (!hasOnlyOneOp && ((srcAndTargetGeogAreSame && mapSetDatumsUsed[srcToInterp.get()] != mapSetDatumsUsed[interpToTarget.get()]) || !useCompatibleTransformationsForSameSourceTarget( srcToInterp, interpToTarget))) { #ifdef TRACE_CREATE_OPERATIONS logTrace( "Considering that '" + srcToInterp->nameStr() + "' and '" + interpToTarget->nameStr() + "' do not use consistent operations in the pre " "and post-vertical transformation steps"); #endif continue; } try { auto op = createHorizVerticalHorizPROJBased( sourceCRS, targetCRS, srcToInterp, verticalTransform, interpToTarget, interpolationGeogCRS, true); res.emplace_back(op); } catch (const std::exception &) { } } } } else { // This case is probably only correct if // verticalTransform and horizTransform are independent // and in particular that verticalTransform does not // involve a grid, because of the rather arbitrary order // horizontal then vertical applied for (const auto &horizTransform : horizTransforms) { try { auto op = createHorizVerticalPROJBased( sourceCRS, targetCRS, horizTransform, verticalTransform, disallowEmptyIntersection); res.emplace_back(op); } catch (const std::exception &) { } } } } } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsToGeod( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::GeodeticCRS *geodDst, std::vector &res) { auto cs = cs::EllipsoidalCS::createLatitudeLongitudeEllipsoidalHeight( common::UnitOfMeasure::DEGREE, common::UnitOfMeasure::METRE); auto intermGeog3DCRS = util::nn_static_pointer_cast(crs::GeographicCRS::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, geodDst->nameStr()) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), geodDst->datum(), geodDst->datumEnsemble(), cs)); auto sourceToGeog3DOps = createOperations( sourceCRS, sourceEpoch, intermGeog3DCRS, sourceEpoch, context); auto geog3DToTargetOps = createOperations(intermGeog3DCRS, targetEpoch, targetCRS, targetEpoch, context); if (!geog3DToTargetOps.empty()) { for (const auto &op : sourceToGeog3DOps) { auto newOp = op->shallowClone(); setCRSs(newOp.get(), sourceCRS, intermGeog3DCRS); try { res.emplace_back(ConcatenatedOperation::createComputeMetadata( {std::move(newOp), geog3DToTargetOps.front()}, disallowEmptyIntersection)); } catch (const InvalidOperationEmptyIntersection &) { } } } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsCompoundToCompound( const crs::CRSNNPtr &sourceCRS, const util::optional &sourceEpoch, const crs::CRSNNPtr &targetCRS, const util::optional &targetEpoch, Private::Context &context, const crs::CompoundCRS *compoundSrc, const crs::CompoundCRS *compoundDst, std::vector &res) { const auto &componentsSrc = compoundSrc->componentReferenceSystems(); const auto &componentsDst = compoundDst->componentReferenceSystems(); if (componentsSrc.empty() || componentsSrc.size() != componentsDst.size()) { return; } const auto srcGeog = componentsSrc[0]->extractGeographicCRS(); const auto dstGeog = componentsDst[0]->extractGeographicCRS(); if (srcGeog == nullptr || dstGeog == nullptr) { return; } const bool srcGeogIsSameAsDstGeog = srcGeog->_isEquivalentTo( dstGeog.get(), util::IComparable::Criterion::EQUIVALENT); const auto &authFactory = context.context->getAuthorityFactory(); auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const auto intermGeogSrc = srcGeog->promoteTo3D(std::string(), dbContext); const auto intermGeogDst = srcGeogIsSameAsDstGeog ? intermGeogSrc : dstGeog->promoteTo3D(std::string(), dbContext); const auto opsGeogSrcToGeogDst = createOperations( intermGeogSrc, sourceEpoch, intermGeogDst, targetEpoch, context); // Use PointMotionOperations if appropriate and available if (authFactory && sourceEpoch.has_value() && targetEpoch.has_value() && !sourceEpoch->coordinateEpoch()._isEquivalentTo( targetEpoch->coordinateEpoch()) && srcGeogIsSameAsDstGeog) { const auto pmoSrc = authFactory->getPointMotionOperationsFor( NN_NO_CHECK(srcGeog), true); if (!pmoSrc.empty()) { auto geog3D = srcGeog->promoteTo3D( std::string(), authFactory->databaseContext().as_nullable()); auto opsFirst = createOperations(sourceCRS, sourceEpoch, geog3D, sourceEpoch, context); auto pmoOps = createOperations(geog3D, sourceEpoch, geog3D, targetEpoch, context); auto opsLast = createOperations(geog3D, targetEpoch, targetCRS, targetEpoch, context); for (const auto &opFirst : opsFirst) { if (!opFirst->hasBallparkTransformation()) { for (const auto &opMiddle : pmoOps) { if (!opMiddle->hasBallparkTransformation()) { for (const auto &opLast : opsLast) { if (!opLast->hasBallparkTransformation()) { try { res.emplace_back( ConcatenatedOperation:: createComputeMetadata( {opFirst, opMiddle, opLast}, disallowEmptyIntersection)); } catch (const std::exception &) { } } } } } } } if (!res.empty()) { return; } } } // Deal with "+proj=something +geoidgrids +nadgrids/+towgs84" to // "+proj=something +geoidgrids +nadgrids/+towgs84", using WGS 84 as an // intermediate. if (componentsSrc.size() == 2 && componentsDst.size() == 2) { auto comp0SrcBound = dynamic_cast(componentsSrc[0].get()); auto comp1SrcBound = dynamic_cast(componentsSrc[1].get()); auto comp0DstBound = dynamic_cast(componentsDst[0].get()); auto comp1DstBound = dynamic_cast(componentsDst[1].get()); if (comp0SrcBound && comp1SrcBound && comp0DstBound && comp1DstBound && comp0SrcBound->hubCRS()->isEquivalentTo( comp0DstBound->hubCRS().get(), util::IComparable::Criterion::EQUIVALENT) && !comp1SrcBound->isEquivalentTo( comp1DstBound, util::IComparable::Criterion::EQUIVALENT)) { auto hub3D = comp0SrcBound->hubCRS()->promoteTo3D(std::string(), dbContext); const auto ops1 = createOperations(sourceCRS, sourceEpoch, hub3D, sourceEpoch, context); const auto ops2 = createOperations(hub3D, targetEpoch, targetCRS, targetEpoch, context); for (const auto &op1 : ops1) { for (const auto &op2 : ops2) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {op1, op2}, disallowEmptyIntersection)); } catch (const std::exception &) { } } } return; } } std::vector verticalTransforms; bool bTryThroughIntermediateGeogCRS = false; if (componentsSrc.size() >= 2) { const auto vertSrc = componentsSrc[1]->extractVerticalCRS(); const auto vertDst = componentsDst[1]->extractVerticalCRS(); if (vertSrc && vertDst && !componentsSrc[1]->_isEquivalentTo(componentsDst[1].get())) { if ((!vertSrc->geoidModel().empty() || !vertDst->geoidModel().empty()) && // To be able to use "CGVD28 height to // CGVD2013a(1997|2002|2010)" single grid !(vertSrc->nameStr() == "CGVD28 height" && !vertSrc->geoidModel().empty() && vertSrc->geoidModel().front()->nameStr() == "HT2_1997" && vertDst->nameStr() == "CGVD2013a(1997) height" && vertDst->geoidModel().empty()) && !(vertSrc->nameStr() == "CGVD28 height" && !vertSrc->geoidModel().empty() && vertSrc->geoidModel().front()->nameStr() == "HT2_2002" && vertDst->nameStr() == "CGVD2013a(2002) height" && vertDst->geoidModel().empty()) && !(vertSrc->nameStr() == "CGVD28 height" && !vertSrc->geoidModel().empty() && vertSrc->geoidModel().front()->nameStr() == "HT2_2010" && vertDst->nameStr() == "CGVD2013a(2010) height" && vertDst->geoidModel().empty()) && !(vertDst->nameStr() == "CGVD28 height" && !vertDst->geoidModel().empty() && vertDst->geoidModel().front()->nameStr() == "HT2_1997" && vertSrc->nameStr() == "CGVD2013a(1997) height" && vertSrc->geoidModel().empty()) && !(vertDst->nameStr() == "CGVD28 height" && !vertDst->geoidModel().empty() && vertDst->geoidModel().front()->nameStr() == "HT2_2002" && vertSrc->nameStr() == "CGVD2013a(2002) height" && vertSrc->geoidModel().empty()) && !(vertDst->nameStr() == "CGVD28 height" && !vertDst->geoidModel().empty() && vertDst->geoidModel().front()->nameStr() == "HT2_2010" && vertSrc->nameStr() == "CGVD2013a(2010) height" && vertSrc->geoidModel().empty())) { // If we have a geoid model, force using through it bTryThroughIntermediateGeogCRS = true; } else { verticalTransforms = createOperations(componentsSrc[1], sourceEpoch, componentsDst[1], targetEpoch, context); // If we didn't find a non-ballpark transformation between // the 2 vertical CRS, then try through intermediate geographic // CRS // Do that although when the geographic CRS of the source and // target CRS are not the same, but only if they have a 3D // known version, and there is a non-ballpark transformation // between them. // This helps for "GDA94 + AHD height" to "GDA2020 + AVWS // height" going through GDA94 3D and GDA2020 3D bTryThroughIntermediateGeogCRS = (verticalTransforms.size() == 1 && verticalTransforms.front()->hasBallparkTransformation()) || (!srcGeogIsSameAsDstGeog && !intermGeogSrc->identifiers().empty() && !intermGeogDst->identifiers().empty() && !opsGeogSrcToGeogDst.empty() && !opsGeogSrcToGeogDst.front()->hasBallparkTransformation()); } } } if (bTryThroughIntermediateGeogCRS) { const auto createWithIntermediateCRS = [&sourceCRS, &sourceEpoch, &targetCRS, &targetEpoch, &context, &res](const crs::CRSNNPtr &intermCRS) { const auto ops1 = createOperations( sourceCRS, sourceEpoch, intermCRS, sourceEpoch, context); const auto ops2 = createOperations( intermCRS, targetEpoch, targetCRS, targetEpoch, context); for (const auto &op1 : ops1) { for (const auto &op2 : ops2) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {op1, op2}, disallowEmptyIntersection)); } catch (const std::exception &) { } } } }; const auto boundSrcHorizontal = dynamic_cast(componentsSrc[0].get()); const auto boundDstHorizontal = dynamic_cast(componentsDst[0].get()); // CompoundCRS[something_with_TOWGS84, ...] to CompoundCRS[WGS84, ...] if (boundSrcHorizontal != nullptr && boundDstHorizontal == nullptr && boundSrcHorizontal->hubCRS()->_isEquivalentTo( componentsDst[0].get(), util::IComparable::Criterion::EQUIVALENT)) { createWithIntermediateCRS( componentsDst[0]->promoteTo3D(std::string(), dbContext)); if (!res.empty()) { return; } } // Inverse of above else if (boundDstHorizontal != nullptr && boundSrcHorizontal == nullptr && boundDstHorizontal->hubCRS()->_isEquivalentTo( componentsSrc[0].get(), util::IComparable::Criterion::EQUIVALENT)) { createWithIntermediateCRS( componentsSrc[0]->promoteTo3D(std::string(), dbContext)); if (!res.empty()) { return; } } // Deal with situation like // WGS 84 + EGM96 --> ETRS89 + Belfast height where // there is a geoid model for EGM96 referenced to WGS 84 // and a geoid model for Belfast height referenced to ETRS89 const auto opsSrcToGeog = createOperations( sourceCRS, sourceEpoch, intermGeogSrc, sourceEpoch, context); const auto opsGeogToTarget = createOperations( intermGeogDst, targetEpoch, targetCRS, targetEpoch, context); // We preferably accept using an intermediate if the operations // to it do not include ballpark operations, but if they do include // grids, using such operations result will be better than nothing. // This will help for example for "NAD83(CSRS) + CGVD28 height" to // "NAD83(CSRS) + CGVD2013(CGG2013) height" where the transformation // between "CGVD2013(CGG2013) height" and "NAD83(CSRS)" actually // involves going through NAD83(CSRS)v6 const auto hasKnownGrid = [&dbContext](const CoordinateOperationNNPtr &op) { const auto grids = op->gridsNeeded(dbContext, true); if (grids.empty()) { return false; } for (const auto &grid : grids) { if (grid.available) { return true; } } return false; }; const auto hasNonTrivialTransf = [&hasKnownGrid](const std::vector &ops) { return !ops.empty() && (!ops.front()->hasBallparkTransformation() || hasKnownGrid(ops.front())); }; const bool hasNonTrivialSrcTransf = hasNonTrivialTransf(opsSrcToGeog); const bool hasNonTrivialTargetTransf = hasNonTrivialTransf(opsGeogToTarget); double bestAccuracy = -1; size_t bestStepCount = 0; if (hasNonTrivialSrcTransf && hasNonTrivialTargetTransf) { // In first pass, exclude (horizontal) ballpark operations, but // accept them in second pass. for (int pass = 0; pass <= 1 && res.empty(); pass++) { for (const auto &op1 : opsSrcToGeog) { if (pass == 0 && op1->hasBallparkTransformation()) { // std::cerr << "excluded " << op1->nameStr() << // std::endl; continue; } if (op1->nameStr().find(BALLPARK_VERTICAL_TRANSFORMATION) != std::string::npos) { continue; } for (const auto &op2 : opsGeogSrcToGeogDst) { for (const auto &op3 : opsGeogToTarget) { if (pass == 0 && op3->hasBallparkTransformation()) { // std::cerr << "excluded " << op3->nameStr() << // std::endl; continue; } if (op3->nameStr().find( BALLPARK_VERTICAL_TRANSFORMATION) != std::string::npos) { continue; } try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( srcGeogIsSameAsDstGeog ? std::vector< CoordinateOperationNNPtr>{op1, op3} : std::vector< CoordinateOperationNNPtr>{op1, op2, op3}, disallowEmptyIntersection)); const double accuracy = getAccuracy(res.back()); const size_t stepCount = getStepCount(res.back()); if (accuracy >= 0 && (bestAccuracy < 0 || (accuracy < bestAccuracy || (accuracy == bestAccuracy && stepCount < bestStepCount)))) { bestAccuracy = accuracy; bestStepCount = stepCount; } } catch (const std::exception &) { } } } } } } const auto createOpsInTwoSteps = [&res, bestAccuracy, bestStepCount](const std::vector &ops1, const std::vector &ops2) { std::vector res2; double bestAccuracy2 = -1; size_t bestStepCount2 = 0; // In first pass, exclude (horizontal) ballpark operations, but // accept them in second pass. for (int pass = 0; pass <= 1 && res2.empty(); pass++) { for (const auto &op1 : ops1) { if (pass == 0 && op1->hasBallparkTransformation()) { // std::cerr << "excluded " << op1->nameStr() << // std::endl; continue; } if (op1->nameStr().find( BALLPARK_VERTICAL_TRANSFORMATION) != std::string::npos) { continue; } for (const auto &op2 : ops2) { if (pass == 0 && op2->hasBallparkTransformation()) { // std::cerr << "excluded " << op2->nameStr() << // std::endl; continue; } if (op2->nameStr().find( BALLPARK_VERTICAL_TRANSFORMATION) != std::string::npos) { continue; } try { res2.emplace_back( ConcatenatedOperation:: createComputeMetadata( {op1, op2}, disallowEmptyIntersection)); const double accuracy = getAccuracy(res2.back()); const size_t stepCount = getStepCount(res2.back()); if (accuracy >= 0 && (bestAccuracy2 < 0 || (accuracy < bestAccuracy2 || (accuracy == bestAccuracy2 && stepCount < bestStepCount2)))) { bestAccuracy2 = accuracy; bestStepCount2 = stepCount; } } catch (const std::exception &) { } } } } // Keep the results of this new attempt, if there are better // than the previous ones if (bestAccuracy2 >= 0 && (bestAccuracy < 0 || (bestAccuracy2 < bestAccuracy || (bestAccuracy2 == bestAccuracy && bestStepCount2 < bestStepCount)))) { res = std::move(res2); } }; // If the promoted-to-3D source geographic CRS is not a known object, // transformations from it to another 3D one may not be relevant, // so try doing source -> geogDst 3D -> dest, if geogDst 3D is a known // object if (!srcGeog->identifiers().empty() && intermGeogSrc->identifiers().empty() && !intermGeogDst->identifiers().empty() && hasNonTrivialTargetTransf) { const auto opsSrcToIntermGeog = createOperations( sourceCRS, util::optional(), intermGeogDst, util::optional(), context); if (hasNonTrivialTransf(opsSrcToIntermGeog)) { createOpsInTwoSteps(opsSrcToIntermGeog, opsGeogToTarget); } } // Symmetrical situation with the promoted-to-3D target geographic CRS else if (!dstGeog->identifiers().empty() && intermGeogDst->identifiers().empty() && !intermGeogSrc->identifiers().empty() && hasNonTrivialSrcTransf) { const auto opsIntermGeogToDst = createOperations( intermGeogSrc, util::optional(), targetCRS, util::optional(), context); if (hasNonTrivialTransf(opsIntermGeogToDst)) { createOpsInTwoSteps(opsSrcToGeog, opsIntermGeogToDst); } } if (!res.empty()) { return; } } for (const auto &verticalTransform : verticalTransforms) { auto interpolationCRS = NN_NO_CHECK(std::static_pointer_cast(srcGeog)); auto interpTransformCRS = verticalTransform->interpolationCRS(); if (interpTransformCRS) { auto interpTransformSingleCRS = std::static_pointer_cast(interpTransformCRS); if (interpTransformSingleCRS) { interpolationCRS = NN_NO_CHECK(interpTransformSingleCRS); } } else { auto compSrc0BoundCrs = dynamic_cast(componentsSrc[0].get()); auto compDst0BoundCrs = dynamic_cast(componentsDst[0].get()); if (compSrc0BoundCrs && compDst0BoundCrs && dynamic_cast( compSrc0BoundCrs->hubCRS().get()) && compSrc0BoundCrs->hubCRS()->_isEquivalentTo( compDst0BoundCrs->hubCRS().get())) { interpolationCRS = NN_NO_CHECK(util::nn_dynamic_pointer_cast( compSrc0BoundCrs->hubCRS())); } } // Hack for // NAD83_CSRS_1997_xxxx_HT2_1997 to NAD83_CSRS_1997_yyyy_CGVD2013_1997 // NAD83_CSRS_2002_xxxx_HT2_2002 to NAD83_CSRS_2002_yyyy_CGVD2013_2002 if (dbContext && sourceEpoch.has_value() && targetEpoch.has_value() && sourceEpoch->coordinateEpoch()._isEquivalentTo( targetEpoch->coordinateEpoch()) && srcGeog->_isEquivalentTo( dstGeog.get(), util::IComparable::Criterion::EQUIVALENT) && srcGeog->nameStr() == "NAD83(CSRS)v7") { const bool is1997 = std::abs(sourceEpoch->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR) - 1997) < 1e-10; const bool is2002 = std::abs(sourceEpoch->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR) - 2002) < 1e-10; try { auto authFactoryEPSG = io::AuthorityFactory::create( NN_NO_CHECK(dbContext), "EPSG"); auto nad83CSRSv7 = authFactoryEPSG->createGeographicCRS("8255"); if (srcGeog->_isEquivalentTo(nad83CSRSv7.get(), util::IComparable::Criterion:: EQUIVALENT) && // NAD83(CSRS)v7 // 2D ((is1997 && verticalTransform->nameStr().find( "CGVD28 height to CGVD2013a(1997) height (1)") != std::string::npos) || (is2002 && verticalTransform->nameStr().find( "CGVD28 height to CGVD2013a(2002) height (1)") != std::string::npos))) { interpolationCRS = std::move(nad83CSRSv7); } } catch (const std::exception &) { } } const auto opSrcCRSToGeogCRS = createOperations( componentsSrc[0], util::optional(), interpolationCRS, util::optional(), context); const auto opGeogCRStoDstCRS = createOperations( interpolationCRS, util::optional(), componentsDst[0], util::optional(), context); for (const auto &opSrc : opSrcCRSToGeogCRS) { for (const auto &opDst : opGeogCRStoDstCRS) { try { auto op = createHorizVerticalHorizPROJBased( sourceCRS, targetCRS, opSrc, verticalTransform, opDst, interpolationCRS, true); res.emplace_back(op); } catch (const InvalidOperationEmptyIntersection &) { } catch (const io::FormattingException &) { } } } if (verticalTransforms.size() == 1U && verticalTransform->hasBallparkTransformation() && context.context->getAuthorityFactory() && dynamic_cast(componentsSrc[0].get()) && dynamic_cast(componentsDst[0].get()) && verticalTransform->nameStr() == getBallparkTransformationVertToVert(componentsSrc[1], componentsDst[1])) { // e.g EPSG:3912+EPSG:5779 to EPSG:3794+EPSG:8690 // "MGI 1901 / Slovene National Grid + SVS2000 height" to // "Slovenia 1996 / Slovene National Grid + SVS2010 height" // using the "D48/GK to D96/TM (xx)" family of horizontal // transformatoins between the projected CRS // Cf // https://github.com/OSGeo/PROJ/issues/3854#issuecomment-1689964773 // We restrict to a ballpark vertical transformation for now, // but ideally we should deal with a regular vertical transformation // but that would involve doing a transformation to its // interpolation CRS and we don't have such cases for now. std::vector opsHoriz; createOperationsFromDatabase( componentsSrc[0], util::optional(), componentsDst[0], util::optional(), context, srcGeog.get(), dstGeog.get(), srcGeog.get(), dstGeog.get(), /*vertSrc=*/nullptr, /*vertDst=*/nullptr, opsHoriz); for (const auto &opHoriz : opsHoriz) { res.emplace_back(createHorizNullVerticalPROJBased( sourceCRS, targetCRS, opHoriz, verticalTransform)); } } } if (verticalTransforms.empty()) { auto resTmp = createOperations( componentsSrc[0], util::optional(), componentsDst[0], util::optional(), context); for (const auto &op : resTmp) { auto opClone = op->shallowClone(); setCRSs(opClone.get(), sourceCRS, targetCRS); res.emplace_back(opClone); } } } // --------------------------------------------------------------------------- void CoordinateOperationFactory::Private::createOperationsBoundToCompound( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, Private::Context &context, const crs::BoundCRS *boundSrc, const crs::CompoundCRS *compoundDst, std::vector &res) { const auto &authFactory = context.context->getAuthorityFactory(); const auto dbContext = authFactory ? authFactory->databaseContext().as_nullable() : nullptr; const auto &componentsDst = compoundDst->componentReferenceSystems(); // Case of BOUND[NAD83_3D,TOWGS84] to // COMPOUND[BOUND[NAD83_2D,TOWGS84],BOUND[VERT[NAVD88],HUB=NAD83_3D,GRID]] // ==> We can ignore the TOWGS84 BOUND aspect and just ask for // NAD83_3D to COMPOUND[NAD83_2D,BOUND[VERT[NAVD88],HUB=NAD83_3D,GRID]] if (componentsDst.size() >= 2) { auto srcGeogCRS = boundSrc->baseCRS()->extractGeodeticCRS(); auto compDst0BoundCrs = util::nn_dynamic_pointer_cast(componentsDst[0]); auto compDst1BoundCrs = dynamic_cast(componentsDst[1].get()); if (srcGeogCRS && compDst0BoundCrs && compDst1BoundCrs) { auto compDst0Geog = compDst0BoundCrs->extractGeographicCRS(); auto compDst1Vert = dynamic_cast( compDst1BoundCrs->baseCRS().get()); auto compDst1BoundCrsHubCrsGeog = dynamic_cast( compDst1BoundCrs->hubCRS().get()); if (compDst1BoundCrsHubCrsGeog) { auto hubDst1Datum = compDst1BoundCrsHubCrsGeog->datumNonNull(dbContext); if (compDst0Geog && compDst1Vert && srcGeogCRS->datumNonNull(dbContext)->isEquivalentTo( hubDst1Datum.get(), util::IComparable::Criterion::EQUIVALENT) && compDst0Geog->datumNonNull(dbContext)->isEquivalentTo( hubDst1Datum.get(), util::IComparable::Criterion::EQUIVALENT)) { auto srcNew = boundSrc->baseCRS(); auto properties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, compDst0BoundCrs->nameStr() + " + " + componentsDst[1]->nameStr()); auto dstNew = crs::CompoundCRS::create( properties, {NN_NO_CHECK(compDst0BoundCrs), componentsDst[1]}); auto tmpRes = createOperations( srcNew, util::optional(), dstNew, util::optional(), context); for (const auto &op : tmpRes) { auto opClone = op->shallowClone(); setCRSs(opClone.get(), sourceCRS, targetCRS); res.emplace_back(opClone); } return; } } } } if (!componentsDst.empty()) { auto compDst0BoundCrs = dynamic_cast(componentsDst[0].get()); if (compDst0BoundCrs) { auto boundSrcHubAsGeogCRS = dynamic_cast(boundSrc->hubCRS().get()); auto compDst0BoundCrsHubAsGeogCRS = dynamic_cast( compDst0BoundCrs->hubCRS().get()); if (boundSrcHubAsGeogCRS && compDst0BoundCrsHubAsGeogCRS) { const auto boundSrcHubAsGeogCRSDatum = boundSrcHubAsGeogCRS->datumNonNull(dbContext); const auto compDst0BoundCrsHubAsGeogCRSDatum = compDst0BoundCrsHubAsGeogCRS->datumNonNull(dbContext); if (boundSrcHubAsGeogCRSDatum->_isEquivalentTo( compDst0BoundCrsHubAsGeogCRSDatum.get())) { auto cs = cs::EllipsoidalCS:: createLatitudeLongitudeEllipsoidalHeight( common::UnitOfMeasure::DEGREE, common::UnitOfMeasure::METRE); auto intermGeog3DCRS = util::nn_static_pointer_cast< crs::CRS>(crs::GeographicCRS::create( util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, boundSrcHubAsGeogCRS->nameStr()) .set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, metadata::Extent::WORLD), boundSrcHubAsGeogCRS->datum(), boundSrcHubAsGeogCRS->datumEnsemble(), cs)); auto sourceToGeog3DOps = createOperations( sourceCRS, util::optional(), intermGeog3DCRS, util::optional(), context); auto geog3DToTargetOps = createOperations( intermGeog3DCRS, util::optional(), targetCRS, util::optional(), context); for (const auto &opSrc : sourceToGeog3DOps) { for (const auto &opDst : geog3DToTargetOps) { if (opSrc->targetCRS() && opDst->sourceCRS() && !opSrc->targetCRS()->_isEquivalentTo( opDst->sourceCRS().get())) { // Shouldn't happen normally, but typically // one of them can be 2D and the other 3D // due to above createOperations() not // exactly setting the expected source and // target CRS. // So create an adapter operation... auto intermOps = createOperations( NN_NO_CHECK(opSrc->targetCRS()), util::optional(), NN_NO_CHECK(opDst->sourceCRS()), util::optional(), context); if (!intermOps.empty()) { res.emplace_back( ConcatenatedOperation:: createComputeMetadata( {opSrc, intermOps.front(), opDst}, disallowEmptyIntersection)); } } else { res.emplace_back( ConcatenatedOperation:: createComputeMetadata( {opSrc, opDst}, disallowEmptyIntersection)); } } } return; } } } // e.g transforming from a Bound[something_not_WGS84_but_with_TOWGS84] // to a CompoundCRS[WGS84, ...] const auto srcBaseSingleCRS = dynamic_cast(boundSrc->baseCRS().get()); const auto srcGeogCRS = boundSrc->extractGeographicCRS(); const auto boundSrcHubAsGeogCRS = dynamic_cast(boundSrc->hubCRS().get()); const auto comp0Geog = componentsDst[0]->extractGeographicCRS(); if (srcBaseSingleCRS && srcBaseSingleCRS->coordinateSystem()->axisList().size() == 3 && srcGeogCRS && boundSrcHubAsGeogCRS && comp0Geog && boundSrcHubAsGeogCRS->coordinateSystem()->axisList().size() == 3 && !srcGeogCRS->datumNonNull(dbContext)->isEquivalentTo( comp0Geog->datumNonNull(dbContext).get(), util::IComparable::Criterion::EQUIVALENT) && boundSrcHubAsGeogCRS && boundSrcHubAsGeogCRS->datumNonNull(dbContext)->isEquivalentTo( comp0Geog->datumNonNull(dbContext).get(), util::IComparable::Criterion::EQUIVALENT)) { const auto ops1 = createOperations(sourceCRS, util::optional(), boundSrc->hubCRS(), util::optional(), context); const auto ops2 = createOperations( boundSrc->hubCRS(), util::optional(), targetCRS, util::optional(), context); for (const auto &op1 : ops1) { for (const auto &op2 : ops2) { try { res.emplace_back( ConcatenatedOperation::createComputeMetadata( {op1, op2}, disallowEmptyIntersection)); } catch (const std::exception &) { } } } if (!res.empty()) { return; } } } // There might be better things to do, but for now just ignore the // transformation of the bound CRS res = createOperations(boundSrc->baseCRS(), util::optional(), targetCRS, util::optional(), context); } //! @endcond // --------------------------------------------------------------------------- /** \brief Find a list of CoordinateOperation from sourceCRS to targetCRS. * * The operations are sorted with the most relevant ones first: by * descending * area (intersection of the transformation area with the area of interest, * or intersection of the transformation with the area of use of the CRS), * and * by increasing accuracy. Operations with unknown accuracy are sorted last, * whatever their area. * * When one of the source or target CRS has a vertical component but not the * other one, the one that has no vertical component is automatically promoted * to a 3D version, where its vertical axis is the ellipsoidal height in metres, * using the ellipsoid of the base geodetic CRS. * * @param sourceCRS source CRS. * @param targetCRS target CRS. * @param context Search context. * @return a list */ std::vector CoordinateOperationFactory::createOperations( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const CoordinateOperationContextNNPtr &context) const { #ifdef TRACE_CREATE_OPERATIONS ENTER_FUNCTION(); #endif // Look if we are called on CRS that have a link to a 'canonical' // BoundCRS // If so, use that one as input const auto &srcBoundCRS = sourceCRS->canonicalBoundCRS(); const auto &targetBoundCRS = targetCRS->canonicalBoundCRS(); auto l_sourceCRS = srcBoundCRS ? NN_NO_CHECK(srcBoundCRS) : sourceCRS; auto l_targetCRS = targetBoundCRS ? NN_NO_CHECK(targetBoundCRS) : targetCRS; const auto &authFactory = context->getAuthorityFactory(); metadata::ExtentPtr sourceCRSExtent; auto l_resolvedSourceCRS = crs::CRS::getResolvedCRS(l_sourceCRS, authFactory, sourceCRSExtent); metadata::ExtentPtr targetCRSExtent; auto l_resolvedTargetCRS = crs::CRS::getResolvedCRS(l_targetCRS, authFactory, targetCRSExtent); if (context->getSourceAndTargetCRSExtentUse() == CoordinateOperationContext::SourceTargetCRSExtentUse::NONE) { // Make sure *not* to use CRS extent if requested to ignore it sourceCRSExtent.reset(); targetCRSExtent.reset(); } Private::Context contextPrivate(sourceCRSExtent, targetCRSExtent, context); if (context->getSourceAndTargetCRSExtentUse() == CoordinateOperationContext::SourceTargetCRSExtentUse::INTERSECTION) { if (sourceCRSExtent && targetCRSExtent && !sourceCRSExtent->intersects(NN_NO_CHECK(targetCRSExtent))) { return std::vector(); } } auto resFiltered = filterAndSort( Private::createOperations( l_resolvedSourceCRS, context->getSourceCoordinateEpoch(), l_resolvedTargetCRS, context->getTargetCoordinateEpoch(), contextPrivate), context, sourceCRSExtent, targetCRSExtent); if (context->getSourceCoordinateEpoch().has_value() || context->getTargetCoordinateEpoch().has_value()) { std::vector res; res.reserve(resFiltered.size()); for (const auto &op : resFiltered) { auto opClone = op->shallowClone(); opClone->setSourceCoordinateEpoch( context->getSourceCoordinateEpoch()); opClone->setTargetCoordinateEpoch( context->getTargetCoordinateEpoch()); res.emplace_back(opClone); } return res; } return resFiltered; } // --------------------------------------------------------------------------- /** \brief Find a list of CoordinateOperation from a source coordinate metadata * to targetCRS. * @param sourceCoordinateMetadata source CoordinateMetadata. * @param targetCRS target CRS. * @param context Search context. * @return a list * @since 9.2 */ std::vector CoordinateOperationFactory::createOperations( const coordinates::CoordinateMetadataNNPtr &sourceCoordinateMetadata, const crs::CRSNNPtr &targetCRS, const CoordinateOperationContextNNPtr &context) const { auto newContext = context->clone(); newContext->setSourceCoordinateEpoch( sourceCoordinateMetadata->coordinateEpoch()); return createOperations(sourceCoordinateMetadata->crs(), targetCRS, newContext); } // --------------------------------------------------------------------------- /** \brief Find a list of CoordinateOperation from a source CRS to a target * coordinate metadata. * @param sourceCRS source CRS. * @param targetCoordinateMetadata target CoordinateMetadata. * @param context Search context. * @return a list * @since 9.2 */ std::vector CoordinateOperationFactory::createOperations( const crs::CRSNNPtr &sourceCRS, const coordinates::CoordinateMetadataNNPtr &targetCoordinateMetadata, const CoordinateOperationContextNNPtr &context) const { auto newContext = context->clone(); newContext->setTargetCoordinateEpoch( targetCoordinateMetadata->coordinateEpoch()); return createOperations(sourceCRS, targetCoordinateMetadata->crs(), newContext); } // --------------------------------------------------------------------------- /** \brief Find a list of CoordinateOperation from a source coordinate metadata * to a target coordinate metadata. * * Both source_crs and target_crs can be a CoordinateMetadata * with an associated coordinate epoch, to perform changes of coordinate epochs. * Note however than this is in practice limited to use of velocity grids inside * the same dynamic CRS. * * @param sourceCoordinateMetadata source CoordinateMetadata. * @param targetCoordinateMetadata target CoordinateMetadata. * @param context Search context. * @return a list * @since 9.4 */ std::vector CoordinateOperationFactory::createOperations( const coordinates::CoordinateMetadataNNPtr &sourceCoordinateMetadata, const coordinates::CoordinateMetadataNNPtr &targetCoordinateMetadata, const CoordinateOperationContextNNPtr &context) const { auto newContext = context->clone(); newContext->setSourceCoordinateEpoch( sourceCoordinateMetadata->coordinateEpoch()); newContext->setTargetCoordinateEpoch( targetCoordinateMetadata->coordinateEpoch()); return createOperations(sourceCoordinateMetadata->crs(), targetCoordinateMetadata->crs(), newContext); } // --------------------------------------------------------------------------- /** \brief Instantiate a CoordinateOperationFactory. */ CoordinateOperationFactoryNNPtr CoordinateOperationFactory::create() { return NN_NO_CHECK( CoordinateOperationFactory::make_unique()); } // --------------------------------------------------------------------------- } // namespace operation namespace crs { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress crs::CRSNNPtr CRS::getResolvedCRS(const crs::CRSNNPtr &crs, const io::AuthorityFactoryPtr &authFactory, metadata::ExtentPtr &extentOut) { if (crs->hasOver()) { return crs; } const auto &ids = crs->identifiers(); const auto &name = crs->nameStr(); bool approxExtent; extentOut = operation::getExtentPossiblySynthetized(crs, approxExtent); // We try to "identify" the provided CRS with the ones of the database, // but in a more restricted way that what identify() does. // If we get a match from id in priority, and from name as a fallback, and // that they are equivalent to the input CRS, then use the identified CRS. // Even if they aren't equivalent, we update extentOut with the one of the // identified CRS if our input one is absent/not reliable. const auto tryToIdentifyByName = [&crs, &name, &authFactory, approxExtent, &extentOut](io::AuthorityFactory::ObjectType objectType) { if (name != "unknown" && name != "unnamed") { auto matches = authFactory->createObjectsFromName( name, {objectType}, false, 2); if (matches.size() == 1) { auto match = util::nn_static_pointer_cast(matches.front()); if (approxExtent || !extentOut) { extentOut = operation::getExtent(match); } if (match->isEquivalentTo( crs.get(), util::IComparable::Criterion::EQUIVALENT)) { return match; } } } return crs; }; auto geogCRS = dynamic_cast(crs.get()); if (geogCRS && authFactory) { if (!ids.empty()) { const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), *ids.front()->codeSpace()); try { auto resolvedCrs( tmpAuthFactory->createGeographicCRS(ids.front()->code())); if (approxExtent || !extentOut) { extentOut = operation::getExtent(resolvedCrs); } if (resolvedCrs->isEquivalentTo( crs.get(), util::IComparable::Criterion::EQUIVALENT)) { return util::nn_static_pointer_cast(resolvedCrs); } } catch (const std::exception &) { } } else { return tryToIdentifyByName( geogCRS->coordinateSystem()->axisList().size() == 2 ? io::AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS : io::AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS); } } auto projectedCrs = dynamic_cast(crs.get()); if (projectedCrs && authFactory) { if (!ids.empty()) { const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), *ids.front()->codeSpace()); try { auto resolvedCrs( tmpAuthFactory->createProjectedCRS(ids.front()->code())); if (approxExtent || !extentOut) { extentOut = operation::getExtent(resolvedCrs); } if (resolvedCrs->isEquivalentTo( crs.get(), util::IComparable::Criterion::EQUIVALENT)) { return util::nn_static_pointer_cast(resolvedCrs); } } catch (const std::exception &) { } } else { return tryToIdentifyByName( io::AuthorityFactory::ObjectType::PROJECTED_CRS); } } auto compoundCrs = dynamic_cast(crs.get()); if (compoundCrs && authFactory) { if (!ids.empty()) { const auto tmpAuthFactory = io::AuthorityFactory::create( authFactory->databaseContext(), *ids.front()->codeSpace()); try { auto resolvedCrs( tmpAuthFactory->createCompoundCRS(ids.front()->code())); if (approxExtent || !extentOut) { extentOut = operation::getExtent(resolvedCrs); } if (resolvedCrs->isEquivalentTo( crs.get(), util::IComparable::Criterion::EQUIVALENT)) { return util::nn_static_pointer_cast(resolvedCrs); } } catch (const std::exception &) { } } else { auto outCrs = tryToIdentifyByName( io::AuthorityFactory::ObjectType::COMPOUND_CRS); const auto &components = compoundCrs->componentReferenceSystems(); if (outCrs.get() != crs.get()) { bool hasGeoid = false; if (components.size() == 2) { auto vertCRS = dynamic_cast(components[1].get()); if (vertCRS && !vertCRS->geoidModel().empty()) { hasGeoid = true; } } if (!hasGeoid) { return outCrs; } } if (approxExtent || !extentOut) { // If we still did not get a reliable extent, then try to // resolve the components of the compoundCRS, and take the // intersection of their extent. extentOut = metadata::ExtentPtr(); for (const auto &component : components) { metadata::ExtentPtr componentExtent; getResolvedCRS(component, authFactory, componentExtent); if (extentOut && componentExtent) extentOut = extentOut->intersection( NN_NO_CHECK(componentExtent)); else if (componentExtent) extentOut = std::move(componentExtent); } } } } return crs; } //! @endcond } // namespace crs NS_PROJ_END proj-9.6.0/src/iso19111/operation/esriparammappings.cpp000664 001754 001755 00000202757 14764566077 022642 0ustar00e012349e012349000000 000000 // This file was generated by scripts/build_esri_projection_mapping.py. DO NOT // EDIT ! /****************************************************************************** * * Project: PROJ * Purpose: Mappings between ESRI projection and parameters names and WKT2 * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "esriparammappings.hpp" #include "proj_constants.h" #include "proj/internal/internal.hpp" NS_PROJ_START using namespace internal; namespace operation { //! @cond Doxygen_Suppress const ESRIParamMapping paramsESRI_Equidistant_Cylindrical[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; const ESRIParamMapping paramsESRI_Plate_Carree[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Miller_Cylindrical[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Mercator[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; const ESRIParamMapping paramsESRI_Gauss_Kruger[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; const ESRIParamMapping paramsESRI_Transverse_Mercator[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Transverse_Mercator_Complex[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Albers[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {"Standard_Parallel_2", EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Sinusoidal[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Mollweide[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Eckert_I[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Eckert_II[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Eckert_III[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Eckert_IV[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Eckert_V[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Eckert_VI[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Gall_Stereographic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Winkel_I[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Winkel_II[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Lambert_Conformal_Conic_alt1[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Lambert_Conformal_Conic_alt2[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {"Standard_Parallel_2", EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Lambert_Conformal_Conic_alt3[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {"Standard_Parallel_2", EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, "0.0", false}, {"Scale_Factor", nullptr, 0, "1.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Lambert_Conformal_Conic_alt4[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {"Standard_Parallel_2", EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_ELLIPSOID_SCALE_FACTOR, EPSG_CODE_PARAMETER_ELLIPSOID_SCALE_FACTOR, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Polyconic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Quartic_Authalic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Loximuthal[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Central_Parallel", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Bonne[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Hotine_Oblique_Mercator_Two_Point_Natural_Origin[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_1st_Point", "Latitude of 1st point", 0, "0.0", false}, {"Latitude_Of_2nd_Point", "Latitude of 2nd point", 0, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_1st_Point", "Longitude of 1st point", 0, "0.0", false}, {"Longitude_Of_2nd_Point", "Longitude of 2nd point", 0, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Stereographic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Polar_Stereographic_Variant_A[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Equidistant_Conic[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {"Standard_Parallel_2", EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Cassini[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", nullptr, 0, "1.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Van_der_Grinten_I[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Robinson[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Two_Point_Equidistant[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Latitude_Of_1st_Point", "Latitude of 1st point", 0, "0.0", false}, {"Latitude_Of_2nd_Point", "Latitude of 2nd point", 0, "0.0", false}, {"Longitude_Of_1st_Point", "Longitude of 1st point", 0, "0.0", false}, {"Longitude_Of_2nd_Point", "Longitude of 2nd point", 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Azimuthal_Equidistant[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Lambert_Azimuthal_Equal_Area[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Cylindrical_Equal_Area[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Behrmann[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", true}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "30.0", true}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Hotine_Oblique_Mercator_Two_Point_Center[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_1st_Point", "Latitude of 1st point", 0, "0.0", false}, {"Latitude_Of_2nd_Point", "Latitude of 2nd point", 0, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_1st_Point", "Longitude of 1st point", 0, "0.0", false}, {"Longitude_Of_2nd_Point", "Longitude of 2nd point", 0, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; const ESRIParamMapping paramsESRI_Hotine_Oblique_Mercator_Azimuth_Natural_Origin[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; const ESRIParamMapping paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Double_Stereographic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Krovak_alt1[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Pseudo_Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL, EPSG_CODE_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS, EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {"X_Scale", nullptr, 0, "1.0", false}, {"Y_Scale", nullptr, 0, "1.0", false}, {"XY_Plane_Rotation", nullptr, 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Krovak_alt2[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Pseudo_Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL, EPSG_CODE_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS, EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {"X_Scale", nullptr, 0, "-1.0", false}, {"Y_Scale", nullptr, 0, "1.0", false}, {"XY_Plane_Rotation", nullptr, 0, "90.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_New_Zealand_Map_Grid[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Longitude_Of_Origin", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Orthographic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Local[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Winkel_Tripel[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Aitoff[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Flat_Polar_Quartic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Craster_Parabolic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Gnomonic[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Times[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Vertical_Near_Side_Perspective[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN, "0.0", false}, {"Height", EPSG_NAME_PARAMETER_VIEWPOINT_HEIGHT, EPSG_CODE_PARAMETER_VIEWPOINT_HEIGHT, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Stereographic_North_Pole[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Stereographic_South_Pole[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin[] = {{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {"XY_Plane_Rotation", EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Center[] = { {"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {"XY_Plane_Rotation", EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt1[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Option", nullptr, 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt2[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Option", nullptr, 0, "1.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt3[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Option", nullptr, 0, "2.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Equidistant_Cylindrical_Ellipsoidal[] = {{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Laborde_Oblique_Mercator[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, "0.0", false}, {"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Gnomonic_Ellipsoidal[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Wagner_IV[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", nullptr, 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Wagner_V[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Wagner_VII[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Natural_Earth[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Natural_Earth_II[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Patterson[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Compact_Miller[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Geostationary_Satellite[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Height", "Satellite Height", 0, "0.0", false}, {"Option", nullptr, 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Mercator_Auxiliary_Sphere[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Auxiliary_Sphere_Type", nullptr, 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Mercator_Variant_A[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Mercator_Variant_C[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Standard_Parallel_1", EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false}, {"Latitude_Of_Origin", nullptr, 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Transverse_Cylindrical_Equal_Area[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_IGAC_Plano_Cartesiano[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Height", EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, EPSG_CODE_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Equal_Earth[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Peirce_Quincuncial_alt1[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Option", nullptr, 0, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIParamMapping paramsESRI_Peirce_Quincuncial_alt2[] = { {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false}, {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false}, {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, "0.0", false}, {"Latitude_Of_Origin", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {"Option", nullptr, 0, "1.0", false}, {nullptr, nullptr, 0, "0.0", false}}; static const ESRIMethodMapping esriMappings[] = { {"Equidistant_Cylindrical", EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL, paramsESRI_Equidistant_Cylindrical}, {"Plate_Carree", EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL, paramsESRI_Plate_Carree}, {"Plate_Carree", EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL, paramsESRI_Plate_Carree}, {"Miller_Cylindrical", PROJ_WKT2_NAME_METHOD_MILLER_CYLINDRICAL, 0, paramsESRI_Miller_Cylindrical}, {"Mercator", EPSG_NAME_METHOD_MERCATOR_VARIANT_B, EPSG_CODE_METHOD_MERCATOR_VARIANT_B, paramsESRI_Mercator}, {"Gauss_Kruger", EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, paramsESRI_Gauss_Kruger}, {"Transverse_Mercator", EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, paramsESRI_Transverse_Mercator}, {"Transverse_Mercator_Complex", EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, paramsESRI_Transverse_Mercator_Complex}, {"Albers", EPSG_NAME_METHOD_ALBERS_EQUAL_AREA, EPSG_CODE_METHOD_ALBERS_EQUAL_AREA, paramsESRI_Albers}, {"Sinusoidal", PROJ_WKT2_NAME_METHOD_SINUSOIDAL, 0, paramsESRI_Sinusoidal}, {"Mollweide", PROJ_WKT2_NAME_METHOD_MOLLWEIDE, 0, paramsESRI_Mollweide}, {"Eckert_I", PROJ_WKT2_NAME_METHOD_ECKERT_I, 0, paramsESRI_Eckert_I}, {"Eckert_II", PROJ_WKT2_NAME_METHOD_ECKERT_II, 0, paramsESRI_Eckert_II}, {"Eckert_III", PROJ_WKT2_NAME_METHOD_ECKERT_III, 0, paramsESRI_Eckert_III}, {"Eckert_IV", PROJ_WKT2_NAME_METHOD_ECKERT_IV, 0, paramsESRI_Eckert_IV}, {"Eckert_V", PROJ_WKT2_NAME_METHOD_ECKERT_V, 0, paramsESRI_Eckert_V}, {"Eckert_VI", PROJ_WKT2_NAME_METHOD_ECKERT_VI, 0, paramsESRI_Eckert_VI}, {"Gall_Stereographic", PROJ_WKT2_NAME_METHOD_GALL_STEREOGRAPHIC, 0, paramsESRI_Gall_Stereographic}, {"Winkel_I", "Winkel I", 0, paramsESRI_Winkel_I}, {"Winkel_II", "Winkel II", 0, paramsESRI_Winkel_II}, {"Lambert_Conformal_Conic", EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP, paramsESRI_Lambert_Conformal_Conic_alt1}, {"Lambert_Conformal_Conic", EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP, paramsESRI_Lambert_Conformal_Conic_alt2}, {"Lambert_Conformal_Conic", EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP, paramsESRI_Lambert_Conformal_Conic_alt3}, {"Lambert_Conformal_Conic", EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN, paramsESRI_Lambert_Conformal_Conic_alt4}, {"Polyconic", EPSG_NAME_METHOD_AMERICAN_POLYCONIC, EPSG_CODE_METHOD_AMERICAN_POLYCONIC, paramsESRI_Polyconic}, {"Quartic_Authalic", "Quartic Authalic", 0, paramsESRI_Quartic_Authalic}, {"Loximuthal", "Loximuthal", 0, paramsESRI_Loximuthal}, {"Bonne", EPSG_NAME_METHOD_BONNE, EPSG_CODE_METHOD_BONNE, paramsESRI_Bonne}, {"Hotine_Oblique_Mercator_Two_Point_Natural_Origin", PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN, 0, paramsESRI_Hotine_Oblique_Mercator_Two_Point_Natural_Origin}, {"Stereographic", PROJ_WKT2_NAME_METHOD_STEREOGRAPHIC, 0, paramsESRI_Stereographic}, {"Polar_Stereographic_Variant_A", EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A, EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A, paramsESRI_Polar_Stereographic_Variant_A}, {"Equidistant_Conic", EPSG_NAME_METHOD_EQUIDISTANT_CONIC, EPSG_CODE_METHOD_EQUIDISTANT_CONIC, paramsESRI_Equidistant_Conic}, {"Cassini", EPSG_NAME_METHOD_CASSINI_SOLDNER, EPSG_CODE_METHOD_CASSINI_SOLDNER, paramsESRI_Cassini}, {"Van_der_Grinten_I", PROJ_WKT2_NAME_METHOD_VAN_DER_GRINTEN, 0, paramsESRI_Van_der_Grinten_I}, {"Robinson", PROJ_WKT2_NAME_METHOD_ROBINSON, 0, paramsESRI_Robinson}, {"Two_Point_Equidistant", PROJ_WKT2_NAME_METHOD_TWO_POINT_EQUIDISTANT, 0, paramsESRI_Two_Point_Equidistant}, {"Azimuthal_Equidistant", EPSG_NAME_METHOD_AZIMUTHAL_EQUIDISTANT, EPSG_CODE_METHOD_AZIMUTHAL_EQUIDISTANT, paramsESRI_Azimuthal_Equidistant}, {"Lambert_Azimuthal_Equal_Area", EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA, EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA, paramsESRI_Lambert_Azimuthal_Equal_Area}, {"Cylindrical_Equal_Area", EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA, EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA, paramsESRI_Cylindrical_Equal_Area}, {"Behrmann", EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA, EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA, paramsESRI_Behrmann}, {"Hotine_Oblique_Mercator_Two_Point_Center", PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN, 0, paramsESRI_Hotine_Oblique_Mercator_Two_Point_Center}, {"Hotine_Oblique_Mercator_Azimuth_Natural_Origin", EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A, paramsESRI_Hotine_Oblique_Mercator_Azimuth_Natural_Origin}, {"Hotine_Oblique_Mercator_Azimuth_Center", EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B, paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center}, {"Double_Stereographic", EPSG_NAME_METHOD_OBLIQUE_STEREOGRAPHIC, EPSG_CODE_METHOD_OBLIQUE_STEREOGRAPHIC, paramsESRI_Double_Stereographic}, {"Krovak", EPSG_NAME_METHOD_KROVAK, EPSG_CODE_METHOD_KROVAK, paramsESRI_Krovak_alt1}, {"Krovak", EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED, EPSG_CODE_METHOD_KROVAK_NORTH_ORIENTED, paramsESRI_Krovak_alt2}, {"New_Zealand_Map_Grid", EPSG_NAME_METHOD_NZMG, EPSG_CODE_METHOD_NZMG, paramsESRI_New_Zealand_Map_Grid}, {"Orthographic", PROJ_WKT2_NAME_ORTHOGRAPHIC_SPHERICAL, 0, paramsESRI_Orthographic}, {"Local", EPSG_NAME_METHOD_LOCAL_ORTHOGRAPHIC, EPSG_CODE_METHOD_LOCAL_ORTHOGRAPHIC, paramsESRI_Local}, {"Winkel_Tripel", "Winkel Tripel", 0, paramsESRI_Winkel_Tripel}, {"Aitoff", "Aitoff", 0, paramsESRI_Aitoff}, {"Flat_Polar_Quartic", PROJ_WKT2_NAME_METHOD_FLAT_POLAR_QUARTIC, 0, paramsESRI_Flat_Polar_Quartic}, {"Craster_Parabolic", "Craster Parabolic", 0, paramsESRI_Craster_Parabolic}, {"Gnomonic", PROJ_WKT2_NAME_METHOD_GNOMONIC, 0, paramsESRI_Gnomonic}, {"Times", PROJ_WKT2_NAME_METHOD_TIMES, 0, paramsESRI_Times}, {"Vertical_Near_Side_Perspective", EPSG_NAME_METHOD_VERTICAL_PERSPECTIVE, EPSG_CODE_METHOD_VERTICAL_PERSPECTIVE, paramsESRI_Vertical_Near_Side_Perspective}, {"Stereographic_North_Pole", EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B, EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B, paramsESRI_Stereographic_North_Pole}, {"Stereographic_South_Pole", EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B, EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B, paramsESRI_Stereographic_South_Pole}, {"Rectified_Skew_Orthomorphic_Natural_Origin", EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A, paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin}, {"Rectified_Skew_Orthomorphic_Center", EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B, paramsESRI_Rectified_Skew_Orthomorphic_Center}, {"Goode_Homolosine", PROJ_WKT2_NAME_METHOD_GOODE_HOMOLOSINE, 0, paramsESRI_Goode_Homolosine_alt1}, {"Goode_Homolosine", PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE, 0, paramsESRI_Goode_Homolosine_alt2}, {"Goode_Homolosine", PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE_OCEAN, 0, paramsESRI_Goode_Homolosine_alt3}, {"Equidistant_Cylindrical_Ellipsoidal", EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL, paramsESRI_Equidistant_Cylindrical_Ellipsoidal}, {"Laborde_Oblique_Mercator", EPSG_NAME_METHOD_LABORDE_OBLIQUE_MERCATOR, EPSG_CODE_METHOD_LABORDE_OBLIQUE_MERCATOR, paramsESRI_Laborde_Oblique_Mercator}, {"Gnomonic_Ellipsoidal", PROJ_WKT2_NAME_METHOD_GNOMONIC, 0, paramsESRI_Gnomonic_Ellipsoidal}, {"Wagner_IV", PROJ_WKT2_NAME_METHOD_WAGNER_IV, 0, paramsESRI_Wagner_IV}, {"Wagner_V", PROJ_WKT2_NAME_METHOD_WAGNER_V, 0, paramsESRI_Wagner_V}, {"Wagner_VII", PROJ_WKT2_NAME_METHOD_WAGNER_VII, 0, paramsESRI_Wagner_VII}, {"Natural_Earth", PROJ_WKT2_NAME_METHOD_NATURAL_EARTH, 0, paramsESRI_Natural_Earth}, {"Natural_Earth_II", PROJ_WKT2_NAME_METHOD_NATURAL_EARTH_II, 0, paramsESRI_Natural_Earth_II}, {"Patterson", PROJ_WKT2_NAME_METHOD_PATTERSON, 0, paramsESRI_Patterson}, {"Compact_Miller", PROJ_WKT2_NAME_METHOD_COMPACT_MILLER, 0, paramsESRI_Compact_Miller}, {"Geostationary_Satellite", PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_Y, 0, paramsESRI_Geostationary_Satellite}, {"Mercator_Auxiliary_Sphere", EPSG_NAME_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR, EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR, paramsESRI_Mercator_Auxiliary_Sphere}, {"Mercator_Variant_A", EPSG_NAME_METHOD_MERCATOR_VARIANT_A, EPSG_CODE_METHOD_MERCATOR_VARIANT_A, paramsESRI_Mercator_Variant_A}, {"Mercator_Variant_C", EPSG_NAME_METHOD_MERCATOR_VARIANT_B, EPSG_CODE_METHOD_MERCATOR_VARIANT_B, paramsESRI_Mercator_Variant_C}, {"Transverse_Cylindrical_Equal_Area", "Transverse Cylindrical Equal Area", 0, paramsESRI_Transverse_Cylindrical_Equal_Area}, {"IGAC_Plano_Cartesiano", EPSG_NAME_METHOD_COLOMBIA_URBAN, EPSG_CODE_METHOD_COLOMBIA_URBAN, paramsESRI_IGAC_Plano_Cartesiano}, {"Equal_Earth", EPSG_NAME_METHOD_EQUAL_EARTH, EPSG_CODE_METHOD_EQUAL_EARTH, paramsESRI_Equal_Earth}, {"Peirce_Quincuncial", PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE, 0, paramsESRI_Peirce_Quincuncial_alt1}, {"Peirce_Quincuncial", PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND, 0, paramsESRI_Peirce_Quincuncial_alt2}, }; // --------------------------------------------------------------------------- const ESRIMethodMapping *getEsriMappings(size_t &nElts) { nElts = sizeof(esriMappings) / sizeof(esriMappings[0]); return esriMappings; } // --------------------------------------------------------------------------- std::vector getMappingsFromESRI(const std::string &esri_name) { std::vector res; for (const auto &mapping : esriMappings) { if (ci_equal(esri_name, mapping.esri_name)) { res.push_back(&mapping); } } return res; } //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/esriparammappings.hpp000664 001754 001755 00000006106 14764566077 022635 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef ESRIPARAMMAPPINGS_HPP #define ESRIPARAMMAPPINGS_HPP #include "proj/coordinateoperation.hpp" #include "proj/util.hpp" #include "esriparammappings.hpp" #include // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ESRIParamMapping { const char *esri_name; const char *wkt2_name; int epsg_code; const char *fixed_value; bool is_fixed_value; }; struct ESRIMethodMapping { const char *esri_name; const char *wkt2_name; int epsg_code; const ESRIParamMapping *const params; }; extern const ESRIParamMapping paramsESRI_Plate_Carree[]; extern const ESRIParamMapping paramsESRI_Equidistant_Cylindrical[]; extern const ESRIParamMapping paramsESRI_Gauss_Kruger[]; extern const ESRIParamMapping paramsESRI_Transverse_Mercator[]; extern const ESRIParamMapping paramsESRI_Hotine_Oblique_Mercator_Azimuth_Natural_Origin[]; extern const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin[]; extern const ESRIParamMapping paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center[]; extern const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Center[]; const ESRIMethodMapping *getEsriMappings(size_t &nElts); std::vector getMappingsFromESRI(const std::string &esri_name); //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END #endif // ESRIPARAMMAPPINGS_HPP proj-9.6.0/src/iso19111/operation/operationmethod_private.hpp000664 001754 001755 00000004372 14764566077 024051 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef OPERATIONMETHOD_PRIVATE_HPP #define OPERATIONMETHOD_PRIVATE_HPP #include "proj/coordinateoperation.hpp" #include "proj/util.hpp" // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct OperationMethod::Private { util::optional formula_{}; util::optional formulaCitation_{}; std::vector parameters_{}; std::string projMethodOverride_{}; }; //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END #endif // OPERATIONMETHOD_PRIVATE_HPP proj-9.6.0/src/iso19111/operation/oputils.cpp000664 001754 001755 00000054710 14764566077 020611 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include #include "proj/coordinateoperation.hpp" #include "proj/crs.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "oputils.hpp" #include "parammappings.hpp" #include "proj_constants.h" // --------------------------------------------------------------------------- NS_PROJ_START using namespace internal; namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const char *BALLPARK_GEOCENTRIC_TRANSLATION = "Ballpark geocentric translation"; const char *NULL_GEOGRAPHIC_OFFSET = "Null geographic offset"; const char *NULL_GEOCENTRIC_TRANSLATION = "Null geocentric translation"; const char *BALLPARK_GEOGRAPHIC_OFFSET = "Ballpark geographic offset"; const char *BALLPARK_VERTICAL_TRANSFORMATION = "ballpark vertical transformation"; const char *BALLPARK_VERTICAL_TRANSFORMATION_NO_ELLIPSOID_VERT_HEIGHT = "ballpark vertical transformation, without ellipsoid height to vertical " "height correction"; // --------------------------------------------------------------------------- OperationParameterNNPtr createOpParamNameEPSGCode(int code) { const char *name = OperationParameter::getNameForEPSGCode(code); assert(name); return OperationParameter::create(createMapNameEPSGCode(name, code)); } // --------------------------------------------------------------------------- util::PropertyMap createMethodMapNameEPSGCode(int code) { const char *name = nullptr; size_t nMethodNameCodes = 0; const auto methodNameCodes = getMethodNameCodes(nMethodNameCodes); for (size_t i = 0; i < nMethodNameCodes; ++i) { const auto &tuple = methodNameCodes[i]; if (tuple.epsg_code == code) { name = tuple.name; break; } } assert(name); return createMapNameEPSGCode(name, code); } // --------------------------------------------------------------------------- util::PropertyMap createMapNameEPSGCode(const std::string &name, int code) { return util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, code); } // --------------------------------------------------------------------------- util::PropertyMap createMapNameEPSGCode(const char *name, int code) { return util::PropertyMap() .set(common::IdentifiedObject::NAME_KEY, name) .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, code); } // --------------------------------------------------------------------------- util::PropertyMap &addDomains(util::PropertyMap &map, const common::ObjectUsage *obj) { auto ar = util::ArrayOfBaseObject::create(); for (const auto &domain : obj->domains()) { ar->add(domain); } if (!ar->empty()) { map.set(common::ObjectUsage::OBJECT_DOMAIN_KEY, ar); } return map; } // --------------------------------------------------------------------------- static const char *getCRSQualifierStr(const crs::CRSPtr &crs) { auto geod = dynamic_cast(crs.get()); if (geod) { if (geod->isGeocentric()) { return " (geocentric)"; } auto geog = dynamic_cast(geod); if (geog) { if (geog->coordinateSystem()->axisList().size() == 2) { return " (geog2D)"; } else { return " (geog3D)"; } } } return ""; } // --------------------------------------------------------------------------- std::string buildOpName(const char *opType, const crs::CRSPtr &source, const crs::CRSPtr &target) { std::string res(opType); const auto &srcName = source->nameStr(); const auto &targetName = target->nameStr(); const char *srcQualifier = ""; const char *targetQualifier = ""; if (srcName == targetName) { srcQualifier = getCRSQualifierStr(source); targetQualifier = getCRSQualifierStr(target); if (strcmp(srcQualifier, targetQualifier) == 0) { srcQualifier = ""; targetQualifier = ""; } } res += " from "; res += srcName; res += srcQualifier; res += " to "; res += targetName; res += targetQualifier; return res; } // --------------------------------------------------------------------------- void addModifiedIdentifier(util::PropertyMap &map, const common::IdentifiedObject *obj, bool inverse, bool derivedFrom) { // If original operation is AUTH:CODE, then assign INVERSE(AUTH):CODE // as identifier. auto ar = util::ArrayOfBaseObject::create(); for (const auto &idSrc : obj->identifiers()) { auto authName = *(idSrc->codeSpace()); const auto &srcCode = idSrc->code(); if (derivedFrom) { authName = concat("DERIVED_FROM(", authName, ")"); } if (inverse) { if (starts_with(authName, "INVERSE(") && authName.back() == ')') { authName = authName.substr(strlen("INVERSE(")); authName.resize(authName.size() - 1); } else { authName = concat("INVERSE(", authName, ")"); } } auto idsProp = util::PropertyMap().set( metadata::Identifier::CODESPACE_KEY, authName); ar->add(metadata::Identifier::create(srcCode, idsProp)); } if (!ar->empty()) { map.set(common::IdentifiedObject::IDENTIFIERS_KEY, ar); } } // --------------------------------------------------------------------------- util::PropertyMap createPropertiesForInverse(const OperationMethodNNPtr &method) { util::PropertyMap map; const std::string &forwardName = method->nameStr(); if (!forwardName.empty()) { if (starts_with(forwardName, INVERSE_OF)) { map.set(common::IdentifiedObject::NAME_KEY, forwardName.substr(INVERSE_OF.size())); } else { map.set(common::IdentifiedObject::NAME_KEY, INVERSE_OF + forwardName); } } addModifiedIdentifier(map, method.get(), true, false); return map; } // --------------------------------------------------------------------------- util::PropertyMap createPropertiesForInverse(const CoordinateOperation *op, bool derivedFrom, bool approximateInversion) { assert(op); util::PropertyMap map; // The domain(s) are unchanged by the inverse operation addDomains(map, op); const std::string &forwardName = op->nameStr(); // Forge a name for the inverse, either from the forward name, or // from the source and target CRS names const char *opType; if (starts_with(forwardName, BALLPARK_GEOCENTRIC_TRANSLATION)) { opType = BALLPARK_GEOCENTRIC_TRANSLATION; } else if (starts_with(forwardName, BALLPARK_GEOGRAPHIC_OFFSET)) { opType = BALLPARK_GEOGRAPHIC_OFFSET; } else if (starts_with(forwardName, NULL_GEOGRAPHIC_OFFSET)) { opType = NULL_GEOGRAPHIC_OFFSET; } else if (starts_with(forwardName, NULL_GEOCENTRIC_TRANSLATION)) { opType = NULL_GEOCENTRIC_TRANSLATION; } else if (dynamic_cast(op) || starts_with(forwardName, "Transformation from ")) { opType = "Transformation"; } else if (dynamic_cast(op)) { opType = "Conversion"; } else { opType = "Operation"; } auto sourceCRS = op->sourceCRS(); auto targetCRS = op->targetCRS(); std::string name; if (!forwardName.empty()) { if (dynamic_cast(op) == nullptr && dynamic_cast(op) == nullptr && (starts_with(forwardName, INVERSE_OF) || forwardName.find(" + ") != std::string::npos)) { std::vector tokens; std::string curToken; bool inString = false; for (size_t i = 0; i < forwardName.size(); ++i) { if (inString) { curToken += forwardName[i]; if (forwardName[i] == '\'') { inString = false; } } else if (i + 3 < forwardName.size() && memcmp(&forwardName[i], " + ", 3) == 0) { tokens.push_back(curToken); curToken.clear(); i += 2; } else if (forwardName[i] == '\'') { inString = true; curToken += forwardName[i]; } else { curToken += forwardName[i]; } } if (!curToken.empty()) { tokens.push_back(std::move(curToken)); } for (size_t i = tokens.size(); i > 0;) { i--; if (!name.empty()) { name += " + "; } if (starts_with(tokens[i], INVERSE_OF)) { name += tokens[i].substr(INVERSE_OF.size()); } else if (tokens[i] == AXIS_ORDER_CHANGE_2D_NAME || tokens[i] == AXIS_ORDER_CHANGE_3D_NAME) { name += tokens[i]; } else { name += INVERSE_OF + tokens[i]; } } } else if (!sourceCRS || !targetCRS || forwardName != buildOpName(opType, sourceCRS, targetCRS)) { if (forwardName.find(" + ") != std::string::npos) { name = INVERSE_OF + '\'' + forwardName + '\''; } else { name = INVERSE_OF + forwardName; } } } if (name.empty() && sourceCRS && targetCRS) { name = buildOpName(opType, targetCRS, sourceCRS); } if (approximateInversion) { name += " (approx. inversion)"; } if (!name.empty()) { map.set(common::IdentifiedObject::NAME_KEY, name); } const std::string &remarks = op->remarks(); if (!remarks.empty()) { map.set(common::IdentifiedObject::REMARKS_KEY, remarks); } addModifiedIdentifier(map, op, true, derivedFrom); const auto so = dynamic_cast(op); if (so) { const int soMethodEPSGCode = so->method()->getEPSGCode(); if (soMethodEPSGCode > 0) { map.set("OPERATION_METHOD_EPSG_CODE", soMethodEPSGCode); } } return map; } // --------------------------------------------------------------------------- util::PropertyMap addDefaultNameIfNeeded(const util::PropertyMap &properties, const std::string &defaultName) { if (!properties.get(common::IdentifiedObject::NAME_KEY)) { return util::PropertyMap(properties) .set(common::IdentifiedObject::NAME_KEY, defaultName); } else { return properties; } } // --------------------------------------------------------------------------- static std::string createEntryEqParam(const std::string &a, const std::string &b) { return a < b ? a + b : b + a; } static std::set buildSetEquivalentParameters() { std::set set; const char *const listOfEquivalentParameterNames[][7] = { {"latitude_of_point_1", "Latitude_Of_1st_Point", nullptr}, {"longitude_of_point_1", "Longitude_Of_1st_Point", nullptr}, {"latitude_of_point_2", "Latitude_Of_2nd_Point", nullptr}, {"longitude_of_point_2", "Longitude_Of_2nd_Point", nullptr}, {"satellite_height", "height", nullptr}, {EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN, EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE, nullptr}, {EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN, EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE, nullptr}, {EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, WKT1_SCALE_FACTOR, EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE, EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL, nullptr}, {WKT1_LATITUDE_OF_ORIGIN, WKT1_LATITUDE_OF_CENTER, EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, "Central_Parallel", nullptr}, {WKT1_CENTRAL_MERIDIAN, WKT1_LONGITUDE_OF_CENTER, EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, nullptr}, {EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE, EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, nullptr}, {"pseudo_standard_parallel_1", WKT1_STANDARD_PARALLEL_1, nullptr}, }; for (const auto ¶mList : listOfEquivalentParameterNames) { for (size_t i = 0; paramList[i]; i++) { auto a = metadata::Identifier::canonicalizeName(paramList[i]); for (size_t j = i + 1; paramList[j]; j++) { auto b = metadata::Identifier::canonicalizeName(paramList[j]); set.insert(createEntryEqParam(a, b)); } } } return set; } bool areEquivalentParameters(const std::string &a, const std::string &b) { static const std::set setEquivalentParameters = buildSetEquivalentParameters(); auto a_can = metadata::Identifier::canonicalizeName(a); auto b_can = metadata::Identifier::canonicalizeName(b); return setEquivalentParameters.find(createEntryEqParam(a_can, b_can)) != setEquivalentParameters.end(); } // --------------------------------------------------------------------------- bool isTimeDependent(const std::string &methodName) { return ci_find(methodName, "Time dependent") != std::string::npos || ci_find(methodName, "Time-dependent") != std::string::npos; } // --------------------------------------------------------------------------- std::string computeConcatenatedName( const std::vector &flattenOps) { std::string name; for (const auto &subOp : flattenOps) { if (!name.empty()) { name += " + "; } const auto &l_name = subOp->nameStr(); if (l_name.empty()) { name += "unnamed"; } else { name += l_name; } } return name; } // --------------------------------------------------------------------------- metadata::ExtentPtr getExtent(const CoordinateOperationNNPtr &op, bool conversionExtentIsWorld, bool &emptyIntersection) { auto conv = dynamic_cast(op.get()); if (conv) { emptyIntersection = false; return metadata::Extent::WORLD; } const auto &domains = op->domains(); if (!domains.empty()) { emptyIntersection = false; return domains[0]->domainOfValidity(); } auto concatenated = dynamic_cast(op.get()); if (!concatenated) { emptyIntersection = false; return nullptr; } return getExtent(concatenated->operations(), conversionExtentIsWorld, emptyIntersection); } // --------------------------------------------------------------------------- static const metadata::ExtentPtr nullExtent{}; const metadata::ExtentPtr &getExtent(const crs::CRSNNPtr &crs) { const auto &domains = crs->domains(); if (!domains.empty()) { return domains[0]->domainOfValidity(); } const auto *boundCRS = dynamic_cast(crs.get()); if (boundCRS) { return getExtent(boundCRS->baseCRS()); } return nullExtent; } const metadata::ExtentPtr getExtentPossiblySynthetized(const crs::CRSNNPtr &crs, bool &approxOut) { const auto &rawExtent(getExtent(crs)); approxOut = false; if (rawExtent) return rawExtent; const auto compoundCRS = dynamic_cast(crs.get()); if (compoundCRS) { // For a compoundCRS, take the intersection of the extent of its // components. const auto &components = compoundCRS->componentReferenceSystems(); metadata::ExtentPtr extent; approxOut = true; for (const auto &component : components) { const auto &componentExtent(getExtent(component)); if (extent && componentExtent) extent = extent->intersection(NN_NO_CHECK(componentExtent)); else if (componentExtent) extent = componentExtent; } return extent; } return rawExtent; } // --------------------------------------------------------------------------- metadata::ExtentPtr getExtent(const std::vector &ops, bool conversionExtentIsWorld, bool &emptyIntersection) { metadata::ExtentPtr res = nullptr; for (const auto &subop : ops) { const auto &subExtent = getExtent(subop, conversionExtentIsWorld, emptyIntersection); if (!subExtent) { if (emptyIntersection) { return nullptr; } continue; } if (res == nullptr) { res = subExtent; } else { res = res->intersection(NN_NO_CHECK(subExtent)); if (!res) { emptyIntersection = true; return nullptr; } } } emptyIntersection = false; return res; } // --------------------------------------------------------------------------- // Returns the accuracy of an operation, or -1 if unknown double getAccuracy(const CoordinateOperationNNPtr &op) { if (dynamic_cast(op.get())) { // A conversion is perfectly accurate. return 0.0; } double accuracy = -1.0; const auto &accuracies = op->coordinateOperationAccuracies(); if (!accuracies.empty()) { try { accuracy = c_locale_stod(accuracies[0]->value()); } catch (const std::exception &) { } } else { auto concatenated = dynamic_cast(op.get()); if (concatenated) { accuracy = getAccuracy(concatenated->operations()); } } return accuracy; } // --------------------------------------------------------------------------- // Returns the accuracy of a set of concatenated operations, or -1 if unknown double getAccuracy(const std::vector &ops) { double accuracy = -1.0; for (const auto &subop : ops) { const double subops_accuracy = getAccuracy(subop); if (subops_accuracy < 0.0) { return -1.0; } if (accuracy < 0.0) { accuracy = 0.0; } accuracy += subops_accuracy; } return accuracy; } // --------------------------------------------------------------------------- void exportSourceCRSAndTargetCRSToWKT(const CoordinateOperation *co, io::WKTFormatter *formatter) { auto l_sourceCRS = co->sourceCRS(); assert(l_sourceCRS); auto l_targetCRS = co->targetCRS(); assert(l_targetCRS); const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; const bool canExportCRSId = (isWKT2 && formatter->use2019Keywords() && !(formatter->idOnTopLevelOnly() && formatter->topLevelHasId())); const bool hasDomains = !co->domains().empty(); if (hasDomains) { formatter->pushDisableUsage(); } formatter->startNode(io::WKTConstants::SOURCECRS, false); if (canExportCRSId && !l_sourceCRS->identifiers().empty()) { // fake that top node has no id, so that the sourceCRS id is // considered formatter->pushHasId(false); l_sourceCRS->_exportToWKT(formatter); formatter->popHasId(); } else { l_sourceCRS->_exportToWKT(formatter); } formatter->endNode(); formatter->startNode(io::WKTConstants::TARGETCRS, false); if (canExportCRSId && !l_targetCRS->identifiers().empty()) { // fake that top node has no id, so that the targetCRS id is // considered formatter->pushHasId(false); l_targetCRS->_exportToWKT(formatter); formatter->popHasId(); } else { l_targetCRS->_exportToWKT(formatter); } formatter->endNode(); if (hasDomains) { formatter->popDisableUsage(); } } //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/oputils.hpp000664 001754 001755 00000011275 14764566077 020615 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef OPUTILS_HPP #define OPUTILS_HPP #include "proj/coordinateoperation.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress extern const common::Measure nullMeasure; extern const std::string INVERSE_OF; extern const char *BALLPARK_GEOCENTRIC_TRANSLATION; extern const char *NULL_GEOGRAPHIC_OFFSET; extern const char *NULL_GEOCENTRIC_TRANSLATION; extern const char *BALLPARK_GEOGRAPHIC_OFFSET; extern const char *BALLPARK_VERTICAL_TRANSFORMATION; extern const char *BALLPARK_VERTICAL_TRANSFORMATION_NO_ELLIPSOID_VERT_HEIGHT; extern const std::string AXIS_ORDER_CHANGE_2D_NAME; extern const std::string AXIS_ORDER_CHANGE_3D_NAME; OperationParameterNNPtr createOpParamNameEPSGCode(int code); util::PropertyMap createMethodMapNameEPSGCode(int code); util::PropertyMap createMapNameEPSGCode(const std::string &name, int code); util::PropertyMap createMapNameEPSGCode(const char *name, int code); util::PropertyMap &addDomains(util::PropertyMap &map, const common::ObjectUsage *obj); std::string buildOpName(const char *opType, const crs::CRSPtr &source, const crs::CRSPtr &target); void addModifiedIdentifier(util::PropertyMap &map, const common::IdentifiedObject *obj, bool inverse, bool derivedFrom); util::PropertyMap createPropertiesForInverse(const OperationMethodNNPtr &method); util::PropertyMap createPropertiesForInverse(const CoordinateOperation *op, bool derivedFrom, bool approximateInversion); util::PropertyMap addDefaultNameIfNeeded(const util::PropertyMap &properties, const std::string &defaultName); bool areEquivalentParameters(const std::string &a, const std::string &b); bool isTimeDependent(const std::string &methodName); std::string computeConcatenatedName( const std::vector &flattenOps); metadata::ExtentPtr getExtent(const std::vector &ops, bool conversionExtentIsWorld, bool &emptyIntersection); metadata::ExtentPtr getExtent(const CoordinateOperationNNPtr &op, bool conversionExtentIsWorld, bool &emptyIntersection); const metadata::ExtentPtr &getExtent(const crs::CRSNNPtr &crs); const metadata::ExtentPtr getExtentPossiblySynthetized(const crs::CRSNNPtr &crs, bool &approxOut); double getAccuracy(const CoordinateOperationNNPtr &op); double getAccuracy(const std::vector &ops); void exportSourceCRSAndTargetCRSToWKT(const CoordinateOperation *co, io::WKTFormatter *formatter); //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END #endif // OPUTILS_HPP proj-9.6.0/src/iso19111/operation/parametervalue.cpp000664 001754 001755 00000027430 14764566077 022126 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include #include #include #include #include using namespace NS_PROJ::internal; // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ParameterValue::Private { ParameterValue::Type type_{ParameterValue::Type::STRING}; std::unique_ptr measure_{}; std::unique_ptr stringValue_{}; int integerValue_{}; bool booleanValue_{}; explicit Private(const common::Measure &valueIn) : type_(ParameterValue::Type::MEASURE), measure_(std::make_unique(valueIn)) {} Private(const std::string &stringValueIn, ParameterValue::Type typeIn) : type_(typeIn), stringValue_(std::make_unique(stringValueIn)) {} explicit Private(int integerValueIn) : type_(ParameterValue::Type::INTEGER), integerValue_(integerValueIn) {} explicit Private(bool booleanValueIn) : type_(ParameterValue::Type::BOOLEAN), booleanValue_(booleanValueIn) {} }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ParameterValue::~ParameterValue() = default; //! @endcond // --------------------------------------------------------------------------- ParameterValue::ParameterValue(const common::Measure &measureIn) : d(std::make_unique(measureIn)) {} // --------------------------------------------------------------------------- ParameterValue::ParameterValue(const std::string &stringValueIn, ParameterValue::Type typeIn) : d(std::make_unique(stringValueIn, typeIn)) {} // --------------------------------------------------------------------------- ParameterValue::ParameterValue(int integerValueIn) : d(std::make_unique(integerValueIn)) {} // --------------------------------------------------------------------------- ParameterValue::ParameterValue(bool booleanValueIn) : d(std::make_unique(booleanValueIn)) {} // --------------------------------------------------------------------------- /** \brief Instantiate a ParameterValue from a Measure (i.e. a value associated * with a * unit) * * @return a new ParameterValue. */ ParameterValueNNPtr ParameterValue::create(const common::Measure &measureIn) { return ParameterValue::nn_make_shared(measureIn); } // --------------------------------------------------------------------------- /** \brief Instantiate a ParameterValue from a string value. * * @return a new ParameterValue. */ ParameterValueNNPtr ParameterValue::create(const char *stringValueIn) { return ParameterValue::nn_make_shared( std::string(stringValueIn), ParameterValue::Type::STRING); } // --------------------------------------------------------------------------- /** \brief Instantiate a ParameterValue from a string value. * * @return a new ParameterValue. */ ParameterValueNNPtr ParameterValue::create(const std::string &stringValueIn) { return ParameterValue::nn_make_shared( stringValueIn, ParameterValue::Type::STRING); } // --------------------------------------------------------------------------- /** \brief Instantiate a ParameterValue from a filename. * * @return a new ParameterValue. */ ParameterValueNNPtr ParameterValue::createFilename(const std::string &stringValueIn) { return ParameterValue::nn_make_shared( stringValueIn, ParameterValue::Type::FILENAME); } // --------------------------------------------------------------------------- /** \brief Instantiate a ParameterValue from a integer value. * * @return a new ParameterValue. */ ParameterValueNNPtr ParameterValue::create(int integerValueIn) { return ParameterValue::nn_make_shared(integerValueIn); } // --------------------------------------------------------------------------- /** \brief Instantiate a ParameterValue from a boolean value. * * @return a new ParameterValue. */ ParameterValueNNPtr ParameterValue::create(bool booleanValueIn) { return ParameterValue::nn_make_shared(booleanValueIn); } // --------------------------------------------------------------------------- /** \brief Returns the type of a parameter value. * * @return the type. */ const ParameterValue::Type &ParameterValue::type() PROJ_PURE_DEFN { return d->type_; } // --------------------------------------------------------------------------- /** \brief Returns the value as a Measure (assumes type() == Type::MEASURE) * @return the value as a Measure. */ const common::Measure &ParameterValue::value() PROJ_PURE_DEFN { return *d->measure_; } // --------------------------------------------------------------------------- /** \brief Returns the value as a string (assumes type() == Type::STRING) * @return the value as a string. */ const std::string &ParameterValue::stringValue() PROJ_PURE_DEFN { return *d->stringValue_; } // --------------------------------------------------------------------------- /** \brief Returns the value as a filename (assumes type() == Type::FILENAME) * @return the value as a filename. */ const std::string &ParameterValue::valueFile() PROJ_PURE_DEFN { return *d->stringValue_; } // --------------------------------------------------------------------------- /** \brief Returns the value as a integer (assumes type() == Type::INTEGER) * @return the value as a integer. */ int ParameterValue::integerValue() PROJ_PURE_DEFN { return d->integerValue_; } // --------------------------------------------------------------------------- /** \brief Returns the value as a boolean (assumes type() == Type::BOOLEAN) * @return the value as a boolean. */ bool ParameterValue::booleanValue() PROJ_PURE_DEFN { return d->booleanValue_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void ParameterValue::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; const auto &l_type = type(); if (l_type == Type::MEASURE) { const auto &l_value = value(); if (formatter->abridgedTransformation()) { const auto &unit = l_value.unit(); const auto &unitType = unit.type(); if (unitType == common::UnitOfMeasure::Type::LINEAR) { formatter->add(l_value.getSIValue()); } else if (unitType == common::UnitOfMeasure::Type::ANGULAR) { formatter->add( l_value.convertToUnit(common::UnitOfMeasure::ARC_SECOND)); } else if (unit == common::UnitOfMeasure::PARTS_PER_MILLION) { formatter->add(1.0 + l_value.value() * 1e-6); } else { formatter->add(l_value.value()); } } else { const auto &unit = l_value.unit(); if (isWKT2) { formatter->add(l_value.value()); } else { // In WKT1, as we don't output the natural unit, output to the // registered linear / angular unit. const auto &unitType = unit.type(); if (unitType == common::UnitOfMeasure::Type::LINEAR) { const auto &targetUnit = *(formatter->axisLinearUnit()); if (targetUnit.conversionToSI() == 0.0) { throw io::FormattingException( "cannot convert value to target linear unit"); } formatter->add(l_value.convertToUnit(targetUnit)); } else if (unitType == common::UnitOfMeasure::Type::ANGULAR) { const auto &targetUnit = *(formatter->axisAngularUnit()); if (targetUnit.conversionToSI() == 0.0) { throw io::FormattingException( "cannot convert value to target angular unit"); } formatter->add(l_value.convertToUnit(targetUnit)); } else { formatter->add(l_value.getSIValue()); } } if (isWKT2 && unit != common::UnitOfMeasure::NONE) { if (!formatter ->primeMeridianOrParameterUnitOmittedIfSameAsAxis() || (unit != common::UnitOfMeasure::SCALE_UNITY && unit != *(formatter->axisLinearUnit()) && unit != *(formatter->axisAngularUnit()))) { unit._exportToWKT(formatter); } } } } else if (l_type == Type::STRING || l_type == Type::FILENAME) { formatter->addQuotedString(stringValue()); } else if (l_type == Type::INTEGER) { formatter->add(integerValue()); } else { throw io::FormattingException("boolean parameter value not handled"); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool ParameterValue::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &) const { auto otherPV = dynamic_cast(other); if (otherPV == nullptr) { return false; } if (type() != otherPV->type()) { return false; } switch (type()) { case Type::MEASURE: { return value()._isEquivalentTo(otherPV->value(), criterion, 2e-10); } case Type::STRING: case Type::FILENAME: { return stringValue() == otherPV->stringValue(); } case Type::INTEGER: { return integerValue() == otherPV->integerValue(); } case Type::BOOLEAN: { return booleanValue() == otherPV->booleanValue(); } default: { assert(false); break; } } return true; } //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/parammappings.cpp000664 001754 001755 00000226314 14764566077 021752 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "parammappings.hpp" #include "oputils.hpp" #include "proj_constants.h" #include "proj/internal/internal.hpp" NS_PROJ_START using namespace internal; namespace operation { //! @cond Doxygen_Suppress const char *WKT1_LATITUDE_OF_ORIGIN = "latitude_of_origin"; const char *WKT1_CENTRAL_MERIDIAN = "central_meridian"; const char *WKT1_SCALE_FACTOR = "scale_factor"; const char *WKT1_FALSE_EASTING = "false_easting"; const char *WKT1_FALSE_NORTHING = "false_northing"; const char *WKT1_STANDARD_PARALLEL_1 = "standard_parallel_1"; const char *WKT1_STANDARD_PARALLEL_2 = "standard_parallel_2"; const char *WKT1_LATITUDE_OF_CENTER = "latitude_of_center"; const char *WKT1_LONGITUDE_OF_CENTER = "longitude_of_center"; const char *WKT1_AZIMUTH = "azimuth"; const char *WKT1_RECTIFIED_GRID_ANGLE = "rectified_grid_angle"; static const char *lat_0 = "lat_0"; static const char *lat_1 = "lat_1"; static const char *lat_2 = "lat_2"; static const char *lat_ts = "lat_ts"; static const char *lon_0 = "lon_0"; static const char *lon_1 = "lon_1"; static const char *lon_2 = "lon_2"; static const char *lonc = "lonc"; static const char *alpha = "alpha"; static const char *gamma = "gamma"; static const char *k_0 = "k_0"; static const char *k = "k"; static const char *x_0 = "x_0"; static const char *y_0 = "y_0"; static const char *h = "h"; // --------------------------------------------------------------------------- const ParamMapping paramLatitudeNatOrigin = { EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, WKT1_LATITUDE_OF_ORIGIN, common::UnitOfMeasure::Type::ANGULAR, lat_0}; static const ParamMapping paramLongitudeNatOrigin = { EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, WKT1_CENTRAL_MERIDIAN, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping paramScaleFactor = { EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, WKT1_SCALE_FACTOR, common::UnitOfMeasure::Type::SCALE, k_0}; static const ParamMapping paramScaleFactorK = { EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, WKT1_SCALE_FACTOR, common::UnitOfMeasure::Type::SCALE, k}; static const ParamMapping paramFalseEasting = { EPSG_NAME_PARAMETER_FALSE_EASTING, EPSG_CODE_PARAMETER_FALSE_EASTING, WKT1_FALSE_EASTING, common::UnitOfMeasure::Type::LINEAR, x_0}; static const ParamMapping paramFalseNorthing = { EPSG_NAME_PARAMETER_FALSE_NORTHING, EPSG_CODE_PARAMETER_FALSE_NORTHING, WKT1_FALSE_NORTHING, common::UnitOfMeasure::Type::LINEAR, y_0}; static const ParamMapping paramLatitudeFalseOrigin = { EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, WKT1_LATITUDE_OF_ORIGIN, common::UnitOfMeasure::Type::ANGULAR, lat_0}; static const ParamMapping paramLongitudeFalseOrigin = { EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, WKT1_CENTRAL_MERIDIAN, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping paramEastingFalseOrigin = { EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, WKT1_FALSE_EASTING, common::UnitOfMeasure::Type::LINEAR, x_0}; static const ParamMapping paramNorthingFalseOrigin = { EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN, EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, WKT1_FALSE_NORTHING, common::UnitOfMeasure::Type::LINEAR, y_0}; static const ParamMapping paramLatitude1stStdParallel = { EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, WKT1_STANDARD_PARALLEL_1, common::UnitOfMeasure::Type::ANGULAR, lat_1}; static const ParamMapping paramLatitude2ndStdParallel = { EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, WKT1_STANDARD_PARALLEL_2, common::UnitOfMeasure::Type::ANGULAR, lat_2}; static const ParamMapping *const paramsNatOriginScale[] = { ¶mLatitudeNatOrigin, ¶mLongitudeNatOrigin, ¶mScaleFactor, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsNatOriginScaleK[] = { ¶mLatitudeNatOrigin, ¶mLongitudeNatOrigin, ¶mScaleFactorK, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatFirstPoint = { "Latitude of 1st point", 0, "Latitude_Of_1st_Point", common::UnitOfMeasure::Type::ANGULAR, lat_1}; static const ParamMapping paramLongFirstPoint = { "Longitude of 1st point", 0, "Longitude_Of_1st_Point", common::UnitOfMeasure::Type::ANGULAR, lon_1}; static const ParamMapping paramLatSecondPoint = { "Latitude of 2nd point", 0, "Latitude_Of_2nd_Point", common::UnitOfMeasure::Type::ANGULAR, lat_2}; static const ParamMapping paramLongSecondPoint = { "Longitude of 2nd point", 0, "Longitude_Of_2nd_Point", common::UnitOfMeasure::Type::ANGULAR, lon_2}; static const ParamMapping *const paramsTPEQD[] = {¶mLatFirstPoint, ¶mLongFirstPoint, ¶mLatSecondPoint, ¶mLongSecondPoint, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsTMG[] = { ¶mLatitudeFalseOrigin, ¶mLongitudeFalseOrigin, ¶mEastingFalseOrigin, ¶mNorthingFalseOrigin, nullptr}; static const ParamMapping paramLatFalseOriginLatOfCenter = { EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, WKT1_LATITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lat_0}; static const ParamMapping paramLongFalseOriginLongOfCenter = { EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, WKT1_LONGITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping *const paramsAEA_EQDC[] = { ¶mLatFalseOriginLatOfCenter, ¶mLongFalseOriginLongOfCenter, ¶mLatitude1stStdParallel, ¶mLatitude2ndStdParallel, ¶mEastingFalseOrigin, ¶mNorthingFalseOrigin, nullptr}; static const ParamMapping paramLatitudeNatOriginLCC1SP = { EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, WKT1_LATITUDE_OF_ORIGIN, common::UnitOfMeasure::Type::ANGULAR, lat_1}; static const ParamMapping *const paramsLCC1SP[] = { ¶mLatitudeNatOriginLCC1SP, ¶mLongitudeNatOrigin, ¶mScaleFactor, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsLCC1SPVariantB[] = { ¶mLatitudeNatOriginLCC1SP, ¶mScaleFactor, ¶mLatitudeFalseOrigin, ¶mLongitudeFalseOrigin, ¶mEastingFalseOrigin, ¶mNorthingFalseOrigin, nullptr, }; static const ParamMapping *const paramsLCC2SP[] = { ¶mLatitudeFalseOrigin, ¶mLongitudeFalseOrigin, ¶mLatitude1stStdParallel, ¶mLatitude2ndStdParallel, ¶mEastingFalseOrigin, ¶mNorthingFalseOrigin, nullptr, }; static const ParamMapping paramEllipsoidScaleFactor = { EPSG_NAME_PARAMETER_ELLIPSOID_SCALE_FACTOR, EPSG_CODE_PARAMETER_ELLIPSOID_SCALE_FACTOR, nullptr, common::UnitOfMeasure::Type::SCALE, k_0}; static const ParamMapping *const paramsLCC2SPMichigan[] = { ¶mLatitudeFalseOrigin, ¶mLongitudeFalseOrigin, ¶mLatitude1stStdParallel, ¶mLatitude2ndStdParallel, ¶mEastingFalseOrigin, ¶mNorthingFalseOrigin, ¶mEllipsoidScaleFactor, nullptr, }; static const ParamMapping paramLatNatLatCenter = { EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, WKT1_LATITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lat_0}; static const ParamMapping paramLongNatLongCenter = { EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, WKT1_LONGITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping *const paramsAEQD[]{ ¶mLatNatLatCenter, ¶mLongNatLongCenter, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsNatOrigin[] = { ¶mLatitudeNatOrigin, ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatNatOriginLat1 = { EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, WKT1_STANDARD_PARALLEL_1, common::UnitOfMeasure::Type::ANGULAR, lat_1}; static const ParamMapping *const paramsBonne[] = { ¶mLatNatOriginLat1, ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLat1stParallelLatTs = { EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, WKT1_STANDARD_PARALLEL_1, common::UnitOfMeasure::Type::ANGULAR, lat_ts}; static const ParamMapping *const paramsCEA[] = { ¶mLat1stParallelLatTs, ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsEQDC[] = {¶mLatNatLatCenter, ¶mLongNatLongCenter, ¶mLatitude1stStdParallel, ¶mLatitude2ndStdParallel, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsLongNatOrigin[] = { ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsEqc[] = { ¶mLat1stParallelLatTs, ¶mLatitudeNatOrigin, // extension of EPSG, but used by GDAL / PROJ ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramSatelliteHeight = { "Satellite Height", 0, "satellite_height", common::UnitOfMeasure::Type::LINEAR, h}; static const ParamMapping *const paramsGeos[] = { ¶mLongitudeNatOrigin, ¶mSatelliteHeight, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatCentreLatCenter = { EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, WKT1_LATITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lat_0}; static const ParamMapping paramLonCentreLonCenterLonc = { EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, WKT1_LONGITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lonc}; static const ParamMapping paramAzimuth = { EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, WKT1_AZIMUTH, common::UnitOfMeasure::Type::ANGULAR, alpha}; static const ParamMapping paramAngleToSkewGrid = { EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, WKT1_RECTIFIED_GRID_ANGLE, common::UnitOfMeasure::Type::ANGULAR, gamma}; static const ParamMapping paramScaleFactorProjectionCentre = { EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE, WKT1_SCALE_FACTOR, common::UnitOfMeasure::Type::SCALE, k}; static const ParamMapping *const paramsHomVariantA[] = { ¶mLatCentreLatCenter, ¶mLonCentreLonCenterLonc, ¶mAzimuth, ¶mAngleToSkewGrid, ¶mScaleFactorProjectionCentre, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramFalseEastingProjectionCentre = { EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, WKT1_FALSE_EASTING, common::UnitOfMeasure::Type::LINEAR, x_0}; static const ParamMapping paramFalseNorthingProjectionCentre = { EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, WKT1_FALSE_NORTHING, common::UnitOfMeasure::Type::LINEAR, y_0}; static const ParamMapping *const paramsHomVariantB[] = { ¶mLatCentreLatCenter, ¶mLonCentreLonCenterLonc, ¶mAzimuth, ¶mAngleToSkewGrid, ¶mScaleFactorProjectionCentre, ¶mFalseEastingProjectionCentre, ¶mFalseNorthingProjectionCentre, nullptr}; static const ParamMapping paramLatPoint1 = { "Latitude of 1st point", 0, "latitude_of_point_1", common::UnitOfMeasure::Type::ANGULAR, lat_1}; static const ParamMapping paramLongPoint1 = { "Longitude of 1st point", 0, "longitude_of_point_1", common::UnitOfMeasure::Type::ANGULAR, lon_1}; static const ParamMapping paramLatPoint2 = { "Latitude of 2nd point", 0, "latitude_of_point_2", common::UnitOfMeasure::Type::ANGULAR, lat_2}; static const ParamMapping paramLongPoint2 = { "Longitude of 2nd point", 0, "longitude_of_point_2", common::UnitOfMeasure::Type::ANGULAR, lon_2}; static const ParamMapping *const paramsHomTwoPoint[] = { ¶mLatCentreLatCenter, ¶mLatPoint1, ¶mLongPoint1, ¶mLatPoint2, ¶mLongPoint2, ¶mScaleFactorProjectionCentre, ¶mFalseEastingProjectionCentre, ¶mFalseNorthingProjectionCentre, nullptr}; static const ParamMapping *const paramsIMWP[] = { ¶mLongitudeNatOrigin, ¶mLatFirstPoint, ¶mLatSecondPoint, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLongCentre = { EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, WKT1_LONGITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping *const paramsLocalOrthographic[] = { ¶mLatCentreLatCenter, ¶mLongCentre, ¶mAzimuth, ¶mScaleFactorProjectionCentre, ¶mFalseEastingProjectionCentre, ¶mFalseNorthingProjectionCentre, nullptr}; static const ParamMapping paramColatitudeConeAxis = { EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS, EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS, WKT1_AZIMUTH, common::UnitOfMeasure::Type::ANGULAR, "alpha"}; /* ignored by PROJ currently */ static const ParamMapping paramLatitudePseudoStdParallel = { EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL, "pseudo_standard_parallel_1", common::UnitOfMeasure::Type::ANGULAR, nullptr}; /* ignored by PROJ currently */ static const ParamMapping paramScaleFactorPseudoStdParallel = { EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL, EPSG_CODE_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL, WKT1_SCALE_FACTOR, common::UnitOfMeasure::Type::SCALE, k}; /* ignored by PROJ currently */ static const ParamMapping paramLongCentreLongCenter = { EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN, WKT1_LONGITUDE_OF_CENTER, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping *const krovakParameters[] = { ¶mLatCentreLatCenter, ¶mLongCentreLongCenter, ¶mColatitudeConeAxis, ¶mLatitudePseudoStdParallel, ¶mScaleFactorPseudoStdParallel, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsLaea[] = { ¶mLatNatLatCenter, ¶mLongNatLongCenter, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsMiller[] = { ¶mLongNatLongCenter, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatMerc1SP = { EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, nullptr, // always set to zero, not to be exported in WKT1 common::UnitOfMeasure::Type::ANGULAR, nullptr}; // always set to zero, not to be exported in PROJ strings static const ParamMapping *const paramsMerc1SP[] = { ¶mLatMerc1SP, ¶mLongitudeNatOrigin, ¶mScaleFactorK, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsMerc2SP[] = { ¶mLat1stParallelLatTs, ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsObliqueStereo[] = { ¶mLatitudeNatOrigin, ¶mLongitudeNatOrigin, ¶mScaleFactorK, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatStdParallel = { EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL, EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL, WKT1_LATITUDE_OF_ORIGIN, common::UnitOfMeasure::Type::ANGULAR, lat_ts}; static const ParamMapping paramsLongOrigin = { EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN, WKT1_CENTRAL_MERIDIAN, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping *const paramsPolarStereo[] = { ¶mLatStdParallel, ¶msLongOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsLongNatOriginLongitudeCentre[] = { ¶mLongNatLongCenter, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatTrueScaleWag3 = { "Latitude of true scale", 0, WKT1_LATITUDE_OF_ORIGIN, common::UnitOfMeasure::Type::ANGULAR, lat_ts}; static const ParamMapping *const paramsWag3[] = { ¶mLatTrueScaleWag3, ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramPegLat = { "Peg point latitude", 0, "peg_point_latitude", common::UnitOfMeasure::Type::ANGULAR, "plat_0"}; static const ParamMapping paramPegLong = { "Peg point longitude", 0, "peg_point_longitude", common::UnitOfMeasure::Type::ANGULAR, "plon_0"}; static const ParamMapping paramPegHeading = { "Peg point heading", 0, "peg_point_heading", common::UnitOfMeasure::Type::ANGULAR, "phdg_0"}; static const ParamMapping paramPegHeight = { "Peg point height", 0, "peg_point_height", common::UnitOfMeasure::Type::LINEAR, "h_0"}; static const ParamMapping *const paramsSch[] = { ¶mPegLat, ¶mPegLong, ¶mPegHeading, ¶mPegHeight, nullptr}; static const ParamMapping *const paramsWink1[] = { ¶mLongitudeNatOrigin, ¶mLat1stParallelLatTs, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping *const paramsWink2[] = { ¶mLongitudeNatOrigin, ¶mLatitude1stStdParallel, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatLoxim = { EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, WKT1_LATITUDE_OF_ORIGIN, common::UnitOfMeasure::Type::ANGULAR, lat_1}; static const ParamMapping *const paramsLoxim[] = { ¶mLatLoxim, ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLabordeObliqueMercatorAzimuth = { EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE, EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE, WKT1_AZIMUTH, common::UnitOfMeasure::Type::ANGULAR, "azi"}; static const ParamMapping *const paramsLabordeObliqueMercator[] = { ¶mLatCentreLatCenter, ¶mLongCentre, ¶mLabordeObliqueMercatorAzimuth, ¶mScaleFactorProjectionCentre, ¶mFalseEasting, ¶mFalseNorthing, nullptr}; static const ParamMapping paramLatTopoOrigin = { EPSG_NAME_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN, EPSG_CODE_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN, nullptr, common::UnitOfMeasure::Type::ANGULAR, lat_0}; static const ParamMapping paramLongTopoOrigin = { EPSG_NAME_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN, EPSG_CODE_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN, nullptr, common::UnitOfMeasure::Type::ANGULAR, lon_0}; static const ParamMapping paramHeightTopoOrigin = { EPSG_NAME_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN, EPSG_CODE_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; // unsupported by PROJ right now static const ParamMapping paramViewpointHeight = { EPSG_NAME_PARAMETER_VIEWPOINT_HEIGHT, EPSG_CODE_PARAMETER_VIEWPOINT_HEIGHT, nullptr, common::UnitOfMeasure::Type::LINEAR, "h"}; static const ParamMapping *const paramsVerticalPerspective[] = { ¶mLatTopoOrigin, ¶mLongTopoOrigin, ¶mHeightTopoOrigin, // unsupported by PROJ right now ¶mViewpointHeight, ¶mFalseEasting, // PROJ addition ¶mFalseNorthing, // PROJ addition nullptr}; static const ParamMapping paramProjectionPlaneOriginHeight = { EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, EPSG_CODE_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, nullptr, common::UnitOfMeasure::Type::LINEAR, "h_0"}; static const ParamMapping *const paramsColombiaUrban[] = { ¶mLatitudeNatOrigin, ¶mLongitudeNatOrigin, ¶mFalseEasting, ¶mFalseNorthing, ¶mProjectionPlaneOriginHeight, nullptr}; static const ParamMapping paramGeocentricXTopocentricOrigin = { EPSG_NAME_PARAMETER_GEOCENTRIC_X_TOPOCENTRIC_ORIGIN, EPSG_CODE_PARAMETER_GEOCENTRIC_X_TOPOCENTRIC_ORIGIN, nullptr, common::UnitOfMeasure::Type::LINEAR, "X_0"}; static const ParamMapping paramGeocentricYTopocentricOrigin = { EPSG_NAME_PARAMETER_GEOCENTRIC_Y_TOPOCENTRIC_ORIGIN, EPSG_CODE_PARAMETER_GEOCENTRIC_Y_TOPOCENTRIC_ORIGIN, nullptr, common::UnitOfMeasure::Type::LINEAR, "Y_0"}; static const ParamMapping paramGeocentricZTopocentricOrigin = { EPSG_NAME_PARAMETER_GEOCENTRIC_Z_TOPOCENTRIC_ORIGIN, EPSG_CODE_PARAMETER_GEOCENTRIC_Z_TOPOCENTRIC_ORIGIN, nullptr, common::UnitOfMeasure::Type::LINEAR, "Z_0"}; static const ParamMapping *const paramsGeocentricTopocentric[] = { ¶mGeocentricXTopocentricOrigin, ¶mGeocentricYTopocentricOrigin, ¶mGeocentricZTopocentricOrigin, nullptr}; static const ParamMapping paramHeightTopoOriginWithH0 = { EPSG_NAME_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN, EPSG_CODE_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN, nullptr, common::UnitOfMeasure::Type::LINEAR, "h_0"}; static const ParamMapping *const paramsGeographicTopocentric[] = { ¶mLatTopoOrigin, ¶mLongTopoOrigin, ¶mHeightTopoOriginWithH0, nullptr}; static const MethodMapping gProjectionMethodMappings[] = { {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, "Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScaleK}, {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_3D, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_3D, "Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScaleK}, {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED, "Transverse_Mercator_South_Orientated", "tmerc", "axis=wsu", paramsNatOriginScaleK}, {PROJ_WKT2_NAME_METHOD_TWO_POINT_EQUIDISTANT, 0, "Two_Point_Equidistant", "tpeqd", nullptr, paramsTPEQD}, {EPSG_NAME_METHOD_TUNISIA_MINING_GRID, EPSG_CODE_METHOD_TUNISIA_MINING_GRID, "Tunisia_Mining_Grid", nullptr, nullptr, // no proj equivalent paramsTMG}, // Deprecated. Use EPSG_NAME_METHOD_TUNISIA_MINING_GRID instead {EPSG_NAME_METHOD_TUNISIA_MAPPING_GRID, EPSG_CODE_METHOD_TUNISIA_MAPPING_GRID, "Tunisia_Mapping_Grid", nullptr, nullptr, // no proj equivalent paramsTMG}, {EPSG_NAME_METHOD_ALBERS_EQUAL_AREA, EPSG_CODE_METHOD_ALBERS_EQUAL_AREA, "Albers_Conic_Equal_Area", "aea", nullptr, paramsAEA_EQDC}, // Variant used by Oracle WKT: // https://lists.osgeo.org/pipermail/qgis-user/2024-June/054599.html {EPSG_NAME_METHOD_ALBERS_EQUAL_AREA, EPSG_CODE_METHOD_ALBERS_EQUAL_AREA, "Albers_Conical_Equal_Area", "aea", nullptr, paramsAEA_EQDC}, {EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP, "Lambert_Conformal_Conic_1SP", "lcc", nullptr, paramsLCC1SP}, {EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP_VARIANT_B, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP_VARIANT_B, nullptr, // no mapping to WKT1_GDAL "lcc", nullptr, paramsLCC1SPVariantB}, {EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP, "Lambert_Conformal_Conic_2SP", "lcc", nullptr, paramsLCC2SP}, {EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN, nullptr, // no mapping to WKT1_GDAL "lcc", nullptr, paramsLCC2SPMichigan}, {EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM, EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM, "Lambert_Conformal_Conic_2SP_Belgium", "lcc", nullptr, // FIXME: this is what is done in GDAL, but the formula of // LCC 2SP // Belgium in the EPSG 7.2 guidance is difference from the regular // LCC 2SP paramsLCC2SP}, {EPSG_NAME_METHOD_AZIMUTHAL_EQUIDISTANT, EPSG_CODE_METHOD_AZIMUTHAL_EQUIDISTANT, "Azimuthal_Equidistant", "aeqd", nullptr, paramsAEQD}, // We don't actually implement the Modified variant of Azimuthal Equidistant // but the exact one. The difference between both is neglectable in a few // hundred of kilometers away from the center of projection {EPSG_NAME_METHOD_MODIFIED_AZIMUTHAL_EQUIDISTANT, EPSG_CODE_METHOD_MODIFIED_AZIMUTHAL_EQUIDISTANT, "Azimuthal_Equidistant", "aeqd", nullptr, paramsAEQD}, {EPSG_NAME_METHOD_GUAM_PROJECTION, EPSG_CODE_METHOD_GUAM_PROJECTION, nullptr, // no mapping to GDAL WKT1 "aeqd", "guam", paramsNatOrigin}, {EPSG_NAME_METHOD_BONNE, EPSG_CODE_METHOD_BONNE, "Bonne", "bonne", nullptr, paramsBonne}, {PROJ_WKT2_NAME_METHOD_COMPACT_MILLER, 0, "Compact_Miller", "comill", nullptr, paramsLongNatOrigin}, {EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA, EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA, "Cylindrical_Equal_Area", "cea", nullptr, paramsCEA}, {EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL, EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL, "Cylindrical_Equal_Area", "cea", "R_A", paramsCEA}, {EPSG_NAME_METHOD_CASSINI_SOLDNER, EPSG_CODE_METHOD_CASSINI_SOLDNER, "Cassini_Soldner", "cass", nullptr, paramsNatOrigin}, {EPSG_NAME_METHOD_HYPERBOLIC_CASSINI_SOLDNER, EPSG_CODE_METHOD_HYPERBOLIC_CASSINI_SOLDNER, nullptr, "cass", "hyperbolic", paramsNatOrigin}, // Definition to be put before PROJ_WKT2_NAME_METHOD_EQUIDISTANT_CONIC {EPSG_NAME_METHOD_EQUIDISTANT_CONIC, EPSG_CODE_METHOD_EQUIDISTANT_CONIC, "Equidistant_Conic", "eqdc", nullptr, paramsAEA_EQDC}, // Definition before EPSG codified it. To be put after entry for // EPSG_NAME_METHOD_EQUIDISTANT_CONIC {PROJ_WKT2_NAME_METHOD_EQUIDISTANT_CONIC, 0, "Equidistant_Conic", "eqdc", nullptr, paramsEQDC}, {PROJ_WKT2_NAME_METHOD_ECKERT_I, 0, "Eckert_I", "eck1", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_ECKERT_II, 0, "Eckert_II", "eck2", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_ECKERT_III, 0, "Eckert_III", "eck3", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_ECKERT_IV, 0, "Eckert_IV", "eck4", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_ECKERT_V, 0, "Eckert_V", "eck5", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_ECKERT_VI, 0, "Eckert_VI", "eck6", nullptr, paramsLongNatOrigin}, {EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL, "Equirectangular", "eqc", nullptr, paramsEqc}, {EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL, EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL, "Equirectangular", "eqc", nullptr, paramsEqc}, {PROJ_WKT2_NAME_METHOD_FLAT_POLAR_QUARTIC, 0, "Flat_Polar_Quartic", "mbtfpq", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_GALL_STEREOGRAPHIC, 0, "Gall_Stereographic", "gall", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_GOODE_HOMOLOSINE, 0, "Goode_Homolosine", "goode", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE, 0, "Interrupted_Goode_Homolosine", "igh", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE_OCEAN, 0, nullptr, "igh_o", nullptr, paramsLongNatOrigin}, // No proper WKT1 representation fr sweep=x {PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X, 0, nullptr, "geos", "sweep=x", paramsGeos}, {PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_Y, 0, "Geostationary_Satellite", "geos", nullptr, paramsGeos}, {PROJ_WKT2_NAME_METHOD_GAUSS_SCHREIBER_TRANSVERSE_MERCATOR, 0, "Gauss_Schreiber_Transverse_Mercator", "gstmerc", nullptr, paramsNatOriginScale}, {PROJ_WKT2_NAME_METHOD_GNOMONIC, 0, "Gnomonic", "gnom", nullptr, paramsNatOrigin}, {EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A, "Hotine_Oblique_Mercator", "omerc", "no_uoff", paramsHomVariantA}, {EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B, EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B, "Hotine_Oblique_Mercator_Azimuth_Center", "omerc", nullptr, paramsHomVariantB}, {PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN, 0, "Hotine_Oblique_Mercator_Two_Point_Natural_Origin", "omerc", nullptr, paramsHomTwoPoint}, {PROJ_WKT2_NAME_INTERNATIONAL_MAP_WORLD_POLYCONIC, 0, "International_Map_of_the_World_Polyconic", "imw_p", nullptr, paramsIMWP}, {EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED, EPSG_CODE_METHOD_KROVAK_NORTH_ORIENTED, "Krovak", "krovak", nullptr, krovakParameters}, {EPSG_NAME_METHOD_KROVAK, EPSG_CODE_METHOD_KROVAK, "Krovak", "krovak", "axis=swu", krovakParameters}, {EPSG_NAME_METHOD_KROVAK_MODIFIED_NORTH_ORIENTED, EPSG_CODE_METHOD_KROVAK_MODIFIED_NORTH_ORIENTED, nullptr, "mod_krovak", nullptr, krovakParameters}, {EPSG_NAME_METHOD_KROVAK_MODIFIED, EPSG_CODE_METHOD_KROVAK_MODIFIED, nullptr, "mod_krovak", "axis=swu", krovakParameters}, {EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA, EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA, "Lambert_Azimuthal_Equal_Area", "laea", nullptr, paramsLaea}, {EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL, EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL, "Lambert_Azimuthal_Equal_Area", "laea", "R_A", paramsLaea}, {PROJ_WKT2_NAME_METHOD_MILLER_CYLINDRICAL, 0, "Miller_Cylindrical", "mill", "R_A", paramsMiller}, {EPSG_NAME_METHOD_MERCATOR_VARIANT_A, EPSG_CODE_METHOD_MERCATOR_VARIANT_A, "Mercator_1SP", "merc", nullptr, paramsMerc1SP}, {EPSG_NAME_METHOD_MERCATOR_VARIANT_B, EPSG_CODE_METHOD_MERCATOR_VARIANT_B, "Mercator_2SP", "merc", nullptr, paramsMerc2SP}, {EPSG_NAME_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR, EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR, "Popular_Visualisation_Pseudo_Mercator", // particular case actually // handled manually "webmerc", nullptr, paramsNatOrigin}, {EPSG_NAME_METHOD_MERCATOR_SPHERICAL, EPSG_CODE_METHOD_MERCATOR_SPHERICAL, nullptr, "merc", "R_C", paramsNatOrigin}, {PROJ_WKT2_NAME_METHOD_MOLLWEIDE, 0, "Mollweide", "moll", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_NATURAL_EARTH, 0, "Natural_Earth", "natearth", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_NATURAL_EARTH_II, 0, "Natural_Earth_II", "natearth2", nullptr, paramsLongNatOrigin}, {EPSG_NAME_METHOD_NZMG, EPSG_CODE_METHOD_NZMG, "New_Zealand_Map_Grid", "nzmg", nullptr, paramsNatOrigin}, { EPSG_NAME_METHOD_OBLIQUE_STEREOGRAPHIC, EPSG_CODE_METHOD_OBLIQUE_STEREOGRAPHIC, "Oblique_Stereographic", "sterea", nullptr, paramsObliqueStereo, }, {EPSG_NAME_METHOD_ORTHOGRAPHIC, EPSG_CODE_METHOD_ORTHOGRAPHIC, "Orthographic", "ortho", nullptr, paramsNatOrigin}, {EPSG_NAME_METHOD_LOCAL_ORTHOGRAPHIC, EPSG_CODE_METHOD_LOCAL_ORTHOGRAPHIC, "Local Orthographic", "ortho", nullptr, paramsLocalOrthographic}, {PROJ_WKT2_NAME_ORTHOGRAPHIC_SPHERICAL, 0, "Orthographic", "ortho", "f=0", paramsNatOrigin}, {PROJ_WKT2_NAME_METHOD_PATTERSON, 0, "Patterson", "patterson", nullptr, paramsLongNatOrigin}, {EPSG_NAME_METHOD_AMERICAN_POLYCONIC, EPSG_CODE_METHOD_AMERICAN_POLYCONIC, "Polyconic", "poly", nullptr, paramsNatOrigin}, {EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A, EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A, "Polar_Stereographic", "stere", nullptr, paramsObliqueStereo}, {EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B, EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B, "Polar_Stereographic", "stere", nullptr, paramsPolarStereo}, {PROJ_WKT2_NAME_METHOD_ROBINSON, 0, "Robinson", "robin", nullptr, paramsLongNatOriginLongitudeCentre}, {PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE, 0, nullptr, "peirce_q", "shape=square", paramsNatOriginScale}, {PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND, 0, nullptr, "peirce_q", "shape=diamond", paramsNatOriginScale}, {PROJ_WKT2_NAME_METHOD_SINUSOIDAL, 0, "Sinusoidal", "sinu", nullptr, paramsLongNatOriginLongitudeCentre}, {PROJ_WKT2_NAME_METHOD_STEREOGRAPHIC, 0, "Stereographic", "stere", nullptr, paramsObliqueStereo}, {PROJ_WKT2_NAME_METHOD_TIMES, 0, "Times", "times", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_VAN_DER_GRINTEN, 0, "VanDerGrinten", "vandg", "R_A", paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_WAGNER_I, 0, "Wagner_I", "wag1", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_WAGNER_II, 0, "Wagner_II", "wag2", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_WAGNER_III, 0, "Wagner_III", "wag3", nullptr, paramsWag3}, {PROJ_WKT2_NAME_METHOD_WAGNER_IV, 0, "Wagner_IV", "wag4", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_WAGNER_V, 0, "Wagner_V", "wag5", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_WAGNER_VI, 0, "Wagner_VI", "wag6", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_WAGNER_VII, 0, "Wagner_VII", "wag7", nullptr, paramsLongNatOrigin}, {PROJ_WKT2_NAME_METHOD_QUADRILATERALIZED_SPHERICAL_CUBE, 0, "Quadrilateralized_Spherical_Cube", "qsc", nullptr, paramsNatOrigin}, {PROJ_WKT2_NAME_METHOD_SPHERICAL_CROSS_TRACK_HEIGHT, 0, "Spherical_Cross_Track_Height", "sch", nullptr, paramsSch}, // The following methods have just the WKT <--> PROJ string mapping, but // no setter. Similarly to GDAL {"Aitoff", 0, "Aitoff", "aitoff", nullptr, paramsLongNatOrigin}, {"Winkel I", 0, "Winkel_I", "wink1", nullptr, paramsWink1}, {"Winkel II", 0, "Winkel_II", "wink2", nullptr, paramsWink2}, {"Winkel Tripel", 0, "Winkel_Tripel", "wintri", nullptr, paramsWink2}, {"Craster Parabolic", 0, "Craster_Parabolic", "crast", nullptr, paramsLongNatOrigin}, {"Loximuthal", 0, "Loximuthal", "loxim", nullptr, paramsLoxim}, {"Quartic Authalic", 0, "Quartic_Authalic", "qua_aut", nullptr, paramsLongNatOrigin}, {"Transverse Cylindrical Equal Area", 0, "Transverse_Cylindrical_Equal_Area", "tcea", nullptr, paramsObliqueStereo}, {EPSG_NAME_METHOD_EQUAL_EARTH, EPSG_CODE_METHOD_EQUAL_EARTH, nullptr, "eqearth", nullptr, paramsLongNatOrigin}, {EPSG_NAME_METHOD_LABORDE_OBLIQUE_MERCATOR, EPSG_CODE_METHOD_LABORDE_OBLIQUE_MERCATOR, "Laborde_Oblique_Mercator", "labrd", nullptr, paramsLabordeObliqueMercator}, {EPSG_NAME_METHOD_VERTICAL_PERSPECTIVE, EPSG_CODE_METHOD_VERTICAL_PERSPECTIVE, nullptr, "nsper", nullptr, paramsVerticalPerspective}, {EPSG_NAME_METHOD_COLOMBIA_URBAN, EPSG_CODE_METHOD_COLOMBIA_URBAN, nullptr, "col_urban", nullptr, paramsColombiaUrban}, {EPSG_NAME_METHOD_GEOCENTRIC_TOPOCENTRIC, EPSG_CODE_METHOD_GEOCENTRIC_TOPOCENTRIC, nullptr, "topocentric", nullptr, paramsGeocentricTopocentric}, {EPSG_NAME_METHOD_GEOGRAPHIC_TOPOCENTRIC, EPSG_CODE_METHOD_GEOGRAPHIC_TOPOCENTRIC, nullptr, nullptr, nullptr, paramsGeographicTopocentric}, }; const MethodMapping *getProjectionMethodMappings(size_t &nElts) { nElts = sizeof(gProjectionMethodMappings) / sizeof(gProjectionMethodMappings[0]); return gProjectionMethodMappings; } #define METHOD_NAME_CODE(method) \ { EPSG_NAME_METHOD_##method, EPSG_CODE_METHOD_##method } const struct MethodNameCode methodNameCodesList[] = { // Projection methods METHOD_NAME_CODE(TRANSVERSE_MERCATOR), METHOD_NAME_CODE(TRANSVERSE_MERCATOR_SOUTH_ORIENTATED), METHOD_NAME_CODE(LAMBERT_CONIC_CONFORMAL_1SP), METHOD_NAME_CODE(NZMG), METHOD_NAME_CODE(TUNISIA_MINING_GRID), METHOD_NAME_CODE(ALBERS_EQUAL_AREA), METHOD_NAME_CODE(LAMBERT_CONIC_CONFORMAL_2SP), METHOD_NAME_CODE(LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM), METHOD_NAME_CODE(LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN), METHOD_NAME_CODE(MODIFIED_AZIMUTHAL_EQUIDISTANT), METHOD_NAME_CODE(GUAM_PROJECTION), METHOD_NAME_CODE(BONNE), METHOD_NAME_CODE(LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL), METHOD_NAME_CODE(LAMBERT_CYLINDRICAL_EQUAL_AREA), METHOD_NAME_CODE(CASSINI_SOLDNER), METHOD_NAME_CODE(EQUIDISTANT_CYLINDRICAL), METHOD_NAME_CODE(EQUIDISTANT_CYLINDRICAL_SPHERICAL), METHOD_NAME_CODE(HOTINE_OBLIQUE_MERCATOR_VARIANT_A), METHOD_NAME_CODE(HOTINE_OBLIQUE_MERCATOR_VARIANT_B), METHOD_NAME_CODE(KROVAK_NORTH_ORIENTED), METHOD_NAME_CODE(KROVAK), METHOD_NAME_CODE(LAMBERT_AZIMUTHAL_EQUAL_AREA), METHOD_NAME_CODE(POPULAR_VISUALISATION_PSEUDO_MERCATOR), METHOD_NAME_CODE(MERCATOR_SPHERICAL), METHOD_NAME_CODE(MERCATOR_VARIANT_A), METHOD_NAME_CODE(MERCATOR_VARIANT_B), METHOD_NAME_CODE(OBLIQUE_STEREOGRAPHIC), METHOD_NAME_CODE(AMERICAN_POLYCONIC), METHOD_NAME_CODE(POLAR_STEREOGRAPHIC_VARIANT_A), METHOD_NAME_CODE(POLAR_STEREOGRAPHIC_VARIANT_B), METHOD_NAME_CODE(EQUAL_EARTH), METHOD_NAME_CODE(LABORDE_OBLIQUE_MERCATOR), METHOD_NAME_CODE(VERTICAL_PERSPECTIVE), METHOD_NAME_CODE(COLOMBIA_URBAN), // Other conversions METHOD_NAME_CODE(CHANGE_VERTICAL_UNIT), METHOD_NAME_CODE(CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR), METHOD_NAME_CODE(HEIGHT_DEPTH_REVERSAL), METHOD_NAME_CODE(AXIS_ORDER_REVERSAL_2D), METHOD_NAME_CODE(AXIS_ORDER_REVERSAL_3D), METHOD_NAME_CODE(GEOGRAPHIC_GEOCENTRIC), METHOD_NAME_CODE(GEOCENTRIC_TOPOCENTRIC), METHOD_NAME_CODE(GEOGRAPHIC_TOPOCENTRIC), // Transformations METHOD_NAME_CODE(LONGITUDE_ROTATION), METHOD_NAME_CODE(AFFINE_PARAMETRIC_TRANSFORMATION), METHOD_NAME_CODE(SIMILARITY_TRANSFORMATION), METHOD_NAME_CODE(COORDINATE_FRAME_GEOCENTRIC), METHOD_NAME_CODE(COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC), METHOD_NAME_CODE(COORDINATE_FRAME_GEOGRAPHIC_2D), METHOD_NAME_CODE(COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D), METHOD_NAME_CODE(COORDINATE_FRAME_GEOGRAPHIC_3D), METHOD_NAME_CODE(COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D), METHOD_NAME_CODE(POSITION_VECTOR_GEOCENTRIC), METHOD_NAME_CODE(POSITION_VECTOR_GEOGRAPHIC_2D), METHOD_NAME_CODE(POSITION_VECTOR_GEOGRAPHIC_3D), METHOD_NAME_CODE(GEOCENTRIC_TRANSLATION_GEOCENTRIC), METHOD_NAME_CODE(GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D), METHOD_NAME_CODE(GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D), METHOD_NAME_CODE(TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC), METHOD_NAME_CODE(TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D), METHOD_NAME_CODE(TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D), METHOD_NAME_CODE(TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC), METHOD_NAME_CODE(TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D), METHOD_NAME_CODE(TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D), METHOD_NAME_CODE(MOLODENSKY_BADEKAS_CF_GEOCENTRIC), METHOD_NAME_CODE(MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_2D), METHOD_NAME_CODE(MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_3D), METHOD_NAME_CODE(MOLODENSKY_BADEKAS_PV_GEOCENTRIC), METHOD_NAME_CODE(MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D), METHOD_NAME_CODE(MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_3D), METHOD_NAME_CODE(MOLODENSKY), METHOD_NAME_CODE(ABRIDGED_MOLODENSKY), METHOD_NAME_CODE(GEOGRAPHIC2D_OFFSETS), METHOD_NAME_CODE(GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS), METHOD_NAME_CODE(GEOGRAPHIC3D_OFFSETS), METHOD_NAME_CODE(CARTESIAN_GRID_OFFSETS), METHOD_NAME_CODE(VERTICAL_OFFSET), METHOD_NAME_CODE(VERTICAL_OFFSET_AND_SLOPE), METHOD_NAME_CODE(NTV2), METHOD_NAME_CODE(NTV1), METHOD_NAME_CODE(VERTICAL_OFFSET_BY_TIN_INTERPOLATION_JSON), METHOD_NAME_CODE(CARTESIAN_GRID_OFFSETS_BY_TIN_INTERPOLATION_JSON), METHOD_NAME_CODE(NADCON), METHOD_NAME_CODE(NADCON5_2D), METHOD_NAME_CODE(NADCON5_3D), METHOD_NAME_CODE(VERTCON), METHOD_NAME_CODE(GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN), METHOD_NAME_CODE(VERTICALGRID_NZLVD), METHOD_NAME_CODE(VERTICALGRID_BEV_AT), METHOD_NAME_CODE(VERTICALGRID_GTX), METHOD_NAME_CODE(VERTICALGRID_ASC), METHOD_NAME_CODE(VERTICALGRID_GTG), METHOD_NAME_CODE(VERTICALGRID_PL_TXT), // PointMotionOperation METHOD_NAME_CODE(POINT_MOTION_BY_GRID_CANADA_NTV2_VEL), METHOD_NAME_CODE(POINT_MOTION_BY_GRID_CANADA_NEU_DOMAIN_NTV2_VEL), }; const MethodNameCode *getMethodNameCodes(size_t &nElts) { nElts = sizeof(methodNameCodesList) / sizeof(methodNameCodesList[0]); return methodNameCodesList; } #define PARAM_NAME_CODE(method) \ { EPSG_NAME_PARAMETER_##method, EPSG_CODE_PARAMETER_##method } const struct ParamNameCode gParamNameCodes[] = { // Parameters of projection methods PARAM_NAME_CODE(COLATITUDE_CONE_AXIS), PARAM_NAME_CODE(LATITUDE_OF_NATURAL_ORIGIN), PARAM_NAME_CODE(LONGITUDE_OF_NATURAL_ORIGIN), PARAM_NAME_CODE(SCALE_FACTOR_AT_NATURAL_ORIGIN), PARAM_NAME_CODE(FALSE_EASTING), PARAM_NAME_CODE(FALSE_NORTHING), PARAM_NAME_CODE(LATITUDE_PROJECTION_CENTRE), PARAM_NAME_CODE(LONGITUDE_PROJECTION_CENTRE), PARAM_NAME_CODE(AZIMUTH_PROJECTION_CENTRE), PARAM_NAME_CODE(ANGLE_RECTIFIED_TO_SKEW_GRID), PARAM_NAME_CODE(SCALE_FACTOR_PROJECTION_CENTRE), PARAM_NAME_CODE(EASTING_PROJECTION_CENTRE), PARAM_NAME_CODE(NORTHING_PROJECTION_CENTRE), PARAM_NAME_CODE(LATITUDE_PSEUDO_STANDARD_PARALLEL), PARAM_NAME_CODE(SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL), PARAM_NAME_CODE(LATITUDE_FALSE_ORIGIN), PARAM_NAME_CODE(LONGITUDE_FALSE_ORIGIN), PARAM_NAME_CODE(LATITUDE_1ST_STD_PARALLEL), PARAM_NAME_CODE(LATITUDE_2ND_STD_PARALLEL), PARAM_NAME_CODE(EASTING_FALSE_ORIGIN), PARAM_NAME_CODE(NORTHING_FALSE_ORIGIN), PARAM_NAME_CODE(LATITUDE_STD_PARALLEL), PARAM_NAME_CODE(LONGITUDE_OF_ORIGIN), PARAM_NAME_CODE(ELLIPSOID_SCALE_FACTOR), PARAM_NAME_CODE(PROJECTION_PLANE_ORIGIN_HEIGHT), PARAM_NAME_CODE(GEOCENTRIC_X_TOPOCENTRIC_ORIGIN), PARAM_NAME_CODE(GEOCENTRIC_Y_TOPOCENTRIC_ORIGIN), PARAM_NAME_CODE(GEOCENTRIC_Z_TOPOCENTRIC_ORIGIN), // Parameters of transformations PARAM_NAME_CODE(SEMI_MAJOR_AXIS_DIFFERENCE), PARAM_NAME_CODE(FLATTENING_DIFFERENCE), PARAM_NAME_CODE(LATITUDE_LONGITUDE_DIFFERENCE_FILE), PARAM_NAME_CODE(GEOID_CORRECTION_FILENAME), PARAM_NAME_CODE(VERTICAL_OFFSET_FILE), PARAM_NAME_CODE(GEOID_MODEL_DIFFERENCE_FILE), PARAM_NAME_CODE(LATITUDE_DIFFERENCE_FILE), PARAM_NAME_CODE(LONGITUDE_DIFFERENCE_FILE), PARAM_NAME_CODE(UNIT_CONVERSION_SCALAR), PARAM_NAME_CODE(LATITUDE_OFFSET), PARAM_NAME_CODE(LONGITUDE_OFFSET), PARAM_NAME_CODE(VERTICAL_OFFSET), PARAM_NAME_CODE(EASTING_OFFSET), PARAM_NAME_CODE(NORTHING_OFFSET), PARAM_NAME_CODE(GEOID_HEIGHT), PARAM_NAME_CODE(GEOID_UNDULATION), // deprecated PARAM_NAME_CODE(A0), PARAM_NAME_CODE(A1), PARAM_NAME_CODE(A2), PARAM_NAME_CODE(B0), PARAM_NAME_CODE(B1), PARAM_NAME_CODE(B2), PARAM_NAME_CODE(X_AXIS_TRANSLATION), PARAM_NAME_CODE(Y_AXIS_TRANSLATION), PARAM_NAME_CODE(Z_AXIS_TRANSLATION), PARAM_NAME_CODE(X_AXIS_ROTATION), PARAM_NAME_CODE(Y_AXIS_ROTATION), PARAM_NAME_CODE(Z_AXIS_ROTATION), PARAM_NAME_CODE(SCALE_DIFFERENCE), PARAM_NAME_CODE(RATE_X_AXIS_TRANSLATION), PARAM_NAME_CODE(RATE_Y_AXIS_TRANSLATION), PARAM_NAME_CODE(RATE_Z_AXIS_TRANSLATION), PARAM_NAME_CODE(RATE_X_AXIS_ROTATION), PARAM_NAME_CODE(RATE_Y_AXIS_ROTATION), PARAM_NAME_CODE(RATE_Z_AXIS_ROTATION), PARAM_NAME_CODE(RATE_SCALE_DIFFERENCE), PARAM_NAME_CODE(REFERENCE_EPOCH), PARAM_NAME_CODE(TRANSFORMATION_REFERENCE_EPOCH), PARAM_NAME_CODE(ORDINATE_1_EVAL_POINT), PARAM_NAME_CODE(ORDINATE_2_EVAL_POINT), PARAM_NAME_CODE(ORDINATE_3_EVAL_POINT), PARAM_NAME_CODE(GEOCENTRIC_TRANSLATION_FILE), PARAM_NAME_CODE(INCLINATION_IN_LATITUDE), PARAM_NAME_CODE(INCLINATION_IN_LONGITUDE), PARAM_NAME_CODE(EPSG_CODE_FOR_HORIZONTAL_CRS), PARAM_NAME_CODE(EPSG_CODE_FOR_INTERPOLATION_CRS), // Parameters of point motion operations PARAM_NAME_CODE(POINT_MOTION_VELOCITY_GRID_FILE), }; const ParamNameCode *getParamNameCodes(size_t &nElts) { nElts = sizeof(gParamNameCodes) / sizeof(gParamNameCodes[0]); return gParamNameCodes; } static const ParamMapping paramUnitConversionScalar = { EPSG_NAME_PARAMETER_UNIT_CONVERSION_SCALAR, EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR, nullptr, common::UnitOfMeasure::Type::SCALE, nullptr}; static const ParamMapping *const paramsChangeVerticalUnit[] = { ¶mUnitConversionScalar, nullptr}; static const ParamMapping paramLongitudeOffset = { EPSG_NAME_PARAMETER_LONGITUDE_OFFSET, EPSG_CODE_PARAMETER_LONGITUDE_OFFSET, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping *const paramsLongitudeRotation[] = { ¶mLongitudeOffset, nullptr}; static const ParamMapping paramA0 = { EPSG_NAME_PARAMETER_A0, EPSG_CODE_PARAMETER_A0, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping paramA1 = { EPSG_NAME_PARAMETER_A1, EPSG_CODE_PARAMETER_A1, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping paramA2 = { EPSG_NAME_PARAMETER_A2, EPSG_CODE_PARAMETER_A2, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping paramB0 = { EPSG_NAME_PARAMETER_B0, EPSG_CODE_PARAMETER_B0, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping paramB1 = { EPSG_NAME_PARAMETER_B1, EPSG_CODE_PARAMETER_B1, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping paramB2 = { EPSG_NAME_PARAMETER_B2, EPSG_CODE_PARAMETER_B2, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping *const paramsAffineParametricTransformation[] = { ¶mA0, ¶mA1, ¶mA2, ¶mB0, ¶mB1, ¶mB2, nullptr}; static const ParamMapping paramOrdinate1EvalPointTargetCRS = { EPSG_NAME_PARAMETER_ORDINATE_1_EVAL_POINT_TARGET_CRS, EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT_TARGET_CRS, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping paramOrdinate2EvalPointTargetCRS = { EPSG_NAME_PARAMETER_ORDINATE_2_EVAL_POINT_TARGET_CRS, EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT_TARGET_CRS, nullptr, common::UnitOfMeasure::Type::UNKNOWN, nullptr}; static const ParamMapping paramScaleFactorForSourceCRSAxes = { EPSG_NAME_PARAMETER_SCALE_FACTOR_FOR_SOURCE_CRS_AXES, EPSG_CODE_PARAMETER_SCALE_FACTOR_FOR_SOURCE_CRS_AXES, nullptr, common::UnitOfMeasure::Type::SCALE, nullptr}; static const ParamMapping paramRotationAngleOfSourceCRSAxes = { EPSG_NAME_PARAMETER_ROTATION_ANGLE_OF_SOURCE_CRS_AXES, EPSG_CODE_PARAMETER_ROTATION_ANGLE_OF_SOURCE_CRS_AXES, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping *const paramsSimilarityTransformation[] = { ¶mOrdinate1EvalPointTargetCRS, ¶mOrdinate2EvalPointTargetCRS, ¶mScaleFactorForSourceCRSAxes, ¶mRotationAngleOfSourceCRSAxes, nullptr}; static const ParamMapping paramXTranslation = { EPSG_NAME_PARAMETER_X_AXIS_TRANSLATION, EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramYTranslation = { EPSG_NAME_PARAMETER_Y_AXIS_TRANSLATION, EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramZTranslation = { EPSG_NAME_PARAMETER_Z_AXIS_TRANSLATION, EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramXRotation = { EPSG_NAME_PARAMETER_X_AXIS_ROTATION, EPSG_CODE_PARAMETER_X_AXIS_ROTATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramYRotation = { EPSG_NAME_PARAMETER_Y_AXIS_ROTATION, EPSG_CODE_PARAMETER_Y_AXIS_ROTATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramZRotation = { EPSG_NAME_PARAMETER_Z_AXIS_ROTATION, EPSG_CODE_PARAMETER_Z_AXIS_ROTATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramScaleDifference = { EPSG_NAME_PARAMETER_SCALE_DIFFERENCE, EPSG_CODE_PARAMETER_SCALE_DIFFERENCE, nullptr, common::UnitOfMeasure::Type::SCALE, nullptr}; static const ParamMapping *const paramsHelmert3[] = { ¶mXTranslation, ¶mYTranslation, ¶mZTranslation, nullptr}; static const ParamMapping *const paramsHelmert7[] = { ¶mXTranslation, ¶mYTranslation, ¶mZTranslation, ¶mXRotation, ¶mYRotation, ¶mZRotation, ¶mScaleDifference, nullptr}; static const ParamMapping paramRateXTranslation = { EPSG_NAME_PARAMETER_RATE_X_AXIS_TRANSLATION, EPSG_CODE_PARAMETER_RATE_X_AXIS_TRANSLATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramRateYTranslation = { EPSG_NAME_PARAMETER_RATE_Y_AXIS_TRANSLATION, EPSG_CODE_PARAMETER_RATE_Y_AXIS_TRANSLATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramRateZTranslation = { EPSG_NAME_PARAMETER_RATE_Z_AXIS_TRANSLATION, EPSG_CODE_PARAMETER_RATE_Z_AXIS_TRANSLATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramRateXRotation = { EPSG_NAME_PARAMETER_RATE_X_AXIS_ROTATION, EPSG_CODE_PARAMETER_RATE_X_AXIS_ROTATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramRateYRotation = { EPSG_NAME_PARAMETER_RATE_Y_AXIS_ROTATION, EPSG_CODE_PARAMETER_RATE_Y_AXIS_ROTATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramRateZRotation = { EPSG_NAME_PARAMETER_RATE_Z_AXIS_ROTATION, EPSG_CODE_PARAMETER_RATE_Z_AXIS_ROTATION, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramRateScaleDifference = { EPSG_NAME_PARAMETER_RATE_SCALE_DIFFERENCE, EPSG_CODE_PARAMETER_RATE_SCALE_DIFFERENCE, nullptr, common::UnitOfMeasure::Type::SCALE, nullptr}; static const ParamMapping paramReferenceEpoch = { EPSG_NAME_PARAMETER_REFERENCE_EPOCH, EPSG_CODE_PARAMETER_REFERENCE_EPOCH, nullptr, common::UnitOfMeasure::Type::TIME, nullptr}; static const ParamMapping *const paramsHelmert15[] = { ¶mXTranslation, ¶mYTranslation, ¶mZTranslation, ¶mXRotation, ¶mYRotation, ¶mZRotation, ¶mScaleDifference, ¶mRateXTranslation, ¶mRateYTranslation, ¶mRateZTranslation, ¶mRateXRotation, ¶mRateYRotation, ¶mRateZRotation, ¶mRateScaleDifference, ¶mReferenceEpoch, nullptr}; static const ParamMapping paramOrdinate1EvalPoint = { EPSG_NAME_PARAMETER_ORDINATE_1_EVAL_POINT, EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramOrdinate2EvalPoint = { EPSG_NAME_PARAMETER_ORDINATE_2_EVAL_POINT, EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramOrdinate3EvalPoint = { EPSG_NAME_PARAMETER_ORDINATE_3_EVAL_POINT, EPSG_CODE_PARAMETER_ORDINATE_3_EVAL_POINT, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping *const paramsMolodenskyBadekas[] = { ¶mXTranslation, ¶mYTranslation, ¶mZTranslation, ¶mXRotation, ¶mYRotation, ¶mZRotation, ¶mScaleDifference, ¶mOrdinate1EvalPoint, ¶mOrdinate2EvalPoint, ¶mOrdinate3EvalPoint, nullptr}; static const ParamMapping paramSemiMajorAxisDifference = { EPSG_NAME_PARAMETER_SEMI_MAJOR_AXIS_DIFFERENCE, EPSG_CODE_PARAMETER_SEMI_MAJOR_AXIS_DIFFERENCE, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramFlatteningDifference = { EPSG_NAME_PARAMETER_FLATTENING_DIFFERENCE, EPSG_CODE_PARAMETER_FLATTENING_DIFFERENCE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsMolodensky[] = { ¶mXTranslation, ¶mYTranslation, ¶mZTranslation, ¶mSemiMajorAxisDifference, ¶mFlatteningDifference, nullptr}; static const ParamMapping paramLatitudeOffset = { EPSG_NAME_PARAMETER_LATITUDE_OFFSET, EPSG_CODE_PARAMETER_LATITUDE_OFFSET, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping *const paramsGeographic2DOffsets[] = { ¶mLatitudeOffset, ¶mLongitudeOffset, nullptr}; static const ParamMapping paramGeoidHeight = { EPSG_NAME_PARAMETER_GEOID_HEIGHT, EPSG_CODE_PARAMETER_GEOID_HEIGHT, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping *const paramsGeographic2DWithHeightOffsets[] = { ¶mLatitudeOffset, ¶mLongitudeOffset, ¶mGeoidHeight, nullptr}; static const ParamMapping paramVerticalOffset = { EPSG_NAME_PARAMETER_VERTICAL_OFFSET, EPSG_CODE_PARAMETER_VERTICAL_OFFSET, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping *const paramsGeographic3DOffsets[] = { ¶mLatitudeOffset, ¶mLongitudeOffset, ¶mVerticalOffset, nullptr}; static const ParamMapping paramEastingOffset = { EPSG_NAME_PARAMETER_EASTING_OFFSET, EPSG_CODE_PARAMETER_EASTING_OFFSET, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping paramNorthingOffset = { EPSG_NAME_PARAMETER_NORTHING_OFFSET, EPSG_CODE_PARAMETER_NORTHING_OFFSET, nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; static const ParamMapping *const paramsCartesianGridOffsets[] = { ¶mEastingOffset, ¶mNorthingOffset, nullptr}; static const ParamMapping *const paramsVerticalOffsets[] = { ¶mVerticalOffset, nullptr}; static const ParamMapping *const paramsGeographic3DToGravityRelatedHeight[] = { ¶mGeoidHeight, nullptr}; static const ParamMapping paramInclinationInLatitude = { EPSG_NAME_PARAMETER_INCLINATION_IN_LATITUDE, EPSG_CODE_PARAMETER_INCLINATION_IN_LATITUDE, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping paramInclinationInLongitude = { EPSG_NAME_PARAMETER_INCLINATION_IN_LONGITUDE, EPSG_CODE_PARAMETER_INCLINATION_IN_LONGITUDE, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping *const paramsVerticalOffsetAndSlope[] = { ¶mOrdinate1EvalPoint, ¶mOrdinate2EvalPoint, ¶mVerticalOffset, ¶mInclinationInLatitude, ¶mInclinationInLongitude, nullptr}; static const ParamMapping paramLatitudeLongitudeDifferenceFile = { EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsNTV2[] = { ¶mLatitudeLongitudeDifferenceFile, nullptr}; static const ParamMapping paramGeocentricTranslationFile = { EPSG_NAME_PARAMETER_GEOCENTRIC_TRANSLATION_FILE, EPSG_CODE_PARAMETER_GEOCENTRIC_TRANSLATION_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsGeocentricTranslationGridInterpolationIGN[] = { ¶mGeocentricTranslationFile, nullptr}; static const ParamMapping paramLatitudeDifferenceFile = { EPSG_NAME_PARAMETER_LATITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_DIFFERENCE_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping paramLongitudeDifferenceFile = { EPSG_NAME_PARAMETER_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LONGITUDE_DIFFERENCE_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsNADCON[] = { ¶mLatitudeDifferenceFile, ¶mLongitudeDifferenceFile, nullptr}; static const ParamMapping *const paramsNADCON5_2D[] = { ¶mLatitudeDifferenceFile, ¶mLongitudeDifferenceFile, nullptr}; static const ParamMapping paramEllipsoidalHeightDifference = { EPSG_NAME_PARAMETER_ELLIPSOIDAL_HEIGHT_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_ELLIPSOIDAL_HEIGHT_DIFFERENCE_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsNADCON5_3D[] = { ¶mLatitudeDifferenceFile, ¶mLongitudeDifferenceFile, ¶mEllipsoidalHeightDifference, nullptr}; static const ParamMapping paramVerticalOffsetFile = { EPSG_NAME_PARAMETER_VERTICAL_OFFSET_FILE, EPSG_CODE_PARAMETER_VERTICAL_OFFSET_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsVERTCON[] = {¶mVerticalOffsetFile, nullptr}; static const ParamMapping paramPointMotiionVelocityGridFile = { EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsPointMotionOperationByVelocityGrid[] = { ¶mPointMotiionVelocityGridFile, nullptr}; static const ParamMapping paramSouthPoleLatGRIB = { PROJ_WKT2_NAME_PARAMETER_SOUTH_POLE_LATITUDE_GRIB_CONVENTION, 0, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping paramSouthPoleLongGRIB = { PROJ_WKT2_NAME_PARAMETER_SOUTH_POLE_LONGITUDE_GRIB_CONVENTION, 0, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping paramAxisRotationGRIB = { PROJ_WKT2_NAME_PARAMETER_AXIS_ROTATION_GRIB_CONVENTION, 0, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping *const paramsPoleRotationGRIBConvention[] = { ¶mSouthPoleLatGRIB, ¶mSouthPoleLongGRIB, ¶mAxisRotationGRIB, nullptr}; static const ParamMapping paramGridNorthPoleLatitudeNetCDF = { PROJ_WKT2_NAME_PARAMETER_GRID_NORTH_POLE_LATITUDE_NETCDF_CONVENTION, 0, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping paramGridNorthPoleLongitudeNetCDF = { PROJ_WKT2_NAME_PARAMETER_GRID_NORTH_POLE_LONGITUDE_NETCDF_CONVENTION, 0, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping paramNorthPoleGridLongitudeNetCDF = { PROJ_WKT2_NAME_PARAMETER_NORTH_POLE_GRID_LONGITUDE_NETCDF_CONVENTION, 0, nullptr, common::UnitOfMeasure::Type::ANGULAR, nullptr}; static const ParamMapping *const paramsPoleRotationNetCDFCFConvention[] = { ¶mGridNorthPoleLatitudeNetCDF, ¶mGridNorthPoleLongitudeNetCDF, ¶mNorthPoleGridLongitudeNetCDF, nullptr}; static const ParamMapping paramTINOffsetFile = { EPSG_NAME_PARAMETER_TIN_OFFSET_FILE, EPSG_CODE_PARAMETER_TIN_OFFSET_FILE, nullptr, common::UnitOfMeasure::Type::NONE, nullptr}; static const ParamMapping *const paramsTINOffsetFile[] = {¶mTINOffsetFile, nullptr}; static const MethodMapping gOtherMethodMappings[] = { {EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT, EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT, nullptr, nullptr, nullptr, paramsChangeVerticalUnit}, {EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR, EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR, nullptr, nullptr, nullptr, nullptr}, {EPSG_NAME_METHOD_HEIGHT_DEPTH_REVERSAL, EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL, nullptr, nullptr, nullptr, nullptr}, {EPSG_NAME_METHOD_AXIS_ORDER_REVERSAL_2D, EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_2D, nullptr, nullptr, nullptr, nullptr}, {EPSG_NAME_METHOD_AXIS_ORDER_REVERSAL_3D, EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_3D, nullptr, nullptr, nullptr, nullptr}, {EPSG_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC, EPSG_CODE_METHOD_GEOGRAPHIC_GEOCENTRIC, nullptr, nullptr, nullptr, nullptr}, {PROJ_WKT2_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC_LATITUDE, 0, nullptr, nullptr, nullptr, nullptr}, {EPSG_NAME_METHOD_LONGITUDE_ROTATION, EPSG_CODE_METHOD_LONGITUDE_ROTATION, nullptr, nullptr, nullptr, paramsLongitudeRotation}, {EPSG_NAME_METHOD_AFFINE_PARAMETRIC_TRANSFORMATION, EPSG_CODE_METHOD_AFFINE_PARAMETRIC_TRANSFORMATION, nullptr, nullptr, nullptr, paramsAffineParametricTransformation}, {EPSG_NAME_METHOD_SIMILARITY_TRANSFORMATION, EPSG_CODE_METHOD_SIMILARITY_TRANSFORMATION, nullptr, nullptr, nullptr, paramsSimilarityTransformation}, {PROJ_WKT2_NAME_METHOD_POLE_ROTATION_GRIB_CONVENTION, 0, nullptr, nullptr, nullptr, paramsPoleRotationGRIBConvention}, {PROJ_WKT2_NAME_METHOD_POLE_ROTATION_NETCDF_CF_CONVENTION, 0, nullptr, nullptr, nullptr, paramsPoleRotationNetCDFCFConvention}, {EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC, EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC, nullptr, nullptr, nullptr, paramsHelmert3}, {EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D, EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsHelmert3}, {EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D, EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsHelmert3}, {EPSG_NAME_METHOD_COORDINATE_FRAME_GEOCENTRIC, EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC, EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D, EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D, EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D, EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D, EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_POSITION_VECTOR_GEOCENTRIC, EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D, EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D, EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsHelmert7}, {EPSG_NAME_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC, EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC, nullptr, nullptr, nullptr, paramsHelmert15}, {EPSG_NAME_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D, EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsHelmert15}, {EPSG_NAME_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D, EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsHelmert15}, {EPSG_NAME_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC, EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC, nullptr, nullptr, nullptr, paramsHelmert15}, {EPSG_NAME_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D, EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsHelmert15}, {EPSG_NAME_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D, EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsHelmert15}, {EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_CF_GEOCENTRIC, EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOCENTRIC, nullptr, nullptr, nullptr, paramsMolodenskyBadekas}, {EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_2D, EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsMolodenskyBadekas}, {EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_3D, EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsMolodenskyBadekas}, {EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_PV_GEOCENTRIC, EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOCENTRIC, nullptr, nullptr, nullptr, paramsMolodenskyBadekas}, {EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D, EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D, nullptr, nullptr, nullptr, paramsMolodenskyBadekas}, {EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_3D, EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_3D, nullptr, nullptr, nullptr, paramsMolodenskyBadekas}, {EPSG_NAME_METHOD_MOLODENSKY, EPSG_CODE_METHOD_MOLODENSKY, nullptr, nullptr, nullptr, paramsMolodensky}, {EPSG_NAME_METHOD_ABRIDGED_MOLODENSKY, EPSG_CODE_METHOD_ABRIDGED_MOLODENSKY, nullptr, nullptr, nullptr, paramsMolodensky}, {EPSG_NAME_METHOD_GEOGRAPHIC2D_OFFSETS, EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS, nullptr, nullptr, nullptr, paramsGeographic2DOffsets}, {EPSG_NAME_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS, EPSG_CODE_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS, nullptr, nullptr, nullptr, paramsGeographic2DWithHeightOffsets}, {EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSETS, EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS, nullptr, nullptr, nullptr, paramsGeographic3DOffsets}, {EPSG_NAME_METHOD_CARTESIAN_GRID_OFFSETS, EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS, nullptr, nullptr, nullptr, paramsCartesianGridOffsets}, {EPSG_NAME_METHOD_VERTICAL_OFFSET, EPSG_CODE_METHOD_VERTICAL_OFFSET, nullptr, nullptr, nullptr, paramsVerticalOffsets}, {EPSG_NAME_METHOD_GEOGRAPHIC3D_TO_GRAVITYRELATEDHEIGHT, EPSG_CODE_METHOD_GEOGRAPHIC3D_TO_GRAVITYRELATEDHEIGHT, nullptr, nullptr, nullptr, paramsGeographic3DToGravityRelatedHeight}, {EPSG_NAME_METHOD_GEOGRAPHIC3D_TO_GEOG2D_GRAVITYRELATEDHEIGHT, EPSG_CODE_METHOD_GEOGRAPHIC3D_TO_GEOG2D_GRAVITYRELATEDHEIGHT, nullptr, nullptr, nullptr, paramsGeographic3DToGravityRelatedHeight}, {EPSG_NAME_METHOD_VERTICAL_OFFSET_AND_SLOPE, EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE, nullptr, nullptr, nullptr, paramsVerticalOffsetAndSlope}, {EPSG_NAME_METHOD_NTV2, EPSG_CODE_METHOD_NTV2, nullptr, nullptr, nullptr, paramsNTV2}, {EPSG_NAME_METHOD_NTV1, EPSG_CODE_METHOD_NTV1, nullptr, nullptr, nullptr, paramsNTV2}, {EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN, EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN, nullptr, nullptr, nullptr, paramsGeocentricTranslationGridInterpolationIGN}, {EPSG_NAME_METHOD_VERTICAL_OFFSET_BY_TIN_INTERPOLATION_JSON, EPSG_CODE_METHOD_VERTICAL_OFFSET_BY_TIN_INTERPOLATION_JSON, nullptr, nullptr, nullptr, paramsTINOffsetFile}, {EPSG_NAME_METHOD_CARTESIAN_GRID_OFFSETS_BY_TIN_INTERPOLATION_JSON, EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS_BY_TIN_INTERPOLATION_JSON, nullptr, nullptr, nullptr, paramsTINOffsetFile}, {EPSG_NAME_METHOD_NADCON, EPSG_CODE_METHOD_NADCON, nullptr, nullptr, nullptr, paramsNADCON}, {EPSG_NAME_METHOD_NADCON5_2D, EPSG_CODE_METHOD_NADCON5_2D, nullptr, nullptr, nullptr, paramsNADCON5_2D}, {EPSG_NAME_METHOD_NADCON5_3D, EPSG_CODE_METHOD_NADCON5_3D, nullptr, nullptr, nullptr, paramsNADCON5_3D}, {EPSG_NAME_METHOD_VERTCON, EPSG_CODE_METHOD_VERTCON, nullptr, nullptr, nullptr, paramsVERTCON}, {EPSG_NAME_METHOD_VERTCON_OLDNAME, EPSG_CODE_METHOD_VERTCON, nullptr, nullptr, nullptr, paramsVERTCON}, {EPSG_NAME_METHOD_POINT_MOTION_BY_GRID_CANADA_NTV2_VEL, EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NTV2_VEL, nullptr, nullptr, nullptr, paramsPointMotionOperationByVelocityGrid}, {EPSG_NAME_METHOD_POINT_MOTION_BY_GRID_CANADA_NEU_DOMAIN_NTV2_VEL, EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NEU_DOMAIN_NTV2_VEL, nullptr, nullptr, nullptr, paramsPointMotionOperationByVelocityGrid}, }; const MethodMapping *getOtherMethodMappings(size_t &nElts) { nElts = sizeof(gOtherMethodMappings) / sizeof(gOtherMethodMappings[0]); return gOtherMethodMappings; } // --------------------------------------------------------------------------- PROJ_NO_INLINE const MethodMapping *getMapping(int epsg_code) noexcept { for (const auto &mapping : gProjectionMethodMappings) { if (mapping.epsg_code == epsg_code) { return &mapping; } } return nullptr; } // --------------------------------------------------------------------------- const MethodMapping *getMapping(const OperationMethod *method) noexcept { const std::string &name(method->nameStr()); const int epsg_code = method->getEPSGCode(); for (const auto &mapping : gProjectionMethodMappings) { if ((epsg_code != 0 && mapping.epsg_code == epsg_code) || metadata::Identifier::isEquivalentName(mapping.wkt2_name, name.c_str())) { return &mapping; } } return nullptr; } // --------------------------------------------------------------------------- const MethodMapping *getMappingFromWKT1(const std::string &wkt1_name) noexcept { // Unusual for a WKT1 projection name, but mentioned in OGC 12-063r5 C.4.2 if (ci_starts_with(wkt1_name, "UTM zone")) { return getMapping(EPSG_CODE_METHOD_TRANSVERSE_MERCATOR); } for (const auto &mapping : gProjectionMethodMappings) { if (mapping.wkt1_name && metadata::Identifier::isEquivalentName( mapping.wkt1_name, wkt1_name.c_str())) { return &mapping; } } return nullptr; } // --------------------------------------------------------------------------- const MethodMapping *getMapping(const char *wkt2_name) noexcept { for (const auto &mapping : gProjectionMethodMappings) { if (metadata::Identifier::isEquivalentName(mapping.wkt2_name, wkt2_name)) { return &mapping; } } for (const auto &mapping : gOtherMethodMappings) { if (metadata::Identifier::isEquivalentName(mapping.wkt2_name, wkt2_name)) { return &mapping; } } return nullptr; } // --------------------------------------------------------------------------- std::vector getMappingsFromPROJName(const std::string &projName) { std::vector res; for (const auto &mapping : gProjectionMethodMappings) { if (mapping.proj_name_main && projName == mapping.proj_name_main) { res.push_back(&mapping); } } return res; } // --------------------------------------------------------------------------- const ParamMapping *getMapping(const MethodMapping *mapping, const OperationParameterNNPtr ¶m) { if (mapping->params == nullptr) { return nullptr; } // First try with id const int epsg_code = param->getEPSGCode(); if (epsg_code) { for (int i = 0; mapping->params[i] != nullptr; ++i) { const auto *paramMapping = mapping->params[i]; if (paramMapping->epsg_code == epsg_code) { return paramMapping; } } } // then equivalent name const std::string &name = param->nameStr(); for (int i = 0; mapping->params[i] != nullptr; ++i) { const auto *paramMapping = mapping->params[i]; if (metadata::Identifier::isEquivalentName(paramMapping->wkt2_name, name.c_str())) { return paramMapping; } } // and finally different name, but equivalent parameter for (int i = 0; mapping->params[i] != nullptr; ++i) { const auto *paramMapping = mapping->params[i]; if (areEquivalentParameters(paramMapping->wkt2_name, name)) { return paramMapping; } } return nullptr; } // --------------------------------------------------------------------------- const ParamMapping *getMappingFromWKT1(const MethodMapping *mapping, const std::string &wkt1_name) { for (int i = 0; mapping->params[i] != nullptr; ++i) { const auto *paramMapping = mapping->params[i]; if (paramMapping->wkt1_name && (metadata::Identifier::isEquivalentName(paramMapping->wkt1_name, wkt1_name.c_str()) || areEquivalentParameters(paramMapping->wkt1_name, wkt1_name))) { return paramMapping; } } return nullptr; } //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/parammappings.hpp000664 001754 001755 00000007631 14764566077 021756 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef PARAMMAPPINGS_HPP #define PARAMMAPPINGS_HPP #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/coordinateoperation.hpp" #include "proj/util.hpp" // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress extern const char *WKT1_LATITUDE_OF_ORIGIN; extern const char *WKT1_CENTRAL_MERIDIAN; extern const char *WKT1_SCALE_FACTOR; extern const char *WKT1_FALSE_EASTING; extern const char *WKT1_FALSE_NORTHING; extern const char *WKT1_STANDARD_PARALLEL_1; extern const char *WKT1_STANDARD_PARALLEL_2; extern const char *WKT1_LATITUDE_OF_CENTER; extern const char *WKT1_LONGITUDE_OF_CENTER; extern const char *WKT1_AZIMUTH; extern const char *WKT1_RECTIFIED_GRID_ANGLE; struct ParamMapping { const char *wkt2_name; const int epsg_code; const char *wkt1_name; const common::UnitOfMeasure::Type unit_type; const char *proj_name; }; struct MethodMapping { const char *wkt2_name; const int epsg_code; const char *wkt1_name; const char *proj_name_main; const char *proj_name_aux; const ParamMapping *const *params; }; extern const ParamMapping paramLatitudeNatOrigin; const MethodMapping *getProjectionMethodMappings(size_t &nElts); const MethodMapping *getOtherMethodMappings(size_t &nElts); struct MethodNameCode { const char *name; int epsg_code; }; const MethodNameCode *getMethodNameCodes(size_t &nElts); struct ParamNameCode { const char *name; int epsg_code; }; const ParamNameCode *getParamNameCodes(size_t &nElts); const MethodMapping *getMapping(int epsg_code) noexcept; const MethodMapping *getMappingFromWKT1(const std::string &wkt1_name) noexcept; const MethodMapping *getMapping(const char *wkt2_name) noexcept; const MethodMapping *getMapping(const OperationMethod *method) noexcept; std::vector getMappingsFromPROJName(const std::string &projName); const ParamMapping *getMapping(const MethodMapping *mapping, const OperationParameterNNPtr ¶m); const ParamMapping *getMappingFromWKT1(const MethodMapping *mapping, const std::string &wkt1_name); //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END #endif // PARAMMAPPINGS_HPP proj-9.6.0/src/iso19111/operation/projbasedoperation.cpp000664 001754 001755 00000027300 14764566077 022777 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "coordinateoperation_internal.hpp" #include "oputils.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // M_PI // clang-format on #include "proj_constants.h" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include #include #include #include using namespace NS_PROJ::internal; // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- PROJBasedOperation::~PROJBasedOperation() = default; // --------------------------------------------------------------------------- PROJBasedOperation::PROJBasedOperation(const OperationMethodNNPtr &methodIn) : SingleOperation(methodIn) {} // --------------------------------------------------------------------------- PROJBasedOperationNNPtr PROJBasedOperation::create( const util::PropertyMap &properties, const std::string &PROJString, const crs::CRSPtr &sourceCRS, const crs::CRSPtr &targetCRS, const std::vector &accuracies) { auto method = OperationMethod::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, "PROJ-based operation method: " + PROJString), std::vector{}); auto op = PROJBasedOperation::nn_make_shared(method); op->assignSelf(op); op->projString_ = PROJString; if (sourceCRS && targetCRS) { op->setCRSs(NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), nullptr); } op->setProperties( addDefaultNameIfNeeded(properties, "PROJ-based coordinate operation")); op->setAccuracies(accuracies); auto formatter = io::PROJStringFormatter::create(); try { formatter->ingestPROJString(PROJString); op->setRequiresPerCoordinateInputTime( formatter->requiresPerCoordinateInputTime()); } catch (const io::ParsingException &e) { throw util::UnsupportedOperationException( std::string("PROJBasedOperation::create() failed: ") + e.what()); } return op; } // --------------------------------------------------------------------------- PROJBasedOperationNNPtr PROJBasedOperation::create( const util::PropertyMap &properties, const io::IPROJStringExportableNNPtr &projExportable, bool inverse, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const crs::CRSPtr &interpolationCRS, const std::vector &accuracies, bool hasBallparkTransformation) { auto formatter = io::PROJStringFormatter::create(); if (inverse) { formatter->startInversion(); } const bool bRequiresPerCoordinateInputTime = formatter->requiresPerCoordinateInputTime(); projExportable->_exportToPROJString(formatter.get()); if (inverse) { formatter->stopInversion(); } const auto &projString = formatter->toString(); auto method = OperationMethod::create( util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, "PROJ-based operation method (approximate): " + projString), std::vector{}); auto op = PROJBasedOperation::nn_make_shared(method); op->assignSelf(op); op->projString_ = projString; op->setCRSs(sourceCRS, targetCRS, interpolationCRS); op->setProperties( addDefaultNameIfNeeded(properties, "PROJ-based coordinate operation")); op->setAccuracies(accuracies); op->projStringExportable_ = projExportable.as_nullable(); op->inverse_ = inverse; op->setHasBallparkTransformation(hasBallparkTransformation); op->setRequiresPerCoordinateInputTime(bRequiresPerCoordinateInputTime); return op; } // --------------------------------------------------------------------------- CoordinateOperationNNPtr PROJBasedOperation::inverse() const { if (projStringExportable_ && sourceCRS() && targetCRS()) { return util::nn_static_pointer_cast( PROJBasedOperation::create( createPropertiesForInverse(this, false, false), NN_NO_CHECK(projStringExportable_), !inverse_, NN_NO_CHECK(targetCRS()), NN_NO_CHECK(sourceCRS()), interpolationCRS(), coordinateOperationAccuracies(), hasBallparkTransformation())); } auto formatter = io::PROJStringFormatter::create(); formatter->startInversion(); try { formatter->ingestPROJString(projString_); } catch (const io::ParsingException &e) { throw util::UnsupportedOperationException( std::string("PROJBasedOperation::inverse() failed: ") + e.what()); } formatter->stopInversion(); auto op = PROJBasedOperation::create( createPropertiesForInverse(this, false, false), formatter->toString(), targetCRS(), sourceCRS(), coordinateOperationAccuracies()); if (sourceCRS() && targetCRS()) { op->setCRSs(NN_NO_CHECK(targetCRS()), NN_NO_CHECK(sourceCRS()), interpolationCRS()); } op->setHasBallparkTransformation(hasBallparkTransformation()); op->setRequiresPerCoordinateInputTime( formatter->requiresPerCoordinateInputTime()); return util::nn_static_pointer_cast(op); } // --------------------------------------------------------------------------- void PROJBasedOperation::_exportToWKT(io::WKTFormatter *formatter) const { if (sourceCRS() && targetCRS()) { exportTransformationToWKT(formatter); return; } const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { throw io::FormattingException( "PROJBasedOperation can only be exported to WKT2"); } formatter->startNode(io::WKTConstants::CONVERSION, false); formatter->addQuotedString(nameStr()); method()->_exportToWKT(formatter); for (const auto ¶mValue : parameterValues()) { paramValue->_exportToWKT(formatter); } formatter->endNode(); } // --------------------------------------------------------------------------- void PROJBasedOperation::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext(formatter->MakeObjectContext( (sourceCRS() && targetCRS()) ? "Transformation" : "Conversion", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } if (sourceCRS() && targetCRS()) { writer->AddObjKey("source_crs"); formatter->setAllowIDInImmediateChild(); sourceCRS()->_exportToJSON(formatter); writer->AddObjKey("target_crs"); formatter->setAllowIDInImmediateChild(); targetCRS()->_exportToJSON(formatter); } writer->AddObjKey("method"); formatter->setOmitTypeInImmediateChild(); formatter->setAllowIDInImmediateChild(); method()->_exportToJSON(formatter); const auto &l_parameterValues = parameterValues(); writer->AddObjKey("parameters"); { auto parametersContext(writer->MakeArrayContext(false)); for (const auto &genOpParamvalue : l_parameterValues) { formatter->setAllowIDInImmediateChild(); formatter->setOmitTypeInImmediateChild(); genOpParamvalue->_exportToJSON(formatter); } } } // --------------------------------------------------------------------------- void PROJBasedOperation::_exportToPROJString( io::PROJStringFormatter *formatter) const { if (projStringExportable_) { if (inverse_) { formatter->startInversion(); } projStringExportable_->_exportToPROJString(formatter); if (inverse_) { formatter->stopInversion(); } return; } try { formatter->ingestPROJString(projString_); } catch (const io::ParsingException &e) { throw io::FormattingException( std::string("PROJBasedOperation::exportToPROJString() failed: ") + e.what()); } } // --------------------------------------------------------------------------- CoordinateOperationNNPtr PROJBasedOperation::_shallowClone() const { auto op = PROJBasedOperation::nn_make_shared(*this); op->assignSelf(op); op->setCRSs(this, false); return util::nn_static_pointer_cast(op); } // --------------------------------------------------------------------------- std::set PROJBasedOperation::gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const { std::set res; try { auto formatterOut = io::PROJStringFormatter::create(); auto formatter = io::PROJStringFormatter::create(); formatter->ingestPROJString(exportToPROJString(formatterOut.get())); const auto usedGridNames = formatter->getUsedGridNames(); for (const auto &shortName : usedGridNames) { GridDescription desc; desc.shortName = shortName; if (databaseContext) { databaseContext->lookForGridInfo( desc.shortName, considerKnownGridsAsAvailable, desc.fullName, desc.packageName, desc.url, desc.directDownload, desc.openLicense, desc.available); } res.insert(std::move(desc)); } } catch (const io::ParsingException &) { } return res; } //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/singleoperation.cpp000664 001754 001755 00000622024 14764566077 022313 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "coordinateoperation_internal.hpp" #include "coordinateoperation_private.hpp" #include "operationmethod_private.hpp" #include "oputils.hpp" #include "parammappings.hpp" #include "vectorofvaluesparams.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // M_PI // clang-format on #include "proj_constants.h" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include #include #include #include using namespace NS_PROJ::internal; // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress InvalidOperationEmptyIntersection::InvalidOperationEmptyIntersection( const std::string &message) : InvalidOperation(message) {} InvalidOperationEmptyIntersection::InvalidOperationEmptyIntersection( const InvalidOperationEmptyIntersection &) = default; InvalidOperationEmptyIntersection::~InvalidOperationEmptyIntersection() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- GridDescription::GridDescription() : shortName{}, fullName{}, packageName{}, url{}, directDownload(false), openLicense(false), available(false) {} GridDescription::~GridDescription() = default; GridDescription::GridDescription(const GridDescription &) = default; GridDescription::GridDescription(GridDescription &&other) noexcept : shortName(std::move(other.shortName)), fullName(std::move(other.fullName)), packageName(std::move(other.packageName)), url(std::move(other.url)), directDownload(other.directDownload), openLicense(other.openLicense), available(other.available) {} //! @endcond // --------------------------------------------------------------------------- CoordinateOperation::CoordinateOperation() : d(std::make_unique()) {} // --------------------------------------------------------------------------- CoordinateOperation::CoordinateOperation(const CoordinateOperation &other) : ObjectUsage(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateOperation::~CoordinateOperation() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the version of the coordinate transformation (i.e. * instantiation * due to the stochastic nature of the parameters). * * Mandatory when describing a coordinate transformation or point motion * operation, and should not be supplied for a coordinate conversion. * * @return version or empty. */ const util::optional & CoordinateOperation::operationVersion() const { return d->operationVersion_; } // --------------------------------------------------------------------------- /** \brief Return estimate(s) of the impact of this coordinate operation on * point accuracy. * * Gives position error estimates for target coordinates of this coordinate * operation, assuming no errors in source coordinates. * * @return estimate(s) or empty vector. */ const std::vector & CoordinateOperation::coordinateOperationAccuracies() const { return d->coordinateOperationAccuracies_; } // --------------------------------------------------------------------------- /** \brief Return the source CRS of this coordinate operation. * * This should not be null, expect for of a derivingConversion of a DerivedCRS * when the owning DerivedCRS has been destroyed. * * @return source CRS, or null. */ const crs::CRSPtr CoordinateOperation::sourceCRS() const { return d->sourceCRSWeak_.lock(); } // --------------------------------------------------------------------------- /** \brief Return the target CRS of this coordinate operation. * * This should not be null, expect for of a derivingConversion of a DerivedCRS * when the owning DerivedCRS has been destroyed. * * @return target CRS, or null. */ const crs::CRSPtr CoordinateOperation::targetCRS() const { return d->targetCRSWeak_.lock(); } // --------------------------------------------------------------------------- /** \brief Return the interpolation CRS of this coordinate operation. * * @return interpolation CRS, or null. */ const crs::CRSPtr &CoordinateOperation::interpolationCRS() const { return d->interpolationCRS_; } // --------------------------------------------------------------------------- /** \brief Return the source epoch of coordinates. * * @return source epoch of coordinates, or empty. */ const util::optional & CoordinateOperation::sourceCoordinateEpoch() const { return *(d->sourceCoordinateEpoch_); } // --------------------------------------------------------------------------- /** \brief Return the target epoch of coordinates. * * @return target epoch of coordinates, or empty. */ const util::optional & CoordinateOperation::targetCoordinateEpoch() const { return *(d->targetCoordinateEpoch_); } // --------------------------------------------------------------------------- void CoordinateOperation::setWeakSourceTargetCRS( std::weak_ptr sourceCRSIn, std::weak_ptr targetCRSIn) { d->sourceCRSWeak_ = std::move(sourceCRSIn); d->targetCRSWeak_ = std::move(targetCRSIn); } // --------------------------------------------------------------------------- void CoordinateOperation::setCRSs(const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn) { d->strongRef_ = std::make_unique(sourceCRSIn, targetCRSIn); d->sourceCRSWeak_ = sourceCRSIn.as_nullable(); d->targetCRSWeak_ = targetCRSIn.as_nullable(); d->interpolationCRS_ = interpolationCRSIn; } // --------------------------------------------------------------------------- void CoordinateOperation::setCRSsUpdateInverse( const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn) { setCRSs(sourceCRSIn, targetCRSIn, interpolationCRSIn); auto invCO = dynamic_cast(this); if (invCO) { invCO->forwardOperation()->setCRSs(targetCRSIn, sourceCRSIn, interpolationCRSIn); } auto transf = dynamic_cast(this); if (transf) { transf->inverseAsTransformation()->setCRSs(targetCRSIn, sourceCRSIn, interpolationCRSIn); } auto concat = dynamic_cast(this); if (concat) { auto first = concat->operations().front().get(); auto &firstTarget(first->targetCRS()); if (firstTarget) { first->setCRSsUpdateInverse(sourceCRSIn, NN_NO_CHECK(firstTarget), first->interpolationCRS()); } auto last = concat->operations().back().get(); auto &lastSource(last->sourceCRS()); if (lastSource) { last->setCRSsUpdateInverse(NN_NO_CHECK(lastSource), targetCRSIn, last->interpolationCRS()); } } } // --------------------------------------------------------------------------- void CoordinateOperation::setInterpolationCRS( const crs::CRSPtr &interpolationCRSIn) { d->interpolationCRS_ = interpolationCRSIn; } // --------------------------------------------------------------------------- void CoordinateOperation::setCRSs(const CoordinateOperation *in, bool inverseSourceTarget) { auto l_sourceCRS = in->sourceCRS(); auto l_targetCRS = in->targetCRS(); if (l_sourceCRS && l_targetCRS) { auto nn_sourceCRS = NN_NO_CHECK(l_sourceCRS); auto nn_targetCRS = NN_NO_CHECK(l_targetCRS); if (inverseSourceTarget) { setCRSs(nn_targetCRS, nn_sourceCRS, in->interpolationCRS()); } else { setCRSs(nn_sourceCRS, nn_targetCRS, in->interpolationCRS()); } } } // --------------------------------------------------------------------------- void CoordinateOperation::setSourceCoordinateEpoch( const util::optional &epoch) { d->sourceCoordinateEpoch_ = std::make_shared>(epoch); } // --------------------------------------------------------------------------- void CoordinateOperation::setTargetCoordinateEpoch( const util::optional &epoch) { d->targetCoordinateEpoch_ = std::make_shared>(epoch); } // --------------------------------------------------------------------------- void CoordinateOperation::setAccuracies( const std::vector &accuracies) { d->coordinateOperationAccuracies_ = accuracies; } // --------------------------------------------------------------------------- /** \brief Return whether a coordinate operation can be instantiated as * a PROJ pipeline, checking in particular that referenced grids are * available. */ bool CoordinateOperation::isPROJInstantiable( const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const { try { exportToPROJString(io::PROJStringFormatter::create().get()); } catch (const std::exception &) { return false; } for (const auto &gridDesc : gridsNeeded(databaseContext, considerKnownGridsAsAvailable)) { // Grid name starting with @ are considered as optional. if (!gridDesc.available && (gridDesc.shortName.empty() || gridDesc.shortName[0] != '@')) { return false; } } return true; } // --------------------------------------------------------------------------- /** \brief Return whether a coordinate operation has a "ballpark" * transformation, * that is a very approximate one, due to lack of more accurate transformations. * * Typically a null geographic offset between two horizontal datum, or a * null vertical offset (or limited to unit changes) between two vertical * datum. Errors of several tens to one hundred meters might be expected, * compared to more accurate transformations. */ bool CoordinateOperation::hasBallparkTransformation() const { return d->hasBallparkTransformation_; } // --------------------------------------------------------------------------- void CoordinateOperation::setHasBallparkTransformation(bool b) { d->hasBallparkTransformation_ = b; } // --------------------------------------------------------------------------- /** \brief Return whether a coordinate operation requires coordinate tuples * to have a valid input time for the coordinate transformation to succeed. * (this applies for the forward direction) * * Note: in the case of a time-dependent Helmert transformation, this function * will return true, but when executing proj_trans(), execution will still * succeed if the time information is missing, due to the transformation central * epoch being used as a fallback. * * @since 9.5 */ bool CoordinateOperation::requiresPerCoordinateInputTime() const { return d->requiresPerCoordinateInputTime_ && !d->sourceCoordinateEpoch_->has_value(); } // --------------------------------------------------------------------------- void CoordinateOperation::setRequiresPerCoordinateInputTime(bool b) { d->requiresPerCoordinateInputTime_ = b; } // --------------------------------------------------------------------------- void CoordinateOperation::setProperties( const util::PropertyMap &properties) // throw(InvalidValueTypeException) { ObjectUsage::setProperties(properties); properties.getStringValue(OPERATION_VERSION_KEY, d->operationVersion_); } // --------------------------------------------------------------------------- /** \brief Return a variation of the current coordinate operation whose axis * order is the one expected for visualization purposes. */ CoordinateOperationNNPtr CoordinateOperation::normalizeForVisualization() const { auto l_sourceCRS = sourceCRS(); auto l_targetCRS = targetCRS(); if (!l_sourceCRS || !l_targetCRS) { throw util::UnsupportedOperationException( "Cannot retrieve source or target CRS"); } const bool swapSource = l_sourceCRS->mustAxisOrderBeSwitchedForVisualization(); const bool swapTarget = l_targetCRS->mustAxisOrderBeSwitchedForVisualization(); auto l_this = NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); if (!swapSource && !swapTarget) { return l_this; } std::vector subOps; if (swapSource) { auto op = Conversion::createAxisOrderReversal(false); op->setCRSs(l_sourceCRS->normalizeForVisualization(), NN_NO_CHECK(l_sourceCRS), nullptr); subOps.emplace_back(op); } subOps.emplace_back(l_this); if (swapTarget) { auto op = Conversion::createAxisOrderReversal(false); op->setCRSs(NN_NO_CHECK(l_targetCRS), l_targetCRS->normalizeForVisualization(), nullptr); subOps.emplace_back(op); } return util::nn_static_pointer_cast( ConcatenatedOperation::createComputeMetadata(subOps, true)); } // --------------------------------------------------------------------------- /** \brief Return a coordinate transformer for this operation. * * The returned coordinate transformer is tied to the provided context, * and should only be called by the thread "owning" the passed context. * It should not be used after the context has been destroyed. * * @param ctx Execution context to which the transformer will be tied to. * If null, the default context will be used (only safe for * single-threaded applications). * @return a new CoordinateTransformer instance. * @since 9.3 * @throw UnsupportedOperationException if the transformer cannot be * instantiated. */ CoordinateTransformerNNPtr CoordinateOperation::coordinateTransformer(PJ_CONTEXT *ctx) const { auto l_this = NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); return CoordinateTransformer::create(l_this, ctx); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateOperationNNPtr CoordinateOperation::shallowClone() const { return _shallowClone(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct CoordinateTransformer::Private { PJ *pj_; }; //! @endcond // --------------------------------------------------------------------------- CoordinateTransformer::CoordinateTransformer() : d(std::make_unique()) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CoordinateTransformer::~CoordinateTransformer() { if (d->pj_) { proj_assign_context(d->pj_, pj_get_default_ctx()); proj_destroy(d->pj_); } } //! @endcond // --------------------------------------------------------------------------- CoordinateTransformerNNPtr CoordinateTransformer::create(const CoordinateOperationNNPtr &op, PJ_CONTEXT *ctx) { auto transformer = NN_NO_CHECK( CoordinateTransformer::make_unique()); // pj_obj_create does not sanitize the context if (ctx == nullptr) ctx = pj_get_default_ctx(); transformer->d->pj_ = pj_obj_create(ctx, op); if (transformer->d->pj_ == nullptr) throw util::UnsupportedOperationException( "Cannot instantiate transformer"); return transformer; } // --------------------------------------------------------------------------- /** Transforms a coordinate tuple. * * PJ_COORD is a union of many structures. In the context of this method, * it is prudent to only use the v[] array, with the understanding that * the expected input values should be passed in the order and the unit of * the successive axis of the input CRS. Similarly the values returned in the * v[] array of the output PJ_COORD are in the order and the unit of the * successive axis of the output CRS. * For coordinate operations involving a time-dependent operation, * coord.v[3] is the decimal year of the coordinate epoch of the input (or * HUGE_VAL to indicate none) * * If an error occurs, HUGE_VAL is returned in the .v[0] member of the output * coordinate tuple. * * Example how to transform coordinates from EPSG:4326 (WGS 84 * latitude/longitude) to EPSG:32631 (WGS 84 / UTM zone 31N). \code{.cpp} auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto coord_op_ctxt = CoordinateOperationContext::create( authFactory, nullptr, 0.0); auto authFactoryEPSG = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto list = CoordinateOperationFactory::create()->createOperations( authFactoryEPSG->createCoordinateReferenceSystem("4326"), authFactoryEPSG->createCoordinateReferenceSystem("32631"), coord_op_ctxt); ASSERT_TRUE(!list.empty()); PJ_CONTEXT* ctx = proj_context_create(); auto transformer = list[0]->coordinateTransformer(ctx); PJ_COORD c; c.v[0] = 49; // latitude in degree c.v[1] = 2; // longitude in degree c.v[2] = 0; c.v[3] = HUGE_VAL; c = transformer->transform(c); EXPECT_NEAR(c.v[0], 426857.98771728, 1e-8); // easting in metre EXPECT_NEAR(c.v[1], 5427937.52346492, 1e-8); // northing in metre proj_context_destroy(ctx); \endcode */ PJ_COORD CoordinateTransformer::transform(PJ_COORD coord) { return proj_trans(d->pj_, PJ_FWD, coord); } // --------------------------------------------------------------------------- OperationMethod::OperationMethod() : d(std::make_unique()) {} // --------------------------------------------------------------------------- OperationMethod::OperationMethod(const OperationMethod &other) : IdentifiedObject(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress OperationMethod::~OperationMethod() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the formula(s) or procedure used by this coordinate operation * method. * * This may be a reference to a publication (in which case use * formulaCitation()). * * Note that the operation method may not be analytic, in which case this * attribute references or contains the procedure, not an analytic formula. * * @return the formula, or empty. */ const util::optional &OperationMethod::formula() PROJ_PURE_DEFN { return d->formula_; } // --------------------------------------------------------------------------- /** \brief Return a reference to a publication giving the formula(s) or * procedure * used by the coordinate operation method. * * @return the formula citation, or empty. */ const util::optional & OperationMethod::formulaCitation() PROJ_PURE_DEFN { return d->formulaCitation_; } // --------------------------------------------------------------------------- /** \brief Return the parameters of this operation method. * * @return the parameters. */ const std::vector & OperationMethod::parameters() PROJ_PURE_DEFN { return d->parameters_; } // --------------------------------------------------------------------------- /** \brief Instantiate a operation method from a vector of * GeneralOperationParameter. * * @param properties See \ref general_properties. At minimum the name should be * defined. * @param parameters Vector of GeneralOperationParameterNNPtr. * @return a new OperationMethod. */ OperationMethodNNPtr OperationMethod::create( const util::PropertyMap &properties, const std::vector ¶meters) { OperationMethodNNPtr method( OperationMethod::nn_make_shared()); method->assignSelf(method); method->setProperties(properties); method->d->parameters_ = parameters; properties.getStringValue("proj_method", method->d->projMethodOverride_); return method; } // --------------------------------------------------------------------------- /** \brief Instantiate a operation method from a vector of OperationParameter. * * @param properties See \ref general_properties. At minimum the name should be * defined. * @param parameters Vector of OperationParameterNNPtr. * @return a new OperationMethod. */ OperationMethodNNPtr OperationMethod::create( const util::PropertyMap &properties, const std::vector ¶meters) { std::vector parametersGeneral; parametersGeneral.reserve(parameters.size()); for (const auto &p : parameters) { parametersGeneral.push_back(p); } return create(properties, parametersGeneral); } // --------------------------------------------------------------------------- /** \brief Return the EPSG code, either directly, or through the name * @return code, or 0 if not found */ int OperationMethod::getEPSGCode() PROJ_PURE_DEFN { int epsg_code = IdentifiedObject::getEPSGCode(); if (epsg_code == 0) { auto l_name = nameStr(); if (ends_with(l_name, " (3D)")) { l_name.resize(l_name.size() - strlen(" (3D)")); } size_t nMethodNameCodes = 0; const auto methodNameCodes = getMethodNameCodes(nMethodNameCodes); for (size_t i = 0; i < nMethodNameCodes; ++i) { const auto &tuple = methodNameCodes[i]; if (metadata::Identifier::isEquivalentName(l_name.c_str(), tuple.name)) { return tuple.epsg_code; } } } return epsg_code; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void OperationMethod::_exportToWKT(io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; formatter->startNode(isWKT2 ? io::WKTConstants::METHOD : io::WKTConstants::PROJECTION, !identifiers().empty()); std::string l_name(nameStr()); if (!isWKT2) { const MethodMapping *mapping = getMapping(this); if (mapping == nullptr) { l_name = replaceAll(l_name, " ", "_"); } else { if (l_name == PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X) { l_name = "Geostationary_Satellite"; } else { if (mapping->wkt1_name == nullptr) { throw io::FormattingException( std::string("Unsupported conversion method: ") + mapping->wkt2_name); } l_name = mapping->wkt1_name; } } } formatter->addQuotedString(l_name); if (formatter->outputId()) { formatID(formatter); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void OperationMethod::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext(formatter->MakeObjectContext("OperationMethod", !identifiers().empty())); writer->AddObjKey("name"); writer->Add(nameStr()); if (formatter->outputId()) { formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool OperationMethod::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherOM = dynamic_cast(other); if (otherOM == nullptr || !IdentifiedObject::_isEquivalentTo(other, criterion, dbContext)) { return false; } // TODO test formula and formulaCitation const auto ¶ms = parameters(); const auto &otherParams = otherOM->parameters(); const auto paramsSize = params.size(); if (paramsSize != otherParams.size()) { return false; } if (criterion == util::IComparable::Criterion::STRICT) { for (size_t i = 0; i < paramsSize; i++) { if (!params[i]->_isEquivalentTo(otherParams[i].get(), criterion, dbContext)) { return false; } } } else { std::vector candidateIndices(paramsSize, true); for (size_t i = 0; i < paramsSize; i++) { bool found = false; for (size_t j = 0; j < paramsSize; j++) { if (candidateIndices[j] && params[i]->_isEquivalentTo(otherParams[j].get(), criterion, dbContext)) { candidateIndices[j] = false; found = true; break; } } if (!found) { return false; } } } return true; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GeneralParameterValue::Private {}; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeneralParameterValue::GeneralParameterValue() : d(nullptr) {} // --------------------------------------------------------------------------- GeneralParameterValue::GeneralParameterValue(const GeneralParameterValue &) : d(nullptr) {} //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeneralParameterValue::~GeneralParameterValue() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct OperationParameterValue::Private { OperationParameterNNPtr parameter; ParameterValueNNPtr parameterValue; Private(const OperationParameterNNPtr ¶meterIn, const ParameterValueNNPtr &valueIn) : parameter(parameterIn), parameterValue(valueIn) {} }; //! @endcond // --------------------------------------------------------------------------- OperationParameterValue::OperationParameterValue( const OperationParameterValue &other) : GeneralParameterValue(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- OperationParameterValue::OperationParameterValue( const OperationParameterNNPtr ¶meterIn, const ParameterValueNNPtr &valueIn) : GeneralParameterValue(), d(std::make_unique(parameterIn, valueIn)) {} // --------------------------------------------------------------------------- /** \brief Instantiate a OperationParameterValue. * * @param parameterIn Parameter (definition). * @param valueIn Parameter value. * @return a new OperationParameterValue. */ OperationParameterValueNNPtr OperationParameterValue::create(const OperationParameterNNPtr ¶meterIn, const ParameterValueNNPtr &valueIn) { return OperationParameterValue::nn_make_shared( parameterIn, valueIn); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress OperationParameterValue::~OperationParameterValue() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the parameter (definition) * * @return the parameter (definition). */ const OperationParameterNNPtr & OperationParameterValue::parameter() PROJ_PURE_DEFN { return d->parameter; } // --------------------------------------------------------------------------- /** \brief Return the parameter value. * * @return the parameter value. */ const ParameterValueNNPtr & OperationParameterValue::parameterValue() PROJ_PURE_DEFN { return d->parameterValue; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void OperationParameterValue::_exportToWKT( // cppcheck-suppress passedByValue io::WKTFormatter *formatter) const { _exportToWKT(formatter, nullptr); } void OperationParameterValue::_exportToWKT(io::WKTFormatter *formatter, const MethodMapping *mapping) const { const ParamMapping *paramMapping = mapping ? getMapping(mapping, d->parameter) : nullptr; if (paramMapping && paramMapping->wkt1_name == nullptr) { return; } const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (isWKT2 && parameterValue()->type() == ParameterValue::Type::FILENAME) { formatter->startNode(io::WKTConstants::PARAMETERFILE, !parameter()->identifiers().empty()); } else { formatter->startNode(io::WKTConstants::PARAMETER, !parameter()->identifiers().empty()); } if (paramMapping) { formatter->addQuotedString(paramMapping->wkt1_name); } else { formatter->addQuotedString(parameter()->nameStr()); } parameterValue()->_exportToWKT(formatter); if (formatter->outputId()) { parameter()->formatID(formatter); } formatter->endNode(); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void OperationParameterValue::_exportToJSON( io::JSONFormatter *formatter) const { auto writer = formatter->writer(); auto objectContext(formatter->MakeObjectContext( "ParameterValue", !parameter()->identifiers().empty())); writer->AddObjKey("name"); writer->Add(parameter()->nameStr()); const auto &l_value(parameterValue()); const auto value_type = l_value->type(); if (value_type == ParameterValue::Type::MEASURE) { writer->AddObjKey("value"); writer->Add(l_value->value().value(), 15); writer->AddObjKey("unit"); const auto &l_unit(l_value->value().unit()); if (l_unit == common::UnitOfMeasure::METRE || l_unit == common::UnitOfMeasure::DEGREE || l_unit == common::UnitOfMeasure::SCALE_UNITY) { writer->Add(l_unit.name()); } else { l_unit._exportToJSON(formatter); } } else if (value_type == ParameterValue::Type::FILENAME) { writer->AddObjKey("value"); writer->Add(l_value->valueFile()); } else if (value_type == ParameterValue::Type::INTEGER) { writer->AddObjKey("value"); writer->Add(l_value->integerValue()); } if (formatter->outputId()) { parameter()->formatID(formatter); } } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** Utility method used on WKT2 import to convert from abridged transformation * to "normal" transformation parameters. */ bool OperationParameterValue::convertFromAbridged( const std::string ¶mName, double &val, const common::UnitOfMeasure *&unit, int ¶mEPSGCode) { if (metadata::Identifier::isEquivalentName( paramName.c_str(), EPSG_NAME_PARAMETER_X_AXIS_TRANSLATION) || paramEPSGCode == EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION) { unit = &common::UnitOfMeasure::METRE; paramEPSGCode = EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION; return true; } else if (metadata::Identifier::isEquivalentName( paramName.c_str(), EPSG_NAME_PARAMETER_Y_AXIS_TRANSLATION) || paramEPSGCode == EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION) { unit = &common::UnitOfMeasure::METRE; paramEPSGCode = EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION; return true; } else if (metadata::Identifier::isEquivalentName( paramName.c_str(), EPSG_NAME_PARAMETER_Z_AXIS_TRANSLATION) || paramEPSGCode == EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION) { unit = &common::UnitOfMeasure::METRE; paramEPSGCode = EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION; return true; } else if (metadata::Identifier::isEquivalentName( paramName.c_str(), EPSG_NAME_PARAMETER_X_AXIS_ROTATION) || paramEPSGCode == EPSG_CODE_PARAMETER_X_AXIS_ROTATION) { unit = &common::UnitOfMeasure::ARC_SECOND; paramEPSGCode = EPSG_CODE_PARAMETER_X_AXIS_ROTATION; return true; } else if (metadata::Identifier::isEquivalentName( paramName.c_str(), EPSG_NAME_PARAMETER_Y_AXIS_ROTATION) || paramEPSGCode == EPSG_CODE_PARAMETER_Y_AXIS_ROTATION) { unit = &common::UnitOfMeasure::ARC_SECOND; paramEPSGCode = EPSG_CODE_PARAMETER_Y_AXIS_ROTATION; return true; } else if (metadata::Identifier::isEquivalentName( paramName.c_str(), EPSG_NAME_PARAMETER_Z_AXIS_ROTATION) || paramEPSGCode == EPSG_CODE_PARAMETER_Z_AXIS_ROTATION) { unit = &common::UnitOfMeasure::ARC_SECOND; paramEPSGCode = EPSG_CODE_PARAMETER_Z_AXIS_ROTATION; return true; } else if (metadata::Identifier::isEquivalentName( paramName.c_str(), EPSG_NAME_PARAMETER_SCALE_DIFFERENCE) || paramEPSGCode == EPSG_CODE_PARAMETER_SCALE_DIFFERENCE) { val = (val - 1.0) * 1e6; unit = &common::UnitOfMeasure::PARTS_PER_MILLION; paramEPSGCode = EPSG_CODE_PARAMETER_SCALE_DIFFERENCE; return true; } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool OperationParameterValue::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherOPV = dynamic_cast(other); if (otherOPV == nullptr) { return false; } if (!d->parameter->_isEquivalentTo(otherOPV->d->parameter.get(), criterion, dbContext)) { return false; } if (criterion == util::IComparable::Criterion::STRICT) { return d->parameterValue->_isEquivalentTo( otherOPV->d->parameterValue.get(), criterion); } if (d->parameterValue->_isEquivalentTo(otherOPV->d->parameterValue.get(), criterion, dbContext)) { return true; } if (d->parameter->getEPSGCode() == EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE || d->parameter->getEPSGCode() == EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID) { if (parameterValue()->type() == ParameterValue::Type::MEASURE && otherOPV->parameterValue()->type() == ParameterValue::Type::MEASURE) { const double a = std::fmod(parameterValue()->value().convertToUnit( common::UnitOfMeasure::DEGREE) + 360.0, 360.0); const double b = std::fmod(otherOPV->parameterValue()->value().convertToUnit( common::UnitOfMeasure::DEGREE) + 360.0, 360.0); return std::fabs(a - b) <= 1e-10 * std::fabs(a); } } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GeneralOperationParameter::Private {}; //! @endcond // --------------------------------------------------------------------------- GeneralOperationParameter::GeneralOperationParameter() : d(nullptr) {} // --------------------------------------------------------------------------- GeneralOperationParameter::GeneralOperationParameter( const GeneralOperationParameter &other) : IdentifiedObject(other), d(nullptr) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GeneralOperationParameter::~GeneralOperationParameter() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct OperationParameter::Private {}; //! @endcond // --------------------------------------------------------------------------- OperationParameter::OperationParameter() : d(nullptr) {} // --------------------------------------------------------------------------- OperationParameter::OperationParameter(const OperationParameter &other) : GeneralOperationParameter(other), d(nullptr) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress OperationParameter::~OperationParameter() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a OperationParameter. * * @param properties See \ref general_properties. At minimum the name should be * defined. * @return a new OperationParameter. */ OperationParameterNNPtr OperationParameter::create(const util::PropertyMap &properties) { OperationParameterNNPtr op( OperationParameter::nn_make_shared()); op->assignSelf(op); op->setProperties(properties); return op; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool OperationParameter::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherOP = dynamic_cast(other); if (otherOP == nullptr) { return false; } if (criterion == util::IComparable::Criterion::STRICT) { return IdentifiedObject::_isEquivalentTo(other, criterion, dbContext); } if (IdentifiedObject::_isEquivalentTo(other, criterion, dbContext)) { return true; } auto l_epsgCode = getEPSGCode(); return l_epsgCode != 0 && l_epsgCode == otherOP->getEPSGCode(); } //! @endcond // --------------------------------------------------------------------------- void OperationParameter::_exportToWKT(io::WKTFormatter *) const {} // --------------------------------------------------------------------------- /** \brief Return the name of a parameter designed by its EPSG code * @return name, or nullptr if not found */ const char *OperationParameter::getNameForEPSGCode(int epsg_code) noexcept { size_t nParamNameCodes = 0; const auto paramNameCodes = getParamNameCodes(nParamNameCodes); for (size_t i = 0; i < nParamNameCodes; ++i) { const auto &tuple = paramNameCodes[i]; if (tuple.epsg_code == epsg_code) { return tuple.name; } } return nullptr; } // --------------------------------------------------------------------------- /** \brief Return the EPSG code, either directly, or through the name * @return code, or 0 if not found */ int OperationParameter::getEPSGCode() PROJ_PURE_DEFN { int epsg_code = IdentifiedObject::getEPSGCode(); if (epsg_code == 0) { const auto &l_name = nameStr(); size_t nParamNameCodes = 0; const auto paramNameCodes = getParamNameCodes(nParamNameCodes); for (size_t i = 0; i < nParamNameCodes; ++i) { const auto &tuple = paramNameCodes[i]; if (metadata::Identifier::isEquivalentName(l_name.c_str(), tuple.name)) { return tuple.epsg_code; } } if (metadata::Identifier::isEquivalentName(l_name.c_str(), "Latitude of origin")) { return EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN; } if (metadata::Identifier::isEquivalentName(l_name.c_str(), "Scale factor")) { return EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN; } } return epsg_code; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct SingleOperation::Private { std::vector parameterValues_{}; OperationMethodNNPtr method_; explicit Private(const OperationMethodNNPtr &methodIn) : method_(methodIn) {} }; //! @endcond // --------------------------------------------------------------------------- SingleOperation::SingleOperation(const OperationMethodNNPtr &methodIn) : d(std::make_unique(methodIn)) { const int methodEPSGCode = d->method_->getEPSGCode(); const auto &methodName = d->method_->nameStr(); setRequiresPerCoordinateInputTime( isTimeDependent(methodName) || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D); } // --------------------------------------------------------------------------- SingleOperation::SingleOperation(const SingleOperation &other) : #if !defined(COMPILER_WARNS_ABOUT_ABSTRACT_VBASE_INIT) CoordinateOperation(other), #endif d(std::make_unique(*other.d)) { } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress SingleOperation::~SingleOperation() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Return the parameter values. * * @return the parameter values. */ const std::vector & SingleOperation::parameterValues() PROJ_PURE_DEFN { return d->parameterValues_; } // --------------------------------------------------------------------------- /** \brief Return the operation method associated to the operation. * * @return the operation method. */ const OperationMethodNNPtr &SingleOperation::method() PROJ_PURE_DEFN { return d->method_; } // --------------------------------------------------------------------------- void SingleOperation::setParameterValues( const std::vector &values) { d->parameterValues_ = values; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const ParameterValuePtr nullParameterValue; //! @endcond /** \brief Return the parameter value corresponding to a parameter name or * EPSG code * * @param paramName the parameter name (or empty, in which case epsg_code * should be non zero) * @param epsg_code the parameter EPSG code (possibly zero) * @return the value, or nullptr if not found. */ const ParameterValuePtr & SingleOperation::parameterValue(const std::string ¶mName, int epsg_code) const noexcept { if (epsg_code) { for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meter = opParamvalue->parameter(); if (parameter->getEPSGCode() == epsg_code) { return opParamvalue->parameterValue(); } } } } for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meter = opParamvalue->parameter(); if (metadata::Identifier::isEquivalentName( paramName.c_str(), parameter->nameStr().c_str())) { return opParamvalue->parameterValue(); } } } for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meter = opParamvalue->parameter(); if (areEquivalentParameters(paramName, parameter->nameStr())) { return opParamvalue->parameterValue(); } } } return nullParameterValue; } // --------------------------------------------------------------------------- /** \brief Return the parameter value corresponding to a EPSG code * * @param epsg_code the parameter EPSG code * @return the value, or nullptr if not found. */ const ParameterValuePtr & SingleOperation::parameterValue(int epsg_code) const noexcept { for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meter = opParamvalue->parameter(); if (parameter->getEPSGCode() == epsg_code) { return opParamvalue->parameterValue(); } } } return nullParameterValue; } // --------------------------------------------------------------------------- /** \brief Return the parameter value, as a measure, corresponding to a * parameter name or EPSG code * * @param paramName the parameter name (or empty, in which case epsg_code * should be non zero) * @param epsg_code the parameter EPSG code (possibly zero) * @return the measure, or the empty Measure() object if not found. */ const common::Measure & SingleOperation::parameterValueMeasure(const std::string ¶mName, int epsg_code) const noexcept { const auto &val = parameterValue(paramName, epsg_code); if (val && val->type() == ParameterValue::Type::MEASURE) { return val->value(); } return nullMeasure; } /** \brief Return the parameter value, as a measure, corresponding to a * EPSG code * * @param epsg_code the parameter EPSG code * @return the measure, or the empty Measure() object if not found. */ const common::Measure & SingleOperation::parameterValueMeasure(int epsg_code) const noexcept { const auto &val = parameterValue(epsg_code); if (val && val->type() == ParameterValue::Type::MEASURE) { return val->value(); } return nullMeasure; } //! @cond Doxygen_Suppress double SingleOperation::parameterValueNumericAsSI(int epsg_code) const noexcept { const auto &val = parameterValue(epsg_code); if (val && val->type() == ParameterValue::Type::MEASURE) { return val->value().getSIValue(); } return 0.0; } double SingleOperation::parameterValueNumeric( int epsg_code, const common::UnitOfMeasure &targetUnit) const noexcept { const auto &val = parameterValue(epsg_code); if (val && val->type() == ParameterValue::Type::MEASURE) { return val->value().convertToUnit(targetUnit); } return 0.0; } double SingleOperation::parameterValueNumeric( const char *param_name, const common::UnitOfMeasure &targetUnit) const noexcept { const auto &val = parameterValue(param_name, 0); if (val && val->type() == ParameterValue::Type::MEASURE) { return val->value().convertToUnit(targetUnit); } return 0.0; } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a PROJ-based single operation. * * \note The operation might internally be a pipeline chaining several * operations. * The use of the SingleOperation modeling here is mostly to be able to get * the PROJ string as a parameter. * * @param properties Properties * @param PROJString the PROJ string. * @param sourceCRS source CRS (might be null). * @param targetCRS target CRS (might be null). * @param accuracies Vector of positional accuracy (might be empty). * @return the new instance */ SingleOperationNNPtr SingleOperation::createPROJBased( const util::PropertyMap &properties, const std::string &PROJString, const crs::CRSPtr &sourceCRS, const crs::CRSPtr &targetCRS, const std::vector &accuracies) { return util::nn_static_pointer_cast( PROJBasedOperation::create(properties, PROJString, sourceCRS, targetCRS, accuracies)); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool SingleOperation::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { return _isEquivalentTo(other, criterion, dbContext, false); } bool SingleOperation::_isEquivalentTo(const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext, bool inOtherDirection) const { auto otherSO = dynamic_cast(other); if (otherSO == nullptr || (criterion == util::IComparable::Criterion::STRICT && !ObjectUsage::_isEquivalentTo(other, criterion, dbContext))) { return false; } const int methodEPSGCode = d->method_->getEPSGCode(); const int otherMethodEPSGCode = otherSO->d->method_->getEPSGCode(); bool equivalentMethods = (criterion == util::IComparable::Criterion::EQUIVALENT && methodEPSGCode != 0 && methodEPSGCode == otherMethodEPSGCode) || d->method_->_isEquivalentTo(otherSO->d->method_.get(), criterion, dbContext); if (!equivalentMethods && criterion == util::IComparable::Criterion::EQUIVALENT) { if ((methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA && otherMethodEPSGCode == EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL) || (otherMethodEPSGCode == EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA && methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL) || (methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA && otherMethodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL) || (otherMethodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA && methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL) || (methodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL && otherMethodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL) || (otherMethodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL && methodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL)) { auto geodCRS = dynamic_cast(sourceCRS().get()); auto otherGeodCRS = dynamic_cast( otherSO->sourceCRS().get()); if (geodCRS && otherGeodCRS && geodCRS->ellipsoid()->isSphere() && otherGeodCRS->ellipsoid()->isSphere()) { equivalentMethods = true; } } } if (!equivalentMethods) { if (criterion == util::IComparable::Criterion::EQUIVALENT) { const auto isTOWGS84Transf = [](int code) { return code == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC || code == EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC || code == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC || code == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D || code == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D || code == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D || code == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D || code == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D || code == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D; }; // Translation vs (PV or CF) // or different PV vs CF convention if (isTOWGS84Transf(methodEPSGCode) && isTOWGS84Transf(otherMethodEPSGCode)) { auto transf = static_cast(this); auto otherTransf = static_cast(otherSO); auto params = transf->getTOWGS84Parameters(true); auto otherParams = otherTransf->getTOWGS84Parameters(true); assert(params.size() == 7); assert(otherParams.size() == 7); for (size_t i = 0; i < 7; i++) { if (std::fabs(params[i] - otherParams[i]) > 1e-10 * std::fabs(params[i])) { return false; } } return true; } // _1SP methods can sometimes be equivalent to _2SP ones // Check it by using convertToOtherMethod() if (methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP && otherMethodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP) { // Convert from 2SP to 1SP as the other direction has more // degree of liberties. return otherSO->_isEquivalentTo(this, criterion, dbContext); } else if ((methodEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_A && otherMethodEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_B) || (methodEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_B && otherMethodEPSGCode == EPSG_CODE_METHOD_MERCATOR_VARIANT_A) || (methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP && otherMethodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP)) { auto conv = dynamic_cast(this); if (conv) { auto eqConv = conv->convertToOtherMethod(otherMethodEPSGCode); if (eqConv) { return eqConv->_isEquivalentTo(other, criterion, dbContext); } } } } return false; } const auto &values = d->parameterValues_; const auto &otherValues = otherSO->d->parameterValues_; const auto valuesSize = values.size(); const auto otherValuesSize = otherValues.size(); if (criterion == util::IComparable::Criterion::STRICT) { if (valuesSize != otherValuesSize) { return false; } for (size_t i = 0; i < valuesSize; i++) { if (!values[i]->_isEquivalentTo(otherValues[i].get(), criterion, dbContext)) { return false; } } return true; } std::vector candidateIndices(otherValuesSize, true); bool equivalent = true; bool foundMissingArgs = valuesSize != otherValuesSize; for (size_t i = 0; equivalent && i < valuesSize; i++) { auto opParamvalue = dynamic_cast(values[i].get()); if (!opParamvalue) return false; equivalent = false; bool sameNameDifferentValue = false; for (size_t j = 0; j < otherValuesSize; j++) { if (candidateIndices[j] && values[i]->_isEquivalentTo(otherValues[j].get(), criterion, dbContext)) { candidateIndices[j] = false; equivalent = true; break; } else if (candidateIndices[j]) { auto otherOpParamvalue = dynamic_cast( otherValues[j].get()); if (!otherOpParamvalue) return false; sameNameDifferentValue = opParamvalue->parameter()->_isEquivalentTo( otherOpParamvalue->parameter().get(), criterion, dbContext); if (sameNameDifferentValue) { candidateIndices[j] = false; break; } } } if (!equivalent && methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP) { // For LCC_2SP, the standard parallels can be switched and // this will result in the same result. const int paramEPSGCode = opParamvalue->parameter()->getEPSGCode(); if (paramEPSGCode == EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL || paramEPSGCode == EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL) { auto value_1st = parameterValue( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL); auto value_2nd = parameterValue( EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL); if (value_1st && value_2nd) { equivalent = value_1st->_isEquivalentTo( otherSO ->parameterValue( EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL) .get(), criterion, dbContext) && value_2nd->_isEquivalentTo( otherSO ->parameterValue( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL) .get(), criterion, dbContext); } } } if (equivalent) { continue; } if (sameNameDifferentValue) { break; } // If there are parameters in this method not found in the other one, // check that they are set to a default neutral value, that is 1 // for scale, and 0 otherwise. foundMissingArgs = true; const auto &value = opParamvalue->parameterValue(); if (value->type() != ParameterValue::Type::MEASURE) { break; } if (value->value().unit().type() == common::UnitOfMeasure::Type::SCALE) { equivalent = value->value().getSIValue() == 1.0; } else { equivalent = value->value().getSIValue() == 0.0; } } // In the case the arguments don't perfectly match, try the reverse // check. if (equivalent && foundMissingArgs && !inOtherDirection) { return otherSO->_isEquivalentTo(this, criterion, dbContext, true); } // Equivalent formulations of 2SP can have different parameters // Then convert to 1SP and compare. if (!equivalent && methodEPSGCode == EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP) { auto conv = dynamic_cast(this); auto otherConv = dynamic_cast(other); if (conv && otherConv) { auto thisAs1SP = conv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); auto otherAs1SP = otherConv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); if (thisAs1SP && otherAs1SP) { equivalent = thisAs1SP->_isEquivalentTo(otherAs1SP.get(), criterion, dbContext); } } } return equivalent; } //! @endcond // --------------------------------------------------------------------------- std::set SingleOperation::gridsNeeded(const io::DatabaseContextPtr &databaseContext, bool considerKnownGridsAsAvailable) const { std::set res; for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto &value = opParamvalue->parameterValue(); if (value->type() == ParameterValue::Type::FILENAME) { const auto gridNames = split(value->valueFile(), ","); for (const auto &gridName : gridNames) { GridDescription desc; desc.shortName = gridName; if (databaseContext) { databaseContext->lookForGridInfo( desc.shortName, considerKnownGridsAsAvailable, desc.fullName, desc.packageName, desc.url, desc.directDownload, desc.openLicense, desc.available); } res.insert(std::move(desc)); } } } } return res; } // --------------------------------------------------------------------------- /** \brief Validate the parameters used by a coordinate operation. * * Return whether the method is known or not, or a list of missing or extra * parameters for the operations recognized by this implementation. */ std::list SingleOperation::validateParameters() const { std::list res; const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const auto methodEPSGCode = l_method->getEPSGCode(); const auto findMapping = [methodEPSGCode, &methodName]( const MethodMapping *mappings, size_t mappingCount) -> const MethodMapping * { if (methodEPSGCode != 0) { for (size_t i = 0; i < mappingCount; ++i) { const auto &mapping = mappings[i]; if (methodEPSGCode == mapping.epsg_code) { return &mapping; } } } for (size_t i = 0; i < mappingCount; ++i) { const auto &mapping = mappings[i]; if (metadata::Identifier::isEquivalentName(mapping.wkt2_name, methodName.c_str())) { return &mapping; } } return nullptr; }; size_t nProjectionMethodMappings = 0; const auto projectionMethodMappings = getProjectionMethodMappings(nProjectionMethodMappings); const MethodMapping *methodMapping = findMapping(projectionMethodMappings, nProjectionMethodMappings); if (methodMapping == nullptr) { size_t nOtherMethodMappings = 0; const auto otherMethodMappings = getOtherMethodMappings(nOtherMethodMappings); methodMapping = findMapping(otherMethodMappings, nOtherMethodMappings); } if (!methodMapping) { res.emplace_back("Unknown method " + methodName); return res; } if (methodMapping->wkt2_name != methodName) { if (metadata::Identifier::isEquivalentName(methodMapping->wkt2_name, methodName.c_str())) { std::string msg("Method name "); msg += methodName; msg += " is equivalent to official "; msg += methodMapping->wkt2_name; msg += " but not strictly equal"; res.emplace_back(msg); } else { std::string msg("Method name "); msg += methodName; msg += ", matched to "; msg += methodMapping->wkt2_name; msg += ", through its EPSG code has not an equivalent name"; res.emplace_back(msg); } } if (methodEPSGCode != 0 && methodEPSGCode != methodMapping->epsg_code) { std::string msg("Method of EPSG code "); msg += toString(methodEPSGCode); msg += " does not match official code ("; msg += toString(methodMapping->epsg_code); msg += ')'; res.emplace_back(msg); } // Check if expected parameters are found for (int i = 0; methodMapping->params && methodMapping->params[i] != nullptr; ++i) { const auto *paramMapping = methodMapping->params[i]; const OperationParameterValue *opv = nullptr; for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meter = opParamvalue->parameter(); if ((paramMapping->epsg_code != 0 && parameter->getEPSGCode() == paramMapping->epsg_code) || ci_equal(parameter->nameStr(), paramMapping->wkt2_name)) { opv = opParamvalue; break; } } } if (!opv) { if ((methodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL || methodEPSGCode == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL) && paramMapping == ¶mLatitudeNatOrigin) { // extension of EPSG used by GDAL/PROJ, so we should not // warn on its absence. continue; } std::string msg("Cannot find expected parameter "); msg += paramMapping->wkt2_name; res.emplace_back(msg); continue; } const auto ¶meter = opv->parameter(); if (paramMapping->wkt2_name != parameter->nameStr()) { if (ci_equal(parameter->nameStr(), paramMapping->wkt2_name)) { std::string msg("Parameter name "); msg += parameter->nameStr(); msg += " is equivalent to official "; msg += paramMapping->wkt2_name; msg += " but not strictly equal"; res.emplace_back(msg); } else { std::string msg("Parameter name "); msg += parameter->nameStr(); msg += ", matched to "; msg += paramMapping->wkt2_name; msg += ", through its EPSG code has not an equivalent name"; res.emplace_back(msg); } } const auto paramEPSGCode = parameter->getEPSGCode(); if (paramEPSGCode != 0 && paramEPSGCode != paramMapping->epsg_code) { std::string msg("Parameter of EPSG code "); msg += toString(paramEPSGCode); msg += " does not match official code ("; msg += toString(paramMapping->epsg_code); msg += ')'; res.emplace_back(msg); } } // Check if there are extra parameters for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meter = opParamvalue->parameter(); if (!getMapping(methodMapping, parameter)) { std::string msg("Parameter "); msg += parameter->nameStr(); msg += " found but not expected for this method"; res.emplace_back(msg); } } } return res; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool SingleOperation::isLongitudeRotation() const { return method()->getEPSGCode() == EPSG_CODE_METHOD_LONGITUDE_ROTATION; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string nullString; static const std::string &_getNTv1Filename(const SingleOperation *op, bool allowInverse) { const auto &l_method = op->method(); const auto &methodName = l_method->nameStr(); if (l_method->getEPSGCode() == EPSG_CODE_METHOD_NTV1 || (allowInverse && ci_equal(methodName, INVERSE_OF + EPSG_NAME_METHOD_NTV1))) { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } // static const std::string &_getNTv2Filename(const SingleOperation *op, bool allowInverse) { const auto &l_method = op->method(); if (l_method->getEPSGCode() == EPSG_CODE_METHOD_NTV2 || (allowInverse && ci_equal(l_method->nameStr(), INVERSE_OF + EPSG_NAME_METHOD_NTV2))) { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const std::string &Transformation::getPROJ4NadgridsCompatibleFilename() const { const std::string &filename = _getNTv2Filename(this, false); if (!filename.empty()) { return filename; } if (method()->getEPSGCode() == EPSG_CODE_METHOD_NADCON) { const auto &latitudeFileParameter = parameterValue(EPSG_NAME_PARAMETER_LATITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_DIFFERENCE_FILE); const auto &longitudeFileParameter = parameterValue(EPSG_NAME_PARAMETER_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LONGITUDE_DIFFERENCE_FILE); if (latitudeFileParameter && latitudeFileParameter->type() == ParameterValue::Type::FILENAME && longitudeFileParameter && longitudeFileParameter->type() == ParameterValue::Type::FILENAME) { return latitudeFileParameter->valueFile(); } } if (ci_equal(method()->nameStr(), PROJ_WKT2_NAME_METHOD_HORIZONTAL_SHIFT_GTIFF)) { const auto &fileParameter = parameterValue( EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string &_getCTABLE2Filename(const SingleOperation *op, bool allowInverse) { const auto &l_method = op->method(); const auto &methodName = l_method->nameStr(); if (ci_equal(methodName, PROJ_WKT2_NAME_METHOD_CTABLE2) || (allowInverse && ci_equal(methodName, INVERSE_OF + PROJ_WKT2_NAME_METHOD_CTABLE2))) { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string & _getHorizontalShiftGTIFFFilename(const SingleOperation *op, bool allowInverse) { const auto &l_method = op->method(); const auto &methodName = l_method->nameStr(); if (ci_equal(methodName, PROJ_WKT2_NAME_METHOD_HORIZONTAL_SHIFT_GTIFF) || ci_equal(methodName, PROJ_WKT2_NAME_METHOD_GENERAL_SHIFT_GTIFF) || (allowInverse && ci_equal(methodName, INVERSE_OF + PROJ_WKT2_NAME_METHOD_HORIZONTAL_SHIFT_GTIFF)) || (allowInverse && ci_equal(methodName, INVERSE_OF + PROJ_WKT2_NAME_METHOD_GENERAL_SHIFT_GTIFF))) { { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } { const auto &fileParameter = op->parameterValue( PROJ_WKT2_PARAMETER_LATITUDE_LONGITUDE_ELLIPOISDAL_HEIGHT_DIFFERENCE_FILE, 0); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string & _getGeocentricTranslationFilename(const SingleOperation *op, bool allowInverse) { const auto &l_method = op->method(); const auto &methodName = l_method->nameStr(); if (l_method->getEPSGCode() == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN || (allowInverse && ci_equal( methodName, INVERSE_OF + EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN))) { const auto &fileParameter = op->parameterValue(EPSG_NAME_PARAMETER_GEOCENTRIC_TRANSLATION_FILE, EPSG_CODE_PARAMETER_GEOCENTRIC_TRANSLATION_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string & _getGeographic3DOffsetByVelocityGridFilename(const SingleOperation *op, bool allowInverse) { const auto &l_method = op->method(); const auto &methodName = l_method->nameStr(); if (l_method->getEPSGCode() == EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL || (allowInverse && ci_equal( methodName, INVERSE_OF + EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL))) { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string & _getVerticalOffsetByVelocityGridFilename(const SingleOperation *op, bool allowInverse) { const auto &l_method = op->method(); const auto &methodName = l_method->nameStr(); if (l_method->getEPSGCode() == EPSG_CODE_METHOD_VERTICAL_OFFSET_BY_VELOCITY_GRID_NRCAN || (allowInverse && ci_equal( methodName, INVERSE_OF + EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL))) { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static const std::string & _getHeightToGeographic3DFilename(const SingleOperation *op, bool allowInverse) { const auto &methodName = op->method()->nameStr(); if (ci_equal(methodName, PROJ_WKT2_NAME_METHOD_HEIGHT_TO_GEOG3D) || (allowInverse && ci_equal(methodName, INVERSE_OF + PROJ_WKT2_NAME_METHOD_HEIGHT_TO_GEOG3D))) { const auto &fileParameter = op->parameterValue(EPSG_NAME_PARAMETER_GEOID_CORRECTION_FILENAME, EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool Transformation::isGeographic3DToGravityRelatedHeight( const OperationMethodNNPtr &method, bool allowInverse) { const auto &methodName = method->nameStr(); static const char *const methodCodes[] = { "1025", // Geographic3D to GravityRelatedHeight (EGM2008) "1030", // Geographic3D to GravityRelatedHeight (NZgeoid) "1045", // Geographic3D to GravityRelatedHeight (OSGM02-Ire) "1047", // Geographic3D to GravityRelatedHeight (Gravsoft) "1048", // Geographic3D to GravityRelatedHeight (Ausgeoid v2) "1050", // Geographic3D to GravityRelatedHeight (CI) "1059", // Geographic3D to GravityRelatedHeight (PNG) "1088", // Geog3D to Geog2D+GravityRelatedHeight (gtx) "1060", // Geographic3D to GravityRelatedHeight (CGG2013) "1072", // Geographic3D to GravityRelatedHeight (OSGM15-Ire) "1073", // Geographic3D to GravityRelatedHeight (IGN2009) "1081", // Geographic3D to GravityRelatedHeight (BEV AT) "1083", // Geog3D to Geog2D+Vertical (AUSGeoid v2) "1089", // Geog3D to Geog2D+GravityRelatedHeight (BEV AT) "1090", // Geog3D to Geog2D+GravityRelatedHeight (CGG 2013) "1091", // Geog3D to Geog2D+GravityRelatedHeight (CI) "1092", // Geog3D to Geog2D+GravityRelatedHeight (EGM2008) "1093", // Geog3D to Geog2D+GravityRelatedHeight (Gravsoft) "1094", // Geog3D to Geog2D+GravityRelatedHeight (IGN1997) "1095", // Geog3D to Geog2D+GravityRelatedHeight (IGN2009) "1096", // Geog3D to Geog2D+GravityRelatedHeight (OSGM15-Ire) "1097", // Geog3D to Geog2D+GravityRelatedHeight (OSGM-GB) "1098", // Geog3D to Geog2D+GravityRelatedHeight (SA 2010) "1100", // Geog3D to Geog2D+GravityRelatedHeight (PL txt) "1103", // Geog3D to Geog2D+GravityRelatedHeight (EGM) "1105", // Geog3D to Geog2D+GravityRelatedHeight (ITAL2005) "1109", // Geographic3D to Depth (Gravsoft) "1110", // Geog3D to Geog2D+Depth (Gravsoft) "1115", // Geog3D to Geog2D+Depth (txt) "1118", // Geog3D to Geog2D+GravityRelatedHeight (ISG) "1122", // Geog3D to Geog2D+Depth (gtx) "1124", // Geog3D to Geog2D+GravityRelatedHeight (gtg) "1126", // Vertical change by geoid grid difference (NRCan) "1127", // Geographic3D to Depth (gtg) "1128", // Geog3D to Geog2D+Depth (gtg) "1135", // Geog3D to Geog2D+GravityRelatedHeight (NGS bin) "9661", // Geographic3D to GravityRelatedHeight (EGM) "9662", // Geographic3D to GravityRelatedHeight (Ausgeoid98) "9663", // Geographic3D to GravityRelatedHeight (OSGM-GB) "9664", // Geographic3D to GravityRelatedHeight (IGN1997) "9665", // Geographic3D to GravityRelatedHeight (US .gtx) "9635", // Geog3D to Geog2D+GravityRelatedHeight (US .gtx) }; if (ci_find(methodName, "Geographic3D to GravityRelatedHeight") == 0) { return true; } if (allowInverse && ci_find(methodName, INVERSE_OF + "Geographic3D to GravityRelatedHeight") == 0) { return true; } for (const auto &code : methodCodes) { for (const auto &idSrc : method->identifiers()) { const auto &srcAuthName = *(idSrc->codeSpace()); const auto &srcCode = idSrc->code(); if (ci_equal(srcAuthName, "EPSG") && srcCode == code) { return true; } if (allowInverse && ci_equal(srcAuthName, "INVERSE(EPSG)") && srcCode == code) { return true; } } } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const std::string &Transformation::getHeightToGeographic3DFilename() const { const std::string &ret = _getHeightToGeographic3DFilename(this, false); if (!ret.empty()) return ret; if (isGeographic3DToGravityRelatedHeight(method(), false)) { const auto &fileParameter = parameterValue(EPSG_NAME_PARAMETER_GEOID_CORRECTION_FILENAME, EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { return fileParameter->valueFile(); } } return nullString; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static util::PropertyMap createSimilarPropertiesOperation(const CoordinateOperationNNPtr &obj) { util::PropertyMap map; // The domain(s) are unchanged addDomains(map, obj.get()); const std::string &forwardName = obj->nameStr(); if (!forwardName.empty()) { map.set(common::IdentifiedObject::NAME_KEY, forwardName); } const std::string &remarks = obj->remarks(); if (!remarks.empty()) { map.set(common::IdentifiedObject::REMARKS_KEY, remarks); } addModifiedIdentifier(map, obj.get(), false, true); return map; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static TransformationNNPtr createNTv1(const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const std::string &filename, const std::vector &accuracies) { const VectorOfParameters parameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE)}; const VectorOfValues values{ParameterValue::createFilename(filename)}; return Transformation::create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_NTV1), parameters, values, accuracies); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static util::PropertyMap createSimilarPropertiesMethod(common::IdentifiedObjectNNPtr obj) { util::PropertyMap map; const std::string &forwardName = obj->nameStr(); if (!forwardName.empty()) { map.set(common::IdentifiedObject::NAME_KEY, forwardName); } { auto ar = util::ArrayOfBaseObject::create(); for (const auto &idSrc : obj->identifiers()) { const auto &srcAuthName = *(idSrc->codeSpace()); const auto &srcCode = idSrc->code(); auto idsProp = util::PropertyMap().set( metadata::Identifier::CODESPACE_KEY, srcAuthName); ar->add(metadata::Identifier::create(srcCode, idsProp)); } if (!ar->empty()) { map.set(common::IdentifiedObject::IDENTIFIERS_KEY, ar); } } return map; } //! @endcond // --------------------------------------------------------------------------- static bool isRegularVerticalGridMethod(int methodEPSGCode, bool &reverseOffsetSign) { if (methodEPSGCode == EPSG_CODE_METHOD_VERTICALGRID_NRCAN_BYN || methodEPSGCode == EPSG_CODE_METHOD_VERTICALCHANGE_BY_GEOID_GRID_DIFFERENCE_NRCAN) { // NRCAN vertical shift grids use a reverse convention from other // grids: the value in the grid is the value to subtract from the // source vertical CRS to get the target value. reverseOffsetSign = true; return true; } reverseOffsetSign = false; return methodEPSGCode == EPSG_CODE_METHOD_VERTICALGRID_NZLVD || methodEPSGCode == EPSG_CODE_METHOD_VERTICALGRID_BEV_AT || methodEPSGCode == EPSG_CODE_METHOD_VERTICALGRID_GTX || methodEPSGCode == EPSG_CODE_METHOD_VERTICALGRID_ASC || methodEPSGCode == EPSG_CODE_METHOD_VERTICALGRID_GTG || methodEPSGCode == EPSG_CODE_METHOD_VERTICALGRID_PL_TXT; } // --------------------------------------------------------------------------- /** \brief Return an equivalent transformation to the current one, but using * PROJ alternative grid names. */ TransformationNNPtr SingleOperation::substitutePROJAlternativeGridNames( io::DatabaseContextNNPtr databaseContext) const { auto self = NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); const auto &l_method = method(); const int methodEPSGCode = l_method->getEPSGCode(); std::string projFilename; std::string projGridFormat; bool inverseDirection = false; const auto &NTv1Filename = _getNTv1Filename(this, false); const auto &NTv2Filename = _getNTv2Filename(this, false); std::string lasFilename; if (methodEPSGCode == EPSG_CODE_METHOD_NADCON || methodEPSGCode == EPSG_CODE_METHOD_NADCON5_2D || methodEPSGCode == EPSG_CODE_METHOD_NADCON5_3D) { const auto &latitudeFileParameter = parameterValue(EPSG_NAME_PARAMETER_LATITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_DIFFERENCE_FILE); const auto &longitudeFileParameter = parameterValue(EPSG_NAME_PARAMETER_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LONGITUDE_DIFFERENCE_FILE); if (latitudeFileParameter && latitudeFileParameter->type() == ParameterValue::Type::FILENAME && longitudeFileParameter && longitudeFileParameter->type() == ParameterValue::Type::FILENAME) { lasFilename = latitudeFileParameter->valueFile(); } } const auto &horizontalGridName = !NTv1Filename.empty() ? NTv1Filename : !NTv2Filename.empty() ? NTv2Filename : lasFilename; const auto l_interpolationCRS = interpolationCRS(); if (!horizontalGridName.empty() && databaseContext->lookForGridAlternative( horizontalGridName, projFilename, projGridFormat, inverseDirection)) { if (horizontalGridName == projFilename) { if (inverseDirection) { throw util::UnsupportedOperationException( "Inverse direction for " + projFilename + " not supported"); } return self; } const auto l_sourceCRSNull = sourceCRS(); const auto l_targetCRSNull = targetCRS(); if (l_sourceCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing sourceCRS"); } if (l_targetCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing targetCRS"); } auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); const auto &l_accuracies = coordinateOperationAccuracies(); if (projGridFormat == "GTiff") { const VectorOfParameters parameters{ methodEPSGCode == EPSG_CODE_METHOD_NADCON5_3D ? OperationParameter::create(util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, PROJ_WKT2_PARAMETER_LATITUDE_LONGITUDE_ELLIPOISDAL_HEIGHT_DIFFERENCE_FILE)) : createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE)}; auto methodProperties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, (methodEPSGCode == EPSG_CODE_METHOD_NADCON5_2D || methodEPSGCode == EPSG_CODE_METHOD_NADCON5_3D) ? PROJ_WKT2_NAME_METHOD_GENERAL_SHIFT_GTIFF : PROJ_WKT2_NAME_METHOD_HORIZONTAL_SHIFT_GTIFF); const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; if (inverseDirection) { return Transformation::create( createPropertiesForInverse(self.as_nullable().get(), true, false), l_targetCRS, l_sourceCRS, l_interpolationCRS, methodProperties, parameters, values, l_accuracies) ->inverseAsTransformation(); } else { return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, methodProperties, parameters, values, l_accuracies); } } else if (projGridFormat == "NTv1") { if (inverseDirection) { return createNTv1(createPropertiesForInverse( self.as_nullable().get(), true, false), l_targetCRS, l_sourceCRS, projFilename, l_accuracies) ->inverseAsTransformation(); } else { return createNTv1(createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, projFilename, l_accuracies); } } else if (projGridFormat == "NTv2") { if (inverseDirection) { return Transformation::createNTv2( createPropertiesForInverse(self.as_nullable().get(), true, false), l_targetCRS, l_sourceCRS, projFilename, l_accuracies) ->inverseAsTransformation(); } else { return Transformation::createNTv2( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, projFilename, l_accuracies); } } else if (projGridFormat == "CTable2") { const VectorOfParameters parameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE)}; auto methodProperties = util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, PROJ_WKT2_NAME_METHOD_CTABLE2); const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; if (inverseDirection) { return Transformation::create( createPropertiesForInverse(self.as_nullable().get(), true, false), l_targetCRS, l_sourceCRS, l_interpolationCRS, methodProperties, parameters, values, l_accuracies) ->inverseAsTransformation(); } else { return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, methodProperties, parameters, values, l_accuracies); } } } if (Transformation::isGeographic3DToGravityRelatedHeight(method(), false)) { const auto &fileParameter = parameterValue(EPSG_NAME_PARAMETER_GEOID_CORRECTION_FILENAME, EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { const auto &filename = fileParameter->valueFile(); if (databaseContext->lookForGridAlternative( filename, projFilename, projGridFormat, inverseDirection)) { if (inverseDirection) { throw util::UnsupportedOperationException( "Inverse direction for " "Geographic3DToGravityRelatedHeight not supported"); } if (filename == projFilename) { return self; } const auto l_sourceCRSNull = sourceCRS(); const auto l_targetCRSNull = targetCRS(); if (l_sourceCRSNull == nullptr) { throw util::UnsupportedOperationException( "Missing sourceCRS"); } if (l_targetCRSNull == nullptr) { throw util::UnsupportedOperationException( "Missing targetCRS"); } auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); const VectorOfParameters parameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME)}; const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; #ifdef disabled_for_now if (inverseDirection) { return Transformation::create( createPropertiesForInverse( self.as_nullable().get(), true, false), l_targetCRS, l_sourceCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()) ->inverseAsTransformation(); } else #endif { return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()); } } } } const auto &geocentricTranslationFilename = _getGeocentricTranslationFilename(this, false); if (!geocentricTranslationFilename.empty()) { if (databaseContext->lookForGridAlternative( geocentricTranslationFilename, projFilename, projGridFormat, inverseDirection)) { if (inverseDirection) { throw util::UnsupportedOperationException( "Inverse direction for " "GeocentricTranslation not supported"); } if (geocentricTranslationFilename == projFilename) { return self; } const auto l_sourceCRSNull = sourceCRS(); const auto l_targetCRSNull = targetCRS(); if (l_sourceCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing sourceCRS"); } if (l_targetCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing targetCRS"); } auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); const VectorOfParameters parameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_GEOCENTRIC_TRANSLATION_FILE)}; const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()); } } const auto &geographic3DOffsetByVelocityGridFilename = _getGeographic3DOffsetByVelocityGridFilename(this, false); if (!geographic3DOffsetByVelocityGridFilename.empty()) { if (databaseContext->lookForGridAlternative( geographic3DOffsetByVelocityGridFilename, projFilename, projGridFormat, inverseDirection)) { if (inverseDirection) { throw util::UnsupportedOperationException( "Inverse direction for " "Geographic3DOFffsetByVelocityGrid not supported"); } if (geographic3DOffsetByVelocityGridFilename == projFilename) { return self; } const auto l_sourceCRSNull = sourceCRS(); const auto l_targetCRSNull = targetCRS(); if (l_sourceCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing sourceCRS"); } if (l_targetCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing targetCRS"); } auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); const VectorOfParameters parameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE)}; const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()); } } const auto &verticalOffsetByVelocityGridFilename = _getVerticalOffsetByVelocityGridFilename(this, false); if (!verticalOffsetByVelocityGridFilename.empty()) { if (databaseContext->lookForGridAlternative( verticalOffsetByVelocityGridFilename, projFilename, projGridFormat, inverseDirection)) { if (inverseDirection) { throw util::UnsupportedOperationException( "Inverse direction for " "VerticalOffsetByVelocityGrid not supported"); } if (verticalOffsetByVelocityGridFilename == projFilename) { return self; } const auto l_sourceCRSNull = sourceCRS(); const auto l_targetCRSNull = targetCRS(); if (l_sourceCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing sourceCRS"); } if (l_targetCRSNull == nullptr) { throw util::UnsupportedOperationException("Missing targetCRS"); } auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); const VectorOfParameters parameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE)}; const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()); } } bool reverseOffsetSign = false; if (methodEPSGCode == EPSG_CODE_METHOD_VERTCON || isRegularVerticalGridMethod(methodEPSGCode, reverseOffsetSign)) { int parameterCode = EPSG_CODE_PARAMETER_VERTICAL_OFFSET_FILE; auto fileParameter = parameterValue( EPSG_NAME_PARAMETER_VERTICAL_OFFSET_FILE, parameterCode); if (!fileParameter) { parameterCode = EPSG_CODE_PARAMETER_GEOID_MODEL_DIFFERENCE_FILE; fileParameter = parameterValue( EPSG_NAME_PARAMETER_GEOID_MODEL_DIFFERENCE_FILE, parameterCode); } if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { const auto &filename = fileParameter->valueFile(); if (databaseContext->lookForGridAlternative( filename, projFilename, projGridFormat, inverseDirection)) { if (filename == projFilename) { if (inverseDirection) { throw util::UnsupportedOperationException( "Inverse direction for " + projFilename + " not supported"); } return self; } const auto l_sourceCRSNull = sourceCRS(); const auto l_targetCRSNull = targetCRS(); if (l_sourceCRSNull == nullptr) { throw util::UnsupportedOperationException( "Missing sourceCRS"); } if (l_targetCRSNull == nullptr) { throw util::UnsupportedOperationException( "Missing targetCRS"); } auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); const VectorOfParameters parameters{ createOpParamNameEPSGCode(parameterCode)}; const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; if (inverseDirection) { return Transformation::create( createPropertiesForInverse( self.as_nullable().get(), true, false), l_targetCRS, l_sourceCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()) ->inverseAsTransformation(); } else { return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()); } } } } static const struct { int methodEPSGCode; int gridFilenameParamEPSGCode; const char *gridFilenameParamName; } gridTransformations[] = { {EPSG_CODE_METHOD_NEW_ZEALAND_DEFORMATION_MODEL, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE}, {EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS_BY_TIN_INTERPOLATION_JSON, EPSG_CODE_PARAMETER_TIN_OFFSET_FILE, EPSG_NAME_PARAMETER_TIN_OFFSET_FILE}, {EPSG_CODE_METHOD_VERTICAL_OFFSET_BY_TIN_INTERPOLATION_JSON, EPSG_CODE_PARAMETER_TIN_OFFSET_FILE, EPSG_NAME_PARAMETER_TIN_OFFSET_FILE}, }; for (const auto &gridTransf : gridTransformations) { if (methodEPSGCode == gridTransf.methodEPSGCode) { auto fileParameter = parameterValue(gridTransf.gridFilenameParamName, gridTransf.gridFilenameParamEPSGCode); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { const auto &filename = fileParameter->valueFile(); if (databaseContext->lookForGridAlternative( filename, projFilename, projGridFormat, inverseDirection)) { if (filename == projFilename) { if (inverseDirection) { throw util::UnsupportedOperationException( "Inverse direction for " + projFilename + " not supported"); } return self; } const auto l_sourceCRSNull = sourceCRS(); const auto l_targetCRSNull = targetCRS(); if (l_sourceCRSNull == nullptr) { throw util::UnsupportedOperationException( "Missing sourceCRS"); } if (l_targetCRSNull == nullptr) { throw util::UnsupportedOperationException( "Missing targetCRS"); } auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); const VectorOfParameters parameters{ createOpParamNameEPSGCode( gridTransf.gridFilenameParamEPSGCode)}; const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; if (inverseDirection) { return Transformation::create( createPropertiesForInverse( self.as_nullable().get(), true, false), l_targetCRS, l_sourceCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()) ->inverseAsTransformation(); } else { return Transformation::create( createSimilarPropertiesOperation(self), l_sourceCRS, l_targetCRS, l_interpolationCRS, createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()); } } } break; } } return self; } //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- InvalidOperation::InvalidOperation(const char *message) : Exception(message) {} // --------------------------------------------------------------------------- InvalidOperation::InvalidOperation(const std::string &message) : Exception(message) {} // --------------------------------------------------------------------------- InvalidOperation::InvalidOperation(const InvalidOperation &) = default; // --------------------------------------------------------------------------- InvalidOperation::~InvalidOperation() = default; //! @endcond // --------------------------------------------------------------------------- GeneralParameterValueNNPtr SingleOperation::createOperationParameterValueFromInterpolationCRS( int methodEPSGCode, int crsEPSGCode) { util::PropertyMap propertiesParameter; propertiesParameter.set( common::IdentifiedObject::NAME_KEY, methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE ? EPSG_NAME_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS : EPSG_NAME_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS); propertiesParameter.set( metadata::Identifier::CODE_KEY, methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE ? EPSG_CODE_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS : EPSG_CODE_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS); propertiesParameter.set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG); return OperationParameterValue::create( OperationParameter::create(propertiesParameter), ParameterValue::create(crsEPSGCode)); } // --------------------------------------------------------------------------- void SingleOperation::exportTransformationToWKT( io::WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2; if (!isWKT2) { throw io::FormattingException( "Transformation can only be exported to WKT2"); } if (formatter->abridgedTransformation()) { formatter->startNode(io::WKTConstants::ABRIDGEDTRANSFORMATION, !identifiers().empty()); } else { formatter->startNode(io::WKTConstants::COORDINATEOPERATION, !identifiers().empty()); } formatter->addQuotedString(nameStr()); if (formatter->use2019Keywords()) { const auto &version = operationVersion(); if (version.has_value()) { formatter->startNode(io::WKTConstants::VERSION, false); formatter->addQuotedString(*version); formatter->endNode(); } } if (!formatter->abridgedTransformation()) { exportSourceCRSAndTargetCRSToWKT(this, formatter); } const auto &l_method = method(); l_method->_exportToWKT(formatter); bool hasInterpolationCRSParameter = false; for (const auto ¶mValue : parameterValues()) { const auto opParamvalue = dynamic_cast(paramValue.get()); const int paramEPSGCode = opParamvalue ? opParamvalue->parameter()->getEPSGCode() : 0; if (paramEPSGCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS || paramEPSGCode == EPSG_CODE_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS) { hasInterpolationCRSParameter = true; } paramValue->_exportToWKT(formatter, nullptr); } const auto l_interpolationCRS = interpolationCRS(); if (formatter->abridgedTransformation()) { // If we have an interpolation CRS that has a EPSG code, then // we can export it as a PARAMETER[] if (!hasInterpolationCRSParameter && l_interpolationCRS) { const auto code = l_interpolationCRS->getEPSGCode(); if (code != 0) { const auto methodEPSGCode = l_method->getEPSGCode(); createOperationParameterValueFromInterpolationCRS( methodEPSGCode, code) ->_exportToWKT(formatter, nullptr); } } } else { if (l_interpolationCRS) { formatter->startNode(io::WKTConstants::INTERPOLATIONCRS, false); interpolationCRS()->_exportToWKT(formatter); formatter->endNode(); } if (!coordinateOperationAccuracies().empty()) { formatter->startNode(io::WKTConstants::OPERATIONACCURACY, false); formatter->add(coordinateOperationAccuracies()[0]->value()); formatter->endNode(); } } ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // If crs is a geographic CRS, or a compound CRS of a geographic CRS, // or a compoundCRS of a bound CRS of a geographic CRS, return that // geographic CRS static crs::GeographicCRSPtr extractGeographicCRSIfGeographicCRSOrEquivalent(const crs::CRSNNPtr &crs) { auto geogCRS = util::nn_dynamic_pointer_cast(crs); if (!geogCRS) { auto compoundCRS = util::nn_dynamic_pointer_cast(crs); if (compoundCRS) { const auto &components = compoundCRS->componentReferenceSystems(); if (!components.empty()) { geogCRS = util::nn_dynamic_pointer_cast( components[0]); if (!geogCRS) { auto boundCRS = util::nn_dynamic_pointer_cast( components[0]); if (boundCRS) { geogCRS = util::nn_dynamic_pointer_cast( boundCRS->baseCRS()); } } } } else { auto boundCRS = util::nn_dynamic_pointer_cast(crs); if (boundCRS) { geogCRS = util::nn_dynamic_pointer_cast( boundCRS->baseCRS()); } } } return geogCRS; } // --------------------------------------------------------------------------- [[noreturn]] static void ThrowExceptionNotGeodeticGeographic(const char *trfrm_name) { throw io::FormattingException(concat("Can apply ", std::string(trfrm_name), " only to GeodeticCRS / " "GeographicCRS")); } // --------------------------------------------------------------------------- static void setupPROJGeodeticSourceCRS(io::PROJStringFormatter *formatter, const crs::CRSNNPtr &crs, bool addPushV3, const char *trfrm_name) { auto sourceCRSGeog = extractGeographicCRSIfGeographicCRSOrEquivalent(crs); if (sourceCRSGeog) { formatter->startInversion(); sourceCRSGeog->_exportToPROJString(formatter); formatter->stopInversion(); if (util::isOfExactType( *(sourceCRSGeog.get()))) { const auto derivedGeogCRS = dynamic_cast( sourceCRSGeog.get()); // The export of a DerivedGeographicCRS in non-CRS mode adds // unit conversion and axis swapping to the base CRS. // We must compensate for that formatter->startInversion(); formatter->startInversion(); derivedGeogCRS->baseCRS()->addAngularUnitConvertAndAxisSwap( formatter); formatter->stopInversion(); } if (addPushV3) { formatter->addStep("push"); formatter->addParam("v_3"); } formatter->addStep("cart"); sourceCRSGeog->ellipsoid()->_exportToPROJString(formatter); } else { auto sourceCRSGeod = dynamic_cast(crs.get()); if (!sourceCRSGeod) { ThrowExceptionNotGeodeticGeographic(trfrm_name); } formatter->startInversion(); sourceCRSGeod->addGeocentricUnitConversionIntoPROJString(formatter); formatter->stopInversion(); } } // --------------------------------------------------------------------------- static void setupPROJGeodeticTargetCRS(io::PROJStringFormatter *formatter, const crs::CRSNNPtr &crs, bool addPopV3, const char *trfrm_name) { auto targetCRSGeog = extractGeographicCRSIfGeographicCRSOrEquivalent(crs); if (targetCRSGeog) { formatter->addStep("cart"); formatter->setCurrentStepInverted(true); targetCRSGeog->ellipsoid()->_exportToPROJString(formatter); if (addPopV3) { formatter->addStep("pop"); formatter->addParam("v_3"); } if (util::isOfExactType( *(targetCRSGeog.get()))) { // The export of a DerivedGeographicCRS in non-CRS mode adds // unit conversion and axis swapping to the base CRS. // We must compensate for that formatter->startInversion(); const auto derivedGeogCRS = dynamic_cast( targetCRSGeog.get()); derivedGeogCRS->baseCRS()->addAngularUnitConvertAndAxisSwap( formatter); } targetCRSGeog->_exportToPROJString(formatter); } else { auto targetCRSGeod = dynamic_cast(crs.get()); if (!targetCRSGeod) { ThrowExceptionNotGeodeticGeographic(trfrm_name); } targetCRSGeod->addGeocentricUnitConversionIntoPROJString(formatter); } } //! @endcond // --------------------------------------------------------------------------- /* static */ void SingleOperation::exportToPROJStringChangeVerticalUnit( io::PROJStringFormatter *formatter, double convFactor) { const auto uom = common::UnitOfMeasure(std::string(), convFactor, common::UnitOfMeasure::Type::LINEAR) .exportToPROJString(); const std::string reverse_uom( convFactor == 0.0 ? std::string() : common::UnitOfMeasure(std::string(), 1.0 / convFactor, common::UnitOfMeasure::Type::LINEAR) .exportToPROJString()); if (uom == "m") { // do nothing } else if (!uom.empty()) { formatter->addStep("unitconvert"); formatter->addParam("z_in", uom); formatter->addParam("z_out", "m"); } else if (!reverse_uom.empty()) { formatter->addStep("unitconvert"); formatter->addParam("z_in", "m"); formatter->addParam("z_out", reverse_uom); } else if (fabs(convFactor - common::UnitOfMeasure::FOOT.conversionToSI() / common::UnitOfMeasure::US_FOOT.conversionToSI()) < 1e-10) { formatter->addStep("unitconvert"); formatter->addParam("z_in", "ft"); formatter->addParam("z_out", "us-ft"); } else if (fabs(convFactor - common::UnitOfMeasure::US_FOOT.conversionToSI() / common::UnitOfMeasure::FOOT.conversionToSI()) < 1e-10) { formatter->addStep("unitconvert"); formatter->addParam("z_in", "us-ft"); formatter->addParam("z_out", "ft"); } else { formatter->addStep("affine"); formatter->addParam("s33", convFactor); } } // --------------------------------------------------------------------------- bool SingleOperation::exportToPROJStringGeneric( io::PROJStringFormatter *formatter) const { const int methodEPSGCode = method()->getEPSGCode(); if (methodEPSGCode == EPSG_CODE_METHOD_AFFINE_PARAMETRIC_TRANSFORMATION) { const double A0 = parameterValueMeasure(EPSG_CODE_PARAMETER_A0).value(); const double A1 = parameterValueMeasure(EPSG_CODE_PARAMETER_A1).value(); const double A2 = parameterValueMeasure(EPSG_CODE_PARAMETER_A2).value(); const double B0 = parameterValueMeasure(EPSG_CODE_PARAMETER_B0).value(); const double B1 = parameterValueMeasure(EPSG_CODE_PARAMETER_B1).value(); const double B2 = parameterValueMeasure(EPSG_CODE_PARAMETER_B2).value(); // Do not mess with axis unit and order for that transformation formatter->addStep("affine"); formatter->addParam("xoff", A0); formatter->addParam("s11", A1); formatter->addParam("s12", A2); formatter->addParam("yoff", B0); formatter->addParam("s21", B1); formatter->addParam("s22", B2); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_SIMILARITY_TRANSFORMATION) { const double XT0 = parameterValueMeasure( EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT_TARGET_CRS) .value(); const double YT0 = parameterValueMeasure( EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT_TARGET_CRS) .value(); const double M = parameterValueMeasure( EPSG_CODE_PARAMETER_SCALE_FACTOR_FOR_SOURCE_CRS_AXES) .value(); const double q = parameterValueNumeric( EPSG_CODE_PARAMETER_ROTATION_ANGLE_OF_SOURCE_CRS_AXES, common::UnitOfMeasure::RADIAN); // Do not mess with axis unit and order for that transformation formatter->addStep("affine"); formatter->addParam("xoff", XT0); formatter->addParam("s11", M * cos(q)); formatter->addParam("s12", M * sin(q)); formatter->addParam("yoff", YT0); formatter->addParam("s21", -M * sin(q)); formatter->addParam("s22", M * cos(q)); return true; } if (isAxisOrderReversal(methodEPSGCode)) { formatter->addStep("axisswap"); formatter->addParam("order", "2,1"); auto sourceCRSGeog = dynamic_cast(sourceCRS().get()); auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (sourceCRSGeog && targetCRSGeog) { const auto &unitSrc = sourceCRSGeog->coordinateSystem()->axisList()[0]->unit(); const auto &unitDst = targetCRSGeog->coordinateSystem()->axisList()[0]->unit(); if (!unitSrc._isEquivalentTo( unitDst, util::IComparable::Criterion::EQUIVALENT)) { formatter->addStep("unitconvert"); auto projUnit = unitSrc.exportToPROJString(); if (projUnit.empty()) { formatter->addParam("xy_in", unitSrc.conversionToSI()); } else { formatter->addParam("xy_in", projUnit); } projUnit = unitDst.exportToPROJString(); if (projUnit.empty()) { formatter->addParam("xy_out", unitDst.conversionToSI()); } else { formatter->addParam("xy_out", projUnit); } } } return true; } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC_GEOCENTRIC) { auto sourceCRSGeod = dynamic_cast(sourceCRS().get()); if (!sourceCRSGeod) { auto sourceCRSCompound = dynamic_cast(sourceCRS().get()); if (sourceCRSCompound) { sourceCRSGeod = dynamic_cast( sourceCRSCompound->componentReferenceSystems() .front() .get()); } } auto targetCRSGeod = dynamic_cast(targetCRS().get()); if (!targetCRSGeod) { auto targetCRSCompound = dynamic_cast(targetCRS().get()); if (targetCRSCompound) { targetCRSGeod = dynamic_cast( targetCRSCompound->componentReferenceSystems() .front() .get()); } } if (sourceCRSGeod && targetCRSGeod) { auto sourceCRSGeog = dynamic_cast(sourceCRSGeod); auto targetCRSGeog = dynamic_cast(targetCRSGeod); bool isSrcGeocentric = sourceCRSGeod->isGeocentric(); bool isSrcGeographic = sourceCRSGeog != nullptr; bool isTargetGeocentric = targetCRSGeod->isGeocentric(); bool isTargetGeographic = targetCRSGeog != nullptr; if ((isSrcGeocentric && isTargetGeographic) || (isSrcGeographic && isTargetGeocentric)) { formatter->startInversion(); sourceCRSGeod->_exportToPROJString(formatter); formatter->stopInversion(); targetCRSGeod->_exportToPROJString(formatter); return true; } } throw io::FormattingException("Invalid nature of source and/or " "targetCRS for Geographic/Geocentric " "conversion"); } if (methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT) { const double convFactor = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR); exportToPROJStringChangeVerticalUnit(formatter, convFactor); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) { formatter->addStep("axisswap"); formatter->addParam("order", "1,2,-3"); return true; } formatter->setCoordinateOperationOptimizations(true); bool positionVectorConvention = true; bool sevenParamsTransform = false; bool threeParamsTransform = false; bool fifteenParamsTransform = false; bool fullMatrix = false; const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const bool isMethodInverseOf = starts_with(methodName, INVERSE_OF); const auto paramCount = parameterValues().size(); const bool l_isTimeDependent = isTimeDependent(methodName); const bool isPositionVector = ci_find(methodName, "Position Vector") != std::string::npos || ci_find(methodName, "PV") != std::string::npos; const bool isCoordinateFrame = ci_find(methodName, "Coordinate Frame") != std::string::npos || ci_find(methodName, "CF") != std::string::npos; if (methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D) { positionVectorConvention = false; sevenParamsTransform = true; fullMatrix = true; } else if ((paramCount == 7 && isCoordinateFrame && !l_isTimeDependent) || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D) { positionVectorConvention = false; sevenParamsTransform = true; } else if ( (paramCount == 15 && isCoordinateFrame && l_isTimeDependent) || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D) { positionVectorConvention = false; fifteenParamsTransform = true; } else if ((paramCount == 7 && isPositionVector && !l_isTimeDependent) || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D) { sevenParamsTransform = true; } else if ( (paramCount == 15 && isPositionVector && l_isTimeDependent) || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D) { fifteenParamsTransform = true; } else if ((paramCount == 3 && ci_find(methodName, "Geocentric translations") != std::string::npos) || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D) { threeParamsTransform = true; } if (threeParamsTransform || sevenParamsTransform || fifteenParamsTransform) { double x = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION); double y = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION); double z = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION); auto l_sourceCRS = sourceCRS(); auto l_targetCRS = targetCRS(); auto sourceCRSGeog = dynamic_cast(l_sourceCRS.get()); auto targetCRSGeog = dynamic_cast(l_targetCRS.get()); const bool addPushPopV3 = ((sourceCRSGeog && sourceCRSGeog->coordinateSystem()->axisList().size() == 2) || (targetCRSGeog && targetCRSGeog->coordinateSystem()->axisList().size() == 2)) || (!sourceCRSGeog && dynamic_cast(l_sourceCRS.get())) || (!targetCRSGeog && dynamic_cast(l_targetCRS.get())); if (l_sourceCRS) { setupPROJGeodeticSourceCRS(formatter, NN_NO_CHECK(l_sourceCRS), addPushPopV3, "Helmert"); } formatter->addStep("helmert"); if (fullMatrix) formatter->addParam("exact"); formatter->addParam("x", x); formatter->addParam("y", y); formatter->addParam("z", z); if (sevenParamsTransform || fifteenParamsTransform) { double rx = parameterValueNumeric(EPSG_CODE_PARAMETER_X_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND); double ry = parameterValueNumeric(EPSG_CODE_PARAMETER_Y_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND); double rz = parameterValueNumeric(EPSG_CODE_PARAMETER_Z_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND); double scaleDiff = parameterValueNumeric(EPSG_CODE_PARAMETER_SCALE_DIFFERENCE, common::UnitOfMeasure::PARTS_PER_MILLION); formatter->addParam("rx", rx); formatter->addParam("ry", ry); formatter->addParam("rz", rz); formatter->addParam("s", scaleDiff); if (fifteenParamsTransform) { double rate_x = parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_X_AXIS_TRANSLATION, common::UnitOfMeasure::METRE_PER_YEAR); double rate_y = parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Y_AXIS_TRANSLATION, common::UnitOfMeasure::METRE_PER_YEAR); double rate_z = parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Z_AXIS_TRANSLATION, common::UnitOfMeasure::METRE_PER_YEAR); double rate_rx = parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_X_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND_PER_YEAR); double rate_ry = parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Y_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND_PER_YEAR); double rate_rz = parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Z_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND_PER_YEAR); double rate_scaleDiff = parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_SCALE_DIFFERENCE, common::UnitOfMeasure::PPM_PER_YEAR); double referenceEpochYear = parameterValueNumeric(EPSG_CODE_PARAMETER_REFERENCE_EPOCH, common::UnitOfMeasure::YEAR); formatter->addParam("dx", rate_x); formatter->addParam("dy", rate_y); formatter->addParam("dz", rate_z); formatter->addParam("drx", rate_rx); formatter->addParam("dry", rate_ry); formatter->addParam("drz", rate_rz); formatter->addParam("ds", rate_scaleDiff); formatter->addParam("t_epoch", referenceEpochYear); } if (positionVectorConvention) { formatter->addParam("convention", "position_vector"); } else { formatter->addParam("convention", "coordinate_frame"); } } if (l_targetCRS) { setupPROJGeodeticTargetCRS(formatter, NN_NO_CHECK(l_targetCRS), addPushPopV3, "Helmert"); } return true; } if (methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D) { positionVectorConvention = isPositionVector || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D; double x = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION); double y = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION); double z = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION); double rx = parameterValueNumeric(EPSG_CODE_PARAMETER_X_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND); double ry = parameterValueNumeric(EPSG_CODE_PARAMETER_Y_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND); double rz = parameterValueNumeric(EPSG_CODE_PARAMETER_Z_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND); double scaleDiff = parameterValueNumeric(EPSG_CODE_PARAMETER_SCALE_DIFFERENCE, common::UnitOfMeasure::PARTS_PER_MILLION); double px = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT); double py = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT); double pz = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_ORDINATE_3_EVAL_POINT); bool addPushPopV3 = (methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_2D); auto l_sourceCRS = sourceCRS(); if (l_sourceCRS) { setupPROJGeodeticSourceCRS(formatter, NN_NO_CHECK(l_sourceCRS), addPushPopV3, "Molodensky-Badekas"); } formatter->addStep("molobadekas"); formatter->addParam("x", x); formatter->addParam("y", y); formatter->addParam("z", z); formatter->addParam("rx", rx); formatter->addParam("ry", ry); formatter->addParam("rz", rz); formatter->addParam("s", scaleDiff); formatter->addParam("px", px); formatter->addParam("py", py); formatter->addParam("pz", pz); if (positionVectorConvention) { formatter->addParam("convention", "position_vector"); } else { formatter->addParam("convention", "coordinate_frame"); } auto l_targetCRS = targetCRS(); if (l_targetCRS) { setupPROJGeodeticTargetCRS(formatter, NN_NO_CHECK(l_targetCRS), addPushPopV3, "Molodensky-Badekas"); } return true; } if (methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY || methodEPSGCode == EPSG_CODE_METHOD_ABRIDGED_MOLODENSKY) { double x = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION); double y = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION); double z = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION); double da = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_SEMI_MAJOR_AXIS_DIFFERENCE); double df = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_FLATTENING_DIFFERENCE); auto sourceCRSGeog = dynamic_cast(sourceCRS().get()); if (!sourceCRSGeog) { throw io::FormattingException( "Can apply Molodensky only to GeographicCRS"); } auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (!targetCRSGeog) { throw io::FormattingException( "Can apply Molodensky only to GeographicCRS"); } formatter->startInversion(); sourceCRSGeog->_exportToPROJString(formatter); formatter->stopInversion(); formatter->addStep("molodensky"); sourceCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->addParam("dx", x); formatter->addParam("dy", y); formatter->addParam("dz", z); formatter->addParam("da", da); formatter->addParam("df", df); if (ci_find(methodName, "Abridged") != std::string::npos || methodEPSGCode == EPSG_CODE_METHOD_ABRIDGED_MOLODENSKY) { formatter->addParam("abridged"); } targetCRSGeog->_exportToPROJString(formatter); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS) { double offsetLat = parameterValueNumeric(EPSG_CODE_PARAMETER_LATITUDE_OFFSET, common::UnitOfMeasure::ARC_SECOND); double offsetLong = parameterValueNumeric(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET, common::UnitOfMeasure::ARC_SECOND); auto l_sourceCRS = sourceCRS(); auto sourceCRSGeog = l_sourceCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_sourceCRS)) : nullptr; if (!sourceCRSGeog) { throw io::FormattingException( "Can apply Geographic 2D offsets only to GeographicCRS"); } auto l_targetCRS = targetCRS(); auto targetCRSGeog = l_targetCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_targetCRS)) : nullptr; if (!targetCRSGeog) { throw io::FormattingException( "Can apply Geographic 2D offsets only to GeographicCRS"); } formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); if (offsetLat != 0.0 || offsetLong != 0.0) { formatter->addStep("geogoffset"); formatter->addParam("dlat", offsetLat); formatter->addParam("dlon", offsetLong); } targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS) { double offsetLat = parameterValueNumeric(EPSG_CODE_PARAMETER_LATITUDE_OFFSET, common::UnitOfMeasure::ARC_SECOND); double offsetLong = parameterValueNumeric(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET, common::UnitOfMeasure::ARC_SECOND); double offsetHeight = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_VERTICAL_OFFSET); auto sourceCRSGeog = dynamic_cast(sourceCRS().get()); if (!sourceCRSGeog) { auto boundCRS = dynamic_cast(sourceCRS().get()); if (boundCRS) { sourceCRSGeog = dynamic_cast( boundCRS->baseCRS().get()); } if (!sourceCRSGeog) { throw io::FormattingException( "Can apply Geographic 3D offsets only to GeographicCRS"); } } auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (!targetCRSGeog) { auto boundCRS = dynamic_cast(targetCRS().get()); if (boundCRS) { targetCRSGeog = dynamic_cast( boundCRS->baseCRS().get()); } if (!targetCRSGeog) { throw io::FormattingException( "Can apply Geographic 3D offsets only to GeographicCRS"); } } formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); if (offsetLat != 0.0 || offsetLong != 0.0 || offsetHeight != 0.0) { formatter->addStep("geogoffset"); formatter->addParam("dlat", offsetLat); formatter->addParam("dlon", offsetLong); formatter->addParam("dh", offsetHeight); } targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS) { double offsetLat = parameterValueNumeric(EPSG_CODE_PARAMETER_LATITUDE_OFFSET, common::UnitOfMeasure::ARC_SECOND); double offsetLong = parameterValueNumeric(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET, common::UnitOfMeasure::ARC_SECOND); double offsetHeight = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_GEOID_HEIGHT); auto sourceCRSGeog = dynamic_cast(sourceCRS().get()); if (!sourceCRSGeog) { auto sourceCRSCompound = dynamic_cast(sourceCRS().get()); if (sourceCRSCompound) { sourceCRSGeog = sourceCRSCompound->extractGeographicCRS().get(); } if (!sourceCRSGeog) { throw io::FormattingException("Can apply Geographic 2D with " "height offsets only to " "GeographicCRS / CompoundCRS"); } } auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (!targetCRSGeog) { auto targetCRSCompound = dynamic_cast(targetCRS().get()); if (targetCRSCompound) { targetCRSGeog = targetCRSCompound->extractGeographicCRS().get(); } if (!targetCRSGeog) { throw io::FormattingException("Can apply Geographic 2D with " "height offsets only to " "GeographicCRS / CompoundCRS"); } } formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); if (offsetLat != 0.0 || offsetLong != 0.0 || offsetHeight != 0.0) { formatter->addStep("geogoffset"); formatter->addParam("dlat", offsetLat); formatter->addParam("dlon", offsetLong); formatter->addParam("dh", offsetHeight); } targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS) { double eastingOffset = parameterValueNumeric( EPSG_CODE_PARAMETER_EASTING_OFFSET, common::UnitOfMeasure::METRE); double northingOffset = parameterValueNumeric( EPSG_CODE_PARAMETER_NORTHING_OFFSET, common::UnitOfMeasure::METRE); const auto checkIfCompatEngineeringCRS = [](const crs::CRSPtr &crs) { auto engineeringCRS = dynamic_cast(crs.get()); if (engineeringCRS) { auto cs = dynamic_cast( engineeringCRS->coordinateSystem().get()); if (!cs) { throw io::FormattingException( "Can apply Cartesian grid offsets only to " "EngineeringCRS with CartesianCS"); } const auto &unit = cs->axisList()[0]->unit(); if (!unit._isEquivalentTo( common::UnitOfMeasure::METRE, util::IComparable::Criterion::EQUIVALENT)) { // Could be enhanced to support other units... throw io::FormattingException( "Can apply Cartesian grid offsets only to " "EngineeringCRS with CartesianCS with metre unit"); } } else { throw io::FormattingException( "Can apply Cartesian grid offsets only to ProjectedCRS or " "EngineeringCRS"); } }; auto l_sourceCRS = sourceCRS(); auto sourceCRSProj = dynamic_cast(l_sourceCRS.get()); if (!sourceCRSProj) { checkIfCompatEngineeringCRS(l_sourceCRS); } auto l_targetCRS = targetCRS(); auto targetCRSProj = dynamic_cast(l_targetCRS.get()); if (!targetCRSProj) { checkIfCompatEngineeringCRS(l_targetCRS); } if (sourceCRSProj) { formatter->startInversion(); sourceCRSProj->addUnitConvertAndAxisSwap(formatter, false); formatter->stopInversion(); } if (eastingOffset != 0.0 || northingOffset != 0.0) { formatter->addStep("affine"); formatter->addParam("xoff", eastingOffset); formatter->addParam("yoff", northingOffset); } if (targetCRSProj) { targetCRSProj->addUnitConvertAndAxisSwap(formatter, false); } return true; } if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET) { const crs::CRS *srcCRS = sourceCRS().get(); const crs::CRS *tgtCRS = targetCRS().get(); const auto sourceCRSCompound = dynamic_cast(srcCRS); const auto targetCRSCompound = dynamic_cast(tgtCRS); if (sourceCRSCompound && targetCRSCompound && sourceCRSCompound->componentReferenceSystems()[0]->_isEquivalentTo( targetCRSCompound->componentReferenceSystems()[0].get(), util::IComparable::Criterion::EQUIVALENT)) { srcCRS = sourceCRSCompound->componentReferenceSystems()[1].get(); tgtCRS = targetCRSCompound->componentReferenceSystems()[1].get(); } auto sourceCRSVert = dynamic_cast(srcCRS); if (!sourceCRSVert) { throw io::FormattingException( "Can apply Vertical offset only to VerticalCRS"); } auto targetCRSVert = dynamic_cast(tgtCRS); if (!targetCRSVert) { throw io::FormattingException( "Can apply Vertical offset only to VerticalCRS"); } auto offsetHeight = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_VERTICAL_OFFSET); formatter->startInversion(); sourceCRSVert->addLinearUnitConvert(formatter); formatter->stopInversion(); if (offsetHeight != 0) { formatter->addStep("geogoffset"); formatter->addParam("dh", offsetHeight); } targetCRSVert->addLinearUnitConvert(formatter); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC3D_TO_GRAVITYRELATEDHEIGHT || methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC3D_TO_GEOG2D_GRAVITYRELATEDHEIGHT) { const crs::CRS *tgtCRS = targetCRS().get(); if (const auto targetCRSCompound = dynamic_cast(tgtCRS)) { tgtCRS = targetCRSCompound->componentReferenceSystems()[1].get(); } auto targetCRSVert = dynamic_cast(tgtCRS); if (!targetCRSVert) { throw io::FormattingException( "Can apply Geographic3D to GravityRelatedHeight only to " "VerticalCRS"); } auto geoidHeight = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_GEOID_HEIGHT); if (geoidHeight != 0) { formatter->addStep("affine"); // In the forward direction (Geographic3D to GravityRelatedHeight) // we subtract the geoid height formatter->addParam("zoff", isMethodInverseOf ? geoidHeight : -geoidHeight); } targetCRSVert->addLinearUnitConvert(formatter); return true; } else if ( ci_equal(l_method->nameStr(), INVERSE_OF + EPSG_NAME_METHOD_GEOGRAPHIC3D_TO_GRAVITYRELATEDHEIGHT) || ci_equal( l_method->nameStr(), INVERSE_OF + EPSG_NAME_METHOD_GEOGRAPHIC3D_TO_GEOG2D_GRAVITYRELATEDHEIGHT)) { const crs::CRS *srcCRS = sourceCRS().get(); if (const auto sourceCRSCompound = dynamic_cast(srcCRS)) { srcCRS = sourceCRSCompound->componentReferenceSystems()[1].get(); } auto sourceCRSVert = dynamic_cast(srcCRS); if (!sourceCRSVert) { throw io::FormattingException( "Can apply Inverse of Geographic3D to GravityRelatedHeight " "only to VerticalCRS"); } auto geoidHeight = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_GEOID_HEIGHT); formatter->startInversion(); sourceCRSVert->addLinearUnitConvert(formatter); formatter->stopInversion(); if (geoidHeight != 0) { formatter->addStep("affine"); // In the forward direction (Geographic3D to GravityRelatedHeight) // we subtract the geoid height formatter->addParam("zoff", geoidHeight); } return true; } if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE) { const crs::CRS *srcCRS = sourceCRS().get(); const crs::CRS *tgtCRS = targetCRS().get(); const auto sourceCRSCompound = dynamic_cast(srcCRS); const auto targetCRSCompound = dynamic_cast(tgtCRS); if (sourceCRSCompound && targetCRSCompound && sourceCRSCompound->componentReferenceSystems()[0]->_isEquivalentTo( targetCRSCompound->componentReferenceSystems()[0].get(), util::IComparable::Criterion::EQUIVALENT)) { srcCRS = sourceCRSCompound->componentReferenceSystems()[1].get(); tgtCRS = targetCRSCompound->componentReferenceSystems()[1].get(); } auto sourceCRSVert = dynamic_cast(srcCRS); if (!sourceCRSVert) { throw io::FormattingException( "Can apply Vertical offset and slope only to VerticalCRS"); } auto targetCRSVert = dynamic_cast(tgtCRS); if (!targetCRSVert) { throw io::FormattingException( "Can apply Vertical offset and slope only to VerticalCRS"); } const auto latitudeEvaluationPoint = parameterValueNumeric(EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT, common::UnitOfMeasure::DEGREE); const auto longitudeEvaluationPoint = parameterValueNumeric(EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT, common::UnitOfMeasure::DEGREE); const auto offsetHeight = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_VERTICAL_OFFSET); const auto inclinationLatitude = parameterValueNumeric(EPSG_CODE_PARAMETER_INCLINATION_IN_LATITUDE, common::UnitOfMeasure::ARC_SECOND); const auto inclinationLongitude = parameterValueNumeric(EPSG_CODE_PARAMETER_INCLINATION_IN_LONGITUDE, common::UnitOfMeasure::ARC_SECOND); formatter->startInversion(); sourceCRSVert->addLinearUnitConvert(formatter); formatter->stopInversion(); formatter->addStep("vertoffset"); formatter->addParam("lat_0", latitudeEvaluationPoint); formatter->addParam("lon_0", longitudeEvaluationPoint); formatter->addParam("dh", offsetHeight); formatter->addParam("slope_lat", inclinationLatitude); formatter->addParam("slope_lon", inclinationLongitude); targetCRSVert->addLinearUnitConvert(formatter); return true; } // Substitute grid names with PROJ friendly names. if (formatter->databaseContext()) { auto alternate = substitutePROJAlternativeGridNames( NN_NO_CHECK(formatter->databaseContext())); auto self = NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); if (alternate != self) { alternate->_exportToPROJString(formatter); return true; } } const auto &NTv1Filename = _getNTv1Filename(this, true); const auto &NTv2Filename = _getNTv2Filename(this, true); const auto &CTABLE2Filename = _getCTABLE2Filename(this, true); const auto &HorizontalShiftGTIFFFilename = _getHorizontalShiftGTIFFFilename(this, true); const auto &hGridShiftFilename = !HorizontalShiftGTIFFFilename.empty() ? HorizontalShiftGTIFFFilename : !NTv1Filename.empty() ? NTv1Filename : !NTv2Filename.empty() ? NTv2Filename : CTABLE2Filename; if (!hGridShiftFilename.empty()) { auto l_sourceCRS = sourceCRS(); auto sourceCRSGeog = l_sourceCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_sourceCRS)) : nullptr; if (!sourceCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } auto l_targetCRS = targetCRS(); auto targetCRSGeog = l_targetCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_targetCRS)) : nullptr; if (!targetCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } if (!formatter->omitHorizontalConversionInVertTransformation()) { formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); } if (isMethodInverseOf) { formatter->startInversion(); } if (methodName.find(PROJ_WKT2_NAME_METHOD_GENERAL_SHIFT_GTIFF) != std::string::npos) { formatter->addStep("gridshift"); if (sourceCRSGeog->coordinateSystem()->axisList().size() == 2 && parameterValue( PROJ_WKT2_PARAMETER_LATITUDE_LONGITUDE_ELLIPOISDAL_HEIGHT_DIFFERENCE_FILE, 0) != nullptr) { formatter->addParam("no_z_transform"); } } else formatter->addStep("hgridshift"); formatter->addParam("grids", hGridShiftFilename); if (isMethodInverseOf) { formatter->stopInversion(); } if (!formatter->omitHorizontalConversionInVertTransformation()) { targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); } return true; } const auto &geocentricTranslationFilename = _getGeocentricTranslationFilename(this, true); if (!geocentricTranslationFilename.empty()) { auto sourceCRSGeog = dynamic_cast(sourceCRS().get()); if (!sourceCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (!targetCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } const auto &interpCRS = interpolationCRS(); if (!interpCRS) { throw io::FormattingException( "InterpolationCRS required " "for" " " EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN); } const bool interpIsSrc = interpCRS->_isEquivalentTo( sourceCRS().get(), util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS); const bool interpIsTarget = interpCRS->_isEquivalentTo( targetCRS().get(), util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS); if (!interpIsSrc && !interpIsTarget) { throw io::FormattingException( "For" " " EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN ", interpolation CRS should be the source or target CRS"); } formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); if (isMethodInverseOf) { formatter->startInversion(); } formatter->addStep("push"); formatter->addParam("v_3"); formatter->addStep("cart"); sourceCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->addStep("xyzgridshift"); formatter->addParam("grids", geocentricTranslationFilename); formatter->addParam("grid_ref", interpIsTarget ? "output_crs" : "input_crs"); (interpIsTarget ? targetCRSGeog : sourceCRSGeog) ->ellipsoid() ->_exportToPROJString(formatter); formatter->startInversion(); formatter->addStep("cart"); targetCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->stopInversion(); formatter->addStep("pop"); formatter->addParam("v_3"); if (isMethodInverseOf) { formatter->stopInversion(); } targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); return true; } const auto &geographic3DOffsetByVelocityGridFilename = _getGeographic3DOffsetByVelocityGridFilename(this, true); if (!geographic3DOffsetByVelocityGridFilename.empty()) { auto sourceCRSGeog = dynamic_cast(sourceCRS().get()); if (!sourceCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } const auto &srcEpoch = sourceCRSGeog->datumNonNull(formatter->databaseContext()) ->anchorEpoch(); if (!srcEpoch.has_value()) { throw io::FormattingException( "For" " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL ", missing epoch for source CRS"); } auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (!targetCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } const auto &dstEpoch = targetCRSGeog->datumNonNull(formatter->databaseContext()) ->anchorEpoch(); if (!dstEpoch.has_value()) { throw io::FormattingException( "For" " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL ", missing epoch for target CRS"); } const auto &interpCRS = interpolationCRS(); if (!interpCRS) { throw io::FormattingException( "InterpolationCRS required " "for" " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL); } const bool interpIsSrc = interpCRS->_isEquivalentTo( sourceCRS()->demoteTo2D(std::string(), nullptr).get(), util::IComparable::Criterion::EQUIVALENT); const bool interpIsTarget = interpCRS->_isEquivalentTo( targetCRS()->demoteTo2D(std::string(), nullptr).get(), util::IComparable::Criterion::EQUIVALENT); if (!interpIsSrc && !interpIsTarget) { throw io::FormattingException( "For" " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL ", interpolation CRS should be the source or target CRS"); } formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); if (isMethodInverseOf) { formatter->startInversion(); } const bool addPushPopV3 = ((sourceCRSGeog && sourceCRSGeog->coordinateSystem()->axisList().size() == 2) || (targetCRSGeog && targetCRSGeog->coordinateSystem()->axisList().size() == 2)); if (addPushPopV3) { formatter->addStep("push"); formatter->addParam("v_3"); } formatter->addStep("cart"); sourceCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->addStep("deformation"); const double sourceYear = srcEpoch->convertToUnit(common::UnitOfMeasure::YEAR); const double targetYear = dstEpoch->convertToUnit(common::UnitOfMeasure::YEAR); formatter->addParam("dt", targetYear - sourceYear); formatter->addParam("grids", geographic3DOffsetByVelocityGridFilename); (interpIsTarget ? targetCRSGeog : sourceCRSGeog) ->ellipsoid() ->_exportToPROJString(formatter); formatter->startInversion(); formatter->addStep("cart"); targetCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->stopInversion(); if (addPushPopV3) { formatter->addStep("pop"); formatter->addParam("v_3"); } if (isMethodInverseOf) { formatter->stopInversion(); } targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); return true; } const auto &verticalOffsetByVelocityGridFilename = _getVerticalOffsetByVelocityGridFilename(this, true); if (!verticalOffsetByVelocityGridFilename.empty()) { const auto &interpCRS = interpolationCRS(); if (!interpCRS) { throw io::FormattingException( "InterpolationCRS required " "for" " " EPSG_NAME_METHOD_VERTICAL_OFFSET_BY_VELOCITY_GRID_NRCAN); } auto interpCRSGeog = dynamic_cast(interpCRS.get()); if (!interpCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to a GeographicCRS interpolation CRS")); } const auto vertSrc = dynamic_cast(sourceCRS().get()); if (!vertSrc) { throw io::FormattingException(concat( "Can apply ", methodName, " only to a source VerticalCRS")); } const auto &srcEpoch = vertSrc->datumNonNull(formatter->databaseContext())->anchorEpoch(); if (!srcEpoch.has_value()) { throw io::FormattingException( "For" " " EPSG_NAME_METHOD_VERTICAL_OFFSET_BY_VELOCITY_GRID_NRCAN ", missing epoch for source CRS"); } const auto vertDst = dynamic_cast(targetCRS().get()); if (!vertDst) { throw io::FormattingException(concat( "Can apply ", methodName, " only to a target VerticalCRS")); } const auto &dstEpoch = vertDst->datumNonNull(formatter->databaseContext())->anchorEpoch(); if (!dstEpoch.has_value()) { throw io::FormattingException( "For" " " EPSG_NAME_METHOD_VERTICAL_OFFSET_BY_VELOCITY_GRID_NRCAN ", missing epoch for target CRS"); } const double sourceYear = srcEpoch->convertToUnit(common::UnitOfMeasure::YEAR); const double targetYear = dstEpoch->convertToUnit(common::UnitOfMeasure::YEAR); if (isMethodInverseOf) { formatter->startInversion(); } formatter->addStep("push"); formatter->addParam("v_1"); formatter->addParam("v_2"); formatter->addStep("cart"); interpCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->addStep("deformation"); formatter->addParam("dt", targetYear - sourceYear); formatter->addParam("grids", verticalOffsetByVelocityGridFilename); interpCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->startInversion(); formatter->addStep("cart"); interpCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->stopInversion(); formatter->addStep("pop"); formatter->addParam("v_1"); formatter->addParam("v_2"); if (isMethodInverseOf) { formatter->stopInversion(); } return true; } const auto &heightFilename = _getHeightToGeographic3DFilename(this, true); if (!heightFilename.empty()) { auto l_targetCRS = targetCRS(); auto targetCRSGeog = l_targetCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_targetCRS)) : nullptr; if (!targetCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } if (!formatter->omitHorizontalConversionInVertTransformation()) { formatter->startInversion(); formatter->pushOmitZUnitConversion(); targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->popOmitZUnitConversion(); formatter->stopInversion(); } if (isMethodInverseOf) { formatter->startInversion(); } formatter->addStep("vgridshift"); formatter->addParam("grids", heightFilename); formatter->addParam("multiplier", 1.0); if (isMethodInverseOf) { formatter->stopInversion(); } if (!formatter->omitHorizontalConversionInVertTransformation()) { formatter->pushOmitZUnitConversion(); targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->popOmitZUnitConversion(); } return true; } if (Transformation::isGeographic3DToGravityRelatedHeight(method(), true)) { auto fileParameter = parameterValue(EPSG_NAME_PARAMETER_GEOID_CORRECTION_FILENAME, EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { const auto &filename = fileParameter->valueFile(); auto l_sourceCRS = sourceCRS(); auto sourceCRSGeog = l_sourceCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_sourceCRS)) : nullptr; if (!sourceCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } auto l_targetCRS = targetCRS(); auto targetVertCRS = l_targetCRS ? l_targetCRS->extractVerticalCRS() : nullptr; if (!targetVertCRS) { throw io::FormattingException( concat("Can apply ", methodName, " only to a target CRS that has a VerticalCRS")); } if (!formatter->omitHorizontalConversionInVertTransformation()) { formatter->startInversion(); formatter->pushOmitZUnitConversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->popOmitZUnitConversion(); formatter->stopInversion(); } bool doInversion = isMethodInverseOf; // The EPSG Geog3DToHeight is the reverse convention of PROJ ! doInversion = !doInversion; if (doInversion) { formatter->startInversion(); } // For Geographic3D to Depth methods, we rely on the vertical axis // direction instead of the name/code of the transformation method. if (targetVertCRS->coordinateSystem()->axisList()[0]->direction() == cs::AxisDirection::DOWN) { formatter->addStep("axisswap"); formatter->addParam("order", "1,2,-3"); } formatter->addStep("vgridshift"); formatter->addParam("grids", filename); formatter->addParam("multiplier", 1.0); if (doInversion) { formatter->stopInversion(); } if (!formatter->omitHorizontalConversionInVertTransformation()) { formatter->pushOmitZUnitConversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->popOmitZUnitConversion(); } return true; } } if (methodEPSGCode == EPSG_CODE_METHOD_VERTCON) { auto fileParameter = parameterValue(EPSG_NAME_PARAMETER_VERTICAL_OFFSET_FILE, EPSG_CODE_PARAMETER_VERTICAL_OFFSET_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { formatter->addStep("vgridshift"); formatter->addParam("grids", fileParameter->valueFile()); if (fileParameter->valueFile().find(".tif") != std::string::npos) { formatter->addParam("multiplier", 1.0); } else { // The vertcon grids go from NGVD 29 to NAVD 88, with units // in millimeter (see // https://github.com/OSGeo/proj.4/issues/1071), for gtx files formatter->addParam("multiplier", 0.001); } return true; } } bool reverseOffsetSign = false; if (isRegularVerticalGridMethod(methodEPSGCode, reverseOffsetSign)) { int parameterCode = EPSG_CODE_PARAMETER_VERTICAL_OFFSET_FILE; auto fileParameter = parameterValue( EPSG_NAME_PARAMETER_VERTICAL_OFFSET_FILE, parameterCode); if (!fileParameter) { parameterCode = EPSG_CODE_PARAMETER_GEOID_MODEL_DIFFERENCE_FILE; fileParameter = parameterValue( EPSG_NAME_PARAMETER_GEOID_MODEL_DIFFERENCE_FILE, parameterCode); } if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { formatter->addStep("vgridshift"); formatter->addParam("grids", fileParameter->valueFile()); formatter->addParam("multiplier", reverseOffsetSign ? -1.0 : 1.0); return true; } } if (isLongitudeRotation()) { double offsetDeg = parameterValueNumeric(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET, common::UnitOfMeasure::DEGREE); auto l_sourceCRS = sourceCRS(); auto sourceCRSGeog = l_sourceCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_sourceCRS)) : nullptr; if (!sourceCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } auto l_targetCRS = targetCRS(); auto targetCRSGeog = l_targetCRS ? extractGeographicCRSIfGeographicCRSOrEquivalent( NN_NO_CHECK(l_targetCRS)) : nullptr; if (!targetCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName + " only to GeographicCRS")); } if (!sourceCRSGeog->ellipsoid()->_isEquivalentTo( targetCRSGeog->ellipsoid().get(), util::IComparable::Criterion::EQUIVALENT)) { // This is arguable if we should check this... throw io::FormattingException("Can apply Longitude rotation " "only to SRS with same " "ellipsoid"); } formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); bool done = false; if (offsetDeg != 0.0) { // Optimization: as we are doing nominally a +step=inv, // if the negation of the offset value is a well-known name, // then use forward case with this name. auto projPMName = datum::PrimeMeridian::getPROJStringWellKnownName( common::Angle(-offsetDeg)); if (!projPMName.empty()) { done = true; formatter->addStep("longlat"); sourceCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->addParam("pm", projPMName); } } if (!done) { // To actually add the offset, we must use the reverse longlat // operation. formatter->startInversion(); formatter->addStep("longlat"); sourceCRSGeog->ellipsoid()->_exportToPROJString(formatter); datum::PrimeMeridian::create(util::PropertyMap(), common::Angle(offsetDeg)) ->_exportToPROJString(formatter); formatter->stopInversion(); } targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); return true; } if (methodEPSGCode == EPSG_CODE_METHOD_NEW_ZEALAND_DEFORMATION_MODEL) { auto sourceCRSGeog = dynamic_cast(sourceCRS().get()); if (!sourceCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (!targetCRSGeog) { throw io::FormattingException( concat("Can apply ", methodName, " only to GeographicCRS")); } auto fileParameter = parameterValue(EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { formatter->startInversion(); sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); formatter->stopInversion(); if (isMethodInverseOf) { formatter->startInversion(); } // Operations are registered in EPSG with inverse order as // the +proj=defmodel implementation formatter->startInversion(); formatter->addStep("defmodel"); formatter->addParam("model", fileParameter->valueFile()); formatter->stopInversion(); if (isMethodInverseOf) { formatter->stopInversion(); } targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); return true; } } if (methodEPSGCode == EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS_BY_TIN_INTERPOLATION_JSON) { auto sourceCRSProj = dynamic_cast(sourceCRS().get()); if (!sourceCRSProj) { throw io::FormattingException( concat("Can apply ", methodName, " only to ProjectedCRS")); } auto targetCRSProj = dynamic_cast(targetCRS().get()); if (!targetCRSProj) { throw io::FormattingException( concat("Can apply ", methodName, " only to ProjectedCRS")); } auto fileParameter = parameterValue(EPSG_NAME_PARAMETER_TIN_OFFSET_FILE, EPSG_CODE_PARAMETER_TIN_OFFSET_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { formatter->startInversion(); sourceCRSProj->addUnitConvertAndAxisSwap(formatter, false); formatter->stopInversion(); if (isMethodInverseOf) { formatter->startInversion(); } formatter->addStep("tinshift"); formatter->addParam("file", fileParameter->valueFile()); if (isMethodInverseOf) { formatter->stopInversion(); } targetCRSProj->addUnitConvertAndAxisSwap(formatter, false); return true; } } if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET_BY_TIN_INTERPOLATION_JSON) { auto sourceCRSVert = dynamic_cast(sourceCRS().get()); if (!sourceCRSVert) { throw io::FormattingException( concat("Can apply ", methodName, " only to VerticalCRS")); } auto targetCRSVert = dynamic_cast(targetCRS().get()); if (!targetCRSVert) { throw io::FormattingException( concat("Can apply ", methodName, " only to VerticalCRS")); } auto fileParameter = parameterValue(EPSG_NAME_PARAMETER_TIN_OFFSET_FILE, EPSG_CODE_PARAMETER_TIN_OFFSET_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { if (isMethodInverseOf) { formatter->startInversion(); } formatter->addStep("tinshift"); formatter->addParam("file", fileParameter->valueFile()); if (isMethodInverseOf) { formatter->stopInversion(); } return true; } } const char *prefix = "PROJ-based operation method: "; if (starts_with(method()->nameStr(), prefix)) { auto projString = method()->nameStr().substr(strlen(prefix)); try { formatter->ingestPROJString(projString); return true; } catch (const io::ParsingException &e) { throw io::FormattingException( std::string("ingestPROJString() failed: ") + e.what()); } } return false; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress InverseCoordinateOperation::~InverseCoordinateOperation() = default; // --------------------------------------------------------------------------- InverseCoordinateOperation::InverseCoordinateOperation( const CoordinateOperationNNPtr &forwardOperationIn, bool wktSupportsInversion) : forwardOperation_(forwardOperationIn), wktSupportsInversion_(wktSupportsInversion) {} // --------------------------------------------------------------------------- void InverseCoordinateOperation::setPropertiesFromForward() { setProperties( createPropertiesForInverse(forwardOperation_.get(), false, false)); setAccuracies(forwardOperation_->coordinateOperationAccuracies()); if (forwardOperation_->sourceCRS() && forwardOperation_->targetCRS()) { setCRSs(forwardOperation_.get(), true); } setHasBallparkTransformation( forwardOperation_->hasBallparkTransformation()); setRequiresPerCoordinateInputTime( forwardOperation_->requiresPerCoordinateInputTime()); } // --------------------------------------------------------------------------- CoordinateOperationNNPtr InverseCoordinateOperation::inverse() const { return forwardOperation_; } // --------------------------------------------------------------------------- void InverseCoordinateOperation::_exportToPROJString( io::PROJStringFormatter *formatter) const { formatter->startInversion(); forwardOperation_->_exportToPROJString(formatter); formatter->stopInversion(); } // --------------------------------------------------------------------------- bool InverseCoordinateOperation::_isEquivalentTo( const util::IComparable *other, util::IComparable::Criterion criterion, const io::DatabaseContextPtr &dbContext) const { auto otherICO = dynamic_cast(other); if (otherICO == nullptr || !ObjectUsage::_isEquivalentTo(other, criterion, dbContext)) { return false; } return inverse()->_isEquivalentTo(otherICO->inverse().get(), criterion, dbContext); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PointMotionOperation::~PointMotionOperation() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a point motion operation from a vector of * GeneralParameterValue. * * @param properties See \ref general_properties. At minimum the name should be * defined. * @param crsIn Source and target CRS. * @param methodIn Operation method. * @param values Vector of GeneralOperationParameterNNPtr. * @param accuracies Vector of positional accuracy (might be empty). * @return new PointMotionOperation. * @throws InvalidOperation if the object cannot be constructed. */ PointMotionOperationNNPtr PointMotionOperation::create( const util::PropertyMap &properties, const crs::CRSNNPtr &crsIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies) { if (methodIn->parameters().size() != values.size()) { throw InvalidOperation( "Inconsistent number of parameters and parameter values"); } auto pmo = PointMotionOperation::nn_make_shared( crsIn, methodIn, values, accuracies); pmo->assignSelf(pmo); pmo->setProperties(properties); const std::string l_name = pmo->nameStr(); auto pos = l_name.find(" from epoch "); if (pos != std::string::npos) { pos += strlen(" from epoch "); const auto pos2 = l_name.find(" to epoch ", pos); if (pos2 != std::string::npos) { const double sourceYear = std::stod(l_name.substr(pos, pos2 - pos)); const double targetYear = std::stod(l_name.substr(pos2 + strlen(" to epoch "))); pmo->setSourceCoordinateEpoch( util::optional(common::DataEpoch( common::Measure(sourceYear, common::UnitOfMeasure::YEAR)))); pmo->setTargetCoordinateEpoch( util::optional(common::DataEpoch( common::Measure(targetYear, common::UnitOfMeasure::YEAR)))); } } return pmo; } // --------------------------------------------------------------------------- /** \brief Instantiate a point motion operation and its OperationMethod. * * @param propertiesOperation The \ref general_properties of the * PointMotionOperation. * At minimum the name should be defined. * @param crsIn Source and target CRS. * @param propertiesOperationMethod The \ref general_properties of the * OperationMethod. * At minimum the name should be defined. * @param parameters Vector of parameters of the operation method. * @param values Vector of ParameterValueNNPtr. Constraint: * values.size() == parameters.size() * @param accuracies Vector of positional accuracy (might be empty). * @return new PointMotionOperation. * @throws InvalidOperation if the object cannot be constructed. */ PointMotionOperationNNPtr PointMotionOperation::create( const util::PropertyMap &propertiesOperation, const crs::CRSNNPtr &crsIn, const util::PropertyMap &propertiesOperationMethod, const std::vector ¶meters, const std::vector &values, const std::vector &accuracies) // throw InvalidOperation { OperationMethodNNPtr op( OperationMethod::create(propertiesOperationMethod, parameters)); if (parameters.size() != values.size()) { throw InvalidOperation( "Inconsistent number of parameters and parameter values"); } std::vector generalParameterValues; generalParameterValues.reserve(values.size()); for (size_t i = 0; i < values.size(); i++) { generalParameterValues.push_back( OperationParameterValue::create(parameters[i], values[i])); } return create(propertiesOperation, crsIn, op, generalParameterValues, accuracies); } // --------------------------------------------------------------------------- PointMotionOperation::PointMotionOperation( const crs::CRSNNPtr &crsIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies) : SingleOperation(methodIn) { setParameterValues(values); setCRSs(crsIn, crsIn, nullptr); setAccuracies(accuracies); } // --------------------------------------------------------------------------- PointMotionOperation::PointMotionOperation(const PointMotionOperation &other) : CoordinateOperation(other), SingleOperation(other) {} // --------------------------------------------------------------------------- CoordinateOperationNNPtr PointMotionOperation::inverse() const { auto inverse = shallowClone(); if (sourceCoordinateEpoch().has_value()) { // Switch source and target epochs inverse->setSourceCoordinateEpoch(targetCoordinateEpoch()); inverse->setTargetCoordinateEpoch(sourceCoordinateEpoch()); auto l_name = inverse->nameStr(); auto pos = l_name.find(" from epoch "); if (pos != std::string::npos) l_name.resize(pos); const double sourceYear = getRoundedEpochInDecimalYear( inverse->sourceCoordinateEpoch()->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)); const double targetYear = getRoundedEpochInDecimalYear( inverse->targetCoordinateEpoch()->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)); l_name += " from epoch "; l_name += toString(sourceYear); l_name += " to epoch "; l_name += toString(targetYear); util::PropertyMap newProperties; newProperties.set(IdentifiedObject::NAME_KEY, l_name); inverse->setProperties(newProperties); } return inverse; } // --------------------------------------------------------------------------- /** \brief Return an equivalent transformation to the current one, but using * PROJ alternative grid names. */ PointMotionOperationNNPtr PointMotionOperation::substitutePROJAlternativeGridNames( io::DatabaseContextNNPtr databaseContext) const { auto self = NN_NO_CHECK(std::dynamic_pointer_cast( shared_from_this().as_nullable())); const auto &l_method = method(); const int methodEPSGCode = l_method->getEPSGCode(); std::string filename; if (methodEPSGCode == EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NTV2_VEL || methodEPSGCode == EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NEU_DOMAIN_NTV2_VEL) { const auto &fileParameter = parameterValue(EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { filename = fileParameter->valueFile(); } } std::string projFilename; std::string projGridFormat; bool inverseDirection = false; if (!filename.empty() && databaseContext->lookForGridAlternative( filename, projFilename, projGridFormat, inverseDirection)) { if (filename == projFilename) { return self; } const VectorOfParameters parameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE)}; const VectorOfValues values{ ParameterValue::createFilename(projFilename)}; return PointMotionOperation::create( createSimilarPropertiesOperation(self), sourceCRS(), createSimilarPropertiesMethod(method()), parameters, values, coordinateOperationAccuracies()); } return self; } // --------------------------------------------------------------------------- /** \brief Return the source crs::CRS of the operation. * * @return the source CRS. */ const crs::CRSNNPtr &PointMotionOperation::sourceCRS() PROJ_PURE_DEFN { return CoordinateOperation::getPrivate()->strongRef_->sourceCRS_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PointMotionOperationNNPtr PointMotionOperation::shallowClone() const { auto pmo = PointMotionOperation::nn_make_shared(*this); pmo->assignSelf(pmo); pmo->setCRSs(this, false); return pmo; } CoordinateOperationNNPtr PointMotionOperation::_shallowClone() const { return util::nn_static_pointer_cast(shallowClone()); } // --------------------------------------------------------------------------- PointMotionOperationNNPtr PointMotionOperation::cloneWithEpochs( const common::DataEpoch &sourceEpoch, const common::DataEpoch &targetEpoch) const { auto pmo = PointMotionOperation::nn_make_shared(*this); pmo->assignSelf(pmo); pmo->setCRSs(this, false); pmo->setSourceCoordinateEpoch( util::optional(sourceEpoch)); pmo->setTargetCoordinateEpoch( util::optional(targetEpoch)); const double sourceYear = getRoundedEpochInDecimalYear( sourceEpoch.coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)); const double targetYear = getRoundedEpochInDecimalYear( targetEpoch.coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)); auto l_name = nameStr(); l_name += " from epoch "; l_name += toString(sourceYear); l_name += " to epoch "; l_name += toString(targetYear); util::PropertyMap newProperties; newProperties.set(IdentifiedObject::NAME_KEY, l_name); pmo->setProperties(newProperties); return pmo; } // --------------------------------------------------------------------------- void PointMotionOperation::_exportToWKT(io::WKTFormatter *formatter) const { if (formatter->version() != io::WKTFormatter::Version::WKT2 || !formatter->use2019Keywords()) { throw io::FormattingException( "Transformation can only be exported to WKT2:2019"); } formatter->startNode(io::WKTConstants::POINTMOTIONOPERATION, !identifiers().empty()); formatter->addQuotedString(nameStr()); const auto &version = operationVersion(); if (version.has_value()) { formatter->startNode(io::WKTConstants::VERSION, false); formatter->addQuotedString(*version); formatter->endNode(); } auto l_sourceCRS = sourceCRS(); const bool canExportCRSId = !(formatter->idOnTopLevelOnly() && formatter->topLevelHasId()); const bool hasDomains = !domains().empty(); if (hasDomains) { formatter->pushDisableUsage(); } formatter->startNode(io::WKTConstants::SOURCECRS, false); if (canExportCRSId && !l_sourceCRS->identifiers().empty()) { // fake that top node has no id, so that the sourceCRS id is // considered formatter->pushHasId(false); l_sourceCRS->_exportToWKT(formatter); formatter->popHasId(); } else { l_sourceCRS->_exportToWKT(formatter); } formatter->endNode(); if (hasDomains) { formatter->popDisableUsage(); } const auto &l_method = method(); l_method->_exportToWKT(formatter); for (const auto ¶mValue : parameterValues()) { paramValue->_exportToWKT(formatter, nullptr); } if (!coordinateOperationAccuracies().empty()) { formatter->startNode(io::WKTConstants::OPERATIONACCURACY, false); formatter->add(coordinateOperationAccuracies()[0]->value()); formatter->endNode(); } ObjectUsage::baseExportToWKT(formatter); formatter->endNode(); } // --------------------------------------------------------------------------- void PointMotionOperation::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(FormattingException) { if (formatter->convention() == io::PROJStringFormatter::Convention::PROJ_4) { throw io::FormattingException( "PointMotionOperation cannot be exported as a PROJ.4 string"); } const int methodEPSGCode = method()->getEPSGCode(); if (methodEPSGCode == EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NTV2_VEL || methodEPSGCode == EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NEU_DOMAIN_NTV2_VEL) { if (!sourceCoordinateEpoch().has_value()) { throw io::FormattingException( "CoordinateOperationNNPtr::_exportToPROJString() unimplemented " "when source coordinate epoch is missing"); } if (!targetCoordinateEpoch().has_value()) { throw io::FormattingException( "CoordinateOperationNNPtr::_exportToPROJString() unimplemented " "when target coordinate epoch is missing"); } auto l_sourceCRS = dynamic_cast(sourceCRS().get()); if (!l_sourceCRS) { throw io::FormattingException("Can apply PointMotionOperation " "VelocityGrid only to GeodeticCRS"); } if (!l_sourceCRS->isGeocentric()) { formatter->startInversion(); l_sourceCRS->_exportToPROJString(formatter); formatter->stopInversion(); formatter->addStep("cart"); l_sourceCRS->ellipsoid()->_exportToPROJString(formatter); } else { formatter->startInversion(); l_sourceCRS->addGeocentricUnitConversionIntoPROJString(formatter); formatter->stopInversion(); } const double sourceYear = getRoundedEpochInDecimalYear( sourceCoordinateEpoch()->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)); const double targetYear = getRoundedEpochInDecimalYear( targetCoordinateEpoch()->coordinateEpoch().convertToUnit( common::UnitOfMeasure::YEAR)); formatter->addStep("set"); formatter->addParam("v_4", sourceYear); formatter->addParam("omit_fwd"); formatter->addStep("deformation"); formatter->addParam("dt", targetYear - sourceYear); const auto &fileParameter = parameterValue(EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); if (fileParameter && fileParameter->type() == ParameterValue::Type::FILENAME) { formatter->addParam("grids", fileParameter->valueFile()); } else { throw io::FormattingException( "CoordinateOperationNNPtr::_exportToPROJString(): missing " "velocity grid file parameter"); } l_sourceCRS->ellipsoid()->_exportToPROJString(formatter); formatter->addStep("set"); formatter->addParam("v_4", targetYear); formatter->addParam("omit_inv"); if (!l_sourceCRS->isGeocentric()) { formatter->startInversion(); formatter->addStep("cart"); l_sourceCRS->ellipsoid()->_exportToPROJString(formatter); formatter->stopInversion(); l_sourceCRS->_exportToPROJString(formatter); } else { l_sourceCRS->addGeocentricUnitConversionIntoPROJString(formatter); } } else { throw io::FormattingException( "CoordinateOperationNNPtr::_exportToPROJString() unimplemented for " "this method"); } } // --------------------------------------------------------------------------- void PointMotionOperation::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext(formatter->MakeObjectContext("PointMotionOperation", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } writer->AddObjKey("source_crs"); formatter->setAllowIDInImmediateChild(); sourceCRS()->_exportToJSON(formatter); writer->AddObjKey("method"); formatter->setOmitTypeInImmediateChild(); formatter->setAllowIDInImmediateChild(); method()->_exportToJSON(formatter); writer->AddObjKey("parameters"); { auto parametersContext(writer->MakeArrayContext(false)); for (const auto &genOpParamvalue : parameterValues()) { formatter->setAllowIDInImmediateChild(); formatter->setOmitTypeInImmediateChild(); genOpParamvalue->_exportToJSON(formatter); } } if (!coordinateOperationAccuracies().empty()) { writer->AddObjKey("accuracy"); writer->Add(coordinateOperationAccuracies()[0]->value()); } ObjectUsage::baseExportToJSON(formatter); } //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/transformation.cpp000664 001754 001755 00000246201 14764566077 022156 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/crs.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "coordinateoperation_internal.hpp" #include "coordinateoperation_private.hpp" #include "esriparammappings.hpp" #include "operationmethod_private.hpp" #include "oputils.hpp" #include "parammappings.hpp" #include "vectorofvaluesparams.hpp" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // M_PI // clang-format on #include "proj_constants.h" #include "proj_json_streaming_writer.hpp" #include #include #include #include #include #include #include #include using namespace NS_PROJ::internal; // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct Transformation::Private { TransformationPtr forwardOperation_{}; static TransformationNNPtr registerInv(const Transformation *thisIn, TransformationNNPtr invTransform); }; //! @endcond // --------------------------------------------------------------------------- Transformation::Transformation( const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies) : SingleOperation(methodIn), d(std::make_unique()) { setParameterValues(values); setCRSs(sourceCRSIn, targetCRSIn, interpolationCRSIn); setAccuracies(accuracies); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Transformation::~Transformation() = default; //! @endcond // --------------------------------------------------------------------------- Transformation::Transformation(const Transformation &other) : CoordinateOperation(other), SingleOperation(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- /** \brief Return the source crs::CRS of the transformation. * * @return the source CRS. */ const crs::CRSNNPtr &Transformation::sourceCRS() PROJ_PURE_DEFN { return CoordinateOperation::getPrivate()->strongRef_->sourceCRS_; } // --------------------------------------------------------------------------- /** \brief Return the target crs::CRS of the transformation. * * @return the target CRS. */ const crs::CRSNNPtr &Transformation::targetCRS() PROJ_PURE_DEFN { return CoordinateOperation::getPrivate()->strongRef_->targetCRS_; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TransformationNNPtr Transformation::shallowClone() const { auto transf = Transformation::nn_make_shared(*this); transf->assignSelf(transf); transf->setCRSs(this, false); if (transf->d->forwardOperation_) { transf->d->forwardOperation_ = transf->d->forwardOperation_->shallowClone().as_nullable(); } return transf; } CoordinateOperationNNPtr Transformation::_shallowClone() const { return util::nn_static_pointer_cast(shallowClone()); } // --------------------------------------------------------------------------- TransformationNNPtr Transformation::promoteTo3D(const std::string &, const io::DatabaseContextPtr &dbContext) const { auto transf = shallowClone(); transf->setCRSs(sourceCRS()->promoteTo3D(std::string(), dbContext), targetCRS()->promoteTo3D(std::string(), dbContext), interpolationCRS()); return transf; } // --------------------------------------------------------------------------- TransformationNNPtr Transformation::demoteTo2D(const std::string &, const io::DatabaseContextPtr &dbContext) const { auto transf = shallowClone(); transf->setCRSs(sourceCRS()->demoteTo2D(std::string(), dbContext), targetCRS()->demoteTo2D(std::string(), dbContext), interpolationCRS()); return transf; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress /** \brief Return the TOWGS84 parameters of the transformation. * * If this transformation uses Coordinate Frame Rotation, Position Vector * transformation or Geocentric translations, a vector of 7 double values * using the Position Vector convention (EPSG:9606) is returned. Those values * can be used as the value of the WKT1 TOWGS84 parameter or * PROJ +towgs84 parameter. * * @param canThrowException if true, an exception is thrown if the method fails, * otherwise an empty vector is returned in case of failure. * @return a vector of 7 values if valid, otherwise a io::FormattingException * is thrown. * @throws io::FormattingException in case of error, if canThrowException is * true */ std::vector Transformation::getTOWGS84Parameters( bool canThrowException) const // throw(io::FormattingException) { // GDAL WKT1 assumes EPSG:9606 / Position Vector convention bool sevenParamsTransform = false; bool threeParamsTransform = false; bool invertRotSigns = false; const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const int methodEPSGCode = l_method->getEPSGCode(); const auto paramCount = parameterValues().size(); if ((paramCount == 7 && ci_find(methodName, "Coordinate Frame") != std::string::npos) || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D) { sevenParamsTransform = true; invertRotSigns = true; } else if ((paramCount == 7 && ci_find(methodName, "Position Vector") != std::string::npos) || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D) { sevenParamsTransform = true; invertRotSigns = false; } else if ((paramCount == 3 && ci_find(methodName, "Geocentric translations") != std::string::npos) || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D) { threeParamsTransform = true; } if (threeParamsTransform || sevenParamsTransform) { std::vector params(7, 0.0); bool foundX = false; bool foundY = false; bool foundZ = false; bool foundRotX = false; bool foundRotY = false; bool foundRotZ = false; bool foundScale = false; const double rotSign = invertRotSigns ? -1.0 : 1.0; const auto fixNegativeZero = [](double x) { if (x == 0.0) return 0.0; return x; }; for (const auto &genOpParamvalue : parameterValues()) { auto opParamvalue = dynamic_cast( genOpParamvalue.get()); if (opParamvalue) { const auto ¶meter = opParamvalue->parameter(); const auto epsg_code = parameter->getEPSGCode(); const auto &l_parameterValue = opParamvalue->parameterValue(); if (l_parameterValue->type() == ParameterValue::Type::MEASURE) { const auto &measure = l_parameterValue->value(); if (epsg_code == EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION) { params[0] = measure.getSIValue(); foundX = true; } else if (epsg_code == EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION) { params[1] = measure.getSIValue(); foundY = true; } else if (epsg_code == EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION) { params[2] = measure.getSIValue(); foundZ = true; } else if (epsg_code == EPSG_CODE_PARAMETER_X_AXIS_ROTATION) { params[3] = fixNegativeZero( rotSign * measure.convertToUnit( common::UnitOfMeasure::ARC_SECOND)); foundRotX = true; } else if (epsg_code == EPSG_CODE_PARAMETER_Y_AXIS_ROTATION) { params[4] = fixNegativeZero( rotSign * measure.convertToUnit( common::UnitOfMeasure::ARC_SECOND)); foundRotY = true; } else if (epsg_code == EPSG_CODE_PARAMETER_Z_AXIS_ROTATION) { params[5] = fixNegativeZero( rotSign * measure.convertToUnit( common::UnitOfMeasure::ARC_SECOND)); foundRotZ = true; } else if (epsg_code == EPSG_CODE_PARAMETER_SCALE_DIFFERENCE) { params[6] = measure.convertToUnit( common::UnitOfMeasure::PARTS_PER_MILLION); foundScale = true; } } } } if (foundX && foundY && foundZ && (threeParamsTransform || (foundRotX && foundRotY && foundRotZ && foundScale))) { return params; } else { if (!canThrowException) return {}; throw io::FormattingException( "Missing required parameter values in transformation"); } } #if 0 if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS || methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS) { auto offsetLat = parameterValueMeasure(EPSG_CODE_PARAMETER_LATITUDE_OFFSET); auto offsetLong = parameterValueMeasure(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET); auto offsetHeight = parameterValueMeasure(EPSG_CODE_PARAMETER_VERTICAL_OFFSET); if (offsetLat.getSIValue() == 0.0 && offsetLong.getSIValue() == 0.0 && offsetHeight.getSIValue() == 0.0) { std::vector params(7, 0.0); return params; } } #endif if (!canThrowException) return {}; throw io::FormattingException( "Transformation cannot be formatted as WKT1 TOWGS84 parameters"); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a transformation from a vector of GeneralParameterValue. * * @param properties See \ref general_properties. At minimum the name should be * defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param interpolationCRSIn Interpolation CRS (might be null) * @param methodIn Operation method. * @param values Vector of GeneralOperationParameterNNPtr. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. * @throws InvalidOperation if the object cannot be constructed. */ TransformationNNPtr Transformation::create( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const OperationMethodNNPtr &methodIn, const std::vector &values, const std::vector &accuracies) { if (methodIn->parameters().size() != values.size()) { throw InvalidOperation( "Inconsistent number of parameters and parameter values"); } auto transf = Transformation::nn_make_shared( sourceCRSIn, targetCRSIn, interpolationCRSIn, methodIn, values, accuracies); transf->assignSelf(transf); transf->setProperties(properties); std::string name; if (properties.getStringValue(common::IdentifiedObject::NAME_KEY, name) && ci_find(name, "ballpark") != std::string::npos) { transf->setHasBallparkTransformation(true); } return transf; } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation and its OperationMethod. * * @param propertiesTransformation The \ref general_properties of the * Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param interpolationCRSIn Interpolation CRS (might be null) * @param propertiesOperationMethod The \ref general_properties of the * OperationMethod. * At minimum the name should be defined. * @param parameters Vector of parameters of the operation method. * @param values Vector of ParameterValueNNPtr. Constraint: * values.size() == parameters.size() * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. * @throws InvalidOperation if the object cannot be constructed. */ TransformationNNPtr Transformation::create(const util::PropertyMap &propertiesTransformation, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const util::PropertyMap &propertiesOperationMethod, const std::vector ¶meters, const std::vector &values, const std::vector &accuracies) // throw InvalidOperation { OperationMethodNNPtr op( OperationMethod::create(propertiesOperationMethod, parameters)); if (parameters.size() != values.size()) { throw InvalidOperation( "Inconsistent number of parameters and parameter values"); } std::vector generalParameterValues; generalParameterValues.reserve(values.size()); for (size_t i = 0; i < values.size(); i++) { generalParameterValues.push_back( OperationParameterValue::create(parameters[i], values[i])); } return create(propertiesTransformation, sourceCRSIn, targetCRSIn, interpolationCRSIn, op, generalParameterValues, accuracies); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- static TransformationNNPtr createSevenParamsTransform( const util::PropertyMap &properties, const util::PropertyMap &methodProperties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, const std::vector &accuracies) { return Transformation::create( properties, sourceCRSIn, targetCRSIn, nullptr, methodProperties, VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_X_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Y_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Z_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_SCALE_DIFFERENCE), }, createParams(common::Length(translationXMetre), common::Length(translationYMetre), common::Length(translationZMetre), common::Angle(rotationXArcSecond, common::UnitOfMeasure::ARC_SECOND), common::Angle(rotationYArcSecond, common::UnitOfMeasure::ARC_SECOND), common::Angle(rotationZArcSecond, common::UnitOfMeasure::ARC_SECOND), common::Scale(scaleDifferencePPM, common::UnitOfMeasure::PARTS_PER_MILLION)), accuracies); } // --------------------------------------------------------------------------- static void getTransformationType(const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, bool &isGeocentric, bool &isGeog2D, bool &isGeog3D) { auto sourceCRSGeod = dynamic_cast(sourceCRSIn.get()); auto targetCRSGeod = dynamic_cast(targetCRSIn.get()); isGeocentric = sourceCRSGeod && sourceCRSGeod->isGeocentric() && targetCRSGeod && targetCRSGeod->isGeocentric(); if (isGeocentric) { isGeog2D = false; isGeog3D = false; return; } isGeocentric = false; auto sourceCRSGeog = dynamic_cast(sourceCRSIn.get()); auto targetCRSGeog = dynamic_cast(targetCRSIn.get()); if (!(sourceCRSGeog || (sourceCRSGeod && sourceCRSGeod->isSphericalPlanetocentric())) || !(targetCRSGeog || (targetCRSGeod && targetCRSGeod->isSphericalPlanetocentric()))) { throw InvalidOperation("Inconsistent CRS type"); } const auto nSrcAxisCount = sourceCRSGeod->coordinateSystem()->axisList().size(); const auto nTargetAxisCount = targetCRSGeod->coordinateSystem()->axisList().size(); isGeog2D = nSrcAxisCount == 2 && nTargetAxisCount == 2; isGeog3D = !isGeog2D && nSrcAxisCount >= 2 && nTargetAxisCount >= 2; } // --------------------------------------------------------------------------- static int useOperationMethodEPSGCodeIfPresent(const util::PropertyMap &properties, int nDefaultOperationMethodEPSGCode) { const auto *operationMethodEPSGCode = properties.get("OPERATION_METHOD_EPSG_CODE"); if (operationMethodEPSGCode) { const auto boxedValue = dynamic_cast( (*operationMethodEPSGCode).get()); if (boxedValue && boxedValue->type() == util::BoxedValue::Type::INTEGER) { return boxedValue->integerValue(); } } return nDefaultOperationMethodEPSGCode; } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with Geocentric Translations method. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param translationXMetre Value of the Translation_X parameter (in metre). * @param translationYMetre Value of the Translation_Y parameter (in metre). * @param translationZMetre Value of the Translation_Z parameter (in metre). * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createGeocentricTranslations( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, const std::vector &accuracies) { bool isGeocentric; bool isGeog2D; bool isGeog3D; getTransformationType(sourceCRSIn, targetCRSIn, isGeocentric, isGeog2D, isGeog3D); return create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent( properties, isGeocentric ? EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC : isGeog2D ? EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D : EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D)), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION), }, createParams(common::Length(translationXMetre), common::Length(translationYMetre), common::Length(translationZMetre)), accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with Position vector transformation * method. * * This is similar to createCoordinateFrameRotation(), except that the sign of * the rotation terms is inverted. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param translationXMetre Value of the Translation_X parameter (in metre). * @param translationYMetre Value of the Translation_Y parameter (in metre). * @param translationZMetre Value of the Translation_Z parameter (in metre). * @param rotationXArcSecond Value of the Rotation_X parameter (in * arc-second). * @param rotationYArcSecond Value of the Rotation_Y parameter (in * arc-second). * @param rotationZArcSecond Value of the Rotation_Z parameter (in * arc-second). * @param scaleDifferencePPM Value of the Scale_Difference parameter (in * parts-per-million). * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createPositionVector( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, const std::vector &accuracies) { bool isGeocentric; bool isGeog2D; bool isGeog3D; getTransformationType(sourceCRSIn, targetCRSIn, isGeocentric, isGeog2D, isGeog3D); return createSevenParamsTransform( properties, createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent( properties, isGeocentric ? EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC : isGeog2D ? EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D : EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D)), sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre, translationZMetre, rotationXArcSecond, rotationYArcSecond, rotationZArcSecond, scaleDifferencePPM, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with Coordinate Frame Rotation method. * * This is similar to createPositionVector(), except that the sign of * the rotation terms is inverted. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param translationXMetre Value of the Translation_X parameter (in metre). * @param translationYMetre Value of the Translation_Y parameter (in metre). * @param translationZMetre Value of the Translation_Z parameter (in metre). * @param rotationXArcSecond Value of the Rotation_X parameter (in * arc-second). * @param rotationYArcSecond Value of the Rotation_Y parameter (in * arc-second). * @param rotationZArcSecond Value of the Rotation_Z parameter (in * arc-second). * @param scaleDifferencePPM Value of the Scale_Difference parameter (in * parts-per-million). * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createCoordinateFrameRotation( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, const std::vector &accuracies) { bool isGeocentric; bool isGeog2D; bool isGeog3D; getTransformationType(sourceCRSIn, targetCRSIn, isGeocentric, isGeog2D, isGeog3D); return createSevenParamsTransform( properties, createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent( properties, isGeocentric ? EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC : isGeog2D ? EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D : EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D)), sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre, translationZMetre, rotationXArcSecond, rotationYArcSecond, rotationZArcSecond, scaleDifferencePPM, accuracies); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static TransformationNNPtr createFifteenParamsTransform( const util::PropertyMap &properties, const util::PropertyMap &methodProperties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, double rateTranslationX, double rateTranslationY, double rateTranslationZ, double rateRotationX, double rateRotationY, double rateRotationZ, double rateScaleDifference, double referenceEpochYear, const std::vector &accuracies) { return Transformation::create( properties, sourceCRSIn, targetCRSIn, nullptr, methodProperties, VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_X_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Y_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Z_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_SCALE_DIFFERENCE), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_X_AXIS_TRANSLATION), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_Y_AXIS_TRANSLATION), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_Z_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_RATE_X_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_RATE_Y_AXIS_ROTATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_RATE_Z_AXIS_ROTATION), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_RATE_SCALE_DIFFERENCE), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_REFERENCE_EPOCH), }, VectorOfValues{ common::Length(translationXMetre), common::Length(translationYMetre), common::Length(translationZMetre), common::Angle(rotationXArcSecond, common::UnitOfMeasure::ARC_SECOND), common::Angle(rotationYArcSecond, common::UnitOfMeasure::ARC_SECOND), common::Angle(rotationZArcSecond, common::UnitOfMeasure::ARC_SECOND), common::Scale(scaleDifferencePPM, common::UnitOfMeasure::PARTS_PER_MILLION), common::Measure(rateTranslationX, common::UnitOfMeasure::METRE_PER_YEAR), common::Measure(rateTranslationY, common::UnitOfMeasure::METRE_PER_YEAR), common::Measure(rateTranslationZ, common::UnitOfMeasure::METRE_PER_YEAR), common::Measure(rateRotationX, common::UnitOfMeasure::ARC_SECOND_PER_YEAR), common::Measure(rateRotationY, common::UnitOfMeasure::ARC_SECOND_PER_YEAR), common::Measure(rateRotationZ, common::UnitOfMeasure::ARC_SECOND_PER_YEAR), common::Measure(rateScaleDifference, common::UnitOfMeasure::PPM_PER_YEAR), common::Measure(referenceEpochYear, common::UnitOfMeasure::YEAR), }, accuracies); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with Time Dependent position vector * transformation method. * * This is similar to createTimeDependentCoordinateFrameRotation(), except that * the sign of * the rotation terms is inverted. * * This method is defined as * * EPSG:1053. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param translationXMetre Value of the Translation_X parameter (in metre). * @param translationYMetre Value of the Translation_Y parameter (in metre). * @param translationZMetre Value of the Translation_Z parameter (in metre). * @param rotationXArcSecond Value of the Rotation_X parameter (in * arc-second). * @param rotationYArcSecond Value of the Rotation_Y parameter (in * arc-second). * @param rotationZArcSecond Value of the Rotation_Z parameter (in * arc-second). * @param scaleDifferencePPM Value of the Scale_Difference parameter (in * parts-per-million). * @param rateTranslationX Value of the rate of change of X-axis translation (in * metre/year) * @param rateTranslationY Value of the rate of change of Y-axis translation (in * metre/year) * @param rateTranslationZ Value of the rate of change of Z-axis translation (in * metre/year) * @param rateRotationX Value of the rate of change of X-axis rotation (in * arc-second/year) * @param rateRotationY Value of the rate of change of Y-axis rotation (in * arc-second/year) * @param rateRotationZ Value of the rate of change of Z-axis rotation (in * arc-second/year) * @param rateScaleDifference Value of the rate of change of scale difference * (in PPM/year) * @param referenceEpochYear Parameter reference epoch (in decimal year) * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createTimeDependentPositionVector( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, double rateTranslationX, double rateTranslationY, double rateTranslationZ, double rateRotationX, double rateRotationY, double rateRotationZ, double rateScaleDifference, double referenceEpochYear, const std::vector &accuracies) { bool isGeocentric; bool isGeog2D; bool isGeog3D; getTransformationType(sourceCRSIn, targetCRSIn, isGeocentric, isGeog2D, isGeog3D); return createFifteenParamsTransform( properties, createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent( properties, isGeocentric ? EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC : isGeog2D ? EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D : EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D)), sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre, translationZMetre, rotationXArcSecond, rotationYArcSecond, rotationZArcSecond, scaleDifferencePPM, rateTranslationX, rateTranslationY, rateTranslationZ, rateRotationX, rateRotationY, rateRotationZ, rateScaleDifference, referenceEpochYear, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with Time Dependent Position coordinate * frame rotation transformation method. * * This is similar to createTimeDependentPositionVector(), except that the sign * of * the rotation terms is inverted. * * This method is defined as * * EPSG:1056. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param translationXMetre Value of the Translation_X parameter (in metre). * @param translationYMetre Value of the Translation_Y parameter (in metre). * @param translationZMetre Value of the Translation_Z parameter (in metre). * @param rotationXArcSecond Value of the Rotation_X parameter (in * arc-second). * @param rotationYArcSecond Value of the Rotation_Y parameter (in * arc-second). * @param rotationZArcSecond Value of the Rotation_Z parameter (in * arc-second). * @param scaleDifferencePPM Value of the Scale_Difference parameter (in * parts-per-million). * @param rateTranslationX Value of the rate of change of X-axis translation (in * metre/year) * @param rateTranslationY Value of the rate of change of Y-axis translation (in * metre/year) * @param rateTranslationZ Value of the rate of change of Z-axis translation (in * metre/year) * @param rateRotationX Value of the rate of change of X-axis rotation (in * arc-second/year) * @param rateRotationY Value of the rate of change of Y-axis rotation (in * arc-second/year) * @param rateRotationZ Value of the rate of change of Z-axis rotation (in * arc-second/year) * @param rateScaleDifference Value of the rate of change of scale difference * (in PPM/year) * @param referenceEpochYear Parameter reference epoch (in decimal year) * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. * @throws InvalidOperation if the object cannot be constructed. */ TransformationNNPtr Transformation::createTimeDependentCoordinateFrameRotation( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double rotationXArcSecond, double rotationYArcSecond, double rotationZArcSecond, double scaleDifferencePPM, double rateTranslationX, double rateTranslationY, double rateTranslationZ, double rateRotationX, double rateRotationY, double rateRotationZ, double rateScaleDifference, double referenceEpochYear, const std::vector &accuracies) { bool isGeocentric; bool isGeog2D; bool isGeog3D; getTransformationType(sourceCRSIn, targetCRSIn, isGeocentric, isGeog2D, isGeog3D); return createFifteenParamsTransform( properties, createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent( properties, isGeocentric ? EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC : isGeog2D ? EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D : EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D)), sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre, translationZMetre, rotationXArcSecond, rotationYArcSecond, rotationZArcSecond, scaleDifferencePPM, rateTranslationX, rateTranslationY, rateTranslationZ, rateRotationX, rateRotationY, rateRotationZ, rateScaleDifference, referenceEpochYear, accuracies); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static TransformationNNPtr _createMolodensky( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, int methodEPSGCode, double translationXMetre, double translationYMetre, double translationZMetre, double semiMajorAxisDifferenceMetre, double flattingDifference, const std::vector &accuracies) { return Transformation::create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(methodEPSGCode), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_SEMI_MAJOR_AXIS_DIFFERENCE), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_FLATTENING_DIFFERENCE), }, createParams( common::Length(translationXMetre), common::Length(translationYMetre), common::Length(translationZMetre), common::Length(semiMajorAxisDifferenceMetre), common::Measure(flattingDifference, common::UnitOfMeasure::NONE)), accuracies); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with Molodensky method. * * @see createAbridgedMolodensky() for a related method. * * This method is defined as * * EPSG:9604. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param translationXMetre Value of the Translation_X parameter (in metre). * @param translationYMetre Value of the Translation_Y parameter (in metre). * @param translationZMetre Value of the Translation_Z parameter (in metre). * @param semiMajorAxisDifferenceMetre The difference between the semi-major * axis values of the ellipsoids used in the target and source CRS (in metre). * @param flattingDifference The difference between the flattening values of * the ellipsoids used in the target and source CRS. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. * @throws InvalidOperation if the object cannot be constructed. */ TransformationNNPtr Transformation::createMolodensky( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double semiMajorAxisDifferenceMetre, double flattingDifference, const std::vector &accuracies) { return _createMolodensky( properties, sourceCRSIn, targetCRSIn, EPSG_CODE_METHOD_MOLODENSKY, translationXMetre, translationYMetre, translationZMetre, semiMajorAxisDifferenceMetre, flattingDifference, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with Abridged Molodensky method. * * @see createdMolodensky() for a related method. * * This method is defined as * * EPSG:9605. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param translationXMetre Value of the Translation_X parameter (in metre). * @param translationYMetre Value of the Translation_Y parameter (in metre). * @param translationZMetre Value of the Translation_Z parameter (in metre). * @param semiMajorAxisDifferenceMetre The difference between the semi-major * axis values of the ellipsoids used in the target and source CRS (in metre). * @param flattingDifference The difference between the flattening values of * the ellipsoids used in the target and source CRS. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. * @throws InvalidOperation if the object cannot be constructed. */ TransformationNNPtr Transformation::createAbridgedMolodensky( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, double translationXMetre, double translationYMetre, double translationZMetre, double semiMajorAxisDifferenceMetre, double flattingDifference, const std::vector &accuracies) { return _createMolodensky(properties, sourceCRSIn, targetCRSIn, EPSG_CODE_METHOD_ABRIDGED_MOLODENSKY, translationXMetre, translationYMetre, translationZMetre, semiMajorAxisDifferenceMetre, flattingDifference, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation from TOWGS84 parameters. * * This is a helper of createPositionVector() with the source CRS being the * GeographicCRS of sourceCRSIn, and the target CRS being EPSG:4326 * * @param sourceCRSIn Source CRS. * @param TOWGS84Parameters The vector of 3 double values (Translation_X,_Y,_Z) * or 7 double values (Translation_X,_Y,_Z, Rotation_X,_Y,_Z, Scale_Difference) * passed to createPositionVector() * @return new Transformation. * @throws InvalidOperation if the object cannot be constructed. */ TransformationNNPtr Transformation::createTOWGS84( const crs::CRSNNPtr &sourceCRSIn, const std::vector &TOWGS84Parameters) // throw InvalidOperation { if (TOWGS84Parameters.size() != 3 && TOWGS84Parameters.size() != 7) { throw InvalidOperation( "Invalid number of elements in TOWGS84Parameters"); } auto transformSourceGeodCRS = sourceCRSIn->extractGeodeticCRS(); if (!transformSourceGeodCRS) { throw InvalidOperation( "Cannot find GeodeticCRS in sourceCRS of TOWGS84 transformation"); } util::PropertyMap properties; properties.set(common::IdentifiedObject::NAME_KEY, concat("Transformation from ", transformSourceGeodCRS->nameStr(), " to WGS84")); auto targetCRS = dynamic_cast( transformSourceGeodCRS.get()) || transformSourceGeodCRS->isSphericalPlanetocentric() ? util::nn_static_pointer_cast( crs::GeographicCRS::EPSG_4326) : util::nn_static_pointer_cast( crs::GeodeticCRS::EPSG_4978); crs::CRSNNPtr transformSourceCRS = NN_NO_CHECK(transformSourceGeodCRS); if (TOWGS84Parameters.size() == 3) { return createGeocentricTranslations( properties, transformSourceCRS, targetCRS, TOWGS84Parameters[0], TOWGS84Parameters[1], TOWGS84Parameters[2], {}); } return createPositionVector( properties, transformSourceCRS, targetCRS, TOWGS84Parameters[0], TOWGS84Parameters[1], TOWGS84Parameters[2], TOWGS84Parameters[3], TOWGS84Parameters[4], TOWGS84Parameters[5], TOWGS84Parameters[6], {}); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with NTv2 method. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param filename NTv2 filename. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createNTv2( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const std::string &filename, const std::vector &accuracies) { return create(properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_NTV2), VectorOfParameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE)}, VectorOfValues{ParameterValue::createFilename(filename)}, accuracies); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static TransformationNNPtr _createGravityRelatedHeightToGeographic3D( const util::PropertyMap &properties, bool inverse, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const std::string &filename, const std::vector &accuracies) { return Transformation::create( properties, sourceCRSIn, targetCRSIn, interpolationCRSIn, util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, inverse ? INVERSE_OF + PROJ_WKT2_NAME_METHOD_HEIGHT_TO_GEOG3D : PROJ_WKT2_NAME_METHOD_HEIGHT_TO_GEOG3D), VectorOfParameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME)}, VectorOfValues{ParameterValue::createFilename(filename)}, accuracies); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a transformation from GravityRelatedHeight to * Geographic3D * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param interpolationCRSIn Interpolation CRS. (might be null) * @param filename GRID filename. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createGravityRelatedHeightToGeographic3D( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn, const std::string &filename, const std::vector &accuracies) { return _createGravityRelatedHeightToGeographic3D( properties, false, sourceCRSIn, targetCRSIn, interpolationCRSIn, filename, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with method VERTCON * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param filename GRID filename. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createVERTCON( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const std::string &filename, const std::vector &accuracies) { return create(properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_VERTCON), VectorOfParameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_VERTICAL_OFFSET_FILE)}, VectorOfValues{ParameterValue::createFilename(filename)}, accuracies); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static inline std::vector buildAccuracyZero() { return std::vector{ metadata::PositionalAccuracy::create("0")}; } // --------------------------------------------------------------------------- //! @endcond /** \brief Instantiate a transformation with method Longitude rotation * * This method is defined as * * EPSG:9601. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param offset Longitude offset to add. * @return new Transformation. */ TransformationNNPtr Transformation::createLongitudeRotation( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offset) { return create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_LONGITUDE_ROTATION), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET)}, VectorOfValues{ParameterValue::create(offset)}, buildAccuracyZero()); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with method Geographic 2D offsets * * This method is defined as * * EPSG:9619. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param offsetLat Latitude offset to add. * @param offsetLong Longitude offset to add. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createGeographic2DOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offsetLat, const common::Angle &offsetLong, const std::vector &accuracies) { return create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LATITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET)}, VectorOfValues{offsetLat, offsetLong}, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with method Geographic 3D offsets * * This method is defined as * * EPSG:9660. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param offsetLat Latitude offset to add. * @param offsetLong Longitude offset to add. * @param offsetHeight Height offset to add. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createGeographic3DOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight, const std::vector &accuracies) { return create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LATITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_VERTICAL_OFFSET)}, VectorOfValues{offsetLat, offsetLong, offsetHeight}, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with method Geographic 2D with * height * offsets * * This method is defined as * * EPSG:9618. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param offsetLat Latitude offset to add. * @param offsetLong Longitude offset to add. * @param offsetHeight Geoid undulation to add. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createGeographic2DWithHeightOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Angle &offsetLat, const common::Angle &offsetLong, const common::Length &offsetHeight, const std::vector &accuracies) { return create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode( EPSG_CODE_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LATITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_GEOID_HEIGHT)}, VectorOfValues{offsetLat, offsetLong, offsetHeight}, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with method Cartesian grid offsets * * This method is defined as * * EPSG:9656. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param eastingOffset Easting offset to add. * @param northingOffset Northing offset to add. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. * @since PROJ 9.5.0 */ TransformationNNPtr Transformation::createCartesianGridOffsets( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Length &eastingOffset, const common::Length &northingOffset, const std::vector &accuracies) { return create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS), VectorOfParameters{ createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_EASTING_OFFSET), createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_NORTHING_OFFSET)}, VectorOfValues{eastingOffset, northingOffset}, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation with method Vertical Offset. * * This method is defined as * * EPSG:9616. * * @param properties See \ref general_properties of the Transformation. * At minimum the name should be defined. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param offsetHeight Geoid undulation to add. * @param accuracies Vector of positional accuracy (might be empty). * @return new Transformation. */ TransformationNNPtr Transformation::createVerticalOffset( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Length &offsetHeight, const std::vector &accuracies) { return create(properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_VERTICAL_OFFSET), VectorOfParameters{createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_VERTICAL_OFFSET)}, VectorOfValues{offsetHeight}, accuracies); } // --------------------------------------------------------------------------- /** \brief Instantiate a transformation based on the Change of Vertical Unit * method. * * This method is defined as * * EPSG:1069 [DEPRECATED]. * * @param properties See \ref general_properties of the conversion. If the name * is not provided, it is automatically set. * @param sourceCRSIn Source CRS. * @param targetCRSIn Target CRS. * @param factor Conversion factor * @param accuracies Vector of positional accuracy (might be empty). * @return a new Transformation. */ TransformationNNPtr Transformation::createChangeVerticalUnit( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Scale &factor, const std::vector &accuracies) { return create( properties, sourceCRSIn, targetCRSIn, nullptr, createMethodMapNameEPSGCode(EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT), VectorOfParameters{ createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR), }, VectorOfValues{ factor, }, accuracies); } // --------------------------------------------------------------------------- // to avoid -0... static double negate(double val) { if (val != 0) { return -val; } return 0.0; } // --------------------------------------------------------------------------- static CoordinateOperationPtr createApproximateInverseIfPossible(const Transformation *op) { bool sevenParamsTransform = false; bool fifteenParamsTransform = false; const auto &method = op->method(); const auto &methodName = method->nameStr(); const int methodEPSGCode = method->getEPSGCode(); const auto paramCount = op->parameterValues().size(); const bool isPositionVector = ci_find(methodName, "Position Vector") != std::string::npos; const bool isCoordinateFrame = ci_find(methodName, "Coordinate Frame") != std::string::npos; // See end of "2.4.3.3 Helmert 7-parameter transformations" // in EPSG 7-2 guidance // For practical purposes, the inverse of 7- or 15-parameters Helmert // can be obtained by using the forward method with all parameters // negated // (except reference epoch!) // So for WKT export use that. But for PROJ string, we use the +inv flag // so as to get "perfect" round-tripability. if ((paramCount == 7 && isCoordinateFrame && !isTimeDependent(methodName)) || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D || methodEPSGCode == EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D) { sevenParamsTransform = true; } else if ( (paramCount == 15 && isCoordinateFrame && isTimeDependent(methodName)) || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D) { fifteenParamsTransform = true; } else if ((paramCount == 7 && isPositionVector && !isTimeDependent(methodName)) || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D) { sevenParamsTransform = true; } else if ( (paramCount == 15 && isPositionVector && isTimeDependent(methodName)) || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D) { fifteenParamsTransform = true; } if (sevenParamsTransform || fifteenParamsTransform) { double neg_x = negate(op->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION)); double neg_y = negate(op->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION)); double neg_z = negate(op->parameterValueNumericAsSI( EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION)); double neg_rx = negate( op->parameterValueNumeric(EPSG_CODE_PARAMETER_X_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND)); double neg_ry = negate( op->parameterValueNumeric(EPSG_CODE_PARAMETER_Y_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND)); double neg_rz = negate( op->parameterValueNumeric(EPSG_CODE_PARAMETER_Z_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND)); double neg_scaleDiff = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_SCALE_DIFFERENCE, common::UnitOfMeasure::PARTS_PER_MILLION)); auto methodProperties = util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, methodName); int method_epsg_code = method->getEPSGCode(); if (method_epsg_code) { methodProperties .set(metadata::Identifier::CODESPACE_KEY, metadata::Identifier::EPSG) .set(metadata::Identifier::CODE_KEY, method_epsg_code); } bool exactInverse = (neg_rx == 0 && neg_ry == 0 && neg_rz == 0 && neg_scaleDiff == 0); if (fifteenParamsTransform) { double neg_rate_x = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_X_AXIS_TRANSLATION, common::UnitOfMeasure::METRE_PER_YEAR)); double neg_rate_y = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Y_AXIS_TRANSLATION, common::UnitOfMeasure::METRE_PER_YEAR)); double neg_rate_z = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Z_AXIS_TRANSLATION, common::UnitOfMeasure::METRE_PER_YEAR)); double neg_rate_rx = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_X_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND_PER_YEAR)); double neg_rate_ry = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Y_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND_PER_YEAR)); double neg_rate_rz = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_Z_AXIS_ROTATION, common::UnitOfMeasure::ARC_SECOND_PER_YEAR)); double neg_rate_scaleDiff = negate(op->parameterValueNumeric( EPSG_CODE_PARAMETER_RATE_SCALE_DIFFERENCE, common::UnitOfMeasure::PPM_PER_YEAR)); double referenceEpochYear = op->parameterValueNumeric(EPSG_CODE_PARAMETER_REFERENCE_EPOCH, common::UnitOfMeasure::YEAR); exactInverse &= (neg_rate_rx == 0 && neg_rate_ry == 0 && neg_rate_rz == 0 && neg_rate_scaleDiff == 0); return util::nn_static_pointer_cast( createFifteenParamsTransform( createPropertiesForInverse(op, false, !exactInverse), methodProperties, op->targetCRS(), op->sourceCRS(), neg_x, neg_y, neg_z, neg_rx, neg_ry, neg_rz, neg_scaleDiff, neg_rate_x, neg_rate_y, neg_rate_z, neg_rate_rx, neg_rate_ry, neg_rate_rz, neg_rate_scaleDiff, referenceEpochYear, op->coordinateOperationAccuracies())) .as_nullable(); } else { return util::nn_static_pointer_cast( createSevenParamsTransform( createPropertiesForInverse(op, false, !exactInverse), methodProperties, op->targetCRS(), op->sourceCRS(), neg_x, neg_y, neg_z, neg_rx, neg_ry, neg_rz, neg_scaleDiff, op->coordinateOperationAccuracies())) .as_nullable(); } } return nullptr; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress TransformationNNPtr Transformation::Private::registerInv(const Transformation *thisIn, TransformationNNPtr invTransform) { invTransform->d->forwardOperation_ = thisIn->shallowClone().as_nullable(); invTransform->setHasBallparkTransformation( thisIn->hasBallparkTransformation()); invTransform->setRequiresPerCoordinateInputTime( thisIn->requiresPerCoordinateInputTime()); return invTransform; } //! @endcond // --------------------------------------------------------------------------- CoordinateOperationNNPtr Transformation::inverse() const { return inverseAsTransformation(); } // --------------------------------------------------------------------------- TransformationNNPtr Transformation::inverseAsTransformation() const { if (d->forwardOperation_) { return NN_NO_CHECK(d->forwardOperation_); } const auto &l_method = method(); const auto &methodName = l_method->nameStr(); const int methodEPSGCode = l_method->getEPSGCode(); const auto &l_sourceCRS = sourceCRS(); const auto &l_targetCRS = targetCRS(); // For geocentric translation, the inverse is exactly the negation of // the parameters. if (ci_find(methodName, "Geocentric translations") != std::string::npos || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D || methodEPSGCode == EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D) { double x = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION); double y = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION); double z = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION); auto properties = createPropertiesForInverse(this, false, false); return Private::registerInv( this, create(properties, l_targetCRS, l_sourceCRS, nullptr, createMethodMapNameEPSGCode( useOperationMethodEPSGCodeIfPresent( properties, methodEPSGCode)), VectorOfParameters{ createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION), createOpParamNameEPSGCode( EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION), }, createParams(common::Length(negate(x)), common::Length(negate(y)), common::Length(negate(z))), coordinateOperationAccuracies())); } if (methodEPSGCode == EPSG_CODE_METHOD_MOLODENSKY || methodEPSGCode == EPSG_CODE_METHOD_ABRIDGED_MOLODENSKY) { double x = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION); double y = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION); double z = parameterValueNumericAsSI(EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION); double da = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_SEMI_MAJOR_AXIS_DIFFERENCE); double df = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_FLATTENING_DIFFERENCE); if (methodEPSGCode == EPSG_CODE_METHOD_ABRIDGED_MOLODENSKY) { return Private::registerInv( this, createAbridgedMolodensky( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, negate(x), negate(y), negate(z), negate(da), negate(df), coordinateOperationAccuracies())); } else { return Private::registerInv( this, createMolodensky(createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, negate(x), negate(y), negate(z), negate(da), negate(df), coordinateOperationAccuracies())); } } if (isLongitudeRotation()) { const auto &offset = parameterValueMeasure(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET); const common::Angle newOffset(negate(offset.value()), offset.unit()); return Private::registerInv( this, createLongitudeRotation( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, newOffset)); } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS) { const auto &offsetLat = parameterValueMeasure(EPSG_CODE_PARAMETER_LATITUDE_OFFSET); const common::Angle newOffsetLat(negate(offsetLat.value()), offsetLat.unit()); const auto &offsetLong = parameterValueMeasure(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET); const common::Angle newOffsetLong(negate(offsetLong.value()), offsetLong.unit()); return Private::registerInv( this, createGeographic2DOffsets( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, newOffsetLat, newOffsetLong, coordinateOperationAccuracies())); } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS) { const auto &offsetLat = parameterValueMeasure(EPSG_CODE_PARAMETER_LATITUDE_OFFSET); const common::Angle newOffsetLat(negate(offsetLat.value()), offsetLat.unit()); const auto &offsetLong = parameterValueMeasure(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET); const common::Angle newOffsetLong(negate(offsetLong.value()), offsetLong.unit()); const auto &offsetHeight = parameterValueMeasure(EPSG_CODE_PARAMETER_VERTICAL_OFFSET); const common::Length newOffsetHeight(negate(offsetHeight.value()), offsetHeight.unit()); return Private::registerInv( this, createGeographic3DOffsets( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, newOffsetLat, newOffsetLong, newOffsetHeight, coordinateOperationAccuracies())); } if (methodEPSGCode == EPSG_CODE_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS) { const auto &offsetLat = parameterValueMeasure(EPSG_CODE_PARAMETER_LATITUDE_OFFSET); const common::Angle newOffsetLat(negate(offsetLat.value()), offsetLat.unit()); const auto &offsetLong = parameterValueMeasure(EPSG_CODE_PARAMETER_LONGITUDE_OFFSET); const common::Angle newOffsetLong(negate(offsetLong.value()), offsetLong.unit()); const auto &offsetHeight = parameterValueMeasure(EPSG_CODE_PARAMETER_GEOID_HEIGHT); const common::Length newOffsetHeight(negate(offsetHeight.value()), offsetHeight.unit()); return Private::registerInv( this, createGeographic2DWithHeightOffsets( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, newOffsetLat, newOffsetLong, newOffsetHeight, coordinateOperationAccuracies())); } if (methodEPSGCode == EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS) { const auto &eastingOffset = parameterValueMeasure(EPSG_CODE_PARAMETER_EASTING_OFFSET); const common::Length newEastingOffset(negate(eastingOffset.value()), eastingOffset.unit()); const auto &northingOffset = parameterValueMeasure(EPSG_CODE_PARAMETER_NORTHING_OFFSET); const common::Length newNorthingOffset(negate(northingOffset.value()), northingOffset.unit()); return Private::registerInv( this, createCartesianGridOffsets( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, newEastingOffset, newNorthingOffset, coordinateOperationAccuracies())); } if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET) { const auto &offsetHeight = parameterValueMeasure(EPSG_CODE_PARAMETER_VERTICAL_OFFSET); const common::Length newOffsetHeight(negate(offsetHeight.value()), offsetHeight.unit()); return Private::registerInv( this, createVerticalOffset(createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, newOffsetHeight, coordinateOperationAccuracies())); } if (methodEPSGCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT) { const double convFactor = parameterValueNumericAsSI( EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR); // coverity[divide_by_zero] const double invConvFactor = convFactor == 0.0 ? 0.0 : 1.0 / convFactor; return Private::registerInv( this, createChangeVerticalUnit( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, common::Scale(invConvFactor), coordinateOperationAccuracies())); } #ifdef notdef // We don't need that currently, but we might... if (methodEPSGCode == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) { return Private::registerInv( this, createHeightDepthReversal( createPropertiesForInverse(this, false, false), l_targetCRS, l_sourceCRS, coordinateOperationAccuracies())); } #endif return InverseTransformation::create(NN_NO_CHECK( util::nn_dynamic_pointer_cast(shared_from_this()))); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- InverseTransformation::InverseTransformation(const TransformationNNPtr &forward) : Transformation( forward->targetCRS(), forward->sourceCRS(), forward->interpolationCRS(), OperationMethod::create(createPropertiesForInverse(forward->method()), forward->method()->parameters()), forward->parameterValues(), forward->coordinateOperationAccuracies()), InverseCoordinateOperation(forward, true) { setPropertiesFromForward(); } // --------------------------------------------------------------------------- InverseTransformation::~InverseTransformation() = default; // --------------------------------------------------------------------------- TransformationNNPtr InverseTransformation::create(const TransformationNNPtr &forward) { auto conv = util::nn_make_shared(forward); conv->assignSelf(conv); return conv; } // --------------------------------------------------------------------------- TransformationNNPtr InverseTransformation::inverseAsTransformation() const { return NN_NO_CHECK( util::nn_dynamic_pointer_cast(forwardOperation_)); } // --------------------------------------------------------------------------- void InverseTransformation::_exportToWKT(io::WKTFormatter *formatter) const { auto approxInverse = createApproximateInverseIfPossible( util::nn_dynamic_pointer_cast(forwardOperation_).get()); if (approxInverse) { approxInverse->_exportToWKT(formatter); } else { Transformation::_exportToWKT(formatter); } } // --------------------------------------------------------------------------- CoordinateOperationNNPtr InverseTransformation::_shallowClone() const { auto op = InverseTransformation::nn_make_shared( inverseAsTransformation()->shallowClone()); op->assignSelf(op); op->setCRSs(this, false); return util::nn_static_pointer_cast(op); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Transformation::_exportToWKT(io::WKTFormatter *formatter) const { exportTransformationToWKT(formatter); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void Transformation::_exportToJSON( io::JSONFormatter *formatter) const // throw(FormattingException) { auto writer = formatter->writer(); auto objectContext(formatter->MakeObjectContext( formatter->abridgedTransformation() ? "AbridgedTransformation" : "Transformation", !identifiers().empty())); writer->AddObjKey("name"); const auto &l_name = nameStr(); if (l_name.empty()) { writer->Add("unnamed"); } else { writer->Add(l_name); } if (!formatter->abridgedTransformation()) { writer->AddObjKey("source_crs"); formatter->setAllowIDInImmediateChild(); sourceCRS()->_exportToJSON(formatter); writer->AddObjKey("target_crs"); formatter->setAllowIDInImmediateChild(); targetCRS()->_exportToJSON(formatter); const auto &l_interpolationCRS = interpolationCRS(); if (l_interpolationCRS) { writer->AddObjKey("interpolation_crs"); formatter->setAllowIDInImmediateChild(); l_interpolationCRS->_exportToJSON(formatter); } } else { if (formatter->abridgedTransformationWriteSourceCRS()) { writer->AddObjKey("source_crs"); formatter->setAllowIDInImmediateChild(); sourceCRS()->_exportToJSON(formatter); } } writer->AddObjKey("method"); formatter->setOmitTypeInImmediateChild(); formatter->setAllowIDInImmediateChild(); method()->_exportToJSON(formatter); writer->AddObjKey("parameters"); { auto parametersContext(writer->MakeArrayContext(false)); for (const auto &genOpParamvalue : parameterValues()) { formatter->setAllowIDInImmediateChild(); formatter->setOmitTypeInImmediateChild(); genOpParamvalue->_exportToJSON(formatter); } } if (!formatter->abridgedTransformation()) { if (!coordinateOperationAccuracies().empty()) { writer->AddObjKey("accuracy"); writer->Add(coordinateOperationAccuracies()[0]->value()); } } if (formatter->abridgedTransformation()) { if (formatter->outputId()) { formatID(formatter); } } else { ObjectUsage::baseExportToJSON(formatter); } } //! @endcond // --------------------------------------------------------------------------- void Transformation::_exportToPROJString( io::PROJStringFormatter *formatter) const // throw(FormattingException) { if (formatter->convention() == io::PROJStringFormatter::Convention::PROJ_4) { throw io::FormattingException( "Transformation cannot be exported as a PROJ.4 string"); } if (exportToPROJStringGeneric(formatter)) { return; } throw io::FormattingException("Unimplemented " + nameStr()); } } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/vectorofvaluesparams.cpp000664 001754 001755 00000011234 14764566077 023357 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "vectorofvaluesparams.hpp" // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress static std::vector buildParameterValueFromMeasure( const std::initializer_list &list) { std::vector res; for (const auto &v : list) { res.emplace_back(ParameterValue::create(v)); } return res; } VectorOfValues::VectorOfValues(std::initializer_list list) : std::vector(buildParameterValueFromMeasure(list)) {} // This way, we disable inlining of destruction, and save a lot of space VectorOfValues::~VectorOfValues() = default; VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3) { return VectorOfValues{ParameterValue::create(m1), ParameterValue::create(m2), ParameterValue::create(m3)}; } VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4) { return VectorOfValues{ ParameterValue::create(m1), ParameterValue::create(m2), ParameterValue::create(m3), ParameterValue::create(m4)}; } VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4, const common::Measure &m5) { return VectorOfValues{ ParameterValue::create(m1), ParameterValue::create(m2), ParameterValue::create(m3), ParameterValue::create(m4), ParameterValue::create(m5), }; } VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4, const common::Measure &m5, const common::Measure &m6) { return VectorOfValues{ ParameterValue::create(m1), ParameterValue::create(m2), ParameterValue::create(m3), ParameterValue::create(m4), ParameterValue::create(m5), ParameterValue::create(m6), }; } VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4, const common::Measure &m5, const common::Measure &m6, const common::Measure &m7) { return VectorOfValues{ ParameterValue::create(m1), ParameterValue::create(m2), ParameterValue::create(m3), ParameterValue::create(m4), ParameterValue::create(m5), ParameterValue::create(m6), ParameterValue::create(m7), }; } // This way, we disable inlining of destruction, and save a lot of space VectorOfParameters::~VectorOfParameters() = default; //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END proj-9.6.0/src/iso19111/operation/vectorofvaluesparams.hpp000664 001754 001755 00000010025 14764566077 023361 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef VECTOROFVALUESPARAMS_HPP #define VECTOROFVALUESPARAMS_HPP #include "proj/coordinateoperation.hpp" #include "proj/util.hpp" // --------------------------------------------------------------------------- NS_PROJ_START namespace operation { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct VectorOfValues : public std::vector { VectorOfValues() : std::vector() {} explicit VectorOfValues(std::initializer_list list) : std::vector(list) {} explicit VectorOfValues(std::initializer_list list); VectorOfValues(const VectorOfValues &) = delete; VectorOfValues(VectorOfValues &&) = default; ~VectorOfValues(); }; VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3); VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4); VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4, const common::Measure &m5); VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4, const common::Measure &m5, const common::Measure &m6); VectorOfValues createParams(const common::Measure &m1, const common::Measure &m2, const common::Measure &m3, const common::Measure &m4, const common::Measure &m5, const common::Measure &m6, const common::Measure &m7); // --------------------------------------------------------------------------- struct VectorOfParameters : public std::vector { VectorOfParameters() : std::vector() {} explicit VectorOfParameters( std::initializer_list list) : std::vector(list) {} VectorOfParameters(const VectorOfParameters &) = delete; ~VectorOfParameters(); }; //! @endcond // --------------------------------------------------------------------------- } // namespace operation NS_PROJ_END #endif // VECTOROFVALUESPARAMS_HPP proj-9.6.0/src/iso19111/static.cpp000664 001754 001755 00000065244 14764566077 016405 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "operation/oputils.hpp" #include "proj/internal/coordinatesystem_internal.hpp" #include "proj/internal/io_internal.hpp" #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif // We put all static definitions in the same compilation unit, and in // increasing order of dependency, to avoid the "static initialization fiasco" // See https://isocpp.org/wiki/faq/ctors#static-init-order using namespace NS_PROJ::crs; using namespace NS_PROJ::datum; using namespace NS_PROJ::io; using namespace NS_PROJ::metadata; using namespace NS_PROJ::operation; using namespace NS_PROJ::util; NS_PROJ_START // --------------------------------------------------------------------------- const NameSpaceNNPtr NameSpace::GLOBAL(NameSpace::createGLOBAL()); // --------------------------------------------------------------------------- /** \brief Key to set the authority citation of a metadata::Identifier. * * The value is to be provided as a string or a metadata::Citation. */ const std::string Identifier::AUTHORITY_KEY("authority"); /** \brief Key to set the code of a metadata::Identifier. * * The value is to be provided as a integer or a string. */ const std::string Identifier::CODE_KEY("code"); /** \brief Key to set the organization responsible for definition and * maintenance of the code of a metadata::Identifier. * * The value is to be provided as a string. */ const std::string Identifier::CODESPACE_KEY("codespace"); /** \brief Key to set the version identifier for the namespace of a * metadata::Identifier. * * The value is to be provided as a string. */ const std::string Identifier::VERSION_KEY("version"); /** \brief Key to set the natural language description of the meaning of the * code value of a metadata::Identifier. * * The value is to be provided as a string. */ const std::string Identifier::DESCRIPTION_KEY("description"); /** \brief Key to set the URI of a metadata::Identifier. * * The value is to be provided as a string. */ const std::string Identifier::URI_KEY("uri"); /** \brief EPSG codespace. */ const std::string Identifier::EPSG("EPSG"); /** \brief OGC codespace. */ const std::string Identifier::OGC("OGC"); // --------------------------------------------------------------------------- /** \brief Key to set the name of a common::IdentifiedObject * * The value is to be provided as a string or metadata::IdentifierNNPtr. */ const std::string common::IdentifiedObject::NAME_KEY("name"); /** \brief Key to set the identifier(s) of a common::IdentifiedObject * * The value is to be provided as a common::IdentifierNNPtr or a * util::ArrayOfBaseObjectNNPtr * of common::IdentifierNNPtr. */ const std::string common::IdentifiedObject::IDENTIFIERS_KEY("identifiers"); /** \brief Key to set the alias(es) of a common::IdentifiedObject * * The value is to be provided as string, a util::GenericNameNNPtr or a * util::ArrayOfBaseObjectNNPtr * of util::GenericNameNNPtr. */ const std::string common::IdentifiedObject::ALIAS_KEY("alias"); /** \brief Key to set the remarks of a common::IdentifiedObject * * The value is to be provided as a string. */ const std::string common::IdentifiedObject::REMARKS_KEY("remarks"); /** \brief Key to set the deprecation flag of a common::IdentifiedObject * * The value is to be provided as a boolean. */ const std::string common::IdentifiedObject::DEPRECATED_KEY("deprecated"); // --------------------------------------------------------------------------- /** \brief Key to set the scope of a common::ObjectUsage * * The value is to be provided as a string. */ const std::string common::ObjectUsage::SCOPE_KEY("scope"); /** \brief Key to set the domain of validity of a common::ObjectUsage * * The value is to be provided as a common::ExtentNNPtr. */ const std::string common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY("domainOfValidity"); /** \brief Key to set the object domain(s) of a common::ObjectUsage * * The value is to be provided as a common::ObjectDomainNNPtr or a * util::ArrayOfBaseObjectNNPtr * of common::ObjectDomainNNPtr. */ const std::string common::ObjectUsage::OBJECT_DOMAIN_KEY("objectDomain"); // --------------------------------------------------------------------------- /** \brief World extent. */ const ExtentNNPtr Extent::WORLD(Extent::createFromBBOX(-180, -90, 180, 90, util::optional("World"))); // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::vector WKTConstants::constants_; const char *WKTConstants::createAndAddToConstantList(const char *text) { WKTConstants::constants_.push_back(text); return text; } #define DEFINE_WKT_CONSTANT(x) \ const std::string WKTConstants::x(createAndAddToConstantList(#x)) DEFINE_WKT_CONSTANT(GEOCCS); DEFINE_WKT_CONSTANT(GEOGCS); DEFINE_WKT_CONSTANT(DATUM); DEFINE_WKT_CONSTANT(UNIT); DEFINE_WKT_CONSTANT(SPHEROID); DEFINE_WKT_CONSTANT(AXIS); DEFINE_WKT_CONSTANT(PRIMEM); DEFINE_WKT_CONSTANT(AUTHORITY); DEFINE_WKT_CONSTANT(PROJCS); DEFINE_WKT_CONSTANT(PROJECTION); DEFINE_WKT_CONSTANT(PARAMETER); DEFINE_WKT_CONSTANT(VERT_CS); DEFINE_WKT_CONSTANT(VERTCS); DEFINE_WKT_CONSTANT(VERT_DATUM); DEFINE_WKT_CONSTANT(COMPD_CS); DEFINE_WKT_CONSTANT(TOWGS84); DEFINE_WKT_CONSTANT(EXTENSION); DEFINE_WKT_CONSTANT(LOCAL_CS); DEFINE_WKT_CONSTANT(LOCAL_DATUM); DEFINE_WKT_CONSTANT(LINUNIT); DEFINE_WKT_CONSTANT(GEODCRS); DEFINE_WKT_CONSTANT(LENGTHUNIT); DEFINE_WKT_CONSTANT(ANGLEUNIT); DEFINE_WKT_CONSTANT(SCALEUNIT); DEFINE_WKT_CONSTANT(TIMEUNIT); DEFINE_WKT_CONSTANT(ELLIPSOID); const std::string WKTConstants::CS_(createAndAddToConstantList("CS")); DEFINE_WKT_CONSTANT(ID); DEFINE_WKT_CONSTANT(PROJCRS); DEFINE_WKT_CONSTANT(BASEGEODCRS); DEFINE_WKT_CONSTANT(MERIDIAN); DEFINE_WKT_CONSTANT(ORDER); DEFINE_WKT_CONSTANT(ANCHOR); DEFINE_WKT_CONSTANT(ANCHOREPOCH); DEFINE_WKT_CONSTANT(CONVERSION); DEFINE_WKT_CONSTANT(METHOD); DEFINE_WKT_CONSTANT(REMARK); DEFINE_WKT_CONSTANT(GEOGCRS); DEFINE_WKT_CONSTANT(BASEGEOGCRS); DEFINE_WKT_CONSTANT(SCOPE); DEFINE_WKT_CONSTANT(AREA); DEFINE_WKT_CONSTANT(BBOX); DEFINE_WKT_CONSTANT(CITATION); DEFINE_WKT_CONSTANT(URI); DEFINE_WKT_CONSTANT(VERTCRS); DEFINE_WKT_CONSTANT(VDATUM); DEFINE_WKT_CONSTANT(COMPOUNDCRS); DEFINE_WKT_CONSTANT(PARAMETERFILE); DEFINE_WKT_CONSTANT(COORDINATEOPERATION); DEFINE_WKT_CONSTANT(SOURCECRS); DEFINE_WKT_CONSTANT(TARGETCRS); DEFINE_WKT_CONSTANT(INTERPOLATIONCRS); DEFINE_WKT_CONSTANT(OPERATIONACCURACY); DEFINE_WKT_CONSTANT(CONCATENATEDOPERATION); DEFINE_WKT_CONSTANT(STEP); DEFINE_WKT_CONSTANT(BOUNDCRS); DEFINE_WKT_CONSTANT(ABRIDGEDTRANSFORMATION); DEFINE_WKT_CONSTANT(DERIVINGCONVERSION); DEFINE_WKT_CONSTANT(TDATUM); DEFINE_WKT_CONSTANT(CALENDAR); DEFINE_WKT_CONSTANT(TIMEORIGIN); DEFINE_WKT_CONSTANT(TIMECRS); DEFINE_WKT_CONSTANT(VERTICALEXTENT); DEFINE_WKT_CONSTANT(TIMEEXTENT); DEFINE_WKT_CONSTANT(USAGE); DEFINE_WKT_CONSTANT(DYNAMIC); DEFINE_WKT_CONSTANT(FRAMEEPOCH); DEFINE_WKT_CONSTANT(MODEL); DEFINE_WKT_CONSTANT(VELOCITYGRID); DEFINE_WKT_CONSTANT(ENSEMBLE); DEFINE_WKT_CONSTANT(MEMBER); DEFINE_WKT_CONSTANT(ENSEMBLEACCURACY); DEFINE_WKT_CONSTANT(DERIVEDPROJCRS); DEFINE_WKT_CONSTANT(BASEPROJCRS); DEFINE_WKT_CONSTANT(EDATUM); DEFINE_WKT_CONSTANT(ENGCRS); DEFINE_WKT_CONSTANT(PDATUM); DEFINE_WKT_CONSTANT(PARAMETRICCRS); DEFINE_WKT_CONSTANT(PARAMETRICUNIT); DEFINE_WKT_CONSTANT(BASEVERTCRS); DEFINE_WKT_CONSTANT(BASEENGCRS); DEFINE_WKT_CONSTANT(BASEPARAMCRS); DEFINE_WKT_CONSTANT(BASETIMECRS); DEFINE_WKT_CONSTANT(VERSION); DEFINE_WKT_CONSTANT(GEOIDMODEL); DEFINE_WKT_CONSTANT(COORDINATEMETADATA); DEFINE_WKT_CONSTANT(EPOCH); DEFINE_WKT_CONSTANT(AXISMINVALUE); DEFINE_WKT_CONSTANT(AXISMAXVALUE); DEFINE_WKT_CONSTANT(RANGEMEANING); DEFINE_WKT_CONSTANT(POINTMOTIONOPERATION); DEFINE_WKT_CONSTANT(GEODETICCRS); DEFINE_WKT_CONSTANT(GEODETICDATUM); DEFINE_WKT_CONSTANT(PROJECTEDCRS); DEFINE_WKT_CONSTANT(PRIMEMERIDIAN); DEFINE_WKT_CONSTANT(GEOGRAPHICCRS); DEFINE_WKT_CONSTANT(TRF); DEFINE_WKT_CONSTANT(VERTICALCRS); DEFINE_WKT_CONSTANT(VERTICALDATUM); DEFINE_WKT_CONSTANT(VRF); DEFINE_WKT_CONSTANT(TIMEDATUM); DEFINE_WKT_CONSTANT(TEMPORALQUANTITY); DEFINE_WKT_CONSTANT(ENGINEERINGDATUM); DEFINE_WKT_CONSTANT(ENGINEERINGCRS); DEFINE_WKT_CONSTANT(PARAMETRICDATUM); //! @endcond // --------------------------------------------------------------------------- namespace common { /** \brief "Empty"/"None", unit of measure of type NONE. */ const UnitOfMeasure UnitOfMeasure::NONE("", 1.0, UnitOfMeasure::Type::NONE); /** \brief Scale unity, unit of measure of type SCALE. */ const UnitOfMeasure UnitOfMeasure::SCALE_UNITY("unity", 1.0, UnitOfMeasure::Type::SCALE, Identifier::EPSG, "9201"); /** \brief Parts-per-million, unit of measure of type SCALE. */ const UnitOfMeasure UnitOfMeasure::PARTS_PER_MILLION("parts per million", 1e-6, UnitOfMeasure::Type::SCALE, Identifier::EPSG, "9202"); /** \brief Metre, unit of measure of type LINEAR (SI unit). */ const UnitOfMeasure UnitOfMeasure::METRE("metre", 1.0, UnitOfMeasure::Type::LINEAR, Identifier::EPSG, "9001"); /** \brief Foot, unit of measure of type LINEAR. */ const UnitOfMeasure UnitOfMeasure::FOOT("foot", 0.3048, UnitOfMeasure::Type::LINEAR, Identifier::EPSG, "9002"); /** \brief US survey foot, unit of measure of type LINEAR. */ const UnitOfMeasure UnitOfMeasure::US_FOOT("US survey foot", 0.304800609601219241184, UnitOfMeasure::Type::LINEAR, Identifier::EPSG, "9003"); /** \brief Degree, unit of measure of type ANGULAR. */ const UnitOfMeasure UnitOfMeasure::DEGREE("degree", M_PI / 180., UnitOfMeasure::Type::ANGULAR, Identifier::EPSG, "9122"); /** \brief Arc-second, unit of measure of type ANGULAR. */ const UnitOfMeasure UnitOfMeasure::ARC_SECOND("arc-second", M_PI / 180. / 3600., UnitOfMeasure::Type::ANGULAR, Identifier::EPSG, "9104"); /** \brief Grad, unit of measure of type ANGULAR. */ const UnitOfMeasure UnitOfMeasure::GRAD("grad", M_PI / 200., UnitOfMeasure::Type::ANGULAR, Identifier::EPSG, "9105"); /** \brief Radian, unit of measure of type ANGULAR (SI unit). */ const UnitOfMeasure UnitOfMeasure::RADIAN("radian", 1.0, UnitOfMeasure::Type::ANGULAR, Identifier::EPSG, "9101"); /** \brief Microradian, unit of measure of type ANGULAR. */ const UnitOfMeasure UnitOfMeasure::MICRORADIAN("microradian", 1e-6, UnitOfMeasure::Type::ANGULAR, Identifier::EPSG, "9109"); /** \brief Second, unit of measure of type TIME (SI unit). */ const UnitOfMeasure UnitOfMeasure::SECOND("second", 1.0, UnitOfMeasure::Type::TIME, Identifier::EPSG, "1040"); /** \brief Year, unit of measure of type TIME */ const UnitOfMeasure UnitOfMeasure::YEAR("year", 31556925.445, UnitOfMeasure::Type::TIME, Identifier::EPSG, "1029"); /** \brief Metre per year, unit of measure of type LINEAR. */ const UnitOfMeasure UnitOfMeasure::METRE_PER_YEAR("metres per year", 1.0 / 31556925.445, UnitOfMeasure::Type::LINEAR, Identifier::EPSG, "1042"); /** \brief Arc-second per year, unit of measure of type ANGULAR. */ const UnitOfMeasure UnitOfMeasure::ARC_SECOND_PER_YEAR( "arc-seconds per year", M_PI / 180. / 3600. / 31556925.445, UnitOfMeasure::Type::ANGULAR, Identifier::EPSG, "1043"); /** \brief Parts-per-million per year, unit of measure of type SCALE. */ const UnitOfMeasure UnitOfMeasure::PPM_PER_YEAR("parts per million per year", 1e-6 / 31556925.445, UnitOfMeasure::Type::SCALE, Identifier::EPSG, "1036"); } // namespace common // --------------------------------------------------------------------------- namespace cs { std::map AxisDirection::registry; /** Axis positive direction is north. In a geodetic or projected CRS, north is * defined through the geodetic reference frame. In an engineering CRS, north * may be defined with respect to an engineering object rather than a * geographical direction. */ const AxisDirection AxisDirection::NORTH("north"); /** Axis positive direction is approximately north-north-east. */ const AxisDirection AxisDirection::NORTH_NORTH_EAST("northNorthEast"); /** Axis positive direction is approximately north-east. */ const AxisDirection AxisDirection::NORTH_EAST("northEast"); /** Axis positive direction is approximately east-north-east. */ const AxisDirection AxisDirection::EAST_NORTH_EAST("eastNorthEast"); /** Axis positive direction is 90deg clockwise from north. */ const AxisDirection AxisDirection::EAST("east"); /** Axis positive direction is approximately east-south-east. */ const AxisDirection AxisDirection::EAST_SOUTH_EAST("eastSouthEast"); /** Axis positive direction is approximately south-east. */ const AxisDirection AxisDirection::SOUTH_EAST("southEast"); /** Axis positive direction is approximately south-south-east. */ const AxisDirection AxisDirection::SOUTH_SOUTH_EAST("southSouthEast"); /** Axis positive direction is 180deg clockwise from north. */ const AxisDirection AxisDirection::SOUTH("south"); /** Axis positive direction is approximately south-south-west. */ const AxisDirection AxisDirection::SOUTH_SOUTH_WEST("southSouthWest"); /** Axis positive direction is approximately south-west. */ const AxisDirection AxisDirection::SOUTH_WEST("southWest"); /** Axis positive direction is approximately west-south-west. */ const AxisDirection AxisDirection::WEST_SOUTH_WEST("westSouthWest"); /** Axis positive direction is 270deg clockwise from north. */ const AxisDirection AxisDirection::WEST("west"); /** Axis positive direction is approximately west-north-west. */ const AxisDirection AxisDirection::WEST_NORTH_WEST("westNorthWest"); /** Axis positive direction is approximately north-west. */ const AxisDirection AxisDirection::NORTH_WEST("northWest"); /** Axis positive direction is approximately north-north-west. */ const AxisDirection AxisDirection::NORTH_NORTH_WEST("northNorthWest"); /** Axis positive direction is up relative to gravity. */ const AxisDirection AxisDirection::UP("up"); /** Axis positive direction is down relative to gravity. */ const AxisDirection AxisDirection::DOWN("down"); /** Axis positive direction is in the equatorial plane from the centre of the * modelled Earth towards the intersection of the equator with the prime * meridian. */ const AxisDirection AxisDirection::GEOCENTRIC_X("geocentricX"); /** Axis positive direction is in the equatorial plane from the centre of the * modelled Earth towards the intersection of the equator and the meridian 90deg * eastwards from the prime meridian. */ const AxisDirection AxisDirection::GEOCENTRIC_Y("geocentricY"); /** Axis positive direction is from the centre of the modelled Earth parallel to * its rotation axis and towards its north pole. */ const AxisDirection AxisDirection::GEOCENTRIC_Z("geocentricZ"); /** Axis positive direction is towards higher pixel column. */ const AxisDirection AxisDirection::COLUMN_POSITIVE("columnPositive"); /** Axis positive direction is towards lower pixel column. */ const AxisDirection AxisDirection::COLUMN_NEGATIVE("columnNegative"); /** Axis positive direction is towards higher pixel row. */ const AxisDirection AxisDirection::ROW_POSITIVE("rowPositive"); /** Axis positive direction is towards lower pixel row. */ const AxisDirection AxisDirection::ROW_NEGATIVE("rowNegative"); /** Axis positive direction is right in display. */ const AxisDirection AxisDirection::DISPLAY_RIGHT("displayRight"); /** Axis positive direction is left in display. */ const AxisDirection AxisDirection::DISPLAY_LEFT("displayLeft"); /** Axis positive direction is towards top of approximately vertical display * surface. */ const AxisDirection AxisDirection::DISPLAY_UP("displayUp"); /** Axis positive direction is towards bottom of approximately vertical display * surface. */ const AxisDirection AxisDirection::DISPLAY_DOWN("displayDown"); /** Axis positive direction is forward; for an observer at the centre of the * object this is will be towards its front, bow or nose. */ const AxisDirection AxisDirection::FORWARD("forward"); /** Axis positive direction is aft; for an observer at the centre of the object * this will be towards its back, stern or tail. */ const AxisDirection AxisDirection::AFT("aft"); /** Axis positive direction is port; for an observer at the centre of the object * this will be towards its left. */ const AxisDirection AxisDirection::PORT("port"); /** Axis positive direction is starboard; for an observer at the centre of the * object this will be towards its right. */ const AxisDirection AxisDirection::STARBOARD("starboard"); /** Axis positive direction is clockwise from a specified direction. */ const AxisDirection AxisDirection::CLOCKWISE("clockwise"); /** Axis positive direction is counter clockwise from a specified direction. */ const AxisDirection AxisDirection::COUNTER_CLOCKWISE("counterClockwise"); /** Axis positive direction is towards the object. */ const AxisDirection AxisDirection::TOWARDS("towards"); /** Axis positive direction is away from the object. */ const AxisDirection AxisDirection::AWAY_FROM("awayFrom"); /** Temporal axis positive direction is towards the future. */ const AxisDirection AxisDirection::FUTURE("future"); /** Temporal axis positive direction is towards the past. */ const AxisDirection AxisDirection::PAST("past"); /** Axis positive direction is unspecified. */ const AxisDirection AxisDirection::UNSPECIFIED("unspecified"); // --------------------------------------------------------------------------- std::map RangeMeaning::registry; /** any value between and including minimumValue and maximumValue is valid. */ const RangeMeaning RangeMeaning::EXACT("exact"); /** Axis is continuous with values wrapping around at the minimumValue and * maximumValue */ const RangeMeaning RangeMeaning::WRAPAROUND("wraparound"); // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::map AxisDirectionWKT1::registry; const AxisDirectionWKT1 AxisDirectionWKT1::NORTH("NORTH"); const AxisDirectionWKT1 AxisDirectionWKT1::EAST("EAST"); const AxisDirectionWKT1 AxisDirectionWKT1::SOUTH("SOUTH"); const AxisDirectionWKT1 AxisDirectionWKT1::WEST("WEST"); const AxisDirectionWKT1 AxisDirectionWKT1::UP("UP"); const AxisDirectionWKT1 AxisDirectionWKT1::DOWN("DOWN"); const AxisDirectionWKT1 AxisDirectionWKT1::OTHER("OTHER"); //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const std::string AxisName::Longitude("Longitude"); const std::string AxisName::Latitude("Latitude"); const std::string AxisName::Easting("Easting"); const std::string AxisName::Northing("Northing"); const std::string AxisName::Westing("Westing"); const std::string AxisName::Southing("Southing"); const std::string AxisName::Ellipsoidal_height("Ellipsoidal height"); const std::string AxisName::Geocentric_X("Geocentric X"); const std::string AxisName::Geocentric_Y("Geocentric Y"); const std::string AxisName::Geocentric_Z("Geocentric Z"); //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const std::string AxisAbbreviation::lon("lon"); const std::string AxisAbbreviation::lat("lat"); const std::string AxisAbbreviation::E("E"); const std::string AxisAbbreviation::N("N"); const std::string AxisAbbreviation::h("h"); const std::string AxisAbbreviation::X("X"); const std::string AxisAbbreviation::Y("Y"); const std::string AxisAbbreviation::Z("Z"); //! @endcond } // namespace cs // --------------------------------------------------------------------------- /** \brief The realization is by adjustment of a levelling network fixed to one * or more tide gauges. */ const RealizationMethod RealizationMethod::LEVELLING("levelling"); /** \brief The realization is through a geoid height model or a height * correction model. This is applied to a specified geodetic CRS. */ const RealizationMethod RealizationMethod::GEOID("geoid"); /** \brief The realization is through a tidal model or by tidal predictions. */ const RealizationMethod RealizationMethod::TIDAL("tidal"); // --------------------------------------------------------------------------- /** \brief The Greenwich PrimeMeridian */ const PrimeMeridianNNPtr PrimeMeridian::GREENWICH(PrimeMeridian::createGREENWICH()); /** \brief The "Reference Meridian" PrimeMeridian. * * This is a meridian of longitude 0 to be used with non-Earth bodies. */ const PrimeMeridianNNPtr PrimeMeridian::REFERENCE_MERIDIAN( PrimeMeridian::createREFERENCE_MERIDIAN()); /** \brief The Paris PrimeMeridian */ const PrimeMeridianNNPtr PrimeMeridian::PARIS(PrimeMeridian::createPARIS()); // --------------------------------------------------------------------------- /** \brief Earth celestial body */ const std::string Ellipsoid::EARTH("Earth"); /** \brief The EPSG:7008 / "Clarke 1866" Ellipsoid */ const EllipsoidNNPtr Ellipsoid::CLARKE_1866(Ellipsoid::createCLARKE_1866()); /** \brief The EPSG:7030 / "WGS 84" Ellipsoid */ const EllipsoidNNPtr Ellipsoid::WGS84(Ellipsoid::createWGS84()); /** \brief The EPSG:7019 / "GRS 1980" Ellipsoid */ const EllipsoidNNPtr Ellipsoid::GRS1980(Ellipsoid::createGRS1980()); // --------------------------------------------------------------------------- /** \brief The EPSG:6267 / "North_American_Datum_1927" GeodeticReferenceFrame */ const GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::EPSG_6267( GeodeticReferenceFrame::createEPSG_6267()); /** \brief The EPSG:6269 / "North_American_Datum_1983" GeodeticReferenceFrame */ const GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::EPSG_6269( GeodeticReferenceFrame::createEPSG_6269()); /** \brief The EPSG:6326 / "WGS_1984" GeodeticReferenceFrame */ const GeodeticReferenceFrameNNPtr GeodeticReferenceFrame::EPSG_6326( GeodeticReferenceFrame::createEPSG_6326()); // --------------------------------------------------------------------------- /** \brief The proleptic Gregorian calendar. */ const std::string TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN("proleptic Gregorian"); // --------------------------------------------------------------------------- /** \brief EPSG:4978 / "WGS 84" Geocentric */ const GeodeticCRSNNPtr GeodeticCRS::EPSG_4978(GeodeticCRS::createEPSG_4978()); // --------------------------------------------------------------------------- /** \brief EPSG:4267 / "NAD27" 2D GeographicCRS */ const GeographicCRSNNPtr GeographicCRS::EPSG_4267(GeographicCRS::createEPSG_4267()); /** \brief EPSG:4269 / "NAD83" 2D GeographicCRS */ const GeographicCRSNNPtr GeographicCRS::EPSG_4269(GeographicCRS::createEPSG_4269()); /** \brief EPSG:4326 / "WGS 84" 2D GeographicCRS */ const GeographicCRSNNPtr GeographicCRS::EPSG_4326(GeographicCRS::createEPSG_4326()); /** \brief OGC:CRS84 / "CRS 84" 2D GeographicCRS (long, lat)*/ const GeographicCRSNNPtr GeographicCRS::OGC_CRS84(GeographicCRS::createOGC_CRS84()); /** \brief EPSG:4807 / "NTF (Paris)" 2D GeographicCRS */ const GeographicCRSNNPtr GeographicCRS::EPSG_4807(GeographicCRS::createEPSG_4807()); /** \brief EPSG:4979 / "WGS 84" 3D GeographicCRS */ const GeographicCRSNNPtr GeographicCRS::EPSG_4979(GeographicCRS::createEPSG_4979()); // --------------------------------------------------------------------------- /** \brief Key to set the operation version of a operation::CoordinateOperation * * The value is to be provided as a string. */ const std::string operation::CoordinateOperation::OPERATION_VERSION_KEY("operationVersion"); //! @cond Doxygen_Suppress const common::Measure operation::nullMeasure{}; const std::string operation::INVERSE_OF = "Inverse of "; const std::string operation::AXIS_ORDER_CHANGE_2D_NAME = "axis order change (2D)"; const std::string operation::AXIS_ORDER_CHANGE_3D_NAME = "axis order change (geographic3D horizontal)"; //! @endcond // --------------------------------------------------------------------------- NS_PROJ_END proj-9.6.0/src/iso19111/util.cpp000664 001754 001755 00000055272 14764566077 016073 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/util.hpp" #include "proj/io.hpp" #include "proj/internal/internal.hpp" #include #include #include using namespace NS_PROJ::internal; #if 0 namespace dropbox{ namespace oxygen { template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; template<> nn::~nn() = default; }} #endif NS_PROJ_START namespace util { // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct BaseObject::Private { // This is a manual implementation of std::enable_shared_from_this<> that // avoids publicly deriving from it. std::weak_ptr self_{}; }; //! @endcond // --------------------------------------------------------------------------- BaseObject::BaseObject() : d(std::make_unique()) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress BaseObject::~BaseObject() = default; // --------------------------------------------------------------------------- BaseObjectNNPtr::~BaseObjectNNPtr() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // cppcheck-suppress operatorEqVarError BaseObject &BaseObject::operator=(BaseObject &&) { d->self_.reset(); return *this; } //! @endcond // --------------------------------------------------------------------------- /** Keep a reference to ourselves as an internal weak pointer. So that * extractGeographicBaseObject() can later return a shared pointer on itself. */ void BaseObject::assignSelf(const BaseObjectNNPtr &self) { assert(self.get() == this); d->self_ = self.as_nullable(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress BaseObjectNNPtr BaseObject::shared_from_this() const { // This assertion checks that in all code paths where we create a // shared pointer, we took care of assigning it to self_, by calling // assignSelf(); return NN_CHECK_ASSERT(d->self_.lock()); } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct BoxedValue::Private { BoxedValue::Type type_{BoxedValue::Type::INTEGER}; std::string stringValue_{}; int integerValue_{}; bool booleanValue_{}; explicit Private(const std::string &stringValueIn) : type_(BoxedValue::Type::STRING), stringValue_(stringValueIn) {} explicit Private(int integerValueIn) : type_(BoxedValue::Type::INTEGER), integerValue_(integerValueIn) {} explicit Private(bool booleanValueIn) : type_(BoxedValue::Type::BOOLEAN), booleanValue_(booleanValueIn) {} }; //! @endcond // --------------------------------------------------------------------------- BoxedValue::BoxedValue() : d(std::make_unique(std::string())) {} // --------------------------------------------------------------------------- /** \brief Constructs a BoxedValue from a string. */ BoxedValue::BoxedValue(const char *stringValueIn) : d(std::make_unique( std::string(stringValueIn ? stringValueIn : ""))) {} // --------------------------------------------------------------------------- /** \brief Constructs a BoxedValue from a string. */ BoxedValue::BoxedValue(const std::string &stringValueIn) : d(std::make_unique(stringValueIn)) {} // --------------------------------------------------------------------------- /** \brief Constructs a BoxedValue from an integer. */ BoxedValue::BoxedValue(int integerValueIn) : d(std::make_unique(integerValueIn)) {} // --------------------------------------------------------------------------- /** \brief Constructs a BoxedValue from a boolean. */ BoxedValue::BoxedValue(bool booleanValueIn) : d(std::make_unique(booleanValueIn)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress BoxedValue::BoxedValue(const BoxedValue &other) : d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- BoxedValue::~BoxedValue() = default; // --------------------------------------------------------------------------- const BoxedValue::Type &BoxedValue::type() const { return d->type_; } // --------------------------------------------------------------------------- const std::string &BoxedValue::stringValue() const { return d->stringValue_; } // --------------------------------------------------------------------------- int BoxedValue::integerValue() const { return d->integerValue_; } // --------------------------------------------------------------------------- bool BoxedValue::booleanValue() const { return d->booleanValue_; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct ArrayOfBaseObject::Private { std::vector values_{}; }; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress ArrayOfBaseObject::ArrayOfBaseObject() : d(std::make_unique()) {} // --------------------------------------------------------------------------- ArrayOfBaseObject::~ArrayOfBaseObject() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Adds an object to the array. * * @param obj the object to add. */ void ArrayOfBaseObject::add(const BaseObjectNNPtr &obj) { d->values_.emplace_back(obj); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress std::vector::const_iterator ArrayOfBaseObject::begin() const { return d->values_.begin(); } // --------------------------------------------------------------------------- std::vector::const_iterator ArrayOfBaseObject::end() const { return d->values_.end(); } // --------------------------------------------------------------------------- bool ArrayOfBaseObject::empty() const { return d->values_.empty(); } //! @endcond // --------------------------------------------------------------------------- /** \brief Instantiate a ArrayOfBaseObject. * * @return a new ArrayOfBaseObject. */ ArrayOfBaseObjectNNPtr ArrayOfBaseObject::create() { return ArrayOfBaseObject::nn_make_shared(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct PropertyMap::Private { std::list> list_{}; // cppcheck-suppress functionStatic void set(const std::string &key, const BoxedValueNNPtr &val) { for (auto &pair : list_) { if (pair.first == key) { pair.second = val; return; } } list_.emplace_back(key, val); } }; //! @endcond // --------------------------------------------------------------------------- PropertyMap::PropertyMap() : d(std::make_unique()) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PropertyMap::PropertyMap(const PropertyMap &other) : d(std::make_unique(*(other.d))) {} //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress PropertyMap::~PropertyMap() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress const BaseObjectNNPtr *PropertyMap::get(const std::string &key) const { for (const auto &pair : d->list_) { if (pair.first == key) { return &(pair.second); } } return nullptr; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress void PropertyMap::unset(const std::string &key) { auto &list = d->list_; for (auto iter = list.begin(); iter != list.end(); ++iter) { if (iter->first == key) { list.erase(iter); return; } } } //! @endcond // --------------------------------------------------------------------------- /** \brief Set a BaseObjectNNPtr as the value of a key. */ PropertyMap &PropertyMap::set(const std::string &key, const BaseObjectNNPtr &val) { for (auto &pair : d->list_) { if (pair.first == key) { pair.second = val; return *this; } } d->list_.emplace_back(key, val); return *this; } // --------------------------------------------------------------------------- /** \brief Set a string as the value of a key. */ PropertyMap &PropertyMap::set(const std::string &key, const std::string &val) { d->set(key, util::nn_make_shared(val)); return *this; } // --------------------------------------------------------------------------- /** \brief Set a string as the value of a key. */ PropertyMap &PropertyMap::set(const std::string &key, const char *val) { d->set(key, util::nn_make_shared(val)); return *this; } // --------------------------------------------------------------------------- /** \brief Set a integer as the value of a key. */ PropertyMap &PropertyMap::set(const std::string &key, int val) { d->set(key, util::nn_make_shared(val)); return *this; } // --------------------------------------------------------------------------- /** \brief Set a boolean as the value of a key. */ PropertyMap &PropertyMap::set(const std::string &key, bool val) { d->set(key, util::nn_make_shared(val)); return *this; } // --------------------------------------------------------------------------- /** \brief Set a vector of strings as the value of a key. */ PropertyMap &PropertyMap::set(const std::string &key, const std::vector &arrayIn) { ArrayOfBaseObjectNNPtr array = ArrayOfBaseObject::create(); for (const auto &str : arrayIn) { array->add(util::nn_make_shared(str)); } return set(key, array); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool PropertyMap::getStringValue( const std::string &key, std::string &outVal) const // throw(InvalidValueTypeException) { for (const auto &pair : d->list_) { if (pair.first == key) { auto genVal = dynamic_cast(pair.second.get()); if (genVal && genVal->type() == BoxedValue::Type::STRING) { outVal = genVal->stringValue(); return true; } throw InvalidValueTypeException("Invalid value type for " + key); } } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress bool PropertyMap::getStringValue( const std::string &key, optional &outVal) const // throw(InvalidValueTypeException) { for (const auto &pair : d->list_) { if (pair.first == key) { auto genVal = dynamic_cast(pair.second.get()); if (genVal && genVal->type() == BoxedValue::Type::STRING) { outVal = genVal->stringValue(); return true; } throw InvalidValueTypeException("Invalid value type for " + key); } } return false; } //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct GenericName::Private {}; //! @endcond // --------------------------------------------------------------------------- GenericName::GenericName() : d(std::make_unique()) {} // --------------------------------------------------------------------------- GenericName::GenericName(const GenericName &other) : d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress GenericName::~GenericName() = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct NameSpace::Private { GenericNamePtr name{}; bool isGlobal{}; std::string separator = std::string(":"); std::string separatorHead = std::string(":"); }; //! @endcond // --------------------------------------------------------------------------- NameSpace::NameSpace(const GenericNamePtr &nameIn) : d(std::make_unique()) { d->name = nameIn; } // --------------------------------------------------------------------------- NameSpace::NameSpace(const NameSpace &other) : d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress NameSpace::~NameSpace() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Returns whether this is a global namespace. */ bool NameSpace::isGlobal() const { return d->isGlobal; } // --------------------------------------------------------------------------- NameSpaceNNPtr NameSpace::getGlobalFromThis() const { NameSpaceNNPtr ns(NameSpace::nn_make_shared(*this)); ns->d->isGlobal = true; ns->d->name = LocalName::make_shared("global"); return ns; } // --------------------------------------------------------------------------- /** \brief Returns the name of this namespace. */ const GenericNamePtr &NameSpace::name() const { return d->name; } // --------------------------------------------------------------------------- const std::string &NameSpace::separator() const { return d->separator; } // --------------------------------------------------------------------------- NameSpaceNNPtr NameSpace::createGLOBAL() { NameSpaceNNPtr ns(NameSpace::nn_make_shared( LocalName::make_shared("global"))); ns->d->isGlobal = true; return ns; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress struct LocalName::Private { NameSpacePtr scope{}; std::string name{}; }; //! @endcond // --------------------------------------------------------------------------- LocalName::LocalName(const std::string &name) : d(std::make_unique()) { d->name = name; } // --------------------------------------------------------------------------- LocalName::LocalName(const NameSpacePtr &ns, const std::string &name) : d(std::make_unique()) { d->scope = ns ? ns : static_cast(NameSpace::GLOBAL); d->name = name; } // --------------------------------------------------------------------------- LocalName::LocalName(const LocalName &other) : GenericName(other), d(std::make_unique(*other.d)) {} // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress LocalName::~LocalName() = default; //! @endcond // --------------------------------------------------------------------------- const NameSpacePtr LocalName::scope() const { if (d->scope) return d->scope; return NameSpace::GLOBAL; } // --------------------------------------------------------------------------- GenericNameNNPtr LocalName::toFullyQualifiedName() const { if (scope()->isGlobal()) return LocalName::nn_make_shared(*this); return LocalName::nn_make_shared( d->scope->getGlobalFromThis(), d->scope->name()->toFullyQualifiedName()->toString() + d->scope->separator() + d->name); } // --------------------------------------------------------------------------- std::string LocalName::toString() const { return d->name; } // --------------------------------------------------------------------------- /** \brief Instantiate a NameSpace. * * @param name name of the namespace. * @param properties Properties. Allowed keys are "separator" and * "separator.head". * @return a new NameFactory. */ NameSpaceNNPtr NameFactory::createNameSpace(const GenericNameNNPtr &name, const PropertyMap &properties) { NameSpaceNNPtr ns(NameSpace::nn_make_shared(name)); properties.getStringValue("separator", ns->d->separator); properties.getStringValue("separator.head", ns->d->separatorHead); return ns; } // --------------------------------------------------------------------------- /** \brief Instantiate a LocalName. * * @param scope scope. * @param name string of the local name. * @return a new LocalName. */ LocalNameNNPtr NameFactory::createLocalName(const NameSpacePtr &scope, const std::string &name) { return LocalName::nn_make_shared(scope, name); } // --------------------------------------------------------------------------- /** \brief Instantiate a GenericName. * * @param scope scope. * @param parsedNames the components of the name. * @return a new GenericName. */ GenericNameNNPtr NameFactory::createGenericName(const NameSpacePtr &scope, const std::vector &parsedNames) { std::string name; const std::string separator(scope ? scope->separator() : NameSpace::GLOBAL->separator()); bool first = true; for (const auto &str : parsedNames) { if (!first) name += separator; first = false; name += str; } return LocalName::nn_make_shared(scope, name); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress CodeList::~CodeList() = default; //! @endcond // --------------------------------------------------------------------------- CodeList &CodeList::operator=(const CodeList &other) { name_ = other.name_; return *this; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress Exception::Exception(const char *message) : msg_(message) {} // --------------------------------------------------------------------------- Exception::Exception(const std::string &message) : msg_(message) {} // --------------------------------------------------------------------------- Exception::Exception(const Exception &) = default; // --------------------------------------------------------------------------- Exception::~Exception() = default; //! @endcond // --------------------------------------------------------------------------- /** Return the exception text. */ const char *Exception::what() const noexcept { return msg_.c_str(); } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress InvalidValueTypeException::InvalidValueTypeException(const char *message) : Exception(message) {} // --------------------------------------------------------------------------- InvalidValueTypeException::InvalidValueTypeException(const std::string &message) : Exception(message) {} // --------------------------------------------------------------------------- InvalidValueTypeException::~InvalidValueTypeException() = default; // --------------------------------------------------------------------------- InvalidValueTypeException::InvalidValueTypeException( const InvalidValueTypeException &) = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress UnsupportedOperationException::UnsupportedOperationException( const char *message) : Exception(message) {} // --------------------------------------------------------------------------- UnsupportedOperationException::UnsupportedOperationException( const std::string &message) : Exception(message) {} // --------------------------------------------------------------------------- UnsupportedOperationException::~UnsupportedOperationException() = default; // --------------------------------------------------------------------------- UnsupportedOperationException::UnsupportedOperationException( const UnsupportedOperationException &) = default; //! @endcond // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress IComparable::~IComparable() = default; //! @endcond // --------------------------------------------------------------------------- /** \brief Returns whether an object is equivalent to another one. * @param other other object to compare to * @param criterion comparison criterion. * @param dbContext Database context, or nullptr. * @return true if objects are equivalent. */ bool IComparable::isEquivalentTo( const IComparable *other, Criterion criterion, const io::DatabaseContextPtr &dbContext) const { if (this == other) return true; return _isEquivalentTo(other, criterion, dbContext); } // --------------------------------------------------------------------------- } // namespace util NS_PROJ_END proj-9.6.0/src/latitudes.cpp000664 001754 001755 00000004172 14764566077 015716 0ustar00e012349e012349000000 000000 /* * Project: PROJ * * Helper functions to compute latitudes * * Some from Map Projections - A Working Manual. 1987. John P. Snyder * https://neacsu.net/docs/geodesy/snyder/2-general/sect_3/ * * Copyright (c) 2025 Javier Jimenez Shaw */ #include #include "proj_internal.h" /*****************************************************************************/ double pj_conformal_lat(double phi, double e) { /*********************************** * The conformal latitude chi * giving a sphere which is truly conformal in accordance with the ellipsoid * Snyder, A working manual, formula 3-1 * * phi: geodetic latitude, in radians * e: ellipsoid eccentricity * returns: conformal latitude, in radians ***********************************/ if (e == 0.0) return phi; const double esinphi = e * sin(phi); const double chi = 2 * atan(tan(M_FORTPI + phi / 2) * std::pow(((1 - esinphi) / (1 + esinphi)), (e / 2))) - M_HALFPI; return chi; } /*****************************************************************************/ double pj_conformal_lat_inverse(double chi, double e, double threshold) { /*********************************** * The inverse formula of the conformal latitude * for phi (geodetic latitude) in terms of chi (conformal latitude), * Snyder, A working manual, formula 3-4 * * chi: conformal latitude, in radians * e: ellipsoid eccentricity * threshold: between two consecutive iteratinons to break the loop, radians * returns: geodetic latitude, in radians ***********************************/ if (e == 0.0) return chi; const double taninit = tan(M_PI / 4 + chi / 2); double phi = chi; for (int i = 0; i < 10; i++) { const double esinphi = e * sin(phi); const double new_phi = 2 * atan(taninit * std::pow(((1 + esinphi) / (1 - esinphi)), (e / 2))) - 0.5 * M_PI; if (abs(new_phi - phi) < threshold) { phi = new_phi; break; } phi = new_phi; } return phi; } proj-9.6.0/src/lib_proj.cmake000664 001754 001755 00000046564 14764566077 016031 0ustar00e012349e012349000000 000000 message(STATUS "Configuring proj library:") find_package(Threads QUIET) if(Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) add_definitions(-DPROJ_HAS_PTHREADS) endif() option(ENABLE_IPO "Build library with interprocedural optimization (if available)." OFF) if(ENABLE_IPO) cmake_policy(SET CMP0069 NEW) include(CheckIPOSupported) check_ipo_supported(RESULT ENABLE_IPO) endif() print_variable(ENABLE_IPO) ############################################## ### library source list and include_list ### ############################################## set(SRC_LIBPROJ_PROJECTIONS projections/airocean.cpp projections/aeqd.cpp projections/adams.cpp projections/gnom.cpp projections/laea.cpp projections/mod_ster.cpp projections/nsper.cpp projections/nzmg.cpp projections/ortho.cpp projections/stere.cpp projections/sterea.cpp projections/aea.cpp projections/bipc.cpp projections/bonne.cpp projections/eqdc.cpp projections/isea.cpp projections/ccon.cpp projections/imw_p.cpp projections/krovak.cpp projections/lcc.cpp projections/poly.cpp projections/rpoly.cpp projections/sconics.cpp projections/rouss.cpp projections/cass.cpp projections/cc.cpp projections/cea.cpp projections/eqc.cpp projections/gall.cpp projections/labrd.cpp projections/som.cpp projections/merc.cpp projections/mill.cpp projections/ocea.cpp projections/omerc.cpp projections/somerc.cpp projections/tcc.cpp projections/tcea.cpp projections/times.cpp projections/tmerc.cpp projections/tobmerc.cpp projections/airy.cpp projections/aitoff.cpp projections/august.cpp projections/bacon.cpp projections/bertin1953.cpp projections/chamb.cpp projections/hammer.cpp projections/lagrng.cpp projections/larr.cpp projections/lask.cpp projections/latlong.cpp projections/nicol.cpp projections/ob_tran.cpp projections/oea.cpp projections/tpeqd.cpp projections/vandg.cpp projections/vandg2.cpp projections/vandg4.cpp projections/wag7.cpp projections/lcca.cpp projections/geos.cpp projections/boggs.cpp projections/collg.cpp projections/comill.cpp projections/crast.cpp projections/denoy.cpp projections/eck1.cpp projections/eck2.cpp projections/eck3.cpp projections/eck4.cpp projections/eck5.cpp projections/fahey.cpp projections/fouc_s.cpp projections/gins8.cpp projections/gstmerc.cpp projections/gn_sinu.cpp projections/goode.cpp projections/igh.cpp projections/igh_o.cpp projections/imoll.cpp projections/imoll_o.cpp projections/hatano.cpp projections/loxim.cpp projections/mbt_fps.cpp projections/mbtfpp.cpp projections/mbtfpq.cpp projections/moll.cpp projections/nell.cpp projections/nell_h.cpp projections/patterson.cpp projections/putp2.cpp projections/putp3.cpp projections/putp4p.cpp projections/putp5.cpp projections/putp6.cpp projections/qsc.cpp projections/robin.cpp projections/s2.cpp projections/sch.cpp projections/sts.cpp projections/urm5.cpp projections/urmfps.cpp projections/wag2.cpp projections/wag3.cpp projections/wink1.cpp projections/wink2.cpp projections/healpix.cpp projections/natearth.cpp projections/natearth2.cpp projections/calcofi.cpp projections/eqearth.cpp projections/col_urban.cpp projections/spilhaus.cpp ) set(SRC_LIBPROJ_CONVERSIONS conversions/axisswap.cpp conversions/cart.cpp conversions/geoc.cpp conversions/geocent.cpp conversions/noop.cpp conversions/topocentric.cpp conversions/set.cpp conversions/unitconvert.cpp ) set(SRC_LIBPROJ_TRANSFORMATIONS transformations/affine.cpp transformations/deformation.cpp transformations/gridshift.cpp transformations/helmert.cpp transformations/hgridshift.cpp transformations/horner.cpp transformations/molodensky.cpp transformations/vgridshift.cpp transformations/xyzgridshift.cpp transformations/defmodel.cpp transformations/tinshift.cpp transformations/vertoffset.cpp ) set(SRC_LIBPROJ_ISO19111 iso19111/static.cpp iso19111/util.cpp iso19111/metadata.cpp iso19111/common.cpp iso19111/coordinates.cpp iso19111/crs.cpp iso19111/datum.cpp iso19111/coordinatesystem.cpp iso19111/io.cpp iso19111/internal.cpp iso19111/factory.cpp iso19111/c_api.cpp iso19111/operation/concatenatedoperation.cpp iso19111/operation/coordinateoperationfactory.cpp iso19111/operation/conversion.cpp iso19111/operation/esriparammappings.cpp iso19111/operation/oputils.cpp iso19111/operation/parametervalue.cpp iso19111/operation/parammappings.cpp iso19111/operation/projbasedoperation.cpp iso19111/operation/singleoperation.cpp iso19111/operation/transformation.cpp iso19111/operation/vectorofvaluesparams.cpp ) set(SRC_LIBPROJ_CORE aasincos.cpp adjlon.cpp area.cpp auth.cpp coord_operation.cpp coordinates.cpp create.cpp crs_to_crs.cpp ctx.cpp datum_set.cpp datums.cpp deriv.cpp dist.cpp dmstor.cpp ell_set.cpp ellps.cpp factors.cpp filemanager.hpp filemanager.cpp fwd.cpp gauss.cpp generic_inverse.cpp geodesic.c grids.hpp grids.cpp info.cpp init.cpp initcache.cpp internal.cpp inv.cpp latitudes.cpp list.cpp log.cpp malloc.cpp mlfn.cpp msfn.cpp mutex.cpp networkfilemanager.cpp param.cpp phi2.cpp pipeline.cpp pj_list.h pr_list.cpp proj_internal.h proj_json_streaming_writer.hpp proj_json_streaming_writer.cpp proj_mdist.cpp qsfn.cpp release.cpp rtodms.cpp strerrno.cpp strtod.cpp sqlite3_utils.hpp sqlite3_utils.cpp tracing.cpp trans.cpp trans_bounds.cpp tsfn.cpp units.cpp wkt1_generated_parser.c wkt1_generated_parser.h wkt1_parser.cpp wkt1_parser.h wkt2_generated_parser.c wkt2_generated_parser.h wkt2_parser.cpp wkt2_parser.h wkt_parser.cpp wkt_parser.hpp zpoly1.cpp ${CMAKE_CURRENT_BINARY_DIR}/proj_config.h ) # Skip Unity build for specific files set(SKIP_UNITY_BUILD_FILES list.cpp # because if sets DO_NOT_DEFINE_PROJ_HEAD transformations/defmodel.cpp # Evaluator class conflict transformations/tinshift.cpp # Evaluator class conflict wkt1_parser.cpp wkt2_parser.cpp wkt1_generated_parser.c wkt2_generated_parser.c ) if(WIN32) list(APPEND SKIP_UNITY_BUILD_FILES networkfilemanager.cpp ) endif() set_property(SOURCE ${SKIP_UNITY_BUILD_FILES} PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) set(HEADERS_LIBPROJ proj.h proj_experimental.h proj_constants.h proj_symbol_rename.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\\Conversions" FILES ${SRC_LIBPROJ_CONVERSIONS}) source_group("Source Files\\Projections" FILES ${SRC_LIBPROJ_PROJECTIONS}) source_group("Source Files\\Transformations" FILES ${SRC_LIBPROJ_TRANSFORMATIONS}) source_group("Source Files\\ISO19111" FILES ${SRC_LIBPROJ_ISO19111}) include_directories(${PROJ_SOURCE_DIR}/include) include_directories(${CMAKE_CURRENT_BINARY_DIR}) source_group("CMake Files" FILES CMakeLists.txt) # Embed PROJ_DATA data files location if(EMBED_PROJ_DATA_PATH) add_definitions(-DPROJ_DATA="${PROJ_DATA_PATH}") endif() ########################################################### # targets to refresh wkt1_parser.cpp and wkt2_parser.cpp ########################################################### # Those targets need to be run manually each time wkt1_grammar.y / wkt2_grammar.y # is modified. # We could of course run them automatically, but that would make building # PROJ harder. # This target checks that wkt1_grammar.y md5sum has not changed # If it has, then it should be updated and the generate_wkt1_parser target # should be manually run add_custom_target(check_wkt1_grammar_md5 ALL COMMAND ${CMAKE_COMMAND} "-DIN_FILE=wkt1_grammar.y" "-DTARGET=generate_wkt1_parser" "-DEXPECTED_MD5SUM=5b4495c1ec6d2ae26b7028a9bb5d8819" -P "${CMAKE_CURRENT_SOURCE_DIR}/check_md5sum.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/wkt1_grammar.y" VERBATIM) add_custom_target(generate_wkt1_parser COMMAND ${CMAKE_COMMAND} "-DPREFIX=pj_wkt1_" "-DIN_FILE=wkt1_grammar.y" "-DOUT_FILE=wkt1_generated_parser.c" -P "${CMAKE_CURRENT_SOURCE_DIR}/generate_wkt_parser.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM) # This target checks that wkt2_grammar.y md5sum has not changed # If it has, then it should be updated and the generate_wkt2_parser target # should be manually run add_custom_target(check_wkt2_grammar_md5 ALL COMMAND ${CMAKE_COMMAND} "-DIN_FILE=wkt2_grammar.y" "-DTARGET=generate_wkt2_parser" "-DEXPECTED_MD5SUM=94337ca471caf74688db939009652ddb" -P "${CMAKE_CURRENT_SOURCE_DIR}/check_md5sum.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/wkt2_grammar.y" VERBATIM) add_custom_target(generate_wkt2_parser COMMAND ${CMAKE_COMMAND} "-DPREFIX=pj_wkt2_" "-DIN_FILE=wkt2_grammar.y" "-DOUT_FILE=wkt2_generated_parser.c" -P "${CMAKE_CURRENT_SOURCE_DIR}/generate_wkt_parser.cmake" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" VERBATIM) ################################################# ## targets: libproj and proj_config.h ################################################# set(ALL_LIBPROJ_SOURCES ${SRC_LIBPROJ_CORE} ${SRC_LIBPROJ_CONVERSIONS} ${SRC_LIBPROJ_PROJECTIONS} ${SRC_LIBPROJ_TRANSFORMATIONS} ${SRC_LIBPROJ_ISO19111} ) set(ALL_LIBPROJ_HEADERS ${HEADERS_LIBPROJ}) # Configuration for the core target "proj" add_library(proj ${ALL_LIBPROJ_SOURCES} ${ALL_LIBPROJ_HEADERS} ${PROJ_RESOURCES} ) add_library(PROJ::proj ALIAS proj) if(MSVC OR MINGW) target_compile_definitions(proj PRIVATE -DNOMINMAX) endif() # Tell Intel compiler to do arithmetic accurately. This is needed to stop the # compiler from ignoring parentheses in expressions like (a + b) + c and from # simplifying 0.0 + x to x (which is wrong if x = -0.0). if("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel") if(MSVC) set(FP_PRECISE "/fp:precise") else() set(FP_PRECISE "-fp-model precise") endif() # Apply to source files that require this option set_source_files_properties( geodesic.c PROPERTIES COMPILE_FLAGS ${FP_PRECISE}) endif() if (EMBED_RESOURCE_FILES) add_library(proj_resources OBJECT embedded_resources.c) add_dependencies(proj_resources generate_proj_db) option(PROJ_OBJECT_LIBRARIES_POSITION_INDEPENDENT_CODE "Set ON to produce -fPIC code" ${BUILD_SHARED_LIBS}) set_property(TARGET proj_resources PROPERTY POSITION_INDEPENDENT_CODE ${PROJ_OBJECT_LIBRARIES_POSITION_INDEPENDENT_CODE}) target_sources(proj PRIVATE $) if (NOT IS_SHARP_EMBED_AVAILABLE_RES) set(EMBEDDED_PROJ_DB "file_embed/proj_db.c") add_custom_command( OUTPUT "${EMBEDDED_PROJ_DB}" COMMAND ${CMAKE_COMMAND} -DRUN_FILE_EMBED_GENERATE=1 "-DFILE_EMBED_GENERATE_PATH=${PROJECT_BINARY_DIR}/data/proj.db" -P ${PROJECT_SOURCE_DIR}/cmake/FileEmbed.cmake DEPENDS generate_proj_db "${PROJECT_BINARY_DIR}/data/proj.db" ) target_sources(proj_resources PRIVATE "${EMBEDDED_PROJ_DB}") else() target_include_directories(proj_resources PRIVATE "${PROJECT_BINARY_DIR}/data") set_source_files_properties(embedded_resources.c OBJECT_DEPENDS ${PROJECT_BINARY_DIR}/data/proj.db) target_compile_definitions(proj_resources PRIVATE "PROJ_DB=\"${PROJECT_BINARY_DIR}/data/proj.db\"") target_compile_definitions(proj_resources PRIVATE USE_SHARP_EMBED) set_target_properties(proj_resources PROPERTIES C_STANDARD 23) endif() endif() set(EMBED_RESOURCE_DIRECTORY "" CACHE PATH "Directory that contains .tif, .json or .pol files to embed into libproj") set(FILES_TO_EMBED) if (EMBED_RESOURCE_DIRECTORY) if (NOT EMBED_RESOURCE_FILES) message(FATAL_ERROR "EMBED_RESOURCE_FILES should be set to ON when EMBED_RESOURCE_DIRECTORY is set") endif() if (NOT IS_DIRECTORY ${EMBED_RESOURCE_DIRECTORY}) message(FATAL_ERROR "${EMBED_RESOURCE_DIRECTORY} is not a valid directory") endif() file(GLOB FILES_TO_EMBED "${EMBED_RESOURCE_DIRECTORY}/*.tif" "${EMBED_RESOURCE_DIRECTORY}/*.json" "${EMBED_RESOURCE_DIRECTORY}/*.pol") if (NOT FILES_TO_EMBED) message(FATAL_ERROR "No .tif, .json or .pol files found in ${EMBED_RESOURCE_DIRECTORY}") endif() endif() if (EMBED_RESOURCE_FILES) list(APPEND FILES_TO_EMBED "../data/proj.ini") foreach(FILE ${PROJ_DICTIONARY}) list(APPEND FILES_TO_EMBED "../data/${FILE}") endforeach() endif() if (FILES_TO_EMBED) set(EMBEDDED_RESOURCES_C_PROLOG_CONTENT "") set(EMBEDDED_RESOURCES_C_CONTENT "") string(APPEND EMBEDDED_RESOURCES_C_CONTENT "const unsigned char *pj_get_embedded_resource(const char* filename, unsigned int *pnSize)\n" "{\n") foreach(FILE ${FILES_TO_EMBED}) get_filename_component(FILENAME ${FILE} NAME) message(STATUS "Embedding ${FILENAME}") set(C_IDENTIFIER_RESOURCE_NAME "${FILENAME}") string(REPLACE "." "_" C_IDENTIFIER_RESOURCE_NAME "${C_IDENTIFIER_RESOURCE_NAME}") string(REPLACE "-" "_" C_IDENTIFIER_RESOURCE_NAME "${C_IDENTIFIER_RESOURCE_NAME}") set(C_FILENAME "file_embed/${C_IDENTIFIER_RESOURCE_NAME}.c") add_custom_command( OUTPUT "${C_FILENAME}" COMMAND ${CMAKE_COMMAND} -DRUN_FILE_EMBED_GENERATE=1 "-DFILE_EMBED_GENERATE_PATH=${FILE}" -P ${PROJECT_SOURCE_DIR}/cmake/FileEmbed.cmake DEPENDS "${FILE}" ) string(APPEND EMBEDDED_RESOURCES_C_CONTENT " if (strcmp(filename, \"${FILENAME}\") == 0)\n" " {\n" " *pnSize = ${C_IDENTIFIER_RESOURCE_NAME}_size;\n" " return ${C_IDENTIFIER_RESOURCE_NAME}_data;\n" " }\n") target_sources(proj_resources PRIVATE "${C_FILENAME}") string(APPEND EMBEDDED_RESOURCES_C_PROLOG_CONTENT "extern const uint8_t ${C_IDENTIFIER_RESOURCE_NAME}_data[];\n") string(APPEND EMBEDDED_RESOURCES_C_PROLOG_CONTENT "extern const unsigned ${C_IDENTIFIER_RESOURCE_NAME}_size;\n") endforeach() string(APPEND EMBEDDED_RESOURCES_C_CONTENT " *pnSize = 0;\n" " return NULL;\n" "}\n") file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/file_embed/embedded_resources.c" "${EMBEDDED_RESOURCES_C_PROLOG_CONTENT}\n${EMBEDDED_RESOURCES_C_CONTENT}") endif() if (EMBED_RESOURCE_FILES) target_sources(proj PRIVATE memvfs.c) target_compile_definitions(proj PRIVATE EMBED_RESOURCE_FILES) endif() if (USE_ONLY_EMBEDDED_RESOURCE_FILES) target_compile_definitions(proj PRIVATE USE_ONLY_EMBEDDED_RESOURCE_FILES) endif() if(ENABLE_IPO) set_property(TARGET proj PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) endif() target_include_directories(proj INTERFACE $ $ $) if(WIN32) if (MINGW AND BUILD_SHARED_LIBS) option(APPEND_SOVERSION "Whether to include shared object version as a suffix in the name of the PROJ shared library name." OFF) endif() if(MINGW AND BUILD_SHARED_LIBS AND APPEND_SOVERSION) set(PROJ_OUTPUT_NAME "proj" CACHE STRING "Name of the PROJ library") else() # Detect major version update if reusing a CMake build directory where the # PROJ version major number has been updated in the meantime. math(EXPR PROJ_VERSION_MAJOR_MINUS_ONE "${PROJ_VERSION_MAJOR} - 1") if(DEFINED PROJ_OUTPUT_NAME AND PROJ_OUTPUT_NAME STREQUAL "proj_${PROJ_VERSION_MAJOR_MINUS_ONE}") message(WARNING "PROJ_OUTPUT_NAME was set to ${PROJ_OUTPUT_NAME}. Updating it to proj_${PROJ_VERSION_MAJOR}") unset(PROJ_OUTPUT_NAME CACHE) endif() set(PROJ_OUTPUT_NAME "proj_${PROJ_VERSION_MAJOR}" CACHE STRING "Name of the PROJ library") endif() else() set(PROJ_OUTPUT_NAME "proj" CACHE STRING "Name of the PROJ library") endif() set_target_properties(proj PROPERTIES OUTPUT_NAME ${PROJ_OUTPUT_NAME}) if(WIN32) set_target_properties(proj PROPERTIES VERSION "${PROJ_VERSION}" ARCHIVE_OUTPUT_NAME proj CLEAN_DIRECT_OUTPUT 1) if (MINGW AND BUILD_SHARED_LIBS AND APPEND_SOVERSION) set_target_properties(proj PROPERTIES SUFFIX "-${PROJ_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}") endif() elseif(BUILD_FRAMEWORKS_AND_BUNDLE) set_target_properties(proj PROPERTIES VERSION "${PROJ_VERSION}" INSTALL_NAME_DIR ${PROJ_INSTALL_NAME_DIR} CLEAN_DIRECT_OUTPUT 1) else() set_target_properties(proj PROPERTIES VERSION "${PROJ_BUILD_VERSION}" SOVERSION "${PROJ_SOVERSION}" CLEAN_DIRECT_OUTPUT 1) endif() set_target_properties(proj PROPERTIES LINKER_LANGUAGE CXX) ############################################## # Link properties ############################################## set(PROJ_LIBRARIES proj) # hack, required for test/unit set(PROJ_LIBRARIES ${PROJ_LIBRARIES} PARENT_SCOPE) if(WIN32) target_link_libraries (proj PRIVATE shell32.lib ole32.lib ) endif() if(UNIX) find_library(M_LIB m) if(M_LIB) target_link_libraries(proj PRIVATE -lm) endif() find_library(DL_LIB dl) if(DL_LIB) target_link_libraries(proj PRIVATE -ldl) endif() endif() if(Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) target_link_libraries(proj PRIVATE ${CMAKE_THREAD_LIBS_INIT}) endif() target_link_libraries(proj PRIVATE SQLite::SQLite3) if(NLOHMANN_JSON STREQUAL "external") target_compile_definitions(proj PRIVATE EXTERNAL_NLOHMANN_JSON) target_link_libraries(proj PRIVATE $) endif() if(TIFF_ENABLED) target_compile_definitions(proj PRIVATE -DTIFF_ENABLED) target_link_libraries(proj PRIVATE TIFF::TIFF) endif() if(CURL_ENABLED) target_compile_definitions(proj PRIVATE -DCURL_ENABLED) target_link_libraries(proj PRIVATE CURL::libcurl) target_link_libraries(proj PRIVATE $<$:ws2_32> $<$:wldap32> $<$:advapi32> $<$:crypt32> $<$:normaliz>) endif() if(BUILD_SHARED_LIBS) if(MSVC) target_compile_definitions(proj PRIVATE PROJ_MSVC_DLL_EXPORT=1) endif() else() target_compile_definitions(proj PUBLIC PROJ_DLL=) endif() ############################################## # install ############################################## install(TARGETS proj EXPORT targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} FRAMEWORK DESTINATION ${FRAMEWORKDIR}) if(NOT BUILD_FRAMEWORKS_AND_BUNDLE) install(FILES ${ALL_LIBPROJ_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) endif() ############################################## # Core configuration summary ############################################## print_variable(PROJ_OUTPUT_NAME) print_variable(BUILD_SHARED_LIBS) print_variable(PROJ_LIBRARIES) proj-9.6.0/src/list.cpp000664 001754 001755 00000001553 14764566077 014673 0ustar00e012349e012349000000 000000 /* Projection System: default list of projections */ #define DO_NOT_DEFINE_PROJ_HEAD #include "proj.h" #include "proj_internal.h" /* Generate prototypes for projection functions */ #define PROJ_HEAD(id, name) \ extern "C" struct PJconsts *pj_##id(struct PJconsts *); #include "pj_list.h" #undef PROJ_HEAD /* Generate extern declarations for description strings */ #define PROJ_HEAD(id, name) extern "C" const 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}, const struct PJ_LIST pj_list[] = { #include "pj_list.h" {nullptr, nullptr, nullptr}, }; #undef PROJ_HEAD const PJ_OPERATIONS *proj_list_operations(void) { return pj_list; } proj-9.6.0/src/log.cpp000664 001754 001755 00000016241 14764566077 014501 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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 #include #include "proj.h" #include "proj_internal.h" /************************************************************************/ /* 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_active() */ /************************************************************************/ bool pj_log_active(PJ_CONTEXT *ctx, int level) { int debug_level = ctx->debug_level; int shutup_unless_errno_set = debug_level < 0; /* For negative debug levels, we first start logging when errno is set */ if (ctx->last_errno == 0 && shutup_unless_errno_set) return false; if (debug_level < 0) debug_level = -debug_level; if (level > debug_level) return false; return true; } /************************************************************************/ /* pj_vlog() */ /************************************************************************/ static void pj_vlog(PJ_CONTEXT *ctx, int level, const PJ *P, const char *fmt, va_list args) { char *msg_buf; if (!pj_log_active(ctx, level)) return; constexpr size_t BUF_SIZE = 100000; msg_buf = (char *)malloc(BUF_SIZE); if (msg_buf == nullptr) return; if (P == nullptr || P->short_name == nullptr) vsnprintf(msg_buf, BUF_SIZE, fmt, args); else { std::string fmt_with_P_short_name(P->short_name); fmt_with_P_short_name += ": "; fmt_with_P_short_name += fmt; vsnprintf(msg_buf, BUF_SIZE, fmt_with_P_short_name.c_str(), args); } msg_buf[BUF_SIZE - 1] = '\0'; ctx->logger(ctx->logger_app_data, level, msg_buf); free(msg_buf); } /************************************************************************/ /* pj_log() */ /************************************************************************/ void pj_log(PJ_CONTEXT *ctx, int level, const char *fmt, ...) { va_list args; if (level > ctx->debug_level) return; va_start(args, fmt); pj_vlog(ctx, level, nullptr, fmt, args); va_end(args); } /***************************************************************************************/ PJ_LOG_LEVEL proj_log_level(PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level) { /**************************************************************************************** Set logging level 0-3. Higher number means more debug info. 0 turns it off ****************************************************************************************/ PJ_LOG_LEVEL previous; if (nullptr == ctx) ctx = pj_get_default_ctx(); if (nullptr == ctx) return PJ_LOG_TELL; previous = static_cast(abs(ctx->debug_level)); if (PJ_LOG_TELL == log_level) return previous; ctx->debug_level = log_level; return previous; } /*****************************************************************************/ void proj_log_error(const PJ *P, const char *fmt, ...) { /****************************************************************************** For reporting the most severe events. ******************************************************************************/ va_list args; va_start(args, fmt); pj_vlog(pj_get_ctx((PJ *)P), PJ_LOG_ERROR, P, fmt, args); va_end(args); } /*****************************************************************************/ void proj_log_debug(PJ *P, const char *fmt, ...) { /****************************************************************************** For reporting debugging information. ******************************************************************************/ va_list args; va_start(args, fmt); pj_vlog(pj_get_ctx(P), PJ_LOG_DEBUG, P, fmt, args); va_end(args); } /*****************************************************************************/ void proj_context_log_debug(PJ_CONTEXT *ctx, const char *fmt, ...) { /****************************************************************************** For reporting debugging information. ******************************************************************************/ va_list args; va_start(args, fmt); pj_vlog(ctx, PJ_LOG_DEBUG, nullptr, fmt, args); va_end(args); } /*****************************************************************************/ void proj_log_trace(PJ *P, const char *fmt, ...) { /****************************************************************************** For reporting embarrassingly detailed debugging information. ******************************************************************************/ va_list args; va_start(args, fmt); pj_vlog(pj_get_ctx(P), PJ_LOG_TRACE, P, fmt, args); va_end(args); } /*****************************************************************************/ void proj_log_func(PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf) { /****************************************************************************** Put a new logging function into P's context. The opaque object app_data is passed as first arg at each call to the logger ******************************************************************************/ if (nullptr == ctx) ctx = pj_get_default_ctx(); ctx->logger_app_data = app_data; if (nullptr != logf) ctx->logger = logf; } proj-9.6.0/src/malloc.cpp000664 001754 001755 00000020242 14764566077 015163 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ.4 * Purpose: Memory management for proj.4. * This version includes an implementation of generic destructors, * for memory deallocation for the large majority of PJ-objects * that do not allocate anything else than the PJ-object itself, * and its associated opaque object - i.e. no additional malloc'ed * memory inside the opaque object. * * Author: Gerald I. Evenden (Original proj.4 author), * Frank Warmerdam (2000) pj_malloc? * Thomas Knudsen (2016) - freeup/dealloc parts * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * Copyright (c) 2016, Thomas Knudsen / SDFE * * 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. *****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif /* 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 #include #include #include #include "proj/internal/io_internal.hpp" #include "filemanager.hpp" #include "grids.hpp" #include "proj.h" #include "proj_internal.h" using namespace NS_PROJ; /**********************************************************************/ char *pj_strdup(const char *str) /**********************************************************************/ { size_t len = strlen(str) + 1; char *dup = static_cast(malloc(len)); if (dup) memcpy(dup, str, len); return dup; } /*****************************************************************************/ void *free_params(PJ_CONTEXT *ctx, paralist *start, int errlev) { /***************************************************************************** Companion to pj_default_destructor (below). Deallocates a linked list of "+proj=xxx" initialization parameters. Also called from pj_init_ctx when encountering errors before the PJ proper is allocated. ******************************************************************************/ paralist *t, *n; for (t = start; t; t = n) { n = t->next; free(t); } proj_context_errno_set(ctx, errlev); return (void *)nullptr; } /************************************************************************/ /* proj_destroy() */ /* */ /* 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->destructor(), to do local work. */ /* In most cases P->destructor()==pj_default_destructor. */ /************************************************************************/ PJ *proj_destroy(PJ *P) { if (nullptr == P || !P->destructor) return nullptr; /* free projection parameters - all the hard work is done by */ /* pj_default_destructor, which is supposed */ /* to be called as the last step of the local destructor */ /* pointed to by P->destructor. In most cases, */ /* pj_default_destructor actually *is* what is pointed to */ P->destructor(P, proj_errno(P)); return nullptr; } /*****************************************************************************/ // cppcheck-suppress uninitMemberVar PJconsts::PJconsts() : destructor(pj_default_destructor) {} /*****************************************************************************/ /*****************************************************************************/ /* void PJconsts::copyStateFrom(const PJconsts& other) */ /*****************************************************************************/ void PJconsts::copyStateFrom(const PJconsts &other) { over = other.over; errorIfBestTransformationNotAvailable = other.errorIfBestTransformationNotAvailable; warnIfBestTransformationNotAvailable = other.warnIfBestTransformationNotAvailable; skipNonInstantiable = other.skipNonInstantiable; } /*****************************************************************************/ PJ *pj_new() { /*****************************************************************************/ return new (std::nothrow) PJ(); } /*****************************************************************************/ PJ *pj_default_destructor(PJ *P, int errlev) { /* Destructor */ /***************************************************************************** Does memory deallocation for "plain" PJ objects, i.e. that vast majority of PJs where the opaque object does not contain any additionally allocated memory below the P->opaque level. ******************************************************************************/ /* Even if P==0, we set the errlev on pj_error and the default context */ /* Note that both, in the multithreaded case, may then contain undefined */ /* values. This is expected behavior. For MT have one ctx per thread */ if (0 != errlev) proj_context_errno_set(pj_get_ctx(P), errlev); if (nullptr == P) return nullptr; free(P->def_size); free(P->def_shape); free(P->def_spherification); free(P->def_ellps); delete static_cast(P->hgrids_legacy); delete static_cast(P->vgrids_legacy); /* We used to call free( P->catalog ), but this will leak */ /* memory. The safe way to clear catalog and grid is to call */ /* pj_gc_unloadall(pj_get_default_ctx()); and freeate_grids(); */ /* TODO: we should probably have a public pj_cleanup() method to do all */ /* that */ /* free the interface to Charles Karney's geodesic library */ free(P->geod); /* free parameter list elements */ free_params(pj_get_ctx(P), P->params, errlev); free(P->def_full); /* free the cs2cs emulation elements */ proj_destroy(P->axisswap); proj_destroy(P->helmert); proj_destroy(P->cart); proj_destroy(P->cart_wgs84); proj_destroy(P->hgridshift); proj_destroy(P->vgridshift); proj_destroy(P->cached_op_for_proj_factors); free(static_cast(P->opaque)); delete P; return nullptr; } /*****************************************************************************/ void proj_cleanup() { /*****************************************************************************/ // Close the database context of the default PJ_CONTEXT auto ctx = pj_get_default_ctx(); ctx->iniFileLoaded = false; auto cpp_context = ctx->cpp_context; if (cpp_context) { cpp_context->closeDb(); } pj_clear_initcache(); FileManager::clearMemoryCache(); pj_clear_hgridshift_knowngrids_cache(); pj_clear_vgridshift_knowngrids_cache(); pj_clear_gridshift_knowngrids_cache(); pj_clear_sqlite_cache(); } proj-9.6.0/src/memvfs.c000664 001754 001755 00000034063 14764566077 014657 0ustar00e012349e012349000000 000000 /* Derived from https://www.sqlite.org/src/doc/tip/ext/misc/memvfs.c */ /* ** 2016-09-07 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ****************************************************************************** ** ** This is an in-memory VFS implementation. The application supplies ** a chunk of memory to hold the database file. ** ** Because there is place to store a rollback or wal journal, the database ** must use one of journal_mode=MEMORY or journal_mode=NONE. ** ** USAGE: ** ** sqlite3_open_v2("file:/whatever?ptr=0xf05538&sz=14336&max=65536", &db, ** SQLITE_OPEN_READWRITE | SQLITE_OPEN_URI, ** "memvfs"); ** ** These are the query parameters: ** ** ptr= The address of the memory buffer that holds the database. ** ** sz= The current size the database file ** ** maxsz= The maximum size of the database. In other words, the ** amount of space allocated for the ptr= buffer. ** ** The ptr= and sz= query parameters are required. If maxsz= is omitted, ** then it defaults to the sz= value. Parameter values can be in either ** decimal or hexadecimal. The filename in the URI is ignored. */ #include #include #include #include #include "memvfs.h" #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif #ifdef _MSC_VER #pragma warning(push) // Ignore unreferenced formal parameter #pragma warning(disable : 4100) #endif /* ** Forward declaration of objects used by this utility */ typedef struct sqlite3_vfs MemVfs; typedef struct MemFile MemFile; typedef struct MemVfsAppData { const unsigned char *buffer; size_t bufferSize; sqlite3_vfs *pBaseVFS; } MemVfsAppData; /* Access to a lower-level VFS that (might) implement dynamic loading, ** access to randomness, etc. */ #define ORIGVFS(p) (((MemVfsAppData *)((p)->pAppData))->pBaseVFS) /* An open file */ struct MemFile { sqlite3_file base; /* IO methods */ sqlite3_int64 sz; /* Size of the file */ sqlite3_int64 szMax; /* Space allocated to aData */ const unsigned char *aData; /* content of the file */ }; /* ** Methods for MemFile */ static int memClose(sqlite3_file *); static int memRead(sqlite3_file *, void *, int iAmt, sqlite3_int64 iOfst); static int memWrite(sqlite3_file *, const void *, int iAmt, sqlite3_int64 iOfst); static int memTruncate(sqlite3_file *, sqlite3_int64 size); static int memSync(sqlite3_file *, int flags); static int memFileSize(sqlite3_file *, sqlite3_int64 *pSize); static int memLock(sqlite3_file *, int); static int memUnlock(sqlite3_file *, int); static int memCheckReservedLock(sqlite3_file *, int *pResOut); static int memFileControl(sqlite3_file *, int op, void *pArg); static int memSectorSize(sqlite3_file *); static int memDeviceCharacteristics(sqlite3_file *); static int memShmMap(sqlite3_file *, int iPg, int pgsz, int, void volatile **); static int memShmLock(sqlite3_file *, int offset, int n, int flags); static void memShmBarrier(sqlite3_file *); static int memShmUnmap(sqlite3_file *, int deleteFlag); static int memFetch(sqlite3_file *, sqlite3_int64 iOfst, int iAmt, void **pp); static int memUnfetch(sqlite3_file *, sqlite3_int64 iOfst, void *p); /* ** Methods for MemVfs */ static int memOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int *); static int memDelete(sqlite3_vfs *, const char *zName, int syncDir); static int memAccess(sqlite3_vfs *, const char *zName, int flags, int *); static int memFullPathname(sqlite3_vfs *, const char *zName, int, char *zOut); static void *memDlOpen(sqlite3_vfs *, const char *zFilename); static void memDlError(sqlite3_vfs *, int nByte, char *zErrMsg); static void (*memDlSym(sqlite3_vfs *pVfs, void *p, const char *zSym))(void); static void memDlClose(sqlite3_vfs *, void *); static int memRandomness(sqlite3_vfs *, int nByte, char *zOut); static int memSleep(sqlite3_vfs *, int microseconds); static int memCurrentTime(sqlite3_vfs *, double *); static int memGetLastError(sqlite3_vfs *, int, char *); static int memCurrentTimeInt64(sqlite3_vfs *, sqlite3_int64 *); static sqlite3_vfs mem_vfs = { 2, /* iVersion */ 0, /* szOsFile (set when registered) */ 1024, /* mxPathname */ 0, /* pNext */ "memvfs", /* zName */ 0, /* pAppData (set when registered) */ memOpen, /* xOpen */ memDelete, /* xDelete */ memAccess, /* xAccess */ memFullPathname, /* xFullPathname */ memDlOpen, /* xDlOpen */ memDlError, /* xDlError */ memDlSym, /* xDlSym */ memDlClose, /* xDlClose */ memRandomness, /* xRandomness */ memSleep, /* xSleep */ memCurrentTime, /* xCurrentTime */ memGetLastError, /* xGetLastError */ memCurrentTimeInt64 /* xCurrentTimeInt64 */ }; static const sqlite3_io_methods mem_io_methods = { 3, /* iVersion */ memClose, /* xClose */ memRead, /* xRead */ memWrite, /* xWrite */ memTruncate, /* xTruncate */ memSync, /* xSync */ memFileSize, /* xFileSize */ memLock, /* xLock */ memUnlock, /* xUnlock */ memCheckReservedLock, /* xCheckReservedLock */ memFileControl, /* xFileControl */ memSectorSize, /* xSectorSize */ memDeviceCharacteristics, /* xDeviceCharacteristics */ memShmMap, /* xShmMap */ memShmLock, /* xShmLock */ memShmBarrier, /* xShmBarrier */ memShmUnmap, /* xShmUnmap */ memFetch, /* xFetch */ memUnfetch /* xUnfetch */ }; /* ** Close an mem-file. ** ** The pData pointer is owned by the application, so there is nothing ** to free. */ static int memClose(sqlite3_file *pFile) { return SQLITE_OK; } /* ** Read data from an mem-file. */ static int memRead(sqlite3_file *pFile, void *zBuf, int iAmt, sqlite_int64 iOfst) { MemFile *p = (MemFile *)pFile; memcpy(zBuf, p->aData + iOfst, iAmt); return SQLITE_OK; } /* ** Write data to an mem-file. */ static int memWrite(sqlite3_file *pFile, const void *z, int iAmt, sqlite_int64 iOfst) { return SQLITE_READONLY; } /* ** Truncate an mem-file. */ static int memTruncate(sqlite3_file *pFile, sqlite_int64 size) { return SQLITE_READONLY; } /* ** Sync an mem-file. */ static int memSync(sqlite3_file *pFile, int flags) { return SQLITE_OK; } /* ** Return the current file-size of an mem-file. */ static int memFileSize(sqlite3_file *pFile, sqlite_int64 *pSize) { MemFile *p = (MemFile *)pFile; *pSize = p->sz; return SQLITE_OK; } /* ** Lock an mem-file. */ static int memLock(sqlite3_file *pFile, int eLock) { return SQLITE_OK; } /* ** Unlock an mem-file. */ static int memUnlock(sqlite3_file *pFile, int eLock) { return SQLITE_OK; } /* ** Check if another file-handle holds a RESERVED lock on an mem-file. */ static int memCheckReservedLock(sqlite3_file *pFile, int *pResOut) { *pResOut = 0; return SQLITE_OK; } /* ** File control method. For custom operations on an mem-file. */ static int memFileControl(sqlite3_file *pFile, int op, void *pArg) { MemFile *p = (MemFile *)pFile; int rc = SQLITE_NOTFOUND; if (op == SQLITE_FCNTL_VFSNAME) { *(char **)pArg = sqlite3_mprintf("mem(%p,%lld)", p->aData, p->sz); rc = SQLITE_OK; } return rc; } /* ** Return the sector-size in bytes for an mem-file. */ static int memSectorSize(sqlite3_file *pFile) { return 1024; } /* ** Return the device characteristic flags supported by an mem-file. */ static int memDeviceCharacteristics(sqlite3_file *pFile) { return SQLITE_IOCAP_ATOMIC | SQLITE_IOCAP_POWERSAFE_OVERWRITE | SQLITE_IOCAP_SAFE_APPEND | SQLITE_IOCAP_SEQUENTIAL; } /* Create a shared memory file mapping */ static int memShmMap(sqlite3_file *pFile, int iPg, int pgsz, int bExtend, void volatile **pp) { return SQLITE_IOERR_SHMMAP; } /* Perform locking on a shared-memory segment */ static int memShmLock(sqlite3_file *pFile, int offset, int n, int flags) { return SQLITE_IOERR_SHMLOCK; } /* Memory barrier operation on shared memory */ static void memShmBarrier(sqlite3_file *pFile) { return; } /* Unmap a shared memory segment */ static int memShmUnmap(sqlite3_file *pFile, int deleteFlag) { return SQLITE_OK; } /* Fetch a page of a memory-mapped file */ static int memFetch(sqlite3_file *pFile, sqlite3_int64 iOfst, int iAmt, void **pp) { MemFile *p = (MemFile *)pFile; *pp = (void *)(p->aData + iOfst); return SQLITE_OK; } /* Release a memory-mapped page */ static int memUnfetch(sqlite3_file *pFile, sqlite3_int64 iOfst, void *pPage) { return SQLITE_OK; } /* ** Open an mem file handle. */ static int memOpen(sqlite3_vfs *pVfs, const char *zName, sqlite3_file *pFile, int flags, int *pOutFlags) { MemFile *p = (MemFile *)pFile; MemVfsAppData *appData = (MemVfsAppData *)(pVfs->pAppData); memset(p, 0, sizeof(*p)); if ((flags & SQLITE_OPEN_MAIN_DB) == 0) { /* Modification w.r.t upstream: instead of returning SQLITE_CANTOPEN, * delegate to origin VFS. Typically for temporary file creation. */ return ORIGVFS(pVfs)->xOpen(ORIGVFS(pVfs), zName, pFile, flags, pOutFlags); } if ((uintptr_t)(appData->buffer) != (uintptr_t)sqlite3_uri_int64(zName, "ptr", 0)) { return SQLITE_CANTOPEN; } p->aData = appData->buffer; p->sz = sqlite3_uri_int64(zName, "sz", 0); if (p->sz < 0 || (size_t)p->sz != appData->bufferSize) return SQLITE_CANTOPEN; p->szMax = sqlite3_uri_int64(zName, "max", p->sz); if (p->szMax < p->sz) return SQLITE_CANTOPEN; pFile->pMethods = &mem_io_methods; return SQLITE_OK; } /* ** Delete the file located at zPath. If the dirSync argument is true, ** ensure the file-system modifications are synced to disk before ** returning. */ static int memDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync) { return SQLITE_IOERR_DELETE; } /* ** Test for access permissions. Return true if the requested permission ** is available, or false otherwise. */ static int memAccess(sqlite3_vfs *pVfs, const char *zPath, int flags, int *pResOut) { *pResOut = 0; return SQLITE_OK; } /* ** Populate buffer zOut with the full canonical pathname corresponding ** to the pathname in zPath. zOut is guaranteed to point to a buffer ** of at least (INST_MAX_PATHNAME+1) bytes. */ static int memFullPathname(sqlite3_vfs *pVfs, const char *zPath, int nOut, char *zOut) { sqlite3_snprintf(nOut, zOut, "%s", zPath); return SQLITE_OK; } /* ** Open the dynamic library located at zPath and return a handle. */ static void *memDlOpen(sqlite3_vfs *pVfs, const char *zPath) { return ORIGVFS(pVfs)->xDlOpen(ORIGVFS(pVfs), zPath); } /* ** Populate the buffer zErrMsg (size nByte bytes) with a human readable ** utf-8 string describing the most recent error encountered associated ** with dynamic libraries. */ static void memDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg) { ORIGVFS(pVfs)->xDlError(ORIGVFS(pVfs), nByte, zErrMsg); } /* ** Return a pointer to the symbol zSymbol in the dynamic library pHandle. */ static void (*memDlSym(sqlite3_vfs *pVfs, void *p, const char *zSym))(void) { return ORIGVFS(pVfs)->xDlSym(ORIGVFS(pVfs), p, zSym); } /* ** Close the dynamic library handle pHandle. */ static void memDlClose(sqlite3_vfs *pVfs, void *pHandle) { ORIGVFS(pVfs)->xDlClose(ORIGVFS(pVfs), pHandle); } /* ** Populate the buffer pointed to by zBufOut with nByte bytes of ** random data. */ static int memRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut) { return ORIGVFS(pVfs)->xRandomness(ORIGVFS(pVfs), nByte, zBufOut); } /* ** Sleep for nMicro microseconds. Return the number of microseconds ** actually slept. */ static int memSleep(sqlite3_vfs *pVfs, int nMicro) { return ORIGVFS(pVfs)->xSleep(ORIGVFS(pVfs), nMicro); } /* ** Return the current time as a Julian Day number in *pTimeOut. */ static int memCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut) { return ORIGVFS(pVfs)->xCurrentTime(ORIGVFS(pVfs), pTimeOut); } static int memGetLastError(sqlite3_vfs *pVfs, int a, char *b) { return ORIGVFS(pVfs)->xGetLastError(ORIGVFS(pVfs), a, b); } static int memCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p) { return ORIGVFS(pVfs)->xCurrentTimeInt64(ORIGVFS(pVfs), p); } /* * Register the new VFS. */ int pj_sqlite3_memvfs_init(sqlite3_vfs *vfs, const char *vfs_name, const void *buffer, size_t bufferSize) { memcpy(vfs, &mem_vfs, sizeof(mem_vfs)); vfs->zName = vfs_name; sqlite3_vfs *defaultVFS = sqlite3_vfs_find(NULL); if (!defaultVFS) return SQLITE_ERROR; MemVfsAppData *appData = (MemVfsAppData *)sqlite3_malloc(sizeof(MemVfsAppData)); appData->buffer = buffer; appData->bufferSize = bufferSize; appData->pBaseVFS = defaultVFS; vfs->pAppData = appData; vfs->szOsFile = sizeof(MemFile); /* Modification w.r.t upstream: as we might delegate file opening * to default VFS for temporary files, we need to make sure szOsFile is * the maximum of our own need and of the default VFS. */ if (vfs->szOsFile < defaultVFS->szOsFile) vfs->szOsFile = defaultVFS->szOsFile; return sqlite3_vfs_register(vfs, 0); } void pj_sqlite3_memvfs_deallocate_user_data(sqlite3_vfs *vfs) { sqlite3_free(vfs->pAppData); vfs->pAppData = NULL; } #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef __GNUC__ #pragma GCC diagnostic pop #endif proj-9.6.0/src/memvfs.h000664 001754 001755 00000000532 14764566077 014656 0ustar00e012349e012349000000 000000 #ifndef MEMVFS_H #define MEMVFS_H #include #ifdef __cplusplus extern "C" { #endif int pj_sqlite3_memvfs_init(sqlite3_vfs *vfs, const char *vfs_name, const void *buffer, size_t bufferSize); void pj_sqlite3_memvfs_deallocate_user_data(sqlite3_vfs *vfs); #ifdef __cplusplus } #endif #endif /* MEMVFS_H */ proj-9.6.0/src/mlfn.cpp000664 001754 001755 00000005315 14764566077 014654 0ustar00e012349e012349000000 000000 #include "proj_internal.h" #include /* meridional distance for ellipsoid and inverse using 6th-order expansion in ** the third flattening n. This gives full double precision accuracy for |f| ** <= 1/150. */ #define Lmax 6 // Evaluation sum(p[i] * x^i, i, 0, N) via Horner's method. N.B. p is of // length N+1. static double polyval(double x, const double p[], int N) { double y = N < 0 ? 0 : p[N]; for (; N > 0;) y = y * x + p[--N]; return y; } // Evaluate y = sum(c[k] * sin((2*k+2) * zeta), k, 0, K-1) static double clenshaw(double szeta, double czeta, const double c[], int K) { // Approx operation count = (K + 5) mult and (2 * K + 2) add double u0 = 0, u1 = 0, // accumulators for sum X = 2 * (czeta - szeta) * (czeta + szeta); // 2 * cos(2*zeta) for (; K > 0;) { double t = X * u0 - u1 + c[--K]; u1 = u0; u0 = t; } return 2 * szeta * czeta * u0; // sin(2*zeta) * u0 } double *pj_enfn(double n) { // Expansion of (quarter meridian) / ((a+b)/2 * pi/2) as series in n^2; // these coefficients are ( (2*k - 3)!! / (2*k)!! )^2 for k = 0..3 static const double coeff_rad[] = {1, 1.0 / 4, 1.0 / 64, 1.0 / 256}; // Coefficients to convert phi to mu, Eq. A5 in arXiv:2212.05818 // with 0 terms dropped static const double coeff_mu_phi[] = { -3.0 / 2, 9.0 / 16, -3.0 / 32, 15.0 / 16, -15.0 / 32, 135.0 / 2048, -35.0 / 48, 105.0 / 256, 315.0 / 512, -189.0 / 512, -693.0 / 1280, 1001.0 / 2048, }; // Coefficients to convert mu to phi, Eq. A6 in arXiv:2212.05818 // with 0 terms dropped static const double coeff_phi_mu[] = { 3.0 / 2, -27.0 / 32, 269.0 / 512, 21.0 / 16, -55.0 / 32, 6759.0 / 4096, 151.0 / 96, -417.0 / 128, 1097.0 / 512, -15543.0 / 2560, 8011.0 / 2560, 293393.0 / 61440, }; double n2 = n * n, d = n, *en; // 2*Lmax for the Fourier coeffs for each direction of conversion + 1 for // overall multiplier. en = (double *)malloc((2 * Lmax + 1) * sizeof(double)); if (nullptr == en) return nullptr; en[0] = polyval(n2, coeff_rad, Lmax / 2) / (1 + n); for (int l = 0, o = 0; l < Lmax; ++l) { int m = (Lmax - l - 1) / 2; en[l + 1] = d * polyval(n2, coeff_mu_phi + o, m); en[l + 1 + Lmax] = d * polyval(n2, coeff_phi_mu + o, m); d *= n; o += m + 1; } return en; } double pj_mlfn(double phi, double sphi, double cphi, const double *en) { return en[0] * (phi + clenshaw(sphi, cphi, en + 1, Lmax)); } double pj_inv_mlfn(double mu, const double *en) { mu /= en[0]; return mu + clenshaw(sin(mu), cos(mu), en + 1 + Lmax, Lmax); } proj-9.6.0/src/msfn.cpp000664 001754 001755 00000000323 14764566077 014655 0ustar00e012349e012349000000 000000 /* determine constant small m */ #include "proj.h" #include "proj_internal.h" #include double pj_msfn(double sinphi, double cosphi, double es) { return (cosphi / sqrt(1. - es * sinphi * sinphi)); } proj-9.6.0/src/mutex.cpp000664 001754 001755 00000004565 14764566077 015070 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #include #include "proj.h" #include "proj_internal.h" static std::recursive_mutex core_lock; /************************************************************************/ /* pj_acquire_lock() */ /* */ /* Acquire the PROJ.4 lock. */ /************************************************************************/ void pj_acquire_lock() { core_lock.lock(); } /************************************************************************/ /* pj_release_lock() */ /* */ /* Release the PROJ.4 lock. */ /************************************************************************/ void pj_release_lock() { core_lock.unlock(); } proj-9.6.0/src/networkfilemanager.cpp000664 001754 001755 00000263641 14764566077 017614 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to network access and caching * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2019-2020, 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. *****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #define LRU11_DO_NOT_DEFINE_OUT_OF_CLASS_METHODS #if !defined(_WIN32) && !defined(__APPLE__) && !defined(_GNU_SOURCE) // For usleep() on Cygwin #define _GNU_SOURCE #endif #include #include #include #include #include #include "filemanager.hpp" #include "proj.h" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" #include "proj/internal/lru_cache.hpp" #include "proj_internal.h" #include "sqlite3_utils.hpp" #ifdef CURL_ENABLED #include #include // for sqlite3_snprintf #endif #include #ifdef _WIN32 #include #else #include #include #endif #if defined(_WIN32) #include #elif defined(__MACH__) && defined(__APPLE__) #include #elif defined(__FreeBSD__) #include #include #endif #include //! @cond Doxygen_Suppress #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) using namespace NS_PROJ::internal; NS_PROJ_START // --------------------------------------------------------------------------- static void sleep_ms(int ms) { #ifdef _WIN32 Sleep(ms); #else usleep(ms * 1000); #endif } // --------------------------------------------------------------------------- constexpr size_t DOWNLOAD_CHUNK_SIZE = 16 * 1024; constexpr int MAX_CHUNKS = 64; struct FileProperties { unsigned long long size = 0; time_t lastChecked = 0; std::string lastModified{}; std::string etag{}; }; class NetworkChunkCache { public: void insert(PJ_CONTEXT *ctx, const std::string &url, unsigned long long chunkIdx, std::vector &&data); std::shared_ptr> get(PJ_CONTEXT *ctx, const std::string &url, unsigned long long chunkIdx); std::shared_ptr> get(PJ_CONTEXT *ctx, const std::string &url, unsigned long long chunkIdx, FileProperties &props); void clearMemoryCache(); static void clearDiskChunkCache(PJ_CONTEXT *ctx); private: struct Key { std::string url; unsigned long long chunkIdx; Key(const std::string &urlIn, unsigned long long chunkIdxIn) : url(urlIn), chunkIdx(chunkIdxIn) {} bool operator==(const Key &other) const { return url == other.url && chunkIdx == other.chunkIdx; } }; struct KeyHasher { std::size_t operator()(const Key &k) const { return std::hash{}(k.url) ^ (std::hash{}(k.chunkIdx) << 1); } }; lru11::Cache< Key, std::shared_ptr>, std::mutex, std::unordered_map< Key, typename std::list>>>::iterator, KeyHasher>> cache_{MAX_CHUNKS}; }; // --------------------------------------------------------------------------- static NetworkChunkCache gNetworkChunkCache{}; // --------------------------------------------------------------------------- class NetworkFilePropertiesCache { public: void insert(PJ_CONTEXT *ctx, const std::string &url, FileProperties &props); bool tryGet(PJ_CONTEXT *ctx, const std::string &url, FileProperties &props); void clearMemoryCache(); private: lru11::Cache cache_{}; }; // --------------------------------------------------------------------------- static NetworkFilePropertiesCache gNetworkFileProperties{}; // --------------------------------------------------------------------------- class DiskChunkCache { PJ_CONTEXT *ctx_ = nullptr; std::string path_{}; sqlite3 *hDB_ = nullptr; std::unique_ptr vfs_{}; explicit DiskChunkCache(PJ_CONTEXT *ctx, const std::string &path); bool initialize(); void commitAndClose(); bool createDBStructure(); bool checkConsistency(); bool get_links(sqlite3_int64 chunk_id, sqlite3_int64 &link_id, sqlite3_int64 &prev, sqlite3_int64 &next, sqlite3_int64 &head, sqlite3_int64 &tail); bool update_links_of_prev_and_next_links(sqlite3_int64 prev, sqlite3_int64 next); bool update_linked_chunks(sqlite3_int64 link_id, sqlite3_int64 prev, sqlite3_int64 next); bool update_linked_chunks_head_tail(sqlite3_int64 head, sqlite3_int64 tail); DiskChunkCache(const DiskChunkCache &) = delete; DiskChunkCache &operator=(const DiskChunkCache &) = delete; public: static std::unique_ptr open(PJ_CONTEXT *ctx); ~DiskChunkCache(); sqlite3 *handle() { return hDB_; } std::unique_ptr prepare(const char *sql); bool move_to_head(sqlite3_int64 chunk_id); bool move_to_tail(sqlite3_int64 chunk_id); void closeAndUnlink(); }; // --------------------------------------------------------------------------- static bool pj_context_get_grid_cache_is_enabled(PJ_CONTEXT *ctx) { pj_load_ini(ctx); return ctx->gridChunkCache.enabled; } // --------------------------------------------------------------------------- static long long pj_context_get_grid_cache_max_size(PJ_CONTEXT *ctx) { pj_load_ini(ctx); return ctx->gridChunkCache.max_size; } // --------------------------------------------------------------------------- static int pj_context_get_grid_cache_ttl(PJ_CONTEXT *ctx) { pj_load_ini(ctx); return ctx->gridChunkCache.ttl; } // --------------------------------------------------------------------------- std::unique_ptr DiskChunkCache::open(PJ_CONTEXT *ctx) { if (!pj_context_get_grid_cache_is_enabled(ctx)) { return nullptr; } const auto cachePath = pj_context_get_grid_cache_filename(ctx); if (cachePath.empty()) { return nullptr; } auto diskCache = std::unique_ptr(new DiskChunkCache(ctx, cachePath)); if (!diskCache->initialize()) diskCache.reset(); return diskCache; } // --------------------------------------------------------------------------- DiskChunkCache::DiskChunkCache(PJ_CONTEXT *ctx, const std::string &path) : ctx_(ctx), path_(path) {} // --------------------------------------------------------------------------- bool DiskChunkCache::initialize() { std::string vfsName; if (ctx_->custom_sqlite3_vfs_name.empty()) { vfs_ = SQLite3VFS::create(true, false, false); if (vfs_ == nullptr) { return false; } vfsName = vfs_->name(); } else { vfsName = ctx_->custom_sqlite3_vfs_name; } sqlite3_open_v2(path_.c_str(), &hDB_, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, vfsName.c_str()); if (!hDB_) { pj_log(ctx_, PJ_LOG_ERROR, "Cannot open %s", path_.c_str()); return false; } // Cannot run more than 30 times / a bit more than one second. for (int i = 0;; i++) { int ret = sqlite3_exec(hDB_, "BEGIN EXCLUSIVE", nullptr, nullptr, nullptr); if (ret == SQLITE_OK) { break; } if (ret != SQLITE_BUSY) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); sqlite3_close(hDB_); hDB_ = nullptr; return false; } const char *max_iters = getenv("PROJ_LOCK_MAX_ITERS"); if (i >= (max_iters && max_iters[0] ? atoi(max_iters) : 30)) { // A bit more than 1 second pj_log(ctx_, PJ_LOG_ERROR, "Cannot take exclusive lock on %s", path_.c_str()); sqlite3_close(hDB_); hDB_ = nullptr; return false; } pj_log(ctx_, PJ_LOG_TRACE, "Lock taken on cache. Waiting a bit..."); // Retry every 5 ms for 50 ms, then every 10 ms for 100 ms, then // every 100 ms sleep_ms(i < 10 ? 5 : i < 20 ? 10 : 100); } char **pasResult = nullptr; int nRows = 0; int nCols = 0; sqlite3_get_table(hDB_, "SELECT 1 FROM sqlite_master WHERE name = 'properties'", &pasResult, &nRows, &nCols, nullptr); sqlite3_free_table(pasResult); if (nRows == 0) { if (!createDBStructure()) { sqlite3_close(hDB_); hDB_ = nullptr; return false; } } if (getenv("PROJ_CHECK_CACHE_CONSISTENCY")) { checkConsistency(); } return true; } // --------------------------------------------------------------------------- static const char *cache_db_structure_sql = "CREATE TABLE properties(" " url TEXT PRIMARY KEY NOT NULL," " lastChecked TIMESTAMP NOT NULL," " fileSize INTEGER NOT NULL," " lastModified TEXT," " etag TEXT" ");" "CREATE TABLE downloaded_file_properties(" " url TEXT PRIMARY KEY NOT NULL," " lastChecked TIMESTAMP NOT NULL," " fileSize INTEGER NOT NULL," " lastModified TEXT," " etag TEXT" ");" "CREATE TABLE chunk_data(" " id INTEGER PRIMARY KEY AUTOINCREMENT CHECK (id > 0)," " data BLOB NOT NULL" ");" "CREATE TABLE chunks(" " id INTEGER PRIMARY KEY AUTOINCREMENT CHECK (id > 0)," " url TEXT NOT NULL," " offset INTEGER NOT NULL," " data_id INTEGER NOT NULL," " data_size INTEGER NOT NULL," " CONSTRAINT fk_chunks_url FOREIGN KEY (url) REFERENCES properties(url)," " CONSTRAINT fk_chunks_data FOREIGN KEY (data_id) REFERENCES chunk_data(id)" ");" "CREATE INDEX idx_chunks ON chunks(url, offset);" "CREATE TABLE linked_chunks(" " id INTEGER PRIMARY KEY AUTOINCREMENT CHECK (id > 0)," " chunk_id INTEGER NOT NULL," " prev INTEGER," " next INTEGER," " CONSTRAINT fk_links_chunkid FOREIGN KEY (chunk_id) REFERENCES chunks(id)," " CONSTRAINT fk_links_prev FOREIGN KEY (prev) REFERENCES linked_chunks(id)," " CONSTRAINT fk_links_next FOREIGN KEY (next) REFERENCES linked_chunks(id)" ");" "CREATE INDEX idx_linked_chunks_chunk_id ON linked_chunks(chunk_id);" "CREATE TABLE linked_chunks_head_tail(" " head INTEGER," " tail INTEGER," " CONSTRAINT lht_head FOREIGN KEY (head) REFERENCES linked_chunks(id)," " CONSTRAINT lht_tail FOREIGN KEY (tail) REFERENCES linked_chunks(id)" ");" "INSERT INTO linked_chunks_head_tail VALUES (NULL, NULL);"; bool DiskChunkCache::createDBStructure() { pj_log(ctx_, PJ_LOG_TRACE, "Creating cache DB structure"); if (sqlite3_exec(hDB_, cache_db_structure_sql, nullptr, nullptr, nullptr) != SQLITE_OK) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } return true; } // --------------------------------------------------------------------------- // Used by checkConsistency() and insert() #define INVALIDATED_SQL_LITERAL "'invalidated'" bool DiskChunkCache::checkConsistency() { auto stmt = prepare("SELECT * FROM chunk_data WHERE id NOT IN (SELECT " "data_id FROM chunks)"); if (!stmt) { return false; } if (stmt->execute() != SQLITE_DONE) { fprintf(stderr, "Rows in chunk_data not referenced by chunks.\n"); return false; } stmt = prepare("SELECT * FROM chunks WHERE id NOT IN (SELECT chunk_id FROM " "linked_chunks)"); if (!stmt) { return false; } if (stmt->execute() != SQLITE_DONE) { fprintf(stderr, "Rows in chunks not referenced by linked_chunks.\n"); return false; } stmt = prepare("SELECT * FROM chunks WHERE url <> " INVALIDATED_SQL_LITERAL " AND url " "NOT IN (SELECT url FROM properties)"); if (!stmt) { return false; } if (stmt->execute() != SQLITE_DONE) { fprintf(stderr, "url values in chunks not referenced by properties.\n"); return false; } stmt = prepare("SELECT head, tail FROM linked_chunks_head_tail"); if (!stmt) { return false; } if (stmt->execute() != SQLITE_ROW) { fprintf(stderr, "linked_chunks_head_tail empty.\n"); return false; } const auto head = stmt->getInt64(); const auto tail = stmt->getInt64(); if (stmt->execute() != SQLITE_DONE) { fprintf(stderr, "linked_chunks_head_tail has more than one row.\n"); return false; } stmt = prepare("SELECT COUNT(*) FROM linked_chunks"); if (!stmt) { return false; } if (stmt->execute() != SQLITE_ROW) { fprintf(stderr, "linked_chunks_head_tail empty.\n"); return false; } const auto count_linked_chunks = stmt->getInt64(); if (head) { auto id = head; std::set visitedIds; stmt = prepare("SELECT next FROM linked_chunks WHERE id = ?"); if (!stmt) { return false; } while (true) { visitedIds.insert(id); stmt->reset(); stmt->bindInt64(id); if (stmt->execute() != SQLITE_ROW) { fprintf(stderr, "cannot find linked_chunks.id = %d.\n", static_cast(id)); return false; } auto next = stmt->getInt64(); if (next == 0) { if (id != tail) { fprintf(stderr, "last item when following next is not tail.\n"); return false; } break; } if (visitedIds.find(next) != visitedIds.end()) { fprintf(stderr, "found cycle on linked_chunks.next = %d.\n", static_cast(next)); return false; } id = next; } if (visitedIds.size() != static_cast(count_linked_chunks)) { fprintf(stderr, "ghost items in linked_chunks when following next.\n"); return false; } } else if (count_linked_chunks) { fprintf(stderr, "linked_chunks_head_tail.head = NULL but linked_chunks " "not empty.\n"); return false; } if (tail) { auto id = tail; std::set visitedIds; stmt = prepare("SELECT prev FROM linked_chunks WHERE id = ?"); if (!stmt) { return false; } while (true) { visitedIds.insert(id); stmt->reset(); stmt->bindInt64(id); if (stmt->execute() != SQLITE_ROW) { fprintf(stderr, "cannot find linked_chunks.id = %d.\n", static_cast(id)); return false; } auto prev = stmt->getInt64(); if (prev == 0) { if (id != head) { fprintf(stderr, "last item when following prev is not head.\n"); return false; } break; } if (visitedIds.find(prev) != visitedIds.end()) { fprintf(stderr, "found cycle on linked_chunks.prev = %d.\n", static_cast(prev)); return false; } id = prev; } if (visitedIds.size() != static_cast(count_linked_chunks)) { fprintf(stderr, "ghost items in linked_chunks when following prev.\n"); return false; } } else if (count_linked_chunks) { fprintf(stderr, "linked_chunks_head_tail.tail = NULL but linked_chunks " "not empty.\n"); return false; } fprintf(stderr, "check ok\n"); return true; } // --------------------------------------------------------------------------- void DiskChunkCache::commitAndClose() { if (hDB_) { if (sqlite3_exec(hDB_, "COMMIT", nullptr, nullptr, nullptr) != SQLITE_OK) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); } sqlite3_close(hDB_); hDB_ = nullptr; } } // --------------------------------------------------------------------------- DiskChunkCache::~DiskChunkCache() { commitAndClose(); } // --------------------------------------------------------------------------- void DiskChunkCache::closeAndUnlink() { commitAndClose(); if (vfs_) { vfs_->raw()->xDelete(vfs_->raw(), path_.c_str(), 0); } } // --------------------------------------------------------------------------- std::unique_ptr DiskChunkCache::prepare(const char *sql) { sqlite3_stmt *hStmt = nullptr; sqlite3_prepare_v2(hDB_, sql, -1, &hStmt, nullptr); if (!hStmt) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return nullptr; } return std::unique_ptr(new SQLiteStatement(hStmt)); } // --------------------------------------------------------------------------- bool DiskChunkCache::get_links(sqlite3_int64 chunk_id, sqlite3_int64 &link_id, sqlite3_int64 &prev, sqlite3_int64 &next, sqlite3_int64 &head, sqlite3_int64 &tail) { auto stmt = prepare("SELECT id, prev, next FROM linked_chunks WHERE chunk_id = ?"); if (!stmt) return false; stmt->bindInt64(chunk_id); { const auto ret = stmt->execute(); if (ret != SQLITE_ROW) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } } link_id = stmt->getInt64(); prev = stmt->getInt64(); next = stmt->getInt64(); stmt = prepare("SELECT head, tail FROM linked_chunks_head_tail"); { const auto ret = stmt->execute(); if (ret != SQLITE_ROW) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } } head = stmt->getInt64(); tail = stmt->getInt64(); return true; } // --------------------------------------------------------------------------- bool DiskChunkCache::update_links_of_prev_and_next_links(sqlite3_int64 prev, sqlite3_int64 next) { if (prev) { auto stmt = prepare("UPDATE linked_chunks SET next = ? WHERE id = ?"); if (!stmt) return false; if (next) stmt->bindInt64(next); else stmt->bindNull(); stmt->bindInt64(prev); const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } } if (next) { auto stmt = prepare("UPDATE linked_chunks SET prev = ? WHERE id = ?"); if (!stmt) return false; if (prev) stmt->bindInt64(prev); else stmt->bindNull(); stmt->bindInt64(next); const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } } return true; } // --------------------------------------------------------------------------- bool DiskChunkCache::update_linked_chunks(sqlite3_int64 link_id, sqlite3_int64 prev, sqlite3_int64 next) { auto stmt = prepare("UPDATE linked_chunks SET prev = ?, next = ? WHERE id = ?"); if (!stmt) return false; if (prev) stmt->bindInt64(prev); else stmt->bindNull(); if (next) stmt->bindInt64(next); else stmt->bindNull(); stmt->bindInt64(link_id); const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } return true; } // --------------------------------------------------------------------------- bool DiskChunkCache::update_linked_chunks_head_tail(sqlite3_int64 head, sqlite3_int64 tail) { auto stmt = prepare("UPDATE linked_chunks_head_tail SET head = ?, tail = ?"); if (!stmt) return false; if (head) stmt->bindInt64(head); else stmt->bindNull(); // shouldn't happen normally if (tail) stmt->bindInt64(tail); else stmt->bindNull(); // shouldn't happen normally const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } return true; } // --------------------------------------------------------------------------- bool DiskChunkCache::move_to_head(sqlite3_int64 chunk_id) { sqlite3_int64 link_id = 0; sqlite3_int64 prev = 0; sqlite3_int64 next = 0; sqlite3_int64 head = 0; sqlite3_int64 tail = 0; if (!get_links(chunk_id, link_id, prev, next, head, tail)) { return false; } if (link_id == head) { return true; } if (!update_links_of_prev_and_next_links(prev, next)) { return false; } if (head) { auto stmt = prepare("UPDATE linked_chunks SET prev = ? WHERE id = ?"); if (!stmt) return false; stmt->bindInt64(link_id); stmt->bindInt64(head); const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } } return update_linked_chunks(link_id, 0, head) && update_linked_chunks_head_tail(link_id, (link_id == tail) ? prev : tail); } // --------------------------------------------------------------------------- bool DiskChunkCache::move_to_tail(sqlite3_int64 chunk_id) { sqlite3_int64 link_id = 0; sqlite3_int64 prev = 0; sqlite3_int64 next = 0; sqlite3_int64 head = 0; sqlite3_int64 tail = 0; if (!get_links(chunk_id, link_id, prev, next, head, tail)) { return false; } if (link_id == tail) { return true; } if (!update_links_of_prev_and_next_links(prev, next)) { return false; } if (tail) { auto stmt = prepare("UPDATE linked_chunks SET next = ? WHERE id = ?"); if (!stmt) return false; stmt->bindInt64(link_id); stmt->bindInt64(tail); const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx_, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB_)); return false; } } return update_linked_chunks(link_id, tail, 0) && update_linked_chunks_head_tail((link_id == head) ? next : head, link_id); } // --------------------------------------------------------------------------- void NetworkChunkCache::insert(PJ_CONTEXT *ctx, const std::string &url, unsigned long long chunkIdx, std::vector &&data) { auto dataPtr(std::make_shared>(std::move(data))); cache_.insert(Key(url, chunkIdx), dataPtr); auto diskCache = DiskChunkCache::open(ctx); if (!diskCache) return; auto hDB = diskCache->handle(); // Always insert DOWNLOAD_CHUNK_SIZE bytes to avoid fragmentation std::vector blob(*dataPtr); assert(blob.size() <= DOWNLOAD_CHUNK_SIZE); blob.resize(DOWNLOAD_CHUNK_SIZE); // Check if there is an existing entry for that URL and offset auto stmt = diskCache->prepare( "SELECT id, data_id FROM chunks WHERE url = ? AND offset = ?"); if (!stmt) return; stmt->bindText(url.c_str()); stmt->bindInt64(chunkIdx * DOWNLOAD_CHUNK_SIZE); const auto mainRet = stmt->execute(); if (mainRet == SQLITE_ROW) { const auto chunk_id = stmt->getInt64(); const auto data_id = stmt->getInt64(); stmt = diskCache->prepare("UPDATE chunk_data SET data = ? WHERE id = ?"); if (!stmt) return; stmt->bindBlob(blob.data(), blob.size()); stmt->bindInt64(data_id); { const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } diskCache->move_to_head(chunk_id); return; } else if (mainRet != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } // Lambda to recycle an existing entry that was either invalidated, or // least recently used. const auto reuseExistingEntry = [ctx, &blob, &diskCache, hDB, &url, chunkIdx, &dataPtr](std::unique_ptr &stmtIn) { const auto chunk_id = stmtIn->getInt64(); const auto data_id = stmtIn->getInt64(); if (data_id <= 0) { pj_log(ctx, PJ_LOG_ERROR, "data_id <= 0"); return; } auto l_stmt = diskCache->prepare( "UPDATE chunk_data SET data = ? WHERE id = ?"); if (!l_stmt) return; l_stmt->bindBlob(blob.data(), blob.size()); l_stmt->bindInt64(data_id); { const auto ret2 = l_stmt->execute(); if (ret2 != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } l_stmt = diskCache->prepare("UPDATE chunks SET url = ?, " "offset = ?, data_size = ?, data_id = ? " "WHERE id = ?"); if (!l_stmt) return; l_stmt->bindText(url.c_str()); l_stmt->bindInt64(chunkIdx * DOWNLOAD_CHUNK_SIZE); l_stmt->bindInt64(dataPtr->size()); l_stmt->bindInt64(data_id); l_stmt->bindInt64(chunk_id); { const auto ret2 = l_stmt->execute(); if (ret2 != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } diskCache->move_to_head(chunk_id); }; // Find if there is an invalidated chunk we can reuse stmt = diskCache->prepare( "SELECT id, data_id FROM chunks " "WHERE id = (SELECT tail FROM linked_chunks_head_tail) AND " "url = " INVALIDATED_SQL_LITERAL); if (!stmt) return; { const auto ret = stmt->execute(); if (ret == SQLITE_ROW) { reuseExistingEntry(stmt); return; } else if (ret != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } // Check if we have not reached the max size of the cache stmt = diskCache->prepare("SELECT COUNT(*) FROM chunks"); if (!stmt) return; { const auto ret = stmt->execute(); if (ret != SQLITE_ROW) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } const auto max_size = pj_context_get_grid_cache_max_size(ctx); if (max_size > 0 && static_cast(stmt->getInt64() * DOWNLOAD_CHUNK_SIZE) >= max_size) { stmt = diskCache->prepare( "SELECT id, data_id FROM chunks " "WHERE id = (SELECT tail FROM linked_chunks_head_tail)"); if (!stmt) return; const auto ret = stmt->execute(); if (ret != SQLITE_ROW) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } reuseExistingEntry(stmt); return; } // Otherwise just append a new entry stmt = diskCache->prepare("INSERT INTO chunk_data(data) VALUES (?)"); if (!stmt) return; stmt->bindBlob(blob.data(), blob.size()); { const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } const auto chunk_data_id = sqlite3_last_insert_rowid(hDB); stmt = diskCache->prepare("INSERT INTO chunks(url, offset, data_id, " "data_size) VALUES (?,?,?,?)"); if (!stmt) return; stmt->bindText(url.c_str()); stmt->bindInt64(chunkIdx * DOWNLOAD_CHUNK_SIZE); stmt->bindInt64(chunk_data_id); stmt->bindInt64(dataPtr->size()); { const auto ret = stmt->execute(); if (ret != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } const auto chunk_id = sqlite3_last_insert_rowid(hDB); stmt = diskCache->prepare( "INSERT INTO linked_chunks(chunk_id, prev, next) VALUES (?,NULL,NULL)"); if (!stmt) return; stmt->bindInt64(chunk_id); if (stmt->execute() != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } stmt = diskCache->prepare("SELECT head FROM linked_chunks_head_tail"); if (!stmt) return; if (stmt->execute() != SQLITE_ROW) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } if (stmt->getInt64() == 0) { stmt = diskCache->prepare( "UPDATE linked_chunks_head_tail SET head = ?, tail = ?"); if (!stmt) return; stmt->bindInt64(chunk_id); stmt->bindInt64(chunk_id); if (stmt->execute() != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } diskCache->move_to_head(chunk_id); } // --------------------------------------------------------------------------- std::shared_ptr> NetworkChunkCache::get(PJ_CONTEXT *ctx, const std::string &url, unsigned long long chunkIdx) { std::shared_ptr> ret; if (cache_.tryGet(Key(url, chunkIdx), ret)) { return ret; } auto diskCache = DiskChunkCache::open(ctx); if (!diskCache) return ret; auto hDB = diskCache->handle(); auto stmt = diskCache->prepare( "SELECT chunks.id, chunks.data_size, chunk_data.data FROM chunks " "JOIN chunk_data ON chunks.id = chunk_data.id " "WHERE chunks.url = ? AND chunks.offset = ?"); if (!stmt) return ret; stmt->bindText(url.c_str()); stmt->bindInt64(chunkIdx * DOWNLOAD_CHUNK_SIZE); const auto mainRet = stmt->execute(); if (mainRet == SQLITE_ROW) { const auto chunk_id = stmt->getInt64(); const auto data_size = stmt->getInt64(); int blob_size = 0; const void *blob = stmt->getBlob(blob_size); if (blob_size < data_size) { pj_log(ctx, PJ_LOG_ERROR, "blob_size=%d < data_size for chunk_id=%d", blob_size, static_cast(chunk_id)); return ret; } if (data_size > static_cast(DOWNLOAD_CHUNK_SIZE)) { pj_log(ctx, PJ_LOG_ERROR, "data_size > DOWNLOAD_CHUNK_SIZE"); return ret; } ret.reset(new std::vector()); ret->assign(reinterpret_cast(blob), reinterpret_cast(blob) + static_cast(data_size)); cache_.insert(Key(url, chunkIdx), ret); if (!diskCache->move_to_head(chunk_id)) return ret; } else if (mainRet != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); } return ret; } // --------------------------------------------------------------------------- std::shared_ptr> NetworkChunkCache::get(PJ_CONTEXT *ctx, const std::string &url, unsigned long long chunkIdx, FileProperties &props) { if (!gNetworkFileProperties.tryGet(ctx, url, props)) { return nullptr; } return get(ctx, url, chunkIdx); } // --------------------------------------------------------------------------- void NetworkChunkCache::clearMemoryCache() { cache_.clear(); } // --------------------------------------------------------------------------- void NetworkChunkCache::clearDiskChunkCache(PJ_CONTEXT *ctx) { auto diskCache = DiskChunkCache::open(ctx); if (!diskCache) return; diskCache->closeAndUnlink(); } // --------------------------------------------------------------------------- void NetworkFilePropertiesCache::insert(PJ_CONTEXT *ctx, const std::string &url, FileProperties &props) { time(&props.lastChecked); cache_.insert(url, props); auto diskCache = DiskChunkCache::open(ctx); if (!diskCache) return; auto hDB = diskCache->handle(); auto stmt = diskCache->prepare("SELECT fileSize, lastModified, etag " "FROM properties WHERE url = ?"); if (!stmt) return; stmt->bindText(url.c_str()); if (stmt->execute() == SQLITE_ROW) { FileProperties cachedProps; cachedProps.size = stmt->getInt64(); const char *lastModified = stmt->getText(); cachedProps.lastModified = lastModified ? lastModified : std::string(); const char *etag = stmt->getText(); cachedProps.etag = etag ? etag : std::string(); if (props.size != cachedProps.size || props.lastModified != cachedProps.lastModified || props.etag != cachedProps.etag) { // If cached properties don't match recent fresh ones, invalidate // cached chunks stmt = diskCache->prepare("SELECT id FROM chunks WHERE url = ?"); if (!stmt) return; stmt->bindText(url.c_str()); std::vector ids; while (stmt->execute() == SQLITE_ROW) { ids.emplace_back(stmt->getInt64()); stmt->resetResIndex(); } for (const auto id : ids) { diskCache->move_to_tail(id); } stmt = diskCache->prepare( "UPDATE chunks SET url = " INVALIDATED_SQL_LITERAL ", " "offset = -1, data_size = 0 WHERE url = ?"); if (!stmt) return; stmt->bindText(url.c_str()); if (stmt->execute() != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } stmt = diskCache->prepare("UPDATE properties SET lastChecked = ?, " "fileSize = ?, lastModified = ?, etag = ? " "WHERE url = ?"); if (!stmt) return; stmt->bindInt64(props.lastChecked); stmt->bindInt64(props.size); if (props.lastModified.empty()) stmt->bindNull(); else stmt->bindText(props.lastModified.c_str()); if (props.etag.empty()) stmt->bindNull(); else stmt->bindText(props.etag.c_str()); stmt->bindText(url.c_str()); if (stmt->execute() != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } else { stmt = diskCache->prepare("INSERT INTO properties (url, lastChecked, " "fileSize, lastModified, etag) VALUES " "(?,?,?,?,?)"); if (!stmt) return; stmt->bindText(url.c_str()); stmt->bindInt64(props.lastChecked); stmt->bindInt64(props.size); if (props.lastModified.empty()) stmt->bindNull(); else stmt->bindText(props.lastModified.c_str()); if (props.etag.empty()) stmt->bindNull(); else stmt->bindText(props.etag.c_str()); if (stmt->execute() != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return; } } } // --------------------------------------------------------------------------- bool NetworkFilePropertiesCache::tryGet(PJ_CONTEXT *ctx, const std::string &url, FileProperties &props) { if (cache_.tryGet(url, props)) { return true; } auto diskCache = DiskChunkCache::open(ctx); if (!diskCache) return false; auto stmt = diskCache->prepare("SELECT lastChecked, fileSize, lastModified, etag " "FROM properties WHERE url = ?"); if (!stmt) return false; stmt->bindText(url.c_str()); if (stmt->execute() != SQLITE_ROW) { return false; } props.lastChecked = static_cast(stmt->getInt64()); props.size = stmt->getInt64(); const char *lastModified = stmt->getText(); props.lastModified = lastModified ? lastModified : std::string(); const char *etag = stmt->getText(); props.etag = etag ? etag : std::string(); const auto ttl = pj_context_get_grid_cache_ttl(ctx); if (ttl > 0) { time_t curTime; time(&curTime); if (curTime > props.lastChecked + ttl) { props = FileProperties(); return false; } } cache_.insert(url, props); return true; } // --------------------------------------------------------------------------- void NetworkFilePropertiesCache::clearMemoryCache() { cache_.clear(); } // --------------------------------------------------------------------------- class NetworkFile : public File { PJ_CONTEXT *m_ctx; std::string m_url; PROJ_NETWORK_HANDLE *m_handle; unsigned long long m_pos = 0; size_t m_nBlocksToDownload = 1; unsigned long long m_lastDownloadedOffset; FileProperties m_props; proj_network_close_cbk_type m_closeCbk; bool m_hasChanged = false; NetworkFile(const NetworkFile &) = delete; NetworkFile &operator=(const NetworkFile &) = delete; protected: NetworkFile(PJ_CONTEXT *ctx, const std::string &url, PROJ_NETWORK_HANDLE *handle, unsigned long long lastDownloadOffset, const FileProperties &props) : File(url), m_ctx(ctx), m_url(url), m_handle(handle), m_lastDownloadedOffset(lastDownloadOffset), m_props(props), m_closeCbk(ctx->networking.close) {} public: ~NetworkFile() override; size_t read(void *buffer, size_t sizeBytes) override; size_t write(const void *, size_t) override { return 0; } bool seek(unsigned long long offset, int whence) override; unsigned long long tell() override; void reassign_context(PJ_CONTEXT *ctx) override; bool hasChanged() const override { return m_hasChanged; } static std::unique_ptr open(PJ_CONTEXT *ctx, const char *filename); static bool get_props_from_headers(PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, FileProperties &props); }; // --------------------------------------------------------------------------- bool NetworkFile::get_props_from_headers(PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, FileProperties &props) { const char *contentRange = ctx->networking.get_header_value( ctx, handle, "Content-Range", ctx->networking.user_data); if (contentRange) { const char *slash = strchr(contentRange, '/'); if (slash) { props.size = std::stoull(slash + 1); const char *lastModified = ctx->networking.get_header_value( ctx, handle, "Last-Modified", ctx->networking.user_data); if (lastModified) props.lastModified = lastModified; const char *etag = ctx->networking.get_header_value( ctx, handle, "ETag", ctx->networking.user_data); if (etag) props.etag = etag; return true; } } return false; } // --------------------------------------------------------------------------- std::unique_ptr NetworkFile::open(PJ_CONTEXT *ctx, const char *filename) { FileProperties props; if (gNetworkChunkCache.get(ctx, filename, 0, props)) { return std::unique_ptr(new NetworkFile( ctx, filename, nullptr, std::numeric_limits::max(), props)); } else { std::vector buffer(DOWNLOAD_CHUNK_SIZE); size_t size_read = 0; std::string errorBuffer; errorBuffer.resize(1024); auto handle = ctx->networking.open( ctx, filename, 0, buffer.size(), buffer.data(), &size_read, errorBuffer.size(), &errorBuffer[0], ctx->networking.user_data); if (!handle) { errorBuffer.resize(strlen(errorBuffer.data())); pj_log(ctx, PJ_LOG_ERROR, "Cannot open %s: %s", filename, errorBuffer.c_str()); proj_context_errno_set(ctx, PROJ_ERR_OTHER_NETWORK_ERROR); } else if (get_props_from_headers(ctx, handle, props)) { gNetworkFileProperties.insert(ctx, filename, props); buffer.resize(size_read); gNetworkChunkCache.insert(ctx, filename, 0, std::move(buffer)); return std::unique_ptr( new NetworkFile(ctx, filename, handle, size_read, props)); } else { ctx->networking.close(ctx, handle, ctx->networking.user_data); } return std::unique_ptr(nullptr); } } // --------------------------------------------------------------------------- std::unique_ptr pj_network_file_open(PJ_CONTEXT *ctx, const char *filename) { return NetworkFile::open(ctx, filename); } // --------------------------------------------------------------------------- size_t NetworkFile::read(void *buffer, size_t sizeBytes) { if (sizeBytes == 0) return 0; auto iterOffset = m_pos; while (sizeBytes) { const auto chunkIdxToDownload = iterOffset / DOWNLOAD_CHUNK_SIZE; const auto offsetToDownload = chunkIdxToDownload * DOWNLOAD_CHUNK_SIZE; std::vector region; auto pChunk = gNetworkChunkCache.get(m_ctx, m_url, chunkIdxToDownload); if (pChunk != nullptr) { region = *pChunk; } else { if (offsetToDownload == m_lastDownloadedOffset) { // In case of consecutive reads (of small size), we use a // heuristic that we will read the file sequentially, so // we double the requested size to decrease the number of // client/server roundtrips. if (m_nBlocksToDownload < 100) m_nBlocksToDownload *= 2; } else { // Random reads. Cancel the above heuristics. m_nBlocksToDownload = 1; } // Ensure that we will request at least the number of blocks // to satisfy the remaining buffer size to read. const auto endOffsetToDownload = ((iterOffset + sizeBytes + DOWNLOAD_CHUNK_SIZE - 1) / DOWNLOAD_CHUNK_SIZE) * DOWNLOAD_CHUNK_SIZE; const auto nMinBlocksToDownload = static_cast( (endOffsetToDownload - offsetToDownload) / DOWNLOAD_CHUNK_SIZE); if (m_nBlocksToDownload < nMinBlocksToDownload) m_nBlocksToDownload = nMinBlocksToDownload; // Avoid reading already cached data. // Note: this might get evicted if concurrent reads are done, but // this should not cause bugs. Just missed optimization. for (size_t i = 1; i < m_nBlocksToDownload; i++) { if (gNetworkChunkCache.get(m_ctx, m_url, chunkIdxToDownload + i) != nullptr) { m_nBlocksToDownload = i; break; } } if (m_nBlocksToDownload > MAX_CHUNKS) m_nBlocksToDownload = MAX_CHUNKS; region.resize(m_nBlocksToDownload * DOWNLOAD_CHUNK_SIZE); size_t nRead = 0; std::string errorBuffer; errorBuffer.resize(1024); if (!m_handle) { m_handle = m_ctx->networking.open( m_ctx, m_url.c_str(), offsetToDownload, m_nBlocksToDownload * DOWNLOAD_CHUNK_SIZE, ®ion[0], &nRead, errorBuffer.size(), &errorBuffer[0], m_ctx->networking.user_data); if (!m_handle) { proj_context_errno_set(m_ctx, PROJ_ERR_OTHER_NETWORK_ERROR); return 0; } } else { nRead = m_ctx->networking.read_range( m_ctx, m_handle, offsetToDownload, m_nBlocksToDownload * DOWNLOAD_CHUNK_SIZE, ®ion[0], errorBuffer.size(), &errorBuffer[0], m_ctx->networking.user_data); } if (nRead == 0) { errorBuffer.resize(strlen(errorBuffer.data())); if (!errorBuffer.empty()) { pj_log(m_ctx, PJ_LOG_ERROR, "Cannot read in %s: %s", m_url.c_str(), errorBuffer.c_str()); } proj_context_errno_set(m_ctx, PROJ_ERR_OTHER_NETWORK_ERROR); return 0; } if (!m_hasChanged) { FileProperties props; if (get_props_from_headers(m_ctx, m_handle, props)) { if (props.size != m_props.size || props.lastModified != m_props.lastModified || props.etag != m_props.etag) { gNetworkFileProperties.insert(m_ctx, m_url, props); gNetworkChunkCache.clearMemoryCache(); m_hasChanged = true; } } } region.resize(nRead); m_lastDownloadedOffset = offsetToDownload + nRead; const auto nChunks = (region.size() + DOWNLOAD_CHUNK_SIZE - 1) / DOWNLOAD_CHUNK_SIZE; for (size_t i = 0; i < nChunks; i++) { std::vector chunk( region.data() + i * DOWNLOAD_CHUNK_SIZE, region.data() + std::min((i + 1) * DOWNLOAD_CHUNK_SIZE, region.size())); gNetworkChunkCache.insert(m_ctx, m_url, chunkIdxToDownload + i, std::move(chunk)); } } const size_t nToCopy = static_cast( std::min(static_cast(sizeBytes), region.size() - (iterOffset - offsetToDownload))); memcpy(buffer, region.data() + iterOffset - offsetToDownload, nToCopy); buffer = static_cast(buffer) + nToCopy; iterOffset += nToCopy; sizeBytes -= nToCopy; if (region.size() < static_cast(DOWNLOAD_CHUNK_SIZE) && sizeBytes != 0) { break; } } size_t nRead = static_cast(iterOffset - m_pos); m_pos = iterOffset; return nRead; } // --------------------------------------------------------------------------- bool NetworkFile::seek(unsigned long long offset, int whence) { if (whence == SEEK_SET) { m_pos = offset; } else if (whence == SEEK_CUR) { m_pos += offset; } else { if (offset != 0) return false; m_pos = m_props.size; } return true; } // --------------------------------------------------------------------------- unsigned long long NetworkFile::tell() { return m_pos; } // --------------------------------------------------------------------------- NetworkFile::~NetworkFile() { if (m_handle) { m_ctx->networking.close(m_ctx, m_handle, m_ctx->networking.user_data); } } // --------------------------------------------------------------------------- void NetworkFile::reassign_context(PJ_CONTEXT *ctx) { m_ctx = ctx; if (m_closeCbk != m_ctx->networking.close) { pj_log(m_ctx, PJ_LOG_ERROR, "Networking close callback has changed following context " "reassignment ! This is highly suspicious"); } } // --------------------------------------------------------------------------- #ifdef CURL_ENABLED struct CurlFileHandle { std::string m_url; CURL *m_handle; std::string m_headers{}; std::string m_lastval{}; std::string m_useragent{}; char m_szCurlErrBuf[CURL_ERROR_SIZE + 1] = {}; CurlFileHandle(const CurlFileHandle &) = delete; CurlFileHandle &operator=(const CurlFileHandle &) = delete; explicit CurlFileHandle(PJ_CONTEXT *ctx, const char *url, CURL *handle); ~CurlFileHandle(); static PROJ_NETWORK_HANDLE * open(PJ_CONTEXT *, const char *url, unsigned long long offset, size_t size_to_read, void *buffer, size_t *out_size_read, size_t error_string_max_size, char *out_error_string, void *); }; // --------------------------------------------------------------------------- static std::string GetExecutableName() { #if defined(__linux) std::string path; path.resize(1024); const auto ret = readlink("/proc/self/exe", &path[0], path.size()); if (ret > 0) { path.resize(ret); const auto pos = path.rfind('/'); if (pos != std::string::npos) { path = path.substr(pos + 1); } return path; } #elif defined(_WIN32) std::string path; path.resize(1024); if (GetModuleFileNameA(nullptr, &path[0], static_cast(path.size()))) { path.resize(strlen(path.c_str())); const auto pos = path.rfind('\\'); if (pos != std::string::npos) { path = path.substr(pos + 1); } return path; } #elif defined(__MACH__) && defined(__APPLE__) std::string path; path.resize(1024); uint32_t size = static_cast(path.size()); if (_NSGetExecutablePath(&path[0], &size) == 0) { path.resize(strlen(path.c_str())); const auto pos = path.rfind('/'); if (pos != std::string::npos) { path = path.substr(pos + 1); } return path; } #elif defined(__FreeBSD__) int mib[4]; mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PATHNAME; mib[3] = -1; std::string path; path.resize(1024); size_t size = path.size(); if (sysctl(mib, 4, &path[0], &size, nullptr, 0) == 0) { path.resize(strlen(path.c_str())); const auto pos = path.rfind('/'); if (pos != std::string::npos) { path = path.substr(pos + 1); } return path; } #endif return std::string(); } // --------------------------------------------------------------------------- static void checkRet(PJ_CONTEXT *ctx, CURLcode code, int line) { if (code != CURLE_OK) { pj_log(ctx, PJ_LOG_ERROR, "curl_easy_setopt at line %d failed", line); } } #define CHECK_RET(ctx, code) checkRet(ctx, code, __LINE__) // --------------------------------------------------------------------------- static std::string pj_context_get_bundle_path(PJ_CONTEXT *ctx) { pj_load_ini(ctx); return ctx->ca_bundle_path; } #if CURL_AT_LEAST_VERSION(7, 71, 0) static bool pj_context_get_native_ca(PJ_CONTEXT *ctx) { pj_load_ini(ctx); return ctx->native_ca; } #endif // --------------------------------------------------------------------------- CurlFileHandle::CurlFileHandle(PJ_CONTEXT *ctx, const char *url, CURL *handle) : m_url(url), m_handle(handle) { CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_URL, m_url.c_str())); if (getenv("PROJ_CURL_VERBOSE")) CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_VERBOSE, 1)); // CURLOPT_SUPPRESS_CONNECT_HEADERS is defined in curl 7.54.0 or newer. #if LIBCURL_VERSION_NUM >= 0x073600 CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_SUPPRESS_CONNECT_HEADERS, 1L)); #endif // Enable following redirections. Requires libcurl 7.10.1 at least. CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1)); CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_MAXREDIRS, 10)); if (getenv("PROJ_UNSAFE_SSL")) { CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0L)); CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 0L)); } #if defined(SSL_OPTIONS) // https://curl.se/libcurl/c/CURLOPT_SSL_OPTIONS.html auto ssl_options = static_cast(SSL_OPTIONS); #if CURL_AT_LEAST_VERSION(7, 71, 0) if (pj_context_get_native_ca(ctx)) { ssl_options = ssl_options | CURLSSLOPT_NATIVE_CA; } #endif CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_SSL_OPTIONS, ssl_options)); #else #if CURL_AT_LEAST_VERSION(7, 71, 0) if (pj_context_get_native_ca(ctx)) { CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_NATIVE_CA)); } #endif #endif const auto ca_bundle_path = pj_context_get_bundle_path(ctx); if (!ca_bundle_path.empty()) { CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_CAINFO, ca_bundle_path.c_str())); } CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, m_szCurlErrBuf)); if (getenv("PROJ_NO_USERAGENT") == nullptr) { m_useragent = "PROJ " STR(PROJ_VERSION_MAJOR) "." STR( PROJ_VERSION_MINOR) "." STR(PROJ_VERSION_PATCH); const auto exeName = GetExecutableName(); if (!exeName.empty()) { m_useragent = exeName + " using " + m_useragent; } CHECK_RET(ctx, curl_easy_setopt(handle, CURLOPT_USERAGENT, m_useragent.data())); } } // --------------------------------------------------------------------------- CurlFileHandle::~CurlFileHandle() { curl_easy_cleanup(m_handle); } // --------------------------------------------------------------------------- static size_t pj_curl_write_func(void *buffer, size_t count, size_t nmemb, void *req) { const size_t nSize = count * nmemb; auto pStr = static_cast(req); if (pStr->size() + nSize > pStr->capacity()) { // to avoid servers not honouring Range to cause excessive memory // allocation return 0; } pStr->append(static_cast(buffer), nSize); return nmemb; } // --------------------------------------------------------------------------- static double GetNewRetryDelay(int response_code, double dfOldDelay, const char *pszErrBuf, const char *pszCurlError) { if (response_code == 429 || response_code == 500 || (response_code >= 502 && response_code <= 504) || // S3 sends some client timeout errors as 400 Client Error (response_code == 400 && pszErrBuf && strstr(pszErrBuf, "RequestTimeout")) || (pszCurlError && strstr(pszCurlError, "Connection reset by peer")) || (pszCurlError && strstr(pszCurlError, "Connection timed out")) || (pszCurlError && strstr(pszCurlError, "SSL connection timeout"))) { // Use an exponential backoff factor of 2 plus some random jitter // We don't care about cryptographic quality randomness, hence: // coverity[dont_call] return dfOldDelay * (2 + rand() * 0.5 / RAND_MAX); } else { return 0; } } // --------------------------------------------------------------------------- constexpr double MIN_RETRY_DELAY_MS = 500; constexpr double MAX_RETRY_DELAY_MS = 60000; PROJ_NETWORK_HANDLE *CurlFileHandle::open(PJ_CONTEXT *ctx, const char *url, unsigned long long offset, size_t size_to_read, void *buffer, size_t *out_size_read, size_t error_string_max_size, char *out_error_string, void *) { CURL *hCurlHandle = curl_easy_init(); if (!hCurlHandle) return nullptr; auto file = std::unique_ptr( new CurlFileHandle(ctx, url, hCurlHandle)); double oldDelay = MIN_RETRY_DELAY_MS; std::string headers; std::string body; char szBuffer[128]; sqlite3_snprintf(sizeof(szBuffer), szBuffer, "%llu-%llu", offset, offset + size_to_read - 1); while (true) { CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_RANGE, szBuffer)); headers.clear(); headers.reserve(16 * 1024); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_HEADERDATA, &headers)); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, pj_curl_write_func)); body.clear(); body.reserve(size_to_read); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEDATA, &body)); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, pj_curl_write_func)); file->m_szCurlErrBuf[0] = '\0'; curl_easy_perform(hCurlHandle); long response_code = 0; curl_easy_getinfo(hCurlHandle, CURLINFO_HTTP_CODE, &response_code); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_HEADERDATA, nullptr)); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr)); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEDATA, nullptr)); CHECK_RET( ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr)); if (response_code == 0 || response_code >= 300) { const double delay = GetNewRetryDelay(static_cast(response_code), oldDelay, body.c_str(), file->m_szCurlErrBuf); if (delay != 0 && delay < MAX_RETRY_DELAY_MS) { pj_log(ctx, PJ_LOG_TRACE, "Got a HTTP %ld error. Retrying in %d ms", response_code, static_cast(delay)); sleep_ms(static_cast(delay)); oldDelay = delay; } else { if (out_error_string) { if (file->m_szCurlErrBuf[0]) { snprintf(out_error_string, error_string_max_size, "%s", file->m_szCurlErrBuf); } else { snprintf(out_error_string, error_string_max_size, "HTTP error %ld: %s", response_code, body.c_str()); } } return nullptr; } } else { break; } } if (out_error_string && error_string_max_size) { out_error_string[0] = '\0'; } if (!body.empty()) { memcpy(buffer, body.data(), std::min(size_to_read, body.size())); } *out_size_read = std::min(size_to_read, body.size()); file->m_headers = std::move(headers); return reinterpret_cast(file.release()); } // --------------------------------------------------------------------------- static void pj_curl_close(PJ_CONTEXT *, PROJ_NETWORK_HANDLE *handle, void * /*user_data*/) { delete reinterpret_cast(handle); } // --------------------------------------------------------------------------- static size_t pj_curl_read_range(PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *raw_handle, unsigned long long offset, size_t size_to_read, void *buffer, size_t error_string_max_size, char *out_error_string, void *) { auto handle = reinterpret_cast(raw_handle); auto hCurlHandle = handle->m_handle; double oldDelay = MIN_RETRY_DELAY_MS; std::string headers; std::string body; char szBuffer[128]; sqlite3_snprintf(sizeof(szBuffer), szBuffer, "%llu-%llu", offset, offset + size_to_read - 1); while (true) { CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_RANGE, szBuffer)); headers.clear(); headers.reserve(16 * 1024); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_HEADERDATA, &headers)); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, pj_curl_write_func)); body.clear(); body.reserve(size_to_read); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEDATA, &body)); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, pj_curl_write_func)); handle->m_szCurlErrBuf[0] = '\0'; curl_easy_perform(hCurlHandle); long response_code = 0; curl_easy_getinfo(hCurlHandle, CURLINFO_HTTP_CODE, &response_code); CHECK_RET(ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEDATA, nullptr)); CHECK_RET( ctx, curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr)); if (response_code == 0 || response_code >= 300) { const double delay = GetNewRetryDelay(static_cast(response_code), oldDelay, body.c_str(), handle->m_szCurlErrBuf); if (delay != 0 && delay < MAX_RETRY_DELAY_MS) { pj_log(ctx, PJ_LOG_TRACE, "Got a HTTP %ld error. Retrying in %d ms", response_code, static_cast(delay)); sleep_ms(static_cast(delay)); oldDelay = delay; } else { if (out_error_string) { if (handle->m_szCurlErrBuf[0]) { snprintf(out_error_string, error_string_max_size, "%s", handle->m_szCurlErrBuf); } else { snprintf(out_error_string, error_string_max_size, "HTTP error %ld: %s", response_code, body.c_str()); } } return 0; } } else { break; } } if (out_error_string && error_string_max_size) { out_error_string[0] = '\0'; } if (!body.empty()) { memcpy(buffer, body.data(), std::min(size_to_read, body.size())); } handle->m_headers = std::move(headers); return std::min(size_to_read, body.size()); } // --------------------------------------------------------------------------- static const char *pj_curl_get_header_value(PJ_CONTEXT *, PROJ_NETWORK_HANDLE *raw_handle, const char *header_name, void *) { auto handle = reinterpret_cast(raw_handle); auto pos = ci_find(handle->m_headers, header_name); if (pos == std::string::npos) return nullptr; pos += strlen(header_name); const char *c_str = handle->m_headers.c_str(); if (c_str[pos] == ':') pos++; while (c_str[pos] == ' ') pos++; auto posEnd = pos; while (c_str[posEnd] != '\r' && c_str[posEnd] != '\n' && c_str[posEnd] != '\0') posEnd++; handle->m_lastval = handle->m_headers.substr(pos, posEnd - pos); return handle->m_lastval.c_str(); } #else // --------------------------------------------------------------------------- static PROJ_NETWORK_HANDLE * no_op_network_open(PJ_CONTEXT *, const char * /* url */, unsigned long long, /* offset */ size_t, /* size to read */ void *, /* buffer to update with bytes read*/ size_t *, /* output: size actually read */ size_t error_string_max_size, char *out_error_string, void * /*user_data*/) { if (out_error_string) { snprintf(out_error_string, error_string_max_size, "%s", "Network functionality not available"); } return nullptr; } // --------------------------------------------------------------------------- static void no_op_network_close(PJ_CONTEXT *, PROJ_NETWORK_HANDLE *, void * /*user_data*/) {} #endif // --------------------------------------------------------------------------- void FileManager::fillDefaultNetworkInterface(PJ_CONTEXT *ctx) { #ifdef CURL_ENABLED ctx->networking.open = CurlFileHandle::open; ctx->networking.close = pj_curl_close; ctx->networking.read_range = pj_curl_read_range; ctx->networking.get_header_value = pj_curl_get_header_value; #else ctx->networking.open = no_op_network_open; ctx->networking.close = no_op_network_close; #endif } // --------------------------------------------------------------------------- void FileManager::clearMemoryCache() { gNetworkChunkCache.clearMemoryCache(); gNetworkFileProperties.clearMemoryCache(); } NS_PROJ_END //! @endcond // --------------------------------------------------------------------------- #ifdef WIN32 static const char nfm_dir_chars[] = "/\\"; #else static const char nfm_dir_chars[] = "/"; #endif static bool nfm_is_tilde_slash(const char *name) { return *name == '~' && strchr(nfm_dir_chars, name[1]); } static bool nfm_is_rel_or_absolute_filename(const char *name) { return strchr(nfm_dir_chars, *name) || (*name == '.' && strchr(nfm_dir_chars, name[1])) || (!strncmp(name, "..", 2) && strchr(nfm_dir_chars, name[2])) || (name[0] != '\0' && name[1] == ':' && strchr(nfm_dir_chars, name[2])); } static std::string build_url(PJ_CONTEXT *ctx, const char *name) { if (!nfm_is_tilde_slash(name) && !nfm_is_rel_or_absolute_filename(name) && !starts_with(name, "http://") && !starts_with(name, "https://")) { std::string remote_file(proj_context_get_url_endpoint(ctx)); if (!remote_file.empty()) { if (remote_file.back() != '/') { remote_file += '/'; } remote_file += name; } return remote_file; } return name; } // --------------------------------------------------------------------------- /** Define a custom set of callbacks for network access. * * All callbacks should be provided (non NULL pointers). * * @param ctx PROJ context, or NULL * @param open_cbk Callback to open a remote file given its URL * @param close_cbk Callback to close a remote file. * @param get_header_value_cbk Callback to get HTTP headers * @param read_range_cbk Callback to read a range of bytes inside a remote file. * @param user_data Arbitrary pointer provided by the user, and passed to the * above callbacks. May be NULL. * @return TRUE in case of success. * @since 7.0 */ int proj_context_set_network_callbacks( PJ_CONTEXT *ctx, proj_network_open_cbk_type open_cbk, proj_network_close_cbk_type close_cbk, proj_network_get_header_value_cbk_type get_header_value_cbk, proj_network_read_range_type read_range_cbk, void *user_data) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } if (!open_cbk || !close_cbk || !get_header_value_cbk || !read_range_cbk) { return false; } ctx->networking.open = open_cbk; ctx->networking.close = close_cbk; ctx->networking.get_header_value = get_header_value_cbk; ctx->networking.read_range = read_range_cbk; ctx->networking.user_data = user_data; return true; } // --------------------------------------------------------------------------- /** Enable or disable network access. * * This overrides the default endpoint in the PROJ configuration file or with * the PROJ_NETWORK environment variable. * * @param ctx PROJ context, or NULL * @param enable TRUE if network access is allowed. * @return TRUE if network access is possible. That is either libcurl is * available, or an alternate interface has been set. * @since 7.0 */ int proj_context_set_enable_network(PJ_CONTEXT *ctx, int enable) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } // Load ini file, now so as to override its network settings pj_load_ini(ctx); ctx->networking.enabled = enable != FALSE; #ifdef CURL_ENABLED return ctx->networking.enabled; #else return ctx->networking.enabled && ctx->networking.open != NS_PROJ::no_op_network_open; #endif } // --------------------------------------------------------------------------- /** Return if network access is enabled. * * @param ctx PROJ context, or NULL * @return TRUE if network access has been enabled * @since 7.0 */ int proj_context_is_network_enabled(PJ_CONTEXT *ctx) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } pj_load_ini(ctx); return ctx->networking.enabled; } // --------------------------------------------------------------------------- /** Define the URL endpoint to query for remote grids. * * This overrides the default endpoint in the PROJ configuration file or with * the PROJ_NETWORK_ENDPOINT environment variable. * * @param ctx PROJ context, or NULL * @param url Endpoint URL. Must NOT be NULL. * @since 7.0 */ void proj_context_set_url_endpoint(PJ_CONTEXT *ctx, const char *url) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } // Load ini file, now so as to override its network settings pj_load_ini(ctx); ctx->endpoint = url; } // --------------------------------------------------------------------------- /** Enable or disable the local cache of grid chunks * * This overrides the setting in the PROJ configuration file. * * @param ctx PROJ context, or NULL * @param enabled TRUE if the cache is enabled. * @since 7.0 */ void proj_grid_cache_set_enable(PJ_CONTEXT *ctx, int enabled) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } // Load ini file, now so as to override its settings pj_load_ini(ctx); ctx->gridChunkCache.enabled = enabled != FALSE; } // --------------------------------------------------------------------------- /** Override, for the considered context, the path and file of the local * cache of grid chunks. * * @param ctx PROJ context, or NULL * @param fullname Full name to the cache (encoded in UTF-8). If set to NULL, * caching will be disabled. * @since 7.0 */ void proj_grid_cache_set_filename(PJ_CONTEXT *ctx, const char *fullname) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } // Load ini file, now so as to override its settings pj_load_ini(ctx); ctx->gridChunkCache.filename = fullname ? fullname : std::string(); } // --------------------------------------------------------------------------- /** Override, for the considered context, the maximum size of the local * cache of grid chunks. * * @param ctx PROJ context, or NULL * @param max_size_MB Maximum size, in mega-bytes (1024*1024 bytes), or * negative value to set unlimited size. * @since 7.0 */ void proj_grid_cache_set_max_size(PJ_CONTEXT *ctx, int max_size_MB) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } // Load ini file, now so as to override its settings pj_load_ini(ctx); ctx->gridChunkCache.max_size = max_size_MB < 0 ? -1 : static_cast(max_size_MB) * 1024 * 1024; if (max_size_MB == 0) { // For debug purposes only const char *env_var = getenv("PROJ_GRID_CACHE_MAX_SIZE_BYTES"); if (env_var && env_var[0] != '\0') { ctx->gridChunkCache.max_size = atoi(env_var); } } } // --------------------------------------------------------------------------- /** Override, for the considered context, the time-to-live delay for * re-checking if the cached properties of files are still up-to-date. * * @param ctx PROJ context, or NULL * @param ttl_seconds Delay in seconds. Use negative value for no expiration. * @since 7.0 */ void proj_grid_cache_set_ttl(PJ_CONTEXT *ctx, int ttl_seconds) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } // Load ini file, now so as to override its settings pj_load_ini(ctx); ctx->gridChunkCache.ttl = ttl_seconds; } // --------------------------------------------------------------------------- /** Clear the local cache of grid chunks. * * @param ctx PROJ context, or NULL * @since 7.0 */ void proj_grid_cache_clear(PJ_CONTEXT *ctx) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } NS_PROJ::gNetworkChunkCache.clearDiskChunkCache(ctx); } // --------------------------------------------------------------------------- /** Return if a file must be downloaded or is already available in the * PROJ user-writable directory. * * The file will be determinted to have to be downloaded if it does not exist * yet in the user-writable directory, or if it is determined that a more recent * version exists. To determine if a more recent version exists, PROJ will * use the "downloaded_file_properties" table of its grid cache database. * Consequently files manually placed in the user-writable * directory without using this function would be considered as * non-existing/obsolete and would be unconditionally downloaded again. * * This function can only be used if networking is enabled, and either * the default curl network API or a custom one have been installed. * * @param ctx PROJ context, or NULL * @param url_or_filename URL or filename (without directory component) * @param ignore_ttl_setting If set to FALSE, PROJ will only check the * recentness of an already downloaded file, if * the delay between the last time it has been * verified and the current time exceeds the TTL * setting. This can save network accesses. * If set to TRUE, PROJ will unconditionally * check from the server the recentness of the file. * @return TRUE if the file must be downloaded with proj_download_file() * @since 7.0 */ int proj_is_download_needed(PJ_CONTEXT *ctx, const char *url_or_filename, int ignore_ttl_setting) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } if (!proj_context_is_network_enabled(ctx)) { pj_log(ctx, PJ_LOG_ERROR, "Networking capabilities are not enabled"); return false; } const auto url(build_url(ctx, url_or_filename)); const char *filename = strrchr(url.c_str(), '/'); if (filename == nullptr) return false; const auto localFilename( std::string(proj_context_get_user_writable_directory(ctx, false)) + filename); auto f = NS_PROJ::FileManager::open(ctx, localFilename.c_str(), NS_PROJ::FileAccess::READ_ONLY); if (!f) { return true; } f.reset(); auto diskCache = NS_PROJ::DiskChunkCache::open(ctx); if (!diskCache) return false; auto stmt = diskCache->prepare("SELECT lastChecked, fileSize, lastModified, etag " "FROM downloaded_file_properties WHERE url = ?"); if (!stmt) return true; stmt->bindText(url.c_str()); if (stmt->execute() != SQLITE_ROW) { return true; } NS_PROJ::FileProperties cachedProps; cachedProps.lastChecked = static_cast(stmt->getInt64()); cachedProps.size = stmt->getInt64(); const char *lastModified = stmt->getText(); cachedProps.lastModified = lastModified ? lastModified : std::string(); const char *etag = stmt->getText(); cachedProps.etag = etag ? etag : std::string(); if (!ignore_ttl_setting) { const auto ttl = NS_PROJ::pj_context_get_grid_cache_ttl(ctx); if (ttl > 0) { time_t curTime; time(&curTime); if (curTime > cachedProps.lastChecked + ttl) { unsigned char dummy; size_t size_read = 0; std::string errorBuffer; errorBuffer.resize(1024); auto handle = ctx->networking.open( ctx, url.c_str(), 0, 1, &dummy, &size_read, errorBuffer.size(), &errorBuffer[0], ctx->networking.user_data); if (!handle) { errorBuffer.resize(strlen(errorBuffer.data())); pj_log(ctx, PJ_LOG_ERROR, "Cannot open %s: %s", url.c_str(), errorBuffer.c_str()); return false; } NS_PROJ::FileProperties props; if (!NS_PROJ::NetworkFile::get_props_from_headers(ctx, handle, props)) { ctx->networking.close(ctx, handle, ctx->networking.user_data); return false; } ctx->networking.close(ctx, handle, ctx->networking.user_data); if (props.size != cachedProps.size || props.lastModified != cachedProps.lastModified || props.etag != cachedProps.etag) { return true; } stmt = diskCache->prepare( "UPDATE downloaded_file_properties SET lastChecked = ? " "WHERE url = ?"); if (!stmt) return false; stmt->bindInt64(curTime); stmt->bindText(url.c_str()); if (stmt->execute() != SQLITE_DONE) { auto hDB = diskCache->handle(); pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return false; } } } } return false; } // --------------------------------------------------------------------------- static NS_PROJ::io::DatabaseContextPtr nfm_getDBcontext(PJ_CONTEXT *ctx) { try { return ctx->get_cpp_context()->getDatabaseContext().as_nullable(); } catch (const std::exception &e) { pj_log(ctx, PJ_LOG_DEBUG, "%s", e.what()); return nullptr; } } // --------------------------------------------------------------------------- /** Download a file in the PROJ user-writable directory. * * The file will only be downloaded if it does not exist yet in the * user-writable directory, or if it is determined that a more recent * version exists. To determine if a more recent version exists, PROJ will * use the "downloaded_file_properties" table of its grid cache database. * Consequently files manually placed in the user-writable * directory without using this function would be considered as * non-existing/obsolete and would be unconditionally downloaded again. * * This function can only be used if networking is enabled, and either * the default curl network API or a custom one have been installed. * * @param ctx PROJ context, or NULL * @param url_or_filename URL or filename (without directory component) * @param ignore_ttl_setting If set to FALSE, PROJ will only check the * recentness of an already downloaded file, if * the delay between the last time it has been * verified and the current time exceeds the TTL * setting. This can save network accesses. * If set to TRUE, PROJ will unconditionally * check from the server the recentness of the file. * @param progress_cbk Progress callback, or NULL. * The passed percentage is in the [0, 1] range. * The progress callback must return TRUE * if download must be continued. * @param user_data User data to provide to the progress callback, or NULL * @return TRUE if the download was successful (or not needed) * @since 7.0 */ int proj_download_file(PJ_CONTEXT *ctx, const char *url_or_filename, int ignore_ttl_setting, int (*progress_cbk)(PJ_CONTEXT *, double pct, void *user_data), void *user_data) { if (ctx == nullptr) { ctx = pj_get_default_ctx(); } if (!proj_context_is_network_enabled(ctx)) { pj_log(ctx, PJ_LOG_ERROR, "Networking capabilities are not enabled"); return false; } if (!proj_is_download_needed(ctx, url_or_filename, ignore_ttl_setting)) { return true; } const auto url(build_url(ctx, url_or_filename)); const char *lastSlash = strrchr(url.c_str(), '/'); if (lastSlash == nullptr) return false; const auto localFilename( std::string(proj_context_get_user_writable_directory(ctx, true)) + lastSlash); // Evict potential existing (empty) entry from ctx->lookupedFiles if we // have tried previously from accessing the non-existing local file. // Cf https://github.com/OSGeo/PROJ/issues/4397 { const char *short_filename = lastSlash + 1; auto iter = ctx->lookupedFiles.find(short_filename); if (iter != ctx->lookupedFiles.end()) { ctx->lookupedFiles.erase(iter); } auto dbContext = nfm_getDBcontext(ctx); if (dbContext) { dbContext->invalidateGridInfo(short_filename); } } #ifdef _WIN32 const int nPID = GetCurrentProcessId(); #else const int nPID = getpid(); #endif char szUniqueSuffix[128]; snprintf(szUniqueSuffix, sizeof(szUniqueSuffix), "%d_%p", nPID, static_cast(&url)); const auto localFilenameTmp(localFilename + szUniqueSuffix); auto f = NS_PROJ::FileManager::open(ctx, localFilenameTmp.c_str(), NS_PROJ::FileAccess::CREATE); if (!f) { pj_log(ctx, PJ_LOG_ERROR, "Cannot create %s", localFilenameTmp.c_str()); return false; } constexpr size_t FULL_FILE_CHUNK_SIZE = 1024 * 1024; std::vector buffer(FULL_FILE_CHUNK_SIZE); // For testing purposes only const char *env_var_PROJ_FULL_FILE_CHUNK_SIZE = getenv("PROJ_FULL_FILE_CHUNK_SIZE"); if (env_var_PROJ_FULL_FILE_CHUNK_SIZE && env_var_PROJ_FULL_FILE_CHUNK_SIZE[0] != '\0') { buffer.resize(atoi(env_var_PROJ_FULL_FILE_CHUNK_SIZE)); } size_t size_read = 0; std::string errorBuffer; errorBuffer.resize(1024); auto handle = ctx->networking.open( ctx, url.c_str(), 0, buffer.size(), &buffer[0], &size_read, errorBuffer.size(), &errorBuffer[0], ctx->networking.user_data); if (!handle) { errorBuffer.resize(strlen(errorBuffer.data())); pj_log(ctx, PJ_LOG_ERROR, "Cannot open %s: %s", url.c_str(), errorBuffer.c_str()); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilenameTmp.c_str()); return false; } time_t curTime; time(&curTime); NS_PROJ::FileProperties props; if (!NS_PROJ::NetworkFile::get_props_from_headers(ctx, handle, props)) { ctx->networking.close(ctx, handle, ctx->networking.user_data); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilenameTmp.c_str()); return false; } if (size_read == 0) { pj_log(ctx, PJ_LOG_ERROR, "Did not get as many bytes as expected"); ctx->networking.close(ctx, handle, ctx->networking.user_data); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilenameTmp.c_str()); return false; } if (f->write(buffer.data(), size_read) != size_read) { pj_log(ctx, PJ_LOG_ERROR, "Write error"); ctx->networking.close(ctx, handle, ctx->networking.user_data); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilenameTmp.c_str()); return false; } unsigned long long totalDownloaded = size_read; while (totalDownloaded < props.size) { if (totalDownloaded + buffer.size() > props.size) { buffer.resize(static_cast(props.size - totalDownloaded)); } errorBuffer.resize(1024); size_read = ctx->networking.read_range( ctx, handle, totalDownloaded, buffer.size(), &buffer[0], errorBuffer.size(), &errorBuffer[0], ctx->networking.user_data); if (size_read < buffer.size()) { pj_log(ctx, PJ_LOG_ERROR, "Did not get as many bytes as expected"); ctx->networking.close(ctx, handle, ctx->networking.user_data); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilenameTmp.c_str()); return false; } if (f->write(buffer.data(), size_read) != size_read) { pj_log(ctx, PJ_LOG_ERROR, "Write error"); ctx->networking.close(ctx, handle, ctx->networking.user_data); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilenameTmp.c_str()); return false; } totalDownloaded += size_read; if (progress_cbk && !progress_cbk(ctx, double(totalDownloaded) / props.size, user_data)) { ctx->networking.close(ctx, handle, ctx->networking.user_data); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilenameTmp.c_str()); return false; } } ctx->networking.close(ctx, handle, ctx->networking.user_data); f.reset(); NS_PROJ::FileManager::unlink(ctx, localFilename.c_str()); if (!NS_PROJ::FileManager::rename(ctx, localFilenameTmp.c_str(), localFilename.c_str())) { pj_log(ctx, PJ_LOG_ERROR, "Cannot rename %s to %s", localFilenameTmp.c_str(), localFilename.c_str()); return false; } auto diskCache = NS_PROJ::DiskChunkCache::open(ctx); if (!diskCache) return false; auto stmt = diskCache->prepare("SELECT lastChecked, fileSize, lastModified, etag " "FROM downloaded_file_properties WHERE url = ?"); if (!stmt) return false; stmt->bindText(url.c_str()); props.lastChecked = curTime; auto hDB = diskCache->handle(); if (stmt->execute() == SQLITE_ROW) { stmt = diskCache->prepare( "UPDATE downloaded_file_properties SET lastChecked = ?, " "fileSize = ?, lastModified = ?, etag = ? " "WHERE url = ?"); if (!stmt) return false; stmt->bindInt64(props.lastChecked); stmt->bindInt64(props.size); if (props.lastModified.empty()) stmt->bindNull(); else stmt->bindText(props.lastModified.c_str()); if (props.etag.empty()) stmt->bindNull(); else stmt->bindText(props.etag.c_str()); stmt->bindText(url.c_str()); if (stmt->execute() != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return false; } } else { stmt = diskCache->prepare( "INSERT INTO downloaded_file_properties (url, lastChecked, " "fileSize, lastModified, etag) VALUES " "(?,?,?,?,?)"); if (!stmt) return false; stmt->bindText(url.c_str()); stmt->bindInt64(props.lastChecked); stmt->bindInt64(props.size); if (props.lastModified.empty()) stmt->bindNull(); else stmt->bindText(props.lastModified.c_str()); if (props.etag.empty()) stmt->bindNull(); else stmt->bindText(props.etag.c_str()); if (stmt->execute() != SQLITE_DONE) { pj_log(ctx, PJ_LOG_ERROR, "%s", sqlite3_errmsg(hDB)); return false; } } return true; } // --------------------------------------------------------------------------- //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- std::string pj_context_get_grid_cache_filename(PJ_CONTEXT *ctx) { pj_load_ini(ctx); if (!ctx->gridChunkCache.filename.empty()) { return ctx->gridChunkCache.filename; } const std::string path(proj_context_get_user_writable_directory(ctx, true)); ctx->gridChunkCache.filename = path + "/cache.db"; return ctx->gridChunkCache.filename; } //! @endcond proj-9.6.0/src/param.cpp000664 001754 001755 00000015354 14764566077 015024 0ustar00e012349e012349000000 000000 /* put parameters in linked list and retrieve */ #include #include #include #include #include #include "proj.h" #include "proj_internal.h" /* create parameter list entry */ paralist *pj_mkparam(const char *str) { paralist *newitem; if ((newitem = (paralist *)malloc(sizeof(paralist) + strlen(str))) != nullptr) { newitem->used = 0; newitem->next = nullptr; if (*str == '+') ++str; (void)strcpy(newitem->param, str); } return newitem; } /* As pj_mkparam, but payload ends at first whitespace, rather than at end of * */ paralist *pj_mkparam_ws(const char *str, const char **next_str) { paralist *newitem; size_t len = 0; if (nullptr == str) return nullptr; /* Find start and length of string */ while (isspace(*str)) str++; if (*str == '+') str++; bool in_string = false; for (; str[len] != '\0'; len++) { if (in_string) { if (str[len] == '"' && str[len + 1] == '"') { len++; } else if (str[len] == '"') { in_string = false; } } else if (str[len] == '=' && str[len + 1] == '"') { in_string = true; } else if (isspace(str[len])) { break; } } if (next_str) *next_str = str + len; /* Use calloc to automagically 0-terminate the copy */ newitem = (paralist *)calloc(1, sizeof(paralist) + len + 1); if (nullptr == newitem) return nullptr; memcpy(newitem->param, str, len); newitem->used = 0; newitem->next = nullptr; return newitem; } /**************************************************************************************/ paralist *pj_param_exists(paralist *list, const char *parameter) { /*************************************************************************************** Determine whether a given parameter exists in a paralist. If it does, return a pointer to the corresponding list element - otherwise return 0. In support of the pipeline syntax, the search is terminated once a "+step" list element is reached, in which case a 0 is returned, unless the parameter searched for is actually "step", in which case a pointer to the "step" list element is returned. This function is equivalent to the pj_param (...) call with the "opt" argument set to the parameter name preceeeded by a 't'. But by using this one, one avoids writing the code allocating memory for a new copy of parameter name, and prepending the t (for compile time known names, this is obviously not an issue). ***************************************************************************************/ paralist *next = list; const char *c = strchr(parameter, '='); size_t len = strlen(parameter); if (c) len = c - parameter; if (list == nullptr) return nullptr; for (next = list; next; next = next->next) { if (0 == strncmp(parameter, next->param, len) && (next->param[len] == '=' || next->param[len] == 0)) { next->used = 1; return next; } if (0 == strcmp(parameter, "step")) return nullptr; } return nullptr; } /************************************************************************/ /* 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 */ /* */ /* Search is terminated when "step" is found, in which case */ /* 0 is returned, unless "step" was the target searched for. */ /* */ /************************************************************************/ PROJVALUE pj_param(PJ_CONTEXT *ctx, paralist *pl, const char *opt) { int type; unsigned l; PROJVALUE value = {0}; if (ctx == nullptr) ctx = pj_get_default_ctx(); type = *opt++; if (nullptr == strchr("tbirds", type)) { fprintf(stderr, "invalid request to pj_param, fatal\n"); exit(1); } pl = pj_param_exists(pl, opt); if (type == 't') { value.i = pl != nullptr; return value; } /* Not found */ if (nullptr == pl) { /* Return value after the switch, so that the return path is */ /* taken in all cases */ switch (type) { case 'b': case 'i': value.i = 0; break; case 'd': case 'r': value.f = 0.; break; case 's': value.s = nullptr; break; } return value; } /* Found parameter - now find its value */ pl->used |= 1; l = (int)strlen(opt); opt = pl->param + l; if (*opt == '=') ++opt; switch (type) { case 'i': /* integer input */ value.i = atoi(opt); for (const char *ptr = opt; *ptr != '\0'; ++ptr) { if (!(*ptr >= '0' && *ptr <= '9')) { proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); value.i = 0; } } break; case 'd': /* simple real input */ value.f = pj_atof(opt); break; case 'r': /* degrees input */ value.f = dmstor_ctx(ctx, opt, nullptr); 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: proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); value.i = 0; break; } break; } return value; } proj-9.6.0/src/phi2.cpp000664 001754 001755 00000012730 14764566077 014561 0ustar00e012349e012349000000 000000 /* Determine latitude angle phi-2. */ #include #include #include #include "proj.h" #include "proj_internal.h" double pj_sinhpsi2tanphi(PJ_CONTEXT *ctx, const double taup, const double e) { /**************************************************************************** * Convert tau' = sinh(psi) = tan(chi) to tau = tan(phi). The code is taken * from GeographicLib::Math::tauf(taup, e). * * Here * phi = geographic latitude (radians) * psi is the isometric latitude * psi = asinh(tan(phi)) - e * atanh(e * sin(phi)) * = asinh(tan(chi)) * chi is the conformal latitude * * The representation of latitudes via their tangents, tan(phi) and *tan(chi), maintains full *relative* accuracy close to latitude = 0 and +/- *pi/2. This is sometimes important, e.g., to compute the scale of the *transverse Mercator projection which involves cos(phi)/cos(chi) tan(phi) * * From Karney (2011), Eq. 7, * * tau' = sinh(psi) = sinh(asinh(tan(phi)) - e * atanh(e * sin(phi))) * = tan(phi) * cosh(e * atanh(e * sin(phi))) - * sec(phi) * sinh(e * atanh(e * sin(phi))) * = tau * sqrt(1 + sigma^2) - sqrt(1 + tau^2) * sigma * where * sigma = sinh(e * atanh( e * tau / sqrt(1 + tau^2) )) * * For e small, * * tau' = (1 - e^2) * tau * * The relation tau'(tau) can therefore by reliably inverted by Newton's * method with * * tau = tau' / (1 - e^2) * * as an initial guess. Newton's method requires dtau'/dtau. Noting that * * dsigma/dtau = e^2 * sqrt(1 + sigma^2) / * (sqrt(1 + tau^2) * (1 + (1 - e^2) * tau^2)) * d(sqrt(1 + tau^2))/dtau = tau / sqrt(1 + tau^2) * * we have * * dtau'/dtau = (1 - e^2) * sqrt(1 + tau'^2) * sqrt(1 + tau^2) / * (1 + (1 - e^2) * tau^2) * * This works fine unless tau^2 and tau'^2 overflows. This may be partially * cured by writing, e.g., sqrt(1 + tau^2) as hypot(1, tau). However, nan * will still be generated with tau' = inf, since (inf - inf) will appear in * the Newton iteration. * * If we note that for sufficiently large |tau|, i.e., |tau| >= 2/sqrt(eps), * sqrt(1 + tau^2) = |tau| and * * tau' = exp(- e * atanh(e)) * tau * * So * * tau = exp(e * atanh(e)) * tau' * * can be returned unless |tau| >= 2/sqrt(eps); this then avoids overflow * problems for large tau' and returns the correct result for tau' = +/-inf * and nan. * * Newton's method usually take 2 iterations to converge to double precision * accuracy (for WGS84 flattening). However only 1 iteration is needed for * |chi| < 3.35 deg. In addition, only 1 iteration is needed for |chi| > * 89.18 deg (tau' > 70), if tau = exp(e * atanh(e)) * tau' is used as the * starting guess. ****************************************************************************/ constexpr int numit = 5; // min iterations = 1, max iterations = 2; mean = 1.954 static const double rooteps = sqrt(std::numeric_limits::epsilon()); static const double tol = rooteps / 10; // the criterion for Newton's method static const double tmax = 2 / rooteps; // threshold for large arg limit exact const double e2m = 1 - e * e; const double stol = tol * std::max(1.0, fabs(taup)); // The initial guess. 70 corresponds to chi = 89.18 deg (see above) double tau = fabs(taup) > 70 ? taup * exp(e * atanh(e)) : taup / e2m; if (!(fabs(tau) < tmax)) // handles +/-inf and nan and e = 1 return tau; // If we need to deal with e > 1, then we could include: // if (e2m < 0) return std::numeric_limits::quiet_NaN(); int i = numit; for (; i; --i) { double tau1 = sqrt(1 + tau * tau); double sig = sinh(e * atanh(e * tau / tau1)); double taupa = sqrt(1 + sig * sig) * tau - sig * tau1; double dtau = ((taup - taupa) * (1 + e2m * (tau * tau)) / (e2m * tau1 * sqrt(1 + taupa * taupa))); tau += dtau; if (!(fabs(dtau) >= stol)) // backwards test to allow nans to succeed. break; } if (i == 0) proj_context_errno_set(ctx, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return tau; } /*****************************************************************************/ double pj_phi2(PJ_CONTEXT *ctx, const double ts0, const double e) { /**************************************************************************** * Determine latitude angle phi-2. * Inputs: * ts = exp(-psi) where psi is the isometric latitude (dimensionless) * this variable is defined in Snyder (1987), Eq. (7-10) * e = eccentricity of the ellipsoid (dimensionless) * Output: * phi = geographic latitude (radians) * Here isometric latitude is defined by * psi = log( tan(pi/4 + phi/2) * * ( (1 - e*sin(phi)) / (1 + e*sin(phi)) )^(e/2) ) * = asinh(tan(phi)) - e * atanh(e * sin(phi)) * = asinh(tan(chi)) * chi = conformal latitude * * This routine converts t = exp(-psi) to * * tau' = tan(chi) = sinh(psi) = (1/t - t)/2 * * returns atan(sinpsi2tanphi(tau')) ***************************************************************************/ return atan(pj_sinhpsi2tanphi(ctx, (1 / ts0 - ts0) / 2, e)); } proj-9.6.0/src/pipeline.cpp000664 001754 001755 00000063036 14764566077 015531 0ustar00e012349e012349000000 000000 /******************************************************************************* Transformation pipeline manager Thomas Knudsen, 2016-05-20/2016-11-20 ******************************************************************************** Geodetic transformations are typically organized in a number of steps. For example, a datum shift could be carried out through these steps: 1. Convert (latitude, longitude, ellipsoidal height) to 3D geocentric cartesian coordinates (X, Y, Z) 2. Transform the (X, Y, Z) coordinates to the new datum, using a 7 parameter Helmert transformation. 3. Convert (X, Y, Z) back to (latitude, longitude, ellipsoidal height) If the height system used is orthometric, rather than ellipsoidal, another step is needed at each end of the process: 1. Add the local geoid undulation (N) to the orthometric height to obtain the ellipsoidal (i.e. geometric) height. 2. Convert (latitude, longitude, ellipsoidal height) to 3D geocentric cartesian coordinates (X, Y, Z) 3. Transform the (X, Y, Z) coordinates to the new datum, using a 7 parameter Helmert transformation. 4. Convert (X, Y, Z) back to (latitude, longitude, ellipsoidal height) 5. Subtract the local geoid undulation (N) from the ellipsoidal height to obtain the orthometric height. Additional steps can be added for e.g. change of vertical datum, so the list can grow fairly long. None of the steps are, however, particularly complex, and data flow is strictly from top to bottom. Hence, in principle, the first example above could be implemented using Unix pipelines: cat my_coordinates | geographic_to_xyz | helmert | xyz_to_geographic > my_transformed_coordinates in the grand tradition of Software Tools [1]. The proj pipeline driver implements a similar concept: Stringing together a number of steps, feeding the output of one step to the input of the next. It is a very powerful concept, that increases the range of relevance of the proj.4 system substantially. It is, however, not a particularly intrusive addition to the PROJ.4 code base: The implementation is by and large completed by adding an extra projection called "pipeline" (i.e. this file), which handles all business, and a small amount of added functionality in the pj_init code, implementing support for multilevel, embedded pipelines. Syntactically, the pipeline system introduces the "+step" keyword (which indicates the start of each transformation step), and reintroduces the +inv keyword (indicating that a given transformation step should run in reverse, i.e. forward, when the pipeline is executed in inverse direction, and vice versa). Hence, the first transformation example above, can be implemented as: +proj=pipeline +step proj=cart +step proj=helmert +step proj=cart +inv Where indicate the Helmert arguments: 3 translations (+x=..., +y=..., +z=...), 3 rotations (+rx=..., +ry=..., +rz=...) and a scale factor (+s=...). Following geodetic conventions, the rotations are given in arcseconds, and the scale factor is given as parts-per-million. [1] B. W. Kernighan & P. J. Plauger: Software tools. Reading, Massachusetts, Addison-Wesley, 1976, 338 pp. ******************************************************************************** Thomas Knudsen, thokn@sdfe.dk, 2016-05-20 ******************************************************************************** * Copyright (c) 2016, 2017, 2018 Thomas Knudsen / SDFE * * 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 #include #include "geodesic.h" #include "proj.h" #include "proj_internal.h" PROJ_HEAD(pipeline, "Transformation pipeline manager"); PROJ_HEAD(pop, "Retrieve coordinate value from pipeline stack"); PROJ_HEAD(push, "Save coordinate value on pipeline stack"); /* Projection specific elements for the PJ object */ namespace { // anonymous namespace struct Step { PJ *pj = nullptr; bool omit_fwd = false; bool omit_inv = false; Step(PJ *pjIn, bool omitFwdIn, bool omitInvIn) : pj(pjIn), omit_fwd(omitFwdIn), omit_inv(omitInvIn) {} Step(Step &&other) : pj(std::move(other.pj)), omit_fwd(other.omit_fwd), omit_inv(other.omit_inv) { other.pj = nullptr; } Step(const Step &) = delete; Step &operator=(const Step &) = delete; ~Step() { proj_destroy(pj); } }; struct Pipeline { char **argv = nullptr; char **current_argv = nullptr; std::vector steps{}; std::stack stack[4]; }; struct PushPop { bool v1; bool v2; bool v3; bool v4; }; } // anonymous namespace static void pipeline_forward_4d(PJ_COORD &point, PJ *P); static void pipeline_reverse_4d(PJ_COORD &point, PJ *P); static PJ_XYZ pipeline_forward_3d(PJ_LPZ lpz, PJ *P); static PJ_LPZ pipeline_reverse_3d(PJ_XYZ xyz, PJ *P); static PJ_XY pipeline_forward(PJ_LP lp, PJ *P); static PJ_LP pipeline_reverse(PJ_XY xy, PJ *P); static void pipeline_reassign_context(PJ *P, PJ_CONTEXT *ctx) { auto pipeline = static_cast(P->opaque); for (auto &step : pipeline->steps) proj_assign_context(step.pj, ctx); } static void pipeline_forward_4d(PJ_COORD &point, PJ *P) { auto pipeline = static_cast(P->opaque); for (auto &step : pipeline->steps) { if (!step.omit_fwd) { if (!step.pj->inverted) pj_fwd4d(point, step.pj); else pj_inv4d(point, step.pj); if (point.xyzt.x == HUGE_VAL) { break; } } } } static void pipeline_reverse_4d(PJ_COORD &point, PJ *P) { auto pipeline = static_cast(P->opaque); for (auto iterStep = pipeline->steps.rbegin(); iterStep != pipeline->steps.rend(); ++iterStep) { const auto &step = *iterStep; if (!step.omit_inv) { if (step.pj->inverted) pj_fwd4d(point, step.pj); else pj_inv4d(point, step.pj); if (point.xyzt.x == HUGE_VAL) { break; } } } } static PJ_XYZ pipeline_forward_3d(PJ_LPZ lpz, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.lpz = lpz; auto pipeline = static_cast(P->opaque); for (auto &step : pipeline->steps) { if (!step.omit_fwd) { point = pj_approx_3D_trans(step.pj, PJ_FWD, point); if (point.xyzt.x == HUGE_VAL) { break; } } } return point.xyz; } static PJ_LPZ pipeline_reverse_3d(PJ_XYZ xyz, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.xyz = xyz; auto pipeline = static_cast(P->opaque); for (auto iterStep = pipeline->steps.rbegin(); iterStep != pipeline->steps.rend(); ++iterStep) { const auto &step = *iterStep; if (!step.omit_inv) { point = proj_trans(step.pj, PJ_INV, point); if (point.xyzt.x == HUGE_VAL) { break; } } } return point.lpz; } static PJ_XY pipeline_forward(PJ_LP lp, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.lp = lp; auto pipeline = static_cast(P->opaque); for (auto &step : pipeline->steps) { if (!step.omit_fwd) { point = pj_approx_2D_trans(step.pj, PJ_FWD, point); if (point.xyzt.x == HUGE_VAL) { break; } } } return point.xy; } static PJ_LP pipeline_reverse(PJ_XY xy, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.xy = xy; auto pipeline = static_cast(P->opaque); for (auto iterStep = pipeline->steps.rbegin(); iterStep != pipeline->steps.rend(); ++iterStep) { const auto &step = *iterStep; if (!step.omit_inv) { point = pj_approx_2D_trans(step.pj, PJ_INV, point); if (point.xyzt.x == HUGE_VAL) { break; } } } return point.lp; } static PJ *destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); auto pipeline = static_cast(P->opaque); free(pipeline->argv); free(pipeline->current_argv); delete pipeline; P->opaque = nullptr; return pj_default_destructor(P, errlev); } /* count the number of args in pipeline definition, and mark all args as used */ static size_t argc_params(paralist *params) { size_t argc = 0; for (; params != nullptr; params = params->next) { argc++; params->used = 1; } return ++argc; /* one extra for the sentinel */ } /* Sentinel for argument list */ static const char *argv_sentinel = "step"; /* turn paralist into argc/argv style argument list */ static char **argv_params(paralist *params, size_t argc) { char **argv; size_t i = 0; argv = static_cast(calloc(argc, sizeof(char *))); if (nullptr == argv) return nullptr; for (; params != nullptr; params = params->next) argv[i++] = params->param; argv[i++] = const_cast(argv_sentinel); return argv; } /* Being the special operator that the pipeline is, we have to handle the */ /* ellipsoid differently than usual. In general, the pipeline operation does */ /* not need an ellipsoid, but in some cases it is beneficial nonetheless. */ /* Unfortunately we can't use the normal ellipsoid setter in pj_init, since */ /* it adds a +ellps parameter to the global args if nothing else is specified*/ /* This is problematic since that ellipsoid spec is then passed on to the */ /* pipeline children. This is rarely what we want, so here we implement our */ /* own logic instead. If an ellipsoid is set in the global args, it is used */ /* as the pipeline ellipsoid. Otherwise we use GRS80 parameters as default. */ /* At last we calculate the rest of the ellipsoid parameters and */ /* re-initialize P->geod. */ static void set_ellipsoid(PJ *P) { paralist *cur, *attachment; int err = proj_errno_reset(P); /* Break the linked list after the global args */ attachment = nullptr; for (cur = P->params; cur != nullptr; cur = cur->next) /* cur->next will always be non 0 given argv_sentinel presence, */ /* but this is far from being obvious for a static analyzer */ if (cur->next != nullptr && strcmp(argv_sentinel, cur->next->param) == 0) { attachment = cur->next; cur->next = nullptr; break; } /* Check if there's any ellipsoid specification in the global params. */ /* If not, use GRS80 as default */ if (0 != pj_ellipsoid(P)) { P->a = 6378137.0; P->f = 1.0 / 298.257222101; P->es = 2 * P->f - P->f * P->f; /* reset an "unerror": In this special use case, the errno is */ /* not an error signal, but just a reply from pj_ellipsoid, */ /* telling us that "No - there was no ellipsoid definition in */ /* the PJ you provided". */ proj_errno_reset(P); } P->a_orig = P->a; P->es_orig = P->es; if (pj_calc_ellipsoid_params(P, P->a, P->es) == 0) geod_init(P->geod, P->a, P->f); /* Re-attach the dangling list */ /* Note: cur will always be non 0 given argv_sentinel presence, */ /* but this is far from being obvious for a static analyzer */ if (cur != nullptr) cur->next = attachment; proj_errno_restore(P, err); } PJ *OPERATION(pipeline, 0) { int i, nsteps = 0, argc; int i_pipeline = -1, i_first_step = -1, i_current_step; char **argv, **current_argv; if (P->ctx->pipelineInitRecursiongCounter == 5) { // Can happen for a string like: // proj=pipeline step "x="""," u=" proj=pipeline step ste=""[" u=" // proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" // proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" // proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" // proj=pipeline step ste="[" u=" proj=pipeline p step ste="[" u=" // proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" // proj=pipeline step ste="[" u=" proj=pipeline step ""x=""""""""""" // Probably an issue with the quoting handling code // But doesn't hurt to add an extra safety check proj_log_error(P, _("Pipeline: too deep recursion")); return destructor( P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: nested pipelines */ } P->fwd4d = pipeline_forward_4d; P->inv4d = pipeline_reverse_4d; P->fwd3d = pipeline_forward_3d; P->inv3d = pipeline_reverse_3d; P->fwd = pipeline_forward; P->inv = pipeline_reverse; P->destructor = destructor; P->reassign_context = pipeline_reassign_context; /* Currently, the pipeline driver is a raw bit mover, enabling other * operations */ /* to collaborate efficiently. All prep/fin stuff is done at the step * levels. */ P->skip_fwd_prepare = 1; P->skip_fwd_finalize = 1; P->skip_inv_prepare = 1; P->skip_inv_finalize = 1; P->opaque = new (std::nothrow) Pipeline(); if (nullptr == P->opaque) return destructor(P, PROJ_ERR_INVALID_OP /* ENOMEM */); argc = (int)argc_params(P->params); auto pipeline = static_cast(P->opaque); pipeline->argv = argv = argv_params(P->params, argc); if (nullptr == argv) return destructor(P, PROJ_ERR_INVALID_OP /* ENOMEM */); pipeline->current_argv = current_argv = static_cast(calloc(argc, sizeof(char *))); if (nullptr == current_argv) return destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); /* Do some syntactical sanity checking */ for (i = 0; i < argc && argv[i] != nullptr; i++) { if (0 == strcmp(argv_sentinel, argv[i])) { if (-1 == i_pipeline) { proj_log_error(P, _("Pipeline: +step before +proj=pipeline")); return destructor(P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } if (0 == nsteps) i_first_step = i; nsteps++; continue; } if (0 == strcmp("proj=pipeline", argv[i])) { if (-1 != i_pipeline) { proj_log_error(P, _("Pipeline: Nesting only allowed when child " "pipelines are wrapped in '+init's")); return destructor( P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: nested pipelines */ } i_pipeline = i; } else if (0 == nsteps && 0 == strncmp(argv[i], "proj=", 5)) { // Non-sensical to have proj= in the general pipeline parameters. // Would not be a big issue in itself, but this makes bad // performance in parsing hostile pipelines more likely, such as the // one of // https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=41290 proj_log_error( P, _("Pipeline: proj= operator before first step not allowed")); return destructor(P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } else if (0 == nsteps && 0 == strncmp(argv[i], "o_proj=", 7)) { // Same as above. proj_log_error( P, _("Pipeline: o_proj= operator before first step not allowed")); return destructor(P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } } nsteps--; /* Last instance of +step is just a sentinel */ if (-1 == i_pipeline) return destructor( P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: no pipeline def */ if (0 == nsteps) return destructor( P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); /* ERROR: no pipeline def */ set_ellipsoid(P); /* Now loop over all steps, building a new set of arguments for each init */ i_current_step = i_first_step; for (i = 0; i < nsteps; i++) { int j; int current_argc = 0; int err; PJ *next_step = nullptr; /* Build a set of setup args for the current step */ proj_log_trace(P, "Pipeline: Building arg list for step no. %d", i); /* First add the step specific args */ for (j = i_current_step + 1; 0 != strcmp("step", argv[j]); j++) current_argv[current_argc++] = argv[j]; i_current_step = j; /* Then add the global args */ for (j = i_pipeline + 1; 0 != strcmp("step", argv[j]); j++) current_argv[current_argc++] = argv[j]; proj_log_trace(P, "Pipeline: init - %s, %d", current_argv[0], current_argc); for (j = 1; j < current_argc; j++) proj_log_trace(P, " %s", current_argv[j]); err = proj_errno_reset(P); P->ctx->pipelineInitRecursiongCounter++; next_step = pj_create_argv_internal(P->ctx, current_argc, current_argv); P->ctx->pipelineInitRecursiongCounter--; proj_log_trace(P, "Pipeline: Step %d (%s) at %p", i, current_argv[0], next_step); if (nullptr == next_step) { /* The step init failed, but possibly without setting errno. If so, * we say "malformed" */ int err_to_report = proj_errno(P); if (0 == err_to_report) err_to_report = PROJ_ERR_INVALID_OP_WRONG_SYNTAX; proj_log_error(P, _("Pipeline: Bad step definition: %s (%s)"), current_argv[0], proj_context_errno_string(P->ctx, err_to_report)); return destructor(P, err_to_report); /* ERROR: bad pipeline def */ } next_step->parent = P; proj_errno_restore(P, err); /* Is this step inverted? */ for (j = 0; j < current_argc; j++) { if (0 == strcmp("inv", current_argv[j])) { /* if +inv exists in both global and local args the forward * operation should be used */ next_step->inverted = next_step->inverted == 0 ? 1 : 0; } } bool omit_fwd = pj_param(P->ctx, next_step->params, "bomit_fwd").i != 0; bool omit_inv = pj_param(P->ctx, next_step->params, "bomit_inv").i != 0; pipeline->steps.emplace_back(next_step, omit_fwd, omit_inv); proj_log_trace(P, "Pipeline at [%p]: step at [%p] (%s) done", P, next_step, current_argv[0]); } /* Require a forward path through the pipeline */ for (auto &step : pipeline->steps) { PJ *Q = step.pj; if (step.omit_fwd) { continue; } if (Q->inverted) { if (Q->inv || Q->inv3d || Q->inv4d) { continue; } proj_log_error( P, _("Pipeline: Inverse operation for %s is not available"), Q->short_name); return destructor(P, PROJ_ERR_OTHER_NO_INVERSE_OP); } else { if (Q->fwd || Q->fwd3d || Q->fwd4d) { continue; } proj_log_error( P, _("Pipeline: Forward operation for %s is not available"), Q->short_name); return destructor(P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } } /* determine if an inverse operation is possible */ for (auto &step : pipeline->steps) { PJ *Q = step.pj; if (step.omit_inv || pj_has_inverse(Q)) { continue; } else { P->inv = nullptr; P->inv3d = nullptr; P->inv4d = nullptr; break; } } /* Replace PJ_IO_UNITS_WHATEVER with input/output units of neighbouring * steps where */ /* it make sense. It does in most cases but not always, for instance */ /* proj=pipeline step proj=unitconvert xy_in=deg xy_out=rad step ... */ /* where the left-hand side units of the first step shouldn't be changed to * RADIANS */ /* as it will result in deg->rad conversions in cs2cs and other * applications. */ for (i = nsteps - 2; i >= 0; --i) { auto pj = pipeline->steps[i].pj; if (pj_left(pj) == PJ_IO_UNITS_WHATEVER && pj_right(pj) == PJ_IO_UNITS_WHATEVER) { const auto right_pj = pipeline->steps[i + 1].pj; const auto right_pj_left = pj_left(right_pj); const auto right_pj_right = pj_right(right_pj); if (right_pj_left != right_pj_right || right_pj_left != PJ_IO_UNITS_WHATEVER) { pj->left = right_pj_left; pj->right = right_pj_left; } } } for (i = 1; i < nsteps; i++) { auto pj = pipeline->steps[i].pj; if (pj_left(pj) == PJ_IO_UNITS_WHATEVER && pj_right(pj) == PJ_IO_UNITS_WHATEVER) { const auto left_pj = pipeline->steps[i - 1].pj; const auto left_pj_left = pj_left(left_pj); const auto left_pj_right = pj_right(left_pj); if (left_pj_left != left_pj_right || left_pj_right != PJ_IO_UNITS_WHATEVER) { pj->left = left_pj_right; pj->right = left_pj_right; } } } /* Check that units between each steps match each other, fail if they don't */ for (i = 0; i + 1 < nsteps; i++) { enum pj_io_units curr_step_output = pj_right(pipeline->steps[i].pj); enum pj_io_units next_step_input = pj_left(pipeline->steps[i + 1].pj); if (curr_step_output == PJ_IO_UNITS_WHATEVER || next_step_input == PJ_IO_UNITS_WHATEVER) continue; if (curr_step_output != next_step_input) { proj_log_error( P, _("Pipeline: Mismatched units between step %d and %d"), i + 1, i + 2); return destructor(P, PROJ_ERR_INVALID_OP_WRONG_SYNTAX); } } proj_log_trace( P, "Pipeline: %d steps built. Determining i/o characteristics", nsteps); /* Determine forward input (= reverse output) data type */ P->left = pj_left(pipeline->steps.front().pj); /* Now, correspondingly determine forward output (= reverse input) data type */ P->right = pj_right(pipeline->steps.back().pj); return P; } static void push(PJ_COORD &point, PJ *P) { if (P->parent == nullptr) return; struct Pipeline *pipeline = static_cast(P->parent->opaque); struct PushPop *pushpop = static_cast(P->opaque); if (pushpop->v1) pipeline->stack[0].push(point.v[0]); if (pushpop->v2) pipeline->stack[1].push(point.v[1]); if (pushpop->v3) pipeline->stack[2].push(point.v[2]); if (pushpop->v4) pipeline->stack[3].push(point.v[3]); } static void pop(PJ_COORD &point, PJ *P) { if (P->parent == nullptr) return; struct Pipeline *pipeline = static_cast(P->parent->opaque); struct PushPop *pushpop = static_cast(P->opaque); if (pushpop->v1 && !pipeline->stack[0].empty()) { point.v[0] = pipeline->stack[0].top(); pipeline->stack[0].pop(); } if (pushpop->v2 && !pipeline->stack[1].empty()) { point.v[1] = pipeline->stack[1].top(); pipeline->stack[1].pop(); } if (pushpop->v3 && !pipeline->stack[2].empty()) { point.v[2] = pipeline->stack[2].top(); pipeline->stack[2].pop(); } if (pushpop->v4 && !pipeline->stack[3].empty()) { point.v[3] = pipeline->stack[3].top(); pipeline->stack[3].pop(); } } static PJ *setup_pushpop(PJ *P) { auto pushpop = static_cast(calloc(1, sizeof(struct PushPop))); P->opaque = pushpop; if (nullptr == P->opaque) return destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); if (pj_param_exists(P->params, "v_1")) pushpop->v1 = true; if (pj_param_exists(P->params, "v_2")) pushpop->v2 = true; if (pj_param_exists(P->params, "v_3")) pushpop->v3 = true; if (pj_param_exists(P->params, "v_4")) pushpop->v4 = true; P->left = PJ_IO_UNITS_WHATEVER; P->right = PJ_IO_UNITS_WHATEVER; return P; } PJ *OPERATION(push, 0) { P->fwd4d = push; P->inv4d = pop; return setup_pushpop(P); } PJ *OPERATION(pop, 0) { P->inv4d = push; P->fwd4d = pop; return setup_pushpop(P); } proj-9.6.0/src/pj_list.h000664 001754 001755 00000017331 14764566077 015032 0ustar00e012349e012349000000 000000 #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(adams_hemi, "Adams Hemisphere in a Square") PROJ_HEAD(adams_ws1, "Adams World in a Square I") PROJ_HEAD(adams_ws2, "Adams World in a Square II") PROJ_HEAD(aea, "Albers Equal Area") PROJ_HEAD(aeqd, "Azimuthal Equidistant") PROJ_HEAD(affine, "Affine transformation") PROJ_HEAD(airy, "Airy") PROJ_HEAD(aitoff, "Aitoff") PROJ_HEAD(alsk, "Modified Stereographic of Alaska") PROJ_HEAD(apian, "Apian Globular I") PROJ_HEAD(august, "August Epicycloidal") PROJ_HEAD(axisswap, "Axis ordering") PROJ_HEAD(bacon, "Bacon Globular") PROJ_HEAD(bertin1953, "Bertin 1953") 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(cart, "Geodetic/cartesian conversions") PROJ_HEAD(cass, "Cassini") PROJ_HEAD(cc, "Central Cylindrical") PROJ_HEAD(ccon, "Central Conic") PROJ_HEAD(cea, "Equal Area Cylindrical") PROJ_HEAD(chamb, "Chamberlin Trimetric") PROJ_HEAD(collg, "Collignon") PROJ_HEAD(col_urban, "Colombia Urban") PROJ_HEAD(comill, "Compact Miller") PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") PROJ_HEAD(defmodel, "Deformation model") PROJ_HEAD(deformation, "Kinematic grid shift") PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") PROJ_HEAD(airocean, "Airocean Fuller") 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(eqearth, "Equal Earth") PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Carree)") 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(geoc, "Geocentric Latitude") PROJ_HEAD(geocent, "Geocentric") PROJ_HEAD(geogoffset, "Geographic Offset") 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(gridshift, "Generic grid shift") PROJ_HEAD(gs48, "Modified Stereographic of 48 U.S.") PROJ_HEAD(gs50, "Modified Stereographic of 50 U.S.") PROJ_HEAD(guyou, "Guyou") PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") PROJ_HEAD(healpix, "HEALPix") PROJ_HEAD(rhealpix, "rHEALPix") PROJ_HEAD(helmert, "3- and 7-parameter Helmert shift") PROJ_HEAD(hgridshift, "Horizontal grid shift") PROJ_HEAD(horner, "Horner polynomial evaluation") PROJ_HEAD(igh, "Interrupted Goode Homolosine") PROJ_HEAD(igh_o, "Interrupted Goode Homolosine Oceanic View") PROJ_HEAD(imoll, "Interrupted Mollweide") PROJ_HEAD(imoll_o, "Interrupted Mollweide Oceanic View") PROJ_HEAD(imw_p, "International Map of the World Polyconic") PROJ_HEAD(isea, "Icosahedral Snyder Equal Area") PROJ_HEAD(kav5, "Kavrayskiy V") PROJ_HEAD(kav7, "Kavrayskiy 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(mod_krovak, "Modified Krovak") PROJ_HEAD(moll, "Mollweide") PROJ_HEAD(molobadekas, "Molodensky-Badekas transform") /* implemented in PJ_helmert.c */ PROJ_HEAD(molodensky, "Molodensky transform") 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(noop, "No operation") 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(peirce_q, "Peirce Quincuncial") PROJ_HEAD(pipeline, "Transformation pipeline manager") PROJ_HEAD(poly, "Polyconic (American)") PROJ_HEAD(pop, "Retrieve coordinate value from pipeline stack") PROJ_HEAD(push, "Save coordinate value on pipeline stack") 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(s2, "S2") PROJ_HEAD(sch, "Spherical Cross-track Height") PROJ_HEAD(set, "Set coordinate value") PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") PROJ_HEAD(som, "Space Oblique Mercator") PROJ_HEAD(somerc, "Swiss. Obl. Mercator") PROJ_HEAD(spilhaus, "Spilhaus") 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(tinshift, "Triangulation based transformation") PROJ_HEAD(tissot, "Tissot Conic") PROJ_HEAD(tmerc, "Transverse Mercator") PROJ_HEAD(tobmerc, "Tobler-Mercator") PROJ_HEAD(topocentric, "Geocentric/Topocentric conversion") PROJ_HEAD(tpeqd, "Two Point Equidistant") PROJ_HEAD(tpers, "Tilted perspective") PROJ_HEAD(unitconvert, "Unit conversion") 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(vertoffset, "Vertical Offset and Slope") PROJ_HEAD(vitk1, "Vitkovsky I") PROJ_HEAD(vgridshift, "Vertical grid shift") PROJ_HEAD(wag1, "Wagner I (Kavrayskiy 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(webmerc, "Web Mercator / Pseudo Mercator") PROJ_HEAD(weren, "Werenskiold I") PROJ_HEAD(wink1, "Winkel I") PROJ_HEAD(wink2, "Winkel II") PROJ_HEAD(wintri, "Winkel Tripel") PROJ_HEAD(xyzgridshift, "XYZ grid shift") proj-9.6.0/src/pr_list.cpp000664 001754 001755 00000005355 14764566077 015400 0ustar00e012349e012349000000 000000 /* print projection's list of parameters */ #include #include #include #include "proj.h" #include "proj_internal.h" #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 = (int)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(const PJ *P, int options) { paralist *t; int l; char *definition; size_t def_max = 10; (void)options; definition = (char *)malloc(def_max); if (!definition) return nullptr; 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 = (int)strlen(t->param) + 1; if (strlen(definition) + l + 5 > def_max) { char *def2; def_max = def_max * 2 + l + 5; def2 = (char *)malloc(def_max); if (def2) { strcpy(def2, definition); free(definition); definition = def2; } else { free(definition); return nullptr; } } /* append this parameter */ strcat(definition, " +"); strcat(definition, t->param); } return definition; } proj-9.6.0/src/proj.h000664 001754 001755 00000270335 14764566077 014345 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ.4 * Purpose: Revised, experimental API for PROJ.4, intended as the foundation * for added geodetic functionality. * * The original proj API (defined previously in projects.h) has grown * organically over the years, but it has also grown somewhat messy. * * The same has happened with the newer high level API (defined in * proj_api.h): To support various historical objectives, proj_api.h * contains a rather complex combination of conditional defines and * typedefs. Probably for good (historical) reasons, which are not * always evident from today's perspective. * * This is an evolving attempt at creating a re-rationalized API * with primary design goals focused on sanitizing the namespaces. * Hence, all symbols exposed are being moved to the proj_ namespace, * while all data types are being moved to the PJ_ namespace. * * Please note that this API is *orthogonal* to the previous APIs: * Apart from some inclusion guards, projects.h and proj_api.h are not * touched - if you do not include proj.h, the projects and proj_api * APIs should work as they always have. * * A few implementation details: * * Apart from the namespacing efforts, I'm trying to eliminate three * proj_api elements, which I have found especially confusing. * * FIRST and foremost, I try to avoid typedef'ing away pointer * semantics. I agree that it can be occasionally useful, but I * prefer having the pointer nature of function arguments being * explicitly visible. * * Hence, projCtx has been replaced by PJ_CONTEXT *. * and projPJ has been replaced by PJ * * * SECOND, I try to eliminate cases of information hiding implemented * by redefining data types to void pointers. * * I prefer using a combination of forward declarations and typedefs. * Hence: * typedef void *projCtx; * Has been replaced by: * struct projCtx_t; * typedef struct projCtx_t PJ_CONTEXT; * This makes it possible for the calling program to know that the * PJ_CONTEXT data type exists, and handle pointers to that data type * without having any idea about its internals. * * (obviously, in this example, struct projCtx_t should also be * renamed struct pj_ctx some day, but for backwards compatibility * it remains as-is for now). * * THIRD, I try to eliminate implicit type punning. Hence this API * introduces the PJ_COORD union data type, for generic 4D coordinate * handling. * * PJ_COORD makes it possible to make explicit the previously used * "implicit type punning", where a XY is turned into a LP by * re#defining both as UV, behind the back of the user. * * The PJ_COORD union is used for storing 1D, 2D, 3D and 4D *coordinates. * * The bare essentials API presented here follows the PROJ.4 * convention of sailing the coordinate to be reprojected, up on * the stack ("call by value"), and symmetrically returning the * result on the stack. Although the PJ_COORD object is twice as large * as the traditional XY and LP objects, timing results have shown the * overhead to be very reasonable. * * Contexts and thread safety * -------------------------- * * After a year of experiments (and previous experience from the * trlib transformation library) it has become clear that the * context subsystem is unavoidable in a multi-threaded world. * Hence, instead of hiding it away, we move it into the limelight, * highly recommending (but not formally requiring) the bracketing * of any code block calling PROJ.4 functions with calls to * proj_context_create(...)/proj_context_destroy() * * Legacy single threaded code need not do anything, but *may* * implement a bit of future compatibility by using the backward * compatible call proj_context_create(0), which will not create * a new context, but simply provide a pointer to the default one. * * See proj_4D_api_test.c for examples of how to use the API. * * Author: Thomas Knudsen, * Benefitting from a large number of comments and suggestions * by (primarily) Kristian Evers and Even Rouault. * ****************************************************************************** * Copyright (c) 2016, 2017, Thomas Knudsen / SDFE * Copyright (c) 2018, 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 COORD 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. *****************************************************************************/ #ifndef PROJ_H #define PROJ_H #include /* For size_t */ #ifdef ACCEPT_USE_OF_DEPRECATED_PROJ_API_H #error "The proj_api.h header has been removed from PROJ with version 8.0.0" #endif #ifdef PROJ_RENAME_SYMBOLS #include "proj_symbol_rename.h" #endif #ifdef __cplusplus extern "C" { #endif /** * \file proj.h * * C API new generation */ /*! @cond Doxygen_Suppress */ #ifndef PROJ_DLL #if defined(_MSC_VER) #ifdef PROJ_MSVC_DLL_EXPORT #define PROJ_DLL __declspec(dllexport) #else #define PROJ_DLL __declspec(dllimport) #endif #elif defined(__GNUC__) #define PROJ_DLL __attribute__((visibility("default"))) #else #define PROJ_DLL #endif #endif #ifdef PROJ_SUPPRESS_DEPRECATION_MESSAGE #define PROJ_DEPRECATED(decl, msg) decl #elif defined(__has_extension) #if __has_extension(attribute_deprecated_with_message) #define PROJ_DEPRECATED(decl, msg) decl __attribute__((deprecated(msg))) #elif defined(__GNUC__) #define PROJ_DEPRECATED(decl, msg) decl __attribute__((deprecated)) #else #define PROJ_DEPRECATED(decl, msg) decl #endif #elif defined(__GNUC__) #define PROJ_DEPRECATED(decl, msg) decl __attribute__((deprecated)) #elif defined(_MSVC_VER) #define PROJ_DEPRECATED(decl, msg) __declspec(deprecated(msg)) decl #else #define PROJ_DEPRECATED(decl, msg) decl #endif /* The version numbers should be updated with every release! **/ #define PROJ_VERSION_MAJOR 9 #define PROJ_VERSION_MINOR 6 #define PROJ_VERSION_PATCH 0 /* Note: the following 3 defines have been introduced in PROJ 8.0.1 */ /* Macro to compute a PROJ version number from its components */ #define PROJ_COMPUTE_VERSION(maj, min, patch) \ ((maj)*10000 + (min)*100 + (patch)) /* Current PROJ version from the above version numbers */ #define PROJ_VERSION_NUMBER \ PROJ_COMPUTE_VERSION(PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR, \ PROJ_VERSION_PATCH) /* Macro that returns true if the current PROJ version is at least the version * specified by (maj,min,patch) */ #define PROJ_AT_LEAST_VERSION(maj, min, patch) \ (PROJ_VERSION_NUMBER >= PROJ_COMPUTE_VERSION(maj, min, patch)) extern char const PROJ_DLL pj_release[]; /* global release id string */ /* first forward declare everything needed */ /* Data type for generic geodetic 3D data plus epoch information */ union PJ_COORD; typedef union PJ_COORD PJ_COORD; struct PJ_AREA; typedef struct PJ_AREA PJ_AREA; struct P5_FACTORS { /* Common designation */ double meridional_scale; /* h */ double parallel_scale; /* k */ double areal_scale; /* s */ double angular_distortion; /* omega */ double meridian_parallel_angle; /* theta-prime */ double meridian_convergence; /* alpha */ double tissot_semimajor; /* a */ double tissot_semiminor; /* b */ double dx_dlam, dx_dphi; double dy_dlam, dy_dphi; }; typedef struct P5_FACTORS PJ_FACTORS; /* Data type for projection/transformation information */ struct PJconsts; typedef struct PJconsts PJ; /* the PJ object herself */ /* Data type for library level information */ struct PJ_INFO; typedef struct PJ_INFO PJ_INFO; struct PJ_PROJ_INFO; typedef struct PJ_PROJ_INFO PJ_PROJ_INFO; struct PJ_GRID_INFO; typedef struct PJ_GRID_INFO PJ_GRID_INFO; struct PJ_INIT_INFO; typedef struct PJ_INIT_INFO PJ_INIT_INFO; /* Data types for list of operations, ellipsoids, datums and units used in * PROJ.4 */ struct PJ_LIST { const char *id; /* projection keyword */ PJ *(*proj)(PJ *); /* projection entry point */ const char *const *descr; /* description text */ }; typedef struct PJ_LIST PJ_OPERATIONS; struct PJ_ELLPS { const char *id; /* ellipse keyword name */ const char *major; /* a= value */ const char *ell; /* elliptical parameter */ const char *name; /* comments */ }; typedef struct PJ_ELLPS PJ_ELLPS; struct PJ_UNITS { const char *id; /* units keyword */ const char *to_meter; /* multiply by value to get meters */ const char *name; /* comments */ double factor; /* to_meter factor in actual numbers */ }; typedef struct PJ_UNITS PJ_UNITS; struct PJ_PRIME_MERIDIANS { const char *id; /* prime meridian keyword */ const char *defn; /* offset from greenwich in DMS format. */ }; typedef struct PJ_PRIME_MERIDIANS PJ_PRIME_MERIDIANS; /* Geodetic, mostly spatiotemporal coordinate types */ typedef struct { double x, y, z, t; } PJ_XYZT; typedef struct { double u, v, w, t; } PJ_UVWT; typedef struct { double lam, phi, z, t; } PJ_LPZT; typedef struct { double o, p, k; } PJ_OPK; /* Rotations: omega, phi, kappa */ typedef struct { double e, n, u; } PJ_ENU; /* East, North, Up */ typedef struct { double s, a1, a2; } PJ_GEOD; /* Geodesic length, fwd azi, rev azi */ /* Classic proj.4 pair/triplet types - moved into the PJ_ name space */ typedef struct { double u, v; } PJ_UV; typedef struct { double x, y; } PJ_XY; typedef struct { double lam, phi; } PJ_LP; typedef struct { double x, y, z; } PJ_XYZ; typedef struct { double u, v, w; } PJ_UVW; typedef struct { double lam, phi, z; } PJ_LPZ; /* Avoid preprocessor renaming and implicit type-punning: Use a union to make it * explicit */ union PJ_COORD { double v[4]; /* First and foremost, it really is "just 4 numbers in a vector" */ PJ_XYZT xyzt; PJ_UVWT uvwt; PJ_LPZT lpzt; PJ_GEOD geod; PJ_OPK opk; PJ_ENU enu; PJ_XYZ xyz; PJ_UVW uvw; PJ_LPZ lpz; PJ_XY xy; PJ_UV uv; PJ_LP lp; }; struct PJ_INFO { int major; /* Major release number */ int minor; /* Minor release number */ int patch; /* Patch level */ const char *release; /* Release info. Version + date */ const char *version; /* Full version number */ const char *searchpath; /* Paths where init and grid files are */ /* looked for. Paths are separated by */ /* semi-colons on Windows, and colons */ /* on non-Windows platforms. */ const char *const *paths; size_t path_count; }; struct PJ_PROJ_INFO { const char *id; /* Name of the projection in question */ const char *description; /* Description of the projection */ const char *definition; /* Projection definition */ int has_inverse; /* 1 if an inverse mapping exists, 0 otherwise */ double accuracy; /* Expected accuracy of the transformation. -1 if unknown. */ }; struct PJ_GRID_INFO { char gridname[32]; /* name of grid */ char filename[260]; /* full path to grid */ char format[8]; /* file format of grid */ PJ_LP lowerleft; /* Coordinates of lower left corner */ PJ_LP upperright; /* Coordinates of upper right corner */ int n_lon, n_lat; /* Grid size */ double cs_lon, cs_lat; /* Cell size of grid */ }; struct PJ_INIT_INFO { char name[32]; /* name of init file */ char filename[260]; /* full path to the init file. */ char version[32]; /* version of the init file */ char origin[32]; /* origin of the file, e.g. EPSG */ char lastupdate[16]; /* Date of last update in YYYY-MM-DD format */ }; typedef enum PJ_LOG_LEVEL { PJ_LOG_NONE = 0, PJ_LOG_ERROR = 1, PJ_LOG_DEBUG = 2, PJ_LOG_TRACE = 3, PJ_LOG_TELL = 4, PJ_LOG_DEBUG_MAJOR = 2, /* for proj_api.h compatibility */ PJ_LOG_DEBUG_MINOR = 3 /* for proj_api.h compatibility */ } PJ_LOG_LEVEL; typedef void (*PJ_LOG_FUNCTION)(void *, int, const char *); /* The context type - properly namespaced synonym for pj_ctx */ struct pj_ctx; typedef struct pj_ctx PJ_CONTEXT; /* A P I */ /** * The objects returned by the functions defined in this section have minimal * interaction with the functions of the * \ref iso19111_functions section, and vice versa. See its introduction * paragraph for more details. */ /* Functionality for handling thread contexts */ #ifdef __cplusplus #define PJ_DEFAULT_CTX nullptr #else #define PJ_DEFAULT_CTX 0 #endif PJ_CONTEXT PROJ_DLL *proj_context_create(void); PJ_CONTEXT PROJ_DLL *proj_context_destroy(PJ_CONTEXT *ctx); PJ_CONTEXT PROJ_DLL *proj_context_clone(PJ_CONTEXT *ctx); /** Callback to resolve a filename to a full path */ typedef const char *(*proj_file_finder)(PJ_CONTEXT *ctx, const char *, void *user_data); /*! @endcond */ void PROJ_DLL proj_context_set_file_finder(PJ_CONTEXT *ctx, proj_file_finder finder, void *user_data); void PROJ_DLL proj_context_set_search_paths(PJ_CONTEXT *ctx, int count_paths, const char *const *paths); void PROJ_DLL proj_context_set_ca_bundle_path(PJ_CONTEXT *ctx, const char *path); /*! @cond Doxygen_Suppress */ void PROJ_DLL proj_context_use_proj4_init_rules(PJ_CONTEXT *ctx, int enable); int PROJ_DLL proj_context_get_use_proj4_init_rules(PJ_CONTEXT *ctx, int from_legacy_code_path); /*! @endcond */ /** Opaque structure for PROJ for a file handle. Implementations might cast it * to their structure/class of choice. */ typedef struct PROJ_FILE_HANDLE PROJ_FILE_HANDLE; /** Open access / mode */ typedef enum PROJ_OPEN_ACCESS { /** Read-only access. Equivalent to "rb" */ PROJ_OPEN_ACCESS_READ_ONLY, /** Read-update access. File should be created if not existing. Equivalent to "r+b" */ PROJ_OPEN_ACCESS_READ_UPDATE, /** Create access. File should be truncated to 0-byte if already existing. Equivalent to "w+b" */ PROJ_OPEN_ACCESS_CREATE } PROJ_OPEN_ACCESS; /** File API callbacks */ typedef struct PROJ_FILE_API { /** Version of this structure. Should be set to 1 currently. */ int version; /** Open file. Return NULL if error */ PROJ_FILE_HANDLE *(*open_cbk)(PJ_CONTEXT *ctx, const char *filename, PROJ_OPEN_ACCESS access, void *user_data); /** Read sizeBytes into buffer from current position and return number of * bytes read */ size_t (*read_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, void *buffer, size_t sizeBytes, void *user_data); /** Write sizeBytes into buffer from current position and return number of * bytes written */ size_t (*write_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, const void *buffer, size_t sizeBytes, void *user_data); /** Seek to offset using whence=SEEK_SET/SEEK_CUR/SEEK_END. Return TRUE in * case of success */ int (*seek_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, long long offset, int whence, void *user_data); /** Return current file position */ unsigned long long (*tell_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, void *user_data); /** Close file */ void (*close_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, void *user_data); /** Return TRUE if a file exists */ int (*exists_cbk)(PJ_CONTEXT *ctx, const char *filename, void *user_data); /** Return TRUE if directory exists or could be created */ int (*mkdir_cbk)(PJ_CONTEXT *ctx, const char *filename, void *user_data); /** Return TRUE if file could be removed */ int (*unlink_cbk)(PJ_CONTEXT *ctx, const char *filename, void *user_data); /** Return TRUE if file could be renamed */ int (*rename_cbk)(PJ_CONTEXT *ctx, const char *oldPath, const char *newPath, void *user_data); } PROJ_FILE_API; int PROJ_DLL proj_context_set_fileapi(PJ_CONTEXT *ctx, const PROJ_FILE_API *fileapi, void *user_data); void PROJ_DLL proj_context_set_sqlite3_vfs_name(PJ_CONTEXT *ctx, const char *name); /** Opaque structure for PROJ for a network handle. Implementations might cast * it to their structure/class of choice. */ typedef struct PROJ_NETWORK_HANDLE PROJ_NETWORK_HANDLE; /** Network access: open callback * * Should try to read the size_to_read first bytes at the specified offset of * the file given by URL url, * and write them to buffer. *out_size_read should be updated with the actual * amount of bytes read (== size_to_read if the file is larger than * size_to_read). During this read, the implementation should make sure to store * the HTTP headers from the server response to be able to respond to * proj_network_get_header_value_cbk_type callback. * * error_string_max_size should be the maximum size that can be written into * the out_error_string buffer (including terminating nul character). * * @return a non-NULL opaque handle in case of success. */ typedef PROJ_NETWORK_HANDLE *(*proj_network_open_cbk_type)( PJ_CONTEXT *ctx, const char *url, unsigned long long offset, size_t size_to_read, void *buffer, size_t *out_size_read, size_t error_string_max_size, char *out_error_string, void *user_data); /** Network access: close callback */ typedef void (*proj_network_close_cbk_type)(PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, void *user_data); /** Network access: get HTTP headers */ typedef const char *(*proj_network_get_header_value_cbk_type)( PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, const char *header_name, void *user_data); /** Network access: read range * * Read size_to_read bytes from handle, starting at offset, into * buffer. * During this read, the implementation should make sure to store the HTTP * headers from the server response to be able to respond to * proj_network_get_header_value_cbk_type callback. * * error_string_max_size should be the maximum size that can be written into * the out_error_string buffer (including terminating nul character). * * @return the number of bytes actually read (0 in case of error) */ typedef size_t (*proj_network_read_range_type)( PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, unsigned long long offset, size_t size_to_read, void *buffer, size_t error_string_max_size, char *out_error_string, void *user_data); int PROJ_DLL proj_context_set_network_callbacks( PJ_CONTEXT *ctx, proj_network_open_cbk_type open_cbk, proj_network_close_cbk_type close_cbk, proj_network_get_header_value_cbk_type get_header_value_cbk, proj_network_read_range_type read_range_cbk, void *user_data); int PROJ_DLL proj_context_set_enable_network(PJ_CONTEXT *ctx, int enabled); int PROJ_DLL proj_context_is_network_enabled(PJ_CONTEXT *ctx); void PROJ_DLL proj_context_set_url_endpoint(PJ_CONTEXT *ctx, const char *url); const char PROJ_DLL *proj_context_get_url_endpoint(PJ_CONTEXT *ctx); const char PROJ_DLL *proj_context_get_user_writable_directory(PJ_CONTEXT *ctx, int create); void PROJ_DLL proj_context_set_user_writable_directory(PJ_CONTEXT *ctx, const char *path, int create); void PROJ_DLL proj_grid_cache_set_enable(PJ_CONTEXT *ctx, int enabled); void PROJ_DLL proj_grid_cache_set_filename(PJ_CONTEXT *ctx, const char *fullname); void PROJ_DLL proj_grid_cache_set_max_size(PJ_CONTEXT *ctx, int max_size_MB); void PROJ_DLL proj_grid_cache_set_ttl(PJ_CONTEXT *ctx, int ttl_seconds); void PROJ_DLL proj_grid_cache_clear(PJ_CONTEXT *ctx); int PROJ_DLL proj_is_download_needed(PJ_CONTEXT *ctx, const char *url_or_filename, int ignore_ttl_setting); int PROJ_DLL proj_download_file(PJ_CONTEXT *ctx, const char *url_or_filename, int ignore_ttl_setting, int (*progress_cbk)(PJ_CONTEXT *, double pct, void *user_data), void *user_data); /*! @cond Doxygen_Suppress */ /* Manage the transformation definition object PJ */ PJ PROJ_DLL *proj_create(PJ_CONTEXT *ctx, const char *definition); PJ PROJ_DLL *proj_create_argv(PJ_CONTEXT *ctx, int argc, char **argv); PJ PROJ_DLL *proj_create_crs_to_crs(PJ_CONTEXT *ctx, const char *source_crs, const char *target_crs, PJ_AREA *area); PJ PROJ_DLL *proj_create_crs_to_crs_from_pj(PJ_CONTEXT *ctx, const PJ *source_crs, const PJ *target_crs, PJ_AREA *area, const char *const *options); /*! @endcond */ PJ PROJ_DLL *proj_normalize_for_visualization(PJ_CONTEXT *ctx, const PJ *obj); /*! @cond Doxygen_Suppress */ void PROJ_DLL proj_assign_context(PJ *pj, PJ_CONTEXT *ctx); PJ PROJ_DLL *proj_destroy(PJ *P); PJ_AREA PROJ_DLL *proj_area_create(void); void PROJ_DLL proj_area_set_bbox(PJ_AREA *area, double west_lon_degree, double south_lat_degree, double east_lon_degree, double north_lat_degree); void PROJ_DLL proj_area_set_name(PJ_AREA *area, const char *name); void PROJ_DLL proj_area_destroy(PJ_AREA *area); /* Apply transformation to observation - in forward or inverse direction */ enum PJ_DIRECTION { PJ_FWD = 1, /* Forward */ PJ_IDENT = 0, /* Do nothing */ PJ_INV = -1 /* Inverse */ }; typedef enum PJ_DIRECTION PJ_DIRECTION; int PROJ_DLL proj_angular_input(PJ *P, enum PJ_DIRECTION dir); int PROJ_DLL proj_angular_output(PJ *P, enum PJ_DIRECTION dir); int PROJ_DLL proj_degree_input(PJ *P, enum PJ_DIRECTION dir); int PROJ_DLL proj_degree_output(PJ *P, enum PJ_DIRECTION dir); PJ_COORD PROJ_DLL proj_trans(PJ *P, PJ_DIRECTION direction, PJ_COORD coord); PJ PROJ_DLL *proj_trans_get_last_used_operation(PJ *P); int PROJ_DLL proj_trans_array(PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord); size_t PROJ_DLL proj_trans_generic(PJ *P, PJ_DIRECTION direction, double *x, size_t sx, size_t nx, double *y, size_t sy, size_t ny, double *z, size_t sz, size_t nz, double *t, size_t st, size_t nt); /*! @endcond */ int PROJ_DLL proj_trans_bounds(PJ_CONTEXT *context, PJ *P, PJ_DIRECTION direction, double xmin, double ymin, double xmax, double ymax, double *out_xmin, double *out_ymin, double *out_xmax, double *out_ymax, int densify_pts); int PROJ_DLL proj_trans_bounds_3D(PJ_CONTEXT *context, PJ *P, PJ_DIRECTION direction, const double xmin, const double ymin, const double zmin, const double xmax, const double ymax, const double zmax, double *out_xmin, double *out_ymin, double *out_zmin, double *out_xmax, double *out_ymax, double *out_zmax, const int densify_pts); /*! @cond Doxygen_Suppress */ /* Initializers */ PJ_COORD PROJ_DLL proj_coord(double x, double y, double z, double t); /* Measure internal consistency - in forward or inverse direction */ double PROJ_DLL proj_roundtrip(PJ *P, PJ_DIRECTION direction, int n, PJ_COORD *coord); /* Geodesic distance between two points with angular 2D coordinates */ double PROJ_DLL proj_lp_dist(const PJ *P, PJ_COORD a, PJ_COORD b); /* The geodesic distance AND the vertical offset */ double PROJ_DLL proj_lpz_dist(const PJ *P, PJ_COORD a, PJ_COORD b); /* Euclidean distance between two points with linear 2D coordinates */ double PROJ_DLL proj_xy_dist(PJ_COORD a, PJ_COORD b); /* Euclidean distance between two points with linear 3D coordinates */ double PROJ_DLL proj_xyz_dist(PJ_COORD a, PJ_COORD b); /* Geodesic distance (in meter) + fwd and rev azimuth between two points on the * ellipsoid */ PJ_COORD PROJ_DLL proj_geod(const PJ *P, PJ_COORD a, PJ_COORD b); /* PROJ error codes */ /** Error codes typically related to coordinate operation initialization * Note: some of them can also be emitted during coordinate transformation, * like PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID in case the resource * loading is deferred until it is really needed. */ #define PROJ_ERR_INVALID_OP \ 1024 /* other/unspecified error related to coordinate operation \ initialization */ #define PROJ_ERR_INVALID_OP_WRONG_SYNTAX \ (PROJ_ERR_INVALID_OP + \ 1) /* invalid pipeline structure, missing +proj argument, etc */ #define PROJ_ERR_INVALID_OP_MISSING_ARG \ (PROJ_ERR_INVALID_OP + 2) /* missing required operation parameter */ #define PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE \ (PROJ_ERR_INVALID_OP + \ 3) /* one of the operation parameter has an illegal value */ #define PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS \ (PROJ_ERR_INVALID_OP + 4) /* mutually exclusive arguments */ #define PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID \ (PROJ_ERR_INVALID_OP + 5) /* file not found (particular case of \ PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE) */ /** Error codes related to transformation on a specific coordinate */ #define PROJ_ERR_COORD_TRANSFM \ 2048 /* other error related to coordinate transformation */ #define PROJ_ERR_COORD_TRANSFM_INVALID_COORD \ (PROJ_ERR_COORD_TRANSFM + 1) /* for e.g lat > 90deg */ #define PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN \ (PROJ_ERR_COORD_TRANSFM + \ 2) /* coordinate is outside of the projection domain. e.g approximate \ mercator with |longitude - lon_0| > 90deg, or iterative convergence \ method failed */ #define PROJ_ERR_COORD_TRANSFM_NO_OPERATION \ (PROJ_ERR_COORD_TRANSFM + \ 3) /* no operation found, e.g if no match the required accuracy, or if \ ballpark transformations were asked to not be used and they would \ be only such candidate */ #define PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID \ (PROJ_ERR_COORD_TRANSFM + \ 4) /* point to transform falls outside grid or subgrid */ #define PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA \ (PROJ_ERR_COORD_TRANSFM + \ 5) /* point to transform falls in a grid cell that evaluates to nodata */ #define PROJ_ERR_COORD_TRANSFM_NO_CONVERGENCE \ (PROJ_ERR_COORD_TRANSFM + 6) /* iterative convergence method fail */ #define PROJ_ERR_COORD_TRANSFM_MISSING_TIME \ (PROJ_ERR_COORD_TRANSFM + 7) /* operation requires time, but not provided \ */ /** Other type of errors */ #define PROJ_ERR_OTHER 4096 #define PROJ_ERR_OTHER_API_MISUSE \ (PROJ_ERR_OTHER + 1) /* error related to a misuse of PROJ API */ #define PROJ_ERR_OTHER_NO_INVERSE_OP \ (PROJ_ERR_OTHER + 2) /* no inverse method available */ #define PROJ_ERR_OTHER_NETWORK_ERROR \ (PROJ_ERR_OTHER + 3) /* failure when accessing a network resource */ /* Set or read error level */ int PROJ_DLL proj_context_errno(PJ_CONTEXT *ctx); int PROJ_DLL proj_errno(const PJ *P); int PROJ_DLL proj_errno_set(const PJ *P, int err); int PROJ_DLL proj_errno_reset(const PJ *P); int PROJ_DLL proj_errno_restore(const PJ *P, int err); const char PROJ_DLL * proj_errno_string(int err); /* deprecated. use proj_context_errno_string() */ const char PROJ_DLL *proj_context_errno_string(PJ_CONTEXT *ctx, int err); PJ_LOG_LEVEL PROJ_DLL proj_log_level(PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level); void PROJ_DLL proj_log_func(PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf); /* Scaling and angular distortion factors */ PJ_FACTORS PROJ_DLL proj_factors(PJ *P, PJ_COORD lp); /* Info functions - get information about various PROJ.4 entities */ PJ_INFO PROJ_DLL proj_info(void); PJ_PROJ_INFO PROJ_DLL proj_pj_info(PJ *P); PJ_GRID_INFO PROJ_DLL proj_grid_info(const char *gridname); PJ_INIT_INFO PROJ_DLL proj_init_info(const char *initname); /* List functions: */ /* Get lists of operations, ellipsoids, units and prime meridians. */ const PJ_OPERATIONS PROJ_DLL *proj_list_operations(void); const PJ_ELLPS PROJ_DLL *proj_list_ellps(void); PROJ_DEPRECATED(const PJ_UNITS PROJ_DLL *proj_list_units(void), "Deprecated by proj_get_units_from_database"); PROJ_DEPRECATED(const PJ_UNITS PROJ_DLL *proj_list_angular_units(void), "Deprecated by proj_get_units_from_database"); const PJ_PRIME_MERIDIANS PROJ_DLL *proj_list_prime_meridians(void); /* These are trivial, and while occasionally useful in real code, primarily here * to */ /* simplify demo code, and in acknowledgement of the proj-internal discrepancy * between */ /* angular units expected by classical proj, and by Charles Karney's geodesics * subsystem */ double PROJ_DLL proj_torad(double angle_in_degrees); double PROJ_DLL proj_todeg(double angle_in_radians); double PROJ_DLL proj_dmstor(const char *is, char **rs); PROJ_DEPRECATED(char PROJ_DLL *proj_rtodms(char *s, double r, int pos, int neg), "Deprecated by proj_rtodms2"); char PROJ_DLL *proj_rtodms2(char *s, size_t sizeof_s, double r, int pos, int neg); void PROJ_DLL proj_cleanup(void); /*! @endcond */ /* ------------------------------------------------------------------------- */ /* Binding in C of C++ API */ /* ------------------------------------------------------------------------- */ /** @defgroup iso19111_types Data types for ISO19111 C API * Data types for ISO19111 C API * @{ */ /** \brief Type representing a NULL terminated list of NULL-terminate strings. */ typedef char **PROJ_STRING_LIST; /** \brief Guessed WKT "dialect". */ typedef enum { /** \ref WKT2_2019 */ PJ_GUESSED_WKT2_2019, /** Deprecated alias for PJ_GUESSED_WKT2_2019 */ PJ_GUESSED_WKT2_2018 = PJ_GUESSED_WKT2_2019, /** \ref WKT2_2015 */ PJ_GUESSED_WKT2_2015, /** \ref WKT1 */ PJ_GUESSED_WKT1_GDAL, /** ESRI variant of WKT1 */ PJ_GUESSED_WKT1_ESRI, /** Not WKT / unrecognized */ PJ_GUESSED_NOT_WKT } PJ_GUESSED_WKT_DIALECT; /** \brief Object category. */ typedef enum { PJ_CATEGORY_ELLIPSOID, PJ_CATEGORY_PRIME_MERIDIAN, PJ_CATEGORY_DATUM, PJ_CATEGORY_CRS, PJ_CATEGORY_COORDINATE_OPERATION, PJ_CATEGORY_DATUM_ENSEMBLE } PJ_CATEGORY; /** \brief Object type. */ typedef enum { PJ_TYPE_UNKNOWN, PJ_TYPE_ELLIPSOID, PJ_TYPE_PRIME_MERIDIAN, PJ_TYPE_GEODETIC_REFERENCE_FRAME, PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME, PJ_TYPE_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DATUM_ENSEMBLE, /** Abstract type, not returned by proj_get_type() */ PJ_TYPE_CRS, PJ_TYPE_GEODETIC_CRS, PJ_TYPE_GEOCENTRIC_CRS, /** proj_get_type() will never return that type, but * PJ_TYPE_GEOGRAPHIC_2D_CRS or PJ_TYPE_GEOGRAPHIC_3D_CRS. */ PJ_TYPE_GEOGRAPHIC_CRS, PJ_TYPE_GEOGRAPHIC_2D_CRS, PJ_TYPE_GEOGRAPHIC_3D_CRS, PJ_TYPE_VERTICAL_CRS, PJ_TYPE_PROJECTED_CRS, PJ_TYPE_COMPOUND_CRS, PJ_TYPE_TEMPORAL_CRS, PJ_TYPE_ENGINEERING_CRS, PJ_TYPE_BOUND_CRS, PJ_TYPE_OTHER_CRS, PJ_TYPE_CONVERSION, PJ_TYPE_TRANSFORMATION, PJ_TYPE_CONCATENATED_OPERATION, PJ_TYPE_OTHER_COORDINATE_OPERATION, PJ_TYPE_TEMPORAL_DATUM, PJ_TYPE_ENGINEERING_DATUM, PJ_TYPE_PARAMETRIC_DATUM, PJ_TYPE_DERIVED_PROJECTED_CRS, PJ_TYPE_COORDINATE_METADATA, } PJ_TYPE; /** Comparison criterion. */ typedef enum { /** All properties are identical. */ PJ_COMP_STRICT, /** The objects are equivalent for the purpose of coordinate * operations. They can differ by the name of their objects, * identifiers, other metadata. * Parameters may be expressed in different units, provided that the * value is (with some tolerance) the same once expressed in a * common unit. */ PJ_COMP_EQUIVALENT, /** Same as EQUIVALENT, relaxed with an exception that the axis order * of the base CRS of a DerivedCRS/ProjectedCRS or the axis order of * a GeographicCRS is ignored. Only to be used * with DerivedCRS/ProjectedCRS/GeographicCRS */ PJ_COMP_EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS, } PJ_COMPARISON_CRITERION; /** \brief WKT version. */ typedef enum { /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2 */ PJ_WKT2_2015, /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2_SIMPLIFIED */ PJ_WKT2_2015_SIMPLIFIED, /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2_2019 */ PJ_WKT2_2019, /** Deprecated alias for PJ_WKT2_2019 */ PJ_WKT2_2018 = PJ_WKT2_2019, /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2_2019_SIMPLIFIED */ PJ_WKT2_2019_SIMPLIFIED, /** Deprecated alias for PJ_WKT2_2019 */ PJ_WKT2_2018_SIMPLIFIED = PJ_WKT2_2019_SIMPLIFIED, /** cf osgeo::proj::io::WKTFormatter::Convention::WKT1_GDAL */ PJ_WKT1_GDAL, /** cf osgeo::proj::io::WKTFormatter::Convention::WKT1_ESRI */ PJ_WKT1_ESRI } PJ_WKT_TYPE; /** Specify how source and target CRS extent should be used to restrict * candidate operations (only taken into account if no explicit area of * interest is specified. */ typedef enum { /** Ignore CRS extent */ PJ_CRS_EXTENT_NONE, /** Test coordinate operation extent against both CRS extent. */ PJ_CRS_EXTENT_BOTH, /** Test coordinate operation extent against the intersection of both CRS extent. */ PJ_CRS_EXTENT_INTERSECTION, /** Test coordinate operation against the smallest of both CRS extent. */ PJ_CRS_EXTENT_SMALLEST } PROJ_CRS_EXTENT_USE; /** Describe how grid availability is used. */ typedef enum { /** Grid availability is only used for sorting results. Operations * where some grids are missing will be sorted last. */ PROJ_GRID_AVAILABILITY_USED_FOR_SORTING, /** Completely discard an operation if a required grid is missing. */ PROJ_GRID_AVAILABILITY_DISCARD_OPERATION_IF_MISSING_GRID, /** Ignore grid availability at all. Results will be presented as if * all grids were available. */ PROJ_GRID_AVAILABILITY_IGNORED, /** Results will be presented as if grids known to PROJ (that is * registered in the grid_alternatives table of its database) were * available. Used typically when networking is enabled. */ PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE, } PROJ_GRID_AVAILABILITY_USE; /** \brief PROJ string version. */ typedef enum { /** cf osgeo::proj::io::PROJStringFormatter::Convention::PROJ_5 */ PJ_PROJ_5, /** cf osgeo::proj::io::PROJStringFormatter::Convention::PROJ_4 */ PJ_PROJ_4 } PJ_PROJ_STRING_TYPE; /** Spatial criterion to restrict candidate operations. */ typedef enum { /** The area of validity of transforms should strictly contain the * are of interest. */ PROJ_SPATIAL_CRITERION_STRICT_CONTAINMENT, /** The area of validity of transforms should at least intersect the * area of interest. */ PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION } PROJ_SPATIAL_CRITERION; /** Describe if and how intermediate CRS should be used */ typedef enum { /** Always search for intermediate CRS. */ PROJ_INTERMEDIATE_CRS_USE_ALWAYS, /** Only attempt looking for intermediate CRS if there is no direct * transformation available. */ PROJ_INTERMEDIATE_CRS_USE_IF_NO_DIRECT_TRANSFORMATION, /* Do not attempt looking for intermediate CRS. */ PROJ_INTERMEDIATE_CRS_USE_NEVER, } PROJ_INTERMEDIATE_CRS_USE; /** Type of coordinate system. */ typedef enum { PJ_CS_TYPE_UNKNOWN, PJ_CS_TYPE_CARTESIAN, PJ_CS_TYPE_ELLIPSOIDAL, PJ_CS_TYPE_VERTICAL, PJ_CS_TYPE_SPHERICAL, PJ_CS_TYPE_ORDINAL, PJ_CS_TYPE_PARAMETRIC, PJ_CS_TYPE_DATETIMETEMPORAL, PJ_CS_TYPE_TEMPORALCOUNT, PJ_CS_TYPE_TEMPORALMEASURE } PJ_COORDINATE_SYSTEM_TYPE; /** \brief Structure given overall description of a CRS. * * This structure may grow over time, and should not be directly allocated by * client code. */ typedef struct { /** Authority name. */ char *auth_name; /** Object code. */ char *code; /** Object name. */ char *name; /** Object type. */ PJ_TYPE type; /** Whether the object is deprecated */ int deprecated; /** Whereas the west_lon_degree, south_lat_degree, east_lon_degree and * north_lat_degree fields are valid. */ int bbox_valid; /** Western-most longitude of the area of use, in degrees. */ double west_lon_degree; /** Southern-most latitude of the area of use, in degrees. */ double south_lat_degree; /** Eastern-most longitude of the area of use, in degrees. */ double east_lon_degree; /** Northern-most latitude of the area of use, in degrees. */ double north_lat_degree; /** Name of the area of use. */ char *area_name; /** Name of the projection method for a projected CRS. Might be NULL even *for projected CRS in some cases. */ char *projection_method_name; /** Name of the celestial body of the CRS (e.g. "Earth"). * @since 8.1 */ char *celestial_body_name; } PROJ_CRS_INFO; /** \brief Structure describing optional parameters for proj_get_crs_list(); * * This structure may grow over time, and should not be directly allocated by * client code. */ typedef struct { /** Array of allowed object types. Should be NULL if all types are allowed*/ const PJ_TYPE *types; /** Size of types. Should be 0 if all types are allowed*/ size_t typesCount; /** If TRUE and bbox_valid == TRUE, then only CRS whose area of use * entirely contains the specified bounding box will be returned. * If FALSE and bbox_valid == TRUE, then only CRS whose area of use * intersects the specified bounding box will be returned. */ int crs_area_of_use_contains_bbox; /** To set to TRUE so that west_lon_degree, south_lat_degree, * east_lon_degree and north_lat_degree fields are taken into account. */ int bbox_valid; /** Western-most longitude of the area of use, in degrees. */ double west_lon_degree; /** Southern-most latitude of the area of use, in degrees. */ double south_lat_degree; /** Eastern-most longitude of the area of use, in degrees. */ double east_lon_degree; /** Northern-most latitude of the area of use, in degrees. */ double north_lat_degree; /** Whether deprecated objects are allowed. Default to FALSE. */ int allow_deprecated; /** Celestial body of the CRS (e.g. "Earth"). The default value, NULL, * means no restriction * @since 8.1 */ const char *celestial_body_name; } PROJ_CRS_LIST_PARAMETERS; /** \brief Structure given description of a unit. * * This structure may grow over time, and should not be directly allocated by * client code. * @since 7.1 */ typedef struct { /** Authority name. */ char *auth_name; /** Object code. */ char *code; /** Object name. For example "metre", "US survey foot", etc. */ char *name; /** Category of the unit: one of "linear", "linear_per_time", "angular", * "angular_per_time", "scale", "scale_per_time" or "time" */ char *category; /** Conversion factor to apply to transform from that unit to the * corresponding SI unit (metre for "linear", radian for "angular", etc.). * It might be 0 in some cases to indicate no known conversion factor. */ double conv_factor; /** PROJ short name, like "m", "ft", "us-ft", etc... Might be NULL */ char *proj_short_name; /** Whether the object is deprecated */ int deprecated; } PROJ_UNIT_INFO; /** \brief Structure given description of a celestial body. * * This structure may grow over time, and should not be directly allocated by * client code. * @since 8.1 */ typedef struct { /** Authority name. */ char *auth_name; /** Object name. For example "Earth" */ char *name; } PROJ_CELESTIAL_BODY_INFO; /**@}*/ /** * \defgroup iso19111_functions Binding in C of basic methods from the C++ API * Functions for ISO19111 C API * * The PJ* objects returned by proj_create_from_wkt(), * proj_create_from_database() and other functions in that section * will have generally minimal interaction with the functions declared in the * upper section of this header file (calling those functions on those objects * will either return an error or default/nonsensical values). The exception is * for ISO19111 objects of type CoordinateOperation that can be exported as a * valid PROJ pipeline. In this case, the PJ objects will work for example with * proj_trans_generic(). * Conversely, objects returned by proj_create() and proj_create_argv(), which * are not of type CRS, will return an error when used with functions of this * section. * @{ */ /*! @cond Doxygen_Suppress */ typedef struct PJ_OBJ_LIST PJ_OBJ_LIST; /*! @endcond */ void PROJ_DLL proj_string_list_destroy(PROJ_STRING_LIST list); void PROJ_DLL proj_context_set_autoclose_database(PJ_CONTEXT *ctx, int autoclose); int PROJ_DLL proj_context_set_database_path(PJ_CONTEXT *ctx, const char *dbPath, const char *const *auxDbPaths, const char *const *options); const char PROJ_DLL *proj_context_get_database_path(PJ_CONTEXT *ctx); const char PROJ_DLL *proj_context_get_database_metadata(PJ_CONTEXT *ctx, const char *key); PROJ_STRING_LIST PROJ_DLL proj_context_get_database_structure( PJ_CONTEXT *ctx, const char *const *options); PJ_GUESSED_WKT_DIALECT PROJ_DLL proj_context_guess_wkt_dialect(PJ_CONTEXT *ctx, const char *wkt); PJ PROJ_DLL *proj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt, const char *const *options, PROJ_STRING_LIST *out_warnings, PROJ_STRING_LIST *out_grammar_errors); PJ PROJ_DLL *proj_create_from_database(PJ_CONTEXT *ctx, const char *auth_name, const char *code, PJ_CATEGORY category, int usePROJAlternativeGridNames, const char *const *options); int PROJ_DLL proj_uom_get_info_from_database( PJ_CONTEXT *ctx, const char *auth_name, const char *code, const char **out_name, double *out_conv_factor, const char **out_category); int PROJ_DLL proj_grid_get_info_from_database( PJ_CONTEXT *ctx, const char *grid_name, const char **out_full_name, const char **out_package_name, const char **out_url, int *out_direct_download, int *out_open_license, int *out_available); PJ PROJ_DLL *proj_clone(PJ_CONTEXT *ctx, const PJ *obj); PJ_OBJ_LIST PROJ_DLL * proj_create_from_name(PJ_CONTEXT *ctx, const char *auth_name, const char *searchedName, const PJ_TYPE *types, size_t typesCount, int approximateMatch, size_t limitResultCount, const char *const *options); PJ_TYPE PROJ_DLL proj_get_type(const PJ *obj); int PROJ_DLL proj_is_deprecated(const PJ *obj); PJ_OBJ_LIST PROJ_DLL *proj_get_non_deprecated(PJ_CONTEXT *ctx, const PJ *obj); int PROJ_DLL proj_is_equivalent_to(const PJ *obj, const PJ *other, PJ_COMPARISON_CRITERION criterion); int PROJ_DLL proj_is_equivalent_to_with_ctx(PJ_CONTEXT *ctx, const PJ *obj, const PJ *other, PJ_COMPARISON_CRITERION criterion); int PROJ_DLL proj_is_crs(const PJ *obj); const char PROJ_DLL *proj_get_name(const PJ *obj); const char PROJ_DLL *proj_get_id_auth_name(const PJ *obj, int index); const char PROJ_DLL *proj_get_id_code(const PJ *obj, int index); const char PROJ_DLL *proj_get_remarks(const PJ *obj); int PROJ_DLL proj_get_domain_count(const PJ *obj); const char PROJ_DLL *proj_get_scope(const PJ *obj); const char PROJ_DLL *proj_get_scope_ex(const PJ *obj, int domainIdx); int PROJ_DLL proj_get_area_of_use(PJ_CONTEXT *ctx, const PJ *obj, double *out_west_lon_degree, double *out_south_lat_degree, double *out_east_lon_degree, double *out_north_lat_degree, const char **out_area_name); int PROJ_DLL proj_get_area_of_use_ex(PJ_CONTEXT *ctx, const PJ *obj, int domainIdx, double *out_west_lon_degree, double *out_south_lat_degree, double *out_east_lon_degree, double *out_north_lat_degree, const char **out_area_name); const char PROJ_DLL *proj_as_wkt(PJ_CONTEXT *ctx, const PJ *obj, PJ_WKT_TYPE type, const char *const *options); const char PROJ_DLL *proj_as_proj_string(PJ_CONTEXT *ctx, const PJ *obj, PJ_PROJ_STRING_TYPE type, const char *const *options); const char PROJ_DLL *proj_as_projjson(PJ_CONTEXT *ctx, const PJ *obj, const char *const *options); PJ PROJ_DLL *proj_get_source_crs(PJ_CONTEXT *ctx, const PJ *obj); PJ PROJ_DLL *proj_get_target_crs(PJ_CONTEXT *ctx, const PJ *obj); PJ_OBJ_LIST PROJ_DLL *proj_identify(PJ_CONTEXT *ctx, const PJ *obj, const char *auth_name, const char *const *options, int **out_confidence); PROJ_STRING_LIST PROJ_DLL proj_get_geoid_models_from_database( PJ_CONTEXT *ctx, const char *auth_name, const char *code, const char *const *options); void PROJ_DLL proj_int_list_destroy(int *list); /* ------------------------------------------------------------------------- */ PROJ_STRING_LIST PROJ_DLL proj_get_authorities_from_database(PJ_CONTEXT *ctx); PROJ_STRING_LIST PROJ_DLL proj_get_codes_from_database(PJ_CONTEXT *ctx, const char *auth_name, PJ_TYPE type, int allow_deprecated); PROJ_CELESTIAL_BODY_INFO PROJ_DLL **proj_get_celestial_body_list_from_database( PJ_CONTEXT *ctx, const char *auth_name, int *out_result_count); void PROJ_DLL proj_celestial_body_list_destroy(PROJ_CELESTIAL_BODY_INFO **list); PROJ_CRS_LIST_PARAMETERS PROJ_DLL *proj_get_crs_list_parameters_create(void); void PROJ_DLL proj_get_crs_list_parameters_destroy(PROJ_CRS_LIST_PARAMETERS *params); PROJ_CRS_INFO PROJ_DLL ** proj_get_crs_info_list_from_database(PJ_CONTEXT *ctx, const char *auth_name, const PROJ_CRS_LIST_PARAMETERS *params, int *out_result_count); void PROJ_DLL proj_crs_info_list_destroy(PROJ_CRS_INFO **list); PROJ_UNIT_INFO PROJ_DLL **proj_get_units_from_database(PJ_CONTEXT *ctx, const char *auth_name, const char *category, int allow_deprecated, int *out_result_count); void PROJ_DLL proj_unit_list_destroy(PROJ_UNIT_INFO **list); /* ------------------------------------------------------------------------- */ /*! @cond Doxygen_Suppress */ typedef struct PJ_INSERT_SESSION PJ_INSERT_SESSION; /*! @endcond */ PJ_INSERT_SESSION PROJ_DLL *proj_insert_object_session_create(PJ_CONTEXT *ctx); void PROJ_DLL proj_insert_object_session_destroy(PJ_CONTEXT *ctx, PJ_INSERT_SESSION *session); PROJ_STRING_LIST PROJ_DLL proj_get_insert_statements( PJ_CONTEXT *ctx, PJ_INSERT_SESSION *session, const PJ *object, const char *authority, const char *code, int numeric_codes, const char *const *allowed_authorities, const char *const *options); char PROJ_DLL *proj_suggests_code_for(PJ_CONTEXT *ctx, const PJ *object, const char *authority, int numeric_code, const char *const *options); void PROJ_DLL proj_string_destroy(char *str); /* ------------------------------------------------------------------------- */ /*! @cond Doxygen_Suppress */ typedef struct PJ_OPERATION_FACTORY_CONTEXT PJ_OPERATION_FACTORY_CONTEXT; /*! @endcond */ PJ_OPERATION_FACTORY_CONTEXT PROJ_DLL * proj_create_operation_factory_context(PJ_CONTEXT *ctx, const char *authority); void PROJ_DLL proj_operation_factory_context_destroy(PJ_OPERATION_FACTORY_CONTEXT *ctx); void PROJ_DLL proj_operation_factory_context_set_desired_accuracy( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, double accuracy); void PROJ_DLL proj_operation_factory_context_set_area_of_interest( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, double west_lon_degree, double south_lat_degree, double east_lon_degree, double north_lat_degree); void PROJ_DLL proj_operation_factory_context_set_area_of_interest_name( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, const char *area_name); void PROJ_DLL proj_operation_factory_context_set_crs_extent_use( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_CRS_EXTENT_USE use); void PROJ_DLL proj_operation_factory_context_set_spatial_criterion( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_SPATIAL_CRITERION criterion); void PROJ_DLL proj_operation_factory_context_set_grid_availability_use( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_GRID_AVAILABILITY_USE use); void PROJ_DLL proj_operation_factory_context_set_use_proj_alternative_grid_names( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int usePROJNames); void PROJ_DLL proj_operation_factory_context_set_allow_use_intermediate_crs( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, PROJ_INTERMEDIATE_CRS_USE use); void PROJ_DLL proj_operation_factory_context_set_allowed_intermediate_crs( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, const char *const *list_of_auth_name_codes); void PROJ_DLL proj_operation_factory_context_set_discard_superseded( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int discard); void PROJ_DLL proj_operation_factory_context_set_allow_ballpark_transformations( PJ_CONTEXT *ctx, PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, int allow); /* ------------------------------------------------------------------------- */ PJ_OBJ_LIST PROJ_DLL * proj_create_operations(PJ_CONTEXT *ctx, const PJ *source_crs, const PJ *target_crs, const PJ_OPERATION_FACTORY_CONTEXT *operationContext); int PROJ_DLL proj_list_get_count(const PJ_OBJ_LIST *result); PJ PROJ_DLL *proj_list_get(PJ_CONTEXT *ctx, const PJ_OBJ_LIST *result, int index); void PROJ_DLL proj_list_destroy(PJ_OBJ_LIST *result); int PROJ_DLL proj_get_suggested_operation(PJ_CONTEXT *ctx, PJ_OBJ_LIST *operations, PJ_DIRECTION direction, PJ_COORD coord); /* ------------------------------------------------------------------------- */ int PROJ_DLL proj_crs_is_derived(PJ_CONTEXT *ctx, const PJ *crs); PJ PROJ_DLL *proj_crs_get_geodetic_crs(PJ_CONTEXT *ctx, const PJ *crs); PJ PROJ_DLL *proj_crs_get_horizontal_datum(PJ_CONTEXT *ctx, const PJ *crs); PJ PROJ_DLL *proj_crs_get_sub_crs(PJ_CONTEXT *ctx, const PJ *crs, int index); PJ PROJ_DLL *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs); PJ PROJ_DLL *proj_crs_get_datum_ensemble(PJ_CONTEXT *ctx, const PJ *crs); PJ PROJ_DLL *proj_crs_get_datum_forced(PJ_CONTEXT *ctx, const PJ *crs); int PROJ_DLL proj_crs_has_point_motion_operation(PJ_CONTEXT *ctx, const PJ *crs); int PROJ_DLL proj_datum_ensemble_get_member_count(PJ_CONTEXT *ctx, const PJ *datum_ensemble); double PROJ_DLL proj_datum_ensemble_get_accuracy(PJ_CONTEXT *ctx, const PJ *datum_ensemble); PJ PROJ_DLL *proj_datum_ensemble_get_member(PJ_CONTEXT *ctx, const PJ *datum_ensemble, int member_index); double PROJ_DLL proj_dynamic_datum_get_frame_reference_epoch(PJ_CONTEXT *ctx, const PJ *datum); PJ PROJ_DLL *proj_crs_get_coordinate_system(PJ_CONTEXT *ctx, const PJ *crs); PJ_COORDINATE_SYSTEM_TYPE PROJ_DLL proj_cs_get_type(PJ_CONTEXT *ctx, const PJ *cs); int PROJ_DLL proj_cs_get_axis_count(PJ_CONTEXT *ctx, const PJ *cs); int PROJ_DLL proj_cs_get_axis_info( PJ_CONTEXT *ctx, const PJ *cs, int index, const char **out_name, const char **out_abbrev, const char **out_direction, double *out_unit_conv_factor, const char **out_unit_name, const char **out_unit_auth_name, const char **out_unit_code); PJ PROJ_DLL *proj_get_ellipsoid(PJ_CONTEXT *ctx, const PJ *obj); int PROJ_DLL proj_ellipsoid_get_parameters(PJ_CONTEXT *ctx, const PJ *ellipsoid, double *out_semi_major_metre, double *out_semi_minor_metre, int *out_is_semi_minor_computed, double *out_inv_flattening); const char PROJ_DLL *proj_get_celestial_body_name(PJ_CONTEXT *ctx, const PJ *obj); PJ PROJ_DLL *proj_get_prime_meridian(PJ_CONTEXT *ctx, const PJ *obj); int PROJ_DLL proj_prime_meridian_get_parameters(PJ_CONTEXT *ctx, const PJ *prime_meridian, double *out_longitude, double *out_unit_conv_factor, const char **out_unit_name); PJ PROJ_DLL *proj_crs_get_coordoperation(PJ_CONTEXT *ctx, const PJ *crs); int PROJ_DLL proj_coordoperation_get_method_info( PJ_CONTEXT *ctx, const PJ *coordoperation, const char **out_method_name, const char **out_method_auth_name, const char **out_method_code); int PROJ_DLL proj_coordoperation_is_instantiable(PJ_CONTEXT *ctx, const PJ *coordoperation); int PROJ_DLL proj_coordoperation_has_ballpark_transformation( PJ_CONTEXT *ctx, const PJ *coordoperation); int PROJ_DLL proj_coordoperation_requires_per_coordinate_input_time( PJ_CONTEXT *ctx, const PJ *coordoperation); int PROJ_DLL proj_coordoperation_get_param_count(PJ_CONTEXT *ctx, const PJ *coordoperation); int PROJ_DLL proj_coordoperation_get_param_index(PJ_CONTEXT *ctx, const PJ *coordoperation, const char *name); int PROJ_DLL proj_coordoperation_get_param( PJ_CONTEXT *ctx, const PJ *coordoperation, int index, const char **out_name, const char **out_auth_name, const char **out_code, double *out_value, const char **out_value_string, double *out_unit_conv_factor, const char **out_unit_name, const char **out_unit_auth_name, const char **out_unit_code, const char **out_unit_category); int PROJ_DLL proj_coordoperation_get_grid_used_count(PJ_CONTEXT *ctx, const PJ *coordoperation); int PROJ_DLL proj_coordoperation_get_grid_used( PJ_CONTEXT *ctx, const PJ *coordoperation, int index, const char **out_short_name, const char **out_full_name, const char **out_package_name, const char **out_url, int *out_direct_download, int *out_open_license, int *out_available); double PROJ_DLL proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx, const PJ *obj); int PROJ_DLL proj_coordoperation_get_towgs84_values( PJ_CONTEXT *ctx, const PJ *coordoperation, double *out_values, int value_count, int emit_error_if_incompatible); PJ PROJ_DLL *proj_coordoperation_create_inverse(PJ_CONTEXT *ctx, const PJ *obj); int PROJ_DLL proj_concatoperation_get_step_count(PJ_CONTEXT *ctx, const PJ *concatoperation); PJ PROJ_DLL *proj_concatoperation_get_step(PJ_CONTEXT *ctx, const PJ *concatoperation, int i_step); PJ PROJ_DLL *proj_coordinate_metadata_create(PJ_CONTEXT *ctx, const PJ *crs, double epoch); double PROJ_DLL proj_coordinate_metadata_get_epoch(PJ_CONTEXT *ctx, const PJ *obj); /**@}*/ /* ------------------------------------------------------------------------- */ /* Binding in C of advanced methods from the C++ API */ /* */ /* Manual construction of CRS objects. */ /* ------------------------------------------------------------------------- */ /** * \defgroup iso19111_advanced_types C types for advanced methods from the C++ * API * @{ */ /** Type of unit of measure. */ typedef enum { /** Angular unit of measure */ PJ_UT_ANGULAR, /** Linear unit of measure */ PJ_UT_LINEAR, /** Scale unit of measure */ PJ_UT_SCALE, /** Time unit of measure */ PJ_UT_TIME, /** Parametric unit of measure */ PJ_UT_PARAMETRIC } PJ_UNIT_TYPE; /** \brief Axis description. */ typedef struct { /** Axis name. */ char *name; /** Axis abbreviation. */ char *abbreviation; /** Axis direction. */ char *direction; /** Axis unit name. */ char *unit_name; /** Conversion factor to SI of the unit. */ double unit_conv_factor; /** Type of unit */ PJ_UNIT_TYPE unit_type; } PJ_AXIS_DESCRIPTION; /** Type of Cartesian 2D coordinate system. */ typedef enum { /** Easting-Norting */ PJ_CART2D_EASTING_NORTHING, /** Northing-Easting */ PJ_CART2D_NORTHING_EASTING, /** North Pole Easting/SOUTH-Norting/SOUTH */ PJ_CART2D_NORTH_POLE_EASTING_SOUTH_NORTHING_SOUTH, /** South Pole Easting/NORTH-Norting/NORTH */ PJ_CART2D_SOUTH_POLE_EASTING_NORTH_NORTHING_NORTH, /** Westing-southing */ PJ_CART2D_WESTING_SOUTHING, } PJ_CARTESIAN_CS_2D_TYPE; /** Type of Ellipsoidal 2D coordinate system. */ typedef enum { /** Longitude-Latitude */ PJ_ELLPS2D_LONGITUDE_LATITUDE, /** Latitude-Longitude */ PJ_ELLPS2D_LATITUDE_LONGITUDE, } PJ_ELLIPSOIDAL_CS_2D_TYPE; /** Type of Ellipsoidal 3D coordinate system. */ typedef enum { /** Longitude-Latitude-Height(up) */ PJ_ELLPS3D_LONGITUDE_LATITUDE_HEIGHT, /** Latitude-Longitude-Height(up) */ PJ_ELLPS3D_LATITUDE_LONGITUDE_HEIGHT, } PJ_ELLIPSOIDAL_CS_3D_TYPE; /** \brief Description of a parameter value for a Conversion. */ typedef struct { /** Parameter name. */ const char *name; /** Parameter authority name. */ const char *auth_name; /** Parameter code. */ const char *code; /** Parameter value. */ double value; /** Name of unit in which parameter value is expressed. */ const char *unit_name; /** Conversion factor to SI of the unit. */ double unit_conv_factor; /** Type of unit */ PJ_UNIT_TYPE unit_type; } PJ_PARAM_DESCRIPTION; /**@}*/ /** * \defgroup iso19111_advanced_functions Binding in C of advanced methods from * the C++ API * @{ */ PJ PROJ_DLL *proj_create_cs(PJ_CONTEXT *ctx, PJ_COORDINATE_SYSTEM_TYPE type, int axis_count, const PJ_AXIS_DESCRIPTION *axis); PJ PROJ_DLL *proj_create_cartesian_2D_cs(PJ_CONTEXT *ctx, PJ_CARTESIAN_CS_2D_TYPE type, const char *unit_name, double unit_conv_factor); PJ PROJ_DLL *proj_create_ellipsoidal_2D_cs(PJ_CONTEXT *ctx, PJ_ELLIPSOIDAL_CS_2D_TYPE type, const char *unit_name, double unit_conv_factor); PJ PROJ_DLL * proj_create_ellipsoidal_3D_cs(PJ_CONTEXT *ctx, PJ_ELLIPSOIDAL_CS_3D_TYPE type, const char *horizontal_angular_unit_name, double horizontal_angular_unit_conv_factor, const char *vertical_linear_unit_name, double vertical_linear_unit_conv_factor); PJ_OBJ_LIST PROJ_DLL *proj_query_geodetic_crs_from_datum( PJ_CONTEXT *ctx, const char *crs_auth_name, const char *datum_auth_name, const char *datum_code, const char *crs_type); PJ PROJ_DLL *proj_create_geographic_crs( PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *ellps_name, double semi_major_metre, double inv_flattening, const char *prime_meridian_name, double prime_meridian_offset, const char *pm_angular_units, double pm_units_conv, const PJ *ellipsoidal_cs); PJ PROJ_DLL * proj_create_geographic_crs_from_datum(PJ_CONTEXT *ctx, const char *crs_name, const PJ *datum_or_datum_ensemble, const PJ *ellipsoidal_cs); PJ PROJ_DLL *proj_create_geocentric_crs( PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *ellps_name, double semi_major_metre, double inv_flattening, const char *prime_meridian_name, double prime_meridian_offset, const char *angular_units, double angular_units_conv, const char *linear_units, double linear_units_conv); PJ PROJ_DLL *proj_create_geocentric_crs_from_datum( PJ_CONTEXT *ctx, const char *crs_name, const PJ *datum_or_datum_ensemble, const char *linear_units, double linear_units_conv); PJ PROJ_DLL *proj_create_derived_geographic_crs(PJ_CONTEXT *ctx, const char *crs_name, const PJ *base_geographic_crs, const PJ *conversion, const PJ *ellipsoidal_cs); int PROJ_DLL proj_is_derived_crs(PJ_CONTEXT *ctx, const PJ *crs); PJ PROJ_DLL *proj_alter_name(PJ_CONTEXT *ctx, const PJ *obj, const char *name); PJ PROJ_DLL *proj_alter_id(PJ_CONTEXT *ctx, const PJ *obj, const char *auth_name, const char *code); PJ PROJ_DLL *proj_crs_alter_geodetic_crs(PJ_CONTEXT *ctx, const PJ *obj, const PJ *new_geod_crs); PJ PROJ_DLL *proj_crs_alter_cs_angular_unit(PJ_CONTEXT *ctx, const PJ *obj, const char *angular_units, double angular_units_conv, const char *unit_auth_name, const char *unit_code); PJ PROJ_DLL *proj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ *obj, const char *linear_units, double linear_units_conv, const char *unit_auth_name, const char *unit_code); PJ PROJ_DLL *proj_crs_alter_parameters_linear_unit( PJ_CONTEXT *ctx, const PJ *obj, const char *linear_units, double linear_units_conv, const char *unit_auth_name, const char *unit_code, int convert_to_new_unit); PJ PROJ_DLL *proj_crs_promote_to_3D(PJ_CONTEXT *ctx, const char *crs_3D_name, const PJ *crs_2D); PJ PROJ_DLL * proj_crs_create_projected_3D_crs_from_2D(PJ_CONTEXT *ctx, const char *crs_name, const PJ *projected_2D_crs, const PJ *geog_3D_crs); PJ PROJ_DLL *proj_crs_demote_to_2D(PJ_CONTEXT *ctx, const char *crs_2D_name, const PJ *crs_3D); PJ PROJ_DLL *proj_create_engineering_crs(PJ_CONTEXT *ctx, const char *crsName); PJ PROJ_DLL *proj_create_vertical_crs(PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *linear_units, double linear_units_conv); PJ PROJ_DLL *proj_create_vertical_crs_ex( PJ_CONTEXT *ctx, const char *crs_name, const char *datum_name, const char *datum_auth_name, const char *datum_code, const char *linear_units, double linear_units_conv, const char *geoid_model_name, const char *geoid_model_auth_name, const char *geoid_model_code, const PJ *geoid_geog_crs, const char *const *options); PJ PROJ_DLL *proj_create_compound_crs(PJ_CONTEXT *ctx, const char *crs_name, const PJ *horiz_crs, const PJ *vert_crs); PJ PROJ_DLL *proj_create_conversion(PJ_CONTEXT *ctx, const char *name, const char *auth_name, const char *code, const char *method_name, const char *method_auth_name, const char *method_code, int param_count, const PJ_PARAM_DESCRIPTION *params); PJ PROJ_DLL *proj_create_transformation( PJ_CONTEXT *ctx, const char *name, const char *auth_name, const char *code, const PJ *source_crs, const PJ *target_crs, const PJ *interpolation_crs, const char *method_name, const char *method_auth_name, const char *method_code, int param_count, const PJ_PARAM_DESCRIPTION *params, double accuracy); PJ PROJ_DLL * proj_convert_conversion_to_other_method(PJ_CONTEXT *ctx, const PJ *conversion, int new_method_epsg_code, const char *new_method_name); PJ PROJ_DLL *proj_create_projected_crs(PJ_CONTEXT *ctx, const char *crs_name, const PJ *geodetic_crs, const PJ *conversion, const PJ *coordinate_system); PJ PROJ_DLL *proj_crs_create_bound_crs(PJ_CONTEXT *ctx, const PJ *base_crs, const PJ *hub_crs, const PJ *transformation); PJ PROJ_DLL *proj_crs_create_bound_crs_to_WGS84(PJ_CONTEXT *ctx, const PJ *crs, const char *const *options); PJ PROJ_DLL *proj_crs_create_bound_vertical_crs(PJ_CONTEXT *ctx, const PJ *vert_crs, const PJ *hub_geographic_3D_crs, const char *grid_name); /* BEGIN: Generated by scripts/create_c_api_projections.py*/ PJ PROJ_DLL *proj_create_conversion_utm(PJ_CONTEXT *ctx, int zone, int north); PJ PROJ_DLL *proj_create_conversion_transverse_mercator( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_gauss_schreiber_transverse_mercator( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_transverse_mercator_south_oriented( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_two_point_equidistant( PJ_CONTEXT *ctx, double latitude_first_point, double longitude_first_point, double latitude_second_point, double longitude_secon_point, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_tunisia_mapping_grid( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_tunisia_mining_grid( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_albers_equal_area( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_conic_conformal_1sp( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_conic_conformal_1sp_variant_b( PJ_CONTEXT *ctx, double latitude_nat_origin, double scale, double latitude_false_origin, double longitude_false_origin, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_conic_conformal_2sp( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_conic_conformal_2sp_michigan( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, double ellipsoid_scaling_factor, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_conic_conformal_2sp_belgium( PJ_CONTEXT *ctx, double latitude_false_origin, double longitude_false_origin, double latitude_first_parallel, double latitude_second_parallel, double easting_false_origin, double northing_false_origin, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_azimuthal_equidistant( PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_guam_projection( PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_bonne( PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_cylindrical_equal_area_spherical( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_cylindrical_equal_area( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_cassini_soldner( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_equidistant_conic( PJ_CONTEXT *ctx, double center_lat, double center_long, double latitude_first_parallel, double latitude_second_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_eckert_i( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_eckert_ii( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_eckert_iii( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_eckert_iv( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_eckert_v( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_eckert_vi( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_equidistant_cylindrical( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_equidistant_cylindrical_spherical( PJ_CONTEXT *ctx, double latitude_first_parallel, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_gall(PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_goode_homolosine( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_interrupted_goode_homolosine( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_geostationary_satellite_sweep_x( PJ_CONTEXT *ctx, double center_long, double height, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_geostationary_satellite_sweep_y( PJ_CONTEXT *ctx, double center_long, double height, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_gnomonic( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_hotine_oblique_mercator_variant_a( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_projection_centre, double azimuth_initial_line, double angle_from_rectified_to_skrew_grid, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_hotine_oblique_mercator_variant_b( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_projection_centre, double azimuth_initial_line, double angle_from_rectified_to_skrew_grid, double scale, double easting_projection_centre, double northing_projection_centre, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL * proj_create_conversion_hotine_oblique_mercator_two_point_natural_origin( PJ_CONTEXT *ctx, double latitude_projection_centre, double latitude_point1, double longitude_point1, double latitude_point2, double longitude_point2, double scale, double easting_projection_centre, double northing_projection_centre, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_laborde_oblique_mercator( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_projection_centre, double azimuth_initial_line, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_international_map_world_polyconic( PJ_CONTEXT *ctx, double center_long, double latitude_first_parallel, double latitude_second_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_krovak_north_oriented( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_of_origin, double colatitude_cone_axis, double latitude_pseudo_standard_parallel, double scale_factor_pseudo_standard_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_krovak( PJ_CONTEXT *ctx, double latitude_projection_centre, double longitude_of_origin, double colatitude_cone_axis, double latitude_pseudo_standard_parallel, double scale_factor_pseudo_standard_parallel, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_lambert_azimuthal_equal_area( PJ_CONTEXT *ctx, double latitude_nat_origin, double longitude_nat_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_miller_cylindrical( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_mercator_variant_a( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_mercator_variant_b( PJ_CONTEXT *ctx, double latitude_first_parallel, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_popular_visualisation_pseudo_mercator( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_mollweide( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_new_zealand_mapping_grid( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_oblique_stereographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_orthographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_local_orthographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double azimuth, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_american_polyconic( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_polar_stereographic_variant_a( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_polar_stereographic_variant_b( PJ_CONTEXT *ctx, double latitude_standard_parallel, double longitude_of_origin, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_robinson( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_sinusoidal( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_stereographic( PJ_CONTEXT *ctx, double center_lat, double center_long, double scale, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_van_der_grinten( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_wagner_i( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_wagner_ii( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_wagner_iii( PJ_CONTEXT *ctx, double latitude_true_scale, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_wagner_iv( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_wagner_v( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_wagner_vi( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_wagner_vii( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_quadrilateralized_spherical_cube( PJ_CONTEXT *ctx, double center_lat, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_spherical_cross_track_height( PJ_CONTEXT *ctx, double peg_point_lat, double peg_point_long, double peg_point_heading, double peg_point_height, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_equal_earth( PJ_CONTEXT *ctx, double center_long, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_vertical_perspective( PJ_CONTEXT *ctx, double topo_origin_lat, double topo_origin_long, double topo_origin_height, double view_point_height, double false_easting, double false_northing, const char *ang_unit_name, double ang_unit_conv_factor, const char *linear_unit_name, double linear_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_pole_rotation_grib_convention( PJ_CONTEXT *ctx, double south_pole_lat_in_unrotated_crs, double south_pole_long_in_unrotated_crs, double axis_rotation, const char *ang_unit_name, double ang_unit_conv_factor); PJ PROJ_DLL *proj_create_conversion_pole_rotation_netcdf_cf_convention( PJ_CONTEXT *ctx, double grid_north_pole_latitude, double grid_north_pole_longitude, double north_pole_grid_longitude, const char *ang_unit_name, double ang_unit_conv_factor); /* END: Generated by scripts/create_c_api_projections.py*/ /**@}*/ #ifdef __cplusplus } #endif #endif /* ndef PROJ_H */ proj-9.6.0/src/proj_constants.h000664 001754 001755 00000116454 14764566077 016442 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Constants * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef PROJ_CONSTANTS_INCLUDED #define PROJ_CONSTANTS_INCLUDED /* Projection methods */ #define EPSG_NAME_METHOD_TRANSVERSE_MERCATOR "Transverse Mercator" #define EPSG_CODE_METHOD_TRANSVERSE_MERCATOR 9807 #define EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_3D "Transverse Mercator (3D)" #define EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_3D 1111 #define EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED \ "Transverse Mercator (South Orientated)" #define EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED 9808 #define PROJ_WKT2_NAME_METHOD_TWO_POINT_EQUIDISTANT "Two Point Equidistant" #define EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP \ "Lambert Conic Conformal (1SP)" #define EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP 9801 #define EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP_VARIANT_B \ "Lambert Conic Conformal (1SP variant B)" #define EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP_VARIANT_B 1102 #define EPSG_NAME_METHOD_NZMG "New Zealand Map Grid" #define EPSG_CODE_METHOD_NZMG 9811 /* Deprecated because of wrong name. Use EPSG_xxx_METHOD_TUNISIA_MINING_GRID * instead */ #define EPSG_NAME_METHOD_TUNISIA_MAPPING_GRID "Tunisia Mapping Grid" #define EPSG_CODE_METHOD_TUNISIA_MAPPING_GRID 9816 #define EPSG_NAME_METHOD_TUNISIA_MINING_GRID "Tunisia Mining Grid" #define EPSG_CODE_METHOD_TUNISIA_MINING_GRID 9816 #define EPSG_NAME_METHOD_ALBERS_EQUAL_AREA "Albers Equal Area" #define EPSG_CODE_METHOD_ALBERS_EQUAL_AREA 9822 #define EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP \ "Lambert Conic Conformal (2SP)" #define EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP 9802 #define EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM \ "Lambert Conic Conformal (2SP Belgium)" #define EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM 9803 #define EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN \ "Lambert Conic Conformal (2SP Michigan)" #define EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN 1051 #define EPSG_NAME_METHOD_AZIMUTHAL_EQUIDISTANT "Azimuthal Equidistant" #define EPSG_CODE_METHOD_AZIMUTHAL_EQUIDISTANT 1125 #define EPSG_NAME_METHOD_MODIFIED_AZIMUTHAL_EQUIDISTANT \ "Modified Azimuthal Equidistant" #define EPSG_CODE_METHOD_MODIFIED_AZIMUTHAL_EQUIDISTANT 9832 #define EPSG_NAME_METHOD_GUAM_PROJECTION "Guam Projection" #define EPSG_CODE_METHOD_GUAM_PROJECTION 9831 #define EPSG_NAME_METHOD_BONNE "Bonne" #define EPSG_CODE_METHOD_BONNE 9827 #define PROJ_WKT2_NAME_METHOD_COMPACT_MILLER "Compact Miller" #define EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL \ "Lambert Cylindrical Equal Area (Spherical)" #define EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL 9834 #define EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA \ "Lambert Cylindrical Equal Area" #define EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA 9835 #define EPSG_NAME_METHOD_CASSINI_SOLDNER "Cassini-Soldner" #define EPSG_CODE_METHOD_CASSINI_SOLDNER 9806 #define EPSG_NAME_METHOD_HYPERBOLIC_CASSINI_SOLDNER "Hyperbolic Cassini-Soldner" #define EPSG_CODE_METHOD_HYPERBOLIC_CASSINI_SOLDNER 9833 #define PROJ_WKT2_NAME_METHOD_EQUIDISTANT_CONIC "Equidistant Conic" #define EPSG_NAME_METHOD_EQUIDISTANT_CONIC "Equidistant Conic" #define EPSG_CODE_METHOD_EQUIDISTANT_CONIC 1119 #define PROJ_WKT2_NAME_METHOD_ECKERT_I "Eckert I" #define PROJ_WKT2_NAME_METHOD_ECKERT_II "Eckert II" #define PROJ_WKT2_NAME_METHOD_ECKERT_III "Eckert III" #define PROJ_WKT2_NAME_METHOD_ECKERT_IV "Eckert IV" #define PROJ_WKT2_NAME_METHOD_ECKERT_V "Eckert V" #define PROJ_WKT2_NAME_METHOD_ECKERT_VI "Eckert VI" #define EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL "Equidistant Cylindrical" #define EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL 1028 #define EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL \ "Equidistant Cylindrical (Spherical)" #define EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL 1029 #define PROJ_WKT2_NAME_METHOD_FLAT_POLAR_QUARTIC "Flat Polar Quartic" #define PROJ_WKT2_NAME_METHOD_GALL_STEREOGRAPHIC "Gall Stereographic" #define PROJ_WKT2_NAME_METHOD_GOODE_HOMOLOSINE "Goode Homolosine" #define PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE \ "Interrupted Goode Homolosine" #define PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE_OCEAN \ "Interrupted Goode Homolosine Ocean" #define PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X \ "Geostationary Satellite (Sweep X)" #define PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_Y \ "Geostationary Satellite (Sweep Y)" #define PROJ_WKT2_NAME_METHOD_GAUSS_SCHREIBER_TRANSVERSE_MERCATOR \ "Gauss Schreiber Transverse Mercator" #define PROJ_WKT2_NAME_METHOD_GNOMONIC "Gnomonic" #define EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A \ "Hotine Oblique Mercator (variant A)" #define EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A 9812 #define EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B \ "Hotine Oblique Mercator (variant B)" #define EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B 9815 #define PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN \ "Hotine Oblique Mercator Two Point Natural Origin" #define PROJ_WKT2_NAME_INTERNATIONAL_MAP_WORLD_POLYCONIC \ "International Map of the World Polyconic" #define EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED "Krovak (North Orientated)" #define EPSG_CODE_METHOD_KROVAK_NORTH_ORIENTED 1041 #define EPSG_NAME_METHOD_KROVAK "Krovak" #define EPSG_CODE_METHOD_KROVAK 9819 #define EPSG_NAME_METHOD_KROVAK_MODIFIED "Krovak Modified" #define EPSG_CODE_METHOD_KROVAK_MODIFIED 1042 #define EPSG_NAME_METHOD_KROVAK_MODIFIED_NORTH_ORIENTED \ "Krovak Modified (North Orientated)" #define EPSG_CODE_METHOD_KROVAK_MODIFIED_NORTH_ORIENTED 1043 #define EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA \ "Lambert Azimuthal Equal Area" #define EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA 9820 #define EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL \ "Lambert Azimuthal Equal Area (Spherical)" #define EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL 1027 #define PROJ_WKT2_NAME_METHOD_MILLER_CYLINDRICAL "Miller Cylindrical" #define EPSG_CODE_METHOD_MERCATOR_VARIANT_A 9804 #define EPSG_NAME_METHOD_MERCATOR_VARIANT_A "Mercator (variant A)" #define EPSG_CODE_METHOD_MERCATOR_VARIANT_B 9805 #define EPSG_NAME_METHOD_MERCATOR_VARIANT_B "Mercator (variant B)" #define EPSG_NAME_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR \ "Popular Visualisation Pseudo Mercator" #define EPSG_CODE_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR 1024 #define EPSG_NAME_METHOD_MERCATOR_SPHERICAL "Mercator (Spherical)" #define EPSG_CODE_METHOD_MERCATOR_SPHERICAL 1026 #define PROJ_WKT2_NAME_METHOD_MOLLWEIDE "Mollweide" #define PROJ_WKT2_NAME_METHOD_NATURAL_EARTH "Natural Earth" #define PROJ_WKT2_NAME_METHOD_NATURAL_EARTH_II "Natural Earth II" #define EPSG_NAME_METHOD_OBLIQUE_STEREOGRAPHIC "Oblique Stereographic" #define EPSG_CODE_METHOD_OBLIQUE_STEREOGRAPHIC 9809 #define EPSG_NAME_METHOD_ORTHOGRAPHIC "Orthographic" #define EPSG_CODE_METHOD_ORTHOGRAPHIC 9840 #define EPSG_NAME_METHOD_LOCAL_ORTHOGRAPHIC "Local Orthographic" #define EPSG_CODE_METHOD_LOCAL_ORTHOGRAPHIC 1130 #define PROJ_WKT2_NAME_ORTHOGRAPHIC_SPHERICAL "Orthographic (Spherical)" #define PROJ_WKT2_NAME_METHOD_PATTERSON "Patterson" #define EPSG_NAME_METHOD_AMERICAN_POLYCONIC "American Polyconic" #define EPSG_CODE_METHOD_AMERICAN_POLYCONIC 9818 #define EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A \ "Polar Stereographic (variant A)" #define EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_A 9810 #define EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B \ "Polar Stereographic (variant B)" #define EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B 9829 #define PROJ_WKT2_NAME_METHOD_ROBINSON "Robinson" #define PROJ_WKT2_NAME_METHOD_SINUSOIDAL "Sinusoidal" #define PROJ_WKT2_NAME_METHOD_STEREOGRAPHIC "Stereographic" #define PROJ_WKT2_NAME_METHOD_TIMES "Times" #define PROJ_WKT2_NAME_METHOD_VAN_DER_GRINTEN "Van Der Grinten" #define PROJ_WKT2_NAME_METHOD_WAGNER_I "Wagner I" #define PROJ_WKT2_NAME_METHOD_WAGNER_II "Wagner II" #define PROJ_WKT2_NAME_METHOD_WAGNER_III "Wagner III" #define PROJ_WKT2_NAME_METHOD_WAGNER_IV "Wagner IV" #define PROJ_WKT2_NAME_METHOD_WAGNER_V "Wagner V" #define PROJ_WKT2_NAME_METHOD_WAGNER_VI "Wagner VI" #define PROJ_WKT2_NAME_METHOD_WAGNER_VII "Wagner VII" #define PROJ_WKT2_NAME_METHOD_QUADRILATERALIZED_SPHERICAL_CUBE \ "Quadrilateralized Spherical Cube" #define PROJ_WKT2_NAME_METHOD_S2 "S2" #define PROJ_WKT2_NAME_METHOD_SPHERICAL_CROSS_TRACK_HEIGHT \ "Spherical Cross-Track Height" #define EPSG_NAME_METHOD_EQUAL_EARTH "Equal Earth" #define EPSG_CODE_METHOD_EQUAL_EARTH 1078 #define EPSG_NAME_METHOD_LABORDE_OBLIQUE_MERCATOR "Laborde Oblique Mercator" #define EPSG_CODE_METHOD_LABORDE_OBLIQUE_MERCATOR 9813 #define EPSG_NAME_METHOD_VERTICAL_PERSPECTIVE "Vertical Perspective" #define EPSG_CODE_METHOD_VERTICAL_PERSPECTIVE 9838 #define PROJ_WKT2_NAME_METHOD_POLE_ROTATION_GRIB_CONVENTION \ "Pole rotation (GRIB convention)" #define PROJ_WKT2_NAME_METHOD_POLE_ROTATION_NETCDF_CF_CONVENTION \ "Pole rotation (netCDF CF convention)" #define EPSG_CODE_METHOD_COLOMBIA_URBAN 1052 #define EPSG_NAME_METHOD_COLOMBIA_URBAN "Colombia Urban" #define PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_SQUARE \ "Peirce Quincuncial (Square)" #define PROJ_WKT2_NAME_METHOD_PEIRCE_QUINCUNCIAL_DIAMOND \ "Peirce Quincuncial (Diamond)" /* ------------------------------------------------------------------------ */ /* Projection parameters */ #define EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS "Co-latitude of cone axis" #define EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS 1036 #define EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN \ "Latitude of natural origin" #define EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN 8801 #define EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN \ "Longitude of natural origin" #define EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN 8802 #define EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN \ "Scale factor at natural origin" #define EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN 8805 #define EPSG_NAME_PARAMETER_FALSE_EASTING "False easting" #define EPSG_CODE_PARAMETER_FALSE_EASTING 8806 #define EPSG_NAME_PARAMETER_FALSE_NORTHING "False northing" #define EPSG_CODE_PARAMETER_FALSE_NORTHING 8807 #define EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE \ "Latitude of projection centre" #define EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE 8811 #define EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE \ "Longitude of projection centre" #define EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE 8812 // Before EPSG 11.015 #define EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE "Azimuth of initial line" #define EPSG_CODE_PARAMETER_AZIMUTH_INITIAL_LINE 8813 // Since EPSG 11.015 #define EPSG_NAME_PARAMETER_AZIMUTH_PROJECTION_CENTRE \ "Azimuth at projection centre" #define EPSG_CODE_PARAMETER_AZIMUTH_PROJECTION_CENTRE 8813 #define EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID \ "Angle from Rectified to Skew Grid" #define EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID 8814 // Before EPSG 11.015 #define EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE \ "Scale factor on initial line" #define EPSG_CODE_PARAMETER_SCALE_FACTOR_INITIAL_LINE 8815 // Since EPSG 11.015 #define EPSG_NAME_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE \ "Scale factor at projection centre" #define EPSG_CODE_PARAMETER_SCALE_FACTOR_PROJECTION_CENTRE 8815 #define EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE \ "Easting at projection centre" #define EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE 8816 #define EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE \ "Northing at projection centre" #define EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE 8817 #define EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL \ "Latitude of pseudo standard parallel" #define EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL 8818 #define EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL \ "Scale factor on pseudo standard parallel" #define EPSG_CODE_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL 8819 #define EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN "Latitude of false origin" #define EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN 8821 #define EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN "Longitude of false origin" #define EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN 8822 #define EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL \ "Latitude of 1st standard parallel" #define EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL 8823 #define EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL \ "Latitude of 2nd standard parallel" #define EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL 8824 #define EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN "Easting at false origin" #define EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN 8826 #define EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN "Northing at false origin" #define EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN 8827 #define EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL \ "Latitude of standard parallel" #define EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL 8832 #define EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN "Longitude of origin" #define EPSG_CODE_PARAMETER_LONGITUDE_OF_ORIGIN 8833 #define EPSG_NAME_PARAMETER_ELLIPSOID_SCALE_FACTOR "Ellipsoid scaling factor" #define EPSG_CODE_PARAMETER_ELLIPSOID_SCALE_FACTOR 1038 #define EPSG_NAME_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN \ "Latitude of topocentric origin" #define EPSG_CODE_PARAMETER_LATITUDE_TOPOGRAPHIC_ORIGIN 8834 #define EPSG_NAME_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN \ "Longitude of topocentric origin" #define EPSG_CODE_PARAMETER_LONGITUDE_TOPOGRAPHIC_ORIGIN 8835 #define EPSG_NAME_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN \ "Ellipsoidal height of topocentric origin" #define EPSG_CODE_PARAMETER_ELLIPSOIDAL_HEIGHT_TOPOCENTRIC_ORIGIN 8836 #define EPSG_NAME_PARAMETER_VIEWPOINT_HEIGHT "Viewpoint height" #define EPSG_CODE_PARAMETER_VIEWPOINT_HEIGHT 8840 #define EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT \ "Projection plane origin height" #define EPSG_CODE_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT 1039 /* ------------------------------------------------------------------------ */ /* Other conversions and transformations */ #define EPSG_NAME_METHOD_COORDINATE_FRAME_GEOCENTRIC \ "Coordinate Frame rotation (geocentric domain)" #define EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC 1032 #define EPSG_NAME_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC \ "Coordinate Frame rotation full matrix (geocen)" #define EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOCENTRIC 1132 #define EPSG_NAME_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D \ "Coordinate Frame rotation (geog2D domain)" #define EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D 9607 #define EPSG_NAME_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D \ "Coordinate Frame rotation full matrix (geog2D)" #define EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_2D 1133 #define EPSG_NAME_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D \ "Coordinate Frame rotation full matrix (geog3D)" #define EPSG_CODE_METHOD_COORDINATE_FRAME_FULL_MATRIX_GEOGRAPHIC_3D 1140 #define EPSG_NAME_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D \ "Coordinate Frame rotation (geog3D domain)" #define EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D 1038 #define EPSG_NAME_METHOD_POSITION_VECTOR_GEOCENTRIC \ "Position Vector transformation (geocentric domain)" #define EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC 1033 #define EPSG_NAME_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D \ "Position Vector transformation (geog2D domain)" #define EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D 9606 #define EPSG_NAME_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D \ "Position Vector transformation (geog3D domain)" #define EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D 1037 #define EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC \ "Geocentric translations (geocentric domain)" #define EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC 1031 #define EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D \ "Geocentric translations (geog2D domain)" #define EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D 9603 #define EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D \ "Geocentric translations (geog3D domain)" #define EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D 1035 #define EPSG_NAME_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC \ "Time-dependent Position Vector tfm (geocentric)" #define EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC 1053 #define EPSG_NAME_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D \ "Time-dependent Position Vector tfm (geog2D)" #define EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D 1054 #define EPSG_NAME_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D \ "Time-dependent Position Vector tfm (geog3D)" #define EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D 1055 #define EPSG_NAME_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC \ "Time-dependent Coordinate Frame rotation geocen)" #define EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC 1056 #define EPSG_NAME_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D \ "Time-dependent Coordinate Frame rotation (geog2D)" #define EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D 1057 #define EPSG_NAME_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D \ "Time-dependent Coordinate Frame rotation (geog3D)" #define EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D 1058 #define EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_CF_GEOCENTRIC \ "Molodensky-Badekas (CF geocentric domain)" #define EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOCENTRIC 1034 #define EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_PV_GEOCENTRIC \ "Molodensky-Badekas (PV geocentric domain)" #define EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOCENTRIC 1061 #define EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_3D \ "Molodensky-Badekas (CF geog3D domain)" #define EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_3D 1039 #define EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_3D \ "Molodensky-Badekas (PV geog3D domain)" #define EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_3D 1062 #define EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_2D \ "Molodensky-Badekas (CF geog2D domain)" #define EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_CF_GEOGRAPHIC_2D 9636 #define EPSG_NAME_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D \ "Molodensky-Badekas (PV geog2D domain)" #define EPSG_CODE_METHOD_MOLODENSKY_BADEKAS_PV_GEOGRAPHIC_2D 1063 #define EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION 8605 #define EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION 8606 #define EPSG_CODE_PARAMETER_Z_AXIS_TRANSLATION 8607 #define EPSG_CODE_PARAMETER_X_AXIS_ROTATION 8608 #define EPSG_CODE_PARAMETER_Y_AXIS_ROTATION 8609 #define EPSG_CODE_PARAMETER_Z_AXIS_ROTATION 8610 #define EPSG_CODE_PARAMETER_SCALE_DIFFERENCE 8611 #define EPSG_CODE_PARAMETER_RATE_X_AXIS_TRANSLATION 1040 #define EPSG_CODE_PARAMETER_RATE_Y_AXIS_TRANSLATION 1041 #define EPSG_CODE_PARAMETER_RATE_Z_AXIS_TRANSLATION 1042 #define EPSG_CODE_PARAMETER_RATE_X_AXIS_ROTATION 1043 #define EPSG_CODE_PARAMETER_RATE_Y_AXIS_ROTATION 1044 #define EPSG_CODE_PARAMETER_RATE_Z_AXIS_ROTATION 1045 #define EPSG_CODE_PARAMETER_RATE_SCALE_DIFFERENCE 1046 #define EPSG_CODE_PARAMETER_REFERENCE_EPOCH 1047 #define EPSG_CODE_PARAMETER_TRANSFORMATION_REFERENCE_EPOCH 1049 #define EPSG_NAME_PARAMETER_X_AXIS_TRANSLATION "X-axis translation" #define EPSG_NAME_PARAMETER_Y_AXIS_TRANSLATION "Y-axis translation" #define EPSG_NAME_PARAMETER_Z_AXIS_TRANSLATION "Z-axis translation" #define EPSG_NAME_PARAMETER_X_AXIS_ROTATION "X-axis rotation" #define EPSG_NAME_PARAMETER_Y_AXIS_ROTATION "Y-axis rotation" #define EPSG_NAME_PARAMETER_Z_AXIS_ROTATION "Z-axis rotation" #define EPSG_NAME_PARAMETER_SCALE_DIFFERENCE "Scale difference" #define EPSG_NAME_PARAMETER_RATE_X_AXIS_TRANSLATION \ "Rate of change of X-axis translation" #define EPSG_NAME_PARAMETER_RATE_Y_AXIS_TRANSLATION \ "Rate of change of Y-axis translation" #define EPSG_NAME_PARAMETER_RATE_Z_AXIS_TRANSLATION \ "Rate of change of Z-axis translation" #define EPSG_NAME_PARAMETER_RATE_X_AXIS_ROTATION \ "Rate of change of X-axis rotation" #define EPSG_NAME_PARAMETER_RATE_Y_AXIS_ROTATION \ "Rate of change of Y-axis rotation" #define EPSG_NAME_PARAMETER_RATE_Z_AXIS_ROTATION \ "Rate of change of Z-axis rotation" #define EPSG_NAME_PARAMETER_RATE_SCALE_DIFFERENCE \ "Rate of change of Scale difference" #define EPSG_NAME_PARAMETER_REFERENCE_EPOCH "Parameter reference epoch" #define EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT 8617 #define EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT 8618 #define EPSG_CODE_PARAMETER_ORDINATE_3_EVAL_POINT 8667 #define EPSG_NAME_PARAMETER_ORDINATE_1_EVAL_POINT \ "Ordinate 1 of evaluation point" #define EPSG_NAME_PARAMETER_ORDINATE_2_EVAL_POINT \ "Ordinate 2 of evaluation point" #define EPSG_NAME_PARAMETER_ORDINATE_3_EVAL_POINT \ "Ordinate 3 of evaluation point" #define EPSG_NAME_PARAMETER_TRANSFORMATION_REFERENCE_EPOCH \ "Transformation reference epoch" #define EPSG_NAME_METHOD_MOLODENSKY "Molodensky" #define EPSG_CODE_METHOD_MOLODENSKY 9604 #define EPSG_NAME_METHOD_ABRIDGED_MOLODENSKY "Abridged Molodensky" #define EPSG_CODE_METHOD_ABRIDGED_MOLODENSKY 9605 #define EPSG_CODE_PARAMETER_SEMI_MAJOR_AXIS_DIFFERENCE 8654 #define EPSG_CODE_PARAMETER_FLATTENING_DIFFERENCE 8655 #define EPSG_NAME_PARAMETER_SEMI_MAJOR_AXIS_DIFFERENCE \ "Semi-major axis length difference" #define EPSG_NAME_PARAMETER_FLATTENING_DIFFERENCE "Flattening difference" #define PROJ_WKT2_NAME_PARAMETER_SOUTH_POLE_LATITUDE_GRIB_CONVENTION \ "Latitude of the southern pole (GRIB convention)" #define PROJ_WKT2_NAME_PARAMETER_SOUTH_POLE_LONGITUDE_GRIB_CONVENTION \ "Longitude of the southern pole (GRIB convention)" #define PROJ_WKT2_NAME_PARAMETER_AXIS_ROTATION_GRIB_CONVENTION \ "Axis rotation (GRIB convention)" #define PROJ_WKT2_NAME_PARAMETER_GRID_NORTH_POLE_LATITUDE_NETCDF_CONVENTION \ "Grid north pole latitude (netCDF CF convention)" #define PROJ_WKT2_NAME_PARAMETER_GRID_NORTH_POLE_LONGITUDE_NETCDF_CONVENTION \ "Grid north pole longitude (netCDF CF convention)" #define PROJ_WKT2_NAME_PARAMETER_NORTH_POLE_GRID_LONGITUDE_NETCDF_CONVENTION \ "North pole grid longitude (netCDF CF convention)" /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_NTV1 9614 #define EPSG_NAME_METHOD_NTV1 "NTv1" #define EPSG_CODE_METHOD_NTV2 9615 #define EPSG_NAME_METHOD_NTV2 "NTv2" #define EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE 8656 #define EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE \ "Latitude and longitude difference file" #define EPSG_NAME_PARAMETER_GEOID_CORRECTION_FILENAME \ "Geoid (height correction) model file" #define EPSG_CODE_PARAMETER_GEOID_CORRECTION_FILENAME 8666 #define EPSG_NAME_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN \ "Geocentric translation by Grid Interpolation (IGN)" #define EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_BY_GRID_INTERPOLATION_IGN 1087 #define EPSG_CODE_PARAMETER_GEOCENTRIC_TRANSLATION_FILE 8727 #define EPSG_NAME_PARAMETER_GEOCENTRIC_TRANSLATION_FILE \ "Geocentric translation file" #define EPSG_NAME_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS \ "EPSG code for Interpolation CRS" #define EPSG_CODE_PARAMETER_EPSG_CODE_FOR_INTERPOLATION_CRS 1048 /* ------------------------------------------------------------------------ */ #define EPSG_NAME_METHOD_POINT_MOTION_BY_GRID_CANADA_NTV2_VEL \ "Point motion by grid (Canada NTv2_Vel)" #define EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NTV2_VEL 1070 #define EPSG_NAME_METHOD_POINT_MOTION_BY_GRID_CANADA_NEU_DOMAIN_NTV2_VEL \ "Point motion by grid (NEU domain) (NTv2_Vel)" #define EPSG_CODE_METHOD_POINT_MOTION_BY_GRID_CANADA_NEU_DOMAIN_NTV2_VEL 1141 #define EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE 1050 #define EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE \ "Point motion velocity grid file" /* ------------------------------------------------------------------------ */ #define EPSG_NAME_METHOD_NEW_ZEALAND_DEFORMATION_MODEL \ "New Zealand Deformation Model" #define EPSG_CODE_METHOD_NEW_ZEALAND_DEFORMATION_MODEL 1079 /* ------------------------------------------------------------------------ */ /* Has been renamed to * EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL */ #define EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN \ "Geographic3D Offset by velocity grid (NRCan byn)" #define EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN 1114 #define EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL \ "Geographic3D Offset by velocity grid (NTv2_Vel)" #define EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL 1114 /* ------------------------------------------------------------------------ */ #define EPSG_NAME_METHOD_VERTICAL_OFFSET_BY_VELOCITY_GRID_NRCAN \ "Vertical Offset by velocity grid (NRCan NTv2_Vel)" #define EPSG_CODE_METHOD_VERTICAL_OFFSET_BY_VELOCITY_GRID_NRCAN 1113 /* ------------------------------------------------------------------------ */ #define EPSG_NAME_METHOD_GEOGRAPHIC3D_TO_GRAVITYRELATEDHEIGHT \ "Geographic3D to GravityRelatedHeight" #define EPSG_CODE_METHOD_GEOGRAPHIC3D_TO_GRAVITYRELATEDHEIGHT 1136 #define EPSG_NAME_METHOD_GEOGRAPHIC3D_TO_GEOG2D_GRAVITYRELATEDHEIGHT \ "Geog3D to Geog2D+GravityRelatedHeight" #define EPSG_CODE_METHOD_GEOGRAPHIC3D_TO_GEOG2D_GRAVITYRELATEDHEIGHT 1131 /* ------------------------------------------------------------------------ */ #define PROJ_WKT2_NAME_METHOD_HEIGHT_TO_GEOG3D \ "GravityRelatedHeight to Geographic3D" #define PROJ_WKT2_NAME_METHOD_CTABLE2 "CTABLE2" #define PROJ_WKT2_NAME_METHOD_HORIZONTAL_SHIFT_GTIFF "HORIZONTAL_SHIFT_GTIFF" #define PROJ_WKT2_NAME_METHOD_GENERAL_SHIFT_GTIFF "GENERAL_SHIFT_GTIFF" #define PROJ_WKT2_PARAMETER_LATITUDE_LONGITUDE_ELLIPOISDAL_HEIGHT_DIFFERENCE_FILE \ "Latitude, longitude and ellipsoidal height difference file" /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_VERTCON 9658 #define EPSG_NAME_METHOD_VERTCON_OLDNAME "VERTCON" #define EPSG_NAME_METHOD_VERTCON \ "Vertical Offset by Grid Interpolation (VERTCON)" #define EPSG_CODE_METHOD_VERTICALGRID_NZLVD 1071 #define EPSG_NAME_METHOD_VERTICALGRID_NZLVD \ "Vertical Offset by Grid Interpolation (NZLVD)" #define EPSG_CODE_METHOD_VERTICALGRID_BEV_AT 1080 #define EPSG_NAME_METHOD_VERTICALGRID_BEV_AT \ "Vertical Offset by Grid Interpolation (BEV AT)" #define EPSG_CODE_METHOD_VERTICALGRID_GTX 1084 #define EPSG_NAME_METHOD_VERTICALGRID_GTX \ "Vertical Offset by Grid Interpolation (gtx)" #define EPSG_CODE_METHOD_VERTICALGRID_ASC 1085 #define EPSG_NAME_METHOD_VERTICALGRID_ASC \ "Vertical Offset by Grid Interpolation (asc)" #define EPSG_CODE_METHOD_VERTICALGRID_GTG 1129 #define EPSG_NAME_METHOD_VERTICALGRID_GTG \ "Vertical Offset by Grid Interpolation (gtg)" #define EPSG_CODE_METHOD_VERTICALGRID_PL_TXT 1101 #define EPSG_NAME_METHOD_VERTICALGRID_PL_TXT \ "Vertical Offset by Grid Interpolation (PL txt)" /* has been deprecated by * EPSG_CODE_METHOD_VERTICALCHANGE_BY_GEOID_GRID_DIFFERENCE_NRCAN */ #define EPSG_CODE_METHOD_VERTICALGRID_NRCAN_BYN 1112 #define EPSG_NAME_METHOD_VERTICALGRID_NRCAN_BYN \ "Vertical Offset by Grid Interpolation (NRCan byn)" #define EPSG_NAME_PARAMETER_VERTICAL_OFFSET_FILE "Vertical offset file" #define EPSG_CODE_PARAMETER_VERTICAL_OFFSET_FILE 8732 #define EPSG_CODE_METHOD_VERTICALCHANGE_BY_GEOID_GRID_DIFFERENCE_NRCAN 1126 #define EPSG_NAME_METHOD_VERTICALCHANGE_BY_GEOID_GRID_DIFFERENCE_NRCAN \ "Vertical change by geoid grid difference (NRCan)" #define EPSG_NAME_PARAMETER_GEOID_MODEL_DIFFERENCE_FILE \ "Geoid model difference file" #define EPSG_CODE_PARAMETER_GEOID_MODEL_DIFFERENCE_FILE 1063 /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_NADCON 9613 #define EPSG_NAME_METHOD_NADCON "NADCON" #define EPSG_NAME_PARAMETER_LATITUDE_DIFFERENCE_FILE "Latitude difference file" #define EPSG_CODE_PARAMETER_LATITUDE_DIFFERENCE_FILE 8657 #define EPSG_NAME_PARAMETER_LONGITUDE_DIFFERENCE_FILE \ "Longitude difference file" #define EPSG_CODE_PARAMETER_LONGITUDE_DIFFERENCE_FILE 8658 #define EPSG_CODE_METHOD_NADCON5_2D 1074 #define EPSG_NAME_METHOD_NADCON5_2D "NADCON5 (2D)" #define EPSG_NAME_PARAMETER_ELLIPSOIDAL_HEIGHT_DIFFERENCE_FILE \ "Ellipsoidal height difference file" #define EPSG_CODE_PARAMETER_ELLIPSOIDAL_HEIGHT_DIFFERENCE_FILE 1058 #define EPSG_CODE_METHOD_NADCON5_3D 1075 #define EPSG_NAME_METHOD_NADCON5_3D "NADCON5 (3D)" /* ------------------------------------------------------------------------ */ /* TIN-based transformations */ #define EPSG_NAME_METHOD_VERTICAL_OFFSET_BY_TIN_INTERPOLATION_JSON \ "Vertical Offset by TIN Interpolation (JSON)" #define EPSG_CODE_METHOD_VERTICAL_OFFSET_BY_TIN_INTERPOLATION_JSON 1137 #define EPSG_NAME_METHOD_CARTESIAN_GRID_OFFSETS_BY_TIN_INTERPOLATION_JSON \ "Cartesian Grid Offsets by TIN Interpolation (JSON)" #define EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS_BY_TIN_INTERPOLATION_JSON 1138 #define EPSG_NAME_PARAMETER_TIN_OFFSET_FILE "TIN offset file" #define EPSG_CODE_PARAMETER_TIN_OFFSET_FILE 1064 /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT 1069 #define EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT "Change of Vertical Unit" #define EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR 1104 #define EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR \ "Change of Vertical Unit" #define EPSG_NAME_PARAMETER_UNIT_CONVERSION_SCALAR "Unit conversion scalar" #define EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR 1051 /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_LONGITUDE_ROTATION 9601 #define EPSG_NAME_METHOD_LONGITUDE_ROTATION "Longitude rotation" #define EPSG_CODE_METHOD_VERTICAL_OFFSET 9616 #define EPSG_NAME_METHOD_VERTICAL_OFFSET "Vertical Offset" #define EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE 1046 #define EPSG_NAME_METHOD_VERTICAL_OFFSET_AND_SLOPE "Vertical Offset and Slope" #define EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS 9619 #define EPSG_NAME_METHOD_GEOGRAPHIC2D_OFFSETS "Geographic2D offsets" #define EPSG_CODE_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS 9618 #define EPSG_NAME_METHOD_GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS \ "Geographic2D with Height Offsets" #define EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS 9660 #define EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSETS "Geographic3D offsets" #define EPSG_CODE_METHOD_GEOGRAPHIC_GEOCENTRIC 9602 #define EPSG_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC \ "Geographic/geocentric conversions" #define EPSG_NAME_PARAMETER_LATITUDE_OFFSET "Latitude offset" #define EPSG_CODE_PARAMETER_LATITUDE_OFFSET 8601 #define EPSG_NAME_PARAMETER_LONGITUDE_OFFSET "Longitude offset" #define EPSG_CODE_PARAMETER_LONGITUDE_OFFSET 8602 #define EPSG_NAME_PARAMETER_VERTICAL_OFFSET "Vertical Offset" #define EPSG_CODE_PARAMETER_VERTICAL_OFFSET 8603 #define EPSG_NAME_PARAMETER_GEOID_HEIGHT "Geoid height" #define EPSG_CODE_PARAMETER_GEOID_HEIGHT 8604 /* Geoid undulation is the name before EPSG v11.023 */ #define EPSG_NAME_PARAMETER_GEOID_UNDULATION "Geoid undulation" #define EPSG_CODE_PARAMETER_GEOID_UNDULATION 8604 #define EPSG_NAME_PARAMETER_INCLINATION_IN_LATITUDE "Inclination in latitude" #define EPSG_CODE_PARAMETER_INCLINATION_IN_LATITUDE 8730 #define EPSG_NAME_PARAMETER_INCLINATION_IN_LONGITUDE "Inclination in longitude" #define EPSG_CODE_PARAMETER_INCLINATION_IN_LONGITUDE 8731 #define EPSG_NAME_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS \ "EPSG code for Horizontal CRS" #define EPSG_CODE_PARAMETER_EPSG_CODE_FOR_HORIZONTAL_CRS 1037 /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_AFFINE_PARAMETRIC_TRANSFORMATION 9624 #define EPSG_NAME_METHOD_AFFINE_PARAMETRIC_TRANSFORMATION \ "Affine parametric transformation" #define EPSG_NAME_PARAMETER_A0 "A0" #define EPSG_CODE_PARAMETER_A0 8623 #define EPSG_NAME_PARAMETER_A1 "A1" #define EPSG_CODE_PARAMETER_A1 8624 #define EPSG_NAME_PARAMETER_A2 "A2" #define EPSG_CODE_PARAMETER_A2 8625 #define EPSG_NAME_PARAMETER_B0 "B0" #define EPSG_CODE_PARAMETER_B0 8639 #define EPSG_NAME_PARAMETER_B1 "B1" #define EPSG_CODE_PARAMETER_B1 8640 #define EPSG_NAME_PARAMETER_B2 "B2" #define EPSG_CODE_PARAMETER_B2 8641 /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_SIMILARITY_TRANSFORMATION 9621 #define EPSG_NAME_METHOD_SIMILARITY_TRANSFORMATION "Similarity transformation" #define EPSG_NAME_PARAMETER_ORDINATE_1_EVAL_POINT_TARGET_CRS \ "Ordinate 1 of evaluation point in target CRS" #define EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT_TARGET_CRS 8621 #define EPSG_NAME_PARAMETER_ORDINATE_2_EVAL_POINT_TARGET_CRS \ "Ordinate 2 of evaluation point in target CRS" #define EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT_TARGET_CRS 8622 #define EPSG_NAME_PARAMETER_SCALE_FACTOR_FOR_SOURCE_CRS_AXES \ "Scale factor for source CRS axes" #define EPSG_CODE_PARAMETER_SCALE_FACTOR_FOR_SOURCE_CRS_AXES 1061 #define EPSG_NAME_PARAMETER_ROTATION_ANGLE_OF_SOURCE_CRS_AXES \ "Rotation angle of source CRS axes" #define EPSG_CODE_PARAMETER_ROTATION_ANGLE_OF_SOURCE_CRS_AXES 8614 /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_2D 9843 #define EPSG_NAME_METHOD_AXIS_ORDER_REVERSAL_2D "Axis Order Reversal (2D)" #define EPSG_CODE_METHOD_AXIS_ORDER_REVERSAL_3D 9844 #define EPSG_NAME_METHOD_AXIS_ORDER_REVERSAL_3D \ "Axis Order Reversal (Geographic3D horizontal)" /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL 1068 #define EPSG_NAME_METHOD_HEIGHT_DEPTH_REVERSAL "Height Depth Reversal" /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS 9656 #define EPSG_NAME_METHOD_CARTESIAN_GRID_OFFSETS "Cartesian Grid Offsets" #define EPSG_CODE_PARAMETER_EASTING_OFFSET 8728 #define EPSG_NAME_PARAMETER_EASTING_OFFSET "Easting offset" #define EPSG_CODE_PARAMETER_NORTHING_OFFSET 8729 #define EPSG_NAME_PARAMETER_NORTHING_OFFSET "Northing offset" /* ------------------------------------------------------------------------ */ #define EPSG_NAME_METHOD_GEOCENTRIC_TOPOCENTRIC \ "Geocentric/topocentric conversions" #define EPSG_CODE_METHOD_GEOCENTRIC_TOPOCENTRIC 9836 #define EPSG_NAME_PARAMETER_GEOCENTRIC_X_TOPOCENTRIC_ORIGIN \ "Geocentric X of topocentric origin" #define EPSG_CODE_PARAMETER_GEOCENTRIC_X_TOPOCENTRIC_ORIGIN 8837 #define EPSG_NAME_PARAMETER_GEOCENTRIC_Y_TOPOCENTRIC_ORIGIN \ "Geocentric Y of topocentric origin" #define EPSG_CODE_PARAMETER_GEOCENTRIC_Y_TOPOCENTRIC_ORIGIN 8838 #define EPSG_NAME_PARAMETER_GEOCENTRIC_Z_TOPOCENTRIC_ORIGIN \ "Geocentric Z of topocentric origin" #define EPSG_CODE_PARAMETER_GEOCENTRIC_Z_TOPOCENTRIC_ORIGIN 8839 /* ------------------------------------------------------------------------ */ #define EPSG_NAME_METHOD_GEOGRAPHIC_TOPOCENTRIC \ "Geographic/topocentric conversions" #define EPSG_CODE_METHOD_GEOGRAPHIC_TOPOCENTRIC 9837 /* ------------------------------------------------------------------------ */ #define PROJ_WKT2_NAME_METHOD_GEOGRAPHIC_GEOCENTRIC_LATITUDE \ "Geographic latitude / Geocentric latitude" #endif /* PROJ_CONSTANTS_INCLUDED */ proj-9.6.0/src/proj_experimental.h000664 001754 001755 00000003546 14764566077 017120 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Experimental C API * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef PROJ_EXPERIMENTAL_H #define PROJ_EXPERIMENTAL_H #ifdef __cplusplus extern "C" { #endif #include "proj.h" /** * \file proj_experimental.h * * Experimental C API (none currently) * * \warning * This API has been considered now to be experimental, and may change or * be removed in the future. */ #ifdef __cplusplus } #endif #endif /* ndef PROJ_EXPERIMENTAL_H */ proj-9.6.0/src/proj_internal.h000664 001754 001755 00000114257 14764566077 016241 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ.4 * Purpose: Internal plumbing for the PROJ.4 library. * * Author: Thomas Knudsen, * ****************************************************************************** * Copyright (c) 2016, 2017, Thomas Knudsen / SDFE * * 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 COORD 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. *****************************************************************************/ #ifndef PROJ_INTERNAL_H #define PROJ_INTERNAL_H #ifndef __cplusplus #error "proj_internal.h can only be included from a C++ file" #endif #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 /* enable predefined math constants M_* for MS Visual Studio */ #if defined(_MSC_VER) || defined(_WIN32) #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif // Use "PROJ_FALLTHROUGH;" to annotate deliberate fall-through in switches, // use it analogously to "break;". The trailing semi-colon is required. #if !defined(PROJ_FALLTHROUGH) && defined(__has_cpp_attribute) #if __cplusplus >= 201703L && __has_cpp_attribute(fallthrough) #define PROJ_FALLTHROUGH [[fallthrough]] #elif __cplusplus >= 201103L && __has_cpp_attribute(gnu::fallthrough) #define PROJ_FALLTHROUGH [[gnu::fallthrough]] #elif __cplusplus >= 201103L && __has_cpp_attribute(clang::fallthrough) #define PROJ_FALLTHROUGH [[clang::fallthrough]] #endif #endif #ifndef PROJ_FALLTHROUGH #define PROJ_FALLTHROUGH ((void)0) #endif /* standard inclusions */ #include #include #include #include #include #include #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include #include #include #include "proj.h" #ifdef PROJ_RENAME_SYMBOLS #include "proj_symbol_rename.h" #endif #define STATIC_ASSERT(COND) ((void)sizeof(char[(COND) ? 1 : -1])) #ifndef PJ_TODEG #define PJ_TODEG(rad) ((rad)*180.0 / M_PI) #endif #ifndef PJ_TORAD #define PJ_TORAD(deg) ((deg)*M_PI / 180.0) #endif /* Maximum latitudinal overshoot accepted */ #define PJ_EPS_LAT 1e-12 #define C_NAMESPACE extern "C" #define C_NAMESPACE_VAR extern "C" #ifndef NULL #define NULL 0 #endif #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #ifndef MAX #define MIN(a, b) ((a < b) ? a : b) #define MAX(a, b) ((a > b) ? 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 /* 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.14159265358979323846 #endif #ifndef M_1_PI #define M_1_PI 0.318309886183790671538 #endif #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923 #endif #ifndef M_PI_4 #define M_PI_4 0.78539816339744830962 #endif #ifndef M_2_PI #define M_2_PI 0.63661977236758134308 #endif /* M_SQRT2 might be missing */ #ifndef M_SQRT2 #define M_SQRT2 1.41421356237309504880 #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 */ #ifndef M_TWOPI #define M_TWOPI 6.28318530717958647693 /* 2*pi */ #endif #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) #define WIN32 #endif #if defined(_WINDOWS) && !defined(WIN32) #define WIN32 #endif /* directory delimiter for DOS support */ #ifdef WIN32 #define DIR_CHAR '\\' #else #define DIR_CHAR '/' #endif enum pj_io_units { PJ_IO_UNITS_WHATEVER = 0, /* Doesn't matter (or depends on pipeline neighbours) */ PJ_IO_UNITS_CLASSIC = 1, /* Scaled meters (right), projected system */ PJ_IO_UNITS_PROJECTED = 2, /* Meters, projected system */ PJ_IO_UNITS_CARTESIAN = 3, /* Meters, 3D cartesian system */ PJ_IO_UNITS_RADIANS = 4, /* Radians */ PJ_IO_UNITS_DEGREES = 5, /* Degrees */ }; enum pj_io_units pj_left(PJ *P); enum pj_io_units pj_right(PJ *P); PJ_COORD PROJ_DLL proj_coord_error(void); void proj_context_errno_set(PJ_CONTEXT *ctx, int err); void PROJ_DLL proj_context_set(PJ *P, PJ_CONTEXT *ctx); void proj_context_inherit(PJ *parent, PJ *child); struct projCppContext; /* not sure why we need to export it, but mingw needs it */ void PROJ_DLL proj_context_delete_cpp_context(struct projCppContext *cppContext); bool pj_fwd4d(PJ_COORD &coo, PJ *P); bool pj_inv4d(PJ_COORD &coo, PJ *P); PJ_COORD PROJ_DLL pj_approx_2D_trans(PJ *P, PJ_DIRECTION direction, PJ_COORD coo); PJ_COORD PROJ_DLL pj_approx_3D_trans(PJ *P, PJ_DIRECTION direction, PJ_COORD coo); /* Provision for gettext translatable strings */ #define _(str) (str) void PROJ_DLL proj_log_error(const PJ *P, const char *fmt, ...); void proj_log_debug(PJ *P, const char *fmt, ...); void proj_log_trace(PJ *P, const char *fmt, ...); void proj_context_log_debug(PJ_CONTEXT *ctx, const char *fmt, ...); int pj_ellipsoid(PJ *); void pj_inherit_ellipsoid_def(const PJ *src, PJ *dst); int pj_calc_ellipsoid_params(PJ *P, double a, double es); /* Geographical to geocentric latitude - another of the "simple, but useful" */ PJ_COORD pj_geocentric_latitude(const PJ *P, PJ_DIRECTION direction, PJ_COORD coord); char PROJ_DLL *pj_chomp(char *c); char PROJ_DLL *pj_shrink(char *c); size_t pj_trim_argc(char *args); char **pj_trim_argv(size_t argc, char *args); char *pj_make_args(size_t argc, char **argv); typedef struct { double r, i; } COMPLEX; /* Forward declarations and typedefs for stuff needed inside the PJ object */ struct PJconsts; union PJ_COORD; struct geod_geodesic; struct ARG_list; struct PJ_REGION_S; typedef struct PJ_REGION_S PJ_Region; typedef struct ARG_list paralist; /* parameter list */ #ifndef PROJ_H typedef struct PJconsts PJ; /* the PJ object herself */ typedef union PJ_COORD PJ_COORD; #endif struct PJ_REGION_S { double ll_long; /* lower left corner coordinates (radians) */ double ll_lat; double ur_long; /* upper right corner coordinates (radians) */ double ur_lat; }; struct PJ_AREA { bool bbox_set = false; double west_lon_degree = 0; double south_lat_degree = 0; double east_lon_degree = 0; double north_lat_degree = 0; std::string name{}; }; /***************************************************************************** Some function types that are especially useful when working with PJs ****************************************************************************** PJ_CONSTRUCTOR: A function taking a pointer-to-PJ as arg, and returning a pointer-to-PJ. Historically called twice: First with a 0 argument, to allocate memory, second with the first return value as argument, for actual setup. PJ_DESTRUCTOR: A function taking a pointer-to-PJ and an integer as args, then first handling the deallocation of the PJ, afterwards handing the integer over to the error reporting subsystem, and finally returning a null pointer in support of the "return free (P)" (aka "get the hell out of here") idiom. PJ_OPERATOR: A function taking a reference to a PJ_COORD and a pointer-to-PJ as args, applying the PJ to the PJ_COORD, and modifying in-place the passed PJ_COORD. *****************************************************************************/ typedef PJ *(*PJ_CONSTRUCTOR)(PJ *); typedef PJ *(*PJ_DESTRUCTOR)(PJ *, int); typedef void (*PJ_OPERATOR)(PJ_COORD &, PJ *); /****************************************************************************/ /* 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 equivalent) */ struct PJCoordOperation { public: int idxInOriginalList; // [min|max][x|y]Src define the bounding box of the area of validity of // the transformation, expressed in the source CRS. Except if the source // CRS is a geocentric one, in which case the bounding box is defined in // a geographic lon,lat CRS (pjSrcGeocentricToLonLat will have to be used // on input coordinates in the forward direction) double minxSrc = 0.0; double minySrc = 0.0; double maxxSrc = 0.0; double maxySrc = 0.0; // [min|max][x|y]Dst define the bounding box of the area of validity of // the transformation, expressed in the target CRS. Except if the target // CRS is a geocentric one, in which case the bounding box is defined in // a geographic lon,lat CRS (pjDstGeocentricToLonLat will have to be used // on input coordinates in the inverse direction) double minxDst = 0.0; double minyDst = 0.0; double maxxDst = 0.0; double maxyDst = 0.0; PJ *pj = nullptr; std::string name{}; double accuracy = -1.0; double pseudoArea = 0.0; std::string areaName{}; bool isOffshore = false; bool isUnknownAreaName = false; bool isPriorityOp = false; bool srcIsLonLatDegree = false; bool srcIsLatLonDegree = false; bool dstIsLonLatDegree = false; bool dstIsLatLonDegree = false; // pjSrcGeocentricToLonLat is defined if the source CRS of pj is geocentric // and in that case it transforms from those geocentric coordinates to // geographic ones in lon, lat order PJ *pjSrcGeocentricToLonLat = nullptr; // pjDstGeocentricToLonLat is defined if the target CRS of pj is geocentric // and in that case it transforms from those geocentric coordinates to // geographic ones in lon, lat order PJ *pjDstGeocentricToLonLat = nullptr; PJCoordOperation(int idxInOriginalListIn, double minxSrcIn, double minySrcIn, double maxxSrcIn, double maxySrcIn, double minxDstIn, double minyDstIn, double maxxDstIn, double maxyDstIn, PJ *pjIn, const std::string &nameIn, double accuracyIn, double pseudoAreaIn, const char *areaName, const PJ *pjSrcGeocentricToLonLatIn, const PJ *pjDstGeocentricToLonLatIn); PJCoordOperation(const PJCoordOperation &) = delete; PJCoordOperation(PJ_CONTEXT *ctx, const PJCoordOperation &other) : idxInOriginalList(other.idxInOriginalList), minxSrc(other.minxSrc), minySrc(other.minySrc), maxxSrc(other.maxxSrc), maxySrc(other.maxySrc), minxDst(other.minxDst), minyDst(other.minyDst), maxxDst(other.maxxDst), maxyDst(other.maxyDst), pj(proj_clone(ctx, other.pj)), name(std::move(other.name)), accuracy(other.accuracy), pseudoArea(other.pseudoArea), areaName(other.areaName), isOffshore(other.isOffshore), isUnknownAreaName(other.isUnknownAreaName), isPriorityOp(other.isPriorityOp), srcIsLonLatDegree(other.srcIsLonLatDegree), srcIsLatLonDegree(other.srcIsLatLonDegree), dstIsLonLatDegree(other.dstIsLonLatDegree), dstIsLatLonDegree(other.dstIsLatLonDegree), pjSrcGeocentricToLonLat( other.pjSrcGeocentricToLonLat ? proj_clone(ctx, other.pjSrcGeocentricToLonLat) : nullptr), pjDstGeocentricToLonLat( other.pjDstGeocentricToLonLat ? proj_clone(ctx, other.pjDstGeocentricToLonLat) : nullptr) {} PJCoordOperation(PJCoordOperation &&other) : idxInOriginalList(other.idxInOriginalList), minxSrc(other.minxSrc), minySrc(other.minySrc), maxxSrc(other.maxxSrc), maxySrc(other.maxySrc), minxDst(other.minxDst), minyDst(other.minyDst), maxxDst(other.maxxDst), maxyDst(other.maxyDst), name(std::move(other.name)), accuracy(other.accuracy), pseudoArea(other.pseudoArea), areaName(std::move(other.areaName)), isOffshore(other.isOffshore), isUnknownAreaName(other.isUnknownAreaName), isPriorityOp(other.isPriorityOp), srcIsLonLatDegree(other.srcIsLonLatDegree), srcIsLatLonDegree(other.srcIsLatLonDegree), dstIsLonLatDegree(other.dstIsLonLatDegree), dstIsLatLonDegree(other.dstIsLatLonDegree) { pj = other.pj; other.pj = nullptr; pjSrcGeocentricToLonLat = other.pjSrcGeocentricToLonLat; other.pjSrcGeocentricToLonLat = nullptr; pjDstGeocentricToLonLat = other.pjDstGeocentricToLonLat; other.pjDstGeocentricToLonLat = nullptr; } PJCoordOperation &operator=(const PJCoordOperation &) = delete; bool operator==(const PJCoordOperation &other) const { return idxInOriginalList == other.idxInOriginalList && minxSrc == other.minxSrc && minySrc == other.minySrc && maxxSrc == other.maxxSrc && maxySrc == other.maxySrc && minxDst == other.minxDst && minyDst == other.minyDst && maxxDst == other.maxxDst && maxyDst == other.maxyDst && name == other.name && proj_is_equivalent_to(pj, other.pj, PJ_COMP_STRICT) && accuracy == other.accuracy && areaName == other.areaName; } bool operator!=(const PJCoordOperation &other) const { return !(operator==(other)); } ~PJCoordOperation(); bool isInstantiable() const; private: static constexpr int INSTANTIABLE_STATUS_UNKNOWN = -1; // must be different from 0(=false) and 1(=true) mutable int isInstantiableCached = INSTANTIABLE_STATUS_UNKNOWN; }; enum class TMercAlgo { AUTO, // Poder/Engsager if far from central meridian, otherwise // Evenden/Snyder EVENDEN_SNYDER, PODER_ENGSAGER, }; /* base projection data structure */ struct PJconsts { /************************************************************************************* G E N E R A L P A R A M E T E R S T R U C T ************************************************************************************** TODO: Need some description here - especially about the thread context... This is the struct behind the PJ typedef **************************************************************************************/ PJ_CONTEXT *ctx = nullptr; const char *short_name = nullptr; /* From pj_list.h */ const char *descr = nullptr; /* From pj_list.h or individual PJ_*.c file */ paralist *params = nullptr; /* Parameter list */ char *def_full = nullptr; /* Full textual definition (usually 0 - set by proj_pj_info) */ PJconsts *parent = nullptr; /* Parent PJ of pipeline steps - nullptr if not a pipeline step */ /* For debugging / logging purposes */ char *def_size = nullptr; /* Shape and size parameters extracted from params */ char *def_shape = nullptr; char *def_spherification = nullptr; char *def_ellps = nullptr; struct geod_geodesic *geod = nullptr; /* For geodesic computations */ void *opaque = nullptr; /* Projection specific parameters, Defined in PJ_*.c */ int inverted = 0; /* Tell high level API functions to swap inv/fwd */ /************************************************************************************* F U N C T I O N P O I N T E R S ************************************************************************************** For projection xxx, these are pointers to functions in the corresponding PJ_xxx.c file. pj_init() delegates the setup of these to pj_projection_specific_setup_xxx(), a name which is currently hidden behind the magic curtain of the PROJECTION macro. **************************************************************************************/ PJ_XY (*fwd)(PJ_LP, PJ *) = nullptr; PJ_LP (*inv)(PJ_XY, PJ *) = nullptr; PJ_XYZ (*fwd3d)(PJ_LPZ, PJ *) = nullptr; PJ_LPZ (*inv3d)(PJ_XYZ, PJ *) = nullptr; PJ_OPERATOR fwd4d = nullptr; PJ_OPERATOR inv4d = nullptr; PJ_DESTRUCTOR destructor = nullptr; void (*reassign_context)(PJ *, PJ_CONTEXT *) = nullptr; /************************************************************************************* E L L I P S O I D P A R A M E T E R S ************************************************************************************** Despite YAGNI, we add a large number of ellipsoidal shape parameters, which are not yet set up in pj_init. They are, however, inexpensive to compute, compared to the overall time taken for setting up the complex PJ object (cf. e.g. https://en.wikipedia.org/wiki/Angular_eccentricity). But during single point projections it will often be a useful thing to have these readily available without having to recompute at every pj_fwd / pj_inv call. With this wide selection, we should be ready for quite a number of geodetic algorithms, without having to incur further ABI breakage. **************************************************************************************/ /* The linear parameters */ double a = 0.0; /* semimajor axis (radius if eccentricity==0) */ double b = 0.0; /* semiminor axis */ double ra = 0.0; /* 1/a */ double rb = 0.0; /* 1/b */ /* The eccentricities */ double alpha = 0.0; /* angular eccentricity */ double e = 0.0; /* first eccentricity */ double es = 0.0; /* first eccentricity squared */ double e2 = 0.0; /* second eccentricity */ double e2s = 0.0; /* second eccentricity squared */ double e3 = 0.0; /* third eccentricity */ double e3s = 0.0; /* third eccentricity squared */ double one_es = 0.0; /* 1 - e^2 */ double rone_es = 0.0; /* 1/one_es */ /* The flattenings */ double f = 0.0; /* first flattening */ double f2 = 0.0; /* second flattening */ double n = 0.0; /* third flattening */ double rf = 0.0; /* 1/f */ double rf2 = 0.0; /* 1/f2 */ double rn = 0.0; /* 1/n */ /* This one's for GRS80 */ double J = 0.0; /* "Dynamic form factor" */ double es_orig = 0.0; /* es and a before any +proj related adjustment */ double a_orig = 0.0; /************************************************************************************* C O O R D I N A T E H A N D L I N G **************************************************************************************/ int over = 0; /* Over-range flag */ int geoc = 0; /* Geocentric latitude flag */ int is_latlong = 0; /* proj=latlong ... not really a projection at all */ int is_geocent = 0; /* proj=geocent ... not really a projection at all */ int need_ellps = 0; /* 0 for operations that are purely cartesian */ int skip_fwd_prepare = 0; int skip_fwd_finalize = 0; int skip_inv_prepare = 0; int skip_inv_finalize = 0; enum pj_io_units left = PJ_IO_UNITS_WHATEVER; /* Flags for input/output coordinate types */ enum pj_io_units right = PJ_IO_UNITS_WHATEVER; /* These PJs are used for implementing cs2cs style coordinate handling in * the 4D API */ PJ *axisswap = nullptr; PJ *cart = nullptr; PJ *cart_wgs84 = nullptr; PJ *helmert = nullptr; PJ *hgridshift = nullptr; PJ *vgridshift = nullptr; /************************************************************************************* C A R T O G R A P H I C O F F S E T S **************************************************************************************/ double lam0 = 0.0; /* central meridian */ double phi0 = 0.0; /* central parallel */ double x0 = 0.0; /* false easting */ double y0 = 0.0; /* false northing */ double z0 = 0.0; /* height origin */ double t0 = 0.0; /* time origin */ /************************************************************************************* S C A L I N G **************************************************************************************/ double k0 = 0.0; /* General scaling factor - e.g. the 0.9996 of UTM */ double to_meter = 0.0, fr_meter = 0.0; /* Plane coordinate scaling. Internal unit [m] */ double vto_meter = 0.0, vfr_meter = 0.0; /* Vertical scaling. Internal unit [m] */ /************************************************************************************* D A T U M S A N D H E I G H T S Y S T E M S ************************************************************************************** It may be possible, and meaningful, to move the list parts of this up to the PJ_CONTEXT level. **************************************************************************************/ int datum_type = PJD_UNKNOWN; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */ double datum_params[7] = {0, 0, 0, 0, 0, 0, 0}; /* Parameters for 3PARAM and 7PARAM */ int has_geoid_vgrids = 0; /* used by legacy transform.cpp */ void *hgrids_legacy = nullptr; /* used by legacy transform.cpp. Is a pointer to a ListOfHGrids* */ void *vgrids_legacy = nullptr; /* used by legacy transform.cpp. Is a pointer to a ListOfVGrids* */ double from_greenwich = 0.0; /* prime meridian offset (in radians) */ double long_wrap_center = 0.0; /* 0.0 for -180 to 180, actually in radians*/ int is_long_wrap_set = 0; char axis[4] = {0, 0, 0, 0}; /* Axis order, pj_transform/pj_adjust_axis */ /************************************************************************************* ISO-19111 interface **************************************************************************************/ NS_PROJ::util::BaseObjectPtr iso_obj{}; bool iso_obj_is_coordinate_operation = false; double coordinateEpoch = 0; bool hasCoordinateEpoch = false; // cached results mutable std::string lastWKT{}; mutable std::string lastPROJString{}; mutable std::string lastJSONString{}; mutable bool gridsNeededAsked = false; mutable std::vector gridsNeeded{}; // cache pj_get_type() result to help for repeated calls to proj_factors() mutable PJ_TYPE type = PJ_TYPE_UNKNOWN; /************************************************************************************* proj_create_crs_to_crs() alternative coordinate operations **************************************************************************************/ std::vector alternativeCoordinateOperations{}; int iCurCoordOp = -1; bool errorIfBestTransformationNotAvailable = false; bool warnIfBestTransformationNotAvailable = true; /* to remove in PROJ 10? */ bool skipNonInstantiable = true; // Used internally by proj_factors() PJ *cached_op_for_proj_factors = nullptr; /************************************************************************************* E N D O F G E N E R A L P A R A M E T E R S T R U C T **************************************************************************************/ PJconsts(); PJconsts(const PJconsts &) = delete; PJconsts &operator=(const PJconsts &) = delete; void copyStateFrom(const PJconsts &); }; /* Parameter list (a copy of the +proj=... etc. parameters) */ struct ARG_list { paralist *next; char used; #if (defined(__GNUC__) && __GNUC__ >= 8) || \ (defined(__clang__) && __clang_major__ >= 9) char param[]; /* variable-length member */ /* Safer to use [] for gcc 8. See https://github.com/OSGeo/proj.4/pull/1087 */ /* and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86914 */ #else char param[1]; /* variable-length member */ #endif }; typedef union { double f; int i; char *s; } PROJVALUE; struct PJ_DATUMS { const char *id; /* datum keyword */ const char *defn; /* ie. "to_wgs84=..." */ const char *ellipse_id; /* ie from ellipse table */ const char *comments; /* EPSG code, etc */ }; 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; /* meridional, 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; /* always 0 */ }; // Legacy struct projFileAPI_t; struct projCppContext; struct projNetworkCallbacksAndData { bool enabled = false; proj_network_open_cbk_type open = nullptr; proj_network_close_cbk_type close = nullptr; proj_network_get_header_value_cbk_type get_header_value = nullptr; proj_network_read_range_type read_range = nullptr; void *user_data = nullptr; }; struct projGridChunkCache { bool enabled = true; std::string filename{}; long long max_size = 300 * 1024 * 1024; int ttl = 86400; // 1 day }; struct projFileApiCallbackAndData { PROJ_FILE_HANDLE *(*open_cbk)(PJ_CONTEXT *ctx, const char *filename, PROJ_OPEN_ACCESS access, void *user_data) = nullptr; size_t (*read_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, void *buffer, size_t size, void *user_data) = nullptr; size_t (*write_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, const void *buffer, size_t size, void *user_data) = nullptr; int (*seek_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, long long offset, int whence, void *user_data) = nullptr; unsigned long long (*tell_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, void *user_data) = nullptr; void (*close_cbk)(PJ_CONTEXT *ctx, PROJ_FILE_HANDLE *, void *user_data) = nullptr; int (*exists_cbk)(PJ_CONTEXT *ctx, const char *filename, void *user_data) = nullptr; int (*mkdir_cbk)(PJ_CONTEXT *ctx, const char *filename, void *user_data) = nullptr; int (*unlink_cbk)(PJ_CONTEXT *ctx, const char *filename, void *user_data) = nullptr; int (*rename_cbk)(PJ_CONTEXT *ctx, const char *oldPath, const char *newPath, void *user_data) = nullptr; void *user_data = nullptr; }; /* proj thread context */ struct PROJ_GCC_DLL pj_ctx { std::string lastFullErrorMessage{}; // used by proj_context_errno_string int last_errno = 0; int debug_level = PJ_LOG_ERROR; bool errorIfBestTransformationNotAvailableDefault = false; bool warnIfBestTransformationNotAvailableDefault = true; void (*logger)(void *, int, const char *) = nullptr; void *logger_app_data = nullptr; struct projCppContext *cpp_context = nullptr; /* internal context for C++ code */ int use_proj4_init_rules = -1; /* -1 = unknown, 0 = no, 1 = yes */ bool forceOver = false; int epsg_file_exists = -1; /* -1 = unknown, 0 = no, 1 = yes */ std::string env_var_proj_data{}; // content of PROJ_DATA (or legacy PROJ_LIB) // environment variable. Use // Filemanager::getProjDataEnvVar() to access std::vector search_paths{}; const char **c_compat_paths = nullptr; // same, but for projinfo usage const char *(*file_finder)(PJ_CONTEXT *, const char *, void *user_data) = nullptr; void *file_finder_user_data = nullptr; // Cache result of pj_find_file() std::map lookupedFiles{}; bool defer_grid_opening = false; // set transiently by pj_obj_create() projFileApiCallbackAndData fileApi{}; std::string custom_sqlite3_vfs_name{}; std::string user_writable_directory{}; // BEGIN ini file settings bool iniFileLoaded = false; std::string endpoint{}; projNetworkCallbacksAndData networking{}; std::string ca_bundle_path{}; bool native_ca = false; projGridChunkCache gridChunkCache{}; TMercAlgo defaultTmercAlgo = TMercAlgo::PODER_ENGSAGER; // can be overridden by content of proj.ini // END ini file settings int projStringParserCreateFromPROJStringRecursionCounter = 0; // to avoid potential infinite recursion in // PROJStringParser::createFromPROJString() int pipelineInitRecursiongCounter = 0; // to avoid potential infinite recursion in pipeline.cpp pj_ctx() = default; pj_ctx(const pj_ctx &); ~pj_ctx(); pj_ctx &operator=(const pj_ctx &) = delete; projCppContext PROJ_FOR_TEST *get_cpp_context(); void set_search_paths(const std::vector &search_paths_in); void set_ca_bundle_path(const std::string &ca_bundle_path_in); static pj_ctx createDefault(); }; #ifndef DO_NOT_DEFINE_PROJ_HEAD #define PROJ_HEAD(name, desc) static const char des_##name[] = desc #define OPERATION(name, NEED_ELLPS) \ \ pj_projection_specific_setup_##name(PJ *P); \ C_NAMESPACE PJ *pj_##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_new(); \ if (nullptr == P) \ return nullptr; \ P->short_name = #name; \ P->descr = des_##name; \ P->need_ellps = NEED_ELLPS; \ P->left = PJ_IO_UNITS_RADIANS; \ P->right = PJ_IO_UNITS_CLASSIC; \ return P; \ } \ \ PJ *pj_projection_specific_setup_##name(PJ *P) /* In ISO19000 lingo, an operation is either a conversion or a transformation */ #define PJ_CONVERSION(name, need_ellps) OPERATION(name, need_ellps) #define PJ_TRANSFORMATION(name, need_ellps) OPERATION(name, need_ellps) /* In PROJ.4 a projection is a conversion taking angular input and giving scaled * linear output */ #define PJ_PROJECTION(name) PJ_CONVERSION(name, 1) #endif /* DO_NOT_DEFINE_PROJ_HEAD */ /* procedure prototypes */ double PROJ_DLL dmstor(const char *, char **); double dmstor_ctx(PJ_CONTEXT *ctx, const char *, char **); void PROJ_DLL set_rtodms(int, int); char PROJ_DLL *rtodms(char *, size_t, double, int, int); double PROJ_DLL adjlon(double); double aacos(PJ_CONTEXT *, double); double aasin(PJ_CONTEXT *, double); double asqrt(double); double aatan2(double, double); PROJVALUE PROJ_DLL pj_param(PJ_CONTEXT *ctx, paralist *, const char *); paralist PROJ_DLL *pj_param_exists(paralist *list, const char *parameter); paralist PROJ_DLL *pj_mkparam(const char *); paralist *pj_mkparam_ws(const char *str, const char **next_str); int PROJ_DLL pj_ell_set(PJ_CONTEXT *ctx, paralist *, double *, double *); int pj_datum_set(PJ_CONTEXT *, paralist *, PJ *); int pj_angular_units_set(paralist *, PJ *); paralist *pj_clone_paralist(const paralist *); paralist *pj_search_initcache(const char *filekey); void pj_insert_initcache(const char *filekey, const paralist *list); paralist *pj_expand_init(PJ_CONTEXT *ctx, paralist *init); void *free_params(PJ_CONTEXT *ctx, paralist *start, int errlev); double *pj_enfn(double); double pj_mlfn(double, double, double, const double *); double pj_inv_mlfn(double, const double *); double pj_qsfn(double, double, double); double pj_tsfn(double, double, double); double pj_msfn(double, double, double); double PROJ_DLL pj_phi2(PJ_CONTEXT *, const double, const double); double pj_sinhpsi2tanphi(PJ_CONTEXT *, const double, const double); double *pj_authset(double); double pj_authlat(double, double *); double pj_conformal_lat(double phi, double e); double pj_conformal_lat_inverse(double chi, double e, double threshold); COMPLEX pj_zpoly1(COMPLEX, const COMPLEX *, int); COMPLEX pj_zpolyd1(COMPLEX, const COMPLEX *, int, COMPLEX *); int pj_deriv(PJ_LP, double, const PJ *, struct DERIVS *); int pj_factors(PJ_LP, PJ *toplevel, const PJ *internal, double, struct FACTORS *); void *proj_mdist_ini(double); double proj_mdist(double, double, double, const void *); double proj_inv_mdist(PJ_CONTEXT *ctx, double, const void *); void *pj_gauss_ini(double, double, double *, double *); PJ_LP pj_gauss(PJ_CONTEXT *, PJ_LP, const void *); PJ_LP pj_inv_gauss(PJ_CONTEXT *, PJ_LP, const void *); const struct PJ_DATUMS PROJ_DLL *pj_get_datums_ref(void); PJ *pj_new(void); PJ *pj_default_destructor(PJ *P, int errlev); double PROJ_DLL pj_atof(const char *nptr); double pj_strtod(const char *nptr, char **endptr); void pj_freeup_plain(PJ *P); PJ *pj_init_ctx_with_allow_init_epsg(PJ_CONTEXT *ctx, int argc, char **argv, int allow_init_epsg); std::string PROJ_DLL pj_add_type_crs_if_needed(const std::string &str); std::string pj_double_quote_string_param_if_needed(const std::string &str); PJ *pj_create_internal(PJ_CONTEXT *ctx, const char *definition); PJ *pj_create_argv_internal(PJ_CONTEXT *ctx, int argc, char **argv); // For use by projinfo void pj_load_ini(PJ_CONTEXT *ctx); // Exported for testing purposes only std::string PROJ_DLL pj_context_get_grid_cache_filename(PJ_CONTEXT *ctx); // For use by projsync std::string PROJ_DLL pj_get_relative_share_proj(PJ_CONTEXT *ctx); std::vector pj_create_prepared_operations(PJ_CONTEXT *ctx, const PJ *source_crs, const PJ *target_crs, PJ_OBJ_LIST *op_list); int pj_get_suggested_operation(PJ_CONTEXT *ctx, const std::vector &opList, const int iExcluded[2], bool skipNonInstantiable, PJ_DIRECTION direction, PJ_COORD coord); const PJ_UNITS *pj_list_linear_units(); const PJ_UNITS *pj_list_angular_units(); void pj_clear_hgridshift_knowngrids_cache(); void pj_clear_vgridshift_knowngrids_cache(); void pj_clear_gridshift_knowngrids_cache(); void pj_clear_sqlite_cache(); PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial, double deltaXYTolerance); PJ *pj_obj_create(PJ_CONTEXT *ctx, const NS_PROJ::util::BaseObjectNNPtr &objIn); PJ_DIRECTION pj_opposite_direction(PJ_DIRECTION dir); void pj_warn_about_missing_grid(PJ *P); /*****************************************************************************/ /* */ /* proj_api.h */ /* */ /* The rest of this header file includes what used to be "proj_api.h" */ /* */ /*****************************************************************************/ /* 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 #define RAD_TO_DEG 57.295779513082321 #define DEG_TO_RAD .017453292519943296 extern char const PROJ_DLL pj_release[]; /* global release id string */ /* procedure prototypes */ PJ_CONTEXT PROJ_DLL *pj_get_default_ctx(void); PJ_CONTEXT *pj_get_ctx(PJ *); PJ_XY PROJ_DLL pj_fwd(PJ_LP, PJ *); PJ_LP PROJ_DLL pj_inv(PJ_XY, PJ *); PJ_XYZ pj_fwd3d(PJ_LPZ, PJ *); PJ_LPZ pj_inv3d(PJ_XYZ, PJ *); void pj_clear_initcache(void); void PROJ_DLL pj_pr_list(PJ *); /* used by proj.cpp */ char *pj_get_def(const PJ *, int); int pj_has_inverse(PJ *); char *pj_strdup(const char *str); const char PROJ_DLL *pj_get_release(void); void pj_acquire_lock(void); void pj_release_lock(void); bool pj_log_active(PJ_CONTEXT *ctx, int level); void pj_log(PJ_CONTEXT *ctx, int level, const char *fmt, ...); void pj_stderr_logger(void *, int, const char *); // PROJ_DLL for tests int PROJ_DLL pj_find_file(PJ_CONTEXT *ctx, const char *short_filename, char *out_full_filename, size_t out_full_filename_size); // To remove when PROJ_LIB definitely goes away void PROJ_DLL pj_stderr_proj_lib_deprecation_warning(); #endif /* ndef PROJ_INTERNAL_H */ proj-9.6.0/src/proj_json_streaming_writer.cpp000664 001754 001755 00000017372 14764566077 021376 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: CPL - Common Portability Library * Purpose: JSon streaming writer * Author: Even Rouault, even.rouault at spatialys.com * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ /*! @cond Doxygen_Suppress */ #include #include #include #include "proj_json_streaming_writer.hpp" #include #include #include #include #define CPLAssert(x) \ do { \ } while (0) #define CPLIsNan std::isnan #define CPLIsInf std::isinf #define CPL_FRMT_GIB "%lld" #define CPL_FRMT_GUIB "%llu" typedef std::uint64_t GUIntBig; static std::string CPLSPrintf(const char *fmt, ...) { std::string res; res.resize(256); va_list list; va_start(list, fmt); sqlite3_vsnprintf(256, &res[0], fmt, list); va_end(list); res.resize(strlen(&res[0])); return res; } NS_PROJ_START CPLJSonStreamingWriter::CPLJSonStreamingWriter( SerializationFuncType pfnSerializationFunc, void *pUserData) : m_pfnSerializationFunc(pfnSerializationFunc), m_pUserData(pUserData) {} CPLJSonStreamingWriter::~CPLJSonStreamingWriter() { CPLAssert(m_nLevel == 0); CPLAssert(m_states.empty()); } void CPLJSonStreamingWriter::Print(const std::string &text) { if (m_pfnSerializationFunc) { m_pfnSerializationFunc(text.c_str(), m_pUserData); } else { m_osStr += text; } } void CPLJSonStreamingWriter::SetIndentationSize(int nSpaces) { CPLAssert(m_nLevel == 0); m_osIndent.clear(); m_osIndent.resize(nSpaces, ' '); } void CPLJSonStreamingWriter::IncIndent() { m_nLevel++; if (m_bPretty) m_osIndentAcc += m_osIndent; } void CPLJSonStreamingWriter::DecIndent() { CPLAssert(m_nLevel > 0); m_nLevel--; if (m_bPretty) m_osIndentAcc.resize(m_osIndentAcc.size() - m_osIndent.size()); } std::string CPLJSonStreamingWriter::FormatString(const std::string &str) { std::string ret; ret += '"'; for (char ch : str) { switch (ch) { case '"': ret += "\\\""; break; case '\\': ret += "\\\\"; break; case '\b': ret += "\\b"; break; case '\f': ret += "\\f"; break; case '\n': ret += "\\n"; break; case '\r': ret += "\\r"; break; case '\t': ret += "\\t"; break; default: if (static_cast(ch) < ' ') ret += CPLSPrintf("\\u%04X", ch); else ret += ch; break; } } ret += '"'; return ret; } void CPLJSonStreamingWriter::EmitCommaIfNeeded() { if (m_bWaitForValue) { m_bWaitForValue = false; } else if (!m_states.empty()) { if (!m_states.back().bFirstChild) { Print(","); if (m_bPretty && !m_bNewLineEnabled) Print(" "); } if (m_bPretty && m_bNewLineEnabled) { Print("\n"); Print(m_osIndentAcc); } m_states.back().bFirstChild = false; } } void CPLJSonStreamingWriter::StartObj() { EmitCommaIfNeeded(); Print("{"); IncIndent(); m_states.emplace_back(State(true)); } void CPLJSonStreamingWriter::EndObj() { CPLAssert(!m_bWaitForValue); CPLAssert(!m_states.empty()); CPLAssert(m_states.back().bIsObj); DecIndent(); if (!m_states.back().bFirstChild) { if (m_bPretty && m_bNewLineEnabled) { Print("\n"); Print(m_osIndentAcc); } } m_states.pop_back(); Print("}"); } void CPLJSonStreamingWriter::StartArray() { EmitCommaIfNeeded(); Print("["); IncIndent(); m_states.emplace_back(State(false)); } void CPLJSonStreamingWriter::EndArray() { CPLAssert(!m_states.empty()); CPLAssert(!m_states.back().bIsObj); DecIndent(); if (!m_states.back().bFirstChild) { if (m_bPretty && m_bNewLineEnabled) { Print("\n"); Print(m_osIndentAcc); } } m_states.pop_back(); Print("]"); } void CPLJSonStreamingWriter::AddObjKey(const std::string &key) { CPLAssert(!m_states.empty()); CPLAssert(m_states.back().bIsObj); CPLAssert(!m_bWaitForValue); EmitCommaIfNeeded(); Print(FormatString(key)); Print(m_bPretty ? ": " : ":"); m_bWaitForValue = true; } void CPLJSonStreamingWriter::Add(bool bVal) { EmitCommaIfNeeded(); Print(bVal ? "true" : "false"); } void CPLJSonStreamingWriter::Add(const std::string &str) { EmitCommaIfNeeded(); Print(FormatString(str)); } void CPLJSonStreamingWriter::Add(const char *pszStr) { EmitCommaIfNeeded(); Print(FormatString(pszStr)); } void CPLJSonStreamingWriter::AddUnquoted(const char *pszStr) { EmitCommaIfNeeded(); Print(pszStr); } void CPLJSonStreamingWriter::Add(GIntBig nVal) { EmitCommaIfNeeded(); Print(CPLSPrintf(CPL_FRMT_GIB, nVal)); } void CPLJSonStreamingWriter::Add(GUInt64 nVal) { EmitCommaIfNeeded(); Print(CPLSPrintf(CPL_FRMT_GUIB, static_cast(nVal))); } void CPLJSonStreamingWriter::Add(float fVal, int nPrecision) { EmitCommaIfNeeded(); if (CPLIsNan(fVal)) { Print("\"NaN\""); } else if (CPLIsInf(fVal)) { Print(fVal > 0 ? "\"Infinity\"" : "\"-Infinity\""); } else { char szFormatting[10]; snprintf(szFormatting, sizeof(szFormatting), "%%.%dg", nPrecision); Print(CPLSPrintf(szFormatting, fVal)); } } void CPLJSonStreamingWriter::Add(double dfVal, int nPrecision) { EmitCommaIfNeeded(); if (CPLIsNan(dfVal)) { Print("\"NaN\""); } else if (CPLIsInf(dfVal)) { Print(dfVal > 0 ? "\"Infinity\"" : "\"-Infinity\""); } else if (dfVal >= std::numeric_limits::min() && dfVal <= std::numeric_limits::max() && static_cast(dfVal) == dfVal) { // Avoid rounding issues on some platforms like armel, with numbers // like 2005. See https://github.com/OSGeo/PROJ/issues/3297 Print(CPLSPrintf("%d", static_cast(dfVal))); } else { char szFormatting[10]; snprintf(szFormatting, sizeof(szFormatting), "%%.%dg", nPrecision); Print(CPLSPrintf(szFormatting, dfVal)); } } void CPLJSonStreamingWriter::AddNull() { EmitCommaIfNeeded(); Print("null"); } NS_PROJ_END /*! @endcond */ proj-9.6.0/src/proj_json_streaming_writer.hpp000664 001754 001755 00000012422 14764566077 021372 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: CPL - Common Portability Library * Purpose: JSon streaming writer * Author: Even Rouault, even.rouault at spatialys.com * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ #ifndef PROJ_JSON_STREAMING_WRITER_H #define PROJ_JSON_STREAMING_WRITER_H /*! @cond Doxygen_Suppress */ #include #include #include #define CPL_DLL #include "proj/util.hpp" NS_PROJ_START typedef std::int64_t GIntBig; typedef std::uint64_t GUInt64; class CPL_DLL CPLJSonStreamingWriter { public: typedef void (*SerializationFuncType)(const char *pszTxt, void *pUserData); private: CPLJSonStreamingWriter(const CPLJSonStreamingWriter &) = delete; CPLJSonStreamingWriter &operator=(const CPLJSonStreamingWriter &) = delete; std::string m_osStr{}; SerializationFuncType m_pfnSerializationFunc = nullptr; void *m_pUserData = nullptr; bool m_bPretty = true; std::string m_osIndent = std::string(" "); std::string m_osIndentAcc{}; int m_nLevel = 0; bool m_bNewLineEnabled = true; struct State { bool bIsObj = false; bool bFirstChild = true; explicit State(bool bIsObjIn) : bIsObj(bIsObjIn) {} }; std::vector m_states{}; bool m_bWaitForValue = false; void Print(const std::string &text); void IncIndent(); void DecIndent(); static std::string FormatString(const std::string &str); void EmitCommaIfNeeded(); public: CPLJSonStreamingWriter(SerializationFuncType pfnSerializationFunc, void *pUserData); ~CPLJSonStreamingWriter(); void SetPrettyFormatting(bool bPretty) { m_bPretty = bPretty; } void SetIndentationSize(int nSpaces); // cppcheck-suppress functionStatic const std::string &GetString() const { return m_osStr; } void Add(const std::string &str); void Add(const char *pszStr); void AddUnquoted(const char *pszStr); void Add(bool bVal); void Add(int nVal) { Add(static_cast(nVal)); } void Add(unsigned int nVal) { Add(static_cast(nVal)); } void Add(GIntBig nVal); void Add(GUInt64 nVal); void Add(float fVal, int nPrecision = 9); void Add(double dfVal, int nPrecision = 18); void AddNull(); void StartObj(); void EndObj(); void AddObjKey(const std::string &key); struct CPL_DLL ObjectContext { CPLJSonStreamingWriter &m_serializer; ObjectContext(const ObjectContext &) = delete; ObjectContext(ObjectContext &&) = default; explicit inline ObjectContext(CPLJSonStreamingWriter &serializer) : m_serializer(serializer) { m_serializer.StartObj(); } ~ObjectContext() { m_serializer.EndObj(); } }; inline ObjectContext MakeObjectContext() { return ObjectContext(*this); } void StartArray(); void EndArray(); struct CPL_DLL ArrayContext { CPLJSonStreamingWriter &m_serializer; bool m_bForceSingleLine; bool m_bNewLineEnabledBackup; ArrayContext(const ArrayContext &) = delete; ArrayContext(ArrayContext &&) = default; inline explicit ArrayContext(CPLJSonStreamingWriter &serializer, bool bForceSingleLine = false) : m_serializer(serializer), m_bForceSingleLine(bForceSingleLine), m_bNewLineEnabledBackup(serializer.GetNewLine()) { if (m_bForceSingleLine) serializer.SetNewline(false); m_serializer.StartArray(); } ~ArrayContext() { m_serializer.EndArray(); if (m_bForceSingleLine) m_serializer.SetNewline(m_bNewLineEnabledBackup); } }; inline ArrayContext MakeArrayContext(bool bForceSingleLine = false) { return ArrayContext(*this, bForceSingleLine); } bool GetNewLine() const { return m_bNewLineEnabled; } void SetNewline(bool bEnabled) { m_bNewLineEnabled = bEnabled; } }; NS_PROJ_END /*! @endcond */ #endif // PROJ_JSON_STREAMING_WRITER_H proj-9.6.0/src/proj_mdist.cpp000664 001754 001755 00000007361 14764566077 016075 0ustar00e012349e012349000000 000000 /* ** 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. */ #include #include #include "proj.h" #include "proj_internal.h" #define MAX_ITER 20 #define TOL 1e-14 namespace { // anonymous namespace struct MDIST { int nb; double es; double E; double b[1]; }; } // anonymous namespace void *proj_mdist_ini(double es) { double numf, numfi, twon1, denf, denfi, ens, T, twon; double den, El = 1., Es = 1.; double E[MAX_ITER] = {1.}; struct MDIST *b; int i, j; /* generate E(e^2) and its terms E[] */ ens = es; numf = twon1 = denfi = 1.; denf = 1.; twon = 4.; 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)))) == nullptr) return (nullptr); 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 *data) { const struct MDIST *b = (const struct MDIST *)data; 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(PJ_CONTEXT *ctx, double dist, const void *data) { const struct MDIST *b = (const struct MDIST *)data; 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 */ proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return phi; } proj-9.6.0/src/proj_symbol_rename.h000664 001754 001755 00000066616 14764566077 017266 0ustar00e012349e012349000000 000000 /* This is a generated file by create_proj_symbol_rename.sh. *DO NOT EDIT * MANUALLY !* */ #ifndef PROJ_SYMBOL_RENAME_H #define PROJ_SYMBOL_RENAME_H #define geod_direct internal_geod_direct #define geod_directline internal_geod_directline #define geod_gendirect internal_geod_gendirect #define geod_gendirectline internal_geod_gendirectline #define geod_geninverse internal_geod_geninverse #define geod_genposition internal_geod_genposition #define geod_gensetdistance internal_geod_gensetdistance #define geod_init internal_geod_init #define geod_inverse internal_geod_inverse #define geod_inverseline internal_geod_inverseline #define geod_lineinit internal_geod_lineinit #define geod_polygon_addedge internal_geod_polygon_addedge #define geod_polygon_addpoint internal_geod_polygon_addpoint #define geod_polygonarea internal_geod_polygonarea #define geod_polygon_clear internal_geod_polygon_clear #define geod_polygon_compute internal_geod_polygon_compute #define geod_polygon_init internal_geod_polygon_init #define geod_polygon_testedge internal_geod_polygon_testedge #define geod_polygon_testpoint internal_geod_polygon_testpoint #define geod_position internal_geod_position #define geod_setdistance internal_geod_setdistance #define proj_alter_id internal_proj_alter_id #define proj_alter_name internal_proj_alter_name #define proj_angular_input internal_proj_angular_input #define proj_angular_output internal_proj_angular_output #define proj_area_create internal_proj_area_create #define proj_area_destroy internal_proj_area_destroy #define proj_area_set_bbox internal_proj_area_set_bbox #define proj_area_set_name internal_proj_area_set_name #define proj_as_projjson internal_proj_as_projjson #define proj_as_proj_string internal_proj_as_proj_string #define proj_assign_context internal_proj_assign_context #define proj_as_wkt internal_proj_as_wkt #define proj_celestial_body_list_destroy \ internal_proj_celestial_body_list_destroy #define proj_cleanup internal_proj_cleanup #define proj_clone internal_proj_clone #define proj_concatoperation_get_step internal_proj_concatoperation_get_step #define proj_concatoperation_get_step_count \ internal_proj_concatoperation_get_step_count #define proj_context_clone internal_proj_context_clone #define proj_context_create internal_proj_context_create #define proj_context_destroy internal_proj_context_destroy #define proj_context_errno internal_proj_context_errno #define proj_context_errno_string internal_proj_context_errno_string #define proj_context_get_database_metadata \ internal_proj_context_get_database_metadata #define proj_context_get_database_path internal_proj_context_get_database_path #define proj_context_get_database_structure \ internal_proj_context_get_database_structure #define proj_context_get_url_endpoint internal_proj_context_get_url_endpoint #define proj_context_get_use_proj4_init_rules \ internal_proj_context_get_use_proj4_init_rules #define proj_context_get_user_writable_directory \ internal_proj_context_get_user_writable_directory #define proj_context_guess_wkt_dialect internal_proj_context_guess_wkt_dialect #define proj_context_is_network_enabled internal_proj_context_is_network_enabled #define proj_context_set_autoclose_database \ internal_proj_context_set_autoclose_database #define proj_context_set_ca_bundle_path internal_proj_context_set_ca_bundle_path #define proj_context_set_database_path internal_proj_context_set_database_path #define proj_context_set_enable_network internal_proj_context_set_enable_network #define proj_context_set_fileapi internal_proj_context_set_fileapi #define proj_context_set_file_finder internal_proj_context_set_file_finder #define proj_context_set_network_callbacks \ internal_proj_context_set_network_callbacks #define proj_context_set_search_paths internal_proj_context_set_search_paths #define proj_context_set_sqlite3_vfs_name \ internal_proj_context_set_sqlite3_vfs_name #define proj_context_set_url_endpoint internal_proj_context_set_url_endpoint #define proj_context_set_user_writable_directory \ internal_proj_context_set_user_writable_directory #define proj_context_use_proj4_init_rules \ internal_proj_context_use_proj4_init_rules #define proj_convert_conversion_to_other_method \ internal_proj_convert_conversion_to_other_method #define proj_coord internal_proj_coord #define proj_coordinate_metadata_create internal_proj_coordinate_metadata_create #define proj_coordinate_metadata_get_epoch \ internal_proj_coordinate_metadata_get_epoch #define proj_coordoperation_create_inverse \ internal_proj_coordoperation_create_inverse #define proj_coordoperation_get_accuracy \ internal_proj_coordoperation_get_accuracy #define proj_coordoperation_get_grid_used \ internal_proj_coordoperation_get_grid_used #define proj_coordoperation_get_grid_used_count \ internal_proj_coordoperation_get_grid_used_count #define proj_coordoperation_get_method_info \ internal_proj_coordoperation_get_method_info #define proj_coordoperation_get_param internal_proj_coordoperation_get_param #define proj_coordoperation_get_param_count \ internal_proj_coordoperation_get_param_count #define proj_coordoperation_get_param_index \ internal_proj_coordoperation_get_param_index #define proj_coordoperation_get_towgs84_values \ internal_proj_coordoperation_get_towgs84_values #define proj_coordoperation_has_ballpark_transformation \ internal_proj_coordoperation_has_ballpark_transformation #define proj_coordoperation_is_instantiable \ internal_proj_coordoperation_is_instantiable #define proj_coordoperation_requires_per_coordinate_input_time \ internal_proj_coordoperation_requires_per_coordinate_input_time #define proj_create internal_proj_create #define proj_create_argv internal_proj_create_argv #define proj_create_cartesian_2D_cs internal_proj_create_cartesian_2D_cs #define proj_create_compound_crs internal_proj_create_compound_crs #define proj_create_conversion internal_proj_create_conversion #define proj_create_conversion_albers_equal_area \ internal_proj_create_conversion_albers_equal_area #define proj_create_conversion_american_polyconic \ internal_proj_create_conversion_american_polyconic #define proj_create_conversion_azimuthal_equidistant \ internal_proj_create_conversion_azimuthal_equidistant #define proj_create_conversion_bonne internal_proj_create_conversion_bonne #define proj_create_conversion_cassini_soldner \ internal_proj_create_conversion_cassini_soldner #define proj_create_conversion_eckert_i internal_proj_create_conversion_eckert_i #define proj_create_conversion_eckert_ii \ internal_proj_create_conversion_eckert_ii #define proj_create_conversion_eckert_iii \ internal_proj_create_conversion_eckert_iii #define proj_create_conversion_eckert_iv \ internal_proj_create_conversion_eckert_iv #define proj_create_conversion_eckert_v internal_proj_create_conversion_eckert_v #define proj_create_conversion_eckert_vi \ internal_proj_create_conversion_eckert_vi #define proj_create_conversion_equal_earth \ internal_proj_create_conversion_equal_earth #define proj_create_conversion_equidistant_conic \ internal_proj_create_conversion_equidistant_conic #define proj_create_conversion_equidistant_cylindrical \ internal_proj_create_conversion_equidistant_cylindrical #define proj_create_conversion_equidistant_cylindrical_spherical \ internal_proj_create_conversion_equidistant_cylindrical_spherical #define proj_create_conversion_gall internal_proj_create_conversion_gall #define proj_create_conversion_gauss_schreiber_transverse_mercator \ internal_proj_create_conversion_gauss_schreiber_transverse_mercator #define proj_create_conversion_geostationary_satellite_sweep_x \ internal_proj_create_conversion_geostationary_satellite_sweep_x #define proj_create_conversion_geostationary_satellite_sweep_y \ internal_proj_create_conversion_geostationary_satellite_sweep_y #define proj_create_conversion_gnomonic internal_proj_create_conversion_gnomonic #define proj_create_conversion_goode_homolosine \ internal_proj_create_conversion_goode_homolosine #define proj_create_conversion_guam_projection \ internal_proj_create_conversion_guam_projection #define proj_create_conversion_hotine_oblique_mercator_two_point_natural_origin \ internal_proj_create_conversion_hotine_oblique_mercator_two_point_natural_origin #define proj_create_conversion_hotine_oblique_mercator_variant_a \ internal_proj_create_conversion_hotine_oblique_mercator_variant_a #define proj_create_conversion_hotine_oblique_mercator_variant_b \ internal_proj_create_conversion_hotine_oblique_mercator_variant_b #define proj_create_conversion_international_map_world_polyconic \ internal_proj_create_conversion_international_map_world_polyconic #define proj_create_conversion_interrupted_goode_homolosine \ internal_proj_create_conversion_interrupted_goode_homolosine #define proj_create_conversion_krovak internal_proj_create_conversion_krovak #define proj_create_conversion_krovak_north_oriented \ internal_proj_create_conversion_krovak_north_oriented #define proj_create_conversion_laborde_oblique_mercator \ internal_proj_create_conversion_laborde_oblique_mercator #define proj_create_conversion_lambert_azimuthal_equal_area \ internal_proj_create_conversion_lambert_azimuthal_equal_area #define proj_create_conversion_lambert_conic_conformal_1sp \ internal_proj_create_conversion_lambert_conic_conformal_1sp #define proj_create_conversion_lambert_conic_conformal_1sp_variant_b \ internal_proj_create_conversion_lambert_conic_conformal_1sp_variant_b #define proj_create_conversion_lambert_conic_conformal_2sp \ internal_proj_create_conversion_lambert_conic_conformal_2sp #define proj_create_conversion_lambert_conic_conformal_2sp_belgium \ internal_proj_create_conversion_lambert_conic_conformal_2sp_belgium #define proj_create_conversion_lambert_conic_conformal_2sp_michigan \ internal_proj_create_conversion_lambert_conic_conformal_2sp_michigan #define proj_create_conversion_lambert_cylindrical_equal_area \ internal_proj_create_conversion_lambert_cylindrical_equal_area #define proj_create_conversion_lambert_cylindrical_equal_area_spherical \ internal_proj_create_conversion_lambert_cylindrical_equal_area_spherical #define proj_create_conversion_local_orthographic \ internal_proj_create_conversion_local_orthographic #define proj_create_conversion_mercator_variant_a \ internal_proj_create_conversion_mercator_variant_a #define proj_create_conversion_mercator_variant_b \ internal_proj_create_conversion_mercator_variant_b #define proj_create_conversion_miller_cylindrical \ internal_proj_create_conversion_miller_cylindrical #define proj_create_conversion_mollweide \ internal_proj_create_conversion_mollweide #define proj_create_conversion_new_zealand_mapping_grid \ internal_proj_create_conversion_new_zealand_mapping_grid #define proj_create_conversion_oblique_stereographic \ internal_proj_create_conversion_oblique_stereographic #define proj_create_conversion_orthographic \ internal_proj_create_conversion_orthographic #define proj_create_conversion_polar_stereographic_variant_a \ internal_proj_create_conversion_polar_stereographic_variant_a #define proj_create_conversion_polar_stereographic_variant_b \ internal_proj_create_conversion_polar_stereographic_variant_b #define proj_create_conversion_pole_rotation_grib_convention \ internal_proj_create_conversion_pole_rotation_grib_convention #define proj_create_conversion_pole_rotation_netcdf_cf_convention \ internal_proj_create_conversion_pole_rotation_netcdf_cf_convention #define proj_create_conversion_popular_visualisation_pseudo_mercator \ internal_proj_create_conversion_popular_visualisation_pseudo_mercator #define proj_create_conversion_quadrilateralized_spherical_cube \ internal_proj_create_conversion_quadrilateralized_spherical_cube #define proj_create_conversion_robinson internal_proj_create_conversion_robinson #define proj_create_conversion_sinusoidal \ internal_proj_create_conversion_sinusoidal #define proj_create_conversion_spherical_cross_track_height \ internal_proj_create_conversion_spherical_cross_track_height #define proj_create_conversion_stereographic \ internal_proj_create_conversion_stereographic #define proj_create_conversion_transverse_mercator \ internal_proj_create_conversion_transverse_mercator #define proj_create_conversion_transverse_mercator_south_oriented \ internal_proj_create_conversion_transverse_mercator_south_oriented #define proj_create_conversion_tunisia_mapping_grid \ internal_proj_create_conversion_tunisia_mapping_grid #define proj_create_conversion_tunisia_mining_grid \ internal_proj_create_conversion_tunisia_mining_grid #define proj_create_conversion_two_point_equidistant \ internal_proj_create_conversion_two_point_equidistant #define proj_create_conversion_utm internal_proj_create_conversion_utm #define proj_create_conversion_van_der_grinten \ internal_proj_create_conversion_van_der_grinten #define proj_create_conversion_vertical_perspective \ internal_proj_create_conversion_vertical_perspective #define proj_create_conversion_wagner_i internal_proj_create_conversion_wagner_i #define proj_create_conversion_wagner_ii \ internal_proj_create_conversion_wagner_ii #define proj_create_conversion_wagner_iii \ internal_proj_create_conversion_wagner_iii #define proj_create_conversion_wagner_iv \ internal_proj_create_conversion_wagner_iv #define proj_create_conversion_wagner_v internal_proj_create_conversion_wagner_v #define proj_create_conversion_wagner_vi \ internal_proj_create_conversion_wagner_vi #define proj_create_conversion_wagner_vii \ internal_proj_create_conversion_wagner_vii #define proj_create_crs_to_crs internal_proj_create_crs_to_crs #define proj_create_crs_to_crs_from_pj internal_proj_create_crs_to_crs_from_pj #define proj_create_cs internal_proj_create_cs #define proj_create_derived_geographic_crs \ internal_proj_create_derived_geographic_crs #define proj_create_ellipsoidal_2D_cs internal_proj_create_ellipsoidal_2D_cs #define proj_create_ellipsoidal_3D_cs internal_proj_create_ellipsoidal_3D_cs #define proj_create_engineering_crs internal_proj_create_engineering_crs #define proj_create_from_database internal_proj_create_from_database #define proj_create_from_name internal_proj_create_from_name #define proj_create_from_wkt internal_proj_create_from_wkt #define proj_create_geocentric_crs internal_proj_create_geocentric_crs #define proj_create_geocentric_crs_from_datum \ internal_proj_create_geocentric_crs_from_datum #define proj_create_geographic_crs internal_proj_create_geographic_crs #define proj_create_geographic_crs_from_datum \ internal_proj_create_geographic_crs_from_datum #define proj_create_operation_factory_context \ internal_proj_create_operation_factory_context #define proj_create_operations internal_proj_create_operations #define proj_create_projected_crs internal_proj_create_projected_crs #define proj_create_transformation internal_proj_create_transformation #define proj_create_vertical_crs internal_proj_create_vertical_crs #define proj_create_vertical_crs_ex internal_proj_create_vertical_crs_ex #define proj_crs_alter_cs_angular_unit internal_proj_crs_alter_cs_angular_unit #define proj_crs_alter_cs_linear_unit internal_proj_crs_alter_cs_linear_unit #define proj_crs_alter_geodetic_crs internal_proj_crs_alter_geodetic_crs #define proj_crs_alter_parameters_linear_unit \ internal_proj_crs_alter_parameters_linear_unit #define proj_crs_create_bound_crs internal_proj_crs_create_bound_crs #define proj_crs_create_bound_crs_to_WGS84 \ internal_proj_crs_create_bound_crs_to_WGS84 #define proj_crs_create_bound_vertical_crs \ internal_proj_crs_create_bound_vertical_crs #define proj_crs_create_projected_3D_crs_from_2D \ internal_proj_crs_create_projected_3D_crs_from_2D #define proj_crs_demote_to_2D internal_proj_crs_demote_to_2D #define proj_crs_get_coordinate_system internal_proj_crs_get_coordinate_system #define proj_crs_get_coordoperation internal_proj_crs_get_coordoperation #define proj_crs_get_datum internal_proj_crs_get_datum #define proj_crs_get_datum_ensemble internal_proj_crs_get_datum_ensemble #define proj_crs_get_datum_forced internal_proj_crs_get_datum_forced #define proj_crs_get_geodetic_crs internal_proj_crs_get_geodetic_crs #define proj_crs_get_horizontal_datum internal_proj_crs_get_horizontal_datum #define proj_crs_get_sub_crs internal_proj_crs_get_sub_crs #define proj_crs_has_point_motion_operation \ internal_proj_crs_has_point_motion_operation #define proj_crs_info_list_destroy internal_proj_crs_info_list_destroy #define proj_crs_is_derived internal_proj_crs_is_derived #define proj_crs_promote_to_3D internal_proj_crs_promote_to_3D #define proj_cs_get_axis_count internal_proj_cs_get_axis_count #define proj_cs_get_axis_info internal_proj_cs_get_axis_info #define proj_cs_get_type internal_proj_cs_get_type #define proj_datum_ensemble_get_accuracy \ internal_proj_datum_ensemble_get_accuracy #define proj_datum_ensemble_get_member internal_proj_datum_ensemble_get_member #define proj_datum_ensemble_get_member_count \ internal_proj_datum_ensemble_get_member_count #define proj_degree_input internal_proj_degree_input #define proj_degree_output internal_proj_degree_output #define proj_destroy internal_proj_destroy #define proj_dmstor internal_proj_dmstor #define proj_download_file internal_proj_download_file #define proj_dynamic_datum_get_frame_reference_epoch \ internal_proj_dynamic_datum_get_frame_reference_epoch #define proj_ellipsoid_get_parameters internal_proj_ellipsoid_get_parameters #define proj_errno internal_proj_errno #define proj_errno_reset internal_proj_errno_reset #define proj_errno_restore internal_proj_errno_restore #define proj_errno_set internal_proj_errno_set #define proj_errno_string internal_proj_errno_string #define proj_factors internal_proj_factors #define proj_geod internal_proj_geod #define proj_get_area_of_use internal_proj_get_area_of_use #define proj_get_area_of_use_ex internal_proj_get_area_of_use_ex #define proj_get_authorities_from_database \ internal_proj_get_authorities_from_database #define proj_get_celestial_body_list_from_database \ internal_proj_get_celestial_body_list_from_database #define proj_get_celestial_body_name internal_proj_get_celestial_body_name #define proj_get_codes_from_database internal_proj_get_codes_from_database #define proj_get_crs_info_list_from_database \ internal_proj_get_crs_info_list_from_database #define proj_get_crs_list_parameters_create \ internal_proj_get_crs_list_parameters_create #define proj_get_crs_list_parameters_destroy \ internal_proj_get_crs_list_parameters_destroy #define proj_get_domain_count internal_proj_get_domain_count #define proj_get_ellipsoid internal_proj_get_ellipsoid #define proj_get_geoid_models_from_database \ internal_proj_get_geoid_models_from_database #define proj_get_id_auth_name internal_proj_get_id_auth_name #define proj_get_id_code internal_proj_get_id_code #define proj_get_insert_statements internal_proj_get_insert_statements #define proj_get_name internal_proj_get_name #define proj_get_non_deprecated internal_proj_get_non_deprecated #define proj_get_prime_meridian internal_proj_get_prime_meridian #define proj_get_remarks internal_proj_get_remarks #define proj_get_scope internal_proj_get_scope #define proj_get_scope_ex internal_proj_get_scope_ex #define proj_get_source_crs internal_proj_get_source_crs #define proj_get_suggested_operation internal_proj_get_suggested_operation #define proj_get_target_crs internal_proj_get_target_crs #define proj_get_type internal_proj_get_type #define proj_get_units_from_database internal_proj_get_units_from_database #define proj_grid_cache_clear internal_proj_grid_cache_clear #define proj_grid_cache_set_enable internal_proj_grid_cache_set_enable #define proj_grid_cache_set_filename internal_proj_grid_cache_set_filename #define proj_grid_cache_set_max_size internal_proj_grid_cache_set_max_size #define proj_grid_cache_set_ttl internal_proj_grid_cache_set_ttl #define proj_grid_get_info_from_database \ internal_proj_grid_get_info_from_database #define proj_grid_info internal_proj_grid_info #define proj_identify internal_proj_identify #define proj_info internal_proj_info #define proj_init_info internal_proj_init_info #define proj_insert_object_session_create \ internal_proj_insert_object_session_create #define proj_insert_object_session_destroy \ internal_proj_insert_object_session_destroy #define proj_int_list_destroy internal_proj_int_list_destroy #define proj_is_crs internal_proj_is_crs #define proj_is_deprecated internal_proj_is_deprecated #define proj_is_derived_crs internal_proj_is_derived_crs #define proj_is_download_needed internal_proj_is_download_needed #define proj_is_equivalent_to internal_proj_is_equivalent_to #define proj_is_equivalent_to_with_ctx internal_proj_is_equivalent_to_with_ctx #define proj_list_angular_units internal_proj_list_angular_units #define proj_list_destroy internal_proj_list_destroy #define proj_list_ellps internal_proj_list_ellps #define proj_list_get internal_proj_list_get #define proj_list_get_count internal_proj_list_get_count #define proj_list_operations internal_proj_list_operations #define proj_list_prime_meridians internal_proj_list_prime_meridians #define proj_list_units internal_proj_list_units #define proj_log_func internal_proj_log_func #define proj_log_level internal_proj_log_level #define proj_lp_dist internal_proj_lp_dist #define proj_lpz_dist internal_proj_lpz_dist #define proj_normalize_for_visualization \ internal_proj_normalize_for_visualization #define proj_operation_factory_context_destroy \ internal_proj_operation_factory_context_destroy #define proj_operation_factory_context_set_allow_ballpark_transformations \ internal_proj_operation_factory_context_set_allow_ballpark_transformations #define proj_operation_factory_context_set_allowed_intermediate_crs \ internal_proj_operation_factory_context_set_allowed_intermediate_crs #define proj_operation_factory_context_set_allow_use_intermediate_crs \ internal_proj_operation_factory_context_set_allow_use_intermediate_crs #define proj_operation_factory_context_set_area_of_interest \ internal_proj_operation_factory_context_set_area_of_interest #define proj_operation_factory_context_set_area_of_interest_name \ internal_proj_operation_factory_context_set_area_of_interest_name #define proj_operation_factory_context_set_crs_extent_use \ internal_proj_operation_factory_context_set_crs_extent_use #define proj_operation_factory_context_set_desired_accuracy \ internal_proj_operation_factory_context_set_desired_accuracy #define proj_operation_factory_context_set_discard_superseded \ internal_proj_operation_factory_context_set_discard_superseded #define proj_operation_factory_context_set_grid_availability_use \ internal_proj_operation_factory_context_set_grid_availability_use #define proj_operation_factory_context_set_spatial_criterion \ internal_proj_operation_factory_context_set_spatial_criterion #define proj_operation_factory_context_set_use_proj_alternative_grid_names \ internal_proj_operation_factory_context_set_use_proj_alternative_grid_names #define proj_pj_info internal_proj_pj_info #define proj_prime_meridian_get_parameters \ internal_proj_prime_meridian_get_parameters #define proj_query_geodetic_crs_from_datum \ internal_proj_query_geodetic_crs_from_datum #define proj_roundtrip internal_proj_roundtrip #define proj_rtodms internal_proj_rtodms #define proj_rtodms2 internal_proj_rtodms2 #define proj_string_destroy internal_proj_string_destroy #define proj_string_list_destroy internal_proj_string_list_destroy #define proj_suggests_code_for internal_proj_suggests_code_for #define proj_todeg internal_proj_todeg #define proj_torad internal_proj_torad #define proj_trans internal_proj_trans #define proj_trans_array internal_proj_trans_array #define proj_trans_bounds internal_proj_trans_bounds #define proj_trans_generic internal_proj_trans_generic #define proj_trans_get_last_used_operation \ internal_proj_trans_get_last_used_operation #define proj_unit_list_destroy internal_proj_unit_list_destroy #define proj_uom_get_info_from_database internal_proj_uom_get_info_from_database #define proj_xy_dist internal_proj_xy_dist #define proj_xyz_dist internal_proj_xyz_dist #define pj_release internal_pj_release #endif /* PROJ_SYMBOL_RENAME_H */ proj-9.6.0/src/projections/000775 001754 001755 00000000000 14764566152 015541 5ustar00e012349e012349000000 000000 proj-9.6.0/src/projections/adams.cpp000664 001754 001755 00000040760 14764566077 017347 0ustar00e012349e012349000000 000000 /* * Implementation of the Guyou, Pierce Quincuncial, Adams Hemisphere in a * Square, Adams World in a Square I & II projections. * * Based on original code from libproj4 written by Gerald Evenden. Adapted to * modern PROJ by Kristian Evers. Original code found in file src/proj_guyou.c, * see * https://github.com/rouault/libproj4/blob/master/libproject-1.01/src/proj_guyou.c * for reference. * Fix for Peirce Quincuncial projection to diamond or square by Toby C. * Wilkinson to correctly flip out southern hemisphere into the four triangles * of Peirce's quincunx. The fix inspired by a similar rotate and translate * solution applied by Jonathan Feinberg for cartopy, see * https://github.com/jonathf/cartopy/blob/8172cac7fc45cafc86573d408ce85b74258a9c28/lib/cartopy/peircequincuncial.py * Added original code for horizontal and vertical arrangement of hemispheres by * Toby C. Wilkinson to allow creation of lateral quincuncial projections, such * as Grieger's Triptychial, see, e.g.: * - Grieger, B. (2020). “Optimized global map projections for specific * applications: the triptychial projection and the Spilhaus projection”. * EGU2020-9885. https://doi.org/10.5194/egusphere-egu2020-9885 * * Copyright (c) 2005, 2006, 2009 Gerald I. Evenden * Copyright (c) 2020 Kristian Evers * Copyright (c) 2021 Toby C Wilkinson * * Related material * ---------------- * * CONFORMAL PROJECTION OF THE SPHERE WITHIN A SQUARE, 1929, OSCAR S. ADAMS, * U.S. COAST AND GEODETIC SURVEY, Special Publication No.153, * ftp://ftp.library.noaa.gov/docs.lib/htdocs/rescue/cgs_specpubs/QB275U35no1531929.pdf * * https://en.wikipedia.org/wiki/Guyou_hemisphere-in-a-square_projection * https://en.wikipedia.org/wiki/Adams_hemisphere-in-a-square_projection * https://en.wikipedia.org/wiki/Peirce_quincuncial_projection */ #include #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(guyou, "Guyou") "\n\tMisc Sph No inv"; PROJ_HEAD(peirce_q, "Peirce Quincuncial") "\n\tMisc Sph No inv"; PROJ_HEAD(adams_hemi, "Adams Hemisphere in a Square") "\n\tMisc Sph No inv"; PROJ_HEAD(adams_ws1, "Adams World in a Square I") "\n\tMisc Sph No inv"; PROJ_HEAD(adams_ws2, "Adams World in a Square II") "\n\tMisc Sph No inv"; namespace { // anonymous namespace enum projection_type { GUYOU, PEIRCE_Q, ADAMS_HEMI, ADAMS_WS1, ADAMS_WS2, }; enum peirce_shape { PEIRCE_Q_SQUARE, PEIRCE_Q_DIAMOND, PEIRCE_Q_NHEMISPHERE, PEIRCE_Q_SHEMISPHERE, PEIRCE_Q_HORIZONTAL, PEIRCE_Q_VERTICAL, }; struct pj_adams_data { projection_type mode; peirce_shape pqshape; double scrollx = 0.0; double scrolly = 0.0; }; } // anonymous namespace #define TOL 1e-9 #define RSQRT2 0.7071067811865475244008443620 static double ell_int_5(double phi) { /* Procedure to compute elliptic integral of the first kind * where k^2=0.5. Precision good to better than 1e-7 * The approximation is performed with an even Chebyshev * series, thus the coefficients below are the even values * and where series evaluation must be multiplied by the argument. */ constexpr double C0 = 2.19174570831038; static const double C[] = { -8.58691003636495e-07, 2.02692115653689e-07, 3.12960480765314e-05, 5.30394739921063e-05, -0.0012804644680613, -0.00575574836830288, 0.0914203033408211, }; double y = phi * M_2_PI; y = 2. * y * y - 1.; double y2 = 2. * y; double d1 = 0.0; double d2 = 0.0; for (double c : C) { double temp = d1; d1 = y2 * d1 - d2 + c; d2 = temp; } return phi * (y * d1 - d2 + 0.5 * C0); } static PJ_XY adams_forward(PJ_LP lp, PJ *P) { double a = 0., b = 0.; bool sm = false, sn = false; PJ_XY xy; const struct pj_adams_data *Q = static_cast(P->opaque); switch (Q->mode) { case GUYOU: if ((fabs(lp.lam) - TOL) > M_PI_2) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } if (fabs(fabs(lp.phi) - M_PI_2) < TOL) { xy.x = 0; xy.y = lp.phi < 0 ? -1.85407 : 1.85407; return xy; } else { const double sl = sin(lp.lam); const double sp = sin(lp.phi); const double cp = cos(lp.phi); a = aacos(P->ctx, (cp * sl - sp) * RSQRT2); b = aacos(P->ctx, (cp * sl + sp) * RSQRT2); sm = lp.lam < 0.; sn = lp.phi < 0.; } break; case PEIRCE_Q: { /* lam0 - note that the original Peirce model used a central meridian of * around -70deg, but the default within proj is +lon0=0 */ if (Q->pqshape == PEIRCE_Q_NHEMISPHERE) { if (lp.phi < -TOL) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } } if (Q->pqshape == PEIRCE_Q_SHEMISPHERE) { if (lp.phi > -TOL) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } } const double sl = sin(lp.lam); const double cl = cos(lp.lam); const double cp = cos(lp.phi); a = aacos(P->ctx, cp * (sl + cl) * RSQRT2); b = aacos(P->ctx, cp * (sl - cl) * RSQRT2); sm = sl < 0.; sn = cl > 0.; } break; case ADAMS_HEMI: { const double sp = sin(lp.phi); if ((fabs(lp.lam) - TOL) > M_PI_2) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } a = cos(lp.phi) * sin(lp.lam); sm = (sp + a) < 0.; sn = (sp - a) < 0.; a = aacos(P->ctx, a); b = M_PI_2 - lp.phi; } break; case ADAMS_WS1: { const double sp = tan(0.5 * lp.phi); b = cos(aasin(P->ctx, sp)) * sin(0.5 * lp.lam); a = aacos(P->ctx, (b - sp) * RSQRT2); b = aacos(P->ctx, (b + sp) * RSQRT2); sm = lp.lam < 0.; sn = lp.phi < 0.; } break; case ADAMS_WS2: { const double spp = tan(0.5 * lp.phi); a = cos(aasin(P->ctx, spp)) * sin(0.5 * lp.lam); sm = (spp + a) < 0.; sn = (spp - a) < 0.; b = aacos(P->ctx, spp); a = aacos(P->ctx, a); } break; } double m = aasin(P->ctx, sqrt((1. + std::min(0.0, cos(a + b))))); if (sm) m = -m; double n = aasin(P->ctx, sqrt(fabs(1. - std::max(0.0, cos(a - b))))); if (sn) n = -n; xy.x = ell_int_5(m); xy.y = ell_int_5(n); if (Q->mode == PEIRCE_Q) { /* Constant complete elliptic integral of the first kind with m=0.5, * calculated using * https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.ellipk.html * . Used as basic as scaled shift distance */ constexpr double shd = 1.8540746773013719 * 2; /* For square and diamond Quincuncial projections, spin out southern * hemisphere to triangular segments of quincunx (before rotation for * square)*/ if (Q->pqshape == PEIRCE_Q_SQUARE || (Q->pqshape == PEIRCE_Q_DIAMOND)) { if (lp.phi < 0.) { /* fold out segments */ if (lp.lam < (-0.75 * M_PI)) xy.y = shd - xy.y; /* top left segment, shift up and reflect y */ if ((lp.lam < (-0.25 * M_PI)) && (lp.lam >= (-0.75 * M_PI))) xy.x = -shd - xy.x; /* left segment, shift left and reflect x */ if ((lp.lam < (0.25 * M_PI)) && (lp.lam >= (-0.25 * M_PI))) xy.y = -shd - xy.y; /* bottom segment, shift down and reflect y */ if ((lp.lam < (0.75 * M_PI)) && (lp.lam >= (0.25 * M_PI))) xy.x = shd - xy.x; /* right segment, shift right and reflect x */ if (lp.lam >= (0.75 * M_PI)) xy.y = shd - xy.y; /* top right segment, shift up and reflect y */ } } /* For square types rotate xy by 45 deg */ if (Q->pqshape == PEIRCE_Q_SQUARE) { const double temp = xy.x; xy.x = RSQRT2 * (xy.x - xy.y); xy.y = RSQRT2 * (temp + xy.y); } /* For rectangle Quincuncial projs, spin out southern hemisphere to east * (horizontal) or north (vertical) after rotation */ if (Q->pqshape == PEIRCE_Q_HORIZONTAL) { if (lp.phi < 0.) { xy.x = shd - xy.x; /* reflect x to east */ } xy.x = xy.x - (shd / 2); /* shift everything so origin is in middle of two hemispheres */ } if (Q->pqshape == PEIRCE_Q_VERTICAL) { if (lp.phi < 0.) { xy.y = shd - xy.y; /* reflect y to north */ } xy.y = xy.y - (shd / 2); /* shift everything so origin is in middle of two hemispheres */ } // if o_scrollx param present, scroll x if (!(Q->scrollx == 0.0) && (Q->pqshape == PEIRCE_Q_HORIZONTAL)) { double xscale = 2.0; double xthresh = shd / 2; xy.x = xy.x + (Q->scrollx * (xthresh * 2 * xscale)); /*shift relative to proj width*/ if (xy.x >= (xthresh * xscale)) { xy.x = xy.x - (shd * xscale); } else if (xy.x < -(xthresh * xscale)) { xy.x = xy.x + (shd * xscale); } } // if o_scrolly param present, scroll y if (!(Q->scrolly == 0.0) && (Q->pqshape == PEIRCE_Q_VERTICAL)) { double yscale = 2.0; double ythresh = shd / 2; xy.y = xy.y + (Q->scrolly * (ythresh * 2 * yscale)); /*shift relative to proj height*/ if (xy.y >= (ythresh * yscale)) { xy.y = xy.y - (shd * yscale); } else if (xy.y < -(ythresh * yscale)) { xy.y = xy.y + (shd * yscale); } } } if (Q->mode == ADAMS_HEMI || Q->mode == ADAMS_WS2) { /* rotate by 45deg. */ const double temp = xy.x; xy.x = RSQRT2 * (xy.x - xy.y); xy.y = RSQRT2 * (temp + xy.y); } return xy; } static PJ_LP adams_inverse(PJ_XY xy, PJ *P) { PJ_LP lp; // Only implemented for ADAMS_WS2 // Uses Newton-Raphson method on the following pair of functions: // f_x(lam,phi) = adams_forward(lam, phi).x - xy.x // f_y(lam,phi) = adams_forward(lam, phi).y - xy.y // Initial guess (very rough, especially at high northings) // The magic values are got with: // echo 0 90 | src/proj -f "%.8f" +proj=adams_ws2 +R=1 // echo 180 0 | src/proj -f "%.8f" +proj=adams_ws2 +R=1 lp.phi = std::max(std::min(xy.y / 2.62181347, 1.0), -1.0) * M_HALFPI; lp.lam = fabs(lp.phi) >= M_HALFPI ? 0 : std::max(std::min(xy.x / 2.62205760 / cos(lp.phi), 1.0), -1.0) * M_PI; constexpr double deltaXYTolerance = 1e-10; return pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance); } static PJ_LP peirce_q_square_inverse(PJ_XY xy, PJ *P) { /* Heuristics based on trial and repeat process */ PJ_LP lp; lp.phi = 0; if (xy.x == 0 && xy.y < 0) { lp.lam = -M_PI / 4; if (fabs(xy.y) < 2.622057580396) lp.phi = M_PI / 4; } else if (xy.x > 0 && fabs(xy.y) < 1e-7) lp.lam = M_PI / 4; else if (xy.x < 0 && fabs(xy.y) < 1e-7) { lp.lam = -3 * M_PI / 4; lp.phi = M_PI / 2 / 2.622057574224 * xy.x + M_PI / 2; } else if (fabs(xy.x) < 1e-7 && xy.y > 0) lp.lam = 3 * M_PI / 4; else if (xy.x >= 0 && xy.y <= 0) { lp.lam = 0; if (xy.x == 0 && xy.y == 0) { lp.phi = M_PI / 2; return lp; } } else if (xy.x >= 0 && xy.y >= 0) lp.lam = M_PI / 2; else if (xy.x <= 0 && xy.y >= 0) { if (fabs(xy.x) < fabs(xy.y)) lp.lam = M_PI * 0.9; else lp.lam = -M_PI * 0.9; } else /* if( xy.x <= 0 && xy.y <= 0 ) */ lp.lam = -M_PI / 2; constexpr double deltaXYTolerance = 1e-10; return pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance); } static PJ_LP peirce_q_diamond_inverse(PJ_XY xy, PJ *P) { /* Heuristics based on a trial and repeat process */ PJ_LP lp; lp.phi = 0; if (xy.x >= 0 && xy.y <= 0) { lp.lam = M_PI / 4; if (xy.x > 0 && xy.y == 0) { lp.lam = M_PI / 2; lp.phi = 0; } else if (xy.x == 0 && xy.y == 0) { lp.lam = 0; lp.phi = M_PI / 2; return lp; } else if (xy.x == 0 && xy.y < 0) { lp.lam = 0; lp.phi = M_PI / 4; } } else if (xy.x >= 0 && xy.y >= 0) lp.lam = 3 * M_PI / 4; else if (xy.x <= 0 && xy.y >= 0) { lp.lam = -3 * M_PI / 4; } else /* if( xy.x <= 0 && xy.y <= 0 ) */ lp.lam = -M_PI / 4; if (fabs(xy.x) > 1.8540746773013719 + 1e-3 || fabs(xy.y) > 1.8540746773013719 + 1e-3) { lp.phi = -M_PI / 4; } constexpr double deltaXYTolerance = 1e-10; return pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance); } static PJ *pj_adams_setup(PJ *P, projection_type mode) { struct pj_adams_data *Q = static_cast( calloc(1, sizeof(struct pj_adams_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->es = 0; P->fwd = adams_forward; Q->mode = mode; if (mode == ADAMS_WS2) P->inv = adams_inverse; if (mode == PEIRCE_Q) { // Quincuncial projections shape options: square, diamond, hemisphere, // horizontal (rectangle) or vertical (rectangle) const char *pqshape = pj_param(P->ctx, P->params, "sshape").s; if (!pqshape) pqshape = "diamond"; /* default if shape value not supplied */ if (strcmp(pqshape, "square") == 0) { Q->pqshape = PEIRCE_Q_SQUARE; P->inv = peirce_q_square_inverse; } else if (strcmp(pqshape, "diamond") == 0) { Q->pqshape = PEIRCE_Q_DIAMOND; P->inv = peirce_q_diamond_inverse; } else if (strcmp(pqshape, "nhemisphere") == 0) { Q->pqshape = PEIRCE_Q_NHEMISPHERE; } else if (strcmp(pqshape, "shemisphere") == 0) { Q->pqshape = PEIRCE_Q_SHEMISPHERE; } else if (strcmp(pqshape, "horizontal") == 0) { Q->pqshape = PEIRCE_Q_HORIZONTAL; if (pj_param(P->ctx, P->params, "tscrollx").i) { double scrollx; scrollx = pj_param(P->ctx, P->params, "dscrollx").f; if (scrollx > 1 || scrollx < -1) { proj_log_error( P, _("Invalid value for scrollx: |scrollx| should " "between -1 and 1")); return pj_default_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->scrollx = scrollx; } } else if (strcmp(pqshape, "vertical") == 0) { Q->pqshape = PEIRCE_Q_VERTICAL; if (pj_param(P->ctx, P->params, "tscrolly").i) { double scrolly; scrolly = pj_param(P->ctx, P->params, "dscrolly").f; if (scrolly > 1 || scrolly < -1) { proj_log_error( P, _("Invalid value for scrolly: |scrolly| should " "between -1 and 1")); return pj_default_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->scrolly = scrolly; } } else { proj_log_error(P, _("peirce_q: invalid value for 'shape' parameter")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } return P; } PJ *PJ_PROJECTION(guyou) { return pj_adams_setup(P, GUYOU); } PJ *PJ_PROJECTION(peirce_q) { return pj_adams_setup(P, PEIRCE_Q); } PJ *PJ_PROJECTION(adams_hemi) { return pj_adams_setup(P, ADAMS_HEMI); } PJ *PJ_PROJECTION(adams_ws1) { return pj_adams_setup(P, ADAMS_WS1); } PJ *PJ_PROJECTION(adams_ws2) { return pj_adams_setup(P, ADAMS_WS2); } #undef TOL #undef RSQRT2 proj-9.6.0/src/projections/aea.cpp000664 001754 001755 00000020534 14764566077 017005 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #include "proj.h" #include "proj_internal.h" #include #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; if (!(fabs(dphi) > TOL)) return Phi; --i; } while (i >= 0); return HUGE_VAL; } namespace { // anonymous namespace struct pj_aea { double ec; double n; double c; double dd; double n2; double rho0; double rho; double phi1; double phi2; double *en; int ellips; }; } // anonymous namespace static PJ *pj_aea_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } static PJ_XY aea_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoid/spheroid, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_aea *Q = static_cast(P->opaque); Q->rho = Q->c - (Q->ellips ? Q->n * pj_qsfn(sin(lp.phi), P->e, P->one_es) : Q->n2 * sin(lp.phi)); if (Q->rho < 0.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } Q->rho = Q->dd * sqrt(Q->rho); lp.lam *= Q->n; xy.x = Q->rho * sin(lp.lam); xy.y = Q->rho0 - Q->rho * cos(lp.lam); return xy; } static PJ_LP aea_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoid/spheroid, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_aea *Q = static_cast(P->opaque); xy.y = Q->rho0 - xy.y; Q->rho = hypot(xy.x, xy.y); if (Q->rho != 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 (fabs(lp.phi) > 2) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = phi1_(lp.phi, P->e, P->one_es); if (lp.phi == HUGE_VAL) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } } else lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; } else { lp.phi = (Q->c - lp.phi * lp.phi) / Q->n2; if (fabs(lp.phi) <= 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 PJ *setup(PJ *P) { struct pj_aea *Q = static_cast(P->opaque); P->inv = aea_e_inverse; P->fwd = aea_e_forward; if (fabs(Q->phi1) > M_HALFPI) { proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be <= 90°")); return pj_aea_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(Q->phi2) > M_HALFPI) { proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be <= 90°")); return pj_aea_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(Q->phi1 + Q->phi2) < EPS10) { proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + " "lat_2| should be > 0")); return pj_aea_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } double sinphi = sin(Q->phi1); Q->n = sinphi; double cosphi = cos(Q->phi1); const int secant = fabs(Q->phi1 - Q->phi2) >= EPS10; Q->ellips = (P->es > 0.); if (Q->ellips) { double ml1, m1; Q->en = pj_enfn(P->n); if (Q->en == nullptr) return pj_aea_destructor(P, 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); if (ml2 == ml1) return pj_aea_destructor(P, 0); Q->n = (m1 * m1 - m2 * m2) / (ml2 - ml1); if (Q->n == 0) { // Not quite, but es is very close to 1... proj_log_error(P, _("Invalid value for eccentricity")); return pj_aea_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } 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 *PJ_PROJECTION(aea) { struct pj_aea *Q = static_cast(calloc(1, sizeof(struct pj_aea))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_aea_destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->phi2 = pj_param(P->ctx, P->params, "rlat_2").f; return setup(P); } PJ *PJ_PROJECTION(leac) { struct pj_aea *Q = static_cast(calloc(1, sizeof(struct pj_aea))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_aea_destructor; 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; return setup(P); } #undef EPS10 #undef TOL7 #undef N_ITER #undef EPSILON #undef TOL proj-9.6.0/src/projections/aeqd.cpp000664 001754 001755 00000024754 14764566077 017201 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #include "geodesic.h" #include "proj.h" #include "proj_internal.h" #include #include namespace pj_aeqd_ns { enum Mode { N_POLE = 0, S_POLE = 1, EQUIT = 2, OBLIQ = 3 }; } namespace { // anonymous namespace struct pj_aeqd_data { double sinph0; double cosph0; double *en; double M1; double N1; double Mp; double He; double G; enum ::pj_aeqd_ns::Mode mode; struct geod_geodesic g; }; } // anonymous namespace PROJ_HEAD(aeqd, "Azimuthal Equidistant") "\n\tAzi, Sph&Ell\n\tlat_0 guam"; #define EPS10 1.e-10 #define TOL 1.e-14 static PJ *destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } static PJ_XY e_guam_fwd(PJ_LP lp, PJ *P) { /* Guam elliptical */ PJ_XY xy = {0.0, 0.0}; struct pj_aeqd_data *Q = static_cast(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 PJ_XY aeqd_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_aeqd_data *Q = static_cast(P->opaque); double coslam, cosphi, sinphi, rho; double azi1, azi2, s12; double lat1, lon1, lat2, lon2; coslam = cos(lp.lam); switch (Q->mode) { case pj_aeqd_ns::N_POLE: coslam = -coslam; PROJ_FALLTHROUGH; case pj_aeqd_ns::S_POLE: cosphi = cos(lp.phi); sinphi = sin(lp.phi); rho = fabs(Q->Mp - pj_mlfn(lp.phi, sinphi, cosphi, Q->en)); xy.x = rho * sin(lp.lam); xy.y = rho * coslam; break; case pj_aeqd_ns::EQUIT: case pj_aeqd_ns::OBLIQ: if (fabs(lp.lam) < EPS10 && fabs(lp.phi - P->phi0) < EPS10) { xy.x = xy.y = 0.; break; } lat1 = P->phi0 / DEG_TO_RAD; lon1 = 0; lat2 = lp.phi / DEG_TO_RAD; lon2 = lp.lam / DEG_TO_RAD; geod_inverse(&Q->g, lat1, lon1, lat2, lon2, &s12, &azi1, &azi2); azi1 *= DEG_TO_RAD; xy.x = s12 * sin(azi1); xy.y = s12 * cos(azi1); break; } return xy; } static PJ_XY aeqd_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_aeqd_data *Q = static_cast(P->opaque); if (Q->mode == pj_aeqd_ns::EQUIT) { const double cosphi = cos(lp.phi); const double sinphi = sin(lp.phi); const double coslam = cos(lp.lam); const double sinlam = sin(lp.lam); xy.y = cosphi * coslam; if (fabs(fabs(xy.y) - 1.) < TOL) { if (xy.y < 0.) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else return aeqd_e_forward(lp, P); } else { xy.y = acos(xy.y); xy.y /= sin(xy.y); xy.x = xy.y * cosphi * sinlam; xy.y *= sinphi; } } else if (Q->mode == pj_aeqd_ns::OBLIQ) { const double cosphi = cos(lp.phi); const double sinphi = sin(lp.phi); const double coslam = cos(lp.lam); const double sinlam = sin(lp.lam); const double cosphi_x_coslam = cosphi * coslam; xy.y = Q->sinph0 * sinphi + Q->cosph0 * cosphi_x_coslam; if (fabs(fabs(xy.y) - 1.) < TOL) { if (xy.y < 0.) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else return aeqd_e_forward(lp, P); } else { xy.y = acos(xy.y); xy.y /= sin(xy.y); xy.x = xy.y * cosphi * sinlam; xy.y *= Q->cosph0 * sinphi - Q->sinph0 * cosphi_x_coslam; } } else { double coslam = cos(lp.lam); double sinlam = sin(lp.lam); if (Q->mode == pj_aeqd_ns::N_POLE) { lp.phi = -lp.phi; coslam = -coslam; } if (fabs(lp.phi - M_HALFPI) < EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = (M_HALFPI + lp.phi); xy.x = xy.y * sinlam; xy.y *= coslam; } return xy; } static PJ_LP e_guam_inv(PJ_XY xy, PJ *P) { /* Guam elliptical */ PJ_LP lp = {0.0, 0.0}; struct pj_aeqd_data *Q = static_cast(P->opaque); double x2, t = 0.0; 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); t = sqrt(1. - t * t); lp.phi = pj_inv_mlfn(Q->M1 + xy.y - x2 * tan(lp.phi) * t, Q->en); } lp.lam = xy.x * t / cos(lp.phi); return lp; } static PJ_LP aeqd_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_aeqd_data *Q = static_cast(P->opaque); double azi1, azi2, s12, lat1, lon1, lat2, lon2; if ((s12 = hypot(xy.x, xy.y)) < EPS10) { lp.phi = P->phi0; lp.lam = 0.; return (lp); } if (Q->mode == pj_aeqd_ns::OBLIQ || Q->mode == pj_aeqd_ns::EQUIT) { lat1 = P->phi0 / DEG_TO_RAD; lon1 = 0; azi1 = atan2(xy.x, xy.y) / DEG_TO_RAD; // Clockwise from north geod_direct(&Q->g, lat1, lon1, azi1, s12, &lat2, &lon2, &azi2); lp.phi = lat2 * DEG_TO_RAD; lp.lam = lon2 * DEG_TO_RAD; } else { /* Polar */ lp.phi = pj_inv_mlfn( Q->mode == pj_aeqd_ns::N_POLE ? Q->Mp - s12 : Q->Mp + s12, Q->en); lp.lam = atan2(xy.x, Q->mode == pj_aeqd_ns::N_POLE ? -xy.y : xy.y); } return lp; } static PJ_LP aeqd_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_aeqd_data *Q = static_cast(P->opaque); double cosc, c_rh, sinc; c_rh = hypot(xy.x, xy.y); if (c_rh > M_PI) { if (c_rh - EPS10 > M_PI) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } c_rh = M_PI; } else if (c_rh < EPS10) { lp.phi = P->phi0; lp.lam = 0.; return (lp); } if (Q->mode == pj_aeqd_ns::OBLIQ || Q->mode == pj_aeqd_ns::EQUIT) { sinc = sin(c_rh); cosc = cos(c_rh); if (Q->mode == pj_aeqd_ns::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 == pj_aeqd_ns::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; } PJ *PJ_PROJECTION(aeqd) { struct pj_aeqd_data *Q = static_cast( calloc(1, sizeof(struct pj_aeqd_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; geod_init(&Q->g, 1, P->f); if (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) { Q->mode = P->phi0 < 0. ? pj_aeqd_ns::S_POLE : pj_aeqd_ns::N_POLE; Q->sinph0 = P->phi0 < 0. ? -1. : 1.; Q->cosph0 = 0.; } else if (fabs(P->phi0) < EPS10) { Q->mode = pj_aeqd_ns::EQUIT; Q->sinph0 = 0.; Q->cosph0 = 1.; } else { Q->mode = pj_aeqd_ns::OBLIQ; Q->sinph0 = sin(P->phi0); Q->cosph0 = cos(P->phi0); } if (P->es == 0.0) { P->inv = aeqd_s_inverse; P->fwd = aeqd_s_forward; } else { if (!(Q->en = pj_enfn(P->n))) return pj_default_destructor(P, 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 pj_aeqd_ns::N_POLE: Q->Mp = pj_mlfn(M_HALFPI, 1., 0., Q->en); break; case pj_aeqd_ns::S_POLE: Q->Mp = pj_mlfn(-M_HALFPI, -1., 0., Q->en); break; case pj_aeqd_ns::EQUIT: case pj_aeqd_ns::OBLIQ: Q->N1 = 1. / sqrt(1. - P->es * Q->sinph0 * Q->sinph0); Q->He = P->e / sqrt(P->one_es); Q->G = Q->sinph0 * Q->He; Q->He *= Q->cosph0; break; } P->inv = aeqd_e_inverse; P->fwd = aeqd_e_forward; } } return P; } #undef EPS10 #undef TOL proj-9.6.0/src/projections/airocean.cpp000664 001754 001755 00000111246 14764566077 020041 0ustar00e012349e012349000000 000000 /* enable predefined math constants M_* for MS Visual Studio */ #if defined(_MSC_VER) || defined(_WIN32) #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(airocean, "Airocean") "\n\tMisc, Sph&Ell"; namespace { // anonymous namespace struct pj_face { PJ_XYZ p1; PJ_XYZ p2; PJ_XYZ p3; }; } // namespace /* The vertices of the faces of the icosahedron are inspired by those used by Robert W. Gray. Original Reference: Robert W. Gray (1995) Exact Transformation Equations for Fuller's World Map, Vol. 32. Autumn, 1995, pp. 17-25. To accommodate for land parts that would be interrupted by using a mere icosahedron, some faces are split in two (Australia) and 3 (Japan) subfaces. The parameters below were computed using the script located at: scripts/build_airocean_parameters.py (relative to the root of the project) */ // Define the 23 faces and subfaces constexpr pj_face base_ico_faces[23] = { {{0.42015242670871, 0.07814524940278296, 0.9040825506150193}, {0.5188367303273644, 0.8354203803782358, 0.18133183755726245}, {0.9950094394362416, -0.09134779527642793, 0.040147175877166645}}, {{0.42015242670871, 0.07814524940278296, 0.9040825506150193}, {-0.4146822253203352, 0.6559624054348008, 0.6306758078914754}, {0.5188367303273644, 0.8354203803782358, 0.18133183755726245}}, {{0.42015242670871, 0.07814524940278296, 0.9040825506150193}, {-0.5154559599440418, -0.381716898287133, 0.7672009925177475}, {-0.4146822253203352, 0.6559624054348008, 0.6306758078914754}}, {{0.42015242670871, 0.07814524940278296, 0.9040825506150193}, {0.3557814025329447, -0.8435800024661781, 0.40223422660292557}, {-0.5154559599440418, -0.381716898287133, 0.7672009925177475}}, {{0.42015242670871, 0.07814524940278296, 0.9040825506150193}, {0.9950094394362416, -0.09134779527642793, 0.040147175877166645}, {0.3557814025329447, -0.8435800024661781, 0.40223422660292557}}, {{0.9950094394362416, -0.09134779527642793, 0.040147175877166645}, {0.5188367303273644, 0.8354203803782358, 0.18133183755726245}, {0.5154559599440418, 0.381716898287133, -0.7672009925177475}}, {{0.5154559599440418, 0.381716898287133, -0.7672009925177475}, {0.5188367303273644, 0.8354203803782358, 0.18133183755726245}, {-0.3557814025329447, 0.8435800024661781, -0.40223422660292557}}, {{-0.3557814025329447, 0.8435800024661781, -0.40223422660292557}, {0.5188367303273644, 0.8354203803782358, 0.18133183755726245}, {-0.4146822253203352, 0.6559624054348008, 0.6306758078914754}}, {{-0.5154559599440418, -0.381716898287133, 0.7672009925177475}, {-0.9950094394362416, 0.09134779527642793, -0.040147175877166645}, {-0.4146822253203352, 0.6559624054348008, 0.6306758078914754}}, {{-0.5154559599440418, -0.381716898287133, 0.7672009925177475}, {-0.5188367303273644, -0.8354203803782358, -0.18133183755726245}, {-0.9950094394362416, 0.09134779527642793, -0.040147175877166645}}, {{-0.5154559599440418, -0.381716898287133, 0.7672009925177475}, {0.3557814025329447, -0.8435800024661781, 0.40223422660292557}, {-0.5188367303273644, -0.8354203803782358, -0.18133183755726245}}, {{-0.5188367303273644, -0.8354203803782358, -0.18133183755726245}, {0.3557814025329447, -0.8435800024661781, 0.40223422660292557}, {0.4146822253203352, -0.6559624054348008, -0.6306758078914754}}, {{0.4146822253203352, -0.6559624054348008, -0.6306758078914754}, {0.3557814025329447, -0.8435800024661781, 0.40223422660292557}, {0.9950094394362416, -0.09134779527642793, 0.040147175877166645}}, {{0.5154559599440418, 0.381716898287133, -0.7672009925177475}, {0.4146822253203352, -0.6559624054348008, -0.6306758078914754}, {0.9950094394362416, -0.09134779527642793, 0.040147175877166645}}, {{-0.42015242670871, -0.07814524940278296, -0.9040825506150193}, {-0.3557814025329447, 0.8435800024661781, -0.40223422660292557}, {-0.9950094394362416, 0.09134779527642793, -0.040147175877166645}}, {{-0.42015242670871, -0.07814524940278296, -0.9040825506150193}, {-0.9950094394362416, 0.09134779527642793, -0.040147175877166645}, {-0.5188367303273644, -0.8354203803782358, -0.18133183755726245}}, {{-0.42015242670871, -0.07814524940278296, -0.9040825506150193}, {-0.5188367303273644, -0.8354203803782358, -0.18133183755726245}, {0.4146822253203352, -0.6559624054348008, -0.6306758078914754}}, {{-0.42015242670871, -0.07814524940278296, -0.9040825506150193}, {0.4146822253203352, -0.6559624054348008, -0.6306758078914754}, {0.5154559599440418, 0.381716898287133, -0.7672009925177475}}, {{-0.3557814025329447, 0.8435800024661781, -0.40223422660292557}, {-0.38796691462082733, 0.3827173765316976, -0.6531583886089725}, {0.5154559599440418, 0.381716898287133, -0.7672009925177475}}, {{-0.42015242670871, -0.07814524940278296, -0.9040825506150193}, {0.5154559599440418, 0.381716898287133, -0.7672009925177475}, {-0.38796691462082733, 0.3827173765316976, -0.6531583886089725}}, {{-0.9950094394362416, 0.09134779527642793, -0.040147175877166645}, {-0.3557814025329447, 0.8435800024661781, -0.40223422660292557}, {-0.5884910224298405, 0.5302967343924689, 0.06276480180379439}}, {{-0.3557814025329447, 0.8435800024661781, -0.40223422660292557}, {-0.4146822253203352, 0.6559624054348008, 0.6306758078914754}, {-0.5884910224298405, 0.5302967343924689, 0.06276480180379439}}, {{-0.9950094394362416, 0.09134779527642793, -0.040147175877166645}, {-0.5884910224298405, 0.5302967343924689, 0.06276480180379439}, {-0.4146822253203352, 0.6559624054348008, 0.6306758078914754}}}; // // Define the centers for each face or subface constexpr PJ_XYZ base_ico_centers[23] = { {0.6446661988241054, 0.27407261150153034, 0.37518718801648276}, {0.17476897723857973, 0.5231760117386065, 0.5720300653545857}, {-0.16999525285188902, 0.1174635855168169, 0.7673197836747474}, {0.08682595643253761, -0.3823838837835094, 0.6911725899118975}, {0.5903144228926321, -0.28559418277994103, 0.44882131769837047}, {0.6764340432358825, 0.375263161129647, -0.18190732636110615}, {0.22617042924615385, 0.6869057603771823, -0.3293677938544702}, {-0.0838756325086385, 0.778320929426405, 0.13659113961527075}, {-0.6417158749002062, 0.12186443414136523, 0.45257654151068544}, {-0.6764340432358825, -0.375263161129647, 0.18190732636110615}, {-0.22617042924615385, -0.6869057603771823, 0.32936779385447024}, {0.0838756325086385, -0.778320929426405, -0.13659113961527075}, {0.5884910224298405, -0.5302967343924689, -0.06276480180379439}, {0.6417158749002062, -0.12186443414136523, -0.4525765415106855}, {-0.5903144228926321, 0.28559418277994103, -0.44882131769837047}, {-0.6446661988241054, -0.2740726115015303, -0.37518718801648276}, {-0.17476897723857973, -0.5231760117386065, -0.5720300653545857}, {0.16999525285188902, -0.11746358551681692, -0.7673197836747474}, {-0.07609745240324339, 0.5360047590950029, -0.6075312025765486}, {-0.09755446046183185, 0.2287630084720159, -0.7748139772472463}, {-0.646427288133009, 0.48840817737835834, -0.12653886689209928}, {-0.4529848834277068, 0.6766130474311494, 0.09706879436411474}, {-0.6660608957288058, 0.4258689783678992, 0.2177644779393677}}; // // Define the normals for each face and subface constexpr PJ_XYZ base_ico_normals[23] = { {0.8112534709140969, 0.34489532376393844, 0.47213877364139306}, {0.21993077914046083, 0.6583691780274996, 0.7198475378926182}, {-0.21392348345014195, 0.1478171829550702, 0.9656017935214206}, {0.10926252787847963, -0.4811951572873208, 0.8697775121287253}, {0.7428567301586793, -0.35939416782780276, 0.5648005936517034}, {0.8512303986474292, 0.4722343788582682, -0.2289137388687808}, {0.2846148069787909, 0.8644080972654203, -0.4144792552473538}, {-0.10554981496139187, 0.9794457296411412, 0.17188746100093646}, {-0.8075407579970092, 0.15335524858988167, 0.5695261994882688}, {-0.8512303986474292, -0.4722343788582682, 0.22891373886878083}, {-0.2846148069787909, -0.8644080972654203, 0.4144792552473538}, {0.10554981496139185, -0.9794457296411412, -0.17188746100093638}, {0.7405621473854482, -0.6673299564565524, -0.07898376463267347}, {0.8075407579970092, -0.15335524858988167, -0.5695261994882688}, {-0.7428567301586793, 0.35939416782780276, -0.5648005936517034}, {-0.8112534709140969, -0.34489532376393844, -0.47213877364139306}, {-0.21993077914046083, -0.6583691780274996, -0.7198475378926182}, {0.21392348345014195, -0.1478171829550702, -0.9656017935214206}, {-0.10926252787847963, 0.4811951572873209, -0.8697775121287253}, {-0.10926252787847968, 0.4811951572873209, -0.8697775121287253}, {-0.740562147385448, 0.6673299564565524, 0.07898376463267354}, {-0.7405621473854481, 0.6673299564565524, 0.07898376463267347}, {-0.7405621473854481, 0.6673299564565525, 0.07898376463267329}}; // /* // The points of the Airocean projection map are deduced from the unfolded // net of the altered icosahedron defined above. The distances in the // projected 2d space are expressed in meter. // */ // // Define the 23 unfolded surfaces used (from icosahedron + split faces) constexpr pj_face base_airocean_faces[23] = { {{1.8211859946200586, 3.1543866727148018, 1.0}, {1.8211859946200586, 4.205848896953069, 1.0}, {2.7317789919300877, 3.6801177848339353, 1.0}}, {{1.8211859946200586, 3.1543866727148018, 1.0}, {0.9105929973100293, 3.6801177848339353, 1.0}, {1.8211859946200586, 4.205848896953069, 1.0}}, {{1.8211859946200586, 3.1543866727148018, 1.0}, {0.9105929973100293, 2.628655560595668, 1.0}, {0.9105929973100293, 3.6801177848339353, 1.0}}, {{1.8211859946200586, 3.1543866727148018, 1.0}, {1.8211859946200586, 2.1029244484765344, 1.0}, {0.9105929973100293, 2.628655560595668, 1.0}}, {{1.8211859946200586, 3.1543866727148018, 1.0}, {2.7317789919300877, 3.6801177848339353, 1.0}, {2.7317789919300877, 2.628655560595668, 1.0}}, {{2.7317789919300877, 3.6801177848339353, 1.0}, {1.8211859946200586, 4.205848896953069, 1.0}, {2.7317789919300877, 4.731580009072203, 1.0}}, {{1.8211859946200586, 5.257311121191336, 1.0}, {1.8211859946200586, 4.205848896953069, 1.0}, {0.9105929973100293, 4.731580009072203, 1.0}}, {{0.9105929973100293, 4.731580009072203, 1.0}, {1.8211859946200586, 4.205848896953069, 1.0}, {0.9105929973100293, 3.6801177848339353, 1.0}}, {{0.9105929973100293, 2.628655560595668, 1.0}, {0.0, 3.1543866727148018, 1.0}, {0.9105929973100293, 3.6801177848339353, 1.0}}, {{0.9105929973100293, 2.628655560595668, 1.0}, {0.9105929973100293, 1.5771933363574009, 1.0}, {0.0, 2.1029244484765344, 1.0}}, {{0.9105929973100293, 2.628655560595668, 1.0}, {1.8211859946200586, 2.1029244484765344, 1.0}, {0.9105929973100293, 1.5771933363574009, 1.0}}, {{0.9105929973100293, 1.5771933363574009, 1.0}, {1.8211859946200586, 2.1029244484765344, 1.0}, {1.8211859946200586, 1.0514622242382672, 1.0}}, {{1.8211859946200586, 1.0514622242382672, 1.0}, {1.8211859946200586, 2.1029244484765344, 1.0}, {2.7317789919300877, 1.5771933363574009, 1.0}}, {{1.8211859946200586, 0.0, 1.0}, {1.8211859946200586, 1.0514622242382672, 1.0}, {2.7317789919300877, 0.5257311121191336, 1.0}}, {{0.0, 5.257311121191336, 1.0}, {0.9105929973100293, 4.731580009072203, 1.0}, {0.0, 4.205848896953069, 1.0}}, {{0.0, 1.0514622242382672, 1.0}, {0.0, 2.1029244484765344, 1.0}, {0.9105929973100293, 1.5771933363574009, 1.0}}, {{0.9105929973100293, 0.5257311121191336, 1.0}, {0.9105929973100293, 1.5771933363574009, 1.0}, {1.8211859946200586, 1.0514622242382672, 1.0}}, {{0.9105929973100293, 0.5257311121191336, 1.0}, {1.8211859946200586, 1.0514622242382672, 1.0}, {1.8211859946200586, 0.0, 1.0}}, {{0.9105929973100293, 4.731580009072203, 1.0}, {0.45529649865501465, 4.994445565131769, 1.0}, {0.9105929973100293, 5.78304223331047, 1.0}}, {{0.9105929973100293, 0.5257311121191336, 1.0}, {1.8211859946200586, 0.0, 1.0}, {0.9105929973100293, 0.0, 1.0}}, {{0.0, 4.205848896953069, 1.0}, {0.9105929973100293, 4.731580009072203, 1.0}, {0.6070619982066862, 4.205848896953069, 1.0}}, {{0.9105929973100293, 4.731580009072203, 1.0}, {0.9105929973100293, 3.6801177848339353, 1.0}, {0.6070619982066862, 4.205848896953069, 1.0}}, {{0.0, 3.1543866727148018, 1.0}, {0.3035309991033431, 3.6801177848339353, 1.0}, {0.9105929973100293, 3.6801177848339353, 1.0}}}; // /* // The parameters here are extracted from the transition matrices // that allow converting a icosahedron face or subface to its // corresponding face in the Airocean projected space. // Since only a few parameters of those matrices are relevant, // the irrelevant ones has been discarded. // */ // // Icosahedron to Airocean (forward) constexpr double base_ico_air_trans[23][4][4] = { {{0.5771127852625935, -0.6019490725122667, -0.5519041105011566, 2.1247169937234016}, {0.09385435001257117, 0.7202114479424703, -0.6873767753105484, 3.6801177848339357}, {0.8112534709140967, 0.3448953237639384, 0.4721387736413929, -0.7946544722917659}, {0.0, 0.0, 0.0, 1.0}}, {{0.9709901201198636, -0.2187361325341673, -0.09660585361978567, 1.5176549955167156}, {0.09385435001257089, 0.7202114479424708, -0.687376775310548, 3.6801177848339353}, {0.21993077914046077, 0.6583691780274995, 0.7198475378926181, -0.7946544722917659}, {0.0, 0.0, 0.0, 1.0}}, {{0.9721374115064793, -0.06476823821979226, 0.2252863255224028, 1.2141239964133725}, {0.09584151698527507, 0.9868916636293633, -0.12984316647721492, 3.1543866727148013}, {-0.21392348345014195, 0.1478171829550702, 0.9656017935214207, -0.7946544722917663}, {0.0, 0.0, 0.0, 1.0}}, {{0.9921258753731454, -0.0010987106726278763, -0.1252399307326839, 1.5176549955167151}, {0.06122048200295415, 0.8766128070237673, 0.47728611874350335, 2.6286555605956674}, {0.10926252787847969, -0.4811951572873209, 0.8697775121287256, -0.7946544722917663}, {0.0, 0.0, 0.0, 1.0}}, {{0.28030414798915965, -0.5991800396948614, -0.7499419075177327, 2.428247992826745}, {0.6079419898954396, 0.7154153424148981, -0.34436524905882676, 3.1543866727148013}, {0.742856730158679, -0.3593941678278027, 0.5648005936517032, -0.794654472291766}, {0.0, 0.0, 0.0, 1.0}}, {{0.25960661905056537, -0.7580069591045613, -0.5983559586852888, 2.428247992826744}, {-0.4560824615830708, 0.4499112594427941, -0.7678337364709403, 4.205848896953069}, {0.8512303986474292, 0.47223437885826813, -0.22891373886878083, -0.7946544722917661}, {0.0, 0.0, 0.0, 1.0}}, {{0.958636570067365, -0.258086064605963, 0.12003128669511368, 1.5176549955167158}, {-0.003215303703157293, -0.43149765310854393, -0.9021083289627215, 4.731580009072202}, {0.2846148069787908, 0.8644080972654206, -0.41447925524735385, -0.7946544722917662}, {0.0, 0.0, 0.0, 1.0}}, {{0.992834940445074, 0.09405868118990741, 0.07370037668995856, 1.2141239964133723}, {0.056018011327093935, 0.17843493822832973, -0.982355819052552, 4.205848896953068}, {-0.10554981496139189, 0.9794457296411413, 0.17188746100093644, -0.7946544722917662}, {0.0, 0.0, 0.0, 1.0}}, {{0.5819727895662967, 0.05026939415592827, 0.8116530417706931, 0.6070619982066865}, {0.09584151698527442, 0.9868916636293634, -0.1298431664772149, 3.1543866727148013}, {-0.8075407579970093, 0.1533552485898817, 0.5695261994882689, -0.7946544722917663}, {0.0, 0.0, 0.0, 1.0}}, {{0.5247823074767625, -0.7686380596783918, 0.36578554232391575, 0.6070619982066867}, {0.0032153037031566203, 0.4314976531085445, 0.9021083289627214, 2.102924448476535}, {-0.8512303986474292, -0.47223437885826813, 0.22891373886878078, -0.7946544722917661}, {0.0, 0.0, 0.0, 1.0}}, {{0.9586365700673652, -0.2580860646059632, 0.12003128669511379, 1.2141239964133719}, {0.003215303703156878, 0.43149765310854465, 0.9021083289627218, 2.1029244484765344}, {-0.2846148069787909, -0.8644080972654204, 0.4144792552473538, -0.7946544722917662}, {0.0, 0.0, 0.0, 1.0}}, {{0.9928349404450738, 0.0940586811899076, 0.07370037668995869, 1.5176549955167153}, {-0.05601801132709388, -0.17843493822832968, 0.9823558190525513, 1.5771933363574009}, {0.10554981496139189, -0.9794457296411413, -0.17188746100093644, -0.7946544722917662}, {0.0, 0.0, 0.0, 1.0}}, {{0.6696489291164518, 0.7230710214322986, 0.1695246580826539, 2.1247169937234016}, {-0.05601801132709365, -0.17843493822832943, 0.9823558190525516, 1.5771933363574009}, {0.7405621473854482, -0.6673299564565524, -0.07898376463267347, -0.7946544722917662}, {0.0, 0.0, 0.0, 1.0}}, {{0.5819727895662965, 0.050269394155928314, 0.811653041770693, 2.1247169937234016}, {-0.09584151698527484, -0.9868916636293626, 0.129843166477215, 0.5257311121191333}, {0.8075407579970093, -0.1533552485898817, -0.5695261994882689, -0.7946544722917663}, {0.0, 0.0, 0.0, 1.0}}, {{0.3863411332821331, 0.9191578806358752, 0.07674189989336716, 0.30353099910334314}, {0.5467215078924839, -0.16119746460886833, -0.8216513678023304, 4.731580009072203}, {-0.742856730158679, 0.35939416782780265, -0.5648005936517032, -0.794654472291766}, {0.0, 0.0, 0.0, 1.0}}, {{0.20727614126473407, -0.9246959462706865, 0.31933369413978446, 0.303530999103343}, {-0.5467215078924849, 0.1611974646088691, 0.8216513678023303, 1.5771933363574007}, {-0.8112534709140967, -0.34489532376393833, -0.47213877364139295, -0.794654472291766}, {0.0, 0.0, 0.0, 1.0}}, {{0.9709901201198639, -0.21873613253416718, -0.09660585361978535, 1.2141239964133725}, {-0.09385435001257073, -0.7202114479424704, 0.6873767753105484, 1.0514622242382674}, {-0.21993077914046086, -0.6583691780274995, -0.719847537892618, -0.794654472291766}, {0.0, 0.0, 0.0, 1.0}}, {{0.9721374115064794, -0.0647682382197923, 0.2252863255224031, 1.5176549955167156}, {-0.09584151698527477, -0.9868916636293626, 0.12984316647721514, 0.5257311121191336}, {0.21392348345014198, -0.1478171829550702, -0.9656017935214205, -0.7946544722917661}, {0.0, 0.0, 0.0, 1.0}}, {{0.5490814303330593, 0.7586196048290541, 0.350721938339208, 0.6070619982066862}, {0.8285959708235409, -0.43925791486578636, -0.3471040209544599, 5.257311121191335}, {-0.10926252787847968, 0.48119515728732093, -0.8697775121287254, -0.7946544722917663}, {0.0, 0.0, 0.0, 1.0}}, {{0.9921258753731453, -0.0010987106726278503, -0.125239930732684, 1.2141239964133725}, {-0.061220482002954366, -0.8766128070237673, -0.4772861187435034, 0.0}, {-0.10926252787847965, 0.48119515728732093, -0.8697775121287254, -0.7946544722917663}, {0.0, 0.0, 0.0, 1.0}}, {{0.6696489291164521, 0.7230710214322988, 0.169524658082654, 0.607061998206686}, {0.05601801132709396, 0.17843493822832968, -0.9823558190525518, 4.205848896953069}, {-0.7405621473854482, 0.6673299564565525, 0.07898376463267334, -0.7946544722917662}, {0.0, 0.0, 0.0, 1.0}}, {{0.6696489291164525, 0.7230710214322987, 0.1695246580826538, 0.6070619982066863}, {0.05601801132709517, 0.1784349382283307, -0.9823558190525518, 4.205848896953069}, {-0.7405621473854483, 0.6673299564565526, 0.07898376463267348, -0.7946544722917663}, {0.0, 0.0, 0.0, 1.0}}, {{0.28631144367947836, 0.20700632128770896, 0.9355074238963061, 0.3035309991033428}, {0.6079419898954391, 0.7154153424148978, -0.3443652490588263, 3.6801177848339357}, {-0.7405621473854481, 0.6673299564565525, 0.07898376463267341, -0.7946544722917661}, {0.0, 0.0, 0.0, 1.0}}}; // // Airocean to Icosahedron (inverse) constexpr double base_air_ico_trans[23][4][4] = { {{0.577112785262594, 0.09385435001257074, 0.8112534709140972, -0.9269302059836626}, {-0.6019490725122669, 0.7202114479424705, 0.3448953237639385, -1.0974189231897016}, {-0.5519041105011576, -0.6873767753105482, 0.47213877364139284, 4.0774547262062395}, {0.0, 0.0, 0.0, 1.0}}, {{0.970990120119864, 0.09385435001257075, 0.21993077914046097, -1.6442540918239978}, {-0.21873613253416777, 0.7202114479424705, 0.6583691780274992, -1.7953209624349933}, {-0.09660585361978517, -0.6873767753105485, 0.7198475378926187, 3.248271917398959}, {0.0, 0.0, 0.0, 1.0}}, {{0.9721374115064793, 0.09584151698527468, -0.21392348345014173, -1.6526118158442071}, {-0.06476823821979319, 0.9868916636293628, 0.14781718295507035, -2.916937653420916}, {0.22528632552240307, -0.12984316647721503, 0.9656017935214205, 0.9033698036730199}, {0.0, 0.0, 0.0, 1.0}}, {{0.9921258753731454, 0.061220482002954296, 0.10926252787847969, -1.5798063949483236}, {-0.0010987106726281115, 0.8766128070237668, -0.48119515728732043, -2.68502954971497}, {-0.12523993073268413, 0.4772861187435032, 0.8697775121287253, -0.3733772136037109}, {0.0, 0.0, 0.0, 1.0}}, {{0.2803041479891603, 0.6079419898954391, 0.7428567301586791, -2.0080176725529477}, {-0.5991800396948611, 0.7154153424148979, -0.35939416782780287, -1.0873330756182955}, {-0.7499419075177335, -0.3443652490588265, 0.5648005936517035, 3.3561274015422433}, {0.0, 0.0, 0.0, 1.0}}, {{0.2596066190505654, -0.4560824615830712, 0.8512303986474292, 1.9642587095706099}, {-0.7580069591045617, 0.4499112594427949, 0.47223437885826836, 0.3236332638697585}, {-0.5983559586852887, -0.7678337364709401, -0.22891373886878078, 4.500442002892026}, {0.0, 0.0, 0.0, 1.0}}, {{0.958636570067365, -0.003215303703156967, 0.28461480697879094, -1.2134956834766393}, {-0.2580860646059631, -0.43149765310854504, 0.8644080972654203, 3.1202570350096352}, {0.12003128669511316, -0.9021083289627222, -0.4144792552473535, 3.756863859611938}, {0.0, 0.0, 0.0, 1.0}}, {{0.992834940445074, 0.05601801132709367, -0.10554981496139178, -1.5249036493302057}, {0.09405868118990754, 0.17843493822832954, 0.9794457296411412, -0.08634836060276646}, {0.07370037668995799, -0.9823558190525513, 0.1718874610009362, 4.17874988170889}, {0.0, 0.0, 0.0, 1.0}}, {{0.581972789566297, 0.09584151698527493, -0.8075407579970092, -1.297330643307362}, {0.05026939415592872, 0.986891663629363, 0.15335524858988142, -3.0216901158893736}, {0.8116530417706934, -0.12984316647721506, 0.5695261994882689, 0.3694283780016493}, {0.0, 0.0, 0.0, 1.0}}, {{0.5247823074767624, 0.0032153037031565812, -0.8512303986474291, -1.0017709802028867}, {-0.7686380596783923, 0.431497653108545, -0.47223437885826824, -0.8160591689057779}, {0.36578554232391597, 0.9021083289627221, 0.22891373886878089, -1.937212836027187}, {0.0, 0.0, 0.0, 1.0}}, {{0.9586365700673654, 0.0032153037031565886, -0.2846148069787907, -1.3968356335709964}, {-0.258086064605963, 0.43149765310854504, -0.8644080972654202, -1.2809642403813966}, {0.12003128669511362, 0.9021083289627224, 0.41447925524735396, -1.7134307317924613}, {0.0, 0.0, 0.0, 1.0}}, {{0.9928349404450739, -0.05601801132709361, 0.10554981496139221, -1.3345540404002831}, {0.09405868118990741, -0.17843493822832956, -0.9794457296411411, -0.639643161258916}, {0.07370037668995856, 0.982355819052552, -0.17188746100093616, -1.7978079362118518}, {0.0, 0.0, 0.0, 1.0}}, {{0.6696489291164524, -0.056018011327093886, 0.7405621473854481, -0.7459722029114777}, {0.723071021432299, -0.1784349382283297, -0.6673299564565522, -1.7851916257515466}, {0.16952465808265363, 0.9823558190525522, -0.07898376463267373, -1.9723217754287594}, {0.0, 0.0, 0.0, 1.0}}, {{0.5819727895662968, -0.09584151698527477, 0.8075407579970091, -0.5444247336640644}, {0.05026939415592821, -0.9868916636293631, -0.15335524858988164, 0.29016698169232114}, {0.8116530417706935, 0.1298431664772151, -0.569526199488269, -2.2453721446813035}, {0.0, 0.0, 0.0, 1.0}}, {{0.3863411332821329, 0.5467215078924852, -0.7428567301586795, -3.2944374903463687}, {0.9191578806358753, -0.16119746460886916, 0.3593941678278029, 0.7693199739932717}, {0.07674189989336772, -0.8216513678023304, -0.564800593651703, 3.4155943230742447}, {0.0, 0.0, 0.0, 1.0}}, {{0.20727614126473443, -0.546721507892485, -0.8112534709140969, 0.15470458601882164}, {-0.9246959462706867, 0.16119746460886913, -0.3448953237639384, -0.24763829408199384}, {0.31933369413978435, 0.8216513678023302, -0.4721387736413931, -1.768017925352872}, {0.0, 0.0, 0.0, 1.0}}, {{0.9709901201198642, -0.09385435001257068, -0.21993077914046077, -1.2549870787377553}, {-0.2187361325341676, -0.7202114479424703, -0.6583691780274997, 0.4996719066292349}, {-0.09660585361978546, 0.6873767753105482, -0.7198475378926181, -1.1774892933385632}, {0.0, 0.0, 0.0, 1.0}}, {{0.9721374115064794, -0.09584151698527459, 0.21392348345014212, -1.2549870787377553}, {-0.06476823821979266, -0.9868916636293628, -0.14781718295507024, 0.49967190662923483}, {0.2252863255224028, 0.12984316647721506, -0.9656017935214204, -1.1774892933385632}, {0.0, 0.0, 0.0, 1.0}}, {{0.5490814303330579, 0.8285959708235412, -0.10926252787847955, -4.776339239093644}, {0.7586196048290552, -0.4392579148657884, 0.4811951572873209, 2.231170271492442}, {0.3507219383392087, -0.3471040209544594, -0.8697775121287253, 0.9207512789590909}, {0.0, 0.0, 0.0, 1.0}}, {{0.9921258753731456, -0.061220482002954546, -0.10926252787847962, -1.2913897891856965}, {-0.00109871067262767, -0.8766128070237672, 0.48119515728732093, 0.38371785477626236}, {-0.12523993073268386, -0.47728611874350324, -0.8697775121287252, -0.5391157847001973}, {0.0, 0.0, 0.0, 1.0}}, {{0.6696489291164526, 0.0560180113270932, -0.7405621473854482, -1.2306127305858023}, {0.723071021432299, 0.17843493822832968, 0.6673299564565522, -0.6591225928490807}, {0.16952465808265377, -0.9823558190525503, 0.07898376463267326, 4.09149296210043}, {0.0, 0.0, 0.0, 1.0}}, {{0.669648929116452, 0.056018011327093706, -0.740562147385448, -1.230612730585803}, {0.7230710214322988, 0.1784349382283296, 0.6673299564565524, -0.6591225928490807}, {0.1695246580826554, -0.9823558190525514, 0.0789837646326731, 4.091492962100434}, {0.0, 0.0, 0.0, 1.0}}, {{0.2863114436794785, 0.6079419898954399, -0.7405621473854486, -2.9126935501461353}, {0.2070063212877089, 0.7154153424148983, 0.6673299564565521, -2.165348826292825}, {0.935507423896306, -0.3443652490588271, 0.07898376463267351, 1.046113976300111}, {0.0, 0.0, 0.0, 1.0}}}; // By default the resulting orientation of the projection is vertical // the following transforms are used to alter the projection data // so that the resulting orientation is horizontal instead constexpr double orient_horizontal_trans[4][4] = { {0.0, -1.0, 0.0, 5.78304223331047}, {1.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}; constexpr double orient_horizontal_inv_trans[4][4] = { {0.0, 1.0, 0.0, 0.0}, {-1.0, -0.0, -0.0, 5.78304223331047}, {0.0, 0.0, 1.0, 0.0}, {0.0, 0.0, 0.0, 1.0}}; namespace { // anonymous namespace struct pj_airocean_data { pj_face ico_faces[23] = {}; PJ_XYZ ico_centers[23] = {}; PJ_XYZ ico_normals[23] = {}; pj_face airocean_faces[23] = {}; double ico_air_trans[23][4][4] = {}; double air_ico_trans[23][4][4] = {}; void initialize() { memcpy((char *)this->ico_faces, (char *)base_ico_faces, sizeof(pj_face[23])); memcpy((char *)this->airocean_faces, (char *)base_airocean_faces, sizeof(pj_face[23])); memcpy(this->ico_centers, base_ico_centers, sizeof(PJ_XYZ[23])); memcpy(this->ico_normals, base_ico_normals, sizeof(PJ_XYZ[23])); memcpy(this->ico_air_trans, base_ico_air_trans, sizeof(double[23][4][4])); memcpy(this->air_ico_trans, base_air_ico_trans, sizeof(double[23][4][4])); } static void mat_mult(const double m1[4][4], const double m2[4][4], double res[4][4]) { for (unsigned char i = 0; i < 4; ++i) for (unsigned char j = 0; j < 4; ++j) res[i][j] = (m1[i][0] * m2[0][j]) + (m1[i][1] * m2[1][j]) + (m1[i][2] * m2[2][j]) + (m1[i][3] * m2[3][j]); } static PJ_XYZ vec_mult(const double m[4][4], const PJ_XYZ *v) { double x = m[0][0] * v->x + m[0][1] * v->y + m[0][2] * v->z + m[0][3]; double y = m[1][0] * v->x + m[1][1] * v->y + m[1][2] * v->z + m[1][3]; double z = m[2][0] * v->x + m[2][1] * v->y + m[2][2] * v->z + m[2][3]; return {x, y, z}; } void transform(const double m[4][4], const double inv_m[4][4]) { for (unsigned char i = 0; i < 23; i++) { mat_mult(m, base_ico_air_trans[i], this->ico_air_trans[i]); mat_mult(base_air_ico_trans[i], inv_m, this->air_ico_trans[i]); this->airocean_faces[i] = { vec_mult(m, &base_airocean_faces[i].p1), vec_mult(m, &base_airocean_faces[i].p2), vec_mult(m, &base_airocean_faces[i].p3), }; } } }; } // anonymous namespace inline double det(const PJ_XYZ *u, const PJ_XYZ *v, const PJ_XYZ *w) { return (u->x * (v->y * w->z - v->z * w->y) - v->x * (u->y * w->z - u->z * w->y) + w->x * (u->y * v->z - u->z * v->y)); } inline bool is_point_in_face(const PJ_XYZ *p, const pj_face *face) { return (det(p, &face->p2, &face->p3) <= 0 && det(&face->p1, p, &face->p3) <= 0 && det(&face->p1, &face->p2, p) <= 0); } inline unsigned char get_ico_face_index(const pj_airocean_data *pj_data, const PJ_XYZ *p) { for (unsigned char i = 0; i < 23; i++) { if (is_point_in_face(p, &pj_data->ico_faces[i])) { return i; } } return 23; } inline unsigned char get_dym_face_index(const pj_airocean_data *pj_data, const PJ_XY *p) { const PJ_XYZ pp{p->x, p->y, 1.0}; for (unsigned char i = 0; i < 23; i++) { if (is_point_in_face(&pp, &pj_data->airocean_faces[i])) { return i; } } return 23; } inline PJ_XY ico_to_dym(const pj_airocean_data *pj_data, const PJ_XYZ *p, unsigned char face_id) { return PJ_XY{ pj_data->ico_air_trans[face_id][0][0] * p->x + // * -1 pj_data->ico_air_trans[face_id][0][1] * p->y + // pj_data->ico_air_trans[face_id][0][2] * p->z + // pj_data->ico_air_trans[face_id][0][3], // +1000 pj_data->ico_air_trans[face_id][1][0] * p->x + pj_data->ico_air_trans[face_id][1][1] * p->y + pj_data->ico_air_trans[face_id][1][2] * p->z + pj_data->ico_air_trans[face_id][1][3], }; } inline PJ_XYZ dym_to_ico(const pj_airocean_data *pj_data, const PJ_XY *p, unsigned char face_id) { return PJ_XYZ{ pj_data->air_ico_trans[face_id][0][0] * p->x + // * -1 pj_data->air_ico_trans[face_id][0][1] * p->y + // pj_data->air_ico_trans[face_id][0][3], // + [face_id][0][0] * 1000 pj_data->air_ico_trans[face_id][1][0] * p->x + pj_data->air_ico_trans[face_id][1][1] * p->y + pj_data->air_ico_trans[face_id][1][3], pj_data->air_ico_trans[face_id][2][0] * p->x + pj_data->air_ico_trans[face_id][2][1] * p->y + pj_data->air_ico_trans[face_id][2][3], }; } inline PJ_XYZ cartesian_to_ico(const pj_airocean_data *pj_data, const PJ_XYZ *p, unsigned char face_id) { const PJ_XYZ *center = &pj_data->ico_centers[face_id]; const PJ_XYZ *normal = &pj_data->ico_normals[face_id]; // cppcheck-suppress unreadVariable double a = 1.0 - (center->x * normal->x + center->y * normal->y + center->z * normal->z) / (p->x * normal->x + p->y * normal->y + p->z * normal->z); return PJ_XYZ{ p->x - a * p->x, p->y - a * p->y, p->z - a * p->z, }; } // ============================================ // // The Forward and Inverse Functions // // ============================================ static PJ_XY airocean_forward(PJ_LP lp, PJ *P) { const struct pj_airocean_data *Q = static_cast(P->opaque); double lat; /* 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 != 0.0) { double one_minus_f = 1.0 - (P->a - P->b) / P->a; double one_minus_f_squared = one_minus_f * one_minus_f; lat = atan(one_minus_f_squared * tan(lp.phi)); } else { lat = lp.phi; } // Convert the lat/long to x,y,z on the unit sphere double x, y, z; double sinlat, coslat; double sinlon, coslon; sinlat = sin(lat); coslat = cos(lat); sinlon = sin(lp.lam); coslon = cos(lp.lam); x = coslat * coslon; y = coslat * sinlon; z = sinlat; PJ_XYZ cartesianPoint{x, y, z}; unsigned char face_id = get_ico_face_index(Q, &cartesianPoint); if (face_id == 23) { // not sure this can happen proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); PJ_XY xy; xy.x = HUGE_VAL; xy.y = HUGE_VAL; return xy; } PJ_XYZ icoPoint = cartesian_to_ico(Q, &cartesianPoint, face_id); PJ_XY airoceanPoint = ico_to_dym(Q, &icoPoint, face_id); return airoceanPoint; } static PJ_LP airocean_inverse(PJ_XY xy, PJ *P) { const struct pj_airocean_data *Q = static_cast(P->opaque); PJ_LP lp = {0.0, 0.0}; unsigned char face_id = get_dym_face_index(Q, &xy); if (face_id == 23) { // Point lies outside icosahedron net faces proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; } PJ_XYZ sphereCoords = dym_to_ico(Q, &xy, face_id); double norm = sqrt((sphereCoords.x * sphereCoords.x) + (sphereCoords.y * sphereCoords.y) + (sphereCoords.z * sphereCoords.z)); double q = sphereCoords.x / norm; double r = sphereCoords.y / norm; double s = sphereCoords.z / norm; // Get the spherical angles from the x y z lp.phi = acos(-s) - M_HALFPI; lp.lam = atan2(r, q); /* Apply the shift from the sphere to the ellipsoid as described * in [LK12]. */ if (P->es != 0.0) { int invert_sign; volatile double tanphi, xa; invert_sign = (lp.phi < 0.0 ? 1 : 0); tanphi = tan(lp.phi); double one_minus_f = 1.0 - (P->a - P->b) / P->a; double a_squared = P->a * P->a; xa = P->b / sqrt(tanphi * tanphi + one_minus_f * one_minus_f); lp.phi = atan(sqrt(a_squared - xa * xa) / (one_minus_f * xa)); if (invert_sign) { lp.phi = -lp.phi; } } return lp; } PJ *PJ_PROJECTION(airocean) { char *opt; struct pj_airocean_data *Q = static_cast( calloc(1, sizeof(struct pj_airocean_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->initialize(); P->opaque = Q; opt = pj_param(P->ctx, P->params, "sorient").s; if (opt) { if (!strcmp(opt, "horizontal")) { Q->transform(orient_horizontal_trans, orient_horizontal_inv_trans); } else if (!strcmp(opt, "vertical")) { // the orientation is vertical by default. } else { proj_log_error(P, _("Invalid value for orient: only vertical or " "horizontal are supported")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } P->inv = airocean_inverse; P->fwd = airocean_forward; return P; } proj-9.6.0/src/projections/airy.cpp000664 001754 001755 00000011436 14764566077 017224 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #include "proj.h" #include "proj_internal.h" #include PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv\n\tno_cut lat_b="; namespace { // anonymous namespace enum Mode { N_POLE = 0, S_POLE = 1, EQUIT = 2, OBLIQ = 3 }; } // anonymous namespace namespace { // anonymous namespace struct pj_airy { double p_halfpi; double sinph0; double cosph0; double Cb; enum Mode mode; int no_cut; /* do not cut at hemisphere limit */ }; } // anonymous namespace #define EPS 1.e-10 static PJ_XY airy_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_airy *Q = static_cast(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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } s = 1. - cosz; if (fabs(s) > EPS) { t = 0.5 * (1. + cosz); if (t == 0) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } 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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } lp.phi *= 0.5; if (lp.phi > 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; } PJ *PJ_PROJECTION(airy) { double beta; struct pj_airy *Q = static_cast(calloc(1, sizeof(struct pj_airy))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 = airy_s_forward; P->es = 0.; return P; } #undef EPS proj-9.6.0/src/projections/aitoff.cpp000664 001754 001755 00000021047 14764566077 017527 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #include #include #include "proj.h" #include "proj_internal.h" namespace pj_aitoff_ns { enum Mode { AITOFF = 0, WINKEL_TRIPEL = 1 }; } namespace { // anonymous namespace struct pj_aitoff_data { double cosphi1; enum pj_aitoff_ns::Mode mode; }; } // anonymous namespace PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph"; PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1"; #if 0 FORWARD(aitoff_s_forward); /* spheroid */ #endif static PJ_XY aitoff_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_aitoff_data *Q = static_cast(P->opaque); double c, d; #if 0 // Likely domain of validity for wintri in +over mode. Should be confirmed // Cf https://lists.osgeo.org/pipermail/gdal-dev/2023-April/057164.html if (Q->mode == WINKEL_TRIPEL && fabs(lp.lam) > 2 * M_PI) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } #endif c = 0.5 * lp.lam; d = acos(cos(lp.phi) * cos(c)); if (d != 0.0) { /* 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 == pj_aitoff_ns::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 PJ_LP aitoff_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_aitoff_data *Q = static_cast(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; } /* initial 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; const double denom = pow(C, 1.5); if (denom == 0) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } D = acos(D) / denom; 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 == pj_aitoff_ns::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; dp = f1p * f2l - f2p * f1l; dl = (f2 * f1p - f1 * f2p) / dp; dp = (f1 * f2l - f2 * f1l) / dp; dl = fmod(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 == pj_aitoff_ns::AITOFF)) 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))) != 0.0) { /* Aitoff */ y = 1. / sin(D); x = 2. * D * cos(lp.phi) * sin(C) * y; y *= D * sin(lp.phi); } else x = y = 0.; if (Q->mode == pj_aitoff_ns::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) { proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); /* fprintf(stderr, "Warning: Accuracy of 1e-12 not reached. Last * increments: dlat=%e and dlon=%e\n", dp, dl); */ } return lp; } static PJ *pj_aitoff_setup(PJ *P) { P->inv = aitoff_s_inverse; P->fwd = aitoff_s_forward; P->es = 0.; return P; } PJ *PJ_PROJECTION(aitoff) { struct pj_aitoff_data *Q = static_cast( calloc(1, sizeof(struct pj_aitoff_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->mode = pj_aitoff_ns::AITOFF; return pj_aitoff_setup(P); } PJ *PJ_PROJECTION(wintri) { struct pj_aitoff_data *Q = static_cast( calloc(1, sizeof(struct pj_aitoff_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->mode = pj_aitoff_ns::WINKEL_TRIPEL; if (pj_param(P->ctx, P->params, "tlat_1").i) { if ((Q->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f)) == 0.) { proj_log_error( P, _("Invalid value for lat_1: |lat_1| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else /* 50d28' or acos(2/pi) */ Q->cosphi1 = 0.636619772367581343; return pj_aitoff_setup(P); } proj-9.6.0/src/projections/august.cpp000664 001754 001755 00000001322 14764566077 017561 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv"; #define M 1.333333333333333 static PJ_XY august_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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); lp.lam *= .5; c = 1. + c1 * cos(lp.lam); x1 = sin(lp.lam) * c1 / c; y1 = t / c; x12 = x1 * x1; y12 = y1 * y1; xy.x = M * x1 * (3. + x12 - 3. * y12); xy.y = M * y1 * (3. + 3. * x12 - y12); return (xy); } PJ *PJ_PROJECTION(august) { P->inv = nullptr; P->fwd = august_s_forward; P->es = 0.; return P; } proj-9.6.0/src/projections/bacon.cpp000664 001754 001755 00000004052 14764566077 017336 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" #define HLFPI2 2.46740110027233965467 /* (pi/2)^2 */ #define EPS 1e-10 namespace { // anonymous namespace struct pj_bacon { int bacn; int ortl; }; } // anonymous namespace 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 PJ_XY bacon_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_bacon *Q = static_cast(P->opaque); double ax, f; xy.y = Q->bacn ? M_HALFPI * sin(lp.phi) : lp.phi; ax = fabs(lp.lam); if (ax >= 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); } PJ *PJ_PROJECTION(bacon) { struct pj_bacon *Q = static_cast(calloc(1, sizeof(struct pj_bacon))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->bacn = 1; Q->ortl = 0; P->es = 0.; P->fwd = bacon_s_forward; return P; } PJ *PJ_PROJECTION(apian) { struct pj_bacon *Q = static_cast(calloc(1, sizeof(struct pj_bacon))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->bacn = Q->ortl = 0; P->es = 0.; P->fwd = bacon_s_forward; return P; } PJ *PJ_PROJECTION(ortel) { struct pj_bacon *Q = static_cast(calloc(1, sizeof(struct pj_bacon))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->bacn = 0; Q->ortl = 1; P->es = 0.; P->fwd = bacon_s_forward; return P; } #undef HLFPI2 #undef EPS proj-9.6.0/src/projections/bertin1953.cpp000664 001754 001755 00000004661 14764566077 020067 0ustar00e012349e012349000000 000000 /* Created by Jacques Bertin in 1953, this projection was the go-to choice of the French cartographic school when they wished to represent phenomena on a global scale. Formula designed by Philippe Rivière, 2017. https://visionscarto.net/bertin-projection-1953 Port to PROJ by Philippe Rivière, 21 September 2018 */ #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(bertin1953, "Bertin 1953") "\n\tMisc Sph no inv."; namespace { // anonymous namespace struct pj_bertin1953 { double cos_delta_phi, sin_delta_phi, cos_delta_gamma, sin_delta_gamma, deltaLambda; }; } // anonymous namespace static PJ_XY bertin1953_s_forward(PJ_LP lp, PJ *P) { PJ_XY xy = {0.0, 0.0}; struct pj_bertin1953 *Q = static_cast(P->opaque); double fu = 1.4, k = 12., w = 1.68, d; /* Rotate */ double cosphi, x, y, z, z0; lp.lam += PJ_TORAD(-16.5); cosphi = cos(lp.phi); x = cos(lp.lam) * cosphi; y = sin(lp.lam) * cosphi; z = sin(lp.phi); z0 = z * Q->cos_delta_phi + x * Q->sin_delta_phi; lp.lam = atan2(y * Q->cos_delta_gamma - z0 * Q->sin_delta_gamma, x * Q->cos_delta_phi - z * Q->sin_delta_phi); z0 = z0 * Q->cos_delta_gamma + y * Q->sin_delta_gamma; lp.phi = asin(z0); lp.lam = adjlon(lp.lam); /* Adjust pre-projection */ if (lp.lam + lp.phi < -fu) { d = (lp.lam - lp.phi + 1.6) * (lp.lam + lp.phi + fu) / 8.; lp.lam += d; lp.phi -= 0.8 * d * sin(lp.phi + M_PI / 2.); } /* Project with Hammer (1.68,2) */ cosphi = cos(lp.phi); d = sqrt(2. / (1. + cosphi * cos(lp.lam / 2.))); xy.x = w * d * cosphi * sin(lp.lam / 2.); xy.y = d * sin(lp.phi); /* Adjust post-projection */ d = (1. - cos(lp.lam * lp.phi)) / k; if (xy.y < 0.) { xy.x *= 1. + d; } if (xy.y > 0.) { xy.y *= 1. + d / 1.5 * xy.x * xy.x; } return xy; } PJ *PJ_PROJECTION(bertin1953) { struct pj_bertin1953 *Q = static_cast( calloc(1, sizeof(struct pj_bertin1953))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->lam0 = 0; P->phi0 = PJ_TORAD(-42.); Q->cos_delta_phi = cos(P->phi0); Q->sin_delta_phi = sin(P->phi0); Q->cos_delta_gamma = 1.; Q->sin_delta_gamma = 0.; P->es = 0.; P->fwd = bertin1953_s_forward; return P; } proj-9.6.0/src/projections/bipc.cpp000664 001754 001755 00000012171 14764566077 017172 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" #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 namespace { // anonymous namespace struct pj_bipc_data { int noskew; }; } // anonymous namespace static PJ_XY bipc_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_bipc_data *Q = static_cast(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))) { sdlam = lp.lam + R110; cdlam = cos(sdlam); sdlam = sin(sdlam); z = S20 * sphi + C20 * cphi * cdlam; if (fabs(z) > 1.) { if (fabs(z) > ONEEPS) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } 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) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else z = z < 0. ? -1. : 1.; } else z = acos(z); Av = Azba; xy.y = -rhoc; } if (z < 0.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } t = pow(tan(.5 * z), n); r = F * t; if ((al = .5 * (R104 - z)) < 0.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } al = (t + pow(al, n)) / T; if (fabs(al) > 1.) { if (fabs(al) > ONEEPS) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else al = al < 0. ? -1. : 1.; } else al = acos(al); t = n * (Av - Az); if (fabs(t) < 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 PJ_LP bipc_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_bipc_data *Q = static_cast(P->opaque); double t, r, rp, rl, al, z = 0.0, 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; } r = hypot(xy.x, xy.y); rl = rp = r; Az = atan2(xy.x, xy.y); fAz = fabs(Az); 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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } 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); } PJ *PJ_PROJECTION(bipc) { struct pj_bipc_data *Q = static_cast( calloc(1, sizeof(struct pj_bipc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->noskew = pj_param(P->ctx, P->params, "bns").i; P->inv = bipc_s_inverse; P->fwd = bipc_s_forward; P->es = 0.; return P; } #undef EPS #undef EPS10 #undef ONEEPS #undef NITER #undef lamB #undef n #undef F #undef Azab #undef Azba #undef T #undef rhoc #undef cAzc #undef sAzc #undef C45 #undef S45 #undef C20 #undef S20 #undef R110 #undef R104 proj-9.6.0/src/projections/boggs.cpp000664 001754 001755 00000001757 14764566077 017366 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl, no inv, Sph"; #define NITER 20 #define EPS 1e-7 #define FXC 2.00276 #define FXC2 1.11072 #define FYC 0.49931 static PJ_XY boggs_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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) { th1 = (theta + sin(theta) - c) / (1. + cos(theta)); theta -= th1; 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); } PJ *PJ_PROJECTION(boggs) { P->es = 0.; P->fwd = boggs_s_forward; return P; } #undef NITER #undef EPS #undef FXC #undef FXC2 #undef FYC proj-9.6.0/src/projections/bonne.cpp000664 001754 001755 00000010522 14764566077 017354 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") "\n\tConic Sph&Ell\n\tlat_1="; #define EPS10 1e-10 namespace { // anonymous namespace struct pj_bonne_data { double phi1; double cphi1; double am1; double m1; double *en; }; } // anonymous namespace static PJ_XY bonne_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_bonne_data *Q = static_cast(P->opaque); double rh, E, c; E = sin(lp.phi); c = cos(lp.phi); rh = Q->am1 + Q->m1 - pj_mlfn(lp.phi, E, c, Q->en); if (fabs(rh) > EPS10) { E = c * lp.lam / (rh * sqrt(1. - P->es * E * E)); xy.x = rh * sin(E); xy.y = Q->am1 - rh * cos(E); } else { xy.x = 0.; xy.y = 0.; } return xy; } static PJ_XY bonne_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_bonne_data *Q = static_cast(P->opaque); double E, rh; rh = Q->cphi1 + Q->phi1 - lp.phi; if (fabs(rh) > EPS10) { E = lp.lam * cos(lp.phi) / rh; xy.x = rh * sin(E); xy.y = Q->cphi1 - rh * cos(E); } else xy.x = xy.y = 0.; return xy; } static PJ_LP bonne_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_bonne_data *Q = static_cast(P->opaque); xy.y = Q->cphi1 - xy.y; const double rh = copysign(hypot(xy.x, xy.y), Q->phi1); lp.phi = Q->cphi1 + Q->phi1 - rh; const double abs_phi = fabs(lp.phi); if (abs_phi > M_HALFPI) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } if (M_HALFPI - abs_phi <= EPS10) lp.lam = 0.; else { const double lm = rh / cos(lp.phi); if (Q->phi1 > 0) { lp.lam = lm * atan2(xy.x, xy.y); } else { lp.lam = lm * atan2(-xy.x, -xy.y); } } return lp; } static PJ_LP bonne_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_bonne_data *Q = static_cast(P->opaque); xy.y = Q->am1 - xy.y; const double rh = copysign(hypot(xy.x, xy.y), Q->phi1); lp.phi = pj_inv_mlfn(Q->am1 + Q->m1 - rh, Q->en); const double abs_phi = fabs(lp.phi); if (abs_phi < M_HALFPI) { const double sinphi = sin(lp.phi); const double lm = rh * sqrt(1. - P->es * sinphi * sinphi) / cos(lp.phi); if (Q->phi1 > 0) { lp.lam = lm * atan2(xy.x, xy.y); } else { lp.lam = lm * atan2(-xy.x, -xy.y); } } else if (abs_phi - M_HALFPI <= EPS10) lp.lam = 0.; else { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return lp; } static PJ *pj_bonne_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(bonne) { double c; struct pj_bonne_data *Q = static_cast( calloc(1, sizeof(struct pj_bonne_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_bonne_destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(Q->phi1) < EPS10) { proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be > 0")); return pj_bonne_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (P->es != 0.0) { Q->en = pj_enfn(P->n); if (nullptr == Q->en) return pj_bonne_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->am1 = sin(Q->phi1); c = cos(Q->phi1); Q->m1 = pj_mlfn(Q->phi1, Q->am1, c, Q->en); Q->am1 = c / (sqrt(1. - P->es * Q->am1 * Q->am1) * Q->am1); P->inv = bonne_e_inverse; P->fwd = bonne_e_forward; } else { if (fabs(Q->phi1) + EPS10 >= M_HALFPI) Q->cphi1 = 0.; else Q->cphi1 = 1. / tan(Q->phi1); P->inv = bonne_s_inverse; P->fwd = bonne_s_forward; } return P; } #undef EPS10 proj-9.6.0/src/projections/calcofi.cpp000664 001754 001755 00000012577 14764566077 017667 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(calcofi, "Cal Coop Ocean Fish Invest Lines/Stations") "\n\tCyl, Sph&Ell"; /* 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 /* long -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 PJ_XY calcofi_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_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 (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } 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 */ return xy; } static PJ_XY calcofi_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; double oy; double l1; double l2; double ry; if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } 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); return xy; } static PJ_LP calcofi_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_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; 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); return lp; } static PJ_LP calcofi_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double ry; double oymctr; double rymctr; double xymctr; double l1; double l2; (void)P; 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); return lp; } PJ *PJ_PROJECTION(calcofi) { P->opaque = nullptr; /* 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 */ P->lam0 = 0; P->ra = 1; P->a = 1; P->x0 = 0; P->y0 = 0; P->over = 1; if (P->es != 0.0) { /* ellipsoid */ P->inv = calcofi_e_inverse; P->fwd = calcofi_e_forward; } else { /* sphere */ P->inv = calcofi_s_inverse; P->fwd = calcofi_s_forward; } return P; } proj-9.6.0/src/projections/cass.cpp000664 001754 001755 00000010070 14764566077 017202 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(cass, "Cassini") "\n\tCyl, Sph&Ell"; #define C1 .16666666666666666666 #define C2 .00833333333333333333 #define C3 .04166666666666666666 #define C4 .33333333333333333333 #define C5 .06666666666666666666 namespace { // anonymous namespace struct cass_data { double *en; double m0; bool hyperbolic; }; } // anonymous namespace static PJ_XY cass_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct cass_data *Q = static_cast(P->opaque); const double sinphi = sin(lp.phi); const double cosphi = cos(lp.phi); const double M = pj_mlfn(lp.phi, sinphi, cosphi, Q->en); const double nu_square = 1. / (1. - P->es * sinphi * sinphi); const double nu = sqrt(nu_square); const double tanphi = tan(lp.phi); const double T = tanphi * tanphi; const double A = lp.lam * cosphi; const double C = P->es * (cosphi * cosphi) / (1 - P->es); const double A2 = A * A; xy.x = nu * A * (1. - A2 * T * (C1 + (8. - T + 8. * C) * A2 * C2)); xy.y = M - Q->m0 + nu * tanphi * A2 * (.5 + (5. - T + 6. * C) * A2 * C3); if (Q->hyperbolic) { const double rho = nu_square * (1. - P->es) * nu; xy.y -= xy.y * xy.y * xy.y / (6 * rho * nu); } return xy; } static PJ_XY cass_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP cass_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct cass_data *Q = static_cast(P->opaque); const double phi1 = pj_inv_mlfn(Q->m0 + xy.y, Q->en); const double tanphi1 = tan(phi1); const double T1 = tanphi1 * tanphi1; const double sinphi1 = sin(phi1); const double nu1_square = 1. / (1. - P->es * sinphi1 * sinphi1); const double nu1 = sqrt(nu1_square); const double rho1 = nu1_square * (1. - P->es) * nu1; const double D = xy.x / nu1; const double D2 = D * D; lp.phi = phi1 - (nu1 * tanphi1 / rho1) * D2 * (.5 - (1. + 3. * T1) * D2 * C3); lp.lam = D * (1. + T1 * D2 * (-C4 + (1. + 3. * T1) * D2 * C5)) / cos(phi1); // EPSG guidance note 7-2 suggests a custom approximation for the // 'Vanua Levu 1915 / Vanua Levu Grid' case, but better use the // generic inversion method // Actually use it in the non-hyperbolic case. It enables to make the // 5108.gie roundtripping tests to success, with at most 2 iterations. constexpr double deltaXYTolerance = 1e-12; lp = pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance); return lp; } static PJ_LP cass_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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 PJ *pj_cass_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(cass) { /* Spheroidal? */ if (0 == P->es) { P->inv = cass_s_inverse; P->fwd = cass_s_forward; return P; } /* otherwise it's ellipsoidal */ auto Q = static_cast(calloc(1, sizeof(struct cass_data))); P->opaque = Q; if (nullptr == P->opaque) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->destructor = pj_cass_destructor; Q->en = pj_enfn(P->n); if (nullptr == Q->en) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->m0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); if (pj_param_exists(P->params, "hyperbolic")) Q->hyperbolic = true; P->inv = cass_e_inverse; P->fwd = cass_e_forward; return P; } #undef C1 #undef C2 #undef C3 #undef C4 #undef C5 proj-9.6.0/src/projections/cc.cpp000664 001754 001755 00000001342 14764566077 016640 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph"; #define EPS10 1.e-10 static PJ_XY cc_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; if (fabs(fabs(lp.phi) - M_HALFPI) <= EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = lp.lam; xy.y = tan(lp.phi); return xy; } static PJ_LP cc_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; (void)P; lp.phi = atan(xy.y); lp.lam = xy.x; return lp; } PJ *PJ_PROJECTION(cc) { P->es = 0.; P->inv = cc_s_inverse; P->fwd = cc_s_forward; return P; } proj-9.6.0/src/projections/ccon.cpp000664 001754 001755 00000006452 14764566077 017204 0ustar00e012349e012349000000 000000 /****************************************************************************** * Copyright (c) 2017, Lukasz Komsta * * 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 "proj.h" #include "proj_internal.h" #include #include #define EPS10 1e-10 namespace { // anonymous namespace struct pj_ccon_data { double phi1; double ctgphi1; double sinphi1; double cosphi1; double *en; }; } // anonymous namespace PROJ_HEAD(ccon, "Central Conic") "\n\tCentral Conic, Sph\n\tlat_1="; static PJ_XY ccon_forward(PJ_LP lp, PJ *P) { PJ_XY xy = {0.0, 0.0}; struct pj_ccon_data *Q = static_cast(P->opaque); double r; r = Q->ctgphi1 - tan(lp.phi - Q->phi1); xy.x = r * sin(lp.lam * Q->sinphi1); xy.y = Q->ctgphi1 - r * cos(lp.lam * Q->sinphi1); return xy; } static PJ_LP ccon_inverse(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; struct pj_ccon_data *Q = static_cast(P->opaque); xy.y = Q->ctgphi1 - xy.y; lp.phi = Q->phi1 - atan(hypot(xy.x, xy.y) - Q->ctgphi1); lp.lam = atan2(xy.x, xy.y) / Q->sinphi1; return lp; } static PJ *pj_ccon_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(ccon) { struct pj_ccon_data *Q = static_cast( calloc(1, sizeof(struct pj_ccon_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_ccon_destructor; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; if (fabs(Q->phi1) < EPS10) { proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be > 0")); return pj_ccon_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (!(Q->en = pj_enfn(P->n))) return pj_ccon_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->sinphi1 = sin(Q->phi1); Q->cosphi1 = cos(Q->phi1); Q->ctgphi1 = Q->cosphi1 / Q->sinphi1; P->inv = ccon_inverse; P->fwd = ccon_forward; return P; } #undef EPS10 proj-9.6.0/src/projections/cea.cpp000664 001754 001755 00000005637 14764566077 017016 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_cea_data { double qp; double *apa; }; } // anonymous namespace PROJ_HEAD(cea, "Equal Area Cylindrical") "\n\tCyl, Sph&Ell\n\tlat_ts="; #define EPS 1e-10 static PJ_XY cea_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_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 PJ_XY cea_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; xy.x = P->k0 * lp.lam; xy.y = sin(lp.phi) / P->k0; return xy; } static PJ_LP cea_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = pj_authlat(asin(2. * xy.y * P->k0 / static_cast(P->opaque)->qp), static_cast(P->opaque)->apa); lp.lam = xy.x / P->k0; return lp; } static PJ_LP cea_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; xy.y *= P->k0; const double t = fabs(xy.y); if (t - 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 { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return (lp); } static PJ *pj_cea_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->apa); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(cea) { double t = 0.0; struct pj_cea_data *Q = static_cast( calloc(1, sizeof(struct pj_cea_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_cea_destructor; if (pj_param(P->ctx, P->params, "tlat_ts").i) { t = pj_param(P->ctx, P->params, "rlat_ts").f; P->k0 = cos(t); if (P->k0 < 0.) { proj_log_error( P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (P->es != 0.0) { t = sin(t); P->k0 /= sqrt(1. - P->es * t * t); P->e = sqrt(P->es); Q->apa = pj_authset(P->es); if (!(Q->apa)) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->qp = pj_qsfn(1., P->e, P->one_es); P->inv = cea_e_inverse; P->fwd = cea_e_forward; } else { P->inv = cea_s_inverse; P->fwd = cea_s_forward; } return P; } #undef EPS proj-9.6.0/src/projections/chamb.cpp000664 001754 001755 00000011232 14764566077 017324 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" typedef struct { double r, Az; } VECT; namespace { // anonymous namespace struct pj_chamb { struct { /* control point data */ double phi, lam; double cosphi, sinphi; VECT v; PJ_XY p; } c[3]; PJ_XY p; double beta_0, beta_1, beta_2; }; } // anonymous namespace 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(PJ_CONTEXT *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(PJ_CONTEXT *ctx, double b, double c, double a) { return aacos(ctx, .5 * (b * b + c * c - a * a) / (b * c)); } static PJ_XY chamb_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy; struct pj_chamb *Q = static_cast(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 == 0.0) 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 intercepts */ 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; } PJ *PJ_PROJECTION(chamb) { int i, j; char line[10]; struct pj_chamb *Q = static_cast(calloc(1, sizeof(struct pj_chamb))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; for (i = 0; i < 3; ++i) { /* get control point locations */ (void)snprintf(line, sizeof(line), "rlat_%d", i + 1); Q->c[i].phi = pj_param(P->ctx, P->params, line).f; (void)snprintf(line, sizeof(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 == 0.0) { proj_log_error( P, _("Invalid value for control points: they should be distinct")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* 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->c[0].p.y = Q->c[2].v.r * sin(Q->beta_0); Q->c[1].p.y = Q->c[0].p.y; Q->p.y = 2. * Q->c[0].p.y; Q->c[2].p.y = 0.; Q->c[1].p.x = 0.5 * Q->c[0].v.r; Q->c[0].p.x = -Q->c[1].p.x; Q->c[2].p.x = Q->c[0].p.x + Q->c[2].v.r * cos(Q->beta_0); Q->p.x = Q->c[2].p.x; P->es = 0.; P->fwd = chamb_s_forward; return P; } #undef THIRD #undef TOL proj-9.6.0/src/projections/col_urban.cpp000664 001754 001755 00000004663 14764566077 020230 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(col_urban, "Colombia Urban") "\n\tMisc\n\th_0="; // Notations and formulas taken from IOGP Publication 373-7-2 - // Geomatics Guidance Note number 7, part 2 - March 2020 namespace { // anonymous namespace struct pj_col_urban { double h0; // height of projection origin, divided by semi-major axis (a) double rho0; // adimensional value, contrary to Guidance note 7.2 double A; double B; // adimensional value, contrary to Guidance note 7.2 double C; double D; // adimensional value, contrary to Guidance note 7.2 }; } // anonymous namespace static PJ_XY col_urban_forward(PJ_LP lp, PJ *P) { PJ_XY xy; struct pj_col_urban *Q = static_cast(P->opaque); const double cosphi = cos(lp.phi); const double sinphi = sin(lp.phi); const double nu = 1. / sqrt(1 - P->es * sinphi * sinphi); const double lam_nu_cosphi = lp.lam * nu * cosphi; xy.x = Q->A * lam_nu_cosphi; const double sinphi_m = sin(0.5 * (lp.phi + P->phi0)); const double rho_m = (1 - P->es) / pow(1 - P->es * sinphi_m * sinphi_m, 1.5); const double G = 1 + Q->h0 / rho_m; xy.y = G * Q->rho0 * ((lp.phi - P->phi0) + Q->B * lam_nu_cosphi * lam_nu_cosphi); return xy; } static PJ_LP col_urban_inverse(PJ_XY xy, PJ *P) { PJ_LP lp; struct pj_col_urban *Q = static_cast(P->opaque); lp.phi = P->phi0 + xy.y / Q->D - Q->B * (xy.x / Q->C) * (xy.x / Q->C); const double sinphi = sin(lp.phi); const double nu = 1. / sqrt(1 - P->es * sinphi * sinphi); lp.lam = xy.x / (Q->C * nu * cos(lp.phi)); return lp; } PJ *PJ_PROJECTION(col_urban) { struct pj_col_urban *Q = static_cast( calloc(1, sizeof(struct pj_col_urban))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; const double h0_unscaled = pj_param(P->ctx, P->params, "dh_0").f; Q->h0 = h0_unscaled / P->a; const double sinphi0 = sin(P->phi0); const double nu0 = 1. / sqrt(1 - P->es * sinphi0 * sinphi0); Q->A = 1 + Q->h0 / nu0; Q->rho0 = (1 - P->es) / pow(1 - P->es * sinphi0 * sinphi0, 1.5); Q->B = tan(P->phi0) / (2 * Q->rho0 * nu0); Q->C = 1 + Q->h0; Q->D = Q->rho0 * (1 + Q->h0 / (1 - P->es)); P->fwd = col_urban_forward; P->inv = col_urban_inverse; return P; } proj-9.6.0/src/projections/collg.cpp000664 001754 001755 00000002340 14764566077 017352 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph"; #define FXC 1.12837916709551257390 #define FYC 1.77245385090551602729 #define ONEEPS 1.0000001 static PJ_XY collg_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; (void)P; xy.y = 1. - sin(lp.phi); if (xy.y <= 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 PJ_LP collg_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = xy.y / FYC - 1.; lp.phi = 1. - lp.phi * lp.phi; if (fabs(lp.phi) < 1.) lp.phi = asin(lp.phi); else if (fabs(lp.phi) > ONEEPS) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; } lp.lam = 1. - sin(lp.phi); if (lp.lam <= 0.) lp.lam = 0.; else lp.lam = xy.x / (FXC * sqrt(lp.lam)); return (lp); } PJ *PJ_PROJECTION(collg) { P->es = 0.0; P->inv = collg_s_inverse; P->fwd = collg_s_forward; return P; } #undef FXC #undef FYC #undef ONEEPS proj-9.6.0/src/projections/comill.cpp000664 001754 001755 00000004011 14764566077 017526 0ustar00e012349e012349000000 000000 /* 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 */ #include #include "proj.h" #include "proj_internal.h" 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) /* Not sure at all of the appropriate number for MAX_ITER... */ #define MAX_ITER 100 static PJ_XY comill_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP comill_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double yc, tol, y2, f, fder; int i; (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 (i = MAX_ITER; i; --i) { /* Newton-Raphson */ y2 = yc * yc; f = (yc * (K1 + y2 * (K2 + K3 * y2))) - xy.y; fder = C1 + y2 * (C2 + C3 * y2); tol = f / fder; yc -= tol; if (fabs(tol) < EPS) { break; } } if (i == 0) proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.phi = yc; /* longitude */ lp.lam = xy.x; return lp; } PJ *PJ_PROJECTION(comill) { P->es = 0; P->inv = comill_s_inverse; P->fwd = comill_s_forward; return P; } #undef K1 #undef K2 #undef K3 #undef C1 #undef C2 #undef C3 #undef EPS #undef MAX_Y #undef MAX_ITER proj-9.6.0/src/projections/crast.cpp000664 001754 001755 00000001614 14764566077 017371 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY crast_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP crast_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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; } PJ *PJ_PROJECTION(crast) { P->es = 0.0; P->inv = crast_s_inverse; P->fwd = crast_s_forward; return P; } proj-9.6.0/src/projections/denoy.cpp000664 001754 001755 00000001331 14764566077 017367 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY denoy_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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; } PJ *PJ_PROJECTION(denoy) { P->es = 0.0; P->fwd = denoy_s_forward; return P; } #undef C0 #undef C1 #undef C3 #undef D1 #undef D5 proj-9.6.0/src/projections/eck1.cpp000664 001754 001755 00000001316 14764566077 017077 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl, Sph"; #define FC 0.92131773192356127802 #define RP 0.31830988618379067154 static PJ_XY eck1_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP eck1_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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); } PJ *PJ_PROJECTION(eck1) { P->es = 0.0; P->inv = eck1_s_inverse; P->fwd = eck1_s_forward; return P; } proj-9.6.0/src/projections/eck2.cpp000664 001754 001755 00000002316 14764566077 017101 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY eck2_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP eck2_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; (void)P; lp.phi = 2. - fabs(xy.y) / FYC; lp.lam = xy.x / (FXC * lp.phi); lp.phi = (4. - lp.phi * lp.phi) * C13; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } 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); } PJ *PJ_PROJECTION(eck2) { P->es = 0.; P->inv = eck2_s_inverse; P->fwd = eck2_s_forward; return P; } proj-9.6.0/src/projections/eck3.cpp000664 001754 001755 00000005440 14764566077 017103 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" 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, "Kavrayskiy VII") "\n\tPCyl, Sph"; namespace { // anonymous namespace struct pj_opaque { double C_x, C_y, A, B; }; } // anonymous namespace static PJ_XY eck3_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_opaque *Q = static_cast(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 PJ_LP eck3_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_opaque *Q = static_cast(P->opaque); double denominator; lp.phi = xy.y / Q->C_y; denominator = (Q->C_x * (Q->A + asqrt(1. - Q->B * lp.phi * lp.phi))); if (denominator == 0.0) lp.lam = HUGE_VAL; else lp.lam = xy.x / denominator; return lp; } static PJ *setup(PJ *P) { P->es = 0.; P->inv = eck3_s_inverse; P->fwd = eck3_s_forward; return P; } PJ *PJ_PROJECTION(eck3) { struct pj_opaque *Q = static_cast(calloc(1, sizeof(struct pj_opaque))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 *PJ_PROJECTION(kav7) { struct pj_opaque *Q = static_cast(calloc(1, sizeof(struct pj_opaque))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 *PJ_PROJECTION(wag6) { struct pj_opaque *Q = static_cast(calloc(1, sizeof(struct pj_opaque))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->C_x = 0.94745; Q->C_y = 0.94745; Q->A = 0.0; Q->B = 0.30396355092701331433; return setup(P); } PJ *PJ_PROJECTION(putp1) { struct pj_opaque *Q = static_cast(calloc(1, sizeof(struct pj_opaque))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->C_x = 1.89490; Q->C_y = 0.94745; Q->A = -0.5; Q->B = 0.30396355092701331433; return setup(P); } proj-9.6.0/src/projections/eck4.cpp000664 001754 001755 00000005054 14764566077 017105 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph"; // C_x = 2 / sqrt(4 * M_PI + M_PI * M_PI) constexpr double C_x = .42223820031577120149; // C_y = 2 * sqrt(M_PI / (4 + M_PI)) constexpr double C_y = 1.32650042817700232218; // RC_y = 1. / C_y constexpr double RC_y = .75386330736002178205; // C_p = 2 + M_PI / 2 constexpr double C_p = 3.57079632679489661922; // RC_p = 1. / C_p constexpr double RC_p = .28004957675577868795; static PJ_XY eck4_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; int i; (void)P; // Newton's iterative method to find theta such as // theta + sin(theta) * cos(theta) + 2 * sin(theta) == C_p * sin(phi) const double p = C_p * sin(lp.phi); double V = lp.phi * lp.phi; double theta = lp.phi * (0.895168 + V * (0.0218849 + V * 0.00826809)); constexpr int NITER = 6; for (i = NITER; i; --i) { const double c = cos(theta); const double s = sin(theta); V = (theta + s * (c + 2.) - p) / (1. + c * (c + 2.) - s * s); theta -= V; constexpr double EPS = 1e-7; if (fabs(V) < EPS) break; } if (!i) { xy.x = C_x * lp.lam; xy.y = theta < 0. ? -C_y : C_y; } else { xy.x = C_x * lp.lam * (1. + cos(theta)); xy.y = C_y * sin(theta); } return xy; } static PJ_LP eck4_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; const double sin_theta = xy.y * RC_y; const double one_minus_abs_sin_theta = 1.0 - fabs(sin_theta); if (one_minus_abs_sin_theta >= 0.0 && one_minus_abs_sin_theta <= 1e-12) { lp.lam = xy.x / C_x; lp.phi = sin_theta > 0 ? M_PI / 2 : -M_PI / 2; } else { const double theta = aasin(P->ctx, sin_theta); const double cos_theta = cos(theta); lp.lam = xy.x / (C_x * (1. + cos_theta)); const double sin_phi = (theta + sin_theta * (cos_theta + 2.)) * RC_p; lp.phi = aasin(P->ctx, sin_phi); } if (!P->over) { const double fabs_lam_minus_pi = fabs(lp.lam) - M_PI; if (fabs_lam_minus_pi > 0.0) { if (fabs_lam_minus_pi > 1e-10) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.lam = lp.lam > 0 ? M_PI : -M_PI; } } } return lp; } PJ *PJ_PROJECTION(eck4) { P->es = 0.0; P->inv = eck4_s_inverse; P->fwd = eck4_s_forward; return P; } proj-9.6.0/src/projections/eck5.cpp000664 001754 001755 00000001406 14764566077 017103 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY eck5_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP eck5_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; (void)P; lp.phi = RYF * xy.y; lp.lam = RXF * xy.x / (1. + cos(lp.phi)); return lp; } PJ *PJ_PROJECTION(eck5) { P->es = 0.0; P->inv = eck5_s_inverse; P->fwd = eck5_s_forward; return P; } proj-9.6.0/src/projections/eqc.cpp000664 001754 001755 00000002535 14764566077 017030 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_eqc_data { double rc; }; } // anonymous namespace PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Carree)") "\n\tCyl, Sph\n\tlat_ts=[, lat_0=0]"; static PJ_XY eqc_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_eqc_data *Q = static_cast(P->opaque); xy.x = Q->rc * lp.lam; xy.y = lp.phi - P->phi0; return xy; } static PJ_LP eqc_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_eqc_data *Q = static_cast(P->opaque); lp.lam = xy.x / Q->rc; lp.phi = xy.y + P->phi0; return lp; } PJ *PJ_PROJECTION(eqc) { struct pj_eqc_data *Q = static_cast( calloc(1, sizeof(struct pj_eqc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if ((Q->rc = cos(pj_param(P->ctx, P->params, "rlat_ts").f)) <= 0.) { proj_log_error( P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } P->inv = eqc_s_inverse; P->fwd = eqc_s_forward; P->es = 0.; return P; } proj-9.6.0/src/projections/eqdc.cpp000664 001754 001755 00000011153 14764566077 017170 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" #include namespace { // anonymous namespace struct pj_eqdc_data { double phi1; double phi2; double n; double rho; double rho0; double c; double *en; int ellips; }; } // anonymous namespace PROJ_HEAD(eqdc, "Equidistant Conic") "\n\tConic, Sph&Ell\n\tlat_1= lat_2="; #define EPS10 1.e-10 static PJ_XY eqdc_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_eqdc_data *Q = static_cast(P->opaque); Q->rho = Q->c - (Q->ellips ? pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), Q->en) : lp.phi); const double lam_mul_n = lp.lam * Q->n; xy.x = Q->rho * sin(lam_mul_n); xy.y = Q->rho0 - Q->rho * cos(lam_mul_n); return xy; } static PJ_LP eqdc_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_eqdc_data *Q = static_cast(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(lp.phi, 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 PJ *pj_eqdc_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(eqdc) { double cosphi, sinphi; int secant; struct pj_eqdc_data *Q = static_cast( calloc(1, sizeof(struct pj_eqdc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_eqdc_destructor; 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) > M_HALFPI) { proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be <= 90°")); return pj_eqdc_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(Q->phi2) > M_HALFPI) { proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be <= 90°")); return pj_eqdc_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(Q->phi1 + Q->phi2) < EPS10) { proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + " "lat_2| should be > 0")); return pj_eqdc_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (!(Q->en = pj_enfn(P->n))) return pj_eqdc_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); sinphi = sin(Q->phi1); Q->n = sinphi; cosphi = cos(Q->phi1); secant = fabs(Q->phi1 - Q->phi2) >= EPS10; Q->ellips = (P->es > 0.); if (Q->ellips) { 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); const double ml2 = pj_mlfn(Q->phi2, sinphi, cosphi, Q->en); if (ml1 == ml2) { proj_log_error(P, _("Eccentricity too close to 1")); return pj_eqdc_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / (ml2 - ml1); if (Q->n == 0) { // Not quite, but es is very close to 1... proj_log_error(P, _("Invalid value for eccentricity")); return pj_eqdc_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } 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); if (Q->n == 0) { proj_log_error(P, _("Invalid value for lat_1 and lat_2: lat_1 + " "lat_2 should be > 0")); return pj_eqdc_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->c = Q->phi1 + cos(Q->phi1) / Q->n; Q->rho0 = Q->c - P->phi0; } P->inv = eqdc_e_inverse; P->fwd = eqdc_e_forward; return P; } #undef EPS10 proj-9.6.0/src/projections/eqearth.cpp000664 001754 001755 00000010750 14764566077 017707 0ustar00e012349e012349000000 000000 /* Equal Earth is a projection inspired by the Robinson projection, but unlike the Robinson projection retains the relative size of areas. The projection was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny. Publication: Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map projection, International Journal of Geographical Information Science, DOI: 10.1080/13658816.2018.1504949 Port to PROJ by Juernjakob Dugge, 16 August 2018 Added ellipsoidal equations by Bojan Savric, 22 August 2018 */ #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(eqearth, "Equal Earth") "\n\tPCyl, Sph&Ell"; /* A1..A4, polynomial coefficients */ #define A1 1.340264 #define A2 -0.081106 #define A3 0.000893 #define A4 0.003796 #define M (sqrt(3.0) / 2.0) #define MAX_Y 1.3173627591574 /* 90° latitude on a sphere with radius 1 */ #define EPS 1e-11 #define MAX_ITER 12 namespace { // anonymous namespace struct pj_eqearth { double qp; double rqda; double *apa; }; } // anonymous namespace static PJ_XY eqearth_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal/spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_eqearth *Q = static_cast(P->opaque); double sbeta; double psi, psi2, psi6; /* Spheroidal case, using sine latitude */ sbeta = sin(lp.phi); /* In the ellipsoidal case, we convert sbeta to sine of authalic latitude */ if (P->es != 0.0) { sbeta = pj_qsfn(sbeta, P->e, 1.0 - P->es) / Q->qp; /* Rounding error. */ if (fabs(sbeta) > 1) sbeta = sbeta > 0 ? 1 : -1; } /* Equal Earth projection */ psi = asin(M * sbeta); psi2 = psi * psi; psi6 = psi2 * psi2 * psi2; xy.x = lp.lam * cos(psi) / (M * (A1 + 3 * A2 * psi2 + psi6 * (7 * A3 + 9 * A4 * psi2))); xy.y = psi * (A1 + A2 * psi2 + psi6 * (A3 + A4 * psi2)); /* Adjusting x and y for authalic radius */ xy.x *= Q->rqda; xy.y *= Q->rqda; return xy; } static PJ_LP eqearth_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal/spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_eqearth *Q = static_cast(P->opaque); double yc, y2, y6; int i; /* Adjusting x and y for authalic radius */ xy.x /= Q->rqda; xy.y /= Q->rqda; /* 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; yc = xy.y; /* Newton-Raphson */ for (i = MAX_ITER; i; --i) { double f, fder, tol; y2 = yc * yc; y6 = y2 * y2 * y2; f = yc * (A1 + A2 * y2 + y6 * (A3 + A4 * y2)) - xy.y; fder = A1 + 3 * A2 * y2 + y6 * (7 * A3 + 9 * A4 * y2); tol = f / fder; yc -= tol; if (fabs(tol) < EPS) break; } if (i == 0) { proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } /* Longitude */ y2 = yc * yc; y6 = y2 * y2 * y2; lp.lam = M * xy.x * (A1 + 3 * A2 * y2 + y6 * (7 * A3 + 9 * A4 * y2)) / cos(yc); /* Latitude (for spheroidal case, this is latitude */ lp.phi = asin(sin(yc) / M); /* Ellipsoidal case, converting auth. latitude */ if (P->es != 0.0) lp.phi = pj_authlat(lp.phi, Q->apa); return lp; } static PJ *destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->apa); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(eqearth) { struct pj_eqearth *Q = static_cast(calloc(1, sizeof(struct pj_eqearth))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; P->fwd = eqearth_e_forward; P->inv = eqearth_e_inverse; Q->rqda = 1.0; /* Ellipsoidal case */ if (P->es != 0.0) { Q->apa = pj_authset(P->es); /* For auth_lat(). */ if (nullptr == Q->apa) return destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->qp = pj_qsfn(1.0, P->e, P->one_es); /* For auth_lat(). */ Q->rqda = sqrt(0.5 * Q->qp); /* Authalic radius divided by major axis */ } return P; } #undef A1 #undef A2 #undef A3 #undef A4 #undef M #undef MAX_Y #undef EPS #undef MAX_ITER proj-9.6.0/src/projections/fahey.cpp000664 001754 001755 00000001412 14764566077 017345 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph"; #define TOL 1e-6 static PJ_XY fahey_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP fahey_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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; } PJ *PJ_PROJECTION(fahey) { P->es = 0.; P->inv = fahey_s_inverse; P->fwd = fahey_s_forward; return P; } proj-9.6.0/src/projections/fouc_s.cpp000664 001754 001755 00000003751 14764566077 017537 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl, Sph"; #define MAX_ITER 10 #define LOOP_TOL 1e-7 namespace { // anonymous namespace struct pj_fouc_s_data { double n, n1; }; } // anonymous namespace static PJ_XY fouc_s_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_fouc_s_data *Q = static_cast(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 PJ_LP fouc_s_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_fouc_s_data *Q = static_cast(P->opaque); int i; if (Q->n != 0.0) { lp.phi = xy.y; for (i = MAX_ITER; i; --i) { const double V = (Q->n * lp.phi + Q->n1 * sin(lp.phi) - xy.y) / (Q->n + Q->n1 * cos(lp.phi)); lp.phi -= V; 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); const double V = cos(lp.phi); lp.lam = xy.x * (Q->n + Q->n1 * V) / V; return lp; } PJ *PJ_PROJECTION(fouc_s) { struct pj_fouc_s_data *Q = static_cast( calloc(1, sizeof(struct pj_fouc_s_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->n = pj_param(P->ctx, P->params, "dn").f; if (Q->n < 0. || Q->n > 1.) { proj_log_error(P, _("Invalid value for n: it should be in [0,1] range.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->n1 = 1. - Q->n; P->es = 0; P->inv = fouc_s_s_inverse; P->fwd = fouc_s_s_forward; return P; } #undef MAX_ITER #undef LOOP_TOL proj-9.6.0/src/projections/gall.cpp000664 001754 001755 00000001404 14764566077 017171 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY gall_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; (void)P; xy.x = XF * lp.lam; xy.y = YF * tan(.5 * lp.phi); return xy; } static PJ_LP gall_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; (void)P; lp.lam = RXF * xy.x; lp.phi = 2. * atan(xy.y * RYF); return lp; } PJ *PJ_PROJECTION(gall) { P->es = 0.0; P->inv = gall_s_inverse; P->fwd = gall_s_forward; return P; } proj-9.6.0/src/projections/geos.cpp000664 001754 001755 00000017026 14764566077 017216 0ustar00e012349e012349000000 000000 /* ** libproj -- library of cartographic projections ** ** Copyright (c) 2004 Gerald I. Evenden ** Copyright (c) 2012 Martin Raspaud ** ** See also (section 4.4.3.2): ** https://www.cgms-info.org/documents/pdf_cgms_03.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. */ #include #include #include #include "proj.h" #include "proj_internal.h" #include namespace { // anonymous namespace struct pj_geos_data { double h; double radius_p; double radius_p2; double radius_p_inv2; double radius_g; double radius_g_1; double C; int flip_axis; }; } // anonymous namespace PROJ_HEAD(geos, "Geostationary Satellite View") "\n\tAzi, Sph&Ell\n\th="; static PJ_XY geos_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_geos_data *Q = static_cast(P->opaque); double Vx, Vy, Vz, tmp; /* Calculation of the three components of the vector from satellite to ** position on earth surface (long,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 PJ_XY geos_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_geos_data *Q = static_cast(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 (long,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.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } /* 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 PJ_LP geos_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_geos_data *Q = static_cast(P->opaque); double Vx, Vy, Vz, a, b, 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) * sqrt(1.0 + Vz * Vz); } else { Vy = tan(xy.x / Q->radius_g_1); Vz = tan(xy.y / Q->radius_g_1) * 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; const double det = (b * b) - 4 * a * Q->C; if (det < 0.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } /* 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 PJ_LP geos_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_geos_data *Q = static_cast(P->opaque); double Vx, Vy, Vz, a, b, 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; const double det = (b * b) - 4 * a * Q->C; if (det < 0.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } /* 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; } PJ *PJ_PROJECTION(geos) { char *sweep_axis; struct pj_geos_data *Q = static_cast( calloc(1, sizeof(struct pj_geos_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->h = pj_param(P->ctx, P->params, "dh").f; sweep_axis = pj_param(P->ctx, P->params, "ssweep").s; if (sweep_axis == nullptr) Q->flip_axis = 0; else { if ((sweep_axis[0] != 'x' && sweep_axis[0] != 'y') || sweep_axis[1] != '\0') { proj_log_error( P, _("Invalid value for sweep: it should be equal to x or y.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (sweep_axis[0] == 'x') Q->flip_axis = 1; else Q->flip_axis = 0; } Q->radius_g_1 = Q->h / P->a; if (Q->radius_g_1 <= 0 || Q->radius_g_1 > 1e10) { proj_log_error(P, _("Invalid value for h.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->radius_g = 1. + Q->radius_g_1; Q->C = Q->radius_g * Q->radius_g - 1.0; if (P->es != 0.0) { Q->radius_p = sqrt(P->one_es); Q->radius_p2 = P->one_es; Q->radius_p_inv2 = P->rone_es; P->inv = geos_e_inverse; P->fwd = geos_e_forward; } else { Q->radius_p = Q->radius_p2 = Q->radius_p_inv2 = 1.0; P->inv = geos_s_inverse; P->fwd = geos_s_forward; } return P; } proj-9.6.0/src/projections/gins8.cpp000664 001754 001755 00000001134 14764566077 017302 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph, no inv"; #define Cl 0.000952426 #define Cp 0.162388 #define C12 0.08333333333333333 static PJ_XY gins8_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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; } PJ *PJ_PROJECTION(gins8) { P->es = 0.0; P->inv = nullptr; P->fwd = gins8_s_forward; return P; } proj-9.6.0/src/projections/gn_sinu.cpp000664 001754 001755 00000013412 14764566077 017716 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" 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 namespace { // anonymous namespace struct pj_gn_sinu_data { double *en; double m, n, C_x, C_y; }; } // anonymous namespace static PJ_XY gn_sinu_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; const double s = sin(lp.phi); const double c = cos(lp.phi); xy.y = pj_mlfn(lp.phi, s, c, static_cast(P->opaque)->en); xy.x = lp.lam * c / sqrt(1. - P->es * s * s); return xy; } static PJ_LP gn_sinu_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; double s; lp.phi = pj_inv_mlfn(xy.y, static_cast(P->opaque)->en); s = fabs(lp.phi); if (s < 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 { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); } return lp; } static PJ_XY gn_sinu_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_gn_sinu_data *Q = static_cast(P->opaque); if (Q->m == 0.0) lp.phi = Q->n != 1. ? aasin(P->ctx, Q->n * sin(lp.phi)) : lp.phi; else { int i; const double k = Q->n * sin(lp.phi); for (i = MAX_ITER; i; --i) { const double V = (Q->m * lp.phi + sin(lp.phi) - k) / (Q->m + cos(lp.phi)); lp.phi -= V; if (fabs(V) < LOOP_TOL) break; } if (!i) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } } xy.x = Q->C_x * lp.lam * (Q->m + cos(lp.phi)); xy.y = Q->C_y * lp.phi; return xy; } static PJ_LP gn_sinu_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_gn_sinu_data *Q = static_cast(P->opaque); xy.y /= Q->C_y; lp.phi = (Q->m != 0.0) ? 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 PJ *pj_gn_sinu_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } /* for spheres, only */ static void pj_gn_sinu_setup(PJ *P) { struct pj_gn_sinu_data *Q = static_cast(P->opaque); P->es = 0; P->inv = gn_sinu_s_inverse; P->fwd = gn_sinu_s_forward; Q->C_y = sqrt((Q->m + 1.) / Q->n); Q->C_x = Q->C_y / (Q->m + 1.); } PJ *PJ_PROJECTION(sinu) { struct pj_gn_sinu_data *Q = static_cast( calloc(1, sizeof(struct pj_gn_sinu_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_gn_sinu_destructor; if (!(Q->en = pj_enfn(P->n))) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); if (P->es != 0.0) { P->inv = gn_sinu_e_inverse; P->fwd = gn_sinu_e_forward; } else { Q->n = 1.; Q->m = 0.; pj_gn_sinu_setup(P); } return P; } PJ *PJ_PROJECTION(eck6) { struct pj_gn_sinu_data *Q = static_cast( calloc(1, sizeof(struct pj_gn_sinu_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_gn_sinu_destructor; Q->m = 1.; Q->n = 2.570796326794896619231321691; pj_gn_sinu_setup(P); return P; } PJ *PJ_PROJECTION(mbtfps) { struct pj_gn_sinu_data *Q = static_cast( calloc(1, sizeof(struct pj_gn_sinu_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_gn_sinu_destructor; Q->m = 0.5; Q->n = 1.785398163397448309615660845; pj_gn_sinu_setup(P); return P; } PJ *PJ_PROJECTION(gn_sinu) { struct pj_gn_sinu_data *Q = static_cast( calloc(1, sizeof(struct pj_gn_sinu_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_gn_sinu_destructor; if (!pj_param(P->ctx, P->params, "tn").i) { proj_log_error(P, _("Missing parameter n.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (!pj_param(P->ctx, P->params, "tm").i) { proj_log_error(P, _("Missing parameter m.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->n = pj_param(P->ctx, P->params, "dn").f; Q->m = pj_param(P->ctx, P->params, "dm").f; if (Q->n <= 0) { proj_log_error(P, _("Invalid value for n: it should be > 0.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (Q->m < 0) { proj_log_error(P, _("Invalid value for m: it should be >= 0.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } pj_gn_sinu_setup(P); return P; } proj-9.6.0/src/projections/gnom.cpp000664 001754 001755 00000013775 14764566077 017230 0ustar00e012349e012349000000 000000 #include #include #include #include "geodesic.h" #include "proj.h" #include "proj_internal.h" PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph"; #define EPS10 1.e-10 namespace pj_gnom_ns { enum Mode { N_POLE = 0, S_POLE = 1, EQUIT = 2, OBLIQ = 3 }; } namespace { // anonymous namespace struct pj_gnom_data { double sinph0; double cosph0; enum pj_gnom_ns::Mode mode; struct geod_geodesic g; }; } // anonymous namespace static PJ_XY gnom_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_gnom_data *Q = static_cast(P->opaque); double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (Q->mode) { case pj_gnom_ns::EQUIT: xy.y = cosphi * coslam; break; case pj_gnom_ns::OBLIQ: xy.y = Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam; break; case pj_gnom_ns::S_POLE: xy.y = -sinphi; break; case pj_gnom_ns::N_POLE: xy.y = sinphi; break; } if (xy.y <= EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = (xy.y = 1. / xy.y) * cosphi * sin(lp.lam); switch (Q->mode) { case pj_gnom_ns::EQUIT: xy.y *= sinphi; break; case pj_gnom_ns::OBLIQ: xy.y *= Q->cosph0 * sinphi - Q->sinph0 * cosphi * coslam; break; case pj_gnom_ns::N_POLE: coslam = -coslam; PROJ_FALLTHROUGH; case pj_gnom_ns::S_POLE: xy.y *= cosphi * coslam; break; } return xy; } static PJ_LP gnom_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_gnom_data *Q = static_cast(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 pj_gnom_ns::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 pj_gnom_ns::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 pj_gnom_ns::S_POLE: lp.phi -= M_HALFPI; break; case pj_gnom_ns::N_POLE: lp.phi = M_HALFPI - lp.phi; xy.y = -xy.y; break; } lp.lam = atan2(xy.x, xy.y); } return lp; } static PJ_XY gnom_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_gnom_data *Q = static_cast(P->opaque); double lat0 = P->phi0 / DEG_TO_RAD, lon0 = 0, lat1 = lp.phi / DEG_TO_RAD, lon1 = lp.lam / DEG_TO_RAD, azi0, m, M; geod_geninverse(&Q->g, lat0, lon0, lat1, lon1, nullptr, &azi0, nullptr, &m, &M, nullptr, nullptr); if (M <= 0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); xy.x = xy.y = HUGE_VAL; } else { double rho = m / M; azi0 *= DEG_TO_RAD; xy.x = rho * sin(azi0); xy.y = rho * cos(azi0); } return xy; } static PJ_LP gnom_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ constexpr int numit_ = 10; static const double eps_ = 0.01 * sqrt(DBL_EPSILON); PJ_LP lp = {0.0, 0.0}; struct pj_gnom_data *Q = static_cast(P->opaque); double lat0 = P->phi0 / DEG_TO_RAD, lon0 = 0, azi0 = atan2(xy.x, xy.y) / DEG_TO_RAD, // Clockwise from north rho = hypot(xy.x, xy.y), s = atan(rho); bool little = rho <= 1; if (!little) rho = 1 / rho; struct geod_geodesicline l; geod_lineinit(&l, &Q->g, lat0, lon0, azi0, GEOD_LATITUDE | GEOD_LONGITUDE | GEOD_DISTANCE_IN | GEOD_REDUCEDLENGTH | GEOD_GEODESICSCALE); int count = numit_, trip = 0; double lat1 = 0, lon1 = 0; while (count--) { double m, M; geod_genposition(&l, 0, s, &lat1, &lon1, nullptr, &s, &m, &M, nullptr, nullptr); if (trip) break; // If little, solve rho(s) = rho with drho(s)/ds = 1/M^2 // else solve 1/rho(s) = 1/rho with d(1/rho(s))/ds = -1/m^2 double ds = little ? (m - rho * M) * M : (rho * m - M) * m; s -= ds; // Reversed test to allow escape with NaNs if (!(fabs(ds) >= eps_)) ++trip; } if (trip) { lp.phi = lat1 * DEG_TO_RAD; lp.lam = lon1 * DEG_TO_RAD; } else { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.phi = lp.lam = HUGE_VAL; } return lp; } PJ *PJ_PROJECTION(gnom) { struct pj_gnom_data *Q = static_cast( calloc(1, sizeof(struct pj_gnom_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (P->es == 0) { if (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) { Q->mode = P->phi0 < 0. ? pj_gnom_ns::S_POLE : pj_gnom_ns::N_POLE; } else if (fabs(P->phi0) < EPS10) { Q->mode = pj_gnom_ns::EQUIT; } else { Q->mode = pj_gnom_ns::OBLIQ; Q->sinph0 = sin(P->phi0); Q->cosph0 = cos(P->phi0); } P->inv = gnom_s_inverse; P->fwd = gnom_s_forward; } else { geod_init(&Q->g, 1, P->f); P->inv = gnom_e_inverse; P->fwd = gnom_e_forward; } P->es = 0.; return P; } proj-9.6.0/src/projections/goode.cpp000664 001754 001755 00000004414 14764566077 017353 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" 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 *); namespace { // anonymous namespace struct pj_goode_data { PJ *sinu; PJ *moll; }; } // anonymous namespace static PJ_XY goode_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy; struct pj_goode_data *Q = static_cast(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 PJ_LP goode_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp; struct pj_goode_data *Q = static_cast(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 PJ *goode_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); proj_destroy(static_cast(P->opaque)->sinu); proj_destroy(static_cast(P->opaque)->moll); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(goode) { struct pj_goode_data *Q = static_cast( calloc(1, sizeof(struct pj_goode_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = goode_destructor; P->es = 0.; Q->sinu = pj_sinu(nullptr); Q->moll = pj_moll(nullptr); if (Q->sinu == nullptr || Q->moll == nullptr) return goode_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->sinu->es = 0.; Q->sinu->ctx = P->ctx; Q->moll->ctx = P->ctx; Q->sinu = pj_sinu(Q->sinu); Q->moll = pj_moll(Q->moll); if (Q->sinu == nullptr || Q->moll == nullptr) return goode_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->fwd = goode_s_forward; P->inv = goode_s_inverse; return P; } #undef Y_COR #undef PHI_LIM proj-9.6.0/src/projections/gstmerc.cpp000664 001754 001755 00000004331 14764566077 017720 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") "\n\tCyl, Sph&Ell\n\tlat_0= lon_0= k_0="; namespace { // anonymous namespace struct pj_gstmerc_data { double lamc; double phic; double c; double n1; double n2; double XS; double YS; }; } // anonymous namespace static PJ_XY gstmerc_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_gstmerc_data *Q = static_cast(P->opaque); double L, Ls, sinLs1, Ls1; L = Q->n1 * lp.lam; Ls = Q->c + Q->n1 * log(pj_tsfn(-lp.phi, -sin(lp.phi), P->e)); sinLs1 = sin(L) / cosh(Ls); Ls1 = log(pj_tsfn(-asin(sinLs1), -sinLs1, 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 PJ_LP gstmerc_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_gstmerc_data *Q = static_cast(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(-asin(sinC), -sinC, 0.0)); lp.lam = L / Q->n1; lp.phi = -pj_phi2(P->ctx, exp((LC - Q->c) / Q->n1), P->e); return lp; } PJ *PJ_PROJECTION(gstmerc) { struct pj_gstmerc_data *Q = static_cast( calloc(1, sizeof(struct pj_gstmerc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->lamc = P->lam0; Q->n1 = sqrt(1 + P->es * pow(cos(P->phi0), 4.0) / (1 - P->es)); Q->phic = asin(sin(P->phi0) / Q->n1); Q->c = log(pj_tsfn(-Q->phic, -sin(P->phi0) / Q->n1, 0.0)) - Q->n1 * log(pj_tsfn(-P->phi0, -sin(P->phi0), P->e)); Q->n2 = P->k0 * P->a * sqrt(1 - P->es) / (1 - P->es * sin(P->phi0) * sin(P->phi0)); Q->XS = 0; Q->YS = -Q->n2 * Q->phic; P->inv = gstmerc_s_inverse; P->fwd = gstmerc_s_forward; return P; } proj-9.6.0/src/projections/hammer.cpp000664 001754 001755 00000005005 14764566077 017524 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") "\n\tMisc Sph, \n\tW= M="; #define EPS 1.0e-10 namespace { // anonymous namespace struct pq_hammer { double w; double m, rm; }; } // anonymous namespace static PJ_XY hammer_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pq_hammer *Q = static_cast(P->opaque); double cosphi, d; cosphi = cos(lp.phi); lp.lam *= Q->w; double denom = 1. + cosphi * cos(lp.lam); if (denom == 0.0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } d = sqrt(2. / denom); xy.x = Q->m * d * cosphi * sin(lp.lam); xy.y = Q->rm * d * sin(lp.phi); return xy; } static PJ_LP hammer_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pq_hammer *Q = static_cast(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; proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); } 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; } PJ *PJ_PROJECTION(hammer) { struct pq_hammer *Q = static_cast(calloc(1, sizeof(struct pq_hammer))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (pj_param(P->ctx, P->params, "tW").i) { Q->w = fabs(pj_param(P->ctx, P->params, "dW").f); if (Q->w <= 0.) { proj_log_error(P, _("Invalid value for W: it should be > 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else Q->w = .5; if (pj_param(P->ctx, P->params, "tM").i) { Q->m = fabs(pj_param(P->ctx, P->params, "dM").f); if (Q->m <= 0.) { proj_log_error(P, _("Invalid value for M: it should be > 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else Q->m = 1.; Q->rm = 1. / Q->m; Q->m /= Q->w; P->es = 0.; P->fwd = hammer_s_forward; P->inv = hammer_s_inverse; return P; } #undef EPS proj-9.6.0/src/projections/hatano.cpp000664 001754 001755 00000004072 14764566077 017530 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 CSz 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 PJ_XY hatano_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; int i; (void)P; const double c = sin(lp.phi) * (lp.phi < 0. ? CSz : CN); for (i = NITER; i; --i) { const double th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi)); lp.phi -= th1; 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 PJ_LP hatano_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double th; th = xy.y * (xy.y < 0. ? RYCS : RYCN); if (fabs(th) > 1.) { if (fabs(th) > ONETOL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } 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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = lp.phi > 0. ? M_HALFPI : -M_HALFPI; } } else { lp.phi = asin(lp.phi); } return (lp); } PJ *PJ_PROJECTION(hatano) { P->es = 0.; P->inv = hatano_s_inverse; P->fwd = hatano_s_forward; return P; } #undef NITER #undef EPS #undef ONETOL #undef CN #undef CSz #undef RCN #undef RCS #undef FYCN #undef FYCS #undef RYCN #undef RYCS #undef FXC #undef RXC proj-9.6.0/src/projections/healpix.cpp000664 001754 001755 00000056732 14764566077 017722 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(healpix, "HEALPix") "\n\tSph&Ell\n\trot_xy="; PROJ_HEAD(rhealpix, "rHEALPix") "\n\tSph&Ell\n\tnorth_square= south_square="; /* 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 namespace { // anonymous namespace struct pj_healpix_data { int north_square; int south_square; double rot_xy; double qp; double *apa; }; } // anonymous namespace 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; static const 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. **/ static double sign(double v) { return v > 0 ? 1 : (v < 0 ? -1 : 0); } static PJ_XY rotate(PJ_XY p, double angle) { PJ_XY result; result.x = p.x * cos(angle) - p.y * sin(angle); result.y = p.y * cos(angle) + p.x * sin(angle); return result; } /** * 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; int counter = 0; double xinters; PJ_XY p1, p2; /* Check for boundary 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 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) **/ static 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}, {-M_PI - EPS, M_FORTPI}}; return pnpoly((int)sizeof(healpixVertsJit) / sizeof(healpixVertsJit[0]), healpixVertsJit, x, y); } else { /** * We need to assign the array this way because the input is * dynamic (north_square and south_square vars are unknown at * compile time). **/ double rhealpixVertsJit[][2] = { {-M_PI - EPS, M_FORTPI + EPS}, {-M_PI + north_square * M_HALFPI - EPS, M_FORTPI + EPS}, {-M_PI + north_square * M_HALFPI - EPS, 3 * M_FORTPI + EPS}, {-M_PI + (north_square + 1.0) * M_HALFPI + EPS, 3 * M_FORTPI + EPS}, {-M_PI + (north_square + 1.0) * M_HALFPI + EPS, M_FORTPI + EPS}, {M_PI + EPS, M_FORTPI + EPS}, {M_PI + EPS, -M_FORTPI - EPS}, {-M_PI + (south_square + 1.0) * M_HALFPI + EPS, -M_FORTPI - EPS}, {-M_PI + (south_square + 1.0) * M_HALFPI + EPS, -3 * M_FORTPI - EPS}, {-M_PI + south_square * M_HALFPI - EPS, -3 * M_FORTPI - EPS}, {-M_PI + south_square * M_HALFPI - EPS, -M_FORTPI - EPS}, {-M_PI - EPS, -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 relevant ellipsoid parameters. **/ static double auth_lat(PJ *P, double alpha, int inverse) { struct pj_healpix_data *Q = static_cast(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 (fabs(ratio) > 1) { /* Rounding error. */ ratio = 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. **/ static PJ_XY healpix_sphere(PJ_LP lp) { double lam = lp.lam; double phi = lp.phi; double phi0 = asin(2.0 / 3.0); PJ_XY xy; /* equatorial region */ if (fabs(phi) <= phi0) { xy.x = lam; xy.y = 3 * M_PI / 8 * sin(phi); } else { double lamc; double sigma = sqrt(3 * (1 - fabs(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 = sign(phi) * M_FORTPI * (2 - sigma); } return xy; } /** * Return the inverse of healpix_sphere(). **/ static PJ_LP healpix_spherhealpix_e_inverse(PJ_XY xy) { PJ_LP lp; double x = xy.x; double y = xy.y; double y0 = M_FORTPI; /* Equatorial region. */ if (fabs(y) <= y0) { lp.lam = x; lp.phi = asin(8 * y / (3 * M_PI)); } else if (fabs(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 * fabs(y) / M_PI; lp.lam = xc + (x - xc) / tau; lp.phi = sign(y) * asin(1.0 - pow(tau, 2) / 3.0); } else { lp.lam = -M_PI; lp.phi = 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(const double a[2], const 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(const double a[2], const 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(const double a[2][2], const 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 = CapMap::north; c = M_HALFPI; } else if (y < -M_FORTPI) { capmap.region = CapMap::south; c = -M_HALFPI; } else { capmap.region = CapMap::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 = CapMap::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 = CapMap::south; capmap.x = -3 * M_FORTPI + south_square * M_HALFPI; capmap.y = -M_HALFPI; x = x - south_square * M_HALFPI; } else { capmap.region = CapMap::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 == CapMap::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 == CapMap::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 PJ_XY combine_caps(double x, double y, int north_square, int south_square, int inverse) { PJ_XY xy; double vector[2]; double v_min_c[2]; double ret_dot[2]; const double(*tmpRot)[2]; int pole = 0; CapMap capmap = get_cap(x, y, north_square, south_square, inverse); if (capmap.region == CapMap::equatorial) { xy.x = capmap.x; xy.y = capmap.y; return xy; } double v[] = {x, y}; double c[] = {capmap.x, capmap.y}; if (inverse == 0) { /* Rotate (x, y) about its polar cap tip and then translate it to north_square or south_square. */ if (capmap.region == CapMap::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. */ /* disassemble */ if (capmap.region == CapMap::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); { double a[] = {-3 * M_FORTPI + ((inverse == 0) ? pole : capmap.cn) * M_HALFPI, ((capmap.region == CapMap::north) ? 1 : -1) * M_HALFPI}; vector_add(ret_dot, a, vector); } xy.x = vector[0]; xy.y = vector[1]; return xy; } static PJ_XY s_healpix_forward(PJ_LP lp, PJ *P) { /* sphere */ (void)P; struct pj_healpix_data *Q = static_cast(P->opaque); return rotate(healpix_sphere(lp), -Q->rot_xy); } static PJ_XY e_healpix_forward(PJ_LP lp, PJ *P) { /* ellipsoid */ lp.phi = auth_lat(P, lp.phi, 0); struct pj_healpix_data *Q = static_cast(P->opaque); return rotate(healpix_sphere(lp), -Q->rot_xy); } static PJ_LP s_healpix_inverse(PJ_XY xy, PJ *P) { /* sphere */ struct pj_healpix_data *Q = static_cast(P->opaque); xy = rotate(xy, Q->rot_xy); /* Check whether (x, y) lies in the HEALPix image */ if (in_image(xy.x, xy.y, 0, 0, 0) == 0) { PJ_LP lp; lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return healpix_spherhealpix_e_inverse(xy); } static PJ_LP e_healpix_inverse(PJ_XY xy, PJ *P) { /* ellipsoid */ PJ_LP lp = {0.0, 0.0}; struct pj_healpix_data *Q = static_cast(P->opaque); xy = rotate(xy, Q->rot_xy); /* 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; proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp = healpix_spherhealpix_e_inverse(xy); lp.phi = auth_lat(P, lp.phi, 1); return lp; } static PJ_XY s_rhealpix_forward(PJ_LP lp, PJ *P) { /* sphere */ struct pj_healpix_data *Q = static_cast(P->opaque); PJ_XY xy = healpix_sphere(lp); return combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 0); } static PJ_XY e_rhealpix_forward(PJ_LP lp, PJ *P) { /* ellipsoid */ struct pj_healpix_data *Q = static_cast(P->opaque); PJ_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 PJ_LP s_rhealpix_inverse(PJ_XY xy, PJ *P) { /* sphere */ struct pj_healpix_data *Q = static_cast(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) { PJ_LP lp; lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } xy = combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 1); return healpix_spherhealpix_e_inverse(xy); } static PJ_LP e_rhealpix_inverse(PJ_XY xy, PJ *P) { /* ellipsoid */ struct pj_healpix_data *Q = static_cast(P->opaque); PJ_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; proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } xy = combine_caps(xy.x, xy.y, Q->north_square, Q->south_square, 1); lp = healpix_spherhealpix_e_inverse(xy); lp.phi = auth_lat(P, lp.phi, 1); return lp; } static PJ *pj_healpix_data_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->apa); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(healpix) { struct pj_healpix_data *Q = static_cast( calloc(1, sizeof(struct pj_healpix_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_healpix_data_destructor; double angle = pj_param(P->ctx, P->params, "drot_xy").f; Q->rot_xy = PJ_TORAD(angle); if (P->es != 0.0) { Q->apa = pj_authset(P->es); /* For auth_lat(). */ if (nullptr == Q->apa) return pj_healpix_data_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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. */ pj_calc_ellipsoid_params( P, P->a, P->es); /* Ensure we have a consistent parameter set */ P->fwd = e_healpix_forward; P->inv = e_healpix_inverse; } else { P->fwd = s_healpix_forward; P->inv = s_healpix_inverse; } return P; } PJ *PJ_PROJECTION(rhealpix) { struct pj_healpix_data *Q = static_cast( calloc(1, sizeof(struct pj_healpix_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_healpix_data_destructor; 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) { proj_log_error( P, _("Invalid value for north_square: it should be in [0,3] range.")); return pj_healpix_data_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (Q->south_square < 0 || Q->south_square > 3) { proj_log_error( P, _("Invalid value for south_square: it should be in [0,3] range.")); return pj_healpix_data_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (P->es != 0.0) { Q->apa = pj_authset(P->es); /* For auth_lat(). */ if (nullptr == Q->apa) return pj_healpix_data_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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; } #undef R1 #undef R2 #undef R3 #undef IDENT #undef ROT #undef EPS proj-9.6.0/src/projections/igh.cpp000664 001754 001755 00000022530 14764566077 017024 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(igh, "Interrupted Goode Homolosine") "\n\tPCyl, Sph"; /* This projection is a compilation of 12 separate sub-projections. Sinusoidal projections are found near the equator and Mollweide projections are found at higher latitudes. The transition between the two occurs at 40 degrees latitude and is represented by the constant `igh_phi_boundary`. Each sub-projection is assigned an integer label numbered 1 through 12. Most of this code contains logic to assign the labels based on latitude (phi) and longitude (lam) regions. Original Reference: J. Paul Goode (1925) THE HOMOLOSINE PROJECTION: A NEW DEVICE FOR PORTRAYING THE EARTH'S SURFACE ENTIRE, Annals of the Association of American Geographers, 15:3, 119-125, DOI: 10.1080/00045602509356949 */ C_NAMESPACE PJ *pj_sinu(PJ *), *pj_moll(PJ *); /* Transition from sinusoidal to Mollweide projection Latitude (phi): 40deg 44' 11.8" */ constexpr double igh_phi_boundary = (40 + 44 / 60. + 11.8 / 3600.) * DEG_TO_RAD; namespace pj_igh_ns { struct pj_igh_data { struct PJconsts *pj[12]; double dy0; }; constexpr double d10 = 10 * DEG_TO_RAD; constexpr double d20 = 20 * DEG_TO_RAD; constexpr double d30 = 30 * DEG_TO_RAD; constexpr double d40 = 40 * DEG_TO_RAD; constexpr double d50 = 50 * DEG_TO_RAD; constexpr double d60 = 60 * DEG_TO_RAD; constexpr double d80 = 80 * DEG_TO_RAD; constexpr double d90 = 90 * DEG_TO_RAD; constexpr double d100 = 100 * DEG_TO_RAD; constexpr double d140 = 140 * DEG_TO_RAD; constexpr double d160 = 160 * DEG_TO_RAD; constexpr double d180 = 180 * DEG_TO_RAD; constexpr double EPSLN = 1.e-10; /* allow a little 'slack' on zone edge positions */ } // namespace pj_igh_ns static PJ_XY igh_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ using namespace pj_igh_ns; PJ_XY xy; struct pj_igh_data *Q = static_cast(P->opaque); int z; if (lp.phi >= igh_phi_boundary) { /* 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 >= -igh_phi_boundary) { /* 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 PJ_LP igh_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ using namespace pj_igh_ns; PJ_LP lp = {0.0, 0.0}; struct pj_igh_data *Q = static_cast(P->opaque); const double y90 = Q->dy0 + sqrt(2.0); /* 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 >= igh_phi_boundary) /* 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 >= -igh_phi_boundary) { /* 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) { bool ok = false; 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 PJ *pj_igh_data_destructor(PJ *P, int errlev) { using namespace pj_igh_ns; int i; if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); struct pj_igh_data *Q = static_cast(P->opaque); for (i = 0; i < 12; ++i) { if (Q->pj[i]) Q->pj[i]->destructor(Q->pj[i], errlev); } return pj_default_destructor(P, errlev); } /* 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 */ static bool pj_igh_setup_zone(PJ *P, struct pj_igh_ns::pj_igh_data *Q, int n, PJ *(*proj_ptr)(PJ *), double x_0, double y_0, double lon_0) { if (!(Q->pj[n - 1] = proj_ptr(nullptr))) return false; if (!(Q->pj[n - 1] = proj_ptr(Q->pj[n - 1]))) return false; Q->pj[n - 1]->ctx = P->ctx; Q->pj[n - 1]->x0 = x_0; Q->pj[n - 1]->y0 = y_0; Q->pj[n - 1]->lam0 = lon_0; return true; } PJ *PJ_PROJECTION(igh) { using namespace pj_igh_ns; PJ_XY xy1, xy3; PJ_LP lp = {0, igh_phi_boundary}; struct pj_igh_data *Q = static_cast( calloc(1, sizeof(struct pj_igh_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; /* sinusoidal zones */ if (!pj_igh_setup_zone(P, Q, 3, pj_sinu, -d100, 0, -d100) || !pj_igh_setup_zone(P, Q, 4, pj_sinu, d30, 0, d30) || !pj_igh_setup_zone(P, Q, 5, pj_sinu, -d160, 0, -d160) || !pj_igh_setup_zone(P, Q, 6, pj_sinu, -d60, 0, -d60) || !pj_igh_setup_zone(P, Q, 7, pj_sinu, d20, 0, d20) || !pj_igh_setup_zone(P, Q, 8, pj_sinu, d140, 0, d140)) { return pj_igh_data_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } /* mollweide zones */ if (!pj_igh_setup_zone(P, Q, 1, pj_moll, -d100, 0, -d100)) { return pj_igh_data_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } /* 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) */ if (!pj_igh_setup_zone(P, Q, 2, pj_moll, d30, Q->dy0, d30) || !pj_igh_setup_zone(P, Q, 9, pj_moll, -d160, -Q->dy0, -d160) || !pj_igh_setup_zone(P, Q, 10, pj_moll, -d60, -Q->dy0, -d60) || !pj_igh_setup_zone(P, Q, 11, pj_moll, d20, -Q->dy0, d20) || !pj_igh_setup_zone(P, Q, 12, pj_moll, d140, -Q->dy0, d140)) { return pj_igh_data_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } P->inv = igh_s_inverse; P->fwd = igh_s_forward; P->destructor = pj_igh_data_destructor; P->es = 0.; return P; } proj-9.6.0/src/projections/igh_o.cpp000664 001754 001755 00000023255 14764566077 017347 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(igh_o, "Interrupted Goode Homolosine Oceanic View") "\n\tPCyl, Sph"; /* This projection is a variant of the Interrupted Goode Homolosine projection that emphasizes ocean areas. The projection is a compilation of 12 separate sub-projections. Sinusoidal projections are found near the equator and Mollweide projections are found at higher latitudes. The transition between the two occurs at 40 degrees latitude and is represented by `igh_o_phi_boundary`. Each sub-projection is assigned an integer label numbered 1 through 12. Most of this code contains logic to assign the labels based on latitude (phi) and longitude (lam) regions. Original Reference: J. Paul Goode (1925) THE HOMOLOSINE PROJECTION: A NEW DEVICE FOR PORTRAYING THE EARTH'S SURFACE ENTIRE, Annals of the Association of American Geographers, 15:3, 119-125, DOI: 10.1080/00045602509356949 */ C_NAMESPACE PJ *pj_sinu(PJ *), *pj_moll(PJ *); /* Transition from sinusoidal to Mollweide projection Latitude (phi): 40deg 44' 11.8" */ constexpr double igh_o_phi_boundary = (40 + 44 / 60. + 11.8 / 3600.) * DEG_TO_RAD; namespace pj_igh_o_ns { struct pj_igh_o_data { struct PJconsts *pj[12]; double dy0; }; constexpr double d10 = 10 * DEG_TO_RAD; constexpr double d20 = 20 * DEG_TO_RAD; constexpr double d40 = 40 * DEG_TO_RAD; constexpr double d50 = 50 * DEG_TO_RAD; constexpr double d60 = 60 * DEG_TO_RAD; constexpr double d90 = 90 * DEG_TO_RAD; constexpr double d100 = 100 * DEG_TO_RAD; constexpr double d110 = 110 * DEG_TO_RAD; constexpr double d140 = 140 * DEG_TO_RAD; constexpr double d150 = 150 * DEG_TO_RAD; constexpr double d160 = 160 * DEG_TO_RAD; constexpr double d130 = 130 * DEG_TO_RAD; constexpr double d180 = 180 * DEG_TO_RAD; constexpr double EPSLN = 1.e-10; /* allow a little 'slack' on zone edge positions */ } // namespace pj_igh_o_ns /* Assign an integer index representing each of the 12 sub-projection zones based on latitude (phi) and longitude (lam) ranges. */ static PJ_XY igh_o_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ using namespace pj_igh_o_ns; PJ_XY xy; struct pj_igh_o_data *Q = static_cast(P->opaque); int z; if (lp.phi >= igh_o_phi_boundary) { if (lp.lam <= -d90) z = 1; else if (lp.lam >= d60) z = 3; else z = 2; } else if (lp.phi >= 0) { if (lp.lam <= -d90) z = 4; else if (lp.lam >= d60) z = 6; else z = 5; } else if (lp.phi >= -igh_o_phi_boundary) { if (lp.lam <= -d60) z = 7; else if (lp.lam >= d90) z = 9; else z = 8; } else { if (lp.lam <= -d60) z = 10; else if (lp.lam >= d90) z = 12; else z = 11; } 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 PJ_LP igh_o_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ using namespace pj_igh_o_ns; PJ_LP lp = {0.0, 0.0}; struct pj_igh_o_data *Q = static_cast(P->opaque); const double y90 = Q->dy0 + sqrt(2.0); /* 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 >= igh_o_phi_boundary) if (xy.x <= -d90) z = 1; else if (xy.x >= d60) z = 3; else z = 2; else if (xy.y >= 0) if (xy.x <= -d90) z = 4; else if (xy.x >= d60) z = 6; else z = 5; else if (xy.y >= -igh_o_phi_boundary) { if (xy.x <= -d60) z = 7; else if (xy.x >= d90) z = 9; else z = 8; } else { if (xy.x <= -d60) z = 10; else if (xy.x >= d90) z = 12; else z = 11; } if (z) { bool ok = false; 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) { /* Plot projectable ranges with exetension lobes in zones 1 & 3 */ case 1: ok = (lp.lam >= -d180 - EPSLN && lp.lam <= -d90 + EPSLN) || ((lp.lam >= d160 - EPSLN && lp.lam <= d180 + EPSLN) && (lp.phi >= d50 - EPSLN && lp.phi <= d90 + EPSLN)); break; case 2: ok = (lp.lam >= -d90 - EPSLN && lp.lam <= d60 + EPSLN); break; case 3: ok = (lp.lam >= d60 - EPSLN && lp.lam <= d180 + EPSLN) || ((lp.lam >= -d180 - EPSLN && lp.lam <= -d160 + EPSLN) && (lp.phi >= d50 - EPSLN && lp.phi <= d90 + EPSLN)); break; case 4: ok = (lp.lam >= -d180 - EPSLN && lp.lam <= -d90 + EPSLN); break; case 5: ok = (lp.lam >= -d90 - EPSLN && lp.lam <= d60 + EPSLN); break; case 6: ok = (lp.lam >= d60 - EPSLN && lp.lam <= d180 + EPSLN); break; case 7: ok = (lp.lam >= -d180 - EPSLN && lp.lam <= -d60 + EPSLN); break; case 8: ok = (lp.lam >= -d60 - EPSLN && lp.lam <= d90 + EPSLN); break; case 9: ok = (lp.lam >= d90 - EPSLN && lp.lam <= d180 + EPSLN); break; case 10: ok = (lp.lam >= -d180 - EPSLN && lp.lam <= -d60 + EPSLN); break; case 11: ok = (lp.lam >= -d60 - EPSLN && lp.lam <= d90 + EPSLN) || ((lp.lam >= d90 - EPSLN && lp.lam <= d100 + EPSLN) && (lp.phi >= -d90 - EPSLN && lp.phi <= -d40 + EPSLN)); break; case 12: ok = (lp.lam >= d90 - 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 PJ *pj_igh_o_destructor(PJ *P, int errlev) { using namespace pj_igh_o_ns; int i; if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); struct pj_igh_o_data *Q = static_cast(P->opaque); for (i = 0; i < 12; ++i) { if (Q->pj[i]) Q->pj[i]->destructor(Q->pj[i], errlev); } return pj_default_destructor(P, errlev); } /* Zones: -180 -90 60 180 +---------+----------------+-------------+ Zones 1,2,3,10,11 & 12: |1 |2 |3 | Mollweide projection | | | | +---------+----------------+-------------+ Zones 4,5,6,7,8 & 9: |4 |5 |6 | Sinusoidal projection | | | | 0 +---------+--+-------------+--+----------+ |7 |8 |9 | | | | | +------------+----------------+----------+ |10 |11 |12 | | | | | +------------+----------------+----------+ -180 -60 90 180 */ static bool pj_igh_o_setup_zone(PJ *P, struct pj_igh_o_ns::pj_igh_o_data *Q, int n, PJ *(*proj_ptr)(PJ *), double x_0, double y_0, double lon_0) { if (!(Q->pj[n - 1] = proj_ptr(nullptr))) return false; if (!(Q->pj[n - 1] = proj_ptr(Q->pj[n - 1]))) return false; Q->pj[n - 1]->ctx = P->ctx; Q->pj[n - 1]->x0 = x_0; Q->pj[n - 1]->y0 = y_0; Q->pj[n - 1]->lam0 = lon_0; return true; } PJ *PJ_PROJECTION(igh_o) { using namespace pj_igh_o_ns; PJ_XY xy1, xy4; PJ_LP lp = {0, igh_o_phi_boundary}; struct pj_igh_o_data *Q = static_cast( calloc(1, sizeof(struct pj_igh_o_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; /* sinusoidal zones */ if (!pj_igh_o_setup_zone(P, Q, 4, pj_sinu, -d140, 0, -d140) || !pj_igh_o_setup_zone(P, Q, 5, pj_sinu, -d10, 0, -d10) || !pj_igh_o_setup_zone(P, Q, 6, pj_sinu, d130, 0, d130) || !pj_igh_o_setup_zone(P, Q, 7, pj_sinu, -d110, 0, -d110) || !pj_igh_o_setup_zone(P, Q, 8, pj_sinu, d20, 0, d20) || !pj_igh_o_setup_zone(P, Q, 9, pj_sinu, d150, 0, d150)) { return pj_igh_o_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } /* mollweide zones */ if (!pj_igh_o_setup_zone(P, Q, 1, pj_moll, -d140, 0, -d140)) { return pj_igh_o_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } /* y0 ? */ xy1 = Q->pj[0]->fwd(lp, Q->pj[0]); /* zone 1 */ xy4 = Q->pj[3]->fwd(lp, Q->pj[3]); /* zone 4 */ /* y0 + xy1.y = xy4.y for lt = 40d44'11.8" */ Q->dy0 = xy4.y - xy1.y; Q->pj[0]->y0 = Q->dy0; /* mollweide zones (cont'd) */ if (!pj_igh_o_setup_zone(P, Q, 2, pj_moll, -d10, Q->dy0, -d10) || !pj_igh_o_setup_zone(P, Q, 3, pj_moll, d130, Q->dy0, d130) || !pj_igh_o_setup_zone(P, Q, 10, pj_moll, -d110, -Q->dy0, -d110) || !pj_igh_o_setup_zone(P, Q, 11, pj_moll, d20, -Q->dy0, d20) || !pj_igh_o_setup_zone(P, Q, 12, pj_moll, d150, -Q->dy0, d150)) { return pj_igh_o_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } P->inv = igh_o_s_inverse; P->fwd = igh_o_s_forward; P->destructor = pj_igh_o_destructor; P->es = 0.; return P; } proj-9.6.0/src/projections/imoll.cpp000664 001754 001755 00000021331 14764566077 017367 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(imoll, "Interrupted Mollweide") "\n\tPCyl, Sph"; /* This projection is a compilation of 6 separate sub-projections. It is related to the Interrupted Goode Homolosine projection, but uses Mollweide at all latitudes. Each sub-projection is assigned an integer label numbered 1 through 6. Most of this code contains logic to assign the labels based on latitude (phi) and longitude (lam) regions. The code is adapted from igh.cpp. Original Reference: J. Paul Goode (1919) STUDIES IN PROJECTIONS: ADAPTING THE HOMOLOGRAPHIC PROJECTION TO THE PORTRAYAL OF THE EARTH'S ENTIRE SURFACE, Bul. Geog. SOC.Phila., Vol. XWIJNO.3. July, 1919, pp. 103-113. */ C_NAMESPACE PJ *pj_moll(PJ *); namespace pj_imoll_ns { struct pj_imoll_data { struct PJconsts *pj[6]; // We need to know the inverse boundary locations of the "seams". double boundary12; double boundary34; double boundary45; double boundary56; }; constexpr double d20 = 20 * DEG_TO_RAD; constexpr double d30 = 30 * DEG_TO_RAD; constexpr double d40 = 40 * DEG_TO_RAD; constexpr double d60 = 60 * DEG_TO_RAD; constexpr double d80 = 80 * DEG_TO_RAD; constexpr double d100 = 100 * DEG_TO_RAD; constexpr double d140 = 140 * DEG_TO_RAD; constexpr double d160 = 160 * DEG_TO_RAD; constexpr double d180 = 180 * DEG_TO_RAD; constexpr double EPSLN = 1.e-10; /* allow a little 'slack' on zone edge positions */ } // namespace pj_imoll_ns /* Assign an integer index representing each of the 6 sub-projection zones based on latitude (phi) and longitude (lam) ranges. */ static PJ_XY imoll_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ using namespace pj_imoll_ns; PJ_XY xy; struct pj_imoll_data *Q = static_cast(P->opaque); int z; if (lp.phi >= 0) { /* 1|2 */ z = (lp.lam <= -d40 ? 1 : 2); } else { /* 3|4|5|6 */ if (lp.lam <= -d100) z = 3; /* 3 */ else if (lp.lam <= -d20) z = 4; /* 4 */ else if (lp.lam <= d80) z = 5; /* 5 */ else z = 6; /* 6 */ } 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 PJ_LP imoll_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ using namespace pj_imoll_ns; PJ_LP lp = {0.0, 0.0}; struct pj_imoll_data *Q = static_cast(P->opaque); const double y90 = sqrt(2.0); /* lt=90 corresponds to y=sqrt(2) */ int z = 0; if (xy.y > y90 + EPSLN || xy.y < -y90 + EPSLN) /* 0 */ z = 0; else if (xy.y >= 0) z = (xy.x <= (Q->boundary12) ? 1 : 2); /* 1|2 */ else { if (xy.x <= Q->boundary34) z = 3; /* 3 */ else if (xy.x <= Q->boundary45) z = 4; /* 4 */ else if (xy.x <= Q->boundary56) z = 5; /* 5 */ else z = 6; /* 6 */ } if (z) { bool ok = false; 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.phi >= 0.0 - EPSLN)); break; case 2: ok = ((lp.lam >= -d40 - EPSLN && lp.lam <= d180 + EPSLN) && (lp.phi >= 0.0 - EPSLN)); break; case 3: ok = ((lp.lam >= -d180 - EPSLN && lp.lam <= -d100 + EPSLN) && (lp.phi <= 0.0 + EPSLN)); break; case 4: ok = ((lp.lam >= -d100 - EPSLN && lp.lam <= -d20 + EPSLN) && (lp.phi <= 0.0 + EPSLN)); break; case 5: ok = ((lp.lam >= -d20 - EPSLN && lp.lam <= d80 + EPSLN) && (lp.phi <= 0.0 + EPSLN)); break; case 6: ok = ((lp.lam >= d80 - EPSLN && lp.lam <= d180 + EPSLN) && (lp.phi <= 0.0 + EPSLN)); break; } z = (!ok ? 0 : z); /* projectable? */ } if (!z) lp.lam = HUGE_VAL; if (!z) lp.phi = HUGE_VAL; return lp; } static PJ *pj_imoll_destructor(PJ *P, int errlev) { using namespace pj_imoll_ns; int i; if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); struct pj_imoll_data *Q = static_cast(P->opaque); for (i = 0; i < 6; ++i) { if (Q->pj[i]) Q->pj[i]->destructor(Q->pj[i], errlev); } return pj_default_destructor(P, errlev); } /* Zones: -180 -40 180 +--------------+-------------------------+ |1 |2 | | | | | | | | | | | | | 0 +-------+------+-+-----------+-----------+ |3 |4 |5 |6 | | | | | | | | | | | | | | | | | | | | | +-------+--------+-----------+-----------+ -180 -100 -20 80 180 */ static bool setup_zone(PJ *P, struct pj_imoll_ns::pj_imoll_data *Q, int n, PJ *(*proj_ptr)(PJ *), double x_0, double y_0, double lon_0) { if (!(Q->pj[n - 1] = proj_ptr(nullptr))) return false; if (!(Q->pj[n - 1] = proj_ptr(Q->pj[n - 1]))) return false; Q->pj[n - 1]->ctx = P->ctx; Q->pj[n - 1]->x0 = x_0; Q->pj[n - 1]->y0 = y_0; Q->pj[n - 1]->lam0 = lon_0; return true; } static double compute_zone_offset(struct pj_imoll_ns::pj_imoll_data *Q, int zone1, int zone2, double lam, double phi1, double phi2) { PJ_LP lp1, lp2; PJ_XY xy1, xy2; lp1.lam = lam - (Q->pj[zone1 - 1]->lam0); lp1.phi = phi1; lp2.lam = lam - (Q->pj[zone2 - 1]->lam0); lp2.phi = phi2; xy1 = Q->pj[zone1 - 1]->fwd(lp1, Q->pj[zone1 - 1]); xy2 = Q->pj[zone2 - 1]->fwd(lp2, Q->pj[zone2 - 1]); return (xy2.x + Q->pj[zone2 - 1]->x0) - (xy1.x + Q->pj[zone1 - 1]->x0); } static double compute_zone_x_boundary(PJ *P, double lam, double phi) { PJ_LP lp1, lp2; PJ_XY xy1, xy2; lp1.lam = lam - pj_imoll_ns::EPSLN; lp1.phi = phi; lp2.lam = lam + pj_imoll_ns::EPSLN; lp2.phi = phi; xy1 = imoll_s_forward(lp1, P); xy2 = imoll_s_forward(lp2, P); return (xy1.x + xy2.x) / 2.; } PJ *PJ_PROJECTION(imoll) { using namespace pj_imoll_ns; struct pj_imoll_data *Q = static_cast( calloc(1, sizeof(struct pj_imoll_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; /* Setup zones */ if (!setup_zone(P, Q, 1, pj_moll, -d100, 0, -d100) || !setup_zone(P, Q, 2, pj_moll, d30, 0, d30) || !setup_zone(P, Q, 3, pj_moll, -d160, 0, -d160) || !setup_zone(P, Q, 4, pj_moll, -d60, 0, -d60) || !setup_zone(P, Q, 5, pj_moll, d20, 0, d20) || !setup_zone(P, Q, 6, pj_moll, d140, 0, d140)) { return pj_imoll_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } /* Adjust zones */ /* Match 3 (south) to 1 (north) */ Q->pj[2]->x0 += compute_zone_offset(Q, 3, 1, -d160, 0.0 - EPSLN, 0.0 + EPSLN); /* Match 2 (north-east) to 1 (north-west) */ Q->pj[1]->x0 += compute_zone_offset(Q, 2, 1, -d40, 0.0 + EPSLN, 0.0 + EPSLN); /* Match 4 (south) to 1 (north) */ Q->pj[3]->x0 += compute_zone_offset(Q, 4, 1, -d100, 0.0 - EPSLN, 0.0 + EPSLN); /* Match 5 (south) to 2 (north) */ Q->pj[4]->x0 += compute_zone_offset(Q, 5, 2, -d20, 0.0 - EPSLN, 0.0 + EPSLN); /* Match 6 (south) to 2 (north) */ Q->pj[5]->x0 += compute_zone_offset(Q, 6, 2, d80, 0.0 - EPSLN, 0.0 + EPSLN); /* The most straightforward way of computing the x locations of the "seams" in the interrupted projection is to compute the forward transform at the seams and record these values. */ Q->boundary12 = compute_zone_x_boundary(P, -d40, 0.0 + EPSLN); Q->boundary34 = compute_zone_x_boundary(P, -d100, 0.0 - EPSLN); Q->boundary45 = compute_zone_x_boundary(P, -d20, 0.0 - EPSLN); Q->boundary56 = compute_zone_x_boundary(P, d80, 0.0 - EPSLN); P->inv = imoll_s_inverse; P->fwd = imoll_s_forward; P->destructor = pj_imoll_destructor; P->es = 0.; return P; } proj-9.6.0/src/projections/imoll_o.cpp000664 001754 001755 00000022400 14764566077 017703 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(imoll_o, "Interrupted Mollweide Oceanic View") "\n\tPCyl, Sph"; /* This projection is a variant of the Interrupted Mollweide projection that emphasizes ocean areas. This projection is a compilation of 6 separate sub-projections. It is related to the Interrupted Goode Homolosine projection, but uses Mollweide at all latitudes. Each sub-projection is assigned an integer label numbered 1 through 6. Most of this code contains logic to assign the labels based on latitude (phi) and longitude (lam) regions. The code is adapted from igh.cpp. Original Reference: J. Paul Goode (1919) STUDIES IN PROJECTIONS: ADAPTING THE HOMOLOGRAPHIC PROJECTION TO THE PORTRAYAL OF THE EARTH'S ENTIRE SURFACE, Bul. Geog. SOC.Phila., Vol. XWIJNO.3. July, 1919, pp. 103-113. */ C_NAMESPACE PJ *pj_moll(PJ *); namespace pj_imoll_o_ns { struct pj_imoll_o_data { struct PJconsts *pj[6]; // We need to know the inverse boundary locations of the "seams". double boundary12; double boundary23; double boundary45; double boundary56; }; /* SIMPLIFY THIS */ constexpr double d10 = 10 * DEG_TO_RAD; constexpr double d20 = 20 * DEG_TO_RAD; constexpr double d60 = 60 * DEG_TO_RAD; constexpr double d90 = 90 * DEG_TO_RAD; constexpr double d110 = 110 * DEG_TO_RAD; constexpr double d130 = 130 * DEG_TO_RAD; constexpr double d140 = 140 * DEG_TO_RAD; constexpr double d150 = 150 * DEG_TO_RAD; constexpr double d180 = 180 * DEG_TO_RAD; constexpr double EPSLN = 1.e-10; /* allow a little 'slack' on zone edge positions */ } // namespace pj_imoll_o_ns /* Assign an integer index representing each of the 6 sub-projection zones based on latitude (phi) and longitude (lam) ranges. */ static PJ_XY imoll_o_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ using namespace pj_imoll_o_ns; PJ_XY xy; struct pj_imoll_o_data *Q = static_cast(P->opaque); int z; if (lp.phi >= 0) { /* 1|2|3 */ if (lp.lam <= -d90) z = 1; else if (lp.lam >= d60) z = 3; else z = 2; } else { if (lp.lam <= -d60) z = 4; else if (lp.lam >= d90) z = 6; else z = 5; } 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 PJ_LP imoll_o_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ using namespace pj_imoll_o_ns; PJ_LP lp = {0.0, 0.0}; struct pj_imoll_o_data *Q = static_cast(P->opaque); const double y90 = sqrt(2.0); /* lt=90 corresponds to y=sqrt(2) */ int z = 0; if (xy.y > y90 + EPSLN || xy.y < -y90 + EPSLN) /* 0 */ z = 0; else if (xy.y >= 0) { if (xy.x <= Q->boundary12) z = 1; else if (xy.x >= Q->boundary23) z = 3; else z = 2; } else { if (xy.x <= Q->boundary45) z = 4; else if (xy.x >= Q->boundary56) z = 6; else z = 5; } if (z) { bool ok = false; 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 <= -d90 + EPSLN) && (lp.phi >= 0.0 - EPSLN)); break; case 2: ok = ((lp.lam >= -d90 - EPSLN && lp.lam <= d60 + EPSLN) && (lp.phi >= 0.0 - EPSLN)); break; case 3: ok = ((lp.lam >= d60 - EPSLN && lp.lam <= d180 + EPSLN) && (lp.phi >= 0.0 - EPSLN)); break; case 4: ok = ((lp.lam >= -d180 - EPSLN && lp.lam <= -d60 + EPSLN) && (lp.phi <= 0.0 + EPSLN)); break; case 5: ok = ((lp.lam >= -d60 - EPSLN && lp.lam <= d90 + EPSLN) && (lp.phi <= 0.0 + EPSLN)); break; case 6: ok = ((lp.lam >= d90 - EPSLN && lp.lam <= d180 + EPSLN) && (lp.phi <= 0.0 + EPSLN)); break; } z = (!ok ? 0 : z); /* projectable? */ } if (!z) lp.lam = HUGE_VAL; if (!z) lp.phi = HUGE_VAL; return lp; } static PJ *pj_imoll_o_destructor(PJ *P, int errlev) { using namespace pj_imoll_o_ns; int i; if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); struct pj_imoll_o_data *Q = static_cast(P->opaque); for (i = 0; i < 6; ++i) { if (Q->pj[i]) Q->pj[i]->destructor(Q->pj[i], errlev); } return pj_default_destructor(P, errlev); } /* Zones: -180 -90 60 180 +---------+----------------+-------------+ |1 |2 |3 | | | | | | | | | | | | | | | | | 0 +---------+--+-------------+--+----------+ |4 |5 |6 | | | | | | | | | | | | | | | | | +------------+----------------+----------+ -180 -60 90 180 */ static bool pj_imoll_o_setup_zone(PJ *P, struct pj_imoll_o_ns::pj_imoll_o_data *Q, int n, PJ *(*proj_ptr)(PJ *), double x_0, double y_0, double lon_0) { if (!(Q->pj[n - 1] = proj_ptr(nullptr))) return false; if (!(Q->pj[n - 1] = proj_ptr(Q->pj[n - 1]))) return false; Q->pj[n - 1]->ctx = P->ctx; Q->pj[n - 1]->x0 = x_0; Q->pj[n - 1]->y0 = y_0; Q->pj[n - 1]->lam0 = lon_0; return true; } static double pj_imoll_o_compute_zone_offset(struct pj_imoll_o_ns::pj_imoll_o_data *Q, int zone1, int zone2, double lam, double phi1, double phi2) { PJ_LP lp1, lp2; PJ_XY xy1, xy2; lp1.lam = lam - (Q->pj[zone1 - 1]->lam0); lp1.phi = phi1; lp2.lam = lam - (Q->pj[zone2 - 1]->lam0); lp2.phi = phi2; xy1 = Q->pj[zone1 - 1]->fwd(lp1, Q->pj[zone1 - 1]); xy2 = Q->pj[zone2 - 1]->fwd(lp2, Q->pj[zone2 - 1]); return (xy2.x + Q->pj[zone2 - 1]->x0) - (xy1.x + Q->pj[zone1 - 1]->x0); } static double pj_imoll_o_compute_zone_x_boundary(PJ *P, double lam, double phi) { PJ_LP lp1, lp2; PJ_XY xy1, xy2; lp1.lam = lam - pj_imoll_o_ns::EPSLN; lp1.phi = phi; lp2.lam = lam + pj_imoll_o_ns::EPSLN; lp2.phi = phi; xy1 = imoll_o_s_forward(lp1, P); xy2 = imoll_o_s_forward(lp2, P); return (xy1.x + xy2.x) / 2.; } PJ *PJ_PROJECTION(imoll_o) { using namespace pj_imoll_o_ns; struct pj_imoll_o_data *Q = static_cast( calloc(1, sizeof(struct pj_imoll_o_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; /* Setup zones */ if (!pj_imoll_o_setup_zone(P, Q, 1, pj_moll, -d140, 0, -d140) || !pj_imoll_o_setup_zone(P, Q, 2, pj_moll, -d10, 0, -d10) || !pj_imoll_o_setup_zone(P, Q, 3, pj_moll, d130, 0, d130) || !pj_imoll_o_setup_zone(P, Q, 4, pj_moll, -d110, 0, -d110) || !pj_imoll_o_setup_zone(P, Q, 5, pj_moll, d20, 0, d20) || !pj_imoll_o_setup_zone(P, Q, 6, pj_moll, d150, 0, d150)) { return pj_imoll_o_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } /* Adjust zones */ /* Match 2 (center) to 1 (west) */ Q->pj[1]->x0 += pj_imoll_o_compute_zone_offset(Q, 2, 1, -d90, 0.0 + EPSLN, 0.0 + EPSLN); /* Match 3 (east) to 2 (center) */ Q->pj[2]->x0 += pj_imoll_o_compute_zone_offset(Q, 3, 2, d60, 0.0 + EPSLN, 0.0 + EPSLN); /* Match 4 (south) to 1 (north) */ Q->pj[3]->x0 += pj_imoll_o_compute_zone_offset(Q, 4, 1, -d180, 0.0 - EPSLN, 0.0 + EPSLN); /* Match 5 (south) to 2 (north) */ Q->pj[4]->x0 += pj_imoll_o_compute_zone_offset(Q, 5, 2, -d60, 0.0 - EPSLN, 0.0 + EPSLN); /* Match 6 (south) to 3 (north) */ Q->pj[5]->x0 += pj_imoll_o_compute_zone_offset(Q, 6, 3, d90, 0.0 - EPSLN, 0.0 + EPSLN); /* The most straightforward way of computing the x locations of the "seams" in the interrupted projection is to compute the forward transform at the seams and record these values. */ Q->boundary12 = pj_imoll_o_compute_zone_x_boundary(P, -d90, 0.0 + EPSLN); Q->boundary23 = pj_imoll_o_compute_zone_x_boundary(P, d60, 0.0 + EPSLN); Q->boundary45 = pj_imoll_o_compute_zone_x_boundary(P, -d60, 0.0 - EPSLN); Q->boundary56 = pj_imoll_o_compute_zone_x_boundary(P, d90, 0.0 - EPSLN); P->inv = imoll_o_s_inverse; P->fwd = imoll_o_s_forward; P->destructor = pj_imoll_o_destructor; P->es = 0.; return P; } proj-9.6.0/src/projections/imw_p.cpp000664 001754 001755 00000015525 14764566077 017376 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" 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 namespace { // anonymous namespace enum Mode { NONE_IS_ZERO = 0, /* phi_1 and phi_2 != 0 */ PHI_1_IS_ZERO = 1, /* phi_1 = 0 */ PHI_2_IS_ZERO = -1 /* phi_2 = 0 */ }; } // anonymous namespace namespace { // anonymous namespace struct pj_imw_p_data { double P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2; double phi_1, phi_2, lam_1; double *en; enum Mode mode; }; } // anonymous namespace static int phi12(PJ *P, double *del, double *sig) { struct pj_imw_p_data *Q = static_cast(P->opaque); int err = 0; if (!pj_param(P->ctx, P->params, "tlat_1").i) { proj_log_error(P, _("Missing parameter: lat_1 should be specified")); err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; } else if (!pj_param(P->ctx, P->params, "tlat_2").i) { proj_log_error(P, _("Missing parameter: lat_2 should be specified")); err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; } 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) ? PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE : 0; if (err) { proj_log_error( P, _("Illegal value for lat_1 and lat_2: |lat_1 - lat_2| " "and |lat_1 + lat_2| should be > 0")); } } return err; } static PJ_XY loc_for(PJ_LP lp, PJ *P, double *yc) { struct pj_imw_p_data *Q = static_cast(P->opaque); PJ_XY xy; if (lp.phi == 0.0) { 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 == PHI_2_IS_ZERO) { 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 == PHI_1_IS_ZERO) { 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 PJ_XY imw_p_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ double yc; PJ_XY xy = loc_for(lp, P, &yc); return (xy); } static PJ_LP imw_p_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_imw_p_data *Q = static_cast(P->opaque); PJ_XY t; double yc = 0.0; int i = 0; const int N_MAX_ITER = 1000; /* Arbitrarily chosen number... */ lp.phi = Q->phi_2; lp.lam = xy.x / cos(lp.phi); do { t = loc_for(lp, P, &yc); const double denom = t.y - yc; if (denom != 0 || fabs(t.y - xy.y) > TOL) { if (denom == 0) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } lp.phi = ((lp.phi - Q->phi_1) * (xy.y - yc) / denom) + Q->phi_1; } if (t.x != 0 && fabs(t.x - xy.x) > TOL) lp.lam = lp.lam * xy.x / t.x; i++; } while (i < N_MAX_ITER && (fabs(t.x - xy.x) > TOL || fabs(t.y - xy.y) > TOL)); if (i == N_MAX_ITER) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } 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 = static_cast(P->opaque)->lam_1 * *sp; *y = *R * (1 - cos(F)); *x = *R * sin(F); } static PJ *pj_imw_p_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); if (static_cast(P->opaque)->en) free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(imw_p) { double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2; int err; struct pj_imw_p_data *Q = static_cast( calloc(1, sizeof(struct pj_imw_p_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (!(Q->en = pj_enfn(P->n))) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); if ((err = phi12(P, &del, &sig)) != 0) { return pj_imw_p_destructor(P, err); } 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 = NONE_IS_ZERO; if (Q->phi_1 != 0.0) xy(P, Q->phi_1, &x1, &y1, &Q->sphi_1, &Q->R_1); else { Q->mode = PHI_1_IS_ZERO; y1 = 0.; x1 = Q->lam_1; } if (Q->phi_2 != 0.0) xy(P, Q->phi_2, &x2, &T2, &Q->sphi_2, &Q->R_2); else { Q->mode = PHI_2_IS_ZERO; 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 = imw_p_e_forward; P->inv = imw_p_e_inverse; P->destructor = pj_imw_p_destructor; return P; } #undef TOL #undef EPS proj-9.6.0/src/projections/isea.cpp000664 001754 001755 00000122500 14764566077 017174 0ustar00e012349e012349000000 000000 /* The public domain code for the forward direction was initially written by Nathan Wagner. The inverse projection was adapted from Java and eC by Jérôme Jacovella-St-Louis, originally from the Franz-Benjamin Mocnik's ISEA implementation found at https://github.com/mocnik-science/geogrid/blob/master/ src/main/java/org/giscience/utils/geogrid/projections/ISEAProjection.java with the following license: -------------------------------------------------------------------------- MIT License Copyright (c) 2017-2019 Heidelberg University 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 ISEA projection a projects a sphere on the icosahedron. Thereby the size * of areas mapped to the icosahedron are preserved. Angles and distances are * however slightly distorted. The angular distortion is below 17.27 degree, and * the scale variation is less than 16.3 per cent. * * The projection has been proposed and has been described in detail by: * * John P. Snyder: An equal-area map projection for polyhedral globes. * Cartographica, 29(1), 10–21, 1992. doi:10.3138/27H7-8K88-4882-1752 * * Another description and improvements can be found in: * * Erika Harrison, Ali Mahdavi-Amiri, and Faramarz Samavati: Optimization of * inverse Snyder polyhedral projection. International Conference on Cyberworlds * 2011. doi:10.1109/CW.2011.36 * * Erika Harrison, Ali Mahdavi-Amiri, and Faramarz Samavati: Analysis of inverse * Snyder optimizations. In: Marina L. Gavrilova, and C. J. Kenneth Tan (Eds): * Transactions on Computational Science XVI. Heidelberg, Springer, 2012. pp. * 134–148. doi:10.1007/978-3-642-32663-9_8 */ #include #include #include #include #include #include #include #include #include "proj.h" #include "proj_internal.h" #include #define DEG36 0.62831853071795864768 #define DEG72 1.25663706143591729537 #define DEG90 M_PI_2 #define DEG108 1.88495559215387594306 #define DEG120 2.09439510239319549229 #define DEG144 2.51327412287183459075 #define DEG180 M_PI /* sqrt(5)/M_PI */ #define ISEA_SCALE 0.8301572857837594396028083 /* 26.565051177 degrees */ #define V_LAT 0.46364760899944494524 // Latitude of center of top icosahedron faces // atan((3 + sqrt(5)) / 4) = 52.6226318593487 degrees #define E_RAD 0.91843818701052843323 // Latitude of center of faces mirroring top icosahedron face // atan((3 - sqrt(5)) / 4) = 10.8123169635739 degrees #define F_RAD 0.18871053078356206978 // #define phi ((1 + sqrt(5)) / 2) // #define atanphi 1.01722196789785136772 // g: Spherical distance from center of polygon face to // any of its vertices on the sphere // g = F + 2 * atan(phi) - 90 deg -- sdc2vos #define sdc2vos 0.6523581397843681859886783 #define tang 0.76393202250021030358019673567 // tan(sdc2vos) // theta (30 degrees) is plane angle between radius // vector to center and adjacent edge of plane polygon #define tan30 0.57735026918962576450914878 // tan(DEG_TO_RAD * 30) #define cotTheta (1.0 / tan30) // G: spherical angle between radius vector to center and adjacent edge // of spherical polygon on the globe (36 degrees) // cos(DEG_TO_RAD * 36) #define cosG 0.80901699437494742410229341718281905886 // sin(DEG_TO_RAD * 36) #define sinG 0.587785252292473129168705954639072768597652 // cos(g) #define cosSDC2VoS 0.7946544722917661229596057297879189448539 #define sinGcosSDC2VoS (sinG * cosSDC2VoS) // sin G cos g #define SQRT3 1.73205080756887729352744634150587236694280525381038 #define sin60 (SQRT3 / 2.0) #define cos30 (SQRT3 / 2.0) // tang * sin(60 deg) #define TABLE_G (tang * sin60) // (1 / (2 * sqrt(5)) + 1 / 6.0) * sqrt(M_PI * sqrt(3)) #define RprimeOverR 0.9103832815095032 // R' / R /* H = 0.25 R tan g = */ #define TABLE_H (0.25 * tang) /* in radians */ #define ISEA_STD_LAT 1.01722196792335072101 #define ISEA_STD_LONG .19634954084936207740 namespace { // anonymous namespace struct GeoPoint { double lat, lon; }; // In radians struct hex { int iso; long x, y, z; }; } // anonymous namespace /* y *must* be positive down as the xy /iso conversion assumes this */ static void hex_xy(struct hex *h) { if (!h->iso) return; 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; } static void hex_iso(struct hex *h) { if (h->iso) return; 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; } static void hexbin2(double width, double x, double y, long *i, long *j) { double z, rx, ry, rz; double abs_dx, abs_dy, abs_dz; long 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 */ if (width == 0) { throw "Division by zero"; } x /= width; y /= width; z = -x - y; rx = floor(x + 0.5); ix = lround(rx); ry = floor(y + 0.5); iy = lround(ry); rz = floor(z + 0.5); iz = lround(rz); if (fabs((double)ix + iy) > std::numeric_limits::max() || fabs((double)ix + iy + iz) > std::numeric_limits::max()) { throw "Integer overflow"; } 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; } #define numIcosahedronFaces 20 namespace { // anonymous namespace enum isea_address_form { ISEA_PLANE, ISEA_Q2DI, ISEA_Q2DD, ISEA_HEX }; struct isea_sincos { double s, c; }; struct isea_pt { double x, y; }; } // anonymous namespace // distortion // static double maximumAngularDistortion = 17.27; // static double maximumScaleVariation = 1.163; // static double minimumScaleVariation = .860; // Vertices of dodecahedron centered in icosahedron triangular faces static const GeoPoint facesCenterDodecahedronVertices[numIcosahedronFaces] = { {E_RAD, DEG_TO_RAD * -144}, {E_RAD, DEG_TO_RAD * -72}, {E_RAD, DEG_TO_RAD * 0}, {E_RAD, DEG_TO_RAD * 72}, {E_RAD, DEG_TO_RAD * 144}, {F_RAD, DEG_TO_RAD * -144}, {F_RAD, DEG_TO_RAD * -72}, {F_RAD, DEG_TO_RAD * 0}, {F_RAD, DEG_TO_RAD * 72}, {F_RAD, DEG_TO_RAD * 144}, {-F_RAD, DEG_TO_RAD * -108}, {-F_RAD, DEG_TO_RAD * -36}, {-F_RAD, DEG_TO_RAD * 36}, {-F_RAD, DEG_TO_RAD * 108}, {-F_RAD, DEG_TO_RAD * 180}, {-E_RAD, DEG_TO_RAD * -108}, {-E_RAD, DEG_TO_RAD * -36}, {-E_RAD, DEG_TO_RAD * 36}, {-E_RAD, DEG_TO_RAD * 108}, {-E_RAD, DEG_TO_RAD * 180}}; // NOTE: Very similar to ISEAPlanarProjection::faceOrientation(), // but the forward projection sometimes is returning a negative M_PI static inline double az_adjustment(int triangle) { if ((triangle >= 5 && triangle <= 9) || triangle == 15 || triangle == 16) return M_PI; else if (triangle >= 17) return -M_PI; return 0; } static struct isea_pt isea_triangle_xy(int triangle) { struct isea_pt c; triangle %= numIcosahedronFaces; c.x = TABLE_G * ((triangle % 5) - 2) * 2.0; if (triangle > 9) { c.x += TABLE_G; } // REVIEW: This is likely related to // pj_isea_data::yOffsets 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 *= RprimeOverR; c.y *= RprimeOverR; return c; } namespace { // anonymous namespace class ISEAPlanarProjection; struct pj_isea_data { double o_lat, o_lon, o_az; /* orientation, radians */ int aperture; /* valid values depend on partitioning method */ int resolution; isea_address_form output; /* an isea_address_form */ int triangle; /* triangle of last transformed point */ int quad; /* quad of last transformed point */ isea_sincos vertexLatSinCos[numIcosahedronFaces]; double R2; double Rprime; double Rprime2X; double RprimeTang; double Rprime2Tan2g; double triTang; double centerToBase; double triWidth; double yOffsets[4]; double xo, yo; double sx, sy; ISEAPlanarProjection *p; void initialize(const PJ *P); }; } // anonymous namespace #ifdef _MSC_VER #pragma warning(push) /* disable unreachable code warning for return 0 */ #pragma warning(disable : 4702) #endif #define SAFE_ARC_EPSILON 1E-15 static inline double safeArcSin(double t) { return fabs(t) < SAFE_ARC_EPSILON ? 0 : fabs(t - 1.0) < SAFE_ARC_EPSILON ? M_PI / 2 : fabs(t + 1.0) < SAFE_ARC_EPSILON ? -M_PI / 2 : asin(t); } static inline double safeArcCos(double t) { return fabs(t) < SAFE_ARC_EPSILON ? M_PI / 2 : fabs(t + 1) < SAFE_ARC_EPSILON ? M_PI : fabs(t - 1) < SAFE_ARC_EPSILON ? 0 : acos(t); } #undef SAFE_ARC_EPSILON /* coord needs to be in radians */ static int isea_snyder_forward(const struct pj_isea_data *data, const struct GeoPoint *ll, struct isea_pt *out) { int i; double sinLat = sin(ll->lat), cosLat = cos(ll->lat); /* * TODO by locality of reference, start by trying the same triangle * as last time */ for (i = 0; i < numIcosahedronFaces; i++) { /* additional variables from snyder */ double q, H, Ag, Azprime, Az, dprime, f, rho, x, y; /* variables used to store intermediate results */ double az_offset; /* how many multiples of 60 degrees we adjust the azimuth */ int Az_adjust_multiples; const struct GeoPoint *center = &facesCenterDodecahedronVertices[i]; const struct isea_sincos *centerLatSinCos = &data->vertexLatSinCos[i]; double dLon = ll->lon - center->lon; double cosLat_cosLon = cosLat * cos(dLon); double cosZ = centerLatSinCos->s * sinLat + centerLatSinCos->c * cosLat_cosLon; double sinAz, cosAz; /* step 1 */ double z = safeArcCos(cosZ); /* not on this triangle */ if (z > sdc2vos /*g*/ + 0.000005) { /* TODO DBL_EPSILON */ continue; } /* snyder eq 14 */ Az = atan2(cosLat * sin(dLon), centerLatSinCos->c * sinLat - centerLatSinCos->s * cosLat_cosLon); /* 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 */ /* Calculate q from eq 9. */ cosAz = cos(Az); sinAz = sin(Az); q = atan2(tang, cosAz + sinAz * cotTheta); /* not in this triangle */ if (z > q + 0.000005) { continue; } /* step 4 */ /* Apply equations 5-8 and 10-12 in order */ /* eq 5 */ /* R' in the paper is for the truncated (icosahedron?) */ /* eq 6 */ H = acos(sinAz * sinGcosSDC2VoS /* sin(G) * cos(g) */ - cosAz * cosG); /* eq 7 */ /* Ag = (Az + G + H - DEG180) * M_PI * R * R / DEG180; */ Ag = Az + DEG_TO_RAD * 36 /* G */ + H - DEG180; /* eq 8 */ Azprime = atan2(2.0 * Ag, RprimeOverR * RprimeOverR * tang * tang - 2.0 * Ag * cotTheta); /* eq 10 */ /* cot(theta) = 1.73205080756887729355 */ dprime = RprimeOverR * tang / (cos(Azprime) + sin(Azprime) * cotTheta); /* eq 11 */ f = dprime / (2.0 * RprimeOverR * sin(q / 2.0)); /* eq 12 */ rho = 2.0 * RprimeOverR * 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", PJ_TODEG(ll->lon), PJ_TODEG(ll->lat)); exit(EXIT_FAILURE); } #ifdef _MSC_VER #pragma warning(pop) #endif /* * return the new coordinates of any point in original coordinate system. * Define a point (newNPold) in original 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 original coordinate system, this function return the new coordinates. */ /* 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 */ static struct GeoPoint snyder_ctran(const struct GeoPoint &np, const struct GeoPoint &pt) { struct GeoPoint result; double phi = pt.lat, lambda = pt.lon; double alpha = np.lat, beta = np.lon; double dlambda = lambda - beta /* lambda0 */; double cos_p = cos(phi), sin_p = sin(phi); double cos_a = cos(alpha), sin_a = sin(alpha); double cos_dlambda = cos(dlambda), sin_dlambda = sin(dlambda); /* mpawm 5-7 */ double sin_phip = sin_a * sin_p - cos_a * cos_p * cos_dlambda; /* mpawm 5-8b */ /* use the two argument form so we end up in the right quadrant */ double lp_b = /* lambda prime minus beta */ atan2(cos_p * sin_dlambda, sin_a * cos_p * cos_dlambda + cos_a * sin_p); double 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; result.lat = safeArcSin(sin_phip); result.lon = lambdap; return result; } static struct GeoPoint isea_ctran(const struct GeoPoint *np, const struct GeoPoint *pt, double lon0) { struct GeoPoint cnp = {np->lat, np->lon + M_PI}; struct GeoPoint npt = snyder_ctran(cnp, *pt); 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 lon */ 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; } /* fuller's at 5.2454 west, 2.3009 N, adjacent at 7.46658 deg */ static int isea_grid_init(struct pj_isea_data *g) { int i; if (!g) return 0; g->o_lat = ISEA_STD_LAT; g->o_lon = ISEA_STD_LONG; g->o_az = 0.0; g->aperture = 4; g->resolution = 6; for (i = 0; i < numIcosahedronFaces; i++) { const GeoPoint *c = &facesCenterDodecahedronVertices[i]; g->vertexLatSinCos[i].s = sin(c->lat); g->vertexLatSinCos[i].c = cos(c->lat); } return 1; } static void isea_orient_isea(struct pj_isea_data *g) { if (!g) return; g->o_lat = ISEA_STD_LAT; g->o_lon = ISEA_STD_LONG; g->o_az = 0.0; } static void isea_orient_pole(struct pj_isea_data *g) { if (!g) return; g->o_lat = M_PI / 2.0; g->o_lon = 0.0; g->o_az = 0; } static int isea_transform(struct pj_isea_data *g, struct GeoPoint *in, struct isea_pt *out) { struct GeoPoint 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(g, &i, out); g->triangle = tri; return tri; } #define DOWNTRI(tri) ((tri / 5) % 2 == 1) 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; } static void isea_tri_plane(int tri, struct isea_pt *pt) { struct isea_pt tc; /* center of triangle */ if (DOWNTRI(tri)) { pt->x *= -1; pt->y *= -1; } tc = isea_triangle_xy(tri); pt->x += tc.x; pt->y += tc.y; } /* convert projected triangle coords to quad xy coords, return quad number */ static int isea_ptdd(int tri, struct isea_pt *pt) { int downtri, quadz; downtri = ((tri / 5) % 2 == 1); quadz = (tri % 5) + (tri / 10) * 5 + 1; // NOTE: This would always be a 60 degrees rotation if the flip were // already done as in isea_tri_plane() 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 += cos30; } return quadz; } static int isea_dddi_ap3odd(struct pj_isea_data *g, int quadz, struct isea_pt *pt, struct isea_pt *di) { struct isea_pt v; double hexwidth; double sidelength; /* in hexes */ long d, i; long 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 = lround((sidelength * 2.0)); 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 (quadz <= 5) { if (d == 0 && i == maxcoord) { /* north pole */ quadz = 0; d = 0; i = 0; } else if (i == maxcoord) { /* upper right in next quad */ quadz += 1; if (quadz == 6) quadz = 1; i = maxcoord - d; d = 0; } else if (d == maxcoord) { /* lower right in quad to lower right */ quadz += 5; d = 0; } } else /* if (quadz >= 6) */ { if (i == 0 && d == maxcoord) { /* south pole */ quadz = 11; d = 0; i = 0; } else if (d == maxcoord) { /* lower right in next quad */ quadz += 1; if (quadz == 11) quadz = 6; d = maxcoord - i; i = 0; } else if (i == maxcoord) { /* upper right in quad to upper right */ quadz = (quadz - 4) % 5; i = 0; } } di->x = d; di->y = i; g->quad = quadz; return quadz; } static int isea_dddi(struct pj_isea_data *g, int quadz, struct isea_pt *pt, struct isea_pt *di) { struct isea_pt v; double hexwidth; long sidelength; /* in hexes */ struct hex h; if (g->aperture == 3 && g->resolution % 2 != 0) { return isea_dddi_ap3odd(g, quadz, pt, di); } /* todo might want to do this as an iterated loop */ if (g->aperture > 0) { double sidelengthDouble = pow(g->aperture, g->resolution / 2.0); if (fabs(sidelengthDouble) > std::numeric_limits::max()) { throw "Integer overflow"; } sidelength = lround(sidelengthDouble); } else { sidelength = g->resolution; } if (sidelength == 0) { throw "Division by zero"; } 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 (quadz <= 5) { if (h.x == 0 && h.z == -sidelength) { /* north pole */ quadz = 0; h.z = 0; h.y = 0; h.x = 0; } else if (h.z == -sidelength) { quadz = quadz + 1; if (quadz == 6) quadz = 1; h.y = sidelength - h.x; h.z = h.x - sidelength; h.x = 0; } else if (h.x == sidelength) { quadz += 5; h.y = -h.z; h.x = 0; } } else /* if (quadz >= 6) */ { if (h.z == 0 && h.x == sidelength) { /* south pole */ quadz = 11; h.x = 0; h.y = 0; h.z = 0; } else if (h.x == sidelength) { quadz = quadz + 1; if (quadz == 11) quadz = 6; h.x = h.y + sidelength; h.y = 0; h.z = -h.x; } else if (h.y == -sidelength) { quadz -= 4; h.y = 0; h.z = -h.x; } } di->x = h.x; di->y = -h.z; g->quad = quadz; return quadz; } static int isea_ptdi(struct pj_isea_data *g, int tri, struct isea_pt *pt, struct isea_pt *di) { struct isea_pt v; int quadz; v = *pt; quadz = isea_ptdd(tri, &v); quadz = isea_dddi(g, quadz, &v, di); return quadz; } /* 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 */ static int isea_hex(struct pj_isea_data *g, int tri, struct isea_pt *pt, struct isea_pt *hex) { struct isea_pt v; #ifdef FIXME long sidelength; long d, i, x, y; #endif int quadz; quadz = isea_ptdi(g, tri, pt, &v); if (v.x < (INT_MIN >> 4) || v.x > (INT_MAX >> 4)) { throw "Invalid shift"; } hex->x = ((int)v.x * 16) + quadz; hex->y = v.y; return 1; #ifdef FIXME d = lround(floor(v.x)); i = lround(floor(v.y)); /* Aperture 3 odd resolutions */ if (g->aperture == 3 && g->resolution % 2 != 0) { long offset = lround((pow(3.0, g->resolution - 1) + 0.5)); d += offset * ((g->quadz - 1) % 5); i += offset * ((g->quadz - 1) % 5); if (quadz == 0) { d = 0; i = offset; } else if (quadz == 11) { d = 2 * offset; i = 0; } else if (quadz > 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 = lround((pow(g->aperture, g->resolution / 2.0))); 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; #endif } static struct isea_pt isea_forward(struct pj_isea_data *g, struct GeoPoint *in) { isea_pt out; int tri = isea_transform(g, in, &out); if (g->output == ISEA_PLANE) isea_tri_plane(tri, &out); else { isea_pt coord; /* convert to isea standard triangle size */ out.x *= ISEA_SCALE; // / g->radius; out.y *= ISEA_SCALE; // / g->radius; out.x += 0.5; out.y += 2.0 * .14433756729740644112; switch (g->output) { case ISEA_PLANE: /* already handled above -- GCC should not be complaining */ 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; case ISEA_HEX: isea_hex(g, tri, &out, &coord); return coord; } } return out; } /* * Proj 4 integration code follows */ PROJ_HEAD(isea, "Icosahedral Snyder Equal Area") "\n\tSph"; static PJ_XY isea_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_isea_data *Q = static_cast(P->opaque); struct isea_pt out; struct GeoPoint in; // TODO: Convert geodetic latitude to authalic latitude if not // spherical as in eqearth, healpix, laea, etc. in.lat = lp.phi; in.lon = lp.lam; try { out = isea_forward(Q, &in); } catch (const char *) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } xy.x = out.x; xy.y = out.y; return xy; } static PJ_LP isea_s_inverse(PJ_XY xy, PJ *P); PJ *PJ_PROJECTION(isea) { char *opt; struct pj_isea_data *Q = static_cast( calloc(1, sizeof(struct pj_isea_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; // NOTE: if a inverse was needed, there is some material at // https://brsr.github.io/2021/08/31/snyder-equal-area.html P->fwd = isea_s_forward; P->inv = isea_s_inverse; isea_grid_init(Q); Q->output = ISEA_PLANE; /* P->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); } else if (!strcmp(opt, "pole")) { isea_orient_pole(Q); } else { proj_log_error( P, _("Invalid value for orient: only isea or pole are supported")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (pj_param(P->ctx, P->params, "tazi").i) { Q->o_az = pj_param(P->ctx, P->params, "razi").f; } if (pj_param(P->ctx, P->params, "tlon_0").i) { Q->o_lon = pj_param(P->ctx, P->params, "rlon_0").f; } if (pj_param(P->ctx, P->params, "tlat_0").i) { Q->o_lat = pj_param(P->ctx, P->params, "rlat_0").f; } opt = pj_param(P->ctx, P->params, "smode").s; if (opt) { if (!strcmp(opt, "plane")) { Q->output = ISEA_PLANE; } else if (!strcmp(opt, "di")) { Q->output = ISEA_Q2DI; } else if (!strcmp(opt, "dd")) { Q->output = ISEA_Q2DD; } else if (!strcmp(opt, "hex")) { Q->output = ISEA_HEX; } else { proj_log_error(P, _("Invalid value for mode: only plane, di, dd or " "hex are supported")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } /* REVIEW: Was this an undocumented +rescale= parameter? if (pj_param(P->ctx, P->params, "trescale").i) { Q->radius = ISEA_SCALE; } */ if (pj_param(P->ctx, P->params, "tresolution").i) { Q->resolution = pj_param(P->ctx, P->params, "iresolution").i; } else { Q->resolution = 4; } if (pj_param(P->ctx, P->params, "taperture").i) { Q->aperture = pj_param(P->ctx, P->params, "iaperture").i; } else { Q->aperture = 3; } Q->initialize(P); return P; } #define Min std::min #define Max std::max #define inf std::numeric_limits::infinity() // static define precision = DEG_TO_RAD * 1e-9; #define precision (DEG_TO_RAD * 1e-11) #define precisionPerDefinition (DEG_TO_RAD * 1e-5) #define AzMax (DEG_TO_RAD * 120) #define westVertexLon (DEG_TO_RAD * -144) namespace { // anonymous namespace struct ISEAFacePoint { int face; double x, y; }; class ISEAPlanarProjection { public: explicit ISEAPlanarProjection(const GeoPoint &value) : orientation(value), cosOrientationLat(cos(value.lat)), sinOrientationLat(sin(value.lat)) {} bool cartesianToGeo(const PJ_XY &inPosition, const pj_isea_data *params, GeoPoint &result) { bool r = false; static const double epsilon = 1E-11; int face = 0; PJ_XY position = inPosition; #define sr -sin60 // sin(-60) #define cr 0.5 // cos(-60) if (position.x < 0 || (position.x < params->triWidth / 2 && position.y < 0 && position.y * cr < position.x * sr)) position.x += 5 * params->triWidth; // Wrap around // Rotate and shear to determine face if not stored in position.z #define shearX (1.0 / SQRT3) double yp = -(position.x * sr + position.y * cr); double x = (position.x * cr - position.y * sr + yp * shearX) * params->sx; double y = yp * params->sy; #undef shearX #undef sr #undef cr if (x < 0 || (y > x && x < 5 - epsilon)) x += epsilon; else if (x > 5 || (y < x && x > 0 + epsilon)) x -= epsilon; if (y < 0 || (x > y && y < 6 - epsilon)) y += epsilon; else if (y > 6 || (x < y && y > 0 + epsilon)) y -= epsilon; if (x >= 0 && x <= 5 && y >= 0 && y <= 6) { int ix = Max(0, Min(4, (int)x)); int iy = Max(0, Min(5, (int)y)); if (iy == ix || iy == ix + 1) { int rhombus = ix + iy; bool top = x - ix > y - iy; face = -1; switch (rhombus) { case 0: face = top ? 0 : 5; break; case 2: face = top ? 1 : 6; break; case 4: face = top ? 2 : 7; break; case 6: face = top ? 3 : 8; break; case 8: face = top ? 4 : 9; break; case 1: face = top ? 10 : 15; break; case 3: face = top ? 11 : 16; break; case 5: face = top ? 12 : 17; break; case 7: face = top ? 13 : 18; break; case 9: face = top ? 14 : 19; break; } face++; } } if (face) { int fy = (face - 1) / 5, fx = (face - 1) - 5 * fy; double rx = position.x - (2 * fx + fy / 2 + 1) * params->triWidth / 2; double ry = position.y - (params->yOffsets[fy] + 3 * params->centerToBase); GeoPoint dst; r = icosahedronToSphere({face - 1, rx, ry}, params, dst); if (dst.lon < -M_PI - epsilon) dst.lon += 2 * M_PI; else if (dst.lon > M_PI + epsilon) dst.lon -= 2 * M_PI; result = {dst.lat, dst.lon}; } return r; } // Converts coordinates on the icosahedron to geographic coordinates // (inverse projection) bool icosahedronToSphere(const ISEAFacePoint &c, const pj_isea_data *params, GeoPoint &r) { if (c.face >= 0 && c.face < numIcosahedronFaces) { double Az = atan2(c.x, c.y); // Az' double rho = sqrt(c.x * c.x + c.y * c.y); double AzAdjustment = faceOrientation(c.face); Az += AzAdjustment; while (Az < 0) { AzAdjustment += AzMax; Az += AzMax; } while (Az > AzMax) { AzAdjustment -= AzMax; Az -= AzMax; } { double sinAz = sin(Az), cosAz = cos(Az); double cotAz = cosAz / sinAz; double area = params->Rprime2Tan2g / (2 * (cotAz + cotTheta)); // A_G or A_{ABD} double deltaAz = 10 * precision; double degAreaOverR2Plus180Minus36 = area / params->R2 - westVertexLon; double Az_earth = Az; while (fabs(deltaAz) > precision) { double sinAzEarth = sin(Az_earth), cosAzEarth = cos(Az_earth); double H = acos(sinAzEarth * sinGcosSDC2VoS - cosAzEarth * cosG); double FAz_earth = degAreaOverR2Plus180Minus36 - H - Az_earth; // F(Az) or g(Az) double F2Az_earth = (cosAzEarth * sinGcosSDC2VoS + sinAzEarth * cosG) / sin(H) - 1; // F'(Az) or g'(Az) deltaAz = -FAz_earth / F2Az_earth; // Delta Az^0 or Delta Az Az_earth += deltaAz; } { double sinAz_earth = sin(Az_earth), cosAz_earth = cos(Az_earth); double q = atan2(tang, (cosAz_earth + sinAz_earth * cotTheta)); double d = params->RprimeTang / (cosAz + sinAz * cotTheta); // d' double f = d / (params->Rprime2X * sin(q / 2)); // f double z = 2 * asin(rho / (params->Rprime2X * f)); Az_earth -= AzAdjustment; { const isea_sincos *latSinCos = ¶ms->vertexLatSinCos[c.face]; double sinLat0 = latSinCos->s, cosLat0 = latSinCos->c; double sinZ = sin(z), cosZ = cos(z); double cosLat0SinZ = cosLat0 * sinZ; double latSin = sinLat0 * cosZ + cosLat0SinZ * cos(Az_earth); double lat = safeArcSin(latSin); double lon = facesCenterDodecahedronVertices[c.face].lon + atan2(sin(Az_earth) * cosLat0SinZ, cosZ - sinLat0 * sin(lat)); revertOrientation({lat, lon}, r); } } } return true; } r = {inf, inf}; return false; } private: GeoPoint orientation; double cosOrientationLat, sinOrientationLat; inline void revertOrientation(const GeoPoint &c, GeoPoint &r) { double lon = (c.lat < DEG_TO_RAD * -90 + precisionPerDefinition || c.lat > DEG_TO_RAD * 90 - precisionPerDefinition) ? 0 : c.lon; if (orientation.lat != 0.0 || orientation.lon != 0.0) { double sinLat = sin(c.lat), cosLat = cos(c.lat); double sinLon = sin(lon), cosLon = cos(lon); double cosLonCosLat = cosLon * cosLat; r = {asin(sinLat * cosOrientationLat - cosLonCosLat * sinOrientationLat), atan2(sinLon * cosLat, cosLonCosLat * cosOrientationLat + sinLat * sinOrientationLat) - orientation.lon}; } else r = {c.lat, lon}; } static inline double faceOrientation(int face) { return (face <= 4 || (10 <= face && face <= 14)) ? 0 : DEG_TO_RAD * 180; } }; // Orientation symmetric to equator (+proj=isea) /* Sets the orientation of the icosahedron such that the north and the south * poles are mapped to the edge midpoints of the icosahedron. The equator is * thus mapped symmetrically. */ static ISEAPlanarProjection standardISEA( /* DEG_TO_RAD * (90 - 58.282525589) = 31.7174744114613 */ {(E_RAD + F_RAD) / 2, DEG_TO_RAD * -11.25}); // Polar orientation (+proj=isea +orient=pole) /* * One corner of the icosahedron is, by default, facing to the north pole, and * one to the south pole. The provided orientation is relative to the default * orientation. * * The orientation shifts every location by the angle orientation.lon in * direction of positive longitude, and thereafter by the angle orientation.lat * in direction of positive latitude. */ static ISEAPlanarProjection polarISEA({0, 0}); void pj_isea_data::initialize(const PJ *P) { struct pj_isea_data *Q = static_cast(P->opaque); // Only supporting default planar options for now if (Q->output == ISEA_PLANE && Q->o_az == 0.0 && Q->aperture == 3.0 && Q->resolution == 4.) { // Only supporting +orient=isea and +orient=pole for now if (Q->o_lat == ISEA_STD_LAT && Q->o_lon == ISEA_STD_LONG) p = &standardISEA; else if (Q->o_lat == M_PI / 2.0 && Q->o_lon == 0) p = &polarISEA; else p = nullptr; } if (p != nullptr) { if (P->e > 0) { double a2 = P->a * P->a, c2 = P->b * P->b; double log1pe_1me = log((1 + P->e) / (1 - P->e)); double S = M_PI * (2 * a2 + c2 / P->e * log1pe_1me); R2 = S / (4 * M_PI); // [WGS84] R = 6371007.1809184747 m Rprime = RprimeOverR * sqrt(R2); // R' } else { R2 = P->a * P->a; // R^2 Rprime = RprimeOverR * P->a; // R' } Rprime2X = 2 * Rprime; RprimeTang = Rprime * tang; // twice the center-to-base distance centerToBase = RprimeTang / 2; triWidth = RprimeTang * SQRT3; Rprime2Tan2g = RprimeTang * RprimeTang; yOffsets[0] = -2 * centerToBase; yOffsets[1] = -4 * centerToBase; yOffsets[2] = -5 * centerToBase; yOffsets[3] = -7 * centerToBase; xo = 2.5 * triWidth; yo = -1.5 * centerToBase; sx = 1.0 / triWidth; sy = 1.0 / (3 * centerToBase); } } } // anonymous namespace static PJ_LP isea_s_inverse(PJ_XY xy, PJ *P) { const struct pj_isea_data *Q = static_cast(P->opaque); ISEAPlanarProjection *p = Q->p; if (p) { // Default origin of +proj=isea is different (OGC:1534 is // +x_0=19186144.870934911 +y_0=-3323137.7717836285) PJ_XY input{xy.x * P->a + Q->xo, xy.y * P->a + Q->yo}; GeoPoint result; if (p->cartesianToGeo(input, Q, result)) // TODO: Convert authalic latitude to geodetic latitude if not // spherical as in eqearth, healpix, laea, etc. return {result.lon, result.lat}; else return {inf, inf}; } else return {inf, inf}; } #undef ISEA_STD_LAT #undef ISEA_STD_LONG #undef numIcosahedronFaces #undef precision #undef precisionPerDefinition #undef AzMax #undef sdc2vos #undef tang #undef cotTheta #undef cosG #undef sinGcosSDC2VoS #undef westVertexLon #undef RprimeOverR #undef Min #undef Max #undef inf #undef E_RAD #undef F_RAD #undef DEG36 #undef DEG72 #undef DEG90 #undef DEG108 #undef DEG120 #undef DEG144 #undef DEG180 #undef ISEA_SCALE #undef V_LAT #undef TABLE_G #undef TABLE_H proj-9.6.0/src/projections/krovak.cpp000664 001754 001755 00000027276 14764566077 017566 0ustar00e012349e012349000000 000000 /* * Project: PROJ * 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 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 * *****************************************************************************/ #include #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(krovak, "Krovak") "\n\tPCyl, Ell"; PROJ_HEAD(mod_krovak, "Modified Krovak") "\n\tPCyl, Ell"; #define EPS 1e-15 #define UQ 1.04216856380474 /* DU(2, 59, 42, 42.69689) */ #define S0 \ 1.37008346281555 /* Latitude of pseudo standard parallel 78deg 30'00" N */ /* Not sure at all of the appropriate number for MAX_ITER... */ #define MAX_ITER 100 namespace { // anonymous namespace struct pj_krovak_data { double alpha; double k; double n; double rho0; double ad; bool easting_northing; // true, in default mode. false when using +czech bool modified; }; } // anonymous namespace namespace pj_modified_krovak { constexpr double X0 = 1089000.0; constexpr double Y0 = 654000.0; constexpr double C1 = 2.946529277E-02; constexpr double C2 = 2.515965696E-02; constexpr double C3 = 1.193845912E-07; constexpr double C4 = -4.668270147E-07; constexpr double C5 = 9.233980362E-12; constexpr double C6 = 1.523735715E-12; constexpr double C7 = 1.696780024E-18; constexpr double C8 = 4.408314235E-18; constexpr double C9 = -8.331083518E-24; constexpr double C10 = -3.689471323E-24; // Correction terms to be applied to regular Krovak to obtain Modified Krovak. // Note that Xr is a Southing in metres and Yr a Westing in metres, // and output (dX, dY) is a corrective term in (Southing, Westing) in metres // Reference: // https://www.cuzk.cz/Zememerictvi/Geodeticke-zaklady-na-uzemi-CR/GNSS/Nova-realizace-systemu-ETRS89-v-CR/Metodika-prevodu-ETRF2000-vs-S-JTSK-var2(101208).aspx static void mod_krovak_compute_dx_dy(const double Xr, const double Yr, double &dX, double &dY) { const double Xr2 = Xr * Xr; const double Yr2 = Yr * Yr; const double Xr4 = Xr2 * Xr2; const double Yr4 = Yr2 * Yr2; dX = C1 + C3 * Xr - C4 * Yr - 2 * C6 * Xr * Yr + C5 * (Xr2 - Yr2) + C7 * Xr * (Xr2 - 3 * Yr2) - C8 * Yr * (3 * Xr2 - Yr2) + 4 * C9 * Xr * Yr * (Xr2 - Yr2) + C10 * (Xr4 + Yr4 - 6 * Xr2 * Yr2); dY = C2 + C3 * Yr + C4 * Xr + 2 * C5 * Xr * Yr + C6 * (Xr2 - Yr2) + C8 * Xr * (Xr2 - 3 * Yr2) + C7 * Yr * (3 * Xr2 - Yr2) - 4 * C10 * Xr * Yr * (Xr2 - Yr2) + C9 * (Xr4 + Yr4 - 6 * Xr2 * Yr2); } } // namespace pj_modified_krovak static PJ_XY krovak_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ struct pj_krovak_data *Q = static_cast(P->opaque); PJ_XY xy = {0.0, 0.0}; const double gfi = pow((1. + P->e * sin(lp.phi)) / (1. - P->e * sin(lp.phi)), Q->alpha * P->e / 2.); const double u = 2. * (atan(Q->k * pow(tan(lp.phi / 2. + M_PI_4), Q->alpha) / gfi) - M_PI_4); const double deltav = -lp.lam * Q->alpha; const double s = asin(cos(Q->ad) * sin(u) + sin(Q->ad) * cos(u) * cos(deltav)); const double cos_s = cos(s); if (cos_s < 1e-12) { xy.x = 0; xy.y = 0; return xy; } const double d = asin(cos(u) * sin(deltav) / cos_s); const double eps = Q->n * d; const double rho = Q->rho0 * pow(tan(S0 / 2. + M_PI_4), Q->n) / pow(tan(s / 2. + M_PI_4), Q->n); xy.x = rho * cos(eps); xy.y = rho * sin(eps); // At this point, xy.x is a southing and xy.y is a westing if (Q->modified) { using namespace pj_modified_krovak; const double Xp = xy.x; const double Yp = xy.y; // Reduced X and Y const double Xr = Xp * P->a - X0; const double Yr = Yp * P->a - Y0; double dX, dY; mod_krovak_compute_dx_dy(Xr, Yr, dX, dY); xy.x = Xp - dX / P->a; xy.y = Yp - dY / P->a; } // PROJ always return values in (easting, northing) (default mode) // or (westing, southing) (+czech mode), so swap X/Y std::swap(xy.x, xy.y); if (Q->easting_northing) { // The default non-Czech convention uses easting, northing, so we have // to reverse the sign of the coordinates. But to do so, we have to take // into account the false easting/northing. xy.x = -xy.x - 2 * P->x0 / P->a; xy.y = -xy.y - 2 * P->y0 / P->a; } return xy; } static PJ_LP krovak_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ struct pj_krovak_data *Q = static_cast(P->opaque); PJ_LP lp = {0.0, 0.0}; if (Q->easting_northing) { // The default non-Czech convention uses easting, northing, so we have // to reverse the sign of the coordinates. But to do so, we have to take // into account the false easting/northing. xy.y = -xy.y - 2 * P->x0 / P->a; xy.x = -xy.x - 2 * P->y0 / P->a; } std::swap(xy.x, xy.y); if (Q->modified) { using namespace pj_modified_krovak; // Note: in EPSG guidance node 7-2, below Xr/Yr/dX/dY are actually // Xr'/Yr'/dX'/dY' const double Xr = xy.x * P->a - X0; const double Yr = xy.y * P->a - Y0; double dX, dY; mod_krovak_compute_dx_dy(Xr, Yr, dX, dY); xy.x = xy.x + dX / P->a; xy.y = xy.y + dY / P->a; } const double rho = sqrt(xy.x * xy.x + xy.y * xy.y); const double eps = atan2(xy.y, xy.x); const double d = eps / sin(S0); double s; if (rho == 0.0) { s = M_PI_2; } else { s = 2. * (atan(pow(Q->rho0 / rho, 1. / Q->n) * tan(S0 / 2. + M_PI_4)) - M_PI_4); } const double u = asin(cos(Q->ad) * sin(s) - sin(Q->ad) * cos(s) * cos(d)); const double deltav = asin(cos(s) * sin(d) / cos(u)); lp.lam = P->lam0 - deltav / Q->alpha; /* ITERATION FOR lp.phi */ double fi1 = u; int i; for (i = MAX_ITER; i; --i) { lp.phi = 2. * (atan(pow(Q->k, -1. / Q->alpha) * pow(tan(u / 2. + M_PI_4), 1. / Q->alpha) * pow((1. + P->e * sin(fi1)) / (1. - P->e * sin(fi1)), P->e / 2.)) - M_PI_4); if (fabs(fi1 - lp.phi) < EPS) break; fi1 = lp.phi; } if (i == 0) proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.lam -= P->lam0; return lp; } static PJ *krovak_setup(PJ *P, bool modified) { double u0, n0, g; struct pj_krovak_data *Q = static_cast( calloc(1, sizeof(struct pj_krovak_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; /* we want Bessel as fixed ellipsoid */ P->a = 6377397.155; P->es = 0.006674372230614; P->e = sqrt(P->es); /* 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 && !pj_param(P->ctx, P->params, "tk_0").i) P->k0 = 0.9999; Q->modified = modified; Q->easting_northing = true; if (pj_param(P->ctx, P->params, "tczech").i) Q->easting_northing = false; /* 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.); double tan_half_phi0_plus_pi_4 = tan(P->phi0 / 2. + M_PI_4); if (tan_half_phi0_plus_pi_4 == 0.0) { proj_log_error(P, _("Invalid value for lat_0: lat_0 + PI/4 should be " "different from 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->k = tan(u0 / 2. + M_PI_4) / pow(tan_half_phi0_plus_pi_4, 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 = M_PI_2 - UQ; P->inv = krovak_e_inverse; P->fwd = krovak_e_forward; return P; } PJ *PJ_PROJECTION(krovak) { return krovak_setup(P, false); } PJ *PJ_PROJECTION(mod_krovak) { return krovak_setup(P, true); } #undef EPS #undef UQ #undef S0 #undef MAX_ITER proj-9.6.0/src/projections/labrd.cpp000664 001754 001755 00000010543 14764566077 017342 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(labrd, "Laborde") "\n\tCyl, Sph\n\tSpecial for Madagascar\n\tlat_0="; #define EPS 1.e-10 namespace { // anonymous namespace struct pj_opaque { double kRg, p0s, A, C, Ca, Cb, Cc, Cd; }; } // anonymous namespace static PJ_XY labrd_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_opaque *Q = static_cast(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 PJ_LP labrd_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_opaque *Q = static_cast(P->opaque); /* t = 0.0 optimization is to avoid a false positive cppcheck warning */ /* (cppcheck git beaf29c15867984aa3c2a15cf15bd7576ccde2b3). Might no */ /* longer be necessary with later versions. */ double x2, y2, V1, V2, V3, V4, t = 0.0, 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; } PJ *PJ_PROJECTION(labrd) { double Az, sinp, R, N, t; struct pj_opaque *Q = static_cast(calloc(1, sizeof(struct pj_opaque))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (P->phi0 == 0.) { proj_log_error( P, _("Invalid value for lat_0: lat_0 should be different from 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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->Cb = 1. / (12. * Q->kRg * Q->kRg); Q->Ca = (1. - cos(t)) * Q->Cb; Q->Cb *= sin(t); Q->Cc = 3. * (Q->Ca * Q->Ca - Q->Cb * Q->Cb); Q->Cd = 6. * Q->Ca * Q->Cb; P->inv = labrd_e_inverse; P->fwd = labrd_e_forward; return P; } proj-9.6.0/src/projections/laea.cpp000664 001754 001755 00000021402 14764566077 017154 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") "\n\tAzi, Sph&Ell"; namespace pj_laea_ns { enum Mode { N_POLE = 0, S_POLE = 1, EQUIT = 2, OBLIQ = 3 }; } namespace { // anonymous namespace struct pj_laea_data { double sinb1; double cosb1; double xmf; double ymf; double mmf; double qp; double dd; double rq; double *apa; enum pj_laea_ns::Mode mode; }; } // anonymous namespace #define EPS10 1.e-10 static PJ_XY laea_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_laea_data *Q = static_cast(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 == pj_laea_ns::OBLIQ || Q->mode == pj_laea_ns::EQUIT) { sinb = q / Q->qp; const double cosb2 = 1. - sinb * sinb; cosb = cosb2 > 0 ? sqrt(cosb2) : 0; } switch (Q->mode) { case pj_laea_ns::OBLIQ: b = 1. + Q->sinb1 * sinb + Q->cosb1 * cosb * coslam; break; case pj_laea_ns::EQUIT: b = 1. + cosb * coslam; break; case pj_laea_ns::N_POLE: b = M_HALFPI + lp.phi; q = Q->qp - q; break; case pj_laea_ns::S_POLE: b = lp.phi - M_HALFPI; q = Q->qp + q; break; } if (fabs(b) < EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } switch (Q->mode) { case pj_laea_ns::OBLIQ: b = sqrt(2. / b); xy.y = Q->ymf * b * (Q->cosb1 * sinb - Q->sinb1 * cosb * coslam); goto eqcon; break; case pj_laea_ns::EQUIT: b = sqrt(2. / (1. + cosb * coslam)); xy.y = b * sinb * Q->ymf; eqcon: xy.x = Q->xmf * b * cosb * sinlam; break; case pj_laea_ns::N_POLE: case pj_laea_ns::S_POLE: if (q >= 1e-15) { b = sqrt(q); xy.x = b * sinlam; xy.y = coslam * (Q->mode == pj_laea_ns::S_POLE ? b : -b); } else xy.x = xy.y = 0.; break; } return xy; } static PJ_XY laea_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_laea_data *Q = static_cast(P->opaque); double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (Q->mode) { case pj_laea_ns::EQUIT: xy.y = 1. + cosphi * coslam; goto oblcon; case pj_laea_ns::OBLIQ: xy.y = 1. + Q->sinb1 * sinphi + Q->cosb1 * cosphi * coslam; oblcon: if (xy.y <= EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = sqrt(2. / xy.y); xy.x = xy.y * cosphi * sin(lp.lam); xy.y *= Q->mode == pj_laea_ns::EQUIT ? sinphi : Q->cosb1 * sinphi - Q->sinb1 * cosphi * coslam; break; case pj_laea_ns::N_POLE: coslam = -coslam; PROJ_FALLTHROUGH; case pj_laea_ns::S_POLE: if (fabs(lp.phi + P->phi0) < EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = M_FORTPI - lp.phi * .5; xy.y = 2. * (Q->mode == pj_laea_ns::S_POLE ? cos(xy.y) : sin(xy.y)); xy.x = xy.y * sin(lp.lam); xy.y *= coslam; break; } return xy; } static PJ_LP laea_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_laea_data *Q = static_cast(P->opaque); double cCe, sCe, q, rho, ab = 0.0; switch (Q->mode) { case pj_laea_ns::EQUIT: case pj_laea_ns::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; } const double asin_argument = .5 * rho / Q->rq; if (asin_argument > 1) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } sCe = 2. * asin(asin_argument); cCe = cos(sCe); sCe = sin(sCe); xy.x *= sCe; if (Q->mode == pj_laea_ns::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 pj_laea_ns::N_POLE: xy.y = -xy.y; PROJ_FALLTHROUGH; case pj_laea_ns::S_POLE: q = (xy.x * xy.x + xy.y * xy.y); if (q == 0.0) { lp.lam = 0.; lp.phi = P->phi0; return (lp); } ab = 1. - q / Q->qp; if (Q->mode == pj_laea_ns::S_POLE) ab = -ab; break; } lp.lam = atan2(xy.x, xy.y); lp.phi = pj_authlat(asin(ab), Q->apa); return lp; } static PJ_LP laea_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_laea_data *Q = static_cast(P->opaque); double cosz = 0.0, rh, sinz = 0.0; rh = hypot(xy.x, xy.y); if ((lp.phi = rh * .5) > 1.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = 2. * asin(lp.phi); if (Q->mode == pj_laea_ns::OBLIQ || Q->mode == pj_laea_ns::EQUIT) { sinz = sin(lp.phi); cosz = cos(lp.phi); } switch (Q->mode) { case pj_laea_ns::EQUIT: lp.phi = fabs(rh) <= EPS10 ? 0. : asin(xy.y * sinz / rh); xy.x *= sinz; xy.y = cosz * rh; break; case pj_laea_ns::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 pj_laea_ns::N_POLE: xy.y = -xy.y; lp.phi = M_HALFPI - lp.phi; break; case pj_laea_ns::S_POLE: lp.phi -= M_HALFPI; break; } lp.lam = (xy.y == 0. && (Q->mode == pj_laea_ns::EQUIT || Q->mode == pj_laea_ns::OBLIQ)) ? 0. : atan2(xy.x, xy.y); return (lp); } static PJ *pj_laea_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->apa); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(laea) { double t; struct pj_laea_data *Q = static_cast( calloc(1, sizeof(struct pj_laea_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_laea_destructor; t = fabs(P->phi0); if (t > M_HALFPI + EPS10) { proj_log_error(P, _("Invalid value for lat_0: |lat_0| should be <= 90°")); return pj_laea_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(t - M_HALFPI) < EPS10) Q->mode = P->phi0 < 0. ? pj_laea_ns::S_POLE : pj_laea_ns::N_POLE; else if (fabs(t) < EPS10) Q->mode = pj_laea_ns::EQUIT; else Q->mode = pj_laea_ns::OBLIQ; if (P->es != 0.0) { 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); if (nullptr == Q->apa) return pj_laea_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); switch (Q->mode) { case pj_laea_ns::N_POLE: case pj_laea_ns::S_POLE: Q->dd = 1.; break; case pj_laea_ns::EQUIT: Q->dd = 1. / (Q->rq = sqrt(.5 * Q->qp)); Q->xmf = 1.; Q->ymf = .5 * Q->qp; break; case pj_laea_ns::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 = laea_e_inverse; P->fwd = laea_e_forward; } else { if (Q->mode == pj_laea_ns::OBLIQ) { Q->sinb1 = sin(P->phi0); Q->cosb1 = cos(P->phi0); } P->inv = laea_s_inverse; P->fwd = laea_s_forward; } return P; } proj-9.6.0/src/projections/lagrng.cpp000664 001754 001755 00000005575 14764566077 017541 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(lagrng, "Lagrange") "\n\tMisc Sph\n\tW="; #define TOL 1e-10 namespace { // anonymous namespace struct pj_lagrng { double a1; double a2; double hrw; double hw; double rw; double w; }; } // anonymous namespace static PJ_XY lagrng_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_lagrng *Q = static_cast(P->opaque); double v, c; const double sin_phi = sin(lp.phi); if (fabs(fabs(sin_phi) - 1) < TOL) { xy.x = 0; xy.y = lp.phi < 0 ? -2. : 2.; } else { v = Q->a1 * pow((1. + sin_phi) / (1. - sin_phi), Q->hrw); lp.lam *= Q->rw; c = 0.5 * (v + 1. / v) + cos(lp.lam); if (c < TOL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = 2. * sin(lp.lam) / c; xy.y = (v - 1. / v) / c; } return xy; } static PJ_LP lagrng_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_lagrng *Q = static_cast(P->opaque); double c, x2, y2p, y2m; if (fabs(fabs(xy.y) - 2.) < TOL) { lp.phi = xy.y < 0 ? -M_HALFPI : M_HALFPI; lp.lam = 0; } else { x2 = xy.x * xy.x; y2p = 2. + xy.y; y2m = 2. - xy.y; c = y2p * y2m - x2; if (fabs(c) < TOL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = 2. * atan(pow((y2p * y2p + x2) / (Q->a2 * (y2m * y2m + x2)), Q->hw)) - M_HALFPI; lp.lam = Q->w * atan2(4. * xy.x, c); } return lp; } PJ *PJ_PROJECTION(lagrng) { double sin_phi1; struct pj_lagrng *Q = static_cast(calloc(1, sizeof(struct pj_lagrng))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (pj_param(P->ctx, P->params, "tW").i) Q->w = pj_param(P->ctx, P->params, "dW").f; else Q->w = 2; if (Q->w <= 0) { proj_log_error(P, _("Invalid value for W: it should be > 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->hw = 0.5 * Q->w; Q->rw = 1. / Q->w; Q->hrw = 0.5 * Q->rw; sin_phi1 = sin(pj_param(P->ctx, P->params, "rlat_1").f); if (fabs(fabs(sin_phi1) - 1.) < TOL) { proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->a1 = pow((1. - sin_phi1) / (1. + sin_phi1), Q->hrw); Q->a2 = Q->a1 * Q->a1; P->es = 0.; P->inv = lagrng_s_inverse; P->fwd = lagrng_s_forward; return P; } proj-9.6.0/src/projections/larr.cpp000664 001754 001755 00000000751 14764566077 017216 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv"; #define SIXTH .16666666666666666 static PJ_XY larr_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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; } PJ *PJ_PROJECTION(larr) { P->es = 0; P->fwd = larr_s_forward; return P; } proj-9.6.0/src/projections/lask.cpp000664 001754 001755 00000001411 14764566077 017202 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" 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 PJ_XY lask_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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; } PJ *PJ_PROJECTION(lask) { P->fwd = lask_s_forward; P->es = 0.; return P; } proj-9.6.0/src/projections/latlong.cpp000664 001754 001755 00000006312 14764566077 017715 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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 */ #include "proj_internal.h" 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 PJ_XY latlong_forward(PJ_LP lp, PJ *P) { PJ_XY xy = {0.0, 0.0}; (void)P; xy.x = lp.lam; xy.y = lp.phi; return xy; } static PJ_LP latlong_inverse(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; (void)P; lp.phi = xy.y; lp.lam = xy.x; return lp; } static PJ_XYZ latlong_forward_3d(PJ_LPZ lpz, PJ *P) { PJ_XYZ xyz = {0, 0, 0}; (void)P; xyz.x = lpz.lam; xyz.y = lpz.phi; xyz.z = lpz.z; return xyz; } static PJ_LPZ latlong_inverse_3d(PJ_XYZ xyz, PJ *P) { PJ_LPZ lpz = {0, 0, 0}; (void)P; lpz.lam = xyz.x; lpz.phi = xyz.y; lpz.z = xyz.z; return lpz; } static void latlong_forward_4d(PJ_COORD &, PJ *) {} static void latlong_inverse_4d(PJ_COORD &, PJ *) {} static PJ *latlong_setup(PJ *P) { P->is_latlong = 1; P->x0 = 0; P->y0 = 0; P->inv = latlong_inverse; P->fwd = latlong_forward; P->inv3d = latlong_inverse_3d; P->fwd3d = latlong_forward_3d; P->inv4d = latlong_inverse_4d; P->fwd4d = latlong_forward_4d; P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; return P; } PJ *PJ_PROJECTION(latlong) { return latlong_setup(P); } PJ *PJ_PROJECTION(longlat) { return latlong_setup(P); } PJ *PJ_PROJECTION(latlon) { return latlong_setup(P); } PJ *PJ_PROJECTION(lonlat) { return latlong_setup(P); } proj-9.6.0/src/projections/lcc.cpp000664 001754 001755 00000013111 14764566077 017011 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(lcc, "Lambert Conformal Conic") "\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0, k_0="; #define EPS10 1.e-10 namespace { // anonymous namespace struct pj_lcc_data { double phi1; double phi2; double n; double rho0; double c; }; } // anonymous namespace static PJ_XY lcc_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0., 0.}; struct pj_lcc_data *Q = static_cast(P->opaque); double rho; if (fabs(fabs(lp.phi) - M_HALFPI) < EPS10) { if ((lp.phi * Q->n) <= 0.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } rho = 0.; } else { rho = Q->c * (P->es != 0. ? 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 PJ_LP lcc_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0., 0.}; struct pj_lcc_data *Q = static_cast(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.) { if (Q->n < 0.) { rho = -rho; xy.x = -xy.x; xy.y = -xy.y; } if (P->es != 0.) { lp.phi = pj_phi2(P->ctx, pow(rho / Q->c, 1. / Q->n), P->e); if (lp.phi == HUGE_VAL) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } } 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; } PJ *PJ_PROJECTION(lcc) { double cosphi, sinphi; int secant; struct pj_lcc_data *Q = static_cast( calloc(1, sizeof(struct pj_lcc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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) { proj_log_error(P, _("Invalid value for lat_1 and lat_2: |lat_1 + " "lat_2| should be > 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->n = sinphi = sin(Q->phi1); cosphi = cos(Q->phi1); if (fabs(cosphi) < EPS10 || fabs(Q->phi1) >= M_PI_2) { proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(cos(Q->phi2)) < EPS10 || fabs(Q->phi2) >= M_PI_2) { proj_log_error(P, _("Invalid value for lat_2: |lat_2| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } secant = fabs(Q->phi1 - Q->phi2) >= EPS10; if (P->es != 0.) { double ml1, m1; 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)); if (Q->n == 0) { // Not quite, but es is very close to 1... proj_log_error(P, _("Invalid value for eccentricity")); return pj_default_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } const double ml2 = pj_tsfn(Q->phi2, sinphi, P->e); const double denom = log(ml1 / ml2); if (denom == 0) { // Not quite, but es is very close to 1... proj_log_error(P, _("Invalid value for eccentricity")); return pj_default_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->n /= denom; } Q->rho0 = m1 * pow(ml1, -Q->n) / Q->n; Q->c = Q->rho0; 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)); if (Q->n == 0) { // Likely reason is that phi1 / phi2 are too close to zero. // Can be reproduced with +proj=lcc +a=1 +lat_2=.0000001 proj_log_error( P, _("Invalid value for lat_1 and lat_2: |lat_1 + lat_2| " "should be > 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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 = lcc_e_inverse; P->fwd = lcc_e_forward; return P; } #undef EPS10 proj-9.6.0/src/projections/lcca.cpp000664 001754 001755 00000011340 14764566077 017154 0ustar00e012349e012349000000 000000 /***************************************************************************** Lambert Conformal Conic Alternative ----------------------------------- This is Gerald Evenden's 2003 implementation of an alternative "almost" LCC, which has been in use historically, but which should NOT be used for new projects - i.e: use this implementation if you need interoperability with old data represented in this projection, but not in any other case. The code was originally discussed on the PROJ.4 mailing list in a thread archived over at http://lists.maptools.org/pipermail/proj/2003-March/000644.html It was discussed again in the thread starting at http://lists.maptools.org/pipermail/proj/2017-October/007828.html and continuing at http://lists.maptools.org/pipermail/proj/2017-November/007831.html which prompted Clifford J. Mugnier to add these clarifying notes: The French Army Truncated Cubic Lambert (partially conformal) Conic projection is the Legal system for the projection in France between the late 1800s and 1948 when the French Legislature changed the law to recognize the fully conformal version. It was (might still be in one or two North African prior French Colonies) used in North Africa in Algeria, Tunisia, & Morocco, as well as in Syria during the Levant. Last time I have seen it used was about 30+ years ago in Algeria when it was used to define Lease Block boundaries for Petroleum Exploration & Production. (signed) Clifford J. Mugnier, c.p., c.m.s. Chief of Geodesy LSU Center for GeoInformatics Dept. of Civil Engineering LOUISIANA STATE UNIVERSITY *****************************************************************************/ #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") "\n\tConic, Sph&Ell\n\tlat_0="; #define MAX_ITER 10 #define DEL_TOL 1e-12 namespace { // anonymous namespace struct pj_lcca_data { double *en; double r0, l, M0; double C; }; } // anonymous namespace 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 PJ_XY lcca_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_lcca_data *Q = static_cast(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; const double lam_mul_l = lp.lam * Q->l; xy.x = P->k0 * (r * sin(lam_mul_l)); xy.y = P->k0 * (Q->r0 - r * cos(lam_mul_l)); return xy; } static PJ_LP lcca_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_lcca_data *Q = static_cast(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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.phi = pj_inv_mlfn(S + Q->M0, Q->en); return lp; } static PJ *pj_lcca_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(lcca) { double s2p0, N0, R0, tan0; struct pj_lcca_data *Q = static_cast( calloc(1, sizeof(struct pj_lcca_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; (Q->en = pj_enfn(P->n)); if (!Q->en) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); if (P->phi0 == 0.) { proj_log_error( P, _("Invalid value for lat_0: it should be different from 0.")); return pj_lcca_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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 = lcca_e_inverse; P->fwd = lcca_e_forward; P->destructor = pj_lcca_destructor; return P; } #undef MAX_ITER #undef DEL_TOL proj-9.6.0/src/projections/loxim.cpp000664 001754 001755 00000004003 14764566077 017400 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(loxim, "Loximuthal") "\n\tPCyl Sph"; #define EPS 1e-8 namespace { // anonymous namespace struct pj_loxim_data { double phi1; double cosphi1; double tanphi1; }; } // anonymous namespace static PJ_XY loxim_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_loxim_data *Q = static_cast(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 PJ_LP loxim_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_loxim_data *Q = static_cast(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; } PJ *PJ_PROJECTION(loxim) { struct pj_loxim_data *Q = static_cast( calloc(1, sizeof(struct pj_loxim_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->phi1 = pj_param(P->ctx, P->params, "rlat_1").f; Q->cosphi1 = cos(Q->phi1); if (Q->cosphi1 < EPS) { proj_log_error(P, _("Invalid value for lat_1: |lat_1| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->tanphi1 = tan(M_FORTPI + 0.5 * Q->phi1); P->inv = loxim_s_inverse; P->fwd = loxim_s_forward; P->es = 0.; return P; } #undef EPS proj-9.6.0/src/projections/mbt_fps.cpp000664 001754 001755 00000002606 14764566077 017711 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY mbt_fps_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; (void)P; const double k = C3 * sin(lp.phi); for (int i = MAX_ITER; i; --i) { const double t = lp.phi / C2; const double V = (C1 * sin(t) + sin(lp.phi) - k) / (C1_2 * cos(t) + cos(lp.phi)); lp.phi -= V; if (fabs(V) < LOOP_TOL) break; } const double 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 PJ_LP mbt_fps_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; const double t = aasin(P->ctx, xy.y / C_y); lp.phi = C2 * t; 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); } PJ *PJ_PROJECTION(mbt_fps) { P->es = 0; P->inv = mbt_fps_s_inverse; P->fwd = mbt_fps_s_forward; return P; } #undef MAX_ITER #undef LOOP_TOL #undef C1 #undef C2 #undef C3 #undef C_x #undef C_y #undef C1_2 proj-9.6.0/src/projections/mbtfpp.cpp000664 001754 001755 00000003164 14764566077 017547 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl, Sph"; #define CSy .95257934441568037152 #define FXC .92582009977255146156 #define FYC 3.40168025708304504493 #define C23 .66666666666666666666 #define C13 .33333333333333333333 #define ONEEPS 1.0000001 static PJ_XY mbtfpp_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; (void)P; lp.phi = asin(CSy * sin(lp.phi)); xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.); xy.y = FYC * sin(C13 * lp.phi); return xy; } static PJ_LP mbtfpp_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = xy.y / FYC; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; } } else lp.phi = asin(lp.phi); lp.phi *= 3.; lp.lam = xy.x / (FXC * (2. * cos(C23 * lp.phi) - 1.)); lp.phi = sin(lp.phi) / CSy; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else { lp.phi = (lp.phi < 0.) ? -M_HALFPI : M_HALFPI; } } else lp.phi = asin(lp.phi); return lp; } PJ *PJ_PROJECTION(mbtfpp) { P->es = 0.; P->inv = mbtfpp_s_inverse; P->fwd = mbtfpp_s_forward; return P; } #undef CSy #undef FXC #undef FYC #undef C23 #undef C13 #undef ONEEPS proj-9.6.0/src/projections/mbtfpq.cpp000664 001754 001755 00000004070 14764566077 017545 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY mbtfpq_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; (void)P; const double c = C * sin(lp.phi); for (int i = NITER; i; --i) { const double th1 = (sin(.5 * lp.phi) + sin(lp.phi) - c) / (.5 * cos(.5 * lp.phi) + cos(lp.phi)); lp.phi -= th1; 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 PJ_LP mbtfpq_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double t; lp.phi = RYC * xy.y; if (fabs(lp.phi) > 1.) { if (fabs(lp.phi) > ONETOL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else if (lp.phi < 0.) { t = -1.; lp.phi = -M_PI; } else { t = 1.; lp.phi = M_PI; } } else { t = lp.phi; lp.phi = 2. * asin(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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } else lp.phi = lp.phi < 0. ? -M_HALFPI : M_HALFPI; else lp.phi = asin(lp.phi); return lp; } PJ *PJ_PROJECTION(mbtfpq) { P->es = 0.; P->inv = mbtfpq_s_inverse; P->fwd = mbtfpq_s_forward; return P; } #undef NITER #undef EPS #undef ONETOL #undef C #undef RC #undef FYC #undef RYC #undef FXC #undef RXC proj-9.6.0/src/projections/merc.cpp000664 001754 001755 00000004267 14764566077 017212 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" #include PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts="; PROJ_HEAD(webmerc, "Web Mercator / Pseudo Mercator") "\n\tCyl, Ell\n\t"; static PJ_XY merc_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; xy.x = P->k0 * lp.lam; // Instead of calling tan and sin, call sin and cos which the compiler // optimizes to a single call to sincos. double sphi = sin(lp.phi); double cphi = cos(lp.phi); xy.y = P->k0 * (asinh(sphi / cphi) - P->e * atanh(P->e * sphi)); return xy; } static PJ_XY merc_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; xy.x = P->k0 * lp.lam; xy.y = P->k0 * asinh(tan(lp.phi)); return xy; } static PJ_LP merc_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = atan(pj_sinhpsi2tanphi(P->ctx, sinh(xy.y / P->k0), P->e)); lp.lam = xy.x / P->k0; return lp; } static PJ_LP merc_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = atan(sinh(xy.y / P->k0)); lp.lam = xy.x / P->k0; return lp; } PJ *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) { proj_log_error( P, _("Invalid value for lat_ts: |lat_ts| should be <= 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (P->es != 0.0) { /* ellipsoid */ if (is_phits) P->k0 = pj_msfn(sin(phits), cos(phits), P->es); P->inv = merc_e_inverse; P->fwd = merc_e_forward; } else { /* sphere */ if (is_phits) P->k0 = cos(phits); P->inv = merc_s_inverse; P->fwd = merc_s_forward; } return P; } PJ *PJ_PROJECTION(webmerc) { /* Overriding k_0 with fixed parameter */ P->k0 = 1.0; P->inv = merc_s_inverse; P->fwd = merc_s_forward; return P; } proj-9.6.0/src/projections/mill.cpp000664 001754 001755 00000001215 14764566077 017207 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(mill, "Miller Cylindrical") "\n\tCyl, Sph"; static PJ_XY mill_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP mill_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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); } PJ *PJ_PROJECTION(mill) { P->es = 0.; P->inv = mill_s_inverse; P->fwd = mill_s_forward; return P; } proj-9.6.0/src/projections/mod_ster.cpp000664 001754 001755 00000017466 14764566077 020105 0ustar00e012349e012349000000 000000 /* based upon Snyder and Linck, USGS-NMD */ #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(mil_os, "Miller Oblated Stereographic") "\n\tAzi(mod)"; PROJ_HEAD(lee_os, "Lee Oblated Stereographic") "\n\tAzi(mod)"; PROJ_HEAD(gs48, "Modified Stereographic of 48 U.S.") "\n\tAzi(mod)"; PROJ_HEAD(alsk, "Modified Stereographic of Alaska") "\n\tAzi(mod)"; PROJ_HEAD(gs50, "Modified Stereographic of 50 U.S.") "\n\tAzi(mod)"; #define EPSLN 1e-12 namespace { // anonymous namespace struct pj_mod_ster_data { const COMPLEX *zcoeff; double cchio, schio; int n; }; } // anonymous namespace static PJ_XY mod_ster_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_mod_ster_data *Q = static_cast(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); const double denom = 1. + Q->schio * schi + Q->cchio * cchi * coslon; if (denom == 0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } s = 2. / denom; 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 PJ_LP mod_ster_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_mod_ster_data *Q = static_cast(P->opaque); int nn; COMPLEX p, fxy, fpxy, dp; double den, rh = 0.0, z, sinz = 0.0, cosz = 0.0, chi, phi = 0.0, 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); if (fabs(rh) <= EPSLN) { /* if we end up here input coordinates were (0,0). * pj_inv() adds P->lam0 to lp.lam, this way we are * sure to get the correct offset */ lp.lam = 0.0; 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) { double dphi; 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 PJ *mod_ster_setup(PJ *P) { /* general initialization */ struct pj_mod_ster_data *Q = static_cast(P->opaque); double esphi, chio; if (P->es != 0.0) { 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 = mod_ster_e_inverse; P->fwd = mod_ster_e_forward; return P; } /* Miller Oblated Stereographic */ PJ *PJ_PROJECTION(mil_os) { static const COMPLEX AB[] = {{0.924500, 0.}, {0., 0.}, {0.019430, 0.}}; struct pj_mod_ster_data *Q = static_cast( calloc(1, sizeof(struct pj_mod_ster_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 mod_ster_setup(P); } /* Lee Oblated Stereographic */ PJ *PJ_PROJECTION(lee_os) { static const COMPLEX AB[] = { {0.721316, 0.}, {0., 0.}, {-0.0088162, -0.00617325}}; struct pj_mod_ster_data *Q = static_cast( calloc(1, sizeof(struct pj_mod_ster_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 mod_ster_setup(P); } PJ *PJ_PROJECTION(gs48) { static const COMPLEX /* 48 United States */ AB[] = { {0.98879, 0.}, {0., 0.}, {-0.050909, 0.}, {0., 0.}, {0.075528, 0.}}; struct pj_mod_ster_data *Q = static_cast( calloc(1, sizeof(struct pj_mod_ster_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 mod_ster_setup(P); } PJ *PJ_PROJECTION(alsk) { static const COMPLEX ABe[] = { /* Alaska ellipsoid */ {.9945303, 0.}, {.0052083, -.0027404}, {.0072721, .0048181}, {-.0151089, -.1932526}, {.0642675, -.1381226}, {.3582802, -.2884586}, }; static const COMPLEX ABs[] = {/* Alaska sphere */ {.9972523, 0.}, {.0052513, -.0041175}, {.0074606, .0048125}, {-.0153783, -.1968253}, {.0636871, -.1408027}, {.3660976, -.2937382}}; struct pj_mod_ster_data *Q = static_cast( calloc(1, sizeof(struct pj_mod_ster_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->n = 5; P->lam0 = DEG_TO_RAD * -152.; P->phi0 = DEG_TO_RAD * 64.; if (P->es != 0.0) { /* 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 mod_ster_setup(P); } PJ *PJ_PROJECTION(gs50) { static const 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 const 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_mod_ster_data *Q = static_cast( calloc(1, sizeof(struct pj_mod_ster_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->n = 9; P->lam0 = DEG_TO_RAD * -120.; P->phi0 = DEG_TO_RAD * 45.; if (P->es != 0.0) { /* 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 mod_ster_setup(P); } #undef EPSLN proj-9.6.0/src/projections/moll.cpp000664 001754 001755 00000005413 14764566077 017221 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" 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 30 #define LOOP_TOL 1e-7 namespace { // anonymous namespace struct pj_moll_data { double C_x, C_y, C_p; }; } // anonymous namespace static PJ_XY moll_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_moll_data *Q = static_cast(P->opaque); int i; const double k = Q->C_p * sin(lp.phi); for (i = MAX_ITER; i; --i) { const double V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); lp.phi -= V; 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 PJ_LP moll_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_moll_data *Q = static_cast(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 PJ *setup(PJ *P, double p) { struct pj_moll_data *Q = static_cast(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 = moll_s_inverse; P->fwd = moll_s_forward; return P; } PJ *PJ_PROJECTION(moll) { struct pj_moll_data *Q = static_cast( calloc(1, sizeof(struct pj_moll_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; return setup(P, M_HALFPI); } PJ *PJ_PROJECTION(wag4) { struct pj_moll_data *Q = static_cast( calloc(1, sizeof(struct pj_moll_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; return setup(P, M_PI / 3.); } PJ *PJ_PROJECTION(wag5) { struct pj_moll_data *Q = static_cast( calloc(1, sizeof(struct pj_moll_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->es = 0; Q->C_x = 0.90977; Q->C_y = 1.65014; Q->C_p = 3.00896; P->inv = moll_s_inverse; P->fwd = moll_s_forward; return P; } #undef MAX_ITER #undef LOOP_TOL proj-9.6.0/src/projections/natearth.cpp000664 001754 001755 00000005761 14764566077 020072 0ustar00e012349e012349000000 000000 /* 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 */ #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(natearth, "Natural Earth") "\n\tPCyl, Sph"; #define A0 0.8707 #define A1 -0.131979 #define A2 -0.013791 #define A3 0.003971 #define A4 -0.001529 #define B0 1.007226 #define B1 0.015085 #define B2 -0.044475 #define B3 0.028874 #define B4 -0.005916 #define C0 B0 #define C1 (3 * B1) #define C2 (7 * B2) #define C3 (9 * B3) #define C4 (11 * B4) #define EPS 1e-11 #define MAX_Y (0.8707 * 0.52 * M_PI) /* Not sure at all of the appropriate number for MAX_ITER... */ #define MAX_ITER 100 static PJ_XY natearth_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP natearth_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double yc, y2, y4, f, fder; int i; (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 (i = MAX_ITER; i; --i) { /* 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)); const double tol = f / fder; yc -= tol; if (fabs(tol) < EPS) { break; } } if (i == 0) proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.phi = yc; /* longitude */ y2 = yc * yc; lp.lam = xy.x / (A0 + y2 * (A1 + y2 * (A2 + y2 * y2 * y2 * (A3 + y2 * A4)))); return lp; } PJ *PJ_PROJECTION(natearth) { P->es = 0; P->inv = natearth_s_inverse; P->fwd = natearth_s_forward; return P; } #undef A0 #undef A1 #undef A2 #undef A3 #undef A4 #undef A5 #undef B0 #undef B1 #undef B2 #undef B3 #undef C0 #undef C1 #undef C2 #undef C3 #undef EPS #undef MAX_Y #undef MAX_ITER proj-9.6.0/src/projections/natearth2.cpp000664 001754 001755 00000005110 14764566077 020140 0ustar00e012349e012349000000 000000 /* 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 */ #include #include "proj.h" #include "proj_internal.h" 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) /* Not sure at all of the appropriate number for MAX_ITER... */ #define MAX_ITER 100 static PJ_XY natearth2_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP natearth2_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double yc, y2, y4, y6, f, fder; int i; (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 (i = MAX_ITER; i; --i) { /* 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); const double tol = f / fder; yc -= tol; if (fabs(tol) < EPS) { break; } } if (i == 0) proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); 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; } PJ *PJ_PROJECTION(natearth2) { P->es = 0; P->inv = natearth2_s_inverse; P->fwd = natearth2_s_forward; return P; } #undef A0 #undef A1 #undef A2 #undef A3 #undef A4 #undef A5 #undef B0 #undef B1 #undef B2 #undef B3 #undef C0 #undef C1 #undef C2 #undef C3 #undef EPS #undef MAX_Y #undef MAX_ITER proj-9.6.0/src/projections/nell.cpp000664 001754 001755 00000002057 14764566077 017211 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(nell, "Nell") "\n\tPCyl, Sph"; #define MAX_ITER 10 #define LOOP_TOL 1e-7 static PJ_XY nell_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; int i; (void)P; const double k = 2. * sin(lp.phi); const double phi_pow_2 = lp.phi * lp.phi; lp.phi *= 1.00371 + phi_pow_2 * (-0.0935382 + phi_pow_2 * -0.011412); for (i = MAX_ITER; i; --i) { const double V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); lp.phi -= V; if (fabs(V) < LOOP_TOL) break; } xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); xy.y = lp.phi; return xy; } static PJ_LP nell_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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; } PJ *PJ_PROJECTION(nell) { P->es = 0; P->inv = nell_s_inverse; P->fwd = nell_s_forward; return P; } #undef MAX_ITER #undef LOOP_TOL proj-9.6.0/src/projections/nell_h.cpp000664 001754 001755 00000002074 14764566077 017517 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl, Sph"; #define NITER 9 #define EPS 1e-7 static PJ_XY nell_h_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP nell_h_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; int i; (void)P; const double p = 0.5 * xy.y; for (i = NITER; i; --i) { const double c = cos(0.5 * lp.phi); const double V = (lp.phi - tan(lp.phi / 2) - p) / (1. - 0.5 / (c * c)); lp.phi -= V; 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; } PJ *PJ_PROJECTION(nell_h) { P->es = 0.; P->inv = nell_h_s_inverse; P->fwd = nell_h_s_forward; return P; } #undef NITER #undef EPS proj-9.6.0/src/projections/nicol.cpp000664 001754 001755 00000002524 14764566077 017362 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv"; #define EPS 1e-10 static PJ_XY nicol_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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); } PJ *PJ_PROJECTION(nicol) { P->es = 0.; P->fwd = nicol_s_forward; return P; } proj-9.6.0/src/projections/nsper.cpp000664 001754 001755 00000013005 14764566077 017401 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include /* Note: EPSG Guidance 7-2 describes a Vertical Perspective method (EPSG::9838), * that extends 'nsper' with ellipsoidal development, and a ellipsoidal height * of topocentric origin for the projection plan. */ namespace pj_nsper_ns { enum Mode { N_POLE = 0, S_POLE = 1, EQUIT = 2, OBLIQ = 3 }; } namespace { // anonymous namespace struct pj_nsper_data { double height; double sinph0; double cosph0; double p; double rp; double pn1; double pfact; double h; double cg; double sg; double sw; double cw; enum pj_nsper_ns::Mode mode; int tilt; }; } // anonymous namespace 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 static PJ_XY nsper_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_nsper_data *Q = static_cast(P->opaque); double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (Q->mode) { case pj_nsper_ns::OBLIQ: xy.y = Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam; break; case pj_nsper_ns::EQUIT: xy.y = cosphi * coslam; break; case pj_nsper_ns::S_POLE: xy.y = -sinphi; break; case pj_nsper_ns::N_POLE: xy.y = sinphi; break; } if (xy.y < Q->rp) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = Q->pn1 / (Q->p - xy.y); xy.x = xy.y * cosphi * sin(lp.lam); switch (Q->mode) { case pj_nsper_ns::OBLIQ: xy.y *= (Q->cosph0 * sinphi - Q->sinph0 * cosphi * coslam); break; case pj_nsper_ns::EQUIT: xy.y *= sinphi; break; case pj_nsper_ns::N_POLE: coslam = -coslam; PROJ_FALLTHROUGH; case pj_nsper_ns::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 PJ_LP nsper_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_nsper_data *Q = static_cast(P->opaque); double rh; 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 (fabs(rh) <= EPS10) { lp.lam = 0.; lp.phi = P->phi0; } else { double cosz, sinz; sinz = 1. - rh * rh * Q->pfact; if (sinz < 0.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } sinz = (Q->p - sqrt(sinz)) / (Q->pn1 / rh + rh / Q->pn1); cosz = sqrt(1. - sinz * sinz); switch (Q->mode) { case pj_nsper_ns::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 pj_nsper_ns::EQUIT: lp.phi = asin(xy.y * sinz / rh); xy.y = cosz * rh; xy.x *= sinz; break; case pj_nsper_ns::N_POLE: lp.phi = asin(cosz); xy.y = -xy.y; break; case pj_nsper_ns::S_POLE: lp.phi = -asin(cosz); break; } lp.lam = atan2(xy.x, xy.y); } return lp; } static PJ *nsper_setup(PJ *P) { struct pj_nsper_data *Q = static_cast(P->opaque); Q->height = pj_param(P->ctx, P->params, "dh").f; if (fabs(fabs(P->phi0) - M_HALFPI) < EPS10) Q->mode = P->phi0 < 0. ? pj_nsper_ns::S_POLE : pj_nsper_ns::N_POLE; else if (fabs(P->phi0) < EPS10) Q->mode = pj_nsper_ns::EQUIT; else { Q->mode = pj_nsper_ns::OBLIQ; Q->sinph0 = sin(P->phi0); Q->cosph0 = cos(P->phi0); } Q->pn1 = Q->height / P->a; /* normalize by radius */ if (Q->pn1 <= 0 || Q->pn1 > 1e10) { proj_log_error(P, _("Invalid value for h")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->p = 1. + Q->pn1; Q->rp = 1. / Q->p; Q->h = 1. / Q->pn1; Q->pfact = (Q->p + 1.) * Q->h; P->inv = nsper_s_inverse; P->fwd = nsper_s_forward; P->es = 0.; return P; } PJ *PJ_PROJECTION(nsper) { struct pj_nsper_data *Q = static_cast( calloc(1, sizeof(struct pj_nsper_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->tilt = 0; return nsper_setup(P); } PJ *PJ_PROJECTION(tpers) { double omega, gamma; struct pj_nsper_data *Q = static_cast( calloc(1, sizeof(struct pj_nsper_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; omega = pj_param(P->ctx, P->params, "rtilt").f; gamma = pj_param(P->ctx, P->params, "razi").f; Q->tilt = 1; Q->cg = cos(gamma); Q->sg = sin(gamma); Q->cw = cos(omega); Q->sw = sin(omega); return nsper_setup(P); } #undef EPS10 proj-9.6.0/src/projections/nzmg.cpp000664 001754 001755 00000010035 14764566077 017225 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. *****************************************************************************/ #include #include "proj.h" #include "proj_internal.h" 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 const COMPLEX bf[] = { {.7557853228, 0.0}, {.249204646, 0.003371507}, {-.001541739, 0.041058560}, {-.10162907, 0.01727609}, {-.26623489, -0.36249218}, {-.6870983, -1.1651967}}; #define Nbf 5 #define Ntpsi 9 #define Ntphi 8 static PJ_XY nzmg_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; COMPLEX p; const double *C; int i; static const double tpsi[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879, -.0055161, .0026906, -.001333, .00067, -.00034}; lp.phi = (lp.phi - P->phi0) * RAD_TO_SEC5; i = Ntpsi; C = tpsi + i; for (p.r = *C; i; --i) { --C; 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 PJ_LP nzmg_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; int nn, i; COMPLEX p, f, fp, dp; double den; const double *C; static const double tphi[] = {1.5627014243, .5185406398, -.03333098, -.1052906, -.0368594, .007317, .01220, .00394, -.0013}; 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; dp.r = -(f.r * fp.r + f.i * fp.i) / den; dp.i = -(f.i * fp.r - f.r * fp.i) / den; p.r += dp.r; p.i += dp.i; if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) break; } if (nn) { lp.lam = p.i; i = Ntphi; C = tphi + i; for (lp.phi = *C; i; --i) { --C; 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; } PJ *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 = nzmg_e_inverse; P->fwd = nzmg_e_forward; return P; } #undef EPSLN #undef SEC5_TO_RAD #undef RAD_TO_SEC5 #undef Nbf #undef Ntpsi #undef Ntphi proj-9.6.0/src/projections/ob_tran.cpp000664 001754 001755 00000023171 14764566077 017703 0ustar00e012349e012349000000 000000 #include #include #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_ob_tran_data { struct PJconsts *link; double lamp; double cphip, sphip; }; } // anonymous namespace 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 PJ_XY o_forward(PJ_LP lp, PJ *P) { /* spheroid */ struct pj_ob_tran_data *Q = static_cast(P->opaque); double coslam, sinphi, cosphi; coslam = cos(lp.lam); sinphi = sin(lp.phi); cosphi = cos(lp.phi); /* Formula (5-8b) of Snyder's "Map projections: a working manual" */ lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), Q->sphip * cosphi * coslam + Q->cphip * sinphi) + Q->lamp); /* Formula (5-7) */ lp.phi = aasin(P->ctx, Q->sphip * sinphi - Q->cphip * cosphi * coslam); return Q->link->fwd(lp, Q->link); } static PJ_XY t_forward(PJ_LP lp, PJ *P) { /* spheroid */ struct pj_ob_tran_data *Q = static_cast(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 PJ_LP o_inverse(PJ_XY xy, PJ *P) { /* spheroid */ struct pj_ob_tran_data *Q = static_cast(P->opaque); double coslam, sinphi, cosphi; PJ_LP lp = Q->link->inv(xy, Q->link); if (lp.lam != HUGE_VAL) { lp.lam -= Q->lamp; coslam = cos(lp.lam); sinphi = sin(lp.phi); cosphi = cos(lp.phi); /* Formula (5-9) */ lp.phi = aasin(P->ctx, Q->sphip * sinphi + Q->cphip * cosphi * coslam); /* Formula (5-10b) */ lp.lam = aatan2(cosphi * sin(lp.lam), Q->sphip * cosphi * coslam - Q->cphip * sinphi); } return lp; } static PJ_LP t_inverse(PJ_XY xy, PJ *P) { /* spheroid */ struct pj_ob_tran_data *Q = static_cast(P->opaque); double cosphi, t; PJ_LP 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 PJ *destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); if (static_cast(P->opaque)->link) static_cast(P->opaque)->link->destructor( static_cast(P->opaque)->link, errlev); return pj_default_destructor(P, errlev); } /*********************************************************************** These functions are modified versions of the functions "argc_params" and "argv_params" from PJ_pipeline.c Basically, they do the somewhat backwards stunt of turning the paralist representation of the +args back into the original +argv, +argc representation accepted by pj_init_ctx(). This, however, also begs the question of whether we really need the paralist linked list representation, or if we could do with a simpler null-terminated argv style array? This would simplify some code, and keep memory allocations more localized. ***********************************************************************/ typedef struct { int argc; char **argv; } ARGS; /* count the number of args in the linked list */ static size_t paralist_params_argc(paralist *params) { size_t argc = 0; for (; params != nullptr; params = params->next) argc++; return argc; } /* turn paralist into argc/argv style argument list */ static ARGS ob_tran_target_params(paralist *params) { int i = 0; ARGS args = {0, nullptr}; size_t argc = paralist_params_argc(params); if (argc < 2) return args; /* all args except the proj=ob_tran */ args.argv = static_cast(calloc(argc - 1, sizeof(char *))); if (nullptr == args.argv) return args; /* Copy all args *except* the proj=ob_tran or inv arg to the argv array */ for (i = 0; params != nullptr; params = params->next) { if (0 == strcmp(params->param, "proj=ob_tran") || 0 == strcmp(params->param, "inv")) continue; args.argv[i++] = params->param; } args.argc = i; /* Then convert the o_proj=xxx element to proj=xxx */ for (i = 0; i < args.argc; i++) { if (0 != strncmp(args.argv[i], "o_proj=", 7)) continue; args.argv[i] += 2; if (strcmp(args.argv[i], "proj=ob_tran") == 0) { free(args.argv); args.argc = 0; args.argv = nullptr; } break; } return args; } PJ *PJ_PROJECTION(ob_tran) { double phip; ARGS args; PJ *R; /* projection to rotate */ struct pj_ob_tran_data *Q = static_cast( calloc(1, sizeof(struct pj_ob_tran_data))); if (nullptr == Q) return destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = destructor; /* get name of projection to be translated */ if (pj_param(P->ctx, P->params, "so_proj").s == nullptr) { proj_log_error(P, _("Missing parameter: o_proj")); return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* Create the target projection object to rotate */ args = ob_tran_target_params(P->params); /* avoid endless recursion */ if (args.argv == nullptr) { proj_log_error(P, _("Failed to find projection to be rotated")); return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } R = pj_create_argv_internal(P->ctx, args.argc, args.argv); free(args.argv); if (nullptr == R) { proj_log_error(P, _("Projection to be rotated is unknown")); return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } // Transfer the used flag from the R object to the P object for (auto p = P->params; p; p = p->next) { if (!p->used) { for (auto r = R->params; r; r = r->next) { if (r->used && strcmp(r->param, p->param) == 0) { p->used = 1; break; } } } } Q->link = R; 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(fabs(phic) - M_HALFPI) <= TOL) { proj_log_error( P, _("Invalid value for lat_c: |lat_c| should be < 90°")); return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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; con = fabs(phi1); if (fabs(phi1) > M_HALFPI - TOL) { proj_log_error( P, _("Invalid value for lat_1: |lat_1| should be < 90°")); return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(phi2) > M_HALFPI - TOL) { proj_log_error( P, _("Invalid value for lat_2: |lat_2| should be < 90°")); return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(phi1 - phi2) < TOL) { proj_log_error( P, _("Invalid value for lat_1 and lat_2: lat_1 should be " "different from lat_2")); return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (con < TOL) { proj_log_error(P, _("Invalid value for lat_1: lat_1 should be " "different from zero")); return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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 = Q->link->fwd ? o_forward : nullptr; P->inv = Q->link->inv ? o_inverse : nullptr; } else { /* transverse */ P->fwd = Q->link->fwd ? t_forward : nullptr; P->inv = Q->link->inv ? t_inverse : nullptr; } /* Support some rather speculative test cases, where the rotated projection */ /* is actually latlong. We do not want scaling in that case... */ if (Q->link->right == PJ_IO_UNITS_RADIANS) P->right = PJ_IO_UNITS_WHATEVER; return P; } #undef TOL proj-9.6.0/src/projections/ocea.cpp000664 001754 001755 00000007775 14764566077 017202 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") "\n\tCyl, Sph" "lonc= alpha= or\n\tlat_1= lat_2= lon_1= lon_2="; namespace { // anonymous namespace struct pj_ocea { double rok; double rtk; double sinphi; double cosphi; }; } // anonymous namespace static PJ_XY ocea_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_ocea *Q = static_cast(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 PJ_LP ocea_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_ocea *Q = static_cast(P->opaque); xy.y /= Q->rok; xy.x /= Q->rtk; const double t = sqrt(1. - xy.y * xy.y); const double s = sin(xy.x); lp.phi = asin(xy.y * Q->sinphi + t * Q->cosphi * s); lp.lam = atan2(t * Q->sinphi * s - xy.y * Q->cosphi, t * cos(xy.x)); return lp; } PJ *PJ_PROJECTION(ocea) { double phi_1, phi_2, lam_1, lam_2, lonz, alpha; struct pj_ocea *Q = static_cast(calloc(1, sizeof(struct pj_ocea))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->rok = 1. / P->k0; Q->rtk = P->k0; double lam_p, phi_p; /*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*/ // ERO: I've added M_PI so that the alpha is the angle from point 1 to // point 2 from the North in a clockwise direction (to be consistent // with omerc behavior) alpha = M_PI + 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)*/ // Actually slightliy modified to use atan2(), as it is suggested by // Snyder for equation 9-1, but this is not mentioned here lam_p = atan2(-cos(alpha), -sin(P->phi0) * sin(alpha)) + lonz; /*Equation 9-7 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ phi_p = asin(cos(P->phi0) * 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)*/ lam_p = 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)); /* take care of P->lam0 wrap-around when +lam_1=-90*/ if (lam_1 == -M_HALFPI) lam_p = -lam_p; /*Equation 9-2 page 80 (http://pubs.usgs.gov/pp/1395/report.pdf)*/ double cos_lamp_m_minus_lam_1 = cos(lam_p - lam_1); double tan_phi_1 = tan(phi_1); if (tan_phi_1 == 0.0) { // Not sure if we want to support this case, but at least this // avoids a division by zero, and gives the same result as the below // atan() phi_p = (cos_lamp_m_minus_lam_1 >= 0.0) ? -M_HALFPI : M_HALFPI; } else { phi_p = atan(-cos_lamp_m_minus_lam_1 / tan_phi_1); } } P->lam0 = lam_p + M_HALFPI; Q->cosphi = cos(phi_p); Q->sinphi = sin(phi_p); P->inv = ocea_s_inverse; P->fwd = ocea_s_forward; P->es = 0.; return P; } proj-9.6.0/src/projections/oea.cpp000664 001754 001755 00000005441 14764566077 017023 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(oea, "Oblated Equal Area") "\n\tMisc Sph\n\tn= m= theta="; namespace { // anonymous namespace struct pj_oea { double theta; double m, n; double two_r_m, two_r_n, rm, rn, hm, hn; double cp0, sp0; }; } // anonymous namespace static PJ_XY oea_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_oea *Q = static_cast(P->opaque); const double cp = cos(lp.phi); const double sp = sin(lp.phi); const double cl = cos(lp.lam); const double Az = aatan2(cp * sin(lp.lam), Q->cp0 * sp - Q->sp0 * cp * cl) + Q->theta; const double shz = sin(0.5 * aacos(P->ctx, Q->sp0 * sp + Q->cp0 * cp * cl)); const double M = aasin(P->ctx, shz * sin(Az)); const double 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 PJ_LP oea_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_oea *Q = static_cast(P->opaque); const double N = Q->hn * aasin(P->ctx, xy.y * Q->rn); const double M = Q->hm * aasin(P->ctx, xy.x * Q->rm * cos(N * Q->two_r_n) / cos(N)); const double xp = 2. * sin(M); const double yp = 2. * sin(N) * cos(M * Q->two_r_m) / cos(M); const double Az = aatan2(xp, yp) - Q->theta; const double cAz = cos(Az); const double z = 2. * aasin(P->ctx, 0.5 * hypot(xp, yp)); const double sz = sin(z); const double 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; } PJ *PJ_PROJECTION(oea) { struct pj_oea *Q = static_cast(calloc(1, sizeof(struct pj_oea))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (((Q->n = pj_param(P->ctx, P->params, "dn").f) <= 0.)) { proj_log_error(P, _("Invalid value for n: it should be > 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (((Q->m = pj_param(P->ctx, P->params, "dm").f) <= 0.)) { proj_log_error(P, _("Invalid value for m: it should be > 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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 = oea_s_forward; P->inv = oea_s_inverse; P->es = 0.; return P; } proj-9.6.0/src/projections/omerc.cpp000664 001754 001755 00000025243 14764566077 017366 0ustar00e012349e012349000000 000000 /* ** 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. */ #include #include #include "proj.h" #include "proj_internal.h" 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="; namespace { // anonymous namespace struct pj_omerc_data { double A, B, E, AB, ArB, BrA, rB, singam, cosgam, sinrot, cosrot; double v_pole_n, v_pole_s, u_0; int no_rot; }; } // anonymous namespace #define TOL 1.e-7 #define EPS 1.e-10 static PJ_XY omerc_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_omerc_data *Q = static_cast(P->opaque); double u, v; if (fabs(fabs(lp.phi) - M_HALFPI) > EPS) { const double W = Q->E / pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), Q->B); const double one_div_W = 1. / W; const double S = .5 * (W - one_div_W); const double T = .5 * (W + one_div_W); const double V = sin(Q->B * lp.lam); const double U = (S * Q->singam - V * Q->cosgam) / T; if (fabs(fabs(U) - 1.0) < EPS) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } v = 0.5 * Q->ArB * log((1. - U) / (1. + U)); const double 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 PJ_LP omerc_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_omerc_data *Q = static_cast(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); if (Qp == 0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } 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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } lp.lam = -Q->rB * atan2((Sp * Q->cosgam - Vp * Q->singam), cos(Q->BrA * u)); } return lp; } PJ *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_omerc_data *Q = static_cast( calloc(1, sizeof(struct pj_omerc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->no_rot = pj_param(P->ctx, P->params, "bno_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 compatibility */ 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; con = fabs(phi1); if (fabs(phi1) > M_HALFPI - TOL) { proj_log_error( P, _("Invalid value for lat_1: |lat_1| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(phi2) > M_HALFPI - TOL) { proj_log_error( P, _("Invalid value for lat_2: |lat_2| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(phi1 - phi2) <= TOL) { proj_log_error(P, _("Invalid value for lat_1/lat_2: lat_1 should be " "different from lat_2")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (con <= TOL) { proj_log_error( P, _("Invalid value for lat_1: lat_1 should be different from 0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (fabs(fabs(P->phi0) - M_HALFPI) <= TOL) { proj_log_error( P, _("Invalid value for lat_0: |lat_0| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (pj_param(P->ctx, P->params, "rlon_0").i) { proj_log_trace(P, _("lon_0 is ignored.")); } 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 = aasin(P->ctx, sin(alpha_c) / D); if (!gam) gamma = alpha_c; } else { gamma0 = gamma; alpha_c = aasin(P->ctx, D * sin(gamma0)); if (proj_errno(P) != 0) { // For a sphere, |gamma| must be <= 90 - |lat_0| // On an ellipsoid, this is very slightly above proj_log_error(P, ("Invalid value for gamma: given lat_0 value, " "|gamma| should be <= " + std::to_string(asin(1. / D) / M_PI * 180) + "°") .c_str()); return pj_default_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (fabs(fabs(P->phi0) - M_HALFPI) <= TOL) { proj_log_error( P, _("Invalid value for lat_0: |lat_0| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } P->lam0 = lamc - aasin(P->ctx, .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); if (p == 0) { // Not quite, but es is very close to 1... proj_log_error(P, _("Invalid value for eccentricity")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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); const double denom = F - 1. / F; if (denom == 0) { proj_log_error(P, _("Invalid value for eccentricity")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } gamma0 = atan(2. * sin(Q->B * adjlon(lam1 - P->lam0)) / denom); gamma = alpha_c = aasin(P->ctx, 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 * atan(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 = omerc_e_inverse; P->fwd = omerc_e_forward; return P; } #undef TOL #undef EPS proj-9.6.0/src/projections/ortho.cpp000664 001754 001755 00000026610 14764566077 017413 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph&Ell"; namespace pj_ortho_ns { enum Mode { N_POLE = 0, S_POLE = 1, EQUIT = 2, OBLIQ = 3 }; } namespace { // anonymous namespace struct pj_ortho_data { double sinph0; double cosph0; double nu0; double y_shift; double y_scale; enum pj_ortho_ns::Mode mode; double sinalpha; double cosalpha; }; } // anonymous namespace #define EPS10 1.e-10 static PJ_XY forward_error(PJ *P, PJ_LP lp, PJ_XY xy) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); proj_log_trace(P, "Coordinate (%.3f, %.3f) is on the unprojected hemisphere", proj_todeg(lp.lam), proj_todeg(lp.phi)); return xy; } static PJ_XY ortho_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy; struct pj_ortho_data *Q = static_cast(P->opaque); double coslam, cosphi, sinphi; xy.x = HUGE_VAL; xy.y = HUGE_VAL; cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (Q->mode) { case pj_ortho_ns::EQUIT: if (cosphi * coslam < -EPS10) return forward_error(P, lp, xy); xy.y = sin(lp.phi); break; case pj_ortho_ns::OBLIQ: sinphi = sin(lp.phi); // Is the point visible from the projection plane ? // From // https://lists.osgeo.org/pipermail/proj/2020-September/009831.html // this is the dot product of the normal of the ellipsoid at the center // of the projection and at the point considered for projection. // [cos(phi)*cos(lambda), cos(phi)*sin(lambda), sin(phi)] // Also from Snyder's Map Projection - A working manual, equation (5-3), // page 149 if (Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam < -EPS10) return forward_error(P, lp, xy); xy.y = Q->cosph0 * sinphi - Q->sinph0 * cosphi * coslam; break; case pj_ortho_ns::N_POLE: coslam = -coslam; PROJ_FALLTHROUGH; case pj_ortho_ns::S_POLE: if (fabs(lp.phi - P->phi0) - EPS10 > M_HALFPI) return forward_error(P, lp, xy); xy.y = cosphi * coslam; break; } xy.x = cosphi * sin(lp.lam); const double xp = xy.x; const double yp = xy.y; xy.x = (xp * Q->cosalpha - yp * Q->sinalpha) * P->k0; xy.y = (xp * Q->sinalpha + yp * Q->cosalpha) * P->k0; return xy; } static PJ_LP ortho_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp; struct pj_ortho_data *Q = static_cast(P->opaque); double sinc; lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; const double xf = xy.x; const double yf = xy.y; xy.x = (Q->cosalpha * xf + Q->sinalpha * yf) / P->k0; xy.y = (-Q->sinalpha * xf + Q->cosalpha * yf) / P->k0; const double rh = hypot(xy.x, xy.y); sinc = rh; if (sinc > 1.) { if ((sinc - 1.) > EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } sinc = 1.; } const double 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 pj_ortho_ns::N_POLE: xy.y = -xy.y; lp.phi = acos(sinc); break; case pj_ortho_ns::S_POLE: lp.phi = -acos(sinc); break; case pj_ortho_ns::EQUIT: lp.phi = xy.y * sinc / rh; xy.x *= sinc; xy.y = cosc * rh; goto sinchk; case pj_ortho_ns::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 == pj_ortho_ns::OBLIQ || Q->mode == pj_ortho_ns::EQUIT)) ? (xy.x == 0. ? 0. : xy.x < 0. ? -M_HALFPI : M_HALFPI) : atan2(xy.x, xy.y); } return lp; } static PJ_XY ortho_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy; struct pj_ortho_data *Q = static_cast(P->opaque); // From EPSG guidance note 7.2, March 2020, §3.3.5 Orthographic const double cosphi = cos(lp.phi); const double sinphi = sin(lp.phi); const double coslam = cos(lp.lam); const double sinlam = sin(lp.lam); // Is the point visible from the projection plane ? // Same condition as in spherical case if (Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam < -EPS10) { xy.x = HUGE_VAL; xy.y = HUGE_VAL; return forward_error(P, lp, xy); } const double nu = 1.0 / sqrt(1.0 - P->es * sinphi * sinphi); const double xp = nu * cosphi * sinlam; const double yp = nu * (sinphi * Q->cosph0 - cosphi * Q->sinph0 * coslam) + P->es * (Q->nu0 * Q->sinph0 - nu * sinphi) * Q->cosph0; xy.x = (Q->cosalpha * xp - Q->sinalpha * yp) * P->k0; xy.y = (Q->sinalpha * xp + Q->cosalpha * yp) * P->k0; return xy; } static PJ_LP ortho_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp; struct pj_ortho_data *Q = static_cast(P->opaque); const auto SQ = [](double x) { return x * x; }; const double xf = xy.x; const double yf = xy.y; xy.x = (Q->cosalpha * xf + Q->sinalpha * yf) / P->k0; xy.y = (-Q->sinalpha * xf + Q->cosalpha * yf) / P->k0; if (Q->mode == pj_ortho_ns::N_POLE || Q->mode == pj_ortho_ns::S_POLE) { // Polar case. Forward case equations can be simplified as: // xy.x = nu * cosphi * sinlam // xy.y = nu * -cosphi * coslam * sign(phi0) // ==> lam = atan2(xy.x, -xy.y * sign(phi0)) // ==> xy.x^2 + xy.y^2 = nu^2 * cosphi^2 // rh^2 = cosphi^2 / (1 - es * sinphi^2) // ==> cosphi^2 = rh^2 * (1 - es) / (1 - es * rh^2) const double rh2 = SQ(xy.x) + SQ(xy.y); if (rh2 >= 1. - 1e-15) { if ((rh2 - 1.) > EPS10) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; } lp.phi = 0; } else { lp.phi = acos(sqrt(rh2 * P->one_es / (1 - P->es * rh2))) * (Q->mode == pj_ortho_ns::N_POLE ? 1 : -1); } lp.lam = atan2(xy.x, xy.y * (Q->mode == pj_ortho_ns::N_POLE ? -1 : 1)); return lp; } if (Q->mode == pj_ortho_ns::EQUIT) { // Equatorial case. Forward case equations can be simplified as: // xy.x = nu * cosphi * sinlam // xy.y = nu * sinphi * (1 - P->es) // x^2 * (1 - es * sinphi^2) = (1 - sinphi^2) * sinlam^2 // y^2 / ((1 - es)^2 + y^2 * es) = sinphi^2 // Equation of the ellipse if (SQ(xy.x) + SQ(xy.y * (P->a / P->b)) > 1 + 1e-11) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; } const double sinphi2 = xy.y == 0 ? 0 : 1.0 / (SQ((1 - P->es) / xy.y) + P->es); if (sinphi2 > 1 - 1e-11) { lp.phi = M_PI_2 * (xy.y > 0 ? 1 : -1); lp.lam = 0; return lp; } lp.phi = asin(sqrt(sinphi2)) * (xy.y > 0 ? 1 : -1); const double sinlam = xy.x * sqrt((1 - P->es * sinphi2) / (1 - sinphi2)); if (fabs(sinlam) - 1 > -1e-15) lp.lam = M_PI_2 * (xy.x > 0 ? 1 : -1); else lp.lam = asin(sinlam); return lp; } // Using Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam == 0 (visibity // condition of the forward case) in the forward equations, and a lot of // substitution games... PJ_XY xy_recentered; xy_recentered.x = xy.x; xy_recentered.y = (xy.y - Q->y_shift) / Q->y_scale; if (SQ(xy.x) + SQ(xy_recentered.y) > 1 + 1e-11) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.lam = HUGE_VAL; lp.phi = HUGE_VAL; return lp; } // From EPSG guidance note 7.2, March 2020, §3.3.5 Orthographic // It suggests as initial guess: // lp.lam = 0; // lp.phi = P->phi0; // But for poles, this will not converge well. Better use: lp = ortho_s_inverse(xy_recentered, P); for (int i = 0; i < 20; i++) { const double cosphi = cos(lp.phi); const double sinphi = sin(lp.phi); const double coslam = cos(lp.lam); const double sinlam = sin(lp.lam); const double one_minus_es_sinphi2 = 1.0 - P->es * sinphi * sinphi; const double nu = 1.0 / sqrt(one_minus_es_sinphi2); PJ_XY xy_new; xy_new.x = nu * cosphi * sinlam; xy_new.y = nu * (sinphi * Q->cosph0 - cosphi * Q->sinph0 * coslam) + P->es * (Q->nu0 * Q->sinph0 - nu * sinphi) * Q->cosph0; const double rho = (1.0 - P->es) * nu / one_minus_es_sinphi2; const double J11 = -rho * sinphi * sinlam; const double J12 = nu * cosphi * coslam; const double J21 = rho * (cosphi * Q->cosph0 + sinphi * Q->sinph0 * coslam); const double J22 = nu * Q->sinph0 * cosphi * sinlam; const double D = J11 * J22 - J12 * J21; const double dx = xy.x - xy_new.x; const double dy = xy.y - xy_new.y; const double dphi = (J22 * dx - J12 * dy) / D; const double dlam = (-J21 * dx + J11 * dy) / D; lp.phi += dphi; if (lp.phi > M_PI_2) { lp.phi = M_PI_2 - (lp.phi - M_PI_2); lp.lam = adjlon(lp.lam + M_PI); } else if (lp.phi < -M_PI_2) { lp.phi = -M_PI_2 + (-M_PI_2 - lp.phi); lp.lam = adjlon(lp.lam + M_PI); } lp.lam += dlam; if (fabs(dphi) < 1e-12 && fabs(dlam) < 1e-12) { return lp; } } proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } PJ *PJ_PROJECTION(ortho) { struct pj_ortho_data *Q = static_cast( calloc(1, sizeof(struct pj_ortho_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->sinph0 = sin(P->phi0); Q->cosph0 = cos(P->phi0); if (fabs(fabs(P->phi0) - M_HALFPI) <= EPS10) Q->mode = P->phi0 < 0. ? pj_ortho_ns::S_POLE : pj_ortho_ns::N_POLE; else if (fabs(P->phi0) > EPS10) { Q->mode = pj_ortho_ns::OBLIQ; } else Q->mode = pj_ortho_ns::EQUIT; if (P->es == 0) { P->inv = ortho_s_inverse; P->fwd = ortho_s_forward; } else { Q->nu0 = 1.0 / sqrt(1.0 - P->es * Q->sinph0 * Q->sinph0); Q->y_shift = P->es * Q->nu0 * Q->sinph0 * Q->cosph0; Q->y_scale = 1.0 / sqrt(1.0 - P->es * Q->cosph0 * Q->cosph0); P->inv = ortho_e_inverse; P->fwd = ortho_e_forward; } const double alpha = pj_param(P->ctx, P->params, "ralpha").f; Q->sinalpha = sin(alpha); Q->cosalpha = cos(alpha); return P; } #undef EPS10 proj-9.6.0/src/projections/patterson.cpp000664 001754 001755 00000006537 14764566077 020305 0ustar00e012349e012349000000 000000 /* * 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 * https://doi.org/10.14714/CP78.1270 * * Port to PROJ.4 by Micah Cochran, 26 March 2016 */ #include #include "proj.h" #include "proj_internal.h" 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 /* Not sure at all of the appropriate number for MAX_ITER... */ #define MAX_ITER 100 static PJ_XY patterson_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP patterson_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double yc; int i; (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 (i = MAX_ITER; i; --i) { /* Newton-Raphson */ const double y2 = yc * yc; const double f = (yc * (K1 + y2 * y2 * (K2 + y2 * (K3 + K4 * y2)))) - xy.y; const double fder = C1 + y2 * y2 * (C2 + y2 * (C3 + C4 * y2)); const double tol = f / fder; yc -= tol; if (fabs(tol) < EPS11) { break; } } if (i == 0) proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.phi = yc; /* longitude */ lp.lam = xy.x; return lp; } PJ *PJ_PROJECTION(patterson) { P->es = 0.; P->inv = patterson_s_inverse; P->fwd = patterson_s_forward; return P; } #undef K1 #undef K2 #undef K3 #undef K4 #undef C1 #undef C2 #undef C3 #undef C4 #undef EPS11 #undef MAX_Y #undef MAX_ITER proj-9.6.0/src/projections/poly.cpp000664 001754 001755 00000011667 14764566077 017251 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(poly, "Polyconic (American)") "\n\tConic, Sph&Ell"; namespace { // anonymous namespace struct pj_poly_data { double ml0; double *en; }; } // anonymous namespace #define TOL 1e-10 #define CONV 1e-10 #define N_ITER 10 #define I_ITER 20 #define ITOL 1.e-12 static PJ_XY poly_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_poly_data *Q = static_cast(P->opaque); double ms, sp, cp; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = -Q->ml0; } else { sp = sin(lp.phi); cp = cos(lp.phi); ms = fabs(cp) > TOL ? pj_msfn(sp, cp, P->es) / sp : 0.; lp.lam *= sp; xy.x = ms * sin(lp.lam); xy.y = (pj_mlfn(lp.phi, sp, cp, Q->en) - Q->ml0) + ms * (1. - cos(lp.lam)); } return xy; } static PJ_XY poly_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_poly_data *Q = static_cast(P->opaque); if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = Q->ml0; } else { const double cot = 1. / tan(lp.phi); const double E = lp.lam * sin(lp.phi); xy.x = sin(E) * cot; xy.y = lp.phi - P->phi0 + cot * (1. - cos(E)); } return xy; } static PJ_LP poly_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_poly_data *Q = static_cast(P->opaque); xy.y += Q->ml0; if (fabs(xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } else { int i; const double r = xy.y * xy.y + xy.x * xy.x; lp.phi = xy.y; for (i = I_ITER; i; --i) { const double sp = sin(lp.phi); const double cp = cos(lp.phi); const double s2ph = sp * cp; if (fabs(cp) < ITOL) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } double mlp = sqrt(1. - P->es * sp * sp); const double c = sp * mlp / cp; const double ml = pj_mlfn(lp.phi, sp, cp, Q->en); const double mlb = ml * ml + r; mlp = P->one_es / (mlp * mlp * mlp); const double 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); lp.phi += dPhi; if (fabs(dPhi) <= ITOL) break; } if (!i) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } const double c = sin(lp.phi); lp.lam = asin(xy.x * tan(lp.phi) * sqrt(1. - P->es * c * c)) / sin(lp.phi); } return lp; } static PJ_LP poly_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; if (fabs(xy.y = P->phi0 + xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } else { lp.phi = xy.y; const double B = xy.x * xy.x + xy.y * xy.y; int i = N_ITER; while (true) { const double tp = tan(lp.phi); const double dphi = (xy.y * (lp.phi * tp + 1.) - lp.phi - .5 * (lp.phi * lp.phi + B) * tp) / ((lp.phi - xy.y) / tp - 1.); lp.phi -= dphi; if (!(fabs(dphi) > CONV)) break; --i; if (i == 0) { proj_errno_set( P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } } lp.lam = asin(xy.x * tan(lp.phi)) / sin(lp.phi); } return lp; } static PJ *pj_poly_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); if (static_cast(P->opaque)->en) free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(poly) { struct pj_poly_data *Q = static_cast( calloc(1, sizeof(struct pj_poly_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_poly_destructor; if (P->es != 0.0) { if (!(Q->en = pj_enfn(P->n))) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); P->inv = poly_e_inverse; P->fwd = poly_e_forward; } else { Q->ml0 = -P->phi0; P->inv = poly_s_inverse; P->fwd = poly_s_forward; } return P; } #undef TOL #undef CONV #undef N_ITER #undef I_ITER #undef ITOL proj-9.6.0/src/projections/putp2.cpp000664 001754 001755 00000002706 14764566077 017332 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY putp2_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; int i; (void)P; const double p = C_p * sin(lp.phi); const double phi_pow_2 = lp.phi * lp.phi; lp.phi *= 0.615709 + phi_pow_2 * (0.00909953 + phi_pow_2 * 0.0046292); for (i = NITER; i; --i) { const double c = cos(lp.phi); const double s = sin(lp.phi); const double V = (lp.phi + s * (c - 1.) - p) / (1. + c * (c - 1.) - s * s); lp.phi -= V; 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 PJ_LP putp2_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = aasin(P->ctx, xy.y / C_y); const double c = cos(lp.phi); lp.lam = xy.x / (C_x * (c - 0.5)); lp.phi = aasin(P->ctx, (lp.phi + sin(lp.phi) * (c - 1.)) / C_p); return lp; } PJ *PJ_PROJECTION(putp2) { P->es = 0.; P->inv = putp2_s_inverse; P->fwd = putp2_s_forward; return P; } #undef C_x #undef C_y #undef C_p #undef EPS #undef NITER #undef PI_DIV_3 proj-9.6.0/src/projections/putp3.cpp000664 001754 001755 00000003153 14764566077 017330 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_putp3_data { double A; }; } // anonymous namespace 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 PJ_XY putp3_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; xy.x = C * lp.lam * (1. - static_cast(P->opaque)->A * lp.phi * lp.phi); xy.y = C * lp.phi; return xy; } static PJ_LP putp3_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = xy.y / C; lp.lam = xy.x / (C * (1. - static_cast(P->opaque)->A * lp.phi * lp.phi)); return lp; } PJ *PJ_PROJECTION(putp3) { struct pj_putp3_data *Q = static_cast( calloc(1, sizeof(struct pj_putp3_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->A = 4. * RPISQ; P->es = 0.; P->inv = putp3_s_inverse; P->fwd = putp3_s_forward; return P; } PJ *PJ_PROJECTION(putp3p) { struct pj_putp3_data *Q = static_cast( calloc(1, sizeof(struct pj_putp3_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->A = 2. * RPISQ; P->es = 0.; P->inv = putp3_s_inverse; P->fwd = putp3_s_forward; return P; } #undef C #undef RPISQ proj-9.6.0/src/projections/putp4p.cpp000664 001754 001755 00000003524 14764566077 017513 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_putp4p_data { double C_x, C_y; }; } // anonymous namespace PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl, Sph"; PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl, Sph"; static PJ_XY putp4p_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_putp4p_data *Q = static_cast(P->opaque); lp.phi = aasin(P->ctx, 0.883883476 * sin(lp.phi)); xy.x = Q->C_x * lp.lam * cos(lp.phi); lp.phi *= 0.333333333333333; xy.x /= cos(lp.phi); xy.y = Q->C_y * sin(lp.phi); return xy; } static PJ_LP putp4p_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_putp4p_data *Q = static_cast(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; } PJ *PJ_PROJECTION(putp4p) { struct pj_putp4p_data *Q = static_cast( calloc(1, sizeof(struct pj_putp4p_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->C_x = 0.874038744; Q->C_y = 3.883251825; P->es = 0.; P->inv = putp4p_s_inverse; P->fwd = putp4p_s_forward; return P; } PJ *PJ_PROJECTION(weren) { struct pj_putp4p_data *Q = static_cast( calloc(1, sizeof(struct pj_putp4p_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->C_x = 1.; Q->C_y = 4.442882938; P->es = 0.; P->inv = putp4p_s_inverse; P->fwd = putp4p_s_forward; return P; } proj-9.6.0/src/projections/putp5.cpp000664 001754 001755 00000003241 14764566077 017330 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_putp5_data { double A, B; }; } // anonymous namespace 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 PJ_XY putp5_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_putp5_data *Q = static_cast(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 PJ_LP putp5_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_putp5_data *Q = static_cast(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; } PJ *PJ_PROJECTION(putp5) { struct pj_putp5_data *Q = static_cast( calloc(1, sizeof(struct pj_putp5_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->A = 2.; Q->B = 1.; P->es = 0.; P->inv = putp5_s_inverse; P->fwd = putp5_s_forward; return P; } PJ *PJ_PROJECTION(putp5p) { struct pj_putp5_data *Q = static_cast( calloc(1, sizeof(struct pj_putp5_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->A = 1.5; Q->B = 0.5; P->es = 0.; P->inv = putp5_s_inverse; P->fwd = putp5_s_forward; return P; } #undef C #undef D proj-9.6.0/src/projections/putp6.cpp000664 001754 001755 00000005215 14764566077 017334 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_putp6 { double C_x, C_y, A, B, D; }; } // anonymous namespace 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 /* sqrt(3) */ static PJ_XY putp6_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_putp6 *Q = static_cast(P->opaque); int i; const double p = Q->B * sin(lp.phi); lp.phi *= 1.10265779; for (i = NITER; i; --i) { const double r = sqrt(1. + lp.phi * lp.phi); const double V = ((Q->A - r) * lp.phi - log(lp.phi + r) - p) / (Q->A - 2. * r); lp.phi -= V; if (fabs(V) < EPS) break; } double sqrt_1_plus_phi2; if (!i) { // Note: it seems this case is rarely reached as from experimenting, // i seems to be >= 6 lp.phi = p < 0. ? -CON_POLE : CON_POLE; // the formula of the else case would also work, but this makes // some cppcheck versions happier. sqrt_1_plus_phi2 = 2; } else { sqrt_1_plus_phi2 = sqrt(1. + lp.phi * lp.phi); } xy.x = Q->C_x * lp.lam * (Q->D - sqrt_1_plus_phi2); xy.y = Q->C_y * lp.phi; return xy; } static PJ_LP putp6_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_putp6 *Q = static_cast(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; } PJ *PJ_PROJECTION(putp6) { struct pj_putp6 *Q = static_cast(calloc(1, sizeof(struct pj_putp6))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 = putp6_s_inverse; P->fwd = putp6_s_forward; return P; } PJ *PJ_PROJECTION(putp6p) { struct pj_putp6 *Q = static_cast(calloc(1, sizeof(struct pj_putp6))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 = putp6_s_inverse; P->fwd = putp6_s_forward; return P; } #undef EPS #undef NITER #undef CON_POLE proj-9.6.0/src/projections/qsc.cpp000664 001754 001755 00000034141 14764566077 017044 0ustar00e012349e012349000000 000000 /* * 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. Pacific 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 pj_qsc_ns::AREA_0 in the projection code below. The * other three areas of a cube face are handled by rotation of * pj_qsc_ns::AREA_0. */ #include #include #include "proj.h" #include "proj_internal.h" /* The six cube faces. */ namespace pj_qsc_ns { enum Face { FACE_FRONT = 0, FACE_RIGHT = 1, FACE_BACK = 2, FACE_LEFT = 3, FACE_TOP = 4, FACE_BOTTOM = 5 }; } namespace { // anonymous namespace struct pj_qsc_data { enum pj_qsc_ns::Face face; double a_squared; double b; double one_minus_f; double one_minus_f_squared; }; } // anonymous namespace PROJ_HEAD(qsc, "Quadrilateralized Spherical Cube") "\n\tAzi, Sph"; #define EPS10 1.e-10 /* The four areas on a cube face. AREA_0 is the area of definition, * the other three areas are counted counterclockwise. */ namespace pj_qsc_ns { enum Area { AREA_0 = 0, AREA_1 = 1, AREA_2 = 2, 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, enum pj_qsc_ns::Area *area) { double theta; if (phi < EPS10) { *area = pj_qsc_ns::AREA_0; theta = 0.0; } else { theta = atan2(y, x); if (fabs(theta) <= M_FORTPI) { *area = pj_qsc_ns::AREA_0; } else if (theta > M_FORTPI && theta <= M_HALFPI + M_FORTPI) { *area = pj_qsc_ns::AREA_1; theta -= M_HALFPI; } else if (theta > M_HALFPI + M_FORTPI || theta <= -(M_HALFPI + M_FORTPI)) { *area = pj_qsc_ns::AREA_2; theta = (theta >= 0.0 ? theta - M_PI : theta + M_PI); } else { *area = pj_qsc_ns::AREA_3; theta += M_HALFPI; } } return theta; } /* Helper function: shift the longitude. */ static double qsc_shift_longitude_origin(double longitude, double offset) { double slon = longitude + offset; if (slon < -M_PI) { slon += M_TWOPI; } else if (slon > +M_PI) { slon -= M_TWOPI; } return slon; } static PJ_XY qsc_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_qsc_data *Q = static_cast(P->opaque); double lat, longitude; double theta, phi; double t, mu; /* nu; */ enum pj_qsc_ns::Area 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 != 0.0) { lat = atan(Q->one_minus_f_squared * tan(lp.phi)); } else { lat = lp.phi; } /* Convert the input lat, longitude 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. */ longitude = lp.lam; if (Q->face == pj_qsc_ns::FACE_TOP) { phi = M_HALFPI - lat; if (longitude >= M_FORTPI && longitude <= M_HALFPI + M_FORTPI) { area = pj_qsc_ns::AREA_0; theta = longitude - M_HALFPI; } else if (longitude > M_HALFPI + M_FORTPI || longitude <= -(M_HALFPI + M_FORTPI)) { area = pj_qsc_ns::AREA_1; theta = (longitude > 0.0 ? longitude - M_PI : longitude + M_PI); } else if (longitude > -(M_HALFPI + M_FORTPI) && longitude <= -M_FORTPI) { area = pj_qsc_ns::AREA_2; theta = longitude + M_HALFPI; } else { area = pj_qsc_ns::AREA_3; theta = longitude; } } else if (Q->face == pj_qsc_ns::FACE_BOTTOM) { phi = M_HALFPI + lat; if (longitude >= M_FORTPI && longitude <= M_HALFPI + M_FORTPI) { area = pj_qsc_ns::AREA_0; theta = -longitude + M_HALFPI; } else if (longitude < M_FORTPI && longitude >= -M_FORTPI) { area = pj_qsc_ns::AREA_1; theta = -longitude; } else if (longitude < -M_FORTPI && longitude >= -(M_HALFPI + M_FORTPI)) { area = pj_qsc_ns::AREA_2; theta = -longitude - M_HALFPI; } else { area = pj_qsc_ns::AREA_3; theta = (longitude > 0.0 ? -longitude + M_PI : -longitude - M_PI); } } else { double q, r, s; double sinlat, coslat; double sinlon, coslon; if (Q->face == pj_qsc_ns::FACE_RIGHT) { longitude = qsc_shift_longitude_origin(longitude, +M_HALFPI); } else if (Q->face == pj_qsc_ns::FACE_BACK) { longitude = qsc_shift_longitude_origin(longitude, +M_PI); } else if (Q->face == pj_qsc_ns::FACE_LEFT) { longitude = qsc_shift_longitude_origin(longitude, -M_HALFPI); } sinlat = sin(lat); coslat = cos(lat); sinlon = sin(longitude); coslon = cos(longitude); q = coslat * coslon; r = coslat * sinlon; s = sinlat; if (Q->face == pj_qsc_ns::FACE_FRONT) { phi = acos(q); theta = qsc_fwd_equat_face_theta(phi, s, r, &area); } else if (Q->face == pj_qsc_ns::FACE_RIGHT) { phi = acos(r); theta = qsc_fwd_equat_face_theta(phi, s, -q, &area); } else if (Q->face == pj_qsc_ns::FACE_BACK) { phi = acos(-q); theta = qsc_fwd_equat_face_theta(phi, s, -r, &area); } else if (Q->face == pj_qsc_ns::FACE_LEFT) { phi = acos(-r); theta = qsc_fwd_equat_face_theta(phi, s, q, &area); } else { /* Impossible */ phi = theta = 0.0; area = pj_qsc_ns::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 == pj_qsc_ns::AREA_1) { mu += M_HALFPI; } else if (area == pj_qsc_ns::AREA_2) { mu += M_PI; } else if (area == pj_qsc_ns::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 PJ_LP qsc_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_qsc_data *Q = static_cast(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 = pj_qsc_ns::AREA_0; } else if (xy.y >= 0.0 && xy.y >= fabs(xy.x)) { area = pj_qsc_ns::AREA_1; mu -= M_HALFPI; } else if (xy.x < 0.0 && -xy.x >= fabs(xy.y)) { area = pj_qsc_ns::AREA_2; mu = (mu < 0.0 ? mu + M_PI : mu - M_PI); } else { area = pj_qsc_ns::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 == pj_qsc_ns::FACE_TOP) { phi = acos(cosphi); lp.phi = M_HALFPI - phi; if (area == pj_qsc_ns::AREA_0) { lp.lam = theta + M_HALFPI; } else if (area == pj_qsc_ns::AREA_1) { lp.lam = (theta < 0.0 ? theta + M_PI : theta - M_PI); } else if (area == pj_qsc_ns::AREA_2) { lp.lam = theta - M_HALFPI; } else /* area == pj_qsc_ns::AREA_3 */ { lp.lam = theta; } } else if (Q->face == pj_qsc_ns::FACE_BOTTOM) { phi = acos(cosphi); lp.phi = phi - M_HALFPI; if (area == pj_qsc_ns::AREA_0) { lp.lam = -theta + M_HALFPI; } else if (area == pj_qsc_ns::AREA_1) { lp.lam = -theta; } else if (area == pj_qsc_ns::AREA_2) { lp.lam = -theta - M_HALFPI; } else /* area == pj_qsc_ns::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; 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 == pj_qsc_ns::AREA_1) { t = r; r = -s; s = t; } else if (area == pj_qsc_ns::AREA_2) { r = -r; s = -s; } else if (area == pj_qsc_ns::AREA_3) { t = r; r = s; s = -t; } /* Rotate q,r,s into the correct cube face. */ if (Q->face == pj_qsc_ns::FACE_RIGHT) { t = q; q = -r; r = t; } else if (Q->face == pj_qsc_ns::FACE_BACK) { q = -q; r = -r; } else if (Q->face == pj_qsc_ns::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 == pj_qsc_ns::FACE_RIGHT) { lp.lam = qsc_shift_longitude_origin(lp.lam, -M_HALFPI); } else if (Q->face == pj_qsc_ns::FACE_BACK) { lp.lam = qsc_shift_longitude_origin(lp.lam, -M_PI); } else if (Q->face == pj_qsc_ns::FACE_LEFT) { lp.lam = qsc_shift_longitude_origin(lp.lam, +M_HALFPI); } } /* Apply the shift from the sphere to the ellipsoid as described * in [LK12]. */ if (P->es != 0.0) { 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; } PJ *PJ_PROJECTION(qsc) { struct pj_qsc_data *Q = static_cast( calloc(1, sizeof(struct pj_qsc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->inv = qsc_e_inverse; P->fwd = qsc_e_forward; /* Determine the cube face from the center of projection. */ if (P->phi0 >= M_HALFPI - M_FORTPI / 2.0) { Q->face = pj_qsc_ns::FACE_TOP; } else if (P->phi0 <= -(M_HALFPI - M_FORTPI / 2.0)) { Q->face = pj_qsc_ns::FACE_BOTTOM; } else if (fabs(P->lam0) <= M_FORTPI) { Q->face = pj_qsc_ns::FACE_FRONT; } else if (fabs(P->lam0) <= M_HALFPI + M_FORTPI) { Q->face = (P->lam0 > 0.0 ? pj_qsc_ns::FACE_RIGHT : pj_qsc_ns::FACE_LEFT); } else { Q->face = pj_qsc_ns::FACE_BACK; } /* Fill in useful values for the ellipsoid <-> sphere shift * described in [LK12]. */ if (P->es != 0.0) { 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; } #undef EPS10 proj-9.6.0/src/projections/robin.cpp000664 001754 001755 00000012567 14764566077 017377 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #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 + 2 * z * C.c2 + z * 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 */ namespace { // anonymous namespace struct COEFS { float c0, c1, c2, c3; }; } // anonymous namespace static const struct COEFS X[] = { {1.0f, 2.2199e-17f, -7.15515e-05f, 3.1103e-06f}, {0.9986f, -0.000482243f, -2.4897e-05f, -1.3309e-06f}, {0.9954f, -0.00083103f, -4.48605e-05f, -9.86701e-07f}, {0.99f, -0.00135364f, -5.9661e-05f, 3.6777e-06f}, {0.9822f, -0.00167442f, -4.49547e-06f, -5.72411e-06f}, {0.973f, -0.00214868f, -9.03571e-05f, 1.8736e-08f}, {0.96f, -0.00305085f, -9.00761e-05f, 1.64917e-06f}, {0.9427f, -0.00382792f, -6.53386e-05f, -2.6154e-06f}, {0.9216f, -0.00467746f, -0.00010457f, 4.81243e-06f}, {0.8962f, -0.00536223f, -3.23831e-05f, -5.43432e-06f}, {0.8679f, -0.00609363f, -0.000113898f, 3.32484e-06f}, {0.835f, -0.00698325f, -6.40253e-05f, 9.34959e-07f}, {0.7986f, -0.00755338f, -5.00009e-05f, 9.35324e-07f}, {0.7597f, -0.00798324f, -3.5971e-05f, -2.27626e-06f}, {0.7186f, -0.00851367f, -7.01149e-05f, -8.6303e-06f}, {0.6732f, -0.00986209f, -0.000199569f, 1.91974e-05f}, {0.6213f, -0.010418f, 8.83923e-05f, 6.24051e-06f}, {0.5722f, -0.00906601f, 0.000182f, 6.24051e-06f}, {0.5322f, -0.00677797f, 0.000275608f, 6.24051e-06f}}; static const struct COEFS Y[] = { {-5.20417e-18f, 0.0124f, 1.21431e-18f, -8.45284e-11f}, {0.062f, 0.0124f, -1.26793e-09f, 4.22642e-10f}, {0.124f, 0.0124f, 5.07171e-09f, -1.60604e-09f}, {0.186f, 0.0123999f, -1.90189e-08f, 6.00152e-09f}, {0.248f, 0.0124002f, 7.10039e-08f, -2.24e-08f}, {0.31f, 0.0123992f, -2.64997e-07f, 8.35986e-08f}, {0.372f, 0.0124029f, 9.88983e-07f, -3.11994e-07f}, {0.434f, 0.0123893f, -3.69093e-06f, -4.35621e-07f}, {0.4958f, 0.0123198f, -1.02252e-05f, -3.45523e-07f}, {0.5571f, 0.0121916f, -1.54081e-05f, -5.82288e-07f}, {0.6176f, 0.0119938f, -2.41424e-05f, -5.25327e-07f}, {0.6769f, 0.011713f, -3.20223e-05f, -5.16405e-07f}, {0.7346f, 0.0113541f, -3.97684e-05f, -6.09052e-07f}, {0.7903f, 0.0109107f, -4.89042e-05f, -1.04739e-06f}, {0.8435f, 0.0103431f, -6.4615e-05f, -1.40374e-09f}, {0.8936f, 0.00969686f, -6.4636e-05f, -8.547e-06f}, {0.9394f, 0.00840947f, -0.000192841f, -4.2106e-06f}, {0.9761f, 0.00616527f, -0.000256f, -4.2106e-06f}, {1.0f, 0.00328947f, -0.000319159f, -4.2106e-06f}}; #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-10 /* Not sure at all of the appropriate number for MAX_ITER... */ #define MAX_ITER 100 static PJ_XY robin_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; long i; double dphi; (void)P; dphi = fabs(lp.phi); i = isnan(lp.phi) ? -1 : lround(floor(dphi * C1 + 1e-15)); if (i < 0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } if (i >= NODES) i = NODES; 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 PJ_LP robin_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double t; struct COEFS T; int iters; lp.lam = xy.x / FXC; lp.phi = fabs(xy.y / FYC); if (lp.phi >= 1.) { /* simple pathologic cases */ if (lp.phi > ONEEPS) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } 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 */ long i = isnan(lp.phi) ? -1 : lround(floor(lp.phi * NODES)); if (i < 0 || i >= NODES) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } for (;;) { 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); for (iters = MAX_ITER; iters; --iters) { /* Newton-Raphson */ const double t1 = (V(T, t) - lp.phi) / DV(T, t); t -= t1; if (fabs(t1) < EPS) break; } if (iters == 0) proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.phi = (5 * i + t) * DEG_TO_RAD; if (xy.y < 0.) lp.phi = -lp.phi; lp.lam /= V(X[i], t); if (fabs(lp.lam) > M_PI) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp = proj_coord_error().lp; } } return lp; } PJ *PJ_PROJECTION(robin) { P->es = 0.; P->inv = robin_s_inverse; P->fwd = robin_s_forward; return P; } proj-9.6.0/src/projections/rouss.cpp000664 001754 001755 00000013237 14764566077 017434 0ustar00e012349e012349000000 000000 /* ** 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. */ #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_rouss_data { 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; }; } // anonymous namespace PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi, Ell"; static PJ_XY rouss_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_rouss_data *Q = static_cast(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 PJ_LP rouss_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_rouss_data *Q = static_cast(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 PJ *pj_rouss_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); if (static_cast(P->opaque)->en) free(static_cast(P->opaque)->en); return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); } PJ *PJ_PROJECTION(rouss) { double N0, es2, t, t2, R_R0_2, R_R0_4; struct pj_rouss_data *Q = static_cast( calloc(1, sizeof(struct pj_rouss_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (!((Q->en = proj_mdist_ini(P->es)))) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 = rouss_e_forward; P->inv = rouss_e_inverse; P->destructor = pj_rouss_destructor; return P; } proj-9.6.0/src/projections/rpoly.cpp000664 001754 001755 00000002612 14764566077 017421 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_rpoly_data { double phi1; double fxa; double fxb; int mode; }; } // anonymous namespace PROJ_HEAD(rpoly, "Rectangular Polyconic") "\n\tConic, Sph, no inv\n\tlat_ts="; #define EPS 1e-9 static PJ_XY rpoly_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_rpoly_data *Q = static_cast(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); fa = 2. * atan(fa * sin(lp.phi)); xy.x = sin(fa) * xy.y; xy.y = lp.phi - P->phi0 + (1. - cos(fa)) * xy.y; } return xy; } PJ *PJ_PROJECTION(rpoly) { struct pj_rpoly_data *Q = static_cast( calloc(1, sizeof(struct pj_rpoly_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->phi1 = fabs(pj_param(P->ctx, P->params, "rlat_ts").f); Q->mode = Q->phi1 > EPS; if (Q->mode) { Q->fxb = 0.5 * sin(Q->phi1); Q->fxa = 0.5 / Q->fxb; } P->es = 0.; P->fwd = rpoly_s_forward; return P; } #undef EPS proj-9.6.0/src/projections/s2.cpp000664 001754 001755 00000032035 14764566077 016602 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Implementing the S2 family of projections in PROJ * Author: Marcus Elia, * ****************************************************************************** * Copyright (c) 2021, Marcus Elia, * * 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 implements the S2 projection. This code is similar * to the QSC projection. * * * 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! * * You must also choose which conversion from UV to ST coordinates * is used (linear, quadratic, tangent). Read about them in * https://github.com/google/s2geometry/blob/0c4c460bdfe696da303641771f9def900b3e440f/src/s2/s2coords.h * The S2 projection functions are adapted from the above link and the S2 * Math util functions are adapted from * https://github.com/google/s2geometry/blob/0c4c460bdfe696da303641771f9def900b3e440f/src/s2/util/math/vector.h ****************************************************************************/ /* enable predefined math constants M_* for MS Visual Studio */ #if defined(_MSC_VER) || defined(_WIN32) #ifndef _USE_MATH_DEFINES #define _USE_MATH_DEFINES #endif #endif #include #include #include #include "proj.h" #include "proj_internal.h" /* The six cube faces. */ namespace { // anonymous namespace enum Face { FACE_FRONT = 0, FACE_RIGHT = 1, FACE_TOP = 2, FACE_BACK = 3, FACE_LEFT = 4, FACE_BOTTOM = 5 }; } // anonymous namespace enum S2ProjectionType { Linear, Quadratic, Tangent, NoUVtoST }; static std::map stringToS2ProjectionType{ {"linear", Linear}, {"quadratic", Quadratic}, {"tangent", Tangent}, {"none", NoUVtoST}}; namespace { // anonymous namespace struct pj_s2 { enum Face face; double a_squared; double one_minus_f; double one_minus_f_squared; S2ProjectionType UVtoST; }; } // anonymous namespace PROJ_HEAD(s2, "S2") "\n\tMisc, Sph&Ell"; /* The four areas on a cube face. AREA_0 is the area of definition, * the other three areas are counted counterclockwise. */ namespace { // anonymous namespace enum Area { AREA_0 = 0, AREA_1 = 1, AREA_2 = 2, AREA_3 = 3 }; } // anonymous namespace // ================================================= // // S2 Math Util // // ================================================= static PJ_XYZ Abs(const PJ_XYZ &p) { return {std::fabs(p.x), std::fabs(p.y), std::fabs(p.z)}; } // return the index of the largest component (fabs) static int LargestAbsComponent(const PJ_XYZ &p) { PJ_XYZ temp = Abs(p); return temp.x > temp.y ? temp.x > temp.z ? 0 : 2 : temp.y > temp.z ? 1 : 2; } // ================================================= // // S2 Projection Functions // // ================================================= // Unfortunately, tan(M_PI_4) is slightly less than 1.0. This isn't due to // a flaw in the implementation of tan(), it's because the derivative of // tan(x) at x=pi/4 is 2, and it happens that the two adjacent floating // point numbers on either side of the infinite-precision value of pi/4 have // tangents that are slightly below and slightly above 1.0 when rounded to // the nearest double-precision result. static double STtoUV(double s, S2ProjectionType s2_projection) { switch (s2_projection) { case Linear: return 2 * s - 1; break; case Quadratic: if (s >= 0.5) return (1 / 3.) * (4 * s * s - 1); else return (1 / 3.) * (1 - 4 * (1 - s) * (1 - s)); break; case Tangent: s = std::tan(M_PI_2 * s - M_PI_4); return s + (1.0 / static_cast(static_cast(1) << 53)) * s; break; default: return s; } } static double UVtoST(double u, S2ProjectionType s2_projection) { double ret = u; switch (s2_projection) { case Linear: ret = 0.5 * (u + 1); break; case Quadratic: if (u >= 0) ret = 0.5 * std::sqrt(1 + 3 * u); else ret = 1 - 0.5 * std::sqrt(1 - 3 * u); break; case Tangent: { volatile double a = std::atan(u); ret = (2 * M_1_PI) * (a + M_PI_4); break; } case NoUVtoST: break; } return ret; } inline PJ_XYZ FaceUVtoXYZ(int face, double u, double v) { switch (face) { case 0: return {1, u, v}; case 1: return {-u, 1, v}; case 2: return {-u, -v, 1}; case 3: return {-1, -v, -u}; case 4: return {v, -1, -u}; default: return {v, u, -1}; } } inline PJ_XYZ FaceUVtoXYZ(int face, const PJ_XY &uv) { return FaceUVtoXYZ(face, uv.x, uv.y); } inline void ValidFaceXYZtoUV(int face, const PJ_XYZ &p, double *pu, double *pv) { switch (face) { case 0: *pu = p.y / p.x; *pv = p.z / p.x; break; case 1: *pu = -p.x / p.y; *pv = p.z / p.y; break; case 2: *pu = -p.x / p.z; *pv = -p.y / p.z; break; case 3: *pu = p.z / p.x; *pv = p.y / p.x; break; case 4: *pu = p.z / p.y; *pv = -p.x / p.y; break; default: *pu = -p.y / p.z; *pv = -p.x / p.z; break; } } inline void ValidFaceXYZtoUV(int face, const PJ_XYZ &p, PJ_XY *puv) { ValidFaceXYZtoUV(face, p, &(*puv).x, &(*puv).y); } inline int GetFace(const PJ_XYZ &p) { int face = LargestAbsComponent(p); double pFace; switch (face) { case 0: pFace = p.x; break; case 1: pFace = p.y; break; default: pFace = p.z; break; } if (pFace < 0) face += 3; return face; } inline int XYZtoFaceUV(const PJ_XYZ &p, double *pu, double *pv) { int face = GetFace(p); ValidFaceXYZtoUV(face, p, pu, pv); return face; } inline int XYZtoFaceUV(const PJ_XYZ &p, PJ_XY *puv) { return XYZtoFaceUV(p, &(*puv).x, &(*puv).y); } inline bool FaceXYZtoUV(int face, const PJ_XYZ &p, double *pu, double *pv) { double pFace; switch (face) { case 0: pFace = p.x; break; case 1: pFace = p.y; break; case 2: pFace = p.z; break; case 3: pFace = p.x; break; case 4: pFace = p.y; break; default: pFace = p.z; break; } if (face < 3) { if (pFace <= 0) return false; } else { if (pFace >= 0) return false; } ValidFaceXYZtoUV(face, p, pu, pv); return true; } inline bool FaceXYZtoUV(int face, const PJ_XYZ &p, PJ_XY *puv) { return FaceXYZtoUV(face, p, &(*puv).x, &(*puv).y); } // This function inverts ValidFaceXYZtoUV() inline bool UVtoSphereXYZ(int face, double u, double v, PJ_XYZ *xyz) { double major_coord = 1 / sqrt(1 + u * u + v * v); double minor_coord_1 = u * major_coord; double minor_coord_2 = v * major_coord; switch (face) { case 0: xyz->x = major_coord; xyz->y = minor_coord_1; xyz->z = minor_coord_2; break; case 1: xyz->x = -minor_coord_1; xyz->y = major_coord; xyz->z = minor_coord_2; break; case 2: xyz->x = -minor_coord_1; xyz->y = -minor_coord_2; xyz->z = major_coord; break; case 3: xyz->x = -major_coord; xyz->y = -minor_coord_2; xyz->z = -minor_coord_1; break; case 4: xyz->x = minor_coord_2; xyz->y = -major_coord; xyz->z = -minor_coord_1; break; default: xyz->x = minor_coord_2; xyz->y = minor_coord_1; xyz->z = -major_coord; break; } return true; } // ============================================ // // The Forward and Inverse Functions // // ============================================ static PJ_XY s2_forward(PJ_LP lp, PJ *P) { struct pj_s2 *Q = static_cast(P->opaque); double lat; /* 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 != 0.0) { lat = atan(Q->one_minus_f_squared * tan(lp.phi)); } else { lat = lp.phi; } // Convert the lat/long to x,y,z on the unit sphere double x, y, z; double sinlat, coslat; double sinlon, coslon; sinlat = sin(lat); coslat = cos(lat); sinlon = sin(lp.lam); coslon = cos(lp.lam); x = coslat * coslon; y = coslat * sinlon; z = sinlat; PJ_XYZ spherePoint{x, y, z}; PJ_XY uvCoords; ValidFaceXYZtoUV(Q->face, spherePoint, &uvCoords.x, &uvCoords.y); double s = UVtoST(uvCoords.x, Q->UVtoST); double t = UVtoST(uvCoords.y, Q->UVtoST); return {s, t}; } static PJ_LP s2_inverse(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; struct pj_s2 *Q = static_cast(P->opaque); // Do the S2 projections to get from s,t to u,v to x,y,z double u = STtoUV(xy.x, Q->UVtoST); double v = STtoUV(xy.y, Q->UVtoST); PJ_XYZ sphereCoords; UVtoSphereXYZ(Q->face, u, v, &sphereCoords); double q = sphereCoords.x; double r = sphereCoords.y; double s = sphereCoords.z; // Get the spherical angles from the x y z lp.phi = acos(-s) - M_HALFPI; lp.lam = atan2(r, q); /* Apply the shift from the sphere to the ellipsoid as described * in [LK12]. */ if (P->es != 0.0) { int invert_sign; volatile double tanphi, xa; invert_sign = (lp.phi < 0.0 ? 1 : 0); tanphi = tan(lp.phi); xa = P->b / sqrt(tanphi * tanphi + Q->one_minus_f_squared); lp.phi = atan(sqrt(Q->a_squared - xa * xa) / (Q->one_minus_f * xa)); if (invert_sign) { lp.phi = -lp.phi; } } return lp; } PJ *PJ_PROJECTION(s2) { struct pj_s2 *Q = static_cast(calloc(1, sizeof(struct pj_s2))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; /* Determine which UVtoST function is to be used */ PROJVALUE maybeUVtoST = pj_param(P->ctx, P->params, "sUVtoST"); if (nullptr != maybeUVtoST.s) { try { Q->UVtoST = stringToS2ProjectionType.at(maybeUVtoST.s); } catch (const std::out_of_range &) { proj_log_error( P, _("Invalid value for s2 parameter: should be linear, " "quadratic, tangent, or none.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else { Q->UVtoST = Quadratic; } P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_PROJECTED; P->from_greenwich = -P->lam0; P->inv = s2_inverse; P->fwd = s2_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 != 0.0) { Q->a_squared = P->a * P->a; Q->one_minus_f = 1.0 - (P->a - P->b) / P->a; Q->one_minus_f_squared = Q->one_minus_f * Q->one_minus_f; } return P; } proj-9.6.0/src/projections/sch.cpp000664 001754 001755 00000017645 14764566077 017045 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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. ****************************************************************************/ #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_sch_data { double plat; /*Peg Latitude */ double plon; /*Peg Longitude*/ double phdg; /*Peg heading */ double h0; /*Average altitude */ double transMat[9]; double xyzoff[3]; double rcurv; PJ *cart; PJ *cart_sph; }; } // anonymous namespace PROJ_HEAD(sch, "Spherical Cross-track Height") "\n\tMisc\n\tplat_0= plon_0= phdg_0= [h_0=]"; static PJ_LPZ sch_inverse3d(PJ_XYZ xyz, PJ *P) { struct pj_sch_data *Q = static_cast(P->opaque); PJ_LPZ lpz; lpz.lam = xyz.x * (P->a / Q->rcurv); lpz.phi = xyz.y * (P->a / Q->rcurv); lpz.z = xyz.z; xyz = Q->cart_sph->fwd3d(lpz, Q->cart_sph); /* Apply rotation */ xyz = {Q->transMat[0] * xyz.x + Q->transMat[1] * xyz.y + Q->transMat[2] * xyz.z, Q->transMat[3] * xyz.x + Q->transMat[4] * xyz.y + Q->transMat[5] * xyz.z, Q->transMat[6] * xyz.x + Q->transMat[7] * xyz.y + Q->transMat[8] * xyz.z}; /* Apply offset */ xyz.x += Q->xyzoff[0]; xyz.y += Q->xyzoff[1]; xyz.z += Q->xyzoff[2]; /* Convert geocentric coordinates to lat long */ return Q->cart->inv3d(xyz, Q->cart); } static PJ_XYZ sch_forward3d(PJ_LPZ lpz, PJ *P) { struct pj_sch_data *Q = static_cast(P->opaque); /* Convert lat long to geocentric coordinates */ PJ_XYZ xyz = Q->cart->fwd3d(lpz, Q->cart); /* Adjust for offset */ xyz.x -= Q->xyzoff[0]; xyz.y -= Q->xyzoff[1]; xyz.z -= Q->xyzoff[2]; /* Apply rotation */ xyz = {Q->transMat[0] * xyz.x + Q->transMat[3] * xyz.y + Q->transMat[6] * xyz.z, Q->transMat[1] * xyz.x + Q->transMat[4] * xyz.y + Q->transMat[7] * xyz.z, Q->transMat[2] * xyz.x + Q->transMat[5] * xyz.y + Q->transMat[8] * xyz.z}; /* Convert to local lat,long */ lpz = Q->cart_sph->inv3d(xyz, Q->cart_sph); /* Scale by radius */ xyz.x = lpz.lam * (Q->rcurv / P->a); xyz.y = lpz.phi * (Q->rcurv / P->a); xyz.z = lpz.z; return xyz; } static PJ *pj_sch_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; auto Q = static_cast(P->opaque); if (Q) { if (Q->cart) Q->cart->destructor(Q->cart, errlev); if (Q->cart_sph) Q->cart_sph->destructor(Q->cart_sph, errlev); } return pj_default_destructor(P, errlev); } static PJ *pj_sch_setup(PJ *P) { /* general initialization */ struct pj_sch_data *Q = static_cast(P->opaque); /* Setup original geocentric system */ // Pass a dummy ellipsoid definition that will be overridden just afterwards Q->cart = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart == nullptr) return pj_sch_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def(P, Q->cart); const double clt = cos(Q->plat); const double slt = sin(Q->plat); const double clo = cos(Q->plon); const double slo = sin(Q->plon); /* Estimate the radius of curvature for given peg */ const double temp = sqrt(1.0 - (P->es) * slt * slt); const double reast = (P->a) / temp; const double rnorth = (P->a) * (1.0 - (P->es)) / pow(temp, 3); const double chdg = cos(Q->phdg); const double shdg = sin(Q->phdg); Q->rcurv = Q->h0 + (reast * rnorth) / (reast * chdg * chdg + rnorth * shdg * shdg); /* Set up local sphere at the given peg point */ Q->cart_sph = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart_sph == nullptr) return pj_sch_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); pj_calc_ellipsoid_params(Q->cart_sph, Q->rcurv, 0); /* 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; PJ_LPZ lpz; lpz.lam = Q->plon; lpz.phi = Q->plat; lpz.z = Q->h0; PJ_XYZ xyz = Q->cart->fwd3d(lpz, Q->cart); Q->xyzoff[0] = xyz.x - (Q->rcurv) * clt * clo; Q->xyzoff[1] = xyz.y - (Q->rcurv) * clt * slo; Q->xyzoff[2] = xyz.z - (Q->rcurv) * slt; P->fwd3d = sch_forward3d; P->inv3d = sch_inverse3d; return P; } PJ *PJ_PROJECTION(sch) { struct pj_sch_data *Q = static_cast( calloc(1, sizeof(struct pj_sch_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = pj_sch_destructor; 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 { proj_log_error(P, _("Missing parameter plat_0.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* 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 { proj_log_error(P, _("Missing parameter plon_0.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* Check if peg heading is defined */ if (pj_param(P->ctx, P->params, "tphdg_0").i) Q->phdg = pj_param(P->ctx, P->params, "rphdg_0").f; else { proj_log_error(P, _("Missing parameter phdg_0.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* 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; return pj_sch_setup(P); } proj-9.6.0/src/projections/sconics.cpp000664 001754 001755 00000014000 14764566077 017707 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include namespace pj_sconics_ns { enum Type { EULER = 0, MURD1 = 1, MURD2 = 2, MURD3 = 3, PCONIC = 4, TISSOT = 5, VITK1 = 6 }; } namespace { // anonymous namespace struct pj_sconics_data { double n; double rho_c; double rho_0; double sig; double c1, c2; enum pj_sconics_ns::Type type; }; } // anonymous namespace #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) { proj_log_error(P, _("Missing parameter: lat_1 should be specified")); err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; } else if (!pj_param(P->ctx, P->params, "tlat_2").i) { proj_log_error(P, _("Missing parameter: lat_2 should be specified")); err = PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE; } 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); const double sig = 0.5 * (p2 + p1); static_cast(P->opaque)->sig = sig; err = (fabs(*del) < EPS || fabs(sig) < EPS) ? PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE : 0; if (err) { proj_log_error( P, _("Illegal value for lat_1 and lat_2: |lat_1 - lat_2| " "and |lat_1 + lat_2| should be > 0")); } } return err; } static PJ_XY sconics_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_sconics_data *Q = static_cast(P->opaque); double rho; switch (Q->type) { case pj_sconics_ns::MURD2: rho = Q->rho_c + tan(Q->sig - lp.phi); break; case pj_sconics_ns::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 PJ_LP sconics_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, (and ellipsoidal?) inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_sconics_data *Q = static_cast(P->opaque); double rho; xy.y = Q->rho_0 - xy.y; rho = hypot(xy.x, 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 pj_sconics_ns::PCONIC: lp.phi = atan(Q->c1 - rho / Q->c2) + Q->sig; break; case pj_sconics_ns::MURD2: lp.phi = Q->sig - atan(rho - Q->rho_c); break; default: lp.phi = Q->rho_c - rho; } return lp; } static PJ *pj_sconics_setup(PJ *P, enum pj_sconics_ns::Type type) { double del, cs; int err; struct pj_sconics_data *Q = static_cast( calloc(1, sizeof(struct pj_sconics_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->type = type; err = phi12(P, &del); if (err) return pj_default_destructor(P, err); switch (Q->type) { case pj_sconics_ns::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 pj_sconics_ns::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 pj_sconics_ns::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 pj_sconics_ns::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 pj_sconics_ns::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 pj_sconics_ns::PCONIC: Q->n = sin(Q->sig); Q->c2 = cos(del); Q->c1 = 1. / tan(Q->sig); del = P->phi0 - Q->sig; if (fabs(del) - EPS10 >= M_HALFPI) { proj_log_error( P, _("Invalid value for lat_0/lat_1/lat_2: |lat_0 - 0.5 * " "(lat_1 + lat_2)| should be < 90°")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->rho_0 = Q->c2 * (Q->c1 - tan(del)); break; case pj_sconics_ns::VITK1: cs = tan(del); Q->n = cs * 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 = sconics_s_inverse; P->fwd = sconics_s_forward; P->es = 0; return (P); } PJ *PJ_PROJECTION(euler) { return pj_sconics_setup(P, pj_sconics_ns::EULER); } PJ *PJ_PROJECTION(tissot) { return pj_sconics_setup(P, pj_sconics_ns::TISSOT); } PJ *PJ_PROJECTION(murd1) { return pj_sconics_setup(P, pj_sconics_ns::MURD1); } PJ *PJ_PROJECTION(murd2) { return pj_sconics_setup(P, pj_sconics_ns::MURD2); } PJ *PJ_PROJECTION(murd3) { return pj_sconics_setup(P, pj_sconics_ns::MURD3); } PJ *PJ_PROJECTION(pconic) { return pj_sconics_setup(P, pj_sconics_ns::PCONIC); } PJ *PJ_PROJECTION(vitk1) { return pj_sconics_setup(P, pj_sconics_ns::VITK1); } #undef EPS10 #undef EPS #undef LINE2 proj-9.6.0/src/projections/som.cpp000664 001754 001755 00000025736 14764566077 017066 0ustar00e012349e012349000000 000000 /****************************************************************************** * This implements the Space Oblique Mercator (SOM) projection, used by the * Multi-angle Imaging SpectroRadiometer (MISR) products, from the NASA EOS *Terra platform among others (e.g. ASTER). * * This code was originally developed for the Landsat SOM projection with the * following parameters set for Landsat satellites 1, 2, and 3: * * inclination angle = 99.092 degrees * period of revolution = 103.2669323 minutes * ascending longitude = 128.87 degrees - (360 / 251) * path_number * * or for Landsat satellites greater than 3: * * inclination angle = 98.2 degrees * period of revolution = 98.8841202 minutes * ascending longitude = 129.3 degrees - (360 / 233) * path_number * * For the MISR path based SOM projection, the code is identical to that of *Landsat SOM 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 used for Landsat: * * Q->rlm = PI * (1. / 248. + .5161290322580645); * * changed to: * * Q->rlm = 0 * * For the generic SOM projection, the code is identical to the above for MISR * except that the following parameters are now taken as input rather than *derived from path number: * * inclination angle * period of revolution * ascending longitude * * The change of Q->rlm = 0 is kept. * *****************************************************************************/ /* based upon Snyder and Linck, USGS-NMD */ #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(som, "Space Oblique Mercator") "\n\tCyl, Sph&Ell\n\tinc_angle= ps_rev= asc_lon= "; PROJ_HEAD(misrsom, "Space oblique for MISR") "\n\tCyl, Sph&Ell\n\tpath="; PROJ_HEAD(lsat, "Space oblique for LANDSAT") "\n\tCyl, Sph&Ell\n\tlsat= path="; #define TOL 1e-7 namespace { // anonymous namespace struct pj_som_data { double a2, a4, b, c1, c3; double q, t, u, w, p22, sa, ca, xj, rlm, rlm2; double alf; }; } // anonymous namespace static void seraz0(double lam, double mult, PJ *P) { struct pj_som_data *Q = static_cast(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))); 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); 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 PJ_XY som_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_som_data *Q = static_cast(P->opaque); int l, nn; double lamt = 0.0, xlam, sdsq, c, d, s, lamdp = 0.0, phidp, lampp, tanph; double lamtp, cl, sd, sp, sav, tanphi; if (lp.phi > M_HALFPI) lp.phi = M_HALFPI; else if (lp.phi < -M_HALFPI) lp.phi = -M_HALFPI; if (lp.phi >= 0.) lampp = M_HALFPI; else lampp = M_PI_HALFPI; tanphi = tan(lp.phi); for (nn = 0;;) { double fac; sav = lampp; lamtp = lp.lam + Q->p22 * lampp; cl = cos(lamtp); if (cl < 0) fac = lampp + sin(lampp) * M_HALFPI; else fac = lampp - sin(lampp) * M_HALFPI; for (l = 50; l >= 0; --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 PJ_LP som_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_som_data *Q = static_cast(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; const double denom = 1. - sppsq * (1. + Q->u); if (denom == 0.0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } 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)) / denom); 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 PJ *som_setup(PJ *P) { double esc, ess, lam; struct pj_som_data *Q = static_cast(P->opaque); Q->sa = sin(Q->alf); Q->ca = cos(Q->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->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 = som_e_inverse; P->fwd = som_e_forward; return P; } PJ *PJ_PROJECTION(som) { struct pj_som_data *Q = static_cast( calloc(1, sizeof(struct pj_som_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; // ascending longitude (radians) P->lam0 = pj_param(P->ctx, P->params, "rasc_lon").f; if (P->lam0 < -M_TWOPI || P->lam0 > M_TWOPI) { proj_log_error(P, _("Invalid value for ascending longitude: should be in " "[-2pi, 2pi] range")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } // inclination angle (radians) Q->alf = pj_param(P->ctx, P->params, "rinc_angle").f; if (Q->alf < 0 || Q->alf > M_PI) { proj_log_error(P, _("Invalid value for inclination angle: should be in " "[0, pi] range")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } // period of revolution (day / rev) Q->p22 = pj_param(P->ctx, P->params, "dps_rev").f; if (Q->p22 < 0) { proj_log_error(P, _("Number of days per rotation should be positive")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->rlm = 0; return som_setup(P); } PJ *PJ_PROJECTION(misrsom) { int path; struct pj_som_data *Q = static_cast( calloc(1, sizeof(struct pj_som_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; path = pj_param(P->ctx, P->params, "ipath").i; if (path <= 0 || path > 233) { proj_log_error( P, _("Invalid value for path: path should be in [1, 233] range")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } P->lam0 = DEG_TO_RAD * 129.3056 - M_TWOPI / 233. * path; Q->alf = 98.30382 * DEG_TO_RAD; Q->p22 = 98.88 / 1440.0; Q->rlm = 0; return som_setup(P); } PJ *PJ_PROJECTION(lsat) { int land, path; struct pj_som_data *Q = static_cast( calloc(1, sizeof(struct pj_som_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; land = pj_param(P->ctx, P->params, "ilsat").i; if (land <= 0 || land > 5) { proj_log_error( P, _("Invalid value for lsat: lsat should be in [1, 5] range")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } path = pj_param(P->ctx, P->params, "ipath").i; const int maxPathVal = (land <= 3 ? 251 : 233); if (path <= 0 || path > maxPathVal) { proj_log_error( P, _("Invalid value for path: path should be in [1, %d] range"), maxPathVal); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (land <= 3) { P->lam0 = DEG_TO_RAD * 128.87 - M_TWOPI / 251. * path; Q->p22 = 103.2669323; Q->alf = DEG_TO_RAD * 99.092; } else { P->lam0 = DEG_TO_RAD * 129.3 - M_TWOPI / 233. * path; Q->p22 = 98.8841202; Q->alf = DEG_TO_RAD * 98.2; } Q->p22 /= 1440.; Q->rlm = M_PI * (1. / 248. + .5161290322580645); return som_setup(P); } #undef TOL proj-9.6.0/src/projections/somerc.cpp000664 001754 001755 00000005551 14764566077 017551 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(somerc, "Swiss. Obl. Mercator") "\n\tCyl, Ell\n\tFor CH1903"; namespace { // anonymous namespace struct pj_somerc { double K, c, hlf_e, kR, cosp0, sinp0; }; } // anonymous namespace #define EPS 1.e-10 #define NITER 6 static PJ_XY somerc_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; double phip, lamp, phipp, lampp, sp, cp; struct pj_somerc *Q = static_cast(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 PJ_LP somerc_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_somerc *Q = static_cast(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 { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return (lp); } PJ *PJ_PROJECTION(somerc) { double cp, phip0, sp; struct pj_somerc *Q = static_cast(calloc(1, sizeof(struct pj_somerc))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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->sinp0 = sp / Q->c; phip0 = aasin(P->ctx, Q->sinp0); Q->cosp0 = cos(phip0); 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 = somerc_e_inverse; P->fwd = somerc_e_forward; return P; } #undef EPS #undef NITER proj-9.6.0/src/projections/spilhaus.cpp000664 001754 001755 00000012371 14764566077 020107 0ustar00e012349e012349000000 000000 /* * Implementation of the Spilhaus projections based on Adams World in a Square * II. * * Explained in https://github.com/OSGeo/PROJ/issues/1851 * * Copyright (c) 2025 Javier Jimenez Shaw * * Related material * ---------------- * * Map Projections - A Working Manual. 1987. John P. Snyder * Sections 3 and 5. * https://doi.org/10.3133/pp1395 * Online at https://neacsu.net/docs/geodesy/snyder/2-general/ */ #include #include #include "proj.h" #include "proj_internal.h" C_NAMESPACE PJ *pj_adams_ws2(PJ *); PROJ_HEAD(spilhaus, "Spilhaus") "\n\tSph&Ell"; namespace { // anonymous namespace struct pj_spilhaus_data { double cosalpha; double sinalpha; double beta; double lambda_0; double conformal_distortion; double cosrot; double sinrot; PJ *adams_ws2; }; } // anonymous namespace static PJ_XY spilhaus_forward(PJ_LP lp, PJ *P) { PJ_XY xy = {0.0, 0.0}; struct pj_spilhaus_data *Q = static_cast(P->opaque); const double phi_c = pj_conformal_lat(lp.phi, P->e); const double cosphi_c = cos(phi_c); const double sinphi_c = sin(phi_c); const double coslam = cos(lp.lam - Q->lambda_0); const double sinlam = sin(lp.lam - Q->lambda_0); PJ_LP lpadams; // Snyder, A working manual, formula 5-7 lpadams.phi = aasin(P->ctx, Q->sinalpha * sinphi_c - Q->cosalpha * cosphi_c * coslam); // Snyder, A working manual, formula 5-8b lpadams.lam = (Q->beta + atan2(cosphi_c * sinlam, (Q->sinalpha * cosphi_c * coslam + Q->cosalpha * sinphi_c))); while (lpadams.lam > M_PI) lpadams.lam -= M_PI * 2; while (lpadams.lam < -M_PI) lpadams.lam += M_PI * 2; PJ_XY xyadams = Q->adams_ws2->fwd(lpadams, Q->adams_ws2); const double factor = Q->conformal_distortion * P->k0; xy.x = -(xyadams.x * Q->cosrot + xyadams.y * Q->sinrot) * factor; xy.y = -(xyadams.x * -Q->sinrot + xyadams.y * Q->cosrot) * factor; return xy; } static PJ_LP spilhaus_inverse(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; struct pj_spilhaus_data *Q = static_cast(P->opaque); PJ_XY xyadams; const double factor = 1.0 / (Q->conformal_distortion * P->k0); xyadams.x = -(xy.x * Q->cosrot + xy.y * -Q->sinrot) * factor; xyadams.y = -(xy.x * Q->sinrot + xy.y * Q->cosrot) * factor; PJ_LP lpadams = Q->adams_ws2->inv(xyadams, Q->adams_ws2); const double cosphi_s = cos(lpadams.phi); const double sinphi_s = sin(lpadams.phi); const double coslam_s = cos(lpadams.lam - Q->beta); const double sinlam_s = sin(lpadams.lam - Q->beta); // conformal latitude lp.phi = aasin(P->ctx, Q->sinalpha * sinphi_s + Q->cosalpha * cosphi_s * coslam_s); lp.lam = Q->lambda_0 + aatan2(cosphi_s * sinlam_s, Q->sinalpha * cosphi_s * coslam_s - Q->cosalpha * sinphi_s); const double THRESHOLD = 1e-10; lp.phi = pj_conformal_lat_inverse(lp.phi, P->e, THRESHOLD); return lp; } static PJ *spilhaus_destructor(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); proj_destroy(static_cast(P->opaque)->adams_ws2); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(spilhaus) { struct pj_spilhaus_data *Q = static_cast( calloc(1, sizeof(struct pj_spilhaus_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; P->destructor = spilhaus_destructor; Q->adams_ws2 = pj_adams_ws2(nullptr); if (Q->adams_ws2 == nullptr) return spilhaus_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->adams_ws2->ctx = P->ctx; Q->adams_ws2->e = 0; Q->adams_ws2 = pj_adams_ws2(Q->adams_ws2); if (Q->adams_ws2 == nullptr) return spilhaus_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); auto param_rad = [&P](const std::string &name, double def) { return pj_param(P->ctx, P->params, ("t" + name).c_str()).i ? pj_param(P->ctx, P->params, ("r" + name).c_str()).f : def * DEG_TO_RAD; }; // Values from https://github.com/OSGeo/PROJ/issues/1851 if (!pj_param(P->ctx, P->params, "tlon_0").i) { P->lam0 = 66.94970198 * DEG_TO_RAD; } if (!pj_param(P->ctx, P->params, "tlat_0").i) { P->phi0 = -49.56371678 * DEG_TO_RAD; } const double azimuth = param_rad("azi", 40.17823482); const double rotation = param_rad("rot", 45); Q->cosrot = cos(rotation); Q->sinrot = sin(rotation); const double conformal_lat_center = pj_conformal_lat(P->phi0, P->e); Q->sinalpha = -cos(conformal_lat_center) * cos(azimuth); Q->cosalpha = sqrt(1 - Q->sinalpha * Q->sinalpha); Q->lambda_0 = atan2(tan(azimuth), -sin(conformal_lat_center)); Q->beta = M_PI + atan2(-sin(azimuth), -tan(conformal_lat_center)); Q->conformal_distortion = cos(P->phi0) / sqrt(1 - P->es * sin(P->phi0) * sin(P->phi0)) / cos(conformal_lat_center); P->fwd = spilhaus_forward; P->inv = spilhaus_inverse; return P; } proj-9.6.0/src/projections/stere.cpp000664 001754 001755 00000022557 14764566077 017410 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(stere, "Stereographic") "\n\tAzi, Sph&Ell\n\tlat_ts="; PROJ_HEAD(ups, "Universal Polar Stereographic") "\n\tAzi, Ell\n\tsouth"; namespace { // anonymous namespace enum Mode { S_POLE = 0, N_POLE = 1, OBLIQ = 2, EQUIT = 3 }; } // anonymous namespace namespace { // anonymous namespace struct pj_stere { double phits; double sinX1; double cosX1; double akm1; enum Mode mode; }; } // anonymous namespace #define sinph0 static_cast(P->opaque)->sinX1 #define cosph0 static_cast(P->opaque)->cosX1 #define EPS10 1.e-10 #define TOL 1.e-8 #define NITER 8 #define CONV 1.e-10 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 PJ_XY stere_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_stere *Q = static_cast(P->opaque); double coslam, sinlam, sinX = 0.0, cosX = 0.0, A = 0.0, sinphi; coslam = cos(lp.lam); sinlam = sin(lp.lam); sinphi = sin(lp.phi); if (Q->mode == OBLIQ || Q->mode == EQUIT) { const double X = 2. * atan(ssfn_(lp.phi, sinphi, P->e)) - M_HALFPI; sinX = sin(X); cosX = cos(X); } switch (Q->mode) { case OBLIQ: { const double denom = Q->cosX1 * (1. + Q->sinX1 * sinX + Q->cosX1 * cosX * coslam); if (denom == 0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } A = Q->akm1 / denom; xy.y = A * (Q->cosX1 * sinX - Q->sinX1 * cosX * coslam); xy.x = A * cosX; break; } case EQUIT: /* avoid zero division */ if (1. + cosX * coslam == 0.0) { xy.y = HUGE_VAL; } else { A = Q->akm1 / (1. + cosX * coslam); xy.y = A * sinX; } xy.x = A * cosX; break; case S_POLE: lp.phi = -lp.phi; coslam = -coslam; sinphi = -sinphi; PROJ_FALLTHROUGH; case N_POLE: if (fabs(lp.phi - M_HALFPI) < 1e-15) xy.x = 0; else 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 PJ_XY stere_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_stere *Q = static_cast(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) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = Q->akm1 / xy.y; xy.x = 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; PROJ_FALLTHROUGH; case S_POLE: if (fabs(lp.phi - M_HALFPI) < TOL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.y = Q->akm1 * tan(M_FORTPI + .5 * lp.phi); xy.x = sinlam * xy.y; xy.y *= coslam; break; } return xy; } static PJ_LP stere_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_stere *Q = static_cast(P->opaque); double cosphi, sinphi, tp = 0.0, phi_l = 0.0, rho, halfe = 0.0, halfpi = 0.0; rho = hypot(xy.x, xy.y); switch (Q->mode) { case OBLIQ: case EQUIT: tp = 2. * atan2(rho * Q->cosX1, Q->akm1); cosphi = cos(tp); 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; PROJ_FALLTHROUGH; case S_POLE: tp = -rho / Q->akm1; phi_l = M_HALFPI - 2. * atan(tp); halfpi = -M_HALFPI; halfe = -.5 * P->e; break; } for (int i = NITER; i > 0; --i) { 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; } phi_l = lp.phi; } proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } static PJ_LP stere_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_stere *Q = static_cast(P->opaque); double c, sinc, cosc; const double rh = hypot(xy.x, xy.y); c = 2. * atan(rh / Q->akm1); sinc = sin(c); 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); c = cosc - sinph0 * sin(lp.phi); if (c != 0. || xy.x != 0.) lp.lam = atan2(xy.x * sinc * cosph0, c * rh); break; case N_POLE: xy.y = -xy.y; PROJ_FALLTHROUGH; 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 PJ *stere_setup(PJ *P) { /* general initialization */ double t; struct pj_stere *Q = static_cast(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 != 0.0) { 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 { t = sin(Q->phits); Q->akm1 = cos(Q->phits) / pj_tsfn(Q->phits, t, 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 = stere_e_inverse; P->fwd = stere_e_forward; } else { switch (Q->mode) { case OBLIQ: sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); PROJ_FALLTHROUGH; 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 = stere_s_inverse; P->fwd = stere_s_forward; } return P; } PJ *PJ_PROJECTION(stere) { struct pj_stere *Q = static_cast(calloc(1, sizeof(struct pj_stere))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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 stere_setup(P); } PJ *PJ_PROJECTION(ups) { struct pj_stere *Q = static_cast(calloc(1, sizeof(struct pj_stere))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; /* International Ellipsoid */ P->phi0 = pj_param(P->ctx, P->params, "bsouth").i ? -M_HALFPI : M_HALFPI; if (P->es == 0.0) { proj_log_error( P, _("Invalid value for es: only ellipsoidal formulation supported")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } P->k0 = .994; P->x0 = 2000000.; P->y0 = 2000000.; Q->phits = M_HALFPI; P->lam0 = 0.; return stere_setup(P); } #undef sinph0 #undef cosph0 #undef EPS10 #undef TOL #undef NITER #undef CONV proj-9.6.0/src/projections/sterea.cpp000664 001754 001755 00000007174 14764566077 017547 0ustar00e012349e012349000000 000000 /* ** 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. */ #include "proj.h" #include "proj_internal.h" #include #include namespace { // anonymous namespace struct pj_opaque { double phic0; double cosc0, sinc0; double R2; void *en; }; } // anonymous namespace PROJ_HEAD(sterea, "Oblique Stereographic Alternative") "\n\tAzimuthal, Sph&Ell"; static PJ_XY sterea_e_forward(PJ_LP lp, PJ *P) { /* Ellipsoidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_opaque *Q = static_cast(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); const double denom = 1. + Q->sinc0 * sinc + Q->cosc0 * cosc * cosl; if (denom == 0.0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xy; } k = P->k0 * Q->R2 / denom; xy.x = k * cosc * sin(lp.lam); xy.y = k * (Q->cosc0 * sinc - Q->sinc0 * cosc * cosl); return xy; } static PJ_LP sterea_e_inverse(PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_opaque *Q = static_cast(P->opaque); double rho, c, sinc, cosc; xy.x /= P->k0; xy.y /= P->k0; if ((rho = hypot(xy.x, xy.y)) != 0.0) { 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 PJ *destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->en); return pj_default_destructor(P, errlev); } PJ *PJ_PROJECTION(sterea) { double R; struct pj_opaque *Q = static_cast(calloc(1, sizeof(struct pj_opaque))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->en = pj_gauss_ini(P->e, P->phi0, &(Q->phic0), &R); if (nullptr == Q->en) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->sinc0 = sin(Q->phic0); Q->cosc0 = cos(Q->phic0); Q->R2 = 2. * R; P->inv = sterea_e_inverse; P->fwd = sterea_e_forward; P->destructor = destructor; return P; } proj-9.6.0/src/projections/sts.cpp000664 001754 001755 00000005331 14764566077 017066 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(kav5, "Kavrayskiy 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"; namespace { // anonymous namespace struct pj_sts { double C_x, C_y, C_p; int tan_mode; }; } // anonymous namespace static PJ_XY sts_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_sts *Q = static_cast(P->opaque); xy.x = Q->C_x * lp.lam * cos(lp.phi); xy.y = Q->C_y; lp.phi *= Q->C_p; const double 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 PJ_LP sts_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_sts *Q = static_cast(P->opaque); xy.y /= Q->C_y; lp.phi = Q->tan_mode ? atan(xy.y) : aasin(P->ctx, xy.y); const double c = cos(lp.phi); 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 PJ *setup(PJ *P, double p, double q, int mode) { P->es = 0.; P->inv = sts_s_inverse; P->fwd = sts_s_forward; static_cast(P->opaque)->C_x = q / p; static_cast(P->opaque)->C_y = p; static_cast(P->opaque)->C_p = 1 / q; static_cast(P->opaque)->tan_mode = mode; return P; } PJ *PJ_PROJECTION(fouc) { struct pj_sts *Q = static_cast(calloc(1, sizeof(struct pj_sts))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; return setup(P, 2., 2., 1); } PJ *PJ_PROJECTION(kav5) { struct pj_sts *Q = static_cast(calloc(1, sizeof(struct pj_sts))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; return setup(P, 1.50488, 1.35439, 0); } PJ *PJ_PROJECTION(qua_aut) { struct pj_sts *Q = static_cast(calloc(1, sizeof(struct pj_sts))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; return setup(P, 2., 2., 0); } PJ *PJ_PROJECTION(mbt_s) { struct pj_sts *Q = static_cast(calloc(1, sizeof(struct pj_sts))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; return setup(P, 1.48875, 1.36509, 0); } proj-9.6.0/src/projections/tcc.cpp000664 001754 001755 00000001230 14764566077 017020 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv"; #define EPS10 1.e-10 static PJ_XY tcc_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; const double b = cos(lp.phi) * sin(lp.lam); const double bt = 1. - b * b; if (bt < EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = b / sqrt(bt); xy.y = atan2(tan(lp.phi), cos(lp.lam)); return xy; } PJ *PJ_PROJECTION(tcc) { P->es = 0.; P->fwd = tcc_s_forward; P->inv = nullptr; return P; } proj-9.6.0/src/projections/tcea.cpp000664 001754 001755 00000001407 14764566077 017171 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") "\n\tCyl, Sph"; static PJ_XY tcea_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP tcea_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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; } PJ *PJ_PROJECTION(tcea) { P->inv = tcea_s_inverse; P->fwd = tcea_s_forward; P->es = 0.; return P; } proj-9.6.0/src/projections/times.cpp000664 001754 001755 00000004676 14764566077 017411 0ustar00e012349e012349000000 000000 /****************************************************************************** * 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 description of the Times Projection in * * Flattening the Earth, Snyder, J.P., 1993, p.213-214. *****************************************************************************/ #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(times, "Times") "\n\tCyl, Sph"; static PJ_XY times_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ double T, S, S2; PJ_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 PJ_LP times_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ double T, S, S2; PJ_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; } PJ *PJ_PROJECTION(times) { P->es = 0.0; P->inv = times_s_inverse; P->fwd = times_s_forward; return P; } proj-9.6.0/src/projections/tmerc.cpp000664 001754 001755 00000062427 14764566077 017400 0ustar00e012349e012349000000 000000 /* * Transverse Mercator implementations * * In this file two transverse mercator implementations are found. One of Gerald * Evenden/John Snyder origin and one of Knud Poder/Karsten Engsager origin. The * former is regarded as "approximate" in the following and the latter is * "exact". This word choice has been made to distinguish between the two * algorithms, where the Evenden/Snyder implementation is the faster, less * accurate implementation and the Poder/Engsager algorithm is a slightly * slower, but more accurate implementation. */ #include #include #include "proj.h" #include "proj_internal.h" #include PROJ_HEAD(tmerc, "Transverse Mercator") "\n\tCyl, Sph&Ell\n\tapprox"; PROJ_HEAD(etmerc, "Extended Transverse Mercator") "\n\tCyl, Sph"; PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") "\n\tCyl, Ell\n\tzone= south approx"; namespace { // anonymous namespace // Approximate: Evenden/Snyder struct EvendenSnyder { double esp; double ml0; double *en; }; // More exact: Poder/Engsager struct PoderEngsager { 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. */ }; struct tmerc_data { EvendenSnyder approx; PoderEngsager exact; }; } // anonymous namespace /* Constants for "approximate" transverse mercator */ #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 /* Constant for "exact" transverse mercator */ #define PROJ_ETMERC_ORDER 6 /*****************************************************************************/ // // Approximate Transverse Mercator functions // /*****************************************************************************/ static PJ_XY approx_e_fwd(PJ_LP lp, PJ *P) { PJ_XY xy = {0.0, 0.0}; const auto *Q = &(static_cast(P->opaque)->approx); 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; proj_context_errno_set( P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); 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 PJ_XY tmerc_spherical_fwd(PJ_LP lp, PJ *P) { PJ_XY xy = {0.0, 0.0}; double b, cosphi; const auto *Q = &(static_cast(P->opaque)->approx); cosphi = cos(lp.phi); b = cosphi * sin(lp.lam); if (fabs(fabs(b) - 1.) <= EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } xy.x = Q->ml0 * log((1. + b) / (1. - b)); xy.y = cosphi * cos(lp.lam) / sqrt(1. - b * b); b = fabs(xy.y); if (cosphi == 1 && (lp.lam < -M_HALFPI || lp.lam > M_HALFPI)) { /* Helps to be able to roundtrip |longitudes| > 90 at lat=0 */ /* We could also map to -M_PI ... */ xy.y = M_PI; } else if (b >= 1.) { if ((b - 1.) > EPS10) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } else xy.y = 0.; } else xy.y = acos(xy.y); if (lp.phi < 0.) xy.y = -xy.y; xy.y = Q->esp * (xy.y - P->phi0); return xy; } static PJ_LP approx_e_inv(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; const auto *Q = &(static_cast(P->opaque)->approx); lp.phi = pj_inv_mlfn(Q->ml0 + xy.y / P->k0, Q->en); if (fabs(lp.phi) >= M_HALFPI) { lp.phi = xy.y < 0. ? -M_HALFPI : M_HALFPI; lp.lam = 0.; } else { double sinphi = sin(lp.phi), cosphi = cos(lp.phi); double t = fabs(cosphi) > 1e-10 ? sinphi / cosphi : 0.; const double n = Q->esp * cosphi * cosphi; double con = 1. - P->es * sinphi * sinphi; const double d = xy.x * sqrt(con) / P->k0; con *= t; t *= t; const double 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. + 1575. * 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 PJ_LP tmerc_spherical_inv(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; double h, g; const auto *Q = &(static_cast(P->opaque)->approx); h = exp(xy.x / Q->esp); if (h == 0) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } g = .5 * (h - 1. / h); /* D, as in equation 8-8 of USGS "Map Projections - A Working Manual" */ const double D = P->phi0 + xy.y / Q->esp; h = cos(D); lp.phi = asin(sqrt((1. - h * h) / (1. + g * g))); /* Make sure that phi is on the correct hemisphere when false northing is * used */ lp.phi = copysign(lp.phi, D); lp.lam = (g != 0.0 || h != 0.0) ? atan2(g, h) : 0.; return lp; } static PJ *destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); free(static_cast(P->opaque)->approx.en); return pj_default_destructor(P, errlev); } static PJ *setup_approx(PJ *P) { auto *Q = &(static_cast(P->opaque)->approx); if (P->es != 0.0) { if (!(Q->en = pj_enfn(P->n))) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); Q->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), Q->en); Q->esp = P->es / (1. - P->es); } else { Q->esp = P->k0; Q->ml0 = .5 * Q->esp; } return P; } /*****************************************************************************/ // // Exact Transverse Mercator functions // // // 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 // /*****************************************************************************/ /* Helper functions for "exact" transverse mercator */ inline static double gatg(const double *p1, int len_p1, double B, double cos_2B, double sin_2B) { double h = 0, h1, h2 = 0; const double two_cos_2B = 2 * cos_2B; const double *p = p1 + len_p1; h1 = *--p; while (p - p1) { h = -h2 + two_cos_2B * h1 + *--p; h2 = h1; h1 = h; } return (B + h * sin_2B); } /* Complex Clenshaw summation */ inline static double clenS(const double *a, int size, double sin_arg_r, double cos_arg_r, double sinh_arg_i, double cosh_arg_i, double *R, double *I) { double r, i, hr, hr1, hr2, hi, hi1, hi2; /* arguments */ const double *p = a + size; r = 2 * cos_arg_r * cosh_arg_i; i = -2 * sin_arg_r * sinh_arg_i; /* summation loop */ hi1 = hr1 = hi = 0; hr = *--p; for (; 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(const double *a, int size, double arg_r) { double r, hr, hr1, hr2, cos_arg_r; const double *p = a + size; cos_arg_r = cos(arg_r); r = 2 * cos_arg_r; /* summation loop */ hr1 = 0; hr = *--p; for (; a - p;) { hr2 = hr1; hr1 = hr; hr = -hr2 + r * hr1 + *--p; } return sin(arg_r) * hr; } /* Ellipsoidal, forward */ static PJ_XY exact_e_fwd(PJ_LP lp, PJ *P) { PJ_XY xy = {0.0, 0.0}; const auto *Q = &(static_cast(P->opaque)->exact); /* ell. LAT, LNG -> Gaussian LAT, LNG */ double Cn = gatg(Q->cbg, PROJ_ETMERC_ORDER, lp.phi, cos(2 * lp.phi), sin(2 * lp.phi)); /* Gaussian LAT, LNG -> compl. sph. LAT */ const double sin_Cn = sin(Cn); const double cos_Cn = cos(Cn); const double sin_Ce = sin(lp.lam); const double cos_Ce = cos(lp.lam); const double cos_Cn_cos_Ce = cos_Cn * cos_Ce; Cn = atan2(sin_Cn, cos_Cn_cos_Ce); const double inv_denom_tan_Ce = 1. / hypot(sin_Cn, cos_Cn_cos_Ce); const double tan_Ce = sin_Ce * cos_Cn * inv_denom_tan_Ce; #if 0 // Variant of the above: found not to be measurably faster const double sin_Ce_cos_Cn = sin_Ce*cos_Cn; const double denom = sqrt(1 - sin_Ce_cos_Cn * sin_Ce_cos_Cn); const double tan_Ce = sin_Ce_cos_Cn / denom; #endif /* compl. sph. N, E -> ell. norm. N, E */ double Ce = asinh(tan_Ce); /* Replaces: Ce = log(tan(FORTPI + Ce*0.5)); */ /* * Non-optimized version: * const double sin_arg_r = sin(2*Cn); * const double cos_arg_r = cos(2*Cn); * * Given: * sin(2 * Cn) = 2 sin(Cn) cos(Cn) * sin(atan(y)) = y / sqrt(1 + y^2) * cos(atan(y)) = 1 / sqrt(1 + y^2) * ==> sin(2 * Cn) = 2 tan_Cn / (1 + tan_Cn^2) * * cos(2 * Cn) = 2cos^2(Cn) - 1 * = 2 / (1 + tan_Cn^2) - 1 */ const double two_inv_denom_tan_Ce = 2 * inv_denom_tan_Ce; const double two_inv_denom_tan_Ce_square = two_inv_denom_tan_Ce * inv_denom_tan_Ce; const double tmp_r = cos_Cn_cos_Ce * two_inv_denom_tan_Ce_square; const double sin_arg_r = sin_Cn * tmp_r; const double cos_arg_r = cos_Cn_cos_Ce * tmp_r - 1; /* * Non-optimized version: * const double sinh_arg_i = sinh(2*Ce); * const double cosh_arg_i = cosh(2*Ce); * * Given * sinh(2 * Ce) = 2 sinh(Ce) cosh(Ce) * sinh(asinh(y)) = y * cosh(asinh(y)) = sqrt(1 + y^2) * ==> sinh(2 * Ce) = 2 tan_Ce sqrt(1 + tan_Ce^2) * * cosh(2 * Ce) = 2cosh^2(Ce) - 1 * = 2 * (1 + tan_Ce^2) - 1 * * and 1+tan_Ce^2 = 1 + sin_Ce^2 * cos_Cn^2 / (sin_Cn^2 + cos_Cn^2 * * cos_Ce^2) = (sin_Cn^2 + cos_Cn^2 * cos_Ce^2 + sin_Ce^2 * cos_Cn^2) / * (sin_Cn^2 + cos_Cn^2 * cos_Ce^2) = 1. / (sin_Cn^2 + cos_Cn^2 * cos_Ce^2) * = inv_denom_tan_Ce^2 * */ const double sinh_arg_i = tan_Ce * two_inv_denom_tan_Ce; const double cosh_arg_i = two_inv_denom_tan_Ce_square - 1; double dCn, dCe; Cn += clenS(Q->gtu, PROJ_ETMERC_ORDER, sin_arg_r, cos_arg_r, sinh_arg_i, cosh_arg_i, &dCn, &dCe); Ce += dCe; if (fabs(Ce) <= 2.623395162778) { xy.y = Q->Qn * Cn + Q->Zb; /* Northing */ xy.x = Q->Qn * Ce; /* Easting */ } else { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); xy.x = xy.y = HUGE_VAL; } return xy; } /* Ellipsoidal, inverse */ static PJ_LP exact_e_inv(PJ_XY xy, PJ *P) { PJ_LP lp = {0.0, 0.0}; const auto *Q = &(static_cast(P->opaque)->exact); /* normalize N, E */ double Cn = (xy.y - Q->Zb) / Q->Qn; double Ce = xy.x / Q->Qn; if (fabs(Ce) <= 2.623395162778) { /* 150 degrees */ /* norm. N, E -> compl. sph. LAT, LNG */ const double sin_arg_r = sin(2 * Cn); const double cos_arg_r = cos(2 * Cn); // const double sinh_arg_i = sinh(2*Ce); // const double cosh_arg_i = cosh(2*Ce); const double exp_2_Ce = exp(2 * Ce); const double half_inv_exp_2_Ce = 0.5 / exp_2_Ce; const double sinh_arg_i = 0.5 * exp_2_Ce - half_inv_exp_2_Ce; const double cosh_arg_i = 0.5 * exp_2_Ce + half_inv_exp_2_Ce; double dCn_ignored, dCe; Cn += clenS(Q->utg, PROJ_ETMERC_ORDER, sin_arg_r, cos_arg_r, sinh_arg_i, cosh_arg_i, &dCn_ignored, &dCe); Ce += dCe; /* compl. sph. LAT -> Gaussian LAT, LNG */ const double sin_Cn = sin(Cn); const double cos_Cn = cos(Cn); #if 0 // Non-optimized version: double sin_Ce, cos_Ce; Ce = atan (sinh (Ce)); // Replaces: Ce = 2*(atan(exp(Ce)) - FORTPI); sin_Ce = sin (Ce); cos_Ce = cos (Ce); Ce = atan2 (sin_Ce, cos_Ce*cos_Cn); Cn = atan2 (sin_Cn*cos_Ce, hypot (sin_Ce, cos_Ce*cos_Cn)); #else /* * One can divide both member of Ce = atan2(...) by cos_Ce, which * gives: Ce = atan2 (tan_Ce, cos_Cn) = atan2(sinh(Ce), cos_Cn) * * and the same for Cn = atan2(...) * Cn = atan2 (sin_Cn, hypot (sin_Ce, cos_Ce*cos_Cn)/cos_Ce) * = atan2 (sin_Cn, hypot (sin_Ce/cos_Ce, cos_Cn)) * = atan2 (sin_Cn, hypot (tan_Ce, cos_Cn)) * = atan2 (sin_Cn, hypot (sinhCe, cos_Cn)) */ const double sinhCe = sinh(Ce); Ce = atan2(sinhCe, cos_Cn); const double modulus_Ce = hypot(sinhCe, cos_Cn); Cn = atan2(sin_Cn, modulus_Ce); #endif /* Gaussian LAT, LNG -> ell. LAT, LNG */ // Optimization of the computation of cos(2*Cn) and sin(2*Cn) const double tmp = 2 * modulus_Ce / (sinhCe * sinhCe + 1); const double sin_2_Cn = sin_Cn * tmp; const double cos_2_Cn = tmp * modulus_Ce - 1.; // const double cos_2_Cn = cos(2 * Cn); // const double sin_2_Cn = sin(2 * Cn); lp.phi = gatg(Q->cgb, PROJ_ETMERC_ORDER, Cn, cos_2_Cn, sin_2_Cn); lp.lam = Ce; } else { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); lp.phi = lp.lam = HUGE_VAL; } return lp; } static PJ *setup_exact(PJ *P) { auto *Q = &(static_cast(P->opaque)->exact); assert(P->es > 0); /* third flattening */ const double n = P->n; double np = n; /* 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 */ const double Z = gatg(Q->cbg, PROJ_ETMERC_ORDER, P->phi0, cos(2 * P->phi0), sin(2 * 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)); return P; } static PJ_XY auto_e_fwd(PJ_LP lp, PJ *P) { if (fabs(lp.lam) > 3 * DEG_TO_RAD) return exact_e_fwd(lp, P); else return approx_e_fwd(lp, P); } static PJ_LP auto_e_inv(PJ_XY xy, PJ *P) { // For k = 1 and long = 3 (from central meridian), // At lat = 0, we get x ~= 0.052, y = 0 // At lat = 90, we get x = 0, y ~= 1.57 // And the shape of this x=f(y) frontier curve is very very roughly a // parabola. Hence: if (fabs(xy.x) > 0.053 - 0.022 * xy.y * xy.y) return exact_e_inv(xy, P); else return approx_e_inv(xy, P); } static PJ *setup(PJ *P, TMercAlgo eAlg) { struct tmerc_data *Q = static_cast(calloc(1, sizeof(struct tmerc_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (P->es == 0) eAlg = TMercAlgo::EVENDEN_SNYDER; switch (eAlg) { case TMercAlgo::EVENDEN_SNYDER: { P->destructor = destructor; if (!setup_approx(P)) return nullptr; if (P->es == 0) { P->inv = tmerc_spherical_inv; P->fwd = tmerc_spherical_fwd; } else { P->inv = approx_e_inv; P->fwd = approx_e_fwd; } break; } case TMercAlgo::PODER_ENGSAGER: { setup_exact(P); P->inv = exact_e_inv; P->fwd = exact_e_fwd; break; } case TMercAlgo::AUTO: { P->destructor = destructor; if (!setup_approx(P)) return nullptr; setup_exact(P); P->inv = auto_e_inv; P->fwd = auto_e_fwd; break; } } return P; } static bool getAlgoFromParams(PJ *P, TMercAlgo &algo) { if (pj_param(P->ctx, P->params, "bapprox").i) { algo = TMercAlgo::EVENDEN_SNYDER; return true; } const char *algStr = pj_param(P->ctx, P->params, "salgo").s; if (algStr) { if (strcmp(algStr, "evenden_snyder") == 0) { algo = TMercAlgo::EVENDEN_SNYDER; return true; } if (strcmp(algStr, "poder_engsager") == 0) { algo = TMercAlgo::PODER_ENGSAGER; return true; } if (strcmp(algStr, "auto") == 0) { algo = TMercAlgo::AUTO; // Don't return so that we can run a later validity check } else { proj_log_error(P, "unknown value for +algo"); return false; } } else { pj_load_ini(P->ctx); // if not already done proj_context_errno_set( P->ctx, 0); // reset error in case proj.ini couldn't be found algo = P->ctx->defaultTmercAlgo; } // We haven't worked on the criterion on inverse transformation // when phi0 != 0 or if k0 is not close to 1 or for very oblate // ellipsoid (es > 0.1 is ~ rf < 200) if (algo == TMercAlgo::AUTO && (P->es > 0.1 || P->phi0 != 0 || fabs(P->k0 - 1) > 0.01)) { algo = TMercAlgo::PODER_ENGSAGER; } return true; } /*****************************************************************************/ // // Operation Setups // /*****************************************************************************/ PJ *PJ_PROJECTION(tmerc) { /* exact transverse mercator only exists in ellipsoidal form, */ /* use approximate version if +a sphere is requested */ TMercAlgo algo; if (!getAlgoFromParams(P, algo)) { proj_log_error(P, _("Invalid value for algo")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } return setup(P, algo); } PJ *PJ_PROJECTION(etmerc) { if (P->es == 0.0) { proj_log_error( P, _("Invalid value for eccentricity: it should not be zero")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } return setup(P, TMercAlgo::PODER_ENGSAGER); } /* UTM uses the Poder/Engsager implementation for the underlying projection */ /* UNLESS +approx is set in which case the Evenden/Snyder implementation is * used. */ PJ *PJ_PROJECTION(utm) { long zone; if (P->es == 0.0) { proj_log_error( P, _("Invalid value for eccentricity: it should not be zero")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (P->lam0 < -1000.0 || P->lam0 > 1000.0) { proj_log_error(P, _("Invalid value for lon_0")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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 ? */ { zone = pj_param(P->ctx, P->params, "izone").i; if (zone > 0 && zone <= 60) --zone; else { proj_log_error(P, _("Invalid value for zone")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else /* nearest central meridian input */ { zone = lround((floor((adjlon(P->lam0) + M_PI) * 30. / M_PI))); if (zone < 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.; TMercAlgo algo; if (!getAlgoFromParams(P, algo)) { proj_log_error(P, _("Invalid value for algo")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } return setup(P, algo); } proj-9.6.0/src/projections/tobmerc.cpp000664 001754 001755 00000002476 14764566077 017717 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" #include PROJ_HEAD(tobmerc, "Tobler-Mercator") "\n\tCyl, Sph"; static PJ_XY tobmerc_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; double cosphi; if (fabs(lp.phi) >= M_HALFPI) { // builtins.gie tests "Test expected failure at the poles:". However // given that M_HALFPI is strictly less than pi/2 in double precision, // it's not clear why shouldn't just return a large result for xy.y (and // it's not even that large, merely 38.025...). Even if the logic was // such that phi was strictly equal to pi/2, allowing xy.y = inf would // be a reasonable result. proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } cosphi = cos(lp.phi); xy.x = P->k0 * lp.lam * cosphi * cosphi; xy.y = P->k0 * asinh(tan(lp.phi)); return xy; } static PJ_LP tobmerc_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double cosphi; lp.phi = atan(sinh(xy.y / P->k0)); cosphi = cos(lp.phi); lp.lam = xy.x / P->k0 / (cosphi * cosphi); return lp; } PJ *PJ_PROJECTION(tobmerc) { P->inv = tobmerc_s_inverse; P->fwd = tobmerc_s_forward; return P; } proj-9.6.0/src/projections/tpeqd.cpp000664 001754 001755 00000010335 14764566077 017372 0ustar00e012349e012349000000 000000 #include "proj.h" #include "proj_internal.h" #include #include PROJ_HEAD(tpeqd, "Two Point Equidistant") "\n\tMisc Sph\n\tlat_1= lon_1= lat_2= lon_2="; namespace { // anonymous namespace struct pj_tpeqd { double cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2; double hz0, thz0, rhshz0, ca, sa, lp, lamc; }; } // anonymous namespace static PJ_XY tpeqd_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_tpeqd *Q = static_cast(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; t = z1 - z2; xy.x = Q->r2z0 * t; 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 PJ_LP tpeqd_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; struct pj_tpeqd *Q = static_cast(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.lam -= Q->lp; s = cos(lp.lam); lp.phi = aasin(P->ctx, Q->sa * sp + Q->ca * cp * s); lp.lam = atan2(cp * sin(lp.lam), Q->sa * cp * s - Q->ca * sp) + Q->lamc; return lp; } PJ *PJ_PROJECTION(tpeqd) { double lam_1, lam_2, phi_1, phi_2, A12; struct pj_tpeqd *Q = static_cast(calloc(1, sizeof(struct pj_tpeqd))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); 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) { proj_log_error(P, _("Invalid value for lat_1/lon_1/lat_2/lon_2: the 2 " "points should be distinct.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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); const auto SQ = [](double x) { return x * x; }; // Numerically stable formula for computing the central angle from // (phi_1, lam_1) to (phi_2, lam_2). // Special case of Vincenty formula on the sphere. // https://en.wikipedia.org/wiki/Great-circle_distance#Computational_formulae const double cs_minus_sc_cos_dlam = Q->cs - Q->sc * cos(Q->dlam2); Q->z02 = atan2(sqrt(SQ(Q->cp2 * sin(Q->dlam2)) + SQ(cs_minus_sc_cos_dlam)), Q->sp1 * Q->sp2 + Q->cp1 * Q->cp2 * cos(Q->dlam2)); if (Q->z02 == 0.0) { // Actually happens when both lat_1 = lat_2 and |lat_1| = 90 proj_log_error(P, _("Invalid value for lat_1 and lat_2: their absolute " "value should be < 90°.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->hz0 = .5 * Q->z02; A12 = atan2(Q->cp2 * sin(Q->dlam2), cs_minus_sc_cos_dlam); const double pp = aasin(P->ctx, Q->cp1 * sin(A12)); Q->ca = cos(pp); 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 = tpeqd_s_inverse; P->fwd = tpeqd_s_forward; P->es = 0.; return P; } proj-9.6.0/src/projections/urm5.cpp000664 001754 001755 00000003530 14764566077 017144 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl, Sph, no inv\n\tn= q= alpha="; namespace { // anonymous namespace struct pj_urm5 { double m, rmn, q3, n; }; } // anonymous namespace static PJ_XY urm5_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_urm5 *Q = static_cast(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; } PJ *PJ_PROJECTION(urm5) { double alpha, t; struct pj_urm5 *Q = static_cast(calloc(1, sizeof(struct pj_urm5))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (!pj_param(P->ctx, P->params, "tn").i) { proj_log_error(P, _("Missing parameter n.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->n = pj_param(P->ctx, P->params, "dn").f; if (Q->n <= 0. || Q->n > 1.) { proj_log_error(P, _("Invalid value for n: it should be in ]0,1] range.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } 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); const double denom = sqrt(1. - t * t); if (denom == 0) { proj_log_error( P, _("Invalid value for n / alpha: n * sin(|alpha|) should be < 1.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } Q->m = cos(alpha) / denom; Q->rmn = 1. / (Q->m * Q->n); P->es = 0.; P->inv = nullptr; P->fwd = urm5_s_forward; return P; } proj-9.6.0/src/projections/urmfps.cpp000664 001754 001755 00000004534 14764566077 017575 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph\n\tn="; PROJ_HEAD(wag1, "Wagner I (Kavrayskiy VI)") "\n\tPCyl, Sph"; namespace { // anonymous namespace struct pj_urmfps { double n, C_y; }; } // anonymous namespace #define C_x 0.8773826753 #define Cy 1.139753528477 static PJ_XY urmfps_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; lp.phi = aasin(P->ctx, static_cast(P->opaque)->n * sin(lp.phi)); xy.x = C_x * lp.lam * cos(lp.phi); xy.y = static_cast(P->opaque)->C_y * lp.phi; return xy; } static PJ_LP urmfps_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; xy.y /= static_cast(P->opaque)->C_y; lp.phi = aasin(P->ctx, sin(xy.y) / static_cast(P->opaque)->n); lp.lam = xy.x / (C_x * cos(xy.y)); return lp; } static PJ *urmfps_setup(PJ *P) { static_cast(P->opaque)->C_y = Cy / static_cast(P->opaque)->n; P->es = 0.; P->inv = urmfps_s_inverse; P->fwd = urmfps_s_forward; return P; } PJ *PJ_PROJECTION(urmfps) { struct pj_urmfps *Q = static_cast(calloc(1, sizeof(struct pj_urmfps))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; if (!pj_param(P->ctx, P->params, "tn").i) { proj_log_error(P, _("Missing parameter n.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->n = pj_param(P->ctx, P->params, "dn").f; if (Q->n <= 0. || Q->n > 1.) { proj_log_error(P, _("Invalid value for n: it should be in ]0,1] range.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } return urmfps_setup(P); } PJ *PJ_PROJECTION(wag1) { struct pj_urmfps *Q = static_cast(calloc(1, sizeof(struct pj_urmfps))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; static_cast(P->opaque)->n = 0.8660254037844386467637231707; return urmfps_setup(P); } #undef C_x #undef Cy proj-9.6.0/src/projections/vandg.cpp000664 001754 001755 00000012202 14764566077 017347 0ustar00e012349e012349000000 000000 // Changes to handle +over are: Copyright 2011-2014 Morelli Informatik #include "proj.h" #include "proj_internal.h" PROJ_HEAD(vandg, "van der Grinten (I)") "\n\tMisc Sph"; #define TOL 1.e-10 #define THIRD .33333333333333333333 #define C2_27 .07407407407407407407 // 2/27 #define PI4_3 4.18879020478639098458 // 4*pi/3 #define PISQ 9.86960440108935861869 // pi^2 #define TPISQ 19.73920880217871723738 // 2*pi^2 #define HPISQ 4.93480220054467930934 // pi^2/2 static PJ_XY vandg_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; double al, al2, g, g2, p2; // Comments tie this formulation to Snyder (1987), p. 241. p2 = fabs(lp.phi / M_HALFPI); // sin(theta) from (29-6) if ((p2 - TOL) > 1.) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } int sign = 1; if (P->over && fabs(lp.lam) > M_PI) sign = -1; 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 * sign * fabs(M_PI / lp.lam - lp.lam / M_PI); // A from (29-3) al2 = al * al; // A^2 g = sqrt(1. - p2 * p2); // cos(theta) g = g / (p2 + g - 1.); // G from (29-4) g2 = g * g; // G^2 p2 = g * (2. / p2 - 1.); // P from (29-5) p2 = p2 * p2; // P^2 { // Force floating-point computations done on 80 bit on // i386 to go back to 64 bit. This is to avoid the test failures // of // https://github.com/OSGeo/PROJ/issues/1906#issuecomment-583168348 // The choice of p2 is completely arbitrary. volatile double p2_tmp = p2; // cppcheck-suppress redundantAssignment p2 = p2_tmp; } xy.x = g - p2; // G - P^2 g = p2 + al2; // P^2 + A^2 // (29-1) xy.x = M_PI * fabs(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); // y from (29-2) has been expressed in terms of x here xy.y = 1. - xy.y * (xy.y + 2. * al); if (xy.y < -TOL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return xy; } if (xy.y < 0.) xy.y = 0.; else xy.y = sqrt(xy.y) * (lp.phi < 0. ? -M_PI : M_PI); } return xy; } static PJ_LP vandg_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2; // Comments tie this formulation to Snyder (1987), p. 242. x2 = xy.x * xy.x; // pi^2 * X^2 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; // pi^2 * Y^2 r = x2 + y2; // pi^2 * (X^2+Y^2) r2 = r * r; // pi^4 * (X^2+Y^2)^2 c1 = -M_PI * ay * (r + PISQ); // pi^4 * c1 (29-11) // pi^4 * c3 (29-13) c3 = r2 + M_TWOPI * (ay * r + M_PI * (y2 + M_PI * (ay + M_HALFPI))); c2 = c1 + PISQ * (r - 3. * y2); // pi^4 * c2 (29-12) c0 = M_PI * ay; // pi^2 * Y c2 /= c3; // c2/c3 al = c1 / c3 - THIRD * c2 * c2; // a1 (29-15) m = 2. * sqrt(-THIRD * al); // m1 (29-16) d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3; // d (29-14) const double al_mul_m = al * m; // a1*m1 if (fabs(al_mul_m) < 1e-16) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lp; } d = 3. * d / al_mul_m; // cos(3*theta1) (29-17) t = fabs(d); if ((t - TOL) <= 1.) { d = t > 1. ? (d > 0. ? 0. : M_PI) : acos(d); // 3*theta1 (29-17) if (r > PISQ) { // This code path is triggered for coordinates generated in the // forward path when |long|>180deg and +over d = M_TWOPI - d; } // (29-18) but change pi/3 to 4*pi/3 to flip sign of cos 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 { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return lp; } return lp; } PJ *PJ_PROJECTION(vandg) { P->es = 0.; P->inv = vandg_s_inverse; P->fwd = vandg_s_forward; return P; } #undef TOL #undef THIRD #undef C2_27 #undef PI4_3 #undef PISQ #undef TPISQ #undef HPISQ proj-9.6.0/src/projections/vandg2.cpp000664 001754 001755 00000003672 14764566077 017444 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" namespace { // anonymous namespace struct pj_vandg2 { int vdg3; }; } // anonymous namespace 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 PJ_XY vandg2_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; struct pj_vandg2 *Q = static_cast(P->opaque); double x1, at, bt, ct; bt = fabs(M_TWO_D_PI * lp.phi); ct = 1. - bt * bt; if (ct < 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; } PJ *PJ_PROJECTION(vandg2) { struct pj_vandg2 *Q = static_cast(calloc(1, sizeof(struct pj_vandg2))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->vdg3 = 0; P->fwd = vandg2_s_forward; return P; } PJ *PJ_PROJECTION(vandg3) { struct pj_vandg2 *Q = static_cast(calloc(1, sizeof(struct pj_vandg2))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; Q->vdg3 = 1; P->es = 0.; P->fwd = vandg2_s_forward; return P; } #undef TOL proj-9.6.0/src/projections/vandg4.cpp000664 001754 001755 00000002663 14764566077 017445 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv"; #define TOL 1e-10 static PJ_XY vandg4_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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; } PJ *PJ_PROJECTION(vandg4) { P->es = 0.; P->fwd = vandg4_s_forward; return P; } proj-9.6.0/src/projections/wag2.cpp000664 001754 001755 00000001510 14764566077 017110 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" 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 PJ_XY wag2_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_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 PJ_LP wag2_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_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); } PJ *PJ_PROJECTION(wag2) { P->es = 0.; P->inv = wag2_s_inverse; P->fwd = wag2_s_forward; return P; } #undef C_x #undef C_y #undef C_p1 #undef C_p2 proj-9.6.0/src/projections/wag3.cpp000664 001754 001755 00000002363 14764566077 017120 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl, Sph\n\tlat_ts="; #define TWOTHIRD 0.6666666666666666666667 namespace { // anonymous namespace struct pj_wag3 { double C_x; }; } // anonymous namespace static PJ_XY wag3_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; xy.x = static_cast(P->opaque)->C_x * lp.lam * cos(TWOTHIRD * lp.phi); xy.y = lp.phi; return xy; } static PJ_LP wag3_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = xy.y; lp.lam = xy.x / (static_cast(P->opaque)->C_x * cos(TWOTHIRD * lp.phi)); return lp; } PJ *PJ_PROJECTION(wag3) { double ts; struct pj_wag3 *Q = static_cast(calloc(1, sizeof(struct pj_wag3))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; ts = pj_param(P->ctx, P->params, "rlat_ts").f; static_cast(P->opaque)->C_x = cos(ts) / cos(2. * ts / 3.); P->es = 0.; P->inv = wag3_s_inverse; P->fwd = wag3_s_forward; return P; } #undef TWOTHIRD proj-9.6.0/src/projections/wag7.cpp000664 001754 001755 00000001262 14764566077 017121 0ustar00e012349e012349000000 000000 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv"; static PJ_XY wag7_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; (void)P; /* Shut up compiler warnings about unused P */ xy.y = 0.90630778703664996 * sin(lp.phi); const double theta = asin(xy.y); const double ct = cos(theta); lp.lam /= 3.; xy.x = 2.66723 * ct * sin(lp.lam); const double D = 1 / (sqrt(0.5 * (1 + ct * cos(lp.lam)))); xy.y *= 1.24104 * D; xy.x *= D; return (xy); } PJ *PJ_PROJECTION(wag7) { P->fwd = wag7_s_forward; P->inv = nullptr; P->es = 0.; return P; } proj-9.6.0/src/projections/wink1.cpp000664 001754 001755 00000002307 14764566077 017306 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl, Sph\n\tlat_ts="; namespace { // anonymous namespace struct pj_wink1_data { double cosphi1; }; } // anonymous namespace static PJ_XY wink1_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; xy.x = .5 * lp.lam * (static_cast(P->opaque)->cosphi1 + cos(lp.phi)); xy.y = lp.phi; return (xy); } static PJ_LP wink1_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */ PJ_LP lp = {0.0, 0.0}; lp.phi = xy.y; lp.lam = 2. * xy.x / (static_cast(P->opaque)->cosphi1 + cos(lp.phi)); return (lp); } PJ *PJ_PROJECTION(wink1) { struct pj_wink1_data *Q = static_cast( calloc(1, sizeof(struct pj_wink1_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; static_cast(P->opaque)->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_ts").f); P->es = 0.; P->inv = wink1_s_inverse; P->fwd = wink1_s_forward; return P; } proj-9.6.0/src/projections/wink2.cpp000664 001754 001755 00000003227 14764566077 017311 0ustar00e012349e012349000000 000000 #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl, Sph\n\tlat_1="; namespace { // anonymous namespace struct pj_wink2_data { double cosphi1; }; } // anonymous namespace #define MAX_ITER 10 #define LOOP_TOL 1e-7 static PJ_XY wink2_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */ PJ_XY xy = {0.0, 0.0}; int i; xy.y = lp.phi * M_TWO_D_PI; const double k = M_PI * sin(lp.phi); lp.phi *= 1.8; for (i = MAX_ITER; i; --i) { const double V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); lp.phi -= V; 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) + static_cast(P->opaque)->cosphi1); xy.y = M_FORTPI * (sin(lp.phi) + xy.y); return xy; } static PJ_LP wink2_s_inverse(PJ_XY xy, PJ *P) { PJ_LP lpInit; lpInit.phi = xy.y; lpInit.lam = xy.x; constexpr double deltaXYTolerance = 1e-10; return pj_generic_inverse_2d(xy, P, lpInit, deltaXYTolerance); } PJ *PJ_PROJECTION(wink2) { struct pj_wink2_data *Q = static_cast( calloc(1, sizeof(struct pj_wink2_data))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; static_cast(P->opaque)->cosphi1 = cos(pj_param(P->ctx, P->params, "rlat_1").f); P->es = 0.; P->fwd = wink2_s_forward; P->inv = wink2_s_inverse; return P; } #undef MAX_ITER #undef LOOP_TOL proj-9.6.0/src/qsfn.cpp000664 001754 001755 00000001052 14764566077 014661 0ustar00e012349e012349000000 000000 /* determine small q */ #include "proj.h" #include "proj_internal.h" #include #define EPSILON 1.0e-7 double pj_qsfn(double sinphi, double e, double one_es) { double con, div1, div2; if (e >= EPSILON) { con = e * sinphi; div1 = 1.0 - con * con; div2 = 1.0 + con; /* avoid zero division, fail gracefully */ if (div1 == 0.0 || div2 == 0.0) return HUGE_VAL; return (one_es * (sinphi / div1 - (.5 / e) * log((1. - con) / div2))); } else return (sinphi + sinphi); } proj-9.6.0/src/quadtree.hpp000664 001754 001755 00000022256 14764566077 015542 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Implementation of quadtree building and searching functions. * Derived from shapelib, mapserver and GDAL implementations * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 1999-2008, Frank Warmerdam * Copyright (c) 2008-2020, 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. *****************************************************************************/ #ifndef QUADTREE_HPP #define QUADTREE_HPP #include "proj/util.hpp" #include #include //! @cond Doxygen_Suppress NS_PROJ_START namespace QuadTree { /* -------------------------------------------------------------------- */ /* If the following is 0.5, psNodes will be split in half. If it */ /* is 0.6 then each apSubNode will contain 60% of the parent */ /* psNode, with 20% representing overlap. This can be help to */ /* prevent small objects on a boundary from shifting too high */ /* up the hQuadTree. */ /* -------------------------------------------------------------------- */ constexpr double DEFAULT_SPLIT_RATIO = 0.55; /** Describe a rectangle */ struct RectObj { double minx = 0; /**< Minimum x */ double miny = 0; /**< Minimum y */ double maxx = 0; /**< Maximum x */ double maxy = 0; /**< Maximum y */ /* Returns whether this rectangle is contained by other */ inline bool isContainedBy(const RectObj &other) const { return minx >= other.minx && maxx <= other.maxx && miny >= other.miny && maxy <= other.maxy; } /* Returns whether this rectangles overlaps other */ inline bool overlaps(const RectObj &other) const { return minx <= other.maxx && maxx >= other.minx && miny <= other.maxy && maxy >= other.miny; } /* Returns whether this rectangles contains the specified point */ inline bool contains(double x, double y) const { return minx <= x && maxx >= x && miny <= y && maxy >= y; } /* Return whether this rectangles is different from other */ inline bool operator!=(const RectObj &other) const { return minx != other.minx || miny != other.miny || maxx != other.maxx || maxy != other.maxy; } }; /** Quadtree */ template class QuadTree { struct Node { RectObj rect{}; /* area covered by this psNode */ /* list of shapes stored at this node. */ std::vector> features{}; std::vector subnodes{}; explicit Node(const RectObj &rectIn) : rect(rectIn) {} }; Node root{}; unsigned nBucketCapacity = 8; double dfSplitRatio = DEFAULT_SPLIT_RATIO; public: /** Construct a new quadtree with the global bounds of all objects to be * inserted */ explicit QuadTree(const RectObj &globalBounds) : root(globalBounds) {} /** Add a new feature, with its bounds specified in featureBounds */ void insert(const Feature &feature, const RectObj &featureBounds) { insert(root, feature, featureBounds); } #ifdef UNUSED /** Retrieve all features whose bounds intersects aoiRect */ void search(const RectObj &aoiRect, std::vector> &features) const { search(root, aoiRect, features); } #endif /** Retrieve all features whose bounds contains (x,y) */ void search(double x, double y, std::vector &features) const { search(root, x, y, features); } private: void splitBounds(const RectObj &in, RectObj &out1, RectObj &out2) { // The output bounds will be very similar to the input bounds, // so just copy over to start. out1 = in; out2 = in; // Split in X direction. if ((in.maxx - in.minx) > (in.maxy - in.miny)) { const double range = in.maxx - in.minx; out1.maxx = in.minx + range * dfSplitRatio; out2.minx = in.maxx - range * dfSplitRatio; } // Otherwise split in Y direction. else { const double range = in.maxy - in.miny; out1.maxy = in.miny + range * dfSplitRatio; out2.miny = in.maxy - range * dfSplitRatio; } } void insert(Node &node, const Feature &feature, const RectObj &featureBounds) { if (node.subnodes.empty()) { // If we have reached the max bucket capacity, try to insert // in a subnode if possible. if (node.features.size() >= nBucketCapacity) { RectObj half1; RectObj half2; RectObj quad1; RectObj quad2; RectObj quad3; RectObj quad4; splitBounds(node.rect, half1, half2); splitBounds(half1, quad1, quad2); splitBounds(half2, quad3, quad4); if (node.rect != quad1 && node.rect != quad2 && node.rect != quad3 && node.rect != quad4 && (featureBounds.isContainedBy(quad1) || featureBounds.isContainedBy(quad2) || featureBounds.isContainedBy(quad3) || featureBounds.isContainedBy(quad4))) { node.subnodes.reserve(4); node.subnodes.emplace_back(Node(quad1)); node.subnodes.emplace_back(Node(quad2)); node.subnodes.emplace_back(Node(quad3)); node.subnodes.emplace_back(Node(quad4)); auto features = std::move(node.features); node.features.clear(); for (auto &pair : features) { insert(node, pair.first, pair.second); } /* recurse back on this psNode now that it has apSubNodes */ insert(node, feature, featureBounds); return; } } } else { // If we have sub nodes, then consider whether this object will // fit in them. for (auto &subnode : node.subnodes) { if (featureBounds.isContainedBy(subnode.rect)) { insert(subnode, feature, featureBounds); return; } } } // If none of that worked, just add it to this nodes list. node.features.push_back( std::pair(feature, featureBounds)); } #ifdef UNUSED void search(const Node &node, const RectObj &aoiRect, std::vector> &features) const { // Does this node overlap the area of interest at all? If not, // return without adding to the list at all. if (!node.rect.overlaps(aoiRect)) return; // Add the local features to the list. for (const auto &pair : node.features) { if (pair.second.overlaps(aoiRect)) { features.push_back( std::reference_wrapper(pair.first)); } } // Recurse to subnodes if they exist. for (const auto &subnode : node.subnodes) { search(subnode, aoiRect, features); } } #endif static void search(const Node &node, double x, double y, std::vector &features) { // Does this node overlap the area of interest at all? If not, // return without adding to the list at all. if (!node.rect.contains(x, y)) return; // Add the local features to the list. for (const auto &pair : node.features) { if (pair.second.contains(x, y)) { features.push_back(pair.first); } } // Recurse to subnodes if they exist. for (const auto &subnode : node.subnodes) { search(subnode, x, y, features); } } }; } // namespace QuadTree NS_PROJ_END //! @endcond #endif // QUADTREE_HPP proj-9.6.0/src/release.cpp000664 001754 001755 00000000610 14764566077 015331 0ustar00e012349e012349000000 000000 /* <<< Release Notice for library >>> */ #include "proj.h" #include "proj_internal.h" #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) char const pj_release[] = "Rel. " STR(PROJ_VERSION_MAJOR) "." STR( PROJ_VERSION_MINOR) "." STR(PROJ_VERSION_PATCH) ", " "March 15th, 2025"; const char *pj_get_release() { return pj_release; } proj-9.6.0/src/rtodms.cpp000664 001754 001755 00000005056 14764566077 015232 0ustar00e012349e012349000000 000000 /* Convert radian argument to DMS ascii format */ #include #include #include #include #include "proj.h" #include "proj_internal.h" /* ** 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)snprintf(format, sizeof(format), "%%dd%%d'%%.%df\"%%c", fract); else (void)snprintf(format, sizeof(format), "%%dd%%02d'%%0%d.%df\"%%c", fract + 2 + (fract ? 1 : 0), fract); dolong = con_w; } } char *rtodms(char *s, size_t sizeof_s, double r, int pos, int neg) { int deg, min, sign; char *ss = s; double sec; size_t sizeof_ss = sizeof_s; if (r < 0) { r = -r; if (!pos) { if (sizeof_s == 1) { *s = 0; return s; } sizeof_ss--; *ss++ = '-'; sign = 0; } else sign = neg; } else sign = pos; r = floor(r * CONV + .5); sec = fmod(r / RES, 60.); r = floor(r / RES60); min = (int)fmod(r, 60.); r = floor(r / 60.); deg = (int)r; if (dolong) (void)snprintf(ss, sizeof_ss, format, deg, min, sec, sign); else if (sec != 0.0) { char *p, *q; /* double prime + pos/neg suffix (if included) + NUL */ size_t suffix_len = sign ? 3 : 2; (void)snprintf(ss, sizeof_ss, format, deg, min, sec, sign); /* Replace potential decimal comma by decimal point for non C locale */ for (p = ss; *p != '\0'; ++p) { if (*p == ',') { *p = '.'; break; } } if (suffix_len > strlen(ss)) return s; 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)snprintf(ss, sizeof_ss, "%dd%d'%c", deg, min, sign); else (void)snprintf(ss, sizeof_ss, "%dd%c", deg, sign); return s; } proj-9.6.0/src/sqlite3_utils.cpp000664 001754 001755 00000023150 14764566077 016521 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: SQLite3 related utilities * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2019, 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. *****************************************************************************/ #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #endif #include "sqlite3_utils.hpp" #ifdef __GNUC__ #pragma GCC diagnostic pop #endif #ifdef EMBED_RESOURCE_FILES #include "memvfs.h" #endif #include #include #include // std::ostringstream NS_PROJ_START // --------------------------------------------------------------------------- pj_sqlite3_vfs::~pj_sqlite3_vfs() = default; // --------------------------------------------------------------------------- SQLite3VFS::SQLite3VFS(pj_sqlite3_vfs *vfs) : vfs_(vfs) {} // --------------------------------------------------------------------------- SQLite3VFS::~SQLite3VFS() { if (vfs_) { sqlite3_vfs_unregister(&(vfs_->base)); delete vfs_; } } // --------------------------------------------------------------------------- const char *SQLite3VFS::name() const { return vfs_->namePtr.c_str(); } // --------------------------------------------------------------------------- typedef int (*ClosePtr)(sqlite3_file *); // --------------------------------------------------------------------------- static int VFSClose(sqlite3_file *file) { sqlite3_vfs *defaultVFS = sqlite3_vfs_find(nullptr); assert(defaultVFS); ClosePtr defaultClosePtr; std::memcpy(&defaultClosePtr, reinterpret_cast(file) + defaultVFS->szOsFile, sizeof(ClosePtr)); void *methods = const_cast(file->pMethods); int ret = defaultClosePtr(file); std::free(methods); return ret; } // --------------------------------------------------------------------------- static int VSFNoOpLockUnlockSync(sqlite3_file *, int) { return SQLITE_OK; } // --------------------------------------------------------------------------- namespace { struct pj_sqlite3_customvfs_appdata { sqlite3_vfs *defaultVFS = nullptr; bool fakeSync = false; bool fakeLock = false; }; struct pj_sqlite3_customvfs : public pj_sqlite3_vfs { ~pj_sqlite3_customvfs() override { delete static_cast(base.pAppData); base.pAppData = nullptr; } }; } // namespace static int VFSCustomOpen(sqlite3_vfs *vfs, const char *name, sqlite3_file *file, int flags, int *outFlags) { pj_sqlite3_customvfs_appdata *appdata = static_cast(vfs->pAppData); sqlite3_vfs *defaultVFS = appdata->defaultVFS; int ret = defaultVFS->xOpen(defaultVFS, name, file, flags, outFlags); if (ret == SQLITE_OK) { ClosePtr defaultClosePtr = file->pMethods->xClose; assert(defaultClosePtr); sqlite3_io_methods *methods = static_cast( std::malloc(sizeof(sqlite3_io_methods))); if (!methods) { file->pMethods->xClose(file); return SQLITE_NOMEM; } memcpy(methods, file->pMethods, sizeof(sqlite3_io_methods)); methods->xClose = VFSClose; if (appdata->fakeSync) { // Disable xSync because it can be significantly slow and we don't // need // that level of data integrity guarantee for the cache. methods->xSync = VSFNoOpLockUnlockSync; } if (appdata->fakeLock) { methods->xLock = VSFNoOpLockUnlockSync; methods->xUnlock = VSFNoOpLockUnlockSync; } file->pMethods = methods; // Save original xClose pointer at end of file structure std::memcpy(reinterpret_cast(file) + defaultVFS->szOsFile, &defaultClosePtr, sizeof(ClosePtr)); } return ret; } // --------------------------------------------------------------------------- static int VFSCustomAccess(sqlite3_vfs *vfs, const char *zName, int flags, int *pResOut) { sqlite3_vfs *defaultVFS = static_cast(vfs->pAppData); // Do not bother stat'ing for journal or wal files if (std::strstr(zName, "-journal") || std::strstr(zName, "-wal")) { *pResOut = false; return SQLITE_OK; } return defaultVFS->xAccess(defaultVFS, zName, flags, pResOut); } // --------------------------------------------------------------------------- // SQLite3 logging infrastructure static void projSqlite3LogCallback(void *, int iErrCode, const char *zMsg) { fprintf(stderr, "SQLite3 message: (code %d) %s\n", iErrCode, zMsg); } namespace { struct InstallSqliteLogger { InstallSqliteLogger() { if (getenv("PROJ_LOG_SQLITE3") != nullptr) { sqlite3_config(SQLITE_CONFIG_LOG, projSqlite3LogCallback, nullptr); } } static InstallSqliteLogger &GetSingleton() { static InstallSqliteLogger installSqliteLogger; return installSqliteLogger; } }; } // namespace // --------------------------------------------------------------------------- std::unique_ptr SQLite3VFS::create(bool fakeSync, bool fakeLock, bool skipStatJournalAndWAL) { // Install SQLite3 logger if PROJ_LOG_SQLITE3 env var is defined InstallSqliteLogger::GetSingleton(); // Call to sqlite3_initialize() is normally not needed, except for // people building SQLite3 with -DSQLITE_OMIT_AUTOINIT sqlite3_initialize(); sqlite3_vfs *defaultVFS = sqlite3_vfs_find(nullptr); assert(defaultVFS); auto vfs = new pj_sqlite3_customvfs(); auto vfsUnique = std::unique_ptr(new SQLite3VFS(vfs)); std::ostringstream buffer; buffer << vfs; vfs->namePtr = buffer.str(); vfs->base.iVersion = 1; vfs->base.szOsFile = defaultVFS->szOsFile + sizeof(ClosePtr); vfs->base.mxPathname = defaultVFS->mxPathname; vfs->base.zName = vfs->namePtr.c_str(); pj_sqlite3_customvfs_appdata *appdata = new pj_sqlite3_customvfs_appdata; appdata->fakeSync = fakeSync; appdata->fakeLock = fakeLock; appdata->defaultVFS = defaultVFS; vfs->base.pAppData = appdata; vfs->base.xOpen = VFSCustomOpen; vfs->base.xDelete = defaultVFS->xDelete; vfs->base.xAccess = skipStatJournalAndWAL ? VFSCustomAccess : defaultVFS->xAccess; vfs->base.xFullPathname = defaultVFS->xFullPathname; vfs->base.xDlOpen = defaultVFS->xDlOpen; vfs->base.xDlError = defaultVFS->xDlError; vfs->base.xDlSym = defaultVFS->xDlSym; vfs->base.xDlClose = defaultVFS->xDlClose; vfs->base.xRandomness = defaultVFS->xRandomness; vfs->base.xSleep = defaultVFS->xSleep; vfs->base.xCurrentTime = defaultVFS->xCurrentTime; vfs->base.xGetLastError = defaultVFS->xGetLastError; vfs->base.xCurrentTimeInt64 = defaultVFS->xCurrentTimeInt64; if (sqlite3_vfs_register(&(vfs->base), false) == SQLITE_OK) { return vfsUnique; } delete vfsUnique->vfs_; vfsUnique->vfs_ = nullptr; return nullptr; } // --------------------------------------------------------------------------- #ifdef EMBED_RESOURCE_FILES struct pj_sqlite3_memvfs : public pj_sqlite3_vfs { ~pj_sqlite3_memvfs() override { pj_sqlite3_memvfs_deallocate_user_data(&base); } }; /* static */ std::unique_ptr SQLite3VFS::createMem(const void *membuffer, size_t bufferSize) { // Install SQLite3 logger if PROJ_LOG_SQLITE3 env var is defined InstallSqliteLogger::GetSingleton(); // Call to sqlite3_initialize() is normally not needed, except for // people building SQLite3 with -DSQLITE_OMIT_AUTOINIT sqlite3_initialize(); auto vfs = new pj_sqlite3_memvfs(); auto vfsUnique = std::unique_ptr(new SQLite3VFS(vfs)); std::ostringstream buffer; buffer << vfs; vfs->namePtr = buffer.str(); if (pj_sqlite3_memvfs_init(&(vfs->base), vfs->namePtr.c_str(), membuffer, bufferSize) == SQLITE_OK) { return vfsUnique; } delete vfsUnique->vfs_; vfsUnique->vfs_ = nullptr; return nullptr; } #endif // --------------------------------------------------------------------------- SQLiteStatement::SQLiteStatement(sqlite3_stmt *hStmtIn) : hStmt(hStmtIn) {} // --------------------------------------------------------------------------- NS_PROJ_END proj-9.6.0/src/sqlite3_utils.hpp000664 001754 001755 00000010335 14764566077 016527 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: SQLite3 related utilities * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2019, 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. *****************************************************************************/ #ifndef SQLITE3_HPP_INCLUDED #define SQLITE3_HPP_INCLUDED #include #include #include "proj.h" #include "proj/util.hpp" NS_PROJ_START //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- struct pj_sqlite3_vfs { sqlite3_vfs base{}; std::string namePtr{}; virtual ~pj_sqlite3_vfs(); }; // --------------------------------------------------------------------------- class SQLite3VFS { pj_sqlite3_vfs *vfs_ = nullptr; explicit SQLite3VFS(pj_sqlite3_vfs *vfs); SQLite3VFS(const SQLite3VFS &) = delete; SQLite3VFS &operator=(const SQLite3VFS &) = delete; public: ~SQLite3VFS(); static std::unique_ptr create(bool fakeSync, bool fakeLock, bool skipStatJournalAndWAL); #ifdef EMBED_RESOURCE_FILES static std::unique_ptr createMem(const void *membuffer, size_t bufferSize); #endif const char *name() const; sqlite3_vfs *raw() { return &(vfs_->base); } }; // --------------------------------------------------------------------------- class SQLiteStatement { sqlite3_stmt *hStmt = nullptr; int iBindIdx = 1; int iResIdx = 0; SQLiteStatement(const SQLiteStatement &) = delete; SQLiteStatement &operator=(const SQLiteStatement &) = delete; public: explicit SQLiteStatement(sqlite3_stmt *hStmtIn); ~SQLiteStatement() { sqlite3_finalize(hStmt); } int execute() { return sqlite3_step(hStmt); } void bindNull() { sqlite3_bind_null(hStmt, iBindIdx); iBindIdx++; } void bindText(const char *txt) { sqlite3_bind_text(hStmt, iBindIdx, txt, -1, nullptr); iBindIdx++; } void bindInt64(sqlite3_int64 v) { sqlite3_bind_int64(hStmt, iBindIdx, v); iBindIdx++; } void bindBlob(const void *blob, size_t blob_size) { sqlite3_bind_blob(hStmt, iBindIdx, blob, static_cast(blob_size), nullptr); iBindIdx++; } const char *getText() { auto ret = sqlite3_column_text(hStmt, iResIdx); iResIdx++; return reinterpret_cast(ret); } sqlite3_int64 getInt64() { auto ret = sqlite3_column_int64(hStmt, iResIdx); iResIdx++; return ret; } const void *getBlob(int &size) { size = sqlite3_column_bytes(hStmt, iResIdx); auto ret = sqlite3_column_blob(hStmt, iResIdx); iResIdx++; return ret; } void reset() { sqlite3_reset(hStmt); iBindIdx = 1; iResIdx = 0; } void resetResIndex() { iResIdx = 0; } }; //! @endcond Doxygen_Suppress NS_PROJ_END #endif // SQLITE3_HPP_INCLUDED proj-9.6.0/src/strerrno.cpp000664 001754 001755 00000005372 14764566077 015601 0ustar00e012349e012349000000 000000 /* list of projection system errno values */ #include #include #include #include "proj.h" #include "proj_config.h" #include "proj_internal.h" const char *proj_errno_string(int err) { return proj_context_errno_string(pj_get_default_ctx(), err); } static const struct { int num; const char *str; } error_strings[] = { {PROJ_ERR_INVALID_OP_WRONG_SYNTAX, _("Invalid PROJ string syntax")}, {PROJ_ERR_INVALID_OP_MISSING_ARG, _("Missing argument")}, {PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE, _("Invalid value for an argument")}, {PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS, _("Mutually exclusive arguments")}, {PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID, _("File not found or invalid")}, {PROJ_ERR_COORD_TRANSFM_INVALID_COORD, _("Invalid coordinate")}, {PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN, _("Point outside of projection domain")}, {PROJ_ERR_COORD_TRANSFM_NO_OPERATION, _("No operation matching criteria found for coordinate")}, {PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID, _("Coordinate to transform falls outside grid")}, {PROJ_ERR_COORD_TRANSFM_GRID_AT_NODATA, _("Coordinate to transform falls into a grid cell that evaluates to " "nodata")}, {PROJ_ERR_COORD_TRANSFM_NO_CONVERGENCE, _("Iterative method fails to converge on coordinate to transform")}, {PROJ_ERR_COORD_TRANSFM_MISSING_TIME, _("Coordinate to transform lacks time")}, {PROJ_ERR_OTHER_API_MISUSE, _("API misuse")}, {PROJ_ERR_OTHER_NO_INVERSE_OP, _("No inverse operation")}, {PROJ_ERR_OTHER_NETWORK_ERROR, _("Network error when accessing a remote resource")}, }; const char *proj_context_errno_string(PJ_CONTEXT *ctx, int err) { if (ctx == nullptr) ctx = pj_get_default_ctx(); if (0 == err) return nullptr; const char *str = nullptr; for (const auto &num_str_pair : error_strings) { if (err == num_str_pair.num) { str = num_str_pair.str; break; } } if (str == nullptr && err > 0 && (err & PROJ_ERR_INVALID_OP) != 0) { str = _( "Unspecified error related to coordinate operation initialization"); } if (str == nullptr && err > 0 && (err & PROJ_ERR_COORD_TRANSFM) != 0) { str = _("Unspecified error related to coordinate transformation"); } if (str) { ctx->lastFullErrorMessage = str; } else { ctx->lastFullErrorMessage.resize(50); snprintf(&ctx->lastFullErrorMessage[0], ctx->lastFullErrorMessage.size(), _("Unknown error (code %d)"), err); ctx->lastFullErrorMessage.resize( strlen(ctx->lastFullErrorMessage.data())); } return ctx->lastFullErrorMessage.c_str(); } proj-9.6.0/src/strtod.cpp000664 001754 001755 00000013746 14764566077 015246 0ustar00e012349e012349000000 000000 /****************************************************************************** * * 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 #include #include #include #include "proj.h" #include "proj_config.h" #include "proj_internal.h" /************************************************************************/ /* 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 behavior is the * same as * * pj_strtod(nptr, nullptr); * * 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, nullptr); } /************************************************************************/ /* replace_point_by_locale_point() */ /************************************************************************/ static char *replace_point_by_locale_point(const char *pszNumber, char point) { #if !defined(HAVE_LOCALECONV) #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]; snprintf(szBuf, sizeof(szBuf), "%.1f", 1.0); byPoint = szBuf[1]; } if (point != byPoint) { const char *pszPoint = strchr(pszNumber, point); if (pszPoint) { char *pszNew = pj_strdup(pszNumber); if (!pszNew) return nullptr; pszNew[pszPoint - pszNumber] = byPoint; return pszNew; } } return nullptr; #else const 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 = pj_strdup(pszNumber); if (!pszNew) return nullptr; if (pszLocalePoint) pszNew[pszLocalePoint - pszNumber] = ' '; if (pszPoint) pszNew[pszPoint - pszNumber] = byPoint; return pszNew; } } } return nullptr; #endif } /************************************************************************/ /* 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. * * @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 (ex ',') and then use standard * strtod() */ /* on that buffer. */ /* -------------------------------------------------------------------- */ char *pszNumber = replace_point_by_locale_point(nptr, '.'); if (pszNumber) { char *pszNumberEnd; double dfValue = strtod(pszNumber, &pszNumberEnd); int nError = errno; if (endptr) { ptrdiff_t offset = pszNumberEnd - pszNumber; *endptr = const_cast(nptr + offset); } free(pszNumber); errno = nError; return dfValue; } else { return strtod(nptr, endptr); } } proj-9.6.0/src/tests/000775 001754 001755 00000000000 14764566152 014344 5ustar00e012349e012349000000 000000 proj-9.6.0/src/tests/CMakeLists.txt000664 001754 001755 00000001054 14764566077 017112 0ustar00e012349e012349000000 000000 # Build PROJ test programs and run tests (only invoked if BUILD_TESTING) add_executable(geodtest geodtest.c) target_link_libraries(geodtest ${PROJ_LIBRARIES}) if(HAVE_LIBM) target_link_libraries(geodtest m) endif() add_executable(geodsigntest geodsigntest.c) # geodsigntest includes geodesic.c directly so it doesn't need to link # against the library. if(HAVE_LIBM) target_link_libraries(geodsigntest m) endif() # Do not install, instead run tests add_test(NAME geodesic-test COMMAND geodtest) add_test(NAME geodesic-signtest COMMAND geodsigntest) proj-9.6.0/src/tests/geodsigntest.c000664 001754 001755 00000030146 14764566077 017221 0ustar00e012349e012349000000 000000 /** * \file geodsigntest.c * \brief Test treatment of +/-0 and +/-180 * * Copyright (c) Charles Karney (2022) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include #include #include /* Include the source file for the library directly so we can access the * internal (static) functions. */ #include "geodesic.c" /* Define function names with the "geod_" prefix. */ #define geod_Init Init #define geod_sum sumx #define geod_AngNormalize AngNormalize #define geod_AngDiff AngDiff #define geod_AngRound AngRound #define geod_sincosd sincosdx #define geod_atan2d atan2dx typedef double T; #if !defined(__cplusplus) #define nullptr 0 #endif #if !defined(OLD_BUGGY_REMQUO) /* * glibc prior to version 2.22 had a bug in remquo. This was reported in 2014 * and fixed in 2015. See * https://sourceware.org/bugzilla/show_bug.cgi?id=17569 * * The bug causes some of the tests here to fail. The failures aren't terribly * serious (just a loss of accuracy). If you're still using the buggy glibc, * then define OLD_BUGGY_REMQUO to be 1. */ #define OLD_BUGGY_REMQUO 0 #endif static const T wgs84_a = 6378137, wgs84_f = 1/298.257223563; /* WGS84 */ static int equiv(T x, T y) { return ( (isnan(x) && isnan(y)) || (x == y && signbit(x) == signbit(y)) ) ? 0 : 1; } static int checkEquals(T x, T y, T d) { if (fabs(x - y) <= d) return 0; printf("checkEquals fails: %.7g != %.7g +/- %.7g\n", x, y, d); return 1; } /* use "do { } while (false)" idiom so it can be punctuated like a * statement. */ #define check(expr, r) do { \ T s = (T)(r), t = expr; \ if (equiv(s, t)) { \ printf("Line %d : %s != %s (%g)\n", \ __LINE__, #expr, #r, t); \ ++n; \ } \ } while (0) #define checksincosd(x, s, c) do { \ T sx, cx; \ geod_sincosd(x, &sx, &cx); \ if (equiv(s, sx)) { \ printf("Line %d: sin(%g) != %g (%g)\n", \ __LINE__, x, s, sx); \ ++n; \ } \ if (equiv(c, cx)) { \ printf("Line %d: cos(%g) != %g (%g)\n", \ __LINE__, x, c, cx); \ ++n; \ } \ } while (0) int main() { T inf = INFINITY, nan = NAN, eps = DBL_EPSILON, e; int n = 0; geod_Init(); check( geod_AngRound(-eps/32), -eps/32); check( geod_AngRound(-eps/64), -0.0 ); check( geod_AngRound(- 0.0 ), -0.0 ); check( geod_AngRound( 0.0 ), +0.0 ); check( geod_AngRound( eps/64), +0.0 ); check( geod_AngRound( eps/32), +eps/32); check( geod_AngRound((1-2*eps)/64), (1-2*eps)/64); check( geod_AngRound((1-eps )/64), 1.0 /64); check( geod_AngRound((1-eps/2)/64), 1.0 /64); check( geod_AngRound((1-eps/4)/64), 1.0 /64); check( geod_AngRound( 1.0 /64), 1.0 /64); check( geod_AngRound((1+eps/2)/64), 1.0 /64); check( geod_AngRound((1+eps )/64), 1.0 /64); check( geod_AngRound((1+2*eps)/64), (1+2*eps)/64); check( geod_AngRound((1-eps )/32), (1-eps )/32); check( geod_AngRound((1-eps/2)/32), 1.0 /32); check( geod_AngRound((1-eps/4)/32), 1.0 /32); check( geod_AngRound( 1.0 /32), 1.0 /32); check( geod_AngRound((1+eps/2)/32), 1.0 /32); check( geod_AngRound((1+eps )/32), (1+eps )/32); check( geod_AngRound((1-eps )/16), (1-eps )/16); check( geod_AngRound((1-eps/2)/16), (1-eps/2)/16); check( geod_AngRound((1-eps/4)/16), 1.0 /16); check( geod_AngRound( 1.0 /16), 1.0 /16); check( geod_AngRound((1+eps/4)/16), 1.0 /16); check( geod_AngRound((1+eps/2)/16), 1.0 /16); check( geod_AngRound((1+eps )/16), (1+eps )/16); check( geod_AngRound((1-eps )/ 8), (1-eps )/ 8); check( geod_AngRound((1-eps/2)/ 8), (1-eps/2)/ 8); check( geod_AngRound((1-eps/4)/ 8), 1.0 / 8); check( geod_AngRound((1+eps/2)/ 8), 1.0 / 8); check( geod_AngRound((1+eps )/ 8), (1+eps )/ 8); check( geod_AngRound( 1-eps ), 1-eps ); check( geod_AngRound( 1-eps/2 ), 1-eps/2 ); check( geod_AngRound( 1-eps/4 ), 1 ); check( geod_AngRound( 1.0 ), 1 ); check( geod_AngRound( 1+eps/4 ), 1 ); check( geod_AngRound( 1+eps/2 ), 1 ); check( geod_AngRound( 1+eps ), 1+ eps ); check( geod_AngRound( 90.0-64*eps), 90-64*eps ); check( geod_AngRound( 90.0-32*eps), 90 ); check( geod_AngRound( 90.0 ), 90 ); checksincosd(- inf, nan, nan); #if !OLD_BUGGY_REMQUO checksincosd(-810.0, -1.0, +0.0); #endif checksincosd(-720.0, -0.0, +1.0); checksincosd(-630.0, +1.0, +0.0); checksincosd(-540.0, -0.0, -1.0); checksincosd(-450.0, -1.0, +0.0); checksincosd(-360.0, -0.0, +1.0); checksincosd(-270.0, +1.0, +0.0); checksincosd(-180.0, -0.0, -1.0); checksincosd(- 90.0, -1.0, +0.0); checksincosd(- 0.0, -0.0, +1.0); checksincosd(+ 0.0, +0.0, +1.0); checksincosd(+ 90.0, +1.0, +0.0); checksincosd(+180.0, +0.0, -1.0); checksincosd(+270.0, -1.0, +0.0); checksincosd(+360.0, +0.0, +1.0); checksincosd(+450.0, +1.0, +0.0); checksincosd(+540.0, +0.0, -1.0); checksincosd(+630.0, -1.0, +0.0); checksincosd(+720.0, +0.0, +1.0); #if !OLD_BUGGY_REMQUO checksincosd(+810.0, +1.0, +0.0); #endif checksincosd(+ inf, nan, nan); checksincosd( nan, nan, nan); #if !OLD_BUGGY_REMQUO { T s1, c1, s2, c2, s3, c3; geod_sincosd( 9.0, &s1, &c1); geod_sincosd( 81.0, &s2, &c2); geod_sincosd(-123456789.0, &s3, &c3); if ( equiv(s1, c2) + equiv(s1, s3) + equiv(c1, s2) + equiv(c1, -c3) ) { printf("Line %d : sincos accuracy fail\n", __LINE__); ++n; } } #endif check( geod_atan2d(+0.0 , -0.0 ), +180 ); check( geod_atan2d(-0.0 , -0.0 ), -180 ); check( geod_atan2d(+0.0 , +0.0 ), +0.0 ); check( geod_atan2d(-0.0 , +0.0 ), -0.0 ); check( geod_atan2d(+0.0 , -1.0 ), +180 ); check( geod_atan2d(-0.0 , -1.0 ), -180 ); check( geod_atan2d(+0.0 , +1.0 ), +0.0 ); check( geod_atan2d(-0.0 , +1.0 ), -0.0 ); check( geod_atan2d(-1.0 , +0.0 ), -90 ); check( geod_atan2d(-1.0 , -0.0 ), -90 ); check( geod_atan2d(+1.0 , +0.0 ), +90 ); check( geod_atan2d(+1.0 , -0.0 ), +90 ); check( geod_atan2d(+1.0 , -inf), +180 ); check( geod_atan2d(-1.0 , -inf), -180 ); check( geod_atan2d(+1.0 , +inf), +0.0 ); check( geod_atan2d(-1.0 , +inf), -0.0 ); check( geod_atan2d( +inf, +1.0 ), +90 ); check( geod_atan2d( +inf, -1.0 ), +90 ); check( geod_atan2d( -inf, +1.0 ), -90 ); check( geod_atan2d( -inf, -1.0 ), -90 ); check( geod_atan2d( +inf, -inf), +135 ); check( geod_atan2d( -inf, -inf), -135 ); check( geod_atan2d( +inf, +inf), +45 ); check( geod_atan2d( -inf, +inf), -45 ); check( geod_atan2d( nan, +1.0 ), nan ); check( geod_atan2d(+1.0 , nan), nan ); { T s = 7e-16; if ( equiv( geod_atan2d(s, -1.0), 180 - geod_atan2d(s, 1.0) ) ) { printf("Line %d : atan2d accuracy fail\n", __LINE__); ++n; } } check( geod_sum(+9.0, -9.0, &e), +0.0 ); check( geod_sum(-9.0, +9.0, &e), +0.0 ); check( geod_sum(-0.0, +0.0, &e), +0.0 ); check( geod_sum(+0.0, -0.0, &e), +0.0 ); check( geod_sum(-0.0, -0.0, &e), -0.0 ); check( geod_sum(+0.0, +0.0, &e), +0.0 ); check( geod_AngNormalize(-900.0), -180 ); check( geod_AngNormalize(-720.0), -0.0 ); check( geod_AngNormalize(-540.0), -180 ); check( geod_AngNormalize(-360.0), -0.0 ); check( geod_AngNormalize(-180.0), -180 ); check( geod_AngNormalize( -0.0), -0.0 ); check( geod_AngNormalize( +0.0), +0.0 ); check( geod_AngNormalize( 180.0), +180 ); check( geod_AngNormalize( 360.0), +0.0 ); check( geod_AngNormalize( 540.0), +180 ); check( geod_AngNormalize( 720.0), +0.0 ); check( geod_AngNormalize( 900.0), +180 ); check( geod_AngDiff(+ 0.0, + 0.0, &e), +0.0 ); check( geod_AngDiff(+ 0.0, - 0.0, &e), -0.0 ); check( geod_AngDiff(- 0.0, + 0.0, &e), +0.0 ); check( geod_AngDiff(- 0.0, - 0.0, &e), +0.0 ); check( geod_AngDiff(+ 5.0, +365.0, &e), +0.0 ); check( geod_AngDiff(+365.0, + 5.0, &e), -0.0 ); check( geod_AngDiff(+ 5.0, +185.0, &e), +180.0 ); check( geod_AngDiff(+185.0, + 5.0, &e), -180.0 ); check( geod_AngDiff( +eps , +180.0, &e), +180.0 ); check( geod_AngDiff( -eps , +180.0, &e), -180.0 ); check( geod_AngDiff( +eps , -180.0, &e), +180.0 ); check( geod_AngDiff( -eps , -180.0, &e), -180.0 ); { T x = 138 + 128 * eps, y = -164; if ( equiv( geod_AngDiff(x, y, &e), 58 - 128 * eps ) ) { printf("Line %d : AngDiff accuracy fail\n", __LINE__); ++n; } } { /* azimuth of geodesic line with points on equator determined by signs of * latitude * lat1 lat2 azi1/2 */ T C[2][3] = { { +0.0, -0.0, 180 }, { -0.0, +0.0, 0 } }; struct geod_geodesic g; geod_init(&g, wgs84_a, wgs84_f); T azi1, azi2; int i = 0; for (int k = 0; k < 2; ++k) { geod_inverse(&g, C[k][0], 0.0, C[k][1], 0.0, nullptr, &azi1, &azi2); if ( equiv(azi1, C[k][2]) + equiv(azi2, C[k][2]) ) ++i; } if (i) { printf("Line %d: inverse coincident points on equator fail\n", __LINE__); ++n; } } { /* Does the nearly antipodal equatorial solution go north or south? * lat1 lat2 azi1 azi2 */ T C[2][4] = { { +0.0, +0.0, 56, 124}, { -0.0, -0.0, 124, 56} }; struct geod_geodesic g; geod_init(&g, wgs84_a, wgs84_f); T azi1, azi2; int i = 0; for (int k = 0; k < 2; ++k) { geod_inverse(&g, C[k][0], 0.0, C[k][1], 179.5, nullptr, &azi1, &azi2); i += checkEquals(azi1, C[k][2], 1) + checkEquals(azi2, C[k][3], 1); } if (i) { printf("Line %d: inverse nearly antipodal points on equator fail\n", __LINE__);; ++n; } } { /* How does the exact antipodal equatorial path go N/S + E/W * lat1 lat2 lon2 azi1 azi2 */ T C[4][5] = { { +0.0, +0.0, +180, +0.0, +180}, { -0.0, -0.0, +180, +180, +0.0}, { +0.0, +0.0, -180, -0.0, -180}, { -0.0, -0.0, -180, -180, -0.0} }; struct geod_geodesic g; geod_init(&g, wgs84_a, wgs84_f); T azi1, azi2; int i = 0; for (int k = 0; k < 4; ++k) { geod_inverse(&g, C[k][0], 0.0, C[k][1], C[k][2], nullptr, &azi1, &azi2); if ( equiv(azi1, C[k][3]) + equiv(azi2, C[k][4]) ) ++i; } if (i) { printf("Line %d: inverse antipodal points on equator fail\n", __LINE__); ++n; } } { /* Antipodal points on the equator with prolate ellipsoid * lon2 azi1/2 */ T C[2][2] = { { +180, +90 }, { -180, -90 } }; struct geod_geodesic g; geod_init(&g, 6.4e6, -1/300.0); T azi1, azi2; int i = 0; for (int k = 0; k < 2; ++k) { geod_inverse(&g, 0.0, 0.0, 0.0, C[k][0], nullptr, &azi1, &azi2); if ( equiv(azi1, C[k][1]) + equiv(azi2, C[k][1]) ) ++i; } if (i) { printf("Line %d: inverse antipodal points on equator, prolate, fail\n", __LINE__); ++n; } } { /* azimuths = +/-0 and +/-180 for the direct problem * azi1, lon2, azi2 */ T C[4][3] = { { +0.0, +180, +180 }, { -0.0, -180, -180 }, { +180 , +180, +0.0 }, { -180 , -180, -0.0 } }; struct geod_geodesic g; geod_init(&g, wgs84_a, wgs84_f); T lon2, azi2; int i = 0; for (int k = 0; k < 4; ++k) { geod_gendirect(&g, 0.0, 0.0, C[k][0], GEOD_LONG_UNROLL, 15e6, nullptr, &lon2, &azi2, nullptr, nullptr, nullptr, nullptr, nullptr); if ( equiv(lon2, C[k][1]) + equiv(azi2, C[k][2]) ) ++i; } if (i) { printf("Line %d: direct azi1 = +/-0 +/-180, fail\n", __LINE__); ++n; } } if (n) { printf("%d %s%s\n", n, "failure", (n > 1 ? "s" : "")); return 1; } } proj-9.6.0/src/tests/geodtest.c000664 001754 001755 00000132610 14764566077 016337 0ustar00e012349e012349000000 000000 /** * \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-2022) and licensed * under the MIT/X11 License. For more information, see * https://geographiclib.sourceforge.io/ **********************************************************************/ #include "geodesic.h" #include #include #if defined(_MSC_VER) /* Squelch warnings about assignment within conditional expression */ # pragma warning (disable: 4706) #endif #if !defined(__cplusplus) #define nullptr 0 #endif static const double wgs84_a = 6378137, wgs84_f = 1/298.257223563; /* WGS84 */ static int checkEquals(double x, double y, double d) { if (fabs(x - y) <= d) return 0; printf("checkEquals fails: %.7g != %.7g +/- %.7g\n", x, y, d); return 1; } static int checkNaN(double x) { /* cppcheck-suppress duplicateExpression */ if (isnan(x)) return 0; printf("checkNaN fails: %.7g\n", x); return 1; } static const int ncases = 20; static const 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}}; static 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 += checkEquals(azi1, azi1a, 1e-13); result += checkEquals(azi2, azi2a, 1e-13); result += checkEquals(s12, s12a, 1e-8); result += checkEquals(a12, a12a, 1e-13); result += checkEquals(m12, m12a, 1e-8); result += checkEquals(M12, M12a, 1e-15); result += checkEquals(M21, M21a, 1e-15); result += checkEquals(S12, S12a, 0.1); } return result; } static int testdirect() { double lat1, lon1, azi1, lat2, lon2, azi2, s12, a12, m12, M12, M21, S12; double lat2a, lon2a, azi2a, s12a, 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, &s12a, &m12a, &M12a, &M21a, &S12a); result += checkEquals(lat2, lat2a, 1e-13); result += checkEquals(lon2, lon2a, 1e-13); result += checkEquals(azi2, azi2a, 1e-13); result += checkEquals(s12, s12a, 0); result += checkEquals(a12, a12a, 1e-13); result += checkEquals(m12, m12a, 1e-8); result += checkEquals(M12, M12a, 1e-15); result += checkEquals(M21, M21a, 1e-15); result += checkEquals(S12, S12a, 0.1); } return result; } static int testarcdirect() { double lat1, lon1, azi1, lat2, lon2, azi2, s12, a12, m12, M12, M21, S12; double lat2a, lon2a, azi2a, s12a, a12a, 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]; a12a = geod_gendirect(&g, lat1, lon1, azi1, flags, a12, &lat2a, &lon2a, &azi2a, &s12a, &m12a, &M12a, &M21a, &S12a); result += checkEquals(lat2, lat2a, 1e-13); result += checkEquals(lon2, lon2a, 1e-13); result += checkEquals(azi2, azi2a, 1e-13); result += checkEquals(s12, s12a, 1e-8); result += checkEquals(a12, a12a, 0); result += checkEquals(s12, s12a, 1e-8); result += checkEquals(m12, m12a, 1e-8); result += checkEquals(M12, M12a, 1e-15); result += checkEquals(M21, M21a, 1e-15); result += checkEquals(S12, S12a, 0.1); } return result; } static 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 += checkEquals(azi1, 53.47022, 0.5e-5); result += checkEquals(azi2, 111.59367, 0.5e-5); result += checkEquals(s12, 5853226, 0.5); return result; } static 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 += checkEquals(lat2, 49.01467, 0.5e-5); result += checkEquals(lon2, 2.56106, 0.5e-5); result += checkEquals(azi2, 111.62947, 0.5e-5); return result; } static 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 += checkEquals(azi1, 90.00078, 0.5e-5); result += checkEquals(azi2, 90.00078, 0.5e-5); result += checkEquals(s12, 20106193, 0.5); geod_inverse(&g, 0.1, 0, -0.1, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 90.00105, 0.5e-5); result += checkEquals(azi2, 90.00105, 0.5e-5); result += checkEquals(s12, 20106193, 0.5); return result; } static 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, nullptr, nullptr); result += checkEquals(s12, 0.072, 0.5e-3); return result; } static 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 += checkEquals(lat2, 90, 0.5e-5); if (lon2 < 0) { result += checkEquals(lon2, -150, 0.5e-5); result += checkEquals(fabs(azi2), 180, 0.5e-5); } else { result += checkEquals(lon2, 30, 0.5e-5); result += checkEquals(azi2, 0, 0.5e-5); } return result; } static 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, nullptr, nullptr); result += checkEquals(s12, 20003898.214, 0.5e-3); geod_inverse(&g, 89.262080389218, 0, -89.262080389218, 179.992207982775375662, &s12, nullptr, nullptr); result += checkEquals(s12, 20003925.854, 0.5e-3); geod_inverse(&g, 89.333123580033, 0, -89.333123580032997687, 179.99295812360148422, &s12, nullptr, nullptr); result += checkEquals(s12, 20003926.881, 0.5e-3); return result; } static 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, nullptr, nullptr); result += checkEquals(s12, 19993558.287, 0.5e-3); return result; } static 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, nullptr, nullptr); result += checkEquals(s12, 19991596.095, 0.5e-3); return result; } static 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, nullptr, nullptr); result += checkEquals(s12, 19989144.774, 0.5e-3); return result; } static 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 += checkEquals(azi1, 120.27, 1e-2); result += checkEquals(azi2, 105.15, 1e-2); result += checkEquals(s12, 266.7, 1e-1); return result; } static int GeodSolve14() { /* Check fix for inverse ignoring lon12 = nan */ double azi1, azi2, s12; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_inverse(&g, 0, 0, 1, nan("0"), &s12, &azi1, &azi2); result += checkNaN(azi1); result += checkNaN(azi2); result += checkNaN(s12); return result; } static 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, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &S12); result += checkEquals(S12, 23700, 0.5); return result; } static 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, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkEquals(lat2, -39, 1); result += checkEquals(lon2, -254, 1); result += checkEquals(azi2, -170, 1); geod_lineinit(&l, &g, 40, -75, -10, 0); geod_genposition(&l, flags, 2e7, &lat2, &lon2, &azi2, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkEquals(lat2, -39, 1); result += checkEquals(lon2, -254, 1); result += checkEquals(azi2, -170, 1); geod_direct(&g, 40, -75, -10, 2e7, &lat2, &lon2, &azi2); result += checkEquals(lat2, -39, 1); result += checkEquals(lon2, 105, 1); result += checkEquals(azi2, -170, 1); geod_position(&l, 2e7, &lat2, &lon2, &azi2); result += checkEquals(lat2, -39, 1); result += checkEquals(lon2, 105, 1); result += checkEquals(azi2, -170, 1); return result; } static 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, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &S12); result += checkEquals(S12, 49911046115.0, 0.5); return result; } static 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, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkEquals(a12, 48.55570690, 0.5e-8); return result; } static 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 += checkEquals(azi1, 90.00000, 0.5e-5); result += checkEquals(azi2, 90.00000, 0.5e-5); result += checkEquals(s12, 19926189, 0.5); geod_inverse(&g, 0, 0, 0, 179.5, &s12, &azi1, &azi2); result += checkEquals(azi1, 55.96650, 0.5e-5); result += checkEquals(azi2, 124.03350, 0.5e-5); result += checkEquals(s12, 19980862, 0.5); geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 0.00000, 0.5e-5); result += checkEquals(fabs(azi2), 180.00000, 0.5e-5); result += checkEquals(s12, 20003931, 0.5); geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 0.00000, 0.5e-5); result += checkEquals(fabs(azi2), 180.00000, 0.5e-5); result += checkEquals(s12, 19893357, 0.5); geod_init(&g, 6.4e6, 0); geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2); result += checkEquals(azi1, 90.00000, 0.5e-5); result += checkEquals(azi2, 90.00000, 0.5e-5); result += checkEquals(s12, 19994492, 0.5); geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 0.00000, 0.5e-5); result += checkEquals(fabs(azi2), 180.00000, 0.5e-5); result += checkEquals(s12, 20106193, 0.5); geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 0.00000, 0.5e-5); result += checkEquals(fabs(azi2), 180.00000, 0.5e-5); result += checkEquals(s12, 19994492, 0.5); geod_init(&g, 6.4e6, -1/300.0); geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2); result += checkEquals(azi1, 90.00000, 0.5e-5); result += checkEquals(azi2, 90.00000, 0.5e-5); result += checkEquals(s12, 19994492, 0.5); geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 90.00000, 0.5e-5); result += checkEquals(azi2, 90.00000, 0.5e-5); result += checkEquals(s12, 20106193, 0.5); geod_inverse(&g, 0, 0, 0.5, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 33.02493, 0.5e-5); result += checkEquals(azi2, 146.97364, 0.5e-5); result += checkEquals(s12, 20082617, 0.5); geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2); result += checkEquals(azi1, 0.00000, 0.5e-5); result += checkEquals(fabs(azi2), 180.00000, 0.5e-5); result += checkEquals(s12, 20027270, 0.5); return result; } static 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; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_inverse(&g, nan("0"), 0, 0, 90, &s12, &azi1, &azi2); result += checkNaN(azi1); result += checkNaN(azi2); result += checkNaN(s12); geod_inverse(&g, nan("0"), 0, 90, 9, &s12, &azi1, &azi2); result += checkNaN(azi1); result += checkNaN(azi2); result += checkNaN(s12); return result; } static 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 += checkEquals(azi1, 0.000000000000035, 1.5e-14); result += checkEquals(azi2, 179.99999999999996, 1.5e-14); result += checkEquals(s12, 18345191.174332713, 5e-9); return result; } static 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, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkEquals(lat2, 45.30632, 0.5e-5); result += checkEquals(lon2, -180, 0.5e-5); result += checkEquals(fabs(azi2), 180, 0.5e-5); geod_inverseline(&l, &g, 45, 0, 80, -0.000000000000000003, 0); geod_genposition(&l, flags, 1e7, &lat2, &lon2, &azi2, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkEquals(lat2, 45.30632, 0.5e-5); result += checkEquals(lon2, -180, 0.5e-5); result += checkEquals(fabs(azi2), 180, 0.5e-5); return result; } static 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 += checkEquals(lat2, -60.23169, 0.5e-5); result += checkEquals(lon2, -0.00000, 0.5e-5); result += checkEquals(fabs(azi2), 180.00000, 0.5e-5); result += checkEquals(s12, 10000000, 0.5); result += checkEquals(a12, 90.06544, 0.5e-5); result += checkEquals(m12, 6363636, 0.5); result += checkEquals(M12, -0.0012834, 0.5e-7); result += checkEquals(M21, 0.0013749, 0.5e-7); result += checkEquals(S12, 0, 0.5); a12 = geod_genposition(&l, flags, 2e7, &lat2, &lon2, &azi2, &s12, &m12, &M12, &M21, &S12); result += checkEquals(lat2, -30.03547, 0.5e-5); result += checkEquals(lon2, -180.00000, 0.5e-5); result += checkEquals(azi2, -0.00000, 0.5e-5); result += checkEquals(s12, 20000000, 0.5); result += checkEquals(a12, 179.96459, 0.5e-5); result += checkEquals(m12, 54342, 0.5); result += checkEquals(M12, -1.0045592, 0.5e-7); result += checkEquals(M21, -0.9954339, 0.5e-7); result += checkEquals(S12, 127516405431022.0, 0.5); return result; } static 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, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkEquals(lat2, 4.96445, 0.5e-5); result += checkEquals(lon2, -180.00000, 0.5e-5); result += checkEquals(azi2, -0.00000, 0.5e-5); geod_genposition(&l, flags, 0.5 * l.s13, &lat2, &lon2, &azi2, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkEquals(lat2, -87.52461, 0.5e-5); result += checkEquals(lon2, -0.00000, 0.5e-5); result += checkEquals(azi2, -180.00000, 0.5e-5); return result; } static 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 += checkEquals(lat2, 30.92625, 0.5e-5); result += checkEquals(lon2, 37.54640, 0.5e-5); result += checkEquals(azi2, 55.43104, 0.5e-5); return result; } static 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. * Also the + sign on azi2 is a check on the normalizing of azimuths * (converting -0.0 to +0.0). */ 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 += checkEquals(lat2, 81.04623, 0.5e-5); result += checkEquals(lon2, -170, 0.5e-5); result += azi2 == 0 ? 0 : 1; result += 1/azi2 > 0 ? 0 : 1; /* Check that azi2 = +0.0 not -0.0 */ return result; } static 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); } static 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, nullptr, perimeter); } static int GeodSolve74() { /* Check fix for inaccurate areas, bug introduced in v1.46, fixed * 2015-10-16. */ double a12, s12, azi1, azi2, m12, M12, M21, S12; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); a12 = geod_geninverse(&g, 54.1589, 15.3872, 54.1591, 15.3877, &s12, &azi1, &azi2, &m12, &M12, &M21, &S12); result += checkEquals(azi1, 55.723110355, 5e-9); result += checkEquals(azi2, 55.723515675, 5e-9); result += checkEquals(s12, 39.527686385, 5e-9); result += checkEquals(a12, 0.000355495, 5e-9); result += checkEquals(m12, 39.527686385, 5e-9); result += checkEquals(M12, 0.999999995, 5e-9); result += checkEquals(M21, 0.999999995, 5e-9); result += checkEquals(S12, 286698586.30197, 5e-4); return result; } static int GeodSolve76() { /* The distance from Wellington and Salamanca (a classic failure of * Vincenty) */ double azi1, azi2, s12; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_inverse(&g, -(41+19/60.0), 174+49/60.0, 40+58/60.0, -(5+30/60.0), &s12, &azi1, &azi2); result += checkEquals(azi1, 160.39137649664, 0.5e-11); result += checkEquals(azi2, 19.50042925176, 0.5e-11); result += checkEquals(s12, 19960543.857179, 0.5e-6); return result; } static int GeodSolve78() { /* An example where the NGS calculator fails to converge */ double azi1, azi2, s12; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_inverse(&g, 27.2, 0.0, -27.1, 179.5, &s12, &azi1, &azi2); result += checkEquals(azi1, 45.82468716758, 0.5e-11); result += checkEquals(azi2, 134.22776532670, 0.5e-11); result += checkEquals(s12, 19974354.765767, 0.5e-6); return result; } static int GeodSolve80() { /* Some tests to add code coverage: computing scale in special cases + zero * length geodesic (includes GeodSolve80 - GeodSolve83) + using an incapable * line. */ double a12, s12, azi1, azi2, m12, M12, M21, S12; struct geod_geodesic g; struct geod_geodesicline l; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_geninverse(&g, 0, 0, 0, 90, nullptr, nullptr, nullptr, nullptr, &M12, &M21, nullptr); result += checkEquals(M12, -0.00528427534, 0.5e-10); result += checkEquals(M21, -0.00528427534, 0.5e-10); geod_geninverse(&g, 0, 0, 1e-6, 1e-6, nullptr, nullptr, nullptr, nullptr, &M12, &M21, nullptr); result += checkEquals(M12, 1, 0.5e-10); result += checkEquals(M21, 1, 0.5e-10); a12 = geod_geninverse(&g, 20.001, 0, 20.001, 0, &s12, &azi1, &azi2, &m12, &M12, &M21, &S12); result += checkEquals(a12, 0, 1e-13); result += checkEquals(s12, 0, 1e-8); result += checkEquals(azi1, 180, 1e-13); result += checkEquals(azi2, 180, 1e-13); result += checkEquals(m12, 0, 1e-8); result += checkEquals(M12, 1, 1e-15); result += checkEquals(M21, 1, 1e-15); result += checkEquals(S12, 0, 1e-10); result += 1/a12 > 0 ? 0 : 1; result += 1/s12 > 0 ? 0 : 1; result += 1/m12 > 0 ? 0 : 1; a12 = geod_geninverse(&g, 90, 0, 90, 180, &s12, &azi1, &azi2, &m12, &M12, &M21, &S12); result += checkEquals(a12, 0, 1e-13); result += checkEquals(s12, 0, 1e-8); result += checkEquals(azi1, 0, 1e-13); result += checkEquals(azi2, 180, 1e-13); result += checkEquals(m12, 0, 1e-8); result += checkEquals(M12, 1, 1e-15); result += checkEquals(M21, 1, 1e-15); result += checkEquals(S12, 127516405431022.0, 0.5); /* An incapable line which can't take distance as input */ geod_lineinit(&l, &g, 1, 2, 90, GEOD_LATITUDE); a12 = geod_genposition(&l, 0, 1000, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); result += checkNaN(a12); return result; } static int GeodSolve84() { /* Tests for python implementation to check fix for range errors with * {fmod,sin,cos}(inf) (includes GeodSolve84 - GeodSolve86). */ double lat2, lon2, azi2, inf; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); { /* a round about way to set inf = 0 */ geod_direct(&g, 0, 0, 90, 0, &inf, nullptr, nullptr); /* so that this doesn't give a compiler time error on Windows */ inf = 1.0/inf; } geod_direct(&g, 0, 0, 90, inf, &lat2, &lon2, &azi2); result += checkNaN(lat2); result += checkNaN(lon2); result += checkNaN(azi2); geod_direct(&g, 0, 0, 90, nan("0"), &lat2, &lon2, &azi2); result += checkNaN(lat2); result += checkNaN(lon2); result += checkNaN(azi2); geod_direct(&g, 0, 0, inf, 1000, &lat2, &lon2, &azi2); result += checkNaN(lat2); result += checkNaN(lon2); result += checkNaN(azi2); geod_direct(&g, 0, 0, nan("0"), 1000, &lat2, &lon2, &azi2); result += checkNaN(lat2); result += checkNaN(lon2); result += checkNaN(azi2); geod_direct(&g, 0, inf, 90, 1000, &lat2, &lon2, &azi2); result += lat2 == 0 ? 0 : 1; result += checkNaN(lon2); result += azi2 == 90 ? 0 : 1; geod_direct(&g, 0, nan("0"), 90, 1000, &lat2, &lon2, &azi2); result += lat2 == 0 ? 0 : 1; result += checkNaN(lon2); result += azi2 == 90 ? 0 : 1; geod_direct(&g, inf, 0, 90, 1000, &lat2, &lon2, &azi2); result += checkNaN(lat2); result += checkNaN(lon2); result += checkNaN(azi2); geod_direct(&g, nan("0"), 0, 90, 1000, &lat2, &lon2, &azi2); result += checkNaN(lat2); result += checkNaN(lon2); result += checkNaN(azi2); return result; } static int GeodSolve92() { /* Check fix for inaccurate hypot with python 3.[89]. Problem reported * by agdhruv https://github.com/geopy/geopy/issues/466 ; see * https://bugs.python.org/issue43088 */ double azi1, azi2, s12; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_inverse(&g, 37.757540000000006, -122.47018, 37.75754, -122.470177, &s12, &azi1, &azi2); result += checkEquals(azi1, 89.99999923, 1e-7 ); result += checkEquals(azi2, 90.00000106, 1e-7 ); result += checkEquals(s12, 0.264, 0.5e-3); return result; } static int GeodSolve94() { /* Check fix for lat2 = nan being treated as lat2 = 0 (bug found * 2021-07-26) */ double azi1, azi2, s12; struct geod_geodesic g; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_inverse(&g, 0, 0, nan("0"), 90, &s12, &azi1, &azi2); result += checkNaN(azi1); result += checkNaN(azi2); result += checkNaN(s12); return result; } static int GeodSolve96() { /* Failure with long doubles found with test case from Nowak + Nowak Da * Costa (2022). Problem was using somg12 > 1 as a test that it needed * to be set when roundoff could result in somg12 slightly bigger that 1. * Found + fixed 2022-03-30. */ double S12; struct geod_geodesic g; int result = 0; geod_init(&g, 6378137, 1/298.257222101); geod_geninverse(&g, 0, 0, 60.0832522871723, 89.8492185074635, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &S12); result += checkEquals(S12, 42426932221845, 0.5); return result; } static 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 += checkEquals(perimeter, 631819.8745, 1e-4); result += checkEquals(area, 24952305678.0, 1); planimeter(&g, pb, 4, &perimeter, &area); result += checkEquals(perimeter, 631819.8745, 1e-4); result += checkEquals(area, -24952305678.0, 1); planimeter(&g, pc, 4, &perimeter, &area); result += checkEquals(perimeter, 627598.2731, 1e-4); result += checkEquals(area, 24619419146.0, 1); planimeter(&g, pd, 3, &perimeter, &area); result += checkEquals(perimeter, 30022685, 1); result += checkEquals(area, 63758202715511.0, 1); polylength(&g, pd, 3, &perimeter); result += checkEquals(perimeter, 20020719, 1); return result; } static 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 += checkEquals(perimeter, 539297, 1); result += checkEquals(area, 12476152838.5, 1); return result; } static 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 += checkEquals(perimeter, 36026861, 1); result += checkEquals(area, 0, 1); planimeter(&g, pb, 3, &perimeter, &area); result += checkEquals(perimeter, 36026861, 1); result += checkEquals(area, 0, 1); planimeter(&g, pc, 3, &perimeter, &area); result += checkEquals(perimeter, 36026861, 1); result += checkEquals(area, 0, 1); planimeter(&g, pd, 3, &perimeter, &area); result += checkEquals(perimeter, 36026861, 1); result += checkEquals(area, 0, 1); return result; } static int Planimeter12() { /* Area of arctic circle (not really -- adjunct to rhumb-area test) */ double points[3][2] = {{66.562222222, 0}, {66.562222222, 180}, {66.562222222, 360}}; struct geod_geodesic g; double perimeter, area; int result = 0; geod_init(&g, wgs84_a, wgs84_f); planimeter(&g, points, 3, &perimeter, &area); result += checkEquals(perimeter, 10465729, 1); result += checkEquals(area, 0, 1); return result; } static int Planimeter12r() { /* Area of arctic circle (not really -- adjunct to rhumb-area test) */ double points[3][2] = {{66.562222222, -0}, {66.562222222, -180}, {66.562222222, -360}}; struct geod_geodesic g; double perimeter, area; int result = 0; geod_init(&g, wgs84_a, wgs84_f); planimeter(&g, points, 3, &perimeter, &area); result += checkEquals(perimeter, 10465729, 1); result += checkEquals(area, 0, 1); return result; } static 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 += checkEquals(perimeter, 1160741, 1); result += checkEquals(area, 32415230256.0, 1); return result; } static int Planimeter15() { /* Coverage tests, includes Planimeter15 - Planimeter18 (combinations of * reverse and sign) + calls to testpoint, testedge, geod_polygonarea. */ struct geod_geodesic g; struct geod_polygon p; double lat[] = {2, 1, 3}, lon[] = {1, 2, 3}; double area, s12, azi1; double r = 18454562325.45119, a0 = 510065621724088.5093; /* ellipsoid area */ int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_polygon_init(&p, 0); geod_polygon_addpoint(&g, &p, lat[0], lon[0]); geod_polygon_addpoint(&g, &p, lat[1], lon[1]); geod_polygon_testpoint(&g, &p, lat[2], lon[2], 0, 1, &area, nullptr); result += checkEquals(area, r, 0.5); geod_polygon_testpoint(&g, &p, lat[2], lon[2], 0, 0, &area, nullptr); result += checkEquals(area, r, 0.5); geod_polygon_testpoint(&g, &p, lat[2], lon[2], 1, 1, &area, nullptr); result += checkEquals(area, -r, 0.5); geod_polygon_testpoint(&g, &p, lat[2], lon[2], 1, 0, &area, nullptr); result += checkEquals(area, a0-r, 0.5); geod_inverse(&g, lat[1], lon[1], lat[2], lon[2], &s12, &azi1, nullptr); geod_polygon_testedge(&g, &p, azi1, s12, 0, 1, &area, nullptr); result += checkEquals(area, r, 0.5); geod_polygon_testedge(&g, &p, azi1, s12, 0, 0, &area, nullptr); result += checkEquals(area, r, 0.5); geod_polygon_testedge(&g, &p, azi1, s12, 1, 1, &area, nullptr); result += checkEquals(area, -r, 0.5); geod_polygon_testedge(&g, &p, azi1, s12, 1, 0, &area, nullptr); result += checkEquals(area, a0-r, 0.5); geod_polygon_addpoint(&g, &p, lat[2], lon[2]); geod_polygon_compute(&g, &p, 0, 1, &area, nullptr); result += checkEquals(area, r, 0.5); geod_polygon_compute(&g, &p, 0, 0, &area, nullptr); result += checkEquals(area, r, 0.5); geod_polygon_compute(&g, &p, 1, 1, &area, nullptr); result += checkEquals(area, -r, 0.5); geod_polygon_compute(&g, &p, 1, 0, &area, nullptr); result += checkEquals(area, a0-r, 0.5); geod_polygonarea(&g, lat, lon, 3, &area, nullptr); result += checkEquals(area, r, 0.5); return result; } static int Planimeter19() { /* Coverage tests, includes Planimeter19 - Planimeter20 (degenerate * polygons) + extra cases. */ struct geod_geodesic g; struct geod_polygon p; double area, perim; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_polygon_init(&p, 0); geod_polygon_compute(&g, &p, 0, 1, &area, &perim); result += area == 0 ? 0 : 1; result += perim == 0 ? 0 : 1; geod_polygon_testpoint(&g, &p, 1, 1, 0, 1, &area, &perim); result += area == 0 ? 0 : 1; result += perim == 0 ? 0 : 1; geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, &area, &perim); result += checkNaN(area); result += checkNaN(perim); geod_polygon_addpoint(&g, &p, 1, 1); geod_polygon_compute(&g, &p, 0, 1, &area, &perim); result += area == 0 ? 0 : 1; result += perim == 0 ? 0 : 1; geod_polygon_init(&p, 1); geod_polygon_compute(&g, &p, 0, 1, nullptr, &perim); result += perim == 0 ? 0 : 1; geod_polygon_testpoint(&g, &p, 1, 1, 0, 1, nullptr, &perim); result += perim == 0 ? 0 : 1; geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, nullptr, &perim); result += checkNaN(perim); geod_polygon_addpoint(&g, &p, 1, 1); geod_polygon_compute(&g, &p, 0, 1, nullptr, &perim); result += perim == 0 ? 0 : 1; geod_polygon_addpoint(&g, &p, 1, 1); geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, nullptr, &perim); result += checkEquals(perim, 1000, 1e-10); geod_polygon_testpoint(&g, &p, 2, 2, 0, 1, nullptr, &perim); result += checkEquals(perim, 156876.149, 0.5e-3); return result; } static int Planimeter21() { /* Some tests to add code coverage: multiple circlings of pole (includes * Planimeter21 - Planimeter28) + invocations via testpoint and testedge. */ struct geod_geodesic g; struct geod_polygon p; double area, lat = 45, a = 39.2144607176828184218, s = 8420705.40957178156285, r = 39433884866571.4277, /* Area for one circuit */ a0 = 510065621724088.5093; /* Ellipsoid area */ int result = 0, i; geod_init(&g, wgs84_a, wgs84_f); geod_polygon_init(&p, 0); geod_polygon_addpoint(&g, &p, lat, 60); geod_polygon_addpoint(&g, &p, lat, 180); geod_polygon_addpoint(&g, &p, lat, -60); geod_polygon_addpoint(&g, &p, lat, 60); geod_polygon_addpoint(&g, &p, lat, 180); geod_polygon_addpoint(&g, &p, lat, -60); for (i = 3; i <= 4; ++i) { geod_polygon_addpoint(&g, &p, lat, 60); geod_polygon_addpoint(&g, &p, lat, 180); geod_polygon_testpoint(&g, &p, lat, -60, 0, 1, &area, nullptr); result += checkEquals(area, i*r, 0.5); geod_polygon_testpoint(&g, &p, lat, -60, 0, 0, &area, nullptr); result += checkEquals(area, i*r, 0.5); geod_polygon_testpoint(&g, &p, lat, -60, 1, 1, &area, nullptr); result += checkEquals(area, -i*r, 0.5); geod_polygon_testpoint(&g, &p, lat, -60, 1, 0, &area, nullptr); result += checkEquals(area, -i*r + a0, 0.5); geod_polygon_testedge(&g, &p, a, s, 0, 1, &area, nullptr); result += checkEquals(area, i*r, 0.5); geod_polygon_testedge(&g, &p, a, s, 0, 0, &area, nullptr); result += checkEquals(area, i*r, 0.5); geod_polygon_testedge(&g, &p, a, s, 1, 1, &area, nullptr); result += checkEquals(area, -i*r, 0.5); geod_polygon_testedge(&g, &p, a, s, 1, 0, &area, nullptr); result += checkEquals(area, -i*r + a0, 0.5); geod_polygon_addpoint(&g, &p, lat, -60); geod_polygon_compute(&g, &p, 0, 1, &area, nullptr); result += checkEquals(area, i*r, 0.5); geod_polygon_compute(&g, &p, 0, 0, &area, nullptr); result += checkEquals(area, i*r, 0.5); geod_polygon_compute(&g, &p, 1, 1, &area, nullptr); result += checkEquals(area, -i*r, 0.5); geod_polygon_compute(&g, &p, 1, 0, &area, nullptr); result += checkEquals(area, -i*r + a0, 0.5); } return result; } static int Planimeter29() { /* Check fix to transitdirect vs transit zero handling inconsistency */ struct geod_geodesic g; struct geod_polygon p; double area; int result = 0; geod_init(&g, wgs84_a, wgs84_f); geod_polygon_init(&p, 0); geod_polygon_addpoint(&g, &p, 0, 0); geod_polygon_addedge(&g, &p, 90, 1000); geod_polygon_addedge(&g, &p, 0, 1000); geod_polygon_addedge(&g, &p, -90, 1000); geod_polygon_compute(&g, &p, 0, 1, &area, nullptr); /* The area should be 1e6. Prior to the fix it was 1e6 - A/2, where * A = ellipsoid area. */ result += checkEquals(area, 1000000.0, 0.01); 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 = GeodSolve74())) {++n; printf("GeodSolve74 fail: %d\n", i);} if ((i = GeodSolve76())) {++n; printf("GeodSolve76 fail: %d\n", i);} if ((i = GeodSolve78())) {++n; printf("GeodSolve78 fail: %d\n", i);} if ((i = GeodSolve80())) {++n; printf("GeodSolve80 fail: %d\n", i);} if ((i = GeodSolve84())) {++n; printf("GeodSolve84 fail: %d\n", i);} if ((i = GeodSolve92())) {++n; printf("GeodSolve92 fail: %d\n", i);} if ((i = GeodSolve94())) {++n; printf("GeodSolve94 fail: %d\n", i);} if ((i = GeodSolve96())) {++n; printf("GeodSolve96 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 = Planimeter12r())) {++n; printf("Planimeter12r fail: %d\n", i);} if ((i = Planimeter13())) {++n; printf("Planimeter13 fail: %d\n", i);} if ((i = Planimeter15())) {++n; printf("Planimeter15 fail: %d\n", i);} if ((i = Planimeter19())) {++n; printf("Planimeter19 fail: %d\n", i);} if ((i = Planimeter21())) {++n; printf("Planimeter21 fail: %d\n", i);} if ((i = Planimeter29())) {++n; printf("Planimeter29 fail: %d\n", i);} return n; } proj-9.6.0/src/tests/multistresstest.cpp000664 001754 001755 00000032441 14764566077 020360 0ustar00e012349e012349000000 000000 /****************************************************************************** * * 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.h" #ifdef _WIN32 #include #else #include #include #endif #define num_threads 10 static int num_iterations = 1000000; static int reinit_every_iteration = 0; typedef struct { const char *src_def; const char *dst_def; PJ_COORD src; PJ_COORD dst; int dst_error; int skip; } TestItem; static TestItem test_list[] = { {"+proj=utm +zone=11 +datum=WGS84", "+proj=latlong +datum=WGS84", proj_coord(150000.0, 3000000.0, 0.0, 0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {"+proj=utm +zone=11 +datum=NAD83", "+proj=latlong +datum=NAD27", proj_coord(150000.0, 3000000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {"+proj=utm +zone=11 +datum=NAD83", "+proj=latlong +nadgrids=@null +ellps=WGS84", proj_coord(150000.0, 3000000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {"+proj=utm +zone=11 +datum=WGS84", "+proj=merc +datum=potsdam", proj_coord(150000.0, 3000000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {"+proj=latlong +nadgrids=nzgd2kgrid0005.gsb", "+proj=latlong +datum=WGS84", proj_coord(150000.0, 3000000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {"+proj=latlong +nadgrids=nzgd2kgrid0005.gsb", "+proj=latlong +datum=WGS84", proj_coord(170, -40, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {"+proj=latlong +ellps=GRS80 +towgs84=2,3,5", "+proj=latlong +ellps=intl +towgs84=10,12,15", proj_coord(170, -40, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 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 ", proj_coord(150000.0, 250000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.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 ", proj_coord(150000.0, 250000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.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 ", proj_coord(150000.0, 250000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.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 ", proj_coord(150000.0, 250000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.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 ", proj_coord(150000.0, 250000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.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 ", proj_coord(150000.0, 250000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.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 ", proj_coord(150000.0, 250000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {"+init=epsg:3309", "+init=epsg:4326", proj_coord(150000.0, 30000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}, {/* Bad projection (invalid ellipsoid parameter +R_A=0) */ "+proj=utm +zone=11 +datum=WGS84", "+proj=merc +datum=potsdam +R_A=0", proj_coord(150000.0, 3000000.0, 0.0, 0.0), proj_coord(0.0, 0.0, 0.0, 0.0), 0, 0}}; static volatile int active_thread_count = 0; /************************************************************************/ /* 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. */ /* -------------------------------------------------------------------- */ PJ **pj_list; PJ_CONTEXT *ctx = proj_context_create(); pj_list = (PJ **)calloc(test_count, sizeof(PJ *)); if (!reinit_every_iteration) { for (i = 0; i < test_count; i++) { TestItem *test = test_list + i; pj_list[i] = proj_create_crs_to_crs(ctx, test->src_def, test->dst_def, nullptr); } } /* -------------------------------------------------------------------- */ /* 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; if (reinit_every_iteration) { proj_context_use_proj4_init_rules(nullptr, true); pj_list[i] = proj_create_crs_to_crs(ctx, test->src_def, test->dst_def, nullptr); { int skipTest = (pj_list[i] == nullptr); if (skipTest != test->skip) fprintf( stderr, "Threaded projection initialization does not match " "unthreaded initialization\n"); if (skipTest) { proj_destroy(pj_list[i]); continue; } } } if (test->skip) continue; PJ_COORD out = proj_trans(pj_list[i], PJ_FWD, test->src); int error = proj_errno(pj_list[i]); if (error != test->dst_error) { fprintf(stderr, "Got error %d, expected %d\n", error, test->dst_error); } proj_errno_reset(pj_list[i]); if (out.xyz.x != test->dst.xyz.x || out.xyz.y != test->dst.xyz.y || out.xyz.z != test->dst.xyz.z) // 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", out.xyz.x, out.xyz.y, out.xyz.z, test->dst.xyz.x, test->dst.xyz.y, test->dst.xyz.z, out.xyz.x - test->dst.xyz.x, out.xyz.y - test->dst.xyz.y, out.xyz.z - test->dst.xyz.z); } if (reinit_every_iteration) { proj_destroy(pj_list[i]); } } } /* -------------------------------------------------------------------- */ /* Cleanup */ /* -------------------------------------------------------------------- */ if (!reinit_every_iteration) { for (i = 0; i < test_count; i++) { proj_destroy(pj_list[i]); } } free(pj_list); proj_context_destroy(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) { (void)pData; TestThread(); return nullptr; } #endif /************************************************************************/ /* main() */ /************************************************************************/ #ifdef _WIN32 static DWORD WINAPI do_main(LPVOID unused) #else static 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; PJ *pj; proj_context_use_proj4_init_rules(nullptr, true); pj = proj_create_crs_to_crs(nullptr, test->src_def, test->dst_def, nullptr); if (pj == nullptr) { printf("Unable to translate:\n%s\n or\n%s\n", test->src_def, test->dst_def); test->skip = 1; proj_destroy(pj); continue; } PJ_COORD out = proj_trans(pj, PJ_FWD, test->src); test->dst = out; test->dst_error = proj_errno(pj); proj_destroy(pj); test->skip = 0; #ifdef nodef printf("Test %d - output %.14g,%.14g,%g\n", i, test->dst.xyz.x, test->dst.xyz.y, test->dst.xyz.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, nullptr); } 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 < argc; i++) { if (strcmp(argv[i], "-reinit") == 0) reinit_every_iteration = 1; else if (strcmp(argv[i], "-num_iterations") == 0 && i + 1 < argc) { num_iterations = atoi(argv[i + 1]); i++; } } #ifdef _WIN32 /* This is an incredible weirdness but with mingw cross-compiler */ /* 1. - b/a; where double a = 6378206.4; and double b = 6356583.8; */ /* does not evaluate the same in the main thread or in a thread forked */ /* by CreateThread(), so run the main in a thread... */ { HANDLE thread = CreateThread(NULL, 0, do_main, NULL, 0, NULL); WaitForSingleObject(thread, INFINITE); CloseHandle(thread); } #else do_main(); #endif return 0; } proj-9.6.0/src/tracing.cpp000664 001754 001755 00000015423 14764566077 015350 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Tracing/profiling * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ #ifdef ENABLE_TRACING #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include #include "proj/internal/internal.hpp" #include "proj/internal/tracing.hpp" //! @cond Doxygen_Suppress #if defined(_WIN32) && !defined(__CYGWIN__) #include #else #include /* for gettimeofday() */ #define CPLTimeVal timeval #define CPLGettimeofday(t, u) gettimeofday(t, u) #endif NS_PROJ_START using namespace internal; namespace tracing { #if defined(_WIN32) && !defined(__CYGWIN__) struct CPLTimeVal { time_t tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }; // --------------------------------------------------------------------------- static void CPLGettimeofday(struct CPLTimeVal *tp, void * /* timezonep*/) { struct _timeb theTime; _ftime(&theTime); tp->tv_sec = static_cast(theTime.time); tp->tv_usec = theTime.millitm * 1000; } #endif struct Singleton { FILE *f = nullptr; int callLevel = 0; int minDelayMicroSec = 10 * 1000; // 10 millisec long long startTimeStamp = 0; std::string componentsWhiteList{}; std::string componentsBlackList{}; Singleton(); ~Singleton(); Singleton(const Singleton &) = delete; Singleton &operator=(const Singleton &) = delete; void logTraceRaw(const std::string &str); }; // --------------------------------------------------------------------------- Singleton::Singleton() { const char *traceFile = getenv("PROJ_TRACE_FILE"); if (traceFile) f = fopen(traceFile, "wb"); if (!f) f = stderr; const char *minDelay = getenv("PROJ_TRACE_MIN_DELAY"); if (minDelay) { minDelayMicroSec = atoi(minDelay); } const char *whiteList = getenv("PROJ_TRACE_WHITE_LIST"); if (whiteList) { componentsWhiteList = whiteList; } const char *blackList = getenv("PROJ_TRACE_BLACK_LIST"); if (blackList) { componentsBlackList = blackList; } CPLTimeVal ts; CPLGettimeofday(&ts, nullptr); startTimeStamp = static_cast(ts.tv_sec) * 1000000 + ts.tv_usec; logTraceRaw(""); ++callLevel; } // --------------------------------------------------------------------------- Singleton::~Singleton() { --callLevel; logTraceRaw(""); fflush(f); if (f != stderr) fclose(f); } // --------------------------------------------------------------------------- static Singleton &getSingleton() { static Singleton singleton; return singleton; } // --------------------------------------------------------------------------- void Singleton::logTraceRaw(const std::string &str) { CPLTimeVal ts; CPLGettimeofday(&ts, nullptr); const auto ts_usec = static_cast(ts.tv_sec) * 1000000 + ts.tv_usec; fprintf(f, " ", static_cast((ts_usec - startTimeStamp) / 1000000), static_cast((ts_usec - startTimeStamp) % 1000000)); for (int i = 0; i < callLevel; i++) fprintf(f, " "); fprintf(f, "%s\n", str.c_str()); fflush(f); } // --------------------------------------------------------------------------- void logTrace(const std::string &str, const std::string &component) { auto &singleton = getSingleton(); if (!singleton.componentsWhiteList.empty() && (component.empty() || singleton.componentsWhiteList.find(component) == std::string::npos)) { return; } if (!singleton.componentsBlackList.empty() && !component.empty() && singleton.componentsBlackList.find(component) != std::string::npos) { return; } std::string rawStr("msg_ = msg; CPLGettimeofday(&d->startTimeStamp_, nullptr); singleton.logTraceRaw(""); ++singleton.callLevel; singleton.logTraceRaw("" + d->msg_ + ""); } // --------------------------------------------------------------------------- EnterBlock::~EnterBlock() { auto &singleton = getSingleton(); CPLTimeVal endTimeStamp; CPLGettimeofday(&endTimeStamp, nullptr); int delayMicroSec = static_cast( (endTimeStamp.tv_usec - d->startTimeStamp_.tv_usec) + 1000000 * (endTimeStamp.tv_sec - d->startTimeStamp_.tv_sec)); std::string lengthStr; if (delayMicroSec >= singleton.minDelayMicroSec) { lengthStr = " length='" + toString(delayMicroSec / 1000) + "." + toString((delayMicroSec % 1000) / 100) + " msec'"; } singleton.logTraceRaw("" + d->msg_ + ""); --singleton.callLevel; singleton.logTraceRaw(""); } } // namespace tracing NS_PROJ_END //! @endcond #endif // ENABLE_TRACING proj-9.6.0/src/trans.cpp000664 001754 001755 00000061560 14764566077 015053 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: proj_trans(), proj_trans_array(), proj_trans_generic(), *proj_roundtrip() * * Author: Thomas Knudsen, thokn@sdfe.dk, 2016-06-09/2016-11-06 * ****************************************************************************** * Copyright (c) 2016, 2017 Thomas Knudsen/SDFE * * 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 FROM_PROJ_CPP #include "proj.h" #include "proj_internal.h" #include #include "proj/internal/io_internal.hpp" inline bool pj_coord_has_nans(PJ_COORD coo) { return std::isnan(coo.v[0]) || std::isnan(coo.v[1]) || std::isnan(coo.v[2]) || std::isnan(coo.v[3]); } /**************************************************************************************/ int pj_get_suggested_operation(PJ_CONTEXT *, const std::vector &opList, const int iExcluded[2], bool skipNonInstantiable, PJ_DIRECTION direction, PJ_COORD coord) /**************************************************************************************/ { const auto normalizeLongitude = [](double x) { if (x > 180.0) { x -= 360.0; if (x > 180.0) x = fmod(x + 180.0, 360.0) - 180.0; } else if (x < -180.0) { x += 360.0; if (x < -180.0) x = fmod(x + 180.0, 360.0) - 180.0; } return x; }; // Select the operations that match the area of use // and has the best accuracy. int iBest = -1; double bestAccuracy = std::numeric_limits::max(); const int nOperations = static_cast(opList.size()); for (int i = 0; i < nOperations; i++) { if (i == iExcluded[0] || i == iExcluded[1]) { continue; } const auto &alt = opList[i]; bool spatialCriterionOK = false; if (direction == PJ_FWD) { if (alt.pjSrcGeocentricToLonLat) { if (alt.minxSrc == -180 && alt.minySrc == -90 && alt.maxxSrc == 180 && alt.maxySrc == 90) { spatialCriterionOK = true; } else { PJ_COORD tmp = coord; pj_fwd4d(tmp, alt.pjSrcGeocentricToLonLat); if (tmp.xyzt.x >= alt.minxSrc && tmp.xyzt.y >= alt.minySrc && tmp.xyzt.x <= alt.maxxSrc && tmp.xyzt.y <= alt.maxySrc) { spatialCriterionOK = true; } } } else if (coord.xyzt.x >= alt.minxSrc && coord.xyzt.y >= alt.minySrc && coord.xyzt.x <= alt.maxxSrc && coord.xyzt.y <= alt.maxySrc) { spatialCriterionOK = true; } else if (alt.srcIsLonLatDegree && coord.xyzt.y >= alt.minySrc && coord.xyzt.y <= alt.maxySrc) { const double normalizedLon = normalizeLongitude(coord.xyzt.x); if (normalizedLon >= alt.minxSrc && normalizedLon <= alt.maxxSrc) { spatialCriterionOK = true; } } else if (alt.srcIsLatLonDegree && coord.xyzt.x >= alt.minxSrc && coord.xyzt.x <= alt.maxxSrc) { const double normalizedLon = normalizeLongitude(coord.xyzt.y); if (normalizedLon >= alt.minySrc && normalizedLon <= alt.maxySrc) { spatialCriterionOK = true; } } } else { if (alt.pjDstGeocentricToLonLat) { if (alt.minxDst == -180 && alt.minyDst == -90 && alt.maxxDst == 180 && alt.maxyDst == 90) { spatialCriterionOK = true; } else { PJ_COORD tmp = coord; pj_fwd4d(tmp, alt.pjDstGeocentricToLonLat); if (tmp.xyzt.x >= alt.minxDst && tmp.xyzt.y >= alt.minyDst && tmp.xyzt.x <= alt.maxxDst && tmp.xyzt.y <= alt.maxyDst) { spatialCriterionOK = true; } } } else if (coord.xyzt.x >= alt.minxDst && coord.xyzt.y >= alt.minyDst && coord.xyzt.x <= alt.maxxDst && coord.xyzt.y <= alt.maxyDst) { spatialCriterionOK = true; } else if (alt.dstIsLonLatDegree && coord.xyzt.y >= alt.minyDst && coord.xyzt.y <= alt.maxyDst) { const double normalizedLon = normalizeLongitude(coord.xyzt.x); if (normalizedLon >= alt.minxDst && normalizedLon <= alt.maxxDst) { spatialCriterionOK = true; } } else if (alt.dstIsLatLonDegree && coord.xyzt.x >= alt.minxDst && coord.xyzt.x <= alt.maxxDst) { const double normalizedLon = normalizeLongitude(coord.xyzt.y); if (normalizedLon >= alt.minyDst && normalizedLon <= alt.maxyDst) { spatialCriterionOK = true; } } } if (spatialCriterionOK) { // The offshore test is for the "Test bug 245 (use +datum=carthage)" // of test_cs2cs_various.yaml. The long=10 lat=34 point belongs // both to the onshore and offshore Tunisia area of uses, but is // slightly onshore. So in a general way, prefer a onshore area // to a offshore one. if (iBest < 0 || (((alt.accuracy >= 0 && alt.accuracy < bestAccuracy) || // If two operations have the same accuracy, use // the one that has the smallest area (alt.accuracy == bestAccuracy && alt.pseudoArea < opList[iBest].pseudoArea && !(alt.isUnknownAreaName && !opList[iBest].isUnknownAreaName) && !opList[iBest].isPriorityOp)) && !alt.isOffshore)) { if (skipNonInstantiable && !alt.isInstantiable()) { continue; } iBest = i; bestAccuracy = alt.accuracy; } } } return iBest; } /**************************************************************************************/ void pj_warn_about_missing_grid(PJ *P) /**************************************************************************************/ { std::string msg("Attempt to use coordinate operation "); msg += proj_get_name(P); msg += " failed."; int gridUsed = proj_coordoperation_get_grid_used_count(P->ctx, P); for (int i = 0; i < gridUsed; ++i) { const char *gridName = ""; int available = FALSE; if (proj_coordoperation_get_grid_used(P->ctx, P, i, &gridName, nullptr, nullptr, nullptr, nullptr, nullptr, &available) && !available) { msg += " Grid "; msg += gridName; msg += " is not available. " "Consult https://proj.org/resource_files.html for guidance."; } } if (!P->errorIfBestTransformationNotAvailable && P->warnIfBestTransformationNotAvailable) { msg += " This might become an error in a future PROJ major release. " "Set the ONLY_BEST option to YES or NO. " "This warning will no longer be emitted (for the current " "transformation instance)."; P->warnIfBestTransformationNotAvailable = false; } pj_log(P->ctx, P->errorIfBestTransformationNotAvailable ? PJ_LOG_ERROR : PJ_LOG_DEBUG, msg.c_str()); } /**************************************************************************************/ PJ_COORD proj_trans(PJ *P, PJ_DIRECTION direction, PJ_COORD coord) { /*************************************************************************************** Apply the transformation P to the coordinate coord, preferring the 4D interfaces if available. See also pj_approx_2D_trans and pj_approx_3D_trans in pj_internal.c, which work similarly, but prefers the 2D resp. 3D interfaces if available. ***************************************************************************************/ if (nullptr == P || direction == PJ_IDENT) return coord; if (P->inverted) direction = pj_opposite_direction(direction); if (P->iso_obj != nullptr && !P->iso_obj_is_coordinate_operation) { pj_log(P->ctx, PJ_LOG_ERROR, "Object is not a coordinate operation"); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return proj_coord_error(); } if (!P->alternativeCoordinateOperations.empty()) { constexpr int N_MAX_RETRY = 2; int iExcluded[N_MAX_RETRY] = {-1, -1}; bool skipNonInstantiable = P->skipNonInstantiable && !P->warnIfBestTransformationNotAvailable && !P->errorIfBestTransformationNotAvailable; const int nOperations = static_cast(P->alternativeCoordinateOperations.size()); // We may need several attempts. For example the point at // long=-111.5 lat=45.26 falls into the bounding box of the Canadian // ntv2_0.gsb grid, except that it is not in any of the subgrids, being // in the US. We thus need another retry that will select the conus // grid. for (int iRetry = 0; iRetry <= N_MAX_RETRY; iRetry++) { // Do a first pass and select the operations that match the area of // use and has the best accuracy. int iBest = pj_get_suggested_operation( P->ctx, P->alternativeCoordinateOperations, iExcluded, skipNonInstantiable, direction, coord); if (iBest < 0) { break; } if (iRetry > 0) { const int oldErrno = proj_errno_reset(P); if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_DEBUG) { pj_log(P->ctx, PJ_LOG_DEBUG, proj_context_errno_string(P->ctx, oldErrno)); } pj_log(P->ctx, PJ_LOG_DEBUG, "Did not result in valid result. " "Attempting a retry with another operation."); } const auto &alt = P->alternativeCoordinateOperations[iBest]; if (P->iCurCoordOp != iBest) { if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_DEBUG) { std::string msg("Using coordinate operation "); msg += alt.name; pj_log(P->ctx, PJ_LOG_DEBUG, msg.c_str()); } P->iCurCoordOp = iBest; } PJ_COORD res = coord; if (alt.pj->hasCoordinateEpoch) coord.xyzt.t = alt.pj->coordinateEpoch; if (direction == PJ_FWD) pj_fwd4d(res, alt.pj); else pj_inv4d(res, alt.pj); if (proj_errno(alt.pj) == PROJ_ERR_OTHER_NETWORK_ERROR) { return proj_coord_error(); } if (res.xyzt.x != HUGE_VAL) { return res; } else if (P->errorIfBestTransformationNotAvailable || P->warnIfBestTransformationNotAvailable) { pj_warn_about_missing_grid(alt.pj); if (P->errorIfBestTransformationNotAvailable) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_NO_OPERATION); return res; } P->warnIfBestTransformationNotAvailable = false; skipNonInstantiable = true; } if (iRetry == N_MAX_RETRY) { break; } iExcluded[iRetry] = iBest; } // In case we did not find an operation whose area of use is compatible // with the input coordinate, then goes through again the list, and // use the first operation that does not require grids. NS_PROJ::io::DatabaseContextPtr dbContext; try { if (P->ctx->cpp_context) { dbContext = P->ctx->cpp_context->getDatabaseContext().as_nullable(); } } catch (const std::exception &) { } for (int i = 0; i < nOperations; i++) { const auto &alt = P->alternativeCoordinateOperations[i]; auto coordOperation = dynamic_cast( alt.pj->iso_obj.get()); if (coordOperation) { if (coordOperation->gridsNeeded(dbContext, true).empty()) { if (P->iCurCoordOp != i) { if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_DEBUG) { std::string msg("Using coordinate operation "); msg += alt.name; msg += " as a fallback due to lack of more " "appropriate operations"; pj_log(P->ctx, PJ_LOG_DEBUG, msg.c_str()); } P->iCurCoordOp = i; } if (direction == PJ_FWD) { pj_fwd4d(coord, alt.pj); } else { pj_inv4d(coord, alt.pj); } return coord; } } } proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_NO_OPERATION); return proj_coord_error(); } P->iCurCoordOp = 0; // dummy value, to be used by proj_trans_get_last_used_operation() if (P->hasCoordinateEpoch) coord.xyzt.t = P->coordinateEpoch; if (pj_coord_has_nans(coord)) coord.v[0] = coord.v[1] = coord.v[2] = coord.v[3] = std::numeric_limits::quiet_NaN(); else if (direction == PJ_FWD) pj_fwd4d(coord, P); else pj_inv4d(coord, P); return coord; } /*****************************************************************************/ PJ *proj_trans_get_last_used_operation(PJ *P) /****************************************************************************** Return the operation used during the last invocation of proj_trans(). This is especially useful when P has been created with proj_create_crs_to_crs() and has several alternative operations. The returned object must be freed with proj_destroy(). ******************************************************************************/ { if (nullptr == P || P->iCurCoordOp < 0) return nullptr; if (P->alternativeCoordinateOperations.empty()) return proj_clone(P->ctx, P); return proj_clone(P->ctx, P->alternativeCoordinateOperations[P->iCurCoordOp].pj); } /*****************************************************************************/ int proj_trans_array(PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord) { /****************************************************************************** Batch transform an array of PJ_COORD. Performs transformation on all points, even if errors occur on some points. Individual points that fail to transform will have their components set to HUGE_VAL Returns 0 if all coordinates are transformed without error, otherwise returns a precise error number if all coordinates that fail to transform for the same reason, or a generic error code if they fail for different reasons. ******************************************************************************/ size_t i; int retErrno = 0; bool hasSetRetErrno = false; bool sameRetErrno = true; for (i = 0; i < n; i++) { proj_context_errno_set(P->ctx, 0); coord[i] = proj_trans(P, direction, coord[i]); int thisErrno = proj_errno(P); if (thisErrno != 0) { if (!hasSetRetErrno) { retErrno = thisErrno; hasSetRetErrno = true; } else if (sameRetErrno && retErrno != thisErrno) { sameRetErrno = false; retErrno = PROJ_ERR_COORD_TRANSFM; } } } proj_context_errno_set(P->ctx, retErrno); return retErrno; } /*************************************************************************************/ size_t proj_trans_generic(PJ *P, PJ_DIRECTION direction, double *x, size_t sx, size_t nx, double *y, size_t sy, size_t ny, double *z, size_t sz, size_t nz, double *t, size_t st, size_t nt) { /************************************************************************************** Transform a series of coordinates, where the individual coordinate dimension may be represented by an array that is either 1. fully populated 2. a null pointer and/or a length of zero, which will be treated as a fully populated array of zeroes 3. of length one, i.e. a constant, which will be treated as a fully populated array of that constant value The strides, sx, sy, sz, st, represent the step length, in bytes, between consecutive elements of the corresponding array. This makes it possible for proj_transform to handle transformation of a large class of application specific data structures, without necessarily understanding the data structure format, as in: typedef struct {double x, y; int quality_level; char surveyor_name[134];} XYQS; XYQS survey[345]; double height = 23.45; PJ *P = {...}; size_t stride = sizeof (XYQS); ... proj_transform ( P, PJ_INV, sizeof(XYQS), &(survey[0].x), stride, 345, (* We have 345 eastings *) &(survey[0].y), stride, 345, (* ...and 345 northings. *) &height, 1, (* The height is the constant 23.45 m *) 0, 0 (* and the time is the constant 0.00 s *) ); This is similar to the inner workings of the pj_transform function, but the stride functionality has been generalized to work for any size of basic unit, not just a fixed number of doubles. In most cases, the stride will be identical for x, y,z, and t, since they will typically be either individual arrays (stride = sizeof(double)), or strided views into an array of application specific data structures (stride = sizeof (...)). But in order to support cases where x, y, z, and t come from heterogeneous sources, individual strides, sx, sy, sz, st, are used. Caveat: Since proj_transform does its work *in place*, this means that even the supposedly constants (i.e. length 1 arrays) will return from the call in altered state. Hence, remember to reinitialize between repeated calls. Return value: Number of transformations completed. **************************************************************************************/ PJ_COORD coord = {{0, 0, 0, 0}}; size_t i, nmin; double null_broadcast = 0; double invalid_time = HUGE_VAL; if (nullptr == P) return 0; if (P->inverted) direction = pj_opposite_direction(direction); /* ignore lengths of null arrays */ if (nullptr == x) nx = 0; if (nullptr == y) ny = 0; if (nullptr == z) nz = 0; if (nullptr == t) nt = 0; /* and make the nullities point to some real world memory for broadcasting * nulls */ if (0 == nx) x = &null_broadcast; if (0 == ny) y = &null_broadcast; if (0 == nz) z = &null_broadcast; if (0 == nt) t = &invalid_time; /* nothing to do? */ if (0 == nx + ny + nz + nt) return 0; /* arrays of length 1 are constants, which we broadcast along the longer * arrays */ /* so we need to find the length of the shortest non-unity array to figure * out */ /* how many coordinate pairs we must transform */ nmin = (nx > 1) ? nx : (ny > 1) ? ny : (nz > 1) ? nz : (nt > 1) ? nt : 1; if ((nx > 1) && (nx < nmin)) nmin = nx; if ((ny > 1) && (ny < nmin)) nmin = ny; if ((nz > 1) && (nz < nmin)) nmin = nz; if ((nt > 1) && (nt < nmin)) nmin = nt; /* Check validity of direction flag */ switch (direction) { case PJ_FWD: case PJ_INV: break; case PJ_IDENT: return nmin; } /* Arrays of length==0 are broadcast as the constant 0 */ /* Arrays of length==1 are broadcast as their single value */ /* Arrays of length >1 are iterated over (for the first nmin values) */ /* The slightly convolved incremental indexing is used due */ /* to the stride, which may be any size supported by the platform */ for (i = 0; i < nmin; i++) { coord.xyzt.x = *x; coord.xyzt.y = *y; coord.xyzt.z = *z; coord.xyzt.t = *t; coord = proj_trans(P, direction, coord); /* in all full length cases, we overwrite the input with the output, */ /* and step on to the next element. */ /* The casts are somewhat funky, but they compile down to no-ops and */ /* they tell compilers and static analyzers that we know what we do */ if (nx > 1) { *x = coord.xyzt.x; x = (double *)((void *)(((char *)x) + sx)); } if (ny > 1) { *y = coord.xyzt.y; y = (double *)((void *)(((char *)y) + sy)); } if (nz > 1) { *z = coord.xyzt.z; z = (double *)((void *)(((char *)z) + sz)); } if (nt > 1) { *t = coord.xyzt.t; t = (double *)((void *)(((char *)t) + st)); } } /* Last time around, we update the length 1 cases with their transformed * alter egos */ if (nx == 1) *x = coord.xyzt.x; if (ny == 1) *y = coord.xyzt.y; if (nz == 1) *z = coord.xyzt.z; if (nt == 1) *t = coord.xyzt.t; return i; } static bool inline coord_is_all_nans(PJ_COORD coo) { return std::isnan(coo.v[0]) && std::isnan(coo.v[1]) && std::isnan(coo.v[2]) && std::isnan(coo.v[3]); } /* Measure numerical deviation after n roundtrips fwd-inv (or inv-fwd) */ double proj_roundtrip(PJ *P, PJ_DIRECTION direction, int n, PJ_COORD *coord) { int i; PJ_COORD t, org; if (nullptr == P) return HUGE_VAL; if (n < 1) { proj_log_error(P, _("n should be >= 1")); proj_errno_set(P, PROJ_ERR_OTHER_API_MISUSE); return HUGE_VAL; } /* in the first half-step, we generate the output value */ org = *coord; *coord = proj_trans(P, direction, org); t = *coord; /* now we take n-1 full steps in inverse direction: We are */ /* out of phase due to the half step already taken */ for (i = 0; i < n - 1; i++) t = proj_trans(P, direction, proj_trans(P, pj_opposite_direction(direction), t)); /* finally, we take the last half-step */ t = proj_trans(P, pj_opposite_direction(direction), t); /* if we start with any NaN, we expect all NaN as output */ if (pj_coord_has_nans(org) && coord_is_all_nans(t)) { return 0.0; } /* checking for angular *input* since we do a roundtrip, and end where we * begin */ if (proj_angular_input(P, direction)) return proj_lpz_dist(P, org, t); return proj_xyz_dist(org, t); } proj-9.6.0/src/trans_bounds.cpp000664 001754 001755 00000107362 14764566077 016426 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Implements proj_trans_bounds() * * Author: Alan D. Snow * ****************************************************************************** * Copyright (c) 2021, Alan D. Snow * * 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 FROM_PROJ_CPP #include "proj.h" #include "proj_internal.h" #include #include #include // --------------------------------------------------------------------------- static double simple_min(const double *data, const int arr_len) { double min_value = data[0]; for (int iii = 1; iii < arr_len; iii++) { if (data[iii] < min_value) min_value = data[iii]; } return min_value; } // --------------------------------------------------------------------------- static double simple_max(const double *data, const int arr_len) { double max_value = data[0]; for (int iii = 1; iii < arr_len; iii++) { if ((data[iii] > max_value || max_value == HUGE_VAL) && data[iii] != HUGE_VAL) max_value = data[iii]; } return max_value; } // --------------------------------------------------------------------------- static int find_previous_index(const int iii, const double *data, const int arr_len) { // find index of nearest valid previous value if exists int prev_iii = iii - 1; if (prev_iii == -1) // handle wraparound prev_iii = arr_len - 1; while (data[prev_iii] == HUGE_VAL && prev_iii != iii) { prev_iii--; if (prev_iii == -1) // handle wraparound prev_iii = arr_len - 1; } return prev_iii; } // --------------------------------------------------------------------------- /****************************************************************************** Handles the case when longitude values cross the antimeridian when calculating the minimum. Note: The data array must be in a linear ring. Note: This requires a densified ring with at least 2 additional points per edge to correctly handle global extents. If only 1 additional point: | | |RL--x0--|RL-- | | -180 180|-180 If they are evenly spaced and it crosses the antimeridian: x0 - L = 180 R - x0 = -180 For example: Let R = -179.9, x0 = 0.1, L = -179.89 x0 - L = 0.1 - -179.9 = 180 R - x0 = -179.89 - 0.1 ~= -180 This is the same in the case when it didn't cross the antimeridian. If you have 2 additional points: | | |RL--x0--x1--|RL-- | | -180 180|-180 If they are evenly spaced and it crosses the antimeridian: x0 - L = 120 x1 - x0 = 120 R - x1 = -240 For example: Let R = -179.9, x0 = -59.9, x1 = 60.1 L = -179.89 x0 - L = 59.9 - -179.9 = 120 x1 - x0 = 60.1 - 59.9 = 120 R - x1 = -179.89 - 60.1 ~= -240 However, if they are evenly spaced and it didn't cross the antimeridian: x0 - L = 120 x1 - x0 = 120 R - x1 = 120 From this, we have a delta that is guaranteed to be significantly large enough to tell the difference reguarless of the direction the antimeridian was crossed. However, even though the spacing was even in the source projection, it isn't guaranteed in the target geographic projection. So, instead of 240, 200 is used as it significantly larger than 120 to be sure that the antimeridian was crossed but smalller than 240 to account for possible irregularities in distances when re-projecting. Also, 200 ensures latitudes are ignored for axis order handling. ******************************************************************************/ static double antimeridian_min(const double *data, const int arr_len) { double positive_min = HUGE_VAL; double min_value = HUGE_VAL; int crossed_meridian_count = 0; bool positive_meridian = false; for (int iii = 0; iii < arr_len; iii++) { if (data[iii] == HUGE_VAL) continue; int prev_iii = find_previous_index(iii, data, arr_len); // check if crossed meridian double delta = data[prev_iii] - data[iii]; // 180 -> -180 if (delta >= 200 && delta != HUGE_VAL) { if (crossed_meridian_count == 0) positive_min = min_value; crossed_meridian_count++; positive_meridian = false; // -180 -> 180 } else if (delta <= -200 && delta != HUGE_VAL) { if (crossed_meridian_count == 0) positive_min = data[iii]; crossed_meridian_count++; positive_meridian = true; } // positive meridian side min if (positive_meridian && data[iii] < positive_min) positive_min = data[iii]; // track general min value if (data[iii] < min_value) min_value = data[iii]; } if (crossed_meridian_count == 2) return positive_min; else if (crossed_meridian_count == 4) // bounds extends beyond -180/180 return -180; return min_value; } // --------------------------------------------------------------------------- // Handles the case when longitude values cross the antimeridian // when calculating the minimum. // Note: The data array must be in a linear ring. // Note: This requires a densified ring with at least 2 additional // points per edge to correctly handle global extents. // See antimeridian_min docstring for reasoning. static double antimeridian_max(const double *data, const int arr_len) { double negative_max = -HUGE_VAL; double max_value = -HUGE_VAL; bool negative_meridian = false; int crossed_meridian_count = 0; for (int iii = 0; iii < arr_len; iii++) { if (data[iii] == HUGE_VAL) continue; int prev_iii = find_previous_index(iii, data, arr_len); // check if crossed meridian double delta = data[prev_iii] - data[iii]; // 180 -> -180 if (delta >= 200 && delta != HUGE_VAL) { if (crossed_meridian_count == 0) negative_max = data[iii]; crossed_meridian_count++; negative_meridian = true; // -180 -> 180 } else if (delta <= -200 && delta != HUGE_VAL) { if (crossed_meridian_count == 0) negative_max = max_value; negative_meridian = false; crossed_meridian_count++; } // negative meridian side max if (negative_meridian && (data[iii] > negative_max || negative_max == HUGE_VAL) && data[iii] != HUGE_VAL) negative_max = data[iii]; // track general max value if ((data[iii] > max_value || max_value == HUGE_VAL) && data[iii] != HUGE_VAL) max_value = data[iii]; } if (crossed_meridian_count == 2) return negative_max; else if (crossed_meridian_count == 4) // bounds extends beyond -180/180 return 180; return max_value; } // --------------------------------------------------------------------------- // Check if the original projected bounds contains // the north pole. // This assumes that the destination CRS is geographic. static bool contains_north_pole(PJ *projobj, PJ_DIRECTION pj_direction, const double xmin, const double ymin, const double xmax, const double ymax, bool lon_lat_order) { double pole_y = 90; double pole_x = 0; if (!lon_lat_order) { pole_y = 0; pole_x = 90; } proj_trans_generic(projobj, pj_opposite_direction(pj_direction), &pole_x, sizeof(double), 1, &pole_y, sizeof(double), 1, nullptr, sizeof(double), 0, nullptr, sizeof(double), 0); if (xmin < pole_x && pole_x < xmax && ymax > pole_y && pole_y > ymin) return true; return false; } // --------------------------------------------------------------------------- // Check if the original projected bounds contains // the south pole. // This assumes that the destination CRS is geographic. static bool contains_south_pole(PJ *projobj, PJ_DIRECTION pj_direction, const double xmin, const double ymin, const double xmax, const double ymax, bool lon_lat_order) { double pole_y = -90; double pole_x = 0; if (!lon_lat_order) { pole_y = 0; pole_x = -90; } proj_trans_generic(projobj, pj_opposite_direction(pj_direction), &pole_x, sizeof(double), 1, &pole_y, sizeof(double), 1, nullptr, sizeof(double), 0, nullptr, sizeof(double), 0); if (xmin < pole_x && pole_x < xmax && ymax > pole_y && pole_y > ymin) return true; return false; } // --------------------------------------------------------------------------- // Returns source_crs of pj if pj_direction == PJ_FWD, else target_crs // Return must be freed with proj_destroy() // May return nullptr is there is no CRS attached to the PJ* object static PJ *get_input_crs(PJ_CONTEXT *transformer_ctx, PJ *transformer_pj, PJ_DIRECTION pj_direction) { if (pj_direction == PJ_FWD) return proj_get_source_crs(transformer_ctx, transformer_pj); else return proj_get_target_crs(transformer_ctx, transformer_pj); } // --------------------------------------------------------------------------- // Returns target_crs of pj if pj_direction == PJ_FWD, else source_crs // Return must be freed with proj_destroy() // May return nullptr is there is no CRS attached to the PJ* object static PJ *get_output_crs(PJ_CONTEXT *transformer_ctx, PJ *transformer_pj, PJ_DIRECTION pj_direction) { if (pj_direction == PJ_FWD) return proj_get_target_crs(transformer_ctx, transformer_pj); else return proj_get_source_crs(transformer_ctx, transformer_pj); } // --------------------------------------------------------------------------- static bool is_geocentric(PJ *crs) { return proj_get_type(crs) == PJ_TYPE_GEOCENTRIC_CRS; } // --------------------------------------------------------------------------- // Check if the target CRS of the transformation // has the longitude latitude axis order. // This assumes that the destination CRS is geographic. static int target_crs_lon_lat_order(PJ_CONTEXT *transformer_ctx, PJ *transformer_pj, PJ_DIRECTION pj_direction) { PJ *target_crs = get_output_crs(transformer_ctx, transformer_pj, pj_direction); if (target_crs == nullptr) { proj_context_log_debug(transformer_ctx, "Unable to retrieve target CRS"); return -1; } PJ *coord_system_pj; if (proj_get_type(target_crs) == PJ_TYPE_COMPOUND_CRS) { PJ *horiz_crs = proj_crs_get_sub_crs(transformer_ctx, target_crs, 0); if (!horiz_crs) return -1; coord_system_pj = proj_crs_get_coordinate_system(transformer_ctx, horiz_crs); proj_destroy(horiz_crs); } else { coord_system_pj = proj_crs_get_coordinate_system(transformer_ctx, target_crs); } proj_destroy(target_crs); if (coord_system_pj == nullptr) { proj_context_log_debug(transformer_ctx, "Unable to get target CRS coordinate system."); return -1; } const char *abbrev = nullptr; int success = proj_cs_get_axis_info(transformer_ctx, coord_system_pj, 0, nullptr, &abbrev, nullptr, nullptr, nullptr, nullptr, nullptr); proj_destroy(coord_system_pj); if (success != 1) return -1; return strcmp(abbrev, "lon") == 0 || strcmp(abbrev, "Lon") == 0; } // --------------------------------------------------------------------------- /** \brief Transform boundary. * * Transform boundary densifying the edges to account for nonlinear * transformations along these edges and extracting the outermost bounds. * * If the destination CRS is geographic, the first axis is longitude, * and xmax < xmin then the bounds crossed the antimeridian. * In this scenario there are two polygons, one on each side of the * antimeridian. The first polygon should be constructed with (xmin, ymin, 180, * ymax) and the second with (-180, ymin, xmax, ymax). * * If the destination CRS is geographic, the first axis is latitude, * and ymax < ymin then the bounds crossed the antimeridian. * In this scenario there are two polygons, one on each side of the * antimeridian. The first polygon should be constructed with (ymin, xmin, ymax, * 180) and the second with (ymin, -180, ymax, xmax). * * For transformations involving a 3D CRS, consult proj_trans_bounds_3D(). * * @param context The PJ_CONTEXT object. * @param P The PJ object representing the transformation. * @param direction The direction of the transformation. * @param xmin Minimum bounding coordinate of the first axis in source CRS * (target CRS if direction is inverse). * @param ymin Minimum bounding coordinate of the second axis in source CRS. * (target CRS if direction is inverse). * @param xmax Maximum bounding coordinate of the first axis in source CRS. * (target CRS if direction is inverse). * @param ymax Maximum bounding coordinate of the second axis in source CRS. * (target CRS if direction is inverse). * @param out_xmin Minimum bounding coordinate of the first axis in target CRS * (source CRS if direction is inverse). * @param out_ymin Minimum bounding coordinate of the second axis in target CRS. * (source CRS if direction is inverse). * @param out_xmax Maximum bounding coordinate of the first axis in target CRS. * (source CRS if direction is inverse). * @param out_ymax Maximum bounding coordinate of the second axis in target CRS. * (source CRS if direction is inverse). * @param densify_pts Recommended to use 21. This is the number of points * to use to densify the bounding polygon in the transformation. * @return an integer. 1 if successful. 0 if failures encountered. * @since 8.2 * @see proj_trans_bounds_3D() */ int proj_trans_bounds(PJ_CONTEXT *context, PJ *P, PJ_DIRECTION direction, const double xmin, const double ymin, const double xmax, const double ymax, double *out_xmin, double *out_ymin, double *out_xmax, double *out_ymax, const int densify_pts) { *out_xmin = HUGE_VAL; *out_ymin = HUGE_VAL; *out_xmax = HUGE_VAL; *out_ymax = HUGE_VAL; if (P == nullptr) { proj_log_error(P, _("NULL P object not allowed.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } if (densify_pts < 0 || densify_pts > 10000) { proj_log_error(P, _("densify_pts must be between 0-10000.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } PJ_PROJ_INFO pj_info = proj_pj_info(P); if (pj_info.id == nullptr) { proj_log_error(P, _("NULL transformation not allowed,")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } if (strcmp(pj_info.id, "noop") == 0 || direction == PJ_IDENT) { *out_xmin = xmin; *out_xmax = xmax; *out_ymin = ymin; *out_ymax = ymax; return true; } bool degree_output = proj_degree_output(P, direction) != 0; bool degree_input = proj_degree_input(P, direction) != 0; if (degree_output && densify_pts < 2) { proj_log_error( P, _("densify_pts must be at least 2 if the output is geographic.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } int side_pts = densify_pts + 1; // add one because we are densifying const int boundary_len = side_pts * 4; std::vector x_boundary_array; std::vector y_boundary_array; try { x_boundary_array.resize(boundary_len); y_boundary_array.resize(boundary_len); } catch (const std::exception &e) // memory allocation failure { proj_log_error(P, e.what()); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } double delta_x = 0; double delta_y = 0; bool north_pole_in_bounds = false; bool south_pole_in_bounds = false; bool input_lon_lat_order = false; bool output_lon_lat_order = false; if (degree_input) { int in_order_lon_lat = target_crs_lon_lat_order( context, P, pj_opposite_direction(direction)); if (in_order_lon_lat == -1) return false; input_lon_lat_order = in_order_lon_lat != 0; } if (degree_output) { int out_order_lon_lat = target_crs_lon_lat_order(context, P, direction); if (out_order_lon_lat == -1) return false; output_lon_lat_order = out_order_lon_lat != 0; north_pole_in_bounds = contains_north_pole( P, direction, xmin, ymin, xmax, ymax, output_lon_lat_order); south_pole_in_bounds = contains_south_pole( P, direction, xmin, ymin, xmax, ymax, output_lon_lat_order); } if (degree_input && xmax < xmin) { if (!input_lon_lat_order) { proj_log_error(P, _("latitude max < latitude min.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } // handle antimeridian delta_x = (xmax - xmin + 360.0) / side_pts; } else { delta_x = (xmax - xmin) / side_pts; } if (degree_input && ymax < ymin) { if (input_lon_lat_order) { proj_log_error(P, _("latitude max < latitude min.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } // handle antimeridian delta_y = (ymax - ymin + 360.0) / side_pts; } else { delta_y = (ymax - ymin) / side_pts; } // build densified bounding box // Note: must be a linear ring for antimeridian logic for (int iii = 0; iii < side_pts; iii++) { // xmin boundary y_boundary_array[iii] = ymax - iii * delta_y; x_boundary_array[iii] = xmin; // ymin boundary y_boundary_array[iii + side_pts] = ymin; x_boundary_array[iii + side_pts] = xmin + iii * delta_x; // xmax boundary y_boundary_array[iii + side_pts * 2] = ymin + iii * delta_y; x_boundary_array[iii + side_pts * 2] = xmax; // ymax boundary y_boundary_array[iii + side_pts * 3] = ymax; x_boundary_array[iii + side_pts * 3] = xmax - iii * delta_x; } proj_trans_generic(P, direction, x_boundary_array.data(), sizeof(double), boundary_len, y_boundary_array.data(), sizeof(double), boundary_len, nullptr, 0, 0, nullptr, 0, 0); if (output_lon_lat_order) { // Use GIS frienly order std::swap(x_boundary_array, y_boundary_array); } if (!degree_output) { *out_xmin = simple_min(x_boundary_array.data(), boundary_len); *out_xmax = simple_max(x_boundary_array.data(), boundary_len); *out_ymin = simple_min(y_boundary_array.data(), boundary_len); *out_ymax = simple_max(y_boundary_array.data(), boundary_len); } else if (north_pole_in_bounds) { *out_xmin = simple_min(x_boundary_array.data(), boundary_len); *out_ymin = -180; *out_xmax = 90; *out_ymax = 180; } else if (south_pole_in_bounds) { *out_xmin = -90; *out_ymin = -180; *out_xmax = simple_max(x_boundary_array.data(), boundary_len); *out_ymax = 180; } else { *out_xmin = simple_min(x_boundary_array.data(), boundary_len); *out_xmax = simple_max(x_boundary_array.data(), boundary_len); *out_ymin = antimeridian_min(y_boundary_array.data(), boundary_len); *out_ymax = antimeridian_max(y_boundary_array.data(), boundary_len); } if (output_lon_lat_order) { // Go back to CRS axis order std::swap(*out_xmin, *out_ymin); std::swap(*out_xmax, *out_ymax); } return true; } // --------------------------------------------------------------------------- /** \brief Transform boundary, taking into account 3D coordinates. * * Transform boundary densifying the edges to account for nonlinear * transformations along these edges and extracting the outermost bounds. * * Note that the current implementation is not "perfect" when the source CRS is * geocentric, the target CRS is geographic, and the input bounding box * includes the center of the Earth, a pole or the antimeridian. In those * circumstances, exact values of the latitude of longitude of discontinuity * will not be returned. * * If one of the source or target CRS of the transformation is not 3D, the * values of *out_zmin / *out_zmax may not be significant. * * For 2D or "2.5D" transformation (that is planar component is * geographic/coordinates and 3D axis is elevation), the documentation of * proj_trans_bounds() applies. * * @param context The PJ_CONTEXT object. * @param P The PJ object representing the transformation. * @param direction The direction of the transformation. * @param xmin Minimum bounding coordinate of the first axis in source CRS * (target CRS if direction is inverse). * @param ymin Minimum bounding coordinate of the second axis in source CRS. * (target CRS if direction is inverse). * @param zmin Minimum bounding coordinate of the third axis in source CRS. * (target CRS if direction is inverse). * @param xmax Maximum bounding coordinate of the first axis in source CRS. * (target CRS if direction is inverse). * @param ymax Maximum bounding coordinate of the second axis in source CRS. * (target CRS if direction is inverse). * @param zmax Maximum bounding coordinate of the third axis in source CRS. * (target CRS if direction is inverse). * @param out_xmin Minimum bounding coordinate of the first axis in target CRS * (source CRS if direction is inverse). * @param out_ymin Minimum bounding coordinate of the second axis in target CRS. * (source CRS if direction is inverse). * @param out_zmin Minimum bounding coordinate of the third axis in target CRS. * (source CRS if direction is inverse). * @param out_xmax Maximum bounding coordinate of the first axis in target CRS. * (source CRS if direction is inverse). * @param out_ymax Maximum bounding coordinate of the second axis in target CRS. * (source CRS if direction is inverse). * @param out_zmax Maximum bounding coordinate of the third axis in target CRS. * (source CRS if direction is inverse). * @param densify_pts Recommended to use 21. This is the number of points * to use to densify the bounding polygon in the transformation. * @return an integer. 1 if successful. 0 if failures encountered. * @since 9.6 */ int proj_trans_bounds_3D(PJ_CONTEXT *context, PJ *P, PJ_DIRECTION direction, const double xmin, const double ymin, const double zmin, const double xmax, const double ymax, const double zmax, double *out_xmin, double *out_ymin, double *out_zmin, double *out_xmax, double *out_ymax, double *out_zmax, const int densify_pts) { *out_xmin = HUGE_VAL; *out_ymin = HUGE_VAL; *out_zmin = HUGE_VAL; *out_xmax = HUGE_VAL; *out_ymax = HUGE_VAL; *out_zmax = HUGE_VAL; if (P == nullptr) { proj_log_error(P, _("NULL P object not allowed.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } if (densify_pts < 0 || densify_pts > 10000) { proj_log_error(P, _("densify_pts must be between 0-10000.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } PJ_PROJ_INFO pj_info = proj_pj_info(P); if (pj_info.id == nullptr) { proj_log_error(P, _("NULL transformation not allowed,")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } if (strcmp(pj_info.id, "noop") == 0 || direction == PJ_IDENT) { *out_xmin = xmin; *out_xmax = xmax; *out_ymin = ymin; *out_ymax = ymax; *out_zmin = zmin; *out_zmax = zmax; return true; } bool degree_output = proj_degree_output(P, direction) != 0; bool degree_input = proj_degree_input(P, direction) != 0; if (degree_output && densify_pts < 2) { proj_log_error( P, _("densify_pts must be at least 2 if the output is geographic.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } int side_pts = densify_pts + 1; // add one because we are densifying PJ *input_crs = get_input_crs(context, P, direction); const bool input_is_geocentric = input_crs && is_geocentric(input_crs); proj_destroy(input_crs); const int boundary_len = input_is_geocentric ? side_pts * 12 : side_pts * 4; std::vector x_boundary_array; std::vector y_boundary_array; std::vector z_boundary_array; try { x_boundary_array.resize(boundary_len); y_boundary_array.resize(boundary_len); z_boundary_array.resize(boundary_len); } catch (const std::exception &e) // memory allocation failure { proj_log_error(P, e.what()); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } double delta_x = 0; double delta_y = 0; bool north_pole_in_bounds = false; bool south_pole_in_bounds = false; bool input_lon_lat_order = false; bool output_lon_lat_order = false; if (degree_input) { int in_order_lon_lat = target_crs_lon_lat_order( context, P, pj_opposite_direction(direction)); if (in_order_lon_lat == -1) return false; input_lon_lat_order = in_order_lon_lat != 0; } if (degree_output) { int out_order_lon_lat = target_crs_lon_lat_order(context, P, direction); if (out_order_lon_lat == -1) return false; output_lon_lat_order = out_order_lon_lat != 0; north_pole_in_bounds = contains_north_pole( P, direction, xmin, ymin, xmax, ymax, output_lon_lat_order); south_pole_in_bounds = contains_south_pole( P, direction, xmin, ymin, xmax, ymax, output_lon_lat_order); } if (degree_input && xmax < xmin) { if (!input_lon_lat_order) { proj_log_error(P, _("latitude max < latitude min.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } // handle antimeridian delta_x = (xmax - xmin + 360.0) / side_pts; } else { delta_x = (xmax - xmin) / side_pts; } if (degree_input && ymax < ymin) { if (input_lon_lat_order) { proj_log_error(P, _("latitude max < latitude min.")); proj_errno_set(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); return false; } // handle antimeridian delta_y = (ymax - ymin + 360.0) / side_pts; } else { delta_y = (ymax - ymin) / side_pts; } *out_xmin = std::numeric_limits::max(); *out_ymin = std::numeric_limits::max(); *out_zmin = std::numeric_limits::max(); *out_xmax = std::numeric_limits::lowest(); *out_ymax = std::numeric_limits::lowest(); *out_zmax = std::numeric_limits::lowest(); if (input_is_geocentric) { int iii = 0; for (int iter_z = 0; iter_z < 2; ++iter_z) { const double z = iter_z == 0 ? zmin : zmax; // xmin boundary for (int i = 0; i < side_pts; i++) { y_boundary_array[iii] = ymax - i * delta_y; x_boundary_array[iii] = xmin; z_boundary_array[iii] = z; ++iii; } // ymin boundary for (int i = 0; i < side_pts; i++) { y_boundary_array[iii] = ymin; x_boundary_array[iii] = xmin + i * delta_x; z_boundary_array[iii] = z; ++iii; } // xmax boundary for (int i = 0; i < side_pts; i++) { y_boundary_array[iii] = ymin + i * delta_y; x_boundary_array[iii] = xmax; z_boundary_array[iii] = z; ++iii; } // ymax boundary for (int i = 0; i < side_pts; i++) { y_boundary_array[iii] = ymax; x_boundary_array[iii] = xmax - i * delta_x; z_boundary_array[iii] = z; ++iii; } } const double delta_z = (zmax - zmin) / side_pts; // (xmin, ymin) edge for (int i = 0; i < side_pts; i++) { x_boundary_array[iii] = xmin; y_boundary_array[iii] = ymin; z_boundary_array[iii] = zmin + i * delta_z; ++iii; } // (xmin, ymax) edge for (int i = 0; i < side_pts; i++) { x_boundary_array[iii] = xmin; y_boundary_array[iii] = ymax; z_boundary_array[iii] = zmin + i * delta_z; ++iii; } // (xmax, ymin) edge for (int i = 0; i < side_pts; i++) { x_boundary_array[iii] = xmax; y_boundary_array[iii] = ymin; z_boundary_array[iii] = zmin + i * delta_z; ++iii; } // (xmax, ymax) edge for (int i = 0; i < side_pts; i++) { x_boundary_array[iii] = xmax; y_boundary_array[iii] = ymax; z_boundary_array[iii] = zmin + i * delta_z; ++iii; } proj_trans_generic(P, direction, x_boundary_array.data(), sizeof(double), boundary_len, y_boundary_array.data(), sizeof(double), boundary_len, z_boundary_array.data(), sizeof(double), boundary_len, nullptr, 0, 0); *out_xmin = std::min(*out_xmin, simple_min(x_boundary_array.data(), boundary_len)); *out_ymin = std::min(*out_ymin, simple_min(y_boundary_array.data(), boundary_len)); *out_zmin = std::min(*out_zmin, simple_min(z_boundary_array.data(), boundary_len)); *out_xmax = std::max(*out_xmax, simple_max(x_boundary_array.data(), boundary_len)); *out_ymax = std::max(*out_ymax, simple_max(y_boundary_array.data(), boundary_len)); *out_zmax = std::max(*out_zmax, simple_max(z_boundary_array.data(), boundary_len)); } else { for (int iter_z = 0; iter_z < 2; ++iter_z) { const double z = iter_z == 0 ? zmin : zmax; // build densified bounding box // Note: must be a linear ring for antimeridian logic for (int iii = 0; iii < side_pts; iii++) { // xmin boundary y_boundary_array[iii] = ymax - iii * delta_y; x_boundary_array[iii] = xmin; z_boundary_array[iii] = z; // ymin boundary y_boundary_array[iii + side_pts] = ymin; x_boundary_array[iii + side_pts] = xmin + iii * delta_x; z_boundary_array[iii + side_pts] = z; // xmax boundary y_boundary_array[iii + side_pts * 2] = ymin + iii * delta_y; x_boundary_array[iii + side_pts * 2] = xmax; z_boundary_array[iii + side_pts * 2] = z; // ymax boundary y_boundary_array[iii + side_pts * 3] = ymax; x_boundary_array[iii + side_pts * 3] = xmax - iii * delta_x; z_boundary_array[iii + side_pts * 3] = z; } proj_trans_generic(P, direction, x_boundary_array.data(), sizeof(double), boundary_len, y_boundary_array.data(), sizeof(double), boundary_len, z_boundary_array.data(), sizeof(double), boundary_len, nullptr, 0, 0); if (output_lon_lat_order) { // Use GIS frienly order std::swap(x_boundary_array, y_boundary_array); } if (!degree_output) { *out_xmin = std::min(*out_xmin, simple_min(x_boundary_array.data(), boundary_len)); *out_xmax = std::max(*out_xmax, simple_max(x_boundary_array.data(), boundary_len)); *out_ymin = std::min(*out_ymin, simple_min(y_boundary_array.data(), boundary_len)); *out_ymax = std::max(*out_ymax, simple_max(y_boundary_array.data(), boundary_len)); } else if (north_pole_in_bounds) { *out_xmin = std::min(*out_xmin, simple_min(x_boundary_array.data(), boundary_len)); *out_ymin = -180; *out_xmax = 90; *out_ymax = 180; } else if (south_pole_in_bounds) { *out_xmin = -90; *out_ymin = -180; *out_xmax = std::max(*out_xmax, simple_max(x_boundary_array.data(), boundary_len)); *out_ymax = 180; } else { *out_xmin = std::min(*out_xmin, simple_min(x_boundary_array.data(), boundary_len)); *out_xmax = std::max(*out_xmax, simple_max(x_boundary_array.data(), boundary_len)); *out_ymin = std::min( *out_ymin, antimeridian_min(y_boundary_array.data(), boundary_len)); *out_ymax = std::max( *out_ymax, antimeridian_max(y_boundary_array.data(), boundary_len)); } *out_zmin = std::min( *out_zmin, simple_min(z_boundary_array.data(), boundary_len)); *out_zmax = std::max( *out_zmax, simple_max(z_boundary_array.data(), boundary_len)); } } if (output_lon_lat_order) { // Go back to CRS axis order std::swap(*out_xmin, *out_ymin); std::swap(*out_xmax, *out_ymax); } return true; } proj-9.6.0/src/transformations/000775 001754 001755 00000000000 14764566152 016433 5ustar00e012349e012349000000 000000 proj-9.6.0/src/transformations/affine.cpp000664 001754 001755 00000017541 14764566077 020405 0ustar00e012349e012349000000 000000 /************************************************************************ * Copyright (c) 2018, 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 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(affine, "Affine transformation"); PROJ_HEAD(geogoffset, "Geographic Offset"); namespace { // anonymous namespace struct pj_affine_coeffs { double s11; double s12; double s13; double s21; double s22; double s23; double s31; double s32; double s33; double tscale; }; } // anonymous namespace namespace { // anonymous namespace struct pj_opaque_affine { double xoff; double yoff; double zoff; double toff; struct pj_affine_coeffs forward; struct pj_affine_coeffs reverse; }; } // anonymous namespace static void forward_4d(PJ_COORD &coo, PJ *P) { const struct pj_opaque_affine *Q = (const struct pj_opaque_affine *)P->opaque; const struct pj_affine_coeffs *C = &(Q->forward); const double x = coo.xyz.x; const double y = coo.xyz.y; const double z = coo.xyz.z; coo.xyzt.x = Q->xoff + C->s11 * x + C->s12 * y + C->s13 * z; coo.xyzt.y = Q->yoff + C->s21 * x + C->s22 * y + C->s23 * z; coo.xyzt.z = Q->zoff + C->s31 * x + C->s32 * y + C->s33 * z; coo.xyzt.t = Q->toff + C->tscale * coo.xyzt.t; } static PJ_XYZ forward_3d(PJ_LPZ lpz, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.lpz = lpz; forward_4d(point, P); return point.xyz; } static PJ_XY forward_2d(PJ_LP lp, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.lp = lp; forward_4d(point, P); return point.xy; } static void reverse_4d(PJ_COORD &coo, PJ *P) { const struct pj_opaque_affine *Q = (const struct pj_opaque_affine *)P->opaque; const struct pj_affine_coeffs *C = &(Q->reverse); double x = coo.xyzt.x - Q->xoff; double y = coo.xyzt.y - Q->yoff; double z = coo.xyzt.z - Q->zoff; coo.xyzt.x = C->s11 * x + C->s12 * y + C->s13 * z; coo.xyzt.y = C->s21 * x + C->s22 * y + C->s23 * z; coo.xyzt.z = C->s31 * x + C->s32 * y + C->s33 * z; coo.xyzt.t = C->tscale * (coo.xyzt.t - Q->toff); } static PJ_LPZ reverse_3d(PJ_XYZ xyz, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.xyz = xyz; reverse_4d(point, P); return point.lpz; } static PJ_LP reverse_2d(PJ_XY xy, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.xy = xy; reverse_4d(point, P); return point.lp; } static struct pj_opaque_affine *initQ() { struct pj_opaque_affine *Q = static_cast( calloc(1, sizeof(struct pj_opaque_affine))); if (nullptr == Q) return nullptr; /* default values */ Q->forward.s11 = 1.0; Q->forward.s22 = 1.0; Q->forward.s33 = 1.0; Q->forward.tscale = 1.0; Q->reverse.s11 = 1.0; Q->reverse.s22 = 1.0; Q->reverse.s33 = 1.0; Q->reverse.tscale = 1.0; return Q; } static void computeReverseParameters(PJ *P) { struct pj_opaque_affine *Q = (struct pj_opaque_affine *)P->opaque; /* cf * https://en.wikipedia.org/wiki/Invertible_matrix#Inversion_of_3_%C3%97_3_matrices */ const double a = Q->forward.s11; const double b = Q->forward.s12; const double c = Q->forward.s13; const double d = Q->forward.s21; const double e = Q->forward.s22; const double f = Q->forward.s23; const double g = Q->forward.s31; const double h = Q->forward.s32; const double i = Q->forward.s33; const double A = e * i - f * h; const double B = -(d * i - f * g); const double C = (d * h - e * g); const double D = -(b * i - c * h); const double E = (a * i - c * g); const double F = -(a * h - b * g); const double G = b * f - c * e; const double H = -(a * f - c * d); const double I = a * e - b * d; const double det = a * A + b * B + c * C; if (det == 0.0 || Q->forward.tscale == 0.0) { if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_DEBUG) { proj_log_debug(P, "matrix non invertible"); } P->inv4d = nullptr; P->inv3d = nullptr; P->inv = nullptr; } else { Q->reverse.s11 = A / det; Q->reverse.s12 = D / det; Q->reverse.s13 = G / det; Q->reverse.s21 = B / det; Q->reverse.s22 = E / det; Q->reverse.s23 = H / det; Q->reverse.s31 = C / det; Q->reverse.s32 = F / det; Q->reverse.s33 = I / det; Q->reverse.tscale = 1.0 / Q->forward.tscale; } } PJ *PJ_TRANSFORMATION(affine, 0 /* no need for ellipsoid */) { struct pj_opaque_affine *Q = initQ(); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = (void *)Q; P->fwd4d = forward_4d; P->inv4d = reverse_4d; P->fwd3d = forward_3d; P->inv3d = reverse_3d; P->fwd = forward_2d; P->inv = reverse_2d; P->left = PJ_IO_UNITS_WHATEVER; P->right = PJ_IO_UNITS_WHATEVER; /* read args */ Q->xoff = pj_param(P->ctx, P->params, "dxoff").f; Q->yoff = pj_param(P->ctx, P->params, "dyoff").f; Q->zoff = pj_param(P->ctx, P->params, "dzoff").f; Q->toff = pj_param(P->ctx, P->params, "dtoff").f; if (pj_param(P->ctx, P->params, "ts11").i) { Q->forward.s11 = pj_param(P->ctx, P->params, "ds11").f; } Q->forward.s12 = pj_param(P->ctx, P->params, "ds12").f; Q->forward.s13 = pj_param(P->ctx, P->params, "ds13").f; Q->forward.s21 = pj_param(P->ctx, P->params, "ds21").f; if (pj_param(P->ctx, P->params, "ts22").i) { Q->forward.s22 = pj_param(P->ctx, P->params, "ds22").f; } Q->forward.s23 = pj_param(P->ctx, P->params, "ds23").f; Q->forward.s31 = pj_param(P->ctx, P->params, "ds31").f; Q->forward.s32 = pj_param(P->ctx, P->params, "ds32").f; if (pj_param(P->ctx, P->params, "ts33").i) { Q->forward.s33 = pj_param(P->ctx, P->params, "ds33").f; } if (pj_param(P->ctx, P->params, "ttscale").i) { Q->forward.tscale = pj_param(P->ctx, P->params, "dtscale").f; } computeReverseParameters(P); return P; } /* Arcsecond to radians */ #define ARCSEC_TO_RAD (DEG_TO_RAD / 3600.0) PJ *PJ_TRANSFORMATION(geogoffset, 0 /* no need for ellipsoid */) { struct pj_opaque_affine *Q = initQ(); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = (void *)Q; P->fwd4d = forward_4d; P->inv4d = reverse_4d; P->fwd3d = forward_3d; P->inv3d = reverse_3d; P->fwd = forward_2d; P->inv = reverse_2d; P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; /* read args */ Q->xoff = pj_param(P->ctx, P->params, "ddlon").f * ARCSEC_TO_RAD; Q->yoff = pj_param(P->ctx, P->params, "ddlat").f * ARCSEC_TO_RAD; Q->zoff = pj_param(P->ctx, P->params, "ddh").f; return P; } proj-9.6.0/src/transformations/defmodel.cpp000664 001754 001755 00000036520 14764566077 020732 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to deformation model * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ #define PROJ_COMPILATION #include "defmodel.hpp" #include "filemanager.hpp" #include "grids.hpp" #include "proj_internal.h" #include #include #include #include PROJ_HEAD(defmodel, "Deformation model"); using namespace DeformationModel; namespace { struct Grid : public GridPrototype { PJ_CONTEXT *ctx; const NS_PROJ::GenericShiftGrid *realGrid; mutable bool checkedHorizontal = false; mutable bool checkedVertical = false; mutable int sampleX = 0; mutable int sampleY = 1; mutable int sampleZ = 2; Grid(PJ_CONTEXT *ctxIn, const NS_PROJ::GenericShiftGrid *realGridIn) : ctx(ctxIn), realGrid(realGridIn) { minx = realGridIn->extentAndRes().west; miny = realGridIn->extentAndRes().south; resx = realGridIn->extentAndRes().resX; resy = realGridIn->extentAndRes().resY; width = realGridIn->width(); height = realGridIn->height(); } bool checkHorizontal(const std::string &expectedUnit) const { if (!checkedHorizontal) { const auto samplesPerPixel = realGrid->samplesPerPixel(); if (samplesPerPixel < 2) { pj_log(ctx, PJ_LOG_ERROR, "grid %s has not enough samples", realGrid->name().c_str()); return false; } bool foundDescX = false; bool foundDescY = false; bool foundDesc = false; for (int i = 0; i < samplesPerPixel; i++) { const auto desc = realGrid->description(i); if (desc == "east_offset") { sampleX = i; foundDescX = true; } else if (desc == "north_offset") { sampleY = i; foundDescY = true; } if (!desc.empty()) { foundDesc = true; } } if (foundDesc && (!foundDescX || !foundDescY)) { pj_log(ctx, PJ_LOG_ERROR, "grid %s : Found band description, " "but not the ones expected", realGrid->name().c_str()); return false; } const auto unit = realGrid->unit(sampleX); if (!unit.empty() && unit != expectedUnit) { pj_log(ctx, PJ_LOG_ERROR, "grid %s : Only unit=%s " "currently handled for this mode", realGrid->name().c_str(), expectedUnit.c_str()); return false; } checkedHorizontal = true; } return true; } bool getLongLatOffset(int ix, int iy, double &longOffsetRadian, double &latOffsetRadian) const { if (!checkHorizontal(STR_DEGREE)) { return false; } float longOffsetDeg; float latOffsetDeg; if (!realGrid->valueAt(ix, iy, sampleX, longOffsetDeg) || !realGrid->valueAt(ix, iy, sampleY, latOffsetDeg)) { return false; } longOffsetRadian = longOffsetDeg * DEG_TO_RAD; latOffsetRadian = latOffsetDeg * DEG_TO_RAD; return true; } bool getZOffset(int ix, int iy, double &zOffset) const { if (!checkedVertical) { const auto samplesPerPixel = realGrid->samplesPerPixel(); if (samplesPerPixel == 1) { sampleZ = 0; } else if (samplesPerPixel < 3) { pj_log(ctx, PJ_LOG_ERROR, "grid %s has not enough samples", realGrid->name().c_str()); return false; } bool foundDesc = false; bool foundDescZ = false; for (int i = 0; i < samplesPerPixel; i++) { const auto desc = realGrid->description(i); if (desc == "vertical_offset") { sampleZ = i; foundDescZ = true; } if (!desc.empty()) { foundDesc = true; } } if (foundDesc && !foundDescZ) { pj_log(ctx, PJ_LOG_ERROR, "grid %s : Found band description, " "but not the ones expected", realGrid->name().c_str()); return false; } const auto unit = realGrid->unit(sampleZ); if (!unit.empty() && unit != STR_METRE) { pj_log(ctx, PJ_LOG_ERROR, "grid %s : Only unit=metre currently " "handled for this mode", realGrid->name().c_str()); return false; } checkedVertical = true; } float zOffsetFloat = 0.0f; const bool ret = realGrid->valueAt(ix, iy, sampleZ, zOffsetFloat); zOffset = zOffsetFloat; return ret; } bool getEastingNorthingOffset(int ix, int iy, double &eastingOffset, double &northingOffset) const { if (!checkHorizontal(STR_METRE)) { return false; } float eastingOffsetFloat = 0.0f; float northingOffsetFloat = 0.0f; const bool ret = realGrid->valueAt(ix, iy, sampleX, eastingOffsetFloat) && realGrid->valueAt(ix, iy, sampleY, northingOffsetFloat); eastingOffset = eastingOffsetFloat; northingOffset = northingOffsetFloat; return ret; } bool getLongLatZOffset(int ix, int iy, double &longOffsetRadian, double &latOffsetRadian, double &zOffset) const { return getLongLatOffset(ix, iy, longOffsetRadian, latOffsetRadian) && getZOffset(ix, iy, zOffset); } bool getEastingNorthingZOffset(int ix, int iy, double &eastingOffset, double &northingOffset, double &zOffset) const { return getEastingNorthingOffset(ix, iy, eastingOffset, northingOffset) && getZOffset(ix, iy, zOffset); } #ifdef DEBUG_DEFMODEL std::string name() const { return realGrid->name(); } #endif private: Grid(const Grid &) = delete; Grid &operator=(const Grid &) = delete; }; struct GridSet : public GridSetPrototype { PJ_CONTEXT *ctx; std::unique_ptr realGridSet; std::map> mapGrids{}; GridSet(PJ_CONTEXT *ctxIn, std::unique_ptr &&realGridSetIn) : ctx(ctxIn), realGridSet(std::move(realGridSetIn)) {} const Grid *gridAt(double x, double y) { const NS_PROJ::GenericShiftGrid *realGrid = realGridSet->gridAt(x, y); if (!realGrid) { return nullptr; } auto iter = mapGrids.find(realGrid); if (iter == mapGrids.end()) { iter = mapGrids .insert(std::pair>( realGrid, std::unique_ptr(new Grid(ctx, realGrid)))) .first; } return iter->second.get(); } private: GridSet(const GridSet &) = delete; GridSet &operator=(const GridSet &) = delete; }; struct EvaluatorIface : public EvaluatorIfacePrototype { PJ_CONTEXT *ctx; PJ *cart; EvaluatorIface(PJ_CONTEXT *ctxIn, PJ *cartIn) : ctx(ctxIn), cart(cartIn) {} ~EvaluatorIface() { if (cart) cart->destructor(cart, 0); } std::unique_ptr open(const std::string &filename) { auto realGridSet = NS_PROJ::GenericShiftGridSet::open(ctx, filename); if (!realGridSet) { pj_log(ctx, PJ_LOG_ERROR, "cannot open %s", filename.c_str()); return nullptr; } return std::unique_ptr( new GridSet(ctx, std::move(realGridSet))); } bool isGeographicCRS(const std::string &crsDef) { PJ *P = proj_create(ctx, crsDef.c_str()); if (P == nullptr) { return true; // reasonable default value } const auto type = proj_get_type(P); bool ret = (type == PJ_TYPE_GEOGRAPHIC_2D_CRS || type == PJ_TYPE_GEOGRAPHIC_3D_CRS); proj_destroy(P); return ret; } void geographicToGeocentric(double lam, double phi, double height, double a, double b, double /*es*/, double &X, double &Y, double &Z) { (void)a; (void)b; assert(cart->a == a); assert(cart->b == b); PJ_LPZ lpz; lpz.lam = lam; lpz.phi = phi; lpz.z = height; PJ_XYZ xyz = cart->fwd3d(lpz, cart); X = xyz.x; Y = xyz.y; Z = xyz.z; } void geocentricToGeographic(double X, double Y, double Z, double a, double b, double /*es*/, double &lam, double &phi, double &height) { (void)a; (void)b; assert(cart->a == a); assert(cart->b == b); PJ_XYZ xyz; xyz.x = X; xyz.y = Y; xyz.z = Z; PJ_LPZ lpz = cart->inv3d(xyz, cart); lam = lpz.lam; phi = lpz.phi; height = lpz.z; } #ifdef DEBUG_DEFMODEL void log(const std::string &msg) { pj_log(ctx, PJ_LOG_TRACE, "%s", msg.c_str()); } #endif private: EvaluatorIface(const EvaluatorIface &) = delete; EvaluatorIface &operator=(const EvaluatorIface &) = delete; }; struct defmodelData { std::unique_ptr> evaluator{}; EvaluatorIface evaluatorIface; explicit defmodelData(PJ_CONTEXT *ctx, PJ *cart) : evaluatorIface(ctx, cart) {} defmodelData(const defmodelData &) = delete; defmodelData &operator=(const defmodelData &) = delete; }; } // namespace static PJ *destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; auto Q = static_cast(P->opaque); delete Q; P->opaque = nullptr; return pj_default_destructor(P, errlev); } static void forward_4d(PJ_COORD &coo, PJ *P) { auto *Q = (struct defmodelData *)P->opaque; if (coo.xyzt.t == HUGE_VAL) { coo = proj_coord_error(); proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_MISSING_TIME); return; } if (!Q->evaluator->forward(Q->evaluatorIface, coo.xyzt.x, coo.xyzt.y, coo.xyzt.z, coo.xyzt.t, coo.xyzt.x, coo.xyzt.y, coo.xyzt.z)) { coo = proj_coord_error(); } } static void reverse_4d(PJ_COORD &coo, PJ *P) { auto *Q = (struct defmodelData *)P->opaque; if (coo.xyzt.t == HUGE_VAL) { coo = proj_coord_error(); proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_MISSING_TIME); return; } if (!Q->evaluator->inverse(Q->evaluatorIface, coo.xyzt.x, coo.xyzt.y, coo.xyzt.z, coo.xyzt.t, coo.xyzt.x, coo.xyzt.y, coo.xyzt.z)) { coo = proj_coord_error(); } } // Function called by proj_assign_context() when a new context is assigned to // an existing PJ object. Mostly to deal with objects being passed between // threads. static void reassign_context(PJ *P, PJ_CONTEXT *ctx) { auto *Q = (struct defmodelData *)P->opaque; if (Q->evaluatorIface.ctx != ctx) { Q->evaluator->clearGridCache(); Q->evaluatorIface.ctx = ctx; } } PJ *PJ_TRANSFORMATION(defmodel, 1) { // Pass a dummy ellipsoid definition that will be overridden just afterwards auto cart = proj_create(P->ctx, "+proj=cart +a=1"); if (cart == nullptr) return destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def(P, cart); auto Q = new defmodelData(P->ctx, cart); P->opaque = (void *)Q; P->destructor = destructor; P->reassign_context = reassign_context; const char *model = pj_param(P->ctx, P->params, "smodel").s; if (!model) { proj_log_error(P, _("+model= should be specified.")); return destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } auto file = NS_PROJ::FileManager::open_resource_file(P->ctx, model); if (nullptr == file) { proj_log_error(P, _("Cannot open %s"), model); return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0, SEEK_END); unsigned long long size = file->tell(); // Arbitrary threshold to avoid ingesting an arbitrarily large JSON file, // that could be a denial of service risk. 10 MB should be sufficiently // large for any valid use ! if (size > 10 * 1024 * 1024) { proj_log_error(P, _("File %s too large"), model); return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0); std::string jsonStr; jsonStr.resize(static_cast(size)); if (file->read(&jsonStr[0], jsonStr.size()) != jsonStr.size()) { proj_log_error(P, _("Cannot read %s"), model); return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } try { Q->evaluator.reset(new Evaluator( MasterFile::parse(jsonStr), Q->evaluatorIface, P->a, P->b)); } catch (const std::exception &e) { proj_log_error(P, _("invalid model: %s"), e.what()); return destructor(P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } P->fwd4d = forward_4d; P->inv4d = reverse_4d; if (Q->evaluator->isGeographicCRS()) { P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; } else { P->left = PJ_IO_UNITS_PROJECTED; P->right = PJ_IO_UNITS_PROJECTED; } return P; } proj-9.6.0/src/transformations/defmodel.hpp000664 001754 001755 00000056205 14764566077 020741 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to deformation model * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ /** This file implements the gridded deformation model proposol of * https://docs.google.com/document/d/1wiyrAmzqh8MZlzHSp3wf594Ob_M1LeFtDA5swuzvLZY * It is written in a generic way, independent of the rest of PROJ * infrastructure. * * Verbose debugging info can be turned on by setting the DEBUG_DEFMODEL macro */ #ifndef DEFMODEL_HPP #define DEFMODEL_HPP #ifdef PROJ_COMPILATION #include "proj/internal/include_nlohmann_json.hpp" #else #include "nlohmann/json.hpp" #endif #include #include #include #include #include #include #include #ifndef DEFORMATON_MODEL_NAMESPACE #define DEFORMATON_MODEL_NAMESPACE DeformationModel #endif #include "defmodel_exceptions.hpp" namespace DEFORMATON_MODEL_NAMESPACE { using json = nlohmann::json; // --------------------------------------------------------------------------- /** Spatial extent as a bounding box. */ class SpatialExtent { public: /** Parse the provided object as an extent. * * @throws ParsingException in case of error. */ static SpatialExtent parse(const json &j); double minx() const { return mMinx; } double miny() const { return mMiny; } double maxx() const { return mMaxx; } double maxy() const { return mMaxy; } double minxNormalized(bool bIsGeographic) const { return bIsGeographic ? mMinxRad : mMinx; } double minyNormalized(bool bIsGeographic) const { return bIsGeographic ? mMinyRad : mMiny; } double maxxNormalized(bool bIsGeographic) const { return bIsGeographic ? mMaxxRad : mMaxx; } double maxyNormalized(bool bIsGeographic) const { return bIsGeographic ? mMaxyRad : mMaxy; } protected: friend class MasterFile; friend class Component; SpatialExtent() = default; private: double mMinx = std::numeric_limits::quiet_NaN(); double mMiny = std::numeric_limits::quiet_NaN(); double mMaxx = std::numeric_limits::quiet_NaN(); double mMaxy = std::numeric_limits::quiet_NaN(); double mMinxRad = std::numeric_limits::quiet_NaN(); double mMinyRad = std::numeric_limits::quiet_NaN(); double mMaxxRad = std::numeric_limits::quiet_NaN(); double mMaxyRad = std::numeric_limits::quiet_NaN(); }; // --------------------------------------------------------------------------- /** Epoch */ class Epoch { public: /** Constructor from a ISO 8601 date-time. May throw ParsingException */ explicit Epoch(const std::string &dt = std::string()); /** Return ISO 8601 date-time */ const std::string &toString() const { return mDt; } /** Return decimal year */ double toDecimalYear() const; private: std::string mDt{}; double mDecimalYear = 0; }; // --------------------------------------------------------------------------- /** Component of a deformation model. */ class Component { public: /** Parse the provided object as a component. * * @throws ParsingException in case of error. */ static Component parse(const json &j); /** Get a text description of the component. */ const std::string &description() const { return mDescription; } /** Get the region within which the component is defined. Outside this * region the component evaluates to 0. */ const SpatialExtent &extent() const { return mSpatialExtent; } /** Get the displacement parameters defined by the component, one of * "none", "horizontal", "vertical", and "3d". The "none" option allows * for a component which defines uncertainty with different grids to those * defining displacement. */ const std::string &displacementType() const { return mDisplacementType; } /** Get the uncertainty parameters defined by the component, * one of "none", "horizontal", "vertical", "3d". */ const std::string &uncertaintyType() const { return mUncertaintyType; } /** Get the horizontal uncertainty to use if it is not defined explicitly * in the spatial model. */ double horizontalUncertainty() const { return mHorizontalUncertainty; } /** Get the vertical uncertainty to use if it is not defined explicitly in * the spatial model. */ double verticalUncertainty() const { return mVerticalUncertainty; } struct SpatialModel { /** Specifies the type of the spatial model data file. Initially it * is proposed that only "GeoTIFF" is supported. */ std::string type{}; /** How values in model should be interpolated. This proposal will * support "bilinear" and "geocentric_bilinear". */ std::string interpolationMethod{}; /** Specifies location of the spatial model GeoTIFF file relative to * the master JSON file. */ std::string filename{}; /** A hex encoded MD5 checksum of the grid file that can be used to * validate that it is the correct version of the file. */ std::string md5Checksum{}; }; /** Get the spatial model. */ const SpatialModel &spatialModel() const { return mSpatialModel; } /** Generic type for a type function */ struct TimeFunction { std::string type{}; virtual ~TimeFunction(); virtual double evaluateAt(double dt) const = 0; protected: TimeFunction() = default; }; struct ConstantTimeFunction : public TimeFunction { virtual double evaluateAt(double dt) const override; }; struct VelocityTimeFunction : public TimeFunction { /** Date/time at which the velocity function is zero. */ Epoch referenceEpoch{}; virtual double evaluateAt(double dt) const override; }; struct StepTimeFunction : public TimeFunction { /** Epoch at which the step function transitions from 0 to 1. */ Epoch stepEpoch{}; virtual double evaluateAt(double dt) const override; }; struct ReverseStepTimeFunction : public TimeFunction { /** Epoch at which the reverse step function transitions from 1. to 0 */ Epoch stepEpoch{}; virtual double evaluateAt(double dt) const override; }; struct PiecewiseTimeFunction : public TimeFunction { /** One of "zero", "constant", and "linear", defines the behavior of * the function before the first defined epoch */ std::string beforeFirst{}; /** One of "zero", "constant", and "linear", defines the behavior of * the function after the last defined epoch */ std::string afterLast{}; struct EpochScaleFactorTuple { /** Defines the date/time of the data point. */ Epoch epoch{}; /** Function value at the above epoch */ double scaleFactor = std::numeric_limits::quiet_NaN(); }; /** A sorted array data points each defined by two elements. * The array is sorted in order of increasing epoch. * Note: where the time function includes a step it is represented by * two consecutive data points with the same epoch. The first defines * the scale factor that applies before the epoch and the second the * scale factor that applies after the epoch. */ std::vector model{}; virtual double evaluateAt(double dt) const override; }; struct ExponentialTimeFunction : public TimeFunction { /** The date/time at which the exponential decay starts. */ Epoch referenceEpoch{}; /** The date/time at which the exponential decay ends. */ Epoch endEpoch{}; /** The relaxation constant in years. */ double relaxationConstant = std::numeric_limits::quiet_NaN(); /** The scale factor that applies before the reference epoch. */ double beforeScaleFactor = std::numeric_limits::quiet_NaN(); /** Initial scale factor. */ double initialScaleFactor = std::numeric_limits::quiet_NaN(); /** The scale factor the exponential function approaches. */ double finalScaleFactor = std::numeric_limits::quiet_NaN(); virtual double evaluateAt(double dt) const override; }; /** Get the time function. */ const TimeFunction *timeFunction() const { return mTimeFunction.get(); } private: Component() = default; std::string mDescription{}; SpatialExtent mSpatialExtent{}; std::string mDisplacementType{}; std::string mUncertaintyType{}; double mHorizontalUncertainty = std::numeric_limits::quiet_NaN(); double mVerticalUncertainty = std::numeric_limits::quiet_NaN(); SpatialModel mSpatialModel{}; std::unique_ptr mTimeFunction{}; }; Component::TimeFunction::~TimeFunction() = default; // --------------------------------------------------------------------------- /** Master file of a deformation model. */ class MasterFile { public: /** Parse the provided serialized JSON content and return an object. * * @throws ParsingException in case of error. */ static std::unique_ptr parse(const std::string &text); /** Get file type. Should always be "deformation_model_master_file" */ const std::string &fileType() const { return mFileType; } /** Get the version of the format. At time of writing, only "1.0" is known */ const std::string &formatVersion() const { return mFormatVersion; } /** Get brief descriptive name of the deformation model. */ const std::string &name() const { return mName; } /** Get a string identifying the version of the deformation model. * The format for specifying version is defined by the agency * responsible for the deformation model. */ const std::string &version() const { return mVersion; } /** Get a string identifying the license of the file. * e.g "Create Commons Attribution 4.0 International" */ const std::string &license() const { return mLicense; } /** Get a text description of the model. Intended to be longer than name() */ const std::string &description() const { return mDescription; } /** Get a text description of the model. Intended to be longer than name() */ const std::string &publicationDate() const { return mPublicationDate; } /** Basic information on the agency responsible for the model. */ struct Authority { std::string name{}; std::string url{}; std::string address{}; std::string email{}; }; /** Get basic information on the agency responsible for the model. */ const Authority &authority() const { return mAuthority; } /** Hyperlink related to the model. */ struct Link { /** URL holding the information */ std::string href{}; /** Relationship to the dataset. e.g. "about", "source", "license", * "metadata" */ std::string rel{}; /** Mime type */ std::string type{}; /** Description of the link */ std::string title{}; }; /** Get links to related information. */ const std::vector links() const { return mLinks; } /** Get a string identifying the source CRS. That is the coordinate * reference system to which the deformation model applies. Typically * "EPSG:XXXX" */ const std::string &sourceCRS() const { return mSourceCRS; } /** Get a string identifying the target CRS. That is, for a time * dependent coordinate transformation, the coordinate reference * system resulting from applying the deformation. * Typically "EPSG:XXXX" */ const std::string &targetCRS() const { return mTargetCRS; } /** Get a string identifying the definition CRS. That is, the * coordinate reference system used to define the component spatial * models. Typically "EPSG:XXXX" */ const std::string &definitionCRS() const { return mDefinitionCRS; } /** Get the nominal reference epoch of the deformation model. Formatted * as a ISO-8601 date-time. This is not necessarily used to calculate * the deformation model - each component defines its own time function. */ const std::string &referenceEpoch() const { return mReferenceEpoch; } /** Get the epoch at which the uncertainties of the deformation model * are calculated. Formatted as a ISO-8601 date-time. */ const std::string &uncertaintyReferenceEpoch() const { return mUncertaintyReferenceEpoch; } /** Unit of horizontal offsets. Only "metre" and "degree" are supported. */ const std::string &horizontalOffsetUnit() const { return mHorizontalOffsetUnit; } /** Unit of vertical offsets. Only "metre" is supported. */ const std::string &verticalOffsetUnit() const { return mVerticalOffsetUnit; } /** Type of horizontal uncertainty. e.g "circular 95% confidence limit" */ const std::string &horizontalUncertaintyType() const { return mHorizontalUncertaintyType; } /** Unit of horizontal uncertainty. Only "metre" is supported. */ const std::string &horizontalUncertaintyUnit() const { return mHorizontalUncertaintyUnit; } /** Type of vertical uncertainty. e.g "circular 95% confidence limit" */ const std::string &verticalUncertaintyType() const { return mVerticalUncertaintyType; } /** Unit of vertical uncertainty. Only "metre" is supported. */ const std::string &verticalUncertaintyUnit() const { return mVerticalUncertaintyUnit; } /** Defines how the horizontal offsets are applied to geographic * coordinates. Only "addition" and "geocentric" are supported */ const std::string &horizontalOffsetMethod() const { return mHorizontalOffsetMethod; } /** Get the region within which the deformation model is defined. * It cannot be calculated outside this region */ const SpatialExtent &extent() const { return mSpatialExtent; } /** Defines the range of times for which the model is valid, specified * by a first and a last value. The deformation model is undefined for * dates outside this range. */ struct TimeExtent { Epoch first{}; Epoch last{}; }; /** Get the range of times for which the model is valid. */ const TimeExtent &timeExtent() const { return mTimeExtent; } /** Get an array of the components comprising the deformation model. */ const std::vector &components() const { return mComponents; } private: MasterFile() = default; std::string mFileType{}; std::string mFormatVersion{}; std::string mName{}; std::string mVersion{}; std::string mLicense{}; std::string mDescription{}; std::string mPublicationDate{}; Authority mAuthority{}; std::vector mLinks{}; std::string mSourceCRS{}; std::string mTargetCRS{}; std::string mDefinitionCRS{}; std::string mReferenceEpoch{}; std::string mUncertaintyReferenceEpoch{}; std::string mHorizontalOffsetUnit{}; std::string mVerticalOffsetUnit{}; std::string mHorizontalUncertaintyType{}; std::string mHorizontalUncertaintyUnit{}; std::string mVerticalUncertaintyType{}; std::string mVerticalUncertaintyUnit{}; std::string mHorizontalOffsetMethod{}; SpatialExtent mSpatialExtent{}; TimeExtent mTimeExtent{}; std::vector mComponents{}; }; // --------------------------------------------------------------------------- /** Prototype for a Grid used by GridSet. Intended to be implemented * by user code */ struct GridPrototype { double minx = 0; double miny = 0; double resx = 0; double resy = 0; int width = 0; int height = 0; // cppcheck-suppress functionStatic bool getLongLatOffset(int /*ix*/, int /*iy*/, double & /*longOffsetRadian*/, double & /*latOffsetRadian*/) const { throw UnimplementedException("getLongLatOffset unimplemented"); } // cppcheck-suppress functionStatic bool getZOffset(int /*ix*/, int /*iy*/, double & /*zOffset*/) const { throw UnimplementedException("getZOffset unimplemented"); } // cppcheck-suppress functionStatic bool getEastingNorthingOffset(int /*ix*/, int /*iy*/, double & /*eastingOffset*/, double & /*northingOffset*/) const { throw UnimplementedException("getEastingNorthingOffset unimplemented"); } // cppcheck-suppress functionStatic bool getLongLatZOffset(int /*ix*/, int /*iy*/, double & /*longOffsetRadian*/, double & /*latOffsetRadian*/, double & /*zOffset*/) const { throw UnimplementedException("getLongLatZOffset unimplemented"); #if 0 return getLongLatOffset(ix, iy, longOffsetRadian, latOffsetRadian) && getZOffset(ix, iy, zOffset); #endif } // cppcheck-suppress functionStatic bool getEastingNorthingZOffset(int /*ix*/, int /*iy*/, double & /*eastingOffset*/, double & /*northingOffset*/, double & /*zOffset*/) const { throw UnimplementedException("getEastingNorthingOffset unimplemented"); #if 0 return getEastingNorthingOffset(ix, iy, eastingOffset, northingOffset) && getZOffset(ix, iy, zOffset); #endif } #ifdef DEBUG_DEFMODEL std::string name() const { throw UnimplementedException("name() unimplemented"); } #endif }; // --------------------------------------------------------------------------- /** Prototype for a GridSet used by EvaluatorIface. Intended to be implemented * by user code */ template struct GridSetPrototype { // The return pointer should remain "stable" over time for a given grid // of a GridSet. // cppcheck-suppress functionStatic const Grid *gridAt(double /*x */, double /* y */) { throw UnimplementedException("gridAt unimplemented"); } }; // --------------------------------------------------------------------------- /** Prototype for a EvaluatorIface used by Evaluator. Intended to be implemented * by user code */ template > struct EvaluatorIfacePrototype { std::unique_ptr open(const std::string & /* filename*/) { throw UnimplementedException("open unimplemented"); } // cppcheck-suppress functionStatic void geographicToGeocentric(double /* lam */, double /* phi */, double /* height*/, double /* a */, double /* b */, double /*es*/, double & /* X */, double & /* Y */, double & /* Z */) { throw UnimplementedException("geographicToGeocentric unimplemented"); } // cppcheck-suppress functionStatic void geocentricToGeographic(double /* X */, double /* Y */, double /* Z */, double /* a */, double /* b */, double /*es*/, double & /* lam */, double & /* phi */, double & /* height*/) { throw UnimplementedException("geocentricToGeographic unimplemented"); } // cppcheck-suppress functionStatic bool isGeographicCRS(const std::string & /* crsDef */) { throw UnimplementedException("isGeographicCRS unimplemented"); } #ifdef DEBUG_DEFMODEL void log(const std::string & /* msg */) { throw UnimplementedException("log unimplemented"); } #endif }; // --------------------------------------------------------------------------- /** Internal class to offer caching services over a Component */ template struct ComponentEx; // --------------------------------------------------------------------------- /** Class to evaluate the transformation of a coordinate */ template , class EvaluatorIface = EvaluatorIfacePrototype<>> class Evaluator { public: /** Constructor. May throw EvaluatorException */ explicit Evaluator(std::unique_ptr &&model, EvaluatorIface &iface, double a, double b); /** Evaluate displacement of a position given by (x,y,z,t) and * return it in (x_out,y_out_,z_out). * For geographic CRS (only supported at that time), x must be a * longitude, and y a latitude. */ bool forward(EvaluatorIface &iface, double x, double y, double z, double t, double &x_out, double &y_out, double &z_out) { return forward(iface, x, y, z, t, false, x_out, y_out, z_out); } /** Apply inverse transformation. */ bool inverse(EvaluatorIface &iface, double x, double y, double z, double t, double &x_out, double &y_out, double &z_out); /** Clear grid cache */ void clearGridCache(); /** Return whether the definition CRS is a geographic CRS */ bool isGeographicCRS() const { return mIsGeographicCRS; } private: std::unique_ptr mModel; const double mA; const double mB; const double mEs; const bool mIsHorizontalUnitDegree; /* degree vs metre */ const bool mIsAddition; /* addition vs geocentric */ const bool mIsGeographicCRS; bool forward(EvaluatorIface &iface, double x, double y, double z, double t, bool forInverseComputation, double &x_out, double &y_out, double &z_out); std::vector>> mComponents{}; }; // --------------------------------------------------------------------------- } // namespace DEFORMATON_MODEL_NAMESPACE // --------------------------------------------------------------------------- #include "defmodel_impl.hpp" #endif // DEFMODEL_HPP proj-9.6.0/src/transformations/defmodel_exceptions.hpp000664 001754 001755 00000005663 14764566077 023204 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to deformation model * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ #ifndef DEFORMATON_MODEL_NAMESPACE #error "Should be included only by defmodel.hpp" #endif #include namespace DEFORMATON_MODEL_NAMESPACE { // --------------------------------------------------------------------------- /** Parsing exception. */ class ParsingException : public std::exception { public: explicit ParsingException(const std::string &msg) : msg_(msg) {} const char *what() const noexcept override; private: std::string msg_; }; const char *ParsingException::what() const noexcept { return msg_.c_str(); } // --------------------------------------------------------------------------- class UnimplementedException : public std::exception { public: explicit UnimplementedException(const std::string &msg) : msg_(msg) {} const char *what() const noexcept override; private: std::string msg_; }; const char *UnimplementedException::what() const noexcept { return msg_.c_str(); } // --------------------------------------------------------------------------- /** Evaluator exception. */ class EvaluatorException : public std::exception { public: explicit EvaluatorException(const std::string &msg) : msg_(msg) {} const char *what() const noexcept override; private: std::string msg_; }; const char *EvaluatorException::what() const noexcept { return msg_.c_str(); } // --------------------------------------------------------------------------- } // namespace DEFORMATON_MODEL_NAMESPACE proj-9.6.0/src/transformations/defmodel_impl.hpp000664 001754 001755 00000141520 14764566077 021755 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to deformation model * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ #ifndef DEFORMATON_MODEL_NAMESPACE #error "Should be included only by defmodel.hpp" #endif namespace DEFORMATON_MODEL_NAMESPACE { // --------------------------------------------------------------------------- static const std::string STR_DEGREE("degree"); static const std::string STR_METRE("metre"); static const std::string STR_ADDITION("addition"); static const std::string STR_GEOCENTRIC("geocentric"); static const std::string STR_BILINEAR("bilinear"); static const std::string STR_GEOCENTRIC_BILINEAR("geocentric_bilinear"); static const std::string STR_NONE("none"); static const std::string STR_HORIZONTAL("horizontal"); static const std::string STR_VERTICAL("vertical"); static const std::string STR_3D("3d"); constexpr double DEFMODEL_PI = 3.14159265358979323846; constexpr double DEG_TO_RAD_CONSTANT = 3.14159265358979323846 / 180.; inline constexpr double DegToRad(double d) { return d * DEG_TO_RAD_CONSTANT; } // --------------------------------------------------------------------------- enum class DisplacementType { NONE, HORIZONTAL, VERTICAL, THREE_D }; // --------------------------------------------------------------------------- /** Internal class to offer caching services over a Grid */ template struct GridEx { const Grid *grid; bool smallResx; // lesser than one degree double sinhalfresx; double coshalfresx; double sinresy; double cosresy; int last_ix0 = -1; int last_iy0 = -1; double dX00 = 0; double dY00 = 0; double dZ00 = 0; double dX01 = 0; double dY01 = 0; double dZ01 = 0; double dX10 = 0; double dY10 = 0; double dZ10 = 0; double dX11 = 0; double dY11 = 0; double dZ11 = 0; double sinphi0 = 0; double cosphi0 = 0; double sinphi1 = 0; double cosphi1 = 0; explicit GridEx(const Grid *gridIn) : grid(gridIn), smallResx(grid->resx < DegToRad(1)), sinhalfresx(sin(grid->resx / 2)), coshalfresx(cos(grid->resx / 2)), sinresy(sin(grid->resy)), cosresy(cos(grid->resy)) {} // Return geocentric offset (dX, dY, dZ) relative to a point // where x0 = -resx / 2 inline void getBilinearGeocentric(int ix0, int iy0, double de00, double dn00, double de01, double dn01, double de10, double dn10, double de11, double dn11, double m00, double m01, double m10, double m11, double &dX, double &dY, double &dZ) { // If interpolating in the same cell as before, then we can skip // the recomputation of dXij, dYij and dZij if (ix0 != last_ix0 || iy0 != last_iy0) { last_ix0 = ix0; if (iy0 != last_iy0) { const double y0 = grid->miny + iy0 * grid->resy; sinphi0 = sin(y0); cosphi0 = cos(y0); // Use trigonometric formulas to avoid new calls to sin/cos sinphi1 = /* sin(y0+grid->resyRad) = */ sinphi0 * cosresy + cosphi0 * sinresy; cosphi1 = /* cos(y0+grid->resyRad) = */ cosphi0 * cosresy - sinphi0 * sinresy; last_iy0 = iy0; } // Using "traditional" formulas to convert from easting, northing // offsets to geocentric offsets const double sinlam00 = -sinhalfresx; const double coslam00 = coshalfresx; const double sinphi00 = sinphi0; const double cosphi00 = cosphi0; const double dn00sinphi00 = dn00 * sinphi00; dX00 = -de00 * sinlam00 - dn00sinphi00 * coslam00; dY00 = de00 * coslam00 - dn00sinphi00 * sinlam00; dZ00 = dn00 * cosphi00; const double sinlam01 = -sinhalfresx; const double coslam01 = coshalfresx; const double sinphi01 = sinphi1; const double cosphi01 = cosphi1; const double dn01sinphi01 = dn01 * sinphi01; dX01 = -de01 * sinlam01 - dn01sinphi01 * coslam01; dY01 = de01 * coslam01 - dn01sinphi01 * sinlam01; dZ01 = dn01 * cosphi01; const double sinlam10 = sinhalfresx; const double coslam10 = coshalfresx; const double sinphi10 = sinphi0; const double cosphi10 = cosphi0; const double dn10sinphi10 = dn10 * sinphi10; dX10 = -de10 * sinlam10 - dn10sinphi10 * coslam10; dY10 = de10 * coslam10 - dn10sinphi10 * sinlam10; dZ10 = dn10 * cosphi10; const double sinlam11 = sinhalfresx; const double coslam11 = coshalfresx; const double sinphi11 = sinphi1; const double cosphi11 = cosphi1; const double dn11sinphi11 = dn11 * sinphi11; dX11 = -de11 * sinlam11 - dn11sinphi11 * coslam11; dY11 = de11 * coslam11 - dn11sinphi11 * sinlam11; dZ11 = dn11 * cosphi11; } dX = m00 * dX00 + m01 * dX01 + m10 * dX10 + m11 * dX11; dY = m00 * dY00 + m01 * dY01 + m10 * dY10 + m11 * dY11; dZ = m00 * dZ00 + m01 * dZ01 + m10 * dZ10 + m11 * dZ11; } }; // --------------------------------------------------------------------------- /** Internal class to offer caching services over a Component */ template struct ComponentEx { const Component &component; const bool isBilinearInterpolation; /* bilinear vs geocentric_bilinear */ const DisplacementType displacementType; // Cache std::unique_ptr gridSet{}; std::map> mapGrids{}; private: mutable double mCachedDt = 0; mutable double mCachedValue = 0; static DisplacementType getDisplacementType(const std::string &s) { if (s == STR_HORIZONTAL) return DisplacementType::HORIZONTAL; if (s == STR_VERTICAL) return DisplacementType::VERTICAL; if (s == STR_3D) return DisplacementType::THREE_D; return DisplacementType::NONE; } public: explicit ComponentEx(const Component &componentIn) : component(componentIn), isBilinearInterpolation( componentIn.spatialModel().interpolationMethod == STR_BILINEAR), displacementType(getDisplacementType(component.displacementType())) {} double evaluateAt(double dt) const { if (dt == mCachedDt) return mCachedValue; mCachedDt = dt; mCachedValue = component.timeFunction()->evaluateAt(dt); return mCachedValue; } void clearGridCache() { gridSet.reset(); mapGrids.clear(); } }; // --------------------------------------------------------------------------- /** Converts a ISO8601 date-time string, formatted as "YYYY-MM-DDTHH:MM:SSZ", * into a decimal year. * Leap years are taken into account, but not leap seconds. */ static double ISO8601ToDecimalYear(const std::string &dt) { int year, month, day, hour, min, sec; if (sscanf(dt.c_str(), "%04d-%02d-%02dT%02d:%02d:%02dZ", &year, &month, &day, &hour, &min, &sec) != 6 || year < 1582 || // Start of Gregorian calendar month < 1 || month > 12 || day < 1 || day > 31 || hour < 0 || hour >= 24 || min < 0 || min >= 60 || sec < 0 || sec >= 61) { throw ParsingException("Wrong formatting / invalid date-time for " + dt); } const bool isLeapYear = (((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0); // Given the intended use, we omit leap seconds... const int month_table[2][12] = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; int dayInYear = day - 1; for (int m = 1; m < month; m++) { dayInYear += month_table[isLeapYear ? 1 : 0][m - 1]; } if (day > month_table[isLeapYear ? 1 : 0][month - 1]) { throw ParsingException("Wrong formatting / invalid date-time for " + dt); } return year + (dayInYear * 86400 + hour * 3600 + min * 60 + sec) / (isLeapYear ? 86400. * 366 : 86400. * 365); } // --------------------------------------------------------------------------- Epoch::Epoch(const std::string &dt) : mDt(dt) { if (!dt.empty()) { mDecimalYear = ISO8601ToDecimalYear(dt); } } // --------------------------------------------------------------------------- double Epoch::toDecimalYear() const { return mDecimalYear; } // --------------------------------------------------------------------------- static std::string getString(const json &j, const char *key, bool optional) { if (!j.contains(key)) { if (optional) { return std::string(); } throw ParsingException(std::string("Missing \"") + key + "\" key"); } const json v = j[key]; if (!v.is_string()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a string"); } return v.get(); } static std::string getReqString(const json &j, const char *key) { return getString(j, key, false); } static std::string getOptString(const json &j, const char *key) { return getString(j, key, true); } // --------------------------------------------------------------------------- static double getDouble(const json &j, const char *key, bool optional) { if (!j.contains(key)) { if (optional) { return std::numeric_limits::quiet_NaN(); } throw ParsingException(std::string("Missing \"") + key + "\" key"); } const json v = j[key]; if (!v.is_number()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a number"); } return v.get(); } static double getReqDouble(const json &j, const char *key) { return getDouble(j, key, false); } static double getOptDouble(const json &j, const char *key) { return getDouble(j, key, true); } // --------------------------------------------------------------------------- static json getObjectMember(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } const json obj = j[key]; if (!obj.is_object()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a object"); } return obj; } // --------------------------------------------------------------------------- static json getArrayMember(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } const json obj = j[key]; if (!obj.is_array()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a array"); } return obj; } // --------------------------------------------------------------------------- std::unique_ptr MasterFile::parse(const std::string &text) { std::unique_ptr dmmf(new MasterFile()); json j; try { j = json::parse(text); } catch (const std::exception &e) { throw ParsingException(e.what()); } if (!j.is_object()) { throw ParsingException("Not an object"); } dmmf->mFileType = getReqString(j, "file_type"); dmmf->mFormatVersion = getReqString(j, "format_version"); dmmf->mName = getOptString(j, "name"); dmmf->mVersion = getOptString(j, "version"); dmmf->mLicense = getOptString(j, "license"); dmmf->mDescription = getOptString(j, "description"); dmmf->mPublicationDate = getOptString(j, "publication_date"); if (j.contains("authority")) { const json jAuthority = j["authority"]; if (!jAuthority.is_object()) { throw ParsingException("authority is not a object"); } dmmf->mAuthority.name = getOptString(jAuthority, "name"); dmmf->mAuthority.url = getOptString(jAuthority, "url"); dmmf->mAuthority.address = getOptString(jAuthority, "address"); dmmf->mAuthority.email = getOptString(jAuthority, "email"); } if (j.contains("links")) { const json jLinks = j["links"]; if (!jLinks.is_array()) { throw ParsingException("links is not an array"); } for (const json &jLink : jLinks) { if (!jLink.is_object()) { throw ParsingException("links[] item is not an object"); } Link link; link.href = getOptString(jLink, "href"); link.rel = getOptString(jLink, "rel"); link.type = getOptString(jLink, "type"); link.title = getOptString(jLink, "title"); dmmf->mLinks.emplace_back(std::move(link)); } } dmmf->mSourceCRS = getReqString(j, "source_crs"); dmmf->mTargetCRS = getReqString(j, "target_crs"); dmmf->mDefinitionCRS = getReqString(j, "definition_crs"); if (dmmf->mSourceCRS != dmmf->mDefinitionCRS) { throw ParsingException( "source_crs != definition_crs not currently supported"); } dmmf->mReferenceEpoch = getOptString(j, "reference_epoch"); dmmf->mUncertaintyReferenceEpoch = getOptString(j, "uncertainty_reference_epoch"); dmmf->mHorizontalOffsetUnit = getOptString(j, "horizontal_offset_unit"); if (!dmmf->mHorizontalOffsetUnit.empty() && dmmf->mHorizontalOffsetUnit != STR_METRE && dmmf->mHorizontalOffsetUnit != STR_DEGREE) { throw ParsingException("Unsupported value for horizontal_offset_unit"); } dmmf->mVerticalOffsetUnit = getOptString(j, "vertical_offset_unit"); if (!dmmf->mVerticalOffsetUnit.empty() && dmmf->mVerticalOffsetUnit != STR_METRE) { throw ParsingException("Unsupported value for vertical_offset_unit"); } dmmf->mHorizontalUncertaintyType = getOptString(j, "horizontal_uncertainty_type"); dmmf->mHorizontalUncertaintyUnit = getOptString(j, "horizontal_uncertainty_unit"); dmmf->mVerticalUncertaintyType = getOptString(j, "vertical_uncertainty_type"); dmmf->mVerticalUncertaintyUnit = getOptString(j, "vertical_uncertainty_unit"); dmmf->mHorizontalOffsetMethod = getOptString(j, "horizontal_offset_method"); if (!dmmf->mHorizontalOffsetMethod.empty() && dmmf->mHorizontalOffsetMethod != STR_ADDITION && dmmf->mHorizontalOffsetMethod != STR_GEOCENTRIC) { throw ParsingException( "Unsupported value for horizontal_offset_method"); } dmmf->mSpatialExtent = SpatialExtent::parse(getObjectMember(j, "extent")); const json jTimeExtent = getObjectMember(j, "time_extent"); dmmf->mTimeExtent.first = Epoch(getReqString(jTimeExtent, "first")); dmmf->mTimeExtent.last = Epoch(getReqString(jTimeExtent, "last")); const json jComponents = getArrayMember(j, "components"); for (const json &jComponent : jComponents) { dmmf->mComponents.emplace_back(Component::parse(jComponent)); const auto &comp = dmmf->mComponents.back(); if (comp.displacementType() == STR_HORIZONTAL || comp.displacementType() == STR_3D) { if (dmmf->mHorizontalOffsetUnit.empty()) { throw ParsingException("horizontal_offset_unit should be " "defined as there is a component with " "displacement_type = horizontal/3d"); } if (dmmf->mHorizontalOffsetMethod.empty()) { throw ParsingException("horizontal_offset_method should be " "defined as there is a component with " "displacement_type = horizontal/3d"); } } if (comp.displacementType() == STR_VERTICAL || comp.displacementType() == STR_3D) { if (dmmf->mVerticalOffsetUnit.empty()) { throw ParsingException("vertical_offset_unit should be defined " "as there is a component with " "displacement_type = vertical/3d"); } } if (dmmf->mHorizontalOffsetUnit == STR_DEGREE && comp.spatialModel().interpolationMethod != STR_BILINEAR) { throw ParsingException("horizontal_offset_unit = degree can only " "be used with interpolation_method = " "bilinear"); } } if (dmmf->mHorizontalOffsetUnit == STR_DEGREE && dmmf->mHorizontalOffsetMethod != STR_ADDITION) { throw ParsingException("horizontal_offset_unit = degree can only be " "used with horizontal_offset_method = addition"); } return dmmf; } // --------------------------------------------------------------------------- SpatialExtent SpatialExtent::parse(const json &j) { SpatialExtent ex; const std::string type = getReqString(j, "type"); if (type != "bbox") { throw ParsingException("unsupported type of extent"); } const json jParameter = getObjectMember(j, "parameters"); const json jBbox = getArrayMember(jParameter, "bbox"); if (jBbox.size() != 4) { throw ParsingException("bbox is not an array of 4 numeric elements"); } for (int i = 0; i < 4; i++) { if (!jBbox[i].is_number()) { throw ParsingException( "bbox is not an array of 4 numeric elements"); } } ex.mMinx = jBbox[0].get(); ex.mMiny = jBbox[1].get(); ex.mMaxx = jBbox[2].get(); ex.mMaxy = jBbox[3].get(); ex.mMinxRad = DegToRad(ex.mMinx); ex.mMinyRad = DegToRad(ex.mMiny); ex.mMaxxRad = DegToRad(ex.mMaxx); ex.mMaxyRad = DegToRad(ex.mMaxy); return ex; } // --------------------------------------------------------------------------- Component Component::parse(const json &j) { Component comp; if (!j.is_object()) { throw ParsingException("component is not an object"); } comp.mDescription = getOptString(j, "description"); comp.mSpatialExtent = SpatialExtent::parse(getObjectMember(j, "extent")); comp.mDisplacementType = getReqString(j, "displacement_type"); if (comp.mDisplacementType != STR_NONE && comp.mDisplacementType != STR_HORIZONTAL && comp.mDisplacementType != STR_VERTICAL && comp.mDisplacementType != STR_3D) { throw ParsingException("Unsupported value for displacement_type"); } comp.mUncertaintyType = getReqString(j, "uncertainty_type"); comp.mHorizontalUncertainty = getOptDouble(j, "horizontal_uncertainty"); comp.mVerticalUncertainty = getOptDouble(j, "vertical_uncertainty"); const json jSpatialModel = getObjectMember(j, "spatial_model"); comp.mSpatialModel.type = getReqString(jSpatialModel, "type"); comp.mSpatialModel.interpolationMethod = getReqString(jSpatialModel, "interpolation_method"); if (comp.mSpatialModel.interpolationMethod != STR_BILINEAR && comp.mSpatialModel.interpolationMethod != STR_GEOCENTRIC_BILINEAR) { throw ParsingException("Unsupported value for interpolation_method"); } comp.mSpatialModel.filename = getReqString(jSpatialModel, "filename"); comp.mSpatialModel.md5Checksum = getOptString(jSpatialModel, "md5_checksum"); const json jTimeFunction = getObjectMember(j, "time_function"); std::string timeFunctionType = getReqString(jTimeFunction, "type"); const json jParameters = timeFunctionType == "constant" ? json() : getObjectMember(jTimeFunction, "parameters"); if (timeFunctionType == "constant") { std::unique_ptr tf(new ConstantTimeFunction()); tf->type = std::move(timeFunctionType); comp.mTimeFunction = std::move(tf); } else if (timeFunctionType == "velocity") { std::unique_ptr tf(new VelocityTimeFunction()); tf->type = std::move(timeFunctionType); tf->referenceEpoch = Epoch(getReqString(jParameters, "reference_epoch")); comp.mTimeFunction = std::move(tf); } else if (timeFunctionType == "step") { std::unique_ptr tf(new StepTimeFunction()); tf->type = std::move(timeFunctionType); tf->stepEpoch = Epoch(getReqString(jParameters, "step_epoch")); comp.mTimeFunction = std::move(tf); } else if (timeFunctionType == "reverse_step") { std::unique_ptr tf( new ReverseStepTimeFunction()); tf->type = std::move(timeFunctionType); tf->stepEpoch = Epoch(getReqString(jParameters, "step_epoch")); comp.mTimeFunction = std::move(tf); } else if (timeFunctionType == "piecewise") { std::unique_ptr tf(new PiecewiseTimeFunction()); tf->type = std::move(timeFunctionType); tf->beforeFirst = getReqString(jParameters, "before_first"); if (tf->beforeFirst != "zero" && tf->beforeFirst != "constant" && tf->beforeFirst != "linear") { throw ParsingException("Unsupported value for before_first"); } tf->afterLast = getReqString(jParameters, "after_last"); if (tf->afterLast != "zero" && tf->afterLast != "constant" && tf->afterLast != "linear") { throw ParsingException("Unsupported value for afterLast"); } const json jModel = getArrayMember(jParameters, "model"); for (const json &jModelElt : jModel) { if (!jModelElt.is_object()) { throw ParsingException("model[] element is not an object"); } PiecewiseTimeFunction::EpochScaleFactorTuple tuple; tuple.epoch = Epoch(getReqString(jModelElt, "epoch")); tuple.scaleFactor = getReqDouble(jModelElt, "scale_factor"); tf->model.emplace_back(std::move(tuple)); } comp.mTimeFunction = std::move(tf); } else if (timeFunctionType == "exponential") { std::unique_ptr tf( new ExponentialTimeFunction()); tf->type = std::move(timeFunctionType); tf->referenceEpoch = Epoch(getReqString(jParameters, "reference_epoch")); tf->endEpoch = Epoch(getOptString(jParameters, "end_epoch")); tf->relaxationConstant = getReqDouble(jParameters, "relaxation_constant"); if (tf->relaxationConstant <= 0.0) { throw ParsingException("Invalid value for relaxation_constant"); } tf->beforeScaleFactor = getReqDouble(jParameters, "before_scale_factor"); tf->initialScaleFactor = getReqDouble(jParameters, "initial_scale_factor"); tf->finalScaleFactor = getReqDouble(jParameters, "final_scale_factor"); comp.mTimeFunction = std::move(tf); } else { throw ParsingException("Unsupported type of time function: " + timeFunctionType); } return comp; } // --------------------------------------------------------------------------- double Component::ConstantTimeFunction::evaluateAt(double) const { return 1.0; } // --------------------------------------------------------------------------- double Component::VelocityTimeFunction::evaluateAt(double dt) const { return dt - referenceEpoch.toDecimalYear(); } // --------------------------------------------------------------------------- double Component::StepTimeFunction::evaluateAt(double dt) const { if (dt < stepEpoch.toDecimalYear()) return 0.0; return 1.0; } // --------------------------------------------------------------------------- double Component::ReverseStepTimeFunction::evaluateAt(double dt) const { if (dt < stepEpoch.toDecimalYear()) return -1.0; return 0.0; } // --------------------------------------------------------------------------- double Component::PiecewiseTimeFunction::evaluateAt(double dt) const { if (model.empty()) { return 0.0; } const double dt1 = model[0].epoch.toDecimalYear(); if (dt < dt1) { if (beforeFirst == "zero") return 0.0; if (beforeFirst == "constant" || model.size() == 1) return model[0].scaleFactor; // linear const double f1 = model[0].scaleFactor; const double dt2 = model[1].epoch.toDecimalYear(); const double f2 = model[1].scaleFactor; if (dt1 == dt2) return f1; return (f1 * (dt2 - dt) + f2 * (dt - dt1)) / (dt2 - dt1); } for (size_t i = 1; i < model.size(); i++) { const double dtip1 = model[i].epoch.toDecimalYear(); if (dt < dtip1) { const double dti = model[i - 1].epoch.toDecimalYear(); const double fip1 = model[i].scaleFactor; const double fi = model[i - 1].scaleFactor; return (fi * (dtip1 - dt) + fip1 * (dt - dti)) / (dtip1 - dti); } } if (afterLast == "zero") { return 0.0; } if (afterLast == "constant" || model.size() == 1) return model.back().scaleFactor; // linear const double dtnm1 = model[model.size() - 2].epoch.toDecimalYear(); const double fnm1 = model[model.size() - 2].scaleFactor; const double dtn = model.back().epoch.toDecimalYear(); const double fn = model.back().scaleFactor; if (dtnm1 == dtn) return fn; return (fnm1 * (dtn - dt) + fn * (dt - dtnm1)) / (dtn - dtnm1); } // --------------------------------------------------------------------------- double Component::ExponentialTimeFunction::evaluateAt(double dt) const { const double t0 = referenceEpoch.toDecimalYear(); if (dt < t0) return beforeScaleFactor; if (!endEpoch.toString().empty()) { dt = std::min(dt, endEpoch.toDecimalYear()); } return initialScaleFactor + (finalScaleFactor - initialScaleFactor) * (1.0 - std::exp(-(dt - t0) / relaxationConstant)); } // --------------------------------------------------------------------------- inline void DeltaEastingNorthingToLongLat(double cosphi, double de, double dn, double a, double b, double es, double &dlam, double &dphi) { const double oneMinuX = es * (1 - cosphi * cosphi); const double X = 1 - oneMinuX; const double sqrtX = sqrt(X); #if 0 // With es of Earth, absolute/relative error is at most 2e-8 // const double sqrtX = 1 - 0.5 * oneMinuX * (1 + 0.25 * oneMinuX); #endif dlam = de * sqrtX / (a * cosphi); dphi = dn * a * sqrtX * X / (b * b); } // --------------------------------------------------------------------------- template Evaluator::Evaluator( std::unique_ptr &&model, EvaluatorIface &iface, double a, double b) : mModel(std::move(model)), mA(a), mB(b), mEs(1 - (b * b) / (a * a)), mIsHorizontalUnitDegree(mModel->horizontalOffsetUnit() == STR_DEGREE), mIsAddition(mModel->horizontalOffsetMethod() == STR_ADDITION), mIsGeographicCRS(iface.isGeographicCRS(mModel->definitionCRS())) { if (!mIsGeographicCRS && mIsHorizontalUnitDegree) { throw EvaluatorException( "definition_crs = projected CRS and " "horizontal_offset_unit = degree are incompatible"); } if (!mIsGeographicCRS && !mIsAddition) { throw EvaluatorException( "definition_crs = projected CRS and " "horizontal_offset_method = geocentric are incompatible"); } mComponents.reserve(mModel->components().size()); for (const auto &comp : mModel->components()) { mComponents.emplace_back(std::unique_ptr>( new ComponentEx(comp))); if (!mIsGeographicCRS && !mComponents.back()->isBilinearInterpolation) { throw EvaluatorException( "definition_crs = projected CRS and " "interpolation_method = geocentric_bilinear are incompatible"); } } } // --------------------------------------------------------------------------- template void Evaluator::clearGridCache() { for (auto &comp : mComponents) { comp->clearGridCache(); } } // --------------------------------------------------------------------------- #ifdef DEBUG_DEFMODEL static std::string shortName(const Component &comp) { const auto &desc = comp.description(); return desc.substr(0, desc.find('\n')) + " (" + comp.spatialModel().filename + ")"; } static std::string toString(double val) { char buffer[32]; snprintf(buffer, sizeof(buffer), "%.9g", val); return buffer; } #endif // --------------------------------------------------------------------------- static bool bboxCheck(double &x, double &y, bool forInverseComputation, const double minx, const double miny, const double maxx, const double maxy, const double EPS, const double extraMarginForInverse) { if (x < minx - EPS || x > maxx + EPS || y < miny - EPS || y > maxy + EPS) { if (!forInverseComputation) { return false; } // In case of iterative computation for inverse, allow to be a // slightly bit outside of the grid and clamp to the edges bool xOk = false; if (x >= minx - EPS && x <= maxx + EPS) { xOk = true; } else if (x > minx - extraMarginForInverse && x < minx) { x = minx; xOk = true; } else if (x < maxx + extraMarginForInverse && x > maxx) { x = maxx; xOk = true; } bool yOk = false; if (y >= miny - EPS && y <= maxy + EPS) { yOk = true; } else if (y > miny - extraMarginForInverse && y < miny) { y = miny; yOk = true; } else if (y < maxy + extraMarginForInverse && y > maxy) { y = maxy; yOk = true; } return xOk && yOk; } return true; } // --------------------------------------------------------------------------- template bool Evaluator::forward( EvaluatorIface &iface, double x, double y, double z, double t, bool forInverseComputation, double &x_out, double &y_out, double &z_out) { x_out = x; y_out = y; z_out = z; const double EPS = mIsGeographicCRS ? 1e-10 : 1e-5; // Check against global model spatial extent, potentially wrapping // longitude to match { const auto &extent = mModel->extent(); const double minx = extent.minxNormalized(mIsGeographicCRS); const double maxx = extent.maxxNormalized(mIsGeographicCRS); if (mIsGeographicCRS) { while (x < minx - EPS) { x += 2.0 * DEFMODEL_PI; } while (x > maxx + EPS) { x -= 2.0 * DEFMODEL_PI; } } const double miny = extent.minyNormalized(mIsGeographicCRS); const double maxy = extent.maxyNormalized(mIsGeographicCRS); const double extraMarginForInverse = mIsGeographicCRS ? DegToRad(0.1) : 10000; if (!bboxCheck(x, y, forInverseComputation, minx, miny, maxx, maxy, EPS, extraMarginForInverse)) { #ifdef DEBUG_DEFMODEL iface.log("Calculation point " + toString(x) + "," + toString(y) + " is outside the extents of the deformation model"); #endif return false; } } // Check against global model temporal extent { const auto &timeExtent = mModel->timeExtent(); if (t < timeExtent.first.toDecimalYear() || t > timeExtent.last.toDecimalYear()) { #ifdef DEBUG_DEFMODEL iface.log("Calculation epoch " + toString(t) + " is not valid for the deformation model"); #endif return false; } } // For mIsHorizontalUnitDegree double dlam = 0; double dphi = 0; // For !mIsHorizontalUnitDegree double de = 0; double dn = 0; double dz = 0; bool sincosphiInitialized = false; double sinphi = 0; double cosphi = 0; for (auto &compEx : mComponents) { const auto &comp = compEx->component; if (compEx->displacementType == DisplacementType::NONE) { continue; } const auto &extent = comp.extent(); double xForGrid = x; double yForGrid = y; const double minx = extent.minxNormalized(mIsGeographicCRS); const double maxx = extent.maxxNormalized(mIsGeographicCRS); const double miny = extent.minyNormalized(mIsGeographicCRS); const double maxy = extent.maxyNormalized(mIsGeographicCRS); const double extraMarginForInverse = 0; if (!bboxCheck(xForGrid, yForGrid, forInverseComputation, minx, miny, maxx, maxy, EPS, extraMarginForInverse)) { #ifdef DEBUG_DEFMODEL iface.log( "Skipping component " + shortName(comp) + " due to point being outside of its declared spatial extent."); #endif continue; } xForGrid = std::max(xForGrid, minx); yForGrid = std::max(yForGrid, miny); xForGrid = std::min(xForGrid, maxx); yForGrid = std::min(yForGrid, maxy); const auto tfactor = compEx->evaluateAt(t); if (tfactor == 0.0) { #ifdef DEBUG_DEFMODEL iface.log("Skipping component " + shortName(comp) + " due to time function evaluating to 0."); #endif continue; } #ifdef DEBUG_DEFMODEL iface.log("Entering component " + shortName(comp) + " with time function evaluating to " + toString(tfactor) + "."); #endif if (compEx->gridSet == nullptr) { compEx->gridSet = iface.open(comp.spatialModel().filename); if (compEx->gridSet == nullptr) { return false; } } const Grid *grid = compEx->gridSet->gridAt(xForGrid, yForGrid); if (grid == nullptr) { #ifdef DEBUG_DEFMODEL iface.log("Skipping component " + shortName(comp) + " due to no grid found for this point in the grid set."); #endif continue; } if (grid->width < 2 || grid->height < 2) { return false; } const double ix_d = (xForGrid - grid->minx) / grid->resx; const double iy_d = (yForGrid - grid->miny) / grid->resy; if (ix_d < -EPS || iy_d < -EPS || ix_d + 1 >= grid->width + EPS || iy_d + 1 >= grid->height + EPS) { #ifdef DEBUG_DEFMODEL iface.log("Skipping component " + shortName(comp) + " due to point being outside of actual spatial extent of " "grid " + grid->name() + "."); #endif continue; } const int ix0 = std::min(static_cast(ix_d), grid->width - 2); const int iy0 = std::min(static_cast(iy_d), grid->height - 2); const int ix1 = ix0 + 1; const int iy1 = iy0 + 1; const double frct_x = ix_d - ix0; const double frct_y = iy_d - iy0; const double one_minus_frct_x = 1. - frct_x; const double one_minus_frct_y = 1. - frct_y; const double m00 = one_minus_frct_x * one_minus_frct_y; const double m10 = frct_x * one_minus_frct_y; const double m01 = one_minus_frct_x * frct_y; const double m11 = frct_x * frct_y; if (compEx->displacementType == DisplacementType::VERTICAL) { double dz00 = 0; double dz01 = 0; double dz10 = 0; double dz11 = 0; if (!grid->getZOffset(ix0, iy0, dz00) || !grid->getZOffset(ix1, iy0, dz10) || !grid->getZOffset(ix0, iy1, dz01) || !grid->getZOffset(ix1, iy1, dz11)) { return false; } const double dzInterp = dz00 * m00 + dz01 * m01 + dz10 * m10 + dz11 * m11; #ifdef DEBUG_DEFMODEL iface.log("tfactor * dzInterp = " + toString(tfactor) + " * " + toString(dzInterp) + "."); #endif dz += tfactor * dzInterp; } else if (mIsHorizontalUnitDegree) { double dx00 = 0; double dy00 = 0; double dx01 = 0; double dy01 = 0; double dx10 = 0; double dy10 = 0; double dx11 = 0; double dy11 = 0; if (compEx->displacementType == DisplacementType::HORIZONTAL) { if (!grid->getLongLatOffset(ix0, iy0, dx00, dy00) || !grid->getLongLatOffset(ix1, iy0, dx10, dy10) || !grid->getLongLatOffset(ix0, iy1, dx01, dy01) || !grid->getLongLatOffset(ix1, iy1, dx11, dy11)) { return false; } } else /* if (compEx->displacementType == DisplacementType::THREE_D) */ { double dz00 = 0; double dz01 = 0; double dz10 = 0; double dz11 = 0; if (!grid->getLongLatZOffset(ix0, iy0, dx00, dy00, dz00) || !grid->getLongLatZOffset(ix1, iy0, dx10, dy10, dz10) || !grid->getLongLatZOffset(ix0, iy1, dx01, dy01, dz01) || !grid->getLongLatZOffset(ix1, iy1, dx11, dy11, dz11)) { return false; } const double dzInterp = dz00 * m00 + dz01 * m01 + dz10 * m10 + dz11 * m11; #ifdef DEBUG_DEFMODEL iface.log("tfactor * dzInterp = " + toString(tfactor) + " * " + toString(dzInterp) + "."); #endif dz += tfactor * dzInterp; } const double dlamInterp = dx00 * m00 + dx01 * m01 + dx10 * m10 + dx11 * m11; const double dphiInterp = dy00 * m00 + dy01 * m01 + dy10 * m10 + dy11 * m11; #ifdef DEBUG_DEFMODEL iface.log("tfactor * dlamInterp = " + toString(tfactor) + " * " + toString(dlamInterp) + "."); iface.log("tfactor * dphiInterp = " + toString(tfactor) + " * " + toString(dphiInterp) + "."); #endif dlam += tfactor * dlamInterp; dphi += tfactor * dphiInterp; } else /* horizontal unit is metre */ { double de00 = 0; double dn00 = 0; double de01 = 0; double dn01 = 0; double de10 = 0; double dn10 = 0; double de11 = 0; double dn11 = 0; if (compEx->displacementType == DisplacementType::HORIZONTAL) { if (!grid->getEastingNorthingOffset(ix0, iy0, de00, dn00) || !grid->getEastingNorthingOffset(ix1, iy0, de10, dn10) || !grid->getEastingNorthingOffset(ix0, iy1, de01, dn01) || !grid->getEastingNorthingOffset(ix1, iy1, de11, dn11)) { return false; } } else /* if (compEx->displacementType == DisplacementType::THREE_D) */ { double dz00 = 0; double dz01 = 0; double dz10 = 0; double dz11 = 0; if (!grid->getEastingNorthingZOffset(ix0, iy0, de00, dn00, dz00) || !grid->getEastingNorthingZOffset(ix1, iy0, de10, dn10, dz10) || !grid->getEastingNorthingZOffset(ix0, iy1, de01, dn01, dz01) || !grid->getEastingNorthingZOffset(ix1, iy1, de11, dn11, dz11)) { return false; } const double dzInterp = dz00 * m00 + dz01 * m01 + dz10 * m10 + dz11 * m11; #ifdef DEBUG_DEFMODEL iface.log("tfactor * dzInterp = " + toString(tfactor) + " * " + toString(dzInterp) + "."); #endif dz += tfactor * dzInterp; } if (compEx->isBilinearInterpolation) { const double deInterp = de00 * m00 + de01 * m01 + de10 * m10 + de11 * m11; const double dnInterp = dn00 * m00 + dn01 * m01 + dn10 * m10 + dn11 * m11; #ifdef DEBUG_DEFMODEL iface.log("tfactor * deInterp = " + toString(tfactor) + " * " + toString(deInterp) + "."); iface.log("tfactor * dnInterp = " + toString(tfactor) + " * " + toString(dnInterp) + "."); #endif de += tfactor * deInterp; dn += tfactor * dnInterp; } else /* geocentric_bilinear */ { double dX; double dY; double dZ; auto iter = compEx->mapGrids.find(grid); if (iter == compEx->mapGrids.end()) { GridEx gridWithCache(grid); iter = compEx->mapGrids .insert(std::pair>( grid, std::move(gridWithCache))) .first; } GridEx &gridwithCacheRef = iter->second; gridwithCacheRef.getBilinearGeocentric( ix0, iy0, de00, dn00, de01, dn01, de10, dn10, de11, dn11, m00, m01, m10, m11, dX, dY, dZ); if (!sincosphiInitialized) { sincosphiInitialized = true; sinphi = sin(y); cosphi = cos(y); } const double lam_rel_to_cell_center = (frct_x - 0.5) * grid->resx; // Use small-angle approximation of sin/cos when reasonable // Max abs/rel error on cos is 3.9e-9 and on sin 1.3e-11 const double sinlam = gridwithCacheRef.smallResx ? lam_rel_to_cell_center * (1 - (1. / 6) * (lam_rel_to_cell_center * lam_rel_to_cell_center)) : sin(lam_rel_to_cell_center); const double coslam = gridwithCacheRef.smallResx ? (1 - 0.5 * (lam_rel_to_cell_center * lam_rel_to_cell_center)) : cos(lam_rel_to_cell_center); // Convert back from geocentric deltas to easting, northing // deltas const double deInterp = -dX * sinlam + dY * coslam; const double dnInterp = (-dX * coslam - dY * sinlam) * sinphi + dZ * cosphi; #ifdef DEBUG_DEFMODEL iface.log("After geocentric_bilinear interpolation: tfactor * " "deInterp = " + toString(tfactor) + " * " + toString(deInterp) + "."); iface.log("After geocentric_bilinear interpolation: tfactor * " "dnInterp = " + toString(tfactor) + " * " + toString(dnInterp) + "."); #endif de += tfactor * deInterp; dn += tfactor * dnInterp; } } } // Apply shifts depending on horizontal_offset_unit and // horizontal_offset_method if (mIsHorizontalUnitDegree) { x_out += dlam; y_out += dphi; } else { #ifdef DEBUG_DEFMODEL iface.log("Total sum of de: " + toString(de)); iface.log("Total sum of dn: " + toString(dn)); #endif if (mIsAddition && !mIsGeographicCRS) { x_out += de; y_out += dn; } else if (mIsAddition) { // Simple way of adding the offset if (!sincosphiInitialized) { cosphi = cos(y); } DeltaEastingNorthingToLongLat(cosphi, de, dn, mA, mB, mEs, dlam, dphi); #ifdef DEBUG_DEFMODEL iface.log("Result dlam: " + toString(dlam)); iface.log("Result dphi: " + toString(dphi)); #endif x_out += dlam; y_out += dphi; } else { // Geocentric way of adding the offset if (!sincosphiInitialized) { sinphi = sin(y); cosphi = cos(y); } const double sinlam = sin(x); const double coslam = cos(x); const double dnsinphi = dn * sinphi; const double dX = -de * sinlam - dnsinphi * coslam; const double dY = de * coslam - dnsinphi * sinlam; const double dZ = dn * cosphi; double X; double Y; double Z; iface.geographicToGeocentric(x, y, 0, mA, mB, mEs, X, Y, Z); #ifdef DEBUG_DEFMODEL iface.log("Geocentric coordinate before: " + toString(X) + "," + toString(Y) + "," + toString(Z)); iface.log("Geocentric shift: " + toString(dX) + "," + toString(dY) + "," + toString(dZ)); #endif X += dX; Y += dY; Z += dZ; #ifdef DEBUG_DEFMODEL iface.log("Geocentric coordinate after: " + toString(X) + "," + toString(Y) + "," + toString(Z)); #endif double h_out_ignored; iface.geocentricToGeographic(X, Y, Z, mA, mB, mEs, x_out, y_out, h_out_ignored); } } #ifdef DEBUG_DEFMODEL iface.log("Total sum of dz: " + toString(dz)); #endif z_out += dz; return true; } // --------------------------------------------------------------------------- template bool Evaluator::inverse( EvaluatorIface &iface, double x, double y, double z, double t, double &x_out, double &y_out, double &z_out) { x_out = x; y_out = y; z_out = z; constexpr double EPS_HORIZ = 1e-12; constexpr double EPS_VERT = 1e-3; constexpr bool forInverseComputation = true; for (int i = 0; i < 10; i++) { #ifdef DEBUG_DEFMODEL iface.log("Iteration " + std::to_string(i) + ": before forward: x=" + toString(x_out) + ", y=" + toString(y_out)); #endif double x_new; double y_new; double z_new; if (!forward(iface, x_out, y_out, z_out, t, forInverseComputation, x_new, y_new, z_new)) { return false; } #ifdef DEBUG_DEFMODEL iface.log("After forward: x=" + toString(x_new) + ", y=" + toString(y_new)); #endif const double dx = x_new - x; const double dy = y_new - y; const double dz = z_new - z; x_out -= dx; y_out -= dy; z_out -= dz; if (std::max(std::fabs(dx), std::fabs(dy)) < EPS_HORIZ && std::fabs(dz) < EPS_VERT) { return true; } } return false; } // --------------------------------------------------------------------------- } // namespace DEFORMATON_MODEL_NAMESPACE proj-9.6.0/src/transformations/deformation.cpp000664 001754 001755 00000034500 14764566077 021456 0ustar00e012349e012349000000 000000 /*********************************************************************** Kinematic datum shifting utilizing a deformation model Kristian Evers, 2017-10-29 ************************************************************************ Perform datum shifts by means of a deformation/velocity model. X_out = X_in + (T_obs - T_epoch) * DX Y_out = Y_in + (T_obs - T_epoch) * DY Z_out = Z_in + (T_obs - T_epoch) * DZ The deformation operation takes cartesian coordinates as input and returns cartesian coordinates as well. Corrections in the gridded model are in east, north, up (ENU) space. Hence the input coordinates need to be converted to ENU-space when searching for corrections in the grid. The corrections are then converted to cartesian PJ_XYZ-space and applied to the input coordinates (also in cartesian space). A full deformation model is preferably represented as a 3 channel Geodetic TIFF Grid, but was historically described by a set of two grids: One for the horizontal components and one for the vertical component. The east and north components are (were) stored using the CTable/CTable2 format, up component is (was) stored in the GTX format. Both grids are (were) expected to contain grid-values in units of mm/year in ENU-space. ************************************************************************ * Copyright (c) 2017, 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. * ***********************************************************************/ #include "grids.hpp" #include "proj.h" #include "proj_internal.h" #include #include #include PROJ_HEAD(deformation, "Kinematic grid shift"); #define TOL 1e-8 #define MAX_ITERATIONS 10 using namespace NS_PROJ; namespace { // anonymous namespace struct deformationData { double dt = 0; double t_epoch = 0; PJ *cart = nullptr; ListOfGenericGrids grids{}; ListOfHGrids hgrids{}; ListOfVGrids vgrids{}; }; } // anonymous namespace // --------------------------------------------------------------------------- static bool pj_deformation_get_grid_values(PJ *P, deformationData *Q, const PJ_LP &lp, double &vx, double &vy, double &vz) { GenericShiftGridSet *gridset = nullptr; auto grid = pj_find_generic_grid(Q->grids, lp, gridset); if (!grid) { return false; } if (grid->isNullGrid()) { vx = 0; vy = 0; vz = 0; return true; } const auto samplesPerPixel = grid->samplesPerPixel(); if (samplesPerPixel < 3) { proj_log_error(P, "grid has not enough samples"); return false; } int sampleE = 0; int sampleN = 1; int sampleU = 2; for (int i = 0; i < samplesPerPixel; i++) { const auto desc = grid->description(i); if (desc == "east_velocity") { sampleE = i; } else if (desc == "north_velocity") { sampleN = i; } else if (desc == "up_velocity") { sampleU = i; } } const auto unit = grid->unit(sampleE); if (!unit.empty() && unit != "millimetres per year") { proj_log_error(P, "Only unit=millimetres per year currently handled"); return false; } bool must_retry = false; if (!pj_bilinear_interpolation_three_samples(P->ctx, grid, lp, sampleE, sampleN, sampleU, vx, vy, vz, must_retry)) { if (must_retry) return pj_deformation_get_grid_values(P, Q, lp, vx, vy, vz); return false; } // divide by 1000 to get m/year vx /= 1000; vy /= 1000; vz /= 1000; return true; } /********************************************************************************/ static PJ_XYZ pj_deformation_get_grid_shift(PJ *P, const PJ_XYZ &cartesian) { /******************************************************************************** Read correction values from grid. The cartesian input coordinates are converted to geodetic coordinates in order look up the correction values in the grid. Once the grid corrections are read we need to convert them from ENU-space to cartesian PJ_XYZ-space. ENU -> PJ_XYZ formula described in: Nørbech, T., et al, 2003(?), "Transformation from a Common Nordic Reference Frame to ETRS89 in Denmark, Finland, Norway, and Sweden – status report" ********************************************************************************/ PJ_COORD geodetic, shift, temp; double sp, cp, sl, cl; int previous_errno = proj_errno_reset(P); auto Q = static_cast(P->opaque); /* cartesian to geodetic */ geodetic.lpz = pj_inv3d(cartesian, Q->cart); /* look up correction values in grids */ if (!Q->grids.empty()) { double vx = 0; double vy = 0; double vz = 0; if (!pj_deformation_get_grid_values(P, Q, geodetic.lp, vx, vy, vz)) { return proj_coord_error().xyz; } shift.xyz.x = vx; shift.xyz.y = vy; shift.xyz.z = vz; } else { shift.lp = pj_hgrid_value(P, Q->hgrids, geodetic.lp); shift.enu.u = pj_vgrid_value(P, Q->vgrids, geodetic.lp, 1.0); if (proj_errno(P) == PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID) proj_log_debug( P, "coordinate (%.3f, %.3f) outside deformation model", proj_todeg(geodetic.lpz.lam), proj_todeg(geodetic.lpz.phi)); /* grid values are stored as mm/yr, we need m/yr */ shift.xyz.x /= 1000; shift.xyz.y /= 1000; shift.xyz.z /= 1000; } /* pre-calc cosines and sines */ sp = sin(geodetic.lpz.phi); cp = cos(geodetic.lpz.phi); sl = sin(geodetic.lpz.lam); cl = cos(geodetic.lpz.lam); /* ENU -> PJ_XYZ */ temp.xyz.x = -sp * cl * shift.enu.n - sl * shift.enu.e + cp * cl * shift.enu.u; temp.xyz.y = -sp * sl * shift.enu.n + cl * shift.enu.e + cp * sl * shift.enu.u; temp.xyz.z = cp * shift.enu.n + sp * shift.enu.u; shift.xyz = temp.xyz; proj_errno_restore(P, previous_errno); return shift.xyz; } /********************************************************************************/ static PJ_XYZ pj_deformation_reverse_shift(PJ *P, const PJ_XYZ &input, double dt) { /******************************************************************************** Iteratively determine the reverse grid shift correction values. *********************************************************************************/ PJ_XYZ out, delta, dif; double z0; int i = MAX_ITERATIONS; delta = pj_deformation_get_grid_shift(P, input); if (delta.x == HUGE_VAL) { return delta; } /* Store the original z shift for later application */ z0 = delta.z; /* When iterating to find the best horizontal coordinate we also carry */ /* along the z-component, since we need it for the cartesian -> geodetic */ /* conversion. The z-component adjustment is overwritten with z0 after */ /* the loop has finished. */ out.x = input.x - dt * delta.x; out.y = input.y - dt * delta.y; out.z = input.z + dt * delta.z; do { delta = pj_deformation_get_grid_shift(P, out); if (delta.x == HUGE_VAL) break; dif.x = out.x + dt * delta.x - input.x; dif.y = out.y + dt * delta.y - input.y; dif.z = out.z - dt * delta.z - input.z; out.x += dif.x; out.y += dif.y; out.z += dif.z; } while (--i && hypot(dif.x, dif.y) > TOL); out.z = input.z - dt * z0; return out; } static PJ_XYZ pj_deformation_forward_3d(PJ_LPZ lpz, PJ *P) { struct deformationData *Q = (struct deformationData *)P->opaque; PJ_COORD out, in; PJ_XYZ shift; in.lpz = lpz; out = in; if (Q->dt == HUGE_VAL) { out = proj_coord_error(); /* in the 3D case +t_obs must be specified */ proj_log_debug(P, "+dt must be specified"); return out.xyz; } shift = pj_deformation_get_grid_shift(P, in.xyz); if (shift.x == HUGE_VAL) { return shift; } out.xyz.x += Q->dt * shift.x; out.xyz.y += Q->dt * shift.y; out.xyz.z += Q->dt * shift.z; return out.xyz; } static void pj_deformation_forward_4d(PJ_COORD &coo, PJ *P) { struct deformationData *Q = (struct deformationData *)P->opaque; double dt; PJ_XYZ shift; if (Q->dt != HUGE_VAL) { dt = Q->dt; } else { if (coo.xyzt.t == HUGE_VAL) { coo = proj_coord_error(); proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_MISSING_TIME); return; } dt = coo.xyzt.t - Q->t_epoch; } shift = pj_deformation_get_grid_shift(P, coo.xyz); coo.xyzt.x += dt * shift.x; coo.xyzt.y += dt * shift.y; coo.xyzt.z += dt * shift.z; } static PJ_LPZ pj_deformation_reverse_3d(PJ_XYZ in, PJ *P) { struct deformationData *Q = (struct deformationData *)P->opaque; PJ_COORD out; out.xyz = in; if (Q->dt == HUGE_VAL) { out = proj_coord_error(); /* in the 3D case +t_obs must be specified */ proj_log_debug(P, "+dt must be specified"); return out.lpz; } out.xyz = pj_deformation_reverse_shift(P, in, Q->dt); return out.lpz; } static void pj_deformation_reverse_4d(PJ_COORD &coo, PJ *P) { struct deformationData *Q = (struct deformationData *)P->opaque; double dt; if (Q->dt != HUGE_VAL) { dt = Q->dt; } else { if (coo.xyzt.t == HUGE_VAL) { coo = proj_coord_error(); proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_MISSING_TIME); return; } dt = coo.xyzt.t - Q->t_epoch; } coo.xyz = pj_deformation_reverse_shift(P, coo.xyz, dt); } static PJ *pj_deformation_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; auto Q = static_cast(P->opaque); if (Q) { if (Q->cart) Q->cart->destructor(Q->cart, errlev); delete Q; } P->opaque = nullptr; return pj_default_destructor(P, errlev); } PJ *PJ_TRANSFORMATION(deformation, 1) { auto Q = new deformationData; P->opaque = (void *)Q; P->destructor = pj_deformation_destructor; // Pass a dummy ellipsoid definition that will be overridden just afterwards Q->cart = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart == nullptr) return pj_deformation_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def(P, Q->cart); int has_xy_grids = pj_param(P->ctx, P->params, "txy_grids").i; int has_z_grids = pj_param(P->ctx, P->params, "tz_grids").i; int has_grids = pj_param(P->ctx, P->params, "tgrids").i; /* Build gridlists. Both horizontal and vertical grids are mandatory. */ if (!has_grids && (!has_xy_grids || !has_z_grids)) { proj_log_error(P, _("Either +grids or (+xy_grids and +z_grids) should " "be specified.")); return pj_deformation_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (has_grids) { Q->grids = pj_generic_grid_init(P, "grids"); /* Was gridlist compiled properly? */ if (proj_errno(P)) { proj_log_error(P, _("could not find required grid(s).)")); return pj_deformation_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } } else { Q->hgrids = pj_hgrid_init(P, "xy_grids"); if (proj_errno(P)) { proj_log_error(P, _("could not find requested xy_grid(s).")); return pj_deformation_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } Q->vgrids = pj_vgrid_init(P, "z_grids"); if (proj_errno(P)) { proj_log_error(P, _("could not find requested z_grid(s).")); return pj_deformation_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } } Q->dt = HUGE_VAL; if (pj_param(P->ctx, P->params, "tdt").i) { Q->dt = pj_param(P->ctx, P->params, "ddt").f; } if (pj_param_exists(P->params, "t_obs")) { proj_log_error(P, _("+t_obs parameter is deprecated. Use +dt instead.")); return pj_deformation_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->t_epoch = HUGE_VAL; if (pj_param(P->ctx, P->params, "tt_epoch").i) { Q->t_epoch = pj_param(P->ctx, P->params, "dt_epoch").f; } if (Q->dt == HUGE_VAL && Q->t_epoch == HUGE_VAL) { proj_log_error(P, _("either +dt or +t_epoch needs to be set.")); return pj_deformation_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (Q->dt != HUGE_VALL && Q->t_epoch != HUGE_VALL) { proj_log_error(P, _("+dt or +t_epoch are mutually exclusive.")); return pj_deformation_destructor( P, PROJ_ERR_INVALID_OP_MUTUALLY_EXCLUSIVE_ARGS); } P->fwd4d = pj_deformation_forward_4d; P->inv4d = pj_deformation_reverse_4d; P->fwd3d = pj_deformation_forward_3d; P->inv3d = pj_deformation_reverse_3d; P->fwd = nullptr; P->inv = nullptr; P->left = PJ_IO_UNITS_CARTESIAN; P->right = PJ_IO_UNITS_CARTESIAN; return P; } #undef TOL #undef MAX_ITERATIONS proj-9.6.0/src/transformations/gridshift.cpp000664 001754 001755 00000113652 14764566077 021140 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Generic grid shifting, in particular Geographic 3D offsets * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2022, 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. *****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include #include #include #include #include #include "grids.hpp" #include "proj/internal/internal.hpp" #include "proj_internal.h" #include #include #include #include #include PROJ_HEAD(gridshift, "Generic grid shift"); static std::mutex gMutex{}; // Map of (name, isProjected) static std::map gKnownGrids{}; using namespace NS_PROJ; namespace { // anonymous namespace struct IXY { int32_t x, y; inline bool operator!=(const IXY &other) const { return x != other.x || y != other.y; } }; struct GridInfo { int idxSampleX = -1; int idxSampleY = -1; int idxSampleZ = -1; bool eastingNorthingOffset = false; bool bilinearInterpolation = true; std::vector shifts{}; bool swapXYInRes = false; std::vector idxSampleXYZ{-1, -1, -1}; IXY lastIdxXY = IXY{-1, -1}; }; // --------------------------------------------------------------------------- struct gridshiftData { ListOfGenericGrids m_grids{}; bool m_defer_grid_opening = false; int m_error_code_in_defer_grid_opening = 0; bool m_bHasHorizontalOffset = false; bool m_bHasGeographic3DOffset = false; bool m_bHasEllipsoidalHeightOffset = false; bool m_bHasVerticalToVertical = false; bool m_bHasGeographicToVertical = false; bool m_mainGridTypeIsGeographic3DOffset = false; bool m_skip_z_transform = false; std::string m_mainGridType{}; std::string m_auxGridType{}; std::string m_interpolation{}; std::map m_cacheGridInfo{}; //! Offset in X to add in the forward direction, after the correction // has been applied. (and reciprocally to subtract in the inverse direction // before reading the grid). Used typically for the S-JTSK --> S-JTSK/05 // grid double m_offsetX = 0; //! Offset in Y to add in the forward direction, after the correction // has been applied. (and reciprocally to subtract in the inverse direction // before reading the grid). Used typically for the S-JTSK --> S-JTSK/05 // grid double m_offsetY = 0; bool checkGridTypes(PJ *P, bool &isProjectedCoord); bool loadGridsIfNeeded(PJ *P); const GenericShiftGrid *findGrid(const std::string &type, const PJ_XYZ &input, GenericShiftGridSet *&gridSetOut) const; PJ_XYZ grid_interpolate(PJ_CONTEXT *ctx, const std::string &type, PJ_XY xy, const GenericShiftGrid *grid, bool &biquadraticInterpolationOut); PJ_XYZ grid_apply_internal(PJ_CONTEXT *ctx, const std::string &type, bool isVerticalOnly, const PJ_XYZ in, PJ_DIRECTION direction, const GenericShiftGrid *grid, GenericShiftGridSet *gridset, bool &shouldRetry); PJ_XYZ apply(PJ *P, PJ_DIRECTION dir, PJ_XYZ xyz); }; // --------------------------------------------------------------------------- bool gridshiftData::checkGridTypes(PJ *P, bool &isProjectedCoord) { std::string offsetX, offsetY; int gridCount = 0; isProjectedCoord = false; for (const auto &gridset : m_grids) { for (const auto &grid : gridset->grids()) { ++gridCount; const auto &type = grid->metadataItem("TYPE"); if (type == "HORIZONTAL_OFFSET") { m_bHasHorizontalOffset = true; if (offsetX.empty()) { offsetX = grid->metadataItem("constant_offset", 0); } if (offsetY.empty()) { offsetY = grid->metadataItem("constant_offset", 1); } } else if (type == "GEOGRAPHIC_3D_OFFSET") m_bHasGeographic3DOffset = true; else if (type == "ELLIPSOIDAL_HEIGHT_OFFSET") m_bHasEllipsoidalHeightOffset = true; else if (type == "VERTICAL_OFFSET_VERTICAL_TO_VERTICAL") m_bHasVerticalToVertical = true; else if (type == "VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL") m_bHasGeographicToVertical = true; else if (type.empty()) { proj_log_error(P, _("Missing TYPE metadata item in grid(s).")); return false; } else { proj_log_error( P, _("Unhandled value for TYPE metadata item in grid(s).")); return false; } isProjectedCoord = !grid->extentAndRes().isGeographic; } } if (!offsetX.empty() || !offsetY.empty()) { if (gridCount > 1) { // Makes life easier... proj_log_error(P, _("Shift offset found in one grid. Only one grid " "with shift offset is supported at a time.")); return false; } try { m_offsetX = NS_PROJ::internal::c_locale_stod(offsetX); } catch (const std::exception &) { proj_log_error(P, _("Invalid offset value")); return false; } try { m_offsetY = NS_PROJ::internal::c_locale_stod(offsetY); } catch (const std::exception &) { proj_log_error(P, _("Invalid offset value")); return false; } } if (((m_bHasEllipsoidalHeightOffset ? 1 : 0) + (m_bHasVerticalToVertical ? 1 : 0) + (m_bHasGeographicToVertical ? 1 : 0)) > 1) { proj_log_error(P, _("Unsupported mix of grid types.")); return false; } if (m_bHasGeographic3DOffset) { m_mainGridTypeIsGeographic3DOffset = true; m_mainGridType = "GEOGRAPHIC_3D_OFFSET"; } else if (!m_bHasHorizontalOffset) { if (m_bHasEllipsoidalHeightOffset) m_mainGridType = "ELLIPSOIDAL_HEIGHT_OFFSET"; else if (m_bHasGeographicToVertical) m_mainGridType = "VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL"; else { assert(m_bHasVerticalToVertical); m_mainGridType = "VERTICAL_OFFSET_VERTICAL_TO_VERTICAL"; } } else { assert(m_bHasHorizontalOffset); m_mainGridType = "HORIZONTAL_OFFSET"; } if (m_bHasHorizontalOffset) { if (m_bHasEllipsoidalHeightOffset) m_auxGridType = "ELLIPSOIDAL_HEIGHT_OFFSET"; else if (m_bHasGeographicToVertical) m_auxGridType = "VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL"; else if (m_bHasVerticalToVertical) { m_auxGridType = "VERTICAL_OFFSET_VERTICAL_TO_VERTICAL"; } } return true; } // --------------------------------------------------------------------------- const GenericShiftGrid * gridshiftData::findGrid(const std::string &type, const PJ_XYZ &input, GenericShiftGridSet *&gridSetOut) const { for (const auto &gridset : m_grids) { auto grid = gridset->gridAt(type, input.x, input.y); if (grid) { gridSetOut = gridset.get(); return grid; } } return nullptr; } // --------------------------------------------------------------------------- #define REL_TOLERANCE_HGRIDSHIFT 1e-5 PJ_XYZ gridshiftData::grid_interpolate(PJ_CONTEXT *ctx, const std::string &type, PJ_XY xy, const GenericShiftGrid *grid, bool &biquadraticInterpolationOut) { PJ_XYZ val; val.x = val.y = HUGE_VAL; val.z = 0; const bool isProjectedCoord = !grid->extentAndRes().isGeographic; auto iterCache = m_cacheGridInfo.find(grid); if (iterCache == m_cacheGridInfo.end()) { bool eastingNorthingOffset = false; const auto samplesPerPixel = grid->samplesPerPixel(); int idxSampleY = -1; int idxSampleX = -1; int idxSampleZ = -1; for (int i = 0; i < samplesPerPixel; i++) { const auto desc = grid->description(i); if (!isProjectedCoord && desc == "latitude_offset") { idxSampleY = i; const auto unit = grid->unit(idxSampleY); if (!unit.empty() && unit != "arc-second") { pj_log(ctx, PJ_LOG_ERROR, "gridshift: Only unit=arc-second currently handled"); return val; } } else if (!isProjectedCoord && desc == "longitude_offset") { idxSampleX = i; const auto unit = grid->unit(idxSampleX); if (!unit.empty() && unit != "arc-second") { pj_log(ctx, PJ_LOG_ERROR, "gridshift: Only unit=arc-second currently handled"); return val; } } else if (isProjectedCoord && desc == "easting_offset") { eastingNorthingOffset = true; idxSampleX = i; const auto unit = grid->unit(idxSampleX); if (!unit.empty() && unit != "metre") { pj_log(ctx, PJ_LOG_ERROR, "gridshift: Only unit=metre currently handled"); return val; } } else if (isProjectedCoord && desc == "northing_offset") { eastingNorthingOffset = true; idxSampleY = i; const auto unit = grid->unit(idxSampleY); if (!unit.empty() && unit != "metre") { pj_log(ctx, PJ_LOG_ERROR, "gridshift: Only unit=metre currently handled"); return val; } } else if (desc == "ellipsoidal_height_offset" || desc == "geoid_undulation" || desc == "hydroid_height" || desc == "vertical_offset") { idxSampleZ = i; const auto unit = grid->unit(idxSampleZ); if (!unit.empty() && unit != "metre") { pj_log(ctx, PJ_LOG_ERROR, "gridshift: Only unit=metre currently handled"); return val; } } } if (samplesPerPixel >= 2 && idxSampleY < 0 && idxSampleX < 0 && type == "HORIZONTAL_OFFSET") { if (isProjectedCoord) { eastingNorthingOffset = true; idxSampleX = 0; idxSampleY = 1; } else { // X=longitude assumed to be the second component if metadata // lacking idxSampleX = 1; // Y=latitude assumed to be the first component if metadata // lacking idxSampleY = 0; } } if (type == "HORIZONTAL_OFFSET" || type == "GEOGRAPHIC_3D_OFFSET") { if (idxSampleY < 0 || idxSampleX < 0) { pj_log(ctx, PJ_LOG_ERROR, "gridshift: grid has not expected samples"); return val; } } if (type == "ELLIPSOIDAL_HEIGHT_OFFSET" || type == "VERTICAL_OFFSET_GEOGRAPHIC_TO_VERTICAL" || type == "VERTICAL_OFFSET_VERTICAL_TO_VERTICAL" || type == "GEOGRAPHIC_3D_OFFSET") { if (idxSampleZ < 0) { pj_log(ctx, PJ_LOG_ERROR, "gridshift: grid has not expected samples"); return val; } } std::string interpolation(m_interpolation); if (interpolation.empty()) interpolation = grid->metadataItem("interpolation_method"); if (interpolation.empty()) interpolation = "bilinear"; if (interpolation != "bilinear" && interpolation != "biquadratic") { pj_log(ctx, PJ_LOG_ERROR, "gridshift: Unsupported interpolation_method in grid"); return val; } GridInfo gridInfo; gridInfo.idxSampleX = idxSampleX; gridInfo.idxSampleY = idxSampleY; gridInfo.idxSampleZ = m_skip_z_transform ? -1 : idxSampleZ; gridInfo.eastingNorthingOffset = eastingNorthingOffset; gridInfo.bilinearInterpolation = (interpolation == "bilinear" || grid->width() < 3 || grid->height() < 3); gridInfo.shifts.resize(3 * 3 * 3); if (idxSampleX == 1 && idxSampleY == 0) { // Little optimization for the common of grids storing shifts in // latitude, longitude, in that order. // We want to request data in the order it is stored in the grid, // which triggers a read optimization. // But we must compensate for that by switching the role of x and y // after computation. gridInfo.swapXYInRes = true; gridInfo.idxSampleXYZ[0] = 0; gridInfo.idxSampleXYZ[1] = 1; } else { gridInfo.idxSampleXYZ[0] = idxSampleX; gridInfo.idxSampleXYZ[1] = idxSampleY; } gridInfo.idxSampleXYZ[2] = idxSampleZ; iterCache = m_cacheGridInfo.emplace(grid, std::move(gridInfo)).first; } // cppcheck-suppress derefInvalidIteratorRedundantCheck GridInfo &gridInfo = iterCache->second; const int idxSampleX = gridInfo.idxSampleX; const int idxSampleY = gridInfo.idxSampleY; const int idxSampleZ = gridInfo.idxSampleZ; const bool bilinearInterpolation = gridInfo.bilinearInterpolation; biquadraticInterpolationOut = !bilinearInterpolation; IXY indxy; const auto &extent = grid->extentAndRes(); double x = (xy.x - extent.west) / extent.resX; indxy.x = std::isnan(x) ? 0 : (int32_t)lround(floor(x)); double y = (xy.y - extent.south) / extent.resY; indxy.y = std::isnan(y) ? 0 : (int32_t)lround(floor(y)); PJ_XY frct; frct.x = x - indxy.x; frct.y = y - indxy.y; int tmpInt; if (indxy.x < 0) { if (indxy.x == -1 && frct.x > 1 - 10 * REL_TOLERANCE_HGRIDSHIFT) { ++indxy.x; frct.x = 0.; } else return val; } else if ((tmpInt = indxy.x + 1) >= grid->width()) { if (tmpInt == grid->width() && frct.x < 10 * REL_TOLERANCE_HGRIDSHIFT) { --indxy.x; frct.x = 1.; } else return val; } if (indxy.y < 0) { if (indxy.y == -1 && frct.y > 1 - 10 * REL_TOLERANCE_HGRIDSHIFT) { ++indxy.y; frct.y = 0.; } else return val; } else if ((tmpInt = indxy.y + 1) >= grid->height()) { if (tmpInt == grid->height() && frct.y < 10 * REL_TOLERANCE_HGRIDSHIFT) { --indxy.y; frct.y = 1.; } else return val; } bool nodataFound = false; if (bilinearInterpolation) { double m10 = frct.x; double m11 = m10; double m01 = 1. - frct.x; double m00 = m01; m11 *= frct.y; m01 *= frct.y; frct.y = 1. - frct.y; m00 *= frct.y; m10 *= frct.y; if (idxSampleX >= 0 && idxSampleY >= 0) { if (gridInfo.lastIdxXY != indxy) { if (!grid->valuesAt(indxy.x, indxy.y, 2, 2, idxSampleZ >= 0 ? 3 : 2, gridInfo.idxSampleXYZ.data(), gridInfo.shifts.data(), nodataFound) || nodataFound) { return val; } gridInfo.lastIdxXY = indxy; } if (idxSampleZ >= 0) { val.x = (m00 * gridInfo.shifts[0] + m10 * gridInfo.shifts[3] + m01 * gridInfo.shifts[6] + m11 * gridInfo.shifts[9]); val.y = (m00 * gridInfo.shifts[1] + m10 * gridInfo.shifts[4] + m01 * gridInfo.shifts[7] + m11 * gridInfo.shifts[10]); val.z = m00 * gridInfo.shifts[2] + m10 * gridInfo.shifts[5] + m01 * gridInfo.shifts[8] + m11 * gridInfo.shifts[11]; } else { val.x = (m00 * gridInfo.shifts[0] + m10 * gridInfo.shifts[2] + m01 * gridInfo.shifts[4] + m11 * gridInfo.shifts[6]); val.y = (m00 * gridInfo.shifts[1] + m10 * gridInfo.shifts[3] + m01 * gridInfo.shifts[5] + m11 * gridInfo.shifts[7]); } } else { val.x = 0; val.y = 0; if (idxSampleZ >= 0) { if (gridInfo.lastIdxXY != indxy) { if (!grid->valuesAt(indxy.x, indxy.y, 2, 2, 1, &idxSampleZ, gridInfo.shifts.data(), nodataFound) || nodataFound) { return val; } gridInfo.lastIdxXY = indxy; } val.z = m00 * gridInfo.shifts[0] + m10 * gridInfo.shifts[1] + m01 * gridInfo.shifts[2] + m11 * gridInfo.shifts[3]; } } } else // biquadratic { // Cf https://geodesy.noaa.gov/library/pdfs/NOAA_TM_NOS_NGS_0084.pdf // Depending if we are before or after half-pixel, shift the 3x3 window // of interpolation if ((frct.x <= 0.5 && indxy.x > 0) || (indxy.x + 2 == grid->width())) { indxy.x -= 1; frct.x += 1; } if ((frct.y <= 0.5 && indxy.y > 0) || (indxy.y + 2 == grid->height())) { indxy.y -= 1; frct.y += 1; } // Port of qterp() Fortran function from NOAA // xToInterp must be in [0,2] range // f0 must be f(0), f1 must be f(1), f2 must be f(2) // Returns f(xToInterp) interpolated value along the parabolic function const auto quadraticInterpol = [](double xToInterp, double f0, double f1, double f2) { const double df0 = f1 - f0; const double df1 = f2 - f1; const double d2f0 = df1 - df0; return f0 + xToInterp * df0 + 0.5 * xToInterp * (xToInterp - 1.0) * d2f0; }; if (idxSampleX >= 0 && idxSampleY >= 0) { if (gridInfo.lastIdxXY != indxy) { if (!grid->valuesAt(indxy.x, indxy.y, 3, 3, idxSampleZ >= 0 ? 3 : 2, gridInfo.idxSampleXYZ.data(), gridInfo.shifts.data(), nodataFound) || nodataFound) { return val; } gridInfo.lastIdxXY = indxy; } const auto *shifts_ptr = gridInfo.shifts.data(); if (idxSampleZ >= 0) { double xyz_shift[3][4]; for (int j = 0; j <= 2; ++j) { xyz_shift[j][0] = quadraticInterpol( frct.x, shifts_ptr[0], shifts_ptr[3], shifts_ptr[6]); xyz_shift[j][1] = quadraticInterpol( frct.x, shifts_ptr[1], shifts_ptr[4], shifts_ptr[7]); xyz_shift[j][2] = quadraticInterpol( frct.x, shifts_ptr[2], shifts_ptr[5], shifts_ptr[8]); shifts_ptr += 9; } val.x = quadraticInterpol(frct.y, xyz_shift[0][0], xyz_shift[1][0], xyz_shift[2][0]); val.y = quadraticInterpol(frct.y, xyz_shift[0][1], xyz_shift[1][1], xyz_shift[2][1]); val.z = quadraticInterpol(frct.y, xyz_shift[0][2], xyz_shift[1][2], xyz_shift[2][2]); } else { double xy_shift[3][2]; for (int j = 0; j <= 2; ++j) { xy_shift[j][0] = quadraticInterpol( frct.x, shifts_ptr[0], shifts_ptr[2], shifts_ptr[4]); xy_shift[j][1] = quadraticInterpol( frct.x, shifts_ptr[1], shifts_ptr[3], shifts_ptr[5]); shifts_ptr += 6; } val.x = quadraticInterpol(frct.y, xy_shift[0][0], xy_shift[1][0], xy_shift[2][0]); val.y = quadraticInterpol(frct.y, xy_shift[0][1], xy_shift[1][1], xy_shift[2][1]); } } else { val.x = 0; val.y = 0; if (idxSampleZ >= 0) { if (gridInfo.lastIdxXY != indxy) { if (!grid->valuesAt(indxy.x, indxy.y, 3, 3, 1, &idxSampleZ, gridInfo.shifts.data(), nodataFound) || nodataFound) { return val; } gridInfo.lastIdxXY = indxy; } double z_shift[3]; const auto *shifts_ptr = gridInfo.shifts.data(); for (int j = 0; j <= 2; ++j) { z_shift[j] = quadraticInterpol( frct.x, shifts_ptr[0], shifts_ptr[1], shifts_ptr[2]); shifts_ptr += 3; } val.z = quadraticInterpol(frct.y, z_shift[0], z_shift[1], z_shift[2]); } } } if (idxSampleX >= 0 && idxSampleY >= 0 && !gridInfo.eastingNorthingOffset) { constexpr double convFactorXY = 1. / 3600 / 180 * M_PI; val.x *= convFactorXY; val.y *= convFactorXY; } if (gridInfo.swapXYInRes) { std::swap(val.x, val.y); } return val; } // --------------------------------------------------------------------------- static PJ_XY normalizeX(const GenericShiftGrid *grid, const PJ_XYZ in, const NS_PROJ::ExtentAndRes *&extentOut) { PJ_XY normalized; normalized.x = in.x; normalized.y = in.y; extentOut = &(grid->extentAndRes()); if (extentOut->isGeographic) { const double epsilon = (extentOut->resX + extentOut->resY) * REL_TOLERANCE_HGRIDSHIFT; if (normalized.x < extentOut->west - epsilon) normalized.x += 2 * M_PI; else if (normalized.x > extentOut->east + epsilon) normalized.x -= 2 * M_PI; } return normalized; } // --------------------------------------------------------------------------- #define MAX_ITERATIONS 10 #define TOL 1e-12 PJ_XYZ gridshiftData::grid_apply_internal( PJ_CONTEXT *ctx, const std::string &type, bool isVerticalOnly, const PJ_XYZ in, PJ_DIRECTION direction, const GenericShiftGrid *grid, GenericShiftGridSet *gridset, bool &shouldRetry) { shouldRetry = false; if (in.x == HUGE_VAL) return in; /* normalized longitude of input */ const NS_PROJ::ExtentAndRes *extent; PJ_XY normalized_in = normalizeX(grid, in, extent); bool biquadraticInterpolationOut = false; PJ_XYZ shift = grid_interpolate(ctx, type, normalized_in, grid, biquadraticInterpolationOut); if (grid->hasChanged()) { shouldRetry = gridset->reopen(ctx); PJ_XYZ out; out.x = out.y = out.z = HUGE_VAL; return out; } if (shift.x == HUGE_VAL) return shift; if (direction == PJ_FWD) { PJ_XYZ out = in; out.x += shift.x; out.y += shift.y; out.z += shift.z; return out; } if (isVerticalOnly) { PJ_XYZ out = in; out.z -= shift.z; return out; } PJ_XY guess; guess.x = normalized_in.x - shift.x; guess.y = normalized_in.y - shift.y; // NOAA NCAT transformer tool doesn't do iteration in the reverse path. // Do the same (only for biquadratic, although NCAT applies this logic to // bilinear too) // Cf // https://github.com/noaa-ngs/ncat-lib/blob/77bcff1ce4a78fe06d0312102ada008aefcc2c62/src/gov/noaa/ngs/grid/Transformer.java#L374 // When trying to do iterative reverse path with biquadratic, we can // get convergence failures on points that are close to the boundary of // cells or half-cells. For example with // echo -122.4250009683 37.8286740788 0 | bin/cct -I +proj=gridshift // +grids=tests/us_noaa_nadcon5_nad83_1986_nad83_harn_conus_extract_sanfrancisco.tif // +interpolation=biquadratic if (!biquadraticInterpolationOut) { int i = MAX_ITERATIONS; const double toltol = TOL * TOL; PJ_XY diff; do { shift = grid_interpolate(ctx, type, guess, grid, biquadraticInterpolationOut); if (grid->hasChanged()) { shouldRetry = gridset->reopen(ctx); PJ_XYZ out; out.x = out.y = out.z = HUGE_VAL; return out; } /* We can possibly go outside of the initial guessed grid, so try */ /* to fetch a new grid into which iterate... */ if (shift.x == HUGE_VAL) { PJ_XYZ lp; lp.x = guess.x; lp.y = guess.y; auto newGrid = findGrid(type, lp, gridset); if (newGrid == nullptr || newGrid == grid || newGrid->isNullGrid()) break; pj_log(ctx, PJ_LOG_TRACE, "Switching from grid %s to grid %s", grid->name().c_str(), newGrid->name().c_str()); grid = newGrid; normalized_in = normalizeX(grid, in, extent); diff.x = std::numeric_limits::max(); diff.y = std::numeric_limits::max(); continue; } diff.x = guess.x + shift.x - normalized_in.x; diff.y = guess.y + shift.y - normalized_in.y; guess.x -= diff.x; guess.y -= diff.y; } while (--i && (diff.x * diff.x + diff.y * diff.y > toltol)); /* prob. slightly faster than hypot() */ if (i == 0) { pj_log(ctx, PJ_LOG_TRACE, "Inverse grid shift iterator failed to converge."); proj_context_errno_set(ctx, PROJ_ERR_COORD_TRANSFM_NO_CONVERGENCE); PJ_XYZ out; out.x = out.y = out.z = HUGE_VAL; return out; } if (shift.x == HUGE_VAL) { pj_log( ctx, PJ_LOG_TRACE, "Inverse grid shift iteration failed, presumably at grid edge. " "Using first approximation."); } } PJ_XYZ out; out.x = extent->isGeographic ? adjlon(guess.x) : guess.x; out.y = guess.y; out.z = in.z - shift.z; return out; } // --------------------------------------------------------------------------- bool gridshiftData::loadGridsIfNeeded(PJ *P) { if (m_error_code_in_defer_grid_opening) { proj_errno_set(P, m_error_code_in_defer_grid_opening); return false; } else if (m_defer_grid_opening) { m_defer_grid_opening = false; m_grids = pj_generic_grid_init(P, "grids"); m_error_code_in_defer_grid_opening = proj_errno(P); if (m_error_code_in_defer_grid_opening) { return false; } bool isProjectedCoord; if (!checkGridTypes(P, isProjectedCoord)) { return false; } } return true; } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- static const std::string sHORIZONTAL_OFFSET("HORIZONTAL_OFFSET"); PJ_XYZ gridshiftData::apply(PJ *P, PJ_DIRECTION direction, PJ_XYZ xyz) { PJ_XYZ out; out.x = HUGE_VAL; out.y = HUGE_VAL; out.z = HUGE_VAL; std::string &type = m_mainGridType; bool bFoundGeog3DOffset = false; while (true) { GenericShiftGridSet *gridset = nullptr; const GenericShiftGrid *grid = findGrid(type, xyz, gridset); if (!grid) { if (m_mainGridTypeIsGeographic3DOffset && m_bHasHorizontalOffset) { // If we have a mix of grids with GEOGRAPHIC_3D_OFFSET // and HORIZONTAL_OFFSET+ELLIPSOIDAL_HEIGHT_OFFSET type = sHORIZONTAL_OFFSET; grid = findGrid(type, xyz, gridset); } if (!grid) { proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } } else { if (m_mainGridTypeIsGeographic3DOffset) bFoundGeog3DOffset = true; } if (grid->isNullGrid()) { out = xyz; break; } bool shouldRetry = false; out = grid_apply_internal( P->ctx, type, !(m_bHasGeographic3DOffset || m_bHasHorizontalOffset), xyz, direction, grid, gridset, shouldRetry); if (!shouldRetry) { break; } } if (out.x == HUGE_VAL || out.y == HUGE_VAL) { if (proj_context_errno(P->ctx) == 0) { proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); } return out; } // Second pass to apply vertical transformation, if it is in a // separate grid than lat-lon offsets. if (!bFoundGeog3DOffset && !m_auxGridType.empty()) { xyz = out; while (true) { GenericShiftGridSet *gridset = nullptr; const auto grid = findGrid(m_auxGridType, xyz, gridset); if (!grid) { proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } if (grid->isNullGrid()) { break; } bool shouldRetry = false; out = grid_apply_internal(P->ctx, m_auxGridType, true, xyz, direction, grid, gridset, shouldRetry); if (!shouldRetry) { break; } } if (out.x == HUGE_VAL || out.y == HUGE_VAL) { proj_context_errno_set(P->ctx, PROJ_ERR_COORD_TRANSFM_OUTSIDE_GRID); return out; } } return out; } } // anonymous namespace // --------------------------------------------------------------------------- static PJ_XYZ pj_gridshift_forward_3d(PJ_LPZ lpz, PJ *P) { auto Q = static_cast(P->opaque); if (!Q->loadGridsIfNeeded(P)) { return proj_coord_error().xyz; } PJ_XYZ xyz; xyz.x = lpz.lam; xyz.y = lpz.phi; xyz.z = lpz.z; xyz = Q->apply(P, PJ_FWD, xyz); xyz.x += Q->m_offsetX; xyz.y += Q->m_offsetY; return xyz; } // --------------------------------------------------------------------------- static PJ_LPZ pj_gridshift_reverse_3d(PJ_XYZ xyz, PJ *P) { auto Q = static_cast(P->opaque); // Must be done before using m_offsetX ! if (!Q->loadGridsIfNeeded(P)) { return proj_coord_error().lpz; } xyz.x -= Q->m_offsetX; xyz.y -= Q->m_offsetY; PJ_XYZ xyz_out = Q->apply(P, PJ_INV, xyz); PJ_LPZ lpz; lpz.lam = xyz_out.x; lpz.phi = xyz_out.y; lpz.z = xyz_out.z; return lpz; } // --------------------------------------------------------------------------- static PJ *pj_gridshift_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; delete static_cast(P->opaque); P->opaque = nullptr; return pj_default_destructor(P, errlev); } // --------------------------------------------------------------------------- static void pj_gridshift_reassign_context(PJ *P, PJ_CONTEXT *ctx) { auto Q = (struct gridshiftData *)P->opaque; for (auto &grid : Q->m_grids) { grid->reassign_context(ctx); } } // --------------------------------------------------------------------------- PJ *PJ_TRANSFORMATION(gridshift, 0) { auto Q = new gridshiftData; P->opaque = (void *)Q; P->destructor = pj_gridshift_destructor; P->reassign_context = pj_gridshift_reassign_context; P->fwd3d = pj_gridshift_forward_3d; P->inv3d = pj_gridshift_reverse_3d; P->fwd = nullptr; P->inv = nullptr; if (0 == pj_param(P->ctx, P->params, "tgrids").i) { proj_log_error(P, _("+grids parameter missing.")); return pj_gridshift_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } bool isKnownGrid = false; bool isProjectedCoord = false; if (!P->ctx->defer_grid_opening || !pj_param(P->ctx, P->params, "tcoord_type").i) { const char *gridnames = pj_param(P->ctx, P->params, "sgrids").s; gMutex.lock(); const auto iter = gKnownGrids.find(gridnames); isKnownGrid = iter != gKnownGrids.end(); if (isKnownGrid) { Q->m_defer_grid_opening = true; isProjectedCoord = iter->second; } gMutex.unlock(); } if (P->ctx->defer_grid_opening || isKnownGrid) { Q->m_defer_grid_opening = true; } else { const char *gridnames = pj_param(P->ctx, P->params, "sgrids").s; Q->m_grids = pj_generic_grid_init(P, "grids"); /* Was gridlist compiled properly? */ if (proj_errno(P)) { proj_log_error(P, _("could not find required grid(s).")); return pj_gridshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } if (!Q->checkGridTypes(P, isProjectedCoord)) { return pj_gridshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } gMutex.lock(); gKnownGrids[gridnames] = isProjectedCoord; gMutex.unlock(); } if (pj_param(P->ctx, P->params, "tinterpolation").i) { const char *interpolation = pj_param(P->ctx, P->params, "sinterpolation").s; if (strcmp(interpolation, "bilinear") == 0 || strcmp(interpolation, "biquadratic") == 0) { Q->m_interpolation = interpolation; } else { proj_log_error(P, _("Unsupported value for +interpolation.")); return pj_gridshift_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (pj_param(P->ctx, P->params, "tno_z_transform").i) { Q->m_skip_z_transform = true; } // +coord_type not advertised in documentation on purpose for now. // It is probably useless to do it, as the only potential use case of it // would be for PROJ itself when generating pipelines with deferred grid // opening. if (pj_param(P->ctx, P->params, "tcoord_type").i) { // Check the coordinate type (projected/geographic) from the explicit // +coord_type switch. This is mostly only useful in deferred grid // opening, otherwise we have figured it out above in checkGridTypes() const char *coord_type = pj_param(P->ctx, P->params, "scoord_type").s; if (coord_type) { if (strcmp(coord_type, "projected") == 0) { if (!P->ctx->defer_grid_opening && !isProjectedCoord) { proj_log_error(P, _("+coord_type=projected specified, but the " "grid is known to not be projected")); return pj_gridshift_destructor( P, PROJ_ERR_INVALID_OP_MISSING_ARG); } isProjectedCoord = true; } else if (strcmp(coord_type, "geographic") == 0) { if (!P->ctx->defer_grid_opening && isProjectedCoord) { proj_log_error(P, _("+coord_type=geographic specified, but " "the grid is known to be projected")); return pj_gridshift_destructor( P, PROJ_ERR_INVALID_OP_MISSING_ARG); } } else { proj_log_error(P, _("Unsupported value for +coord_type: valid " "values are 'geographic' or 'projected'")); return pj_gridshift_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } } } if (isKnownGrid || pj_param(P->ctx, P->params, "tcoord_type").i) { if (isProjectedCoord) { P->left = PJ_IO_UNITS_PROJECTED; P->right = PJ_IO_UNITS_PROJECTED; } else { P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; } } else { P->left = PJ_IO_UNITS_WHATEVER; P->right = PJ_IO_UNITS_WHATEVER; } return P; } // --------------------------------------------------------------------------- void pj_clear_gridshift_knowngrids_cache() { std::lock_guard lock(gMutex); gKnownGrids.clear(); } proj-9.6.0/src/transformations/helmert.cpp000664 001754 001755 00000064575 14764566077 020626 0ustar00e012349e012349000000 000000 /*********************************************************************** 3-, 4-and 7-parameter shifts, and their 6-, 8- and 14-parameter kinematic counterparts. Thomas Knudsen, 2016-05-24 ************************************************************************ Implements 3(6)-, 4(8) and 7(14)-parameter Helmert transformations for 3D data. Also incorporates Molodensky-Badekas variant of 7-parameter Helmert transformation, where the rotation is not applied regarding the centre of the spheroid, but given a reference point. Primarily useful for implementation of datum shifts in transformation pipelines. ************************************************************************ Thomas Knudsen, thokn@sdfe.dk, 2016-05-24/06-05 Kristian Evers, kreve@sdfe.dk, 2017-05-01 Even Rouault, even.rouault@spatialys.com Last update: 2018-10-26 ************************************************************************ * Copyright (c) 2016, Thomas Knudsen / SDFE * * 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 "proj_internal.h" PROJ_HEAD(helmert, "3(6)-, 4(8)- and 7(14)-parameter Helmert shift"); PROJ_HEAD(molobadekas, "Molodensky-Badekas transformation"); static PJ_XYZ helmert_forward_3d(PJ_LPZ lpz, PJ *P); static PJ_LPZ helmert_reverse_3d(PJ_XYZ xyz, PJ *P); /***********************************************************************/ namespace { // anonymous namespace struct pj_opaque_helmert { /************************************************************************ Projection specific elements for the "helmert" PJ object ************************************************************************/ PJ_XYZ xyz; PJ_XYZ xyz_0; PJ_XYZ dxyz; PJ_XYZ refp; PJ_OPK opk; PJ_OPK opk_0; PJ_OPK dopk; double scale; double scale_0; double dscale; double theta; double theta_0; double dtheta; double R[3][3]; double t_epoch, t_obs; int no_rotation, exact, fourparam; int is_position_vector; /* 1 = position_vector, 0 = coordinate_frame */ }; } // anonymous namespace /* Make the maths of the rotation operations somewhat more readable and textbook * like */ #define R00 (Q->R[0][0]) #define R01 (Q->R[0][1]) #define R02 (Q->R[0][2]) #define R10 (Q->R[1][0]) #define R11 (Q->R[1][1]) #define R12 (Q->R[1][2]) #define R20 (Q->R[2][0]) #define R21 (Q->R[2][1]) #define R22 (Q->R[2][2]) /**************************************************************************/ static void update_parameters(PJ *P) { /*************************************************************************** Update transformation parameters. --------------------------------- The 14-parameter Helmert transformation is at it's core the same as the 7-parameter transformation, since the transformation parameters are projected forward or backwards in time via the rate of changes of the parameters. The transformation parameters are calculated for a specific epoch before the actual Helmert transformation is carried out. The transformation parameters are updated with the following equation [0]: . P(t) = P(EPOCH) + P * (t - EPOCH) . where EPOCH is the epoch indicated in the above table and P is the rate of that parameter. [0] http://itrf.ign.fr/doc_ITRF/Transfo-ITRF2008_ITRFs.txt *******************************************************************************/ struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; double dt = Q->t_obs - Q->t_epoch; Q->xyz.x = Q->xyz_0.x + Q->dxyz.x * dt; Q->xyz.y = Q->xyz_0.y + Q->dxyz.y * dt; Q->xyz.z = Q->xyz_0.z + Q->dxyz.z * dt; Q->opk.o = Q->opk_0.o + Q->dopk.o * dt; Q->opk.p = Q->opk_0.p + Q->dopk.p * dt; Q->opk.k = Q->opk_0.k + Q->dopk.k * dt; Q->scale = Q->scale_0 + Q->dscale * dt; Q->theta = Q->theta_0 + Q->dtheta * dt; /* debugging output */ if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_TRACE) { proj_log_trace(P, "Transformation parameters for observation " "t_obs=%g (t_epoch=%g):", Q->t_obs, Q->t_epoch); proj_log_trace(P, "x: %g", Q->xyz.x); proj_log_trace(P, "y: %g", Q->xyz.y); proj_log_trace(P, "z: %g", Q->xyz.z); proj_log_trace(P, "s: %g", Q->scale * 1e-6); proj_log_trace(P, "rx: %g", Q->opk.o); proj_log_trace(P, "ry: %g", Q->opk.p); proj_log_trace(P, "rz: %g", Q->opk.k); proj_log_trace(P, "theta: %g", Q->theta); } } /**************************************************************************/ static void build_rot_matrix(PJ *P) { /*************************************************************************** Build rotation matrix. ---------------------- Here we rename rotation indices from omega, phi, kappa (opk), to fi (i.e. phi), theta, psi (ftp), in order to reduce the mental agility needed to implement the expression for the rotation matrix derived over at https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions The relevant section is Euler angles ( z-’-x" intrinsic) -> Rotation matrix By default small angle approximations are used: The matrix elements are approximated by expanding the trigonometric functions to linear order (i.e. cos(x) = 1, sin(x) = x), and discarding products of second order. This was a useful hack when calculating by hand was the only option, but in general, today, should be avoided because: 1. It does not save much computation time, as the rotation matrix is built only once and probably used many times (except when transforming spatio-temporal coordinates). 2. The error induced may be too large for ultra high accuracy applications: the Earth is huge and the linear error is approximately the angular error multiplied by the Earth radius. However, in many cases the approximation is necessary, since it has been used historically: Rotation angles from older published datum shifts may actually be a least squares fit to the linearized rotation approximation, hence not being strictly valid for deriving the exact rotation matrix. In fact, most publicly available transformation parameters are based on the approximate Helmert transform, which is why we use that as the default setting, even though it is more correct to use the exact form of the equations. So in order to fit historically derived coordinates, the access to the approximate rotation matrix is necessary - at least in principle. Also, when using any published datum transformation information, one should always check which convention (exact or approximate rotation matrix) is expected, and whether the induced error for selecting the opposite convention is acceptable (which it often is). Sign conventions ---------------- Take care: Two different sign conventions exist for the rotation terms. Conceptually they relate to whether we rotate the coordinate system or the "position vector" (the vector going from the coordinate system origin to the point being transformed, i.e. the point coordinates interpreted as vector coordinates). Switching between the "position vector" and "coordinate system" conventions is simply a matter of switching the sign of the rotation angles, which algebraically also translates into a transposition of the rotation matrix. Hence, as geodetic constants should preferably be referred to exactly as published, the "convention" option provides the ability to switch between the conventions. ***************************************************************************/ struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; double f, t, p; /* phi/fi , theta, psi */ double cf, ct, cp; /* cos (fi, theta, psi) */ double sf, st, sp; /* sin (fi, theta, psi) */ /* rename (omega, phi, kappa) to (fi, theta, psi) */ f = Q->opk.o; t = Q->opk.p; p = Q->opk.k; /* Those equations are given assuming coordinate frame convention. */ /* For the position vector convention, we transpose the matrix just after. */ if (Q->exact) { cf = cos(f); sf = sin(f); ct = cos(t); st = sin(t); cp = cos(p); sp = sin(p); R00 = ct * cp; R01 = cf * sp + sf * st * cp; R02 = sf * sp - cf * st * cp; R10 = -ct * sp; R11 = cf * cp - sf * st * sp; R12 = sf * cp + cf * st * sp; R20 = st; R21 = -sf * ct; R22 = cf * ct; } else { R00 = 1; R01 = p; R02 = -t; R10 = -p; R11 = 1; R12 = f; R20 = t; R21 = -f; R22 = 1; } /* For comparison: Description from Engsager/Poder implementation in set_dtm_1.c (trlib) DATUM SHIFT: TO = scale * ROTZ * ROTY * ROTX * FROM + TRANSLA ( cz sz 0) (cy 0 -sy) (1 0 0) ROTZ=(-sz cz 0), ROTY=(0 1 0), ROTX=(0 cx sx) ( 0 0 1) (sy 0 cy) (0 -sx cx) trp->r11 = cos_ry*cos_rz; trp->r12 = cos_rx*sin_rz + sin_rx*sin_ry*cos_rz; trp->r13 = sin_rx*sin_rz - cos_rx*sin_ry*cos_rz; trp->r21 = -cos_ry*sin_rz; trp->r22 = cos_rx*cos_rz - sin_rx*sin_ry*sin_rz; trp->r23 = sin_rx*cos_rz + cos_rx*sin_ry*sin_rz; trp->r31 = sin_ry; trp->r32 = -sin_rx*cos_ry; trp->r33 = cos_rx*cos_ry; trp->scale = 1.0 + scale; */ if (Q->is_position_vector) { double r; r = R01; R01 = R10; R10 = r; r = R02; R02 = R20; R20 = r; r = R12; R12 = R21; R21 = r; } /* some debugging output */ if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_TRACE) { proj_log_trace(P, "Rotation Matrix:"); proj_log_trace(P, " | % 6.6g % 6.6g % 6.6g |", R00, R01, R02); proj_log_trace(P, " | % 6.6g % 6.6g % 6.6g |", R10, R11, R12); proj_log_trace(P, " | % 6.6g % 6.6g % 6.6g |", R20, R21, R22); } } /***********************************************************************/ static PJ_XY helmert_forward(PJ_LP lp, PJ *P) { /***********************************************************************/ struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; double x, y, cr, sr; point.lp = lp; cr = cos(Q->theta) * Q->scale; sr = sin(Q->theta) * Q->scale; x = point.xy.x; y = point.xy.y; point.xy.x = cr * x + sr * y + Q->xyz_0.x; point.xy.y = -sr * x + cr * y + Q->xyz_0.y; return point.xy; } /***********************************************************************/ static PJ_LP helmert_reverse(PJ_XY xy, PJ *P) { /***********************************************************************/ struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; double x, y, sr, cr; point.xy = xy; cr = cos(Q->theta) / Q->scale; sr = sin(Q->theta) / Q->scale; x = point.xy.x - Q->xyz_0.x; y = point.xy.y - Q->xyz_0.y; point.xy.x = x * cr - y * sr; point.xy.y = x * sr + y * cr; return point.lp; } /***********************************************************************/ static PJ_XYZ helmert_forward_3d(PJ_LPZ lpz, PJ *P) { /***********************************************************************/ struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; double X, Y, Z, scale; point.lpz = lpz; if (Q->fourparam) { const auto xy = helmert_forward(point.lp, P); point.xy = xy; return point.xyz; } if (Q->no_rotation && Q->scale == 0) { point.xyz.x = lpz.lam + Q->xyz.x; point.xyz.y = lpz.phi + Q->xyz.y; point.xyz.z = lpz.z + Q->xyz.z; return point.xyz; } scale = 1 + Q->scale * 1e-6; X = lpz.lam - Q->refp.x; Y = lpz.phi - Q->refp.y; Z = lpz.z - Q->refp.z; point.xyz.x = scale * (R00 * X + R01 * Y + R02 * Z); point.xyz.y = scale * (R10 * X + R11 * Y + R12 * Z); point.xyz.z = scale * (R20 * X + R21 * Y + R22 * Z); point.xyz.x += Q->xyz.x; /* for Molodensky-Badekas, Q->xyz already incorporates the Q->refp offset */ point.xyz.y += Q->xyz.y; point.xyz.z += Q->xyz.z; return point.xyz; } /***********************************************************************/ static PJ_LPZ helmert_reverse_3d(PJ_XYZ xyz, PJ *P) { /***********************************************************************/ struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; double X, Y, Z, scale; point.xyz = xyz; if (Q->fourparam) { const auto lp = helmert_reverse(point.xy, P); point.lp = lp; return point.lpz; } if (Q->no_rotation && Q->scale == 0) { point.xyz.x = xyz.x - Q->xyz.x; point.xyz.y = xyz.y - Q->xyz.y; point.xyz.z = xyz.z - Q->xyz.z; return point.lpz; } scale = 1 + Q->scale * 1e-6; /* Unscale and deoffset */ X = (xyz.x - Q->xyz.x) / scale; Y = (xyz.y - Q->xyz.y) / scale; Z = (xyz.z - Q->xyz.z) / scale; /* Inverse rotation through transpose multiplication */ point.xyz.x = (R00 * X + R10 * Y + R20 * Z) + Q->refp.x; point.xyz.y = (R01 * X + R11 * Y + R21 * Z) + Q->refp.y; point.xyz.z = (R02 * X + R12 * Y + R22 * Z) + Q->refp.z; return point.lpz; } static void helmert_forward_4d(PJ_COORD &point, PJ *P) { struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; /* We only need to rebuild the rotation matrix if the * observation time is different from the last call */ double t_obs = (point.xyzt.t == HUGE_VAL) ? Q->t_epoch : point.xyzt.t; if (t_obs != Q->t_obs) { Q->t_obs = t_obs; update_parameters(P); build_rot_matrix(P); } // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto xyz = helmert_forward_3d(point.lpz, P); point.xyz = xyz; } static void helmert_reverse_4d(PJ_COORD &point, PJ *P) { struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; /* We only need to rebuild the rotation matrix if the * observation time is different from the last call */ double t_obs = (point.xyzt.t == HUGE_VAL) ? Q->t_epoch : point.xyzt.t; if (t_obs != Q->t_obs) { Q->t_obs = t_obs; update_parameters(P); build_rot_matrix(P); } // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto lpz = helmert_reverse_3d(point.xyz, P); point.lpz = lpz; } /* Arcsecond to radians */ #define ARCSEC_TO_RAD (DEG_TO_RAD / 3600.0) static PJ *init_helmert_six_parameters(PJ *P) { struct pj_opaque_helmert *Q = static_cast( calloc(1, sizeof(struct pj_opaque_helmert))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = (void *)Q; /* In most cases, we work on 3D cartesian coordinates */ P->left = PJ_IO_UNITS_CARTESIAN; P->right = PJ_IO_UNITS_CARTESIAN; /* Translations */ if (pj_param(P->ctx, P->params, "tx").i) Q->xyz_0.x = pj_param(P->ctx, P->params, "dx").f; if (pj_param(P->ctx, P->params, "ty").i) Q->xyz_0.y = pj_param(P->ctx, P->params, "dy").f; if (pj_param(P->ctx, P->params, "tz").i) Q->xyz_0.z = pj_param(P->ctx, P->params, "dz").f; /* Rotations */ if (pj_param(P->ctx, P->params, "trx").i) Q->opk_0.o = pj_param(P->ctx, P->params, "drx").f * ARCSEC_TO_RAD; if (pj_param(P->ctx, P->params, "try").i) Q->opk_0.p = pj_param(P->ctx, P->params, "dry").f * ARCSEC_TO_RAD; if (pj_param(P->ctx, P->params, "trz").i) Q->opk_0.k = pj_param(P->ctx, P->params, "drz").f * ARCSEC_TO_RAD; /* Use small angle approximations? */ if (pj_param(P->ctx, P->params, "bexact").i) Q->exact = 1; return P; } static PJ *read_convention(PJ *P) { struct pj_opaque_helmert *Q = (struct pj_opaque_helmert *)P->opaque; /* In case there are rotational terms, we require an explicit convention * to be provided. */ if (!Q->no_rotation) { const char *convention = pj_param(P->ctx, P->params, "sconvention").s; if (!convention) { proj_log_error(P, _("helmert: missing 'convention' argument")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (strcmp(convention, "position_vector") == 0) { Q->is_position_vector = 1; } else if (strcmp(convention, "coordinate_frame") == 0) { Q->is_position_vector = 0; } else { proj_log_error( P, _("helmert: invalid value for 'convention' argument")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* historically towgs84 in PROJ has always been using position_vector * convention. Accepting coordinate_frame would be confusing. */ if (pj_param_exists(P->params, "towgs84")) { if (!Q->is_position_vector) { proj_log_error(P, _("helmert: towgs84 should only be used with " "convention=position_vector")); return pj_default_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } } return P; } /***********************************************************************/ PJ *PJ_TRANSFORMATION(helmert, 0) { /***********************************************************************/ struct pj_opaque_helmert *Q; if (!init_helmert_six_parameters(P)) { return nullptr; } /* In the 2D case, the coordinates are projected */ if (pj_param_exists(P->params, "theta")) { P->left = PJ_IO_UNITS_PROJECTED; P->right = PJ_IO_UNITS_PROJECTED; P->fwd = helmert_forward; P->inv = helmert_reverse; } P->fwd4d = helmert_forward_4d; P->inv4d = helmert_reverse_4d; P->fwd3d = helmert_forward_3d; P->inv3d = helmert_reverse_3d; Q = (struct pj_opaque_helmert *)P->opaque; /* Detect obsolete transpose flag and error out if found */ if (pj_param(P->ctx, P->params, "ttranspose").i) { proj_log_error(P, _("helmert: 'transpose' argument is no longer valid. " "Use convention=position_vector/coordinate_frame")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } /* Support the classic PROJ towgs84 parameter, but allow later overrides.*/ /* Note that if towgs84 is specified, the datum_params array is set up */ /* for us automagically by the pj_datum_set call in pj_init_ctx */ if (pj_param_exists(P->params, "towgs84")) { Q->xyz_0.x = P->datum_params[0]; Q->xyz_0.y = P->datum_params[1]; Q->xyz_0.z = P->datum_params[2]; Q->opk_0.o = P->datum_params[3]; Q->opk_0.p = P->datum_params[4]; Q->opk_0.k = P->datum_params[5]; /* We must undo conversion to absolute scale from pj_datum_set */ if (0 == P->datum_params[6]) Q->scale_0 = 0; else Q->scale_0 = (P->datum_params[6] - 1) * 1e6; } if (pj_param(P->ctx, P->params, "ttheta").i) { Q->theta_0 = pj_param(P->ctx, P->params, "dtheta").f * ARCSEC_TO_RAD; Q->fourparam = 1; Q->scale_0 = 1.0; /* default scale for the 4-param shift */ } /* Scale */ if (pj_param(P->ctx, P->params, "ts").i) { Q->scale_0 = pj_param(P->ctx, P->params, "ds").f; if (Q->scale_0 <= -1.0e6) { proj_log_error(P, _("helmert: invalid value for s.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } if (pj_param(P->ctx, P->params, "ttheta").i && Q->scale_0 == 0.0) { proj_log_error(P, _("helmert: invalid value for s.")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } /* Translation rates */ if (pj_param(P->ctx, P->params, "tdx").i) Q->dxyz.x = pj_param(P->ctx, P->params, "ddx").f; if (pj_param(P->ctx, P->params, "tdy").i) Q->dxyz.y = pj_param(P->ctx, P->params, "ddy").f; if (pj_param(P->ctx, P->params, "tdz").i) Q->dxyz.z = pj_param(P->ctx, P->params, "ddz").f; /* Rotations rates */ if (pj_param(P->ctx, P->params, "tdrx").i) Q->dopk.o = pj_param(P->ctx, P->params, "ddrx").f * ARCSEC_TO_RAD; if (pj_param(P->ctx, P->params, "tdry").i) Q->dopk.p = pj_param(P->ctx, P->params, "ddry").f * ARCSEC_TO_RAD; if (pj_param(P->ctx, P->params, "tdrz").i) Q->dopk.k = pj_param(P->ctx, P->params, "ddrz").f * ARCSEC_TO_RAD; if (pj_param(P->ctx, P->params, "tdtheta").i) Q->dtheta = pj_param(P->ctx, P->params, "ddtheta").f * ARCSEC_TO_RAD; /* Scale rate */ if (pj_param(P->ctx, P->params, "tds").i) Q->dscale = pj_param(P->ctx, P->params, "dds").f; /* Epoch */ if (pj_param(P->ctx, P->params, "tt_epoch").i) Q->t_epoch = pj_param(P->ctx, P->params, "dt_epoch").f; Q->xyz = Q->xyz_0; Q->opk = Q->opk_0; Q->scale = Q->scale_0; Q->theta = Q->theta_0; if ((Q->opk.o == 0) && (Q->opk.p == 0) && (Q->opk.k == 0) && (Q->dopk.o == 0) && (Q->dopk.p == 0) && (Q->dopk.k == 0)) { Q->no_rotation = 1; } if (!read_convention(P)) { return nullptr; } /* Let's help with debugging */ if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_TRACE) { proj_log_trace(P, "Helmert parameters:"); proj_log_trace(P, "x= %8.5f y= %8.5f z= %8.5f", Q->xyz.x, Q->xyz.y, Q->xyz.z); proj_log_trace(P, "rx= %8.5f ry= %8.5f rz= %8.5f", Q->opk.o / ARCSEC_TO_RAD, Q->opk.p / ARCSEC_TO_RAD, Q->opk.k / ARCSEC_TO_RAD); proj_log_trace(P, "s= %8.5f exact=%d%s", Q->scale, Q->exact, Q->no_rotation ? "" : Q->is_position_vector ? " convention=position_vector" : " convention=coordinate_frame"); proj_log_trace(P, "dx= %8.5f dy= %8.5f dz= %8.5f", Q->dxyz.x, Q->dxyz.y, Q->dxyz.z); proj_log_trace(P, "drx=%8.5f dry=%8.5f drz=%8.5f", Q->dopk.o, Q->dopk.p, Q->dopk.k); proj_log_trace(P, "ds= %8.5f t_epoch=%8.5f", Q->dscale, Q->t_epoch); } update_parameters(P); build_rot_matrix(P); return P; } /***********************************************************************/ PJ *PJ_TRANSFORMATION(molobadekas, 0) { /***********************************************************************/ struct pj_opaque_helmert *Q; if (!init_helmert_six_parameters(P)) { return nullptr; } P->fwd3d = helmert_forward_3d; P->inv3d = helmert_reverse_3d; Q = (struct pj_opaque_helmert *)P->opaque; /* Scale */ if (pj_param(P->ctx, P->params, "ts").i) { Q->scale_0 = pj_param(P->ctx, P->params, "ds").f; } Q->opk = Q->opk_0; Q->scale = Q->scale_0; if (!read_convention(P)) { return nullptr; } /* Reference point */ if (pj_param(P->ctx, P->params, "tpx").i) Q->refp.x = pj_param(P->ctx, P->params, "dpx").f; if (pj_param(P->ctx, P->params, "tpy").i) Q->refp.y = pj_param(P->ctx, P->params, "dpy").f; if (pj_param(P->ctx, P->params, "tpz").i) Q->refp.z = pj_param(P->ctx, P->params, "dpz").f; /* Let's help with debugging */ if (proj_log_level(P->ctx, PJ_LOG_TELL) >= PJ_LOG_TRACE) { proj_log_trace(P, "Molodensky-Badekas parameters:"); proj_log_trace(P, "x= %8.5f y= %8.5f z= %8.5f", Q->xyz_0.x, Q->xyz_0.y, Q->xyz_0.z); proj_log_trace(P, "rx= %8.5f ry= %8.5f rz= %8.5f", Q->opk.o / ARCSEC_TO_RAD, Q->opk.p / ARCSEC_TO_RAD, Q->opk.k / ARCSEC_TO_RAD); proj_log_trace(P, "s= %8.5f exact=%d%s", Q->scale, Q->exact, Q->is_position_vector ? " convention=position_vector" : " convention=coordinate_frame"); proj_log_trace(P, "px= %8.5f py= %8.5f pz= %8.5f", Q->refp.x, Q->refp.y, Q->refp.z); } /* as an optimization, we incorporate the refp in the translation terms */ Q->xyz_0.x += Q->refp.x; Q->xyz_0.y += Q->refp.y; Q->xyz_0.z += Q->refp.z; Q->xyz = Q->xyz_0; build_rot_matrix(P); return P; } proj-9.6.0/src/transformations/hgridshift.cpp000664 001754 001755 00000016107 14764566077 021305 0ustar00e012349e012349000000 000000 #include #include #include #include #include #include "grids.hpp" #include "proj_internal.h" PROJ_HEAD(hgridshift, "Horizontal grid shift"); static std::mutex gMutexHGridShift{}; static std::set gKnownGridsHGridShift{}; using namespace NS_PROJ; namespace { // anonymous namespace struct hgridshiftData { double t_final = 0; double t_epoch = 0; ListOfHGrids grids{}; bool defer_grid_opening = false; int error_code_in_defer_grid_opening = 0; }; } // anonymous namespace static PJ_XYZ pj_hgridshift_forward_3d(PJ_LPZ lpz, PJ *P) { auto Q = static_cast(P->opaque); PJ_COORD point = {{0, 0, 0, 0}}; point.lpz = lpz; if (Q->defer_grid_opening) { Q->defer_grid_opening = false; Q->grids = pj_hgrid_init(P, "grids"); Q->error_code_in_defer_grid_opening = proj_errno(P); } if (Q->error_code_in_defer_grid_opening) { proj_errno_set(P, Q->error_code_in_defer_grid_opening); return proj_coord_error().xyz; } if (!Q->grids.empty()) { /* Only try the gridshift if at least one grid is loaded, * otherwise just pass the coordinate through unchanged. */ point.lp = pj_hgrid_apply(P->ctx, Q->grids, point.lp, PJ_FWD); } return point.xyz; } static PJ_LPZ pj_hgridshift_reverse_3d(PJ_XYZ xyz, PJ *P) { auto Q = static_cast(P->opaque); PJ_COORD point = {{0, 0, 0, 0}}; point.xyz = xyz; if (Q->defer_grid_opening) { Q->defer_grid_opening = false; Q->grids = pj_hgrid_init(P, "grids"); Q->error_code_in_defer_grid_opening = proj_errno(P); } if (Q->error_code_in_defer_grid_opening) { proj_errno_set(P, Q->error_code_in_defer_grid_opening); return proj_coord_error().lpz; } if (!Q->grids.empty()) { /* Only try the gridshift if at least one grid is loaded, * otherwise just pass the coordinate through unchanged. */ point.lp = pj_hgrid_apply(P->ctx, Q->grids, point.lp, PJ_INV); } return point.lpz; } static void pj_hgridshift_forward_4d(PJ_COORD &coo, PJ *P) { struct hgridshiftData *Q = (struct hgridshiftData *)P->opaque; /* If transformation is not time restricted, we always call it */ if (Q->t_final == 0 || Q->t_epoch == 0) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto xyz = pj_hgridshift_forward_3d(coo.lpz, P); coo.xyz = xyz; return; } /* Time restricted - only apply transform if within time bracket */ if (coo.lpzt.t < Q->t_epoch && Q->t_final > Q->t_epoch) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto xyz = pj_hgridshift_forward_3d(coo.lpz, P); coo.xyz = xyz; } } static void pj_hgridshift_reverse_4d(PJ_COORD &coo, PJ *P) { struct hgridshiftData *Q = (struct hgridshiftData *)P->opaque; /* If transformation is not time restricted, we always call it */ if (Q->t_final == 0 || Q->t_epoch == 0) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto lpz = pj_hgridshift_reverse_3d(coo.xyz, P); coo.lpz = lpz; return; } /* Time restricted - only apply transform if within time bracket */ if (coo.lpzt.t < Q->t_epoch && Q->t_final > Q->t_epoch) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto lpz = pj_hgridshift_reverse_3d(coo.xyz, P); coo.lpz = lpz; } } static PJ *pj_hgridshift_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; delete static_cast(P->opaque); P->opaque = nullptr; return pj_default_destructor(P, errlev); } static void pj_hgridshift_reassign_context(PJ *P, PJ_CONTEXT *ctx) { auto Q = (struct hgridshiftData *)P->opaque; for (auto &grid : Q->grids) { grid->reassign_context(ctx); } } PJ *PJ_TRANSFORMATION(hgridshift, 0) { auto Q = new hgridshiftData; P->opaque = (void *)Q; P->destructor = pj_hgridshift_destructor; P->reassign_context = pj_hgridshift_reassign_context; P->fwd4d = pj_hgridshift_forward_4d; P->inv4d = pj_hgridshift_reverse_4d; P->fwd3d = pj_hgridshift_forward_3d; P->inv3d = pj_hgridshift_reverse_3d; P->fwd = nullptr; P->inv = nullptr; P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; if (0 == pj_param(P->ctx, P->params, "tgrids").i) { proj_log_error(P, _("+grids parameter missing.")); return pj_hgridshift_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* TODO: Refactor into shared function that can be used */ /* by both vgridshift and hgridshift */ if (pj_param(P->ctx, P->params, "tt_final").i) { Q->t_final = pj_param(P->ctx, P->params, "dt_final").f; if (Q->t_final == 0) { /* a number wasn't passed to +t_final, let's see if it was "now" */ /* and set the time accordingly. */ if (!strcmp("now", pj_param(P->ctx, P->params, "st_final").s)) { time_t now; struct tm *date; time(&now); date = localtime(&now); Q->t_final = 1900.0 + date->tm_year + date->tm_yday / 365.0; } } } if (pj_param(P->ctx, P->params, "tt_epoch").i) Q->t_epoch = pj_param(P->ctx, P->params, "dt_epoch").f; if (P->ctx->defer_grid_opening) { Q->defer_grid_opening = true; } else { const char *gridnames = pj_param(P->ctx, P->params, "sgrids").s; gMutexHGridShift.lock(); const bool isKnownGrid = gKnownGridsHGridShift.find(gridnames) != gKnownGridsHGridShift.end(); gMutexHGridShift.unlock(); if (isKnownGrid) { Q->defer_grid_opening = true; } else { Q->grids = pj_hgrid_init(P, "grids"); /* Was gridlist compiled properly? */ if (proj_errno(P)) { proj_log_error(P, _("could not find required grid(s).")); return pj_hgridshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } gMutexHGridShift.lock(); gKnownGridsHGridShift.insert(gridnames); gMutexHGridShift.unlock(); } } return P; } void pj_clear_hgridshift_knowngrids_cache() { std::lock_guard lock(gMutexHGridShift); gKnownGridsHGridShift.clear(); } proj-9.6.0/src/transformations/horner.cpp000664 001754 001755 00000060435 14764566077 020452 0ustar00e012349e012349000000 000000 /*********************************************************************** Interfacing to a classic piece of geodetic software ************************************************************************ gen_pol is a highly efficient, classic implementation of a generic 2D Horner's Scheme polynomial evaluation routine by Knud Poder and Karsten Engsager, originating in the vivid geodetic environment at what was then (1960-ish) the Danish Geodetic Institute. The original Poder/Engsager gen_pol implementation (where the polynomial degree and two sets of polynomial coefficients are packed together in one compound array, handled via a plain double pointer) is compelling and "true to the code history": It has a beautiful classical 1960s ring to it, not unlike the original fft implementations, which revolutionized spectral analysis in twenty lines of code. The Poder coding sound, as classic 1960s as Phil Spector's Wall of Sound, is beautiful and inimitable. On the other hand: For the uninitiated, the gen_pol code is hard to follow, despite being compact. Also, since adding metadata and improving maintainability of the code are among the implied goals of a current SDFE/DTU Space project, the material in this file introduces a version with a more modern (or at least 1990s) look, introducing a "double 2D polynomial" data type, HORNER. Despite introducing a new data type for handling the polynomial coefficients, great care has been taken to keep the coefficient array organization identical to that of gen_pol. Hence, on one hand, the HORNER data type helps improving the long term maintainability of the code by making the data organization more mentally accessible. On the other hand, it allows us to preserve the business end of the original gen_pol implementation - although not including the famous "Poder dual autocheck" in all its enigmatic elegance. ********************************************************************** The material included here was written by Knud Poder, starting around 1960, and Karsten Engsager, starting around 1970. It was originally written in Algol 60, later (1980s) reimplemented in C. The HORNER data type interface, and the organization as a header library was implemented by Thomas Knudsen, starting around 2015. *********************************************************************** * * Copyright (c) 2016, SDFE http://www.sdfe.dk / Thomas Knudsen / Karsten Engsager * * 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 #include #include #include #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(horner, "Horner polynomial evaluation"); /* make horner.h interface with proj's memory management */ #define horner_dealloc(x) free(x) #define horner_calloc(n, x) calloc(n, x) namespace { // anonymous namespace struct horner { int uneg; /* u axis negated? */ int vneg; /* v axis negated? */ uint32_t order; /* maximum degree of polynomium */ double range; /* radius of the region of validity */ bool has_inv; /* inv parameters are specified */ double inverse_tolerance; /* in the units of the destination coords, specifies when to stop iterating if !has_inv and direction is reverse */ double *fwd_u; /* coefficients for the forward transformations */ double *fwd_v; /* i.e. latitude/longitude to northing/easting */ double *inv_u; /* coefficients for the inverse transformations */ double *inv_v; /* i.e. northing/easting to latitude/longitude */ double *fwd_c; /* coefficients for the complex forward transformations */ double *inv_c; /* coefficients for the complex inverse transformations */ PJ_UV *fwd_origin; /* False longitude/latitude */ PJ_UV *inv_origin; /* False easting/northing */ }; } // anonymous namespace typedef struct horner HORNER; /* e.g. degree = 2: a + bx + cy + dxx + eyy + fxy, i.e. 6 coefficients */ constexpr uint32_t horner_number_of_real_coefficients(uint32_t order) { return (order + 1) * (order + 2) / 2; } constexpr uint32_t horner_number_of_complex_coefficients(uint32_t order) { return 2 * order + 2; } static void horner_free(HORNER *h) { horner_dealloc(h->inv_v); horner_dealloc(h->inv_u); horner_dealloc(h->fwd_v); horner_dealloc(h->fwd_u); horner_dealloc(h->fwd_c); horner_dealloc(h->inv_c); horner_dealloc(h->fwd_origin); horner_dealloc(h->inv_origin); horner_dealloc(h); } static HORNER *horner_alloc(uint32_t order, bool complex_polynomia) { /* uint32_t is unsigned, so we need not check for order > 0 */ bool polynomia_ok = false; HORNER *h = static_cast(horner_calloc(1, sizeof(HORNER))); if (nullptr == h) return nullptr; uint32_t n = complex_polynomia ? horner_number_of_complex_coefficients(order) : horner_number_of_real_coefficients(order); h->order = order; if (complex_polynomia) { h->fwd_c = static_cast(horner_calloc(n, sizeof(double))); h->inv_c = static_cast(horner_calloc(n, sizeof(double))); if (h->fwd_c && h->inv_c) polynomia_ok = true; } else { h->fwd_u = static_cast(horner_calloc(n, sizeof(double))); h->fwd_v = static_cast(horner_calloc(n, sizeof(double))); h->inv_u = static_cast(horner_calloc(n, sizeof(double))); h->inv_v = static_cast(horner_calloc(n, sizeof(double))); if (h->fwd_u && h->fwd_v && h->inv_u && h->inv_v) polynomia_ok = true; } h->fwd_origin = static_cast(horner_calloc(1, sizeof(PJ_UV))); h->inv_origin = static_cast(horner_calloc(1, sizeof(PJ_UV))); if (polynomia_ok && h->fwd_origin && h->inv_origin) return h; /* safe, since all pointers are null-initialized (by calloc) */ horner_free(h); return nullptr; } inline static PJ_UV double_real_horner_eval(uint32_t order, const double *cx, const double *cy, PJ_UV en, uint32_t order_offset = 0) { /* The melody of this block is straight out of the great Engsager/Poder songbook. For numerical stability, the summation is carried out backwards, summing the tiny high order elements first. Double Horner's scheme: N = n*Cy*e -> yout, E = e*Cx*n -> xout */ const double n = en.v; const double e = en.u; const uint32_t sz = horner_number_of_real_coefficients(order); cx += sz; cy += sz; double N = *--cy; double E = *--cx; for (uint32_t r = order; r > order_offset; r--) { double u = *--cy; double v = *--cx; for (uint32_t c = order; c >= r; c--) { u = n * u + *--cy; v = e * v + *--cx; } N = e * N + u; E = n * E + v; } return {E, N}; } inline static double single_real_horner_eval(uint32_t order, const double *cx, double x, uint32_t order_offset = 0) { const uint32_t sz = order + 1; /* Number of coefficients per polynomial */ cx += sz; double u = *--cx; for (uint32_t r = order; r > order_offset; r--) { u = x * u + *--cx; } return u; } inline static PJ_UV complex_horner_eval(uint32_t order, const double *c, PJ_UV en, uint32_t order_offset = 0) { // the coefficients are ordered like this: // (Cn0+i*Ce0, Cn1+i*Ce1, ...) const uint32_t sz = horner_number_of_complex_coefficients(order); const double e = en.u; const double n = en.v; const double *cbeg = c + order_offset * 2; c += sz; double E = *--c; double N = *--c; double w; while (c > cbeg) { w = n * E + e * N + *--c; N = n * N - e * E + *--c; E = w; } return {E, N}; } inline static PJ_UV generate_error_coords() { PJ_UV uv_error; uv_error.u = uv_error.v = HUGE_VAL; return uv_error; } inline static bool coords_out_of_range(PJ *P, const HORNER *transformation, double n, double e) { const double range = transformation->range; if ((fabs(n) > range) || (fabs(e) > range)) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return true; } return false; } static PJ_UV real_default_impl(PJ *P, const HORNER *transformation, PJ_DIRECTION direction, PJ_UV position) { /*********************************************************************** A reimplementation of the classic Engsager/Poder 2D Horner polynomial evaluation engine "gen_pol". This version omits the inimitable Poder "dual autocheck"-machinery, which here is intended to be implemented at a higher level of the library: We separate the polynomial evaluation from the quality control (which, given the limited MTBF for "computing machinery", typical when Knud Poder invented the dual autocheck method, was not defensible at that time). Another difference from the original version is that we return the result on the stack, rather than accepting pointers to result variables as input. This results in code that is easy to read: projected = horner (s34j, 1, geographic); geographic = horner (s34j, -1, projected ); and experiments have shown that on contemporary architectures, the time taken for returning even comparatively large objects on the stack (and the UV is not that large - typically only 16 bytes) is negligibly different from passing two pointers (i.e. typically also 16 bytes) the other way. The polynomium has the form: P = sum (i = [0 : order]) sum (j = [0 : order - i]) pow(par_1, i) * pow(par_2, j) * coef(index(order, i, j)) ***********************************************************************/ assert(direction == PJ_FWD || direction == PJ_INV); double n, e; if (direction == PJ_FWD) { /* forward */ e = position.u - transformation->fwd_origin->u; n = position.v - transformation->fwd_origin->v; } else { /* inverse */ e = position.u - transformation->inv_origin->u; n = position.v - transformation->inv_origin->v; } if (coords_out_of_range(P, transformation, n, e)) { return generate_error_coords(); } const double *tcx = direction == PJ_FWD ? transformation->fwd_u : transformation->inv_u; const double *tcy = direction == PJ_FWD ? transformation->fwd_v : transformation->inv_v; PJ_UV en = {e, n}; position = double_real_horner_eval(transformation->order, tcx, tcy, en); return position; } static PJ_UV real_iterative_inverse_impl(PJ *P, const HORNER *transformation, PJ_UV position) { double n, e; // in this case fwd_origin needs to be added in the end e = position.u; n = position.v; if (coords_out_of_range(P, transformation, n, e)) { return generate_error_coords(); } /* * solve iteratively * * | E | | u00 | | u01 + u02*x + ... ' u10 + u11*x + u20*y + ... * | | x | | | = | | + |-------------------------- ' * --------------------------| | | | N | | v00 | | v10 + v11*y + v20*x * + * ... ' v01 + v02*y + ... | | y | * * | x | | Ma ' Mb |-1 | E-u00 | * | | = |-------- | | | * | y | | Mc ' Md | | N-v00 | */ const uint32_t order = transformation->order; const double tol = transformation->inverse_tolerance; const double de = e - transformation->fwd_u[0]; const double dn = n - transformation->fwd_v[0]; double x0 = 0.0; double y0 = 0.0; int loops = 32; // usually converges really fast (1-2 loops) bool converged = false; while (loops-- > 0 && !converged) { double Ma = 0.0; double Mb = 0.0; double Mc = 0.0; double Md = 0.0; { const double *tcx = transformation->fwd_u; const double *tcy = transformation->fwd_v; PJ_UV x0y0 = {x0, y0}; // sum the i > 0 coefficients PJ_UV Mbc = double_real_horner_eval(order, tcx, tcy, x0y0, 1); Mb = Mbc.u; Mc = Mbc.v; // sum the i = 0, j > 0 coefficients Ma = single_real_horner_eval(order, tcx, x0, 1); Md = single_real_horner_eval(order, tcy, y0, 1); } double idet = 1.0 / (Ma * Md - Mb * Mc); double x = idet * (Md * de - Mb * dn); double y = idet * (Ma * dn - Mc * de); converged = (fabs(x - x0) < tol) && (fabs(y - y0) < tol); x0 = x; y0 = y; } // if loops have been exhausted and we have not converged yet, // we are never going to converge if (!converged) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM); return generate_error_coords(); } else { position.u = x0 + transformation->fwd_origin->u; position.v = y0 + transformation->fwd_origin->v; return position; } } static void horner_forward_4d(PJ_COORD &point, PJ *P) { const HORNER *transformation = reinterpret_cast(P->opaque); point.uv = real_default_impl(P, transformation, PJ_FWD, point.uv); } static void horner_inverse_4d(PJ_COORD &point, PJ *P) { const HORNER *transformation = reinterpret_cast(P->opaque); point.uv = real_default_impl(P, transformation, PJ_INV, point.uv); } static void horner_iterative_inverse_4d(PJ_COORD &point, PJ *P) { const HORNER *transformation = reinterpret_cast(P->opaque); point.uv = real_iterative_inverse_impl(P, transformation, point.uv); } static PJ_UV complex_default_impl(PJ *P, const HORNER *transformation, PJ_DIRECTION direction, PJ_UV position) { /*********************************************************************** A reimplementation of a classic Engsager/Poder Horner complex polynomial evaluation engine. ***********************************************************************/ assert(direction == PJ_FWD || direction == PJ_INV); double n, e; if (direction == PJ_FWD) { /* forward */ e = position.u - transformation->fwd_origin->u; n = position.v - transformation->fwd_origin->v; } else { /* inverse */ e = position.u - transformation->inv_origin->u; n = position.v - transformation->inv_origin->v; } if (transformation->uneg) e = -e; if (transformation->vneg) n = -n; if (coords_out_of_range(P, transformation, n, e)) { return generate_error_coords(); } // coefficient pointers double *cb = direction == PJ_FWD ? transformation->fwd_c : transformation->inv_c; PJ_UV en = {e, n}; position = complex_horner_eval(transformation->order, cb, en); return position; } static PJ_UV complex_iterative_inverse_impl(PJ *P, const HORNER *transformation, PJ_UV position) { double n, e; // in this case fwd_origin and any existing flipping needs to be added in // the end e = position.u; n = position.v; if (coords_out_of_range(P, transformation, n, e)) { return generate_error_coords(); } { // complex real part corresponds to Northing, imag part to Easting const double tol = transformation->inverse_tolerance; const std::complex dZ(n - transformation->fwd_c[0], e - transformation->fwd_c[1]); std::complex w0(0.0, 0.0); int loops = 32; // usually converges really fast (1-2 loops) bool converged = false; while (loops-- > 0 && !converged) { // sum coefficient pointers from back to front until the first // complex pair (fwd_c0+i*fwd_c1) const double *c = transformation->fwd_c; PJ_UV en = {w0.imag(), w0.real()}; en = complex_horner_eval(transformation->order, c, en, 1); std::complex det(en.v, en.u); std::complex w1 = dZ / det; converged = (fabs(w1.real() - w0.real()) < tol) && (fabs(w1.imag() - w0.imag()) < tol); w0 = w1; } // if loops have been exhausted and we have not converged yet, // we are never going to converge if (!converged) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM); position = generate_error_coords(); } else { double E = w0.imag(); double N = w0.real(); if (transformation->uneg) E = -E; if (transformation->vneg) N = -N; position.u = E + transformation->fwd_origin->u; position.v = N + transformation->fwd_origin->v; } return position; } } static void complex_horner_forward_4d(PJ_COORD &point, PJ *P) { const HORNER *transformation = reinterpret_cast(P->opaque); point.uv = complex_default_impl(P, transformation, PJ_FWD, point.uv); } static void complex_horner_inverse_4d(PJ_COORD &point, PJ *P) { const HORNER *transformation = reinterpret_cast(P->opaque); point.uv = complex_default_impl(P, transformation, PJ_INV, point.uv); } static void complex_horner_iterative_inverse_4d(PJ_COORD &point, PJ *P) { const HORNER *transformation = reinterpret_cast(P->opaque); point.uv = complex_iterative_inverse_impl(P, transformation, point.uv); } static PJ *horner_freeup(PJ *P, int errlev) { /* Destructor */ if (nullptr == P) return nullptr; if (nullptr == P->opaque) return pj_default_destructor(P, errlev); horner_free((HORNER *)P->opaque); P->opaque = nullptr; return pj_default_destructor(P, errlev); } static int parse_coefs(PJ *P, double *coefs, const char *param, int ncoefs) { char *buf, *init, *next = nullptr; int i; size_t buf_size = strlen(param) + 2; buf = static_cast(calloc(buf_size, sizeof(char))); if (nullptr == buf) { proj_log_error(P, "No memory left"); return 0; } snprintf(buf, buf_size, "t%s", param); if (0 == pj_param(P->ctx, P->params, buf).i) { free(buf); return 0; } snprintf(buf, buf_size, "s%s", param); init = pj_param(P->ctx, P->params, buf).s; free(buf); for (i = 0; i < ncoefs; i++) { if (i > 0) { if (next == nullptr || ',' != *next) { proj_log_error(P, "Malformed polynomium set %s. need %d coefs", param, ncoefs); return 0; } init = ++next; } coefs[i] = pj_strtod(init, &next); } return 1; } /*********************************************************************/ PJ *PJ_PROJECTION(horner) { /*********************************************************************/ int degree = 0; HORNER *Q; P->fwd3d = nullptr; P->inv3d = nullptr; P->fwd = nullptr; P->inv = nullptr; P->left = P->right = PJ_IO_UNITS_WHATEVER; P->destructor = horner_freeup; /* Polynomial degree specified? */ if (pj_param(P->ctx, P->params, "tdeg").i) { /* degree specified? */ degree = pj_param(P->ctx, P->params, "ideg").i; if (degree < 0 || degree > 10000) { /* What are reasonable minimum and maximums for degree? */ proj_log_error(P, _("Degree is unreasonable: %d"), degree); return horner_freeup(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } else { proj_log_error(P, _("Must specify polynomial degree, (+deg=n)")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } bool complex_polynomia = false; if (pj_param(P->ctx, P->params, "tfwd_c").i || pj_param(P->ctx, P->params, "tinv_c").i) /* complex polynomium? */ complex_polynomia = true; Q = horner_alloc(degree, complex_polynomia); if (Q == nullptr) return horner_freeup(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = Q; bool has_inv = false; if (!complex_polynomia) { has_inv = pj_param_exists(P->params, "inv_u") || pj_param_exists(P->params, "inv_v") || pj_param_exists(P->params, "inv_origin"); } else { has_inv = pj_param_exists(P->params, "inv_c") || pj_param_exists(P->params, "inv_origin"); } Q->has_inv = has_inv; // setup callbacks if (complex_polynomia) { P->fwd4d = complex_horner_forward_4d; P->inv4d = has_inv ? complex_horner_inverse_4d : complex_horner_iterative_inverse_4d; } else { P->fwd4d = horner_forward_4d; P->inv4d = has_inv ? horner_inverse_4d : horner_iterative_inverse_4d; } if (complex_polynomia) { /* Westings and/or southings? */ Q->uneg = pj_param_exists(P->params, "uneg") ? 1 : 0; Q->vneg = pj_param_exists(P->params, "vneg") ? 1 : 0; const int n = static_cast(horner_number_of_complex_coefficients(degree)); if (0 == parse_coefs(P, Q->fwd_c, "fwd_c", n)) { proj_log_error(P, _("missing fwd_c")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (has_inv && 0 == parse_coefs(P, Q->inv_c, "inv_c", n)) { proj_log_error(P, _("missing inv_c")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } } else { const int n = static_cast(horner_number_of_real_coefficients(degree)); if (0 == parse_coefs(P, Q->fwd_u, "fwd_u", n)) { proj_log_error(P, _("missing fwd_u")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (0 == parse_coefs(P, Q->fwd_v, "fwd_v", n)) { proj_log_error(P, _("missing fwd_v")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (has_inv && 0 == parse_coefs(P, Q->inv_u, "inv_u", n)) { proj_log_error(P, _("missing inv_u")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (has_inv && 0 == parse_coefs(P, Q->inv_v, "inv_v", n)) { proj_log_error(P, _("missing inv_v")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } } if (0 == parse_coefs(P, (double *)(Q->fwd_origin), "fwd_origin", 2)) { proj_log_error(P, _("missing fwd_origin")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (has_inv && 0 == parse_coefs(P, (double *)(Q->inv_origin), "inv_origin", 2)) { proj_log_error(P, _("missing inv_origin")); return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } if (0 == parse_coefs(P, &Q->range, "range", 1)) Q->range = 500000; if (0 == parse_coefs(P, &Q->inverse_tolerance, "inv_tolerance", 1)) Q->inverse_tolerance = 0.001; return P; } proj-9.6.0/src/transformations/molodensky.cpp000664 001754 001755 00000025342 14764566077 021337 0ustar00e012349e012349000000 000000 /*********************************************************************** (Abridged) Molodensky Transform Kristian Evers, 2017-07-07 ************************************************************************ Implements the (abridged) Molodensky transformations for 2D and 3D data. Primarily useful for implementation of datum shifts in transformation pipelines. The code in this file is mostly based on The Standard and Abridged Molodensky Coordinate Transformation Formulae, 2004, R.E. Deakin, http://www.mygeodesy.id.au/documents/Molodensky%20V2.pdf ************************************************************************ * Copyright (c) 2017, Kristian Evers / SDFE * * 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 "proj.h" #include "proj_internal.h" PROJ_HEAD(molodensky, "Molodensky transform"); static PJ_XYZ pj_molodensky_forward_3d(PJ_LPZ lpz, PJ *P); static PJ_LPZ pj_molodensky_reverse_3d(PJ_XYZ xyz, PJ *P); namespace { // anonymous namespace struct pj_opaque_molodensky { double dx; double dy; double dz; double da; double df; int abridged; }; } // anonymous namespace static double RN(double a, double es, double phi) { /********************************************************** N(phi) - prime vertical radius of curvature ------------------------------------------- This is basically the same function as in PJ_cart.c should probably be refactored into it's own file at some point. **********************************************************/ double s = sin(phi); if (es == 0) return a; return a / sqrt(1 - es * s * s); } static double RM(double a, double es, double phi) { /********************************************************** M(phi) - Meridian radius of curvature ------------------------------------- Source: E.J Krakiwsky & D.B. Thomson, 1974, GEODETIC POSITION COMPUTATIONS, Fredericton NB, Canada: University of New Brunswick, Department of Geodesy and Geomatics Engineering, Lecture Notes No. 39, 99 pp. http://www2.unb.ca/gge/Pubs/LN39.pdf **********************************************************/ double s = sin(phi); if (es == 0) return a; /* eq. 13a */ if (phi == 0) return a * (1 - es); /* eq. 13b */ if (fabs(phi) == M_PI_2) return a / sqrt(1 - es); /* eq. 13 */ return (a * (1 - es)) / pow(1 - es * s * s, 1.5); } static PJ_LPZ calc_standard_params(PJ_LPZ lpz, PJ *P) { struct pj_opaque_molodensky *Q = (struct pj_opaque_molodensky *)P->opaque; double dphi, dlam, dh; /* sines and cosines */ double slam = sin(lpz.lam); double clam = cos(lpz.lam); double sphi = sin(lpz.phi); double cphi = cos(lpz.phi); /* ellipsoid parameters and differences */ double f = P->f, a = P->a; double dx = Q->dx, dy = Q->dy, dz = Q->dz; double da = Q->da, df = Q->df; /* ellipsoid radii of curvature */ double rho = RM(a, P->es, lpz.phi); double nu = RN(a, P->es, lpz.phi); /* delta phi */ dphi = (-dx * sphi * clam) - (dy * sphi * slam) + (dz * cphi) + ((nu * P->es * sphi * cphi * da) / a) + (sphi * cphi * (rho / (1 - f) + nu * (1 - f)) * df); const double dphi_denom = rho + lpz.z; if (dphi_denom == 0.0) { lpz.lam = HUGE_VAL; return lpz; } dphi /= dphi_denom; /* delta lambda */ const double dlam_denom = (nu + lpz.z) * cphi; if (dlam_denom == 0.0) { lpz.lam = HUGE_VAL; return lpz; } dlam = (-dx * slam + dy * clam) / dlam_denom; /* delta h */ dh = dx * cphi * clam + dy * cphi * slam + dz * sphi - (a / nu) * da + nu * (1 - f) * sphi * sphi * df; lpz.phi = dphi; lpz.lam = dlam; lpz.z = dh; return lpz; } static PJ_LPZ calc_abridged_params(PJ_LPZ lpz, PJ *P) { struct pj_opaque_molodensky *Q = (struct pj_opaque_molodensky *)P->opaque; double dphi, dlam, dh; /* sines and cosines */ double slam = sin(lpz.lam); double clam = cos(lpz.lam); double sphi = sin(lpz.phi); double cphi = cos(lpz.phi); /* ellipsoid parameters and differences */ double dx = Q->dx, dy = Q->dy, dz = Q->dz; double da = Q->da, df = Q->df; double adffda = (P->a * df + P->f * da); /* delta phi */ dphi = -dx * sphi * clam - dy * sphi * slam + dz * cphi + adffda * sin(2 * lpz.phi); dphi /= RM(P->a, P->es, lpz.phi); /* delta lambda */ dlam = -dx * slam + dy * clam; const double dlam_denom = RN(P->a, P->es, lpz.phi) * cphi; if (dlam_denom == 0.0) { lpz.lam = HUGE_VAL; return lpz; } dlam /= dlam_denom; /* delta h */ dh = dx * cphi * clam + dy * cphi * slam + dz * sphi - da + adffda * sphi * sphi; /* offset coordinate */ lpz.phi = dphi; lpz.lam = dlam; lpz.z = dh; return lpz; } static PJ_XY pj_molodensky_forward_2d(PJ_LP lp, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.lp = lp; // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto xyz = pj_molodensky_forward_3d(point.lpz, P); point.xyz = xyz; return point.xy; } static PJ_LP pj_molodensky_reverse_2d(PJ_XY xy, PJ *P) { PJ_COORD point = {{0, 0, 0, 0}}; point.xy = xy; point.xyz.z = 0; // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto lpz = pj_molodensky_reverse_3d(point.xyz, P); point.lpz = lpz; return point.lp; } static PJ_XYZ pj_molodensky_forward_3d(PJ_LPZ lpz, PJ *P) { struct pj_opaque_molodensky *Q = (struct pj_opaque_molodensky *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; point.lpz = lpz; /* calculate parameters depending on the mode we are in */ if (Q->abridged) { lpz = calc_abridged_params(lpz, P); } else { lpz = calc_standard_params(lpz, P); } if (lpz.lam == HUGE_VAL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().xyz; } /* offset coordinate */ point.lpz.phi += lpz.phi; point.lpz.lam += lpz.lam; point.lpz.z += lpz.z; return point.xyz; } static void pj_molodensky_forward_4d(PJ_COORD &obs, PJ *P) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto xyz = pj_molodensky_forward_3d(obs.lpz, P); obs.xyz = xyz; } static PJ_LPZ pj_molodensky_reverse_3d(PJ_XYZ xyz, PJ *P) { struct pj_opaque_molodensky *Q = (struct pj_opaque_molodensky *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; PJ_LPZ lpz; /* calculate parameters depending on the mode we are in */ point.xyz = xyz; if (Q->abridged) lpz = calc_abridged_params(point.lpz, P); else lpz = calc_standard_params(point.lpz, P); if (lpz.lam == HUGE_VAL) { proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN); return proj_coord_error().lpz; } /* offset coordinate */ point.lpz.phi -= lpz.phi; point.lpz.lam -= lpz.lam; point.lpz.z -= lpz.z; return point.lpz; } static void pj_molodensky_reverse_4d(PJ_COORD &obs, PJ *P) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto lpz = pj_molodensky_reverse_3d(obs.xyz, P); obs.lpz = lpz; } PJ *PJ_TRANSFORMATION(molodensky, 1) { struct pj_opaque_molodensky *Q = static_cast( calloc(1, sizeof(struct pj_opaque_molodensky))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = (void *)Q; P->fwd4d = pj_molodensky_forward_4d; P->inv4d = pj_molodensky_reverse_4d; P->fwd3d = pj_molodensky_forward_3d; P->inv3d = pj_molodensky_reverse_3d; P->fwd = pj_molodensky_forward_2d; P->inv = pj_molodensky_reverse_2d; P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; /* read args */ if (!pj_param(P->ctx, P->params, "tdx").i) { proj_log_error(P, _("missing dx")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->dx = pj_param(P->ctx, P->params, "ddx").f; if (!pj_param(P->ctx, P->params, "tdy").i) { proj_log_error(P, _("missing dy")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->dy = pj_param(P->ctx, P->params, "ddy").f; if (!pj_param(P->ctx, P->params, "tdz").i) { proj_log_error(P, _("missing dz")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->dz = pj_param(P->ctx, P->params, "ddz").f; if (!pj_param(P->ctx, P->params, "tda").i) { proj_log_error(P, _("missing da")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->da = pj_param(P->ctx, P->params, "dda").f; if (!pj_param(P->ctx, P->params, "tdf").i) { proj_log_error(P, _("missing df")); return pj_default_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } Q->df = pj_param(P->ctx, P->params, "ddf").f; Q->abridged = pj_param(P->ctx, P->params, "tabridged").i; return P; } proj-9.6.0/src/transformations/tinshift.cpp000664 001754 001755 00000011403 14764566077 020774 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to triangulation transformation * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ #define PROJ_COMPILATION #include "tinshift.hpp" #include "filemanager.hpp" #include "proj_internal.h" PROJ_HEAD(tinshift, "Triangulation based transformation"); using namespace TINSHIFT_NAMESPACE; namespace { struct tinshiftData { std::unique_ptr evaluator{}; tinshiftData() = default; tinshiftData(const tinshiftData &) = delete; tinshiftData &operator=(const tinshiftData &) = delete; }; } // namespace static PJ *pj_tinshift_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; auto Q = static_cast(P->opaque); delete Q; P->opaque = nullptr; return pj_default_destructor(P, errlev); } static void tinshift_forward_4d(PJ_COORD &coo, PJ *P) { auto *Q = (struct tinshiftData *)P->opaque; if (!Q->evaluator->forward(coo.xyz.x, coo.xyz.y, coo.xyz.z, coo.xyz.x, coo.xyz.y, coo.xyz.z)) { coo = proj_coord_error(); } } static void tinshift_reverse_4d(PJ_COORD &coo, PJ *P) { auto *Q = (struct tinshiftData *)P->opaque; if (!Q->evaluator->inverse(coo.xyz.x, coo.xyz.y, coo.xyz.z, coo.xyz.x, coo.xyz.y, coo.xyz.z)) { coo = proj_coord_error(); } } PJ *PJ_TRANSFORMATION(tinshift, 1) { const char *filename = pj_param(P->ctx, P->params, "sfile").s; if (!filename) { proj_log_error(P, _("+file= should be specified.")); return pj_tinshift_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } auto file = NS_PROJ::FileManager::open_resource_file(P->ctx, filename); if (nullptr == file) { proj_log_error(P, _("Cannot open %s"), filename); return pj_tinshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0, SEEK_END); unsigned long long size = file->tell(); // Arbitrary threshold to avoid ingesting an arbitrarily large JSON file, // that could be a denial of service risk. 100 MB should be sufficiently // large for any valid use ! if (size > 100 * 1024 * 1024) { proj_log_error(P, _("File %s too large"), filename); return pj_tinshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } file->seek(0); std::string jsonStr; try { jsonStr.resize(static_cast(size)); } catch (const std::bad_alloc &) { proj_log_error(P, _("Cannot read %s. Not enough memory"), filename); return pj_tinshift_destructor(P, PROJ_ERR_OTHER); } if (file->read(&jsonStr[0], jsonStr.size()) != jsonStr.size()) { proj_log_error(P, _("Cannot read %s"), filename); return pj_tinshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } auto Q = new tinshiftData(); P->opaque = (void *)Q; P->destructor = pj_tinshift_destructor; try { Q->evaluator.reset(new Evaluator(TINShiftFile::parse(jsonStr))); } catch (const std::exception &e) { proj_log_error(P, _("invalid model: %s"), e.what()); return pj_tinshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } P->fwd4d = tinshift_forward_4d; P->inv4d = tinshift_reverse_4d; P->left = PJ_IO_UNITS_WHATEVER; P->right = PJ_IO_UNITS_WHATEVER; return P; } proj-9.6.0/src/transformations/tinshift.hpp000664 001754 001755 00000022711 14764566077 021005 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to TIN based transformations * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ #ifndef TINSHIFT_HPP #define TINSHIFT_HPP #ifdef PROJ_COMPILATION #include "proj/internal/include_nlohmann_json.hpp" #else #include "nlohmann/json.hpp" #endif #include #include #include #include #include #include #include #include #include "quadtree.hpp" #ifndef TINSHIFT_NAMESPACE #define TINSHIFT_NAMESPACE TINShift #endif #include "tinshift_exceptions.hpp" namespace TINSHIFT_NAMESPACE { enum FallbackStrategy { FALLBACK_NONE, FALLBACK_NEAREST_SIDE, FALLBACK_NEAREST_CENTROID, }; using json = nlohmann::json; // --------------------------------------------------------------------------- /** Content of a TINShift file. */ class TINShiftFile { public: /** Parse the provided serialized JSON content and return an object. * * @throws ParsingException in case of error. */ static std::unique_ptr parse(const std::string &text); /** Get file type. Should always be "triangulation_file" */ const std::string &fileType() const { return mFileType; } /** Get the version of the format. At time of writing, only "1.0" is known */ const std::string &formatVersion() const { return mFormatVersion; } /** Get brief descriptive name of the deformation model. */ const std::string &name() const { return mName; } /** Get a string identifying the version of the deformation model. * The format for specifying version is defined by the agency * responsible for the deformation model. */ const std::string &version() const { return mVersion; } /** Get a string identifying the license of the file. * e.g "Create Commons Attribution 4.0 International" */ const std::string &license() const { return mLicense; } /** Get a text description of the model. Intended to be longer than name() */ const std::string &description() const { return mDescription; } /** Get a text description of the model. Intended to be longer than name() */ const std::string &publicationDate() const { return mPublicationDate; } const enum FallbackStrategy &fallbackStrategy() const { return mFallbackStrategy; } /** Basic information on the agency responsible for the model. */ struct Authority { std::string name{}; std::string url{}; std::string address{}; std::string email{}; }; /** Get basic information on the agency responsible for the model. */ const Authority &authority() const { return mAuthority; } /** Hyperlink related to the model. */ struct Link { /** URL holding the information */ std::string href{}; /** Relationship to the dataset. e.g. "about", "source", "license", * "metadata" */ std::string rel{}; /** Mime type */ std::string type{}; /** Description of the link */ std::string title{}; }; /** Get links to related information. */ const std::vector links() const { return mLinks; } /** Get a string identifying the CRS of source coordinates in the * vertices. Typically "EPSG:XXXX". If the transformation is for vertical * component, this should be the code for a compound CRS (can be * EPSG:XXXX+YYYY where XXXX is the code of the horizontal CRS and YYYY * the code of the vertical CRS). * For example, for the KKJ->ETRS89 transformation, this is EPSG:2393 * ("KKJ / Finland Uniform Coordinate System"). * The input coordinates are assumed to * be passed in the "normalized for visualisation" / "GIS friendly" order, * that is longitude, latitude for geographic coordinates and * easting, northing for projected coordinates. * This may be empty for unspecified CRS. */ const std::string &inputCRS() const { return mInputCRS; } /** Get a string identifying the CRS of target coordinates in the * vertices. Typically "EPSG:XXXX". If the transformation is for vertical * component, this should be the code for a compound CRS (can be * EPSG:XXXX+YYYY where XXXX is the code of the horizontal CRS and YYYY * the code of the vertical CRS). * For example, for the KKJ->ETRS89 transformation, this is EPSG:3067 * ("ETRS89 / TM35FIN(E,N)"). * The output coordinates will be * returned in the "normalized for visualisation" / "GIS friendly" order, * that is longitude, latitude for geographic coordinates and * easting, northing for projected coordinates. * This may be empty for unspecified CRS. */ const std::string &outputCRS() const { return mOutputCRS; } /** Return whether horizontal coordinates are transformed. */ bool transformHorizontalComponent() const { return mTransformHorizontalComponent; } /** Return whether vertical coordinates are transformed. */ bool transformVerticalComponent() const { return mTransformVerticalComponent; } /** Indices of vertices of a triangle */ struct VertexIndices { /** Index of first vertex */ unsigned idx1; /** Index of second vertex */ unsigned idx2; /** Index of third vertex */ unsigned idx3; }; /** Return number of elements per vertex of vertices() */ unsigned verticesColumnCount() const { return mVerticesColumnCount; } /** Return description of triangulation vertices. * Each vertex is described by verticesColumnCount() consecutive values. * They are respectively: * - the source X value * - the source Y value * - (if transformHorizontalComponent() is true) the target X value * - (if transformHorizontalComponent() is true) the target Y value * - (if transformVerticalComponent() is true) the delta Z value (to go from * source to target Z) * * X is assumed to be a longitude (in degrees) or easting value. * Y is assumed to be a latitude (in degrees) or northing value. */ const std::vector &vertices() const { return mVertices; } /** Return triangles*/ const std::vector &triangles() const { return mTriangles; } private: TINShiftFile() = default; std::string mFileType{}; std::string mFormatVersion{}; std::string mName{}; std::string mVersion{}; std::string mLicense{}; std::string mDescription{}; std::string mPublicationDate{}; enum FallbackStrategy mFallbackStrategy {}; Authority mAuthority{}; std::vector mLinks{}; std::string mInputCRS{}; std::string mOutputCRS{}; bool mTransformHorizontalComponent = false; bool mTransformVerticalComponent = false; unsigned mVerticesColumnCount = 0; std::vector mVertices{}; std::vector mTriangles{}; }; // --------------------------------------------------------------------------- /** Class to evaluate the transformation of a coordinate */ class Evaluator { public: /** Constructor. */ explicit Evaluator(std::unique_ptr &&fileIn); /** Get file */ const TINShiftFile &file() const { return *(mFile.get()); } /** Evaluate displacement of a position given by (x,y,z,t) and * return it in (x_out,y_out_,z_out). */ bool forward(double x, double y, double z, double &x_out, double &y_out, double &z_out); /** Apply inverse transformation. */ bool inverse(double x, double y, double z, double &x_out, double &y_out, double &z_out); private: std::unique_ptr mFile; // Reused between invocations to save memory allocations std::vector mTriangleIndices{}; std::unique_ptr> mQuadTreeForward{}; std::unique_ptr> mQuadTreeInverse{}; }; // --------------------------------------------------------------------------- } // namespace TINSHIFT_NAMESPACE // --------------------------------------------------------------------------- #include "tinshift_impl.hpp" #endif // TINSHIFT_HPP proj-9.6.0/src/transformations/tinshift_exceptions.hpp000664 001754 001755 00000004203 14764566077 023242 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to TIN based transformations * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ #ifndef TINSHIFT_NAMESPACE #error "Should be included only by tinshift.hpp" #endif #include namespace TINSHIFT_NAMESPACE { // --------------------------------------------------------------------------- /** Parsing exception. */ class ParsingException : public std::exception { public: explicit ParsingException(const std::string &msg) : msg_(msg) {} const char *what() const noexcept override; private: std::string msg_; }; const char *ParsingException::what() const noexcept { return msg_.c_str(); } // --------------------------------------------------------------------------- } // namespace TINSHIFT_NAMESPACE proj-9.6.0/src/transformations/tinshift_impl.hpp000664 001754 001755 00000067463 14764566077 022043 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Functionality related to TIN based transformations * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2020, 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. *****************************************************************************/ #ifndef TINSHIFT_NAMESPACE #error "Should be included only by tinshift.hpp" #endif #include namespace TINSHIFT_NAMESPACE { // --------------------------------------------------------------------------- static std::string getString(const json &j, const char *key, bool optional) { if (!j.contains(key)) { if (optional) { return std::string(); } throw ParsingException(std::string("Missing \"") + key + "\" key"); } const json v = j[key]; if (!v.is_string()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a string"); } return v.get(); } static std::string getReqString(const json &j, const char *key) { return getString(j, key, false); } static std::string getOptString(const json &j, const char *key) { return getString(j, key, true); } // --------------------------------------------------------------------------- static json getArrayMember(const json &j, const char *key) { if (!j.contains(key)) { throw ParsingException(std::string("Missing \"") + key + "\" key"); } const json obj = j[key]; if (!obj.is_array()) { throw ParsingException(std::string("The value of \"") + key + "\" should be a array"); } return obj; } // --------------------------------------------------------------------------- std::unique_ptr TINShiftFile::parse(const std::string &text) { std::unique_ptr tinshiftFile(new TINShiftFile()); json j; try { j = json::parse(text); } catch (const std::exception &e) { throw ParsingException(e.what()); } if (!j.is_object()) { throw ParsingException("Not an object"); } tinshiftFile->mFileType = getReqString(j, "file_type"); tinshiftFile->mFormatVersion = getReqString(j, "format_version"); tinshiftFile->mName = getOptString(j, "name"); tinshiftFile->mVersion = getOptString(j, "version"); tinshiftFile->mLicense = getOptString(j, "license"); tinshiftFile->mDescription = getOptString(j, "description"); tinshiftFile->mPublicationDate = getOptString(j, "publication_date"); tinshiftFile->mFallbackStrategy = FALLBACK_NONE; if (j.contains("fallback_strategy")) { if (tinshiftFile->mFormatVersion != "1.1") { throw ParsingException( "fallback_strategy needs format_version 1.1"); } const auto fallback_strategy = getOptString(j, "fallback_strategy"); if (fallback_strategy == "nearest_side") { tinshiftFile->mFallbackStrategy = FALLBACK_NEAREST_SIDE; } else if (fallback_strategy == "nearest_centroid") { tinshiftFile->mFallbackStrategy = FALLBACK_NEAREST_CENTROID; } else if (fallback_strategy == "none") { tinshiftFile->mFallbackStrategy = FALLBACK_NONE; } else { throw ParsingException("invalid fallback_strategy"); } } if (j.contains("authority")) { const json jAuthority = j["authority"]; if (!jAuthority.is_object()) { throw ParsingException("authority is not a object"); } tinshiftFile->mAuthority.name = getOptString(jAuthority, "name"); tinshiftFile->mAuthority.url = getOptString(jAuthority, "url"); tinshiftFile->mAuthority.address = getOptString(jAuthority, "address"); tinshiftFile->mAuthority.email = getOptString(jAuthority, "email"); } if (j.contains("links")) { const json jLinks = j["links"]; if (!jLinks.is_array()) { throw ParsingException("links is not an array"); } for (const json &jLink : jLinks) { if (!jLink.is_object()) { throw ParsingException("links[] item is not an object"); } Link link; link.href = getOptString(jLink, "href"); link.rel = getOptString(jLink, "rel"); link.type = getOptString(jLink, "type"); link.title = getOptString(jLink, "title"); tinshiftFile->mLinks.emplace_back(std::move(link)); } } tinshiftFile->mInputCRS = getOptString(j, "input_crs"); tinshiftFile->mOutputCRS = getOptString(j, "output_crs"); const auto jTransformedComponents = getArrayMember(j, "transformed_components"); for (const json &jComp : jTransformedComponents) { if (!jComp.is_string()) { throw ParsingException( "transformed_components[] item is not a string"); } const auto jCompStr = jComp.get(); if (jCompStr == "horizontal") { tinshiftFile->mTransformHorizontalComponent = true; } else if (jCompStr == "vertical") { tinshiftFile->mTransformVerticalComponent = true; } else { throw ParsingException("transformed_components[] = " + jCompStr + " is not handled"); } } const auto jVerticesColumns = getArrayMember(j, "vertices_columns"); int sourceXCol = -1; int sourceYCol = -1; int sourceZCol = -1; int targetXCol = -1; int targetYCol = -1; int targetZCol = -1; int offsetZCol = -1; for (size_t i = 0; i < jVerticesColumns.size(); ++i) { const json &jColumn = jVerticesColumns[i]; if (!jColumn.is_string()) { throw ParsingException("vertices_columns[] item is not a string"); } const auto jColumnStr = jColumn.get(); if (jColumnStr == "source_x") { sourceXCol = static_cast(i); } else if (jColumnStr == "source_y") { sourceYCol = static_cast(i); } else if (jColumnStr == "source_z") { sourceZCol = static_cast(i); } else if (jColumnStr == "target_x") { targetXCol = static_cast(i); } else if (jColumnStr == "target_y") { targetYCol = static_cast(i); } else if (jColumnStr == "target_z") { targetZCol = static_cast(i); } else if (jColumnStr == "offset_z") { offsetZCol = static_cast(i); } } if (sourceXCol < 0) { throw ParsingException( "source_x must be specified in vertices_columns[]"); } if (sourceYCol < 0) { throw ParsingException( "source_y must be specified in vertices_columns[]"); } if (tinshiftFile->mTransformHorizontalComponent) { if (targetXCol < 0) { throw ParsingException( "target_x must be specified in vertices_columns[]"); } if (targetYCol < 0) { throw ParsingException( "target_y must be specified in vertices_columns[]"); } } if (tinshiftFile->mTransformVerticalComponent) { if (offsetZCol >= 0) { // do nothing } else { if (sourceZCol < 0) { throw ParsingException("source_z or delta_z must be specified " "in vertices_columns[]"); } if (targetZCol < 0) { throw ParsingException( "target_z must be specified in vertices_columns[]"); } } } const auto jTrianglesColumns = getArrayMember(j, "triangles_columns"); int idxVertex1Col = -1; int idxVertex2Col = -1; int idxVertex3Col = -1; for (size_t i = 0; i < jTrianglesColumns.size(); ++i) { const json &jColumn = jTrianglesColumns[i]; if (!jColumn.is_string()) { throw ParsingException("triangles_columns[] item is not a string"); } const auto jColumnStr = jColumn.get(); if (jColumnStr == "idx_vertex1") { idxVertex1Col = static_cast(i); } else if (jColumnStr == "idx_vertex2") { idxVertex2Col = static_cast(i); } else if (jColumnStr == "idx_vertex3") { idxVertex3Col = static_cast(i); } } if (idxVertex1Col < 0) { throw ParsingException( "idx_vertex1 must be specified in triangles_columns[]"); } if (idxVertex2Col < 0) { throw ParsingException( "idx_vertex2 must be specified in triangles_columns[]"); } if (idxVertex3Col < 0) { throw ParsingException( "idx_vertex3 must be specified in triangles_columns[]"); } const auto jVertices = getArrayMember(j, "vertices"); tinshiftFile->mVerticesColumnCount = 2; if (tinshiftFile->mTransformHorizontalComponent) tinshiftFile->mVerticesColumnCount += 2; if (tinshiftFile->mTransformVerticalComponent) tinshiftFile->mVerticesColumnCount += 1; tinshiftFile->mVertices.reserve(tinshiftFile->mVerticesColumnCount * jVertices.size()); for (const auto &jVertex : jVertices) { if (!jVertex.is_array()) { throw ParsingException("vertices[] item is not an array"); } if (jVertex.size() != jVerticesColumns.size()) { throw ParsingException( "vertices[] item has not expected number of elements"); } if (!jVertex[sourceXCol].is_number()) { throw ParsingException("vertices[][] item is not a number"); } tinshiftFile->mVertices.push_back(jVertex[sourceXCol].get()); if (!jVertex[sourceYCol].is_number()) { throw ParsingException("vertices[][] item is not a number"); } tinshiftFile->mVertices.push_back(jVertex[sourceYCol].get()); if (tinshiftFile->mTransformHorizontalComponent) { if (!jVertex[targetXCol].is_number()) { throw ParsingException("vertices[][] item is not a number"); } tinshiftFile->mVertices.push_back( jVertex[targetXCol].get()); if (!jVertex[targetYCol].is_number()) { throw ParsingException("vertices[][] item is not a number"); } tinshiftFile->mVertices.push_back( jVertex[targetYCol].get()); } if (tinshiftFile->mTransformVerticalComponent) { if (offsetZCol >= 0) { if (!jVertex[offsetZCol].is_number()) { throw ParsingException("vertices[][] item is not a number"); } tinshiftFile->mVertices.push_back( jVertex[offsetZCol].get()); } else { if (!jVertex[sourceZCol].is_number()) { throw ParsingException("vertices[][] item is not a number"); } const double sourceZ = jVertex[sourceZCol].get(); if (!jVertex[targetZCol].is_number()) { throw ParsingException("vertices[][] item is not a number"); } const double targetZ = jVertex[targetZCol].get(); tinshiftFile->mVertices.push_back(targetZ - sourceZ); } } } const auto jTriangles = getArrayMember(j, "triangles"); tinshiftFile->mTriangles.reserve(jTriangles.size()); for (const auto &jTriangle : jTriangles) { if (!jTriangle.is_array()) { throw ParsingException("triangles[] item is not an array"); } if (jTriangle.size() != jTrianglesColumns.size()) { throw ParsingException( "triangles[] item has not expected number of elements"); } if (jTriangle[idxVertex1Col].type() != json::value_t::number_unsigned) { throw ParsingException("triangles[][] item is not an integer"); } const unsigned vertex1 = jTriangle[idxVertex1Col].get(); if (vertex1 >= jVertices.size()) { throw ParsingException("Invalid value for a vertex index"); } if (jTriangle[idxVertex2Col].type() != json::value_t::number_unsigned) { throw ParsingException("triangles[][] item is not an integer"); } const unsigned vertex2 = jTriangle[idxVertex2Col].get(); if (vertex2 >= jVertices.size()) { throw ParsingException("Invalid value for a vertex index"); } if (jTriangle[idxVertex3Col].type() != json::value_t::number_unsigned) { throw ParsingException("triangles[][] item is not an integer"); } const unsigned vertex3 = jTriangle[idxVertex3Col].get(); if (vertex3 >= jVertices.size()) { throw ParsingException("Invalid value for a vertex index"); } VertexIndices vi; vi.idx1 = vertex1; vi.idx2 = vertex2; vi.idx3 = vertex3; tinshiftFile->mTriangles.push_back(vi); } return tinshiftFile; } // --------------------------------------------------------------------------- static NS_PROJ::QuadTree::RectObj GetBounds(const TINShiftFile &file, bool forward) { NS_PROJ::QuadTree::RectObj rect; rect.minx = std::numeric_limits::max(); rect.miny = std::numeric_limits::max(); rect.maxx = -std::numeric_limits::max(); rect.maxy = -std::numeric_limits::max(); const auto &vertices = file.vertices(); const unsigned colCount = file.verticesColumnCount(); const int idxX = file.transformHorizontalComponent() && !forward ? 2 : 0; const int idxY = file.transformHorizontalComponent() && !forward ? 3 : 1; for (size_t i = 0; i + colCount - 1 < vertices.size(); i += colCount) { const double x = vertices[i + idxX]; const double y = vertices[i + idxY]; rect.minx = std::min(rect.minx, x); rect.miny = std::min(rect.miny, y); rect.maxx = std::max(rect.maxx, x); rect.maxy = std::max(rect.maxy, y); } return rect; } // --------------------------------------------------------------------------- static std::unique_ptr> BuildQuadTree(const TINShiftFile &file, bool forward) { auto quadtree = std::unique_ptr>( new NS_PROJ::QuadTree::QuadTree(GetBounds(file, forward))); const auto &triangles = file.triangles(); const auto &vertices = file.vertices(); const int idxX = file.transformHorizontalComponent() && !forward ? 2 : 0; const int idxY = file.transformHorizontalComponent() && !forward ? 3 : 1; const unsigned colCount = file.verticesColumnCount(); for (size_t i = 0; i < triangles.size(); ++i) { const unsigned i1 = triangles[i].idx1; const unsigned i2 = triangles[i].idx2; const unsigned i3 = triangles[i].idx3; const double x1 = vertices[i1 * colCount + idxX]; const double y1 = vertices[i1 * colCount + idxY]; const double x2 = vertices[i2 * colCount + idxX]; const double y2 = vertices[i2 * colCount + idxY]; const double x3 = vertices[i3 * colCount + idxX]; const double y3 = vertices[i3 * colCount + idxY]; NS_PROJ::QuadTree::RectObj rect; rect.minx = x1; rect.miny = y1; rect.maxx = x1; rect.maxy = y1; rect.minx = std::min(rect.minx, x2); rect.miny = std::min(rect.miny, y2); rect.maxx = std::max(rect.maxx, x2); rect.maxy = std::max(rect.maxy, y2); rect.minx = std::min(rect.minx, x3); rect.miny = std::min(rect.miny, y3); rect.maxx = std::max(rect.maxx, x3); rect.maxy = std::max(rect.maxy, y3); quadtree->insert(static_cast(i), rect); } return quadtree; } // --------------------------------------------------------------------------- Evaluator::Evaluator(std::unique_ptr &&fileIn) : mFile(std::move(fileIn)) {} // --------------------------------------------------------------------------- static inline double sqr(double x) { return x * x; } static inline double squared_distance(double x1, double y1, double x2, double y2) { return sqr(x1 - x2) + sqr(y1 - y2); } static double distance_point_segment(double x, double y, double x1, double y1, double x2, double y2, double dist12) { // squared distance of point x/y to line segment x1/y1 -- x2/y2 double t = ((x - x1) * (x2 - x1) + (y - y1) * (y2 - y1)) / dist12; if (t <= 0.0) { // closest to x1/y1 return squared_distance(x, y, x1, y1); } if (t >= 1.0) { // closest to y2/y2 return squared_distance(x, y, x2, y2); } // closest to line segment x1/y1 -- x2/y2 return squared_distance(x, y, x1 + t * (x2 - x1), y1 + t * (y2 - y1)); } static const TINShiftFile::VertexIndices * FindTriangle(const TINShiftFile &file, const NS_PROJ::QuadTree::QuadTree &quadtree, std::vector &triangleIndices, double x, double y, bool forward, double &lambda1, double &lambda2, double &lambda3) { #define USE_QUADTREE #ifdef USE_QUADTREE triangleIndices.clear(); quadtree.search(x, y, triangleIndices); #endif const auto &triangles = file.triangles(); const auto &vertices = file.vertices(); constexpr double EPS = 1e-10; const int idxX = file.transformHorizontalComponent() && !forward ? 2 : 0; const int idxY = file.transformHorizontalComponent() && !forward ? 3 : 1; const unsigned colCount = file.verticesColumnCount(); #ifdef USE_QUADTREE for (unsigned i : triangleIndices) #else for (size_t i = 0; i < triangles.size(); ++i) #endif { const auto &triangle = triangles[i]; const unsigned i1 = triangle.idx1; const unsigned i2 = triangle.idx2; const unsigned i3 = triangle.idx3; const double x1 = vertices[i1 * colCount + idxX]; const double y1 = vertices[i1 * colCount + idxY]; const double x2 = vertices[i2 * colCount + idxX]; const double y2 = vertices[i2 * colCount + idxY]; const double x3 = vertices[i3 * colCount + idxX]; const double y3 = vertices[i3 * colCount + idxY]; const double det_T = (y2 - y3) * (x1 - x3) + (x3 - x2) * (y1 - y3); lambda1 = ((y2 - y3) * (x - x3) + (x3 - x2) * (y - y3)) / det_T; lambda2 = ((y3 - y1) * (x - x3) + (x1 - x3) * (y - y3)) / det_T; if (lambda1 >= -EPS && lambda1 <= 1 + EPS && lambda2 >= -EPS && lambda2 <= 1 + EPS) { lambda3 = 1 - lambda1 - lambda2; if (lambda3 >= 0) { return ▵ } } } if (file.fallbackStrategy() == FALLBACK_NONE) { return nullptr; } // find triangle with the shortest squared distance // // TODO: extend quadtree to support nearest neighbor search double closest_dist = std::numeric_limits::infinity(); double closest_dist2 = std::numeric_limits::infinity(); size_t closest_i = 0; for (size_t i = 0; i < triangles.size(); ++i) { const auto &triangle = triangles[i]; const unsigned i1 = triangle.idx1; const unsigned i2 = triangle.idx2; const unsigned i3 = triangle.idx3; const double x1 = vertices[i1 * colCount + idxX]; const double y1 = vertices[i1 * colCount + idxY]; const double x2 = vertices[i2 * colCount + idxX]; const double y2 = vertices[i2 * colCount + idxY]; const double x3 = vertices[i3 * colCount + idxX]; const double y3 = vertices[i3 * colCount + idxY]; // don't check this triangle if the query point plusminus the // currently closest found distance is outside the triangle's AABB if (x + closest_dist < std::min(x1, std::min(x2, x3)) || x - closest_dist > std::max(x1, std::max(x2, x3)) || y + closest_dist < std::min(y1, std::min(y2, y3)) || y - closest_dist > std::max(y1, std::max(y2, y3))) { continue; } double dist12 = squared_distance(x1, y1, x2, y2); double dist23 = squared_distance(x2, y2, x3, y3); double dist13 = squared_distance(x1, y1, x3, y3); if (dist12 < EPS || dist23 < EPS || dist13 < EPS) { // do not use degenerate triangles continue; } double dist2; if (file.fallbackStrategy() == FALLBACK_NEAREST_SIDE) { // we don't know whether the points of the triangle are given // clockwise or counter-clockwise, so we have to check the distance // of the point to all three sides of the triangle dist2 = distance_point_segment(x, y, x1, y1, x2, y2, dist12); if (dist2 < closest_dist2) { closest_dist2 = dist2; closest_dist = sqrt(dist2); closest_i = i; } dist2 = distance_point_segment(x, y, x2, y2, x3, y3, dist23); if (dist2 < closest_dist2) { closest_dist2 = dist2; closest_dist = sqrt(dist2); closest_i = i; } dist2 = distance_point_segment(x, y, x1, y1, x3, y3, dist13); if (dist2 < closest_dist2) { closest_dist2 = dist2; closest_dist = sqrt(dist2); closest_i = i; } } else if (file.fallbackStrategy() == FALLBACK_NEAREST_CENTROID) { double c_x = (x1 + x2 + x3) / 3.0; double c_y = (y1 + y2 + y3) / 3.0; dist2 = squared_distance(x, y, c_x, c_y); if (dist2 < closest_dist2) { closest_dist2 = dist2; closest_dist = sqrt(dist2); closest_i = i; } } } if (std::isinf(closest_dist)) { // nothing was found due to empty triangle list or only degenerate // triangles return nullptr; } const auto &triangle = triangles[closest_i]; const unsigned i1 = triangle.idx1; const unsigned i2 = triangle.idx2; const unsigned i3 = triangle.idx3; const double x1 = vertices[i1 * colCount + idxX]; const double y1 = vertices[i1 * colCount + idxY]; const double x2 = vertices[i2 * colCount + idxX]; const double y2 = vertices[i2 * colCount + idxY]; const double x3 = vertices[i3 * colCount + idxX]; const double y3 = vertices[i3 * colCount + idxY]; const double det_T = (y2 - y3) * (x1 - x3) + (x3 - x2) * (y1 - y3); if (std::fabs(det_T) < EPS) { // the nearest triangle is degenerate return nullptr; } lambda1 = ((y2 - y3) * (x - x3) + (x3 - x2) * (y - y3)) / det_T; lambda2 = ((y3 - y1) * (x - x3) + (x1 - x3) * (y - y3)) / det_T; lambda3 = 1 - lambda1 - lambda2; return ▵ } // --------------------------------------------------------------------------- bool Evaluator::forward(double x, double y, double z, double &x_out, double &y_out, double &z_out) { if (!mQuadTreeForward) mQuadTreeForward = BuildQuadTree(*(mFile.get()), true); double lambda1 = 0.0; double lambda2 = 0.0; double lambda3 = 0.0; const auto *triangle = FindTriangle(*mFile, *mQuadTreeForward, mTriangleIndices, x, y, true, lambda1, lambda2, lambda3); if (!triangle) return false; const auto &vertices = mFile->vertices(); const unsigned i1 = triangle->idx1; const unsigned i2 = triangle->idx2; const unsigned i3 = triangle->idx3; const unsigned colCount = mFile->verticesColumnCount(); if (mFile->transformHorizontalComponent()) { constexpr unsigned idxTargetColX = 2; constexpr unsigned idxTargetColY = 3; x_out = vertices[i1 * colCount + idxTargetColX] * lambda1 + vertices[i2 * colCount + idxTargetColX] * lambda2 + vertices[i3 * colCount + idxTargetColX] * lambda3; y_out = vertices[i1 * colCount + idxTargetColY] * lambda1 + vertices[i2 * colCount + idxTargetColY] * lambda2 + vertices[i3 * colCount + idxTargetColY] * lambda3; } else { x_out = x; y_out = y; } if (mFile->transformVerticalComponent()) { const int idxCol = mFile->transformHorizontalComponent() ? 4 : 2; z_out = z + (vertices[i1 * colCount + idxCol] * lambda1 + vertices[i2 * colCount + idxCol] * lambda2 + vertices[i3 * colCount + idxCol] * lambda3); } else { z_out = z; } return true; } // --------------------------------------------------------------------------- bool Evaluator::inverse(double x, double y, double z, double &x_out, double &y_out, double &z_out) { NS_PROJ::QuadTree::QuadTree *quadtree; if (!mFile->transformHorizontalComponent() && mFile->transformVerticalComponent()) { if (!mQuadTreeForward) mQuadTreeForward = BuildQuadTree(*(mFile.get()), true); quadtree = mQuadTreeForward.get(); } else { if (!mQuadTreeInverse) mQuadTreeInverse = BuildQuadTree(*(mFile.get()), false); quadtree = mQuadTreeInverse.get(); } double lambda1 = 0.0; double lambda2 = 0.0; double lambda3 = 0.0; const auto *triangle = FindTriangle(*mFile, *quadtree, mTriangleIndices, x, y, false, lambda1, lambda2, lambda3); if (!triangle) return false; const auto &vertices = mFile->vertices(); const unsigned i1 = triangle->idx1; const unsigned i2 = triangle->idx2; const unsigned i3 = triangle->idx3; const unsigned colCount = mFile->verticesColumnCount(); if (mFile->transformHorizontalComponent()) { constexpr unsigned idxTargetColX = 0; constexpr unsigned idxTargetColY = 1; x_out = vertices[i1 * colCount + idxTargetColX] * lambda1 + vertices[i2 * colCount + idxTargetColX] * lambda2 + vertices[i3 * colCount + idxTargetColX] * lambda3; y_out = vertices[i1 * colCount + idxTargetColY] * lambda1 + vertices[i2 * colCount + idxTargetColY] * lambda2 + vertices[i3 * colCount + idxTargetColY] * lambda3; } else { x_out = x; y_out = y; } if (mFile->transformVerticalComponent()) { const int idxCol = mFile->transformHorizontalComponent() ? 4 : 2; z_out = z - (vertices[i1 * colCount + idxCol] * lambda1 + vertices[i2 * colCount + idxCol] * lambda2 + vertices[i3 * colCount + idxCol] * lambda3); } else { z_out = z; } return true; } } // namespace TINSHIFT_NAMESPACE proj-9.6.0/src/transformations/vertoffset.cpp000664 001754 001755 00000007425 14764566077 021344 0ustar00e012349e012349000000 000000 /************************************************************************ * Copyright (c) 2022, 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 #include #include "proj.h" #include "proj_internal.h" PROJ_HEAD(vertoffset, "Vertical Offset and Slope") "\n\tTransformation" "\n\tlat_0= lon_0= dh= slope_lat= slope_lon="; namespace { // anonymous namespace struct pj_opaque_vertoffset { double slope_lon; double slope_lat; double zoff; double rho0; double nu0; }; } // anonymous namespace // Cf EPSG Dataset coordinate operation method code 1046 "Vertical Offset and // Slope" static double get_forward_offset(const PJ *P, double phi, double lam) { const struct pj_opaque_vertoffset *Q = (const struct pj_opaque_vertoffset *)P->opaque; return Q->zoff + Q->slope_lat * Q->rho0 * (phi - P->phi0) + Q->slope_lon * Q->nu0 * lam * cos(phi); } static PJ_XYZ forward_3d(PJ_LPZ lpz, PJ *P) { PJ_XYZ xyz; // We need to add lam0 (+lon_0) since it is subtracted in fwd_prepare(), // which is desirable for map projections, but not // for that method which modifies only the Z component. xyz.x = lpz.lam + P->lam0; xyz.y = lpz.phi; xyz.z = lpz.z + get_forward_offset(P, lpz.phi, lpz.lam); return xyz; } static PJ_LPZ reverse_3d(PJ_XYZ xyz, PJ *P) { PJ_LPZ lpz; // We need to subtract lam0 (+lon_0) since it is added in inv_finalize(), // which is desirable for map projections, but not // for that method which modifies only the Z component. lpz.lam = xyz.x - P->lam0; lpz.phi = xyz.y; lpz.z = xyz.z - get_forward_offset(P, lpz.phi, lpz.lam); return lpz; } /* Arcsecond to radians */ #define ARCSEC_TO_RAD (DEG_TO_RAD / 3600.0) PJ *PJ_TRANSFORMATION(vertoffset, 1) { struct pj_opaque_vertoffset *Q = static_cast( calloc(1, sizeof(struct pj_opaque_vertoffset))); if (nullptr == Q) return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); P->opaque = (void *)Q; P->fwd3d = forward_3d; P->inv3d = reverse_3d; P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; /* read args */ Q->slope_lon = pj_param(P->ctx, P->params, "dslope_lon").f * ARCSEC_TO_RAD; Q->slope_lat = pj_param(P->ctx, P->params, "dslope_lat").f * ARCSEC_TO_RAD; Q->zoff = pj_param(P->ctx, P->params, "ddh").f; const double sinlat0 = sin(P->phi0); const double oneMinusEsSinlat0Square = 1 - P->es * (sinlat0 * sinlat0); Q->rho0 = P->a * (1 - P->es) / (oneMinusEsSinlat0Square * sqrt(oneMinusEsSinlat0Square)); Q->nu0 = P->a / sqrt(oneMinusEsSinlat0Square); return P; } proj-9.6.0/src/transformations/vgridshift.cpp000664 001754 001755 00000020562 14764566077 021323 0ustar00e012349e012349000000 000000 #include #include #include #include #include #include "grids.hpp" #include "proj_internal.h" PROJ_HEAD(vgridshift, "Vertical grid shift"); static std::mutex gMutexVGridShift{}; static std::set gKnownGridsVGridShift{}; using namespace NS_PROJ; namespace { // anonymous namespace struct vgridshiftData { double t_final = 0; double t_epoch = 0; double forward_multiplier = 0; ListOfVGrids grids{}; bool defer_grid_opening = false; int error_code_in_defer_grid_opening = 0; }; } // anonymous namespace static void deal_with_vertcon_gtx_hack(PJ *P) { struct vgridshiftData *Q = (struct vgridshiftData *)P->opaque; // The .gtx VERTCON files stored millimeters, but the .tif files // are in metres. if (Q->forward_multiplier != 0.001) { return; } const char *gridname = pj_param(P->ctx, P->params, "sgrids").s; if (!gridname) { return; } if (strcmp(gridname, "vertconw.gtx") != 0 && strcmp(gridname, "vertconc.gtx") != 0 && strcmp(gridname, "vertcone.gtx") != 0) { return; } if (Q->grids.empty()) { return; } const auto &grids = Q->grids[0]->grids(); if (!grids.empty() && grids[0]->name().find(".tif") != std::string::npos) { Q->forward_multiplier = 1.0; } } static PJ_XYZ pj_vgridshift_forward_3d(PJ_LPZ lpz, PJ *P) { struct vgridshiftData *Q = (struct vgridshiftData *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; point.lpz = lpz; if (Q->defer_grid_opening) { Q->defer_grid_opening = false; Q->grids = pj_vgrid_init(P, "grids"); deal_with_vertcon_gtx_hack(P); Q->error_code_in_defer_grid_opening = proj_errno(P); } if (Q->error_code_in_defer_grid_opening) { proj_errno_set(P, Q->error_code_in_defer_grid_opening); return proj_coord_error().xyz; } if (!Q->grids.empty()) { /* Only try the gridshift if at least one grid is loaded, * otherwise just pass the coordinate through unchanged. */ point.xyz.z += pj_vgrid_value(P, Q->grids, point.lp, Q->forward_multiplier); } return point.xyz; } static PJ_LPZ pj_vgridshift_reverse_3d(PJ_XYZ xyz, PJ *P) { struct vgridshiftData *Q = (struct vgridshiftData *)P->opaque; PJ_COORD point = {{0, 0, 0, 0}}; point.xyz = xyz; if (Q->defer_grid_opening) { Q->defer_grid_opening = false; Q->grids = pj_vgrid_init(P, "grids"); deal_with_vertcon_gtx_hack(P); Q->error_code_in_defer_grid_opening = proj_errno(P); } if (Q->error_code_in_defer_grid_opening) { proj_errno_set(P, Q->error_code_in_defer_grid_opening); return proj_coord_error().lpz; } if (!Q->grids.empty()) { /* Only try the gridshift if at least one grid is loaded, * otherwise just pass the coordinate through unchanged. */ point.xyz.z -= pj_vgrid_value(P, Q->grids, point.lp, Q->forward_multiplier); } return point.lpz; } static void pj_vgridshift_forward_4d(PJ_COORD &coo, PJ *P) { struct vgridshiftData *Q = (struct vgridshiftData *)P->opaque; /* If transformation is not time restricted, we always call it */ if (Q->t_final == 0 || Q->t_epoch == 0) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto xyz = pj_vgridshift_forward_3d(coo.lpz, P); coo.xyz = xyz; return; } /* Time restricted - only apply transform if within time bracket */ if (coo.lpzt.t < Q->t_epoch && Q->t_final > Q->t_epoch) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto xyz = pj_vgridshift_forward_3d(coo.lpz, P); coo.xyz = xyz; } } static void pj_vgridshift_reverse_4d(PJ_COORD &coo, PJ *P) { struct vgridshiftData *Q = (struct vgridshiftData *)P->opaque; /* If transformation is not time restricted, we always call it */ if (Q->t_final == 0 || Q->t_epoch == 0) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto lpz = pj_vgridshift_reverse_3d(coo.xyz, P); coo.lpz = lpz; return; } /* Time restricted - only apply transform if within time bracket */ if (coo.lpzt.t < Q->t_epoch && Q->t_final > Q->t_epoch) { // Assigning in 2 steps avoids cppcheck warning // "Overlapping read/write of union is undefined behavior" // Cf // https://github.com/OSGeo/PROJ/pull/3527#pullrequestreview-1233332710 const auto lpz = pj_vgridshift_reverse_3d(coo.xyz, P); coo.lpz = lpz; } } static PJ *pj_vgridshift_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; delete static_cast(P->opaque); P->opaque = nullptr; return pj_default_destructor(P, errlev); } static void pj_vgridshift_reassign_context(PJ *P, PJ_CONTEXT *ctx) { auto Q = (struct vgridshiftData *)P->opaque; for (auto &grid : Q->grids) { grid->reassign_context(ctx); } } PJ *PJ_TRANSFORMATION(vgridshift, 0) { auto Q = new vgridshiftData; P->opaque = (void *)Q; P->destructor = pj_vgridshift_destructor; P->reassign_context = pj_vgridshift_reassign_context; if (!pj_param(P->ctx, P->params, "tgrids").i) { proj_log_error(P, _("+grids parameter missing.")); return pj_vgridshift_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* TODO: Refactor into shared function that can be used */ /* by both vgridshift and hgridshift */ if (pj_param(P->ctx, P->params, "tt_final").i) { Q->t_final = pj_param(P->ctx, P->params, "dt_final").f; if (Q->t_final == 0) { /* a number wasn't passed to +t_final, let's see if it was "now" */ /* and set the time accordingly. */ if (!strcmp("now", pj_param(P->ctx, P->params, "st_final").s)) { time_t now; struct tm *date; time(&now); date = localtime(&now); Q->t_final = 1900.0 + date->tm_year + date->tm_yday / 365.0; } } } if (pj_param(P->ctx, P->params, "tt_epoch").i) Q->t_epoch = pj_param(P->ctx, P->params, "dt_epoch").f; /* historical: the forward direction subtracts the grid offset. */ Q->forward_multiplier = -1.0; if (pj_param(P->ctx, P->params, "tmultiplier").i) { Q->forward_multiplier = pj_param(P->ctx, P->params, "dmultiplier").f; } if (P->ctx->defer_grid_opening) { Q->defer_grid_opening = true; } else { const char *gridnames = pj_param(P->ctx, P->params, "sgrids").s; gMutexVGridShift.lock(); const bool isKnownGrid = gKnownGridsVGridShift.find(gridnames) != gKnownGridsVGridShift.end(); gMutexVGridShift.unlock(); if (isKnownGrid) { Q->defer_grid_opening = true; } else { /* Build gridlist. P->vgridlist_geoid can be empty if +grids only * ask for optional grids. */ Q->grids = pj_vgrid_init(P, "grids"); /* Was gridlist compiled properly? */ if (proj_errno(P)) { proj_log_error(P, _("could not find required grid(s).")); return pj_vgridshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } gMutexVGridShift.lock(); gKnownGridsVGridShift.insert(gridnames); gMutexVGridShift.unlock(); } } P->fwd4d = pj_vgridshift_forward_4d; P->inv4d = pj_vgridshift_reverse_4d; P->fwd3d = pj_vgridshift_forward_3d; P->inv3d = pj_vgridshift_reverse_3d; P->fwd = nullptr; P->inv = nullptr; P->left = PJ_IO_UNITS_RADIANS; P->right = PJ_IO_UNITS_RADIANS; return P; } void pj_clear_vgridshift_knowngrids_cache() { std::lock_guard lock(gMutexVGridShift); gKnownGridsVGridShift.clear(); } proj-9.6.0/src/transformations/xyzgridshift.cpp000664 001754 001755 00000022166 14764566077 021712 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Geocentric translation using a grid * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2019, 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 #include #include #include #include "grids.hpp" #include "proj_internal.h" #include PROJ_HEAD(xyzgridshift, "Geocentric grid shift"); using namespace NS_PROJ; namespace { // anonymous namespace struct xyzgridshiftData { PJ *cart = nullptr; bool grid_ref_is_input = true; ListOfGenericGrids grids{}; bool defer_grid_opening = false; int error_code_in_defer_grid_opening = 0; double multiplier = 1.0; }; } // anonymous namespace // --------------------------------------------------------------------------- static bool get_grid_values(PJ *P, xyzgridshiftData *Q, const PJ_LP &lp, double &dx, double &dy, double &dz) { if (Q->defer_grid_opening) { Q->defer_grid_opening = false; Q->grids = pj_generic_grid_init(P, "grids"); Q->error_code_in_defer_grid_opening = proj_errno(P); } if (Q->error_code_in_defer_grid_opening) { proj_errno_set(P, Q->error_code_in_defer_grid_opening); return false; } GenericShiftGridSet *gridset = nullptr; auto grid = pj_find_generic_grid(Q->grids, lp, gridset); if (!grid) { return false; } if (grid->isNullGrid()) { dx = 0; dy = 0; dz = 0; return true; } const auto samplesPerPixel = grid->samplesPerPixel(); if (samplesPerPixel < 3) { proj_log_error(P, "xyzgridshift: grid has not enough samples"); return false; } int sampleX = 0; int sampleY = 1; int sampleZ = 2; for (int i = 0; i < samplesPerPixel; i++) { const auto desc = grid->description(i); if (desc == "x_translation") { sampleX = i; } else if (desc == "y_translation") { sampleY = i; } else if (desc == "z_translation") { sampleZ = i; } } const auto unit = grid->unit(sampleX); if (!unit.empty() && unit != "metre") { proj_log_error(P, "xyzgridshift: Only unit=metre currently handled"); return false; } bool must_retry = false; if (!pj_bilinear_interpolation_three_samples(P->ctx, grid, lp, sampleX, sampleY, sampleZ, dx, dy, dz, must_retry)) { if (must_retry) return get_grid_values(P, Q, lp, dx, dy, dz); return false; } dx *= Q->multiplier; dy *= Q->multiplier; dz *= Q->multiplier; return true; } // --------------------------------------------------------------------------- #define SQUARE(x) ((x) * (x)) // --------------------------------------------------------------------------- static PJ_COORD iterative_adjustment(PJ *P, xyzgridshiftData *Q, const PJ_COORD &pointInit, double factor) { PJ_COORD point = pointInit; for (int i = 0; i < 10; i++) { PJ_COORD geodetic; geodetic.lpz = pj_inv3d(point.xyz, Q->cart); double dx, dy, dz; if (!get_grid_values(P, Q, geodetic.lp, dx, dy, dz)) { return proj_coord_error(); } dx *= factor; dy *= factor; dz *= factor; const double err = SQUARE((point.xyz.x - pointInit.xyz.x) - dx) + SQUARE((point.xyz.y - pointInit.xyz.y) - dy) + SQUARE((point.xyz.z - pointInit.xyz.z) - dz); point.xyz.x = pointInit.xyz.x + dx; point.xyz.y = pointInit.xyz.y + dy; point.xyz.z = pointInit.xyz.z + dz; if (err < 1e-10) { break; } } return point; } // --------------------------------------------------------------------------- static PJ_COORD direct_adjustment(PJ *P, xyzgridshiftData *Q, PJ_COORD point, double factor) { PJ_COORD geodetic; geodetic.lpz = pj_inv3d(point.xyz, Q->cart); double dx, dy, dz; if (!get_grid_values(P, Q, geodetic.lp, dx, dy, dz)) { return proj_coord_error(); } point.xyz.x += factor * dx; point.xyz.y += factor * dy; point.xyz.z += factor * dz; return point; } // --------------------------------------------------------------------------- static PJ_XYZ pj_xyzgridshift_forward_3d(PJ_LPZ lpz, PJ *P) { auto Q = static_cast(P->opaque); PJ_COORD point = {{0, 0, 0, 0}}; point.lpz = lpz; if (Q->grid_ref_is_input) { point = direct_adjustment(P, Q, point, 1.0); } else { point = iterative_adjustment(P, Q, point, 1.0); } return point.xyz; } static PJ_LPZ pj_xyzgridshift_reverse_3d(PJ_XYZ xyz, PJ *P) { auto Q = static_cast(P->opaque); PJ_COORD point = {{0, 0, 0, 0}}; point.xyz = xyz; if (Q->grid_ref_is_input) { point = iterative_adjustment(P, Q, point, -1.0); } else { point = direct_adjustment(P, Q, point, -1.0); } return point.lpz; } static PJ *pj_xyzgridshift_destructor(PJ *P, int errlev) { if (nullptr == P) return nullptr; auto Q = static_cast(P->opaque); if (Q) { if (Q->cart) Q->cart->destructor(Q->cart, errlev); delete Q; } P->opaque = nullptr; return pj_default_destructor(P, errlev); } static void pj_xyzgridshift_reassign_context(PJ *P, PJ_CONTEXT *ctx) { auto Q = (struct xyzgridshiftData *)P->opaque; for (auto &grid : Q->grids) { grid->reassign_context(ctx); } } PJ *PJ_TRANSFORMATION(xyzgridshift, 0) { auto Q = new xyzgridshiftData; P->opaque = (void *)Q; P->destructor = pj_xyzgridshift_destructor; P->reassign_context = pj_xyzgridshift_reassign_context; P->fwd4d = nullptr; P->inv4d = nullptr; P->fwd3d = pj_xyzgridshift_forward_3d; P->inv3d = pj_xyzgridshift_reverse_3d; P->fwd = nullptr; P->inv = nullptr; P->left = PJ_IO_UNITS_CARTESIAN; P->right = PJ_IO_UNITS_CARTESIAN; // Pass a dummy ellipsoid definition that will be overridden just afterwards Q->cart = proj_create(P->ctx, "+proj=cart +a=1"); if (Q->cart == nullptr) return pj_xyzgridshift_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); /* inherit ellipsoid definition from P to Q->cart */ pj_inherit_ellipsoid_def(P, Q->cart); const char *grid_ref = pj_param(P->ctx, P->params, "sgrid_ref").s; if (grid_ref) { if (strcmp(grid_ref, "input_crs") == 0) { // default } else if (strcmp(grid_ref, "output_crs") == 0) { // Convention use for example for NTF->RGF93 grid that contains // delta x,y,z from NTF to RGF93, but the grid itself is referenced // in RGF93 Q->grid_ref_is_input = false; } else { proj_log_error(P, _("unusupported value for grid_ref")); return pj_xyzgridshift_destructor( P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); } } if (0 == pj_param(P->ctx, P->params, "tgrids").i) { proj_log_error(P, _("+grids parameter missing.")); return pj_xyzgridshift_destructor(P, PROJ_ERR_INVALID_OP_MISSING_ARG); } /* multiplier for delta x,y,z */ if (pj_param(P->ctx, P->params, "tmultiplier").i) { Q->multiplier = pj_param(P->ctx, P->params, "dmultiplier").f; } if (P->ctx->defer_grid_opening) { Q->defer_grid_opening = true; } else { Q->grids = pj_generic_grid_init(P, "grids"); /* Was gridlist compiled properly? */ if (proj_errno(P)) { proj_log_error(P, _("could not find required grid(s).")); return pj_xyzgridshift_destructor( P, PROJ_ERR_INVALID_OP_FILE_NOT_FOUND_OR_INVALID); } } return P; } proj-9.6.0/src/tsfn.cpp000664 001754 001755 00000002345 14764566077 014672 0ustar00e012349e012349000000 000000 /* determine small t */ #include "proj.h" #include "proj_internal.h" #include double pj_tsfn(double phi, double sinphi, double e) { /**************************************************************************** * Determine function ts(phi) defined in Snyder (1987), Eq. (7-10) * Inputs: * phi = geographic latitude (radians) * e = eccentricity of the ellipsoid (dimensionless) * Output: * ts = exp(-psi) where psi is the isometric latitude (dimensionless) * = 1 / (tan(chi) + sec(chi)) * Here isometric latitude is defined by * psi = log( tan(pi/4 + phi/2) * * ( (1 - e*sin(phi)) / (1 + e*sin(phi)) )^(e/2) ) * = asinh(tan(phi)) - e * atanh(e * sin(phi)) * = asinh(tan(chi)) * chi = conformal latitude ***************************************************************************/ double cosphi = cos(phi); // exp(-asinh(tan(phi))) = 1 / (tan(phi) + sec(phi)) // = cos(phi) / (1 + sin(phi)) good for phi > 0 // = (1 - sin(phi)) / cos(phi) good for phi < 0 return exp(e * atanh(e * sinphi)) * (sinphi > 0 ? cosphi / (1 + sinphi) : (1 - sinphi) / cosphi); } proj-9.6.0/src/units.cpp000664 001754 001755 00000004205 14764566077 015057 0ustar00e012349e012349000000 000000 /* definition of standard cartesian units */ #include #include "proj.h" #include "proj_internal.h" /* 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) */ static const struct PJ_UNITS pj_units[] = { {"km", "1000", "Kilometer", 1000.0}, {"m", "1", "Meter", 1.0}, {"dm", "1/10", "Decimeter", 0.1}, {"cm", "1/100", "Centimeter", 0.01}, {"mm", "1/1000", "Millimeter", 0.001}, {"kmi", "1852", "International Nautical Mile", 1852.0}, {"in", "0.0254", "International Inch", 0.0254}, {"ft", "0.3048", "International Foot", 0.3048}, {"yd", "0.9144", "International Yard", 0.9144}, {"mi", "1609.344", "International Statute Mile", 1609.344}, {"fath", "1.8288", "International Fathom", 1.8288}, {"ch", "20.1168", "International Chain", 20.1168}, {"link", "0.201168", "International Link", 0.201168}, {"us-in", "1/39.37", "U.S. Surveyor's Inch", 100 / 3937.0}, {"us-ft", "0.304800609601219", "U.S. Surveyor's Foot", 1200 / 3937.0}, {"us-yd", "0.914401828803658", "U.S. Surveyor's Yard", 3600 / 3937.0}, {"us-ch", "20.11684023368047", "U.S. Surveyor's Chain", 79200 / 3937.0}, {"us-mi", "1609.347218694437", "U.S. Surveyor's Statute Mile", 6336000 / 3937.0}, {"ind-yd", "0.91439523", "Indian Yard", 0.91439523}, {"ind-ft", "0.30479841", "Indian Foot", 0.30479841}, {"ind-ch", "20.11669506", "Indian Chain", 20.11669506}, {nullptr, nullptr, nullptr, 0.0}}; // For internal use const PJ_UNITS *pj_list_linear_units() { return pj_units; } const PJ_UNITS *proj_list_units() { return pj_units; } /* M_PI / 200 */ #define GRAD_TO_RAD 0.015707963267948967 const struct PJ_UNITS pj_angular_units[] = { {"rad", "1.0", "Radian", 1.0}, {"deg", "0.017453292519943296", "Degree", DEG_TO_RAD}, {"grad", "0.015707963267948967", "Grad", GRAD_TO_RAD}, {nullptr, nullptr, nullptr, 0.0}}; // For internal use const PJ_UNITS *pj_list_angular_units() { return pj_angular_units; } const PJ_UNITS *proj_list_angular_units() { return pj_angular_units; } proj-9.6.0/src/wkt1_generated_parser.c000664 001754 001755 00000176431 14764566077 017650 0ustar00e012349e012349000000 000000 /* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the variable and function names. */ #define yyparse pj_wkt1_parse #define yylex pj_wkt1_lex #define yyerror pj_wkt1_error #define yydebug pj_wkt1_debug /* #define yynerrs pj_wkt1_nerrs */ /* First part of user prologue. */ /****************************************************************************** * Project: PROJ * Purpose: WKT1 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2013-2018 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 "wkt1_parser.h" # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Use api.header.include to #include this header instead of duplicating it here. */ #ifndef YY_PJ_WKT1_WKT1_GENERATED_PARSER_H_INCLUDED # define YY_PJ_WKT1_WKT1_GENERATED_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int pj_wkt1_debug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { END = 0, T_PARAM_MT = 258, T_CONCAT_MT = 259, T_INVERSE_MT = 260, T_PASSTHROUGH_MT = 261, T_PROJCS = 262, T_PROJECTION = 263, T_GEOGCS = 264, T_DATUM = 265, T_SPHEROID = 266, T_PRIMEM = 267, T_UNIT = 268, T_LINUNIT = 269, T_GEOCCS = 270, T_AUTHORITY = 271, T_VERT_CS = 272, T_VERTCS = 273, T_VERT_DATUM = 274, T_VDATUM = 275, T_COMPD_CS = 276, T_AXIS = 277, T_TOWGS84 = 278, T_FITTED_CS = 279, T_LOCAL_CS = 280, T_LOCAL_DATUM = 281, T_PARAMETER = 282, T_EXTENSION = 283, T_STRING = 284, T_NUMBER = 285, T_IDENTIFIER = 286 }; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int pj_wkt1_parse (pj_wkt1_parse_context *context); #endif /* !YY_PJ_WKT1_WKT1_GENERATED_PARSER_H_INCLUDED */ #ifdef short # undef short #endif /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure and (if available) are included so that the code can choose integer types of a good width. */ #ifndef __PTRDIFF_MAX__ # include /* INFRINGES ON USER NAME SPACE */ # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YY_STDINT_H # endif #endif /* Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic. */ #ifdef __INT_LEAST8_MAX__ typedef __INT_LEAST8_TYPE__ yytype_int8; #elif defined YY_STDINT_H typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef __INT_LEAST16_MAX__ typedef __INT_LEAST16_TYPE__ yytype_int16; #elif defined YY_STDINT_H typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ && UINT_LEAST8_MAX <= INT_MAX) typedef uint_least8_t yytype_uint8; #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX typedef unsigned char yytype_uint8; #else typedef short yytype_uint8; #endif #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ typedef __UINT_LEAST16_TYPE__ yytype_uint16; #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ && UINT_LEAST16_MAX <= INT_MAX) typedef uint_least16_t yytype_uint16; #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX typedef unsigned short yytype_uint16; #else typedef int yytype_uint16; #endif #ifndef YYPTRDIFF_T # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ # define YYPTRDIFF_T __PTRDIFF_TYPE__ # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ # elif defined PTRDIFF_MAX # ifndef ptrdiff_t # include /* INFRINGES ON USER NAME SPACE */ # endif # define YYPTRDIFF_T ptrdiff_t # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX # else # define YYPTRDIFF_T long # define YYPTRDIFF_MAXIMUM LONG_MAX # endif #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned # endif #endif #define YYSIZE_MAXIMUM \ YY_CAST (YYPTRDIFF_T, \ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ ? YYPTRDIFF_MAXIMUM \ : YY_CAST (YYSIZE_T, -1))) #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) /* Stored state numbers (used for stacks). */ typedef yytype_int16 yy_state_t; /* State numbers in computations. */ typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif #define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 32 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 255 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 37 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 72 /* YYNRULES -- Number of rules. */ #define YYNRULES 114 /* YYNSTATES -- Number of states. */ #define YYNSTATES 289 #define YYUNDEFTOK 2 #define YYMAXUTOK 286 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 33, 35, 2, 2, 36, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 32, 2, 34, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { 0, 81, 81, 93, 93, 96, 99, 99, 102, 102, 102, 102, 105, 108, 110, 111, 114, 116, 117, 120, 123, 127, 132, 132, 132, 132, 132, 132, 135, 136, 139, 139, 143, 147, 148, 151, 152, 154, 155, 156, 157, 159, 160, 163, 166, 169, 174, 176, 177, 178, 179, 180, 183, 185, 186, 187, 188, 191, 195, 202, 202, 205, 208, 211, 214, 217, 220, 223, 226, 227, 228, 229, 232, 235, 238, 239, 242, 244, 245, 246, 249, 251, 251, 254, 256, 257, 258, 261, 264, 267, 272, 272, 274, 277, 282, 285, 287, 290, 293, 296, 299, 302, 305, 308, 311, 314, 317, 320, 323, 326, 328, 330, 331, 332, 335 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "\"end of string\"", "error", "$undefined", "\"PARAM_MT\"", "\"CONCAT_MT\"", "\"INVERSE_MT\"", "\"PASSTHROUGH_MT\"", "\"PROJCS\"", "\"PROJECTION\"", "\"GEOGCS\"", "\"DATUM\"", "\"SPHEROID\"", "\"PRIMEM\"", "\"UNIT\"", "\"LINUNIT\"", "\"GEOCCS\"", "\"AUTHORITY\"", "\"VERT_CS\"", "\"VERTCS\"", "\"VERT_DATUM\"", "\"VDATUM\"", "\"COMPD_CS\"", "\"AXIS\"", "\"TOWGS84\"", "\"FITTED_CS\"", "\"LOCAL_CS\"", "\"LOCAL_DATUM\"", "\"PARAMETER\"", "\"EXTENSION\"", "\"string\"", "\"number\"", "\"identifier\"", "'['", "'('", "']'", "')'", "','", "$accept", "input", "begin_node", "begin_node_name", "end_node", "math_transform", "param_mt", "parameter", "opt_parameter_list", "concat_mt", "opt_math_transform_list", "inv_mt", "passthrough_mt", "integer", "coordinate_system", "horz_cs_with_opt_esri_vertcs", "horz_cs", "projected_cs", "opt_parameter_list_linear_unit", "parameter_list_linear_unit", "opt_twin_axis_extension_authority", "opt_authority", "extension", "projection", "geographic_cs", "linunit", "opt_linunit_or_twin_axis_extension_authority", "datum", "opt_towgs84_authority_extension", "spheroid", "semi_major_axis", "inverse_flattening", "prime_meridian", "longitude", "angular_unit", "linear_unit", "unit", "conversion_factor", "geocentric_cs", "opt_three_axis_extension_authority", "three_axis", "authority", "vert_cs", "esri_vert_cs", "opt_axis_authority", "vert_datum", "vdatum_or_datum", "vdatum", "opt_extension_authority", "datum_type", "compd_cs", "head_cs", "tail_cs", "twin_axis", "axis", "towgs84", "towgs84_parameters", "three_parameters", "seven_parameters", "dx", "dy", "dz", "ex", "ey", "ez", "ppm", "fitted_cs", "to_base", "base_cs", "local_cs", "opt_axis_list_authority", "local_datum", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 91, 40, 93, 41, 44 }; # endif #define YYPACT_NINF (-131) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) #define YYTABLE_NINF (-1) #define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 97, 33, 33, 33, 33, 33, 33, 33, 33, 10, -131, -131, 2, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, 40, 12, 38, 47, 69, 93, 95, 96, 89, -131, 117, -131, 102, 126, 126, 123, 1, 22, 135, -131, -131, 119, -131, -131, 107, 33, 110, 111, 33, 113, 33, -131, 114, -131, -131, 115, 33, 33, 33, 33, -131, -131, -131, -131, -131, 118, 33, 121, 150, 125, 147, 147, 127, 149, 55, 6, 91, 128, 135, 135, 136, 97, 129, 149, 33, 131, 157, 33, 134, 137, 141, 33, 138, -131, -131, 33, 139, 55, -131, -131, -131, -131, 140, 145, 55, 142, 55, -131, 143, -131, 55, 141, 144, 151, 6, 33, 152, 153, 149, 149, -131, 140, 154, 18, 55, 155, 6, -131, 19, 55, 128, -131, 135, 55, -131, 135, -131, 151, 159, 161, 55, 156, 158, 75, 55, 163, 160, -131, 162, 55, 165, 33, 33, -131, 151, -131, 169, -131, -131, 33, 151, -131, -131, -131, 142, -131, 55, 55, 164, -131, -131, 65, 55, 171, 33, 151, -131, 140, -131, -131, 151, 14, 55, 65, 55, -131, -131, 151, 166, 167, -131, 55, 170, -131, -131, -131, -131, 18, 55, 151, -131, 140, 172, -131, -131, 173, 175, -131, -131, 55, 33, 151, 151, -131, 140, -131, 151, 140, -131, 174, -131, 55, 178, 181, -131, 184, -131, 164, -131, -131, -131, 159, 98, -131, 55, -131, -131, 179, -131, 180, -131, -131, -131, -131, -131, 159, -131, 55, 55, 55, -131, -131, -131, -131, 151, -131, 187, 165, 182, -131, -131, -131, 55, -131, 183, 151, 159, -131, 190, 55, -131, -131, 185, -131, 192, -131, 188, 193, -131, 189, 196, -131, 191, 198, -131, -131 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_int8 yydefact[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 22, 28, 31, 30, 23, 24, 75, 25, 26, 27, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 110, 29, 0, 0, 0, 0, 0, 0, 0, 82, 0, 81, 89, 0, 0, 0, 0, 0, 107, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 64, 83, 0, 0, 0, 34, 33, 90, 91, 84, 0, 0, 17, 0, 21, 0, 108, 0, 0, 0, 41, 0, 0, 53, 0, 0, 0, 87, 84, 0, 0, 0, 0, 0, 76, 0, 0, 14, 12, 0, 0, 19, 0, 106, 41, 0, 0, 0, 37, 0, 0, 0, 0, 47, 63, 68, 0, 0, 0, 0, 79, 41, 74, 0, 35, 36, 0, 41, 86, 88, 15, 17, 16, 0, 0, 111, 42, 44, 0, 0, 0, 0, 41, 56, 84, 52, 62, 41, 0, 0, 0, 0, 80, 66, 41, 0, 0, 78, 0, 0, 85, 18, 20, 114, 0, 0, 41, 40, 84, 0, 32, 58, 0, 0, 55, 54, 0, 0, 41, 41, 51, 84, 45, 41, 84, 71, 0, 67, 0, 0, 0, 13, 0, 112, 111, 109, 39, 38, 0, 0, 99, 0, 96, 95, 0, 61, 0, 50, 48, 49, 70, 69, 0, 65, 0, 0, 0, 113, 92, 60, 59, 41, 94, 0, 0, 0, 73, 93, 43, 0, 100, 0, 41, 0, 57, 0, 0, 72, 101, 97, 46, 0, 102, 0, 0, 103, 0, 0, 104, 0, 0, 105, 98 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -131, -131, -47, -2, -68, -58, -131, 79, 53, -131, 62, -131, -131, -131, 130, -131, 194, -131, 116, 101, -131, -120, -130, -131, -27, -131, -131, 16, -131, -131, -131, -131, 168, -131, -131, -51, -60, -29, -131, -131, -131, -124, 176, 199, -131, -131, -131, -131, -107, 122, -131, -131, -131, 51, -114, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, 7, -131 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 9, 23, 24, 45, 63, 64, 99, 107, 65, 136, 66, 67, 111, 10, 11, 12, 13, 100, 101, 175, 143, 163, 88, 14, 215, 185, 49, 147, 119, 208, 257, 91, 183, 149, 102, 96, 190, 15, 187, 220, 156, 16, 17, 127, 52, 55, 56, 132, 124, 18, 58, 105, 204, 205, 180, 237, 238, 239, 240, 267, 275, 279, 282, 285, 288, 19, 68, 113, 20, 201, 70 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 25, 26, 27, 28, 29, 30, 31, 164, 47, 97, 32, 48, 157, 81, 82, 83, 178, 152, 172, 94, 170, 53, 179, 108, 109, 95, 115, 171, 213, 1, 154, 2, 130, 98, 154, 154, 155, 193, 33, 134, 155, 137, 162, 196, 202, 139, 72, 162, 35, 75, 203, 77, 103, 50, 214, 54, 219, 80, 210, 158, 216, 150, 221, 212, 165, 21, 22, 85, 168, 34, 224, 151, 222, 211, 36, 173, 229, 167, 161, 181, 169, 154, 232, 37, 188, 116, 230, 155, 120, 42, 43, 154, 125, 162, 243, 244, 128, 233, 177, 246, 2, 198, 199, 162, 1, 38, 2, 206, 4, 5, 245, 2, 3, 247, 4, 5, 145, 218, 6, 223, 254, 7, 8, 42, 43, 44, 227, 255, 256, 39, 209, 40, 41, 231, 261, 5, 48, 265, 59, 60, 61, 62, 51, 71, 241, 69, 73, 74, 272, 76, 78, 79, 191, 192, 84, 273, 249, 86, 87, 90, 195, 89, 94, 93, 106, 114, 110, 117, 118, 258, 121, 123, 98, 122, 126, 129, 131, 154, 135, 138, 141, 155, 262, 263, 264, 133, 166, 142, 146, 148, 153, 159, 174, 182, 176, 189, 184, 270, 186, 194, 200, 207, 225, 226, 276, 236, 228, 250, 234, 235, 248, 242, 251, 252, 112, 259, 260, 266, 269, 271, 274, 277, 278, 281, 280, 283, 284, 286, 287, 197, 160, 268, 46, 144, 57, 217, 140, 253, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104 }; static const yytype_int16 yycheck[] = { 2, 3, 4, 5, 6, 7, 8, 131, 35, 77, 0, 10, 126, 60, 61, 62, 146, 124, 142, 13, 140, 20, 146, 81, 82, 76, 86, 141, 14, 7, 16, 9, 100, 27, 16, 16, 22, 157, 36, 107, 22, 109, 28, 163, 174, 113, 48, 28, 36, 51, 174, 53, 79, 37, 184, 39, 186, 59, 178, 127, 184, 121, 186, 183, 132, 32, 33, 69, 136, 29, 190, 122, 186, 180, 36, 143, 200, 135, 129, 147, 138, 16, 202, 36, 152, 87, 200, 22, 90, 34, 35, 16, 94, 28, 214, 215, 98, 204, 23, 219, 9, 169, 170, 28, 7, 36, 9, 175, 17, 18, 217, 9, 15, 220, 17, 18, 118, 185, 21, 187, 234, 24, 25, 34, 35, 36, 194, 29, 30, 36, 177, 36, 36, 201, 248, 18, 10, 257, 3, 4, 5, 6, 19, 36, 212, 26, 36, 36, 268, 36, 36, 36, 154, 155, 36, 269, 224, 36, 8, 12, 162, 36, 13, 36, 36, 36, 30, 36, 11, 237, 36, 30, 27, 36, 36, 36, 36, 16, 36, 36, 36, 22, 250, 251, 252, 106, 133, 36, 36, 36, 36, 36, 36, 30, 36, 30, 36, 265, 36, 30, 36, 30, 36, 36, 272, 30, 36, 29, 36, 36, 36, 213, 31, 29, 84, 36, 36, 30, 36, 36, 30, 36, 30, 30, 36, 36, 30, 36, 30, 167, 129, 260, 33, 117, 40, 184, 114, 230, -1, -1, -1, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 79 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_int8 yystos[] = { 0, 7, 9, 15, 17, 18, 21, 24, 25, 38, 51, 52, 53, 54, 61, 75, 79, 80, 87, 103, 106, 32, 33, 39, 40, 40, 40, 40, 40, 40, 40, 40, 0, 36, 29, 36, 36, 36, 36, 36, 36, 36, 34, 35, 36, 41, 80, 61, 10, 64, 64, 19, 82, 20, 64, 83, 84, 53, 88, 3, 4, 5, 6, 42, 43, 46, 48, 49, 104, 26, 108, 36, 40, 36, 36, 40, 36, 40, 36, 36, 40, 39, 39, 39, 36, 40, 36, 8, 60, 36, 12, 69, 69, 36, 13, 72, 73, 41, 27, 44, 55, 56, 72, 61, 79, 89, 36, 45, 42, 42, 30, 50, 51, 105, 36, 73, 40, 36, 11, 66, 40, 36, 36, 30, 86, 40, 36, 81, 40, 36, 41, 36, 85, 44, 41, 36, 47, 41, 36, 41, 86, 36, 36, 58, 55, 40, 36, 65, 36, 71, 73, 72, 85, 36, 16, 22, 78, 91, 41, 36, 56, 72, 28, 59, 78, 41, 45, 42, 41, 42, 58, 91, 78, 41, 36, 57, 36, 23, 59, 78, 92, 41, 30, 70, 36, 63, 36, 76, 41, 30, 74, 40, 40, 58, 30, 40, 58, 47, 41, 41, 36, 107, 59, 78, 90, 91, 41, 30, 67, 39, 58, 85, 58, 14, 59, 62, 78, 90, 41, 59, 77, 78, 91, 41, 58, 36, 36, 41, 36, 78, 91, 41, 58, 85, 36, 36, 30, 93, 94, 95, 96, 41, 40, 58, 58, 85, 58, 85, 36, 41, 29, 31, 29, 107, 91, 29, 30, 68, 41, 36, 36, 91, 41, 41, 41, 58, 30, 97, 74, 36, 41, 36, 58, 91, 30, 98, 41, 36, 30, 99, 36, 30, 100, 36, 30, 101, 36, 30, 102 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int8 yyr1[] = { 0, 37, 38, 39, 39, 40, 41, 41, 42, 42, 42, 42, 43, 44, 45, 45, 46, 47, 47, 48, 49, 50, 51, 51, 51, 51, 51, 51, 52, 52, 53, 53, 54, 55, 55, 56, 56, 57, 57, 57, 57, 58, 58, 59, 60, 61, 62, 63, 63, 63, 63, 63, 64, 65, 65, 65, 65, 66, 67, 68, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 76, 76, 77, 78, 79, 79, 80, 81, 81, 81, 82, 83, 83, 84, 85, 85, 85, 86, 87, 88, 89, 89, 90, 91, 92, 93, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 106, 107, 107, 107, 108 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 4, 5, 0, 3, 5, 0, 3, 4, 6, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 10, 1, 1, 3, 3, 0, 3, 3, 2, 0, 2, 5, 4, 10, 6, 0, 3, 3, 3, 2, 6, 0, 3, 3, 2, 8, 1, 1, 1, 6, 1, 1, 1, 6, 1, 10, 0, 3, 3, 2, 5, 5, 8, 1, 7, 0, 3, 2, 6, 1, 1, 3, 0, 3, 2, 1, 8, 1, 1, 1, 3, 5, 4, 1, 1, 5, 13, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 10, 3, 0, 2, 3, 6 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (context, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, context); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, pj_wkt1_parse_context *context) { FILE *yyoutput = yyo; YYUSE (yyoutput); YYUSE (context); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, pj_wkt1_parse_context *context) { YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyo, yytype, yyvaluep, context); YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, pj_wkt1_parse_context *context) { int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[+yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)] , context); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule, context); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ static YYPTRDIFF_T yystrlen (const char *yystr) { YYPTRDIFF_T yylen; for (yylen = 0; yystr && yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (yyres) return (YYPTRDIFF_T)(yystpcpy (yyres, yystr) - yyres); else return yystrlen (yystr); } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, yy_state_t *yyssp, int yytoken) { enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat: reported tokens (one for the "unexpected", one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Actual size of YYARG. */ int yycount = 0; /* Cumulated lengths of YYARG. */ YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[+*yyssp]; YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYPTRDIFF_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { /* Don't count the "%s"s in the final size, but reserve room for the terminator. */ YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { ++yyp; ++yyformat; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, pj_wkt1_parse_context *context) { YYUSE (yyvaluep); YYUSE (context); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse (pj_wkt1_parse_context *context) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE (static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ /* int yynerrs; */ yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yy_state_t yyssa[YYINITDEPTH]; yy_state_t *yyss; yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYPTRDIFF_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; /* yynerrs = 0; */ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST (yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYPTRDIFF_T yysize = (YYPTRDIFF_T)(yyssp - yyss + 1); # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF (*yyssp), &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yy_state_t *yyss1 = yyss; union yyalloc *yyptr = YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF ((stderr, "Stack size increased to %ld\n", YY_CAST (long, yystacksize))); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (&yylval, context); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { /* ++yynerrs; */ #if ! YYERROR_VERBOSE yyerror (context, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (context, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, context); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ #if 0 yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ #endif yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, context); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (context, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, context); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[+*yyssp], yyvsp, context); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } proj-9.6.0/src/wkt1_generated_parser.h000664 001754 001755 00000005514 14764566077 017646 0ustar00e012349e012349000000 000000 /* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ #ifndef YY_PJ_WKT1_WKT1_GENERATED_PARSER_H_INCLUDED # define YY_PJ_WKT1_WKT1_GENERATED_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int pj_wkt1_debug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { END = 0, T_PARAM_MT = 258, T_CONCAT_MT = 259, T_INVERSE_MT = 260, T_PASSTHROUGH_MT = 261, T_PROJCS = 262, T_PROJECTION = 263, T_GEOGCS = 264, T_DATUM = 265, T_SPHEROID = 266, T_PRIMEM = 267, T_UNIT = 268, T_LINUNIT = 269, T_GEOCCS = 270, T_AUTHORITY = 271, T_VERT_CS = 272, T_VERTCS = 273, T_VERT_DATUM = 274, T_VDATUM = 275, T_COMPD_CS = 276, T_AXIS = 277, T_TOWGS84 = 278, T_FITTED_CS = 279, T_LOCAL_CS = 280, T_LOCAL_DATUM = 281, T_PARAMETER = 282, T_EXTENSION = 283, T_STRING = 284, T_NUMBER = 285, T_IDENTIFIER = 286 }; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int pj_wkt1_parse (pj_wkt1_parse_context *context); #endif /* !YY_PJ_WKT1_WKT1_GENERATED_PARSER_H_INCLUDED */ proj-9.6.0/src/wkt1_grammar.y000664 001754 001755 00000021307 14764566077 016001 0ustar00e012349e012349000000 000000 %{ /****************************************************************************** * Project: PROJ * Purpose: WKT1 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2013-2018 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 "wkt1_parser.h" %} %define api.pure /* if the next %define is commented out, Bison 2.4 should be sufficient */ /* but will produce less prettier error messages */ %define parse.error verbose %require "3.0" %parse-param {pj_wkt1_parse_context *context} %lex-param {pj_wkt1_parse_context *context} %token T_PARAM_MT "PARAM_MT" %token T_CONCAT_MT "CONCAT_MT" %token T_INVERSE_MT "INVERSE_MT" %token T_PASSTHROUGH_MT "PASSTHROUGH_MT" %token T_PROJCS "PROJCS" %token T_PROJECTION "PROJECTION" %token T_GEOGCS "GEOGCS" %token T_DATUM "DATUM" %token T_SPHEROID "SPHEROID" %token T_PRIMEM "PRIMEM" %token T_UNIT "UNIT" %token T_LINUNIT "LINUNIT" %token T_GEOCCS "GEOCCS" %token T_AUTHORITY "AUTHORITY" %token T_VERT_CS "VERT_CS" // ESRI variation %token T_VERTCS "VERTCS" %token T_VERT_DATUM "VERT_DATUM" // ESRI variation %token T_VDATUM "VDATUM" %token T_COMPD_CS "COMPD_CS" %token T_AXIS "AXIS" %token T_TOWGS84 "TOWGS84" %token T_FITTED_CS "FITTED_CS" %token T_LOCAL_CS "LOCAL_CS" %token T_LOCAL_DATUM "LOCAL_DATUM" %token T_PARAMETER "PARAMETER" %token T_EXTENSION "EXTENSION" %token T_STRING "string" %token T_NUMBER "number" %token T_IDENTIFIER "identifier" %token END 0 "end of string" %% input: coordinate_system /* Derived from BNF grammar in OGC 01-009 OpenGIS Implementation */ /* Coordinate Transformation Services Revision 1.00 */ /* with the following additions : */ /* - accept an EXTENSION node at the end of GEOGCS, GEOCCS, PROJCS, COMPD_CS, VERT_DATUM */ /* - accept 3 parameters in TOWGS84 */ /* - accept LOCAL_CS["foo"] */ /* 7.1 Math Transform WKT */ begin_node: '[' | '(' begin_node_name: begin_node T_STRING end_node: ']' | ')' math_transform: param_mt | concat_mt | inv_mt | passthrough_mt param_mt: T_PARAM_MT begin_node_name opt_parameter_list end_node parameter: T_PARAMETER begin_node_name ',' T_NUMBER end_node opt_parameter_list: | ',' parameter opt_parameter_list concat_mt: T_CONCAT_MT begin_node math_transform opt_math_transform_list end_node opt_math_transform_list: | ',' math_transform opt_math_transform_list inv_mt: T_INVERSE_MT begin_node math_transform end_node passthrough_mt: T_PASSTHROUGH_MT begin_node integer ',' math_transform end_node /* FIXME */ integer: T_NUMBER /* 7.2 Coordinate System WKT */ coordinate_system: horz_cs_with_opt_esri_vertcs | geocentric_cs | vert_cs | compd_cs | fitted_cs | local_cs horz_cs_with_opt_esri_vertcs: horz_cs | horz_cs ',' esri_vert_cs horz_cs: geographic_cs | projected_cs /* opt_extension is an extension of the CT spec */ projected_cs: T_PROJCS begin_node_name ',' geographic_cs ',' projection ',' opt_parameter_list_linear_unit opt_twin_axis_extension_authority end_node opt_parameter_list_linear_unit: linear_unit | parameter_list_linear_unit parameter_list_linear_unit: parameter ',' parameter_list_linear_unit | parameter ',' linear_unit opt_twin_axis_extension_authority: | ',' twin_axis opt_extension_authority | ',' extension opt_authority | ',' authority opt_authority: | ',' authority extension: T_EXTENSION begin_node_name ',' T_STRING end_node projection: T_PROJECTION begin_node_name opt_authority end_node geographic_cs: T_GEOGCS begin_node_name',' datum ',' prime_meridian ',' angular_unit opt_linunit_or_twin_axis_extension_authority end_node /* ESRI extension for geographic 3D CRS */ linunit: T_LINUNIT begin_node_name',' conversion_factor opt_authority end_node opt_linunit_or_twin_axis_extension_authority: | ',' linunit opt_authority | ',' twin_axis opt_extension_authority | ',' extension opt_authority | ',' authority datum: T_DATUM begin_node_name ',' spheroid opt_towgs84_authority_extension end_node opt_towgs84_authority_extension: | ',' towgs84 opt_extension_authority | ',' extension opt_authority | ',' authority spheroid: T_SPHEROID begin_node_name ',' semi_major_axis ',' inverse_flattening opt_authority end_node semi_major_axis: T_NUMBER // Some WKT in the wild use "inf". Cf SPHEROID["unnamed",6370997,"inf"] // in https://zenodo.org/record/3878979#.Y_P4g4CZNH4, // https://zenodo.org/record/5831940#.Y_P4i4CZNH5 // or https://grasswiki.osgeo.org/wiki/Marine_Science inverse_flattening: T_NUMBER | T_STRING prime_meridian: T_PRIMEM begin_node_name ',' longitude opt_authority end_node longitude: T_NUMBER angular_unit: unit linear_unit: unit unit: T_UNIT begin_node_name ',' conversion_factor opt_authority end_node conversion_factor: T_NUMBER geocentric_cs: T_GEOCCS begin_node_name ',' datum ',' prime_meridian ',' linear_unit opt_three_axis_extension_authority end_node opt_three_axis_extension_authority: | ',' three_axis opt_extension_authority | ',' extension opt_authority | ',' authority three_axis: axis ',' axis ',' axis authority: T_AUTHORITY begin_node_name ',' T_STRING end_node vert_cs: T_VERT_CS begin_node_name ',' vert_datum ',' linear_unit opt_axis_authority end_node | esri_vert_cs esri_vert_cs: T_VERTCS begin_node_name ',' vdatum_or_datum ',' opt_parameter_list_linear_unit end_node opt_axis_authority: | ',' axis opt_authority | ',' authority vert_datum: T_VERT_DATUM begin_node_name ',' datum_type opt_extension_authority end_node vdatum_or_datum: vdatum | datum vdatum: T_VDATUM begin_node_name end_node opt_extension_authority: | ',' extension opt_authority | ',' authority datum_type: T_NUMBER compd_cs: T_COMPD_CS begin_node_name ',' head_cs ',' tail_cs opt_extension_authority end_node head_cs: horz_cs // Accepting a geographic CRS as part of the second CRS of a COMPD_CS is horrible // but found in LAS WKT tail_cs: geographic_cs | vert_cs twin_axis: axis ',' axis axis: T_AXIS begin_node_name ',' T_IDENTIFIER end_node /* Extension of the CT spec */ /* | T_AXIS '[' T_STRING ',' T_STRING ']'*/ towgs84: T_TOWGS84 begin_node towgs84_parameters end_node towgs84_parameters: seven_parameters /* Extension of the CT spec */ | three_parameters three_parameters: dx ',' dy ',' dz seven_parameters: dx ',' dy ',' dz ',' ex ',' ey ',' ez ',' ppm dx: T_NUMBER dy: T_NUMBER dz: T_NUMBER ex: T_NUMBER ey: T_NUMBER ez: T_NUMBER ppm: T_NUMBER fitted_cs: T_FITTED_CS begin_node_name ',' to_base ',' base_cs end_node to_base: math_transform base_cs: coordinate_system local_cs: T_LOCAL_CS begin_node_name ',' local_datum ',' unit ',' axis opt_axis_list_authority end_node /* Extension of the CT spec: accept only name */ | T_LOCAL_CS begin_node_name end_node opt_axis_list_authority: | ',' authority | ',' axis opt_axis_list_authority local_datum: T_LOCAL_DATUM begin_node_name ',' datum_type opt_authority end_node proj-9.6.0/src/wkt1_parser.cpp000664 001754 001755 00000016261 14764566077 016164 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: WKT1 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2013, 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/internal/internal.hpp" #include #include #include #include "wkt1_parser.h" #include "wkt_parser.hpp" using namespace NS_PROJ::internal; //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- struct pj_wkt1_parse_context : public pj_wkt_parse_context {}; // --------------------------------------------------------------------------- void pj_wkt1_error(pj_wkt1_parse_context *context, const char *msg) { pj_wkt_error(context, msg); } // --------------------------------------------------------------------------- std::string pj_wkt1_parse(const std::string &wkt) { pj_wkt1_parse_context context; context.pszInput = wkt.c_str(); context.pszLastSuccess = wkt.c_str(); context.pszNext = wkt.c_str(); if (pj_wkt1_parse(&context) != 0) { return context.errorMsg; } return std::string(); } // --------------------------------------------------------------------------- typedef struct { const char *pszToken; int nTokenVal; } osr_cs_wkt_tokens; #define PAIR(X) \ { \ #X, T_##X \ } static const osr_cs_wkt_tokens tokens[] = { PAIR(PARAM_MT), PAIR(PARAMETER), PAIR(CONCAT_MT), PAIR(INVERSE_MT), PAIR(PASSTHROUGH_MT), PAIR(PROJCS), PAIR(PROJECTION), PAIR(GEOGCS), PAIR(DATUM), PAIR(SPHEROID), PAIR(PRIMEM), PAIR(UNIT), PAIR(GEOCCS), PAIR(AUTHORITY), PAIR(VERT_CS), PAIR(VERTCS), PAIR(VERT_DATUM), PAIR(VDATUM), PAIR(COMPD_CS), PAIR(AXIS), PAIR(TOWGS84), PAIR(FITTED_CS), PAIR(LOCAL_CS), PAIR(LOCAL_DATUM), PAIR(LINUNIT), PAIR(EXTENSION)}; // --------------------------------------------------------------------------- int pj_wkt1_lex(YYSTYPE * /*pNode */, pj_wkt1_parse_context *context) { size_t i; const char *pszInput = context->pszNext; /* -------------------------------------------------------------------- */ /* Skip white space. */ /* -------------------------------------------------------------------- */ while (*pszInput == ' ' || *pszInput == '\t' || *pszInput == 10 || *pszInput == 13) pszInput++; context->pszLastSuccess = pszInput; if (*pszInput == '\0') { context->pszNext = pszInput; return EOF; } /* -------------------------------------------------------------------- */ /* Recognize node names. */ /* -------------------------------------------------------------------- */ if (isalpha(*pszInput)) { for (i = 0; i < sizeof(tokens) / sizeof(tokens[0]); i++) { if (ci_starts_with(pszInput, tokens[i].pszToken) && !isalpha(pszInput[strlen(tokens[i].pszToken)])) { context->pszNext = pszInput + strlen(tokens[i].pszToken); return tokens[i].nTokenVal; } } } /* -------------------------------------------------------------------- */ /* Recognize double quoted strings. */ /* -------------------------------------------------------------------- */ if (*pszInput == '"') { pszInput++; while (*pszInput != '\0' && *pszInput != '"') pszInput++; if (*pszInput == '\0') { context->pszNext = pszInput; return EOF; } context->pszNext = pszInput + 1; return T_STRING; } /* -------------------------------------------------------------------- */ /* Recognize numerical values. */ /* -------------------------------------------------------------------- */ if (((*pszInput == '-' || *pszInput == '+') && pszInput[1] >= '0' && pszInput[1] <= '9') || (*pszInput >= '0' && *pszInput <= '9')) { if (*pszInput == '-' || *pszInput == '+') pszInput++; // collect non-decimal part of number while (*pszInput >= '0' && *pszInput <= '9') pszInput++; // collect decimal places. if (*pszInput == '.') { pszInput++; while (*pszInput >= '0' && *pszInput <= '9') pszInput++; } // collect exponent if (*pszInput == 'e' || *pszInput == 'E') { pszInput++; if (*pszInput == '-' || *pszInput == '+') pszInput++; while (*pszInput >= '0' && *pszInput <= '9') pszInput++; } context->pszNext = pszInput; return T_NUMBER; } /* -------------------------------------------------------------------- */ /* Recognize identifiers. */ /* -------------------------------------------------------------------- */ if ((*pszInput >= 'A' && *pszInput <= 'Z') || (*pszInput >= 'a' && *pszInput <= 'z')) { pszInput++; while ((*pszInput >= 'A' && *pszInput <= 'Z') || (*pszInput >= 'a' && *pszInput <= 'z')) pszInput++; context->pszNext = pszInput; return T_IDENTIFIER; } /* -------------------------------------------------------------------- */ /* Handle special tokens. */ /* -------------------------------------------------------------------- */ context->pszNext = pszInput + 1; return *pszInput; } //! @endcond proj-9.6.0/src/wkt1_parser.h000664 001754 001755 00000004054 14764566077 015626 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: WKT1 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2013, 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. ****************************************************************************/ #ifndef PJ_WKT1_PARSER_H_INCLUDED #define PJ_WKT1_PARSER_H_INCLUDED #ifndef DOXYGEN_SKIP #ifdef __cplusplus extern "C" { #endif typedef struct pj_wkt1_parse_context pj_wkt1_parse_context; #include "wkt1_generated_parser.h" void pj_wkt1_error(pj_wkt1_parse_context *context, const char *msg); int pj_wkt1_lex(YYSTYPE *pNode, pj_wkt1_parse_context *context); int pj_wkt1_parse(pj_wkt1_parse_context *context); #ifdef __cplusplus } std::string pj_wkt1_parse(const std::string &wkt); #endif #endif /* #ifndef DOXYGEN_SKIP */ #endif /* PJ_WKT1_PARSER_H_INCLUDED */ proj-9.6.0/src/wkt2_generated_parser.c000664 001754 001755 00000513315 14764566077 017645 0ustar00e012349e012349000000 000000 /* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the variable and function names. */ #define yyparse pj_wkt2_parse #define yylex pj_wkt2_lex #define yyerror pj_wkt2_error #define yydebug pj_wkt2_debug #define yynerrs pj_wkt2_nerrs /* First part of user prologue. */ /****************************************************************************** * Project: PROJ * Purpose: WKT2 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2018 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 "wkt2_parser.h" # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Use api.header.include to #include this header instead of duplicating it here. */ #ifndef YY_PJ_WKT2_WKT2_GENERATED_PARSER_H_INCLUDED # define YY_PJ_WKT2_WKT2_GENERATED_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int pj_wkt2_debug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { END = 0, T_PROJECTION = 258, T_DATUM = 259, T_SPHEROID = 260, T_PRIMEM = 261, T_UNIT = 262, T_AXIS = 263, T_PARAMETER = 264, T_GEODCRS = 265, T_LENGTHUNIT = 266, T_ANGLEUNIT = 267, T_SCALEUNIT = 268, T_TIMEUNIT = 269, T_ELLIPSOID = 270, T_CS = 271, T_ID = 272, T_PROJCRS = 273, T_BASEGEODCRS = 274, T_MERIDIAN = 275, T_BEARING = 276, T_ORDER = 277, T_ANCHOR = 278, T_ANCHOREPOCH = 279, T_CONVERSION = 280, T_METHOD = 281, T_REMARK = 282, T_GEOGCRS = 283, T_BASEGEOGCRS = 284, T_SCOPE = 285, T_AREA = 286, T_BBOX = 287, T_CITATION = 288, T_URI = 289, T_VERTCRS = 290, T_VDATUM = 291, T_GEOIDMODEL = 292, T_COMPOUNDCRS = 293, T_PARAMETERFILE = 294, T_COORDINATEOPERATION = 295, T_SOURCECRS = 296, T_TARGETCRS = 297, T_INTERPOLATIONCRS = 298, T_OPERATIONACCURACY = 299, T_CONCATENATEDOPERATION = 300, T_STEP = 301, T_BOUNDCRS = 302, T_ABRIDGEDTRANSFORMATION = 303, T_DERIVINGCONVERSION = 304, T_TDATUM = 305, T_CALENDAR = 306, T_TIMEORIGIN = 307, T_TIMECRS = 308, T_VERTICALEXTENT = 309, T_TIMEEXTENT = 310, T_USAGE = 311, T_DYNAMIC = 312, T_FRAMEEPOCH = 313, T_MODEL = 314, T_VELOCITYGRID = 315, T_ENSEMBLE = 316, T_MEMBER = 317, T_ENSEMBLEACCURACY = 318, T_DERIVEDPROJCRS = 319, T_BASEPROJCRS = 320, T_EDATUM = 321, T_ENGCRS = 322, T_PDATUM = 323, T_PARAMETRICCRS = 324, T_PARAMETRICUNIT = 325, T_BASEVERTCRS = 326, T_BASEENGCRS = 327, T_BASEPARAMCRS = 328, T_BASETIMECRS = 329, T_EPOCH = 330, T_COORDEPOCH = 331, T_COORDINATEMETADATA = 332, T_POINTMOTIONOPERATION = 333, T_VERSION = 334, T_AXISMINVALUE = 335, T_AXISMAXVALUE = 336, T_RANGEMEANING = 337, T_exact = 338, T_wraparound = 339, T_GEODETICCRS = 340, T_GEODETICDATUM = 341, T_PROJECTEDCRS = 342, T_PRIMEMERIDIAN = 343, T_GEOGRAPHICCRS = 344, T_TRF = 345, T_VERTICALCRS = 346, T_VERTICALDATUM = 347, T_VRF = 348, T_TIMEDATUM = 349, T_TEMPORALQUANTITY = 350, T_ENGINEERINGDATUM = 351, T_ENGINEERINGCRS = 352, T_PARAMETRICDATUM = 353, T_AFFINE = 354, T_CARTESIAN = 355, T_CYLINDRICAL = 356, T_ELLIPSOIDAL = 357, T_LINEAR = 358, T_PARAMETRIC = 359, T_POLAR = 360, T_SPHERICAL = 361, T_VERTICAL = 362, T_TEMPORAL = 363, T_TEMPORALCOUNT = 364, T_TEMPORALMEASURE = 365, T_ORDINAL = 366, T_TEMPORALDATETIME = 367, T_NORTH = 368, T_NORTHNORTHEAST = 369, T_NORTHEAST = 370, T_EASTNORTHEAST = 371, T_EAST = 372, T_EASTSOUTHEAST = 373, T_SOUTHEAST = 374, T_SOUTHSOUTHEAST = 375, T_SOUTH = 376, T_SOUTHSOUTHWEST = 377, T_SOUTHWEST = 378, T_WESTSOUTHWEST = 379, T_WEST = 380, T_WESTNORTHWEST = 381, T_NORTHWEST = 382, T_NORTHNORTHWEST = 383, T_UP = 384, T_DOWN = 385, T_GEOCENTRICX = 386, T_GEOCENTRICY = 387, T_GEOCENTRICZ = 388, T_COLUMNPOSITIVE = 389, T_COLUMNNEGATIVE = 390, T_ROWPOSITIVE = 391, T_ROWNEGATIVE = 392, T_DISPLAYRIGHT = 393, T_DISPLAYLEFT = 394, T_DISPLAYUP = 395, T_DISPLAYDOWN = 396, T_FORWARD = 397, T_AFT = 398, T_PORT = 399, T_STARBOARD = 400, T_CLOCKWISE = 401, T_COUNTERCLOCKWISE = 402, T_TOWARDS = 403, T_AWAYFROM = 404, T_FUTURE = 405, T_PAST = 406, T_UNSPECIFIED = 407, T_STRING = 408, T_UNSIGNED_INTEGER_DIFFERENT_ONE_TWO_THREE = 409 }; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int pj_wkt2_parse (pj_wkt2_parse_context *context); #endif /* !YY_PJ_WKT2_WKT2_GENERATED_PARSER_H_INCLUDED */ #ifdef short # undef short #endif /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure and (if available) are included so that the code can choose integer types of a good width. */ #ifndef __PTRDIFF_MAX__ # include /* INFRINGES ON USER NAME SPACE */ # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YY_STDINT_H # endif #endif /* Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic. */ #ifdef __INT_LEAST8_MAX__ typedef __INT_LEAST8_TYPE__ yytype_int8; #elif defined YY_STDINT_H typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef __INT_LEAST16_MAX__ typedef __INT_LEAST16_TYPE__ yytype_int16; #elif defined YY_STDINT_H typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ && UINT_LEAST8_MAX <= INT_MAX) typedef uint_least8_t yytype_uint8; #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX typedef unsigned char yytype_uint8; #else typedef short yytype_uint8; #endif #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ typedef __UINT_LEAST16_TYPE__ yytype_uint16; #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ && UINT_LEAST16_MAX <= INT_MAX) typedef uint_least16_t yytype_uint16; #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX typedef unsigned short yytype_uint16; #else typedef int yytype_uint16; #endif #ifndef YYPTRDIFF_T # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ # define YYPTRDIFF_T __PTRDIFF_TYPE__ # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ # elif defined PTRDIFF_MAX # ifndef ptrdiff_t # include /* INFRINGES ON USER NAME SPACE */ # endif # define YYPTRDIFF_T ptrdiff_t # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX # else # define YYPTRDIFF_T long # define YYPTRDIFF_MAXIMUM LONG_MAX # endif #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned # endif #endif #define YYSIZE_MAXIMUM \ YY_CAST (YYPTRDIFF_T, \ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ ? YYPTRDIFF_MAXIMUM \ : YY_CAST (YYSIZE_T, -1))) #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) /* Stored state numbers (used for stacks). */ typedef yytype_int16 yy_state_t; /* State numbers in computations. */ typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif #define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 106 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 3231 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 170 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 368 /* YYNRULES -- Number of rules. */ #define YYNRULES 735 /* YYNSTATES -- Number of states. */ #define YYNSTATES 1501 #define YYUNDEFTOK 2 #define YYMAXUTOK 409 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 166, 168, 2, 160, 169, 161, 155, 2, 2, 157, 158, 159, 2, 2, 2, 2, 2, 2, 162, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 156, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 163, 2, 2, 2, 2, 2, 164, 165, 2, 167, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { 0, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 215, 218, 218, 219, 219, 219, 220, 222, 222, 226, 230, 230, 232, 234, 236, 236, 238, 238, 240, 242, 244, 246, 248, 248, 250, 250, 252, 252, 252, 252, 254, 254, 258, 260, 264, 265, 266, 268, 268, 270, 272, 274, 276, 280, 281, 284, 285, 287, 289, 291, 294, 295, 296, 298, 300, 302, 302, 304, 307, 308, 310, 310, 315, 315, 317, 317, 319, 321, 323, 327, 328, 331, 332, 333, 335, 335, 336, 339, 340, 344, 345, 346, 350, 351, 352, 353, 355, 359, 361, 364, 366, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 404, 406, 408, 412, 417, 419, 421, 423, 425, 429, 434, 435, 437, 439, 441, 445, 449, 451, 451, 453, 453, 458, 463, 464, 465, 466, 467, 468, 469, 471, 473, 475, 475, 477, 477, 479, 481, 483, 485, 487, 489, 493, 495, 499, 499, 502, 505, 510, 510, 510, 510, 510, 513, 518, 518, 518, 518, 521, 525, 526, 528, 544, 548, 549, 551, 551, 553, 553, 559, 559, 561, 563, 570, 570, 570, 570, 572, 579, 580, 581, 582, 584, 591, 592, 593, 594, 596, 603, 610, 611, 612, 614, 616, 616, 616, 616, 616, 616, 616, 616, 616, 618, 618, 620, 620, 622, 622, 622, 624, 629, 635, 640, 643, 646, 647, 648, 649, 650, 651, 652, 653, 654, 657, 658, 659, 660, 661, 662, 663, 664, 667, 668, 669, 670, 671, 672, 673, 674, 677, 678, 681, 682, 683, 684, 685, 689, 690, 691, 692, 693, 694, 695, 696, 697, 700, 701, 702, 703, 706, 707, 708, 709, 712, 713, 716, 717, 718, 723, 724, 727, 728, 729, 730, 731, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 771, 774, 776, 778, 780, 782, 785, 786, 787, 788, 790, 791, 792, 793, 794, 796, 797, 799, 800, 802, 803, 804, 804, 806, 822, 822, 824, 832, 833, 835, 836, 838, 846, 847, 849, 851, 853, 858, 859, 861, 863, 865, 867, 869, 871, 873, 878, 882, 884, 887, 890, 891, 892, 894, 895, 897, 902, 903, 905, 905, 907, 911, 911, 911, 913, 913, 915, 923, 932, 940, 950, 951, 953, 955, 955, 957, 957, 960, 961, 965, 971, 972, 973, 975, 975, 977, 979, 981, 985, 990, 990, 992, 995, 996, 1001, 1002, 1004, 1009, 1009, 1009, 1011, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1022, 1025, 1027, 1029, 1032, 1034, 1034, 1034, 1038, 1044, 1044, 1048, 1048, 1049, 1049, 1051, 1056, 1057, 1058, 1059, 1060, 1062, 1068, 1073, 1079, 1081, 1083, 1085, 1089, 1095, 1096, 1097, 1099, 1101, 1103, 1107, 1107, 1109, 1111, 1116, 1117, 1118, 1120, 1122, 1124, 1126, 1130, 1130, 1132, 1138, 1145, 1145, 1148, 1155, 1156, 1157, 1158, 1159, 1161, 1162, 1163, 1165, 1169, 1171, 1173, 1173, 1177, 1182, 1182, 1182, 1186, 1191, 1191, 1193, 1197, 1197, 1199, 1200, 1201, 1202, 1206, 1211, 1213, 1217, 1217, 1221, 1226, 1228, 1232, 1233, 1234, 1235, 1236, 1238, 1238, 1240, 1243, 1245, 1245, 1247, 1249, 1251, 1255, 1261, 1262, 1263, 1264, 1266, 1268, 1272, 1277, 1279, 1282, 1288, 1289, 1290, 1292, 1296, 1302, 1302, 1302, 1302, 1302, 1302, 1306, 1311, 1313, 1318, 1318, 1319, 1321, 1321, 1323, 1330, 1330, 1332, 1339, 1339, 1341, 1348, 1355, 1360, 1361, 1362, 1364, 1370, 1375, 1383, 1389, 1391, 1393, 1404, 1405, 1406, 1408, 1410, 1410, 1411, 1411, 1415, 1421, 1421, 1423, 1428, 1434, 1439, 1445, 1450, 1455, 1461, 1466, 1471, 1477, 1482, 1487, 1493, 1493, 1494, 1494, 1495, 1495, 1496, 1496, 1497, 1497, 1498, 1498, 1501, 1501, 1503, 1504, 1505, 1507, 1509, 1513, 1516, 1516, 1519, 1520, 1521, 1523, 1527, 1528, 1530, 1532, 1532, 1533, 1533, 1534, 1534, 1534, 1535, 1536, 1536, 1537, 1537, 1538, 1538, 1540, 1540, 1541, 1541, 1542, 1543, 1543, 1547, 1551, 1552, 1555, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1568, 1570, 1572, 1575, 1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 1598, 1602, 1603, 1606, 1611, 1612, 1613, 1614, 1615, 1617, 1622, 1627, 1628, 1631, 1637, 1637, 1637, 1637, 1639, 1640, 1641, 1642, 1644, 1646, 1651, 1657, 1659, 1664, 1665, 1668, 1676, 1677, 1678, 1679, 1681, 1683 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 1 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "\"end of string\"", "error", "$undefined", "\"PROJECTION\"", "\"DATUM\"", "\"SPHEROID\"", "\"PRIMEM\"", "\"UNIT\"", "\"AXIS\"", "\"PARAMETER\"", "\"GEODCRS\"", "\"LENGTHUNIT\"", "\"ANGLEUNIT\"", "\"SCALEUNIT\"", "\"TIMEUNIT\"", "\"ELLIPSOID\"", "\"CS\"", "\"ID\"", "\"PROJCRS\"", "\"BASEGEODCRS\"", "\"MERIDIAN\"", "\"BEARING\"", "\"ORDER\"", "\"ANCHOR\"", "\"ANCHOREPOCH\"", "\"CONVERSION\"", "\"METHOD\"", "\"REMARK\"", "\"GEOGCRS\"", "\"BASEGEOGCRS\"", "\"SCOPE\"", "\"AREA\"", "\"BBOX\"", "\"CITATION\"", "\"URI\"", "\"VERTCRS\"", "\"VDATUM\"", "\"GEOIDMODEL\"", "\"COMPOUNDCRS\"", "\"PARAMETERFILE\"", "\"COORDINATEOPERATION\"", "\"SOURCECRS\"", "\"TARGETCRS\"", "\"INTERPOLATIONCRS\"", "\"OPERATIONACCURACY\"", "\"CONCATENATEDOPERATION\"", "\"STEP\"", "\"BOUNDCRS\"", "\"ABRIDGEDTRANSFORMATION\"", "\"DERIVINGCONVERSION\"", "\"TDATUM\"", "\"CALENDAR\"", "\"TIMEORIGIN\"", "\"TIMECRS\"", "\"VERTICALEXTENT\"", "\"TIMEEXTENT\"", "\"USAGE\"", "\"DYNAMIC\"", "\"FRAMEEPOCH\"", "\"MODEL\"", "\"VELOCITYGRID\"", "\"ENSEMBLE\"", "\"MEMBER\"", "\"ENSEMBLEACCURACY\"", "\"DERIVEDPROJCRS\"", "\"BASEPROJCRS\"", "\"EDATUM\"", "\"ENGCRS\"", "\"PDATUM\"", "\"PARAMETRICCRS\"", "\"PARAMETRICUNIT\"", "\"BASEVERTCRS\"", "\"BASEENGCRS\"", "\"BASEPARAMCRS\"", "\"BASETIMECRS\"", "\"EPOCH\"", "\"COORDEPOCH\"", "\"COORDINATEMETADATA\"", "\"POINTMOTIONOPERATION\"", "\"VERSION\"", "\"AXISMINVALUE\"", "\"AXISMAXVALUE\"", "\"RANGEMEANING\"", "\"exact\"", "\"wraparound\"", "\"GEODETICCRS\"", "\"GEODETICDATUM\"", "\"PROJECTEDCRS\"", "\"PRIMEMERIDIAN\"", "\"GEOGRAPHICCRS\"", "\"TRF\"", "\"VERTICALCRS\"", "\"VERTICALDATUM\"", "\"VRF\"", "\"TIMEDATUM\"", "\"TEMPORALQUANTITY\"", "\"ENGINEERINGDATUM\"", "\"ENGINEERINGCRS\"", "\"PARAMETRICDATUM\"", "\"affine\"", "\"Cartesian\"", "\"cylindrical\"", "\"ellipsoidal\"", "\"linear\"", "\"parametric\"", "\"polar\"", "\"spherical\"", "\"vertical\"", "\"temporal\"", "\"temporalCount\"", "\"temporalMeasure\"", "\"ordinal\"", "\"temporalDateTime\"", "\"north\"", "\"northNorthEast\"", "\"northEast\"", "\"eastNorthEast\"", "\"east\"", "\"eastSouthEast\"", "\"southEast\"", "\"southSouthEast\"", "\"south\"", "\"southSouthWest\"", "\"southWest\"", "\"westSouthWest\"", "\"west\"", "\"westNorthWest\"", "\"northWest\"", "\"northNorthWest\"", "\"up\"", "\"down\"", "\"geocentricX\"", "\"geocentricY\"", "\"geocentricZ\"", "\"columnPositive\"", "\"columnNegative\"", "\"rowPositive\"", "\"rowNegative\"", "\"displayRight\"", "\"displayLeft\"", "\"displayUp\"", "\"displayDown\"", "\"forward\"", "\"aft\"", "\"port\"", "\"starboard\"", "\"clockwise\"", "\"counterClockwise\"", "\"towards\"", "\"awayFrom\"", "\"future\"", "\"part\"", "\"unspecified\"", "\"string\"", "\"unsigned integer\"", "'.'", "'E'", "'1'", "'2'", "'3'", "'+'", "'-'", "':'", "'T'", "'Z'", "'['", "'('", "']'", "')'", "','", "$accept", "input", "datum", "crs", "period", "number", "signed_numeric_literal_with_sign", "signed_numeric_literal", "unsigned_numeric_literal", "opt_sign", "approximate_numeric_literal", "mantissa", "exponent", "signed_integer", "exact_numeric_literal", "opt_period_unsigned_integer", "unsigned_integer", "sign", "colon", "hyphen", "datetime", "opt_24_hour_clock", "year", "month", "day", "_24_hour_clock", "opt_colon_minute_colon_second_time_zone_designator", "opt_colon_second_time_zone_designator", "time_designator", "hour", "minute", "second_time_zone_designator", "seconds_integer", "seconds_fraction", "time_zone_designator", "utc_designator", "local_time_zone_designator", "opt_colon_minute", "left_delimiter", "right_delimiter", "wkt_separator", "quoted_latin_text", "quoted_unicode_text", "opt_separator_scope_extent_identifier_remark", "no_opt_separator_scope_extent_identifier_remark", "opt_identifier_list_remark", "scope_extent_opt_identifier_list_opt_remark", "scope_extent_opt_identifier_list_remark", "usage_list_opt_identifier_list_remark", "usage", "usage_keyword", "scope", "scope_keyword", "scope_text_description", "extent", "extent_opt_identifier_list_remark", "area_description", "area_description_keyword", "area_text_description", "geographic_bounding_box", "geographic_bounding_box_keyword", "lower_left_latitude", "lower_left_longitude", "upper_right_latitude", "upper_right_longitude", "vertical_extent", "opt_separator_length_unit", "vertical_extent_keyword", "vertical_extent_minimum_height", "vertical_extent_maximum_height", "temporal_extent", "temporal_extent_keyword", "temporal_extent_start", "temporal_extent_end", "identifier", "opt_version_authority_citation_uri", "identifier_keyword", "authority_name", "authority_unique_identifier", "version", "authority_citation", "citation_keyword", "citation", "id_uri", "uri_keyword", "uri", "remark", "remark_keyword", "unit", "spatial_unit", "angle_or_length_or_parametric_or_scale_unit", "angle_or_length_or_parametric_or_scale_unit_keyword", "angle_or_length_or_scale_unit", "angle_or_length_or_scale_unit_keyword", "angle_unit", "opt_separator_identifier_list", "length_unit", "time_unit", "opt_separator_conversion_factor_identifier_list", "angle_unit_keyword", "length_unit_keyword", "time_unit_keyword", "unit_name", "conversion_factor", "coordinate_system_scope_extent_identifier_remark", "spatial_cs_scope_extent_identifier_remark", "opt_separator_spatial_axis_list_opt_separator_cs_unit_scope_extent_identifier_remark", "wkt2015temporal_cs_scope_extent_identifier_remark", "opt_separator_cs_unit_scope_extent_identifier_remark", "temporalcountmeasure_cs_scope_extent_identifier_remark", "ordinaldatetime_cs_scope_extent_identifier_remark", "opt_separator_ordinaldatetime_axis_list_scope_extent_identifier_remark", "cs_keyword", "spatial_cs_type", "temporalcountmeasure_cs_type", "ordinaldatetime_cs_type", "dimension", "spatial_axis", "temporalcountmeasure_axis", "ordinaldatetime_axis", "axis_keyword", "axis_name_abbrev", "axis_direction_opt_axis_order_spatial_unit_identifier_list", "north_south_options_spatial_unit", "clockwise_counter_clockwise_options_spatial_unit", "axis_direction_except_n_s_cw_ccw_opt_axis_spatial_unit_identifier_list", "axis_direction_except_n_s_cw_ccw_opt_axis_spatial_unit_identifier_list_options", "axis_direction_opt_axis_order_identifier_list", "north_south_options", "clockwise_counter_clockwise_options", "axis_direction_except_n_s_cw_ccw_opt_axis_identifier_list", "axis_direction_except_n_s_cw_ccw_opt_axis_identifier_list_options", "opt_separator_axis_time_unit_identifier_list", "axis_direction_except_n_s_cw_ccw_opt_axis_time_unit_identifier_list_options", "axis_direction_except_n_s_cw_ccw", "meridian", "meridian_keyword", "bearing", "bearing_keyword", "axis_order", "axis_order_keyword", "axis_range_opt_separator_identifier_list", "opt_separator_axis_range_opt_separator_identifier_list", "axis_minimum_value", "axis_minimum_value_keyword", "axis_maximum_value", "axis_maximum_value_keyword", "axis_range_meaning", "axis_range_meaning_keyword", "axis_range_meaning_value", "cs_unit", "datum_ensemble", "geodetic_datum_ensemble_without_pm", "datum_ensemble_member_list_ellipsoid_accuracy_identifier_list", "opt_separator_datum_ensemble_identifier_list", "vertical_datum_ensemble", "datum_ensemble_member_list_accuracy_identifier_list", "datum_ensemble_keyword", "datum_ensemble_name", "datum_ensemble_member", "opt_datum_ensemble_member_identifier_list", "datum_ensemble_member_keyword", "datum_ensemble_member_name", "datum_ensemble_member_identifier", "datum_ensemble_accuracy", "datum_ensemble_accuracy_keyword", "accuracy", "datum_ensemble_identifier", "dynamic_crs", "dynamic_crs_keyword", "frame_reference_epoch", "frame_reference_epoch_keyword", "reference_epoch", "opt_separator_deformation_model_id", "deformation_model_id", "opt_separator_identifier", "deformation_model_id_keyword", "deformation_model_name", "geodetic_crs", "geographic_crs", "static_geodetic_crs", "dynamic_geodetic_crs", "static_geographic_crs", "dynamic_geographic_crs", "opt_prime_meridian_coordinate_system_scope_extent_identifier_remark", "crs_name", "geodetic_crs_keyword", "geographic_crs_keyword", "geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm", "ellipsoid", "opt_separator_length_unit_identifier_list", "ellipsoid_keyword", "ellipsoid_name", "semi_major_axis", "inverse_flattening", "prime_meridian", "prime_meridian_keyword", "prime_meridian_name", "irm_longitude_opt_separator_identifier_list", "geodetic_reference_frame_with_opt_pm", "geodetic_reference_frame_without_pm", "geodetic_reference_frame_keyword", "datum_name", "opt_separator_datum_anchor_anchor_epoch_identifier_list", "datum_anchor", "datum_anchor_keyword", "datum_anchor_description", "datum_anchor_epoch", "datum_anchor_epoch_keyword", "anchor_epoch", "projected_crs", "projected_crs_keyword", "base_geodetic_crs", "base_static_geodetic_crs", "opt_separator_pm_ellipsoidal_cs_unit_opt_separator_identifier_list", "base_dynamic_geodetic_crs", "base_static_geographic_crs", "base_dynamic_geographic_crs", "base_geodetic_crs_keyword", "base_geographic_crs_keyword", "base_crs_name", "ellipsoidal_cs_unit", "map_projection", "opt_separator_parameter_list_identifier_list", "map_projection_keyword", "map_projection_name", "map_projection_method", "map_projection_method_keyword", "map_projection_method_name", "map_projection_parameter", "opt_separator_param_unit_identifier_list", "parameter_keyword", "parameter_name", "parameter_value", "map_projection_parameter_unit", "vertical_crs", "static_vertical_crs", "dynamic_vertical_crs", "vertical_reference_frame_or_vertical_datum_ensemble", "vertical_cs_opt_geoid_model_id_scope_extent_identifier_remark", "opt_separator_cs_unit_opt_geoid_model_id_scope_extent_identifier_remark", "opt_geoid_model_id_list_opt_separator_scope_extent_identifier_remark", "geoid_model_id", "geoid_model_keyword", "geoid_model_name", "vertical_crs_keyword", "vertical_reference_frame", "vertical_reference_frame_keyword", "engineering_crs", "engineering_crs_keyword", "engineering_datum", "engineering_datum_keyword", "opt_separator_datum_anchor_identifier_list", "parametric_crs", "parametric_crs_keyword", "parametric_datum", "parametric_datum_keyword", "temporal_crs", "temporal_crs_keyword", "temporal_datum", "opt_separator_temporal_datum_end", "temporal_datum_keyword", "temporal_origin", "temporal_origin_keyword", "temporal_origin_description", "calendar", "calendar_keyword", "calendar_identifier", "deriving_conversion", "opt_separator_parameter_or_parameter_file_identifier_list", "deriving_conversion_keyword", "deriving_conversion_name", "operation_method", "operation_method_keyword", "operation_method_name", "operation_parameter", "opt_separator_parameter_unit_identifier_list", "parameter_unit", "length_or_angle_or_scale_or_time_or_parametric_unit", "length_or_angle_or_scale_or_time_or_parametric_unit_keyword", "operation_parameter_file", "parameter_file_keyword", "parameter_file_name", "derived_geodetic_crs", "derived_geographic_crs", "derived_static_geod_crs", "base_static_geod_crs_or_base_static_geog_crs", "derived_dynamic_geod_crs", "base_dynamic_geod_crs_or_base_dynamic_geog_crs", "derived_static_geog_crs", "derived_dynamic_geog_crs", "base_static_geod_crs", "opt_separator_pm_opt_separator_identifier_list", "base_dynamic_geod_crs", "base_static_geog_crs", "base_dynamic_geog_crs", "derived_projected_crs", "derived_projected_crs_keyword", "derived_crs_name", "base_projected_crs", "base_projected_crs_opt_separator_cs_identifier", "base_projected_crs_keyword", "base_geodetic_geographic_crs", "derived_vertical_crs", "base_vertical_crs", "base_static_vertical_crs", "base_dynamic_vertical_crs", "base_vertical_crs_keyword", "derived_engineering_crs", "base_engineering_crs", "base_engineering_crs_keyword", "derived_parametric_crs", "base_parametric_crs", "base_parametric_crs_keyword", "derived_temporal_crs", "base_temporal_crs", "base_temporal_crs_keyword", "compound_crs", "single_crs", "single_crs_or_bound_crs", "opt_wkt_separator_single_crs_list_opt_separator_scope_extent_identifier_remark", "compound_crs_keyword", "compound_crs_name", "metadata_coordinate_epoch", "coordinate_epoch_keyword", "coordinate_epoch", "coordinate_metadata", "coordinate_metadata_crs", "coordinate_metadata_keyword", "static_crs_coordinate_metadata", "dynamic_crs_coordinate_metadata", "coordinate_operation", "coordinate_operation_next", "coordinate_operation_end", "opt_parameter_or_parameter_file_list_opt_interpolation_crs_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark", "operation_keyword", "operation_name", "operation_version", "operation_version_keyword", "operation_version_text", "source_crs", "source_crs_keyword", "target_crs", "target_crs_keyword", "interpolation_crs", "interpolation_crs_keyword", "operation_accuracy", "operation_accuracy_keyword", "point_motion_operation", "point_motion_operation_next", "point_motion_operation_end", "opt_parameter_or_parameter_file_list_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark", "point_motion_keyword", "concatenated_operation", "concatenated_operation_next", "concatenated_operation_end", "step", "opt_concatenated_operation_end", "concatenated_operation_keyword", "step_keyword", "bound_crs", "bound_crs_keyword", "abridged_coordinate_transformation", "abridged_coordinate_transformation_next", "abridged_coordinate_transformation_end", "opt_end_abridged_coordinate_transformation", "abridged_transformation_keyword", "abridged_transformation_parameter", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 46, 69, 49, 50, 51, 43, 45, 58, 84, 90, 91, 40, 93, 41, 44 }; # endif #define YYPACT_NINF (-1271) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) #define YYTABLE_NINF (-676) #define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 2601, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, 107, -1271, -1271, -1271, 393, -1271, -1271, -1271, 393, -1271, -1271, -1271, -1271, -1271, -1271, 393, 393, -1271, 393, -1271, -35, 393, -1271, 393, -1271, 393, -1271, -1271, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, -1271, -1271, -1271, -1271, -1271, -1271, 393, -1271, -1271, -1271, -1271, -1271, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, 393, -1271, -1271, -1271, -6, -6, -6, -6, -6, -1271, 81, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, 1008, -6, -6, -6, 150, -1271, -1271, -35, -1271, -35, -1271, -35, -35, -1271, -35, -1271, -1271, -1271, 393, -1271, -35, -35, -1271, -35, -35, -35, -35, -35, -35, -35, -35, -35, -1271, -35, -1271, -35, -1271, -1271, -1271, -1271, -15, -1271, -1271, -1271, -1271, -1271, 37, 44, 76, -1271, -1271, -1271, -1271, 477, -1271, -35, -1271, -35, -35, -35, -1271, -35, 393, 771, 272, 109, 109, 453, -6, 213, 466, 336, 764, 455, 477, 259, 217, 477, 215, 477, 68, 267, 477, 350, 1122, -1271, -1271, -1271, 590, 152, -1271, -1271, 152, -1271, -1271, 152, -1271, -1271, 310, 1008, -1271, -1271, -1271, -1271, -1271, -1271, -1271, 719, -1271, -1271, -1271, -1271, 276, 299, 269, 453, -1271, -35, -1271, -35, 393, -1271, -1271, -1271, -1271, 393, -35, 393, -35, -1271, 393, 393, -35, -35, -1271, -1271, -1271, -1271, -35, -35, -35, -35, -1271, -35, -1271, -35, -35, -35, -1271, -1271, -1271, -1271, 393, 393, -1271, -1271, -35, 393, -1271, -1271, 393, -35, -35, -1271, -35, -1271, -1271, 393, -1271, -1271, -35, -35, 393, -35, 393, -1271, -1271, -35, -35, 393, -35, -35, -1271, -1271, -35, -35, 393, -1271, -1271, -35, -35, 393, -1271, -1271, -35, -35, 393, -35, 393, -1271, -1271, -35, 393, -1271, -35, -1271, -1271, -1271, -1271, 393, -1271, -35, 393, -35, -35, -35, -35, -35, -1271, -35, 393, 477, -1271, 508, 719, -1271, -1271, 423, 477, 297, 477, 477, -6, -6, 85, 448, 120, -6, -6, 492, 492, 85, 120, 492, 492, 453, 508, 477, 523, -6, -6, 256, 477, -6, -6, 86, 547, 492, -6, 551, -1271, 116, -6, 551, 719, 547, 492, -6, -1271, 551, 547, 492, -6, 547, 492, -6, -1271, -1271, 555, 171, -1271, -6, 492, -6, 1122, 719, 150, -1271, -6, 310, 150, -1271, 560, 150, -1271, 310, 540, 1008, -1271, 719, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -35, -35, 393, -1271, 393, -1271, -1271, -35, -35, 393, -35, -1271, -1271, -1271, -35, -35, -35, -1271, -35, 393, -1271, -1271, -1271, -1271, -1271, -1271, 393, 477, -35, -1271, -35, -35, -1271, -35, 393, -35, -35, 477, -35, -35, -1271, -35, -35, 453, 477, -1271, -35, -35, -35, -1271, -35, -35, 393, -1271, -1271, -35, -35, -35, 393, 477, -35, -35, -35, -35, -35, -1271, 477, -35, 269, 477, 477, -35, -35, -35, 477, -35, -35, 477, -35, -35, -1271, -1271, 64, -1271, 477, -35, -1271, 477, -35, -35, -35, 269, 477, -1271, 477, -35, -1271, -35, 393, -35, -1271, -35, 393, 477, -1271, 563, 564, -6, -6, -1271, -1271, 551, -1271, 1199, 537, 551, 477, 272, 120, 632, 477, 719, 1438, -1271, 547, 74, 74, 547, -6, 547, 120, -1271, 547, 547, 326, 477, 548, -1271, -1271, -1271, 547, 74, 74, -1271, -1271, -6, 477, 272, 547, 1308, -1271, 547, 52, -1271, -1271, 551, -1271, -1271, 719, -1271, -1271, 547, 285, -1271, -1271, 547, 308, -1271, 547, 87, -1271, -1271, 719, -1271, -1271, 719, -1271, -1271, -1271, 547, 466, 1669, 477, 719, -1271, -1271, 560, 1296, 477, -6, 558, 1446, 477, -6, -1271, -35, -1271, -1271, 477, -1271, 477, -1271, -35, -1271, 477, -35, -1271, -35, -1271, -35, 477, -1271, -1271, -1271, 393, -1271, 269, 477, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -35, -1271, -1271, -1271, -1271, -35, -35, -35, -1271, -35, -35, -35, -35, 477, -1271, -35, 477, 477, 477, 477, -1271, -1271, -35, -35, 393, -1271, -1271, -1271, -35, 393, 477, -35, -35, -35, -35, -1271, -35, -1271, -35, 477, -35, 477, -35, -35, -35, -1271, 477, -35, 477, -35, 477, -35, 118, 471, -1271, 339, 477, -1271, -1271, -1271, -1271, -35, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -35, 393, -35, 393, -1271, -35, 393, -35, 393, -35, 393, -35, 393, -35, -1271, 393, -35, -1271, -1271, -35, -1271, -1271, -1271, 393, -35, -35, 393, -35, 393, -1271, -1271, -35, -1271, 393, -1271, -1271, -35, 564, -1271, -1271, -1271, -1271, -1271, -1271, 286, -1271, -6, 719, -1271, 531, 531, 531, 531, 85, 94, 477, 85, 477, -1271, 560, -1271, -1271, -1271, -1271, -1271, -1271, -6, -1271, -6, -1271, 85, 113, 477, 85, 477, 508, 634, -1271, 531, -1271, 86, 477, -1271, -1271, 477, -1271, 477, -1271, 477, -1271, 719, -1271, -1271, 719, 719, -1271, 452, -1271, -1271, -1271, -1271, 523, 112, 586, 457, -1271, -6, 432, -1271, -6, 268, -1271, 1199, 362, -1271, 1199, 490, -1271, 555, -1271, 489, -1271, 1263, 477, -6, -1271, -1271, -6, -1271, 1199, 551, 477, 329, 97, -1271, -1271, -1271, -35, -1271, -35, -1271, -1271, -1271, -1271, -35, -35, -35, -35, -35, -35, -35, -1271, -35, -1271, -35, -1271, -35, -35, -35, -35, -1271, -35, -35, -1271, -35, -1271, -1271, -35, -35, -35, -35, -1271, -1271, -1271, -1271, -1271, 495, 452, -1271, 339, 719, -1271, -35, -1271, -35, -1271, -35, -1271, -35, -1271, -1271, 477, -35, -35, -35, -1271, 477, -35, -35, -1271, -35, -35, -1271, -35, -1271, -1271, -35, -1271, 477, -1271, -1271, -35, -35, -35, 393, -35, -1271, -35, -35, 477, -1271, -1271, -1271, -1271, -1271, -1271, 477, -35, -35, 477, 477, 477, 477, 477, 477, -1271, -1271, 477, 288, 477, 453, 453, 477, -1271, 548, -1271, -1271, 477, 454, 477, 477, 477, -1271, -1271, 719, -1271, -1271, -1271, 1349, 477, -1271, 367, -1271, -1271, 268, -1271, 362, -1271, -1271, -1271, 362, -1271, -1271, 1199, -1271, 1199, 555, -1271, -1271, -1271, 1426, -1271, 1008, -1271, 508, -6, -1271, -35, 1307, 477, 560, -1271, -1271, -35, -35, -35, -35, -1271, -1271, -35, -35, -35, -1271, -1271, -35, -35, -1271, -35, -1271, -1271, -1271, -1271, -1271, -35, -1271, 393, -35, -1271, -35, -1271, -1271, -1271, 1066, -1271, -1271, 393, -1271, 477, -35, -35, -35, -1271, -35, -35, -35, -35, -1271, -35, -1271, -35, -1271, -1271, 477, -35, 477, -35, -1271, -35, 558, -1271, 393, -35, -35, -1271, 654, 654, 654, 654, -1271, -1271, -1271, 477, 477, -1271, -1271, -6, -1271, 654, 694, -1271, 1308, -1271, 387, 651, 616, 362, -1271, -1271, -1271, -1271, 1199, 519, 477, -1271, -1271, -1271, 722, 477, 477, 393, -6, -1271, -1271, -1271, -35, 393, -35, 393, -35, -35, 393, -1271, -1271, -35, -35, 462, 694, -1271, -35, -35, -1271, -35, -1271, -1271, -35, -1271, -35, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -35, -35, -1271, 393, -1271, -1271, 329, -35, 539, -1271, -6, 883, -1271, -6, -1271, 730, -1271, -6, 453, 1053, -1271, -1271, 651, 616, 616, -1271, 1199, -1271, -1271, -6, 477, 508, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, 393, -1271, 393, -35, -1271, -35, -1271, -35, -35, -35, -1271, -35, -35, -35, -1271, -1271, -35, -35, 393, -35, -1271, -1271, -1271, -1271, 477, -35, -35, -35, -6, -6, 1446, 2745, -1271, -1271, 1474, -1271, 2117, 477, 1437, -1271, 1437, -1271, -6, 616, -1271, 453, 477, 1071, 477, 477, -35, -35, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -35, -35, -35, -35, -35, 477, -1271, -35, -35, -35, -35, -35, 477, -1271, -35, -1271, -35, -1271, -35, -1271, -35, -1271, -35, -1271, -1271, -35, 393, -1271, -1271, 453, 477, 292, 477, 520, 520, 606, 606, -1271, 304, 619, 520, 604, 604, -1271, 141, -1271, -1271, 477, -1271, -1271, 329, -35, -1271, -1271, -1271, -1271, -35, -35, -1271, -35, 393, -1271, -35, 393, -35, 393, -1271, -1271, -35, -35, -1271, -35, 393, -35, -1271, -1271, -35, -35, -1271, -35, 393, -35, -1271, -35, -35, -1271, -35, -1271, -35, -1271, -35, -35, -1271, -35, -1271, -35, -35, -1271, -35, -1271, -35, -1271, -1271, 477, 477, -1271, 636, -1271, 70, -1271, 719, 75, -1271, 1199, -1271, 1199, -1271, -1271, 502, -1271, 1199, 532, -1271, -1271, -1271, 502, -1271, 1199, 532, -1271, -1271, -1271, 287, -1271, -1271, 406, -1271, -1271, -1271, 406, -1271, -1271, -1271, -1271, -35, -1271, -35, -35, -35, 477, -35, 477, 477, -35, -35, -35, -35, -35, -35, 477, -35, -35, -35, -35, -1271, 75, -1271, -1271, -1271, -1271, 95, -1271, -1271, -1271, -1271, 532, -1271, 441, -1271, -1271, 532, -1271, -1271, -1271, -1271, -1271, -1271, -35, -1271, -35, 393, -35, 477, -35, 95, -1271, -1271, 647, -1271, -1271, -1271, -35, -1271, -1271, 477, -1271, -1271 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_int16 yydefact[] = { 0, 439, 426, 415, 425, 161, 460, 483, 417, 515, 518, 643, 687, 722, 725, 544, 537, 376, 599, 525, 522, 534, 532, 654, 709, 416, 441, 461, 418, 440, 516, 520, 519, 545, 526, 523, 535, 0, 4, 5, 2, 0, 13, 366, 367, 0, 626, 405, 403, 404, 406, 407, 0, 0, 3, 0, 12, 436, 0, 628, 0, 11, 0, 630, 497, 498, 0, 14, 0, 632, 0, 15, 0, 634, 0, 16, 0, 636, 0, 17, 0, 627, 580, 578, 579, 581, 582, 629, 0, 631, 633, 635, 637, 19, 18, 0, 7, 0, 8, 0, 9, 0, 10, 0, 6, 0, 1, 73, 74, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 162, 0, 377, 0, 414, 0, 0, 427, 0, 431, 432, 437, 0, 442, 0, 0, 484, 0, 0, 443, 0, 527, 0, 527, 0, 539, 600, 0, 644, 0, 655, 669, 656, 670, 657, 658, 672, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 0, 652, 0, 688, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, 651, 0, 0, 676, 678, 0, 700, 702, 0, 710, 712, 0, 0, 40, 20, 37, 38, 39, 41, 42, 0, 163, 21, 22, 26, 0, 25, 35, 0, 164, 154, 381, 0, 0, 475, 476, 389, 420, 0, 0, 0, 0, 419, 0, 0, 0, 0, 584, 587, 585, 588, 0, 0, 0, 0, 428, 0, 433, 0, 443, 0, 462, 463, 464, 465, 0, 0, 487, 486, 480, 0, 615, 502, 0, 0, 0, 501, 0, 611, 612, 0, 452, 455, 190, 444, 0, 445, 0, 517, 618, 0, 0, 0, 190, 528, 524, 621, 0, 0, 0, 533, 624, 0, 0, 0, 551, 547, 190, 190, 0, 190, 0, 538, 605, 0, 0, 638, 0, 639, 646, 647, 653, 0, 690, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 34, 27, 0, 33, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 447, 0, 0, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, 543, 542, 0, 0, 540, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 701, 0, 0, 711, 0, 0, 0, 692, 0, 29, 31, 28, 36, 168, 171, 165, 166, 155, 158, 0, 160, 0, 153, 385, 0, 371, 0, 0, 368, 373, 382, 379, 0, 0, 391, 395, 0, 223, 413, 204, 205, 206, 207, 0, 0, 0, 477, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, 429, 422, 190, 0, 0, 438, 0, 0, 0, 493, 190, 480, 0, 479, 488, 190, 0, 0, 0, 0, 0, 0, 190, 190, 446, 453, 0, 190, 456, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 50, 548, 48, 549, 0, 190, 552, 0, 0, 0, 640, 648, 0, 691, 0, 0, 561, 704, 0, 0, 734, 80, 0, 0, 32, 0, 0, 0, 0, 370, 375, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, 0, 0, 435, 24, 430, 0, 0, 0, 481, 482, 0, 0, 0, 0, 0, 499, 0, 0, 191, 449, 0, 451, 448, 457, 454, 521, 0, 0, 530, 531, 0, 0, 536, 0, 0, 44, 58, 0, 45, 49, 0, 546, 541, 550, 0, 0, 0, 0, 649, 645, 689, 0, 0, 0, 0, 0, 0, 0, 0, 694, 156, 159, 169, 0, 172, 0, 387, 371, 386, 0, 371, 383, 379, 378, 0, 0, 400, 401, 396, 0, 388, 392, 0, 224, 225, 226, 227, 228, 229, 230, 231, 232, 0, 233, 234, 235, 236, 0, 0, 0, 412, 0, 592, 0, 592, 0, 559, 0, 0, 0, 0, 0, 199, 198, 190, 190, 0, 421, 197, 196, 190, 0, 0, 0, 467, 0, 467, 494, 0, 485, 0, 0, 0, 0, 0, 190, 190, 458, 0, 190, 0, 190, 0, 190, 48, 0, 59, 0, 0, 606, 607, 608, 609, 0, 174, 100, 133, 136, 144, 148, 98, 642, 82, 88, 89, 93, 0, 85, 0, 92, 85, 0, 85, 0, 85, 0, 85, 0, 85, 84, 0, 640, 625, 650, 680, 576, 699, 708, 0, 704, 704, 0, 80, 0, 703, 562, 398, 723, 0, 81, 724, 0, 0, 167, 170, 372, 384, 369, 380, 0, 409, 0, 393, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 583, 0, 586, 411, 589, 590, 424, 423, 0, 434, 0, 459, 0, 0, 0, 0, 0, 27, 0, 500, 0, 610, 0, 0, 450, 616, 0, 619, 0, 622, 0, 46, 0, 43, 68, 0, 0, 53, 71, 55, 66, 67, 598, 0, 0, 0, 0, 91, 0, 0, 117, 0, 0, 118, 0, 0, 119, 0, 0, 120, 0, 83, 0, 641, 0, 0, 0, 705, 706, 0, 707, 0, 0, 0, 0, 0, 726, 728, 157, 0, 402, 398, 394, 237, 238, 239, 190, 190, 190, 190, 592, 190, 190, 591, 592, 596, 554, 202, 0, 0, 467, 190, 478, 190, 190, 466, 467, 473, 495, 490, 0, 190, 190, 613, 617, 620, 623, 52, 48, 71, 60, 0, 0, 70, 602, 96, 85, 94, 0, 90, 85, 87, 101, 0, 85, 85, 85, 134, 0, 85, 85, 137, 0, 85, 145, 0, 149, 150, 0, 79, 0, 697, 686, 680, 680, 80, 0, 80, 679, 0, 0, 0, 399, 560, 716, 717, 714, 715, 0, 730, 0, 0, 0, 0, 0, 0, 0, 594, 593, 0, 0, 0, 0, 0, 0, 471, 0, 468, 470, 0, 0, 0, 0, 0, 47, 69, 0, 54, 57, 72, 0, 0, 95, 0, 86, 99, 0, 121, 0, 122, 123, 132, 0, 124, 125, 0, 126, 0, 0, 173, 681, 682, 0, 683, 0, 685, 27, 0, 698, 0, 0, 0, 0, 727, 397, 0, 0, 0, 0, 595, 597, 190, 554, 554, 553, 203, 190, 190, 472, 190, 474, 188, 186, 185, 187, 190, 496, 0, 190, 489, 0, 614, 64, 56, 0, 604, 603, 0, 601, 0, 102, 103, 104, 105, 85, 85, 85, 85, 138, 0, 146, 142, 151, 152, 0, 80, 0, 564, 577, 398, 0, 733, 0, 730, 730, 729, 0, 0, 0, 0, 557, 555, 556, 0, 0, 469, 491, 0, 492, 0, 0, 63, 0, 97, 0, 0, 0, 0, 127, 128, 129, 130, 0, 0, 0, 147, 684, 696, 0, 0, 0, 0, 0, 732, 731, 243, 214, 0, 209, 0, 80, 220, 0, 192, 189, 0, 504, 65, 0, 61, 106, 107, 108, 109, 110, 111, 85, 139, 0, 143, 141, 574, 569, 570, 571, 572, 573, 190, 190, 567, 0, 563, 575, 0, 0, 0, 213, 0, 0, 208, 0, 218, 0, 219, 0, 0, 0, 503, 62, 0, 0, 0, 131, 0, 566, 565, 0, 0, 27, 183, 180, 179, 182, 200, 181, 201, 217, 365, 175, 177, 0, 176, 0, 215, 244, 0, 212, 209, 80, 0, 222, 220, 0, 190, 513, 508, 80, 509, 0, 112, 113, 114, 115, 140, 0, 194, 718, 190, 0, 0, 0, 0, 211, 210, 0, 221, 0, 0, 0, 505, 0, 507, 0, 0, 135, 0, 0, 0, 0, 0, 0, 194, 216, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 299, 246, 248, 250, 252, 0, 245, 270, 278, 280, 282, 284, 0, 277, 294, 184, 509, 511, 509, 514, 398, 116, 190, 568, 721, 80, 0, 713, 735, 0, 0, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 242, 0, 506, 510, 0, 195, 720, 0, 190, 193, 347, 358, 360, 190, 352, 300, 352, 0, 302, 190, 0, 190, 0, 241, 343, 190, 190, 247, 190, 0, 190, 249, 345, 190, 190, 251, 190, 0, 190, 253, 190, 352, 271, 352, 273, 190, 279, 190, 190, 281, 190, 283, 190, 190, 285, 190, 295, 352, 298, 512, 0, 0, 301, 0, 305, 0, 303, 0, 0, 348, 0, 349, 0, 254, 261, 0, 258, 0, 0, 260, 262, 269, 0, 266, 0, 0, 268, 272, 276, 0, 274, 286, 0, 288, 289, 290, 0, 292, 293, 296, 297, 718, 178, 190, 190, 352, 0, 190, 0, 0, 190, 190, 0, 190, 190, 190, 0, 190, 352, 190, 190, 719, 0, 353, 354, 304, 346, 0, 350, 357, 359, 257, 0, 255, 0, 259, 265, 0, 263, 344, 267, 275, 287, 291, 190, 362, 190, 0, 190, 0, 190, 0, 355, 351, 0, 256, 342, 264, 190, 363, 364, 0, 356, 361 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -1271, -1271, -1271, -223, -241, -130, -1271, 298, -172, 323, -1271, -1271, -1271, -1271, -1271, -1271, -104, -349, -642, -40, -760, -636, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -568, -238, -1271, -1271, -1271, -867, -1271, -1271, -228, -45, 1509, 497, 1984, -1271, -745, -503, -589, -1271, -1271, -145, -1271, -1271, -139, -1271, -1271, -1271, -138, -287, -1271, -1271, -802, -1271, -1271, -1271, -1271, -1271, -781, -1271, -1271, -1271, -1271, -746, -1271, -1271, -1271, 664, -1271, -1271, -1271, -1271, -1271, 179, -1271, -1271, -496, -1271, -1271, -768, -1271, -1271, -551, -1271, -1271, -1271, -1271, -572, 1695, -394, -1219, -528, -1271, -1271, -1271, -764, -930, -41, -258, -468, -1271, -1271, -1271, -1271, -470, -373, 162, -1271, -1271, -342, -999, -343, -424, -977, -641, -1271, -924, -575, -1271, -1271, -1271, -1271, -573, -1271, -1271, -1271, -1271, -949, -565, -1271, -595, -1271, -1239, -1271, -828, -1270, -1259, -1271, -1216, -1271, -718, -1271, -1271, -793, -1271, 780, -416, -121, 588, -428, 65, -235, -338, 147, -1271, -1271, -1271, 242, -1271, -71, -1271, -127, -1271, -1271, -1271, -1271, -1271, -1271, -854, -1271, -1271, -1271, -1271, 669, 685, 688, 693, -296, 480, -1271, -1271, -149, 69, -1271, -1271, -1271, -1271, -1271, -109, -1271, -1271, -1271, -1271, 39, -1271, 465, 549, 621, -1271, -1271, 438, -1271, -1271, 702, -1271, -1271, -1271, -647, -1271, -1271, -1271, 635, 637, 4, -148, 9, 371, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -362, -797, -951, -1271, -1271, 709, 721, -1271, 275, -1271, -935, -848, -1271, -1271, -1271, -197, -1271, 733, -1271, -174, -1271, 705, 736, -1271, -169, -1271, 738, -1271, -175, -1271, -1271, 464, -1271, -1271, -1271, -1271, -1271, 516, -263, -1271, -1271, -376, -1271, -1271, -778, -1271, -1271, -1271, -1271, -756, -1271, -1271, 741, -1271, -1271, 684, -1271, 686, -1271, -1271, 266, -617, 281, 284, 290, 757, -1271, -1271, -1271, -1271, -1271, -1271, 763, -1271, -1271, -1271, -1271, 774, -1271, -1271, 775, -1271, -1271, 776, -1271, -1271, 779, -181, -358, 140, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, -1271, 912, -1271, 577, -147, -1271, -95, -210, -1271, -1271, -72, -1271, 155, -1271, -1271, -1271, -819, -1271, -1271, -1271, 578, 47, 920, -1271, -1271, 591, -1115, -516, -1271, -1028, 933, -1271, -1271, -1271, -25, -269, -1271, -1271 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 37, 38, 39, 236, 640, 238, 903, 239, 480, 240, 241, 429, 430, 242, 354, 243, 244, 917, 609, 518, 610, 519, 717, 913, 611, 832, 992, 612, 833, 916, 1058, 1059, 1143, 834, 835, 836, 918, 109, 216, 388, 466, 945, 629, 771, 842, 734, 735, 736, 737, 738, 739, 740, 928, 1064, 741, 742, 743, 933, 744, 745, 937, 1074, 1153, 1229, 746, 1119, 747, 940, 1076, 748, 749, 943, 1079, 499, 357, 41, 136, 246, 437, 438, 439, 635, 440, 441, 637, 751, 752, 1202, 1203, 1204, 1205, 1051, 1052, 897, 389, 687, 1206, 1251, 693, 688, 1207, 893, 1041, 458, 459, 1174, 460, 1171, 461, 462, 1178, 463, 669, 670, 671, 881, 1133, 1131, 1136, 1134, 1210, 1299, 1364, 1372, 1300, 1379, 1306, 1383, 1388, 1307, 1393, 1326, 1352, 1294, 1365, 1366, 1373, 1374, 1367, 1354, 1355, 1401, 1356, 1357, 1358, 1359, 1483, 1484, 1498, 1208, 42, 253, 359, 549, 44, 360, 254, 138, 248, 553, 249, 451, 644, 445, 446, 641, 639, 255, 256, 455, 456, 654, 557, 650, 868, 651, 876, 46, 47, 48, 49, 50, 51, 464, 140, 52, 53, 257, 447, 572, 55, 143, 272, 478, 465, 147, 274, 481, 56, 258, 58, 149, 203, 300, 301, 503, 302, 303, 506, 59, 60, 276, 277, 809, 278, 279, 280, 259, 260, 467, 899, 959, 381, 62, 152, 285, 286, 492, 488, 986, 760, 700, 904, 1053, 63, 64, 65, 291, 496, 1182, 1246, 1222, 1223, 1314, 66, 67, 68, 69, 70, 71, 72, 206, 73, 74, 75, 76, 77, 78, 79, 211, 80, 324, 325, 521, 326, 327, 524, 960, 976, 471, 679, 964, 535, 768, 761, 1124, 1163, 1164, 1165, 762, 763, 1084, 81, 82, 83, 261, 84, 262, 85, 86, 263, 792, 264, 265, 266, 87, 88, 162, 330, 996, 331, 725, 89, 293, 294, 295, 296, 90, 307, 308, 91, 314, 315, 92, 319, 320, 93, 94, 333, 619, 95, 164, 337, 338, 529, 96, 182, 97, 183, 184, 961, 219, 220, 860, 99, 186, 340, 341, 531, 342, 191, 348, 349, 950, 951, 764, 765, 100, 222, 223, 625, 962, 102, 225, 226, 963, 1253, 103, 770, 334, 105, 538, 871, 872, 1026, 539, 1089 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 110, 692, 353, 431, 292, 350, 146, 111, 112, 61, 113, 343, 495, 116, 345, 117, 547, 118, 489, 865, 444, 119, 966, 120, 271, 121, 431, 122, 546, 123, 306, 124, 332, 125, 318, 126, 187, 188, 313, 57, 952, 894, 929, 127, 719, 534, 268, 633, 1042, 993, 128, 811, 129, 1192, 130, 527, 131, 1126, 132, 794, 133, 190, 237, 930, 954, 45, 934, 955, 267, 54, 1082, 922, 355, 926, 290, 474, 926, 831, 1, 926, 826, 948, 926, 1403, 1198, 926, 1353, 144, 10, 1, 1375, 1375, 5, 1380, 1385, 941, 1390, 1390, 931, 1394, 144, 935, 197, 949, 938, 1141, 1351, 106, 1425, 252, 1427, 5, 5, 1, 1132, 733, 1132, 1137, 15, 144, 690, 759, 10, 533, 1437, 691, 144, 452, 250, 5, 5, 252, 351, 5, 114, 17, 457, 15, 251, 726, 298, 1440, 317, 1440, 31, 32, 228, 134, 493, 344, 1348, 1349, 346, 845, -671, 848, 1349, 851, 5, 854, 26, 856, 33, 1347, 29, 1200, 252, 1440, 732, 145, 17, 26, 1462, 1448, 1212, 29, 339, 1482, 31, 32, 1452, 33, 145, 1442, 1441, 1478, 1441, 494, 5, 1444, 1456, 189, 1106, 189, 1457, 26, 1066, 1037, 1080, 29, 1137, 145, 477, 540, 361, 1018, -673, 1020, 145, 362, 1441, 364, 495, -674, 366, 367, 646, 1067, 2, 1038, 1069, 1348, 1349, 322, 1320, 607, 435, 608, 4, 1397, 1125, 339, 332, 926, 5, 926, 378, 379, 1144, 926, 297, 382, 1232, 1481, 383, -675, 702, 756, 979, 432, 1218, 387, 1068, 1077, 984, 1070, 391, 1071, 393, 647, 753, 1072, 914, 396, 595, 486, 289, 275, 971, 1088, 401, 681, 974, 5, 991, 404, 1183, 989, 873, -51, 407, 608, 410, 21, 5, 5, 412, 620, 312, 505, 1301, 2, 1308, 414, 1194, 726, 417, 486, 1195, 1196, 1197, 4, 2, 517, 426, 5, 1198, 1145, 575, 5, 528, 1194, 4, 36, 1347, 1195, 1196, 1197, 321, 322, 1316, 5, 730, 731, 541, 19, 1347, 757, 1146, 1148, 1169, 305, 997, 684, 247, 1121, 999, 685, 1140, 283, 1002, 1004, 1005, 5, 926, 1008, 1009, 344, 247, 1011, 346, 19, 347, 507, 7, 34, 947, 1199, 511, 247, 443, 514, 284, 1147, 1149, 1150, 1151, 1348, 1349, 12, 830, 468, 1348, 1349, 1199, 1339, 21, 1340, 469, 5, 1213, 34, 484, 485, 1348, 1349, 483, 1200, 1221, 726, 1176, 498, 707, 1345, 544, 1310, 545, 1312, 728, 729, 509, 550, 453, 1224, 1368, 513, 36, 24, 516, 473, 1386, 558, 784, 674, 676, 329, 526, 731, 559, 729, 891, 730, 731, 5, 230, 711, 565, 1230, 1347, 696, 698, 715, 352, 1319, 713, 673, 675, 332, 1225, 1226, 1227, 730, 731, 874, 582, 882, 883, 884, 690, 5, 586, 695, 697, 691, 653, -30, 433, 434, 546, 726, 1341, 1046, 706, 431, 729, 1047, 1048, 1049, 1238, 1255, 1256, 5, 5, 906, 5, 905, 1244, 547, 297, 298, 1113, 1114, 1115, 1116, 726, 250, 730, 731, 728, 729, 626, 709, 1060, 229, 630, 251, 231, 232, 233, 234, 235, 828, 1315, 829, 1381, 716, 454, 5, 718, 1194, 1395, 730, 731, 1195, 1196, 1197, 755, 726, 777, 5, 672, 779, 1086, 677, 1347, 680, 684, 1194, 682, 683, 685, 1195, 1196, 1197, 1214, 773, 694, 5, 1217, 1194, 1361, 469, 1347, 1195, 1196, 1197, 1194, 705, 7, 5, 1195, 1196, 1197, 1198, 115, 690, 5, 710, 107, 108, 691, 712, 1187, 457, 714, 5, 726, 830, 5, 727, 728, 729, 1199, 532, 1343, 720, 134, 229, 230, 536, 231, 232, 233, 234, 235, 154, 533, 156, 537, 158, 1199, 160, 141, 730, 731, 732, 433, 150, 434, 153, 443, 155, 1199, 157, 769, 159, 783, 229, 230, 1199, 231, 232, 233, 1194, 828, 718, 727, 1195, 1196, 1197, 907, 5, 1062, 5, -59, 1369, 1347, 1369, 1347, -59, -59, -59, 607, 192, 1200, 193, 5, 194, 195, 1361, 196, 1347, 944, 803, 214, 215, 198, 199, 805, 200, 201, 202, 204, 205, 207, 205, 209, 210, 608, 212, 965, 213, 1130, 1087, 40, 335, 336, 1201, 234, 235, 1211, 731, 431, 479, 1215, 428, 1199, 827, 1220, 994, 877, 217, 887, 218, 221, 224, 990, 227, 878, 879, 880, 648, 649, 840, 920, 843, 247, 443, 846, 898, 849, 923, 852, 924, 855, 730, 731, 857, 134, 229, 830, 1065, 231, 232, 233, 861, 1348, 1349, 864, 936, 866, 632, 939, 912, 1154, 869, 718, 915, 1324, 1156, 1496, 1497, 1257, 1157, 1158, 1159, 1160, 1061, 1130, 5, 1389, 1389, 1311, 356, 1237, 358, 1240, 5, 704, 1318, 1135, 517, 363, 1216, 365, 1376, 830, 726, 368, 369, 727, 728, 729, 1391, 370, 371, 372, 373, 1384, 374, 1495, 375, 202, 377, 1096, 1097, 1363, 1363, 1371, 1371, 43, 1378, 380, 1363, 730, 731, 732, 384, 385, 288, 386, 780, 1161, 642, 830, 956, 1081, 390, 165, 392, 10, 1015, 1016, 394, 395, 1040, 1040, 398, 862, 863, 399, 400, 718, 915, 166, 402, 403, 167, 1105, 1128, 1129, 252, 168, 408, 376, 17, 310, 411, 501, 885, 413, 169, 889, 1044, 281, 287, 282, 415, 170, 418, 419, 421, 422, 424, 431, 425, 895, 919, 229, 901, 171, 231, 232, 233, 234, 235, 31, 32, 829, 581, 703, 1447, 172, 208, 1450, 173, 299, 174, 1451, 309, 175, 1454, 522, 229, 323, 1455, 231, 232, 233, 269, 1073, 270, 1075, 721, 470, 472, 176, 1057, 475, 476, 1194, 1130, 177, 858, 1195, 1196, 1197, 1198, 722, 1486, 5, 723, 497, 178, 179, 180, 1019, 724, 181, 517, 726, 508, 98, 727, 728, 729, 512, 416, 1485, 515, 101, 420, 1458, 1487, 134, 229, 230, 525, 231, 232, 233, 234, 235, 104, 542, 543, 423, 730, 731, 732, 1028, 358, 548, 0, 551, 0, 0, 0, 552, 554, 555, 0, 556, 1199, 0, 718, 0, 0, 0, 0, 0, 0, 561, 0, 562, 563, 0, 564, 0, 566, 567, 0, 569, 570, 0, 571, 573, 0, 1200, 0, 577, 578, 579, 0, 0, 380, 0, 1152, 0, 0, 584, 585, 0, 0, 588, 589, 0, 0, 592, 0, 0, 1142, 0, 0, 0, 598, 599, 1102, 1040, 602, 603, 0, 605, 606, 0, 0, 0, 1107, 3, 0, 0, 0, 616, 617, 618, 0, 6, 0, 0, 623, 0, 624, 0, 627, 0, 628, 8, 0, 0, 718, 0, 0, 1127, 9, 487, 0, 11, 0, 0, 0, 0, 0, 0, 0, 500, 0, 504, 0, 1228, 0, 1194, 16, 510, 0, 1195, 1196, 1197, 1198, 0, 0, 5, 0, 18, 0, 0, 20, 0, 22, 1040, 0, 726, 1168, 0, 727, 728, 729, 0, 1172, 5, 1175, 1219, 0, 1179, 25, 0, 27, 0, 28, 726, 30, 0, 727, 728, 729, 0, 35, 0, 730, 731, 732, 0, 0, 0, 0, 0, 758, 0, 769, 0, 0, 1191, 0, 0, 1199, 0, 730, 731, 732, 0, 774, 0, 0, 3, 0, 0, 0, 548, 0, 0, 548, 6, 552, 0, 781, 0, 0, 0, 0, 1200, 0, 8, 1040, 0, 0, 0, 0, 0, 9, 0, 0, 1233, 786, 1234, 0, 0, 0, 787, 788, 789, 14, 790, 791, 793, 791, 0, 16, 796, 0, 1247, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 20, 0, 22, 807, 808, 810, 808, 0, 812, 0, 813, 0, 815, 0, 817, 0, 0, 0, 25, 0, 27, 0, 28, 638, 30, 0, 0, 643, 0, 0, 35, 229, 230, 838, 231, 232, 233, 234, 235, 0, 0, 829, 0, 0, 0, 839, 686, 841, 0, 0, 844, 0, 847, 0, 850, 0, 853, 0, 853, 0, 0, 618, 0, 0, 859, 0, 0, 708, 0, 624, 624, 0, 628, 0, 0, 0, 867, 0, 0, 0, 0, 870, 0, 486, 0, 0, 1344, 0, 1445, 0, 1446, 5, 0, 750, 0, 1449, 0, 0, 0, 750, 0, 726, 1453, 750, 727, 728, 729, 0, 0, 0, 0, 1443, 0, 757, 0, 0, 486, 946, 758, 0, 1404, 0, 0, 1407, 5, 1409, 0, 486, 730, 731, 732, 0, 1414, 0, 726, 5, 0, 727, 728, 729, 1421, 0, 0, 0, 0, 726, 757, 0, 727, 728, 729, 758, 0, 0, 0, 0, 0, 757, 0, 0, 0, 730, 731, 732, 229, 230, 0, 231, 232, 233, 234, 235, 730, 731, 732, 0, 457, 5, 0, 0, 0, 0, 781, 0, 867, 0, 0, 726, 0, 0, 727, 728, 729, 791, 0, 0, 0, 791, 0, 975, 0, 977, 978, 808, 0, 0, 981, 0, 0, 808, 0, 0, 985, 813, 730, 731, 732, 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, 995, 0, 853, 0, 998, 0, 853, 0, 0, 0, 1001, 1003, 853, 0, 0, 1007, 853, 0, 1010, 853, 0, 1012, 0, 1491, 1013, 0, 0, 5, 0, 859, 859, 1017, 0, 628, 0, 1021, 1022, 726, 5, 886, 727, 728, 729, 0, 0, 1025, 1027, 5, 726, 0, 0, 727, 728, 729, 758, 0, 896, 726, 1219, 0, 727, 728, 729, 0, 730, 731, 732, 0, 0, 0, 0, 0, 0, 0, 0, 730, 731, 732, 0, 0, 0, 0, 0, 0, 730, 731, 732, 921, 0, 925, 0, 0, 925, 0, 0, 925, 0, 0, 925, 0, 0, 925, 0, 0, 0, 1085, 0, 750, 0, 0, 0, 1091, 1092, 1093, 1094, 957, 0, 0, 975, 975, 0, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 0, 1104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109, 1110, 1111, 0, 1112, 853, 853, 853, 0, 1117, 0, 1118, 0, 0, 0, 628, 0, 1123, 0, 867, 0, 0, 0, 1025, 1025, 1295, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1296, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1297, 1298, 1289, 1290, 1291, 1292, 1293, 0, 1170, 0, 1173, 0, 628, 1177, 0, 0, 0, 1180, 1181, 1036, 0, 0, 1184, 1185, 0, 1186, 0, 0, 853, 1050, 1188, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 925, 1193, 925, 0, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 3, 0, 750, 0, 0, 0, 0, 5, 6, 0, 750, 0, 0, 0, 0, 0, 0, 726, 8, 0, 727, 728, 729, 0, 0, 9, 1235, 0, 1236, 0, 1173, 628, 1239, 304, 1177, 1241, 311, 14, 316, 1243, 1245, 328, 1248, 16, 730, 731, 732, 0, 1250, 1252, 0, 0, 0, 0, 18, 0, 0, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1323, 1250, 25, 0, 27, 0, 28, 0, 30, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 1325, 1327, 1328, 1329, 1330, 0, 0, 1332, 1333, 1334, 1335, 1336, 0, 0, 1338, 0, 1245, 0, 1245, 0, 867, 0, 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 750, 0, 0, 0, 750, 0, 0, 0, 750, 0, 0, 1400, 0, 1402, 0, 0, 1405, 0, 0, 0, 0, 0, 427, 0, 0, 1412, 0, 1415, 0, 442, 0, 448, 449, 1419, 0, 1422, 0, 0, 1400, 0, 1426, 0, 0, 0, 1429, 0, 0, 0, 482, 1433, 0, 0, 0, 490, 1400, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 750, 0, 750, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1252, 0, 1459, 0, 1400, 0, 1464, 0, 0, 0, 1469, 1471, 0, 0, 1474, 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 1488, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 1350, 576, 1362, 1362, 1370, 1370, 0, 1377, 1382, 1362, 1387, 1387, 0, 1392, 0, 397, 587, 0, 0, 0, 0, 0, 0, 593, 0, 0, 596, 597, 0, 405, 406, 601, 409, 0, 604, 0, 0, 0, 0, 0, 0, 613, 0, 0, 615, 0, 0, 0, 0, 621, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 701, 135, 137, 139, 139, 142, 0, 0, 148, 139, 151, 139, 148, 139, 148, 139, 148, 139, 148, 161, 163, 0, 185, 185, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 766, 0, 0, 0, 772, 0, 0, 0, 0, 0, 775, 0, 776, 0, 0, 0, 778, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 245, 0, 0, 0, 0, 273, 580, 0, 0, 0, 795, 583, 0, 797, 798, 799, 800, 0, 590, 591, 0, 0, 0, 594, 0, 0, 0, 806, 0, 600, 0, 0, 0, 0, 0, 0, 814, 0, 816, 0, 0, 614, 0, 820, 0, 822, 0, 824, 0, 0, 0, 0, 0, 837, 1302, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1303, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1304, 1305, 1289, 1290, 1291, 1292, 1293, 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, 888, 0, 890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 900, 0, 902, 0, 0, 0, 0, 0, 0, 908, 0, 0, 909, 0, 910, 0, 911, 0, 0, 0, 0, 0, 436, 0, 0, 0, 0, 450, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 137, 0, 953, 0, 0, 0, 0, 0, 502, 0, 958, 0, 0, 0, 801, 802, 0, 0, 0, 0, 804, 0, 0, 0, 520, 0, 0, 523, 0, 0, 0, 0, 0, 0, 530, 818, 819, 0, 0, 821, 0, 823, 0, 825, 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, 1000, 0, 0, 0, 0, 1006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1023, 0, 0, 0, 0, 0, 0, 1024, 0, 0, 1029, 1030, 1031, 1032, 1033, 1034, 0, 0, 1035, 0, 1039, 0, 0, 1043, 0, 0, 0, 0, 1045, 0, 1054, 1055, 1056, 0, 0, 0, 0, 0, 0, 0, 1063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 636, 0, 0, 0, 0, 0, 1090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 1108, 0, 0, 967, 968, 969, 970, 0, 972, 973, 0, 0, 0, 0, 0, 1120, 0, 1122, 980, 0, 982, 983, 0, 0, 0, 0, 0, 0, 987, 988, 0, 0, 1, 2, 1138, 1139, 0, 767, 3, 0, 0, 185, 0, 4, 0, 5, 6, 0, 0, 0, 0, 0, 0, 7, 0, 1155, 8, 0, 0, 0, 1166, 1167, 0, 9, 10, 0, 11, 0, 12, 0, 0, 0, 0, 13, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 18, 0, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 23, 24, 0, 0, 0, 0, 0, 0, 25, 26, 27, 0, 28, 29, 30, 31, 32, 33, 0, 34, 35, 36, 0, 1231, 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, 1095, 0, 0, 0, 0, 1098, 1099, 1249, 1100, 0, 0, 0, 0, 0, 1101, 0, 0, 1103, 0, 0, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 1317, 0, 1321, 1322, 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 892, 0, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1331, 0, 0, 0, 0, 0, 0, 1337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 927, 0, 0, 932, 0, 0, 1346, 0, 1360, 0, 0, 0, 942, 0, 0, 0, 0, 0, 699, 0, 0, 699, 0, 1396, 0, 0, 0, 0, 0, 0, 1189, 1190, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 0, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 0, 0, 1289, 1290, 1291, 1292, 1293, 0, 0, 0, 0, 0, 0, 0, 0, 1438, 1439, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1463, 0, 1466, 1467, 0, 0, 0, 0, 0, 0, 1476, 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, 1493, 0, 1078, 0, 0, 0, 0, 0, 0, 0, 0, 1083, 1500, 0, 0, 0, 1342, 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, 1398, 0, 0, 0, 0, 1399, 0, 0, 0, 0, 0, 1406, 0, 1408, 0, 0, 0, 1410, 1411, 0, 1413, 0, 1416, 0, 0, 1417, 1418, 0, 1420, 0, 1423, 0, 1424, 0, 0, 0, 0, 1428, 0, 1430, 1431, 0, 1432, 0, 1434, 1435, 892, 1436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1460, 1461, 0, 0, 1465, 0, 0, 1468, 1470, 0, 1472, 1473, 1475, 0, 1477, 0, 1479, 1480, 0, 0, 0, 1209, 0, 0, 1209, 0, 0, 0, 1209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 892, 1489, 0, 1490, 0, 1492, 0, 1494, 0, 0, 0, 0, 0, 0, 0, 1499, 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, 892, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1313 }; static const yytype_int16 yycheck[] = { 45, 573, 243, 352, 201, 228, 115, 52, 53, 0, 55, 221, 385, 58, 224, 60, 444, 62, 380, 764, 358, 66, 876, 68, 196, 70, 375, 72, 444, 74, 204, 76, 213, 78, 209, 80, 131, 132, 207, 0, 859, 805, 844, 88, 612, 421, 195, 543, 978, 916, 95, 698, 97, 1168, 99, 413, 101, 1085, 103, 676, 105, 133, 192, 844, 861, 0, 847, 864, 195, 0, 1021, 839, 244, 841, 201, 371, 844, 719, 4, 847, 716, 859, 850, 1353, 14, 853, 1325, 6, 36, 4, 1329, 1330, 17, 1332, 1333, 855, 1335, 1336, 844, 1338, 6, 847, 147, 859, 850, 1104, 1325, 0, 1378, 57, 1380, 17, 17, 4, 1091, 618, 1093, 1094, 50, 6, 7, 624, 36, 26, 1394, 12, 6, 362, 19, 17, 17, 57, 236, 17, 169, 61, 16, 50, 29, 27, 24, 1400, 74, 1402, 92, 93, 191, 153, 383, 221, 80, 81, 224, 742, 169, 744, 81, 746, 17, 748, 86, 750, 94, 22, 90, 95, 57, 1426, 56, 88, 61, 86, 1442, 1412, 1173, 90, 79, 82, 92, 93, 1419, 94, 88, 1402, 1400, 1455, 1402, 384, 17, 1405, 1429, 41, 1059, 41, 1433, 86, 998, 975, 1017, 90, 1177, 88, 374, 426, 249, 950, 169, 952, 88, 254, 1426, 256, 585, 169, 259, 260, 554, 998, 5, 975, 1001, 80, 81, 52, 1252, 161, 356, 163, 15, 1344, 1084, 79, 413, 1001, 17, 1003, 281, 282, 1105, 1007, 23, 286, 1193, 1459, 289, 169, 584, 623, 895, 353, 1180, 296, 998, 1013, 901, 1001, 301, 1003, 303, 555, 618, 1007, 830, 308, 505, 9, 201, 198, 885, 1025, 315, 567, 889, 17, 916, 320, 1143, 913, 774, 161, 325, 163, 327, 68, 17, 17, 331, 528, 73, 393, 1239, 5, 1241, 338, 7, 27, 341, 9, 11, 12, 13, 15, 5, 407, 349, 17, 14, 1109, 480, 17, 414, 7, 15, 98, 22, 11, 12, 13, 51, 52, 1250, 17, 54, 55, 428, 66, 22, 39, 1109, 1110, 1127, 72, 921, 7, 62, 1080, 925, 11, 1102, 3, 929, 930, 931, 17, 1112, 934, 935, 419, 62, 938, 422, 66, 42, 394, 25, 96, 859, 70, 399, 62, 63, 402, 26, 1109, 1110, 1111, 1112, 80, 81, 40, 719, 367, 80, 81, 70, 1310, 68, 1312, 49, 17, 1173, 96, 378, 379, 80, 81, 377, 95, 1181, 27, 1135, 387, 589, 1323, 439, 1243, 441, 1245, 31, 32, 396, 446, 363, 1184, 1328, 401, 98, 78, 404, 370, 1334, 456, 653, 562, 563, 65, 412, 55, 463, 32, 796, 54, 55, 17, 155, 599, 471, 1191, 22, 578, 579, 606, 156, 1252, 603, 562, 563, 618, 1184, 1185, 1186, 54, 55, 781, 489, 787, 788, 789, 7, 17, 495, 578, 579, 12, 558, 156, 33, 34, 874, 27, 1314, 7, 589, 812, 32, 11, 12, 13, 1213, 1233, 1234, 17, 17, 815, 17, 813, 1221, 905, 23, 24, 1069, 1070, 1071, 1072, 27, 19, 54, 55, 31, 32, 535, 595, 995, 154, 539, 29, 157, 158, 159, 160, 161, 162, 1248, 164, 1332, 609, 58, 17, 612, 7, 1338, 54, 55, 11, 12, 13, 620, 27, 639, 17, 561, 642, 1025, 564, 22, 566, 7, 7, 569, 570, 11, 11, 12, 13, 1175, 630, 577, 17, 1179, 7, 20, 49, 22, 11, 12, 13, 7, 588, 25, 17, 11, 12, 13, 14, 57, 7, 17, 598, 165, 166, 12, 602, 1151, 16, 605, 17, 27, 916, 17, 30, 31, 32, 70, 418, 1319, 616, 153, 154, 155, 424, 157, 158, 159, 160, 161, 120, 26, 122, 48, 124, 70, 126, 112, 54, 55, 56, 33, 117, 34, 119, 63, 121, 70, 123, 46, 125, 651, 154, 155, 70, 157, 158, 159, 7, 162, 719, 30, 11, 12, 13, 817, 17, 995, 17, 162, 21, 22, 21, 22, 167, 168, 169, 161, 136, 95, 138, 17, 140, 141, 20, 143, 22, 153, 688, 167, 168, 149, 150, 693, 152, 153, 154, 155, 156, 157, 158, 159, 160, 163, 162, 870, 164, 8, 1025, 0, 75, 76, 1170, 160, 161, 1173, 55, 1021, 375, 1177, 352, 70, 717, 1181, 917, 784, 184, 791, 186, 187, 188, 914, 190, 157, 158, 159, 59, 60, 738, 839, 740, 62, 63, 743, 808, 745, 840, 747, 841, 749, 54, 55, 752, 153, 154, 1059, 998, 157, 158, 159, 760, 80, 81, 763, 849, 765, 542, 852, 827, 1118, 770, 830, 831, 1256, 7, 83, 84, 1235, 11, 12, 13, 14, 995, 8, 17, 1335, 1336, 1245, 246, 1212, 248, 1216, 17, 586, 1252, 1093, 855, 255, 1177, 257, 1330, 1105, 27, 261, 262, 30, 31, 32, 1336, 267, 268, 269, 270, 1333, 272, 1488, 274, 275, 276, 1037, 1038, 1327, 1328, 1329, 1330, 0, 1332, 285, 1334, 54, 55, 56, 290, 291, 201, 293, 644, 70, 551, 1143, 866, 1019, 300, 129, 302, 36, 948, 949, 306, 307, 977, 978, 310, 761, 762, 313, 314, 916, 917, 129, 318, 319, 129, 1059, 1088, 1089, 57, 129, 326, 275, 61, 205, 330, 390, 790, 333, 129, 793, 981, 199, 71, 199, 340, 129, 342, 343, 344, 345, 346, 1193, 348, 807, 838, 154, 810, 129, 157, 158, 159, 160, 161, 92, 93, 164, 488, 585, 1412, 129, 158, 1415, 129, 202, 129, 1419, 205, 129, 1422, 408, 154, 210, 1426, 157, 158, 159, 195, 1010, 195, 1012, 617, 368, 369, 129, 991, 372, 373, 7, 8, 129, 753, 11, 12, 13, 14, 617, 1471, 17, 617, 386, 129, 129, 129, 951, 617, 129, 1013, 27, 395, 0, 30, 31, 32, 400, 340, 1469, 403, 0, 343, 1438, 1474, 153, 154, 155, 411, 157, 158, 159, 160, 161, 0, 437, 438, 345, 54, 55, 56, 965, 444, 445, -1, 447, -1, -1, -1, 451, 452, 453, -1, 455, 70, -1, 1059, -1, -1, -1, -1, -1, -1, 465, -1, 467, 468, -1, 470, -1, 472, 473, -1, 475, 476, -1, 478, 479, -1, 95, -1, 483, 484, 485, -1, -1, 488, -1, 1117, -1, -1, 493, 494, -1, -1, 497, 498, -1, -1, 501, -1, -1, 1105, -1, -1, -1, 508, 509, 1052, 1180, 512, 513, -1, 515, 516, -1, -1, -1, 1062, 10, -1, -1, -1, 525, 526, 527, -1, 18, -1, -1, 532, -1, 534, -1, 536, -1, 538, 28, -1, -1, 1143, -1, -1, 1087, 35, 380, -1, 38, -1, -1, -1, -1, -1, -1, -1, 390, -1, 392, -1, 1188, -1, 7, 53, 398, -1, 11, 12, 13, 14, -1, -1, 17, -1, 64, -1, -1, 67, -1, 69, 1250, -1, 27, 1126, -1, 30, 31, 32, -1, 1132, 17, 1134, 37, -1, 1137, 85, -1, 87, -1, 89, 27, 91, -1, 30, 31, 32, -1, 97, -1, 54, 55, 56, -1, -1, -1, -1, -1, 44, -1, 46, -1, -1, 1165, -1, -1, 70, -1, 54, 55, 56, -1, 632, -1, -1, 10, -1, -1, -1, 639, -1, -1, 642, 18, 644, -1, 646, -1, -1, -1, -1, 95, -1, 28, 1323, -1, -1, -1, -1, -1, 35, -1, -1, 1205, 664, 1207, -1, -1, -1, 669, 670, 671, 47, 673, 674, 675, 676, -1, 53, 679, -1, 1223, -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, 67, -1, 69, 695, 696, 697, 698, -1, 700, -1, 702, -1, 704, -1, 706, -1, -1, -1, 85, -1, 87, -1, 89, 548, 91, -1, -1, 552, -1, -1, 97, 154, 155, 725, 157, 158, 159, 160, 161, -1, -1, 164, -1, -1, -1, 737, 571, 739, -1, -1, 742, -1, 744, -1, 746, -1, 748, -1, 750, -1, -1, 753, -1, -1, 756, -1, -1, 592, -1, 761, 762, -1, 764, -1, -1, -1, 768, -1, -1, -1, -1, 773, -1, 9, -1, -1, 1320, -1, 1407, -1, 1409, 17, -1, 618, -1, 1414, -1, -1, -1, 624, -1, 27, 1421, 628, 30, 31, 32, -1, -1, -1, -1, 1404, -1, 39, -1, -1, 9, 43, 44, -1, 1354, -1, -1, 1357, 17, 1359, -1, 9, 54, 55, 56, -1, 1366, -1, 27, 17, -1, 30, 31, 32, 1374, -1, -1, -1, -1, 27, 39, -1, 30, 31, 32, 44, -1, -1, -1, -1, -1, 39, -1, -1, -1, 54, 55, 56, 154, 155, -1, 157, 158, 159, 160, 161, 54, 55, 56, -1, 16, 17, -1, -1, -1, -1, 874, -1, 876, -1, -1, 27, -1, -1, 30, 31, 32, 885, -1, -1, -1, 889, -1, 891, -1, 893, 894, 895, -1, -1, 898, -1, -1, 901, -1, -1, 904, 905, 54, 55, 56, -1, 99, 100, 101, 102, 103, 104, 105, 106, 107, 919, -1, 921, -1, 923, -1, 925, -1, -1, -1, 929, 930, 931, -1, -1, 934, 935, -1, 937, 938, -1, 940, -1, 1484, 943, -1, -1, 17, -1, 948, 949, 950, -1, 952, -1, 954, 955, 27, 17, 791, 30, 31, 32, -1, -1, 964, 965, 17, 27, -1, -1, 30, 31, 32, 44, -1, 808, 27, 37, -1, 30, 31, 32, -1, 54, 55, 56, -1, -1, -1, -1, -1, -1, -1, -1, 54, 55, 56, -1, -1, -1, -1, -1, -1, 54, 55, 56, 839, -1, 841, -1, -1, 844, -1, -1, 847, -1, -1, 850, -1, -1, 853, -1, -1, -1, 1024, -1, 859, -1, -1, -1, 1030, 1031, 1032, 1033, 867, -1, -1, 1037, 1038, -1, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, -1, 1055, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1065, 1066, 1067, -1, 1069, 1070, 1071, 1072, -1, 1074, -1, 1076, -1, -1, -1, 1080, -1, 1082, -1, 1084, -1, -1, -1, 1088, 1089, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, -1, 1131, -1, 1133, -1, 1135, 1136, -1, -1, -1, 1140, 1141, 975, -1, -1, 1145, 1146, -1, 1148, -1, -1, 1151, 985, 1153, -1, -1, -1, -1, -1, -1, -1, -1, 995, -1, -1, -1, -1, -1, 1001, 1169, 1003, -1, -1, -1, 1007, -1, -1, -1, -1, -1, -1, -1, 10, -1, 1017, -1, -1, -1, -1, 17, 18, -1, 1025, -1, -1, -1, -1, -1, -1, 27, 28, -1, 30, 31, 32, -1, -1, 35, 1208, -1, 1210, -1, 1212, 1213, 1214, 203, 1216, 1217, 206, 47, 208, 1221, 1222, 211, 1224, 53, 54, 55, 56, -1, 1230, 1231, -1, -1, -1, -1, 64, -1, -1, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1255, 1256, 85, -1, 87, -1, 89, -1, 91, -1, -1, -1, -1, -1, 97, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1123, -1, -1, -1, 1294, 1295, 1296, 1297, 1298, -1, -1, 1301, 1302, 1303, 1304, 1305, -1, -1, 1308, -1, 1310, -1, 1312, -1, 1314, -1, -1, -1, -1, 1319, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1170, -1, -1, 1173, -1, -1, -1, 1177, -1, -1, -1, 1181, -1, -1, 1351, -1, 1353, -1, -1, 1356, -1, -1, -1, -1, -1, 350, -1, -1, 1365, -1, 1367, -1, 357, -1, 359, 360, 1373, -1, 1375, -1, -1, 1378, -1, 1380, -1, -1, -1, 1384, -1, -1, -1, 376, 1389, -1, -1, -1, 381, 1394, -1, -1, -1, -1, -1, -1, -1, 1235, -1, -1, -1, -1, -1, -1, -1, 1243, -1, 1245, -1, -1, -1, -1, -1, -1, 1252, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1438, -1, 1440, -1, 1442, -1, 1444, -1, -1, -1, 1448, 1449, -1, -1, 1452, -1, -1, 1455, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 464, -1, -1, -1, -1, 1481, -1, -1, -1, -1, 474, -1, -1, -1, -1, -1, 1325, 481, 1327, 1328, 1329, 1330, -1, 1332, 1333, 1334, 1335, 1336, -1, 1338, -1, 309, 496, -1, -1, -1, -1, -1, -1, 503, -1, -1, 506, 507, -1, 323, 324, 511, 326, -1, 514, -1, -1, -1, -1, -1, -1, 521, -1, -1, 524, -1, -1, -1, -1, 529, -1, 531, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 553, -1, -1, -1, 557, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 572, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 583, 109, 110, 111, 112, 113, -1, -1, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, -1, 130, 131, 132, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 619, -1, -1, -1, -1, -1, 625, -1, -1, -1, 629, -1, -1, -1, -1, -1, 635, -1, 637, -1, -1, -1, 641, -1, -1, -1, -1, -1, 647, -1, -1, -1, -1, -1, -1, 654, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 479, -1, 192, -1, -1, -1, -1, 197, 487, -1, -1, -1, 677, 492, -1, 680, 681, 682, 683, -1, 499, 500, -1, -1, -1, 504, -1, -1, -1, 694, -1, 510, -1, -1, -1, -1, -1, -1, 703, -1, 705, -1, -1, 522, -1, 710, -1, 712, -1, 714, -1, -1, -1, -1, -1, 720, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 792, -1, 794, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 809, -1, 811, -1, -1, -1, -1, -1, -1, 818, -1, -1, 821, -1, 823, -1, 825, -1, -1, -1, -1, -1, 356, -1, -1, -1, -1, 361, 362, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, 383, -1, 860, -1, -1, -1, -1, -1, 391, -1, 868, -1, -1, -1, 686, 687, -1, -1, -1, -1, 692, -1, -1, -1, 407, -1, -1, 410, -1, -1, -1, -1, -1, -1, 417, 707, 708, -1, -1, 711, -1, 713, -1, 715, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 928, -1, -1, -1, -1, 933, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 945, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 956, -1, -1, -1, -1, -1, -1, 963, -1, -1, 966, 967, 968, 969, 970, 971, -1, -1, 974, -1, 976, -1, -1, 979, -1, -1, -1, -1, 984, -1, 986, 987, 988, -1, -1, -1, -1, -1, -1, -1, 996, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 544, 545, -1, -1, -1, -1, -1, 1026, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 565, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 582, -1, -1, -1, -1, -1, -1, 1064, -1, -1, 881, 882, 883, 884, -1, 886, 887, -1, -1, -1, -1, -1, 1079, -1, 1081, 896, -1, 898, 899, -1, -1, -1, -1, -1, -1, 906, 907, -1, -1, 4, 5, 1098, 1099, -1, 626, 10, -1, -1, 630, -1, 15, -1, 17, 18, -1, -1, -1, -1, -1, -1, 25, -1, 1119, 28, -1, -1, -1, 1124, 1125, -1, 35, 36, -1, 38, -1, 40, -1, -1, -1, -1, 45, -1, 47, -1, -1, 50, -1, -1, 53, -1, -1, -1, -1, -1, -1, -1, 61, -1, -1, 64, -1, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, 77, 78, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, -1, 96, 97, 98, -1, 1192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1036, -1, -1, -1, -1, 1041, 1042, 1229, 1044, -1, -1, -1, -1, -1, 1050, -1, -1, 1053, -1, -1, 1242, -1, -1, -1, -1, -1, -1, -1, -1, 1251, -1, 1253, 1254, -1, -1, -1, 783, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 803, -1, 805, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1299, -1, -1, -1, -1, -1, -1, 1306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 843, -1, -1, 846, -1, -1, 1324, -1, 1326, -1, -1, -1, 855, -1, -1, -1, -1, -1, 861, -1, -1, 864, -1, 1341, -1, -1, -1, -1, -1, -1, 1162, 1163, 114, 115, 116, 117, 118, 119, 120, -1, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, -1, -1, 148, 149, 150, 151, 152, -1, -1, -1, -1, -1, -1, -1, -1, 1397, 1398, -1, -1, -1, -1, -1, 1218, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1232, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1443, -1, 1445, 1446, -1, -1, -1, -1, -1, -1, 1453, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1486, -1, 1013, -1, -1, -1, -1, -1, -1, -1, -1, 1022, 1498, -1, -1, -1, 1316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1345, -1, -1, -1, -1, 1350, -1, -1, -1, -1, -1, 1356, -1, 1358, -1, -1, -1, 1362, 1363, -1, 1365, -1, 1367, -1, -1, 1370, 1371, -1, 1373, -1, 1375, -1, 1377, -1, -1, -1, -1, 1382, -1, 1384, 1385, -1, 1387, -1, 1389, 1390, 1102, 1392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1127, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1440, 1441, -1, -1, 1444, -1, -1, 1447, 1448, -1, 1450, 1451, 1452, -1, 1454, -1, 1456, 1457, -1, -1, -1, 1172, -1, -1, 1175, -1, -1, -1, 1179, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1191, 1481, -1, 1483, -1, 1485, -1, 1487, -1, -1, -1, -1, -1, -1, -1, 1495, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1233, 1234, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1247 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { 0, 4, 5, 10, 15, 17, 18, 25, 28, 35, 36, 38, 40, 45, 47, 50, 53, 61, 64, 66, 67, 68, 69, 77, 78, 85, 86, 87, 89, 90, 91, 92, 93, 94, 96, 97, 98, 171, 172, 173, 244, 246, 321, 322, 325, 327, 348, 349, 350, 351, 352, 353, 356, 357, 359, 361, 369, 370, 371, 380, 381, 392, 394, 405, 406, 407, 415, 416, 417, 418, 419, 420, 421, 423, 424, 425, 426, 427, 428, 429, 431, 453, 454, 455, 457, 459, 460, 466, 467, 473, 478, 481, 484, 487, 488, 491, 496, 498, 501, 505, 518, 522, 523, 528, 530, 531, 0, 165, 166, 208, 208, 208, 208, 208, 169, 210, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 153, 211, 247, 211, 328, 211, 355, 355, 211, 362, 6, 88, 365, 366, 211, 372, 355, 211, 395, 355, 372, 355, 372, 355, 372, 355, 372, 211, 468, 211, 492, 350, 351, 352, 353, 380, 406, 407, 418, 423, 427, 453, 466, 473, 478, 481, 484, 487, 497, 499, 500, 211, 506, 506, 506, 41, 510, 511, 210, 210, 210, 210, 210, 208, 210, 210, 210, 210, 210, 373, 210, 210, 422, 210, 422, 210, 210, 430, 210, 210, 167, 168, 209, 210, 210, 502, 503, 210, 519, 520, 210, 524, 525, 210, 208, 154, 155, 157, 158, 159, 160, 161, 174, 175, 176, 178, 180, 181, 184, 186, 187, 211, 248, 62, 329, 331, 19, 29, 57, 322, 327, 338, 339, 358, 370, 388, 389, 456, 458, 461, 463, 464, 465, 338, 358, 456, 458, 178, 363, 211, 367, 359, 382, 383, 385, 386, 387, 388, 389, 3, 26, 396, 397, 71, 325, 327, 338, 408, 416, 474, 475, 476, 477, 23, 24, 244, 374, 375, 377, 378, 209, 72, 420, 479, 480, 244, 374, 209, 73, 425, 482, 483, 209, 74, 429, 485, 486, 51, 52, 244, 432, 433, 435, 436, 209, 65, 469, 471, 488, 489, 530, 75, 76, 493, 494, 79, 507, 508, 510, 507, 510, 507, 510, 42, 512, 513, 173, 186, 156, 174, 185, 178, 210, 245, 210, 323, 326, 208, 208, 210, 208, 210, 208, 208, 210, 210, 210, 210, 210, 210, 210, 210, 373, 210, 208, 208, 210, 393, 208, 208, 210, 210, 210, 208, 210, 265, 210, 208, 210, 208, 210, 210, 208, 265, 210, 210, 210, 208, 210, 210, 208, 265, 265, 208, 210, 265, 208, 210, 208, 210, 208, 210, 503, 208, 210, 210, 520, 210, 210, 525, 210, 210, 208, 209, 179, 182, 183, 187, 186, 33, 34, 175, 211, 249, 250, 251, 253, 254, 209, 63, 329, 334, 335, 359, 209, 209, 211, 332, 328, 370, 58, 340, 341, 16, 274, 275, 277, 279, 280, 282, 354, 365, 211, 390, 390, 49, 438, 440, 438, 370, 354, 438, 438, 178, 364, 177, 179, 368, 209, 392, 390, 390, 9, 244, 399, 401, 209, 211, 398, 328, 416, 282, 409, 438, 390, 244, 244, 377, 211, 376, 244, 186, 379, 274, 438, 390, 244, 274, 438, 390, 274, 438, 390, 186, 190, 192, 211, 434, 432, 211, 437, 438, 390, 489, 186, 495, 211, 509, 512, 26, 442, 443, 512, 48, 532, 536, 173, 186, 210, 210, 208, 208, 323, 326, 210, 324, 208, 210, 210, 330, 210, 210, 210, 343, 208, 208, 209, 210, 210, 210, 210, 208, 210, 210, 209, 210, 210, 210, 360, 210, 265, 178, 209, 210, 210, 210, 265, 393, 208, 265, 210, 210, 208, 209, 210, 210, 265, 265, 210, 209, 265, 174, 209, 209, 210, 210, 265, 209, 210, 210, 209, 210, 210, 161, 163, 189, 191, 195, 198, 209, 265, 209, 210, 210, 210, 490, 174, 209, 209, 210, 210, 521, 208, 210, 210, 213, 208, 209, 250, 253, 211, 252, 211, 255, 244, 337, 175, 336, 334, 244, 333, 209, 329, 354, 59, 60, 344, 346, 209, 186, 342, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 283, 284, 285, 274, 338, 358, 338, 358, 274, 211, 441, 274, 354, 274, 274, 7, 11, 244, 266, 270, 209, 7, 12, 264, 269, 274, 338, 358, 338, 358, 211, 402, 209, 329, 409, 283, 274, 338, 416, 244, 186, 274, 420, 274, 425, 274, 429, 186, 193, 186, 199, 274, 461, 463, 464, 465, 472, 27, 30, 31, 32, 54, 55, 56, 214, 216, 217, 218, 219, 220, 221, 222, 225, 226, 227, 229, 230, 235, 237, 240, 241, 244, 256, 257, 489, 209, 186, 442, 39, 44, 214, 401, 445, 450, 451, 516, 517, 209, 211, 444, 46, 529, 214, 209, 506, 210, 209, 209, 324, 209, 324, 330, 210, 209, 208, 174, 209, 210, 210, 210, 210, 210, 210, 462, 210, 462, 209, 210, 209, 209, 209, 209, 265, 265, 208, 265, 208, 209, 210, 210, 384, 210, 384, 210, 210, 209, 210, 209, 210, 265, 265, 209, 265, 209, 265, 209, 265, 191, 189, 162, 164, 187, 188, 196, 199, 204, 205, 206, 209, 210, 210, 208, 210, 215, 208, 210, 215, 208, 210, 215, 208, 210, 215, 208, 210, 215, 208, 215, 208, 490, 210, 504, 208, 521, 521, 208, 213, 208, 210, 345, 208, 210, 533, 534, 253, 329, 211, 347, 186, 157, 158, 159, 286, 286, 286, 286, 370, 244, 365, 209, 370, 209, 442, 211, 272, 272, 370, 244, 264, 365, 391, 209, 370, 209, 177, 403, 329, 286, 416, 209, 209, 209, 209, 186, 194, 199, 186, 200, 188, 207, 392, 218, 244, 256, 221, 225, 244, 256, 211, 223, 229, 235, 240, 211, 228, 235, 240, 175, 231, 240, 175, 238, 190, 211, 242, 153, 212, 43, 214, 445, 450, 514, 515, 516, 209, 402, 402, 336, 244, 209, 392, 438, 501, 522, 526, 442, 507, 345, 265, 265, 265, 265, 462, 265, 265, 462, 210, 439, 210, 210, 384, 265, 210, 265, 265, 384, 210, 400, 265, 265, 191, 207, 188, 197, 204, 200, 210, 470, 215, 210, 215, 209, 210, 215, 210, 215, 215, 209, 210, 215, 215, 210, 215, 210, 210, 209, 504, 504, 210, 213, 208, 213, 210, 210, 209, 209, 210, 535, 210, 534, 209, 209, 209, 209, 209, 209, 209, 244, 445, 450, 209, 178, 273, 273, 209, 391, 209, 7, 11, 12, 13, 244, 262, 263, 404, 209, 209, 209, 186, 201, 202, 214, 275, 282, 209, 224, 226, 229, 235, 240, 235, 240, 240, 240, 175, 232, 175, 239, 190, 211, 243, 516, 173, 403, 211, 452, 210, 214, 401, 450, 537, 209, 210, 210, 210, 210, 265, 439, 439, 265, 265, 265, 265, 208, 265, 210, 174, 204, 208, 209, 210, 210, 210, 210, 215, 215, 215, 215, 210, 210, 236, 209, 213, 209, 210, 446, 345, 529, 208, 535, 535, 8, 288, 290, 287, 290, 288, 289, 290, 209, 209, 272, 287, 186, 203, 204, 229, 235, 240, 235, 240, 240, 240, 175, 233, 266, 209, 7, 11, 12, 13, 14, 70, 244, 447, 448, 449, 209, 209, 208, 402, 210, 278, 208, 210, 276, 208, 213, 210, 281, 208, 210, 210, 410, 204, 210, 210, 210, 215, 210, 265, 265, 208, 526, 210, 7, 11, 12, 13, 14, 70, 95, 214, 258, 259, 260, 261, 267, 271, 320, 211, 291, 214, 287, 320, 291, 214, 289, 291, 273, 37, 214, 320, 412, 413, 235, 240, 240, 240, 175, 234, 272, 209, 403, 208, 208, 210, 210, 276, 213, 210, 281, 210, 265, 210, 213, 210, 411, 208, 210, 209, 210, 268, 210, 527, 265, 272, 272, 214, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 148, 149, 150, 151, 152, 304, 113, 121, 146, 147, 292, 295, 304, 113, 121, 146, 147, 297, 300, 304, 209, 412, 214, 412, 211, 414, 240, 273, 209, 214, 516, 529, 209, 209, 210, 268, 210, 302, 210, 210, 210, 210, 209, 210, 210, 210, 210, 210, 209, 210, 411, 411, 345, 265, 213, 208, 273, 209, 22, 80, 81, 244, 267, 303, 309, 310, 311, 313, 314, 315, 316, 209, 20, 244, 259, 293, 305, 306, 309, 293, 21, 244, 259, 294, 307, 308, 309, 294, 244, 259, 296, 309, 311, 244, 298, 305, 309, 293, 244, 299, 307, 309, 299, 244, 301, 309, 311, 209, 526, 265, 265, 210, 312, 210, 312, 208, 210, 265, 208, 265, 208, 265, 265, 210, 265, 208, 210, 265, 265, 265, 210, 265, 208, 210, 265, 265, 312, 210, 312, 265, 210, 265, 265, 265, 210, 265, 265, 265, 312, 209, 209, 313, 315, 267, 186, 315, 175, 175, 259, 309, 175, 259, 259, 309, 175, 259, 259, 309, 309, 527, 210, 265, 265, 312, 209, 210, 265, 209, 209, 265, 210, 265, 210, 265, 265, 210, 265, 209, 265, 312, 265, 265, 315, 82, 317, 318, 259, 264, 259, 210, 265, 265, 208, 265, 209, 265, 317, 83, 84, 319, 265, 209 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { 0, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 173, 173, 174, 175, 175, 176, 177, 178, 178, 179, 179, 180, 181, 182, 183, 184, 184, 185, 185, 186, 186, 186, 186, 187, 187, 188, 189, 190, 190, 190, 191, 191, 192, 193, 194, 195, 196, 196, 197, 197, 198, 199, 200, 201, 201, 201, 202, 203, 204, 204, 205, 206, 206, 207, 207, 208, 208, 209, 209, 210, 211, 212, 213, 213, 214, 214, 214, 215, 215, 215, 216, 216, 217, 217, 217, 218, 218, 218, 218, 219, 220, 221, 222, 223, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 236, 237, 238, 239, 240, 241, 242, 242, 243, 243, 244, 245, 245, 245, 245, 245, 245, 245, 246, 247, 248, 248, 249, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 258, 259, 260, 261, 261, 261, 261, 261, 262, 263, 263, 263, 263, 264, 265, 265, 266, 267, 268, 268, 269, 269, 270, 270, 271, 271, 272, 273, 274, 274, 274, 274, 275, 276, 276, 276, 276, 277, 278, 278, 278, 278, 279, 280, 281, 281, 281, 282, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284, 284, 285, 285, 286, 286, 286, 287, 288, 289, 290, 291, 292, 292, 292, 292, 292, 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293, 294, 294, 294, 294, 294, 294, 294, 294, 295, 295, 296, 296, 296, 296, 296, 297, 297, 297, 297, 297, 297, 297, 297, 297, 298, 298, 298, 298, 299, 299, 299, 299, 300, 300, 301, 301, 301, 302, 302, 303, 303, 303, 303, 303, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 305, 306, 307, 308, 309, 310, 311, 311, 311, 311, 312, 312, 312, 312, 312, 313, 314, 315, 316, 317, 318, 319, 319, 320, 321, 321, 322, 323, 323, 324, 324, 325, 326, 326, 327, 328, 329, 330, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 342, 342, 343, 343, 344, 345, 345, 346, 346, 347, 348, 348, 348, 349, 349, 350, 351, 352, 353, 354, 354, 355, 356, 356, 357, 357, 358, 358, 359, 360, 360, 360, 361, 361, 362, 363, 364, 365, 366, 366, 367, 368, 368, 369, 369, 370, 371, 371, 371, 372, 373, 373, 373, 373, 373, 373, 373, 373, 374, 375, 376, 377, 378, 379, 379, 379, 380, 381, 381, 382, 382, 382, 382, 383, 384, 384, 384, 384, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 393, 393, 394, 395, 396, 397, 397, 398, 399, 400, 400, 400, 401, 402, 403, 404, 405, 405, 406, 407, 408, 408, 409, 410, 410, 410, 410, 410, 411, 411, 411, 412, 413, 414, 415, 415, 416, 417, 417, 417, 418, 419, 419, 420, 421, 421, 422, 422, 422, 422, 423, 424, 425, 426, 426, 427, 428, 429, 430, 430, 430, 430, 430, 431, 431, 432, 433, 434, 434, 435, 436, 437, 438, 439, 439, 439, 439, 440, 441, 442, 443, 444, 445, 446, 446, 446, 447, 448, 449, 449, 449, 449, 449, 449, 450, 451, 452, 453, 453, 453, 454, 454, 455, 456, 456, 457, 458, 458, 459, 460, 461, 462, 462, 462, 463, 464, 465, 466, 467, 468, 469, 470, 470, 470, 471, 472, 472, 472, 472, 473, 474, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 489, 489, 490, 490, 490, 491, 492, 493, 494, 494, 495, 495, 495, 496, 497, 497, 498, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 500, 500, 500, 500, 500, 500, 500, 501, 502, 502, 503, 504, 504, 504, 504, 504, 504, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 519, 520, 521, 521, 521, 521, 521, 522, 523, 524, 524, 525, 526, 526, 526, 526, 527, 527, 527, 527, 528, 529, 530, 531, 532, 533, 533, 534, 535, 535, 535, 535, 536, 537 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0, 1, 3, 1, 1, 2, 2, 2, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 6, 0, 1, 1, 1, 1, 3, 3, 1, 2, 1, 1, 1, 1, 3, 4, 2, 1, 1, 1, 1, 1, 3, 2, 0, 2, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 2, 1, 0, 3, 2, 1, 1, 3, 2, 1, 1, 3, 4, 3, 6, 1, 4, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 7, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 8, 4, 1, 1, 10, 1, 1, 1, 1, 1, 7, 0, 2, 1, 1, 1, 6, 1, 1, 1, 1, 1, 7, 0, 2, 4, 6, 2, 4, 2, 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 1, 1, 4, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 7, 0, 3, 7, 5, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 0, 3, 3, 2, 10, 0, 2, 4, 2, 10, 10, 0, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, 6, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 2, 4, 6, 4, 2, 4, 2, 2, 2, 4, 6, 4, 2, 4, 2, 2, 1, 3, 2, 1, 2, 4, 2, 1, 1, 3, 1, 3, 1, 3, 1, 3, 2, 4, 2, 2, 2, 4, 2, 2, 1, 3, 2, 2, 1, 0, 2, 2, 1, 2, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 4, 1, 4, 1, 2, 2, 4, 6, 0, 3, 3, 5, 7, 4, 1, 4, 1, 4, 1, 1, 1, 1, 1, 1, 7, 5, 3, 0, 3, 7, 3, 3, 1, 1, 5, 0, 3, 1, 1, 1, 4, 1, 1, 1, 5, 1, 4, 1, 1, 2, 3, 0, 2, 5, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 8, 10, 8, 10, 3, 1, 1, 1, 1, 1, 1, 1, 1, 9, 0, 3, 3, 1, 1, 1, 1, 1, 6, 1, 1, 1, 4, 2, 1, 3, 7, 1, 1, 1, 1, 0, 2, 2, 4, 3, 5, 5, 7, 4, 1, 1, 4, 1, 1, 2, 3, 10, 1, 1, 1, 1, 1, 1, 7, 0, 3, 5, 3, 3, 9, 7, 9, 1, 1, 1, 1, 7, 0, 3, 3, 1, 1, 5, 1, 1, 1, 7, 0, 3, 3, 1, 1, 1, 1, 1, 1, 8, 10, 1, 1, 10, 0, 3, 5, 3, 2, 0, 3, 2, 5, 1, 1, 1, 1, 5, 1, 1, 1, 8, 1, 1, 5, 1, 1, 0, 2, 3, 5, 8, 1, 5, 1, 1, 8, 1, 5, 0, 3, 5, 3, 3, 1, 1, 4, 1, 1, 1, 4, 1, 1, 7, 0, 3, 3, 3, 1, 1, 5, 1, 1, 7, 0, 3, 3, 1, 5, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 10, 1, 1, 10, 10, 7, 0, 3, 3, 9, 7, 9, 10, 1, 1, 9, 0, 2, 2, 1, 1, 1, 1, 1, 10, 1, 1, 7, 9, 1, 10, 7, 1, 10, 7, 1, 10, 7, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3, 2, 1, 1, 4, 1, 1, 1, 2, 3, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 3, 1, 8, 0, 3, 3, 3, 5, 3, 2, 1, 1, 4, 1, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 1, 6, 0, 3, 3, 3, 2, 1, 4, 3, 1, 16, 1, 1, 1, 1, 0, 6, 3, 2, 1, 1, 9, 1, 4, 3, 1, 4, 0, 3, 3, 2, 1, 7 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (context, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, context); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, pj_wkt2_parse_context *context) { FILE *yyoutput = yyo; YYUSE (yyoutput); YYUSE (context); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, pj_wkt2_parse_context *context) { YYFPRINTF (yyo, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyo, yytype, yyvaluep, context); YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, pj_wkt2_parse_context *context) { int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[+yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)] , context); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule, context); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ static YYPTRDIFF_T yystrlen (const char *yystr) { YYPTRDIFF_T yylen; for (yylen = 0; yystr && yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; else goto append; append: default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (yyres) return (YYPTRDIFF_T)(yystpcpy (yyres, yystr) - yyres); else return yystrlen (yystr); } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, yy_state_t *yyssp, int yytoken) { enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat: reported tokens (one for the "unexpected", one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Actual size of YYARG. */ int yycount = 0; /* Cumulated lengths of YYARG. */ YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[+*yyssp]; YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYPTRDIFF_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { /* Don't count the "%s"s in the final size, but reserve room for the terminator. */ YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else return 2; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { ++yyp; ++yyformat; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, pj_wkt2_parse_context *context) { YYUSE (yyvaluep); YYUSE (context); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse (pj_wkt2_parse_context *context) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE (static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ /* int yynerrs; */ yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yy_state_t yyssa[YYINITDEPTH]; yy_state_t *yyss; yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYPTRDIFF_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; /* yynerrs = 0; */ yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST (yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYPTRDIFF_T yysize = (YYPTRDIFF_T)(yyssp - yyss + 1); # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF (*yyssp), &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yy_state_t *yyss1 = yyss; union yyalloc *yyptr = YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF ((stderr, "Stack size increased to %ld\n", YY_CAST (long, yystacksize))); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (&yylval, context); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { /* ++yynerrs; */ #if ! YYERROR_VERBOSE yyerror (context, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (context, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, context); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ #if 0 yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ #endif yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, context); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (context, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, context); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[+*yyssp], yyvsp, context); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } proj-9.6.0/src/wkt2_generated_parser.h000664 001754 001755 00000013356 14764566077 017652 0ustar00e012349e012349000000 000000 /* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Undocumented macros, especially those whose name start with YY_, are private implementation details. Do not rely on them. */ #ifndef YY_PJ_WKT2_WKT2_GENERATED_PARSER_H_INCLUDED # define YY_PJ_WKT2_WKT2_GENERATED_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int pj_wkt2_debug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { END = 0, T_PROJECTION = 258, T_DATUM = 259, T_SPHEROID = 260, T_PRIMEM = 261, T_UNIT = 262, T_AXIS = 263, T_PARAMETER = 264, T_GEODCRS = 265, T_LENGTHUNIT = 266, T_ANGLEUNIT = 267, T_SCALEUNIT = 268, T_TIMEUNIT = 269, T_ELLIPSOID = 270, T_CS = 271, T_ID = 272, T_PROJCRS = 273, T_BASEGEODCRS = 274, T_MERIDIAN = 275, T_BEARING = 276, T_ORDER = 277, T_ANCHOR = 278, T_ANCHOREPOCH = 279, T_CONVERSION = 280, T_METHOD = 281, T_REMARK = 282, T_GEOGCRS = 283, T_BASEGEOGCRS = 284, T_SCOPE = 285, T_AREA = 286, T_BBOX = 287, T_CITATION = 288, T_URI = 289, T_VERTCRS = 290, T_VDATUM = 291, T_GEOIDMODEL = 292, T_COMPOUNDCRS = 293, T_PARAMETERFILE = 294, T_COORDINATEOPERATION = 295, T_SOURCECRS = 296, T_TARGETCRS = 297, T_INTERPOLATIONCRS = 298, T_OPERATIONACCURACY = 299, T_CONCATENATEDOPERATION = 300, T_STEP = 301, T_BOUNDCRS = 302, T_ABRIDGEDTRANSFORMATION = 303, T_DERIVINGCONVERSION = 304, T_TDATUM = 305, T_CALENDAR = 306, T_TIMEORIGIN = 307, T_TIMECRS = 308, T_VERTICALEXTENT = 309, T_TIMEEXTENT = 310, T_USAGE = 311, T_DYNAMIC = 312, T_FRAMEEPOCH = 313, T_MODEL = 314, T_VELOCITYGRID = 315, T_ENSEMBLE = 316, T_MEMBER = 317, T_ENSEMBLEACCURACY = 318, T_DERIVEDPROJCRS = 319, T_BASEPROJCRS = 320, T_EDATUM = 321, T_ENGCRS = 322, T_PDATUM = 323, T_PARAMETRICCRS = 324, T_PARAMETRICUNIT = 325, T_BASEVERTCRS = 326, T_BASEENGCRS = 327, T_BASEPARAMCRS = 328, T_BASETIMECRS = 329, T_EPOCH = 330, T_COORDEPOCH = 331, T_COORDINATEMETADATA = 332, T_POINTMOTIONOPERATION = 333, T_VERSION = 334, T_AXISMINVALUE = 335, T_AXISMAXVALUE = 336, T_RANGEMEANING = 337, T_exact = 338, T_wraparound = 339, T_GEODETICCRS = 340, T_GEODETICDATUM = 341, T_PROJECTEDCRS = 342, T_PRIMEMERIDIAN = 343, T_GEOGRAPHICCRS = 344, T_TRF = 345, T_VERTICALCRS = 346, T_VERTICALDATUM = 347, T_VRF = 348, T_TIMEDATUM = 349, T_TEMPORALQUANTITY = 350, T_ENGINEERINGDATUM = 351, T_ENGINEERINGCRS = 352, T_PARAMETRICDATUM = 353, T_AFFINE = 354, T_CARTESIAN = 355, T_CYLINDRICAL = 356, T_ELLIPSOIDAL = 357, T_LINEAR = 358, T_PARAMETRIC = 359, T_POLAR = 360, T_SPHERICAL = 361, T_VERTICAL = 362, T_TEMPORAL = 363, T_TEMPORALCOUNT = 364, T_TEMPORALMEASURE = 365, T_ORDINAL = 366, T_TEMPORALDATETIME = 367, T_NORTH = 368, T_NORTHNORTHEAST = 369, T_NORTHEAST = 370, T_EASTNORTHEAST = 371, T_EAST = 372, T_EASTSOUTHEAST = 373, T_SOUTHEAST = 374, T_SOUTHSOUTHEAST = 375, T_SOUTH = 376, T_SOUTHSOUTHWEST = 377, T_SOUTHWEST = 378, T_WESTSOUTHWEST = 379, T_WEST = 380, T_WESTNORTHWEST = 381, T_NORTHWEST = 382, T_NORTHNORTHWEST = 383, T_UP = 384, T_DOWN = 385, T_GEOCENTRICX = 386, T_GEOCENTRICY = 387, T_GEOCENTRICZ = 388, T_COLUMNPOSITIVE = 389, T_COLUMNNEGATIVE = 390, T_ROWPOSITIVE = 391, T_ROWNEGATIVE = 392, T_DISPLAYRIGHT = 393, T_DISPLAYLEFT = 394, T_DISPLAYUP = 395, T_DISPLAYDOWN = 396, T_FORWARD = 397, T_AFT = 398, T_PORT = 399, T_STARBOARD = 400, T_CLOCKWISE = 401, T_COUNTERCLOCKWISE = 402, T_TOWARDS = 403, T_AWAYFROM = 404, T_FUTURE = 405, T_PAST = 406, T_UNSPECIFIED = 407, T_STRING = 408, T_UNSIGNED_INTEGER_DIFFERENT_ONE_TWO_THREE = 409 }; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int pj_wkt2_parse (pj_wkt2_parse_context *context); #endif /* !YY_PJ_WKT2_WKT2_GENERATED_PARSER_H_INCLUDED */ proj-9.6.0/src/wkt2_grammar.y000664 001754 001755 00000177624 14764566077 016020 0ustar00e012349e012349000000 000000 %{ /****************************************************************************** * Project: PROJ * Purpose: WKT2 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2018 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 "wkt2_parser.h" %} %define api.pure %define parse.error verbose %require "3.0" %parse-param {pj_wkt2_parse_context *context} %lex-param {pj_wkt2_parse_context *context} /* From WKT1 */ %token T_PROJECTION "PROJECTION" %token T_DATUM "DATUM" %token T_SPHEROID "SPHEROID" %token T_PRIMEM "PRIMEM" %token T_UNIT "UNIT" %token T_AXIS "AXIS" %token T_PARAMETER "PARAMETER" /* WKT2 preferred */ %token T_GEODCRS "GEODCRS"; %token T_LENGTHUNIT "LENGTHUNIT"; %token T_ANGLEUNIT "ANGLEUNIT"; %token T_SCALEUNIT "SCALEUNIT"; %token T_TIMEUNIT "TIMEUNIT"; %token T_ELLIPSOID "ELLIPSOID"; %token T_CS "CS"; %token T_ID "ID"; %token T_PROJCRS "PROJCRS"; %token T_BASEGEODCRS "BASEGEODCRS"; %token T_MERIDIAN "MERIDIAN"; %token T_BEARING "BEARING"; %token T_ORDER "ORDER"; %token T_ANCHOR "ANCHOR"; %token T_ANCHOREPOCH "ANCHOREPOCH"; %token T_CONVERSION "CONVERSION"; %token T_METHOD "METHOD"; %token T_REMARK "REMARK"; %token T_GEOGCRS "GEOGCRS"; %token T_BASEGEOGCRS "BASEGEOGCRS"; %token T_SCOPE "SCOPE"; %token T_AREA "AREA"; %token T_BBOX "BBOX"; %token T_CITATION "CITATION"; %token T_URI "URI"; %token T_VERTCRS "VERTCRS"; %token T_VDATUM "VDATUM"; %token T_GEOIDMODEL "GEOIDMODEL"; %token T_COMPOUNDCRS "COMPOUNDCRS"; %token T_PARAMETERFILE "PARAMETERFILE"; %token T_COORDINATEOPERATION "COORDINATEOPERATION"; %token T_SOURCECRS "SOURCECRS"; %token T_TARGETCRS "TARGETCRS"; %token T_INTERPOLATIONCRS "INTERPOLATIONCRS"; %token T_OPERATIONACCURACY "OPERATIONACCURACY"; %token T_CONCATENATEDOPERATION "CONCATENATEDOPERATION"; %token T_STEP "STEP"; %token T_BOUNDCRS "BOUNDCRS"; %token T_ABRIDGEDTRANSFORMATION "ABRIDGEDTRANSFORMATION"; %token T_DERIVINGCONVERSION "DERIVINGCONVERSION"; %token T_TDATUM "TDATUM"; %token T_CALENDAR "CALENDAR"; %token T_TIMEORIGIN "TIMEORIGIN"; %token T_TIMECRS "TIMECRS"; %token T_VERTICALEXTENT "VERTICALEXTENT"; %token T_TIMEEXTENT "TIMEEXTENT"; %token T_USAGE "USAGE"; %token T_DYNAMIC "DYNAMIC"; %token T_FRAMEEPOCH "FRAMEEPOCH"; %token T_MODEL "MODEL"; %token T_VELOCITYGRID "VELOCITYGRID"; %token T_ENSEMBLE "ENSEMBLE"; %token T_MEMBER "MEMBER"; %token T_ENSEMBLEACCURACY "ENSEMBLEACCURACY"; %token T_DERIVEDPROJCRS "DERIVEDPROJCRS"; %token T_BASEPROJCRS "BASEPROJCRS"; %token T_EDATUM "EDATUM"; %token T_ENGCRS "ENGCRS"; %token T_PDATUM "PDATUM"; %token T_PARAMETRICCRS "PARAMETRICCRS"; %token T_PARAMETRICUNIT "PARAMETRICUNIT"; %token T_BASEVERTCRS "BASEVERTCRS"; %token T_BASEENGCRS "BASEENGCRS"; %token T_BASEPARAMCRS "BASEPARAMCRS"; %token T_BASETIMECRS "BASETIMECRS"; %token T_EPOCH "EPOCH" %token T_COORDEPOCH "COORDEPOCH" %token T_COORDINATEMETADATA "COORDINATEMETADATA" %token T_POINTMOTIONOPERATION "POINTMOTIONOPERATION" %token T_VERSION "VERSION" %token T_AXISMINVALUE "AXISMINVALUE" %token T_AXISMAXVALUE "AXISMAXVALUE" %token T_RANGEMEANING "RANGEMEANING" %token T_exact "exact" %token T_wraparound "wraparound" /* WKT2 alternate (longer or shorter) */ %token T_GEODETICCRS "GEODETICCRS"; %token T_GEODETICDATUM "GEODETICDATUM"; %token T_PROJECTEDCRS "PROJECTEDCRS"; %token T_PRIMEMERIDIAN "PRIMEMERIDIAN"; %token T_GEOGRAPHICCRS "GEOGRAPHICCRS"; %token T_TRF "TRF"; %token T_VERTICALCRS "VERTICALCRS"; %token T_VERTICALDATUM "VERTICALDATUM"; %token T_VRF "VRF"; %token T_TIMEDATUM "TIMEDATUM"; %token T_TEMPORALQUANTITY "TEMPORALQUANTITY"; %token T_ENGINEERINGDATUM "ENGINEERINGDATUM"; %token T_ENGINEERINGCRS "ENGINEERINGCRS"; %token T_PARAMETRICDATUM "PARAMETRICDATUM"; /* CS types */ %token T_AFFINE "affine"; %token T_CARTESIAN "Cartesian"; %token T_CYLINDRICAL "cylindrical"; %token T_ELLIPSOIDAL "ellipsoidal"; %token T_LINEAR "linear"; %token T_PARAMETRIC "parametric"; %token T_POLAR "polar"; %token T_SPHERICAL "spherical"; %token T_VERTICAL "vertical"; %token T_TEMPORAL "temporal"; // WKT2_2015 only %token T_TEMPORALCOUNT "temporalCount"; %token T_TEMPORALMEASURE "temporalMeasure"; %token T_ORDINAL "ordinal"; %token T_TEMPORALDATETIME "temporalDateTime"; /* Axis directions */ %token T_NORTH "north"; %token T_NORTHNORTHEAST "northNorthEast"; %token T_NORTHEAST "northEast"; %token T_EASTNORTHEAST "eastNorthEast"; %token T_EAST "east"; %token T_EASTSOUTHEAST "eastSouthEast"; %token T_SOUTHEAST "southEast"; %token T_SOUTHSOUTHEAST "southSouthEast"; %token T_SOUTH "south"; %token T_SOUTHSOUTHWEST "southSouthWest"; %token T_SOUTHWEST "southWest"; %token T_WESTSOUTHWEST "westSouthWest"; %token T_WEST "west"; %token T_WESTNORTHWEST "westNorthWest"; %token T_NORTHWEST "northWest"; %token T_NORTHNORTHWEST "northNorthWest"; %token T_UP "up"; %token T_DOWN "down"; %token T_GEOCENTRICX "geocentricX"; %token T_GEOCENTRICY "geocentricY"; %token T_GEOCENTRICZ "geocentricZ"; %token T_COLUMNPOSITIVE "columnPositive"; %token T_COLUMNNEGATIVE "columnNegative"; %token T_ROWPOSITIVE "rowPositive"; %token T_ROWNEGATIVE "rowNegative"; %token T_DISPLAYRIGHT "displayRight"; %token T_DISPLAYLEFT "displayLeft"; %token T_DISPLAYUP "displayUp"; %token T_DISPLAYDOWN "displayDown"; %token T_FORWARD "forward"; %token T_AFT "aft"; %token T_PORT "port"; %token T_STARBOARD "starboard"; %token T_CLOCKWISE "clockwise"; %token T_COUNTERCLOCKWISE "counterClockwise"; %token T_TOWARDS "towards"; %token T_AWAYFROM "awayFrom"; %token T_FUTURE "future"; %token T_PAST "part"; %token T_UNSPECIFIED "unspecified"; %token T_STRING "string" %token T_UNSIGNED_INTEGER_DIFFERENT_ONE_TWO_THREE "unsigned integer" %token END 0 "end of string" %% /* Derived from BNF grammar in OGC 18-010r3 (WKT2:2018), with a few back additions from GC 12-063r5 (WKT2:2015) */ input: identifier | ellipsoid | datum | crs | bound_crs | coordinate_metadata | coordinate_operation | point_motion_operation | concatenated_operation | map_projection datum: geodetic_reference_frame_with_opt_pm | datum_ensemble | vertical_reference_frame | engineering_datum | parametric_datum | temporal_datum crs: single_crs | compound_crs // Basic characters period: '.' // Numbers number: signed_numeric_literal_with_sign | unsigned_numeric_literal signed_numeric_literal_with_sign: sign unsigned_numeric_literal signed_numeric_literal: opt_sign unsigned_numeric_literal unsigned_numeric_literal: exact_numeric_literal | approximate_numeric_literal opt_sign: | sign approximate_numeric_literal: mantissa 'E' exponent mantissa: exact_numeric_literal exponent: signed_integer signed_integer: opt_sign unsigned_integer exact_numeric_literal: unsigned_integer opt_period_unsigned_integer | period unsigned_integer opt_period_unsigned_integer: | period unsigned_integer unsigned_integer: '1' | '2' | '3' | T_UNSIGNED_INTEGER_DIFFERENT_ONE_TWO_THREE sign: '+' | '-' // Date and time colon: ':' hyphen: '-' // Significantly modified to avoid shift-reduce ambiguities for Bison datetime: year opt_24_hour_clock | year hyphen unsigned_integer opt_24_hour_clock | year hyphen month hyphen day opt_24_hour_clock opt_24_hour_clock: | _24_hour_clock year: unsigned_integer month: unsigned_integer day: unsigned_integer _24_hour_clock: time_designator hour opt_colon_minute_colon_second_time_zone_designator opt_colon_minute_colon_second_time_zone_designator: colon minute opt_colon_second_time_zone_designator | time_zone_designator opt_colon_second_time_zone_designator: colon second_time_zone_designator | time_zone_designator time_designator: 'T' hour: unsigned_integer minute: unsigned_integer second_time_zone_designator: seconds_integer period time_zone_designator | seconds_integer period seconds_fraction time_zone_designator | seconds_integer time_zone_designator seconds_integer: unsigned_integer seconds_fraction: unsigned_integer time_zone_designator: utc_designator | local_time_zone_designator utc_designator: 'Z' local_time_zone_designator: sign hour opt_colon_minute | hour opt_colon_minute opt_colon_minute: | colon minute // CRS WKT characters left_delimiter: '[' | '(' right_delimiter: ']' | ')' wkt_separator: ',' quoted_latin_text: T_STRING quoted_unicode_text: T_STRING // Scope, extent, identifier and remark opt_separator_scope_extent_identifier_remark: | wkt_separator no_opt_separator_scope_extent_identifier_remark no_opt_separator_scope_extent_identifier_remark: scope_extent_opt_identifier_list_opt_remark | identifier opt_identifier_list_remark | remark opt_identifier_list_remark: | wkt_separator identifier opt_identifier_list_remark | wkt_separator remark scope_extent_opt_identifier_list_opt_remark: scope_extent_opt_identifier_list_remark | usage_list_opt_identifier_list_remark // WKT2-2015 way scope_extent_opt_identifier_list_remark: scope wkt_separator extent_opt_identifier_list_remark | scope opt_identifier_list_remark | extent_opt_identifier_list_remark // WKT2-2018 way usage_list_opt_identifier_list_remark: usage | usage wkt_separator remark | usage wkt_separator identifier opt_identifier_list_remark | usage wkt_separator usage_list_opt_identifier_list_remark usage: usage_keyword left_delimiter scope wkt_separator extent right_delimiter usage_keyword: T_USAGE scope: scope_keyword left_delimiter scope_text_description right_delimiter scope_keyword: T_SCOPE scope_text_description: quoted_latin_text extent: area_description | geographic_bounding_box | vertical_extent | temporal_extent | area_description wkt_separator geographic_bounding_box | area_description wkt_separator vertical_extent | area_description wkt_separator temporal_extent | geographic_bounding_box wkt_separator vertical_extent | geographic_bounding_box wkt_separator temporal_extent | vertical_extent wkt_separator temporal_extent | area_description wkt_separator geographic_bounding_box wkt_separator vertical_extent | area_description wkt_separator geographic_bounding_box wkt_separator temporal_extent | area_description wkt_separator vertical_extent wkt_separator temporal_extent | geographic_bounding_box wkt_separator vertical_extent wkt_separator temporal_extent | area_description wkt_separator geographic_bounding_box wkt_separator vertical_extent wkt_separator temporal_extent extent_opt_identifier_list_remark: area_description opt_identifier_list_remark | geographic_bounding_box opt_identifier_list_remark | vertical_extent opt_identifier_list_remark | temporal_extent opt_identifier_list_remark | area_description wkt_separator geographic_bounding_box opt_identifier_list_remark | area_description wkt_separator vertical_extent opt_identifier_list_remark | area_description wkt_separator temporal_extent opt_identifier_list_remark | geographic_bounding_box wkt_separator vertical_extent opt_identifier_list_remark | geographic_bounding_box wkt_separator temporal_extent opt_identifier_list_remark | vertical_extent wkt_separator temporal_extent opt_identifier_list_remark | area_description wkt_separator geographic_bounding_box wkt_separator vertical_extent opt_identifier_list_remark | area_description wkt_separator geographic_bounding_box wkt_separator temporal_extent opt_identifier_list_remark | area_description wkt_separator vertical_extent wkt_separator temporal_extent opt_identifier_list_remark | geographic_bounding_box wkt_separator vertical_extent wkt_separator temporal_extent opt_identifier_list_remark | area_description wkt_separator geographic_bounding_box wkt_separator vertical_extent wkt_separator temporal_extent opt_identifier_list_remark // Area description area_description: area_description_keyword left_delimiter area_text_description right_delimiter area_description_keyword: T_AREA area_text_description: quoted_latin_text // Geographic bounding box geographic_bounding_box: geographic_bounding_box_keyword left_delimiter lower_left_latitude wkt_separator lower_left_longitude wkt_separator upper_right_latitude wkt_separator upper_right_longitude right_delimiter geographic_bounding_box_keyword: T_BBOX lower_left_latitude: number lower_left_longitude: number upper_right_latitude: number upper_right_longitude: number // Vertical extent vertical_extent: vertical_extent_keyword left_delimiter vertical_extent_minimum_height wkt_separator vertical_extent_maximum_height opt_separator_length_unit right_delimiter opt_separator_length_unit: | wkt_separator length_unit vertical_extent_keyword: T_VERTICALEXTENT vertical_extent_minimum_height: number vertical_extent_maximum_height: number // Temporal extent temporal_extent: temporal_extent_keyword left_delimiter temporal_extent_start wkt_separator temporal_extent_end right_delimiter temporal_extent_keyword: T_TIMEEXTENT temporal_extent_start: datetime | quoted_latin_text temporal_extent_end: datetime | quoted_latin_text // Identifier identifier: identifier_keyword left_delimiter authority_name wkt_separator authority_unique_identifier opt_version_authority_citation_uri right_delimiter opt_version_authority_citation_uri: | wkt_separator version | wkt_separator version wkt_separator authority_citation | wkt_separator version wkt_separator authority_citation wkt_separator id_uri | wkt_separator authority_citation | wkt_separator authority_citation wkt_separator id_uri | wkt_separator id_uri identifier_keyword: T_ID authority_name: quoted_latin_text authority_unique_identifier: number | quoted_latin_text version: number | quoted_latin_text authority_citation: citation_keyword left_delimiter citation right_delimiter citation_keyword: T_CITATION citation: quoted_latin_text id_uri: uri_keyword left_delimiter uri right_delimiter uri_keyword: T_URI uri: quoted_latin_text // Remark remark: remark_keyword left_delimiter quoted_unicode_text right_delimiter remark_keyword: T_REMARK // Unit unit: spatial_unit | time_unit //spatial_unit: angle_unit | length_unit | parametric_unit | scale_unit spatial_unit: angle_or_length_or_parametric_or_scale_unit angle_or_length_or_parametric_or_scale_unit: angle_or_length_or_parametric_or_scale_unit_keyword left_delimiter unit_name wkt_separator conversion_factor opt_separator_identifier_list right_delimiter angle_or_length_or_parametric_or_scale_unit_keyword: T_ANGLEUNIT | T_LENGTHUNIT | T_PARAMETRICUNIT | T_SCALEUNIT | T_UNIT angle_or_length_or_scale_unit: angle_or_length_or_scale_unit_keyword left_delimiter unit_name wkt_separator conversion_factor opt_separator_identifier_list right_delimiter angle_or_length_or_scale_unit_keyword: T_ANGLEUNIT | T_LENGTHUNIT | T_SCALEUNIT | T_UNIT angle_unit: angle_unit_keyword left_delimiter unit_name wkt_separator conversion_factor opt_separator_identifier_list right_delimiter opt_separator_identifier_list: | wkt_separator identifier opt_separator_identifier_list length_unit: length_unit_keyword left_delimiter unit_name wkt_separator conversion_factor opt_separator_identifier_list right_delimiter /* parametric_unit: parametric_unit_keyword left_delimiter unit_name wkt_separator conversion_factor opt_separator_identifier_list right_delimiter */ /* scale_unit: scale_unit_keyword left_delimiter unit_name wkt_separator conversion_factor opt_separator_identifier_list right_delimiter */ time_unit: time_unit_keyword left_delimiter unit_name opt_separator_conversion_factor_identifier_list right_delimiter opt_separator_conversion_factor_identifier_list: | wkt_separator conversion_factor opt_separator_identifier_list angle_unit_keyword: T_ANGLEUNIT | T_UNIT length_unit_keyword: T_LENGTHUNIT | T_UNIT // parametric_unit_keyword: T_PARAMETRICUNIT // scale_unit_keyword: T_SCALEUNIT | T_UNIT time_unit_keyword: T_TIMEUNIT | T_TEMPORALQUANTITY unit_name: quoted_latin_text conversion_factor: unsigned_numeric_literal // Coordinate system // coordinate_system: spatial_cs | temporalcountmeasure_cs | ordinatedatetime_cs coordinate_system_scope_extent_identifier_remark: spatial_cs_scope_extent_identifier_remark | wkt2015temporal_cs_scope_extent_identifier_remark | temporalcountmeasure_cs_scope_extent_identifier_remark | ordinaldatetime_cs_scope_extent_identifier_remark spatial_cs_scope_extent_identifier_remark: cs_keyword left_delimiter spatial_cs_type wkt_separator dimension opt_separator_identifier_list right_delimiter wkt_separator spatial_axis opt_separator_spatial_axis_list_opt_separator_cs_unit_scope_extent_identifier_remark opt_separator_spatial_axis_list_opt_separator_cs_unit_scope_extent_identifier_remark: | wkt_separator cs_unit opt_separator_scope_extent_identifier_remark | wkt_separator spatial_axis opt_separator_spatial_axis_list_opt_separator_cs_unit_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark wkt2015temporal_cs_scope_extent_identifier_remark: cs_keyword left_delimiter T_TEMPORAL wkt_separator dimension opt_separator_identifier_list right_delimiter wkt_separator temporalcountmeasure_axis opt_separator_cs_unit_scope_extent_identifier_remark opt_separator_cs_unit_scope_extent_identifier_remark: | wkt_separator cs_unit | wkt_separator cs_unit wkt_separator no_opt_separator_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark temporalcountmeasure_cs_scope_extent_identifier_remark: cs_keyword left_delimiter temporalcountmeasure_cs_type wkt_separator dimension opt_separator_identifier_list right_delimiter wkt_separator temporalcountmeasure_axis opt_separator_scope_extent_identifier_remark ordinaldatetime_cs_scope_extent_identifier_remark: cs_keyword left_delimiter ordinaldatetime_cs_type wkt_separator dimension opt_separator_identifier_list right_delimiter wkt_separator ordinaldatetime_axis opt_separator_ordinaldatetime_axis_list_scope_extent_identifier_remark opt_separator_ordinaldatetime_axis_list_scope_extent_identifier_remark: | wkt_separator ordinaldatetime_axis opt_separator_ordinaldatetime_axis_list_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark cs_keyword: T_CS spatial_cs_type: T_AFFINE | T_CARTESIAN | T_CYLINDRICAL | T_ELLIPSOIDAL | T_LINEAR | T_PARAMETRIC | T_POLAR | T_SPHERICAL | T_VERTICAL temporalcountmeasure_cs_type: T_TEMPORALCOUNT | T_TEMPORALMEASURE ordinaldatetime_cs_type: T_ORDINAL | T_TEMPORALDATETIME dimension: '1' | '2' | '3' spatial_axis: axis_keyword left_delimiter axis_name_abbrev wkt_separator axis_direction_opt_axis_order_spatial_unit_identifier_list right_delimiter temporalcountmeasure_axis: axis_keyword left_delimiter axis_name_abbrev wkt_separator axis_direction_except_n_s_cw_ccw opt_separator_axis_time_unit_identifier_list right_delimiter ordinaldatetime_axis: axis_keyword left_delimiter axis_name_abbrev wkt_separator axis_direction_opt_axis_order_identifier_list right_delimiter axis_keyword: T_AXIS // Approximation of { | | } axis_name_abbrev: quoted_latin_text axis_direction_opt_axis_order_spatial_unit_identifier_list: axis_direction_except_n_s_cw_ccw_opt_axis_spatial_unit_identifier_list | T_NORTH | T_NORTH wkt_separator north_south_options_spatial_unit | T_SOUTH | T_SOUTH wkt_separator north_south_options_spatial_unit | T_CLOCKWISE | T_CLOCKWISE wkt_separator clockwise_counter_clockwise_options_spatial_unit | T_COUNTERCLOCKWISE | T_COUNTERCLOCKWISE wkt_separator clockwise_counter_clockwise_options_spatial_unit north_south_options_spatial_unit: identifier opt_separator_identifier_list | meridian wkt_separator axis_order opt_separator_identifier_list | meridian wkt_separator axis_order wkt_separator spatial_unit opt_separator_identifier_list | meridian wkt_separator spatial_unit opt_separator_identifier_list | meridian opt_separator_identifier_list | axis_order wkt_separator spatial_unit opt_separator_identifier_list | axis_order opt_separator_identifier_list | spatial_unit opt_separator_identifier_list clockwise_counter_clockwise_options_spatial_unit: identifier opt_separator_identifier_list | bearing wkt_separator axis_order opt_separator_identifier_list | bearing wkt_separator axis_order wkt_separator spatial_unit opt_separator_identifier_list | bearing wkt_separator spatial_unit opt_separator_identifier_list | bearing opt_separator_identifier_list | axis_order wkt_separator spatial_unit opt_separator_identifier_list | axis_order opt_separator_identifier_list | spatial_unit opt_separator_identifier_list axis_direction_except_n_s_cw_ccw_opt_axis_spatial_unit_identifier_list: axis_direction_except_n_s_cw_ccw | axis_direction_except_n_s_cw_ccw wkt_separator axis_direction_except_n_s_cw_ccw_opt_axis_spatial_unit_identifier_list_options axis_direction_except_n_s_cw_ccw_opt_axis_spatial_unit_identifier_list_options: identifier opt_separator_identifier_list | axis_range_opt_separator_identifier_list | axis_order opt_separator_axis_range_opt_separator_identifier_list | axis_order wkt_separator spatial_unit opt_separator_axis_range_opt_separator_identifier_list | spatial_unit opt_separator_axis_range_opt_separator_identifier_list axis_direction_opt_axis_order_identifier_list: axis_direction_except_n_s_cw_ccw_opt_axis_identifier_list | T_NORTH | T_NORTH wkt_separator north_south_options | T_SOUTH | T_SOUTH wkt_separator north_south_options_spatial_unit | T_CLOCKWISE | T_CLOCKWISE wkt_separator clockwise_counter_clockwise_options | T_COUNTERCLOCKWISE | T_COUNTERCLOCKWISE wkt_separator clockwise_counter_clockwise_options north_south_options: identifier opt_separator_identifier_list | meridian wkt_separator axis_order opt_separator_identifier_list | meridian opt_separator_identifier_list | axis_order opt_separator_identifier_list clockwise_counter_clockwise_options: identifier opt_separator_identifier_list | bearing wkt_separator axis_order opt_separator_identifier_list | bearing opt_separator_identifier_list | axis_order opt_separator_identifier_list axis_direction_except_n_s_cw_ccw_opt_axis_identifier_list: axis_direction_except_n_s_cw_ccw | axis_direction_except_n_s_cw_ccw wkt_separator axis_direction_except_n_s_cw_ccw_opt_axis_identifier_list_options axis_direction_except_n_s_cw_ccw_opt_axis_identifier_list_options: identifier opt_separator_identifier_list | axis_order opt_separator_axis_range_opt_separator_identifier_list | axis_range_opt_separator_identifier_list opt_separator_axis_time_unit_identifier_list: | wkt_separator axis_direction_except_n_s_cw_ccw_opt_axis_time_unit_identifier_list_options axis_direction_except_n_s_cw_ccw_opt_axis_time_unit_identifier_list_options: identifier opt_separator_identifier_list | axis_range_opt_separator_identifier_list | axis_order opt_separator_axis_range_opt_separator_identifier_list | axis_order wkt_separator time_unit opt_separator_axis_range_opt_separator_identifier_list | time_unit opt_separator_axis_range_opt_separator_identifier_list axis_direction_except_n_s_cw_ccw: T_NORTHNORTHEAST | T_NORTHEAST | T_EASTNORTHEAST | T_EAST | T_EASTSOUTHEAST | T_SOUTHEAST | T_SOUTHSOUTHEAST | T_SOUTHSOUTHWEST | T_SOUTHWEST | T_WESTSOUTHWEST | T_WEST | T_WESTNORTHWEST | T_NORTHWEST | T_NORTHNORTHWEST | T_UP | T_DOWN | T_GEOCENTRICX | T_GEOCENTRICY | T_GEOCENTRICZ | T_COLUMNPOSITIVE | T_COLUMNNEGATIVE | T_ROWPOSITIVE | T_ROWNEGATIVE | T_DISPLAYRIGHT | T_DISPLAYLEFT | T_DISPLAYUP | T_DISPLAYDOWN | T_FORWARD | T_AFT | T_PORT | T_STARBOARD | T_TOWARDS | T_AWAYFROM | T_FUTURE | T_PAST | T_UNSPECIFIED meridian: meridian_keyword left_delimiter number wkt_separator angle_unit right_delimiter meridian_keyword: T_MERIDIAN bearing: bearing_keyword left_delimiter number right_delimiter bearing_keyword: T_BEARING axis_order: axis_order_keyword left_delimiter unsigned_integer right_delimiter axis_order_keyword: T_ORDER axis_range_opt_separator_identifier_list: axis_minimum_value opt_separator_identifier_list | axis_maximum_value opt_separator_identifier_list | axis_minimum_value wkt_separator axis_maximum_value opt_separator_identifier_list | axis_minimum_value wkt_separator axis_maximum_value wkt_separator axis_range_meaning opt_separator_identifier_list opt_separator_axis_range_opt_separator_identifier_list: | wkt_separator axis_minimum_value opt_separator_identifier_list | wkt_separator axis_maximum_value opt_separator_identifier_list | wkt_separator axis_minimum_value wkt_separator axis_maximum_value opt_separator_identifier_list | wkt_separator axis_minimum_value wkt_separator axis_maximum_value wkt_separator axis_range_meaning opt_separator_identifier_list axis_minimum_value: axis_minimum_value_keyword left_delimiter number right_delimiter axis_minimum_value_keyword: T_AXISMINVALUE axis_maximum_value: axis_maximum_value_keyword left_delimiter number right_delimiter axis_maximum_value_keyword: T_AXISMAXVALUE axis_range_meaning: axis_range_meaning_keyword left_delimiter axis_range_meaning_value right_delimiter axis_range_meaning_keyword: T_RANGEMEANING axis_range_meaning_value: T_exact | T_wraparound cs_unit: unit /* ellipsoidal_2D_coordinate_system: cs_keyword left_delimiter ellipsoidal_2D_cs_type wkt_separator ellipsoidal_2D_dimension opt_separator_identifier_list right_delimiter separator_spatial_axis_list opt_separator_cs_unit ellipsoidal_2D_cs_type: T_ELLIPSOIDAL ellipsoidal_2D_dimension: '2' */ // Datum ensemble datum_ensemble: geodetic_datum_ensemble_without_pm | vertical_datum_ensemble geodetic_datum_ensemble_without_pm: datum_ensemble_keyword left_delimiter datum_ensemble_name wkt_separator datum_ensemble_member datum_ensemble_member_list_ellipsoid_accuracy_identifier_list right_delimiter datum_ensemble_member_list_ellipsoid_accuracy_identifier_list: wkt_separator ellipsoid wkt_separator datum_ensemble_accuracy opt_separator_datum_ensemble_identifier_list | wkt_separator datum_ensemble_member datum_ensemble_member_list_ellipsoid_accuracy_identifier_list opt_separator_datum_ensemble_identifier_list: | wkt_separator datum_ensemble_identifier opt_separator_datum_ensemble_identifier_list vertical_datum_ensemble: datum_ensemble_keyword left_delimiter datum_ensemble_name wkt_separator datum_ensemble_member datum_ensemble_member_list_accuracy_identifier_list right_delimiter datum_ensemble_member_list_accuracy_identifier_list: wkt_separator datum_ensemble_accuracy opt_separator_datum_ensemble_identifier_list | wkt_separator datum_ensemble_member datum_ensemble_member_list_accuracy_identifier_list datum_ensemble_keyword: T_ENSEMBLE datum_ensemble_name: quoted_latin_text datum_ensemble_member: datum_ensemble_member_keyword left_delimiter datum_ensemble_member_name opt_datum_ensemble_member_identifier_list right_delimiter opt_datum_ensemble_member_identifier_list: | wkt_separator datum_ensemble_member_identifier opt_datum_ensemble_member_identifier_list datum_ensemble_member_keyword: T_MEMBER datum_ensemble_member_name: quoted_latin_text datum_ensemble_member_identifier: identifier datum_ensemble_accuracy: datum_ensemble_accuracy_keyword left_delimiter accuracy right_delimiter datum_ensemble_accuracy_keyword: T_ENSEMBLEACCURACY accuracy: number datum_ensemble_identifier: identifier // Dynamic coordinate reference systems dynamic_crs: dynamic_crs_keyword left_delimiter frame_reference_epoch opt_separator_deformation_model_id right_delimiter dynamic_crs_keyword: T_DYNAMIC frame_reference_epoch: frame_reference_epoch_keyword left_delimiter reference_epoch right_delimiter frame_reference_epoch_keyword: T_FRAMEEPOCH reference_epoch: unsigned_integer | unsigned_integer period | unsigned_integer period unsigned_integer opt_separator_deformation_model_id: | wkt_separator deformation_model_id deformation_model_id: deformation_model_id_keyword left_delimiter deformation_model_name opt_separator_identifier right_delimiter opt_separator_identifier: | wkt_separator identifier deformation_model_id_keyword: T_MODEL | T_VELOCITYGRID deformation_model_name: quoted_latin_text // Geodetic CRS geodetic_crs: static_geodetic_crs | dynamic_geodetic_crs | geographic_crs geographic_crs: static_geographic_crs | dynamic_geographic_crs static_geodetic_crs: geodetic_crs_keyword left_delimiter crs_name wkt_separator geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm wkt_separator opt_prime_meridian_coordinate_system_scope_extent_identifier_remark right_delimiter dynamic_geodetic_crs: geodetic_crs_keyword left_delimiter crs_name wkt_separator dynamic_crs wkt_separator geodetic_reference_frame_without_pm wkt_separator opt_prime_meridian_coordinate_system_scope_extent_identifier_remark right_delimiter static_geographic_crs: geographic_crs_keyword left_delimiter crs_name wkt_separator geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm wkt_separator opt_prime_meridian_coordinate_system_scope_extent_identifier_remark right_delimiter dynamic_geographic_crs: geographic_crs_keyword left_delimiter crs_name wkt_separator dynamic_crs wkt_separator geodetic_reference_frame_without_pm wkt_separator opt_prime_meridian_coordinate_system_scope_extent_identifier_remark right_delimiter opt_prime_meridian_coordinate_system_scope_extent_identifier_remark: prime_meridian wkt_separator coordinate_system_scope_extent_identifier_remark | coordinate_system_scope_extent_identifier_remark crs_name: quoted_latin_text geodetic_crs_keyword: T_GEODCRS | T_GEODETICCRS geographic_crs_keyword: T_GEOGCRS | T_GEOGRAPHICCRS geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm: geodetic_reference_frame_without_pm | geodetic_datum_ensemble_without_pm // Ellipsoid ellipsoid: ellipsoid_keyword left_delimiter ellipsoid_name wkt_separator semi_major_axis wkt_separator inverse_flattening opt_separator_length_unit_identifier_list right_delimiter opt_separator_length_unit_identifier_list: | wkt_separator length_unit opt_separator_identifier_list | wkt_separator identifier opt_separator_identifier_list ellipsoid_keyword: T_ELLIPSOID | T_SPHEROID ellipsoid_name: quoted_latin_text semi_major_axis: unsigned_numeric_literal inverse_flattening: unsigned_numeric_literal // Prime meridian prime_meridian: prime_meridian_keyword left_delimiter prime_meridian_name wkt_separator irm_longitude_opt_separator_identifier_list right_delimiter prime_meridian_keyword: T_PRIMEM | T_PRIMEMERIDIAN prime_meridian_name: quoted_latin_text irm_longitude_opt_separator_identifier_list: signed_numeric_literal wkt_separator angle_unit opt_separator_identifier_list | signed_numeric_literal opt_separator_identifier_list // Geodetic reference frame geodetic_reference_frame_with_opt_pm: geodetic_reference_frame_without_pm | geodetic_reference_frame_without_pm wkt_separator prime_meridian geodetic_reference_frame_without_pm: geodetic_reference_frame_keyword left_delimiter datum_name wkt_separator ellipsoid opt_separator_datum_anchor_anchor_epoch_identifier_list right_delimiter geodetic_reference_frame_keyword: T_DATUM | T_TRF | T_GEODETICDATUM datum_name: quoted_latin_text opt_separator_datum_anchor_anchor_epoch_identifier_list: | wkt_separator datum_anchor | wkt_separator datum_anchor_epoch | wkt_separator datum_anchor wkt_separator datum_anchor_epoch | wkt_separator identifier opt_separator_identifier_list | wkt_separator datum_anchor_epoch wkt_separator identifier opt_separator_identifier_list | wkt_separator datum_anchor wkt_separator identifier opt_separator_identifier_list | wkt_separator datum_anchor wkt_separator datum_anchor_epoch wkt_separator identifier opt_separator_identifier_list datum_anchor: datum_anchor_keyword left_delimiter datum_anchor_description right_delimiter datum_anchor_keyword: T_ANCHOR datum_anchor_description: quoted_latin_text datum_anchor_epoch: datum_anchor_epoch_keyword left_delimiter anchor_epoch right_delimiter datum_anchor_epoch_keyword: T_ANCHOREPOCH anchor_epoch: unsigned_integer | unsigned_integer period | unsigned_integer period unsigned_integer // Projected CRS projected_crs: projected_crs_keyword left_delimiter crs_name wkt_separator base_geodetic_crs wkt_separator map_projection wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter projected_crs_keyword: T_PROJCRS | T_PROJECTEDCRS // Base CRS base_geodetic_crs: base_static_geodetic_crs | base_dynamic_geodetic_crs | base_static_geographic_crs | base_dynamic_geographic_crs base_static_geodetic_crs: base_geodetic_crs_keyword left_delimiter base_crs_name wkt_separator geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm opt_separator_pm_ellipsoidal_cs_unit_opt_separator_identifier_list right_delimiter opt_separator_pm_ellipsoidal_cs_unit_opt_separator_identifier_list: | wkt_separator prime_meridian opt_separator_identifier_list | wkt_separator prime_meridian wkt_separator ellipsoidal_cs_unit opt_separator_identifier_list | wkt_separator ellipsoidal_cs_unit opt_separator_identifier_list | wkt_separator identifier opt_separator_identifier_list base_dynamic_geodetic_crs: base_geodetic_crs_keyword left_delimiter base_crs_name wkt_separator dynamic_crs wkt_separator geodetic_reference_frame_without_pm opt_separator_pm_ellipsoidal_cs_unit_opt_separator_identifier_list right_delimiter base_static_geographic_crs: base_geographic_crs_keyword left_delimiter base_crs_name wkt_separator geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm opt_separator_pm_ellipsoidal_cs_unit_opt_separator_identifier_list right_delimiter base_dynamic_geographic_crs: base_geographic_crs_keyword left_delimiter base_crs_name wkt_separator dynamic_crs wkt_separator geodetic_reference_frame_without_pm opt_separator_pm_ellipsoidal_cs_unit_opt_separator_identifier_list right_delimiter base_geodetic_crs_keyword: T_BASEGEODCRS base_geographic_crs_keyword: T_BASEGEOGCRS base_crs_name: quoted_latin_text ellipsoidal_cs_unit: angle_unit // Map projection map_projection: map_projection_keyword left_delimiter map_projection_name wkt_separator map_projection_method opt_separator_parameter_list_identifier_list right_delimiter opt_separator_parameter_list_identifier_list: | wkt_separator identifier opt_separator_identifier_list | wkt_separator map_projection_parameter opt_separator_parameter_list_identifier_list map_projection_keyword: T_CONVERSION map_projection_name: quoted_latin_text map_projection_method: map_projection_method_keyword left_delimiter map_projection_method_name opt_separator_identifier_list right_delimiter map_projection_method_keyword: T_METHOD | T_PROJECTION map_projection_method_name: quoted_latin_text map_projection_parameter: parameter_keyword left_delimiter parameter_name wkt_separator parameter_value opt_separator_param_unit_identifier_list right_delimiter opt_separator_param_unit_identifier_list: | wkt_separator identifier opt_separator_identifier_list | wkt_separator map_projection_parameter_unit opt_separator_identifier_list parameter_keyword: T_PARAMETER parameter_name: quoted_latin_text parameter_value: signed_numeric_literal map_projection_parameter_unit: angle_or_length_or_scale_unit // Vertical CRS vertical_crs: static_vertical_crs | dynamic_vertical_crs static_vertical_crs: vertical_crs_keyword left_delimiter crs_name wkt_separator vertical_reference_frame_or_vertical_datum_ensemble wkt_separator vertical_cs_opt_geoid_model_id_scope_extent_identifier_remark right_delimiter dynamic_vertical_crs: vertical_crs_keyword left_delimiter crs_name wkt_separator dynamic_crs wkt_separator vertical_reference_frame wkt_separator vertical_cs_opt_geoid_model_id_scope_extent_identifier_remark right_delimiter vertical_reference_frame_or_vertical_datum_ensemble: vertical_reference_frame | vertical_datum_ensemble vertical_cs_opt_geoid_model_id_scope_extent_identifier_remark: cs_keyword left_delimiter spatial_cs_type wkt_separator dimension opt_separator_identifier_list right_delimiter wkt_separator spatial_axis opt_separator_cs_unit_opt_geoid_model_id_scope_extent_identifier_remark opt_separator_cs_unit_opt_geoid_model_id_scope_extent_identifier_remark: | wkt_separator cs_unit opt_separator_scope_extent_identifier_remark | wkt_separator cs_unit wkt_separator geoid_model_id opt_geoid_model_id_list_opt_separator_scope_extent_identifier_remark | wkt_separator geoid_model_id opt_geoid_model_id_list_opt_separator_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark opt_geoid_model_id_list_opt_separator_scope_extent_identifier_remark: | wkt_separator geoid_model_id opt_geoid_model_id_list_opt_separator_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark geoid_model_id: geoid_model_keyword left_delimiter geoid_model_name opt_separator_identifier right_delimiter geoid_model_keyword: T_GEOIDMODEL geoid_model_name: quoted_latin_text vertical_crs_keyword: T_VERTCRS | T_VERTICALCRS // Vertical reference frame vertical_reference_frame: vertical_reference_frame_keyword left_delimiter datum_name opt_separator_datum_anchor_anchor_epoch_identifier_list right_delimiter vertical_reference_frame_keyword: T_VDATUM | T_VRF | T_VERTICALDATUM // Engineering CRS engineering_crs: engineering_crs_keyword left_delimiter crs_name wkt_separator engineering_datum wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter engineering_crs_keyword: T_ENGCRS | T_ENGINEERINGCRS engineering_datum: engineering_datum_keyword left_delimiter datum_name opt_separator_datum_anchor_identifier_list right_delimiter engineering_datum_keyword: T_EDATUM | T_ENGINEERINGDATUM opt_separator_datum_anchor_identifier_list: | wkt_separator datum_anchor | wkt_separator identifier opt_separator_identifier_list | wkt_separator datum_anchor wkt_separator identifier opt_separator_identifier_list // Parametric CRS parametric_crs: parametric_crs_keyword left_delimiter crs_name wkt_separator parametric_datum wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter parametric_crs_keyword: T_PARAMETRICCRS parametric_datum: parametric_datum_keyword left_delimiter datum_name opt_separator_datum_anchor_identifier_list right_delimiter parametric_datum_keyword: T_PDATUM | T_PARAMETRICDATUM // Temporal CRS temporal_crs: temporal_crs_keyword left_delimiter crs_name wkt_separator temporal_datum wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter temporal_crs_keyword: T_TIMECRS temporal_datum: temporal_datum_keyword left_delimiter datum_name opt_separator_temporal_datum_end right_delimiter opt_separator_temporal_datum_end: | wkt_separator calendar opt_separator_identifier_list | wkt_separator calendar wkt_separator temporal_origin opt_separator_identifier_list | wkt_separator temporal_origin opt_separator_identifier_list | wkt_separator identifier opt_separator_identifier_list temporal_datum_keyword: T_TDATUM | T_TIMEDATUM temporal_origin: temporal_origin_keyword left_delimiter temporal_origin_description right_delimiter temporal_origin_keyword: T_TIMEORIGIN temporal_origin_description: datetime | quoted_latin_text calendar: calendar_keyword left_delimiter calendar_identifier right_delimiter calendar_keyword: T_CALENDAR calendar_identifier: quoted_latin_text // Deriving conversion deriving_conversion: deriving_conversion_keyword left_delimiter deriving_conversion_name wkt_separator operation_method opt_separator_parameter_or_parameter_file_identifier_list right_delimiter opt_separator_parameter_or_parameter_file_identifier_list: | wkt_separator operation_parameter opt_separator_parameter_or_parameter_file_identifier_list | wkt_separator operation_parameter_file opt_separator_parameter_or_parameter_file_identifier_list | wkt_separator identifier opt_separator_identifier_list deriving_conversion_keyword: T_DERIVINGCONVERSION deriving_conversion_name: quoted_latin_text // Derived CRS conversion method operation_method: operation_method_keyword left_delimiter operation_method_name opt_separator_identifier right_delimiter operation_method_keyword: T_METHOD operation_method_name: quoted_latin_text // Derived CRS conversion parameter operation_parameter: parameter_keyword left_delimiter parameter_name wkt_separator parameter_value opt_separator_parameter_unit_identifier_list right_delimiter opt_separator_parameter_unit_identifier_list: | wkt_separator parameter_unit opt_separator_identifier_list | wkt_separator identifier opt_separator_identifier_list parameter_unit: length_or_angle_or_scale_or_time_or_parametric_unit // Approximate definition: conversion_factor should be optional only for a timeunit (but not easy to detect if UNIT keyword is used!) length_or_angle_or_scale_or_time_or_parametric_unit: length_or_angle_or_scale_or_time_or_parametric_unit_keyword left_delimiter unit_name opt_separator_conversion_factor_identifier_list right_delimiter length_or_angle_or_scale_or_time_or_parametric_unit_keyword: T_LENGTHUNIT | T_ANGLEUNIT | T_SCALEUNIT | T_TIMEUNIT | T_PARAMETRICUNIT | T_UNIT // Derived CRS conversion parameter file operation_parameter_file: parameter_file_keyword left_delimiter parameter_name wkt_separator parameter_file_name opt_separator_identifier right_delimiter parameter_file_keyword: T_PARAMETERFILE parameter_file_name: quoted_latin_text // Derived geodetic CRS and derived geographic CRS derived_geodetic_crs: derived_static_geod_crs | derived_dynamic_geod_crs | derived_geographic_crs derived_geographic_crs: derived_static_geog_crs | derived_dynamic_geog_crs derived_static_geod_crs: geodetic_crs_keyword left_delimiter crs_name wkt_separator base_static_geod_crs_or_base_static_geog_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter base_static_geod_crs_or_base_static_geog_crs: base_static_geod_crs | base_static_geog_crs derived_dynamic_geod_crs: geodetic_crs_keyword left_delimiter crs_name wkt_separator base_dynamic_geod_crs_or_base_dynamic_geog_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter base_dynamic_geod_crs_or_base_dynamic_geog_crs: base_dynamic_geod_crs | base_dynamic_geog_crs derived_static_geog_crs: geographic_crs_keyword left_delimiter crs_name wkt_separator base_static_geod_crs_or_base_static_geog_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter derived_dynamic_geog_crs: geographic_crs_keyword left_delimiter crs_name wkt_separator base_dynamic_geod_crs_or_base_dynamic_geog_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter base_static_geod_crs: base_geodetic_crs_keyword left_delimiter base_crs_name wkt_separator geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm opt_separator_pm_opt_separator_identifier_list right_delimiter opt_separator_pm_opt_separator_identifier_list: | wkt_separator prime_meridian opt_separator_identifier_list | wkt_separator identifier opt_separator_identifier_list base_dynamic_geod_crs: base_geodetic_crs_keyword left_delimiter base_crs_name wkt_separator dynamic_crs wkt_separator geodetic_reference_frame_without_pm opt_separator_pm_opt_separator_identifier_list right_delimiter base_static_geog_crs: base_geographic_crs_keyword left_delimiter base_crs_name wkt_separator geodetic_reference_frame_or_geodetic_datum_ensemble_without_pm opt_separator_pm_opt_separator_identifier_list right_delimiter base_dynamic_geog_crs: base_geographic_crs_keyword left_delimiter base_crs_name wkt_separator dynamic_crs wkt_separator geodetic_reference_frame_without_pm opt_separator_pm_opt_separator_identifier_list right_delimiter // Derived projected CRS derived_projected_crs: derived_projected_crs_keyword left_delimiter derived_crs_name wkt_separator base_projected_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter derived_projected_crs_keyword: T_DERIVEDPROJCRS derived_crs_name: quoted_latin_text base_projected_crs: base_projected_crs_keyword left_delimiter base_crs_name wkt_separator base_geodetic_geographic_crs wkt_separator map_projection // Current WKT grammar (as of WKT2 18-010r11) does not allow a // BASEPROJCRS.CS node, but there are situations where this is // ambiguous and we want to allow one. // Cf WKTParser::Private::buildProjectedCRS() for more details // Otherwise this should only be a opt_separator_identifier_list base_projected_crs_opt_separator_cs_identifier right_delimiter base_projected_crs_opt_separator_cs_identifier: | wkt_separator spatial_cs_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark base_projected_crs_keyword: T_BASEPROJCRS base_geodetic_geographic_crs: base_static_geod_crs | base_dynamic_geod_crs | base_static_geog_crs | base_dynamic_geog_crs // Derived vertical CRS derived_vertical_crs: vertical_crs_keyword left_delimiter crs_name wkt_separator base_vertical_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter base_vertical_crs: base_static_vertical_crs | base_dynamic_vertical_crs base_static_vertical_crs: base_vertical_crs_keyword left_delimiter base_crs_name wkt_separator vertical_reference_frame opt_separator_identifier_list right_delimiter base_dynamic_vertical_crs: base_vertical_crs_keyword left_delimiter base_crs_name wkt_separator dynamic_crs wkt_separator vertical_reference_frame opt_separator_identifier_list right_delimiter base_vertical_crs_keyword: T_BASEVERTCRS // Derived engineering CRS derived_engineering_crs: engineering_crs_keyword left_delimiter crs_name wkt_separator base_engineering_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter base_engineering_crs: base_engineering_crs_keyword left_delimiter base_crs_name wkt_separator engineering_datum opt_separator_identifier_list right_delimiter base_engineering_crs_keyword: T_BASEENGCRS // Derived parametric CRS derived_parametric_crs: parametric_crs_keyword left_delimiter crs_name wkt_separator base_parametric_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter base_parametric_crs: base_parametric_crs_keyword left_delimiter base_crs_name wkt_separator parametric_datum opt_separator_identifier_list right_delimiter base_parametric_crs_keyword: T_BASEPARAMCRS // Derived temporal CRS derived_temporal_crs: temporal_crs_keyword left_delimiter crs_name wkt_separator base_temporal_crs wkt_separator deriving_conversion wkt_separator coordinate_system_scope_extent_identifier_remark right_delimiter base_temporal_crs: base_temporal_crs_keyword left_delimiter base_crs_name wkt_separator temporal_datum opt_separator_identifier_list right_delimiter base_temporal_crs_keyword: T_BASETIMECRS // Compound CRS compound_crs: compound_crs_keyword left_delimiter compound_crs_name wkt_separator single_crs_or_bound_crs wkt_separator single_crs_or_bound_crs opt_wkt_separator_single_crs_list_opt_separator_scope_extent_identifier_remark right_delimiter single_crs: geodetic_crs | derived_geodetic_crs | projected_crs | derived_projected_crs | vertical_crs | derived_vertical_crs | engineering_crs | derived_engineering_crs | parametric_crs | derived_parametric_crs | temporal_crs | derived_temporal_crs // PROJ extension single_crs_or_bound_crs: single_crs | bound_crs opt_wkt_separator_single_crs_list_opt_separator_scope_extent_identifier_remark: | wkt_separator single_crs_or_bound_crs opt_wkt_separator_single_crs_list_opt_separator_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark compound_crs_keyword: T_COMPOUNDCRS compound_crs_name: quoted_latin_text // coordinate epoch and coordinate metadata metadata_coordinate_epoch: coordinate_epoch_keyword left_delimiter coordinate_epoch right_delimiter coordinate_epoch_keyword: T_EPOCH | T_COORDEPOCH coordinate_epoch: unsigned_integer | unsigned_integer period | unsigned_integer period unsigned_integer coordinate_metadata: coordinate_metadata_keyword left_delimiter coordinate_metadata_crs right_delimiter coordinate_metadata_crs: static_crs_coordinate_metadata | dynamic_crs_coordinate_metadata wkt_separator metadata_coordinate_epoch coordinate_metadata_keyword: T_COORDINATEMETADATA static_crs_coordinate_metadata: static_geodetic_crs | static_geographic_crs | projected_crs | static_vertical_crs | engineering_crs | parametric_crs | temporal_crs | derived_geodetic_crs | derived_projected_crs | derived_vertical_crs | derived_engineering_crs | derived_parametric_crs | derived_temporal_crs | compound_crs dynamic_crs_coordinate_metadata: dynamic_geodetic_crs | dynamic_geographic_crs | projected_crs | dynamic_vertical_crs | derived_geodetic_crs | derived_projected_crs | derived_vertical_crs // Coordinate operations coordinate_operation: operation_keyword left_delimiter operation_name coordinate_operation_next coordinate_operation_next: wkt_separator operation_version coordinate_operation_end | coordinate_operation_end coordinate_operation_end: wkt_separator source_crs wkt_separator target_crs wkt_separator operation_method opt_parameter_or_parameter_file_list_opt_interpolation_crs_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark right_delimiter opt_parameter_or_parameter_file_list_opt_interpolation_crs_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark: | wkt_separator operation_parameter opt_parameter_or_parameter_file_list_opt_interpolation_crs_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark | wkt_separator operation_parameter_file opt_parameter_or_parameter_file_list_opt_interpolation_crs_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark | wkt_separator interpolation_crs opt_separator_scope_extent_identifier_remark | wkt_separator interpolation_crs wkt_separator operation_accuracy opt_separator_scope_extent_identifier_remark | wkt_separator operation_accuracy opt_separator_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark operation_keyword: T_COORDINATEOPERATION operation_name: quoted_latin_text operation_version: operation_version_keyword left_delimiter operation_version_text right_delimiter operation_version_keyword: T_VERSION operation_version_text: quoted_latin_text source_crs: source_crs_keyword left_delimiter crs right_delimiter source_crs_keyword: T_SOURCECRS target_crs: target_crs_keyword left_delimiter crs right_delimiter target_crs_keyword: T_TARGETCRS interpolation_crs: interpolation_crs_keyword left_delimiter crs right_delimiter interpolation_crs_keyword: T_INTERPOLATIONCRS operation_accuracy: operation_accuracy_keyword left_delimiter accuracy right_delimiter operation_accuracy_keyword: T_OPERATIONACCURACY // Point motion operation point_motion_operation: point_motion_keyword left_delimiter operation_name point_motion_operation_next point_motion_operation_next: wkt_separator operation_version point_motion_operation_end | point_motion_operation_end point_motion_operation_end: wkt_separator source_crs wkt_separator operation_method opt_parameter_or_parameter_file_list_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark right_delimiter opt_parameter_or_parameter_file_list_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark: | wkt_separator operation_parameter opt_parameter_or_parameter_file_list_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark | wkt_separator operation_parameter_file opt_parameter_or_parameter_file_list_opt_operation_accuracy_opt_separator_scope_extent_identifier_remark | wkt_separator operation_accuracy opt_separator_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark point_motion_keyword: T_POINTMOTIONOPERATION // Concatenated operation concatenated_operation: concatenated_operation_keyword left_delimiter operation_name concatenated_operation_next concatenated_operation_next: wkt_separator operation_version concatenated_operation_end | concatenated_operation_end concatenated_operation_end: wkt_separator source_crs wkt_separator target_crs wkt_separator step_keyword left_delimiter step right_delimiter wkt_separator step_keyword left_delimiter step right_delimiter opt_concatenated_operation_end right_delimiter step: coordinate_operation | point_motion_keyword | map_projection | deriving_conversion opt_concatenated_operation_end: | wkt_separator step_keyword left_delimiter step right_delimiter opt_concatenated_operation_end | wkt_separator operation_accuracy opt_separator_scope_extent_identifier_remark | wkt_separator no_opt_separator_scope_extent_identifier_remark concatenated_operation_keyword: T_CONCATENATEDOPERATION step_keyword: T_STEP // Bound CRS bound_crs: bound_crs_keyword left_delimiter source_crs wkt_separator target_crs wkt_separator abridged_coordinate_transformation opt_separator_scope_extent_identifier_remark right_delimiter bound_crs_keyword: T_BOUNDCRS abridged_coordinate_transformation: abridged_transformation_keyword left_delimiter operation_name abridged_coordinate_transformation_next abridged_coordinate_transformation_next: wkt_separator operation_version abridged_coordinate_transformation_end | abridged_coordinate_transformation_end abridged_coordinate_transformation_end: wkt_separator operation_method // At least one parameter required by WKT2. But relax that to allow things like METHOD["PROJ-based operation method: +proj=...."] // wkt_separator abridged_parameter_or_parameter_file opt_end_abridged_coordinate_transformation right_delimiter //abridged_parameter_or_parameter_file: abridged_transformation_parameter | operation_parameter_file opt_end_abridged_coordinate_transformation: | wkt_separator abridged_transformation_parameter opt_end_abridged_coordinate_transformation | wkt_separator operation_parameter_file opt_end_abridged_coordinate_transformation | wkt_separator no_opt_separator_scope_extent_identifier_remark abridged_transformation_keyword: T_ABRIDGEDTRANSFORMATION abridged_transformation_parameter: parameter_keyword left_delimiter parameter_name wkt_separator parameter_value opt_separator_identifier_list right_delimiter proj-9.6.0/src/wkt2_parser.cpp000664 001754 001755 00000023070 14764566077 016161 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: WKT2 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2018 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. ****************************************************************************/ #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/internal/internal.hpp" #include #include #include #include #include "proj_constants.h" #include "wkt2_parser.h" #include "wkt_parser.hpp" using namespace NS_PROJ::internal; //! @cond Doxygen_Suppress // --------------------------------------------------------------------------- struct pj_wkt2_parse_context : public pj_wkt_parse_context {}; // --------------------------------------------------------------------------- void pj_wkt2_error(pj_wkt2_parse_context *context, const char *msg) { pj_wkt_error(context, msg); } // --------------------------------------------------------------------------- std::string pj_wkt2_parse(const std::string &wkt) { pj_wkt2_parse_context context; context.pszInput = wkt.c_str(); context.pszLastSuccess = wkt.c_str(); context.pszNext = wkt.c_str(); if (pj_wkt2_parse(&context) != 0) { return context.errorMsg; } return std::string(); } // --------------------------------------------------------------------------- typedef struct { const char *pszToken; int nTokenVal; } wkt2_tokens; #define PAIR(X) \ { \ #X, T_##X \ } static const wkt2_tokens tokens[] = { PAIR(PARAMETER), PAIR(PROJECTION), PAIR(DATUM), PAIR(SPHEROID), PAIR(PRIMEM), PAIR(UNIT), PAIR(AXIS), PAIR(GEODCRS), PAIR(LENGTHUNIT), PAIR(ANGLEUNIT), PAIR(SCALEUNIT), PAIR(TIMEUNIT), PAIR(ELLIPSOID), PAIR(CS), PAIR(ID), PAIR(PROJCRS), PAIR(BASEGEODCRS), PAIR(MERIDIAN), PAIR(BEARING), PAIR(ORDER), PAIR(ANCHOR), PAIR(ANCHOREPOCH), PAIR(CONVERSION), PAIR(METHOD), PAIR(REMARK), PAIR(GEOGCRS), PAIR(BASEGEOGCRS), PAIR(SCOPE), PAIR(AREA), PAIR(BBOX), PAIR(CITATION), PAIR(URI), PAIR(VERTCRS), PAIR(VDATUM), PAIR(GEOIDMODEL), PAIR(COMPOUNDCRS), PAIR(PARAMETERFILE), PAIR(COORDINATEOPERATION), PAIR(SOURCECRS), PAIR(TARGETCRS), PAIR(INTERPOLATIONCRS), PAIR(OPERATIONACCURACY), PAIR(CONCATENATEDOPERATION), PAIR(STEP), PAIR(BOUNDCRS), PAIR(ABRIDGEDTRANSFORMATION), PAIR(DERIVINGCONVERSION), PAIR(TDATUM), PAIR(CALENDAR), PAIR(TIMEORIGIN), PAIR(TIMECRS), PAIR(VERTICALEXTENT), PAIR(TIMEEXTENT), PAIR(USAGE), PAIR(DYNAMIC), PAIR(FRAMEEPOCH), PAIR(MODEL), PAIR(VELOCITYGRID), PAIR(ENSEMBLE), PAIR(MEMBER), PAIR(ENSEMBLEACCURACY), PAIR(DERIVEDPROJCRS), PAIR(BASEPROJCRS), PAIR(EDATUM), PAIR(ENGCRS), PAIR(PDATUM), PAIR(PARAMETRICCRS), PAIR(PARAMETRICUNIT), PAIR(BASEVERTCRS), PAIR(BASEENGCRS), PAIR(BASEPARAMCRS), PAIR(BASETIMECRS), PAIR(GEODETICCRS), PAIR(GEODETICDATUM), PAIR(PROJECTEDCRS), PAIR(PRIMEMERIDIAN), PAIR(GEOGRAPHICCRS), PAIR(TRF), PAIR(VERTICALCRS), PAIR(VERTICALDATUM), PAIR(VRF), PAIR(TIMEDATUM), PAIR(TEMPORALQUANTITY), PAIR(ENGINEERINGDATUM), PAIR(ENGINEERINGCRS), PAIR(PARAMETRICDATUM), PAIR(EPOCH), PAIR(COORDEPOCH), PAIR(COORDINATEMETADATA), PAIR(POINTMOTIONOPERATION), PAIR(VERSION), PAIR(AXISMINVALUE), PAIR(AXISMAXVALUE), PAIR(RANGEMEANING), PAIR(exact), PAIR(wraparound), // CS types PAIR(AFFINE), PAIR(CARTESIAN), PAIR(CYLINDRICAL), PAIR(ELLIPSOIDAL), PAIR(LINEAR), PAIR(PARAMETRIC), PAIR(POLAR), PAIR(SPHERICAL), PAIR(VERTICAL), PAIR(TEMPORAL), PAIR(TEMPORALCOUNT), PAIR(TEMPORALMEASURE), PAIR(ORDINAL), PAIR(TEMPORALDATETIME), // Axis directions PAIR(NORTH), PAIR(NORTHNORTHEAST), PAIR(NORTHEAST), PAIR(EASTNORTHEAST), PAIR(EAST), PAIR(EASTSOUTHEAST), PAIR(SOUTHEAST), PAIR(SOUTHSOUTHEAST), PAIR(SOUTH), PAIR(SOUTHSOUTHWEST), PAIR(SOUTHWEST), PAIR(WESTSOUTHWEST), PAIR(WEST), PAIR(WESTNORTHWEST), PAIR(NORTHWEST), PAIR(NORTHNORTHWEST), PAIR(UP), PAIR(DOWN), PAIR(GEOCENTRICX), PAIR(GEOCENTRICY), PAIR(GEOCENTRICZ), PAIR(COLUMNPOSITIVE), PAIR(COLUMNNEGATIVE), PAIR(ROWPOSITIVE), PAIR(ROWNEGATIVE), PAIR(DISPLAYRIGHT), PAIR(DISPLAYLEFT), PAIR(DISPLAYUP), PAIR(DISPLAYDOWN), PAIR(FORWARD), PAIR(AFT), PAIR(PORT), PAIR(STARBOARD), PAIR(CLOCKWISE), PAIR(COUNTERCLOCKWISE), PAIR(TOWARDS), PAIR(AWAYFROM), PAIR(FUTURE), PAIR(PAST), PAIR(UNSPECIFIED), }; // --------------------------------------------------------------------------- int pj_wkt2_lex(YYSTYPE * /*pNode */, pj_wkt2_parse_context *context) { size_t i; const char *pszInput = context->pszNext; /* -------------------------------------------------------------------- */ /* Skip white space. */ /* -------------------------------------------------------------------- */ while (*pszInput == ' ' || *pszInput == '\t' || *pszInput == 10 || *pszInput == 13) pszInput++; context->pszLastSuccess = pszInput; if (*pszInput == '\0') { context->pszNext = pszInput; return EOF; } /* -------------------------------------------------------------------- */ /* Recognize node names. */ /* -------------------------------------------------------------------- */ if (isalpha(*pszInput)) { for (i = 0; i < sizeof(tokens) / sizeof(tokens[0]); i++) { if (ci_starts_with(pszInput, tokens[i].pszToken) && !isalpha(pszInput[strlen(tokens[i].pszToken)])) { context->pszNext = pszInput + strlen(tokens[i].pszToken); return tokens[i].nTokenVal; } } } /* -------------------------------------------------------------------- */ /* Recognize unsigned integer */ /* -------------------------------------------------------------------- */ if (*pszInput >= '0' && *pszInput <= '9') { // Special case for 1, 2, 3 if ((*pszInput == '1' || *pszInput == '2' || *pszInput == '3') && !(pszInput[1] >= '0' && pszInput[1] <= '9')) { context->pszNext = pszInput + 1; return *pszInput; } pszInput++; while (*pszInput >= '0' && *pszInput <= '9') pszInput++; context->pszNext = pszInput; return T_UNSIGNED_INTEGER_DIFFERENT_ONE_TWO_THREE; } /* -------------------------------------------------------------------- */ /* Recognize double quoted strings. */ /* -------------------------------------------------------------------- */ if (*pszInput == '"') { pszInput++; while (*pszInput != '\0') { if (*pszInput == '"') { if (pszInput[1] == '"') pszInput++; else break; } pszInput++; } if (*pszInput == '\0') { context->pszNext = pszInput; return EOF; } context->pszNext = pszInput + 1; return T_STRING; } // As used in examples of OGC 12-063r5 const char *startPrintedQuote = "\xE2\x80\x9C"; const char *endPrintedQuote = "\xE2\x80\x9D"; if (strncmp(pszInput, startPrintedQuote, 3) == 0) { context->pszNext = strstr(pszInput, endPrintedQuote); if (context->pszNext == nullptr) { context->pszNext = pszInput + strlen(pszInput); return EOF; } context->pszNext += 3; return T_STRING; } /* -------------------------------------------------------------------- */ /* Handle special tokens. */ /* -------------------------------------------------------------------- */ context->pszNext = pszInput + 1; return *pszInput; } //! @endcond proj-9.6.0/src/wkt2_parser.h000664 001754 001755 00000004023 14764566077 015623 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: WKT2 parser grammar * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2018 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. ****************************************************************************/ #ifndef PJ_WKT2_PARSER_H_INCLUDED #define PJ_WKT2_PARSER_H_INCLUDED #ifndef DOXYGEN_SKIP #ifdef __cplusplus extern "C" { #endif typedef struct pj_wkt2_parse_context pj_wkt2_parse_context; #include "wkt2_generated_parser.h" void pj_wkt2_error(pj_wkt2_parse_context *context, const char *msg); int pj_wkt2_lex(YYSTYPE *pNode, pj_wkt2_parse_context *context); int pj_wkt2_parse(pj_wkt2_parse_context *context); #ifdef __cplusplus } std::string pj_wkt2_parse(const std::string &wkt); #endif #endif /* #ifndef DOXYGEN_SKIP */ #endif /* PJ_WKT2_PARSER_H_INCLUDED */ proj-9.6.0/src/wkt_parser.cpp000664 001754 001755 00000004746 14764566077 016110 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: WKT parser common routines * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2018 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 "wkt_parser.hpp" #include #include // --------------------------------------------------------------------------- void pj_wkt_error(pj_wkt_parse_context *context, const char *msg) { context->errorMsg = "Parsing error : "; context->errorMsg += msg; context->errorMsg += ". Error occurred around:\n"; std::string ctxtMsg; const int n = static_cast(context->pszLastSuccess - context->pszInput); int start_i = std::max(0, n - 40); for (int i = start_i; i < n + 40 && context->pszInput[i]; i++) { if (context->pszInput[i] == '\r' || context->pszInput[i] == '\n') { if (i > n) { break; } else { ctxtMsg.clear(); start_i = i + 1; } } else { ctxtMsg += context->pszInput[i]; } } context->errorMsg += ctxtMsg; context->errorMsg += '\n'; for (int i = start_i; i < n; i++) context->errorMsg += ' '; context->errorMsg += '^'; } proj-9.6.0/src/wkt_parser.hpp000664 001754 001755 00000004051 14764566077 016102 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: WKT parser common routines * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2018 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. ****************************************************************************/ #ifndef PJ_WKT_PARSER_H_INCLUDED #define PJ_WKT_PARSER_H_INCLUDED //! @cond Doxygen_Suppress #include struct pj_wkt_parse_context { const char *pszInput = nullptr; const char *pszLastSuccess = nullptr; const char *pszNext = nullptr; std::string errorMsg{}; pj_wkt_parse_context() = default; pj_wkt_parse_context(const pj_wkt_parse_context &) = delete; pj_wkt_parse_context &operator=(const pj_wkt_parse_context &) = delete; }; void pj_wkt_error(pj_wkt_parse_context *context, const char *msg); //! @endcond #endif // PJ_WKT_PARSER_H_INCLUDED proj-9.6.0/src/zpoly1.cpp000664 001754 001755 00000002257 14764566077 015160 0ustar00e012349e012349000000 000000 /* evaluate complex polynomial */ #include "proj.h" #include "proj_internal.h" /* 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, const 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, const 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; } proj-9.6.0/test/000775 001754 001755 00000000000 14764566152 013372 5ustar00e012349e012349000000 000000 proj-9.6.0/test/CMakeLists.txt000664 001754 001755 00000012115 14764566077 016140 0ustar00e012349e012349000000 000000 option(TESTING_USE_NETWORK "Permit use of network to fetch test requirements (if needed) \ and run network-dependent tests. Default ON." ON ) set(HAS_NETWORK OFF) # evaluate if ON below if(TESTING_USE_NETWORK) if(NOT CMAKE_REQUIRED_QUIET) # CMake 3.17+ use CHECK_START/CHECK_PASS/CHECK_FAIL message(STATUS "Checking if network is available") endif() set(NO_CONNECTION 1) find_program(HAS_CURL curl) if(HAS_CURL) # First try with curl as we can get an 'instant' answer if it is there execute_process( COMMAND ${HAS_CURL} -I https://www.google.com OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE NO_CONNECTION ) else() find_program(HAS_PING ping) if(HAS_PING) # Then fallback to ping -- https://stackoverflow.com/a/68376537/ if(WIN32) set(PING_COUNT "-n") else() set(PING_COUNT "-c") endif() execute_process( COMMAND ${HAS_PING} www.google.com ${PING_COUNT} 2 OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE NO_CONNECTION ) else() message(WARNING "Cannot establish if network is available - " "'curl' or 'ping' not found" ) endif() endif() if(NO_CONNECTION EQUAL 0) set(HAS_NETWORK ON) if(NOT CMAKE_REQUIRED_QUIET) message(STATUS "Checking if network is available - yes") endif() else() if(NOT CMAKE_REQUIRED_QUIET) message(STATUS "Checking if network is available - no; skipping network-dependent tests." ) endif() endif() else() message(STATUS "Network access not premitted (TESTING_USE_NETWORK=OFF)") endif() option(RUN_NETWORK_DEPENDENT_TESTS "Whether to run tests dependent on network availability" ${HAS_NETWORK} ) # Regression tests proj_add_gie_test("Builtins" "gie/builtins.gie") proj_add_gie_test("Builtins2" "gie/more_builtins.gie") proj_add_gie_test("Axisswap" "gie/axisswap.gie") proj_add_gie_test("Ellipsoid" "gie/ellipsoid.gie") proj_add_gie_test("GDA" "gie/GDA.gie") proj_add_gie_test("4D-API-cs2cs-style" "gie/4D-API_cs2cs-style.gie") proj_add_gie_test("DHDN_ETRS89" "gie/DHDN_ETRS89.gie") proj_add_gie_test("Unitconvert" "gie/unitconvert.gie") proj_add_gie_test("adams_hemi" "gie/adams_hemi.gie") proj_add_gie_test("adams_ws1" "gie/adams_ws1.gie") proj_add_gie_test("adams_ws2" "gie/adams_ws2.gie") proj_add_gie_test("guyou" "gie/guyou.gie") proj_add_gie_test("peirce_q" "gie/peirce_q.gie") proj_add_gie_test("tinshift" "gie/tinshift.gie") proj_add_gie_test("spilhaus" "gie/spilhaus.gie") if(TIFF_ENABLED) proj_add_gie_test("Deformation" "gie/deformation.gie") proj_add_gie_test("geotiff_grids" "gie/geotiff_grids.gie") proj_add_gie_test("defmodel" "gie/defmodel.gie") proj_add_gie_test("gridshift" "gie/gridshift.gie") # Does not really require the network, but test running with PROJ_NETWORK=ON proj_add_gie_network_dependent_test("gridshift_network_enabled" "gie/gridshift.gie") endif() if(TIFF_ENABLED AND CURL_ENABLED AND RUN_NETWORK_DEPENDENT_TESTS) proj_add_gie_network_dependent_test("nkg" "gie/nkg.gie") endif() # GIGS tests. Uncommented tests are expected to fail due to issues with # various projections. Should be investigated further and fixed. proj_add_gie_test("GIGS-5101.1-jhs" "gigs/5101.1-jhs.gie") proj_add_gie_test("GIGS-5101.2-jhs" "gigs/5101.2-jhs.gie") proj_add_gie_test("GIGS-5101.3-jhs" "gigs/5101.3-jhs.gie") proj_add_gie_test("GIGS-5101.4-jhs-etmerc" "gigs/5101.4-jhs-etmerc.gie") # Same as above, but using etmerc instead of tmerc #proj_add_gie_test("GIGS-5101.4-jhs" "gigs/5101.4-jhs.gie") proj_add_gie_test("GIGS-5102.1" "gigs/5102.1.gie") proj_add_gie_test("GIGS-5102.2" "gigs/5102.2.gie") proj_add_gie_test("GIGS-5103.1" "gigs/5103.1.gie") proj_add_gie_test("GIGS-5103.2" "gigs/5103.2.gie") proj_add_gie_test("GIGS-5103.3" "gigs/5103.3.gie") proj_add_gie_test("GIGS-5104" "gigs/5104.gie") #proj_add_gie_test("GIGS-5105.1" "gigs/5105.1.gie") proj_add_gie_test("GIGS-5105.2" "gigs/5105.2.gie") proj_add_gie_test("GIGS-5106" "gigs/5106.gie") proj_add_gie_test("GIGS-5107" "gigs/5107.gie") proj_add_gie_test("GIGS-5108" "gigs/5108.gie") proj_add_gie_test("GIGS-5109" "gigs/5109.gie") #proj_add_gie_test("GIGS-5110" "gigs/5110.gie") proj_add_gie_test("GIGS-5111.1" "gigs/5111.1.gie") #proj_add_gie_test("GIGS-5111.2" "gigs/5111.2.gie") proj_add_gie_test("GIGS-5112" "gigs/5112.gie") proj_add_gie_test("GIGS-5113" "gigs/5113.gie") proj_add_gie_test("GIGS-5201" "gigs/5201.gie") #proj_add_gie_test("GIGS-5203" "gigs/5203.1.gie") #proj_add_gie_test("GIGS-5204.1" "gigs/5204.1.gie") #proj_add_gie_test("GIGS-5205.1" "gigs/5205.1.gie") #proj_add_gie_test("GIGS-5206" "gigs/5206.gie") #proj_add_gie_test("GIGS-5207.1" "gigs/5207.1.gie") #proj_add_gie_test("GIGS-5207.2" "gigs/5207.2.gie") proj_add_gie_test("GIGS-5208" "gigs/5208.gie") #SET(CATCH2_INCLUDE catch.hpp) #SET(TEST_MAIN_SRC test_main.cpp) #set(TEST_MAIN_LIBRARIES test_main) #add_library( ${TEST_MAIN_LIBRARIES} # ${TEST_MAIN_SRC} # ${CATCH2_INCLUDE} ) add_subdirectory(cli) add_subdirectory(unit) add_subdirectory(benchmark) if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/fuzzers") add_subdirectory(fuzzers) endif() proj-9.6.0/test/benchmark/000775 001754 001755 00000000000 14764566152 015324 5ustar00e012349e012349000000 000000 proj-9.6.0/test/benchmark/CMakeLists.txt000664 001754 001755 00000000425 14764566077 020073 0ustar00e012349e012349000000 000000 option(BUILD_BENCHMARKS "Build PROJ benchmark applications" ON) if(NOT BUILD_BENCHMARKS) return() endif() add_compile_options(${PROJ_CXX_WARN_FLAGS}) add_executable(bench_proj_trans bench_proj_trans.cpp) target_link_libraries(bench_proj_trans PRIVATE ${PROJ_LIBRARIES}) proj-9.6.0/test/benchmark/bench_proj_trans.cpp000664 001754 001755 00000015032 14764566077 021357 0ustar00e012349e012349000000 000000 /****************************************************************************** * Project: PROJ * Purpose: Benchmark * Author: Even Rouault, * ****************************************************************************** * Copyright (c) 2022, 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 "proj.h" #include // rand() #include #include // HUGE_VAL #include #include #include #include static void usage() { printf("Usage: bench_proj_trans [(--source-crs|-s) string]\n"); printf(" [(--target-crs|-t) string]\n"); printf(" [(--pipeline|-p) string]\n"); printf(" [(--loops|-l) number]\n"); printf(" [--noise-x number] [--noise-y number]\n"); printf(" coord_comp_1 coord_comp_2 [coord_comp_3] " "[coord_comp_4]\n"); printf("\n"); printf("Both of --source-crs and --target_crs, or --pipeline must be " "specified.\n"); printf("\n"); printf("Example: bench_proj_trans -s EPSG:4326 -t EPSG:32631 49 2\n"); exit(1); } int main(int argc, char *argv[]) { std::string sourceCRS; std::string targetCRS; std::string pipeline; int loops = 5 * 1000 * 1000; double coord_comp[4] = {0, 0, 0, HUGE_VAL}; int coord_comp_counter = 0; double noiseX = 0; double noiseY = 0; for (int i = 1; i < argc; ++i) { if (strcmp(argv[i], "--source-crs") == 0 || strcmp(argv[i], "-s") == 0) { if (i + 1 >= argc) usage(); sourceCRS = argv[i + 1]; ++i; } else if (strcmp(argv[i], "--target-crs") == 0 || strcmp(argv[i], "-t") == 0) { if (i + 1 >= argc) usage(); targetCRS = argv[i + 1]; ++i; } else if (strcmp(argv[i], "--pipeline") == 0 || strcmp(argv[i], "-p") == 0) { if (i + 1 >= argc) usage(); pipeline = argv[i + 1]; ++i; } else if (strcmp(argv[i], "--loops") == 0 || strcmp(argv[i], "-l") == 0) { if (i + 1 >= argc) usage(); loops = atoi(argv[i + 1]); ++i; } else if (strcmp(argv[i], "--noise-x") == 0) { if (i + 1 >= argc) usage(); noiseX = atof(argv[i + 1]); ++i; } else if (strcmp(argv[i], "--noise-y") == 0) { if (i + 1 >= argc) usage(); noiseY = atof(argv[i + 1]); ++i; } else if (argv[i][0] == '-' && !(argv[i][1] >= '0' && argv[i][1] <= '9')) { usage(); } else if (coord_comp_counter < 4) { coord_comp[coord_comp_counter++] = atof(argv[i]); } else { usage(); } } if (coord_comp_counter < 2) usage(); PJ_CONTEXT *ctxt = proj_context_create(); PJ *P = nullptr; if (!pipeline.empty()) { P = proj_create(ctxt, pipeline.c_str()); } else if (!sourceCRS.empty() && !targetCRS.empty()) { P = proj_create_crs_to_crs(ctxt, sourceCRS.c_str(), targetCRS.c_str(), nullptr); } else { usage(); } if (P == nullptr) { exit(1); } PJ_COORD c; c.v[0] = coord_comp[0]; c.v[1] = coord_comp[1]; c.v[2] = coord_comp[2]; c.v[3] = coord_comp[3]; PJ_COORD c_ori = c; auto res = proj_trans(P, PJ_FWD, c); if (coord_comp_counter == 2) { printf("%.15g %.15g -> %.15g %.15g\n", c.v[0], c.v[1], res.v[0], res.v[1]); } else if (coord_comp_counter == 3) { printf("%.15g %.15g %.15g -> %.15g %.15g %.15g\n", c.v[0], c.v[1], c.v[2], res.v[0], res.v[1], res.v[2]); } else { printf("%.15g %.15g %.15g %.15g -> %.15g %.15g %.15g %.15g\n", c.v[0], c.v[1], c.v[2], c.v[3], res.v[0], res.v[1], res.v[2], res.v[3]); } // Start by timing just noise generation double dummy = 0; auto start_noise = std::chrono::system_clock::now(); for (int i = 0; i < loops; ++i) { if (noiseX != 0) c.v[0] = c_ori.v[0] + noiseX * (2 * double(rand()) / RAND_MAX - 1); if (noiseY != 0) c.v[1] = c_ori.v[1] + noiseY * (2 * double(rand()) / RAND_MAX - 1); dummy += c.v[0]; dummy += c.v[1]; } auto end_noise = std::chrono::system_clock::now(); auto start = std::chrono::system_clock::now(); for (int i = 0; i < loops; ++i) { if (noiseX != 0) c.v[0] = c_ori.v[0] + noiseX * (2 * double(rand()) / RAND_MAX - 1); if (noiseY != 0) c.v[1] = c_ori.v[1] + noiseY * (2 * double(rand()) / RAND_MAX - 1); dummy += c.v[0]; dummy += c.v[1]; proj_trans(P, PJ_FWD, c); } auto end = std::chrono::system_clock::now(); proj_destroy(P); proj_context_destroy(ctxt); auto elapsed_ms = std::chrono::duration_cast( (end - start) - (end_noise - start_noise)); printf("Duration: %d ms\n", static_cast(elapsed_ms.count())); printf("Throughput: %.02f million coordinates/s\n", 1e-3 * static_cast(loops) / static_cast(elapsed_ms.count()) + dummy * 1e-300); return 0; } proj-9.6.0/test/cli/000775 001754 001755 00000000000 14764566152 014141 5ustar00e012349e012349000000 000000 proj-9.6.0/test/cli/CMakeLists.txt000664 001754 001755 00000010261 14764566077 016707 0ustar00e012349e012349000000 000000 # # test # if(BUILD_CCT) set(CCT_EXE "$") endif() if(BUILD_CS2CS) set(CS2CS_EXE "$") endif() if(BUILD_PROJ) set(PROJ_EXE "$") if(UNIX) # invproj is a symlink # set(INVPROJ_EXE "$") # TODO: find working genexpr set(INVPROJ_EXE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invproj${CMAKE_EXECUTABLE_SUFFIX}") else() set(INVPROJ_EXE "$") endif() endif() if(BUILD_PROJINFO) set(PROJINFO_EXE "$") endif() if(BUILD_PROJSYNC) set(PROJSYNC_EXE "$") endif() if(UNIX) if(BUILD_CS2CS) proj_add_test_script_sh(test_cs2cs_locale.sh CS2CS_EXE) endif() if(BUILD_PROJINFO) proj_add_test_script_sh(test_projinfo.sh PROJINFO_EXE) endif() if(BUILD_PROJSYNC) proj_add_test_script_sh(test_projsync.sh PROJSYNC_EXE) endif() endif() macro(find_Python_package PACKAGE VARIABLE) if(NOT DEFINED "${VARIABLE}") if(NOT CMAKE_REQUIRED_QUIET) # CMake 3.17+ use CHECK_START/CHECK_PASS/CHECK_FAIL message(STATUS "Looking for ${PACKAGE}") endif() if(Python_VERSION VERSION_GREATER_EQUAL "3.8.0") # importlib.metadata was added in version 3.8 set(CMD "from importlib.metadata import version; print(version('${PACKAGE}'), end='')") execute_process( COMMAND ${Python_EXECUTABLE} -c "${CMD}" RESULT_VARIABLE EXIT_CODE OUTPUT_VARIABLE ${PACKAGE}_VERSION ERROR_QUIET ) else() # importlib_metadata backport needed for older Python versions execute_process( COMMAND ${Python_EXECUTABLE} -c "import importlib_metadata" RESULT_VARIABLE EXIT_CODE OUTPUT_QUIET ERROR_QUIET ) if(EXIT_CODE EQUAL 0) set(CMD "from importlib_metadata import version; print(version('${PACKAGE}'), end='')") execute_process( COMMAND ${Python_EXECUTABLE} -c "${CMD}" RESULT_VARIABLE EXIT_CODE OUTPUT_VARIABLE ${PACKAGE}_VERSION ERROR_QUIET ) else() message(WARNING "importlib_metadata backport package required for Python <3.8") endif() endif() if(EXIT_CODE EQUAL 0) if(NOT CMAKE_REQUIRED_QUIET) message(STATUS "Looking for ${PACKAGE} - found version \"${${PACKAGE}_VERSION}\"") endif() set(${VARIABLE} 1 CACHE INTERNAL "Have package ${PACKAGE}") else() if(NOT CMAKE_REQUIRED_QUIET) message(STATUS "Looking for ${PACKAGE} - not found") endif() set(${VARIABLE} "" CACHE INTERNAL "Have package ${PACKAGE}") endif() endif() endmacro() # Evaluate if Python can be used for CLI testing find_package(Python COMPONENTS Interpreter) set(Python_for_cli_tests OFF) if(Python_FOUND) if(Python_VERSION VERSION_GREATER_EQUAL "3.7.0") find_Python_package("ruamel.yaml" HAS_RUAMEL_YAML) if(HAS_RUAMEL_YAML) set(Python_for_cli_tests ON) else() find_Python_package("pyyaml" HAS_PYYAML) if(HAS_PYYAML) set(Python_for_cli_tests ON) endif() endif() else() message(WARNING "Python Interpreter version is too old") endif() endif() if(Python_for_cli_tests) if(BUILD_CCT) proj_run_cli_test(test_cct.yaml CCT_EXE) endif() if(BUILD_CS2CS) proj_run_cli_test(test_cs2cs_datumfile.yaml CS2CS_EXE) proj_run_cli_test(test_cs2cs_flaky.yaml CS2CS_EXE) proj_run_cli_test(test_cs2cs_ignf.yaml CS2CS_EXE) proj_run_cli_test(test_cs2cs_ntv2.yaml CS2CS_EXE) proj_run_cli_test(test_cs2cs_various.yaml CS2CS_EXE) endif() if(BUILD_PROJ) proj_run_cli_test(test_proj.yaml PROJ_EXE) proj_run_cli_test(test_proj_nad27.yaml PROJ_EXE) proj_run_cli_test(test_proj_nad83.yaml PROJ_EXE) proj_run_cli_test(test_invproj.yaml INVPROJ_EXE) endif() if(BUILD_PROJINFO) proj_run_cli_test(test_projinfo.yaml PROJINFO_EXE) endif() # auto-test run_cli_test.py if pytest available find_Python_package("pytest" HAS_PYTEST) if(HAS_PYTEST) add_test(NAME pytest_run_cli_test COMMAND ${Python_EXECUTABLE} -m pytest -vv ${PROJ_SOURCE_DIR}/test/cli/run_cli_test.py ) endif() else() message(WARNING "Python/YAML command-line interface tests not run") endif() proj-9.6.0/test/cli/run_cli_test.py000775 001754 001755 00000147133 14764566077 017227 0ustar00e012349e012349000000 000000 #!/usr/bin/env python3 """Run a CLI test provided as a YAML file. Requirements ------------ - Python 3.7 or later - Either ruamel.yaml (preferred) or pyyaml, from pip, conda or similar - Self-testing needs pytest (`python3 -m pytest`) Usage ----- A minimal example to run all tests defined in `test_proj.yaml` is: ``` $ python3 run_cli_test.py test_proj.yaml ``` To see full usages, run `python3 run_cli_test.py --help` Test file --------- Test files are defined in YAML format, and are designed to run with one executable. The top-level keys are: - `exe`: (required) executable name, e.g. `proj`. This can be overridden from the command-line using (e.g.) `--exe /path/to/build/bin/proj` - `env`: (optional) mapping of environment variables common to all tests - `comment`: (optional) comment to describe purpose of tests - `tests`: (required) list of tests, described next Each test item have the optional keys: - `args`: command-line arguments passed as a single string, or as a list of individual string arguments - `comment`: comment to describe the test - `env`: mapping of environment variables - `input`: standard input for program, either as string or bytes - `stdout`: expected standard output from program, either as string or bytes - `stderr`: expected standard error from program as a string - `out`: expected combined `stdout` and `stderr` as a string; this option can't be used with `stdout` and/or `stderr` - `exitcode`: expected exit code (or return code) from the program, default 0 - `skipif`: a Python expression to evaluate if test should be skipped; to access the environment variable mapping, use (e.g.) `env.get('VAR')`; other special variables include `byteorder` (either "big" or "little") and `platform` (usually "linux", "darwin", or "win32") Each test may have additional features: - `file` - either a mapping or list of mappings with required keys `name` (str) and `content` (str or bytes), used to specify create one or more files, then removed after test. The `name` can specify a file to be written to the current working directory, or an absolult path to another location. The path may have a special `$tmpdir/file.txt` to write into a temporary directory, described next. - `tmpdir` - create a temporary directory, and copy zero or more files listed in `copy`. Lastly, test results can be post-processed using several commands, processed in the same order they are specified: - `grep`: capture lines that match pattern - `grep-v`: capture lines that don't match pattern - `sub`: substitute pattern with replacement, similar to `sed s/pat/repl/` - `head`: select the first *n* lines - `tail`: select the last *n* lines - `sort`: sort the lines Development ----------- Running self-tests with pytest: ``` python3 -m pytest run_cli_test.py -v ``` Running coverage scan: ``` python3 -m coverage run --source=. -m pytest run_cli_test.py python3 -m coverage html ``` """ ############################################################################### # # Project: PROJ # Purpose: Test command-line interface # Author: Mike Taves # ############################################################################### # Copyright (c) 2024, Mike Taves # # 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. ############################################################################### __author__ = "Mike Taves" __version__ = "0.1" import difflib import functools import os import re import shlex import shutil import subprocess import sys import tempfile from collections.abc import Mapping from copy import deepcopy from dataclasses import dataclass, field from pathlib import Path from textwrap import dedent from typing import List, Optional, Union # at runtime, import either ruamel.yaml or pyyaml lib # always show unbuffered output print = functools.partial(print, flush=True) def sub_env_var(txt: str, env: dict) -> str: """Substitute environment variables into string, if found. Also change pathsep for Windows from ':' to ';'. """ if os.pathsep != ":" and ":" in txt: txt = txt.replace(":", os.pathsep) if "$" not in txt: return txt pat_subvar = [ (r"\$([a-zA-Z_]\w*)", "${var}"), # applies to $VAR (r"\$\{([a-zA-Z_]\w*)\}", "${{{var}}}"), # and to ${VAR} ] for pat, subvar in pat_subvar: for var in set(re.findall(pat, txt)): if var in env: txt = txt.replace(subvar.format(var=var), env[var]) else: print(f"env var {var} not found", file=sys.stderr) if "$" not in txt: return txt return txt def eval_skipif(expr: str, env: dict) -> bool: """Evaluate an expression to determine if test should be skipped.""" import ast if not expr: return False # Add a few useful system constants eval_env = {"env": env} if "byteorder" in expr: eval_env["byteorder"] = sys.byteorder # type: ignore if "platform" in expr: eval_env["platform"] = sys.platform # type: ignore # Declare "safe" ast node types # fmt: off safe_nodes = [ "Expression", "Load", "Name", "Compare", "Subscript", "FormattedValue", "Index", "Dict", "Set", "List", "Tuple", "Constant", "JoinedStr", "Num", "Str", "NameConstant", "BoolOp", "BinOp", "UnaryOp", "IfExp", "And", "Or", "Eq", "NotEq", "Lt", "LtE", "Gt", "GtE", "Is", "IsNot", "In", "NotIn", "Add", "Sub", "Mult", "Div", "Mod", "FloorDiv", "Pow", "Not", "BitOr", "BitAnd", "BitXor", "LShift", "RShift", "Invert", ] # fmt: on expr_tree = ast.parse(expr, mode="eval") # First scan to find acceptable nodes to ignore ignore_ids = set() for node in ast.walk(expr_tree): if isinstance(node, ast.Call): child_nodes = list(ast.iter_child_nodes(node)) nnode = child_nodes[0] if len(child_nodes) > 0 else None if isinstance(nnode, ast.Attribute) and 1 <= len(child_nodes) <= 3: if nnode.value.id == "env" and nnode.attr == "get": # type: ignore # Allow: env.get("key", "default") ignore_ids.add(id(node)) for child in child_nodes: ignore_ids.add(id(child)) # Second scan to raise issues with expression for node in ast.walk(expr_tree): if isinstance(node, ast.Name) and node.id not in eval_env: raise ValueError(f"undefined name {node.id!r}") elif id(node) in ignore_ids: continue node_name = type(node).__name__ if node_name not in safe_nodes: raise ValueError(f"unsafe expression {expr!r}, contains {node_name!r}") res = eval(expr, eval_env) return bool(res) @dataclass class TmpDir: """Create a temporary directory, and optionally copy files.""" copy: list = field(default_factory=list) def __post_init__(self): self._prepared = False if not isinstance(self.copy, list): raise ValueError("tmpdir copy must be a list") def prepare(self, env): """Create temporary directory and copy files into it.""" if self._prepared: return self.strpth = tempfile.mkdtemp() env["tmpdir"] = self.strpth # used by sub_env_var self.pth = Path(self.strpth) self.copy_files = [] for idx, pth in enumerate(self.copy): sub_pth = sub_env_var(pth, env) if sub_pth != pth: self.copy[idx] = sub_pth src_pth = Path(sub_pth) if not src_pth.exists(): raise FileNotFoundError(f"cannot find {src_pth}") dst_pth = self.pth / src_pth.name if dst_pth.exists(): raise FileExistsError(f"file exists {dst_pth}") dst_pth.write_bytes(src_pth.read_bytes()) self.copy_files.append(src_pth) self._prepared = True def sub_var(self, txt) -> str: """Substitute string with $tmpdir into this temporary path.""" if not self._prepared: raise ValueError(f"{self.__class__} not prepared") if "$tmpdir" in txt: txt = re.sub(r"(\$tmpdir)\b", self.strpth, txt) return txt def cleanup(self): if self._prepared: shutil.rmtree(self.strpth) self._prepared = False def __del__(self): if hasattr(self, "cleanup"): self.cleanup() @dataclass class File: """Write a named file with content. File name should not already exist in filesystem. Path can include "$tmpdir" if already using TmpDir. """ name: str content: Union[str, bytes] def __post_init__(self): self._prepared = False if not isinstance(self.name, (str, os.PathLike)): raise ValueError("file name must be str or path-like") if isinstance(self.content, str): if len(self.content) > 0 and not self.content.endswith("\n"): self.content += "\n" elif not isinstance(self.content, bytes): raise ValueError("file content must be str or bytes") def prepare(self, env): if self._prepared: return self.name = sub_env_var(self.name, env) self.pth = Path(self.name) if self.pth.exists(): raise FileExistsError(f"{self.name} exists!") file_contents = self.content if isinstance(file_contents, str): self.pth.write_text(file_contents, encoding="utf-8") else: self.pth.write_bytes(file_contents) self._prepared = True def cleanup(self): if self._prepared: if self.pth.exists(): self.pth.unlink() self._prepared = False def __del__(self): if hasattr(self, "cleanup"): self.cleanup() @dataclass class Test: args: List[str] = field(default_factory=list) comment: Optional[str] = None env: dict = field(default_factory=dict) input: Union[None, str, bytes] = None # or "in" stdout: Union[None, List[str], bytes] = None stderr: Union[None, List[str]] = None out: Union[None, str, List[str]] = None out_cmds: dict = field(default_factory=dict) exitcode: int = 0 skipif: Optional[str] = None file: List[File] = field(default_factory=list) tmpdir: Optional[TmpDir] = None __test__ = False # prevent pytest from autodiscover expected_out_cmds = ["grep", "grep-v", "sub", "head", "tail", "sort"] @classmethod def from_item(cls, verbose=0, **item): cls_kwargs = {} out_cmds = {} # keep order for key in item.keys(): value = item[key] if key in cls.expected_out_cmds: out_cmds[key] = value else: if key == "in": # rename reserved Python name key = "input" cls_kwargs[key] = value return cls(**cls_kwargs, out_cmds=out_cmds) def __post_init__(self): """Do some checks and modify data, but hold-off creating files etc.""" self._prepared = False self.skip = False if isinstance(self.args, str): self.args = shlex.split(self.args) if isinstance(self.input, str) and not self.input.endswith("\n"): self.input += "\n" def text2list(text): if not text: return [] if not text.endswith("\n"): text += "\n" return text.splitlines(keepends=True) self.check_stdout = self.stdout is not None if self.check_stdout and isinstance(self.stdout, str): self.stdout = text2list(self.stdout) self.check_stderr = self.stderr is not None if self.check_stderr and isinstance(self.stderr, str): self.stderr = text2list(self.stderr) self.check_out = self.out is not None if self.check_out and isinstance(self.out, str): if self.check_stdout or self.check_stderr: raise ValueError("out cannot be used with stdout or stderr") self.stdout = text2list(self.out) for key in self.env.keys(): value = self.env[key] if not isinstance(value, str): self.env[key] = str(value) if self.tmpdir is not None and not isinstance(self.tmpdir, TmpDir): self.tmpdir = TmpDir(**self.tmpdir) if self.file: # make into list of File if not isinstance(self.file, list): self.file = [self.file] for idx, file in enumerate(self.file): if not isinstance(file, File): self.file[idx] = File(**file) for key in list(self.out_cmds): value = self.out_cmds[key] if key in {"grep", "grep-v"}: if isinstance(value, str): self.out_cmds[key] = [value] elif not isinstance(value, list): raise ValueError( f"unsupported grep type {type(value)} for {value}", ) elif key == "sub": if ( not isinstance(value, list) or len(value) != 2 or not all(isinstance(val, str) for val in value) ): raise ValueError("sub should be a list of 2 str") def prepare(self, exe: str, global_env: dict): if not self._prepared: self.exe = exe self.global_env = global_env.copy() if self.skipif is not None: self.skip = eval_skipif(self.skipif, self.global_env) if self.skip: return if self.tmpdir is not None: self.tmpdir.prepare(self.global_env) for idx, arg in enumerate(self.args): arg2 = self.tmpdir.sub_var(arg) if arg != arg2: self.args[idx] = arg2 for key in self.env.keys(): self.env[key] = sub_env_var(str(self.env[key]), self.global_env) self.global_env.update(self.env) for file in self.file: file.prepare(self.global_env) self._prepared = True def get_cmd(self) -> str: """Get an approximate POSIX shell command to replicate test.""" if self.skip: raise ValueError("test is skipped") elif not self._prepared: raise ValueError("test not prepared") cmd = "" if self.tmpdir is not None: cmd += f"mkdir {shlex.quote(self.tmpdir.strpth)}\n" for pth in self.tmpdir.copy_files: cmd += f"cp {shlex.quote(str(pth))} {shlex.quote(self.tmpdir.strpth)}\n" for file in self.file: efile_name = shlex.quote(file.name) file_content = file.content if len(file_content) == 0: cmd += f"touch {efile_name}\n" elif isinstance(file_content, str): num_file_lines = sum( 1 if len(line) > 0 else 0 for line in file_content.splitlines() ) if num_file_lines == 1: cmd += "echo " file_content_rstrip = file_content.rstrip() if file_content_rstrip.isprintable(): cmd += shlex.quote(file_content_rstrip) else: # best attempt to capture Unicode and other cmd += "-e " + repr(file_content_rstrip) cmd += f" > {efile_name}\n" else: cmd += f"cat << EOF > {efile_name}\n{file_content}EOF\n" elif isinstance(file_content, bytes): cmd += f"printf {file_content.decode('utf-8')!r} > {efile_name}\n" num_input = 0 if isinstance(self.input, str): num_input = sum( 1 if len(line) > 0 else 0 for line in self.input.splitlines() ) if num_input == 1: cmd += "echo " input_rstrip = self.input.rstrip() if input_rstrip.isprintable(): cmd += shlex.quote(input_rstrip) else: # best attempt to capture Unicode and other cmd += f"-e {input_rstrip!r}" cmd += " | " elif isinstance(self.input, bytes): cmd += f"printf {repr(self.input)[1:]} | " for key, value in self.env.items(): cmd += f"{key}={shlex.quote(value)} " cmd += shlex.quote(self.exe) for arg in self.args: cmd += " " + shlex.quote(arg) if isinstance(self.input, str) and num_input > 1: cmd += " < int: """Run all tests.""" failures = [] num_fail = 0 num_pass = 0 num_skip = 0 glob_env = glob_env.copy() glob_env.update(self.env) for num, test in enumerate(self.tests): test.prepare(self.exe, glob_env) if self.verbose > 1: print("-" * 28) print(f"Test {num + 1}" + (f": {test.comment}" if test.comment else "")) print(test.get_cmd()) if test.skip: num_skip += 1 if self.verbose == 1: print("x", end="") elif self.verbose > 1: print(f"Test skipped: {test.skipif}") continue elif self.verbose > 1 and test.skipif is not None: print(f"Test not skipped: {test.skipif}") result = test.run() if result.failed: num_fail += 1 result.num = num if self.verbose == 1: print("F", end="") result.cmd = test.get_cmd() failures.append(result) elif self.verbose > 1: print("Test failed", file=sys.stderr) result.describe_nonfail() result.describe_fail() if exitfirst: test.cleanup() break else: num_pass += 1 if self.verbose == 1: print(".", end="") elif self.verbose > 1: result.describe_nonfail() print("Test passed") test.cleanup() if self.verbose == 1: print() # show/update failures after all tests have run for result in failures: if self.verbose == 1: print("-" * 28) print(f"Test {result.num + 1} failed", file=sys.stderr) if result.expected.comment is not None: print(f"comment: {result.expected.comment}") if result.expected.skipif is not None: print(f"Test not skipped: {result.expected.skipif}") print(result.cmd) result.describe_nonfail() result.describe_fail() if self.update: result.update_expected(self) if self.update: filename, data, yaml = self.filename, self.data, self.yaml # type: ignore with open(filename, "w", encoding="utf-8") as fp: yaml.dump(data, fp) if self.verbose: print(f"Updated {filename}") if self.verbose: if self.verbose > 1 or num_fail > 0: print("-" * 28) msg_list = [] if num_pass: plr = "" if num_pass == 1 else "s" msg_list.append(f"{num_pass} test{plr} passed") if num_fail: plr = "" if num_fail == 1 else "s" msg_list.append(f"{num_fail} test{plr} failed") if num_skip: plr = "" if num_skip == 1 else "s" msg_list.append(f"{num_skip} test{plr} skipped") if len(self) > 1 and len(msg_list) == 1: msg = f"All {msg_list[0]}" else: msg = ", ".join(msg_list) if num_fail: if self.verbose: print(msg, file=sys.stderr) return 1 if self.verbose: print(msg) return 0 def main(filename, exe=None, env=None, exitfirst=False, update=False, verbose=1): tester = Tester.from_yaml(filename, update=update, verbose=verbose) if exe is not None: tester.exe = exe glob_env = os.environ.copy() # Add/update PWD, which may be out-of-sync glob_env["PWD"] = str(Path.cwd()) glob_env.update(tester.env) if env is not None: glob_env.update(env) if verbose: print("Relevant environment variables:") for key, value in glob_env.items(): if key.startswith("PROJ") or "NABLED" in key: print(f" {key}={value}") # Check exe exe_path = Path(tester.exe) full_exe_path = str(exe_path) if exe_path.is_dir(): raise FileNotFoundError(f"'{exe_path}' is a directory, not a path to an EXE") elif tester.exe[1:3] == ":/": # CMake passes paths with forward slashes, which breaks D:/path/to/invproj.exe if full_exe_path[1:3] == ":/": # on MSYS2 force to :\ full_exe_path = full_exe_path.replace("/", "\\") tester.exe = full_exe_path elif exe_path.is_absolute(): if not exe_path.exists(): raise FileNotFoundError(f"cannot find '{tester.exe}' (does not exist)") else: full_exe_path = shutil.which(tester.exe) if full_exe_path is None: raise FileNotFoundError(f"cannot find '{tester.exe}' (not found on PATH)") if verbose: print(f"Testing '{full_exe_path}'") return tester.run(glob_env, exitfirst=exitfirst) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument("filename") parser.add_argument( "--exe", help="path to executable; overrides exe from test file (if defined)" ) parser.add_argument( "--env", action="append", help="environment variable, e.g. 'PROJ_NETWORK=ON'" ) parser.add_argument( "-x", "--exitfirst", action="store_true", help="exit instantly on first failed test", ) parser.add_argument( "--update", action="store_true", help="update filename with new results", ) parser.add_argument( "--verbose", type=int, default=1, help="0 silent (except errors), 1 (default) some messages, 2 more more messages", ) args = parser.parse_args() if args.env is not None: env_d = {} for item in args.env: if item.count("=") != 1: raise ValueError(f"env {item!r} does not use KEY=VALUE style") key, value = item.split("=") env_d[key] = value args.env = env_d sys.exit(main(**vars(args))) # %% Tests for this utility def test_sub_env_var(): env = {"foo": "baz"} assert sub_env_var("foo=bar", env) == "foo=bar" assert sub_env_var("$foo/bar", env) == "baz/bar" assert sub_env_var("line with ${foo}. Or $foo.", env) == "line with baz. Or baz." assert sub_env_var("what $food this?", env) == "what $food this?" def test_eval_skipif(): import pytest assert eval_skipif("", {}) is False assert eval_skipif("0", {}) is False assert eval_skipif("not True is False", {}) is True assert eval_skipif("None is not True", {}) is True env = {"foo": "bar"} assert eval_skipif("env['foo'] == 'bar'", env) is True assert eval_skipif("env['foo'][1] == 'a'", env) is True assert eval_skipif("env.get('foo') == 'bar'", env) is True assert eval_skipif("env.get('no') == 'bar'", env) is False assert eval_skipif("env.get('no', 'bar') == 'bar'", env) is True assert eval_skipif("""f"re{env['foo']}" == 'rebar'""", env) is True assert eval_skipif("[1] != [2]", {}) is True assert eval_skipif("1 in (1,)", {}) is True assert eval_skipif("1 in {1, 2}", {}) is True assert eval_skipif("1 not in {3: 4}", {}) is True assert eval_skipif("2 - 1 < 2 + 1 * 2 and 1 / 2 <= 2 // 2", {}) is True assert eval_skipif("1 > 2 ** 2 or 1 >= 2", {}) is False assert eval_skipif("1 | 4 >> 1 if 4 % 1 << 2 else 2 & ~3 ^ 1", {}) is True # special values assert eval_skipif("byteorder == 'little'", {}) is (sys.byteorder == "little") assert eval_skipif("platform in ('linux', 'darwin')", {}) is ( sys.platform in ("linux", "darwin") ) # errors with pytest.raises(ValueError, match="undefined name 'abs'"): eval_skipif("abs == 'bar'", {}) # missing variable with pytest.raises(ValueError, match="unsafe expression"): eval_skipif("sys.exit()", {}) with pytest.raises(ValueError, match="unsafe expression"): eval_skipif("eval('sys.exit()')", {}) with pytest.raises(ValueError, match="unsafe expression"): eval_skipif("exec('sys.exit()')", {}) with pytest.raises(ValueError, match="unsafe expression"): eval_skipif("foo.upper() == 'X'", {"foo": "x"}) # Call, Attribute def test_tmpdir(): import pytest td = TmpDir() assert td.copy == [] env = {} td.prepare(env) td.prepare(env) # check subsequent call assert list(env.keys()) == ["tmpdir"] assert td.strpth == env["tmpdir"] assert td.pth.exists() td.cleanup() assert not td.pth.exists() prevdir = Path().cwd() with tempfile.TemporaryDirectory() as otd: os.chdir(otd) text_pth = Path("my file.txt") text_pth.write_text("some\nlines\n") bin_pth = Path("file.bits") bin_pth.write_bytes(b"\x02\x03\x04\x05") td = TmpDir(["my file.txt", "file.bits"]) assert td.copy == ["my file.txt", "file.bits"] td.prepare(env) assert td.pth.exists() assert set(pth.name for pth in td.pth.iterdir()) == {"my file.txt", "file.bits"} assert text_pth.read_text() == (td.pth / "my file.txt").read_text() assert bin_pth.read_bytes() == (td.pth / "file.bits").read_bytes() assert td.sub_var("$tmpdir/my file.txt") == f"{td.strpth}/my file.txt" assert td.sub_var("${tmpdir}/my file.txt") == "${tmpdir}/my file.txt" assert td.sub_var("$tmpdirs/my file.txt") == "$tmpdirs/my file.txt" td.cleanup() assert not td.pth.exists() os.chdir(prevdir) # errors with pytest.raises(ValueError, match="copy must be a list"): TmpDir("not a list") td = TmpDir(["/not/a/file.txt"]) with pytest.raises(ValueError, match="not prepared"): td.sub_var("xyz") with pytest.raises(FileNotFoundError, match=r"cannot find /not/a/file\.txt"): td.prepare({}) td = TmpDir(["$DIR/file.txt"]) with pytest.raises(FileNotFoundError, match=r"cannot find /nope/file\.txt"): td.prepare({"DIR": "/nope"}) def test_file(): import pytest prevdir = Path().cwd() with tempfile.TemporaryDirectory() as otd: os.chdir(otd) td_pth = Path(otd) text_file = File("my file.txt", "some\nlines\n") text_pth = td_pth / "my file.txt" assert not text_pth.exists() env = {} text_file.prepare(env) text_file.prepare(env) # check subsequent call assert text_pth != text_file.pth assert env == {} assert text_pth.read_text() == "some\nlines\n" text_file.cleanup() assert not text_pth.exists() bin_file = File("file.bits", b"\x02\x03\x04\x05") bin_file.prepare(env) assert (td_pth / "file.bits").read_bytes() == b"\x02\x03\x04\x05" bin_file.cleanup() os.chdir(prevdir) # errors with pytest.raises(ValueError, match="file name must be str or path-like"): File(None, "some\nlines\n") with pytest.raises(ValueError, match="file content must be str or bytes"): File("my file.txt", None) def test_tester_from_yaml(): fd, fname = tempfile.mkstemp() with os.fdopen(fd, "w") as fp: fp.write( dedent( """\ exe: cat env: FOO: 1 tests: - in: one stdout: one sort: - env: FOO: 2 in: two sub: ["w", "RrR"] out: tRrRo """ ) ) tester = Tester.from_yaml(fname) os.unlink(fname) assert tester.exe == "cat" assert tester.env == {"FOO": "1"} assert len(tester) == 2 assert tester[0] == tester[-2] assert tester[0] != tester[-1] tests = [ Test(input="one", stdout="one", out_cmds={"sort": None}), Test( input="two", out="tRrRo", env={"FOO": "2"}, out_cmds={"sub": ["w", "RrR"]}, ), ] assert tester == Tester("cat", env={"FOO": 1}, tests=tests) assert tester.run({}) == 0 def test_tester_from_yaml_with_update(): import pytest pytest.importorskip("ruamel.yaml") fd, fname = tempfile.mkstemp() with os.fdopen(fd, "w") as fp: fp.write( dedent( """\ exe: cat env: FOO: '1' tests: - in: | this is the new expected result over two lines stdout: |- replace me! # some comment - in: a b c out: | d e f exitcode: 8 - in: here it is stderr: erase me - in: "tab\\tline" out: tabline - in: !!binary | AAAAAAAA4D8AAAAAAADQPw== # base64.b64encode(np.array([0.5, 0.25]).tobytes()) stdout: !!binary "" """ ) ) tester = Tester.from_yaml(fname, preferred="ruamel.yaml", update=True) tester.run({}) with open(fname, "r") as fp: new = fp.read() assert new == dedent( """\ exe: cat env: FOO: '1' tests: - in: | this is the new expected result over two lines stdout: | this is the new expected result over two lines # some comment - in: a b c out: | a b c exitcode: 0 - in: here it is stderr: '' - in: "tab\\tline" out: "tab\\tline" - in: !!binary | AAAAAAAA4D8AAAAAAADQPw== # base64.b64encode(np.array([0.5, 0.25]).tobytes()) stdout: !!binary | AAAAAAAA4D8AAAAAAADQPw== """ ) os.unlink(fname) def test_test(): import pytest # simple text pass test = Test(input="text", stdout="text", env={"FOO": 1}) test.prepare("cat", {}) assert not test.skip assert test.env == {"FOO": "1"} assert test.get_cmd() == "echo text | FOO=1 cat" result = test.run() assert result, result.describe_fail() assert result.failed == set() assert result == TestResult(["text\n"], [], 0, test) # simple text fail test = Test(input="\text", out="text") test.prepare("cat", {}) assert not test.skip assert test.get_cmd() == r"echo -e '\text' | cat" result = test.run() assert not result assert result.failed == {"out"} assert result == TestResult(["\text\n"], [], 0, test) # multiple fails test = Test("notafile", stdout="should be nothing", stderr="good file") test.prepare("ls", {}) assert test.get_cmd() == "ls notafile" result = test.run() assert not result assert result.failed == {"exitcode", "stdout", "stderr"} # multi-lines test = Test(input="one\ntwo", stdout="text") test.prepare("cat", {}) assert test.get_cmd() == dedent( """\ cat < file1.txt printf 'two' > file2.txt echo -e '\\ufeff02 1' > file3_with_bom.txt cat << EOF > 'last file.txt' 3 4 5 6 EOF ls -1 rm file1.txt file2.txt file3_with_bom.txt 'last file.txt'""" ) result = test.run() assert result, result.describe_fail() test.cleanup() os.chdir(prevdir) def test_out_cmds(): import pytest fd, fname = tempfile.mkstemp(suffix=".txt") with os.fdopen(fd, "w") as fp: fp.write("one\ntwo\nthree\nfour\n") test = Test(fname, out_cmds={"sort": None}, out="four\none\nthree\ntwo\n") test.prepare("cat", {}) assert test.get_cmd() == f"cat {fname} 2>&1 | sort" result = test.run() assert result, result.describe_fail() test = Test(fname, out_cmds={"grep": "o"}, stdout="one\ntwo\nfour\n") test.prepare("cat", {}) assert test.get_cmd() == f"cat {fname} | grep o" result = test.run() assert result, result.describe_fail() test = Test(fname, out_cmds={"grep": "none"}, stdout="") test.prepare("cat", {}) assert test.get_cmd() == f"cat {fname} | grep none" result = test.run() assert result, result.describe_fail() test = Test(fname, out_cmds={"grep-v": "o"}, stdout="three") test.prepare("cat", {}) assert test.get_cmd() == f"cat {fname} | grep -v o" result = test.run() assert result, result.describe_fail() test = Test( fname, out_cmds={"sub": ["o", "OO"]}, stdout="OOne\ntwOO\nthree\nfOOur\n" ) test.prepare("cat", {}) assert test.get_cmd() == f"cat {fname} | sed s/o/OO/" result = test.run() assert result, result.describe_fail() test = Test(fname, out_cmds={"head": 3, "sort": None}, stdout="one\nthree\ntwo\n") test.prepare("cat", {}) assert test.get_cmd() == f"cat {fname} | head -n 3 | sort" result = test.run() assert result, result.describe_fail() test = Test(fname, out_cmds={"tail": 1}, stdout="four") test.prepare("cat", {}) assert test.get_cmd() == f"cat {fname} | tail -n 1" result = test.run() assert result, result.describe_fail() # errors with pytest.raises(ValueError, match="unsupported grep type"): Test(fname, out_cmds={"grep": 1}) with pytest.raises(ValueError, match="sub should be a list of 2 str"): Test(fname, out_cmds={"sub": ["o"]}) with pytest.raises(ValueError, match="sub should be a list of 2 str"): Test(fname, out_cmds={"sub": [1, 2]}) test = Test(fname, out_cmds={"silly": None}) test.prepare("cat", {}) with pytest.raises(NotImplementedError, match="unsupported out cmd: silly=None"): test.get_cmd() with pytest.raises(NotImplementedError, match="unsupported out cmd: silly=None"): test.run() os.unlink(fname) proj-9.6.0/test/cli/test_cct.yaml000664 001754 001755 00000016114 14764566077 016646 0ustar00e012349e012349000000 000000 exe: cct tests: - args: -d 8 +proj=merc +R=1 in: 90 45 0 out: " 1.57079633 0.88137359 0.00000000 inf" # tests without specifying the number of decimals (by default: 10 for radians and degrees, 4 for meters) - args: -z 0 -t 0 +proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad in: 0.5 2 out: " 0.5000000000 2.0000000000 0.0000 0.0000" - args: -z 0 -t 0 +proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=deg in: 0.5 2 out: " 0.5000000000 2.0000000000 0.0000 0.0000" - args: -z 0 -t 0 +proj=pipeline +step +proj=unitconvert +xy_in=m +xy_out=km in: 0.5 2 out: " 0.0005 0.0020 0.0000 0.0000" # tests for which the number of decimals has been specified (-d 6) - args: -d 6 -z 0 -t 0 +proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad in: 0.5 2 out: " 0.500000 2.000000 0.000000 0.0000" - args: -d 6 -z 0 -t 0 +proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=deg in: 0.5 2 out: " 0.500000 2.000000 0.000000 0.0000" - args: -d 6 -z 0 -t 0 +proj=pipeline +step +proj=unitconvert +xy_in=m +xy_out=km in: 0.5 2 out: " 0.000500 0.002000 0.000000 0.0000" - comment: Test cct with object code initialization args: EPSG:8366 in: 3541657.3778 948984.2343 5201383.5231 2020.5 out: " 3541657.9112 948983.7503 5201383.2482 2020.5000" - comment: Test cct with object that is not a CRS args: - GEOGCRS["WGS 84",DATUM["World Geodetic System 1984 (G2139)",ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ANGLEUNIT["degree",0.0174532925199433]]] in: 0 0 0 sub: ["(_d)?\\.exe", ""] stderr: "cct: Input object is not a coordinate operation, but a CRS." exitcode: 1 - comment: Test cct with object name initialization args: - ITRF2014 to ETRF2014 (1) in: 3541657.3778 948984.2343 5201383.5231 2020.5 out: " 3541657.9112 948983.7503 5201383.2482 2020.5000" - comment: Test cct with object code initialization and file input file: - name: a content: 3541657.3778 948984.2343 5201383.5231 2020.5 - name: b content: 3541658.0000 948985.0000 5201384.0000 2020.5 args: "EPSG:8366 a b" out: |2 3541657.9112 948983.7503 5201383.2482 2020.5000 3541658.5334 948984.5160 5201383.7251 2020.5000 - comment: Test cct with WKT in a file file: - name: in.wkt content: | COORDINATEOPERATION["ITRF2014 to ETRF2014 (1)", VERSION["EUREF-Eur"], SOURCECRS[ GEODCRS["ITRF2014", DYNAMIC[ FRAMEEPOCH[2010]], DATUM["International Terrestrial Reference Frame 2014", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[Cartesian,3], AXIS["(X)",geocentricX, ORDER[1], LENGTHUNIT["metre",1]], AXIS["(Y)",geocentricY, ORDER[2], LENGTHUNIT["metre",1]], AXIS["(Z)",geocentricZ, ORDER[3], LENGTHUNIT["metre",1]], ID["EPSG",7789]]], TARGETCRS[ GEODCRS["ETRF2014", DATUM["European Terrestrial Reference Frame 2014", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[Cartesian,3], AXIS["(X)",geocentricX, ORDER[1], LENGTHUNIT["metre",1]], AXIS["(Y)",geocentricY, ORDER[2], LENGTHUNIT["metre",1]], AXIS["(Z)",geocentricZ, ORDER[3], LENGTHUNIT["metre",1]], ID["EPSG",8401]]], METHOD["Time-dependent Position Vector tfm (geocentric)", ID["EPSG",1053]], PARAMETER["X-axis translation",0, LENGTHUNIT["millimetre",0.001], ID["EPSG",8605]], PARAMETER["Y-axis translation",0, LENGTHUNIT["millimetre",0.001], ID["EPSG",8606]], PARAMETER["Z-axis translation",0, LENGTHUNIT["millimetre",0.001], ID["EPSG",8607]], PARAMETER["X-axis rotation",0, ANGLEUNIT["milliarc-second",4.84813681109536E-09], ID["EPSG",8608]], PARAMETER["Y-axis rotation",0, ANGLEUNIT["milliarc-second",4.84813681109536E-09], ID["EPSG",8609]], PARAMETER["Z-axis rotation",0, ANGLEUNIT["milliarc-second",4.84813681109536E-09], ID["EPSG",8610]], PARAMETER["Scale difference",0, SCALEUNIT["parts per billion",1E-09], ID["EPSG",8611]], PARAMETER["Rate of change of X-axis translation",0, LENGTHUNIT["millimetres per year",3.16887651727315E-11], ID["EPSG",1040]], PARAMETER["Rate of change of Y-axis translation",0, LENGTHUNIT["millimetres per year",3.16887651727315E-11], ID["EPSG",1041]], PARAMETER["Rate of change of Z-axis translation",0, LENGTHUNIT["millimetres per year",3.16887651727315E-11], ID["EPSG",1042]], PARAMETER["Rate of change of X-axis rotation",0.085, ANGLEUNIT["milliarc-seconds per year",1.53631468932076E-16], ID["EPSG",1043]], PARAMETER["Rate of change of Y-axis rotation",0.531, ANGLEUNIT["milliarc-seconds per year",1.53631468932076E-16], ID["EPSG",1044]], PARAMETER["Rate of change of Z-axis rotation",-0.77, ANGLEUNIT["milliarc-seconds per year",1.53631468932076E-16], ID["EPSG",1045]], PARAMETER["Rate of change of Scale difference",0, SCALEUNIT["parts per billion per year",3.16887651727315E-17], ID["EPSG",1046]], PARAMETER["Parameter reference epoch",1989, TIMEUNIT["year",31556925.445], ID["EPSG",1047]]] args: "@in.wkt" in: 3541657.3778 948984.2343 5201383.5231 2020.5 out: " 3541657.9112 948983.7503 5201383.2482 2020.5000" - comment: Test cct with input file with UTF-8 BOM marker file: name: input_file1_with_utf8_bom.txt content: "\uFEFF0 3 0\n" args: +proj=noop input_file1_with_utf8_bom.txt # no BOM with output out: " 0.0000 3.0000 0.0000 inf" - comment: Test cct with non existing input file args: +proj=noop i_do_not_exist.txt stderr: "Cannot open file i_do_not_exist.txt" exitcode: 1 proj-9.6.0/test/cli/test_cs2cs_datumfile.yaml000664 001754 001755 00000007313 14764566077 021145 0ustar00e012349e012349000000 000000 comment: > Test various transformations depending on datum files that are not always available exe: cs2cs env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES tests: - comment: 1st through ntv1, 2nd through conus args: +proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat,conus +to +proj=latlong +datum=NAD83 in: | 111d00'00.000"W 44d00'00.000"N 0.0 111d00'00.000"W 39d00'00.000"N 0.0 out: |- 111d0'3.208"W 43d59'59.732"N 0.000 111d0'2.604"W 38d59'59.912"N 0.000 - comment: As above, but without ntv1 everything goes through conus file # see data/CMakeLists.txt for "dir with space/myconus" args: +proj=latlong +ellps=clrk66 '+nadgrids="dir with space/myconus"' +to +proj=latlong +datum=NAD83 in: | 111d00'00.000"W 44d00'00.000"N 0.0 111d00'00.000"W 39d00'00.000"N 0.0 out: |- 111d0'2.788"W 43d59'59.725"N 0.000 111d0'2.604"W 38d59'59.912"N 0.000 - comment: Test --bbox -141.01,40.04,-47.74,83.17 NAD27 NAD83 (using NTv2) args: --bbox -141.01,40.04,-47.74,83.17 NAD27 NAD83 in: 40.5 -60 out: | 40d30'0.368"N 59d59'56.617"W 0.000 - comment: Test --area "USA - CONUS including EEZ" NAD27 NAD83 (using conus) args: --area "USA - CONUS including EEZ" NAD27 NAD83 in: | 44 -111 40.5 -60 out: | 43d59'59.725"N 111d0'2.788"W 0.000 * * inf - comment: Test MD used where available args: +proj=latlong +ellps=clrk66 +nadgrids=MD,conus +to +proj=latlong +datum=NAD83 in: | 79d58'00.000"W 37d02'00.000"N 0.0 79d58'00.000"W 36d58'00.000"N 0.0 out: |- 79d58'0.005"W 37d1'59.998"N 0.000 79d57'59.128"W 36d58'0.501"N 0.000 - comment: Similar to previous test, but using only conus args: +proj=latlong +ellps=clrk66 +nadgrids=conus +to +proj=latlong +datum=NAD83 in: | 79d58'00.000"W 37d02'00.000"N 0.0 79d58'00.000"W 36d58'00.000"N 0.0 out: |- 79d57'59.126"W 37d2'0.501"N 0.000 79d57'59.128"W 36d58'0.501"N 0.000 - comment: > Test that we use grid shift files even if we are right on the edge or even a wee bit outside (#141). # Our test points are (1) right on mesh corner, (2) outside but within # epsilon (3) inside a bit (4) outside by more than epsilon args: +proj=latlong +ellps=WGS84 +nadgrids=ntf_r93.gsb,null +to +proj=latlong +datum=WGS84 -f %.12f in: | -5.5 52.0 -5.5000000000001 52.0000000000001 -5.4999 51.9999 -5.5001 52.0 out: |- -5.501106465528 51.999890470284 0.000000000000 -5.501106465529 51.999890470284 0.000000000000 -5.501006458305 51.999790470257 0.000000000000 -5.500100000000 52.000000000000 0.000000000000 - comment: Inverted version of previous test args: +proj=latlong +datum=WGS84 +to +proj=latlong +ellps=WGS84 +nadgrids=ntf_r93.gsb,null -f %.12f in: | -5.5 52.0 -5.5000000000001 52.0000000000001 -5.4999 51.9999 -5.5001 52.0 out: |- -5.498893534472 52.000109529716 0.000000000000 -5.498893534472 52.000109529717 0.000000000000 -5.498793593803 52.000009531513 0.000000000000 -5.500100000000 52.000000000000 0.000000000000 - comment: "NAD27 -> NAD83: 1st through ntv1 or ntv2, 2nd through conus" args: NAD27 NAD83 -f %.4f in: | 55d00'00.000"N 111d00'00.000"W 0.0 39d00'00.000"N 111d00'00.000"W 0.0 out: |- 55.0001 -111.0009 0.0000 39.0000 -111.0007 0.0000 - comment: WGS84 (2D) -> WGS84+EGM96 args: +init=epsg:4326 +to +init=epsg:4326 +geoidgrids=egm96_15.gtx in: 2dE 49dN 0 out: |- 2.00 49.00 0.00 - comment: WGS84 (3D) -> WGS84+EGM96 args: +init=epsg:4979 +to +init=epsg:4326 +geoidgrids=egm96_15.gtx in: 2dE 49dN 0 out: |- 2.00 49.00 -45.06 - comment: WGS84 (2D), promoted to 3D -> WGS84+EGM96 args: --3d +init=epsg:4326 +to +init=epsg:4326 +geoidgrids=egm96_15.gtx in: 2dE 49dN 0 out: |- 2.00 49.00 -45.06 proj-9.6.0/test/cli/test_cs2cs_flaky.yaml000664 001754 001755 00000002071 14764566077 020275 0ustar00e012349e012349000000 000000 comment: > Do some testing of flaky transformation that do not depend on datum files. exe: cs2cs tests: - comment: Test healpix inverse projection on sphere args: > +proj=latlong +a=1 +lon_0=0 +to +proj=healpix +a=1 +lon_0=0 -f %.5f -I in: | 0 0.7853981633974483 -1.5707963267948966 0 out: |- 0.00000 41.81031 0.00000 -90.00000 0.00000 0.00000 - args: > +proj=latlong +a=5 +to +proj=healpix +a=5 -f %.5f -I in: | 0.0 0.0 0.0 3.9269908169872414 0.0 -3.9269908169872414 7.853981633974483 0.0 -7.853981633974483 0.0 -15.707963267948966 0.0 -11.780972450961723 7.853981633974483 -11.780972450961723 -7.853981633974483 1.437378399445537 5.364369216432778 1.437378399445537 -5.364369216432778 out: |- 0.00000 0.00000 0.00000 0.00000 41.81031 0.00000 0.00000 -41.81031 0.00000 90.00000 0.00000 0.00000 -90.00000 0.00000 0.00000 -180.00000 0.00000 0.00000 -180.00000 90.00000 0.00000 -180.00000 -90.00000 0.00000 0.00000 60.00000 0.00000 0.00000 -60.00000 0.00000 proj-9.6.0/test/cli/test_cs2cs_ignf.yaml000664 001754 001755 00000011461 14764566077 020115 0ustar00e012349e012349000000 000000 comment: > Test some points in IGNF managed SRS. The expected coordinates have been calculated by other means. exe: cs2cs env: PROJ_NETWORK: ON tests: - args: +init=IGNF:NTFG +to +init=IGNF:RGF93G in: 3.300866856 43.4477976569 0.0000 out: | 3d18'0.915"E 43d26'52.077"N 0.000 - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 600000.0000 2600545.4523 0.0000 out: "652760.737\t7033791.243 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 135638.3592 2418760.4094 0.0000 out: "187194.062\t6855928.882 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 998137.3947 2413822.2844 0.0000 out: "1049052.258\t6843776.562 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 600000.0000 2200000.0000 0.0000 out: "649398.872\t6633524.191 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 311552.5340 1906457.4840 0.0000 out: "358799.172\t6342652.486 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 960488.4138 1910172.8812 0.0000 out: "1007068.686\t6340907.237 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 600000.0000 1699510.8340 0.0000 out: "645204.279\t6133556.746 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:LAMB93 -f %.3f in: 1203792.5981 626873.17210 0.0000 out: "1238837.253\t5057451.037 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 600000.0000 2600545.4523 0.0000 out: "179040.148\t5610495.275 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 135638.3592 2418760.4094 0.0000 out: "-303729.363\t5410118.356 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 998137.3947 2413822.2844 0.0000 out: "592842.792\t5410120.554 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 600000.0000 2200000.0000 0.0000 out: "179041.670\t5209746.080 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 311552.5340 1906457.4840 0.0000 out: "-96825.465\t4909184.136 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 960488.4138 1910172.8812 0.0000 out: "523880.019\t4909191.141 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 600000.0000 1699510.8340 0.0000 out: "179047.633\t4708817.007 0.000" - args: +init=IGNF:LAMBE +to +init=IGNF:GEOPORTALFXX -f %.3f in: 1203792.5981 626873.17210 0.0000 out: "658259.467\t3623786.764 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: 2d20'11.4239243" 50d23'59.7718445" 0.0 out: "179040.151\t5610495.281 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: -3d57'49.4051448" 48d35'59.7121716" 0.0 out: "-303729.365\t5410118.352 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: 7d44'12.1439796" 48d35'59.7832558" 0.0 out: "592842.794\t5410120.550 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: 2d20'11.4951975" 46d47'59.8029841" 0.0 out: "179041.668\t5209746.077 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: -1d15'48.9240599" 44d05'59.8251878" 0.0 out: "-96825.467\t4909184.138 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: 6d50'12.2276489" 44d06'00.0517019" 0.0 out: "523880.022\t4909191.143 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: 2d20'11.7754730" 42d18'00.0824436" 0.0 out: "179047.634\t4708817.010 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:GEOPORTALFXX -f %.3f in: 9d32'12.6680218" 41d24'00.3542556" 0.0 out: "730783.054\t4608637.873 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: 2d20'11.4239243" 50d23'59.7718445" 0.0 out: "260098.730\t6140682.441 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: -3d57'49.4051448" 48d35'59.7121716" 0.0 out: "-441239.699\t5880610.004 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: 7d44'12.1439796" 48d35'59.7832558" 0.0 out: "861246.246\t5880612.827 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: 2d20'11.4951975" 46d47'59.8029841" 0.0 out: "260100.934\t5625762.156 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: -1d15'48.9240599" 44d05'59.8251878" 0.0 out: "-140662.197\t5252490.165 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: 6d50'12.2276489" 44d06'00.0517019" 0.0 out: "761061.291\t5252498.745 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: 2d20'11.7754730" 42d18'00.0824436" 0.0 out: "260109.601\t5009175.714 0.000" - args: +init=IGNF:RGF93G +to +init=IGNF:MILLER -f %.3f in: 9d32'12.6680218" 41d24'00.3542556" 0.0 out: "1061637.534\t4889066.592 0.000" - args: +init=IGNF:RGR92 +to +init=IGNF:REUN47 -f %.3f in: 3356123.5400 1303218.3090 5247430.6050 out: "3353420.949\t1304075.021 5248935.144" proj-9.6.0/test/cli/test_cs2cs_locale.sh000775 001754 001755 00000006644 14764566077 020113 0ustar00e012349e012349000000 000000 #!/bin/bash # Script to do some locale testing. # See test_cs2cs_various.yaml for general CLI testing. set -e TEST_CLI_DIR=$(dirname $0) EXE=$1 if test -z "${EXE}"; then echo "Usage: ${0} " exit 1 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=$(basename $0 .sh)_out # echo "doing tests into file ${OUT}, please wait" rm -f ${OUT} # echo "##############################################################" >> ${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 Test input in grad >> ${OUT} # $EXE EPSG:4807 EPSG:27572 -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 from geodetic latlong to geocentric latlong >> ${OUT} # $EXE +proj=latlong +datum=WGS84 \ +to +proj=latlong +datum=WGS84 +geoc \ -E >>${OUT} <> ${OUT} echo Test conversion from geocentric latlong to geodetic latlong >> ${OUT} # $EXE +proj=latlong +datum=WGS84 +geoc \ +to +proj=latlong +datum=WGS84 \ -E >>${OUT} < Test NTv2 support The expected output is modified to use a downsampled version of ntv2_0.gsb found in PROJ's data/tests directory. exe: cs2cs env: PROJ_NETWORK: NO PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES tests: - comment: Point in the ONwinsor subgrid args: +proj=latlong +ellps=clrk66 +nadgrids=ntv2_0.gsb +to +proj=latlong +datum=NAD83 -w4 in: | 82d00'00.000"W 42d00'00.000"N 0.0 82d00'01.000"W 42d00'00.000"N 0.0 82d00'02.000"W 42d00'00.000"N 0.0 84d00'00.000"W 42d00'00.000"N 0.0 out: | 81d59'59.6104"W 42d0'0.1602"N 0.000 82d0'0.6104"W 42d0'0.1602"N 0.000 82d0'1.6104"W 42d0'0.1602"N 0.000 83d59'59.8623"W 42d0'0.1807"N 0.000 - comment: Try with NTv2 and NTv1 together ... falls back to NTv1 args: +proj=latlong +ellps=clrk66 +nadgrids=ntv2_0.gsb,ntv1_can.dat,conus +to +proj=latlong +datum=NAD83 -w4 in: | 99d00'00.000"W 65d00'00.000"N 0.0 111d00'00.000"W 46d00'00.000"N 0.0 111d00'00.000"W 47d30'00.000"N 0.0 out: | 99d0'1.5926"W 65d0'1.3478"N 0.000 111d0'3.1897"W 45d59'59.7489"N 0.000 111d0'2.8054"W 47d29'59.9899"N 0.000 - comment: Switching between NTv2 subgrids # Initial guess is in ALraymnd, going to parent CAwest afterwards args: +proj=latlong +datum=NAD83 +to +proj=latlong +ellps=clrk66 +nadgrids=ntv2_0.gsb -d 8 in: -112.5839956 49.4914451 0 out: "-112.58307621\t49.49144267 0.00000000" - comment: Interpolating very close (and sometimes a bit outside) to the edges a NTv2 subgrid (#209) args: +proj=latlong +datum=NAD83 +to +proj=latlong +ellps=clrk66 +nadgrids=ntv2_0.gsb -d 8 in: | -115.58333333 51.25000000 0 -115.58333333 51.25000010 0 -115.58333334 51.25000000 0 -115.49166667 51.07500000 0 -115.49166668 51.07500000 0 -115.49166667 51.07499990 0 out: | -115.58228512 51.24997866 0.00000000 -115.58228512 51.24997876 0.00000000 -115.58228513 51.24997866 0.00000000 -115.49063575 51.07497568 0.00000000 -115.49063576 51.07497568 0.00000000 -115.49063575 51.07497558 0.00000000 - comment: Attempt first with ntv2_0.gsb and then conus args: +proj=longlat +datum=NAD27 +to +proj=longlat +datum=WGS84 -d 8 in: -111.5 45.26 out: "-111.50079772\t45.25992835 0.00000000" - comment: "NAD27 -> NAD83: 1st through ntv2, 2nd through conus" args: NAD27 NAD83 in: | 55d00'00.000"N 111d00'00.000"W 0.0 39d00'00.000"N 111d00'00.000"W 0.0 out: | 55d0'0.367"N 111d0'3.231"W 0.000 38d59'59.912"N 111d0'2.604"W 0.000 proj-9.6.0/test/cli/test_cs2cs_various.yaml000664 001754 001755 00000146651 14764566077 020674 0ustar00e012349e012349000000 000000 comment: > Test various transformations that do not depend on datum files. exe: cs2cs tests: - comment: Test raw ellipse to raw ellipse args: +proj=latlong +ellps=clrk66 +to +proj=latlong +ellps=bessel in: | 79d58'00.000"W 37d02'00.000"N 0.0 79d58'00.000"W 36d58'00.000"N 0.0 out: | 79d58'W 37d2'N 0.000 79d58'W 36d58'N 0.000 - comment: Test NAD27 to raw ellipse args: +proj=latlong +datum=NAD27 +to +proj=latlong +ellps=bessel in: 79d00'00.000"W 35d00'00.000"N 0.0 out: | 79dW 35dN 0.000 - comment: Between two 3parameter approximations on same ellipsoid args: +proj=latlong +ellps=bessel +towgs84=5,0,0 +to +proj=latlong +ellps=bessel +towgs84=1,0,0 in: | 0d00'00.000"W 0d00'00.000"N 0.0 79d00'00.000"W 45d00'00.000"N 0.0 out: | 0dE 0dN 0.000 78d59'59.821"W 44d59'59.983"N 0.000 - comment: 3param to raw ellipsoid on same ellipsoid args: +proj=latlong +ellps=bessel +towgs84=5,0,0 +to +proj=latlong +ellps=bessel in: | 0d00'00.000"W 0d00'00.000"N 0.0 79d00'00.000"W 45d00'00.000"N 0.0 out: | 0dE 0dN 0.000 79dW 45dN 0.000 - comment: Test simple prime meridian handling args: +proj=latlong +datum=WGS84 +pm=greenwich +to +proj=latlong +datum=WGS84 +pm=1 in: | 0d00'00.000"W 0d00'00.000"N 0.0 79d00'00.000"W 45d00'00.000"N 0.0 out: | 1dW 0dN 0.000 80dW 45dN 0.000 - comment: Test support for the lon_wrap switch args: +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 +lon_wrap=180 in: | 1d00'00.000"W 10d00'00.000"N 0.0 0d00'00.000"W 10d00'00.000"N 0.0 0d00'00.000"E 10d00'00.000"N 0.0 1d00'00.000"E 45d00'00.000"N 0.0 179d00'00.000"E 45d00'00.000"N 0.0 181d00'00.000"E 45d00'00.000"N 0.0 350d00'00.000"E 45d00'00.000"N 0.0 370d00'00.000"E 45d00'00.000"N 0.0 out: | 359dE 10dN 0.000 0dE 10dN 0.000 0dE 10dN 0.000 1dE 45dN 0.000 179dE 45dN 0.000 181dE 45dN 0.000 350dE 45dN 0.000 10dE 45dN 0.000 - comment: Test simple prime meridian handling within a projection args: +proj=utm +zone=11 +datum=WGS84 +pm=3 +to +proj=latlong +datum=WGS84 +pm=1w in: 500000 3000000 out: | 113dW 27d7'20.891"N 0.000 - comment: Test input in grad args: EPSG:4807 EPSG:27572 in: 64.44444444 2.9586342556 out: | 760724.02 3457334.86 0.00 - comment: Test geocentric x/y/z generation args: +proj=latlong +datum=WGS84 +to +proj=geocent +datum=WGS84 in: | 0d00'00.001"W 0d00'00.001"N 0.0 0d00'00.001"W 0d00'00.001"N 10.0 79d00'00.000"W 45d00'00.000"N 0.0 45d00'00.000"W 89d59'59.990"N 0.0 out: | 6378137.00 -0.03 0.03 6378147.00 -0.03 0.03 861996.98 -4434590.01 4487348.41 0.22 -0.22 6356752.31 - comment: Test geocentric x/y/z consumption args: +proj=geocent +datum=WGS84 +to +proj=latlong +datum=WGS84 in: | 6378137.00 -0.00 0.00 6378147.00 -0.00 0.00 861996.98 -4434590.01 4487348.41 0.00 -0.00 6356752.31 out: | 0dE 0dN 0.000 0dE 0dN 10.000 79dW 45dN 0.001 0dE 90dN -0.004 - comment: Test conversion from geodetic latlong to geocentric latlong args: +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 +geoc in: | 0d00'00.000"W 0d00'00.000"N 0.0 79d00'00.000"W 45d00'00.000"N 0.0 12d00'00.000"W 45d00'00.000"N 0.0 0d00'00.000"W 90d00'00.000"N 0.0 out: | 0dE 0dN 0.000 79dW 44d48'27.276"N 0.000 12dW 44d48'27.276"N 0.000 0dE 90dN 0.000 - comment: Test conversion from geocentric latlong to geodetic latlong args: +proj=latlong +datum=WGS84 +geoc +to +proj=latlong +datum=WGS84 in: | 0d00'00.000"W 0d00'00.000"N 0.0 79d00'00.000"W 44d48'27.276"N 0.000 12d00'00.000"W 44d48'27.276"N 0.0 0d00'00.000"W 90d00'00.000"N 0.0 out: | 0dE 0dN 0.000 79dW 45dN 0.000 12dW 45dN 0.000 0dE 90dN 0.000 - comment: "Test stere projection (re: win32 ticket 12)" args: +proj=latlong +datum=WGS84 +to +proj=stere +lat_0=90 +lon_0=0 +lat_ts=70 +datum=WGS84 in: 105 40 out: | 5577808.93 1494569.40 0.00 - comment: Test stere without lat_ts (#147) args: +proj=latlong +datum=WGS84 +to +proj=stere +lat_0=40 +lon_0=10 +datum=WGS84 in: 20 45 out: | 789468.08 602385.33 0.00 - comment: "Test sts projection (re: ticket 12)" args: +proj=latlong +ellps=WGS84 +to +proj=kav5 +ellps=WGS84 +units=m in: 4.897000 52.371000 out: | 383646.09 5997047.89 0.00 - comment: "Test sts projection (re: ticket 12) -- inverse" args: +proj=kav5 +ellps=WGS84 +units=m +to +proj=latlong +ellps=WGS84 in: 383646.088858 5997047.888175 out: | 4d53'49.2"E 52d22'15.6"N 0.000 - comment: "Test RSO Borneo projection (re: ticket 62)" args: > +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 in: 116d2'11.12630 5d54'19.90183 out: | 704570.40 653979.68 0.00 - comment: Test extended transverse mercator (#97) args: > +proj=etmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 +to +proj=latlong +datum=WGS84 in: | 10000 20000 500000 2000000 1000000 2000000 2000000 2000000 4000000 2000000 out: | 20dW 0dN 0.000 15d22'16.108"W 17d52'53.478"N 0.000 10d40'55.532"W 17d42'48.526"N 0.000 1d32'21.33"W 17d3'47.233"N 0.000 15d4'42.357"E 14d48'56.372"N 0.000 - comment: Test extended transverse mercator inverse (#97) args: > +proj=latlong +datum=WGS84 +to +proj=etmerc +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 in: | 0dN 0.000 15d22'16.108"W 17d52'53.478"N 0.000 10d40'55.532"W 17d42'48.526"N 0.000 1d32'21.33"W 17d3'47.233"N 0.000 15d4'42.357"E 14d48'56.372"N 0.000 - comment: Test transverse mercator (#97) args: > +proj=tmerc +approx +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 +to +proj=latlong +datum=WGS84 in: | 10000 20000 500000 2000000 1000000 2000000 2000000 2000000 4000000 2000000 out: | 20dW 0dN 0.000 15d22'16.108"W 17d52'53.478"N 0.000 10d40'55.532"W 17d42'48.526"N 0.000 1d32'21.399"W 17d3'47.244"N 0.000 15d4'6.539"E 14d49'7.331"N 0.000 - comment: Test transverse mercator inverse (#97) args: > +proj=latlong +datum=WGS84 +to +proj=tmerc +approx +k=0.998 +lon_0=-20 +datum=WGS84 +x_0=10000 +y_0=20000 in: | 0dN 0.000 15d22'16.108"W 17d52'53.478"N 0.000 10d40'55.532"W 17d42'48.526"N 0.000 1d32'21.33"W 17d3'47.233"N 0.000 15d4'42.357"E 14d48'56.372"N 0.000 out: | 2278812.96 20000.00 0.00 499999.99 2000000.01 0.00 999999.99 1999999.99 0.00 2000000.03 1999999.62 0.00 3999967.33 1999855.31 0.00 - comment: Test robinson projection (#113) args: +proj=latlong +datum=WGS84 +to +proj=robin +datum=WGS84 in: | -30 40 -35 45 20 40 out: | -2612095.95 4276351.58 0.00 -2963455.42 4805073.65 0.00 1741397.30 4276351.58 0.00 - comment: Test robinson inverse projection (#113) args: +proj=robin +datum=WGS84 +to +proj=latlong +datum=WGS84 in: | -2612095.95 4276351.58 0.00 -2963455.42 4805073.65 0.00 1741397.30 4276351.58 0.00 out: | 30d0'0.004"W 40d0'0.066"N 0.000 35dW 45dN 0.000 20d0'0.002"E 40d0'0.066"N 0.000 - comment: "Test hammer projection (pull request #329)" args: +proj=latlong +datum=WGS84 +to +proj=hammer +datum=WGS84 in: | -30 40 -35 45 20 40 out: | -2711575.08 4395506.62 0.00 -2964412.70 4929091.33 0.00 1811748.54 4377349.50 0.00 - comment: "Test hammer inverse projection (pull request #329)" args: +proj=hammer +datum=WGS84 +to +proj=latlong +datum=WGS84 in: | -2711575.08 4395506.62 0.00 -2964412.70 4929091.33 0.00 1811748.54 4377349.50 0.00 out: | 30dW 40dN 0.000 35dW 45dN 0.000 20dE 40dN 0.000 - comment: Test healpix forward projection on sphere args: +proj=latlong +R=1 +lon_0=0 +to +proj=healpix +R=1 +lon_0=0 -f %.5f in: | 0 41.81031 -90 0 out: | 0.00000 0.78540 0.00000 -1.57080 0.00000 0.00000 - args: +proj=latlong +R=5 +to +proj=healpix +R=5 -f %.5f in: | 0 0 0 41.810314895778596 0 -41.810314895778596 90.0 0 -90.0 0 -180 0 -180 90.0 -180 -90.0 0 60.0 0 -60.0 out: | 0.00000 0.00000 0.00000 0.00000 3.92699 0.00000 0.00000 -3.92699 0.00000 7.85398 0.00000 0.00000 -7.85398 0.00000 0.00000 -15.70796 0.00000 0.00000 -11.78097 7.85398 0.00000 -11.78097 -7.85398 0.00000 1.43738 5.36437 0.00000 1.43738 -5.36437 0.00000 - comment: Test healpix forward projection on ellipsoid args: > +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 +to +proj=healpix +a=1 +lon_0=0 +ellps=WGS84 -f %.5f in: | 0 41.937853904844985 -90 0 out: | 0.00000 0.78452 0.00000 -1.56904 0.00000 0.00000 - args: > +proj=latlong +a=5 +e=0.8 +r_a=4.3220011711888882 +to +proj=healpix +a=5 +e=0.8 +r_a=4.3220011711888882 -f %.5f in: | 0 0 0 41.810314895778596 0 -41.810314895778596 90.0 0 -90.0 0 -180 0 -180 90.0 -180 -90.0 0 60.0 0 -60.0 out: | 0.00000 0.00000 0.00000 0.00000 2.05479 0.00000 0.00000 -2.05479 0.00000 6.78898 0.00000 0.00000 -6.78898 0.00000 0.00000 -13.57797 0.00000 0.00000 -10.18348 6.78898 0.00000 -10.18348 -6.78898 0.00000 0.00000 3.35128 0.00000 0.00000 -3.35128 0.00000 - comment: Test healpix inverse projection on ellipsoid args: > +proj=latlong +a=1 +lon_0=0 +ellps=WGS84 +to +proj=healpix +a=1 +lon_0=0 +ellps=WGS84 -f %.5f -I in: | 0 0.7853981633974483 -1.5707963267948966 0 out: | * * inf -90.10072 0.00000 0.00000 - args: > +proj=latlong +a=5 +e=0.8 +r_a=4.3220011711888882 +to +proj=healpix +a=5 +e=0.8 +r_a=4.3220011711888882 -f %.5f -I in: | 0.0 0.0 0.0 2.0547874222147415 0.0 -2.0547874222147415 6.788983564106746 0.0 -6.788983564106746 0.0 -13.577967128213492 0.0 -10.183475346160119 6.788983564106746 -10.183475346160119 -6.788983564106746 0.0 3.351278550178025 0.0 -3.351278550178025 out: | 0.00000 0.00000 0.00000 0.00000 39.58811 0.00000 0.00000 -39.58811 0.00000 90.00000 0.00000 0.00000 -90.00000 0.00000 0.00000 -180.00000 0.00000 0.00000 -180.00000 90.00000 0.00000 -180.00000 -90.00000 0.00000 0.00000 59.23640 0.00000 0.00000 -59.23640 0.00000 - comment: Test rHEALPix forward projection on sphere north=0 south=0 args: > +proj=latlong +R=5 +to +proj=rhealpix +R=5 +north_square=0 +south_square=0 -f %.5f in: | -180 30.0 -180 -25.714285714285715 0 0 60.0 41.809314895778598 out: | -15.70796 2.94524 0.00000 -15.70796 -2.55579 0.00000 0.00000 0.00000 0.00000 5.23599 3.92691 0.00000 - comment: Test rHEALPix forward projection on sphere north=1 south=1 args: > +proj=latlong +R=5 +to +proj=rhealpix +R=5 +north_square=1 +south_square=1 -f %.5f in: | -180 30.0 -180 -25.714285714285715 0 0 60.0 41.809314895778598 out: | -15.70796 2.94524 0.00000 -15.70796 -2.55579 0.00000 0.00000 0.00000 0.00000 5.23599 3.92691 0.00000 - comment: Test rHEALPix inverse projection on sphere north=0 south=0 args: > +proj=latlong +R=5 +to +proj=rhealpix +R=5 +north_square=0 +south_square=0 -f %.5f -I in: | 0.0 0.0 0.0 3.9269908169872414 0.0 -3.9269908169872414 7.853981633974483 0.0 -7.853981633974483 0.0 out: | 0.00000 0.00000 0.00000 0.00000 41.81031 0.00000 0.00000 -41.81031 0.00000 90.00000 0.00000 0.00000 -90.00000 0.00000 0.00000 - comment: Test rHEALPix inverse projection on sphere north=1 south=1 args: > +proj=latlong +R=5 +to +proj=rhealpix +R=5 +north_square=1 +south_square=1 -f %.5f -I in: | 0.0 0.0 0.0 3.9269908169872414 0.0 -3.9269908169872414 7.853981633974483 0.0 -7.853981633974483 0.0 out: | 0.00000 0.00000 0.00000 0.00000 41.81031 0.00000 0.00000 -41.81031 0.00000 90.00000 0.00000 0.00000 -90.00000 0.00000 0.00000 - comment: Test rHEALPix forward projection on ellipsoid north=0 south=0 args: > +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 %.5f in: | 0 0 0 41.810314895778596 0 -41.810314895778596 90.0 0 -90.0 0 out: | 0.00000 0.00000 0.00000 0.00000 2.05479 0.00000 0.00000 -2.05479 0.00000 6.78898 0.00000 0.00000 -6.78898 0.00000 0.00000 - comment: Test rHEALPix forward projection on ellipsoid north=1 south=1 args: > +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 %.5f in: | 0 0 0 41.810314895778596 0 -41.810314895778596 90.0 0 -90.0 0 out: | 0.00000 0.00000 0.00000 0.00000 2.05479 0.00000 0.00000 -2.05479 0.00000 6.78898 0.00000 0.00000 -6.78898 0.00000 0.00000 - comment: Test rHEALPix inverse projection on ellipsoid north=0 south=0 args: > +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 %.5f in: | 0.0 0.0 0.0 2.0547874222147415 0.0 -2.0547874222147415 6.788983564106746 0.0 -6.788983564106746 0.0 out: | 0.00000 0.00000 0.00000 0.00000 39.58811 0.00000 0.00000 -39.58811 0.00000 90.00000 0.00000 0.00000 -90.00000 0.00000 0.00000 - comment: Test rHEALPix inverse projection on ellipsoid north=1 south=1 args: > +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 %.5f in: | 0.0 0.0 0.0 2.0547874222147415 0.0 -2.0547874222147415 6.788983564106746 0.0 -6.788983564106746 0.0 out: | 0.00000 0.00000 0.00000 0.00000 39.58811 0.00000 0.00000 -39.58811 0.00000 90.00000 0.00000 0.00000 -90.00000 0.00000 0.00000 - comment: Test geos on a sphere args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere in: | 16d11'8" 58d35'31" -43d11'47" -22d54'30" 18d25'26" -33d55'31" 47d58'42" 29d22'11" out: | 849736.77 4960015.43 0.00 -3780930.93 -2326595.36 0.00 1608689.65 -3412115.56 0.00 3825202.59 2885980.79 0.00 - comment: Test geos on a ellipsoid args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 in: | 16d11'8" 58d35'31" -43d11'47" -22d54'30" 18d25'26" -33d55'31" 47d58'42" 29d22'11" out: | 852862.53 4945122.70 0.00 -3787026.57 -2314765.32 0.00 1612331.00 -3397031.37 0.00 3832522.65 2872185.29 0.00 - comment: Test inv geos on a sphere args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere -I in: | 849736.77 4960015.43 -3780930.93 -2326595.36 1608689.65 -3412115.56 3825202.59 2885980.79 out: | 16d11'8"E 58d35'31"N 0.000 43d11'47"W 22d54'30"S 0.000 18d25'26"E 33d55'31"S 0.000 47d58'42"E 29d22'11"N 0.000 - comment: Test inv geos on a ellipsoid args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 -I in: | 852862.53 4945122.70 -3787026.57 -2314765.32 1612331.00 -3397031.37 3832522.65 2872185.29 out: | 16d11'8"E 58d35'31"N 0.000 43d11'47"W 22d54'30"S 0.000 18d25'26"E 33d55'31"S 0.000 47d58'42"E 29d22'11"N 0.000 - comment: Test geos on a sphere with alternate sweep args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere +sweep=x in: | 16d11'8" 58d35'31" -43d11'47" -22d54'30" 18d25'26" -33d55'31" 47d58'42" 29d22'11" out: | 841586.28 4961396.21 0.00 -3772913.22 -2339604.71 0.00 1601377.77 -3415545.15 0.00 3812722.89 2902474.62 0.00 - comment: Test geos on a ellipsoid with alternate sweep args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 +sweep=x in: | 16d11'8" 58d35'31" -43d11'47" -22d54'30" 18d25'26" -33d55'31" 47d58'42" 29d22'11" out: | 844731.03 4946509.59 0.00 -3779077.27 -2327750.87 0.00 1605067.15 -3400461.47 0.00 3820138.08 2888664.15 0.00 - comment: Test inv geos on a sphere with alternate sweep args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere +sweep=x -I in: | 841586.28 4961396.21 -3772913.22 -2339604.71 1601377.77 -3415545.15 3812722.89 2902474.62 out: | 16d11'8"E 58d35'31"N 0.000 43d11'47"W 22d54'30"S 0.000 18d25'26"E 33d55'31"S 0.000 47d58'42"E 29d22'11"N 0.000 - comment: Test inv geos on a ellipsoid with alternate sweep args: > +proj=latlong +ellps=sphere +to +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84 +sweep=x -I in: | 844731.03 4946509.59 -3779077.27 -2327750.87 1605067.15 -3400461.47 3820138.08 2888664.15 out: | 16d11'8"E 58d35'31"N 0.000 43d11'47"W 22d54'30"S 0.000 18d25'26"E 33d55'31"S 0.000 47d58'42"E 29d22'11"N 0.000 - comment: Test the Natural Earth Projection args: > +proj=latlong +a=6371008.7714 +b=6371008.7714 +to +proj=natearth +a=6371008.7714 +b=6371008.7714 -f %.7f in: | 0.0 0.0 0 0.0 0.0 0.0 22.5 0 0.0 2525419.569383768 0.0 45.0 0 0.0 5052537.389973222 0.0 67.5 0 0.0 7400065.6562573705 0.0 90.0 0 0.0 9062062.394736718 45.0 0.0 0 4356790.016612169 0.0 45.0 22.5 0 4253309.544984069 2525419.569383768 45.0 45.0 0 3924521.5829515466 5052537.389973222 45.0 67.5 0 3354937.47115583 7400065.6562573705 45.0 90.0 0 2397978.2448443635 9062062.394736718 90.0 0.0 0 8713580.033224339 0.0 90.0 22.5 0 8506619.089968137 2525419.569383768 90.0 45.0 0 7849043.165903093 5052537.389973222 90.0 67.5 0 6709874.94231166 7400065.6562573705 90.0 90.0 0 4795956.489688727 9062062.394736718 135.0 0.0 0 1.3070370049836507E7 0.0 135.0 22.5 0 1.2759928634952208E7 2525419.569383768 135.0 45.0 0 1.177356474885464E7 5052537.389973222 135.0 67.5 0 1.0064812413467491E7 7400065.6562573705 135.0 90.0 0 7193934.734533091 9062062.394736718 180.0 0.0 0 1.7427160066448677E7 0.0 180.0 22.5 0 1.7013238179936275E7 2525419.569383768 180.0 45.0 0 1.5698086331806187E7 5052537.389973222 180.0 67.5 0 1.341974988462332E7 7400065.6562573705 180.0 90.0 0 9591912.979377454 9062062.394736718 out: | 0.0000000 0.0000000 0.0000000 0.0 0.0 0.0000000 2525419.5693838 0.0000000 0.0 2525419.569383768 0.0000000 5052537.3899732 0.0000000 0.0 5052537.389973222 0.0000000 7400065.6562574 0.0000000 0.0 7400065.6562573705 0.0000000 9062062.3947367 0.0000000 0.0 9062062.394736718 4356790.0166122 0.0000000 0.0000000 4356790.016612169 0.0 4253309.5449841 2525419.5693838 0.0000000 4253309.544984069 2525419.569383768 3924521.5829515 5052537.3899732 0.0000000 3924521.5829515466 5052537.389973222 3354937.4711558 7400065.6562574 0.0000000 3354937.47115583 7400065.6562573705 2397978.2448444 9062062.3947367 0.0000000 2397978.2448443635 9062062.394736718 8713580.0332243 0.0000000 0.0000000 8713580.033224339 0.0 8506619.0899681 2525419.5693838 0.0000000 8506619.089968137 2525419.569383768 7849043.1659031 5052537.3899732 0.0000000 7849043.165903093 5052537.389973222 6709874.9423117 7400065.6562574 0.0000000 6709874.94231166 7400065.6562573705 4795956.4896887 9062062.3947367 0.0000000 4795956.489688727 9062062.394736718 13070370.0498365 0.0000000 0.0000000 1.3070370049836507E7 0.0 12759928.6349522 2525419.5693838 0.0000000 1.2759928634952208E7 2525419.569383768 11773564.7488546 5052537.3899732 0.0000000 1.177356474885464E7 5052537.389973222 10064812.4134675 7400065.6562574 0.0000000 1.0064812413467491E7 7400065.6562573705 7193934.7345331 9062062.3947367 0.0000000 7193934.734533091 9062062.394736718 17427160.0664487 0.0000000 0.0000000 1.7427160066448677E7 0.0 17013238.1799363 2525419.5693838 0.0000000 1.7013238179936275E7 2525419.569383768 15698086.3318062 5052537.3899732 0.0000000 1.5698086331806187E7 5052537.389973222 13419749.8846233 7400065.6562574 0.0000000 1.341974988462332E7 7400065.6562573705 9591912.9793775 9062062.3947367 0.0000000 9591912.979377454 9062062.394736718 - comment: Test the Natural Earth II Projection args: > +proj=latlong +a=6371008.7714 +b=6371008.7714 +to +proj=natearth2 +a=6371008.7714 +b=6371008.7714 -f %.7f in: | 0.0 0.0 0 0.00000000 0.00000000 0.0 22.5 0 0.00000000 2531453.57080958 0.0 45.0 0 0.00000000 5051471.50086845 0.0 67.5 0 0.00000000 7395411.22478983 0.0 90.0 0 0.00000000 9073776.52662810 45.0 0.0 0 4239151.18200719 0.00000000 45.0 22.5 0 4138348.61904244 2531453.57080958 45.0 45.0 0 3830621.33880773 5051471.50086845 45.0 67.5 0 3158326.32836996 7395411.22478983 45.0 90.0 0 957973.37034235 9073776.52662810 90.0 0.0 0 8478302.36401439 0.00000000 90.0 22.5 0 8276697.23808488 2531453.57080958 90.0 45.0 0 7661242.67761547 5051471.50086845 90.0 67.5 0 6316652.65673992 7395411.22478983 90.0 90.0 0 1915946.74068470 9073776.52662810 135.0 0.0 0 12717453.54602160 0.00000000 135.0 22.5 0 12415045.85712730 2531453.57080958 135.0 45.0 0 11491864.01642320 5051471.50086845 135.0 67.5 0 9474978.98510988 7395411.22478983 135.0 90.0 0 2873920.11102705 9073776.52662810 180.0 0.0 0 16956604.72802880 0.00000000 180.0 22.5 0 16553394.47616980 2531453.57080958 180.0 45.0 0 15322485.35523090 5051471.50086845 180.0 67.5 0 12633305.31347990 7395411.22478983 180.0 90.0 0 3831893.48136940 9073776.52662810 out: | 0.0000000 0.0000000 0.0000000 0.00000000 0.00000000 0.0000000 2531453.5708096 0.0000000 0.00000000 2531453.57080958 0.0000000 5051471.5008684 0.0000000 0.00000000 5051471.50086845 0.0000000 7395411.2247898 0.0000000 0.00000000 7395411.22478983 0.0000000 9073776.5266281 0.0000000 0.00000000 9073776.52662810 4239151.1820072 0.0000000 0.0000000 4239151.18200719 0.00000000 4138348.6190424 2531453.5708096 0.0000000 4138348.61904244 2531453.57080958 3830621.3388077 5051471.5008684 0.0000000 3830621.33880773 5051471.50086845 3158326.3283700 7395411.2247898 0.0000000 3158326.32836996 7395411.22478983 957973.3703423 9073776.5266281 0.0000000 957973.37034235 9073776.52662810 8478302.3640144 0.0000000 0.0000000 8478302.36401439 0.00000000 8276697.2380849 2531453.5708096 0.0000000 8276697.23808488 2531453.57080958 7661242.6776155 5051471.5008684 0.0000000 7661242.67761547 5051471.50086845 6316652.6567399 7395411.2247898 0.0000000 6316652.65673992 7395411.22478983 1915946.7406847 9073776.5266281 0.0000000 1915946.74068470 9073776.52662810 12717453.5460216 0.0000000 0.0000000 12717453.54602160 0.00000000 12415045.8571273 2531453.5708096 0.0000000 12415045.85712730 2531453.57080958 11491864.0164232 5051471.5008684 0.0000000 11491864.01642320 5051471.50086845 9474978.9851099 7395411.2247898 0.0000000 9474978.98510988 7395411.22478983 2873920.1110270 9073776.5266281 0.0000000 2873920.11102705 9073776.52662810 16956604.7280288 0.0000000 0.0000000 16956604.72802880 0.00000000 16553394.4761698 2531453.5708096 0.0000000 16553394.47616980 2531453.57080958 15322485.3552309 5051471.5008684 0.0000000 15322485.35523090 5051471.50086845 12633305.3134798 7395411.2247898 0.0000000 12633305.31347990 7395411.22478983 3831893.4813694 9073776.5266281 0.0000000 3831893.48136940 9073776.52662810 - comment: Test the Compact Miller projection args: > +proj=latlong +a=6371008.7714 +b=6371008.7714 +to +proj=comill +a=6371008.7714 +b=6371008.7714 -f %.7f in: | 0.0 0.0 0 0.0 0.0 0.0 22.5 0 0.0 2537439.6610749415 0.0 45.0 0 0.0 5391682.432264133 0.0 67.5 0 0.0 8661480.510260897 0.0 90.0 0 0.0 12009484.264916677 45.0 0.0 0 5003778.588046594 0.0 45.0 22.5 0 5003778.588046594 2537439.6610749415 45.0 45.0 0 5003778.588046594 5391682.432264133 45.0 67.5 0 5003778.588046594 8661480.510260897 45.0 90.0 0 5003778.588046594 12009484.264916677 90.0 0.0 0 10007557.176093187 0.0 90.0 22.5 0 10007557.176093187 2537439.6610749415 90.0 45.0 0 10007557.176093187 5391682.432264133 90.0 67.5 0 10007557.176093187 8661480.510260897 90.0 90.0 0 10007557.176093187 12009484.264916677 135.0 0.0 0 15011335.76413978 0.0 135.0 22.5 0 15011335.76413978 2537439.6610749415 135.0 45.0 0 15011335.76413978 5391682.432264133 135.0 67.5 0 15011335.76413978 8661480.510260897 135.0 90.0 0 15011335.76413978 12009484.264916677 180.0 0.0 0 20015114.352186374 0.0 180.0 22.5 0 20015114.352186374 2537439.6610749415 180.0 45.0 0 20015114.352186374 5391682.432264133 180.0 67.5 0 20015114.352186374 8661480.510260897 180.0 90.0 0 20015114.352186374 12009484.264916677 out: | 0.0000000 0.0000000 0.0000000 0.0 0.0 0.0000000 2537439.6610749 0.0000000 0.0 2537439.6610749415 0.0000000 5391682.4322641 0.0000000 0.0 5391682.432264133 0.0000000 8661480.5102609 0.0000000 0.0 8661480.510260897 0.0000000 12009484.2649167 0.0000000 0.0 12009484.264916677 5003778.5880466 0.0000000 0.0000000 5003778.588046594 0.0 5003778.5880466 2537439.6610749 0.0000000 5003778.588046594 2537439.6610749415 5003778.5880466 5391682.4322641 0.0000000 5003778.588046594 5391682.432264133 5003778.5880466 8661480.5102609 0.0000000 5003778.588046594 8661480.510260897 5003778.5880466 12009484.2649167 0.0000000 5003778.588046594 12009484.264916677 10007557.1760932 0.0000000 0.0000000 10007557.176093187 0.0 10007557.1760932 2537439.6610749 0.0000000 10007557.176093187 2537439.6610749415 10007557.1760932 5391682.4322641 0.0000000 10007557.176093187 5391682.432264133 10007557.1760932 8661480.5102609 0.0000000 10007557.176093187 8661480.510260897 10007557.1760932 12009484.2649167 0.0000000 10007557.176093187 12009484.264916677 15011335.7641398 0.0000000 0.0000000 15011335.76413978 0.0 15011335.7641398 2537439.6610749 0.0000000 15011335.76413978 2537439.6610749415 15011335.7641398 5391682.4322641 0.0000000 15011335.76413978 5391682.432264133 15011335.7641398 8661480.5102609 0.0000000 15011335.76413978 8661480.510260897 15011335.7641398 12009484.2649167 0.0000000 15011335.76413978 12009484.264916677 20015114.3521864 0.0000000 0.0000000 20015114.352186374 0.0 20015114.3521864 2537439.6610749 0.0000000 20015114.352186374 2537439.6610749415 20015114.3521864 5391682.4322641 0.0000000 20015114.352186374 5391682.432264133 20015114.3521864 8661480.5102609 0.0000000 20015114.352186374 8661480.510260897 20015114.3521864 12009484.2649167 0.0000000 20015114.352186374 12009484.264916677 - comment: Test pconic (#148) args: > +proj=latlong +datum=WGS84 +to +proj=pconic +units=m +lat_1=20n +lat_2=60n +lon_0=60W +datum=WGS84 in: -70.4 -23.65 out: | -2240096.40 -6940342.15 0.00 - args: > +proj=pconic +units=m +lat_1=20n +lat_2=60n +lon_0=60W +datum=WGS84 +to +proj=latlong +datum=WGS84 in: -2240096.40 -6940342.15 out: | 70d24'W 23d39'S 0.000 - comment: Test laea args: > +proj=laea +lat_0=45 +lon_0=-100 +units=m +datum=WGS84 +to +proj=latlong +datum=WGS84 -f %.12f in: -6086629.0 4488761.0 out: | 156.058637988599 37.765458298678 0.000000000000 - comment: Test forward calcofi projection args: +proj=latlong +ellps=clrk66 +to +proj=calcofi +ellps=clrk66 in: | 120d40'42.273"W 38d56'50.766"N 121d9'W 34d9'N 123d59'56.066"W 30d25'4.617"N out: | 60.00 20.00 0.00 80.00 60.00 0.00 90.00 120.00 0.00 - comment: Test inverse calcofi projection args: +proj=calcofi +ellps=clrk66 +to +proj=longlat +ellps=clrk66 in: | 60 20 80 60 90 120 out: | 120d40'42.273"W 38d56'50.766"N 0.000 121d9'W 34d9'N 0.000 123d59'56.066"W 30d25'4.617"N 0.000 - comment: Check inverse error handling with ob_tran (#225) args: +proj=ob_tran +o_proj=moll +a=6378137 +es=0 +o_lon_p=0 +o_lat_p=0 +lon_0=180 in: | 300000 400000 20000000 30000000 out: | 42d45'22.377"W 85d35'28.083"N 0.000 * * inf - comment: Test inverse handling args: -I +proj=ob_tran +o_proj=moll +a=6378137 +es=0 +o_lon_p=0 +o_lat_p=0 +lon_0=180 in: 10 20 out: | -1384841.19 7581707.88 0.00 - comment: Test MGI datum gives expected results (#207) args: +proj=latlong +datum=WGS84 +to +init=epsg:31284 -f %.7f in: 16.33 48.20 out: | 595710.3731286 5357598.4645652 0.0000000 - comment: Test omerc sensitivity with locations 90d from origin (#114) args: > +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 -f %.8f in: | 56.958381652832 72.8798 56.9584 72.8798 out: | -9985.16336453 -227.67701050 0.00000000 9985.16263662 -227.67701050 0.00000000 - comment: Test omerc differences between poles (#190) - north pole args: > +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 -f %.3f in: | -27 70 -27 80 -27 89.9 163 89.9 163 80 out: | 7846957.203 0.000 0.000 8944338.041 204911.652 0.000 10033520.737 402158.063 0.000 10055728.173 404099.799 0.000 11163496.121 397796.828 0.000 - comment: Test omerc differences between poles (#190) - south pole args: > +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 -f %.3f in: | -27 -70 -27 -80 -27 -89.9 163 -89.9 163 -80 out: | -7846957.203 0.000 0.000 -8944338.041 204911.652 0.000 -10033520.737 402158.063 0.000 -10055728.173 404099.799 0.000 -11163496.121 397796.828 0.000 - comment: Test qsc args: > +proj=latlong +datum=WGS84 +to +proj=qsc +datum=WGS84 -f %.7f in: 13 -10 out: | 2073986.9490881 -1680858.2722243 0.0000000 - comment: Test inv qsc args: > +proj=qsc +datum=WGS84 +to +proj=latlong +datum=WGS84 -f %.13f in: | 2073986.94908809568733 -1680858.27222427958623 out: | 13.0000000000000 -10.0000000000000 0.0000000000000 - comment: Test bug 229 args: > +init=epsg:4326 +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 +to +proj=latlong +datum=WGS84 -f %.13f in: 13 -10 out: | 13.0000000000000 -10.0000000000000 0.0000000000000 - comment: Test bug 229 (2) args: +init=epsg:4326 +to +init=epsg:4326 -f %.13f in: 13 -10 out: | 13.0000000000000 -10.0000000000000 0.0000000000000 - comment: Test bug 244 args: > +init=epsg:4326 +to +proj=aeqd +lon_0=130.0 +lat_0=40.0 +a=6378137 +b=6378137 +units=m -f %.8f in: -140.100000 -87.000000 out: | 987122.41833028 -14429896.53953091 0.00000000 - comment: Test bug 244 (2) args: > +proj=aeqd +lon_0=130.0 +lat_0=40.0 +a=6378137 +b=6378137 +units=m +to +init=epsg:4326 -f %.11f in: 987122.418330284 -14429896.539530909 out: | -140.10000000000 -87.00000000000 0.00000000000 - comment: Test bug 245 (use +datum=carthage) args: > +proj=longlat +datum=WGS84 +to +proj=utm +zone=32 +datum=carthage -f %.7f in: 10 34 out: | 592302.9819461 3762148.7340609 0.0000000 - comment: Test bug 245 (use expansion of +datum=carthage) args: > +proj=longlat +datum=WGS84 +to +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263.0,6.0,431.0 -f %.7f in: 10 34 out: | 592302.9819461 3762148.7340609 0.0000000 - comment: Test SCH forward projection args: > +proj=latlong +datum=WGS84 +to +proj=sch +datum=WGS84 +plat_0=30.0 +plon_0=45.0 +phdg_0=-12.0 +nodefs -f %.7f in: | 0.0 0.0 0.0 90.0 45.0 45.0 45.1 44.9 44.9 45.1 30.0 45.0 out: | -1977112.0305592 5551475.1418378 6595.7256583 6618337.9734775 -1152927.4060894 10055.1157181 1630035.5650122 -342353.6396475 128.3445654 1617547.4295637 -347855.9734973 125.4645102 1642526.7453121 -336878.8571851 131.3265616 1974596.2356203 787409.8217445 773.0028577 - comment: Test SCH inverse projection args: > +proj=sch +datum=WGS84 +plat_0=30.0 +plon_0=45.0 +phdg_0=-12.0 +nodefs +to +proj=latlong +datum=WGS84 -f %.6f in: | 0. 0. 2. 0. 1000. 1000. 0. 1000. 1000. out: | 45.000000 30.000000 2.000000 44.989863 29.998124 -0.000362 44.997845 30.008824 -0.000000 44.987707 30.006948 -0.000523 - comment: "Test issue #316 (switch utm to use etmerc)" args: > +proj=latlong +datum=WGS84 +to +proj=utm +zone=35 +datum=WGS84 -f %.6f in: 0 83 out: | 145723.870553 9300924.845226 0.000000 - comment: "Test issue #316 (switch utm to use etmerc)" args: > +proj=latlong +datum=WGS84 +to +proj=etmerc +datum=WGS84 +k=0.9996 +lon_0=27 +x_0=500000 -f %.6f in: 0 83 out: | 145723.870553 9300924.845226 0.000000 - comment: Test nzmg forward projection args: > +proj=latlong +datum=WGS84 +to +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=WGS84 +units=m -f %.7f in: 175. -40. 0. out: | 2680778.5726797 6132228.0764513 0.0000000 - comment: Test nzmg inverse projection args: > +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=WGS84 +units=m +to +proj=latlong +datum=WGS84 -f %.7f in: 2680778.57267967 6132228.07645127 0. out: | 175.0000000 -40.0000000 0.0000000 - comment: Test patterson forward projection args: > +proj=latlong +datum=WGS84 +to +proj=patterson +a=6371008.7714 +b=6371008.7714 +units=m -f %0.8f in: | -180 90 -135 67.5 -90 45 -45 22.5 0 0 45 -22.5 90 -45 135 -67.5 180 -90 out: | -20015114.35218637 11409566.82283130 0.00000000 -15011335.76413978 8729502.05411184 0.00000000 -10007557.17609319 5366413.42115378 0.00000000 -5003778.58804659 2551415.72966934 0.00000000 0.00000000 0.00000000 0.00000000 5003778.58804659 -2551415.72966934 0.00000000 10007557.17609319 -5366413.42115378 0.00000000 15011335.76413978 -8729502.05411184 0.00000000 20015114.35218637 -11409566.82283130 0.00000000 - comment: Test patterson inverse projection args: > +proj=patterson +a=6371008.7714 +b=6371008.7714 +units=m +to +proj=latlong +datum=WGS84 -f %0.3f in: | -20015114.352186374 11409566.822831295 -15011335.76413978 8729502.054111844 -10007557.176093187 5366413.421153781 -5003778.588046594 2551415.729669344 0.0 0.0 5003778.588046594 -2551415.729669344 10007557.176093187 -5366413.421153781 15011335.76413978 -8729502.054111844 20015114.352186374 -11409566.822831295 out: | -180.000 90.000 0.000 -135.000 67.500 0.000 -90.000 45.000 0.000 -45.000 22.500 0.000 0.000 0.000 0.000 45.000 -22.500 0.000 90.000 -45.000 0.000 135.000 -67.500 0.000 180.000 -90.000 0.000 - comment: "Test Web Mercator to avoid issue #834 in the future" args: > +proj=utm +zone=15 +datum=NAD83 +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 -f %0.3f in: 487147.594520173 4934316.46263998 out: | -10370728.796 5552839.742 0.000 - comment: Test vto_meter args: > +proj=longlat +a=1 +b=1 +vto_meter=1000 +to +proj=longlat +a=1 +b=1 -f %0.3f in: 0 0 1 out: | 0.000 0.000 1000.000 - args: > +proj=merc +a=1 +b=1 +vto_meter=1000 +to +proj=longlat +a=1 +b=1 -f %0.3f in: 0 0 1 out: | 0.000 0.000 1000.000 - args: > +proj=longlat +a=1 +b=1 +to +proj=longlat +a=1 +b=1 +vto_meter=1000 -f %0.3f in: 0 0 1000 out: | 0.000 0.000 1.000 - args: > +proj=longlat +a=1 +b=1 +to +proj=merc +a=1 +b=1 +vto_meter=1000 -f %0.3f in: 0 0 1000 out: | 0.000 0.000 1.000 - comment: "Test EPSG:4326 to EPSG:32631" # Input is latitude, longitude order args: EPSG:4326 +to EPSG:32631 in: 49 3 0 out: | 500000.00 5427455.78 0.00 - comment: "Test EPSG:32631 to EPSG:4326" # Output is latitude, longitude order args: EPSG:32631 EPSG:4326 in: 400000 5000000 0 out: | 45d8'47.014"N 1d43'40.681"E 0.000 - comment: Check we allow ellipsoids up to a 0.59% relative difference in size args: +proj=longlat +R=3376200 +to IAU_2015:49935 in: 0 -90 out: | 0.00 0.00 0.00 - comment: "Test EPSG:4896 to EPSG:7930" # Here we test that 4D coordinates are handled by cs2cs. Due to backwards # compatibility, the t-component is not written to STDOUT as part of the # coordinate data, but rather as part of the string that follows the xyz # components. This is only seen by users when the -E option is used. Which # means that this test also experience that behavior. args: EPSG:4896 EPSG:7930 -f %.4f -E in: | 3496737.2679 743254.4507 5264462.9620 2019.0 3496737.2679 743254.4507 5264462.9620 2029.0 out: | 3496737.2679 743254.4507 5264462.9620 3496737.7857 743254.0394 5264462.6437 2019.0 3496737.2679 743254.4507 5264462.9620 3496737.9401 743253.8861 5264462.5497 2029.0 - comment: Test ITRF2000 to ITRF1993 # Here we test that HUGE_VAL is passed as the time value if not explicitly # specified args: ITRF2000 ITRF1993 -f %.7f -E in: | 59.4967 -117.61748 329.396 59.4967 -117.61748 329.396 1988 out: | 59.4967 -117.61748 329.396 59.4967002 -117.6174799 329.3845529 59.4967 -117.61748 329.396 59.4967002 -117.6174799 329.3845529 1988 - comment: Check ob_tran with o_proj=longlat (#1525) args: > +proj=longlat +ellps=GRS80 +to +proj=ob_tran +o_proj=longlat +lon_0=10 +o_lat_p=90 +ellps=GRS80 -f %.7f in: -122 46 out: | -132.0000000 46.0000000 0.0000000 - comment: Test inverse handling args: > +proj=longlat +ellps=GRS80 +to +proj=ob_tran +o_proj=longlat +lon_0=10 +o_lat_p=90 +ellps=GRS80 -I -f %.7f in: -122 46 out: | -112.0000000 46.0000000 0.0000000 - args: +init=epsg:4326 +over +to +init=epsg:3857 +over -f %.7f in: -181 49 out: | -20148827.8335825 6274861.3940066 0.0000000 - args: > +proj=longlat +over +datum=WGS84 +to proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +over -f %.7f in: -181 49 out: | -20148827.8335825 6274861.3940066 0.0000000 - comment: Test EPSG:xxxx EPSG:yyyy filename file: name: tmp.txt content: 2 49 args: EPSG:4326 EPSG:4326 tmp.txt -E out: | 2 49 2dN 49dE 0.000 - comment: Test Colombia Urban args: EPSG:4686 EPSG:6247 -f %.3f in: 4.8 -74.25 out: | 122543.174 80859.033 0.000 - comment: Test effect of --authority (GH-2442) - use the EPSG:8076 operation args: ITRF96 ITRF2014 in: 49 2 out: | 49d0'0.002"N 2dE 0.018 - comment: Test effect of --authority (GH-2442) - a no-op args: --authority PROJ ITRF96 ITRF2014 in: 49 2 out: | 49dN 2dE 0.000 - comment: Test effect of --accuracy env: PROJ_DISPLAY_PROGRAM_NAME: NO args: --accuracy 0.05 EPSG:4326 EPSG:4258 exitcode: 3 stderr: |2 cannot initialize transformation cause: (null) program abnormally terminated - comment: Test effect of --no-ballpark env: PROJ_DISPLAY_PROGRAM_NAME: NO args: --no-ballpark EPSG:4267 EPSG:4258 exitcode: 3 stderr: |2 cannot initialize transformation cause: (null) program abnormally terminated - comment: Check that we can use a transformation spanning the antimeridian (should use Pulkovo 1942 to WGS 84 (20)) args: '"Pulkovo 1942" "WGS 84"' in: | 50 179.999999999 50 -179.999999999 out: | 49d59'59.36"N 179d59'52.133"W 0.000 49d59'59.36"N 179d59'52.133"W 0.000 - args: 'EPSG:2636 "WGS 84"' in: | 5540944.47 499999.999 5540944.47 500000.001 out: | 49d59'59.36"N 179d59'52.133"W 0.000 49d59'59.36"N 179d59'52.133"W 0.000 - comment: Check that we select the operation that has the smallest area of use, when 2 have the same accuracy args: 'EPSG:4326 "NAD83(HARN)"' in: 34 -120 out: | 33d59'59.983"N 119d59'59.955"W 0.000 - comment: Check that we promote CRS specified by name to 3D when the other one is 3D env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: '"WGS 84" "WGS 84 + EGM96 height" -d 3' in: 49 2 50 out: | 49.000 2.000 4.936 - args: '"WGS 84 + EGM96 height" "WGS 84" -d 3' env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES in: 49 2 0 out: | 49.000 2.000 45.064 - comment: Test input file with UTF-8 BOM marker file: name: input_file2_with_utf8_bom.txt content: "\uFEFF0 3 0\n" args: EPSG:4326 EPSG:32631 input_file2_with_utf8_bom.txt -d 3 # no BOM with output out: "500000.000\t0.000 0.000" - comment: Test cs2cs -W0 args: -W0 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 in: 0 0 out: | 0d00'00"E 0d00'00"N 0.000 - comment: Test cs2cs -W8 args: -W8 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 in: 0 0 out: | 0d00'00.00000000"E 0d00'00.00000000"N 0.000 - comment: Test cs2cs -W env: PROJ_DISPLAY_PROGRAM_NAME: NO args: -W +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 exitcode: 1 stderr: |2 -W argument missing or not in range [0,8] program abnormally terminated - comment: Test cs2cs -W9 env: PROJ_DISPLAY_PROGRAM_NAME: NO args: -W9 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 exitcode: 1 stderr: |2 -W argument missing or not in range [0,8] program abnormally terminated - comment: Test cs2cs -W10 env: PROJ_DISPLAY_PROGRAM_NAME: NO args: -W10 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 exitcode: 1 stderr: |2 -W argument missing or not in range [0,8] program abnormally terminated - comment: Test cs2cs --only-best (grid missing) for NTF to RGF93 args: --only-best NTF RGF93 -E in: 49 2 0 stderr: | Attempt to use coordinate operation NTF to RGF93 v1 (1) failed. Grid fr_ign_gr3df97a.tif is not available. Consult https://proj.org/resource_files.html for guidance. stdout: | 49 2 0 * * inf - comment: Test cs2cs --only-best (working) for EPSG:4326+5773 to EPSG:4979 env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best EPSG:4326+5773 EPSG:4979 in: 49 2 0 out: | 49dN 2dE 45.064 - comment: Test cs2cs --only-best (working) for EPSG:4326 to GDA94 args: --only-best EPSG:4326 GDA94 in: -30 152 0 out: | 30dS 152dE 0.000 - comment: Test cs2cs --only-best (working) for GDA94 to EPSG:4326 args: --only-best GDA94 EPSG:4326 in: -30 152 0 out: | 30dS 152dE 0.000 - comment: Test cs2cs --only-best (working) for EPSG:4326 to GDA2020 args: --only-best EPSG:4326 GDA2020 in: -30 152 0 out: | 30dS 152dE 0.000 - comment: Test cs2cs --only-best (working) for GDA2020 to EPSG:4326 args: --only-best GDA2020 EPSG:4326 in: -30 152 0 out: | 30dS 152dE 0.000 - comment: Test cs2cs (grid missing) for EPSG:4326+3855 to EPSG:4979 env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: EPSG:4326+3855 EPSG:4979 in: 49 2 0 out: | 49dN 2dE 0.000 - comment: Test cs2cs --only-best=no (grid missing) for EPSG:4326+3855 to EPSG:4979 env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best=no EPSG:4326+3855 EPSG:4979 in: 49 2 0 out: | 49dN 2dE 0.000 - comment: Test cs2cs --only-best (grid missing) for EPSG:4326+3855 to EPSG:4979 env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best EPSG:4326+3855 EPSG:4979 in: 49 2 0 stderr: | Attempt to use coordinate operation Inverse of WGS 84 to EGM2008 height (1) failed. Grid us_nga_egm08_25.tif is not available. Consult https://proj.org/resource_files.html for guidance. stdout: | * * inf - comment: Test cs2cs --only-best=yes (grid missing) for EPSG:4326+3855 to EPSG:4979 env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best=yes EPSG:4326+3855 EPSG:4979 in: 49 2 0 stderr: | Attempt to use coordinate operation Inverse of WGS 84 to EGM2008 height (1) failed. Grid us_nga_egm08_25.tif is not available. Consult https://proj.org/resource_files.html for guidance. stdout: | * * inf - comment: Test cs2cs (grid missing) with PROJ_ONLY_BEST_DEFAULT=YES for EPSG:4326+3855 to EPSG:4979 env: PROJ_ONLY_BEST_DEFAULT: YES PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: EPSG:4326+3855 EPSG:4979 in: 49 2 0 stderr: | Attempt to use coordinate operation Inverse of WGS 84 to EGM2008 height (1) failed. Grid us_nga_egm08_25.tif is not available. Consult https://proj.org/resource_files.html for guidance. stdout: | * * inf - comment: Test cs2cs (grid missing) with only_best_default=on in proj.ini file: name: proj.ini content: only_best_default=on env: PROJ_DATA: $PWD:$PROJ_DATA PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: EPSG:4326+3855 EPSG:4979 in: 49 2 0 stderr: | Attempt to use coordinate operation Inverse of WGS 84 to EGM2008 height (1) failed. Grid us_nga_egm08_25.tif is not available. Consult https://proj.org/resource_files.html for guidance. stdout: | * * inf - comment: Test cs2cs --only-best (grid missing) env: PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best NAD27 NAD83 in: 40 -100 0 stderr: | Attempt to use coordinate operation NAD27 to NAD83 (7) failed. Grid us_noaa_nadcon5_nad27_nad83_1986_conus.tif is not available. Consult https://proj.org/resource_files.html for guidance. stdout: | * * inf - comment: Test cs2cs --only-best --no-ballpark (grid missing) env: PROJ_DISPLAY_PROGRAM_NAME: NO PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best --no-ballpark EPSG:4326+3855 EPSG:4979 exitcode: 3 stderr: | Attempt to use coordinate operation Inverse of WGS 84 to EGM2008 height (1) failed. Grid us_nga_egm08_25.tif is not available. Consult https://proj.org/resource_files.html for guidance. cannot initialize transformation cause: File not found or invalid program abnormally terminated - comment: Test cs2cs (grid missing) with scenario of GH-3607 that we are using the 'NAD27 to WGS 84 (6)' DMA-ConusW transformation tmpdir: copy: - $PROJ_DATA/proj.db env: PROJ_DATA: $tmpdir args: +proj=latlong +datum=WGS84 +to +proj=utm +zone=10 +datum=NAD27 in: | -111.5 45.25919444444 -111.5 45.25919444444 out: | 1402288.54 5076296.64 0.00 1402288.54 5076296.64 0.00 - comment: Test cs2cs (grid missing) with scenario of GH-3613 that we are using a WGS 84 intermediate to do NAD27 to NAD83 tmpdir: copy: - $PROJ_DATA/proj.db env: PROJ_DATA: $tmpdir PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: EPSG:26915 EPSG:26715 in: | 569704.5660295591 4269024.671083651 569704.5660295591 4269024.671083651 out: | 569720.46 4268813.88 0.00 569720.46 4268813.88 0.00 - comment: Test cs2cs (grid missing) with scenario of https://lists.osgeo.org/pipermail/proj/2023-April/011003.html tmpdir: copy: - $PROJ_DATA/proj.db env: PROJ_DATA: $tmpdir PROJ_DEBUG: 2 PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES PROJ_ONLY_BEST_DEFAULT: "" args: EPSG:4326+5773 EPSG:4326+5782 in: 39 -3 0 grep-v: pj_open_lib stderr: | Attempt to use coordinate operation Inverse of WGS 84 to EGM96 height (1) + ETRS89 to Alicante height (1) using ETRS89 to WGS 84 (1) failed. Grid es_ign_egm08-rednap.tif is not available. Consult https://proj.org/resource_files.html for guidance. Grid us_nga_egm96_15.tif is not available. Consult https://proj.org/resource_files.html for guidance. This might become an error in a future PROJ major release. Set the ONLY_BEST option to YES or NO. This warning will no longer be emitted (for the current transformation instance). Using coordinate operation Transformation from EGM96 height to Alicante height (ballpark vertical transformation) stdout: | 39.00 -3.00 0.00 - comment: Test cs2cs (grid missing) --only-best=no with scenario of https://lists.osgeo.org/pipermail/proj/2023-April/011003.html tmpdir: copy: - $PROJ_DATA/proj.db env: PROJ_DATA: $tmpdir PROJ_DEBUG: 2 PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best=no EPSG:4326+5773 EPSG:4326+5782 in: 39 -3 0 grep-v: pj_open_lib out: | 39.00 -3.00 0.00 - comment: Test cs2cs (grid missing) --only-best with scenario of https://lists.osgeo.org/pipermail/proj/2023-April/011003.html tmpdir: copy: - $PROJ_DATA/proj.db env: PROJ_DATA: $tmpdir PROJ_DEBUG: 2 PROJ_DISPLAY_PROGRAM_NAME: NO PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY: YES args: --only-best EPSG:4326+5773 EPSG:4326+5782 in: 39 -3 0 grep-v: pj_open_lib stderr: | Attempt to use coordinate operation Inverse of WGS 84 to EGM96 height (1) + ETRS89 to Alicante height (1) using ETRS89 to WGS 84 (1) failed. Grid es_ign_egm08-rednap.tif is not available. Consult https://proj.org/resource_files.html for guidance. Grid us_nga_egm96_15.tif is not available. Consult https://proj.org/resource_files.html for guidance. cannot initialize transformation cause: File not found or invalid program abnormally terminated stdout: "" exitcode: 3 - comment: Test cs2cs grid missing with @gridname args: +proj=longlat +datum=WGS84 +units=m +geoidgrids=@i_dont_exist.tif +vunits=m +no_defs +type=crs +to EPSG:4979 in: 2 49 0 out: | 49dN 2dE 0.000 - comment: Test cs2cs geographic -> geocentric using BETA2007.gsb grid args: EPSG:4746 EPSG:4978 in: 50.5 10 0 out: | 4003461.55 705832.08 4898267.79 - comment: Test cs2cs geocentric -> geographic using BETA2007.gsb grid args: EPSG:4978 EPSG:4746 in: 4003461.55 705832.08 4898267.79 out: | 50d30'N 10dE -0.001 - comment: Test cs2cs geographic -> geocentric, normally using BETA2007.gsb grid but missing tmpdir: copy: - $PROJ_DATA/proj.db env: PROJ_DATA: $tmpdir args: EPSG:4746 EPSG:4978 in: 50.5 10 0 out: | 4003461.37 705832.04 4898267.94 - comment: Test cs2cs geocentric -> geographic, normally using BETA2007.gsb grid but missing tmpdir: copy: - $PROJ_DATA/proj.db env: PROJ_DATA: $tmpdir args: EPSG:4978 EPSG:4746 in: 4003461.37 705832.04 4898267.94 out: | 50d30'N 10dE -0.002 - comment: Test cs2cs geographic -> geocentric outside BETA2007.gsb grid args: EPSG:4746 EPSG:4978 in: 49 2 0 out: | 4189881.02 146313.87 4790558.75 - comment: Test cs2cs geocentric -> geographic outside BETA2007.gsb grid args: EPSG:4978 EPSG:4746 in: 4189881.02 146313.87 4790558.75 out: | 49dN 2dE 0.002 - comment: Test Similarity Transformation (example from EPSG Guidance Note 7.2) args: -d 3 EPSG:23031 EPSG:25831 in: 300000 4500000 out: | 299905.060 4499796.515 0.000 - comment: Test inverse of Similarity Transformation (example from EPSG Guidance Note 7.2) args: -d 3 EPSG:25831 EPSG:23031 in: 299905.060 4499796.515 out: | 300000.000 4500000.000 0.000 - comment: Test Similarity Transformation through CompoundCRS # Cf https://github.com/OSGeo/PROJ/issues/3854#issuecomment-1689964773 args: -d 3 EPSG:3912 EPSG:3794 in: 477134.28 95134.21 out: | 476763.303 95620.222 0.000 - args: -d 3 EPSG:3912+EPSG:5779 EPSG:3794+EPSG:8690 in: 477134.28 95134.21 5 out: | 476763.303 95620.222 5.000 - comment: Test --s_epoch args: -d 8 --s_epoch 2022 "ITRF2014" "GDA2020" in: -30 150 out: | -30.00000099 149.99999956 0.00031880 - comment: Test --t_epoch args: -d 8 --t_epoch 2022 "GDA2020" "ITRF2014" -E in: -30 150 out: | -30 150 -29.99999901 150.00000044 -0.00031879 - args: > +proj=topocentric +datum=WGS84 +X_0=-3982059.42 +Y_0=3331314.88 +Z_0=3692463.58 +no_defs +type=crs +to EPSG:4978 -d 3 -E in: 0 0 0 out: | 0 0 0 -3982059.420 3331314.880 3692463.580 - comment: > Test cs2cs EPSG:5488 (RGAF09) to EPSG:4559+5757 (RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height) Check that we use the horizontal transformation for Guadeloupe (RRAF 1991 to RGAF09 (2)), and not the one for Martinique skipif: env.get("TIFF_ENABLED") == "NO" env: PROJ_DATA: ${PROJ_DATA}:${PROJ_DATA}/tests args: -d 3 EPSG:5488 EPSG:4559+5757 in: 16.248285304 -61.484212843 53.073 out: | 661991.318 1796999.201 93.846 proj-9.6.0/test/cli/test_invproj.yaml000664 001754 001755 00000000300 14764566077 017552 0ustar00e012349e012349000000 000000 comment: Test basic capabilities of the invproj command exe: invproj tests: - args: +proj=tmerc +ellps=GRS80 -E -f %.3f in: 146339.48 5431555.61 out: "146339.48 5431555.61\t2.000\t49.000" proj-9.6.0/test/cli/test_proj.yaml000664 001754 001755 00000001574 14764566077 017053 0ustar00e012349e012349000000 000000 comment: Test basic capabilities of the proj command exe: proj tests: - args: +ellps=WGS84 +proj=ob_tran +o_proj=latlon +o_lon_p=0.0 +o_lat_p=90.0 +lon_0=360.0 +to_meter=0.0174532925199433 +no_defs -E -f %.3f in: 2 49 out: "2 49\t2.000\t49.000" - comment: Test CRS option args: EPSG:32620 -S in: -63 0 out: "500000.00\t0.00\t<0.9996 0.9996 0.9992 0 0.9996 0.9996>" - comment: Test projection factors on projected CRS with non-Greenwhich prime meridian args: EPSG:27571 -S in: 2.33722917 49.5 # On some architectures the angular distortion (omega) of EPSG:27571 is # not exactly 0, but 8.53878e-07 sub: ["8.53878e-07", "0"] out: "600000.00\t1200000.00\t<0.999877 0.999877 0.999755 0 0.999877 0.999877>" - comment: Test projection factors on compound CRS with a projected CRS args: EPSG:5972 -S in: 9 0 out: "500000.00\t0.00\t<0.9996 0.9996 0.9992 0 0.9996 0.9996>" proj-9.6.0/test/cli/test_proj_nad27.yaml000664 001754 001755 00000141522 14764566077 020044 0ustar00e012349e012349000000 000000 comment: > These tests are from an old script "test27" from the 1990s used to test nad27 init files with most of the SPCS zones. It was originally generated from execution of NMD's program l176, where the second pair of numbers are respective easting and northing output. Original versions of proj varied in the .001ft range with projections using Transverse Mercator due to greater precision of meridional distance function. exe: proj tests: - args: +units=us-ft +init=nad27:5001 -E -f %.3f in: -134d00'00.000 55d00'00.000 2615716.535 1156768.938 AK 1 GP1 out: "-134d00'00.000 55d00'00.000\t2615716.535\t1156768.938 2615716.535 1156768.938 AK 1 GP1" - args: +units=us-ft +init=nad27:5001 -f %.3f in: -133d40'00.000 57d00'00.000 2685642.815 1887198.473 AK 1 GP2 out: "2685642.815\t1887198.473 2685642.815 1887198.473 AK 1 GP2" - args: +units=us-ft +init=nad27:5001 -f %.3f in: -131d35'45.432 54d39'02.654 3124247.971 1035731.647 AK 1 GP3 out: "3124247.971\t1035731.647 3124247.971 1035731.647 AK 1 GP3" - args: +units=us-ft +init=nad27:5001 -f %.3f in: -129d32'30.000 54d32'30.000 3561180.429 1015414.284 AK 1 GP4 out: "3561180.429\t1015414.284 3561180.429 1015414.284 AK 1 GP4" - args: +units=us-ft +init=nad27:5001 -f %.3f in: -141d30'00.000 60d30'00.000 1275974.313 3248584.184 AK 1 GP6 out: "1275974.313\t3248584.184 1275974.313 3248584.184 AK 1 GP6" - args: +units=us-ft +init=nad27:5002 -f %.3f in: -142d00'00.000 56d30'30.000 500000.000 916085.508 AK 2 GP1 out: "500000.000\t916085.508 500000.000 916085.508 AK 2 GP1" - args: +units=us-ft +init=nad27:5003 -f %.3f in: -146d00'00.000 56d30'30.000 500000.000 916085.508 AK 3 GP1 out: "500000.000\t916085.508 500000.000 916085.508 AK 3 GP1" - args: +units=us-ft +init=nad27:5004 -f %.3f in: -150d00'00.000 56d30'30.000 500000.000 916085.508 AK 4 GP1 out: "500000.000\t916085.508 500000.000 916085.508 AK 4 GP1" - args: +units=us-ft +init=nad27:5005 -f %.3f in: -152d28'56.134 60d53'28.765 770312.640 2520850.031 AK 5 GP1 out: "770312.640\t2520850.030 770312.640 2520850.031 AK 5 GP1" - args: +units=us-ft +init=nad27:5005 -f %.3f in: -154d00'00.000 56d30'30.000 500000.000 916085.508 AK 5 GP2 out: "500000.000\t916085.508 500000.000 916085.508 AK 5 GP2" - args: +units=us-ft +init=nad27:5006 -f %.3f in: -155d00'00.000 71d00'00.000 857636.168 6224356.320 AK 6 GP1 out: "857636.168\t6224356.319 857636.168 6224356.320 AK 6 GP1" - args: +units=us-ft +init=nad27:5006 -f %.3f in: -158d00'00.000 71d00'00.000 500000.000 6215501.078 AK 6 GP1 out: "500000.000\t6215501.077 500000.000 6215501.078 AK 6 GP1" - args: +units=us-ft +init=nad27:5007 -f %.3f in: -162d00'00.000 65d15'00.000 700000.000 4111525.687 AK 7 GP1 out: "700000.000\t4111525.685 700000.000 4111525.687 AK 7 GP1" - args: +units=us-ft +init=nad27:5008 -f %.3f in: -166d00'00.000 65d15'00.000 500000.000 4111525.687 AK 8 GP1 out: "500000.000\t4111525.685 500000.000 4111525.687 AK 8 GP1" - args: +units=us-ft +init=nad27:5009 -f %.3f in: -170d00'00.000 63d20'00.000 600000.000 3410550.008 AK 9 GP1 out: "600000.000\t3410550.007 600000.000 3410550.008 AK 9 GP1" - args: +units=us-ft +init=nad27:5010 -f %.3f in: -164d02'30.000 54d27'30.000 5533424.392 1473805.123 AK10 GP1 out: "5533424.392\t1473805.123 5533424.392 1473805.123 AK10 GP1" - args: +units=us-ft +init=nad27:5010 -f %.3f in: -176d00'00.000 52d30'00.000 3000000.000 547583.333 AK10 GP2 out: "3000000.000\t547583.333 3000000.000 547583.333 AK10 GP2" - args: +units=us-ft +init=nad27:101 -f %.3f in: -85d50'00.000 31d20'00.000 500000.000 303093.746 AL E GP1 out: "500000.000\t303093.746 500000.000 303093.746 AL E GP1" - args: +units=us-ft +init=nad27:101 -f %.3f in: -85d12'41.738 32d38'57.737 691376.573 782394.791 AL E GP2 out: "691376.573\t782394.791 691376.573 782394.791 AL E GP2" - args: +units=us-ft +init=nad27:101 -f %.3f in: -86d36'58.670 34d48'58.708 264979.900 1571249.667 AL E GP3 out: "264979.900\t1571249.667 264979.900 1571249.667 AL E GP3" - args: +units=us-ft +init=nad27:102 -f %.3f in: -87d30'00.000 33d20'00.000 500000.000 1212487.425 AL W GP1 out: "500000.000\t1212487.425 500000.000 1212487.425 AL W GP1" - args: +units=us-ft +init=nad27:102 -f %.3f in: -87d30'00.000 33d20'30.000 500000.000 1215519.455 AL W GP2 out: "500000.000\t1215519.455 500000.000 1215519.455 AL W GP2" - args: +units=us-ft +init=nad27:301 -f %.3f in: -91d34'46.321 35d18'37.443 2125448.748 355890.988 AR N GP1 out: "2125448.748\t355890.988 2125448.748 355890.988 AR N GP1" - args: +units=us-ft +init=nad27:301 -f %.3f in: -92d04'11.625 35d19'34.269 1979150.162 361375.766 AR N GP2 out: "1979150.162\t361375.766 1979150.162 361375.766 AR N GP2" - args: +units=us-ft +init=nad27:302 -f %.3f in: -92d00'00.000 34d45'00.000 2000000.000 758096.040 AR S GP1 out: "2000000.000\t758096.040 2000000.000 758096.040 AR S GP1" - args: +units=us-ft +init=nad27:302 -f %.3f in: -92d00'00.000 33d15'00.000 2000000.000 212263.845 AR S GP2 out: "2000000.000\t212263.845 2000000.000 212263.845 AR S GP2" - args: +units=us-ft +init=nad27:5300 -f %.3f in: -170d00'00.000 -14d16'00.000 500000.000 312234.650 AS GP1 out: "500000.000\t312234.650 500000.000 312234.650 AS GP1" - args: +units=us-ft +init=nad27:5300 -f %.3f in: -166d50'38.406 -9d34'41.556 1640416.676 2007870.029 AS GP2 out: "1640416.676\t2007870.029 1640416.676 2007870.029 AS GP2" - args: +units=us-ft +init=nad27:202 -f %.3f in: -111d55'00.000 34d45'00.000 500000.000 1364267.386 AZ C GP1 out: "500000.000\t1364267.386 500000.000 1364267.386 AZ C GP1" - args: +units=us-ft +init=nad27:202 -f %.3f in: -111d55'00.000 32d20'00.000 500000.000 484978.270 AZ C GP2 out: "500000.000\t484978.270 500000.000 484978.270 AZ C GP2" - args: +units=us-ft +init=nad27:201 -f %.3f in: -110d24'59.771 35d09'58.568 425301.125 1515853.426 AZ E GP1 out: "425301.125\t1515853.425 425301.125 1515853.426 AZ E GP1" - args: +units=us-ft +init=nad27:201 -f %.3f in: -109d34'33.127 31d59'53.103 683147.830 363527.538 AZ E GP2 out: "683147.830\t363527.538 683147.830 363527.538 AZ E GP2" - args: +units=us-ft +init=nad27:201 -f %.3f in: -110d30'34.948 35d07'28.243 397422.297 1500739.241 AZ E GP3 out: "397422.297\t1500739.241 397422.297 1500739.241 AZ E GP3" - args: +units=us-ft +init=nad27:201 -f %.3f in: -109d45'13.226 32d08'41.778 627823.092 416691.532 AZ E GP4 out: "627823.092\t416691.532 627823.092 416691.532 AZ E GP4" - args: +units=us-ft +init=nad27:203 -f %.3f in: -113d45'00.000 34d45'00.000 500000.000 1364312.866 AZ W GP1 out: "500000.000\t1364312.866 500000.000 1364312.866 AZ W GP1" - args: +units=us-ft +init=nad27:203 -f %.3f in: -113d45'00.000 34d45'30.000 500000.000 1367345.603 AZ W GP2 out: "500000.000\t1367345.603 500000.000 1367345.603 AZ W GP2" - args: +units=us-ft +init=nad27:203 -f %.3f in: -113d45'00.000 34d46'00.000 500000.000 1370378.345 AZ W GP3 out: "500000.000\t1370378.345 500000.000 1370378.345 AZ W GP3" - args: +units=us-ft +init=nad27:401 -f %.3f in: -122d00'00.000 41d30'00.000 2000000.000 789314.699 CA 1 GP1 out: "2000000.000\t789314.699 2000000.000 789314.699 CA 1 GP1" - args: +units=us-ft +init=nad27:401 -f %.3f in: -122d00'00.000 41d30'30.000 2000000.000 792351.052 CA 1 GP2 out: "2000000.000\t792351.052 2000000.000 792351.052 CA 1 GP2" - args: +units=us-ft +init=nad27:402 -f %.3f in: -122d00'00.000 39d20'00.000 2000000.000 606975.074 CA 2 GP1 out: "2000000.000\t606975.074 2000000.000 606975.074 CA 2 GP1" - args: +units=us-ft +init=nad27:402 -f %.3f in: -122d00'00.000 39d20'30.000 2000000.000 610010.158 CA 2 GP2 out: "2000000.000\t610010.158 2000000.000 610010.158 CA 2 GP2" - args: +units=us-ft +init=nad27:403 -f %.3f in: -120d30'00.000 37d05'00.000 2000000.000 212394.029 CA 3 GP1 out: "2000000.000\t212394.029 2000000.000 212394.029 CA 3 GP1" - args: +units=us-ft +init=nad27:403 -f %.3f in: -121d22'26.019 37d30'30.324 1746516.910 368350.900 CA 3 GP2 out: "1746516.910\t368350.900 1746516.910 368350.900 CA 3 GP2" - args: +units=us-ft +init=nad27:403 -f %.3f in: -119d46'32.733 37d07'41.470 2211146.746 229541.692 CA 3 GP3 out: "2211146.746\t229541.692 2211146.746 229541.692 CA 3 GP3" - args: +units=us-ft +init=nad27:403 -f %.3f in: -119d38'26.434 36d55'48.009 2251190.696 157720.169 CA 3 GP4 out: "2251190.696\t157720.169 2251190.696 157720.169 CA 3 GP4" - args: +units=us-ft +init=nad27:403 -f %.3f in: -120d42'59.779 38d06'52.815 1937681.203 587984.757 CA 3 GP5 out: "1937681.203\t587984.757 1937681.203 587984.757 CA 3 GP5" - args: +units=us-ft +init=nad27:404 -f %.3f in: -119d00'00.000 36d20'00.000 2000000.000 364036.106 CA 4 GP1 out: "2000000.000\t364036.106 2000000.000 364036.106 CA 4 GP1" - args: +units=us-ft +init=nad27:404 -f %.3f in: -119d00'00.000 36d20'30.000 2000000.000 367069.711 CA 4 GP2 out: "2000000.000\t367069.711 2000000.000 367069.711 CA 4 GP2" - args: +units=us-ft +init=nad27:405 -f %.3f in: -118d00'00.000 34d45'00.000 2000000.000 454894.032 CA 5 GP1 out: "2000000.000\t454894.032 2000000.000 454894.032 CA 5 GP1" - args: +units=us-ft +init=nad27:405 -f %.3f in: -118d00'00.000 34d45'30.000 2000000.000 457926.735 CA 5 GP2 out: "2000000.000\t457926.735 2000000.000 457926.735 CA 5 GP2" - args: +units=us-ft +init=nad27:406 -f %.3f in: -116d15'00.000 33d20'00.000 2000000.000 424481.703 CA 6 GP1 out: "2000000.000\t424481.703 2000000.000 424481.703 CA 6 GP1" - args: +units=us-ft +init=nad27:406 -f %.3f in: -116d15'00.000 33d20'30.000 2000000.000 427513.796 CA 6 GP2 out: "2000000.000\t427513.796 2000000.000 427513.796 CA 6 GP2" - args: +units=us-ft +init=nad27:407 -f %.3f in: -118d20'00.000 34d30'00.000 4186692.580 4294365.712 CA 7 GP1 out: "4186692.580\t4294365.712 4186692.580 4294365.712 CA 7 GP1" - args: +units=us-ft +init=nad27:502 -f %.3f in: -105d30'00.000 39d15'00.000 2000000.000 515936.228 CO C GP1 out: "2000000.000\t515936.228 2000000.000 515936.228 CO C GP1" - args: +units=us-ft +init=nad27:502 -f %.3f in: -105d30'00.000 39d15'30.000 2000000.000 518971.313 CO C GP2 out: "2000000.000\t518971.313 2000000.000 518971.313 CO C GP2" - args: +units=us-ft +init=nad27:501 -f %.3f in: -108d45'55.378 40d25'33.504 1091086.832 414752.176 CO N GP1 out: "1091086.832\t414752.176 1091086.832 414752.176 CO N GP1" - args: +units=us-ft +init=nad27:501 -f %.3f in: -105d14'45.588 40d12'42.711 2070940.652 320120.166 CO N GP2 out: "2070940.652\t320120.166 2070940.652 320120.166 CO N GP2" - args: +units=us-ft +init=nad27:503 -f %.3f in: -105d30'00.000 37d30'00.000 2000000.000 303425.100 CO S GP1 out: "2000000.000\t303425.100 2000000.000 303425.100 CO S GP1" - args: +units=us-ft +init=nad27:503 -f %.3f in: -105d30'00.000 37d30'30.000 2000000.000 306459.335 CO S GP2 out: "2000000.000\t306459.335 2000000.000 306459.335 CO S GP2" - args: +units=us-ft +init=nad27:600 -f %.3f in: -72d43'30.515 41d16'55.847 606832.139 163540.219 CT GP1 out: "606832.139\t163540.219 606832.139 163540.219 CT GP1" - args: +units=us-ft +init=nad27:600 -f %.3f in: -73d01'15.609 41d13'25.985 525446.203 142415.891 CT GP2 out: "525446.203\t142415.891 525446.203 142415.891 CT GP2" - args: +units=us-ft +init=nad27:700 -f %.3f in: -75d33'00.748 39d21'15.214 462235.881 493228.846 DE GP1 out: "462235.881\t493228.846 462235.881 493228.846 DE GP1" - args: +units=us-ft +init=nad27:700 -f %.3f in: -75d19'01.889 39d45'14.765 527969.596 638870.822 DE GP2 out: "527969.596\t638870.822 527969.596 638870.822 DE GP2" - args: +units=us-ft +init=nad27:901 -f %.3f in: -80d11'00.000 25d45'00.000 768810.056 515637.939 FL E GP1 out: "768810.056\t515637.939 768810.056 515637.939 FL E GP1" - args: +units=us-ft +init=nad27:903 -f %.3f in: -82d45'52.412 29d39'06.589 2551254.254 241240.008 FL N GP1 out: "2551254.254\t241240.008 2551254.254 241240.008 FL N GP1" - args: +units=us-ft +init=nad27:903 -f %.3f in: -84d55'11.533 29d38'51.982 1866620.008 235814.655 FL N GP2 out: "1866620.008\t235814.655 1866620.008 235814.655 FL N GP2" - args: +units=us-ft +init=nad27:902 -f %.3f in: -82d38'00.000 27d47'00.000 295216.148 1254408.638 FL W GP1 out: "295216.148\t1254408.638 295216.148 1254408.638 FL W GP1" - args: +units=us-ft +init=nad27:1001 -f %.3f in: -81d27'15.592 32d38'03.003 719287.314 958818.262 GA E GP1 out: "719287.314\t958818.262 719287.314 958818.262 GA E GP1" - args: +units=us-ft +init=nad27:1001 -f %.3f in: -83d15'39.990 33d29'58.626 166361.311 1274706.363 GA E GP2 out: "166361.311\t1274706.363 166361.311 1274706.363 GA E GP2" - args: +units=us-ft +init=nad27:1002 -f %.3f in: -84d23'00.000 33d45'00.000 434141.824 1364117.672 GA W GP1 out: "434141.824\t1364117.672 434141.824 1364117.672 GA W GP1" - args: +units=us-ft +init=nad27:5400 -f %.3f in: 144d44'55.503 13d28'20.879 164041.712 164041.680 GU GP1 out: "164041.712\t164041.680 164041.712 164041.680 GU GP1" - args: +units=us-ft +init=nad27:5400 -f %.3f in: 144d38'07.193 13d20'20.538 123728.401 115623.086 GU GP2 out: "123728.401\t115623.086 123728.401 115623.086 GU GP2" - args: +units=us-ft +init=nad27:5101 -f %.3f in: -155d59'16.911 19d37'23.477 332050.939 287068.342 HI 1 GP1 out: "332050.939\t287068.342 332050.939 287068.342 HI 1 GP1" - args: +units=us-ft +init=nad27:5101 -f %.3f in: -155d18'06.262 19d31'24.578 568270.061 250663.241 HI 1 GP2 out: "568270.061\t250663.241 568270.061 250663.241 HI 1 GP2" - args: +units=us-ft +init=nad27:5101 -f %.3f in: -155d30'00.000 19d42'00.000 500000.000 314722.985 HI 1 GP3 out: "500000.000\t314722.985 500000.000 314722.985 HI 1 GP3" - args: +units=us-ft +init=nad27:5101 -f %.3f in: -155d30'00.000 19d42'30.000 500000.000 317749.315 HI 1 GP4 out: "500000.000\t317749.315 500000.000 317749.315 HI 1 GP4" - args: +units=us-ft +init=nad27:5102 -f %.3f in: -156d40'00.000 20d42'00.000 500000.000 133170.903 HI 2 GP1 out: "500000.000\t133170.903 500000.000 133170.903 HI 2 GP1" - args: +units=us-ft +init=nad27:5102 -f %.3f in: -156d40'00.000 20d42'30.000 500000.000 136197.580 HI 2 GP2 out: "500000.000\t136197.580 500000.000 136197.580 HI 2 GP2" - args: +units=us-ft +init=nad27:5103 -f %.3f in: -158d00'00.000 21d30'00.000 500000.000 121078.981 HI 3 GP1 out: "500000.000\t121078.981 500000.000 121078.981 HI 3 GP1" - args: +units=us-ft +init=nad27:5103 -f %.3f in: -158d01'30.000 21d37'30.000 491508.215 166485.537 HI 3 GP2 out: "491508.215\t166485.537 491508.215 166485.537 HI 3 GP2" - args: +units=us-ft +init=nad27:5104 -f %.3f in: -159d30'00.000 22d05'00.000 500000.000 90816.138 HI 4 GP1 out: "500000.000\t90816.138 500000.000 90816.138 HI 4 GP1" - args: +units=us-ft +init=nad27:5105 -f %.3f in: -160d10'00.000 21d42'00.000 500000.000 12108.532 HI 5 GP1 out: "500000.000\t12108.532 500000.000 12108.532 HI 5 GP1" - args: +units=us-ft +init=nad27:1401 -f %.3f in: -93d28'33.966 42d44'50.101 2006419.316 454523.076 IA N GP1 out: "2006419.316\t454523.076 2006419.316 454523.076 IA N GP1" - args: +units=us-ft +init=nad27:1401 -f %.3f in: -93d54'22.084 42d40'23.699 1890779.351 427816.212 IA N GP2 out: "1890779.351\t427816.212 1890779.351 427816.212 IA N GP2" - args: +units=us-ft +init=nad27:1402 -f %.3f in: -93d37'00.000 41d35'00.000 1968081.762 576880.709 IA S GP1 out: "1968081.762\t576880.709 1968081.762 576880.709 IA S GP1" - args: +units=us-ft +init=nad27:1102 -f %.3f in: -114d24'00.000 42d56'00.000 392878.009 461838.231 ID C GP1 out: "392878.009\t461838.231 392878.009 461838.231 ID C GP1" - args: +units=us-ft +init=nad27:1101 -f %.3f in: -111d42'29.824 43d48'07.616 621017.480 778569.749 ID E GP1 out: "621017.480\t778569.749 621017.480 778569.749 ID E GP1" - args: +units=us-ft +init=nad27:1101 -f %.3f in: -112d22'35.516 43d35'26.260 444398.356 701217.958 ID E GP2 out: "444398.356\t701217.958 444398.356 701217.958 ID E GP2" - args: +units=us-ft +init=nad27:1103 -f %.3f in: -116d22'02.592 48d07'50.941 349231.302 2357247.272 ID W GP1 out: "349231.302\t2357247.272 349231.302 2357247.272 ID W GP1" - args: +units=us-ft +init=nad27:1201 -f %.3f in: -88d07'06.790 41d46'11.855 558591.507 1858801.531 IL E GP1 out: "558591.507\t1858801.531 558591.507 1858801.531 IL E GP1" - args: +units=us-ft +init=nad27:1201 -f %.3f in: -88d41'35.208 40d43'37.202 400279.755 1478930.010 IL E GP2 out: "400279.755\t1478930.010 400279.755 1478930.010 IL E GP2" - args: +units=us-ft +init=nad27:1202 -f %.3f in: -90d10'00.000 38d30'00.000 500000.000 667527.020 IL W GP1 out: "500000.000\t667527.020 500000.000 667527.020 IL W GP1" - args: +units=us-ft +init=nad27:1301 -f %.3f in: -85d40'00.000 40d00'00.000 500000.000 910470.786 IN E GP1 out: "500000.000\t910470.785 500000.000 910470.786 IN E GP1" - args: +units=us-ft +init=nad27:1301 -f %.3f in: -85d40'00.000 40d00'30.000 500000.000 913506.351 IN E GP2 out: "500000.000\t913506.350 500000.000 913506.351 IN E GP2" - args: +units=us-ft +init=nad27:1301 -f %.3f in: -86d14'27.780 40d00'12.690 339087.973 912273.325 IN E GP3 out: "339087.973\t912273.324 339087.973 912273.325 IN E GP3" - args: +units=us-ft +init=nad27:1301 -f %.3f in: -86d14'27.790 40d00'31.660 339099.565 914192.836 IN E GP4 out: "339099.565\t914192.836 339099.565 914192.836 IN E GP4" - args: +units=us-ft +init=nad27:1301 -f %.3f in: -86d14'28.103 40d00'47.412 339085.485 915786.883 IN E GP6 out: "339085.485\t915786.883 339085.485 915786.883 IN E GP6" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -87d05'00.000 40d00'00.000 500000.000 910470.786 IN W GP1 out: "500000.000\t910470.785 500000.000 910470.786 IN W GP1" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -87d05'00.000 40d00'30.000 500000.000 913506.351 IN W GP2 out: "500000.000\t913506.350 500000.000 913506.351 IN W GP2" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -86d45'10.717 39d41'24.840 592969.921 797807.077 IN W GP3 out: "592969.921\t797807.077 592969.921 797807.077 IN W GP3" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -87d41'44.075 37d54'24.755 323351.583 148732.658 IN W GP4 out: "323351.583\t148732.658 323351.583 148732.658 IN W GP4" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -86d32'13.179 39d32'46.419 654071.692 745650.467 IN W GP5 out: "654071.692\t745650.467 654071.692 745650.467 IN W GP5" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -87d25'26.675 38d26'17.646 402398.078 341828.410 IN W GP6 out: "402398.078\t341828.410 402398.078 341828.410 IN W GP6" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -86d14'28.103 40d00'47.412 735905.989 916383.007 IN W GP7 out: "735905.989\t916383.007 735905.989 916383.007 IN W GP7" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -86d14'27.780 40d00'12.690 735964.329 912869.812 IN W GP8 out: "735964.329\t912869.812 735964.329 912869.812 IN W GP8" - args: +units=us-ft +init=nad27:1302 -f %.3f in: -86d14'27.790 40d00'31.660 735945.409 914789.331 IN W GP9 out: "735945.409\t914789.331 735945.409 914789.331 IN W GP9" - args: +units=us-ft +init=nad27:1501 -f %.3f in: -96d47'54.567 38d58'52.096 2341555.463 238196.375 KS N GP1 out: "2341555.463\t238196.375 2341555.463 238196.375 KS N GP1" - args: +units=us-ft +init=nad27:1501 -f %.3f in: -98d35'23.954 39d58'41.967 1834645.786 599682.614 KS N GP2 out: "1834645.786\t599682.614 1834645.786 599682.614 KS N GP2" - args: +units=us-ft +init=nad27:1502 -f %.3f in: -97d21'00.000 37d42'00.000 2332714.529 378302.303 KS S GP1 out: "2332714.529\t378302.303 2332714.529 378302.303 KS S GP1" - args: +units=us-ft +init=nad27:1601 -f %.3f in: -84d05'43.283 38d14'35.963 2044414.776 270720.831 KY N GP1 out: "2044414.776\t270720.831 2044414.776 270720.831 KY N GP1" - args: +units=us-ft +init=nad27:1601 -f %.3f in: -84d26'49.265 39d04'03.099 1944057.054 570906.807 KY N GP2 out: "1944057.054\t570906.807 1944057.054 570906.807 KY N GP2" - args: +units=us-ft +init=nad27:1602 -f %.3f in: -86d05'00.000 37d10'00.000 1902871.440 303569.007 KY S GP1 out: "1902871.440\t303569.007 1902871.440 303569.007 KY S GP1" - args: +units=us-ft +init=nad27:1701 -f %.3f in: -91d34'46.483 31d57'26.243 2285456.159 470671.781 LA N GP1 out: "2285456.159\t470671.781 2285456.159 470671.781 LA N GP1" - args: +units=us-ft +init=nad27:1701 -f %.3f in: -92d52'46.615 32d54'52.264 1883486.181 817905.853 LA N GP2 out: "1883486.181\t817905.853 1883486.181 817905.853 LA N GP2" - args: +units=us-ft +init=nad27:1701 -f %.3f in: -91d29'09.480 31d56'44.721 2314527.078 466735.568 LA N GP3 out: "2314527.078\t466735.568 2314527.078 466735.568 LA N GP3" - args: +units=us-ft +init=nad27:1701 -f %.3f in: -93d59'38.241 32d48'43.467 1540965.776 783590.902 LA N GP4 out: "1540965.776\t783590.902 1540965.776 783590.902 LA N GP4" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d00'00.000 28d50'00.000 2747176.527 68218.410 LA S GP1 out: "2747176.527\t68218.410 2747176.527 68218.410 LA S GP1" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d30'00.000 28d50'00.000 2587082.796 65307.429 LA S GP2 out: "2587082.796\t65307.429 2587082.796 65307.429 LA S GP2" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d29'59.999 29d19'59.994 2584173.994 247106.020 LA S GP3 out: "2584173.994\t247106.020 2584173.994 247106.020 LA S GP3" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d00'00.004 29d19'59.998 2743474.038 250002.972 LA S GP4 out: "2743474.038\t250002.972 2743474.038 250002.972 LA S GP4" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d10'23.487 29d20'32.615 2688234.966 252215.035 LA S GP5 out: "2688234.966\t252215.035 2688234.966 252215.035 LA S GP5" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d06'34.632 29d15'19.642 2709099.980 220994.973 LA S GP6 out: "2709099.980\t220994.973 2709099.980 220994.973 LA S GP6" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d01'33.803 29d07'47.918 2736661.987 175901.967 LA S GP7 out: "2736661.987\t175901.967 2736661.987 175901.967 LA S GP7" - args: +units=us-ft +init=nad27:1702 -f %.3f in: -89d08'45.781 28d58'27.979 2699434.976 118600.021 LA S GP9 out: "2699434.976\t118600.021 2699434.976 118600.021 LA S GP9" - args: +units=us-ft +init=nad27:2002 -f %.3f in: -70d30'00.000 41d30'00.000 200000.000 182180.613 MA I GP1 out: "200000.000\t182180.613 200000.000 182180.613 MA I GP1" - args: +units=us-ft +init=nad27:2001 -f %.3f in: -70d27'00.716 41d40'15.808 886823.958 246295.510 MA M GP1 out: "886823.958\t246295.510 886823.958 246295.510 MA M GP1" - args: +units=us-ft +init=nad27:2001 -f %.3f in: -73d25'59.173 42d06'06.860 75432.106 407473.253 MA M GP2 out: "75432.106\t407473.253 75432.106 407473.253 MA M GP2" - args: +units=us-ft +init=nad27:1900 -f %.3f in: -76d11'27.492 39d12'06.132 1029272.677 499353.154 MD GP1 out: "1029272.677\t499353.154 1029272.677 499353.154 MD GP1" - args: +units=us-ft +init=nad27:1900 -f %.3f in: -77d02'30.406 38d26'37.492 788033.549 222300.512 MD GP2 out: "788033.549\t222300.512 788033.549 222300.512 MD GP2" - args: +units=us-ft +init=nad27:1900 -f %.3f in: -77d30'10.460 38d59'25.903 657055.715 421819.661 MD GP3 out: "657055.715\t421819.661 657055.715 421819.661 MD GP3" - args: +units=us-ft +init=nad27:1801 -f %.3f in: -68d24'25.489 46d32'46.920 523379.868 989125.403 ME E GP1 out: "523379.868\t989125.403 523379.868 989125.403 ME E GP1" - args: +units=us-ft +init=nad27:1801 -f %.3f in: -68d37'29.366 47d02'12.659 468876.638 1168006.571 ME E GP2 out: "468876.638\t1168006.571 468876.638 1168006.571 ME E GP2" - args: +units=us-ft +init=nad27:1802 -f %.3f in: -70d16'00.000 43d40'00.000 473538.933 303746.300 ME W GP1 out: "473538.933\t303746.300 473538.933 303746.300 ME W GP1" - args: +units=us-ft +init=nad27:2112 -f %.3f in: -85d40'00.000 44d45'00.000 1653612.784 525406.529 MI C GP1 out: "1653612.784\t525406.529 1653612.784 525406.529 MI C GP1" - args: +units=us-ft +init=nad27:2113 -f %.3f in: -83d29'17.919 42d19'19.299 2228532.810 300724.433 MI S GP1 out: "2228532.810\t300724.433 2228532.810 300724.433 MI S GP1" - args: +units=us-ft +init=nad27:2113 -f %.3f in: -83d35'24.656 42d20'02.682 2200944.119 304856.048 MI S GP2 out: "2200944.119\t304856.048 2200944.119 304856.048 MI S GP2" - args: +units=us-ft +init=nad27:2113 -f %.3f in: -85d55'26.569 41d50'10.236 1566471.427 126614.633 MI S GP3 out: "1566471.427\t126614.633 1566471.427 126614.633 MI S GP3" - args: +units=us-ft +init=nad27:2113 -f %.3f in: -85d45'59.490 41d49'22.346 1609315.113 120996.336 MI S GP4 out: "1609315.113\t120996.336 1609315.113 120996.336 MI S GP4" - args: +units=us-ft +init=nad27:2103 -f %.3f in: -89d20'00.000 46d50'00.000 353999.488 1944621.410 MI W GP1 out: "353999.488\t1944621.410 353999.488 1944621.410 MI W GP1" - args: +units=us-ft +init=nad27:2201 -f %.3f in: -91d27'51.183 47d08'19.177 2407087.310 237254.364 MN N GP1 out: "2407087.310\t237254.364 2407087.310 237254.364 MN N GP1" - args: +units=us-ft +init=nad27:2201 -f %.3f in: -95d51'05.998 48d19'26.552 1330690.998 677229.560 MN N GP2 out: "1330690.998\t677229.560 1330690.998 677229.560 MN N GP2" - args: +units=us-ft +init=nad27:2402 -f %.3f in: -92d30'00.000 38d15'00.000 500000.000 879833.618 MO C GP1 out: "500000.000\t879833.618 500000.000 879833.618 MO C GP1" - args: +units=us-ft +init=nad27:2402 -f %.3f in: -92d30'00.000 38d15'30.000 500000.000 882868.158 MO C GP2 out: "500000.000\t882868.158 500000.000 882868.158 MO C GP2" - args: +units=us-ft +init=nad27:2401 -f %.3f in: -91d42'04.297 37d22'05.932 150919.587 561018.127 MO E GP1 out: "150919.587\t561018.126 150919.587 561018.127 MO E GP1" - args: +units=us-ft +init=nad27:2401 -f %.3f in: -90d08'08.896 36d53'44.124 606497.861 386893.306 MO E GP2 out: "606497.861\t386893.306 606497.861 386893.306 MO E GP2" - args: +units=us-ft +init=nad27:2403 -f %.3f in: -94d30'00.000 38d15'00.000 500000.000 758504.732 MO W GP1 out: "500000.000\t758504.732 500000.000 758504.732 MO W GP1" - args: +units=us-ft +init=nad27:2403 -f %.3f in: -94d30'00.000 38d15'30.000 500000.000 761539.296 MO W GP2 out: "500000.000\t761539.296 500000.000 761539.296 MO W GP2" - args: +units=us-ft +init=nad27:2301 -f %.3f in: -89d10'14.013 30d30'51.338 393805.810 308399.629 MS E GP1 out: "393805.810\t308399.629 393805.810 308399.629 MS E GP1" - args: +units=us-ft +init=nad27:2301 -f %.3f in: -88d26'04.338 30d43'01.454 625321.316 382224.788 MS E GP2 out: "625321.316\t382224.788 625321.316 382224.788 MS E GP2" - args: +units=us-ft +init=nad27:2302 -f %.3f in: -90d10'00.000 32d17'00.000 551507.962 648697.041 MS W GP1 out: "551507.962\t648697.041 551507.962 648697.041 MS W GP1" - args: +units=us-ft +init=nad27:2502 -f %.3f in: -109d25'00.000 47d05'00.000 2020760.609 455889.692 MT C GP1 out: "2020760.609\t455889.692 2020760.609 455889.692 MT C GP1" - args: +units=us-ft +init=nad27:2501 -f %.3f in: -106d29'11.521 47d52'21.103 2739443.845 332808.759 MT N GP1 out: "2739443.845\t332808.759 2739443.845 332808.759 MT N GP1" - args: +units=us-ft +init=nad27:2501 -f %.3f in: -114d30'43.122 48d52'46.764 794693.447 725072.329 MT N GP2 out: "794693.447\t725072.329 794693.447 725072.329 MT N GP2" - args: +units=us-ft +init=nad27:2503 -f %.3f in: -109d15'00.000 45d39'00.000 2063931.561 601700.560 MT S GP1 out: "2063931.561\t601700.560 2063931.561 601700.560 MT S GP1" - args: +units=us-ft +init=nad27:3200 -f %.3f in: -81d12'31.790 35d09'31.049 1339854.041 519988.737 NC GP1 out: "1339854.041\t519988.737 1339854.041 519988.737 NC GP1" - args: +units=us-ft +init=nad27:3200 -f %.3f in: -76d31'54.918 35d33'51.452 2733941.071 669408.798 NC GP2 out: "2733941.071\t669408.798 2733941.071 669408.798 NC GP2" - args: +units=us-ft +init=nad27:3200 -f %.3f in: -78d28'26.580 36d15'15.480 2155088.262 911860.343 NC GP3 out: "2155088.262\t911860.343 2155088.262 911860.343 NC GP3" - args: +units=us-ft +init=nad27:3301 -f %.3f in: -98d46'03.232 48d08'13.483 2422983.823 419525.823 ND N GP1 out: "2422983.823\t419525.823 2422983.823 419525.823 ND N GP1" - args: +units=us-ft +init=nad27:3301 -f %.3f in: -101d18'21.456 47d39'18.935 1801367.700 240053.997 ND N GP2 out: "1801367.700\t240053.997 1801367.700 240053.997 ND N GP2" - args: +units=us-ft +init=nad27:3302 -f %.3f in: -100d46'00.000 46d48'00.000 1933213.911 413422.204 ND S GP1 out: "1933213.911\t413422.204 1933213.911 413422.204 ND S GP1" - args: +units=us-ft +init=nad27:2601 -f %.3f in: -96d17'52.930 42d04'48.305 3004688.243 293978.208 NE N GP1 out: "3004688.243\t293978.208 3004688.243 293978.208 NE N GP1" - args: +units=us-ft +init=nad27:2601 -f %.3f in: -100d49'26.949 41d58'54.025 1775916.042 237340.591 NE N GP2 out: "1775916.042\t237340.591 1775916.042 237340.591 NE N GP2" - args: +units=us-ft +init=nad27:2602 -f %.3f in: -96d43'00.000 40d49'00.000 2770252.364 431225.617 NE S GP1 out: "2770252.364\t431225.617 2770252.364 431225.617 NE S GP1" - args: +units=us-ft +init=nad27:2800 -f %.3f in: -70d56'11.287 43d08'15.006 694907.496 233185.793 NH GP1 out: "694907.496\t233185.793 694907.496 233185.793 NH GP1" - args: +units=us-ft +init=nad27:2800 -f %.3f in: -72d32'32.197 42d51'25.984 265213.564 131404.574 NH GP2 out: "265213.564\t131404.574 265213.564 131404.574 NH GP2" - args: +units=us-ft +init=nad27:2900 -f %.3f in: -74d13'55.737 39d52'02.095 2121971.499 376878.657 NJ GP1 out: "2121971.499\t376878.657 2121971.499 376878.657 NJ GP1" - args: +units=us-ft +init=nad27:2900 -f %.3f in: -74d51'24.058 41d12'07.401 1947709.569 862915.876 NJ GP2 out: "1947709.569\t862915.876 1947709.569 862915.876 NJ GP2" - args: +units=us-ft +init=nad27:3002 -f %.3f in: -106d15'00.000 33d30'00.000 500000.000 909419.295 NM C GP1 out: "500000.000\t909419.295 500000.000 909419.295 NM C GP1" - args: +units=us-ft +init=nad27:3002 -f %.3f in: -106d15'00.000 33d30'30.000 500000.000 912451.306 NM C GP2 out: "500000.000\t912451.306 500000.000 912451.306 NM C GP2" - args: +units=us-ft +init=nad27:3001 -f %.3f in: -104d11'42.410 33d17'21.732 542236.924 832820.301 NM E GP1 out: "542236.924\t832820.301 542236.924 832820.301 NM E GP1" - args: +units=us-ft +init=nad27:3001 -f %.3f in: -104d47'37.948 33d22'32.349 359406.535 864495.732 NM E GP2 out: "359406.535\t864495.731 359406.535 864495.732 NM E GP2" - args: +units=us-ft +init=nad27:3003 -f %.3f in: -107d50'00.000 32d30'00.000 500000.000 545616.897 NM W GP1 out: "500000.000\t545616.897 500000.000 545616.897 NM W GP1" - args: +units=us-ft +init=nad27:3003 -f %.3f in: -107d50'00.000 32d30'30.000 500000.000 548648.466 NM W GP2 out: "500000.000\t548648.466 500000.000 548648.466 NM W GP2" - args: +units=us-ft +init=nad27:2702 -f %.3f in: -116d48'00.000 36d58'00.000 461048.286 806858.042 NV C GP1 out: "461048.286\t806858.042 461048.286 806858.042 NV C GP1" - args: +units=us-ft +init=nad27:2701 -f %.3f in: -114d49'09.337 35d43'09.299 726805.224 353637.053 NV E GP1 out: "726805.224\t353637.053 726805.224 353637.053 NV E GP1" - args: +units=us-ft +init=nad27:2701 -f %.3f in: -116d50'32.766 41d30'37.869 155162.931 2464191.579 NV E GP2 out: "155162.931\t2464191.578 155162.931 2464191.579 NV E GP2" - args: +units=us-ft +init=nad27:2703 -f %.3f in: -119d49'00.000 39d32'00.000 152145.548 1743820.924 NV W GP1 out: "152145.548\t1743820.923 152145.548 1743820.924 NV W GP1" - args: +units=us-ft +init=nad27:3102 -f %.3f in: -76d10'00.000 43d05'00.000 611313.134 1123706.621 NY C GP1 out: "611313.134\t1123706.620 611313.134 1123706.621 NY C GP1" - args: +units=us-ft +init=nad27:3101 -f %.3f in: -74d02'53.671 42d17'01.775 577147.690 832219.885 NY E GP1 out: "577147.690\t832219.885 577147.690 832219.885 NY E GP1" - args: +units=us-ft +init=nad27:3101 -f %.3f in: -74d44'39.818 42d30'07.382 389148.814 911884.889 NY E GP2 out: "389148.814\t911884.889 389148.814 911884.889 NY E GP2" - args: +units=us-ft +init=nad27:3104 -f %.3f in: -73d02'36.247 40d47'50.624 2264860.626 209793.919 NY L GP1 out: "2264860.626\t209793.919 2264860.626 209793.919 NY L GP1" - args: +units=us-ft +init=nad27:3104 -f %.3f in: -74d06'58.125 40d36'07.281 1967746.807 137190.013 NY L GP2 out: "1967746.807\t137190.013 1967746.807 137190.013 NY L GP2" - args: +units=us-ft +init=nad27:3104 -f %.3f in: -74d00'00.000 40d45'00.000 2000000.000 191080.202 NY L GP3 out: "2000000.000\t191080.202 2000000.000 191080.202 NY L GP3" - args: +units=us-ft +init=nad27:3104 -f %.3f in: -73d15'00.000 40d37'30.000 2208197.581 146431.086 NY L GP4 out: "2208197.581\t146431.086 2208197.581 146431.086 NY L GP4" - args: +units=us-ft +init=nad27:3104 -f %.3f in: -73d22'30.000 40d45'00.000 2173173.707 191697.996 NY L GP5 out: "2173173.707\t191697.996 2173173.707 191697.996 NY L GP5" - args: +units=us-ft +init=nad27:3103 -f %.3f in: -78d51'00.000 42d54'00.000 428547.567 1056727.674 NY W GP1 out: "428547.567\t1056727.674 428547.567 1056727.674 NY W GP1" - args: +units=us-ft +init=nad27:3401 -f %.3f in: -80d49'28.238 40d17'50.894 2467363.986 234305.751 OH N GP1 out: "2467363.986\t234305.751 2467363.986 234305.751 OH N GP1" - args: +units=us-ft +init=nad27:3401 -f %.3f in: -82d37'31.021 40d20'14.678 1965071.932 244391.910 OH N GP2 out: "1965071.932\t244391.910 1965071.932 244391.910 OH N GP2" - args: +units=us-ft +init=nad27:3402 -f %.3f in: -84d15'00.000 39d45'00.000 1507970.925 642141.152 OH S GP1 out: "1507970.925\t642141.152 1507970.925 642141.152 OH S GP1" - args: +units=us-ft +init=nad27:3501 -f %.3f in: -98d42'45.414 36d50'19.568 1791448.615 670119.442 OK N GP1 out: "1791448.615\t670119.442 1791448.615 670119.442 OK N GP1" - args: +units=us-ft +init=nad27:3501 -f %.3f in: -95d38'44.046 35d20'36.925 2702176.218 133585.952 OK N GP2 out: "2702176.218\t133585.952 2702176.218 133585.952 OK N GP2" - args: +units=us-ft +init=nad27:3502 -f %.3f in: -97d08'00.000 34d34'00.000 2260914.787 449942.599 OK S GP1 out: "2260914.787\t449942.599 2260914.787 449942.599 OK S GP1" - args: +units=us-ft +init=nad27:3601 -f %.3f in: -123d41'00.000 45d31'00.000 1184216.898 690530.257 OR N GP1 out: "1184216.898\t690530.257 1184216.898 690530.257 OR N GP1" - args: +units=us-ft +init=nad27:3602 -f %.3f in: -119d46'26.562 44d24'25.943 2189746.353 999672.239 OR S GP1 out: "2189746.353\t999672.239 2189746.353 999672.239 OR S GP1" - args: +units=us-ft +init=nad27:3602 -f %.3f in: -121d09'56.105 44d23'08.924 1825970.576 991740.899 OR S GP2 out: "1825970.576\t991740.899 1825970.576 991740.899 OR S GP2" - args: +units=us-ft +init=nad27:3701 -f %.3f in: -74d33'20.644 41d23'48.566 2876202.339 464358.775 PA N GP1 out: "2876202.339\t464358.775 2876202.339 464358.775 PA N GP1" - args: +units=us-ft +init=nad27:3701 -f %.3f in: -78d09'48.121 40d51'35.455 1885652.438 252829.477 PA N GP2 out: "1885652.438\t252829.477 1885652.438 252829.477 PA N GP2" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -67d08'56.930 18d29'56.972 251990.753 242253.319 PR F GP1 out: "251990.753\t242253.319 251990.753 242253.319 PR F GP1" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -66d52'30.000 18d15'00.000 346756.548 151479.295 PR F GP2 out: "346756.548\t151479.295 346756.548 151479.295 PR F GP2" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -66d26'00.000 18d15'00.000 500000.000 151294.491 PR F GP3 out: "500000.000\t151294.491 500000.000 151294.491 PR F GP3" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -66d26'00.000 18d30'00.000 500000.000 242074.012 PR F GP4 out: "500000.000\t242074.012 500000.000 242074.012 PR F GP4" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -67d08'56.930 18d29'56.972 251990.753 242253.319 PR M GP1 out: "251990.753\t242253.319 251990.753 242253.319 PR M GP1" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -66d52'30.000 18d15'00.000 346756.548 151479.295 PR M GP2 out: "346756.548\t151479.295 346756.548 151479.295 PR M GP2" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -66d26'00.000 18d15'00.000 500000.000 151294.491 PR M GP3 out: "500000.000\t151294.491 500000.000 151294.491 PR M GP3" - args: +units=us-ft +init=nad27:5201 -f %.3f in: -66d26'00.000 18d30'00.000 500000.000 242074.012 PR M GP4 out: "500000.000\t242074.012 500000.000 242074.012 PR M GP4" - args: +units=us-ft +init=nad27:5202 -f %.3f in: -64d43'00.000 17d40'00.000 1097602.972 42283.509 PS S GP1 out: "1097602.972\t42283.509 1097602.972 42283.509 PS S GP1" - args: +units=us-ft +init=nad27:3800 -f %.3f in: -71d16'00.833 41d32'24.848 563817.074 166563.592 RI GP1 out: "563817.074\t166563.592 563817.074 166563.592 RI GP1" - args: +units=us-ft +init=nad27:3800 -f %.3f in: -71d37'13.730 41d23'53.266 466943.554 114721.079 RI GP2 out: "466943.554\t114721.079 466943.554 114721.079 RI GP2" - args: +units=us-ft +init=nad27:3901 -f %.3f in: -80d32'30.000 34d32'30.000 2138028.224 561330.721 SC N GP1 out: "2138028.224\t561330.721 2138028.224 561330.721 SC N GP1" - args: +units=us-ft +init=nad27:3901 -f %.3f in: -81d00'00.000 34d32'30.000 2000000.000 561019.077 SC N GP2 out: "2000000.000\t561019.077 2000000.000 561019.077 SC N GP2" - args: +units=us-ft +init=nad27:3902 -f %.3f in: -80d32'30.000 33d32'30.000 2139661.529 621836.603 SC S GP1 out: "2139661.529\t621836.603 2139661.529 621836.603 SC S GP1" - args: +units=us-ft +init=nad27:3902 -f %.3f in: -81d00'00.000 33d32'30.000 2000000.000 621532.356 SC S GP2 out: "2000000.000\t621532.356 2000000.000 621532.356 SC S GP2" - args: +units=us-ft +init=nad27:4001 -f %.3f in: -99d12'21.983 44d06'08.121 2208566.880 99065.808 SD N GP1 out: "2208566.880\t99065.808 2208566.880 99065.808 SD N GP1" - args: +units=us-ft +init=nad27:4001 -f %.3f in: -100d32'28.873 44d32'34.917 1858852.206 259207.243 SD N GP2 out: "1858852.206\t259207.243 1858852.206 259207.243 SD N GP2" - args: +units=us-ft +init=nad27:4002 -f %.3f in: -103d14'00.000 44d06'00.000 1238344.555 657205.595 SD S GP1 out: "1238344.555\t657205.595 1238344.555 657205.595 SD S GP1" - args: +units=us-ft +init=nad27:4100 -f %.3f in: -85d13'55.967 36d21'48.503 2226074.895 718522.870 TN GP1 out: "2226074.895\t718522.870 2226074.895 718522.870 TN GP1" - args: +units=us-ft +init=nad27:4100 -f %.3f in: -88d43'05.849 36d30'08.410 1201097.659 779285.593 TN GP2 out: "1201097.659\t779285.593 1201097.659 779285.593 TN GP2" - args: +units=us-ft +init=nad27:4203 -f %.3f in: -97d06'00.000 31d35'00.000 3006704.541 711708.204 TX C GP1 out: "3006704.541\t711708.204 3006704.541 711708.204 TX C GP1" - args: +units=us-ft +init=nad27:4201 -f %.3f in: -100d33'06.303 34d39'35.684 2285173.373 241550.390 TX N GP1 out: "2285173.373\t241550.390 2285173.373 241550.390 TX N GP1" - args: +units=us-ft +init=nad27:4201 -f %.3f in: -102d48'50.949 34d43'39.249 1605118.921 267430.718 TX N GP2 out: "1605118.921\t267430.718 1605118.921 267430.718 TX N GP2" - args: +units=us-ft +init=nad27:4205 -f %.3f in: -97d30'00.000 25d55'00.000 2328727.194 92175.721 TX S GP1 out: "2328727.194\t92175.721 2328727.194 92175.721 TX S GP1" - args: +units=us-ft +init=nad27:4202 -f %.3f in: -96d48'00.000 32d45'00.000 2215204.973 394833.169 TXNC GP1 out: "2215204.973\t394833.169 2215204.973 394833.169 TXNC GP1" - args: +units=us-ft +init=nad27:4204 -f %.3f in: -98d30'00.000 29d25'00.000 2159176.237 576022.948 TXSC GP1 out: "2159176.237\t576022.948 2159176.237 576022.948 TXSC GP1" - args: +units=us-ft +init=nad27:4302 -f %.3f in: -111d30'00.000 38d40'00.000 2000000.000 121415.345 UT C GP1 out: "2000000.000\t121415.345 2000000.000 121415.345 UT C GP1" - args: +units=us-ft +init=nad27:4302 -f %.3f in: -111d30'00.000 38d40'30.000 2000000.000 124450.619 UT C GP2 out: "2000000.000\t124450.619 2000000.000 124450.619 UT C GP2" - args: +units=us-ft +init=nad27:4301 -f %.3f in: -111d30'00.000 41d30'00.000 2000000.000 425057.445 UT N GP1 out: "2000000.000\t425057.445 2000000.000 425057.445 UT N GP1" - args: +units=us-ft +init=nad27:4301 -f %.3f in: -111d30'00.000 41d30'30.000 2000000.000 428093.810 UT N GP2 out: "2000000.000\t428093.810 2000000.000 428093.810 UT N GP2" - args: +units=us-ft +init=nad27:4303 -f %.3f in: -109d48'37.967 38d29'30.877 2483568.472 668988.098 UT S GP1 out: "2483568.472\t668988.098 2483568.472 668988.098 UT S GP1" - args: +units=us-ft +init=nad27:4303 -f %.3f in: -113d52'56.922 37d09'18.788 1305706.243 186731.606 UT S GP2 out: "1305706.243\t186731.606 1305706.243 186731.606 UT S GP2" - args: +units=us-ft +init=nad27:4501 -f %.3f in: -77d13'46.945 38d55'12.407 2361415.621 458962.786 VA N GP1 out: "2361415.621\t458962.786 2361415.621 458962.786 VA N GP1" - args: +units=us-ft +init=nad27:4501 -f %.3f in: -79d18'51.557 38d09'59.020 1765875.433 183017.881 VA N GP2 out: "1765875.433\t183017.881 1765875.433 183017.881 VA N GP2" - args: +units=us-ft +init=nad27:4501 -f %.3f in: -77d38'10.823 37d49'23.964 2249484.834 58221.695 VA N GP3 out: "2249484.834\t58221.695 2249484.834 58221.695 VA N GP3" - args: +units=us-ft +init=nad27:4501 -f %.3f in: -79d26'19.475 37d47'25.852 1728704.621 46487.604 VA N GP4 out: "1728704.621\t46487.604 1728704.621 46487.604 VA N GP4" - args: +units=us-ft +init=nad27:4501 -f %.3f in: -77d44'30.336 39d00'06.804 2215488.016 487135.448 VA N GP6 out: "2215488.016\t487135.448 2215488.016 487135.448 VA N GP6" - args: +units=us-ft +init=nad27:4501 -f %.3f in: -77d43'47.013 38d59'55.454 2218917.620 486015.701 VA N GP9 out: "2218917.620\t486015.701 2218917.620 486015.701 VA N GP9" - args: +units=us-ft +init=nad27:4502 -f %.3f in: -78d30'00.000 37d30'00.000 2000000.000 424763.516 VA S GP1 out: "2000000.000\t424763.516 2000000.000 424763.516 VA S GP1" - args: +units=us-ft +init=nad27:4502 -f %.3f in: -78d30'00.000 37d30'30.000 2000000.000 427797.710 VA S GP2 out: "2000000.000\t427797.710 2000000.000 427797.710 VA S GP2" - args: +units=us-ft +init=nad27:4502 -f %.3f in: -77d32'33.000 36d54'42.507 2279939.213 212030.192 VA S GP3 out: "2279939.213\t212030.192 2279939.213 212030.192 VA S GP3" - args: +units=us-ft +init=nad27:4502 -f %.3f in: -77d21'55.732 38d04'53.901 2326572.191 638519.064 VA S GP4 out: "2326572.191\t638519.064 2326572.191 638519.064 VA S GP4" - args: +units=us-ft +init=nad27:5202 -f %.3f in: -64d45'30.000 17d45'30.000 1082794.001 75432.552 VI F GP1 out: "1082794.001\t75432.552 1082794.001 75432.552 VI F GP1" - args: +units=us-ft +init=nad27:5202 -f %.3f in: -66d26'00.000 17d45'56.426 500000.000 75432.505 VI F GP2 out: "500000.000\t75432.505 500000.000 75432.505 VI F GP2" - args: +units=us-ft +init=nad27:5202 -f %.3f in: -64d45'30.000 17d45'30.000 1082794.001 75432.552 VI M GP1 out: "1082794.001\t75432.552 1082794.001 75432.552 VI M GP1" - args: +units=us-ft +init=nad27:5202 -f %.3f in: -66d26'00.000 17d45'56.426 500000.000 75432.505 VI M GP2 out: "500000.000\t75432.505 500000.000 75432.505 VI M GP2" - args: +units=us-ft +init=nad27:4400 -f %.3f in: -72d29'31.418 43d09'58.526 502118.227 242816.621 VT GP1 out: "502118.227\t242816.621 502118.227 242816.621 VT GP1" - args: +units=us-ft +init=nad27:4400 -f %.3f in: -73d12'06.978 44d22'22.810 316451.963 683472.660 VT GP2 out: "316451.963\t683472.660 316451.963 683472.660 VT GP2" - args: +units=us-ft +init=nad27:4601 -f %.3f in: -119d51'37.006 47d50'51.069 2238927.196 310658.148 WA N GP1 out: "2238927.196\t310658.148 2238927.196 310658.148 WA N GP1" - args: +units=us-ft +init=nad27:4601 -f %.3f in: -123d59'49.087 48d09'29.131 1228043.506 438306.777 WA N GP2 out: "1228043.506\t438306.777 1228043.506 438306.777 WA N GP2" - args: +units=us-ft +init=nad27:4602 -f %.3f in: -122d54'00.000 46d09'00.000 1391814.257 307059.945 WA S GP1 out: "1391814.257\t307059.945 1391814.257 307059.945 WA S GP1" - args: +units=us-ft +init=nad27:4802 -f %.3f in: -88d04'00.000 44d30'00.000 2504399.560 249042.105 WI C GP1 out: "2504399.560\t249042.105 2504399.560 249042.105 WI C GP1" - args: +units=us-ft +init=nad27:4801 -f %.3f in: -88d44'40.778 45d22'21.598 2322632.765 77666.151 WI N GP1 out: "2322632.765\t77666.151 2322632.765 77666.151 WI N GP1" - args: +units=us-ft +init=nad27:4801 -f %.3f in: -92d12'19.275 45d48'35.812 1437681.450 242373.846 WI N GP2 out: "1437681.450\t242373.846 1437681.450 242373.846 WI N GP2" - args: +units=us-ft +init=nad27:4803 -f %.3f in: -89d23'00.000 43d05'00.000 2164743.544 395445.420 WI S GP1 out: "2164743.544\t395445.420 2164743.544 395445.420 WI S GP1" - args: +units=us-ft +init=nad27:4701 -f %.3f in: -77d53'39.269 39d14'39.339 2454764.840 275139.246 WV N GP1 out: "2454764.840\t275139.246 2454764.840 275139.246 WV N GP1" - args: +units=us-ft +init=nad27:4701 -f %.3f in: -81d33'23.549 39d18'08.535 1418073.862 298900.611 WV N GP2 out: "1418073.862\t298900.611 1418073.862 298900.611 WV N GP2" - args: +units=us-ft +init=nad27:4701 -f %.3f in: -77d30'10.460 38d59'25.903 2567632.286 184970.946 WV N GP3 out: "2567632.286\t184970.946 2567632.286 184970.946 WV N GP3" - args: +units=us-ft +init=nad27:4901 -f %.3f in: -105d07'00.000 44d38'00.000 513016.009 1445570.355 WY E GP1 out: "513016.009\t1445570.354 513016.009 1445570.355 WY E GP1" - args: +units=us-ft +init=nad27:4901 -f %.3f in: -105d31'02.882 43d30'40.600 406937.677 1036750.418 WY E GP1 out: "406937.677\t1036750.417 406937.677 1036750.418 WY E GP1" - args: +units=us-ft +init=nad27:4901 -f %.3f in: -105d22'42.856 43d30'14.685 443778.141 1034002.062 WY E GP2 out: "443778.141\t1034002.062 443778.141 1034002.062 WY E GP2" - args: +units=us-ft +init=nad27:4901 -f %.3f in: -105d28'42.827 43d36'33.391 417392.389 1072428.186 WY E GP3 out: "417392.389\t1072428.186 417392.389 1072428.186 WY E GP3" - args: +units=us-ft +init=nad27:4901 -f %.3f in: -105d23'43.223 42d00'59.422 437860.186 491889.060 WY E GP4 out: "437860.186\t491889.060 437860.186 491889.060 WY E GP4" - args: +units=us-ft +init=nad27:4901 -f %.3f in: -104d35'06.686 42d34'50.366 656606.905 697923.643 WY E GP5 out: "656606.905\t697923.643 656606.905 697923.643 WY E GP5" - args: +units=us-ft +init=nad27:4904 -f %.3f in: -110d36'00.000 41d48'00.000 359125.204 413338.815 WY W GP1 out: "359125.204\t413338.815 359125.204 413338.815 WY W GP1" - args: +units=us-ft +init=nad27:4902 -f %.3f in: -106d13'03.224 41d36'14.640 805153.891 343496.746 WYEC GP1 out: "805153.891\t343496.745 805153.891 343496.746 WYEC GP1" - args: +units=us-ft +init=nad27:4902 -f %.3f in: -108d01'56.720 41d51'57.518 309581.204 437731.262 WYEC GP2 out: "309581.204\t437731.262 309581.204 437731.262 WYEC GP2" - args: +units=us-ft +init=nad27:4903 -f %.3f in: -108d24'00.000 43d02'00.000 593579.361 862553.590 WYWC GP1 out: "593579.361\t862553.590 593579.361 862553.590 WYWC GP1" proj-9.6.0/test/cli/test_proj_nad83.yaml000664 001754 001755 00000123242 14764566077 020045 0ustar00e012349e012349000000 000000 comment: > These tests are from an old script "test83" from the 1990s used to test nad83 init files with most of the SPCS zones. It was originally generated from execution of NMD's program l176, where the second pair of numbers are respective easting and northing output. Original versions of proj varied in the .001ft range with projections using Transverse Mercator due to greater precision of meridional distance function. exe: proj tests: - args: +units=us-ft +init=nad83:5001 -E -f %.3f in: -134d00'00.000 55d00'00.000 2616018.154 1156379.643 AK 1 GP1 out: "-134d00'00.000 55d00'00.000\t2616018.154\t1156379.643 2616018.154 1156379.643 AK 1 GP1" - args: +units=us-ft +init=nad83:5001 -f %.3f in: -133d40'00.000 57d00'00.000 2685941.919 1886799.668 AK 1 GP2 out: "2685941.919\t1886799.668 2685941.919 1886799.668 AK 1 GP2" - args: +units=us-ft +init=nad83:5001 -f %.3f in: -131d35'45.432 54d39'02.654 3124531.426 1035343.511 AK 1 GP3 out: "3124531.426\t1035343.511 3124531.426 1035343.511 AK 1 GP3" - args: +units=us-ft +init=nad83:5001 -f %.3f in: -129d32'30.000 54d32'30.000 3561448.345 1015025.876 AK 1 GP4 out: "3561448.345\t1015025.876 3561448.345 1015025.876 AK 1 GP4" - args: +units=us-ft +init=nad83:5001 -f %.3f in: -141d30'00.000 60d30'00.000 1276328.587 3248159.207 AK 1 GP6 out: "1276328.587\t3248159.207 1276328.587 3248159.207 AK 1 GP6" - args: +units=us-ft +init=nad83:5002 -f %.3f in: -142d00'00.000 56d30'30.000 1640416.667 916074.825 AK 2 GP1 out: "1640416.667\t916074.824 1640416.667 916074.825 AK 2 GP1" - args: +units=us-ft +init=nad83:5003 -f %.3f in: -146d00'00.000 56d30'30.000 1640416.667 916074.825 AK 3 GP1 out: "1640416.667\t916074.824 1640416.667 916074.825 AK 3 GP1" - args: +units=us-ft +init=nad83:5004 -f %.3f in: -150d00'00.000 56d30'30.000 1640416.667 916074.825 AK 4 GP1 out: "1640416.667\t916074.824 1640416.667 916074.825 AK 4 GP1" - args: +units=us-ft +init=nad83:5005 -f %.3f in: -152d28'56.134 60d53'28.765 1910718.662 2520810.680 AK 5 GP1 out: "1910718.662\t2520810.679 1910718.662 2520810.680 AK 5 GP1" - args: +units=us-ft +init=nad83:5005 -f %.3f in: -154d00'00.000 56d30'30.000 1640416.667 916074.825 AK 5 GP2 out: "1640416.667\t916074.824 1640416.667 916074.825 AK 5 GP2" - args: +units=us-ft +init=nad83:5006 -f %.3f in: -155d00'00.000 71d00'00.000 1998036.998 6224208.217 AK 6 GP1 out: "1998036.998\t6224208.215 1998036.998 6224208.217 AK 6 GP1" - args: +units=us-ft +init=nad83:5006 -f %.3f in: -158d00'00.000 71d00'00.000 1640416.667 6215353.367 AK 6 GP1 out: "1640416.667\t6215353.365 1640416.667 6215353.367 AK 6 GP1" - args: +units=us-ft +init=nad83:5007 -f %.3f in: -162d00'00.000 65d15'00.000 1640416.667 4111446.441 AK 7 GP1 out: "1640416.667\t4111446.440 1640416.667 4111446.441 AK 7 GP1" - args: +units=us-ft +init=nad83:5008 -f %.3f in: -166d00'00.000 65d15'00.000 1640416.667 4111446.441 AK 8 GP1 out: "1640416.667\t4111446.440 1640416.667 4111446.441 AK 8 GP1" - args: +units=us-ft +init=nad83:5009 -f %.3f in: -170d00'00.000 63d20'00.000 1640416.667 3410489.717 AK 9 GP1 out: "1640416.667\t3410489.716 1640416.667 3410489.717 AK 9 GP1" - args: +units=us-ft +init=nad83:5010 -f %.3f in: -164d02'30.000 54d27'30.000 5814167.604 1473788.834 AK10 GP1 out: "5814167.604\t1473788.834 5814167.604 1473788.834 AK10 GP1" - args: +units=us-ft +init=nad83:5010 -f %.3f in: -176d00'00.000 52d30'00.000 3280833.333 547580.542 AK10 GP2 out: "3280833.333\t547580.542 3280833.333 547580.542 AK10 GP2" - args: +units=us-ft +init=nad83:101 -f %.3f in: -85d50'00.000 31d20'00.000 656166.667 303104.183 AL E GP1 out: "656166.667\t303104.183 656166.667 303104.183 AL E GP1" - args: +units=us-ft +init=nad83:101 -f %.3f in: -85d12'41.738 32d38'57.737 847539.085 782420.807 AL E GP2 out: "847539.085\t782420.807 847539.085 782420.807 AL E GP2" - args: +units=us-ft +init=nad83:101 -f %.3f in: -86d36'58.670 34d48'58.708 421151.975 1571298.908 AL E GP3 out: "421151.975\t1571298.908 421151.975 1571298.908 AL E GP3" - args: +units=us-ft +init=nad83:102 -f %.3f in: -87d30'00.000 33d20'00.000 1968500.000 1212527.587 AL W GP1 out: "1968500.000\t1212527.586 1968500.000 1212527.587 AL W GP1" - args: +units=us-ft +init=nad83:102 -f %.3f in: -87d30'00.000 33d20'30.000 1968500.000 1215559.708 AL W GP2 out: "1968500.000\t1215559.708 1968500.000 1215559.708 AL W GP2" - args: +units=us-ft +init=nad83:301 -f %.3f in: -91d34'46.321 35d18'37.443 1437779.156 355900.759 AR N GP1 out: "1437779.156\t355900.759 1437779.156 355900.759 AR N GP1" - args: +units=us-ft +init=nad83:301 -f %.3f in: -92d04'11.625 35d19'34.269 1291483.982 361385.695 AR N GP2 out: "1291483.982\t361385.695 1291483.982 361385.695 AR N GP2" - args: +units=us-ft +init=nad83:302 -f %.3f in: -92d00'00.000 34d45'00.000 1312333.333 2070451.744 AR S GP1 out: "1312333.333\t2070451.744 1312333.333 2070451.744 AR S GP1" - args: +units=us-ft +init=nad83:302 -f %.3f in: -92d00'00.000 33d15'00.000 1312333.333 1524603.730 AR S GP2 out: "1312333.333\t1524603.730 1312333.333 1524603.730 AR S GP2" - args: +units=us-ft +init=nad83:202 -f %.3f in: -111d55'00.000 34d45'00.000 699998.600 1364309.666 AZ C GP1 out: "699998.600\t1364309.666 699998.600 1364309.666 AZ C GP1" - args: +units=us-ft +init=nad83:202 -f %.3f in: -111d55'00.000 32d20'00.000 699998.600 484994.340 AZ C GP2 out: "699998.600\t484994.340 699998.600 484994.340 AZ C GP2" - args: +units=us-ft +init=nad83:201 -f %.3f in: -110d24'59.771 35d09'58.568 625301.460 1515899.830 AZ E GP1 out: "625301.460\t1515899.830 625301.460 1515899.830 AZ E GP1" - args: +units=us-ft +init=nad83:201 -f %.3f in: -109d34'33.127 31d59'53.103 883142.524 363539.663 AZ E GP2 out: "883142.524\t363539.663 883142.524 363539.663 AZ E GP2" - args: +units=us-ft +init=nad83:201 -f %.3f in: -110d30'34.948 35d07'28.243 597423.277 1500785.235 AZ E GP3 out: "597423.277\t1500785.234 597423.277 1500785.235 AZ E GP3" - args: +units=us-ft +init=nad83:201 -f %.3f in: -109d45'13.226 32d08'41.778 827818.955 416705.394 AZ E GP4 out: "827818.955\t416705.394 827818.955 416705.394 AZ E GP4" - args: +units=us-ft +init=nad83:203 -f %.3f in: -113d45'00.000 34d45'00.000 699998.600 1364355.147 AZ W GP1 out: "699998.600\t1364355.147 699998.600 1364355.147 AZ W GP1" - args: +units=us-ft +init=nad83:203 -f %.3f in: -113d45'00.000 34d45'30.000 699998.600 1367387.968 AZ W GP2 out: "699998.600\t1367387.968 699998.600 1367387.968 AZ W GP2" - args: +units=us-ft +init=nad83:203 -f %.3f in: -113d45'00.000 34d46'00.000 699998.600 1370420.793 AZ W GP3 out: "699998.600\t1370420.793 699998.600 1370420.793 AZ W GP3" - args: +units=us-ft +init=nad83:401 -f %.3f in: -122d00'00.000 41d30'00.000 6561666.667 2429744.729 CA 1 GP1 out: "6561666.667\t2429744.729 6561666.667 2429744.729 CA 1 GP1" - args: +units=us-ft +init=nad83:401 -f %.3f in: -122d00'00.000 41d30'30.000 6561666.667 2432781.128 CA 1 GP2 out: "6561666.667\t2432781.128 6561666.667 2432781.128 CA 1 GP2" - args: +units=us-ft +init=nad83:402 -f %.3f in: -122d00'00.000 39d20'00.000 6561666.667 2247404.250 CA 2 GP1 out: "6561666.667\t2247404.250 6561666.667 2247404.250 CA 2 GP1" - args: +units=us-ft +init=nad83:402 -f %.3f in: -122d00'00.000 39d20'30.000 6561666.667 2250439.391 CA 2 GP2 out: "6561666.667\t2250439.391 6561666.667 2250439.391 CA 2 GP2" - args: +units=us-ft +init=nad83:403 -f %.3f in: -120d30'00.000 37d05'00.000 6561666.667 1852815.760 CA 3 GP1 out: "6561666.667\t1852815.760 6561666.667 1852815.760 CA 3 GP1" - args: +units=us-ft +init=nad83:403 -f %.3f in: -121d22'26.019 37d30'30.324 6308189.835 2008776.145 CA 3 GP2 out: "6308189.835\t2008776.145 6308189.835 2008776.145 CA 3 GP2" - args: +units=us-ft +init=nad83:403 -f %.3f in: -119d46'32.733 37d07'41.470 6772808.251 1869963.783 CA 3 GP3 out: "6772808.251\t1869963.783 6772808.251 1869963.783 CA 3 GP3" - args: +units=us-ft +init=nad83:403 -f %.3f in: -119d38'26.434 36d55'48.009 6812851.254 1798140.563 CA 3 GP4 out: "6812851.254\t1798140.563 6812851.254 1798140.563 CA 3 GP4" - args: +units=us-ft +init=nad83:403 -f %.3f in: -120d42'59.779 38d06'52.815 6499349.432 2228414.867 CA 3 GP5 out: "6499349.432\t2228414.867 6499349.432 2228414.867 CA 3 GP5" - args: +units=us-ft +init=nad83:404 -f %.3f in: -119d00'00.000 36d20'00.000 6561666.667 2004462.102 CA 4 GP1 out: "6561666.667\t2004462.102 6561666.667 2004462.102 CA 4 GP1" - args: +units=us-ft +init=nad83:404 -f %.3f in: -119d00'00.000 36d20'30.000 6561666.667 2007495.782 CA 4 GP2 out: "6561666.667\t2007495.782 6561666.667 2007495.782 CA 4 GP2" - args: +units=us-ft +init=nad83:405 -f %.3f in: -118d00'00.000 34d45'00.000 6561666.667 2095323.781 CA 5 GP1 out: "6561666.667\t2095323.781 6561666.667 2095323.781 CA 5 GP1" - args: +units=us-ft +init=nad83:405 -f %.3f in: -118d00'00.000 34d45'30.000 6561666.667 2098356.568 CA 5 GP2 out: "6561666.667\t2098356.568 6561666.667 2098356.568 CA 5 GP2" - args: +units=us-ft +init=nad83:406 -f %.3f in: -116d15'00.000 33d20'00.000 6561666.667 2064911.626 CA 6 GP1 out: "6561666.667\t2064911.626 6561666.667 2064911.626 CA 6 GP1" - args: +units=us-ft +init=nad83:406 -f %.3f in: -116d15'00.000 33d20'30.000 6561666.667 2067943.810 CA 6 GP2 out: "6561666.667\t2067943.810 6561666.667 2067943.810 CA 6 GP2" - args: +units=us-ft +init=nad83:406 -f %.3f in: -118d20'00.000 34d30'00.000 5933874.572 2495758.727 CA 7 GP1 out: "5933874.572\t2495758.727 5933874.572 2495758.727 CA 7 GP1" - args: +units=us-ft +init=nad83:502 -f %.3f in: -105d30'00.000 39d15'00.000 3000000.000 1515946.820 CO C GP1 out: "3000000.000\t1515946.820 3000000.000 1515946.820 CO C GP1" - args: +units=us-ft +init=nad83:502 -f %.3f in: -105d30'00.000 39d15'30.000 3000000.000 1518981.963 CO C GP2 out: "3000000.000\t1518981.963 3000000.000 1518981.963 CO C GP2" - args: +units=us-ft +init=nad83:501 -f %.3f in: -108d45'55.378 40d25'33.504 2091110.958 1414758.884 CO N GP1 out: "2091110.958\t1414758.884 2091110.958 1414758.884 CO N GP1" - args: +units=us-ft +init=nad83:501 -f %.3f in: -105d14'45.588 40d12'42.711 3070938.779 1320125.979 CO N GP2 out: "3070938.779\t1320125.979 3070938.779 1320125.979 CO N GP2" - args: +units=us-ft +init=nad83:503 -f %.3f in: -105d30'00.000 37d30'00.000 3000000.000 1303432.168 CO S GP1 out: "3000000.000\t1303432.168 3000000.000 1303432.168 CO S GP1" - args: +units=us-ft +init=nad83:503 -f %.3f in: -105d30'00.000 37d30'30.000 3000000.000 1306466.471 CO S GP2 out: "3000000.000\t1306466.471 3000000.000 1306466.471 CO S GP2" - args: +units=us-ft +init=nad83:600 -f %.3f in: -72d43'30.515 41d16'55.847 1006831.954 663542.786 CT GP1 out: "1006831.954\t663542.786 1006831.954 663542.786 CT GP1" - args: +units=us-ft +init=nad83:600 -f %.3f in: -73d01'15.609 41d13'25.985 925448.220 642418.129 CT GP2 out: "925448.220\t642418.129 925448.220 642418.129 CT GP2" - args: +units=us-ft +init=nad83:700 -f %.3f in: -75d33'00.748 39d21'15.214 618403.524 493238.843 DE GP1 out: "618403.524\t493238.843 618403.524 493238.843 DE GP1" - args: +units=us-ft +init=nad83:700 -f %.3f in: -75d19'01.889 39d45'14.765 684135.532 638883.528 DE GP2 out: "684135.532\t638883.528 684135.532 638883.528 DE GP2" - args: +units=us-ft +init=nad83:903 -f %.3f in: -82d45'52.412 29d39'06.589 2519743.236 241248.726 FL N GP1 out: "2519743.236\t241248.726 2519743.236 241248.726 FL N GP1" - args: +units=us-ft +init=nad83:903 -f %.3f in: -84d55'11.533 29d38'51.982 1835122.674 235823.399 FL N GP2 out: "1835122.674\t235823.399 1835122.674 235823.399 FL N GP2" - args: +units=us-ft +init=nad83:1001 -f %.3f in: -81d27'15.592 32d38'03.003 875449.222 958850.568 GA E GP1 out: "875449.222\t958850.568 875449.222 958850.568 GA E GP1" - args: +units=us-ft +init=nad83:1001 -f %.3f in: -83d15'39.990 33d29'58.626 322535.391 1274748.301 GA E GP2 out: "322535.391\t1274748.301 322535.391 1274748.301 GA E GP2" - args: +units=us-ft +init=nad83:5101 -f %.3f in: -155d59'16.911 19d37'23.477 1472470.137 287083.198 HI 1 GP1 out: "1472470.137\t287083.198 1472470.137 287083.198 HI 1 GP1" - args: +units=us-ft +init=nad83:5101 -f %.3f in: -155d18'06.262 19d31'24.578 1708685.701 250676.240 HI 1 GP2 out: "1708685.701\t250676.240 1708685.701 250676.240 HI 1 GP2" - args: +units=us-ft +init=nad83:5101 -f %.3f in: -155d30'00.000 19d42'00.000 1640416.667 314739.275 HI 1 GP3 out: "1640416.667\t314739.275 1640416.667 314739.275 HI 1 GP3" - args: +units=us-ft +init=nad83:5101 -f %.3f in: -155d30'00.000 19d42'30.000 1640416.667 317765.760 HI 1 GP4 out: "1640416.667\t317765.760 1640416.667 317765.760 HI 1 GP4" - args: +units=us-ft +init=nad83:5102 -f %.3f in: -156d40'00.000 20d42'00.000 1640416.667 133177.588 HI 2 GP1 out: "1640416.667\t133177.588 1640416.667 133177.588 HI 2 GP1" - args: +units=us-ft +init=nad83:5102 -f %.3f in: -156d40'00.000 20d42'30.000 1640416.667 136204.417 HI 2 GP2 out: "1640416.667\t136204.417 1640416.667 136204.417 HI 2 GP2" - args: +units=us-ft +init=nad83:5103 -f %.3f in: -158d00'00.000 21d30'00.000 1640416.667 121084.931 HI 3 GP1 out: "1640416.667\t121084.931 1640416.667 121084.931 HI 3 GP1" - args: +units=us-ft +init=nad83:5103 -f %.3f in: -158d01'30.000 21d37'30.000 1631925.017 166493.704 HI 3 GP2 out: "1631925.017\t166493.704 1631925.017 166493.704 HI 3 GP2" - args: +units=us-ft +init=nad83:5104 -f %.3f in: -159d30'00.000 22d05'00.000 1640416.667 90820.525 HI 4 GP1 out: "1640416.667\t90820.525 1640416.667 90820.525 HI 4 GP1" - args: +units=us-ft +init=nad83:5105 -f %.3f in: -160d10'00.000 21d42'00.000 1640416.667 12109.121 HI 5 GP1 out: "1640416.667\t12109.121 1640416.667 12109.121 HI 5 GP1" - args: +units=us-ft +init=nad83:1401 -f %.3f in: -93d28'33.966 42d44'50.101 4927669.136 3735362.601 IA N GP1 out: "4927669.136\t3735362.601 4927669.136 3735362.601 IA N GP1" - args: +units=us-ft +init=nad83:1401 -f %.3f in: -93d54'22.084 42d40'23.699 4812032.409 3708655.393 IA N GP2 out: "4812032.409\t3708655.393 4812032.409 3708655.393 IA N GP2" - args: +units=us-ft +init=nad83:1101 -f %.3f in: -111d42'29.824 43d48'07.616 777180.670 778579.414 ID E GP1 out: "777180.670\t778579.414 777180.670 778579.414 ID E GP1" - args: +units=us-ft +init=nad83:1101 -f %.3f in: -112d22'35.516 43d35'26.260 600566.613 701226.817 ID E GP2 out: "600566.613\t701226.817 600566.613 701226.817 ID E GP2" - args: +units=us-ft +init=nad83:1103 -f %.3f in: -116d22'02.592 48d07'50.941 2473902.726 2357266.577 ID W GP1 out: "2473902.726\t2357266.576 2473902.726 2357266.577 ID W GP1" - args: +units=us-ft +init=nad83:1201 -f %.3f in: -88d07'06.790 41d46'11.855 1042839.901 1858837.259 IL E GP1 out: "1042839.901\t1858837.259 1042839.901 1858837.259 IL E GP1" - args: +units=us-ft +init=nad83:1201 -f %.3f in: -88d41'35.208 40d43'37.202 884532.422 1478959.912 IL E GP2 out: "884532.422\t1478959.911 884532.422 1478959.912 IL E GP2" - args: +units=us-ft +init=nad83:1301 -f %.3f in: -85d40'00.000 40d00'00.000 328083.333 1730697.447 IN E GP1 out: "328083.333\t1730697.447 328083.333 1730697.447 IN E GP1" - args: +units=us-ft +init=nad83:1301 -f %.3f in: -85d40'00.000 40d00'30.000 328083.333 1733733.066 IN E GP2 out: "328083.333\t1733733.065 328083.333 1733733.066 IN E GP2" - args: +units=us-ft +init=nad83:1301 -f %.3f in: -86d14'27.780 40d00'12.690 167175.533 1732499.995 IN E GP3 out: "167175.533\t1732499.995 167175.533 1732499.995 IN E GP3" - args: +units=us-ft +init=nad83:1301 -f %.3f in: -86d14'27.790 40d00'31.660 167187.126 1734419.540 IN E GP4 out: "167187.126\t1734419.540 167187.126 1734419.540 IN E GP4" - args: +units=us-ft +init=nad83:1301 -f %.3f in: -86d14'28.103 40d00'47.412 167173.047 1736013.616 IN E GP6 out: "167173.047\t1736013.615 167173.047 1736013.616 IN E GP6" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -87d05'00.000 40d00'00.000 2952750.000 1730697.447 IN W GP1 out: "2952750.000\t1730697.447 2952750.000 1730697.447 IN W GP1" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -87d05'00.000 40d00'30.000 2952750.000 1733733.066 IN W GP2 out: "2952750.000\t1733733.065 2952750.000 1733733.066 IN W GP2" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -86d45'10.717 39d41'24.840 3045717.498 1618031.699 IN W GP3 out: "3045717.498\t1618031.699 3045717.498 1618031.699 IN W GP3" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -87d41'44.075 37d54'24.755 2776105.988 968944.255 IN W GP4 out: "2776105.988\t968944.255 2776105.988 968944.255 IN W GP4" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -86d32'13.179 39d32'46.419 3106817.690 1565874.113 IN W GP5 out: "3106817.690\t1565874.112 3106817.690 1565874.113 IN W GP5" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -87d25'26.675 38d26'17.646 2855150.544 1162044.125 IN W GP6 out: "2855150.544\t1162044.125 2855150.544 1162044.125 IN W GP6" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -86d14'28.103 40d00'47.412 3188649.790 1736609.724 IN W GP7 out: "3188649.790\t1736609.724 3188649.790 1736609.724 IN W GP7" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -86d14'27.780 40d00'12.690 3188708.130 1733096.467 IN W GP8 out: "3188708.130\t1733096.467 3188708.130 1733096.467 IN W GP8" - args: +units=us-ft +init=nad83:1302 -f %.3f in: -86d14'27.790 40d00'31.660 3188689.210 1735016.020 IN W GP9 out: "3188689.210\t1735016.020 3188689.210 1735016.020 IN W GP9" - args: +units=us-ft +init=nad83:1501 -f %.3f in: -96d47'54.567 38d58'52.096 1653880.047 238201.110 KS N GP1 out: "1653880.047\t238201.110 1653880.047 238201.110 KS N GP1" - args: +units=us-ft +init=nad83:1501 -f %.3f in: -98d35'23.954 39d58'41.967 1146983.460 599694.197 KS N GP2 out: "1146983.460\t599694.197 1146983.460 599694.197 KS N GP2" - args: +units=us-ft +init=nad83:1601 -f %.3f in: -84d05'43.283 38d14'35.963 1684830.325 270726.733 KY N GP1 out: "1684830.325\t270726.733 1684830.325 270726.733 KY N GP1" - args: +units=us-ft +init=nad83:1601 -f %.3f in: -84d26'49.265 39d04'03.099 1584475.157 570918.805 KY N GP2 out: "1584475.157\t570918.805 1584475.157 570918.805 KY N GP2" - args: +units=us-ft +init=nad83:1701 -f %.3f in: -91d34'46.483 31d57'26.243 3566283.410 531318.874 LA N GP1 out: "3566283.410\t531318.874 3566283.410 531318.874 LA N GP1" - args: +units=us-ft +init=nad83:1701 -f %.3f in: -92d52'46.615 32d54'52.264 3164322.062 878564.036 LA N GP2 out: "3164322.062\t878564.036 3164322.062 878564.036 LA N GP2" - args: +units=us-ft +init=nad83:1701 -f %.3f in: -91d29'09.480 31d56'44.721 3595353.711 527382.519 LA N GP3 out: "3595353.711\t527382.519 3595353.711 527382.519 LA N GP3" - args: +units=us-ft +init=nad83:1701 -f %.3f in: -93d59'38.241 32d48'43.467 2821809.119 844247.864 LA N GP4 out: "2821809.119\t844247.864 2821809.119 844247.864 LA N GP4" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d00'00.000 28d50'00.000 4027995.272 128836.330 LA S GP1 out: "4027995.272\t128836.330 4027995.272 128836.330 LA S GP1" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d30'00.000 28d50'00.000 3867904.667 125925.406 LA S GP2 out: "3867904.667\t125925.406 3867904.667 125925.406 LA S GP2" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d29'59.999 29d19'59.994 3864995.756 307730.820 LA S GP3 out: "3864995.756\t307730.820 3864995.756 307730.820 LA S GP3" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d00'00.004 29d19'59.998 4024292.645 310627.715 LA S GP4 out: "4024292.645\t310627.715 4024292.645 310627.715 LA S GP4" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d10'23.487 29d20'32.615 3969054.663 312839.922 LA S GP5 out: "3969054.663\t312839.922 3969054.663 312839.922 LA S GP5" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d06'34.632 29d15'19.642 3989919.298 281618.678 LA S GP6 out: "3989919.298\t281618.678 3989919.298 281618.678 LA S GP6" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d01'33.803 29d07'47.918 4017480.813 236523.957 LA S GP7 out: "4017480.813\t236523.957 4017480.813 236523.957 LA S GP7" - args: +units=us-ft +init=nad83:1702 -f %.3f in: -89d08'45.781 28d58'27.979 3980254.597 179219.900 LA S GP9 out: "3980254.597\t179219.900 3980254.597 179219.900 LA S GP9" - args: +units=us-ft +init=nad83:2001 -f %.3f in: -70d27'00.716 41d40'15.808 942982.782 2706924.168 MA M GP1 out: "942982.782\t2706924.168 942982.782 2706924.168 MA M GP1" - args: +units=us-ft +init=nad83:2001 -f %.3f in: -73d25'59.173 42d06'06.860 131613.265 2868104.007 MA M GP2 out: "131613.265\t2868104.007 131613.265 2868104.007 MA M GP2" - args: +units=us-ft +init=nad83:1900 -f %.3f in: -76d11'27.492 39d12'06.132 1541600.105 560062.872 MD GP1 out: "1541600.105\t560062.872 1541600.105 560062.872 MD GP1" - args: +units=us-ft +init=nad83:1900 -f %.3f in: -77d02'30.406 38d26'37.492 1300367.185 283004.738 MD GP2 out: "1300367.185\t283004.738 1300367.185 283004.738 MD GP2" - args: +units=us-ft +init=nad83:1900 -f %.3f in: -77d30'10.460 38d59'25.903 1169392.711 482527.897 MD GP3 out: "1169392.711\t482527.897 1169392.711 482527.897 MD GP3" - args: +units=us-ft +init=nad83:1801 -f %.3f in: -68d24'25.489 46d32'46.920 1007629.154 1049880.999 ME E GP1 out: "1007629.154\t1049880.999 1007629.154 1049880.999 ME E GP1" - args: +units=us-ft +init=nad83:1801 -f %.3f in: -68d37'29.366 47d02'12.659 953127.598 1228762.971 ME E GP2 out: "953127.598\t1228762.971 953127.598 1228762.971 ME E GP2" - args: +units=us-ft +init=nad83:2113 -f %.3f in: -83d29'17.919 42d19'19.299 13360865.013 300809.378 MI S GP1 out: "13360865.013\t300809.378 13360865.013 300809.378 MI S GP1" - args: +units=us-ft +init=nad83:2113 -f %.3f in: -83d35'24.656 42d20'02.682 13333276.507 304929.978 MI S GP2 out: "13333276.507\t304929.978 13333276.507 304929.978 MI S GP2" - args: +units=us-ft +init=nad83:2113 -f %.3f in: -85d55'26.569 41d50'10.236 12698916.149 126441.631 MI S GP3 out: "12698916.149\t126441.631 12698916.149 126441.631 MI S GP3" - args: +units=us-ft +init=nad83:2113 -f %.3f in: -85d45'59.490 41d49'22.346 12741759.240 120840.463 MI S GP4 out: "12741759.240\t120840.463 12741759.240 120840.463 MI S GP4" - args: +units=us-ft +init=nad83:2201 -f %.3f in: -91d27'51.183 47d08'19.177 3031741.394 565338.600 MN N GP1 out: "3031741.394\t565338.600 3031741.394 565338.600 MN N GP1" - args: +units=us-ft +init=nad83:2201 -f %.3f in: -95d51'05.998 48d19'26.552 1955378.869 1005314.701 MN N GP2 out: "1955378.869\t1005314.701 1955378.869 1005314.701 MN N GP2" - args: +units=us-ft +init=nad83:2402 -f %.3f in: -92d30'00.000 38d15'00.000 1640416.667 879854.176 MO C GP1 out: "1640416.667\t879854.176 1640416.667 879854.176 MO C GP1" - args: +units=us-ft +init=nad83:2402 -f %.3f in: -92d30'00.000 38d15'30.000 1640416.667 882888.780 MO C GP2 out: "1640416.667\t882888.780 1640416.667 882888.780 MO C GP2" - args: +units=us-ft +init=nad83:2401 -f %.3f in: -91d42'04.297 37d22'05.932 471136.507 561031.592 MO E GP1 out: "471136.507\t561031.592 471136.507 561031.592 MO E GP1" - args: +units=us-ft +init=nad83:2401 -f %.3f in: -90d08'08.896 36d53'44.124 926703.606 386902.829 MO E GP2 out: "926703.606\t386902.829 926703.606 386902.829 MO E GP2" - args: +units=us-ft +init=nad83:2403 -f %.3f in: -94d30'00.000 38d15'00.000 2788708.333 758522.219 MO W GP1 out: "2788708.333\t758522.219 2788708.333 758522.219 MO W GP1" - args: +units=us-ft +init=nad83:2403 -f %.3f in: -94d30'00.000 38d15'30.000 2788708.333 761556.846 MO W GP2 out: "2788708.333\t761556.846 2788708.333 761556.846 MO W GP2" - args: +units=us-ft +init=nad83:2301 -f %.3f in: -89d10'14.013 30d30'51.338 878059.046 369015.468 MS E GP1 out: "878059.046\t369015.468 878059.046 369015.468 MS E GP1" - args: +units=us-ft +init=nad83:2301 -f %.3f in: -88d26'04.338 30d43'01.454 1109567.483 442842.466 MS E GP2 out: "1109567.483\t442842.466 1109567.483 442842.466 MS E GP2" - args: +units=us-ft +init=nad83:2500 -f %.3f in: -106d29'11.521 47d52'21.103 2707564.623 1334850.273 MT N GP1 out: "2707564.623\t1334850.273 2707564.623 1334850.273 MT N GP1" - args: +units=us-ft +init=nad83:2500 -f %.3f in: -114d30'43.122 48d52'46.764 763315.457 1726511.247 MT N GP2 out: "763315.457\t1726511.247 763315.457 1726511.247 MT N GP2" - args: +units=us-ft +init=nad83:3200 -f %.3f in: -81d12'31.790 35d09'31.049 1339869.379 520003.003 NC GP1 out: "1339869.379\t520003.003 1339869.379 520003.003 NC GP1" - args: +units=us-ft +init=nad83:3200 -f %.3f in: -76d31'54.918 35d33'51.452 2733923.842 669426.932 NC GP2 out: "2733923.842\t669426.932 2733923.842 669426.932 NC GP2" - args: +units=us-ft +init=nad83:3200 -f %.3f in: -78d28'26.580 36d15'15.480 2155084.559 911885.081 NC GP3 out: "2155084.559\t911885.081 2155084.559 911885.081 NC GP3" - args: +units=us-ft +init=nad83:3301 -f %.3f in: -98d46'03.232 48d08'13.483 2391470.474 419526.909 ND N GP1 out: "2391470.474\t419526.909 2391470.474 419526.909 ND N GP1" - args: +units=us-ft +init=nad83:3301 -f %.3f in: -101d18'21.456 47d39'18.935 1769873.906 240054.790 ND N GP2 out: "1769873.906\t240054.790 1769873.906 240054.790 ND N GP2" - args: +units=us-ft +init=nad83:2600 -f %.3f in: -96d17'52.930 42d04'48.305 2644820.409 839912.565 NE N GP1 out: "2644820.409\t839912.565 2644820.409 839912.565 NE N GP1" - args: +units=us-ft +init=nad83:2600 -f %.3f in: -100d49'26.949 41d58'54.025 1416403.828 783622.046 NE N GP2 out: "1416403.828\t783622.046 1416403.828 783622.046 NE N GP2" - args: +units=us-ft +init=nad83:2800 -f %.3f in: -70d56'11.287 43d08'15.006 1179151.981 233188.620 NH GP1 out: "1179151.981\t233188.619 1179151.981 233188.620 NH GP1" - args: +units=us-ft +init=nad83:2800 -f %.3f in: -72d32'32.197 42d51'25.984 749470.166 131406.173 NH GP2 out: "749470.166\t131406.173 749470.166 131406.173 NH GP2" - args: +units=us-ft +init=nad83:2900 -f %.3f in: -74d13'55.737 39d52'02.095 567304.543 376673.733 NJ GP1 out: "567304.543\t376673.733 567304.543 376673.733 NJ GP1" - args: +units=us-ft +init=nad83:2900 -f %.3f in: -74d51'24.058 41d12'07.401 393979.614 863010.549 NJ GP2 out: "393979.614\t863010.549 393979.614 863010.549 NJ GP2" - args: +units=us-ft +init=nad83:3002 -f %.3f in: -106d15'00.000 33d30'00.000 1640416.667 909448.493 NM C GP1 out: "1640416.667\t909448.493 1640416.667 909448.493 NM C GP1" - args: +units=us-ft +init=nad83:3002 -f %.3f in: -106d15'00.000 33d30'30.000 1640416.667 912480.595 NM C GP2 out: "1640416.667\t912480.595 1640416.667 912480.595 NM C GP2" - args: +units=us-ft +init=nad83:3001 -f %.3f in: -104d11'42.410 33d17'21.732 583573.491 832847.194 NM E GP1 out: "583573.491\t832847.194 583573.491 832847.194 NM E GP1" - args: +units=us-ft +init=nad83:3001 -f %.3f in: -104d47'37.948 33d22'32.349 400747.149 864523.566 NM E GP2 out: "400747.149\t864523.566 400747.149 864523.566 NM E GP2" - args: +units=us-ft +init=nad83:3003 -f %.3f in: -107d50'00.000 32d30'00.000 2723091.667 545634.896 NM W GP1 out: "2723091.667\t545634.896 2723091.667 545634.896 NM W GP1" - args: +units=us-ft +init=nad83:3003 -f %.3f in: -107d50'00.000 32d30'30.000 2723091.667 548666.562 NM W GP2 out: "2723091.667\t548666.562 2723091.667 548666.562 NM W GP2" - args: +units=us-ft +init=nad83:2701 -f %.3f in: -114d49'09.337 35d43'09.299 882966.545 26600313.129 NV E GP1 out: "882966.545\t26600313.129 882966.545 26600313.129 NV E GP1" - args: +units=us-ft +init=nad83:2701 -f %.3f in: -116d50'32.766 41d30'37.869 311338.993 28710910.565 NV E GP2 out: "311338.993\t28710910.564 311338.993 28710910.565 NV E GP2" - args: +units=us-ft +init=nad83:3101 -f %.3f in: -74d02'53.671 42d17'01.775 614362.369 1257287.611 NY E GP1 out: "614362.369\t1257287.611 614362.369 1257287.611 NY E GP1" - args: +units=us-ft +init=nad83:3101 -f %.3f in: -74d44'39.818 42d30'07.382 426225.275 1336579.561 NY E GP2 out: "426225.275\t1336579.561 426225.275 1336579.561 NY E GP2" - args: +units=us-ft +init=nad83:3104 -f %.3f in: -73d02'36.247 40d47'50.624 1249103.533 231235.845 NY L GP1 out: "1249103.533\t231235.845 1249103.533 231235.845 NY L GP1" - args: +units=us-ft +init=nad83:3104 -f %.3f in: -74d06'58.125 40d36'07.281 951997.667 158630.811 NY L GP2 out: "951997.667\t158630.811 951997.667 158630.811 NY L GP2" - args: +units=us-ft +init=nad83:3104 -f %.3f in: -74d00'00.000 40d45'00.000 984250.000 212521.887 NY L GP3 out: "984250.000\t212521.887 984250.000 212521.887 NY L GP3" - args: +units=us-ft +init=nad83:3104 -f %.3f in: -73d15'00.000 40d37'30.000 1192442.028 167871.999 NY L GP4 out: "1192442.028\t167871.999 1192442.028 167871.999 NY L GP4" - args: +units=us-ft +init=nad83:3104 -f %.3f in: -73d22'30.000 40d45'00.000 1157419.074 213139.664 NY L GP5 out: "1157419.074\t213139.664 1157419.074 213139.664 NY L GP5" - args: +units=us-ft +init=nad83:3401 -f %.3f in: -80d49'28.238 40d17'50.894 2435851.621 234309.717 OH N GP1 out: "2435851.621\t234309.717 2435851.621 234309.717 OH N GP1" - args: +units=us-ft +init=nad83:3401 -f %.3f in: -82d37'31.021 40d20'14.678 1933572.857 244396.244 OH N GP2 out: "1933572.857\t244396.244 1933572.857 244396.244 OH N GP2" - args: +units=us-ft +init=nad83:3501 -f %.3f in: -98d42'45.414 36d50'19.568 1759953.675 670136.468 OK N GP1 out: "1759953.675\t670136.468 1759953.675 670136.468 OK N GP1" - args: +units=us-ft +init=nad83:3501 -f %.3f in: -95d38'44.046 35d20'36.925 2670659.833 133589.112 OK N GP2 out: "2670659.833\t133589.112 2670659.833 133589.112 OK N GP2" - args: +units=us-ft +init=nad83:3602 -f %.3f in: -119d46'26.562 44d24'25.943 5110990.827 999684.042 OR S GP1 out: "5110990.827\t999684.042 5110990.827 999684.042 OR S GP1" - args: +units=us-ft +init=nad83:3602 -f %.3f in: -121d09'56.105 44d23'08.924 4747225.642 991752.635 OR S GP2 out: "4747225.642\t991752.635 4747225.642 991752.635 OR S GP2" - args: +units=us-ft +init=nad83:3701 -f %.3f in: -74d33'20.644 41d23'48.566 2844678.533 464365.610 PA N GP1 out: "2844678.533\t464365.610 2844678.533 464365.610 PA N GP1" - args: +units=us-ft +init=nad83:3701 -f %.3f in: -78d09'48.121 40d51'35.455 1854155.505 252833.700 PA N GP2 out: "1854155.505\t252833.700 1854155.505 252833.700 PA N GP2" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -67d08'56.930 18d29'56.972 408161.046 898432.808 PR F GP1 out: "408161.046\t898432.808 408161.046 898432.808 PR F GP1" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d52'30.000 18d15'00.000 502925.440 807654.009 PR F GP2 out: "502925.440\t807654.009 502925.440 807654.009 PR F GP2" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d26'00.000 18d15'00.000 656166.667 807469.207 PR F GP3 out: "656166.667\t807469.207 656166.667 807469.207 PR F GP3" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d26'00.000 18d30'00.000 656166.667 898253.524 PR F GP4 out: "656166.667\t898253.524 656166.667 898253.524 PR F GP4" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -67d08'56.930 18d29'56.972 408161.046 898432.808 PR M GP1 out: "408161.046\t898432.808 408161.046 898432.808 PR M GP1" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d52'30.000 18d15'00.000 502925.440 807654.009 PR M GP2 out: "502925.440\t807654.009 502925.440 807654.009 PR M GP2" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d26'00.000 18d15'00.000 656166.667 807469.207 PR M GP3 out: "656166.667\t807469.207 656166.667 807469.207 PR M GP3" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d26'00.000 18d30'00.000 656166.667 898253.524 PR M GP4 out: "656166.667\t898253.524 656166.667 898253.524 PR M GP4" - args: +units=us-ft +init=nad83:3800 -f %.3f in: -71d16'00.833 41d32'24.848 391898.667 166566.121 RI GP1 out: "391898.667\t166566.121 391898.667 166566.121 RI GP1" - args: +units=us-ft +init=nad83:3800 -f %.3f in: -71d37'13.730 41d23'53.266 295027.785 114722.837 RI GP2 out: "295027.785\t114722.837 295027.785 114722.837 RI GP2" - args: +units=us-ft +init=nad83:3900 -f %.3f in: -80d32'30.000 34d32'30.000 2138015.480 985710.127 SC N GP1 out: "2138015.480\t985710.127 2138015.480 985710.127 SC N GP1" - args: +units=us-ft +init=nad83:3900 -f %.3f in: -81d00'00.000 34d32'30.000 1999996.000 985404.077 SC N GP2 out: "1999996.000\t985404.077 1999996.000 985404.077 SC N GP2" - args: +units=us-ft +init=nad83:3900 -f %.3f in: -80d32'30.000 33d32'30.000 2139629.138 621856.156 SC S GP1 out: "2139629.138\t621856.156 2139629.138 621856.156 SC S GP1" - args: +units=us-ft +init=nad83:3900 -f %.3f in: -81d00'00.000 33d32'30.000 1999996.000 621546.527 SC S GP2 out: "1999996.000\t621546.527 1999996.000 621546.527 SC S GP2" - args: +units=us-ft +init=nad83:4001 -f %.3f in: -99d12'21.983 44d06'08.121 2177060.848 99066.761 SD N GP1 out: "2177060.848\t99066.761 2177060.848 99066.761 SD N GP1" - args: +units=us-ft +init=nad83:4001 -f %.3f in: -100d32'28.873 44d32'34.917 1827356.330 259209.712 SD N GP2 out: "1827356.330\t259209.712 1827356.330 259209.712 SD N GP2" - args: +units=us-ft +init=nad83:4100 -f %.3f in: -85d13'55.967 36d21'48.503 2194569.476 739881.374 TN GP1 out: "2194569.476\t739881.374 2194569.476 739881.374 TN GP1" - args: +units=us-ft +init=nad83:4100 -f %.3f in: -88d43'05.849 36d30'08.410 1169616.875 800645.091 TN GP2 out: "1169616.875\t800645.091 1169616.875 800645.091 TN GP2" - args: +units=us-ft +init=nad83:4201 -f %.3f in: -100d33'06.303 34d39'35.684 941333.504 3522390.511 TX N GP1 out: "941333.504\t3522390.511 941333.504 3522390.511 TX N GP1" - args: +units=us-ft +init=nad83:4201 -f %.3f in: -102d48'50.949 34d43'39.249 261294.654 3548271.494 TX N GP2 out: "261294.654\t3548271.494 261294.654 3548271.494 TX N GP2" - args: +units=us-ft +init=nad83:4302 -f %.3f in: -111d30'00.000 38d40'00.000 1640416.667 6683084.515 UT C GP1 out: "1640416.667\t6683084.515 1640416.667 6683084.515 UT C GP1" - args: +units=us-ft +init=nad83:4302 -f %.3f in: -111d30'00.000 38d40'30.000 1640416.667 6686119.851 UT C GP2 out: "1640416.667\t6686119.851 1640416.667 6686119.851 UT C GP2" - args: +units=us-ft +init=nad83:4301 -f %.3f in: -111d30'00.000 41d30'00.000 1640416.667 3705897.565 UT N GP1 out: "1640416.667\t3705897.565 1640416.667 3705897.565 UT N GP1" - args: +units=us-ft +init=nad83:4301 -f %.3f in: -111d30'00.000 41d30'30.000 1640416.667 3708933.975 UT N GP2 out: "1640416.667\t3708933.975 1640416.667 3708933.975 UT N GP2" - args: +units=us-ft +init=nad83:4303 -f %.3f in: -109d48'37.967 38d29'30.877 2123972.902 10511502.846 UT S GP1 out: "2123972.902\t10511502.846 2123972.902 10511502.846 UT S GP1" - args: +units=us-ft +init=nad83:4303 -f %.3f in: -113d52'56.922 37d09'18.788 946139.893 10029235.592 UT S GP2 out: "946139.893\t10029235.592 946139.893 10029235.592 UT S GP2" - args: +units=us-ft +init=nad83:4501 -f %.3f in: -77d13'46.945 38d55'12.407 11844323.043 7020638.975 VA N GP1 out: "11844323.043\t7020638.975 11844323.043 7020638.975 VA N GP1" - args: +units=us-ft +init=nad83:4501 -f %.3f in: -79d18'51.557 38d09'59.020 11248797.976 6744688.474 VA N GP2 out: "11248797.976\t6744688.474 11248797.976 6744688.474 VA N GP2" - args: +units=us-ft +init=nad83:4501 -f %.3f in: -77d38'10.823 37d49'23.964 11732395.294 6619889.590 VA N GP3 out: "11732395.294\t6619889.590 11732395.294 6619889.590 VA N GP3" - args: +units=us-ft +init=nad83:4501 -f %.3f in: -79d26'19.475 37d47'25.852 11211628.032 6608155.232 VA N GP4 out: "11211628.032\t6608155.232 11211628.032 6608155.232 VA N GP4" - args: +units=us-ft +init=nad83:4501 -f %.3f in: -77d44'30.336 39d00'06.804 11698399.159 7048812.266 VA N GP6 out: "11698399.159\t7048812.266 11698399.159 7048812.266 VA N GP6" - args: +units=us-ft +init=nad83:4501 -f %.3f in: -77d43'47.013 38d59'55.454 11701828.676 7047692.496 VA N GP9 out: "11701828.676\t7047692.496 11701828.676 7047692.496 VA N GP9" - args: +units=us-ft +init=nad83:4502 -f %.3f in: -78d30'00.000 37d30'00.000 11482916.667 3705606.876 VA S GP1 out: "11482916.667\t3705606.876 11482916.667 3705606.876 VA S GP1" - args: +units=us-ft +init=nad83:4502 -f %.3f in: -78d30'00.000 37d30'30.000 11482916.667 3708641.137 VA S GP2 out: "11482916.667\t3708641.137 11482916.667 3708641.137 VA S GP2" - args: +units=us-ft +init=nad83:4502 -f %.3f in: -77d32'33.000 36d54'42.507 11762849.074 3492868.579 VA S GP3 out: "11762849.074\t3492868.579 11762849.074 3492868.579 VA S GP3" - args: +units=us-ft +init=nad83:4502 -f %.3f in: -77d21'55.732 38d04'53.901 11809480.679 3919367.025 VA S GP4 out: "11809480.679\t3919367.025 11809480.679 3919367.025 VA S GP4" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -64d45'30.000 17d45'30.000 1238952.313 631597.723 VI F GP1 out: "1238952.313\t631597.723 1238952.313 631597.723 VI F GP1" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d26'00.000 17d45'56.426 656166.667 631597.858 VI F GP2 out: "656166.667\t631597.858 656166.667 631597.858 VI F GP2" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -64d45'30.000 17d45'30.000 1238952.313 631597.723 VI M GP1 out: "1238952.313\t631597.723 1238952.313 631597.723 VI M GP1" - args: +units=us-ft +init=nad83:5200 -f %.3f in: -66d26'00.000 17d45'56.426 656166.667 631597.858 VI M GP2 out: "656166.667\t631597.858 656166.667 631597.858 VI M GP2" - args: +units=us-ft +init=nad83:4400 -f %.3f in: -72d29'31.418 43d09'58.526 1642534.834 242819.594 VT GP1 out: "1642534.834\t242819.594 1642534.834 242819.594 VT GP1" - args: +units=us-ft +init=nad83:4400 -f %.3f in: -73d12'06.978 44d22'22.810 1456873.971 683480.189 VT GP2 out: "1456873.971\t683480.189 1456873.971 683480.189 VT GP2" - args: +units=us-ft +init=nad83:4601 -f %.3f in: -119d51'37.006 47d50'51.069 1879336.368 310659.110 WA N GP1 out: "1879336.368\t310659.110 1879336.368 310659.110 WA N GP1" - args: +units=us-ft +init=nad83:4601 -f %.3f in: -123d59'49.087 48d09'29.131 868484.545 438307.526 WA N GP2 out: "868484.545\t438307.526 868484.545 438307.526 WA N GP2" - args: +units=us-ft +init=nad83:4801 -f %.3f in: -88d44'40.778 45d22'21.598 2291123.165 77666.637 WI N GP1 out: "2291123.165\t77666.637 2291123.165 77666.637 WI N GP1" - args: +units=us-ft +init=nad83:4801 -f %.3f in: -92d12'19.275 45d48'35.812 1406198.343 242375.264 WI N GP2 out: "1406198.343\t242375.264 1406198.343 242375.264 WI N GP2" - args: +units=us-ft +init=nad83:4701 -f %.3f in: -77d53'39.269 39d14'39.339 2423253.113 275144.536 WV N GP1 out: "2423253.113\t275144.536 2423253.113 275144.536 WV N GP1" - args: +units=us-ft +init=nad83:4701 -f %.3f in: -81d33'23.549 39d18'08.535 1386588.889 298906.239 WV N GP2 out: "1386588.889\t298906.239 1386588.889 298906.239 WV N GP2" - args: +units=us-ft +init=nad83:4701 -f %.3f in: -77d30'10.460 38d59'25.903 2536117.742 184974.384 WV N GP3 out: "2536117.742\t184974.384 2536117.742 184974.384 WV N GP3" - args: +units=us-ft +init=nad83:4901 -f %.3f in: -105d31'02.882 43d30'40.600 563107.342 1097477.489 WY E GP1 out: "563107.342\t1097477.489 563107.342 1097477.489 WY E GP1" - args: +units=us-ft +init=nad83:4901 -f %.3f in: -105d22'42.856 43d30'14.685 599946.619 1094729.119 WY E GP2 out: "599946.619\t1094729.118 599946.619 1094729.119 WY E GP2" - args: +units=us-ft +init=nad83:4901 -f %.3f in: -105d28'42.827 43d36'33.391 573561.723 1133155.514 WY E GP3 out: "573561.723\t1133155.513 573561.723 1133155.514 WY E GP3" - args: +units=us-ft +init=nad83:4901 -f %.3f in: -105d23'43.223 42d00'59.422 594028.794 552611.396 WY E GP4 out: "594028.794\t552611.396 594028.794 552611.396 WY E GP4" - args: +units=us-ft +init=nad83:4901 -f %.3f in: -104d35'06.686 42d34'50.366 812768.620 758647.940 WY E GP5 out: "812768.620\t758647.940 812768.620 758647.940 WY E GP5" - args: +units=us-ft +init=nad83:4902 -f %.3f in: -106d13'03.224 41d36'14.640 1617477.770 732300.770 WYEC GP1 out: "1617477.770\t732300.770 1617477.770 732300.770 WYEC GP1" - args: +units=us-ft +init=nad83:4902 -f %.3f in: -108d01'56.720 41d51'57.518 1121920.469 826536.345 WYEC GP2 out: "1121920.469\t826536.345 1121920.469 826536.345 WYEC GP2" proj-9.6.0/test/cli/test_projinfo.sh000775 001754 001755 00000002466 14764566077 017403 0ustar00e012349e012349000000 000000 #!/bin/bash # Test projinfo using specific sh commands # See test_projinfo.yaml for general CLI testing. set -e TEST_CLI_DIR=$(dirname $0) EXE=$1 if test -z "${EXE}"; then echo "Usage: ${0} " exit 1 fi if test ! -x ${EXE}; then echo "*** ERROR: Can not find '${EXE}' program!" exit 1 fi echo "============================================" echo "Running ${0} using ${EXE}:" echo "============================================" OUT=$(basename $0 .sh)_out echo "doing tests into file ${OUT}, please wait" rm -f ${OUT} # echo "##############################################################" >> ${OUT} echo "Testing PROJ_AUX_DB environment variable" >> ${OUT} rm -f tmp_projinfo_aux.db $EXE --dump-db-structure --output-id HOBU:XXXX EPSG:4326 | sqlite3 tmp_projinfo_aux.db export PROJ_AUX_DB=tmp_projinfo_aux.db $EXE HOBU:XXXX >>${OUT} unset PROJ_AUX_DB rm -f tmp_projinfo_aux.db echo "" >>${OUT} ############################################################################## # Done! # do 'diff' with distribution results echo "diff ${OUT} with ${OUT}.dist" diff -u -b ${OUT} ${TEST_CLI_DIR}/${OUT}.dist if [ $? -ne 0 ] ; then echo "" echo "PROBLEMS HAVE OCCURRED" echo "test file ${OUT} saved" exit 100 else echo "TEST OK" echo "test file ${OUT} removed" rm -f ${OUT} exit 0 fi proj-9.6.0/test/cli/test_projinfo.yaml000664 001754 001755 00000274231 14764566077 017731 0ustar00e012349e012349000000 000000 comment: > Test basic capabilities of the projinfo command. See test_projinfo.sh for other advanced testing. exe: projinfo env: PROJINFO_NO_GRID_CHECK: YES tests: - args: EPSG:4326 out: | PROJ.4 string: +proj=longlat +datum=WGS84 +no_defs +type=crs WKT2:2019 string: GEOGCRS["WGS 84", ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)"], MEMBER["World Geodetic System 1984 (G730)"], MEMBER["World Geodetic System 1984 (G873)"], MEMBER["World Geodetic System 1984 (G1150)"], MEMBER["World Geodetic System 1984 (G1674)"], MEMBER["World Geodetic System 1984 (G1762)"], MEMBER["World Geodetic System 1984 (G2139)"], MEMBER["World Geodetic System 1984 (G2296)"], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ENSEMBLEACCURACY[2.0]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], USAGE[ SCOPE["Horizontal component of 3D system."], AREA["World."], BBOX[-90,-180,90,180]], ID["EPSG",4326]] - args: -o WKT1_GDAL EPSG:4326 out: |+ WKT1:GDAL string: GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]] - args: -o WKT2_2015 EPSG:4326 out: | WKT2:2015 string: GEODCRS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], SCOPE["Horizontal component of 3D system."], AREA["World."], BBOX[-90,-180,90,180], ID["EPSG",4326]] - args: -o WKT2_2019 EPSG:4326 out: | WKT2:2019 string: GEOGCRS["WGS 84", ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)"], MEMBER["World Geodetic System 1984 (G730)"], MEMBER["World Geodetic System 1984 (G873)"], MEMBER["World Geodetic System 1984 (G1150)"], MEMBER["World Geodetic System 1984 (G1674)"], MEMBER["World Geodetic System 1984 (G1762)"], MEMBER["World Geodetic System 1984 (G2139)"], MEMBER["World Geodetic System 1984 (G2296)"], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ENSEMBLEACCURACY[2.0]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], USAGE[ SCOPE["Horizontal component of 3D system."], AREA["World."], BBOX[-90,-180,90,180]], ID["EPSG",4326]] - args: -o ALL EPSG:4326 stdout: | PROJ.4 string: +proj=longlat +datum=WGS84 +no_defs +type=crs WKT2:2015 string: GEODCRS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], SCOPE["Horizontal component of 3D system."], AREA["World."], BBOX[-90,-180,90,180], ID["EPSG",4326]] WKT2:2019 string: GEOGCRS["WGS 84", ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)"], MEMBER["World Geodetic System 1984 (G730)"], MEMBER["World Geodetic System 1984 (G873)"], MEMBER["World Geodetic System 1984 (G1150)"], MEMBER["World Geodetic System 1984 (G1674)"], MEMBER["World Geodetic System 1984 (G1762)"], MEMBER["World Geodetic System 1984 (G2139)"], MEMBER["World Geodetic System 1984 (G2296)"], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ENSEMBLEACCURACY[2.0]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], USAGE[ SCOPE["Horizontal component of 3D system."], AREA["World."], BBOX[-90,-180,90,180]], ID["EPSG",4326]] WKT1:GDAL string: GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]] WKT1:ESRI string: GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] PROJJSON: { "$schema": "https://proj.org/schemas/v0.7/projjson.schema.json", "type": "GeographicCRS", "name": "WGS 84", "datum_ensemble": { "name": "World Geodetic System 1984 ensemble", "members": [ { "name": "World Geodetic System 1984 (Transit)", "id": { "authority": "EPSG", "code": 1166 } }, { "name": "World Geodetic System 1984 (G730)", "id": { "authority": "EPSG", "code": 1152 } }, { "name": "World Geodetic System 1984 (G873)", "id": { "authority": "EPSG", "code": 1153 } }, { "name": "World Geodetic System 1984 (G1150)", "id": { "authority": "EPSG", "code": 1154 } }, { "name": "World Geodetic System 1984 (G1674)", "id": { "authority": "EPSG", "code": 1155 } }, { "name": "World Geodetic System 1984 (G1762)", "id": { "authority": "EPSG", "code": 1156 } }, { "name": "World Geodetic System 1984 (G2139)", "id": { "authority": "EPSG", "code": 1309 } }, { "name": "World Geodetic System 1984 (G2296)", "id": { "authority": "EPSG", "code": 1383 } } ], "ellipsoid": { "name": "WGS 84", "semi_major_axis": 6378137, "inverse_flattening": 298.257223563 }, "accuracy": "2.0", "id": { "authority": "EPSG", "code": 6326 } }, "coordinate_system": { "subtype": "ellipsoidal", "axis": [ { "name": "Geodetic latitude", "abbreviation": "Lat", "direction": "north", "unit": "degree" }, { "name": "Geodetic longitude", "abbreviation": "Lon", "direction": "east", "unit": "degree" } ] }, "scope": "Horizontal component of 3D system.", "area": "World.", "bbox": { "south_latitude": -90, "west_longitude": -180, "north_latitude": 90, "east_longitude": 180 }, "id": { "authority": "EPSG", "code": 4326 } } - args: > "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs" --output-id HOBU:MY_CRS -o SQL -q out: | INSERT INTO geodetic_crs VALUES('HOBU','GEODETIC_CRS_MY_CRS','unknown','','geographic 2D','EPSG','6424','EPSG','6326',NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_CRS_MY_CRS','geodetic_crs','HOBU','GEODETIC_CRS_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES('HOBU','CONVERSION_MY_CRS','unknown','','EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',5,'EPSG','9122','EPSG','8802','Longitude of natural origin',0,'EPSG','9122','EPSG','8806','False easting',0,'EPSG','9001','EPSG','8807','False northing',0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_CONVERSION_MY_CRS','conversion','HOBU','CONVERSION_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('HOBU','MY_CRS','unknown','','EPSG','4400','HOBU','GEODETIC_CRS_MY_CRS','HOBU','CONVERSION_MY_CRS',NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_PROJECTED_CRS_MY_CRS','projected_crs','HOBU','MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); - args: > "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs" --output-id HOBU:MY_CRS --authority HOBU -o SQL -q out: | INSERT INTO ellipsoid VALUES('HOBU','ELLPS_GEODETIC_DATUM_GEODETIC_CRS_MY_CRS','WGS 84','','IAU_2015','399',6378137,'EPSG','9001',298.257223563,NULL,0); INSERT INTO prime_meridian VALUES('HOBU','PM_GEODETIC_DATUM_GEODETIC_CRS_MY_CRS','Greenwich',0,'EPSG','9122',0); INSERT INTO geodetic_datum VALUES('HOBU','GEODETIC_DATUM_GEODETIC_CRS_MY_CRS','World Geodetic System 1984','','HOBU','ELLPS_GEODETIC_DATUM_GEODETIC_CRS_MY_CRS','HOBU','PM_GEODETIC_DATUM_GEODETIC_CRS_MY_CRS',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_DATUM_GEODETIC_CRS_MY_CRS','geodetic_datum','HOBU','GEODETIC_DATUM_GEODETIC_CRS_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO geodetic_crs VALUES('HOBU','GEODETIC_CRS_MY_CRS','unknown','','geographic 2D','EPSG','6424','HOBU','GEODETIC_DATUM_GEODETIC_CRS_MY_CRS',NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_CRS_MY_CRS','geodetic_crs','HOBU','GEODETIC_CRS_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO conversion VALUES('HOBU','CONVERSION_MY_CRS','unknown','','EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',5,'EPSG','9122','EPSG','8802','Longitude of natural origin',0,'EPSG','9122','EPSG','8806','False easting',0,'EPSG','9001','EPSG','8807','False northing',0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_CONVERSION_MY_CRS','conversion','HOBU','CONVERSION_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); INSERT INTO projected_crs VALUES('HOBU','MY_CRS','unknown','','EPSG','4400','HOBU','GEODETIC_CRS_MY_CRS','HOBU','CONVERSION_MY_CRS',NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_PROJECTED_CRS_MY_CRS','projected_crs','HOBU','MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN'); - args: -s EPSG:4326 -t EPSG:32631 --single-line out: | Candidate operations found: 1 ------------------------------------- Operation No. 1: EPSG:16031, UTM zone 31N, 0 m, Between 0°E and 6°E, northern hemisphere between equator and 84°N, onshore and offshore. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=utm +zone=31 +ellps=WGS84 WKT2:2019 string: CONVERSION["UTM zone 31N",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",3,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]],ID["EPSG",16031]] - args: EPSG:4326 EPSG:32631 --single-line out: | Candidate operations found: 1 ------------------------------------- Operation No. 1: EPSG:16031, UTM zone 31N, 0 m, Between 0°E and 6°E, northern hemisphere between equator and 84°N, onshore and offshore. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=utm +zone=31 +ellps=WGS84 WKT2:2019 string: CONVERSION["UTM zone 31N",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",3,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]],ID["EPSG",16031]] - args: EPSG:4326 EPSG:32631 EPSG:4327 grep: Too many parameters stderr: | Too many parameters: EPSG:32631 exitcode: 1 - args: --source-crs NAD27 --target-crs NAD83 out: | Candidate operations found: 1 Note: using '--spatial-test intersects' would bring more results (10) ------------------------------------- Operation No. 1: unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation PROJ string: +proj=noop WKT2:2019 string: COORDINATEOPERATION["Ballpark geographic offset from NAD27 to NAD83", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["Geographic2D offsets", ID["EPSG",9619]], PARAMETER["Latitude offset",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8601]], PARAMETER["Longitude offset",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8602]], USAGE[ SCOPE["unknown"], AREA["World"], BBOX[-90,-180,90,180]]] - args: NAD27 NAD83 out: | Candidate operations found: 1 Note: using '--spatial-test intersects' would bring more results (10) ------------------------------------- Operation No. 1: unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation PROJ string: +proj=noop WKT2:2019 string: COORDINATEOPERATION["Ballpark geographic offset from NAD27 to NAD83", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["Geographic2D offsets", ID["EPSG",9619]], PARAMETER["Latitude offset",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8601]], PARAMETER["Longitude offset",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8602]], USAGE[ SCOPE["unknown"], AREA["World"], BBOX[-90,-180,90,180]]] - args: -s NAD27 -t NAD83 --grid-check none --spatial-test intersects --summary --hide-ballpark out: | Candidate operations found: 9 DERIVED_FROM(EPSG):1313, NAD27 to NAD83 (4), 1.5 m, Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast west of 44°W and north of 40°N. DERIVED_FROM(EPSG):1312, NAD27 to NAD83 (3), 2.0 m, Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast west of 44°W and north of 40°N. DERIVED_FROM(EPSG):1241, NAD27 to NAD83 (1), 0.15 m, United States (USA) - CONUS including EEZ - onshore and offshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico (GoM) OCS. DERIVED_FROM(EPSG):8555, NAD27 to NAD83 (7), 0.15 m, United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico offshore continental shelf (GoM OCS). DERIVED_FROM(EPSG):1243, NAD27 to NAD83 (2), 0.5 m, United States (USA) - Alaska including EEZ. DERIVED_FROM(EPSG):8549, NAD27 to NAD83 (8), 0.5 m, United States (USA) - Alaska. DERIVED_FROM(EPSG):1573, NAD27 to NAD83 (6), 1.5 m, Canada - Quebec. EPSG:1462, NAD27 to NAD83 (5), 2.0 m, Canada - Quebec. EPSG:9111, NAD27 to NAD83 (9), 1.5 m, Canada - Saskatchewan. - args: -s NAD27 -t NAD83 --grid-check none --spatial-test intersects out: | Candidate operations found: 10 ------------------------------------- Operation No. 1: DERIVED_FROM(EPSG):1313, NAD27 to NAD83 (4), 1.5 m, Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast west of 44°W and north of 40°N. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=ca_nrc_ntv2_0.tif +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (4)", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["HORIZONTAL_SHIFT_GTIFF"], PARAMETERFILE["Latitude and longitude difference file","ca_nrc_ntv2_0.tif"], OPERATIONACCURACY[1.5], USAGE[ SCOPE["Transformation of coordinates at 1m to 2m level of accuracy."], AREA["Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast west of 44°W and north of 40°N."], BBOX[40,-141.01,83.17,-44]], ID["DERIVED_FROM(EPSG)",1313], REMARK["Uses NTv2 data files. Replaces NTv1 (transformation code 1312) except in Quebec. Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and (code 4269) have longitudes positive east. May be used as tfm to WGS 84 - see code 1693."]] ------------------------------------- Operation No. 2: DERIVED_FROM(EPSG):1312, NAD27 to NAD83 (3), 2.0 m, Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast west of 44°W and north of 40°N. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=ca_nrc_ntv1_can.tif +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (3)", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["HORIZONTAL_SHIFT_GTIFF"], PARAMETERFILE["Latitude and longitude difference file","ca_nrc_ntv1_can.tif"], OPERATIONACCURACY[2.0], USAGE[ SCOPE["Historic record only - now superseded - see remarks."], AREA["Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast west of 44°W and north of 40°N."], BBOX[40,-141.01,83.17,-44]], ID["DERIVED_FROM(EPSG)",1312], REMARK["Uses NTv1 method. Replaced in Quebec by code 1462 and elsewhere in 1997 by NTv2 (transformation code 1313). Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]] ------------------------------------- Operation No. 3: DERIVED_FROM(EPSG):1241, NAD27 to NAD83 (1), 0.15 m, United States (USA) - CONUS including EEZ - onshore and offshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico (GoM) OCS. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=us_noaa_conus.tif +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (1)", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["HORIZONTAL_SHIFT_GTIFF"], PARAMETERFILE["Latitude and longitude difference file","us_noaa_conus.tif"], OPERATIONACCURACY[0.15], USAGE[ SCOPE["Transformation of coordinates at 0.2m level of accuracy."], AREA["United States (USA) - CONUS including EEZ - onshore and offshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico (GoM) OCS."], BBOX[23.81,-129.17,49.38,-65.69]], ID["DERIVED_FROM(EPSG)",1241], REMARK["Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east. For application in Gulf of Mexico refer to IOGP report 373-26."]] ------------------------------------- Operation No. 4: DERIVED_FROM(EPSG):8555, NAD27 to NAD83 (7), 0.15 m, United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico offshore continental shelf (GoM OCS). PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=gridshift +grids=us_noaa_nadcon5_nad27_nad83_1986_conus.tif +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (7)", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["GENERAL_SHIFT_GTIFF"], PARAMETERFILE["Latitude and longitude difference file","us_noaa_nadcon5_nad27_nad83_1986_conus.tif"], OPERATIONACCURACY[0.15], USAGE[ SCOPE["Geodesy."], AREA["United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico offshore continental shelf (GoM OCS)."], BBOX[23.82,-124.79,49.38,-66.91]], ID["DERIVED_FROM(EPSG)",8555], REMARK["NADCON5 method expects longitudes 0-360°; source and target CRS longitudes in range ±180°. Accuracy at 67% confidence level is 0.15m onshore, 1m nearshore and undetermined farther offshore. For application in Gulf of Mexico refer to IOGP report 373-26."]] ------------------------------------- Operation No. 5: DERIVED_FROM(EPSG):1243, NAD27 to NAD83 (2), 0.5 m, United States (USA) - Alaska including EEZ. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=us_noaa_alaska.tif +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (2)", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["HORIZONTAL_SHIFT_GTIFF"], PARAMETERFILE["Latitude and longitude difference file","us_noaa_alaska.tif"], OPERATIONACCURACY[0.5], USAGE[ SCOPE["Geodesy."], AREA["United States (USA) - Alaska including EEZ."], BBOX[47.88,167.65,74.71,-129.99]], ID["DERIVED_FROM(EPSG)",1243], REMARK["Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east. May be used as transformation to WGS 84 - see NAD27 to WGS 84 (85) (code 15864)."]] ------------------------------------- Operation No. 6: DERIVED_FROM(EPSG):8549, NAD27 to NAD83 (8), 0.5 m, United States (USA) - Alaska. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=gridshift +grids=us_noaa_nadcon5_nad27_nad83_1986_alaska.tif +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (8)", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["GENERAL_SHIFT_GTIFF"], PARAMETERFILE["Latitude and longitude difference file","us_noaa_nadcon5_nad27_nad83_1986_alaska.tif"], OPERATIONACCURACY[0.5], USAGE[ SCOPE["Geodesy."], AREA["United States (USA) - Alaska."], BBOX[51.3,172.42,71.4,-129.99]], ID["DERIVED_FROM(EPSG)",8549], REMARK["Uses NADCON5 method which expects longitudes positive east in range 0-360°; source and target CRSs have longitudes positive east in range -180° to +180°. Accuracy at 67% confidence level is 0.5m onshore, 5m nearshore and undetermined farther offshore."]] ------------------------------------- Operation No. 7: DERIVED_FROM(EPSG):1573, NAD27 to NAD83 (6), 1.5 m, Canada - Quebec. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=ca_que_mern_na27na83.tif +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (6)", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["HORIZONTAL_SHIFT_GTIFF"], PARAMETERFILE["Latitude and longitude difference file","ca_que_mern_na27na83.tif"], OPERATIONACCURACY[1.5], USAGE[ SCOPE["Transformation of coordinates at 1m to 2m level of accuracy."], AREA["Canada - Quebec."], BBOX[44.99,-79.85,62.62,-57.1]], ID["DERIVED_FROM(EPSG)",1573], REMARK["Also distributed with file name QUE27-83.gsb. Replaces NAD27 to NAD83 (5) (code 1462). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]] ------------------------------------- Operation No. 8: EPSG:1462, NAD27 to NAD83 (5), 2.0 m, Canada - Quebec. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=GS2783v1.QUE +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (5)", VERSION["SGQ-Can QC NT1"], SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["NTv1", ID["EPSG",9614]], PARAMETERFILE["Latitude and longitude difference file","GS2783v1.QUE"], OPERATIONACCURACY[2.0], USAGE[ SCOPE["Historic record only - now superseded - see remarks."], AREA["Canada - Quebec."], BBOX[44.99,-79.85,62.62,-57.1]], ID["EPSG",1462], REMARK["Densification for Quebec of code 1312. Replaced by NAD27 to NAD83 (6) (code 1573). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]] ------------------------------------- Operation No. 9: EPSG:9111, NAD27 to NAD83 (9), 1.5 m, Canada - Saskatchewan. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=SK27-83.gsb +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["NAD27 to NAD83 (9)", VERSION["ISC-Can SK"], SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["NTv2", ID["EPSG",9615]], PARAMETERFILE["Latitude and longitude difference file","SK27-83.gsb"], OPERATIONACCURACY[1.5], USAGE[ SCOPE["Geodesy."], AREA["Canada - Saskatchewan."], BBOX[49,-110,60.01,-101.34]], ID["EPSG",9111]] ------------------------------------- Operation No. 10: unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation PROJ string: +proj=noop WKT2:2019 string: COORDINATEOPERATION["Ballpark geographic offset from NAD27 to NAD83", SOURCECRS[ GEOGCRS["NAD27", DATUM["North American Datum 1927", ELLIPSOID["Clarke 1866",6378206.4,294.978698213898, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4267]]], TARGETCRS[ GEOGCRS["NAD83", DATUM["North American Datum 1983", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4269]]], METHOD["Geographic2D offsets", ID["EPSG",9619]], PARAMETER["Latitude offset",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8601]], PARAMETER["Longitude offset",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8602]], USAGE[ SCOPE["unknown"], AREA["World"], BBOX[-90,-180,90,180]]] - args: -s EPSG:4230 -t EPSG:4258 --bbox 8,54.51,15.24,57.8 --summary out: | Candidate operations found: 1 Note: using '--spatial-test intersects' would bring more results (2) EPSG:1626, ED50 to ETRS89 (4), 1.0 m, Denmark - onshore. - args: -s EPSG:23031 -t EPSG:4326 --bbox -13.87,34.91,-7.24,41.88 --crs-extent-use none --summary out: | Candidate operations found: 1 Note: using '--spatial-test intersects' would bring more results (9) unknown id, Inverse of UTM zone 31N + ED50 to WGS 84 (42), 5 m, Portugal - mainland - offshore. - args: -s EPSG:4230 -t EPSG:4258 --area EPSG:3237 --summary out: | Candidate operations found: 1 EPSG:1626, ED50 to ETRS89 (4), 1.0 m, Denmark - onshore. - args: -s EPSG:4230 -t EPSG:4258 --area 'Denmark - onshore' --summary out: | Candidate operations found: 1 EPSG:1626, ED50 to ETRS89 (4), 1.0 m, Denmark - onshore. - comment: several match args: -s EPSG:4230 -t EPSG:4258 --area 'Denmark -' --summary stderr: | Several candidates area of use matching provided name : EPSG:2531 : Denmark - Jutland and Funen - onshore. EPSG:2532 : Denmark - Zealand and Lolland (onshore). EPSG:2533 : Denmark - Bornholm onshore. EPSG:3237 : Denmark - onshore. EPSG:3471 : Denmark - onshore west of 12°E - Zealand, Jutland, Fuen and Lolland. EPSG:3472 : Denmark - onshore east of 12°E - Zealand and Falster, Bornholm. EPSG:3631 : Denmark - Jutland onshore west of 10°E. EPSG:3632 : Denmark - onshore - Jutland east of 9°E and Funen. EPSG:4575 : Denmark - onshore Jutland, Funen, Zealand and Lolland. EPSG:4693 : Denmark - onshore - Copenhagen and surrounding area. EPSG:4694 : Denmark - onshore northern Schleswig and surrounding islands (i.e. Jutland south of the pre-1920 border near the Kongea river). EPSG:4756 : Denmark - offshore. exitcode: 1 - args: -s EPSG:4230 -t EPSG:4258 --area no_match --summary stderr: No area of use matching provided name exitcode: 1 - args: -s EPSG:4230 -t EPSG:4258 --area WRONG:CODE --summary stderr: "Area of use retrieval failed: extent not found" exitcode: 1 - comment: Testing deprecated CRS args: EPSG:26591 out: | Warning: object is deprecated Alternative non-deprecated CRS: EPSG:3003 PROJ.4 string: +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs +type=crs WKT2:2019 string: PROJCRS["Monte Mario (Rome) / Italy zone 1", BASEGEOGCRS["Monte Mario (Rome)", DATUM["Monte Mario (Rome)", ELLIPSOID["International 1924",6378388,297, LENGTHUNIT["metre",1]]], PRIMEM["Rome",12.4523333333333, ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4806]], CONVERSION["Italy zone 1", METHOD["Transverse Mercator", ID["EPSG",9807]], PARAMETER["Latitude of natural origin",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8801]], PARAMETER["Longitude of natural origin",9, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8802]], PARAMETER["Scale factor at natural origin",0.9996, SCALEUNIT["unity",1], ID["EPSG",8805]], PARAMETER["False easting",1500000, LENGTHUNIT["metre",1], ID["EPSG",8806]], PARAMETER["False northing",0, LENGTHUNIT["metre",1], ID["EPSG",8807]]], CS[Cartesian,2], AXIS["easting (X)",east, ORDER[1], LENGTHUNIT["metre",1]], AXIS["northing (Y)",north, ORDER[2], LENGTHUNIT["metre",1]], USAGE[ SCOPE["Engineering survey, topographic mapping."], AREA["Italy - onshore and offshore - west of 12°E."], BBOX[36.53,5.93,47.04,12]], ID["EPSG",26591]] - comment: Testing non compliant WKT1 args: | 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563]],UNIT["degree",0.0174532925199433]]' out: | Warning: GEOGCS should have a PRIMEM node Grammar error: Parsing error : syntax error, unexpected UNIT, expecting PRIMEM. Error occurred around: HEROID["WGS 84",6378137,298.257223563]],UNIT["degree",0.0174532925199433]] ^ PROJ.4 string: +proj=longlat +datum=WGS84 +no_defs +type=crs WKT2:2019 string: GEOGCRS["WGS 84", DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1, ID["EPSG",9001]]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8901]], CS[ellipsoidal,2], AXIS["longitude",east, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["latitude",north, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]]] - comment: Testing CRS with towgs84 args: -o PROJ EPSG:25832 out: | PROJ.4 string: +proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs - comment: Testing RH2000 height to SWEREF99 args: -s EPSG:5613 -t EPSG:4977 out: | Candidate operations found: 2 ------------------------------------- Operation No. 1: INVERSE(DERIVED_FROM(PROJ)):EPSG_4977_TO_EPSG_5613, Inverse of SWEREF99 to RH2000 height, unknown accuracy, Sweden - onshore. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=se_lantmateriet_SWEN17_RH2000.tif +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 WKT2:2019 string: COORDINATEOPERATION["Inverse of SWEREF99 to RH2000 height", SOURCECRS[ VERTCRS["RH2000 height", DYNAMIC[ FRAMEEPOCH[2000]], VDATUM["Rikets hojdsystem 2000"], CS[vertical,1], AXIS["gravity-related height (H)",up, LENGTHUNIT["metre",1]], ID["EPSG",5613]]], TARGETCRS[ GEOGCRS["SWEREF99", DATUM["SWEREF99", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,3], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], AXIS["ellipsoidal height (h)",up, ORDER[3], LENGTHUNIT["metre",1]], ID["EPSG",4977]]], METHOD["Inverse of Geographic3D to GravityRelatedHeight (gtx)", ID["INVERSE(EPSG)",9665]], PARAMETERFILE["Geoid (height correction) model file","se_lantmateriet_SWEN17_RH2000.tif"], USAGE[ SCOPE["Not known."], AREA["Sweden - onshore."], BBOX[55.28,10.93,69.07,24.17]], ID["INVERSE(DERIVED_FROM(PROJ))","EPSG_4977_TO_EPSG_5613"]] ------------------------------------- Operation No. 2: unknown id, Transformation from RH2000 height to SWEREF99 (ballpark vertical transformation, without ellipsoid height to vertical height correction), unknown accuracy, World, has ballpark transformation PROJ string: +proj=noop WKT2:2019 string: COORDINATEOPERATION["Transformation from RH2000 height to SWEREF99 (ballpark vertical transformation, without ellipsoid height to vertical height correction)", SOURCECRS[ VERTCRS["RH2000 height", DYNAMIC[ FRAMEEPOCH[2000]], VDATUM["Rikets hojdsystem 2000"], CS[vertical,1], AXIS["gravity-related height (H)",up, LENGTHUNIT["metre",1]], ID["EPSG",5613]]], TARGETCRS[ GEOGCRS["SWEREF99", DATUM["SWEREF99", ELLIPSOID["GRS 1980",6378137,298.257222101, LENGTHUNIT["metre",1]]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,3], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], AXIS["ellipsoidal height (h)",up, ORDER[3], LENGTHUNIT["metre",1]], ID["EPSG",4977]]], METHOD["Change of Vertical Unit", ID["EPSG",1069]], PARAMETER["Unit conversion scalar",1, SCALEUNIT["unity",1], ID["EPSG",1051]], USAGE[ SCOPE["unknown"], AREA["World"], BBOX[-90,-180,90,180]]] - comment: Testing NAD83(2011) + NAVD88 height -> NAD83(2011) args: -s EPSG:6349 -t EPSG:6319 --spatial-test intersects -o PROJ out: | Candidate operations found: 3 ------------------------------------- Operation No. 1: unknown id, Inverse of NAD83(2011) to NAVD88 height (3), 0.015 m, United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 ------------------------------------- Operation No. 2: unknown id, Inverse of NAD83(2011) to NAVD88 height (2), 0.02 m, United States (USA) - Alaska. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=us_noaa_g2012ba0.tif +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 ------------------------------------- Operation No. 3: unknown id, Transformation from NAVD88 height to NAD83(2011) (ballpark vertical transformation, without ellipsoid height to vertical height correction), unknown accuracy, World, has ballpark transformation PROJ string: +proj=noop - comment: Testing NGF IGN69 height to RGF93 args: -s EPSG:5720 -t EPSG:4965 -o PROJ out: | Candidate operations found: 2 ------------------------------------- Operation No. 1: INVERSE(DERIVED_FROM(EPSG)):10000, Inverse of RGF93 v1 to NGF-IGN69 height (1), 0.5 m, France - mainland onshore. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=fr_ign_RAF18.tif +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 ------------------------------------- Operation No. 2: unknown id, Transformation from NGF-IGN69 height to RGF93 v1 (ballpark vertical transformation, without ellipsoid height to vertical height correction), unknown accuracy, World, has ballpark transformation PROJ string: +proj=noop - args: EPSG:32631 --3d out: | PROJ.4 string: +proj=utm +zone=31 +datum=WGS84 +units=m +no_defs +type=crs WKT2:2019 string: PROJCRS["WGS 84 / UTM zone 31N", BASEGEOGCRS["WGS 84", ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)"], MEMBER["World Geodetic System 1984 (G730)"], MEMBER["World Geodetic System 1984 (G873)"], MEMBER["World Geodetic System 1984 (G1150)"], MEMBER["World Geodetic System 1984 (G1674)"], MEMBER["World Geodetic System 1984 (G1762)"], MEMBER["World Geodetic System 1984 (G2139)"], MEMBER["World Geodetic System 1984 (G2296)"], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ENSEMBLEACCURACY[2.0]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], ID["EPSG",4979]], CONVERSION["UTM zone 31N", METHOD["Transverse Mercator", ID["EPSG",9807]], PARAMETER["Latitude of natural origin",0, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8801]], PARAMETER["Longitude of natural origin",3, ANGLEUNIT["degree",0.0174532925199433], ID["EPSG",8802]], PARAMETER["Scale factor at natural origin",0.9996, SCALEUNIT["unity",1], ID["EPSG",8805]], PARAMETER["False easting",500000, LENGTHUNIT["metre",1], ID["EPSG",8806]], PARAMETER["False northing",0, LENGTHUNIT["metre",1], ID["EPSG",8807]], ID["EPSG",16031]], CS[Cartesian,3], AXIS["(E)",east, ORDER[1], LENGTHUNIT["metre",1, ID["EPSG",9001]]], AXIS["(N)",north, ORDER[2], LENGTHUNIT["metre",1, ID["EPSG",9001]]], AXIS["ellipsoidal height (h)",up, ORDER[3], LENGTHUNIT["metre",1, ID["EPSG",9001]]], USAGE[ SCOPE["unknown"], AREA["Between 0°E and 6°E, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Andorra. Belgium. Benin. Burkina Faso. Denmark - North Sea. France. Germany - North Sea. Ghana. Luxembourg. Mali. Netherlands. Niger. Nigeria. Norway. Spain. Togo. United Kingdom (UK) - North Sea."], BBOX[0,0,84,6]], REMARK["Promoted to 3D from EPSG:32631"]] - args: -s "WGS 84" -t "WGS 84 + EGM96 height" --hide-ballpark --summary out: | Candidate operations found: 1 unknown id, WGS 84 to EGM96 height (1), 1 m, World. - args: -s "WGS 84 + EGM96 height" -t "WGS 84" --hide-ballpark --summary out: | Candidate operations found: 1 unknown id, Inverse of WGS 84 to EGM96 height (1), 1 m, World. - args: -s EPSG:32631 -t EPSG:4326+3855 --summary out: | Candidate operations found: 1 unknown id, Inverse of UTM zone 31N + Inverse of Null geographic offset from WGS 84 to WGS 84, 0 m, World. - args: -s EPSG:32631 -t EPSG:4326+3855 --3d --summary out: | Candidate operations found: 3 unknown id, Inverse of UTM zone 31N + WGS 84 to EGM2008 height (1), 1 m, World. unknown id, Inverse of UTM zone 31N + WGS 84 to EGM2008 height (2), 0.5 m, World. unknown id, Inverse of UTM zone 31N + Inverse of Transformation from EGM2008 height to WGS 84 (ballpark vertical transformation, without ellipsoid height to vertical height correction), unknown accuracy, World., has ballpark transformation - args: -s EPSG:4326 -t EPSG:32661 --normalize-axis-order -o PROJ -q --single-line comment: "Undocumented option: --normalize-axis-order" out: | +proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=stere +lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 - args: -s EPSG:4936 -t EPSG:4978 --spatial-test intersects --summary --bbox 5,54,6,55 comment: "WGS 84 to ETRS89 (2) uses a transformation method not supported by PROJ currently (time-specific Helmert), and thus must be sorted last" out: | Candidate operations found: 2 unknown id, Ballpark geocentric translation from ETRS89 to WGS 84, unknown accuracy, World, has ballpark transformation INVERSE(EPSG):9225, Inverse of WGS 84 to ETRS89 (2), 0.1 m, Germany - offshore North Sea. Netherlands - offshore east of 5E. - args: -s "+proj=longlat +datum=WGS84 +geoidgrids=@foo.gtx +type=crs" -t EPSG:4979 -o PROJ -q out: | +proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=@foo.gtx +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s "AGD66" -t "WGS 84 (G1762)" --spatial-test intersects --summary out: | Candidate operations found: 19 unknown id, AGD66 to WGS 84 (18) + WGS 84 to WGS 84 (G1762), 5 m, Australia - offshore including EEZ. unknown id, AGD66 to WGS 84 (16) + WGS 84 to WGS 84 (G1762), 7 m, Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Tasmania; Western Australia; Victoria. unknown id, AGD66 to WGS 84 (20) + WGS 84 to WGS 84 (G1762), 11 m, Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Tasmania; Western Australia; Victoria. unknown id, AGD66 to WGS 84 (15) + WGS 84 to WGS 84 (G1762), 5 m, Australia - Northern Territory. unknown id, AGD66 to WGS 84 (13) + WGS 84 to WGS 84 (G1762), 5 m, Australia - New South Wales and Victoria. unknown id, AGD66 to WGS 84 (21) + WGS 84 to WGS 84 (G1762), 7 m, Papua New Guinea - mainland onshore. unknown id, AGD66 to WGS 84 (14) + WGS 84 to WGS 84 (G1762), 5 m, Australia - Tasmania including islands - onshore. unknown id, AGD66 to WGS 84 (19) + WGS 84 to WGS 84 (G1762), 4 m, Papua New Guinea - Papuan fold and thrust belt. unknown id, AGD66 to WGS 84 (22) + WGS 84 to WGS 84 (G1762), 6 m, Papua New Guinea - Papuan fold and thrust belt. unknown id, AGD66 to WGS 84 (23) + WGS 84 to WGS 84 (G1762), 6 m, Papua New Guinea - North Fly area (between 5°04'S and 6°36'S and west of 141°32'E). unknown id, AGD66 to WGS 84 (12) + WGS 84 to WGS 84 (G1762), 5 m, Australia - Australian Capital Territory. unknown id, AGD66 to GDA94 (11) + GDA94 to GDA2020 (2) + Conversion from GDA2020 (geog2D) to GDA2020 (geocentric) + GDA2020 to WGS 84 (G1762) (1) + Conversion from WGS 84 (G1762) (geocentric) to WGS 84 (G1762) (geog2D), 0.75 m, Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Tasmania; Western Australia; Victoria., time-dependent operation unknown id, AGD66 to GDA94 (12) + GDA94 to GDA2020 (2) + Conversion from GDA2020 (geog2D) to GDA2020 (geocentric) + GDA2020 to WGS 84 (G1762) (1) + Conversion from WGS 84 (G1762) (geocentric) to WGS 84 (G1762) (geog2D), 3.25 m, Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Tasmania; Western Australia; Victoria., time-dependent operation unknown id, AGD66 to WGS 84 (17) + WGS 84 to WGS 84 (G1762), 4.9 m, Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Tasmania; Western Australia; Victoria. unknown id, AGD66 to GDA94 (9) + GDA94 to GDA2020 (2) + Conversion from GDA2020 (geog2D) to GDA2020 (geocentric) + GDA2020 to WGS 84 (G1762) (1) + Conversion from WGS 84 (G1762) (geocentric) to WGS 84 (G1762) (geog2D), 1.25 m, Australia - Northern Territory., time-dependent operation unknown id, AGD66 to GDA94 (4) + GDA94 to GDA2020 (2) + Conversion from GDA2020 (geog2D) to GDA2020 (geocentric) + GDA2020 to WGS 84 (G1762) (1) + Conversion from WGS 84 (G1762) (geocentric) to WGS 84 (G1762) (geog2D), 1.25 m, Australia - New South Wales and Victoria., time-dependent operation unknown id, AGD66 to GDA94 (8) + GDA94 to GDA2020 (2) + Conversion from GDA2020 (geog2D) to GDA2020 (geocentric) + GDA2020 to WGS 84 (G1762) (1) + Conversion from WGS 84 (G1762) (geocentric) to WGS 84 (G1762) (geog2D), 1.25 m, Australia - Tasmania including islands - onshore., time-dependent operation unknown id, AGD66 to GDA94 (19) + GDA94 to GDA2020 (2) + Conversion from GDA2020 (geog2D) to GDA2020 (geocentric) + GDA2020 to WGS 84 (G1762) (1) + Conversion from WGS 84 (G1762) (geocentric) to WGS 84 (G1762) (geog2D), 0.75 m, Australia - Australian Capital Territory., time-dependent operation unknown id, Ballpark geographic offset from AGD66 to WGS 84 (G1762), unknown accuracy, World, has ballpark transformation - args: -s EPSG:31467 -t ETRS89 --spatial-test intersects --grid-check none --bbox 8,48,9,49 --summary out: | Candidate operations found: 4 unknown id, Inverse of 3-degree Gauss-Kruger zone 3 + DHDN to ETRS89 (9), 0.1 m, Germany - Baden-Wurttemberg. unknown id, Inverse of 3-degree Gauss-Kruger zone 3 + DHDN to ETRS89 (8), 0.9 m, Germany - onshore - states of Baden-Wurtemberg, Bayern, Berlin, Brandenburg, Bremen, Hamburg, Hessen, Mecklenburg-Vorpommern, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Sachsen, Sachsen-Anhalt, Schleswig-Holstein, Thuringen. unknown id, Inverse of 3-degree Gauss-Kruger zone 3 + DHDN to ETRS89 (3), 1 m, Germany - states of former West Germany - south of 50°20'N. unknown id, Inverse of 3-degree Gauss-Kruger zone 3 + DHDN to ETRS89 (2), 3 m, Germany - states of former West Germany onshore - Baden-Wurtemberg, Bayern, Bremen, Hamburg, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein. - args: -s "GDA94" -t "AHD height" --grid-check none -o PROJ --spatial-test intersects out: | Candidate operations found: 1 ------------------------------------- Operation No. 1: DERIVED_FROM(EPSG):5656, GDA94 to AHD height (49), 0.15 m, Australia - Australian Capital Territory; New South Wales; Northern Territory; Queensland; South Australia; Western Australia; Victoria. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +inv +proj=vgridshift +grids=au_ga_AUSGeoid09_V1.01.tif +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s "GDA2020" -t "AHD height" --grid-check none -o PROJ --spatial-test intersects out: | Candidate operations found: 1 ------------------------------------- Operation No. 1: DERIVED_FROM(EPSG):8451, GDA2020 to AHD height (1), 0.15 m, Australia - Australian Capital Territory, New South Wales, Northern Territory, Queensland, South Australia, Tasmania, Western Australia and Victoria - onshore. Christmas Island - onshore. Cocos and Keeling Islands - onshore. PROJ string: +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +inv +proj=vgridshift +grids=au_ga_AUSGeoid2020_20180201.tif +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -k ellipsoid WGS84 out: | PROJ string: +ellps=WGS84 WKT2:2019 string: ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1], ID["EPSG",7030]] - args: -k ellipsoid EPSG:7030 out: | PROJ string: +ellps=WGS84 WKT2:2019 string: ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1], ID["EPSG",7030]] - args: -k datum WGS84 out: | WKT2:2019 string: DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ID["EPSG",6326]] - args: -k datum EPSG:6326 out: | WKT2:2019 string: DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ID["EPSG",6326]] - args: -k ensemble WGS84 out: | WKT2:2019 string: ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)", ID["EPSG",1166]], MEMBER["World Geodetic System 1984 (G730)", ID["EPSG",1152]], MEMBER["World Geodetic System 1984 (G873)", ID["EPSG",1153]], MEMBER["World Geodetic System 1984 (G1150)", ID["EPSG",1154]], MEMBER["World Geodetic System 1984 (G1674)", ID["EPSG",1155]], MEMBER["World Geodetic System 1984 (G1762)", ID["EPSG",1156]], MEMBER["World Geodetic System 1984 (G2139)", ID["EPSG",1309]], MEMBER["World Geodetic System 1984 (G2296)", ID["EPSG",1383]], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1], ID["EPSG",7030]], ENSEMBLEACCURACY[2.0], ID["EPSG",6326]] - args: -k operation EPSG:8457 -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step +proj=cart +ellps=bessel +step +proj=helmert +x=674.374 +y=15.056 +z=405.346 +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: D_WGS_1984 out: | WKT2:2019 string: ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)", ID["EPSG",1166]], MEMBER["World Geodetic System 1984 (G730)", ID["EPSG",1152]], MEMBER["World Geodetic System 1984 (G873)", ID["EPSG",1153]], MEMBER["World Geodetic System 1984 (G1150)", ID["EPSG",1154]], MEMBER["World Geodetic System 1984 (G1674)", ID["EPSG",1155]], MEMBER["World Geodetic System 1984 (G1762)", ID["EPSG",1156]], MEMBER["World Geodetic System 1984 (G2139)", ID["EPSG",1309]], MEMBER["World Geodetic System 1984 (G2296)", ID["EPSG",1383]], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1], ID["EPSG",7030]], ENSEMBLEACCURACY[2.0], ID["EPSG",6326]] - args: -k datum D_WGS_1984 out: | WKT2:2019 string: DATUM["World Geodetic System 1984", ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ID["EPSG",6326]] - args: --searchpaths comment: Hard to test content - args: --remote-data env: PROJ_NETWORK: OFF out: | Status: disabled Reason: not enabled in proj.ini or PROJ_NETWORK=ON not specified - args: --remote-data env: PROJ_NETWORK: ON comment: Hard to test content - args: --accuracy 0.05 -s EPSG:4326 -t EPSG:4258 out: | Candidate operations found: 0 ###################### # NZGD2000 -> ITRFxx # ###################### - args: -s NZGD2000 -t ITRF96 -o PROJ -q --spatial-test intersects --hide-ballpark out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s NZGD2000 -t ITRF97 -o PROJ -q --spatial-test intersects --hide-ballpark out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20000101.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0 +y=-0.00051 +z=0.01553 +rx=-0.00016508 +ry=0.00026897 +rz=5.984e-05 +s=-0.00151099 +dx=0.00069 +dy=-0.0001 +dz=0.00186 +drx=-1.347e-05 +dry=1.514e-05 +drz=-2.7e-07 +ds=-0.00019201 +t_epoch=2000 +convention=position_vector +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s NZGD2000 -t ITRF2000 -o PROJ -q --spatial-test intersects --hide-ballpark out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20000101.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0067 +y=0.00379 +z=-0.00717 +rx=-0.00016508 +ry=0.00026897 +rz=0.00011984 +s=6.901e-05 +dx=0.00069 +dy=-0.0007 +dz=0.00046 +drx=-1.347e-05 +dry=1.514e-05 +drz=1.973e-05 +ds=-0.00018201 +t_epoch=2000 +convention=position_vector +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s NZGD2000 -t ITRF2005 -o PROJ -q --spatial-test intersects --hide-ballpark out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20000101.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0068 +y=0.00299 +z=-0.01297 +rx=-0.00016508 +ry=0.00026897 +rz=0.00011984 +s=0.00046901 +dx=0.00049 +dy=-0.0006 +dz=-0.00134 +drx=-1.347e-05 +dry=1.514e-05 +drz=1.973e-05 +ds=-0.00010201 +t_epoch=2000 +convention=position_vector +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s NZGD2000 -t ITRF2008 -o PROJ -q --spatial-test intersects --hide-ballpark out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20171201.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0048 +y=0.00209 +z=-0.01767 +rx=-0.00016508 +ry=0.00026897 +rz=0.00011984 +s=0.00140901 +dx=0.00079 +dy=-0.0006 +dz=-0.00134 +drx=-1.347e-05 +dry=1.514e-05 +drz=1.973e-05 +ds=-0.00010201 +t_epoch=2000 +convention=position_vector +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s NZGD2000 -t ITRF2014 -o PROJ -q --spatial-test intersects --hide-ballpark out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0064 +y=0.00399 +z=-0.01427 +rx=-0.00016508 +ry=0.00026897 +rz=0.00011984 +s=0.00108901 +dx=0.00079 +dy=-0.0006 +dz=-0.00144 +drx=-1.347e-05 +dry=1.514e-05 +drz=1.973e-05 +ds=-7.201e-05 +t_epoch=2000 +convention=position_vector +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 ###################### # Finland TINs ###################### - args: -s "KKJ / Finland Uniform Coordinate System" -t "ETRS89 / TM35FIN(E,N)" --grid-check none -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=tinshift +file=fi_nls_ykj_etrs35fin.json - args: -s KKJ -t ETRS89 -o PROJ --grid-check none -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +step +proj=tinshift +file=fi_nls_ykj_etrs35fin.json +step +inv +proj=utm +zone=35 +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s "KKJ + N43 height" -t "KKJ + N60 height" --grid-check none -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +step +proj=tinshift +file=fi_nls_n43_n60.json +step +inv +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - args: -s "KKJ + N60 height" -t "KKJ + N2000 height" --grid-check none -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +step +proj=tinshift +file=fi_nls_n60_n2000.json +step +inv +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 # Advanced ! - args: -s "KKJ + N43 height" -t "ETRS89 + N2000 height" --grid-check none -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +step +proj=tinshift +file=fi_nls_n43_n60.json +step +proj=tinshift +file=fi_nls_n60_n2000.json +step +proj=tinshift +file=fi_nls_ykj_etrs35fin.json +step +inv +proj=utm +zone=35 +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 # Advanced ! - args: -s "KKJ / Finland Uniform Coordinate System + N43 height" -t "ETRS89 / TM35FIN(E,N) + N2000 height" --grid-check none -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=tinshift +file=fi_nls_n43_n60.json +step +proj=tinshift +file=fi_nls_n60_n2000.json +step +proj=tinshift +file=fi_nls_ykj_etrs35fin.json # Advanced ! - args: -s "ETRS89 / TM35FIN(E,N) + N2000 height" -t "KKJ / Finland Uniform Coordinate System + N43 height" --grid-check none -o PROJ -q out: | +proj=pipeline +step +inv +proj=tinshift +file=fi_nls_ykj_etrs35fin.json +step +inv +proj=tinshift +file=fi_nls_n60_n2000.json +step +inv +proj=tinshift +file=fi_nls_n43_n60.json +step +proj=axisswap +order=2,1 - comment: Quick check of NKG transformations args: -s EPSG:7789 -t EPSG:4936 --area EPSG:1080 --summary --hide-ballpark out: | Candidate operations found: 1 NKG:ITRF2014_TO_DK, ITRF2014 to ETRS89(DK), 0.01 m, Denmark - onshore and offshore., time-dependent operation - args: --dump-db-structure head: 5 out: | CREATE TABLE metadata( key TEXT NOT NULL PRIMARY KEY CHECK (length(key) >= 1), value TEXT NOT NULL ) WITHOUT ROWID; CREATE TABLE unit_of_measure( - args: --dump-db-structure --output-id HOBU:XXXX EPSG:4326 tail: 4 out: | INSERT INTO metadata VALUES('DATABASE.LAYOUT.VERSION.MAJOR',1); INSERT INTO metadata VALUES('DATABASE.LAYOUT.VERSION.MINOR',5); INSERT INTO geodetic_crs VALUES('HOBU','XXXX','WGS 84','','geographic 2D','EPSG','6422','EPSG','6326',NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_CRS_XXXX','geodetic_crs','HOBU','XXXX','EPSG','1262','EPSG','1183'); - args: -s EPSG:23030 -t EPSG:25830 --bbox -6,40,-5,41 --grid-check known_available --hide-ballpark --summary comment: > Checks that ED50 to ETRS89 (12) is in the output (superseded transformation, but replacements has unknown grid) out: | Candidate operations found: 2 unknown id, Inverse of UTM zone 30N + ED50 to ETRS89 (12) + UTM zone 30N, 0.2 m, Spain - mainland, Balearic Islands, Ceuta and Melila - onshore. unknown id, Inverse of UTM zone 30N + ED50 to ETRS89 (7) + UTM zone 30N, 1.5 m, Spain - onshore mainland except northwest (north of 41°30'N and west of 4°30'W). - args: --list-crs grep: EPSG:32632|ESRI:103668|OGC out: | EPSG:32632 "WGS 84 / UTM zone 32N" ESRI:103668 "NAD_1983_HARN_Adj_MN_Ramsey_Meters" OGC:CRS27 "NAD27 (CRS27)" OGC:CRS83 "NAD83 (CRS83)" OGC:CRS84 "WGS 84 (CRS84)" OGC:CRS84h "WGS 84 longitude-latitude-height" - args: --list-crs --authority OGC,EPSG grep: EPSG:4326|OGC out: | OGC:CRS27 "NAD27 (CRS27)" OGC:CRS83 "NAD83 (CRS83)" OGC:CRS84 "WGS 84 (CRS84)" OGC:CRS84h "WGS 84 longitude-latitude-height" EPSG:4326 "WGS 84" - args: --list-crs grep: deprecated sort: out: - args: --list-crs vertical --bbox 0,40,1,41 --spatial-test intersects grep: Alicante|NAVD88 sort: out: EPSG:5782 "Alicante height" - args: --list-crs vertical --bbox -10,35,5,45 --spatial-test contains grep: Alicante|NAVD88 sort: out: EPSG:5782 "Alicante height" - args: --list-crs --area Spain --spatial-test intersects grep: EPSG:9505|EPSG:9398|EPSG:4258|EPSG:5703 sort: out: | EPSG:4258 "ETRS89" EPSG:9398 "Tenerife height" EPSG:9505 "ETRS89 + Alicante height" - args: --list-crs --area Spain --spatial-test contains grep: EPSG:9505|EPSG:9398|EPSG:4258|EPSG:5703 sort: out: | EPSG:9398 "Tenerife height" EPSG:9505 "ETRS89 + Alicante height" - args: --list-crs --area Spain grep: EPSG:9505|EPSG:9398|EPSG:4258|EPSG:5703 sort: out: | EPSG:9398 "Tenerife height" EPSG:9505 "ETRS89 + Alicante height" - args: --list-crs geodetic grep: EPSG:4326|EPSG:4979|EPSG:4978 sort: out: | EPSG:4326 "WGS 84" EPSG:4978 "WGS 84" EPSG:4979 "WGS 84" - args: --list-crs geographic grep: EPSG:4326|EPSG:4979|EPSG:4978 sort: out: | EPSG:4326 "WGS 84" EPSG:4979 "WGS 84" - args: --list-crs geocentric,geographic_3d grep: EPSG:4326|EPSG:4979|EPSG:4978 sort: out: | EPSG:4978 "WGS 84" EPSG:4979 "WGS 84" - args: --list-crs geographic_2d,allow_deprecated --bbox -100,40,-90,41 --spatial-test intersects grep: - deprecated - NAD83\(FBN\)|GCS_IGS08 sort: out: | EPSG:8449 "NAD83(FBN)" [deprecated] ESRI:104010 "GCS_IGS08" [deprecated] - args: --list-crs projected --bbox -100,40,-90,41 --spatial-test intersects grep: (2011).*Missouri East|York sort: out: EPSG:6512 "NAD83(2011) / Missouri East" - comment: Test case where --area has several matches args: --list-crs projected --area France grep: RGF93 v1 / Lambert-93|UTM zone 11N sort: out: EPSG:2154 "RGF93 v1 / Lambert-93" - comment: > Test North-Macedonia CRS for which there are several MGI 1901 -> WGS 84 Helmert transformations but only one matches the extent of the CRS args: EPSG:9945 -o PROJ -q out: +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=500000 +y_0=-4000000 +ellps=bessel +towgs84=521.748,229.489,590.921,4.029,4.488,-15.521,-9.78 +units=m +no_defs +type=crs - args: -s "NAD83(CSRS)v7" --s_epoch 1997 -t "NAD83(CSRS)v7" --t_epoch 2010 --summary --hide-ballpark --spatial-test intersects out: | Candidate operations found: 1 unknown id, Null geographic offset from NAD83(CSRS)v7 (geog2D) to NAD83(CSRS)v7 (geog3D) + Canada velocity grid v7 from epoch 1997 to epoch 2010 + Null geographic offset from NAD83(CSRS)v7 (geog3D) to NAD83(CSRS)v7 (geog2D), 0.01 m, Canada - onshore - Alberta; British Columbia (BC); Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward Island (PEI); Quebec; Saskatchewan; Yukon. - comment: > Test that "CGVD28 height" to "CGVD28(HTv2.0) height" is a no-op args: -s "CGVD28 height" -t "CGVD28(HTv2.0) height" -o PROJ -q out: +proj=noop - comment: > Test custom records for WGS 84 realizations to EGM2008 (https://github.com/OSGeo/PROJ/issues/4362) args: -s "WGS 84 (G1150) + EGM2008 height" -t "WGS 84 (G1674)" --3d -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1 +step +proj=cart +ellps=WGS84 +step +proj=helmert +x=-0.0024 +y=0.0016 +z=0.0232 +rx=-0.00027 +ry=0.00027 +rz=-0.00038 +s=0.00208 +dx=-0.0001 +dy=-0.0001 +dz=0.0018 +drx=0 +dry=0 +drz=0 +ds=-8e-05 +t_epoch=2005 +convention=coordinate_frame +step +inv +proj=cart +ellps=WGS84 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - comment: > Test 'WGS 84 (Gxxx) + EGM2008 height' to 'WGS 84 (Gyyy) + EGM2008 height' args: -s "WGS 84 (G1150) + EGM2008 height" -t "WGS 84 (G1674) + EGM2008 height" -o PROJ -q out: | +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart +ellps=WGS84 +step +proj=helmert +x=-0.0024 +y=0.0016 +z=0.0232 +rx=-0.00027 +ry=0.00027 +rz=-0.00038 +s=0.00208 +dx=-0.0001 +dy=-0.0001 +dz=0.0018 +drx=0 +dry=0 +drz=0 +ds=-8e-05 +t_epoch=2005 +convention=coordinate_frame +step +inv +proj=cart +ellps=WGS84 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 - comment: > Test that ETRF2000 to ETRF2014 only goes through ITRF2000, ITRF2008 or ITRF2014, and not ITRF9x or ITRF>2020 args: -s ETRF2000 -t ETRF2014 --3d --summary --authority EPSG out: | Candidate operations found: 6 unknown id, Conversion from ETRF2000 (geog3D) to ETRF2000 (geocentric) + Inverse of ITRF2014 to ETRF2000 (1) + ITRF2014 to ETRF2014 (2) + Conversion from ETRF2014 (geocentric) to ETRF2014 (geog3D), 0 m, Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N., time-dependent operation unknown id, Conversion from ETRF2000 (geog3D) to ETRF2000 (geocentric) + Inverse of ITRF2014 to ETRF2000 (1) + ITRF2014 to ETRF2014 (1) + Conversion from ETRF2014 (geocentric) to ETRF2014 (geog3D), 0 m, Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N., time-dependent operation unknown id, Conversion from ETRF2000 (geog3D) to ETRF2000 (geocentric) + Inverse of ITRF2008 to ETRF2000 (1) + ITRF2008 to ETRF2014 (1) + Conversion from ETRF2014 (geocentric) to ETRF2014 (geog3D), 0 m, Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N., time-dependent operation unknown id, Conversion from ETRF2000 (geog3D) to ETRF2000 (geocentric) + Inverse of ITRF2005 to ETRF2000 (1) + ITRF2005 to ETRF2014 (1) + Conversion from ETRF2014 (geocentric) to ETRF2014 (geog3D), 0 m, Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N., time-dependent operation unknown id, Conversion from ETRF2000 (geog3D) to ETRF2000 (geocentric) + Inverse of ITRF2000 to ETRF2000 (2) + ITRF2000 to ETRF2014 (1) + Conversion from ETRF2014 (geocentric) to ETRF2014 (geog3D), 0 m, Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N., time-dependent operation unknown id, Conversion from ETRF2000 (geog3D) to ETRF2000 (geocentric) + Inverse of ITRF2000 to ETRF2000 (1) + ITRF2000 to ETRF2014 (1) + Conversion from ETRF2014 (geocentric) to ETRF2014 (geog3D), 0 m, Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N., time-dependent operation - comment: > Test that ETRF2000-PL to ETRF2014 is not negatively affected by https://github.com/OSGeo/PROJ/pull/4364 changes (the current actual result is not golden in any way, using ETRF2000 to ETRF2014 could probably make sense) args: -s ETRF2000-PL -t ETRF2014 --summary out: | Candidate operations found: 1 unknown id, ETRF2000-PL to ETRS89 (1) + ETRS89 to ETRF2014, 0.1 m, Poland - onshore and offshore. - comment: > Test WGS 84 (G1150) to WGS 84 (G2296) args: -s "WGS 84 (G1150)" -t "WGS 84 (G2296)" --summary out: | Candidate operations found: 1 unknown id, Conversion from WGS 84 (G1150) (geog2D) to WGS 84 (G1150) (geocentric) + WGS 84 (G1150) to WGS 84 (G1762) (1) + WGS 84 (G1762) to WGS 84 (G2139) (1) + WGS 84 (G2139) to WGS 84 (G2296) (1) + Conversion from WGS 84 (G2296) (geocentric) to WGS 84 (G2296) (geog2D), 0.04 m, World - args: completion projinfo - out: | -o -k --summary -q --area --bbox --spatial-test --crs-extent-use --grid-check --pivot-crs --show-superseded --hide-ballpark --accuracy --allow-ellipsoidal-height-as-vertical-crs --boundcrs-to-wgs84 --authority --main-db-path --aux-db-path --identify --3d --output-id --c-ify --single-line --searchpaths --remote-data --list-crs --dump-db-structure -s --s_epoch -t --t_epoch - args: completion projinfo -o out: all PROJ WKT2:2019 WKT2:2015 WKT1:GDAL WKT1:ESRI PROJJSON SQL - args: completion projinfo -o "WKT2:" out: 2019 2015 - args: completion projinfo -o "WKT1:" out: GDAL ESRI - args: completion projinfo --pivot-crs out: | always if_no_direct_transformation never EPSG: ESRI: IAU_2015: IGNF: NKG: NRCAN: OGC: PROJ: - args: completion projinfo out: | EPSG: ESRI: IAU_2015: IGNF: NKG: NRCAN: OGC: PROJ: - args: completion projinfo NKG out: "NKG:" - args: completion projinfo "OGC:" out: | CRS27\ --\ NAD27\ (CRS27) CRS83\ --\ NAD83\ (CRS83) CRS84\ --\ WGS\ 84\ (CRS84) CRS84h\ --\ WGS\ 84\ longitude-latitude-height - args: completion projinfo EPSG:432 out: | 4322\ --\ WGS\ 72 4324\ --\ WGS\ 72BE 4326\ --\ WGS\ 84 - args: completion projinfo EPSG:4326 out: | 4326 - args: completion projinfo EGM out: | EGM2008\ height EGM96\ height EGM84\ height - args: completion projinfo "\"RGF93" v1 "/" out: | Lambert-93 CC42 CC43 CC44 CC45 CC46 CC47 CC48 CC49 CC50 Lambert-93\ +\ NGF-IGN69\ height Lambert-93\ +\ NGF-IGN78\ height - args: completion projinfo "\"NAD83(HARN) / California Albers" "+" out: | NGVD29\ height\ (ftUS) NAVD88\ depth\ (ftUS) NGVD29\ depth\ (ftUS) NAVD88\ height\ (ftUS) NGVD29\ height\ (m) MSL\ height\ (ftUS) MSL\ depth\ (ftUS) NAVD88\ height\ (ft) - args: completion projinfo "\"Mauritania 1999" "/" UTM zone 29N "+" out: | EGM2008\ height MSL\ height MSL\ depth EGM96\ height EGM84\ height Instantaneous\ Water\ Level\ height Instantaneous\ Water\ Level\ depth LAT\ depth LLWLT\ depth ISLW\ depth MLLWS\ depth MLWS\ depth MLLW\ depth MLW\ depth MHW\ height MHHW\ height MHWS\ height HHWLT\ height HAT\ height Low\ Water\ depth High\ Water\ height MSL\ height\ (ft) MSL\ depth\ (ft) - args: -s "Christmas Island Grid 1985" -t "GDA94 / MGA zone 48" -o PROJ -q out: | +proj=affine +xoff=550015 +yoff=8780001 - args: -s "Christmas Island Grid 1985" -t "Christmas Island Grid 1985" -o PROJ -q out: | +proj=noop proj-9.6.0/test/cli/test_projinfo_out.dist000664 001754 001755 00000002410 14764566077 020605 0ustar00e012349e012349000000 000000 ############################################################## Testing PROJ_AUX_DB environment variable PROJ.4 string: +proj=longlat +datum=WGS84 +no_defs +type=crs WKT2:2019 string: GEOGCRS["WGS 84", ENSEMBLE["World Geodetic System 1984 ensemble", MEMBER["World Geodetic System 1984 (Transit)"], MEMBER["World Geodetic System 1984 (G730)"], MEMBER["World Geodetic System 1984 (G873)"], MEMBER["World Geodetic System 1984 (G1150)"], MEMBER["World Geodetic System 1984 (G1674)"], MEMBER["World Geodetic System 1984 (G1762)"], MEMBER["World Geodetic System 1984 (G2139)"], MEMBER["World Geodetic System 1984 (G2296)"], ELLIPSOID["WGS 84",6378137,298.257223563, LENGTHUNIT["metre",1]], ENSEMBLEACCURACY[2.0]], PRIMEM["Greenwich",0, ANGLEUNIT["degree",0.0174532925199433]], CS[ellipsoidal,2], AXIS["geodetic latitude (Lat)",north, ORDER[1], ANGLEUNIT["degree",0.0174532925199433]], AXIS["geodetic longitude (Lon)",east, ORDER[2], ANGLEUNIT["degree",0.0174532925199433]], USAGE[ SCOPE["Horizontal component of 3D system."], AREA["World."], BBOX[-90,-180,90,180]], ID["HOBU","XXXX"]] proj-9.6.0/test/cli/test_projsync.sh000775 001754 001755 00000022250 14764566077 017415 0ustar00e012349e012349000000 000000 #!/bin/bash # Test projsync set -e TEST_CLI_DIR=$(dirname $0) EXE=$1 if test -z "${EXE}"; then echo "Usage: ${0} " exit 1 fi if test ! -x ${EXE}; then echo "*** ERROR: Can not find '${EXE}' program!" exit 1 fi echo "============================================" echo "Running ${0} using ${EXE}:" echo "============================================" if ! curl -s https://cdn.proj.org/files.geojson >/dev/null 2>/dev/null; then if ! wget https://cdn.proj.org/files.geojson -O /dev/null 2>/dev/null; then echo "Cannot download https://cdn.proj.org/files.geojson. Skipping test" exit 0 fi fi TMP_OUT=test_projsync_out.txt rm -rf tmp_user_writable_directory mkdir -p tmp_user_writable_directory echo "Testing $EXE --list-files --target-dir tmp_user_writable_directory" if ! $EXE --list-files --target-dir tmp_user_writable_directory > ${TMP_OUT}; then echo "--list-files failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "at_bev_README.txt,,at_bev" >/dev/null || (cat ${TMP_OUT}; exit 100) export PROJ_USER_WRITABLE_DIRECTORY=tmp_user_writable_directory if test ! -f ${PROJ_USER_WRITABLE_DIRECTORY}/cache.db; then echo "*** ERROR: Can not find ${PROJ_USER_WRITABLE_DIRECTORY}/cache.db!" exit 100 fi if test ! -f ${PROJ_USER_WRITABLE_DIRECTORY}/files.geojson; then echo "*** ERROR: Can not find ${PROJ_USER_WRITABLE_DIRECTORY}/files.geojson!" exit 100 fi echo "Testing $EXE --all" if ! $EXE --all --dry-run > ${TMP_OUT}; then echo "--all failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "Would download https://cdn.proj.org/at_bev_README.txt" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --source-id fr_ign" if ! $EXE --source-id fr_ign --dry-run > ${TMP_OUT}; then echo "--source-id fr_ign failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "fr_ign_README.txt" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --source-id non_existing" if $EXE --source-id non_existing >${TMP_OUT} 2>&1 ; then echo "--source-id non_existing failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "Warning: 'non_existing' is a unknown value for --source-id" >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "fr_ign" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --area-of-use France" if ! $EXE --area-of-use France --dry-run > ${TMP_OUT}; then echo "--area-of-use France failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "fr_ign_ntf_r93.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --area-of-use non_existing" if $EXE --area-of-use non_existing >${TMP_OUT} 2>&1 ; then echo "--area-of-use non_existing failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "Warning: 'non_existing' is a unknown value for --area-of-use." >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "Australia" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --file ntf_r93" if ! $EXE --file ntf_r93 > ${TMP_OUT}; then echo "--file ntf_r93 failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "Downloading https://cdn.proj.org/fr_ign_ntf_r93.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) if test ! -f ${PROJ_USER_WRITABLE_DIRECTORY}/fr_ign_ntf_r93.tif; then echo "*** ERROR: Can not find ${PROJ_USER_WRITABLE_DIRECTORY}/fr_ign_ntf_r93.tif!" exit 100 fi echo "Testing $EXE --file ntf_r93 a second time" if ! $EXE --file ntf_r93 > ${TMP_OUT}; then echo "--file ntf_r93 failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "https://cdn.proj.org/fr_ign_ntf_r93.tif already downloaded" >/dev/null || (cat ${TMP_OUT}; exit 100) rm -f ${PROJ_USER_WRITABLE_DIRECTORY}/fr_ign_ntf_r93.tif echo "Testing $EXE --file non_existing" if $EXE --file non_existing >${TMP_OUT} 2>&1 ; then echo "--file non_existing failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "Warning: 'non_existing' is a unknown value for --file." >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "fr_ign_ntf_r93.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --bbox 2,49,3,50" if ! $EXE --bbox 2,49,3,50 --dry-run > ${TMP_OUT}; then echo "--bbox 2,49,3,50 failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "fr_ign_ntf_r93.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "us_nga_egm96_15.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --bbox 2,49,3,50 --exclude-world-coverage" if ! $EXE --bbox 2,49,3,50 --exclude-world-coverage --dry-run > ${TMP_OUT}; then echo "--bbox 2,49,3,50 --exclude-world-coverage failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "fr_ign_ntf_r93.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) if cat ${TMP_OUT} | grep "us_nga_egm96_15.tif" >/dev/null; then cat ${TMP_OUT} exit 100 fi echo "Testing $EXE --bbox 170,-90,-170,90" if ! $EXE --bbox 170,-90,-170,90 --dry-run > ${TMP_OUT}; then echo "--bbox 170,-90,-170,90 failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "nz_linz_nzgeoid2009.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "us_noaa_alaska.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --bbox 170,-90,190,90" if ! $EXE --bbox 170,-90,190,90 --dry-run > ${TMP_OUT}; then echo "--bbox 170,-90,190,90 failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "nz_linz_nzgeoid2009.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "us_noaa_alaska.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) echo "Testing $EXE --bbox -190,-90,-170,90" if ! $EXE --bbox -190,-90,-170,90 --dry-run > ${TMP_OUT}; then echo "--bbox -190,-90,-170,90 failed" cat ${TMP_OUT} exit 100 fi cat ${TMP_OUT} | grep "nz_linz_nzgeoid2009.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "us_noaa_alaska.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) cat > dummy.geojson < ${TMP_OUT}; then echo "--source-id au_ga --verbose --dry-run --local-geojson-file dummy.geojson" cat ${TMP_OUT} exit 100 fi rm dummy.geojson cat ${TMP_OUT} | grep "Skipping removed_in_1.7 as it is no longer useful starting with PROJ-data 1.7" >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "Skipping added_in_99_99.tif as it is only useful starting with PROJ-data 99.99" >/dev/null || (cat ${TMP_OUT}; exit 100) cat ${TMP_OUT} | grep "Would download https://cdn.proj.org/without_version.tif" >/dev/null || (cat ${TMP_OUT}; exit 100) # Cleanup rm -rf ${PROJ_USER_WRITABLE_DIRECTORY} rm ${TMP_OUT} exit 0 proj-9.6.0/test/gie/000775 001754 001755 00000000000 14764566152 014136 5ustar00e012349e012349000000 000000 proj-9.6.0/test/gie/4D-API_cs2cs-style.gie000664 001754 001755 00000052015 14764566077 017746 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- =============================================================================== Test the 4D API handling of cs2cs style transformation options. These tests are mostly based on the same material as those in more_builtins.gie, since we are testing the same kinds of things, but provided through a different interface. =============================================================================== ------------------------------------------------------------------------------- # Test the handling of the +towgs84 parameter. ------------------------------------------------------------------------------- # (additional tests of the towgs84 handling can be found in DHDN_ETRS89.gie) ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # This example is from Lotti Jivall: "Simplified transformations from # ITRF2008/IGS08 to ETRS89 for maritime applications" (see also more_builtins.gie) ------------------------------------------------------------------------------- operation proj=geocent \ towgs84 = 0.676780, 0.654950, -0.528270, \ -0.022742, 0.012667, 0.022704, \ -0.01070 ------------------------------------------------------------------------------- tolerance 1 um direction inverse # Broken test. FIXME #accept 3565285.00000000 855949.00000000 5201383.00000000 #expect 3565285.41342351 855948.67986759 5201382.72939791 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # This example is a random point, transformed from ED50 to ETRS89 using KMStrans2. ------------------------------------------------------------------------------- operation proj=latlong ellps=intl \ towgs84 = -081.07030, -089.36030, -115.75260, \ 000.48488, 000.02436, 000.41321, -0.540645 ------------------------------------------------------------------------------- tolerance 25 mm accept 16.82 55.17 61.0 expect 16.8210462130 55.1705688946 29.0317 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation proj=latlong nadgrids=ntf_r93.gsb ellps=GRS80 ------------------------------------------------------------------------------- # This functionality is also tested in more_builtins.gie ------------------------------------------------------------------------------- tolerance 1 mm accept 2.25 46.5 expect 2.250704350387 46.500051597273 direction inverse accept 2.250704350387 46.500051597273 expect 2.25 46.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widespread bad egm96 file accept 12.5 55.5 0 expect 12.5 55.5 -36.3941 direction inverse accept 12.5 55.5 -36.3941 expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=merc geoidgrids=egm96_15.gtx ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 12.5 55.5 0 expect 1391493.63492 7424275.19462 -36.3941 direction inverse accept 1391493.63492 7424275.19462 -36.3941 expect 12.5 55.5 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Same as the two above, but also do axis swapping. ------------------------------------------------------------------------------- # NOTE: A number of the tests below are commented out. The actually do the # right thing, but the gie distance computation is not yet able to cope # with "unusual" axis orders ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx axis=neu ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widely distributed, bad egm96 file # Broken test. FIXME #accept 12.5 55.5 0 #expect 55.5 12.5 -36.3941 #direction inverse #accept 55.5 12.5 -36.3941 #expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx axis=dne ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widely distributed, bad egm96 file # accept 12.5 55.5 0 # expect 36.3941 55.5 12.5 # direction inverse # accept 36.3941 55.5 12.5 # expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=merc geoidgrids=egm96_15.gtx ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 12.5 55.5 0 expect 1391493.63492 7424275.19462 -36.3941 direction inverse accept 1391493.63492 7424275.19462 -36.3941 expect 12.5 55.5 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Some more complex axis swapping. ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx axis=nue ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widely distributed, bad egm96 file # Broken test. FIXME #accept 12.5 55.5 0 #expect 55.5 -36.3941 12.5 # direction inverse # accept 55.5 -36.3941 12.5 # expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=merc geoidgrids=egm96_15.gtx axis=sue ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm accept 12.5 55.5 0 expect -7424275.1946 -36.3941 1391493.6349 0.0000 # direction inverse # accept -7424275.1946 -36.3941 1391493.6349 0.0000 # expect 12.5 55.5 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # A test case from a comment by Github user c0nk ------------------------------------------------------------------------------- operation 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 ------------------------------------------------------------------------------- tolerance 20 cm accept 7.438632495 46.951082877 expect 2600000.0 1200000.0 ------------------------------------------------------------------------------- # Same test, but now implemented as a pipeline. This is for testing a nasty bug, # where, at the end of pipeline creation, a false warning about missing ellps was # left behind from the creation of the Helmert step (now repaired in pj_init). ------------------------------------------------------------------------------- operation proj=pipeline \ step proj=cart ellps=WGS84 \ step proj=helmert x=674.37400 y=15.05600 z=405.34600 inv \ step proj=cart ellps=bessel inv \ step proj=somerc lat_0=46.95240555555556 lon_0=7.439583333333333 \ k_0=1 x_0=2600000 y_0=1200000 ellps=bessel units=m ------------------------------------------------------------------------------- tolerance 20 cm accept 7.438632495 46.951082877 0 expect 2600000.0 1200000.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Make sure that transient errors are returned correctly. ------------------------------------------------------------------------------- operation +proj=geos +lon_0=0.00 +lat_0=0.00 +a=6378169.00 +b=6356583.80 +h=35785831.0 ------------------------------------------------------------------------------- accept 85.05493299 46.5261074 expect failure accept 85.05493299 46.5261074 0 expect failure accept 85.05493299 46.5261074 0 0 expect failure ------------------------------------------------------------------------------- # Test that Google's Web Mercator works as intended (see #834 for details). ------------------------------------------------------------------------------- use_proj4_init_rules true operation proj=pipeline step init=epsg:26915 inv step init=epsg:3857 ------------------------------------------------------------------------------- tolerance 20 cm accept 487147.594520173 4934316.46263998 expect -10370728.80 5552839.74 accept 487147.594520173 4934316.46263998 0 expect -10370728.80 5552839.74 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test Google's Web Mercator with +proj=webmerc +ellps=WGS84 ------------------------------------------------------------------------------- use_proj4_init_rules true operation proj=pipeline step init=epsg:26915 inv step proj=webmerc datum=WGS84 ------------------------------------------------------------------------------- tolerance 20 cm accept 487147.594520173 4934316.46263998 expect -10370728.80 5552839.74 accept 487147.594520173 4934316.46263998 0 expect -10370728.80 5552839.74 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Web Mercator test data from EPSG Guidance Note 7-2, p. 44. ------------------------------------------------------------------------------- operation proj=webmerc +ellps=WGS84 tolerance 1 cm accept -100.33333333 24.46358028 expect -11169055.58 2810000.00 accept -100.33333333 24.38178694 expect -11169055.58 2800000.00 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test that +datum parameters are handled correctly in pipelines. # See #872 for details. ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=longlat +datum=GGRS87 +inv \ +step +proj=longlat +datum=WGS84 ------------------------------------------------------------------------------- tolerance 20 cm accept 23.7275 37.9838 0 expect 23.729194873180 37.986398897578 31.289740102 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test that +towgs84=0,0,0 parameter is handled as still implying cart # transformation ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=utm +zone=11 +ellps=clrk66 +towgs84=0,0,0 +inv \ +step +proj=utm +zone=11 +datum=WGS84 ------------------------------------------------------------------------------- tolerance 20 cm accept 440720 3751320 0 expect 440719.958709357 3751294.2109841 -4.44340920541435 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test that pipelines with unit mismatch between steps can't be constructed. ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=merc \ +step +proj=merc expect failure pjd_err_malformed_pipeline operation +proj=pipeline \ +step +proj=latlong \ +step +proj=merc \ +step +proj=helmert +x=200 +y=100 expect failure pjd_err_malformed_pipeline operation +proj=pipeline \ +step +proj=merc +ellps=WGS84 \ +step +proj=unitconvert +xy_in=m +xy_out=km accept 12 56 expect 1335.8339 7522.963 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test invalid pipelines ------------------------------------------------------------------------------- # proj= before first step operation +proj=pipeline +proj=merc +step +inv +proj=merc expect failure pjd_err_malformed_pipeline # o_proj= before first step operation +proj=pipeline +o_proj=merc +step +proj=ob_tran expect failure pjd_err_malformed_pipeline # nested pipeline operation +proj=pipeline +step +proj=pipeline +step +proj=merc expect failure pjd_err_malformed_pipeline ------------------------------------------------------------------------------- # Test Pipeline Coordinate Stack ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=push +v_1 \ +step +proj=utm +zone=32 \ +step +proj=utm +zone=33 +inv \ +step +proj=pop +v_1 accept 12 56 0 2020 expect 12 56 0 2020 roundtrip 10 operation +proj=pipeline \ +step +proj=latlon \ # dummy step +step +proj=push +v_1 \ +step +proj=utm +zone=32 \ +step +proj=utm +zone=33 +inv \ +step +proj=pop +v_1 \ +step +proj=affine # dummy step accept 12 56 0 2020 expect 12 56 0 2020 roundtrip 10 # push value to stack without popping it again operation +proj=pipeline \ +step +proj=push +v_1 \ +step +proj=utm +zone=32 \ +step +proj=utm +zone=33 +inv accept 12 56 0 2020 expect 18 56 0 2020 # test that multiple pushes and pops works operation +proj=pipeline \ +step +proj=push +v_1 \ +step +proj=utm +zone=32 \ +step +proj=push +v_1 \ +step +proj=utm +zone=33 +inv \ +step +proj=utm +zone=34 \ +step +proj=pop +v_1 \ +step +proj=utm +zone=32 +inv \ +step +proj=pop +v_1 accept 12 56 0 2020 expect 12 56 0 2020 # pop from empty stack operation +proj=pipeline \ +step +proj=utm +zone=32 \ +step +proj=utm +zone=33 +inv \ +step +proj=pop +v_1 accept 12 56 0 2020 expect 18 56 0 2020 operation +proj=pipeline \ +step +proj=push +v_2 \ +step +inv +proj=eqearth \ +step +proj=laea \ +step +proj=pop +v_2 accept 900000 6000000 0 2020 expect 896633.0226 6000000 0 2020 # Datum shift in cartesian space but keeping the height # (simulates a datum-shift with affin since ISO19111 code # currently obfuscates proj-strings using cart/helmert/invcart) operation +proj=pipeline +ellps=GRS80 \ +step +proj=push +v_3 \ +step +proj=cart \ +step +proj=affine +xoff=1000 +yoff=2000 +xoff=3000 \ +step +proj=cart +inv \ +step +proj=pop +v_3 tolerance 50 cm accept 12 56 0 expect 12.0280112877 55.9896187413 0 roundtrip 1 operation +proj=push +v_3 accept 12 56 0 0 expect 12 56 0 0 operation +proj=pop +v_3 accept 12 56 0 0 expect 12 56 0 0 ------------------------------------------------------------------------------- # Test Pipeline +omit_inv ------------------------------------------------------------------------------- operation +proj=pipeline +step +proj=affine +xoff=1 +yoff=1 +omit_inv accept 2 49 0 0 expect 3 50 0 0 direction inverse accept 2 49 0 0 expect 2 49 0 0 operation +proj=pipeline +step +inv +proj=affine +xoff=1 +yoff=1 +omit_inv accept 2 49 0 0 expect 1 48 0 0 direction inverse accept 2 49 0 0 expect 2 49 0 0 ------------------------------------------------------------------------------- # Test Pipeline +omit_fwd ------------------------------------------------------------------------------- operation +proj=pipeline +step +proj=affine +xoff=1 +yoff=1 +omit_fwd accept 2 49 0 0 expect 2 49 0 0 direction inverse accept 2 49 0 0 expect 1 48 0 0 operation +proj=pipeline +step +inv +proj=affine +xoff=1 +yoff=1 +omit_fwd accept 2 49 0 0 expect 2 49 0 0 direction inverse accept 2 49 0 0 expect 3 50 0 0 ------------------------------------------------------------------------------- # Test bugfix of https://github.com/OSGeo/proj.4/issues/1002 # (do not interpolate nodata values) ------------------------------------------------------------------------------- operation +proj=latlong +ellps=WGS84 +geoidgrids=tests/test_nodata.gtx ------------------------------------------------------------------------------- accept 4.05 52.1 0 expect 4.05 52.1 -10 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test null grid with vgridshift ------------------------------------------------------------------------------- operation proj=vgridshift grids=tests/test_nodata.gtx,null ellps=GRS80 ------------------------------------------------------------------------------- accept 4.05 52.1 0 expect 4.05 52.1 -10 # Outside validity area of test_nodata.gtx. Fallback on null accept 4.05 -52.1 0 expect 4.05 -52.1 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test bug fix of https://github.com/OSGeo/proj.4/issues/1025. # Using geocent in the new API with a custom ellipsoid should return coordinates # that correspond to that particular ellipsoid and not WGS84 as demonstrated in # the bug report. ------------------------------------------------------------------------------- operation +proj=pipeline +step \ +proj=longlat +a=3396190 +b=3376200 +inv +step \ +proj=geocent +a=3396190 +b=3376200 +lon_0=0 +units=m accept 0.0 0.0 0.0 expect 3396190.0 0.0 0.0 roundtrip 1 operation +proj=geocent +a=3396190 +b=3376200 +lon_0=0 +units=m accept 0.0 0.0 0.00 expect 3396190.0 0.0 0.0 roundtrip 1 ------------------------------------------------------------------------------- # Check that geocent and cart take into account to_meter (#1053) ------------------------------------------------------------------------------- operation +proj=geocent +a=1000 +b=1000 +to_meter=1000 accept 90 0 0 expect 0 1 0 roundtrip 1 operation +proj=cart +a=1000 +b=1000 +to_meter=1000 accept 90 0 0 expect 0 1 0 roundtrip 1 ------------------------------------------------------------------------------- # Check that vunits / vto_meter is honored ------------------------------------------------------------------------------- operation +proj=longlat +a=1 +b=1 +vto_meter=1000 accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=longlat +a=1 +b=1 +vto_meter=2000/2 accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=longlat +a=1 +b=1 +vto_meter=1/0 expect failure errno invalid_op_illegal_arg_value operation +proj=longlat +a=1 +b=1 +vto_meter=1000 +geoc accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=longlat +a=1 +b=1 +vunits=km accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=merc +a=1 +b=1 +vto_meter=1000 accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=merc +a=1 +b=1 +vunits=km accept 0 0 1000 expect 0 0 1 roundtrip 1 ------------------------------------------------------------------------------- # Check that proj_create() returns a syntax error when an exception is caught # in the creation of a PJ object. ------------------------------------------------------------------------------- operation this is a bogus CRS meant to trigger a syntax error in proj_create() expect failure errno invalid_op_wrong_syntax ------------------------------------------------------------------------------- # Test proj=set ------------------------------------------------------------------------------- operation +proj=set accept 1 2 3 4 expect 1 2 3 4 roundtrip 1 operation +proj=set +v_1=10 +v_2=20 +v_3=30 +v_4=40 accept 1 2 3 4 expect 10 20 30 40 operation +proj=set +v_1=10 +v_2=20 +v_3=30 +v_4=40 direction inverse accept 1 2 3 4 expect 10 20 30 40 proj-9.6.0/test/gie/DHDN_ETRS89.gie000664 001754 001755 00000051364 14764566077 016376 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- operation proj=latlong datum=potsdam ellps=bessel ------------------------------------------------------------------------------- #DE_DHDN (BeTA, 2007) to ETRS89 using NTv2 grid. epsg:15948 ------------------------------------------------------------------------------- tolerance 1 mm accept 7.482506019176 53.498461143331 # ETRS89_Lat-Lon expect 7.483333333333 53.500000000000 # DE_DHDN_Lat-Lon direction inverse accept 7.483333333333 53.500000000000 # DE_DHDN_Lat-Lon expect 7.482506019176 53.498461143331 # ETRS89_Lat-Lon accept 10.333333333333 48.833333333333 # DE_DHDN_Lat-Lon expect 10.332117283303 48.832327188640 # ETRS89_Lat-Lon accept 8.000000000000 50.083333333333 # DE_DHDN_Lat-Lon expect 7.999097344043 50.082172046476 # ETRS89_Lat-Lon accept 10.016666666667 51.033333333333 # DE_DHDN_Lat-Lon expect 10.015460839103 51.032075951188 # ETRS89_Lat-Lon accept 10.466666666667 54.333333333333 # DE_DHDN_Lat-Lon expect 10.465373788153 54.331696254077 # ETRS89_Lat-Lon accept 10.750000000000 53.583333333333 # DE_DHDN_Lat-Lon expect 10.748659705929 53.581781243436 # ETRS89_Lat-Lon accept 10.016666666667 53.500000000000 # DE_DHDN_Lat-Lon expect 10.015444367463 53.498457503620 # ETRS89_Lat-Lon accept 11.000000000000 53.466666666667 # DE_DHDN_Lat-Lon expect 10.998619309575 53.465127257963 # ETRS89_Lat-Lon accept 13.466666666667 53.766666666667 # DE_DHDN_Lat-Lon expect 13.464877774631 53.765109112396 # ETRS89_Lat-Lon accept 10.983333333333 52.766666666667 # DE_DHDN_Lat-Lon expect 10.981965431979 52.765211787713 # ETRS89_Lat-Lon accept 13.000000000000 51.783333333333 # DE_DHDN_Lat-Lon expect 12.998336654827 51.782006921265 # ETRS89_Lat-Lon accept 10.466666666667 52.500000000000 # DE_DHDN_Lat-Lon expect 10.465380298337 52.498573633365 # ETRS89_Lat-Lon accept 10.550000000000 51.466666666667 # DE_DHDN_Lat-Lon expect 10.548711467380 51.465361979987 # ETRS89_Lat-Lon accept 10.450000000000 50.583333333333 # DE_DHDN_Lat-Lon expect 10.448735275612 50.582129474187 # ETRS89_Lat-Lon accept 10.416666666667 49.666666666667 # DE_DHDN_Lat-Lon expect 10.415423634267 49.665566047661 # ETRS89_Lat-Lon accept 10.550000000000 47.750000000000 # DE_DHDN_Lat-Lon expect 10.548775945187 47.749120260296 # ETRS89_Lat-Lon accept 13.450000000000 50.666666666667 # DE_DHDN_Lat-Lon expect 13.448283429558 50.665476385913 # ETRS89_Lat-Lon accept 13.550000000000 51.333333333333 # DE_DHDN_Lat-Lon expect 13.548264242652 51.332063317958 # ETRS89_Lat-Lon accept 13.566666666667 52.050000000000 # DE_DHDN_Lat-Lon expect 13.564906713066 52.048646469731 # ETRS89_Lat-Lon accept 13.433333333333 53.166666666667 # DE_DHDN_Lat-Lon expect 13.431569610583 53.165185284138 # ETRS89_Lat-Lon accept 13.466666666667 52.483333333333 # DE_DHDN_Lat-Lon expect 13.464913254978 52.481930297429 # ETRS89_Lat-Lon accept 13.133333333333 49.066666666667 # DE_DHDN_Lat-Lon expect 13.131706947050 49.065661709281 # ETRS89_Lat-Lon accept 8.666666666667 53.116666666667 # DE_DHDN_Lat-Lon expect 8.665654272188 53.115169791635 # ETRS89_Lat-Lon accept 12.950000000000 47.650000000000 # DE_DHDN_Lat-Lon expect 12.948437185277 47.649155713893 # ETRS89_Lat-Lon accept 8.500000000000 54.716666666667 # DE_DHDN_Lat-Lon expect 8.499027339833 54.714992333813 # ETRS89_Lat-Lon accept 7.483333333333 51.983333333333 # DE_DHDN_Lat-Lon expect 7.482494584516 51.981965147975 # ETRS89_Lat-Lon accept 7.516666666667 51.016666666667 # DE_DHDN_Lat-Lon expect 7.515823996992 51.015402184493 # ETRS89_Lat-Lon accept 7.466666666667 50.500000000000 # DE_DHDN_Lat-Lon expect 7.465834308888 50.498791390585 # ETRS89_Lat-Lon accept 7.533333333333 49.333333333333 # DE_DHDN_Lat-Lon expect 7.532503616986 49.332250779407 # ETRS89_Lat-Lon accept 7.250000000000 49.333333333333 # DE_DHDN_Lat-Lon expect 7.249209260581 49.332249456364 # ETRS89_Lat-Lon accept 7.533333333333 47.666666666667 # DE_DHDN_Lat-Lon expect 7.532530252396 47.665765608135 # ETRS89_Lat-Lon ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation proj=latlong \ towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 ellps=bessel ------------------------------------------------------------------------------- # DE_DHDN to ETRS89 using deprecated 7 parameter Helmert transform. The results # agree at the 3 m level. ------------------------------------------------------------------------------- require_grid BETA2007.gsb tolerance 3 m accept 7.482506019176 53.498461143331 # ETRS89_Lat-Lon expect 7.483333333333 53.500000000000 # DE_DHDN_Lat-Lon direction inverse accept 7.483333333333 53.500000000000 # DE_DHDN_Lat-Lon expect 7.482506019176 53.498461143331 # ETRS89_Lat-Lon accept 10.333333333333 48.833333333333 # DE_DHDN_Lat-Lon expect 10.332117283303 48.832327188640 # ETRS89_Lat-Lon accept 8.000000000000 50.083333333333 # DE_DHDN_Lat-Lon expect 7.999097344043 50.082172046476 # ETRS89_Lat-Lon accept 10.016666666667 51.033333333333 # DE_DHDN_Lat-Lon expect 10.015460839103 51.032075951188 # ETRS89_Lat-Lon accept 10.466666666667 54.333333333333 # DE_DHDN_Lat-Lon expect 10.465373788153 54.331696254077 # ETRS89_Lat-Lon accept 10.750000000000 53.583333333333 # DE_DHDN_Lat-Lon expect 10.748659705929 53.581781243436 # ETRS89_Lat-Lon accept 10.016666666667 53.500000000000 # DE_DHDN_Lat-Lon expect 10.015444367463 53.498457503620 # ETRS89_Lat-Lon accept 11.000000000000 53.466666666667 # DE_DHDN_Lat-Lon expect 10.998619309575 53.465127257963 # ETRS89_Lat-Lon accept 13.466666666667 53.766666666667 # DE_DHDN_Lat-Lon expect 13.464877774631 53.765109112396 # ETRS89_Lat-Lon accept 10.983333333333 52.766666666667 # DE_DHDN_Lat-Lon expect 10.981965431979 52.765211787713 # ETRS89_Lat-Lon accept 13.000000000000 51.783333333333 # DE_DHDN_Lat-Lon expect 12.998336654827 51.782006921265 # ETRS89_Lat-Lon accept 10.466666666667 52.500000000000 # DE_DHDN_Lat-Lon expect 10.465380298337 52.498573633365 # ETRS89_Lat-Lon accept 10.550000000000 51.466666666667 # DE_DHDN_Lat-Lon expect 10.548711467380 51.465361979987 # ETRS89_Lat-Lon accept 10.450000000000 50.583333333333 # DE_DHDN_Lat-Lon expect 10.448735275612 50.582129474187 # ETRS89_Lat-Lon accept 10.416666666667 49.666666666667 # DE_DHDN_Lat-Lon expect 10.415423634267 49.665566047661 # ETRS89_Lat-Lon accept 10.550000000000 47.750000000000 # DE_DHDN_Lat-Lon expect 10.548775945187 47.749120260296 # ETRS89_Lat-Lon accept 13.450000000000 50.666666666667 # DE_DHDN_Lat-Lon expect 13.448283429558 50.665476385913 # ETRS89_Lat-Lon accept 13.550000000000 51.333333333333 # DE_DHDN_Lat-Lon expect 13.548264242652 51.332063317958 # ETRS89_Lat-Lon accept 13.566666666667 52.050000000000 # DE_DHDN_Lat-Lon expect 13.564906713066 52.048646469731 # ETRS89_Lat-Lon accept 13.433333333333 53.166666666667 # DE_DHDN_Lat-Lon expect 13.431569610583 53.165185284138 # ETRS89_Lat-Lon accept 13.466666666667 52.483333333333 # DE_DHDN_Lat-Lon expect 13.464913254978 52.481930297429 # ETRS89_Lat-Lon accept 13.133333333333 49.066666666667 # DE_DHDN_Lat-Lon expect 13.131706947050 49.065661709281 # ETRS89_Lat-Lon accept 8.666666666667 53.116666666667 # DE_DHDN_Lat-Lon expect 8.665654272188 53.115169791635 # ETRS89_Lat-Lon accept 12.950000000000 47.650000000000 # DE_DHDN_Lat-Lon expect 12.948437185277 47.649155713893 # ETRS89_Lat-Lon accept 8.500000000000 54.716666666667 # DE_DHDN_Lat-Lon expect 8.499027339833 54.714992333813 # ETRS89_Lat-Lon accept 7.483333333333 51.983333333333 # DE_DHDN_Lat-Lon expect 7.482494584516 51.981965147975 # ETRS89_Lat-Lon accept 7.516666666667 51.016666666667 # DE_DHDN_Lat-Lon expect 7.515823996992 51.015402184493 # ETRS89_Lat-Lon accept 7.466666666667 50.500000000000 # DE_DHDN_Lat-Lon expect 7.465834308888 50.498791390585 # ETRS89_Lat-Lon accept 7.533333333333 49.333333333333 # DE_DHDN_Lat-Lon expect 7.532503616986 49.332250779407 # ETRS89_Lat-Lon accept 7.250000000000 49.333333333333 # DE_DHDN_Lat-Lon expect 7.249209260581 49.332249456364 # ETRS89_Lat-Lon accept 7.533333333333 47.666666666667 # DE_DHDN_Lat-Lon expect 7.532530252396 47.665765608135 # ETRS89_Lat-Lon ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- The numerical material in this file is based on the contents of the BKG test data file over at http://crs.bkg.bund.de/crseu/crs/descrtrans/BeTA/BETA2007testdaten.csv The conversion was carried out as follows: set insertkey=gawk 'BEGIN {FS=","}; {print $3","$0} set reformat=gawk 'BEGIN {FS=","}; {print "accept " $6 " " $5 " # " $4 "\nexpect " $9 " " $8 " # " $7}' cat BETA2007testdaten.csv | %insertkey% | sort | %reformat% >DHDN_ETRS89.gie ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Tests for GK system zones to UTM32/33 not implemented yet ------------------------------------------------------------------------------- accept 2598417.333192 5930677.980308 # DE_DHDN_3GK2 expect 399340.601863 5928794.177992 # ETRS89_UTM32 accept 2643120.946052 5551463.861308 # DE_DHDN_3GK2 expect 428391.209209 5548246.766868 # ETRS89_UTM32 accept 2678509.791823 5890320.494547 # DE_DHDN_3GK2 expect 477621.722498 5885134.566909 # ETRS89_UTM32 accept 2661073.960381 6067930.993896 # DE_DHDN_3GK2 expect 467726.896146 6063191.974102 # ETRS89_UTM32 accept 2601895.024514 5761935.671777 # DE_DHDN_3GK2 expect 395783.496871 5760119.715259 # ETRS89_UTM32 accept 2606412.760026 5654454.411797 # DE_DHDN_3GK2 expect 395892.865206 5652585.895428 # ETRS89_UTM32 accept 2604044.332230 5596917.811668 # DE_DHDN_3GK2 expect 391195.030128 5595215.127880 # ETRS89_UTM32 accept 2611430.565041 5467270.623504 # DE_DHDN_3GK2 expect 393381.121595 5465427.351346 # ETRS89_UTM32 accept 2590840.678885 5466891.206854 # DE_DHDN_3GK2 expect 372799.647928 5465865.755414 # ETRS89_UTM32 accept 2615145.447136 5281966.148083 # DE_DHDN_3GK2 expect 389829.267589 5280195.601333 # ETRS89_UTM32 accept 3399371.190396 5930724.531323 # DE_DHDN_3GK3 expect 399340.601862 5928794.177992 # ETRS89_UTM32 accept 3597874.421966 5411397.512092 # DE_DHDN_3GK3 expect 597759.898637 5409672.239612 # ETRS89_UTM32 accept 3428437.612810 5550026.645035 # DE_DHDN_3GK3 expect 428391.209209 5548246.766869 # ETRS89_UTM32 accept 3571307.006323 5655705.338031 # DE_DHDN_3GK3 expect 571204.563344 5653882.476948 # ETRS89_UTM32 accept 3595392.782000 6023387.959898 # DE_DHDN_3GK3 expect 595286.044398 6021417.376973 # ETRS89_UTM32 accept 3615881.001454 5940351.727710 # DE_DHDN_3GK3 expect 615764.364007 5938413.819150 # ETRS89_UTM32 accept 3615881.001454 5940351.727710 # DE_DHDN_3GK3 expect 218617.111391 5945399.220269 # ETRS89_UTM33 accept 3567455.742115 5930134.904864 # DE_DHDN_3GK3 expect 567358.390548 5928201.976543 # ETRS89_UTM32 accept 3632798.076882 5927807.051283 # DE_DHDN_3GK3 expect 632674.379672 5925873.747901 # ETRS89_UTM32 accept 3632798.076882 5927807.051283 # DE_DHDN_3GK3 expect 234423.486615 5931470.592457 # ETRS89_UTM33 accept 3633848.721200 5849896.198513 # DE_DHDN_3GK3 expect 633723.734075 5847994.536970 # ETRS89_UTM32 accept 3633848.721200 5849896.198513 # DE_DHDN_3GK3 expect 228947.171966 5853725.067987 # ETRS89_UTM33 accept 3599586.686397 5819391.659845 # DE_DHDN_3GK3 expect 599474.934168 5817502.626999 # ETRS89_UTM32 accept 3607695.214682 5704557.217497 # DE_DHDN_3GK3 expect 607578.857121 5702714.405562 # ETRS89_UTM32 accept 3607695.214682 5704557.217497 # DE_DHDN_3GK3 expect 190859.292094 5710978.842070 # ETRS89_UTM33 accept 3602680.921862 5606162.921133 # DE_DHDN_3GK3 expect 602565.455313 5604359.618990 # ETRS89_UTM32 accept 3602680.921862 5606162.921133 # DE_DHDN_3GK3 expect 177845.139712 5613251.897383 # ETRS89_UTM33 accept 3602255.364740 5504172.212483 # DE_DHDN_3GK3 expect 602139.527314 5502409.680191 # ETRS89_UTM32 accept 3602255.364740 5504172.212483 # DE_DHDN_3GK3 expect 169220.450101 5511545.700292 # ETRS89_UTM33 accept 3616211.566778 5291255.078896 # DE_DHDN_3GK3 expect 616089.408439 5289578.131826 # ETRS89_UTM32 accept 3616211.566778 5291255.078896 # DE_DHDN_3GK3 expect 166384.067958 5298018.237122 # ETRS89_UTM33 accept 3477684.063162 5887048.676718 # DE_DHDN_3GK3 expect 477621.722499 5885134.566914 # ETRS89_UTM32 accept 3467781.947036 6065176.417740 # DE_DHDN_3GK3 expect 467726.896147 6063191.974105 # ETRS89_UTM32 accept 3395815.326925 5761982.907482 # DE_DHDN_3GK3 expect 395783.496872 5760119.715259 # ETRS89_UTM32 accept 3395925.872234 5654406.808724 # DE_DHDN_3GK3 expect 395892.865206 5652585.895428 # ETRS89_UTM32 accept 3391226.589718 5597013.366086 # DE_DHDN_3GK3 expect 391195.030128 5595215.127881 # ETRS89_UTM32 accept 3393414.080125 5467174.397245 # DE_DHDN_3GK3 expect 393381.121595 5465427.351346 # ETRS89_UTM32 accept 3372824.499428 5467612.907301 # DE_DHDN_3GK3 expect 372799.647928 5465865.755413 # ETRS89_UTM32 accept 3389860.774004 5281869.239226 # DE_DHDN_3GK3 expect 389829.267590 5280195.601333 # ETRS89_UTM32 accept 4377657.794741 5411879.839992 # DE_DHDN_3GK4 expect 597759.898636 5409672.239612 # ETRS89_UTM32 accept 4360897.154310 5657085.679344 # DE_DHDN_3GK4 expect 571204.563343 5653882.476947 # ETRS89_UTM32 accept 4400271.505998 6023480.198072 # DE_DHDN_3GK4 expect 595286.044399 6021417.376972 # ETRS89_UTM32 accept 4417225.999425 5939654.081375 # DE_DHDN_3GK4 expect 615764.364007 5938413.819151 # ETRS89_UTM32 accept 4417225.999425 5939654.081375 # DE_DHDN_3GK4 expect 218617.111391 5945399.220269 # ETRS89_UTM33 accept 4368411.664264 5931484.902370 # DE_DHDN_3GK4 expect 567358.390548 5928201.976543 # ETRS89_UTM32 accept 4433598.021986 5926410.006980 # DE_DHDN_3GK4 expect 632674.379671 5925873.747901 # ETRS89_UTM32 accept 4433598.021986 5926410.006980 # DE_DHDN_3GK4 expect 234423.486614 5931470.592457 # ETRS89_UTM33 accept 4596699.814954 5960328.296681 # DE_DHDN_3GK4 expect 794226.051532 5966642.993890 # ETRS89_UTM32 accept 4596699.814954 5960328.296681 # DE_DHDN_3GK4 expect 398811.452821 5958481.617326 # ETRS89_UTM33 accept 4431385.771953 5848536.122437 # DE_DHDN_3GK4 expect 633723.734074 5847994.536971 # ETRS89_UTM32 accept 4431385.771953 5848536.122437 # DE_DHDN_3GK4 expect 228947.171966 5853725.067987 # ETRS89_UTM33 accept 4568999.833703 5739119.060681 # DE_DHDN_3GK4 expect 775766.817929 5744357.999264 # ETRS89_UTM32 accept 4568999.833703 5739119.060681 # DE_DHDN_3GK4 expect 361924.813552 5738688.111797 # ETRS89_UTM33 accept 4395886.918912 5819485.694352 # DE_DHDN_3GK4 expect 599474.934169 5817502.626999 # ETRS89_UTM32 accept 4399252.521454 5704414.901133 # DE_DHDN_3GK4 expect 607578.857121 5702714.405563 # ETRS89_UTM32 accept 4399252.521454 5704414.901133 # DE_DHDN_3GK4 expect 190859.292094 5710978.842070 # ETRS89_UTM33 accept 4390237.957560 5606306.171667 # DE_DHDN_3GK4 expect 602565.455313 5604359.618990 # ETRS89_UTM32 accept 4390237.957560 5606306.171667 # DE_DHDN_3GK4 expect 177845.139712 5613251.897384 # ETRS89_UTM33 accept 4385715.060070 5504412.338975 # DE_DHDN_3GK4 expect 602139.527314 5502409.680191 # ETRS89_UTM32 accept 4385715.060070 5504412.338975 # DE_DHDN_3GK4 expect 169220.450101 5511545.700292 # ETRS89_UTM33 accept 4391285.796869 5291109.755123 # DE_DHDN_3GK4 expect 616089.408439 5289578.131827 # ETRS89_UTM32 accept 4391285.796869 5291109.755123 # DE_DHDN_3GK4 expect 166384.067958 5298018.237122 # ETRS89_UTM33 accept 4602499.566145 5615431.379860 # DE_DHDN_3GK4 expect 814311.364242 5622071.326313 # ETRS89_UTM32 accept 4602499.566145 5615431.379860 # DE_DHDN_3GK4 expect 390338.211462 5613774.353256 # ETRS89_UTM33 accept 4608008.855658 5689725.987089 # DE_DHDN_3GK4 expect 816793.461724 5696579.298817 # ETRS89_UTM32 accept 4608008.855658 5689725.987089 # DE_DHDN_3GK4 expect 398863.493307 5687753.129020 # ETRS89_UTM33 accept 4607459.254388 5769472.054323 # DE_DHDN_3GK4 expect 812962.846098 5776288.882564 # ETRS89_UTM32 accept 4607459.254388 5769472.054323 # DE_DHDN_3GK4 expect 401589.388273 5767420.751372 # ETRS89_UTM33 accept 4595844.509596 5893520.178529 # DE_DHDN_3GK4 expect 796184.889876 5899821.806119 # ETRS89_UTM32 accept 4595844.509596 5893520.178529 # DE_DHDN_3GK4 expect 395147.893839 5891795.036022 # ETRS89_UTM33 accept 4599624.347102 5817537.418158 # DE_DHDN_3GK4 expect 803137.012417 5824018.671556 # ETRS89_UTM32 accept 4599624.347102 5817537.418158 # DE_DHDN_3GK4 expect 395754.092849 5815749.835902 # ETRS89_UTM33 accept 4582806.457775 5437104.667215 # DE_DHDN_3GK4 expect 801769.133341 5442981.626260 # ETRS89_UTM32 accept 4582806.457775 5437104.667215 # DE_DHDN_3GK4 expect 363531.446507 5436436.282581 # ETRS89_UTM33 accept 4571363.304563 5279411.440581 # DE_DHDN_3GK4 expect 796505.582915 5284862.664428 # ETRS89_UTM32 accept 4571363.304563 5279411.440581 # DE_DHDN_3GK4 expect 345930.907036 5279345.459526 # ETRS89_UTM33 accept 5398905.047545 5960421.130827 # DE_DHDN_3GK5 expect 794226.051532 5966642.993889 # ETRS89_UTM32 accept 5398905.047545 5960421.130827 # DE_DHDN_3GK5 expect 398811.452821 5958481.617326 # ETRS89_UTM33 accept 5362005.247500 5740538.568445 # DE_DHDN_3GK5 expect 775766.817929 5744357.999262 # ETRS89_UTM32 accept 5362005.247500 5740538.568445 # DE_DHDN_3GK5 expect 361924.813551 5738688.111796 # ETRS89_UTM33 accept 5390431.824773 5615574.548074 # DE_DHDN_3GK5 expect 814311.364241 5622071.326313 # ETRS89_UTM32 accept 5390431.824773 5615574.548074 # DE_DHDN_3GK5 expect 390338.211462 5613774.353256 # ETRS89_UTM33 accept 5398959.121385 5689583.521018 # DE_DHDN_3GK5 expect 816793.461724 5696579.298817 # ETRS89_UTM32 accept 5398959.121385 5689583.521018 # DE_DHDN_3GK5 expect 398863.493307 5687753.129020 # ETRS89_UTM33 accept 5401685.729154 5769283.220752 # DE_DHDN_3GK5 expect 812962.846098 5776288.882564 # ETRS89_UTM32 accept 5401685.729154 5769283.220752 # DE_DHDN_3GK5 expect 401589.388272 5767420.751372 # ETRS89_UTM33 accept 5395240.318989 5893707.029636 # DE_DHDN_3GK5 expect 796184.889876 5899821.806119 # ETRS89_UTM32 accept 5395240.318989 5893707.029636 # DE_DHDN_3GK5 expect 395147.893840 5891795.036022 # ETRS89_UTM33 accept 5395847.545864 5817631.467237 # DE_DHDN_3GK5 expect 803137.012417 5824018.671556 # ETRS89_UTM32 accept 5395847.545864 5817631.467237 # DE_DHDN_3GK5 expect 395754.092849 5815749.835902 # ETRS89_UTM33 accept 5363615.032963 5438164.610427 # DE_DHDN_3GK5 expect 801769.133341 5442981.626260 # ETRS89_UTM32 accept 5363615.032963 5438164.610427 # DE_DHDN_3GK5 expect 363531.446506 5436436.282581 # ETRS89_UTM33 accept 5346007.854521 5281010.564511 # DE_DHDN_3GK5 expect 796505.582915 5284862.664427 # ETRS89_UTM32 accept 5346007.854521 5281010.564511 # DE_DHDN_3GK5 expect 345930.907036 5279345.459525 # ETRS89_UTM33 ------------------------------------------------------------------------------- proj-9.6.0/test/gie/GDA.gie000664 001754 001755 00000007151 14764566077 015231 0ustar00e012349e012349000000 000000 ----------------------------------------------------------------------------------- Australian datum transformations ----------------------------------------------------------------------------------- Based on material from: Intergovernmental Committee on Surveying and Mapping (ICSM) Permanent Committee on Geodesy (PCG): Geocentric Datum of Australia 2020 Technical Manual Version 1.0, 25 July 2017 Which is distributed under Creative Commons CC-BY 4.0 These tests will probably be useful as a template for an AU setup file, defining transformations for Australian systems, but I'm reluctant to provide such a file myself - it probably should come from official AU sources. Thomas Knudsen, thokn@sdfe.dk, 2017-11-27 ----------------------------------------------------------------------------------- ----------------------------------------------------------------------------------- # GDA94 to GDA2020 ----------------------------------------------------------------------------------- # Just the Helmert transformation, to verify that we are within 100 um ----------------------------------------------------------------------------------- operation proj=helmert \ convention=coordinate_frame \ x = 0.06155 rx = -0.0394924 \ y = -0.01087 ry = -0.0327221 \ z = -0.04019 rz = -0.0328979 s = -0.009994 ----------------------------------------------------------------------------------- tolerance 75 um accept -4052051.7643 4212836.2017 -2545106.0245 expect -4052052.7379 4212835.9897 -2545104.5898 ------------------------------------------------------------------------------- ----------------------------------------------------------------------------------- # GDA94 to GDA2020 ----------------------------------------------------------------------------------- # All the way from geographic-to-cartesian-and-back-to-geographic ----------------------------------------------------------------------------------- operation proj = pipeline ellps=GRS80; \ step proj = cart; \ step proj = helmert \ convention=coordinate_frame \ x = 0.06155; rx = -0.0394924; \ y = -0.01087; ry = -0.0327221; \ z = -0.04019; rz = -0.0328979; s = -0.009994; \ step proj = cart inv; ----------------------------------------------------------------------------------- tolerance 2 mm accept 133.88551329 -23.67012389 603.3466 0 # Alice Springs GDA94 expect 133.8855216 -23.67011014 603.2489 0 # Alice Springs GDA2020 ------------------------------------------------------------------------------- ----------------------------------------------------------------------------------- # ITRF2014@2018 to GDA2020 - Test point ALIC (Alice Springs) ----------------------------------------------------------------------------------- # Just the Helmert transformation, to verify that we are within 100 um ----------------------------------------------------------------------------------- operation proj = helmert exact convention=coordinate_frame \ x = 0 rx = 0 dx = 0 drx = 0.00150379 \ y = 0 ry = 0 dy = 0 dry = 0.00118346 \ z = 0 rz = 0 dz = 0 drz = 0.00120716 \ s = 0 ds = 0 t_epoch=2020.0 ----------------------------------------------------------------------------------- tolerance 40 um accept -4052052.6588 4212835.9938 -2545104.6946 2018.0 # ITRF2014@2018.0 expect -4052052.7373 4212835.9835 -2545104.5867 # GDA2020 ----------------------------------------------------------------------------------- proj-9.6.0/test/gie/adams_hemi.gie000664 001754 001755 00000203467 14764566077 016735 0ustar00e012349e012349000000 000000 ------------------------------------------------------------ # This gie file was automatically generated using libproject #where the adams_hemi code was adapted from ------------------------------------------------------------ ------------------------------------------------------------ operation +proj=adams_hemi +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.0512914938 -90.1445918836 expect failure errno coord_transfm_invalid_coord accept -169.5842217825 -89.1738195765 expect failure errno coord_transfm_outside_projection_domain accept -159.8126151474 -88.9303357409 expect failure errno coord_transfm_outside_projection_domain accept -149.8486678837 -88.7598088570 expect failure errno coord_transfm_outside_projection_domain accept -139.3978823413 -88.5424937255 expect failure errno coord_transfm_outside_projection_domain accept -129.4584139907 -88.3017941113 expect failure errno coord_transfm_outside_projection_domain accept -119.6382190434 -88.1579367749 expect failure errno coord_transfm_outside_projection_domain accept -109.1571755829 -87.4911657719 expect failure errno coord_transfm_outside_projection_domain accept -99.4449870732 -87.1707570236 expect failure errno coord_transfm_outside_projection_domain accept -89.9433443609 -87.0825895518 expect -2032451.307 -14670658.595 accept -79.1196204797 -86.6146886067 expect -1972952.703 -14316663.749 accept -69.9188804603 -86.0423885378 expect -1919210.763 -13959619.296 accept -59.2140342623 -85.2062438921 expect -1821078.174 -13499207.260 accept -49.3771402997 -84.6064875075 expect -1632786.696 -13151268.681 accept -39.7523563839 -84.2227887345 expect -1375189.719 -12898281.230 accept -29.1378956446 -84.1916000473 expect -1019955.835 -12777203.156 accept -19.8973002908 -83.3255313811 expect -750646.386 -12420097.177 accept -9.0586917767 -82.5740757930 expect -361764.270 -12130784.486 accept 0.6658150243 -81.6306426596 expect 28245.397 -11833545.201 accept 10.3916472934 -81.3826632020 expect 446703.237 -11781755.067 accept 20.1494345130 -81.0829408522 expect 877880.087 -11752832.089 accept 30.9020031853 -80.1029516039 expect 1408756.445 -11595274.577 accept 40.6784961632 -79.5385879087 expect 1890606.237 -11591903.266 accept 50.0047749416 -79.2557693956 expect 2331531.206 -11694280.098 accept 60.6444819104 -78.7437592966 expect 2853286.437 -11817317.500 accept 70.0847779691 -77.7507873749 expect 3388704.151 -11865524.800 accept 80.5231675121 -77.0660588617 expect 3923735.969 -12068158.388 accept 90.0066580543 -76.6161050638 expect failure errno coord_transfm_outside_projection_domain accept 100.5350349572 -76.3746207928 expect failure errno coord_transfm_outside_projection_domain accept 110.7544963160 -76.2761103137 expect failure errno coord_transfm_outside_projection_domain accept 120.0734970456 -75.8866598636 expect failure errno coord_transfm_outside_projection_domain accept 130.5824490023 -75.8761529489 expect failure errno coord_transfm_outside_projection_domain accept 140.8041765005 -75.3058724059 expect failure errno coord_transfm_outside_projection_domain accept 150.3183273801 -74.4580538960 expect failure errno coord_transfm_outside_projection_domain accept 160.0892519416 -73.7178034782 expect failure errno coord_transfm_outside_projection_domain accept 170.3366715442 -72.7342346131 expect failure errno coord_transfm_outside_projection_domain accept 180.6302993811 -72.6551561090 expect failure errno coord_transfm_outside_projection_domain accept -179.1498353863 -79.8617775679 expect failure errno coord_transfm_outside_projection_domain accept -169.6126454375 -78.9973036997 expect failure errno coord_transfm_outside_projection_domain accept -159.5376706591 -78.3099466224 expect failure errno coord_transfm_outside_projection_domain accept -149.7206409942 -77.9762123582 expect failure errno coord_transfm_outside_projection_domain accept -139.5308439004 -77.1568269429 expect failure errno coord_transfm_outside_projection_domain accept -129.5655598613 -76.3111768828 expect failure errno coord_transfm_outside_projection_domain accept -119.7726048543 -75.3290637518 expect failure errno coord_transfm_outside_projection_domain accept -109.6962230001 -74.3833782562 expect failure errno coord_transfm_outside_projection_domain accept -99.6722260401 -73.9288741111 expect failure errno coord_transfm_outside_projection_domain accept -89.0043085338 -73.3335214021 expect -4844180.674 -11775270.656 accept -79.1663300454 -72.4399400853 expect -4517737.562 -11230872.680 accept -69.4926078623 -71.8461023317 expect -4102914.567 -10768468.225 accept -59.2657055315 -71.2092093538 expect -3613458.773 -10316718.559 accept -49.8213060755 -70.4770080858 expect -3129758.562 -9913931.998 accept -39.4219744153 -70.0556232602 expect -2525390.621 -9588638.786 accept -29.2292837281 -69.7843638102 expect -1896816.371 -9350212.714 accept -19.3122799108 -68.8398158747 expect -1286419.314 -9045554.926 accept -9.6128015323 -68.4874678083 expect -646826.577 -8904263.293 accept 0.2782436804 -67.7652217315 expect 19032.119 -8747432.621 accept 10.0150948909 -66.8884770151 expect 697224.743 -8618447.314 accept 20.3145279457 -66.3089232102 expect 1427884.878 -8604766.655 accept 30.1158431277 -65.8422273022 expect 2129234.668 -8665589.397 accept 40.3813237731 -65.2868591410 expect 2871280.128 -8782328.275 accept 50.3256474182 -64.5263189423 expect 3606565.288 -8925940.412 accept 60.0397335630 -64.2204936386 expect 4289216.964 -9202136.643 accept 70.8347119838 -64.2006837236 expect 4994689.905 -9631301.887 accept 80.1994904845 -64.1621304539 expect 5574892.739 -10059995.184 accept 90.4107676644 -63.6583206132 expect failure errno coord_transfm_outside_projection_domain accept 100.7435829266 -62.9292855324 expect failure errno coord_transfm_outside_projection_domain accept 110.6722999581 -62.8950940661 expect failure errno coord_transfm_outside_projection_domain accept 120.8104324458 -62.4946649855 expect failure errno coord_transfm_outside_projection_domain accept 130.0315355771 -61.8657176607 expect failure errno coord_transfm_outside_projection_domain accept 140.7842333846 -61.7278379595 expect failure errno coord_transfm_outside_projection_domain accept 150.5202047210 -61.0467237730 expect failure errno coord_transfm_outside_projection_domain accept 160.7596965102 -60.2885251988 expect failure errno coord_transfm_outside_projection_domain accept 170.1658638654 -60.0997063537 expect failure errno coord_transfm_outside_projection_domain accept 180.2502374139 -59.7318603713 expect failure errno coord_transfm_outside_projection_domain accept -179.9256771826 -69.2161805164 expect failure errno coord_transfm_outside_projection_domain accept -169.2003519382 -68.5724302106 expect failure errno coord_transfm_outside_projection_domain accept -159.5787597594 -67.9857475830 expect failure errno coord_transfm_outside_projection_domain accept -149.8429607974 -67.2794853256 expect failure errno coord_transfm_outside_projection_domain accept -139.5406690392 -67.1131557084 expect failure errno coord_transfm_outside_projection_domain accept -129.7848559822 -66.2388824806 expect failure errno coord_transfm_outside_projection_domain accept -119.1305416029 -65.8739932573 expect failure errno coord_transfm_outside_projection_domain accept -109.5840686978 -65.1388713461 expect failure errno coord_transfm_outside_projection_domain accept -99.0639263051 -65.0873010186 expect failure errno coord_transfm_outside_projection_domain accept -89.1823111373 -64.6956687932 expect -6023804.986 -10592902.952 accept -79.1164233302 -64.2716519504 expect -5497921.434 -10022147.140 accept -69.2574458208 -63.9075720894 expect -4922828.801 -9520562.405 accept -59.8783718706 -63.9038815291 expect -4304901.029 -9147659.032 accept -49.7289524443 -63.8500661196 expect -3612059.924 -8800325.048 accept -39.1403094008 -63.8422040109 expect -2862966.181 -8516003.259 accept -29.1777068994 -63.1667304050 expect -2169833.127 -8203288.513 accept -19.2977455865 -63.0553679417 expect -1441725.328 -8043555.407 accept -9.9255569976 -62.9647601040 expect -743731.598 -7948394.774 accept 0.1796078505 -62.5085487744 expect 13569.082 -7844710.542 accept 10.1904676971 -61.9758669545 expect 776353.440 -7788440.095 accept 20.6226352769 -61.7448218808 expect 1574820.972 -7846337.019 accept 30.2475627489 -61.1393337334 expect 2327457.261 -7896980.364 accept 40.5688849715 -60.3721116419 expect 3149169.433 -8001812.738 accept 50.3372781690 -60.3371608659 expect 3889524.441 -8275997.858 accept 60.0304323790 -60.0341705989 expect 4627914.366 -8575277.072 accept 70.8357778632 -59.4751248220 expect 5450054.504 -8962420.257 accept 80.4614530617 -58.9769415123 expect 6157836.688 -9386832.221 accept 90.1145386062 -58.4070158299 expect failure errno coord_transfm_outside_projection_domain accept 100.7207579758 -58.0174867644 expect failure errno coord_transfm_outside_projection_domain accept 110.5210303471 -57.2190055708 expect failure errno coord_transfm_outside_projection_domain accept 120.6967482820 -56.4709263993 expect failure errno coord_transfm_outside_projection_domain accept 130.0815389060 -55.4932687347 expect failure errno coord_transfm_outside_projection_domain accept 140.1058922487 -54.7233777967 expect failure errno coord_transfm_outside_projection_domain accept 150.7972249220 -54.0392541094 expect failure errno coord_transfm_outside_projection_domain accept 160.4001197642 -53.4894321537 expect failure errno coord_transfm_outside_projection_domain accept 170.7522870277 -52.8073510172 expect failure errno coord_transfm_outside_projection_domain accept 180.9552557119 -51.9628267761 expect failure errno coord_transfm_outside_projection_domain accept -179.8457680307 -59.7627027888 expect failure errno coord_transfm_outside_projection_domain accept -169.9866964666 -59.3961476674 expect failure errno coord_transfm_outside_projection_domain accept -159.7470584020 -58.4027994525 expect failure errno coord_transfm_outside_projection_domain accept -149.6934351691 -57.7899236032 expect failure errno coord_transfm_outside_projection_domain accept -139.8251656458 -57.1675573730 expect failure errno coord_transfm_outside_projection_domain accept -129.7548669173 -56.7627741202 expect failure errno coord_transfm_outside_projection_domain accept -119.8194582121 -56.1851853006 expect failure errno coord_transfm_outside_projection_domain accept -109.9910713909 -55.2204505294 expect failure errno coord_transfm_outside_projection_domain accept -99.5100607596 -54.5311736441 expect failure errno coord_transfm_outside_projection_domain accept -89.8644038896 -53.9245170355 expect -7342928.224 -9343992.584 accept -79.9635057664 -53.6948723497 expect -6667476.192 -8689307.261 accept -69.9915897328 -53.5080881233 expect -5920106.317 -8113696.635 accept -59.9878237924 -53.1347486229 expect -5137251.168 -7595504.352 accept -49.6910260363 -52.6201247567 expect -4300887.397 -7131351.272 accept -39.7880824067 -52.5359539692 expect -3452174.116 -6823690.285 accept -29.2778055547 -51.6296886545 expect -2568030.082 -6461876.918 accept -19.4306837146 -51.1069811525 expect -1713350.228 -6239079.500 accept -9.3856113762 -50.6351985324 expect -831338.016 -6085131.749 accept 0.8939490530 -50.4873507691 expect 79288.786 -6038354.630 accept 10.1840000169 -50.4621600892 expect 903758.620 -6065670.749 accept 20.0863846360 -50.3906053109 expect 1785191.886 -6146622.254 accept 30.3281308173 -49.6297449138 expect 2720752.037 -6201183.856 accept 40.5225439155 -49.1883193839 expect 3657308.119 -6373152.042 accept 50.0774176880 -48.8514336226 expect 4539427.520 -6619769.484 accept 60.4611757563 -48.8337125195 expect 5475204.679 -7027995.280 accept 70.0359400468 -48.6327927027 expect 6332662.310 -7473372.039 accept 80.9191136756 -48.5703968561 expect 7251379.374 -8116860.291 accept 90.3784337844 -48.2622816670 expect failure errno coord_transfm_outside_projection_domain accept 100.0644440138 -47.5531771971 expect failure errno coord_transfm_outside_projection_domain accept 110.4395693884 -47.1020565364 expect failure errno coord_transfm_outside_projection_domain accept 120.8787420308 -46.5648775386 expect failure errno coord_transfm_outside_projection_domain accept 130.8192016133 -45.7254461234 expect failure errno coord_transfm_outside_projection_domain accept 140.6056889736 -45.1737240013 expect failure errno coord_transfm_outside_projection_domain accept 150.1175388463 -44.6690953878 expect failure errno coord_transfm_outside_projection_domain accept 160.6179845473 -44.6641530409 expect failure errno coord_transfm_outside_projection_domain accept 170.3909883495 -43.8609446159 expect failure errno coord_transfm_outside_projection_domain accept 180.3536945715 -43.4346766235 expect failure errno coord_transfm_outside_projection_domain accept -179.6728016921 -49.7927741248 expect failure errno coord_transfm_outside_projection_domain accept -169.8899091213 -49.5948095572 expect failure errno coord_transfm_outside_projection_domain accept -159.7193834386 -48.9692766397 expect failure errno coord_transfm_outside_projection_domain accept -149.3161804706 -48.3900540417 expect failure errno coord_transfm_outside_projection_domain accept -139.3059860307 -47.5443099911 expect failure errno coord_transfm_outside_projection_domain accept -129.2607005772 -47.3426945690 expect failure errno coord_transfm_outside_projection_domain accept -119.0464442962 -46.3637609990 expect failure errno coord_transfm_outside_projection_domain accept -109.3006137776 -46.2470536112 expect failure errno coord_transfm_outside_projection_domain accept -99.1086587357 -45.3788313212 expect failure errno coord_transfm_outside_projection_domain accept -89.6418391342 -44.9558227898 expect -8329227.919 -8319528.025 accept -79.5922401709 -44.0666175390 expect -7575608.504 -7475396.243 accept -69.7678517742 -43.8414369161 expect -6693103.012 -6832178.393 accept -59.9773741961 -43.6178971244 expect -5769594.561 -6303851.937 accept -49.0224540140 -42.7382586843 expect -4742402.857 -5752204.163 accept -39.0799820528 -42.4267915714 expect -3774284.368 -5417401.690 accept -29.7065845030 -42.3050919341 expect -2859905.278 -5199352.562 accept -19.4093864480 -41.7132409855 expect -1870549.029 -4971910.558 accept -9.5019946065 -41.0671902488 expect -918157.515 -4807120.737 accept 0.7256633705 -40.8863960679 expect 70159.362 -4759033.602 accept 10.1160300689 -40.8493938089 expect 979223.286 -4782540.672 accept 20.7134315844 -40.8364519203 expect 2011034.581 -4873376.186 accept 30.5509837736 -40.3124354704 expect 2991370.345 -4953502.965 accept 40.6811168119 -39.4330828245 expect 4036041.984 -5061633.604 accept 50.5408477188 -39.0992426534 expect 5062748.637 -5317244.256 accept 60.8602526703 -38.6119802236 expect 6165904.838 -5673423.296 accept 70.8028881731 -37.7864477876 expect 7266962.017 -6097356.033 accept 80.6995146991 -37.6252342058 expect 8295075.544 -6755019.382 accept 90.0888221682 -36.9847575823 expect failure errno coord_transfm_outside_projection_domain accept 100.7780137471 -36.6711774624 expect failure errno coord_transfm_outside_projection_domain accept 110.5677826175 -36.0072187827 expect failure errno coord_transfm_outside_projection_domain accept 120.4571639125 -35.5987514678 expect failure errno coord_transfm_outside_projection_domain accept 130.4994689409 -35.0078880309 expect failure errno coord_transfm_outside_projection_domain accept 140.4973246226 -34.7603698284 expect failure errno coord_transfm_outside_projection_domain accept 150.2185553402 -33.7827115000 expect failure errno coord_transfm_outside_projection_domain accept 160.0049830768 -33.6576606654 expect failure errno coord_transfm_outside_projection_domain accept 170.1113538332 -32.7218296414 expect failure errno coord_transfm_outside_projection_domain accept 180.0413323536 -32.6458132046 expect failure errno coord_transfm_outside_projection_domain accept -179.7614880705 -39.3083971924 expect failure errno coord_transfm_outside_projection_domain accept -169.2195161001 -38.8120777840 expect failure errno coord_transfm_outside_projection_domain accept -159.8162149104 -38.0579151517 expect failure errno coord_transfm_outside_projection_domain accept -149.1975646236 -38.0219346503 expect failure errno coord_transfm_outside_projection_domain accept -139.4875552064 -37.4333640809 expect failure errno coord_transfm_outside_projection_domain accept -129.3174577073 -37.3101077795 expect failure errno coord_transfm_outside_projection_domain accept -119.3659376731 -37.0018039210 expect failure errno coord_transfm_outside_projection_domain accept -109.4951561921 -36.7266176768 expect failure errno coord_transfm_outside_projection_domain accept -99.0146344791 -36.1766584469 expect failure errno coord_transfm_outside_projection_domain accept -89.4535006021 -35.4158065520 expect -9377248.574 -7225961.706 accept -79.0387416065 -34.4648659946 expect -8422693.344 -6224371.305 accept -69.2215350809 -34.3740808096 expect -7350614.857 -5544861.367 accept -59.2745531980 -33.8274972528 expect -6265513.674 -4955207.335 accept -49.7169986740 -32.9249999485 expect -5234261.572 -4467029.348 accept -39.3938152675 -32.5464412753 expect -4109883.252 -4132559.187 accept -29.3299550856 -32.1522584471 expect -3038342.418 -3890348.809 accept -19.7672186473 -31.5562360216 expect -2040849.804 -3696547.750 accept -9.6757428807 -31.5381986939 expect -994652.380 -3622557.798 accept 0.9267949652 -30.8907292201 expect 95467.453 -3522841.136 accept 10.2711979528 -30.1415999097 expect 1063857.348 -3456961.986 accept 20.3037759043 -30.0366136211 expect 2114356.936 -3516056.014 accept 30.7604872284 -29.7526562583 expect 3235403.228 -3612623.593 accept 40.6115143350 -28.8411062530 expect 4342408.974 -3683312.580 accept 50.4426160267 -28.7604876417 expect 5473507.294 -3935831.832 accept 60.0667408454 -28.0150409892 expect 6658598.640 -4193291.049 accept 70.8986641601 -27.4846012044 expect 8045113.983 -4691740.858 accept 80.7902728211 -26.9566814760 expect 9340735.895 -5359874.908 accept 90.7774660604 -26.3781900961 expect failure errno coord_transfm_outside_projection_domain accept 100.9677349413 -25.6947295847 expect failure errno coord_transfm_outside_projection_domain accept 110.4045415377 -24.8858012124 expect failure errno coord_transfm_outside_projection_domain accept 120.9106581244 -24.6760450197 expect failure errno coord_transfm_outside_projection_domain accept 130.1070741983 -24.3713625355 expect failure errno coord_transfm_outside_projection_domain accept 140.5983717849 -23.4696540641 expect failure errno coord_transfm_outside_projection_domain accept 150.9695044815 -23.2859623288 expect failure errno coord_transfm_outside_projection_domain accept 160.2904693231 -22.4177486612 expect failure errno coord_transfm_outside_projection_domain accept 170.9786886104 -22.3889418243 expect failure errno coord_transfm_outside_projection_domain accept 180.4135817841 -21.4141834167 expect failure errno coord_transfm_outside_projection_domain accept -179.1529257481 -29.4728615966 expect failure errno coord_transfm_outside_projection_domain accept -169.2570543721 -28.7440325834 expect failure errno coord_transfm_outside_projection_domain accept -159.4124846191 -27.8743740104 expect failure errno coord_transfm_outside_projection_domain accept -149.9984258738 -27.2290510016 expect failure errno coord_transfm_outside_projection_domain accept -139.4767743694 -27.0546870326 expect failure errno coord_transfm_outside_projection_domain accept -129.5641039139 -26.6837015309 expect failure errno coord_transfm_outside_projection_domain accept -119.3705764793 -25.8611684419 expect failure errno coord_transfm_outside_projection_domain accept -109.5378587803 -25.4624789903 expect failure errno coord_transfm_outside_projection_domain accept -99.3734787689 -24.9304945684 expect failure errno coord_transfm_outside_projection_domain accept -89.3465946697 -24.1700440971 expect -10704395.428 -5847361.236 accept -79.7404033820 -23.7748908886 expect -9513574.581 -4810463.511 accept -69.8876497415 -23.5742092130 expect -8180418.594 -4058430.736 accept -59.3891167783 -23.0862162961 expect -6800548.565 -3472782.360 accept -49.0962705404 -23.0040787983 expect -5498406.531 -3127392.477 accept -39.5604939819 -22.8514526819 expect -4357597.539 -2896084.387 accept -29.6190870010 -22.2716044223 expect -3224919.475 -2674683.087 accept -19.2436583074 -22.1221079553 expect -2074925.707 -2558243.836 accept -9.3541697716 -21.2322237727 expect -1006009.651 -2403546.370 accept 0.3565245677 -20.3671378180 expect 38384.574 -2289133.435 accept 10.4893794068 -19.6098192847 expect 1134672.480 -2219784.886 accept 20.1245536415 -19.4921243712 expect 2191535.285 -2254510.891 accept 30.7062162966 -19.3927174348 expect 3384477.986 -2336722.926 accept 40.8666533485 -18.6123732185 expect 4592279.592 -2378596.017 accept 50.0951841039 -17.9250502345 expect 5759194.930 -2468249.825 accept 60.3777794968 -17.5681367463 expect 7155127.802 -2710926.594 accept 70.7020153713 -16.8114869486 expect 8722490.928 -3052901.356 accept 80.8671865869 -16.2424776439 expect 10422654.067 -3712280.432 accept 90.2461291404 -15.5645924718 expect failure errno coord_transfm_outside_projection_domain accept 100.9711143384 -14.9057684714 expect failure errno coord_transfm_outside_projection_domain accept 110.5061775944 -13.9999376124 expect failure errno coord_transfm_outside_projection_domain accept 120.6646869394 -13.8762395278 expect failure errno coord_transfm_outside_projection_domain accept 130.4786384854 -13.6641917166 expect failure errno coord_transfm_outside_projection_domain accept 140.4992250881 -12.7990197875 expect failure errno coord_transfm_outside_projection_domain accept 150.0366235813 -12.4696803942 expect failure errno coord_transfm_outside_projection_domain accept 160.5278707110 -12.2720940753 expect failure errno coord_transfm_outside_projection_domain accept 170.3484529579 -12.2138862792 expect failure errno coord_transfm_outside_projection_domain accept 180.2280212650 -11.3213090122 expect failure errno coord_transfm_outside_projection_domain accept -179.9887698836 -19.8434403334 expect failure errno coord_transfm_outside_projection_domain accept -169.6164294546 -19.0221825561 expect failure errno coord_transfm_outside_projection_domain accept -159.5308654294 -18.1879041212 expect failure errno coord_transfm_outside_projection_domain accept -149.8050966059 -17.4019446265 expect failure errno coord_transfm_outside_projection_domain accept -139.1612469827 -16.6625595025 expect failure errno coord_transfm_outside_projection_domain accept -129.4619391187 -16.4594418864 expect failure errno coord_transfm_outside_projection_domain accept -119.8383311004 -16.1675065524 expect failure errno coord_transfm_outside_projection_domain accept -109.3335459376 -15.6868347454 expect failure errno coord_transfm_outside_projection_domain accept -99.7976668059 -15.6854972046 expect failure errno coord_transfm_outside_projection_domain accept -89.7267294244 -14.8632370454 expect -12053401.390 -4568307.176 accept -79.1896256706 -14.3035788003 expect -10318651.920 -3211294.118 accept -69.8238721868 -13.6606252292 expect -8752793.203 -2483025.217 accept -59.9341884732 -13.0163995934 expect -7239853.279 -2016848.066 accept -49.2718060884 -12.0872143872 expect -5769460.920 -1657984.518 accept -39.0612457278 -11.2146109871 expect -4471191.256 -1415302.828 accept -29.7861799219 -10.9508322090 expect -3354764.734 -1309138.609 accept -19.4145569922 -10.5133139512 expect -2160417.521 -1206521.486 accept -9.5198292959 -9.7964336368 expect -1053132.786 -1099465.773 accept 0.8412200908 -8.9185740153 expect 92973.787 -993763.563 accept 10.4291884083 -8.3013059591 expect 1156683.321 -932334.794 accept 20.1434736553 -7.4540137611 expect 2253230.418 -856389.581 accept 30.9337103769 -7.4330940402 expect 3510477.410 -893006.725 accept 40.1244867612 -6.5706097227 expect 4641586.907 -835473.434 accept 50.1188628580 -6.0246021551 expect 5960644.364 -835727.421 accept 60.8442179646 -5.0882786722 expect 7543977.493 -808597.717 accept 70.9106152137 -5.0040354490 expect 9276405.717 -966062.038 accept 80.6138637845 -4.9732504580 expect 11379290.973 -1327935.989 accept 90.6032354861 -4.1370495786 expect failure errno coord_transfm_outside_projection_domain accept 100.1644532030 -3.7428216159 expect failure errno coord_transfm_outside_projection_domain accept 110.6488410247 -3.6483998900 expect failure errno coord_transfm_outside_projection_domain accept 120.4200133401 -3.5679026480 expect failure errno coord_transfm_outside_projection_domain accept 130.4611248753 -2.8417810196 expect failure errno coord_transfm_outside_projection_domain accept 140.5117693002 -2.1994039429 expect failure errno coord_transfm_outside_projection_domain accept 150.8812291858 -1.4289441365 expect failure errno coord_transfm_outside_projection_domain accept 160.7607399916 -1.4071810906 expect failure errno coord_transfm_outside_projection_domain accept 170.8773135555 -1.0552787291 expect failure errno coord_transfm_outside_projection_domain accept 180.0261501820 -0.4477561568 expect failure errno coord_transfm_outside_projection_domain accept -179.6651296552 -9.8752237332 expect failure errno coord_transfm_outside_projection_domain accept -169.8040567331 -9.5090347854 expect failure errno coord_transfm_outside_projection_domain accept -159.2369236977 -8.7812050100 expect failure errno coord_transfm_outside_projection_domain accept -149.4668694945 -8.7411685014 expect failure errno coord_transfm_outside_projection_domain accept -139.4921425087 -8.4838585832 expect failure errno coord_transfm_outside_projection_domain accept -129.0489643890 -8.3165131291 expect failure errno coord_transfm_outside_projection_domain accept -119.2267713387 -8.2419396541 expect failure errno coord_transfm_outside_projection_domain accept -109.8259504273 -7.2718622518 expect failure errno coord_transfm_outside_projection_domain accept -99.9614377002 -7.1037710855 expect failure errno coord_transfm_outside_projection_domain accept -89.8090238071 -6.4232987368 expect -13640751.484 -2974873.944 accept -79.3641569088 -6.0589975081 expect -11010026.860 -1514839.115 accept -69.4104381605 -5.3415079971 expect -8989236.834 -994787.772 accept -59.1035311505 -4.7601449911 expect -7276854.155 -737312.363 accept -49.7514136971 -4.1714583763 expect -5923537.462 -576783.461 accept -39.2161406618 -3.9369832151 expect -4539636.330 -497351.785 accept -29.7503799768 -2.9883217265 expect -3383505.746 -356659.413 accept -19.3042659436 -2.0693367961 expect -2166506.455 -236875.349 accept -9.8550183317 -1.1339666688 expect -1098434.101 -127035.957 accept 0.3698643768 -0.7850645975 expect 41125.238 -87297.441 accept 10.5309879356 -0.2442969095 expect 1174302.709 -27396.310 accept 20.3483686169 0.5355680008 expect 2286903.911 61502.678 accept 30.9157771281 1.5084105801 expect 3524936.009 181088.864 accept 40.8345369145 1.9690445225 expect 4750388.872 251710.802 accept 50.0083884196 2.0400972654 expect 5968514.060 282935.766 accept 60.5564326069 2.5146830998 expect 7522513.981 398583.466 accept 70.0242529688 2.6387476779 expect 9150344.687 501095.492 accept 80.6476764259 3.6310845229 expect 11462634.636 984489.812 accept 90.5849650699 4.1063917523 expect failure errno coord_transfm_outside_projection_domain accept 100.6238525596 4.1230600723 expect failure errno coord_transfm_outside_projection_domain accept 110.6594697851 5.0495381196 expect failure errno coord_transfm_outside_projection_domain accept 120.0930076215 5.2661796574 expect failure errno coord_transfm_outside_projection_domain accept 130.5000547754 5.3939702157 expect failure errno coord_transfm_outside_projection_domain accept 140.4751452989 5.8876297478 expect failure errno coord_transfm_outside_projection_domain accept 150.7452375246 6.3021488806 expect failure errno coord_transfm_outside_projection_domain accept 160.1359677924 6.9173640629 expect failure errno coord_transfm_outside_projection_domain accept 170.0302177328 7.6378853558 expect failure errno coord_transfm_outside_projection_domain accept 180.8170157951 8.3472735471 expect failure errno coord_transfm_outside_projection_domain accept -179.1943150364 0.7596010223 expect failure errno coord_transfm_outside_projection_domain accept -169.6391212860 1.0795717122 expect failure errno coord_transfm_outside_projection_domain accept -159.2152700578 1.5596096157 expect failure errno coord_transfm_outside_projection_domain accept -149.3566080854 2.3935395760 expect failure errno coord_transfm_outside_projection_domain accept -139.6411690265 2.8792042895 expect failure errno coord_transfm_outside_projection_domain accept -129.0884027419 3.3736512451 expect failure errno coord_transfm_outside_projection_domain accept -119.6412398776 3.5609941446 expect failure errno coord_transfm_outside_projection_domain accept -109.8410023851 4.3613065976 expect failure errno coord_transfm_outside_projection_domain accept -99.5554211656 5.1657533479 expect failure errno coord_transfm_outside_projection_domain accept -89.3773565828 5.9157121060 expect -13652078.995 2749284.275 accept -79.5182008966 5.9890761386 expect -11050370.051 1507839.328 accept -69.5064826337 6.4698255786 expect -8978882.758 1203806.785 accept -59.5169821631 7.3693412472 expect -7304721.114 1145373.248 accept -49.9241519045 7.8049591034 expect -5916373.828 1079808.719 accept -39.3530693426 7.8141712724 expect -4536367.181 988115.206 accept -29.0573163195 8.4892787230 expect -3282841.554 1010642.286 accept -19.3808304987 8.6780787506 expect -2162785.190 995072.997 accept -9.7889836306 9.1980318083 expect -1084005.841 1032425.841 accept 0.7401919089 9.6999375489 expect 81716.177 1081216.951 accept 10.2922798343 10.2080075121 expect 1138278.757 1147216.412 accept 20.8409423708 11.0731980134 expect 2320143.899 1276786.428 accept 30.8315703906 11.4319423563 expect 3474811.307 1373967.408 accept 40.8302365060 12.2114488494 expect 4680441.778 1560453.893 accept 50.8938950488 12.4827231183 expect 5980086.590 1739463.351 accept 60.1452074812 12.8049940379 expect 7276948.599 1990687.541 accept 70.4026750861 13.0768132535 expect 8877755.135 2411628.800 accept 80.2140199400 13.5624272700 expect 10571534.837 3165721.762 accept 90.4576635954 13.9718076506 expect failure errno coord_transfm_outside_projection_domain accept 100.6449925924 14.8800104945 expect failure errno coord_transfm_outside_projection_domain accept 110.2075367326 15.0521133300 expect failure errno coord_transfm_outside_projection_domain accept 120.4913041985 15.0889224537 expect failure errno coord_transfm_outside_projection_domain accept 130.1088876084 15.6744717063 expect failure errno coord_transfm_outside_projection_domain accept 140.6091054692 15.9789322360 expect failure errno coord_transfm_outside_projection_domain accept 150.8827038395 16.1118935785 expect failure errno coord_transfm_outside_projection_domain accept 160.8584892232 16.9655055987 expect failure errno coord_transfm_outside_projection_domain accept 170.7081605352 17.1424915281 expect failure errno coord_transfm_outside_projection_domain accept 180.4875952646 17.7286920734 expect failure errno coord_transfm_outside_projection_domain accept -179.2192819040 10.8569245931 expect failure errno coord_transfm_outside_projection_domain accept -169.0657035958 11.2213297367 expect failure errno coord_transfm_outside_projection_domain accept -159.1659774291 11.5431930234 expect failure errno coord_transfm_outside_projection_domain accept -149.9545173238 12.5029285949 expect failure errno coord_transfm_outside_projection_domain accept -139.3117413904 12.6753804804 expect failure errno coord_transfm_outside_projection_domain accept -129.3194639426 13.3306225335 expect failure errno coord_transfm_outside_projection_domain accept -119.8562785026 13.8682936931 expect failure errno coord_transfm_outside_projection_domain accept -109.1061461002 14.0130001331 expect failure errno coord_transfm_outside_projection_domain accept -99.6079217864 14.7921669533 expect failure errno coord_transfm_outside_projection_domain accept -89.3223757109 14.9467935082 expect -11977848.908 4521084.682 accept -79.5614292778 15.5269071903 expect -10271311.258 3464674.481 accept -69.5919903841 16.3857419518 expect -8573212.789 2923178.600 accept -59.6477980679 16.9839343080 expect -7073184.422 2599846.459 accept -49.1834673639 17.2588986357 expect -5657105.754 2357772.162 accept -39.8262428613 17.9830247197 expect -4476942.024 2281920.882 accept -29.2381466616 18.7499060636 expect -3223466.080 2243030.787 accept -19.1786678435 19.0226677902 expect -2090004.567 2193284.527 accept -9.6334690404 19.4761386210 expect -1042142.311 2201616.494 accept 0.6321060114 20.3870396192 expect 68050.548 2291463.687 accept 10.9421661895 20.4924024395 expect 1180518.031 2323367.738 accept 20.4864473342 21.0164763452 expect 2220079.189 2436668.067 accept 30.1291797254 21.2284428591 expect 3296035.229 2553633.126 accept 40.6200421317 21.5203653800 expect 4508950.471 2745825.410 accept 50.6582942940 21.9446471796 expect 5723200.728 3026932.927 accept 60.9730121398 22.4243870208 expect 7038314.007 3442040.060 accept 70.2091499688 22.5967062068 expect 8288776.818 3931269.871 accept 80.7948402736 23.3693033859 expect 9696270.644 4844753.993 accept 90.9423588456 23.9305098127 expect failure errno coord_transfm_outside_projection_domain accept 100.5427479545 24.6568371578 expect failure errno coord_transfm_outside_projection_domain accept 110.6483359564 25.2988879331 expect failure errno coord_transfm_outside_projection_domain accept 120.6254581560 25.7897168715 expect failure errno coord_transfm_outside_projection_domain accept 130.6198305384 26.5579713234 expect failure errno coord_transfm_outside_projection_domain accept 140.5223099495 27.4665102983 expect failure errno coord_transfm_outside_projection_domain accept 150.1770507578 27.9150551786 expect failure errno coord_transfm_outside_projection_domain accept 160.8757513817 28.5236724280 expect failure errno coord_transfm_outside_projection_domain accept 170.8877826460 29.0924417375 expect failure errno coord_transfm_outside_projection_domain accept 180.6425321330 29.5764205068 expect failure errno coord_transfm_outside_projection_domain accept -179.9444701529 20.8756448666 expect failure errno coord_transfm_outside_projection_domain accept -169.6232517758 21.6942653703 expect failure errno coord_transfm_outside_projection_domain accept -159.5830169036 22.4130383475 expect failure errno coord_transfm_outside_projection_domain accept -149.4619550763 22.6339632787 expect failure errno coord_transfm_outside_projection_domain accept -139.7058201004 23.2553831478 expect failure errno coord_transfm_outside_projection_domain accept -129.7766004320 23.8189681109 expect failure errno coord_transfm_outside_projection_domain accept -119.3228272091 24.7032636217 expect failure errno coord_transfm_outside_projection_domain accept -109.5551540716 24.7745254301 expect failure errno coord_transfm_outside_projection_domain accept -99.9135718461 25.5385802763 expect failure errno coord_transfm_outside_projection_domain accept -89.1841069049 26.2083957447 expect -10431143.612 6091127.422 accept -79.7910279462 26.6431680702 expect -9245823.651 5229352.217 accept -69.8818215995 27.1405016091 expect -7939848.940 4579107.633 accept -59.7043872074 27.3432782139 expect -6646772.640 4084211.760 accept -49.0682511760 28.2506774891 expect -5330443.447 3825676.830 accept -39.4506559191 29.1409725672 expect -4204573.962 3696283.632 accept -29.9015556332 29.7574405692 expect -3142385.818 3600000.101 accept -19.0693346875 30.4852506297 expect -1979564.068 3559098.611 accept -9.6233626432 30.8903459176 expect -992683.054 3544093.220 accept 0.8232394368 31.3744079922 expect 84584.215 3580932.776 accept 10.4236001839 31.4267077934 expect 1072418.207 3612634.442 accept 20.9980760459 31.8605558626 expect 2165806.548 3746351.172 accept 30.8255462270 32.3520551790 expect 3193447.531 3939445.335 accept 40.8324168382 32.9127578763 expect 4256012.184 4213848.131 accept 50.0837143989 33.6950660037 expect 5244572.185 4581526.452 accept 60.4197804189 34.0559290352 expect 6381932.867 5038103.593 accept 70.4867056300 34.8824703453 expect 7453835.177 5690136.852 accept 80.9991967787 34.8943272959 expect 8589604.803 6432883.803 accept 90.5925677009 35.3510670805 expect failure errno coord_transfm_outside_projection_domain accept 100.0148954666 36.2711932097 expect failure errno coord_transfm_outside_projection_domain accept 110.4283207815 36.6017613088 expect failure errno coord_transfm_outside_projection_domain accept 120.6777960225 37.3666811945 expect failure errno coord_transfm_outside_projection_domain accept 130.2891249681 37.8530786142 expect failure errno coord_transfm_outside_projection_domain accept 140.8212942434 38.5395736955 expect failure errno coord_transfm_outside_projection_domain accept 150.7430926180 38.7113483726 expect failure errno coord_transfm_outside_projection_domain accept 160.9509577553 39.6821505727 expect failure errno coord_transfm_outside_projection_domain accept 170.3061167023 40.4192356875 expect failure errno coord_transfm_outside_projection_domain accept 180.9886935244 41.3233715669 expect failure errno coord_transfm_outside_projection_domain accept -179.3343647471 30.6447124879 expect failure errno coord_transfm_outside_projection_domain accept -169.9318029695 30.8088173910 expect failure errno coord_transfm_outside_projection_domain accept -159.9351347433 31.4030041187 expect failure errno coord_transfm_outside_projection_domain accept -149.1603401895 31.7370508292 expect failure errno coord_transfm_outside_projection_domain accept -139.8411358400 31.9883214220 expect failure errno coord_transfm_outside_projection_domain accept -129.6487283950 32.2540792459 expect failure errno coord_transfm_outside_projection_domain accept -119.3377596938 32.5474903700 expect failure errno coord_transfm_outside_projection_domain accept -109.4052121056 32.6499740509 expect failure errno coord_transfm_outside_projection_domain accept -99.9645719240 33.2634048792 expect failure errno coord_transfm_outside_projection_domain accept -89.3430796801 33.3255757200 expect -9605176.890 6972552.471 accept -79.6121040164 33.9110503188 expect -8536182.225 6196716.591 accept -69.4414539606 34.6980659140 expect -7351641.813 5601824.874 accept -59.4871790876 35.1364758272 expect -6218131.412 5141950.349 accept -49.8946468200 36.1100227223 expect -5124886.495 4896415.322 accept -39.8692181364 36.8503178238 expect -4035583.381 4702140.850 accept -29.1761644239 37.2204561349 expect -2922531.225 4529762.914 accept -19.7409728105 37.3611622287 expect -1965561.511 4418245.538 accept -9.2203420334 38.0828885726 expect -910444.166 4426682.810 accept 0.6679908400 38.2706333082 expect 65814.006 4427674.481 accept 10.6257647236 39.2684671305 expect 1040789.082 4583898.094 accept 20.2366080925 40.1629979305 expect 1974657.219 4780940.306 accept 30.5069203139 40.3074104493 expect 2987108.844 4952040.049 accept 40.7821801102 41.0561850499 expect 3990538.047 5279018.731 accept 50.9837826453 42.0495032526 expect 4969682.427 5728168.352 accept 60.0140580662 42.5571623885 expect 5839203.037 6163270.290 accept 70.7254208788 42.7772722042 expect 6868275.710 6748247.633 accept 80.6903986951 43.0741360152 expect 7768806.954 7429525.503 accept 90.6634321726 43.5837411887 expect failure errno coord_transfm_outside_projection_domain accept 100.8304968356 44.3478015738 expect failure errno coord_transfm_outside_projection_domain accept 110.2734219112 44.4218804789 expect failure errno coord_transfm_outside_projection_domain accept 120.7981801963 44.9674252843 expect failure errno coord_transfm_outside_projection_domain accept 130.6206535666 45.4286113875 expect failure errno coord_transfm_outside_projection_domain accept 140.3730391283 46.0714239353 expect failure errno coord_transfm_outside_projection_domain accept 150.9426457881 46.5091534230 expect failure errno coord_transfm_outside_projection_domain accept 160.6115790352 47.4101077572 expect failure errno coord_transfm_outside_projection_domain accept 170.3277640796 48.0638373590 expect failure errno coord_transfm_outside_projection_domain accept 180.8477425796 48.8442357472 expect failure errno coord_transfm_outside_projection_domain accept -179.2598149320 40.1705017627 expect failure errno coord_transfm_outside_projection_domain accept -169.6056153255 40.1727881259 expect failure errno coord_transfm_outside_projection_domain accept -159.3396275493 41.0355246248 expect failure errno coord_transfm_outside_projection_domain accept -149.3430287138 41.0573932198 expect failure errno coord_transfm_outside_projection_domain accept -139.3972998819 41.0866734660 expect failure errno coord_transfm_outside_projection_domain accept -129.2347342883 41.3220478306 expect failure errno coord_transfm_outside_projection_domain accept -119.9384666450 41.9087201484 expect failure errno coord_transfm_outside_projection_domain accept -109.1765297705 42.5137977627 expect failure errno coord_transfm_outside_projection_domain accept -99.7425660165 43.1240737964 expect failure errno coord_transfm_outside_projection_domain accept -89.3631524858 43.6013437171 expect -8456598.089 8145902.918 accept -79.1184854139 44.4465168591 expect -7497596.784 7490230.178 accept -69.3713987852 45.2639704879 expect -6544218.717 6996093.996 accept -59.4171409115 45.4132014431 expect -5602984.158 6519916.313 accept -49.3100677093 45.7526223682 expect -4626331.424 6169411.113 accept -39.3187102974 46.6936897182 expect -3644320.114 5998514.674 accept -29.9742251826 46.9036255354 expect -2766108.322 5819685.981 accept -19.2850914312 47.8240485822 expect -1759883.555 5782937.269 accept -9.4670802435 48.1827130036 expect -859898.761 5747174.232 accept 0.9511694165 49.1770930435 expect 85514.729 5856972.276 accept 10.9297395133 49.6986510413 expect 977791.001 5964314.135 accept 20.6644197363 50.6277034455 expect 1831934.709 6186995.533 accept 30.1619319357 50.8191455831 expect 2670361.605 6364198.402 accept 40.7545399266 51.8106566282 expect 3567452.494 6746371.295 accept 50.2966459346 52.3403869111 expect 4368473.680 7112624.685 accept 60.8853952926 52.6411504842 expect 5247040.469 7565966.065 accept 70.9660756955 53.5899082901 expect 5989886.277 8174678.498 accept 80.1015409967 53.6234824949 expect 6684866.077 8688618.853 accept 90.9390534980 54.4032676618 expect failure errno coord_transfm_outside_projection_domain accept 100.2275975816 54.6540829630 expect failure errno coord_transfm_outside_projection_domain accept 110.2799875321 55.5050863665 expect failure errno coord_transfm_outside_projection_domain accept 120.5746083149 55.8365526658 expect failure errno coord_transfm_outside_projection_domain accept 130.5493283922 55.8603600954 expect failure errno coord_transfm_outside_projection_domain accept 140.1036826064 56.0703761781 expect failure errno coord_transfm_outside_projection_domain accept 150.2683487285 56.7530037053 expect failure errno coord_transfm_outside_projection_domain accept 160.2871251380 57.2145257183 expect failure errno coord_transfm_outside_projection_domain accept 170.1375706366 57.2304506879 expect failure errno coord_transfm_outside_projection_domain accept 180.2551410057 57.5449642224 expect failure errno coord_transfm_outside_projection_domain accept -179.4163113130 50.3425538005 expect failure errno coord_transfm_outside_projection_domain accept -169.9733110986 50.4458299488 expect failure errno coord_transfm_outside_projection_domain accept -159.7576358296 50.9581504113 expect failure errno coord_transfm_outside_projection_domain accept -149.3417213155 51.6042289093 expect failure errno coord_transfm_outside_projection_domain accept -139.0195163151 51.8452436385 expect failure errno coord_transfm_outside_projection_domain accept -129.9037457234 52.0925641350 expect failure errno coord_transfm_outside_projection_domain accept -119.8773360504 52.9710431510 expect failure errno coord_transfm_outside_projection_domain accept -109.3390467545 53.2106639106 expect failure errno coord_transfm_outside_projection_domain accept -99.5444768748 53.6966176349 expect failure errno coord_transfm_outside_projection_domain accept -89.1508332331 54.2933793206 expect -7253089.374 9338825.070 accept -79.5075548350 54.5417649044 expect -6548869.079 8768667.084 accept -69.4795328221 54.7159059038 expect -5776149.289 8249326.048 accept -59.0478968386 55.5204260857 expect -4890946.145 7889320.902 accept -49.1881407070 56.1072337490 expect -4060119.862 7613040.252 accept -39.4101841829 56.8828347097 expect -3227458.953 7444966.031 accept -29.4613810419 57.5239937456 expect -2395806.485 7324970.138 accept -19.1085034175 58.4436055844 expect -1535705.803 7310415.489 accept -9.9177724571 59.0951662260 expect -790135.180 7330448.667 accept 0.8275131479 59.4326708329 expect 65618.406 7353747.937 accept 10.2968451911 60.3586661957 expect 804903.589 7530433.615 accept 20.4902700839 60.9790884371 expect 1584299.446 7722395.231 accept 30.8639040743 61.2280864786 expect 2370997.263 7922432.098 accept 40.0936831128 61.5458193623 expect 3052952.372 8172497.353 accept 50.1049528540 62.3327697572 expect 3741270.462 8574038.080 accept 60.0465199812 62.7356240065 expect 4412884.709 8976470.296 accept 70.2410137014 63.2120813131 expect 5054093.961 9462122.654 accept 80.2667195466 63.4462194528 expect 5659364.075 9965995.331 accept 90.1958404963 64.0831209279 expect failure errno coord_transfm_outside_projection_domain accept 100.5787966151 64.7750993019 expect failure errno coord_transfm_outside_projection_domain accept 110.5253826702 65.0311314831 expect failure errno coord_transfm_outside_projection_domain accept 120.1812962078 65.3475412110 expect failure errno coord_transfm_outside_projection_domain accept 130.6287227669 65.6970336106 expect failure errno coord_transfm_outside_projection_domain accept 140.0181654960 66.0623612621 expect failure errno coord_transfm_outside_projection_domain accept 150.7856466511 66.3591210923 expect failure errno coord_transfm_outside_projection_domain accept 160.9724593003 66.6162174492 expect failure errno coord_transfm_outside_projection_domain accept 170.0946608724 66.6386212957 expect failure errno coord_transfm_outside_projection_domain accept 180.4742461481 67.2758505348 expect failure errno coord_transfm_outside_projection_domain accept -179.3409209668 60.7971917835 expect failure errno coord_transfm_outside_projection_domain accept -169.8189576120 61.1637771517 expect failure errno coord_transfm_outside_projection_domain accept -159.5389911401 61.2887975834 expect failure errno coord_transfm_outside_projection_domain accept -149.8226015684 61.6437737052 expect failure errno coord_transfm_outside_projection_domain accept -139.2361655032 62.2457658007 expect failure errno coord_transfm_outside_projection_domain accept -129.4677006422 63.0421916813 expect failure errno coord_transfm_outside_projection_domain accept -119.2765495979 63.0575080285 expect failure errno coord_transfm_outside_projection_domain accept -109.6674914716 63.2917945558 expect failure errno coord_transfm_outside_projection_domain accept -99.7670971881 63.3834861911 expect failure errno coord_transfm_outside_projection_domain accept -89.8162159435 64.1409584458 expect -6128005.443 10556995.120 accept -79.1187835657 64.5588989031 expect -5465931.391 10061962.599 accept -69.5357774042 64.7792984398 expect -4855109.193 9660585.643 accept -59.4761740671 64.8974706901 expect -4194775.341 9286417.697 accept -49.9280128167 65.6204314486 expect -3502178.047 9090538.544 accept -39.3823903629 65.9211509100 expect -2766684.454 8864998.247 accept -29.7679870260 66.9026625522 expect -2059983.349 8842303.129 accept -19.9897475317 67.3766053532 expect -1374622.796 8788777.482 accept -9.9442064094 68.2526920687 expect -672566.109 8863134.950 accept 0.7509772840 69.1829974388 expect 49780.475 9007858.113 accept 10.6585809296 69.8835157088 expect 694405.780 9169808.493 accept 20.3911658798 70.0037343002 expect 1321293.723 9273335.219 accept 30.6722125463 70.6594377768 expect 1946504.130 9536648.767 accept 40.6299540574 71.5624775878 expect 2501652.005 9893454.187 accept 50.8721494614 71.8337784376 expect 3079786.371 10187475.653 accept 60.0291284696 71.8501773949 expect 3593103.464 10453205.799 accept 70.8431571594 72.0862933562 expect 4145342.784 10857384.689 accept 80.1791569395 72.7183017021 expect 4529430.842 11315638.668 accept 90.8791736411 72.9059905421 expect failure errno coord_transfm_outside_projection_domain accept 100.0478827489 73.6259975169 expect failure errno coord_transfm_outside_projection_domain accept 110.4087249466 74.2803681973 expect failure errno coord_transfm_outside_projection_domain accept 120.3401612468 74.8365621394 expect failure errno coord_transfm_outside_projection_domain accept 130.1826062634 75.5694271641 expect failure errno coord_transfm_outside_projection_domain accept 140.9483568214 75.9187393924 expect failure errno coord_transfm_outside_projection_domain accept 150.4892277622 76.6692051191 expect failure errno coord_transfm_outside_projection_domain accept 160.6382868956 77.4573927636 expect failure errno coord_transfm_outside_projection_domain accept 170.7717121538 77.8061856572 expect failure errno coord_transfm_outside_projection_domain accept 180.3573673565 78.0660690876 expect failure errno coord_transfm_outside_projection_domain accept -179.6675977383 70.0957203052 expect failure errno coord_transfm_outside_projection_domain accept -169.7405185971 70.8584256587 expect failure errno coord_transfm_outside_projection_domain accept -159.5167125707 71.8322204655 expect failure errno coord_transfm_outside_projection_domain accept -149.0042143904 72.1158106531 expect failure errno coord_transfm_outside_projection_domain accept -139.0329602286 72.2542294354 expect failure errno coord_transfm_outside_projection_domain accept -129.7801336775 73.2077231869 expect failure errno coord_transfm_outside_projection_domain accept -119.3119539671 73.8550759705 expect failure errno coord_transfm_outside_projection_domain accept -109.4758176356 74.3266149256 expect failure errno coord_transfm_outside_projection_domain accept -99.6607202273 75.0169362990 expect failure errno coord_transfm_outside_projection_domain accept -89.4753530769 75.9617981968 expect -4457168.999 12206697.987 accept -79.5887435008 76.2786099898 expect -4003489.308 11893940.766 accept -69.5002491752 76.5782690095 expect -3522337.539 11617780.097 accept -59.6915787173 77.1315486475 expect -3007598.216 11449732.407 accept -49.4552848899 77.1769236310 expect -2520444.564 11214194.197 accept -39.2403833701 77.8832488521 expect -1964697.049 11174495.756 accept -29.4506836219 78.3637643336 expect -1456404.136 11143594.629 accept -19.5010832381 78.4638811594 expect -965580.048 11064519.470 accept -9.5727750302 79.0649065844 expect -463128.369 11154178.989 accept 0.3501026786 79.9268552980 expect 16280.988 11359716.588 accept 10.8083498797 80.7734576072 expect 480582.301 11612067.445 accept 20.8098672542 81.2830486223 expect 896200.874 11813880.882 accept 30.3588816681 81.4543384377 expect 1287049.335 11952125.248 accept 40.8217587675 82.0376694327 expect 1655654.948 12249255.684 accept 50.5425294111 82.6836589307 expect 1943629.387 12583714.312 accept 60.1931997991 83.6237398675 expect 2131995.937 13024459.333 accept 70.6113860432 84.0910108055 expect 2365890.947 13363173.126 accept 80.9787521274 84.9230149078 expect 2463890.570 13818835.453 accept 90.9143604315 85.3871192550 expect failure errno coord_transfm_outside_projection_domain accept 100.4734880731 86.0042464514 expect failure errno coord_transfm_outside_projection_domain accept 110.9680822795 86.3859461851 expect failure errno coord_transfm_outside_projection_domain accept 120.8622100732 87.2340544489 expect failure errno coord_transfm_outside_projection_domain accept 130.2558456040 87.3620502284 expect failure errno coord_transfm_outside_projection_domain accept 140.2081210889 87.9608446770 expect failure errno coord_transfm_outside_projection_domain accept 150.4963196965 88.3752399281 expect failure errno coord_transfm_outside_projection_domain accept 160.1141812758 89.1315428504 expect failure errno coord_transfm_outside_projection_domain accept 170.8037412086 89.6150717843 expect failure errno coord_transfm_outside_projection_domain accept 180.1602592915 90.5979873573 expect failure errno coord_transfm_invalid_coord accept -179.4988010038 80.2382292021 expect failure errno coord_transfm_outside_projection_domain accept -169.7323895837 80.2920174872 expect failure errno coord_transfm_outside_projection_domain accept -159.9503807693 80.8196927273 expect failure errno coord_transfm_outside_projection_domain accept -149.0925061081 81.4663152862 expect failure errno coord_transfm_outside_projection_domain accept -139.5716369758 82.4286410234 expect failure errno coord_transfm_outside_projection_domain accept -129.8787197288 82.8456226975 expect failure errno coord_transfm_outside_projection_domain accept -119.4793423714 83.5516191256 expect failure errno coord_transfm_outside_projection_domain accept -109.2664761985 84.4756117750 expect failure errno coord_transfm_outside_projection_domain accept -99.3415573570 85.3222226381 expect failure errno coord_transfm_outside_projection_domain accept -89.5621686999 86.1477384313 expect -2328002.776 14359252.241 accept -79.7459074624 86.3337679988 expect -2066809.293 14230691.128 accept -69.5924016054 86.7873849130 expect -1721998.690 14226866.593 accept -59.3424378796 87.4693622383 expect -1325649.584 14378063.176 accept -49.4008006097 87.4815472674 expect -1116300.148 14277850.382 accept -39.0859175285 87.8616846009 expect -823391.287 14385214.623 accept -29.4922393933 88.2891416248 expect -560419.081 14575750.266 accept -19.1948975670 88.7931017780 expect -308317.578 14881668.127 accept -9.7223365758 89.3832521756 expect -112026.906 15387878.248 accept 0.6641448256 90.0106423220 expect failure errno coord_transfm_invalid_coord accept 10.1860723801 90.3688642972 expect failure errno coord_transfm_invalid_coord accept 20.9490167192 90.7173958262 expect failure errno coord_transfm_invalid_coord accept 30.5649867370 90.9925163187 expect failure errno coord_transfm_invalid_coord accept 40.4458702150 91.4734308311 expect failure errno coord_transfm_invalid_coord accept 50.5856921606 91.9158720484 expect failure errno coord_transfm_invalid_coord accept 60.1363202035 92.2767051552 expect failure errno coord_transfm_invalid_coord accept 70.0710227099 93.2758942081 expect failure errno coord_transfm_invalid_coord accept 80.2222434482 93.6733349750 expect failure errno coord_transfm_invalid_coord accept 90.0483434140 94.4740404396 expect failure errno coord_transfm_invalid_coord accept 100.6823676393 95.0641687155 expect failure errno coord_transfm_invalid_coord accept 110.6403276588 95.6156935259 expect failure errno coord_transfm_invalid_coord accept 120.2581625576 96.0431766104 expect failure errno coord_transfm_invalid_coord accept 130.4609264126 96.4854267472 expect failure errno coord_transfm_invalid_coord accept 140.6441294534 96.7262713213 expect failure errno coord_transfm_invalid_coord accept 150.3252472008 97.1420609214 expect failure errno coord_transfm_invalid_coord accept 160.7668616164 97.4790143988 expect failure errno coord_transfm_invalid_coord accept 170.7465062128 97.6550567817 expect failure errno coord_transfm_invalid_coord accept 180.7542323137 98.2872938097 expect failure errno coord_transfm_invalid_coord accept -179.4933532172 89.0462961156 expect failure errno coord_transfm_outside_projection_domain accept -169.8505428520 89.8903183246 expect failure errno coord_transfm_outside_projection_domain accept -159.6997771019 89.9583403191 expect failure errno coord_transfm_outside_projection_domain accept -149.2613507188 90.8395350848 expect failure errno coord_transfm_invalid_coord accept -139.1842997548 91.1573946186 expect failure errno coord_transfm_invalid_coord accept -129.6568991775 91.9446769249 expect failure errno coord_transfm_invalid_coord accept -119.3115606256 92.6597043587 expect failure errno coord_transfm_invalid_coord accept -109.6274703609 93.6500222571 expect failure errno coord_transfm_invalid_coord accept -99.3955363318 93.6790731121 expect failure errno coord_transfm_invalid_coord accept -89.4902277654 93.7101118679 expect failure errno coord_transfm_invalid_coord accept -79.2055095189 93.8973426839 expect failure errno coord_transfm_invalid_coord accept -69.2694919752 94.5715889948 expect failure errno coord_transfm_invalid_coord accept -59.2096313695 94.8767204910 expect failure errno coord_transfm_invalid_coord accept -49.3346426547 95.7619370286 expect failure errno coord_transfm_invalid_coord accept -39.2940192313 95.9177686800 expect failure errno coord_transfm_invalid_coord accept -29.1265263906 96.4025342806 expect failure errno coord_transfm_invalid_coord accept -19.8149677195 96.5067828223 expect failure errno coord_transfm_invalid_coord accept -9.2806942519 96.8402148749 expect failure errno coord_transfm_invalid_coord accept 0.9337491530 97.5569468760 expect failure errno coord_transfm_invalid_coord accept 10.2800898790 97.9514714385 expect failure errno coord_transfm_invalid_coord accept 20.9290209494 98.9284832763 expect failure errno coord_transfm_invalid_coord accept 30.3939457169 99.5719752144 expect failure errno coord_transfm_invalid_coord accept 40.6958590705 100.0328567981 expect failure errno coord_transfm_invalid_coord accept 50.1473239826 100.6776574030 expect failure errno coord_transfm_invalid_coord accept 60.6429472168 100.7044060498 expect failure errno coord_transfm_invalid_coord accept 70.8017862719 101.2635238404 expect failure errno coord_transfm_invalid_coord accept 80.3144473172 101.9663622692 expect failure errno coord_transfm_invalid_coord accept 90.7459660200 102.3134423218 expect failure errno coord_transfm_invalid_coord accept 100.1161002435 103.1947683448 expect failure errno coord_transfm_invalid_coord accept 110.1928396624 104.0579352787 expect failure errno coord_transfm_invalid_coord accept 120.2928981698 104.8100792607 expect failure errno coord_transfm_invalid_coord accept 130.4257286255 105.4176918707 expect failure errno coord_transfm_invalid_coord accept 140.8110132830 105.4248870814 expect failure errno coord_transfm_invalid_coord accept 150.8802025406 106.2350153626 expect failure errno coord_transfm_invalid_coord accept 160.3540927190 106.6211948814 expect failure errno coord_transfm_invalid_coord accept 170.1006211763 106.7429949781 expect failure errno coord_transfm_invalid_coord accept 180.9080349563 107.0582862622 expect failure errno coord_transfm_invalid_coord proj-9.6.0/test/gie/adams_ws1.gie000664 001754 001755 00000164545 14764566077 016530 0ustar00e012349e012349000000 000000 ------------------------------------------------------------ # This gie file was automatically generated using libproject # where the adams_ws1 code was adapted from ------------------------------------------------------------ ------------------------------------------------------------ operation +proj=adams_ws1 +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.5170670673 -90.3642618405 expect failure errno coord_transfm_invalid_coord accept -169.6193301609 -90.0089826784 expect failure errno coord_transfm_invalid_coord accept -159.5146913398 -89.9552061084 expect -350717.162 -11748881.092 accept -149.6430387202 -89.4598171312 expect -1198165.030 -11484132.922 accept -139.3420792457 -88.5689205573 expect -1900383.673 -11089869.954 accept -129.5512190326 -88.2843232228 expect -2002093.387 -10839580.396 accept -119.5849519031 -87.8113050000 expect -2149637.897 -10510603.217 accept -109.8164701029 -87.6292839331 expect -2103837.772 -10270387.260 accept -99.0070325468 -87.4860856350 expect -1996207.278 -10030480.328 accept -89.8710202810 -87.0734859278 expect -1978905.833 -9725415.443 accept -79.9177626050 -86.8409810985 expect -1848776.887 -9483178.045 accept -69.6832972131 -86.4913255195 expect -1709649.451 -9206995.664 accept -59.5324497291 -86.3836989068 expect -1493076.994 -9040595.732 accept -49.7885614755 -86.1711430633 expect -1288297.308 -8857404.772 accept -39.2736625770 -85.9311099723 expect -1048159.783 -8676577.940 accept -29.9883661697 -85.1267277663 expect -864602.075 -8328578.049 accept -19.7354612657 -84.2995572008 expect -606385.822 -8009717.908 accept -9.8320712389 -83.8158727667 expect -311874.893 -7833551.758 accept 0.1529149340 -83.6786769068 expect 4891.700 -7783359.345 accept 10.8075764102 -83.0220228165 expect 358525.175 -7610748.071 accept 20.2756666263 -82.4050031966 expect 693297.426 -7478128.281 accept 30.5717416484 -82.1078093242 expect 1059291.615 -7458462.299 accept 40.0217776423 -81.4996688835 expect 1423231.064 -7381432.285 accept 50.4439084395 -80.9178750042 expect 1835831.195 -7348906.778 accept 60.2928202530 -80.8948879488 expect 2195784.908 -7466766.931 accept 70.1422375374 -79.9793295792 expect 2644125.293 -7411053.135 accept 80.0281082734 -79.9307378831 expect 3023172.557 -7577579.052 accept 90.1359566782 -79.0548748136 expect 3514571.202 -7604717.836 accept 100.9983207780 -78.4899667014 expect 4020295.243 -7757494.376 accept 110.7127101938 -77.8772548871 expect 4506704.120 -7915020.711 accept 120.9499015457 -77.6414595729 expect 4975451.712 -8212762.236 accept 130.7914974914 -77.0932634434 expect 5498089.726 -8493219.908 accept 140.6080188527 -77.0119938017 expect 5942639.654 -8934467.649 accept 150.6995918182 -76.9369794197 expect 6388836.279 -9482287.585 accept 160.9763179459 -76.4102449261 expect 6955592.369 -10093789.725 accept 170.5761545704 -76.3749705670 expect 7276212.519 -10898661.639 accept 180.4778073139 -75.5923496826 expect -7735120.306 -11759677.243 accept -179.9594024463 -79.1850172406 expect -6267808.862 -11809346.696 accept -169.3792405914 -78.6847392352 expect -6375466.776 -11010285.716 accept -159.3418105960 -77.9452575038 expect -6399742.566 -10210740.446 accept -149.6506452375 -77.3145139162 expect -6244446.337 -9487525.415 accept -139.5282281225 -76.8064299491 expect -5941042.263 -8840534.760 accept -129.3590935485 -75.8784716103 expect -5652577.184 -8195427.069 accept -119.3829013254 -75.5762740726 expect -5225585.846 -7754976.336 accept -109.0050595456 -74.8490162848 expect -4822333.815 -7284106.174 accept -99.6562286237 -73.8531237046 expect -4472856.920 -6851420.623 accept -89.4153824527 -73.5246290838 expect -4008400.544 -6558443.533 accept -79.6133647306 -73.1453487971 expect -3570120.993 -6303696.366 accept -69.6398208021 -72.3341230538 expect -3146057.888 -6010826.112 accept -59.8706106341 -71.3971340090 expect -2728166.758 -5736410.313 accept -49.3205605438 -70.7335340397 expect -2256529.742 -5524593.729 accept -39.3411926381 -70.6365159073 expect -1795311.675 -5424479.920 accept -29.5083854002 -70.4758592857 expect -1345403.678 -5337336.817 accept -19.0279013677 -70.0084283415 expect -870594.276 -5225973.870 accept -9.2887899729 -69.7394095461 expect -425827.654 -5164538.802 accept 0.8271647968 -69.2722085113 expect 38107.829 -5095338.557 accept 10.4036887646 -68.3592860451 expect 484296.312 -4988000.264 accept 20.2060343192 -68.2238727038 expect 943249.674 -4997881.278 accept 30.5698496420 -67.8806308159 expect 1435688.678 -5002119.817 accept 40.1495377913 -67.4553827915 expect 1899965.927 -5010162.059 accept 50.3602778968 -67.0362523329 expect 2404182.204 -5042085.202 accept 60.9974900881 -66.4077946779 expect 2947890.396 -5072684.473 accept 70.9319955374 -65.8210021247 expect 3471665.520 -5121479.201 accept 80.4863012420 -65.1950301635 expect 3994821.648 -5179465.208 accept 90.6983519178 -64.8794465969 expect 4561938.454 -5308162.118 accept 100.9396101906 -64.2819828297 expect 5168400.393 -5424158.734 accept 110.3740821515 -63.7921797585 expect 5753378.431 -5559987.662 accept 120.9952802105 -63.1814589291 expect 6456367.698 -5728557.242 accept 130.5262638944 -62.9745552631 expect 7113536.253 -5951928.183 accept 140.8208531113 -62.1723630793 expect 7922447.639 -6121121.677 accept 150.0998916715 -61.6016244915 expect 8715442.276 -6298866.943 accept 160.9286198483 -61.2084726717 expect 9734201.834 -6531135.754 accept 170.5710819967 -60.6197664775 expect 10759563.471 -6612968.425 accept 180.0430694902 -60.0407055339 expect -11807509.426 -6558808.816 accept -179.5390947423 -69.0648460645 expect -11698244.368 -9734562.708 accept -169.1901512061 -68.4729959428 expect -9950971.024 -8797882.041 accept -159.9508405867 -68.3071525125 expect -8958082.142 -8161514.970 accept -149.8939906743 -67.9903394603 expect -8122002.603 -7560968.287 accept -139.3084750889 -67.6932300903 expect -7358441.192 -7046235.673 accept -129.4903340896 -66.9738174802 expect -6754279.469 -6566632.394 accept -119.3732549373 -66.1666702364 expect -6167465.568 -6131803.466 accept -109.9122840717 -65.4626199327 expect -5635053.049 -5784623.911 accept -99.0894792417 -64.9328397796 expect -5031244.298 -5474194.879 accept -89.0379071438 -63.9724755049 expect -4506394.832 -5162764.903 accept -79.8512236201 -63.1650388913 expect -4030262.713 -4918826.251 accept -69.0024968791 -62.7959282508 expect -3459473.930 -4731573.132 accept -59.6285901198 -62.7061946763 expect -2970786.932 -4617341.636 accept -49.7082574527 -62.1571694174 expect -2471206.184 -4465370.277 accept -39.4924979763 -61.7459110848 expect -1958931.958 -4346771.831 accept -29.6363032106 -61.6957692779 expect -1464984.333 -4287075.197 accept -19.5739110331 -61.6019886294 expect -965552.532 -4238215.163 accept -9.6576498976 -61.0164571209 expect -477467.663 -4155301.252 accept 0.9700961170 -60.1204628592 expect 48205.814 -4057834.175 accept 10.7639703855 -59.1654390696 expect 538264.315 -3972144.031 accept 20.0541166979 -58.2221709542 expect 1009809.314 -3901769.484 accept 30.8822551157 -57.4323767288 expect 1566666.238 -3866147.789 accept 40.9150221936 -56.7476936019 expect 2091877.250 -3852786.699 accept 50.0130584672 -56.6268047719 expect 2571289.842 -3900890.372 accept 60.1810460294 -56.5806776760 expect 3115889.942 -3978273.297 accept 70.0095293626 -56.4903844848 expect 3655288.464 -4064302.468 accept 80.2965290229 -56.4254295515 expect 4235148.992 -4174494.751 accept 90.0684823849 -55.5094217862 expect 4825173.693 -4205785.231 accept 100.2589575221 -54.7080863095 expect 5463679.888 -4267283.094 accept 110.9472297773 -54.0819702617 expect 6161497.112 -4367866.466 accept 120.8869363890 -53.8315420800 expect 6836546.011 -4509924.510 accept 130.9603256931 -53.6395383232 expect 7559494.803 -4670554.878 accept 140.1257246691 -53.4446807335 expect 8259667.150 -4816997.141 accept 150.2071621174 -52.9722495199 expect 9089603.867 -4934074.676 accept 160.6088986258 -52.1795359483 expect 10009756.247 -4978006.469 accept 170.2183758483 -51.5758826477 expect 10895284.078 -4985209.390 accept 180.3089859974 -51.2476311235 expect -11783292.311 -4970550.366 accept -179.3405213764 -59.1949594465 expect -11740654.113 -6374577.500 accept -169.0421166099 -59.1562784619 expect -10642169.105 -6280796.295 accept -159.3788558458 -58.9714540198 expect -9692814.995 -6062325.471 accept -149.0662979992 -58.4548170890 expect -8795516.955 -5733211.410 accept -139.3706367143 -58.1144715199 expect -8025985.315 -5449082.903 accept -129.1106150079 -57.8422608500 expect -7273101.480 -5175957.712 accept -119.2867946872 -57.5287479364 expect -6602894.857 -4927624.634 accept -109.8617968496 -56.9893254243 expect -6002387.156 -4682302.572 accept -99.4159322812 -56.2424930053 expect -5370022.362 -4421472.280 accept -89.1699101036 -56.1663221081 expect -4755991.161 -4262687.067 accept -79.7513340456 -55.7410486547 expect -4218798.697 -4097773.078 accept -69.3859719372 -55.4898494102 expect -3639082.164 -3958567.253 accept -59.6570132581 -54.5322069534 expect -3118583.817 -3776942.947 accept -49.1598655048 -54.4599218486 expect -2552713.105 -3691062.494 accept -39.1574191031 -54.3046314680 expect -2023877.704 -3616745.668 accept -29.6721934217 -53.6562199308 expect -1531972.573 -3515412.233 accept -19.8662059139 -53.4687850046 expect -1023531.105 -3467209.179 accept -9.5466027093 -53.0271646961 expect -491871.463 -3409466.748 accept 0.5571469345 -53.0212050870 expect 28691.149 -3403138.420 accept 10.2150991679 -52.8267091529 expect 526790.549 -3393151.184 accept 20.9184560187 -52.1945236902 expect 1083680.938 -3360440.100 accept 30.4122790805 -51.8430079370 expect 1582353.162 -3361293.005 accept 40.9466629257 -51.6378144374 expect 2141968.613 -3391259.162 accept 50.9012994718 -51.6157642742 expect 2677989.259 -3447645.551 accept 60.2635223516 -50.8239592102 expect 3201005.434 -3444708.197 accept 70.3461813446 -50.7667566814 expect 3768769.080 -3523960.462 accept 80.9078900718 -50.1766356883 expect 4389398.947 -3573130.194 accept 90.1074711799 -49.9117875315 expect 4944447.058 -3649776.255 accept 100.1252105382 -48.9204454031 expect 5584999.550 -3676552.405 accept 110.8672357396 -48.1515257195 expect 6298134.023 -3741552.205 accept 120.3694000933 -47.4449038605 expect 6960325.242 -3800735.139 accept 130.4622216350 -47.1679496656 expect 7689059.250 -3914199.981 accept 140.5086830302 -47.1237216006 expect 8449190.695 -4050734.799 accept 150.1476683134 -46.3595419843 expect 9231198.383 -4086961.656 accept 160.2556473416 -46.2916624279 expect 10076699.984 -4186410.441 accept 170.8522091884 -46.1574282136 expect 10999670.471 -4243488.850 accept 180.2570720688 -46.0614416637 expect -11789409.557 -4252598.873 accept -179.4511464235 -49.1459116777 expect -11761990.229 -4665890.121 accept -169.9257769945 -49.0470611950 expect -10894262.669 -4621088.416 accept -159.9907938476 -48.8074825653 expect -10017224.172 -4504606.959 accept -149.4585690847 -48.4774901965 expect -9135164.524 -4334099.962 accept -139.2453966436 -47.8692552329 expect -8335827.552 -4118376.932 accept -129.9085174848 -46.8854494051 expect -7654250.412 -3875947.564 accept -119.8893057705 -46.5651334714 expect -6944562.132 -3704152.951 accept -109.0958379349 -45.7583483056 expect -6225548.239 -3485487.807 accept -99.2790124089 -45.4028322295 expect -5592633.486 -3337133.510 accept -89.5363705206 -44.7944152576 expect -4990785.214 -3180396.161 accept -79.5060440658 -44.5224968249 expect -4385934.870 -3064005.444 accept -69.4515180819 -43.5521936119 expect -3804302.240 -2904123.456 accept -59.1288687363 -42.8251932286 expect -3217542.420 -2777920.839 accept -49.5480487278 -42.2232882391 expect -2682493.692 -2679394.683 accept -39.1528197403 -42.0524649460 expect -2108296.850 -2621044.912 accept -29.4378045622 -41.1418430583 expect -1582000.485 -2522351.315 accept -19.7178288379 -40.6492312711 expect -1057685.973 -2464591.380 accept -9.4090896450 -40.5893893271 expect -503836.212 -2446387.785 accept 0.9610981916 -39.6877677601 expect 51540.292 -2379140.432 accept 10.9883708721 -39.3404897159 expect 590154.416 -2360351.587 accept 20.8051789783 -39.1539543744 expect 1120024.260 -2361313.374 accept 30.4192741493 -38.5008875049 expect 1644931.536 -2337542.552 accept 40.3869890035 -37.5480251892 expect 2197952.841 -2301604.532 accept 50.8557015620 -37.0223436721 expect 2787383.069 -2305516.111 accept 60.6790393928 -36.1726044193 expect 3354525.829 -2291237.179 accept 70.2878480471 -35.4333317594 expect 3922441.096 -2289959.081 accept 80.5852221343 -34.7195179750 expect 4547835.373 -2300447.284 accept 90.8953318146 -34.0606127868 expect 5194014.701 -2320692.817 accept 100.1645347304 -33.2806968649 expect 5796224.654 -2327994.783 accept 110.9256034679 -32.3021983595 expect 6521787.796 -2332216.561 accept 120.5411285918 -31.9198181206 expect 7190613.992 -2375521.402 accept 130.2284841486 -31.5333210976 expect 7889339.253 -2417443.002 accept 140.4220823477 -30.6970967059 expect 8655106.833 -2418067.478 accept 150.9227263702 -30.4375246674 expect 9466130.022 -2460197.858 accept 160.0295580243 -29.5659253879 expect 10191991.350 -2424567.041 accept 170.6808093605 -29.1021932503 expect 11052824.977 -2413781.540 accept 180.1099977864 -29.0325047616 expect -11803327.121 -2416468.990 accept -179.6225370823 -39.8953975091 expect -11780081.121 -3517460.085 accept -169.6109651378 -39.4882092166 expect -10930063.239 -3453245.362 accept -159.1192163384 -39.1718824306 expect -10057200.020 -3364669.762 accept -149.1119232566 -38.9176058199 expect -9251011.551 -3261533.260 accept -139.5731057891 -38.9121786221 expect -8508507.983 -3173185.997 accept -129.7628486402 -38.0200948217 expect -7786640.589 -2991489.483 accept -119.7677289390 -37.8134438608 expect -7073265.858 -2874240.367 accept -109.1746441433 -36.9333699237 expect -6356287.199 -2698249.042 accept -99.9602516727 -36.5407037317 expect -5751426.148 -2585442.621 accept -89.8203767870 -35.5930072217 expect -5112766.564 -2430581.015 accept -79.3526596151 -35.2401507154 expect -4468536.158 -2331237.714 accept -69.9140939731 -34.4711213307 expect -3906901.211 -2218161.925 accept -59.5564783999 -33.9615774789 expect -3302614.749 -2129304.529 accept -49.4856159772 -33.3921969402 expect -2727641.771 -2047863.180 accept -39.5601849133 -33.2219810003 expect -2168968.599 -2003059.820 accept -29.6206503521 -32.2387656553 expect -1619499.618 -1912794.298 accept -19.8260643144 -31.2411754077 expect -1082312.059 -1831061.273 accept -9.6980379834 -31.1493347964 expect -528492.040 -1814844.632 accept 0.1021998532 -30.2109056883 expect 5573.607 -1752134.034 accept 10.1241618952 -30.0590713215 expect 552610.811 -1745957.315 accept 20.7210235248 -29.1582457860 expect 1134768.700 -1699801.253 accept 30.8569113997 -28.5816818553 expect 1696753.177 -1680040.760 accept 40.8690942845 -28.2388918529 expect 2258557.806 -1680827.372 accept 50.7976512101 -28.0352374493 expect 2824229.726 -1696198.158 accept 60.6880476492 -27.3593892155 expect 3400671.784 -1686010.997 accept 70.3971704737 -26.5193483221 expect 3980673.819 -1668358.964 accept 80.7537743358 -25.6284840207 expect 4616331.727 -1653268.127 accept 90.9008404807 -25.6193405937 expect 5253601.247 -1701776.097 accept 100.6019282805 -25.1073764643 expect 5885059.255 -1715983.750 accept 110.2074536086 -24.7371256820 expect 6529985.921 -1741419.588 accept 120.8735021013 -24.6200753121 expect 7269663.058 -1792634.308 accept 130.3337268181 -24.1982546793 expect 7950714.246 -1812019.053 accept 140.0292803756 -24.1036603231 expect 8668942.211 -1854994.840 accept 150.2932445511 -23.9158664525 expect 9452746.490 -1886388.628 accept 160.0080010509 -23.0912677563 expect 10215210.151 -1850466.772 accept 170.5235832568 -22.1201165276 expect 11053033.448 -1789486.248 accept 180.6560052356 -22.0885409872 expect -11759672.392 -1793318.350 accept -179.4804785664 -29.6306479674 expect -11769827.502 -2472486.935 accept -169.5969137916 -29.4470720507 expect -10963965.497 -2443636.516 accept -159.7905342089 -29.3575038499 expect -10173853.235 -2404475.146 accept -149.0451837035 -29.3191918216 expect -9326864.232 -2349131.811 accept -139.2634124047 -29.2174079662 expect -8578812.250 -2281416.940 accept -129.4780322813 -29.1095444632 expect -7854782.176 -2207222.010 accept -119.0212234055 -28.1534517213 expect -7115133.213 -2058739.607 accept -109.3989071392 -27.9851170141 expect -6453382.370 -1982663.067 accept -99.1605926399 -27.3804651341 expect -5776201.695 -1874182.968 accept -89.1612152313 -27.3765954441 expect -5132743.215 -1817444.101 accept -79.5274133946 -26.6685619062 expect -4535248.349 -1719079.927 accept -69.2474535764 -26.1885685364 expect -3913186.952 -1641486.835 accept -59.9970146255 -26.1431540924 expect -3365047.885 -1603639.182 accept -49.7059448492 -25.7380450818 expect -2769264.371 -1544962.373 accept -39.1015835447 -24.9244904554 expect -2167463.036 -1467333.079 accept -29.0839025659 -24.0290019262 expect -1606736.238 -1393727.229 accept -19.0559621671 -23.5834403073 expect -1050009.512 -1354116.104 accept -9.4796954418 -22.7008051540 expect -521897.404 -1294226.360 accept 0.8467653094 -22.2437237249 expect 46612.070 -1264810.191 accept 10.1002957100 -21.4069947198 expect 556780.318 -1217517.853 accept 20.6390095332 -21.0427895850 expect 1140438.287 -1203323.480 accept 30.9472401536 -20.1902202762 expect 1717070.228 -1164328.832 accept 40.6934322431 -20.0098914684 expect 2268176.645 -1168727.630 accept 50.7817131415 -19.2822125520 expect 2848736.826 -1144124.118 accept 60.5453409920 -18.5217559886 expect 3421842.893 -1119498.292 accept 70.9306917526 -17.5496804837 expect 4046179.805 -1085105.639 accept 80.9437168988 -16.8999064340 expect 4663411.774 -1071645.011 accept 90.2760894813 -16.3256791261 expect 5254544.808 -1062173.444 accept 100.3952892244 -15.3687880606 expect 5915778.505 -1029396.074 accept 110.8716860238 -15.1135676547 expect 6620486.296 -1045435.781 accept 120.2754329194 -14.7635849177 expect 7273908.238 -1050938.104 accept 130.9205644215 -13.8870075430 expect 8038711.991 -1019018.441 accept 140.5279151075 -13.8598832588 expect 8747404.377 -1043857.108 accept 150.1724830315 -13.4001676763 expect 9478091.722 -1031350.442 accept 160.7119668695 -12.8946537206 expect 10293471.165 -1010309.510 accept 170.7445455520 -12.4806498073 expect 11080986.451 -987879.955 accept 180.0860875981 -12.0984902614 expect -11805496.888 -960233.297 accept -179.3916734336 -19.7014586301 expect -11763712.607 -1588768.200 accept -169.6454904074 -19.4996536478 expect -10986824.032 -1564928.001 accept -159.3116700662 -18.9771320814 expect -10172088.280 -1502117.477 accept -149.2431319392 -18.5239809302 expect -9392904.689 -1437107.722 accept -139.9543854131 -18.2509646291 expect -8690226.526 -1383821.794 accept -129.7568071343 -17.3990196444 expect -7942027.033 -1280164.910 accept -119.1614046516 -16.8619769504 expect -7188040.064 -1200364.046 accept -109.2977430033 -16.3891311149 expect -6508726.059 -1130383.184 accept -99.9990872016 -15.4549241428 expect -5889334.034 -1034038.536 accept -89.1925625691 -14.8368103445 expect -5189840.029 -960130.042 accept -79.0808010606 -14.6385640035 expect -4553964.924 -920479.551 accept -69.2443866324 -14.1456687273 expect -3952562.317 -866676.412 accept -59.0066198816 -13.5814519067 expect -3341600.979 -812246.810 accept -49.6855331551 -13.0942516406 expect -2796564.477 -768323.810 accept -39.1133813450 -12.2378694514 expect -2189428.295 -705006.114 accept -29.7742120709 -11.7887487551 expect -1660234.233 -670669.573 accept -19.9711155501 -11.6767395032 expect -1110226.679 -658130.627 accept -9.9497447301 -11.3258048935 expect -552158.854 -634498.402 accept 0.5509033260 -11.1626324486 expect 30555.312 -624081.026 accept 10.5660459562 -10.2780961917 expect 586666.653 -575356.975 accept 20.2035769485 -9.2879705389 expect 1124313.735 -522411.222 accept 30.1804649932 -8.9615586081 expect 1685072.306 -508721.741 accept 40.7493880077 -8.5624561325 expect 2286291.364 -492777.586 accept 50.2789516772 -8.3745080127 expect 2836608.706 -489680.573 accept 60.8385203257 -8.2963597858 expect 3457824.160 -495534.087 accept 70.9443512805 -8.0934149371 expect 4066101.521 -494895.161 accept 80.2007278148 -7.3297477878 expect 4637580.892 -458880.962 accept 90.2330138853 -6.3835404074 expect 5273690.558 -410871.266 accept 100.0849613278 -5.7704772952 expect 5916391.051 -382372.515 accept 110.4993556234 -5.2096342892 expect 6616996.779 -356342.641 accept 120.8300166158 -4.8886947314 expect 7334310.897 -345088.331 accept 130.0108888901 -4.6741162050 expect 7990761.455 -338928.560 accept 140.0244639639 -4.5796883247 expect 8726333.645 -341133.044 accept 150.2062193251 -3.8424983415 expect 9493863.039 -292863.578 accept 160.9138221527 -3.6801453162 expect 10317707.231 -285699.001 accept 170.8709639263 -3.0673481366 expect 11095020.712 -240557.828 accept 180.1668965748 -2.1055585251 expect -11799179.686 -165599.448 accept -179.1485401294 -9.0050262787 expect -11745147.622 -711689.062 accept -169.6824431551 -8.1575200565 expect -11000115.042 -641511.177 accept -159.6715880943 -7.6221099815 expect -10218824.936 -592292.988 accept -149.3051183917 -7.4397903953 expect -9422033.576 -567343.940 accept -139.2134827169 -6.9710994505 expect -8663402.254 -519006.901 accept -129.2596978253 -6.6939068551 expect -7934011.410 -484946.005 accept -119.6918931722 -6.2610035871 expect -7252563.925 -440785.572 accept -109.4245072379 -5.7027048567 expect -6543136.053 -388878.776 accept -99.0230201699 -5.3407381847 expect -5846751.038 -352675.119 accept -89.3070231490 -5.1039965720 expect -5215688.995 -327406.437 accept -79.7971543944 -4.4916537572 expect -4615264.044 -280462.038 accept -69.3324157511 -3.9437385342 expect -3971856.878 -239654.016 accept -59.5648134684 -3.8977574735 expect -3385627.891 -231608.529 accept -49.0877260741 -3.6480235522 expect -2770346.534 -212306.063 accept -39.8261302552 -3.1309666481 expect -2236162.052 -179431.131 accept -29.9044251723 -2.1430339033 expect -1671913.963 -121205.794 accept -19.0798027396 -1.2466271084 expect -1063209.017 -69795.001 accept -9.7521679387 -1.0322328827 expect -542511.865 -57496.172 accept 0.9430496675 -0.6908437587 expect 52430.968 -38410.610 accept 10.9467094331 -0.6297633697 expect 609067.346 -35093.759 accept 20.4348082857 0.1325785640 expect 1139135.679 7429.710 accept 30.7578824509 0.9786091010 expect 1720312.179 55393.172 accept 40.1304133943 1.3184899313 expect 2253938.856 75567.836 accept 50.6339926465 1.7803646722 expect 2860936.487 103859.561 accept 60.7806464601 1.9656672403 expect 3458637.676 117050.207 accept 70.1424618467 2.0349290359 expect 4021938.226 123840.505 accept 80.3515740385 2.0389166997 expect 4651228.515 127409.428 accept 90.5030006919 2.6127341537 expect 5294231.959 168032.745 accept 100.0361988664 2.7788325854 expect 5915751.683 183883.148 accept 110.4290203898 3.4171783192 expect 6613830.450 233508.030 accept 120.0868391150 4.1107421068 expect 7282720.013 289418.148 accept 130.8358443481 4.7269030447 expect 8050540.773 343566.765 accept 140.4771116425 4.7459157253 expect 8759896.875 353947.419 accept 150.6050881294 4.8179867316 expect 9523608.686 367693.374 accept 160.2822850737 4.8901762814 expect 10268142.143 379540.358 accept 170.8847288206 5.6488167761 expect 11095489.666 443644.671 accept 180.4963027772 6.1617137742 expect -11773225.028 485642.177 accept -179.7711795627 0.4973936135 expect -11794312.860 39108.932 accept -169.1314097124 1.1380806183 expect -10958975.952 89092.114 accept -159.9956088875 1.3785514183 expect -10247153.847 106804.510 accept -149.5081205584 1.7169216947 expect -9441654.288 130579.933 accept -139.3350755264 2.6978007803 expect -8676365.930 200450.001 accept -129.9999093970 3.1714349364 expect -7991182.579 229813.581 accept -119.2025789331 3.1937958085 expect -7221314.251 224181.555 accept -109.2754065272 3.9790540663 expect -6534751.689 270991.754 accept -99.2176596815 4.4421245388 expect -5860471.809 293385.606 accept -89.3282286284 4.7715139132 expect -5217353.706 306050.669 accept -79.7812956950 5.1451934064 expect -4613741.333 321348.393 accept -69.9603490759 5.4631533571 expect -4008936.444 332711.261 accept -59.2124036536 5.9473211127 expect -3363430.499 353449.079 accept -49.1946821277 6.3240504109 expect -2775155.416 368554.729 accept -39.5188729974 7.1419837480 expect -2216820.895 409863.534 accept -29.1883557585 7.8744650207 expect -1629648.240 446150.067 accept -19.1594428055 8.7442679237 expect -1066133.170 491231.789 accept -9.5636574635 9.2026796862 expect -531158.530 514475.669 accept 0.0205997186 9.2921681107 expect 1143.393 518613.658 accept 10.6474003585 9.3325749918 expect 591403.379 522011.049 accept 20.0440697721 9.7920834357 expect 1115183.582 550935.839 accept 30.1210940174 10.3126985648 expect 1680869.076 586066.073 accept 40.9703333564 10.5122361845 expect 2297293.386 606203.052 accept 50.1242819935 10.7592956093 expect 2825113.486 630238.088 accept 60.5237375468 11.0581832240 expect 3435579.925 661638.044 accept 70.0186459905 11.8235504151 expect 4004121.295 723779.234 accept 80.3592940251 12.0855798348 expect 4639465.013 760177.897 accept 90.5376970710 12.9622135342 expect 5281027.214 840054.684 accept 100.6214357026 12.9800321873 expect 5937912.442 867143.481 accept 110.6668058012 13.4013916345 expect 6611924.171 924135.479 accept 120.8660619260 13.6620144115 expect 7319051.165 972687.117 accept 130.0979222590 14.6001907539 expect 7976726.161 1070012.208 accept 140.4720834014 14.9027374310 expect 8740255.766 1124185.971 accept 150.7487344905 15.7591910245 expect 9516541.903 1219443.082 accept 160.7309215820 16.6928847546 expect 10288334.979 1317274.424 accept 170.7171183093 17.1256054857 expect 11074727.024 1367681.457 accept 180.0522042065 17.7180717900 expect -11808147.730 1421784.637 accept -179.7714315704 10.4228351993 expect -11794256.988 825223.859 accept -169.5070586751 10.6771709914 expect -10984834.587 842079.978 accept -159.4580308434 11.3886412993 expect -10198009.570 888630.633 accept -149.0300160729 12.0779530345 expect -9393645.594 925474.868 accept -139.9457181785 13.0366592822 expect -8706116.490 979150.471 accept -129.2494581925 13.4021731716 expect -7918892.896 978007.743 accept -119.6924991127 13.6081016459 expect -7236591.544 965299.698 accept -109.9549521935 14.0589477898 expect -6561371.199 968205.406 accept -99.7560216207 14.8951827161 expect -5875106.633 995021.878 accept -89.4929629341 14.9878946198 expect -5208590.397 970965.202 accept -79.7718646359 15.7860515996 expect -4593786.261 996113.294 accept -69.1787032576 16.1396339481 expect -3943904.709 991435.170 accept -59.5415515235 16.9323624559 expect -3366393.956 1018559.978 accept -49.4027735513 17.7467818790 expect -2772187.794 1047604.534 accept -39.4592345235 18.6907045458 expect -2200328.007 1087110.348 accept -29.3138791949 19.4420397181 expect -1626432.141 1117581.487 accept -19.0263697499 20.4143066442 expect -1051476.817 1164568.814 accept -9.3715816928 21.0493545179 expect -516728.380 1196014.238 accept 0.8183051284 21.2475093875 expect 45086.676 1205740.085 accept 10.2436153128 21.9004386412 expect 564436.455 1246884.830 accept 20.9411485051 22.8923059091 expect 1155233.946 1314342.262 accept 30.8909786046 23.0333873010 expect 1709465.640 1335784.571 accept 40.6622924750 23.1458260628 expect 2259937.246 1360334.792 accept 50.2165426895 23.2813833636 expect 2805957.899 1390914.743 accept 60.2763462023 24.1180873989 expect 3388956.040 1473204.648 accept 70.9671286324 24.5104273631 expect 4023912.266 1536627.432 accept 80.1106583316 25.2622593363 expect 4578414.346 1625284.387 accept 90.1352434237 25.7041000035 expect 5204358.499 1703872.872 accept 100.7659799608 26.3884977784 expect 5887972.662 1810511.107 accept 110.3627285832 26.5971550981 expect 6528536.584 1882676.289 accept 120.5747336187 27.3361344725 expect 7230359.893 2003955.277 accept 130.0334936740 27.5388791002 expect 7906998.039 2080891.049 accept 140.6618802190 27.9206554725 expect 8693452.038 2178619.988 accept 150.8057175364 28.8815698894 expect 9466666.514 2319595.955 accept 160.9794787031 29.3286919896 expect 10269064.515 2406494.682 accept 170.8635008015 30.0881534347 expect 11065436.193 2506392.939 accept 180.7801778816 30.7919429173 expect -11748279.400 2582524.107 accept -179.3089746696 20.7349232283 expect -11757005.796 1676812.324 accept -169.3508199207 21.5333791040 expect -10960347.629 1737356.209 accept -159.4055152547 22.3252032326 expect -10170125.304 1783292.652 accept -149.8454884475 22.4734039129 expect -9424453.386 1763417.112 accept -139.3941906099 23.1082873232 expect -8626570.035 1770372.898 accept -129.6731808706 24.0100345748 expect -7903751.181 1793442.280 accept -119.5653357447 24.9154429650 expect -7175704.391 1808079.370 accept -109.4049571753 25.6530253182 expect -6469736.987 1805594.553 accept -99.2573928302 26.1761469511 expect -5790274.499 1786445.122 accept -89.1936009216 26.8478033007 expect -5137966.077 1779983.008 accept -79.9319952951 27.0219083563 expect -4558285.962 1745405.889 accept -69.7891755607 27.9650852011 expect -3937249.698 1763328.521 accept -59.9224508827 28.7378521521 expect -3349925.184 1774568.738 accept -49.2934775668 29.7032670105 expect -2731923.368 1800437.192 accept -39.7585640043 30.6226892016 expect -2188798.477 1831989.503 accept -29.7786441638 31.0043819908 expect -1631282.400 1832903.391 accept -19.9767642691 31.2638249380 expect -1090543.436 1832723.009 accept -9.4508778589 31.3720263871 expect -514837.245 1828891.334 accept 0.9277524134 31.4797046691 expect 50503.011 1832688.099 accept 10.8523072346 31.6410734176 expect 591047.237 1847096.134 accept 20.9701082341 32.0077728355 expect 1143775.602 1882087.570 accept 30.4584904014 32.2524388516 expect 1665803.096 1915504.146 accept 40.6480244298 32.2809624159 expect 2233201.781 1943617.167 accept 50.8580656871 32.6668467052 expect 2809043.442 2003759.375 accept 60.0108771272 33.5702558206 expect 3331147.200 2104097.315 accept 70.5034398056 33.6252927324 expect 3947557.082 2160701.818 accept 80.8803135822 34.2081349569 expect 4569870.780 2264387.101 accept 90.6363798105 35.0454420959 expect 5169067.110 2394326.391 accept 100.7095824201 35.0925204648 expect 5814871.525 2475230.813 accept 110.4928526153 35.3747862433 expect 6462291.225 2579639.068 accept 120.4119184030 36.0949196788 expect 7138879.871 2729237.832 accept 130.3776922680 36.6637391210 expect 7848033.791 2872450.680 accept 140.7776214259 37.0211653163 expect 8622838.330 3001065.131 accept 150.9988070526 37.4312106652 expect 9416320.865 3126629.034 accept 160.1799904005 37.7026348392 expect 10156009.588 3217300.330 accept 170.7924717408 38.0391644104 expect 11035694.135 3300682.151 accept 180.2988991065 38.8552843618 expect -11786931.659 3402926.729 accept -179.1544921899 30.5865766668 expect -11742964.963 2562920.940 accept -169.3849428190 30.6760590330 expect -10943452.496 2558666.832 accept -159.4339156279 30.6775291474 expect -10138949.929 2524905.799 accept -149.5559422097 31.4197140165 expect -9352568.633 2541799.021 accept -139.0897465732 32.2480021869 expect -8541501.925 2546249.903 accept -129.2432705270 33.1672095397 expect -7802297.946 2550865.482 accept -119.6591996700 33.2608566981 expect -7115874.023 2480432.270 accept -109.9331600482 33.2921667980 expect -6445294.904 2404312.074 accept -99.3485704747 34.1878235263 expect -5734796.733 2392907.698 accept -89.8642843810 35.1664811803 expect -5119362.394 2398013.740 accept -79.2554014378 36.1141613383 expect -4455555.225 2396032.770 accept -69.1149563301 37.0376191064 expect -3841378.648 2400749.345 accept -59.1032039467 37.4528523762 expect -3255415.569 2375467.923 accept -49.2271359812 37.5837083768 expect -2692342.061 2338370.137 accept -39.6916503252 37.7843555404 expect -2158326.616 2315768.979 accept -29.8938804478 38.4387691365 expect -1616406.889 2331809.199 accept -19.6362961239 39.2643368046 expect -1056535.053 2366905.008 accept -9.4374584268 39.5396992359 expect -506540.235 2372796.930 accept 0.3678100982 40.0842150295 expect 19706.992 2406799.601 accept 10.7782532604 40.3498890996 expect 577565.478 2430780.292 accept 20.3511128947 41.0134441926 expect 1090910.801 2491722.447 accept 30.4333653857 41.5670977874 expect 1634463.912 2555980.666 accept 40.6127074692 41.8606872838 expect 2189539.048 2612578.512 accept 50.1387387629 41.9862708713 expect 2717075.610 2664468.878 accept 60.0313937859 42.2155826206 expect 3273928.502 2736271.447 accept 70.3375377370 42.9334405924 expect 3862149.979 2861074.643 accept 80.5122630521 43.3972517538 expect 4459635.506 2979024.926 accept 90.2998133187 44.2542302837 expect 5045422.749 3141116.429 accept 100.0647551775 44.4815518568 expect 5657295.328 3262535.857 accept 110.6066455294 44.8720342864 expect 6341643.269 3419834.403 accept 120.1724623585 45.4033516879 expect 6986444.476 3591181.437 accept 130.7707977218 46.0009809664 expect 7735330.463 3793501.018 accept 140.0357246677 46.4664188350 expect 8425607.646 3969868.107 accept 150.3890392442 46.5461497362 expect 9247658.444 4111964.848 accept 160.9163061323 46.7398186016 expect 10127353.584 4248204.315 accept 170.1397977064 47.5954473956 expect 10925947.772 4426508.240 accept 180.2351988738 48.0474540668 expect -11790980.142 4514546.436 accept -179.6179355770 40.1429577199 expect -11779642.671 3545074.378 accept -169.3994668623 40.9727631907 expect -10904739.639 3617207.971 accept -159.0744411429 41.2851805506 expect -10034213.428 3592885.528 accept -149.8423978548 41.7994923976 expect -9274861.042 3569932.623 accept -139.3764020016 42.6414085288 expect -8441459.370 3548024.189 accept -129.8834678056 43.3974758995 expect -7717279.673 3512850.000 accept -119.2273385573 43.9271323417 expect -6946608.719 3434404.081 accept -109.0271864056 44.8644031164 expect -6236376.125 3400177.924 accept -99.2759252254 45.1195335801 expect -5596913.783 3311405.157 accept -89.6168562261 45.3669011811 expect -4987642.638 3231158.191 accept -79.1400549649 45.8028162130 expect -4348106.593 3168953.470 accept -69.1272034531 45.8946112129 expect -3760612.414 3092810.191 accept -59.5914817326 46.6423497334 expect -3209252.229 3085015.399 accept -49.7829967571 47.4970577378 expect -2655798.711 3093450.893 accept -39.2258939434 48.1273210284 expect -2076130.612 3090330.169 accept -29.0459159714 48.7731368364 expect -1527463.826 3102071.708 accept -19.4563259884 49.0147747663 expect -1019421.009 3094379.980 accept -9.2974861965 49.6391756401 expect -485234.163 3127485.443 accept 0.8002954696 50.4949000479 expect 41618.406 3191862.866 accept 10.5449464536 50.7566160438 expect 548218.021 3220010.469 accept 20.2148839237 51.7062683926 expect 1049059.717 3317338.698 accept 30.3826788909 51.7914032104 expect 1581115.436 3356787.020 accept 40.4566276504 52.4962620813 expect 2108580.613 3463100.568 accept 50.7914497367 53.3942556548 expect 2652555.049 3604990.575 accept 60.6693710568 53.6277898414 expect 3186853.012 3700944.562 accept 70.8983905024 54.4541071246 expect 3741818.938 3872995.556 accept 80.0921298391 54.7777207304 expect 4258319.040 4004738.180 accept 90.8264889463 55.1332494774 expect 4879297.684 4176785.355 accept 100.4617594180 55.2946750932 expect 5460672.139 4333801.395 accept 110.3843836904 56.2425900762 expect 6060244.396 4604234.950 accept 120.9357632899 56.9127950267 expect 6737581.209 4883511.960 accept 130.5662521586 57.0909748951 expect 7408708.016 5106858.830 accept 140.5130223329 57.4425849230 expect 8144289.862 5377321.687 accept 150.1055981470 58.0701974311 expect 8901145.374 5695571.850 accept 160.5298175128 58.2923369725 expect 9829016.530 5963428.705 accept 170.7716226761 58.3931749475 expect 10840592.637 6151742.796 accept 180.3673574365 58.5523508398 expect -11773057.974 6240881.263 accept -179.1819571823 50.5244358587 expect -11736162.165 4863184.254 accept -169.7451954874 51.1460877943 expect -10856391.238 4918273.752 accept -159.2560731724 51.1659719222 expect -9910743.214 4816238.037 accept -149.9672222696 51.3661570651 expect -9112154.958 4711683.179 accept -139.8591282059 52.1411020613 expect -8277768.355 4644021.152 accept -129.7970972042 52.4993373959 expect -7508721.894 4510492.172 accept -119.8747965281 52.7309515249 expect -6798679.387 4365407.674 accept -109.1716302230 53.6677897735 expect -6057181.907 4293188.653 accept -99.0064373966 53.8072556867 expect -5408756.759 4153094.469 accept -89.2833040728 54.6106266193 expect -4799568.155 4102012.106 accept -79.5985918526 55.1027737429 expect -4223329.559 4031502.907 accept -69.2277148796 55.7622851795 expect -3625399.148 3983778.291 accept -59.7190082964 55.9016291208 expect -3101569.537 3908067.342 accept -49.8523842515 55.9381520101 expect -2571672.615 3833924.898 accept -39.0306006434 56.2379702434 expect -1998881.092 3793906.979 accept -29.4386358660 56.7861006916 expect -1497679.518 3798815.953 accept -19.4990519776 57.6029946160 expect -985017.408 3841130.737 accept -9.7556385919 58.2846118408 expect -490207.195 3885471.247 accept 0.2410422753 58.3298871859 expect 12102.460 3882913.235 accept 10.5236020030 58.9487998679 expect 526883.142 3950657.847 accept 20.5151795661 59.2605128471 expect 1027091.833 4004099.328 accept 30.5940481955 60.2189305606 expect 1527348.143 4138882.981 accept 40.7900054843 61.1999722752 expect 2031933.355 4297245.113 accept 50.5958144484 62.0053970071 expect 2519299.307 4456118.987 accept 60.8762100151 62.4317915615 expect 3041726.936 4599170.199 accept 70.4775836656 63.4288167842 expect 3520271.382 4823700.333 accept 80.4849589897 63.7092243462 expect 4046810.715 4994145.001 accept 90.9223489138 64.1528226880 expect 4604230.542 5218233.343 accept 100.8413924261 65.0793496826 expect 5124544.719 5529805.227 accept 110.4292321534 65.5632643921 expect 5660125.988 5811449.898 accept 120.3403456476 66.5295382674 expect 6202409.500 6215253.879 accept 130.8994551518 67.0090839235 expect 6844751.778 6619354.810 accept 140.8028440361 67.1546072874 expect 7520909.896 7003616.860 accept 150.1461657011 67.4794680766 expect 8205195.583 7463336.596 accept 160.1948043463 67.9727812220 expect 9033005.154 8088126.442 accept 170.2236262055 68.9001498060 expect 10002490.427 9028299.844 accept 180.4510871253 69.6301310123 expect -11672105.068 10174167.501 accept -179.6928502294 60.7606385646 expect -11777314.779 6722857.577 accept -169.1226136208 61.3072659363 expect -10577772.207 6741718.347 accept -159.3917581951 61.6554659753 expect -9558954.738 6580581.575 accept -149.9215059659 62.2899028506 expect -8655627.202 6419091.419 accept -139.4229348418 63.2282931041 expect -7745441.279 6255362.342 accept -129.6145782219 63.6056278696 expect -7010285.489 6024060.105 accept -119.4455633048 63.7880033811 expect -6321410.142 5777303.154 accept -109.2885142234 64.7874725222 expect -5635268.808 5674008.141 accept -99.8106343476 65.7546653268 expect -5032017.479 5601114.476 accept -89.7332690529 65.9905292469 expect -4461000.004 5437610.544 accept -79.7061602957 66.5799499364 expect -3900842.013 5346675.577 accept -69.8078719866 67.2349525670 expect -3366364.151 5288124.095 accept -59.9278061065 67.4707153106 expect -2863723.058 5195929.041 accept -49.6499709362 68.0783549484 expect -2344265.721 5168345.324 accept -39.7785355635 68.6589802179 expect -1858546.630 5161258.347 accept -29.2733130411 69.2346381936 expect -1354425.808 5169177.366 accept -19.7520445226 69.7447199105 expect -906653.264 5193341.582 accept -9.4546150406 70.4233082073 expect -429913.564 5256559.645 accept 0.4048610966 70.6236052708 expect 18357.153 5275509.126 accept 10.1670362925 70.8976936786 expect 459603.254 5322872.830 accept 20.8647562320 71.3607521955 expect 938809.251 5419110.193 accept 30.9620313275 72.3532797491 expect 1376843.290 5613329.925 accept 40.2436883822 72.6448737185 expect 1786361.071 5722579.786 accept 50.0800145195 72.7023402174 expect 2228603.224 5821470.902 accept 60.8106370898 73.3031896004 expect 2692182.927 6039226.272 accept 70.6025437547 73.5707955278 expect 3126302.133 6221575.805 accept 80.4428196695 74.5629968499 expect 3514896.350 6555403.995 accept 90.9705345155 75.3895826260 expect 3928491.141 6916551.843 accept 100.7042769293 76.1944062131 expect 4287723.041 7301533.036 accept 110.6051178518 77.0216158345 expect 4624306.800 7743103.312 accept 120.5528704261 77.5805939292 expect 4968887.256 8186300.038 accept 130.0043694164 78.1214527556 expect 5261992.760 8661662.569 accept 140.4219455785 78.5676823388 expect 5567546.429 9220412.007 accept 150.9607701203 78.6584076186 expect 5913255.760 9797358.275 accept 160.8565770466 78.9854274121 expect 6094257.816 10453353.669 accept 170.4873432082 79.5034695093 expect 6085224.011 11149120.017 accept 180.3649630983 79.8293737054 expect -6018407.263 11787437.041 accept -179.3073985765 70.8163938435 expect -10817280.529 11465490.561 accept -169.9897278030 71.2934701929 expect -9276875.736 9863919.805 accept -159.2365467427 71.8590802946 expect -8184178.135 9023921.272 accept -149.5868788879 72.5692211678 expect -7360942.175 8539328.713 accept -139.1323352132 73.1055180323 expect -6629486.281 8091534.479 accept -129.7742695161 73.8196458860 expect -6000140.533 7815451.358 accept -119.7041959034 74.7579440452 expect -5353400.778 7611475.920 accept -109.7008776088 75.3901899809 expect -4792518.394 7404785.570 accept -99.2314898828 75.9111536135 expect -4252036.425 7210319.564 accept -89.5888146775 76.2792517885 expect -3785659.112 7048200.366 accept -79.3077687162 76.5665040629 expect -3313318.429 6890921.119 accept -69.4337987883 76.6621432071 expect -2883922.823 6737102.185 accept -59.0261934568 76.9594965901 expect -2426688.222 6640668.630 accept -49.3115987100 77.8323229554 expect -1979275.955 6688559.534 accept -39.4459740795 78.6210665264 expect -1547696.694 6747296.835 accept -29.2899383303 78.8023227358 expect -1142238.026 6708292.313 accept -19.1326451258 79.5725050055 expect -728892.599 6814228.120 accept -9.5853469917 80.5460704598 expect -353566.181 6996661.780 accept 0.8129663669 80.7466782310 expect 29772.656 7032318.930 accept 10.8102522601 81.0089111161 expect 392092.798 7104986.336 accept 20.8020824140 81.8177026408 expect 730326.797 7332200.488 accept 30.3227561837 81.8668144912 expect 1061996.648 7396680.294 accept 40.1192116699 82.5591024355 expect 1359653.273 7647195.746 accept 50.7225485024 83.3689210619 expect 1642887.530 7969766.384 accept 60.1580162716 83.8192679216 expect 1890049.083 8210844.252 accept 70.1731315267 84.1714314114 expect 2143235.010 8455663.246 accept 80.1231823107 85.0909307831 expect 2259322.517 8893244.179 accept 90.1299725257 85.3982223970 expect 2445628.938 9170008.600 accept 100.9345367116 86.3293017336 expect 2430413.592 9671881.713 accept 110.8967536886 86.5596667511 expect 2542278.654 9949902.835 accept 120.1922834115 86.7776311985 expect 2614369.629 10217813.641 accept 130.8551063009 87.2011682062 expect 2577941.936 10571347.314 accept 140.5883122989 87.9808140533 expect 2273302.478 10967527.442 accept 150.7238822230 88.4956617003 expect 2017487.009 11270794.839 accept 160.6971562328 89.4208328233 expect 1268680.941 11594325.039 accept 170.3991577317 90.3170479552 expect failure errno coord_transfm_invalid_coord accept 180.5908903286 90.7796418583 expect failure errno coord_transfm_invalid_coord accept -179.6672737749 80.9670130376 expect -5579975.368 11792148.700 accept -169.9437203572 81.8738988668 expect -5187300.642 11262109.091 accept -159.3629518885 82.2036176232 expect -4941095.530 10742757.395 accept -149.7114004837 82.3010483165 expect -4738960.212 10299021.779 accept -139.8871282560 82.3318724399 expect -4514031.774 9880652.443 accept -129.1103803259 83.1345581099 expect -4013186.362 9627836.752 accept -119.1303161403 83.9704390214 expect -3530043.701 9489966.226 accept -109.5992779696 84.5102002899 expect -3148868.130 9358019.001 accept -99.5340303810 84.8783360216 expect -2804982.087 9214341.492 accept -89.9555755860 85.8080149104 expect -2340101.503 9294021.159 accept -79.4199716924 86.1128031464 expect -2020424.674 9213221.394 accept -69.1379478051 86.2852242994 expect -1740870.664 9123538.176 accept -59.4862558744 86.8907264218 expect -1395372.231 9240228.437 accept -49.7224425586 87.3050907988 expect -1102476.832 9323956.320 accept -39.0166782385 88.0295172740 expect -756214.155 9606239.667 accept -29.9931677373 88.8762393331 expect -449807.586 10100826.611 accept -19.5461864449 89.0119403988 expect -277206.486 10175661.602 accept -9.5857052257 89.5105564736 expect -97172.766 10643561.020 accept 0.2546693029 89.8300875130 expect 1535.284 11119443.552 accept 10.1878191712 89.8306694493 expect 61235.456 11123325.873 accept 20.3202271141 90.0891258483 expect failure errno coord_transfm_invalid_coord accept 30.4076531874 90.1655009485 expect failure errno coord_transfm_invalid_coord accept 40.4697816170 90.3073014721 expect failure errno coord_transfm_invalid_coord accept 50.0046280736 90.9081150272 expect failure errno coord_transfm_invalid_coord accept 60.2882853272 91.3234973005 expect failure errno coord_transfm_invalid_coord accept 70.1983790734 92.0487871293 expect failure errno coord_transfm_invalid_coord accept 80.2016298087 92.7883781050 expect failure errno coord_transfm_invalid_coord accept 90.1380649347 93.4193661081 expect failure errno coord_transfm_invalid_coord accept 100.9727810821 94.0036131508 expect failure errno coord_transfm_invalid_coord accept 110.2124518442 94.5588879261 expect failure errno coord_transfm_invalid_coord accept 120.9027437830 95.4070516655 expect failure errno coord_transfm_invalid_coord accept 130.4370128971 95.6659394457 expect failure errno coord_transfm_invalid_coord accept 140.5025123065 95.8655824422 expect failure errno coord_transfm_invalid_coord accept 150.4051276696 96.5597126498 expect failure errno coord_transfm_invalid_coord accept 160.6794810904 97.5509003421 expect failure errno coord_transfm_invalid_coord accept 170.0804614782 97.7962770171 expect failure errno coord_transfm_invalid_coord accept 180.7350988655 97.9297507566 expect failure errno coord_transfm_invalid_coord accept -179.6509243766 89.9594690425 expect -339016.824 11811270.987 accept -169.1462360158 90.2259103522 expect failure errno coord_transfm_invalid_coord accept -159.1237371257 91.0966186475 expect failure errno coord_transfm_invalid_coord accept -149.3864893992 92.0018593591 expect failure errno coord_transfm_invalid_coord accept -139.8836795793 92.7310580140 expect failure errno coord_transfm_invalid_coord accept -129.2447556879 93.0874941458 expect failure errno coord_transfm_invalid_coord accept -119.5691328385 94.0016439421 expect failure errno coord_transfm_invalid_coord accept -109.5375733271 94.6275672079 expect failure errno coord_transfm_invalid_coord accept -99.6767551820 94.9362396518 expect failure errno coord_transfm_invalid_coord accept -89.0765267674 95.5300020136 expect failure errno coord_transfm_invalid_coord accept -79.7404375474 95.8979843707 expect failure errno coord_transfm_invalid_coord accept -69.2186423862 96.1670313079 expect failure errno coord_transfm_invalid_coord accept -59.3116550382 97.0176191327 expect failure errno coord_transfm_invalid_coord accept -49.2194140278 97.9598960425 expect failure errno coord_transfm_invalid_coord accept -39.4423952109 97.9675789614 expect failure errno coord_transfm_invalid_coord accept -29.2846350035 98.7361321642 expect failure errno coord_transfm_invalid_coord accept -19.5599253582 98.8248133304 expect failure errno coord_transfm_invalid_coord accept -9.7751102831 99.2905137713 expect failure errno coord_transfm_invalid_coord accept 0.4459912613 99.9348079001 expect failure errno coord_transfm_invalid_coord accept 10.2556901904 100.0679369696 expect failure errno coord_transfm_invalid_coord accept 20.2129499464 100.4339484435 expect failure errno coord_transfm_invalid_coord accept 30.5120716507 100.8173987820 expect failure errno coord_transfm_invalid_coord accept 40.9186217475 101.3362169174 expect failure errno coord_transfm_invalid_coord accept 50.4499309674 101.7519777648 expect failure errno coord_transfm_invalid_coord accept 60.9618169609 101.9681616248 expect failure errno coord_transfm_invalid_coord accept 70.5136938969 102.7263743079 expect failure errno coord_transfm_invalid_coord accept 80.1112365376 103.4930742925 expect failure errno coord_transfm_invalid_coord accept 90.0656487088 104.2687818917 expect failure errno coord_transfm_invalid_coord accept 100.4737302350 105.1672304167 expect failure errno coord_transfm_invalid_coord accept 110.0826941374 105.9578331609 expect failure errno coord_transfm_invalid_coord accept 120.5038465053 106.4653112353 expect failure errno coord_transfm_invalid_coord accept 130.1946022249 107.2836000330 expect failure errno coord_transfm_invalid_coord accept 140.1612060920 108.2561565502 expect failure errno coord_transfm_invalid_coord accept 150.8381796528 108.3785139275 expect failure errno coord_transfm_invalid_coord accept 160.5344804952 109.2381208530 expect failure errno coord_transfm_invalid_coord accept 170.6816130052 110.0255190870 expect failure errno coord_transfm_invalid_coord accept 180.9197969760 110.0988929845 expect failure errno coord_transfm_invalid_coord proj-9.6.0/test/gie/adams_ws2.gie000664 001754 001755 00000167312 14764566077 016524 0ustar00e012349e012349000000 000000 ------------------------------------------------------------ # This gie file was initially generated from "random" test points # got by using libproject where the adams_ws2 code was adapted from # It can be edited. ------------------------------------------------------------ ------------------------------------------------------------ operation +proj=adams_ws2 +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.7092450238 -90.0290393775 expect failure errno coord_transfm_invalid_coord accept -169.9316998581 -89.6983443874 expect -2757243.603 -13694037.516 accept -159.9839735761 -89.3853376439 expect -3135302.955 -12966682.177 accept -149.0127901515 -88.4812940559 expect -3702020.595 -11830322.541 accept -139.1470666283 -87.4944214849 expect -3951802.110 -10998803.477 accept -129.1647510809 -86.6732359620 expect -3966830.515 -10396244.146 accept -119.8872640416 -86.0311019572 expect -3870042.307 -9946966.226 accept -109.1071943611 -85.4385747937 expect -3666639.936 -9527264.855 accept -99.1726204643 -85.1105131986 expect -3405494.414 -9249877.167 accept -89.9699823716 -84.7014602402 expect -3161293.332 -8969222.654 accept -79.0142432052 -84.6183360959 expect -2796763.716 -8803380.868 accept -69.3746588999 -83.8694127295 expect -2538194.969 -8434335.838 accept -59.1116247628 -83.4382281692 expect -2201397.875 -8194239.985 accept -49.9832824786 -82.7776695863 expect -1905027.516 -7914064.933 accept -39.2446354074 -82.2684783422 expect -1520355.973 -7692624.558 accept -29.1591843717 -81.2712614892 expect -1160852.682 -7367506.867 accept -19.7518374124 -80.8288036882 expect -795019.539 -7219158.095 accept -9.9255150926 -80.7634661276 expect -400180.112 -7180839.863 accept 0.1884288619 -80.2758766316 expect 7681.127 -7053424.532 accept 10.3463227493 -79.3698907818 expect 429721.976 -6850344.331 accept 20.5976448498 -78.7037640543 expect 866348.961 -6727849.736 accept 30.3082205513 -78.5268124103 expect 1278848.718 -6727598.466 accept 40.4562460745 -78.1491297266 expect 1718510.989 -6703423.050 accept 50.9458720501 -77.1822355756 expect 2199782.851 -6583628.613 accept 60.7726090586 -77.0349803149 expect 2630476.462 -6641198.553 accept 70.5081156610 -76.3842150797 expect 3083737.575 -6619890.177 accept 80.2365671846 -75.4841051853 expect 3557787.939 -6575918.481 accept 90.5217667884 -74.7807003525 expect 4055523.822 -6599908.601 accept 100.8213322615 -74.0327498320 expect 4564995.375 -6643366.399 accept 110.5063711430 -73.2571688604 expect 5056479.354 -6698955.863 accept 120.3163752614 -72.4393741465 expect 5563998.804 -6778747.641 accept 130.6066962791 -72.2383125997 expect 6050103.198 -6992464.809 accept 140.9842139999 -72.0604912080 expect 6533723.092 -7241474.496 accept 150.7407483672 -71.8220094179 expect 6988261.604 -7493795.727 accept 160.2333513818 -71.3988285471 expect 7442114.989 -7741103.770 accept 170.2174368056 -70.4342119870 expect 7967287.710 -7968253.770 accept 180.4880362185 -69.4423545276 expect -8459022.028 -8206959.559 accept -179.6765866679 -79.9829089371 expect -6985694.074 -9698942.155 accept -169.3697449847 -79.1533653138 expect -6788658.846 -9227367.628 accept -159.3398127142 -78.6158200646 expect -6518830.741 -8830410.965 accept -149.2529018703 -77.9038978934 expect -6242199.759 -8415628.859 accept -139.1270212047 -77.3123241499 expect -5919170.448 -8040244.161 accept -129.9719878520 -77.1799395743 expect -5563633.984 -7792039.926 accept -119.8002013346 -76.4574860662 expect -5211249.405 -7431807.092 accept -109.5059723182 -75.7415088186 expect -4829803.114 -7094468.982 accept -99.6093198617 -75.2549327376 expect -4430664.339 -6828988.008 accept -89.7930338075 -74.9639973582 expect -4012235.208 -6620268.234 accept -79.4586895446 -74.2118180651 expect -3586854.329 -6347250.691 accept -69.3436462673 -74.1262304089 expect -3131838.678 -6210695.025 accept -59.8993905791 -73.3233934105 expect -2730484.498 -5982995.653 accept -49.7522174506 -73.2363687589 expect -2268190.621 -5882547.028 accept -39.2685447989 -72.6142200904 expect -1801294.844 -5714042.490 accept -29.0364706467 -72.5237014490 expect -1332211.352 -5647707.712 accept -19.8296434180 -72.1886326428 expect -912551.389 -5563488.488 accept -9.8077325645 -71.7629261845 expect -453152.448 -5478207.867 accept 0.4315853824 -71.5575178388 expect 19979.237 -5441012.049 accept 10.8411958509 -70.9073113064 expect 505138.396 -5355652.524 accept 20.7152781983 -70.1134571802 expect 972838.442 -5266833.183 accept 30.0599851854 -69.8795545612 expect 1415773.291 -5269134.697 accept 40.5438377621 -69.1450433006 expect 1924403.608 -5223807.773 accept 50.0307069046 -68.4333233270 expect 2392850.994 -5193157.214 accept 60.5578535026 -67.8341598034 expect 2917014.530 -5202936.346 accept 70.5486167487 -67.0039300601 expect 3429776.377 -5197720.065 accept 80.6104642107 -66.2045341279 expect 3955430.510 -5217814.475 accept 90.2841546043 -65.8422559530 expect 4456136.396 -5308137.385 accept 100.1453713101 -65.8321633336 expect 4958133.076 -5466790.857 accept 110.3255223842 -65.6999143010 expect 5484630.668 -5641098.630 accept 120.2695614591 -65.4373463883 expect 6008718.351 -5822579.879 accept 130.1617028260 -64.7707999563 expect 6557379.569 -5983944.031 accept 140.4485877356 -64.1566350257 expect 7128044.250 -6198238.582 accept 150.3105224098 -63.5579868289 expect 7676672.874 -6441225.256 accept 160.5091429791 -62.6650596939 expect 8262531.987 -6705693.227 accept 170.8981621301 -61.7219845816 expect 8855010.278 -7022513.736 accept 180.3558199030 -61.1527410473 expect -9320622.179 -7351806.789 accept -179.1949344790 -69.7752745189 expect -8408251.537 -8232691.330 accept -169.9844730348 -68.9207602047 expect -8120078.404 -7775444.464 accept -159.6630800816 -68.8474900484 expect -7673728.921 -7392368.231 accept -149.1514601079 -68.2067669189 expect -7247339.088 -6962408.917 accept -139.0879724776 -67.2990645502 expect -6835622.742 -6542934.347 accept -129.7364301888 -67.0709630928 expect -6389191.557 -6259081.373 accept -119.2525297571 -66.7130216826 expect -5885127.012 -5959615.515 accept -109.9942126502 -65.9323791506 expect -5456298.788 -5663479.323 accept -99.3718189580 -65.0050609815 expect -4952897.215 -5351531.121 accept -89.2126537463 -64.8003181492 expect -4438651.521 -5164919.484 accept -79.9699918529 -64.7417604712 expect -3968262.754 -5031339.112 accept -69.2852704168 -64.0719899001 expect -3442756.784 -4828682.323 accept -59.7713311869 -63.5883281794 expect -2971057.023 -4681634.618 accept -49.4591068015 -63.3603315571 expect -2455101.158 -4574825.541 accept -39.9221210763 -62.7166029149 expect -1985110.513 -4444066.132 accept -29.4033816775 -62.2459162224 expect -1463165.847 -4343593.454 accept -19.4562997110 -62.1057544781 expect -967613.655 -4296313.938 accept -9.6356219787 -61.1466320407 expect -481338.112 -4176929.015 accept 0.6588822473 -60.1858259817 expect 33069.831 -4072773.374 accept 10.9123408994 -59.3942535459 expect 550076.991 -4001105.274 accept 20.9249231576 -58.4264590285 expect 1060832.702 -3926177.072 accept 30.8182477174 -57.5436346739 expect 1571551.690 -3873152.034 accept 40.8062160819 -57.3120408186 expect 2088248.634 -3896213.274 accept 50.5783407631 -57.2502847616 expect 2597056.641 -3948016.223 accept 60.3795380424 -57.2275967096 expect 3112185.488 -4018270.594 accept 70.5341633320 -56.6610699237 expect 3662178.471 -4054556.527 accept 80.2621021518 -56.0832576961 expect 4200156.553 -4102899.263 accept 90.9924788950 -55.3105280599 expect 4810349.300 -4164560.690 accept 100.1850294843 -54.9771464696 expect 5337043.742 -4270248.554 accept 110.2445797630 -54.0658285398 expect 5943289.082 -4356935.761 accept 120.6069857779 -53.3088500534 expect 6579954.717 -4496181.899 accept 130.2789945294 -52.8143911635 expect 7180795.395 -4682156.275 accept 140.3311899960 -52.3084536190 expect 7816505.414 -4918688.318 accept 150.9519295109 -52.0098336142 expect 8481836.319 -5247130.328 accept 160.6630418532 -51.6702008173 expect 9089733.809 -5596578.481 accept 170.5027767145 -51.5189598167 expect 9675637.514 -6026539.807 accept 180.8758506742 -51.2201444439 expect -10177185.136 -6434755.421 accept -179.8411044403 -59.9393178899 expect -9443976.994 -7246273.236 accept -169.3270885266 -59.1985019770 expect -8995948.520 -6701742.553 accept -159.0120452761 -59.1242618883 expect -8464180.924 -6272112.895 accept -149.5670531797 -58.7286202895 expect -7979472.299 -5884420.870 accept -139.0970719139 -58.1489537744 expect -7430300.432 -5483894.856 accept -129.1196020868 -57.2913818657 expect -6907494.210 -5112397.388 accept -119.7410720497 -56.9161549702 expect -6387194.447 -4845091.157 accept -109.7214510325 -55.9267756586 expect -5851170.964 -4534131.372 accept -99.1928708683 -55.4401681713 expect -5267711.955 -4300230.895 accept -89.2702698097 -55.2997481025 expect -4714550.947 -4139814.556 accept -79.4864123616 -54.8136229276 expect -4183440.927 -3971202.629 accept -69.3453324893 -54.6311145369 expect -3632724.847 -3848910.729 accept -59.8339416819 -53.6386169191 expect -3133296.168 -3676377.089 accept -49.3010973212 -52.9141596041 expect -2577599.457 -3539651.763 accept -39.8985039869 -52.8539647879 expect -2079543.627 -3483996.852 accept -29.3961250522 -52.3417298211 expect -1530564.484 -3397269.368 accept -19.5014059179 -51.3773597952 expect -1016792.801 -3288257.869 accept -9.9116288496 -50.4755131648 expect -517724.688 -3198035.336 accept 0.9743282127 -49.9184212313 expect 50962.745 -3147322.949 accept 10.6508090388 -49.0463066485 expect 558876.345 -3082894.951 accept 20.2170315032 -48.8012100804 expect 1063007.281 -3078773.024 accept 30.9229311437 -48.2225550224 expect 1632723.266 -3061426.633 accept 40.7489150310 -47.7931114403 expect 2161132.006 -3064760.741 accept 50.9882474140 -47.6183917612 expect 2717126.369 -3102179.138 accept 60.4951083293 -46.6454001087 expect 3249189.082 -3083060.891 accept 70.9554669962 -45.9763718998 expect 3843598.409 -3108377.147 accept 80.8848766764 -45.7846392844 expect 4415566.167 -3184255.726 accept 90.7402232455 -45.6088952189 expect 4996535.515 -3278794.703 accept 100.8696089733 -45.3585308636 expect 5610895.632 -3392002.899 accept 110.9170212513 -44.9478951297 expect 6242312.338 -3516148.140 accept 120.9353901019 -44.7761977319 expect 6885637.054 -3692702.792 accept 130.5310034140 -44.6491174665 expect 7518026.186 -3902292.936 accept 140.4911819383 -44.5558487119 expect 8188523.026 -4170828.177 accept 150.4583065377 -44.0055960197 expect 8893017.639 -4454795.754 accept 160.9810806536 -43.8499619826 expect 9618889.130 -4871178.683 accept 170.9230729547 -43.0316016948 expect 10335543.716 -5284759.370 accept 180.3381763034 -42.9767512080 expect -10889181.304 -5775308.758 accept -179.6530173733 -49.3872071390 expect -10359694.674 -6307512.780 accept -169.2223492311 -49.3351161906 expect -9766541.338 -5765269.396 accept -159.0508327192 -48.4914027020 expect -9200440.534 -5224400.981 accept -149.1969312324 -48.3204060368 expect -8581410.142 -4822470.693 accept -139.4509254495 -48.2401083822 expect -7956818.463 -4491703.439 accept -129.3953824841 -47.8590661722 expect -7326697.432 -4175808.479 accept -119.8005497638 -46.8591030615 expect -6750164.464 -3860038.014 accept -109.6371217071 -46.1165362624 expect -6133381.272 -3598151.680 accept -99.7572070447 -45.2128579221 expect -5546071.645 -3363379.628 accept -89.9756152550 -44.7940088251 expect -4964897.006 -3200898.955 accept -79.8767538149 -44.0954679134 expect -4380500.181 -3035551.265 accept -69.7070595303 -43.9155165619 expect -3796215.985 -2932502.304 accept -59.4162002941 -43.4002905582 expect -3219205.574 -2819636.846 accept -49.0092629276 -43.1455519878 expect -2642338.036 -2741942.445 accept -39.2149367905 -43.1396428570 expect -2105326.203 -2698721.256 accept -29.1962960438 -42.8806359633 expect -1563179.016 -2646665.138 accept -19.9520584705 -41.9858293563 expect -1068083.171 -2560330.542 accept -9.1048749080 -41.9710426109 expect -486662.244 -2545041.394 accept 0.7345999991 -41.2273949585 expect 39313.660 -2488176.296 accept 10.3358537029 -40.3051838201 expect 554536.579 -2427518.000 accept 20.9085122254 -40.0048024560 expect 1124375.953 -2420626.128 accept 30.8006774663 -39.6693852781 expect 1661863.596 -2419220.994 accept 40.8129777308 -39.2404566099 expect 2212297.195 -2420473.575 accept 50.5680928423 -38.6381409742 expect 2757518.213 -2417613.121 accept 60.1150468046 -38.1919404446 expect 3299910.135 -2434340.337 accept 70.2009887167 -37.7503319244 expect 3885091.635 -2465277.945 accept 80.9433725042 -37.6092654477 expect 4521685.524 -2537447.427 accept 90.5450445832 -36.8932371421 expect 5114490.299 -2572080.702 accept 100.2810830549 -36.2548338054 expect 5735525.829 -2629983.784 accept 110.9555828878 -35.3701130040 expect 6448221.387 -2701332.745 accept 120.1071621348 -34.4239368091 expect 7092033.959 -2769933.898 accept 130.3959151631 -33.5728740994 expect 7849212.306 -2898252.702 accept 140.3966149747 -33.1007607627 expect 8616443.259 -3102144.372 accept 150.7804103414 -32.1498899431 expect 9474137.117 -3341084.536 accept 160.1294242200 -31.8677972120 expect 10255119.633 -3696347.819 accept 170.4926366887 -31.4760758031 expect 11130499.187 -4208944.238 accept 180.0855468805 -30.6845915110 expect -11924104.915 -4768423.647 accept -179.7273734266 -39.1658927524 expect -11204917.679 -5465459.947 accept -169.0184062476 -39.0055263654 expect -10493158.815 -4820337.657 accept -159.3652618381 -38.5207051121 expect -9823706.550 -4298001.622 accept -149.2442235779 -37.7437811442 expect -9109090.826 -3817330.153 accept -139.7582139899 -37.0859345868 expect -8430885.041 -3451397.102 accept -129.6848433059 -36.3175720184 expect -7723246.989 -3125416.425 accept -119.9915203582 -35.8537888060 expect -7052847.569 -2889355.259 accept -109.3741418826 -35.0916931594 expect -6347630.931 -2655717.550 accept -99.4860284168 -34.9974460643 expect -5702866.657 -2521419.373 accept -89.2610432155 -34.3775651948 expect -5064932.880 -2367691.750 accept -79.8980045489 -33.8084333270 expect -4496443.808 -2246842.786 accept -69.7744908122 -33.0535274429 expect -3897431.224 -2124030.733 accept -59.1741793523 -33.0245833220 expect -3279277.127 -2064611.925 accept -49.3252940718 -32.7520928002 expect -2718021.990 -2003727.901 accept -39.9837216743 -32.6820581131 expect -2193100.779 -1967477.081 accept -29.6634260976 -32.4559533116 expect -1621044.860 -1926376.015 accept -19.0425557421 -31.6151992048 expect -1038939.460 -1853758.302 accept -9.3464940981 -30.7676922872 expect -509764.792 -1790359.701 accept 0.2271197201 -29.8880719395 expect 12396.124 -1731908.926 accept 10.3155486517 -29.7265492803 expect 563481.490 -1725116.999 accept 20.1839066538 -29.2623085092 expect 1105114.379 -1705401.818 accept 30.7346251189 -29.0674505554 expect 1688443.872 -1710201.130 accept 40.3481516035 -28.9492608062 expect 2225766.274 -1724893.934 accept 50.0990389861 -28.2777777134 expect 2780666.281 -1710825.486 accept 60.6952552496 -28.1677069370 expect 3393248.667 -1743873.889 accept 70.5261359994 -27.5835336013 expect 3977728.481 -1751038.589 accept 80.1654103496 -27.3421123535 expect 4564865.482 -1789330.795 accept 90.0545702452 -26.7993470554 expect 5189164.780 -1818900.217 accept 100.4846205812 -26.3321377541 expect 5873417.372 -1871564.464 accept 110.1454350755 -25.9649549970 expect 6535803.844 -1941828.510 accept 120.7008393450 -25.1526201253 expect 7304855.220 -2009386.765 accept 130.2389402517 -24.5243234665 expect 8043003.839 -2105873.386 accept 140.5571385114 -23.6272475940 expect 8905477.819 -2232473.683 accept 150.7016104068 -22.6662177106 expect 9831511.358 -2411871.251 accept 160.2968564724 -22.4382538673 expect 10756906.363 -2747796.799 accept 170.0748311294 -22.3860117924 expect 11733461.723 -3272290.561 accept 180.6506603946 -22.3728965349 expect -12617064.805 -3974167.403 accept -179.6121212366 -29.7691402382 expect -11979921.495 -4667118.695 accept -169.7119531770 -29.2443283665 expect -11222154.909 -3947901.934 accept -159.9169552740 -28.8913170762 expect -10396184.341 -3393588.505 accept -149.4387461093 -28.3593158878 expect -9515015.598 -2929955.771 accept -139.1669991056 -27.7889137233 expect -8680487.806 -2582510.633 accept -129.3433138149 -27.6725871069 expect -7909885.992 -2361735.805 accept -119.4082102166 -27.0902195884 expect -7179377.517 -2149357.741 accept -109.1270697537 -26.4319377776 expect -6459215.181 -1966619.626 accept -99.5563015601 -26.1428020328 expect -5813582.857 -1849104.872 accept -89.7150051747 -25.6767220293 expect -5176646.600 -1736438.788 accept -79.8755275705 -25.5910332550 expect -4558775.834 -1666806.999 accept -69.2123495570 -25.4383454527 expect -3910739.366 -1600921.909 accept -59.5658576308 -24.9358234812 expect -3341553.359 -1527967.578 accept -49.6169420229 -24.6444229699 expect -2765720.514 -1476703.148 accept -39.6482793765 -24.5549160001 expect -2198313.929 -1445718.653 accept -29.9777355053 -24.4560828087 expect -1655580.275 -1421139.862 accept -19.1713792157 -23.8256788800 expect -1056119.979 -1368757.459 accept -9.7201400616 -22.9994139064 expect -535034.881 -1312183.508 accept 0.5529890539 -22.3142121451 expect 30441.381 -1269018.253 accept 10.1921781407 -21.7066906983 expect 561728.285 -1235326.876 accept 20.3795548881 -21.4584354172 expect 1125554.829 -1227765.197 accept 30.9486641454 -20.5179662552 expect 1716375.316 -1183995.648 accept 40.8135756255 -19.5974702869 expect 2275225.833 -1144577.227 accept 50.6799989922 -19.0578134683 expect 2842703.974 -1132076.757 accept 60.3954481899 -18.9092744312 expect 3411747.962 -1147888.925 accept 70.4453750849 -18.1833498293 expect 4016856.952 -1133502.787 accept 80.7669954500 -18.0082544937 expect 4655570.265 -1161429.470 accept 90.3894774181 -17.1937702409 expect 5275686.661 -1150673.533 accept 100.6108192539 -16.6801050032 expect 5961256.060 -1170474.059 accept 110.0973977891 -16.5576038471 expect 6627078.423 -1224759.106 accept 120.1744128824 -16.1385356593 expect 7378167.388 -1276012.928 accept 130.9958002425 -15.9988390562 expect 8242075.942 -1381187.077 accept 140.7561364481 -15.5140276310 expect 9095834.646 -1478681.653 accept 150.6609169826 -14.6810594541 expect 10062376.739 -1592616.483 accept 160.4729986277 -13.9641207869 expect 11146505.848 -1801865.434 accept 170.2580177319 -13.4019318955 expect 12380828.321 -2216425.290 accept 180.9723789714 -13.2206420941 expect -13517837.926 -2963599.665 accept -179.3731911762 -19.9754368483 expect -12847531.905 -3741083.544 accept -169.7161399275 -19.5104972567 expect -11896617.727 -2931048.939 accept -159.8730648764 -19.1040998843 expect -10868152.967 -2367829.374 accept -149.7374470773 -18.6126354884 expect -9867014.825 -1975013.098 accept -139.9375452903 -17.7675516184 expect -8981245.860 -1675376.283 accept -129.7815708228 -17.6801059141 expect -8119555.541 -1510161.646 accept -119.9989025368 -16.8565473881 expect -7357650.403 -1331626.610 accept -109.4668005307 -16.5581522944 expect -6581807.300 -1220164.823 accept -99.7153754334 -15.6910883516 expect -5906017.650 -1094954.342 accept -89.4547033980 -15.0712716331 expect -5224831.274 -1002148.542 accept -79.7184992899 -14.3419936196 expect -4603946.126 -917271.900 accept -69.1303448651 -14.1075269728 expect -3949591.288 -871282.018 accept -59.3174344116 -13.5400304440 expect -3361462.250 -813740.055 accept -49.5741035561 -13.3755321856 expect -2789994.364 -786454.715 accept -39.3784173894 -12.8080837456 expect -2203910.826 -739131.430 accept -29.0461086285 -11.9729370492 expect -1619004.622 -680848.917 accept -19.4469305321 -11.4082175114 expect -1081054.702 -642575.882 accept -9.8174680795 -10.9835914719 expect -544889.181 -615082.754 accept 0.5832005675 -10.8244025391 expect 32351.518 -604970.269 accept 10.1821355116 -10.3112442518 expect 565312.650 -577140.866 accept 20.2673282337 -9.6748015367 expect 1127704.663 -544392.415 accept 30.6144784184 -9.1704395398 expect 1709477.558 -521063.652 accept 40.9538042404 -8.8387995357 expect 2298042.701 -509435.004 accept 50.3542282310 -8.5281632402 expect 2841826.819 -499951.327 accept 60.3333585361 -8.0618147294 expect 3430944.123 -483342.239 accept 70.6491293618 -7.1912559947 expect 4056498.671 -443543.575 accept 80.6385279900 -6.8438270481 expect 4680976.678 -436529.709 accept 90.2779063923 -5.9477536652 expect 5306879.206 -394211.155 accept 100.1664295698 -5.3498071015 expect 5976711.329 -371637.191 accept 110.7526797683 -5.0501900022 expect 6732766.131 -372725.699 accept 120.9395236376 -4.1674482190 expect 7511218.339 -330114.528 accept 130.9122756981 -3.3925202280 expect 8335031.912 -292646.657 accept 140.8622591730 -2.6308107403 expect 9239878.756 -252678.754 accept 150.8989218927 -2.4542899296 expect 10271402.485 -272075.289 accept 160.6447981803 -1.8622854664 expect 11459900.021 -252282.512 accept 170.0641946050 -1.8083280762 expect 12937298.765 -340309.531 accept 180.2204067090 -0.9025887443 expect -15802698.304 -708580.364 accept -179.6574960805 -9.4004926352 expect -14071690.323 -2539687.191 accept -169.9633593449 -9.3485472828 expect -12600921.441 -1621732.042 accept -159.8318959140 -9.0791301932 expect -11229195.403 -1182926.612 accept -149.3318176481 -8.2240809358 expect -10048132.890 -884380.748 accept -139.7502220731 -8.1745353165 expect -9100377.717 -773484.631 accept -129.6865020082 -7.4201521250 expect -8212868.503 -632791.243 accept -119.8341799056 -7.3634864983 expect -7413306.708 -578750.081 accept -109.3372260355 -6.6955324842 expect -6624672.935 -490071.015 accept -99.2316583050 -6.5126588093 expect -5909647.259 -450435.980 accept -89.1084063299 -5.8865293624 expect -5229890.468 -388173.334 accept -79.5816448608 -4.9451058817 expect -4616528.397 -313937.264 accept -69.7454406840 -4.1892409654 expect -4004251.255 -257320.628 accept -59.1123214226 -3.4679775330 expect -3362108.879 -206832.813 accept -49.6901763540 -2.4894793557 expect -2807061.182 -145333.833 accept -39.7692356409 -2.0816660918 expect -2233545.578 -119370.078 accept -29.1740796470 -2.0439733787 expect -1630731.974 -115537.821 accept -19.4550859282 -1.5656815613 expect -1084212.955 -87689.967 accept -9.7922127612 -1.0233548058 expect -544742.779 -57002.643 accept 0.9474400360 -0.4509174844 expect 52675.338 -25070.513 accept 10.5907531926 0.4791919877 expect 589235.938 26699.153 accept 20.4649033892 1.2637472104 expect 1140802.061 70831.592 accept 30.7336324422 1.4750458750 expect 1719011.039 83523.161 accept 40.5647880296 1.7200843296 expect 2279244.812 98755.090 accept 50.0975358484 2.4206654883 expect 2830862.498 141431.370 accept 60.5029363117 2.7469759008 expect 3445462.137 164373.737 accept 70.2466016765 3.0425721977 expect 4035802.541 187111.823 accept 80.9459783007 3.1839332730 expect 4704897.806 203036.380 accept 90.5736386070 3.8575317925 expect 5329437.218 255822.534 accept 100.2061055405 4.6282142532 expect 5980767.943 321504.886 accept 110.3986145890 5.0514461622 expect 6706729.320 371990.508 accept 120.2464205180 5.7344268609 expect 7451933.549 451953.904 accept 130.8487160288 6.0228137911 expect 8319391.922 519216.608 accept 140.7982222585 6.8874824898 expect 9210050.487 660196.582 accept 150.4954910508 7.7970420656 expect 10177774.848 854370.803 accept 160.4294052652 8.2748648014 expect 11325245.938 1096444.978 accept 170.1405366440 9.1299598915 expect 12640596.907 1598916.038 accept 180.3816637148 9.5293212197 expect -14048784.308 2552595.319 accept -179.7984994410 0.1294010891 expect -16146197.188 164013.021 accept -169.9075691637 0.6099770177 expect -12921454.488 114297.725 accept -159.8158750237 0.7517410096 expect -11353744.941 99828.675 accept -149.2779203136 0.9860535478 expect -10098753.673 106507.361 accept -139.0081254157 1.7045245488 expect -9066221.814 160142.630 accept -129.4952290080 2.3401856085 expect -8216193.058 199202.767 accept -119.6801874031 2.7438994101 expect -7415046.859 215250.709 accept -109.8061814794 3.3602853603 expect -6666538.461 246453.448 accept -99.4072778605 4.2027372999 expect -5926167.742 290710.723 accept -89.4794192866 4.3761667210 expect -5256523.244 288879.125 accept -79.0507721337 5.0765421386 expect -4582771.048 321680.244 accept -69.6180300324 6.0161102274 expect -3994695.190 369666.719 accept -59.1757895169 6.6698983501 expect -3363484.198 398396.059 accept -49.5137470044 7.3709595382 expect -2793929.460 431038.915 accept -39.8808038489 7.5057731743 expect -2237570.835 431453.557 accept -29.1954492510 7.5302153709 expect -1630244.834 426646.570 accept -19.1423038522 7.9594801079 expect -1065438.676 446891.077 accept -9.1680642851 8.1530010191 expect -509342.190 455357.512 accept 0.1739948339 8.7651393303 expect 9659.433 488991.424 accept 10.6214035743 9.0690282061 expect 590010.824 507153.456 accept 20.6145954060 9.2785749606 expect 1147299.618 522064.856 accept 30.7022010899 9.4344357510 expect 1714266.145 536235.946 accept 40.6920436024 9.6859857008 expect 2282298.409 558407.819 accept 50.0779641219 10.4703837993 expect 2823489.061 614432.905 accept 60.7862954507 10.8675657776 expect 3453869.707 653748.275 accept 70.7316745409 11.5482616810 expect 4053689.320 714785.183 accept 80.5969392822 11.6377813068 expect 4667778.775 744691.155 accept 90.7414911957 12.5339468232 expect 5319510.529 835981.260 accept 100.1954199623 13.4045312190 expect 5951099.489 935712.315 accept 110.4203894507 14.1556288162 expect 6667631.291 1047159.283 accept 120.0358650247 14.9021123434 expect 7379023.541 1176295.202 accept 130.5020570647 15.6380412243 expect 8205734.023 1344014.139 accept 140.0437745429 16.3999265763 expect 9015988.290 1549714.704 accept 150.1545875606 17.2596103884 expect 9945182.384 1847801.749 accept 160.8486565585 17.2719148256 expect 11052859.415 2202730.719 accept 170.5318144721 17.4322460420 expect 12132375.221 2742993.334 accept 180.3687704920 18.1343689010 expect -13055638.227 3577371.152 accept -179.0206911010 10.9105813395 expect -13789973.226 2666800.487 accept -169.3809207620 11.7944347582 expect -12368824.571 1941584.924 accept -159.6203666385 12.0516777085 expect -11114668.475 1542870.752 accept -149.3198962805 12.6359180213 expect -9971639.315 1349414.366 accept -139.5233350739 13.5860975895 expect -9014835.165 1278723.421 accept -129.7243722634 14.3491243406 expect -8156662.238 1224564.849 accept -119.1501250857 14.5216128511 expect -7314420.668 1138694.060 accept -109.0371133259 15.0539906817 expect -6561854.668 1105088.504 accept -99.9179969843 15.7258631745 expect -5919649.304 1098546.238 accept -89.9773066160 16.3601816158 expect -5252963.299 1091861.766 accept -79.9963611264 16.9875171909 expect -4611500.971 1091043.258 accept -69.8357048214 17.5002106365 expect -3982187.532 1087834.694 accept -59.7680108732 18.2166379428 expect -3376669.886 1102916.942 accept -49.6200663069 18.3027049517 expect -2783116.693 1083573.630 accept -39.6880697045 18.9352023262 expect -2212450.852 1102685.583 accept -29.7767726581 19.4447171460 expect -1652161.342 1118356.380 accept -19.4001109678 19.4907667291 expect -1073007.877 1110251.090 accept -9.2283971215 19.7074346080 expect -509423.729 1116879.960 accept 0.4114648584 20.3715526988 expect 22689.511 1154092.449 accept 10.2069053765 20.5961272596 expect 563089.088 1169589.074 accept 20.2755153863 21.5012785791 expect 1119736.801 1230222.492 accept 30.7133762328 21.6331993543 expect 1701464.196 1250677.021 accept 40.8056510679 21.9458705640 expect 2269913.206 1287337.418 accept 50.1343812652 22.7322724754 expect 2801331.228 1358020.376 accept 60.8279717815 23.6042650645 expect 3421001.843 1446782.481 accept 70.8396198168 23.6161521840 expect 4017785.556 1487799.299 accept 80.0150193753 24.3176168344 expect 4575413.559 1580619.042 accept 90.0092672617 25.2892002351 expect 5198545.082 1711055.973 accept 100.9112248813 25.3488952172 expect 5911825.956 1802460.981 accept 110.6217357170 26.3130477559 expect 6564636.348 1974281.767 accept 120.8513137656 27.2915307690 expect 7281361.160 2187092.016 accept 130.4863483330 27.3717431335 expect 8004199.764 2357290.762 accept 140.8500841767 27.7063050682 expect 8819787.218 2617012.258 accept 150.1012624908 28.3597926319 expect 9571394.994 2952268.869 accept 160.6866246900 28.7569504248 expect 10470505.204 3415900.295 accept 170.4254637193 28.9327804979 expect 11304554.466 3961238.714 accept 180.5169825410 29.4454995234 expect -11997898.864 4629333.323 accept -179.9618334794 20.6361252181 expect -12837832.007 3860315.017 accept -169.0544424157 21.5377240973 expect -11689194.203 3115133.126 accept -159.5209982370 22.3343317585 expect -10685600.977 2702674.102 accept -149.4879824588 23.0136475051 expect -9708605.390 2409089.845 accept -139.0901904339 23.0833518677 expect -8794463.480 2149634.537 accept -129.5571592628 23.7534110208 expect -8003843.252 2027714.928 accept -119.3172537231 24.1047564008 expect -7218181.243 1905508.759 accept -109.6905533732 24.4734381465 expect -6521952.824 1821700.764 accept -99.8910561910 25.1938730946 expect -5845160.963 1781991.443 accept -89.4462296168 25.8863398753 expect -5157803.362 1749387.629 accept -79.8103593109 26.1645676522 expect -4550997.853 1705809.308 accept -69.6977621502 26.6287263876 expect -3933504.408 1682619.842 accept -59.8282049770 27.3537990267 expect -3346444.748 1686544.376 accept -49.1454058737 27.7787492517 expect -2728032.304 1675388.053 accept -39.3139281426 28.6345630085 expect -2168591.423 1702020.943 accept -29.4615301172 29.5694962171 expect -1616690.922 1739665.855 accept -19.8075997700 29.9373943713 expect -1083433.316 1747604.085 accept -9.6080286962 30.8618954465 expect -523974.378 1796510.976 accept 0.2364142241 31.2844282188 expect 12878.465 1820358.353 accept 10.8007276009 32.1455048270 expect 588003.896 1879462.172 accept 20.9914890120 32.9845571828 expect 1143393.118 1945198.869 accept 30.5649011670 33.3185372073 expect 1668534.713 1985021.750 accept 40.9928890043 33.9545285454 expect 2244749.779 2055570.711 accept 50.5960695735 34.5487194112 expect 2781374.579 2130923.541 accept 60.7989209340 34.6635486089 expect 3363023.887 2186540.557 accept 70.4270746519 35.2029582655 expect 3919596.726 2281175.829 accept 80.5548872020 35.6698817700 expect 4518398.282 2388864.639 accept 90.4057879600 36.1979951235 expect 5114553.759 2517121.960 accept 100.9114892728 36.5847249808 expect 5770875.600 2663935.228 accept 110.7309087130 37.4367897060 expect 6394670.813 2868606.494 accept 120.3064304930 38.2603562874 expect 7018617.432 3101989.836 accept 130.7451971478 39.2489093279 expect 7711939.115 3412678.003 accept 140.5750239477 39.4115866274 expect 8403813.025 3690760.565 accept 150.9679439696 39.5896177639 expect 9149846.161 4055027.485 accept 160.6524332599 40.0167951770 expect 9830011.049 4497209.502 accept 170.4722281589 40.1946244182 expect 10510426.457 5006824.562 accept 180.6722342584 40.4624940717 expect -11073707.514 5547471.043 accept -179.2831936865 30.3756797354 expect -11903513.624 4695492.667 accept -169.3418436736 30.6105366204 expect -11096888.315 4057764.336 accept -159.1006283258 31.5893799475 expect -10184786.130 3622256.417 accept -149.1140289956 31.8719516081 expect -9350613.109 3255936.184 accept -139.6996779260 31.9484140590 expect -8599676.794 2977225.067 accept -129.5556705121 32.3449943633 expect -7818577.975 2772332.434 accept -119.9724472555 32.9392845832 expect -7113428.652 2642433.850 accept -109.7343311582 33.1372998541 expect -6404617.901 2502642.905 accept -99.9994915413 33.6225969013 expect -5754979.598 2420019.593 accept -89.2957244981 34.5626482766 expect -5064999.094 2381966.292 accept -79.0486888283 34.5979570645 expect -4437892.568 2298043.032 accept -69.3692667775 34.8321767388 expect -3860329.808 2247797.371 accept -59.5430097857 35.6428903265 expect -3284552.144 2248836.044 accept -49.1028389556 36.0212581738 expect -2689697.467 2226461.965 accept -39.5707710224 36.0991805410 expect -2157256.671 2196683.027 accept -29.2950741715 36.7864032717 expect -1588948.254 2214928.423 accept -19.8971059232 37.5191207820 expect -1075080.881 2246281.883 accept -9.1855199225 38.0327790292 expect -495017.437 2268788.188 accept 0.3119584346 38.1079667572 expect 16801.964 2270513.428 accept 10.9783425364 38.7495700245 expect 590921.384 2319580.204 accept 20.7896762683 39.3106928548 expect 1119567.208 2371677.736 accept 30.1643265779 40.2243862141 expect 1625278.990 2456916.428 accept 40.5328985021 41.0696713596 expect 2188008.492 2551119.506 accept 50.2300300588 41.3865813447 expect 2721620.789 2616277.410 accept 60.6521695116 42.3133443814 expect 3298047.285 2744030.130 accept 70.7309222598 43.1274592749 expect 3863356.586 2878383.982 accept 80.8866702938 43.7702855800 expect 4443854.438 3018951.902 accept 90.5499599785 44.5851564761 expect 5002600.615 3190179.530 accept 100.5821513570 44.6219279790 expect 5608351.970 3324185.783 accept 110.0283698987 45.0603376392 expect 6183798.502 3510751.426 accept 120.9059581322 45.6167638758 expect 6858556.379 3768914.576 accept 130.8382094225 46.2623868954 expect 7479609.418 4061298.725 accept 140.3050870951 46.3222134245 expect 8098901.115 4333302.419 accept 150.7692866141 46.9256636829 expect 8759282.574 4745456.067 accept 160.6423483126 47.3983214513 expect 9371550.773 5189253.049 accept 170.3660263984 48.1704941243 expect 9921744.591 5715878.904 accept 180.1728485128 48.3869676380 expect -10452810.767 6233145.886 accept -179.3366303542 40.5764857623 expect -11064985.137 5557446.981 accept -169.9016120813 40.9858722485 expect -10415017.640 5046984.188 accept -159.8421069000 41.3352033138 expect -9693683.857 4584354.161 accept -149.9878180879 41.8238911228 expect -8970272.939 4230268.129 accept -139.8603273594 42.3826076660 expect -8236029.698 3946841.156 accept -129.0166066782 42.7333243644 expect -7482247.804 3687948.837 accept -119.3388991582 43.6373394362 expect -6814813.949 3556870.147 accept -109.3805129308 43.9116610208 expect -6170341.281 3398585.005 accept -99.7947564839 44.3361622416 expect -5565812.101 3288505.423 accept -89.9466466666 45.2719659306 expect -4955176.241 3240762.956 accept -79.0227489515 46.1464400004 expect -4302718.131 3195776.905 accept -69.8148943004 46.5943287210 expect -3771570.667 3149477.147 accept -59.7413792811 47.1807640935 expect -3202028.794 3121345.514 accept -49.8815279751 47.1898937016 expect -2660293.312 3061471.431 accept -39.6116669497 47.2588276162 expect -2103308.236 3017259.465 accept -29.2023113842 48.0824833396 expect -1541812.718 3044777.159 accept -19.5149453395 48.6918139540 expect -1026306.480 3068551.199 accept -9.6336458263 49.0434719530 expect -505461.907 3081586.975 accept 0.4543975995 49.7836456546 expect 23777.504 3136347.935 accept 10.9700141403 50.3323164289 expect 573327.428 3187475.308 accept 20.2945040946 50.5294422839 expect 1061285.060 3219471.341 accept 30.9938167603 50.9444135429 expect 1622296.392 3284285.467 accept 40.8850179873 51.0892523800 expect 2145326.320 3336819.857 accept 50.8160896333 51.7186327718 expect 2670455.247 3444230.679 accept 60.5975018363 51.7472739987 expect 3198356.358 3513374.312 accept 70.9211780937 52.2961472542 expect 3755656.007 3649240.500 accept 80.4886876286 52.4940883205 expect 4283198.775 3765359.201 accept 90.6063621158 52.8917619975 expect 4845216.723 3926850.931 accept 100.0213726456 53.0072065012 expect 5381474.017 4075643.010 accept 110.7666710262 53.1761320615 expect 6002387.050 4279156.043 accept 120.4133749558 53.6140202991 expect 6556934.536 4522304.309 accept 130.4689014096 54.3464457214 expect 7124048.584 4841940.061 accept 140.1319502152 55.1999540459 expect 7653482.073 5205936.544 accept 150.0406833955 55.2259750645 expect 8231914.631 5536917.537 accept 160.6632656727 55.6152942863 expect 8813145.718 5981687.838 accept 170.1022885868 55.6436461375 expect 9328803.345 6391660.249 accept 180.5533384236 56.5237207562 expect -9735738.829 6914894.208 accept -179.2247622429 50.9111169957 expect -10208607.447 6413665.425 accept -169.7924972767 51.7536923319 expect -9617111.948 6014189.958 accept -159.6893113052 52.2420602240 expect -8992940.568 5611018.295 accept -149.2250378095 52.6608417101 expect -8338627.076 5249471.462 accept -139.5235597836 52.6880191938 expect -7748063.996 4931880.210 accept -129.8722920081 52.7891165561 expect -7157279.641 4668965.541 accept -119.6585401358 53.3027824621 expect -6523737.589 4474430.220 accept -109.4717350642 53.5457403772 expect -5914835.972 4290989.912 accept -99.3049585904 53.8711625087 expect -5317309.229 4147683.328 accept -89.1067456005 53.9601597136 expect -4736479.726 4008096.136 accept -79.6629562504 54.6547978698 expect -4196286.812 3958062.567 accept -69.8279241005 55.2371531832 expect -3648862.266 3910629.370 accept -59.9635334446 55.6192322641 expect -3113545.379 3860627.969 accept -49.9264269173 56.5572332986 expect -2571251.312 3877332.211 accept -39.0317197762 56.9105729373 expect -2000116.599 3848938.560 accept -29.8485414955 57.1405754683 expect -1524573.629 3831116.411 accept -19.7173893031 57.8895638096 expect -1001946.186 3871323.208 accept -9.5284598326 58.3169856731 expect -482748.075 3893995.092 accept 0.5519708680 59.1698787655 expect 27843.757 3971499.805 accept 10.3102576934 59.9070126591 expect 518383.957 4051426.264 accept 20.2471682871 60.1178484569 expect 1017884.749 4092029.150 accept 30.7186291790 60.9667316568 expect 1539950.301 4213756.217 accept 40.5361666024 61.0726031598 expect 2035176.439 4271402.857 accept 50.1593218026 61.5209991783 expect 2518306.294 4378497.037 accept 60.6426706803 61.6933237333 expect 3051461.747 4479017.707 accept 70.0635629430 62.5101492783 expect 3519070.146 4659116.189 accept 80.7525125683 62.7158368686 expect 4066565.729 4805766.003 accept 90.3486210746 63.2666959744 expect 4549151.501 5000629.808 accept 100.3103261370 63.6630728713 expect 5055042.336 5206928.884 accept 110.4333486366 64.5625075877 expect 5544588.666 5503654.246 accept 120.2948792100 65.1058556815 expect 6028251.873 5782340.030 accept 130.5927832047 65.6748652993 expect 6522940.319 6105850.437 accept 140.6012624076 66.3132526636 expect 6983093.737 6463380.696 accept 150.8560042350 67.2695080089 expect 7407700.123 6899834.886 accept 160.4312759692 67.7825785445 expect 7809736.690 7288594.640 accept 170.6182278472 67.8589725624 expect 8257493.223 7675010.400 accept 180.6346540849 67.9886371340 expect -8615169.523 8037735.613 accept -179.3862724658 60.0765397412 expect -9409858.860 7237943.395 accept -169.8319368721 60.7048897911 expect -8892462.330 6874089.420 accept -159.7586035106 60.8099423764 expect -8373658.128 6477781.193 accept -149.4451039042 60.8141416010 expect -7830654.586 6105061.877 accept -139.0047357806 61.2863951253 expect -7238746.216 5824802.025 accept -129.8203349111 61.6531963428 expect -6721103.700 5609206.409 accept -119.9476298931 62.1392105751 expect -6163537.132 5422258.227 accept -109.5579719203 62.6892094638 expect -5582691.055 5264366.147 accept -99.2658471038 63.6397776749 expect -5001335.481 5186237.501 accept -89.3190408834 64.2596249008 expect -4462613.903 5101850.571 accept -79.8712042695 64.9388669541 expect -3957350.660 5053673.793 accept -69.5143458832 64.9984151350 expect -3431555.358 4940124.081 accept -59.7549744076 65.5198053592 expect -2930531.346 4907235.702 accept -49.4522584709 65.6036762180 expect -2417789.843 4834516.760 accept -39.6862901889 66.0522555435 expect -1930302.252 4825742.348 accept -29.0676277333 66.9411073706 expect -1402365.485 4882358.630 accept -19.2947838600 67.6760455583 expect -924758.269 4940769.295 accept -9.8908486233 68.4759462496 expect -470791.969 5023788.451 accept 0.7684849115 68.4820083161 expect 36570.245 5017696.478 accept 10.9619070788 69.1271846096 expect 518988.202 5110914.008 accept 20.8669367778 69.4597522731 expect 985678.393 5178041.292 accept 30.9015874823 70.2228485919 expect 1450977.848 5320350.646 accept 40.3644592677 70.4447947660 expect 1893313.797 5401286.949 accept 50.4426463863 70.9370001765 expect 2357733.911 5540352.544 accept 60.8571701571 71.2042128565 expect 2840863.185 5668499.100 accept 70.2207367933 71.7513035300 expect 3263071.274 5846454.476 accept 80.9197701425 72.2949102709 expect 3742012.412 6060269.554 accept 90.9968622399 72.8817626201 expect 4182037.591 6296350.257 accept 100.6140322356 73.0673811891 expect 4615350.939 6484139.751 accept 110.0937440863 73.5055307300 expect 5020529.626 6730333.834 accept 120.1366082758 74.4237054204 expect 5401515.154 7088596.371 accept 130.7310123929 74.8225035758 expect 5829427.956 7399976.843 accept 140.7557697839 75.3904414554 expect 6198183.044 7749882.172 accept 150.8261707368 75.4797965998 expect 6601790.754 8045032.409 accept 160.3617186765 76.0800713976 expect 6904851.750 8427523.609 accept 170.3723095047 76.9487430385 expect 7160097.253 8883978.785 accept 180.8353501206 77.0774046082 expect -7451033.788 9196865.430 accept -179.7332624578 70.4393887237 expect -8352576.455 8331537.300 accept -169.3475485875 71.1990434220 expect -7846291.115 8032842.415 accept -159.2878573247 71.7560324305 expect -7364104.304 7757743.784 accept -149.0633836490 72.7063403889 expect -6827251.647 7569191.962 accept -139.6942131577 73.5163807564 expect -6341247.119 7423166.084 accept -129.8134586050 73.9643420027 expect -5867435.003 7238589.421 accept -119.5111667574 74.4925642590 expect -5368260.354 7086271.451 accept -109.3071655658 74.6108323823 expect -4906478.988 6896010.407 accept -99.5978241183 75.1275985390 expect -4438705.543 6806711.516 accept -89.2137798701 75.6445071712 expect -3946153.966 6730726.096 accept -79.1346028255 76.0354738901 expect -3479800.008 6660516.066 accept -69.0638837521 76.5148306463 expect -3014377.593 6628057.905 accept -59.1693658687 77.4423799967 expect -2543880.527 6705578.610 accept -49.4634180765 78.1864565763 expect -2099555.264 6773693.535 accept -39.8508153072 78.5203765703 expect -1681563.114 6777405.489 accept -29.6114412219 78.7797877191 expect -1243660.143 6778541.162 accept -19.1867860823 79.6454776348 expect -792468.866 6932699.289 accept -9.9582630982 80.1780113525 expect -406784.347 7037337.973 accept 0.8045877956 80.9823584569 expect 32275.315 7229013.962 accept 10.6198537389 81.4079136814 expect 421565.709 7348340.200 accept 20.7119981828 82.2150056342 expect 804489.400 7594469.330 accept 30.3505244935 82.6478465607 expect 1163485.615 7757650.909 accept 40.8655993799 82.9850228503 expect 1548903.569 7915659.478 accept 50.7222864861 83.6349635667 expect 1878353.123 8190395.486 accept 60.9484292190 84.1578297365 expect 2209073.061 8452785.649 accept 70.9281849579 84.2418711822 expect 2556434.364 8578888.109 accept 80.6700039410 84.7042458603 expect 2843072.410 8854459.520 accept 90.2195191862 85.4123304310 expect 3062193.052 9248148.617 accept 100.8308186795 86.2993989176 expect 3233512.836 9778762.722 accept 110.2610774864 87.2488149984 expect 3271018.801 10404221.588 accept 120.0282638556 87.9552070544 expect 3287869.350 10991486.485 accept 130.8896115077 88.8068669405 expect 3109942.957 11856621.688 accept 140.8963110473 89.7228156694 expect 2304894.417 13439579.058 accept 150.4318097094 90.4391164019 expect failure errno coord_transfm_invalid_coord accept 160.7127363327 90.6605815936 expect failure errno coord_transfm_invalid_coord accept 170.7492804294 90.8176634524 expect failure errno coord_transfm_invalid_coord accept 180.4583398460 90.9109976584 expect failure errno coord_transfm_invalid_coord accept -179.7591323884 80.4424115493 expect -6903393.952 9786682.886 accept -169.8822070628 80.7500588713 expect -6531575.755 9548129.356 accept -159.9945746863 80.9496010459 expect -6169272.314 9309595.559 accept -149.9417464353 81.4902616414 expect -5735389.987 9165799.932 accept -139.6978190662 82.2239127957 expect -5260169.587 9097892.645 accept -129.3012716885 83.0429415409 expect -4766013.283 9092128.730 accept -119.1898998617 83.3279294780 expect -4372133.574 8977351.665 accept -109.9862107641 83.5308131176 expect -4021828.937 8875471.473 accept -99.5860433196 84.1789855873 expect -3565728.493 8919632.792 accept -89.2677089488 84.1934914271 expect -3206581.559 8779174.807 accept -79.3268775666 84.9722014413 expect -2762678.704 8940646.845 accept -69.8212102616 85.0076410054 expect -2434287.034 8852607.599 accept -59.3204702001 85.5856170742 expect -2014364.675 8995544.515 accept -49.6961911803 86.4721128657 expect -1603812.213 9344086.957 accept -39.6159279805 86.7872101641 expect -1252848.694 9454262.547 accept -29.6502801920 87.1555761043 expect -912288.029 9626048.356 accept -19.4496938483 87.5951755895 expect -575538.601 9883989.014 accept -9.7937838350 88.5280609570 expect -257529.241 10651674.770 accept 0.9510780379 88.6715513574 expect 24396.904 10799028.318 accept 10.4788996031 89.0882607425 expect 245024.182 11333021.357 accept 20.0454282778 89.3798616914 expect 425823.124 11838688.204 accept 30.8762585995 89.9894216623 expect 237234.260 14954822.615 accept 40.2272544657 90.2854737833 expect failure errno coord_transfm_invalid_coord accept 50.3342208278 90.6201781373 expect failure errno coord_transfm_invalid_coord accept 60.0620171885 91.1323497706 expect failure errno coord_transfm_invalid_coord accept 70.7871678571 91.2021231110 expect failure errno coord_transfm_invalid_coord accept 80.7237355733 91.8207335323 expect failure errno coord_transfm_invalid_coord accept 90.5359055804 91.8495346522 expect failure errno coord_transfm_invalid_coord accept 100.2370378259 92.3201685216 expect failure errno coord_transfm_invalid_coord accept 110.7018248262 92.7082390660 expect failure errno coord_transfm_invalid_coord accept 120.4791498907 92.8320642395 expect failure errno coord_transfm_invalid_coord accept 130.7292413039 93.7863129954 expect failure errno coord_transfm_invalid_coord accept 140.1002623482 94.2304861566 expect failure errno coord_transfm_invalid_coord accept 150.7401582820 94.4002034978 expect failure errno coord_transfm_invalid_coord accept 160.9690930362 95.0432445572 expect failure errno coord_transfm_invalid_coord accept 170.5238000008 95.9332496636 expect failure errno coord_transfm_invalid_coord accept 180.5593997844 96.9295538910 expect failure errno coord_transfm_invalid_coord accept -179.2788799656 89.7588830795 expect -2720982.745 13966946.704 accept -169.2920835775 90.4241930348 expect failure errno coord_transfm_invalid_coord accept -159.9895526197 91.4107597532 expect failure errno coord_transfm_invalid_coord accept -149.2463523987 92.1662912669 expect failure errno coord_transfm_invalid_coord accept -139.5441662785 93.0270602663 expect failure errno coord_transfm_invalid_coord accept -129.2489121030 93.8575161591 expect failure errno coord_transfm_invalid_coord accept -119.2218964968 94.3245277139 expect failure errno coord_transfm_invalid_coord accept -109.6391371233 94.8605218216 expect failure errno coord_transfm_invalid_coord accept -99.7022656135 95.4188372117 expect failure errno coord_transfm_invalid_coord accept -89.9236110047 96.1459344102 expect failure errno coord_transfm_invalid_coord accept -79.3053114467 96.4284727639 expect failure errno coord_transfm_invalid_coord accept -69.9403123372 97.1204524330 expect failure errno coord_transfm_invalid_coord accept -59.8919954903 98.0976036625 expect failure errno coord_transfm_invalid_coord accept -49.4360361183 99.0132534146 expect failure errno coord_transfm_invalid_coord accept -39.1296215520 99.7082663882 expect failure errno coord_transfm_invalid_coord accept -29.7429317093 100.3804719805 expect failure errno coord_transfm_invalid_coord accept -19.9518617483 100.7090523427 expect failure errno coord_transfm_invalid_coord accept -9.8094666546 100.7731576636 expect failure errno coord_transfm_invalid_coord accept 0.6789399156 101.1890038152 expect failure errno coord_transfm_invalid_coord accept 10.3002789517 101.6303167682 expect failure errno coord_transfm_invalid_coord accept 20.3122591998 101.9746447499 expect failure errno coord_transfm_invalid_coord accept 30.8403181671 102.1868812356 expect failure errno coord_transfm_invalid_coord accept 40.5913833272 102.9224326125 expect failure errno coord_transfm_invalid_coord accept 50.4094599185 103.4226263618 expect failure errno coord_transfm_invalid_coord accept 60.2807542048 103.6337815648 expect failure errno coord_transfm_invalid_coord accept 70.1179652096 103.9375646519 expect failure errno coord_transfm_invalid_coord accept 80.0709906538 104.9002368302 expect failure errno coord_transfm_invalid_coord accept 90.4905546467 104.9051484801 expect failure errno coord_transfm_invalid_coord accept 100.8677613905 105.1778053719 expect failure errno coord_transfm_invalid_coord accept 110.7875504667 106.1651152124 expect failure errno coord_transfm_invalid_coord accept 120.3531685812 106.2777498204 expect failure errno coord_transfm_invalid_coord accept 130.5786379336 106.8735960149 expect failure errno coord_transfm_invalid_coord accept 140.2390732913 107.1035922681 expect failure errno coord_transfm_invalid_coord accept 150.2230766093 107.9665006223 expect failure errno coord_transfm_invalid_coord accept 160.0106199737 108.8731447468 expect failure errno coord_transfm_invalid_coord accept 170.2666681817 109.4591245928 expect failure errno coord_transfm_invalid_coord accept 180.2003062924 109.9750225424 expect failure errno coord_transfm_invalid_coord ------------------------------------------------------------------------------- # Test inverse ------------------------------------------------------------------------------- operation +proj=adams_ws2 +ellps=WGS84 ------------------------------------------------------------------------------- direction forward tolerance 1 mm accept 0 0 expect 0 0 roundtrip 1 accept 40 60 expect 2021909.611 4162291.966 roundtrip 1 accept 179.999 0 expect 16686159.356 0.000 roundtrip 1 accept -179.999 0 expect -16686159.356 0.000 roundtrip 1 accept 0 89.999 expect 0 15743336.122 roundtrip 1 accept 0 -89.999 expect 0 -15743336.122 roundtrip 1 # Results a bit different on x86 tolerance 3 mm accept 179.999 89.999 expect 693320.704 16030515.906 roundtrip 1 accept 179.999 -89.999 expect 693320.702 -16030515.904 roundtrip 1 accept -179.999 89.999 expect -693320.702 16030515.904 roundtrip 1 # This test fails with "roundtrip deviation: inf mm, expected: 3.000000 mm" on MacOS 13 x64 / clang 16.0.6 #accept -179.999 -89.999 #expect -693320.704 -16030515.906 #roundtrip 1 direction inverse accept 0.000005801264 16722285.492330472916 expect failure errno coord_transfm_outside_projection_domain proj-9.6.0/test/gie/axisswap.gie000664 001754 001755 00000005004 14764566077 016470 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- Tests for the axisswap operation ------------------------------------------------------------------------------- operation proj=axisswap order=1,2,3,4 tolerance 0.000001 m accept 1 2 3 4 expect 1 2 3 4 roundtrip 100 operation proj=axisswap order=4,3,2,1 tolerance 0.000001 m accept 1 2 3 4 expect 4 3 2 1 roundtrip 100 operation proj=axisswap order=-1,-2,-3,-4 tolerance 0.000001 m accept 1 2 3 4 expect -1 -2 -3 -4 roundtrip 100 operation proj=axisswap order=1,2,-3,4 tolerance 0.000001 m accept 1 2 3 4 expect 1 2 -3 4 roundtrip 100 operation proj=axisswap order=-1,2,3,4 tolerance 0.000001 m accept 1 2 3 4 expect -1 2 3 4 roundtrip 100 operation proj=axisswap order=1,2,3,-4 tolerance 0.000001 m accept 1 2 3 4 expect 1 2 3 -4 roundtrip 100 operation proj=axisswap order=-2,1 tolerance 0.000001 m accept 1 2 3 4 expect -2 1 3 4 roundtrip 100 operation proj=axisswap order=3,-2,1 tolerance 0.000001 m accept 1 2 3 4 expect 3 -2 1 4 roundtrip 100 operation proj=axisswap axis=neu tolerance 0 m accept 1 2 3 expect 2 1 3 # when using the +axis parameter we specify the order of the INPUT coordinate, # as opposed to +order which relates to the OUTPUT coordinate. Here we test # that n(1), u(2) and e(3) are swapped correctly to enu ordering. operation proj=axisswap axis=nue tolerance 0 m accept 1 2 3 expect 2 3 1 operation proj=axisswap axis=swd tolerance 0.000001 m accept 1 2 3 4 expect -2 -1 -3 4 operation proj=pipeline \ step proj=latlong +ellps=WGS84 \ step proj=axisswap \ order=1,2,3,4 tolerance 0.00001 m accept 12 55 0 0 expect 12 55 0 0 operation proj=pipeline \ step proj=latlong +ellps=WGS84 \ step proj=axisswap \ order=-2,-1,3,4 tolerance 0.00001 m accept 12 55 0 0 expect -55 -12 0 0 operation proj=axisswap order=1,2,3,4 axis=enu expect failure pjd_err_axis operation proj=axisswap expect failure pjd_err_axis operation proj=axisswap order=1,2,1,4 expect failure pjd_err_axis operation proj=axisswap order=2,3 expect failure pjd_err_axis operation proj=axisswap order=2,3,4 expect failure pjd_err_axis operation proj=axisswap order=1,2,3,5 expect failure pjd_err_axis proj-9.6.0/test/gie/builtins.gie000664 001754 001755 00000751404 14764566077 016476 0ustar00e012349e012349000000 000000 =============================================================================== Test material, mostly converted from selftest entries in PJ_xxx.c Most of this material was autogenerated, and does not attempt to exercise corner cases etc. See more_builtins.gie for some test cases with a more human touch. =============================================================================== # First test non strict gie operation +proj=aea +ellps=GRS80 +lat_1=0 +lat_2=2 tolerance 0.1 mm accept 2 1 expect 222571.608757106 110653.326743030 unknown_keyword =============================================================================== # Albers Equal Area # Conic Sph&Ell # lat_1= lat_2= =============================================================================== ------------------------------------------------------------------------------- operation +proj=aea +ellps=GRS80 +lat_1=0 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222571.608757106 110653.326743030 accept 2 -1 expect 222706.306508391 -110484.267144400 accept -2 1 expect -222571.608757106 110653.326743030 accept -2 -1 expect -222706.306508391 -110484.267144400 direction inverse accept 200 100 expect 0.001796631 0.000904369 accept 200 -100 expect 0.001796630 -0.000904370 accept -200 100 expect -0.001796631 0.000904369 accept -200 -100 expect -0.001796630 -0.000904370 ------------------------------------------------------------------------------- operation +proj=aea +R=6400000 +lat_1=0 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223334.085170885 111780.431884472 accept 2 -1 expect 223470.154991687 -111610.339430990 accept -2 1 expect -223334.085170885 111780.431884472 accept -2 -1 expect -223470.154991687 -111610.339430990 direction inverse accept 200 100 expect 0.001790494 0.000895246 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790494 0.000895246 accept -200 -100 expect -0.001790493 -0.000895247 operation +proj=aea +ellps=GRS80 +lat_1=900 expect failure errno invalid_op_illegal_arg_value operation +proj=aea +ellps=GRS80 +lat_2=900 expect failure errno invalid_op_illegal_arg_value operation +proj=aea +R=6400000 +lat_1=1 +lat_2=-1 expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=aea +a=9999999 +b=.9 +lat_2=1 ------------------------------------------------------------------------- expect failure errno invalid_op_illegal_arg_value =============================================================================== # Azimuthal Equidistant # Azi, Sph&Ell # lat_0 guam =============================================================================== ------------------------------------------------------------------------------- # Test equatorial aspect of the spherical azimuthal equidistant. Test data from # Snyder pp. 196-197, table 30. ------------------------------------------------------------------------------- operation +proj=aeqd +R=1 +lat_0=0 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 0 roundtrip 100 accept 0 90 expect 0 1.57080 roundtrip 100 accept 10 80 expect 0.04281 1.39829 roundtrip 100 accept 40 30 expect 0.62896 0.56493 roundtrip 100 accept 90 0 expect 1.57080 0 roundtrip 100 accept 90 90 expect 0 1.57080 roundtrip 100 # point opposite projection center is undefined accept 180 0 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test equatorial aspect of the ellipsoidal azimuthal equidistant. Test data from # Snyder pp. 196-197, table 30. ------------------------------------------------------------------------------- operation +proj=aeqd +ellps=GRS80 +lat_0=0 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 90 expect 0 10001965.7292 roundtrip 100 accept 0 0 expect 0 0 roundtrip 100 accept 90 0 expect 10_018_754.1714 0 roundtrip 100 accept 90 0 expect 10_018_754.1714 0 roundtrip 100 accept 45 45 expect 3_860_398.3783 5_430_089.0490 roundtrip 100 # Test oblique aeqd with point very close lon_0, lat_0, on a perfect sphere operation +proj=aeqd +a=6371008.771415 +b=6371008.771415 +lat_0=30.2345 +lon_0=-120.2345 tolerance 1 mm accept -120.234501 30.234501 expect -0.096 0.111 roundtrip 1 accept -120.2345 30.2345 expect 0.000 0.000 roundtrip 1 # Same on an ellipsoid very close to the sphere operation +proj=aeqd +a=6371008.771415 +b=6371008.771414 +lat_0=30.2345 +lon_0=-120.2345 tolerance 1 mm accept -120.234501 30.234501 expect -0.096 0.111 roundtrip 1 accept -120.2345 30.2345 expect 0.000 0.000 roundtrip 1 ------------------------------------------------------------------------------- # Test the Modified Azimuthal Equidistant / EPSG 9832. Test data from the EPSG # Guidance Note 7 part 2, April 2018, p. 85 ------------------------------------------------------------------------------- operation +proj=aeqd +ellps=clrk66 +lat_0=9.546708325068591 +lon_0=138.1687444500492 +x_0=40000.00 +y_0=60000.00 ------------------------------------------------------------------------------- tolerance 1 cm accept 138.19303001104092 9.596525859439623 expect 42665.90 65509.82 roundtrip 100 direction inverse accept 42665.90 65509.82 expect 138.19303001104092 9.596525859439623 ------------------------------------------------------------------------------- # Test the azimuthal equidistant modified for Guam. Test data from the EPSG # Guidance Note 7 part 2, September 2016, p. 85 ------------------------------------------------------------------------------- operation +proj=aeqd +guam +ellps=clrk66 +x_0=50000.00 +y_0=50000.00 \ +lon_0=144.74875069444445 +lat_0=13.47246633333333 ------------------------------------------------------------------------------- tolerance 1 cm accept 144.635331291666660 13.33903846111111 expect 37712.48 35242.00 roundtrip 100 direction inverse accept 37712.48 35242.00 expect 144.635331291666660 13.33903846111111 ------------------------------------------------------------------------------- # Test northern polar aspect of the ellipsoidal azimuthal equidistant. Test data # from Snyder p. 198, table 31. ------------------------------------------------------------------------------- operation +proj=aeqd +ellps=intl +lat_0=90 ------------------------------------------------------------------------------- tolerance 0.1 m accept 0 90 expect 0 0 roundtrip 100 accept 0 85 expect 0 -558_485.4 roundtrip 100 accept 0 80 expect 0 -1_116_885.2 roundtrip 100 accept 0 70 expect 0 -2_233_100.9 roundtrip 100 ------------------------------------------------------------------------------- # Test southern polar aspect of the ellipsoidal azimuthal equidistant. Test data # from Snyder p. 198, table 31. ------------------------------------------------------------------------------- operation +proj=aeqd +ellps=intl +lat_0=-90 ------------------------------------------------------------------------------- tolerance 0.1 m accept 0 -90 expect 0 0 roundtrip 100 accept 0 -85 expect 0 558_485.4 roundtrip 100 accept 0 -80 expect 0 1_116_885.2 roundtrip 100 accept 0 -70 expect 0 2_233_100.9 roundtrip 100 ------------------------------------------------------------------------------- # Test northern polar aspect of the spherical azimuthal equidistant. ------------------------------------------------------------------------------- operation +proj=aeqd +R=1 +lat_0=90 ------------------------------------------------------------------------------- tolerance 0.1 m accept 0 0 expect 0 -1.5708 roundtrip 100 accept 0 90 expect 0 0 roundtrip 100 accept 90 90 expect 0 0 roundtrip 100 accept 90 0 expect 1.5708 0 roundtrip 100 accept 45 45 expect 0.5554 -0.5554 roundtrip 100 #point opposite of projection center is undefined accept 0 -90 expect failure errno coord_transfm_outside_projection_domain direction inverse accept 0 5 expect failure errno coord_transfm_outside_projection_domain accept 0 3.14159265359 expect 180 -90 ------------------------------------------------------------------------------- # Test sourthnern polar aspect of the spherical azimuthal equidistant. ------------------------------------------------------------------------------- operation +proj=aeqd +R=1 +lat_0=-90 ------------------------------------------------------------------------------- tolerance 0.1 m accept 0 0 expect 0 1.5708 roundtrip 100 accept 0 -90 expect 0 0 roundtrip 100 accept 90 -90 expect 0 0 roundtrip 100 accept 90 0 expect 1.5708 0 roundtrip 100 accept 45 -45 expect 0.5554 0.5554 roundtrip 100 #point opposite of projection center is undefined accept 0 90 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test oblique aspect of the spherical azimuthal equidistant. ------------------------------------------------------------------------------- operation +proj=aeqd +R=1 +lat_0=45 ------------------------------------------------------------------------------- tolerance 0.1 m accept 0 0 expect 0.0000 -0.7854 roundtrip 100 accept 0 45 expect 0.0000 0.0000 roundtrip 100 accept 0 90 expect 0.0000 0.7854 roundtrip 100 accept 90 0 expect 1.5708 -0.0000 roundtrip 100 accept 90 45 expect 0.8550 0.6046 #roundtrip 100 # roundtrip performs badly for this test on some platforms accept 90 90 expect 0.0000 0.7854 roundtrip 100 ------------------------------------------------------------------------------- # Test oblique aspect of the ellipsoidal azimuthal equidistant. ------------------------------------------------------------------------------- operation +proj=aeqd +ellps=GRS80 +lat_0=45 ------------------------------------------------------------------------------- tolerance 0.1 m accept 0 0 expect 0.0000 -4984944.3779 roundtrip 100 accept 0 45 expect 0.0000 0.0000 roundtrip 100 accept 0 90 expect 0.0000 5017021.3514 roundtrip 100 accept 90 0 expect 10010351.5666 26393.3781 roundtrip 100 accept 90 45 expect 5461910.9128 3863514.7047 roundtrip 100 accept 90 90 expect 0.0000 5017021.3514 roundtrip 100 =============================================================================== # Airy # Misc Sph, no inv. # no_cut lat_b= =============================================================================== ------------------------------------------------------------------------------- operation +proj=airy +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 189109.886908621 94583.752387504 accept 2 -1 expect 189109.886908621 -94583.752387504 accept -2 1 expect -189109.886908621 94583.752387504 accept -2 -1 expect -189109.886908621 -94583.752387504 ------------------------------------------------------------------------------- # Test north polar aspect ------------------------------------------------------------------------------- operation +proj=airy +R=1 +lat_0=90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 -1.3863 accept 0 90 expect 0 0 accept 0 -90 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test south polar aspect ------------------------------------------------------------------------------- operation +proj=airy +R=1 +lat_0=-90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 1.3863 accept 0 -90 expect 0 0 accept 0 90 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test oblique aspect ------------------------------------------------------------------------------- operation +proj=airy +R=1 +lon_0=45 +lat_0=45 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 45 45 expect 0 0 accept 0 0 expect -0.7336 -0.5187 accept -45 -45 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test that coordinates on the opposing hemisphere are projected when using # +no_cut. ------------------------------------------------------------------------------- operation +proj=airy +R=1 +lat_0=-90 +no_cut ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 10 expect 0 1.5677 ------------------------------------------------------------------------------- # Test the +lat_b parameter ------------------------------------------------------------------------------- operation +proj=airy +R=1 +lat_b=89.99999999 # check tolerance ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 0 ------------------------------------------------------------------------------- operation +proj=airy +R=1 +lat_b=30 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 0 accept 25 25 expect 0.3821 0.4216 ------------------------------------------------------------------------------- operation +proj=airy +R=1 +no_cut ------------------------------------------------------------------------------- accept -180 0 expect failure errno coord_transfm_outside_projection_domain =============================================================================== # Aitoff # Misc Sph =============================================================================== ------------------------------------------------------------------------------- operation +proj=aitoff +R=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223379.458811696 111706.742883853 accept 2 -1 expect 223379.458811696 -111706.742883853 accept -2 1 expect -223379.458811696 111706.742883853 accept -2 -1 expect -223379.458811696 -111706.742883853 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Mod. Stereographic of Alaska # Azi(mod) =============================================================================== ------------------------------------------------------------------------------- operation +proj=alsk +ellps=clrk66 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -160.000000000 55.000000000 expect -513253.146950842 -968928.031867943 accept -160.000000000 70.000000000 expect -305001.133897637 687494.464958651 accept -145.000000000 70.000000000 expect 266454.305088600 683423.477493031 accept -145.000000000 60.000000000 expect 389141.322439244 -423913.251230397 direction inverse accept -500000.000000000 -950000.000000000 expect -159.830804303 55.183195262 accept -305000.000000000 700000.000000000 expect -160.042203156 70.111086864 accept 250000.000000000 700000.000000000 expect -145.381043551 70.163900908 accept 400000.000000000 -400000.000000000 expect -144.758985461 60.202929201 ------------------------------------------------------------------------------- operation +proj=alsk +R=6370997 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -160.000000000 55.000000000 expect -511510.319410844 -967150.991676078 accept -160.000000000 70.000000000 expect -303744.771290369 685439.745941123 accept -145.000000000 70.000000000 expect 265354.974019663 681386.892874573 accept -145.000000000 60.000000000 expect 387711.995394027 -422980.685505463 direction inverse accept -500000.000000000 -950000.000000000 expect -159.854014458 55.165653849 accept -305000.000000000 700000.000000000 expect -160.082332372 70.128307618 accept 250000.000000000 700000.000000000 expect -145.347827407 70.181566919 accept 400000.000000000 -400000.000000000 expect -144.734239827 60.193564733 =============================================================================== # Apian Globular I # Misc Sph, no inv. =============================================================================== ------------------------------------------------------------------------------- operation +proj=apian +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223374.577355253 111701.072127637 accept 2 -1 expect 223374.577355253 -111701.072127637 accept -2 1 expect -223374.577355253 111701.072127637 accept -2 -1 expect -223374.577355253 -111701.072127637 =============================================================================== # August Epicycloidal # Misc Sph, no inv. =============================================================================== ------------------------------------------------------------------------------- operation +proj=august +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223404.978180972 111722.340289763 accept 2 -1 expect 223404.978180972 -111722.340289763 accept -2 1 expect -223404.978180972 111722.340289763 accept -2 -1 expect -223404.978180972 -111722.340289763 =============================================================================== # Bacon Globular # Misc Sph, no inv. =============================================================================== ------------------------------------------------------------------------------- operation +proj=bacon +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223334.132555965 175450.725922666 accept 2 -1 expect 223334.132555965 -175450.725922666 accept -2 1 expect -223334.132555965 175450.725922666 accept -2 -1 expect -223334.132555965 -175450.725922666 =============================================================================== # Bipolar conic of western hemisphere # Conic Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=bipc +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 2452160.217725756 -14548450.759654747 accept 2 -1 expect 2447915.213725341 -14763427.212798730 accept -2 1 expect 2021695.522934909 -14540413.695283702 accept -2 -1 expect 2018090.503004699 -14755620.651414108 direction inverse accept 200 100 expect -73.038700285 17.248118466 accept 200 -100 expect -73.037303739 17.249414978 accept -200 100 expect -73.035893173 17.245536403 accept -200 -100 expect -73.034496627 17.246832896 ------------------------------------------------------------------------------- operation +proj=bipc +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 2460565.740974965 -14598319.989330800 accept 2 -1 expect 2456306.185935200 -14814033.339502094 accept -2 1 expect 2028625.497819099 -14590255.375482792 accept -2 -1 expect 2025008.120589143 -14806200.018759441 direction inverse accept 200 100 expect -73.038693105 17.248116270 accept 200 -100 expect -73.037301330 17.249408353 accept -200 100 expect -73.035895582 17.245543028 accept -200 -100 expect -73.034503807 17.246835092 =============================================================================== # Boggs Eumorphic # PCyl., no inv., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=boggs +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 211949.700808182 117720.998305411 accept 2 -1 expect 211949.700808182 -117720.998305411 accept -2 1 expect -211949.700808182 117720.998305411 accept -2 -1 expect -211949.700808182 -117720.998305411 =============================================================================== # Bonne (Werner lat_1=90) # Conic Sph&Ell # lat_1= =============================================================================== ------------------------------------------------------------------------------- operation +proj=bonne +ellps=GRS80 +lat_1=0.5 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222605.296097157 55321.139565495 accept 2 -1 expect 222605.296099239 -165827.647799052 accept -2 1 expect -222605.296097157 55321.139565495 accept -2 -1 expect -222605.296099239 -165827.647799052 direction inverse accept 200 100 expect 0.001796699 0.500904369 accept 200 -100 expect 0.001796698 0.499095631 accept -200 100 expect -0.001796699 0.500904369 accept -200 -100 expect -0.001796698 0.499095631 ------------------------------------------------------------------------------- operation +proj=bonne +ellps=GRS80 +lat_1=-0.5 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222605.2961 165827.6478 roundtrip 1 accept 2 -1 expect 222605.2961 -55321.1396 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=bonne +ellps=GRS80 +lat_1=90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 90 expect 0 0 direction inverse accept 0 0 expect 0 90 ------------------------------------------------------------------------------- operation +proj=bonne +ellps=GRS80 +lat_1=-90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 -90 expect 0 0 direction inverse accept 0 0 expect 0 -90 ------------------------------------------------------------------------------- operation +proj=bonne +R=6400000 +lat_1=0.5 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223368.115572528 55884.555246394 accept 2 -1 expect 223368.115574632 -167517.599369694 accept -2 1 expect -223368.115572528 55884.555246394 accept -2 -1 expect -223368.115574632 -167517.599369694 direction inverse accept 200 100 expect 0.001790562 0.500895246 accept 200 -100 expect 0.001790561 0.499104753 accept -200 100 expect -0.001790562 0.500895246 accept -200 -100 expect -0.001790561 0.499104753 ------------------------------------------------------------------------------- operation +proj=bonne +R=6400000 +lat_1=-0.5 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223368.1156 167517.5994 roundtrip 1 accept 2 -1 expect 223368.1156 -55884.5552 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=bonne +R=6400000 +lat_1=90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 90 expect 0 0 direction inverse accept 0 0 expect 0 90 ------------------------------------------------------------------------------- operation +proj=bonne +R=6400000 +lat_1=-90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 -90 expect 0 0 direction inverse accept 0 0 expect 0 -90 =============================================================================== # Cal Coop Ocean Fish Invest Lines/Stations # Cyl, Sph&Ell =============================================================================== ------------------------------------------------------------------------------- operation +proj=calcofi +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 508.444872150 -1171.764860418 accept 2 -1 expect 514.999168152 -1145.821981468 accept -2 1 expect 500.685384125 -1131.445377920 accept -2 -1 expect 507.369719137 -1106.178201483 direction inverse accept 200 100 expect -110.363307925 12.032056976 accept 200 -100 expect -98.455008863 18.698723643 accept -200 100 expect -207.447024504 81.314089279 accept -200 -100 expect -62.486322854 87.980755945 ------------------------------------------------------------------------------- operation +proj=calcofi +R=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 507.090507488 -1164.727375198 accept 2 -1 expect 513.686136375 -1138.999268217 accept -2 1 expect 499.336261476 -1124.435130997 accept -2 -1 expect 506.060570393 -1099.375665067 direction inverse accept 200 100 expect -110.305190410 12.032056976 accept 200 -100 expect -98.322360950 18.698723643 accept -200 100 expect -207.544906814 81.314089279 accept -200 -100 expect -62.576950372 87.980755945 operation +proj=calcofi +lon_0=50 +ellps=WGS84 accept 10 50 expect 303.525850 -1576.974388 roundtrip 100 operation +proj=calcofi +ellps=GRS80 +lon_0=50 accept 10 50 expect 303.525850 -1576.974388 roundtrip 100 operation +proj=calcofi +R=400 +lon_0=50 +x_0=10000 +y_0=500000 accept 10 50 expect 301.769827 -1567.849822 roundtrip 100 =============================================================================== # Cassini # Cyl, Sph&Ell =============================================================================== ------------------------------------------------------------------------------- operation +proj=cass +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222605.285776991 110642.229253999 roundtrip 1 accept 2 -1 expect 222605.285776991 -110642.229253999 accept -2 1 expect -222605.285776991 110642.229253999 accept -2 -1 expect -222605.285776991 -110642.229253999 direction inverse accept 200 100 expect 0.001796631 0.000904369 accept 200 -100 expect 0.001796631 -0.000904369 accept -200 100 expect -0.001796631 0.000904369 accept -200 -100 expect -0.001796631 -0.000904369 ------------------------------------------------------------------------------- operation +proj=cass +R=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223368.105203484 111769.145040586 accept 2 -1 expect 223368.105203484 -111769.145040586 accept -2 1 expect -223368.105203484 111769.145040586 accept -2 -1 expect -223368.105203484 -111769.145040586 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 ------------------------------------------------------------------------------- # test point from EPSG Guidance Note 7.2 operation +proj=cass +lat_0=10.4416666666667 +lon_0=-61.3333333333333 \ +x_0=86501.46392052 +y_0=65379.0134283 \ +a=6378293.64520876 +b=6356617.98767984 +to_meter=0.201166195164 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -62 10 expect 66644.94040882 82536.21873655 roundtrip 1 ------------------------------------------------------------------------------- # Hyperbolic variant: test point from EPSG Guidance Note 7.2 operation +proj=cass +hyperbolic +a=6378306.376305601 +rf=293.466307 \ +lat_0=-16.25 +lon_0=179.33333333333333 +to_meter=20.1168 \ +x_0=251727.9155424 +y_0=334519.953768 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 179.99433652777776 -16.841456527777776 expect 16015.28901692 13369.66005367 roundtrip 1 ------------------------------------------------------------------------------- # Scenario of https://github.com/OSGeo/PROJ/issues/4385 ------------------------------------------------------------------------------- operation +proj=cass +lat_0=50.6177 +lon_0=-1.19725 +x_0=500000 +y_0=100000 +ellps=airy +units=m tolerance 0.1 mm direction inverse accept 300000 100000 expect -4.022094267169 50.583438725252 accept 500000 100000 expect -1.19725 50.6177 =============================================================================== # Central Conic # Sph # lat_1 =============================================================================== ------------------------------------------------------------------------------- operation +proj=pipeline +R=6390000 \ +step +proj=ccon +lat_1=52 +lat_0=52 +lon_0=19 +x_0=330000 +y_0=-350000 \ +step +proj=axisswap +order=1,-2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 24 55 expect 650031.54109413219363 4106.1617770643609028 accept 15 49 expect 37074.189007307473069 676826.23559270039774 accept 24 49 expect 696053.36061617843913 672294.56795827199940 accept 19 52 expect 330000.00000000000000 350000.00000000000000 direction inverse accept 0 0 expect 13.840227318521004431 55.030403993648806391 accept 0 700000 expect 14.514453594615022781 48.773847834747808675 accept 700000 0 expect 24.782707184271129766 55.003515505218481835 accept 700000 700000 expect 24.027610763560529927 48.750476070495021286 accept 330000 350000 expect 19.000000000000000000 52.000000000000000000 =============================================================================== # Central Cylindrical # Cyl, Sph =============================================================================== ------------------------------------------------------------------------------- operation +proj=cc +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223402.144255274 111712.415540593 accept 2 -1 expect 223402.144255274 -111712.415540593 accept -2 1 expect -223402.144255274 111712.415540593 accept -2 -1 expect -223402.144255274 -111712.415540593 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Equal Area Cylindrical # Cyl, Sph&Ell # lat_ts= =============================================================================== ------------------------------------------------------------------------------- operation +proj=cea +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222638.981586547 110568.812396267 accept 2 -1 expect 222638.981586547 -110568.812396266 accept -2 1 expect -222638.981586547 110568.812396267 accept -2 -1 expect -222638.981586547 -110568.812396266 direction inverse accept 200 100 expect 0.001796631 0.000904369 accept 200 -100 expect 0.001796631 -0.000904369 accept -200 100 expect -0.001796631 0.000904369 accept -200 -100 expect -0.001796631 -0.000904369 ------------------------------------------------------------------------------- operation +proj=cea +R=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223402.144255274 111695.401198614 accept 2 -1 expect 223402.144255274 -111695.401198614 accept -2 1 expect -223402.144255274 111695.401198614 accept -2 -1 expect -223402.144255274 -111695.401198614 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Chamberlin Trimetric # Misc Sph, no inv. # lat_1= lon_1= lat_2= lon_2= lat_3= lon_3= =============================================================================== ------------------------------------------------------------------------------- operation +proj=chamb +R=6400000 +lat_1=0.5 +lat_2=2 ------------------------------------------------------------------------------- tolerance 2.5 mm accept 2 1 expect -27864.779586801 -223364.324593274 accept 2 -1 expect -251312.283053493 -223402.145526208 accept -2 1 expect -27864.785649105 223364.327328827 accept -2 -1 expect -251312.289116443 223402.142197287 =============================================================================== # Collignon # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=collg +a=6400000 +lat_1=0.5 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 249872.921577930 99423.174788460 accept 2 -1 expect 254272.532301245 -98559.307760743 accept -2 1 expect -249872.921577930 99423.174788460 accept -2 -1 expect -254272.532301245 -98559.307760743 direction inverse accept 200 100 expect 0.001586797 0.001010173 accept 200 -100 expect 0.001586769 -0.001010182 accept -200 100 expect -0.001586797 0.001010173 accept -200 -100 expect -0.001586769 -0.001010182 =============================================================================== # Compact Miller # Cyl., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=comill +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223402.144255274 110611.859089459 accept 2 -1 expect 223402.144255274 -110611.859089459 accept -2 1 expect -223402.144255274 110611.859089459 accept -2 -1 expect -223402.144255274 -110611.859089459 direction inverse accept 200 100 expect 0.001790493 0.000904107 accept 200 -100 expect 0.001790493 -0.000904107 accept -200 100 expect -0.001790493 0.000904107 accept -200 -100 expect -0.001790493 -0.000904107 =============================================================================== # Craster Parabolic (Putnins P4) # PCyl., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=crast +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 218280.142056781 114306.045604280 accept 2 -1 expect 218280.142056781 -114306.045604280 accept -2 1 expect -218280.142056781 114306.045604280 accept -2 -1 expect -218280.142056781 -114306.045604280 direction inverse accept 200 100 expect 0.001832259 0.000874839 accept 200 -100 expect 0.001832259 -0.000874839 accept -200 100 expect -0.001832259 0.000874839 accept -200 -100 expect -0.001832259 -0.000874839 =============================================================================== # Denoyer Semi-Elliptical # PCyl., no inv., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=denoy +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223377.422876954 111701.072127637 accept 2 -1 expect 223377.422876954 -111701.072127637 accept -2 1 expect -223377.422876954 111701.072127637 accept -2 -1 expect -223377.422876954 -111701.072127637 =============================================================================== # Airocean # Sph., Ellps. # (Each of the 23 faces tested separately around their center, inverse included) =============================================================================== ------------------------------------------------------------------------------- operation +proj=airocean +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 23 28 expect 13572113.73386754 23493648.55327798 accept 71 46 expect 9714915.991790695 23488176.361173604 accept 147 75 expect 7723484.49359606 20087141.837650128 accept -77 61 expect 9679376.816000767 16802749.593532257 accept -26 35 expect 15458567.83864155 20091165.592037637 accept 29 -13 expect 15471813.400558881 26802282.415074058 accept 71 -25 expect 9737210.823606653 30219178.19260869 accept 97 10 expect 7670302.042847798 26816601.848991044 accept 169 35 expect 3883710.702444233 20135415.72144515 accept -151 13 expect 3859776.9744116343 13387384.422000753 accept -109 24 expect 7674343.074326526 13366009.083146008 accept -84 -9 expect 9673007.441581018 10144952.26955531 accept -42 -4 expect 13562062.520622183 10107761.706502315 accept -11 -34 expect 13627060.52678455 3383645.5697278716 accept 155 -35 expect 1873264.8705730252 30211340.763352156 accept -158 -28 expect 1871227.8450291778 10115901.323020123 accept -109 -46 expect 7708744.672461299 6722251.06988263 accept -36 -75 expect 9665810.798055789 3381177.9821538515 accept 98 -49 expect 4806946.337586326 33007546.454859577 accept 114 -72 expect 7708905.600709579 1101689.019137724 accept 143 -9 expect 3219027.0687154396 27948068.75709961 accept 123 7 expect 5239165.493429321 26821978.017945066 accept 147 16 expect 2635947.740851659 22373572.978527334 direction inverse accept 13600000 23500000 expect 22.77346472511832 27.745464601997153 accept 9700000 23500000 expect 71.26673004703193 45.89205035111361 accept 7700000 20100000 expect 146.99339940860168 74.69909794660227 accept 9700000 16800000 expect -76.55528563752168 60.90966578454296 accept 15500000 20100000 expect -26.125789701735282 34.531335035632864 accept 15500000 26800000 expect 28.72566754254401 -13.176397846758185 accept 9700000 30200000 expect 71.49135806675328 -24.84162689595362 accept 7700000 26800000 expect 96.67476470896398 10.214265110489109 accept 3900000 20100000 expect 169.4467058181239 35.245717462371594 accept 3900000 13400000 expect -150.6222299120939 13.304599775998279 accept 7700000 13400000 expect -108.74281284723317 24.422067806064522 accept 9700000 10100000 expect -83.65325201216521 -9.486900253798344 accept 13600000 10100000 expect -41.56143010477453 -4.013493146314863 accept 13600000 3400000 expect -11.279582965366556 -34.27261608163502 accept 1900000 30200000 expect 154.64715194333021 -34.84574824559832 accept 1900000 10100000 expect -157.58387651437764 -28.052389289696965 accept 7700000 6700000 expect -109.19369493541197 -46.23421830648926 accept 9700000 3400000 expect -35.93009713541779 -74.56175824137314 accept 4800000 33000000 expect 98.172013849367 -49.00298561868703 accept 7700000 1100000 expect 114.26109340373671 -71.94195405675616 accept 3200000 27900000 expect 143.30076636407907 -8.522097079186306 accept 5200000 26800000 expect 123.44730422061694 7.179239072128023 accept 2600000 22400000 expect 146.8547812565557 15.542304306692937 accept 0 0 expect failure ------------------------------------------------------------------------------- operation +proj=airocean +orient=horizontal +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 23 28 expect 13391387.087562159 13572113.73386754 accept 71 46 expect 13396859.279666536 9714915.991790695 accept 147 75 expect 16797893.80319001 7723484.49359606 accept -77 61 expect 20082286.04730788 9679376.816000767 accept -26 35 expect 16793870.048802502 15458567.83864155 accept 29 -13 expect 10082753.22576608 15471813.400558881 accept 71 -25 expect 6665857.448231446 9737210.823606653 accept 97 10 expect 10068433.791849095 7670302.042847798 accept 169 35 expect 16749619.919394989 3883710.702444233 accept -151 13 expect 23497651.218839385 3859776.9744116343 accept -109 24 expect 23519026.557694133 7674343.074326526 accept -84 -9 expect 26740083.371284828 9673007.441581018 accept -42 -4 expect 26777273.934337825 13562062.520622183 accept -11 -34 expect 33501390.07111227 13627060.52678455 accept 155 -35 expect 6673694.877487984 1873264.8705730252 accept -158 -28 expect 26769134.317820016 1871227.8450291778 accept -109 -46 expect 30162784.570957504 7708744.672461299 accept -36 -75 expect 33503857.658686288 9665810.798055789 accept 98 -49 expect 3877489.1859805635 4806946.337586326 accept 114 -72 expect 35783346.62170241 7708905.600709579 accept 143 -9 expect 8936966.883740531 3219027.0687154396 accept 123 7 expect 10063057.622895071 5239165.493429321 accept 147 16 expect 14511462.662312808 2635947.740851659 direction inverse accept 13400000 13600000 expect 22.653513921934305 27.877587719075937 accept 13400000 9700000 expect 71.23213038171733 46.05944622180928 accept 16800000 7700000 expect 147.55671447322464 74.77832986646499 accept 20100000 9700000 expect -76.64598925873727 60.747020624548 accept 16800000 15500000 expect -26.3124065099563 34.601485830443536 accept 10100000 15500000 expect 28.619135182474427 -13.042018999526977 accept 6700000 9700000 expect 71.5162610671907 -24.673252485600123 accept 10100000 7700000 expect 96.68789658312737 10.383985604100156 accept 16800000 3900000 expect 169.65090726985764 35.27199233196341 accept 23500000 3900000 expect -150.55720908958426 13.14679150488858 accept 23500000 7700000 expect -108.71768234825969 24.253726008211544 accept 26800000 9700000 expect -83.64031642722364 -9.65664821408901 accept 26800000 13600000 expect -41.53248336979641 -4.181271680064457 accept 33500000 13600000 expect -11.077997959623605 -34.30009883727707 accept 6700000 1900000 expect 154.6653022651957 -34.676851253860285 accept 26800000 1900000 expect -157.5153533577128 -28.210938432335496 accept 30200000 7700000 expect -109.22990606962236 -46.40145478927908 accept 33500000 9700000 expect -35.386955975332214 -74.64821453762985 accept 3900000 4800000 expect 98.362008540559 -48.89629332838504 accept 35800000 7700000 expect 114.04215001020711 -71.79634907735154 accept 9000000 3200000 expect 143.33006363443351 -8.36301544647104 accept 10100000 5200000 expect 123.47123951316074 7.342196526699235 accept 14500000 2600000 expect 147.01335056698537 15.59184037944909 accept 0 0 expect failure =============================================================================== # Eckert I # PCyl., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=eck1 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 204680.888202951 102912.178426065 accept 2 -1 expect 204680.888202951 -102912.178426065 accept -2 1 expect -204680.888202951 102912.178426065 accept -2 -1 expect -204680.888202951 -102912.178426065 direction inverse accept 200 100 expect 0.001943415 0.000971702 accept 200 -100 expect 0.001943415 -0.000971702 accept -200 100 expect -0.001943415 0.000971702 accept -200 -100 expect -0.001943415 -0.000971702 =============================================================================== # Eckert II # PCyl. Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=eck2 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 204472.870907960 121633.734975242 accept 2 -1 expect 204472.870907960 -121633.734975242 accept -2 1 expect -204472.870907960 121633.734975242 accept -2 -1 expect -204472.870907960 -121633.734975242 direction inverse accept 200 100 expect 0.001943415 0.000824804 accept 200 -100 expect 0.001943415 -0.000824804 accept -200 100 expect -0.001943415 0.000824804 accept -200 -100 expect -0.001943415 -0.000824804 =============================================================================== # Eckert III # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=eck3 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 188652.015721538 94328.919337031 accept 2 -1 expect 188652.015721538 -94328.919337031 accept -2 1 expect -188652.015721538 94328.919337031 accept -2 -1 expect -188652.015721538 -94328.919337031 direction inverse accept 200 100 expect 0.002120241 0.001060120 accept 200 -100 expect 0.002120241 -0.001060120 accept -200 100 expect -0.002120241 0.001060120 accept -200 -100 expect -0.002120241 -0.001060120 =============================================================================== # Eckert IV # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=eck4 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 188646.389356416 132268.540174065 accept 2 -1 expect 188646.389356416 -132268.540174065 accept -2 1 expect -188646.389356416 132268.540174065 accept -2 -1 expect -188646.389356416 -132268.540174065 accept -180 90 expect -8489602.7403 8489602.7403 accept 180 90 expect 8489602.7403 8489602.7403 accept -180 0 expect -16979205.4807 0 accept 180 0 expect 16979205.4807 0 accept -180 -90 expect -8489602.7403 -8489602.7403 accept 180 -90 expect 8489602.7403 -8489602.7403 direction inverse accept 200 100 expect 0.002120241 0.000756015 accept 200 -100 expect 0.002120241 -0.000756015 accept -200 100 expect -0.002120241 0.000756015 accept -200 -100 expect -0.002120241 -0.000756015 accept -8489602.74033281 8489602.74033281 expect -180 90 accept -8489602.75 8489602.74033281 expect failure errno coord_transfm_outside_projection_domain accept 8489602.74033281 8489602.74033281 expect 180 90 accept 8489602.75 8489602.74033281 expect failure errno coord_transfm_outside_projection_domain accept 0 8489602.75 expect failure errno coord_transfm_outside_projection_domain accept -16979205.4807 0 expect -180 0 accept -16979205.49 0 expect failure errno coord_transfm_outside_projection_domain accept 16979205.4807 0 expect 180 0 accept 16979205.49 0 expect failure errno coord_transfm_outside_projection_domain accept -8489602.74033281 -8489602.74033281 expect -180 -90 accept -8489602.75 -8489602.74033281 expect failure errno coord_transfm_outside_projection_domain accept 8489602.74033281 -8489602.74033281 expect 180 -90 accept 8489602.75 -8489602.74033281 expect failure errno coord_transfm_outside_projection_domain accept 0 -8489602.75 expect failure errno coord_transfm_outside_projection_domain =============================================================================== # Eckert V # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=eck5 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 197031.392134061 98523.198847227 accept 2 -1 expect 197031.392134061 -98523.198847227 accept -2 1 expect -197031.392134061 98523.198847227 accept -2 -1 expect -197031.392134061 -98523.198847227 direction inverse accept 200 100 expect 0.002029979 0.001014989 accept 200 -100 expect 0.002029979 -0.001014989 accept -200 100 expect -0.002029979 0.001014989 accept -200 -100 expect -0.002029979 -0.001014989 =============================================================================== # Eckert VI # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=eck6 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 197021.605628992 126640.420733174 accept 2 -1 expect 197021.605628992 -126640.420733174 accept -2 1 expect -197021.605628992 126640.420733174 accept -2 -1 expect -197021.605628992 -126640.420733174 direction inverse accept 200 100 expect 0.002029979 0.000789630 accept 200 -100 expect 0.002029979 -0.000789630 accept -200 100 expect -0.002029979 0.000789630 accept -200 -100 expect -0.002029979 -0.000789630 =============================================================================== # Equidistant Cylindrical (Plate Carree) # Cyl, Sph # lat_ts=[, lat_0=0] =============================================================================== ------------------------------------------------------------------------------- operation +proj=eqc +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223402.144255274 111701.072127637 accept 2 -1 expect 223402.144255274 -111701.072127637 accept -2 1 expect -223402.144255274 111701.072127637 accept -2 -1 expect -223402.144255274 -111701.072127637 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Equidistant Conic # Conic, Sph&Ell # lat_1= lat_2= =============================================================================== ------------------------------------------------------------------------------- operation +proj=eqdc +ellps=GRS80 +lat_1=0.5 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222588.440269286 110659.134907347 accept 2 -1 expect 222756.836702042 -110489.578087221 accept -2 1 expect -222588.440269286 110659.134907347 accept -2 -1 expect -222756.836702042 -110489.578087221 direction inverse accept 200 100 expect 0.001796359 0.000904369 accept 200 -100 expect 0.001796358 -0.000904370 accept -200 100 expect -0.001796359 0.000904369 accept -200 -100 expect -0.001796358 -0.000904370 ------------------------------------------------------------------------------- operation +proj=eqdc +R=6400000 +lat_1=0.5 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223351.088175114 111786.108747174 accept 2 -1 expect 223521.200266735 -111615.970741241 accept -2 1 expect -223351.088175114 111786.108747174 accept -2 -1 expect -223521.200266735 -111615.970741241 direction inverse accept 200 100 expect 0.001790221 0.000895246 accept 200 -100 expect 0.001790220 -0.000895247 accept -200 100 expect -0.001790221 0.000895246 accept -200 -100 expect -0.001790220 -0.000895247 operation +proj=eqdc +a=9999999 +b=.9 +lat_2=1 expect failure operation +proj=eqdc +R=6400000 +lat_1=1 +lat_2=-1 expect failure errno invalid_op_illegal_arg_value operation +proj=eqdc +R=6400000 +lat_1=91 expect failure errno invalid_op_illegal_arg_value operation +proj=eqdc +R=6400000 +lat_2=91 expect failure errno invalid_op_illegal_arg_value operation +proj=eqdc +R=1 +lat_1=1e-9 expect failure errno invalid_op_illegal_arg_value operation +proj=eqdc +lat_1=1 +ellps=GRS80 +b=.1 expect failure errno invalid_op_illegal_arg_value =============================================================================== # Euler # Conic, Sph # lat_1= and lat_2= =============================================================================== ------------------------------------------------------------------------------- operation +proj=euler +ellps=GRS80 +lat_1=0.5 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222597.634659108 111404.240549919 accept 2 -1 expect 222767.165631876 -111234.676491018 accept -2 1 expect -222597.634659108 111404.240549919 accept -2 -1 expect -222767.165631876 -111234.676491018 direction inverse accept 200 100 expect 0.001796281 0.000898315 accept 200 -100 expect 0.001796279 -0.000898316 accept -200 100 expect -0.001796281 0.000898315 accept -200 -100 expect -0.001796279 -0.000898316 ------------------------------------------------------------------------------- operation +proj=euler +a=6400000 +lat_1=0.5 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223360.655598694 111786.112389791 accept 2 -1 expect 223530.767690316 -111615.967098624 accept -2 1 expect -223360.655598694 111786.112389791 accept -2 -1 expect -223530.767690316 -111615.967098624 direction inverse accept 200 100 expect 0.001790144 0.000895246 accept 200 -100 expect 0.001790143 -0.000895247 accept -200 100 expect -0.001790144 0.000895246 accept -200 -100 expect -0.001790143 -0.000895247 =============================================================================== # Extended Transverse Mercator # Cyl, Sph # lat_ts=(0) # lat_0=(0) =============================================================================== ------------------------------------------------------------------------------- operation +proj=etmerc +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 50 nm accept 2 1 expect 222650.796797586 110642.229411933 accept 2 -1 expect 222650.796797586 -110642.229411933 accept -2 1 expect -222650.796797586 110642.229411933 accept -2 -1 expect -222650.796797586 -110642.229411933 # near pole accept 30 89.9999 expect 5.584698978 10001956.056248082 # 3900 km from central meridian accept 44.69 35.37 expect 4168136.489446198 4985511.302287407 direction inverse accept 200 100 expect 0.00179663056816 0.00090436947663 accept 200 -100 expect 0.00179663056816 -0.00090436947663 accept -200 100 expect -0.00179663056816 0.00090436947663 accept -200 -100 expect -0.00179663056816 -0.00090436947663 # near pole accept 6 1.0001e7 expect 0.35596960759234 89.99135362646302 # 3900 km from central meridian accept 4168136.489446198 4985511.302287407 expect 44.69 35.37 =============================================================================== # Fahey # Pcyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=fahey +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 182993.344649124 101603.193569884 accept 2 -1 expect 182993.344649124 -101603.193569884 accept -2 1 expect -182993.344649124 101603.193569884 accept -2 -1 expect -182993.344649124 -101603.193569884 direction inverse accept 200 100 expect 0.002185789 0.000984246 accept 200 -100 expect 0.002185789 -0.000984246 accept -200 100 expect -0.002185789 0.000984246 accept -200 -100 expect -0.002185789 -0.000984246 =============================================================================== # Foucaut # PCyl., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=fouc +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222588.120675892 111322.316700694 accept 2 -1 expect 222588.120675892 -111322.316700694 accept -2 1 expect -222588.120675892 111322.316700694 accept -2 -1 expect -222588.120675892 -111322.316700694 direction inverse accept 200 100 expect 0.001796631 0.000898315 accept 200 -100 expect 0.001796631 -0.000898315 accept -200 100 expect -0.001796631 0.000898315 accept -200 -100 expect -0.001796631 -0.000898315 ------------------------------------------------------------------------------- operation +proj=fouc +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223351.109003414 111703.907721713 accept 2 -1 expect 223351.109003414 -111703.907721713 accept -2 1 expect -223351.109003414 111703.907721713 accept -2 -1 expect -223351.109003414 -111703.907721713 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Foucaut Sinusoidal # PCyl., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=fouc_s +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223402.144255274 111695.401198614 accept 2 -1 expect 223402.144255274 -111695.401198614 accept -2 1 expect -223402.144255274 111695.401198614 accept -2 -1 expect -223402.144255274 -111695.401198614 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Gall (Gall Stereographic) # Cyl, Sph =============================================================================== ------------------------------------------------------------------------------- operation +proj=gall +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 157969.171134520 95345.249178386 accept 2 -1 expect 157969.171134520 -95345.249178386 accept -2 1 expect -157969.171134520 95345.249178386 accept -2 -1 expect -157969.171134520 -95345.249178386 direction inverse accept 200 100 expect 0.002532140 0.001048847 accept 200 -100 expect 0.002532140 -0.001048847 accept -200 100 expect -0.002532140 0.001048847 accept -200 -100 expect -0.002532140 -0.001048847 =============================================================================== # Geocentric =============================================================================== ------------------------------------------------------------------------------- operation +proj=geocent +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 0 expect 6373287.27950247 222560.09599219 110568.77482092 accept 2 -1 0 expect 6373287.27950247 222560.09599219 -110568.77482092 accept -2 1 0 expect 6373287.27950247 -222560.09599219 110568.77482092 accept -2 -1 0 expect 6373287.27950247 -222560.09599219 -110568.77482092 direction inverse accept 6373287.27950247 222560.09599219 110568.77482092 expect 2 1 0 ------------------------------------------------------------------------------- operation +proj=geocent +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm =============================================================================== # Geostationary Satellite View # Azi, Sph&Ell # h= =============================================================================== ------------------------------------------------------------------------------- operation +proj=geos +ellps=GRS80 +h=35785831 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222527.070365800 110551.303413329 accept 2 -1 expect 222527.070365800 -110551.303413329 accept -2 1 expect -222527.070365800 110551.303413329 accept -2 -1 expect -222527.070365800 -110551.303413329 direction inverse accept 200 100 expect 0.001796631 0.000904369 accept 200 -100 expect 0.001796631 -0.000904369 accept -200 100 expect -0.001796631 0.000904369 accept -200 -100 expect -0.001796631 -0.000904369 ------------------------------------------------------------------------------- operation +proj=geos +R=6400000 +h=35785831 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223289.457635795 111677.657456537 accept 2 -1 expect 223289.457635795 -111677.657456537 accept -2 1 expect -223289.457635795 111677.657456537 accept -2 -1 expect -223289.457635795 -111677.657456537 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 ------------------------------------------------------------------------------- operation +proj=geos +R=1 +h=0 ------------------------------------------------------------------------------- expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- operation +proj=geos +R=1 +h=1e11 ------------------------------------------------------------------------------- expect failure errno invalid_op_illegal_arg_value =============================================================================== # Ginsburg VIII (TsNIIGAiK) # PCyl, Sph., no inv. =============================================================================== ------------------------------------------------------------------------------- operation +proj=gins8 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 194350.250939590 111703.907635335 accept 2 -1 expect 194350.250939590 -111703.907635335 accept -2 1 expect -194350.250939590 111703.907635335 accept -2 -1 expect -194350.250939590 -111703.907635335 =============================================================================== # General Sinusoidal Series # PCyl, Sph. # m= n= =============================================================================== ------------------------------------------------------------------------------- operation +proj=gn_sinu +a=6400000 +m=1 +n=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223385.132504696 111698.236447187 accept 2 -1 expect 223385.132504696 -111698.236447187 accept -2 1 expect -223385.132504696 111698.236447187 accept -2 -1 expect -223385.132504696 -111698.236447187 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Gnomonic # Azi, Sph*Ell =============================================================================== ------------------------------------------------------------------------------- # Test material from Snyder p. 168, table 26. Repeat tests with ellispoid of # flattening 1/200. # Tests the equatorial aspect of the projection. ------------------------------------------------------------------------------- operation +proj=gnom +R=1 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 0 roundtrip 100 accept 10 80 expect 0.1763 5.7588 roundtrip 100 accept 20 70 expect 0.3640 2.9238 roundtrip 100 accept 30 60 expect 0.5774 2.0000 roundtrip 100 accept 40 50 expect 0.8391 1.5557 roundtrip 100 accept 50 40 expect 1.1918 1.3054 roundtrip 100 accept 60 30 expect 1.7321 1.1547 roundtrip 100 accept 70 20 expect 2.7475 1.0642 roundtrip 100 accept 80 10 expect 5.6713 1.0154 roundtrip 100 accept 80 80 expect 5.6713 32.6596 roundtrip 100 accept 0 90 expect failure errno coord_transfm_outside_projection_domain # test that extreme northings are mapped to the sphere direction inverse accept 0 1e8 expect 0 90 ------------------------------------------------------------------------------- operation +proj=gnom +a=1 +rf=200 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 0 roundtrip 100 accept 10 80 expect 0.1763 5.7232 roundtrip 100 accept 20 70 expect 0.3641 2.9037 roundtrip 100 accept 30 60 expect 0.5778 1.9861 roundtrip 100 accept 40 50 expect 0.8405 1.5459 roundtrip 100 accept 50 40 expect 1.1958 1.2994 roundtrip 100 accept 60 30 expect 1.7435 1.1534 roundtrip 100 accept 70 20 expect 2.7852 1.0711 roundtrip 100 accept 80 10 expect 5.8813 1.0465 roundtrip 100 accept 80 80 expect 5.7134 32.7298 roundtrip 100 accept 0 89.99 expect 0 5700.9222 roundtrip 100 accept 180 89.99 expect failure errno coord_transfm_outside_projection_domain # test that extreme northings are mapped to the sphere direction inverse accept 0 1e8 expect 0 90 ------------------------------------------------------------------------------- # Test the northern polar aspect of the gnonomic projection ------------------------------------------------------------------------------- operation +proj=gnom +R=1 +lat_0=90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 90 expect 0 0 roundtrip 100 accept 45 45 expect 0.7071 -0.7071 roundtrip 100 accept 0 0 expect failure errno coord_transfm_outside_projection_domain accept 90 0 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- operation +proj=gnom +a=1 +rf=200 +lat_0=90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 90 expect 0 0 roundtrip 100 accept 45 45 expect 0.7079 -0.7079 roundtrip 100 accept 0 0 expect 0 -127.4835 roundtrip 100 accept 90 0 expect 127.4835 0 roundtrip 100 accept 0 -0.5 expect failure errno coord_transfm_outside_projection_domain accept 90 -0.5 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test the southern polar aspect of the gnonomic projection ------------------------------------------------------------------------------- operation +proj=gnom +R=1 +lat_0=-90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 -90 expect 0 0 roundtrip 100 accept 45 -45 expect 0.7071 0.7071 roundtrip 100 accept 0 0 expect failure errno coord_transfm_outside_projection_domain accept 90 0 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- operation +proj=gnom +a=1 +rf=200 +lat_0=-90 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 -90 expect 0 0 roundtrip 100 accept 45 -45 expect 0.7079 0.7079 roundtrip 100 accept 0 0 expect 0 127.4835 roundtrip 100 accept 90 0 expect 127.4835 0 roundtrip 100 accept 0 0.5 expect failure errno coord_transfm_outside_projection_domain accept 90 0.5 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test the oblique aspect of the gnonomic projection ------------------------------------------------------------------------------- operation +proj=gnom +R=1 +lat_0=45 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 45 expect 0 0 roundtrip 100 accept 0 0 expect 0 -1 roundtrip 100 accept 0 90 expect 0 1 roundtrip 100 accept 0 -45 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- operation +proj=gnom +a=1 +rf=200 +lat_0=45 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 45 expect 0 0 roundtrip 100 accept 0 0 expect 0 -0.9897 roundtrip 100 accept 0 90 expect 0 1.0025 roundtrip 100 accept 0 -45 expect 0 -154.8623 roundtrip 100 accept 0 -45.5 expect failure errno coord_transfm_outside_projection_domain =============================================================================== # Goode Homolosine # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=goode +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223368.119026632 111701.072127637 accept 2 -1 expect 223368.119026632 -111701.072127637 accept -2 1 expect -223368.119026632 111701.072127637 accept -2 -1 expect -223368.119026632 -111701.072127637 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 =============================================================================== # Mod. Stereographic of 48 U.S. # Azi(mod) =============================================================================== ------------------------------------------------------------------------------- operation +proj=gs48 +R=6370997 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -119.000000000 40.000000000 expect -1923908.446529346 355874.658944479 accept -70.000000000 64.000000000 expect 1354020.375109298 3040846.007866525 accept -80.000000000 25.000000000 expect 1625139.160484320 -1413614.894029108 accept -95.000000000 35.000000000 expect 90241.658071458 -439595.048485902 direction inverse accept -1923000.000000000 355000.000000000 expect -118.987112613 39.994449789 accept 1354000.000000000 3040000.000000000 expect -70.005208999 63.993387836 accept 1625000.000000000 -1413000.000000000 expect -80.000346610 25.005602547 accept 90000.000000000 -439000.000000000 expect -95.002606473 35.005424705 =============================================================================== # Mod. Stereographic of 50 U.S. # Azi(mod) =============================================================================== ------------------------------------------------------------------------------- operation +proj=gs50 +ellps=clrk66 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -160.000000000 65.000000000 expect -1874628.537740233 2660907.942291015 accept -130.000000000 45.000000000 expect -771831.518853336 48465.166491305 accept -65.000000000 45.000000000 expect 4030931.833981509 1323687.864777399 accept -80.000000000 36.000000000 expect 3450764.261536101 -175619.041820732 # For some reason, does not fail on MacOSX #accept 60 -45 #expect failure errno coord_transfm_outside_projection_domain direction inverse accept -1800000.000000000 2600000.000000000 expect -157.989285000 64.851559610 accept -800000.000000000 500000.000000000 expect -131.171390467 49.084969746 accept 4000000.000000000 1300000.000000000 expect -65.491568685 44.992837924 accept 3900000.000000000 -170000.000000000 expect -75.550660091 34.191114076 ------------------------------------------------------------------------------- operation +proj=gs50 +R=6370997 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -160.000000000 65.000000000 expect -1867268.253460009 2656506.230401823 accept -130.000000000 45.000000000 expect -769572.189672994 48324.312440864 accept -65.000000000 45.000000000 expect 4019393.068680791 1320191.309350289 accept -80.000000000 36.000000000 expect 3442685.615172346 -178760.423489429 direction inverse accept -1800000.000000000 2600000.000000000 expect -158.163295045 64.854288365 accept -800000.000000000 500000.000000000 expect -131.206816960 49.082915351 accept 4000000.000000000 1300000.000000000 expect -65.348945221 44.957292682 accept 3900000.000000000 -170000.000000000 expect -75.446820242 34.185406226 =============================================================================== # Hammer & Eckert-Greifendorff # Misc Sph, # W= M= =============================================================================== ------------------------------------------------------------------------------- operation +proj=hammer +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223373.788703241 111703.907397767 accept 2 -1 expect 223373.788703241 -111703.907397767 accept -2 1 expect -223373.788703241 111703.907397767 accept -2 -1 expect -223373.788703241 -111703.907397767 direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 ------------------------------------------------------------------------------- operation +proj=hammer +a=6400000 +W=1 ------------------------------------------------------------------------------- accept -180 0 expect failure errno coord_transfm_outside_projection_domain =============================================================================== # Hatano Asymmetrical Equal Area # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=hatano +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 189878.878946528 131409.802440626 accept 2 -1 expect 189881.081952445 -131409.142276074 accept -2 1 expect -189878.878946528 131409.802440626 accept -2 -1 expect -189881.081952445 -131409.142276074 direction inverse accept 200 100 expect 0.002106462 0.000760957 accept 200 -100 expect 0.002106462 -0.000760958 accept -200 100 expect -0.002106462 0.000760957 accept -200 -100 expect -0.002106462 -0.000760958 =============================================================================== # HEALPix # Sph., Ellps. =============================================================================== ------------------------------------------------------------------------------- operation +proj=healpix +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222390.103949239 130406.588664482 accept 2 -1 expect 222390.103949239 -130406.588664481 accept -2 1 expect -222390.103949239 130406.588664482 accept -2 -1 expect -222390.103949239 -130406.588664481 direction inverse accept 200 100 expect 0.001798641 0.000766795 accept 200 -100 expect 0.001798641 -0.000766795 accept -200 100 expect -0.001798641 0.000766795 accept -200 -100 expect -0.001798641 -0.000766795 ------------------------------------------------------------------------------- operation +proj=healpix +R=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223402.144255274 131588.044441999 accept 2 -1 expect 223402.144255274 -131588.044441999 accept -2 1 expect -223402.144255274 131588.044441999 accept -2 -1 expect -223402.144255274 -131588.044441999 direction inverse accept 200 100 expect 0.001790493 0.000759909 accept 200 -100 expect 0.001790493 -0.000759909 accept -200 100 expect -0.001790493 0.000759909 accept -200 -100 expect -0.001790493 -0.000759909 ------------------------------------------------------------------------------- operation +proj=healpix +R=6400000 +lat_1=0.5 +lat_2=2 +rot_xy=42 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 254069.735470912856 -51696.237925639456 accept 2 -1 expect 77970.559536809917 -247274.186569161975 accept -2 1 expect -77970.559536809917 247274.186569161975 accept -2 -1 expect -254069.735470912856 51696.237925639456 direction inverse accept 254069.735470912856 -51696.237925639456 expect 2 1 accept 77970.559536809917 -247274.186569161975 expect 2 -1 accept -77970.559536809917 247274.186569161975 expect -2 1 accept -254069.735470912856 51696.237925639456 expect -2 -1 =============================================================================== # rHEALPix # Sph., Ellps. # north_square= south_square= =============================================================================== ------------------------------------------------------------------------------- operation +proj=rhealpix +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222390.103949239 130406.588664482 accept 2 -1 expect 222390.103949239 -130406.588664481 accept -2 1 expect -222390.103949239 130406.588664482 accept -2 -1 expect -222390.103949239 -130406.588664481 direction inverse accept 200 100 expect 0.001798641 0.000766795 accept 200 -100 expect 0.001798641 -0.000766795 accept -200 100 expect -0.001798641 0.000766795 accept -200 -100 expect -0.001798641 -0.000766795 ------------------------------------------------------------------------------- operation +proj=rhealpix +R=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223402.144255274 131588.044441999 accept 2 -1 expect 223402.144255274 -131588.044441999 accept -2 1 expect -223402.144255274 131588.044441999 accept -2 -1 expect -223402.144255274 -131588.044441999 direction inverse accept 200 100 expect 0.001790493 0.000759909 accept 200 -100 expect 0.001790493 -0.000759909 accept -200 100 expect -0.001790493 0.000759909 accept -200 -100 expect -0.001790493 -0.000759909 ------------------------------------------------------------------------------- operation +proj=rhealpix +south_square=2 +north_square=3 +ellps=WGS84 ------------------------------------------------------------------------------- tolerance 1 m accept 45 50 expect 10806592 10007554 accept 45 -50 expect 5003777 -5802815 accept 135 50 expect 15011332 5802815 direction inverse accept 10806592 10007554 expect 45 50 accept 5003777 -5802815 expect 45 -50 accept 15011332 5802815 expect 135 50 =============================================================================== # Interrupted Goode Homolosine # PCyl, Sph. # (Each of the 12 sub-projections tested separately) =============================================================================== ------------------------------------------------------------------------------- operation +proj=igh +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223878.497456271 111701.072127637 roundtrip 1 accept 2 -1 expect 223708.371313058 -111701.072127637 roundtrip 1 accept -2 1 expect -222857.740596992 111701.072127637 roundtrip 1 accept -2 -1 expect -223027.866740205 -111701.072127637 roundtrip 1 accept -100.0 22.0 expect -11170107.212763708 2457423.5868080168 roundtrip 1 accept -30.0 22.0 expect -2863013.673043605 2457423.586808016 roundtrip 1 accept -100.0 67.0 expect -11170107.212763708 7205942.523056464 roundtrip 1 accept -30.0 67.0 expect 17045.719482862 7205942.523056464 roundtrip 1 accept -160.0 -22.0 expect -17872171.540421933 -2457423.586808016 roundtrip 1 accept -60.0 -22.0 expect -6702064.327658225 -2457423.586808016 roundtrip 1 accept 20.0 -22.0 expect 2234021.442552742 -2457423.586808016 roundtrip 1 accept 140.0 -22.0 expect 15638150.097869191 -2457423.586808016 roundtrip 1 accept -160.0 -67.0 expect -17872171.540421933 -7205942.523056464 roundtrip 1 accept -60.0 -67.0 expect -6702064.327658225 -7205942.523056464 roundtrip 1 accept 20.0 -67.0 expect 2234021.442552742 -7205942.523056464 roundtrip 1 accept 140.0 -67.0 expect 15638150.097869191 -7205942.523056464 roundtrip 1 direction inverse accept 200 100 expect 0.001790489 0.000895247 accept 200 -100 expect 0.001790491 -0.000895247 accept -200 100 expect -0.001790497 0.000895247 accept -200 -100 expect -0.001790496 -0.000895247 =============================================================================== # Interrupted Goode Homolosine Ocean View # PCyl, Sph. # (Each of the 12 sub-projections tested separately) =============================================================================== ------------------------------------------------------------------------------- operation +proj=igh_o +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223197.992883418 111701.072127637 roundtrip 1 accept 2 -1 expect 223708.371313058 -111701.072127637 roundtrip 1 accept -2 1 expect -223538.245169845 111701.072127637 roundtrip 1 accept -2 -1 expect -223027.866740205 -111701.072127637 roundtrip 1 accept -140.0 22.0 expect -15638150.097869192 2457423.586808016 roundtrip 1 accept 170.0 70.0 expect 16560870.317293623 7463176.386461447 roundtrip 1 accept -10.0 22.0 expect -1117010.721276371 2457423.586808016 roundtrip 1 accept 130.0 22.0 expect 14521139.376592822 2457423.586808016 roundtrip 1 accept -170.0 70.0 expect -17167948.303394791 7463176.386461447 roundtrip 1 accept -140.0 67.0 expect -15638150.097869191 7205942.523056464 roundtrip 1 accept -10.0 67.0 expect -1117010.721276371 7205942.523056464 roundtrip 1 accept 130.0 67.0 expect 14521139.376592822 7205942.523056464 roundtrip 1 accept -110.0 -22.0 expect -12287117.934040081 -2457423.586808016 roundtrip 1 accept 20.0 -22.0 expect 2234021.442552742 -2457423.586808016 roundtrip 1 accept 150.0 -22.0 expect 16755160.819145568 -2457423.586808016 roundtrip 1 accept -110.0 -67.0 expect -12287117.934040081 -7205942.523056464 roundtrip 1 accept 20.0 -67.0 expect 2234021.442552742 -7205942.523056464 roundtrip 1 accept 95.0 -67.0 expect 13699006.578494834 -7205942.523056464 roundtrip 1 accept 150.0 -67.0 expect 16755160.819145564 -7205942.523056464 roundtrip 1 direction inverse accept 200 100 expect 0.001790494 0.000895247 accept 200 -100 expect 0.001790491 -0.000895247 accept -200 100 expect -0.001790492 0.000895247 accept -200 -100 expect -0.001790496 -0.000895247 =============================================================================== # Interrupted Mollweide # PCyl, Sph. # (Each of the 6 sub-projections tested separately) =============================================================================== ------------------------------------------------------------------------------- operation +proj=imoll +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect -912080.283811148372 124066.283433859542 roundtrip 1 accept 2 -1 expect -912174.768289615284 -124066.283433859542 roundtrip 1 accept -2 1 expect -1314307.681094774744 124066.283433859542 roundtrip 1 accept -2 -1 expect -1314402.165573241888 -124066.283433859542 roundtrip 1 accept -39.99 0.1 expect -5135117.0707450127 12406.8672748194 roundtrip 1 accept -40.01 0.1 expect -5137140.6776947584 12406.8672748194 roundtrip 1 accept -99.99 -0.1 expect -11169097.7713819221 -12406.8672748194 roundtrip 1 accept -100.01 -0.1 expect -11171118.5438199658 -12406.8672748194 roundtrip 1 accept -19.99 -0.1 expect -3123793.9498816459 -12406.8672748194 roundtrip 1 accept -20.01 -0.1 expect -3125812.8326452221 -12406.8672748194 roundtrip 1 accept 79.99 -0.1 expect 6930815.0545556545 -12406.8672748194 roundtrip 1 accept 80.01 -0.1 expect 6932837.7166681662 -12406.8672748194 roundtrip 1 accept -100.0 22.0 expect -11170107.212763708085 2703699.326638640370 roundtrip 1 accept -30.0 22.0 expect -3854960.906400005333 2703699.326638640370 roundtrip 1 accept -160.0 -22.0 expect -17204085.078888915479 -2703699.326638640370 roundtrip 1 accept -60.0 -22.0 expect -7147455.302013571374 -2703699.326638640370 roundtrip 1 accept 20.0 -22.0 expect 897848.519486704026 -2703699.326638640370 roundtrip 1 accept 140.0 -22.0 expect 12965804.251737114042 -2703699.326638640370 roundtrip 1 direction inverse accept 200 100 expect 11.074062190626 0.000806005080 accept 200 -100 expect 11.074062191236 -0.000806005080 accept -200 100 expect 11.070084714982 0.000806005080 accept -200 -100 expect 11.070084715592 -0.000806005080 =============================================================================== # Interrupted Mollweide Ocean View # PCyl, Sph. # (Each of the 6 sub-projections tested separately) =============================================================================== ------------------------------------------------------------------------------- operation +proj=imoll_o +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect -1357849.196080365917 124066.283433859542 roundtrip 1 accept 2 -1 expect -1357565.742644961691 -124066.283433859542 roundtrip 1 accept -2 1 expect -1760076.593363992404 124066.283433859542 roundtrip 1 accept -2 -1 expect -1759793.139928588411 -124066.283433859542 roundtrip 1 accept -89.99 0.1 expect -10608821.9887007959 12406.8672748194 roundtrip 1 accept -90.01 0.1 expect -10610845.5956505425 12406.8672748194 roundtrip 1 accept 59.99 0.1 expect 4474097.1799880061 12406.8672748194 roundtrip 1 accept 60.01 0.1 expect 4476121.7317749839 12406.8672748194 roundtrip 1 accept -59.99 -0.1 expect -7591833.0556381932 -12406.8672748194 roundtrip 1 accept -60.01 -0.1 expect -7593856.6625879407 -12406.8672748194 roundtrip 1 accept 89.99 -0.1 expect 7491086.1130506080 -12406.8672748194 roundtrip 1 accept 90.01 -0.1 expect 7493109.7200003546 -12406.8672748194 roundtrip 1 accept -140.0 22.0 expect -15638150.097869191319 2703699.326638640370 roundtrip 1 accept -10.0 22.0 expect -2564531.387931245379 2703699.326638640370 roundtrip 1 accept 130.0 22.0 expect 11514750.299694234505 2703699.326638640370 roundtrip 1 accept -110.0 -22.0 expect -12621161.164806591347 -2703699.326638640370 roundtrip 1 accept 20.0 -22.0 expect 452457.545131357736 -2703699.326638640370 roundtrip 1 accept 150.0 -22.0 expect 13526076.255069304258 -2703699.326638640370 roundtrip 1 direction inverse accept 200 100 expect 15.502891574921 0.000806005080 accept 200 -100 expect 15.502891573090 -0.000806005080 accept -200 100 expect 15.498914099277 0.000806005080 accept -200 -100 expect 15.498914097446 -0.000806005080 =============================================================================== # International Map of the World Polyconic # Mod. Polyconic, Ell # lat_1= and lat_2= [lon_1=] =============================================================================== ------------------------------------------------------------------------------- operation +proj=imw_p +ellps=GRS80 +lat_1=0.5 +lat_2=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222588.441139376 55321.128653810 accept 2 -1 expect 222756.906377687 -165827.584288324 accept -2 1 expect -222588.441139376 55321.128653810 accept -2 -1 expect -222756.906377687 -165827.584288324 direction inverse accept 200 100 expect 0.001796699 0.500904924 accept 200 -100 expect 0.001796698 0.499095076 accept -200 100 expect -0.001796699 0.500904924 accept -200 -100 expect -0.001796698 0.499095076 ------------------------------------------------------------------------------- operation +proj=imw_p +ellps=GRS80 +lat_1=0 +lat_2=10 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 0 expect 0 0 accept 0.000000000000 0.000904928485 expect 0 100 accept 0.000898315284 0.000000000000 expect 100 0 direction inverse accept 0 0 expect 0 0 accept 0 100 expect 0.000000000000 0.000904928485 accept 100 0 expect 0.000898315284 0.000000000000 =============================================================================== # Icosahedral Snyder Equal Area # Sph =============================================================================== ------------------------------------------------------------------------------- operation +proj=isea +a=6400000 ------------------------------------------------------------------------------- tolerance 0.2 mm accept 2 1 expect -1097074.948153475765139 3442909.309747453313321 roundtrip 1 accept 2 -1 expect -1097074.948149705072865 3233611.728292400948703 roundtrip 1 accept -2 1 expect -1575486.353775786235929 3442168.342736063525081 roundtrip 1 accept -2 -1 expect -1575486.353772019501776 3234352.695310209877789 roundtrip 1 operation +proj=isea +mode=hex +resolution=31 accept 0 0 expect failure ------------------------------------------------------------------------------- operation +proj=isea +R=6371007.18091875 ------------------------------------------------------------------------------- tolerance 0.2 mm accept -168.75 58.282525588539 expect -19186144.870842020958662 3323137.771944524254650 roundtrip 1 accept 11.25 58.282525588539 expect -15348915.896747918799520 9969413.315350906923413 roundtrip 1 accept -110 54 expect -15321401.505530973896384 3338358.859094056300819 roundtrip 1 accept -75 45 expect -12774358.709073608741164 4373188.646695702336729 roundtrip 1 accept 2 49 expect -642252.939347098814324 8796229.009143760427833 roundtrip 1 accept 0 0 expect -1331454.074623266700655 3323137.771634854841977 roundtrip 1 accept 90 0 expect 8564460.639100870117545 593869.297485541785136 roundtrip 1 accept 0 45 expect -837334.699958428042009 8323409.759132191538811 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=isea +R=6371007.18091875 +orient=pole ------------------------------------------------------------------------------- tolerance 0.2 mm accept -168.75 58.282525588539 expect -16702163.549901897087693 6386395.630649688653648 roundtrip 1 accept 11.25 58.282525588539 expect 619648.646531744743697 6212947.536539182066917 roundtrip 1 accept -110 54 expect -13285649.857057726010680 6149501.348902118392289 roundtrip 1 accept -75 45 expect -7921366.529368571005762 4728387.055336073972285 roundtrip 1 accept 2 49 expect 152616.434999307675753 5152048.791301283054054 roundtrip 1 accept 0 0 expect 0 -195097.133640714135254 roundtrip 1 accept 90 0 expect 9593072.435467451811 0 roundtrip 1 accept 0 45 expect 0 4726854.770339427515864 roundtrip 1 =============================================================================== # Kavrayskiy V # PCyl., Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=kav5 +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 200360.905308829 123685.082476998 accept 2 -1 expect 200360.905308829 -123685.082476998 accept -2 1 expect -200360.905308829 123685.082476998 accept -2 -1 expect -200360.905308829 -123685.082476998 direction inverse accept 200 100 expect 0.001996259 0.000808483 accept 200 -100 expect 0.001996259 -0.000808483 accept -200 100 expect -0.001996259 0.000808483 accept -200 -100 expect -0.001996259 -0.000808483 ------------------------------------------------------------------------------- operation +proj=kav5 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 201047.703110878 124109.050629171 accept 2 -1 expect 201047.703110878 -124109.050629171 accept -2 1 expect -201047.703110878 124109.050629171 accept -2 -1 expect -201047.703110878 -124109.050629171 direction inverse accept 200 100 expect 0.001989440 0.000805721 accept 200 -100 expect 0.001989440 -0.000805721 accept -200 100 expect -0.001989440 0.000805721 accept -200 -100 expect -0.001989440 -0.000805721 =============================================================================== # Kavrayskiy VII # PCyl, Sph. =============================================================================== ------------------------------------------------------------------------------- operation +proj=kav7 +a=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 193462.974943729 111701.072127637 accept 2 -1 expect 193462.974943729 -111701.072127637 accept -2 1 expect -193462.974943729 111701.072127637 accept -2 -1 expect -193462.974943729 -111701.072127637 direction inverse accept 200 100 expect 0.002067483 0.000895247 accept 200 -100 expect 0.002067483 -0.000895247 accept -200 100 expect -0.002067483 0.000895247 accept -200 -100 expect -0.002067483 -0.000895247 =============================================================================== # Krovak # PCyl., Ellps. =============================================================================== ------------------------------------------------------------------------------- operation +proj=krovak +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect -3196535.232563641 -6617878.867551444 accept 2 -1 expect -3260035.440552109 -6898873.614878031 accept -2 1 expect -3756305.328869175 -6478142.561571511 accept -2 -1 expect -3831703.658501982 -6759107.170155395 accept 24.833333333333 59.757598563058 expect 0 0 direction inverse accept 200 100 expect 24.836218919 59.758403933 accept 200 -100 expect 24.836315485 59.756888426 accept -200 100 expect 24.830447748 59.758403933 accept -200 -100 expect 24.830351182 59.756888426 accept 0 0 expect 24.833333333333 59.757598563058 ------------------------------------------------------------------------------- operation +proj=krovak +lat_0=-90 ------------------------------------------------------------------------------- expect failure errno invalid_op_illegal_arg_value # Test point from EPSG Guidance Note 7-2 ------------------------------------------------------------------------------- operation +proj=krovak +lat_0=49.5 +lon_0=42.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro ------------------------------------------------------------------------------- tolerance 1.1 cm # 16°50'59.179"E, 50°12'32.442"N accept 16.849771944444445 50.20901166666667 expect -568991.00 -1050538.64 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=krovak +lat_0=49.5 +lon_0=42.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +czech ------------------------------------------------------------------------------- tolerance 1.1 cm # 16°50'59.179"E, 50°12'32.442"N accept 16.849771944444445 50.20901166666667 expect 568991.00 1050538.64 roundtrip 1 =============================================================================== # Krovak Modified # PCyl., Ellps. =============================================================================== # Test point from EPSG Guidance Note 7-2 # Note: all longitudes below are east of Ferro ------------------------------------------------------------------------------- operation +proj=mod_krovak +lat_0=49.5 +lon_0=42.5 +k=0.9999 +x_0=5000000 +y_0=5000000 +ellps=bessel ------------------------------------------------------------------------------- tolerance 1 cm # 34°30'59.179"E of Ferro, 50°12'32.442"N accept 34.51643861111111 50.20901166666667 expect -5568990.91 -6050538.71 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=mod_krovak +lat_0=49.5 +lon_0=42.5 +k=0.9999 +x_0=5000000 +y_0=5000000 +ellps=bessel +czech ------------------------------------------------------------------------------- tolerance 1 cm accept 34.51643861111111 50.20901166666667 expect 5568990.91 6050538.71 roundtrip 1 =============================================================================== # Laborde # Cyl, Sph # Special for Madagascar =============================================================================== ------------------------------------------------------------------------------- operation +proj=labrd +ellps=GRS80 +lon_0=0.5 +lat_0=2 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 166973.166090228 -110536.912730266 accept 2 -1 expect 166973.168287157 -331761.993650884 accept -2 1 expect -278345.500519976 -110469.032642032 accept -2 -1 expect -278345.504185270 -331829.870790275 direction inverse accept 200 100 expect 0.501797719 2.000904357 accept 200 -100 expect 0.501797717 1.999095641 accept -200 100 expect 0.498202281 2.000904357 accept -200 -100 expect 0.498202283 1.999095641 ------------------------------------------------------------------------------- operation +proj=labrd +ellps=GRS80 +lat_0=0 accept 0 0 expect failure errno invalid_op_illegal_arg_value =============================================================================== # Lambert Azimuthal Equal Area # Azi, Sph&Ell =============================================================================== ------------------------------------------------------------------------------- operation +proj=laea +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 222602.471450095 110589.827224410 accept 2 -1 expect 222602.471450095 -110589.827224409 accept -2 1 expect -222602.471450095 110589.827224410 accept -2 -1 expect -222602.471450095 -110589.827224409 accept 180 0 expect failure errno coord_transfm_outside_projection_domain direction inverse accept 200 100 expect 0.001796631 0.000904369 accept 200 -100 expect 0.001796631 -0.000904369 accept -200 100 expect -0.001796631 0.000904369 accept -200 -100 expect -0.001796631 -0.000904369 accept 13000000 0 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- operation +proj=laea +R=6400000 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 2 1 expect 223365.281370125 111716.668072916 accept 2 -1 expect 223365.281370125 -111716.668072916 accept -2 1 expect -223365.281370125 111716.668072916 accept -2 -1 expect -223365.281370125 -111716.668072916 accept 180 0 expect failure errno coord_transfm_outside_projection_domain direction inverse accept 200 100 expect 0.001790493 0.000895247 accept 200 -100 expect 0.001790493 -0.000895247 accept -200 100 expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 ------------------------------------------------------------------------------- # Test oblique aspect of the spherical form ------------------------------------------------------------------------------- operation +proj=laea +R=1 +lat_0=45 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 45 expect 0 0 accept 0 0 expect 0 -0.7654 accept 0 90 expect 0 0.7654 accept 0 -45 expect 0 -1.4142 accept 45 45 expect 0.5194 0.1521 tolerance 0.1 mm accept 45 45 roundtrip 100 # error when waaay outside the sphere direction inverse accept 0 10 expect failure errno coord_transfm_outside_projection_domain ------------------------------------------------------------------------------- # Test oblique aspect of the ellipsoidal form ------------------------------------------------------------------------------- operation +proj=laea +ellps=GRS80 +lat_0=45 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 0 45 expect 0 0 accept 0 0 expect 0 -4860248.8602 accept 0 90 expect 0 4886594.2207 accept 0 -45 expect 0 -8984728.0442 accept 45 45 expect 3318800.8682 968788.2336 tolerance 10 cm accept 45 45 roundtrip 100 # test rho proj-9.6.0/test/gie/defmodel.gie000664 001754 001755 00000007430 14764566077 016415 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- =============================================================================== Test +proj=defmodel =============================================================================== # Missing +model operation +proj=defmodel expect failure errno invalid_op_missing_arg # +model doesn't point to an existing file operation +proj=defmodel +model=i_do_not_exist expect failure errno invalid_op_file_not_found_or_invalid # Not a JSON file operation +proj=defmodel +model=proj.ini expect failure errno invalid_op_file_not_found_or_invalid # Missing time operation +proj=defmodel +model=tests/simple_model_degree_horizontal.json accept 2 49 30 HUGE_VAL expect failure errno coord_transfm_missing_time operation +proj=defmodel +model=tests/simple_model_degree_horizontal.json direction inverse accept 2 49 30 HUGE_VAL expect failure errno coord_transfm_missing_time # Horizontal deformation with horizontal unit = degree operation +proj=defmodel +model=tests/simple_model_degree_horizontal.json tolerance 0.1 mm accept 2 49 30 2020 expect 3 51 30 2020 roundtrip 1 # 3D deformation with horizontal unit = degree operation +proj=defmodel +model=tests/simple_model_degree_3d.json tolerance 0.1 mm accept 2 49 30 2020 expect 3 51 33 2020 roundtrip 1 # Horizontal deformation with horizontal unit = metre operation +proj=pipeline +step +inv +proj=merc +step +proj=defmodel +model=tests/simple_model_metre_horizontal.json +step +proj=merc tolerance 0.1 mm accept 10 20 30 2020 expect 11 22 30 2020 roundtrip 1 # 3D deformation with horizontal unit = metre operation +proj=pipeline +step +inv +proj=merc +step +proj=defmodel +model=tests/simple_model_metre_3d.json +step +proj=merc tolerance 0.1 mm accept 10 20 30 2020 expect 11 22 33 2020 roundtrip 1 # 3D deformation with horizontal unit = metre and a projeced grid operation +proj=pipeline +step +proj=defmodel +model=tests/simple_model_projected.json tolerance 0.1 mm accept 1500200.0 5400400.0 30 2020 expect 1500200.588 5400399.722 30.6084 2020 roundtrip 1 # South-west corner accept 1500000.0 5400000.0 30 2020 expect 1500000.4 5399999.8 30.84 2020 roundtrip 1 # South-east corner accept 1501000.0 5400000.0 30 2020 expect 1501000.5 5399999.75 30.75 2020 roundtrip 1 # North-west corner accept 1500000.0 5401000.0 30 2020 expect 1500000.8 5400999.6 30.36 2020 roundtrip 1 # North-east corner accept 1501000.0 5401000.0 30 2020 expect 1501001.0 5400999.7 30 2020 roundtrip 1 # Test geocentric addition of components operation +proj=pipeline +step +inv +proj=merc +step +proj=defmodel +model=tests/simple_model_metre_3d_geocentric.json +step +proj=merc tolerance 0.1 mm accept 10 20 30 2020 expect 11 22 33 2020 roundtrip 1 # Vertical deformation with vertical unit = metre operation +proj=defmodel +model=tests/simple_model_metre_vertical.json tolerance 0.1 mm accept 2 49 30 2020 expect 2 49 33 2020 roundtrip 1 # Adjust for 360 degree longitude offsets operation +proj=defmodel +model=tests/simple_model_metre_vertical.json tolerance 0.1 mm accept 362 49 30 2020 expect 2 49 33 2020 operation +proj=defmodel +model=tests/simple_model_wrap_east.json accept 165.9 -37.3 10 2020 expect 165.9 -37.3 10.4525 2020 operation +proj=defmodel +model=tests/simple_model_wrap_west.json accept 165.9 -37.3 10 2020 expect 165.9 -37.3 10.4525 2020 # Test geocentric bilinear interpolation method operation +proj=defmodel +model=tests/simple_model_polar.json tolerance 0.1 mm accept 20 -90 15 2020 expect 27.4743245365 -89.9999747721 18.0000 2020 accept 120 -90 15 2020 expect 27.4737934098 -89.9999747718 18.0000 2020 accept 235 -89.5 15 2020 expect -124.9986638571 -89.5000223708 17.3750 2020 accept 45 -89.5 15 2020 expect 44.9991295392 -89.4999759438 18.5469 2020 proj-9.6.0/test/gie/deformation.gie000664 001754 001755 00000015747 14764566077 017157 0ustar00e012349e012349000000 000000 =============================================================================== Test for the deformation operation - Kinematic Gridshifting For all the deformation tests the alaska and egm96_15.gtx grids are used even though they are not parts of a deformation model, they are in the proper format and for testing purposes it doesn't really matter all that much... The input coordinate is located at long=60, lam=-160 - somewhere in Alaska. =============================================================================== ------------------------------------------------------------------------------- # Test with an extract of nkgrf03vel_realigned with ctable2+gtx ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=cart +ellps=GRS80 \ +step +proj=deformation \ +xy_grids=tests/nkgrf03vel_realigned_xy_extract.ct2 \ +z_grids=tests/nkgrf03vel_realigned_z_extract.gtx +ellps=GRS80 +dt=1 \ +step +proj=cart +ellps=GRS80 +inv ------------------------------------------------------------------------------- tolerance 0.05 mm accept 21.5 63 0 expect 21.5000000049 62.9999999937 0.0083 roundtrip 5 ------------------------------------------------------------------------------- # Test with an extract of nkgrf03vel_realigned with GeoTIFF ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=cart +ellps=GRS80 \ +step +proj=deformation \ +grids=tests/nkgrf03vel_realigned_extract.tif +ellps=GRS80 +dt=1 \ +step +proj=cart +ellps=GRS80 +inv ------------------------------------------------------------------------------- tolerance 0.05 mm accept 21.5 63 0 expect 21.5000000049 62.9999999937 0.0083 roundtrip 5 ------------------------------------------------------------------------------- # Test the +dt parameter ------------------------------------------------------------------------------- operation +proj=deformation +xy_grids=alaska +z_grids=egm96_15.gtx \ +ellps=GRS80 +dt=16.0 # 2016.0 - 2000.0 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457 expect -3004295.7000 -1093474.2097 5500477.3397 roundtrip 5 # Test that errors are reported for coordinates outside the grid. # Here we test 120W 40N which is well outside the alaska grid. accept -2446353.8001 -4237209.0750 4077985.572 expect failure errno coord_transfm_outside_grid accept -2446353.8001 -4237209.0750 4077985.572 expect failure errno coord_transfm_outside_grid ------------------------------------------------------------------------------- # Test using both horizontal and vertical grids ------------------------------------------------------------------------------- operation +proj=deformation \ +xy_grids=alaska +z_grids=egm96_15.gtx +t_epoch=2016.0 +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm direction inverse accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457 2000.0 expect -3004295.7000 -1093474.2097 5500477.3397 2000.0 roundtrip 5 # Missing time direction forward accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457 HUGE_VAL expect failure errno coord_transfm_missing_time direction inverse accept -3004295.5882503074 -1093474.1690603832 5500477.1338251457 HUGE_VAL expect failure errno coord_transfm_missing_time ------------------------------------------------------------------------------- operation proj=deformation xy_grids=alaska +dt=1.0 ellps=GRS80 expect failure errno invalid_op_missing_arg operation proj=deformation z_grids=egm96_15.gtx +dt=1.0 ellps=GRS80 expect failure errno invalid_op_missing_arg operation proj=deformation xy_grids=nonexisting z_grids=egm96_15.gtx \ +dt=1.0 ellps=GRS80 expect failure errno invalid_op_file_not_found_or_invalid operation proj=deformation xy_grids=alaska z_grids=nonexisting \ +dt=1.0 ellps=GRS80 expect failure errno invalid_op_file_not_found_or_invalid operation proj=deformation xy_grids=alaska z_grids=nonexisting ellps=GRS80 expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=egm96_15.gtx +t_epoch=2010.0 +t_final=2018.0 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 12 56 0.0 2000.0 expect 12 56 -36.9960 2000.0 roundtrip 100 accept 12 56 0.0 2011.0 expect 12 56 0.0 2011.0 roundtrip 100 accept 12 56 0.0 2019.0 expect 12 56 0.0 2019.0 roundtrip 100 accept 12 56 0.0 expect 12 56 -36.9960 roundtrip 100 ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=egm96_15.gtx +t_epoch=2010.0 +t_final=now ------------------------------------------------------------------------------- tolerance 0.1 mm accept 12 56 0.0 2000.0 expect 12 56 -36.9960 2000.0 roundtrip 100 accept 12 56 0.0 2011.0 expect 12 56 0.0 2011.0 roundtrip 1000 accept 12 56 0.0 3011.0 expect 12 56 0.0 3011.0 roundtrip 100 ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=alaska +t_epoch=2010.0 +t_final=2018.0 ------------------------------------------------------------------------------- tolerance 0.1 mm accept -147.0 64.0 0.0 2000.0 expect -147.0023233121 63.9995792119 0.0 2000.0 roundtrip 100 accept -147.0 64.0 0.0 2011.0 expect -147.0 64.0 0.0 2011.0 roundtrip 100 accept -147.0 64.0 0.0 2011.0 expect -147.0 64.0 0.0 2020.0 roundtrip 100 ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=alaska +t_epoch=2010.0 +t_final=now ------------------------------------------------------------------------------- tolerance 0.1 mm accept -147.0 64.0 0.0 2000.0 expect -147.0023233121 63.9995792119 0.0 2000.0 roundtrip 100 accept -147.0 64.0 0.0 2011.0 expect -147.0 64.0 0.0 2011.0 roundtrip 100 accept -147.0 64.0 0.0 3011.0 expect -147.0 64.0 0.0 3011.0 roundtrip 100 proj-9.6.0/test/gie/ellipsoid.gie000664 001754 001755 00000015245 14764566077 016625 0ustar00e012349e012349000000 000000 =============================================================================== Test pj_ellipsoid, the reimplementation of pj_ell_set =============================================================================== ------------------------------------------------------------------------------- # First a spherical example ------------------------------------------------------------------------------- operation proj=merc R=6400000 ------------------------------------------------------------------------------- tolerance 10 nm accept 1 2 expect 111701.0721276371 223447.5262032605 accept 12 55 expect 1340412.8655316452 7387101.1430967357 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Then an explicitly defined ellipsoidal example ------------------------------------------------------------------------------- operation proj=merc a=6400000 rf=297 ------------------------------------------------------------------------------- tolerance 10 nm accept 1 2 expect 111701.0721276371 221945.9681832088 accept 12 55 expect 1340412.8655316452 7351803.9151705895 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Then try using a built in ellipsoid ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 ------------------------------------------------------------------------------- tolerance 10 nm accept 1 2 expect 111319.4907932736 221194.0771604237 accept 12 55 expect 1335833.8895192828 7326837.7148738774 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Then try to fail deliberately ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80000000000 expect failure errno invalid_op_illegal_arg_value operation proj=merc +a=-1 expect failure errno invalid_op_illegal_arg_value operation proj=merc accept 0 0 expect 0 0 operation proj=merc +a=1 +es=-1 expect failure errno invalid_op_illegal_arg_value operation proj=merc +R=0 expect failure errno invalid_op_illegal_arg_value operation +proj=merc +R_a +a=2 +f=2 expect failure errno invalid_op_illegal_arg_value operation expect failure operation cobra expect failure ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Finally test the spherification functionality ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 R_A tolerance 10 nm accept 12 55 expect 1334340.6237297705 7353636.6296552019 ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 R_V tolerance 10 nm accept 12 55 expect 1334339.2852675652 7353629.2533042720 ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 R_a tolerance 10 nm accept 12 55 expect 1333594.4904527504 7349524.6413825499 ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 R_g tolerance 10 nm accept 12 55 expect 1333592.6102291327 7349514.2793497816 ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 R_h tolerance 10 nm accept 12 55 expect 1333590.7300081658 7349503.9173316229 ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 R_lat_a=60 tolerance 10 nm accept 12 55 expect 1338073.7436268919 7374210.0924803326 ------------------------------------------------------------------------------- operation proj=merc ellps=GRS80 R_lat_g=60 tolerance 10 nm accept 12 55 expect 1338073.2696101593 7374207.4801437631 ------------------------------------------------------------------------------- operation proj=merc a=1E77 R_lat_a=90 b=1 expect failure ------------------------------------------------------------------------------- # This one from testvarious failed at first version of the pull request ------------------------------------------------------------------------------- operation proj=healpix a=1 lon_0=0 ellps=WGS84 ------------------------------------------------------------------------------- accept 0 41.937853904844985 expect 0 0.78452 accept -90 0 expect -1.56904 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Shape parameters ------------------------------------------------------------------------------- operation proj=utm zone=32 ellps=GRS80 rf=0 expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 e=-0.5 expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 e=1 expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 es=1 expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 a=1 es=1.1 expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 b=0 expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 f=1 expect failure errno invalid_op_illegal_arg_value operation proj=utm zone=32 ellps=GRS80 b=6000000 accept 12 55 expect 699293.0880 5674591.5295 operation proj=utm zone=32 ellps=GRS80 rf=300 accept 12 55 expect 691873.1212 6099054.9661 operation proj=utm zone=32 ellps=GRS80 f=0.00333333333333 accept 12 55 expect 691873.1212 6099054.9661 operation proj=utm zone=32 ellps=GRS80 b=6000000 accept 12 55 expect 699293.0880 5674591.5295 operation proj=utm zone=32 a=6400000 b=6000000 accept 12 55 expect 700416.5900 5669475.8884 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test that flattening can be set to zero ------------------------------------------------------------------------------- operation proj=merc +a=1.0 +f=0.0 ------------------------------------------------------------------------------- accept 12 56 expect 0.20944 1.18505 ------------------------------------------------------------------------------- proj-9.6.0/test/gie/geotiff_grids.gie000664 001754 001755 00000044341 14764566077 017453 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- =============================================================================== Test GeoTIFF grids =============================================================================== # Those first tests using +proj=vgridshift only test the capability of reading # correctly a value from various formulations of GeoTIFF file, hence only the # forward path is tested (reverse path is tested in other files) ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_pixelispoint.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_pixelisarea.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_deflate.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_deflate_floatingpointpredictor.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_uint16.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_uint16_with_scale_offset.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_int16.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_int32.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_uint32.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_float64.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- # The overview should be ignored ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_with_overview.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_in_second_channel.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_bigtiff.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_bigendian.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_bigendian_bigtiff.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_bottomup_with_scale.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_bottomup_with_matrix.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_with_subgrid.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.5 52.5 0 expect 4.5 52.5 11.5 # In subgrid accept 5.5 53.5 0 expect 5.5 53.5 110.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_nodata.tif +multiplier=1 ------------------------------------------------------------------------------- accept 4.05 52.1 0 expect 4.05 52.1 10 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_hydroid_height.tif +multiplier=1 ------------------------------------------------------------------------------- accept 2 49 0 expect 2 49 44.643493652 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_invalid_channel_type.tif +multiplier=1 ------------------------------------------------------------------------------- expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_vgrid_unsupported_byte.tif +multiplier=1 ------------------------------------------------------------------------------- expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/us_noaa_geoid06_ak_subset_at_antimeridian.tif +multiplier=1 ------------------------------------------------------------------------------- tolerance 1 mm accept 179.99 54.5 0 expect 179.99 54.5 -2.2226 accept -179.99 54.5 0 expect -179.99 54.5 -2.3488 accept 179.999999 54.5 0 expect 179.999999 54.5 -2.2872 accept -179.999999 54.5 0 expect -179.999999 54.5 -2.2872 accept 179.8 54.5 0 expect 179.8 54.5 -0.7011 accept 179.799 54.5 0 expect failure errno coord_transfm_outside_grid accept 180.1833333 54.5 0 expect -179.8166667 54.5 -3.1933 accept -179.8166667 54.5 0 expect -179.8166667 54.5 -3.1933 accept 180.184 54.5 0 expect failure errno coord_transfm_outside_grid accept -179.816 54.5 0 expect failure errno coord_transfm_outside_grid ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_separate.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_strip.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_tiled.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_tiled_separate.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_positive_west.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_lon_shift_first.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_radian.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_degree.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- # The overview should be ignored ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_with_overview.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_extra_ifd_with_other_info.tif ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- # Subset of NTv2_0.gsb ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_with_subgrid.tif ------------------------------------------------------------------------------- # In subgrid ALbanff, of parent CAwest accept -115.5416667 51.1666667 0 expect -115.5427092888 51.1666899972 0 # In subgrid ONtronto, of parent CAeast accept -80.5041667 44.5458333 0 expect -80.50401615833 44.5458827236 0 ------------------------------------------------------------------------------- # Subset of NTv2_0.gsb ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_with_subgrid_no_grid_name.tif ------------------------------------------------------------------------------- # In subgrid ALbanff, of parent CAwest accept -115.5416667 51.1666667 0 expect -115.5427092888 51.1666899972 0 # In subgrid ONtronto, of parent CAeast accept -80.5041667 44.5458333 0 expect -80.50401615833 44.5458827236 0 ------------------------------------------------------------------------------- # Check a nested grid of a nested grid only based on spatial extent analysis ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_with_two_level_of_subgrids_no_grid_name.tif ------------------------------------------------------------------------------- accept -45.0 22.5 accept -44.9983333334 22.5013888889 # Check a nested grid of a nested grid only based on spatial extent analysis ------------------------------------------------------------------------------- operation +proj=vgridshift +grids=tests/test_hgrid_with_two_level_of_subgrids_no_grid_name.tif +multiplier=1 ------------------------------------------------------------------------------- accept -45.0 22.5 0 accept -45.0 22.5 5 ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_vgrid.tif ------------------------------------------------------------------------------- expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- # IGNF:LAMBE to IGNF:LAMB93 using xyzgridshift operation ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +inv +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 \ +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=clrk80ign +pm=paris \ +step +proj=push +v_3 \ +step +proj=cart +ellps=clrk80ign \ +step +proj=xyzgridshift +grids=tests/subset_of_gr3df97a.tif +grid_ref=output_crs +ellps=GRS80 \ +step +proj=cart +ellps=GRS80 +inv \ +step +proj=pop +v_3 \ +step +proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 \ +x_0=700000 +y_0=6600000 +ellps=GRS80 ------------------------------------------------------------------------------- tolerance 1 mm accept 814149.529 1887019.768 0 expect 860690.804 6319036.849 0 # If using ntf_r93.gsb, one gets: 860690.805 6319036.850 roundtrip 1 ------------------------------------------------------------------------------- proj-9.6.0/test/gie/gridshift.gie000664 001754 001755 00000027255 14764566077 016630 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- =============================================================================== Test generalized shift grid method =============================================================================== ----------------------------- # Classic lat-lon shift grids ----------------------------- # Subset of NTv2_0.gsb ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/test_hgrid_with_subgrid.tif ------------------------------------------------------------------------------- accept 179.799 54.5 0 expect failure errno coord_transfm_outside_grid # In subgrid ALbanff, of parent CAwest accept -115.5416667 51.1666667 0 expect -115.5427092888 51.1666899972 0 roundtrip 1 # In subgrid ONtronto, of parent CAeast accept -80.5041667 44.5458333 0 expect -80.50401615833 44.5458827236 0 roundtrip 1 ------------------------------------------------------------------------------- # Subset of NTv2_0.gsb ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/test_hgrid_with_subgrid_no_grid_name.tif ------------------------------------------------------------------------------- # In subgrid ALbanff, of parent CAwest accept -115.5416667 51.1666667 0 expect -115.5427092888 51.1666899972 0 roundtrip 1 # In subgrid ONtronto, of parent CAeast accept -80.5041667 44.5458333 0 expect -80.50401615833 44.5458827236 0 roundtrip 1 ------------------------------------------------------------------------------- -------------------- # Classic geoidgrids -------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_geoid06_ak_subset_at_antimeridian.tif ------------------------------------------------------------------------------- tolerance 1 mm accept 179.99 54.5 0 expect 179.99 54.5 -2.2226 roundtrip 1 accept -179.99 54.5 0 expect -179.99 54.5 -2.3488 roundtrip 1 accept 179.999999 54.5 0 expect 179.999999 54.5 -2.2872 roundtrip 1 accept -179.999999 54.5 0 expect -179.999999 54.5 -2.2872 roundtrip 1 accept 179.8 54.5 0 expect 179.8 54.5 -0.7011 roundtrip 1 accept 179.799 54.5 0 expect failure errno coord_transfm_outside_grid accept 180.1833333 54.5 0 expect -179.8166667 54.5 -3.1933 roundtrip 1 accept -179.8166667 54.5 0 expect -179.8166667 54.5 -3.1933 roundtrip 1 accept 180.184 54.5 0 expect failure errno coord_transfm_outside_grid accept -179.816 54.5 0 expect failure errno coord_transfm_outside_grid ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/test_hydroid_height.tif ------------------------------------------------------------------------------- accept 2 49 0 expect 2 49 44.643493652 ------------------------------------------------------------------------------- ---------------------------------------------------------------------- # Geographic 3D offsets with quadratic interpolation (defined in file) ---------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_2007_nad83_2011_conus_extract.tif ------------------------------------------------------------------------------- tolerance 1 mm # Test point from https://www.ngs.noaa.gov/NCAT, exactly at one grid node accept -95.5000000000 37.0000000000 10.000 expect -95.4999998219 37.0000000147 9.984 roundtrip 1 # Test point from https://www.ngs.noaa.gov/NCAT # specifically selected to be close to the middle of a pixel accept -95.4916666666 37.0083333333 10.000 expect -95.4916664889 37.0083333484 9.984 roundtrip 1 # Test point from https://www.ngs.noaa.gov/NCAT # specifically selected to be close to the middle of a pixel (but # other side of previous test point) accept -95.4916666667 37.0083333334 10.000 expect -95.4916664890 37.0083333485 9.984 roundtrip 1 # Test point at north-east of truncated grid accept -95.416667 37.083333 0.000 expect -95.4166668251 37.0833330159 -0.0157 # Test point at south-west of truncated grid accept -95.58333 36.91667 0.000 expect -95.5833298166 36.9166700108 -0.0157 roundtrip 1 ---------------------------------------------------------------------- # Geographic 3D offsets, but split in one grid with horizontal offset and # another one with ellipsoidal height offset, with quadratic interpolation (defined in file) ---------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_2007_nad83_2011_alaska_extract.tif ------------------------------------------------------------------------------- tolerance 1 mm # Test point from https://www.ngs.noaa.gov/NCAT, exactly at one grid node accept -158.0 61.5 10.000 expect -157.9999996115 61.499999564 9.987 roundtrip 1 # Test point from https://www.ngs.noaa.gov/NCAT accept -158.1 61.51 10.000 expect -158.0999996011 61.5099995458 9.987 roundtrip 1 ---------------------------------------------------------------------- # Combine 2 above type of grids ---------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_2007_nad83_2011_conus_extract.tif,tests/us_noaa_nadcon5_nad83_2007_nad83_2011_alaska_extract.tif ------------------------------------------------------------------------------- tolerance 1 mm # Test point from https://www.ngs.noaa.gov/NCAT, exactly at one grid node accept -95.5000000000 37.0000000000 10.000 expect -95.4999998219 37.0000000147 9.984 roundtrip 1 # Test point from https://www.ngs.noaa.gov/NCAT, exactly at one grid node accept -158.0 61.5 10.000 expect -157.9999996115 61.499999564 9.987 roundtrip 1 ---------------------------------------------------------------------- # Test +no_z_transform ---------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_2007_nad83_2011_conus_extract.tif +no_z_transform ------------------------------------------------------------------------------- tolerance 1 mm accept -95.5000000000 37.0000000000 10.000 expect -95.4999998219 37.0000000147 10.000 roundtrip 1 ------------------------------ # Test bilinear vs biquadratic ------------------------------ ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_2007_nad83_2011_conus_extract.tif +interpolation=biquadratic ------------------------------------------------------------------------------- tolerance 0.005 mm accept -95.4916666666 37.0083333333 10.000 expect -95.49166648893 37.00833334837 9.984340 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_2007_nad83_2011_conus_extract.tif +interpolation=bilinear ------------------------------------------------------------------------------- tolerance 0.001 mm accept -95.4916666666 37.0083333333 10.000 expect -95.49166648893 37.00833334838 9.984341 roundtrip 1 ---------------------------------------------------------------------------------------------------------------------- # Test case with inverse biquadratic convergence where we are around a location where the interpolation window changes ---------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_1986_nad83_harn_conus_extract_sanfrancisco.tif +interpolation=biquadratic ------------------------------------------------------------------------------- direction inverse tolerance 0.005 mm accept -122.4250009683 37.8286740788 expect -122.4249999391 37.8286728006 ---------------------------------------------------------------------- # Test a grid referenced in a projected CRS, with an additional constant offset ---------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/test_gridshift_projected.tif ------------------------------------------------------------------------------- tolerance 0.5 mm accept -598000.000 -1160020.000 0.000 expect -5597999.885 -6160019.978 0.000 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 +alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel \ +step +proj=gridshift +grids=tests/test_gridshift_projected.tif \ +step +inv +proj=mod_krovak +lat_0=49.5 +lon_0=24.8333333333333 +alpha=30.2881397222222 +k=0.9999 +x_0=5000000 +y_0=5000000 +ellps=bessel ------------------------------------------------------------------------------- tolerance 0.5 mm accept 16.610452439 49.202425040 0.000 expect 16.610455233 49.202425034 0.000 roundtrip 1 ------------- # Error cases ------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/us_noaa_nadcon5_nad83_2007_nad83_2011_conus_extract.tif +interpolation=invalid ------------------------------------------------------------------------------- expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift ------------------------------------------------------------------------------- expect failure errno invalid_op_missing_arg ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/test_vgrid_unsupported_byte.tif ------------------------------------------------------------------------------- expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=gridshift +grids=tests/i_do_not_exist.tif ------------------------------------------------------------------------------- expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- proj-9.6.0/test/gie/guyou.gie000664 001754 001755 00000204203 14764566077 016003 0ustar00e012349e012349000000 000000 ------------------------------------------------------------ # This gie file was automatically generated using libproject # where the guyou code was adapted from ------------------------------------------------------------ ------------------------------------------------------------ operation +proj=guyou +R=6370997 tolerance 1 mm ------------------------------------------------------------ accept -179.2338274749 -90.7265739758 expect failure errno coord_transfm_invalid_coord accept -169.3015609686 -90.0683270041 expect failure errno coord_transfm_invalid_coord accept -159.4420546811 -89.5695551279 expect failure errno coord_transfm_outside_projection_domain accept -149.0045856345 -89.3536369188 expect failure errno coord_transfm_outside_projection_domain accept -139.7153960960 -88.6283945950 expect failure errno coord_transfm_outside_projection_domain accept -129.2286632319 -88.1551228787 expect failure errno coord_transfm_outside_projection_domain accept -119.6286953558 -87.5083524092 expect failure errno coord_transfm_outside_projection_domain accept -109.3328522812 -86.7510648640 expect failure errno coord_transfm_outside_projection_domain accept -99.1598524965 -86.5788079857 expect failure errno coord_transfm_outside_projection_domain accept -89.3858632536 -85.7390309668 expect -671252.534 -11805089.168 accept -79.5087279110 -85.6235707551 expect -677891.869 -11686402.401 accept -69.4424228202 -84.9021341881 expect -751854.643 -11529210.346 accept -59.8852518498 -84.8051735959 expect -707106.316 -11400468.436 accept -49.2060555595 -84.5394950727 expect -649513.005 -11249221.343 accept -39.5503275201 -84.2989454792 expect -569372.760 -11119412.618 accept -29.3360829537 -83.5760929301 expect -492270.211 -10930876.977 accept -19.3394041666 -83.2992154597 expect -346317.029 -10818825.415 accept -9.2056484989 -82.3824201970 expect -189497.900 -10632767.439 accept 0.1120336125 -81.7746272088 expect 2495.102 -10523224.283 accept 10.5665512094 -81.6687644685 expect 237086.343 -10527998.139 accept 20.1722250768 -81.3102866550 expect 465363.960 -10531084.361 accept 30.5265377635 -80.9100945160 expect 718603.642 -10578303.571 accept 40.4565955888 -79.9253199265 expect 1020024.277 -10597524.229 accept 50.1397967283 -79.1591500985 expect 1304571.493 -10703166.350 accept 60.7532284194 -78.3809992723 expect 1600003.385 -10897309.840 accept 70.7513325682 -77.7277296032 expect 1840823.214 -11154024.272 accept 80.2085188693 -77.6809008485 expect 1936586.409 -11469925.164 accept 90.8009658259 -76.9680414794 expect failure errno coord_transfm_outside_projection_domain accept 100.6742326194 -76.5942100817 expect failure errno coord_transfm_outside_projection_domain accept 110.5209403479 -75.7585741711 expect failure errno coord_transfm_outside_projection_domain accept 120.5896919383 -74.7649093703 expect failure errno coord_transfm_outside_projection_domain accept 130.7851397036 -73.8582467239 expect failure errno coord_transfm_outside_projection_domain accept 140.7197125638 -72.9106110624 expect failure errno coord_transfm_outside_projection_domain accept 150.4163065521 -72.4059990981 expect failure errno coord_transfm_outside_projection_domain accept 160.4383759680 -71.9757412863 expect failure errno coord_transfm_outside_projection_domain accept 170.5708534042 -71.9525642223 expect failure errno coord_transfm_outside_projection_domain accept 180.2751947006 -71.5923171899 expect failure errno coord_transfm_outside_projection_domain accept -179.7095201992 -79.9687467646 expect failure errno coord_transfm_outside_projection_domain accept -169.0436424710 -79.2424043855 expect failure errno coord_transfm_outside_projection_domain accept -159.2911675882 -78.8917009107 expect failure errno coord_transfm_outside_projection_domain accept -149.2815042820 -78.0224816760 expect failure errno coord_transfm_outside_projection_domain accept -139.5027225646 -77.9987560452 expect failure errno coord_transfm_outside_projection_domain accept -129.2026665027 -77.1138023157 expect failure errno coord_transfm_outside_projection_domain accept -119.6161746714 -76.2954327600 expect failure errno coord_transfm_outside_projection_domain accept -109.9384914753 -75.7674050764 expect failure errno coord_transfm_outside_projection_domain accept -99.2183181307 -75.3730011624 expect failure errno coord_transfm_outside_projection_domain accept -89.2190150125 -74.7701795551 expect -2454071.146 -11777557.324 accept -79.9068086129 -74.7070663318 expect -2420802.270 -11364639.564 accept -69.8146319687 -74.4419812746 expect -2332536.533 -10920591.181 accept -59.6461988138 -73.5860650374 expect -2238931.921 -10443654.878 accept -49.5451009633 -73.4954549764 expect -1957322.263 -10070951.521 accept -39.9329751143 -72.8013395667 expect -1694139.274 -9695298.489 accept -29.5097310678 -72.3497881968 expect -1313051.961 -9382518.879 accept -19.9921230083 -71.8366964443 expect -925602.320 -9142855.035 accept -9.2490763384 -71.0229026677 expect -448842.813 -8910142.058 accept 0.7720814716 -70.5972765500 expect 38276.499 -8815699.571 accept 10.0262635630 -70.0895817655 expect 507116.076 -8777330.134 accept 20.7479812506 -69.9032152988 expect 1049893.591 -8874298.589 accept 30.3631890384 -69.4998925877 expect 1545301.219 -9005805.601 accept 40.5162040333 -69.3056454098 expect 2041397.015 -9262605.098 accept 50.6243675940 -68.6167358219 expect 2562297.663 -9551642.297 accept 60.0486043403 -67.6600969757 expect 3069614.536 -9891241.853 accept 70.4774261179 -66.9833418981 expect 3532980.732 -10438619.729 accept 80.8997122704 -66.2858473379 expect 3898590.190 -11120572.688 accept 90.1834036836 -65.9440561722 expect failure errno coord_transfm_outside_projection_domain accept 100.1984006355 -65.8229326488 expect failure errno coord_transfm_outside_projection_domain accept 110.0486236854 -65.7960345782 expect failure errno coord_transfm_outside_projection_domain accept 120.0510835725 -65.5190096678 expect failure errno coord_transfm_outside_projection_domain accept 130.0896340570 -64.7428784330 expect failure errno coord_transfm_outside_projection_domain accept 140.3678752942 -64.2229928140 expect failure errno coord_transfm_outside_projection_domain accept 150.9150615805 -63.6990548356 expect failure errno coord_transfm_outside_projection_domain accept 160.7280406636 -63.2384418688 expect failure errno coord_transfm_outside_projection_domain accept 170.9183869916 -62.3774990742 expect failure errno coord_transfm_outside_projection_domain accept 180.5619551786 -61.8063907044 expect failure errno coord_transfm_outside_projection_domain accept -179.5943789042 -69.9992085183 expect failure errno coord_transfm_outside_projection_domain accept -169.2134281484 -69.9776667645 expect failure errno coord_transfm_outside_projection_domain accept -159.4518981501 -69.3934026425 expect failure errno coord_transfm_outside_projection_domain accept -149.3420413989 -68.4537518490 expect failure errno coord_transfm_outside_projection_domain accept -139.1131932532 -67.9826718761 expect failure errno coord_transfm_outside_projection_domain accept -129.7785737569 -67.0804523760 expect failure errno coord_transfm_outside_projection_domain accept -119.8160590971 -66.1963102135 expect failure errno coord_transfm_outside_projection_domain accept -109.4603476745 -65.8550220266 expect failure errno coord_transfm_outside_projection_domain accept -99.0748524068 -64.9756976432 expect failure errno coord_transfm_outside_projection_domain accept -89.9206313411 -64.7601702734 expect -4268828.098 -11805632.912 accept -79.4513980949 -64.0272106872 expect -4293419.464 -10904353.202 accept -69.0843325805 -63.4870607362 expect -4057816.546 -10051354.989 accept -59.7650575505 -63.4512934361 expect -3634811.426 -9423524.250 accept -49.8561841911 -63.1756677100 expect -3130112.256 -8850654.578 accept -39.7345386469 -62.7259798066 expect -2564843.692 -8361549.352 accept -29.4900121781 -62.6544841838 expect -1922148.138 -8030239.835 accept -19.6711096687 -62.5940745250 expect -1289744.456 -7810760.172 accept -9.2778801891 -62.3661044165 expect -613541.964 -7649920.107 accept 0.6845208231 -61.4547664483 expect 46410.846 -7484124.735 accept 10.3009385171 -60.8552091241 expect 708981.245 -7444183.153 accept 20.9408599577 -60.7500016629 expect 1443253.248 -7573067.407 accept 30.2033715333 -60.0297971335 expect 2116701.190 -7683450.314 accept 40.1756048990 -59.0918222414 expect 2877171.027 -7881749.372 accept 50.6849086093 -58.5125230628 expect 3670248.004 -8282000.517 accept 60.3342813246 -57.7415828952 expect 4433950.014 -8770184.848 accept 70.3874078634 -56.9198966570 expect 5230934.598 -9486837.736 accept 80.0904535261 -56.6354279372 expect 5822685.735 -10504356.087 accept 90.6634211024 -56.5251359813 expect failure errno coord_transfm_outside_projection_domain accept 100.1452342443 -55.8401169432 expect failure errno coord_transfm_outside_projection_domain accept 110.6864799856 -55.5116401637 expect failure errno coord_transfm_outside_projection_domain accept 120.3347823427 -55.2601958124 expect failure errno coord_transfm_outside_projection_domain accept 130.5134926951 -55.0238926067 expect failure errno coord_transfm_outside_projection_domain accept 140.3265242174 -54.4313834318 expect failure errno coord_transfm_outside_projection_domain accept 150.3685976599 -54.1552793246 expect failure errno coord_transfm_outside_projection_domain accept 160.9436711470 -53.1842316256 expect failure errno coord_transfm_outside_projection_domain accept 170.4034003030 -52.8621841373 expect failure errno coord_transfm_outside_projection_domain accept 180.0812683568 -52.6818511960 expect failure errno coord_transfm_outside_projection_domain accept -179.2224188803 -59.7295306861 expect failure errno coord_transfm_outside_projection_domain accept -169.4132895133 -59.2803345438 expect failure errno coord_transfm_outside_projection_domain accept -159.2336212919 -58.3674875157 expect failure errno coord_transfm_outside_projection_domain accept -149.6086565801 -57.6885943847 expect failure errno coord_transfm_outside_projection_domain accept -139.4537382278 -57.2767531329 expect failure errno coord_transfm_outside_projection_domain accept -129.8015642819 -57.0799116685 expect failure errno coord_transfm_outside_projection_domain accept -119.7728590554 -56.2047588377 expect failure errno coord_transfm_outside_projection_domain accept -109.7735055519 -55.4019628150 expect failure errno coord_transfm_outside_projection_domain accept -99.4371631073 -55.2867551270 expect failure errno coord_transfm_outside_projection_domain accept -89.8854290226 -55.2220077227 expect -6418775.726 -11794916.199 accept -79.1497539952 -54.3143207583 expect -6295512.226 -10173525.949 accept -69.3905433066 -53.3718201615 expect -5756144.839 -8936634.008 accept -59.2835867353 -53.2932693342 expect -4907385.858 -8087491.004 accept -49.4130759901 -52.3805314789 expect -4141087.186 -7360481.030 accept -39.8824125488 -52.1928991404 expect -3328366.078 -6910061.242 accept -29.4030406405 -51.2671252739 expect -2475693.404 -6448925.355 accept -19.4382561500 -50.9645531478 expect -1635897.800 -6198331.601 accept -9.1883916217 -50.6933815720 expect -773969.285 -6040410.862 accept 0.9421744209 -50.4553454248 expect 79572.416 -5974811.404 accept 10.2598469192 -50.3729595701 expect 868653.957 -6006249.038 accept 20.5264309044 -49.7736213847 expect 1760454.588 -6056357.985 accept 30.1563304273 -49.0546876336 expect 2631434.958 -6165824.779 accept 40.6791957468 -48.4680700697 expect 3620466.862 -6416267.044 accept 50.4781583451 -48.0216578802 expect 4589763.311 -6780810.836 accept 60.0996876001 -47.2258755796 expect 5649013.583 -7224720.556 accept 70.5609958631 -47.1401905695 expect 6849278.900 -8064195.707 accept 80.4369996020 -46.9794332723 expect 8182405.160 -9269149.720 accept 90.9151039880 -46.9029866463 expect failure errno coord_transfm_outside_projection_domain accept 100.4373534616 -46.3943619602 expect failure errno coord_transfm_outside_projection_domain accept 110.2842129880 -46.0308507793 expect failure errno coord_transfm_outside_projection_domain accept 120.6486866778 -45.8054277747 expect failure errno coord_transfm_outside_projection_domain accept 130.9364857762 -44.8554259969 expect failure errno coord_transfm_outside_projection_domain accept 140.6165699073 -43.9676693909 expect failure errno coord_transfm_outside_projection_domain accept 150.9528142413 -43.4405627423 expect failure errno coord_transfm_outside_projection_domain accept 160.5641245537 -42.8137396224 expect failure errno coord_transfm_outside_projection_domain accept 170.0938980656 -42.4864250646 expect failure errno coord_transfm_outside_projection_domain accept 180.3769971687 -41.5989802375 expect failure errno coord_transfm_outside_projection_domain accept -179.6808058361 -49.7903016746 expect failure errno coord_transfm_outside_projection_domain accept -169.7237623059 -49.1268921477 expect failure errno coord_transfm_outside_projection_domain accept -159.4102418582 -48.8849591656 expect failure errno coord_transfm_outside_projection_domain accept -149.2254953136 -48.1844242863 expect failure errno coord_transfm_outside_projection_domain accept -139.6041758915 -48.1179744801 expect failure errno coord_transfm_outside_projection_domain accept -129.3754143228 -47.1336832541 expect failure errno coord_transfm_outside_projection_domain accept -119.9746970079 -46.6736994965 expect failure errno coord_transfm_outside_projection_domain accept -109.7581919902 -46.0366124472 expect failure errno coord_transfm_outside_projection_domain accept -99.3823846098 -45.2381613350 expect failure errno coord_transfm_outside_projection_domain accept -89.0277852820 -44.5174266340 expect -11094288.600 -10444365.724 accept -79.1875075496 -44.2312628392 expect -8556831.915 -8448188.432 accept -69.3884076627 -43.7260948924 expect -7143035.210 -7330162.787 accept -59.0994244861 -42.9591919136 expect -5919312.756 -6474855.414 accept -49.2684633342 -42.4441379846 expect -4837843.073 -5897052.170 accept -39.8960036873 -42.3148188142 expect -3850941.078 -5525083.810 accept -29.6345258809 -41.8794443052 expect -2831674.368 -5185997.953 accept -19.0064372737 -41.6217897025 expect -1802198.153 -4961332.000 accept -9.6098419837 -41.1640449046 expect -910539.796 -4807542.914 accept 0.3859851257 -40.6879294032 expect 36674.106 -4715715.978 accept 10.6732390311 -40.2577682910 expect 1020571.561 -4700734.253 accept 20.4749360982 -39.4261884171 expect 1985510.706 -4700304.672 accept 30.7185540788 -39.1851869067 expect 3019577.777 -4853020.985 accept 40.6403024621 -38.8583130891 expect 4072800.273 -5067567.533 accept 50.3930386020 -38.6899841653 expect 5171620.590 -5386102.158 accept 60.7920764042 -38.4864124906 expect 6459723.244 -5832754.996 accept 70.9818120585 -38.2419029781 expect 7920365.597 -6384561.316 accept 80.3791490145 -38.1923095026 expect 9574134.022 -7007709.059 accept 90.5297378114 -37.5687159826 expect failure errno coord_transfm_outside_projection_domain accept 100.5373276614 -37.4573903187 expect failure errno coord_transfm_outside_projection_domain accept 110.0551604465 -36.8785291472 expect failure errno coord_transfm_outside_projection_domain accept 120.5920897044 -36.3504262236 expect failure errno coord_transfm_outside_projection_domain accept 130.1692367892 -36.3071095311 expect failure errno coord_transfm_outside_projection_domain accept 140.0034604349 -35.8053875550 expect failure errno coord_transfm_outside_projection_domain accept 150.9162515055 -35.0369229256 expect failure errno coord_transfm_outside_projection_domain accept 160.4006102901 -34.7824559736 expect failure errno coord_transfm_outside_projection_domain accept 170.8020614665 -34.6367632672 expect failure errno coord_transfm_outside_projection_domain accept 180.1238278697 -34.5735242626 expect failure errno coord_transfm_outside_projection_domain accept -179.3392011550 -39.0089519711 expect failure errno coord_transfm_outside_projection_domain accept -169.9896135260 -38.7758352491 expect failure errno coord_transfm_outside_projection_domain accept -159.9464206150 -38.3643075290 expect failure errno coord_transfm_outside_projection_domain accept -149.8580885141 -38.2565849818 expect failure errno coord_transfm_outside_projection_domain accept -139.0005407033 -37.8175552179 expect failure errno coord_transfm_outside_projection_domain accept -129.9744744916 -36.9749101428 expect failure errno coord_transfm_outside_projection_domain accept -119.4953757022 -36.8251466679 expect failure errno coord_transfm_outside_projection_domain accept -109.8732055905 -36.2644266473 expect failure errno coord_transfm_outside_projection_domain accept -99.2563126423 -35.6283177384 expect failure errno coord_transfm_outside_projection_domain accept -89.2720021301 -34.8337636531 expect -11652944.582 -6432012.406 accept -79.9152588062 -34.3347175023 expect -9740630.763 -6049660.979 accept -69.0059405699 -34.0306344677 expect -7905352.539 -5468386.167 accept -59.9476909228 -33.2328890516 expect -6646979.903 -4929914.448 accept -49.4912957918 -32.6555467192 expect -5330421.040 -4465548.182 accept -39.4661117786 -32.0831702107 expect -4167577.289 -4109295.788 accept -29.8207115548 -31.3399185713 expect -3111531.284 -3817143.482 accept -19.8496271346 -31.2738366265 expect -2047137.004 -3670990.375 accept -9.6527246528 -30.5326610745 expect -992826.938 -3500250.586 accept 0.5995552142 -29.7920841190 expect 61796.178 -3387838.259 accept 10.8411608718 -29.0671095836 expect 1125114.712 -3331112.646 accept 20.3367215658 -28.5199148717 expect 2132236.809 -3339194.703 accept 30.2505986215 -28.1864696949 expect 3217328.415 -3423954.421 accept 40.5431469837 -27.9403197244 expect 4399349.482 -3578155.060 accept 50.7509056230 -27.8467488939 expect 5649446.347 -3807241.841 accept 60.6370271381 -27.3001909011 expect 6983544.451 -4006532.475 accept 70.8220482203 -26.5371650435 expect 8516309.152 -4185254.482 accept 80.2959404087 -25.8737294352 expect 10093881.725 -4297066.952 accept 90.1903848581 -25.5035070096 expect failure errno coord_transfm_outside_projection_domain accept 100.5725497895 -24.6749860350 expect failure errno coord_transfm_outside_projection_domain accept 110.0757522922 -23.8621044004 expect failure errno coord_transfm_outside_projection_domain accept 120.4910038636 -23.3154304481 expect failure errno coord_transfm_outside_projection_domain accept 130.4609905705 -22.3944602016 expect failure errno coord_transfm_outside_projection_domain accept 140.6308884892 -22.1941484220 expect failure errno coord_transfm_outside_projection_domain accept 150.0358167607 -21.7789499055 expect failure errno coord_transfm_outside_projection_domain accept 160.5878069076 -21.7481812197 expect failure errno coord_transfm_outside_projection_domain accept 170.4050593367 -20.8432353205 expect failure errno coord_transfm_outside_projection_domain accept 180.6001699300 -20.8118177919 expect failure errno coord_transfm_outside_projection_domain accept -179.3361000782 -29.8463222037 expect failure errno coord_transfm_outside_projection_domain accept -169.8999068245 -28.9429338477 expect failure errno coord_transfm_outside_projection_domain accept -159.7592377898 -28.1615925042 expect failure errno coord_transfm_outside_projection_domain accept -149.9913638701 -28.0372332017 expect failure errno coord_transfm_outside_projection_domain accept -139.2301202473 -27.0565876723 expect failure errno coord_transfm_outside_projection_domain accept -129.1268966632 -26.9865340393 expect failure errno coord_transfm_outside_projection_domain accept -119.2460222852 -26.3197565889 expect failure errno coord_transfm_outside_projection_domain accept -109.2062914741 -26.1682287226 expect failure errno coord_transfm_outside_projection_domain accept -99.9045914125 -25.7799438486 expect failure errno coord_transfm_outside_projection_domain accept -89.4037956256 -25.6991927518 expect -11705355.483 -4359448.179 accept -79.8043265456 -25.1818797146 expect -10024094.636 -4156724.889 accept -69.7140423873 -24.8449696747 expect -8395540.010 -3863379.945 accept -59.0016643714 -23.9868520946 expect -6856108.329 -3450250.183 accept -49.1644096637 -23.9073140300 expect -5551692.748 -3211628.519 accept -39.4087456167 -23.3838764285 expect -4359255.995 -2956380.419 accept -29.5780322984 -22.5310742645 expect -3226303.975 -2709281.660 accept -19.4970507012 -21.7271569228 expect -2106709.007 -2516125.488 accept -9.2309552615 -21.1686043260 expect -992105.870 -2396128.627 accept 0.8151388636 -20.3765117338 expect 87667.538 -2289827.020 accept 10.7150561883 -20.1052727537 expect 1156777.413 -2278355.080 accept 20.3899871763 -20.0634670217 expect 2218350.011 -2325602.798 accept 30.0598555833 -19.6984569649 expect 3315266.258 -2366374.830 accept 40.9334924529 -18.8831525011 expect 4616943.129 -2395016.592 accept 50.3705152580 -17.9548619999 expect 5824857.949 -2409796.249 accept 60.7629076148 -17.7461797647 expect 7240990.735 -2550212.531 accept 70.5049492221 -17.5449804169 expect 8675560.230 -2678367.876 accept 80.3956836685 -17.4271102390 expect 10234009.562 -2784279.451 accept 90.6808556357 -16.9481935094 expect failure errno coord_transfm_outside_projection_domain accept 100.3669156655 -16.2433923188 expect failure errno coord_transfm_outside_projection_domain accept 110.3790328662 -15.6932515137 expect failure errno coord_transfm_outside_projection_domain accept 120.0882522480 -15.6441029970 expect failure errno coord_transfm_outside_projection_domain accept 130.9326190128 -15.1072978015 expect failure errno coord_transfm_outside_projection_domain accept 140.4297399110 -14.7647959439 expect failure errno coord_transfm_outside_projection_domain accept 150.6670621082 -14.1800360544 expect failure errno coord_transfm_outside_projection_domain accept 160.3083279810 -13.5438931052 expect failure errno coord_transfm_outside_projection_domain accept 170.8801051896 -12.6909069291 expect failure errno coord_transfm_outside_projection_domain accept 180.9127621133 -11.7358777998 expect failure errno coord_transfm_outside_projection_domain accept -179.9634704329 -19.2242789077 expect failure errno coord_transfm_outside_projection_domain accept -169.1616383718 -18.5021923570 expect failure errno coord_transfm_outside_projection_domain accept -159.5989242161 -17.7569846767 expect failure errno coord_transfm_outside_projection_domain accept -149.7658699571 -17.6838689314 expect failure errno coord_transfm_outside_projection_domain accept -139.2283007229 -17.1203530837 expect failure errno coord_transfm_outside_projection_domain accept -129.9856069274 -16.5121558117 expect failure errno coord_transfm_outside_projection_domain accept -119.7066160149 -15.8271303941 expect failure errno coord_transfm_outside_projection_domain accept -109.0808307002 -15.7236132624 expect failure errno coord_transfm_outside_projection_domain accept -99.7051569128 -15.2351555878 expect failure errno coord_transfm_outside_projection_domain accept -89.3984343202 -14.2830109769 expect -11714485.527 -2294583.435 accept -79.3161212354 -13.6551887362 expect -10093909.091 -2148649.820 accept -69.3369852179 -13.5338940098 expect -8554065.078 -2033627.111 accept -59.8017669014 -12.9486645585 expect -7176185.386 -1835041.574 accept -49.8326118713 -12.2344952465 expect -5830239.587 -1625964.636 accept -39.8183008451 -11.3212564171 expect -4563020.124 -1417370.862 accept -29.4511324259 -11.1046029410 expect -3315770.257 -1321269.119 accept -19.3421368019 -10.5209818176 expect -2152759.066 -1206758.050 accept -9.7794195765 -10.4434857815 expect -1080920.071 -1172971.439 accept 0.8324676722 -10.2027272199 expect 91827.144 -1137551.112 accept 10.3172409138 -9.5930872101 expect 1142198.103 -1077875.142 accept 20.7373198297 -8.6767624883 expect 2317698.619 -998481.282 accept 30.8106039881 -8.1660651538 expect 3491268.014 -975920.697 accept 40.2140519607 -7.4699626803 expect 4637259.093 -935187.118 accept 50.8253614228 -6.9240926089 expect 6003942.796 -922291.065 accept 60.3499171589 -6.7875741453 expect 7307879.342 -959056.886 accept 70.7538618658 -6.4717900189 expect 8823316.944 -969586.196 accept 80.1896127919 -6.1835665729 expect 10268415.013 -962009.778 accept 90.2901075635 -5.6342271039 expect failure errno coord_transfm_outside_projection_domain accept 100.1017071129 -4.7732910406 expect failure errno coord_transfm_outside_projection_domain accept 110.6453720127 -4.6247740358 expect failure errno coord_transfm_outside_projection_domain accept 120.7065181706 -4.2131506322 expect failure errno coord_transfm_outside_projection_domain accept 130.0549243427 -3.6680122287 expect failure errno coord_transfm_outside_projection_domain accept 140.9588650575 -3.4693258990 expect failure errno coord_transfm_outside_projection_domain accept 150.3128054514 -2.8622073994 expect failure errno coord_transfm_outside_projection_domain accept 160.6250791828 -2.1132082532 expect failure errno coord_transfm_outside_projection_domain accept 170.1249865639 -1.7779699685 expect failure errno coord_transfm_outside_projection_domain accept 180.4636820369 -1.0447468723 expect failure errno coord_transfm_outside_projection_domain accept -179.0903238876 -9.3809572676 expect failure errno coord_transfm_outside_projection_domain accept -169.8021514554 -8.8200596604 expect failure errno coord_transfm_outside_projection_domain accept -159.6897632216 -8.8151211116 expect failure errno coord_transfm_outside_projection_domain accept -149.3642571872 -7.9578518334 expect failure errno coord_transfm_outside_projection_domain accept -139.1869613409 -7.1376473645 expect failure errno coord_transfm_outside_projection_domain accept -129.8103143949 -6.6533639455 expect failure errno coord_transfm_outside_projection_domain accept -119.0042762894 -6.5424897944 expect failure errno coord_transfm_outside_projection_domain accept -109.3222469320 -6.2626405858 expect failure errno coord_transfm_outside_projection_domain accept -99.2447484897 -5.4322064514 expect failure errno coord_transfm_outside_projection_domain accept -89.6583934020 -4.8520491055 expect -11758391.270 -764820.107 accept -79.0822097483 -4.4980133305 expect -10100660.047 -696260.990 accept -69.2589747329 -4.0562562622 expect -8610130.179 -601975.105 accept -59.2607881882 -3.2433764780 expect -7170184.717 -454392.257 accept -49.3268655448 -2.9707739252 expect -5821746.865 -391509.219 accept -39.9159421567 -2.4973268139 expect -4617029.524 -311670.569 accept -29.1976699326 -1.6650273067 expect -3316547.033 -197263.637 accept -19.0027434133 -1.1195085022 expect -2132221.527 -127924.555 accept -9.1234117067 -0.6240596549 expect -1016591.323 -69833.247 accept 0.4677460038 0.2151624258 expect 52011.067 23925.387 accept 10.7004848538 0.3165167866 expect 1193291.206 35502.455 accept 20.1052099885 0.6126391439 expect 2258534.300 70229.157 accept 30.3541137581 0.7990141229 expect 3454411.853 95128.412 accept 40.7710878998 0.9567675855 expect 4725772.464 119944.290 accept 50.7725952624 1.4294037508 expect 6015746.643 189992.540 accept 60.5997615005 1.6613265138 expect 7361750.248 234549.877 accept 70.4466727438 1.9824185118 expect 8791561.281 295710.236 accept 80.4040420231 2.1516254056 expect 10309233.052 333889.458 accept 90.0745563464 2.5008083079 expect failure errno coord_transfm_outside_projection_domain accept 100.1323994743 3.4798778581 expect failure errno coord_transfm_outside_projection_domain accept 110.7633392793 3.6524418056 expect failure errno coord_transfm_outside_projection_domain accept 120.4935453458 3.8138602324 expect failure errno coord_transfm_outside_projection_domain accept 130.1832453461 4.1827817395 expect failure errno coord_transfm_outside_projection_domain accept 140.6879708211 4.3228601350 expect failure errno coord_transfm_outside_projection_domain accept 150.2872780471 5.0096390922 expect failure errno coord_transfm_outside_projection_domain accept 160.4567844437 5.3289862640 expect failure errno coord_transfm_outside_projection_domain accept 170.1798195714 5.7690110660 expect failure errno coord_transfm_outside_projection_domain accept 180.6237066153 6.6873727446 expect failure errno coord_transfm_outside_projection_domain accept -179.1879408995 0.2925675717 expect failure errno coord_transfm_outside_projection_domain accept -169.8193242429 0.5456299185 expect failure errno coord_transfm_outside_projection_domain accept -159.6143094365 0.8491614798 expect failure errno coord_transfm_outside_projection_domain accept -149.1327424918 1.5360082778 expect failure errno coord_transfm_outside_projection_domain accept -139.9118046279 2.2304783506 expect failure errno coord_transfm_outside_projection_domain accept -129.0707848713 3.1774300866 expect failure errno coord_transfm_outside_projection_domain accept -119.0155367869 3.7108516861 expect failure errno coord_transfm_outside_projection_domain accept -109.7138958240 4.2367325538 expect failure errno coord_transfm_outside_projection_domain accept -99.7626123411 4.9489248449 expect failure errno coord_transfm_outside_projection_domain accept -89.0617378460 5.0261998535 expect -11664192.229 792317.110 accept -79.6065498494 5.4925196315 expect -10179589.971 852372.934 accept -69.7109936494 5.4974120433 expect -8672018.782 818565.715 accept -59.3987361622 6.4168117979 expect -7176296.816 901167.992 accept -49.6550438823 6.6122077057 expect -5850898.508 874299.311 accept -39.5175223106 6.6442757043 expect -4554622.398 828384.475 accept -29.9263368298 7.1910087068 expect -3390376.767 855728.094 accept -19.6951353173 7.2342593616 expect -2202778.650 829386.822 accept -9.3597241491 7.7249502728 expect -1038303.808 866022.563 accept 0.9926766371 7.7430181007 expect 109876.645 862359.585 accept 10.4808252097 7.8032784791 expect 1163217.791 876306.606 accept 20.2149078300 8.7141462778 expect 2257974.529 1001202.962 accept 30.6115985045 8.7806411209 expect 3464879.027 1048739.004 accept 40.9406024668 9.0709137304 expect 4718612.849 1141091.327 accept 50.2246468449 9.2715613620 expect 5908642.815 1232215.612 accept 60.6212081762 10.1366134196 expect 7321174.335 1439008.711 accept 70.0896353531 11.0850079977 expect 8692101.993 1665083.891 accept 80.6785108917 11.6138802990 expect 10322728.590 1826238.813 accept 90.9684446145 11.7088334392 expect failure errno coord_transfm_outside_projection_domain accept 100.8216260873 12.6522648050 expect failure errno coord_transfm_outside_projection_domain accept 110.9341322494 12.8091489452 expect failure errno coord_transfm_outside_projection_domain accept 120.9598573820 12.9840580805 expect failure errno coord_transfm_outside_projection_domain accept 130.1838852888 13.9674113487 expect failure errno coord_transfm_outside_projection_domain accept 140.0163435591 14.2583869011 expect failure errno coord_transfm_outside_projection_domain accept 150.3440941987 15.1977215509 expect failure errno coord_transfm_outside_projection_domain accept 160.6373902313 15.9779535702 expect failure errno coord_transfm_outside_projection_domain accept 170.7489315029 16.0224553269 expect failure errno coord_transfm_outside_projection_domain accept 180.4315909707 16.2341190017 expect failure errno coord_transfm_outside_projection_domain accept -179.9613846400 10.9181102314 expect failure errno coord_transfm_outside_projection_domain accept -169.2464750707 11.2011582425 expect failure errno coord_transfm_outside_projection_domain accept -159.3961353214 12.0814824633 expect failure errno coord_transfm_outside_projection_domain accept -149.9176675016 12.1332225594 expect failure errno coord_transfm_outside_projection_domain accept -139.0300120770 12.7448426145 expect failure errno coord_transfm_outside_projection_domain accept -129.1479377942 13.2115900349 expect failure errno coord_transfm_outside_projection_domain accept -119.6509465671 13.5121287506 expect failure errno coord_transfm_outside_projection_domain accept -109.3485953585 13.9838806488 expect failure errno coord_transfm_outside_projection_domain accept -99.8025484668 14.3000196702 expect failure errno coord_transfm_outside_projection_domain accept -89.6183447418 14.3419323455 expect -11750225.007 2304558.947 accept -79.3692412058 14.8824779140 expect -10092517.831 2350135.174 accept -69.8245239316 15.4247668791 expect -8603644.646 2333402.982 accept -59.9411333586 16.1857250660 expect -7151141.941 2307064.350 accept -49.5439751158 16.6663945754 expect -5737011.937 2221425.397 accept -39.8565220229 16.7491842544 expect -4513398.389 2106838.116 accept -29.0387587694 16.7636024414 expect -3226356.467 1999372.842 accept -19.3072208645 17.5503784835 expect -2114944.499 2022939.979 accept -9.7495596439 18.3236674818 expect -1058075.992 2069782.832 accept 0.3372939259 19.1939757716 expect 36418.336 2154300.403 accept 10.4541089513 19.4557925775 expect 1130896.269 2202407.957 accept 20.3450540441 19.6776140317 expect 2216235.240 2279684.922 accept 30.5262355523 20.1057317982 expect 3364502.237 2421313.756 accept 40.6436957307 20.6888876489 expect 4554114.195 2625171.436 accept 50.8390922621 21.5842676384 expect 5818691.558 2921121.736 accept 60.4025168492 21.7910320981 expect 7107138.574 3149887.076 accept 70.7863531388 22.4913165287 expect 8622256.722 3492000.228 accept 80.2433369822 23.0164275848 expect 10137749.549 3763259.969 accept 90.9377687408 23.1511733038 expect failure errno coord_transfm_outside_projection_domain accept 100.5407405945 23.7761284488 expect failure errno coord_transfm_outside_projection_domain accept 110.0059145808 24.0087396721 expect failure errno coord_transfm_outside_projection_domain accept 120.0839708022 24.8505061022 expect failure errno coord_transfm_outside_projection_domain accept 130.5684827033 25.5457759639 expect failure errno coord_transfm_outside_projection_domain accept 140.2735017629 25.7841586919 expect failure errno coord_transfm_outside_projection_domain accept 150.4960718541 26.4511385776 expect failure errno coord_transfm_outside_projection_domain accept 160.5086557650 26.5248940712 expect failure errno coord_transfm_outside_projection_domain accept 170.1010951379 26.6437577891 expect failure errno coord_transfm_outside_projection_domain accept 180.4667032708 27.5171288037 expect failure errno coord_transfm_outside_projection_domain accept -179.2332673731 20.5208357556 expect failure errno coord_transfm_outside_projection_domain accept -169.9852102849 20.6884242583 expect failure errno coord_transfm_outside_projection_domain accept -159.0918834805 20.7807287727 expect failure errno coord_transfm_outside_projection_domain accept -149.3554284700 21.5195488802 expect failure errno coord_transfm_outside_projection_domain accept -139.0517203599 22.3228377599 expect failure errno coord_transfm_outside_projection_domain accept -129.7889045882 22.9579802676 expect failure errno coord_transfm_outside_projection_domain accept -119.2864956877 23.1541372478 expect failure errno coord_transfm_outside_projection_domain accept -109.1249371549 23.9554652672 expect failure errno coord_transfm_outside_projection_domain accept -99.7886236408 24.2156608317 expect failure errno coord_transfm_outside_projection_domain accept -89.8158531726 24.4254617574 expect -11779801.464 4109615.321 accept -79.1765040759 24.4730100405 expect -9932163.575 4013012.232 accept -69.4905958240 25.3275320515 expect -8347069.306 3939510.329 accept -59.3321746682 25.8062815391 expect -6849836.851 3736718.987 accept -49.4529549960 26.7200008826 expect -5517196.147 3613456.872 accept -39.1868721751 27.3024639669 expect -4254482.013 3466079.063 accept -29.6354019373 27.4373224654 expect -3161470.540 3320471.268 accept -19.1695661946 28.3567542308 expect -2009357.470 3307900.622 accept -9.9833263319 28.6603499308 expect -1037944.407 3278172.915 accept 0.5787958629 28.7930766257 expect 59988.867 3269432.632 accept 10.1908900667 29.4473999043 expect 1055041.336 3373090.240 accept 20.4711672585 29.9558795250 expect 2129353.829 3515969.801 accept 30.8531334707 30.4060992834 expect 3242994.151 3715442.228 accept 40.4755923878 31.2284502498 expect 4307211.258 4017976.832 accept 50.0364462297 31.8692054690 expect 5426487.569 4368373.509 accept 60.5819735012 32.1294434320 expect 6785271.674 4776262.501 accept 70.8279928055 32.4558417273 expect 8275156.713 5258027.307 accept 80.8754092571 33.4499285913 expect 9965465.329 5886025.407 accept 90.9417476435 34.2241428842 expect failure errno coord_transfm_outside_projection_domain accept 100.8763555867 34.9730810876 expect failure errno coord_transfm_outside_projection_domain accept 110.3824336404 35.8924849218 expect failure errno coord_transfm_outside_projection_domain accept 120.3907138338 36.0772654252 expect failure errno coord_transfm_outside_projection_domain accept 130.2213236652 36.3411661168 expect failure errno coord_transfm_outside_projection_domain accept 140.6643127929 37.0777875387 expect failure errno coord_transfm_outside_projection_domain accept 150.5696707234 38.0028546554 expect failure errno coord_transfm_outside_projection_domain accept 160.7330142926 38.8399381962 expect failure errno coord_transfm_outside_projection_domain accept 170.7575452122 39.6058463190 expect failure errno coord_transfm_outside_projection_domain accept 180.9074447347 39.7506383769 expect failure errno coord_transfm_outside_projection_domain accept -179.8967233384 30.5573004598 expect failure errno coord_transfm_outside_projection_domain accept -169.4186924041 30.7925389719 expect failure errno coord_transfm_outside_projection_domain accept -159.3550554816 31.7173298465 expect failure errno coord_transfm_outside_projection_domain accept -149.3340973772 32.5661389704 expect failure errno coord_transfm_outside_projection_domain accept -139.8793305042 33.1451975000 expect failure errno coord_transfm_outside_projection_domain accept -129.0718020283 34.1077930148 expect failure errno coord_transfm_outside_projection_domain accept -119.3765659597 34.6652275838 expect failure errno coord_transfm_outside_projection_domain accept -109.7130644703 34.6829381126 expect failure errno coord_transfm_outside_projection_domain accept -99.5574458139 35.6024191831 expect failure errno coord_transfm_outside_projection_domain accept -89.7509673047 36.5904991465 expect -11753853.356 6923417.921 accept -79.5569260283 36.6832637281 expect -9529017.479 6583316.301 accept -69.4216766587 36.7592109391 expect -7793705.647 6002236.199 accept -59.8993383836 36.9575776083 expect -6439637.617 5535272.788 accept -49.2671447978 37.9494837339 expect -5077618.232 5232434.984 accept -39.6598693615 38.9483055378 expect -3963735.765 5050631.148 accept -29.7093809090 39.1622288957 expect -2917074.123 4828275.833 accept -19.9357360497 39.2854809247 expect -1934827.091 4674852.040 accept -9.5411208555 39.4087263276 expect -919053.532 4586404.063 accept 0.8211876318 39.4440823975 expect 78929.176 4560557.981 accept 10.4970331716 40.3224517995 expect 1003036.028 4707596.187 accept 20.6917357286 40.5466917960 expect 1985755.247 4847003.414 accept 30.0757101328 40.6533776922 expect 2912090.233 5033105.330 accept 40.4799159627 40.9888819952 expect 3968966.207 5358999.089 accept 50.8203716780 41.3416456225 expect 5074769.526 5800574.001 accept 60.6789776888 42.2933132797 expect 6163689.909 6459786.753 accept 70.4598227375 42.9662236851 expect 7378970.615 7275378.446 accept 80.5212319721 43.4298814980 expect 8945156.756 8415826.102 accept 90.6029060873 44.3367368198 expect failure errno coord_transfm_outside_projection_domain accept 100.2968163089 44.7347899226 expect failure errno coord_transfm_outside_projection_domain accept 110.5453757907 45.2325884903 expect failure errno coord_transfm_outside_projection_domain accept 120.7132187645 46.1810408682 expect failure errno coord_transfm_outside_projection_domain accept 130.6036848279 46.5953112427 expect failure errno coord_transfm_outside_projection_domain accept 140.8567165951 47.1100600825 expect failure errno coord_transfm_outside_projection_domain accept 150.2452206431 47.5590007593 expect failure errno coord_transfm_outside_projection_domain accept 160.4264735249 47.6243197261 expect failure errno coord_transfm_outside_projection_domain accept 170.1158223427 47.9911994181 expect failure errno coord_transfm_outside_projection_domain accept 180.2100320112 48.9423016681 expect failure errno coord_transfm_outside_projection_domain accept -179.5621188253 40.3822966969 expect failure errno coord_transfm_outside_projection_domain accept -169.0785389235 40.7397870392 expect failure errno coord_transfm_outside_projection_domain accept -159.9453288766 41.0637989828 expect failure errno coord_transfm_outside_projection_domain accept -149.0072837113 41.2595851413 expect failure errno coord_transfm_outside_projection_domain accept -139.3677527689 41.6743754043 expect failure errno coord_transfm_outside_projection_domain accept -129.1116359654 41.9054883189 expect failure errno coord_transfm_outside_projection_domain accept -119.2367048985 42.7084205060 expect failure errno coord_transfm_outside_projection_domain accept -109.9662473469 42.7707453425 expect failure errno coord_transfm_outside_projection_domain accept -99.5437449083 43.0239640060 expect failure errno coord_transfm_outside_projection_domain accept -89.4757325990 43.2756199739 expect -11568961.170 9589089.555 accept -79.0930156514 43.3605739941 expect -8689821.361 8221563.160 accept -69.6623710654 43.7575713592 expect -7176557.127 7359145.048 accept -59.8551383188 44.0946182610 expect -5913531.749 6705033.126 accept -49.6085838009 44.4913127126 expect -4748242.269 6215794.411 accept -39.1320462959 45.2007809057 expect -3641766.743 5902607.826 accept -29.9547583046 46.1598354389 expect -2721962.231 5767450.222 accept -19.6901625335 47.0694221597 expect -1753442.745 5682225.919 accept -9.5530275863 47.7859862485 expect -838921.885 5658994.019 accept 0.0222239630 47.9106126700 expect 1945.836 5639486.547 accept 10.3786030568 48.2669975286 expect 905735.036 5728642.671 accept 20.3163155558 49.0365488340 expect 1761298.591 5954059.585 accept 30.0523609099 49.2604161517 expect 2613977.300 6191207.840 accept 40.2733019916 49.6471765112 expect 3515610.607 6567126.763 accept 50.6235974778 49.9195971337 expect 4454811.565 7067214.001 accept 60.0640817595 50.7570760574 expect 5269948.907 7769377.867 accept 70.2894928952 51.6926294743 expect 6110607.979 8783958.836 accept 80.7661690288 51.9879378395 expect 6957594.499 10145750.592 accept 90.2760527960 52.6279152662 expect failure errno coord_transfm_outside_projection_domain accept 100.4470132582 53.2519801847 expect failure errno coord_transfm_outside_projection_domain accept 110.1282829759 53.4607562483 expect failure errno coord_transfm_outside_projection_domain accept 120.5033443580 53.9989335755 expect failure errno coord_transfm_outside_projection_domain accept 130.6561885293 54.6823982531 expect failure errno coord_transfm_outside_projection_domain accept 140.8127091472 54.7255186711 expect failure errno coord_transfm_outside_projection_domain accept 150.0054753699 55.4459165788 expect failure errno coord_transfm_outside_projection_domain accept 160.8312787949 56.2470115579 expect failure errno coord_transfm_outside_projection_domain accept 170.4614439985 57.0241073917 expect failure errno coord_transfm_outside_projection_domain accept 180.7047485406 57.6022388310 expect failure errno coord_transfm_outside_projection_domain accept -179.1586219943 50.1365490236 expect failure errno coord_transfm_outside_projection_domain accept -169.1490260788 50.5023613434 expect failure errno coord_transfm_outside_projection_domain accept -159.9535088204 50.9035428509 expect failure errno coord_transfm_outside_projection_domain accept -149.0803324654 51.7753015653 expect failure errno coord_transfm_outside_projection_domain accept -139.7669273536 52.0799612604 expect failure errno coord_transfm_outside_projection_domain accept -129.3599142098 52.6974765371 expect failure errno coord_transfm_outside_projection_domain accept -119.6940989810 52.7976100393 expect failure errno coord_transfm_outside_projection_domain accept -109.7805542206 53.6394720461 expect failure errno coord_transfm_outside_projection_domain accept -99.9951721199 54.3490528856 expect failure errno coord_transfm_outside_projection_domain accept -89.4965032257 55.2735286995 expect -6404341.484 11736182.738 accept -79.2351509797 56.0182014529 expect -5919230.308 10347709.180 accept -69.2279142296 57.0024522025 expect -5142475.359 9389304.843 accept -59.7270769476 57.4201565369 expect -4433291.933 8686026.154 accept -49.4089463064 57.7914752628 expect -3650409.699 8117631.819 accept -39.6433533072 58.1804486015 expect -2906321.369 7735544.810 accept -29.8165100218 58.5388210940 expect -2168952.954 7465348.952 accept -19.0157349252 58.9403079367 expect -1370812.070 7285860.519 accept -9.1047501907 59.4124031484 expect -649264.745 7231297.403 accept 0.8510548344 60.1631637832 expect 59614.314 7301680.904 accept 10.7118819188 60.6049338062 expect 741931.784 7412559.974 accept 20.4398525342 61.3600300433 expect 1386377.568 7649843.890 accept 30.3017880976 62.2930069600 expect 1995284.860 8001431.858 accept 40.2742910491 62.4260882546 expect 2622736.428 8340981.454 accept 50.1679836632 63.3416128275 expect 3130090.680 8886842.807 accept 60.1315518295 64.0854342654 expect 3566294.596 9516574.314 accept 70.2671672611 64.9885817623 expect 3854824.970 10266355.614 accept 80.0566574740 65.2466871256 expect 4076741.126 11011949.460 accept 90.0598623933 65.7380193724 expect failure errno coord_transfm_outside_projection_domain accept 100.2499385302 65.8274446207 expect failure errno coord_transfm_outside_projection_domain accept 110.0091445253 66.5841928232 expect failure errno coord_transfm_outside_projection_domain accept 120.1938557094 67.3045114589 expect failure errno coord_transfm_outside_projection_domain accept 130.1756983494 67.6825233842 expect failure errno coord_transfm_outside_projection_domain accept 140.0774508004 68.5260112188 expect failure errno coord_transfm_outside_projection_domain accept 150.3642244888 69.0087889372 expect failure errno coord_transfm_outside_projection_domain accept 160.0390197585 69.5064813197 expect failure errno coord_transfm_outside_projection_domain accept 170.9882511230 69.9663419458 expect failure errno coord_transfm_outside_projection_domain accept 180.7855662108 70.7558001565 expect failure errno coord_transfm_outside_projection_domain accept -179.8630282894 60.2684905661 expect failure errno coord_transfm_outside_projection_domain accept -169.8774561096 60.7063957678 expect failure errno coord_transfm_outside_projection_domain accept -159.1639611249 61.1269337981 expect failure errno coord_transfm_outside_projection_domain accept -149.0814548820 61.9063878006 expect failure errno coord_transfm_outside_projection_domain accept -139.0476545160 62.7911475081 expect failure errno coord_transfm_outside_projection_domain accept -129.8276916999 62.8515546512 expect failure errno coord_transfm_outside_projection_domain accept -119.9464541970 63.7277849393 expect failure errno coord_transfm_outside_projection_domain accept -109.6864148265 63.9317823343 expect failure errno coord_transfm_outside_projection_domain accept -99.4184495170 64.2249537529 expect failure errno coord_transfm_outside_projection_domain accept -89.6146334566 64.3967878406 expect -4340586.273 11779220.401 accept -79.8288741622 64.8985190713 expect -4137365.737 10977840.319 accept -69.3484116496 65.6222831765 expect -3718954.598 10255930.505 accept -59.0699348251 66.3652733965 expect -3206977.816 9703730.126 accept -49.7020758778 66.6389497206 expect -2744067.651 9275193.520 accept -39.0292679218 66.7793834162 expect -2190174.896 8881394.899 accept -29.9077443640 67.3270538543 expect -1664513.475 8692728.991 accept -19.0042693882 67.9048158312 expect -1045199.569 8559031.056 accept -9.5338704651 68.3771424633 expect -517496.904 8521368.334 accept 0.2238591227 69.2477228904 expect 11757.034 8614778.137 accept 10.2978890619 69.7426835928 expect 528603.064 8728166.019 accept 20.2917095900 70.1793788385 expect 1014867.798 8907115.689 accept 30.9719421826 70.5868181503 expect 1499411.306 9170515.903 accept 40.5524514587 71.5715697583 expect 1833434.912 9555789.645 accept 50.3484489213 71.8505547121 expect 2175943.593 9913399.521 accept 60.1086300862 72.0684099625 expect 2460956.915 10322590.056 accept 70.6228216997 73.0662960367 expect 2561247.727 10868246.628 accept 80.5645741906 73.7542661119 expect 2585249.402 11363593.076 accept 90.6177784757 74.6865930919 expect failure errno coord_transfm_outside_projection_domain accept 100.2695381559 74.9397012116 expect failure errno coord_transfm_outside_projection_domain accept 110.3724185381 75.3340827987 expect failure errno coord_transfm_outside_projection_domain accept 120.0440856622 75.6509550283 expect failure errno coord_transfm_outside_projection_domain accept 130.4765915697 75.8794035471 expect failure errno coord_transfm_outside_projection_domain accept 140.8273607225 76.0863350217 expect failure errno coord_transfm_outside_projection_domain accept 150.7446122566 76.4130503173 expect failure errno coord_transfm_outside_projection_domain accept 160.9066279973 77.2046671411 expect failure errno coord_transfm_outside_projection_domain accept 170.7039755420 77.5254695021 expect failure errno coord_transfm_outside_projection_domain accept 180.7301487821 78.3643690894 expect failure errno coord_transfm_outside_projection_domain accept -179.8424303971 70.7640164273 expect failure errno coord_transfm_outside_projection_domain accept -169.3071682617 71.3534426809 expect failure errno coord_transfm_outside_projection_domain accept -159.9256766432 72.0788134529 expect failure errno coord_transfm_outside_projection_domain accept -149.4389257633 72.9048071827 expect failure errno coord_transfm_outside_projection_domain accept -139.4466193836 73.7144086150 expect failure errno coord_transfm_outside_projection_domain accept -129.4240513471 74.3140345936 expect failure errno coord_transfm_outside_projection_domain accept -119.2324314226 75.1789245938 expect failure errno coord_transfm_outside_projection_domain accept -109.4080456874 75.9740320316 expect failure errno coord_transfm_outside_projection_domain accept -99.9624349535 76.7254677659 expect failure errno coord_transfm_outside_projection_domain accept -89.8454838458 77.0914030368 expect -2065538.883 11806583.302 accept -79.3200173559 77.5923156814 expect -1944930.535 11436411.248 accept -69.2214782512 77.6455638940 expect -1833901.665 11099482.695 accept -59.3345608489 77.6726989114 expect -1672461.604 10796813.087 accept -49.4571426800 77.9149250146 expect -1437767.183 10554465.582 accept -39.0382734207 78.6675565544 expect -1110318.758 10416013.135 accept -29.1097584433 78.7699850319 expect -845013.962 10265588.005 accept -19.0735922396 78.8979558943 expect -558786.152 10166121.532 accept -9.0280312502 79.8097469605 expect -246483.187 10236709.513 accept 0.5580111982 79.8802703269 expect 15185.199 10229124.254 accept 10.8112184284 80.0989872186 expect 286673.574 10288907.138 accept 20.1411665329 80.3961610028 expect 512145.694 10396401.075 accept 30.8632607000 81.0343489380 expect 716121.219 10599328.302 accept 40.5566028935 81.1124451300 expect 903295.715 10744008.638 accept 50.8831926047 81.3748819436 expect 1050654.228 10948141.605 accept 60.0527293155 81.6666268419 expect 1137426.454 11149953.262 accept 70.4854280716 82.6250504715 expect 1097137.468 11420195.697 accept 80.6482540792 83.6156947131 expect 994412.198 11647508.801 accept 90.5789951029 84.1124942551 expect failure errno coord_transfm_outside_projection_domain accept 100.9443622402 84.2131541284 expect failure errno coord_transfm_outside_projection_domain accept 110.5781783058 84.7127066970 expect failure errno coord_transfm_outside_projection_domain accept 120.6025664533 85.5661224284 expect failure errno coord_transfm_outside_projection_domain accept 130.0976840056 86.3318417998 expect failure errno coord_transfm_outside_projection_domain accept 140.6428111911 86.3329325553 expect failure errno coord_transfm_outside_projection_domain accept 150.5251209004 86.5841388479 expect failure errno coord_transfm_outside_projection_domain accept 160.4225603060 86.8828039057 expect failure errno coord_transfm_outside_projection_domain accept 170.2581319411 87.4171568183 expect failure errno coord_transfm_outside_projection_domain accept 180.2641439484 88.1608036446 expect failure errno coord_transfm_outside_projection_domain accept -179.8401984185 80.4164439367 expect failure errno coord_transfm_outside_projection_domain accept -169.6918872432 81.0641431423 expect failure errno coord_transfm_outside_projection_domain accept -159.9211815920 81.7949103274 expect failure errno coord_transfm_outside_projection_domain accept -149.6075138921 82.1028453149 expect failure errno coord_transfm_outside_projection_domain accept -139.7372920424 82.6385276754 expect failure errno coord_transfm_outside_projection_domain accept -129.7998353504 83.1090136759 expect failure errno coord_transfm_outside_projection_domain accept -119.2572393635 83.4744235117 expect failure errno coord_transfm_outside_projection_domain accept -109.3246360912 84.2608342272 expect failure errno coord_transfm_outside_projection_domain accept -99.9601976700 84.4677069243 expect failure errno coord_transfm_outside_projection_domain accept -89.7505869053 85.0897168462 expect -774050.983 11808922.435 accept -79.8910338348 85.9672408001 expect -625258.031 11700550.054 accept -69.1554779909 86.8865771916 expect -457830.975 11637725.026 accept -59.6158025559 87.0075919956 expect -406020.652 11573918.187 accept -49.5091296711 87.2889393354 expect -324158.396 11535225.643 accept -39.6799799687 87.3973978464 expect -261177.241 11497165.712 accept -29.0273299961 87.9089486985 expect -159462.940 11524757.163 accept -19.1380418786 88.8203526189 expect -60802.011 11637057.505 accept -9.0084093906 88.8893310433 expect -27340.998 11639811.223 accept 0.0213854656 89.1326873925 expect 50.899 11675921.557 accept 10.6007672189 89.4603893825 expect 15609.535 11728897.894 accept 20.8972133561 90.3008662748 expect failure errno coord_transfm_invalid_coord accept 30.3236847010 90.9360697392 expect failure errno coord_transfm_invalid_coord accept 40.5211596030 91.7425546179 expect failure errno coord_transfm_invalid_coord accept 50.9530657025 92.7167872262 expect failure errno coord_transfm_invalid_coord accept 60.2966089164 93.5518747322 expect failure errno coord_transfm_invalid_coord accept 70.7058277145 93.9478756274 expect failure errno coord_transfm_invalid_coord accept 80.2842419408 94.5029189079 expect failure errno coord_transfm_invalid_coord accept 90.7046514943 94.5870657217 expect failure errno coord_transfm_invalid_coord accept 100.5757828394 94.7544968060 expect failure errno coord_transfm_invalid_coord accept 110.0784957493 95.6326996288 expect failure errno coord_transfm_invalid_coord accept 120.4420696450 95.7426558832 expect failure errno coord_transfm_invalid_coord accept 130.0586467430 96.7026620164 expect failure errno coord_transfm_invalid_coord accept 140.4982918026 97.2453640881 expect failure errno coord_transfm_invalid_coord accept 150.5137836610 97.2825819689 expect failure errno coord_transfm_invalid_coord accept 160.8117951323 97.8473653755 expect failure errno coord_transfm_invalid_coord accept 170.3402740510 98.3587698302 expect failure errno coord_transfm_invalid_coord accept 180.9378053935 98.8743871260 expect failure errno coord_transfm_invalid_coord accept -179.1153600127 89.6136396944 expect failure errno coord_transfm_outside_projection_domain accept -169.2261536485 89.9072554901 expect failure errno coord_transfm_outside_projection_domain accept -159.1164133392 89.9075872145 expect failure errno coord_transfm_outside_projection_domain accept -149.3960866375 90.6652890542 expect failure errno coord_transfm_invalid_coord accept -139.1720109722 91.2726639403 expect failure errno coord_transfm_invalid_coord accept -129.0729383513 91.6124307897 expect failure errno coord_transfm_invalid_coord accept -119.9896731679 92.3534538297 expect failure errno coord_transfm_invalid_coord accept -109.8793121665 92.7446796075 expect failure errno coord_transfm_invalid_coord accept -99.4084806305 92.8846710223 expect failure errno coord_transfm_invalid_coord accept -89.0674703286 93.0281709121 expect failure errno coord_transfm_invalid_coord accept -79.1149414160 93.4632295476 expect failure errno coord_transfm_invalid_coord accept -69.5261517902 94.2811379653 expect failure errno coord_transfm_invalid_coord accept -59.0417407292 95.2403005497 expect failure errno coord_transfm_invalid_coord accept -49.3488539326 95.3977809221 expect failure errno coord_transfm_invalid_coord accept -39.5548627592 96.1026759897 expect failure errno coord_transfm_invalid_coord accept -29.0476034815 96.4820442045 expect failure errno coord_transfm_invalid_coord accept -19.8278954645 96.7461121139 expect failure errno coord_transfm_invalid_coord accept -9.5488366916 97.4860281314 expect failure errno coord_transfm_invalid_coord accept 0.2307496667 97.5054708483 expect failure errno coord_transfm_invalid_coord accept 10.6032378382 97.7247157965 expect failure errno coord_transfm_invalid_coord accept 20.8959156966 98.0573474237 expect failure errno coord_transfm_invalid_coord accept 30.7104889319 98.5114024172 expect failure errno coord_transfm_invalid_coord accept 40.1762654017 98.8114138429 expect failure errno coord_transfm_invalid_coord accept 50.8420835837 99.5737438963 expect failure errno coord_transfm_invalid_coord accept 60.4391516649 99.6023781174 expect failure errno coord_transfm_invalid_coord accept 70.3833096116 99.8129052911 expect failure errno coord_transfm_invalid_coord accept 80.6796681432 100.7784977140 expect failure errno coord_transfm_invalid_coord accept 90.8893235311 100.9639616716 expect failure errno coord_transfm_invalid_coord accept 100.8499388037 101.2529844461 expect failure errno coord_transfm_invalid_coord accept 110.5488903609 101.9706798836 expect failure errno coord_transfm_invalid_coord accept 120.1208651509 102.2817021553 expect failure errno coord_transfm_invalid_coord accept 130.1003249085 102.6010355936 expect failure errno coord_transfm_invalid_coord accept 140.8624898562 102.6311753718 expect failure errno coord_transfm_invalid_coord accept 150.3852952852 103.0749738073 expect failure errno coord_transfm_invalid_coord accept 160.7214099599 103.8391207142 expect failure errno coord_transfm_invalid_coord accept 170.6439119665 104.6357199780 expect failure errno coord_transfm_invalid_coord accept 180.2173889904 105.2754168153 expect failure errno coord_transfm_invalid_coord ------------------------------------------------------------ ------------------------------------------------------------ operation +proj=guyou +R=1 tolerance 1 mm ------------------------------------------------------------ accept 0 90 expect 0 1.85407 accept 0 -90 expect 0 -1.85407 ------------------------------------------------------------ proj-9.6.0/test/gie/more_builtins.gie000664 001754 001755 00000106430 14764566077 017511 0ustar00e012349e012349000000 000000 =============================================================================== Various test material, mostly converted from selftest entries in PJ_xxx.c Contrary to the material in builtins.gie, this material is handwritten and intends to exercise corner cases. =============================================================================== ------------------------------------------------------------------------------- # Two ob_tran tests from data/testvarious ------------------------------------------------------------------------------- operation +proj=ob_tran +o_proj=moll +R=6378137.0 +o_lon_p=0 +o_lat_p=0 +lon_0=180 ------------------------------------------------------------------------------- tolerance 1 mm direction inverse accept 300000 400000 expect -42.7562158333 85.5911341667 direction forward accept 10 20 expect -1384841.18787 7581707.88240 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Two tests from PJ_molodensky.c ------------------------------------------------------------------------------- operation proj=molodensky a=6378160 rf=298.25 \ da=-23 df=-8.120449e-8 dx=-134 dy=-48 dz=149 \ abridged ------------------------------------------------------------------------------- tolerance 2 m accept 144.9667 -37.8 50 0 expect 144.968 -37.79848 46.378 0 roundtrip 100 1 m ------------------------------------------------------------------------------- # Same thing once more, but this time unabridged ------------------------------------------------------------------------------- operation proj=molodensky a=6378160 rf=298.25 \ da=-23 df=-8.120449e-8 dx=-134 dy=-48 dz=149 ------------------------------------------------------------------------------- tolerance 2 m accept 144.9667 -37.8 50 0 expect 144.968 -37.79848 46.378 0 roundtrip 100 1 m ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Molodensky with all 0 parameters ------------------------------------------------------------------------------- operation proj=molodensky a=6378160 rf=298.25 \ da=0 df=0 dx=0 dy=0 dz=0 ------------------------------------------------------------------------------- tolerance 1 mm accept 144.9667 -37.8 50 0 expect 144.9667 -37.8 50 0 roundtrip 1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test error cases of molodensky ------------------------------------------------------------------------------- # No arguments operation proj=molodensky a=6378160 rf=298.25 expect failure errno invalid_op_missing_arg # Missing arguments operation proj=molodensky a=6378160 rf=298.25 dx=0 expect failure errno invalid_op_missing_arg ------------------------------------------------------------------------------- # Tests for PJ_bertin1953.c ------------------------------------------------------------------------------- operation proj=bertin1953 +R=1 ------------------------------------------------------------------------------- accept 0 0 expect -0.260206554508 -0.685226058142 accept 16.5 42 expect 0.0 0.0 accept -180 90 expect 0.0 0.813473286152 accept 0 90 expect 0.0 0.813473286152 accept 10 -35 expect -0.138495501548 -1.221408328101 accept -70 -35 expect -1.504967424950 -0.522846035499 accept 80 7 expect 0.929377425352 -0.215443296201 accept 128 35 expect 0.920230566844 0.713170409026 accept 170 -41 expect 2.162845830414 -0.046534568425 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Some tests from PJ_pipeline.c ------------------------------------------------------------------------------- # Forward-reverse geo->utm->geo (4D functions) ------------------------------------------------------------------------------- operation proj=pipeline zone=32 step \ proj=utm ellps=GRS80 step \ proj=utm ellps=GRS80 inv ------------------------------------------------------------------------------- tolerance 0.1 mm accept 12 55 0 0 expect 12 55 0 0 # Now the inverse direction (still same result: the pipeline is symmetrical) direction inverse expect 12 55 0 0 ------------------------------------------------------------------------------- # And now the back-to-back situation utm->geo->utm (4D functions) ------------------------------------------------------------------------------- operation proj=pipeline zone=32 ellps=GRS80 step \ proj=utm inv step \ proj=utm ------------------------------------------------------------------------------- accept 691875.63214 6098907.82501 0 0 expect 691875.63214 6098907.82501 0 0 direction inverse expect 691875.63214 6098907.82501 0 0 ------------------------------------------------------------------------------- # Forward-reverse geo->utm->geo (3D functions) ------------------------------------------------------------------------------- operation proj=pipeline zone=32 step \ proj=utm ellps=GRS80 step \ proj=utm ellps=GRS80 inv ------------------------------------------------------------------------------- tolerance 0.1 mm accept 12 55 0 expect 12 55 0 # Now the inverse direction (still same result: the pipeline is symmetrical) direction inverse expect 12 55 0 ------------------------------------------------------------------------------- # And now the back-to-back situation utm->geo->utm (3D functions) ------------------------------------------------------------------------------- operation proj=pipeline zone=32 ellps=GRS80 step \ proj=utm inv step \ proj=utm ------------------------------------------------------------------------------- accept 691875.63214 6098907.82501 0 expect 691875.63214 6098907.82501 0 direction inverse expect 691875.63214 6098907.82501 0 ------------------------------------------------------------------------------- # Test a corner case: A rather pointless one-step pipeline geo->utm ------------------------------------------------------------------------------- operation proj=pipeline step proj=utm zone=32 ellps=GRS80 ------------------------------------------------------------------------------- accept 12 55 0 0 expect 691875.63214 6098907.82501 0 0 direction inverse accept 691875.63214 6098907.82501 0 0 expect 12 55 0 0 ------------------------------------------------------------------------------- # Finally test a pipeline with more than one init step ------------------------------------------------------------------------------- use_proj4_init_rules true operation proj=pipeline \ step init=epsg:25832 inv \ step init=epsg:25833 \ step init=epsg:25833 inv \ step init=epsg:25832 ------------------------------------------------------------------------------- accept 691875.63214 6098907.82501 0 0 expect 691875.63214 6098907.82501 0 0 direction inverse accept 12 55 0 0 expect 12 55 0 0 ------------------------------------------------------------------------------- # Test a few inversion scenarios (urm5 has no inverse operation) ------------------------------------------------------------------------------- operation proj=pipeline step \ proj=urm5 n=0.5 inv expect failure pjd_err_malformed_pipeline operation proj=pipeline inv step \ proj=urm5 n=0.5 expect failure pjd_err_malformed_pipeline operation proj=pipeline inv step \ proj=urm5 n=0.5 ellps=WGS84 inv accept 12 56 expect 1215663.2814182492 5452209.5424045017 operation proj=pipeline step \ proj=urm5 ellps=WGS84 n=0.5 accept 12 56 expect 1215663.2814182492 5452209.5424045017 ------------------------------------------------------------------------------- # Test various failing scenarios. ------------------------------------------------------------------------------- operation proj=pipeline step \ proj=pipeline step \ proj=merc expect failure pjd_err_malformed_pipeline operation step proj=pipeline step proj=merc expect failure pjd_err_malformed_pipeline operation proj=pipeline expect failure pjd_err_malformed_pipeline ------------------------------------------------------------------------------- # Some tests from PJ_vgridshift.c ------------------------------------------------------------------------------- operation proj=vgridshift grids=egm96_15.gtx ellps=GRS80 ------------------------------------------------------------------------------- tolerance 1 cm accept 12.5 55.5 0 0 expect 12.5 55.5 -36.394090697 0 accept -180.1 0 0 expect -180.1 0 -20.835222268 accept 179.9 0 0 expect 179.9 0 -20.835222268 accept 180 0 0 expect 180 0 -20.756538510 accept 540 0 0 expect 540 0 -20.756538510 accept -180 0 0 expect -180 0 -20.756538510 accept -540 0 0 expect -540 0 -20.756538510 roundtrip 100 1 nm ------------------------------------------------------------------------------- # Fail on purpose: +grids parameter is mandatory operation proj=vgridshift expect failure errno invalid_op_missing_arg # Fail on purpose: open non-existing grid operation proj=vgridshift grids=nonexistinggrid.gtx expect failure errno invalid_op_file_not_found_or_invalid ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation proj=vgridshift grids=egm96_15.gtx ellps=GRS80 multiplier=0.1 tolerance 15 cm accept 12.5 55.5 0 0 expect 12.5 55.5 3.6021305084228516 0 ------------------------------------------------------------------------------- # Some tests from PJ_hgridshift.c ------------------------------------------------------------------------------- operation proj=hgridshift +grids=ntf_r93.gsb ellps=GRS80 ------------------------------------------------------------------------------- tolerance 1 mm accept 2.250704350387 46.500051597273 expect 2.25 46.5 direction inverse accept 2.25 46.5 expect 2.250704350387 46.500051597273 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Fail on purpose: open non-existing grid: operation proj=hgridshift grids=@nonexistinggrid.gsb,anothernonexistinggrid.gsb expect failure errno invalid_op_file_not_found_or_invalid # Fail on purpose: +grids parameter is mandatory: operation proj=hgridshift expect failure errno invalid_op_missing_arg ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Tests for LCC 2SP Michigan (from PJ_lcc.c) ------------------------------------------------------------------------------- # This test is taken from EPSG guidance note 7-2 (version 54, August 2018, # page 25) ------------------------------------------------------------------------------- operation +proj=lcc +ellps=clrk66 +lat_1=44d11'N +lat_2=45d42'N +x_0=609601.2192 +lon_0=84d20'W +lat_0=43d19'N +k_0=1.0000382 +units=us-ft ------------------------------------------------------------------------------- tolerance 5 mm accept 83d10'W 43d45'N expect 2308335.75 160210.48 direction inverse accept 2308335.75 160210.48 expect 83d10'W 43d45'N ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # A number of tests from PJ_helmert.c ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # This example is from Lotti Jivall: "Simplified transformations from # ITRF2008/IGS08 to ETRS89 for maritime applications" ------------------------------------------------------------------------------- operation proj=helmert convention=coordinate_frame \ x=0.67678 y=0.65495 z=-0.52827 \ rx=-0.022742 ry=0.012667 rz=0.022704 s=-0.01070 ------------------------------------------------------------------------------- tolerance 1 um accept 3565285.00000000 855949.00000000 5201383.00000000 expect 3565285.41342351 855948.67986759 5201382.72939791 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # This example is a random point, transformed from ED50 to ETRS89 using KMStrans2 ------------------------------------------------------------------------------- operation proj=helmert exact convention=coordinate_frame \ x=-081.0703 rx=-0.48488 \ y=-089.3603 ry=-0.02436 \ z=-115.7526 rz=-0.41321 s=-0.540645 ------------------------------------------------------------------------------- tolerance 1 um accept 3494994.30120000 1056601.97250000 5212382.16660000 expect 3494909.84026368 1056506.78938633 5212265.66699761 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # This example is a coordinate from the geodetic observatory in Onsala, # Sweden transformed from ITRF2000 @ 2017.0 to ITRF93 @ 2017.0. # The test coordinate was transformed using GNSStrans, using transformation # parameters published by ITRF: ftp://itrf.ensg.ign.fr/pub/itrf/ITRF.TP ------------------------------------------------------------------------------- operation proj=helmert convention=position_vector \ x = 0.0127 dx = -0.0029 rx = -0.00039 drx = -0.00011 \ y = 0.0065 dy = -0.0002 ry = 0.00080 dry = -0.00019 \ z = -0.0209 dz = -0.0006 rz = -0.00114 drz = 0.00007 \ s = 0.00195 ds = 0.00001 t_epoch = 1988.0 ------------------------------------------------------------------------------- tolerance 0.03 mm accept 3370658.37800 711877.31400 5349787.08600 2017.0 # ITRF2000@2017.0 expect 3370658.18890 711877.42370 5349787.12430 2017.0 # ITRF93@2017.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # This example is from "A mathematical relationship between NAD27 and NAD83 (91) # State Plane coordinates in Southeastern Wisconsin": # http://www.sewrpc.org/SEWRPCFiles/Publications/TechRep/tr-034-Mathematical-Relationship-Between-NAD27-and-NAD83-91-State-Plane-Coordinates-Southeastern-Wisconsin.pdf # The test data is taken from p. 29. Here we are using point 203 and converting it # from NAD27 (ft) -> NAD83 (m). The paper reports a difference of 0.0014 m from # measured to computed coordinates, hence the test tolerance is set accordingly. ------------------------------------------------------------------------------- operation proj=helmert \ x=-9597.3572 y=.6112 \ s=0.304794780637 theta=-1.244048 ------------------------------------------------------------------------------- tolerance 1 mm accept 2546506.957 542256.609 0 expect 766563.675 165282.277 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Finally test the 4D-capabilities of the proj.h API, especially that the # rotation matrix is updated when necessary. # Test coordinates from GNSStrans. ------------------------------------------------------------------------------- operation proj=helmert convention=position_vector \ x = 0.01270 dx =-0.0029 rx =-0.00039 drx =-0.00011 \ y = 0.00650 dy =-0.0002 ry = 0.00080 dry =-0.00019 \ z =-0.0209 dz =-0.0006 rz =-0.00114 drz = 0.00007 \ s = 0.00195 ds = 0.00001 \ t_epoch=1988.0 ------------------------------------------------------------------------------- tolerance 0.1 mm accept 3370658.378 711877.314 5349787.086 2017.0 expect 3370658.18890 711877.42370 5349787.12430 2017.0 accept 3370658.378 711877.314 5349787.086 2018.0 expect 3370658.18087 711877.42750 5349787.12648 2018.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test case of https://github.com/OSGeo/PROJ/issues/2333 ------------------------------------------------------------------------------- operation +proj=helmert +x=-0.0019 +y=-0.0017 +z=-0.0105 +s=0.00134 \ +dx=0.0001 +dy=0.0001 +dz=-0.0018 +ds=0.00008 +t_epoch=2000.0 \ +convention=position_vector ------------------------------------------------------------------------------- tolerance 0.1 mm accept 3513638.1938 778956.4525 5248216.4690 2008.75 expect 3513638.1999 778956.4533 5248216.4535 2008.75 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test error cases of helmert ------------------------------------------------------------------------------- # A rotational term implies an explicit convention to be specified operation proj=helmert rx=1 expect failure errno invalid_op_missing_arg operation proj=helmert rx=1 convention=foo expect failure errno invalid_op_illegal_arg_value operation proj=helmert rx=1 convention=1 expect failure errno invalid_op_illegal_arg_value # towgs84 in helmert context should always be position_vector operation proj=helmert towgs84=1,2,3,4,5,6,7 convention=coordinate_frame expect failure errno invalid_op_illegal_arg_value # Transpose no longer accepted operation proj=helmert transpose expect failure errno invalid_op_illegal_arg_value # Use of 2D Helmert interface with 3D Helmert setup operation +proj=ob_tran +o_proj=helmert +o_lat_p=0 direction inverse accept 0 0 expect failure errno no_inverse_op ------------------------------------------------------------------------------- # Molodensky-Badekas from IOGP Guidance 7.2, Transformation from La Canoa to REGVEN # between geographic 2D coordinate reference systems (EPSG Dataset transformation code 1771). # Here just taking the Cartesian step of the transformation. ------------------------------------------------------------------------------- operation proj=molobadekas convention=coordinate_frame \ x=-270.933 y=115.599 z=-360.226 rx=-5.266 ry=-1.238 rz=2.381 \ s=-5.109 px=2464351.59 py=-5783466.61 pz=974809.81 ------------------------------------------------------------------------------- tolerance 1 cm roundtrip 1 accept 2550408.96 -5749912.26 1054891.11 expect 2550138.45 -5749799.87 1054530.82 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test error cases of molobadekas ------------------------------------------------------------------------------- # Missing convention operation proj=molobadekas expect failure errno invalid_op_missing_arg ------------------------------------------------------------------------------- # geocentric latitude ------------------------------------------------------------------------------- operation proj=geoc ellps=GRS80 accept 12 55 0 0 expect 12 54.818973308324573 0 0 roundtrip 1000 accept 12 90 0 0 expect 12 90 0 0 accept 12 -90 0 0 expect 12 -90 0 0 accept 12 89.99999999999 0 0 expect 12 89.999999999989996 0 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # geocentric latitude using old +geoc flag ------------------------------------------------------------------------------- operation proj=pipeline step proj=longlat ellps=GRS80 geoc inv accept 12 55 0 0 expect 12 54.818973308324573 0 0 roundtrip 1 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # some less used options ------------------------------------------------------------------------------- operation proj=utm ellps=GRS80 zone=32 to_meter=0 expect failure errno invalid_op_illegal_arg_value operation proj=utm ellps=GRS80 zone=32 to_meter=10 accept 12 55 expect 69187.5632 609890.7825 operation proj=utm ellps=GRS80 zone=32 to_meter=1/0 expect failure errno invalid_op_illegal_arg_value operation proj=utm ellps=GRS80 zone=32 to_meter=2.0/0.2 accept 12 55 expect 69187.5632 609890.7825 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test that gie can read DMS style coordinates as well as coordinates where _ # is used as a thousands separator. ------------------------------------------------------------------------------- operation +step +proj=latlong +ellps=WGS84 ------------------------------------------------------------------------------- tolerance 1 m accept -64d43'75.34 17d32'45.6 expect -64.737589 17.546000 accept 164d43'75.34 17d32'45.6 expect 164.737589 17.546000 accept 164d43'75.34 17d32'45.6 expect 164d43'75.34 17d32'45.6 accept 164d43'75.34W 17d32'45.6S expect -164.737589 -17.546000 accept 90d00'00.00 0d00'00.00 expect 90.0 0.0 accept 0d00'00.00 0d00'00.00 expect 0.0 0.0 operation +proj=pipeline \ +step +proj=latlong +datum=NAD27 +inv \ +step +units=us-ft +init=nad27:3901 tolerance 1 mm accept -80d32'30.000 34d32'30.000 0.0 expect 2_138_028.224 561_330.721 0.0 accept -81d00'00.000 34d32'30.000 0.0 expect 2_000_000.000 561_019.077 0.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Some tests from PJ_eqearth.c ------------------------------------------------------------------------------- operation +proj=eqearth +ellps=WGS84 ------------------------------------------------------------------------------- direction forward tolerance 1cm accept 0 0 expect 0 0 accept -180 90 expect -10216474.79 8392927.6 accept 0 90 expect 0 8392927.6 accept 180 90 expect 10216474.79 8392927.6 accept 180 45 expect 14792474.75 5466867.76 accept 180 0 expect 17243959.06 0 accept -70 -31.2 expect -6241081.64 -3907019.16 direction inverse accept -6241081.64 -3907019.16 expect -70 -31.2 accept 17243959.06 0 expect 180 0 accept 14792474.75 5466867.76 expect 180 45 accept 0 0 expect 0 0 accept -10216474.79 8392927.6 expect -180 90 accept 0 8392927.6 expect 0 90 accept 10216474.79 8392927.6 expect 180 90 operation +proj=eqearth +R=6378137 direction forward tolerance 1cm accept 0 0 expect 0 0 accept -180 90 expect -10227908.09 8402320.16 accept 0 90 expect 0.00 8402320.16 accept 180 90 expect 10227908.09 8402320.16 accept 180 45 expect 14795421.79 5486671.72 accept 180 0 expect 17263256.84 0.00 accept -70 -31.2 expect -6244707.88 -3924893.29 direction inverse accept -6244707.88 -3924893.29 expect -70 -31.2 accept 17263256.84 0.00 expect 180 0 accept 14795421.79 5486671.72 expect 180 45 accept 0 0 expect 0 0 accept -10227908.09 8402320.16 expect -180 90 accept 0.00 8402320.16 expect 0 90 accept 10227908.09 8402320.16 expect 180 90 operation +proj=eqearth +R=1 direction inverse # coordinate in valid region accept 0 -1.3 expect 0 -82.318 # coordinate on edge accept 0 -1.3173627591574 expect 0 -90 # coordinate outside valid region, should be clamped accept 0 -1.4 expect 0 -90 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test for PJ_affine ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=geogoffset ------------------------------------------------------------------------------- direction forward tolerance 1mm accept 10 20 expect 10 20 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=geogoffset +dlon=3600 +dlat=-3600 +dh=3 ------------------------------------------------------------------------------- direction forward tolerance 1mm accept 10 20 expect 11 19 roundtrip 1 accept 10 20 30 expect 11 19 33 roundtrip 1 accept 10 20 30 40 expect 11 19 33 40 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=affine ------------------------------------------------------------------------------- direction forward tolerance 1mm accept 10 20 30 40 expect 10 20 30 40 roundtrip 1 ------------------------------------------------------------------------------- operation +proj=affine +xoff=1 +yoff=2 +zoff=3 +toff=4 +s11=11 +s12=12 +s13=13 +s21=21 +s22=22 +s23=23 +s31=-31 +s32=32 +s33=33 +tscale=34 ------------------------------------------------------------------------------- direction forward tolerance 1mm accept 2 49 10 100 expect 741.0000 1352.0000 1839.0000 3404.0000 roundtrip 1 accept 2 49 10 expect 741.0000 1352.0000 1839.0000 roundtrip 1 accept 2 49 expect 611.0000 1122.0000 roundtrip 1 ------------------------------------------------------------------------------- # Non invertible operation +proj=affine +s11=0 +s22=0 +s23=0 ------------------------------------------------------------------------------- direction reverse accept 0 0 0 0 expect failure ------------------------------------------------------------------------------- # Non invertible operation +proj=affine +tscale=0 ------------------------------------------------------------------------------- direction reverse accept 0 0 0 0 expect failure ------------------------------------------------------------------------------- # Test lon_wrap operation +proj=longlat +ellps=WGS84 +lon_wrap=180 ------------------------------------------------------------------------------- direction forward accept -1 10 0 expect 359 10 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- # Test for vertoffset (Vertical Offset And Slope) # Test point for EPSG Guidance note 7.2 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=vertoffset +lat_0=46.9166666666666666 +lon_0=8.183333333333334 +dh=-0.245 +slope_lat=-0.210 +slope_lon=-0.032 +ellps=GRS80 ------------------------------------------------------------------------------- direction forward tolerance 1mm accept 9.666666666666666 47.333333333333336 473.000 expect 9.666666666666666 47.333333333333336 472.690 roundtrip 1 ------------------------------------------------------------------------------- # Test NaN handling # When given NaNs, return NaNs ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=laea +lat_0=90 +lon_0=-150 +datum=WGS84 +units=m ------------------------------------------------------------------------------- direction forward tolerance 0 accept NaN NaN NaN NaN expect NaN NaN NaN NaN roundtrip 1 ------------------------------------------------------------------------------- # No-op ------------------------------------------------------------------------------- operation +proj=noop direction forward accept 25 25 expect 25 25 accept 25 25 25 expect 25 25 25 accept 25 25 25 25 expect 25 25 25 25 ------------------------------------------------------------------------------- # Test invalid lat_0 operation +proj=aeqd +R=1 +lat_0=91 expect failure errno invalid_op_illegal_arg_value ------------------------------------------------------------------------------- # cart ------------------------------------------------------------------------------- operation +proj=cart +ellps=GRS80 tolerance 0.001mm accept 0 0 0 expect 6378137 0 0 accept 0 90 0 expect 0 0 6356752.314140347 accept 0 -90 0 expect 0 0 -6356752.314140347 accept 90 0 0 expect 0 6378137 0 accept -90 0 0 expect 0 -6378137 0 accept 180 0 0 expect -6378137 0 0 accept -180 0 0 expect -6378137 0 0 # Center of Earth ! accept 0 0 -6378137 expect 0 0 0 accept 0 90 -6356752.314140347 expect 0 0 0 direction inverse accept 6378137 0 0 expect 0 0 0 accept 0 0 6356752.314140347 expect 0 90 0 accept 0 0 -6356752.314140347 expect 0 -90 0 accept 0 6378137 0 expect 90 0 0 accept 0 -6378137 0 expect -90 0 0 accept -6378137 0 0 expect 180 0 0 # Center of Earth ! accept 0 0 0 expect 0 90 -6356752.314140356 accept 0 0 1e-6 expect 0 90 -6356752.314139356 accept 0 0 -1e-6 expect 0 -90 -6356752.314139356 ------------------------------------------------------------------------------- # Test handling of endianness of NTv2 grids ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_little_endian.gsb ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation +proj=hgridshift +grids=tests/test_hgrid_big_endian.gsb ------------------------------------------------------------------------------- tolerance 2 mm accept 4.5 52.5 0 expect 5.875 55.375 0 ------------------------------------------------------------------------------- =============================================================================== # Tests for testing that +omit_fwd, +omit_inv and +inv work together like they # should. # # +omit_fwd specifies that a step should be omitted when running forwards. # # +omit_inv specifies that a step should be omitted when running backwards. # # +inv specifies that a step should be inverted. The forward path would do # inverse operation and inverse path would do forward operation. # # | | invertible step | non-invertible step | # | flags | forward path | inverse path | forward path | inverse path | # | -------------- | ------------ | ------------ | ------------ | ------------ | # | +omit_fwd | omit | inv | omit | runtime err | # | +omit_fwd +inv | omit | fwd | omit | fwd | # | +omit_inv | fwd | omit | fwd | omit | # | +omit_inv +inv | inv | omit | pipeline creation error | # # From the table we can see that invertible steps should work pretty much all # the time. Non-invertible steps on the other hand make either the forward path # or inverse path undefined depending on which flags the step has. # # A non-invertible step is for example an affine transformation where we cannot # calculate the inverse of the matrix. =============================================================================== ------------------------------------------------------------------------------- # Test that +omit_fwd, +omit_inv and +inv work correctly with an invertible step. ------------------------------------------------------------------------------- # Test that forward path does nothing and inverse path does inverse transformation operation proj=pipeline step proj=affine s11=2 omit_fwd direction forward accept 1 2 3 expect 1 2 3 direction inverse accept 1 2 3 expect 0.5 2 3 # Test that forward path does nothing and inverse path does forward transformation operation proj=pipeline step proj=affine s11=2 omit_fwd inv direction forward accept 1 2 3 expect 1 2 3 direction inverse accept 1 2 3 expect 2 2 3 # Test that forward path does forward transformation and inverse path does nothing operation proj=pipeline step proj=affine s11=2 omit_inv direction forward accept 1 2 3 expect 2 2 3 direction inverse accept 1 2 3 expect 1 2 3 # Test that forward path does inverse transformation and inverse path does nothing operation proj=pipeline step proj=affine s11=2 omit_inv inv direction forward accept 1 2 3 expect 0.5 2 3 direction inverse accept 1 2 3 expect 1 2 3 ------------------------------------------------------------------------------- # Test that +omit_fwd, +omit_inv and +inv work correctly with a non-invertible step. ------------------------------------------------------------------------------- # Test that forward path does nothing and inverse path is not defined. # # The affine transformation is not invertible so this pipeline cannot be executed in # reverse. operation proj=pipeline step proj=affine s11=1 s12=1 s13=1 s22=0 s33=0 omit_fwd direction forward accept 1 2 3 expect 1 2 3 direction inverse accept 1 2 3 expect failure errno no_inverse_op # Test that forward path does nothing and inverse path does forward transformation. # # The affine transformation does not have an inverse, but inv specifies that the # step should be done in inverse order relative to our pipeline direction. When # we execute the pipeline in reverse, we should call the forward transformation of # the step which is defined so the pipeline should be valid in reverse. operation proj=pipeline step proj=affine s11=1 s12=1 s13=1 s22=0 s33=0 omit_fwd inv direction forward accept 1 2 3 expect 1 2 3 direction inverse accept 1 2 3 expect 6 0 0 # Test that the forward path does forward transformation and inverse path does nothing. operation proj=pipeline step proj=affine s11=1 s12=1 s13=1 s22=0 s33=0 omit_inv direction forward accept 1 2 3 expect 6 0 0 direction inverse accept 1 2 3 expect 1 2 3 # Test that the forward path is not defined # # When going through the forward path, inv specifies that we should execute the # step in reverse. Because the affine transformation does not have an inverse, # this means that the forward path does not exist. operation proj=pipeline step proj=affine s11=1 s12=1 s13=1 s22=0 s33=0 omit_inv inv expect failure errno no_inverse_op proj-9.6.0/test/gie/nkg.gie000664 001754 001755 00000020100 14764566077 015402 0ustar00e012349e012349000000 000000 # ------------------------------------------------------------------------------- # NKG # ------------------------------------------------------------------------------- operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_NKG_ETRF00 tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9311 948983.7980 5201383.2227 2020.5 #------------------------------------------------------------------------------- # DENMARK #------------------------------------------------------------------------------- # 2008 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_DK tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9362 948983.7825 5201383.2292 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ETRF00_TO_DK tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.3829 948984.2188 5201383.5296 2020.5 # 2020 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_DK tolerance 0.1 mm # BUDD accept 3513638.0964 778956.5470 5248216.5248 2015.0 expect 3513638.5607 778956.1875 5248216.2477 2015.0 #ESBC accept 3582104.8458 532590.0946 5232755.0863 2015.0 expect 3582105.2916 532589.7310 5232754.8057 2015.0 operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_NKG_ETRF14 tolerance 0.1 mm # BUDD accept 3513638.0964 778956.5470 5248216.5248 2015.0 expect 3513638.5071 778956.1528 5248216.2870 2015.0 # ESBC accept 3582104.8458 532590.0946 5232755.0863 2015.0 expect 3582105.2401 532589.6950 5232754.8507 2015.0 operation urn:ogc:def:coordinateOperation:NKG::ETRF14_TO_DK tolerance 0.1 mm # BUDD accept 3513638.5071 778956.1528 5248216.2870 2015.0 expect 3513638.5607 778956.1875 5248216.2477 2015.0 # ESBC accept 3582105.2401 532589.6950 5232754.8507 2015.0 expect 3582105.2916 532589.7310 5232754.8057 2015.0 # ------------------------------------------------------------------------------- # ESTONIA # ------------------------------------------------------------------------------- # 2008 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_EE tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9395 948983.8006 5201383.2242 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ETRF00_TO_EE tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.3862 948984.2370 5201383.5246 2020.5 # 2020 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_EE tolerance 0.1 mm # AJOE accept 2922027.7409 1516183.8589 5444680.6502 2015.0 expect 2922028.2730 1516183.5457 5444680.4094 2015.0 # ------------------------------------------------------------------------------- # FINLAND # ------------------------------------------------------------------------------- # 2008 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_FI tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9522 948983.7911 5201383.2230 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_FI_EUREF-FIN tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9522 948983.7911 5201383.2230 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ETRF00_TO_FI tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.3989 948984.2274 5201383.5235 2020.5 # 2020 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_FI tolerance 0.1 mm # DEGE accept 2994012.0569 1112559.9272 5502272.0863 2015.0 expect 2994012.5170 1112559.5902 5502271.7683 2015.0 operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_FI_EUREF-FIN tolerance 0.1 mm # DEGE accept 2994012.0569 1112559.9272 5502272.0863 2015.0 expect 2994012.5170 1112559.5902 5502271.7683 2015.0 # ------------------------------------------------------------------------------- # LATVIA # ------------------------------------------------------------------------------- # 2008 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_LV tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9806 948983.8606 5201383.3118 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ETRF00_TO_LV tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.4273 948984.2970 5201383.6122 2020.5 # 2020 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_LV tolerance 0.1 mm # BAUS accept 3226814.4746 1449250.4615 5289639.6134 2015.0 expect 3226814.9950 1449250.1841 5289639.3779 2015.0 # ------------------------------------------------------------------------------- # LITHUANIA # ------------------------------------------------------------------------------- # 2008 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_LT tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9358 948983.8042 5201383.2294 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ETRF00_TO_LT tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.3826 948984.2405 5201383.5299 2020.5 # 2020 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_LT tolerance 0.1 mm # VLNS accept 3343600.4221 1580417.8797 5179337.3696 2015.0 expect 3343600.9945 1580417.5661 5179337.1637 2015.0 # ------------------------------------------------------------------------------- # NORWAY # ------------------------------------------------------------------------------- # 2008 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_NO tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9204 948983.8049 5201383.2054 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ETRF00_TO_NO tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.3671 948984.2412 5201383.5058 2020.5 # 2020 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_NO tolerance 0.1 mm # STAS accept 3275753.4135 321111.2481 5445042.2134 2020.0 expect 3275753.9094 321110.8626 5445041.8818 2020.0 # BOD3 accept 2391773.9918 615615.1837 5860966.1279 2020.0 expect 2391774.5481 615614.9063 5860965.8185 2020.0 # KAUS accept 2107888.9134 895603.4769 5933242.6269 2020.0 expect 2107889.5014 895603.2055 5933242.3208 2020.0 # ------------------------------------------------------------------------------- # SWEDEN # ------------------------------------------------------------------------------- operation urn:ogc:def:coordinateOperation:NKG::ITRF2000_TO_SE tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.9223 948983.7912 5201383.2025 2020.5 operation urn:ogc:def:coordinateOperation:NKG::ETRF00_TO_SE tolerance 1 mm accept 3541657.3778 948984.2343 5201383.5231 2020.5 expect 3541657.3690 948984.2275 5201383.5030 2020.5 # 2020 Transformations operation urn:ogc:def:coordinateOperation:NKG::ITRF2014_TO_SE tolerance 0.1 mm # ARJ0 accept 2441774.9791 799268.3078 5818729.4941 2015.0 expect 2441775.4338 799268.0336 5818729.1635 2015.0 # BOD3 accept 2391774.0738 615615.1324 5860966.0796 2015.0 expect 2391774.5409 615614.8770 5860965.8078 2015.0 # KIR0 accept 2248123.0276 865686.7906 5886425.8928 2015.0 expect 2248123.5028 865686.5301 5886425.5928 2015.0 proj-9.6.0/test/gie/peirce_q.gie000664 001754 001755 00000140533 14764566077 016427 0ustar00e012349e012349000000 000000 ------------------------------------------------------------ # This gie file was originally automatically generated using libproject # from where the peirce_q code was adapted ------------------------------------------------------------ ------------------------------------------------------------ # These test values were selected from 60 points # based on the from the original libproj test. Note that # Peirce_q distances include considerable distortion away # from axes, a feature of the projection to allow # tessellation but means that there is no uniform scale # across the coordinate space, so tolerance can be high. ------------------------------------------------------------ ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=square tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect -16684778.66 16659858.26 accept -139.6233037328 -87.8821294926 expect -16686136.62 16470363.98 accept -119.6070748182 -86.3003323104 expect -16595886.22 -16308355.92 accept -99.5789095738 -85.2121814625 expect -16396383.18 -16271023.42 accept -79.2799350968 -83.8692118030 expect -16141287.47 -16320788.59 accept -59.1007316490 -82.6429522913 expect -15910611.60 -16505541.92 accept -39.7694988813 -81.1240616181 expect 15720298.10 -16614965.01 accept -19.4219986373 -80.4596653260 expect 15746034.38 -16246050.72 accept 0.0372192405 -79.1830001774 expect 15852642.31 -15851534.09 accept 10.8072116146 -78.5286202425 expect 15985877.10 -15646515.07 accept 30.6949420481 -77.5251356225 expect 16361000.46 -15355648.15 accept 50.8838172783 -77.2075414406 expect 16558682.76 15284231.71 accept 70.9123606882 -75.6020670736 expect 16001764.31 15257501.18 accept 90.9423960847 -75.1187688922 expect 15509280.35 15547980.96 accept 110.1071594840 -74.5087602471 expect 15133049.74 15975564.05 accept 130.0104641839 -73.3709657282 expect 14849947.11 16543126.46 accept 150.5931126765 -73.1105693985 expect -14882991.09 16196524.65 accept 170.3454770498 -72.3687427114 expect -15093352.82 15561916.35 accept -179.4283603569 -79.2780817976 expect -15868107.22 15851237.11 accept -159.6140419013 -78.9064235928 expect -16189722.98 15580148.89 accept -139.5485387788 -78.1437071317 expect -16600189.56 15386190.03 accept -119.3040589991 -77.1517896758 expect -16316973.21 -15323941.76 accept -99.1733290138 -76.2249333909 expect -15804208.98 -15457233.95 accept -79.5627247417 -75.2438944725 expect -15346437.66 -15769094.64 accept -59.2065888779 -74.4787205556 expect -15021689.81 -16278889.61 accept -39.4027491539 -73.6693258790 expect 14885488.22 -16526762.78 accept -19.3829588944 -72.8068670782 expect 14968262.72 -15872213.73 accept 0.5951648774 -71.1110965727 expect 15222108.42 -15190983.68 accept 10.0089578122 -71.1061903043 expect 15489314.77 -14968374.05 accept 30.2470524798 -69.7155529444 expect 16124447.67 -14500816.44 accept 50.0855077954 -69.3112248587 expect 16498844.48 14388231.66 accept 70.3496352985 -68.4437853274 expect 15666358.72 14513249.85 accept 90.4893702644 -66.7652070914 expect 14837383.82 14868997.15 accept 110.3952984186 -65.8768496172 expect 14229937.28 15571030.23 accept 130.3231133025 -64.8242212878 expect 13868599.66 16472840.15 accept 150.8384853690 -63.8483921906 expect -13857834.28 15896552.84 accept 170.7991687984 -62.8345530934 expect -14209244.97 14904320.39 accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect -1542258.49 1501537.48 accept -159.9563893280 71.5181717183 expect -1879442.18 874815.08 accept -139.1100287608 72.5807306253 expect -1947072.52 139940.96 accept -119.6844932150 73.8160145972 expect -1747316.08 -478587.18 accept -99.2835557046 74.0204664516 expect -1452001.59 -1044052.58 accept -79.7589672970 75.0775591038 expect -951397.60 -1370919.39 accept -59.3247479059 76.5851745566 expect -370785.20 -1451930.29 accept -39.7902268868 77.0657936158 expect 131161.56 -1438411.11 accept -19.7666667754 78.0413206451 expect 568957.13 -1207234.94 accept 0.2731990430 79.0490755914 expect 867766.11 -859530.19 accept 10.9115419099 79.7152157770 expect 949655.50 -642692.40 accept 30.7420972758 80.5901686038 expect 1016382.12 -258281.56 accept 50.1425480782 81.1493341375 expect 982144.24 88390.48 accept 70.9517084975 81.7646094071 expect 824812.58 401430.41 accept 90.1847984189 82.9573597164 expect 552645.55 556222.02 accept 110.4406311958 83.6703375043 expect 292833.81 640803.17 accept 130.8429657164 84.7838043163 expect 42074.56 578888.43 accept 150.8488588999 85.8764976286 expect -125274.18 441272.71 accept 170.3972098164 87.6222109978 expect -153172.25 215556.52 ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=diamond tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect -17621.38 23578218.89 accept -139.6233037328 -87.8821294926 expect -152574.30 23445186.42 accept -119.6070748182 -86.3003323104 expect -23266812.75 203314.63 accept -99.5789095738 -85.2121814625 expect -23099344.73 88642.74 accept -79.2799350968 -83.8692118030 expect -22954154.12 -126926.46 accept -59.1007316490 -82.6429522913 expect -22921681.97 -420679.26 accept -39.7694988813 -81.1240616181 expect -632625.04 -22864483.82 accept -19.4219986373 -80.4596653260 expect -353564.94 -22621820.31 accept 0.0372192405 -79.1830001774 expect 783.63 -22418238.13 accept 10.8072116146 -78.5286202425 expect 239965.19 -22367479.01 accept 30.6949420481 -77.5251356225 expect 710891.44 -22427057.31 accept 50.8838172783 -77.2075414406 expect 22516340.76 -901172.98 accept 70.9123606882 -75.6020670736 expect 22103638.61 -526273.50 accept 90.9423960847 -75.1187688922 expect 21960800.08 27365.47 accept 110.1071594840 -74.5087602471 expect 21997111.76 595747.59 accept 130.0104641839 -73.3709657282 expect 22198255.20 1197258.60 accept 150.5931126765 -73.1105693985 expect 928808.49 21976536.34 accept 170.3454770498 -72.3687427114 expect 331324.45 21676548.71 accept -179.4283603569 -79.2780817976 expect -11928.97 22428963.47 accept -159.6140419013 -78.9064235928 expect -431033.97 22464691.83 accept -139.5485387788 -78.1437071317 expect -858427.30 22617785.91 accept -119.3040589991 -77.1517896758 expect -22373505.54 702179.27 accept -99.1733290138 -76.2249333909 expect -22105178.28 245348.39 accept -79.5627247417 -75.2438944725 expect -22002003.89 -298863.61 accept -59.2065888779 -74.4787205556 expect -22132851.96 -888974.50 accept -39.4027491539 -73.6693258790 expect -1160556.37 -22211815.70 accept -19.3829588944 -72.8068670782 expect -639189.89 -21807510.03 accept 0.5951648774 -71.1110965727 expect 22008.52 -21505303.66 accept 10.0089578122 -71.1061903043 expect 368360.71 -21536838.30 accept 30.2470524798 -69.7155529444 expect 1148080.66 -21655331.93 accept 50.0855077954 -69.3112248587 expect 21840460.99 -1492428.63 accept 70.3496352985 -68.4437853274 expect 21340205.88 -815371.10 accept 90.4893702644 -66.7652070914 expect 21005583.43 22354.00 accept 110.3952984186 -65.8768496172 expect 21072466.21 948295.92 accept 130.3231133025 -64.8242212878 expect 21454637.84 1841476.11 accept 150.8384853690 -63.8483921906 expect 1441591.72 21039528.90 accept 170.7991687984 -62.8345530934 expect 491492.54 20586399.49 accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect -28794.10 2152288.77 accept -159.9563893280 71.5181717183 expect -710378.63 1947553.99 accept -139.1100287608 72.5807306253 expect -1277834.99 1475741.38 accept -119.6844932150 73.8160145972 expect -1573951.28 897126.81 accept -99.2835557046 74.0204664516 expect -1764976.83 288463.51 accept -79.7589672970 75.0775591038 expect -1642126.09 -296646.71 accept -59.3247479059 76.5851745566 expect -1288854.48 -764485.02 accept -39.7902268868 77.0657936158 expect -924365.02 -1109855.48 accept -19.7666667754 78.0413206451 expect -451330.57 -1255957.46 accept 0.2731990430 79.0490755914 expect 5823.67 -1221382.92 accept 10.9115419099 79.7152157770 expect 217055.69 -1125960.00 accept 30.7420972758 80.5901686038 expect 536058.05 -901323.33 accept 50.1425480782 81.1493341375 expect 756982.36 -631979.34 accept 70.9517084975 81.7646094071 expect 867084.74 -299376.41 accept 90.1847984189 82.9573597164 expect 784087.78 2528.94 accept 110.4406311958 83.6703375043 expect 660181.04 246051.50 accept 130.8429657164 84.7838043163 expect 439087.14 379584.73 accept 150.8488588999 85.8764976286 expect 223444.70 400609.15 accept 170.3972098164 87.6222109978 expect 44112.34 260730.62 ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=horizontal tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect 11829925.59 46389.53 accept -139.6233037328 -87.8821294926 expect 11964878.50 179422.00 accept -119.6070748182 -86.3003323104 expect 12170099.87 203314.63 accept -99.5789095738 -85.2121814625 expect 12337567.89 88642.74 accept -79.2799350968 -83.8692118030 expect 12482758.50 -126926.46 accept -59.1007316490 -82.6429522913 expect 12515230.65 -420679.26 accept -39.7694988813 -81.1240616181 expect 12444929.25 -760124.60 accept -19.4219986373 -80.4596653260 expect 12165869.15 -1002788.10 accept 0.0372192405 -79.1830001774 expect 11811520.58 -1206370.29 accept 10.8072116146 -78.5286202425 expect 11572339.01 -1257129.40 accept 30.6949420481 -77.5251356225 expect 11101412.77 -1197551.10 accept 50.8838172783 -77.2075414406 expect 10704036.55 -901172.98 accept 70.9123606882 -75.6020670736 expect 10291334.40 -526273.50 accept 90.9423960847 -75.1187688922 expect 10148495.87 27365.47 accept 110.1071594840 -74.5087602471 expect 10184807.56 595747.59 accept 130.0104641839 -73.3709657282 expect 10385951.00 1197258.60 accept 150.5931126765 -73.1105693985 expect 10883495.72 1648072.07 accept 170.3454770498 -72.3687427114 expect 11480979.75 1948059.70 accept -179.4283603569 -79.2780817976 expect 11824233.18 1195644.94 accept -159.6140419013 -78.9064235928 expect 12243338.18 1159916.58 accept -139.5485387788 -78.1437071317 expect 12670731.51 1006822.50 accept -119.3040589991 -77.1517896758 expect 13063407.08 702179.27 accept -99.1733290138 -76.2249333909 expect 13331734.34 245348.39 accept -79.5627247417 -75.2438944725 expect 13434908.73 -298863.61 accept -59.2065888779 -74.4787205556 expect 13304060.66 -888974.50 accept -39.4027491539 -73.6693258790 expect 12972860.58 -1412792.72 accept -19.3829588944 -72.8068670782 expect 12451494.09 -1817098.38 accept 0.5951648774 -71.1110965727 expect 11790295.69 -2119304.75 accept 10.0089578122 -71.1061903043 expect 11443943.49 -2087770.11 accept 30.2470524798 -69.7155529444 expect 10664223.55 -1969276.48 accept 50.0855077954 -69.3112248587 expect 10028156.79 -1492428.63 accept 70.3496352985 -68.4437853274 expect 9527901.67 -815371.10 accept 90.4893702644 -66.7652070914 expect 9193279.23 22354.00 accept 110.3952984186 -65.8768496172 expect 9260162.01 948295.92 accept 130.3231133025 -64.8242212878 expect 9642333.63 1841476.11 accept 150.8384853690 -63.8483921906 expect 10370712.49 2585079.51 accept 170.7991687984 -62.8345530934 expect 11320811.66 3038208.93 accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect -11841098.31 2152288.77 accept -159.9563893280 71.5181717183 expect -12522682.84 1947553.99 accept -139.1100287608 72.5807306253 expect -13090139.19 1475741.38 accept -119.6844932150 73.8160145972 expect -13386255.49 897126.81 accept -99.2835557046 74.0204664516 expect -13577281.04 288463.51 accept -79.7589672970 75.0775591038 expect -13454430.30 -296646.71 accept -59.3247479059 76.5851745566 expect -13101158.69 -764485.02 accept -39.7902268868 77.0657936158 expect -12736669.23 -1109855.48 accept -19.7666667754 78.0413206451 expect -12263634.78 -1255957.46 accept 0.2731990430 79.0490755914 expect -11806480.53 -1221382.92 accept 10.9115419099 79.7152157770 expect -11595248.52 -1125960.00 accept 30.7420972758 80.5901686038 expect -11276246.16 -901323.33 accept 50.1425480782 81.1493341375 expect -11055321.85 -631979.34 accept 70.9517084975 81.7646094071 expect -10945219.47 -299376.41 accept 90.1847984189 82.9573597164 expect -11028216.43 2528.94 accept 110.4406311958 83.6703375043 expect -11152123.17 246051.50 accept 130.8429657164 84.7838043163 expect -11373217.07 379584.73 accept 150.8488588999 85.8764976286 expect -11588859.50 400609.15 accept 170.3972098164 87.6222109978 expect -11768191.87 260730.62 ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=horizontal +scrollx=0.75 tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect 17621.38 46389.53 accept -139.6233037328 -87.8821294926 expect 152574.30 179422.00 accept -119.6070748182 -86.3003323104 expect 357795.67 203314.63 accept -99.5789095738 -85.2121814625 expect 525263.69 88642.74 accept -79.2799350968 -83.8692118030 expect 670454.30 -126926.46 accept -59.1007316490 -82.6429522913 expect 702926.44 -420679.26 accept -39.7694988813 -81.1240616181 expect 632625.04 -760124.60 accept -19.4219986373 -80.4596653260 expect 353564.94 -1002788.10 accept 0.0372192405 -79.1830001774 expect -783.63 -1206370.29 accept 10.8072116146 -78.5286202425 expect -239965.19 -1257129.40 accept 30.6949420481 -77.5251356225 expect -710891.44 -1197551.10 accept 50.8838172783 -77.2075414406 expect -1108267.66 -901172.98 accept 70.9123606882 -75.6020670736 expect -1520969.81 -526273.50 accept 90.9423960847 -75.1187688922 expect -1663808.33 27365.47 accept 110.1071594840 -74.5087602471 expect -1627496.65 595747.59 accept 130.0104641839 -73.3709657282 expect -1426353.21 1197258.60 accept 150.5931126765 -73.1105693985 expect -928808.49 1648072.07 accept 170.3454770498 -72.3687427114 expect -331324.45 1948059.70 accept -179.4283603569 -79.2780817976 expect 11928.97 1195644.94 accept -159.6140419013 -78.9064235928 expect 431033.97 1159916.58 accept -139.5485387788 -78.1437071317 expect 858427.30 1006822.50 accept -119.3040589991 -77.1517896758 expect 1251102.88 702179.27 accept -99.1733290138 -76.2249333909 expect 1519430.13 245348.39 accept -79.5627247417 -75.2438944725 expect 1622604.52 -298863.61 accept -59.2065888779 -74.4787205556 expect 1491756.45 -888974.50 accept -39.4027491539 -73.6693258790 expect 1160556.37 -1412792.72 accept -19.3829588944 -72.8068670782 expect 639189.89 -1817098.38 accept 0.5951648774 -71.1110965727 expect -22008.52 -2119304.75 accept 10.0089578122 -71.1061903043 expect -368360.71 -2087770.11 accept 30.2470524798 -69.7155529444 expect -1148080.66 -1969276.48 accept 50.0855077954 -69.3112248587 expect -1784147.42 -1492428.63 accept 70.3496352985 -68.4437853274 expect -2284402.54 -815371.10 accept 90.4893702644 -66.7652070914 expect -2619024.98 22354.00 accept 110.3952984186 -65.8768496172 expect -2552142.20 948295.92 accept 130.3231133025 -64.8242212878 expect -2169970.58 1841476.11 accept 150.8384853690 -63.8483921906 expect -1441591.72 2585079.51 accept 170.7991687984 -62.8345530934 expect -491492.54 3038208.93 accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect 23595814.31 2152288.77 accept -159.9563893280 71.5181717183 expect 22914229.78 1947553.99 accept -139.1100287608 72.5807306253 expect 22346773.43 1475741.38 accept -119.6844932150 73.8160145972 expect 22050657.13 897126.81 accept -99.2835557046 74.0204664516 expect 21859631.58 288463.51 accept -79.7589672970 75.0775591038 expect 21982482.33 -296646.71 accept -59.3247479059 76.5851745566 expect 22335753.93 -764485.02 accept -39.7902268868 77.0657936158 expect 22700243.39 -1109855.48 accept -19.7666667754 78.0413206451 expect 23173277.84 -1255957.46 accept 0.2731990430 79.0490755914 expect -23618784.74 -1221382.92 accept 10.9115419099 79.7152157770 expect -23407552.72 -1125960.00 accept 30.7420972758 80.5901686038 expect -23088550.36 -901323.33 accept 50.1425480782 81.1493341375 expect -22867626.05 -631979.34 accept 70.9517084975 81.7646094071 expect -22757523.68 -299376.41 accept 90.1847984189 82.9573597164 expect -22840520.64 2528.94 accept 110.4406311958 83.6703375043 expect -22964427.38 246051.50 accept 130.8429657164 84.7838043163 expect -23185521.28 379584.73 accept 150.8488588999 85.8764976286 expect -23401163.71 400609.15 accept 170.3972098164 87.6222109978 expect -23580496.07 260730.62 ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=vertical tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect -17621.38 11765914.68 accept -139.6233037328 -87.8821294926 expect -152574.30 11632882.21 accept -119.6070748182 -86.3003323104 expect -357795.67 11608989.58 accept -99.5789095738 -85.2121814625 expect -525263.69 11723661.47 accept -79.2799350968 -83.8692118030 expect -670454.30 11939230.67 accept -59.1007316490 -82.6429522913 expect -702926.44 12232983.46 accept -39.7694988813 -81.1240616181 expect -632625.04 12572428.81 accept -19.4219986373 -80.4596653260 expect -353564.94 12815092.31 accept 0.0372192405 -79.1830001774 expect 783.63 13018674.49 accept 10.8072116146 -78.5286202425 expect 239965.19 13069433.61 accept 30.6949420481 -77.5251356225 expect 710891.44 13009855.31 accept 50.8838172783 -77.2075414406 expect 1108267.66 12713477.19 accept 70.9123606882 -75.6020670736 expect 1520969.81 12338577.71 accept 90.9423960847 -75.1187688922 expect 1663808.33 11784938.74 accept 110.1071594840 -74.5087602471 expect 1627496.65 11216556.62 accept 130.0104641839 -73.3709657282 expect 1426353.21 10615045.61 accept 150.5931126765 -73.1105693985 expect 928808.49 10164232.13 accept 170.3454770498 -72.3687427114 expect 331324.45 9864244.50 accept -179.4283603569 -79.2780817976 expect -11928.97 10616659.27 accept -159.6140419013 -78.9064235928 expect -431033.97 10652387.63 accept -139.5485387788 -78.1437071317 expect -858427.30 10805481.70 accept -119.3040589991 -77.1517896758 expect -1251102.88 11110124.94 accept -99.1733290138 -76.2249333909 expect -1519430.13 11566955.81 accept -79.5627247417 -75.2438944725 expect -1622604.52 12111167.82 accept -59.2065888779 -74.4787205556 expect -1491756.45 12701278.71 accept -39.4027491539 -73.6693258790 expect -1160556.37 13225096.92 accept -19.3829588944 -72.8068670782 expect -639189.89 13629402.59 accept 0.5951648774 -71.1110965727 expect 22008.52 13931608.96 accept 10.0089578122 -71.1061903043 expect 368360.71 13900074.32 accept 30.2470524798 -69.7155529444 expect 1148080.66 13781580.69 accept 50.0855077954 -69.3112248587 expect 1784147.42 13304732.84 accept 70.3496352985 -68.4437853274 expect 2284402.54 12627675.31 accept 90.4893702644 -66.7652070914 expect 2619024.98 11789950.21 accept 110.3952984186 -65.8768496172 expect 2552142.20 10864008.28 accept 130.3231133025 -64.8242212878 expect 2169970.58 9970828.10 accept 150.8384853690 -63.8483921906 expect 1441591.72 9227224.69 accept 170.7991687984 -62.8345530934 expect 491492.54 8774095.28 accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect -28794.10 -9660015.44 accept -159.9563893280 71.5181717183 expect -710378.63 -9864750.22 accept -139.1100287608 72.5807306253 expect -1277834.99 -10336562.82 accept -119.6844932150 73.8160145972 expect -1573951.28 -10915177.40 accept -99.2835557046 74.0204664516 expect -1764976.83 -11523840.70 accept -79.7589672970 75.0775591038 expect -1642126.09 -12108950.91 accept -59.3247479059 76.5851745566 expect -1288854.48 -12576789.23 accept -39.7902268868 77.0657936158 expect -924365.02 -12922159.68 accept -19.7666667754 78.0413206451 expect -451330.57 -13068261.66 accept 0.2731990430 79.0490755914 expect 5823.67 -13033687.13 accept 10.9115419099 79.7152157770 expect 217055.69 -12938264.21 accept 30.7420972758 80.5901686038 expect 536058.05 -12713627.54 accept 50.1425480782 81.1493341375 expect 756982.36 -12444283.55 accept 70.9517084975 81.7646094071 expect 867084.74 -12111680.61 accept 90.1847984189 82.9573597164 expect 784087.78 -11809775.26 accept 110.4406311958 83.6703375043 expect 660181.04 -11566252.71 accept 130.8429657164 84.7838043163 expect 439087.14 -11432719.48 accept 150.8488588999 85.8764976286 expect 223444.70 -11411695.05 accept 170.3972098164 87.6222109978 expect 44112.34 -11551573.59 ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=vertical +scrolly=-0.25 tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect -17621.38 -46389.53 accept -139.6233037328 -87.8821294926 expect -152574.30 -179422.00 accept -119.6070748182 -86.3003323104 expect -357795.67 -203314.63 accept -99.5789095738 -85.2121814625 expect -525263.69 -88642.74 accept -79.2799350968 -83.8692118030 expect -670454.30 126926.46 accept -59.1007316490 -82.6429522913 expect -702926.44 420679.26 accept -39.7694988813 -81.1240616181 expect -632625.04 760124.60 accept -19.4219986373 -80.4596653260 expect -353564.94 1002788.10 accept 0.0372192405 -79.1830001774 expect 783.63 1206370.29 accept 10.8072116146 -78.5286202425 expect 239965.19 1257129.40 accept 30.6949420481 -77.5251356225 expect 710891.44 1197551.10 accept 50.8838172783 -77.2075414406 expect 1108267.66 901172.98 accept 70.9123606882 -75.6020670736 expect 1520969.81 526273.50 accept 90.9423960847 -75.1187688922 expect 1663808.33 -27365.47 accept 110.1071594840 -74.5087602471 expect 1627496.65 -595747.59 accept 130.0104641839 -73.3709657282 expect 1426353.21 -1197258.60 accept 150.5931126765 -73.1105693985 expect 928808.49 -1648072.07 accept 170.3454770498 -72.3687427114 expect 331324.45 -1948059.70 accept -179.4283603569 -79.2780817976 expect -11928.97 -1195644.94 accept -159.6140419013 -78.9064235928 expect -431033.97 -1159916.58 accept -139.5485387788 -78.1437071317 expect -858427.30 -1006822.50 accept -119.3040589991 -77.1517896758 expect -1251102.88 -702179.27 accept -99.1733290138 -76.2249333909 expect -1519430.13 -245348.39 accept -79.5627247417 -75.2438944725 expect -1622604.52 298863.61 accept -59.2065888779 -74.4787205556 expect -1491756.45 888974.50 accept -39.4027491539 -73.6693258790 expect -1160556.37 1412792.72 accept -19.3829588944 -72.8068670782 expect -639189.89 1817098.38 accept 0.5951648774 -71.1110965727 expect 22008.52 2119304.75 accept 10.0089578122 -71.1061903043 expect 368360.71 2087770.11 accept 30.2470524798 -69.7155529444 expect 1148080.66 1969276.48 accept 50.0855077954 -69.3112248587 expect 1784147.42 1492428.63 accept 70.3496352985 -68.4437853274 expect 2284402.54 815371.10 accept 90.4893702644 -66.7652070914 expect 2619024.98 -22354.00 accept 110.3952984186 -65.8768496172 expect 2552142.20 -948295.92 accept 130.3231133025 -64.8242212878 expect 2169970.58 -1841476.11 accept 150.8384853690 -63.8483921906 expect 1441591.72 -2585079.51 accept 170.7991687984 -62.8345530934 expect 491492.54 -3038208.93 accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect -28794.10 -21472319.64 accept -159.9563893280 71.5181717183 expect -710378.63 -21677054.43 accept -139.1100287608 72.5807306253 expect -1277834.99 -22148867.03 accept -119.6844932150 73.8160145972 expect -1573951.28 -22727481.60 accept -99.2835557046 74.0204664516 expect -1764976.83 -23336144.90 accept -79.7589672970 75.0775591038 expect -1642126.09 23327961.71 accept -59.3247479059 76.5851745566 expect -1288854.48 22860123.39 accept -39.7902268868 77.0657936158 expect -924365.02 22514752.94 accept -19.7666667754 78.0413206451 expect -451330.57 22368650.96 accept 0.2731990430 79.0490755914 expect 5823.67 22403225.49 accept 10.9115419099 79.7152157770 expect 217055.69 22498648.41 accept 30.7420972758 80.5901686038 expect 536058.05 22723285.08 accept 50.1425480782 81.1493341375 expect 756982.36 22992629.07 accept 70.9517084975 81.7646094071 expect 867084.74 23325232.01 accept 90.1847984189 82.9573597164 expect 784087.78 -23622079.47 accept 110.4406311958 83.6703375043 expect 660181.04 -23378556.92 accept 130.8429657164 84.7838043163 expect 439087.14 -23245023.69 accept 150.8488588999 85.8764976286 expect 223444.70 -23223999.26 accept 170.3972098164 87.6222109978 expect 44112.34 -23363877.80 ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=nhemisphere tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect failure errno coord_transfm_outside_projection_domain accept -139.6233037328 -87.8821294926 expect failure errno coord_transfm_outside_projection_domain accept -119.6070748182 -86.3003323104 expect failure errno coord_transfm_outside_projection_domain accept -99.5789095738 -85.2121814625 expect failure errno coord_transfm_outside_projection_domain accept -79.2799350968 -83.8692118030 expect failure errno coord_transfm_outside_projection_domain accept -59.1007316490 -82.6429522913 expect failure errno coord_transfm_outside_projection_domain accept -39.7694988813 -81.1240616181 expect failure errno coord_transfm_outside_projection_domain accept -19.4219986373 -80.4596653260 expect failure errno coord_transfm_outside_projection_domain accept 0.0372192405 -79.1830001774 expect failure errno coord_transfm_outside_projection_domain accept 10.8072116146 -78.5286202425 expect failure errno coord_transfm_outside_projection_domain accept 30.6949420481 -77.5251356225 expect failure errno coord_transfm_outside_projection_domain accept 50.8838172783 -77.2075414406 expect failure errno coord_transfm_outside_projection_domain accept 70.9123606882 -75.6020670736 expect failure errno coord_transfm_outside_projection_domain accept 90.9423960847 -75.1187688922 expect failure errno coord_transfm_outside_projection_domain accept 110.1071594840 -74.5087602471 expect failure errno coord_transfm_outside_projection_domain accept 130.0104641839 -73.3709657282 expect failure errno coord_transfm_outside_projection_domain accept 150.5931126765 -73.1105693985 expect failure errno coord_transfm_outside_projection_domain accept 170.3454770498 -72.3687427114 expect failure errno coord_transfm_outside_projection_domain accept -179.4283603569 -79.2780817976 expect failure errno coord_transfm_outside_projection_domain accept -159.6140419013 -78.9064235928 expect failure errno coord_transfm_outside_projection_domain accept -139.5485387788 -78.1437071317 expect failure errno coord_transfm_outside_projection_domain accept -119.3040589991 -77.1517896758 expect failure errno coord_transfm_outside_projection_domain accept -99.1733290138 -76.2249333909 expect failure errno coord_transfm_outside_projection_domain accept -79.5627247417 -75.2438944725 expect failure errno coord_transfm_outside_projection_domain accept -59.2065888779 -74.4787205556 expect failure errno coord_transfm_outside_projection_domain accept -39.4027491539 -73.6693258790 expect failure errno coord_transfm_outside_projection_domain accept -19.3829588944 -72.8068670782 expect failure errno coord_transfm_outside_projection_domain accept 0.5951648774 -71.1110965727 expect failure errno coord_transfm_outside_projection_domain accept 10.0089578122 -71.1061903043 expect failure errno coord_transfm_outside_projection_domain accept 30.2470524798 -69.7155529444 expect failure errno coord_transfm_outside_projection_domain accept 50.0855077954 -69.3112248587 expect failure errno coord_transfm_outside_projection_domain accept 70.3496352985 -68.4437853274 expect failure errno coord_transfm_outside_projection_domain accept 90.4893702644 -66.7652070914 expect failure errno coord_transfm_outside_projection_domain accept 110.3952984186 -65.8768496172 expect failure errno coord_transfm_outside_projection_domain accept 130.3231133025 -64.8242212878 expect failure errno coord_transfm_outside_projection_domain accept 150.8384853690 -63.8483921906 expect failure errno coord_transfm_outside_projection_domain accept 170.7991687984 -62.8345530934 expect failure errno coord_transfm_outside_projection_domain accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect -28794.10 2152288.77 accept -159.9563893280 71.5181717183 expect -710378.63 1947553.99 accept -139.1100287608 72.5807306253 expect -1277834.99 1475741.38 accept -119.6844932150 73.8160145972 expect -1573951.28 897126.81 accept -99.2835557046 74.0204664516 expect -1764976.83 288463.51 accept -79.7589672970 75.0775591038 expect -1642126.09 -296646.71 accept -59.3247479059 76.5851745566 expect -1288854.48 -764485.02 accept -39.7902268868 77.0657936158 expect -924365.02 -1109855.48 accept -19.7666667754 78.0413206451 expect -451330.57 -1255957.46 accept 0.2731990430 79.0490755914 expect 5823.67 -1221382.92 accept 10.9115419099 79.7152157770 expect 217055.69 -1125960.00 accept 30.7420972758 80.5901686038 expect 536058.05 -901323.33 accept 50.1425480782 81.1493341375 expect 756982.36 -631979.34 accept 70.9517084975 81.7646094071 expect 867084.74 -299376.41 accept 90.1847984189 82.9573597164 expect 784087.78 2528.94 accept 110.4406311958 83.6703375043 expect 660181.04 246051.50 accept 130.8429657164 84.7838043163 expect 439087.14 379584.73 accept 150.8488588999 85.8764976286 expect 223444.70 400609.15 accept 170.3972098164 87.6222109978 expect 44112.34 260730.62 ------------------------------------------------------------ operation +proj=peirce_q +R=6370997 +shape=shemisphere tolerance 10 mm ------------------------------------------------------------ accept -179.6126302052 -90.2440064745 expect failure errno coord_transfm_invalid_coord accept -159.2003712209 -89.5537263306 expect -17621.38 46389.53 accept -139.6233037328 -87.8821294926 expect -152574.30 179422.00 accept -119.6070748182 -86.3003323104 expect -357795.67 203314.63 accept -99.5789095738 -85.2121814625 expect -525263.69 88642.74 accept -79.2799350968 -83.8692118030 expect -670454.30 -126926.46 accept -59.1007316490 -82.6429522913 expect -702926.44 -420679.26 accept -39.7694988813 -81.1240616181 expect -632625.04 -760124.60 accept -19.4219986373 -80.4596653260 expect -353564.94 -1002788.10 accept 0.0372192405 -79.1830001774 expect 783.63 -1206370.29 accept 10.8072116146 -78.5286202425 expect 239965.19 -1257129.40 accept 30.6949420481 -77.5251356225 expect 710891.44 -1197551.10 accept 50.8838172783 -77.2075414406 expect 1108267.66 -901172.98 accept 70.9123606882 -75.6020670736 expect 1520969.81 -526273.50 accept 90.9423960847 -75.1187688922 expect 1663808.33 27365.47 accept 110.1071594840 -74.5087602471 expect 1627496.65 595747.59 accept 130.0104641839 -73.3709657282 expect 1426353.21 1197258.60 accept 150.5931126765 -73.1105693985 expect 928808.49 1648072.07 accept 170.3454770498 -72.3687427114 expect 331324.45 1948059.70 accept -179.4283603569 -79.2780817976 expect -11928.97 1195644.94 accept -159.6140419013 -78.9064235928 expect -431033.97 1159916.58 accept -139.5485387788 -78.1437071317 expect -858427.30 1006822.50 accept -119.3040589991 -77.1517896758 expect -1251102.88 702179.27 accept -99.1733290138 -76.2249333909 expect -1519430.13 245348.39 accept -79.5627247417 -75.2438944725 expect -1622604.52 -298863.61 accept -59.2065888779 -74.4787205556 expect -1491756.45 -888974.50 accept -39.4027491539 -73.6693258790 expect -1160556.37 -1412792.72 accept -19.3829588944 -72.8068670782 expect -639189.89 -1817098.38 accept 0.5951648774 -71.1110965727 expect 22008.52 -2119304.75 accept 10.0089578122 -71.1061903043 expect 368360.71 -2087770.11 accept 30.2470524798 -69.7155529444 expect 1148080.66 -1969276.48 accept 50.0855077954 -69.3112248587 expect 1784147.42 -1492428.63 accept 70.3496352985 -68.4437853274 expect 2284402.54 -815371.10 accept 90.4893702644 -66.7652070914 expect 2619024.98 22354.00 accept 110.3952984186 -65.8768496172 expect 2552142.20 948295.92 accept 130.3231133025 -64.8242212878 expect 2169970.58 1841476.11 accept 150.8384853690 -63.8483921906 expect 1441591.72 2585079.51 accept 170.7991687984 -62.8345530934 expect 491492.54 3038208.93 accept 170.6832502669 -105.0174505020 expect failure errno coord_transfm_invalid_coord accept 180.7137917600 105.8174218935 expect failure errno coord_transfm_invalid_coord accept -179.2332724818 70.8217746040 expect failure errno coord_transfm_outside_projection_domain accept -159.9563893280 71.5181717183 expect failure errno coord_transfm_outside_projection_domain accept -139.1100287608 72.5807306253 expect failure errno coord_transfm_outside_projection_domain accept -119.6844932150 73.8160145972 expect failure errno coord_transfm_outside_projection_domain accept -99.2835557046 74.0204664516 expect failure errno coord_transfm_outside_projection_domain accept -79.7589672970 75.0775591038 expect failure errno coord_transfm_outside_projection_domain accept -59.3247479059 76.5851745566 expect failure errno coord_transfm_outside_projection_domain accept -39.7902268868 77.0657936158 expect failure errno coord_transfm_outside_projection_domain accept -19.7666667754 78.0413206451 expect failure errno coord_transfm_outside_projection_domain accept 0.2731990430 79.0490755914 expect failure errno coord_transfm_outside_projection_domain accept 10.9115419099 79.7152157770 expect failure errno coord_transfm_outside_projection_domain accept 30.7420972758 80.5901686038 expect failure errno coord_transfm_outside_projection_domain accept 50.1425480782 81.1493341375 expect failure errno coord_transfm_outside_projection_domain accept 70.9517084975 81.7646094071 expect failure errno coord_transfm_outside_projection_domain accept 90.1847984189 82.9573597164 expect failure errno coord_transfm_outside_projection_domain accept 110.4406311958 83.6703375043 expect failure errno coord_transfm_outside_projection_domain accept 130.8429657164 84.7838043163 expect failure errno coord_transfm_outside_projection_domain accept 150.8488588999 85.8764976286 expect failure errno coord_transfm_outside_projection_domain accept 170.3972098164 87.6222109978 expect failure errno coord_transfm_outside_projection_domain # Test inverse ------------------------------------------------------------ operation +proj=peirce_q +shape=square ------------------------------------------------------------ #tolerance 1 mm # has to bump to this for i386 tolerance 150 mm accept 0 90 expect 0 0 roundtrip 1 accept 0 0 expect 8361921.234827487729 -8361921.234827487729 roundtrip 1 accept 0 -90 expect 16723842.303160080686 -16723842.303160080686 #tolerance 2 mm roundtrip 1 #tolerance 1 mm accept 0 45 expect 3725360.212758612353 -3725360.212758612353 roundtrip 1 accept 0 -45 expect 12998482.090401465073 -12998482.090401465073 roundtrip 1 accept 45 0 tolerance 200 mm expect 16723842.564696932212 -0.095041956369 roundtrip 1 tolerance 150 mm accept -45 0 expect 0 -16723842.469654975459 #roundtrip 1 accept 90 0 expect 8361921.329869444482 8361921.329869444482 roundtrip 1 accept -90 0 expect -8361921.234827487729 -8361921.234827487729 roundtrip 1 accept 135 0 expect 0.095041956369 16723842.564696932212 roundtrip 1 accept -135 0 expect -16723842.430287310854 -0.039367665210 #roundtrip 1 accept 179.99 0 expect -8360808.039828131907 8363034.429826845415 #roundtrip 1 accept -179.99 0 expect -8363034.429826845415 8360808.039828131907 #roundtrip 1 accept 45 45 expect 5299570.257319082506 0 roundtrip 1 accept -45 45 expect 0 -5299570.257319079712 roundtrip 1 accept 90 45 expect 3725360.212758610491 3725360.212758610491 roundtrip 1 accept -90 45 expect -3725360.212758613285 -3725360.212758613285 roundtrip 1 accept 135 45 expect 0 5299570.257319079712 roundtrip 1 accept -135 45 expect -5299570.257319079712 0 #roundtrip 1 accept 179.99 45 expect -3724717.456456150394 3726002.863303491380 roundtrip 1 accept -179.99 45 expect -3726002.863303492777 3724717.456456151791 roundtrip 1 accept 45 -45 expect 16723842.303160080686 11424272.045840997249 roundtrip 1 accept -45 -45 expect 11424272.045840999112 -16723842.303160080686 roundtrip 1 accept 90 -45 expect 12998482.090401468799 12998482.090401468799 roundtrip 1 accept -90 -45 expect -12998482.090401465073 -12998482.090401465073 roundtrip 1 accept 135 -45 expect -11424272.045840999112 16723842.303160080686 roundtrip 1 accept -135 -45 expect -16723842.303160080686 -11424272.045840999112 roundtrip 1 accept 179.99 -45 expect -12997839.439856586978 12999124.846703927964 roundtrip 1 accept -179.99 -45 expect -12999124.846703927964 12997839.439856585115 roundtrip 1 accept 45 -89.999 expect 16723842.303160080686 16723730.983657168224 #roundtrip 1 accept -45 -89.999 expect 16723730.983657168224 -16723842.303160080686 #roundtrip 1 accept 90 -89.999 expect 16723763.588384689763 16723763.588384689763 roundtrip 1 accept -90 -89.999 expect -16723763.588384689763 -16723763.588384689763 roundtrip 1 accept 135 -89.999 expect -16723730.983657168224 16723842.303160080686 #roundtrip 1 accept -135 -89.999 expect -16723842.303160080686 -16723730.983657168224 #roundtrip 1 accept 179.99 -89.999 expect -16723763.588384689763 16723763.588384689763 #roundtrip 1 accept -179.99 -89.999 expect -16723763.588384689763 16723763.588384689763 #roundtrip 1 # Test inverse ------------------------------------------------------------ operation +proj=peirce_q +shape=diamond ------------------------------------------------------------ #tolerance 1 mm # has to bump to this for i386 tolerance 150 mm accept 0 90 expect 0 0 roundtrip 1 accept 0 -90 #tolerance 10 mm expect 0 -23651084.600117880851 roundtrip 1 #tolerance 1 mm accept 0 45 expect 0 -5268454.937608348206 roundtrip 1 accept 0 -45 expect 0 -18382629.662509534508 roundtrip 1 accept 45 0 tolerance 200 mm expect 11825542.417788611725 -11825542.552198234946 roundtrip 1 tolerance 150 mm accept -45 0 expect -11825542.417788611725 -11825542.417788611725 roundtrip 1 accept 90 0 expect 11825542.552198234946 0.000000000000 roundtrip 1 accept -90 0 expect -11825542.417788611725 0.000000000000 #tolerance 20 mm #roundtrip 1 #tolerance 1 mm accept 135 0 expect 11825542.552198234946 11825542.417788611725 roundtrip 1 accept -135 0 expect -11825542.417788611725 11825542.362114325166 roundtrip 1 accept 179.99 0 expect 1574.295465656175 11825542.417788611725 #tolerance 200 mm #roundtrip 1 #tolerance 1 mm accept -179.99 0 expect -1574.295465656175 11825542.417788611725 #tolerance 30 mm #roundtrip 1 #tolerance 1 mm accept 45 45 expect 3747362.066324858926 -3747362.066324859392 roundtrip 1 accept -45 45 expect -3747362.066324857529 -3747362.066324857995 roundtrip 1 accept 90 45 expect 5268454.937608345412 0.000000000000 #roundtrip 1 accept -90 45 expect -5268454.937608350068 0.000000000000 #roundtrip 1 accept 135 45 expect 3747362.066324858926 3747362.066324857995 roundtrip 1 accept -135 45 expect -3747362.066324857529 3747362.066324857529 roundtrip 1 accept 179.99 45 expect 908.919898338959 5268454.862826444209 roundtrip 1 accept -179.99 45 expect -908.919898338959 5268454.862826446071 roundtrip 1 accept 45 -45 expect 19903722.533793020993 -3747362.066324859392 roundtrip 1 accept -45 -45 expect -3747362.066324857529 -19903722.533793020993 roundtrip 1 accept 90 -45 expect 18382629.662509534508 0.000000000000 roundtrip 1 accept -90 -45 expect -18382629.662509530783 0.000000000000 #tolerance 3 mm #roundtrip 1 #tolerance 1 mm accept 135 -45 expect 3747362.066324858926 19903722.533793020993 roundtrip 1 accept -135 -45 expect -19903722.533793020993 3747362.066324857529 roundtrip 1 accept 179.99 -45 expect 908.919898338959 18382629.737291436642 #roundtrip 1 accept -179.99 -45 expect -908.919898338959 18382629.737291432917 roundtrip 1 accept 45 -89.999 expect 23651005.885342493653 -78.714775386137 #roundtrip 1 accept -45 -89.999 expect -78.714775386137 -23651005.885342493653 #roundtrip 1 accept 90 -89.999 expect 23650973.280614964664 0.000000000000 #roundtrip 1 accept -90 -89.999 expect -23650973.280614964664 0.000000000000 #roundtrip 1 accept 135 -89.999 expect 78.714775386137 23651005.885342493653 #roundtrip 1 accept -135 -89.999 expect -23651005.885342493653 78.714775386137 #roundtrip 1 accept 179.99 -89.999 expect 0.000000000000 23650973.280614964664 #roundtrip 1 accept -179.99 -89.999 expect 0.000000000000 23650973.280614964664 #roundtrip 1 proj-9.6.0/test/gie/spilhaus.gie000664 001754 001755 00000024153 14764566077 016467 0ustar00e012349e012349000000 000000 ------------------------------------------------------------ # Roundtrips over the whole globe ------------------------------------------------------------ operation +proj=spilhaus tolerance 1.5 mm accept -20.1 74.1 roundtrip 10 tolerance 10 mm accept -170.0000 -80.0000 roundtrip 10 accept -170.0000 -50.0000 roundtrip 10 accept -170.0000 -20.0000 roundtrip 10 accept -170.0000 10.0000 roundtrip 10 accept -170.0000 40.0000 roundtrip 10 accept -170.0000 70.0000 roundtrip 10 accept -121.0000 -80.0000 roundtrip 10 accept -121.0000 -50.0000 roundtrip 10 accept -121.0000 -20.0000 roundtrip 10 accept -121.0000 10.0000 roundtrip 10 accept -121.0000 40.0000 roundtrip 10 accept -121.0000 70.0000 roundtrip 10 accept -72.0000 -80.0000 roundtrip 10 accept -72.0000 -50.0000 roundtrip 10 accept -72.0000 -20.0000 roundtrip 10 accept -72.0000 10.0000 roundtrip 10 accept -72.0000 40.0000 roundtrip 10 accept -72.0000 70.0000 roundtrip 10 accept -23.0000 -80.0000 roundtrip 10 accept -23.0000 -50.0000 roundtrip 10 accept -23.0000 -20.0000 roundtrip 10 accept -23.0000 10.0000 roundtrip 10 accept -23.0000 40.0000 roundtrip 10 accept -23.0000 70.0000 roundtrip 10 accept 26.0000 -80.0000 roundtrip 10 accept 26.0000 -50.0000 roundtrip 10 accept 26.0000 -20.0000 roundtrip 10 accept 26.0000 10.0000 roundtrip 10 accept 26.0000 40.0000 roundtrip 10 accept 26.0000 70.0000 roundtrip 10 accept 75.0000 -80.0000 roundtrip 10 accept 75.0000 -50.0000 roundtrip 10 accept 75.0000 -20.0000 roundtrip 10 accept 75.0000 10.0000 roundtrip 10 accept 75.0000 40.0000 roundtrip 10 accept 75.0000 70.0000 roundtrip 10 accept 124.0000 -80.0000 roundtrip 10 accept 124.0000 -50.0000 roundtrip 10 accept 124.0000 -20.0000 roundtrip 10 accept 124.0000 10.0000 roundtrip 10 accept 124.0000 40.0000 roundtrip 10 accept 124.0000 70.0000 roundtrip 10 accept 173.0000 -80.0000 roundtrip 10 accept 173.0000 -50.0000 roundtrip 10 accept 173.0000 -20.0000 roundtrip 10 accept 173.0000 10.0000 roundtrip 10 accept 173.0000 40.0000 roundtrip 10 accept 173.0000 70.0000 roundtrip 10 ------------------------------------------------------------ # This gie part was initially generated with a python library # provided in the issue #1851, correcting the applying a factor # due to the conformal latitude (explained in the issue). # It can be edited. ------------------------------------------------------------ operation +proj=spilhaus tolerance 1 mm ------------------------------------------------------------ accept -170.0000 -80.0000 expect 437478.9752 -2678050.3019 accept -170.0000 -50.0000 expect 2186914.6725 -3372185.4149 accept -170.0000 -20.0000 expect 4059707.8321 -3830282.4180 accept -170.0000 10.0000 expect 6210065.9010 -4208321.1110 accept -170.0000 40.0000 expect 8929858.8196 -4592610.8117 accept -170.0000 70.0000 expect -4757306.7162 11243170.7712 accept -121.0000 -80.0000 expect 9363.8168 -3012575.4761 accept -121.0000 -50.0000 expect 861573.2313 -5086159.8537 accept -121.0000 -20.0000 expect 2601135.1803 -6940740.0711 accept -121.0000 10.0000 expect 5016978.6482 -8304150.6170 accept -121.0000 40.0000 expect 8632125.8964 -9423801.4294 accept -121.0000 70.0000 expect -6555705.6060 10246990.6251 accept -72.0000 -80.0000 expect -551816.0501 -2880353.7707 accept -72.0000 -50.0000 expect -2313351.2791 -5115437.4974 accept -72.0000 -20.0000 expect -1486391.8298 -11562191.5568 accept -72.0000 10.0000 expect -10414594.4936 2712423.6966 accept -72.0000 40.0000 expect -9084246.6998 5766099.6436 accept -72.0000 70.0000 expect -6598697.0383 8193941.7590 accept -23.0000 -80.0000 expect -780311.9008 -2349988.7659 accept -23.0000 -50.0000 expect -3008092.3663 -1795023.1904 accept -23.0000 -20.0000 expect -4925434.4371 14366.0251 accept -23.0000 10.0000 expect -5706896.4172 2337607.2418 accept -23.0000 40.0000 expect -5776514.0258 4647657.5555 accept -23.0000 70.0000 expect -5300606.7236 7143600.3698 accept 26.0000 -80.0000 expect -524250.2015 -1871449.2525 accept 26.0000 -50.0000 expect -1461547.3198 -290174.5921 accept 26.0000 -20.0000 expect -2077751.7222 1349250.8096 accept 26.0000 10.0000 expect -2553361.5158 3054667.1747 accept 26.0000 40.0000 expect -3067668.6963 4947317.2297 accept 26.0000 70.0000 expect -3829081.3051 7195256.6513 accept 75.0000 -80.0000 expect -30320.7348 -1747777.5703 accept 75.0000 -50.0000 expect 283794.2879 -63915.9519 accept 75.0000 -20.0000 expect 570564.7027 1640770.3960 accept 75.0000 10.0000 expect 613441.1718 3718159.4411 accept 75.0000 40.0000 expect -339352.8544 6281442.7842 accept 75.0000 70.0000 expect -2680263.1124 8214231.7220 accept 124.0000 -80.0000 expect 391373.4223 -2010028.8376 accept 124.0000 -50.0000 expect 1778858.7692 -974740.5396 accept 124.0000 -20.0000 expect 3251942.8279 194105.3840 accept 124.0000 10.0000 expect 5502810.9250 1869559.2284 accept 124.0000 40.0000 expect 11560747.4458 1351438.2908 accept 124.0000 70.0000 expect -2631686.3455 9979887.6971 accept 173.0000 -80.0000 expect 497943.3567 -2503256.4284 accept 173.0000 -50.0000 expect 2305199.5165 -2711772.3441 accept 173.0000 -20.0000 expect 4178078.2257 -2771571.4407 accept 173.0000 10.0000 expect 6367897.0128 -2860121.0611 accept 173.0000 40.0000 expect 9145287.0568 -3248602.9252 accept 173.0000 70.0000 expect -4081581.4885 11169069.7425 ------------------------------------------------------------ # This gie part was got from ESRI computations # provided in the issue #1851 # It can be edited. ------------------------------------------------------------ operation +proj=spilhaus +k_0=1.4142135623730951 tolerance 0.9 m ------------------------------------- accept 14.47226253 -84.71287749 expect -546875 -3046875 accept 84.55256518 -37.93882855 expect 1171875 703125 accept -66.58783346 27.86168989 expect -13046875 6171875 accept 12.77715082 51.22645041 expect -5546875 7890625 accept 114.35091069 28.44647901 expect 10703125 10234375 accept -58.76182587 -12.11844904 expect -13046875 -703125 accept 141.57916998 16.05031911 expect 9765625 78125 accept -64.1956924 -30.60226899 expect -11796875 -10859375 accept -83.61985956 -31.09509756 expect -1796875 -11796875 accept -118.96768373 14.44661994 expect 7578125 -12265625 accept -145.850344 50.26449114 expect 14296875 -9296875 accept -116.22716741 44.95066182 expect 13515625 -14609375 accept -112.96622187 49.30990506 expect 15859375 -16484375 accept 114.98472216 29.97596772 expect 14453125 14453125 accept -112.21827126 50.16610427 expect -15546875 15703125 accept -64.99929833 -30.00238885 expect -15390625 -15546875 ------------------------------------------------------------ # Stable for default parameters ------------------------------------------------------------ operation +proj=spilhaus +rot=45 +k_0=1 +lat_0=-49.56371678 +lon_0=66.94970198 +azi=40.17823482 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 3733410.0118 -9320.8573 roundtrip 1 ------------------------------------------------------------ # Sentitive to input parameters ------------------------------------------------------------ operation +proj=spilhaus tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 3733410.0118 -9320.8573 roundtrip 1 ------------------------------------------------------------ operation +proj=spilhaus +lon_0=10.1 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 4343770.7991 -3701935.6242 roundtrip 1 ------------------------------------------------------------ operation +proj=spilhaus +lat_0=30.1 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 3637341.2895 -2571368.8666 roundtrip 1 ------------------------------------------------------------ operation +proj=spilhaus +azi=9.1 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 3061806.4542 -1678791.7428 roundtrip 1 ------------------------------------------------------------ operation +proj=spilhaus +rot=40.1 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 3720561.6630 309609.603620 roundtrip 1 ------------------------------------------------------------ operation +proj=spilhaus +k_0=0.9 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 3360069.0106 -8388.7716 roundtrip 1 ------------------------------------------------------------ # Sphere ------------------------------------------------------------ operation +proj=spilhaus +R=6378137 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 3737644.5177 -7049.7883 roundtrip 1 ------------------------------------------------------------ # vs Adams WS2 ------------------------------------------------------------ operation +proj=adams_ws2 +R=6378137 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 8199312.0391 -1392652.9172 roundtrip 1 ------------------------------------------------------------ operation +proj=spilhaus +R=6378137 +lon_0=0 +lat_0=0 +azi=0 +rot=0 tolerance 1 mm ------------------------------------------------------------ accept 130.4 -16.2 expect 8199312.0391 -1392652.9172 roundtrip 1 proj-9.6.0/test/gie/tinshift.gie000664 001754 001755 00000003277 14764566077 016473 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- =============================================================================== Test +proj=tinshift =============================================================================== # Missing +file operation +proj=tinshift expect failure errno invalid_op_missing_arg # +file doesn't point to an existing file operation +proj=tinshift +file=i_do_not_exist expect failure errno invalid_op_file_not_found_or_invalid # Not a JSON file operation +proj=tinshift +file=proj.ini expect failure errno invalid_op_file_not_found_or_invalid # Tests on a file without explicit CRS operation +proj=tinshift +file=tests/tinshift_crs_implicit.json accept 2 49 expect 2.1 49.1 roundtrip 1 accept 0 0 expect failure direction inverse accept 0 0 expect failure # Tests on a file with explicit CRS operation +proj=tinshift +file=tests/tinshift_simplified_kkj_etrs.json tolerance 0.1 mm # Verified with https://kartta.paikkatietoikkuna.fi/?lang=en with EPSG:2393 to EPSG:3067 accept 3210000.0000 6700000.0000 expect 209948.3217 6697187.0009 roundtrip 1 operation +proj=tinshift +file=tests/tinshift_simplified_n60_n2000.json tolerance 0.1 mm accept 3210000.0000 6700000.0000 10.0 expect 3210000.0000 6700000.0000 10.2886 roundtrip 1 # Test fallback strategy nearest_side operation +proj=tinshift +file=tests/tinshift_fallback_nearest_side.json accept 2 3 expect 4 6 roundtrip 1 # Test fallback strategy nearest_centroid operation +proj=tinshift +file=tests/tinshift_fallback_nearest_centroid.json accept 3 0 expect 3 0 roundtrip 1 proj-9.6.0/test/gie/unitconvert.gie000664 001754 001755 00000003336 14764566077 017217 0ustar00e012349e012349000000 000000 ------------------------------------------------------------------------------- Tests for the unitconvert operation ------------------------------------------------------------------------------- operation proj=unitconvert xy_in=m xy_out=dm z_in=cm z_out=mm tolerance 0.1 accept 55.25 23.23 45.5 expect 552.5 232.3 455.0 operation proj=unitconvert +xy_in=m +xy_out=m +z_in=m +z_out=m tolerance 0.1 accept 12.3 45.6 7.89 expect 12.3 45.6 7.89 operation proj=unitconvert xy_in=dm xy_out=dm tolerance 0.1 accept 1 1 1 1 expect 1 1 1 1 operation proj=unitconvert xy_in=2.0 xy_out=4.0 tolerance 0.1 accept 1 1 1 1 expect 0.5 0.5 1 1 operation proj=unitconvert xy_in=deg xy_out=rad tolerance 0.0000001 accept 1 1 1 1 expect 1 1 1 1 # gie does a rad->deg conversion behind the scenes operation proj=unitconvert xy_in=grad xy_out=deg tolerance 0.000000000001 accept 50 50 1 1 expect 45 45 1 1 operation proj=unitconvert xy_in=m xy_out=rad accept 1 1 1 1 expect failure operation proj=unitconvert z_in=rad z_out=m accept 1 1 1 1 expect failure operation proj=unitconvert xy_in=0 expect failure operation proj=unitconvert xy_out=0 expect failure operation proj=unitconvert xy_in=1e400 expect failure operation proj=unitconvert xy_out=1e400 expect failure operation proj=unitconvert z_in=0 expect failure operation proj=unitconvert z_out=0 expect failure operation proj=unitconvert z_in=1e400 expect failure operation proj=unitconvert z_out=1e400 expect failure proj-9.6.0/test/gigs/000775 001754 001755 00000000000 14764566152 014323 5ustar00e012349e012349000000 000000 proj-9.6.0/test/gigs/5101.1-jhs.gie000664 001754 001755 00000030133 14764566077 016326 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5101 (part 1), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4326 +inv \ +step +proj=etmerc +lat_0=49 +lon_0=-2 +k_0=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=WGS84 +units=m +no_def -------------------------------------------------------------------------------- tolerance 0.03 m accept 3 80 expect 496813.178 3358297.326 tolerance 0.03 m accept 2.9999999 60 expect 678711.584 1134498.83 tolerance 0.03 m accept 3 49 expect 765648.501 -87944.74 tolerance 0.03 m accept 3.0000001 40 expect 826893.845 -1087710.121 tolerance 0.03 m accept 3 20 expect 923539.353 -3308151.625 tolerance 0.03 m accept 3 0 expect 957087.829 -5527462.686 tolerance 0.03 m accept 3 -20 expect 923539.353 -7746773.748 tolerance 0.03 m accept 3 -40 expect 826893.845 -9967215.251 tolerance 0.03 m accept 3 -60 expect 678711.584 -12189424.202 tolerance 0.03 m accept 3 -80 expect 496813.178 -14413222.698 tolerance 0.03 m accept -2 80 expect 400000 3354134.429 tolerance 0.03 m accept -2 60 expect 400000 1123956.966 tolerance 0.03 m accept -2 49 expect 400000 -100000 tolerance 0.03 m accept -2 40 expect 400000 -1099699.834 tolerance 0.03 m accept -2 20 expect 400000 -3315978.565 tolerance 0.03 m accept -2 0 expect 400000 -5527462.686 tolerance 0.03 m accept -2 -20 expect 400000 -7738946.807 tolerance 0.03 m accept -2 -40 expect 400000 -9955225.538 tolerance 0.03 m accept -2 -60 expect 400000 -12178882.338 tolerance 0.03 m accept -2 -80 expect 400000 -14409059.801 tolerance 0.03 m accept -5 80 expect 341867.711 3355633.571 tolerance 0.03 m accept -5 60 expect 232704.966 1127751.264 tolerance 0.03 m accept -5 49 expect 180586.02 -95662.911 tolerance 0.03 m accept -5 40 expect 143900.026 -1095387.991 tolerance 0.03 m accept -5 20 expect 86073.28 -3313165.843 tolerance 0.03 m accept -5 0 expect 66021.018 -5527462.686 tolerance 0.03 m accept -5 -20 expect 86073.28 -7741759.529 tolerance 0.03 m accept -5 -40 expect 143900.026 -9959537.381 tolerance 0.03 m accept -5 -60 expect 232704.966 -12182676.637 tolerance 0.03 m accept -5 -80 expect 341867.711 -14410558.943 tolerance 0.03 m accept -7.5559037 49.7661327 expect 0 0 tolerance 0.03 m accept -5 0 expect 66021.018 -5527462.686 tolerance 0.03 m accept -4 0 expect 177404.277 -5527462.686 tolerance 0.03 m accept -3 0 expect 288719.208 -5527462.686 tolerance 0.03 m accept -2 0 expect 400000.0 -5527462.686 tolerance 0.03 m accept -1 0 expect 511280.792 -5527462.686 tolerance 0.03 m accept 0 0 expect 622595.723 -5527462.686 tolerance 0.03 m accept 1 0 expect 733978.982 -5527462.686 tolerance 0.03 m accept 2 0 expect 845464.865 -5527462.686 tolerance 0.03 m accept 3 0 expect 957087.829 -5527462.686 tolerance 0.03 m accept 4 0 expect 1068882.539 -5527462.686 tolerance 0.03 m accept 5 0 expect 1180883.933 -5527462.686 tolerance 0.03 m accept 6 0 expect 1293127.266 -5527462.686 tolerance 0.03 m accept 7 0 expect 1405648.179 -5527462.686 tolerance 0.03 m accept 8 0 expect 1518482.747 -5527462.686 tolerance 0.03 m accept -5 60 expect 232704.966 1127751.264 tolerance 0.03 m accept -4 60 expect 288455.816 1125643.213 tolerance 0.03 m accept -3 60 expect 344223.662 1124378.512 tolerance 0.03 m accept -2 60 expect 400000 1123956.966 tolerance 0.03 m accept -1 60 expect 455776.338 1124378.512 tolerance 0.03 m accept 0 60 expect 511544.184 1125643.213 tolerance 0.03 m accept 1 60 expect 567295.034 1127751.264 tolerance 0.03 m accept 2 60 expect 623020.357 1130702.987 tolerance 0.03 m accept 3 60 expect 678711.584 1134498.83 tolerance 0.03 m accept 4.0 60.0 expect 734360.093 1139139.367 tolerance 0.03 m accept 5.0 60.0 expect 789957.197 1144625.296 tolerance 0.03 m accept 6.0 60.0 expect 845494.132 1150957.434 tolerance 0.03 m accept 7.0 60.0 expect 900962.042 1158136.713 tolerance 0.03 m accept 8.0 60.0 expect 956351.967 1166164.18 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +proj=etmerc +lat_0=49 +lon_0=-2 +k_0=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=WGS84 +units=m +no_def +inv \ +step +init=epsg:4326 -------------------------------------------------------------------------------- tolerance 0.03 m accept 496813.178 3358297.326 expect 3 80 tolerance 0.03 m accept 678711.584 1134498.83 expect 2.9999999 60 tolerance 0.03 m accept 765648.501 -87944.74 expect 3 49 tolerance 0.03 m accept 826893.845 -1087710.121 expect 3.0000001 40 tolerance 0.03 m accept 923539.353 -3308151.625 expect 3 20 tolerance 0.03 m accept 957087.829 -5527462.686 expect 3 0 tolerance 0.03 m accept 923539.353 -7746773.748 expect 3 -20 tolerance 0.03 m accept 826893.845 -9967215.251 expect 3 -40 tolerance 0.03 m accept 678711.584 -12189424.202 expect 3 -60 tolerance 0.03 m accept 496813.178 -14413222.698 expect 3 -80 tolerance 0.03 m accept 400000 3354134.429 expect -2 80 tolerance 0.03 m accept 400000 1123956.966 expect -2 60 tolerance 0.03 m accept 400000 -100000 expect -2 49 tolerance 0.03 m accept 400000 -1099699.834 expect -2 40 tolerance 0.03 m accept 400000 -3315978.565 expect -2 20 tolerance 0.03 m accept 400000 -5527462.686 expect -2 0 tolerance 0.03 m accept 400000 -7738946.807 expect -2 -20 tolerance 0.03 m accept 400000 -9955225.538 expect -2 -40 tolerance 0.03 m accept 400000 -12178882.338 expect -2 -60 tolerance 0.03 m accept 400000 -14409059.801 expect -2 -80 tolerance 0.03 m accept 341867.711 3355633.571 expect -5 80 tolerance 0.03 m accept 232704.966 1127751.264 expect -5 60 tolerance 0.03 m accept 180586.02 -95662.911 expect -5 49 tolerance 0.03 m accept 143900.026 -1095387.991 expect -5 40 tolerance 0.03 m accept 86073.28 -3313165.843 expect -5 20 tolerance 0.03 m accept 66021.018 -5527462.686 expect -5 0 tolerance 0.03 m accept 86073.28 -7741759.529 expect -5 -20 tolerance 0.03 m accept 143900.026 -9959537.381 expect -5 -40 tolerance 0.03 m accept 232704.966 -12182676.637 expect -5 -60 tolerance 0.03 m accept 341867.711 -14410558.943 expect -5 -80 tolerance 0.03 m accept 0 0 expect -7.5559037 49.7661327 tolerance 0.03 m accept 66021.018 -5527462.686 expect -5 0 tolerance 0.03 m accept 177404.277 -5527462.686 expect -4 0 tolerance 0.03 m accept 288719.208 -5527462.686 expect -3 0 tolerance 0.03 m accept 400000.0 -5527462.686 expect -2 0 tolerance 0.03 m accept 511280.792 -5527462.686 expect -1 0 tolerance 0.03 m accept 622595.723 -5527462.686 expect 0 0 tolerance 0.03 m accept 733978.982 -5527462.686 expect 1 0 tolerance 0.03 m accept 845464.865 -5527462.686 expect 2 0 tolerance 0.03 m accept 957087.829 -5527462.686 expect 3 0 tolerance 0.03 m accept 1068882.539 -5527462.686 expect 4 0 tolerance 0.03 m accept 1180883.933 -5527462.686 expect 5 0 tolerance 0.03 m accept 1293127.266 -5527462.686 expect 6 0 tolerance 0.03 m accept 1405648.179 -5527462.686 expect 7 0 tolerance 0.03 m accept 1518482.747 -5527462.686 expect 8 0 tolerance 0.03 m accept 232704.966 1127751.264 expect -5 60 tolerance 0.03 m accept 288455.816 1125643.213 expect -4 60 tolerance 0.03 m accept 344223.662 1124378.512 expect -3 60 tolerance 0.03 m accept 400000 1123956.966 expect -2 60 tolerance 0.03 m accept 455776.338 1124378.512 expect -1 60 tolerance 0.03 m accept 511544.184 1125643.213 expect 0 60 tolerance 0.03 m accept 567295.034 1127751.264 expect 1 60 tolerance 0.03 m accept 623020.357 1130702.987 expect 2 60 tolerance 0.03 m accept 678711.584 1134498.83 expect 3 60 tolerance 0.03 m accept 734360.093 1139139.367 expect 4.0 60.0 tolerance 0.03 m accept 789957.197 1144625.296 expect 5.0 60.0 tolerance 0.03 m accept 845494.132 1150957.434 expect 6.0 60.0 tolerance 0.03 m accept 900962.042 1158136.713 expect 7.0 60.0 tolerance 0.03 m accept 956351.967 1166164.18 expect 8.0 60.0 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4326 +inv \ +step +proj=etmerc +lat_0=49 +lon_0=-2 +k_0=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=WGS84 +units=m +no_def -------------------------------------------------------------------------------- tolerance 0.006 m accept 3 80 roundtrip 1000 tolerance 0.006 m accept 2.9999999 60 roundtrip 1000 tolerance 0.006 m accept 3 49 roundtrip 1000 tolerance 0.006 m accept 3.0000001 40 roundtrip 1000 tolerance 0.006 m accept 3 20 roundtrip 1000 tolerance 0.006 m accept 3 0 roundtrip 1000 tolerance 0.006 m accept 3 -20 roundtrip 1000 tolerance 0.006 m accept 3 -40 roundtrip 1000 tolerance 0.006 m accept 3 -60 roundtrip 1000 tolerance 0.006 m accept 3 -80 roundtrip 1000 tolerance 0.006 m accept -2 80 roundtrip 1000 tolerance 0.006 m accept -2 60 roundtrip 1000 tolerance 0.006 m accept -2 49 roundtrip 1000 tolerance 0.006 m accept -2 40 roundtrip 1000 tolerance 0.006 m accept -2 20 roundtrip 1000 tolerance 0.006 m accept -2 0 roundtrip 1000 tolerance 0.006 m accept -2 -20 roundtrip 1000 tolerance 0.006 m accept -2 -40 roundtrip 1000 tolerance 0.006 m accept -2 -60 roundtrip 1000 tolerance 0.006 m accept -2 -80 roundtrip 1000 tolerance 0.006 m accept -5 80 roundtrip 1000 tolerance 0.006 m accept -5 60 roundtrip 1000 tolerance 0.006 m accept -5 49 roundtrip 1000 tolerance 0.006 m accept -5 40 roundtrip 1000 tolerance 0.006 m accept -5 20 roundtrip 1000 tolerance 0.006 m accept -5 0 roundtrip 1000 tolerance 0.006 m accept -5 -20 roundtrip 1000 tolerance 0.006 m accept -5 -40 roundtrip 1000 tolerance 0.006 m accept -5 -60 roundtrip 1000 tolerance 0.006 m accept -5 -80 roundtrip 1000 tolerance 0.006 m accept -7.5559037 49.7661327 roundtrip 1000 tolerance 0.006 m accept -5 0 roundtrip 1000 tolerance 0.006 m accept -4 0 roundtrip 1000 tolerance 0.006 m accept -3 0 roundtrip 1000 tolerance 0.006 m accept -2 0 roundtrip 1000 tolerance 0.006 m accept -1 0 roundtrip 1000 tolerance 0.006 m accept 0 0 roundtrip 1000 tolerance 0.006 m accept 1 0 roundtrip 1000 tolerance 0.006 m accept 2 0 roundtrip 1000 tolerance 0.006 m accept 3 0 roundtrip 1000 tolerance 0.006 m accept 4 0 roundtrip 1000 tolerance 0.006 m accept 5 0 roundtrip 1000 tolerance 0.006 m accept 6 0 roundtrip 1000 tolerance 0.006 m accept 7 0 roundtrip 1000 tolerance 0.006 m accept 8 0 roundtrip 1000 tolerance 0.006 m accept -5 60 roundtrip 1000 tolerance 0.006 m accept -4 60 roundtrip 1000 tolerance 0.006 m accept -3 60 roundtrip 1000 tolerance 0.006 m accept -2 60 roundtrip 1000 tolerance 0.006 m accept -1 60 roundtrip 1000 tolerance 0.006 m accept 0 60 roundtrip 1000 tolerance 0.006 m accept 1 60 roundtrip 1000 tolerance 0.006 m accept 2 60 roundtrip 1000 tolerance 0.006 m accept 3 60 roundtrip 1000 tolerance 0.006 m accept 4.0 60.0 roundtrip 1000 tolerance 0.006 m accept 5.0 60.0 roundtrip 1000 tolerance 0.006 m accept 6.0 60.0 roundtrip 1000 tolerance 0.006 m accept 7.0 60.0 roundtrip 1000 tolerance 0.006 m accept 8.0 60.0 roundtrip 1000 proj-9.6.0/test/gigs/5101.2-jhs.gie000664 001754 001755 00000012767 14764566077 016344 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5101 (part 2), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4326 +inv \ +step +init=epsg:32631 -------------------------------------------------------------------------------- tolerance 0.03 m accept -2.0 80.0 expect 403186.945 8885748.708 tolerance 0.03 m accept -2.0 60.0 expect 221288.77 6661953.041 tolerance 0.03 m accept -2.0 40.0 expect 73106.698 4439746.917 tolerance 0.03 m accept -2.0 20.0 expect -23538.687 2219308.238 tolerance 0.03 m accept -2.0 0.0 expect -57087.12 0.0 tolerance 0.03 m accept -2.0 -20.0 expect -23538.687 -2219308.238 tolerance 0.03 m accept -2.0 -40.0 expect 73106.698 -4439746.917 tolerance 0.03 m accept -2.0 -60.0 expect 221288.77 -6661953.041 tolerance 0.03 m accept -2.0 -80.0 expect 403186.945 -8885748.708 tolerance 0.03 m accept -5.0 60.0 expect 54506.435 6678411.623 tolerance 0.03 m accept -4.0 60.0 expect 110043.299 6672079.494 tolerance 0.03 m accept -3.0 60.0 expect 165640.332 6666593.572 tolerance 0.03 m accept -2.0 60.0 expect 221288.77 6661953.041 tolerance 0.03 m accept -1.0 60.0 expect 276979.926 6658157.202 tolerance 0.03 m accept 0.0 60.0 expect 332705.179 6655205.484 tolerance 0.03 m accept 1.0 60.0 expect 388455.958 6653097.435 tolerance 0.03 m accept 2.0 60.0 expect 444223.733 6651832.735 tolerance 0.03 m accept 3.0 60.0 expect 500000.0 6651411.19 tolerance 0.03 m accept 4.0 60.0 expect 555776.267 6651832.735 tolerance 0.03 m accept 5.0 60.0 expect 611544.042 6653097.435 tolerance 0.03 m accept 6.0 60.0 expect 667294.821 6655205.484 tolerance 0.03 m accept 7.0 60.0 expect 723020.074 6658157.202 tolerance 0.03 m accept 8.0 60.0 expect 778711.23 6661953.041 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:32631 +inv \ +step +init=epsg:4326 -------------------------------------------------------------------------------- tolerance 0.03 m accept 403186.945 8885748.708 expect -2.0 80.0 tolerance 0.03 m accept 221288.77 6661953.041 expect -2.0 60.0 tolerance 0.03 m accept 73106.698 4439746.917 expect -2.0 40.0 tolerance 0.03 m accept -23538.687 2219308.238 expect -2.0 20.0 tolerance 0.03 m accept -57087.12 0.0 expect -2.0 0.0 tolerance 0.03 m accept -23538.687 -2219308.238 expect -2.0 -20.0 tolerance 0.03 m accept 73106.698 -4439746.917 expect -2.0 -40.0 tolerance 0.03 m accept 221288.77 -6661953.041 expect -2.0 -60.0 tolerance 0.03 m accept 403186.945 -8885748.708 expect -2.0 -80.0 tolerance 0.03 m accept 54506.435 6678411.623 expect -5.0 60.0 tolerance 0.03 m accept 110043.299 6672079.494 expect -4.0 60.0 tolerance 0.03 m accept 165640.332 6666593.572 expect -3.0 60.0 tolerance 0.03 m accept 221288.77 6661953.041 expect -2.0 60.0 tolerance 0.03 m accept 276979.926 6658157.202 expect -1.0 60.0 tolerance 0.03 m accept 332705.179 6655205.484 expect 0.0 60.0 tolerance 0.03 m accept 388455.958 6653097.435 expect 1.0 60.0 tolerance 0.03 m accept 444223.733 6651832.735 expect 2.0 60.0 tolerance 0.03 m accept 500000.0 6651411.19 expect 3.0 60.0 tolerance 0.03 m accept 555776.267 6651832.735 expect 4.0 60.0 tolerance 0.03 m accept 611544.042 6653097.435 expect 5.0 60.0 tolerance 0.03 m accept 667294.821 6655205.484 expect 6.0 60.0 tolerance 0.03 m accept 723020.074 6658157.202 expect 7.0 60.0 tolerance 0.03 m accept 778711.23 6661953.041 expect 8.0 60.0 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4326 +inv \ +step +init=epsg:32631 -------------------------------------------------------------------------------- tolerance 0.006 m accept -2.0 80.0 roundtrip 1000 tolerance 0.006 m accept -2.0 60.0 roundtrip 1000 tolerance 0.006 m accept -2.0 40.0 roundtrip 1000 tolerance 0.006 m accept -2.0 20.0 roundtrip 1000 tolerance 0.006 m accept -2.0 0.0 roundtrip 1000 tolerance 0.006 m accept -2.0 -20.0 roundtrip 1000 tolerance 0.006 m accept -2.0 -40.0 roundtrip 1000 tolerance 0.006 m accept -2.0 -60.0 roundtrip 1000 tolerance 0.006 m accept -2.0 -80.0 roundtrip 1000 tolerance 0.006 m accept -5.0 60.0 roundtrip 1000 tolerance 0.006 m accept -4.0 60.0 roundtrip 1000 tolerance 0.006 m accept -3.0 60.0 roundtrip 1000 tolerance 0.006 m accept -2.0 60.0 roundtrip 1000 tolerance 0.006 m accept -1.0 60.0 roundtrip 1000 tolerance 0.006 m accept 0.0 60.0 roundtrip 1000 tolerance 0.006 m accept 1.0 60.0 roundtrip 1000 tolerance 0.006 m accept 2.0 60.0 roundtrip 1000 tolerance 0.006 m accept 3.0 60.0 roundtrip 1000 tolerance 0.006 m accept 4.0 60.0 roundtrip 1000 tolerance 0.006 m accept 5.0 60.0 roundtrip 1000 tolerance 0.006 m accept 6.0 60.0 roundtrip 1000 tolerance 0.006 m accept 7.0 60.0 roundtrip 1000 tolerance 0.006 m accept 8.0 60.0 roundtrip 1000 proj-9.6.0/test/gigs/5101.3-jhs.gie000664 001754 001755 00000012571 14764566077 016336 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5101 (part 3), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4283 +inv \ +step +init=epsg:28354 -------------------------------------------------------------------------------- tolerance 0.03 m accept 146 80 expect 596813.055 18885748.71 tolerance 0.03 m accept 146 60 expect 778711.23 16661953.04 tolerance 0.03 m accept 146 40 expect 926893.302 14439746.92 tolerance 0.03 m accept 146 20 expect 1023538.687 12219308.24 tolerance 0.03 m accept 146 0 expect 1057087.12 10000000.0 tolerance 0.03 m accept 146 -20 expect 1023538.687 7780691.762 tolerance 0.03 m accept 146 -40 expect 926893.302 5560253.083 tolerance 0.03 m accept 146 -60 expect 778711.23 3338046.96 tolerance 0.03 m accept 146 -80 expect 596813.055 1114251.292 tolerance 0.03 m accept 136 -60 expect 221288.77 3338046.96 tolerance 0.03 m accept 137 -60 expect 276979.926 3341842.798 tolerance 0.03 m accept 138 -60 expect 332705.179 3344794.516 tolerance 0.03 m accept 139 -60 expect 388455.958 3346902.565 tolerance 0.03 m accept 140 -60 expect 444223.733 3348167.265 tolerance 0.03 m accept 141 -60 expect 500000.0 3348588.81 tolerance 0.03 m accept 142 -60 expect 555776.267 3348167.265 tolerance 0.03 m accept 143 -60 expect 611544.042 3346902.565 tolerance 0.03 m accept 144 -60 expect 667294.821 3344794.516 tolerance 0.03 m accept 145 -60 expect 723020.074 3341842.798 tolerance 0.03 m accept 146 -60 expect 778711.23 3338046.96 tolerance 0.03 m accept 147 -60 expect 834359.668 3333406.428 tolerance 0.03 m accept 148 -60 expect 889956.701 3327920.506 tolerance 0.03 m accept 149 -60 expect 945493.565 3321588.377 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:28354 +inv \ +step +init=epsg:4283 -------------------------------------------------------------------------------- tolerance 0.03 m accept 596813.055 18885748.71 expect 146 80 tolerance 0.03 m accept 778711.23 16661953.04 expect 146 60 tolerance 0.03 m accept 926893.302 14439746.92 expect 146 40 tolerance 0.03 m accept 1023538.687 12219308.24 expect 146 20 tolerance 0.03 m accept 1057087.12 10000000.0 expect 146 0 tolerance 0.03 m accept 1023538.687 7780691.762 expect 146 -20 tolerance 0.03 m accept 926893.302 5560253.083 expect 146 -40 tolerance 0.03 m accept 778711.23 3338046.96 expect 146 -60 tolerance 0.03 m accept 596813.055 1114251.292 expect 146 -80 tolerance 0.03 m accept 221288.77 3338046.96 expect 136 -60 tolerance 0.03 m accept 276979.926 3341842.798 expect 137 -60 tolerance 0.03 m accept 332705.179 3344794.516 expect 138 -60 tolerance 0.03 m accept 388455.958 3346902.565 expect 139 -60 tolerance 0.03 m accept 444223.733 3348167.265 expect 140 -60 tolerance 0.03 m accept 500000.0 3348588.81 expect 141 -60 tolerance 0.03 m accept 555776.267 3348167.265 expect 142 -60 tolerance 0.03 m accept 611544.042 3346902.565 expect 143 -60 tolerance 0.03 m accept 667294.821 3344794.516 expect 144 -60 tolerance 0.03 m accept 723020.074 3341842.798 expect 145 -60 tolerance 0.03 m accept 778711.23 3338046.96 expect 146 -60 tolerance 0.03 m accept 834359.668 3333406.428 expect 147 -60 tolerance 0.03 m accept 889956.701 3327920.506 expect 148 -60 tolerance 0.03 m accept 945493.565 3321588.377 expect 149 -60 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4283 +inv \ +step +init=epsg:28354 -------------------------------------------------------------------------------- tolerance 0.006 m accept 146 80 roundtrip 1000 tolerance 0.006 m accept 146 60 roundtrip 1000 tolerance 0.006 m accept 146 40 roundtrip 1000 tolerance 0.006 m accept 146 20 roundtrip 1000 tolerance 0.006 m accept 146 0 roundtrip 1000 tolerance 0.006 m accept 146 -20 roundtrip 1000 tolerance 0.006 m accept 146 -40 roundtrip 1000 tolerance 0.006 m accept 146 -60 roundtrip 1000 tolerance 0.006 m accept 146 -80 roundtrip 1000 tolerance 0.006 m accept 136 -60 roundtrip 1000 tolerance 0.006 m accept 137 -60 roundtrip 1000 tolerance 0.006 m accept 138 -60 roundtrip 1000 tolerance 0.006 m accept 139 -60 roundtrip 1000 tolerance 0.006 m accept 140 -60 roundtrip 1000 tolerance 0.006 m accept 141 -60 roundtrip 1000 tolerance 0.006 m accept 142 -60 roundtrip 1000 tolerance 0.006 m accept 143 -60 roundtrip 1000 tolerance 0.006 m accept 144 -60 roundtrip 1000 tolerance 0.006 m accept 145 -60 roundtrip 1000 tolerance 0.006 m accept 146 -60 roundtrip 1000 tolerance 0.006 m accept 147 -60 roundtrip 1000 tolerance 0.006 m accept 148 -60 roundtrip 1000 tolerance 0.006 m accept 149 -60 roundtrip 1000 proj-9.6.0/test/gigs/5101.4-jhs-etmerc.gie000664 001754 001755 00000015216 14764566077 017613 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5101 (part 4), Transverse Mercator, v2-0_2011-06-28, recommended JHS formula -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4190 +inv \ +step +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 -------------------------------------------------------------------------------- tolerance 0.03 m accept -63.9993433 80.0002644 expect 5422500.0 18889800.0 tolerance 0.03 m accept -63.9998472 60.0001191 expect 5276900.0 16662800.0 tolerance 0.03 m accept -63.9997361 40.0003081 expect 5158399.999 14439199.99 tolerance 0.03 m accept -64.0004605 19.9996448 expect 5081100.0 12219300.0 tolerance 0.03 m accept -63.9996186 0.0003092 expect 5054400.005 10002000.0 tolerance 0.03 m accept -64.0004675 -19.9999283 expect 5081100.017 7784599.993 tolerance 0.03 m accept -63.9997001 -39.9996924 expect 5158400.0 5564800.0 tolerance 0.03 m accept -63.9998814 -60.0004008 expect 5276899.994 3341099.995 tolerance 0.03 m accept -63.9991006 -79.9996521 expect 5422500.0 1114200.0 tolerance 0.03 m accept -70.0002089 -40.000215 expect 4645300.113 5524200.123 tolerance 0.03 m accept -69.0001441 -40.0002935 expect 4730900.0 5533400.0 tolerance 0.03 m accept -67.9995333 -39.9996136 expect 4816500.043 5541700.028 tolerance 0.03 m accept -66.9998073 -39.9999313 expect 4902000.0 5548900.0 tolerance 0.03 m accept -65.9996522 -39.9995894 expect 4987500.009 5555200.001 tolerance 0.03 m accept -64.9992796 -40.000411 expect 5073000.0 5560400.0 tolerance 0.03 m accept -63.9997 -39.9996925 expect 5158400.01 5564799.987 tolerance 0.03 m accept -62.9999842 -40.0002087 expect 5243800.0 5568100.0 tolerance 0.03 m accept -62.0000778 -40.0001803 expect 5329199.995 5570500.009 tolerance 0.03 m accept -61.0000574 -39.9996182 expect 5414600.0 5572000.0 tolerance 0.03 m accept -60.0 -40.0003306 expect 5500000.0 5572399.996 tolerance 0.03 m accept -58.9999426 -39.9996182 expect 5585400.0 5572000.0 tolerance 0.03 m accept -57.9999222 -40.0001803 expect 5670800.005 5570500.009 tolerance 0.03 m accept -57.0000158 -40.0002087 expect 5756200.0 5568100.0 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +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 +inv \ +step +init=epsg:4190 -------------------------------------------------------------------------------- tolerance 0.03 m accept 5422500.0 18889800.0 expect -63.9993433 80.0002644 tolerance 0.03 m accept 5276900.0 16662800.0 expect -63.9998472 60.0001191 tolerance 0.03 m accept 5158399.999 14439199.99 expect -63.9997361 40.0003081 tolerance 0.03 m accept 5081100.0 12219300.0 expect -64.0004605 19.9996448 tolerance 0.03 m accept 5054400.005 10002000.0 expect -63.9996186 0.0003092 tolerance 0.03 m accept 5081100.017 7784599.993 expect -64.0004675 -19.9999283 tolerance 0.03 m accept 5158400.0 5564800.0 expect -63.9997001 -39.9996924 tolerance 0.03 m accept 5276899.994 3341099.995 expect -63.9998814 -60.0004008 tolerance 0.03 m accept 5422500.0 1114200.0 expect -63.9991006 -79.9996521 tolerance 0.03 m accept 4645300.113 5524200.123 expect -70.0002089 -40.000215 tolerance 0.03 m accept 4730900.0 5533400.0 expect -69.0001441 -40.0002935 tolerance 0.03 m accept 4816500.043 5541700.028 expect -67.9995333 -39.9996136 tolerance 0.03 m accept 4902000.0 5548900.0 expect -66.9998073 -39.9999313 tolerance 0.03 m accept 4987500.009 5555200.001 expect -65.9996522 -39.9995894 tolerance 0.03 m accept 5073000.0 5560400.0 expect -64.9992796 -40.000411 tolerance 0.03 m accept 5158400.01 5564799.987 expect -63.9997 -39.9996925 tolerance 0.03 m accept 5243800.0 5568100.0 expect -62.9999842 -40.0002087 tolerance 0.03 m accept 5329199.995 5570500.009 expect -62.0000778 -40.0001803 tolerance 0.03 m accept 5414600.0 5572000.0 expect -61.0000574 -39.9996182 tolerance 0.03 m accept 5500000.0 5572399.996 expect -60.0 -40.0003306 tolerance 0.03 m accept 5585400.0 5572000.0 expect -58.9999426 -39.9996182 tolerance 0.03 m accept 5670800.005 5570500.009 expect -57.9999222 -40.0001803 tolerance 0.03 m accept 5756200.0 5568100.0 expect -57.0000158 -40.0002087 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4190 +inv \ +step +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 -------------------------------------------------------------------------------- tolerance 0.006 m accept -63.9993433 80.0002644 roundtrip 1000 tolerance 0.006 m accept -63.9998472 60.0001191 roundtrip 1000 tolerance 0.006 m accept -63.9997361 40.0003081 roundtrip 1000 tolerance 0.006 m accept -64.0004605 19.9996448 roundtrip 1000 tolerance 0.006 m accept -63.9996186 0.0003092 roundtrip 1000 tolerance 0.006 m accept -64.0004675 -19.9999283 roundtrip 1000 tolerance 0.006 m accept -63.9997001 -39.9996924 roundtrip 1000 tolerance 0.006 m accept -63.9998814 -60.0004008 roundtrip 1000 tolerance 0.006 m accept -63.9991006 -79.9996521 roundtrip 1000 tolerance 0.006 m accept -70.0002089 -40.000215 roundtrip 1000 tolerance 0.006 m accept -69.0001441 -40.0002935 roundtrip 1000 tolerance 0.006 m accept -67.9995333 -39.9996136 roundtrip 1000 tolerance 0.006 m accept -66.9998073 -39.9999313 roundtrip 1000 tolerance 0.006 m accept -65.9996522 -39.9995894 roundtrip 1000 tolerance 0.006 m accept -64.9992796 -40.000411 roundtrip 1000 tolerance 0.006 m accept -63.9997 -39.9996925 roundtrip 1000 tolerance 0.006 m accept -62.9999842 -40.0002087 roundtrip 1000 tolerance 0.006 m accept -62.0000778 -40.0001803 roundtrip 1000 tolerance 0.006 m accept -61.0000574 -39.9996182 roundtrip 1000 tolerance 0.006 m accept -60.0 -40.0003306 roundtrip 1000 tolerance 0.006 m accept -58.9999426 -39.9996182 roundtrip 1000 tolerance 0.006 m accept -57.9999222 -40.0001803 roundtrip 1000 tolerance 0.006 m accept -57.0000158 -40.0002087 roundtrip 1000 proj-9.6.0/test/gigs/5102.1.gie000664 001754 001755 00000010726 14764566077 015553 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5102, Lambert Conic Conformal (1SP), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4230 +inv \ +step +init=epsg:2192 -------------------------------------------------------------------------------- tolerance 0.03 m accept 5 58 expect 760722.92 3457368.68 tolerance 0.03 m accept 5 57 expect 764566.844 3343948.93 tolerance 0.03 m accept 5 56 expect 768396.683 3230944.812 tolerance 0.03 m accept 5 55 expect 772213.973 3118310.947 tolerance 0.03 m accept 5 54 expect 776020.189 3006003.839 tolerance 0.03 m accept 5 53 expect 779816.748 2893981.68 tolerance 0.03 m accept 4 51 expect 717027.292 2668695.784 tolerance 0.03 m accept 4 50 expect 719385.249 2557252.841 tolerance 0.03 m accept 4 49 expect 721740.43 2445941.161 tolerance 0.03 m accept 4 46.8 expect 726915.752 2201342.519 tolerance 0.03 m accept 3 53 expect 644764.905 2891124.195 tolerance 0.03 m accept 4 53 expect 712299.916 2892123.369 tolerance 0.03 m accept 5 53 expect 779816.748 2893981.68 tolerance 0.03 m accept 6 53 expect 847304.473 2896698.827 tolerance 0.03 m accept 7 53 expect 914752.168 2900274.371 tolerance 0.03 m accept 8 53 expect 982148.913 2904707.734 tolerance 0.03 m accept 9 53 expect 1049483.8 2909998.196 tolerance 0.03 m accept 10 53 expect 1116745.929 2916144.902 tolerance 0.03 m accept 11 53 expect 1183924.412 2923146.858 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:2192 +inv \ +step +init=epsg:4230 -------------------------------------------------------------------------------- tolerance 0.03 m accept 760722.92 3457368.68 expect 5 58 tolerance 0.03 m accept 764566.844 3343948.93 expect 5 57 tolerance 0.03 m accept 768396.683 3230944.812 expect 5 56 tolerance 0.03 m accept 772213.973 3118310.947 expect 5 55 tolerance 0.03 m accept 776020.189 3006003.839 expect 5 54 tolerance 0.03 m accept 779816.748 2893981.68 expect 5 53 tolerance 0.03 m accept 717027.292 2668695.784 expect 4 51 tolerance 0.03 m accept 719385.249 2557252.841 expect 4 50 tolerance 0.03 m accept 721740.43 2445941.161 expect 4 49 tolerance 0.03 m accept 726915.752 2201342.519 expect 4 46.8 tolerance 0.03 m accept 644764.905 2891124.195 expect 3 53 tolerance 0.03 m accept 712299.916 2892123.369 expect 4 53 tolerance 0.03 m accept 779816.748 2893981.68 expect 5 53 tolerance 0.03 m accept 847304.473 2896698.827 expect 6 53 tolerance 0.03 m accept 914752.168 2900274.371 expect 7 53 tolerance 0.03 m accept 982148.913 2904707.734 expect 8 53 tolerance 0.03 m accept 1049483.8 2909998.196 expect 9 53 tolerance 0.03 m accept 1116745.929 2916144.902 expect 10 53 tolerance 0.03 m accept 1183924.412 2923146.858 expect 11 53 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4230 +inv \ +step +init=epsg:2192 -------------------------------------------------------------------------------- tolerance 0.006 m accept 5 58 roundtrip 1000 tolerance 0.006 m accept 5 57 roundtrip 1000 tolerance 0.006 m accept 5 56 roundtrip 1000 tolerance 0.006 m accept 5 55 roundtrip 1000 tolerance 0.006 m accept 5 54 roundtrip 1000 tolerance 0.006 m accept 5 53 roundtrip 1000 tolerance 0.006 m accept 4 51 roundtrip 1000 tolerance 0.006 m accept 4 50 roundtrip 1000 tolerance 0.006 m accept 4 49 roundtrip 1000 tolerance 0.006 m accept 4 46.8 roundtrip 1000 tolerance 0.006 m accept 3 53 roundtrip 1000 tolerance 0.006 m accept 4 53 roundtrip 1000 tolerance 0.006 m accept 5 53 roundtrip 1000 tolerance 0.006 m accept 6 53 roundtrip 1000 tolerance 0.006 m accept 7 53 roundtrip 1000 tolerance 0.006 m accept 8 53 roundtrip 1000 tolerance 0.006 m accept 9 53 roundtrip 1000 tolerance 0.006 m accept 10 53 roundtrip 1000 tolerance 0.006 m accept 11 53 roundtrip 1000 proj-9.6.0/test/gigs/5102.2.gie000664 001754 001755 00000014522 14764566077 015552 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5102 (part 2), Lambert Conic Conformal (1SP), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- # We need to add this grad->rad step as +init=epsg:4807 assumes # degrees (if front operation), or radians (if non-front), as this was the case # in PROJ < 6 era # Note: "cs2cs EPSG:4807 EPSG:27572" does the right job. operation +proj=pipeline \ +step +proj=unitconvert +xy_in=grad +xy_out=rad \ +step +init=epsg:4807 +inv \ +step +init=epsg:27572 -------------------------------------------------------------------------------- tolerance 0.03 m accept 2.9586342556 64.4444444444 expect 760724.023 3457334.864 tolerance 0.03 m accept 2.9586342556 63.3333333333 expect 764567.882 3343917.044 tolerance 0.03 m accept 2.9586342556 62.2222222222 expect 768397.648 3230915.06 tolerance 0.03 m accept 2.9586342556 61.1111111111 expect 772214.859 3118283.535 tolerance 0.03 m accept 2.9586342556 60 expect 776020.989 3005978.979 tolerance 0.03 m accept 2.9586342556 58.8888888889 expect 779817.454 2893959.584 tolerance 0.03 m accept 1.8475231444 56.6666666667 expect 717027.602 2668679.866 tolerance 0.03 m accept 1.8475231444 55.5555555556 expect 719385.487 2557240.347 tolerance 0.03 m accept 1.8475231444 54.4444444444 expect 721740.59 2445932.319 tolerance 0.03 m accept 1.8475231444 52 expect 726915.726 2201342.51839 tolerance 0.03 m accept 0.7364120333 58.8888888889 expect 644765.081 2891102.088 tolerance 0.03 m accept 1.8475231444 58.8888888889 expect 712300.356 2892101.266 tolerance 0.03 m accept 2.9586342556 58.8888888889 expect 779817.454 2893959.584 tolerance 0.03 m accept 4.0697453667 58.8888888889 expect 847305.444 2896676.742 tolerance 0.03 m accept 5.1808564778 58.8888888889 expect 914753.403 2900252.301 tolerance 0.03 m accept 6.2919675889 58.8888888889 expect 982150.413 2904685.68 tolerance 0.03 m accept 7.4030787 58.8888888889 expect 1049485.565 2909976.163 tolerance 0.03 m accept 8.5141898111 58.8888888889 expect 1116747.958 2916122.894 tolerance 0.03 m accept 9.6253009222 58.8888888889 expect 1183926.705 2923124.876 -------------------------------------------------------------------------------- # We need to add this rad->grad step as +init=epsg:4807 assumes # degrees (if last operation), or radians (if non-last), as this was the case # in PROJ < 6 era operation +proj=pipeline \ +step +init=epsg:27572 +inv \ +step +init=epsg:4807 \ +step +proj=unitconvert +xy_in=rad +xy_out=grad -------------------------------------------------------------------------------- tolerance 0.03 m accept 760724.023 3457334.864 expect 2.9586342556 64.4444444444 tolerance 0.03 m accept 764567.882 3343917.044 expect 2.9586342556 63.3333333333 tolerance 0.03 m accept 768397.648 3230915.06 expect 2.9586342556 62.2222222222 tolerance 0.03 m accept 772214.859 3118283.535 expect 2.9586342556 61.1111111111 tolerance 0.03 m accept 776020.989 3005978.979 expect 2.9586342556 60 tolerance 0.03 m accept 779817.454 2893959.584 expect 2.9586342556 58.8888888889 tolerance 0.03 m accept 717027.602 2668679.866 expect 1.8475231444 56.6666666667 tolerance 0.03 m accept 719385.487 2557240.347 expect 1.8475231444 55.5555555556 tolerance 0.03 m accept 721740.59 2445932.319 expect 1.8475231444 54.4444444444 tolerance 0.03 m accept 726915.726 2201342.51839 expect 1.8475231444 52 tolerance 0.03 m accept 644765.081 2891102.088 expect 0.7364120333 58.8888888889 tolerance 0.03 m accept 712300.356 2892101.266 expect 1.8475231444 58.8888888889 tolerance 0.03 m accept 779817.454 2893959.584 expect 2.9586342556 58.8888888889 tolerance 0.03 m accept 847305.444 2896676.742 expect 4.0697453667 58.8888888889 tolerance 0.03 m accept 914753.403 2900252.301 expect 5.1808564778 58.8888888889 tolerance 0.03 m accept 982150.413 2904685.68 expect 6.2919675889 58.8888888889 tolerance 0.03 m accept 1049485.565 2909976.163 expect 7.4030787 58.8888888889 tolerance 0.03 m accept 1116747.958 2916122.894 expect 8.5141898111 58.8888888889 tolerance 0.03 m accept 1183926.705 2923124.876 expect 9.6253009222 58.8888888889 -------------------------------------------------------------------------------- # We need to add this grad->rad step as +init=epsg:4807 assumes # degrees (if front operation), or radians (if non-front), as this was the case # in PROJ < 6 era operation +proj=pipeline \ +step +proj=unitconvert +xy_in=grad +xy_out=rad \ +step +init=epsg:4807 +inv \ +step +init=epsg:27572 -------------------------------------------------------------------------------- tolerance 0.006 m accept 2.9586342556 64.4444444444 roundtrip 1000 tolerance 0.006 m accept 2.9586342556 63.3333333333 roundtrip 1000 tolerance 0.006 m accept 2.9586342556 62.2222222222 roundtrip 1000 tolerance 0.006 m accept 2.9586342556 61.1111111111 roundtrip 1000 tolerance 0.006 m accept 2.9586342556 60 roundtrip 1000 tolerance 0.006 m accept 2.9586342556 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 1.8475231444 56.6666666667 roundtrip 1000 tolerance 0.006 m accept 1.8475231444 55.5555555556 roundtrip 1000 tolerance 0.006 m accept 1.8475231444 54.4444444444 roundtrip 1000 tolerance 0.006 m accept 1.8475231444 52 roundtrip 1000 tolerance 0.006 m accept 0.7364120333 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 1.8475231444 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 2.9586342556 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 4.0697453667 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 5.1808564778 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 6.2919675889 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 7.4030787 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 8.5141898111 58.8888888889 roundtrip 1000 tolerance 0.006 m accept 9.6253009222 58.8888888889 roundtrip 1000 proj-9.6.0/test/gigs/5103.1.gie000664 001754 001755 00000007321 14764566077 015551 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5103 (part 1), Lambert Conic Conformal (2SP), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4313 +inv \ +step +init=epsg:31370 tolerance 30 mm -------------------------------------------------------------------------------- accept 5 58 expect 187742.7 969521.653 accept 5 57 expect 188698.877 857277.135 accept 5 56 expect 189652.853 745291.184 accept 5 55 expect 190604.967 633523.672 accept 5 54 expect 191555.55 521935.9 accept 5 53 expect 192504.921 410490.433 accept 5.3876389 52.1561606 expect 219843.841 316827.604 accept 4 51 expect 124202.936 187756.876 accept 4 50 expect 123652.406 76521.628 accept 4 49 expect 123101.889 -34711.068 accept 3.3137281 47.9752611 expect 71254.553 -148236.592 accept 3 53 expect 58108.966 411155.591 accept 4 53 expect 125304.704 410370.504 accept 5 53 expect 192504.921 410490.433 accept 6 53 expect 259697.429 411515.356 accept 7 53 expect 326870.04 413445.087 accept 8 53 expect 394010.571 416279.276 accept 9 53 expect 461106.844 420017.408 accept 10 53 expect 528146.69 424658.807 accept 11 53 expect 595117.95 430202.63 -------------------------------------------------------------------------------- operation proj=pipeline \ step init=epsg:31370 inv \ step init=epsg:4313 tolerance 30 mm -------------------------------------------------------------------------------- accept 187742.7 969521.653 expect 5 58 accept 188698.877 857277.135 expect 5 57 accept 189652.853 745291.184 expect 5 56 accept 190604.967 633523.672 expect 5 55 accept 191555.55 521935.9 expect 5 54 accept 192504.921 410490.433 expect 5 53 accept 219843.841 316827.604 expect 5.3876389 52.1561606 accept 124202.936 187756.876 expect 4 51 accept 123652.406 76521.628 expect 4 50 accept 123101.889 -34711.068 expect 4 49 accept 71254.553 -148236.592 expect 3.3137281 47.9752611 accept 58108.966 411155.591 expect 3 53 accept 125304.704 410370.504 expect 4 53 accept 192504.921 410490.433 expect 5 53 accept 259697.429 411515.356 expect 6 53 accept 326870.04 413445.087 expect 7 53 accept 394010.571 416279.276 expect 8 53 accept 461106.844 420017.408 expect 9 53 accept 528146.69 424658.807 expect 10 53 accept 595117.95 430202.63 expect 11 53 -------------------------------------------------------------------------------- operation +proj=pipeline towgs84=0,0,0 \ # turn off dual datum shift +step +init=epsg:4313 +inv \ +step +init=epsg:31370 tolerance 6 mm -------------------------------------------------------------------------------- accept 5 58 roundtrip 1000 accept 5 57 roundtrip 1000 accept 5 56 roundtrip 1000 accept 5 55 roundtrip 1000 accept 5 54 roundtrip 1000 accept 5 53 roundtrip 1000 accept 5.3876389 52.1561606 roundtrip 1000 accept 4 51 roundtrip 1000 accept 4 50 roundtrip 1000 accept 4 49 roundtrip 1000 accept 3.3137281 47.9752611 roundtrip 1000 accept 3 53 roundtrip 1000 accept 4 53 roundtrip 1000 accept 5 53 roundtrip 1000 accept 6 53 roundtrip 1000 accept 7 53 roundtrip 1000 accept 8 53 roundtrip 1000 accept 9 53 roundtrip 1000 accept 10 53 roundtrip 1000 accept 11 53 roundtrip 1000 proj-9.6.0/test/gigs/5103.2.gie000664 001754 001755 00000005651 14764566077 015556 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5103 (part 2), Lambert Conic Conformal (2SP), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4152 +inv \ +step +init=epsg:2921 -------------------------------------------------------------------------------- tolerance 0.03 m accept -110 49 expect 2003937.27 6452491.7 tolerance 0.03 m accept -110 47 expect 2016621.93 5717728.61 tolerance 0.03 m accept -110 45 expect 2029255.57 4985920.56 tolerance 0.03 m accept -110 43 expect 2041855.08 4256089.74 tolerance 0.03 m accept -110 41 expect 2054436.57 3527302.73 tolerance 0.03 m accept -110 41 expect 2054436.57 3527302.73 tolerance 0.03 m accept -108 41 expect 2606245.52 3543182.55 tolerance 0.03 m accept -106 41 expect 3157542.86 3571757.39 tolerance 0.03 m accept -104 41 expect 3708036.57 3613012.12 tolerance 0.03 m accept -102 41 expect 4257435.06 3666924.89 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:2921 +inv \ +step +init=epsg:4152 -------------------------------------------------------------------------------- tolerance 0.03 m accept 2003937.27 6452491.7 expect -110 49 tolerance 0.03 m accept 2016621.93 5717728.61 expect -110 47 tolerance 0.03 m accept 2029255.57 4985920.56 expect -110 45 tolerance 0.03 m accept 2041855.08 4256089.74 expect -110 43 tolerance 0.03 m accept 2054436.57 3527302.73 expect -110 41 tolerance 0.03 m accept 2054436.57 3527302.73 expect -110 41 tolerance 0.03 m accept 2606245.52 3543182.55 expect -108 41 tolerance 0.03 m accept 3157542.86 3571757.39 expect -106 41 tolerance 0.03 m accept 3708036.57 3613012.12 expect -104 41 tolerance 0.03 m accept 4257435.06 3666924.89 expect -102 41 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4152 +inv \ +step +init=epsg:2921 -------------------------------------------------------------------------------- tolerance 0.006 m accept -110 49 roundtrip 1000 tolerance 0.006 m accept -110 47 roundtrip 1000 tolerance 0.006 m accept -110 45 roundtrip 1000 tolerance 0.006 m accept -110 43 roundtrip 1000 tolerance 0.006 m accept -110 41 roundtrip 1000 tolerance 0.006 m accept -110 41 roundtrip 1000 tolerance 0.006 m accept -108 41 roundtrip 1000 tolerance 0.006 m accept -106 41 roundtrip 1000 tolerance 0.006 m accept -104 41 roundtrip 1000 tolerance 0.006 m accept -102 41 roundtrip 1000 proj-9.6.0/test/gigs/5103.3.gie000664 001754 001755 00000005641 14764566077 015556 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5103 (part 3), Lambert Conic Conformal (2SP), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4152 +inv \ +step +init=epsg:3568 -------------------------------------------------------------------------------- tolerance 0.03 m accept -110 49 expect 2003933.27 6452478.8 tolerance 0.03 m accept -110 47 expect 2016617.9 5717717.18 tolerance 0.03 m accept -110 45 expect 2029251.51 4985910.59 tolerance 0.03 m accept -110 43 expect 2041851.0 4256081.23 tolerance 0.03 m accept -110 41 expect 2054432.46 3527295.67 tolerance 0.03 m accept -110 41 expect 2054432.46 3527295.67 tolerance 0.03 m accept -108 41 expect 2606240.3 3543175.46 tolerance 0.03 m accept -106 41 expect 3157536.54 3571750.25 tolerance 0.03 m accept -104 41 expect 3708029.16 3613004.9 tolerance 0.03 m accept -102 41 expect 4257426.54 3666917.56 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:3568 +inv \ +step +init=epsg:4152 -------------------------------------------------------------------------------- tolerance 0.03 m accept 2003933.27 6452478.8 expect -110 49 tolerance 0.03 m accept 2016617.9 5717717.18 expect -110 47 tolerance 0.03 m accept 2029251.51 4985910.59 expect -110 45 tolerance 0.03 m accept 2041851.0 4256081.23 expect -110 43 tolerance 0.03 m accept 2054432.46 3527295.67 expect -110 41 tolerance 0.03 m accept 2054432.46 3527295.67 expect -110 41 tolerance 0.03 m accept 2606240.3 3543175.46 expect -108 41 tolerance 0.03 m accept 3157536.54 3571750.25 expect -106 41 tolerance 0.03 m accept 3708029.16 3613004.9 expect -104 41 tolerance 0.03 m accept 4257426.54 3666917.56 expect -102 41 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4152 +inv \ +step +init=epsg:3568 -------------------------------------------------------------------------------- tolerance 0.006 m accept -110 49 roundtrip 1000 tolerance 0.006 m accept -110 47 roundtrip 1000 tolerance 0.006 m accept -110 45 roundtrip 1000 tolerance 0.006 m accept -110 43 roundtrip 1000 tolerance 0.006 m accept -110 41 roundtrip 1000 tolerance 0.006 m accept -110 41 roundtrip 1000 tolerance 0.006 m accept -108 41 roundtrip 1000 tolerance 0.006 m accept -106 41 roundtrip 1000 tolerance 0.006 m accept -104 41 roundtrip 1000 tolerance 0.006 m accept -102 41 roundtrip 1000 proj-9.6.0/test/gigs/5104.gie000664 001754 001755 00000011211 14764566077 015404 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5104, Oblique stereographic, v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4289 +inv \ +step +init=epsg:28992 -------------------------------------------------------------------------------- tolerance 0.05 m accept 5 58 expect 132023.27 1114054.87 tolerance 0.05 m accept 5 57 expect 131405.466 1002468.081 tolerance 0.05 m accept 5 56 expect 130792.264 890981.281 tolerance 0.05 m accept 5 55 expect 130183.56 779577.7 tolerance 0.05 m accept 5 54 expect 129579.26 668240.58 tolerance 0.05 m accept 5 53 expect 128979.26 556953.19 tolerance 0.05 m accept 5.38763888889 52.1561605556 expect 155000 463000 tolerance 0.05 m accept 4 51 expect 57605.946 335312.662 tolerance 0.05 m accept 4 50 expect 55502.306 224086.514 tolerance 0.05 m accept 4.0 49.0 expect 53412.76 112842.73 tolerance 0.05 m accept 3.31372805556 47.9752611111 expect 0 0 tolerance 0.05 m accept 3 53 expect -5253.06 559535.55 tolerance 0.05 m accept 4 53 expect 61856.78 557779.12 tolerance 0.05 m accept 5 53 expect 128979.26 556953.19 tolerance 0.05 m accept 6 53 expect 196105.28 557057.74 tolerance 0.05 m accept 7 53 expect 263225.72 558092.77 tolerance 0.05 m accept 8 53 expect 330331.46 560058.31 tolerance 0.05 m accept 9 53 expect 397413.385 562954.436 tolerance 0.05 m accept 10 53 expect 464462.35 566781.24 tolerance 0.05 m accept 11 53 expect 531469.2 571538.84 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:28992 +inv \ +step +init=epsg:4289 -------------------------------------------------------------------------------- tolerance 0.05 m accept 132023.27 1114054.87 expect 5 58 tolerance 0.05 m accept 131405.466 1002468.081 expect 5 57 tolerance 0.05 m accept 130792.264 890981.281 expect 5 56 tolerance 0.05 m accept 130183.56 779577.7 expect 5 55 tolerance 0.05 m accept 129579.26 668240.58 expect 5 54 tolerance 0.05 m accept 128979.26 556953.19 expect 5 53 tolerance 0.05 m accept 155000 463000 expect 5.38763888889 52.1561605556 tolerance 0.05 m accept 57605.946 335312.662 expect 4 51 tolerance 0.05 m accept 55502.306 224086.514 expect 4 50 tolerance 0.05 m accept 53412.76 112842.73 expect 4.0 49.0 tolerance 0.05 m accept 0 0 expect 3.31372805556 47.9752611111 tolerance 0.05 m accept -5253.06 559535.55 expect 3 53 tolerance 0.05 m accept 61856.78 557779.12 expect 4 53 tolerance 0.05 m accept 128979.26 556953.19 expect 5 53 tolerance 0.05 m accept 196105.28 557057.74 expect 6 53 tolerance 0.05 m accept 263225.72 558092.77 expect 7 53 tolerance 0.05 m accept 330331.46 560058.31 expect 8 53 tolerance 0.05 m accept 397413.385 562954.436 expect 9 53 tolerance 0.05 m accept 464462.35 566781.24 expect 10 53 tolerance 0.05 m accept 531469.2 571538.84 expect 11 53 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4289 +inv \ +step +init=epsg:28992 -------------------------------------------------------------------------------- tolerance 0.006 m accept 5 58 roundtrip 1000 tolerance 0.006 m accept 5 57 roundtrip 1000 tolerance 0.006 m accept 5 56 roundtrip 1000 tolerance 0.006 m accept 5 55 roundtrip 1000 tolerance 0.006 m accept 5 54 roundtrip 1000 tolerance 0.006 m accept 5 53 roundtrip 1000 tolerance 0.006 m accept 5.38763888889 52.1561605556 roundtrip 1000 tolerance 0.006 m accept 4 51 roundtrip 1000 tolerance 0.006 m accept 4 50 roundtrip 1000 tolerance 0.006 m accept 4.0 49.0 roundtrip 1000 tolerance 0.006 m accept 3.31372805556 47.9752611111 roundtrip 1000 tolerance 0.006 m accept 3 53 roundtrip 1000 tolerance 0.006 m accept 4 53 roundtrip 1000 tolerance 0.006 m accept 5 53 roundtrip 1000 tolerance 0.006 m accept 6 53 roundtrip 1000 tolerance 0.006 m accept 7 53 roundtrip 1000 tolerance 0.006 m accept 8 53 roundtrip 1000 tolerance 0.006 m accept 9 53 roundtrip 1000 tolerance 0.006 m accept 10 53 roundtrip 1000 tolerance 0.006 m accept 11 53 roundtrip 1000 proj-9.6.0/test/gigs/5105.2.gie000664 001754 001755 00000007320 14764566077 015553 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5105 (part 2), Oblique Mercator (variant B), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4237 +inv \ +step +init=epsg:23700 -------------------------------------------------------------------------------- tolerance 0.05 m accept 16 48.5 expect 424714.235 355124.6 tolerance 0.05 m accept 17.2 48.0 expect 512056.188 296756.716 tolerance 0.05 m accept 17.5826505556 47.6361347222 expect 539847.765 255701.086 tolerance 0.05 m accept 19.0485716667 47.1443936111 expect 650000 200000 tolerance 0.05 m accept 19.2234294444 46.8756683333 expect 663329.053 170142.318 tolerance 0.05 m accept 20.1357405556 46.3703011111 expect 733651.455 114532.099 tolerance 0.05 m accept 21.4 45.7 expect 833148.855 42191.482 tolerance 0.05 m accept 22.3 49.3 expect 886565.935 444656.613 tolerance 0.05 m accept 21.2941986111 48.4899747222 expect 815999.993 351999.998 tolerance 0.05 m accept 19.2234294444 46.8756683333 expect 663329.053 170142.318 tolerance 0.05 m accept 17.6191536111 46.0687463889 expect 539403.958 81440.103 tolerance 0.05 m accept 16.36 45.5 expect 439836.709 20816.456 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:23700 +inv \ +step +init=epsg:4237 -------------------------------------------------------------------------------- tolerance 0.05 m accept 424714.235 355124.6 expect 16 48.5 tolerance 0.05 m accept 512056.188 296756.716 expect 17.2 48.0 tolerance 0.05 m accept 539847.765 255701.086 expect 17.5826505556 47.6361347222 tolerance 0.05 m accept 650000 200000 expect 19.0485716667 47.1443936111 tolerance 0.05 m accept 663329.053 170142.318 expect 19.2234294444 46.8756683333 tolerance 0.05 m accept 733651.455 114532.099 expect 20.1357405556 46.3703011111 tolerance 0.05 m accept 833148.855 42191.482 expect 21.4 45.7 tolerance 0.05 m accept 886565.935 444656.613 expect 22.3 49.3 tolerance 0.05 m accept 815999.993 351999.998 expect 21.2941986111 48.4899747222 tolerance 0.05 m accept 663329.053 170142.318 expect 19.2234294444 46.8756683333 tolerance 0.05 m accept 539403.958 81440.103 expect 17.6191536111 46.0687463889 tolerance 0.05 m accept 439836.709 20816.456 expect 16.36 45.5 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4237 +inv \ +step +init=epsg:23700 -------------------------------------------------------------------------------- tolerance 0.006 m accept 16 48.5 roundtrip 1000 tolerance 0.006 m accept 17.2 48.0 roundtrip 1000 tolerance 0.006 m accept 17.5826505556 47.6361347222 roundtrip 1000 tolerance 0.006 m accept 19.0485716667 47.1443936111 roundtrip 1000 tolerance 0.006 m accept 19.2234294444 46.8756683333 roundtrip 1000 tolerance 0.006 m accept 20.1357405556 46.3703011111 roundtrip 1000 tolerance 0.006 m accept 21.4 45.7 roundtrip 1000 tolerance 0.006 m accept 22.3 49.3 roundtrip 1000 tolerance 0.006 m accept 21.2941986111 48.4899747222 roundtrip 1000 tolerance 0.006 m accept 19.2234294444 46.8756683333 roundtrip 1000 tolerance 0.006 m accept 17.6191536111 46.0687463889 roundtrip 1000 tolerance 0.006 m accept 16.36 45.5 roundtrip 1000 proj-9.6.0/test/gigs/5106.gie000664 001754 001755 00000012520 14764566077 015412 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5106, Hotine Oblique Mercator (variant A), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4742 +inv \ +step +init=epsg:3376 -------------------------------------------------------------------------------- tolerance 0.05 m accept 117 12 expect 807919.144 1329535.334 tolerance 0.05 m accept 117 10 expect 808784.981 1107678.473 tolerance 0.05 m accept 117 9 expect 809334.177 996918.212 tolerance 0.05 m accept 117 8 expect 809939.302 886240.183 tolerance 0.05 m accept 116.846552222 6.87845833333 expect 793704.631 762081.047 tolerance 0.05 m accept 117 6 expect 811253.303 665041.265 tolerance 0.05 m accept 117 5 expect 811930.345 554475.627 tolerance 0.05 m accept 117 4 expect 812599.582 443902.706 tolerance 0.05 m accept 115 4 expect 590521.147 442890.861 tolerance 0.05 m accept 117 3 expect 813245.133 333300.13 tolerance 0.05 m accept 117 2 expect 813851.067 222645.511 tolerance 0.05 m accept 117 1 expect 814401.375 111916.452 tolerance 0.05 m accept 109.685820833 -0.000173333333333 expect 0 0 tolerance 0.05 m accept 123 6 expect 1475669.281 673118.573 tolerance 0.05 m accept 122 6 expect 1364854.862 671146.254 tolerance 0.05 m accept 121 6 expect 1254086.173 669446.249 tolerance 0.05 m accept 120 6 expect 1143352.598 668002.074 tolerance 0.05 m accept 119 6 expect 1032643.312 666797.354 tolerance 0.05 m accept 118 6 expect 921947.286 665815.815 tolerance 0.05 m accept 117 6 expect 811253.303 665041.265 tolerance 0.05 m accept 116 6 expect 700549.965 664457.586 tolerance 0.05 m accept 115 6 expect 589825.706 664048.715 tolerance 0.05 m accept 114 6 expect 479068.802 663798.63 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:3376 +inv \ +step +init=epsg:4742 -------------------------------------------------------------------------------- tolerance 0.05 m accept 807919.144 1329535.334 expect 117 12 tolerance 0.05 m accept 808784.981 1107678.473 expect 117 10 tolerance 0.05 m accept 809334.177 996918.212 expect 117 9 tolerance 0.05 m accept 809939.302 886240.183 expect 117 8 tolerance 0.05 m accept 793704.631 762081.047 expect 116.846552222 6.87845833333 tolerance 0.05 m accept 811253.303 665041.265 expect 117 6 tolerance 0.05 m accept 811930.345 554475.627 expect 117 5 tolerance 0.05 m accept 812599.582 443902.706 expect 117 4 tolerance 0.05 m accept 590521.147 442890.861 expect 115 4 tolerance 0.05 m accept 813245.133 333300.13 expect 117 3 tolerance 0.05 m accept 813851.067 222645.511 expect 117 2 tolerance 0.05 m accept 814401.375 111916.452 expect 117 1 tolerance 0.05 m accept 0 0 expect 109.685820833 -0.000173333333333 tolerance 0.05 m accept 1475669.281 673118.573 expect 123 6 tolerance 0.05 m accept 1364854.862 671146.254 expect 122 6 tolerance 0.05 m accept 1254086.173 669446.249 expect 121 6 tolerance 0.05 m accept 1143352.598 668002.074 expect 120 6 tolerance 0.05 m accept 1032643.312 666797.354 expect 119 6 tolerance 0.05 m accept 921947.286 665815.815 expect 118 6 tolerance 0.05 m accept 811253.303 665041.265 expect 117 6 tolerance 0.05 m accept 700549.965 664457.586 expect 116 6 tolerance 0.05 m accept 589825.706 664048.715 expect 115 6 tolerance 0.05 m accept 479068.802 663798.63 expect 114 6 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4742 +inv \ +step +init=epsg:3376 -------------------------------------------------------------------------------- tolerance 0.006 m accept 117 12 roundtrip 1000 tolerance 0.006 m accept 117 10 roundtrip 1000 tolerance 0.006 m accept 117 9 roundtrip 1000 tolerance 0.006 m accept 117 8 roundtrip 1000 tolerance 0.006 m accept 116.846552222 6.87845833333 roundtrip 1000 tolerance 0.006 m accept 117 6 roundtrip 1000 tolerance 0.006 m accept 117 5 roundtrip 1000 tolerance 0.006 m accept 117 4 roundtrip 1000 tolerance 0.006 m accept 115 4 roundtrip 1000 tolerance 0.006 m accept 117 3 roundtrip 1000 tolerance 0.006 m accept 117 2 roundtrip 1000 tolerance 0.006 m accept 117 1 roundtrip 1000 tolerance 0.006 m accept 109.685820833 -0.000173333333333 roundtrip 1000 tolerance 0.006 m accept 123 6 roundtrip 1000 tolerance 0.006 m accept 122 6 roundtrip 1000 tolerance 0.006 m accept 121 6 roundtrip 1000 tolerance 0.006 m accept 120 6 roundtrip 1000 tolerance 0.006 m accept 119 6 roundtrip 1000 tolerance 0.006 m accept 118 6 roundtrip 1000 tolerance 0.006 m accept 117 6 roundtrip 1000 tolerance 0.006 m accept 116 6 roundtrip 1000 tolerance 0.006 m accept 115 6 roundtrip 1000 tolerance 0.006 m accept 114 6 roundtrip 1000 proj-9.6.0/test/gigs/5107.gie000664 001754 001755 00000007554 14764566077 015426 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5107, American Polyconic, v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4674 +inv \ +step +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 -------------------------------------------------------------------------------- tolerance 0.05 m accept -54 0 expect 5000000.0 10000000.0 tolerance 0.05 m accept -45 6 expect 5996378.70982 10671650.0559 tolerance 0.05 m accept -45 0 expect 6001875.41714 10000000.0 tolerance 0.05 m accept -45 -6 expect 5996378.70982 9328349.94408 tolerance 0.05 m accept -41 -13 expect 6409689.58688 8526306.26193 tolerance 0.05 m accept -38 -20 expect 6671808.91963 7707735.72988 tolerance 0.05 m accept -37 -24 expect 6725584.49173 7240461.99578 tolerance 0.05 m accept -36 -30 expect 6729619.73995 6543762.57644 tolerance 0.05 m accept -57 -30 expect 4710574.22344 6676097.81117 tolerance 0.05 m accept -54 -29.3674766667 expect 5000000.0 6750000.0 tolerance 0.05 m accept -47 -27.5 expect 5691318.14689 6937461.05067 tolerance 0.05 m accept -37 -24 expect 6725584.49173 7240461.99578 tolerance 0.05 m accept -30 -22.5 expect 7458947.70133 7313327.31691 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +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 +inv \ +step +init=epsg:4674 -------------------------------------------------------------------------------- tolerance 0.05 m accept 5000000.0 10000000.0 expect -54 0 tolerance 0.05 m accept 5996378.70982 10671650.0559 expect -45 6 tolerance 0.05 m accept 6001875.41714 10000000.0 expect -45 0 tolerance 0.05 m accept 5996378.70982 9328349.94408 expect -45 -6 tolerance 0.05 m accept 6409689.58688 8526306.26193 expect -41 -13 tolerance 0.05 m accept 6671808.91963 7707735.72988 expect -38 -20 tolerance 0.05 m accept 6725584.49173 7240461.99578 expect -37 -24 tolerance 0.05 m accept 6729619.73995 6543762.57644 expect -36 -30 tolerance 0.05 m accept 4710574.22344 6676097.81117 expect -57 -30 tolerance 0.05 m accept 5000000.0 6750000.0 expect -54 -29.3674766667 tolerance 0.05 m accept 5691318.14689 6937461.05067 expect -47 -27.5 tolerance 0.05 m accept 6725584.49173 7240461.99578 expect -37 -24 tolerance 0.05 m accept 7458947.70133 7313327.31691 expect -30 -22.5 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4674 +inv \ +step +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 -------------------------------------------------------------------------------- tolerance 0.006 m accept -54 0 roundtrip 1000 tolerance 0.006 m accept -45 6 roundtrip 1000 tolerance 0.006 m accept -45 0 roundtrip 1000 tolerance 0.006 m accept -45 -6 roundtrip 1000 tolerance 0.006 m accept -41 -13 roundtrip 1000 tolerance 0.006 m accept -38 -20 roundtrip 1000 tolerance 0.006 m accept -37 -24 roundtrip 1000 tolerance 0.006 m accept -36 -30 roundtrip 1000 tolerance 0.006 m accept -57 -30 roundtrip 1000 tolerance 0.006 m accept -54 -29.3674766667 roundtrip 1000 tolerance 0.006 m accept -47 -27.5 roundtrip 1000 tolerance 0.006 m accept -37 -24 roundtrip 1000 tolerance 0.006 m accept -30 -22.5 roundtrip 1000 proj-9.6.0/test/gigs/5108.gie000664 001754 001755 00000010604 14764566077 015415 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5108, Cassini-Soldner, v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true # GDM2000 # <4742> +proj=longlat +ellps=GRS80 <> # 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 <> -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4742 +inv \ +step +init=epsg:3377 -------------------------------------------------------------------------------- tolerance 0.05 m accept 106 10 expect 267186.017 881108.902 tolerance 0.05 m accept 106 9 expect 268006.024 770398.186 tolerance 0.05 m accept 106 8 expect 268740.351 659692.254 tolerance 0.05 m accept 106 7 expect 269388.786 548990.588 tolerance 0.05 m accept 106 6 expect 269951.141 438292.666 tolerance 0.05 m accept 106 5 expect 270427.255 327597.962 tolerance 0.05 m accept 106 4 expect 270816.99 216905.945 tolerance 0.05 m accept 106 3 expect 271120.234 106216.081 tolerance 0.05 m accept 103.561065778 2.0424676812 expect 0 0 tolerance 0.05 m accept 103.64025984 1.82776484381 expect 8813.252 -23740.095 tolerance 0.05 m accept 106 1 expect 271466.923 -115159.332 tolerance 0.05 m accept 109 5 expect 603116.703 329668.599 tolerance 0.05 m accept 108 5 expect 492221.308 328807.336 tolerance 0.05 m accept 107 5 expect 381324.74 328117.472 tolerance 0.05 m accept 106 5 expect 270427.255 327597.962 tolerance 0.05 m accept 105 5 expect 159529.111 327248.012 tolerance 0.05 m accept 104 5 expect 48630.563 327067.097 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:3377 +inv \ +step +init=epsg:4742 -------------------------------------------------------------------------------- tolerance 0.05 m accept 267186.017 881108.902 expect 106 10 tolerance 0.05 m accept 268006.024 770398.186 expect 106 9 tolerance 0.05 m accept 268740.351 659692.254 expect 106 8 tolerance 0.05 m accept 269388.786 548990.588 expect 106 7 tolerance 0.05 m accept 269951.141 438292.666 expect 106 6 tolerance 0.05 m accept 270427.255 327597.962 expect 106 5 tolerance 0.05 m accept 270816.99 216905.945 expect 106 4 tolerance 0.05 m accept 271120.234 106216.081 expect 106 3 tolerance 0.05 m accept 0 0 expect 103.561065778 2.0424676812 tolerance 0.05 m accept 8813.252 -23740.095 expect 103.64025984 1.82776484381 tolerance 0.05 m accept 271466.923 -115159.332 expect 106 1 tolerance 0.05 m accept 603116.703 329668.599 expect 109 5 tolerance 0.05 m accept 492221.308 328807.336 expect 108 5 tolerance 0.05 m accept 381324.74 328117.472 expect 107 5 tolerance 0.05 m accept 270427.255 327597.962 expect 106 5 tolerance 0.05 m accept 159529.111 327248.012 expect 105 5 tolerance 0.05 m accept 48630.563 327067.097 expect 104 5 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4742 +inv \ +step +init=epsg:3377 -------------------------------------------------------------------------------- tolerance 0.006 m accept 106 10 roundtrip 1000 tolerance 0.006 m accept 106 9 roundtrip 1000 tolerance 0.006 m accept 106 8 roundtrip 1000 tolerance 0.006 m accept 106 7 roundtrip 1000 tolerance 0.006 m accept 106 6 roundtrip 1000 tolerance 0.006 m accept 106 5 roundtrip 1000 tolerance 0.006 m accept 106 4 roundtrip 1000 tolerance 0.006 m accept 106 3 roundtrip 1000 tolerance 0.006 m accept 103.561065778 2.0424676812 roundtrip 1000 tolerance 0.006 m accept 103.64025984 1.82776484381 roundtrip 1000 tolerance 0.006 m accept 106 1 roundtrip 1000 tolerance 0.006 m accept 109 5 roundtrip 1000 tolerance 0.006 m accept 108 5 roundtrip 1000 tolerance 0.006 m accept 107 5 roundtrip 1000 tolerance 0.006 m accept 106 5 roundtrip 1000 tolerance 0.006 m accept 105 5 roundtrip 1000 tolerance 0.006 m accept 104 5 roundtrip 1000 proj-9.6.0/test/gigs/5109.gie000664 001754 001755 00000006641 14764566077 015424 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5109, Albers Equal Area, v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4283 +inv \ +step +init=epsg:3577 -------------------------------------------------------------------------------- tolerance 0.05 m accept 132 0 expect 0 0 tolerance 0.05 m accept 132 -27 expect 0 -2926820.89 tolerance 0.05 m accept 140 0 expect 966973.98 -30285.6 tolerance 0.05 m accept 140 -20 expect 832799.36 -2170181.93 tolerance 0.05 m accept 140 -40 expect 693250.21 -4395794.49 tolerance 0.05 m accept 140 -60 expect 567313.29 -6404311.16 tolerance 0.05 m accept 140 -80 expect 486878.674 -7687130.029 tolerance 0.05 m accept 120 -60 expect -850274.75 -6426505.13 tolerance 0.05 m accept 130 -60 expect -141915.26 -6387653.78 tolerance 0.05 m accept 140 -60 expect 567313.29 -6404311.16 tolerance 0.05 m accept 150 -60 expect 1273067.747 -6476375.276 tolerance 0.05 m accept 160 -60 expect 1971026.26 -6603404.82 tolerance 0.05 m accept 170 -60 expect 2656914.716 -6784621.89 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:3577 +inv \ +step +init=epsg:4283 -------------------------------------------------------------------------------- tolerance 0.05 m accept 0 0 expect 132 0 tolerance 0.05 m accept 0 -2926820.89 expect 132 -27 tolerance 0.05 m accept 966973.98 -30285.6 expect 140 0 tolerance 0.05 m accept 832799.36 -2170181.93 expect 140 -20 tolerance 0.05 m accept 693250.21 -4395794.49 expect 140 -40 tolerance 0.05 m accept 567313.29 -6404311.16 expect 140 -60 tolerance 0.05 m accept 486878.674 -7687130.029 expect 140 -80 tolerance 0.05 m accept -850274.75 -6426505.13 expect 120 -60 tolerance 0.05 m accept -141915.26 -6387653.78 expect 130 -60 tolerance 0.05 m accept 567313.29 -6404311.16 expect 140 -60 tolerance 0.05 m accept 1273067.747 -6476375.276 expect 150 -60 tolerance 0.05 m accept 1971026.26 -6603404.82 expect 160 -60 tolerance 0.05 m accept 2656914.716 -6784621.89 expect 170 -60 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4283 +inv \ +step +init=epsg:3577 -------------------------------------------------------------------------------- tolerance 0.006 m accept 132 0 roundtrip 1000 tolerance 0.006 m accept 132 -27 roundtrip 1000 tolerance 0.006 m accept 140 0 roundtrip 1000 tolerance 0.006 m accept 140 -20 roundtrip 1000 tolerance 0.006 m accept 140 -40 roundtrip 1000 tolerance 0.006 m accept 140 -60 roundtrip 1000 tolerance 0.006 m accept 140 -80 roundtrip 1000 tolerance 0.006 m accept 120 -60 roundtrip 1000 tolerance 0.006 m accept 130 -60 roundtrip 1000 tolerance 0.006 m accept 140 -60 roundtrip 1000 tolerance 0.006 m accept 150 -60 roundtrip 1000 tolerance 0.006 m accept 160 -60 roundtrip 1000 tolerance 0.006 m accept 170 -60 roundtrip 1000 proj-9.6.0/test/gigs/5111.1.gie000664 001754 001755 00000021164 14764566077 015551 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5111 (part 1), Mercator (variant A), v2-0_2011-06-28. -------------------------------------------------------------------------------- # Batavia <4211> +proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 <> # 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 <> use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline towgs84=0,0,0 \ +step +init=epsg:4211 +inv \ +step +init=epsg:3001 -------------------------------------------------------------------------------- tolerance 0.05 m accept 100.0876483 77.6534822 expect 2800000.0 15000000.0 tolerance 0.055 m accept 100.0876483 73.1442856 expect 2800000.0 13000000.0 tolerance 0.05 m accept 100.0876483 67.0518325 expect 2800000.0 11000000.0 tolerance 0.05 m accept 100.0876483 58.9140458 expect 2800000.0 9000000.0 tolerance 0.05 m accept 100.0876483 48.2638981 expect 2800000.0 7000000.0 tolerance 0.05 m accept 100.0876483 34.8029044 expect 2800000.0 5000000.0 tolerance 0.05 m accept 100.0876483 18.7048581 expect 2800000.0 3000000.0 tolerance 0.05 m accept 100.0876483 0.9071392 expect 2800000.0 1000000.0 tolerance 0.05 m accept 110.0 0.0 expect 3900000.0 900000.0 tolerance 0.05 m accept 100.0876483 -0.9071392 expect 2800000.0 800000.0 tolerance 0.05 m accept 100.0876483 -1.8140483 expect 2800000.0 700000.0 tolerance 0.05 m accept 100.0876483 -2.0 expect 2800000.0 679490.65 tolerance 0.05 m accept 100.0876483 -3.6262553 expect 2800000.0 500000.0 tolerance 0.05 m accept 100.0876483 -4.531095 expect 2800000.0 400000.0 tolerance 0.05 m accept 100.0876483 -5.4347892 expect 2800000.0 300000.0 tolerance 0.05 m accept 100.0876483 -6.3371111 expect 2800000.0 200000.0 tolerance 0.05 m accept 100.0876483 -7.2378372 expect 2800000.0 100000.0 tolerance 0.05 m accept 74.8562083 -8.136745 expect 0.0 0.0 tolerance 0.05 m accept -71.0 -2.0 expect 23764105.84 679490.65 tolerance 0.05 m accept -90.0 -2.0 expect 21655625.33 679490.65 tolerance 0.05 m accept -120.0 -2.0 expect 18326445.58 679490.65 tolerance 0.05 m accept -150.0 -2.0 expect 14997265.83 679490.65 tolerance 0.05 m accept 180.0 -2.0 expect 11668086.08 679490.65 tolerance 0.05 m accept 150.0 -2.0 expect 8338906.33 679490.65 tolerance 0.05 m accept 120.0 -2.0 expect 5009726.58 679490.65 tolerance 0.05 m accept 110.0 -2.0 expect 3900000.0 679490.65 tolerance 0.05 m accept 106.8077194 -2.0 expect 3545744.14 679490.65 tolerance 0.05 m accept 100.0876483 -2.0 expect 2800000.0 679490.65 tolerance 0.05 m accept 90.0 -2.0 expect 1680546.83 679490.65 tolerance 0.05 m accept 60.0 -2.0 expect -1648632.92 679490.65 tolerance 0.05 m accept 30.0 -2.0 expect -4977812.67 679490.65 tolerance 0.05 m accept 0.0 -2.0 expect -8306992.42 679490.65 tolerance 0.05 m accept -30.0 -2.0 expect -11636172.17 679490.65 tolerance 0.05 m accept -60.0 -2.0 expect -14965351.92 679490.65 tolerance 0.05 m accept -69.0 -2.0 expect -15964105.84 679490.65 -------------------------------------------------------------------------------- operation +proj=pipeline towgs84=0,0,0 \ +step +init=epsg:3001 +inv \ +step +init=epsg:4211 -------------------------------------------------------------------------------- tolerance 0.05 m accept 2800000.0 15000000.0 expect 100.0876483 77.6534822 tolerance 0.05 m accept 2800000.0 13000000.0 expect 100.0876483 73.1442856 tolerance 0.05 m accept 2800000.0 11000000.0 expect 100.0876483 67.0518325 tolerance 0.05 m accept 2800000.0 9000000.0 expect 100.0876483 58.9140458 tolerance 0.05 m accept 2800000.0 7000000.0 expect 100.0876483 48.2638981 tolerance 0.05 m accept 2800000.0 5000000.0 expect 100.0876483 34.8029044 tolerance 0.05 m accept 2800000.0 3000000.0 expect 100.0876483 18.7048581 tolerance 0.05 m accept 2800000.0 1000000.0 expect 100.0876483 0.9071392 tolerance 0.05 m accept 3900000.0 900000.0 expect 110.0 0.0 tolerance 0.05 m accept 2800000.0 800000.0 expect 100.0876483 -0.9071392 tolerance 0.05 m accept 2800000.0 700000.0 expect 100.0876483 -1.8140483 tolerance 0.05 m accept 2800000.0 679490.65 expect 100.0876483 -2.0 tolerance 0.05 m accept 2800000.0 500000.0 expect 100.0876483 -3.6262553 tolerance 0.05 m accept 2800000.0 400000.0 expect 100.0876483 -4.531095 tolerance 0.05 m accept 2800000.0 300000.0 expect 100.0876483 -5.4347892 tolerance 0.05 m accept 2800000.0 200000.0 expect 100.0876483 -6.3371111 tolerance 0.05 m accept 2800000.0 100000.0 expect 100.0876483 -7.2378372 tolerance 0.05 m accept 0.0 0.0 expect 74.8562083 -8.136745 tolerance 0.05 m accept 23764105.84 679490.65 expect -71.0 -2.0 tolerance 0.05 m accept 21655625.33 679490.65 expect -90.0 -2.0 tolerance 0.05 m accept 18326445.58 679490.65 expect -120.0 -2.0 tolerance 0.05 m accept 14997265.83 679490.65 expect -150.0 -2.0 tolerance 0.05 m accept 11668086.08 679490.65 expect 180.0 -2.0 tolerance 0.05 m accept 8338906.33 679490.65 expect 150.0 -2.0 tolerance 0.05 m accept 5009726.58 679490.65 expect 120.0 -2.0 tolerance 0.05 m accept 3900000.0 679490.65 expect 110.0 -2.0 tolerance 0.05 m accept 3545744.14 679490.65 expect 106.8077194 -2.0 tolerance 0.05 m accept 2800000.0 679490.65 expect 100.0876483 -2.0 tolerance 0.05 m accept 1680546.83 679490.65 expect 90.0 -2.0 tolerance 0.05 m accept -1648632.92 679490.65 expect 60.0 -2.0 tolerance 0.05 m accept -4977812.67 679490.65 expect 30.0 -2.0 tolerance 0.05 m accept -8306992.42 679490.65 expect 0.0 -2.0 tolerance 0.05 m accept -11636172.17 679490.65 expect -30.0 -2.0 tolerance 0.05 m accept -14965351.92 679490.65 expect -60.0 -2.0 tolerance 0.05 m accept -15964105.84 679490.65 expect -69.0 -2.0 -------------------------------------------------------------------------------- operation +proj=pipeline towgs84=0,0,0 \ +step +init=epsg:4211 +inv \ +step +init=epsg:3001 -------------------------------------------------------------------------------- tolerance 0.006 m accept 100.0876483 77.6534822 roundtrip 1000 tolerance 0.006 m accept 100.0876483 73.1442856 roundtrip 1000 tolerance 0.006 m accept 100.0876483 67.0518325 roundtrip 1000 tolerance 0.006 m accept 100.0876483 58.9140458 roundtrip 1000 tolerance 0.006 m accept 100.0876483 48.2638981 roundtrip 1000 tolerance 0.006 m accept 100.0876483 34.8029044 roundtrip 1000 tolerance 0.006 m accept 100.0876483 18.7048581 roundtrip 1000 tolerance 0.006 m accept 100.0876483 0.9071392 roundtrip 1000 tolerance 0.006 m accept 110.0 0.0 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -0.9071392 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -1.8140483 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -2.0 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -3.6262553 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -4.531095 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -5.4347892 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -6.3371111 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -7.2378372 roundtrip 1000 tolerance 0.006 m accept 74.8562083 -8.136745 roundtrip 1000 tolerance 0.006 m accept -71.0 -2.0 roundtrip 1000 tolerance 0.006 m accept -90.0 -2.0 roundtrip 1000 tolerance 0.006 m accept -120.0 -2.0 roundtrip 1000 tolerance 0.006 m accept -150.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 180.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 150.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 120.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 110.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 106.8077194 -2.0 roundtrip 1000 tolerance 0.006 m accept 100.0876483 -2.0 roundtrip 1000 tolerance 0.006 m accept 90.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 60.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 30.0 -2.0 roundtrip 1000 tolerance 0.006 m accept 0.0 -2.0 roundtrip 1000 tolerance 0.006 m accept -30.0 -2.0 roundtrip 1000 tolerance 0.006 m accept -60.0 -2.0 roundtrip 1000 tolerance 0.006 m accept -69.0 -2.0 roundtrip 1000 proj-9.6.0/test/gigs/5112.gie000664 001754 001755 00000003326 14764566077 015413 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5112, Mercator (variant B), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation proj=pipeline \ step init=epsg:4284 inv \ step init=epsg:3388 tolerance 50 mm -------------------------------------------------------------------------------- accept 51.0 42.0 expect 0.0 3819897.85 accept 51.0 0.0 expect 0.0 0.0 accept 57.0 0.0 expect 497112.88 0.0 accept 54.0 20.5 expect 248556.44 1724781.5 accept 67.0 -41.0 expect 1325634.35 -3709687.25 -------------------------------------------------------------------------------- operation proj=pipeline \ step init=epsg:3388 inv \ step init=epsg:4284 tolerance 50 mm -------------------------------------------------------------------------------- accept 0.0 3819897.85 expect 51.0 42.0 accept 0.0 0.0 expect 51.0 0.0 accept 497112.88 0.0 expect 57.0 0.0 accept 248556.44 1724781.5 expect 54.0 20.5 accept 1325634.35 -3709687.25 expect 67.0 -41.0 -------------------------------------------------------------------------------- operation proj=pipeline towgs84=0,0,0 \ step init=epsg:4284 inv \ step init=epsg:3388 tolerance 6 mm -------------------------------------------------------------------------------- accept 51.0 42.0 roundtrip 1000 accept 51.0 0.0 roundtrip 1000 accept 57.0 0.0 roundtrip 1000 accept 54.0 20.5 roundtrip 1000 accept 67.0 -41.0 roundtrip 1000 proj-9.6.0/test/gigs/5113.gie000664 001754 001755 00000003775 14764566077 015424 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5113, Transverse Mercator (South Oriented), v2-0_2011-06-28. -------------------------------------------------------------------------------- use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4148 +inv \ +step +init=epsg:2049 -------------------------------------------------------------------------------- tolerance 0.03 m accept 22.5 0.0 expect -166998.44 0.0 tolerance 0.03 m accept 21.5 -25.0 expect -50475.46 2766147.25 tolerance 0.03 m accept 20.5 -30.0 expect 48243.45 3320218.65 tolerance 0.03 m accept 19.5 -35.0 expect 136937.65 3875621.18 tolerance 0.03 m accept 19.5 -35.0 expect 136937.65 3875621.18 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:2049 +inv \ +step +init=epsg:4148 -------------------------------------------------------------------------------- tolerance 0.03 m accept -166998.44 0.0 expect 22.5 0.0 tolerance 0.03 m accept -50475.46 2766147.25 expect 21.5 -25.0 tolerance 0.03 m accept 48243.45 3320218.65 expect 20.5 -30.0 tolerance 0.03 m accept 136937.65 3875621.18 expect 19.5 -35.0 tolerance 0.03 m accept 136937.65 3875621.18 expect 19.5 -35.0 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4148 +inv \ +step +init=epsg:2049 -------------------------------------------------------------------------------- tolerance 0.006 m accept 22.5 0.0 roundtrip 1000 tolerance 0.006 m accept 21.5 -25.0 roundtrip 1000 tolerance 0.006 m accept 20.5 -30.0 roundtrip 1000 tolerance 0.006 m accept 19.5 -35.0 roundtrip 1000 tolerance 0.006 m accept 19.5 -35.0 roundtrip 1000 proj-9.6.0/test/gigs/5201.gie000664 001754 001755 00000021116 14764566077 015407 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5201, Geographic Geocentric conversions, v2.0_2011-09-28. (EPSG 4979 - WGS84 3d has been replaced with EPSG code 4326 WGS84 2d). -------------------------------------------------------------------------------- # WGS 84 <4978> +proj=geocent +datum=WGS84 +units=m <> # WGS 84 <4326> +proj=longlat +datum=WGS84 <> use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4978 +inv \ +step +init=epsg:4326 -------------------------------------------------------------------------------- tolerance 0.01 m accept -962479.5924 555687.8517 6260738.6526 expect 150 80 1214.137 tolerance 0.01 m accept -962297.0059 555582.4354 6259542.961 expect 150 80 0 tolerance 0.01 m accept -1598248.169 2768777.623 5501278.468 expect 119.99524538 60.00475191 619.6317 tolerance 0.01 m accept -1598023.169 2768387.912 5500499.045 expect 119.9952447 60.00475258 -280.3683 tolerance 0.01 m accept 2764210.4054 4787752.865 3170468.5199 expect 60 30 189.569 tolerance 0.01 m accept 2764128.3196 4787610.6883 3170373.7354 expect 60 30 0 tolerance 0.01 m accept 6377934.396 -112 434 expect -0.00100615 0.00392509 -202.5882 tolerance 0.01 m accept 6374934.396 -112 434 expect -0.00100662 0.00392695 -3202.5881 tolerance 0.01 m accept 6367934.396 -112 434 expect -0.00100773 0.00393129 -10202.5881 tolerance 0.01 m accept 2764128.3196 -4787610.6883 -3170373.7354 expect -60 -30 0 tolerance 0.01 m accept 2763900.3489 -4787215.8313 -3170110.4974 expect -60 -30 -526.476 tolerance 0.01 m accept 2763880.8633 -4787182.0813 -3170087.9974 expect -60 -30 -571.476 tolerance 0.01 m accept -1598023.169 -2768611.912 -5499631.045 expect -119.99323757 -59.99934884 -935.0995 tolerance 0.01 m accept -1597798.169 -2768222.201 -5498851.622 expect -119.99323663 -59.99934874 -1835.0995 tolerance 0.01 m accept -962297.0059 -555582.4354 -6259542.961 expect -150 -80 0 tolerance 0.01 m accept -962150.945 -555498.1071 -6258586.4616 expect -150 -80 -971.255 tolerance 0.01 m accept -961798.2951 -555294.5046 -6256277.0874 expect -150 -80 -3316.255 tolerance 0.01 m accept -2187336.719 -112 5971017.093 expect -179.99706624 70.00490733 -223.6178 tolerance 0.01 m accept -2904698.5551 -2904698.5551 4862789.0377 expect -135 50 0 tolerance 0.01 m accept 371 -5783593.614 2679326.11 expect -89.99632465 25.00366329 -274.7286 tolerance 0.01 m accept 6378137 0 0 expect 0 0 0 tolerance 0.01 m accept -4087095.478 2977467.559 -3875457.429 expect 143.92649252 -37.65282217 737.7182 tolerance 0.01 m accept -4085919.959 2976611.233 -3874335.274 expect 143.92649211 -37.65282206 -1099.2288 tolerance 0.01 m accept -4084000.165 2975212.729 -3872502.631 expect 143.92649143 -37.65282187 -4099.2288 tolerance 0.01 m accept -4079520.647 2971949.553 -3868226.465 expect 143.92648984 -37.65282143 -11099.2288 tolerance 0.01 m accept -2904698.5551 2904698.5551 -4862789.0377 expect 135 -50 0 tolerance 0.01 m accept -2187336.719 -112 -5970149.093 expect -179.99706624 -70.00224647 -1039.2896 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4326 +inv \ +step +init=epsg:4978 -------------------------------------------------------------------------------- tolerance 0.01 m accept 150 80 1214.137 expect -962479.5924 555687.8517 6260738.6526 tolerance 0.01 m accept 150 80 0 expect -962297.0059 555582.4354 6259542.961 tolerance 0.01 m accept 119.99524538 60.00475191 619.6317 expect -1598248.169 2768777.623 5501278.468 tolerance 0.01 m accept 119.9952447 60.00475258 -280.3683 expect -1598023.169 2768387.912 5500499.045 tolerance 0.01 m accept 60 30 189.569 expect 2764210.4054 4787752.865 3170468.5199 tolerance 0.01 m accept 60 30 0 expect 2764128.3196 4787610.6883 3170373.7354 tolerance 0.01 m accept -0.00100615 0.00392509 -202.5882 expect 6377934.396 -112 434 tolerance 0.01 m accept -0.00100662 0.00392695 -3202.5881 expect 6374934.396 -112 434 tolerance 0.01 m accept -0.00100773 0.00393129 -10202.5881 expect 6367934.396 -112 434 tolerance 0.01 m accept -60 -30 0 expect 2764128.3196 -4787610.6883 -3170373.7354 tolerance 0.01 m accept -60 -30 -526.476 expect 2763900.3489 -4787215.8313 -3170110.4974 tolerance 0.01 m accept -60 -30 -571.476 expect 2763880.8633 -4787182.0813 -3170087.9974 tolerance 0.01 m accept -119.99323757 -59.99934884 -935.0995 expect -1598023.169 -2768611.912 -5499631.045 tolerance 0.01 m accept -119.99323663 -59.99934874 -1835.0995 expect -1597798.169 -2768222.201 -5498851.622 tolerance 0.01 m accept -150 -80 0 expect -962297.0059 -555582.4354 -6259542.961 tolerance 0.01 m accept -150 -80 -971.255 expect -962150.945 -555498.1071 -6258586.4616 tolerance 0.01 m accept -150 -80 -3316.255 expect -961798.2951 -555294.5046 -6256277.0874 tolerance 0.01 m accept -179.99706624 70.00490733 -223.6178 expect -2187336.719 -112 5971017.093 tolerance 0.01 m accept -135 50 0 expect -2904698.5551 -2904698.5551 4862789.0377 tolerance 0.01 m accept -89.99632465 25.00366329 -274.7286 expect 371 -5783593.614 2679326.11 tolerance 0.01 m accept 0 0 0 expect 6378137 0 0 tolerance 0.01 m accept 143.92649252 -37.65282217 737.7182 expect -4087095.478 2977467.559 -3875457.429 tolerance 0.01 m accept 143.92649211 -37.65282206 -1099.2288 expect -4085919.959 2976611.233 -3874335.274 tolerance 0.01 m accept 143.92649143 -37.65282187 -4099.2288 expect -4084000.165 2975212.729 -3872502.631 tolerance 0.01 m accept 143.92648984 -37.65282143 -11099.2288 expect -4079520.647 2971949.553 -3868226.465 tolerance 0.01 m accept 135 -50 0 expect -2904698.5551 2904698.5551 -4862789.0377 tolerance 0.01 m accept -179.99706624 -70.00224647 -1039.2896 expect -2187336.719 -112 -5970149.093 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4978 +inv \ +step +init=epsg:4326 -------------------------------------------------------------------------------- tolerance 0.01 m accept -962479.5924 555687.8517 6260738.6526 roundtrip 1000 tolerance 0.01 m accept -962297.0059 555582.4354 6259542.961 roundtrip 1000 tolerance 0.01 m accept -1598248.169 2768777.623 5501278.468 roundtrip 1000 tolerance 0.01 m accept -1598023.169 2768387.912 5500499.045 roundtrip 1000 tolerance 0.01 m accept 2764210.4054 4787752.865 3170468.5199 roundtrip 1000 tolerance 0.01 m accept 2764128.3196 4787610.6883 3170373.7354 roundtrip 1000 tolerance 0.01 m accept 6377934.396 -112 434 roundtrip 1000 tolerance 0.01 m accept 6374934.396 -112 434 roundtrip 1000 tolerance 0.01 m accept 6367934.396 -112 434 roundtrip 1000 tolerance 0.01 m accept 2764128.3196 -4787610.6883 -3170373.7354 roundtrip 1000 tolerance 0.01 m accept 2763900.3489 -4787215.8313 -3170110.4974 roundtrip 1000 tolerance 0.01 m accept 2763880.8633 -4787182.0813 -3170087.9974 roundtrip 1000 tolerance 0.01 m accept -1598023.169 -2768611.912 -5499631.045 roundtrip 1000 tolerance 0.01 m accept -1597798.169 -2768222.201 -5498851.622 roundtrip 1000 tolerance 0.01 m accept -962297.0059 -555582.4354 -6259542.961 roundtrip 1000 tolerance 0.01 m accept -962150.945 -555498.1071 -6258586.4616 roundtrip 1000 tolerance 0.01 m accept -961798.2951 -555294.5046 -6256277.0874 roundtrip 1000 tolerance 0.01 m accept -2187336.719 -112 5971017.093 roundtrip 1000 tolerance 0.01 m accept -2904698.5551 -2904698.5551 4862789.0377 roundtrip 1000 tolerance 0.01 m accept 371 -5783593.614 2679326.11 roundtrip 1000 tolerance 0.01 m accept 6378137 0 0 roundtrip 1000 tolerance 0.01 m accept -4087095.478 2977467.559 -3875457.429 roundtrip 1000 tolerance 0.01 m accept -4085919.959 2976611.233 -3874335.274 roundtrip 1000 tolerance 0.01 m accept -4084000.165 2975212.729 -3872502.631 roundtrip 1000 tolerance 0.01 m accept -4079520.647 2971949.553 -3868226.465 roundtrip 1000 tolerance 0.01 m accept -2904698.5551 2904698.5551 -4862789.0377 roundtrip 1000 tolerance 0.01 m accept -2187336.719 -112 -5970149.093 roundtrip 1000 proj-9.6.0/test/gigs/5208.gie000664 001754 001755 00000007342 14764566077 015423 0ustar00e012349e012349000000 000000 -------------------------------------------------------------------------------- Test 5208, Longitude Rotation, v2.0_2011-06-28. The test tolerance is 0.01". Since gie can only use linear tolerances we convert that to an approximate liniar distance instead, by multiplying with 111km: 0.01" * 111 km = 2.777777778-7 * 111000 m = 0.03 m To be on the safe side we, use 0.01 m as the tolerance. -------------------------------------------------------------------------------- # NTF <4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 <> # NTF (Paris) <4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris <> use_proj4_init_rules true -------------------------------------------------------------------------------- operation +proj=pipeline\ +step +init=epsg:4275 +inv\ +step +init=epsg:4807 -------------------------------------------------------------------------------- tolerance 0.01 m accept 5 58 expect 2.66277083 58 tolerance 0.01 m accept 5 56 expect 2.66277083 56 tolerance 0.01 m accept 5 55 expect 2.66277083 55 tolerance 0.01 m accept 5 53 expect 2.66277083 53 tolerance 0.01 m accept 4 51 expect 1.66277083 51 tolerance 0.01 m accept 4 49 expect 1.66277083 49 tolerance 0.01 m accept 2.33722917 46.8 expect 0 46.8 tolerance 0.01 m accept 3 53 expect 0.66277083 53 tolerance 0.01 m accept 4 53 expect 1.66277083 53 tolerance 0.01 m accept 6 53 expect 3.66277083 53 tolerance 0.01 m accept 7 53 expect 4.66277083 53 tolerance 0.01 m accept 9 53 expect 6.66277083 53 tolerance 0.01 m accept 10 53 expect 7.66277083 53 tolerance 0.01 m accept 11 53 expect 8.66277083 53 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4807 +inv \ +step +init=epsg:4275 -------------------------------------------------------------------------------- tolerance 0.01 m accept 2.66277083 58 expect 5 58 tolerance 0.01 m accept 2.66277083 56 expect 5 56 tolerance 0.01 m accept 2.66277083 55 expect 5 55 tolerance 0.01 m accept 2.66277083 53 expect 5 53 tolerance 0.01 m accept 1.66277083 51 expect 4 51 tolerance 0.01 m accept 1.66277083 49 expect 4 49 tolerance 0.01 m accept 0 46.8 expect 2.33722917 46.8 tolerance 0.01 m accept 0.66277083 53 expect 3 53 tolerance 0.01 m accept 1.66277083 53 expect 4 53 tolerance 0.01 m accept 3.66277083 53 expect 6 53 tolerance 0.01 m accept 4.66277083 53 expect 7 53 tolerance 0.01 m accept 6.66277083 53 expect 9 53 tolerance 0.01 m accept 7.66277083 53 expect 10 53 tolerance 0.01 m accept 8.66277083 53 expect 11 53 -------------------------------------------------------------------------------- operation +proj=pipeline \ +step +init=epsg:4275 +inv \ +step +init=epsg:4807 -------------------------------------------------------------------------------- tolerance 0.01 m accept 5 58 roundtrip 1000 tolerance 0.01 m accept 5 56 roundtrip 1000 tolerance 0.01 m accept 5 55 roundtrip 1000 tolerance 0.01 m accept 5 53 roundtrip 1000 tolerance 0.01 m accept 4 51 roundtrip 1000 tolerance 0.01 m accept 4 49 roundtrip 1000 tolerance 0.01 m accept 2.33722917 46.8 roundtrip 1000 tolerance 0.01 m accept 3 53 roundtrip 1000 tolerance 0.01 m accept 4 53 roundtrip 1000 tolerance 0.01 m accept 6 53 roundtrip 1000 tolerance 0.01 m accept 7 53 roundtrip 1000 tolerance 0.01 m accept 9 53 roundtrip 1000 tolerance 0.01 m accept 10 53 roundtrip 1000 tolerance 0.01 m accept 11 53 roundtrip 1000 proj-9.6.0/test/unit/000775 001754 001755 00000000000 14764566152 014351 5ustar00e012349e012349000000 000000 proj-9.6.0/test/unit/CMakeLists.txt000664 001754 001755 00000017214 14764566077 017124 0ustar00e012349e012349000000 000000 # CMake configuration for PROJ unit tests # External GTest provided by (e.g.) libgtest-dev set(MIN_GTest_VERSION "1.8.1") if(NOT CMAKE_REQUIRED_QUIET) # CMake 3.17+ use CHECK_START/CHECK_PASS/CHECK_FAIL message(STATUS "Looking for GTest") endif() find_package(GTest QUIET) set(USE_EXTERNAL_GTEST_DEFAULT OFF) if(GTest_FOUND) if(NOT CMAKE_REQUIRED_QUIET) message(STATUS "Looking for GTest - found (${GTest_VERSION})") endif() if(GTest_VERSION VERSION_LESS MIN_GTest_VERSION) message(WARNING "External GTest version is too old") else() set(USE_EXTERNAL_GTEST_DEFAULT ON) endif() else() if(NOT CMAKE_REQUIRED_QUIET) message(STATUS "Looking for GTest - not found") endif() endif() option(USE_EXTERNAL_GTEST "Compile against external GTest" ${USE_EXTERNAL_GTEST_DEFAULT} ) if(USE_EXTERNAL_GTEST) if(NOT GTest_FOUND) message(SEND_ERROR "External GTest >= ${MIN_GTest_VERSION} not found, \ skipping some tests") # exit the remainder of this file return() endif() message(STATUS "Using external GTest") # CMake < 3.20.0 uses GTest::GTest # CMake >= 3.20 uses GTest::gtest, and deprecates GTest::GTest # so for older CMake, create an alias from GTest::GTest to GTest::gtest if(NOT TARGET GTest::gtest) add_library(GTest::gtest INTERFACE IMPORTED) set_target_properties(GTest::gtest PROPERTIES INTERFACE_LINK_LIBRARIES "GTest::GTest") endif() elseif(HAS_NETWORK) message(STATUS "Fetching GTest from GitHub ...") # Add Google Test # # See https://github.com/google/googletest/blob/main/googletest/README.md if(POLICY CMP0135) cmake_policy(SET CMP0135 NEW) # for DOWNLOAD_EXTRACT_TIMESTAMP option endif() set(GTEST_VERSION "1.15.2") include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/refs/tags/v${GTEST_VERSION}.zip EXCLUDE_FROM_ALL # ignored before CMake 3.28 ) # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.28.0") FetchContent_MakeAvailable(googletest) else() # Pre CMake 3.28 workaround to prevent installing files FetchContent_GetProperties(googletest) if(NOT googletest_POPULATED) FetchContent_Populate(googletest) add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL) endif() endif() else() if(TESTING_USE_NETWORK) set(_msg_detail "install GTest dependency") else() set(_msg_detail "either install GTest dependency, or if possible, \ set TESTING_USE_NETWORK=ON to fetch content from GitHub" ) endif() message(WARNING "Tests that require GTest will be skipped; ${_msg_detail}") # exit the remainder of this file return() endif() # # Build PROJ unit tests # include_directories(${PROJ_SOURCE_DIR}/include) # Add the directory containing proj_config.h include_directories(${PROJ_BINARY_DIR}/src) # Apply to targets in the current directory and below add_compile_options("$<$:${PROJ_C_WARN_FLAGS}>") add_compile_options("$<$:${PROJ_CXX_WARN_FLAGS}>") set(PROJ_TEST_ENVIRONMENT "PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES" "PROJ_DATA=${PROJ_BINARY_DIR}/data/for_tests" "PROJ_SOURCE_DATA=${PROJ_SOURCE_DIR}/data" ) add_executable(proj_errno_string_test main.cpp proj_errno_string_test.cpp) target_link_libraries(proj_errno_string_test PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME proj_errno_string_test COMMAND proj_errno_string_test) set_property(TEST proj_errno_string_test PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) add_executable(proj_angular_io_test main.cpp proj_angular_io_test.cpp) target_link_libraries(proj_angular_io_test PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME proj_angular_io_test COMMAND proj_angular_io_test) set_property(TEST proj_angular_io_test PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) add_executable(proj_context_test main.cpp proj_context_test.cpp) target_link_libraries(proj_context_test PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME proj_context_test COMMAND proj_context_test) set_property(TEST proj_context_test PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) if(MSVC AND BUILD_SHARED_LIBS) # ph_phi2_test not compatible of a .dll build else() add_executable(pj_phi2_test main.cpp pj_phi2_test.cpp) target_link_libraries(pj_phi2_test PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME pj_phi2_test COMMAND pj_phi2_test) set_property(TEST pj_phi2_test PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) endif() set(PROJ_TEST_CPP_API_SOURCES main.cpp test_util.cpp test_common.cpp test_coordinates.cpp test_crs.cpp test_metadata.cpp test_io.cpp test_operation.cpp test_operationfactory.cpp test_datum.cpp test_factory.cpp test_c_api.cpp test_grids.cpp) add_executable(proj_test_cpp_api ${PROJ_TEST_CPP_API_SOURCES}) set_property(SOURCE ${PROJ_TEST_CPP_API_SOURCES} PROPERTY SKIP_UNITY_BUILD_INCLUSION ON) target_link_libraries(proj_test_cpp_api PRIVATE GTest::gtest PRIVATE SQLite::SQLite3 PRIVATE ${PROJ_LIBRARIES}) add_test(NAME proj_test_cpp_api COMMAND proj_test_cpp_api) set_property(TEST proj_test_cpp_api PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) if(TIFF_ENABLED) target_compile_definitions(proj_test_cpp_api PRIVATE -DTIFF_ENABLED) endif() if(EMBED_RESOURCE_FILES) target_compile_definitions(proj_test_cpp_api PRIVATE EMBED_RESOURCE_FILES) endif() if (USE_ONLY_EMBEDDED_RESOURCE_FILES) target_compile_definitions(proj_test_cpp_api PRIVATE USE_ONLY_EMBEDDED_RESOURCE_FILES) endif() add_executable(gie_self_tests main.cpp gie_self_tests.cpp) target_link_libraries(gie_self_tests PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME gie_self_tests COMMAND gie_self_tests) set_property(TEST gie_self_tests PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) if(TIFF_ENABLED) target_compile_definitions(gie_self_tests PRIVATE -DTIFF_ENABLED) endif() add_executable(test_network main.cpp test_network.cpp) if(CURL_ENABLED) target_compile_definitions(test_network PRIVATE -DCURL_ENABLED) target_link_libraries(test_network PRIVATE CURL::libcurl) endif() target_link_libraries(test_network PRIVATE GTest::gtest PRIVATE SQLite::SQLite3 PRIVATE ${PROJ_LIBRARIES}) if(TIFF_ENABLED) add_test(NAME test_network COMMAND test_network) set_property(TEST test_network PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) endif() add_executable(test_defmodel main.cpp test_defmodel.cpp) target_link_libraries(test_defmodel PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME test_defmodel COMMAND test_defmodel) set_property(TEST test_defmodel PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) add_executable(test_tinshift main.cpp test_tinshift.cpp) target_link_libraries(test_tinshift PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME test_tinshift COMMAND test_tinshift) set_property(TEST test_tinshift PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) add_executable(test_misc main.cpp test_misc.cpp) target_link_libraries(test_misc PRIVATE GTest::gtest PRIVATE ${PROJ_LIBRARIES}) add_test(NAME test_misc COMMAND test_misc) set_property(TEST test_misc PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) if (Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) add_definitions(-DPROJ_HAS_PTHREADS) add_executable(test_fork test_fork.c) target_link_libraries(test_fork PRIVATE ${PROJ_LIBRARIES} PRIVATE ${CMAKE_THREAD_LIBS_INIT}) add_test(NAME test_fork COMMAND test_fork) set_property(TEST test_fork PROPERTY ENVIRONMENT ${PROJ_TEST_ENVIRONMENT}) endif() proj-9.6.0/test/unit/gie_self_tests.cpp000664 001754 001755 00000145334 14764566077 020074 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2017, Thomas Knudsen * Copyright (c) 2017, SDFE * * 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 "gtest_include.h" // PROJ include order is sensitive // clang-format off #include "proj.h" #include "proj_internal.h" // clang-format on #include #include namespace { // --------------------------------------------------------------------------- TEST(gie, cart_selftest) { PJ_CONTEXT *ctx; PJ *P; PJ_COORD a, b, obs[2]; PJ_COORD coord[3]; size_t n, sz; double dist, h, t; const char *const args[3] = {"proj=utm", "zone=32", "ellps=GRS80"}; char arg[50] = {"+proj=utm; +zone=32; +ellps=GRS80"}; /* An utm projection on the GRS80 ellipsoid */ P = proj_create(PJ_DEFAULT_CTX, arg); ASSERT_TRUE(P != nullptr); /* Clean up */ proj_destroy(P); /* Same projection, now using argc/argv style initialization */ P = proj_create_argv(PJ_DEFAULT_CTX, 3, const_cast(args)); ASSERT_TRUE(P != nullptr); /* zero initialize everything, then set (longitude, latitude) to (12, 55) */ a = proj_coord(0, 0, 0, 0); /* a.lp: The coordinate part of a, interpreted as a classic LP pair */ a.lp.lam = proj_torad(12); a.lp.phi = proj_torad(55); /* Forward projection */ b = proj_trans(P, PJ_FWD, a); /* Inverse projection */ a = proj_trans(P, PJ_INV, b); /* Null projection */ a = proj_trans(P, PJ_IDENT, a); /* Forward again, to get two linear items for comparison */ a = proj_trans(P, PJ_FWD, a); dist = proj_xy_dist(a, b); ASSERT_LE(dist, 2e-9); /* Clear any previous error */ proj_errno_reset(P); /* Clean up */ proj_destroy(P); /* Now do some 3D transformations */ P = proj_create(PJ_DEFAULT_CTX, "+proj=cart +ellps=GRS80"); ASSERT_TRUE(P != nullptr); /* zero initialize everything, then set (longitude, latitude, height) to * (12, 55, 100) */ a = b = proj_coord(0, 0, 0, 0); a.lpz.lam = proj_torad(12); a.lpz.phi = proj_torad(55); a.lpz.z = 100; /* Forward projection: 3D-Cartesian-to-Ellipsoidal */ b = proj_trans(P, PJ_FWD, a); /* Check roundtrip precision for 10000 iterations each way */ dist = proj_roundtrip(P, PJ_FWD, 10000, &a); dist += proj_roundtrip(P, PJ_INV, 10000, &b); ASSERT_LE(dist, 4e-9); /* Test at the North Pole */ a = b = proj_coord(0, 0, 0, 0); a.lpz.lam = proj_torad(0); a.lpz.phi = proj_torad(90); a.lpz.z = 100; /* Forward projection: Ellipsoidal-to-3D-Cartesian */ dist = proj_roundtrip(P, PJ_FWD, 1, &a); ASSERT_LE(dist, 1e-9); /* Test at the South Pole */ a = b = proj_coord(0, 0, 0, 0); a.lpz.lam = proj_torad(0); a.lpz.phi = proj_torad(-90); a.lpz.z = 100; b = a; /* Forward projection: Ellipsoidal-to-3D-Cartesian */ dist = proj_roundtrip(P, PJ_FWD, 1, &a); ASSERT_LE(dist, 4e-9); /* Inverse projection: 3D-Cartesian-to-Ellipsoidal */ b = proj_trans(P, PJ_INV, b); /* Move p to another context */ ctx = proj_context_create(); ASSERT_NE(ctx, pj_get_default_ctx()); proj_context_set(P, ctx); ASSERT_EQ(ctx, P->ctx); b = proj_trans(P, PJ_FWD, b); /* Move it back to the default context */ proj_context_set(P, nullptr); ASSERT_EQ(pj_get_default_ctx(), P->ctx); proj_context_destroy(ctx); /* We go on with the work - now back on the default context */ b = proj_trans(P, PJ_INV, b); proj_destroy(P); /* Testing proj_trans_generic () */ /* An utm projection on the GRS80 ellipsoid */ P = proj_create(PJ_DEFAULT_CTX, "+proj=utm +zone=32 +ellps=GRS80"); ASSERT_TRUE(P != nullptr); obs[0] = proj_coord(proj_torad(12), proj_torad(55), 45, 0); obs[1] = proj_coord(proj_torad(12), proj_torad(56), 50, 0); sz = sizeof(PJ_COORD); /* Forward projection */ a = proj_trans(P, PJ_FWD, obs[0]); b = proj_trans(P, PJ_FWD, obs[1]); n = proj_trans_generic(P, PJ_FWD, &(obs[0].lpz.lam), sz, 2, &(obs[0].lpz.phi), sz, 2, &(obs[0].lpz.z), sz, 2, nullptr, sz, 0); ASSERT_EQ(n, 2U); ASSERT_EQ(a.lpz.lam, obs[0].lpz.lam); ASSERT_EQ(a.lpz.phi, obs[0].lpz.phi); ASSERT_EQ(a.lpz.z, obs[0].lpz.z); ASSERT_EQ(b.lpz.lam, obs[1].lpz.lam); ASSERT_EQ(b.lpz.phi, obs[1].lpz.phi); ASSERT_EQ(b.lpz.z, obs[1].lpz.z); /* now test the case of constant z */ obs[0] = proj_coord(proj_torad(12), proj_torad(55), 45, 0); obs[1] = proj_coord(proj_torad(12), proj_torad(56), 50, 0); h = 27; t = 33; n = proj_trans_generic(P, PJ_FWD, &(obs[0].lpz.lam), sz, 2, &(obs[0].lpz.phi), sz, 2, &h, 0, 1, &t, 0, 1); ASSERT_EQ(n, 2U); ASSERT_EQ(a.lpz.lam, obs[0].lpz.lam); ASSERT_EQ(a.lpz.phi, obs[0].lpz.phi); ASSERT_EQ(45, obs[0].lpz.z); ASSERT_EQ(b.lpz.lam, obs[1].lpz.lam); ASSERT_EQ(b.lpz.phi, obs[1].lpz.phi); ASSERT_EQ(50, obs[1].lpz.z); ASSERT_NE(50, h); /* test proj_trans_array () */ coord[0] = proj_coord(proj_torad(12), proj_torad(55), 45, 0); coord[1] = proj_coord(proj_torad(12), proj_torad(56), 50, 0); ASSERT_EQ(proj_trans_array(P, PJ_FWD, 2, coord), 0); ASSERT_EQ(a.lpz.lam, coord[0].lpz.lam); ASSERT_EQ(a.lpz.phi, coord[0].lpz.phi); ASSERT_EQ(a.lpz.z, coord[0].lpz.z); ASSERT_EQ(b.lpz.lam, coord[1].lpz.lam); ASSERT_EQ(b.lpz.phi, coord[1].lpz.phi); ASSERT_EQ(b.lpz.z, coord[1].lpz.z); /* test proj_trans_array () with two failed points for the same reason */ coord[0] = proj_coord(proj_torad(12), proj_torad(95), 45, 0); // invalid latitude coord[1] = proj_coord(proj_torad(12), proj_torad(56), 50, 0); coord[2] = proj_coord(proj_torad(12), proj_torad(95), 45, 0); // invalid latitude ASSERT_EQ(proj_trans_array(P, PJ_FWD, 3, coord), PROJ_ERR_COORD_TRANSFM_INVALID_COORD); ASSERT_EQ(HUGE_VAL, coord[0].lpz.lam); ASSERT_EQ(HUGE_VAL, coord[0].lpz.phi); ASSERT_EQ(HUGE_VAL, coord[0].lpz.z); ASSERT_EQ(b.lpz.lam, coord[1].lpz.lam); ASSERT_EQ(b.lpz.phi, coord[1].lpz.phi); ASSERT_EQ(b.lpz.z, coord[1].lpz.z); ASSERT_EQ(HUGE_VAL, coord[2].lpz.lam); ASSERT_EQ(HUGE_VAL, coord[2].lpz.phi); ASSERT_EQ(HUGE_VAL, coord[2].lpz.z); /* test proj_trans_array () with two failed points for different reasons */ coord[0] = proj_coord(proj_torad(12), proj_torad(95), 45, 0); // invalid latitude coord[1] = proj_coord(proj_torad(105), proj_torad(0), 45, 0); // in the equatorial axis, at 90° of the central meridian ASSERT_EQ(proj_trans_array(P, PJ_FWD, 2, coord), PROJ_ERR_COORD_TRANSFM); /* Clean up after proj_trans_* tests */ proj_destroy(P); } // --------------------------------------------------------------------------- class gieTest : public ::testing::Test { static void DummyLogFunction(void *, int, const char *) {} protected: void SetUp() override { m_ctxt = proj_context_create(); proj_log_func(m_ctxt, nullptr, DummyLogFunction); } void TearDown() override { proj_context_destroy(m_ctxt); } PJ_CONTEXT *m_ctxt = nullptr; }; // --------------------------------------------------------------------------- TEST_F(gieTest, proj_create_crs_to_crs) { /* test proj_create_crs_to_crs() */ auto P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "epsg:25832", "epsg:25833", nullptr); ASSERT_TRUE(P != nullptr); PJ_COORD a, b; a.xyzt.x = 700000.0; a.xyzt.y = 6000000.0; a.xyzt.z = 0; a.xyzt.t = HUGE_VAL; b.xy.x = 307788.8761171057; b.xy.y = 5999669.3036037628; a = proj_trans(P, PJ_FWD, a); EXPECT_NEAR(a.xy.x, b.xy.x, 1e-8); EXPECT_NEAR(a.xy.y, b.xy.y, 1e-8); auto src = proj_get_source_crs(PJ_DEFAULT_CTX, P); ASSERT_TRUE(src != nullptr); EXPECT_EQ(proj_get_name(src), std::string("ETRS89 / UTM zone 32N")); proj_destroy(src); proj_destroy(P); /* we can also allow PROJ strings as a usable PJ */ P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "proj=utm +zone=32 +datum=WGS84", "proj=utm +zone=33 +datum=WGS84", nullptr); ASSERT_TRUE(P != nullptr); proj_destroy(P); EXPECT_TRUE(proj_create_crs_to_crs(m_ctxt, "invalid", "EPSG:25833", NULL) == nullptr); EXPECT_TRUE(proj_create_crs_to_crs(m_ctxt, "EPSG:25832", "invalid", NULL) == nullptr); } // --------------------------------------------------------------------------- TEST_F(gieTest, proj_create_crs_to_crs_EPSG_4326) { auto P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "EPSG:4326", "EPSG:32631", nullptr); ASSERT_TRUE(P != nullptr); PJ_COORD a, b; // Lat, long degrees a.xyzt.x = 0.0; a.xyzt.y = 3.0; a.xyzt.z = 0; a.xyzt.t = HUGE_VAL; b.xy.x = 500000.0; b.xy.y = 0.0; a = proj_trans(P, PJ_FWD, a); EXPECT_NEAR(a.xy.x, b.xy.x, 1e-9); EXPECT_NEAR(a.xy.y, b.xy.y, 1e-9); proj_destroy(P); } // --------------------------------------------------------------------------- TEST_F(gieTest, proj_create_crs_to_crs_proj_longlat) { auto P = proj_create_crs_to_crs( PJ_DEFAULT_CTX, "+proj=longlat +datum=WGS84", "EPSG:32631", nullptr); ASSERT_TRUE(P != nullptr); PJ_COORD a, b; // Long, lat degrees a.xyzt.x = 3.0; a.xyzt.y = 0; a.xyzt.z = 0; a.xyzt.t = HUGE_VAL; b.xy.x = 500000.0; b.xy.y = 0.0; a = proj_trans(P, PJ_FWD, a); EXPECT_NEAR(a.xy.x, b.xy.x, 1e-9); EXPECT_NEAR(a.xy.y, b.xy.y, 1e-9); proj_destroy(P); } // --------------------------------------------------------------------------- TEST(gie, info_functions) { PJ_INFO info; PJ_PROJ_INFO pj_info; PJ_GRID_INFO grid_info; PJ_INIT_INFO init_info; PJ_FACTORS factors; const PJ_OPERATIONS *oper_list; const PJ_ELLPS *ellps_list; const PJ_PRIME_MERIDIANS *pm_list; std::vector buf(40); PJ *P; char arg[50] = {"+proj=utm; +zone=32; +ellps=GRS80"}; PJ_COORD a; /* ********************************************************************** */ /* Test info functions */ /* ********************************************************************** */ /* proj_info() */ /* this one is difficult to test, since the output changes with the setup */ putenv(const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=")); info = proj_info(); putenv(const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES")); if (info.version[0] != '\0') { char tmpstr[64]; snprintf(tmpstr, sizeof(tmpstr), "%d.%d.%d", info.major, info.minor, info.patch); ASSERT_EQ(std::string(info.version), std::string(tmpstr)); } ASSERT_NE(std::string(info.release), ""); if (getenv("HOME") || getenv("PROJ_LIB") || getenv("PROJ_DATA")) { ASSERT_NE(std::string(info.searchpath), std::string()); } ASSERT_TRUE(std::string(info.searchpath).find("/proj") != std::string::npos); /* proj_pj_info() */ { P = proj_create(PJ_DEFAULT_CTX, "+proj=august"); /* august has no inverse */ auto has_inverse = proj_pj_info(P).has_inverse; proj_destroy(P); ASSERT_FALSE(has_inverse); } P = proj_create(PJ_DEFAULT_CTX, arg); pj_info = proj_pj_info(P); ASSERT_TRUE(pj_info.has_inverse); pj_shrink(arg); ASSERT_EQ(std::string(pj_info.definition), arg); ASSERT_EQ(std::string(pj_info.id), "utm"); proj_destroy(P); #ifdef TIFF_ENABLED /* proj_grid_info() */ grid_info = proj_grid_info("tests/test_hgrid.tif"); ASSERT_NE(std::string(grid_info.filename), ""); ASSERT_EQ(std::string(grid_info.gridname), "tests/test_hgrid.tif"); ASSERT_EQ(std::string(grid_info.format), "gtiff"); EXPECT_EQ(grid_info.n_lon, 4); EXPECT_EQ(grid_info.n_lat, 4); EXPECT_NEAR(grid_info.cs_lon, 0.017453292519943295, 1e-15); EXPECT_NEAR(grid_info.cs_lat, 0.017453292519943295, 1e-15); EXPECT_NEAR(grid_info.lowerleft.lam, 0.069813170079773182, 1e-15); EXPECT_NEAR(grid_info.lowerleft.phi, 0.90757121103705141, 1e-15); EXPECT_NEAR(grid_info.upperright.lam, 0.12217304763960307, 1e-15); EXPECT_NEAR(grid_info.upperright.phi, 0.95993108859688125, 1e-15); #endif grid_info = proj_grid_info("nonexistinggrid"); ASSERT_EQ(std::string(grid_info.filename), ""); // File exists, but is not a grid grid_info = proj_grid_info("proj.db"); ASSERT_EQ(std::string(grid_info.filename), ""); /* proj_init_info() */ init_info = proj_init_info("unknowninit"); ASSERT_EQ(std::string(init_info.filename), ""); init_info = proj_init_info("epsg"); /* Need to allow for "Unknown" until all commonly distributed EPSG-files * comes with a metadata section */ ASSERT_TRUE(std::string(init_info.origin) == "EPSG" || std::string(init_info.origin) == "Unknown") << std::string(init_info.origin); ASSERT_EQ(std::string(init_info.name), "epsg"); /* test proj_rtodms() and proj_dmstor() */ ASSERT_EQ(std::string("180dN"), proj_rtodms2(&buf[0], buf.size(), M_PI, 'N', 'S')); ASSERT_EQ(proj_dmstor(&buf[0], NULL), M_PI); ASSERT_EQ(std::string("114d35'29.612\"S"), proj_rtodms2(&buf[0], buf.size(), -2.0, 'N', 'S')); // buffer of just one byte ASSERT_EQ(std::string(""), proj_rtodms2(&buf[0], 1, -2.0, 'N', 'S')); // last character truncated ASSERT_EQ(std::string("114d35'29.612\""), proj_rtodms2(&buf[0], 15, -2.0, 'N', 'S')); // just enough bytes to store the string and the terminating nul character ASSERT_EQ(std::string("114d35'29.612\"S"), proj_rtodms2(&buf[0], 16, -2.0, 'N', 'S')); // buffer of just one byte ASSERT_EQ(std::string(""), proj_rtodms2(&buf[0], 1, -2.0, 0, 0)); // last character truncated ASSERT_EQ(std::string("-114d35'29.612"), proj_rtodms2(&buf[0], 15, -2.0, 0, 0)); // just enough bytes to store the string and the terminating nul character ASSERT_EQ(std::string("-114d35'29.612\""), proj_rtodms2(&buf[0], 16, -2.0, 0, 0)); /* we can't expect perfect numerical accuracy so testing with a tolerance */ ASSERT_NEAR(-2.0, proj_dmstor(&buf[0], NULL), 1e-7); /* test UTF-8 degree sign on DMS input */ ASSERT_NEAR(0.34512432, proj_dmstor("19°46'27\"E", NULL), 1e-7); /* test ISO 8859-1, cp1252, et al. degree sign on DMS input */ ASSERT_NEAR(0.34512432, proj_dmstor("19" "\260" "46'27\"E", NULL), 1e-7); /* test proj_derivatives_retrieve() and proj_factors_retrieve() */ P = proj_create(PJ_DEFAULT_CTX, "+proj=merc +ellps=WGS84"); a = proj_coord(0, 0, 0, 0); a.lp.lam = proj_torad(12); a.lp.phi = proj_torad(55); factors = proj_factors(P, a); ASSERT_FALSE(proj_errno(P)); /* factors not created correctly */ /* check a few key characteristics of the Mercator projection */ EXPECT_NEAR(factors.angular_distortion, 0.0, 1e-7) << factors.angular_distortion; /* angular distortion should be 0 */ /* Meridian/parallel angle should be 90 deg */ EXPECT_NEAR(factors.meridian_parallel_angle, M_PI_2, 1e-7) << factors.meridian_parallel_angle; EXPECT_EQ(factors.meridian_convergence, 0.0); /* meridian convergence should be 0 */ proj_destroy(P); // Test with a projected CRS { P = proj_create(PJ_DEFAULT_CTX, "EPSG:3395"); const auto factors2 = proj_factors(P, a); EXPECT_EQ(factors.angular_distortion, factors2.angular_distortion); EXPECT_EQ(factors.meridian_parallel_angle, factors2.meridian_parallel_angle); EXPECT_EQ(factors.meridian_convergence, factors2.meridian_convergence); EXPECT_EQ(factors.tissot_semimajor, factors2.tissot_semimajor); proj_destroy(P); } // Test with a projected CRS with feet unit { PJ_COORD c; c.lp.lam = proj_torad(-110); c.lp.phi = proj_torad(30); P = proj_create(PJ_DEFAULT_CTX, "+proj=tmerc +lat_0=31 +lon_0=-110.166666666667 " "+k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft"); factors = proj_factors(P, c); EXPECT_NEAR(factors.meridional_scale, 0.99990319, 1e-8) << factors.meridional_scale; EXPECT_NEAR(factors.parallel_scale, 0.99990319, 1e-8) << factors.parallel_scale; EXPECT_NEAR(factors.angular_distortion, 0, 1e-7) << factors.angular_distortion; EXPECT_NEAR(factors.meridian_parallel_angle, M_PI_2, 1e-7) << factors.meridian_parallel_angle; proj_destroy(P); P = proj_create(PJ_DEFAULT_CTX, "EPSG:2222"); const auto factors2 = proj_factors(P, c); EXPECT_NEAR(factors.meridional_scale, factors2.meridional_scale, 1e-10); EXPECT_NEAR(factors.parallel_scale, factors2.parallel_scale, 1e-10); EXPECT_NEAR(factors.angular_distortion, factors2.angular_distortion, 1e-10); EXPECT_NEAR(factors.meridian_parallel_angle, factors2.meridian_parallel_angle, 1e-109); proj_destroy(P); } // Test with a projected CRS with northing, easting axis order { PJ_COORD c; c.lp.lam = proj_torad(9); c.lp.phi = proj_torad(0); P = proj_create(PJ_DEFAULT_CTX, "+proj=utm +zone=32 +ellps=GRS80"); factors = proj_factors(P, c); EXPECT_NEAR(factors.meridional_scale, 0.9996, 1e-8) << factors.meridional_scale; EXPECT_NEAR(factors.parallel_scale, 0.9996, 1e-8) << factors.parallel_scale; EXPECT_NEAR(factors.angular_distortion, 0, 1e-7) << factors.angular_distortion; EXPECT_NEAR(factors.meridian_parallel_angle, M_PI_2, 1e-7) << factors.meridian_parallel_angle; proj_destroy(P); P = proj_create(PJ_DEFAULT_CTX, "EPSG:3044"); const auto factors2 = proj_factors(P, c); EXPECT_NEAR(factors.meridional_scale, factors2.meridional_scale, 1e-10); EXPECT_NEAR(factors.parallel_scale, factors2.parallel_scale, 1e-10); EXPECT_NEAR(factors.angular_distortion, factors2.angular_distortion, 1e-10); EXPECT_NEAR(factors.meridian_parallel_angle, factors2.meridian_parallel_angle, 1e-109); proj_destroy(P); } // Test with a projected CRS whose datum has a non-Greenwich prime meridian { P = proj_create(PJ_DEFAULT_CTX, "EPSG:27571"); PJ_COORD c; c.lp.lam = proj_torad(0.0689738); c.lp.phi = proj_torad(49.508567); const auto factors2 = proj_factors(P, c); EXPECT_NEAR(factors2.meridional_scale, 1 - 12.26478760 * 1e-5, 1e-8); proj_destroy(P); } // Test with a compound CRS of a projected CRS { P = proj_create(PJ_DEFAULT_CTX, "EPSG:5972"); PJ_COORD c; c.lp.lam = proj_torad(10.729030600); c.lp.phi = proj_torad(59.916494500); { const auto factors2 = proj_factors(P, c); EXPECT_NEAR(factors2.meridional_scale, 1 - 28.54587730 * 1e-5, 1e-8); } // Try again to test caching of internal objects { const auto factors2 = proj_factors(P, c); EXPECT_NEAR(factors2.meridional_scale, 1 - 28.54587730 * 1e-5, 1e-8); } proj_destroy(P); } // Test with a geographic CRS --> error { P = proj_create(PJ_DEFAULT_CTX, "EPSG:4326"); const auto factors2 = proj_factors(P, a); EXPECT_NE(proj_errno(P), 0); proj_errno_reset(P); EXPECT_EQ(factors2.meridian_parallel_angle, 0); proj_destroy(P); } /* Check that proj_list_* functions work by looping through them */ size_t n = 0; for (oper_list = proj_list_operations(); oper_list->id; ++oper_list) n++; ASSERT_NE(n, 0U); n = 0; for (ellps_list = proj_list_ellps(); ellps_list->id; ++ellps_list) n++; ASSERT_NE(n, 0U); n = 0; for (pm_list = proj_list_prime_meridians(); pm_list->id; ++pm_list) n++; /* hard-coded prime meridians are not updated; expect a fixed size */ EXPECT_EQ(n, 14U); } // --------------------------------------------------------------------------- TEST(gie, io_predicates) { /* check io-predicates */ /* angular in on fwd, linear out */ auto P = proj_create(PJ_DEFAULT_CTX, "+proj=cart +ellps=GRS80"); ASSERT_TRUE(P != nullptr); ASSERT_TRUE(proj_angular_input(P, PJ_FWD)); ASSERT_FALSE(proj_angular_input(P, PJ_INV)); ASSERT_FALSE(proj_angular_output(P, PJ_FWD)); ASSERT_TRUE(proj_angular_output(P, PJ_INV)); P->inverted = 1; ASSERT_FALSE(proj_angular_input(P, PJ_FWD)); ASSERT_TRUE(proj_angular_input(P, PJ_INV)); ASSERT_TRUE(proj_angular_output(P, PJ_FWD)); ASSERT_FALSE(proj_angular_output(P, PJ_INV)); proj_destroy(P); /* angular in and out */ P = proj_create(PJ_DEFAULT_CTX, "+proj=molodensky +a=6378160 +rf=298.25 " "+da=-23 +df=-8.120449e-8 +dx=-134 +dy=-48 +dz=149 " "+abridged "); ASSERT_TRUE(P != nullptr); ASSERT_TRUE(proj_angular_input(P, PJ_FWD)); ASSERT_TRUE(proj_angular_input(P, PJ_INV)); ASSERT_TRUE(proj_angular_output(P, PJ_FWD)); ASSERT_TRUE(proj_angular_output(P, PJ_INV)); P->inverted = 1; ASSERT_TRUE(proj_angular_input(P, PJ_FWD)); ASSERT_TRUE(proj_angular_input(P, PJ_INV)); ASSERT_TRUE(proj_angular_output(P, PJ_FWD)); ASSERT_TRUE(proj_angular_output(P, PJ_INV)); proj_destroy(P); /* linear in and out */ P = proj_create(PJ_DEFAULT_CTX, " +proj=helmert" " +x=0.0127 +y=0.0065 +z=-0.0209 +s=0.00195" " +rx=-0.00039 +ry=0.00080 +rz=-0.00114" " +dx=-0.0029 +dy=-0.0002 +dz=-0.0006 +ds=0.00001" " +drx=-0.00011 +dry=-0.00019 +drz=0.00007" " +t_epoch=1988.0 +convention=coordinate_frame"); ASSERT_TRUE(P != nullptr); ASSERT_FALSE(proj_angular_input(P, PJ_FWD)); ASSERT_FALSE(proj_angular_input(P, PJ_INV)); ASSERT_FALSE(proj_angular_output(P, PJ_FWD)); ASSERT_FALSE(proj_angular_output(P, PJ_INV)); P->inverted = 1; ASSERT_FALSE(proj_angular_input(P, PJ_FWD)); ASSERT_FALSE(proj_angular_input(P, PJ_INV)); ASSERT_FALSE(proj_angular_output(P, PJ_FWD)); ASSERT_FALSE(proj_angular_output(P, PJ_INV)); /* pj_init_ctx should default to GRS80 */ ASSERT_EQ(P->a, 6378137.0); ASSERT_EQ(P->f, 1.0 / 298.257222101); proj_destroy(P); /* Test that pj_fwd* and pj_inv* returns NaNs when receiving NaN input */ P = proj_create(PJ_DEFAULT_CTX, "+proj=merc +ellps=WGS84"); ASSERT_TRUE(P != nullptr); auto a = proj_coord(NAN, NAN, NAN, NAN); a = proj_trans(P, PJ_FWD, a); ASSERT_TRUE((std::isnan(a.v[0]) && std::isnan(a.v[1]) && std::isnan(a.v[2]) && std::isnan(a.v[3]))); a = proj_coord(NAN, NAN, NAN, NAN); a = proj_trans(P, PJ_INV, a); ASSERT_TRUE((std::isnan(a.v[0]) && std::isnan(a.v[1]) && std::isnan(a.v[2]) && std::isnan(a.v[3]))); proj_destroy(P); } // --------------------------------------------------------------------------- static void test_time(const char *args, double tol, double t_in, double t_exp) { PJ_COORD in, out; PJ *P = proj_create(PJ_DEFAULT_CTX, args); ASSERT_TRUE(P != nullptr); in = proj_coord(0.0, 0.0, 0.0, t_in); out = proj_trans(P, PJ_FWD, in); EXPECT_NEAR(out.xyzt.t, t_exp, tol); out = proj_trans(P, PJ_INV, out); EXPECT_NEAR(out.xyzt.t, t_in, tol); proj_destroy(P); proj_log_level(nullptr, PJ_LOG_NONE); } // --------------------------------------------------------------------------- TEST(gie, unitconvert_selftest) { char args1[] = "+proj=unitconvert +t_in=decimalyear +t_out=decimalyear"; double in1 = 2004.25; char args2[] = "+proj=unitconvert +t_in=gps_week +t_out=gps_week"; double in2 = 1782.0; char args3[] = "+proj=unitconvert +t_in=mjd +t_out=mjd"; double in3 = 57390.0; char args4[] = "+proj=unitconvert +t_in=gps_week +t_out=decimalyear"; double in4 = 1877.71428, exp4 = 2016.0; char args5[] = "+proj=unitconvert +t_in=yyyymmdd +t_out=yyyymmdd"; double in5 = 20170131; test_time(args1, 1e-6, in1, in1); test_time(args2, 1e-6, in2, in2); test_time(args3, 1e-6, in3, in3); test_time(args4, 1e-6, in4, exp4); test_time(args5, 1e-6, in5, in5); } static void test_date(const char *args, double tol, double t_in, double t_exp) { PJ_COORD in, out; PJ *P = proj_create(PJ_DEFAULT_CTX, args); ASSERT_TRUE(P != nullptr); in = proj_coord(0.0, 0.0, 0.0, t_in); out = proj_trans(P, PJ_FWD, in); EXPECT_NEAR(out.xyzt.t, t_exp, tol); proj_destroy(P); proj_log_level(nullptr, PJ_LOG_NONE); } TEST(gie, unitconvert_selftest_date) { char args[] = "+proj=unitconvert +t_in=decimalyear +t_out=yyyymmdd"; test_date(args, 1e-6, 2022.0027, 20220102); test_date(args, 1e-6, 1990.0, 19900101); test_date(args, 1e-6, 2004.1612, 20040229); test_date(args, 1e-6, 1899.999, 19000101); strcpy(&args[18], "+t_in=yyyymmdd +t_out=decimalyear"); test_date(args, 1e-6, 20220102, 2022.0027397); test_date(args, 1e-6, 19900101, 1990.0); test_date(args, 1e-6, 20040229, 2004.1612022); test_date(args, 1e-6, 18991231, 1899.9972603); } static const char tc32_utm32[] = { " +proj=horner" " +ellps=intl" " +range=500000" " +fwd_origin=877605.269066,6125810.306769" " +inv_origin=877605.760036,6125811.281773" " +deg=4" " +fwd_v=6.1258112678e+06,9.9999971567e-01,1.5372750011e-10,5.9300860915e-" "15,2.2609497633e-19,4.3188227445e-05,2.8225130416e-10,7.8740007114e-16,-1." "7453997279e-19,1.6877465415e-10,-1.1234649773e-14,-1.7042333358e-18,-7." "9303467953e-15,-5.2906832535e-19,3.9984284847e-19" " +fwd_u=8.7760574982e+05,9.9999752475e-01,2.8817299305e-10,5.5641310680e-" "15,-1.5544700949e-18,-4.1357045890e-05,4.2106213519e-11,2.8525551629e-14,-" "1.9107771273e-18,3.3615590093e-10,2.4380247154e-14,-2.0241230315e-18,1." "2429019719e-15,5.3886155968e-19,-1.0167505000e-18" " +inv_v=6.1258103208e+06,1.0000002826e+00,-1.5372762184e-10,-5." "9304261011e-15,-2.2612705361e-19,-4.3188331419e-05,-2.8225549995e-10,-7." "8529116371e-16,1.7476576773e-19,-1.6875687989e-10,1.1236475299e-14,1." "7042518057e-18,7.9300735257e-15,5.2881862699e-19,-3.9990736798e-19" " +inv_u=8.7760527928e+05,1.0000024735e+00,-2.8817540032e-10,-5." "5627059451e-15,1.5543637570e-18,4.1357152105e-05,-4.2114813612e-11,-2." "8523713454e-14,1.9109017837e-18,-3.3616407783e-10,-2.4382678126e-14,2." "0245020199e-18,-1.2441377565e-15,-5.3885232238e-19,1.0167203661e-18"}; static const char sb_utm32[] = { " +proj=horner" " +ellps=intl" " +range=500000" " +tolerance=0.0005" " +fwd_origin=4.94690026817276e+05,6.13342113183056e+06" " +inv_origin=6.19480258923588e+05,6.13258568148837e+06" " +deg=3" " +fwd_c=6.13258562111350e+06,6.19480105709997e+05,9.99378966275206e-01,-2." "82153291753490e-02,-2.27089979140026e-10,-1.77019590701470e-09,1." "08522286274070e-14,2.11430298751604e-15" " +inv_c=6.13342118787027e+06,4.94690181709311e+05,9.99824464710368e-01,2." "82279070814774e-02,7.66123542220864e-11,1.78425334628927e-09,-1." "05584823306400e-14,-3.32554258683744e-15"}; // --------------------------------------------------------------------------- TEST(gie, horner_selftest) { PJ *P; PJ_COORD a, b, c; double dist; /* Real polynonia relating the technical coordinate system TC32 to "System * 45 Bornholm" */ P = proj_create(PJ_DEFAULT_CTX, tc32_utm32); ASSERT_TRUE(P != nullptr); a = b = proj_coord(0, 0, 0, 0); a.uv.v = 6125305.4245; a.uv.u = 878354.8539; c = a; /* Check roundtrip precision for 1 iteration each way, starting in forward * direction */ dist = proj_roundtrip(P, PJ_FWD, 1, &c); EXPECT_LE(dist, 0.01); proj_destroy(P); /* The complex polynomial transformation between the "System Storebaelt" and * utm32/ed50 */ P = proj_create(PJ_DEFAULT_CTX, sb_utm32); ASSERT_TRUE(P != nullptr); /* Test value: utm32_ed50(620000, 6130000) = sb_ed50(495136.8544, * 6130821.2945) */ a = b = c = proj_coord(0, 0, 0, 0); a.uv.v = 6130821.2945; a.uv.u = 495136.8544; c.uv.v = 6130000.0000; c.uv.u = 620000.0000; /* Forward projection */ b = proj_trans(P, PJ_FWD, a); dist = proj_xy_dist(b, c); EXPECT_LE(dist, 0.001); /* Inverse projection */ b = proj_trans(P, PJ_INV, c); dist = proj_xy_dist(b, a); EXPECT_LE(dist, 0.001); /* Check roundtrip precision for 1 iteration each way */ dist = proj_roundtrip(P, PJ_FWD, 1, &a); EXPECT_LE(dist, 0.01); proj_destroy(P); } static const char tc32_utm32_fwd_only[] = { " +proj=horner" " +ellps=intl" " +range=10000000" " +fwd_origin=877605.269066,6125810.306769" " +deg=4" " +fwd_v=6.1258112678e+06,9.9999971567e-01,1.5372750011e-10,5.9300860915e-" "15,2.2609497633e-19,4.3188227445e-05,2.8225130416e-10,7.8740007114e-16,-1." "7453997279e-19,1.6877465415e-10,-1.1234649773e-14,-1.7042333358e-18,-7." "9303467953e-15,-5.2906832535e-19,3.9984284847e-19" " +fwd_u=8.7760574982e+05,9.9999752475e-01,2.8817299305e-10,5.5641310680e-" "15,-1.5544700949e-18,-4.1357045890e-05,4.2106213519e-11,2.8525551629e-14,-" "1.9107771273e-18,3.3615590093e-10,2.4380247154e-14,-2.0241230315e-18,1." "2429019719e-15,5.3886155968e-19,-1.0167505000e-18"}; static const char sb_utm32_fwd_only[] = { " +proj=horner" " +ellps=intl" " +range=10000000" " +fwd_origin=4.94690026817276e+05,6.13342113183056e+06" " +deg=3" " +fwd_c=6.13258562111350e+06,6.19480105709997e+05,9.99378966275206e-01,-2." "82153291753490e-02,-2.27089979140026e-10,-1.77019590701470e-09,1." "08522286274070e-14,2.11430298751604e-15"}; static const char hatt_to_ggrs[] = { " +proj=horner" " +ellps=bessel" " +fwd_origin=0.0, 0.0" " +deg=2" " +range=10000000" " +fwd_u=370552.68, 0.9997155, -1.08e-09, 0.0175123, 2.04e-09, 1.63e-09" " +fwd_v=4511927.23, 0.9996979, 5.60e-10, -0.0174755, -1.65e-09, " "-6.50e-10"}; TEST(gie, horner_only_fwd_selftest) { { PJ *P = proj_create(PJ_DEFAULT_CTX, tc32_utm32_fwd_only); ASSERT_TRUE(P != nullptr); PJ_COORD a = proj_coord(0, 0, 0, 0); a.uv.v = 6125305.4245; a.uv.u = 878354.8539; /* Check roundtrip precision for 1 iteration each way, starting in * forward direction */ double dist = proj_roundtrip(P, PJ_FWD, 1, &a); EXPECT_LE(dist, 0.01); proj_destroy(P); } { PJ_COORD a; a = proj_coord(0, 0, 0, 0); a.xy.x = -10157.950; a.xy.y = -21121.093; PJ_COORD c; c = proj_coord(0, 0, 0, 0); c.enu.e = 360028.794; c.enu.n = 4490989.862; PJ *P = proj_create(PJ_DEFAULT_CTX, hatt_to_ggrs); ASSERT_TRUE(P != nullptr); /* Forward projection */ PJ_COORD b = proj_trans(P, PJ_FWD, a); double dist = proj_xy_dist(b, c); EXPECT_LE(dist, 0.001); /* Inverse projection */ b = proj_trans(P, PJ_INV, c); dist = proj_xy_dist(b, a); EXPECT_LE(dist, 0.001); /* Check roundtrip precision for 1 iteration each way, starting in * forward direction */ dist = proj_roundtrip(P, PJ_FWD, 1, &a); EXPECT_LE(dist, 0.01); proj_destroy(P); } { PJ *P = proj_create(PJ_DEFAULT_CTX, sb_utm32_fwd_only); ASSERT_TRUE(P != nullptr); PJ_COORD a = proj_coord(0, 0, 0, 0); PJ_COORD b = proj_coord(0, 0, 0, 0); PJ_COORD c = proj_coord(0, 0, 0, 0); a.uv.v = 6130821.2945; a.uv.u = 495136.8544; c.uv.v = 6130000.0000; c.uv.u = 620000.0000; /* Forward projection */ b = proj_trans(P, PJ_FWD, a); double dist = proj_xy_dist(b, c); EXPECT_LE(dist, 0.001); /* Inverse projection */ b = proj_trans(P, PJ_INV, c); dist = proj_xy_dist(b, a); EXPECT_LE(dist, 0.001); /* Check roundtrip precision for 1 iteration each way */ dist = proj_roundtrip(P, PJ_FWD, 1, &a); EXPECT_LE(dist, 0.01); proj_destroy(P); } } // --------------------------------------------------------------------------- TEST(gie, proj_create_crs_to_crs_PULKOVO42_ETRS89) { auto P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "EPSG:4179", "EPSG:4258", nullptr); ASSERT_TRUE(P != nullptr); PJ_COORD c; EXPECT_EQ(std::string(proj_pj_info(P).definition), "unavailable until proj_trans is called"); EXPECT_EQ(proj_get_name(P), nullptr); EXPECT_EQ(P->fwd, nullptr); EXPECT_EQ(P->fwd3d, nullptr); EXPECT_EQ(P->fwd4d, nullptr); // get source CRS even if the P object is in a dummy state auto src_crs = proj_get_source_crs(PJ_DEFAULT_CTX, P); EXPECT_TRUE(src_crs != nullptr); EXPECT_EQ(proj_get_name(src_crs), std::string("Pulkovo 1942(58)")); proj_destroy(src_crs); // get target CRS even if the P object is in a dummy state auto target_crs = proj_get_target_crs(PJ_DEFAULT_CTX, P); EXPECT_TRUE(target_crs != nullptr); EXPECT_EQ(proj_get_name(target_crs), std::string("ETRS89")); proj_destroy(target_crs); // Romania c.xyzt.x = 45; // Lat c.xyzt.y = 25; // Long c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(P, PJ_FWD, c); EXPECT_NEAR(c.xy.x, 44.999701238, 1e-9); EXPECT_NEAR(c.xy.y, 24.998474948, 1e-9); EXPECT_EQ(std::string(proj_pj_info(P).definition), "proj=pipeline step proj=axisswap order=2,1 " "step proj=unitconvert xy_in=deg xy_out=rad " "step proj=push v_3 " "step proj=cart " "ellps=krass step proj=helmert x=2.3287 y=-147.0425 z=-92.0802 " "rx=0.3092483 ry=-0.32482185 rz=-0.49729934 s=5.68906266 " "convention=coordinate_frame step inv proj=cart ellps=GRS80 " "step proj=pop v_3 " "step proj=unitconvert xy_in=rad xy_out=deg step proj=axisswap " "order=2,1"); c = proj_trans(P, PJ_INV, c); EXPECT_NEAR(c.xy.x, 45, 1e-8); EXPECT_NEAR(c.xy.y, 25, 1e-8); c.xyzt.x = 45; // Lat c.xyzt.y = 25; // Long c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; proj_trans_generic(P, PJ_FWD, &(c.xyz.x), sizeof(double), 1, &(c.xyz.y), sizeof(double), 1, &(c.xyz.z), sizeof(double), 1, nullptr, 0, 0); EXPECT_NEAR(c.xy.x, 44.999701238, 1e-9); EXPECT_NEAR(c.xy.y, 24.998474948, 1e-9); // Poland c.xyz.x = 52; // Lat c.xyz.y = 20; // Long c.xyz.z = 0; c = proj_trans(P, PJ_FWD, c); EXPECT_NEAR(c.xy.x, 51.999714150, 1e-9); EXPECT_NEAR(c.xy.y, 19.998187811, 1e-9); EXPECT_EQ(std::string(proj_pj_info(P).definition), "proj=pipeline step proj=axisswap order=2,1 " "step proj=unitconvert xy_in=deg xy_out=rad " "step proj=push v_3 " "step proj=cart " "ellps=krass step proj=helmert x=33.4 y=-146.6 z=-76.3 rx=-0.359 " "ry=-0.053 rz=0.844 s=-0.84 convention=position_vector step inv " "proj=cart ellps=GRS80 step proj=pop v_3 " "step proj=unitconvert xy_in=rad " "xy_out=deg step proj=axisswap order=2,1"); proj_destroy(P); } // --------------------------------------------------------------------------- TEST(gie, proj_create_crs_to_crs_WGS84_EGM08_to_WGS84) { auto P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "EPSG:4326+3855", "EPSG:4979", nullptr); ASSERT_TRUE(P != nullptr); EXPECT_EQ(std::string(proj_pj_info(P).description), "Transformation from EGM2008 height to WGS 84 (ballpark vertical " "transformation, without ellipsoid height to vertical height " "correction)"); proj_destroy(P); } // --------------------------------------------------------------------------- TEST(gie, proj_create_crs_to_crs_outside_area_of_use) { // See https://github.com/OSGeo/proj.4/issues/1329 auto P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "EPSG:4275", "EPSG:4807", nullptr); ASSERT_TRUE(P != nullptr); PJ_COORD c; EXPECT_EQ(P->fwd, nullptr); // Test point outside area of use of both candidate coordinate operations c.xyzt.x = 58; // Lat in deg c.xyzt.y = 5; // Long in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(P, PJ_FWD, c); EXPECT_NEAR(c.xy.x, 64.44444444444444, 1e-9); // Lat in grad EXPECT_NEAR(c.xy.y, 2.958634259259258, 1e-9); // Long in grad proj_destroy(P); } // --------------------------------------------------------------------------- TEST(gie, proj_create_crs_to_crs_with_area_large) { // Test bugfix for https://github.com/OSGeo/gdal/issues/3695 auto area = proj_area_create(); proj_area_set_bbox(area, -14.1324, 49.5614, 3.76488, 62.1463); auto P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "EPSG:4277", "EPSG:4326", area); proj_area_destroy(area); ASSERT_TRUE(P != nullptr); PJ_COORD c; c.xyzt.x = 50; // Lat in deg c.xyzt.y = -2; // Long in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(P, PJ_FWD, c); EXPECT_NEAR(c.xy.x, 50.00065628, 1e-8); EXPECT_NEAR(c.xy.y, -2.00133989, 1e-8); proj_destroy(P); } // --------------------------------------------------------------------------- TEST(gie, proj_create_crs_to_crs_with_longitude_outside_minus_180_180) { // Test bugfix for https://github.com/OSGeo/PROJ/issues/3594 auto P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "EPSG:4277", "EPSG:4326", nullptr); ASSERT_TRUE(P != nullptr); PJ_COORD c; c.xyzt.x = 50; // Lat in deg c.xyzt.y = -2 + 360; // Long in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(P, PJ_FWD, c); EXPECT_NEAR(c.xy.x, 50.00065628, 1e-8); EXPECT_NEAR(c.xy.y, -2.00133989, 1e-8); c.xyzt.x = 50; // Lat in deg c.xyzt.y = -2 - 360; // Long in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(P, PJ_FWD, c); EXPECT_NEAR(c.xy.x, 50.00065628, 1e-8); EXPECT_NEAR(c.xy.y, -2.00133989, 1e-8); c.xyzt.x = 50.00065628; // Lat in deg c.xyzt.y = -2.00133989 + 360; // Long in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(P, PJ_INV, c); EXPECT_NEAR(c.xy.x, 50, 1e-8); EXPECT_NEAR(c.xy.y, -2, 1e-8); c.xyzt.x = 50.00065628; // Lat in deg c.xyzt.y = -2.00133989 - 360; // Long in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(P, PJ_INV, c); EXPECT_NEAR(c.xy.x, 50, 1e-8); EXPECT_NEAR(c.xy.y, -2, 1e-8); auto Pnormalized = proj_normalize_for_visualization(PJ_DEFAULT_CTX, P); c.xyzt.x = -2 + 360; // Long in deg c.xyzt.y = 50; // Lat in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(Pnormalized, PJ_FWD, c); EXPECT_NEAR(c.xy.x, -2.00133989, 1e-8); EXPECT_NEAR(c.xy.y, 50.00065628, 1e-8); c.xyzt.x = -2.00133989 + 360; // Long in deg c.xyzt.y = 50.00065628; // Lat in deg c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(Pnormalized, PJ_INV, c); EXPECT_NEAR(c.xy.x, -2, 1e-8); EXPECT_NEAR(c.xy.y, 50, 1e-8); proj_destroy(Pnormalized); proj_destroy(P); } // --------------------------------------------------------------------------- TEST(gie, proj_trans_generic) { // GDA2020 to WGS84 (G1762) auto P = proj_create( PJ_DEFAULT_CTX, "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=0 +y=0 +z=0 +rx=0 +ry=0 +rz=0 +s=0 +dx=0 " "+dy=0 +dz=0 +drx=-0.00150379 +dry=-0.00118346 +drz=-0.00120716 " "+ds=0 +t_epoch=2020 +convention=coordinate_frame " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); double lat = -60; double longitude = 120; proj_trans_generic(P, PJ_FWD, &lat, sizeof(double), 1, &longitude, sizeof(double), 1, nullptr, 0, 0, nullptr, 0, 0); // Should be a no-op when the time is unknown (or equal to 2020) EXPECT_NEAR(lat, -60, 1e-9); EXPECT_NEAR(longitude, 120, 1e-9); proj_destroy(P); } // --------------------------------------------------------------------------- TEST(gie, proj_trans_with_a_crs) { auto P = proj_create(PJ_DEFAULT_CTX, "EPSG:4326"); PJ_COORD input; input.xyzt.x = 0; input.xyzt.y = 0; input.xyzt.z = 0; input.xyzt.t = 0; auto output = proj_trans(P, PJ_FWD, input); EXPECT_EQ(proj_errno(P), PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE); proj_destroy(P); EXPECT_EQ(HUGE_VAL, output.xyzt.x); } // --------------------------------------------------------------------------- TEST(gie, proj_create_crs_to_crs_from_pj_force_over) { PJ_CONTEXT *ctx; ctx = proj_context_create(); ASSERT_TRUE(ctx != nullptr); auto epsg27700 = proj_create(ctx, "EPSG:27700"); ASSERT_TRUE(epsg27700 != nullptr); auto epsg4326 = proj_create(ctx, "EPSG:4326"); ASSERT_TRUE(epsg4326 != nullptr); auto epsg3857 = proj_create(ctx, "EPSG:3857"); ASSERT_TRUE(epsg3857 != nullptr); { const char *const options[] = {"FORCE_OVER=YES", nullptr}; auto P = proj_create_crs_to_crs_from_pj(ctx, epsg4326, epsg3857, nullptr, options); ASSERT_TRUE(P != nullptr); ASSERT_TRUE(P->over); PJ_COORD input; PJ_COORD input_over; // Test a point along the equator. // The same point, but in two different representations. input.xyzt.x = 0; // Lat in deg input.xyzt.y = 140; // Long in deg input.xyzt.z = 0; input.xyzt.t = HUGE_VAL; input_over.xyzt.x = 0; // Lat in deg input_over.xyzt.y = -220; // Long in deg input_over.xyzt.z = 0; input_over.xyzt.t = HUGE_VAL; auto output = proj_trans(P, PJ_FWD, input); auto output_over = proj_trans(P, PJ_FWD, input_over); auto input_inv = proj_trans(P, PJ_INV, output); auto input_over_inv = proj_trans(P, PJ_INV, output_over); // Web Mercator x's between 0 and 180 longitude come out positive. // But when forcing the over flag, the -220 calculation makes it flip. EXPECT_GT(output.xyz.x, 0); EXPECT_LT(output_over.xyz.x, 0); EXPECT_NEAR(output.xyz.x, 15584728.711058298, 1e-8); EXPECT_NEAR(output_over.xyz.x, -24490287.974520184, 1e-8); // The distance from 140 to 180 and -220 to -180 should be pretty much // the same. auto dx_o = fabs(output.xyz.x - 20037508.342789244); auto dx_over = fabs(output_over.xyz.x + 20037508.342789244); auto dx = fabs(dx_o - dx_over); EXPECT_NEAR(dx, 0, 1e-8); // Check the inverse operations get us back close to our original input // values. EXPECT_NEAR(input.xyz.x, input_inv.xyz.x, 1e-8); EXPECT_NEAR(input.xyz.y, input_inv.xyz.y, 1e-8); EXPECT_NEAR(input_over.xyz.x, input_over_inv.xyz.x, 1e-8); EXPECT_NEAR(input_over.xyz.y, input_over_inv.xyz.y, 1e-8); auto Pnormalized = proj_normalize_for_visualization(ctx, P); ASSERT_TRUE(Pnormalized->over); PJ_COORD input_over_normalized; input_over_normalized.xyzt.x = -220; // Long in deg input_over_normalized.xyzt.y = 0; // Lat in deg input_over_normalized.xyzt.z = 0; input_over_normalized.xyzt.t = HUGE_VAL; auto output_over_normalized = proj_trans(Pnormalized, PJ_FWD, input_over_normalized); EXPECT_NEAR(output_over_normalized.xyz.x, -24490287.974520184, 1e-8); proj_destroy(Pnormalized); proj_destroy(P); } { // Try again with force over set to anything but YES to verify it didn't // do anything. const char *const options[] = {"FORCE_OVER=NO", nullptr}; auto P = proj_create_crs_to_crs_from_pj(ctx, epsg4326, epsg3857, nullptr, options); ASSERT_TRUE(P != nullptr); ASSERT_FALSE(P->over); PJ_COORD input; PJ_COORD input_notOver; input.xyzt.x = 0; // Lat in deg input.xyzt.y = 140; // Long in deg input.xyzt.z = 0; input.xyzt.t = HUGE_VAL; input_notOver.xyzt.x = 0; // Lat in deg input_notOver.xyzt.y = -220; // Long in deg input_notOver.xyzt.z = 0; input_notOver.xyzt.t = HUGE_VAL; auto output = proj_trans(P, PJ_FWD, input); auto output_notOver = proj_trans(P, PJ_FWD, input_notOver); EXPECT_GT(output.xyz.x, 0); EXPECT_GT(output_notOver.xyz.x, 0); EXPECT_NEAR(output.xyz.x, 15584728.711058298, 1e-8); EXPECT_NEAR(output_notOver.xyz.x, 15584728.711058298, 1e-8); proj_destroy(P); } { // Try again with no options to verify it didn't do anything. auto P = proj_create_crs_to_crs_from_pj(ctx, epsg4326, epsg3857, nullptr, nullptr); ASSERT_TRUE(P != nullptr); ASSERT_FALSE(P->over); PJ_COORD input; PJ_COORD input_notOver; input.xyzt.x = 0; // Lat in deg input.xyzt.y = 140; // Long in deg input.xyzt.z = 0; input.xyzt.t = HUGE_VAL; input_notOver.xyzt.x = 0; // Lat in deg input_notOver.xyzt.y = -220; // Long in deg input_notOver.xyzt.z = 0; input_notOver.xyzt.t = HUGE_VAL; auto output = proj_trans(P, PJ_FWD, input); auto output_notOver = proj_trans(P, PJ_FWD, input_notOver); EXPECT_GT(output.xyz.x, 0); EXPECT_GT(output_notOver.xyz.x, 0); EXPECT_NEAR(output.xyz.x, 15584728.711058298, 1e-8); EXPECT_NEAR(output_notOver.xyz.x, 15584728.711058298, 1e-8); proj_destroy(P); } { // EPSG:4326 -> EPSG:27700 has more than one coordinate operation // candidate. const char *const options[] = {"FORCE_OVER=YES", nullptr}; auto P = proj_create_crs_to_crs_from_pj(ctx, epsg4326, epsg27700, nullptr, options); ASSERT_TRUE(P != nullptr); ASSERT_TRUE(P->over); PJ_COORD input; PJ_COORD input_over; input.xyzt.x = 0; // Lat in deg input.xyzt.y = 140; // Long in deg input.xyzt.z = 0; input.xyzt.t = HUGE_VAL; input_over.xyzt.x = 0; // Lat in deg input_over.xyzt.y = -220; // Long in deg input_over.xyzt.z = 0; input_over.xyzt.t = HUGE_VAL; auto output = proj_trans(P, PJ_FWD, input); auto output_over = proj_trans(P, PJ_FWD, input_over); // Doesn't actually change the result for this tmerc transformation. EXPECT_NEAR(output.xyz.x, 4980122.749364435, 1e-8); EXPECT_NEAR(output.xyz.y, 14467212.882603768, 1e-8); EXPECT_NEAR(output_over.xyz.x, 4980122.749364435, 1e-8); EXPECT_NEAR(output_over.xyz.y, 14467212.882603768, 1e-8); auto Pnormalized = proj_normalize_for_visualization(ctx, P); ASSERT_TRUE(Pnormalized->over); for (const auto &op : Pnormalized->alternativeCoordinateOperations) { ASSERT_TRUE(op.pj->over); } PJ_COORD input_over_normalized; input_over_normalized.xyzt.x = -220; // Long in deg input_over_normalized.xyzt.y = 0; // Lat in deg input_over_normalized.xyzt.z = 0; input_over_normalized.xyzt.t = HUGE_VAL; auto output_over_normalized = proj_trans(Pnormalized, PJ_FWD, input_over_normalized); EXPECT_NEAR(output_over_normalized.xyz.x, 4980122.749364435, 1e-8); EXPECT_NEAR(output_over_normalized.xyz.y, 14467212.882603768, 1e-8); proj_destroy(Pnormalized); proj_destroy(P); } { // Negative test for 27700. const char *const options[] = {"FORCE_OVER=NO", nullptr}; auto P = proj_create_crs_to_crs_from_pj(ctx, epsg4326, epsg27700, nullptr, options); ASSERT_TRUE(P != nullptr); ASSERT_FALSE(P->over); PJ_COORD input; PJ_COORD input_over; input.xyzt.x = 0; // Lat in deg input.xyzt.y = 140; // Long in deg input.xyzt.z = 0; input.xyzt.t = HUGE_VAL; input_over.xyzt.x = 0; // Lat in deg input_over.xyzt.y = -220; // Long in deg input_over.xyzt.z = 0; input_over.xyzt.t = HUGE_VAL; auto output = proj_trans(P, PJ_FWD, input); auto output_over = proj_trans(P, PJ_FWD, input_over); EXPECT_NEAR(output.xyz.x, 4980122.749364435, 1e-8); EXPECT_NEAR(output.xyz.y, 14467212.882603768, 1e-8); EXPECT_NEAR(output_over.xyz.x, 4980122.749364435, 1e-8); EXPECT_NEAR(output_over.xyz.y, 14467212.882603768, 1e-8); proj_destroy(P); } proj_destroy(epsg27700); proj_destroy(epsg4326); proj_destroy(epsg3857); proj_context_destroy(ctx); } } // namespace proj-9.6.0/test/unit/gtest_include.h000664 001754 001755 00000003237 14764566077 017366 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Wrapper for gtest/gtest.h * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ // Disable all warnings for gtest.h, so as to be able to still use them for // our own code. #if defined(__GNUC__) #pragma GCC system_header #endif #include "gtest/gtest.h" proj-9.6.0/test/unit/include_proj_h_from_c.c000664 001754 001755 00000003023 14764566077 021032 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Dummy test to check that we can include proj.h from a pure C file * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "proj.h" #include "proj_experimental.h" int main() { return 0; } proj-9.6.0/test/unit/main.cpp000664 001754 001755 00000003342 14764566077 016011 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: gtest main * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 #include "gtest_include.h" GTEST_API_ int main(int argc, char **argv) { // Use a potentially non-C locale to make sure we are robust setlocale(LC_ALL, ""); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } proj-9.6.0/test/unit/pj_phi2_test.cpp000664 001754 001755 00000010224 14764566077 017454 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test pj_phi2 function. * Author: Kurt Schwehr * ****************************************************************************** * Copyright (c) 2018, Google 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. ****************************************************************************/ #include "proj.h" #include "proj_internal.h" #include #include #include "gtest_include.h" namespace { TEST(PjPhi2Test, Basic) { PJ_CONTEXT *ctx = pj_get_default_ctx(); // Expectation is that only sane values of e (and nan is here reckoned to // be sane) are passed to pj_phi2. Thus the return value with other values // of e is "implementation dependent". constexpr auto inf = std::numeric_limits::infinity(); constexpr auto nan = std::numeric_limits::quiet_NaN(); // Strict equality is demanded here. EXPECT_EQ(M_PI_2, pj_phi2(ctx, +0.0, 0.0)); EXPECT_EQ(0.0, pj_phi2(ctx, 1.0, 0.0)); EXPECT_EQ(-M_PI_2, pj_phi2(ctx, inf, 0.0)); // We don't expect pj_phi2 to be called with negative ts (since ts = // exp(-psi)). However, in the current implementation it is odd in ts. // N.B. ts = +0.0 and ts = -0.0 return different results. EXPECT_EQ(-M_PI_2, pj_phi2(ctx, -0.0, 0.0)); EXPECT_EQ(0.0, pj_phi2(ctx, -1.0, 0.0)); EXPECT_EQ(+M_PI_2, pj_phi2(ctx, -inf, 0.0)); constexpr double e = 0.2; EXPECT_EQ(M_PI_2, pj_phi2(ctx, +0.0, e)); EXPECT_EQ(0.0, pj_phi2(ctx, 1.0, e)); EXPECT_EQ(-M_PI_2, pj_phi2(ctx, inf, e)); EXPECT_EQ(-M_PI_2, pj_phi2(ctx, -0.0, e)); EXPECT_EQ(0.0, pj_phi2(ctx, -1.0, e)); EXPECT_EQ(+M_PI_2, pj_phi2(ctx, -inf, e)); EXPECT_TRUE(std::isnan(pj_phi2(ctx, nan, 0.0))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, nan, e))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, +0.0, nan))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, 1.0, nan))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, inf, nan))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, -0.0, nan))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, -1.0, nan))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, -inf, nan))); EXPECT_TRUE(std::isnan(pj_phi2(ctx, nan, nan))); EXPECT_DOUBLE_EQ(M_PI / 3, pj_phi2(ctx, 1 / (sqrt(3.0) + 2), 0.0)); EXPECT_DOUBLE_EQ(M_PI / 4, pj_phi2(ctx, 1 / (sqrt(2.0) + 1), 0.0)); EXPECT_DOUBLE_EQ(M_PI / 6, pj_phi2(ctx, 1 / sqrt(3.0), 0.0)); EXPECT_DOUBLE_EQ(-M_PI / 3, pj_phi2(ctx, sqrt(3.0) + 2, 0.0)); EXPECT_DOUBLE_EQ(-M_PI / 4, pj_phi2(ctx, sqrt(2.0) + 1, 0.0)); EXPECT_DOUBLE_EQ(-M_PI / 6, pj_phi2(ctx, sqrt(3.0), 0.0)); // Generated with exp(e * atanh(e * sin(phi))) / (tan(phi) + sec(phi)) EXPECT_DOUBLE_EQ(M_PI / 3, pj_phi2(ctx, 0.27749174377027023413, e)); EXPECT_DOUBLE_EQ(M_PI / 4, pj_phi2(ctx, 0.42617788119104192995, e)); EXPECT_DOUBLE_EQ(M_PI / 6, pj_phi2(ctx, 0.58905302448626726064, e)); EXPECT_DOUBLE_EQ(-M_PI / 3, pj_phi2(ctx, 3.6037108218537833089, e)); EXPECT_DOUBLE_EQ(-M_PI / 4, pj_phi2(ctx, 2.3464380582241712935, e)); EXPECT_DOUBLE_EQ(-M_PI / 6, pj_phi2(ctx, 1.6976400399134411849, e)); } } // namespace proj-9.6.0/test/unit/proj_angular_io_test.cpp000664 001754 001755 00000010156 14764566077 021277 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test that in- and output units behave correctly, especially * angular units that need special treatment. * Author: Kristian Evers * ****************************************************************************** * Copyright (c) 2019, 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. ****************************************************************************/ #include "proj.h" #include "gtest_include.h" namespace { TEST(AngularUnits, Basic) { auto ctx = proj_context_create(); auto P = proj_create(ctx, "proj=latlong"); EXPECT_TRUE(proj_angular_input(P, PJ_FWD)); EXPECT_TRUE(proj_angular_output(P, PJ_FWD)); EXPECT_TRUE(proj_angular_input(P, PJ_INV)); EXPECT_TRUE(proj_angular_output(P, PJ_INV)); proj_destroy(P); proj_context_destroy(ctx); } TEST(AngularUnits, Pipelines) { auto ctx = proj_context_create(); auto P = proj_create(ctx, "proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=latlong +step +proj=axisswap +order=2,1"); EXPECT_TRUE(proj_angular_input(P, PJ_FWD)); EXPECT_TRUE(proj_angular_output(P, PJ_FWD)); EXPECT_TRUE(proj_angular_input(P, PJ_INV)); EXPECT_TRUE(proj_angular_output(P, PJ_INV)); proj_destroy(P); proj_context_destroy(ctx); } TEST(AngularUnits, Pipelines2) { auto ctx = proj_context_create(); auto P = proj_create( ctx, "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 " "+y_0=0 +ellps=WGS84 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=m +z_in=m +xy_out=us-ft +z_out=us-ft"); EXPECT_FALSE(proj_angular_input(P, PJ_FWD)); EXPECT_FALSE(proj_angular_output(P, PJ_FWD)); proj_destroy(P); proj_context_destroy(ctx); } TEST(AngularUnits, Pipelines3) { auto ctx = proj_context_create(); auto P = proj_create( ctx, "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 " "+y_0=0 +ellps=WGS84 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=m +z_in=m +xy_out=us-ft +z_out=us-ft"); EXPECT_TRUE(proj_angular_input(P, PJ_FWD)); EXPECT_FALSE(proj_angular_output(P, PJ_FWD)); proj_destroy(P); proj_context_destroy(ctx); } TEST(AngularUnits, Degrees) { auto ctx = proj_context_create(); auto P = proj_create(ctx, "+proj=pipeline " "+step +inv +proj=utm +zone=32 +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg "); EXPECT_FALSE(proj_degree_input(P, PJ_FWD)); EXPECT_TRUE(proj_degree_input(P, PJ_INV)); EXPECT_TRUE(proj_degree_output(P, PJ_FWD)); EXPECT_FALSE(proj_degree_output(P, PJ_INV)); proj_destroy(P); proj_context_destroy(ctx); } } // namespace proj-9.6.0/test/unit/proj_context_test.cpp000664 001754 001755 00000015330 14764566077 020642 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test functions in proj_context namespae * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2019, 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 #ifdef _MSC_VER #include #else #include #endif #include "proj.h" #include "proj_internal.h" #include "gtest_include.h" namespace { static bool createTmpFile(const std::string &filename) { FILE *f = fopen(filename.c_str(), "wt"); if (!f) return false; fprintf( f, " +proj=pipeline +step +proj=utm +zone=31 +ellps=GRS80\n"); fclose(f); return true; } // --------------------------------------------------------------------------- static std::string createTempDict(std::string &dirname, const char *filename) { const char *temp_dir = getenv("TEMP"); if (!temp_dir) { temp_dir = getenv("TMP"); } #ifndef WIN32 if (!temp_dir) { temp_dir = "/tmp"; } #endif if (!temp_dir) return std::string(); dirname = temp_dir; std::string tmpFilename; tmpFilename = temp_dir; tmpFilename += DIR_CHAR; tmpFilename += filename; return createTmpFile(tmpFilename) ? tmpFilename : std::string(); } // --------------------------------------------------------------------------- static int MyUnlink(const std::string &filename) { #ifdef _MSC_VER return _unlink(filename.c_str()); #else return unlink(filename.c_str()); #endif } // --------------------------------------------------------------------------- TEST(proj_context, proj_context_set_file_finder) { std::string dirname; auto filename = createTempDict(dirname, "temp_proj_dic1"); if (filename.empty()) return; auto ctx = proj_context_create(); struct FinderData { PJ_CONTEXT *got_ctx = nullptr; std::string dirname{}; std::string tmpFilename{}; }; const auto finder = [](PJ_CONTEXT *got_ctx, const char *file, void *user_data) -> const char * { auto finderData = static_cast(user_data); finderData->got_ctx = got_ctx; finderData->tmpFilename = finderData->dirname; finderData->tmpFilename += DIR_CHAR; finderData->tmpFilename += file; return finderData->tmpFilename.c_str(); }; FinderData finderData; finderData.dirname = dirname; proj_context_set_file_finder(ctx, finder, &finderData); auto P = proj_create(ctx, "+init=temp_proj_dic1:MY_PIPELINE"); EXPECT_NE(P, nullptr); proj_destroy(P); EXPECT_EQ(finderData.got_ctx, ctx); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(proj_context, proj_context_set_search_paths) { std::string dirname; auto filename = createTempDict(dirname, "temp_proj_dic2"); if (filename.empty()) return; auto ctx = proj_context_create(); const char *path = dirname.c_str(); proj_context_set_search_paths(ctx, 1, &path); auto P = proj_create(ctx, "+init=temp_proj_dic2:MY_PIPELINE"); EXPECT_NE(P, nullptr); proj_destroy(P); proj_context_destroy(ctx); MyUnlink(filename); } // --------------------------------------------------------------------------- TEST(proj_context, proj_context_set_user_writable_directory) { auto ctx = proj_context_create(); auto default_path = std::string(proj_context_get_user_writable_directory(ctx, false)); EXPECT_TRUE(!default_path.empty()); auto new_path = default_path + DIR_CHAR + "temp_proj_dic4"; proj_context_set_user_writable_directory(ctx, new_path.c_str(), true); EXPECT_STREQ(proj_context_get_user_writable_directory(ctx, false), new_path.c_str()); proj_context_set_user_writable_directory(ctx, nullptr, false); EXPECT_STREQ(proj_context_get_user_writable_directory(ctx, false), default_path.c_str()); proj_context_destroy(ctx); MyUnlink(new_path); } // --------------------------------------------------------------------------- TEST(proj_context, read_grid_from_user_writable_directory) { auto ctx = proj_context_create(); auto path = std::string(proj_context_get_user_writable_directory(ctx, true)); EXPECT_TRUE(!path.empty()); auto filename = path + DIR_CHAR + "temp_proj_dic3"; EXPECT_TRUE(createTmpFile(filename)); { // Check that with PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES (set by // calling script), we cannot find the file auto P = proj_create(ctx, "+init=temp_proj_dic3:MY_PIPELINE"); EXPECT_EQ(P, nullptr); proj_destroy(P); } { // Cancel the effect of PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY putenv(const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=")); auto P = proj_create(ctx, "+init=temp_proj_dic3:MY_PIPELINE"); EXPECT_NE(P, nullptr); putenv( const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES")); proj_destroy(P); } proj_context_destroy(ctx); MyUnlink(filename); } // --------------------------------------------------------------------------- TEST(proj_context, proj_context_set_ca_bundle_path) { std::string dirname("/tmp/dummmy/path/cacert.pem"); auto ctx = proj_context_create(); proj_context_set_ca_bundle_path(ctx, dirname.c_str()); ASSERT_EQ(ctx->ca_bundle_path, dirname); proj_context_destroy(ctx); } } // namespace proj-9.6.0/test/unit/proj_errno_string_test.cpp000664 001754 001755 00000004737 14764566077 021702 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Unit test for proj_errno_string() * Author: Kristian Evers * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #include #include "proj.h" #include "proj_config.h" #include "gtest_include.h" namespace { TEST(ProjErrnoStringTest, NoError) { EXPECT_EQ(nullptr, proj_errno_string(0)); } TEST(ProjErrnoStringTest, ProjErrnos) { EXPECT_STREQ("Unknown error (code -1)", proj_errno_string(-1)); EXPECT_STREQ("Invalid PROJ string syntax", proj_errno_string(PROJ_ERR_INVALID_OP_WRONG_SYNTAX)); EXPECT_STREQ( "Unspecified error related to coordinate operation initialization", proj_errno_string(PROJ_ERR_INVALID_OP)); EXPECT_STREQ("Unspecified error related to coordinate transformation", proj_errno_string(PROJ_ERR_COORD_TRANSFM)); } TEST(ProjErrnoStringTest, proj_context_errno_string) { EXPECT_STREQ("Unknown error (code -1)", proj_context_errno_string(nullptr, -1)); PJ_CONTEXT *ctx = proj_context_create(); EXPECT_STREQ("Unknown error (code -999)", proj_context_errno_string(ctx, -999)); proj_context_destroy(ctx); } } // namespace proj-9.6.0/test/unit/test_c_api.cpp000664 001754 001755 00000777315 14764566077 017221 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" #include #include #include #include "proj.h" #include "proj_constants.h" #include "proj_experimental.h" #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include #if !defined(_WIN32) #include #endif #ifndef __MINGW32__ #include #endif using namespace osgeo::proj::common; using namespace osgeo::proj::crs; using namespace osgeo::proj::cs; using namespace osgeo::proj::datum; using namespace osgeo::proj::io; using namespace osgeo::proj::metadata; using namespace osgeo::proj::operation; using namespace osgeo::proj::util; namespace { class CApi : public ::testing::Test { static void DummyLogFunction(void *, int, const char *) {} protected: void SetUp() override { m_ctxt = proj_context_create(); proj_log_func(m_ctxt, nullptr, DummyLogFunction); } void TearDown() override { if (m_ctxt) proj_context_destroy(m_ctxt); } static BoundCRSNNPtr createBoundCRS() { return BoundCRS::create( GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326, Transformation::create( PropertyMap(), GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326, nullptr, PropertyMap(), {OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "foo"))}, {ParameterValue::create( Measure(1.0, UnitOfMeasure::SCALE_UNITY))}, {})); } static ProjectedCRSNNPtr createProjectedCRS() { PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 32631) .set(IdentifiedObject::NAME_KEY, "WGS 84 / UTM zone 31N"); return ProjectedCRS::create( propertiesCRS, GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } static DerivedProjectedCRSNNPtr createDerivedProjectedCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"), std::vector{}, std::vector{}); return DerivedProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "derived projectedCRS"), createProjectedCRS(), derivingConversion, CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } static VerticalCRSNNPtr createVerticalCRS() { PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5101) .set(IdentifiedObject::NAME_KEY, "Ordnance Datum Newlyn"); auto vdatum = VerticalReferenceFrame::create(propertiesVDatum); PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5701) .set(IdentifiedObject::NAME_KEY, "ODN height"); return VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); } static CompoundCRSNNPtr createCompoundCRS() { PropertyMap properties; properties.set(Identifier::CODESPACE_KEY, "codespace") .set(Identifier::CODE_KEY, "code") .set(IdentifiedObject::NAME_KEY, "horizontal + vertical"); return CompoundCRS::create( properties, std::vector{createProjectedCRS(), createVerticalCRS()}); } PJ_CONTEXT *m_ctxt = nullptr; struct ObjectKeeper { PJ *m_obj = nullptr; explicit ObjectKeeper(PJ *obj) : m_obj(obj) {} ~ObjectKeeper() { proj_destroy(m_obj); } void clear() { proj_destroy(m_obj); m_obj = nullptr; } ObjectKeeper(const ObjectKeeper &) = delete; ObjectKeeper &operator=(const ObjectKeeper &) = delete; }; struct PjContextKeeper { PJ_CONTEXT *m_ctxt = nullptr; explicit PjContextKeeper(PJ_CONTEXT *ctxt) : m_ctxt(ctxt) {} ~PjContextKeeper() { proj_context_destroy(m_ctxt); } PjContextKeeper(const PjContextKeeper &) = delete; PjContextKeeper &operator=(const PjContextKeeper &) = delete; }; struct ContextKeeper { PJ_OPERATION_FACTORY_CONTEXT *m_op_ctxt = nullptr; explicit ContextKeeper(PJ_OPERATION_FACTORY_CONTEXT *op_ctxt) : m_op_ctxt(op_ctxt) {} ~ContextKeeper() { proj_operation_factory_context_destroy(m_op_ctxt); } ContextKeeper(const ContextKeeper &) = delete; ContextKeeper &operator=(const ContextKeeper &) = delete; }; struct ObjListKeeper { PJ_OBJ_LIST *m_res = nullptr; explicit ObjListKeeper(PJ_OBJ_LIST *res) : m_res(res) {} ~ObjListKeeper() { proj_list_destroy(m_res); } ObjListKeeper(const ObjListKeeper &) = delete; ObjListKeeper &operator=(const ObjListKeeper &) = delete; }; }; // --------------------------------------------------------------------------- TEST_F(CApi, proj_create) { proj_destroy(nullptr); EXPECT_EQ(proj_create(m_ctxt, "invalid"), nullptr); { auto obj = proj_create(m_ctxt, GeographicCRS::EPSG_4326 ->exportToWKT(WKTFormatter::create().get()) .c_str()); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); // Check that functions that operate on 'non-C++' PJ don't crash constexpr double DEG_TO_RAD = .017453292519943296; PJ_COORD coord1; coord1.xyzt.x = 2 * DEG_TO_RAD; coord1.xyzt.y = 49 * DEG_TO_RAD; coord1.xyzt.z = 0; coord1.xyzt.t = 0; PJ_COORD coord2; coord2.xyzt.x = 2 * DEG_TO_RAD; coord2.xyzt.y = 50 * DEG_TO_RAD; coord2.xyzt.z = 0; coord2.xyzt.t = 0; EXPECT_EQ(proj_trans(obj, PJ_FWD, coord1).xyzt.x, std::numeric_limits::infinity()); // and those ones actually work just fine EXPECT_NEAR(proj_geod(obj, coord1, coord2).xyzt.x, 111219.409, 1e-3); EXPECT_NEAR(proj_lp_dist(obj, coord1, coord2), 111219.409, 1e-3); auto info = proj_pj_info(obj); EXPECT_EQ(info.id, nullptr); ASSERT_NE(info.description, nullptr); EXPECT_EQ(info.description, std::string("WGS 84")); ASSERT_NE(info.definition, nullptr); EXPECT_EQ(info.definition, std::string("")); } { auto obj = proj_create(m_ctxt, "EPSG:4326"); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); } { PJ_CONTEXT *ctxt = proj_context_create(); std::string s; proj_log_func(ctxt, &s, [](void *user_data, int, const char *msg) { *static_cast(user_data) = msg; }); auto crs = proj_create(ctxt, "EPSG:i_do_not_exist"); proj_destroy(crs); proj_context_destroy(ctxt); EXPECT_EQ(crs, nullptr); EXPECT_STREQ(s.c_str(), "proj_create: crs not found: EPSG:i_do_not_exist"); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_from_wkt) { { EXPECT_EQ( proj_create_from_wkt(m_ctxt, "invalid", nullptr, nullptr, nullptr), nullptr); } { PROJ_STRING_LIST warningList = nullptr; PROJ_STRING_LIST errorList = nullptr; EXPECT_EQ(proj_create_from_wkt(m_ctxt, "invalid", nullptr, &warningList, &errorList), nullptr); EXPECT_EQ(warningList, nullptr); proj_string_list_destroy(warningList); EXPECT_NE(errorList, nullptr); proj_string_list_destroy(errorList); } { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); } { auto obj = proj_create_from_wkt( m_ctxt, "GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\"unused\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]]", nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); } { PROJ_STRING_LIST warningList = nullptr; PROJ_STRING_LIST errorList = nullptr; auto obj = proj_create_from_wkt( m_ctxt, "GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\"unused\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]]", nullptr, &warningList, &errorList); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); EXPECT_EQ(warningList, nullptr); proj_string_list_destroy(warningList); EXPECT_NE(errorList, nullptr); proj_string_list_destroy(errorList); } { PROJ_STRING_LIST warningList = nullptr; PROJ_STRING_LIST errorList = nullptr; const char *const options[] = {"STRICT=NO", nullptr}; auto obj = proj_create_from_wkt( m_ctxt, "GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\"unused\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]]", options, &warningList, &errorList); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); EXPECT_EQ(warningList, nullptr); proj_string_list_destroy(warningList); EXPECT_NE(errorList, nullptr); proj_string_list_destroy(errorList); } { PROJ_STRING_LIST warningList = nullptr; PROJ_STRING_LIST errorList = nullptr; const char *const options[] = { "UNSET_IDENTIFIERS_IF_INCOMPATIBLE_DEF=NO", nullptr}; auto wkt = "PROJCS[\"Merchich / Nord Maroc\"," " GEOGCS[\"Merchich\"," " DATUM[\"Merchich\"," " SPHEROID[\"Clarke 1880 (IGN)\"," "6378249.2,293.466021293627]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"grad\",0.015707963267949," " AUTHORITY[\"EPSG\",\"9105\"]]," " AUTHORITY[\"EPSG\",\"4261\"]]," " PROJECTION[\"Lambert_Conformal_Conic_1SP\"]," " PARAMETER[\"latitude_of_origin\",37]," " PARAMETER[\"central_meridian\",-6]," " PARAMETER[\"scale_factor\",0.999625769]," " PARAMETER[\"false_easting\",500000]," " PARAMETER[\"false_northing\",300000]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]]"; auto obj = proj_create_from_wkt(m_ctxt, wkt, options, &warningList, &errorList); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); EXPECT_EQ(warningList, nullptr); proj_string_list_destroy(warningList); EXPECT_EQ(errorList, nullptr); proj_string_list_destroy(errorList); } { PROJ_STRING_LIST warningList = nullptr; PROJ_STRING_LIST errorList = nullptr; const char *const options[] = { "UNSET_IDENTIFIERS_IF_INCOMPATIBLE_DEF=YES", nullptr}; auto wkt = "PROJCS[\"Merchich / Nord Maroc\"," " GEOGCS[\"Merchich\"," " DATUM[\"Merchich\"," " SPHEROID[\"Clarke 1880 (IGN)\"," "6378249.2,293.466021293627]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"grad\",0.015707963267949," " AUTHORITY[\"EPSG\",\"9105\"]]," " AUTHORITY[\"EPSG\",\"4261\"]]," " PROJECTION[\"Lambert_Conformal_Conic_1SP\"]," " PARAMETER[\"latitude_of_origin\",37]," " PARAMETER[\"central_meridian\",-6]," " PARAMETER[\"scale_factor\",0.999625769]," " PARAMETER[\"false_easting\",500000]," " PARAMETER[\"false_northing\",300000]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]]"; auto obj = proj_create_from_wkt(m_ctxt, wkt, options, &warningList, &errorList); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); EXPECT_NE(warningList, nullptr); proj_string_list_destroy(warningList); EXPECT_EQ(errorList, nullptr); proj_string_list_destroy(errorList); } { PROJ_STRING_LIST warningList = nullptr; PROJ_STRING_LIST errorList = nullptr; auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, &warningList, &errorList); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); EXPECT_EQ(warningList, nullptr); EXPECT_EQ(errorList, nullptr); } // Warnings: missing projection parameters { PROJ_STRING_LIST warningList = nullptr; PROJ_STRING_LIST errorList = nullptr; auto obj = proj_create_from_wkt( m_ctxt, "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",31],\n" " UNIT[\"metre\",1]]", nullptr, &warningList, &errorList); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); EXPECT_NE(warningList, nullptr); proj_string_list_destroy(warningList); EXPECT_EQ(errorList, nullptr); proj_string_list_destroy(errorList); } { auto obj = proj_create_from_wkt( m_ctxt, "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",31],\n" " UNIT[\"metre\",1]]", nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); } { // Invalid ellipsoidal parameter (semi major axis) auto obj = proj_create_from_wkt( m_ctxt, "GEOGCS[\"test\",\n" " DATUM[\"test\",\n" " SPHEROID[\"test\",0,298.257223563,\"unused\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]]", nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); EXPECT_EQ(obj, nullptr); } { // Invalid ellipsoidal parameter (inverse flattening) auto obj = proj_create_from_wkt( m_ctxt, "GEOGCS[\"test\",\n" " DATUM[\"test\",\n" " SPHEROID[\"test\",6378137,-1,\"unused\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]]", nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); EXPECT_EQ(obj, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_wkt) { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); { auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT2_2019, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("GEOGCRS[") == 0) << wkt; } { auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT2_2019_SIMPLIFIED, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("GEOGCRS[") == 0) << wkt; EXPECT_TRUE(std::string(wkt).find("ANGULARUNIT[") == std::string::npos) << wkt; } { auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT2_2015, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("GEODCRS[") == 0) << wkt; } { auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT2_2015_SIMPLIFIED, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("GEODCRS[") == 0) << wkt; EXPECT_TRUE(std::string(wkt).find("ANGULARUNIT[") == std::string::npos) << wkt; } { auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_GDAL, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("GEOGCS[\"WGS 84\"") == 0) << wkt; } { auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_ESRI, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("GEOGCS[\"GCS_WGS_1984\"") == 0) << wkt; } // MULTILINE=NO { const char *const options[] = {"MULTILINE=NO", nullptr}; auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_GDAL, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("\n") == std::string::npos) << wkt; } // INDENTATION_WIDTH=2 { const char *const options[] = {"INDENTATION_WIDTH=2", nullptr}; auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_GDAL, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("\n DATUM") != std::string::npos) << wkt; } // OUTPUT_AXIS=NO { const char *const options[] = {"OUTPUT_AXIS=NO", nullptr}; auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_GDAL, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("AXIS") == std::string::npos) << wkt; } // OUTPUT_AXIS=AUTO { const char *const options[] = {"OUTPUT_AXIS=AUTO", nullptr}; auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_GDAL, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("AXIS") == std::string::npos) << wkt; } // OUTPUT_AXIS=YES { const char *const options[] = {"OUTPUT_AXIS=YES", nullptr}; auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_GDAL, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("AXIS") != std::string::npos) << wkt; } auto crs4979 = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4979->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper_crs4979(crs4979); ASSERT_NE(crs4979, nullptr); EXPECT_EQ(proj_as_wkt(m_ctxt, crs4979, PJ_WKT1_GDAL, nullptr), nullptr); // STRICT=NO { const char *const options[] = {"STRICT=NO", nullptr}; auto wkt = proj_as_wkt(m_ctxt, crs4979, PJ_WKT1_GDAL, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("GEOGCS[\"WGS 84\"") == 0) << wkt; } // ALLOW_ELLIPSOIDAL_HEIGHT_AS_VERTICAL_CRS=YES { const char *const options[] = { "ALLOW_ELLIPSOIDAL_HEIGHT_AS_VERTICAL_CRS=YES", nullptr}; auto wkt = proj_as_wkt(m_ctxt, crs4979, PJ_WKT1_GDAL, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find( "COMPD_CS[\"WGS 84 + Ellipsoid (metre)\"") == 0) << wkt; } // ALLOW_LINUNIT_NODE default value { auto wkt = proj_as_wkt(m_ctxt, crs4979, PJ_WKT1_ESRI, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("LINUNIT") != std::string::npos) << wkt; } // ALLOW_LINUNIT_NODE=NO { const char *const options[] = {"ALLOW_LINUNIT_NODE=NO", nullptr}; auto wkt = proj_as_wkt(m_ctxt, crs4979, PJ_WKT1_ESRI, options); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("LINUNIT") == std::string::npos) << wkt; } // unsupported option { const char *const options[] = {"unsupported=yes", nullptr}; auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT2_2019, options); EXPECT_EQ(wkt, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_wkt_check_db_use) { auto obj = proj_create_from_wkt( m_ctxt, "GEOGCS[\"AGD66\",DATUM[\"Australian_Geodetic_Datum_1966\"," "SPHEROID[\"Australian National Spheroid\",6378160,298.25]]," "PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]", nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto wkt = proj_as_wkt(m_ctxt, obj, PJ_WKT1_ESRI, nullptr); EXPECT_EQ(std::string(wkt), "GEOGCS[\"GCS_Australian_1966\",DATUM[\"D_Australian_1966\"," "SPHEROID[\"Australian\",6378160.0,298.25]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_wkt_incompatible_WKT1) { auto wkt = createBoundCRS()->exportToWKT(WKTFormatter::create().get()); auto obj = proj_create_from_wkt(m_ctxt, wkt.c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr) << wkt; auto wkt1_GDAL = proj_as_wkt(m_ctxt, obj, PJ_WKT1_GDAL, nullptr); ASSERT_EQ(wkt1_GDAL, nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_proj_string) { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); { auto proj_5 = proj_as_proj_string(m_ctxt, obj, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); EXPECT_EQ(std::string(proj_5), "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } { auto proj_4 = proj_as_proj_string(m_ctxt, obj, PJ_PROJ_4, nullptr); ASSERT_NE(proj_4, nullptr); EXPECT_EQ(std::string(proj_4), "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_proj_string_incompatible_WKT1) { auto obj = proj_create_from_wkt( m_ctxt, createBoundCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto str = proj_as_proj_string(m_ctxt, obj, PJ_PROJ_5, nullptr); ASSERT_EQ(str, nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_proj_string_approx_tmerc_option_yes) { auto obj = proj_create(m_ctxt, "+proj=tmerc +type=crs"); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); const char *options[] = {"USE_APPROX_TMERC=YES", nullptr}; auto str = proj_as_proj_string(m_ctxt, obj, PJ_PROJ_4, options); ASSERT_NE(str, nullptr); EXPECT_EQ(str, std::string("+proj=tmerc +approx +lat_0=0 +lon_0=0 +k=1 +x_0=0 " "+y_0=0 +datum=WGS84 +units=m +no_defs +type=crs")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_create_bound_crs_to_WGS84) { auto crs = proj_create_from_database(m_ctxt, "EPSG", "4807", PJ_CATEGORY_CRS, false, nullptr); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); auto res = proj_crs_create_bound_crs_to_WGS84(m_ctxt, crs, nullptr); ObjectKeeper keeper_res(res); ASSERT_NE(res, nullptr); auto proj_4 = proj_as_proj_string(m_ctxt, res, PJ_PROJ_4, nullptr); ASSERT_NE(proj_4, nullptr); EXPECT_EQ(std::string(proj_4), "+proj=longlat +ellps=clrk80ign +pm=paris " "+towgs84=-168,-60,320,0,0,0,0 +no_defs +type=crs"); auto base_crs = proj_get_source_crs(m_ctxt, res); ObjectKeeper keeper_base_crs(base_crs); ASSERT_NE(base_crs, nullptr); auto hub_crs = proj_get_target_crs(m_ctxt, res); ObjectKeeper keeper_hub_crs(hub_crs); ASSERT_NE(hub_crs, nullptr); auto transf = proj_crs_get_coordoperation(m_ctxt, res); ObjectKeeper keeper_transf(transf); ASSERT_NE(transf, nullptr); std::vector values(7, 0); EXPECT_TRUE(proj_coordoperation_get_towgs84_values(m_ctxt, transf, values.data(), 7, true)); auto expected = std::vector{-168, -60, 320, 0, 0, 0, 0}; EXPECT_EQ(values, expected); auto res2 = proj_crs_create_bound_crs(m_ctxt, base_crs, hub_crs, transf); ObjectKeeper keeper_res2(res2); ASSERT_NE(res2, nullptr); EXPECT_TRUE(proj_is_equivalent_to(res, res2, PJ_COMP_STRICT)); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_create_bound_crs_to_WGS84_on_invalid_type) { auto wkt = createProjectedCRS()->derivingConversion()->exportToWKT( WKTFormatter::create().get()); auto obj = proj_create_from_wkt(m_ctxt, wkt.c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr) << wkt; auto res = proj_crs_create_bound_crs_to_WGS84(m_ctxt, obj, nullptr); ASSERT_EQ(res, nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_name) { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto name = proj_get_name(obj); ASSERT_TRUE(name != nullptr); EXPECT_EQ(name, std::string("WGS 84")); EXPECT_EQ(name, proj_get_name(obj)); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_id_auth_name) { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto auth = proj_get_id_auth_name(obj, 0); ASSERT_TRUE(auth != nullptr); EXPECT_EQ(auth, std::string("EPSG")); EXPECT_EQ(auth, proj_get_id_auth_name(obj, 0)); EXPECT_EQ(proj_get_id_auth_name(obj, -1), nullptr); EXPECT_EQ(proj_get_id_auth_name(obj, 1), nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_id_code) { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto code = proj_get_id_code(obj, 0); ASSERT_TRUE(code != nullptr); EXPECT_EQ(code, std::string("4326")); EXPECT_EQ(code, proj_get_id_code(obj, 0)); EXPECT_EQ(proj_get_id_code(obj, -1), nullptr); EXPECT_EQ(proj_get_id_code(obj, 1), nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_type) { { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_GEOGRAPHIC_2D_CRS); } { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4979->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_GEOGRAPHIC_3D_CRS); } { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4978->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_GEOCENTRIC_CRS); } { auto obj = proj_create_from_wkt(m_ctxt, GeographicCRS::EPSG_4326->datum() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_GEODETIC_REFERENCE_FRAME); } { auto obj = proj_create_from_wkt(m_ctxt, GeographicCRS::EPSG_4326->ellipsoid() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_ELLIPSOID); } { auto obj = proj_create_from_wkt(m_ctxt, createProjectedCRS() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_PROJECTED_CRS); } { auto obj = proj_create_from_wkt( m_ctxt, createDerivedProjectedCRS() ->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019) .get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_DERIVED_PROJECTED_CRS); } { auto obj = proj_create_from_wkt(m_ctxt, createVerticalCRS() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_VERTICAL_CRS); } { auto wkt = "TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]"; auto datum = proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr); ObjectKeeper keeper(datum); ASSERT_NE(datum, nullptr); EXPECT_EQ(proj_get_type(datum), PJ_TYPE_TEMPORAL_DATUM); } { auto wkt = "ENGINEERINGDATUM[\"Engineering datum\"]"; auto datum = proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr); ObjectKeeper keeper(datum); EXPECT_EQ(proj_get_type(datum), PJ_TYPE_ENGINEERING_DATUM); } { auto wkt = "PDATUM[\"Mean Sea Level\",ANCHOR[\"1013.25 hPa at 15°C\"]]"; auto datum = proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr); ObjectKeeper keeper(datum); EXPECT_EQ(proj_get_type(datum), PJ_TYPE_PARAMETRIC_DATUM); } { auto obj = proj_create_from_wkt(m_ctxt, createVerticalCRS() ->datum() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_VERTICAL_REFERENCE_FRAME); } { auto obj = proj_create_from_wkt(m_ctxt, createProjectedCRS() ->derivingConversion() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_CONVERSION); } { auto obj = proj_create_from_wkt( m_ctxt, createBoundCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_BOUND_CRS); } { auto obj = proj_create_from_wkt(m_ctxt, createBoundCRS() ->transformation() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_TRANSFORMATION); } { auto obj = proj_create_from_wkt(m_ctxt, "AUTHORITY[\"EPSG\", 4326]", nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_get_type(obj), PJ_TYPE_UNKNOWN); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_from_database) { { auto crs = proj_create_from_database(m_ctxt, "EPSG", "-1", PJ_CATEGORY_CRS, false, nullptr); ASSERT_EQ(crs, nullptr); } { auto crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_TRUE(proj_is_crs(crs)); EXPECT_FALSE(proj_is_deprecated(crs)); EXPECT_EQ(proj_get_type(crs), PJ_TYPE_GEOGRAPHIC_2D_CRS); const char *code = proj_get_id_code(crs, 0); ASSERT_NE(code, nullptr); EXPECT_EQ(std::string(code), "4326"); } { auto crs = proj_create_from_database(m_ctxt, "EPSG", "6871", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_TRUE(proj_is_crs(crs)); EXPECT_EQ(proj_get_type(crs), PJ_TYPE_COMPOUND_CRS); } { auto crs = proj_create_from_database(m_ctxt, "EPSG", "6715", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_TRUE(proj_is_crs(crs)); EXPECT_EQ(proj_get_type(crs), PJ_TYPE_ENGINEERING_CRS); } { auto ellipsoid = proj_create_from_database( m_ctxt, "EPSG", "7030", PJ_CATEGORY_ELLIPSOID, false, nullptr); ASSERT_NE(ellipsoid, nullptr); ObjectKeeper keeper(ellipsoid); EXPECT_EQ(proj_get_type(ellipsoid), PJ_TYPE_ELLIPSOID); } { auto pm = proj_create_from_database( m_ctxt, "EPSG", "8903", PJ_CATEGORY_PRIME_MERIDIAN, false, nullptr); ASSERT_NE(pm, nullptr); ObjectKeeper keeper(pm); EXPECT_EQ(proj_get_type(pm), PJ_TYPE_PRIME_MERIDIAN); } { auto datum = proj_create_from_database( m_ctxt, "EPSG", "6326", PJ_CATEGORY_DATUM, false, nullptr); ASSERT_NE(datum, nullptr); ObjectKeeper keeper(datum); EXPECT_EQ(proj_get_type(datum), PJ_TYPE_GEODETIC_REFERENCE_FRAME); } { auto ensemble = proj_create_from_database( m_ctxt, "EPSG", "6326", PJ_CATEGORY_DATUM_ENSEMBLE, false, nullptr); ASSERT_NE(ensemble, nullptr); ObjectKeeper keeper(ensemble); EXPECT_EQ(proj_get_type(ensemble), PJ_TYPE_DATUM_ENSEMBLE); } { // International Terrestrial Reference Frame 2008 auto datum = proj_create_from_database( m_ctxt, "EPSG", "1061", PJ_CATEGORY_DATUM, false, nullptr); ASSERT_NE(datum, nullptr); ObjectKeeper keeper(datum); EXPECT_EQ(proj_get_type(datum), PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME); EXPECT_EQ(proj_dynamic_datum_get_frame_reference_epoch(m_ctxt, datum), 2005.0); } { // Norway Normal Null 2000 auto datum = proj_create_from_database( m_ctxt, "EPSG", "1096", PJ_CATEGORY_DATUM, false, nullptr); ASSERT_NE(datum, nullptr); ObjectKeeper keeper(datum); EXPECT_EQ(proj_get_type(datum), PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME); EXPECT_EQ(proj_dynamic_datum_get_frame_reference_epoch(m_ctxt, datum), 2000.0); } { auto op = proj_create_from_database(m_ctxt, "EPSG", "16031", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ASSERT_NE(op, nullptr); ObjectKeeper keeper(op); EXPECT_EQ(proj_get_type(op), PJ_TYPE_CONVERSION); auto info = proj_pj_info(op); EXPECT_NE(info.id, nullptr); EXPECT_EQ(info.id, std::string("utm")); ASSERT_NE(info.description, nullptr); EXPECT_EQ(info.description, std::string("UTM zone 31N")); ASSERT_NE(info.definition, nullptr); EXPECT_EQ(info.definition, std::string("proj=utm zone=31 ellps=GRS80")); EXPECT_EQ(info.accuracy, 0); } { auto op = proj_create_from_database(m_ctxt, "EPSG", "1024", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ASSERT_NE(op, nullptr); ObjectKeeper keeper(op); EXPECT_EQ(proj_get_type(op), PJ_TYPE_TRANSFORMATION); auto info = proj_pj_info(op); EXPECT_NE(info.id, nullptr); EXPECT_EQ(info.id, std::string("pipeline")); ASSERT_NE(info.description, nullptr); EXPECT_EQ(info.description, std::string("MGI to ETRS89 (4)")); ASSERT_NE(info.definition, nullptr); EXPECT_EQ( info.definition, std::string("proj=pipeline step proj=axisswap " "order=2,1 step proj=unitconvert xy_in=deg xy_out=rad " "step proj=push v_3 " "step proj=cart ellps=bessel step proj=helmert " "x=601.705 y=84.263 z=485.227 rx=-4.7354 ry=-1.3145 " "rz=-5.393 s=-2.3887 convention=coordinate_frame " "step inv proj=cart ellps=GRS80 " "step proj=pop v_3 " "step proj=unitconvert xy_in=rad xy_out=deg " "step proj=axisswap order=2,1")); EXPECT_EQ(info.accuracy, 1); } { PJ_CONTEXT *ctxt = proj_context_create(); std::string s; proj_log_func(ctxt, &s, [](void *user_data, int, const char *msg) { *static_cast(user_data) = msg; }); auto crs = proj_create_from_database(ctxt, "EPSG", "i_do_not_exist", PJ_CATEGORY_CRS, false, nullptr); proj_destroy(crs); proj_context_destroy(ctxt); EXPECT_EQ(crs, nullptr); EXPECT_STREQ( s.c_str(), "proj_create_from_database: crs not found: EPSG:i_do_not_exist"); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs) { auto crs = proj_create_from_wkt( m_ctxt, createProjectedCRS() ->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()) .c_str(), nullptr, nullptr, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_TRUE(proj_is_crs(crs)); auto geodCRS = proj_crs_get_geodetic_crs(m_ctxt, crs); ASSERT_NE(geodCRS, nullptr); ObjectKeeper keeper_geogCRS(geodCRS); EXPECT_TRUE(proj_is_crs(geodCRS)); auto geogCRS_name = proj_get_name(geodCRS); ASSERT_TRUE(geogCRS_name != nullptr); EXPECT_EQ(geogCRS_name, std::string("WGS 84")); auto h_datum = proj_crs_get_horizontal_datum(m_ctxt, crs); ASSERT_NE(h_datum, nullptr); ObjectKeeper keeper_h_datum(h_datum); auto datum = proj_crs_get_datum(m_ctxt, crs); ASSERT_NE(datum, nullptr); ObjectKeeper keeper_datum(datum); EXPECT_TRUE(proj_is_equivalent_to(h_datum, datum, PJ_COMP_STRICT)); auto datum_name = proj_get_name(datum); ASSERT_TRUE(datum_name != nullptr); EXPECT_EQ(datum_name, std::string("World Geodetic System 1984")); auto ellipsoid = proj_get_ellipsoid(m_ctxt, crs); ASSERT_NE(ellipsoid, nullptr); ObjectKeeper keeper_ellipsoid(ellipsoid); auto ellipsoid_name = proj_get_name(ellipsoid); ASSERT_TRUE(ellipsoid_name != nullptr); EXPECT_EQ(ellipsoid_name, std::string("WGS 84")); auto ellipsoid_from_datum = proj_get_ellipsoid(m_ctxt, datum); ASSERT_NE(ellipsoid_from_datum, nullptr); ObjectKeeper keeper_ellipsoid_from_datum(ellipsoid_from_datum); EXPECT_EQ(proj_get_ellipsoid(m_ctxt, ellipsoid), nullptr); EXPECT_FALSE(proj_is_crs(ellipsoid)); double a; double b; int b_is_computed; double rf; EXPECT_TRUE(proj_ellipsoid_get_parameters(m_ctxt, ellipsoid, nullptr, nullptr, nullptr, nullptr)); EXPECT_TRUE(proj_ellipsoid_get_parameters(m_ctxt, ellipsoid, &a, &b, &b_is_computed, &rf)); EXPECT_FALSE(proj_ellipsoid_get_parameters(m_ctxt, crs, &a, &b, &b_is_computed, &rf)); EXPECT_EQ(a, 6378137); EXPECT_NEAR(b, 6356752.31424518, 1e-9); EXPECT_EQ(b_is_computed, 1); EXPECT_EQ(rf, 298.257223563); auto id = proj_get_id_code(ellipsoid, 0); ASSERT_TRUE(id != nullptr); EXPECT_EQ(id, std::string("7030")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_celestial_body_name) { // Geographic CRS { auto obj = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Projected CRS { auto obj = proj_create_from_database(m_ctxt, "EPSG", "32631", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Vertical CRS { auto obj = proj_create_from_database(m_ctxt, "EPSG", "3855", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Compound CRS { auto obj = proj_create_from_database(m_ctxt, "EPSG", "9518", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Geodetic datum { auto obj = proj_create_from_database(m_ctxt, "EPSG", "6267", PJ_CATEGORY_DATUM, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Datum ensemble { auto obj = proj_create_from_database( m_ctxt, "EPSG", "6326", PJ_CATEGORY_DATUM_ENSEMBLE, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Vertical datum { auto obj = proj_create_from_database(m_ctxt, "EPSG", "1027", PJ_CATEGORY_DATUM, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Ellipsoid { auto obj = proj_create_from_database( m_ctxt, "EPSG", "7030", PJ_CATEGORY_ELLIPSOID, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Earth"); } // Ellipsoid non-EARTH { auto obj = proj_create_from_database( m_ctxt, "ESRI", "107903", PJ_CATEGORY_ELLIPSOID, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_NE(celestial_body_name, nullptr); EXPECT_EQ(std::string(celestial_body_name), "Moon"); } // Coordinate operation -> error { auto obj = proj_create_from_database(m_ctxt, "EPSG", "1591", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); const char *celestial_body_name = proj_get_celestial_body_name(m_ctxt, obj); ASSERT_EQ(celestial_body_name, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_prime_meridian) { auto crs = proj_create_from_wkt( m_ctxt, createProjectedCRS() ->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()) .c_str(), nullptr, nullptr, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); auto pm = proj_get_prime_meridian(m_ctxt, crs); ASSERT_NE(pm, nullptr); ObjectKeeper keeper_pm(pm); auto pm_name = proj_get_name(pm); ASSERT_TRUE(pm_name != nullptr); EXPECT_EQ(pm_name, std::string("Greenwich")); EXPECT_EQ(proj_get_prime_meridian(m_ctxt, pm), nullptr); EXPECT_TRUE(proj_prime_meridian_get_parameters(m_ctxt, pm, nullptr, nullptr, nullptr)); double longitude = -1; double longitude_unit = 0; const char *longitude_unit_name = nullptr; EXPECT_TRUE(proj_prime_meridian_get_parameters( m_ctxt, pm, &longitude, &longitude_unit, &longitude_unit_name)); EXPECT_EQ(longitude, 0); EXPECT_NEAR(longitude_unit, UnitOfMeasure::DEGREE.conversionToSI(), 1e-10); ASSERT_TRUE(longitude_unit_name != nullptr); EXPECT_EQ(longitude_unit_name, std::string("degree")); auto datum = proj_crs_get_horizontal_datum(m_ctxt, crs); ASSERT_NE(datum, nullptr); ObjectKeeper keeper_datum(datum); auto pm_from_datum = proj_get_prime_meridian(m_ctxt, datum); ASSERT_NE(pm_from_datum, nullptr); ObjectKeeper keeper_pm_from_datum(pm_from_datum); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_compound) { auto crs = proj_create_from_wkt( m_ctxt, createCompoundCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_EQ(proj_get_type(crs), PJ_TYPE_COMPOUND_CRS); EXPECT_EQ(proj_crs_get_sub_crs(m_ctxt, crs, -1), nullptr); EXPECT_EQ(proj_crs_get_sub_crs(m_ctxt, crs, 2), nullptr); auto subcrs_horiz = proj_crs_get_sub_crs(m_ctxt, crs, 0); ASSERT_NE(subcrs_horiz, nullptr); ObjectKeeper keeper_subcrs_horiz(subcrs_horiz); EXPECT_EQ(proj_get_type(subcrs_horiz), PJ_TYPE_PROJECTED_CRS); EXPECT_EQ(proj_crs_get_sub_crs(m_ctxt, subcrs_horiz, 0), nullptr); auto subcrs_vertical = proj_crs_get_sub_crs(m_ctxt, crs, 1); ASSERT_NE(subcrs_vertical, nullptr); ObjectKeeper keeper_subcrs_vertical(subcrs_vertical); EXPECT_EQ(proj_get_type(subcrs_vertical), PJ_TYPE_VERTICAL_CRS); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_source_target_crs_bound_crs) { auto crs = proj_create_from_wkt( m_ctxt, createBoundCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); auto sourceCRS = proj_get_source_crs(m_ctxt, crs); ASSERT_NE(sourceCRS, nullptr); ObjectKeeper keeper_sourceCRS(sourceCRS); EXPECT_EQ(std::string(proj_get_name(sourceCRS)), "NTF (Paris)"); auto targetCRS = proj_get_target_crs(m_ctxt, crs); ASSERT_NE(targetCRS, nullptr); ObjectKeeper keeper_targetCRS(targetCRS); EXPECT_EQ(std::string(proj_get_name(targetCRS)), "WGS 84"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_source_target_crs_transformation) { auto obj = proj_create_from_wkt(m_ctxt, createBoundCRS() ->transformation() ->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); auto sourceCRS = proj_get_source_crs(m_ctxt, obj); ASSERT_NE(sourceCRS, nullptr); ObjectKeeper keeper_sourceCRS(sourceCRS); EXPECT_EQ(std::string(proj_get_name(sourceCRS)), "NTF (Paris)"); auto targetCRS = proj_get_target_crs(m_ctxt, obj); ASSERT_NE(targetCRS, nullptr); ObjectKeeper keeper_targetCRS(targetCRS); EXPECT_EQ(std::string(proj_get_name(targetCRS)), "WGS 84"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_source_crs_of_projected_crs) { auto crs = proj_create_from_wkt( m_ctxt, createProjectedCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); auto sourceCRS = proj_get_source_crs(m_ctxt, crs); ASSERT_NE(sourceCRS, nullptr); ObjectKeeper keeper_sourceCRS(sourceCRS); EXPECT_EQ(std::string(proj_get_name(sourceCRS)), "WGS 84"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_source_target_crs_conversion_without_crs) { auto obj = proj_create_from_database(m_ctxt, "EPSG", "16031", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); auto sourceCRS = proj_get_source_crs(m_ctxt, obj); ASSERT_EQ(sourceCRS, nullptr); auto targetCRS = proj_get_target_crs(m_ctxt, obj); ASSERT_EQ(targetCRS, nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_source_target_crs_invalid_object) { auto obj = proj_create_from_wkt( m_ctxt, "ELLIPSOID[\"WGS 84\",6378137,298.257223563]", nullptr, nullptr, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); auto sourceCRS = proj_get_source_crs(m_ctxt, obj); ASSERT_EQ(sourceCRS, nullptr); auto targetCRS = proj_get_target_crs(m_ctxt, obj); ASSERT_EQ(targetCRS, nullptr); } // --------------------------------------------------------------------------- struct ListFreer { PROJ_STRING_LIST list; ListFreer(PROJ_STRING_LIST ptrIn) : list(ptrIn) {} ~ListFreer() { proj_string_list_destroy(list); } ListFreer(const ListFreer &) = delete; ListFreer &operator=(const ListFreer &) = delete; }; // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_authorities_from_database) { auto list = proj_get_authorities_from_database(m_ctxt); ListFreer feer(list); ASSERT_NE(list, nullptr); ASSERT_TRUE(list[0] != nullptr); EXPECT_EQ(list[0], std::string("EPSG")); ASSERT_TRUE(list[1] != nullptr); EXPECT_EQ(list[1], std::string("ESRI")); ASSERT_TRUE(list[2] != nullptr); EXPECT_EQ(list[2], std::string("IAU_2015")); ASSERT_TRUE(list[3] != nullptr); EXPECT_EQ(list[3], std::string("IGNF")); ASSERT_TRUE(list[4] != nullptr); EXPECT_EQ(list[4], std::string("NKG")); ASSERT_TRUE(list[5] != nullptr); EXPECT_EQ(list[5], std::string("NRCAN")); ASSERT_TRUE(list[6] != nullptr); EXPECT_EQ(list[6], std::string("OGC")); ASSERT_TRUE(list[7] != nullptr); EXPECT_EQ(list[7], std::string("PROJ")); EXPECT_EQ(list[8], nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_codes_from_database) { const PJ_TYPE listTypes[] = {PJ_TYPE_ELLIPSOID, PJ_TYPE_PRIME_MERIDIAN, PJ_TYPE_GEODETIC_REFERENCE_FRAME, PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME, PJ_TYPE_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME, PJ_TYPE_DATUM_ENSEMBLE, PJ_TYPE_TEMPORAL_DATUM, PJ_TYPE_ENGINEERING_DATUM, PJ_TYPE_PARAMETRIC_DATUM, PJ_TYPE_CRS, PJ_TYPE_GEODETIC_CRS, PJ_TYPE_GEOCENTRIC_CRS, PJ_TYPE_GEOGRAPHIC_CRS, PJ_TYPE_GEOGRAPHIC_2D_CRS, PJ_TYPE_GEOGRAPHIC_3D_CRS, PJ_TYPE_VERTICAL_CRS, PJ_TYPE_PROJECTED_CRS, PJ_TYPE_COMPOUND_CRS, PJ_TYPE_ENGINEERING_CRS, PJ_TYPE_TEMPORAL_CRS, PJ_TYPE_BOUND_CRS, PJ_TYPE_OTHER_CRS, PJ_TYPE_CONVERSION, PJ_TYPE_TRANSFORMATION, PJ_TYPE_CONCATENATED_OPERATION, PJ_TYPE_OTHER_COORDINATE_OPERATION, PJ_TYPE_UNKNOWN}; for (const auto &type : listTypes) { auto list = proj_get_codes_from_database(m_ctxt, "EPSG", type, true); ListFreer feer(list); if (type == PJ_TYPE_TEMPORAL_CRS || type == PJ_TYPE_BOUND_CRS || type == PJ_TYPE_UNKNOWN || type == PJ_TYPE_TEMPORAL_DATUM || type == PJ_TYPE_PARAMETRIC_DATUM) { EXPECT_EQ(list, nullptr) << type; } else { ASSERT_NE(list, nullptr) << type; ASSERT_NE(list[0], nullptr) << type; if (type == PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME || type == PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME) { auto obj = proj_create_from_database( m_ctxt, "EPSG", list[0], PJ_CATEGORY_DATUM, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); EXPECT_EQ(proj_get_type(obj), type) << type << " " << list[0]; } } } } // --------------------------------------------------------------------------- TEST_F(CApi, conversion) { auto crs = proj_create_from_database(m_ctxt, "EPSG", "32631", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); // invalid object type EXPECT_FALSE(proj_coordoperation_get_method_info(m_ctxt, crs, nullptr, nullptr, nullptr)); { auto conv = proj_crs_get_coordoperation(m_ctxt, crs); ASSERT_NE(conv, nullptr); ObjectKeeper keeper_conv(conv); ASSERT_EQ(proj_crs_get_coordoperation(m_ctxt, conv), nullptr); } auto conv = proj_crs_get_coordoperation(m_ctxt, crs); ASSERT_NE(conv, nullptr); ObjectKeeper keeper_conv(conv); EXPECT_TRUE(proj_coordoperation_get_method_info(m_ctxt, conv, nullptr, nullptr, nullptr)); const char *methodName = nullptr; const char *methodAuthorityName = nullptr; const char *methodCode = nullptr; EXPECT_TRUE(proj_coordoperation_get_method_info( m_ctxt, conv, &methodName, &methodAuthorityName, &methodCode)); ASSERT_NE(methodName, nullptr); ASSERT_NE(methodAuthorityName, nullptr); ASSERT_NE(methodCode, nullptr); EXPECT_EQ(methodName, std::string("Transverse Mercator")); EXPECT_EQ(methodAuthorityName, std::string("EPSG")); EXPECT_EQ(methodCode, std::string("9807")); EXPECT_EQ(proj_coordoperation_get_param_count(m_ctxt, conv), 5); EXPECT_EQ(proj_coordoperation_get_param_index(m_ctxt, conv, "foo"), -1); EXPECT_EQ( proj_coordoperation_get_param_index(m_ctxt, conv, "False easting"), 3); EXPECT_FALSE(proj_coordoperation_get_param( m_ctxt, conv, -1, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); EXPECT_FALSE(proj_coordoperation_get_param( m_ctxt, conv, 5, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); const char *name = nullptr; const char *nameAuthorityName = nullptr; const char *nameCode = nullptr; double value = 0; const char *valueString = nullptr; double valueUnitConvFactor = 0; const char *valueUnitName = nullptr; const char *unitAuthName = nullptr; const char *unitCode = nullptr; const char *unitCategory = nullptr; EXPECT_TRUE(proj_coordoperation_get_param( m_ctxt, conv, 3, &name, &nameAuthorityName, &nameCode, &value, &valueString, &valueUnitConvFactor, &valueUnitName, &unitAuthName, &unitCode, &unitCategory)); ASSERT_NE(name, nullptr); ASSERT_NE(nameAuthorityName, nullptr); ASSERT_NE(nameCode, nullptr); EXPECT_EQ(valueString, nullptr); ASSERT_NE(valueUnitName, nullptr); ASSERT_NE(unitAuthName, nullptr); ASSERT_NE(unitCategory, nullptr); ASSERT_NE(unitCategory, nullptr); EXPECT_EQ(name, std::string("False easting")); EXPECT_EQ(nameAuthorityName, std::string("EPSG")); EXPECT_EQ(nameCode, std::string("8806")); EXPECT_EQ(value, 500000.0); EXPECT_EQ(valueUnitConvFactor, 1.0); EXPECT_EQ(valueUnitName, std::string("metre")); EXPECT_EQ(unitAuthName, std::string("EPSG")); EXPECT_EQ(unitCode, std::string("9001")); EXPECT_EQ(unitCategory, std::string("linear")); } // --------------------------------------------------------------------------- TEST_F(CApi, transformation_from_boundCRS) { auto crs = proj_create_from_wkt( m_ctxt, createBoundCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); auto transf = proj_crs_get_coordoperation(m_ctxt, crs); ASSERT_NE(transf, nullptr); ObjectKeeper keeper_transf(transf); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_coordoperation_get_grid_used) { auto op = proj_create_from_database(m_ctxt, "EPSG", "1312", PJ_CATEGORY_COORDINATE_OPERATION, true, nullptr); ASSERT_NE(op, nullptr); ObjectKeeper keeper(op); const std::string old_endpoint = proj_context_get_url_endpoint(m_ctxt); proj_context_set_url_endpoint(m_ctxt, "https://example.com"); EXPECT_EQ(proj_coordoperation_get_grid_used_count(m_ctxt, op), 1); const char *shortName = nullptr; const char *fullName = nullptr; const char *packageName = nullptr; const char *url = nullptr; int directDownload = 0; int openLicense = 0; int available = 0; EXPECT_EQ(proj_coordoperation_get_grid_used(m_ctxt, op, -1, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr), 0); EXPECT_EQ(proj_coordoperation_get_grid_used(m_ctxt, op, 1, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr), 0); EXPECT_EQ(proj_coordoperation_get_grid_used( m_ctxt, op, 0, &shortName, &fullName, &packageName, &url, &directDownload, &openLicense, &available), 1); ASSERT_NE(shortName, nullptr); ASSERT_NE(fullName, nullptr); ASSERT_NE(packageName, nullptr); ASSERT_NE(url, nullptr); EXPECT_EQ(shortName, std::string("ca_nrc_ntv1_can.tif")); // EXPECT_EQ(fullName, std::string("")); EXPECT_EQ(packageName, std::string("")); EXPECT_EQ(std::string(url), "https://example.com/ca_nrc_ntv1_can.tif"); EXPECT_EQ(directDownload, 1); EXPECT_EQ(openLicense, 1); proj_context_set_url_endpoint(m_ctxt, old_endpoint.c_str()); } // --------------------------------------------------------------------------- #ifdef TIFF_ENABLED TEST_F(CApi, proj_coordoperation_get_grid_used_fullname_caching) { // Test bugfix for // https://github.com/OSGeo/PROJ/issues/3444#issuecomment-1309499342 for (int i = 0; i < 2; ++i) { const char *proj_string = "proj=vgridshift grids=tests/test_vgrid_int16.tif"; PJ *P = proj_create(m_ctxt, proj_string); ObjectKeeper keeper(P); const char *shortName = nullptr; const char *fullName = nullptr; const char *packageName = nullptr; const char *url = nullptr; int directDownload = 0; int openLicense = 0; int available = 0; proj_coordoperation_get_grid_used(m_ctxt, P, 0, &shortName, &fullName, &packageName, &url, &directDownload, &openLicense, &available); EXPECT_EQ(std::string(shortName), "tests/test_vgrid_int16.tif"); EXPECT_TRUE(std::string(fullName).find("tests/test_vgrid_int16.tif") != std::string::npos) << std::string(fullName); } } #endif // --------------------------------------------------------------------------- TEST_F(CApi, proj_coordoperation_is_instantiable) { auto op = proj_create_from_database(m_ctxt, "EPSG", "1671", PJ_CATEGORY_COORDINATE_OPERATION, true, nullptr); ASSERT_NE(op, nullptr); ObjectKeeper keeper(op); EXPECT_EQ(proj_coordoperation_is_instantiable(m_ctxt, op), 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_operations) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "4267", PJ_CATEGORY_CRS, false, nullptr); // NAD27 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "4269", PJ_CATEGORY_CRS, false, nullptr); // NAD83 ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 10); EXPECT_EQ(proj_list_get(m_ctxt, res, -1), nullptr); EXPECT_EQ(proj_list_get(m_ctxt, res, proj_list_get_count(res)), nullptr); { auto op = proj_list_get(m_ctxt, res, 0); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); EXPECT_FALSE( proj_coordoperation_has_ballpark_transformation(m_ctxt, op)); EXPECT_EQ(proj_get_name(op), std::string("NAD27 to NAD83 (4)")); } { PJ_COORD coord; coord.xy.x = 40; coord.xy.y = -100; int idx = proj_get_suggested_operation(m_ctxt, res, PJ_FWD, coord); ASSERT_GE(idx, 0); ASSERT_LT(idx, proj_list_get_count(res)); auto op = proj_list_get(m_ctxt, res, idx); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); // Transformation for USA, using NADCON5 EXPECT_EQ(proj_get_name(op), std::string("NAD27 to NAD83 (7)")); } { PJ_COORD coord; coord.xy.x = 40; coord.xy.y = 10; int idx = proj_get_suggested_operation(m_ctxt, res, PJ_FWD, coord); EXPECT_GE(idx, -1); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_suggested_operation_for_NAD83_to_NAD83_HARN) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "4269", PJ_CATEGORY_CRS, false, nullptr); // NAD83 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "4152", PJ_CATEGORY_CRS, false, nullptr); // NAD83(HARN) ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); { PJ_COORD coord; coord.xy.x = 40; coord.xy.y = -100; int idx = proj_get_suggested_operation(m_ctxt, res, PJ_FWD, coord); ASSERT_GE(idx, 0); ASSERT_LT(idx, proj_list_get_count(res)); auto op = proj_list_get(m_ctxt, res, idx); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); // Transformation for CONUS EXPECT_STREQ(proj_get_name(op), "NAD83 to NAD83(HARN) (47)"); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_operations_prime_meridian_non_greenwich) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "27562", PJ_CATEGORY_CRS, false, nullptr); // "NTF (Paris) / Lambert Centre France" ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "4258", PJ_CATEGORY_CRS, false, nullptr); // ETRS89 ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); { PJ_COORD coord; // lat,long=49,-4 if using grid coord.xy.x = 136555.58288992; coord.xy.y = 463344.51894296; int idx = proj_get_suggested_operation(m_ctxt, res, PJ_FWD, coord); ASSERT_GE(idx, 0); auto op = proj_list_get(m_ctxt, res, idx); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); // Transformation using grid EXPECT_EQ(proj_coordoperation_get_grid_used_count(m_ctxt, op), 1); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_suggested_operation_with_operations_without_area_of_use) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); // NAD83(2011) geocentric auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "6317", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); // NAD83(2011) 2D auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "6318", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); PJ_COORD coord; coord.xyz.x = -463930; coord.xyz.y = -4414006; coord.xyz.z = 4562247; int idx = proj_get_suggested_operation(m_ctxt, res, PJ_FWD, coord); EXPECT_GE(idx, 0); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_operations_discard_superseded) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "4203", PJ_CATEGORY_CRS, false, nullptr); // AGD84 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84 ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); proj_operation_factory_context_set_discard_superseded(m_ctxt, ctxt, true); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 4); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_operations_dont_discard_superseded) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "4203", PJ_CATEGORY_CRS, false, nullptr); // AGD84 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84 ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); proj_operation_factory_context_set_discard_superseded(m_ctxt, ctxt, false); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 5); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_operations_with_pivot) { auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "4230", PJ_CATEGORY_CRS, false, nullptr); // ED50 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "4171", PJ_CATEGORY_CRS, false, nullptr); // RGF93 v1 ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); // There is no direct transformations between both // Default behavior: allow any pivot { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); auto op = proj_list_get(m_ctxt, res, 0); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); EXPECT_EQ( proj_get_name(op), std::string( "ED50 to ETRS89 (10) + Inverse of RGF93 v1 to ETRS89 (1)")); } // Disallow pivots { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); proj_operation_factory_context_set_allow_use_intermediate_crs( m_ctxt, ctxt, PROJ_INTERMEDIATE_CRS_USE_NEVER); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); auto op = proj_list_get(m_ctxt, res, 0); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); EXPECT_EQ( proj_get_name(op), std::string("Ballpark geographic offset from ED50 to RGF93 v1")); } // Restrict pivot to ETRS89 { auto ctxt = proj_create_operation_factory_context(m_ctxt, "EPSG"); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); const char *pivots[] = {"EPSG", "4258", nullptr}; proj_operation_factory_context_set_allowed_intermediate_crs( m_ctxt, ctxt, pivots); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); auto op = proj_list_get(m_ctxt, res, 0); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); EXPECT_EQ( proj_get_name(op), std::string( "ED50 to ETRS89 (10) + Inverse of RGF93 v1 to ETRS89 (1)")); } // Restrict pivot to something unrelated { auto ctxt = proj_create_operation_factory_context(m_ctxt, "any"); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); const char *pivots[] = {"EPSG", "4267", nullptr}; // NAD27 proj_operation_factory_context_set_allowed_intermediate_crs( m_ctxt, ctxt, pivots); proj_operation_factory_context_set_allow_use_intermediate_crs( m_ctxt, ctxt, PROJ_INTERMEDIATE_CRS_USE_ALWAYS); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); auto op = proj_list_get(m_ctxt, res, 0); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); EXPECT_EQ( proj_get_name(op), std::string("Ballpark geographic offset from ED50 to RGF93 v1")); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_operations_allow_ballpark_transformations) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "4267", PJ_CATEGORY_CRS, false, nullptr); // NAD27 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "4258", PJ_CATEGORY_CRS, false, nullptr); // ETRS89 ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); // Default: allowed implicitly { auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); } // Allow explicitly { proj_operation_factory_context_set_allow_ballpark_transformations( m_ctxt, ctxt, true); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); } // Disallow { proj_operation_factory_context_set_allow_ballpark_transformations( m_ctxt, ctxt, false); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 0); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_set_database_path_null) { EXPECT_TRUE( proj_context_set_database_path(m_ctxt, nullptr, nullptr, nullptr)); auto source_crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_set_database_path_aux) { const std::string auxDbName( "file:proj_test_aux.db?mode=memory&cache=shared"); sqlite3 *dbAux = nullptr; sqlite3_open_v2( auxDbName.c_str(), &dbAux, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_URI, nullptr); ASSERT_TRUE(dbAux != nullptr); ASSERT_TRUE(sqlite3_exec(dbAux, "BEGIN", nullptr, nullptr, nullptr) == SQLITE_OK); { auto ctxt = DatabaseContext::create(); const auto dbStructure = ctxt->getDatabaseStructure(); for (const auto &sql : dbStructure) { ASSERT_TRUE(sqlite3_exec(dbAux, sql.c_str(), nullptr, nullptr, nullptr) == SQLITE_OK); } } ASSERT_TRUE(sqlite3_exec( dbAux, "INSERT INTO geodetic_crs VALUES('OTHER','OTHER_4326','WGS " "84',NULL,'geographic 2D','EPSG','6422','EPSG','6326'," "NULL,0);", nullptr, nullptr, nullptr) == SQLITE_OK); ASSERT_TRUE(sqlite3_exec(dbAux, "COMMIT", nullptr, nullptr, nullptr) == SQLITE_OK); const char *const aux_db_list[] = {auxDbName.c_str(), nullptr}; EXPECT_TRUE( proj_context_set_database_path(m_ctxt, nullptr, aux_db_list, nullptr)); sqlite3_close(dbAux); { auto crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84 ASSERT_NE(crs, nullptr); ObjectKeeper keeper_source_crs(crs); } { auto crs = proj_create_from_database(m_ctxt, "OTHER", "OTHER_4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84 ASSERT_NE(crs, nullptr); ObjectKeeper keeper_source_crs(crs); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_set_database_path_error_1) { EXPECT_FALSE(proj_context_set_database_path(m_ctxt, "i_do_not_exist.db", nullptr, nullptr)); // We will eventually re-open on the default DB auto source_crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_set_database_path_error_2) { const char *aux_db_list[] = {"i_do_not_exist.db", nullptr}; EXPECT_FALSE( proj_context_set_database_path(m_ctxt, nullptr, aux_db_list, nullptr)); // We will eventually re-open on the default DB auto source_crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84 ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_guess_wkt_dialect) { EXPECT_EQ(proj_context_guess_wkt_dialect(nullptr, "LOCAL_CS[\"foo\"]"), PJ_GUESSED_WKT1_GDAL); EXPECT_EQ(proj_context_guess_wkt_dialect( nullptr, "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_" "1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"), PJ_GUESSED_WKT1_ESRI); EXPECT_EQ(proj_context_guess_wkt_dialect( nullptr, " \n\t\rGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north],\n" " AXIS[\"geodetic longitude (Lon)\",east],\n" " UNIT[\"degree\",0.0174532925199433]]"), PJ_GUESSED_WKT2_2019); EXPECT_EQ(proj_context_guess_wkt_dialect( nullptr, "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north],\n" " AXIS[\"geodetic longitude (Lon)\",east],\n" " UNIT[\"degree\",0.0174532925199433]]"), PJ_GUESSED_WKT2_2015); EXPECT_EQ(proj_context_guess_wkt_dialect(nullptr, "foo"), PJ_GUESSED_NOT_WKT); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_from_name) { /* PJ_OBJ_LIST *proj_create_from_name( PJ_CONTEXT *ctx, const char *auth_name, const char *searchedName, const PJ_TYPE* types, size_t typesCount, int approximateMatch, size_t limitResultCount, const char* const *options); */ { auto res = proj_create_from_name(m_ctxt, nullptr, "WGS 84", nullptr, 0, false, 0, nullptr); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 5); } { auto res = proj_create_from_name(m_ctxt, "xx", "WGS 84", nullptr, 0, false, 0, nullptr); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 0); } { const PJ_TYPE types[] = {PJ_TYPE_GEODETIC_CRS, PJ_TYPE_PROJECTED_CRS}; auto res = proj_create_from_name(m_ctxt, nullptr, "WGS 84", types, 2, true, 10, nullptr); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 10); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_identify) { auto obj = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4807->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); { auto res = proj_identify(m_ctxt, obj, nullptr, nullptr, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); } { int *confidence = nullptr; auto res = proj_identify(m_ctxt, obj, "EPSG", nullptr, &confidence); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); EXPECT_EQ(confidence[0], 100); proj_int_list_destroy(confidence); } { auto objEllps = proj_create_from_wkt( m_ctxt, Ellipsoid::GRS1980->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeperEllps(objEllps); ASSERT_NE(objEllps, nullptr); auto res = proj_identify(m_ctxt, objEllps, nullptr, nullptr, nullptr); ObjListKeeper keeper_res(res); EXPECT_EQ(res, nullptr); } { auto obj2 = proj_create( m_ctxt, "+proj=longlat +datum=WGS84 +no_defs +type=crs"); ObjectKeeper keeper2(obj2); ASSERT_NE(obj2, nullptr); int *confidence = nullptr; auto res = proj_identify(m_ctxt, obj2, nullptr, nullptr, &confidence); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 4); proj_int_list_destroy(confidence); } { auto obj2 = proj_create_from_database(m_ctxt, "IGNF", "ETRS89UTM28", PJ_CATEGORY_CRS, false, nullptr); ObjectKeeper keeper2(obj2); ASSERT_NE(obj2, nullptr); int *confidence = nullptr; auto res = proj_identify(m_ctxt, obj2, "EPSG", nullptr, &confidence); ObjListKeeper keeper_res(res); EXPECT_EQ(proj_list_get_count(res), 1); auto gotCRS = proj_list_get(m_ctxt, res, 0); ASSERT_NE(gotCRS, nullptr); ObjectKeeper keeper_gotCRS(gotCRS); auto auth = proj_get_id_auth_name(gotCRS, 0); ASSERT_TRUE(auth != nullptr); EXPECT_EQ(auth, std::string("EPSG")); auto code = proj_get_id_code(gotCRS, 0); ASSERT_TRUE(code != nullptr); EXPECT_EQ(code, std::string("25828")); EXPECT_EQ(confidence[0], 70); proj_int_list_destroy(confidence); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_domain_count) { auto crs = proj_create_from_database(m_ctxt, "EPSG", "6316", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_EQ(proj_get_domain_count(crs), 2); const char *name = nullptr; EXPECT_TRUE(proj_get_area_of_use_ex(m_ctxt, crs, 0, nullptr, nullptr, nullptr, nullptr, &name)); ASSERT_TRUE(name != nullptr); EXPECT_EQ(std::string(name), "Bosnia and Herzegovina - east of 19°30'E; Kosovo; Montenegro - " "east of 19°30'E; Serbia - between 19°30'E and 22°30'E."); const char *scope = proj_get_scope_ex(crs, 0); ASSERT_TRUE(scope != nullptr); EXPECT_STREQ(scope, "Cadastre, engineering survey, topographic mapping " "(large and medium scale)."); EXPECT_TRUE(proj_get_area_of_use_ex(m_ctxt, crs, 1, nullptr, nullptr, nullptr, nullptr, &name)); ASSERT_TRUE(name != nullptr); EXPECT_EQ(std::string(name), "North Macedonia."); scope = proj_get_scope_ex(crs, 1); ASSERT_TRUE(scope != nullptr); EXPECT_STREQ(scope, "Cadastre."); EXPECT_FALSE(proj_get_area_of_use_ex(m_ctxt, crs, -1, nullptr, nullptr, nullptr, nullptr, &name)); EXPECT_FALSE(proj_get_area_of_use_ex(m_ctxt, crs, 2, nullptr, nullptr, nullptr, nullptr, &name)); EXPECT_EQ(proj_get_scope_ex(crs, -1), nullptr); EXPECT_EQ(proj_get_scope_ex(crs, 2), nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_area_of_use) { { auto crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_TRUE(proj_get_area_of_use(m_ctxt, crs, nullptr, nullptr, nullptr, nullptr, nullptr)); const char *name = nullptr; double w; double s; double e; double n; EXPECT_TRUE(proj_get_area_of_use(m_ctxt, crs, &w, &s, &e, &n, &name)); EXPECT_EQ(w, -180); EXPECT_EQ(s, -90); EXPECT_EQ(e, 180); EXPECT_EQ(n, 90); ASSERT_TRUE(name != nullptr); EXPECT_EQ(std::string(name), "World."); } { auto obj = proj_create(m_ctxt, "+proj=longlat +type=crs"); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_FALSE(proj_get_area_of_use(m_ctxt, obj, nullptr, nullptr, nullptr, nullptr, nullptr)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_coordoperation_get_accuracy) { { auto crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); EXPECT_EQ(proj_coordoperation_get_accuracy(m_ctxt, crs), -1.0); } { auto obj = proj_create_from_database(m_ctxt, "EPSG", "1170", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); EXPECT_EQ(proj_coordoperation_get_accuracy(m_ctxt, obj), 16.0); } { auto obj = proj_create(m_ctxt, "+proj=helmert"); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); EXPECT_EQ(proj_coordoperation_get_accuracy(m_ctxt, obj), -1.0); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_geographic_crs) { auto cs = proj_create_ellipsoidal_2D_cs( m_ctxt, PJ_ELLPS2D_LATITUDE_LONGITUDE, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); { auto obj = proj_create_geographic_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, cs); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto objRef = proj_create(m_ctxt, GeographicCRS::EPSG_4326 ->exportToWKT(WKTFormatter::create().get()) .c_str()); ObjectKeeper keeperobjRef(objRef); EXPECT_NE(objRef, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, objRef, PJ_COMP_EQUIVALENT)); auto datum = proj_crs_get_datum(m_ctxt, obj); ObjectKeeper keeper_datum(datum); ASSERT_NE(datum, nullptr); auto obj2 = proj_create_geographic_crs_from_datum(m_ctxt, "WGS 84", datum, cs); ObjectKeeper keeperObj(obj2); ASSERT_NE(obj2, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, obj2, PJ_COMP_STRICT)); } { auto obj = proj_create_geographic_crs(m_ctxt, nullptr, nullptr, nullptr, 1.0, 0.0, nullptr, 0.0, nullptr, 0.0, cs); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); } // Datum with GDAL_WKT1 spelling: special case of WGS_1984 { auto obj = proj_create_geographic_crs( m_ctxt, "WGS 84", "WGS_1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, cs); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto objRef = proj_create(m_ctxt, GeographicCRS::EPSG_4326 ->exportToWKT(WKTFormatter::create().get()) .c_str()); ObjectKeeper keeperobjRef(objRef); EXPECT_NE(objRef, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, objRef, PJ_COMP_EQUIVALENT)); } // Datum with GDAL_WKT1 spelling: database query { auto obj = proj_create_geographic_crs( m_ctxt, "NAD83", "North_American_Datum_1983", "GRS 1980", 6378137, 298.257222101, "Greenwich", 0.0, "Degree", 0.0174532925199433, cs); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto objRef = proj_create(m_ctxt, GeographicCRS::EPSG_4269 ->exportToWKT(WKTFormatter::create().get()) .c_str()); ObjectKeeper keeperobjRef(objRef); EXPECT_NE(objRef, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, objRef, PJ_COMP_EQUIVALENT)); } // Datum with GDAL_WKT1 spelling: database query in alias_name table { auto crs = proj_create_geographic_crs( m_ctxt, "S-JTSK (Ferro)", "System_Jednotne_Trigonometricke_Site_Katastralni_Ferro", "Bessel 1841", 6377397.155, 299.1528128, "Ferro", -17.66666666666667, "Degree", 0.0174532925199433, cs); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); auto datum = proj_crs_get_datum(m_ctxt, crs); ASSERT_NE(datum, nullptr); ObjectKeeper keeper_datum(datum); auto datum_name = proj_get_name(datum); ASSERT_TRUE(datum_name != nullptr); EXPECT_EQ(datum_name, std::string("System of the Unified Trigonometrical Cadastral " "Network (Ferro)")); } // WKT1 with (deprecated) { auto crs = proj_create_geographic_crs( m_ctxt, "SAD69 (deprecated)", "South_American_Datum_1969", "GRS 1967", 6378160, 298.247167427, "Greenwich", 0, "Degree", 0.0174532925199433, cs); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); auto name = proj_get_name(crs); ASSERT_TRUE(name != nullptr); EXPECT_EQ(name, std::string("SAD69")); EXPECT_TRUE(proj_is_deprecated(crs)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_geocentric_crs) { { auto obj = proj_create_geocentric_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto objRef = proj_create(m_ctxt, GeographicCRS::EPSG_4978 ->exportToWKT(WKTFormatter::create().get()) .c_str()); ObjectKeeper keeperobjRef(objRef); EXPECT_NE(objRef, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, objRef, PJ_COMP_EQUIVALENT)); auto datum = proj_crs_get_datum(m_ctxt, obj); ObjectKeeper keeper_datum(datum); ASSERT_NE(datum, nullptr); auto obj2 = proj_create_geocentric_crs_from_datum(m_ctxt, "WGS 84", datum, "Metre", 1.0); ObjectKeeper keeperObj(obj2); ASSERT_NE(obj2, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, obj2, PJ_COMP_STRICT)); } { auto obj = proj_create_geocentric_crs(m_ctxt, nullptr, nullptr, nullptr, 1.0, 0.0, nullptr, 0.0, nullptr, 0.0, nullptr, 0.0); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, check_coord_op_obj_can_be_used_with_proj_trans) { { auto projCRS = proj_create_conversion_utm(m_ctxt, 31, true); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); { PJ *pj_used = proj_trans_get_last_used_operation(projCRS); ASSERT_EQ(pj_used, nullptr); } PJ_COORD coord; coord.xyzt.x = proj_torad(3.0); coord.xyzt.y = 0; coord.xyzt.z = 0; coord.xyzt.t = 0; EXPECT_NEAR(proj_trans(projCRS, PJ_FWD, coord).xyzt.x, 500000.0, 1e-9); { PJ *pj_used = proj_trans_get_last_used_operation(projCRS); ASSERT_TRUE( proj_is_equivalent_to(pj_used, projCRS, PJ_COMP_STRICT)); proj_destroy(pj_used); } } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_projections) { { constexpr int invalid_zone_number = 0; auto projCRS = proj_create_conversion_utm(m_ctxt, invalid_zone_number, 0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_EQ(projCRS, nullptr); } /* BEGIN: Generated by scripts/create_c_api_projections.py*/ { auto projCRS = proj_create_conversion_utm(m_ctxt, 1, 0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_transverse_mercator( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_gauss_schreiber_transverse_mercator( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_transverse_mercator_south_oriented( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_two_point_equidistant( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_tunisia_mining_grid( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_albers_equal_area( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_conic_conformal_1sp( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_conic_conformal_1sp_variant_b( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_conic_conformal_2sp( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_conic_conformal_2sp_michigan( m_ctxt, 0, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_conic_conformal_2sp_belgium( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_azimuthal_equidistant( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_guam_projection( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_bonne( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_cylindrical_equal_area_spherical( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_cylindrical_equal_area( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_cassini_soldner( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_equidistant_conic( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_eckert_i( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_eckert_ii( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_eckert_iii( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_eckert_iv( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_eckert_v( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_eckert_vi( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_equidistant_cylindrical( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_equidistant_cylindrical_spherical( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_gall( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_goode_homolosine( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_interrupted_goode_homolosine( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_geostationary_satellite_sweep_x( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_geostationary_satellite_sweep_y( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_gnomonic( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_hotine_oblique_mercator_variant_a( m_ctxt, 0, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_hotine_oblique_mercator_variant_b( m_ctxt, 0, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_hotine_oblique_mercator_two_point_natural_origin( m_ctxt, 0, 0, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_laborde_oblique_mercator( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_international_map_world_polyconic( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_krovak_north_oriented( m_ctxt, 0, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_krovak(m_ctxt, 0, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_lambert_azimuthal_equal_area( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_miller_cylindrical( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_mercator_variant_a( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_mercator_variant_b( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_popular_visualisation_pseudo_mercator( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_mollweide( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_new_zealand_mapping_grid( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_oblique_stereographic( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_orthographic( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_american_polyconic( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_polar_stereographic_variant_a( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_polar_stereographic_variant_b( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_robinson( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_sinusoidal( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_stereographic( m_ctxt, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_van_der_grinten( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_wagner_i( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_wagner_ii( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_wagner_iii( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_wagner_iv( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_wagner_v( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_wagner_vi( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_wagner_vii( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_quadrilateralized_spherical_cube( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_spherical_cross_track_height( m_ctxt, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_equal_earth( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_vertical_perspective( m_ctxt, 0, 0, 0, 0, 0, 0, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_pole_rotation_grib_convention( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } { auto projCRS = proj_create_conversion_pole_rotation_netcdf_cf_convention( m_ctxt, 0, 0, 0, "Degree", 0.0174532925199433); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } /* END: Generated by scripts/create_c_api_projections.py*/ } // --------------------------------------------------------------------------- TEST_F(CApi, proj_cs_get_axis_info) { { auto crs = proj_create_from_database(m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper(crs); auto cs = proj_crs_get_coordinate_system(m_ctxt, crs); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); EXPECT_EQ(proj_cs_get_type(m_ctxt, cs), PJ_CS_TYPE_ELLIPSOIDAL); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 2); EXPECT_FALSE(proj_cs_get_axis_info(m_ctxt, cs, -1, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); EXPECT_FALSE(proj_cs_get_axis_info(m_ctxt, cs, 2, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); EXPECT_TRUE(proj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); const char *name = nullptr; const char *abbrev = nullptr; const char *direction = nullptr; double unitConvFactor = 0.0; const char *unitName = nullptr; const char *unitAuthority = nullptr; const char *unitCode = nullptr; EXPECT_TRUE(proj_cs_get_axis_info( m_ctxt, cs, 0, &name, &abbrev, &direction, &unitConvFactor, &unitName, &unitAuthority, &unitCode)); ASSERT_NE(name, nullptr); ASSERT_NE(abbrev, nullptr); ASSERT_NE(direction, nullptr); ASSERT_NE(unitName, nullptr); ASSERT_NE(unitAuthority, nullptr); ASSERT_NE(unitCode, nullptr); EXPECT_EQ(std::string(name), "Geodetic latitude"); EXPECT_EQ(std::string(abbrev), "Lat"); EXPECT_EQ(std::string(direction), "north"); EXPECT_EQ(unitConvFactor, 0.017453292519943295) << unitConvFactor; EXPECT_EQ(std::string(unitName), "degree"); EXPECT_EQ(std::string(unitAuthority), "EPSG"); EXPECT_EQ(std::string(unitCode), "9122"); } // Non CRS object { auto obj = proj_create_from_database(m_ctxt, "EPSG", "1170", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ASSERT_NE(obj, nullptr); ObjectKeeper keeper(obj); EXPECT_EQ(proj_crs_get_coordinate_system(m_ctxt, obj), nullptr); EXPECT_EQ(proj_cs_get_type(m_ctxt, obj), PJ_CS_TYPE_UNKNOWN); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, obj), -1); EXPECT_FALSE(proj_cs_get_axis_info(m_ctxt, obj, 0, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_get_database_metadata) { EXPECT_TRUE(proj_context_get_database_metadata(m_ctxt, "IGNF.VERSION") != nullptr); EXPECT_TRUE(proj_context_get_database_metadata(m_ctxt, "FOO") == nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_get_database_structure) { auto list = proj_context_get_database_structure(m_ctxt, nullptr); ASSERT_NE(list, nullptr); ASSERT_NE(list[0], nullptr); proj_string_list_destroy(list); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_clone) { auto obj = proj_create(m_ctxt, "+proj=longlat"); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto clone = proj_clone(m_ctxt, obj); ObjectKeeper keeperClone(clone); ASSERT_NE(clone, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, clone, PJ_COMP_STRICT)); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_clone_of_obj_with_alternative_operations) { // NAD27 to NAD83 auto obj = proj_create_crs_to_crs(m_ctxt, "EPSG:4267", "EPSG:4269", nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); PJ_COORD c; c.xyzt.x = 40.5; c.xyzt.y = -60; c.xyzt.z = 0; c.xyzt.t = 2021; PJ_COORD c_trans_ref = proj_trans(obj, PJ_FWD, c); EXPECT_NE(c_trans_ref.xyzt.x, c.xyzt.x); EXPECT_NEAR(c_trans_ref.xyzt.x, c.xyzt.x, 1e-3); EXPECT_NEAR(c_trans_ref.xyzt.y, c.xyzt.y, 1e-3); PJ *pj_used = proj_trans_get_last_used_operation(obj); ASSERT_NE(pj_used, nullptr); proj_destroy(pj_used); auto clone = proj_clone(m_ctxt, obj); ObjectKeeper keeperClone(clone); ASSERT_NE(clone, nullptr); EXPECT_TRUE(proj_is_equivalent_to(obj, clone, PJ_COMP_STRICT)); keeper.clear(); obj = nullptr; (void)obj; PJ_COORD c_trans = proj_trans(clone, PJ_FWD, c); EXPECT_EQ(c_trans.xyzt.x, c_trans_ref.xyzt.x); EXPECT_EQ(c_trans.xyzt.y, c_trans_ref.xyzt.y); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_alter_geodetic_crs) { auto projCRS = proj_create_from_wkt( m_ctxt, createProjectedCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(projCRS); ASSERT_NE(projCRS, nullptr); auto newGeodCRS = proj_create(m_ctxt, "+proj=longlat +type=crs"); ObjectKeeper keeper_newGeodCRS(newGeodCRS); ASSERT_NE(newGeodCRS, nullptr); auto geodCRS = proj_crs_get_geodetic_crs(m_ctxt, projCRS); ObjectKeeper keeper_geodCRS(geodCRS); ASSERT_NE(geodCRS, nullptr); auto geodCRSAltered = proj_crs_alter_geodetic_crs(m_ctxt, geodCRS, newGeodCRS); ObjectKeeper keeper_geodCRSAltered(geodCRSAltered); ASSERT_NE(geodCRSAltered, nullptr); EXPECT_TRUE( proj_is_equivalent_to(geodCRSAltered, newGeodCRS, PJ_COMP_STRICT)); { auto projCRSAltered = proj_crs_alter_geodetic_crs(m_ctxt, projCRS, newGeodCRS); ObjectKeeper keeper_projCRSAltered(projCRSAltered); ASSERT_NE(projCRSAltered, nullptr); EXPECT_EQ(proj_get_type(projCRSAltered), PJ_TYPE_PROJECTED_CRS); auto projCRSAltered_geodCRS = proj_crs_get_geodetic_crs(m_ctxt, projCRSAltered); ObjectKeeper keeper_projCRSAltered_geodCRS(projCRSAltered_geodCRS); ASSERT_NE(projCRSAltered_geodCRS, nullptr); EXPECT_TRUE(proj_is_equivalent_to(projCRSAltered_geodCRS, newGeodCRS, PJ_COMP_STRICT)); } // Check that proj_crs_alter_geodetic_crs preserves deprecation flag { auto projCRSDeprecated = proj_alter_name(m_ctxt, projCRS, "new name (deprecated)"); ObjectKeeper keeper_projCRSDeprecated(projCRSDeprecated); ASSERT_NE(projCRSDeprecated, nullptr); auto projCRSAltered = proj_crs_alter_geodetic_crs(m_ctxt, projCRSDeprecated, newGeodCRS); ObjectKeeper keeper_projCRSAltered(projCRSAltered); ASSERT_NE(projCRSAltered, nullptr); EXPECT_EQ(proj_get_name(projCRSAltered), std::string("new name")); EXPECT_TRUE(proj_is_deprecated(projCRSAltered)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_alter_cs_angular_unit) { auto crs = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); { auto alteredCRS = proj_crs_alter_cs_angular_unit(m_ctxt, crs, "my unit", 2, nullptr, nullptr); ObjectKeeper keeper_alteredCRS(alteredCRS); ASSERT_NE(alteredCRS, nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, alteredCRS); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); double unitConvFactor = 0.0; const char *unitName = nullptr; EXPECT_TRUE(proj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, nullptr, &unitConvFactor, &unitName, nullptr, nullptr)); ASSERT_NE(unitName, nullptr); EXPECT_EQ(unitConvFactor, 2) << unitConvFactor; EXPECT_EQ(std::string(unitName), "my unit"); } { auto alteredCRS = proj_crs_alter_cs_angular_unit( m_ctxt, crs, "my unit", 2, "my auth", "my code"); ObjectKeeper keeper_alteredCRS(alteredCRS); ASSERT_NE(alteredCRS, nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, alteredCRS); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); double unitConvFactor = 0.0; const char *unitName = nullptr; const char *unitAuthName = nullptr; const char *unitCode = nullptr; EXPECT_TRUE(proj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, nullptr, &unitConvFactor, &unitName, &unitAuthName, &unitCode)); ASSERT_NE(unitName, nullptr); EXPECT_EQ(unitConvFactor, 2) << unitConvFactor; EXPECT_EQ(std::string(unitName), "my unit"); ASSERT_NE(unitAuthName, nullptr); EXPECT_EQ(std::string(unitAuthName), "my auth"); ASSERT_NE(unitCode, nullptr); EXPECT_EQ(std::string(unitCode), "my code"); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_alter_cs_linear_unit) { auto crs = proj_create_from_wkt( m_ctxt, createProjectedCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); { auto alteredCRS = proj_crs_alter_cs_linear_unit(m_ctxt, crs, "my unit", 2, nullptr, nullptr); ObjectKeeper keeper_alteredCRS(alteredCRS); ASSERT_NE(alteredCRS, nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, alteredCRS); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); double unitConvFactor = 0.0; const char *unitName = nullptr; EXPECT_TRUE(proj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, nullptr, &unitConvFactor, &unitName, nullptr, nullptr)); ASSERT_NE(unitName, nullptr); EXPECT_EQ(unitConvFactor, 2) << unitConvFactor; EXPECT_EQ(std::string(unitName), "my unit"); } { auto alteredCRS = proj_crs_alter_cs_linear_unit( m_ctxt, crs, "my unit", 2, "my auth", "my code"); ObjectKeeper keeper_alteredCRS(alteredCRS); ASSERT_NE(alteredCRS, nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, alteredCRS); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); double unitConvFactor = 0.0; const char *unitName = nullptr; const char *unitAuthName = nullptr; const char *unitCode = nullptr; EXPECT_TRUE(proj_cs_get_axis_info(m_ctxt, cs, 0, nullptr, nullptr, nullptr, &unitConvFactor, &unitName, &unitAuthName, &unitCode)); ASSERT_NE(unitName, nullptr); EXPECT_EQ(unitConvFactor, 2) << unitConvFactor; EXPECT_EQ(std::string(unitName), "my unit"); ASSERT_NE(unitAuthName, nullptr); EXPECT_EQ(std::string(unitAuthName), "my auth"); ASSERT_NE(unitCode, nullptr); EXPECT_EQ(std::string(unitCode), "my code"); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_alter_parameters_linear_unit) { auto crs = proj_create_from_wkt( m_ctxt, createProjectedCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); { auto alteredCRS = proj_crs_alter_parameters_linear_unit( m_ctxt, crs, "my unit", 2, nullptr, nullptr, false); ObjectKeeper keeper_alteredCRS(alteredCRS); ASSERT_NE(alteredCRS, nullptr); auto wkt = proj_as_wkt(m_ctxt, alteredCRS, PJ_WKT2_2019, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("500000") != std::string::npos) << wkt; EXPECT_TRUE(std::string(wkt).find("\"my unit\",2") != std::string::npos) << wkt; } { auto alteredCRS = proj_crs_alter_parameters_linear_unit( m_ctxt, crs, "my unit", 2, nullptr, nullptr, true); ObjectKeeper keeper_alteredCRS(alteredCRS); ASSERT_NE(alteredCRS, nullptr); auto wkt = proj_as_wkt(m_ctxt, alteredCRS, PJ_WKT2_2019, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_TRUE(std::string(wkt).find("250000") != std::string::npos) << wkt; EXPECT_TRUE(std::string(wkt).find("\"my unit\",2") != std::string::npos) << wkt; } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_engineering_crs) { auto crs = proj_create_engineering_crs(m_ctxt, "name"); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); auto wkt = proj_as_wkt(m_ctxt, crs, PJ_WKT1_GDAL, nullptr); ASSERT_NE(wkt, nullptr); EXPECT_EQ(std::string(wkt), "LOCAL_CS[\"name\",\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]") << wkt; } // --------------------------------------------------------------------------- TEST_F(CApi, proj_alter_name) { auto cs = proj_create_ellipsoidal_2D_cs( m_ctxt, PJ_ELLPS2D_LONGITUDE_LATITUDE, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); auto obj = proj_create_geographic_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, cs); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); { auto alteredObj = proj_alter_name(m_ctxt, obj, "new name"); ObjectKeeper keeper_alteredObj(alteredObj); ASSERT_NE(alteredObj, nullptr); EXPECT_EQ(std::string(proj_get_name(alteredObj)), "new name"); EXPECT_FALSE(proj_is_deprecated(alteredObj)); } { auto alteredObj = proj_alter_name(m_ctxt, obj, "new name (deprecated)"); ObjectKeeper keeper_alteredObj(alteredObj); ASSERT_NE(alteredObj, nullptr); EXPECT_EQ(std::string(proj_get_name(alteredObj)), "new name"); EXPECT_TRUE(proj_is_deprecated(alteredObj)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_alter_id) { auto cs = proj_create_ellipsoidal_2D_cs( m_ctxt, PJ_ELLPS2D_LONGITUDE_LATITUDE, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); auto obj = proj_create_geographic_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, cs); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); auto alteredObj = proj_alter_id(m_ctxt, obj, "auth", "code"); ObjectKeeper keeper_alteredObj(alteredObj); ASSERT_NE(alteredObj, nullptr); EXPECT_EQ(std::string(proj_get_id_auth_name(alteredObj, 0)), "auth"); EXPECT_EQ(std::string(proj_get_id_code(alteredObj, 0)), "code"); auto alteredObj2 = proj_alter_id(m_ctxt, alteredObj, "auth2", "code2"); ObjectKeeper keeper_alteredObj2(alteredObj2); ASSERT_NE(alteredObj2, nullptr); EXPECT_EQ(std::string(proj_get_id_auth_name(alteredObj2, 0)), "auth2"); EXPECT_EQ(std::string(proj_get_id_code(alteredObj2, 0)), "code2"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_projected_crs) { PJ_PARAM_DESCRIPTION param; param.name = "param name"; param.auth_name = nullptr; param.code = nullptr; param.value = 0.99; param.unit_name = nullptr; param.unit_conv_factor = 1.0; param.unit_type = PJ_UT_SCALE; auto conv = proj_create_conversion(m_ctxt, "conv", "conv auth", "conv code", "method", "method auth", "method code", 1, ¶m); ObjectKeeper keeper_conv(conv); ASSERT_NE(conv, nullptr); auto geog_cs = proj_create_ellipsoidal_2D_cs( m_ctxt, PJ_ELLPS2D_LONGITUDE_LATITUDE, nullptr, 0); ObjectKeeper keeper_geog_cs(geog_cs); ASSERT_NE(geog_cs, nullptr); auto geogCRS = proj_create_geographic_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, geog_cs); ObjectKeeper keeper_geogCRS(geogCRS); ASSERT_NE(geogCRS, nullptr); auto cs = proj_create_cartesian_2D_cs(m_ctxt, PJ_CART2D_EASTING_NORTHING, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); auto projCRS = proj_create_projected_crs(m_ctxt, "my CRS", geogCRS, conv, cs); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_transformation) { PJ_PARAM_DESCRIPTION param; param.name = "param name"; param.auth_name = nullptr; param.code = nullptr; param.value = 0.99; param.unit_name = nullptr; param.unit_conv_factor = 1.0; param.unit_type = PJ_UT_SCALE; auto geog_cs = proj_create_ellipsoidal_2D_cs( m_ctxt, PJ_ELLPS2D_LONGITUDE_LATITUDE, nullptr, 0); ObjectKeeper keeper_geog_cs(geog_cs); ASSERT_NE(geog_cs, nullptr); auto source_crs = proj_create_geographic_crs( m_ctxt, "Source CRS", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, geog_cs); ObjectKeeper keeper_source_crs(source_crs); ASSERT_NE(source_crs, nullptr); auto target_crs = proj_create_geographic_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, geog_cs); ObjectKeeper keeper_target_crs(target_crs); ASSERT_NE(target_crs, nullptr); auto interp_crs = proj_create_geographic_crs( m_ctxt, "Interpolation CRS", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, geog_cs); ObjectKeeper keeper_interp_crs(interp_crs); ASSERT_NE(interp_crs, nullptr); { auto transf = proj_create_transformation( m_ctxt, "transf", "transf auth", "transf code", source_crs, target_crs, interp_crs, "method", "method auth", "method code", 1, ¶m, 0); ObjectKeeper keeper_transf(transf); ASSERT_NE(transf, nullptr); EXPECT_EQ(proj_coordoperation_get_param_count(m_ctxt, transf), 1); auto got_source_crs = proj_get_source_crs(m_ctxt, transf); ObjectKeeper keeper_got_source_crs(got_source_crs); ASSERT_NE(got_source_crs, nullptr); EXPECT_TRUE( proj_is_equivalent_to(source_crs, got_source_crs, PJ_COMP_STRICT)); auto got_target_crs = proj_get_target_crs(m_ctxt, transf); ObjectKeeper keeper_got_target_crs(got_target_crs); ASSERT_NE(got_target_crs, nullptr); EXPECT_TRUE( proj_is_equivalent_to(target_crs, got_target_crs, PJ_COMP_STRICT)); } { auto transf = proj_create_transformation( m_ctxt, "transf", "transf auth", "transf code", source_crs, target_crs, nullptr, "method", "method auth", "method code", 1, ¶m, -1); ObjectKeeper keeper_transf(transf); ASSERT_NE(transf, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_compound_crs) { auto horiz_cs = proj_create_ellipsoidal_2D_cs( m_ctxt, PJ_ELLPS2D_LONGITUDE_LATITUDE, nullptr, 0); ObjectKeeper keeper_horiz_cs(horiz_cs); ASSERT_NE(horiz_cs, nullptr); auto horiz_crs = proj_create_geographic_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, horiz_cs); ObjectKeeper keeper_horiz_crs(horiz_crs); ASSERT_NE(horiz_crs, nullptr); auto vert_crs = proj_create_vertical_crs(m_ctxt, "myVertCRS", "myVertDatum", nullptr, 0.0); ObjectKeeper keeper_vert_crs(vert_crs); ASSERT_NE(vert_crs, nullptr); EXPECT_EQ(proj_get_name(vert_crs), std::string("myVertCRS")); auto compound_crs = proj_create_compound_crs(m_ctxt, "myCompoundCRS", horiz_crs, vert_crs); ObjectKeeper keeper_compound_crss(compound_crs); ASSERT_NE(compound_crs, nullptr); EXPECT_EQ(proj_get_name(compound_crs), std::string("myCompoundCRS")); auto subcrs_horiz = proj_crs_get_sub_crs(m_ctxt, compound_crs, 0); ASSERT_NE(subcrs_horiz, nullptr); ObjectKeeper keeper_subcrs_horiz(subcrs_horiz); EXPECT_TRUE(proj_is_equivalent_to(subcrs_horiz, horiz_crs, PJ_COMP_STRICT)); auto subcrs_vert = proj_crs_get_sub_crs(m_ctxt, compound_crs, 1); ASSERT_NE(subcrs_vert, nullptr); ObjectKeeper keeper_subcrs_vert(subcrs_vert); EXPECT_TRUE(proj_is_equivalent_to(subcrs_vert, vert_crs, PJ_COMP_STRICT)); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_convert_conversion_to_other_method) { { auto geog_cs = proj_create_ellipsoidal_2D_cs( m_ctxt, PJ_ELLPS2D_LONGITUDE_LATITUDE, nullptr, 0); ObjectKeeper keeper_geog_cs(geog_cs); ASSERT_NE(geog_cs, nullptr); auto geogCRS = proj_create_geographic_crs( m_ctxt, "WGS 84", "World Geodetic System 1984", "WGS 84", 6378137, 298.257223563, "Greenwich", 0.0, "Degree", 0.0174532925199433, geog_cs); ObjectKeeper keeper_geogCRS(geogCRS); ASSERT_NE(geogCRS, nullptr); auto cs = proj_create_cartesian_2D_cs( m_ctxt, PJ_CART2D_EASTING_NORTHING, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); auto conv = proj_create_conversion_mercator_variant_a( m_ctxt, 0, 1, 0.99, 2, 3, "Degree", 0.0174532925199433, "Metre", 1.0); ObjectKeeper keeper_conv(conv); ASSERT_NE(conv, nullptr); auto projCRS = proj_create_projected_crs(m_ctxt, "my CRS", geogCRS, conv, cs); ObjectKeeper keeper_projCRS(projCRS); ASSERT_NE(projCRS, nullptr); // Wrong object type EXPECT_EQ( proj_convert_conversion_to_other_method( m_ctxt, projCRS, EPSG_CODE_METHOD_MERCATOR_VARIANT_B, nullptr), nullptr); auto conv_in_proj = proj_crs_get_coordoperation(m_ctxt, projCRS); ObjectKeeper keeper_conv_in_proj(conv_in_proj); ASSERT_NE(conv_in_proj, nullptr); // 3rd and 4th argument both 0/null EXPECT_EQ(proj_convert_conversion_to_other_method(m_ctxt, conv_in_proj, 0, nullptr), nullptr); auto new_conv = proj_convert_conversion_to_other_method( m_ctxt, conv_in_proj, EPSG_CODE_METHOD_MERCATOR_VARIANT_B, nullptr); ObjectKeeper keeper_new_conv(new_conv); ASSERT_NE(new_conv, nullptr); EXPECT_FALSE( proj_is_equivalent_to(new_conv, conv_in_proj, PJ_COMP_STRICT)); EXPECT_TRUE( proj_is_equivalent_to(new_conv, conv_in_proj, PJ_COMP_EQUIVALENT)); auto new_conv_from_name = proj_convert_conversion_to_other_method( m_ctxt, conv_in_proj, 0, EPSG_NAME_METHOD_MERCATOR_VARIANT_B); ObjectKeeper keeper_new_conv_from_name(new_conv_from_name); ASSERT_NE(new_conv_from_name, nullptr); EXPECT_TRUE(proj_is_equivalent_to(new_conv, new_conv_from_name, PJ_COMP_STRICT)); auto new_conv_back = proj_convert_conversion_to_other_method( m_ctxt, conv_in_proj, 0, EPSG_NAME_METHOD_MERCATOR_VARIANT_A); ObjectKeeper keeper_new_conv_back(new_conv_back); ASSERT_NE(new_conv_back, nullptr); EXPECT_TRUE( proj_is_equivalent_to(conv_in_proj, new_conv_back, PJ_COMP_STRICT)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_non_deprecated) { auto crs = proj_create_from_database(m_ctxt, "EPSG", "4226", PJ_CATEGORY_CRS, false, nullptr); ObjectKeeper keeper(crs); ASSERT_NE(crs, nullptr); auto list = proj_get_non_deprecated(m_ctxt, crs); ASSERT_NE(list, nullptr); ObjListKeeper keeper_list(list); EXPECT_EQ(proj_list_get_count(list), 2); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_query_geodetic_crs_from_datum) { { auto list = proj_query_geodetic_crs_from_datum(m_ctxt, nullptr, "EPSG", "6326", nullptr); ASSERT_NE(list, nullptr); ObjListKeeper keeper_list(list); EXPECT_GE(proj_list_get_count(list), 3); } { auto list = proj_query_geodetic_crs_from_datum(m_ctxt, "EPSG", "EPSG", "6326", "geographic 2D"); ASSERT_NE(list, nullptr); ObjListKeeper keeper_list(list); EXPECT_EQ(proj_list_get_count(list), 1); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_uom_get_info_from_database) { { EXPECT_FALSE(proj_uom_get_info_from_database( m_ctxt, "auth", "code", nullptr, nullptr, nullptr)); } { EXPECT_TRUE(proj_uom_get_info_from_database(m_ctxt, "EPSG", "9001", nullptr, nullptr, nullptr)); } { const char *name = nullptr; double conv_factor = 0.0; const char *category = nullptr; EXPECT_TRUE(proj_uom_get_info_from_database( m_ctxt, "EPSG", "9001", &name, &conv_factor, &category)); ASSERT_NE(name, nullptr); ASSERT_NE(category, nullptr); EXPECT_EQ(std::string(name), "metre"); EXPECT_EQ(conv_factor, 1.0); EXPECT_EQ(std::string(category), "linear"); } { const char *name = nullptr; double conv_factor = 0.0; const char *category = nullptr; EXPECT_TRUE(proj_uom_get_info_from_database( m_ctxt, "EPSG", "9102", &name, &conv_factor, &category)); ASSERT_NE(name, nullptr); ASSERT_NE(category, nullptr); EXPECT_EQ(std::string(name), "degree"); EXPECT_NEAR(conv_factor, UnitOfMeasure::DEGREE.conversionToSI(), 1e-10); EXPECT_EQ(std::string(category), "angular"); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_grid_get_info_from_database) { { EXPECT_FALSE(proj_grid_get_info_from_database(m_ctxt, "xxx", nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); } { EXPECT_TRUE(proj_grid_get_info_from_database( m_ctxt, "au_icsm_GDA94_GDA2020_conformal.tif", nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); } { const char *full_name = nullptr; const char *package_name = nullptr; const char *url = nullptr; int direct_download = 0; int open_license = 0; int available = 0; EXPECT_TRUE(proj_grid_get_info_from_database( m_ctxt, "au_icsm_GDA94_GDA2020_conformal.tif", &full_name, &package_name, &url, &direct_download, &open_license, &available)); ASSERT_NE(full_name, nullptr); // empty string expected as the file is not in test data EXPECT_TRUE(full_name[0] == 0); ASSERT_NE(package_name, nullptr); EXPECT_TRUE(package_name[0] == 0); // empty string expected ASSERT_NE(url, nullptr); EXPECT_EQ(std::string(url), "https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal.tif"); EXPECT_EQ(direct_download, 1); EXPECT_EQ(open_license, 1); } // Same test as above, but with PROJ 6 grid name { const char *full_name = nullptr; const char *package_name = nullptr; const char *url = nullptr; int direct_download = 0; int open_license = 0; int available = 0; EXPECT_TRUE(proj_grid_get_info_from_database( m_ctxt, "GDA94_GDA2020_conformal.gsb", &full_name, &package_name, &url, &direct_download, &open_license, &available)); ASSERT_NE(full_name, nullptr); // empty string expected as the file is not in test data EXPECT_TRUE(full_name[0] == 0); ASSERT_NE(package_name, nullptr); EXPECT_TRUE(package_name[0] == 0); // empty string expected ASSERT_NE(url, nullptr); EXPECT_EQ(std::string(url), "https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal.tif"); EXPECT_EQ(direct_download, 1); EXPECT_EQ(open_license, 1); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_cartesian_2D_cs) { { auto cs = proj_create_cartesian_2D_cs( m_ctxt, PJ_CART2D_EASTING_NORTHING, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); } { auto cs = proj_create_cartesian_2D_cs( m_ctxt, PJ_CART2D_NORTHING_EASTING, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); } { auto cs = proj_create_cartesian_2D_cs( m_ctxt, PJ_CART2D_NORTH_POLE_EASTING_SOUTH_NORTHING_SOUTH, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); } { auto cs = proj_create_cartesian_2D_cs( m_ctxt, PJ_CART2D_SOUTH_POLE_EASTING_NORTH_NORTHING_NORTH, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); } { auto cs = proj_create_cartesian_2D_cs( m_ctxt, PJ_CART2D_WESTING_SOUTHING, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_crs_info_list_from_database) { { proj_crs_info_list_destroy(nullptr); } { proj_get_crs_list_parameters_destroy(nullptr); } // All null parameters { auto list = proj_get_crs_info_list_from_database(nullptr, nullptr, nullptr, nullptr); ASSERT_NE(list, nullptr); ASSERT_NE(list[0], nullptr); EXPECT_NE(list[0]->auth_name, nullptr); EXPECT_NE(list[0]->code, nullptr); EXPECT_NE(list[0]->name, nullptr); proj_crs_info_list_destroy(list); } // Default parameters { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); auto list = proj_get_crs_info_list_from_database(m_ctxt, "EPSG", params, &result_count); proj_get_crs_list_parameters_destroy(params); ASSERT_NE(list, nullptr); EXPECT_GT(result_count, 1); EXPECT_EQ(list[result_count], nullptr); bool found4326 = false; bool found4978 = false; bool found4979 = false; bool found32631 = false; bool found3855 = false; bool found3901 = false; for (int i = 0; i < result_count; i++) { // EPSG should only include Earth CRS, at least for now... EXPECT_EQ(std::string(list[i]->celestial_body_name), "Earth"); auto code = std::string(list[i]->code); if (code == "4326") { found4326 = true; EXPECT_EQ(std::string(list[i]->auth_name), "EPSG"); EXPECT_EQ(std::string(list[i]->name), "WGS 84"); EXPECT_EQ(list[i]->type, PJ_TYPE_GEOGRAPHIC_2D_CRS); EXPECT_EQ(list[i]->deprecated, 0); EXPECT_EQ(list[i]->bbox_valid, 1); EXPECT_EQ(list[i]->west_lon_degree, -180.0); EXPECT_EQ(list[i]->south_lat_degree, -90.0); EXPECT_EQ(list[i]->east_lon_degree, 180.0); EXPECT_EQ(list[i]->north_lat_degree, 90.0); EXPECT_TRUE(std::string(list[i]->area_name).find("World") == 0) << std::string(list[i]->area_name); EXPECT_EQ(list[i]->projection_method_name, nullptr); } else if (code == "4978") { found4978 = true; EXPECT_EQ(list[i]->type, PJ_TYPE_GEOCENTRIC_CRS); } else if (code == "4979") { found4979 = true; EXPECT_EQ(list[i]->type, PJ_TYPE_GEOGRAPHIC_3D_CRS); } else if (code == "32631") { found32631 = true; EXPECT_EQ(list[i]->type, PJ_TYPE_PROJECTED_CRS); EXPECT_EQ(std::string(list[i]->projection_method_name), "Transverse Mercator"); } else if (code == "3855") { found3855 = true; EXPECT_EQ(list[i]->type, PJ_TYPE_VERTICAL_CRS); } else if (code == "3901") { found3901 = true; EXPECT_EQ(list[i]->type, PJ_TYPE_COMPOUND_CRS); } EXPECT_EQ(list[i]->deprecated, 0); } EXPECT_TRUE(found4326); EXPECT_TRUE(found4978); EXPECT_TRUE(found4979); EXPECT_TRUE(found32631); EXPECT_TRUE(found3855); EXPECT_TRUE(found3901); proj_crs_info_list_destroy(list); } // Filter on only geodetic crs { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); params->typesCount = 1; auto type = PJ_TYPE_GEODETIC_CRS; params->types = &type; auto list = proj_get_crs_info_list_from_database(m_ctxt, nullptr, params, &result_count); bool foundGeog2D = false; bool foundGeog3D = false; bool foundGeocentric = false; bool foundGeodeticCRS = false; // for now, only -ocentric ellipsoidal IAU CRS for (int i = 0; i < result_count; i++) { foundGeog2D |= list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS; foundGeog3D |= list[i]->type == PJ_TYPE_GEOGRAPHIC_3D_CRS; foundGeocentric |= list[i]->type == PJ_TYPE_GEOCENTRIC_CRS; foundGeodeticCRS |= list[i]->type == PJ_TYPE_GEODETIC_CRS; EXPECT_TRUE(list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS || list[i]->type == PJ_TYPE_GEOGRAPHIC_3D_CRS || list[i]->type == PJ_TYPE_GEOCENTRIC_CRS || list[i]->type == PJ_TYPE_GEODETIC_CRS); } EXPECT_TRUE(foundGeog2D); EXPECT_TRUE(foundGeog3D); EXPECT_TRUE(foundGeocentric); EXPECT_TRUE(foundGeodeticCRS); proj_get_crs_list_parameters_destroy(params); proj_crs_info_list_destroy(list); } // Filter on only geographic crs { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); params->typesCount = 1; auto type = PJ_TYPE_GEOGRAPHIC_CRS; params->types = &type; auto list = proj_get_crs_info_list_from_database(m_ctxt, "EPSG", params, &result_count); bool foundGeog2D = false; bool foundGeog3D = false; for (int i = 0; i < result_count; i++) { foundGeog2D |= list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS; foundGeog3D |= list[i]->type == PJ_TYPE_GEOGRAPHIC_3D_CRS; EXPECT_TRUE(list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS || list[i]->type == PJ_TYPE_GEOGRAPHIC_3D_CRS); } EXPECT_TRUE(foundGeog2D); EXPECT_TRUE(foundGeog3D); proj_get_crs_list_parameters_destroy(params); proj_crs_info_list_destroy(list); } // Filter on only geographic 2D crs and projected CRS { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); params->typesCount = 2; const PJ_TYPE types[] = {PJ_TYPE_GEOGRAPHIC_2D_CRS, PJ_TYPE_PROJECTED_CRS}; params->types = types; auto list = proj_get_crs_info_list_from_database(m_ctxt, "EPSG", params, &result_count); bool foundGeog2D = false; bool foundProjected = false; for (int i = 0; i < result_count; i++) { foundGeog2D |= list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS; foundProjected |= list[i]->type == PJ_TYPE_PROJECTED_CRS; EXPECT_TRUE(list[i]->type == PJ_TYPE_GEOGRAPHIC_2D_CRS || list[i]->type == PJ_TYPE_PROJECTED_CRS); } EXPECT_TRUE(foundGeog2D); EXPECT_TRUE(foundProjected); proj_get_crs_list_parameters_destroy(params); proj_crs_info_list_destroy(list); } // Filter on bbox (inclusion) { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); params->bbox_valid = 1; params->west_lon_degree = 2; params->south_lat_degree = 49; params->east_lon_degree = 2.1; params->north_lat_degree = 49.1; params->typesCount = 1; auto type = PJ_TYPE_PROJECTED_CRS; params->types = &type; auto list = proj_get_crs_info_list_from_database(m_ctxt, "EPSG", params, &result_count); ASSERT_NE(list, nullptr); EXPECT_GT(result_count, 1); for (int i = 0; i < result_count; i++) { if (list[i]->west_lon_degree < list[i]->east_lon_degree) { EXPECT_LE(list[i]->west_lon_degree, params->west_lon_degree); EXPECT_GE(list[i]->east_lon_degree, params->east_lon_degree); } EXPECT_LE(list[i]->south_lat_degree, params->south_lat_degree); EXPECT_GE(list[i]->north_lat_degree, params->north_lat_degree); } proj_get_crs_list_parameters_destroy(params); proj_crs_info_list_destroy(list); } // Filter on bbox (intersection) { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); params->bbox_valid = 1; params->west_lon_degree = 2; params->south_lat_degree = 49; params->east_lon_degree = 2.1; params->north_lat_degree = 49.1; params->crs_area_of_use_contains_bbox = 0; params->typesCount = 1; auto type = PJ_TYPE_PROJECTED_CRS; params->types = &type; auto list = proj_get_crs_info_list_from_database(m_ctxt, "EPSG", params, &result_count); ASSERT_NE(list, nullptr); EXPECT_GT(result_count, 1); for (int i = 0; i < result_count; i++) { if (list[i]->west_lon_degree < list[i]->east_lon_degree) { EXPECT_LE(list[i]->west_lon_degree, params->west_lon_degree); EXPECT_GE(list[i]->east_lon_degree, params->east_lon_degree); } EXPECT_LE(list[i]->south_lat_degree, params->north_lat_degree); EXPECT_GE(list[i]->north_lat_degree, params->south_lat_degree); } proj_get_crs_list_parameters_destroy(params); proj_crs_info_list_destroy(list); } // Filter on celestial body { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); params->celestial_body_name = "non existing"; auto list = proj_get_crs_info_list_from_database(m_ctxt, nullptr, params, &result_count); ASSERT_NE(list, nullptr); EXPECT_EQ(result_count, 0); proj_get_crs_list_parameters_destroy(params); proj_crs_info_list_destroy(list); } // Filter on celestial body { int result_count = 0; auto params = proj_get_crs_list_parameters_create(); params->celestial_body_name = "Earth"; auto list = proj_get_crs_info_list_from_database(m_ctxt, nullptr, params, &result_count); ASSERT_NE(list, nullptr); EXPECT_GT(result_count, 0); proj_get_crs_list_parameters_destroy(params); proj_crs_info_list_destroy(list); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_units_from_database) { { proj_unit_list_destroy(nullptr); } { auto list = proj_get_units_from_database(nullptr, nullptr, nullptr, true, nullptr); ASSERT_NE(list, nullptr); ASSERT_NE(list[0], nullptr); ASSERT_NE(list[0]->auth_name, nullptr); ASSERT_NE(list[0]->code, nullptr); ASSERT_NE(list[0]->name, nullptr); proj_unit_list_destroy(list); } { int result_count = 0; auto list = proj_get_units_from_database(nullptr, "EPSG", "linear", false, &result_count); ASSERT_NE(list, nullptr); EXPECT_GT(result_count, 1); EXPECT_EQ(list[result_count], nullptr); bool found9001 = false; for (int i = 0; i < result_count; i++) { EXPECT_EQ(std::string(list[i]->auth_name), "EPSG"); if (std::string(list[i]->code) == "9001") { EXPECT_EQ(std::string(list[i]->name), "metre"); EXPECT_EQ(std::string(list[i]->category), "linear"); EXPECT_EQ(list[i]->conv_factor, 1.0); ASSERT_NE(list[i]->proj_short_name, nullptr); EXPECT_EQ(std::string(list[i]->proj_short_name), "m"); EXPECT_EQ(list[i]->deprecated, 0); found9001 = true; } EXPECT_EQ(list[i]->deprecated, 0); } EXPECT_TRUE(found9001); proj_unit_list_destroy(list); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_celestial_body_list_from_database) { { proj_celestial_body_list_destroy(nullptr); } { auto list = proj_get_celestial_body_list_from_database(nullptr, nullptr, nullptr); ASSERT_NE(list, nullptr); ASSERT_NE(list[0], nullptr); ASSERT_NE(list[0]->auth_name, nullptr); ASSERT_NE(list[0]->name, nullptr); proj_celestial_body_list_destroy(list); } { int result_count = 0; auto list = proj_get_celestial_body_list_from_database(nullptr, "ESRI", &result_count); ASSERT_NE(list, nullptr); EXPECT_GT(result_count, 1); EXPECT_EQ(list[result_count], nullptr); bool foundGanymede = false; for (int i = 0; i < result_count; i++) { EXPECT_EQ(std::string(list[i]->auth_name), "ESRI"); if (std::string(list[i]->name) == "Ganymede") { foundGanymede = true; } } EXPECT_TRUE(foundGanymede); proj_celestial_body_list_destroy(list); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_normalize_for_visualization) { { auto P = proj_create(m_ctxt, "+proj=utm +zone=31 +ellps=WGS84"); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper keeper_Pnormalized(Pnormalized); EXPECT_EQ(Pnormalized, nullptr); } auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4326", "EPSG:32631", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper keeper_Pnormalized(Pnormalized); ASSERT_NE(Pnormalized, nullptr); auto projstr = proj_as_proj_string(m_ctxt, Pnormalized, PJ_PROJ_5, nullptr); ASSERT_NE(projstr, nullptr); EXPECT_EQ(std::string(projstr), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=utm +zone=31 +ellps=WGS84"); EXPECT_TRUE(proj_degree_input(Pnormalized, PJ_FWD)); EXPECT_FALSE(proj_degree_output(Pnormalized, PJ_FWD)); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_normalize_for_visualization_with_alternatives) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4326", "EPSG:3003", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper keeper_Pnormalized(Pnormalized); ASSERT_NE(Pnormalized, nullptr); EXPECT_TRUE(proj_degree_input(Pnormalized, PJ_FWD)); EXPECT_FALSE(proj_degree_output(Pnormalized, PJ_FWD)); { PJ_COORD c; // Approximately Roma c.xyzt.x = 12.5; c.xyzt.y = 42; c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(Pnormalized, PJ_FWD, c); EXPECT_NEAR(c.xy.x, 1789912.46264783037, 1e-8); EXPECT_NEAR(c.xy.y, 4655716.25402576849, 1e-8); auto projstr = proj_pj_info(Pnormalized).definition; ASSERT_NE(projstr, nullptr); EXPECT_EQ(std::string(projstr), "proj=pipeline step proj=unitconvert xy_in=deg xy_out=rad " "step proj=push v_3 step proj=cart ellps=WGS84 " "step inv proj=helmert x=-104.1 y=-49.1 z=-9.9 rx=0.971 " "ry=-2.917 rz=0.714 s=-11.68 convention=position_vector " "step inv proj=cart ellps=intl step proj=pop v_3 " "step proj=tmerc lat_0=0 lon_0=9 k=0.9996 x_0=1500000 " "y_0=0 ellps=intl"); } { PJ_COORD c; // Approximately Roma c.xyzt.x = 1789912.46264783037; c.xyzt.y = 4655716.25402576849; c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(Pnormalized, PJ_INV, c); EXPECT_NEAR(c.lp.lam, 12.5, 1e-8); EXPECT_NEAR(c.lp.phi, 42, 1e-8); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_normalize_for_visualization_with_alternatives_reverse) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:3003", "EPSG:4326", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper keeper_Pnormalized(Pnormalized); ASSERT_NE(Pnormalized, nullptr); EXPECT_FALSE(proj_degree_input(Pnormalized, PJ_FWD)); EXPECT_TRUE(proj_degree_output(Pnormalized, PJ_FWD)); PJ_COORD c; // Approximately Roma c.xyzt.x = 1789912.46264783037; c.xyzt.y = 4655716.25402576849; c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; c = proj_trans(Pnormalized, PJ_FWD, c); EXPECT_NEAR(c.lp.lam, 12.5, 1e-8); EXPECT_NEAR(c.lp.phi, 42, 1e-8); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_normalize_for_visualization_on_crs) { auto P = proj_create(m_ctxt, "EPSG:4326"); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper keeper_Pnormalized(Pnormalized); ASSERT_NE(Pnormalized, nullptr); EXPECT_EQ(proj_get_id_code(Pnormalized, 0), nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, Pnormalized); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); const char *name = nullptr; ASSERT_TRUE(proj_cs_get_axis_info(m_ctxt, cs, 0, &name, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr)); ASSERT_NE(name, nullptr); EXPECT_EQ(std::string(name), "Geodetic longitude"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_coordoperation_create_inverse) { auto P = proj_create( m_ctxt, "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push " "+v_3 +step +proj=cart +ellps=evrst30 +step +proj=helmert " "+x=293 +y=836 +z=318 +rx=0.5 +ry=1.6 +rz=-2.8 +s=2.1 " "+convention=position_vector +step +inv +proj=cart " "+ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pinversed = proj_coordoperation_create_inverse(m_ctxt, P); ObjectKeeper keeper_Pinversed(Pinversed); ASSERT_NE(Pinversed, nullptr); const char *options[] = {"MULTILINE=YES", "INDENTATION_WIDTH=4", "MAX_LINE_LENGTH=40", nullptr}; auto projstr = proj_as_proj_string(m_ctxt, Pinversed, PJ_PROJ_5, options); ASSERT_NE(projstr, nullptr); const char *expected_projstr = "+proj=pipeline\n" " +step +proj=axisswap +order=2,1\n" " +step +proj=unitconvert +xy_in=deg\n" " +xy_out=rad\n" " +step +proj=push +v_3\n" " +step +proj=cart +ellps=WGS84\n" " +step +inv +proj=helmert +x=293\n" " +y=836 +z=318 +rx=0.5 +ry=1.6\n" " +rz=-2.8 +s=2.1\n" " +convention=position_vector\n" " +step +inv +proj=cart +ellps=evrst30\n" " +step +proj=pop +v_3\n" " +step +proj=unitconvert +xy_in=rad\n" " +xy_out=deg\n" " +step +proj=axisswap +order=2,1"; EXPECT_EQ(std::string(projstr), expected_projstr); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_remarks) { // Transformation { auto co = proj_create_from_database(m_ctxt, "EPSG", "8048", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ObjectKeeper keeper(co); ASSERT_NE(co, nullptr); auto remarks = proj_get_remarks(co); ASSERT_NE(remarks, nullptr); EXPECT_TRUE(std::string(remarks).find( "Scale difference in ppb where 1/billion = 1E-9.") == 0) << remarks; } // Conversion { auto co = proj_create_from_database(m_ctxt, "EPSG", "3811", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ObjectKeeper keeper(co); ASSERT_NE(co, nullptr); auto remarks = proj_get_remarks(co); ASSERT_NE(remarks, nullptr); EXPECT_EQ(remarks, std::string("Replaces Lambert 2005.")); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_scope) { // Transformation { auto co = proj_create_from_database(m_ctxt, "EPSG", "8048", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ObjectKeeper keeper(co); ASSERT_NE(co, nullptr); auto scope = proj_get_scope(co); ASSERT_NE(scope, nullptr); EXPECT_EQ(scope, std::string("Transformation of GDA94 coordinates that have " "been derived through GNSS CORS.")); } // Conversion { auto co = proj_create_from_database(m_ctxt, "EPSG", "3811", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ObjectKeeper keeper(co); ASSERT_NE(co, nullptr); auto scope = proj_get_scope(co); ASSERT_NE(scope, nullptr); EXPECT_EQ(scope, std::string("Engineering survey, topographic mapping.")); } { auto P = proj_create(m_ctxt, "+proj=noop"); ObjectKeeper keeper(P); ASSERT_NE(P, nullptr); auto scope = proj_get_scope(P); ASSERT_EQ(scope, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_concatoperation_get_step) { // Test on a non concatenated operation { auto co = proj_create_from_database(m_ctxt, "EPSG", "8048", PJ_CATEGORY_COORDINATE_OPERATION, false, nullptr); ObjectKeeper keeper(co); ASSERT_NE(co, nullptr); ASSERT_NE(proj_get_type(co), PJ_TYPE_CONCATENATED_OPERATION); ASSERT_EQ(proj_concatoperation_get_step_count(m_ctxt, co), 0); ASSERT_EQ(proj_concatoperation_get_step(m_ctxt, co, 0), nullptr); } // Test on a concatenated operation { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); // GDA94 / MGA zone 56 auto source_crs = proj_create_from_database( m_ctxt, "EPSG", "28356", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(source_crs, nullptr); ObjectKeeper keeper_source_crs(source_crs); // GDA2020 / MGA zone 56 auto target_crs = proj_create_from_database( m_ctxt, "EPSG", "7856", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(target_crs, nullptr); ObjectKeeper keeper_target_crs(target_crs); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); ASSERT_NE(res, nullptr); ObjListKeeper keeper_res(res); ASSERT_GT(proj_list_get_count(res), 0); auto op = proj_list_get(m_ctxt, res, 0); ASSERT_NE(op, nullptr); ObjectKeeper keeper_op(op); ASSERT_EQ(proj_get_type(op), PJ_TYPE_CONCATENATED_OPERATION); ASSERT_EQ(proj_concatoperation_get_step_count(m_ctxt, op), 3); EXPECT_EQ(proj_concatoperation_get_step(m_ctxt, op, -1), nullptr); EXPECT_EQ(proj_concatoperation_get_step(m_ctxt, op, 3), nullptr); auto step = proj_concatoperation_get_step(m_ctxt, op, 1); ASSERT_NE(step, nullptr); ObjectKeeper keeper_step(step); const char *scope = proj_get_scope(step); EXPECT_NE(scope, nullptr); EXPECT_NE(std::string(scope), std::string()); const char *remarks = proj_get_remarks(step); EXPECT_NE(remarks, nullptr); EXPECT_NE(std::string(remarks), std::string()); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_as_projjson) { auto obj = proj_create( m_ctxt, Ellipsoid::WGS84->exportToJSON(JSONFormatter::create().get()).c_str()); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr); { auto projjson = proj_as_projjson(m_ctxt, obj, nullptr); ASSERT_NE(projjson, nullptr); EXPECT_EQ(std::string(projjson), "{\n" " \"$schema\": " "\"https://proj.org/schemas/v0.7/projjson.schema.json\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7030\n" " }\n" "}"); } { const char *const options[] = {"INDENTATION_WIDTH=4", "SCHEMA=", nullptr}; auto projjson = proj_as_projjson(m_ctxt, obj, options); ASSERT_NE(projjson, nullptr); EXPECT_EQ(std::string(projjson), "{\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7030\n" " }\n" "}"); } { const char *const options[] = {"MULTILINE=NO", "SCHEMA=", nullptr}; auto projjson = proj_as_projjson(m_ctxt, obj, options); ASSERT_NE(projjson, nullptr); EXPECT_EQ(std::string(projjson), "{\"type\":\"Ellipsoid\",\"name\":\"WGS 84\"," "\"semi_major_axis\":6378137," "\"inverse_flattening\":298.257223563," "\"id\":{\"authority\":\"EPSG\",\"code\":7030}}"); } } // --------------------------------------------------------------------------- #if !defined(EMBED_RESOURCE_FILES) && !defined(USE_ONLY_EMBEDDED_RESOURCE_FILES) TEST_F(CApi, proj_context_copy_from_default) { auto c_path = proj_context_get_database_path(m_ctxt); ASSERT_TRUE(c_path != nullptr); std::string path(c_path); FILE *f = fopen(path.c_str(), "rb"); ASSERT_NE(f, nullptr); fseek(f, 0, SEEK_END); auto length = ftell(f); std::string content; content.resize(static_cast(length)); fseek(f, 0, SEEK_SET); auto read_bytes = fread(&content[0], 1, content.size(), f); ASSERT_EQ(read_bytes, content.size()); fclose(f); const char *tempdir = getenv("TEMP"); if (!tempdir) { tempdir = getenv("TMP"); } if (!tempdir) { tempdir = "/tmp"; } std::string tmp_filename(std::string(tempdir) + "/test_proj_context_set_autoclose_database.db"); f = fopen(tmp_filename.c_str(), "wb"); if (!f) { std::cerr << "Cannot create " << tmp_filename << std::endl; return; } fwrite(content.data(), 1, content.size(), f); fclose(f); auto c_default_path = proj_context_get_database_path(nullptr); std::string default_path(c_default_path ? c_default_path : ""); EXPECT_TRUE(proj_context_set_database_path(nullptr, tmp_filename.c_str(), nullptr, nullptr)); PJ_CONTEXT *new_ctx = proj_context_create(); EXPECT_TRUE(proj_context_set_database_path( nullptr, default_path.empty() ? nullptr : default_path.c_str(), nullptr, nullptr)); EXPECT_NE(new_ctx, nullptr); PjContextKeeper keeper_ctxt(new_ctx); auto c_new_path = proj_context_get_database_path(new_ctx); ASSERT_TRUE(c_new_path != nullptr); std::string new_db_path(c_new_path); ASSERT_EQ(new_db_path, tmp_filename); } #endif // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_clone) { int new_init_rules = proj_context_get_use_proj4_init_rules(nullptr, 0) > 0 ? 0 : 1; PJ_CONTEXT *new_ctx = proj_context_create(); EXPECT_NE(new_ctx, nullptr); PjContextKeeper keeper_ctxt(new_ctx); proj_context_use_proj4_init_rules(new_ctx, new_init_rules); PJ_CONTEXT *clone_ctx = proj_context_clone(new_ctx); EXPECT_NE(clone_ctx, nullptr); PjContextKeeper keeper_clone_ctxt(clone_ctx); ASSERT_EQ(proj_context_get_use_proj4_init_rules(new_ctx, 0), proj_context_get_use_proj4_init_rules(clone_ctx, 0)); EXPECT_NE(proj_context_get_use_proj4_init_rules(NULL, 0), proj_context_get_use_proj4_init_rules(clone_ctx, 0)); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_crs_to_crs_from_pj) { auto src = proj_create(m_ctxt, "EPSG:4326"); ObjectKeeper keeper_src(src); ASSERT_NE(src, nullptr); auto dst = proj_create(m_ctxt, "EPSG:32631"); ObjectKeeper keeper_dst(dst); ASSERT_NE(dst, nullptr); auto P = proj_create_crs_to_crs_from_pj(m_ctxt, src, dst, nullptr, nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper keeper_Pnormalized(Pnormalized); ASSERT_NE(Pnormalized, nullptr); auto projstr = proj_as_proj_string(m_ctxt, Pnormalized, PJ_PROJ_5, nullptr); ASSERT_NE(projstr, nullptr); EXPECT_EQ(std::string(projstr), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=utm +zone=31 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_crs_to_crs_from_pj_accuracy_filter) { auto src = proj_create(m_ctxt, "EPSG:4326"); // WGS 84 ObjectKeeper keeper_src(src); ASSERT_NE(src, nullptr); auto dst = proj_create(m_ctxt, "EPSG:4258"); // ETRS89 ObjectKeeper keeper_dst(dst); ASSERT_NE(dst, nullptr); // No options { auto P = proj_create_crs_to_crs_from_pj(m_ctxt, src, dst, nullptr, nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); } { const char *const options[] = {"ACCURACY=0.05", nullptr}; auto P = proj_create_crs_to_crs_from_pj(m_ctxt, src, dst, nullptr, options); ObjectKeeper keeper_P(P); ASSERT_EQ(P, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_crs_to_crs_from_pj_ballpark_filter) { auto src = proj_create(m_ctxt, "EPSG:4267"); // NAD 27 ObjectKeeper keeper_src(src); ASSERT_NE(src, nullptr); auto dst = proj_create(m_ctxt, "EPSG:4258"); // ETRS89 ObjectKeeper keeper_dst(dst); ASSERT_NE(dst, nullptr); // No options { auto P = proj_create_crs_to_crs_from_pj(m_ctxt, src, dst, nullptr, nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); } { const char *const options[] = {"ALLOW_BALLPARK=NO", nullptr}; auto P = proj_create_crs_to_crs_from_pj(m_ctxt, src, dst, nullptr, options); ObjectKeeper keeper_P(P); ASSERT_EQ(P, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_crs_to_crs_coordinate_metadata_in_src) { auto P = proj_create_crs_to_crs(m_ctxt, "ITRF2014@2025.0", "GDA2020", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); PJ_COORD coord; coord.xyzt.x = -30; coord.xyzt.y = 130; coord.xyzt.z = 0; coord.xyzt.t = HUGE_VAL; coord = proj_trans(P, PJ_FWD, coord); EXPECT_NEAR(coord.xyzt.x, -30.0000026655, 1e-10); EXPECT_NEAR(coord.xyzt.y, 129.9999983712, 1e-10); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_crs_to_crs_coordinate_metadata_in_target) { auto P = proj_create_crs_to_crs(m_ctxt, "GDA2020", "ITRF2014@2025.0", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); PJ_COORD coord; coord.xyzt.x = -30.0000026655; coord.xyzt.y = 129.9999983712; coord.xyzt.z = 0; coord.xyzt.t = HUGE_VAL; coord = proj_trans(P, PJ_FWD, coord); EXPECT_NEAR(coord.xyzt.x, -30, 1e-10); EXPECT_NEAR(coord.xyzt.y, 130, 1e-10); } // --------------------------------------------------------------------------- static void check_axis_is_latitude(PJ_CONTEXT *ctx, PJ *cs, int axis_number, const char *unit_name = "degree", double unit_conv_factor = 0.017453292519943295, const char *auth = "EPSG", const char *code = "9122") { const char *name = nullptr; const char *abbrev = nullptr; const char *direction = nullptr; double unitConvFactor = 0.0; const char *unitName = nullptr; const char *unitAuthority = nullptr; const char *unitCode = nullptr; EXPECT_TRUE(proj_cs_get_axis_info(ctx, cs, axis_number, &name, &abbrev, &direction, &unitConvFactor, &unitName, &unitAuthority, &unitCode)); ASSERT_NE(name, nullptr); ASSERT_NE(abbrev, nullptr); ASSERT_NE(direction, nullptr); ASSERT_NE(unitName, nullptr); if (auth) { ASSERT_NE(unitAuthority, nullptr); ASSERT_NE(unitCode, nullptr); } EXPECT_EQ(std::string(name), "Latitude"); EXPECT_EQ(std::string(abbrev), "lat"); EXPECT_EQ(std::string(direction), "north"); EXPECT_EQ(unitConvFactor, unit_conv_factor) << unitConvFactor; EXPECT_EQ(std::string(unitName), unit_name); if (auth) { EXPECT_EQ(std::string(unitAuthority), auth); EXPECT_EQ(std::string(unitCode), code); } } // --------------------------------------------------------------------------- static void check_axis_is_longitude(PJ_CONTEXT *ctx, PJ *cs, int axis_number, const char *unit_name = "degree", double unit_conv_factor = 0.017453292519943295, const char *auth = "EPSG", const char *code = "9122") { const char *name = nullptr; const char *abbrev = nullptr; const char *direction = nullptr; double unitConvFactor = 0.0; const char *unitName = nullptr; const char *unitAuthority = nullptr; const char *unitCode = nullptr; EXPECT_TRUE(proj_cs_get_axis_info(ctx, cs, axis_number, &name, &abbrev, &direction, &unitConvFactor, &unitName, &unitAuthority, &unitCode)); ASSERT_NE(name, nullptr); ASSERT_NE(abbrev, nullptr); ASSERT_NE(direction, nullptr); ASSERT_NE(unitName, nullptr); if (auth) { ASSERT_NE(unitAuthority, nullptr); ASSERT_NE(unitCode, nullptr); } EXPECT_EQ(std::string(name), "Longitude"); EXPECT_EQ(std::string(abbrev), "lon"); EXPECT_EQ(std::string(direction), "east"); EXPECT_EQ(unitConvFactor, unit_conv_factor) << unitConvFactor; EXPECT_EQ(std::string(unitName), unit_name); if (auth) { EXPECT_EQ(std::string(unitAuthority), auth); EXPECT_EQ(std::string(unitCode), code); } } // --------------------------------------------------------------------------- static void check_axis_is_height(PJ_CONTEXT *ctx, PJ *cs, int axis_number, const char *unit_name = "metre", double unit_conv_factor = 1, const char *auth = "EPSG", const char *code = "9001") { const char *name = nullptr; const char *abbrev = nullptr; const char *direction = nullptr; double unitConvFactor = 0.0; const char *unitName = nullptr; const char *unitAuthority = nullptr; const char *unitCode = nullptr; EXPECT_TRUE(proj_cs_get_axis_info(ctx, cs, axis_number, &name, &abbrev, &direction, &unitConvFactor, &unitName, &unitAuthority, &unitCode)); ASSERT_NE(name, nullptr); ASSERT_NE(abbrev, nullptr); ASSERT_NE(direction, nullptr); ASSERT_NE(unitName, nullptr); if (auth) { ASSERT_NE(unitAuthority, nullptr); ASSERT_NE(unitCode, nullptr); } EXPECT_EQ(std::string(name), "Ellipsoidal height"); EXPECT_EQ(std::string(abbrev), "h"); EXPECT_EQ(std::string(direction), "up"); EXPECT_EQ(unitConvFactor, unit_conv_factor) << unitConvFactor; EXPECT_EQ(std::string(unitName), unit_name); if (auth) { EXPECT_EQ(std::string(unitAuthority), auth); EXPECT_EQ(std::string(unitCode), code); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_ellipsoidal_3D_cs) { { auto cs = proj_create_ellipsoidal_3D_cs( m_ctxt, PJ_ELLPS3D_LATITUDE_LONGITUDE_HEIGHT, nullptr, 0, nullptr, 0); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); EXPECT_EQ(proj_cs_get_type(m_ctxt, cs), PJ_CS_TYPE_ELLIPSOIDAL); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); check_axis_is_latitude(m_ctxt, cs, 0); check_axis_is_longitude(m_ctxt, cs, 1); check_axis_is_height(m_ctxt, cs, 2); } { auto cs = proj_create_ellipsoidal_3D_cs( m_ctxt, PJ_ELLPS3D_LONGITUDE_LATITUDE_HEIGHT, "foo", 0.5, "bar", 0.6); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); EXPECT_EQ(proj_cs_get_type(m_ctxt, cs), PJ_CS_TYPE_ELLIPSOIDAL); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); check_axis_is_longitude(m_ctxt, cs, 0, "foo", 0.5, nullptr, nullptr); check_axis_is_latitude(m_ctxt, cs, 1, "foo", 0.5, nullptr, nullptr); check_axis_is_height(m_ctxt, cs, 2, "bar", 0.6, nullptr, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_promote_to_3D) { auto crs2D = proj_create(m_ctxt, GeographicCRS::EPSG_4326 ->exportToWKT(WKTFormatter::create().get()) .c_str()); ObjectKeeper keeper_crs2D(crs2D); EXPECT_NE(crs2D, nullptr); auto crs3D = proj_crs_promote_to_3D(m_ctxt, nullptr, crs2D); ObjectKeeper keeper_crs3D(crs3D); EXPECT_NE(crs3D, nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); auto code = proj_get_id_code(crs3D, 0); ASSERT_TRUE(code != nullptr); EXPECT_EQ(code, std::string("4979")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_promote_to_3D_on_coordinate_metadata) { auto cm_crs2D = proj_create(m_ctxt, "ITRF2014@2010.0"); ObjectKeeper keeper_cm_crs2D(cm_crs2D); EXPECT_NE(cm_crs2D, nullptr); auto cm_crs3D = proj_crs_promote_to_3D(m_ctxt, nullptr, cm_crs2D); ObjectKeeper keeper_cm_crs3D(cm_crs3D); EXPECT_NE(cm_crs3D, nullptr); EXPECT_NEAR(proj_coordinate_metadata_get_epoch(m_ctxt, cm_crs3D), 2010.0, 1e-10); auto crs3D = proj_get_source_crs(m_ctxt, cm_crs3D); ObjectKeeper keeper_crs3D(crs3D); EXPECT_NE(crs3D, nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); auto code = proj_get_id_code(crs3D, 0); ASSERT_TRUE(code != nullptr); EXPECT_EQ(code, std::string("7912")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_demote_to_2D) { auto crs3D = proj_create(m_ctxt, GeographicCRS::EPSG_4979 ->exportToWKT(WKTFormatter::create().get()) .c_str()); ObjectKeeper keeper_crs3D(crs3D); EXPECT_NE(crs3D, nullptr); auto crs2D = proj_crs_demote_to_2D(m_ctxt, nullptr, crs3D); ObjectKeeper keeper_crs2D(crs2D); EXPECT_NE(crs2D, nullptr); auto cs = proj_crs_get_coordinate_system(m_ctxt, crs2D); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 2); auto code = proj_get_id_code(crs2D, 0); ASSERT_TRUE(code != nullptr); EXPECT_EQ(code, std::string("4326")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_create_projected_3D_crs_from_2D) { auto projCRS = proj_create_from_database(m_ctxt, "EPSG", "32631", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(projCRS, nullptr); ObjectKeeper keeper_projCRS(projCRS); { auto geog3DCRS = proj_create_from_database( m_ctxt, "EPSG", "4979", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(geog3DCRS, nullptr); ObjectKeeper keeper_geog3DCRS(geog3DCRS); auto crs3D = proj_crs_create_projected_3D_crs_from_2D( m_ctxt, nullptr, projCRS, geog3DCRS); ObjectKeeper keeper_crs3D(crs3D); EXPECT_NE(crs3D, nullptr); EXPECT_EQ(proj_get_type(crs3D), PJ_TYPE_PROJECTED_CRS); EXPECT_EQ(std::string(proj_get_name(crs3D)), std::string(proj_get_name(projCRS))); auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); } { auto crs3D = proj_crs_create_projected_3D_crs_from_2D(m_ctxt, nullptr, projCRS, nullptr); ObjectKeeper keeper_crs3D(crs3D); EXPECT_NE(crs3D, nullptr); EXPECT_EQ(proj_get_type(crs3D), PJ_TYPE_PROJECTED_CRS); EXPECT_EQ(std::string(proj_get_name(crs3D)), std::string(proj_get_name(projCRS))); auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D); ASSERT_NE(cs, nullptr); ObjectKeeper keeperCs(cs); EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_create_bound_vertical_crs) { auto vert_crs = proj_create_vertical_crs(m_ctxt, "myVertCRS", "myVertDatum", nullptr, 0.0); ObjectKeeper keeper_vert_crs(vert_crs); ASSERT_NE(vert_crs, nullptr); auto crs4979 = proj_create_from_wkt( m_ctxt, GeographicCRS::EPSG_4979->exportToWKT(WKTFormatter::create().get()) .c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper_crs4979(crs4979); ASSERT_NE(crs4979, nullptr); auto bound_crs = proj_crs_create_bound_vertical_crs(m_ctxt, vert_crs, crs4979, "foo.gtx"); ObjectKeeper keeper_bound_crs(bound_crs); ASSERT_NE(bound_crs, nullptr); auto projCRS = proj_create_from_database(m_ctxt, "EPSG", "32631", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(projCRS, nullptr); ObjectKeeper keeper_projCRS(projCRS); auto compound_crs = proj_create_compound_crs(m_ctxt, "myCompoundCRS", projCRS, bound_crs); ObjectKeeper keeper_compound_crss(compound_crs); ASSERT_NE(compound_crs, nullptr); auto proj_4 = proj_as_proj_string(m_ctxt, compound_crs, PJ_PROJ_4, nullptr); ASSERT_NE(proj_4, nullptr); EXPECT_EQ(std::string(proj_4), "+proj=utm +zone=31 +datum=WGS84 +units=m +geoidgrids=foo.gtx " "+geoid_crs=WGS84 " "+vunits=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_crs_to_crs_with_only_ballpark_transformations) { // ETRS89 / UTM zone 31N + EGM96 height to WGS 84 (G1762) auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:25831+5773", "EPSG:7665", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper keeper_Pnormalized(Pnormalized); ASSERT_NE(Pnormalized, nullptr); PJ_COORD coord; coord.xyzt.x = 500000; coord.xyzt.y = 4500000; coord.xyzt.z = 0; coord.xyzt.t = 0; coord = proj_trans(Pnormalized, PJ_FWD, coord); EXPECT_NEAR(coord.xyzt.x, 3.0, 1e-9); EXPECT_NEAR(coord.xyzt.y, 40.65085651660555, 1e-9); EXPECT_NEAR(coord.xyzt.z, 47.72600023608570, 1e-3); } // --------------------------------------------------------------------------- TEST_F( CApi, proj_create_crs_to_crs_from_custom_compound_crs_with_NAD83_2011_and_geoidgrid_ref_against_WGS84_to_WGS84_G1762) { PJ *P; PJ *inCrsH = proj_create_from_database(m_ctxt, "EPSG", "6340", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(inCrsH, nullptr); PJ *inDummyCrs = proj_create_vertical_crs(m_ctxt, "VerticalDummyCrs", "DummyDatum", "metre", 1.0); ASSERT_NE(inDummyCrs, nullptr); auto crs4979 = proj_create_from_database(m_ctxt, "EPSG", "4979", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs4979, nullptr); PJ *inCrsV = proj_crs_create_bound_vertical_crs(m_ctxt, inDummyCrs, crs4979, "egm96_15.gtx"); ASSERT_NE(inCrsV, nullptr); proj_destroy(inDummyCrs); proj_destroy(crs4979); PJ *inCompound = proj_create_compound_crs(m_ctxt, "Compound", inCrsH, inCrsV); ASSERT_NE(inCompound, nullptr); proj_destroy(inCrsH); proj_destroy(inCrsV); PJ *outCrs = proj_create(m_ctxt, "EPSG:7665"); ASSERT_NE(outCrs, nullptr); // In this particular case, PROJ computes a transformation from NAD83(2011) // (EPSG:6318) to WGS84 (EPSG:4979) for the initial horizontal adjustment // before the geoidgrids application. There are 6 candidate transformations // for that in subzones of the US and one last no-op transformation flagged // as ballpark. That one used to be eliminated because by // proj_create_crs_to_crs() because there were non Ballpark transformations // available. This resulted thus in an error when transforming outside of // those few subzones. P = proj_create_crs_to_crs_from_pj(m_ctxt, inCompound, outCrs, nullptr, nullptr); ASSERT_NE(P, nullptr); proj_destroy(inCompound); proj_destroy(outCrs); PJ_COORD in_coord; in_coord.xyzt.x = 350499.911; in_coord.xyzt.y = 3884807.956; in_coord.xyzt.z = 150.072; in_coord.xyzt.t = 2010; PJ_COORD outcoord = proj_trans(P, PJ_FWD, in_coord); proj_destroy(P); EXPECT_NEAR(outcoord.xyzt.x, 35.09499307271, 1e-9); EXPECT_NEAR(outcoord.xyzt.y, -118.64014868921, 1e-9); EXPECT_NEAR(outcoord.xyzt.z, 117.655, 1e-3); } // --------------------------------------------------------------------------- TEST_F( CApi, proj_create_crs_to_crs_from_custom_compound_crs_with_NAD83_2011_and_geoidgrid_ref_against_NAD83_2011_to_WGS84_G1762) { PJ *P; // NAD83(2011) 2D PJ *inCrsH = proj_create_from_database(m_ctxt, "EPSG", "6318", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(inCrsH, nullptr); PJ *inDummyCrs = proj_create_vertical_crs(m_ctxt, "VerticalDummyCrs", "DummyDatum", "metre", 1.0); ASSERT_NE(inDummyCrs, nullptr); // NAD83(2011) 3D PJ *inGeog3DCRS = proj_create_from_database( m_ctxt, "EPSG", "6319", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(inCrsH, nullptr); // Note: this is actually a bad example since we tell here that egm96_15.gtx // is referenced against NAD83(2011) PJ *inCrsV = proj_crs_create_bound_vertical_crs( m_ctxt, inDummyCrs, inGeog3DCRS, "egm96_15.gtx"); ASSERT_NE(inCrsV, nullptr); proj_destroy(inDummyCrs); proj_destroy(inGeog3DCRS); PJ *inCompound = proj_create_compound_crs(m_ctxt, "Compound", inCrsH, inCrsV); ASSERT_NE(inCompound, nullptr); proj_destroy(inCrsH); proj_destroy(inCrsV); // WGS84 (G1762) PJ *outCrs = proj_create(m_ctxt, "EPSG:7665"); ASSERT_NE(outCrs, nullptr); P = proj_create_crs_to_crs_from_pj(m_ctxt, inCompound, outCrs, nullptr, nullptr); ASSERT_NE(P, nullptr); proj_destroy(inCompound); proj_destroy(outCrs); PJ_COORD in_coord; in_coord.xyzt.x = 35; in_coord.xyzt.y = -118; in_coord.xyzt.z = 0; in_coord.xyzt.t = 2010; PJ_COORD outcoord = proj_trans(P, PJ_FWD, in_coord); proj_destroy(P); EXPECT_NEAR(outcoord.xyzt.x, 35.000003665064803, 1e-9); EXPECT_NEAR(outcoord.xyzt.y, -118.00001414221214, 1e-9); EXPECT_NEAR(outcoord.xyzt.z, -32.8110, 1e-3); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_vertical_crs_ex) { // NAD83(2011) / UTM zone 11N auto horiz_crs = proj_create_from_database(m_ctxt, "EPSG", "6340", PJ_CATEGORY_CRS, false, nullptr); ObjectKeeper keeper_horiz_crs(horiz_crs); ASSERT_NE(horiz_crs, nullptr); const char *options[] = {"ACCURACY=123", nullptr}; auto vert_crs = proj_create_vertical_crs_ex( m_ctxt, "myVertCRS (ftUS)", "myVertDatum", nullptr, nullptr, "US survey foot", 0.304800609601219, "PROJ @foo.gtx", nullptr, nullptr, nullptr, options); ObjectKeeper keeper_vert_crs(vert_crs); ASSERT_NE(vert_crs, nullptr); auto compound = proj_create_compound_crs(m_ctxt, "Compound", horiz_crs, vert_crs); ObjectKeeper keeper_compound(compound); ASSERT_NE(compound, nullptr); // NAD83(2011) 3D PJ *geog_crs = proj_create(m_ctxt, "EPSG:6319"); ObjectKeeper keeper_geog_crs(geog_crs); ASSERT_NE(geog_crs, nullptr); PJ_OPERATION_FACTORY_CONTEXT *ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); PJ_OBJ_LIST *operations = proj_create_operations(m_ctxt, compound, geog_crs, ctxt); ASSERT_NE(operations, nullptr); ObjListKeeper keeper_operations(operations); EXPECT_GE(proj_list_get_count(operations), 1); auto P = proj_list_get(m_ctxt, operations, 0); ObjectKeeper keeper_transform(P); auto name = proj_get_name(P); ASSERT_TRUE(name != nullptr); EXPECT_EQ(name, std::string("Inverse of UTM zone 11N + " "Conversion from myVertCRS (ftUS) to myVertCRS + " "Transformation from myVertCRS to NAD83(2011)")); auto proj_5 = proj_as_proj_string(m_ctxt, P, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); EXPECT_EQ(std::string(proj_5), "+proj=pipeline " "+step +inv +proj=utm +zone=11 +ellps=GRS80 " "+step +proj=unitconvert +z_in=us-ft +z_out=m " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); ASSERT_EQ(proj_coordoperation_get_accuracy(m_ctxt, P), 123.0); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_vertical_crs_ex_with_geog_crs) { // NAD83(2011) / UTM zone 11N auto horiz_crs = proj_create_from_database(m_ctxt, "EPSG", "6340", PJ_CATEGORY_CRS, false, nullptr); ObjectKeeper keeper_horiz_crs(horiz_crs); ASSERT_NE(horiz_crs, nullptr); // WGS84 PJ *wgs84 = proj_create(m_ctxt, "EPSG:4979"); ObjectKeeper keeper_wgs84(wgs84); ASSERT_NE(wgs84, nullptr); auto vert_crs = proj_create_vertical_crs_ex( m_ctxt, "myVertCRS", "myVertDatum", nullptr, nullptr, "US survey foot", 0.304800609601219, "PROJ @foo.gtx", nullptr, nullptr, wgs84, nullptr); ObjectKeeper keeper_vert_crs(vert_crs); ASSERT_NE(vert_crs, nullptr); auto compound = proj_create_compound_crs(m_ctxt, "Compound", horiz_crs, vert_crs); ObjectKeeper keeper_compound(compound); ASSERT_NE(compound, nullptr); // NAD83(2011) 3D PJ *geog_crs = proj_create(m_ctxt, "EPSG:6319"); ObjectKeeper keeper_geog_crs(geog_crs); ASSERT_NE(geog_crs, nullptr); PJ_OPERATION_FACTORY_CONTEXT *ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); PJ_OBJ_LIST *operations = proj_create_operations(m_ctxt, compound, geog_crs, ctxt); ASSERT_NE(operations, nullptr); ObjListKeeper keeper_operations(operations); EXPECT_GE(proj_list_get_count(operations), 1); auto P = proj_list_get(m_ctxt, operations, 0); ObjectKeeper keeper_transform(P); auto name = proj_get_name(P); ASSERT_TRUE(name != nullptr); EXPECT_EQ(name, std::string("Inverse of UTM zone 11N + " "Conversion from myVertCRS to myVertCRS (metre) + " "Transformation from myVertCRS (metre) to WGS 84 " "using NAD83(2011) to WGS 84 (1)")); auto proj_5 = proj_as_proj_string(m_ctxt, P, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); EXPECT_EQ(std::string(proj_5), "+proj=pipeline " "+step +inv +proj=utm +zone=11 +ellps=GRS80 " "+step +proj=unitconvert +z_in=us-ft +z_out=m " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); // Check that we get the same results after an export of compoundCRS to // PROJJSON and a re-import from it. auto projjson = proj_as_projjson(m_ctxt, compound, nullptr); ASSERT_NE(projjson, nullptr); auto compound_from_projjson = proj_create(m_ctxt, projjson); ObjectKeeper keeper_compound_from_projjson(compound_from_projjson); ASSERT_NE(compound_from_projjson, nullptr); PJ_OBJ_LIST *operations2 = proj_create_operations(m_ctxt, compound_from_projjson, geog_crs, ctxt); ASSERT_NE(operations2, nullptr); ObjListKeeper keeper_operations2(operations2); EXPECT_GE(proj_list_get_count(operations2), 1); auto P2 = proj_list_get(m_ctxt, operations2, 0); ObjectKeeper keeper_transform2(P2); auto name_bis = proj_get_name(P2); ASSERT_TRUE(name_bis != nullptr); EXPECT_EQ(std::string(name_bis), std::string(name)); auto proj_5_bis = proj_as_proj_string(m_ctxt, P2, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5_bis, nullptr); EXPECT_EQ(std::string(proj_5_bis), std::string(proj_5)); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_vertical_crs_ex_implied_accuracy) { PJ *crsH = proj_create(m_ctxt, "EPSG:4283"); // GDA94 ASSERT_NE(crsH, nullptr); ObjectKeeper keeper_crsH(crsH); PJ *crsV = proj_create(m_ctxt, "EPSG:5711"); // AHD height ASSERT_NE(crsV, nullptr); ObjectKeeper keeper_crsV(crsV); PJ *crsGeoid = proj_create(m_ctxt, "EPSG:4939"); // GDA94 3D ASSERT_NE(crsGeoid, nullptr); ObjectKeeper keeper_crsGeoid(crsGeoid); PJ *vertDatum = proj_crs_get_datum(m_ctxt, crsV); ObjectKeeper keeper_vertDatum(vertDatum); const char *vertDatumName = proj_get_name(vertDatum); const char *vertDatumAuthority = proj_get_id_auth_name(vertDatum, 0); const char *vertDatumCode = proj_get_id_code(vertDatum, 0); PJ *crsVGeoid = proj_create_vertical_crs_ex( m_ctxt, "Vertical", vertDatumName, vertDatumAuthority, vertDatumCode, "metre", 1.0, "PROJ au_ga_AUSGeoid09_V1.01.tif", nullptr, nullptr, crsGeoid, nullptr); ObjectKeeper keeper_crsVGeoid(crsVGeoid); PJ *crsCompoundGeoid = proj_create_compound_crs( m_ctxt, "Compound with geoid", crsH, crsVGeoid); ObjectKeeper keeper_crsCompoundGeoid(crsCompoundGeoid); PJ_OPERATION_FACTORY_CONTEXT *ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); proj_operation_factory_context_set_grid_availability_use( m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); proj_operation_factory_context_set_spatial_criterion( m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); PJ_OBJ_LIST *operations = proj_create_operations(m_ctxt, crsCompoundGeoid, crsGeoid, ctxt); ASSERT_NE(operations, nullptr); ObjListKeeper keeper_operations(operations); EXPECT_GE(proj_list_get_count(operations), 1); PJ *transform = proj_list_get(m_ctxt, operations, 0); ObjectKeeper keeper_transform(transform); // This is the accuracy of operations EPSG:5656 / 5657 const double acc = proj_coordoperation_get_accuracy(m_ctxt, transform); EXPECT_NEAR(acc, 0.15, 1e-10); // Check there's an associated area of use double west_lon_degree = 0; double south_lat_degree = 0; double east_lon_degree = 0; double north_lat_degree = 0; ASSERT_EQ(proj_get_area_of_use(m_ctxt, transform, &west_lon_degree, &south_lat_degree, &east_lon_degree, &north_lat_degree, nullptr), true); EXPECT_LE(north_lat_degree, -10); EXPECT_GE(west_lon_degree, 110); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_derived_geographic_crs) { PJ *crs_4326 = proj_create(m_ctxt, "EPSG:4326"); ObjectKeeper keeper_crs_4326(crs_4326); ASSERT_NE(crs_4326, nullptr); PJ *conversion = proj_create_conversion_pole_rotation_grib_convention( m_ctxt, 2, 3, 4, "Degree", 0.0174532925199433); ObjectKeeper keeper_conversion(conversion); ASSERT_NE(conversion, nullptr); PJ *cs = proj_crs_get_coordinate_system(m_ctxt, crs_4326); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); ASSERT_EQ( proj_create_derived_geographic_crs(m_ctxt, "my rotated CRS", conversion, // wrong type of object conversion, cs), nullptr); ASSERT_EQ( proj_create_derived_geographic_crs(m_ctxt, "my rotated CRS", crs_4326, crs_4326, // wrong type of object cs), nullptr); ASSERT_EQ(proj_create_derived_geographic_crs( m_ctxt, "my rotated CRS", crs_4326, conversion, conversion // wrong type of object ), nullptr); PJ *derived_crs = proj_create_derived_geographic_crs( m_ctxt, "my rotated CRS", crs_4326, conversion, cs); ObjectKeeper keeper_derived_crs(derived_crs); ASSERT_NE(derived_crs, nullptr); EXPECT_FALSE(proj_is_derived_crs(m_ctxt, crs_4326)); EXPECT_TRUE(proj_is_derived_crs(m_ctxt, derived_crs)); auto wkt = proj_as_wkt(m_ctxt, derived_crs, PJ_WKT2_2019, nullptr); const char *expected_wkt = "GEOGCRS[\"my rotated CRS\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2296)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Pole rotation (GRIB convention)\",\n" " METHOD[\"Pole rotation (GRIB convention)\"],\n" " PARAMETER[\"Latitude of the southern pole (GRIB " "convention)\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Longitude of the southern pole (GRIB " "convention)\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Axis rotation (GRIB convention)\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; ASSERT_NE(wkt, nullptr); EXPECT_EQ(wkt, std::string(expected_wkt)); auto proj_5 = proj_as_proj_string(m_ctxt, derived_crs, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); EXPECT_EQ(proj_5, std::string("+proj=ob_tran +o_proj=longlat +o_lon_p=-4 " "+o_lat_p=-2 +lon_0=3 +datum=WGS84 +no_defs " "+type=crs")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_create_derived_geographic_crs_netcdf_cf) { PJ *crs_4019 = proj_create(m_ctxt, "EPSG:4019"); ObjectKeeper keeper_crs_4019(crs_4019); ASSERT_NE(crs_4019, nullptr); PJ *conversion = proj_create_conversion_pole_rotation_netcdf_cf_convention( m_ctxt, 2, 3, 4, "Degree", 0.0174532925199433); ObjectKeeper keeper_conversion(conversion); ASSERT_NE(conversion, nullptr); PJ *cs = proj_crs_get_coordinate_system(m_ctxt, crs_4019); ObjectKeeper keeper_cs(cs); ASSERT_NE(cs, nullptr); PJ *derived_crs = proj_create_derived_geographic_crs( m_ctxt, "my rotated CRS", crs_4019, conversion, cs); ObjectKeeper keeper_derived_crs(derived_crs); ASSERT_NE(derived_crs, nullptr); auto wkt = proj_as_wkt(m_ctxt, derived_crs, PJ_WKT2_2019, nullptr); const char *expected_wkt = "GEOGCRS[\"my rotated CRS\",\n" " BASEGEOGCRS[\"Unknown datum based upon the GRS 1980 ellipsoid\",\n" " DATUM[\"Not specified (based on GRS 1980 ellipsoid)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Pole rotation (netCDF CF convention)\",\n" " METHOD[\"Pole rotation (netCDF CF convention)\"],\n" " PARAMETER[\"Grid north pole latitude (netCDF CF " "convention)\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Grid north pole longitude (netCDF CF " "convention)\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"North pole grid longitude (netCDF CF " "convention)\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; ASSERT_NE(wkt, nullptr); EXPECT_EQ(wkt, std::string(expected_wkt)); auto proj_5 = proj_as_proj_string(m_ctxt, derived_crs, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); EXPECT_EQ(proj_5, std::string("+proj=ob_tran +o_proj=longlat +o_lon_p=4 " "+o_lat_p=2 +lon_0=183 +ellps=GRS80 +no_defs " "+type=crs")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_set_sqlite3_vfs_name) { PJ_CONTEXT *ctx = proj_context_create(); proj_log_func(ctx, nullptr, [](void *, int, const char *) -> void {}); // Set a dummy VFS and check it is taken into account // (failure to open proj.db) proj_context_set_sqlite3_vfs_name(ctx, "dummy_vfs_name"); ASSERT_EQ(proj_create(ctx, "EPSG:4326"), nullptr); // Restore default VFS proj_context_set_sqlite3_vfs_name(ctx, nullptr); PJ *crs_4326 = proj_create(ctx, "EPSG:4326"); ASSERT_NE(crs_4326, nullptr); proj_destroy(crs_4326); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_context_set_sqlite3_vfs_name__from_global_context) { // Set a dummy VFS and check it is taken into account // (failure to open proj.db) proj_context_set_sqlite3_vfs_name(nullptr, "dummy_vfs_name"); PJ_CONTEXT *ctx = proj_context_create(); proj_log_func(ctx, nullptr, [](void *, int, const char *) -> void {}); ASSERT_EQ(proj_create(ctx, "EPSG:4326"), nullptr); // Restore default VFS proj_context_set_sqlite3_vfs_name(nullptr, nullptr); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST_F(CApi, use_proj4_init_rules) { PJ_CONTEXT *ctx = proj_context_create(); proj_context_use_proj4_init_rules(ctx, true); ASSERT_TRUE(proj_context_get_use_proj4_init_rules(ctx, true)); { // Test +over auto crs = proj_create(ctx, "+init=epsg:28992 +over"); ObjectKeeper keeper_crs(crs); ASSERT_NE(crs, nullptr); auto datum = proj_crs_get_datum(ctx, crs); ASSERT_NE(datum, nullptr); ObjectKeeper keeper_datum(datum); auto datum_name = proj_get_name(datum); ASSERT_TRUE(datum_name != nullptr); EXPECT_EQ(datum_name, std::string("Amersfoort")); auto proj_5 = proj_as_proj_string(ctx, crs, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); EXPECT_EQ(std::string(proj_5), "+proj=sterea +lat_0=52.1561605555556 " "+lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 " "+y_0=463000 +ellps=bessel +units=m +over " "+no_defs +type=crs"); } { // Test +over on epsg:3857 auto crs = proj_create(ctx, "+init=epsg:3857 +over"); ObjectKeeper keeper_crs(crs); ASSERT_NE(crs, nullptr); auto proj_5 = proj_as_proj_string(ctx, crs, PJ_PROJ_5, nullptr); ASSERT_NE(proj_5, nullptr); EXPECT_EQ(std::string(proj_5), "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 " "+y_0=0 +k=1 +units=m +nadgrids=@null +over +wktext " "+no_defs +type=crs"); } proj_context_use_proj4_init_rules(ctx, false); ASSERT_TRUE(!proj_context_get_use_proj4_init_rules(ctx, true)); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST_F(CApi, use_proj4_init_rules_from_global_context) { int initial_rules = proj_context_get_use_proj4_init_rules(nullptr, true); proj_context_use_proj4_init_rules(nullptr, true); PJ_CONTEXT *ctx = proj_context_create(); ASSERT_TRUE(proj_context_get_use_proj4_init_rules(ctx, true)); proj_context_destroy(ctx); proj_context_use_proj4_init_rules(nullptr, false); ctx = proj_context_create(); ASSERT_TRUE(!proj_context_get_use_proj4_init_rules(ctx, true)); proj_context_destroy(ctx); proj_context_use_proj4_init_rules(nullptr, initial_rules); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_is_equivalent_to_with_ctx) { auto from_epsg = proj_create_from_database(m_ctxt, "EPSG", "7844", PJ_CATEGORY_CRS, false, nullptr); ObjectKeeper keeper_from_epsg(from_epsg); ASSERT_NE(from_epsg, nullptr); auto wkt = "GEOGCRS[\"GDA2020\",\n" " DATUM[\"GDA2020\",\n" " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; auto from_wkt = proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr); ObjectKeeper keeper_from_wkt(from_wkt); EXPECT_NE(from_wkt, nullptr); EXPECT_TRUE(proj_is_equivalent_to_with_ctx(m_ctxt, from_epsg, from_wkt, PJ_COMP_EQUIVALENT)); } // --------------------------------------------------------------------------- TEST_F(CApi, datum_ensemble) { auto wkt = "GEOGCRS[\"ETRS89\"," " ENSEMBLE[\"European Terrestrial Reference System 1989 ensemble\"," " MEMBER[\"European Terrestrial Reference Frame 1989\"]," " MEMBER[\"European Terrestrial Reference Frame 1990\"]," " MEMBER[\"European Terrestrial Reference Frame 1991\"]," " MEMBER[\"European Terrestrial Reference Frame 1992\"]," " MEMBER[\"European Terrestrial Reference Frame 1993\"]," " MEMBER[\"European Terrestrial Reference Frame 1994\"]," " MEMBER[\"European Terrestrial Reference Frame 1996\"]," " MEMBER[\"European Terrestrial Reference Frame 1997\"]," " MEMBER[\"European Terrestrial Reference Frame 2000\"]," " MEMBER[\"European Terrestrial Reference Frame 2005\"]," " MEMBER[\"European Terrestrial Reference Frame 2014\"]," " ELLIPSOID[\"GRS 1980\",6378137,298.257222101," " LENGTHUNIT[\"metre\",1]]," " ENSEMBLEACCURACY[0.1]]," " PRIMEM[\"Greenwich\",0," " ANGLEUNIT[\"degree\",0.0174532925199433]]," " CS[ellipsoidal,2]," " AXIS[\"geodetic latitude (Lat)\",north," " ORDER[1]," " ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"geodetic longitude (Lon)\",east," " ORDER[2]," " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; auto from_wkt = proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr); ObjectKeeper keeper_from_wkt(from_wkt); EXPECT_NE(from_wkt, nullptr); auto datum = proj_crs_get_datum(m_ctxt, from_wkt); ObjectKeeper keeper_datum(datum); ASSERT_EQ(datum, nullptr); auto datum_ensemble = proj_crs_get_datum_ensemble(m_ctxt, from_wkt); ObjectKeeper keeper_datum_ensemble(datum_ensemble); ASSERT_NE(datum_ensemble, nullptr); ASSERT_EQ(proj_datum_ensemble_get_member_count(m_ctxt, datum_ensemble), 11); ASSERT_EQ(proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, -1), nullptr); ASSERT_EQ(proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, 11), nullptr); { auto member = proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, 0); ObjectKeeper keeper_member(member); ASSERT_NE(member, nullptr); EXPECT_EQ(proj_get_name(member), std::string("European Terrestrial Reference Frame 1989")); } { auto member = proj_datum_ensemble_get_member(m_ctxt, datum_ensemble, 10); ObjectKeeper keeper_member(member); ASSERT_NE(member, nullptr); EXPECT_EQ(proj_get_name(member), std::string("European Terrestrial Reference Frame 2014")); } ASSERT_EQ(proj_datum_ensemble_get_accuracy(m_ctxt, datum_ensemble), 0.1); auto datum_forced = proj_crs_get_datum_forced(m_ctxt, from_wkt); ObjectKeeper keeper_datum_forced(datum_forced); ASSERT_NE(datum_forced, nullptr); EXPECT_EQ(proj_get_name(datum_forced), std::string("European Terrestrial Reference System 1989")); auto cs = proj_crs_get_coordinate_system(m_ctxt, from_wkt); ObjectKeeper keeper_cs(cs); EXPECT_NE(cs, nullptr); { auto built_crs = proj_create_geographic_crs_from_datum( m_ctxt, proj_get_name(from_wkt), datum_ensemble, cs); ObjectKeeper keeper_built_crs(built_crs); EXPECT_NE(built_crs, nullptr); EXPECT_TRUE(proj_is_equivalent_to_with_ctx(m_ctxt, built_crs, from_wkt, PJ_COMP_EQUIVALENT)); } { auto built_crs = proj_create_geocentric_crs_from_datum( m_ctxt, proj_get_name(from_wkt), datum_ensemble, "metre", 1.0); ObjectKeeper keeper_built_crs(built_crs); EXPECT_NE(built_crs, nullptr); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_is_derived) { { auto wkt = createProjectedCRS()->exportToWKT(WKTFormatter::create().get()); auto obj = proj_create_from_wkt(m_ctxt, wkt.c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr) << wkt; EXPECT_TRUE(proj_crs_is_derived(m_ctxt, obj)); } { auto wkt = createProjectedCRS()->baseCRS()->exportToWKT( WKTFormatter::create().get()); auto obj = proj_create_from_wkt(m_ctxt, wkt.c_str(), nullptr, nullptr, nullptr); ObjectKeeper keeper(obj); ASSERT_NE(obj, nullptr) << wkt; EXPECT_FALSE(proj_crs_is_derived(m_ctxt, obj)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_insert_statements) { { auto session = proj_insert_object_session_create(nullptr); EXPECT_NE(session, nullptr); EXPECT_EQ(proj_insert_object_session_create(nullptr), nullptr); proj_insert_object_session_destroy(nullptr, session); } { proj_insert_object_session_destroy(nullptr, nullptr); } { auto wkt = "GEOGCRS[\"myGDA2020\",\n" " DATUM[\"GDA2020\",\n" " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; auto crs = proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr); ObjectKeeper keeper_from_wkt(crs); EXPECT_NE(crs, nullptr); { char *code = proj_suggests_code_for(m_ctxt, crs, "HOBU", false, nullptr); ASSERT_NE(code, nullptr); EXPECT_EQ(std::string(code), "MYGDA2020"); proj_string_destroy(code); } { char *code = proj_suggests_code_for(m_ctxt, crs, "HOBU", true, nullptr); ASSERT_NE(code, nullptr); EXPECT_EQ(std::string(code), "1"); proj_string_destroy(code); } const auto sizeOfStringList = [](const char *const *list) { if (list == nullptr) return -1; int size = 0; for (auto iter = list; *iter; ++iter) { size += 1; } return size; }; // No session specified: we use a temporary session for (int i = 0; i < 2; i++) { auto list = proj_get_insert_statements( m_ctxt, nullptr, crs, "HOBU", "XXXX", false, nullptr, nullptr); ASSERT_NE(list, nullptr); ASSERT_NE(list[0], nullptr); EXPECT_EQ(std::string(list[0]), "INSERT INTO geodetic_datum VALUES('HOBU'," "'GEODETIC_DATUM_XXXX','GDA2020','','EPSG','7019'," "'EPSG','8901',NULL,NULL,NULL,NULL,NULL,0);"); EXPECT_EQ(sizeOfStringList(list), 4); proj_string_list_destroy(list); } // Pass an empty list of allowed authorities // We cannot reuse the EPSG ellipsoid and prime meridian { const char *const allowed_authorities[] = {nullptr}; auto list = proj_get_insert_statements(m_ctxt, nullptr, crs, "HOBU", "XXXX", false, allowed_authorities, nullptr); EXPECT_EQ(sizeOfStringList(list), 6); proj_string_list_destroy(list); } // Allow only PROJ // We cannot reuse the EPSG ellipsoid and prime meridian { const char *const allowed_authorities[] = {"PROJ", nullptr}; auto list = proj_get_insert_statements(m_ctxt, nullptr, crs, "HOBU", "XXXX", false, allowed_authorities, nullptr); EXPECT_EQ(sizeOfStringList(list), 6); proj_string_list_destroy(list); } // Allow EPSG { const char *const allowed_authorities[] = {"EPSG", nullptr}; auto list = proj_get_insert_statements(m_ctxt, nullptr, crs, "HOBU", "XXXX", false, allowed_authorities, nullptr); EXPECT_EQ(sizeOfStringList(list), 4); proj_string_list_destroy(list); } auto session = proj_insert_object_session_create(m_ctxt); EXPECT_NE(session, nullptr); { auto list = proj_get_insert_statements( m_ctxt, session, crs, "HOBU", "XXXX", false, nullptr, nullptr); ASSERT_NE(list, nullptr); ASSERT_NE(list[0], nullptr); EXPECT_EQ(std::string(list[0]), "INSERT INTO geodetic_datum VALUES('HOBU'," "'GEODETIC_DATUM_XXXX','GDA2020','','EPSG','7019'," "'EPSG','8901',NULL,NULL,NULL,NULL,NULL,0);"); proj_string_list_destroy(list); } // Object already inserted: return empty list { auto list = proj_get_insert_statements( m_ctxt, session, crs, "HOBU", "XXXX", false, nullptr, nullptr); ASSERT_NE(list, nullptr); ASSERT_EQ(list[0], nullptr); proj_string_list_destroy(list); } proj_insert_object_session_destroy(m_ctxt, session); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_get_geoid_models_from_database) { auto findInList = [](PROJ_STRING_LIST list, const std::string &ref) { while (list && *list) { if (std::string(*list) == ref) { return true; } list++; } return false; }; auto list = proj_get_geoid_models_from_database(m_ctxt, "EPSG", "5703", nullptr); ListFreer freer(list); EXPECT_TRUE(findInList(list, "GEOID12B")); EXPECT_TRUE(findInList(list, "GEOID18")); EXPECT_TRUE(findInList(list, "GGM10")); EXPECT_FALSE(findInList(list, "OSGM15")); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_densify_0) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4326", "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 " "+a=6370997 +b=6370997 +units=m +no_defs", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, 40, -120, 64, -80, &out_left, &out_bottom, &out_right, &out_top, 0); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -1684649.41338, 1); EXPECT_NEAR(out_bottom, -350356.81377, 1); EXPECT_NEAR(out_right, 1684649.41338, 1); EXPECT_NEAR(out_top, 2234551.18559, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_densify_100) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4326", "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 " "+a=6370997 +b=6370997 +units=m +no_defs", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, 40, -120, 64, -80, &out_left, &out_bottom, &out_right, &out_top, 100); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -1684649.41338, 1); EXPECT_NEAR(out_bottom, -555777.79210, 1); EXPECT_NEAR(out_right, 1684649.41338, 1); EXPECT_NEAR(out_top, 2234551.18559, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_normalized) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4326", "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 " "+a=6370997 +b=6370997 +units=m +no_defs", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto normalized_p = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper normal_keeper_P(normalized_p); ASSERT_NE(normalized_p, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, normalized_p, PJ_FWD, -120, 40, -80, 64, &out_left, &out_bottom, &out_right, &out_top, 100); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -1684649.41338, 1); EXPECT_NEAR(out_bottom, -555777.79210, 1); EXPECT_NEAR(out_right, 1684649.41338, 1); EXPECT_NEAR(out_top, 2234551.18559, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_antimeridian_xy) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4167", "EPSG:3851", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto normalized_p = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper normal_keeper_P(normalized_p); ASSERT_NE(normalized_p, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, normalized_p, PJ_FWD, 160.6, -55.95, -171.2, -25.88, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, 1722483.900174921, 1); EXPECT_NEAR(out_bottom, 5228058.6143420935, 1); EXPECT_NEAR(out_right, 4624385.494808555, 1); EXPECT_NEAR(out_top, 8692574.544944234, 1); double out_left_inv; double out_bottom_inv; double out_right_inv; double out_top_inv; int success_inv = proj_trans_bounds( m_ctxt, normalized_p, PJ_INV, 1722483.900174921, 5228058.6143420935, 4624385.494808555, 8692574.544944234, &out_left_inv, &out_bottom_inv, &out_right_inv, &out_top_inv, 21); EXPECT_TRUE(success_inv == 1); EXPECT_NEAR(out_left_inv, 153.2799922, 1); EXPECT_NEAR(out_bottom_inv, -56.7471249, 1); EXPECT_NEAR(out_right_inv, -162.1813873, 1); EXPECT_NEAR(out_top_inv, -24.6148194, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_antimeridian) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4167", "EPSG:3851", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, -55.95, 160.6, -25.88, -171.2, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, 5228058.6143420935, 1); EXPECT_NEAR(out_bottom, 1722483.900174921, 1); EXPECT_NEAR(out_right, 8692574.544944234, 1); EXPECT_NEAR(out_top, 4624385.494808555, 1); double out_left_inv; double out_bottom_inv; double out_right_inv; double out_top_inv; int success_inv = proj_trans_bounds( m_ctxt, P, PJ_INV, 5228058.6143420935, 1722483.900174921, 8692574.544944234, 4624385.494808555, &out_left_inv, &out_bottom_inv, &out_right_inv, &out_top_inv, 21); EXPECT_TRUE(success_inv == 1); EXPECT_NEAR(out_left_inv, -56.7471249, 1); EXPECT_NEAR(out_bottom_inv, 153.2799922, 1); EXPECT_NEAR(out_right_inv, -24.6148194, 1); EXPECT_NEAR(out_top_inv, -162.1813873, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_beyond_global_bounds) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:6933", "EPSG:4326", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto normalized_p = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper normal_keeper_P(normalized_p); ASSERT_NE(normalized_p, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, normalized_p, PJ_FWD, -17367531.3203125, -7314541.19921875, 17367531.3203125, 7314541.19921875, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -180, 1); EXPECT_NEAR(out_bottom, -85.0445994113099, 1); EXPECT_NEAR(out_right, 180, 1); EXPECT_NEAR(out_top, 85.0445994113099, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_ignore_inf) { auto P = proj_create_crs_to_crs(m_ctxt, "OGC:CRS84", "ESRI:102036", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; // Before the ellipsoidal version of the gnomonic projection was // implemented the WGS84 ellipsoid was treated as a sphere of radius // 6378137m and the equator was the "horizon" for the projection with the // south polar aspect. // // The boundary with ndiv = 21 then mapped into a line extending to ymin = // -89178007.2 which was the projection of lat = -90d/(ndiv+1), long = 180d. // // With the implementation of the ellipsoidal gnonomic projection, the // horizon is now at lat = +0.3035d. // // We move the north edge of the box to lat = -90+4.15*(ndiv+1) = +1.3d. // The northernmost point on the boundary which is within the horizon is // now lat = -90+4.15*ndiv = -2.85d, long = 180d for which y = -116576598.5. int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, -180.0, -90.0, 180.0, 1.3, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, 0, 1); EXPECT_NEAR(out_bottom, -116576598.5, 1); EXPECT_NEAR(out_right, 0, 1); EXPECT_NEAR(out_top, 0, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_ignore_inf_geographic) { auto P = proj_create_crs_to_crs( m_ctxt, "PROJCS[\"Interrupted_Goode_Homolosine\"," "GEOGCS[\"GCS_unnamed ellipse\",DATUM[\"D_unknown\"," "SPHEROID[\"Unknown\",6378137,298.257223563]]," "PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Interrupted_Goode_Homolosine\"]," "UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]]," "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]", "OGC:CRS84", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, -15028000.0, 7515000.0, -14975000.0, 7556000.0, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -179.2133, 1); EXPECT_NEAR(out_bottom, 70.9345, 1); EXPECT_NEAR(out_right, -177.9054, 1); EXPECT_NEAR(out_top, 71.4364, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_noop_geographic) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4284", "EPSG:4284", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, 19.57, 35.14, -168.97, 81.91, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, 19.57, 1); EXPECT_NEAR(out_bottom, 35.14, 1); EXPECT_NEAR(out_right, -168.97, 1); EXPECT_NEAR(out_top, 81.91, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds__north_pole_xy) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:32661", "EPSG:4326", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto normalized_p = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper normal_keeper_P(normalized_p); ASSERT_NE(normalized_p, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds( m_ctxt, normalized_p, PJ_FWD, -1371213.7625429356, -1405880.71737131, 5371213.762542935, 5405880.71737131, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -180.0, 1); EXPECT_NEAR(out_bottom, 48.656, 1); EXPECT_NEAR(out_right, 180.0, 1); EXPECT_NEAR(out_top, 90.0, 1); double out_left_inv; double out_bottom_inv; double out_right_inv; double out_top_inv; int success_inv = proj_trans_bounds( m_ctxt, normalized_p, PJ_INV, -180.0, 60.0, 180.0, 90.0, &out_left_inv, &out_bottom_inv, &out_right_inv, &out_top_inv, 21); EXPECT_TRUE(success_inv == 1); EXPECT_NEAR(out_left_inv, -1371213.76, 1); EXPECT_NEAR(out_bottom_inv, -1405880.72, 1); EXPECT_NEAR(out_right_inv, 5371213.76, 1); EXPECT_NEAR(out_top_inv, 5405880.72, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds__north_pole) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:32661", "EPSG:4326", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, -1405880.71737131, -1371213.7625429356, 5405880.71737131, 5371213.762542935, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, 48.656, 1); EXPECT_NEAR(out_bottom, -180.0, 1); EXPECT_NEAR(out_right, 90.0, 1); EXPECT_NEAR(out_top, 180.0, 1); double out_left_inv; double out_bottom_inv; double out_right_inv; double out_top_inv; int success_inv = proj_trans_bounds(m_ctxt, P, PJ_INV, 60.0, -180.0, 90.0, 180.0, &out_left_inv, &out_bottom_inv, &out_right_inv, &out_top_inv, 21); EXPECT_TRUE(success_inv == 1); EXPECT_NEAR(out_left_inv, -1405880.72, 1); EXPECT_NEAR(out_bottom_inv, -1371213.76, 1); EXPECT_NEAR(out_right_inv, 5405880.72, 1); EXPECT_NEAR(out_top_inv, 5371213.76, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds__south_pole_xy) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:32761", "EPSG:4326", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); auto normalized_p = proj_normalize_for_visualization(m_ctxt, P); ObjectKeeper normal_keeper_P(normalized_p); ASSERT_NE(normalized_p, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds( m_ctxt, normalized_p, PJ_FWD, -1371213.7625429356, -1405880.71737131, 5371213.762542935, 5405880.71737131, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -180.0, 1); EXPECT_NEAR(out_bottom, -90, 1); EXPECT_NEAR(out_right, 180.0, 1); EXPECT_NEAR(out_top, -48.656, 1); double out_left_inv; double out_bottom_inv; double out_right_inv; double out_top_inv; int success_inv = proj_trans_bounds( m_ctxt, normalized_p, PJ_INV, -180.0, -90.0, 180.0, -60.0, &out_left_inv, &out_bottom_inv, &out_right_inv, &out_top_inv, 21); EXPECT_TRUE(success_inv == 1); EXPECT_NEAR(out_left_inv, -1371213.76, 1); EXPECT_NEAR(out_bottom_inv, -1405880.72, 1); EXPECT_NEAR(out_right_inv, 5371213.76, 1); EXPECT_NEAR(out_top_inv, 5405880.72, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds__south_pole) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:32761", "EPSG:4326", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, -1405880.71737131, -1371213.7625429356, 5405880.71737131, 5371213.762542935, &out_left, &out_bottom, &out_right, &out_top, 21); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -90.0, 1); EXPECT_NEAR(out_bottom, -180.0, 1); EXPECT_NEAR(out_right, -48.656, 1); EXPECT_NEAR(out_top, 180.0, 1); double out_left_inv; double out_bottom_inv; double out_right_inv; double out_top_inv; int success_inv = proj_trans_bounds(m_ctxt, P, PJ_INV, -90.0, -180.0, -60.0, 180.0, &out_left_inv, &out_bottom_inv, &out_right_inv, &out_top_inv, 21); EXPECT_TRUE(success_inv == 1); EXPECT_NEAR(out_left_inv, -1405880.72, 1); EXPECT_NEAR(out_bottom_inv, -1371213.76, 1); EXPECT_NEAR(out_right_inv, 5405880.72, 1); EXPECT_NEAR(out_top_inv, 5371213.76, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_to_compound_crs) { // EPSG:9707 = "WGS 84 + EGM96 height" auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4326", "EPSG:9707", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, 40, -120, 64, -80, &out_left, &out_bottom, &out_right, &out_top, 0); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, 40, 1e-8); EXPECT_NEAR(out_bottom, -120, 1e-8); EXPECT_NEAR(out_right, 64, 1e-8); EXPECT_NEAR(out_top, -80, 1e-8); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_3d_densify_0_geog3D_to_proj2D) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4979", "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 " "+a=6370997 +b=6370997 +units=m +no_defs", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; double zmin; double zmax; int success = proj_trans_bounds_3D(m_ctxt, P, PJ_FWD, 40, -120, 0, 64, -80, 100, &out_left, &out_bottom, &zmin, &out_right, &out_top, &zmax, 0); EXPECT_TRUE(success == 1); EXPECT_NEAR(out_left, -1684649.41338, 1); EXPECT_NEAR(out_bottom, -350356.81377, 1); EXPECT_NEAR(out_right, 1684649.41338, 1); EXPECT_NEAR(out_top, 2234551.18559, 1); EXPECT_EQ(zmin, 0); EXPECT_EQ(zmax, 100); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_3d_noop) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4979", "EPSG:4979", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double out_left; double out_bottom; double out_right; double out_top; double zmin; double zmax; int success = proj_trans_bounds_3D(m_ctxt, P, PJ_FWD, 40, -120, 0, 64, -80, 100, &out_left, &out_bottom, &zmin, &out_right, &out_top, &zmax, 0); EXPECT_TRUE(success == 1); EXPECT_EQ(out_left, 40); EXPECT_EQ(out_bottom, -120); EXPECT_EQ(out_right, 64); EXPECT_EQ(out_top, -80); EXPECT_EQ(zmin, 0); EXPECT_EQ(zmax, 100); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_3d_geog3D_to_geocentric) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4979", "EPSG:4978", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double xmin; double ymin; double xmax; double ymax; double zmin; double zmax; int success = proj_trans_bounds_3D(m_ctxt, P, PJ_FWD, 49, 2, 0, 50, 3, 100, &xmin, &ymin, &zmin, &xmax, &ymax, &zmax, 0); EXPECT_TRUE(success == 1); EXPECT_NEAR(xmin, 4102234.41, 1); EXPECT_NEAR(ymin, 143362.39, 1); EXPECT_NEAR(xmax, 4189946.59, 1); EXPECT_NEAR(ymax, 219418.53, 1); EXPECT_NEAR(zmin, 4790558.75, 1); EXPECT_NEAR(zmax, 4862865.64, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_3d_inverse_of_geog3D_to_geocentric) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4978", "EPSG:4979", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double xmin; double ymin; double xmax; double ymax; double zmin; double zmax; int success = proj_trans_bounds_3D(m_ctxt, P, PJ_INV, 49, 2, 0, 50, 3, 100, &xmin, &ymin, &zmin, &xmax, &ymax, &zmax, 0); EXPECT_TRUE(success == 1); EXPECT_NEAR(xmin, 4102234.41, 1); EXPECT_NEAR(xmax, 4189946.59, 1); EXPECT_NEAR(ymin, 143362.39, 1); EXPECT_NEAR(ymax, 219418.53, 1); EXPECT_NEAR(zmin, 4790558.75, 1); EXPECT_NEAR(zmax, 4862865.64, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_trans_bounds_3d_geocentric_to_geog3D) { auto P = proj_create_crs_to_crs(m_ctxt, "EPSG:4978", "EPSG:4979", nullptr); ObjectKeeper keeper_P(P); ASSERT_NE(P, nullptr); double xmin; double ymin; double xmax; double ymax; double zmin; double zmax; int success = proj_trans_bounds_3D( m_ctxt, P, PJ_FWD, 4102234.41, 143362.39, 4790558.75, 4189946.59, 219418.53, 4862865.64, &xmin, &ymin, &zmin, &xmax, &ymax, &zmax, 2); EXPECT_TRUE(success == 1); EXPECT_NEAR(xmin, 49., .15); EXPECT_NEAR(ymin, 2, .15); EXPECT_NEAR(xmax, 50, .15); EXPECT_NEAR(ymax, 3., .15); EXPECT_NEAR(zmin, -57187, 1); EXPECT_NEAR(zmax, 56862.2, 1); } // --------------------------------------------------------------------------- TEST_F(CApi, proj_crs_has_point_motion_operation) { auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); ASSERT_NE(ctxt, nullptr); ContextKeeper keeper_ctxt(ctxt); { auto crs = proj_create_from_database( m_ctxt, "EPSG", "4267", PJ_CATEGORY_CRS, false, nullptr); // NAD27 ASSERT_NE(crs, nullptr); ObjectKeeper keeper_crs(crs); EXPECT_FALSE(proj_crs_has_point_motion_operation(m_ctxt, crs)); } { // NAD83(CSRS)v7 auto crs = proj_create_from_database(m_ctxt, "EPSG", "8255", PJ_CATEGORY_CRS, false, nullptr); ASSERT_NE(crs, nullptr); ObjectKeeper keeper_crs(crs); EXPECT_TRUE(proj_crs_has_point_motion_operation(m_ctxt, crs)); } } // --------------------------------------------------------------------------- TEST_F(CApi, proj_coordoperation_requires_per_coordinate_input_time) { { PJ *P = proj_create(m_ctxt, "+proj=helmert +t_epoch=2010"); ObjectKeeper keeper(P); EXPECT_EQ( proj_coordoperation_requires_per_coordinate_input_time(m_ctxt, P), true); } { PJ *P = proj_create(m_ctxt, "+proj=helmert"); ObjectKeeper keeper(P); EXPECT_EQ( proj_coordoperation_requires_per_coordinate_input_time(m_ctxt, P), false); } #ifdef TIFF_ENABLED { PJ *P = proj_create(m_ctxt, "+proj=deformation +t_epoch=2010 " "+grids=tests/nkgrf03vel_realigned_extract.tif"); ObjectKeeper keeper(P); EXPECT_EQ( proj_coordoperation_requires_per_coordinate_input_time(m_ctxt, P), true); } { PJ *P = proj_create(m_ctxt, "+proj=deformation +dt=1 " "+grids=tests/nkgrf03vel_realigned_extract.tif"); ObjectKeeper keeper(P); EXPECT_EQ( proj_coordoperation_requires_per_coordinate_input_time(m_ctxt, P), false); } #endif { PJ *P = proj_create( m_ctxt, "+proj=defmodel +model=tests/simple_model_degree_3d.json"); ObjectKeeper keeper(P); EXPECT_EQ( proj_coordoperation_requires_per_coordinate_input_time(m_ctxt, P), true); } { PJ *P = proj_create(m_ctxt, "+proj=pipeline +step +proj=set +v_4=2020 " "+proj=helmert +t_epoch=2010"); ObjectKeeper keeper(P); EXPECT_EQ( proj_coordoperation_requires_per_coordinate_input_time(m_ctxt, P), false); } // Error cases { EXPECT_EQ(proj_coordoperation_requires_per_coordinate_input_time( m_ctxt, nullptr), false); } { PJ *P = proj_create(m_ctxt, "+proj=merc +type=crs"); ObjectKeeper keeper(P); EXPECT_EQ( proj_coordoperation_requires_per_coordinate_input_time(m_ctxt, P), false); } } // --------------------------------------------------------------------------- #if !defined(_WIN32) TEST_F(CApi, open_plenty_of_contexts) { // Test that we only consume 1 file handle for the connection to the // database std::vector dummyFilePointers; std::vector ctxts; // The number of file descriptors that can be opened simultaneously by a // process varies across platforms so we make use of getrlimit(2) to // retrieve it. struct rlimit open_max; getrlimit(RLIMIT_NOFILE, &open_max); // On some platforms fopen returned nullptrs before reaching limit - 50, we // can avoid this by capping the limit to 1024. if (open_max.rlim_cur > 1024) { open_max.rlim_cur = 1024; setrlimit(RLIMIT_NOFILE, &open_max); } for (rlim_t i = 0; i < open_max.rlim_cur - 50; i++) { FILE *f = fopen("/dev/null", "rb"); ASSERT_TRUE(f != nullptr); dummyFilePointers.push_back(f); } for (int i = 0; i < 100; i++) { PJ_CONTEXT *ctxt = proj_context_create(); ASSERT_TRUE(ctxt != nullptr); auto obj = proj_create(ctxt, "EPSG:4326"); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); ctxts.push_back(ctxt); } for (PJ_CONTEXT *ctxt : ctxts) { proj_context_destroy(ctxt); } for (FILE *f : dummyFilePointers) { fclose(f); } proj_cleanup(); } #endif // !defined(_WIN32) // --------------------------------------------------------------------------- #ifndef __MINGW32__ // We need std::thread support TEST_F(CApi, concurrent_context) { // Test that concurrent access to the database is thread safe. std::vector threads; for (int i = 0; i < 4; i++) { threads.emplace_back(std::thread([] { for (int j = 0; j < 60; j++) { PJ_CONTEXT *ctxt = proj_context_create(); { auto obj = proj_create(ctxt, "EPSG:4326"); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); } { auto obj = proj_create( ctxt, ("EPSG:" + std::to_string(32600 + j)).c_str()); ObjectKeeper keeper(obj); EXPECT_NE(obj, nullptr); } proj_context_destroy(ctxt); } })); } for (auto &t : threads) { t.join(); } proj_cleanup(); } #endif // __MINGW32__ } // namespace proj-9.6.0/test/unit/test_common.cpp000664 001754 001755 00000021477 14764566077 017425 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include using namespace osgeo::proj::common; using namespace osgeo::proj::metadata; using namespace osgeo::proj::operation; using namespace osgeo::proj::util; // --------------------------------------------------------------------------- TEST(common, unit_of_measure) { EXPECT_EQ(UnitOfMeasure::METRE.name(), "metre"); EXPECT_EQ(UnitOfMeasure::METRE.conversionToSI(), 1.0); EXPECT_EQ(UnitOfMeasure::METRE.type(), UnitOfMeasure::Type::LINEAR); EXPECT_EQ(UnitOfMeasure::DEGREE.name(), "degree"); EXPECT_EQ(UnitOfMeasure::DEGREE.conversionToSI(), 0.017453292519943295); EXPECT_EQ(UnitOfMeasure::DEGREE.type(), UnitOfMeasure::Type::ANGULAR); EXPECT_EQ(UnitOfMeasure::RADIAN.name(), "radian"); EXPECT_EQ(UnitOfMeasure::RADIAN.conversionToSI(), 1.0); EXPECT_EQ(UnitOfMeasure::RADIAN.type(), UnitOfMeasure::Type::ANGULAR); EXPECT_EQ(Length(2.0, UnitOfMeasure("km", 1000.0)) .convertToUnit(UnitOfMeasure::METRE), 2000.0); EXPECT_EQ( Angle(2.0, UnitOfMeasure::DEGREE).convertToUnit(UnitOfMeasure::RADIAN), 2 * 0.017453292519943295); EXPECT_EQ(Angle(2.5969213, UnitOfMeasure::GRAD) .convertToUnit(UnitOfMeasure::DEGREE), 2.5969213 / 100.0 * 90.0); } // --------------------------------------------------------------------------- TEST(common, measure) { EXPECT_TRUE(Measure(0.0) == Measure(0.0)); EXPECT_TRUE(Measure(1.0) == Measure(1.0)); EXPECT_FALSE(Measure(1.0) == Measure(2.0)); EXPECT_FALSE(Measure(1.0) == Measure(0.0)); EXPECT_FALSE(Measure(0.0) == Measure(1.0)); EXPECT_TRUE(Measure(std::numeric_limits::infinity()) == Measure(std::numeric_limits::infinity())); EXPECT_TRUE(Measure(-std::numeric_limits::infinity()) == Measure(-std::numeric_limits::infinity())); EXPECT_FALSE(Measure(std::numeric_limits::infinity()) == Measure(-std::numeric_limits::infinity())); EXPECT_FALSE(Measure(std::numeric_limits::infinity()) == Measure(1.0)); EXPECT_FALSE(Measure(1.0) == Measure(std::numeric_limits::infinity())); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_empty) { PropertyMap properties; auto obj = OperationParameter::create(properties); EXPECT_TRUE(obj->name()->code().empty()); EXPECT_TRUE(obj->identifiers().empty()); EXPECT_TRUE(obj->aliases().empty()); EXPECT_TRUE(obj->remarks().empty()); EXPECT_TRUE(!obj->isDeprecated()); EXPECT_TRUE(obj->alias().empty()); } // --------------------------------------------------------------------------- TEST(common, identifiedobject) { PropertyMap properties; properties.set(IdentifiedObject::NAME_KEY, "name"); properties.set(IdentifiedObject::IDENTIFIERS_KEY, Identifier::create("identifier_code")); properties.set(IdentifiedObject::ALIAS_KEY, "alias"); properties.set(IdentifiedObject::REMARKS_KEY, "remarks"); properties.set(IdentifiedObject::DEPRECATED_KEY, true); auto obj = OperationParameter::create(properties); EXPECT_EQ(*(obj->name()->description()), "name"); ASSERT_EQ(obj->identifiers().size(), 1U); EXPECT_EQ(obj->identifiers()[0]->code(), "identifier_code"); ASSERT_EQ(obj->aliases().size(), 1U); EXPECT_EQ(obj->aliases()[0]->toString(), "alias"); EXPECT_EQ(obj->remarks(), "remarks"); EXPECT_TRUE(obj->isDeprecated()); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_name_invalid_type_integer) { PropertyMap properties; properties.set(IdentifiedObject::NAME_KEY, 123); ASSERT_THROW(OperationParameter::create(properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_name_invalid_type_citation) { PropertyMap properties; properties.set(IdentifiedObject::NAME_KEY, nn_make_shared("invalid")); ASSERT_THROW(OperationParameter::create(properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_identifier_invalid_type) { PropertyMap properties; properties.set(IdentifiedObject::IDENTIFIERS_KEY, "string not allowed"); ASSERT_THROW(OperationParameter::create(properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_identifier_array_of_identifier) { PropertyMap properties; auto array = ArrayOfBaseObject::create(); array->add(Identifier::create("identifier_code1")); array->add(Identifier::create("identifier_code2")); properties.set(IdentifiedObject::IDENTIFIERS_KEY, array); auto obj = OperationParameter::create(properties); ASSERT_EQ(obj->identifiers().size(), 2U); EXPECT_EQ(obj->identifiers()[0]->code(), "identifier_code1"); EXPECT_EQ(obj->identifiers()[1]->code(), "identifier_code2"); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_identifier_array_of_invalid_type) { PropertyMap properties; auto array = ArrayOfBaseObject::create(); array->add(nn_make_shared("unexpected type")); properties.set(IdentifiedObject::IDENTIFIERS_KEY, array); ASSERT_THROW(OperationParameter::create(properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_alias_array_of_string) { PropertyMap properties; properties.set(IdentifiedObject::ALIAS_KEY, std::vector{"alias1", "alias2"}); auto obj = OperationParameter::create(properties); ASSERT_EQ(obj->aliases().size(), 2U); EXPECT_EQ(obj->aliases()[0]->toString(), "alias1"); EXPECT_EQ(obj->aliases()[1]->toString(), "alias2"); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_alias_invalid_type) { PropertyMap properties; properties.set(IdentifiedObject::ALIAS_KEY, nn_make_shared("unexpected type")); ASSERT_THROW(OperationParameter::create(properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(common, identifiedobject_alias_array_of_invalid_type) { PropertyMap properties; auto array = ArrayOfBaseObject::create(); array->add(nn_make_shared("unexpected type")); properties.set(IdentifiedObject::ALIAS_KEY, array); ASSERT_THROW(OperationParameter::create(properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(common, DataEpoch) { DataEpoch epochSrc(Measure(2010.5, UnitOfMeasure::YEAR)); DataEpoch epoch(epochSrc); EXPECT_EQ(epoch.coordinateEpoch().value(), 2010.5); EXPECT_EQ(epoch.coordinateEpoch().unit(), UnitOfMeasure::YEAR); } proj-9.6.0/test/unit/test_coordinates.cpp000664 001754 001755 00000022511 14764566077 020435 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2023, 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 "gtest_include.h" // to be able to use internal::replaceAll #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinates.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include #include #include using namespace osgeo::proj::common; using namespace osgeo::proj::coordinates; using namespace osgeo::proj::crs; using namespace osgeo::proj::cs; using namespace osgeo::proj::datum; using namespace osgeo::proj::io; using namespace osgeo::proj::metadata; using namespace osgeo::proj::util; namespace { struct ObjectKeeper { PJ *m_obj = nullptr; explicit ObjectKeeper(PJ *obj) : m_obj(obj) {} ~ObjectKeeper() { proj_destroy(m_obj); } ObjectKeeper(const ObjectKeeper &) = delete; ObjectKeeper &operator=(const ObjectKeeper &) = delete; }; struct PjContextKeeper { PJ_CONTEXT *m_ctxt = nullptr; explicit PjContextKeeper(PJ_CONTEXT *ctxt) : m_ctxt(ctxt) {} ~PjContextKeeper() { proj_context_destroy(m_ctxt); } PjContextKeeper(const PjContextKeeper &) = delete; PjContextKeeper &operator=(const PjContextKeeper &) = delete; }; } // namespace // --------------------------------------------------------------------------- static VerticalCRSNNPtr createVerticalCRS() { PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5101) .set(IdentifiedObject::NAME_KEY, "Ordnance Datum Newlyn"); auto vdatum = VerticalReferenceFrame::create(propertiesVDatum); PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5701) .set(IdentifiedObject::NAME_KEY, "ODN height"); return VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(coordinateMetadata, static_crs) { auto coordinateMetadata = CoordinateMetadata::create(GeographicCRS::EPSG_4326); EXPECT_TRUE(coordinateMetadata->crs()->isEquivalentTo( GeographicCRS::EPSG_4326.get())); EXPECT_FALSE(coordinateMetadata->coordinateEpoch().has_value()); // We tolerate coordinate epochs for EPSG:4326 EXPECT_NO_THROW( CoordinateMetadata::create(GeographicCRS::EPSG_4326, 2025.0)); // A coordinate epoch should NOT be provided EXPECT_THROW(CoordinateMetadata::create(createVerticalCRS(), 2025.0), Exception); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); auto wkt = coordinateMetadata->exportToWKT(f.get()); auto obj = WKTParser().createFromWKT(wkt); auto coordinateMetadataFromWkt = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(coordinateMetadataFromWkt != nullptr); EXPECT_TRUE(coordinateMetadataFromWkt->crs()->isEquivalentTo( GeographicCRS::EPSG_4326.get())); EXPECT_FALSE(coordinateMetadataFromWkt->coordinateEpoch().has_value()); auto ctxt = proj_context_create(); PjContextKeeper ctxtKeeper(ctxt); auto pjObj = proj_create(ctxt, wkt.c_str()); ObjectKeeper objKeeper(pjObj); ASSERT_TRUE(pjObj != nullptr); EXPECT_EQ(proj_get_type(pjObj), PJ_TYPE_COORDINATE_METADATA); EXPECT_TRUE(std::isnan(proj_coordinate_metadata_get_epoch(ctxt, pjObj))); auto pjObj2 = proj_get_source_crs(ctxt, pjObj); ObjectKeeper objKeeper2(pjObj2); EXPECT_TRUE(pjObj2 != nullptr); auto projjson = coordinateMetadata->exportToJSON(JSONFormatter::create(nullptr).get()); auto obj2 = createFromUserInput(projjson, nullptr); auto coordinateMetadataFromJson = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(coordinateMetadataFromJson != nullptr); EXPECT_TRUE(coordinateMetadataFromJson->crs()->isEquivalentTo( GeographicCRS::EPSG_4326.get())); EXPECT_FALSE(coordinateMetadataFromJson->coordinateEpoch().has_value()); } // --------------------------------------------------------------------------- TEST(coordinateMetadata, dynamic_crs) { auto drf = DynamicGeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), Ellipsoid::WGS84, optional("My anchor"), PrimeMeridian::GREENWICH, Measure(2018.5, UnitOfMeasure::YEAR), optional("My model")); auto crs = GeographicCRS::create( PropertyMap(), drf, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto coordinateMetadata = CoordinateMetadata::create(crs, 2023.5); EXPECT_TRUE(coordinateMetadata->crs()->isEquivalentTo(crs.get())); EXPECT_TRUE(coordinateMetadata->coordinateEpoch().has_value()); EXPECT_NEAR(coordinateMetadata->coordinateEpochAsDecimalYear(), 2023.5, 1e-10); // A coordinate epoch should be provided EXPECT_THROW(CoordinateMetadata::create(crs), Exception); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); auto wkt = coordinateMetadata->exportToWKT(f.get()); auto obj = WKTParser().createFromWKT(wkt); auto coordinateMetadataFromWkt = nn_dynamic_pointer_cast(obj); EXPECT_TRUE(coordinateMetadataFromWkt->crs()->isEquivalentTo(crs.get())); EXPECT_TRUE(coordinateMetadataFromWkt->coordinateEpoch().has_value()); EXPECT_NEAR(coordinateMetadataFromWkt->coordinateEpochAsDecimalYear(), 2023.5, 1e-10); auto ctxt = proj_context_create(); PjContextKeeper ctxtKeeper(ctxt); auto pjObj = proj_create(ctxt, wkt.c_str()); ObjectKeeper objKeeper(pjObj); ASSERT_TRUE(pjObj != nullptr); EXPECT_EQ(proj_get_type(pjObj), PJ_TYPE_COORDINATE_METADATA); EXPECT_NEAR(proj_coordinate_metadata_get_epoch(ctxt, pjObj), 2023.5, 1e-10); auto projjson = coordinateMetadata->exportToJSON(JSONFormatter::create(nullptr).get()); auto obj2 = createFromUserInput(projjson, nullptr); auto coordinateMetadataFromJson = nn_dynamic_pointer_cast(obj2); EXPECT_TRUE(coordinateMetadataFromJson->crs()->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(coordinateMetadataFromJson->coordinateEpoch().has_value()); EXPECT_NEAR(coordinateMetadataFromJson->coordinateEpochAsDecimalYear(), 2023.5, 1e-10); } // --------------------------------------------------------------------------- TEST(coordinateMetadata, crs_with_point_motion_operation_and_promote_to_3D) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); { // "NAD83(CSRS)v7" auto crs = factory->createCoordinateReferenceSystem("8255"); EXPECT_THROW(CoordinateMetadata::create(crs, 2023.5), Exception); EXPECT_NO_THROW(CoordinateMetadata::create(crs, 2023.5, dbContext)); auto cm = CoordinateMetadata::create(crs, 2023.5, dbContext) ->promoteTo3D(std::string(), dbContext); EXPECT_TRUE(cm->crs()->isEquivalentTo( crs->promoteTo3D(std::string(), dbContext).get())); EXPECT_TRUE(cm->coordinateEpoch().has_value()); EXPECT_NEAR(cm->coordinateEpochAsDecimalYear(), 2023.5, 1e-10); } { auto crs = factory->createCoordinateReferenceSystem("4267"); EXPECT_THROW(CoordinateMetadata::create(crs, 2023.5, dbContext), Exception); auto cm = CoordinateMetadata::create(crs)->promoteTo3D(std::string(), dbContext); EXPECT_TRUE(cm->crs()->isEquivalentTo( crs->promoteTo3D(std::string(), dbContext).get())); EXPECT_TRUE(!cm->coordinateEpoch().has_value()); } } proj-9.6.0/test/unit/test_crs.cpp000664 001754 001755 00001225621 14764566077 016722 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" // to be able to use internal::replaceAll #define FROM_PROJ_CPP #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj/internal/io_internal.hpp" using namespace osgeo::proj::common; using namespace osgeo::proj::crs; using namespace osgeo::proj::cs; using namespace osgeo::proj::datum; using namespace osgeo::proj::io; using namespace osgeo::proj::internal; using namespace osgeo::proj::metadata; using namespace osgeo::proj::operation; using namespace osgeo::proj::util; namespace { struct UnrelatedObject : public IComparable { UnrelatedObject() = default; bool _isEquivalentTo(const IComparable *, Criterion, const DatabaseContextPtr &) const override { assert(false); return false; } }; static nn> createUnrelatedObject() { return nn_make_shared(); } } // namespace // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_get_components) { auto crs = GeographicCRS::EPSG_4326; ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "4326"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(crs->nameStr(), "WGS 84"); auto datum = crs->datum(); ASSERT_EQ(datum->identifiers().size(), 1U); EXPECT_EQ(datum->identifiers()[0]->code(), "6326"); EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(datum->nameStr(), "World Geodetic System 1984"); auto ellipsoid = datum->ellipsoid(); EXPECT_EQ(ellipsoid->semiMajorAxis().value(), 6378137.0); EXPECT_EQ(ellipsoid->semiMajorAxis().unit(), UnitOfMeasure::METRE); EXPECT_EQ(ellipsoid->inverseFlattening()->value(), 298.257223563); ASSERT_EQ(ellipsoid->identifiers().size(), 1U); EXPECT_EQ(ellipsoid->identifiers()[0]->code(), "7030"); EXPECT_EQ(*(ellipsoid->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(ellipsoid->nameStr(), "WGS 84"); } // --------------------------------------------------------------------------- TEST(crs, GeographicCRS_isEquivalentTo) { auto crs = GeographicCRS::EPSG_4326; EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE( crs->isEquivalentTo(crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(crs->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_FALSE(crs->isEquivalentTo(GeographicCRS::EPSG_4979.get())); EXPECT_FALSE(crs->isEquivalentTo(GeographicCRS::EPSG_4979.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(crs->isEquivalentTo(GeographicCRS::OGC_CRS84.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(crs->isEquivalentTo( GeographicCRS::OGC_CRS84.get(), IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)); EXPECT_TRUE(GeographicCRS::OGC_CRS84->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)); EXPECT_FALSE( GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->isEquivalentTo(crs.get())); EXPECT_FALSE( GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->isEquivalentTo( GeographicCRS::create(PropertyMap(), GeodeticReferenceFrame::create( PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude( UnitOfMeasure::DEGREE)) .get())); } // --------------------------------------------------------------------------- TEST(crs, GeographicCRS_datum_ensemble) { auto ensemble_vdatum = DatumEnsemble::create( PropertyMap(), std::vector{GeodeticReferenceFrame::EPSG_6326, GeodeticReferenceFrame::EPSG_6326}, PositionalAccuracy::create("100")); { auto crs = GeographicCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "unnamed") .set(Identifier::CODESPACE_KEY, "MY_CODESPACE") .set(Identifier::CODE_KEY, "MY_ID"), nullptr, ensemble_vdatum, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); crs->exportToWKT(f.get()); auto expected = "GEOGCRS[\"unnamed\",\n" " ENSEMBLE[\"unnamed\",\n" " MEMBER[\"World Geodetic System 1984\"],\n" " MEMBER[\"World Geodetic System 1984\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[100]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"MY_CODESPACE\",\"MY_ID\"]]"; EXPECT_EQ(f->toString(), expected); } { auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), nullptr, ensemble_vdatum, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); crs->exportToWKT(f.get()); auto expected = "GEOGCRS[\"unnamed\",\n" " ENSEMBLE[\"unnamed\",\n" " MEMBER[\"World Geodetic System 1984\",\n" " ID[\"EPSG\",6326]],\n" " MEMBER[\"World Geodetic System 1984\",\n" " ID[\"EPSG\",6326]],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ENSEMBLEACCURACY[100]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; EXPECT_EQ(f->toString(), expected); } } // --------------------------------------------------------------------------- TEST(crs, GeographicCRS_ensemble_exception_in_create) { EXPECT_THROW(GeographicCRS::create(PropertyMap(), nullptr, nullptr, EllipsoidalCS::createLatitudeLongitude( UnitOfMeasure::DEGREE)), Exception); auto ensemble_vdatum = DatumEnsemble::create( PropertyMap(), std::vector{ VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "vdatum1")), VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "vdatum2"))}, PositionalAccuracy::create("100")); EXPECT_THROW(GeographicCRS::create(PropertyMap(), nullptr, ensemble_vdatum, EllipsoidalCS::createLatitudeLongitude( UnitOfMeasure::DEGREE)), Exception); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT2) { auto crs = GeographicCRS::EPSG_4326; WKTFormatterNNPtr f(WKTFormatter::create()); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT2_2019) { auto crs = GeographicCRS::EPSG_4326; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT2_SIMPLIFIED) { auto crs = GeographicCRS::EPSG_4326; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_SIMPLIFIED)); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north],\n" " AXIS[\"longitude\",east],\n" " UNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",4326]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT2_SIMPLIFIED_single_line) { auto crs = GeographicCRS::EPSG_4326; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_SIMPLIFIED)); f->setMultiLine(false); crs->exportToWKT(f.get()); EXPECT_EQ( f->toString(), "GEODCRS[\"WGS 84\",DATUM[\"World Geodetic System " "1984\",ELLIPSOID[\"WGS " "84\",6378137,298.257223563]]," "CS[ellipsoidal,2],AXIS[\"latitude\",north],AXIS[\"longitude\",east]," "UNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",4326]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT2_2019_SIMPLIFIED) { auto crs = GeographicCRS::EPSG_4326; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019_SIMPLIFIED)); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north],\n" " AXIS[\"longitude\",east],\n" " UNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",4326]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT1_GDAL) { auto crs = GeographicCRS::EPSG_4326; auto wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_EQ(wkt, "GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT1_GDAL_with_axis) { auto crs = GeographicCRS::EPSG_4326; auto wkt = crs->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) ->setOutputAxis(WKTFormatter::OutputAxisRule::YES))); EXPECT_EQ(wkt, "GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"Latitude\",NORTH],\n" " AXIS[\"Longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_from_db_as_WKT1_GDAL_with_axis) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createCoordinateReferenceSystem("4326"); auto wkt = crs->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) ->setOutputAxis(WKTFormatter::OutputAxisRule::YES))); EXPECT_EQ(wkt, "GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"Latitude\",NORTH],\n" " AXIS[\"Longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT1_ESRI_with_database) { auto crs = GeographicCRS::EPSG_4326; WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_" "1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4901_as_WKT1_ESRI_with_PRIMEM_unit_name_morphing) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createCoordinateReferenceSystem("4901"); WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"GCS_ATF_Paris\",DATUM[\"D_ATF\"," "SPHEROID[\"Plessis_1817\",6376523.0,308.64]]," "PRIMEM[\"Paris_RGS\",2.33720833333333]," "UNIT[\"Grad\",0.0157079632679489]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_WKT1_ESRI_without_database) { auto crs = GeographicCRS::EPSG_4326; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI)); EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_" "1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4326_as_PROJ_string) { auto crs = GeographicCRS::EPSG_4326; EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4979_as_WKT2_SIMPLIFIED) { auto crs = GeographicCRS::EPSG_4979; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_SIMPLIFIED)); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " UNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4979_as_WKT2_2019_SIMPLIFIED) { auto crs = GeographicCRS::EPSG_4979; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019_SIMPLIFIED)); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " UNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4979_as_WKT1_GDAL_with_axis_not_strict_mode) { auto crs = GeographicCRS::EPSG_4979; auto wkt = crs->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) ->setStrict(false) .setOutputAxis(WKTFormatter::OutputAxisRule::YES))); // WKT1 only supports 2 axis for GEOGCS. So this is an extension of // WKT1 as it // and GDAL doesn't really export such as beast, although it can import it // so allow it only in non-strict more EXPECT_EQ(wkt, "GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"Latitude\",NORTH],\n" " AXIS[\"Longitude\",EAST],\n" " AXIS[\"Ellipsoidal height\",UP],\n" " AUTHORITY[\"EPSG\",\"4979\"]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4979_as_WKT1_GDAL) { auto crs = GeographicCRS::EPSG_4979; EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4979_as_WKT1_GDAL_with_ellipsoidal_height_as_vertical_crs) { auto crs = GeographicCRS::EPSG_4979; auto wkt = crs->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, DatabaseContext::create()) ->setAllowEllipsoidalHeightAsVerticalCRS(true))); // For LAS 1.4 WKT1... EXPECT_EQ(wkt, "COMPD_CS[\"WGS 84 + Ellipsoid (metre)\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " VERT_CS[\"Ellipsoid (metre)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Ellipsoidal height\",UP]]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4979_as_WKT1_ESRI) { auto crs = GeographicCRS::EPSG_4979; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI)); const auto wkt = "GEOGCS[\"WGS_1984_3D\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]," "LINUNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT(f.get()), wkt); } // --------------------------------------------------------------------------- TEST(crs, geographic3D_crs_as_WKT1_ESRI_database) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("7087"); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext)); const auto wkt = "GEOGCS[\"RGTAAF07_(lon-lat)_3D\"," "DATUM[\"D_Reseau_Geodesique_des_Terres_Australes_et_" "Antarctiques_Francaises_2007\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]," "LINUNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT(f.get()), wkt); } // --------------------------------------------------------------------------- TEST(crs, geographic3D_NAD83_as_WKT1_ESRI_database) { auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "VERTCS[\"NAD_1983\",DATUM[\"D_North_American_1983\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext)); const auto wkt = "GEOGCS[\"GCS_NAD83\",DATUM[\"D_North_American_1983\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]," "LINUNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT(f.get()), wkt); } // --------------------------------------------------------------------------- TEST(crs, GeographicCRS_is2DPartOf3D) { EXPECT_TRUE(GeographicCRS::EPSG_4326->is2DPartOf3D( NN_NO_CHECK(GeographicCRS::EPSG_4979.get()))); EXPECT_FALSE(GeographicCRS::EPSG_4326->is2DPartOf3D( NN_NO_CHECK(GeographicCRS::EPSG_4326.get()))); EXPECT_FALSE(GeographicCRS::EPSG_4979->is2DPartOf3D( NN_NO_CHECK(GeographicCRS::EPSG_4326.get()))); EXPECT_FALSE(GeographicCRS::EPSG_4979->is2DPartOf3D( NN_NO_CHECK(GeographicCRS::EPSG_4979.get()))); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4807_as_WKT2) { auto crs = GeographicCRS::EPSG_4807; WKTFormatterNNPtr f(WKTFormatter::create(WKTFormatter::Convention::WKT2)); crs->exportToWKT(f.get()); EXPECT_EQ( f->toString(), "GEODCRS[\"NTF (Paris)\",\n" " DATUM[\"Nouvelle Triangulation Francaise (Paris)\",\n" " ELLIPSOID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293627,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Paris\",2.5969213,\n" " ANGLEUNIT[\"grad\",0.015707963267949]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"grad\",0.015707963267949]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"grad\",0.015707963267949]],\n" " ID[\"EPSG\",4807]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4807_as_WKT2_SIMPLIFIED) { auto crs = GeographicCRS::EPSG_4807; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_SIMPLIFIED)); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEODCRS[\"NTF (Paris)\",\n" " DATUM[\"Nouvelle Triangulation Francaise (Paris)\",\n" " ELLIPSOID[\"Clarke 1880 " "(IGN)\",6378249.2,293.466021293627]],\n" " PRIMEM[\"Paris\",2.5969213],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north],\n" " AXIS[\"longitude\",east],\n" " UNIT[\"grad\",0.015707963267949],\n" " ID[\"EPSG\",4807]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4807_as_WKT1_GDAL) { auto crs = GeographicCRS::EPSG_4807; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL)); crs->exportToWKT(f.get()); EXPECT_EQ( f->toString(), "GEOGCS[\"NTF (Paris)\",\n" " DATUM[\"Nouvelle_Triangulation_Francaise_Paris\",\n" " SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293627,\n" " AUTHORITY[\"EPSG\",\"7011\"]],\n" " AUTHORITY[\"EPSG\",\"6807\"]],\n" " PRIMEM[\"Paris\",2.33722917,\n" /* WKT1_GDAL weirdness: PRIMEM is converted to degree */ " AUTHORITY[\"EPSG\",\"8903\"]],\n" " UNIT[\"grad\",0.015707963267949,\n" " AUTHORITY[\"EPSG\",\"9105\"]],\n" " AUTHORITY[\"EPSG\",\"4807\"]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4807_as_WKT1_ESRI_with_database) { auto crs = GeographicCRS::EPSG_4807; WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"GCS_NTF_Paris\"," "DATUM[\"Nouvelle_Triangulation_Francaise_(Paris)\"," "SPHEROID[\"Clarke_1880_IGN\",6378249.2,293.466021293627]]," "PRIMEM[\"Paris\",2.33722917],UNIT[\"Grad\",0.015707963267949]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4807_as_WKT1_ESRI_without_database) { auto crs = GeographicCRS::EPSG_4807; WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI)); EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"GCS_NTF_Paris\",DATUM[\"D_Nouvelle_Triangulation_" "Francaise_Paris\",SPHEROID[\"Clarke_1880_IGN\",6378249.2,293." "466021293627]],PRIMEM[\"Paris\",2.33722917],UNIT[\"Grad\",0." "015707963267949]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4807_as_PROJ_string) { auto crs = GeographicCRS::EPSG_4807; EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +ellps=clrk80ign +pm=paris +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4267) { auto crs = GeographicCRS::EPSG_4267; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), "GEODCRS[\"NAD27\",\n" " DATUM[\"North American Datum 1927\",\n" " ELLIPSOID[\"Clarke 1866\",6378206.4,294.978698213898,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4267]]"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +datum=NAD27 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4267_as_WKT1_ESRI_with_database) { auto crs = GeographicCRS::EPSG_4267; WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"GCS_North_American_1927\"," "DATUM[\"D_North_American_1927\",SPHEROID[\"Clarke_1866\"," "6378206.4,294.978698213898]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4269) { auto crs = GeographicCRS::EPSG_4269; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), "GEODCRS[\"NAD83\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4269]]"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +datum=NAD83 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4268_geogcrs_deprecated_as_WKT1_GDAL) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("4268"); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL)); auto wkt = crs->exportToWKT(f.get()); EXPECT_TRUE(wkt.find("GEOGCS[\"NAD27 Michigan (deprecated)\"") == 0) << wkt; } // --------------------------------------------------------------------------- TEST(crs, ESRI_104971_as_WKT1_ESRI_with_database) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "ESRI"); auto crs = factory->createCoordinateReferenceSystem("104971"); WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); // Check that the _(Sphere) suffix is preserved EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"Mars_2000_(Sphere)\",DATUM[\"Mars_2000_(Sphere)\"," "SPHEROID[\"Mars_2000_(Sphere)\",3396190.0,0.0]]," "PRIMEM[\"Reference_Meridian\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"); } // --------------------------------------------------------------------------- TEST(crs, implicit_compound_ESRI_104024_plus_115844_as_WKT1_ESRI_with_database) { auto dbContext = DatabaseContext::create(); auto obj = createFromUserInput("ESRI:104024+115844", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); f->setAllowLINUNITNode(false); // Situation where there is no EPSG official name EXPECT_EQ(crs->exportToWKT(f.get()), "GEOGCS[\"California_SRS_Epoch_2017.50_(NAD83)\"," "DATUM[\"California_SRS_Epoch_2017.50_(NAD83)\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "VERTCS[\"California_SRS_Epoch_2017.50_(NAD83)\"," "DATUM[\"California_SRS_Epoch_2017.50_(NAD83)\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"); } // --------------------------------------------------------------------------- TEST(crs, implicit_compound_ESRI_104971_to_3D_as_WKT1_ESRI_with_database) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "ESRI"); auto crs = factory->createGeographicCRS("104971")->promoteTo3D( std::string(), dbContext); WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); f->setAllowLINUNITNode(false); // Situation where there is no ESRI vertical CRS, but the GEOGCS does exist // This will be only partly recognized by ESRI software. // See https://github.com/OSGeo/PROJ/issues/2757 const char *wkt = "GEOGCS[\"Mars_2000_(Sphere)\"," "DATUM[\"Mars_2000_(Sphere)\"," "SPHEROID[\"Mars_2000_(Sphere)\",3396190.0,0.0]]," "PRIMEM[\"Reference_Meridian\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "VERTCS[\"Mars_2000_(Sphere)\"," "DATUM[\"Mars_2000_(Sphere)\"," "SPHEROID[\"Mars_2000_(Sphere)\",3396190.0,0.0]]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT(f.get()), wkt); auto obj2 = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); EXPECT_EQ(crs2->coordinateSystem()->axisList().size(), 3U); } // --------------------------------------------------------------------------- TEST(crs, IAU_1000_as_WKT2) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "IAU_2015"); auto crs = factory->createCoordinateReferenceSystem("1000"); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext)); auto wkt = crs->exportToWKT(f.get()); // Check that IAU_2015 is split into a authority name and version EXPECT_TRUE(wkt.find("ID[\"IAU\",1000,2015]") != std::string::npos) << wkt; auto obj = createFromUserInput(wkt, dbContext); auto crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); auto wkt2 = crs2->exportToWKT(f.get()); // Check that IAU_2015 is split into a authority name and version EXPECT_TRUE(wkt2.find("ID[\"IAU\",1000,2015]") != std::string::npos) << wkt2; } // --------------------------------------------------------------------------- TEST(crs, IAU_1000_as_PROJJSON) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "IAU_2015"); auto crs = factory->createCoordinateReferenceSystem("1000"); auto projjson = crs->exportToJSON(JSONFormatter::create(dbContext).get()); // Check that IAU_2015 is split into a authority name and version EXPECT_TRUE(projjson.find("\"authority\": \"IAU\",") != std::string::npos) << projjson; EXPECT_TRUE(projjson.find("\"code\": 1000,") != std::string::npos) << projjson; EXPECT_TRUE(projjson.find("\"version\": 2015") != std::string::npos) << projjson; auto obj = createFromUserInput(projjson, dbContext); auto crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext)); auto wkt2 = crs2->exportToWKT(f.get()); // Check that IAU_2015 is split into a authority name and version EXPECT_TRUE(wkt2.find("ID[\"IAU\",1000,2015]") != std::string::npos) << wkt2; } // --------------------------------------------------------------------------- TEST(crs, EPSG_2008_projcrs_deprecated_as_WKT1_GDAL) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("2008"); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL)); auto wkt = crs->exportToWKT(f.get()); EXPECT_TRUE( wkt.find("PROJCS[\"NAD27(CGQ77) / SCoPQ zone 2 (deprecated)\"") == 0) << wkt; } // --------------------------------------------------------------------------- TEST(crs, EPSG_27561_projected_with_geodetic_in_grad_as_PROJ_string_and_WKT1) { auto obj = WKTParser().createFromWKT( "PROJCRS[\"NTF (Paris) / Lambert Nord France\",\n" " BASEGEODCRS[\"NTF (Paris)\",\n" " DATUM[\"Nouvelle Triangulation Francaise (Paris)\",\n" " ELLIPSOID[\"Clarke 1880 " "(IGN)\",6378249.2,293.4660213,LENGTHUNIT[\"metre\",1.0]]],\n" " PRIMEM[\"Paris\",2.5969213,ANGLEUNIT[\"grad\",0.015707963268]]],\n" " CONVERSION[\"Lambert Nord France\",\n" " METHOD[\"Lambert Conic Conformal (1SP)\",ID[\"EPSG\",9801]],\n" " PARAMETER[\"Latitude of natural " "origin\",55,ANGLEUNIT[\"grad\",0.015707963268]],\n" " PARAMETER[\"Longitude of natural " "origin\",0,ANGLEUNIT[\"grad\",0.015707963268]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.999877341,SCALEUNIT[\"unity\",1.0]],\n" " PARAMETER[\"False easting\",600000,LENGTHUNIT[\"metre\",1.0]],\n" " PARAMETER[\"False northing\",200000,LENGTHUNIT[\"metre\",1.0]]],\n" " CS[cartesian,2],\n" " AXIS[\"easting (X)\",east,ORDER[1]],\n" " AXIS[\"northing (Y)\",north,ORDER[2]],\n" " LENGTHUNIT[\"metre\",1.0],\n" " ID[\"EPSG\",27561]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=0 +k_0=0.999877341 " "+x_0=600000 +y_0=200000 +ellps=clrk80ign +pm=paris +units=m " "+no_defs +type=crs"); auto nn_crs = NN_CHECK_ASSERT(crs); EXPECT_TRUE(nn_crs->isEquivalentTo(nn_crs.get())); EXPECT_FALSE(nn_crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_FALSE( nn_crs->DerivedCRS::isEquivalentTo(createUnrelatedObject().get())); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, DatabaseContext::create()) .get()); EXPECT_EQ( wkt1, "PROJCS[\"NTF (Paris) / Lambert Nord France\",\n" " GEOGCS[\"NTF (Paris)\",\n" " DATUM[\"Nouvelle_Triangulation_Francaise_Paris\",\n" " SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.4660213]],\n" " PRIMEM[\"Paris\",2.33722917000759],\n" " UNIT[\"grad\",0.015707963268]],\n" " PROJECTION[\"Lambert_Conformal_Conic_1SP\"],\n" " PARAMETER[\"latitude_of_origin\",55],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"scale_factor\",0.999877341],\n" " PARAMETER[\"false_easting\",600000],\n" " PARAMETER[\"false_northing\",200000],\n" " UNIT[\"metre\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"27561\"]]"); auto wkt1_esri = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()); EXPECT_EQ(wkt1_esri, "PROJCS[\"NTF_Paris_Lambert_Nord_France\"," "GEOGCS[\"GCS_NTF_Paris\"," "DATUM[\"Nouvelle_Triangulation_Francaise_(Paris)\"," "SPHEROID[\"Clarke_1880_IGN\",6378249.2,293.4660213]]," "PRIMEM[\"Paris\",2.33722917000759]," "UNIT[\"Grad\",0.015707963268]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",600000.0]," "PARAMETER[\"False_Northing\",200000.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",55.0]," "PARAMETER[\"Scale_Factor\",0.999877341]," "PARAMETER[\"Latitude_Of_Origin\",55.0]," "UNIT[\"Meter\",1.0]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_3040_projected_northing_easting_as_PROJ_string) { auto obj = WKTParser().createFromWKT( "PROJCRS[\"ETRS89 / UTM zone 28N (N-E)\",\n" " BASEGEODCRS[\"ETRS89\",\n" " DATUM[\"European Terrestrial Reference System 1989\",\n" " ELLIPSOID[\"GRS " "1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1.0]]]],\n" " CONVERSION[\"UTM zone 28N\",\n" " METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural " "origin\",0,ANGLEUNIT[\"degree\",0.01745329252]],\n" " PARAMETER[\"Longitude of natural " "origin\",-15,ANGLEUNIT[\"degree\",0.01745329252]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.9996,SCALEUNIT[\"unity\",1.0]],\n" " PARAMETER[\"False easting\",500000,LENGTHUNIT[\"metre\",1.0]],\n" " PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1.0]]],\n" " CS[cartesian,2],\n" " AXIS[\"northing (N)\",north,ORDER[1]],\n" " AXIS[\"easting (E)\",east,ORDER[2]],\n" " LENGTHUNIT[\"metre\",1.0],\n" " ID[\"EPSG\",3040]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_2222_projected_unit_foot_as_PROJ_string_and_WKT1) { auto obj = WKTParser().createFromWKT( "PROJCRS[\"NAD83 / Arizona East (ft)\",\n" " BASEGEODCRS[\"NAD83\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS " "1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1.0]]]],\n" " CONVERSION[\"SPCS83 Arizona East zone (International feet)\",\n" " METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural " "origin\",31,ANGLEUNIT[\"degree\",0.01745329252]],\n" " PARAMETER[\"Longitude of natural " "origin\",-110.166666666667,ANGLEUNIT[\"degree\",0.01745329252]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.9999,SCALEUNIT[\"unity\",1.0]],\n" " PARAMETER[\"False easting\",700000,LENGTHUNIT[\"foot\",0.3048]],\n" " PARAMETER[\"False northing\",0,LENGTHUNIT[\"foot\",0.3048]]],\n" " CS[cartesian,2],\n" " AXIS[\"easting (X)\",east,ORDER[1]],\n" " AXIS[\"northing (Y)\",north,ORDER[2]],\n" " LENGTHUNIT[\"foot\",0.3048],\n" " ID[\"EPSG\",2222]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tmerc +lat_0=31 +lon_0=-110.166666666667 +k=0.9999 " "+x_0=213360 +y_0=0 +datum=NAD83 +units=ft +no_defs +type=crs"); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, DatabaseContext::create()) .get()); EXPECT_EQ(wkt1, "PROJCS[\"NAD83 / Arizona East (ft)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",31],\n" " PARAMETER[\"central_meridian\",-110.166666666667],\n" " PARAMETER[\"scale_factor\",0.9999],\n" " PARAMETER[\"false_easting\",700000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"foot\",0.3048],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"2222\"]]"); } // --------------------------------------------------------------------------- TEST(crs, projected_with_parameter_unit_different_than_cs_unit_as_WKT1) { auto obj = WKTParser().createFromWKT( "PROJCRS[\"unknown\"," " BASEGEODCRS[\"unknown\"," " DATUM[\"Unknown based on GRS80 ellipsoid\"," " ELLIPSOID[\"GRS 1980\",6378137,298.257222101," " LENGTHUNIT[\"metre\",1]]]," " PRIMEM[\"Greenwich\",0]]," " CONVERSION[\"UTM zone 32N\"," " METHOD[\"Transverse Mercator\"]," " PARAMETER[\"Latitude of natural origin\",0]," " PARAMETER[\"Longitude of natural origin\",9]," " PARAMETER[\"Scale factor at natural origin\",0.9996]," " PARAMETER[\"False easting\",500000,LENGTHUNIT[\"metre\",1]]," " PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1]]]," " CS[Cartesian,2]," " AXIS[\"(E)\",east]," " AXIS[\"(N)\",north]," " LENGTHUNIT[\"US survey foot\",0.304800609601219]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, DatabaseContext::create()) .get()); EXPECT_EQ(wkt1, "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"Unknown based on GRS80 ellipsoid\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",9],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",1640416.66666667],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"US survey foot\",0.304800609601219],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_32661_projected_north_pole_north_east) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("32661"); auto proj_crs = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(proj_crs != nullptr); auto proj_string = "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=stere " "+lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84 +step +proj=axisswap +order=2,1"; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(proj_crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), proj_string); auto opNormalized = op->normalizeForVisualization(); auto proj_string_normalized = "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step " "+proj=stere +lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84"; EXPECT_EQ( opNormalized->exportToPROJString(PROJStringFormatter::create().get()), proj_string_normalized); EXPECT_EQ(opNormalized->sourceCRS()->domains().size(), 1U); EXPECT_EQ(opNormalized->sourceCRS()->remarks(), "Axis order reversed compared to EPSG:4326"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_5041_projected_north_pole_east_north) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("5041"); auto proj_crs = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(proj_crs != nullptr); auto proj_string = "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=stere " "+lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84"; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(proj_crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), proj_string); auto opNormalized = op->normalizeForVisualization(); auto proj_string_normalized = "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step " "+proj=stere +lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84"; EXPECT_EQ( opNormalized->exportToPROJString(PROJStringFormatter::create().get()), proj_string_normalized); } // --------------------------------------------------------------------------- TEST(crs, EPSG_32761_projected_south_pole_north_east) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("32761"); auto proj_crs = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(proj_crs != nullptr); auto proj_string = "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=stere " "+lat_0=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84 +step +proj=axisswap +order=2,1"; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(proj_crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), proj_string); auto opNormalized = op->normalizeForVisualization(); auto proj_string_normalized = "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step " "+proj=stere +lat_0=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84"; EXPECT_EQ( opNormalized->exportToPROJString(PROJStringFormatter::create().get()), proj_string_normalized); } // --------------------------------------------------------------------------- TEST(crs, EPSG_5042_projected_south_pole_east_north) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("5042"); auto proj_crs = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(proj_crs != nullptr); auto proj_string = "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=stere " "+lat_0=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84"; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(proj_crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), proj_string); auto opNormalized = op->normalizeForVisualization(); auto proj_string_normalized = "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step " "+proj=stere +lat_0=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 " "+ellps=WGS84"; EXPECT_EQ( opNormalized->exportToPROJString(PROJStringFormatter::create().get()), proj_string_normalized); } // --------------------------------------------------------------------------- TEST(crs, EPSG_5482_projected_south_pole_south_west) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factory->createCoordinateReferenceSystem("5482"); auto proj_crs = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(proj_crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( factory->createCoordinateReferenceSystem("4764"), NN_NO_CHECK(proj_crs)); ASSERT_TRUE(op != nullptr); auto proj_string = "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=stere +lat_0=-90 +lon_0=180 +k=0.994 " "+x_0=5000000 +y_0=1000000 +ellps=GRS80 " "+step +proj=axisswap +order=2,1"; EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), proj_string); auto opNormalized = op->normalizeForVisualization(); auto proj_string_normalized = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=stere +lat_0=-90 +lon_0=180 +k=0.994 " "+x_0=5000000 +y_0=1000000 +ellps=GRS80"; EXPECT_EQ( opNormalized->exportToPROJString(PROJStringFormatter::create().get()), proj_string_normalized); } // --------------------------------------------------------------------------- TEST(crs, geodetic_crs_both_datum_datum_ensemble_null) { EXPECT_THROW(GeodeticCRS::create( PropertyMap(), nullptr, nullptr, CartesianCS::createGeocentric(UnitOfMeasure::METRE)), Exception); } // --------------------------------------------------------------------------- TEST(crs, geodetic_crs_both_datum_datum_ensemble_non_null) { auto ensemble = DatumEnsemble::create( PropertyMap(), std::vector{GeodeticReferenceFrame::EPSG_6326, GeodeticReferenceFrame::EPSG_6326}, PositionalAccuracy::create("100")); EXPECT_THROW(GeodeticCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, ensemble, CartesianCS::createGeocentric(UnitOfMeasure::METRE)), Exception); } // --------------------------------------------------------------------------- static GeodeticCRSNNPtr createGeocentric() { PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 4328) .set(IdentifiedObject::NAME_KEY, "WGS 84"); return GeodeticCRS::create( propertiesCRS, GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(crs, geocentricCRS_as_WKT2) { auto crs = createGeocentric(); auto expected = "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4328]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(crs, geocentricCRS_as_WKT2_simplified) { auto crs = createGeocentric(); auto expected = "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX],\n" " AXIS[\"(Y)\",geocentricY],\n" " AXIS[\"(Z)\",geocentricZ],\n" " UNIT[\"metre\",1],\n" " ID[\"EPSG\",4328]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create( WKTFormatter::Convention::WKT2_SIMPLIFIED) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, geocentricCRS_as_WKT1_GDAL) { auto crs = createGeocentric(); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL)); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEOCCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Geocentric X\",OTHER],\n" " AXIS[\"Geocentric Y\",OTHER],\n" " AXIS[\"Geocentric Z\",NORTH],\n" " AUTHORITY[\"EPSG\",\"4328\"]]"); } // --------------------------------------------------------------------------- TEST(crs, EPSG_4978_as_WKT1_GDAL_with_database) { auto crs = GeodeticCRS::EPSG_4978; auto wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, DatabaseContext::create()) .get()); EXPECT_EQ(wkt, "GEOCCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Geocentric X\",OTHER],\n" " AXIS[\"Geocentric Y\",OTHER],\n" " AXIS[\"Geocentric Z\",NORTH],\n" " AUTHORITY[\"EPSG\",\"4978\"]]"); } // --------------------------------------------------------------------------- TEST(crs, geocentricCRS_as_PROJ_string) { auto crs = createGeocentric(); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=geocent +datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, geocentricCRS_non_meter_unit_as_PROJ_string) { auto crs = GeodeticCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric( UnitOfMeasure("kilometre", 1000.0, UnitOfMeasure::Type::LINEAR))); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, crs); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart " "+ellps=WGS84 +step +proj=unitconvert +xy_in=m +z_in=m " "+xy_out=km +z_out=km"); EXPECT_THROW(crs->exportToPROJString(PROJStringFormatter::create().get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, geocentricCRS_unsupported_unit_as_PROJ_string) { auto crs = GeodeticCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric( UnitOfMeasure("my unit", 500.0, UnitOfMeasure::Type::LINEAR))); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, crs); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart " "+ellps=WGS84 +step +proj=unitconvert +xy_in=m +z_in=m " "+xy_out=500 +z_out=500"); } // --------------------------------------------------------------------------- TEST(crs, geodeticcrs_identify_no_db) { { auto res = GeodeticCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, nullptr, CartesianCS::createGeocentric(UnitOfMeasure::METRE)) ->identify(nullptr); ASSERT_EQ(res.size(), 0U); } { auto res = GeographicCRS::EPSG_4326->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 100); } { // Using virtual method auto res = static_cast(GeographicCRS::EPSG_4326.get()) ->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 100); } { auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS 84"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 100); } { auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS84"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 90); } { // Long Lat order auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS 84"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLongitudeLatitude(UnitOfMeasure::DEGREE)) ->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 25); } { // WKT1 identification auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT( "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\"," "6378137,298.257223563]],PRIMEM[\"Greenwich\",0]," "UNIT[\"Degree\",0.0174532925199433]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 100); } } // --------------------------------------------------------------------------- TEST(crs, geodeticcrs_identify_db) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); { // No match auto res = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::create( PropertyMap(), Ellipsoid::createFlattenedSphere( PropertyMap(), Length(6378137), Scale(10)), optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(nullptr); ASSERT_EQ(res.size(), 0U); } { // Identify by datum code auto res = GeodeticCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, nullptr, CartesianCS::createGeocentric(UnitOfMeasure::METRE)) ->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4978); EXPECT_EQ(res.front().second, 70); } { // Identify by datum code auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 70); } { // Identify by datum code (as a fallback) auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "foobar"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 70); } { // Perfect match, and ID available. Hardcoded case auto res = GeographicCRS::EPSG_4326->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 100); } { // Perfect match, but no ID available. Hardcoded case auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS 84"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first.get(), GeographicCRS::EPSG_4326.get()); EXPECT_EQ(res.front().second, 100); } { // Perfect match, but no ID available auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "NTF (Paris)"), GeographicCRS::EPSG_4807->datum(), nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::GRAD)) ->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4807); EXPECT_EQ(res.front().second, 100); } { // Perfect match, and ID available auto res = GeographicCRS::EPSG_4807->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4807); EXPECT_EQ(res.front().second, 100); } { // The object has an unexisting ID auto res = GeographicCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "NTF (Paris)") .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 1), GeographicCRS::EPSG_4807->datum(), nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::GRAD)) ->identify(factory); ASSERT_EQ(res.size(), 0U); } { // The object has a unreliable ID auto res = GeographicCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "NTF (Paris)") .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 4326), GeographicCRS::EPSG_4807->datum(), nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::GRAD)) ->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 25); } { // Approximate match by name auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS84"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 90); } { // Long Lat order auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS 84"), GeodeticReferenceFrame::EPSG_6326, nullptr, EllipsoidalCS::createLongitudeLatitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_EQ(res.size(), 3U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 25); } { // Identify by ellipsoid code auto res = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::create(PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_GT(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 60.0); } { // Identify by ellipsoid code (as a fallback) auto res = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), GeodeticReferenceFrame::create(PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_GT(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 60.0); } { // Identify by ellipsoid description auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=6378521.049 +rf=298.257222100883 +axis=neu " "+type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); EXPECT_EQ(res.size(), 5U); } { // Identify by name, without any code auto wkt = "GEODCRS[\"GCS_Datum_Lisboa_Bessel\",\n" " DATUM[\"D_Datum_Lisboa_Bessel\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_EQ(res.size(), 1U); ASSERT_TRUE(!res.front().first->identifiers().empty()); EXPECT_EQ(*res.front().first->identifiers()[0]->codeSpace(), "ESRI"); EXPECT_EQ(res.front().first->identifiers()[0]->code(), "104105"); EXPECT_EQ(res.front().second, 100); } { // Identification by non-existing code auto res = GeographicCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "foobar") .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, "i_dont_exist"), GeodeticReferenceFrame::create( PropertyMap(), Ellipsoid::createFlattenedSphere( PropertyMap(), Length(6378137), Scale(10)), optional(), PrimeMeridian::GREENWICH), nullptr, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)) ->identify(factory); ASSERT_EQ(res.size(), 0U); } { // Test identification from PROJ string auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); ASSERT_TRUE(!res.front().first->identifiers().empty()); EXPECT_EQ(*res.front().first->identifiers()[0]->codeSpace(), "EPSG"); EXPECT_EQ(res.front().first->identifiers()[0]->code(), "4326"); EXPECT_EQ(res.front().second, 70); } { // Test identification from PROJ string with just the ellipsoid auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); bool foundGDA2020 = false; for (const auto &pair : res) { // one among many others... if (pair.first->getEPSGCode() == 7844) { foundGDA2020 = true; EXPECT_EQ(pair.second, 60); } } EXPECT_TRUE(foundGDA2020); } { // Identify by code, but datum name is an alias of the official one auto wkt = "GEOGCRS[\"GDA2020\",\n" " DATUM[\"GDA2020\",\n" " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",7844]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_EQ(res.size(), 1U); ASSERT_TRUE(!res.front().first->identifiers().empty()); EXPECT_EQ(*res.front().first->identifiers()[0]->codeSpace(), "EPSG"); EXPECT_EQ(res.front().first->identifiers()[0]->code(), "7844"); EXPECT_EQ(res.front().second, 100); EXPECT_TRUE(crs->_isEquivalentTo(res.front().first.get(), IComparable::Criterion::EQUIVALENT, dbContext)); EXPECT_TRUE(res.front().first->_isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT, dbContext)); } { // Identify by name, but datum name is an alias of the official one auto wkt = "GEOGCRS[\"GDA2020\",\n" " DATUM[\"GDA2020\",\n" " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_EQ(res.size(), 1U); ASSERT_TRUE(!res.front().first->identifiers().empty()); EXPECT_EQ(*res.front().first->identifiers()[0]->codeSpace(), "EPSG"); EXPECT_EQ(res.front().first->identifiers()[0]->code(), "7844"); EXPECT_EQ(res.front().second, 100); EXPECT_TRUE(crs->_isEquivalentTo(res.front().first.get(), IComparable::Criterion::EQUIVALENT, dbContext)); EXPECT_TRUE(res.front().first->_isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT, dbContext)); } { // Identify "a" ESRI WKT representation of GDA2020. See #1911 auto wkt = "GEOGCS[\"GDA2020\",DATUM[\"D_GDA2020\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.017453292519943295]]"; auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_EQ(res.size(), 1U); ASSERT_TRUE(!res.front().first->identifiers().empty()); EXPECT_EQ(*res.front().first->identifiers()[0]->codeSpace(), "EPSG"); EXPECT_EQ(res.front().first->identifiers()[0]->code(), "7844"); EXPECT_EQ(res.front().second, 100); } { // Identify with DatumEnsemble auto wkt = "GEOGCRS[\"WGS 84\"," " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," " MEMBER[\"World Geodetic System 1984 (Transit)\"," " ID[\"EPSG\",1166]]," " MEMBER[\"World Geodetic System 1984 (G730)\"," " ID[\"EPSG\",1152]]," " MEMBER[\"World Geodetic System 1984 (G873)\"," " ID[\"EPSG\",1153]]," " MEMBER[\"World Geodetic System 1984 (G1150)\"," " ID[\"EPSG\",1154]]," " MEMBER[\"World Geodetic System 1984 (G1674)\"," " ID[\"EPSG\",1155]]," " MEMBER[\"World Geodetic System 1984 (G1762)\"," " ID[\"EPSG\",1156]]," " ELLIPSOID[\"WGS 84\",6378137,298.257223563," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]," " ID[\"EPSG\",7030]]," " ENSEMBLEACCURACY[2]]," " PRIMEM[\"Greenwich\",0," " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]," " ID[\"EPSG\",8901]]," " CS[ellipsoidal,2," " ID[\"EPSG\",6422]]," " AXIS[\"Geodetic latitude (Lat)\",north," " ORDER[1]]," " AXIS[\"Geodetic longitude (Lon)\",east," " ORDER[2]]," " ANGLEUNIT[\"degree (supplier to define representation)\"," "0.0174532925199433,ID[\"EPSG\",9122]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 100.0); } { // Identify with DatumEnsemble and unknown CRS name auto wkt = "GEOGCRS[\"unknown\"," " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," " MEMBER[\"World Geodetic System 1984 (Transit)\"," " ID[\"EPSG\",1166]]," " MEMBER[\"World Geodetic System 1984 (G730)\"," " ID[\"EPSG\",1152]]," " MEMBER[\"World Geodetic System 1984 (G873)\"," " ID[\"EPSG\",1153]]," " MEMBER[\"World Geodetic System 1984 (G1150)\"," " ID[\"EPSG\",1154]]," " MEMBER[\"World Geodetic System 1984 (G1674)\"," " ID[\"EPSG\",1155]]," " MEMBER[\"World Geodetic System 1984 (G1762)\"," " ID[\"EPSG\",1156]]," " ELLIPSOID[\"WGS 84\",6378137,298.257223563," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]," " ID[\"EPSG\",7030]]," " ENSEMBLEACCURACY[2]]," " PRIMEM[\"Greenwich\",0," " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]," " ID[\"EPSG\",8901]]," " CS[ellipsoidal,2," " ID[\"EPSG\",6422]]," " AXIS[\"Geodetic latitude (Lat)\",north," " ORDER[1]]," " AXIS[\"Geodetic longitude (Lon)\",east," " ORDER[2]]," " ANGLEUNIT[\"degree (supplier to define representation)\"," "0.0174532925199433,ID[\"EPSG\",9122]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 4326); EXPECT_EQ(res.front().second, 70.0); } } // --------------------------------------------------------------------------- static ProjectedCRSNNPtr createProjected() { PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 32631) .set(IdentifiedObject::NAME_KEY, "WGS 84 / UTM zone 31N"); return ProjectedCRS::create( propertiesCRS, GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_derivingConversion) { auto crs = createProjected(); auto conv = crs->derivingConversion(); EXPECT_TRUE(conv->sourceCRS() != nullptr); ASSERT_TRUE(conv->targetCRS() != nullptr); EXPECT_EQ(conv->targetCRS().get(), crs.get()); // derivingConversion() returns a copy of the internal conversion auto targetCRSAsProjCRS = std::dynamic_pointer_cast(conv->targetCRS()); ASSERT_TRUE(targetCRSAsProjCRS != nullptr); EXPECT_NE(targetCRSAsProjCRS->derivingConversion(), conv); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_shallowClone) { { auto crs = createProjected(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); auto clone = nn_dynamic_pointer_cast(crs->shallowClone()); EXPECT_TRUE(clone->isEquivalentTo(crs.get())); EXPECT_EQ(clone->derivingConversion()->targetCRS().get(), clone.get()); } { ProjectedCRSPtr clone; { auto crs = ProjectedCRS::create( PropertyMap(), createGeocentric(), Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); clone = nn_dynamic_pointer_cast(crs->shallowClone()); } EXPECT_EQ(clone->baseCRS()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=geocent +datum=WGS84 +units=m +no_defs +type=crs"); } } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_as_WKT2) { auto crs = createProjected(); auto expected = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32631]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_as_WKT2_2019) { auto crs = createProjected(); auto expected = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32631]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_as_WKT2_simplified) { auto crs = createProjected(); auto expected = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\"],\n" " PARAMETER[\"Latitude of natural origin\",0],\n" " PARAMETER[\"Longitude of natural origin\",3],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996],\n" " PARAMETER[\"False easting\",500000],\n" " PARAMETER[\"False northing\",0]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1],\n" " ID[\"EPSG\",32631]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create( WKTFormatter::Convention::WKT2_SIMPLIFIED) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_as_WKT2_2019_simplified) { auto crs = createProjected(); auto expected = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\"],\n" " PARAMETER[\"Latitude of natural origin\",0],\n" " PARAMETER[\"Longitude of natural origin\",3],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996],\n" " PARAMETER[\"False easting\",500000],\n" " PARAMETER[\"False northing\",0]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1],\n" " ID[\"EPSG\",32631]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019_SIMPLIFIED) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_as_WKT1_GDAL) { auto crs = createProjected(); auto expected = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), expected); EXPECT_EQ(crs->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) ->setOutputAxis(WKTFormatter::OutputAxisRule::YES))), expected); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_as_WKT1_ESRI) { auto crs = createProjected(); auto expected = "PROJCS[\"WGS_1984_UTM_Zone_31N\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0," "298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",500000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",3.0]," "PARAMETER[\"Scale_Factor\",0.9996]," "PARAMETER[\"Latitude_Of_Origin\",0.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_3D_as_WKT1_GDAL_with_ellipsoidal_height_as_vertical_crs) { auto dbContext = DatabaseContext::create(); auto crs = AuthorityFactory::create(dbContext, "EPSG") ->createProjectedCRS("32631") ->promoteTo3D(std::string(), dbContext); auto wkt = crs->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext) ->setAllowEllipsoidalHeightAsVerticalCRS(true))); // For LAS 1.4 WKT1... EXPECT_EQ(wkt, "COMPD_CS[\"WGS 84 / UTM zone 31N + Ellipsoid (metre)\",\n" " PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]],\n" " VERT_CS[\"Ellipsoid (metre)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Ellipsoidal height\",UP]]]"); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_with_other_deprecated_crs_of_same_name_as_WKT1_ESRI) { auto dbContext = DatabaseContext::create(); // EPSG:3800 is the non-deprecated version of EPSG:3774 // This used to cause an issue when looking for the ESRI CRS name auto crs = AuthorityFactory::create(dbContext, "EPSG")->createProjectedCRS("3800"); auto esri_wkt = "PROJCS[\"NAD_1927_3TM_120\",GEOGCS[\"GCS_North_American_1927\"," "DATUM[\"D_North_American_1927\"," "SPHEROID[\"Clarke_1866\",6378206.4,294.978698213898]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",-120.0]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Latitude_Of_Origin\",0.0],UNIT[\"Meter\",1.0]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), esri_wkt); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(esri_wkt); auto crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); EXPECT_EQ(crs2->nameStr(), "NAD27 / Alberta 3TM ref merid 120 W"); EXPECT_EQ( crs2->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), esri_wkt); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_with_ESRI_code_as_WKT1_ESRI) { auto dbContext = DatabaseContext::create(); auto crs = AuthorityFactory::create(dbContext, "ESRI") ->createProjectedCRS("102113"); // Comes literally from the text_definition column of // projected_crs table auto esri_wkt = "PROJCS[\"WGS_1984_Web_Mercator\"," "GEOGCS[\"GCS_WGS_1984_Major_Auxiliary_Sphere\"," "DATUM[\"D_WGS_1984_Major_Auxiliary_Sphere\"," "SPHEROID[\"WGS_1984_Major_Auxiliary_Sphere\",6378137.0,0.0]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Mercator\"],PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",0.0],UNIT[\"Meter\",1.0]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), esri_wkt); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_from_WKT1_ESRI_as_WKT1_ESRI) { auto dbContext = DatabaseContext::create(); // Comes literally from the text_definition column of // projected_crs table auto esri_wkt = "PROJCS[\"WGS_1984_Web_Mercator\"," "GEOGCS[\"GCS_WGS_1984_Major_Auxiliary_Sphere\"," "DATUM[\"D_WGS_1984_Major_Auxiliary_Sphere\"," "SPHEROID[\"WGS_1984_Major_Auxiliary_Sphere\",6378137.0,0.0]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Mercator\"],PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",0.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(esri_wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), esri_wkt); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_from_WKT1_ESRI_as_WKT1_ESRI_s_jtsk03_krovak_east_north) { // EPSG:8353 auto wkt = "PROJCS[\"S-JTSK_[JTSK03]_Krovak_East_North\"," "GEOGCS[\"S-JTSK_[JTSK03]\",DATUM[\"S-JTSK_[JTSK03]\"," "SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Krovak\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Pseudo_Standard_Parallel_1\",78.5]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Azimuth\",30.2881397527778]," "PARAMETER[\"Longitude_Of_Center\",24.8333333333333]," "PARAMETER[\"Latitude_Of_Center\",49.5]," "PARAMETER[\"X_Scale\",-1.0]," "PARAMETER[\"Y_Scale\",1.0]," "PARAMETER[\"XY_Plane_Rotation\",90.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected_wkt2 = "PROJCRS[\"S-JTSK [JTSK03] / Krovak East North\",\n" " BASEGEOGCRS[\"S-JTSK [JTSK03]\",\n" " DATUM[\"System of the Unified Trigonometrical Cadastral " "Network [JTSK03]\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",1201]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Krovak (North Orientated)\",\n" " ID[\"EPSG\",1041]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",24.8333333333333,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard " "parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext) .get()), expected_wkt2); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_from_EPSG_as_WKT1_ESRI_s_jtsk03_krovak_east_north) { auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto crs = factoryEPSG->createProjectedCRS("8353"); auto wkt = "PROJCS[\"S-JTSK_[JTSK03]_Krovak_East_North\"," "GEOGCS[\"S-JTSK_[JTSK03]\",DATUM[\"S-JTSK_[JTSK03]\"," "SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Krovak\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Pseudo_Standard_Parallel_1\",78.5]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Azimuth\",30.2881397527778]," "PARAMETER[\"Longitude_Of_Center\",24.8333333333333]," "PARAMETER[\"Latitude_Of_Center\",49.5]," "PARAMETER[\"X_Scale\",-1.0]," "PARAMETER[\"Y_Scale\",1.0]," "PARAMETER[\"XY_Plane_Rotation\",90.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_from_EPSG_with_deprecated_ESRI_name_as_WKT1_ESRI) { auto dbContext = DatabaseContext::create(); auto crs = AuthorityFactory::create(dbContext, "EPSG")->createProjectedCRS("5186"); // Check we use the non-deprecated ESRI names, so: // "KGD2002_Central_Belt_2010" and not "Korea_2000_Korea_Central_Belt_2010" // "GCS_KGD2002" and not "GCS_Korea_2000" // "D_Korea_Geodetic_Datum_2002" and not "D_Korea_2000" auto esri_wkt = "PROJCS[\"KGD2002_Central_Belt_2010\",GEOGCS[\"GCS_KGD2002\"," "DATUM[\"D_Korea_Geodetic_Datum_2002\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",200000.0]," "PARAMETER[\"False_Northing\",600000.0]," "PARAMETER[\"Central_Meridian\",127.0]," "PARAMETER[\"Scale_Factor\",1.0]," "PARAMETER[\"Latitude_Of_Origin\",38.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), esri_wkt); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_as_PROJ_string) { auto crs = createProjected(); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, crs); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=utm " "+zone=31 +ellps=WGS84"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_3D_is_WKT1_equivalent_to_WKT2) { auto dbContext = DatabaseContext::create(); // "Illegal" WKT1 with a Projected 3D CRS auto wkt1 = "PROJCS[\"WGS 84 / UTM zone 16N [EGM08-1]\"," "GEOGCS[\"WGS 84 / UTM zone 16N [EGM08-1]\"," "DATUM[\"WGS84\",SPHEROID[\"WGS84\",6378137.000,298.257223563," "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0.0000000000000000," "AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"Degree\",0.01745329251994329547," "AUTHORITY[\"EPSG\",\"9102\"]],AUTHORITY[\"EPSG\",\"32616\"]]," "UNIT[\"Meter\",1.00000000000000000000," "AUTHORITY[\"EPSG\",\"9001\"]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"latitude_of_origin\",0.0000000000000000]," "PARAMETER[\"central_meridian\",-87.0000000002777938]," "PARAMETER[\"scale_factor\",0.9996000000000000]," "PARAMETER[\"false_easting\",500000.000]," "PARAMETER[\"false_northing\",0.000]," "AXIS[\"Easting\",EAST]," "AXIS[\"Northing\",NORTH]," "AXIS[\"Height\",UP]," "AUTHORITY[\"EPSG\",\"32616\"]]"; auto obj = WKTParser() .setStrict(false) .attachDatabaseContext(dbContext) .createFromWKT(wkt1); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); auto wkt2 = crs->exportToWKT(f.get()); auto obj2 = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt2); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); EXPECT_TRUE(crs->isEquivalentTo( crs2.get(), IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_Krovak_EPSG_5221_as_PROJ_string) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createProjectedCRS("5221"); // 30deg 17' 17.30311'' = 30.28813975277777776 auto op = CoordinateOperationFactory::create()->createOperation( crs->baseCRS(), crs); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=longlat +ellps=bessel +pm=ferro " "+step +proj=krovak +lat_0=49.5 +lon_0=42.5 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 " "+ellps=bessel +pm=ferro"); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_Krovak_with_approximate_alpha_as_PROJ_string) { // 30deg 17' 17.303'' = 30.288139722222223 as used in GDAL WKT1 auto obj = PROJStringParser().createFromPROJString( "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 " "+k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs " "+type=crs"); auto crs = nn_dynamic_pointer_cast(obj); auto op = CoordinateOperationFactory::create()->createOperation( crs->baseCRS(), NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=longlat +ellps=bessel +pm=ferro " "+step +proj=krovak +lat_0=49.5 +lon_0=42.5 " "+alpha=30.2881397222222 +k=0.9999 +x_0=0 +y_0=0 " "+ellps=bessel +pm=ferro"); } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_identify_no_db) { { // Hard-coded case: WGS 84 / UTM. No name auto res = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 1, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)) ->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 32601); EXPECT_EQ(res.front().second, 70); EXPECT_TRUE(res.front().first->isEquivalentTo( AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createProjectedCRS("32601") .get(), IComparable::Criterion::EQUIVALENT)); } { // Hard-coded case: WGS 84 / UTM (south). Exact name. // Using virtual method auto crs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS 84 / UTM zone 60S"), GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 60, false), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto res = static_cast(crs.get())->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 32760); EXPECT_EQ(res.front().second, 100); EXPECT_TRUE(res.front().first->isEquivalentTo( AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createProjectedCRS("32760") .get(), IComparable::Criterion::EQUIVALENT)); } { // Hard-coded case: NAD27 / UTM. Approximate name. auto res = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "NAD27_UTM_zone_11N"), GeographicCRS::EPSG_4267, Conversion::createUTM(PropertyMap(), 11, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)) ->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 26711); EXPECT_EQ(res.front().second, 90); EXPECT_TRUE(res.front().first->isEquivalentTo( AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createProjectedCRS("26711") .get(), IComparable::Criterion::EQUIVALENT)); } { // Hard-coded case: NAD83 / UTM auto res = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4269, Conversion::createUTM(PropertyMap(), 11, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)) ->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 26911); EXPECT_EQ(res.front().second, 70); EXPECT_TRUE(res.front().first->isEquivalentTo( AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createProjectedCRS("26911") .get(), IComparable::Criterion::EQUIVALENT)); } { // Tolerance on axis order auto obj = PROJStringParser().createFromPROJString( "+proj=utm +zone=31 +datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(nullptr); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 32631); EXPECT_EQ(res.front().second, 70); EXPECT_TRUE(res.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)); } } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_identify_db) { auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto factoryIGNF = AuthorityFactory::create(dbContext, "IGNF"); auto factoryAnonymous = AuthorityFactory::create(dbContext, std::string()); { // Identify by existing code auto crs = factoryEPSG->createProjectedCRS("2172"); { auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2172); EXPECT_EQ(res.front().second, 100); } { auto res = crs->identify(factoryAnonymous); ASSERT_EQ(res.size(), 1U); } { auto res = crs->identify(factoryIGNF); ASSERT_EQ(res.size(), 0U); } } { // Identify by existing code auto crs = factoryIGNF->createProjectedCRS("ETRS89UTM28"); { auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 25828); EXPECT_EQ(res.front().second, 70); } } { // Non-existing code auto sourceCRS = factoryEPSG->createProjectedCRS("2172"); auto crs = ProjectedCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "Pulkovo 1942(58) / Poland zone II") .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 1), sourceCRS->baseCRS(), sourceCRS->derivingConversion(), sourceCRS->coordinateSystem()); auto res = crs->identify(factoryEPSG); EXPECT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2172); EXPECT_EQ(res.front().second, 70); } { // Existing code, but not matching content auto sourceCRS = factoryEPSG->createProjectedCRS("2172"); auto crs = ProjectedCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "Pulkovo 1942(58) / Poland zone II") .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 32631), sourceCRS->baseCRS(), sourceCRS->derivingConversion(), sourceCRS->coordinateSystem()); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2172); EXPECT_EQ(res.front().second, 70); } { // Identify by exact name auto sourceCRS = factoryEPSG->createProjectedCRS("2172"); auto crs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Pulkovo 1942(58) / Poland zone II"), sourceCRS->baseCRS(), sourceCRS->derivingConversion(), sourceCRS->coordinateSystem()); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2172); EXPECT_EQ(res.front().second, 100); } { // Identify by equivalent name auto sourceCRS = factoryEPSG->createProjectedCRS("2172"); auto crs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Pulkovo_1942_58_Poland_zone_II"), sourceCRS->baseCRS(), sourceCRS->derivingConversion(), sourceCRS->coordinateSystem()); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2172); EXPECT_EQ(res.front().second, 90); } { // Identify by properties auto sourceCRS = factoryEPSG->createProjectedCRS("2172"); auto crs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "i am a faked name"), sourceCRS->baseCRS(), sourceCRS->derivingConversion(), sourceCRS->coordinateSystem()); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2172); EXPECT_EQ(res.front().second, 70); } { // Identify by name, but objects aren't equivalent auto sourceCRS = factoryEPSG->createProjectedCRS("3375"); auto crs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Pulkovo 1942(58) / Poland zone II"), sourceCRS->baseCRS(), sourceCRS->derivingConversion(), sourceCRS->coordinateSystem()); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2172); EXPECT_EQ(res.front().second, 25); } { // Identify from a PROJ string auto obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=omerc " "+no_uoff +lat_0=4 +lonc=102.25 +alpha=323.025796466667 " "+gamma=323.130102361111 +k=0.99984 +x_0=804671 +y_0=0 " "+ellps=GRS80"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3375); EXPECT_EQ(res.front().second, 70); } { // Identify from a PROJ string (with "wrong" axis order for the geodetic // part) auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +no_uoff +lat_0=4 +lonc=102.25 " "+alpha=323.025796466667 +gamma=323.130102361111 +k=0.99984 " "+x_0=804671 +y_0=0 +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3375); EXPECT_EQ(res.front().second, 70); } { // Identify from a WKT1 string with explicit correct axis order auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"ETRS89 / UTM zone 32N (N-E)\",GEOGCS[\"ETRS89\"," "DATUM[\"European_Terrestrial_Reference_System_1989\"," "SPHEROID[\"GRS 1980\",6378137,298.257222101]]," "PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"latitude_of_origin\",0]," "PARAMETER[\"central_meridian\",9]," "PARAMETER[\"scale_factor\",0.9996]," "PARAMETER[\"false_easting\",500000]," "PARAMETER[\"false_northing\",0]," "UNIT[\"metre\",1]," "AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3044); EXPECT_EQ(res.front().second, 100); } { // Identify from a WKT1 string with wrong axis order auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"ETRS89 / UTM zone 32N (N-E)\",GEOGCS[\"ETRS89\"," "DATUM[\"European_Terrestrial_Reference_System_1989\"," "SPHEROID[\"GRS 1980\",6378137,298.257222101]]," "PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"latitude_of_origin\",0]," "PARAMETER[\"central_meridian\",9]," "PARAMETER[\"scale_factor\",0.9996]," "PARAMETER[\"false_easting\",500000]," "PARAMETER[\"false_northing\",0]," "UNIT[\"metre\",1]," "AXIS[\"Easting\",EAST], AXIS[\"Northing\",NORTH]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3044); EXPECT_EQ(res.front().second, 50); } { // Identify from a WKT1 string, without explicit axis auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"ETRS89 / UTM zone 32N (N-E)\",GEOGCS[\"ETRS89\"," "DATUM[\"European_Terrestrial_Reference_System_1989\"," "SPHEROID[\"GRS 1980\",6378137,298.257222101]]," "PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"latitude_of_origin\",0]," "PARAMETER[\"central_meridian\",9]," "PARAMETER[\"scale_factor\",0.9996]," "PARAMETER[\"false_easting\",500000]," "PARAMETER[\"false_northing\",0]," "UNIT[\"metre\",1]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3044); EXPECT_EQ(res.front().second, 100); } { // Identify from a WKT ESRI with bad PROJCS and GEOGCS names. auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"Lambert Conformal Conic\",GEOGCS[\"grs80\"," "DATUM[\"D_North_American_1983\"," "SPHEROID[\"Geodetic_Reference_System_1980\"," "6378137,298.257222101]],PRIMEM[\"Greenwich\",0]," "UNIT[\"Degree\",0.017453292519943295]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"standard_parallel_1\",34.33333333333334]," "PARAMETER[\"standard_parallel_2\",36.16666666666666]," "PARAMETER[\"latitude_of_origin\",33.75]," "PARAMETER[\"central_meridian\",-79]," "PARAMETER[\"false_easting\",609601.22]," "PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 32119); EXPECT_EQ(res.front().second, 70); } { // No equivalent CRS to input one in result set auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 0U); } { // ESRI:103729 definition as a PROJ string auto obj = PROJStringParser() .attachDatabaseContext(dbContext) .createFromPROJString( "+proj=lcc +lat_0=43.5 +lon_0=-93.95 " "+lat_1=43.5666666666667 " "+lat_2=43.8 +x_0=152400.30480061 +y_0=30480.0609601219 " "+a=6378521.049 +rf=298.257222100883 +units=us-ft " "+type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); EXPECT_GE(res.size(), 1U); bool found = false; for (const auto &pair : res) { if (pair.first->identifiers()[0]->code() == "103729") { found = true; EXPECT_EQ(pair.second, 70); break; } } EXPECT_TRUE(found); } { // EPSG:2327 as PROJ.4 string (so with easting, northing order whereas // official CRS is northing, easting) auto obj = PROJStringParser() .attachDatabaseContext(dbContext) .createFromPROJString( "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 " "+a=6378140 +b=6356755.288157528 +units=m +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); EXPECT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2327); EXPECT_EQ(res.front().second, 70); } { // EPSG:6646 as PROJ.4 string, using clrk80 which is pretty generic auto obj = PROJStringParser() .attachDatabaseContext(dbContext) .createFromPROJString( "+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 " "+k=0.9994 +x_0=800000 +y_0=0 +ellps=clrk80 " "+units=m +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); EXPECT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 6646); EXPECT_EQ(res.front().second, 70); } { // Identify from a WKT ESRI that has the same name has ESRI:102039 // but uses us-ft instead of metres! auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"USA_Contiguous_Albers_Equal_Area_Conic_USGS_version\"," "GEOGCS[\"GCS_North_American_1983\"," "DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_1980\"," "6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Albers\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",-96.0]," "PARAMETER[\"Standard_Parallel_1\",29.5]," "PARAMETER[\"Standard_Parallel_2\",45.5]," "PARAMETER[\"Latitude_Of_Origin\",23.0]," "UNIT[\"Foot_US\",0.3048006096012192]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); EXPECT_GE(res.size(), 1U); bool found = false; for (const auto &pair : res) { if (pair.first->identifiers()[0]->code() == "102039") { found = true; EXPECT_EQ(pair.second, 50); break; } } EXPECT_TRUE(found); } { // Identify a ESRI WKT where the EPSG system has Northing/Easting order auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"NZGD2000_New_Zealand_Transverse_Mercator_2000\"," " GEOGCS[\"GCS_NZGD2000\"," " DATUM[\"New_Zealand_Geodetic_Datum_2000\"," " SPHEROID[\"GRS 1980\",6378137,298.2572221010042," " AUTHORITY[\"EPSG\",\"7019\"]]," " AUTHORITY[\"EPSG\",\"6167\"]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"degree\",0.0174532925199433]]," " PROJECTION[\"Transverse_Mercator\"]," " PARAMETER[\"latitude_of_origin\",0]," " PARAMETER[\"central_meridian\",173]," " PARAMETER[\"scale_factor\",0.9996]," " PARAMETER[\"false_easting\",1600000]," " PARAMETER[\"false_northing\",10000000]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2193); EXPECT_EQ(res.front().second, 90); } { // Special case for https://github.com/OSGeo/PROJ/issues/2086 // The name of the CRS to identify is // NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501 // whereas it should be // NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501_Feet auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"NAD_1983_HARN_StatePlane_Colorado_North_FIPS_0501\"," "GEOGCS[\"GCS_North_American_1983_HARN\"," "DATUM[\"D_North_American_1983_HARN\",SPHEROID[\"GRS_1980\"," "6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",3000000.000316083]," "PARAMETER[\"False_Northing\",999999.999996]," "PARAMETER[\"Central_Meridian\",-105.5]," "PARAMETER[\"Standard_Parallel_1\",39.71666666666667]," "PARAMETER[\"Standard_Parallel_2\",40.78333333333333]," "PARAMETER[\"Latitude_Of_Origin\",39.33333333333334]," "UNIT[\"Foot_US\",0.3048006096012192]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2876); EXPECT_EQ(res.front().second, 100); } { // Test case of https://github.com/OSGeo/PROJ/issues/2099 // The name of the CRS to identify is // JGD2011_Japan_Zone_2 // whereas the official ESRI alias is // JGD_2011_Japan_Zone_2 auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"JGD2011_Japan_Zone_2\",GEOGCS[\"GCS_JGD_2011\"," "DATUM[\"D_JGD_2011\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",131]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Latitude_Of_Origin\",33],UNIT[\"Meter\",1.0]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 6670); EXPECT_EQ(res.front().second, 90); } { // Test case of https://github.com/OSGeo/PROJ/issues/2116 // The NAD_1983_CSRS_Prince_Edward_Island has entries in the alias // table under the ESRI authority for deprecated EPSG:2292 and // non-deprecated EPSG:2954 auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"NAD_1983_CSRS_Prince_Edward_Island\"," "GEOGCS[\"GCS_North_American_1983_CSRS\"," "DATUM[\"D_North_American_1983_CSRS\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Double_Stereographic\"]," "PARAMETER[\"False_Easting\",400000.0]," "PARAMETER[\"False_Northing\",800000.0]," "PARAMETER[\"Central_Meridian\",-63.0]," "PARAMETER[\"Scale_Factor\",0.999912]," "PARAMETER[\"Latitude_Of_Origin\",47.25],UNIT[\"Meter\",1.0]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2954); EXPECT_EQ(res.front().second, 100); } { // Test identification of LCC_2SP with switched standard parallels. auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"foo\",\n" " GEOGCS[\"RGF93\",\n" " DATUM[\"Reseau_Geodesique_Francais_1993\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Lambert_Conformal_Conic_2SP\"],\n" " PARAMETER[\"latitude_of_origin\",46.5],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"standard_parallel_1\",44],\n" " PARAMETER[\"standard_parallel_2\",49],\n" " PARAMETER[\"false_easting\",700000],\n" " PARAMETER[\"false_northing\",6600000],\n" " UNIT[\"metre\",1]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2154); EXPECT_EQ(res.front().second, 70); } { // Test identification of LKS92_Latvia_TM (#2214) auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"LKS92_Latvia_TM\",GEOGCS[\"GCS_LKS92\"," "DATUM[\"D_Latvia_1992\"," "SPHEROID[\"GRS_1980\",6378137,298.257222101]]," "PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"latitude_of_origin\",0]," "PARAMETER[\"central_meridian\",24]," "PARAMETER[\"scale_factor\",0.9996]," "PARAMETER[\"false_easting\",500000]," "PARAMETER[\"false_northing\",-6000000]," "UNIT[\"Meter\",1]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3059); EXPECT_EQ(res.front().second, 90); } { // Test identification of CRS where everything but datum names matches auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"WGS_1984_UTM_Zone_31N\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"wrong_datum_name\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",500000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",3.0]," "PARAMETER[\"Scale_Factor\",0.9996]," "PARAMETER[\"Latitude_Of_Origin\",0.0]," "UNIT[\"Meter\",1.0]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 32631); EXPECT_EQ(res.front().second, 60); } { // Test case of https://github.com/qgis/QGIS/issues/36111 // The name of the CRS to identify is // ETRS89_LAEA_Europe // We identify it through a registered EPSG alias "ETRS89 / LAEA Europe" auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"ETRS89_LAEA_Europe\"," "GEOGCS[\"GCS_ETRS_1989\",DATUM[\"D_ETRS_1989\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Azimuthal_Equal_Area\"]," "PARAMETER[\"false_easting\",4321000.0]," "PARAMETER[\"false_northing\",3210000.0]," "PARAMETER[\"central_meridian\",10.0]," "PARAMETER[\"latitude_of_origin\",52.0]," "UNIT[\"Meter\",1.0]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3035); EXPECT_EQ(res.front().second, 90); } { // Test case of https://github.com/qgis/QGIS/issues/32255 auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"RGF93_Lambert_93\",GEOGCS[\"GCS_RGF_1993\"," "DATUM[\"D_RGF_1993\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",700000.0]," "PARAMETER[\"False_Northing\",6600000.0]," "PARAMETER[\"Central_Meridian\",3.0]," "PARAMETER[\"Standard_Parallel_1\",44.0]," "PARAMETER[\"Standard_Parallel_2\",49.0]," "PARAMETER[\"Latitude_Of_Origin\",46.5],UNIT[\"Meter\",1.0]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); bool found = false; for (const auto &candidate : res) { if (candidate.first->getEPSGCode() == 2154) { found = true; EXPECT_EQ(candidate.second, 90); } } EXPECT_TRUE(found); } { // Identify with DatumEnsemble auto wkt = "PROJCRS[\"WGS 84 / UTM zone 31N\"," " BASEGEOGCRS[\"WGS 84\"," " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," " MEMBER[\"World Geodetic System 1984 (Transit)\"," " ID[\"EPSG\",1166]]," " MEMBER[\"World Geodetic System 1984 (G730)\"," " ID[\"EPSG\",1152]]," " MEMBER[\"World Geodetic System 1984 (G873)\"," " ID[\"EPSG\",1153]]," " MEMBER[\"World Geodetic System 1984 (G1150)\"," " ID[\"EPSG\",1154]]," " MEMBER[\"World Geodetic System 1984 (G1674)\"," " ID[\"EPSG\",1155]]," " MEMBER[\"World Geodetic System 1984 (G1762)\"," " ID[\"EPSG\",1156]]," " ELLIPSOID[\"WGS 84\",6378137,298.257223563," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," " ENSEMBLEACCURACY[2]]]," " CONVERSION[\"UTM zone 31N\"," " METHOD[\"Transverse Mercator\"," " ID[\"EPSG\",9807]]," " PARAMETER[\"Latitude of natural origin\",0," " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," " PARAMETER[\"Longitude of natural origin\",3," " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," " PARAMETER[\"Scale factor at natural origin\",0.9996," " SCALEUNIT[\"unity\",1,ID[\"EPSG\",9201]]]," " PARAMETER[\"False easting\",500000," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," " PARAMETER[\"False northing\",0," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]]," " CS[Cartesian,2]," " AXIS[\"Easting (E)\",east," " ORDER[1]]," " AXIS[\"Northing (N)\",north," " ORDER[2]]," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 32631); EXPECT_EQ(res.front().second, 100.0); } { // Identify with DatumEnsemble and unknown CRS name auto wkt = "PROJCRS[\"unknown\"," " BASEGEOGCRS[\"unknown\"," " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," " MEMBER[\"World Geodetic System 1984 (Transit)\"," " ID[\"EPSG\",1166]]," " MEMBER[\"World Geodetic System 1984 (G730)\"," " ID[\"EPSG\",1152]]," " MEMBER[\"World Geodetic System 1984 (G873)\"," " ID[\"EPSG\",1153]]," " MEMBER[\"World Geodetic System 1984 (G1150)\"," " ID[\"EPSG\",1154]]," " MEMBER[\"World Geodetic System 1984 (G1674)\"," " ID[\"EPSG\",1155]]," " MEMBER[\"World Geodetic System 1984 (G1762)\"," " ID[\"EPSG\",1156]]," " ELLIPSOID[\"WGS 84\",6378137,298.257223563," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," " ENSEMBLEACCURACY[2]]]," " CONVERSION[\"UTM zone 31N\"," " METHOD[\"Transverse Mercator\"," " ID[\"EPSG\",9807]]," " PARAMETER[\"Latitude of natural origin\",0," " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," " PARAMETER[\"Longitude of natural origin\",3," " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]]," " PARAMETER[\"Scale factor at natural origin\",0.9996," " SCALEUNIT[\"unity\",1,ID[\"EPSG\",9201]]]," " PARAMETER[\"False easting\",500000," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]," " PARAMETER[\"False northing\",0," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]]," " CS[Cartesian,2]," " AXIS[\"Easting (E)\",east," " ORDER[1]]," " AXIS[\"Northing (N)\",north," " ORDER[2]]," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 32631); EXPECT_GE(res.front().second, 70.0); } { // Identify a ESRI WKT where the datum name doesn't start with D_ auto wkt = "PROJCS[\"S-JTSK_[JTSK03]_Krovak_East_North\"," "GEOGCS[\"S-JTSK_[JTSK03]\"," " DATUM[\"S-JTSK_[JTSK03]\"," " SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]]," " PRIMEM[\"Greenwich\",0.0]," " UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Krovak\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Pseudo_Standard_Parallel_1\",78.5]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Azimuth\",30.2881397527778]," "PARAMETER[\"Longitude_Of_Center\",24.8333333333333]," "PARAMETER[\"Latitude_Of_Center\",49.5]," "PARAMETER[\"X_Scale\",-1.0]," "PARAMETER[\"Y_Scale\",1.0]," "PARAMETER[\"XY_Plane_Rotation\",90.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(WKTParser().guessDialect(wkt), WKTParser::WKTGuessedDialect::WKT1_ESRI); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 8353); EXPECT_EQ(res.front().second, 100); } { // Identify from a pseudo WKT ESRI with has an AUTHORITY node that // points to another object. // Cf // https://lists.osgeo.org/pipermail/qgis-user/2023-January/052299.html auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"ETRS_1989_UTM_Zone_32N_6Stellen\"," "GEOGCS[\"GCS_ETRS_1989\",DATUM[\"D_ETRS_1989\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",500000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",9.0]," "PARAMETER[\"Scale_Factor\",0.9996]," "PARAMETER[\"Latitude_Of_Origin\",0.0]," "UNIT[\"Meter\",1.0]," "AUTHORITY[\"ESRI\",\"102328\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_GE(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 25832); EXPECT_EQ(res.front().second, 70); } { // Identify a projected CRS whose base CRS is not a geographic CRS but // a geodetic CRS with a spherical -ocentric coordinate system. // Cf https://github.com/OSGeo/PROJ/issues/3828 auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCRS[\"unknown\",\n" " BASEGEODCRS[\"Mercury (2015) / Ocentric\",\n" " DATUM[\"Mercury (2015)\",\n" " ELLIPSOID[\"Mercury " "(2015)\",2440530,1075.12334801762,\n" " LENGTHUNIT[\"metre\",1]],\n" " ANCHOR[\"Hun Kal: 20 W.0\"]],\n" " PRIMEM[\"Reference Meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"IAU\",19902,2015]],\n" " CONVERSION[\"Equirectangular, clon = 0\",\n" " METHOD[\"Equidistant Cylindrical\",\n" " ID[\"EPSG\",1028]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_GE(res.size(), 1U); EXPECT_EQ(res.front().first->identifiers()[0]->code(), "19912"); EXPECT_EQ(*(res.front().first->identifiers()[0]->codeSpace()), "IAU_2015"); EXPECT_EQ(res.front().second, 90); } { // Identify a WKT ESRI using deprecated ESRI names // Cf https://github.com/OSGeo/PROJ/issues/4281 auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"Korea_2000_Korea_Central_Belt_2010\"," "GEOGCS[\"GCS_Korea_2000\",DATUM[\"D_Korea_2000\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",200000.0]," "PARAMETER[\"False_Northing\",600000.0]," "PARAMETER[\"Central_Meridian\",127.0]," "PARAMETER[\"Scale_Factor\",1.0]," "PARAMETER[\"Latitude_Of_Origin\",38.0]," "UNIT[\"Meter\",1.0]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto allFactory = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(allFactory); ASSERT_GE(res.size(), 1U); EXPECT_EQ(res.front().first->identifiers()[0]->code(), "102082"); EXPECT_EQ(*(res.front().first->identifiers()[0]->codeSpace()), "ESRI"); EXPECT_EQ(res.front().second, 90); } } // --------------------------------------------------------------------------- TEST(crs, projectedCRS_identify_wrong_auth_name_case) { auto dbContext = DatabaseContext::create(); auto factoryAnonymous = AuthorityFactory::create(dbContext, std::string()); auto obj = WKTParser() .attachDatabaseContext(dbContext) .setStrict(false) .createFromWKT( "PROJCS[\"World_Cylindrical_Equal_Area\"," "GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Cylindrical_Equal_Area\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",0.0],UNIT[\"Meter\",1.0]," "AUTHORITY[\"Esri\",54034]]"); // should be ESRI all caps auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryAnonymous); ASSERT_EQ(res.size(), 1U); const auto &ids = res.front().first->identifiers(); ASSERT_EQ(ids.size(), 1U); EXPECT_EQ(*(ids.front()->codeSpace()), "ESRI"); EXPECT_EQ(ids.front()->code(), "54034"); } // --------------------------------------------------------------------------- TEST(crs, mercator_1SP_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 " "+ellps=bessel +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_Unknown_based_on_Bessel_1841_ellipsoid\"," "SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Mercator\"]," "PARAMETER[\"False_Easting\",3900000.0]," "PARAMETER[\"False_Northing\",900000.0]," "PARAMETER[\"Central_Meridian\",110.0]," "PARAMETER[\"Standard_Parallel_1\",4.45405154589748]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Plate_Carree_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+title=my Plate carree +proj=eqc +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"my_Plate_carree\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Plate_Carree\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Equidistant_Cylindrical_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString("+proj=eqc +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Equidistant_Cylindrical\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",0.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Hotine_Oblique_Mercator_Azimuth_Natural_Origin_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +no_uoff +gamma=295 +alpha=295 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[" "\"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Scale_Factor\",1.0]," // we renormalize angles to [-180,180] "PARAMETER[\"Azimuth\",-65.0]," "PARAMETER[\"Longitude_Of_Center\",0.0]," "PARAMETER[\"Latitude_Of_Center\",0.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Rectified_Skew_Orthomorphic_Natural_Origin_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +no_uoff +gamma=3 +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[" "\"Rectified_Skew_Orthomorphic_Natural_Origin\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Scale_Factor\",1.0]," "PARAMETER[\"Azimuth\",2.0]," "PARAMETER[\"Longitude_Of_Center\",0.0]," "PARAMETER[\"Latitude_Of_Center\",0.0]," "PARAMETER[\"XY_Plane_Rotation\",3.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Hotine_Oblique_Mercator_Azimuth_Center_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +gamma=2 +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[" "\"Hotine_Oblique_Mercator_Azimuth_Center\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Scale_Factor\",1.0]," "PARAMETER[\"Azimuth\",2.0]," "PARAMETER[\"Longitude_Of_Center\",0.0]," "PARAMETER[\"Latitude_Of_Center\",0.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Rectified_Skew_Orthomorphic_Center_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +gamma=3 +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[" "\"Rectified_Skew_Orthomorphic_Center\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Scale_Factor\",1.0]," "PARAMETER[\"Azimuth\",2.0]," "PARAMETER[\"Longitude_Of_Center\",0.0]," "PARAMETER[\"Latitude_Of_Center\",0.0]," "PARAMETER[\"XY_Plane_Rotation\",3.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Gauss_Kruger_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+title=my Gauss Kruger +proj=tmerc +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"my_Gauss_Kruger\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0," "298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Gauss_Kruger\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Scale_Factor\",1.0]," "PARAMETER[\"Latitude_Of_Origin\",0.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Stereographic_North_Pole_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=stere +lat_0=90 +lat_ts=70 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Stereographic_North_Pole\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",70.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Stereographic_South_Pole_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=stere +lat_0=-90 +lat_ts=-70 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Stereographic_South_Pole\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",-70.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Krovak_North_Orientated_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString("+proj=krovak +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_Unknown_based_on_Bessel_1841_ellipsoid\"," "SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Krovak\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Pseudo_Standard_Parallel_1\",78.5]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Azimuth\",30.2881397527778]," "PARAMETER[\"Longitude_Of_Center\",24.8333333333333]," "PARAMETER[\"Latitude_Of_Center\",49.5]," "PARAMETER[\"X_Scale\",-1.0]," "PARAMETER[\"Y_Scale\",1.0]," "PARAMETER[\"XY_Plane_Rotation\",90.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, Krovak_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=krovak +axis=swu +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_Unknown_based_on_Bessel_1841_ellipsoid\"," "SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Krovak\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Pseudo_Standard_Parallel_1\",78.5]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Azimuth\",30.2881397527778]," "PARAMETER[\"Longitude_Of_Center\",24.8333333333333]," "PARAMETER[\"Latitude_Of_Center\",49.5]," "PARAMETER[\"X_Scale\",1.0]," "PARAMETER[\"Y_Scale\",1.0]," "PARAMETER[\"XY_Plane_Rotation\",0.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, LCC_1SP_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=lcc +lat_1=1 +lat_0=1 +k=0.9 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",1.0]," "PARAMETER[\"Scale_Factor\",0.9]," "PARAMETER[\"Latitude_Of_Origin\",1.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, LCC_2SP_as_WKT1_ESRI) { auto obj = PROJStringParser().createFromPROJString( "+proj=lcc +lat_0=1.5 +lat_1=1 +lat_2=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Standard_Parallel_1\",1.0]," "PARAMETER[\"Standard_Parallel_2\",2.0]," "PARAMETER[\"Latitude_Of_Origin\",1.5]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, ESRI_WKT1_to_ESRI_WKT1) { auto in_wkt = "PROJCS[\"NAD_1983_CORS96_StatePlane_North_Carolina_FIPS_3200_Ft_US\"," "GEOGCS[\"GCS_NAD_1983_CORS96\",DATUM[\"D_NAD_1983_CORS96\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",2000000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",-79.0]," "PARAMETER[\"Standard_Parallel_1\",34.33333333333334]," "PARAMETER[\"Standard_Parallel_2\",36.16666666666666]," "PARAMETER[\"Latitude_Of_Origin\",33.75]," "UNIT[\"Foot_US\",0.3048006096012192]]"; auto obj = WKTParser().createFromWKT(in_wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCS[\"NAD_1983_CORS96_StatePlane_North_Carolina_FIPS_3200_Ft_US\"," "GEOGCS[\"GCS_NAD_1983_CORS96\",DATUM[\"D_NAD_1983_CORS96\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",2000000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",-79.0]," "PARAMETER[\"Standard_Parallel_1\",34.3333333333333]," "PARAMETER[\"Standard_Parallel_2\",36.1666666666667]," "PARAMETER[\"Latitude_Of_Origin\",33.75]," "UNIT[\"Foot_US\",0.304800609601219]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(datum, cs_with_MERIDIAN) { std::vector axis{ CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Easting"), "X", AxisDirection::SOUTH, UnitOfMeasure::METRE, Meridian::create(Angle(90))), CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Northing"), "Y", AxisDirection::SOUTH, UnitOfMeasure::METRE, Meridian::create(Angle(180.0)))}; auto cs(CartesianCS::create(PropertyMap(), axis[0], axis[1])); auto expected = "CS[Cartesian,2],\n" " AXIS[\"easting (X)\",south,\n" " MERIDIAN[90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (Y)\",south,\n" " MERIDIAN[180,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]"; auto formatter = WKTFormatter::create(); formatter->setOutputId(false); EXPECT_EQ(cs->exportToWKT(formatter.get()), expected); } // --------------------------------------------------------------------------- TEST(crs, scope_area_bbox_remark) { auto in_wkt = "GEODETICCRS[\"JGD2000\"," "DATUM[\"Japanese Geodetic Datum 2000\"," " ELLIPSOID[\"GRS 1980\",6378137,298.257222101]]," "CS[Cartesian,3]," " AXIS[\"(X)\",geocentricX]," " AXIS[\"(Y)\",geocentricY]," " AXIS[\"(Z)\",geocentricZ]," " LENGTHUNIT[\"metre\",1.0]," "SCOPE[\"Geodesy, topographic mapping and cadastre\"]," "AREA[\"Japan\"]," "BBOX[17.09,122.38,46.05,157.64]," "VERTICALEXTENT[-10000,10000]," "TIMEEXTENT[2002-04-01,2011-10-21]," "ID[\"EPSG\",4946],\n" "REMARK[\"some_remark\"]]"; auto crs = nn_dynamic_pointer_cast(WKTParser().createFromWKT(in_wkt)); ASSERT_TRUE(crs != nullptr); ASSERT_EQ(crs->domains().size(), 1U); auto domain = crs->domains()[0]; EXPECT_TRUE(domain->scope().has_value()); EXPECT_EQ(*(domain->scope()), "Geodesy, topographic mapping and cadastre"); ASSERT_TRUE(domain->domainOfValidity() != nullptr); EXPECT_TRUE(domain->domainOfValidity()->description().has_value()); EXPECT_EQ(*(domain->domainOfValidity()->description()), "Japan"); ASSERT_EQ(domain->domainOfValidity()->geographicElements().size(), 1U); auto geogElement = domain->domainOfValidity()->geographicElements()[0]; auto bbox = nn_dynamic_pointer_cast(geogElement); ASSERT_TRUE(bbox != nullptr); EXPECT_EQ(bbox->southBoundLatitude(), 17.09); EXPECT_EQ(bbox->westBoundLongitude(), 122.38); EXPECT_EQ(bbox->northBoundLatitude(), 46.05); EXPECT_EQ(bbox->eastBoundLongitude(), 157.64); ASSERT_EQ(domain->domainOfValidity()->verticalElements().size(), 1U); auto verticalElement = domain->domainOfValidity()->verticalElements()[0]; EXPECT_EQ(verticalElement->minimumValue(), -10000); EXPECT_EQ(verticalElement->maximumValue(), 10000); EXPECT_EQ(*(verticalElement->unit()), UnitOfMeasure::METRE); ASSERT_EQ(domain->domainOfValidity()->temporalElements().size(), 1U); auto temporalElement = domain->domainOfValidity()->temporalElements()[0]; EXPECT_EQ(temporalElement->start(), "2002-04-01"); EXPECT_EQ(temporalElement->stop(), "2011-10-21"); auto got_wkt = crs->exportToWKT(WKTFormatter::create().get()); auto expected = "GEODCRS[\"JGD2000\",\n" " DATUM[\"Japanese Geodetic Datum 2000\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " SCOPE[\"Geodesy, topographic mapping and cadastre\"],\n" " AREA[\"Japan\"],\n" " BBOX[17.09,122.38,46.05,157.64],\n" " VERTICALEXTENT[-10000,10000,\n" " LENGTHUNIT[\"metre\",1]],\n" " TIMEEXTENT[2002-04-01,2011-10-21],\n" " ID[\"EPSG\",4946],\n" " REMARK[\"some_remark\"]]"; EXPECT_EQ(got_wkt, expected); } // --------------------------------------------------------------------------- TEST(crs, usage) { auto in_wkt = "GEODETICCRS[\"JGD2000\"," "DATUM[\"Japanese Geodetic Datum 2000\"," " ELLIPSOID[\"GRS 1980\",6378137,298.257222101]]," "CS[Cartesian,3]," " AXIS[\"(X)\",geocentricX]," " AXIS[\"(Y)\",geocentricY]," " AXIS[\"(Z)\",geocentricZ]," " LENGTHUNIT[\"metre\",1.0]," "USAGE[SCOPE[\"scope\"],AREA[\"area.\"]]]"; auto crs = nn_dynamic_pointer_cast(WKTParser().createFromWKT(in_wkt)); ASSERT_TRUE(crs != nullptr); auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); auto expected = "GEODCRS[\"JGD2000\",\n" " DATUM[\"Japanese Geodetic Datum 2000\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"scope\"],\n" " AREA[\"area.\"]]]"; EXPECT_EQ(got_wkt, expected); } // --------------------------------------------------------------------------- TEST(crs, multiple_ID) { PropertyMap propertiesCRS; propertiesCRS.set(IdentifiedObject::NAME_KEY, "WGS 84"); auto identifiers = ArrayOfBaseObject::create(); identifiers->add(Identifier::create( "codeA", PropertyMap().set(Identifier::CODESPACE_KEY, "authorityA"))); identifiers->add(Identifier::create( "codeB", PropertyMap().set(Identifier::CODESPACE_KEY, "authorityB"))); propertiesCRS.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers); auto crs = GeodeticCRS::create( propertiesCRS, GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric(UnitOfMeasure::METRE)); auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_SIMPLIFIED).get()); auto expected = "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX],\n" " AXIS[\"(Y)\",geocentricY],\n" " AXIS[\"(Z)\",geocentricZ],\n" " UNIT[\"metre\",1],\n" " ID[\"authorityA\",\"codeA\"],\n" " ID[\"authorityB\",\"codeB\"]]"; EXPECT_EQ(got_wkt, expected); } // --------------------------------------------------------------------------- static VerticalCRSNNPtr createVerticalCRS() { PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5101) .set(IdentifiedObject::NAME_KEY, "Ordnance Datum Newlyn"); auto vdatum = VerticalReferenceFrame::create(propertiesVDatum); PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5701) .set(IdentifiedObject::NAME_KEY, "ODN height"); return VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_as_WKT2) { auto crs = createVerticalCRS(); auto expected = "VERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5701]]"; EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected); } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_as_WKT1_GDAL) { auto crs = createVerticalCRS(); auto expected = "VERT_CS[\"ODN height\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005,\n" " AUTHORITY[\"EPSG\",\"5101\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5701\"]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_as_WKT1_ESRI) { auto crs = createVerticalCRS(); auto expected = "VERTCS[\"ODN_height\",VDATUM[\"Ordnance_Datum_Newlyn\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_as_WKT1_ESRI_context) { auto crs = createVerticalCRS(); auto expected = "VERTCS[\"Newlyn\",VDATUM[\"Ordnance_Datum_Newlyn\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0]," "UNIT[\"Meter\",1.0]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create()) .get()), expected); } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_down_as_WKT1_ESRI) { auto wkt = "VERTCS[\"Caspian\",VDATUM[\"Caspian_Sea\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",-1.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI).get()), wkt); } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_ESRI_115834_as_WKT1_ESRI_with_database) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "ESRI"); auto crs = factory->createCoordinateReferenceSystem("115834"); WKTFormatterNNPtr f(WKTFormatter::create( WKTFormatter::Convention::WKT1_ESRI, DatabaseContext::create())); // Check that the parentheses in the VERTCS and DATUM names are preserved EXPECT_EQ(crs->exportToWKT(f.get()), "VERTCS[\"NAD83(CSRS)v5\"," "DATUM[\"North_American_Datum_of_1983_(CSRS)_version_5\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"); } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_identify_db) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); { // Identify by existing code auto res = factory->createVerticalCRS("7651")->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 7651); EXPECT_EQ(res.front().second, 100); // Test with null EXPECT_TRUE( factory->createVerticalCRS("7651")->identify(nullptr).empty()); } { // Non-existing code auto sourceCRS = factory->createVerticalCRS("7651"); auto crs = VerticalCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, sourceCRS->nameStr()) .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 1), sourceCRS->datum(), sourceCRS->datumEnsemble(), sourceCRS->coordinateSystem()); auto res = crs->identify(factory); EXPECT_EQ(res.size(), 0U); } { // Existing code, but not matching content auto sourceCRS = factory->createVerticalCRS("7651"); auto crs = VerticalCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, sourceCRS->nameStr()) .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 7652), sourceCRS->datum(), sourceCRS->datumEnsemble(), sourceCRS->coordinateSystem()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 7652); EXPECT_EQ(res.front().second, 25); } { // Identify by exact name auto sourceCRS = factory->createVerticalCRS("7651"); auto crs = VerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, sourceCRS->nameStr()), sourceCRS->datum(), sourceCRS->datumEnsemble(), sourceCRS->coordinateSystem()); auto res = static_cast(crs.get())->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 7651); EXPECT_EQ(res.front().second, 100); } { // Identify by equivalent name auto sourceCRS = factory->createVerticalCRS("7651"); auto crs = VerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Kumul_34_height"), sourceCRS->datum(), sourceCRS->datumEnsemble(), sourceCRS->coordinateSystem()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 7651); EXPECT_EQ(res.front().second, 90); } { // Identify by name, but objects aren't equivalent auto sourceCRS = factory->createVerticalCRS("7652"); auto crs = VerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Kumul_34_height"), sourceCRS->datum(), sourceCRS->datumEnsemble(), sourceCRS->coordinateSystem()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 7651); EXPECT_EQ(res.front().second, 25); } { auto sourceCRS = factory->createVerticalCRS("7651"); auto crs = VerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "no match"), sourceCRS->datum(), sourceCRS->datumEnsemble(), sourceCRS->coordinateSystem()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 0U); } } // --------------------------------------------------------------------------- TEST(crs, verticalCRS_datum_ensemble) { auto ensemble = DatumEnsemble::create( PropertyMap(), std::vector{ VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "vdatum1")), VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "vdatum2"))}, PositionalAccuracy::create("100")); auto crs = VerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), nullptr, ensemble, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "VERTCRS[\"unnamed\",\n" " ENSEMBLE[\"unnamed\",\n" " MEMBER[\"vdatum1\"],\n" " MEMBER[\"vdatum2\"],\n" " ENSEMBLEACCURACY[100]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(crs, VerticalCRS_ensemble_exception_in_create) { EXPECT_THROW(VerticalCRS::create(PropertyMap(), nullptr, nullptr, VerticalCS::createGravityRelatedHeight( UnitOfMeasure::METRE)), Exception); auto ensemble_hdatum = DatumEnsemble::create( PropertyMap(), std::vector{GeodeticReferenceFrame::EPSG_6326, GeodeticReferenceFrame::EPSG_6326}, PositionalAccuracy::create("100")); EXPECT_THROW(VerticalCRS::create(PropertyMap(), nullptr, ensemble_hdatum, VerticalCS::createGravityRelatedHeight( UnitOfMeasure::METRE)), Exception); } // --------------------------------------------------------------------------- TEST(datum, vdatum_with_anchor) { PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5101) .set(IdentifiedObject::NAME_KEY, "Ordnance Datum Newlyn"); auto vdatum = VerticalReferenceFrame::create( propertiesVDatum, optional("my anchor"), optional(RealizationMethod::LEVELLING)); EXPECT_TRUE(vdatum->realizationMethod().has_value()); EXPECT_EQ(*(vdatum->realizationMethod()), RealizationMethod::LEVELLING); auto expected = "VDATUM[\"Ordnance Datum Newlyn\",\n" " ANCHOR[\"my anchor\"],\n" " ID[\"EPSG\",5101]]"; EXPECT_EQ(vdatum->exportToWKT(WKTFormatter::create().get()), expected); EXPECT_TRUE(vdatum->isEquivalentTo(vdatum.get())); EXPECT_FALSE(vdatum->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- static CompoundCRSNNPtr createCompoundCRS() { PropertyMap properties; properties.set(Identifier::CODESPACE_KEY, "codespace") .set(Identifier::CODE_KEY, "code") .set(IdentifiedObject::NAME_KEY, "horizontal + vertical"); return CompoundCRS::create( properties, std::vector{createProjected(), createVerticalCRS()}); } // --------------------------------------------------------------------------- static DerivedProjectedCRSNNPtr createDerivedProjectedCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"), std::vector{}, std::vector{}); return DerivedProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "derived projectedCRS"), createProjected(), derivingConversion, CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } static DerivedProjectedCRSNNPtr createDerivedProjectedCRSNorthingEasting() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"), std::vector{}, std::vector{}); return DerivedProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "derived projectedCRS"), createProjected(), derivingConversion, CartesianCS::createNorthingEasting(UnitOfMeasure::FOOT)); } // --------------------------------------------------------------------------- static DerivedVerticalCRSNNPtr createDerivedVerticalCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"), std::vector{}, std::vector{}); return DerivedVerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Derived vertCRS"), createVerticalCRS(), derivingConversion, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_valid) { // geographic 2D + vertical CompoundCRS::create( PropertyMap(), std::vector{GeographicCRS::EPSG_4326, createVerticalCRS()}); // projected 2D + vertical CompoundCRS::create( PropertyMap(), std::vector{createProjected(), createVerticalCRS()}); // derived projected 2D + vertical CompoundCRS::create(PropertyMap(), std::vector{createDerivedProjectedCRS(), createVerticalCRS()}); // derived projected 2D + derived vertical CompoundCRS::create(PropertyMap(), std::vector{createDerivedProjectedCRS(), createDerivedVerticalCRS()}); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_invalid) { EXPECT_THROW(CompoundCRS::create(PropertyMap(), {}), InvalidCompoundCRSException); // Only one component EXPECT_THROW(CompoundCRS::create(PropertyMap(), std::vector{createProjected()}), InvalidCompoundCRSException); // Two geographic EXPECT_THROW( CompoundCRS::create(PropertyMap(), std::vector{GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4326}), InvalidCompoundCRSException); // geographic 3D + vertical EXPECT_THROW( CompoundCRS::create(PropertyMap(), std::vector{GeographicCRS::EPSG_4979, createVerticalCRS()}), InvalidCompoundCRSException); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_as_WKT2) { auto crs = createCompoundCRS(); auto expected = "COMPOUNDCRS[\"horizontal + vertical\",\n" " PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]],\n" " VERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]],\n" " ID[\"codespace\",\"code\"]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_isEquivalentTo) { auto crs = createCompoundCRS(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); auto otherCompoundCRS = CompoundCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, ""), std::vector{GeographicCRS::EPSG_4326, createVerticalCRS()}); EXPECT_FALSE(crs->isEquivalentTo(otherCompoundCRS.get())); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_as_WKT1_GDAL) { auto crs = createCompoundCRS(); auto expected = "COMPD_CS[\"horizontal + vertical\",\n" " PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]],\n" " VERT_CS[\"ODN height\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005,\n" " AUTHORITY[\"EPSG\",\"5101\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5701\"]],\n" " AUTHORITY[\"codespace\",\"code\"]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_as_PROJ_string) { auto crs = createCompoundCRS(); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=31 +datum=WGS84 +units=m +vunits=m +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_no_name_provided) { auto crs = CompoundCRS::create( PropertyMap(), std::vector{createProjected(), createVerticalCRS()}); EXPECT_EQ(crs->nameStr(), "WGS 84 / UTM zone 31N + ODN height"); } // --------------------------------------------------------------------------- TEST(crs, compoundCRS_identify_db) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); { // Identify by existing code auto res = factory->createCompoundCRS("8769")->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 8769); EXPECT_EQ(res.front().second, 100); // Test with null EXPECT_TRUE( factory->createCompoundCRS("8769")->identify(nullptr).empty()); } { // Non-existing code auto sourceCRS = factory->createCompoundCRS("8769"); auto crs = CompoundCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, sourceCRS->nameStr()) .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 1), sourceCRS->componentReferenceSystems()); auto res = crs->identify(factory); EXPECT_EQ(res.size(), 0U); } { // Existing code, but not matching content auto sourceCRS = factory->createCompoundCRS("8769"); auto crs = CompoundCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, sourceCRS->nameStr()) .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 8770), sourceCRS->componentReferenceSystems()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 8770); EXPECT_EQ(res.front().second, 25); } { // Identify by exact name auto sourceCRS = factory->createCompoundCRS("8769"); auto crs = CompoundCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, sourceCRS->nameStr()), sourceCRS->componentReferenceSystems()); auto res = static_cast(crs.get())->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 8769); EXPECT_EQ(res.front().second, 100); } { EXPECT_TRUE(Identifier::isEquivalentName( "NAD83_Ohio_North_ftUS_NAVD88_height_ftUS", "NAD83 / Ohio North (ftUS) + NAVD88 height (ftUS)")); // Identify by equivalent name auto sourceCRS = factory->createCompoundCRS("8769"); auto crs = CompoundCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "NAD83_Ohio_North_ftUS_NAVD88_height_ftUS"), sourceCRS->componentReferenceSystems()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 8769); EXPECT_EQ(res.front().second, 90); } { // Identify by name, but objects aren't equivalent auto sourceCRS = factory->createCompoundCRS("8770"); auto crs = CompoundCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "NAD83_Ohio_North_ftUS_NAVD88_height_ftUS"), sourceCRS->componentReferenceSystems()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 8769); EXPECT_EQ(res.front().second, 25); } { auto sourceCRS = factory->createCompoundCRS("8769"); auto crs = CompoundCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unrelated name"), sourceCRS->componentReferenceSystems()); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 8769); EXPECT_EQ(res.front().second, 70); } { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +lat_0=0 +lon_0=72.05 +k=1 +x_0=3500000 " "+y_0=-5811057.63 +ellps=krass " "+towgs84=23.57,-140.95,-79.8,0,-0.35,-0.79,-0.22 " "+geoidgrids=egm08_25.gtx +units=m +no_defs +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // Just check we don't get an exception crs->identify(factory); } // Identify from ESRI WKT { auto sourceCRS = factory->createCompoundCRS("7405"); auto wkt = sourceCRS->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 7405); EXPECT_EQ(res.front().second, 100); } // Identify a CompoundCRS whose horizontal and vertical parts are known // but not the composition. { auto obj = createFromUserInput("EPSG:4326+5703", dbContext); auto sourceCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(sourceCRS != nullptr); auto wkt = sourceCRS->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()); auto obj2 = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 0); EXPECT_EQ(res.front().second, 100); const auto &components = res.front().first->componentReferenceSystems(); EXPECT_EQ(components[0]->getEPSGCode(), 4326); EXPECT_EQ(components[1]->getEPSGCode(), 5703); } } // --------------------------------------------------------------------------- TEST(crs, boundCRS_to_WKT2) { auto projcrs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my PROJCRS"), GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my GEOGCRS"), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)), Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto crs = BoundCRS::createFromTOWGS84( projcrs, std::vector{1, 2, 3, 4, 5, 6, 7}); EXPECT_EQ(crs->baseCRS()->nameStr(), projcrs->nameStr()); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); ASSERT_TRUE(crs->transformation()->sourceCRS() != nullptr); EXPECT_EQ(crs->transformation()->sourceCRS()->nameStr(), projcrs->baseCRS()->nameStr()); ASSERT_TRUE(crs->transformation()->targetCRS() != nullptr); EXPECT_EQ(crs->transformation()->targetCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); auto values = crs->transformation()->parameterValues(); ASSERT_EQ(values.size(), 7U); { const auto &opParamvalue = nn_dynamic_pointer_cast(values[0]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8605); EXPECT_EQ(paramName, "X-axis translation"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::METRE); EXPECT_EQ(measure.value(), 1.0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[1]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8606); EXPECT_EQ(paramName, "Y-axis translation"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::METRE); EXPECT_EQ(measure.value(), 2.0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[2]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8607); EXPECT_EQ(paramName, "Z-axis translation"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::METRE); EXPECT_EQ(measure.value(), 3.0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[3]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8608); EXPECT_EQ(paramName, "X-axis rotation"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::ARC_SECOND); EXPECT_EQ(measure.value(), 4.0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[4]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8609); EXPECT_EQ(paramName, "Y-axis rotation"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::ARC_SECOND); EXPECT_EQ(measure.value(), 5.0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[5]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8610); EXPECT_EQ(paramName, "Z-axis rotation"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::ARC_SECOND); EXPECT_EQ(measure.value(), 6.0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[6]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8611); EXPECT_EQ(paramName, "Scale difference"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::PARTS_PER_MILLION); EXPECT_EQ(measure.value(), 7.0); } auto expected = "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" + "TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) + "],\n" " ABRIDGEDTRANSFORMATION[\"Transformation from myGEOGCRS to " "WGS84\",\n" " METHOD[\"Position Vector transformation (geog2D " "domain)\",\n" " ID[\"EPSG\",9606]],\n" " PARAMETER[\"X-axis translation\",1,\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",2,\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",3,\n" " ID[\"EPSG\",8607]],\n" " PARAMETER[\"X-axis rotation\",4,\n" " ID[\"EPSG\",8608]],\n" " PARAMETER[\"Y-axis rotation\",5,\n" " ID[\"EPSG\",8609]],\n" " PARAMETER[\"Z-axis rotation\",6,\n" " ID[\"EPSG\",8610]],\n" " PARAMETER[\"Scale difference\",1.000007,\n" " ID[\"EPSG\",8611]]]]"; EXPECT_EQ( replaceAll( replaceAll(crs->exportToWKT(WKTFormatter::create().get()), " ", ""), "\n", ""), replaceAll(replaceAll(expected, " ", ""), "\n", "")); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(crs, boundCRS_with_usage) { auto wkt = "BOUNDCRS[\n" " SOURCECRS[\n" " PROJCRS[\"Monte Mario / Italy zone 2\",\n" " BASEGEOGCRS[\"Monte Mario\",\n" " DATUM[\"Monte Mario\",\n" " ELLIPSOID[\"International 1924\",6378388,297,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4265]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",15,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",2520000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"x\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"y\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",3004]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]],\n" " ABRIDGEDTRANSFORMATION[\"Transformation from Monte Mario to " "WGS84\",\n" " METHOD[\"Position Vector transformation (geog2D domain)\",\n" " ID[\"EPSG\",9606]],\n" " PARAMETER[\"X-axis translation\",-50.2,\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",-50.4,\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",84.8,\n" " ID[\"EPSG\",8607]],\n" " PARAMETER[\"X-axis rotation\",-0.69,\n" " ID[\"EPSG\",8608]],\n" " PARAMETER[\"Y-axis rotation\",-2.012,\n" " ID[\"EPSG\",8609]],\n" " PARAMETER[\"Z-axis rotation\",0.459,\n" " ID[\"EPSG\",8610]],\n" " PARAMETER[\"Scale difference\",0.99997192,\n" " ID[\"EPSG\",8611]]],\n" " USAGE[\n" " SCOPE[\"unknown\"],\n" " AREA[\"Italy - Sicily onshore\"],\n" " BBOX[36.59,12.36,38.35,15.71]]]"; auto crs = nn_dynamic_pointer_cast(WKTParser().createFromWKT(wkt)); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Monte Mario / Italy zone 2"); auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_EQ(got_wkt, wkt); } // --------------------------------------------------------------------------- TEST(crs, boundCRS_crs_link) { { std::weak_ptr oriBaseCRS; { auto baseCRSIn = GeographicCRS::EPSG_4267->shallowClone(); oriBaseCRS = baseCRSIn.as_nullable(); EXPECT_EQ(oriBaseCRS.use_count(), 1); { auto boundCRS = BoundCRS::createFromTOWGS84( baseCRSIn, std::vector{1, 2, 3, 4, 5, 6, 7}); EXPECT_EQ(oriBaseCRS.use_count(), 3); } EXPECT_EQ(oriBaseCRS.use_count(), 1); } EXPECT_TRUE(oriBaseCRS.expired()); } { CRSPtr baseCRS; { auto baseCRSIn = GeographicCRS::EPSG_4267->shallowClone(); CRS *baseCRSPtr = baseCRSIn.get(); auto boundCRS = BoundCRS::createFromTOWGS84( baseCRSIn, std::vector{1, 2, 3, 4, 5, 6, 7}); baseCRS = boundCRS->baseCRS().as_nullable(); EXPECT_TRUE(baseCRS.get() == baseCRSPtr); } EXPECT_TRUE(baseCRS->isEquivalentTo(GeographicCRS::EPSG_4267.get())); EXPECT_TRUE(baseCRS->canonicalBoundCRS() == nullptr); } { CRSPtr baseCRS; { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4267->shallowClone(), std::vector{1, 2, 3, 4, 5, 6, 7}); baseCRS = boundCRS->baseCRSWithCanonicalBoundCRS().as_nullable(); } EXPECT_TRUE(baseCRS->isEquivalentTo(GeographicCRS::EPSG_4267.get())); EXPECT_TRUE(baseCRS->canonicalBoundCRS() != nullptr); EXPECT_TRUE( baseCRS ->createBoundCRSToWGS84IfPossible( nullptr, CoordinateOperationContext::IntermediateCRSUse::NEVER) ->isEquivalentTo(baseCRS->canonicalBoundCRS().get())); } { std::weak_ptr oriBaseCRS; { BoundCRSPtr boundCRSExterior; { auto baseCRS = GeographicCRS::EPSG_4267->shallowClone(); oriBaseCRS = baseCRS.as_nullable(); EXPECT_EQ(oriBaseCRS.use_count(), 1); auto boundCRS = BoundCRS::createFromTOWGS84( baseCRS, std::vector{1, 2, 3, 4, 5, 6, 7}); EXPECT_EQ(oriBaseCRS.use_count(), 3); boundCRSExterior = boundCRS->baseCRSWithCanonicalBoundCRS() ->canonicalBoundCRS(); EXPECT_EQ(oriBaseCRS.use_count(), 4); } EXPECT_EQ(oriBaseCRS.use_count(), 2); EXPECT_TRUE(!oriBaseCRS.expired()); EXPECT_TRUE(boundCRSExterior->baseCRS()->isEquivalentTo( GeographicCRS::EPSG_4267.get())); } EXPECT_EQ(oriBaseCRS.use_count(), 0); EXPECT_TRUE(oriBaseCRS.expired()); } { std::weak_ptr oriBaseCRS; { BoundCRSPtr boundCRSExterior; { auto baseCRS = createProjected(); oriBaseCRS = baseCRS.as_nullable(); EXPECT_EQ(oriBaseCRS.use_count(), 1); auto boundCRS = BoundCRS::createFromTOWGS84( baseCRS, std::vector{1, 2, 3, 4, 5, 6, 7}); EXPECT_EQ(oriBaseCRS.use_count(), 2); boundCRSExterior = boundCRS->baseCRSWithCanonicalBoundCRS() ->canonicalBoundCRS(); EXPECT_EQ(oriBaseCRS.use_count(), 3); } EXPECT_EQ(oriBaseCRS.use_count(), 1); EXPECT_TRUE(!oriBaseCRS.expired()); EXPECT_TRUE(boundCRSExterior->baseCRS()->isEquivalentTo( createProjected().get())); } EXPECT_EQ(oriBaseCRS.use_count(), 0); EXPECT_TRUE(oriBaseCRS.expired()); } } // --------------------------------------------------------------------------- TEST(crs, boundCRS_to_WKT1) { auto projcrs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my PROJCRS"), GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my GEOGCRS"), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)), Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto crs = BoundCRS::createFromTOWGS84( projcrs, std::vector{1, 2, 3, 4, 5, 6, 7}); auto expected = "PROJCS[\"my PROJCRS\",\n" " GEOGCS[\"my GEOGCRS\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " TOWGS84[1,2,3,4,5,6,7],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, boundCRS_geographicCRS_to_PROJ_string) { auto basecrs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my GEOGCRS"), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto crs = BoundCRS::createFromTOWGS84( basecrs, std::vector{1, 2, 3, 4, 5, 6, 7}); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +ellps=WGS84 +towgs84=1,2,3,4,5,6,7 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, boundCRS_projectedCRS_to_PROJ_string) { auto projcrs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my PROJCRS"), GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my GEOGCRS"), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)), Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto crs = BoundCRS::createFromTOWGS84( projcrs, std::vector{1, 2, 3, 4, 5, 6, 7}); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=31 +ellps=WGS84 +towgs84=1,2,3,4,5,6,7 +units=m " "+no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, boundCRS_nadcon_to_PROJ_string_usePROJAlternativeGridNames_false) { auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); // NAD27 to WGS 84 (79) auto op = factoryEPSG->createCoordinateOperation( "15851", /* usePROJAlternativeGridNames = */ false); auto transf = nn_dynamic_pointer_cast(op); auto crs = BoundCRS::create(GeographicCRS::EPSG_4267, // NAD27 GeographicCRS::EPSG_4326, // WGS84 NN_CHECK_THROW(transf)); EXPECT_EQ(crs->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_4, dbContext) .get()), "+proj=longlat +ellps=clrk66 +nadgrids=us_noaa_conus.tif " "+no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, boundCRS_nadcon_to_PROJ_string_usePROJAlternativeGridNames_true) { auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); // NAD27 to WGS 84 (79) auto op = factoryEPSG->createCoordinateOperation( "15851", /* usePROJAlternativeGridNames = */ true); auto transf = nn_dynamic_pointer_cast(op); auto crs = BoundCRS::create(GeographicCRS::EPSG_4267, // NAD27 GeographicCRS::EPSG_4326, // WGS84 NN_CHECK_THROW(transf)); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +ellps=clrk66 +nadgrids=us_noaa_conus.tif +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(crs, boundCRS_identify_db) { auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); { auto obj = PROJStringParser() .attachDatabaseContext(dbContext) .createFromPROJString( "+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 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); auto boundCRS = dynamic_cast(res.front().first.get()); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ(boundCRS->baseCRS()->getEPSGCode(), 2106); EXPECT_EQ(boundCRS->transformation()->nameStr(), "NZGD2000 to WGS 84 (1)"); EXPECT_EQ(res.front().second, 70); } { // WKT has EPSG code but the definition doesn't match with the official // one (namely linear units are different) // https://github.com/OSGeo/gdal/issues/990 // Also test that we can handle the synthetic Null geographic offset // between NAD83 and WGS84 auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "PROJCS[\"NAD83 / Ohio North\",GEOGCS[\"NAD83\"," "DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\"," "6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]]," "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6269\"]]," "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"degree\",0.0174532925199433, AUTHORITY[\"EPSG\",\"9122\"]]," "AUTHORITY[\"EPSG\",\"4269\"]]," "PROJECTION[\"Lambert_Conformal_Conic_2SP\"]," "PARAMETER[\"standard_parallel_1\",41.7]," "PARAMETER[\"standard_parallel_2\",40.43333333333333]," "PARAMETER[\"latitude_of_origin\",39.66666666666666]," "PARAMETER[\"central_meridian\",-82.5]," "PARAMETER[\"false_easting\",1968503.937007874]," "PARAMETER[\"false_northing\",0]," "UNIT[\"International Foot\",0.3048,AUTHORITY[\"EPSG\",\"9002\"]]," "AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"32122\"]" "]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().second, 25); auto boundCRS = dynamic_cast(res.front().first.get()); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ(boundCRS->baseCRS()->getEPSGCode(), 32122); EXPECT_EQ(boundCRS->transformation()->method()->getEPSGCode(), 9603); } { // Identify from a PROJ string with +towgs84 auto obj = PROJStringParser().createFromPROJString( "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 " "+towgs84=198,881,317,0,0,0,0 +units=m +no_defs +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); auto boundCRS = dynamic_cast(res.front().first.get()); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ(boundCRS->baseCRS()->getEPSGCode(), 3148); EXPECT_EQ(res.front().second, 70); } { // Identify a WKT with datum WGS84 and TOWGS84 auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "GEOGCS[\"WGS84 Coordinate System\",DATUM[\"WGS 1984\"," "SPHEROID[\"WGS 1984\",6378137,298.257223563]," "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]," "AUTHORITY[\"EPSG\",\"4326\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factoryEPSG); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().second, 100); auto boundCRS = dynamic_cast(res.front().first.get()); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ(boundCRS->baseCRS()->getEPSGCode(), 4326); EXPECT_EQ(boundCRS->transformation()->method()->getEPSGCode(), 9606); } } // --------------------------------------------------------------------------- TEST(crs, incompatible_boundCRS_hubCRS_to_WKT1) { auto crs = BoundCRS::create( GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4807, Transformation::createGeocentricTranslations( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4807, 1.0, 2.0, 3.0, std::vector())); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, incompatible_boundCRS_transformation_to_WKT1) { auto crs = BoundCRS::create( GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326, Transformation::create(PropertyMap(), GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326, nullptr, PropertyMap(), std::vector(), std::vector(), std::vector())); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, WKT1_DATUM_EXTENSION_to_WKT1_and_PROJ_string) { auto wkt = "PROJCS[\"unnamed\",\n" " GEOGCS[\"International 1909 (Hayford)\",\n" " DATUM[\"unknown\",\n" " SPHEROID[\"intl\",6378388,297],\n" " EXTENSION[\"PROJ4_GRIDS\",\"nzgd2kgrid0005.gsb\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"New_Zealand_Map_Grid\"],\n" " PARAMETER[\"latitude_of_origin\",-41],\n" " PARAMETER[\"central_meridian\",173],\n" " PARAMETER[\"false_easting\",2510000],\n" " PARAMETER[\"false_northing\",6023150],\n" " UNIT[\"Meter\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 " "+ellps=intl +nadgrids=nzgd2kgrid0005.gsb +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, WKT1_VERT_DATUM_EXTENSION_to_WKT1) { auto wkt = "VERT_CS[\"EGM2008 geoid height\",\n" " VERT_DATUM[\"EGM2008 geoid\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"egm08_25.gtx\"],\n" " AUTHORITY[\"EPSG\",\"1027\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"3855\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); } // --------------------------------------------------------------------------- TEST(crs, WKT1_VERT_DATUM_EXTENSION_to_WKT2) { auto wkt = "VERT_CS[\"EGM2008 geoid height\",\n" " VERT_DATUM[\"EGM2008 geoid\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"egm08_25.gtx\"],\n" " AUTHORITY[\"EPSG\",\"1027\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Up\",UP],\n" " AUTHORITY[\"EPSG\",\"3855\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto wkt2 = "BOUNDCRS[\n" " SOURCECRS[\n" " VERTCRS[\"EGM2008 geoid height\",\n" " VDATUM[\"EGM2008 geoid\"],\n" " CS[vertical,1],\n" " AXIS[\"up\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",3855]]],\n" " TARGETCRS[\n" " GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[\"EGM2008 geoid height to WGS 84 " "ellipsoidal height\",\n" " METHOD[\"GravityRelatedHeight to Geographic3D\"],\n" " PARAMETERFILE[\"Geoid (height correction) model " "file\",\"egm08_25.gtx\",\n" " ID[\"EPSG\",8666]]]]"; EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), wkt2); } // --------------------------------------------------------------------------- TEST(crs, WKT1_VERT_DATUM_EXTENSION_to_PROJ_string) { auto wkt = "VERT_CS[\"EGM2008 geoid height\",\n" " VERT_DATUM[\"EGM2008 geoid\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"egm08_25.gtx\"],\n" " AUTHORITY[\"EPSG\",\"1027\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Up\",UP],\n" " AUTHORITY[\"EPSG\",\"3855\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+geoidgrids=egm08_25.gtx +geoid_crs=WGS84 +vunits=m +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(crs, extractGeographicCRS) { EXPECT_EQ(GeographicCRS::EPSG_4326->extractGeographicCRS(), GeographicCRS::EPSG_4326); EXPECT_EQ(createProjected()->extractGeographicCRS(), GeographicCRS::EPSG_4326); EXPECT_EQ(CompoundCRS::create( PropertyMap(), std::vector{GeographicCRS::EPSG_4326, createVerticalCRS()}) ->extractGeographicCRS(), GeographicCRS::EPSG_4326); } // --------------------------------------------------------------------------- TEST(crs, extractVerticalCRS) { EXPECT_EQ(GeographicCRS::EPSG_4326->extractVerticalCRS(), nullptr); { auto vertcrs = createCompoundCRS()->extractVerticalCRS(); ASSERT_TRUE(vertcrs != nullptr); EXPECT_TRUE(vertcrs->isEquivalentTo(createVerticalCRS().get())); } } // --------------------------------------------------------------------------- static DerivedGeographicCRSNNPtr createDerivedGeographicCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Atlantic pole"), PropertyMap().set(IdentifiedObject::NAME_KEY, "Pole rotation"), std::vector{ OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "Latitude of rotated pole")), OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "Longitude of rotated pole")), OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Axis rotation")), }, std::vector{ ParameterValue::create(Angle(52.0)), ParameterValue::create(Angle(-30.0)), ParameterValue::create(Angle(-25)), }); return DerivedGeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WMO Atlantic Pole"), GeographicCRS::EPSG_4326, derivingConversion, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); } // --------------------------------------------------------------------------- TEST(crs, derivedGeographicCRS_basic) { auto derivedCRS = createDerivedGeographicCRS(); EXPECT_TRUE(derivedCRS->isEquivalentTo(derivedCRS.get())); EXPECT_FALSE(derivedCRS->isEquivalentTo( derivedCRS->baseCRS().get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(derivedCRS->baseCRS()->isEquivalentTo( derivedCRS.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(crs, derivedGeographicCRS_WKT2) { auto expected = "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Atlantic pole\",\n" " METHOD[\"Pole rotation\"],\n" " PARAMETER[\"Latitude of rotated pole\",52,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Longitude of rotated pole\",-30,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Axis rotation\",-25,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; auto crs = createDerivedGeographicCRS(); EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(crs, derivedGeographicCRS_WKT2_2019) { auto expected = "GEOGCRS[\"WMO Atlantic Pole\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Atlantic pole\",\n" " METHOD[\"Pole rotation\"],\n" " PARAMETER[\"Latitude of rotated pole\",52,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Longitude of rotated pole\",-30,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Axis rotation\",-25,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; EXPECT_EQ( createDerivedGeographicCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, derivedGeographicCRS_WKT1) { EXPECT_THROW( createDerivedGeographicCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, derivedGeographicCRS_to_PROJ) { auto wkt = "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ ob_tran o_proj=longlat\"],\n" " PARAMETER[\"o_lat_p\",52,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"o_lon_p\",-30,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"lon_0\",-25,\n" " UNIT[\"degree\",0.0174532925199433]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=ob_tran +o_proj=longlat +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 " "+datum=WGS84 +no_defs +type=crs"); auto op = CoordinateOperationFactory::create()->createOperation( crs->baseCRS(), NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ob_tran " "+o_proj=longlat +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg +step " "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(crs, derivedGeographicCRS_with_affine_transform_to_PROJ) { auto wkt = "GEODCRS[\"WGS 84 Translated\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0]],\n" " DERIVINGCONVERSION[\"Translation\",\n" " METHOD[\"Affine parametric transformation\",\n" " ID[\"EPSG\",9624]],\n" " PARAMETER[\"A0\",0.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8623]],\n" " PARAMETER[\"A1\",1,\n" " SCALEUNIT[\"coefficient\",1],\n" " ID[\"EPSG\",8624]],\n" " PARAMETER[\"A2\",0,\n" " SCALEUNIT[\"coefficient\",1],\n" " ID[\"EPSG\",8625]],\n" " PARAMETER[\"B0\",2.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8639]],\n" " PARAMETER[\"B1\",0,\n" " SCALEUNIT[\"coefficient\",1],\n" " ID[\"EPSG\",8640]],\n" " PARAMETER[\"B2\",1,\n" " SCALEUNIT[\"coefficient\",1],\n" " ID[\"EPSG\",8641]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north],\n" " AXIS[\"longitude\",east],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->derivingConversion()->validateParameters().empty()); auto op = CoordinateOperationFactory::create()->createOperation( crs->baseCRS(), NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +xoff=0.5 +s11=1 +s12=0 +yoff=2.5 +s21=0 +s22=1"); } // --------------------------------------------------------------------------- static DerivedGeodeticCRSNNPtr createDerivedGeodeticCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Some conversion"), PropertyMap().set(IdentifiedObject::NAME_KEY, "Some method"), std::vector{}, std::vector{}); return DerivedGeodeticCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Derived geodetic CRS"), GeographicCRS::EPSG_4326, derivingConversion, CartesianCS::createGeocentric(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(crs, derivedGeodeticCRS_basic) { auto derivedCRS = createDerivedGeodeticCRS(); EXPECT_TRUE(derivedCRS->isEquivalentTo(derivedCRS.get())); EXPECT_FALSE(derivedCRS->isEquivalentTo( derivedCRS->baseCRS().get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(derivedCRS->baseCRS()->isEquivalentTo( derivedCRS.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(crs, derivedGeodeticCRS_WKT2) { auto expected = "GEODCRS[\"Derived geodetic CRS\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Some conversion\",\n" " METHOD[\"Some method\"]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto crs = createDerivedGeodeticCRS(); EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(crs, derivedGeodeticCRS_WKT2_2019) { auto expected = "GEODCRS[\"Derived geodetic CRS\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Some conversion\",\n" " METHOD[\"Some method\"]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; EXPECT_EQ( createDerivedGeodeticCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, derivedGeodeticCRS_WKT1) { EXPECT_THROW( createDerivedGeodeticCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, derivedProjectedCRS_WKT2_2019) { auto expected = "DERIVEDPROJCRS[\"derived projectedCRS\",\n" " BASEPROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " ID[\"EPSG\",32631]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto crs = createDerivedProjectedCRS(); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_FALSE(crs->isEquivalentTo(createUnrelatedObject().get())); auto geodCRS = crs->extractGeodeticCRS(); EXPECT_TRUE(geodCRS != nullptr); } // --------------------------------------------------------------------------- TEST(crs, derivedProjectedCRS_WKT2_2015) { auto crs = createDerivedProjectedCRS(); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2015).get()), FormattingException); } // --------------------------------------------------------------------------- static DateTimeTemporalCSNNPtr createDateTimeTemporalCS() { return DateTimeTemporalCS::create( PropertyMap(), CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Time"), "T", AxisDirection::FUTURE, UnitOfMeasure::NONE)); } // --------------------------------------------------------------------------- static TemporalCRSNNPtr createDateTimeTemporalCRS() { auto datum = TemporalDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Gregorian calendar"), DateTime::create("0000-01-01"), TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN); return TemporalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Temporal CRS"), datum, createDateTimeTemporalCS()); } // --------------------------------------------------------------------------- TEST(crs, dateTimeTemporalCRS_WKT2) { auto expected = "TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]"; auto crs = createDateTimeTemporalCRS(); EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(crs, dateTimeTemporalCRS_WKT2_2019) { auto expected = "TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]"; EXPECT_EQ( createDateTimeTemporalCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- static TemporalCRSNNPtr createTemporalCountCRSWithConvFactor() { auto datum = TemporalDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "GPS time origin"), DateTime::create("1980-01-01T00:00:00.0Z"), TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN); auto cs = TemporalCountCS::create( PropertyMap(), CoordinateSystemAxis::create(PropertyMap(), "T", AxisDirection::FUTURE, UnitOfMeasure("milliseconds (ms)", 0.001, UnitOfMeasure::Type::TIME))); return TemporalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "GPS milliseconds"), datum, cs); } // --------------------------------------------------------------------------- TEST(crs, temporalCountCRSWithConvFactor_WKT2_2019) { auto expected = "TIMECRS[\"GPS milliseconds\",\n" " TDATUM[\"GPS time origin\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[1980-01-01T00:00:00.0Z]],\n" " CS[TemporalCount,1],\n" " AXIS[\"(T)\",future,\n" " TIMEUNIT[\"milliseconds (ms)\",0.001]]]"; EXPECT_EQ( createTemporalCountCRSWithConvFactor()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- static TemporalCRSNNPtr createTemporalCountCRSWithoutConvFactor() { auto datum = TemporalDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "29 December 1979"), DateTime::create("1979-12-29T00"), TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN); auto cs = TemporalCountCS::create( PropertyMap(), CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Time"), "", AxisDirection::FUTURE, UnitOfMeasure("hour", 0, UnitOfMeasure::Type::TIME))); return TemporalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Calendar hours from 1979-12-29"), datum, cs); } // --------------------------------------------------------------------------- TEST(crs, temporalCountCRSWithoutConvFactor_WKT2_2019) { auto expected = "TIMECRS[\"Calendar hours from 1979-12-29\",\n" " TDATUM[\"29 December 1979\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[1979-12-29T00]],\n" " CS[TemporalCount,1],\n" " AXIS[\"time\",future,\n" " TIMEUNIT[\"hour\"]]]"; EXPECT_EQ( createTemporalCountCRSWithoutConvFactor()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- static TemporalCRSNNPtr createTemporalMeasureCRSWithoutConvFactor() { auto datum = TemporalDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Common Era"), DateTime::create("0000"), TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN); auto cs = TemporalMeasureCS::create( PropertyMap(), CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Decimal years"), "a", AxisDirection::FUTURE, UnitOfMeasure("year", 0, UnitOfMeasure::Type::TIME))); return TemporalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Decimal Years CE"), datum, cs); } // --------------------------------------------------------------------------- TEST(crs, temporalMeasureCRSWithoutConvFactor_WKT2_2019) { auto expected = "TIMECRS[\"Decimal Years CE\",\n" " TDATUM[\"Common Era\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000]],\n" " CS[TemporalMeasure,1],\n" " AXIS[\"decimal years (a)\",future,\n" " TIMEUNIT[\"year\"]]]"; EXPECT_EQ( createTemporalMeasureCRSWithoutConvFactor()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- static EngineeringCRSNNPtr createEngineeringCRS() { auto datum = EngineeringDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Engineering datum")); return EngineeringCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Engineering CRS"), datum, CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(crs, engineeringCRS_WKT2) { auto expected = "ENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto crs = createEngineeringCRS(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, engineeringCRS_WKT1) { auto expected = "LOCAL_CS[\"Engineering CRS\",\n" " LOCAL_DATUM[\"Engineering datum\",32767],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; EXPECT_EQ( createEngineeringCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, engineeringCRS_unknown_equivalence) { // Test equivalent of CRS definition got from GPKG (wkt2) and its equivalent // from GeoTIFF (wkt1) // Cf https://github.com/r-spatial/sf/issues/2049#issuecomment-1486600723 auto wkt1 = "ENGCRS[\"Undefined Cartesian SRS with unknown unit\",\n" " EDATUM[\"\"],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto wkt2 = "ENGCRS[\"Undefined Cartesian SRS with unknown unit\",\n" " EDATUM[\"Unknown engineering datum\"],\n" " CS[Cartesian,2],\n" " AXIS[\"x\",unspecified,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"y\",unspecified,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj1 = WKTParser().createFromWKT(wkt1); auto crs1 = nn_dynamic_pointer_cast(obj1); ASSERT_TRUE(crs1 != nullptr); auto obj2 = WKTParser().createFromWKT(wkt2); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); EXPECT_TRUE( crs1->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs2->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- static ParametricCSNNPtr createParametricCS() { return ParametricCS::create( PropertyMap(), CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "pressure"), "hPa", AxisDirection::UP, UnitOfMeasure("HectoPascal", 100, UnitOfMeasure::Type::PARAMETRIC))); } // --------------------------------------------------------------------------- static ParametricCRSNNPtr createParametricCRS() { auto datum = ParametricDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Parametric datum")); return ParametricCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Parametric CRS"), datum, createParametricCS()); } // --------------------------------------------------------------------------- TEST(crs, default_identify_method) { EXPECT_TRUE(createParametricCRS()->identify(nullptr).empty()); } // --------------------------------------------------------------------------- TEST(crs, parametricCRS_WKT2) { auto expected = "PARAMETRICCRS[\"Parametric CRS\",\n" " PDATUM[\"Parametric datum\"],\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]"; auto crs = createParametricCRS(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, parametricCRS_WKT1) { EXPECT_THROW( createParametricCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, derivedVerticalCRS_basic) { auto crs = createDerivedVerticalCRS(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_FALSE(crs->isEquivalentTo(crs->baseCRS().get())); EXPECT_FALSE(crs->baseCRS()->isEquivalentTo(crs.get())); } // --------------------------------------------------------------------------- TEST(crs, DerivedVerticalCRS_WKT2) { auto expected = "VERTCRS[\"Derived vertCRS\",\n" " BASEVERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\",\n" " ID[\"EPSG\",5101]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto crs = createDerivedVerticalCRS(); EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, DerivedVerticalCRS_WKT1) { EXPECT_THROW( createDerivedVerticalCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, DerivedVerticalCRS_WKT1_when_simple_derivation) { auto derivingConversion = Conversion::createChangeVerticalUnit(PropertyMap().set( IdentifiedObject::NAME_KEY, "Vertical Axis Unit Conversion")); auto crs = DerivedVerticalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Derived vertCRS"), createVerticalCRS(), derivingConversion, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::FOOT)); auto expected = "VERT_CS[\"Derived vertCRS\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005,\n" " AUTHORITY[\"EPSG\",\"5101\"]],\n" " UNIT[\"foot\",0.3048,\n" " AUTHORITY[\"EPSG\",\"9002\"]],\n" " AXIS[\"Gravity-related height\",UP]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), expected); } // --------------------------------------------------------------------------- static DerivedEngineeringCRSNNPtr createDerivedEngineeringCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"), std::vector{}, std::vector{}); return DerivedEngineeringCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Derived EngineeringCRS"), createEngineeringCRS(), derivingConversion, CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(crs, DerivedEngineeringCRS_WKT2) { auto expected = "ENGCRS[\"Derived EngineeringCRS\",\n" " BASEENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto crs = createDerivedEngineeringCRS(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( CartesianCS::createEastingNorthing(UnitOfMeasure::METRE).get())); EXPECT_TRUE( crs->datum()->isEquivalentTo(createEngineeringCRS()->datum().get())); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); EXPECT_THROW( createDerivedEngineeringCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2015).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, DerivedEngineeringCRS_WKT1) { EXPECT_THROW( createDerivedEngineeringCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- static DerivedParametricCRSNNPtr createDerivedParametricCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"), std::vector{}, std::vector{}); return DerivedParametricCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Derived ParametricCRS"), createParametricCRS(), derivingConversion, createParametricCS()); } // --------------------------------------------------------------------------- TEST(crs, DerivedParametricCRS_WKT2) { auto expected = "PARAMETRICCRS[\"Derived ParametricCRS\",\n" " BASEPARAMCRS[\"Parametric CRS\",\n" " PDATUM[\"Parametric datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"]],\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]"; auto crs = createDerivedParametricCRS(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_TRUE( crs->coordinateSystem()->isEquivalentTo(createParametricCS().get())); EXPECT_TRUE( crs->datum()->isEquivalentTo(createParametricCRS()->datum().get())); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, DerivedParametricCRS_WKT1) { EXPECT_THROW( createDerivedParametricCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- static DerivedTemporalCRSNNPtr createDerivedTemporalCRS() { auto derivingConversion = Conversion::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"), std::vector{}, std::vector{}); return DerivedTemporalCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Derived TemporalCRS"), createDateTimeTemporalCRS(), derivingConversion, createDateTimeTemporalCS()); } // --------------------------------------------------------------------------- TEST(crs, DeriveTemporalCRS_WKT2) { auto expected = "TIMECRS[\"Derived TemporalCRS\",\n" " BASETIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]"; auto crs = createDerivedTemporalCRS(); EXPECT_TRUE(crs->isEquivalentTo(crs.get())); EXPECT_TRUE(crs->shallowClone()->isEquivalentTo(crs.get())); EXPECT_TRUE(!crs->isEquivalentTo(createUnrelatedObject().get())); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( createDateTimeTemporalCS().get())); EXPECT_TRUE(crs->datum()->isEquivalentTo( createDateTimeTemporalCRS()->datum().get())); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(crs, DeriveTemporalCRS_WKT1) { EXPECT_THROW( createDerivedTemporalCRS()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(crs, crs_createBoundCRSToWGS84IfPossible) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); { auto crs_4326 = factory->createCoordinateReferenceSystem("4326"); EXPECT_EQ(crs_4326->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_4326); } { auto crs_32631 = factory->createCoordinateReferenceSystem("32631"); EXPECT_EQ(crs_32631->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_32631); } { // Pulkovo 42 East Germany auto crs_5670 = factory->createCoordinateReferenceSystem("5670"); EXPECT_EQ(crs_5670->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_5670); } { // Pulkovo 42 Romania auto crs_3844 = factory->createCoordinateReferenceSystem("3844"); EXPECT_EQ(crs_3844->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_3844); } { // Pulkovo 42 Poland auto crs_2171 = factory->createCoordinateReferenceSystem("2171"); EXPECT_EQ(crs_2171->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_2171); } { // NTF (Paris) auto crs_4807 = factory->createCoordinateReferenceSystem("4807"); auto bound = crs_4807->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); EXPECT_NE(bound, crs_4807); EXPECT_EQ(bound->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), bound); auto boundCRS = nn_dynamic_pointer_cast(bound); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ( boundCRS->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +ellps=clrk80ign +pm=paris " "+towgs84=-168,-60,320,0,0,0,0 +no_defs +type=crs"); } { // WGS 84 + EGM2008 height auto obj = createFromUserInput("EPSG:4326+3855", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); EXPECT_NE(res, crs); EXPECT_EQ(res->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), res); auto compoundCRS = nn_dynamic_pointer_cast(res); ASSERT_TRUE(compoundCRS != nullptr); EXPECT_EQ(compoundCRS->exportToPROJString( PROJStringFormatter::create().get()), "+proj=longlat +datum=WGS84 +geoidgrids=us_nga_egm08_25.tif " "+geoid_crs=WGS84 +vunits=m +no_defs +type=crs"); } #ifdef disabled_since_epsg_10_035 // There are now too many transformations from NGF-IGN69 height to WGS 84 // for createBoundCRSToWGS84IfPossible() to be able to select a // vertical geoidgrid { // NTF (Paris) / Lambert zone II + NGF-IGN69 height auto crs_7421 = factory->createCoordinateReferenceSystem("7421"); auto res = crs_7421->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); EXPECT_NE(res, crs_7421); EXPECT_EQ(res->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), res); auto compoundCRS = nn_dynamic_pointer_cast(res); ASSERT_TRUE(compoundCRS != nullptr); EXPECT_EQ(compoundCRS->exportToPROJString( PROJStringFormatter::create().get()), "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 " "+x_0=600000 +y_0=2200000 +ellps=clrk80ign +pm=paris " "+towgs84=-168,-60,320,0,0,0,0 +units=m " "+geoidgrids=fr_ign_RAF18.tif +vunits=m +no_defs +type=crs"); } #endif { auto crs = createVerticalCRS(); EXPECT_EQ(crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs); } { auto crs = createCompoundCRS(); EXPECT_EQ(crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs); } { auto factoryIGNF = AuthorityFactory::create(DatabaseContext::create(), "IGNF"); auto crs = factoryIGNF->createCoordinateReferenceSystem("TERA50STEREO"); auto bound = crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); EXPECT_NE(bound, crs); auto boundCRS = nn_dynamic_pointer_cast(bound); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ( boundCRS->exportToPROJString(PROJStringFormatter::create().get()), "+proj=stere +lat_0=-90 +lon_0=140 +k=0.960272946 " "+x_0=300000 +y_0=-2299363.482 +ellps=intl " "+towgs84=324.8,153.6,172.1,0,0,0,0 +units=m +no_defs +type=crs"); } { auto factoryIGNF = AuthorityFactory::create(DatabaseContext::create(), "IGNF"); auto crs = factoryIGNF->createCoordinateReferenceSystem("PGP50"); auto bound = crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); EXPECT_NE(bound, crs); auto boundCRS = nn_dynamic_pointer_cast(bound); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ( boundCRS->exportToPROJString(PROJStringFormatter::create().get()), "+proj=geocent +ellps=intl " "+towgs84=324.8,153.6,172.1,0,0,0,0 +units=m +no_defs +type=crs"); } { auto crs = factory->createCoordinateReferenceSystem("4269"); // NAD83 auto bound = crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); EXPECT_EQ(bound, crs); } { // GDA2020 geocentric auto crs = factory->createCoordinateReferenceSystem("7842"); const auto time_before = ::testing::UnitTest::GetInstance()->elapsed_time(); crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse:: IF_NO_DIRECT_TRANSFORMATION); const auto time_after = ::testing::UnitTest::GetInstance()->elapsed_time(); EXPECT_LE(time_after - time_before, 500); } { // POSGAR 2007: it has 2 helmert shifts to WGS84 (#2356). Don't take // an arbitrary one auto crs_5340 = factory->createCoordinateReferenceSystem("5340"); EXPECT_EQ(crs_5340->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_5340); } { // "MGI 1901 / Balkans zone 7": it has 2 area of validity, one // for Bosnia and Herzegovina/Kosovo/Montenegro/Serbia and another // one for North macedonie auto crs_6316 = factory->createCoordinateReferenceSystem("6316"); EXPECT_EQ(crs_6316->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_6316); } // Check that we get the same result from an EPSG code and a CRS created // from its WKT1 representation. { // Pulkovo 1942 / CS63 zone A2 auto crs = factory->createCoordinateReferenceSystem("2936"); // Two candidate transformations found, so not picking up any EXPECT_EQ(crs->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs); auto wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs_from_wkt = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs_from_wkt != nullptr); EXPECT_EQ(crs_from_wkt->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER), crs_from_wkt); } } // --------------------------------------------------------------------------- TEST(crs, crs_stripVerticalComponent) { { auto crs = GeographicCRS::EPSG_4979->stripVerticalComponent(); auto geogCRS = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(geogCRS != nullptr); EXPECT_EQ(geogCRS->coordinateSystem()->axisList().size(), 2U); } { auto crs = GeographicCRS::EPSG_4326->stripVerticalComponent(); EXPECT_TRUE(crs->isEquivalentTo(GeographicCRS::EPSG_4326.get())); } { std::vector axis{ CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Easting"), "E", AxisDirection::EAST, UnitOfMeasure::METRE), CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Northing"), "N", AxisDirection::NORTH, UnitOfMeasure::METRE), CoordinateSystemAxis::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Height"), "z", AxisDirection::UP, UnitOfMeasure::METRE)}; auto cs(CartesianCS::create(PropertyMap(), axis[0], axis[1], axis[2])); auto projected3DCrs = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 31, true), cs); auto projCRS = nn_dynamic_pointer_cast( projected3DCrs->stripVerticalComponent()); ASSERT_TRUE(projCRS != nullptr); EXPECT_EQ(projCRS->coordinateSystem()->axisList().size(), 2U); } { auto crs3D = createDerivedProjectedCRS()->promoteTo3D(std::string(), nullptr); auto derivedProj3D = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(derivedProj3D != nullptr); EXPECT_EQ(derivedProj3D->coordinateSystem()->axisList().size(), 3U); auto derivedProj2D = nn_dynamic_pointer_cast( derivedProj3D->stripVerticalComponent()); ASSERT_TRUE(derivedProj2D != nullptr); EXPECT_EQ(derivedProj2D->coordinateSystem()->axisList().size(), 2U); } } // --------------------------------------------------------------------------- TEST(crs, crs_alterGeodeticCRS) { { auto crs = GeographicCRS::EPSG_4326->alterGeodeticCRS( GeographicCRS::EPSG_4979); EXPECT_TRUE(crs->isEquivalentTo(GeographicCRS::EPSG_4979.get())); } { auto crs = createProjected()->alterGeodeticCRS(GeographicCRS::EPSG_4979); auto projCRS = dynamic_cast(crs.get()); ASSERT_TRUE(projCRS != nullptr); EXPECT_TRUE( projCRS->baseCRS()->isEquivalentTo(GeographicCRS::EPSG_4979.get())); } { auto crs = createCompoundCRS()->alterGeodeticCRS(GeographicCRS::EPSG_4979); auto compoundCRS = dynamic_cast(crs.get()); ASSERT_TRUE(compoundCRS != nullptr); EXPECT_TRUE(compoundCRS->componentReferenceSystems()[0] ->extractGeographicCRS() ->isEquivalentTo(GeographicCRS::EPSG_4979.get())); } { auto crs = createVerticalCRS()->alterGeodeticCRS(GeographicCRS::EPSG_4979); EXPECT_TRUE(crs->isEquivalentTo(createVerticalCRS().get())); } { auto crs = createDerivedProjectedCRS()->alterGeodeticCRS( GeographicCRS::EPSG_4979); auto derivedProjCRS = dynamic_cast(crs.get()); ASSERT_TRUE(derivedProjCRS != nullptr); EXPECT_TRUE(derivedProjCRS->baseCRS()->baseCRS()->isEquivalentTo( GeographicCRS::EPSG_4979.get())); } } // --------------------------------------------------------------------------- TEST(crs, crs_alterCSLinearUnit) { { auto crs = createProjected()->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); auto projCRS = dynamic_cast(crs.get()); ASSERT_TRUE(projCRS != nullptr); auto cs = projCRS->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_EQ(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[0]->unit().conversionToSI(), 2); EXPECT_EQ(cs->axisList()[1]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[1]->unit().conversionToSI(), 2); } { auto crs = createDerivedProjectedCRS()->alterCSLinearUnit( UnitOfMeasure("my unit", 2)); auto derivedProjCRS = dynamic_cast(crs.get()); ASSERT_TRUE(derivedProjCRS != nullptr); auto cs = derivedProjCRS->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_EQ(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[0]->unit().conversionToSI(), 2); EXPECT_EQ(cs->axisList()[1]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[1]->unit().conversionToSI(), 2); } { auto crs = createDerivedProjectedCRSNorthingEasting(); auto alteredCRS = crs->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); auto leftHandedDerivedCRS = dynamic_cast(alteredCRS.get()); ASSERT_TRUE(leftHandedDerivedCRS != nullptr); auto cs = dynamic_cast( leftHandedDerivedCRS->coordinateSystem().get()); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_EQ(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(cs->axisList()[0]->unit().conversionToSI(), 2); EXPECT_EQ(cs->axisList()[1]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::EAST); EXPECT_EQ(cs->axisList()[1]->unit().conversionToSI(), 2); } { auto crs = GeodeticCRS::EPSG_4978->alterCSLinearUnit( UnitOfMeasure("my unit", 2)); auto geodCRS = dynamic_cast(crs.get()); ASSERT_TRUE(geodCRS != nullptr); auto cs = dynamic_cast(geodCRS->coordinateSystem().get()); ASSERT_EQ(cs->axisList().size(), 3U); EXPECT_EQ(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[0]->unit().conversionToSI(), 2); EXPECT_EQ(cs->axisList()[1]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[1]->unit().conversionToSI(), 2); EXPECT_EQ(cs->axisList()[2]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[2]->unit().conversionToSI(), 2); } { auto crs = GeographicCRS::EPSG_4979->alterCSLinearUnit( UnitOfMeasure("my unit", 2)); auto geogCRS = dynamic_cast(crs.get()); ASSERT_TRUE(geogCRS != nullptr); auto cs = geogCRS->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 3U); EXPECT_NE(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_NE(cs->axisList()[0]->unit().conversionToSI(), 2); EXPECT_NE(cs->axisList()[1]->unit().name(), "my unit"); EXPECT_NE(cs->axisList()[1]->unit().conversionToSI(), 2); EXPECT_EQ(cs->axisList()[2]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[2]->unit().conversionToSI(), 2); } { auto crs = createVerticalCRS()->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); auto vertCRS = dynamic_cast(crs.get()); ASSERT_TRUE(vertCRS != nullptr); auto cs = vertCRS->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[0]->unit().conversionToSI(), 2); } { auto obj = WKTParser().createFromWKT("LOCAL_CS[\"foo\"]"); auto crs = nn_dynamic_pointer_cast(obj); auto alteredCRS = crs->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); auto wkt = alteredCRS->exportToWKT( &(WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) ->setMultiLine(false))); EXPECT_EQ(wkt, "LOCAL_CS[\"foo\",UNIT[\"my unit\",2]," "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]"); } { auto crs = createCompoundCRS()->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); auto compoundCRS = dynamic_cast(crs.get()); ASSERT_TRUE(compoundCRS != nullptr); EXPECT_EQ(compoundCRS->componentReferenceSystems().size(), 2U); for (const auto &subCrs : compoundCRS->componentReferenceSystems()) { auto singleCrs = dynamic_cast(subCrs.get()); ASSERT_TRUE(singleCrs != nullptr); auto cs = singleCrs->coordinateSystem(); ASSERT_GE(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[0]->unit().conversionToSI(), 2); } } { auto crs = BoundCRS::createFromTOWGS84( createProjected(), std::vector{1, 2, 3, 4, 5, 6, 7}) ->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); auto boundCRS = dynamic_cast(crs.get()); ASSERT_TRUE(boundCRS != nullptr); auto baseCRS = boundCRS->baseCRS(); auto projCRS = dynamic_cast(baseCRS.get()); ASSERT_TRUE(projCRS != nullptr); auto cs = projCRS->coordinateSystem(); EXPECT_EQ(cs->axisList()[0]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[0]->unit().conversionToSI(), 2); EXPECT_EQ(cs->axisList()[1]->unit().name(), "my unit"); EXPECT_EQ(cs->axisList()[1]->unit().conversionToSI(), 2); } // Not implemented on parametricCRS auto crs = createParametricCRS()->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); EXPECT_TRUE(createParametricCRS()->isEquivalentTo(crs.get())); } // --------------------------------------------------------------------------- TEST(crs, alterParametersLinearUnit) { { auto crs = createProjected()->alterParametersLinearUnit( UnitOfMeasure("my unit", 2), false); auto wkt = crs->exportToWKT(&WKTFormatter::create()->setMultiLine(false)); EXPECT_TRUE(wkt.find("PARAMETER[\"Longitude of natural origin\",3") != std::string::npos) << wkt; EXPECT_TRUE( wkt.find( "PARAMETER[\"False easting\",500000,UNIT[\"my unit\",2]") != std::string::npos) << wkt; } { auto crs = createProjected()->alterParametersLinearUnit( UnitOfMeasure("my unit", 2), true); auto wkt = crs->exportToWKT(&WKTFormatter::create()->setMultiLine(false)); EXPECT_TRUE( wkt.find( "PARAMETER[\"False easting\",250000,UNIT[\"my unit\",2]") != std::string::npos) << wkt; } } // --------------------------------------------------------------------------- TEST(crs, getNonDeprecated) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); { // No id auto crs = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto list = crs->getNonDeprecated(dbContext); ASSERT_EQ(list.size(), 0U); } { // Non-deprecated auto crs = factory->createGeodeticCRS("4326"); auto list = crs->getNonDeprecated(dbContext); ASSERT_EQ(list.size(), 0U); } { // Non supported CRS type auto crs = BoundCRS::createFromTOWGS84( createProjected(), std::vector{1, 2, 3, 4, 5, 6, 7}); auto list = crs->getNonDeprecated(dbContext); ASSERT_EQ(list.size(), 0U); } { auto crs = factory->createGeodeticCRS("4226"); auto list = crs->getNonDeprecated(dbContext); ASSERT_EQ(list.size(), 2U); } { auto crs = factory->createProjectedCRS("26591"); auto list = crs->getNonDeprecated(dbContext); ASSERT_EQ(list.size(), 1U); } { auto crs = factory->createVerticalCRS("5704"); auto list = crs->getNonDeprecated(dbContext); ASSERT_EQ(list.size(), 1U); } { auto crs = factory->createCompoundCRS("7401"); auto list = crs->getNonDeprecated(dbContext); ASSERT_EQ(list.size(), 1U); } } // --------------------------------------------------------------------------- TEST(crs, promoteTo3D_and_demoteTo2D) { auto dbContext = DatabaseContext::create(); { auto crs = GeographicCRS::EPSG_4326; auto crs3D = crs->promoteTo3D(std::string(), nullptr); auto crs3DAsGeog = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(crs3DAsGeog != nullptr); EXPECT_EQ(crs3DAsGeog->coordinateSystem()->axisList().size(), 3U); EXPECT_TRUE(crs3D->promoteTo3D(std::string(), nullptr) ->isEquivalentTo(crs3D.get())); } { auto crs = GeographicCRS::EPSG_4326; auto crs3D = crs->promoteTo3D(std::string(), dbContext); auto crs3DAsGeog = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(crs3DAsGeog != nullptr); EXPECT_EQ(crs3DAsGeog->coordinateSystem()->axisList().size(), 3U); EXPECT_TRUE(!crs3DAsGeog->identifiers().empty()); auto demoted = crs3DAsGeog->demoteTo2D(std::string(), dbContext); EXPECT_EQ(demoted->coordinateSystem()->axisList().size(), 2U); EXPECT_TRUE(!demoted->identifiers().empty()); } { auto crs = createProjected(); auto crs3D = crs->promoteTo3D(std::string(), nullptr); auto crs3DAsProjected = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(crs3DAsProjected != nullptr); EXPECT_EQ(crs3DAsProjected->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ( crs3DAsProjected->baseCRS()->coordinateSystem()->axisList().size(), 3U); // Check that importing an exported Projected 3D CRS as WKT keeps // the 3D aspect of the baseCRS (see #2122) { WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); crs3DAsProjected->exportToWKT(f.get()); auto obj = WKTParser().createFromWKT(f->toString()); auto crsFromWkt = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crsFromWkt != nullptr); EXPECT_EQ(crsFromWkt->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ( crsFromWkt->baseCRS()->coordinateSystem()->axisList().size(), 3U); } EXPECT_TRUE(crs3D->promoteTo3D(std::string(), nullptr) ->isEquivalentTo(crs3D.get())); auto demoted = crs3DAsProjected->demoteTo2D(std::string(), nullptr); EXPECT_EQ(demoted->coordinateSystem()->axisList().size(), 2U); EXPECT_EQ(demoted->baseCRS()->coordinateSystem()->axisList().size(), 2U); } { auto crs = createProjected(); auto crs3D = crs->promoteTo3D(std::string(), dbContext); auto crs3DAsProjected = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(crs3DAsProjected != nullptr); EXPECT_EQ(crs3DAsProjected->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ( crs3DAsProjected->baseCRS()->coordinateSystem()->axisList().size(), 3U); EXPECT_TRUE(!crs3DAsProjected->baseCRS()->identifiers().empty()); auto demoted = crs3DAsProjected->demoteTo2D(std::string(), dbContext); EXPECT_EQ(demoted->coordinateSystem()->axisList().size(), 2U); EXPECT_EQ(demoted->baseCRS()->coordinateSystem()->axisList().size(), 2U); EXPECT_TRUE(!demoted->baseCRS()->identifiers().empty()); } { auto crs = BoundCRS::createFromTOWGS84( createProjected(), std::vector{1, 2, 3, 4, 5, 6, 7}); auto crs3D = crs->promoteTo3D(std::string(), dbContext); auto crs3DAsBound = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(crs3DAsBound != nullptr); { auto baseCRS = nn_dynamic_pointer_cast(crs3DAsBound->baseCRS()); ASSERT_TRUE(baseCRS != nullptr); EXPECT_EQ(baseCRS->coordinateSystem()->axisList().size(), 3U); auto hubCRS = nn_dynamic_pointer_cast(crs3DAsBound->hubCRS()); ASSERT_TRUE(hubCRS != nullptr); EXPECT_EQ(hubCRS->coordinateSystem()->axisList().size(), 3U); auto transfSrcCRS = nn_dynamic_pointer_cast( crs3DAsBound->transformation()->sourceCRS()); ASSERT_TRUE(transfSrcCRS != nullptr); EXPECT_EQ(transfSrcCRS->coordinateSystem()->axisList().size(), 3U); auto transfDstCRS = nn_dynamic_pointer_cast( crs3DAsBound->transformation()->targetCRS()); ASSERT_TRUE(transfDstCRS != nullptr); EXPECT_EQ(transfDstCRS->coordinateSystem()->axisList().size(), 3U); } auto demoted = crs3DAsBound->demoteTo2D(std::string(), nullptr); auto crs2DAsBound = nn_dynamic_pointer_cast(demoted); ASSERT_TRUE(crs2DAsBound != nullptr); { auto baseCRS = nn_dynamic_pointer_cast(crs2DAsBound->baseCRS()); ASSERT_TRUE(baseCRS != nullptr); EXPECT_EQ(baseCRS->coordinateSystem()->axisList().size(), 2U); auto hubCRS = nn_dynamic_pointer_cast(crs2DAsBound->hubCRS()); ASSERT_TRUE(hubCRS != nullptr); EXPECT_EQ(hubCRS->coordinateSystem()->axisList().size(), 2U); auto transfSrcCRS = nn_dynamic_pointer_cast( crs2DAsBound->transformation()->sourceCRS()); ASSERT_TRUE(transfSrcCRS != nullptr); EXPECT_EQ(transfSrcCRS->coordinateSystem()->axisList().size(), 2U); auto transfDstCRS = nn_dynamic_pointer_cast( crs2DAsBound->transformation()->targetCRS()); ASSERT_TRUE(transfDstCRS != nullptr); EXPECT_EQ(transfDstCRS->coordinateSystem()->axisList().size(), 2U); } } { auto compoundCRS = createCompoundCRS(); auto demoted = compoundCRS->demoteTo2D(std::string(), nullptr); EXPECT_TRUE(dynamic_cast(demoted.get()) != nullptr); } { auto crs = createDerivedGeographicCRS(); auto crs3D = crs->promoteTo3D(std::string(), dbContext); auto crs3DAsDerivedGeog = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(crs3DAsDerivedGeog != nullptr); EXPECT_EQ(crs3DAsDerivedGeog->baseCRS() ->coordinateSystem() ->axisList() .size(), 3U); EXPECT_EQ(crs3DAsDerivedGeog->coordinateSystem()->axisList().size(), 3U); EXPECT_TRUE(crs3DAsDerivedGeog->promoteTo3D(std::string(), nullptr) ->isEquivalentTo(crs3DAsDerivedGeog.get())); auto demoted = crs3DAsDerivedGeog->demoteTo2D(std::string(), dbContext); EXPECT_EQ(demoted->baseCRS()->coordinateSystem()->axisList().size(), 2U); EXPECT_EQ(demoted->coordinateSystem()->axisList().size(), 2U); EXPECT_TRUE(demoted->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(demoted->demoteTo2D(std::string(), nullptr) ->isEquivalentTo(demoted.get())); } { auto crs = createDerivedProjectedCRS(); auto crs3D = crs->promoteTo3D(std::string(), dbContext); auto crs3DAsDerivedProj = nn_dynamic_pointer_cast(crs3D); ASSERT_TRUE(crs3DAsDerivedProj != nullptr); EXPECT_EQ(crs3DAsDerivedProj->baseCRS() ->coordinateSystem() ->axisList() .size(), 3U); EXPECT_EQ(crs3DAsDerivedProj->coordinateSystem()->axisList().size(), 3U); EXPECT_TRUE(crs3DAsDerivedProj->promoteTo3D(std::string(), nullptr) ->isEquivalentTo(crs3DAsDerivedProj.get())); // Check that importing an exported DerivedProjected 3D CRS as WKT keeps // the 3D aspect of the baseCRS (see #3340) { WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019)); crs3DAsDerivedProj->exportToWKT(f.get()); auto obj = WKTParser().createFromWKT(f->toString()); auto crsFromWkt = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crsFromWkt != nullptr); EXPECT_EQ(crsFromWkt->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ( crsFromWkt->baseCRS()->coordinateSystem()->axisList().size(), 3U); } auto demoted = crs3DAsDerivedProj->demoteTo2D(std::string(), dbContext); EXPECT_EQ(demoted->baseCRS()->coordinateSystem()->axisList().size(), 2U); EXPECT_EQ(demoted->coordinateSystem()->axisList().size(), 2U); EXPECT_TRUE(demoted->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(demoted->demoteTo2D(std::string(), nullptr) ->isEquivalentTo(demoted.get())); } } // --------------------------------------------------------------------------- TEST(crs, normalizeForVisualization_derivedprojected_operation) { auto crs = createDerivedProjectedCRSNorthingEasting(); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, crs); auto proj_string = "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=utm +zone=31 " "+ellps=WGS84 +step +proj=unimplemented +step +proj=unitconvert " "+xy_in=m +xy_out=ft +step +proj=axisswap +order=2,1"; ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), proj_string); auto opNormalized = op->normalizeForVisualization(); auto proj_string_normalized = "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " "+proj=utm +zone=31 +ellps=WGS84 +step +proj=unimplemented +step " "+proj=unitconvert +xy_in=m +xy_out=ft"; EXPECT_EQ( opNormalized->exportToPROJString(PROJStringFormatter::create().get()), proj_string_normalized); } // --------------------------------------------------------------------------- TEST(crs, normalizeForVisualization_bound) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); // NTF (Paris) const auto crs_4807 = factory->createCoordinateReferenceSystem("4807"); const auto bound = crs_4807->createBoundCRSToWGS84IfPossible( dbContext, CoordinateOperationContext::IntermediateCRSUse::NEVER); EXPECT_NE(crs_4807, bound); std::string normalized_proj_string = "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step " "+proj=cart +ellps=WGS84 +step +proj=helmert +x=168 +y=60 +z=-320 " "+step +inv +proj=cart +ellps=clrk80ign +step +proj=pop +v_3 +step " "+proj=longlat +ellps=clrk80ign +pm=paris +step +proj=unitconvert " "+xy_in=rad +xy_out=grad"; auto orig_proj_string = normalized_proj_string + " +step +proj=axisswap +order=2,1"; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, bound); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), orig_proj_string); const auto normalizedCrs = bound->normalizeForVisualization(); auto normalizedCrsAsBound = nn_dynamic_pointer_cast(normalizedCrs); ASSERT_TRUE(normalizedCrsAsBound != nullptr); auto singleCrs = nn_dynamic_pointer_cast(normalizedCrsAsBound->baseCRS()); ASSERT_TRUE(singleCrs != nullptr); const auto &normalizedAxisList = singleCrs->coordinateSystem()->axisList(); ASSERT_EQ(normalizedAxisList.size(), 2U); EXPECT_EQ(normalizedAxisList[0]->direction(), osgeo::proj::cs::AxisDirection::EAST); EXPECT_EQ(normalizedAxisList[1]->direction(), osgeo::proj::cs::AxisDirection::NORTH); auto opNormalized = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, normalizedCrs); ASSERT_TRUE(opNormalized != nullptr); EXPECT_EQ( opNormalized->exportToPROJString(PROJStringFormatter::create().get()), normalized_proj_string); } // --------------------------------------------------------------------------- TEST(crs, normalizeForVisualization_derivedprojected) { auto crs = createDerivedProjectedCRSNorthingEasting(); { const auto &axisList = crs->coordinateSystem()->axisList(); ASSERT_EQ(axisList.size(), 2U); EXPECT_EQ(axisList[0]->direction(), osgeo::proj::cs::AxisDirection::NORTH); EXPECT_EQ(axisList[1]->direction(), osgeo::proj::cs::AxisDirection::EAST); } { auto normalized = nn_dynamic_pointer_cast( crs->normalizeForVisualization()); const auto &normalizedAxisList = normalized->coordinateSystem()->axisList(); ASSERT_EQ(normalizedAxisList.size(), 2U); EXPECT_EQ(normalizedAxisList[0]->direction(), osgeo::proj::cs::AxisDirection::EAST); EXPECT_EQ(normalizedAxisList[1]->direction(), osgeo::proj::cs::AxisDirection::NORTH); } { auto normalized3D = nn_dynamic_pointer_cast( crs->promoteTo3D(std::string(), nullptr) ->normalizeForVisualization()); const auto &normalized3DAxisList = normalized3D->coordinateSystem()->axisList(); ASSERT_EQ(normalized3DAxisList.size(), 3U); EXPECT_EQ(normalized3DAxisList[0]->direction(), osgeo::proj::cs::AxisDirection::EAST); EXPECT_EQ(normalized3DAxisList[1]->direction(), osgeo::proj::cs::AxisDirection::NORTH); EXPECT_EQ(normalized3DAxisList[2]->direction(), osgeo::proj::cs::AxisDirection::UP); } } // --------------------------------------------------------------------------- TEST(crs, projected_normalizeForVisualization_do_not_mess_deriving_conversion) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // Something with non standard order auto projCRS = authFactory->createProjectedCRS("3035"); { auto src = GeographicCRS::EPSG_4326; auto op = CoordinateOperationFactory::create()->createOperation(src, projCRS); ASSERT_TRUE(op != nullptr); // Make sure to run that in a scope, so that the object get destroyed op->normalizeForVisualization(); } EXPECT_EQ(projCRS->derivingConversion()->targetCRS().get(), projCRS.get()); } // --------------------------------------------------------------------------- TEST(crs, projected_promoteTo3D_do_not_mess_deriving_conversion) { auto projCRS = createProjected(); { // Make sure to run that in a scope, so that the object get destroyed projCRS->promoteTo3D(std::string(), nullptr); } EXPECT_EQ(projCRS->derivingConversion()->targetCRS().get(), projCRS.get()); } // --------------------------------------------------------------------------- TEST(crs, projected_demoteTo2D_do_not_mess_deriving_conversion) { auto projCRS = nn_dynamic_pointer_cast( createProjected()->promoteTo3D(std::string(), nullptr)); { // Make sure to run that in a scope, so that the object get destroyed projCRS->demoteTo2D(std::string(), nullptr); } EXPECT_EQ(projCRS->derivingConversion()->targetCRS().get(), projCRS.get()); } // --------------------------------------------------------------------------- TEST(crs, projected_alterGeodeticCRS_do_not_mess_deriving_conversion) { auto projCRS = createProjected(); { // Make sure to run that in a scope, so that the object get destroyed projCRS->alterGeodeticCRS(NN_NO_CHECK(projCRS->extractGeographicCRS())); } EXPECT_EQ(projCRS->derivingConversion()->targetCRS().get(), projCRS.get()); } // --------------------------------------------------------------------------- TEST(crs, projected_alterCSLinearUnit_do_not_mess_deriving_conversion) { auto projCRS = createProjected(); { // Make sure to run that in a scope, so that the object get destroyed projCRS->alterCSLinearUnit(UnitOfMeasure("my unit", 2)); } EXPECT_EQ(projCRS->derivingConversion()->targetCRS().get(), projCRS.get()); } // --------------------------------------------------------------------------- TEST(crs, projected_alterParametersLinearUnit_do_not_mess_deriving_conversion) { auto projCRS = createProjected(); { // Make sure to run that in a scope, so that the object get destroyed projCRS->alterParametersLinearUnit(UnitOfMeasure::METRE, false); } EXPECT_EQ(projCRS->derivingConversion()->targetCRS().get(), projCRS.get()); } // --------------------------------------------------------------------------- TEST(crs, projected_is_equivalent_to_with_proj4_extension) { const auto obj1 = PROJStringParser().createFromPROJString( "+proj=omerc +lat_0=50 +alpha=50.0 +no_rot +a=6378144.0 +b=6356759.0 " "+lon_0=8.0 +type=crs"); const auto crs1 = nn_dynamic_pointer_cast(obj1); ASSERT_TRUE(crs1 != nullptr); const auto wkt = crs1->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); const auto obj_from_wkt = WKTParser().createFromWKT(wkt); const auto crs_from_wkt = nn_dynamic_pointer_cast(obj_from_wkt); // Check equivalence of the CRS from PROJ.4 and WKT EXPECT_TRUE(crs1->isEquivalentTo(crs_from_wkt.get(), IComparable::Criterion::EQUIVALENT)); ASSERT_TRUE(crs_from_wkt != nullptr); // Same as above but with different option order const auto obj2 = PROJStringParser().createFromPROJString( "+proj=omerc +lat_0=50 +no_rot +alpha=50.0 +a=6378144.0 +b=6356759.0 " "+lon_0=8.0 +type=crs"); const auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); // Check equivalence of the 2 PROJ.4 based CRS EXPECT_TRUE( crs1->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); // Without +no_rot --> no PROJ.4 extension const auto objNoRot = PROJStringParser().createFromPROJString( "+proj=omerc +lat_0=50 +alpha=50.0 +a=6378144.0 +b=6356759.0 " "+lon_0=8.0 +type=crs"); const auto crsNoRot = nn_dynamic_pointer_cast(objNoRot); ASSERT_TRUE(crsNoRot != nullptr); EXPECT_FALSE(crs1->isEquivalentTo(crsNoRot.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(crsNoRot->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); // Change alpha value const auto objDifferent = PROJStringParser().createFromPROJString( "+proj=omerc +lat_0=50 +alpha=49.0 +no_rot +a=6378144.0 +b=6356759.0 " "+lon_0=8.0 +type=crs"); const auto crsDifferent = nn_dynamic_pointer_cast(objDifferent); ASSERT_TRUE(crsDifferent != nullptr); EXPECT_FALSE(crs1->isEquivalentTo(crsDifferent.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(crs, is_dynamic) { EXPECT_FALSE(GeographicCRS::EPSG_4326->isDynamic()); EXPECT_TRUE( GeographicCRS::EPSG_4326->isDynamic(/*considerWGS84AsDynamic=*/true)); { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createCoordinateReferenceSystem("4326"); EXPECT_FALSE(crs->isDynamic()); EXPECT_TRUE(crs->isDynamic(/*considerWGS84AsDynamic=*/true)); } { auto drf = DynamicGeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), Ellipsoid::WGS84, optional("My anchor"), PrimeMeridian::GREENWICH, Measure(2018.5, UnitOfMeasure::YEAR), optional("My model")); auto crs = GeographicCRS::create( PropertyMap(), drf, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); EXPECT_TRUE(crs->isDynamic()); } EXPECT_FALSE(createVerticalCRS()->isDynamic()); { auto drf = DynamicVerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), optional("My anchor"), optional(), Measure(2018.5, UnitOfMeasure::YEAR), optional("My model")); auto crs = VerticalCRS::create( PropertyMap(), drf, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); EXPECT_TRUE(crs->isDynamic()); } EXPECT_FALSE(createCompoundCRS()->isDynamic()); } proj-9.6.0/test/unit/test_datum.cpp000664 001754 001755 00000062736 14764566077 017252 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" #include "proj/common.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" using namespace osgeo::proj::common; using namespace osgeo::proj::datum; using namespace osgeo::proj::io; using namespace osgeo::proj::metadata; using namespace osgeo::proj::util; namespace { struct UnrelatedObject : public IComparable { UnrelatedObject() = default; bool _isEquivalentTo(const IComparable *, Criterion, const DatabaseContextPtr &) const override { assert(false); return false; } }; static nn> createUnrelatedObject() { return nn_make_shared(); } } // namespace // --------------------------------------------------------------------------- TEST(datum, ellipsoid_from_sphere) { auto ellipsoid = Ellipsoid::createSphere(PropertyMap(), Length(6378137)); EXPECT_FALSE(ellipsoid->inverseFlattening().has_value()); EXPECT_FALSE(ellipsoid->semiMinorAxis().has_value()); EXPECT_FALSE(ellipsoid->semiMedianAxis().has_value()); EXPECT_TRUE(ellipsoid->isSphere()); EXPECT_EQ(ellipsoid->semiMajorAxis(), Length(6378137)); EXPECT_EQ(ellipsoid->celestialBody(), "Earth"); EXPECT_EQ(ellipsoid->computeSemiMinorAxis(), Length(6378137)); EXPECT_EQ(ellipsoid->computedInverseFlattening(), 0); EXPECT_EQ( ellipsoid->exportToPROJString(PROJStringFormatter::create().get()), "+R=6378137"); EXPECT_TRUE(ellipsoid->isEquivalentTo(ellipsoid.get())); EXPECT_FALSE(ellipsoid->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(datum, ellipsoid_non_earth) { auto ellipsoid = Ellipsoid::createSphere(PropertyMap(), Length(1), "Unity sphere"); EXPECT_EQ(ellipsoid->celestialBody(), "Unity sphere"); } // --------------------------------------------------------------------------- TEST(datum, ellipsoid_from_inverse_flattening) { auto ellipsoid = Ellipsoid::createFlattenedSphere( PropertyMap(), Length(6378137), Scale(298.257223563)); EXPECT_TRUE(ellipsoid->inverseFlattening().has_value()); EXPECT_FALSE(ellipsoid->semiMinorAxis().has_value()); EXPECT_FALSE(ellipsoid->semiMedianAxis().has_value()); EXPECT_FALSE(ellipsoid->isSphere()); EXPECT_EQ(ellipsoid->semiMajorAxis(), Length(6378137)); EXPECT_EQ(*ellipsoid->inverseFlattening(), Scale(298.257223563)); EXPECT_EQ(ellipsoid->computeSemiMinorAxis().unit(), ellipsoid->semiMajorAxis().unit()); EXPECT_NEAR(ellipsoid->computeSemiMinorAxis().value(), Length(6356752.31424518).value(), 1e-9); EXPECT_EQ(ellipsoid->computedInverseFlattening(), 298.257223563); EXPECT_EQ( ellipsoid->exportToPROJString(PROJStringFormatter::create().get()), "+ellps=WGS84"); EXPECT_TRUE(ellipsoid->isEquivalentTo(ellipsoid.get())); EXPECT_FALSE(ellipsoid->isEquivalentTo( Ellipsoid::createTwoAxis(PropertyMap(), Length(6378137), Length(6356752.31424518)) .get())); EXPECT_TRUE(ellipsoid->isEquivalentTo( Ellipsoid::createTwoAxis(PropertyMap(), Length(6378137), Length(6356752.31424518)) .get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(Ellipsoid::WGS84->isEquivalentTo( Ellipsoid::GRS1980.get(), IComparable::Criterion::EQUIVALENT)); auto sphere = Ellipsoid::createSphere(PropertyMap(), Length(6378137)); EXPECT_FALSE(Ellipsoid::WGS84->isEquivalentTo( sphere.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(sphere->isEquivalentTo(Ellipsoid::WGS84.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(datum, ellipsoid_from_null_inverse_flattening) { auto ellipsoid = Ellipsoid::createFlattenedSphere( PropertyMap(), Length(6378137), Scale(0)); EXPECT_FALSE(ellipsoid->inverseFlattening().has_value()); EXPECT_FALSE(ellipsoid->semiMinorAxis().has_value()); EXPECT_FALSE(ellipsoid->semiMedianAxis().has_value()); EXPECT_TRUE(ellipsoid->isSphere()); } // --------------------------------------------------------------------------- TEST(datum, ellipsoid_from_semi_minor_axis) { auto ellipsoid = Ellipsoid::createTwoAxis(PropertyMap(), Length(6378137), Length(6356752.31424518)); EXPECT_FALSE(ellipsoid->inverseFlattening().has_value()); EXPECT_TRUE(ellipsoid->semiMinorAxis().has_value()); EXPECT_FALSE(ellipsoid->semiMedianAxis().has_value()); EXPECT_FALSE(ellipsoid->isSphere()); EXPECT_EQ(ellipsoid->semiMajorAxis(), Length(6378137)); EXPECT_EQ(*ellipsoid->semiMinorAxis(), Length(6356752.31424518)); EXPECT_EQ(ellipsoid->computeSemiMinorAxis(), Length(6356752.31424518)); EXPECT_NEAR(ellipsoid->computedInverseFlattening(), 298.257223563, 1e-10); EXPECT_EQ( ellipsoid->exportToPROJString(PROJStringFormatter::create().get()), "+ellps=WGS84"); EXPECT_TRUE(ellipsoid->isEquivalentTo(ellipsoid.get())); EXPECT_FALSE(ellipsoid->isEquivalentTo( Ellipsoid::createFlattenedSphere(PropertyMap(), Length(6378137), Scale(298.257223563)) .get())); EXPECT_TRUE(ellipsoid->isEquivalentTo( Ellipsoid::createFlattenedSphere(PropertyMap(), Length(6378137), Scale(298.257223563)) .get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(datum, prime_meridian_to_PROJString) { EXPECT_EQ(PrimeMeridian::GREENWICH->exportToPROJString( PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ(PrimeMeridian::PARIS->exportToPROJString( PROJStringFormatter::create().get()), "+pm=paris"); EXPECT_EQ(PrimeMeridian::create(PropertyMap(), Angle(3.5)) ->exportToPROJString(PROJStringFormatter::create().get()), "+pm=3.5"); EXPECT_EQ( PrimeMeridian::create(PropertyMap(), Angle(100, UnitOfMeasure::GRAD)) ->exportToPROJString(PROJStringFormatter::create().get()), "+pm=90"); EXPECT_EQ( PrimeMeridian::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Origin meridian"), Angle(0)) ->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_TRUE(PrimeMeridian::GREENWICH->isEquivalentTo( PrimeMeridian::GREENWICH.get())); EXPECT_FALSE(PrimeMeridian::GREENWICH->isEquivalentTo( createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(datum, prime_meridian_to_JSON) { EXPECT_EQ(PrimeMeridian::GREENWICH->exportToJSON( &(JSONFormatter::create()->setSchema(""))), "{\n" " \"type\": \"PrimeMeridian\",\n" " \"name\": \"Greenwich\",\n" " \"longitude\": 0,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8901\n" " }\n" "}"); EXPECT_EQ(PrimeMeridian::PARIS->exportToJSON( &(JSONFormatter::create()->setSchema(""))), "{\n" " \"type\": \"PrimeMeridian\",\n" " \"name\": \"Paris\",\n" " \"longitude\": {\n" " \"value\": 2.5969213,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"grad\",\n" " \"conversion_factor\": 0.015707963267949\n" " }\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8903\n" " }\n" "}"); } // --------------------------------------------------------------------------- TEST(datum, datum_with_ANCHOR) { auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "WGS_1984 with anchor"), Ellipsoid::WGS84, optional("My anchor"), PrimeMeridian::GREENWICH); ASSERT_TRUE(datum->anchorDefinition()); EXPECT_EQ(*datum->anchorDefinition(), "My anchor"); ASSERT_FALSE(datum->anchorEpoch()); auto expected = "DATUM[\"WGS_1984 with anchor\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ANCHOR[\"My anchor\"]]"; EXPECT_EQ(datum->exportToWKT(WKTFormatter::create().get()), expected); } // --------------------------------------------------------------------------- TEST(datum, datum_with_ANCHOREPOCH) { auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my_datum"), Ellipsoid::WGS84, optional(), optional(Measure(2002.5, UnitOfMeasure::YEAR)), PrimeMeridian::GREENWICH); ASSERT_FALSE(datum->anchorDefinition()); ASSERT_TRUE(datum->anchorEpoch()); EXPECT_NEAR(datum->anchorEpoch()->convertToUnit(UnitOfMeasure::YEAR), 2002.5, 1e-8); auto expected = "DATUM[\"my_datum\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ANCHOREPOCH[2002.5]]"; EXPECT_EQ( datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(datum, unknown_datum) { auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my_datum"), Ellipsoid::GRS1980, optional(), optional(), PrimeMeridian::GREENWICH); auto unknown_datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "unknown"), Ellipsoid::GRS1980, optional(), optional(), PrimeMeridian::GREENWICH); EXPECT_FALSE(datum->isEquivalentTo(unknown_datum.get(), IComparable::Criterion::STRICT)); EXPECT_TRUE(datum->isEquivalentTo(unknown_datum.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(unknown_datum->isEquivalentTo(datum.get(), IComparable::Criterion::STRICT)); EXPECT_TRUE(unknown_datum->isEquivalentTo( datum.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(datum, dynamic_geodetic_reference_frame) { auto drf = DynamicGeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), Ellipsoid::WGS84, optional("My anchor"), PrimeMeridian::GREENWICH, Measure(2018.5, UnitOfMeasure::YEAR), optional("My model")); auto expected = "DATUM[\"test\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ANCHOR[\"My anchor\"]]"; EXPECT_EQ(drf->exportToWKT(WKTFormatter::create().get()), expected); auto expected_wtk2_2019 = "DYNAMIC[\n" " FRAMEEPOCH[2018.5],\n" " MODEL[\"My model\"]],\n" "DATUM[\"test\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ANCHOR[\"My anchor\"]]"; EXPECT_EQ( drf->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected_wtk2_2019); EXPECT_TRUE(drf->isEquivalentTo(drf.get())); EXPECT_TRUE( drf->isEquivalentTo(drf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(drf->isEquivalentTo(createUnrelatedObject().get())); // "Same" datum, except that it is a non-dynamic one auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), Ellipsoid::WGS84, optional("My anchor"), PrimeMeridian::GREENWICH); EXPECT_FALSE(datum->isEquivalentTo(drf.get())); EXPECT_FALSE(drf->isEquivalentTo(datum.get())); EXPECT_TRUE( datum->isEquivalentTo(drf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( drf->isEquivalentTo(datum.get(), IComparable::Criterion::EQUIVALENT)); auto unrelated_datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test2"), Ellipsoid::WGS84, optional("My anchor"), PrimeMeridian::GREENWICH); EXPECT_FALSE(unrelated_datum->isEquivalentTo(drf.get())); EXPECT_FALSE(drf->isEquivalentTo(unrelated_datum.get())); EXPECT_FALSE(unrelated_datum->isEquivalentTo( drf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(drf->isEquivalentTo(unrelated_datum.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(datum, ellipsoid_to_PROJString) { EXPECT_EQ(Ellipsoid::WGS84->exportToPROJString( PROJStringFormatter::create().get()), "+ellps=WGS84"); EXPECT_EQ(Ellipsoid::GRS1980->exportToPROJString( PROJStringFormatter::create().get()), "+ellps=GRS80"); EXPECT_EQ( Ellipsoid::createFlattenedSphere( PropertyMap(), Length(10, UnitOfMeasure("km", 1000)), Scale(0.5)) ->exportToPROJString(PROJStringFormatter::create().get()), "+a=10000 +rf=0.5"); EXPECT_EQ(Ellipsoid::createTwoAxis(PropertyMap(), Length(10, UnitOfMeasure("km", 1000)), Length(5, UnitOfMeasure("km", 1000))) ->exportToPROJString(PROJStringFormatter::create().get()), "+a=10000 +b=5000"); } // --------------------------------------------------------------------------- TEST(datum, temporal_datum_WKT2) { auto datum = TemporalDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Gregorian calendar"), DateTime::create("0000-01-01"), TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN); auto expected = "TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]]"; EXPECT_EQ(datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); EXPECT_THROW( datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); EXPECT_TRUE(datum->isEquivalentTo(datum.get())); EXPECT_FALSE(datum->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(datum, temporal_datum_time_origin_non_ISO8601) { auto datum = TemporalDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Gregorian calendar"), DateTime::create("0001 January 1st"), TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN); auto expected = "TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[\"0001 January 1st\"]]"; EXPECT_EQ(datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); } // --------------------------------------------------------------------------- TEST(datum, temporal_datum_WKT2_2019) { auto datum = TemporalDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Gregorian calendar"), DateTime::create("0000-01-01"), TemporalDatum::CALENDAR_PROLEPTIC_GREGORIAN); auto expected = "TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]"; EXPECT_EQ( datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(datum, dynamic_vertical_reference_frame) { auto drf = DynamicVerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), optional("My anchor"), optional(), Measure(2018.5, UnitOfMeasure::YEAR), optional("My model")); auto expected = "VDATUM[\"test\",\n" " ANCHOR[\"My anchor\"]]"; EXPECT_EQ(drf->exportToWKT(WKTFormatter::create().get()), expected); auto expected_wtk2_2019 = "DYNAMIC[\n" " FRAMEEPOCH[2018.5],\n" " MODEL[\"My model\"]],\n" "VDATUM[\"test\",\n" " ANCHOR[\"My anchor\"]]"; EXPECT_EQ( drf->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected_wtk2_2019); EXPECT_TRUE(drf->isEquivalentTo(drf.get())); EXPECT_TRUE( drf->isEquivalentTo(drf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(drf->isEquivalentTo(createUnrelatedObject().get())); // "Same" datum, except that it is a non-dynamic one auto datum = VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), optional("My anchor"), optional()); EXPECT_FALSE(datum->isEquivalentTo(drf.get())); EXPECT_FALSE(drf->isEquivalentTo(datum.get())); EXPECT_TRUE( datum->isEquivalentTo(drf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( drf->isEquivalentTo(datum.get(), IComparable::Criterion::EQUIVALENT)); auto unrelated_datum = VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test2"), optional("My anchor"), optional()); EXPECT_FALSE(unrelated_datum->isEquivalentTo(drf.get())); EXPECT_FALSE(drf->isEquivalentTo(unrelated_datum.get())); EXPECT_FALSE(unrelated_datum->isEquivalentTo( drf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(drf->isEquivalentTo(unrelated_datum.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(datum, datum_ensemble) { auto otherDatum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "other datum"), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH); auto ensemble = DatumEnsemble::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), std::vector{GeodeticReferenceFrame::EPSG_6326, otherDatum}, PositionalAccuracy::create("100")); EXPECT_EQ(ensemble->datums().size(), 2U); EXPECT_EQ(ensemble->positionalAccuracy()->value(), "100"); EXPECT_EQ( ensemble->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), "ENSEMBLE[\"test\",\n" " MEMBER[\"World Geodetic System 1984\",\n" " ID[\"EPSG\",6326]],\n" " MEMBER[\"other datum\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ENSEMBLEACCURACY[100]]"); EXPECT_EQ( ensemble->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2015).get()), "DATUM[\"test\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]]]"); } // --------------------------------------------------------------------------- TEST(datum, datum_ensemble_vertical) { auto ensemble = DatumEnsemble::create( PropertyMap(), std::vector{ VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "vdatum1")), VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "vdatum2"))}, PositionalAccuracy::create("100")); EXPECT_EQ( ensemble->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), "ENSEMBLE[\"unnamed\",\n" " MEMBER[\"vdatum1\"],\n" " MEMBER[\"vdatum2\"],\n" " ENSEMBLEACCURACY[100]]"); } // --------------------------------------------------------------------------- TEST(datum, datum_ensemble_exceptions) { // No datum EXPECT_THROW(DatumEnsemble::create(PropertyMap(), std::vector{}, PositionalAccuracy::create("100")), Exception); // Single datum EXPECT_THROW(DatumEnsemble::create( PropertyMap(), std::vector{GeodeticReferenceFrame::EPSG_6326}, PositionalAccuracy::create("100")), Exception); auto vdatum = VerticalReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "vdatum1")); // Different datum type EXPECT_THROW( DatumEnsemble::create( PropertyMap(), std::vector{GeodeticReferenceFrame::EPSG_6326, vdatum}, PositionalAccuracy::create("100")), Exception); // Different datum type EXPECT_THROW( DatumEnsemble::create( PropertyMap(), std::vector{vdatum, GeodeticReferenceFrame::EPSG_6326}, PositionalAccuracy::create("100")), Exception); // Different ellipsoid EXPECT_THROW(DatumEnsemble::create( PropertyMap(), std::vector{GeodeticReferenceFrame::EPSG_6326, GeodeticReferenceFrame::EPSG_6267}, PositionalAccuracy::create("100")), Exception); // Different prime meridian EXPECT_THROW(DatumEnsemble::create( PropertyMap(), std::vector{ GeodeticReferenceFrame::EPSG_6326, GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "other datum"), Ellipsoid::WGS84, optional(), PrimeMeridian::PARIS)}, PositionalAccuracy::create("100")), Exception); } // --------------------------------------------------------------------------- TEST(datum, edatum) { auto datum = EngineeringDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Engineering datum"), optional("my anchor")); auto expected = "EDATUM[\"Engineering datum\",\n" " ANCHOR[\"my anchor\"]]"; EXPECT_EQ(datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); } // --------------------------------------------------------------------------- TEST(datum, pdatum) { auto datum = ParametricDatum::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Parametric datum"), optional("my anchor")); auto expected = "PDATUM[\"Parametric datum\",\n" " ANCHOR[\"my anchor\"]]"; EXPECT_EQ(datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), expected); } proj-9.6.0/test/unit/test_defmodel.cpp000664 001754 001755 00000162011 14764566077 017702 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test deformation model * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2020, 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 "gtest_include.h" // to be able to use internal::toString #define FROM_PROJ_CPP #include "proj/internal/internal.hpp" #include "proj.h" #include "proj_internal.h" // Silence C4702 (unreachable code) due to some dummy implementation of the // interfaces of defmodel.hpp #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4702) #endif #define PROJ_COMPILATION #define DEFORMATON_MODEL_NAMESPACE TestDeformationModel #include "transformations/defmodel.hpp" using namespace DEFORMATON_MODEL_NAMESPACE; namespace { constexpr double modelMinX = 158; constexpr double modelMinY = -58; constexpr double modelMaxX = 194; constexpr double modelMaxY = -25; static json getMinValidContent() { json j; j["file_type"] = "GeoTIFF"; j["format_version"] = "1.0"; j["source_crs"] = "EPSG:4959"; j["target_crs"] = "EPSG:7907"; j["definition_crs"] = "EPSG:4959"; j["extent"]["type"] = "bbox"; j["extent"]["parameters"] = { {"bbox", {modelMinX, modelMinY, modelMaxX, modelMaxY}}}; j["time_extent"]["first"] = "1900-01-01T00:00:00Z"; j["time_extent"]["last"] = "2050-01-01T00:00:00Z"; j["components"] = json::array(); return j; } // --------------------------------------------------------------------------- constexpr int IDX_CONSTANT = 0; constexpr int IDX_VELOCITY = 1; constexpr int IDX_STEP = 2; constexpr int IDX_REVERSE_STEP = 3; constexpr int IDX_PIECEWISE = 4; constexpr int IDX_EXPONENTIAL = 5; static json getFullValidContent() { json j(getMinValidContent()); j["name"] = "name"; j["version"] = "version"; j["publication_date"] = "2018-07-01T00:00:00Z"; j["license"] = "license"; j["description"] = "description"; j["authority"]["name"] = "authority_name"; j["authority"]["url"] = "authority_url"; j["authority"]["address"] = "authority_address"; j["authority"]["email"] = "authority_email"; j["links"] = {{{"href", "href"}, {"rel", "rel"}, {"type", "type"}, {"title", "title"}}}; j["reference_epoch"] = "2000-01-01T00:00:00Z"; j["uncertainty_reference_epoch"] = "2018-12-15T00:00:00Z"; j["horizontal_offset_method"] = "addition"; j["horizontal_offset_unit"] = "metre"; j["vertical_offset_unit"] = "metre"; j["horizontal_uncertainty_type"] = "circular 95% confidence limit"; j["horizontal_uncertainty_unit"] = "metre"; j["vertical_uncertainty_type"] = "95% confidence limit"; j["vertical_uncertainty_unit"] = "metre"; j["components"] = {{ {"description", "description"}, {"displacement_type", "horizontal"}, {"uncertainty_type", "none"}, {"horizontal_uncertainty", 0.01}, {"vertical_uncertainty", 0.02}, {"extent", {{"type", "bbox"}, {"parameters", {{"bbox", {modelMinX, modelMinY, modelMaxX, modelMaxY}}}}}}, {"spatial_model", { {"type", "GeoTIFF"}, {"interpolation_method", "bilinear"}, {"filename", "nzgd2000-ndm-grid02.tif"}, {"md5_checksum", "49fce8ab267be2c8d00d43683060a032"}, }}, {"time_function", { {"type", "constant"}, {"parameters", json::object()}, }}, }}; j["components"].push_back(j["components"][0]); j["components"][IDX_VELOCITY]["time_function"] = { {"type", "velocity"}, {"parameters", {{"reference_epoch", "2000-01-01T00:00:00Z"}}}, }; j["components"].push_back(j["components"][0]); j["components"][IDX_STEP]["time_function"] = { {"type", "step"}, {"parameters", {{"step_epoch", "2000-01-01T00:00:00Z"}}}, }; j["components"].push_back(j["components"][0]); j["components"][IDX_REVERSE_STEP]["time_function"] = { {"type", "reverse_step"}, {"parameters", {{"step_epoch", "2000-01-01T00:00:00Z"}}}, }; j["components"].push_back(j["components"][0]); j["components"][IDX_PIECEWISE]["time_function"] = { {"type", "piecewise"}, {"parameters", {{"before_first", "zero"}, {"after_last", "constant"}, {"model", {{{"epoch", "2016-01-01T00:00:00Z"}, {"scale_factor", 0.5}}, {{"epoch", "2017-01-01T00:00:00Z"}, {"scale_factor", 1.0}}, {{"epoch", "2017-01-01T00:00:00Z"}, {"scale_factor", 2.0}}, {{"epoch", "2018-01-01T00:00:00Z"}, {"scale_factor", 1.0}}}}}}}; j["components"].push_back(j["components"][0]); j["components"][IDX_EXPONENTIAL]["time_function"] = { {"type", "exponential"}, {"parameters", { {"reference_epoch", "2000-01-01T00:00:00Z"}, {"end_epoch", "2001-01-01T00:00:00Z"}, {"relaxation_constant", 2.0}, {"before_scale_factor", 0.0}, {"initial_scale_factor", 1.0}, {"final_scale_factor", 3.0}, }}, }; return j; } // --------------------------------------------------------------------------- TEST(defmodel, basic) { EXPECT_THROW(MasterFile::parse("foo"), ParsingException); EXPECT_THROW(MasterFile::parse("null"), ParsingException); EXPECT_THROW(MasterFile::parse("{}"), ParsingException); const auto jMinValid(getMinValidContent()); { auto mf = MasterFile::parse(jMinValid.dump()); EXPECT_EQ(mf->fileType(), "GeoTIFF"); EXPECT_EQ(mf->formatVersion(), "1.0"); EXPECT_EQ(mf->sourceCRS(), "EPSG:4959"); EXPECT_EQ(mf->targetCRS(), "EPSG:7907"); EXPECT_EQ(mf->definitionCRS(), "EPSG:4959"); EXPECT_EQ(mf->extent().minx(), modelMinX); EXPECT_EQ(mf->extent().miny(), modelMinY); EXPECT_EQ(mf->extent().maxx(), modelMaxX); EXPECT_EQ(mf->extent().maxy(), modelMaxY); EXPECT_EQ(mf->timeExtent().first.toString(), "1900-01-01T00:00:00Z"); EXPECT_EQ(mf->timeExtent().last.toString(), "2050-01-01T00:00:00Z"); } // Check that removing one of each required key causes an exception for (const auto &kv : jMinValid.items()) { json jcopy(jMinValid); jcopy.erase(kv.key()); EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["definition_crs"] = "EPSG:4326"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["file_type"] = 1; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["extent"].erase("type"); EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["extent"].erase("parameters"); EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["extent"]["parameters"].clear(); EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["extent"]["parameters"].erase("bbox"); EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["extent"]["parameters"]["bbox"] = "foo"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["extent"]["parameters"]["bbox"] = {0, 1, 2}; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["extent"]["parameters"]["bbox"] = {0, 1, 2, "foo"}; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["time_extent"] = "foo"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["time_extent"].erase("first"); EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jMinValid); jcopy["time_extent"].erase("last"); EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } } // --------------------------------------------------------------------------- TEST(defmodel, full) { const auto jFullValid(getFullValidContent()); auto mf = MasterFile::parse(jFullValid.dump()); EXPECT_EQ(mf->name(), "name"); EXPECT_EQ(mf->version(), "version"); EXPECT_EQ(mf->publicationDate(), "2018-07-01T00:00:00Z"); EXPECT_EQ(mf->license(), "license"); EXPECT_EQ(mf->description(), "description"); EXPECT_EQ(mf->authority().name, "authority_name"); EXPECT_EQ(mf->authority().url, "authority_url"); EXPECT_EQ(mf->authority().address, "authority_address"); EXPECT_EQ(mf->authority().email, "authority_email"); EXPECT_EQ(mf->links().size(), 1U); EXPECT_EQ(mf->links()[0].href, "href"); EXPECT_EQ(mf->links()[0].rel, "rel"); EXPECT_EQ(mf->links()[0].type, "type"); EXPECT_EQ(mf->links()[0].title, "title"); EXPECT_EQ(mf->referenceEpoch(), "2000-01-01T00:00:00Z"); EXPECT_EQ(mf->uncertaintyReferenceEpoch(), "2018-12-15T00:00:00Z"); EXPECT_EQ(mf->horizontalOffsetUnit(), "metre"); EXPECT_EQ(mf->verticalOffsetUnit(), "metre"); EXPECT_EQ(mf->horizontalUncertaintyType(), "circular 95% confidence limit"); EXPECT_EQ(mf->horizontalUncertaintyUnit(), "metre"); EXPECT_EQ(mf->verticalUncertaintyType(), "95% confidence limit"); EXPECT_EQ(mf->verticalUncertaintyUnit(), "metre"); EXPECT_EQ(mf->horizontalOffsetMethod(), "addition"); ASSERT_EQ(mf->components().size(), 6U); { const auto &comp = mf->components()[IDX_CONSTANT]; EXPECT_EQ(comp.description(), "description"); EXPECT_EQ(comp.displacementType(), "horizontal"); EXPECT_EQ(comp.uncertaintyType(), "none"); EXPECT_EQ(comp.horizontalUncertainty(), 0.01); EXPECT_EQ(comp.verticalUncertainty(), 0.02); EXPECT_EQ(comp.extent().minx(), modelMinX); EXPECT_EQ(comp.extent().miny(), modelMinY); EXPECT_EQ(comp.extent().maxx(), modelMaxX); EXPECT_EQ(comp.extent().maxy(), modelMaxY); EXPECT_EQ(comp.spatialModel().type, "GeoTIFF"); EXPECT_EQ(comp.spatialModel().interpolationMethod, "bilinear"); EXPECT_EQ(comp.spatialModel().filename, "nzgd2000-ndm-grid02.tif"); EXPECT_EQ(comp.spatialModel().md5Checksum, "49fce8ab267be2c8d00d43683060a032"); ASSERT_NE(comp.timeFunction(), nullptr); ASSERT_EQ(comp.timeFunction()->type, "constant"); } { const auto &comp = mf->components()[IDX_VELOCITY]; ASSERT_NE(comp.timeFunction(), nullptr); ASSERT_EQ(comp.timeFunction()->type, "velocity"); const auto velocity = static_cast( comp.timeFunction()); EXPECT_EQ(velocity->referenceEpoch.toString(), "2000-01-01T00:00:00Z"); } { const auto &comp = mf->components()[IDX_STEP]; ASSERT_NE(comp.timeFunction(), nullptr); ASSERT_EQ(comp.timeFunction()->type, "step"); const auto step = static_cast( comp.timeFunction()); EXPECT_EQ(step->stepEpoch.toString(), "2000-01-01T00:00:00Z"); } { const auto &comp = mf->components()[IDX_REVERSE_STEP]; ASSERT_NE(comp.timeFunction(), nullptr); ASSERT_EQ(comp.timeFunction()->type, "reverse_step"); const auto step = static_cast( comp.timeFunction()); EXPECT_EQ(step->stepEpoch.toString(), "2000-01-01T00:00:00Z"); } { const auto &comp = mf->components()[IDX_PIECEWISE]; ASSERT_NE(comp.timeFunction(), nullptr); ASSERT_EQ(comp.timeFunction()->type, "piecewise"); const auto piecewise = static_cast( comp.timeFunction()); EXPECT_EQ(piecewise->beforeFirst, "zero"); EXPECT_EQ(piecewise->afterLast, "constant"); EXPECT_EQ(piecewise->model.size(), 4U); EXPECT_EQ(piecewise->model[0].epoch.toString(), "2016-01-01T00:00:00Z"); EXPECT_EQ(piecewise->model[0].scaleFactor, 0.5); } { const auto &comp = mf->components()[IDX_EXPONENTIAL]; ASSERT_NE(comp.timeFunction(), nullptr); ASSERT_EQ(comp.timeFunction()->type, "exponential"); const auto exponential = static_cast( comp.timeFunction()); EXPECT_EQ(exponential->referenceEpoch.toString(), "2000-01-01T00:00:00Z"); EXPECT_EQ(exponential->endEpoch.toString(), "2001-01-01T00:00:00Z"); EXPECT_EQ(exponential->relaxationConstant, 2.0); EXPECT_EQ(exponential->beforeScaleFactor, 0.0); EXPECT_EQ(exponential->initialScaleFactor, 1.0); EXPECT_EQ(exponential->finalScaleFactor, 3.0); } } // --------------------------------------------------------------------------- TEST(defmodel, error_cases) { const auto jFullValid(getFullValidContent()); { json jcopy(jFullValid); jcopy["horizontal_offset_method"] = "unsupported"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["horizontal_offset_unit"] = "unsupported"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["vertical_offset_unit"] = "unsupported"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["components"][IDX_CONSTANT]["spatial_model"] ["interpolation_method"] = "unsupported"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["components"][IDX_CONSTANT]["displacement_type"] = "unsupported"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["model"] = "foo"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["before_first"] = "illegal"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["after_last"] = "illegal"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } { json jcopy(jFullValid); jcopy["components"][0]["time_function"]["type"] = "unknown"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } // Unsupported combination { json jcopy(jFullValid); jcopy["horizontal_offset_method"] = "geocentric"; EXPECT_NO_THROW(MasterFile::parse(jcopy.dump())); } { json jcopy(jFullValid); jcopy["horizontal_offset_unit"] = "degree"; EXPECT_NO_THROW(MasterFile::parse(jcopy.dump())); } { json jcopy(jFullValid); jcopy["horizontal_offset_method"] = "geocentric"; jcopy["horizontal_offset_unit"] = "degree"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } // Unsupported combination { json jcopy(jFullValid); jcopy["components"][IDX_VELOCITY]["spatial_model"] ["interpolation_method"] = "geocentric_bilinear"; EXPECT_NO_THROW(MasterFile::parse(jcopy.dump())); } { json jcopy(jFullValid); jcopy["horizontal_offset_unit"] = "degree"; EXPECT_NO_THROW(MasterFile::parse(jcopy.dump())); } { json jcopy(jFullValid); jcopy["components"][IDX_VELOCITY]["spatial_model"] ["interpolation_method"] = "geocentric_bilinear"; jcopy["horizontal_offset_unit"] = "degree"; EXPECT_THROW(MasterFile::parse(jcopy.dump()), ParsingException); } } // --------------------------------------------------------------------------- TEST(defmodel, ISO8601ToDecimalYear) { EXPECT_EQ(ISO8601ToDecimalYear("2000-01-01T00:00:00Z"), 2000.0); EXPECT_EQ(ISO8601ToDecimalYear("2000-02-29T12:00:00Z"), 2000.0 + ((31 + 28) * 86400. + 12 * 3600) / (366 * 86400)); EXPECT_EQ(ISO8601ToDecimalYear("2000-12-31T23:59:59Z"), 2000.0 + (366 * 86400 - 1.) / (366 * 86400)); EXPECT_EQ(ISO8601ToDecimalYear("2001-01-01T00:00:00Z"), 2001.0); EXPECT_EQ(ISO8601ToDecimalYear("2001-12-31T23:59:59Z"), 2001.0 + (365 * 86400 - 1.) / (365 * 86400)); EXPECT_THROW(ISO8601ToDecimalYear(""), ParsingException); EXPECT_THROW(ISO8601ToDecimalYear("0000-01-01T00:00:00Z"), ParsingException); EXPECT_THROW(ISO8601ToDecimalYear("2001-02-29T00:00:00Z"), ParsingException); EXPECT_THROW(ISO8601ToDecimalYear("2000-13-01T00:00:00Z"), ParsingException); EXPECT_THROW(ISO8601ToDecimalYear("2000-01-32T00:00:00Z"), ParsingException); EXPECT_THROW(ISO8601ToDecimalYear("2000-01-01T24:00:00Z"), ParsingException); EXPECT_THROW(ISO8601ToDecimalYear("2000-01-01T00:60:00Z"), ParsingException); EXPECT_THROW(ISO8601ToDecimalYear("2000-01-01T00:00:61Z"), ParsingException); } // --------------------------------------------------------------------------- TEST(defmodel, evaluate_constant) { const auto jFullValid(getFullValidContent()); const auto mf = MasterFile::parse(jFullValid.dump()); const auto &comp = mf->components()[IDX_CONSTANT]; EXPECT_EQ(comp.timeFunction()->evaluateAt(1999.0), 1.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.0), 1.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2001.0), 1.0); } // --------------------------------------------------------------------------- TEST(defmodel, evaluate_velocity) { const auto jFullValid(getFullValidContent()); const auto mf = MasterFile::parse(jFullValid.dump()); const auto &comp = mf->components()[IDX_VELOCITY]; EXPECT_EQ(comp.timeFunction()->evaluateAt(1999.0), -1.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.0), 0.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2001.0), 1.0); } // --------------------------------------------------------------------------- TEST(defmodel, evaluate_step) { const auto jFullValid(getFullValidContent()); const auto mf = MasterFile::parse(jFullValid.dump()); const auto &comp = mf->components()[IDX_STEP]; EXPECT_EQ(comp.timeFunction()->evaluateAt(1999.99), 0.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.00), 1.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.01), 1.0); } // --------------------------------------------------------------------------- TEST(defmodel, evaluate_reverse_step) { const auto jFullValid(getFullValidContent()); const auto mf = MasterFile::parse(jFullValid.dump()); const auto &comp = mf->components()[IDX_REVERSE_STEP]; EXPECT_EQ(comp.timeFunction()->evaluateAt(1999.99), -1.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.00), 0.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.01), 0.0); } // --------------------------------------------------------------------------- TEST(defmodel, evaluate_piecewise) { const auto jFullValid(getFullValidContent()); { const auto mf = MasterFile::parse(jFullValid.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2015.99), 0.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2016.00), 0.5); EXPECT_EQ(comp.timeFunction()->evaluateAt(2016.5), 0.75); EXPECT_NEAR(comp.timeFunction()->evaluateAt(2017 - 1e-9), 1.0, 1e-9); EXPECT_EQ(comp.timeFunction()->evaluateAt(2017.0), 2.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2017.5), 1.5); EXPECT_EQ(comp.timeFunction()->evaluateAt(2018.0), 1.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2019.0), 1.0); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["before_first"] = "zero"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2015.5), 0.0); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["before_first"] = "constant"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2015.5), 0.5); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["before_first"] = "linear"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2015.5), 0.25); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["after_last"] = "zero"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2018.5), 0.0); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["after_last"] = "constant"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2018.5), 1.0); } { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["after_last"] = "linear"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2018.5), 0.5); } // No epoch { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["model"] .clear(); const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2015.5), 0.0); } // Just one epoch { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["model"] = { {{"epoch", "2016-01-01T00:00:00Z"}, {"scale_factor", 0.5}}}; jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["before_first"] = "linear"; jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["after_last"] = "linear"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2015.5), 0.5); EXPECT_EQ(comp.timeFunction()->evaluateAt(2016.5), 0.5); } // Two identical epochs { json jcopy(jFullValid); jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["model"] = { {{"epoch", "2016-01-01T00:00:00Z"}, {"scale_factor", 0.5}}, {{"epoch", "2016-01-01T00:00:00Z"}, {"scale_factor", 1.0}}}; jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["before_first"] = "linear"; jcopy["components"][IDX_PIECEWISE]["time_function"]["parameters"] ["after_last"] = "linear"; const auto mf = MasterFile::parse(jcopy.dump()); const auto &comp = mf->components()[IDX_PIECEWISE]; EXPECT_EQ(comp.timeFunction()->evaluateAt(2015.5), 0.5); EXPECT_EQ(comp.timeFunction()->evaluateAt(2016.5), 1.0); } } // --------------------------------------------------------------------------- TEST(defmodel, evaluate_exponential) { const auto jFullValid(getFullValidContent()); const auto mf = MasterFile::parse(jFullValid.dump()); const auto &comp = mf->components()[IDX_EXPONENTIAL]; EXPECT_EQ(comp.timeFunction()->evaluateAt(1999.99), 0.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.00), 1.0); EXPECT_EQ(comp.timeFunction()->evaluateAt(2000.50), 1.0 + (3.0 - 1.0) * (1.0 - std::exp(-(2000.50 - 2000.00) / 2.0))); EXPECT_EQ(comp.timeFunction()->evaluateAt(2001.00), 1.0 + (3.0 - 1.0) * (1.0 - std::exp(-(2001.00 - 2000.00) / 2.0))); EXPECT_EQ(comp.timeFunction()->evaluateAt(2002.00), 1.0 + (3.0 - 1.0) * (1.0 - std::exp(-(2001.00 - 2000.00) / 2.0))); } // --------------------------------------------------------------------------- inline double RadToDeg(double d) { return d / DEG_TO_RAD_CONSTANT; } // --------------------------------------------------------------------------- TEST(defmodel, evaluator_horizontal_unit_degree) { json j(getMinValidContent()); j["horizontal_offset_method"] = "addition"; j["horizontal_offset_unit"] = "degree"; constexpr double tFactor = 0.5; constexpr double gridMinX = 160; constexpr double gridMinY = -50; constexpr double gridMaxX = 190; constexpr double gridMaxY = -30; j["components"] = { {{"displacement_type", "horizontal"}, {"uncertainty_type", "none"}, {"extent", {{"type", "bbox"}, {"parameters", {{"bbox", {gridMinX, gridMinY, gridMaxX, gridMaxY}}}}}}, {"spatial_model", { {"type", "GeoTIFF"}, {"interpolation_method", "bilinear"}, {"filename", "bla.tif"}, }}, {"time_function", {{"type", "piecewise"}, {"parameters", {{"before_first", "zero"}, {"after_last", "zero"}, {"model", {{{"epoch", "2010-01-01T00:00:00Z"}, {"scale_factor", tFactor}}, {{"epoch", "2020-01-01T00:00:00Z"}, {"scale_factor", tFactor}}}}}}}}}}; constexpr int iQueriedX = 1; constexpr int iQueriedY = 3; constexpr double longOffsetQueriedX = 0.01; constexpr double longOffsetQueriedXp1 = 0.02; constexpr double latOffsetQueriedY = 0.03; constexpr double latOffsetQueriedYp1 = 0.04; constexpr double zOffsetQueriedXY = 10.; constexpr double zOffsetQueriedXp1Y = 11.; constexpr double zOffsetQueriedXYp1 = 11.; constexpr double zOffsetQueriedXp1Yp1 = 12.; constexpr double gridResX = 2; constexpr double gridResY = 0.5; struct Grid : public GridPrototype { bool getLongLatOffset(int ix, int iy, double &longOffsetRadian, double &latOffsetRadian) const { if (ix == iQueriedX) { longOffsetRadian = DegToRad(longOffsetQueriedX); } else if (ix == iQueriedX + 1) { longOffsetRadian = DegToRad(longOffsetQueriedXp1); } else { return false; } if (iy == iQueriedY) { latOffsetRadian = DegToRad(latOffsetQueriedY); } else if (iy == iQueriedY + 1) { latOffsetRadian = DegToRad(latOffsetQueriedYp1); } else { return false; } return true; } bool getZOffset(int ix, int iy, double &zOffset) const { if (ix == iQueriedX && iy == iQueriedY) { zOffset = zOffsetQueriedXY; } else if (ix == iQueriedX + 1 && iy == iQueriedY) { zOffset = zOffsetQueriedXp1Y; } else if (ix == iQueriedX && iy == iQueriedY + 1) { zOffset = zOffsetQueriedXYp1; } else if (ix == iQueriedX + 1 && iy == iQueriedY + 1) { zOffset = zOffsetQueriedXp1Yp1; } else { return false; } return true; } bool getLongLatZOffset(int ix, int iy, double &longOffsetRadian, double &latOffsetRadian, double &zOffset) const { return getLongLatOffset(ix, iy, longOffsetRadian, latOffsetRadian) && getZOffset(ix, iy, zOffset); } #ifdef DEBUG_DEFMODEL std::string name() const { return std::string(); } #endif }; struct GridSet : public GridSetPrototype { Grid grid{}; GridSet() { grid.minx = DegToRad(gridMinX); grid.miny = DegToRad(gridMinY); grid.resx = DegToRad(gridResX); grid.resy = DegToRad(gridResY); grid.width = 1 + static_cast(0.5 + (gridMaxX - gridMinX) / gridResX); grid.height = 1 + static_cast(0.5 + (gridMaxY - gridMinY) / gridResY); } const Grid *gridAt(double /*x */, double /* y */) { return &grid; } }; struct EvaluatorIface : public EvaluatorIfacePrototype { std::unique_ptr open(const std::string &filename) { if (filename != "bla.tif") return nullptr; return std::unique_ptr(new GridSet()); } bool isGeographicCRS(const std::string & /* crsDef */) { return true; } #ifdef DEBUG_DEFMODEL void log(const std::string & /* msg */) {} #endif }; EvaluatorIface iface; Evaluator eval(MasterFile::parse(j.dump()), iface, 1, 1); double newLong; double newLat; double newZ; constexpr double tValid = 2018; constexpr double EPS = 1e-9; constexpr double zVal = 100; // Query on exact grid intersection { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude + tFactor * longOffsetQueriedX, EPS); EXPECT_NEAR(RadToDeg(newLat), lat + tFactor * latOffsetQueriedY, EPS); EXPECT_EQ(newZ, zVal); } // Query between grid points { constexpr double alphaX = 0.25; constexpr double alphaY = 0.125; const double longitude = gridMinX + iQueriedX * gridResX + alphaX * gridResX; const double lat = gridMinY + iQueriedY * gridResY + alphaY * gridResY; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude + tFactor * (longOffsetQueriedX + alphaX * (longOffsetQueriedXp1 - longOffsetQueriedX)), EPS); EXPECT_NEAR( RadToDeg(newLat), lat + tFactor * (latOffsetQueriedY + alphaY * (latOffsetQueriedYp1 - latOffsetQueriedY)), EPS); EXPECT_EQ(newZ, zVal); } // Longitude < model min { const double longitude = modelMinX - 1e-1; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_FALSE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); } // Longitude > model max { const double longitude = modelMaxX + 1e-1; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_FALSE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); } // Latitude < model min { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = modelMinY - 1e-1; EXPECT_FALSE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); } // Latitude > model max { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = modelMaxY + 1e-1; EXPECT_FALSE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); } // Before timeExtent.first { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_FALSE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, 1000, newLong, newLat, newZ)); } // After timeExtent.last { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_FALSE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, 3000, newLong, newLat, newZ)); } // Longitude < grid min { const double longitude = gridMinX - 1e-1; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude, EPS); EXPECT_NEAR(RadToDeg(newLat), lat, EPS); EXPECT_EQ(newZ, zVal); } // Longitude > grid max { const double longitude = gridMaxX + 1e-1; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude, EPS); EXPECT_NEAR(RadToDeg(newLat), lat, EPS); EXPECT_EQ(newZ, zVal); } // Latitude < grid min { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = gridMinY - 1e-1; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude, EPS); EXPECT_NEAR(RadToDeg(newLat), lat, EPS); EXPECT_EQ(newZ, zVal); } // Latitude > grid max { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = gridMaxY + 1e-1; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude, EPS); EXPECT_NEAR(RadToDeg(newLat), lat, EPS); EXPECT_EQ(newZ, zVal); } // Time function values to zero { const double longitude = gridMinX + iQueriedX * gridResX; const double lat = gridMinY + iQueriedY * gridResY; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, 2000, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude, EPS); EXPECT_NEAR(RadToDeg(newLat), lat, EPS); EXPECT_EQ(newZ, zVal); } // Test vertical j["components"][0]["displacement_type"] = "vertical"; j["vertical_offset_unit"] = "metre"; Evaluator evalVertical( MasterFile::parse(j.dump()), iface, 1, 1); { constexpr double alphaX = 0.25; constexpr double alphaY = 0.125; const double longitude = gridMinX + iQueriedX * gridResX + alphaX * gridResX; const double lat = gridMinY + iQueriedY * gridResY + alphaY * gridResY; EXPECT_TRUE(evalVertical.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude, EPS); EXPECT_NEAR(RadToDeg(newLat), lat, EPS); const double zBottom = zOffsetQueriedXY + alphaX * (zOffsetQueriedXp1Y - zOffsetQueriedXY); const double zTop = zOffsetQueriedXYp1 + alphaX * (zOffsetQueriedXp1Yp1 - zOffsetQueriedXYp1); EXPECT_NEAR( newZ, zVal + tFactor * (zBottom + alphaY * (zTop - zBottom)), EPS); } // Test 3d j["components"][0]["displacement_type"] = "3d"; j["vertical_offset_unit"] = "metre"; Evaluator eval3d(MasterFile::parse(j.dump()), iface, 1, 1); { constexpr double alphaX = 0.25; constexpr double alphaY = 0.125; const double longitude = gridMinX + iQueriedX * gridResX + alphaX * gridResX; const double lat = gridMinY + iQueriedY * gridResY + alphaY * gridResY; EXPECT_TRUE(eval3d.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); EXPECT_NEAR(RadToDeg(newLong), longitude + tFactor * (longOffsetQueriedX + alphaX * (longOffsetQueriedXp1 - longOffsetQueriedX)), EPS); EXPECT_NEAR( RadToDeg(newLat), lat + tFactor * (latOffsetQueriedY + alphaY * (latOffsetQueriedYp1 - latOffsetQueriedY)), EPS); const double zBottom = zOffsetQueriedXY + alphaX * (zOffsetQueriedXp1Y - zOffsetQueriedXY); const double zTop = zOffsetQueriedXYp1 + alphaX * (zOffsetQueriedXp1Yp1 - zOffsetQueriedXYp1); EXPECT_NEAR( newZ, zVal + tFactor * (zBottom + alphaY * (zTop - zBottom)), EPS); } } // --------------------------------------------------------------------------- inline void DeltaLongLatToEastingNorthing(double phi, double dlam, double dphi, double a, double b, double &de, double &dn) { const double sinphi = sin(phi); const double cosphi = cos(phi); const double a2 = a * a; const double b2 = b * b; const double X = a2 * (cosphi * cosphi) + b2 * (sinphi * sinphi); const double sqrtX = sqrt(X); de = dlam * (a2 * cosphi) / sqrtX; dn = dphi * a2 * b2 / (sqrtX * X); } // --------------------------------------------------------------------------- TEST(defmodel, evaluator_horizontal_unit_metre) { json j(getMinValidContent()); j["horizontal_offset_method"] = "addition"; j["horizontal_offset_unit"] = "metre"; j["vertical_offset_unit"] = "metre"; constexpr double tFactor = 0.5; constexpr double gridMinX = 165.8; constexpr double gridMinY = -37.5; constexpr double gridMaxX = 166.2; constexpr double gridMaxY = -37.2; constexpr double gridResX = gridMaxX - gridMinX; constexpr double gridResY = gridMaxY - gridMinY; constexpr int extraPointX = 1; constexpr int extraPointY = 1; j["components"] = { {{"displacement_type", "horizontal"}, {"uncertainty_type", "none"}, {"extent", {{"type", "bbox"}, {"parameters", {{"bbox", {gridMinX - extraPointX * gridResX, gridMinY - extraPointY * gridResY, gridMaxX, gridMaxY}}}}}}, {"spatial_model", { {"type", "GeoTIFF"}, {"interpolation_method", "XXXXXXX"}, {"filename", "bla.tif"}, }}, {"time_function", {{"type", "piecewise"}, {"parameters", {{"before_first", "zero"}, {"after_last", "zero"}, {"model", {{{"epoch", "2010-01-01T00:00:00Z"}, {"scale_factor", tFactor}}, {{"epoch", "2020-01-01T00:00:00Z"}, {"scale_factor", tFactor}}}}}}}}}}; struct Grid : public GridPrototype { bool getEastingNorthingOffset(int ix, int iy, double &eastingOffset, double &northingOffset) const { ix -= extraPointX; iy -= extraPointY; if (ix == -1) ix = 0; if (iy == -1) iy = 0; if (ix == 0 && iy == 0) { eastingOffset = 0.4f; northingOffset = -0.2f; } else if (ix == 1 && iy == 0) { eastingOffset = 0.5f; northingOffset = -0.25f; } else if (ix == 0 && iy == 1) { eastingOffset = 0.8f; northingOffset = -0.4f; } else if (ix == 1 && iy == 1) { eastingOffset = 1.f; northingOffset = -0.3f; } else { return false; } return true; } bool getZOffset(int ix, int iy, double &zOffset) const { ix -= extraPointX; iy -= extraPointY; if (ix == -1) ix = 0; if (iy == -1) iy = 0; if (ix == 0 && iy == 0) { zOffset = 0.84f; } else if (ix == 1 && iy == 0) { zOffset = 0.75f; } else if (ix == 0 && iy == 1) { zOffset = 0.36f; } else if (ix == 1 && iy == 1) { zOffset = 0.f; } else { return false; } return true; } bool getEastingNorthingZOffset(int ix, int iy, double &eastingOffset, double &northingOffset, double &zOffset) const { return getEastingNorthingOffset(ix, iy, eastingOffset, northingOffset) && getZOffset(ix, iy, zOffset); } #ifdef DEBUG_DEFMODEL std::string name() const { return std::string(); } #endif }; struct GridSet : public GridSetPrototype { Grid grid{}; GridSet() { grid.minx = DegToRad(gridMinX - extraPointX * gridResX); grid.miny = DegToRad(gridMinY - extraPointY * gridResY); grid.resx = DegToRad(gridResX); grid.resy = DegToRad(gridResY); grid.width = 2 + extraPointX; grid.height = 2 + extraPointY; } const Grid *gridAt(double /*x */, double /* y */) { return &grid; } }; struct EvaluatorIface : public EvaluatorIfacePrototype { std::unique_ptr open(const std::string &filename) { if (filename != "bla.tif") return nullptr; return std::unique_ptr(new GridSet()); } bool isGeographicCRS(const std::string & /* crsDef */) { return true; } #ifdef DEBUG_DEFMODEL void log(const std::string & /* msg */) {} #endif void geographicToGeocentric(double lam, double phi, double height, double a, double /*b*/, double es, double &X, double &Y, double &Z) { PJ_CONTEXT *ctx = proj_context_create(); PJ *cart = proj_create( ctx, ("+proj=cart +a=" + osgeo::proj::internal::toString(a, 18) + " +es=" + osgeo::proj::internal::toString(es, 18)) .c_str()); PJ_LPZ lpz; lpz.lam = lam; lpz.phi = phi; lpz.z = height; PJ_XYZ xyz = cart->fwd3d(lpz, cart); X = xyz.x; Y = xyz.y; Z = xyz.z; proj_destroy(cart); proj_context_destroy(ctx); } void geocentricToGeographic(double X, double Y, double Z, double a, double /*b*/, double es, double &lam, double &phi, double &height) { PJ_CONTEXT *ctx = proj_context_create(); PJ *cart = proj_create( ctx, ("+proj=cart +a=" + osgeo::proj::internal::toString(a, 18) + " +es=" + osgeo::proj::internal::toString(es, 18)) .c_str()); PJ_XYZ xyz; xyz.x = X; xyz.y = Y; xyz.z = Z; PJ_LPZ lpz = cart->inv3d(xyz, cart); lam = lpz.lam; phi = lpz.phi; height = lpz.z; proj_destroy(cart); proj_context_destroy(ctx); } }; EvaluatorIface iface; constexpr double a = 6378137; constexpr double b = 6356752.314140; constexpr double tValid = 2018; constexpr double zVal = 100; const struct { double longitude; double lat; double expected_de; double expected_dn; double expected_dz; const char *displacement_type; const char *interpolation_method; } testPoints[] = { {gridMinX - extraPointX * gridResX - 1e-11, gridMinY - extraPointY * gridResY - 1e-11, 0.4, -0.2, 0, "horizontal", "bilinear"}, {gridMinX, gridMinY, 0.4, -0.2, 0, "horizontal", "bilinear"}, {gridMaxX, gridMinY, 0.5, -0.25, 0, "horizontal", "bilinear"}, {gridMinX, gridMaxY, 0.8, -0.4, 0, "horizontal", "bilinear"}, {gridMaxX, gridMaxY, 1, -0.3, 0, "horizontal", "bilinear"}, {gridMaxX + 1e-11, gridMaxY + 1e-11, 1, -0.3, 0, "horizontal", "bilinear"}, {165.9, -37.3, 0.70833334, -0.32083334, 0, "horizontal", "bilinear"}, {165.9, -37.3, 0.70833334, -0.32083334, 0.4525, "3d", "bilinear"}, {gridMinX, gridMinY, 0.4, -0.2, 0, "horizontal", "geocentric_bilinear"}, {gridMaxX, gridMinY, 0.5, -0.25, 0, "horizontal", "geocentric_bilinear"}, {gridMinX, gridMaxY, 0.8, -0.4, 0, "horizontal", "geocentric_bilinear"}, {gridMaxX, gridMaxY, 1, -0.3, 0, "horizontal", "geocentric_bilinear"}, {165.9, -37.3, 0.7083692044608846, -0.3209642339711405, 0, "horizontal", "geocentric_bilinear"}, {165.9, -37.3, 0.7083692044608846, -0.3209642339711405, 0.4525, "3d", "geocentric_bilinear"}, }; for (const auto &testPoint : testPoints) { j["components"][0]["displacement_type"] = testPoint.displacement_type; j["components"][0]["spatial_model"]["interpolation_method"] = testPoint.interpolation_method; Evaluator eval( MasterFile::parse(j.dump()), iface, a, b); const double longitude = testPoint.longitude; const double lat = testPoint.lat; double newLong; double newLat; double newZ; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)) << longitude << " " << lat << " " << testPoint.displacement_type << testPoint.interpolation_method; EXPECT_NEAR(newZ - zVal, tFactor * testPoint.expected_dz, 1e-8) << longitude << " " << lat << " " << testPoint.displacement_type << testPoint.interpolation_method; double de; double dn; DeltaLongLatToEastingNorthing(DegToRad(lat), newLong - DegToRad(longitude), newLat - DegToRad(lat), a, b, de, dn); EXPECT_NEAR(de, tFactor * testPoint.expected_de, 1e-8) << longitude << " " << lat << " " << testPoint.displacement_type << testPoint.interpolation_method; EXPECT_NEAR(dn, tFactor * testPoint.expected_dn, 1e-8) << longitude << " " << lat << " " << testPoint.displacement_type << testPoint.interpolation_method; if (longitude == gridMinX && lat == gridMinY) { // Redo the exact same test, to test caching double newLong2; double newLat2; double newZ2; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong2, newLat2, newZ2)); EXPECT_EQ(newLong2, newLong); EXPECT_EQ(newLat2, newLat); EXPECT_EQ(newZ2, newZ); // Shift in longitude EXPECT_TRUE(eval.forward(iface, DegToRad(longitude - gridResX / 2), DegToRad(lat), zVal, tValid, newLong2, newLat2, newZ2)); // Redo test at original position EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong2, newLat2, newZ2)); EXPECT_EQ(newLong2, newLong); EXPECT_EQ(newLat2, newLat); EXPECT_EQ(newZ2, newZ); // Shift in latitude EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat - gridResY / 2), zVal, tValid, newLong2, newLat2, newZ2)); // Redo test at original position EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong2, newLat2, newZ2)); EXPECT_EQ(newLong2, newLong); EXPECT_EQ(newLat2, newLat); EXPECT_EQ(newZ2, newZ); } } // Test inverse() { j["horizontal_offset_method"] = "addition"; j["components"][0]["displacement_type"] = "3d"; j["components"][0]["spatial_model"]["interpolation_method"] = "bilinear"; Evaluator eval( MasterFile::parse(j.dump()), iface, a, b); const double longitude = 165.9; const double lat = -37.3; double newLong; double newLat; double newZ; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); double invLongitude; double invLat; double invZ; EXPECT_TRUE(eval.inverse(iface, newLong, newLat, newZ, tValid, invLongitude, invLat, invZ)); EXPECT_NEAR(RadToDeg(invLongitude), longitude, 1e-10); EXPECT_NEAR(RadToDeg(invLat), lat, 1e-10); EXPECT_NEAR(invZ, zVal, 1e-4); } // Test horizontal_offset_method = geocentric { j["horizontal_offset_method"] = "geocentric"; j["components"][0]["displacement_type"] = "3d"; j["components"][0]["spatial_model"]["interpolation_method"] = "bilinear"; Evaluator eval( MasterFile::parse(j.dump()), iface, a, b); const double longitude = gridMinX; const double lat = gridMinY; double newLong; double newLat; double newZ; EXPECT_TRUE(eval.forward(iface, DegToRad(longitude), DegToRad(lat), zVal, tValid, newLong, newLat, newZ)); double de; double dn; constexpr double expected_de = 0.40000000948081327; constexpr double expected_dn = -0.19999999810542682; DeltaLongLatToEastingNorthing(DegToRad(lat), newLong - DegToRad(longitude), newLat - DegToRad(lat), a, b, de, dn); EXPECT_NEAR(de, tFactor * expected_de, 1e-10); EXPECT_NEAR(dn, tFactor * expected_dn, 1e-9); EXPECT_NEAR(newZ - zVal, tFactor * 0.84, 1e-4); } } // --------------------------------------------------------------------------- TEST(defmodel, evaluator_projected_crs) { json j(getMinValidContent()); j["horizontal_offset_method"] = "addition"; j["horizontal_offset_unit"] = "metre"; j["vertical_offset_unit"] = "metre"; constexpr double gridMinX = 10000; constexpr double gridMinY = 20000; constexpr double gridMaxX = 30000; constexpr double gridMaxY = 40000; constexpr double gridResX = gridMaxX - gridMinX; constexpr double gridResY = gridMaxY - gridMinY; j["extent"]["parameters"] = { {"bbox", {gridMinX, gridMinY, gridMaxX, gridMaxY}}}; j["components"] = { {{"displacement_type", "horizontal"}, {"uncertainty_type", "none"}, {"extent", {{"type", "bbox"}, {"parameters", {{"bbox", {gridMinX, gridMinY, gridMaxX, gridMaxY}}}}}}, {"spatial_model", { {"type", "GeoTIFF"}, {"interpolation_method", "bilinear"}, {"filename", "bla.tif"}, }}, {"time_function", {{"type", "constant"}}}}}; struct Grid : public GridPrototype { bool getEastingNorthingOffset(int ix, int iy, double &eastingOffset, double &northingOffset) const { if (ix == 0 && iy == 0) { eastingOffset = 0.4; northingOffset = -0.2; } else if (ix == 1 && iy == 0) { eastingOffset = 0.5; northingOffset = -0.25; } else if (ix == 0 && iy == 1) { eastingOffset = 0.8; northingOffset = -0.4; } else if (ix == 1 && iy == 1) { eastingOffset = 1.; northingOffset = -0.3; } else { return false; } return true; } #ifdef DEBUG_DEFMODEL std::string name() const { return std::string(); } #endif }; struct GridSet : public GridSetPrototype { Grid grid{}; GridSet() { grid.minx = gridMinX; grid.miny = gridMinY; grid.resx = gridResX; grid.resy = gridResY; grid.width = 2; grid.height = 2; } const Grid *gridAt(double /*x */, double /* y */) { return &grid; } }; struct EvaluatorIface : public EvaluatorIfacePrototype { std::unique_ptr open(const std::string &filename) { if (filename != "bla.tif") return nullptr; return std::unique_ptr(new GridSet()); } bool isGeographicCRS(const std::string & /* crsDef */) { return false; } #ifdef DEBUG_DEFMODEL void log(const std::string & /* msg */) {} #endif }; EvaluatorIface iface; constexpr double a = 6378137; constexpr double b = 6356752.314140; constexpr double tValid = 2018; constexpr double zVal = 100; Evaluator eval(MasterFile::parse(j.dump()), iface, a, b); double newX; double newY; double newZ; EXPECT_TRUE(eval.forward(iface, gridMinX, gridMinY, zVal, tValid, newX, newY, newZ)); EXPECT_NEAR(newX - gridMinX, 0.4, 1e-8); EXPECT_NEAR(newY - gridMinY, -0.2, 1e-8); EXPECT_NEAR(newZ - zVal, 0, 1e-8); { json jcopy(j); jcopy["horizontal_offset_unit"] = "degree"; EXPECT_THROW((Evaluator( MasterFile::parse(jcopy.dump()), iface, a, b)), EvaluatorException); } { json jcopy(j); jcopy["horizontal_offset_method"] = "geocentric"; EXPECT_THROW((Evaluator( MasterFile::parse(jcopy.dump()), iface, a, b)), EvaluatorException); } { json jcopy(j); jcopy["components"][0]["spatial_model"]["interpolation_method"] = "geocentric_bilinear"; EXPECT_THROW((Evaluator( MasterFile::parse(jcopy.dump()), iface, a, b)), EvaluatorException); } } } // namespace #ifdef _MSC_VER #pragma warning(pop) #endif proj-9.6.0/test/unit/test_factory.cpp000664 001754 001755 00000667070 14764566077 017611 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" #include "test_primitives.hpp" #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinates.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include #include #ifdef _MSC_VER #include #else #include #endif using namespace osgeo::proj::common; using namespace osgeo::proj::coordinates; using namespace osgeo::proj::crs; using namespace osgeo::proj::cs; using namespace osgeo::proj::datum; using namespace osgeo::proj::io; using namespace osgeo::proj::metadata; using namespace osgeo::proj::operation; using namespace osgeo::proj::util; namespace { // --------------------------------------------------------------------------- TEST(factory, databasecontext_create) { DatabaseContext::create(); #ifndef _WIN32 // For some reason, no exception is thrown on AppVeyor Windows EXPECT_THROW(DatabaseContext::create("/i/do_not/exist"), FactoryException); #endif } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createObject) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createObject("-1"), NoSuchAuthorityCodeException); EXPECT_THROW(factory->createObject("4326"), FactoryException); // area and crs } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createUnitOfMeasure_linear) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createUnitOfMeasure("-1"), NoSuchAuthorityCodeException); auto uom = factory->createUnitOfMeasure("9001"); EXPECT_EQ(uom->name(), "metre"); EXPECT_EQ(uom->type(), UnitOfMeasure::Type::LINEAR); EXPECT_EQ(uom->conversionToSI(), 1.0); EXPECT_EQ(uom->codeSpace(), "EPSG"); EXPECT_EQ(uom->code(), "9001"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createUnitOfMeasure_linear_us_survey_foot) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto uom = factory->createUnitOfMeasure("9003"); EXPECT_EQ(uom->conversionToSI(), 12. / 39.37); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createUnitOfMeasure_angular) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto uom = factory->createUnitOfMeasure("9102"); EXPECT_EQ(uom->name(), "degree"); EXPECT_EQ(uom->type(), UnitOfMeasure::Type::ANGULAR); EXPECT_EQ(uom->conversionToSI(), UnitOfMeasure::DEGREE.conversionToSI()); EXPECT_EQ(uom->codeSpace(), "EPSG"); EXPECT_EQ(uom->code(), "9102"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createUnitOfMeasure_angular_9107) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto uom = factory->createUnitOfMeasure("9107"); EXPECT_EQ(uom->name(), "degree minute second"); EXPECT_EQ(uom->type(), UnitOfMeasure::Type::ANGULAR); EXPECT_EQ(uom->conversionToSI(), UnitOfMeasure::DEGREE.conversionToSI()); EXPECT_EQ(uom->codeSpace(), "EPSG"); EXPECT_EQ(uom->code(), "9107"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createUnitOfMeasure_scale) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto uom = factory->createUnitOfMeasure("1028"); EXPECT_EQ(uom->name(), "parts per billion"); EXPECT_EQ(uom->type(), UnitOfMeasure::Type::SCALE); EXPECT_EQ(uom->conversionToSI(), 1e-9); EXPECT_EQ(uom->codeSpace(), "EPSG"); EXPECT_EQ(uom->code(), "1028"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createUnitOfMeasure_time) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto uom = factory->createUnitOfMeasure("1029"); EXPECT_EQ(uom->name(), "year"); EXPECT_EQ(uom->type(), UnitOfMeasure::Type::TIME); EXPECT_EQ(uom->conversionToSI(), 31556925.445); EXPECT_EQ(uom->codeSpace(), "EPSG"); EXPECT_EQ(uom->code(), "1029"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createPrimeMeridian) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createPrimeMeridian("-1"), NoSuchAuthorityCodeException); EXPECT_TRUE(nn_dynamic_pointer_cast( AuthorityFactory::create(DatabaseContext::create(), "ESRI") ->createObject("108900")) != nullptr); auto pm = factory->createPrimeMeridian("8903"); ASSERT_EQ(pm->identifiers().size(), 1U); EXPECT_EQ(pm->identifiers()[0]->code(), "8903"); EXPECT_EQ(*(pm->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(pm->name()->description()), "Paris"); EXPECT_EQ(pm->longitude(), Angle(2.5969213, UnitOfMeasure::GRAD)); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_identifyBodyFromSemiMajorAxis) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_EQ(factory->identifyBodyFromSemiMajorAxis(6378137, 1e-5), "Earth"); EXPECT_THROW(factory->identifyBodyFromSemiMajorAxis(1, 1e-5), FactoryException); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createEllipsoid) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createEllipsoid("-1"), NoSuchAuthorityCodeException); auto ellipsoid = factory->createEllipsoid("7030"); ASSERT_EQ(ellipsoid->identifiers().size(), 1U); EXPECT_EQ(ellipsoid->identifiers()[0]->code(), "7030"); EXPECT_EQ(*(ellipsoid->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(ellipsoid->name()->description()), "WGS 84"); EXPECT_TRUE(ellipsoid->inverseFlattening().has_value()); EXPECT_EQ(ellipsoid->semiMajorAxis(), Length(6378137)); EXPECT_EQ(*ellipsoid->inverseFlattening(), Scale(298.257223563)); EXPECT_EQ(ellipsoid->celestialBody(), "Earth"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createEllipsoid_sphere) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ellipsoid = factory->createEllipsoid("7035"); EXPECT_TRUE(ellipsoid->isSphere()); EXPECT_EQ(ellipsoid->semiMajorAxis(), Length(6371000)); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createEllipsoid_with_semi_minor_axis) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ellipsoid = factory->createEllipsoid("7011"); EXPECT_TRUE(ellipsoid->semiMinorAxis().has_value()); EXPECT_EQ(ellipsoid->semiMajorAxis(), Length(6378249.2)); EXPECT_EQ(*ellipsoid->semiMinorAxis(), Length(6356515.0)); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createExtent) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createExtent("-1"), NoSuchAuthorityCodeException); auto extent = factory->createExtent("1262"); EXPECT_EQ(*(extent->description()), "World."); const auto &geogElts = extent->geographicElements(); ASSERT_EQ(geogElts.size(), 1U); auto bbox = nn_dynamic_pointer_cast(geogElts[0]); ASSERT_TRUE(bbox != nullptr); EXPECT_EQ(bbox->westBoundLongitude(), -180); EXPECT_EQ(bbox->eastBoundLongitude(), 180); EXPECT_EQ(bbox->northBoundLatitude(), 90); EXPECT_EQ(bbox->southBoundLatitude(), -90); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createExtent_no_bbox) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto extent = factory->createExtent("1361"); // Sudan - south. Deprecated EXPECT_EQ(*(extent->description()), "Sudan - south."); const auto &geogElts = extent->geographicElements(); EXPECT_TRUE(geogElts.empty()); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createGeodeticDatum) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createGeodeticDatum("-1"), NoSuchAuthorityCodeException); auto grf = factory->createGeodeticDatum("6326"); EXPECT_TRUE(nn_dynamic_pointer_cast(grf) == nullptr); ASSERT_EQ(grf->identifiers().size(), 1U); EXPECT_EQ(grf->identifiers()[0]->code(), "6326"); EXPECT_EQ(*(grf->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(grf->name()->description()), "World Geodetic System 1984"); EXPECT_TRUE(grf->ellipsoid()->isEquivalentTo( factory->createEllipsoid("7030").get())); EXPECT_TRUE(grf->primeMeridian()->isEquivalentTo( factory->createPrimeMeridian("8901").get())); ASSERT_EQ(grf->domains().size(), 1U); auto domain = grf->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1262").get())); EXPECT_FALSE(grf->publicationDate().has_value()); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createGeodeticDatum_with_publication_date) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // North American Datum 1983 auto grf = factory->createGeodeticDatum("6269"); EXPECT_TRUE(nn_dynamic_pointer_cast(grf) == nullptr); EXPECT_TRUE(grf->publicationDate().has_value()); EXPECT_EQ(grf->publicationDate()->toString(), "1986-01-01"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createDynamicGeodeticDatum) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto grf = factory->createGeodeticDatum("1165"); // ITRF 2014 auto dgrf = nn_dynamic_pointer_cast(grf); ASSERT_TRUE(dgrf != nullptr); EXPECT_EQ(dgrf->frameReferenceEpoch().value(), 2010.0); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createVerticalDatum) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createVerticalDatum("-1"), NoSuchAuthorityCodeException); auto vrf = factory->createVerticalDatum("1027"); ASSERT_EQ(vrf->identifiers().size(), 1U); EXPECT_EQ(vrf->identifiers()[0]->code(), "1027"); EXPECT_EQ(*(vrf->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(vrf->name()->description()), "EGM2008 geoid"); auto domain = vrf->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1262").get())); EXPECT_TRUE(vrf->publicationDate().has_value()); EXPECT_EQ(vrf->publicationDate()->toString(), "2008-01-01"); EXPECT_TRUE(!vrf->anchorEpoch().has_value()); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createVerticalDatum_with_anchor_epoch) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // "Canadian Geodetic Vertical Datum of 2013 (CGG2013a) epoch 2010" auto vrf = factory->createVerticalDatum("1256"); EXPECT_TRUE(vrf->anchorEpoch().has_value()); EXPECT_NEAR(vrf->anchorEpoch()->convertToUnit(UnitOfMeasure::YEAR), 2010.0, 1e-6); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createDynamicVerticalDatum) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto grf = factory->createVerticalDatum("1096"); // Norway Normal Null 2000 auto dvrf = nn_dynamic_pointer_cast(grf); ASSERT_TRUE(dvrf != nullptr); EXPECT_EQ(dvrf->frameReferenceEpoch().value(), 2000.0); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createEngineeringDatum) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createEngineeringDatum("-1"), NoSuchAuthorityCodeException); auto datum = factory->createEngineeringDatum("1134"); ASSERT_EQ(datum->identifiers().size(), 1U); EXPECT_EQ(datum->identifiers()[0]->code(), "1134"); EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(datum->name()->description()), "Christmas Island Datum 1985"); auto domain = datum->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("4169").get())); EXPECT_TRUE(datum->publicationDate().has_value()); EXPECT_EQ(datum->publicationDate()->toString(), "1985-01-01"); EXPECT_TRUE(!datum->anchorEpoch().has_value()); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createDatum) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createDatum("-1"), NoSuchAuthorityCodeException); EXPECT_TRUE(factory->createDatum("6326")->isEquivalentTo( factory->createGeodeticDatum("6326").get())); EXPECT_TRUE(factory->createDatum("1027")->isEquivalentTo( factory->createVerticalDatum("1027").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createDatumEnsembleGeodetic) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createDatumEnsemble("-1"), NoSuchAuthorityCodeException); EXPECT_THROW(factory->createDatumEnsemble("6326", "vertical_datum"), NoSuchAuthorityCodeException); auto ensemble = factory->createDatumEnsemble("6326"); EXPECT_EQ(ensemble->nameStr(), "World Geodetic System 1984 ensemble"); ASSERT_EQ(ensemble->identifiers().size(), 1U); EXPECT_EQ(ensemble->identifiers()[0]->code(), "6326"); EXPECT_EQ(*(ensemble->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(ensemble->datums().size(), 8U); EXPECT_EQ(ensemble->positionalAccuracy()->value(), "2.0"); ASSERT_TRUE(!ensemble->domains().empty()); auto domain = ensemble->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1262").get())); { // Without using db auto datum = ensemble->asDatum(nullptr); EXPECT_EQ(datum->nameStr(), "World Geodetic System 1984"); auto grf = dynamic_cast(datum.get()); ASSERT_TRUE(grf != nullptr); EXPECT_TRUE(grf->isEquivalentTo(factory->createDatum("6326").get())); } { // Using db auto datum = ensemble->asDatum(DatabaseContext::create()); EXPECT_EQ(datum->nameStr(), "World Geodetic System 1984"); auto grf = dynamic_cast(datum.get()); ASSERT_TRUE(grf != nullptr); EXPECT_TRUE(grf->isEquivalentTo(factory->createDatum("6326").get())); } } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createDatumEnsembleVertical) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createDatumEnsemble("1288", "geodetic_datum"), NoSuchAuthorityCodeException); auto ensemble = factory->createDatumEnsemble("1288"); EXPECT_EQ(ensemble->nameStr(), "British Isles height ensemble"); ASSERT_EQ(ensemble->identifiers().size(), 1U); EXPECT_EQ(ensemble->identifiers()[0]->code(), "1288"); EXPECT_EQ(*(ensemble->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(ensemble->datums().size(), 9U); EXPECT_EQ(ensemble->positionalAccuracy()->value(), "0.4"); ASSERT_TRUE(!ensemble->domains().empty()); auto domain = ensemble->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("4606").get())); { // Without using db auto datum = ensemble->asDatum(nullptr); auto vrf = dynamic_cast(datum.get()); ASSERT_TRUE(vrf != nullptr); EXPECT_TRUE(vrf->isEquivalentTo(factory->createDatum("1288").get())); } { // Using db auto datum = ensemble->asDatum(DatabaseContext::create()); auto vrf = dynamic_cast(datum.get()); ASSERT_TRUE(vrf != nullptr); EXPECT_TRUE(vrf->isEquivalentTo(factory->createDatum("1288").get())); } } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateSystem_ellipsoidal_2_axis) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createCoordinateSystem("-1"), NoSuchAuthorityCodeException); auto cs = factory->createCoordinateSystem("6422"); auto ellipsoidal_cs = nn_dynamic_pointer_cast(cs); ASSERT_TRUE(ellipsoidal_cs != nullptr); ASSERT_EQ(ellipsoidal_cs->identifiers().size(), 1U); EXPECT_EQ(ellipsoidal_cs->identifiers()[0]->code(), "6422"); EXPECT_EQ(*(ellipsoidal_cs->identifiers()[0]->codeSpace()), "EPSG"); const auto &axisList = ellipsoidal_cs->axisList(); EXPECT_EQ(axisList.size(), 2U); EXPECT_EQ(*(axisList[0]->name()->description()), "Geodetic latitude"); EXPECT_EQ(axisList[0]->abbreviation(), "Lat"); EXPECT_EQ(axisList[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(*(axisList[1]->name()->description()), "Geodetic longitude"); EXPECT_EQ(axisList[1]->abbreviation(), "Lon"); EXPECT_EQ(axisList[1]->direction(), AxisDirection::EAST); EXPECT_EQ(axisList[1]->unit(), UnitOfMeasure::DEGREE); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateSystem_ellipsoidal_3_axis) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto cs = factory->createCoordinateSystem("6423"); auto ellipsoidal_cs = nn_dynamic_pointer_cast(cs); ASSERT_TRUE(ellipsoidal_cs != nullptr); ASSERT_EQ(ellipsoidal_cs->identifiers().size(), 1U); EXPECT_EQ(ellipsoidal_cs->identifiers()[0]->code(), "6423"); EXPECT_EQ(*(ellipsoidal_cs->identifiers()[0]->codeSpace()), "EPSG"); const auto &axisList = ellipsoidal_cs->axisList(); EXPECT_EQ(axisList.size(), 3U); EXPECT_EQ(*(axisList[0]->name()->description()), "Geodetic latitude"); EXPECT_EQ(axisList[0]->abbreviation(), "Lat"); EXPECT_EQ(axisList[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(*(axisList[1]->name()->description()), "Geodetic longitude"); EXPECT_EQ(axisList[1]->abbreviation(), "Lon"); EXPECT_EQ(axisList[1]->direction(), AxisDirection::EAST); EXPECT_EQ(axisList[1]->unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(*(axisList[2]->name()->description()), "Ellipsoidal height"); EXPECT_EQ(axisList[2]->abbreviation(), "h"); EXPECT_EQ(axisList[2]->direction(), AxisDirection::UP); EXPECT_EQ(axisList[2]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateSystem_geocentric) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto cs = factory->createCoordinateSystem("6500"); auto cartesian_cs = nn_dynamic_pointer_cast(cs); ASSERT_TRUE(cartesian_cs != nullptr); ASSERT_EQ(cartesian_cs->identifiers().size(), 1U); EXPECT_EQ(cartesian_cs->identifiers()[0]->code(), "6500"); EXPECT_EQ(*(cartesian_cs->identifiers()[0]->codeSpace()), "EPSG"); const auto &axisList = cartesian_cs->axisList(); EXPECT_EQ(axisList.size(), 3U); EXPECT_EQ(*(axisList[0]->name()->description()), "Geocentric X"); EXPECT_EQ(axisList[0]->abbreviation(), "X"); EXPECT_EQ(axisList[0]->direction(), AxisDirection::GEOCENTRIC_X); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::METRE); EXPECT_EQ(*(axisList[1]->name()->description()), "Geocentric Y"); EXPECT_EQ(axisList[1]->abbreviation(), "Y"); EXPECT_EQ(axisList[1]->direction(), AxisDirection::GEOCENTRIC_Y); EXPECT_EQ(axisList[1]->unit(), UnitOfMeasure::METRE); EXPECT_EQ(*(axisList[2]->name()->description()), "Geocentric Z"); EXPECT_EQ(axisList[2]->abbreviation(), "Z"); EXPECT_EQ(axisList[2]->direction(), AxisDirection::GEOCENTRIC_Z); EXPECT_EQ(axisList[2]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateSystem_vertical) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createCoordinateSystem("-1"), NoSuchAuthorityCodeException); auto cs = factory->createCoordinateSystem("6499"); auto vertical_cs = nn_dynamic_pointer_cast(cs); ASSERT_TRUE(vertical_cs != nullptr); ASSERT_EQ(vertical_cs->identifiers().size(), 1U); EXPECT_EQ(vertical_cs->identifiers()[0]->code(), "6499"); EXPECT_EQ(*(vertical_cs->identifiers()[0]->codeSpace()), "EPSG"); const auto &axisList = vertical_cs->axisList(); EXPECT_EQ(axisList.size(), 1U); EXPECT_EQ(*(axisList[0]->name()->description()), "Gravity-related height"); EXPECT_EQ(axisList[0]->abbreviation(), "H"); EXPECT_EQ(axisList[0]->direction(), AxisDirection::UP); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createGeodeticCRS_geographic2D) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createGeodeticCRS("-1"), NoSuchAuthorityCodeException); auto crs = factory->createGeodeticCRS("4326"); auto gcrs = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(gcrs != nullptr); ASSERT_EQ(gcrs->identifiers().size(), 1U); EXPECT_EQ(gcrs->identifiers()[0]->code(), "4326"); EXPECT_EQ(*(gcrs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(gcrs->name()->description()), "WGS 84"); ASSERT_TRUE(gcrs->datum() == nullptr); ASSERT_TRUE(gcrs->datumEnsemble() != nullptr); EXPECT_TRUE(gcrs->datumEnsemble()->isEquivalentTo( factory->createDatumEnsemble("6326").get())); EXPECT_TRUE(gcrs->coordinateSystem()->isEquivalentTo( factory->createCoordinateSystem("6422").get())); auto domain = crs->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1262").get())); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createGeodeticCRS_geographic2D_area_no_bbox) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createGeodeticCRS("4296"); // Sudan - deprecated auto domain = crs->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1361").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createGeodeticCRS_geographic3D) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createGeodeticCRS("4979"); auto gcrs = nn_dynamic_pointer_cast(crs); ASSERT_TRUE(gcrs != nullptr); ASSERT_EQ(gcrs->identifiers().size(), 1U); EXPECT_EQ(gcrs->identifiers()[0]->code(), "4979"); EXPECT_EQ(*(gcrs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(gcrs->name()->description()), "WGS 84"); ASSERT_TRUE(gcrs->datum() == nullptr); ASSERT_TRUE(gcrs->datumEnsemble() != nullptr); EXPECT_TRUE(gcrs->datumEnsemble()->isEquivalentTo( factory->createDatumEnsemble("6326").get())); EXPECT_TRUE(gcrs->coordinateSystem()->isEquivalentTo( factory->createCoordinateSystem("6423").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createGeodeticCRS_geocentric) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createGeodeticCRS("4978"); ASSERT_TRUE(nn_dynamic_pointer_cast(crs) == nullptr); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "4978"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(crs->name()->description()), "WGS 84"); ASSERT_TRUE(crs->datum() == nullptr); ASSERT_TRUE(crs->datumEnsemble() != nullptr); EXPECT_TRUE(crs->datumEnsemble()->isEquivalentTo( factory->createDatumEnsemble("6326").get())); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( factory->createCoordinateSystem("6500").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createGeographicCRS) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createGeographicCRS("4979"); ASSERT_TRUE(nn_dynamic_pointer_cast(crs) != nullptr); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "4979"); EXPECT_THROW(factory->createGeographicCRS("4978"), FactoryException); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createVerticalCRS) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createVerticalCRS("-1"), NoSuchAuthorityCodeException); auto crs = factory->createVerticalCRS("3855"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "3855"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(crs->name()->description()), "EGM2008 height"); EXPECT_TRUE( crs->datum()->isEquivalentTo(factory->createDatum("1027").get())); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( factory->createCoordinateSystem("6499").get())); auto domain = crs->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1262").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createVerticalCRS_with_datum_ensemble) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createVerticalCRS("-1"), NoSuchAuthorityCodeException); auto crs = factory->createVerticalCRS("9451"); // BI height ASSERT_TRUE(crs->datum() == nullptr); ASSERT_TRUE(crs->datumEnsemble() != nullptr); EXPECT_TRUE(crs->datumEnsemble()->isEquivalentTo( factory->createDatumEnsemble("1288").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createEngineeringCRS) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createEngineeringCRS("-1"), NoSuchAuthorityCodeException); auto crs = factory->createEngineeringCRS("6715"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "6715"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(crs->name()->description()), "Christmas Island Grid 1985"); EXPECT_TRUE( crs->datum()->isEquivalentTo(factory->createDatum("1134").get())); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( factory->createCoordinateSystem("4400").get())); auto domain = crs->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("4169").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createConversion) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createConversion("-1"), NoSuchAuthorityCodeException); auto conv = factory->createConversion("16031"); ASSERT_EQ(conv->identifiers().size(), 1U); EXPECT_EQ(conv->identifiers()[0]->code(), "16031"); EXPECT_EQ(*(conv->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(conv->name()->description()), "UTM zone 31N"); auto method = conv->method(); ASSERT_EQ(method->identifiers().size(), 1U); EXPECT_EQ(method->identifiers()[0]->code(), "9807"); EXPECT_EQ(*(method->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(method->name()->description()), "Transverse Mercator"); const auto &values = conv->parameterValues(); ASSERT_EQ(values.size(), 5U); { const auto &opParamvalue = nn_dynamic_pointer_cast(values[0]); ASSERT_TRUE(opParamvalue); const auto ¶mName = *(opParamvalue->parameter()->name()->description()); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8801); EXPECT_EQ(paramName, "Latitude of natural origin"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(measure.value(), 0.0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[1]); ASSERT_TRUE(opParamvalue); const auto ¶mName = *(opParamvalue->parameter()->name()->description()); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8802); EXPECT_EQ(paramName, "Longitude of natural origin"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(measure.value(), 3.0); } } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createConversion_from_other_transformation) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("7984", false); auto conversion = nn_dynamic_pointer_cast(op); ASSERT_TRUE(conversion != nullptr); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createProjectedCRS) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createProjectedCRS("-1"), NoSuchAuthorityCodeException); auto crs = factory->createProjectedCRS("32631"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "32631"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(crs->name()->description()), "WGS 84 / UTM zone 31N"); EXPECT_TRUE(crs->baseCRS()->isEquivalentTo( factory->createGeodeticCRS("4326").get())); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( factory->createCoordinateSystem("4400").get())); EXPECT_TRUE(crs->derivingConversion()->isEquivalentTo( factory->createConversion("16031").get())); auto domain = crs->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("2060").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createProjectedCRS_south_pole) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createProjectedCRS("-1"), NoSuchAuthorityCodeException); auto crs = factory->createProjectedCRS("32761"); auto csList = crs->coordinateSystem()->axisList(); ASSERT_EQ(csList.size(), 2U); EXPECT_TRUE(csList[0]->meridian() != nullptr); EXPECT_EQ(csList[0]->direction(), AxisDirection::NORTH); EXPECT_EQ( csList[0]->meridian()->longitude().convertToUnit(UnitOfMeasure::DEGREE), 0); EXPECT_EQ(csList[1]->direction(), AxisDirection::NORTH); EXPECT_EQ( csList[1]->meridian()->longitude().convertToUnit(UnitOfMeasure::DEGREE), 90); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createProjectedCRS_north_pole) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = factory->createProjectedCRS("32661"); auto csList = crs->coordinateSystem()->axisList(); ASSERT_EQ(csList.size(), 2U); EXPECT_TRUE(csList[0]->meridian() != nullptr); EXPECT_EQ(csList[0]->direction(), AxisDirection::SOUTH); EXPECT_EQ( csList[0]->meridian()->longitude().convertToUnit(UnitOfMeasure::DEGREE), 180); EXPECT_EQ(csList[1]->direction(), AxisDirection::SOUTH); EXPECT_EQ( csList[1]->meridian()->longitude().convertToUnit(UnitOfMeasure::DEGREE), 90); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCompoundCRS) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createCompoundCRS("-1"), NoSuchAuthorityCodeException); auto crs = factory->createCompoundCRS("6871"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "6871"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(*(crs->name()->description()), "WGS 84 / Pseudo-Mercator + EGM2008 geoid height"); auto components = crs->componentReferenceSystems(); ASSERT_EQ(components.size(), 2U); EXPECT_TRUE(components[0]->isEquivalentTo( factory->createProjectedCRS("3857").get())); EXPECT_TRUE(components[1]->isEquivalentTo( factory->createVerticalCRS("3855").get())); auto domain = crs->domains()[0]; auto extent = domain->domainOfValidity(); ASSERT_TRUE(extent != nullptr); EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1262").get())); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateReferenceSystem) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createCoordinateReferenceSystem("-1"), NoSuchAuthorityCodeException); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateReferenceSystem("4326"))); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateReferenceSystem("4979"))); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateReferenceSystem("4978"))); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateReferenceSystem("32631"))); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateReferenceSystem("3855"))); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateReferenceSystem("6871"))); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_helmert_3) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createCoordinateOperation("-1", false), NoSuchAuthorityCodeException); auto op = factory->createCoordinateOperation("1113", false); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +inv " "+proj=longlat +a=6378249.145 +rf=293.4663077 +step +proj=push " "+v_3 +step +proj=cart +a=6378249.145 +rf=293.4663077 +step " "+proj=helmert +x=-143 +y=-90 +z=-294 +step +inv +proj=cart " "+ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_helmert_7_CF) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("7676", false); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=bessel +step +proj=helmert +x=577.88891 " "+y=165.22205 +z=391.18289 +rx=-4.9145 +ry=0.94729 +rz=13.05098 " "+s=7.78664 +convention=coordinate_frame +step +inv +proj=cart " "+ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_helmert_7_PV) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("1074", false); auto wkt = op->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_TRUE(wkt.find("+proj=helmert +x=-275.7224 +y=94.7824 +z=340.8944 " "+rx=-8.001 +ry=-4.42 +rz=-11.821 +s=1 " "+convention=position_vector") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_helmert_8_CF) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("7702", false); auto expected = " PARAMETER[\"Transformation reference epoch\",2002,\n" " TIMEUNIT[\"year\",31556925.445],\n" " ID[\"EPSG\",1049]],\n"; auto wkt = op->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_TRUE(wkt.find(expected) != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_helmert_15_CF) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("6276", false); auto expected = "COORDINATEOPERATION[\"ITRF2008 to GDA94 (1)\",\n" " VERSION[\"GA-Aus 2010\"],\n" " SOURCECRS[\n" " GEODCRS[\"ITRF2008\",\n" " DYNAMIC[\n" " FRAMEEPOCH[2005]],\n" " DATUM[\"International Terrestrial Reference Frame " "2008\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5332]]],\n" " TARGETCRS[\n" " GEODCRS[\"GDA94\",\n" " DATUM[\"Geocentric Datum of Australia 1994\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4938]]],\n" " METHOD[\"Time-dependent Coordinate Frame rotation (geocen)\",\n" " ID[\"EPSG\",1056]],\n" " PARAMETER[\"X-axis translation\",-84.68,\n" " LENGTHUNIT[\"millimetre\",0.001],\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",-19.42,\n" " LENGTHUNIT[\"millimetre\",0.001],\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",32.01,\n" " LENGTHUNIT[\"millimetre\",0.001],\n" " ID[\"EPSG\",8607]],\n" " PARAMETER[\"X-axis rotation\",-0.4254,\n" " ANGLEUNIT[\"milliarc-second\",4.84813681109536E-09],\n" " ID[\"EPSG\",8608]],\n" " PARAMETER[\"Y-axis rotation\",2.2578,\n" " ANGLEUNIT[\"milliarc-second\",4.84813681109536E-09],\n" " ID[\"EPSG\",8609]],\n" " PARAMETER[\"Z-axis rotation\",2.4015,\n" " ANGLEUNIT[\"milliarc-second\",4.84813681109536E-09],\n" " ID[\"EPSG\",8610]],\n" " PARAMETER[\"Scale difference\",9.71,\n" " SCALEUNIT[\"parts per billion\",1E-09],\n" " ID[\"EPSG\",8611]],\n" " PARAMETER[\"Rate of change of X-axis translation\",1.42,\n" " LENGTHUNIT[\"millimetres per year\",3.16887651727315E-11],\n" " ID[\"EPSG\",1040]],\n" " PARAMETER[\"Rate of change of Y-axis translation\",1.34,\n" " LENGTHUNIT[\"millimetres per year\",3.16887651727315E-11],\n" " ID[\"EPSG\",1041]],\n" " PARAMETER[\"Rate of change of Z-axis translation\",0.9,\n" " LENGTHUNIT[\"millimetres per year\",3.16887651727315E-11],\n" " ID[\"EPSG\",1042]],\n" " PARAMETER[\"Rate of change of X-axis rotation\",1.5461,\n" " ANGLEUNIT[\"milliarc-seconds per " "year\",1.53631468932076E-16],\n" " ID[\"EPSG\",1043]],\n" " PARAMETER[\"Rate of change of Y-axis rotation\",1.182,\n" " ANGLEUNIT[\"milliarc-seconds per " "year\",1.53631468932076E-16],\n" " ID[\"EPSG\",1044]],\n" " PARAMETER[\"Rate of change of Z-axis rotation\",1.1551,\n" " ANGLEUNIT[\"milliarc-seconds per " "year\",1.53631468932076E-16],\n" " ID[\"EPSG\",1045]],\n" " PARAMETER[\"Rate of change of Scale difference\",0.109,\n" " SCALEUNIT[\"parts per billion per " "year\",3.16887651727315E-17],\n" " ID[\"EPSG\",1046]],\n" " PARAMETER[\"Parameter reference epoch\",1994,\n" " TIMEUNIT[\"year\",31556925.445],\n" " ID[\"EPSG\",1047]],\n" " OPERATIONACCURACY[0.03],\n" " USAGE[\n" " SCOPE[\"Geodesy.\"],\n" " AREA[\"Australia - onshore and offshore to 200 nautical mile " "EEZ boundary. Includes Lord Howe Island, Ashmore and Cartier " "Islands.\"],\n" " BBOX[-47.2,109.23,-8.88,163.2]],\n" " ID[\"EPSG\",6276],\n" " REMARK[\"RMS residuals 5mm north, 8mm east and 28mm vertical, " "maximum residuals 10mm north, 13mm east and 51mm vertical. Scale " "difference in ppb and scale difference rate in ppb/yr where " "1/billion = 1E-9 or nm/m.\"]]"; EXPECT_EQ( op->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_helmert_15_PV) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("8069", false); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=helmert +x=-0.0254 +y=0.0005 +z=0.1548 +rx=-0.0001 +ry=0 " "+rz=-0.00026 +s=-0.01129 +dx=-0.0001 +dy=0.0005 +dz=0.0033 " "+drx=0 +dry=0 +drz=-2e-05 +ds=-0.00012 +t_epoch=2010 " "+convention=position_vector"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_helmert_15_PV_rounding_of_drz) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("7932", false); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=helmert +x=0 +y=0 +z=0 +rx=0 +ry=0 +rz=0 +s=0 +dx=0 +dy=0 " "+dz=0 +drx=0.00011 +dry=0.00057 +drz=-0.00071 +ds=0 " "+t_epoch=1989 +convention=position_vector"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_CF_full_matrix_geog3D) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("10675", false); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +inv +proj=helmert +exact +x=1138.7432 +y=-2064.4761 " "+z=110.7016 " "+rx=-214.615206 +ry=479.360036 +rz=-164.703951 +s=-402.32073 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=intl " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_molodensky_badekas_PV) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("1066", false); auto so = nn_dynamic_pointer_cast(op); ASSERT_TRUE(so != nullptr); EXPECT_TRUE(so->validateParameters().empty()); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=bessel +step +proj=molobadekas " "+x=593.032 +y=26 +z=478.741 +rx=0.409394387439237 " "+ry=-0.359705195614311 +rz=1.86849100035057 +s=4.0772 " "+px=3903453.148 +py=368135.313 +pz=5012970.306 " "+convention=coordinate_frame +step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_grid_transformation_one_parameter) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("1295", false); auto expected = "COORDINATEOPERATION[\"RGNC91-93 to NEA74 Noumea (4)\",\n" " VERSION[\"ESRI-Ncl 0.05m\"],\n" " SOURCECRS[\n" " GEOGCRS[\"RGNC91-93\",\n" " DATUM[\"Reseau Geodesique de Nouvelle Caledonie 91-93\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4749]]],\n" " TARGETCRS[\n" " GEOGCRS[\"NEA74 Noumea\",\n" " DATUM[\"NEA74 Noumea\",\n" " ELLIPSOID[\"International 1924\",6378388,297,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4644]]],\n" " METHOD[\"NTv2\",\n" " ID[\"EPSG\",9615]],\n" " PARAMETERFILE[\"Latitude and longitude difference " "file\",\"RGNC1991_NEA74Noumea.gsb\"],\n" " OPERATIONACCURACY[0.05],\n" " USAGE[\n" " SCOPE[\"Geodesy.\"],\n" " AREA[\"New Caledonia - Grande Terre - Noumea district.\"],\n" " BBOX[-22.37,166.35,-22.19,166.54]],\n" " ID[\"EPSG\",1295],\n" " REMARK[\"Emulation using NTv2 method of tfm NEA74 Noumea to " "RGNC91-93 (3) (code 15943). Note reversal of sign of parameter values " "in grid file.\"]]"; EXPECT_EQ( op->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_grid_transformation_two_parameter) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("15864", false); auto expected = " PARAMETERFILE[\"Latitude difference file\",\"alaska.las\"],\n" " PARAMETERFILE[\"Longitude difference file\",\"alaska.los\"],\n"; auto wkt = op->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_TRUE(wkt.find(expected) != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_other_transformation) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("1884", false); auto expected = "COORDINATEOPERATION[\"S-JTSK (Ferro) to S-JTSK (1)\",\n" " VERSION[\"EPSG-Cze\"],\n" " SOURCECRS[\n" " GEOGCRS[\"S-JTSK (Ferro)\",\n" " DATUM[\"System of the Unified Trigonometrical Cadastral " "Network (Ferro)\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Ferro\",-17.6666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4818]]],\n" " TARGETCRS[\n" " GEOGCRS[\"S-JTSK\",\n" " DATUM[\"System of the Unified Trigonometrical Cadastral " "Network\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4156]]],\n" " METHOD[\"Longitude rotation\",\n" " ID[\"EPSG\",9601]],\n" " PARAMETER[\"Longitude offset\",-17.6666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8602]],\n" " OPERATIONACCURACY[0.0],\n" " USAGE[\n" " SCOPE[\"Change of prime meridian.\"],\n" " AREA[\"Czechia; Slovakia.\"],\n" " BBOX[47.73,12.09,51.06,22.56]],\n" " ID[\"EPSG\",1884]]"; EXPECT_EQ( op->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_test_uom_9110) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // This tests conversion from unit of measure EPSG:9110 DDD.MMSSsss auto crs = factory->createProjectedCRS("2172"); EXPECT_PRED_FORMAT2( ComparePROJString, crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=sterea +lat_0=53.0019444444444 +lon_0=21.5027777777778 " "+k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +units=m " "+no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_affine_parametric_transform) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("10087", false); // Do not do axis unit change EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +xoff=82357.457 +s11=0.304794369 " "+s12=1.5417425e-05 +yoff=28091.324 +s21=-1.5417425e-05 " "+s22=0.304794369"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_10566_issue_4212) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("10566", true); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=vgridshift +grids=dk_sdfi_gllmsl_2022.tif +multiplier=1"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_concatenated_operation) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("3896", false); auto concatenated = nn_dynamic_pointer_cast(op); ASSERT_TRUE(concatenated != nullptr); auto operations = concatenated->operations(); ASSERT_EQ(operations.size(), 2U); EXPECT_TRUE(operations[0]->isEquivalentTo( factory->createCoordinateOperation("3895", false).get())); EXPECT_TRUE(operations[1]->isEquivalentTo( factory->createCoordinateOperation("1618", false).get())); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_concatenated_operation_three_steps) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("8647", false); auto concatenated = nn_dynamic_pointer_cast(op); ASSERT_TRUE(concatenated != nullptr); auto operations = concatenated->operations(); ASSERT_EQ(operations.size(), 3U); EXPECT_TRUE(operations[0]->isEquivalentTo( factory->createCoordinateOperation("1313", false).get())); EXPECT_TRUE(operations[1]->isEquivalentTo( factory->createCoordinateOperation("1950", false).get())); EXPECT_TRUE(operations[2]->isEquivalentTo( factory->createCoordinateOperation("1946", false).get())); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_concatenated_operation_inverse_step1) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("8443", false); auto concatenated = nn_dynamic_pointer_cast(op); ASSERT_TRUE(concatenated != nullptr); auto operations = concatenated->operations(); ASSERT_EQ(operations.size(), 2U); EXPECT_TRUE(operations[0]->isEquivalentTo( factory->createCoordinateOperation("8364", false)->inverse().get())); EXPECT_TRUE(operations[1]->isEquivalentTo( factory->createCoordinateOperation("8367", false).get())); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_concatenated_operation_inverse_step2) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("7811", false); auto concatenated = nn_dynamic_pointer_cast(op); ASSERT_TRUE(concatenated != nullptr); auto operations = concatenated->operations(); ASSERT_EQ(operations.size(), 2U); EXPECT_TRUE(operations[0]->isEquivalentTo( factory->createCoordinateOperation("1763", false).get())); EXPECT_TRUE(operations[1]->isEquivalentTo( factory->createCoordinateOperation("15958", false)->inverse().get())); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_concatenated_operation_step1_is_conversion) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("7973", false); auto concatenated = nn_dynamic_pointer_cast(op); ASSERT_TRUE(concatenated != nullptr); auto operations = concatenated->operations(); ASSERT_EQ(operations.size(), 2U); EXPECT_TRUE(operations[0]->isEquivalentTo( factory->createCoordinateOperation("7813", false).get())); EXPECT_TRUE(operations[1]->isEquivalentTo( factory->createCoordinateOperation("7969", false).get())); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_concatenated_operation_step_2_and_3_are_conversion) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("7987", false); auto concatenated = nn_dynamic_pointer_cast(op); ASSERT_TRUE(concatenated != nullptr); auto operations = concatenated->operations(); ASSERT_EQ(operations.size(), 3U); EXPECT_TRUE(operations[0]->isEquivalentTo( factory->createCoordinateOperation("7980", false).get())); EXPECT_TRUE(operations[1]->isEquivalentTo( factory->createCoordinateOperation("7812", false).get())); EXPECT_TRUE(operations[2]->isEquivalentTo( factory->createCoordinateOperation("7813", false).get())); EXPECT_EQ(operations[1]->targetCRS()->nameStr(), "KOC WD depth"); EXPECT_EQ(operations[2]->sourceCRS()->nameStr(), operations[1]->targetCRS()->nameStr()); EXPECT_EQ( concatenated->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=geogoffset +dh=-4.74 " "+step +proj=axisswap +order=1,2,-3 " "+step +proj=unitconvert +z_in=m +z_out=ft"); EXPECT_EQ(concatenated->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +z_in=ft +z_out=m " "+step +proj=axisswap +order=1,2,-3 " "+step +proj=geogoffset +dh=4.74"); } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createCoordinateOperation_concatenated_operation_epsg_9103) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("9103", false); auto concatenated = nn_dynamic_pointer_cast(op); ASSERT_TRUE(concatenated != nullptr); auto operations = concatenated->operations(); ASSERT_EQ(operations.size(), 5U); // we've added an explicit geographic -> geocentric step EXPECT_EQ(operations[0]->nameStr(), "NAD27 to NAD83 (1)"); EXPECT_EQ(operations[1]->nameStr(), "NAD83 to NAD83(2011) (1)"); EXPECT_EQ( operations[2]->nameStr(), "Conversion from NAD83(2011) (geog2D) to NAD83(2011) (geocentric)"); EXPECT_EQ(operations[3]->nameStr(), "Inverse of ITRF2008 to NAD83(2011) (1)"); EXPECT_EQ(operations[4]->nameStr(), "ITRF2008 to ITRF2014 (1)"); } // --------------------------------------------------------------------------- static bool in(const std::string &str, const std::vector &list) { for (const auto &listItem : list) { if (str == listItem) { return true; } } return false; } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_build_all_concatenated) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto setConcatenated = factory->getAuthorityCodes( AuthorityFactory::ObjectType::CONCATENATED_OPERATION); auto setConcatenatedNoDeprecated = factory->getAuthorityCodes( AuthorityFactory::ObjectType::CONCATENATED_OPERATION, false); EXPECT_LT(setConcatenatedNoDeprecated.size(), setConcatenated.size()); for (const auto &code : setConcatenated) { if (in(code, {"8422", "8481", "8482", "8565", "8566", "8572"})) { EXPECT_THROW(factory->createCoordinateOperation(code, false), FactoryException) << code; } else { factory->createCoordinateOperation(code, false); } } } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_conversion) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("16031", false); auto conversion = nn_dynamic_pointer_cast(op); ASSERT_TRUE(conversion != nullptr); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createCoordinateOperation_point_motion_operation) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("9483", false); auto pmo = nn_dynamic_pointer_cast(op); ASSERT_TRUE(pmo != nullptr); auto expected = "POINTMOTIONOPERATION[\"Canada velocity grid v7\",\n" " VERSION[\"NRC-Can cvg7.0\"],\n" " SOURCECRS[\n" " GEOGCRS[\"NAD83(CSRS)v7\",\n" " DATUM[\"North American Datum of 1983 (CSRS) version 7\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]],\n" " ANCHOREPOCH[2010]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",8254]]],\n" " METHOD[\"Point motion by grid (NEU domain) (NTv2_Vel)\",\n" " ID[\"EPSG\",1141]],\n" " PARAMETERFILE[\"Point motion velocity grid " "file\",\"NAD83v70VG.gvb\"],\n" " OPERATIONACCURACY[0.01],\n" " USAGE[\n" " SCOPE[\"Change of coordinate epoch for points referenced to " "NAD83(CSRS)v7.\"],\n" " AREA[\"Canada - onshore - Alberta; British Columbia (BC); " "Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest " "Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward " "Island (PEI); Quebec; Saskatchewan; Yukon.\"],\n" " BBOX[41.67,-141.01,83.17,-52.54]],\n" " ID[\"EPSG\",9483],\n" " REMARK[\"File initially published with name cvg70.cvb, later " "renamed to NAD83v70VG.gvb with no change of content. Replaces Canada " "velocity grid v6 (code 8676). Replaced by Canada velocity grid v8 " "(code 10707). Although the interpolation CRS is given as " "NAD83(CSRS)v7 (also known as NAD83(CSRS) 2010), any version of " "NAD83(CSRS) may be used for grid interpolation without significant " "error.\"]]"; EXPECT_EQ( pmo->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_getAuthorityCodes) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto set = factory->getAuthorityCodes( AuthorityFactory::ObjectType::PRIME_MERIDIAN); ASSERT_TRUE(!set.empty()); factory->createPrimeMeridian(*(set.begin())); } { auto set = factory->getAuthorityCodes(AuthorityFactory::ObjectType::ELLIPSOID); ASSERT_TRUE(!set.empty()); factory->createEllipsoid(*(set.begin())); } { auto setDatum = factory->getAuthorityCodes(AuthorityFactory::ObjectType::DATUM); ASSERT_TRUE(!setDatum.empty()); factory->createDatum(*(setDatum.begin())); auto setGeodeticDatum = factory->getAuthorityCodes( AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME); ASSERT_TRUE(!setGeodeticDatum.empty()); factory->createGeodeticDatum(*(setGeodeticDatum.begin())); auto setDynamicGeodeticDatum = factory->getAuthorityCodes( AuthorityFactory::ObjectType::DYNAMIC_GEODETIC_REFERENCE_FRAME); ASSERT_TRUE(!setDynamicGeodeticDatum.empty()); auto dgrf = factory->createGeodeticDatum(*(setDynamicGeodeticDatum.begin())); EXPECT_TRUE(dynamic_cast(dgrf.get()) != nullptr); EXPECT_LT(setDynamicGeodeticDatum.size(), setGeodeticDatum.size()); auto setVerticalDatum = factory->getAuthorityCodes( AuthorityFactory::ObjectType::VERTICAL_REFERENCE_FRAME); ASSERT_TRUE(!setVerticalDatum.empty()); factory->createVerticalDatum(*(setVerticalDatum.begin())); auto setDynamicVerticalDatum = factory->getAuthorityCodes( AuthorityFactory::ObjectType::DYNAMIC_VERTICAL_REFERENCE_FRAME); ASSERT_TRUE(!setDynamicVerticalDatum.empty()); auto dvrf = factory->createVerticalDatum(*(setDynamicVerticalDatum.begin())); EXPECT_TRUE(dynamic_cast(dvrf.get()) != nullptr); EXPECT_LT(setDynamicVerticalDatum.size(), setVerticalDatum.size()); auto setEngineeringDatum = factory->getAuthorityCodes( AuthorityFactory::ObjectType::ENGINEERING_DATUM); ASSERT_TRUE(!setEngineeringDatum.empty()); factory->createEngineeringDatum(*(setEngineeringDatum.begin())); std::set setMerged; for (const auto &v : setGeodeticDatum) { setMerged.insert(v); } for (const auto &v : setVerticalDatum) { setMerged.insert(v); } for (const auto &v : setEngineeringDatum) { setMerged.insert(v); } EXPECT_EQ(setDatum, setMerged); } { auto setCRS = factory->getAuthorityCodes(AuthorityFactory::ObjectType::CRS); ASSERT_TRUE(!setCRS.empty()); factory->createCoordinateReferenceSystem(*(setCRS.begin())); auto setGeodeticCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::GEODETIC_CRS); ASSERT_TRUE(!setGeodeticCRS.empty()); factory->createGeodeticCRS(*(setGeodeticCRS.begin())); auto setGeocentricCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::GEOCENTRIC_CRS); ASSERT_TRUE(!setGeocentricCRS.empty()); factory->createGeodeticCRS(*(setGeocentricCRS.begin())); EXPECT_LT(setGeocentricCRS.size(), setGeodeticCRS.size()); auto setGeographicCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::GEOGRAPHIC_CRS); ASSERT_TRUE(!setGeographicCRS.empty()); factory->createGeographicCRS(*(setGeographicCRS.begin())); EXPECT_LT(setGeographicCRS.size(), setGeodeticCRS.size()); for (const auto &v : setGeographicCRS) { EXPECT_TRUE(setGeodeticCRS.find(v) != setGeodeticCRS.end()); } auto setGeographic2DCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS); ASSERT_TRUE(!setGeographic2DCRS.empty()); factory->createGeographicCRS(*(setGeographic2DCRS.begin())); auto setGeographic3DCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS); ASSERT_TRUE(!setGeographic3DCRS.empty()); factory->createGeographicCRS(*(setGeographic3DCRS.begin())); EXPECT_EQ(setGeographic2DCRS.size() + setGeographic3DCRS.size(), setGeographicCRS.size()); EXPECT_EQ(setGeocentricCRS.size() + setGeographicCRS.size(), setGeodeticCRS.size()); auto setVerticalCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::VERTICAL_CRS); ASSERT_TRUE(!setVerticalCRS.empty()); factory->createVerticalCRS(*(setVerticalCRS.begin())); auto setProjectedCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::PROJECTED_CRS); ASSERT_TRUE(!setProjectedCRS.empty()); factory->createProjectedCRS(*(setProjectedCRS.begin())); auto setCompoundCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::COMPOUND_CRS); ASSERT_TRUE(!setCompoundCRS.empty()); factory->createCompoundCRS(*(setCompoundCRS.begin())); auto setEngineeringCRS = factory->getAuthorityCodes( AuthorityFactory::ObjectType::ENGINEERING_CRS); ASSERT_TRUE(!setEngineeringCRS.empty()); factory->createEngineeringCRS(*(setEngineeringCRS.begin())); std::set setMerged; for (const auto &v : setGeodeticCRS) { setMerged.insert(v); } for (const auto &v : setVerticalCRS) { setMerged.insert(v); } for (const auto &v : setProjectedCRS) { setMerged.insert(v); } for (const auto &v : setCompoundCRS) { setMerged.insert(v); } for (const auto &v : setEngineeringCRS) { setMerged.insert(v); } EXPECT_EQ(setCRS, setMerged); } { auto setCO = factory->getAuthorityCodes( AuthorityFactory::ObjectType::COORDINATE_OPERATION); ASSERT_TRUE(!setCO.empty()); factory->createCoordinateOperation(*(setCO.begin()), false); auto setConversion = factory->getAuthorityCodes( AuthorityFactory::ObjectType::CONVERSION); ASSERT_TRUE(!setConversion.empty()); factory->createConversion(*(setConversion.begin())); auto setTransformation = factory->getAuthorityCodes( AuthorityFactory::ObjectType::TRANSFORMATION); ASSERT_TRUE(!setTransformation.empty()); ASSERT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateOperation( *(setTransformation.begin()), false)) != nullptr); auto setConcatenated = factory->getAuthorityCodes( AuthorityFactory::ObjectType::CONCATENATED_OPERATION); ASSERT_TRUE(!setConcatenated.empty()); ASSERT_TRUE(nn_dynamic_pointer_cast( factory->createCoordinateOperation( *(setConcatenated.begin()), false)) != nullptr); std::set setMerged; for (const auto &v : setConversion) { setMerged.insert(v); } for (const auto &v : setTransformation) { setMerged.insert(v); } for (const auto &v : setConcatenated) { setMerged.insert(v); } EXPECT_EQ(setCO.size(), setMerged.size()); std::set setMissing; for (const auto &v : setCO) { if (setMerged.find(v) == setMerged.end()) { setMissing.insert(v); } } EXPECT_EQ(setMissing, std::set()); EXPECT_EQ(setCO, setMerged); } } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_getDescriptionText) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->getDescriptionText("-1"), NoSuchAuthorityCodeException); EXPECT_EQ(factory->getDescriptionText("10000"), "RGF93 v1 to NGF-IGN69 height (1)"); // Several objects have 4326 code, including an area of use, but return // the CRS one. EXPECT_EQ(factory->getDescriptionText("4326"), "WGS 84"); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_IAU_2015) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); { auto crs = factory->createGeographicCRS("19900"); EXPECT_EQ(crs->nameStr(), "Mercury (2015) - Sphere / Ocentric"); const auto ellps = crs->ellipsoid(); EXPECT_TRUE(ellps->isSphere()); EXPECT_NEAR(ellps->semiMajorAxis().value(), 2440530.0, 1e-6); const auto &axisList = crs->coordinateSystem()->axisList(); EXPECT_EQ(axisList.size(), 2U); EXPECT_EQ(*(axisList[0]->name()->description()), "Geodetic latitude"); EXPECT_EQ(axisList[0]->abbreviation(), "Lat"); EXPECT_EQ(axisList[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(*(axisList[1]->name()->description()), "Geodetic longitude"); EXPECT_EQ(axisList[1]->abbreviation(), "Lon"); EXPECT_EQ(axisList[1]->direction(), AxisDirection::EAST); EXPECT_EQ(axisList[1]->unit(), UnitOfMeasure::DEGREE); } { auto crs = factory->createGeographicCRS("19901"); EXPECT_EQ(crs->nameStr(), "Mercury (2015) / Ographic"); const auto ellps = crs->ellipsoid(); EXPECT_TRUE(!ellps->isSphere()); EXPECT_NEAR(ellps->semiMajorAxis().value(), 2440530.0, 1e-6); EXPECT_NEAR(ellps->computeSemiMinorAxis().value(), 2438260.0, 1e-6); const auto &axisList = crs->coordinateSystem()->axisList(); EXPECT_EQ(axisList.size(), 2U); EXPECT_EQ(*(axisList[0]->name()->description()), "Geodetic latitude"); EXPECT_EQ(axisList[0]->abbreviation(), "Lat"); EXPECT_EQ(axisList[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(*(axisList[1]->name()->description()), "Geodetic longitude"); EXPECT_EQ(axisList[1]->abbreviation(), "Lon"); EXPECT_EQ(axisList[1]->direction(), AxisDirection::WEST); // WEST ! EXPECT_EQ(axisList[1]->unit(), UnitOfMeasure::DEGREE); } { auto crs = factory->createGeodeticCRS("19902"); EXPECT_EQ(crs->nameStr(), "Mercury (2015) / Ocentric"); EXPECT_TRUE(dynamic_cast(crs.get()) == nullptr); const auto ellps = crs->ellipsoid(); EXPECT_TRUE(!ellps->isSphere()); EXPECT_NEAR(ellps->semiMajorAxis().value(), 2440530.0, 1e-6); EXPECT_NEAR(ellps->computeSemiMinorAxis().value(), 2438260.0, 1e-6); const auto &cs = crs->coordinateSystem(); EXPECT_TRUE(dynamic_cast(cs.get()) != nullptr); const auto &axisList = cs->axisList(); EXPECT_EQ(axisList.size(), 2U); EXPECT_EQ(*(axisList[0]->name()->description()), "Planetocentric latitude"); EXPECT_EQ(axisList[0]->abbreviation(), "U"); EXPECT_EQ(axisList[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(*(axisList[1]->name()->description()), "Planetocentric longitude"); EXPECT_EQ(axisList[1]->abbreviation(), "V"); EXPECT_EQ(axisList[1]->direction(), AxisDirection::EAST); EXPECT_EQ(axisList[1]->unit(), UnitOfMeasure::DEGREE); } } // --------------------------------------------------------------------------- class FactoryWithTmpDatabase : public ::testing::Test { protected: void SetUp() override { sqlite3_open(":memory:", &m_ctxt); } void TearDown() override { sqlite3_free_table(m_papszResult); sqlite3_close(m_ctxt); } void createStructure() { auto referenceDb = DatabaseContext::create(); const auto dbStructure = referenceDb->getDatabaseStructure(); for (const auto &sql : dbStructure) { ASSERT_TRUE(execute(sql)) << last_error(); } ASSERT_TRUE(execute("PRAGMA foreign_keys = 1;")) << last_error(); } void populateWithFakeEPSG() { ASSERT_TRUE(execute("INSERT INTO unit_of_measure " "VALUES('EPSG','9001','metre','length',1.0,NULL," "0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO unit_of_measure " "VALUES('EPSG','9102','degree','angle',1." "74532925199432781271e-02,NULL,0);")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO unit_of_measure VALUES('EPSG','9122','degree " "(supplier to " "define representation)','angle',1.74532925199432781271e-02,NULL," "0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO extent " "VALUES('EPSG','1262','World','World.',-90.0,90.0,-180." "0,180.0,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO scope VALUES('EPSG','1024','Not known.',0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO prime_meridian " "VALUES('EPSG','8901','Greenwich',0.0,'EPSG','9102',0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO celestial_body VALUES('PROJ','EARTH','Earth'," "6378137.0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO ellipsoid VALUES('EPSG','7030','WGS 84',''," "'PROJ','EARTH',6378137.0,'EPSG','9001',298.257223563," "NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO geodetic_datum " "VALUES('EPSG','6326','World Geodetic System 1984',''," "'EPSG','7030','EPSG','8901',NULL,NULL,NULL," "'my anchor',NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'geodetic_datum_6326_usage','geodetic_datum'," "'EPSG','6326','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE( execute("INSERT INTO vertical_datum VALUES('EPSG','1027','EGM2008 " "geoid',NULL,NULL,NULL,NULL,'my anchor',NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'vertical_datum_1027_usage','vertical_datum'," "'EPSG','1027','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO coordinate_system " "VALUES('EPSG','6422','ellipsoidal',2);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO axis VALUES('EPSG','106','Geodetic " "latitude','Lat','north','EPSG','6422',1,'EPSG','9122');")) << last_error(); ASSERT_TRUE( execute("INSERT INTO axis VALUES('EPSG','107','Geodetic " "longitude','Lon','east','EPSG','6422',2,'EPSG','9122');")) << last_error(); ASSERT_TRUE( execute("INSERT INTO geodetic_crs VALUES('EPSG','4326','WGS " "84',NULL,'geographic " "2D','EPSG','6422','EPSG','6326',NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'geodetic_crs4326_usage','geodetic_crs'," "'EPSG','4326','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO coordinate_system " "VALUES('EPSG','6499','vertical',1);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO axis VALUES('EPSG','114','Gravity-related " "height','H','up','EPSG','6499',1,'EPSG','9001');")) << last_error(); ASSERT_TRUE( execute("INSERT INTO vertical_crs VALUES('EPSG','3855','EGM2008 " "height',NULL,'EPSG','6499','EPSG','1027',0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'vertical_crs3855_usage','vertical_crs'," "'EPSG','3855','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO unit_of_measure " "VALUES('EPSG','9201','unity','scale',1.0," "NULL,0);")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO extent VALUES('EPSG','1933','World - N hemisphere - " "0°E to 6°E','',0.0,84.0,0.0,6.0,0);")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO conversion VALUES('EPSG','16031','UTM zone " "31N',NULL,'EPSG','9807','Transverse " "Mercator','EPSG','8801','Latitude " "of " "natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of " "natural " "origin',3.0,'EPSG','9102','EPSG','8805','Scale factor at natural " "origin',0.9996,'EPSG','9201','EPSG','8806','False " "easting',500000.0,'EPSG','9001','EPSG','8807','False " "northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL," "NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'conversion16031_usage','conversion'," "'EPSG','16031','EPSG','1933','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO extent VALUES('EPSG','2060','World - N hemisphere - " "0°E to 6°E - by country','',0.0,84.0,0.0,6.0,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO coordinate_system " "VALUES('EPSG','4400','Cartesian',2);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO axis " "VALUES('EPSG','1','Easting','E','east','EPSG','4400'," "1,'EPSG','9001');")) << last_error(); ASSERT_TRUE( execute("INSERT INTO axis " "VALUES('EPSG','2','Northing','N','north','EPSG','4400'" ",2,'EPSG','9001');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO projected_crs " "VALUES('EPSG','32631','WGS 84 / UTM zone " "31N',NULL,'EPSG','4400','EPSG','4326'," "'EPSG','16031',NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'projected_crs32631_usage','projected_crs'," "'EPSG','32631','EPSG','2060','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO compound_crs VALUES('EPSG','MY_COMPOUND','WGS 84 + " "EGM2008 geoid height',NULL,'EPSG','4326','EPSG','3855',0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('EPSG'," "'compound_crsMY_COMPOUND_usage','compound_crs'," "'EPSG','MY_COMPOUND','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO helmert_transformation " "VALUES('EPSG','DUMMY_HELMERT','dummy_helmert',NULL,'EPSG','9603','" "Geocentric translations (geog2D domain)','EPSG','4326'," "'EPSG','4326',44.0,-143." "0,-90.0,-294.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('EPSG'," "'helmert_transformation_DUMMY_HELMERT_usage'," "'helmert_transformation'," "'EPSG','DUMMY_HELMERT','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO grid_transformation " "VALUES('EPSG','DUMMY_GRID_TRANSFORMATION'," "'dummy_grid_transformation',NULL," "'EPSG','9615'" ",'NTv2','EPSG','4326','EPSG','4326',1.0,'EPSG','" "8656','Latitude and longitude difference " "file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL,NULL," "0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('EPSG'," "'grid_transformation_DUMMY_GRID_TRANSFORMATION_usage'," "'grid_transformation'," "'EPSG','DUMMY_GRID_TRANSFORMATION'," "'EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO unit_of_measure VALUES('EPSG','9110','sexagesimal " "DMS','angle',NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO other_transformation " "VALUES('EPSG','DUMMY_OTHER_TRANSFORMATION'," "'dummy_other_transformation',NULL," "'EPSG','9601','Longitude rotation'," "'EPSG','4326','EPSG','4326',0.0,'EPSG'" ",'8602','Longitude " "offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('EPSG'," "'other_transformation_DUMMY_OTHER_TRANSFORMATION_usage'," "'other_transformation'," "'EPSG','DUMMY_OTHER_TRANSFORMATION'," "'EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation " "VALUES('EPSG','DUMMY_CONCATENATED'," "'dummy_concatenated',NULL," "'EPSG','4326','EPSG'" ",'4326',NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'concatenated_operation_DUMMY_CONCATENATED_usage'," "'concatenated_operation'," "'EPSG','DUMMY_CONCATENATED'," "'EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED',1," "'EPSG','DUMMY_OTHER_TRANSFORMATION',NULL);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED',2," "'EPSG','DUMMY_OTHER_TRANSFORMATION',NULL);")) << last_error(); } void createSourceTargetPivotCRS() { const auto vals = std::vector{"SOURCE", "TARGET", "PIVOT"}; for (const auto &val : vals) { ASSERT_TRUE(execute("INSERT INTO geodetic_datum " "VALUES('FOO','" + val + "','" + val + "',''," "'EPSG','7030','EPSG','8901'," "NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('FOO'," "'geodetic_datum_" + val + "_usage'," "'geodetic_datum'," "'FOO','" + val + "'," "'EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO geodetic_crs " "VALUES('NS_" + val + "','" + val + "','" + val + "',NULL,'geographic 2D','EPSG','6422'," "'FOO','" + val + "',NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('FOO'," "'geodetic_crs_" + val + "_usage'," "'geodetic_crs'," "'NS_" + val + "','" + val + "','EPSG','1262','EPSG','1024');")) << last_error(); } } void createTransformationForPivotTesting(const std::string &src, const std::string &dst) { ASSERT_TRUE(execute( "INSERT INTO helmert_transformation " "VALUES('OTHER','" + src + "_" + dst + "','Transformation from " + src + " to " + dst + "',NULL,'EPSG','9603','" "Geocentric translations (geog2D domain)','NS_" + src + "','" + src + "','NS_" + dst + "','" + dst + "',1.0,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER'," "'helmert_transformation" + src + '_' + dst + "_usage'," "'helmert_transformation'," "'OTHER','" + src + "_" + dst + "'," "'EPSG','1262','EPSG','1024');")) << last_error(); } void checkSourceToOther() { { auto factoryOTHER = AuthorityFactory::create( DatabaseContext::create(m_ctxt), "OTHER"); auto res = factoryOTHER->createFromCRSCodesWithIntermediates( "NS_SOURCE", "SOURCE", "NS_TARGET", "TARGET", false, false, false, false, {}); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE(res.empty() || nn_dynamic_pointer_cast(res[0])); res = factoryOTHER->createFromCRSCodesWithIntermediates( "NS_SOURCE", "SOURCE", "NS_TARGET", "TARGET", false, false, false, false, {std::make_pair(std::string("NS_PIVOT"), std::string("PIVOT"))}); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE(res.empty() || nn_dynamic_pointer_cast(res[0])); res = factoryOTHER->createFromCRSCodesWithIntermediates( "NS_SOURCE", "SOURCE", "NS_TARGET", "TARGET", false, false, false, false, {std::make_pair(std::string("NS_PIVOT"), std::string("NOT_EXISTING"))}); EXPECT_EQ(res.size(), 0U); res = factoryOTHER->createFromCRSCodesWithIntermediates( "NS_SOURCE", "SOURCE", "NS_TARGET", "TARGET", false, false, false, false, {std::make_pair(std::string("BAD_NS"), std::string("PIVOT"))}); EXPECT_EQ(res.size(), 0U); res = factoryOTHER->createFromCRSCodesWithIntermediates( "NS_TARGET", "TARGET", "NS_SOURCE", "SOURCE", false, false, false, false, {}); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE(res.empty() || nn_dynamic_pointer_cast(res[0])); } { auto factory = AuthorityFactory::create( DatabaseContext::create(m_ctxt), std::string()); auto res = factory->createFromCRSCodesWithIntermediates( "NS_SOURCE", "SOURCE", "NS_TARGET", "TARGET", false, false, false, false, {}); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE(res.empty() || nn_dynamic_pointer_cast(res[0])); auto srcCRS = AuthorityFactory::create( DatabaseContext::create(m_ctxt), "NS_SOURCE") ->createCoordinateReferenceSystem("SOURCE"); auto targetCRS = AuthorityFactory::create( DatabaseContext::create(m_ctxt), "NS_TARGET") ->createCoordinateReferenceSystem("TARGET"); { auto ctxt = CoordinateOperationContext::create(factory, nullptr, 0); res = CoordinateOperationFactory::create()->createOperations( srcCRS, targetCRS, ctxt); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE( res.empty() || nn_dynamic_pointer_cast(res[0])); } { auto ctxt = CoordinateOperationContext::create(factory, nullptr, 0); ctxt->setIntermediateCRS({std::make_pair( std::string("NS_PIVOT"), std::string("PIVOT"))}); res = CoordinateOperationFactory::create()->createOperations( srcCRS, targetCRS, ctxt); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE( res.empty() || nn_dynamic_pointer_cast(res[0])); } { auto ctxt = CoordinateOperationContext::create(factory, nullptr, 0); ctxt->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::NEVER); res = CoordinateOperationFactory::create()->createOperations( srcCRS, targetCRS, ctxt); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE(res.empty() || nn_dynamic_pointer_cast(res[0])); } { auto ctxt = CoordinateOperationContext::create(factory, nullptr, 0); ctxt->setIntermediateCRS({std::make_pair( std::string("NS_PIVOT"), std::string("NOT_EXISTING"))}); res = CoordinateOperationFactory::create()->createOperations( srcCRS, targetCRS, ctxt); EXPECT_EQ(res.size(), 1U); EXPECT_TRUE(res.empty() || nn_dynamic_pointer_cast(res[0])); } } } bool execute(const std::string &sql) { return sqlite3_exec(m_ctxt, sql.c_str(), nullptr, nullptr, nullptr) == SQLITE_OK; } std::string last_error() { const char *msg = sqlite3_errmsg(m_ctxt); return msg ? msg : std::string(); } int m_nRows = 0; int m_nCols = 0; char **m_papszResult = nullptr; sqlite3 *m_ctxt = nullptr; }; // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_test_with_fake_EPSG_database) { createStructure(); populateWithFakeEPSG(); auto factory = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "EPSG"); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("9001")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("1262")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("8901")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("7030")) != nullptr); auto grf = nn_dynamic_pointer_cast( factory->createObject("6326")); ASSERT_TRUE(grf != nullptr); EXPECT_EQ(*grf->anchorDefinition(), "my anchor"); auto vrf = nn_dynamic_pointer_cast( factory->createObject("1027")); ASSERT_TRUE(vrf != nullptr); EXPECT_EQ(*vrf->anchorDefinition(), "my anchor"); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("4326")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("3855")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("16031")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("32631")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("MY_COMPOUND")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("DUMMY_HELMERT")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast(factory->createObject( "DUMMY_GRID_TRANSFORMATION")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast(factory->createObject( "DUMMY_OTHER_TRANSFORMATION")) != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast( factory->createObject("DUMMY_CONCATENATED")) != nullptr); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_createFromCoordinateReferenceSystemCodes) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_TRUE( factory->createFromCoordinateReferenceSystemCodes("-1", "-1").empty()); { auto res = factory->createFromCoordinateReferenceSystemCodes("4326", "32631"); ASSERT_EQ(res.size(), 1U); EXPECT_TRUE(res[0]->sourceCRS() != nullptr); EXPECT_TRUE(res[0]->targetCRS() != nullptr); EXPECT_TRUE( res[0]->isEquivalentTo(factory->createConversion("16031").get())); } { auto res = factory->createFromCoordinateReferenceSystemCodes("4209", "4326"); EXPECT_TRUE(!res.empty()); for (const auto &conv : res) { EXPECT_TRUE(conv->sourceCRS()->getEPSGCode() == 4209); EXPECT_TRUE(conv->targetCRS()->getEPSGCode() == 4326); EXPECT_FALSE(conv->isDeprecated()); } } { auto list = factory->createFromCoordinateReferenceSystemCodes("4179", "4258"); ASSERT_EQ(list.size(), 3U); // Romania has a larger area than Poland (given our approx formula) EXPECT_EQ(list[0]->getEPSGCode(), 15994); // Romania - 3m EXPECT_EQ(list[1]->getEPSGCode(), 15993); // Romania - 10m EXPECT_EQ(list[2]->getEPSGCode(), 1644); // Poland - 1m } { // Test removal of superseded transform auto list = factory->createFromCoordinateReferenceSystemCodes( "EPSG", "4179", "EPSG", "4258", false, false, false, true); ASSERT_EQ(list.size(), 2U); // Romania has a larger area than Poland (given our approx formula) EXPECT_EQ(list[0]->getEPSGCode(), 15994); // Romania - 3m EXPECT_EQ(list[1]->getEPSGCode(), 1644); // Poland - 1m } } // --------------------------------------------------------------------------- TEST( factory, AuthorityFactory_createFromCoordinateReferenceSystemCodes_anonymous_authority) { auto factory = AuthorityFactory::create(DatabaseContext::create(), std::string()); { auto res = factory->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "EPSG", "32631", false, false, false, false); ASSERT_EQ(res.size(), 1U); } { auto res = factory->createFromCoordinateReferenceSystemCodes( "EPSG", "4209", "EPSG", "4326", false, false, false, false); EXPECT_TRUE(!res.empty()); for (const auto &conv : res) { EXPECT_TRUE(conv->sourceCRS()->getEPSGCode() == 4209); EXPECT_TRUE(conv->targetCRS()->getEPSGCode() == 4326); EXPECT_FALSE(conv->isDeprecated()); } } } TEST(factory, AuthorityFactory_getAvailableGeoidmodels) { const std::string OSGM15{"OSGM15"}; const std::string GEOID12B{"GEOID12B"}; const std::string GEOID18{"GEOID18"}; auto checkNavd88 = [&](const std::list &res) { EXPECT_TRUE(res.end() != std::find(res.begin(), res.end(), GEOID12B)); EXPECT_TRUE(res.end() != std::find(res.begin(), res.end(), GEOID18)); EXPECT_FALSE(res.end() != std::find(res.begin(), res.end(), OSGM15)); }; auto checkOdn = [&](const std::list &res) { EXPECT_FALSE(res.end() != std::find(res.begin(), res.end(), GEOID12B)); EXPECT_FALSE(res.end() != std::find(res.begin(), res.end(), GEOID18)); EXPECT_TRUE(res.end() != std::find(res.begin(), res.end(), OSGM15)); }; auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto res = factory->getGeoidModels("4326"); ASSERT_TRUE(res.empty()); } { auto res = factory->getGeoidModels("5703"); // "NAVD88 height" checkNavd88(res); } { auto res = factory->getGeoidModels("6360"); // "NAVD88 height (ftUS)" checkNavd88(res); } { auto res = factory->getGeoidModels("8228"); // "NAVD88 height (ft)" checkNavd88(res); } { auto res = factory->getGeoidModels("6357"); // "NAVD88 depth" checkNavd88(res); } { auto res = factory->getGeoidModels("6358"); // "NAVD88 depth (ftUS)" checkNavd88(res); } { auto res = factory->getGeoidModels("5701"); // "ODN height" checkOdn(res); } { auto res = factory->getGeoidModels("5732"); // "Belfast height" checkOdn(res); } } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_test_inversion_first_and_last_steps_of_concat_op) { createStructure(); populateWithFakeEPSG(); // Completely dummy, to test proper inversion of first and last // steps in ConcatenatedOperation, when it is needed ASSERT_TRUE(execute("INSERT INTO geodetic_datum " "VALUES('EPSG','OTHER_DATUM','Other datum',''," "'EPSG','7030','EPSG','8901',NULL,NULL,NULL," "'my anchor',NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO geodetic_crs VALUES('EPSG','OTHER_GEOG_CRS'," "'OTHER_GEOG_CRS',NULL,'geographic 2D','EPSG','6422'," "'EPSG','OTHER_DATUM',NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO other_transformation " "VALUES('EPSG','4326_TO_OTHER_GEOG_CRS'," "'4326_to_other_geog_crs',NULL," "'EPSG','9601','Longitude rotation'," "'EPSG','4326','EPSG','OTHER_GEOG_CRS',0.0,'EPSG'" ",'8602','Longitude " "offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO other_transformation " "VALUES('EPSG','OTHER_GEOG_CRS_TO_4326'," "'other_geog_crs_to_4326',NULL," "'EPSG','9601','Longitude rotation'," "'EPSG','OTHER_GEOG_CRS','EPSG','4326',0.0,'EPSG'" ",'8602','Longitude " "offset',17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation " "VALUES('EPSG','DUMMY_CONCATENATED_2'," "'dummy_concatenated_2',NULL," "'EPSG','4326','EPSG'" ",'4326',NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED_2',1," "'EPSG','OTHER_GEOG_CRS_TO_4326',NULL);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED_2',2," "'EPSG','4326_TO_OTHER_GEOG_CRS',NULL);")) << last_error(); auto factoryEPSG = AuthorityFactory::create(DatabaseContext::create(m_ctxt), std::string("EPSG")); EXPECT_TRUE(nn_dynamic_pointer_cast( factoryEPSG->createObject("DUMMY_CONCATENATED_2")) != nullptr); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_test_with_fake_EPSG_and_OTHER_database) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE( execute("INSERT INTO geodetic_crs VALUES('OTHER','OTHER_4326','WGS " "84',NULL,'geographic " "2D','EPSG','6422','EPSG','6326',NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER'," "'geodetic_crs_OTHER_4326_usage','geodetic_crs'," "'OTHER','OTHER_4326','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO projected_crs " "VALUES('OTHER','OTHER_32631','my WGS 84 / UTM zone " "31N',NULL,'EPSG','4400','OTHER','OTHER_4326'," "'EPSG','16031',NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER'," "'projected_crs_OTHER_32631_usage','projected_crs'," "'OTHER','OTHER_32631','EPSG','2060','EPSG','1024');")) << last_error(); auto factoryGeneral = AuthorityFactory::create( DatabaseContext::create(m_ctxt), std::string()); { auto res = factoryGeneral->createFromCoordinateReferenceSystemCodes( "OTHER", "OTHER_4326", "OTHER", "OTHER_32631", false, false, false, false); ASSERT_EQ(res.size(), 1U); } auto factoryEPSG = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "EPSG"); { auto res = factoryEPSG->createFromCoordinateReferenceSystemCodes( "OTHER", "OTHER_4326", "OTHER", "OTHER_32631", false, false, false, false); ASSERT_EQ(res.size(), 1U); } auto factoryOTHER = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "OTHER"); { auto res = factoryOTHER->createFromCoordinateReferenceSystemCodes( "OTHER_4326", "OTHER_32631"); ASSERT_EQ(res.size(), 0U); // the conversion is in the EPSG space } ASSERT_TRUE(execute( "INSERT INTO grid_transformation " "VALUES('OTHER','OTHER_GRID_TRANSFORMATION'," "'other_grid_transformation_2',NULL," "'EPSG','9615'" ",'NTv2','EPSG','4326','OTHER','OTHER_4326',1.0,'EPSG','" "8656','Latitude and longitude difference " "file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO usage VALUES('OTHER'," "'grid_transformation_OTHER_GRID_TRANSFORMATION_usage'," "'grid_transformation'," "'OTHER','OTHER_GRID_TRANSFORMATION','EPSG','1262','EPSG','1024');")) << last_error(); { auto res = factoryGeneral->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "OTHER", "OTHER_4326", false, false, false, false); ASSERT_EQ(res.size(), 1U); } { auto res = factoryEPSG->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "OTHER", "OTHER_4326", false, false, false, false); ASSERT_EQ(res.size(), 0U); } { auto res = factoryOTHER->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "OTHER", "OTHER_4326", false, false, false, false); ASSERT_EQ(res.size(), 1U); } } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_test_sorting_of_coordinate_operations) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE(execute( "INSERT INTO grid_transformation " "VALUES('OTHER','TRANSFORMATION_10M','TRANSFORMATION_10M',NULL," "'EPSG','9615'" ",'NTv2','EPSG','4326','EPSG','4326',10.0,'EPSG','" "8656','Latitude and longitude difference " "file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('OTHER'," "'grid_transformation_TTRANSFORMATION_10M_usage'," "'grid_transformation'," "'OTHER','TRANSFORMATION_10M','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE( execute("INSERT INTO grid_transformation " "VALUES('OTHER','TRANSFORMATION_1M_SMALL_EXTENT','" "TRANSFORMATION_1M_SMALL_EXTENT',NULL,'EPSG','9615'" ",'NTv2','EPSG','4326','EPSG','4326',1.0,'EPSG','" "8656','Latitude and longitude difference " "file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL," "NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('OTHER'," "'grid_transformation_TRANSFORMATION_1M_SMALL_EXTENT_usage'," "'grid_transformation'," "'OTHER','TRANSFORMATION_1M_SMALL_EXTENT'," "'EPSG','2060','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO grid_transformation " "VALUES('OTHER','TRANSFORMATION_1M','TRANSFORMATION_1M',NULL," "'EPSG','9615'" ",'NTv2','EPSG','4326','EPSG','4326',1.0,'EPSG','" "8656','Latitude and longitude difference " "file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('OTHER'," "'grid_transformation_TRANSFORMATION_1M_usage'," "'grid_transformation'," "'OTHER','TRANSFORMATION_1M','EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE( execute("INSERT INTO grid_transformation " "VALUES('OTHER','TRANSFORMATION_0.5M_DEPRECATED','" "TRANSFORMATION_0.5M_DEPRECATED',NULL,'EPSG','9615'" ",'NTv2','EPSG','4326','EPSG','4326',1.0,'EPSG','" "8656','Latitude and longitude difference " "file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL," "NULL,1);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('OTHER'," "'grid_transformation_TRANSFORMATION_0.5M_DEPRECATED_usage'," "'grid_transformation'," "'OTHER','TRANSFORMATION_0.5M_DEPRECATED'," "'EPSG','1262','EPSG','1024');")) << last_error(); auto factoryOTHER = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "OTHER"); auto res = factoryOTHER->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "EPSG", "4326", false, false, false, false); ASSERT_EQ(res.size(), 3U); EXPECT_EQ(*(res[0]->name()->description()), "TRANSFORMATION_1M"); EXPECT_EQ(*(res[1]->name()->description()), "TRANSFORMATION_10M"); EXPECT_EQ(*(res[2]->name()->description()), "TRANSFORMATION_1M_SMALL_EXTENT"); } // --------------------------------------------------------------------------- TEST_F( FactoryWithTmpDatabase, AuthorityFactory_createFromCRSCodesWithIntermediates_source_equals_target) { createStructure(); populateWithFakeEPSG(); auto factory = AuthorityFactory::create(DatabaseContext::create(m_ctxt), std::string()); auto res = factory->createFromCRSCodesWithIntermediates( "EPSG", "4326", "EPSG", "4326", false, false, false, false, {}); EXPECT_EQ(res.size(), 0U); } // --------------------------------------------------------------------------- TEST_F( FactoryWithTmpDatabase, AuthorityFactory_createFromCRSCodesWithIntermediates_case_source_pivot_target_pivot) { createStructure(); populateWithFakeEPSG(); createSourceTargetPivotCRS(); createTransformationForPivotTesting("SOURCE", "PIVOT"); createTransformationForPivotTesting("TARGET", "PIVOT"); checkSourceToOther(); } // --------------------------------------------------------------------------- TEST_F( FactoryWithTmpDatabase, AuthorityFactory_createFromCRSCodesWithIntermediates_case_source_pivot_pivot_target) { createStructure(); populateWithFakeEPSG(); createSourceTargetPivotCRS(); createTransformationForPivotTesting("SOURCE", "PIVOT"); createTransformationForPivotTesting("PIVOT", "TARGET"); checkSourceToOther(); } // --------------------------------------------------------------------------- TEST_F( FactoryWithTmpDatabase, AuthorityFactory_createFromCRSCodesWithIntermediates_case_pivot_source_pivot_target) { createStructure(); populateWithFakeEPSG(); createSourceTargetPivotCRS(); createTransformationForPivotTesting("PIVOT", "SOURCE"); createTransformationForPivotTesting("PIVOT", "TARGET"); checkSourceToOther(); } // --------------------------------------------------------------------------- TEST_F( FactoryWithTmpDatabase, AuthorityFactory_createFromCRSCodesWithIntermediates_case_pivot_source_target_pivot) { createStructure(); populateWithFakeEPSG(); createSourceTargetPivotCRS(); createTransformationForPivotTesting("PIVOT", "SOURCE"); createTransformationForPivotTesting("TARGET", "PIVOT"); checkSourceToOther(); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_proj_based_transformation) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE(execute( "INSERT INTO other_transformation " "VALUES('OTHER','FOO','My PROJ string based op',NULL,'PROJ'," "'PROJString','+proj=pipeline +ellps=WGS84 +step +proj=longlat'," "'EPSG','4326','EPSG','4326',0.0,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER'," "'other_transformation_FOO_usage'," "'other_transformation'," "'OTHER','FOO'," "'EPSG','1262','EPSG','1024');")) << last_error(); auto factoryOTHER = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "OTHER"); auto res = factoryOTHER->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "EPSG", "4326", false, false, false, false); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res[0]->nameStr(), "My PROJ string based op"); EXPECT_EQ(res[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +ellps=WGS84 +step +proj=longlat"); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_wkt_based_transformation) { createStructure(); populateWithFakeEPSG(); auto wkt = "COORDINATEOPERATION[\"My WKT string based op\",\n" " SOURCECRS[\n" " GEODCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north],\n" " AXIS[\"geodetic longitude (Lon)\",east],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " TARGETCRS[\n" " GEODCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north],\n" " AXIS[\"geodetic longitude (Lon)\",east],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " METHOD[\"Geocentric translations (geog2D domain)\"],\n" " PARAMETER[\"X-axis translation\",1,UNIT[\"metre\",1]],\n" " PARAMETER[\"Y-axis translation\",2,UNIT[\"metre\",1]],\n" " PARAMETER[\"Z-axis translation\",3,UNIT[\"metre\",1]]]"; ASSERT_TRUE( execute("INSERT INTO other_transformation " "VALUES('OTHER','FOO','My WKT string based op',NULL," "'PROJ','WKT','" + std::string(wkt) + "'," "'EPSG','4326','EPSG','4326',0.0,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER'," "'other_transformation_FOO_usage'," "'other_transformation'," "'OTHER','FOO'," "'EPSG','1262','EPSG','1024');")) << last_error(); auto factoryOTHER = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "OTHER"); auto res = factoryOTHER->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "EPSG", "4326", false, false, false, false); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res[0]->nameStr(), "My WKT string based op"); EXPECT_EQ(res[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=WGS84 +step +proj=helmert +x=1 +y=2 " "+z=3 +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg +step " "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_wkt_based_transformation_not_wkt) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE( execute("INSERT INTO other_transformation " "VALUES('OTHER','FOO','My WKT string based op',NULL," "'PROJ','WKT','" + std::string("invalid_wkt") + "'," "'EPSG','4326','EPSG','4326',0.0,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER'," "'other_transformation_FOO_usage'," "'other_transformation'," "'OTHER','FOO'," "'EPSG','1262','EPSG','1024');")) << last_error(); auto factoryOTHER = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "OTHER"); EXPECT_THROW( factoryOTHER->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "EPSG", "4326", false, false, false, false), FactoryException); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, AuthorityFactory_wkt_based_transformation_not_co_wkt) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE( execute("INSERT INTO other_transformation " "VALUES('OTHER','FOO','My WKT string based op',NULL," "'PROJ','WKT','" + std::string("LOCAL_CS[\"foo\"]") + "'," "'EPSG','4326','EPSG','4326',0.0,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER'," "'other_transformation_FOO_usage'," "'other_transformation'," "'OTHER','FOO'," "'EPSG','1262','EPSG','1024');")) << last_error(); auto factoryOTHER = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "OTHER"); EXPECT_THROW( factoryOTHER->createFromCoordinateReferenceSystemCodes( "EPSG", "4326", "EPSG", "4326", false, false, false, false), FactoryException); } // --------------------------------------------------------------------------- TEST(factory, AuthorityFactory_EPSG_4326_approximate_equivalent_to_builtin) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto crs = nn_dynamic_pointer_cast( factory->createCoordinateReferenceSystem("4326")); EXPECT_TRUE(crs->isEquivalentTo(GeographicCRS::EPSG_4326.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, getAuthorities) { createStructure(); populateWithFakeEPSG(); auto res = DatabaseContext::create(m_ctxt)->getAuthorities(); EXPECT_EQ(res.size(), 2U); EXPECT_TRUE(res.find("EPSG") != res.end()); EXPECT_TRUE(res.find("PROJ") != res.end()); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, lookForGridInfo) { createStructure(); ASSERT_TRUE(execute("INSERT INTO grid_alternatives(original_grid_name," "proj_grid_name, " "old_proj_grid_name, " "proj_grid_format, " "proj_method, " "inverse_direction, " "package_name, " "url, direct_download, open_license, directory) " "VALUES (" "'NOT-YET-IN-GRID-TRANSFORMATION-PROJ_fake_grid', " "'PROJ_fake_grid', " "'old_PROJ_fake_grid', " "'NTv2', " "'hgridshift', " "0, " "NULL, " "'url', 1, 1, NULL);")) << last_error(); std::string fullFilename; std::string packageName; std::string url; bool directDownload = false; bool openLicense = false; bool gridAvailable = false; EXPECT_TRUE(DatabaseContext::create(m_ctxt)->lookForGridInfo( "PROJ_fake_grid", false, fullFilename, packageName, url, directDownload, openLicense, gridAvailable)); EXPECT_TRUE(fullFilename.empty()); EXPECT_TRUE(packageName.empty()); EXPECT_EQ(url, "url"); EXPECT_EQ(directDownload, true); EXPECT_EQ(openLicense, true); EXPECT_EQ(gridAvailable, false); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, lookForGridInfo_from_old_name_with_new_grid_available) { createStructure(); ASSERT_TRUE(execute("INSERT INTO grid_alternatives(original_grid_name," "proj_grid_name, " "old_proj_grid_name, " "proj_grid_format, " "proj_method, " "inverse_direction, " "package_name, " "url, direct_download, open_license, directory) " "VALUES (" "'NOT-YET-IN-GRID-TRANSFORMATION-original_grid_name', " "'tests/egm96_15_uncompressed_truncated.tif', " "'old_name.gtx', " "'NTv2', " "'hgridshift', " "0, " "NULL, " "'url', 1, 1, NULL);")) << last_error(); std::string fullFilename; std::string packageName; std::string url; bool directDownload = false; bool openLicense = false; bool gridAvailable = false; EXPECT_TRUE(DatabaseContext::create(m_ctxt)->lookForGridInfo( "old_name.gtx", false, fullFilename, packageName, url, directDownload, openLicense, gridAvailable)); EXPECT_TRUE( fullFilename.find("tests/egm96_15_uncompressed_truncated.tif") != std::string::npos) << fullFilename; EXPECT_EQ(gridAvailable, true); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, custom_geodetic_crs) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE(execute("INSERT INTO geodetic_crs VALUES('TEST_NS','TEST','my " "name TEST',NULL,'geographic 2D'," "NULL,NULL,NULL,NULL,'+proj=longlat +a=2 " "+rf=300',0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO geodetic_crs VALUES" "('TEST_NS','TEST_BOUND'," "'my name TEST',NULL,'geographic 2D'," "NULL,NULL,NULL,NULL,'+proj=longlat +a=2 " "+rf=300 +towgs84=1,2,3',0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO geodetic_crs VALUES('TEST_NS','TEST_GC'," "'my name',NULL,'geocentric',NULL,NULL," "NULL,NULL,'+proj=geocent +a=2 +rf=300',0);")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO geodetic_crs " "VALUES('TEST_NS','TEST_REF_ANOTHER','my name TEST_REF_ANOTHER'," "NULL," "'geographic 2D',NULL,NULL,NULL,NULL,'TEST_NS:TEST',0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO geodetic_crs " "VALUES('TEST_NS','TEST_WRONG','my name',NULL," "'geographic 2D',NULL,NULL,NULL,NULL," "'+proj=merc',0);")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO geodetic_crs " "VALUES('TEST_NS','TEST_RECURSIVE','my name',NULL,'geographic 2D'," "NULL,NULL,NULL,NULL,'TEST_NS:TEST_RECURSIVE',0);")) << last_error(); auto factory = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "TEST_NS"); { auto crs = factory->createGeodeticCRS("TEST"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs) != nullptr); EXPECT_EQ(*(crs->name()->description()), "my name TEST"); EXPECT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis(), Length(2)); EXPECT_EQ(*(crs->ellipsoid()->inverseFlattening()), Scale(300)); EXPECT_TRUE(crs->canonicalBoundCRS() == nullptr); } { auto crs = factory->createGeodeticCRS("TEST_BOUND"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs) != nullptr); EXPECT_EQ(*(crs->name()->description()), "my name TEST"); EXPECT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis(), Length(2)); EXPECT_EQ(*(crs->ellipsoid()->inverseFlattening()), Scale(300)); EXPECT_TRUE(crs->canonicalBoundCRS() != nullptr); } { auto crs = factory->createGeodeticCRS("TEST_GC"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs) == nullptr); EXPECT_EQ(*(crs->name()->description()), "my name"); EXPECT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis(), Length(2)); EXPECT_EQ(*(crs->ellipsoid()->inverseFlattening()), Scale(300)); } { auto crs = factory->createGeodeticCRS("TEST_REF_ANOTHER"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs) != nullptr); EXPECT_EQ(*(crs->name()->description()), "my name TEST_REF_ANOTHER"); EXPECT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis(), Length(2)); EXPECT_EQ(*(crs->ellipsoid()->inverseFlattening()), Scale(300)); } EXPECT_THROW(factory->createGeodeticCRS("TEST_WRONG"), FactoryException); EXPECT_THROW(factory->createGeodeticCRS("TEST_RECURSIVE"), FactoryException); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, custom_projected_crs) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE(execute("INSERT INTO projected_crs " "VALUES('TEST_NS','TEST'," "'custom_projected_crs',NULL,NULL," "NULL,NULL,NULL,NULL,NULL," "'+proj=mbt_s +unused_flag',0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO projected_crs " "VALUES('TEST_NS','TEST_BOUND'," "'custom_projected_crs2',NULL," "NULL,NULL,NULL,NULL,NULL,NULL," "'+proj=mbt_s +unused_flag +towgs84=1,2,3',0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO projected_crs " "VALUES('TEST_NS','TEST_WRONG'," "'custom_projected_crs3',NULL," "NULL,NULL,NULL,NULL,NULL,NULL," "'+proj=longlat',0);")) << last_error(); // Unknown ellipsoid ASSERT_TRUE(execute("INSERT INTO projected_crs " "VALUES('TEST_NS','TEST_MERC','merc',NULL,NULL," "NULL,NULL,NULL,NULL,NULL," "'+proj=merc +x_0=0 +R=1',0);")) << last_error(); // Well-known ellipsoid ASSERT_TRUE(execute("INSERT INTO projected_crs " "VALUES('TEST_NS','TEST_MERC2','merc2',NULL,NULL," "NULL,NULL,NULL,NULL,NULL," "'+proj=merc +x_0=0 +ellps=GRS80',0);")) << last_error(); // WKT1_GDAL ASSERT_TRUE( execute("INSERT INTO projected_crs " "VALUES('TEST_NS','TEST_WKT1_GDAL','WKT1_GDAL',NULL,NULL," "NULL,NULL,NULL,NULL,NULL," "'" "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"Unknown_based_on_WGS84_ellipsoid\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",0],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]" "',0);")) << last_error(); auto factory = AuthorityFactory::create(DatabaseContext::create(m_ctxt), "TEST_NS"); { auto crs = factory->createProjectedCRS("TEST"); EXPECT_EQ(*(crs->name()->description()), "custom_projected_crs"); EXPECT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->derivingConversion()->targetCRS().get(), crs.get()); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=mbt_s +datum=WGS84 +units=m +no_defs +type=crs"); EXPECT_TRUE(crs->canonicalBoundCRS() == nullptr); } { auto crs = factory->createProjectedCRS("TEST_BOUND"); EXPECT_EQ(*(crs->name()->description()), "custom_projected_crs2"); EXPECT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->derivingConversion()->targetCRS().get(), crs.get()); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=mbt_s +datum=WGS84 +units=m +no_defs +type=crs"); EXPECT_TRUE(crs->canonicalBoundCRS() != nullptr); } EXPECT_THROW(factory->createProjectedCRS("TEST_WRONG"), FactoryException); { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +a=1 +b=1 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); EXPECT_EQ(res.size(), 1U); if (!res.empty()) { EXPECT_EQ(res.front().first->nameStr(), "merc"); } } { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); EXPECT_EQ(res.size(), 1U); if (!res.empty()) { EXPECT_EQ(res.front().first->nameStr(), "merc2"); } } { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +a=6378137 +rf=298.257222101 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); EXPECT_EQ(res.size(), 1U); if (!res.empty()) { EXPECT_EQ(res.front().first->nameStr(), "merc2"); } } { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto res = crs->identify(factory); EXPECT_EQ(res.size(), 1U); if (!res.empty()) { EXPECT_EQ(res.front().first->nameStr(), "WKT1_GDAL"); } } { const auto list = factory->getCRSInfoList(); bool found = false; for (const auto &info : list) { if (info.authName == "TEST_NS" && info.code == "TEST_BOUND") { found = true; break; } } EXPECT_TRUE(found); } } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, CoordinateMetadata) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE(execute("INSERT INTO coordinate_metadata " "VALUES('TEST_NS','TEST','my desc','EPSG',4326," "NULL,2020.1,0);")) << last_error(); const std::string wkt = "GEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " USAGE[\n" " SCOPE[\"Horizontal component of 3D system.\"],\n" " AREA[\"World.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",4326]]"; ASSERT_TRUE(execute("INSERT INTO coordinate_metadata " "VALUES('TEST_NS','TEST2','my desc',NULL,NULL," "'" + wkt + "',2021.1,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO coordinate_metadata " "VALUES('TEST_NS','TEST_NO_EPOCH','my desc'," "'EPSG',4326,NULL,NULL,0);")) << last_error(); auto dbContext = DatabaseContext::create(m_ctxt); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto crs_4326 = factoryEPSG->createCoordinateReferenceSystem("4326"); auto factory = AuthorityFactory::create(dbContext, "TEST_NS"); { auto cm = factory->createCoordinateMetadata("TEST"); EXPECT_TRUE(cm->crs()->isEquivalentTo(crs_4326.get())); EXPECT_TRUE(cm->coordinateEpoch().has_value()); EXPECT_NEAR(cm->coordinateEpochAsDecimalYear(), 2020.1, 1e-10); } { auto cm = factory->createCoordinateMetadata("TEST2"); EXPECT_TRUE(cm->crs()->isEquivalentTo( crs_4326.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(cm->coordinateEpoch().has_value()); EXPECT_NEAR(cm->coordinateEpochAsDecimalYear(), 2021.1, 1e-10); } { auto cm = factory->createCoordinateMetadata("TEST_NO_EPOCH"); EXPECT_TRUE(cm->crs()->isEquivalentTo(crs_4326.get())); EXPECT_FALSE(cm->coordinateEpoch().has_value()); } { auto obj = createFromUserInput( "urn:ogc:def:coordinateMetadata:TEST_NS::TEST", dbContext, true); auto cm = dynamic_cast(obj.get()); ASSERT_TRUE(cm != nullptr); EXPECT_TRUE(cm->crs()->isEquivalentTo(crs_4326.get())); EXPECT_TRUE(cm->coordinateEpoch().has_value()); EXPECT_NEAR(cm->coordinateEpochAsDecimalYear(), 2020.1, 1e-10); } } // --------------------------------------------------------------------------- TEST(factory, attachExtraDatabases_none) { auto ctxt = DatabaseContext::create(std::string(), {}); auto factory = AuthorityFactory::create(ctxt, "EPSG"); auto crs = factory->createGeodeticCRS("4979"); auto gcrs = nn_dynamic_pointer_cast(crs); EXPECT_TRUE(gcrs != nullptr); } // --------------------------------------------------------------------------- TEST(factory, attachExtraDatabases_auxiliary) { const std::string auxDbName( "file:attachExtraDatabases_auxiliary.db?mode=memory&cache=shared"); sqlite3 *dbAux = nullptr; sqlite3_open_v2( auxDbName.c_str(), &dbAux, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_URI, nullptr); ASSERT_TRUE(dbAux != nullptr); ASSERT_TRUE(sqlite3_exec(dbAux, "BEGIN", nullptr, nullptr, nullptr) == SQLITE_OK); std::vector tableStructureBefore; { auto ctxt = DatabaseContext::create(); tableStructureBefore = ctxt->getDatabaseStructure(); for (const auto &sql : tableStructureBefore) { if (sql.find("CREATE TRIGGER") == std::string::npos) { ASSERT_TRUE(sqlite3_exec(dbAux, sql.c_str(), nullptr, nullptr, nullptr) == SQLITE_OK); } } } ASSERT_TRUE(sqlite3_exec( dbAux, "INSERT INTO geodetic_crs VALUES('OTHER','OTHER_4326','WGS " "84',NULL,'geographic 2D','EPSG','6422','EPSG','6326'," "NULL,0);", nullptr, nullptr, nullptr) == SQLITE_OK); ASSERT_TRUE(sqlite3_exec(dbAux, "COMMIT", nullptr, nullptr, nullptr) == SQLITE_OK); { auto ctxt = DatabaseContext::create(std::string(), {auxDbName}); // Look for object located in main DB { auto factory = AuthorityFactory::create(ctxt, "EPSG"); auto crs = factory->createGeodeticCRS("4326"); auto gcrs = nn_dynamic_pointer_cast(crs); EXPECT_TRUE(gcrs != nullptr); } // Look for object located in auxiliary DB { auto factory = AuthorityFactory::create(ctxt, "OTHER"); auto crs = factory->createGeodeticCRS("OTHER_4326"); auto gcrs = nn_dynamic_pointer_cast(crs); EXPECT_TRUE(gcrs != nullptr); } const auto dbStructure = ctxt->getDatabaseStructure(); EXPECT_EQ(dbStructure, tableStructureBefore); } { auto ctxt = DatabaseContext::create(std::string(), {auxDbName, ":memory:"}); // Look for object located in main DB { auto factory = AuthorityFactory::create(ctxt, "EPSG"); auto crs = factory->createGeodeticCRS("4326"); auto gcrs = nn_dynamic_pointer_cast(crs); EXPECT_TRUE(gcrs != nullptr); } // Look for object located in auxiliary DB { auto factory = AuthorityFactory::create(ctxt, "OTHER"); auto crs = factory->createGeodeticCRS("OTHER_4326"); auto gcrs = nn_dynamic_pointer_cast(crs); EXPECT_TRUE(gcrs != nullptr); } } { auto ctxt = DatabaseContext::create(std::string(), {":memory:"}); // Look for object located in main DB { auto factory = AuthorityFactory::create(ctxt, "EPSG"); auto crs = factory->createGeodeticCRS("4326"); auto gcrs = nn_dynamic_pointer_cast(crs); EXPECT_TRUE(gcrs != nullptr); } // Look for object located in auxiliary DB { auto factory = AuthorityFactory::create(ctxt, "OTHER"); EXPECT_THROW(factory->createGeodeticCRS("OTHER_4326"), FactoryException); } } sqlite3_close(dbAux); } // --------------------------------------------------------------------------- TEST(factory, attachExtraDatabases_auxiliary_error) { EXPECT_THROW(DatabaseContext::create(std::string(), {"i_dont_exist_db"}), FactoryException); } // --------------------------------------------------------------------------- TEST(factory, getOfficialNameFromAlias) { auto ctxt = DatabaseContext::create(std::string(), {}); auto factory = AuthorityFactory::create(ctxt, std::string()); std::string outTableName; std::string outAuthName; std::string outCode; { auto officialName = factory->getOfficialNameFromAlias( "GCS_WGS_1984", std::string(), std::string(), false, outTableName, outAuthName, outCode); EXPECT_EQ(officialName, "WGS 84"); EXPECT_EQ(outTableName, "geodetic_crs"); EXPECT_EQ(outAuthName, "EPSG"); EXPECT_EQ(outCode, "4326"); } { auto officialName = factory->getOfficialNameFromAlias( "GCS_WGS_1984", "geodetic_crs", "ESRI", false, outTableName, outAuthName, outCode); EXPECT_EQ(officialName, "WGS 84"); EXPECT_EQ(outTableName, "geodetic_crs"); EXPECT_EQ(outAuthName, "EPSG"); EXPECT_EQ(outCode, "4326"); } { auto officialName = factory->getOfficialNameFromAlias( "no match", std::string(), std::string(), false, outTableName, outAuthName, outCode); EXPECT_EQ(officialName, ""); } { auto officialName = factory->getOfficialNameFromAlias( "System_Jednotne_Trigonometricke_Site_Katastralni_Ferro", "geodetic_datum", std::string(), true, outTableName, outAuthName, outCode); EXPECT_EQ( officialName, "System of the Unified Trigonometrical Cadastral Network (Ferro)"); } } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, createOperations_exact_transform_not_whole_area) { createStructure(); populateWithFakeEPSG(); ASSERT_TRUE( execute("INSERT INTO other_transformation " "VALUES('OTHER','PARTIAL_AREA_PERFECT_ACCURACY'," "'PARTIAL_AREA_PERFECT_ACCURACY',NULL,'PROJ'," "'PROJString','+proj=helmert +x=1'," "'EPSG','4326','EPSG','4326',0.0,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER', " "'1','other_transformation','OTHER','PARTIAL_AREA_" "PERFECT_ACCURACY','EPSG','1933','EPSG','1024')")) << last_error(); ASSERT_TRUE( execute("INSERT INTO other_transformation " "VALUES('OTHER','WHOLE_AREA_APPROX_ACCURACY'," "'WHOLE_AREA_APPROX_ACCURACY',NULL,'PROJ'," "'PROJString','+proj=helmert +x=2'," "'EPSG','4326','EPSG','4326',1.0,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('OTHER', " "'2','other_transformation','OTHER','WHOLE_AREA_APPROX_" "ACCURACY','EPSG','1262','EPSG','1024')")) << last_error(); auto dbContext = DatabaseContext::create(m_ctxt); auto authFactory = AuthorityFactory::create(dbContext, std::string("OTHER")); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( AuthorityFactory::create(dbContext, "EPSG") ->createCoordinateReferenceSystem("4326"), AuthorityFactory::create(dbContext, "EPSG") ->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "WHOLE_AREA_APPROX_ACCURACY"); EXPECT_EQ(list[1]->nameStr(), "PARTIAL_AREA_PERFECT_ACCURACY"); } // --------------------------------------------------------------------------- TEST_F(FactoryWithTmpDatabase, check_fixup_direction_concatenated_inverse_map_projection) { // This tests https://github.com/OSGeo/PROJ/issues/2817 createStructure(); populateWithFakeEPSG(); ASSERT_TRUE(execute( "INSERT INTO other_transformation " "VALUES('EPSG','NOOP_TRANSFORMATION_32631'," "'NOOP_TRANSFORMATION_32631',NULL," "'PROJ','PROJString','+proj=noop'," "'EPSG','32631','EPSG','32631',0.0," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE( execute("INSERT INTO usage VALUES('EPSG'," "'other_transformation_NOOP_TRANSFORMATION_32631_usage'," "'other_transformation'," "'EPSG','NOOP_TRANSFORMATION_32631'," "'EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute( "INSERT INTO other_transformation " "VALUES('EPSG','NOOP_TRANSFORMATION_4326'," "'NOOP_TRANSFORMATION_4326',NULL," "'PROJ','PROJString','+proj=noop'," "'EPSG','4326','EPSG','4326',0.0," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'other_transformation_NOOP_TRANSFORMATION_4326_usage'," "'other_transformation'," "'EPSG','NOOP_TRANSFORMATION_4326'," "'EPSG','1262','EPSG','1024');")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation " "VALUES('EPSG','TEST_CONCATENATED','name',NULL," "'EPSG','4326','EPSG'" ",'4326',NULL,NULL,0);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO usage VALUES('EPSG'," "'concatenated_operation_TEST_CONCATENATED_usage'," "'concatenated_operation'," "'EPSG','TEST_CONCATENATED'," "'EPSG','1262','EPSG','1024');")) << last_error(); // Forward map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',1," "'EPSG','16031',NULL);")) << last_error(); // Noop projected ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',2," "'EPSG','NOOP_TRANSFORMATION_32631',NULL);")) << last_error(); // Inverse map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',3," "'EPSG','16031',NULL);")) << last_error(); // Noop geographic ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',4," "'EPSG','NOOP_TRANSFORMATION_4326',NULL);")) << last_error(); // Forward map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',5," "'EPSG','16031',NULL);")) << last_error(); // Noop projected ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',6," "'EPSG','NOOP_TRANSFORMATION_32631',NULL);")) << last_error(); // Inverse map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',7," "'EPSG','16031',NULL);")) << last_error(); auto dbContext = DatabaseContext::create(m_ctxt); auto authFactory = AuthorityFactory::create(dbContext, std::string("EPSG")); const auto op = authFactory->createCoordinateOperation("TEST_CONCATENATED", false); auto wkt = op->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_EQ(wkt, "+proj=noop"); } // --------------------------------------------------------------------------- TEST(factory, createObjectsFromName) { auto ctxt = DatabaseContext::create(); auto factory = AuthorityFactory::create(ctxt, std::string()); auto factoryEPSG = AuthorityFactory::create(ctxt, "EPSG"); EXPECT_EQ(factory->createObjectsFromName("").size(), 0U); // ellipsoid + datum + 3 geodeticCRS EXPECT_EQ(factory->createObjectsFromName("WGS 84", {}, false).size(), 5U); EXPECT_EQ(factory->createObjectsFromName("WGS 84", {}, true, 10).size(), 10U); EXPECT_EQ(factory ->createObjectsFromName( "WGS 84", {AuthorityFactory::ObjectType::CRS}, false) .size(), 3U); EXPECT_EQ( factory ->createObjectsFromName( "WGS 84", {AuthorityFactory::ObjectType::GEOCENTRIC_CRS}, false) .size(), 1U); { auto res = factoryEPSG->createObjectsFromName( "WGS84", {AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS}, true); // EPSG:4326 and the 6 WGS84 realizations // and EPSG:7881 'Tritan St. Helena'' whose alias is // 'WGS 84 Tritan St. Helena' EXPECT_EQ(res.size(), 10U); if (!res.empty()) { EXPECT_EQ(res.front()->getEPSGCode(), 4326); } } // Exact name, but just not the official case ==> should match with exact // match EXPECT_EQ(factory->createObjectsFromName("WGS 84 / utm zone 31n", {}, false) .size(), 1U); // Exact name, but with other CRS that have an aliases to it ==> should // match only the CRS with the given name, not those other CRS. EXPECT_EQ(factory->createObjectsFromName("ETRS89 / UTM zone 32N", {}, false) .size(), 1U); // Prime meridian EXPECT_EQ(factoryEPSG->createObjectsFromName("Paris", {}, false, 2).size(), 1U); // Ellipsoid EXPECT_EQ( factoryEPSG->createObjectsFromName("Clarke 1880 (IGN)", {}, false, 2) .size(), 1U); // Geodetic datum EXPECT_EQ( factoryEPSG->createObjectsFromName("Hungarian Datum 1909", {}, false, 2) .size(), 1U); // Vertical datum EXPECT_EQ(factoryEPSG->createObjectsFromName("EGM2008 geoid", {}, false, 2) .size(), 1U); // Engineering datum EXPECT_EQ( factoryEPSG ->createObjectsFromName("Christmas Island Datum 1985", {}, false, 2) .size(), 1U); // Geodetic CRS EXPECT_EQ(factoryEPSG ->createObjectsFromName( "Unknown datum based upon the Airy 1830 ellipsoid", {}, false, 2) .size(), 1U); // Projected CRS EXPECT_EQ(factoryEPSG ->createObjectsFromName( "Anguilla 1957 / British West Indies Grid", {}, false, 2) .size(), 1U); // Vertical CRS EXPECT_EQ(factoryEPSG->createObjectsFromName("EGM2008 height", {}, false, 2) .size(), 1U); // Compound CRS EXPECT_EQ(factoryEPSG ->createObjectsFromName( "KKJ / Finland Uniform Coordinate System + N60 height", {}, false, 2) .size(), 1U); // Engineering CRS EXPECT_EQ( factoryEPSG ->createObjectsFromName("Christmas Island Grid 1985", {}, false, 2) .size(), 1U); // Conversion EXPECT_EQ( factoryEPSG->createObjectsFromName("Belgian Lambert 2008", {}, false, 2) .size(), 1U); // Helmert transform EXPECT_EQ( factoryEPSG->createObjectsFromName("MGI to ETRS89 (4)", {}, false, 2) .size(), 1U); // Grid transform EXPECT_EQ(factoryEPSG ->createObjectsFromName("Guam 1963 to NAD83(HARN) (1)", {}, false, 2) .size(), 1U); // Other transform EXPECT_EQ(factoryEPSG ->createObjectsFromName( "Monte Mario (Rome) to Monte Mario (1)", {}, false, 2) .size(), 1U); // Concatenated operation EXPECT_EQ( factoryEPSG ->createObjectsFromName("MGI (Ferro) to WGS 84 (2)", {}, false, 2) .size(), 1U); // Deprecated object EXPECT_EQ(factoryEPSG ->createObjectsFromName( "NAD27(CGQ77) / SCoPQ zone 2 (deprecated)", {}, false, 2) .size(), 1U); // Deprecated object (but without explicit deprecated) EXPECT_EQ( factoryEPSG ->createObjectsFromName("NAD27(CGQ77) / SCoPQ zone 2", {}, false, 2) .size(), 1U); // Dynamic Geodetic datum EXPECT_EQ(factoryEPSG ->createObjectsFromName( "International Terrestrial Reference Frame 2008", {AuthorityFactory::ObjectType:: DYNAMIC_GEODETIC_REFERENCE_FRAME}, false, 2) .size(), 1U); // Dynamic Vertical datum EXPECT_EQ( factoryEPSG ->createObjectsFromName("Norway Normal Null 2000", {AuthorityFactory::ObjectType:: DYNAMIC_VERTICAL_REFERENCE_FRAME}, false, 2) .size(), 1U); { auto res = factory->createObjectsFromName( "World Geodetic System 1984 ensemble", {AuthorityFactory::ObjectType::DATUM_ENSEMBLE}, false); EXPECT_EQ(res.size(), 1U); if (!res.empty()) { EXPECT_EQ(res.front()->getEPSGCode(), 6326); EXPECT_TRUE(dynamic_cast(res.front().get()) != nullptr); } } { auto res = factory->createObjectsFromName( "World Geodetic System 1984 ensemble", {}, false); EXPECT_EQ(res.size(), 1U); if (!res.empty()) { EXPECT_EQ(res.front()->getEPSGCode(), 6326); EXPECT_TRUE(dynamic_cast(res.front().get()) != nullptr); } } const auto types = std::vector{ AuthorityFactory::ObjectType::PRIME_MERIDIAN, AuthorityFactory::ObjectType::ELLIPSOID, AuthorityFactory::ObjectType::DATUM, AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME, AuthorityFactory::ObjectType::DYNAMIC_GEODETIC_REFERENCE_FRAME, AuthorityFactory::ObjectType::VERTICAL_REFERENCE_FRAME, AuthorityFactory::ObjectType::DYNAMIC_VERTICAL_REFERENCE_FRAME, AuthorityFactory::ObjectType::ENGINEERING_DATUM, AuthorityFactory::ObjectType::CRS, AuthorityFactory::ObjectType::GEODETIC_CRS, AuthorityFactory::ObjectType::GEOCENTRIC_CRS, AuthorityFactory::ObjectType::GEOGRAPHIC_CRS, AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS, AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS, AuthorityFactory::ObjectType::PROJECTED_CRS, AuthorityFactory::ObjectType::VERTICAL_CRS, AuthorityFactory::ObjectType::COMPOUND_CRS, AuthorityFactory::ObjectType::ENGINEERING_CRS, AuthorityFactory::ObjectType::COORDINATE_OPERATION, AuthorityFactory::ObjectType::CONVERSION, AuthorityFactory::ObjectType::TRANSFORMATION, AuthorityFactory::ObjectType::CONCATENATED_OPERATION, AuthorityFactory::ObjectType::DATUM_ENSEMBLE, }; for (const auto type : types) { factory->createObjectsFromName("i_dont_exist", {type}, false, 1); } factory->createObjectsFromName("i_dont_exist", types, false, 1); { auto res = factoryEPSG->createObjectsFromName( "ETRS89", {AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS}, false, 1); EXPECT_EQ(res.size(), 1U); if (!res.empty()) { EXPECT_EQ(res.front()->getEPSGCode(), 4258); } } } // --------------------------------------------------------------------------- TEST(factory, getMetadata) { auto ctxt = DatabaseContext::create(); EXPECT_EQ(ctxt->getMetadata("i_do_not_exist"), nullptr); const char *IGNF_VERSION = ctxt->getMetadata("IGNF.VERSION"); ASSERT_TRUE(IGNF_VERSION != nullptr); EXPECT_EQ(std::string(IGNF_VERSION), "3.1.0"); } // --------------------------------------------------------------------------- TEST(factory, listAreaOfUseFromName) { auto ctxt = DatabaseContext::create(); auto factory = AuthorityFactory::create(ctxt, std::string()); auto factoryEPSG = AuthorityFactory::create(ctxt, "EPSG"); { auto res = factory->listAreaOfUseFromName("Denmark - onshore", false); ASSERT_EQ(res.size(), 1U); EXPECT_EQ(res.front().first, "EPSG"); EXPECT_EQ(res.front().second, "3237"); } { auto res = factory->listAreaOfUseFromName("Denmark", true); EXPECT_GT(res.size(), 1U); } { auto res = factory->listAreaOfUseFromName("no where land", false); ASSERT_EQ(res.size(), 0U); } } // --------------------------------------------------------------------------- TEST(factory, getCRSInfoList) { auto ctxt = DatabaseContext::create(); { auto factory = AuthorityFactory::create(ctxt, std::string()); auto list = factory->getCRSInfoList(); EXPECT_GT(list.size(), 1U); bool foundEPSG = false; bool foundIGNF = false; bool found4326 = false; bool foundIAU_2015_19902 = false; for (const auto &info : list) { foundEPSG |= info.authName == "EPSG"; foundIGNF |= info.authName == "IGNF"; if (info.authName == "EPSG" && info.code == "4326") { found4326 = true; } else if (info.authName == "IAU_2015" && info.code == "19902") { foundIAU_2015_19902 = true; EXPECT_EQ(info.type, AuthorityFactory::ObjectType::GEODETIC_CRS); } } EXPECT_TRUE(foundEPSG); EXPECT_TRUE(foundIGNF); EXPECT_TRUE(found4326); EXPECT_TRUE(foundIAU_2015_19902); } { auto factory = AuthorityFactory::create(ctxt, "EPSG"); auto list = factory->getCRSInfoList(); EXPECT_GT(list.size(), 1U); bool found4326 = false; bool found4978 = false; bool found4979 = false; bool found32631 = false; bool found3855 = false; bool found6871 = false; for (const auto &info : list) { EXPECT_EQ(info.authName, "EPSG"); if (info.code == "4326") { EXPECT_EQ(info.name, "WGS 84"); EXPECT_EQ(info.type, AuthorityFactory::ObjectType::GEOGRAPHIC_2D_CRS); EXPECT_EQ(info.deprecated, false); EXPECT_EQ(info.bbox_valid, true); EXPECT_EQ(info.west_lon_degree, -180.0); EXPECT_EQ(info.south_lat_degree, -90.0); EXPECT_EQ(info.east_lon_degree, 180.0); EXPECT_EQ(info.north_lat_degree, 90.0); EXPECT_TRUE(std::string(info.areaName).find("World") == 0) << std::string(info.areaName); EXPECT_TRUE(info.projectionMethodName.empty()); found4326 = true; } else if (info.code == "4296") { // Soudan - deprecated EXPECT_EQ(info.bbox_valid, false); EXPECT_EQ(info.west_lon_degree, 0.0); EXPECT_EQ(info.south_lat_degree, 0.0); EXPECT_EQ(info.east_lon_degree, 0.0); EXPECT_EQ(info.north_lat_degree, 0.0); } else if (info.code == "4978") { EXPECT_EQ(info.name, "WGS 84"); EXPECT_EQ(info.type, AuthorityFactory::ObjectType::GEOCENTRIC_CRS); found4978 = true; } else if (info.code == "4979") { EXPECT_EQ(info.name, "WGS 84"); EXPECT_EQ(info.type, AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS); found4979 = true; } else if (info.code == "32631") { EXPECT_EQ(info.name, "WGS 84 / UTM zone 31N"); EXPECT_EQ(info.type, AuthorityFactory::ObjectType::PROJECTED_CRS); EXPECT_EQ(info.deprecated, false); EXPECT_EQ(info.bbox_valid, true); EXPECT_EQ(info.west_lon_degree, 0.0); EXPECT_EQ(info.south_lat_degree, 0.0); EXPECT_EQ(info.east_lon_degree, 6.0); EXPECT_EQ(info.north_lat_degree, 84.0); EXPECT_TRUE(info.areaName.find("Between 0\xC2\xB0" "E and 6\xC2\xB0" "E, northern hemisphere") == 0) << info.areaName; EXPECT_EQ(info.projectionMethodName, "Transverse Mercator"); found32631 = true; } else if (info.code == "3855") { EXPECT_EQ(info.name, "EGM2008 height"); EXPECT_EQ(info.type, AuthorityFactory::ObjectType::VERTICAL_CRS); found3855 = true; } else if (info.code == "6871") { EXPECT_EQ(info.name, "WGS 84 / Pseudo-Mercator + EGM2008 geoid height"); EXPECT_EQ(info.type, AuthorityFactory::ObjectType::COMPOUND_CRS); found6871 = true; } } EXPECT_TRUE(found4326); EXPECT_TRUE(found4978); EXPECT_TRUE(found4979); EXPECT_TRUE(found32631); EXPECT_TRUE(found3855); EXPECT_TRUE(found6871); } } // --------------------------------------------------------------------------- TEST(factory, getUnitList) { auto ctxt = DatabaseContext::create(); { auto factory = AuthorityFactory::create(ctxt, std::string()); auto list = factory->getUnitList(); EXPECT_GT(list.size(), 1U); bool foundEPSG = false; bool foundPROJ = false; bool found1027 = false; bool found1028 = false; bool found1032 = false; bool found1036 = false; bool found9001 = false; bool found9101 = false; for (const auto &info : list) { foundEPSG |= info.authName == "EPSG"; foundPROJ |= info.authName == "PROJ"; if (info.authName == "EPSG" && info.code == "1027") { EXPECT_EQ(info.name, "millimetres per year"); EXPECT_EQ(info.category, "linear_per_time"); found1027 = true; } else if (info.authName == "EPSG" && info.code == "1028") { EXPECT_EQ(info.name, "parts per billion"); EXPECT_EQ(info.category, "scale"); found1028 = true; } else if (info.authName == "EPSG" && info.code == "1032") { EXPECT_EQ(info.name, "milliarc-seconds per year"); EXPECT_EQ(info.category, "angular_per_time"); found1032 = true; } else if (info.authName == "EPSG" && info.code == "1036") { EXPECT_EQ(info.name, "unity per second"); EXPECT_EQ(info.category, "scale_per_time"); found1036 = true; } else if (info.authName == "EPSG" && info.code == "9001") { EXPECT_EQ(info.name, "metre"); EXPECT_EQ(info.category, "linear"); EXPECT_EQ(info.convFactor, 1.0); EXPECT_EQ(info.projShortName, "m"); EXPECT_FALSE(info.deprecated); found9001 = true; } else if (info.authName == "EPSG" && info.code == "9101") { EXPECT_EQ(info.name, "radian"); EXPECT_EQ(info.category, "angular"); EXPECT_FALSE(info.deprecated); found9101 = true; } } EXPECT_TRUE(foundEPSG); EXPECT_TRUE(foundPROJ); EXPECT_TRUE(found1027); EXPECT_TRUE(found1028); EXPECT_TRUE(found1032); EXPECT_TRUE(found1036); EXPECT_TRUE(found9001); EXPECT_TRUE(found9101); } { auto factory = AuthorityFactory::create(ctxt, "EPSG"); auto list = factory->getUnitList(); EXPECT_GT(list.size(), 1U); for (const auto &info : list) { EXPECT_EQ(info.authName, "EPSG"); } } } // --------------------------------------------------------------------------- TEST(factory, getCelestialBodyList) { auto ctxt = DatabaseContext::create(); { auto factory = AuthorityFactory::create(ctxt, std::string()); auto list = factory->getCelestialBodyList(); EXPECT_GT(list.size(), 1U); bool foundPROJ = false; bool foundESRI = false; bool foundEarth = false; for (const auto &info : list) { foundESRI |= info.authName == "ESRI"; foundPROJ |= info.authName == "PROJ"; if (info.authName == "PROJ") { EXPECT_EQ(info.name, "Earth"); foundEarth = true; } } EXPECT_TRUE(foundESRI); EXPECT_TRUE(foundPROJ); EXPECT_TRUE(foundEarth); } { auto factory = AuthorityFactory::create(ctxt, "ESRI"); auto list = factory->getCelestialBodyList(); EXPECT_GT(list.size(), 1U); for (const auto &info : list) { EXPECT_EQ(info.authName, "ESRI"); } } } // --------------------------------------------------------------------------- TEST(factory, objectInsertion) { // Cannot nest startInsertStatementsSession { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); EXPECT_THROW(ctxt->startInsertStatementsSession(), FactoryException); } { auto ctxt = DatabaseContext::create(); // Tolerated without explicit stop ctxt->startInsertStatementsSession(); } { auto ctxt = DatabaseContext::create(); // Tolerated ctxt->stopInsertStatementsSession(); } // getInsertStatementsFor() must be preceded with // startInsertStatementsSession() { auto ctxt = DatabaseContext::create(); EXPECT_THROW(ctxt->getInsertStatementsFor(GeographicCRS::EPSG_4326, "EPSG", "4326", true), FactoryException); } { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); // Nothing to do EXPECT_TRUE(ctxt->getInsertStatementsFor(GeographicCRS::EPSG_4326, "EPSG", "4326", true) .empty()); ctxt->stopInsertStatementsSession(); } // Geographic 2D CRS { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4326"), GeographicCRS::EPSG_4326->datum(), GeographicCRS::EPSG_4326->datumEnsemble(), GeographicCRS::EPSG_4326->coordinateSystem()); EXPECT_EQ(ctxt->suggestsCodeFor(crs, "HOBU", true), "1"); EXPECT_EQ(ctxt->suggestsCodeFor(crs, "HOBU", false), "MY_EPSG_4326"); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "1234", true); EXPECT_EQ(ctxt->suggestsCodeFor(crs, "HOBU", true), "1235"); ASSERT_EQ(sql.size(), 2U); EXPECT_EQ(sql[0], "INSERT INTO geodetic_crs VALUES('HOBU','1234','my " "EPSG:4326','','geographic " "2D','EPSG','6422','EPSG','6326',NULL,0);"); EXPECT_EQ( sql[1], "INSERT INTO usage " "VALUES('HOBU','USAGE_GEODETIC_CRS_1234','geodetic_crs','HOBU','" "1234','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "1234", true).empty()); ctxt->stopInsertStatementsSession(); AuthorityFactory::create(ctxt, std::string("EPSG")) ->createGeographicCRS("4326"); EXPECT_THROW(AuthorityFactory::create(ctxt, std::string("HOBU")) ->createGeographicCRS("1234"), NoSuchAuthorityCodeException); } // Geographic 3D CRS, with known usage { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto usages = AuthorityFactory::create(ctxt, std::string("EPSG")) ->createGeographicCRS("4979") ->domains(); auto array(ArrayOfBaseObject::create()); for (const auto &usage : usages) { array->add(usage); } auto props = PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4979"); props.set(ObjectUsage::OBJECT_DOMAIN_KEY, nn_static_pointer_cast(array)); const auto crs = GeographicCRS::create(props, GeographicCRS::EPSG_4979->datum(), GeographicCRS::EPSG_4979->datumEnsemble(), GeographicCRS::EPSG_4979->coordinateSystem()); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "4979", false); ASSERT_EQ(sql.size(), 2U); EXPECT_EQ(sql[0], "INSERT INTO geodetic_crs VALUES('HOBU','4979','my " "EPSG:4979','','geographic " "3D','EPSG','6423','EPSG','6326',NULL,0);"); EXPECT_EQ( sql[1], "INSERT INTO usage " "VALUES('HOBU','USAGE_GEODETIC_CRS_4979','geodetic_crs','HOBU','" "4979','EPSG','1262','EPSG','1176');"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "4979", false).empty()); ctxt->stopInsertStatementsSession(); } // BoundCRS of Geocentric CRS, with new usage { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); auto props = PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4978"); auto array(ArrayOfBaseObject::create()); const auto extent = Extent::createFromBBOX(1, 2, 3, 4); optional scope; scope = "my scope"; array->add(ObjectDomain::create(scope, extent)); props.set(ObjectUsage::OBJECT_DOMAIN_KEY, nn_static_pointer_cast(array)); const auto crs = GeodeticCRS::create( props, NN_NO_CHECK(GeodeticCRS::EPSG_4978->datum()), NN_NO_CHECK(nn_dynamic_pointer_cast( GeodeticCRS::EPSG_4978->coordinateSystem()))); const auto boundCRS = BoundCRS::createFromTOWGS84( crs, std::vector{1, 2, 3, 4, 5, 6, 7}); const auto sql = ctxt->getInsertStatementsFor(boundCRS, "HOBU", "4978", false); ASSERT_EQ(sql.size(), 4U); EXPECT_EQ( sql[0], "INSERT INTO geodetic_crs VALUES('HOBU','4978','my " "EPSG:4978','','geocentric','EPSG','6500','EPSG','6326',NULL,0);"); EXPECT_EQ(sql[1], "INSERT INTO scope VALUES('HOBU','SCOPE_geodetic_crs_4978'," "'my scope',0);"); EXPECT_EQ(sql[2], "INSERT INTO extent VALUES('HOBU','EXTENT_geodetic_crs_4978'," "'unknown','unknown',2,4,1,3,0);"); EXPECT_EQ( sql[3], "INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_CRS_4978'," "'geodetic_crs','HOBU','4978','HOBU'," "'EXTENT_geodetic_crs_4978','HOBU','SCOPE_geodetic_crs_4978');"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(boundCRS, "HOBU", "4978", false) .empty()); ctxt->stopInsertStatementsSession(); } // Geographic 2D CRS with unknown datum, numeric code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto datum = GeodeticReferenceFrame::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "my datum") .set("ANCHOR_EPOCH", "2023"), Ellipsoid::WGS84, optional("my anchor"), PrimeMeridian::GREENWICH); const auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4326"), datum, GeographicCRS::EPSG_4326->coordinateSystem()); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true); ASSERT_EQ(sql.size(), 4U); EXPECT_EQ(sql[0], "INSERT INTO geodetic_datum VALUES('HOBU','1','my " "datum','','EPSG','7030','EPSG','8901',NULL,NULL,NULL," "'my anchor',2023.000,0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true).empty()); ctxt->stopInsertStatementsSession(); } // Geographic 2D CRS with unknown datum, alpha code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my datum"), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH); const auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4326"), datum, GeographicCRS::EPSG_4326->coordinateSystem()); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "MY_EPSG_4326", false); EXPECT_EQ(ctxt->suggestsCodeFor(crs, "HOBU", false), "MY_EPSG_4326_2"); ASSERT_EQ(sql.size(), 4U); EXPECT_EQ(sql[0], "INSERT INTO geodetic_datum " "VALUES('HOBU','GEODETIC_DATUM_MY_EPSG_4326','my " "datum','','EPSG','7030','EPSG','8901',NULL,NULL,NULL,NULL," "NULL,0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "MY_EPSG_4326", false) .empty()); ctxt->stopInsertStatementsSession(); } // Geographic 2D CRS with unknown ellipsoid, numeric code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto ellipsoid = Ellipsoid::createFlattenedSphere( PropertyMap().set(IdentifiedObject::NAME_KEY, "my ellipsoid"), Length(6378137), Scale(295)); const auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my datum"), ellipsoid, optional(), PrimeMeridian::GREENWICH); const auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4326"), datum, GeographicCRS::EPSG_4326->coordinateSystem()); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true); ASSERT_EQ(sql.size(), 5U); EXPECT_EQ(sql[0], "INSERT INTO ellipsoid VALUES('HOBU','1','my " "ellipsoid','','IAU_2015','399',6378137,'EPSG','9001'" ",295,NULL,0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true).empty()); ctxt->stopInsertStatementsSession(); } // Geographic 2D CRS with unknown ellipsoid, alpha code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto ellipsoid = Ellipsoid::createTwoAxis( PropertyMap().set(IdentifiedObject::NAME_KEY, "my ellipsoid"), Length(6378137), Length(6378136)); const auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my datum"), ellipsoid, optional(), PrimeMeridian::GREENWICH); const auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4326"), datum, GeographicCRS::EPSG_4326->coordinateSystem()); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", false); ASSERT_EQ(sql.size(), 5U); EXPECT_EQ(sql[0], "INSERT INTO ellipsoid " "VALUES('HOBU','ELLPS_GEODETIC_DATUM_XXXX','my " "ellipsoid','','IAU_2015','399',6378137," "'EPSG','9001'," "NULL,6378136,0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", false).empty()); ctxt->stopInsertStatementsSession(); } // Geographic 2D CRS with unknown prime meridian, numeric code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto pm = PrimeMeridian::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "My meridian"), Angle(10)); const auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my datum"), Ellipsoid::WGS84, optional(), pm); const auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4326"), datum, GeographicCRS::EPSG_4326->coordinateSystem()); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true); ASSERT_EQ(sql.size(), 5U); EXPECT_EQ(sql[0], "INSERT INTO prime_meridian VALUES('HOBU','1','My " "meridian',10,'EPSG','9122',0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true).empty()); ctxt->stopInsertStatementsSession(); } // Geographic 2D CRS with unknown prime meridian, alpha code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto pm = PrimeMeridian::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "My meridian"), Angle(10)); const auto datum = GeodeticReferenceFrame::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my datum"), Ellipsoid::WGS84, optional(), pm); const auto crs = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my EPSG:4326"), datum, GeographicCRS::EPSG_4326->coordinateSystem()); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", false); ASSERT_EQ(sql.size(), 5U); EXPECT_EQ(sql[0], "INSERT INTO prime_meridian " "VALUES('HOBU','PM_GEODETIC_DATUM_XXXX','My " "meridian',10,'EPSG','9122',0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", false).empty()); ctxt->stopInsertStatementsSession(); } // Projected CRS, numeric code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto crs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my projected CRS"), GeographicCRS::EPSG_4807, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true); ASSERT_EQ(sql.size(), 4U); EXPECT_EQ(sql[0], "INSERT INTO conversion VALUES('HOBU','1'," "'UTM zone 31N',''," "'EPSG','9807','Transverse Mercator'," "'EPSG','8801','Latitude of natural origin',0,'EPSG','9122'," "'EPSG','8802','Longitude of natural origin',3,'EPSG','9122'," "'EPSG','8805','Scale factor at natural origin',0.9996," "'EPSG','9201'," "'EPSG','8806','False easting',500000,'EPSG','9001'," "'EPSG','8807','False northing',0,'EPSG','9001'," "NULL,NULL,NULL,NULL,NULL,NULL," "NULL,NULL,NULL,NULL,NULL,NULL,0);"); EXPECT_EQ(sql[1], "INSERT INTO usage " "VALUES('HOBU','USAGE_CONVERSION_1','conversion','HOBU','1','" "PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');"); EXPECT_EQ( sql[2], "INSERT INTO projected_crs VALUES('HOBU','XXXX','my projected " "CRS','','EPSG','4400','EPSG','4807','HOBU','1',NULL,0);"); EXPECT_EQ( sql[3], "INSERT INTO usage " "VALUES('HOBU','USAGE_PROJECTED_CRS_XXXX','projected_crs','HOBU','" "XXXX','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true).empty()); ctxt->stopInsertStatementsSession(); } // Vertical CRS, known vertical datum, numeric code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5101) .set(IdentifiedObject::NAME_KEY, "Ordnance Datum Newlyn"); auto vdatum = VerticalReferenceFrame::create(propertiesVDatum); PropertyMap propertiesCRS; propertiesCRS.set(IdentifiedObject::NAME_KEY, "my height"); const auto uom = UnitOfMeasure("my unit", 3.0, UnitOfMeasure::Type::LINEAR); const auto crs = VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(uom)); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true); ASSERT_EQ(sql.size(), 5U); EXPECT_EQ(sql[0], "INSERT INTO coordinate_system VALUES" "('HOBU','CS_VERTICAL_CRS_XXXX','vertical',1);"); EXPECT_EQ(sql[1], "INSERT INTO unit_of_measure VALUES" "('HOBU','MY_UNIT','my unit','length',3,NULL,0);"); EXPECT_EQ(sql[2], "INSERT INTO axis VALUES('HOBU'," "'CS_VERTICAL_CRS_XXXX_AXIS_1','Gravity-related height','H'," "'up','HOBU','CS_VERTICAL_CRS_XXXX',1,'HOBU','MY_UNIT');"); EXPECT_EQ(sql[3], "INSERT INTO vertical_crs VALUES('HOBU','XXXX','my height'," "'','HOBU','CS_VERTICAL_CRS_XXXX','EPSG','5101',0);"); EXPECT_EQ(sql[4], "INSERT INTO usage VALUES('HOBU','USAGE_VERTICAL_CRS_XXXX'," "'vertical_crs','HOBU','XXXX','PROJ','EXTENT_UNKNOWN'," "'PROJ','SCOPE_UNKNOWN');"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", true).empty()); ctxt->stopInsertStatementsSession(); } // Vertical CRS, unknown vertical datum, alpha code { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); PropertyMap propertiesVDatum; propertiesVDatum.set(IdentifiedObject::NAME_KEY, "my datum"); auto vdatum = VerticalReferenceFrame::create( propertiesVDatum, optional("my anchor")); PropertyMap propertiesCRS; propertiesCRS.set(IdentifiedObject::NAME_KEY, "my height"); const auto crs = VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", false); ASSERT_EQ(sql.size(), 4U); EXPECT_EQ(sql[0], "INSERT INTO vertical_datum VALUES('HOBU'," "'VERTICAL_DATUM_XXXX','my datum','',NULL,NULL,NULL," "'my anchor',NULL,0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "XXXX", false).empty()); ctxt->stopInsertStatementsSession(); } // Same as above with ANCHOR_EPOCH { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); PropertyMap propertiesVDatum; propertiesVDatum.set(IdentifiedObject::NAME_KEY, "my datum"); propertiesVDatum.set("ANCHOR_EPOCH", "2023"); auto vdatum = VerticalReferenceFrame::create( propertiesVDatum, optional("my anchor")); PropertyMap propertiesCRS; propertiesCRS.set(IdentifiedObject::NAME_KEY, "my height"); const auto crs = VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); const auto sql = ctxt->getInsertStatementsFor(crs, "HOBU", "YYYY", false); ASSERT_EQ(sql.size(), 4U); EXPECT_EQ(sql[0], "INSERT INTO vertical_datum VALUES('HOBU'," "'VERTICAL_DATUM_YYYY','my datum','',NULL,NULL,NULL," "'my anchor',2023.000,0);"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE( ctxt->getInsertStatementsFor(crs, "HOBU", "YYYY", false).empty()); ctxt->stopInsertStatementsSession(); } // Compound CRS { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto wkt = "COMPD_CS[\"unknown\"," "PROJCS[\"NAD_1983_2011_StatePlane_South_Carolina_FIPS_3900_USFT\"," "GEOGCS[\"NAD83(2011)\"," "DATUM[\"NAD83_National_Spatial_Reference_System_2011\"," "SPHEROID[\"GRS 1980\",6378137,298.257222101004," "AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1116\"]]," "PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433," "AUTHORITY[\"EPSG\",\"9122\"]]]," "PROJECTION[\"Lambert_Conformal_Conic_2SP\"]," "PARAMETER[\"latitude_of_origin\",31.8333333333333]," "PARAMETER[\"central_meridian\",-81]," "PARAMETER[\"standard_parallel_1\",32.5]," "PARAMETER[\"standard_parallel_2\",34.8333333333333]," "PARAMETER[\"false_easting\",1999996]," "PARAMETER[\"false_northing\",0]," "UNIT[\"US survey foot\",0.304800609601219," "AUTHORITY[\"EPSG\",\"9003\"]]," "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]," "VERT_CS[\"NAVD88 height (ftUS)\"," "VERT_DATUM[\"North American Vertical Datum 1988\",2005," "AUTHORITY[\"EPSG\",\"5103\"]]," "UNIT[\"US survey foot\",0.304800609601219," "AUTHORITY[\"EPSG\",\"9003\"]]," "AXIS[\"Up\",UP],AUTHORITY[\"EPSG\",\"6360\"]]]"; const auto crs = nn_dynamic_pointer_cast(WKTParser().createFromWKT(wkt)); ASSERT_TRUE(crs != nullptr); const auto sql = ctxt->getInsertStatementsFor(NN_NO_CHECK(crs), "HOBU", "XXXX", false); ASSERT_EQ(sql.size(), 6U); EXPECT_EQ(sql[4], "INSERT INTO compound_crs VALUES('HOBU','XXXX','unknown'," "'','HOBU','COMPONENT_XXXX_1','EPSG','6360',0);"); EXPECT_EQ(sql[5], "INSERT INTO usage VALUES('HOBU','USAGE_COMPOUND_CRS_XXXX'," "'compound_crs','HOBU','XXXX','PROJ','EXTENT_UNKNOWN'," "'PROJ','SCOPE_UNKNOWN');"); const auto identified = crs->identify(AuthorityFactory::create(ctxt, std::string())); ASSERT_EQ(identified.size(), 1U); EXPECT_EQ( *(identified.front().first->identifiers().front()->codeSpace()), "HOBU"); EXPECT_TRUE(identified.front().first->isEquivalentTo( crs.get(), IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)); EXPECT_EQ(identified.front().second, 100); EXPECT_TRUE(ctxt->getInsertStatementsFor(NN_NO_CHECK(crs), "HOBU", "XXXX", false) .empty()); ctxt->stopInsertStatementsSession(); } // DynamicGeodeticReferenceFrame { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto datum = AuthorityFactory::create(ctxt, "EPSG") ->createDatum("1165"); // ITRF2014 const auto sql = ctxt->getInsertStatementsFor(datum, "HOBU", "XXXX", false, {"HOBU"}); EXPECT_TRUE(!sql.empty()); const auto datumNew = AuthorityFactory::create(ctxt, "HOBU")->createDatum("XXXX"); EXPECT_TRUE(datumNew->isEquivalentTo( datum.get(), IComparable::Criterion::EQUIVALENT)); ctxt->stopInsertStatementsSession(); } // DynamicVerticalReferenceFrame { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto datum = AuthorityFactory::create(ctxt, "EPSG") ->createDatum("1096"); // Norway Normal Null 2000 const auto sql = ctxt->getInsertStatementsFor(datum, "HOBU", "XXXX", false, {"HOBU"}); EXPECT_TRUE(!sql.empty()); const auto datumNew = AuthorityFactory::create(ctxt, "HOBU")->createDatum("XXXX"); EXPECT_TRUE(datumNew->isEquivalentTo( datum.get(), IComparable::Criterion::EQUIVALENT)); ctxt->stopInsertStatementsSession(); } // geodetic DatumEnsemble, and add members inline { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto ensemble = AuthorityFactory::create(ctxt, "EPSG") ->createDatumEnsemble("6326"); // WGS84 const auto sql = ctxt->getInsertStatementsFor(ensemble, "HOBU", "XXXX", false, {"HOBU"}); EXPECT_TRUE(!sql.empty()); const auto ensembleNew = AuthorityFactory::create(ctxt, "HOBU")->createDatumEnsemble("XXXX"); EXPECT_TRUE(ensembleNew->isEquivalentTo( ensemble.get(), IComparable::Criterion::EQUIVALENT)); ctxt->stopInsertStatementsSession(); } // geodetic DatumEnsemble, and reference members { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto ensemble = AuthorityFactory::create(ctxt, "EPSG") ->createDatumEnsemble("6326"); // WGS84 const auto sql = ctxt->getInsertStatementsFor(ensemble, "HOBU", "XXXX", false); EXPECT_TRUE(!sql.empty()); const auto ensembleNew = AuthorityFactory::create(ctxt, "HOBU")->createDatumEnsemble("XXXX"); EXPECT_TRUE(ensembleNew->isEquivalentTo( ensemble.get(), IComparable::Criterion::EQUIVALENT)); ctxt->stopInsertStatementsSession(); } // vertical DatumEnsemble { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); // British Isles height ensemble const auto ensemble = AuthorityFactory::create(ctxt, "EPSG")->createDatumEnsemble("1288"); const auto sql = ctxt->getInsertStatementsFor(ensemble, "HOBU", "XXXX", false, {"HOBU"}); EXPECT_TRUE(!sql.empty()); const auto ensembleNew = AuthorityFactory::create(ctxt, "HOBU")->createDatumEnsemble("XXXX"); EXPECT_TRUE(ensembleNew->isEquivalentTo( ensemble.get(), IComparable::Criterion::EQUIVALENT)); ctxt->stopInsertStatementsSession(); } // non-EPSG projection method { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto crs = nn_dynamic_pointer_cast( PROJStringParser().createFromPROJString( "+proj=sinu +lon_0=195 +x_0=0 +y_0=0 +R=3396000 +units=m " "+no_defs +type=crs")); ASSERT_TRUE(crs != nullptr); const auto statements = ctxt->getInsertStatementsFor( NN_NO_CHECK(crs), "HOBU", "XXXX", false); bool found = false; for (const auto &sql : statements) { if (sql.find("INSERT INTO conversion") != std::string::npos) { found = true; const char *expected = "VALUES('HOBU','CONVERSION_XXXX'," "'unknown','','PROJ','sinu','Sinusoidal',"; EXPECT_TRUE(sql.find(expected) != std::string::npos) << sql; } } EXPECT_TRUE(found); const auto crsNew = AuthorityFactory::create(ctxt, "HOBU")->createProjectedCRS("XXXX"); EXPECT_TRUE(crsNew->isEquivalentTo(crs.get(), IComparable::Criterion::EQUIVALENT)); ctxt->stopInsertStatementsSession(); } // Missing projection method and parameter id, and parameters not in // their nominal order { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto wkt = "PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\"],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]"; const auto crs = nn_dynamic_pointer_cast(WKTParser().createFromWKT(wkt)); ASSERT_TRUE(crs != nullptr); const auto statements = ctxt->getInsertStatementsFor( NN_NO_CHECK(crs), "HOBU", "XXXX", false); bool found = false; const char *expected = "INSERT INTO conversion VALUES('HOBU','CONVERSION_XXXX'," "'UTM zone 31N','','EPSG','9807','Transverse Mercator'," "'EPSG','8801','Latitude of natural origin',0,'EPSG','9102'," "'EPSG','8802','Longitude of natural origin',3,'EPSG','9102'," "'EPSG','8805','Scale factor at natural origin',0.9996," "'EPSG','9201'," "'EPSG','8806','False easting',500000,'EPSG','9001'," "'EPSG','8807','False northing',0,'EPSG','9001'," "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL," "NULL,0)"; for (const auto &sql : statements) { if (sql.find("INSERT INTO conversion") != std::string::npos) { found = true; EXPECT_TRUE(sql.find(expected) != std::string::npos) << sql; } } EXPECT_TRUE(found); const auto crsNew = AuthorityFactory::create(ctxt, "HOBU")->createProjectedCRS("XXXX"); EXPECT_TRUE(crsNew->isEquivalentTo(crs.get(), IComparable::Criterion::EQUIVALENT)); ctxt->stopInsertStatementsSession(); } // Error: unknown projection method. { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto wkt = "PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"unknown\"]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]"; const auto crs = nn_dynamic_pointer_cast(WKTParser().createFromWKT(wkt)); ASSERT_TRUE(crs != nullptr); EXPECT_THROW(ctxt->getInsertStatementsFor(NN_NO_CHECK(crs), "HOBU", "XXXX", false), std::exception); } // Error: unknown projection parameter. { auto ctxt = DatabaseContext::create(); ctxt->startInsertStatementsSession(); const auto wkt = "PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Transverse Mercator\"],\n" " PARAMETER[\"unknown\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]"; const auto crs = nn_dynamic_pointer_cast(WKTParser().createFromWKT(wkt)); ASSERT_TRUE(crs != nullptr); EXPECT_THROW(ctxt->getInsertStatementsFor(NN_NO_CHECK(crs), "HOBU", "XXXX", false), std::exception); } } // --------------------------------------------------------------------------- TEST(factory, ogc_timecrs) { auto ctxt = DatabaseContext::create(); auto factory = AuthorityFactory::create(ctxt, Identifier::OGC); factory->createCoordinateReferenceSystem("AnsiDate"); factory->createCoordinateReferenceSystem("JulianDate"); factory->createCoordinateReferenceSystem("UnixTime"); } // --------------------------------------------------------------------------- TEST(factory, ogc_crs) { auto ctxt = DatabaseContext::create(); auto factory = AuthorityFactory::create(ctxt, Identifier::OGC); factory->createCoordinateReferenceSystem("CRS84"); factory->createCoordinateReferenceSystem("84"); factory->createCoordinateReferenceSystem("CRS27"); factory->createCoordinateReferenceSystem("CRS83"); } // --------------------------------------------------------------------------- TEST(factory, getPointMotionOperationsFor) { auto ctxt = DatabaseContext::create(); auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // "NAD83(CSRS)v7" auto crs = factory->createGeodeticCRS("8255"); auto opList = factory->getPointMotionOperationsFor(crs, false); ASSERT_TRUE(!opList.empty()); EXPECT_EQ(opList.front()->identifiers().front()->code(), "9483"); } // --------------------------------------------------------------------------- TEST(factory, toWGS84AutocorrectWrongValues) { auto ctxt = DatabaseContext::create(); { double tx = 1; double ty = 2; double tz = 3; double rx = 0; double ry = 0; double rz = 0; double scale_difference = 0; EXPECT_FALSE(ctxt->toWGS84AutocorrectWrongValues(tx, ty, tz, rx, ry, rz, scale_difference)); EXPECT_EQ(tx, 1); EXPECT_EQ(ty, 2); EXPECT_EQ(tz, 3); EXPECT_EQ(rx, 0); EXPECT_EQ(ry, 0); EXPECT_EQ(rz, 0); EXPECT_EQ(scale_difference, 0); } { // Incorrect parameters for EPSG:15929: WGS84 -> Belgian Lambert 72 // Cf https://github.com/OSGeo/PROJ/issues/4170 double tx = -106.8686; double ty = 52.2978; double tz = -103.7239; double rx = -0.3366; double ry = 0.457; double rz = -1.8422; double scale_difference = -1.2747; EXPECT_TRUE(ctxt->toWGS84AutocorrectWrongValues(tx, ty, tz, rx, ry, rz, scale_difference)); EXPECT_EQ(tx, -106.8686); EXPECT_EQ(ty, 52.2978); EXPECT_EQ(tz, -103.7239); EXPECT_EQ(rx, 0.3366); EXPECT_EQ(ry, -0.457); EXPECT_EQ(rz, 1.8422); EXPECT_EQ(scale_difference, -1.2747); } { // Almost incorrect parameters EPSG:15929: WGS84 -> Belgian Lambert 72 double tx = -106; double ty = 52.2978; double tz = -103.7239; double rx = -0.3366; double ry = 0.457; double rz = -1.8422; double scale_difference = -1.2747; EXPECT_FALSE(ctxt->toWGS84AutocorrectWrongValues(tx, ty, tz, rx, ry, rz, scale_difference)); EXPECT_EQ(tx, -106); EXPECT_EQ(ty, 52.2978); EXPECT_EQ(tz, -103.7239); EXPECT_EQ(rx, -0.3366); EXPECT_EQ(ry, 0.457); EXPECT_EQ(rz, -1.8422); EXPECT_EQ(scale_difference, -1.2747); } { // Correct Position Vector transformation ('EPSG','15869','DHDN to WGS // 84 (3)) double tx = 612.4; double ty = 77.0; double tz = 440.2; double rx = -0.054; double ry = 0.057; double rz = -2.797; double scale_difference = 2.55; EXPECT_FALSE(ctxt->toWGS84AutocorrectWrongValues(tx, ty, tz, rx, ry, rz, scale_difference)); EXPECT_EQ(tx, 612.4); EXPECT_EQ(ty, 77.0); EXPECT_EQ(tz, 440.2); EXPECT_EQ(rx, -0.054); EXPECT_EQ(ry, 0.057); EXPECT_EQ(rz, -2.797); EXPECT_EQ(scale_difference, 2.55); } { // Correct parameters for EPSG:15929: WGS84 -> Belgian Lambert 72 // (Coordinate Frame rotation) Cf // https://github.com/OSGeo/PROJ/issues/4170 double tx = -106.8686; double ty = 52.2978; double tz = -103.7239; double rx = 0.3366; double ry = -0.457; double rz = 1.8422; double scale_difference = -1.2747; EXPECT_FALSE(ctxt->toWGS84AutocorrectWrongValues(tx, ty, tz, rx, ry, rz, scale_difference)); EXPECT_EQ(tx, -106.8686); EXPECT_EQ(ty, 52.2978); EXPECT_EQ(tz, -103.7239); EXPECT_EQ(rx, 0.3366); EXPECT_EQ(ry, -0.457); EXPECT_EQ(rz, 1.8422); EXPECT_EQ(scale_difference, -1.2747); } } } // namespace proj-9.6.0/test/unit/test_fork.c000664 001754 001755 00000006616 14764566077 016534 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test behavior of database access across fork() * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2021, 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. ****************************************************************************/ #if defined(_WIN32) && defined(PROJ_HAS_PTHREADS) #undef PROJ_HAS_PTHREADS #endif #ifdef PROJ_HAS_PTHREADS #include #include #include #include #include #include "proj.h" int main() { PJ_CONTEXT *ctxt = proj_context_create(); PJ_CONTEXT *ctxt2 = proj_context_create(); /* Cause database initialization */ { PJ *P = proj_create(ctxt, "EPSG:4326"); if (P == NULL) { proj_context_destroy(ctxt); return 1; } proj_destroy(P); } { PJ *P = proj_create(ctxt2, "EPSG:4326"); if (P == NULL) { proj_context_destroy(ctxt); proj_context_destroy(ctxt2); return 1; } proj_destroy(P); } for (int iters = 0; iters < 100; ++iters) { pid_t children[4]; for (int i = 0; i < 4; i++) { children[i] = fork(); if (children[i] < 0) { fprintf(stderr, "fork() failed\n"); return 1; } if (children[i] == 0) { { PJ *P = proj_create(ctxt, "EPSG:3067"); if (P == NULL) _exit(1); proj_destroy(P); } { PJ *P = proj_create(ctxt2, "EPSG:32631"); if (P == NULL) _exit(1); proj_destroy(P); } _exit(0); } } for (int i = 0; i < 4; i++) { int status = 0; waitpid(children[i], &status, 0); if (status != 0) { fprintf(stderr, "Error in child\n"); return 1; } } } proj_context_destroy(ctxt); proj_context_destroy(ctxt2); return 0; } #else int main() { return 0; } #endif proj-9.6.0/test/unit/test_grids.cpp000664 001754 001755 00000032554 14764566077 017243 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test grids.hpp * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2020, 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 "gtest_include.h" #include "grids.hpp" #include "proj_internal.h" // M_PI namespace { // --------------------------------------------------------------------------- class GridTest : public ::testing::Test { static void DummyLogFunction(void *, int, const char *) {} protected: void SetUp() override { m_ctxt = proj_context_create(); proj_log_func(m_ctxt, nullptr, DummyLogFunction); m_ctxt2 = proj_context_create(); proj_log_func(m_ctxt2, nullptr, DummyLogFunction); } void TearDown() override { proj_context_destroy(m_ctxt); proj_context_destroy(m_ctxt2); } PJ_CONTEXT *m_ctxt = nullptr; PJ_CONTEXT *m_ctxt2 = nullptr; }; // --------------------------------------------------------------------------- TEST_F(GridTest, VerticalShiftGridSet_null) { auto gridSet = NS_PROJ::VerticalShiftGridSet::open(m_ctxt, "null"); ASSERT_NE(gridSet, nullptr); auto grid = gridSet->gridAt(0.0, 0.0); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 3); EXPECT_EQ(grid->height(), 3); EXPECT_EQ(grid->extentAndRes().west, -M_PI); EXPECT_TRUE(grid->isNullGrid()); EXPECT_FALSE(grid->hasChanged()); float out = -1.0f; EXPECT_TRUE(grid->valueAt(0, 0, out)); EXPECT_EQ(out, 0.0f); EXPECT_FALSE(grid->isNodata(0.0f, 0.0)); gridSet->reassign_context(m_ctxt2); gridSet->reopen(m_ctxt2); } // --------------------------------------------------------------------------- TEST_F(GridTest, VerticalShiftGridSet_gtx) { ASSERT_EQ(NS_PROJ::VerticalShiftGridSet::open(m_ctxt, "foobar"), nullptr); auto gridSet = NS_PROJ::VerticalShiftGridSet::open(m_ctxt, "tests/test_nodata.gtx"); ASSERT_NE(gridSet, nullptr); ASSERT_EQ(gridSet->gridAt(-100, -100), nullptr); auto grid = gridSet->gridAt(4.15 / 180 * M_PI, 52.15 / 180 * M_PI); ASSERT_NE(grid, nullptr); EXPECT_TRUE(grid->isNodata(-88.8888f, 1.0)); gridSet->reassign_context(m_ctxt2); gridSet->reopen(m_ctxt2); grid = gridSet->gridAt(4.15 / 180 * M_PI, 52.15 / 180 * M_PI); EXPECT_NE(grid, nullptr); } // --------------------------------------------------------------------------- TEST_F(GridTest, HorizontalShiftGridSet_null) { auto gridSet = NS_PROJ::HorizontalShiftGridSet::open(m_ctxt, "null"); ASSERT_NE(gridSet, nullptr); auto grid = gridSet->gridAt(0.0, 0.0); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 3); EXPECT_EQ(grid->height(), 3); EXPECT_EQ(grid->extentAndRes().west, -M_PI); EXPECT_TRUE(grid->isNullGrid()); EXPECT_FALSE(grid->hasChanged()); float out1 = -1.0f; float out2 = -1.0f; EXPECT_TRUE(grid->valueAt(0, 0, false, out1, out2)); EXPECT_EQ(out1, 0.0f); EXPECT_EQ(out2, 0.0f); gridSet->reassign_context(m_ctxt2); gridSet->reopen(m_ctxt2); } // --------------------------------------------------------------------------- TEST_F(GridTest, GenericShiftGridSet_null) { auto gridSet = NS_PROJ::GenericShiftGridSet::open(m_ctxt, "null"); ASSERT_NE(gridSet, nullptr); auto grid = gridSet->gridAt(0.0, 0.0); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 3); EXPECT_EQ(grid->height(), 3); EXPECT_EQ(grid->extentAndRes().west, -M_PI); EXPECT_TRUE(grid->isNullGrid()); EXPECT_FALSE(grid->hasChanged()); float out = -1.0f; EXPECT_TRUE(grid->valueAt(0, 0, 0, out)); EXPECT_EQ(out, 0.0f); EXPECT_EQ(grid->unit(0), ""); EXPECT_EQ(grid->description(0), ""); EXPECT_EQ(grid->metadataItem("foo"), ""); EXPECT_EQ(grid->samplesPerPixel(), 0); gridSet->reassign_context(m_ctxt2); gridSet->reopen(m_ctxt2); } #ifdef TIFF_ENABLED // --------------------------------------------------------------------------- TEST_F(GridTest, HorizontalShiftGridSet_gtiff) { auto gridSet = NS_PROJ::HorizontalShiftGridSet::open(m_ctxt, "tests/test_hgrid.tif"); ASSERT_NE(gridSet, nullptr); EXPECT_EQ(gridSet->format(), "gtiff"); EXPECT_TRUE(gridSet->name().find("tests/test_hgrid.tif") != std::string::npos) << gridSet->name(); EXPECT_EQ(gridSet->grids().size(), 1U); ASSERT_EQ(gridSet->gridAt(-100, -100), nullptr); auto grid = gridSet->gridAt(5.5 / 180 * M_PI, 53.5 / 180 * M_PI); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 4); EXPECT_EQ(grid->height(), 4); EXPECT_EQ(grid->extentAndRes().west, 4.0 / 180 * M_PI); EXPECT_FALSE(grid->isNullGrid()); EXPECT_FALSE(grid->hasChanged()); float out1 = -1.0f; float out2 = -1.0f; EXPECT_TRUE(grid->valueAt(0, 3, false, out1, out2)); EXPECT_EQ(out1, static_cast(14400.0 / 3600. / 180 * M_PI)); EXPECT_EQ(out2, static_cast(900.0 / 3600. / 180 * M_PI)); gridSet->reassign_context(m_ctxt2); gridSet->reopen(m_ctxt2); grid = gridSet->gridAt(5.5 / 180 * M_PI, 53.5 / 180 * M_PI); EXPECT_NE(grid, nullptr); } // --------------------------------------------------------------------------- TEST_F(GridTest, GenericShiftGridSet_gtiff) { ASSERT_EQ(NS_PROJ::GenericShiftGridSet::open(m_ctxt, "foobar"), nullptr); auto gridSet = NS_PROJ::GenericShiftGridSet::open( m_ctxt, "tests/nkgrf03vel_realigned_extract.tif"); ASSERT_NE(gridSet, nullptr); ASSERT_EQ(gridSet->gridAt(-100, -100), nullptr); auto grid = gridSet->gridAt(21.3333333 / 180 * M_PI, 63.0 / 180 * M_PI); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 5); EXPECT_EQ(grid->height(), 5); EXPECT_EQ(grid->extentAndRes().isGeographic, true); EXPECT_EQ(grid->extentAndRes().west, 21.0 / 180 * M_PI); EXPECT_FALSE(grid->isNullGrid()); EXPECT_FALSE(grid->hasChanged()); float out = -1.0f; EXPECT_FALSE(grid->valueAt(0, 0, grid->samplesPerPixel(), out)); EXPECT_TRUE(grid->valueAt(0, 0, 0, out)); EXPECT_EQ(out, 0.20783890783786773682f); EXPECT_TRUE(grid->valueAt(1, 0, 0, out)); EXPECT_EQ(out, 0.22427035868167877197); EXPECT_TRUE(grid->valueAt(0, 1, 0, out)); EXPECT_EQ(out, 0.19718019664287567139f); int bandZero = 0; bool nodataFound = false; EXPECT_TRUE(grid->valuesAt(0, 0, 1, 1, 1, &bandZero, &out, nodataFound)); EXPECT_EQ(out, 0.20783890783786773682f); constexpr int COUNT_X = 2; constexpr int COUNT_Y = 4; constexpr int COUNT_BANDS = 3; float values[COUNT_Y * COUNT_X * COUNT_BANDS]; const int bands[] = {0, 1, 2}; constexpr int OFFSET_X = 2; constexpr int OFFSET_Y = 1; EXPECT_TRUE(grid->valuesAt(OFFSET_X, OFFSET_Y, COUNT_X, COUNT_Y, COUNT_BANDS, bands, values, nodataFound)); int valuesIdx = 0; for (int y = 0; y < COUNT_Y; ++y) { for (int x = 0; x < COUNT_X; ++x) { for (int band = 0; band < COUNT_BANDS; ++band) { EXPECT_TRUE( grid->valueAt(OFFSET_X + x, OFFSET_Y + y, band, out)); EXPECT_EQ(out, values[valuesIdx]); ++valuesIdx; } } } EXPECT_EQ(grid->metadataItem("area_of_use"), "Nordic and Baltic countries"); EXPECT_EQ(grid->metadataItem("non_existing"), std::string()); EXPECT_EQ(grid->metadataItem("non_existing", 1), std::string()); EXPECT_EQ(grid->metadataItem("non_existing", 10), std::string()); gridSet->reassign_context(m_ctxt2); gridSet->reopen(m_ctxt2); grid = gridSet->gridAt(21.3333333 / 180 * M_PI, 63.0 / 180 * M_PI); EXPECT_NE(grid, nullptr); } // --------------------------------------------------------------------------- TEST_F(GridTest, GenericShiftGridSet_gtiff_valuesAt_tiled_optim) { auto gridSet = NS_PROJ::GenericShiftGridSet::open( m_ctxt, "tests/nkgrf03vel_realigned_extract_tiled_256x256.tif"); ASSERT_NE(gridSet, nullptr); ASSERT_EQ(gridSet->gridAt(-100, -100), nullptr); auto grid = gridSet->gridAt(21.3333333 / 180 * M_PI, 63.0 / 180 * M_PI); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 5); EXPECT_EQ(grid->height(), 5); EXPECT_EQ(grid->extentAndRes().isGeographic, true); EXPECT_EQ(grid->extentAndRes().west, 21.0 / 180 * M_PI); EXPECT_FALSE(grid->isNullGrid()); EXPECT_FALSE(grid->hasChanged()); float out = -1.0f; EXPECT_FALSE(grid->valueAt(0, 0, grid->samplesPerPixel(), out)); EXPECT_TRUE(grid->valueAt(0, 0, 0, out)); EXPECT_EQ(out, 0.20783890783786773682f); EXPECT_TRUE(grid->valueAt(1, 0, 0, out)); EXPECT_EQ(out, 0.22427035868167877197); EXPECT_TRUE(grid->valueAt(0, 1, 0, out)); EXPECT_EQ(out, 0.19718019664287567139f); int bandZero = 0; bool nodataFound = false; EXPECT_TRUE(grid->valuesAt(0, 0, 1, 1, 1, &bandZero, &out, nodataFound)); EXPECT_EQ(out, 0.20783890783786773682f); constexpr int COUNT_X = 2; constexpr int COUNT_Y = 4; constexpr int COUNT_BANDS_THREE = 3; float values[COUNT_Y * COUNT_X * COUNT_BANDS_THREE]; const int bands[] = {0, 1, 2}; constexpr int OFFSET_X = 2; constexpr int OFFSET_Y = 1; EXPECT_TRUE(grid->valuesAt(OFFSET_X, OFFSET_Y, COUNT_X, COUNT_Y, COUNT_BANDS_THREE, bands, values, nodataFound)); for (int y = 0, valuesIdx = 0; y < COUNT_Y; ++y) { for (int x = 0; x < COUNT_X; ++x) { for (int band = 0; band < COUNT_BANDS_THREE; ++band) { EXPECT_TRUE( grid->valueAt(OFFSET_X + x, OFFSET_Y + y, band, out)); EXPECT_EQ(out, values[valuesIdx]); ++valuesIdx; } } } constexpr int COUNT_BANDS_TWO = 2; EXPECT_TRUE(grid->valuesAt(OFFSET_X, OFFSET_Y, COUNT_X, COUNT_Y, COUNT_BANDS_TWO, bands, values, nodataFound)); for (int y = 0, valuesIdx = 0; y < COUNT_Y; ++y) { for (int x = 0; x < COUNT_X; ++x) { for (int band = 0; band < COUNT_BANDS_TWO; ++band) { EXPECT_TRUE( grid->valueAt(OFFSET_X + x, OFFSET_Y + y, band, out)); EXPECT_EQ(out, values[valuesIdx]); ++valuesIdx; } } } } // --------------------------------------------------------------------------- TEST_F(GridTest, GenericShiftGridSet_gtiff_with_subgrid) { auto gridSet = NS_PROJ::GenericShiftGridSet::open( m_ctxt, "tests/test_hgrid_with_subgrid.tif"); ASSERT_NE(gridSet, nullptr); ASSERT_EQ(gridSet->gridAt(-100, -100), nullptr); auto grid = gridSet->gridAt(-115.5416667 / 180 * M_PI, 51.1666667 / 180 * M_PI); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 11); EXPECT_EQ(grid->height(), 21); EXPECT_EQ(grid->metadataItem("grid_name"), "ALbanff"); } // --------------------------------------------------------------------------- TEST_F(GridTest, GenericShiftGridSet_gtiff_with_two_level_of_subgrids_no_grid_name) { auto gridSet = NS_PROJ::GenericShiftGridSet::open( m_ctxt, "tests/test_hgrid_with_two_level_of_subgrids_no_grid_name.tif"); ASSERT_NE(gridSet, nullptr); ASSERT_EQ(gridSet->gridAt(-100, -100), nullptr); auto grid = gridSet->gridAt(-45.5 / 180 * M_PI, 22.5 / 180 * M_PI); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 8); EXPECT_EQ(grid->height(), 8); } // --------------------------------------------------------------------------- TEST_F(GridTest, GenericShiftGridSet_gtiff_projected) { auto gridSet = NS_PROJ::GenericShiftGridSet::open( m_ctxt, "tests/test_3d_grid_projected.tif"); ASSERT_NE(gridSet, nullptr); ASSERT_EQ(gridSet->gridAt(-1000, -1000), nullptr); auto grid = gridSet->gridAt(1500300.0, 5400300.0); ASSERT_NE(grid, nullptr); EXPECT_EQ(grid->width(), 2); EXPECT_EQ(grid->height(), 2); EXPECT_EQ(grid->extentAndRes().isGeographic, false); EXPECT_EQ(grid->extentAndRes().west, 1500000.0); EXPECT_EQ(grid->extentAndRes().east, 1501000.0); EXPECT_EQ(grid->extentAndRes().south, 5400000.0); EXPECT_EQ(grid->extentAndRes().north, 5401000.0); EXPECT_EQ(grid->extentAndRes().resX, 1000); EXPECT_EQ(grid->extentAndRes().resY, 1000); } #endif // TIFF_ENABLED } // namespace proj-9.6.0/test/unit/test_io.cpp000664 001754 001755 00002730513 14764566077 016544 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" // to be able to use internal::toString #define FROM_PROJ_CPP #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinates.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj_constants.h" #include using namespace osgeo::proj::common; using namespace osgeo::proj::coordinates; using namespace osgeo::proj::crs; using namespace osgeo::proj::cs; using namespace osgeo::proj::datum; using namespace osgeo::proj::internal; using namespace osgeo::proj::io; using namespace osgeo::proj::metadata; using namespace osgeo::proj::operation; using namespace osgeo::proj::util; // --------------------------------------------------------------------------- TEST(io, wkt_parsing) { { auto n = WKTNode::createFrom("MYNODE[]"); EXPECT_EQ(n->value(), "MYNODE"); EXPECT_TRUE(n->children().empty()); EXPECT_EQ(n->toString(), "MYNODE"); } { auto n = WKTNode::createFrom(" MYNODE [ ] "); EXPECT_EQ(n->value(), "MYNODE"); EXPECT_TRUE(n->children().empty()); } EXPECT_THROW(WKTNode::createFrom(""), ParsingException); EXPECT_THROW(WKTNode::createFrom("x"), ParsingException); EXPECT_THROW(WKTNode::createFrom("x,"), ParsingException); EXPECT_THROW(WKTNode::createFrom("x["), ParsingException); EXPECT_THROW(WKTNode::createFrom("["), ParsingException); { auto n = WKTNode::createFrom("MYNODE[\"x\"]"); EXPECT_EQ(n->value(), "MYNODE"); ASSERT_EQ(n->children().size(), 1U); EXPECT_EQ(n->children()[0]->value(), "\"x\""); EXPECT_EQ(n->toString(), "MYNODE[\"x\"]"); } EXPECT_THROW(WKTNode::createFrom("MYNODE[\"x\""), ParsingException); { auto n = WKTNode::createFrom("MYNODE[ \"x\" ]"); EXPECT_EQ(n->value(), "MYNODE"); ASSERT_EQ(n->children().size(), 1U); EXPECT_EQ(n->children()[0]->value(), "\"x\""); } { auto n = WKTNode::createFrom("MYNODE[\"x[\",1]"); EXPECT_EQ(n->value(), "MYNODE"); ASSERT_EQ(n->children().size(), 2U); EXPECT_EQ(n->children()[0]->value(), "\"x[\""); EXPECT_EQ(n->children()[1]->value(), "1"); EXPECT_EQ(n->toString(), "MYNODE[\"x[\",1]"); } EXPECT_THROW(WKTNode::createFrom("MYNODE[\"x\","), ParsingException); { auto n = WKTNode::createFrom("A[B[y]]"); EXPECT_EQ(n->value(), "A"); ASSERT_EQ(n->children().size(), 1U); EXPECT_EQ(n->children()[0]->value(), "B"); ASSERT_EQ(n->children()[0]->children().size(), 1U); EXPECT_EQ(n->children()[0]->children()[0]->value(), "y"); EXPECT_EQ(n->toString(), "A[B[y]]"); } EXPECT_THROW(WKTNode::createFrom("A[B["), ParsingException); std::string str; for (int i = 0; i < 17; i++) { str = "A[" + str + "]"; } EXPECT_THROW(WKTNode::createFrom(str), ParsingException); { auto wkt = "A[\"a\",B[\"b\",C[\"c\"]],D[\"d\"]]"; EXPECT_EQ(WKTNode::createFrom(wkt)->toString(), wkt); } } // --------------------------------------------------------------------------- TEST(io, wkt_parsing_with_parenthesis) { auto n = WKTNode::createFrom("A(\"x\",B(\"y\"))"); EXPECT_EQ(n->toString(), "A[\"x\",B[\"y\"]]"); } // --------------------------------------------------------------------------- TEST(io, wkt_parsing_with_double_quotes_inside) { auto n = WKTNode::createFrom("A[\"xy\"\"z\"]"); EXPECT_EQ(n->children()[0]->value(), "\"xy\"z\""); EXPECT_EQ(n->toString(), "A[\"xy\"\"z\"]"); EXPECT_THROW(WKTNode::createFrom("A[\"x\""), ParsingException); } // --------------------------------------------------------------------------- TEST(io, wkt_parsing_with_printed_quotes) { static const std::string startPrintedQuote("\xE2\x80\x9C"); static const std::string endPrintedQuote("\xE2\x80\x9D"); auto n = WKTNode::createFrom("A[" + startPrintedQuote + "x" + endPrintedQuote + "]"); EXPECT_EQ(n->children()[0]->value(), "\"x\""); EXPECT_EQ(n->toString(), "A[\"x\"]"); } // --------------------------------------------------------------------------- TEST(wkt_parse, sphere) { auto obj = WKTParser().createFromWKT( "ELLIPSOID[\"Sphere\",6378137,0,LENGTHUNIT[\"metre\",1]]"); auto ellipsoid = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellipsoid != nullptr); EXPECT_TRUE(ellipsoid->isSphere()); } // --------------------------------------------------------------------------- TEST(wkt_parse, datum_with_ANCHOR) { auto obj = WKTParser().createFromWKT( "DATUM[\"WGS_1984 with anchor\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]],\n" " ID[\"EPSG\",7030]],\n" " ANCHOR[\"My anchor\"]]"); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); EXPECT_EQ(datum->ellipsoid()->celestialBody(), "Earth"); EXPECT_EQ(datum->primeMeridian()->nameStr(), "Greenwich"); auto anchor = datum->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "My anchor"); EXPECT_FALSE(datum->anchorEpoch().has_value()); } // --------------------------------------------------------------------------- TEST(wkt_parse, datum_with_ANCHOREPOCH) { auto obj = WKTParser().createFromWKT( "DATUM[\"my_datum\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ANCHOREPOCH[2002.5]]"); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); auto anchorEpoch = datum->anchorEpoch(); EXPECT_TRUE(anchorEpoch.has_value()); ASSERT_EQ(anchorEpoch->convertToUnit(UnitOfMeasure::YEAR), 2002.5); EXPECT_FALSE(datum->anchorDefinition().has_value()); } // --------------------------------------------------------------------------- TEST(wkt_parse, datum_with_invalid_ANCHOREPOCH) { auto wkt = "DATUM[\"my_datum\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ANCHOREPOCH[invalid]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, datum_with_invalid_ANCHOREPOCH_too_many_children) { auto wkt = "DATUM[\"my_datum\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ANCHOREPOCH[2002.5,invalid]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, datum_with_pm) { const char *wkt = "DATUM[\"Nouvelle Triangulation Francaise (Paris)\",\n" " ELLIPSOID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293627,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6807]],\n" "PRIMEM[\"Paris\",2.5969213,\n" " ANGLEUNIT[\"grad\",0.0157079632679489],\n" " ID[\"EPSG\",8903]]"; auto obj = WKTParser().createFromWKT(wkt); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); EXPECT_EQ(datum->primeMeridian()->nameStr(), "Paris"); EXPECT_EQ( datum->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, datum_no_pm_not_earth) { auto obj = WKTParser().createFromWKT("DATUM[\"unnamed\",\n" " ELLIPSOID[\"unnamed\",1,0,\n" " LENGTHUNIT[\"metre\",1]]]"); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); EXPECT_EQ(datum->ellipsoid()->celestialBody(), "Non-Earth body"); EXPECT_EQ(datum->primeMeridian()->nameStr(), "Reference meridian"); } // --------------------------------------------------------------------------- TEST(wkt_parse, guess_celestial_body_from_ellipsoid_name) { auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT("DATUM[\"unnamed\",\n" " ELLIPSOID[\"Ananke\",10000,0,\n" " LENGTHUNIT[\"metre\",1]]]"); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); EXPECT_EQ(datum->ellipsoid()->celestialBody(), "Ananke"); } // --------------------------------------------------------------------------- TEST(wkt_parse, guess_celestial_body_from_ellipsoid_name_false_positive) { auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT("DATUM[\"unnamed\",\n" " ELLIPSOID[\"Ananke\",999999,0,\n" " LENGTHUNIT[\"metre\",1]]]"); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); EXPECT_EQ(datum->ellipsoid()->celestialBody(), "Non-Earth body"); } // --------------------------------------------------------------------------- TEST(wkt_parse, dynamic_geodetic_reference_frame) { auto obj = WKTParser().createFromWKT( "GEOGCRS[\"WGS 84 (G1762)\"," "DYNAMIC[FRAMEEPOCH[2005.0]]," "TRF[\"World Geodetic System 1984 (G1762)\"," " ELLIPSOID[\"WGS 84\",6378137,298.257223563]," " ANCHOR[\"My anchor\"]]," "CS[ellipsoidal,3]," " AXIS[\"(lat)\",north,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"(lon)\",east,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"ellipsoidal height (h)\",up,LENGTHUNIT[\"metre\",1.0]]" "]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto dgrf = std::dynamic_pointer_cast(crs->datum()); ASSERT_TRUE(dgrf != nullptr); auto anchor = dgrf->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "My anchor"); EXPECT_TRUE(dgrf->frameReferenceEpoch() == Measure(2005.0, UnitOfMeasure::YEAR)); auto model = dgrf->deformationModelName(); EXPECT_TRUE(!model.has_value()); } // --------------------------------------------------------------------------- TEST(wkt_parse, dynamic_geodetic_reference_frame_with_model) { auto obj = WKTParser().createFromWKT( "GEOGCRS[\"WGS 84 (G1762)\"," "DYNAMIC[FRAMEEPOCH[2005.0],MODEL[\"my_model\"]]," "TRF[\"World Geodetic System 1984 (G1762)\"," " ELLIPSOID[\"WGS 84\",6378137,298.257223563]," " ANCHOR[\"My anchor\"]]," "CS[ellipsoidal,3]," " AXIS[\"(lat)\",north,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"(lon)\",east,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"ellipsoidal height (h)\",up,LENGTHUNIT[\"metre\",1.0]]" "]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto dgrf = std::dynamic_pointer_cast(crs->datum()); ASSERT_TRUE(dgrf != nullptr); auto anchor = dgrf->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "My anchor"); EXPECT_TRUE(dgrf->frameReferenceEpoch() == Measure(2005.0, UnitOfMeasure::YEAR)); auto model = dgrf->deformationModelName(); EXPECT_TRUE(model.has_value()); EXPECT_EQ(*model, "my_model"); } // --------------------------------------------------------------------------- TEST(wkt_parse, dynamic_geodetic_reference_frame_with_velocitygrid) { auto obj = WKTParser().createFromWKT( "GEOGCRS[\"WGS 84 (G1762)\"," "DYNAMIC[FRAMEEPOCH[2005.0],VELOCITYGRID[\"my_model\"]]," "TRF[\"World Geodetic System 1984 (G1762)\"," " ELLIPSOID[\"WGS 84\",6378137,298.257223563]," " ANCHOR[\"My anchor\"]]," "CS[ellipsoidal,3]," " AXIS[\"(lat)\",north,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"(lon)\",east,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"ellipsoidal height (h)\",up,LENGTHUNIT[\"metre\",1.0]]" "]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto dgrf = std::dynamic_pointer_cast(crs->datum()); ASSERT_TRUE(dgrf != nullptr); auto anchor = dgrf->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "My anchor"); EXPECT_TRUE(dgrf->frameReferenceEpoch() == Measure(2005.0, UnitOfMeasure::YEAR)); auto model = dgrf->deformationModelName(); EXPECT_TRUE(model.has_value()); EXPECT_EQ(*model, "my_model"); } // --------------------------------------------------------------------------- TEST(wkt_parse, geogcrs_with_ensemble) { auto obj = WKTParser().createFromWKT( "GEOGCRS[\"WGS 84\"," "ENSEMBLE[\"WGS 84 ensemble\"," " MEMBER[\"WGS 84 (TRANSIT)\"]," " MEMBER[\"WGS 84 (G730)\"]," " MEMBER[\"WGS 84 (G834)\"]," " MEMBER[\"WGS 84 (G1150)\"]," " MEMBER[\"WGS 84 (G1674)\"]," " MEMBER[\"WGS 84 (G1762)\"]," " ELLIPSOID[\"WGS " "84\",6378137,298.2572236,LENGTHUNIT[\"metre\",1.0]]," " ENSEMBLEACCURACY[2]" "]," "CS[ellipsoidal,3]," " AXIS[\"(lat)\",north,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"(lon)\",east,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"ellipsoidal height (h)\",up,LENGTHUNIT[\"metre\",1.0]]" "]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); ASSERT_TRUE(crs->datum() == nullptr); ASSERT_TRUE(crs->datumEnsemble() != nullptr); EXPECT_EQ(crs->datumEnsemble()->datums().size(), 6U); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_geogcrs_with_ensemble) { auto wkt = "GEOGCRS[\"WGS 84\"," "ENSEMBLE[\"WGS 84 ensemble\"," " MEMBER[\"WGS 84 (TRANSIT)\"]," " MEMBER[\"WGS 84 (G730)\"]," " MEMBER[\"WGS 84 (G834)\"]," " MEMBER[\"WGS 84 (G1150)\"]," " MEMBER[\"WGS 84 (G1674)\"]," " MEMBER[\"WGS 84 (G1762)\"]," " ENSEMBLEACCURACY[2]" "]," "CS[ellipsoidal,3]," " AXIS[\"(lat)\",north,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"(lon)\",east,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"ellipsoidal height (h)\",up,LENGTHUNIT[\"metre\",1.0]]" "]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- static void checkEPSG_4326(GeographicCRSPtr crs, bool latLong = true, bool checkEPSGCodes = true) { if (checkEPSGCodes) { ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "4326"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); } EXPECT_EQ(crs->nameStr(), "WGS 84"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); if (latLong) { EXPECT_TRUE(cs->axisList()[0]->nameStr() == "Latitude" || cs->axisList()[0]->nameStr() == "Geodetic latitude") << cs->axisList()[0]->nameStr(); EXPECT_EQ(tolower(cs->axisList()[0]->abbreviation()), "lat"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::NORTH); EXPECT_TRUE(cs->axisList()[1]->nameStr() == "Longitude" || cs->axisList()[1]->nameStr() == "Geodetic longitude") << cs->axisList()[1]->nameStr(); EXPECT_EQ(tolower(cs->axisList()[1]->abbreviation()), "lon"); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::EAST); } else { EXPECT_EQ(cs->axisList()[0]->nameStr(), "Longitude"); EXPECT_EQ(cs->axisList()[0]->abbreviation(), "lon"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::EAST); EXPECT_EQ(cs->axisList()[1]->nameStr(), "Latitude"); EXPECT_EQ(cs->axisList()[1]->abbreviation(), "lat"); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::NORTH); } auto datum = crs->datum(); if (checkEPSGCodes) { ASSERT_EQ(datum->identifiers().size(), 1U); EXPECT_EQ(datum->identifiers()[0]->code(), "6326"); EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); } EXPECT_EQ(datum->nameStr(), "World Geodetic System 1984"); auto ellipsoid = datum->ellipsoid(); EXPECT_EQ(ellipsoid->semiMajorAxis().value(), 6378137.0); EXPECT_EQ(ellipsoid->semiMajorAxis().unit(), UnitOfMeasure::METRE); EXPECT_EQ(ellipsoid->inverseFlattening()->value(), 298.257223563); if (checkEPSGCodes) { ASSERT_EQ(ellipsoid->identifiers().size(), 1U); EXPECT_EQ(ellipsoid->identifiers()[0]->code(), "7030"); EXPECT_EQ(*(ellipsoid->identifiers()[0]->codeSpace()), "EPSG"); } EXPECT_EQ(ellipsoid->nameStr(), "WGS 84"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_EPSG_4326) { auto obj = WKTParser().createFromWKT( "GEOGCS[\"WGS 84\"," " DATUM[\"WGS_1984\"," " SPHEROID[\"WGS 84\",6378137,298.257223563," " AUTHORITY[\"EPSG\",\"7030\"]]," " AUTHORITY[\"EPSG\",\"6326\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9122\"]]," " AUTHORITY[\"EPSG\",\"4326\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs, false /* longlat order */); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_EPSG_4267) { auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT( "GEOGCS[\"NAD27\"," " DATUM[\"North_American_Datum_1927\"," " SPHEROID[\"Clarke 1866\",6378206.4,294.978698213898," " AUTHORITY[\"EPSG\",\"7008\"]]," " AUTHORITY[\"EPSG\",\"6267\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9122\"]]," " AUTHORITY[\"EPSG\",\"4267\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); ASSERT_EQ(datum->identifiers().size(), 1U); EXPECT_EQ(datum->identifiers()[0]->code(), "6267"); EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(datum->nameStr(), "North American Datum 1927"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_EPSG_4807_grad_mess) { auto obj = WKTParser().createFromWKT( "GEOGCS[\"NTF (Paris)\",\n" " DATUM[\"Nouvelle_Triangulation_Francaise_Paris\",\n" " SPHEROID[\"Clarke 1880 (IGN)\",6378249.2,293.466021293627,\n" " AUTHORITY[\"EPSG\",\"6807\"]],\n" " AUTHORITY[\"EPSG\",\"6807\"]],\n" /* WKT1_GDAL weirdness: PRIMEM is converted to degree */ " PRIMEM[\"Paris\",2.33722917,\n" " AUTHORITY[\"EPSG\",\"8903\"]],\n" " UNIT[\"grad\",0.015707963267949,\n" " AUTHORITY[\"EPSG\",\"9105\"]],\n" " AXIS[\"latitude\",NORTH],\n" " AXIS[\"longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4807\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); auto primem = datum->primeMeridian(); EXPECT_EQ(primem->longitude().unit(), UnitOfMeasure::GRAD); // Check that we have corrected the value that was in degree into grad. EXPECT_EQ(primem->longitude().value(), 2.5969213); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_EPSG_4901_grad) { auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT("GEOGCS[\"GCS_ATF_Paris\",DATUM[\"D_ATF\"," "SPHEROID[\"Plessis_1817\",6376523.0,308.64]]," "PRIMEM[\"Paris_RGS\",2.33720833333333]," "UNIT[\"Grad\",0.0157079632679489]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); auto primem = datum->primeMeridian(); EXPECT_EQ(primem->nameStr(), "Paris RGS"); // The PRIMEM is really in degree EXPECT_EQ(primem->longitude().unit(), UnitOfMeasure::DEGREE); EXPECT_NEAR(primem->longitude().value(), 2.33720833333333, 1e-14); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_LINUNIT) { const auto wkt = "GEOGCS[\"WGS_1984_3D\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]," "LINUNIT[\"Meter\",1.0]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); const auto &axisList = crs->coordinateSystem()->axisList(); ASSERT_EQ(axisList.size(), 3U); EXPECT_NEAR(axisList[0]->unit().conversionToSI(), 0.0174532925199433, 1e-15); EXPECT_NEAR(axisList[1]->unit().conversionToSI(), 0.0174532925199433, 1e-15); EXPECT_EQ(axisList[2]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_epsg_org_EPSG_4901_PRIMEM_weird_sexagesimal_DMS) { // Current epsg.org output may use the EPSG:9110 "sexagesimal DMS" // unit and a DD.MMSSsss value, but this will likely be changed to // use decimal degree. auto obj = WKTParser().createFromWKT( "GEOGCRS[\"ATF (Paris)\"," " DATUM[\"Ancienne Triangulation Francaise (Paris)\"," " ELLIPSOID[\"Plessis 1817\",6376523,308.64," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]," " ID[\"EPSG\",7027]]," " ID[\"EPSG\",6901]]," " PRIMEM[\"Paris RGS\",2.201395," " ANGLEUNIT[\"sexagesimal DMS\",1,ID[\"EPSG\",9110]]," " ID[\"EPSG\",8914]]," " CS[ellipsoidal,2," " ID[\"EPSG\",6403]]," " AXIS[\"Geodetic latitude (Lat)\",north," " ORDER[1]]," " AXIS[\"Geodetic longitude (Lon)\",east," " ORDER[2]]," " ANGLEUNIT[\"grad\",0.015707963267949,ID[\"EPSG\",9105]]," " USAGE[SCOPE[\"Geodesy.\"],AREA[\"France - mainland onshore.\"]," " BBOX[42.33,-4.87,51.14,8.23]]," "ID[\"EPSG\",4901]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); auto primem = datum->primeMeridian(); EXPECT_EQ(primem->longitude().unit(), UnitOfMeasure::DEGREE); EXPECT_NEAR(primem->longitude().value(), 2.33720833333333, 1e-14); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geographic_old_datum_name_from_EPSG_code) { auto wkt = "GEOGCS[\"S-JTSK (Ferro)\",\n" " " "DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro\",\n" " SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,\n" " AUTHORITY[\"EPSG\",\"7004\"]],\n" " AUTHORITY[\"EPSG\",\"6818\"]],\n" " PRIMEM[\"Ferro\",-17.66666666666667,\n" " AUTHORITY[\"EPSG\",\"8909\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4818\"]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); EXPECT_EQ( datum->nameStr(), "System of the Unified Trigonometrical Cadastral Network (Ferro)"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geographic_old_datum_name_without_EPSG_code) { auto wkt = "GEOGCS[\"S-JTSK (Ferro)\",\n" " " "DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro\",\n" " SPHEROID[\"Bessel 1841\",6377397.155,299.1528128]],\n" " PRIMEM[\"Ferro\",-17.66666666666667],\n" " UNIT[\"degree\",0.0174532925199433]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); EXPECT_EQ( datum->nameStr(), "System of the Unified Trigonometrical Cadastral Network (Ferro)"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geographic_deprecated) { auto wkt = "GEOGCS[\"SAD69 (deprecated)\",\n" " DATUM[\"South_American_Datum_1969\",\n" " SPHEROID[\"GRS 1967\",6378160,298.247167427,\n" " AUTHORITY[\"EPSG\",\"7036\"]],\n" " AUTHORITY[\"EPSG\",\"6291\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9108\"]],\n" " AUTHORITY[\"EPSG\",\"4291\"]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "SAD69"); EXPECT_TRUE(crs->isDeprecated()); } // --------------------------------------------------------------------------- static std::string contentWKT2_EPSG_4326( "[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]],\n" " ID[\"EPSG\",7030]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " ID[\"EPSG\",4326]]"); // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geographic_with_PROJ4_extension) { auto wkt = "GEOGCS[\"WGS 84\",\n" " DATUM[\"unknown\",\n" " SPHEROID[\"WGS84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433],\n" " EXTENSION[\"PROJ4\",\"+proj=longlat +foo=bar +wktext\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +foo=bar +wktext +type=crs"); EXPECT_TRUE( crs->exportToWKT(WKTFormatter::create().get()).find("EXTENSION") == std::string::npos); EXPECT_TRUE( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI).get()) .find("EXTENSION") == std::string::npos); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geographic_epsg_org_api_4326) { // Output from // https://apps.epsg.org/api/v1/CoordRefSystem/4326/export/?format=wkt&formatVersion=1 // using a datum ensemble name auto wkt = "GEOGCS[\"WGS 84\",DATUM[\"World Geodetic System 1984 ensemble\"," "SPHEROID[\"WGS 84\",6378137,298.257223563," "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"degree (supplier to define representation)\"," "0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]]," "AXIS[\"Lat\",north],AXIS[\"Lon\",east]," "AUTHORITY[\"EPSG\",\"4326\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "World Geodetic System 1984"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geographic_epsg_org_api_4258) { // Output from // https://apps.epsg.org/api/v1/CoordRefSystem/4258/export/?format=wkt&formatVersion=1 // using a datum ensemble name auto wkt = "GEOGCS[\"ETRS89\"," "DATUM[\"European Terrestrial Reference System 1989 ensemble\"," "SPHEROID[\"GRS 1980\",6378137,298.257222101," "AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6258\"]]," "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"degree (supplier to define representation)\"," "0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]]," "AXIS[\"Lat\",north],AXIS[\"Lon\",east]," "AUTHORITY[\"EPSG\",\"4258\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "European Terrestrial Reference System 1989"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geographic_missing_unit_and_axis) { auto wkt = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\"," "SPHEROID[\"WGS 84\",6378137,298.257223563]]]]"; // Missing UNIT[] is illegal in strict mode EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); auto obj = WKTParser().setStrict(false).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_EQ(cs->axisList()[0]->unit(), UnitOfMeasure::DEGREE); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geocentric_with_PROJ4_extension) { auto wkt = "GEOCCS[\"WGS 84\",\n" " DATUM[\"unknown\",\n" " SPHEROID[\"WGS84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"Meter\",1],\n" " AXIS[\"Geocentric X\",OTHER],\n" " AXIS[\"Geocentric Y\",OTHER],\n" " AXIS[\"Geocentric Z\",NORTH],\n" " EXTENSION[\"PROJ4\",\"+proj=geocent +foo=bar +wktext\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=geocent +foo=bar +wktext +type=crs"); EXPECT_TRUE( crs->exportToWKT(WKTFormatter::create().get()).find("EXTENSION") == std::string::npos); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geocentric_missing_unit_and_axis) { auto wkt = "GEOCCS[\"WGS 84\",DATUM[\"WGS_1984\"," "SPHEROID[\"WGS 84\",6378137,298.257223563]]]]"; // Missing UNIT[] is illegal in strict mode EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); auto obj = WKTParser().setStrict(false).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 3U); EXPECT_EQ(cs->axisList()[0]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_non_conformant_inf_inverse_flattening) { // Some WKT in the wild use "inf". Cf SPHEROID["unnamed",6370997,"inf"] // in https://zenodo.org/record/3878979#.Y_P4g4CZNH4, // https://zenodo.org/record/5831940#.Y_P4i4CZNH5 // or https://grasswiki.osgeo.org/wiki/Marine_Science auto obj = WKTParser().setStrict(false).createFromWKT( "GEOGCS[\"GCS_sphere\",DATUM[\"D_unknown\"," "SPHEROID[\"Spherical_Earth\",6370997,\"inf\"]]," "PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->ellipsoid()->inverseFlattening()->value(), 0.0); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_GCS_unknown_D_unknown) { auto obj = WKTParser().setStrict(false).createFromWKT( "GEOGCS[\"GCS_unknown\",DATUM[\"D_unknown\"," "SPHEROID[\"unknown\",6370997,0]]," "PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "unknown"); EXPECT_EQ(crs->datum()->nameStr(), "unknown"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_GEODCRS_EPSG_4326) { auto obj = WKTParser().createFromWKT("GEODCRS" + contentWKT2_EPSG_4326); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_long_GEODETICCRS_EPSG_4326) { auto obj = WKTParser().createFromWKT("GEODETICCRS" + contentWKT2_EPSG_4326); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_GEOGCRS_EPSG_4326) { auto obj = WKTParser().createFromWKT("GEOGCRS" + contentWKT2_EPSG_4326); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_long_GEOGRAPHICCRS_EPSG_4326) { auto obj = WKTParser().createFromWKT("GEOGRAPHICCRS" + contentWKT2_EPSG_4326); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_simplified_EPSG_4326) { auto obj = WKTParser().createFromWKT( "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude (lat)\",north],\n" // test "name // (abbreviation)" " AXIS[\"longitude (lon)\",east],\n" " UNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",4326]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs, true /* latlong */, false /* no EPSG codes */); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_GEODETICDATUM) { auto obj = WKTParser().createFromWKT( "GEODCRS[\"WGS 84\",\n" " GEODETICDATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"(lat)\",north],\n" // test "(abbreviation)" " AXIS[\"(lon)\",east],\n" " UNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",4326]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs, true /* latlong */, false /* no EPSG codes */); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_TRF) { auto obj = WKTParser().createFromWKT( "GEODCRS[\"WGS 84\",\n" " TRF[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north],\n" " AXIS[\"longitude\",east],\n" " UNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",4326]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4326(crs, true /* latlong */, false /* no EPSG codes */); } // --------------------------------------------------------------------------- static void checkEPSG_4979(GeographicCRSPtr crs) { ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "4979"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(crs->nameStr(), "WGS 84"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 3U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Latitude"); EXPECT_EQ(cs->axisList()[0]->abbreviation(), "lat"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(cs->axisList()[1]->nameStr(), "Longitude"); EXPECT_EQ(cs->axisList()[1]->abbreviation(), "lon"); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::EAST); EXPECT_EQ(cs->axisList()[2]->nameStr(), "Ellipsoidal height"); EXPECT_EQ(cs->axisList()[2]->abbreviation(), "h"); EXPECT_EQ(cs->axisList()[2]->direction(), AxisDirection::UP); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "World Geodetic System 1984"); auto ellipsoid = datum->ellipsoid(); EXPECT_EQ(ellipsoid->semiMajorAxis().value(), 6378137.0); EXPECT_EQ(ellipsoid->semiMajorAxis().unit(), UnitOfMeasure::METRE); EXPECT_EQ(ellipsoid->inverseFlattening()->value(), 298.257223563); EXPECT_EQ(ellipsoid->nameStr(), "WGS 84"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_EPSG_4979) { auto obj = WKTParser().createFromWKT( "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " UNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkEPSG_4979(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_spherical_planetocentric) { const auto wkt = "GEODCRS[\"Mercury (2015) / Ocentric\",\n" " DATUM[\"Mercury (2015)\",\n" " ELLIPSOID[\"Mercury (2015)\",2440530,1075.12334801762,\n" " LENGTHUNIT[\"metre\",1]],\n" " ANCHOR[\"Hun Kal: 20.0\"]],\n" " PRIMEM[\"Reference Meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[spherical,2],\n" " AXIS[\"planetocentric latitude (U)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"planetocentric longitude (V)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"IAU\",19902,2015],\n" " REMARK[\"Source of IAU Coordinate systems: " "doi://10.1007/s10569-017-9805-5\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->isSphericalPlanetocentric()); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); } // --------------------------------------------------------------------------- static void checkGeocentric(GeodeticCRSPtr crs) { // Explicitly check this is NOT a GeographicCRS EXPECT_TRUE(!dynamic_cast(crs.get())); EXPECT_EQ(crs->nameStr(), "WGS 84 (geocentric)"); EXPECT_TRUE(crs->isGeocentric()); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 3U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Geocentric X"); EXPECT_EQ(cs->axisList()[0]->abbreviation(), "X"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::GEOCENTRIC_X); EXPECT_EQ(cs->axisList()[1]->nameStr(), "Geocentric Y"); EXPECT_EQ(cs->axisList()[1]->abbreviation(), "Y"); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::GEOCENTRIC_Y); EXPECT_EQ(cs->axisList()[2]->nameStr(), "Geocentric Z"); EXPECT_EQ(cs->axisList()[2]->abbreviation(), "Z"); EXPECT_EQ(cs->axisList()[2]->direction(), AxisDirection::GEOCENTRIC_Z); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "World Geodetic System 1984"); auto ellipsoid = datum->ellipsoid(); EXPECT_EQ(ellipsoid->semiMajorAxis().value(), 6378137.0); EXPECT_EQ(ellipsoid->semiMajorAxis().unit(), UnitOfMeasure::METRE); EXPECT_EQ(ellipsoid->inverseFlattening()->value(), 298.257223563); EXPECT_EQ(ellipsoid->nameStr(), "WGS 84"); auto primem = datum->primeMeridian(); ASSERT_EQ(primem->longitude().unit(), UnitOfMeasure::DEGREE); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_geocentric) { auto wkt = "GEODCRS[\"WGS 84 (geocentric)\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]],\n" " ID[\"EPSG\",7030]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]],\n" " ID[\"EPSG\",8901]],\n" " CS[Cartesian,3],\n" // nominal value is 'geocentricX' with g lower case. " AXIS[\"(X)\",GeocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " ID[\"EPSG\",4328]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkGeocentric(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_simplified_geocentric) { auto wkt = "GEODCRS[\"WGS 84 (geocentric)\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX],\n" " AXIS[\"(Y)\",geocentricY],\n" " AXIS[\"(Z)\",geocentricZ],\n" " UNIT[\"metre\",1],\n" " ID[\"EPSG\",4328]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkGeocentric(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geocentric) { auto wkt = "GEOCCS[\"WGS 84 (geocentric)\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Geocentric X\",OTHER],\n" " AXIS[\"Geocentric Y\",OTHER],\n" " AXIS[\"Geocentric Z\",NORTH],\n" " AUTHORITY[\"EPSG\",\"4328\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkGeocentric(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_geocentric_with_z_OTHER) { auto wkt = "GEOCCS[\"WGS 84 (geocentric)\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Geocentric X\",OTHER],\n" " AXIS[\"Geocentric Y\",OTHER],\n" " AXIS[\"Geocentric Z\",OTHER],\n" " AUTHORITY[\"EPSG\",\"4328\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkGeocentric(crs); } // --------------------------------------------------------------------------- static void checkProjected(ProjectedCRSPtr crs, bool checkEPSGCodes = true) { EXPECT_EQ(crs->nameStr(), "WGS 84 / UTM zone 31N"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "32631"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); auto geogCRS = nn_dynamic_pointer_cast(crs->baseCRS()); ASSERT_TRUE(geogCRS != nullptr); checkEPSG_4326(NN_CHECK_ASSERT(geogCRS), true, checkEPSGCodes); auto conversion = crs->derivingConversion(); EXPECT_EQ(conversion->nameStr(), "UTM zone 31N"); auto method = conversion->method(); EXPECT_EQ(method->nameStr(), "Transverse Mercator"); auto values = conversion->parameterValues(); ASSERT_EQ(values.size(), 5U); { const auto &opParamvalue = nn_dynamic_pointer_cast(values[0]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_EQ(paramName, "Latitude of natural origin"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(measure.value(), 0); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[1]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_EQ(paramName, "Longitude of natural origin"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::DEGREE); EXPECT_EQ(measure.value(), 3); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[2]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_EQ(paramName, "Scale factor at natural origin"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::SCALE_UNITY); EXPECT_EQ(measure.value(), 0.9996); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[3]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_EQ(paramName, "False easting"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::METRE); EXPECT_EQ(measure.value(), 500000); } { const auto &opParamvalue = nn_dynamic_pointer_cast(values[4]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_EQ(paramName, "False northing"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.unit(), UnitOfMeasure::METRE); EXPECT_EQ(measure.value(), 0); } auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Easting"); EXPECT_EQ(cs->axisList()[0]->abbreviation(), "E"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::EAST); EXPECT_EQ(cs->axisList()[1]->nameStr(), "Northing"); EXPECT_EQ(cs->axisList()[1]->abbreviation(), "N"); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::NORTH); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_projected) { auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"(E)\",East],\n" // should normally be uppercase " AXIS[\"(N)\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkProjected(crs); EXPECT_TRUE(!crs->baseCRS()->identifiers().empty()); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_projected_no_axis) { auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"latitude\",NORTH],\n" " AXIS[\"longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AUTHORITY[\"EPSG\",\"32631\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkProjected(crs); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_projected_wrong_axis_geogcs) { auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"longitude\",EAST],\n" " AXIS[\"latitude\",NORTH],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AUTHORITY[\"EPSG\",\"32631\"]]"; { WKTParser parser; parser.setStrict(false).attachDatabaseContext( DatabaseContext::create()); auto obj = parser.createFromWKT(wkt); EXPECT_TRUE(!parser.warningList().empty()); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->baseCRS()->identifiers().empty()); auto cs = crs->baseCRS()->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::EAST); EXPECT_EQ(cs->axisList()[1]->direction(), AxisDirection::NORTH); } { WKTParser parser; parser.setStrict(false) .setUnsetIdentifiersIfIncompatibleDef(false) .attachDatabaseContext(DatabaseContext::create()); auto obj = parser.createFromWKT(wkt); EXPECT_TRUE(parser.warningList().empty()); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(!crs->baseCRS()->identifiers().empty()); } } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_projected_wrong_angular_unit) { auto wkt = "PROJCS[\"Merchich / Nord Maroc\"," " GEOGCS[\"Merchich\"," " DATUM[\"Merchich\"," " SPHEROID[\"Clarke 1880 (IGN)\"," "6378249.2,293.466021293627]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"grad\",0.015707963267949," " AUTHORITY[\"EPSG\",\"9105\"]]," " AUTHORITY[\"EPSG\",\"4261\"]]," " PROJECTION[\"Lambert_Conformal_Conic_1SP\"]," " PARAMETER[\"latitude_of_origin\",37]," " PARAMETER[\"central_meridian\",-6]," " PARAMETER[\"scale_factor\",0.999625769]," " PARAMETER[\"false_easting\",500000]," " PARAMETER[\"false_northing\",300000]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]]"; { WKTParser parser; parser.setStrict(false).attachDatabaseContext( DatabaseContext::create()); auto obj = parser.createFromWKT(wkt); EXPECT_TRUE(!parser.warningList().empty()); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // No base CRS identifiers EXPECT_TRUE(crs->baseCRS()->identifiers().empty()); auto cs = crs->baseCRS()->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_NEAR(cs->axisList()[0]->unit().conversionToSI(), UnitOfMeasure::GRAD.conversionToSI(), 1e-10); } { WKTParser parser; parser.setUnsetIdentifiersIfIncompatibleDef(false) .attachDatabaseContext(DatabaseContext::create()); auto obj = parser.createFromWKT(wkt); EXPECT_TRUE(parser.warningList().empty()); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // Base CRS identifier preserved EXPECT_TRUE(!crs->baseCRS()->identifiers().empty()); auto cs = crs->baseCRS()->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_NEAR(cs->axisList()[0]->unit().conversionToSI(), UnitOfMeasure::GRAD.conversionToSI(), 1e-10); } } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_projected_with_PROJ4_extension) { auto wkt = "PROJCS[\"unnamed\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"unknown\",\n" " SPHEROID[\"WGS84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",0],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"Meter\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " EXTENSION[\"PROJ4\",\"+proj=merc +wktext\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=merc +wktext +type=crs"); EXPECT_TRUE( crs->exportToWKT(WKTFormatter::create().get()).find("EXTENSION") == std::string::npos); EXPECT_TRUE( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI).get()) .find("EXTENSION") == std::string::npos); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_projected_missing_unit_and_axis) { auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",GEOGCS[\"WGS 84\"," "DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563," "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"degree\",0.0174532925199433," "AUTHORITY[\"EPSG\",\"9122\"]]," "AUTHORITY[\"EPSG\",\"4326\"]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"latitude_of_origin\",0]," "PARAMETER[\"central_meridian\",3]," "PARAMETER[\"scale_factor\",0.9996]," "PARAMETER[\"false_easting\",500000]," "PARAMETER[\"false_northing\",0]]"; // Missing UNIT[] is illegal in strict mode EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); auto obj = WKTParser().setStrict(false).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); EXPECT_EQ(cs->axisList()[0]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_Mercator_1SP_with_latitude_origin_0) { auto wkt = "PROJCS[\"unnamed\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"unknown\",\n" " SPHEROID[\"WGS84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",0],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"Meter\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(got_wkt.find("Mercator_1SP") != std::string::npos) << got_wkt; } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_Mercator_1SP_without_scale_factor) { // See https://github.com/OSGeo/PROJ/issues/1700 auto wkt = "PROJCS[\"unnamed\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"unknown\",\n" " SPHEROID[\"WGS84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"false_easting\",0],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"Meter\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; WKTParser parser; parser.setStrict(false).attachDatabaseContext(DatabaseContext::create()); auto obj = parser.createFromWKT(wkt); EXPECT_TRUE(!parser.warningList().empty()); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(got_wkt.find("PARAMETER[\"scale_factor\",1]") != std::string::npos) << got_wkt; EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +units=m " "+no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_krovak_south_west) { auto wkt = "PROJCS[\"S-JTSK / Krovak\"," " GEOGCS[\"S-JTSK\"," " DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni\"," " SPHEROID[\"Bessel 1841\",6377397.155,299.1528128," " AUTHORITY[\"EPSG\",\"7004\"]]," " AUTHORITY[\"EPSG\",\"6156\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9122\"]]," " AUTHORITY[\"EPSG\",\"4156\"]]," " PROJECTION[\"Krovak\"]," " PARAMETER[\"latitude_of_center\",49.5]," " PARAMETER[\"longitude_of_center\",24.83333333333333]," " PARAMETER[\"azimuth\",30.2881397527778]," " PARAMETER[\"pseudo_standard_parallel_1\",78.5]," " PARAMETER[\"scale_factor\",0.9999]," " PARAMETER[\"false_easting\",0]," " PARAMETER[\"false_northing\",0]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"X\",SOUTH]," " AXIS[\"Y\",WEST]," " AUTHORITY[\"EPSG\",\"5513\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Krovak"); auto expected_wkt2 = "PROJCRS[\"S-JTSK / Krovak\",\n" " BASEGEODCRS[\"S-JTSK\",\n" " DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Krovak\",\n" " ID[\"EPSG\",9819]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",24.8333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard " "parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"x\",south,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"y\",west,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5513]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected_wkt2); auto projString = crs->exportToPROJString(PROJStringFormatter::create().get()); auto expectedPROJString = "+proj=krovak +axis=swu +lat_0=49.5 " "+lon_0=24.8333333333333 +alpha=30.2881397527778 " "+k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m " "+no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); obj = PROJStringParser().createFromPROJString(projString); auto crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); auto wkt2 = crs2->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt2.find("METHOD[\"Krovak\"") != std::string::npos) << wkt2; EXPECT_TRUE( wkt2.find("PARAMETER[\"Latitude of pseudo standard parallel\",78.5,") != std::string::npos) << wkt2; EXPECT_TRUE( wkt2.find("PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,") != std::string::npos) << wkt2; EXPECT_EQ(crs2->exportToPROJString(PROJStringFormatter::create().get()), expectedPROJString); obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=unitconvert +xy_in=deg " "+xy_out=rad " "+step +proj=krovak +lat_0=49.5 " "+lon_0=24.8333333333333 +alpha=30.2881397527778 " "+k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+step +proj=axisswap +order=-2,-1"); crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); wkt2 = crs2->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt2.find("METHOD[\"Krovak\"") != std::string::npos) << wkt2; } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_krovak_north_oriented) { auto wkt = "PROJCS[\"S-JTSK / Krovak East North\"," " GEOGCS[\"S-JTSK\"," " DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni\"," " SPHEROID[\"Bessel 1841\",6377397.155,299.1528128," " AUTHORITY[\"EPSG\",\"7004\"]]," " AUTHORITY[\"EPSG\",\"6156\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9122\"]]," " AUTHORITY[\"EPSG\",\"4156\"]]," " PROJECTION[\"Krovak\"]," " PARAMETER[\"latitude_of_center\",49.5]," " PARAMETER[\"longitude_of_center\",24.83333333333333]," " PARAMETER[\"azimuth\",30.2881397527778]," " PARAMETER[\"pseudo_standard_parallel_1\",78.5]," " PARAMETER[\"scale_factor\",0.9999]," " PARAMETER[\"false_easting\",0]," " PARAMETER[\"false_northing\",0]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"X\",EAST]," " AXIS[\"Y\",NORTH]," " AUTHORITY[\"EPSG\",\"5514\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Krovak (North Orientated)"); EXPECT_EQ( crs->exportToWKT(WKTFormatter::create().get()), "PROJCRS[\"S-JTSK / Krovak East North\",\n" " BASEGEODCRS[\"S-JTSK\",\n" " DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Krovak (North Orientated)\",\n" " ID[\"EPSG\",1041]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",24.8333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard " "parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"x\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"y\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5514]]"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_krovak_modified_south_west) { auto wkt = "PROJCRS[\"S-JTSK/05 / Modified Krovak\",\n" " BASEGEOGCRS[\"S-JTSK/05\",\n" " DATUM[\"System of the Unified Trigonometrical Cadastral " "Network/05\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",5228]],\n" " CONVERSION[\"Modified Krovak (Greenwich)\",\n" " METHOD[\"Krovak Modified\",\n" " ID[\"EPSG\",1042]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",24.8333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397222222,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard " "parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",5000000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5000000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"southing (X)\",south,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"westing (Y)\",west,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"Engineering survey, topographic mapping.\"],\n" " AREA[\"Czechia.\"],\n" " BBOX[48.58,12.09,51.06,18.86]],\n" " ID[\"EPSG\",5515]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Krovak Modified"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); auto projString = crs->exportToPROJString(PROJStringFormatter::create().get()); auto expectedPROJString = "+proj=mod_krovak +axis=swu +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397222222 +k=0.9999 +x_0=5000000 +y_0=5000000 " "+ellps=bessel +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); obj = PROJStringParser().createFromPROJString(projString); auto crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); auto wkt2 = crs2->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt2.find("METHOD[\"Krovak Modified\"") != std::string::npos) << wkt2; EXPECT_TRUE( wkt2.find("PARAMETER[\"Latitude of pseudo standard parallel\",78.5,") != std::string::npos) << wkt2; EXPECT_TRUE( wkt2.find("PARAMETER[\"Co-latitude of cone axis\",30.2881397222222,") != std::string::npos) << wkt2; EXPECT_EQ(crs2->exportToPROJString(PROJStringFormatter::create().get()), expectedPROJString); obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=unitconvert +xy_in=deg " "+xy_out=rad " "+step +proj=mod_krovak +lat_0=49.5 " "+lon_0=24.8333333333333 +alpha=30.2881397222222 " "+k=0.9999 +x_0=5000000 +y_0=5000000 +ellps=bessel " "+step +proj=axisswap +order=-2,-1"); crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); wkt2 = crs2->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt2.find("METHOD[\"Krovak Modified\"") != std::string::npos) << wkt2; } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_krovak_modified_east_north) { auto wkt = "PROJCRS[\"S-JTSK/05 / Modified Krovak East North\",\n" " BASEGEOGCRS[\"S-JTSK/05\",\n" " DATUM[\"System of the Unified Trigonometrical Cadastral " "Network/05\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",5228]],\n" " CONVERSION[\"Modified Krovak East North (Greenwich)\",\n" " METHOD[\"Krovak Modified (North Orientated)\",\n" " ID[\"EPSG\",1043]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",24.8333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397222222,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard " "parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",5000000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5000000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"GIS.\"],\n" " AREA[\"Czechia.\"],\n" " BBOX[48.58,12.09,51.06,18.86]],\n" " ID[\"EPSG\",5516]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Krovak Modified (North Orientated)"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); auto projString = crs->exportToPROJString(PROJStringFormatter::create().get()); auto expectedPROJString = "+proj=mod_krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397222222 +k=0.9999 +x_0=5000000 +y_0=5000000 " "+ellps=bessel +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); obj = PROJStringParser().createFromPROJString(projString); auto crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); auto wkt2 = crs2->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt2.find("METHOD[\"Krovak Modified (North Orientated)\"") != std::string::npos) << wkt2; EXPECT_TRUE( wkt2.find("PARAMETER[\"Latitude of pseudo standard parallel\",78.5,") != std::string::npos) << wkt2; EXPECT_TRUE( wkt2.find("PARAMETER[\"Co-latitude of cone axis\",30.2881397222222,") != std::string::npos) << wkt2; EXPECT_EQ(crs2->exportToPROJString(PROJStringFormatter::create().get()), expectedPROJString); obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=unitconvert +xy_in=deg " "+xy_out=rad " "+step +proj=mod_krovak +lat_0=49.5 " "+lon_0=24.8333333333333 +alpha=30.2881397222222 " "+k=0.9999 +x_0=5000000 +y_0=5000000 +ellps=bessel"); crs2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs2 != nullptr); wkt2 = crs2->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt2.find("METHOD[\"Krovak Modified (North Orientated)\"") != std::string::npos) << wkt2; } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_polar_stereographic_latitude_of_origin_70) { auto wkt = "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",70],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); auto expectedPROJString = "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=2 " "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->nameStr(), "Easting"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->direction(), AxisDirection::SOUTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->nameStr(), "Northing"); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->direction(), AxisDirection::SOUTH); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_polar_stereographic_latitude_of_origin_minus_70) { auto wkt = "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",-70],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->nameStr(), "Easting"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->nameStr(), "Northing"); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->direction(), AxisDirection::NORTH); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_polar_stereographic_latitude_of_origin_90) { auto wkt = "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",90],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); auto expectedPROJString = "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=2 " "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_polar_stereographic_latitude_of_origin_90_scale_factor_1) { auto wkt = "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",90],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); auto expectedPROJString = "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=2 " "+x_0=3 +y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_polar_stereographic_scale_factor) { auto wkt = "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",90],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",0.99],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); auto expectedPROJString = "+proj=stere +lat_0=90 +lon_0=2 +k=0.99 +x_0=3 " "+y_0=4 +datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_Spherical_Cross_Track_Height) { auto wkt = "PROJCS[\"unknown\",\n" " GEOGCS[\"unknown\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]]],\n" " PROJECTION[\"Spherical_Cross_Track_Height\"],\n" " PARAMETER[\"peg_point_latitude\",1],\n" " PARAMETER[\"peg_point_longitude\",2],\n" " PARAMETER[\"peg_point_heading\",3],\n" " PARAMETER[\"peg_point_height\",4],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); auto expectedPROJString = "+proj=sch +plat_0=1 +plon_0=2 +phdg_0=3 +h_0=4 " "+datum=WGS84 +units=m +no_defs +type=crs"; EXPECT_EQ(projString, expectedPROJString); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_hotine_oblique_mercator_without_rectified_grid_angle) { auto wkt = "PROJCS[\"NAD_1983_Michigan_GeoRef_Meters\"," "GEOGCS[\"NAD83(1986)\"," "DATUM[\"North_American_Datum_1983\"," "SPHEROID[\"GRS_1980\",6378137,298.257222101]]," "PRIMEM[\"Greenwich\",0]," "UNIT[\"Degree\",0.017453292519943295]]," "PROJECTION[\"Hotine_Oblique_Mercator\"]," "PARAMETER[\"false_easting\",2546731.496]," "PARAMETER[\"false_northing\",-4354009.816]," "PARAMETER[\"latitude_of_center\",45.30916666666666]," "PARAMETER[\"longitude_of_center\",-86]," "PARAMETER[\"azimuth\",-22.74444]," "PARAMETER[\"scale_factor\",0.9996]," "UNIT[\"Meter\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // Check that we have added automatically rectified_grid_angle auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(got_wkt.find("PARAMETER[\"rectified_grid_angle\",-22.74444]") != std::string::npos) << got_wkt; } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_hotine_oblique_mercator_with_rectified_grid_angle) { auto wkt = "PROJCS[\"NAD_1983_Michigan_GeoRef_Meters\"," "GEOGCS[\"NAD83(1986)\"," "DATUM[\"North_American_Datum_1983\"," "SPHEROID[\"GRS_1980\",6378137,298.257222101]]," "PRIMEM[\"Greenwich\",0]," "UNIT[\"Degree\",0.017453292519943295]]," "PROJECTION[\"Hotine_Oblique_Mercator\"]," "PARAMETER[\"false_easting\",2546731.496]," "PARAMETER[\"false_northing\",-4354009.816]," "PARAMETER[\"latitude_of_center\",45.30916666666666]," "PARAMETER[\"longitude_of_center\",-86]," "PARAMETER[\"azimuth\",-22.74444]," "PARAMETER[\"rectified_grid_angle\",-23]," "PARAMETER[\"scale_factor\",0.9996]," "UNIT[\"Meter\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // Check that we have not overridden rectified_grid_angle auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(got_wkt.find("PARAMETER[\"rectified_grid_angle\",-23]") != std::string::npos) << got_wkt; } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_hotine_oblique_mercator_azimuth_center_with_rectified_grid_angle) { auto wkt = "PROJCS[\"unknown\"," "GEOGCS[\"unknown\"," " DATUM[\"WGS_1984\"," " SPHEROID[\"WGS 84\",6378137,298.257223563]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"degree\",0.0174532925199433]]," "PROJECTION[\"Hotine_Oblique_Mercator_Azimuth_Center\"]," "PARAMETER[\"latitude_of_center\",0]," "PARAMETER[\"longitude_of_center\",0]," "PARAMETER[\"azimuth\",30]," "PARAMETER[\"rectified_grid_angle\",0]," "PARAMETER[\"scale_factor\",1]," "PARAMETER[\"false_easting\",0]," "PARAMETER[\"false_northing\",0]," "UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // Check that we have not overridden rectified_grid_angle auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(got_wkt.find("PARAMETER[\"rectified_grid_angle\",0]") != std::string::npos) << got_wkt; } // --------------------------------------------------------------------------- TEST(proj_export, wkt2_hotine_oblique_mercator_without_rectified_grid_angle) { auto wkt = "PROJCRS[\"NAD_1983_Michigan_GeoRef_Meters\",\n" " BASEGEOGCRS[\"NAD83(1986)\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6269]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Hotine Oblique Mercator (variant A)\",\n" " ID[\"EPSG\",9812]],\n" " PARAMETER[\"False easting\",2546731.496,\n" " LENGTHUNIT[\"Meter\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",-4354009.816,\n" " LENGTHUNIT[\"Meter\",1],\n" " ID[\"EPSG\",8807]],\n" " PARAMETER[\"Latitude of projection centre\"," " 45.3091666666667,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection centre\",-86,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth of initial line\",-22.74444,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Scale factor on initial line\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"Meter\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"Meter\",1]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // We don't do any particular handling of missing Angle from Rectified // to Skew Grid on import, but on export to PROJ string, // check that we don't add a dummy gamma value. auto expectedPROJString = "+proj=omerc +no_uoff +lat_0=45.3091666666667 " "+lonc=-86 +alpha=-22.74444 " "+k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 " "+datum=NAD83 +units=m +no_defs +type=crs"; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), expectedPROJString); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_projected) { auto wkt = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]],\n" " ID[\"EPSG\",7030]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" // Voluntary omit LENGTHUNIT to check the WKT grammar accepts // Check that we default to degree //" ANGLEUNIT[\"degree\",0.0174532925199433,\n" //" ID[\"EPSG\",9122]],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" // Check that we default to unity //" SCALEUNIT[\"unity\",1,\n" //" ID[\"EPSG\",9201]],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" // Voluntary omit LENGTHUNIT to check the WKT grammar accepts // Check that we default to metre //" LENGTHUNIT[\"metre\",1,\n" //" ID[\"EPSG\",9001]],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",16031]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " ID[\"EPSG\",32631]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkProjected(crs, /*checkEPSGCodes = */ false); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_projected_with_id_in_basegeodcrs) { auto wkt = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " ID[\"EPSG\",4326]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\"],\n" " PARAMETER[\"Latitude of natural origin\",0],\n" " PARAMETER[\"Longitude of natural origin\",3],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996],\n" " PARAMETER[\"False easting\",500000],\n" " PARAMETER[\"False northing\",0]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1],\n" " ID[\"EPSG\",32631]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); ASSERT_EQ(crs->baseCRS()->identifiers().size(), 1U); EXPECT_EQ(crs->baseCRS()->identifiers().front()->code(), "4326"); { auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_TRUE(got_wkt.find("ID[\"EPSG\",4326]]") != std::string::npos) << got_wkt; } { auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019_SIMPLIFIED) .get()); EXPECT_TRUE(got_wkt.find("ID[\"EPSG\",4326]]") == std::string::npos) << got_wkt; } } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_projected_no_id_but_id_in_basegeodcrs) { auto wkt = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " ID[\"EPSG\",4326]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\"],\n" " PARAMETER[\"Latitude of natural origin\",0],\n" " PARAMETER[\"Longitude of natural origin\",3],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996],\n" " PARAMETER[\"False easting\",500000],\n" " PARAMETER[\"False northing\",0]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto got_wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_TRUE(got_wkt.find("ID[\"EPSG\",4326]]") != std::string::npos) << got_wkt; } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_simplified_projected) { auto wkt = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\"],\n" " PARAMETER[\"Latitude of natural origin\",0],\n" " PARAMETER[\"Longitude of natural origin\",3],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996],\n" " PARAMETER[\"False easting\",500000],\n" " PARAMETER[\"False northing\",0]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1],\n" " ID[\"EPSG\",32631]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); checkProjected(crs, /*checkEPSGCodes = */ false); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_projected_3D) { auto wkt = "PROJCRS[\"WGS 84 (G1762) / UTM zone 31N 3D\"," " BASEGEOGCRS[\"WGS 84\"," " DATUM[\"World Geodetic System of 1984 (G1762)\"," " ELLIPSOID[\"WGS 84\",6378137,298.257223563," " LENGTHUNIT[\"metre\",1.0]]]]," " CONVERSION[\"Some conversion 3D\"," " METHOD[\"Transverse Mercator (3D)\"]," " PARAMETER[\"Latitude of origin\",0.0," " ANGLEUNIT[\"degree\",0.0174532925199433]]," " PARAMETER[\"Longitude of origin\",3.0," " ANGLEUNIT[\"degree\",0.0174532925199433]]," " PARAMETER[\"Scale factor\",1,SCALEUNIT[\"unity\",1.0]]," " PARAMETER[\"False easting\",0.0," " LENGTHUNIT[\"metre\",1.0]]," " PARAMETER[\"False northing\",0.0,LENGTHUNIT[\"metre\",1.0]]]," " CS[Cartesian,3]," " AXIS[\"(E)\",east,ORDER[1]]," " AXIS[\"(N)\",north,ORDER[2]]," " AXIS[\"ellipsoidal height (h)\",up,ORDER[3]]," " LENGTHUNIT[\"metre\",1.0]" "]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 " "+units=m +no_defs +type=crs"); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2015).get()), FormattingException); EXPECT_NO_THROW(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get())); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_projected_utm_3D) { // Example from WKT2:2019 auto wkt = "PROJCRS[\"WGS 84 (G1762) / UTM zone 31N 3D\"," " BASEGEOGCRS[\"WGS 84\"," " DATUM[\"World Geodetic System of 1984 (G1762)\"," " ELLIPSOID[\"WGS 84\",6378137,298.257223563," " LENGTHUNIT[\"metre\",1.0]]]]," " CONVERSION[\"UTM zone 31N 3D\"," " METHOD[\"Transverse Mercator (3D)\"]," " PARAMETER[\"Latitude of origin\",0.0," " ANGLEUNIT[\"degree\",0.0174532925199433]]," " PARAMETER[\"Longitude of origin\",3.0," " ANGLEUNIT[\"degree\",0.0174532925199433]]," " PARAMETER[\"Scale factor\",0.9996,SCALEUNIT[\"unity\",1.0]]," " PARAMETER[\"False easting\",500000.0," " LENGTHUNIT[\"metre\",1.0]]," " PARAMETER[\"False northing\",0.0,LENGTHUNIT[\"metre\",1.0]]]," " CS[Cartesian,3]," " AXIS[\"(E)\",east,ORDER[1]]," " AXIS[\"(N)\",north,ORDER[2]]," " AXIS[\"ellipsoidal height (h)\",up,ORDER[3]]," " LENGTHUNIT[\"metre\",1.0]" "]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=utm +zone=31 +ellps=WGS84 +units=m +no_defs +type=crs"); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2015).get()), FormattingException); EXPECT_NO_THROW(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get())); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_projected_with_base_geocentric) { auto wkt = "PROJCRS[\"EPSG topocentric example B\",\n" " BASEGEODCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4978]],\n" " CONVERSION[\"EPSG topocentric example B\",\n" " METHOD[\"Geocentric/topocentric conversions\",\n" " ID[\"EPSG\",9836]],\n" " PARAMETER[\"Geocentric X of topocentric origin\",3771793.97,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8837]],\n" " PARAMETER[\"Geocentric Y of topocentric origin\",140253.34,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8838]],\n" " PARAMETER[\"Geocentric Z of topocentric origin\",5124304.35,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8839]]],\n" " CS[Cartesian,3],\n" " AXIS[\"topocentric East (U)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"topocentric North (V)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"topocentric height (W)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"Example only (fictitious).\"],\n" " AREA[\"Description of the extent of the CRS.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",5820]]"; auto dbContext = DatabaseContext::create(); // Need a database so that EPSG:4978 is resolved auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->baseCRS()->isGeocentric()); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt2_2019_eqdc_non_epsg) { // Example from WKT2:2019 auto wkt = "PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Equidistant Conic\"],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"False easting\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=eqdc +lat_0=1 +lon_0=2 +lat_1=3 +lat_2=4 +x_0=5 +y_0=6 " "+datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(crs, projected_angular_unit_from_primem) { auto obj = WKTParser().createFromWKT( "PROJCRS[\"NTF (Paris) / Lambert Nord France\",\n" " BASEGEODCRS[\"NTF (Paris)\",\n" " DATUM[\"Nouvelle Triangulation Francaise (Paris)\",\n" " ELLIPSOID[\"Clarke 1880 " "(IGN)\",6378249.2,293.4660213,LENGTHUNIT[\"metre\",1.0]]],\n" " PRIMEM[\"Paris\",2.5969213,ANGLEUNIT[\"grad\",0.015707963268]]],\n" " CONVERSION[\"Lambert Nord France\",\n" " METHOD[\"Lambert Conic Conformal (1SP)\",ID[\"EPSG\",9801]],\n" " PARAMETER[\"Latitude of natural " "origin\",55,ANGLEUNIT[\"grad\",0.015707963268]],\n" " PARAMETER[\"Longitude of natural " "origin\",0,ANGLEUNIT[\"grad\",0.015707963268]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.999877341,SCALEUNIT[\"unity\",1.0]],\n" " PARAMETER[\"False easting\",600000,LENGTHUNIT[\"metre\",1.0]],\n" " PARAMETER[\"False northing\",200000,LENGTHUNIT[\"metre\",1.0]]],\n" " CS[cartesian,2],\n" " AXIS[\"easting (X)\",east,ORDER[1]],\n" " AXIS[\"northing (Y)\",north,ORDER[2]],\n" " LENGTHUNIT[\"metre\",1.0],\n" " ID[\"EPSG\",27561]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->coordinateSystem()->axisList()[0]->unit(), UnitOfMeasure::GRAD); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_MERIDIAN) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1.0]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting " "(X)\",south,MERIDIAN[90,ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " AXIS[\"northing (Y)\",north],\n" " UNIT[\"metre\",1],\n" " ID[\"EPSG\",32631]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); ASSERT_EQ(crs->coordinateSystem()->axisList().size(), 2U); auto axis = crs->coordinateSystem()->axisList()[0]; auto meridian = axis->meridian(); ASSERT_TRUE(meridian != nullptr); EXPECT_EQ(meridian->longitude().value(), 90.0); EXPECT_EQ(meridian->longitude().unit(), UnitOfMeasure::DEGREE); ASSERT_TRUE(crs->coordinateSystem()->axisList()[1]->meridian() == nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_multiple_ID) { auto wkt = "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX],\n" " AXIS[\"(Y)\",geocentricY],\n" " AXIS[\"(Z)\",geocentricZ],\n" " UNIT[\"metre\",1],\n" " ID[\"authorityA\",\"codeA\"],\n" " ID[\"authorityB\",\"codeB\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84"); ASSERT_EQ(crs->identifiers().size(), 2U); EXPECT_EQ(crs->identifiers()[0]->code(), "codeA"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "authorityA"); EXPECT_EQ(crs->identifiers()[1]->code(), "codeB"); EXPECT_EQ(*(crs->identifiers()[1]->codeSpace()), "authorityB"); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_AXISMINVAL_AXISMAXVAL_RANGEMEANING) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1]],\n" " CS[Cartesian,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " AXISMINVALUE[0],\n" " AXISMAXVALUE[360],\n" // nominal value is 'wraparound' lower case " RANGEMEANING[wrapAround]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); ASSERT_EQ(crs->coordinateSystem()->axisList().size(), 2U); { auto axis = crs->coordinateSystem()->axisList()[0]; EXPECT_FALSE(axis->minimumValue().has_value()); EXPECT_FALSE(axis->maximumValue().has_value()); EXPECT_FALSE(axis->rangeMeaning().has_value()); } { auto axis = crs->coordinateSystem()->axisList()[1]; ASSERT_TRUE(axis->minimumValue().has_value()); EXPECT_EQ(*axis->minimumValue(), 0); ASSERT_TRUE(axis->maximumValue().has_value()); EXPECT_EQ(*axis->maximumValue(), 360); ASSERT_TRUE(axis->rangeMeaning().has_value()); EXPECT_EQ(axis->rangeMeaning()->toString(), "wraparound"); } EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), replaceAll(wkt, "wrapAround", "wraparound")); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_invalid_AXISMINVAL_string) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1]],\n" " CS[Cartesian,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " AXISMINVALUE[invalid]]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_invalid_AXISMINVAL_too_many_children) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1]],\n" " CS[Cartesian,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " AXISMINVALUE[1,2]]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_invalid_AXISMAXVAL_string) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1]],\n" " CS[Cartesian,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " AXISMAXVALUE[invalid]]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_invalid_AXISMAXVAL_too_many_children) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1]],\n" " CS[Cartesian,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " AXISMAXVALUE[1,2]]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_invalid_RANGEMEANING) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1]],\n" " CS[Cartesian,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " AXISMINVALUE[0],\n" " AXISMAXVALUE[360],\n" " RANGEMEANING[invalid]]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, cs_with_invalid_RANGEMEANING_too_many_children) { auto wkt = "PROJCRS[\"dummy\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"dummy\",\n" " METHOD[\"dummy\"],\n" " PARAMETER[\"dummy\",1]],\n" " CS[Cartesian,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " AXISMINVALUE[0],\n" " AXISMAXVALUE[360],\n" " RANGEMEANING[exact,unexpected_value]]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_WKT2) { auto wkt = "VERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5701]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "ODN height"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "5701"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "Ordnance Datum Newlyn"); // ASSERT_EQ(datum->identifiers().size(), 1U); // EXPECT_EQ(datum->identifiers()[0]->code(), "5101"); // EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Gravity-related height"); EXPECT_EQ(cs->axisList()[0]->abbreviation(), "H"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_VRF_WKT2) { auto wkt = "VERTCRS[\"ODN height\",\n" " VRF[\"Ordnance Datum Newlyn\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5701]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_with_GEOIDMODEL) { auto wkt = "VERTCRS[\"CGVD2013\",\n" " VDATUM[\"Canadian Geodetic Vertical Datum of 2013\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " GEOIDMODEL[\"CGG2013\",\n" " ID[\"EPSG\",6648]],\n" " GEOIDMODEL[\"other\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_WKT1_GDAL) { auto wkt = "VERT_CS[\"ODN height\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005,\n" " AUTHORITY[\"EPSG\",\"5101\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5701\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "ODN height"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "5701"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "Ordnance Datum Newlyn"); ASSERT_EQ(datum->identifiers().size(), 1U); EXPECT_EQ(datum->identifiers()[0]->code(), "5101"); EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Gravity-related height"); EXPECT_EQ(cs->axisList()[0]->abbreviation(), ""); // "H" in WKT2 EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_WKT1_GDAL_minimum) { auto wkt = "VERT_CS[\"ODN height\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_EQ(crs->nameStr(), "ODN height"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "Ordnance Datum Newlyn"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Gravity-related height"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); EXPECT_EQ(cs->axisList()[0]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_WKT1_GDAL_missing_unit_and_axis) { auto wkt = "VERT_CS[\"ODN height\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005]]"; // Missing UNIT[] is illegal in strict mode EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); auto obj = WKTParser().setStrict(false).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_EQ(crs->nameStr(), "ODN height"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "Ordnance Datum Newlyn"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Gravity-related height"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); EXPECT_EQ(cs->axisList()[0]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_WKT1_GDAl_missing_unit_with_axis) { auto wkt = "VERT_CS[\"ODN height\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005],\n" " AXIS[\"gravity-related height\",UP]]"; // Missing UNIT[] is illegal in strict mode EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); auto obj = WKTParser().setStrict(false).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_EQ(crs->nameStr(), "ODN height"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "Ordnance Datum Newlyn"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->nameStr(), "Gravity-related height"); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); EXPECT_EQ(cs->axisList()[0]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, VERTCS_WKT1_ESRI) { auto wkt = "VERTCS[\"EGM2008_Geoid\",VDATUM[\"EGM2008_Geoid\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "EGM2008_Geoid"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "EGM2008_Geoid"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); EXPECT_EQ(WKTParser().guessDialect(wkt), WKTParser::WKTGuessedDialect::WKT1_ESRI); } // --------------------------------------------------------------------------- TEST(wkt_parse, VERTCS_WKT1_ESRI_context) { auto wkt = "VERTCS[\"EGM2008_Geoid\",VDATUM[\"EGM2008_Geoid\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "EGM2008 height"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "EGM2008 geoid"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::UP); EXPECT_EQ(WKTParser().guessDialect(wkt), WKTParser::WKTGuessedDialect::WKT1_ESRI); } // --------------------------------------------------------------------------- TEST(wkt_parse, VERTCS_WKT1_ESRI_down) { auto wkt = "VERTCS[\"Caspian\",VDATUM[\"Caspian_Sea\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",-1.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); EXPECT_EQ(cs->axisList()[0]->direction(), AxisDirection::DOWN); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_WKT1_LAS_ftUS) { auto wkt = "VERT_CS[\"NAVD88 - Geoid03 (Feet)\"," " VERT_DATUM[\"unknown\",2005]," " UNIT[\"US survey foot\",0.3048006096012192," " AUTHORITY[\"EPSG\",\"9003\"]]," " AXIS[\"Up\",UP]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 height (ftUS)"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "6360"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); const auto &geoidModel = crs->geoidModel(); ASSERT_TRUE(!geoidModel.empty()); EXPECT_EQ(geoidModel[0]->nameStr(), "GEOID03"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "North American Vertical Datum 1988"); ASSERT_EQ(datum->identifiers().size(), 1U); EXPECT_EQ(datum->identifiers()[0]->code(), "5103"); EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); const auto &axis = crs->coordinateSystem()->axisList()[0]; EXPECT_EQ(axis->direction(), AxisDirection::UP); EXPECT_EQ(axis->unit().name(), "US survey foot"); EXPECT_NEAR(axis->unit().conversionToSI(), 0.3048006096012192, 1e-16); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_WKT1_LAS_metre) { auto wkt = "VERT_CS[\"NAVD88 via Geoid09\"," " VERT_DATUM[\"unknown\",2005]," " UNIT[\"metre\",1.0," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Up\",UP]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 height"); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "5703"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "EPSG"); const auto &geoidModel = crs->geoidModel(); ASSERT_TRUE(!geoidModel.empty()); EXPECT_EQ(geoidModel[0]->nameStr(), "GEOID09"); auto datum = crs->datum(); EXPECT_EQ(datum->nameStr(), "North American Vertical Datum 1988"); ASSERT_EQ(datum->identifiers().size(), 1U); EXPECT_EQ(datum->identifiers()[0]->code(), "5103"); EXPECT_EQ(*(datum->identifiers()[0]->codeSpace()), "EPSG"); const auto &axis = crs->coordinateSystem()->axisList()[0]; EXPECT_EQ(axis->direction(), AxisDirection::UP); EXPECT_EQ(axis->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, dynamic_vertical_reference_frame) { auto obj = WKTParser().createFromWKT( "VERTCRS[\"RH2000\"," " DYNAMIC[FRAMEEPOCH[2000.0],MODEL[\"NKG2016LU\"]]," " VDATUM[\"Rikets Hojdsystem 2000\",ANCHOR[\"my anchor\"]]," " CS[vertical,1]," " AXIS[\"gravity-related height (H)\",up]," " LENGTHUNIT[\"metre\",1.0]" "]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto dgrf = std::dynamic_pointer_cast(crs->datum()); ASSERT_TRUE(dgrf != nullptr); auto anchor = dgrf->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "my anchor"); EXPECT_TRUE(dgrf->frameReferenceEpoch() == Measure(2000.0, UnitOfMeasure::YEAR)); auto model = dgrf->deformationModelName(); EXPECT_TRUE(model.has_value()); EXPECT_EQ(*model, "NKG2016LU"); } // --------------------------------------------------------------------------- TEST(wkt_parse, vertcrs_with_ensemble) { auto obj = WKTParser().createFromWKT( "VERTCRS[\"unnamed\",\n" " ENSEMBLE[\"unnamed\",\n" " MEMBER[\"vdatum1\"],\n" " MEMBER[\"vdatum2\"],\n" " ENSEMBLEACCURACY[100]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); ASSERT_TRUE(crs->datum() == nullptr); ASSERT_TRUE(crs->datumEnsemble() != nullptr); EXPECT_EQ(crs->datumEnsemble()->datums().size(), 2U); } // --------------------------------------------------------------------------- TEST(wkt_parse, vdatum_with_ANCHOR) { auto obj = WKTParser().createFromWKT("VDATUM[\"Ordnance Datum Newlyn\",\n" " ANCHOR[\"my anchor\"],\n" " ID[\"EPSG\",5101]]"); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); auto anchor = datum->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "my anchor"); EXPECT_FALSE(datum->anchorEpoch().has_value()); } // --------------------------------------------------------------------------- TEST(wkt_parse, vdatum_with_ANCHOREPOCH) { auto obj = WKTParser().createFromWKT("VDATUM[\"my_datum\",\n" " ANCHOREPOCH[2002.5]]"); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); auto anchorEpoch = datum->anchorEpoch(); EXPECT_TRUE(anchorEpoch.has_value()); ASSERT_EQ(anchorEpoch->convertToUnit(UnitOfMeasure::YEAR), 2002.5); EXPECT_FALSE(datum->anchorDefinition().has_value()); } // --------------------------------------------------------------------------- TEST(wkt_parse, engineeringCRS_WKT2_affine_CS) { auto wkt = "ENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"],\n" " CS[affine,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2).get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPOUNDCRS) { auto obj = WKTParser().createFromWKT( "COMPOUNDCRS[\"horizontal + vertical\",\n" " PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]],\n" " VERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]],\n" " ID[\"codespace\",\"code\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "horizontal + vertical"); EXPECT_EQ(crs->componentReferenceSystems().size(), 2U); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "code"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "codespace"); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPOUNDCRS_spatio_parametric_2015) { auto obj = WKTParser().createFromWKT( "COMPOUNDCRS[\"ICAO layer 0\",\n" " GEODETICCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " PARAMETRICCRS[\"WMO standard atmosphere\",\n" " PARAMETRICDATUM[\"Mean Sea Level\",\n" " ANCHOR[\"Mean Sea Level = 1013.25 hPa\"]],\n" " CS[parametric,1],\n" " AXIS[\"pressure (P)\",unspecified,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPOUNDCRS_spatio_parametric_2019) { auto obj = WKTParser().createFromWKT( "COMPOUNDCRS[\"ICAO layer 0\",\n" " GEOGRAPHICCRS[\"WGS 84\",\n" " DYNAMIC[FRAMEEPOCH[2005]],\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " PARAMETRICCRS[\"WMO standard atmosphere\",\n" " PARAMETRICDATUM[\"Mean Sea Level\",\n" " ANCHOR[\"Mean Sea Level = 1013.25 hPa\"]],\n" " CS[parametric,1],\n" " AXIS[\"pressure (P)\",unspecified,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPOUNDCRS_spatio_temporal_2015) { auto obj = WKTParser().createFromWKT( "COMPOUNDCRS[\"GPS position and time\",\n" " GEODCRS[\"WGS 84 (G1762)\",\n" " DATUM[\"World Geodetic System 1984 (G1762)\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " TIMECRS[\"GPS Time\",\n" " TIMEDATUM[\"Time origin\",TIMEORIGIN[1980-01-01]],\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPOUNDCRS_spatio_temporal_2019) { auto obj = WKTParser().createFromWKT( "COMPOUNDCRS[\"2D GPS position with civil time in ISO 8601 format\",\n" " GEOGCRS[\"WGS 84 (G1762)\",\n" " DATUM[\"World Geodetic System 1984 (G1762)\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " TIMECRS[\"DateTime\",\n" " TDATUM[\"Gregorian Calendar\"],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPD_CS) { auto obj = WKTParser().createFromWKT( "COMPD_CS[\"horizontal + vertical\",\n" " PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"Latitude\",NORTH],\n" " AXIS[\"Longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]],\n" " VERT_CS[\"ODN height\",\n" " VERT_DATUM[\"Ordnance Datum Newlyn\",2005,\n" " AUTHORITY[\"EPSG\",\"5101\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5701\"]],\n" " AUTHORITY[\"codespace\",\"code\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "horizontal + vertical"); EXPECT_EQ(crs->componentReferenceSystems().size(), 2U); ASSERT_EQ(crs->identifiers().size(), 1U); EXPECT_EQ(crs->identifiers()[0]->code(), "code"); EXPECT_EQ(*(crs->identifiers()[0]->codeSpace()), "codespace"); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPD_CS_non_conformant_horizontal_plus_horizontal_as_in_LAS) { auto obj = WKTParser().createFromWKT( "COMPD_CS[\"horizontal + vertical\",\n" " PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"Latitude\",NORTH],\n" " AXIS[\"Longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]],\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"Latitude\",NORTH],\n" " AXIS[\"Longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UTM zone 31N"); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPD_CS_non_conformant_horizontal_TOWGS84_plus_horizontal_as_in_LAS) { const auto wkt = "COMPD_CS[\"WGS 84 + WGS 84\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto baseCRS = nn_dynamic_pointer_cast(crs->baseCRS()); ASSERT_TRUE(baseCRS != nullptr); EXPECT_EQ(baseCRS->nameStr(), "WGS 84"); EXPECT_EQ(baseCRS->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPD_CS_horizontal_bound_geog_plus_vertical_ellipsoidal_height) { // See https://github.com/OSGeo/PROJ/issues/2228 const char *wkt = "COMPD_CS[\"NAD83 + Ellipsoid (Meters)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"Ellipsoid (Meters)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Up\",UP]]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto baseCRS = nn_dynamic_pointer_cast(crs->baseCRS()); ASSERT_TRUE(baseCRS != nullptr); EXPECT_EQ(baseCRS->nameStr(), "NAD83"); EXPECT_EQ(baseCRS->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ(replaceAll(crs->exportToWKT( WKTFormatter::create( WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()), "ellipsoidal height", "Up"), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPD_CS_horizontal_projected_plus_vertical_ellipsoidal_height) { // Variant of above const char *wkt = "COMPD_CS[\"WGS 84 / UTM zone 31N + Ellipsoid (Meters)\",\n" " PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]],\n" " VERT_CS[\"Ellipsoid (Meters)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Up\",UP]]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UTM zone 31N"); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ(replaceAll(crs->exportToWKT( WKTFormatter::create( WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()), "ellipsoidal height", "Up"), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, COMPD_CS_horizontal_geog_plus_vertical_ellipsoidal_height_non_metre) { // See https://github.com/OSGeo/PROJ/issues/2232 const char *wkt = "COMPD_CS[\"NAD83 + Ellipsoid (US Feet)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"Ellipsoid (US Feet)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Up\",UP]]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAD83 (Ellipsoid (US Feet))"); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); EXPECT_NEAR(crs->coordinateSystem()->axisList()[2]->unit().conversionToSI(), 0.304800609601219, 1e-15); EXPECT_EQ(replaceAll(crs->exportToWKT( WKTFormatter::create( WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()), "ellipsoidal height", "Up"), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, implicit_compound_CRS_ESRI) { // See https://lists.osgeo.org/pipermail/gdal-dev/2020-October/052843.html // and https://pro.arcgis.com/en/pro-app/arcpy/classes/spatialreference.htm const char *wkt = "PROJCS[\"NAD_1983_2011_StatePlane_Colorado_Central_FIPS_0502_Ft_US\"," "GEOGCS[\"GCS_NAD_1983_2011\",DATUM[\"D_NAD_1983_2011\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",3000000.00031608]," "PARAMETER[\"False_Northing\",999999.999996]," "PARAMETER[\"Central_Meridian\",-105.5]," "PARAMETER[\"Standard_Parallel_1\",38.45]," "PARAMETER[\"Standard_Parallel_2\",39.75]," "PARAMETER[\"Latitude_Of_Origin\",37.8333333333333]," "UNIT[\"US survey foot\",0.304800609601219]]," "VERTCS[\"CGVD2013_height\"," "VDATUM[\"Canadian_Geodetic_Vertical_Datum_of_2013\"]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAD83(2011) / Colorado Central (ftUS) + " "CGVD2013(CGG2013) height"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, VERTCS_with_ellipsoidal_height_ESRI) { const char *wkt = "VERTCS[\"WGS_1984\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); const char *expected_wkt1 = "VERT_CS[\"WGS_1984\",\n" " VERT_DATUM[\"World Geodetic System 1984\",2002],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"ellipsoidal height\",UP]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()), expected_wkt1); } // --------------------------------------------------------------------------- TEST(wkt_parse, implicit_compound_CRS_geographic_with_ellipsoidal_height_ESRI) { const char *wkt = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "VERTCS[\"WGS_1984\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext)); f->setAllowLINUNITNode(false); EXPECT_EQ(crs->exportToWKT(f.get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, implicit_compound_CRS_projected_with_ellipsoidal_height_ESRI) { const char *wkt = "PROJCS[\"WGS_1984_UTM_Zone_31N\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",500000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",3.0]," "PARAMETER[\"Scale_Factor\",0.9996]," "PARAMETER[\"Latitude_Of_Origin\",0.0]," "UNIT[\"Meter\",1.0]]," "VERTCS[\"WGS_1984\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, COORDINATEOPERATION) { std::string src_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); src_wkt = GeographicCRS::EPSG_4326->exportToWKT(formatter.get()); } std::string dst_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); dst_wkt = GeographicCRS::EPSG_4807->exportToWKT(formatter.get()); } std::string interpolation_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); interpolation_wkt = GeographicCRS::EPSG_4979->exportToWKT(formatter.get()); } auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[" + dst_wkt + "],\n" " METHOD[\"operationMethodName\",\n" " ID[\"codeSpaceOperationMethod\",\"codeOperationMethod\"]],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"],\n" " INTERPOLATIONCRS[" + interpolation_wkt + "],\n" " OPERATIONACCURACY[0.1],\n" " ID[\"codeSpaceTransformation\",\"codeTransformation\"],\n" " REMARK[\"my remarks\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ(transf->nameStr(), "transformationName"); ASSERT_EQ(transf->identifiers().size(), 1U); EXPECT_EQ(transf->identifiers()[0]->code(), "codeTransformation"); EXPECT_EQ(*(transf->identifiers()[0]->codeSpace()), "codeSpaceTransformation"); ASSERT_EQ(transf->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(transf->coordinateOperationAccuracies()[0]->value(), "0.1"); EXPECT_EQ(transf->sourceCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), GeographicCRS::EPSG_4807->nameStr()); ASSERT_TRUE(transf->interpolationCRS() != nullptr); EXPECT_EQ(transf->interpolationCRS()->nameStr(), GeographicCRS::EPSG_4979->nameStr()); EXPECT_EQ(transf->method()->nameStr(), "operationMethodName"); EXPECT_EQ(transf->parameterValues().size(), 1U); { auto outWkt = transf->exportToWKT(WKTFormatter::create().get()); EXPECT_EQ(replaceAll(replaceAll(outWkt, "\n", ""), " ", ""), replaceAll(replaceAll(wkt, "\n", ""), " ", "")); } } // --------------------------------------------------------------------------- TEST(wkt_parse, COORDINATEOPERATION_with_interpolation_as_parameter) { auto wkt = "COORDINATEOPERATION[\"SHGD2015 to SHGD2015 + SHVD2015 height (1)\",\n" " VERSION[\"ENRD-Shn Hel\"],\n" " SOURCECRS[\n" " GEOGCRS[\"SHGD2015\",\n" " DATUM[\"St. Helena Geodetic Datum 2015\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",7885]]],\n" " TARGETCRS[\n" " COMPOUNDCRS[\"SHMG2015 + SHVD2015 height\",\n" " PROJCRS[\"SHMG2015\",\n" " BASEGEOGCRS[\"SHGD2015\",\n" " DATUM[\"St. Helena Geodetic Datum 2015\",\n" " ELLIPSOID[\"GRS " "1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",7886]],\n" " CONVERSION[\"UTM zone 30S\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",10000000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]],\n" " VERTCRS[\"SHVD2015 height\",\n" " VDATUM[\"St. Helena Vertical Datum 2015\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]],\n" " ID[\"EPSG\",7956]]],\n" " METHOD[\"Geog3D to Geog2D+GravityRelatedHeight (EGM2008)\",\n" " ID[\"EPSG\",1092]],\n" " PARAMETERFILE[\"Geoid (height correction) model file\"," "\"Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz\"],\n" " PARAMETER[\"EPSG code for Interpolation CRS\",7886,\n" " ID[\"EPSG\",1048]],\n" " OPERATIONACCURACY[0],\n" " ID[\"EPSG\",9617]]"; { auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_TRUE(transf->interpolationCRS() == nullptr); EXPECT_EQ(transf->parameterValues().size(), 2U); } { auto dbContext = DatabaseContext::create(); // Need a database so that the interpolation CRS EPSG:7886 is resolved auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_TRUE(transf->interpolationCRS() != nullptr); EXPECT_EQ(transf->parameterValues().size(), 1U); } } // --------------------------------------------------------------------------- TEST(wkt_parse, COORDINATEOPERATION_wkt2_2019) { std::string src_wkt; { auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); formatter->setOutputId(false); src_wkt = GeographicCRS::EPSG_4326->exportToWKT(formatter.get()); } std::string dst_wkt; { auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); formatter->setOutputId(false); dst_wkt = GeographicCRS::EPSG_4807->exportToWKT(formatter.get()); } std::string interpolation_wkt; { auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); formatter->setOutputId(false); interpolation_wkt = GeographicCRS::EPSG_4979->exportToWKT(formatter.get()); } auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " VERSION[\"my version\"],\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[" + dst_wkt + "],\n" " METHOD[\"operationMethodName\",\n" " ID[\"codeSpaceOperationMethod\",\"codeOperationMethod\"]],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"],\n" " INTERPOLATIONCRS[" + interpolation_wkt + "],\n" " OPERATIONACCURACY[0.1],\n" " ID[\"codeSpaceTransformation\",\"codeTransformation\"],\n" " REMARK[\"my remarks\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ(transf->nameStr(), "transformationName"); EXPECT_EQ(*transf->operationVersion(), "my version"); ASSERT_EQ(transf->identifiers().size(), 1U); EXPECT_EQ(transf->identifiers()[0]->code(), "codeTransformation"); EXPECT_EQ(*(transf->identifiers()[0]->codeSpace()), "codeSpaceTransformation"); ASSERT_EQ(transf->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(transf->coordinateOperationAccuracies()[0]->value(), "0.1"); EXPECT_EQ(transf->sourceCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), GeographicCRS::EPSG_4807->nameStr()); ASSERT_TRUE(transf->interpolationCRS() != nullptr); EXPECT_EQ(transf->interpolationCRS()->nameStr(), GeographicCRS::EPSG_4979->nameStr()); EXPECT_EQ(transf->method()->nameStr(), "operationMethodName"); EXPECT_EQ(transf->parameterValues().size(), 1U); { auto outWkt = transf->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_EQ(replaceAll(replaceAll(outWkt, "\n", ""), " ", ""), replaceAll(replaceAll(wkt, "\n", ""), " ", "")); } { auto outWkt = transf->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2015).get()); EXPECT_FALSE(outWkt.find("VERSION[\"my version\"],") != std::string::npos); } } // --------------------------------------------------------------------------- TEST(wkt_parse, conversion_proj_based) { auto wkt = "CONVERSION[\"PROJ-based coordinate operation\",\n" " METHOD[\"PROJ-based operation method: +proj=merc\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc"); } // --------------------------------------------------------------------------- TEST(wkt_parse, conversion_utm_zone_south_wrong_id) { auto wkt = "CONVERSION[\"UTM zone 55S\"," " METHOD[\"Transverse Mercator\"," " ID[\"EPSG\",9807]]," " PARAMETER[\"Latitude of natural origin\",0," " ANGLEUNIT[\"Degree\",0.0174532925199433]," " ID[\"EPSG\",8801]]," " PARAMETER[\"Longitude of natural origin\",147," " ANGLEUNIT[\"Degree\",0.0174532925199433]," " ID[\"EPSG\",8802]]," " PARAMETER[\"Scale factor at natural origin\",0.9996," " SCALEUNIT[\"unity\",1]," " ID[\"EPSG\",8805]]," " PARAMETER[\"False easting\",500000," " LENGTHUNIT[\"metre\",1]," " ID[\"EPSG\",8806]]," " PARAMETER[\"False northing\",10000000," " LENGTHUNIT[\"metre\",1]," " ID[\"EPSG\",8807]]," " ID[\"EPSG\",17055]]"; // wrong code auto obj = WKTParser().createFromWKT(wkt); auto conv = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(conv != nullptr); EXPECT_EQ(conv->getEPSGCode(), 16155); // code fixed on import } // --------------------------------------------------------------------------- TEST(wkt_parse, CONCATENATEDOPERATION) { auto transf_1 = Transformation::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "transf_1"), nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), nullptr, PropertyMap().set(IdentifiedObject::NAME_KEY, "operationMethodName"), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector()); auto transf_2 = Transformation::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "transf_2"), nn_static_pointer_cast(GeographicCRS::EPSG_4807), nn_static_pointer_cast(GeographicCRS::EPSG_4979), nullptr, PropertyMap().set(IdentifiedObject::NAME_KEY, "operationMethodName"), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector()); auto concat_in = ConcatenatedOperation::create( PropertyMap() .set(Identifier::CODESPACE_KEY, "codeSpace") .set(Identifier::CODE_KEY, "code") .set(IdentifiedObject::NAME_KEY, "name") .set(IdentifiedObject::REMARKS_KEY, "my remarks"), std::vector{transf_1, transf_2}, std::vector{ PositionalAccuracy::create("0.1")}); auto wkt = concat_in->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); auto obj = WKTParser().createFromWKT(wkt); auto concat = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(concat != nullptr); EXPECT_EQ(concat->nameStr(), "name"); EXPECT_FALSE(concat->operationVersion().has_value()); ASSERT_EQ(concat->identifiers().size(), 1U); EXPECT_EQ(concat->identifiers()[0]->code(), "code"); EXPECT_EQ(*(concat->identifiers()[0]->codeSpace()), "codeSpace"); ASSERT_EQ(concat->operations().size(), 2U); ASSERT_EQ(concat->operations()[0]->nameStr(), transf_1->nameStr()); ASSERT_EQ(concat->operations()[1]->nameStr(), transf_2->nameStr()); ASSERT_TRUE(concat->sourceCRS() != nullptr); ASSERT_TRUE(concat->targetCRS() != nullptr); ASSERT_EQ(concat->sourceCRS()->nameStr(), transf_1->sourceCRS()->nameStr()); ASSERT_EQ(concat->targetCRS()->nameStr(), transf_2->targetCRS()->nameStr()); } // --------------------------------------------------------------------------- TEST(wkt_parse, CONCATENATEDOPERATION_with_conversion_and_conversion) { auto wkt = "CONCATENATEDOPERATION[\"Inverse of UTM zone 31N + UTM zone 32N\",\n" " SOURCECRS[\n" " PROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32631]]],\n" " TARGETCRS[\n" " PROJCRS[\"WGS 84 / UTM zone 32N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 32N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",9,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32632]]],\n" " STEP[\n" " CONVERSION[\"Inverse of UTM zone 31N\",\n" " METHOD[\"Inverse of Transverse Mercator\",\n" " ID[\"INVERSE(EPSG)\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"INVERSE(EPSG)\",16031]]],\n" " STEP[\n" " CONVERSION[\"UTM zone 32N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",9,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",16032]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto concat = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(concat != nullptr); EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=31 +ellps=WGS84 " "+step +proj=utm +zone=32 +ellps=WGS84"); auto outWkt = concat->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_EQ(wkt, outWkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, CONCATENATEDOPERATION_with_conversion_coordinateoperation_conversion) { auto wkt = "CONCATENATEDOPERATION[\"Inverse of UTM zone 11N + NAD27 to WGS 84 " "(79) + UTM zone 11N\",\n" " VERSION[\"my version\"],\n" " SOURCECRS[\n" " PROJCRS[\"NAD27 / UTM zone 11N\",\n" " BASEGEOGCRS[\"NAD27\",\n" " DATUM[\"North American Datum 1927\",\n" " ELLIPSOID[\"Clarke " "1866\",6378206.4,294.978698213898,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 11N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",26711]]],\n" " TARGETCRS[\n" " PROJCRS[\"WGS 84 / UTM zone 11N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 11N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32611]]],\n" " STEP[\n" " CONVERSION[\"Inverse of UTM zone 11N\",\n" " METHOD[\"Inverse of Transverse Mercator\",\n" " ID[\"INVERSE(EPSG)\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"INVERSE(EPSG)\",16011]]],\n" " STEP[\n" " COORDINATEOPERATION[\"NAD27 to WGS 84 (79)\",\n" " SOURCECRS[\n" " GEOGCRS[\"NAD27\",\n" " DATUM[\"North American Datum 1927\",\n" " ELLIPSOID[\"Clarke " "1866\",6378206.4,294.978698213898,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n" " METHOD[\"CTABLE2\"],\n" " PARAMETERFILE[\"Latitude and longitude difference " "file\",\"conus\"],\n" " ID[\"DERIVED_FROM(EPSG)\",15851]]],\n" " STEP[\n" " CONVERSION[\"UTM zone 11N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",16011]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto concat = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(concat != nullptr); EXPECT_EQ(*concat->operationVersion(), "my version"); EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=11 +ellps=clrk66 " "+step +proj=hgridshift +grids=conus +step +proj=utm " "+zone=11 +ellps=WGS84"); auto outWkt = concat->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_EQ(wkt, outWkt); } // --------------------------------------------------------------------------- TEST( wkt_parse, CONCATENATEDOPERATION_with_conversion_coordinateoperation_to_inverse_conversion) { auto wkt = "CONCATENATEDOPERATION[\"Inverse of UTM zone 11N + NAD27 to WGS 84 " "(79) + UTM zone 11N\",\n" " SOURCECRS[\n" " PROJCRS[\"WGS 84 / UTM zone 11N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 11N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32611]]],\n" " TARGETCRS[\n" " PROJCRS[\"NAD27 / UTM zone 11N\",\n" " BASEGEOGCRS[\"NAD27\",\n" " DATUM[\"North American Datum 1927\",\n" " ELLIPSOID[\"Clarke " "1866\",6378206.4,294.978698213898,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 11N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",26711]]],\n" " STEP[\n" " CONVERSION[\"Inverse of UTM zone 11N\",\n" " METHOD[\"Inverse of Transverse Mercator\",\n" " ID[\"INVERSE(EPSG)\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"INVERSE(EPSG)\",16011]]],\n" " STEP[\n" " COORDINATEOPERATION[\"NAD27 to WGS 84 (79)\",\n" " SOURCECRS[\n" " GEOGCRS[\"NAD27\",\n" " DATUM[\"North American Datum 1927\",\n" " ELLIPSOID[\"Clarke " "1866\",6378206.4,294.978698213898,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n" " METHOD[\"CTABLE2\"],\n" " PARAMETERFILE[\"Latitude and longitude difference " "file\",\"conus\"],\n" " ID[\"DERIVED_FROM(EPSG)\",15851]]],\n" " STEP[\n" " CONVERSION[\"UTM zone 11N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",16011]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto concat = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(concat != nullptr); EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=11 +ellps=WGS84 " "+step +inv +proj=hgridshift +grids=conus +step " "+proj=utm +zone=11 +ellps=clrk66"); } // --------------------------------------------------------------------------- TEST(wkt_parse, CONCATENATEDOPERATION_with_inverse_conversion_of_compound) { auto wkt = "CONCATENATEDOPERATION[\"Inverse of RD New + Amersfoort to ETRS89 (9) " "+ Inverse of ETRS89 to NAP height (2) + ETRS89 to WGS 84 (1)\",\n" " SOURCECRS[\n" " COMPOUNDCRS[\"Amersfoort / RD New + NAP height\",\n" " PROJCRS[\"Amersfoort / RD New\",\n" " BASEGEOGCRS[\"Amersfoort\",\n" " DATUM[\"Amersfoort\",\n" " ELLIPSOID[\"Bessel " "1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4289]],\n" " CONVERSION[\"RD New\",\n" " METHOD[\"Oblique Stereographic\",\n" " ID[\"EPSG\",9809]],\n" " PARAMETER[\"Latitude of natural " "origin\",52.1561605555556,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural " "origin\",5.38763888888889,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.9999079,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",155000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",463000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]],\n" " VERTCRS[\"NAP height\",\n" " VDATUM[\"Normaal Amsterdams Peil\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]],\n" " ID[\"EPSG\",7415]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84 (3D)\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree minute second " "hemisphere\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Long)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree minute second " "hemisphere\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4329]]],\n" " STEP[\n" " CONVERSION[\"Inverse of RD New\",\n" " METHOD[\"Inverse of Oblique Stereographic\",\n" " ID[\"INVERSE(EPSG)\",9809]],\n" " PARAMETER[\"Latitude of natural " "origin\",52.1561605555556,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural " "origin\",5.38763888888889,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9999079,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",155000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",463000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"INVERSE(EPSG)\",19914]]],\n" " STEP[\n" " COORDINATEOPERATION[\"PROJ-based coordinate operation\",\n" " SOURCECRS[\n" " COMPOUNDCRS[\"Amersfoort + NAP height\",\n" " GEOGCRS[\"Amersfoort\",\n" " DATUM[\"Amersfoort\",\n" " ELLIPSOID[\"Bessel " "1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " " "ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4289]],\n" " VERTCRS[\"NAP height\",\n" " VDATUM[\"Normaal Amsterdams Peil\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5709]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84 (3D)\",\n" " ENSEMBLE[\"World Geodetic System 1984 " "ensemble\",\n" " MEMBER[\"World Geodetic System 1984 " "(Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 " "(G730)\"],\n" " MEMBER[\"World Geodetic System 1984 " "(G873)\"],\n" " MEMBER[\"World Geodetic System 1984 " "(G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 " "(G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 " "(G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 " "(G2139)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree minute second " "hemisphere\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Long)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree minute second " "hemisphere\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4329]]],\n" " METHOD[\"PROJ-based operation method: +proj=pipeline " "+step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg " "+xy_out=rad +step +proj=hgridshift +grids=nl_nsgi_rdtrans2018.tif " "+step +proj=vgridshift +grids=nl_nsgi_nlgeo2018.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1\"],\n" " OPERATIONACCURACY[1.002]]],\n" " USAGE[\n" " SCOPE[\"unknown\"],\n" " AREA[\"Netherlands - onshore, including Waddenzee, Dutch " "Wadden Islands and 12-mile offshore coastal zone.\"],\n" " BBOX[50.75,3.2,53.7,7.22]]]"; auto obj = WKTParser().createFromWKT(wkt); auto concat = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(concat != nullptr); EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=sterea +lat_0=52.1561605555556 " "+lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 " "+ellps=bessel " "+step +proj=hgridshift +grids=nl_nsgi_rdtrans2018.tif " "+step +proj=vgridshift +grids=nl_nsgi_nlgeo2018.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(wkt_parse, BOUNDCRS_transformation_from_names) { auto projcrs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my PROJCRS"), GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my GEOGCRS"), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)), Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto wkt = "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" + "TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) + "],\n" " ABRIDGEDTRANSFORMATION[\"Transformation to WGS84\",\n" " METHOD[\"Coordinate Frame\"],\n" " PARAMETER[\"X-axis translation\",1],\n" " PARAMETER[\"Y-axis translation\",2],\n" " PARAMETER[\"Z-axis translation\",3],\n" " PARAMETER[\"X-axis rotation\",-4],\n" " PARAMETER[\"Y-axis rotation\",-5],\n" " PARAMETER[\"Z-axis rotation\",-6],\n" " PARAMETER[\"Scale difference\",1.000007]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->nameStr(), projcrs->nameStr()); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); ASSERT_TRUE(crs->transformation()->sourceCRS() != nullptr); EXPECT_EQ(crs->transformation()->sourceCRS()->nameStr(), projcrs->baseCRS()->nameStr()); auto params = crs->transformation()->getTOWGS84Parameters(true); auto expected = std::vector{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; ASSERT_EQ(params.size(), expected.size()); for (int i = 0; i < 7; i++) { EXPECT_NEAR(params[i], expected[i], 1e-10); } } // --------------------------------------------------------------------------- TEST(wkt_parse, BOUNDCRS_transformation_from_codes) { auto projcrs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my PROJCRS"), GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my GEOGCRS"), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)), Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto wkt = "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" + "TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) + "],\n" " ABRIDGEDTRANSFORMATION[\"Transformation to WGS84\",\n" " METHOD[\"bla\",ID[\"EPSG\",1032]],\n" " PARAMETER[\"tx\",1,ID[\"EPSG\",8605]],\n" " PARAMETER[\"ty\",2,ID[\"EPSG\",8606]],\n" " PARAMETER[\"tz\",3,ID[\"EPSG\",8607]],\n" " PARAMETER[\"rotx\",-4,ID[\"EPSG\",8608]],\n" " PARAMETER[\"roty\",-5,ID[\"EPSG\",8609]],\n" " PARAMETER[\"rotz\",-6,ID[\"EPSG\",8610]],\n" " PARAMETER[\"scale\",1.000007,ID[\"EPSG\",8611]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->nameStr(), projcrs->nameStr()); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); ASSERT_TRUE(crs->transformation()->sourceCRS() != nullptr); EXPECT_EQ(crs->transformation()->sourceCRS()->nameStr(), projcrs->baseCRS()->nameStr()); auto params = crs->transformation()->getTOWGS84Parameters(true); auto expected = std::vector{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; ASSERT_EQ(params.size(), expected.size()); for (int i = 0; i < 7; i++) { EXPECT_NEAR(params[i], expected[i], 1e-10); } } // --------------------------------------------------------------------------- TEST(wkt_parse, BOUNDCRS_with_interpolation_as_parameter) { auto wkt = "BOUNDCRS[\n" " SOURCECRS[\n" " VERTCRS[\"unknown\",\n" " VDATUM[\"unknown using geoidgrids=@foo.gtx\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[\"unknown to WGS84 ellipsoidal height\",\n" " METHOD[\"GravityRelatedHeight to Geographic3D\"],\n" " PARAMETERFILE[\"Geoid (height correction) model " "file\",\"@foo.gtx\",\n" " ID[\"EPSG\",8666]],\n" " PARAMETER[\"EPSG code for Interpolation CRS\",7886]]]"; { auto obj = WKTParser().createFromWKT(wkt); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); EXPECT_TRUE(boundCRS->transformation()->interpolationCRS() == nullptr); EXPECT_EQ(boundCRS->transformation()->parameterValues().size(), 2U); } { auto dbContext = DatabaseContext::create(); // Need a database so that the interpolation CRS EPSG:7886 is resolved auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); EXPECT_TRUE(boundCRS->transformation()->interpolationCRS() != nullptr); EXPECT_EQ(boundCRS->transformation()->parameterValues().size(), 1U); // Check that on export, the interpolation CRS is exported as a // parameter auto exportedWKT = boundCRS->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); EXPECT_TRUE( exportedWKT.find( "PARAMETER[\"EPSG code for Interpolation CRS\",7886,") != std::string::npos) << exportedWKT; } } // --------------------------------------------------------------------------- TEST(wkt_parse, boundcrs_of_verticalcrs_to_geog3Dcrs) { auto wkt = "BOUNDCRS[\n" " SOURCECRS[\n" " VERTCRS[\"my_height\",\n" " VDATUM[\"my_height\"],\n" " CS[vertical,1],\n" " AXIS[\"up\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]],\n" " TARGETCRS[\n" " GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[\"my_height height to WGS84 ellipsoidal " "height\",\n" " METHOD[\"GravityRelatedHeight to Geographic3D\"],\n" " PARAMETERFILE[\"Geoid (height correction) model file\"," " \"./tmp/fake.gtx\",\n" " ID[\"EPSG\",8666]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->nameStr(), "my_height"); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4979->nameStr()); } // --------------------------------------------------------------------------- TEST(wkt_parse, geogcs_TOWGS84_3terms) { auto wkt = "GEOGCS[\"my GEOGCRS\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563],\n" " TOWGS84[1,2,3]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->nameStr(), "my GEOGCRS"); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); ASSERT_TRUE(crs->transformation()->sourceCRS() != nullptr); EXPECT_EQ(crs->transformation()->sourceCRS()->nameStr(), "my GEOGCRS"); auto params = crs->transformation()->getTOWGS84Parameters(true); auto expected = std::vector{1.0, 2.0, 3.0, 0.0, 0.0, 0.0, 0.0}; ASSERT_EQ(params.size(), expected.size()); for (int i = 0; i < 7; i++) { EXPECT_NEAR(params[i], expected[i], 1e-10); } } // --------------------------------------------------------------------------- TEST(wkt_parse, projcs_TOWGS84_7terms) { auto wkt = "PROJCS[\"my PROJCRS\",\n" " GEOGCS[\"my GEOGCRS\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " TOWGS84[1,2,3,4,5,6,7],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"Latitude\",NORTH],\n" " AXIS[\"Longitude\",EAST]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->nameStr(), "my PROJCRS"); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); ASSERT_TRUE(crs->transformation()->sourceCRS() != nullptr); EXPECT_EQ(crs->transformation()->sourceCRS()->nameStr(), "my GEOGCRS"); auto params = crs->transformation()->getTOWGS84Parameters(true); auto expected = std::vector{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; ASSERT_EQ(params.size(), expected.size()); for (int i = 0; i < 7; i++) { EXPECT_NEAR(params[i], expected[i], 1e-10); } } // --------------------------------------------------------------------------- TEST(io, projcs_TOWGS84_7terms_autocorrect) { // Auto-correct wrong sign for rotation terms // Cf https://github.com/OSGeo/PROJ/issues/4170 auto wkt = "PROJCS[\"BD72 / Belgian Lambert 72\",\n" " GEOGCS[\"BD72\",\n" " DATUM[\"Reseau_National_Belge_1972\",\n" " SPHEROID[\"International 1924\",6378388,297],\n" " " "TOWGS84[-106.8686,52.2978,-103.7239,-0.3366,0.457,-1.8422,-1.2747]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4313\"]],\n" " PROJECTION[\"Lambert_Conformal_Conic_2SP\"],\n" " PARAMETER[\"latitude_of_origin\",90],\n" " PARAMETER[\"central_meridian\",4.36748666666667],\n" " PARAMETER[\"standard_parallel_1\",51.1666672333333],\n" " PARAMETER[\"standard_parallel_2\",49.8333339],\n" " PARAMETER[\"false_easting\",150000.013],\n" " PARAMETER[\"false_northing\",5400088.438],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"31370\"]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto params = crs->transformation()->getTOWGS84Parameters(true); auto expected = std::vector{-106.8686, 52.2978, -103.7239, 0.3366, -0.457, 1.8422, -1.2747}; ASSERT_EQ(params.size(), expected.size()); for (int i = 0; i < 7; i++) { EXPECT_NEAR(params[i], expected[i], 1e-10); } } // --------------------------------------------------------------------------- TEST(wkt_parse, WKT1_VERT_DATUM_EXTENSION) { auto wkt = "VERT_CS[\"EGM2008 geoid height\",\n" " VERT_DATUM[\"EGM2008 geoid\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"egm08_25.gtx\"],\n" " AUTHORITY[\"EPSG\",\"1027\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Up\",UP],\n" " AUTHORITY[\"EPSG\",\"3855\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->nameStr(), "EGM2008 geoid height"); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4979->nameStr()); ASSERT_TRUE(crs->transformation()->sourceCRS() != nullptr); EXPECT_EQ(crs->transformation()->sourceCRS()->nameStr(), crs->baseCRS()->nameStr()); ASSERT_TRUE(crs->transformation()->targetCRS() != nullptr); EXPECT_EQ(crs->transformation()->targetCRS()->nameStr(), crs->hubCRS()->nameStr()); EXPECT_EQ(crs->transformation()->nameStr(), "EGM2008 geoid height to WGS 84 ellipsoidal height"); EXPECT_EQ(crs->transformation()->method()->nameStr(), "GravityRelatedHeight to Geographic3D"); ASSERT_EQ(crs->transformation()->parameterValues().size(), 1U); { const auto &opParamvalue = nn_dynamic_pointer_cast( crs->transformation()->parameterValues()[0]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8666); EXPECT_EQ(paramName, "Geoid (height correction) model file"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::FILENAME); EXPECT_EQ(parameterValue->valueFile(), "egm08_25.gtx"); } } // --------------------------------------------------------------------------- TEST(wkt_parse, WKT1_VERT_DATUM_EXTENSION_units_ftUS) { auto wkt = "VERT_CS[\"NAVD88 height (ftUS)\"," " VERT_DATUM[\"North American Vertical Datum 1988\",2005," " EXTENSION[\"PROJ4_GRIDS\",\"foo.gtx\"]," " AUTHORITY[\"EPSG\",\"5103\"]]," " UNIT[\"US survey foot\",0.304800609601219," " AUTHORITY[\"EPSG\",\"9003\"]]," " AXIS[\"Gravity-related height\",UP]," " AUTHORITY[\"EPSG\",\"6360\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->transformation()->nameStr(), "NAVD88 height to WGS 84 ellipsoidal height"); // no (ftUS) auto sourceTransformationCRS = crs->transformation()->sourceCRS(); auto sourceTransformationVertCRS = nn_dynamic_pointer_cast(sourceTransformationCRS); EXPECT_EQ( sourceTransformationVertCRS->coordinateSystem()->axisList()[0]->unit(), UnitOfMeasure::METRE); } // --------------------------------------------------------------------------- TEST(wkt_parse, WKT1_COMPD_CS_VERT_DATUM_EXTENSION) { auto wkt = "COMPD_CS[\"NAD83 + NAVD88 height\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"NAVD88 height\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"@foo.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5703\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto boundVertCRS = nn_dynamic_pointer_cast(crs->componentReferenceSystems()[1]); ASSERT_TRUE(boundVertCRS != nullptr); EXPECT_EQ(boundVertCRS->transformation()->nameStr(), "NAVD88 height to NAD83 ellipsoidal height"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, WKT1_DATUM_EXTENSION) { auto wkt = "PROJCS[\"unnamed\",\n" " GEOGCS[\"International 1909 (Hayford)\",\n" " DATUM[\"unknown\",\n" " SPHEROID[\"intl\",6378388,297],\n" " EXTENSION[\"PROJ4_GRIDS\",\"nzgd2kgrid0005.gsb\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"New_Zealand_Map_Grid\"],\n" " PARAMETER[\"latitude_of_origin\",-41],\n" " PARAMETER[\"central_meridian\",173],\n" " PARAMETER[\"false_easting\",2510000],\n" " PARAMETER[\"false_northing\",6023150],\n" " UNIT[\"Meter\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->nameStr(), "unnamed"); EXPECT_EQ(crs->hubCRS()->nameStr(), GeographicCRS::EPSG_4326->nameStr()); ASSERT_TRUE(crs->transformation()->sourceCRS() != nullptr); EXPECT_EQ(crs->transformation()->sourceCRS()->nameStr(), "International 1909 (Hayford)"); ASSERT_TRUE(crs->transformation()->targetCRS() != nullptr); EXPECT_EQ(crs->transformation()->targetCRS()->nameStr(), crs->hubCRS()->nameStr()); EXPECT_EQ(crs->transformation()->nameStr(), "International 1909 (Hayford) to WGS84"); EXPECT_EQ(crs->transformation()->method()->nameStr(), "NTv2"); ASSERT_EQ(crs->transformation()->parameterValues().size(), 1U); { const auto &opParamvalue = nn_dynamic_pointer_cast( crs->transformation()->parameterValues()[0]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_TRUE(opParamvalue->parameter()->getEPSGCode() == 8656); EXPECT_EQ(paramName, "Latitude and longitude difference file"); EXPECT_EQ(parameterValue->type(), ParameterValue::Type::FILENAME); EXPECT_EQ(parameterValue->valueFile(), "nzgd2kgrid0005.gsb"); } } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedGeographicCRS_WKT2) { auto wkt = "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Atlantic pole\",\n" " METHOD[\"Pole rotation\"],\n" " PARAMETER[\"Latitude of rotated pole\",52,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Longitude of rotated pole\",-30,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Axis rotation\",-25,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WMO Atlantic Pole"); EXPECT_EQ(crs->baseCRS()->nameStr(), "WGS 84"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs->baseCRS()) != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "Atlantic pole"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedGeographicCRS_WKT2_2019) { auto wkt = "GEOGCRS[\"WMO Atlantic Pole\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Atlantic pole\",\n" " METHOD[\"Pole rotation\"],\n" " PARAMETER[\"Latitude of rotated pole\",52,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Longitude of rotated pole\",-30,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Axis rotation\",-25,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WMO Atlantic Pole"); EXPECT_EQ(crs->baseCRS()->nameStr(), "WGS 84"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs->baseCRS()) != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "Atlantic pole"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedGeodeticCRS) { auto wkt = "GEODCRS[\"Derived geodetic CRS\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " DERIVINGCONVERSION[\"Some conversion\",\n" " METHOD[\"Some method\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Y)\",geocentricY,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(Z)\",geocentricZ,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Derived geodetic CRS"); EXPECT_EQ(crs->baseCRS()->nameStr(), "WGS 84"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs->baseCRS()) != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "Some conversion"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs->coordinateSystem()) != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedGeographicCRS_GDAL_PROJ4_EXSTENSION_hack) { // Note the lack of UNIT[] node auto wkt = "PROJCS[\"unnamed\"," " GEOGCS[\"unknown\"," " DATUM[\"unnamed\"," " SPHEROID[\"Spheroid\",6367470,594.313048347956]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9122\"]]]," " PROJECTION[\"Rotated_pole\"]," " EXTENSION[\"PROJ4\",\"+proj=ob_tran +o_proj=longlat +lon_0=18 " "+o_lon_p=0 +o_lat_p=39.25 +a=6367470 +b=6367470 " "+to_meter=0.0174532925199 +wktext\"]]"; auto obj = WKTParser().setStrict(false).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto obj2 = PROJStringParser().createFromPROJString( "+proj=ob_tran +o_proj=longlat +lon_0=18 " "+o_lon_p=0 +o_lat_p=39.25 +a=6367470 +b=6367470 " "+to_meter=0.0174532925199 +wktext +type=crs"); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); EXPECT_TRUE( crs->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); { auto op = CoordinateOperationFactory::create()->createOperation( crs->baseCRS(), NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=ob_tran +o_proj=longlat +lon_0=18 +o_lon_p=0 " "+o_lat_p=39.25 +R=6367470 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_NO_CHECK(crs), crs->baseCRS()); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=ob_tran +o_proj=longlat +lon_0=18 +o_lon_p=0 " "+o_lat_p=39.25 +R=6367470 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedProjectedCRS) { auto wkt = "DERIVEDPROJCRS[\"derived projectedCRS\",\n" " BASEPROJCRS[\"WGS 84 / UTM zone 31N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "derived projectedCRS"); EXPECT_EQ(crs->baseCRS()->nameStr(), "WGS 84 / UTM zone 31N"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs->baseCRS()) != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "unnamed"); EXPECT_TRUE(nn_dynamic_pointer_cast(crs->coordinateSystem()) != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedProjectedCRS_base_crs_cs_non_metre_from_conversion) { auto wkt = "DERIVEDPROJCRS[\"Ground for NAD83(2011) / Idaho West (ftUS)\",\n" " BASEPROJCRS[\"foo\",\n" " BASEGEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System " "2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"SPCS83 Idaho West zone (US Survey feet)\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural " "origin\",41.6666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-115.75,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.999933333,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",2624666.667,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8807]]]],\n" " DERIVINGCONVERSION[\"Grid to ground\",\n" " METHOD[\"Similarity transformation\",\n" " ID[\"EPSG\",9621]],\n" " PARAMETER[\"Ordinate 1 of evaluation point in target " "CRS\",1000,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8621]],\n" " PARAMETER[\"Ordinate 2 of evaluation point in target " "CRS\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8622]],\n" " PARAMETER[\"Scale factor for source CRS axes\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",1061]],\n" " PARAMETER[\"Rotation angle of source CRS axes\",0,\n" " ANGLEUNIT[\"degree\",0],\n" " ID[\"EPSG\",8614]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); const auto &axisList = crs->baseCRS()->coordinateSystem()->axisList(); ASSERT_EQ(axisList.size(), 2U); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::US_FOOT); // Check that we emit a BASEPROJCRS.CS node const char *expected = "DERIVEDPROJCRS[\"Ground for NAD83(2011) / Idaho West (ftUS)\",\n" " BASEPROJCRS[\"foo\",\n" " BASEGEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System " "2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"SPCS83 Idaho West zone (US Survey feet)\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural " "origin\",41.6666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-115.75,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.999933333,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",2624666.667,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]]],\n" " DERIVINGCONVERSION[\"Grid to ground\",\n" " METHOD[\"Similarity transformation\",\n" " ID[\"EPSG\",9621]],\n" " PARAMETER[\"Ordinate 1 of evaluation point in target " "CRS\",1000,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8621]],\n" " PARAMETER[\"Ordinate 2 of evaluation point in target " "CRS\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8622]],\n" " PARAMETER[\"Scale factor for source CRS axes\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",1061]],\n" " PARAMETER[\"Rotation angle of source CRS axes\",0,\n" " ANGLEUNIT[\"degree\",0],\n" " ID[\"EPSG\",8614]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); auto dbContext = DatabaseContext::create(); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext) .get()), expected); } // --------------------------------------------------------------------------- TEST( wkt_parse, DerivedProjectedCRS_base_crs_cs_non_metre_from_conversion_context_from_baseprojcrs_name) { auto wkt = "DERIVEDPROJCRS[\"Ground for NAD83(2011) / Idaho West (ftUS)\",\n" " BASEPROJCRS[\"NAD83(2011) / Idaho West (ftUS)\",\n" " BASEGEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System " "2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"incomplete conversion\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]]]],\n" " DERIVINGCONVERSION[\"Grid to ground\",\n" " METHOD[\"Similarity transformation\",\n" " ID[\"EPSG\",9621]],\n" " PARAMETER[\"Ordinate 1 of evaluation point in target " "CRS\",1000,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8621]],\n" " PARAMETER[\"Ordinate 2 of evaluation point in target " "CRS\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8622]],\n" " PARAMETER[\"Scale factor for source CRS axes\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",1061]],\n" " PARAMETER[\"Rotation angle of source CRS axes\",0,\n" " ANGLEUNIT[\"degree\",0],\n" " ID[\"EPSG\",8614]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); const auto &axisList = crs->baseCRS()->coordinateSystem()->axisList(); ASSERT_EQ(axisList.size(), 2U); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::US_FOOT); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST( wkt_parse, DerivedProjectedCRS_base_crs_cs_non_metre_from_conversion_context_from_baseprojcrs_id) { auto wkt = "DERIVEDPROJCRS[\"Ground for NAD83(2011) / Idaho West (ftUS)\",\n" " BASEPROJCRS[\"foo\",\n" " BASEGEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System " "2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"incomplete conversion\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]]],\n" " ID[\"EPSG\",6453]],\n" " DERIVINGCONVERSION[\"Grid to ground\",\n" " METHOD[\"Similarity transformation\",\n" " ID[\"EPSG\",9621]],\n" " PARAMETER[\"Ordinate 1 of evaluation point in target " "CRS\",1000,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8621]],\n" " PARAMETER[\"Ordinate 2 of evaluation point in target " "CRS\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8622]],\n" " PARAMETER[\"Scale factor for source CRS axes\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",1061]],\n" " PARAMETER[\"Rotation angle of source CRS axes\",0,\n" " ANGLEUNIT[\"degree\",0],\n" " ID[\"EPSG\",8614]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); const auto &axisList = crs->baseCRS()->coordinateSystem()->axisList(); ASSERT_EQ(axisList.size(), 2U); EXPECT_EQ(axisList[0]->unit(), UnitOfMeasure::US_FOOT); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedProjectedCRS_ordinal) { auto wkt = "DERIVEDPROJCRS[\"derived projectedCRS\",\n" " BASEPROJCRS[\"BASEPROJCRS\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " CS[ordinal,2],\n" " AXIS[\"inline (I)\",northNorthWest,\n" " ORDER[1]],\n" " AXIS[\"crossline (J)\",westSouthWest,\n" " ORDER[2]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(nn_dynamic_pointer_cast(crs->coordinateSystem()) != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, TemporalDatum) { auto wkt = "TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"my calendar\"],\n" " TIMEORIGIN[0000-01-01]]"; auto obj = WKTParser().createFromWKT(wkt); auto tdatum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(tdatum != nullptr); EXPECT_EQ(tdatum->nameStr(), "Gregorian calendar"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "0000-01-01"); EXPECT_EQ(tdatum->calendar(), "my calendar"); } // --------------------------------------------------------------------------- TEST(wkt_parse, TemporalDatum_no_calendar) { auto wkt = "TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]]"; auto obj = WKTParser().createFromWKT(wkt); auto tdatum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(tdatum != nullptr); EXPECT_EQ(tdatum->nameStr(), "Gregorian calendar"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "0000-01-01"); EXPECT_EQ(tdatum->calendar(), "proleptic Gregorian"); } // --------------------------------------------------------------------------- TEST(wkt_parse, dateTimeTemporalCRS_WKT2_2015) { auto wkt = "TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Temporal CRS"); auto tdatum = crs->datum(); EXPECT_EQ(tdatum->nameStr(), "Gregorian calendar"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "0000-01-01"); EXPECT_EQ(tdatum->calendar(), "proleptic Gregorian"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); ASSERT_EQ(crs->coordinateSystem()->axisList().size(), 1U); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().type(), UnitOfMeasure::Type::NONE); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().name(), ""); } // --------------------------------------------------------------------------- TEST(wkt_parse, dateTimeTemporalCRS_WKT2_2019) { auto wkt = "TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Temporal CRS"); auto tdatum = crs->datum(); EXPECT_EQ(tdatum->nameStr(), "Gregorian calendar"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "0000-01-01"); EXPECT_EQ(tdatum->calendar(), "proleptic Gregorian"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); ASSERT_EQ(crs->coordinateSystem()->axisList().size(), 1U); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().type(), UnitOfMeasure::Type::NONE); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().name(), ""); } // --------------------------------------------------------------------------- TEST(wkt_parse, temporalCountCRSWithConvFactor_WKT2_2019) { auto wkt = "TIMECRS[\"GPS milliseconds\",\n" " TDATUM[\"GPS time origin\",\n" " TIMEORIGIN[1980-01-01T00:00:00.0Z]],\n" " CS[TemporalCount,1],\n" " AXIS[\"(T)\",future,\n" " TIMEUNIT[\"milliseconds (ms)\",0.001]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "GPS milliseconds"); auto tdatum = crs->datum(); EXPECT_EQ(tdatum->nameStr(), "GPS time origin"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "1980-01-01T00:00:00.0Z"); EXPECT_EQ(tdatum->calendar(), "proleptic Gregorian"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); ASSERT_EQ(crs->coordinateSystem()->axisList().size(), 1U); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().name(), "milliseconds (ms)"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().conversionToSI(), 0.001); } // --------------------------------------------------------------------------- TEST(wkt_parse, temporalCountCRSWithoutConvFactor_WKT2_2019) { auto wkt = "TIMECRS[\"Calendar hours from 1979-12-29\",\n" " TDATUM[\"29 December 1979\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[1979-12-29T00Z]],\n" " CS[TemporalCount,1],\n" " AXIS[\"time\",future,\n" " TIMEUNIT[\"hour\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Calendar hours from 1979-12-29"); auto tdatum = crs->datum(); EXPECT_EQ(tdatum->nameStr(), "29 December 1979"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "1979-12-29T00Z"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); ASSERT_EQ(crs->coordinateSystem()->axisList().size(), 1U); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().name(), "hour"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().conversionToSI(), 0.0); } // --------------------------------------------------------------------------- TEST(wkt_parse, temporalMeasureCRS_WKT2_2015) { auto wkt = "TIMECRS[\"GPS Time\",\n" " TDATUM[\"Time origin\",\n" " TIMEORIGIN[1980-01-01T00:00:00.0Z]],\n" " CS[temporal,1],\n" " AXIS[\"time\",future],\n" " TIMEUNIT[\"day\",86400.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "GPS Time"); auto tdatum = crs->datum(); EXPECT_EQ(tdatum->nameStr(), "Time origin"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "1980-01-01T00:00:00.0Z"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); auto axis = cs->axisList()[0]; EXPECT_EQ(axis->nameStr(), "Time"); EXPECT_EQ(axis->unit().name(), "day"); EXPECT_EQ(axis->unit().conversionToSI(), 86400.0); } // --------------------------------------------------------------------------- TEST(wkt_parse, temporalMeasureCRSWithoutConvFactor_WKT2_2019) { auto wkt = "TIMECRS[\"Decimal Years CE\",\n" " TIMEDATUM[\"Common Era\",\n" " TIMEORIGIN[0000]],\n" " CS[TemporalMeasure,1],\n" " AXIS[\"decimal years (a)\",future,\n" " TIMEUNIT[\"year\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Decimal Years CE"); auto tdatum = crs->datum(); EXPECT_EQ(tdatum->nameStr(), "Common Era"); EXPECT_EQ(tdatum->temporalOrigin().toString(), "0000"); EXPECT_TRUE(nn_dynamic_pointer_cast( crs->coordinateSystem()) != nullptr); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); auto axis = cs->axisList()[0]; EXPECT_EQ(axis->nameStr(), "Decimal years"); EXPECT_EQ(axis->unit().name(), "year"); EXPECT_EQ(axis->unit().conversionToSI(), 0.0); } // --------------------------------------------------------------------------- TEST(wkt_parse, EDATUM) { auto wkt = "EDATUM[\"Engineering datum\",\n" " ANCHOR[\"my anchor\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto edatum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(edatum != nullptr); EXPECT_EQ(edatum->nameStr(), "Engineering datum"); auto anchor = edatum->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "my anchor"); } // --------------------------------------------------------------------------- TEST(wkt_parse, ENGINEERINGDATUM) { auto wkt = "ENGINEERINGDATUM[\"Engineering datum\"]"; auto obj = WKTParser().createFromWKT(wkt); auto edatum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(edatum != nullptr); EXPECT_EQ(edatum->nameStr(), "Engineering datum"); auto anchor = edatum->anchorDefinition(); EXPECT_TRUE(!anchor.has_value()); } // --------------------------------------------------------------------------- TEST(wkt_parse, ENGCRS) { auto wkt = "ENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Engineering CRS"); EXPECT_EQ(crs->datum()->nameStr(), "Engineering datum"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); } // --------------------------------------------------------------------------- TEST(wkt_parse, ENGINEERINGCRS) { auto wkt = "ENGINEERINGCRS[\"Engineering CRS\",\n" " ENGINEERINGDATUM[\"Engineering datum\"],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Engineering CRS"); EXPECT_EQ(crs->datum()->nameStr(), "Engineering datum"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); } // --------------------------------------------------------------------------- TEST(wkt_parse, ENGCRS_unknown_unit) { auto wkt = "ENGCRS[\"Undefined Cartesian SRS with unknown unit\",\n" " EDATUM[\"Unknown engineering datum\"],\n" " CS[Cartesian,2],\n" " AXIS[\"X\",unspecified,\n" " ORDER[1],\n" " LENGTHUNIT[\"unknown\",0]],\n" " AXIS[\"Y\",unspecified,\n" " ORDER[2],\n" " LENGTHUNIT[\"unknown\",0]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Undefined Cartesian SRS with unknown unit"); EXPECT_EQ(crs->datum()->nameStr(), "Unknown engineering datum"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); auto axis0 = cs->axisList()[0]; EXPECT_EQ(axis0->nameStr(), "X"); EXPECT_EQ(axis0->direction(), AxisDirection::UNSPECIFIED); EXPECT_EQ(axis0->unit().name(), "unknown"); EXPECT_EQ(axis0->unit().conversionToSI(), 0.0); auto axis1 = cs->axisList()[1]; EXPECT_EQ(axis1->nameStr(), "Y"); EXPECT_EQ(axis1->direction(), AxisDirection::UNSPECIFIED); EXPECT_EQ(axis1->unit().name(), "unknown"); EXPECT_EQ(axis1->unit().conversionToSI(), 0.0); } // --------------------------------------------------------------------------- TEST(wkt_parse, LOCAL_CS_short) { auto wkt = "LOCAL_CS[\"Engineering CRS\"]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Engineering CRS"); EXPECT_EQ(crs->datum()->nameStr(), "Unknown engineering datum"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); auto expected_wkt = "LOCAL_CS[\"Engineering CRS\",\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), expected_wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, LOCAL_CS_long_one_axis) { auto wkt = "LOCAL_CS[\"Engineering CRS\",\n" " LOCAL_DATUM[\"Engineering datum\",12345],\n" " UNIT[\"meter\",1],\n" " AXIS[\"height\",up]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Engineering CRS"); EXPECT_EQ(crs->datum()->nameStr(), "Engineering datum"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 1U); } // --------------------------------------------------------------------------- TEST(wkt_parse, LOCAL_CS_long_two_axis) { auto wkt = "LOCAL_CS[\"Engineering CRS\",\n" " LOCAL_DATUM[\"Engineering datum\",12345],\n" " UNIT[\"meter\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Engineering CRS"); EXPECT_EQ(crs->datum()->nameStr(), "Engineering datum"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 2U); } // --------------------------------------------------------------------------- TEST(wkt_parse, LOCAL_CS_long_three_axis) { auto wkt = "LOCAL_CS[\"Engineering CRS\",\n" " LOCAL_DATUM[\"Engineering datum\",12345],\n" " UNIT[\"meter\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AXIS[\"Elevation\",UP]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "Engineering CRS"); EXPECT_EQ(crs->datum()->nameStr(), "Engineering datum"); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 3U); } // --------------------------------------------------------------------------- TEST(wkt_parse, PDATUM) { auto wkt = "PDATUM[\"Parametric datum\",\n" " ANCHOR[\"my anchor\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); EXPECT_EQ(datum->nameStr(), "Parametric datum"); auto anchor = datum->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "my anchor"); } // --------------------------------------------------------------------------- TEST(wkt_parse, PARAMETRICDATUM) { auto wkt = "PARAMETRICDATUM[\"Parametric datum\",\n" " ANCHOR[\"my anchor\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto datum = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(datum != nullptr); EXPECT_EQ(datum->nameStr(), "Parametric datum"); auto anchor = datum->anchorDefinition(); EXPECT_TRUE(anchor.has_value()); EXPECT_EQ(*anchor, "my anchor"); } // --------------------------------------------------------------------------- TEST(wkt_parse, PARAMETRICCRS) { auto wkt = "PARAMETRICCRS[\"WMO standard atmosphere layer 0\"," " PDATUM[\"Mean Sea Level\",ANCHOR[\"1013.25 hPa at 15°C\"]]," " CS[parametric,1]," " AXIS[\"pressure (hPa)\",up]," " PARAMETRICUNIT[\"HectoPascal\",100.0]" " ]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WMO standard atmosphere layer 0"); EXPECT_EQ(crs->datum()->nameStr(), "Mean Sea Level"); auto cs = crs->coordinateSystem(); EXPECT_TRUE(nn_dynamic_pointer_cast(cs) != nullptr); ASSERT_EQ(cs->axisList().size(), 1U); auto axis = cs->axisList()[0]; EXPECT_EQ(axis->nameStr(), "Pressure"); EXPECT_EQ(axis->unit().name(), "HectoPascal"); EXPECT_EQ(axis->unit().type(), UnitOfMeasure::Type::PARAMETRIC); EXPECT_EQ(axis->unit().conversionToSI(), 100.0); } // --------------------------------------------------------------------------- TEST(wkt_parse, PARAMETRICCRS_PARAMETRICDATUM) { auto wkt = "PARAMETRICCRS[\"WMO standard atmosphere layer 0\"," " PARAMETRICDATUM[\"Mean Sea Level\"]," " CS[parametric,1]," " AXIS[\"pressure (hPa)\",up]," " PARAMETRICUNIT[\"HectoPascal\",100.0]" " ]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedVerticalCRS) { auto wkt = "VERTCRS[\"Derived vertCRS\",\n" " BASEVERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedVerticalCRS_EPSG_code_for_horizontal_CRS) { auto wkt = "VERTCRS[\"Derived vertCRS\",\n" " BASEVERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\",\n" " ID[\"EPSG\",5101]]],\n" " DERIVINGCONVERSION[\"Conv Vertical Offset and Slope\",\n" " METHOD[\"Vertical Offset and Slope\",\n" " ID[\"EPSG\",1046]],\n" " PARAMETER[\"Ordinate 1 of evaluation point\",40.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8617]],\n" " PARAMETER[\"EPSG code for Horizontal CRS\",4277,\n" " ID[\"EPSG\",1037]]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // "EPSG code for Horizontal CRS" is removed and set as interpolation CRS EXPECT_EQ(crs->derivingConversion()->parameterValues().size(), 1U); EXPECT_TRUE(crs->derivingConversion()->interpolationCRS() != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedEngineeringCRS) { auto wkt = "ENGCRS[\"Derived EngineeringCRS\",\n" " BASEENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedParametricCRS) { auto wkt = "PARAMETRICCRS[\"Derived ParametricCRS\",\n" " BASEPARAMCRS[\"Parametric CRS\",\n" " PDATUM[\"Parametric datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, DerivedTemporalCRS) { auto wkt = "TIMECRS[\"Derived TemporalCRS\",\n" " BASETIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } // --------------------------------------------------------------------------- TEST(wkt_parse, ensemble) { auto wkt = "ENSEMBLE[\"test\",\n" " MEMBER[\"World Geodetic System 1984\",\n" " ID[\"EPSG\",6326]],\n" " MEMBER[\"other datum\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7030]],\n" " ENSEMBLEACCURACY[100]]"; auto obj = WKTParser().createFromWKT(wkt); auto ensemble = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ensemble != nullptr); ASSERT_EQ(ensemble->datums().size(), 2U); auto firstDatum = nn_dynamic_pointer_cast(ensemble->datums()[0]); ASSERT_TRUE(firstDatum != nullptr); EXPECT_EQ(firstDatum->nameStr(), "World Geodetic System 1984"); ASSERT_EQ(firstDatum->identifiers().size(), 1U); EXPECT_EQ(firstDatum->identifiers()[0]->code(), "6326"); EXPECT_EQ(*(firstDatum->identifiers()[0]->codeSpace()), "EPSG"); EXPECT_EQ(firstDatum->ellipsoid()->nameStr(), "WGS 84"); EXPECT_EQ(ensemble->positionalAccuracy()->value(), "100"); } // --------------------------------------------------------------------------- TEST(wkt_parse, ensemble_vdatum) { auto wkt = "ENSEMBLE[\"unnamed\",\n" " MEMBER[\"vdatum1\"],\n" " MEMBER[\"vdatum2\"],\n" " ENSEMBLEACCURACY[100]]"; auto obj = WKTParser().createFromWKT(wkt); auto ensemble = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ensemble != nullptr); ASSERT_EQ(ensemble->datums().size(), 2U); auto firstDatum = nn_dynamic_pointer_cast(ensemble->datums()[0]); ASSERT_TRUE(firstDatum != nullptr); EXPECT_EQ(firstDatum->nameStr(), "vdatum1"); EXPECT_EQ(ensemble->positionalAccuracy()->value(), "100"); } // --------------------------------------------------------------------------- TEST(wkt_parse, esri_geogcs_datum_spheroid_name_hardcoded_substitution) { auto wkt = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"; // Test substitutions of CRS, datum and ellipsoid names from ESRI names // to EPSG names. auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84"); EXPECT_EQ(crs->datum()->nameStr(), "World Geodetic System 1984"); EXPECT_EQ(crs->ellipsoid()->nameStr(), "WGS 84"); } // --------------------------------------------------------------------------- TEST(wkt_parse, esri_geogcs_datum_spheroid_name_from_db_substitution) { auto wkt = "GEOGCS[\"GCS_WGS_1966\",DATUM[\"D_WGS_1966\"," "SPHEROID[\"WGS_1966\",6378145.0,298.25]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"; // Test substitutions of CRS, datum and ellipsoid names from ESRI names // to EPSG names. auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 66"); EXPECT_EQ(crs->datum()->nameStr(), "World Geodetic System 1966"); EXPECT_EQ(crs->ellipsoid()->nameStr(), "WGS_1966"); } // --------------------------------------------------------------------------- TEST(wkt_parse, esri_datum_name_with_prime_meridian) { auto wkt = "GEOGCS[\"GCS_NTF_Paris\",DATUM[\"D_NTF\"," "SPHEROID[\"Clarke_1880_IGN\",6378249.2,293.4660212936265]]," "PRIMEM[\"Paris\",2.337229166666667]," "UNIT[\"Grad\",0.01570796326794897]]"; // D_NTF normally translates to "Nouvelle Triangulation Francaise", // but as we have a non-Greenwich prime meridian, we also test if // "Nouvelle Triangulation Francaise (Paris)" is not a registered datum name auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NTF (Paris)"); EXPECT_EQ(crs->datum()->nameStr(), "Nouvelle Triangulation Francaise (Paris)"); EXPECT_EQ(crs->ellipsoid()->nameStr(), "Clarke 1880 (IGN)"); } // --------------------------------------------------------------------------- static const struct { const char *esriProjectionName; std::vector> esriParams; const char *wkt2ProjectionName; std::vector> wkt2Params; } esriProjDefs[] = { {"Plate_Carree", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Equidistant Cylindrical", { {"Latitude of 1st standard parallel", 0}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Equidistant_Cylindrical", { {"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, }, "Equidistant Cylindrical", { {"Latitude of 1st standard parallel", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Miller_Cylindrical", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Miller Cylindrical", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Mercator", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}}, "Mercator (variant B)", { {"Latitude of 1st standard parallel", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Gauss_Kruger", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}}, "Transverse Mercator", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Transverse_Mercator", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}}, "Transverse Mercator", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Transverse_Mercator_Complex", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}}, "Transverse Mercator", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Albers", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, {"Standard_Parallel_2", 5}, {"Latitude_Of_Origin", 6}}, "Albers Equal Area", { {"Latitude of false origin", 6}, {"Longitude of false origin", 3}, {"Latitude of 1st standard parallel", 4}, {"Latitude of 2nd standard parallel", 5}, {"Easting at false origin", 1}, {"Northing at false origin", 2}, }}, {"Sinusoidal", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Sinusoidal", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Mollweide", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Mollweide", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Eckert_I", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Eckert I", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, // skipping Eckert_II to Eckert_VI {"Gall_Stereographic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Gall Stereographic", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Patterson", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Patterson", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Natural_Earth", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Natural Earth", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Natural_Earth_II", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Natural Earth II", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Compact_Miller", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Compact Miller", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Times", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Times", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Flat_Polar_Quartic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Flat Polar Quartic", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Behrmann", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Lambert Cylindrical Equal Area", { {"Latitude of 1st standard parallel", 30}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Winkel_I", { {"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, }, "Winkel I", { {"Longitude of natural origin", 3}, {"Latitude of 1st standard parallel", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Winkel_II", { {"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, }, "Winkel II", { {"Longitude of natural origin", 3}, {"Latitude of 1st standard parallel", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Lambert_Conformal_Conic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, {"Scale_Factor", 5}, {"Latitude_Of_Origin", 4}}, "Lambert Conic Conformal (1SP)", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 5}, {"False easting", 1}, {"False northing", 2}, }}, {"Lambert_Conformal_Conic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, {"Standard_Parallel_2", 5}, {"Latitude_Of_Origin", 6}}, "Lambert Conic Conformal (2SP)", { {"Latitude of false origin", 6}, {"Longitude of false origin", 3}, {"Latitude of 1st standard parallel", 4}, {"Latitude of 2nd standard parallel", 5}, {"Easting at false origin", 1}, {"Northing at false origin", 2}, }}, // Unusual variant of above with Scale_Factor=1 {"Lambert_Conformal_Conic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, {"Standard_Parallel_2", 5}, {"Scale_Factor", 1.0}, {"Latitude_Of_Origin", 6}}, "Lambert Conic Conformal (2SP)", { {"Latitude of false origin", 6}, {"Longitude of false origin", 3}, {"Latitude of 1st standard parallel", 4}, {"Latitude of 2nd standard parallel", 5}, {"Easting at false origin", 1}, {"Northing at false origin", 2}, }}, {"Polyconic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Latitude_Of_Origin", 4}}, "American Polyconic", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Quartic_Authalic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Quartic Authalic", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Loximuthal", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Central_Parallel", 4}}, "Loximuthal", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Bonne", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}}, "Bonne", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Hotine_Oblique_Mercator_Two_Point_Natural_Origin", {{"False_Easting", 1}, {"False_Northing", 2}, {"Latitude_Of_1st_Point", 3}, {"Latitude_Of_2nd_Point", 4}, {"Scale_Factor", 5}, {"Longitude_Of_1st_Point", 6}, {"Longitude_Of_2nd_Point", 7}, {"Latitude_Of_Center", 8}}, "Hotine Oblique Mercator Two Point Natural Origin", { {"Latitude of projection centre", 8}, {"Latitude of 1st point", 3}, {"Longitude of 1st point", 6}, {"Latitude of 2nd point", 4}, {"Longitude of 2nd point", 7}, {"Scale factor at projection centre", 5}, {"Easting at projection centre", 1}, {"Northing at projection centre", 2}, }}, {"Stereographic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}}, "Stereographic", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, // Non standard parameter names longitude_of_center/latitude_of_center // used in https://github.com/OSGeo/PROJ/issues/3210 {"Stereographic", {{"False_Easting", 1}, {"False_Northing", 2}, {"longitude_of_center", 3}, {"Scale_Factor", 4}, {"latitude_of_center", 5}}, "Stereographic", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Stereographic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 90}}, "Polar Stereographic (variant A)", { {"Latitude of natural origin", 90}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Stereographic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", -90}}, "Polar Stereographic (variant A)", { {"Latitude of natural origin", -90}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Equidistant_Conic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, {"Standard_Parallel_2", 5}, {"Latitude_Of_Origin", 6}}, "Equidistant Conic", { {"Latitude of false origin", 6}, {"Longitude of false origin", 3}, {"Latitude of 1st standard parallel", 4}, {"Latitude of 2nd standard parallel", 5}, {"Easting at false origin", 1}, {"Northing at false origin", 2}, }}, {"Cassini", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 1}, {"Latitude_Of_Origin", 4}}, "Cassini-Soldner", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Van_der_Grinten_I", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Van Der Grinten", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Robinson", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Robinson", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Two_Point_Equidistant", {{"False_Easting", 1}, {"False_Northing", 2}, {"Latitude_Of_1st_Point", 3}, {"Latitude_Of_2nd_Point", 4}, {"Longitude_Of_1st_Point", 5}, {"Longitude_Of_2nd_Point", 6}}, "Two Point Equidistant", { {"Latitude of 1st point", 3}, {"Longitude of 1st point", 5}, {"Latitude of 2nd point", 4}, {"Longitude of 2nd point", 6}, {"False easting", 1}, {"False northing", 2}, }}, {"Azimuthal_Equidistant", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Latitude_Of_Origin", 4}}, "Azimuthal Equidistant", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Lambert_Azimuthal_Equal_Area", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Latitude_Of_Origin", 4}}, "Lambert Azimuthal Equal Area", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Cylindrical_Equal_Area", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}}, "Lambert Cylindrical Equal Area", { {"Latitude of 1st standard parallel", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, // Untested: Hotine_Oblique_Mercator_Two_Point_Center {"Hotine_Oblique_Mercator_Azimuth_Natural_Origin", {{"False_Easting", 1}, {"False_Northing", 2}, {"Scale_Factor", 3}, {"Azimuth", 4}, {"Longitude_Of_Center", 5}, {"Latitude_Of_Center", 6}}, "Hotine Oblique Mercator (variant A)", { {"Latitude of projection centre", 6}, {"Longitude of projection centre", 5}, {"Azimuth at projection centre", 4}, {"Angle from Rectified to Skew Grid", 4}, {"Scale factor at projection centre", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Hotine_Oblique_Mercator_Azimuth_Center", {{"False_Easting", 1}, {"False_Northing", 2}, {"Scale_Factor", 3}, {"Azimuth", 4}, {"Longitude_Of_Center", 5}, {"Latitude_Of_Center", 6}}, "Hotine Oblique Mercator (variant B)", { {"Latitude of projection centre", 6}, {"Longitude of projection centre", 5}, {"Azimuth at projection centre", 4}, {"Angle from Rectified to Skew Grid", 4}, {"Scale factor at projection centre", 3}, {"Easting at projection centre", 1}, {"Northing at projection centre", 2}, }}, {"Double_Stereographic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}}, "Oblique Stereographic", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Krovak", {{"False_Easting", 1}, {"False_Northing", 2}, {"Pseudo_Standard_Parallel_1", 3}, {"Scale_Factor", 4}, {"Azimuth", 5}, {"Longitude_Of_Center", 6}, {"Latitude_Of_Center", 7}, {"X_Scale", 1}, {"Y_Scale", 1}, {"XY_Plane_Rotation", 0}}, "Krovak", { {"Latitude of projection centre", 7}, {"Longitude of origin", 6}, {"Co-latitude of cone axis", 5}, {"Latitude of pseudo standard parallel", 3}, {"Scale factor on pseudo standard parallel", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Krovak", {{"False_Easting", 1}, {"False_Northing", 2}, {"Pseudo_Standard_Parallel_1", 3}, {"Scale_Factor", 4}, {"Azimuth", 5}, {"Longitude_Of_Center", 6}, {"Latitude_Of_Center", 7}, {"X_Scale", -1}, {"Y_Scale", 1}, {"XY_Plane_Rotation", 90}}, "Krovak (North Orientated)", { {"Latitude of projection centre", 7}, {"Longitude of origin", 6}, {"Co-latitude of cone axis", 5}, {"Latitude of pseudo standard parallel", 3}, {"Scale factor on pseudo standard parallel", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"New_Zealand_Map_Grid", {{"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Origin", 3}, {"Latitude_Of_Origin", 4}}, "New Zealand Map Grid", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Orthographic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Center", 3}, {"Latitude_Of_Center", 4}}, "Orthographic (Spherical)", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Local", {{"False_Easting", 1}, {"False_Northing", 2}, {"Scale_Factor", 1.25}, {"Azimuth", 15}, {"Longitude_Of_Center", 3}, {"Latitude_Of_Center", 4}}, "Local Orthographic", { {"Latitude of projection centre", 4}, {"Longitude of projection centre", 3}, {"Azimuth at projection centre", 15}, {"Scale factor at projection centre", 1.25}, {"Easting at projection centre", 1}, {"Northing at projection centre", 2}, }}, {"Winkel_Tripel", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}}, "Winkel Tripel", { {"Longitude of natural origin", 3}, {"Latitude of 1st standard parallel", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Aitoff", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Aitoff", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Craster_Parabolic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Craster Parabolic", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Gnomonic", {{"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Center", 3}, {"Latitude_Of_Center", 4}}, "Gnomonic", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Stereographic_North_Pole", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}}, "Polar Stereographic (variant B)", { {"Latitude of standard parallel", 4}, {"Longitude of origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Stereographic_South_Pole", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", -4}}, "Polar Stereographic (variant B)", { {"Latitude of standard parallel", -4}, {"Longitude of origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Rectified_Skew_Orthomorphic_Natural_Origin", { {"False_Easting", 1}, {"False_Northing", 2}, {"Scale_Factor", 3}, {"Azimuth", 4}, {"Longitude_Of_Center", 5}, {"Latitude_Of_Center", 6}, {"XY_Plane_Rotation", 7}, }, "Hotine Oblique Mercator (variant A)", { {"Latitude of projection centre", 6}, {"Longitude of projection centre", 5}, {"Azimuth at projection centre", 4}, {"Angle from Rectified to Skew Grid", 7}, {"Scale factor at projection centre", 3}, {"False easting", 1}, {"False northing", 2}, }}, // Temptative mapping {"Rectified_Skew_Orthomorphic_Center", { {"False_Easting", 1}, {"False_Northing", 2}, {"Scale_Factor", 3}, {"Azimuth", 4}, {"Longitude_Of_Center", 5}, {"Latitude_Of_Center", 6}, {"XY_Plane_Rotation", 7}, }, "Hotine Oblique Mercator (variant B)", { {"Latitude of projection centre", 6}, {"Longitude of projection centre", 5}, {"Azimuth at projection centre", 4}, {"Angle from Rectified to Skew Grid", 7}, {"Scale factor at projection centre", 3}, {"Easting at projection centre", 1}, {"Northing at projection centre", 2}, }}, {"Goode_Homolosine", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Option", 0.0}}, "Goode Homolosine", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Goode_Homolosine", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Option", 1.0}}, "Interrupted Goode Homolosine", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Goode_Homolosine", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Option", 2.0}}, "Interrupted Goode Homolosine Ocean", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Equidistant_Cylindrical_Ellipsoidal", { {"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, }, "Equidistant Cylindrical", { {"Latitude of 1st standard parallel", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Laborde_Oblique_Mercator", {{"False_Easting", 1}, {"False_Northing", 2}, {"Scale_Factor", 3}, {"Azimuth", 4}, {"Longitude_Of_Center", 5}, {"Latitude_Of_Center", 6}}, "Laborde Oblique Mercator", { {"Latitude of projection centre", 6}, {"Longitude of projection centre", 5}, {"Azimuth at projection centre", 4}, {"Scale factor at projection centre", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Mercator_Variant_A", {{"False_Easting", 1}, {"False_Northing", 2}, {"Scale_Factor", 3}, {"Central_Meridian", 4}}, "Mercator (variant A)", { {"Longitude of natural origin", 4}, {"Scale factor at natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Mercator_Variant_C", {{"False_Easting", 1}, {"False_Northing", 2}, {"Standard_Parallel_1", 3}, {"Central_Meridian", 4}}, "Mercator (variant B)", { {"Latitude of 1st standard parallel", 3}, {"Longitude of natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Transverse_Cylindrical_Equal_Area", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}}, "Transverse Cylindrical Equal Area", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Gnomonic_Ellipsoidal", {{"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Center", 3}, {"Latitude_Of_Center", 4}}, "Gnomonic", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Wagner_IV", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Latitude_Of_Center", 0}}, "Wagner IV", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Wagner_V", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Wagner V", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Wagner_VII", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Wagner VII", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Geostationary_Satellite", { {"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Center", 3}, {"Height", 4}, {"Option", 0.0}, }, "Geostationary Satellite (Sweep Y)", { {"Longitude of natural origin", 3}, {"Satellite Height", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Mercator_Auxiliary_Sphere", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Standard_Parallel_1", 4}, {"Auxiliary_Sphere_Type", 0}}, "Popular Visualisation Pseudo Mercator", { {"Latitude of natural origin", 4}, {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Vertical_Near_Side_Perspective", {{"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Center", 3}, {"Latitude_Of_Center", 4}, {"Height", 5}}, "Vertical Perspective", { {"Latitude of topocentric origin", 4}, {"Longitude of topocentric origin", 3}, {"Viewpoint height", 5}, {"False easting", 1}, {"False northing", 2}, }}, {"Equal_Earth", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}}, "Equal Earth", { {"Longitude of natural origin", 3}, {"False easting", 1}, {"False northing", 2}, }}, {"Peirce_Quincuncial", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}, {"Option", 0}}, "Peirce Quincuncial (Square)", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, {"Peirce_Quincuncial", {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}, {"Scale_Factor", 4}, {"Latitude_Of_Origin", 5}, {"Option", 1}}, "Peirce Quincuncial (Diamond)", { {"Latitude of natural origin", 5}, {"Longitude of natural origin", 3}, {"Scale factor at natural origin", 4}, {"False easting", 1}, {"False northing", 2}, }}, { "Unknown_Method", {{"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Origin", 3}, {"Latitude_Of_Origin", 4}}, "Unknown_Method", {{"False_Easting", 1}, {"False_Northing", 2}, {"Longitude_Of_Origin", 3}, {"Latitude_Of_Origin", 4}}, }, }; TEST(wkt_parse, esri_projcs) { for (const auto &projDef : esriProjDefs) { std::string wkt("PROJCS[\""); if (strcmp(projDef.esriProjectionName, "Plate_Carree") == 0) wkt += "Plate Carree"; else wkt += "unnamed"; wkt += "\",GEOGCS[\"unnamed\"," "DATUM[\"unnamed\",SPHEROID[\"unnamed\"," "6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\""; wkt += projDef.esriProjectionName; wkt += "\"],"; for (const auto ¶m : projDef.esriParams) { wkt += "PARAMETER[\""; wkt += param.first; wkt += "\","; wkt += toString(param.second); wkt += "],"; } wkt += "UNIT[\"Meter\",1.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto conv = crs->derivingConversion(); auto method = conv->method(); EXPECT_EQ(method->nameStr(), projDef.wkt2ProjectionName) << wkt; auto values = conv->parameterValues(); EXPECT_EQ(values.size(), projDef.wkt2Params.size()) << wkt; if (values.size() == projDef.wkt2Params.size()) { for (size_t i = 0; i < values.size(); i++) { const auto &opParamvalue = nn_dynamic_pointer_cast(values[i]); ASSERT_TRUE(opParamvalue); const auto ¶mName = opParamvalue->parameter()->nameStr(); const auto ¶meterValue = opParamvalue->parameterValue(); EXPECT_EQ(paramName, projDef.wkt2Params[i].first) << wkt; EXPECT_EQ(parameterValue->type(), ParameterValue::Type::MEASURE); auto measure = parameterValue->value(); EXPECT_EQ(measure.value(), projDef.wkt2Params[i].second) << wkt; } } auto wkt1Esri = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI).get()); const char *expectedESRIProjectionName = projDef.esriProjectionName; // Not totally sure about the below exceptions. They just capture the // current state of things. if (strcmp(projDef.esriProjectionName, "Transverse_Mercator_Complex") == 0) expectedESRIProjectionName = "Transverse_Mercator"; else if (strcmp(projDef.esriProjectionName, "Equidistant_Cylindrical_Ellipsoidal") == 0) expectedESRIProjectionName = "Equidistant_Cylindrical"; else if (strcmp(projDef.esriProjectionName, "Mercator_Variant_C") == 0) expectedESRIProjectionName = "Mercator"; else if (strcmp(projDef.esriProjectionName, "Gnomonic_Ellipsoidal") == 0) expectedESRIProjectionName = "Gnomonic"; EXPECT_TRUE(wkt1Esri.find(std::string("PROJECTION[\"") .append(expectedESRIProjectionName)) != std::string::npos) << "input: " << wkt << std::endl << "output: " << wkt1Esri; } } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_case_insensitive_names) { auto wkt = "PROJCS[\"WGS_1984_UTM_Zone_31N\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0," "298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\"," "0.0174532925199433]],PROJECTION[\"transverse_mercator\"]," "PARAMETER[\"false_easting\",500000.0]," "PARAMETER[\"false_northing\",0.0]," "PARAMETER[\"central_meridian\",3.0]," "PARAMETER[\"scale_factor\",0.9996]," "PARAMETER[\"latitude_of_origin\",0.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); int zone = 0; bool north = false; EXPECT_TRUE(crs->derivingConversion()->isUTM(zone, north)); EXPECT_EQ(zone, 31); EXPECT_TRUE(north); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_non_expected_param_name) { // We try to be lax on parameter names. auto wkt = "PROJCS[\"WGS_1984_UTM_Zone_31N\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0," "298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\"," "0.0174532925199433]],PROJECTION[\"transverse_mercator\"]," "PARAMETER[\"false_easting\",500000.0]," "PARAMETER[\"false_northing\",0.0]," "PARAMETER[\"longitude_of_center\",3.0]," // should be Central_Meridian "PARAMETER[\"scale_factor\",0.9996]," "PARAMETER[\"latitude_of_origin\",0.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); int zone = 0; bool north = false; EXPECT_TRUE(crs->derivingConversion()->isUTM(zone, north)); EXPECT_EQ(zone, 31); EXPECT_TRUE(north); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_krovak_south_west) { auto wkt = "PROJCS[\"S-JTSK_Krovak\",GEOGCS[\"GCS_S_JTSK\"," "DATUM[\"D_S_JTSK\"," "SPHEROID[\"Bessel_1841\",6377397.155,299.1528128]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Krovak\"],PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Pseudo_Standard_Parallel_1\",78.5]," "PARAMETER[\"Scale_Factor\",0.9999]," "PARAMETER[\"Azimuth\",30.28813975277778]," "PARAMETER[\"Longitude_Of_Center\",24.83333333333333]," "PARAMETER[\"Latitude_Of_Center\",49.5]," "PARAMETER[\"X_Scale\",1.0]," "PARAMETER[\"Y_Scale\",1.0]," "PARAMETER[\"XY_Plane_Rotation\",0.0],UNIT[\"Meter\",1.0]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Krovak"); auto expected_wkt2 = "PROJCRS[\"S-JTSK / Krovak\",\n" " BASEGEODCRS[\"S-JTSK\",\n" " DATUM[\"System of the Unified Trigonometrical Cadastral " "Network\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6156]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Krovak\",\n" " ID[\"EPSG\",9819]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",24.8333333333333,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard " "parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"southing\",south,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"westing\",west,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected_wkt2); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_krovak_east_north_non_standard_likely_from_GDAL_wkt1) { auto wkt = "PROJCS[\"S_JTSK_Krovak_East_North\",GEOGCS[\"GCS_S-JTSK\"," "DATUM[\"D_S_JTSK\",SPHEROID[\"Bessel_1841\"," "6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0]," "UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Krovak\"]," "PARAMETER[\"latitude_of_center\",49.5]," "PARAMETER[\"longitude_of_center\",24.83333333333333]," "PARAMETER[\"azimuth\",30.2881397527778]," "PARAMETER[\"pseudo_standard_parallel_1\",78.5]," "PARAMETER[\"scale_factor\",0.9999]," "PARAMETER[\"false_easting\",0]," "PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Krovak (North Orientated)"); auto expected_wkt2 = "PROJCRS[\"S_JTSK_Krovak_East_North\",\n" " BASEGEODCRS[\"GCS_S-JTSK\",\n" " DATUM[\"System of the Unified Trigonometrical Cadastral " "Network\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6156]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Krovak (North Orientated)\",\n" " ID[\"EPSG\",1041]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",24.8333333333333,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard " "parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected_wkt2); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_normalize_unit) { auto wkt = "PROJCS[\"Accra_Ghana_Grid\",GEOGCS[\"GCS_Accra\"," "DATUM[\"D_Accra\",SPHEROID[\"War_Office\",6378300.0,296.0]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Transverse_Mercator\"]," "PARAMETER[\"False_Easting\",900000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",-1.0]," "PARAMETER[\"Scale_Factor\",0.99975]," "PARAMETER[\"Latitude_Of_Origin\",4.666666666666667]," "UNIT[\"Foot_Gold_Coast\",0.3047997101815088]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->unit().name(), "Gold Coast foot"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_ups_north) { // EPSG:32661 auto wkt = "PROJCS[\"UPS_North\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Stereographic\"]," "PARAMETER[\"False_Easting\",2000000.0]," "PARAMETER[\"False_Northing\",2000000.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Scale_Factor\",0.994]," "PARAMETER[\"Latitude_Of_Origin\",90.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UPS North (N,E)"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->direction(), AxisDirection::SOUTH); // Yes, inconsistency between the name (coming from EPSG) and the fact // that with ESRI CRS, we always output E, N axis order EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->abbreviation(), "E"); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->direction(), AxisDirection::SOUTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->abbreviation(), "N"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_ups_south) { // EPSG:32671 auto wkt = "PROJCS[\"UPS_South\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Stereographic\"]," "PARAMETER[\"False_Easting\",2000000.0]," "PARAMETER[\"False_Northing\",2000000.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Scale_Factor\",0.994]," "PARAMETER[\"Latitude_Of_Origin\",-90.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UPS South (N,E)"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->direction(), AxisDirection::NORTH); // Yes, inconsistency between the name (coming from EPSG) and the fact // that with ESRI CRS, we always output E, N axis order EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->abbreviation(), "E"); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->direction(), AxisDirection::NORTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->abbreviation(), "N"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_wgs_1984_ups_north_E_N) { // EPSG:5041 auto wkt = "PROJCS[\"WGS_1984_UPS_North_(E-N)\"," "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Polar_Stereographic_Variant_A\"]," "PARAMETER[\"False_Easting\",2000000.0]," "PARAMETER[\"False_Northing\",2000000.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Scale_Factor\",0.994]," "PARAMETER[\"Latitude_Of_Origin\",90.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UPS North (E,N)"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->direction(), AxisDirection::SOUTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->abbreviation(), "E"); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->direction(), AxisDirection::SOUTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->abbreviation(), "N"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_wgs_1984_ups_south_E_N) { // EPSG:5042 auto wkt = "PROJCS[\"WGS_1984_UPS_South_(E-N)\"," "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Polar_Stereographic_Variant_A\"]," "PARAMETER[\"False_Easting\",2000000.0]," "PARAMETER[\"False_Northing\",2000000.0]," "PARAMETER[\"Central_Meridian\",0.0]," "PARAMETER[\"Scale_Factor\",0.994]," "PARAMETER[\"Latitude_Of_Origin\",-90.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UPS South (E,N)"); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->direction(), AxisDirection::NORTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[0]->abbreviation(), "E"); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->direction(), AxisDirection::NORTH); EXPECT_EQ(crs->coordinateSystem()->axisList()[1]->abbreviation(), "N"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_gauss_kruger) { auto wkt = "PROJCS[\"ETRS_1989_UWPP_2000_PAS_8\",GEOGCS[\"GCS_ETRS_1989\"," "DATUM[\"D_ETRS_1989\"," "SPHEROID[\"GRS_1980\",6378137.0,298.257222101]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Gauss_Kruger\"]," "PARAMETER[\"False_Easting\",8500000.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",24.0]," "PARAMETER[\"Scale_Factor\",0.999923]," "PARAMETER[\"Latitude_Of_Origin\",0.0]," "UNIT[\"Meter\",1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); auto crs2 = AuthorityFactory::create(dbContext, "ESRI") ->createProjectedCRS("102177"); EXPECT_EQ( crs2->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_ESRI, dbContext) .get()), wkt); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_esri_goode_homolosine_without_option_0) { // Not sure if it is really valid to not have PARAMETER["Option",0.0] // but it seems reasonable to check that we understand that as // Goode Homolosine and not Interrupted Goode Homolosine (option 1) auto wkt = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," "PROJECTION[\"Goode_Homolosine\"]," "PARAMETER[\"False_Easting\",0.0]," "PARAMETER[\"False_Northing\",0.0]," "PARAMETER[\"Central_Meridian\",0.0]," "UNIT[\"Meter\",1.0]]"; auto obj = WKTParser() .attachDatabaseContext(DatabaseContext::create()) .createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Goode Homolosine"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_oracle) { // WKT from mdsys.cs_srs Oracle table auto wkt = "PROJCS[\"RGF93 / Lambert-93\", GEOGCS [ \"RGF93\", " "DATUM [\"Reseau Geodesique Francais 1993 (EPSG ID 6171)\", " "SPHEROID [\"GRS 1980 (EPSG ID 7019)\", 6378137.0, " "298.257222101]], PRIMEM [ \"Greenwich\", 0.000000000 ], " "UNIT [\"Decimal Degree\", 0.0174532925199433]], " "PROJECTION [\"Lambert Conformal Conic\"], " "PARAMETER [\"Latitude_Of_Origin\", 46.5], " "PARAMETER [\"Central_Meridian\", 3.0], " "PARAMETER [\"Standard_Parallel_1\", 49.0], " "PARAMETER [\"Standard_Parallel_2\", 44.0], " "PARAMETER [\"False_Easting\", 700000.0], " "PARAMETER [\"False_Northing\", 6600000.0], " "UNIT [\"Meter\", 1.0]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->datum()->nameStr(), "Reseau Geodesique Francais 1993"); EXPECT_EQ(crs->baseCRS()->datum()->getEPSGCode(), 6171); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Lambert Conic Conformal (2SP)"); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_GE(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 2154); EXPECT_EQ(res.front().second, 90); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_oracle_albers_conical_equal_area) { // WKT from mdsys.cs_srs Oracle table: // https://lists.osgeo.org/pipermail/qgis-user/2024-June/054599.html auto wkt = "PROJCS[\"NAD83 / BC Albers\",GEOGCS[\"NAD83\"," "DATUM[\"North_American_Datum_1983\"," "SPHEROID[\"GRS 1980\",6378137,298.257222101," "AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]]," "PRIMEM[\"Greenwich\",0]," "UNIT[\"Decimal Degree\",0.0174532925199433]]," "PROJECTION[\"Albers_Conical_Equal_Area\"]," "PARAMETER[\"Latitude_Of_Origin\",45]," "PARAMETER[\"Central_Meridian\",-126]," "PARAMETER[\"Standard_Parallel_1\",50]," "PARAMETER[\"Standard_Parallel_2\",58.5]," "PARAMETER[\"False_Easting\",1000000]," "PARAMETER[\"False_Northing\",0]," "UNIT[\"Meter\",1]," "AXIS[\"Easting\",EAST]," "AXIS[\"Northing\",NORTH]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Albers Equal Area"); auto factoryAll = AuthorityFactory::create(dbContext, std::string()); auto res = crs->identify(factoryAll); ASSERT_GE(res.size(), 1U); EXPECT_EQ(res.front().first->getEPSGCode(), 3005); EXPECT_EQ(res.front().second, 100); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_lcc_1sp_without_1sp_suffix) { // WKT from Trimble auto wkt = "PROJCS[\"TWM-Madison Co LDP\"," "GEOGCS[\"WGS 1984\"," "DATUM[\"WGS 1984\"," "SPHEROID[\"World Geodetic System 1984\"," "6378137,298.257223563]]," "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"Degree\",0.01745329251994," "AUTHORITY[\"EPSG\",\"9102\"]]," "AXIS[\"Long\",EAST],AXIS[\"Lat\",NORTH]]," "PROJECTION[\"Lambert_Conformal_Conic\"]," "PARAMETER[\"False_Easting\",103000.0000035]," "PARAMETER[\"False_Northing\",79000.00007055]," "PARAMETER[\"Latitude_Of_Origin\",38.83333333333]," "PARAMETER[\"Central_Meridian\",-89.93333333333]," "PARAMETER[\"Scale_Factor\",1.000019129]," "UNIT[\"Foot_US\",0.3048006096012,AUTHORITY[\"EPSG\",\"9003\"]]," "AXIS[\"East\",EAST],AXIS[\"North\",NORTH]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Lambert Conic Conformal (1SP)"); } // --------------------------------------------------------------------------- TEST(wkt_parse, wkt1_pseudo_wkt1_gdal_pseudo_wkt1_esri) { // WKT from https://github.com/OSGeo/PROJ/issues/3186 auto wkt = "PROJCS[\"Equidistant_Cylindrical\"," "GEOGCS[\"WGS 84\",DATUM[\"wgs_1984\"," "SPHEROID[\"WGS 84\",6378137,298.257223563," "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"degree\",0.0174532925199433," "AUTHORITY[\"EPSG\",\"9102\"]]," "AUTHORITY[\"EPSG\",\"4326\"]]," "PROJECTION[\"Equidistant_Cylindrical\"]," "PARAMETER[\"false_easting\",0]," "PARAMETER[\"false_northing\",0]," "PARAMETER[\"central_meridian\",0]," "PARAMETER[\"standard_parallel_1\",37]," "UNIT[\"Meter\",1,AUTHORITY[\"EPSG\",\"9001\"]]," "AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Equidistant Cylindrical"); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), 1028); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid) { EXPECT_THROW(WKTParser().createFromWKT(""), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("A"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("UNKNOWN[\"foo\"]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("INVALID["), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("INVALID[]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_SPHEROID) { EXPECT_NO_THROW(WKTParser().createFromWKT("SPHEROID[\"x\",1,0.5]")); EXPECT_THROW(WKTParser().createFromWKT("SPHEROID[\"x\"]"), ParsingException); // major axis not number EXPECT_THROW(WKTParser().createFromWKT("SPHEROID[\"x\",\"1\",0.5]"), ParsingException); // major axis not number EXPECT_THROW(WKTParser().createFromWKT("SPHEROID[\"x\",1,\"0.5\"]"), ParsingException); // reverse flatting not number } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DATUM) { EXPECT_NO_THROW( WKTParser().createFromWKT("DATUM[\"x\",SPHEROID[\"x\",1,0.5]]")); EXPECT_THROW(WKTParser().createFromWKT("DATUM[\"x\"]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("DATUM[\"x\",FOO[]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_ENSEMBLE) { EXPECT_THROW(WKTParser().createFromWKT("ENSEMBLE[]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("ENSEMBLE[\"x\"]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT( "ENSEMBLE[\"x\",MEMBER[\"vdatum1\"],MEMBER[\"vdatum2\"]]"), ParsingException); EXPECT_THROW( WKTParser().createFromWKT("ENSEMBLE[\"x\",MEMBER[],MEMBER[\"vdatum2\"]," "ENSEMBLEACCURACY[\"100\"]]"), ParsingException); EXPECT_THROW( WKTParser().createFromWKT("ENSEMBLE[\"x\",MEMBER[\"vdatum1\"],MEMBER[" "\"vdatum2\"],ENSEMBLEACCURACY[]]"), ParsingException); EXPECT_THROW( WKTParser().createFromWKT("ENSEMBLE[\"x\",ENSEMBLEACCURACY[\"100\"]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_GEOGCS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],PRIMEM[\"x\",0],UNIT[" "\"degree\",0.0174532925199433]]")); // missing PRIMEM EXPECT_THROW( WKTParser().createFromWKT("GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0." "5]],UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // missing UNIT EXPECT_THROW( WKTParser().createFromWKT( "GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],PRIMEM[\"x\",0]]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("GEOGCS[\"x\"]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("GEOGCS[\"x\",FOO[]]"), ParsingException); // not enough children for DATUM EXPECT_THROW( WKTParser().createFromWKT("GEOGCS[\"x\",DATUM[\"x\"],PRIMEM[\"x\",0]," "UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // not enough children for AUTHORITY EXPECT_THROW(WKTParser().createFromWKT("GEOGCS[\"x\",DATUM[\"x\",SPHEROID[" "\"x\",1,0.5]],PRIMEM[\"x\",0],UNIT[" "\"degree\",0.0174532925199433]," "AUTHORITY[\"x\"]]"), ParsingException); // not enough children for AUTHORITY, but ignored EXPECT_NO_THROW(WKTParser().setStrict(false).createFromWKT( "GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],PRIMEM[\"x\",0],UNIT[" "\"degree\",0.0174532925199433],AUTHORITY[\"x\"]]")); EXPECT_NO_THROW(WKTParser().createFromWKT( "GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],PRIMEM[\"x\",0],UNIT[" "\"degree\",0.0174532925199433]]")); // PRIMEM not numeric EXPECT_THROW( WKTParser().createFromWKT( "GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0." "5]],PRIMEM[\"x\",\"a\"],UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // not enough children for PRIMEM EXPECT_THROW(WKTParser().createFromWKT("GEOGCS[\"x\",DATUM[\"x\",SPHEROID[" "\"x\",1,0.5]],PRIMEM[\"x\"],UNIT[" "\"degree\",0.0174532925199433]]"), ParsingException); EXPECT_NO_THROW(WKTParser().createFromWKT( "GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],PRIMEM[\"x\",0],UNIT[" "\"degree\",0.0174532925199433],AXIS[\"latitude\"," "NORTH],AXIS[\"longitude\",EAST]]")); // one axis only EXPECT_THROW(WKTParser().createFromWKT( "GEOGCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0." "5]],PRIMEM[\"x\",0],UNIT[\"degree\",0.0174532925199433]," "AXIS[\"latitude\",NORTH]]"), ParsingException); // invalid axis EXPECT_THROW(WKTParser().createFromWKT("GEOGCS[\"x\",DATUM[\"x\",SPHEROID[" "\"x\",1,0.5]],PRIMEM[\"x\",0],UNIT[" "\"degree\",0.0174532925199433]," "AXIS[\"latitude\"," "NORTH],AXIS[\"longitude\"]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_UNIT) { std::string startWKT("GEODCRS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],CS[" "ellipsoidal,2],AXIS[\"latitude\",north],AXIS[" "\"longitude\",east],"); EXPECT_NO_THROW(WKTParser().createFromWKT( startWKT + "UNIT[\"degree\",0.0174532925199433]]")); // not enough children EXPECT_THROW(WKTParser().createFromWKT(startWKT + "UNIT[\"x\"]]]"), ParsingException); // invalid conversion factor EXPECT_THROW( WKTParser().createFromWKT(startWKT + "UNIT[\"x\",\"invalid\"]]]"), ParsingException); // invalid ID EXPECT_THROW( WKTParser().createFromWKT(startWKT + "UNIT[\"x\",1,ID[\"x\"]]]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_GEOCCS) { EXPECT_NO_THROW( WKTParser().createFromWKT("GEOCCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0." "5]],PRIMEM[\"x\",0],UNIT[\"metre\",1]]")); // missing PRIMEM EXPECT_THROW(WKTParser().createFromWKT("GEOCCS[\"x\",DATUM[\"x\",SPHEROID[" "\"x\",1,0.5]],UNIT[\"metre\",1]]"), ParsingException); // missing UNIT EXPECT_THROW( WKTParser().createFromWKT( "GEOCCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],PRIMEM[\"x\",0]]"), ParsingException); // ellipsoidal CS is invalid in a GEOCCS EXPECT_THROW(WKTParser().createFromWKT("GEOCCS[\"x\",DATUM[\"x\",SPHEROID[" "\"x\",1,0.5]],PRIMEM[\"x\",0],UNIT[" "\"degree\",0.0174532925199433]," "AXIS[\"latitude\"," "NORTH],AXIS[\"longitude\",EAST]]"), ParsingException); // ellipsoidal CS is invalid in a GEOCCS EXPECT_THROW(WKTParser().createFromWKT( "GEOCCS[\"WGS 84\",DATUM[\"World Geodetic System 1984\"," "ELLIPSOID[\"WGS 84\",6378274,298.257223564," "LENGTHUNIT[\"metre\",1]]]," "CS[ellipsoidal,2],AXIS[\"geodetic latitude (Lat)\",north," "ANGLEUNIT[\"degree\",0.0174532925199433]]," "AXIS[\"geodetic longitude (Lon)\",east," "ANGLEUNIT[\"degree\",0.0174532925199433]]]"), ParsingException); // 3 axis required EXPECT_THROW(WKTParser().createFromWKT( "GEOCCS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]],PRIMEM[" "\"x\",0],UNIT[\"metre\",1],AXIS[" "\"Geocentric X\",OTHER],AXIS[\"Geocentric Y\",OTHER]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_CS_of_GEODCRS) { std::string startWKT("GEODCRS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]]"); // missing CS EXPECT_THROW(WKTParser().createFromWKT(startWKT + "]"), ParsingException); // CS: not enough children EXPECT_THROW(WKTParser().createFromWKT(startWKT + ",CS[x]]"), ParsingException); // CS: invalid type EXPECT_THROW(WKTParser().createFromWKT(startWKT + ",CS[x,2]]"), ParsingException); // CS: invalid number of axis EXPECT_THROW(WKTParser().createFromWKT(startWKT + ",CS[ellipsoidal,0]]"), ParsingException); // CS: number of axis is not a number EXPECT_THROW( WKTParser().createFromWKT(startWKT + ",CS[ellipsoidal,\"x\"]]"), ParsingException); // CS: invalid CS type EXPECT_THROW(WKTParser().createFromWKT(startWKT + ",CS[invalid,2],AXIS[\"latitude\"," "north],AXIS[\"longitude\",east]]"), ParsingException); // CS: OK EXPECT_NO_THROW(WKTParser().createFromWKT( startWKT + ",CS[ellipsoidal,2],AXIS[\"latitude\",north],AXIS[" "\"longitude\",east],UNIT[\"degree\",0.0174532925199433]]")); // CS: Cartesian with 2 axis unexpected EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",CS[Cartesian,2],AXIS[\"latitude\"," "north],AXIS[\"longitude\",east]," "UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // CS: missing axis EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",CS[ellipsoidal,2],AXIS[\"latitude\",north]," "UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // not enough children in AXIS EXPECT_THROW( WKTParser().createFromWKT( startWKT + ",CS[ellipsoidal,2],AXIS[\"latitude\",north],AXIS[\"longitude\"]," "UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // not enough children in ORDER EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",CS[ellipsoidal,2],AXIS[\"latitude\",north,ORDER[]],AXIS[" "\"longitude\",east]," "UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // invalid value in ORDER EXPECT_THROW( WKTParser().createFromWKT( startWKT + ",CS[ellipsoidal,2],AXIS[\"latitude\",north,ORDER[\"x\"]],AXIS[" "\"longitude\",east],UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // unexpected ORDER value EXPECT_THROW( WKTParser().createFromWKT( startWKT + ",CS[ellipsoidal,2],AXIS[\"latitude\",north,ORDER[2]],AXIS[" "\"longitude\",east],UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // Invalid CS type EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up],\n" " UNIT[\"metre\",1]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_CS_of_GEOGRAPHICCRS) { // A GeographicCRS must have an ellipsoidal CS EXPECT_THROW(WKTParser().createFromWKT( "GEOGRAPHICCRS[\"x\",DATUM[\"x\",SPHEROID[\"x\",1,0.5]]," "CS[Cartesian,3],AXIS[\"(X)\",geocentricX],AXIS[\"(Y)\"," "geocentricY],AXIS[\"(Z)\",geocentricZ]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DYNAMIC) { std::string prefix("GEOGCRS[\"WGS 84 (G1762)\","); std::string suffix( "TRF[\"World Geodetic System 1984 (G1762)\"," "ELLIPSOID[\"WGS 84\",6378137,298.257223563]]," "CS[ellipsoidal,3]," " AXIS[\"(lat)\",north,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"(lon)\",east,ANGLEUNIT[\"degree\",0.0174532925199433]]," " AXIS[\"ellipsoidal height (h)\",up,LENGTHUNIT[\"metre\",1.0]]" "]"); EXPECT_NO_THROW(WKTParser().createFromWKT( prefix + "DYNAMIC[FRAMEEPOCH[2015]]," + suffix)); EXPECT_THROW(WKTParser().createFromWKT(prefix + "DYNAMIC[]," + suffix), ParsingException); EXPECT_THROW( WKTParser().createFromWKT(prefix + "DYNAMIC[FRAMEEPOCH[]]," + suffix), ParsingException); EXPECT_THROW(WKTParser().createFromWKT( prefix + "DYNAMIC[FRAMEEPOCH[\"invalid\"]]," + suffix), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_PROJCRS) { // missing BASEGEODCRS EXPECT_THROW( WKTParser().createFromWKT("PROJCRS[\"WGS 84 / UTM zone 31N\"]"), ParsingException); std::string startWKT("PROJCRS[\"WGS 84 / UTM zone 31N\",BASEGEOGCRS[\"WGS " "84\",DATUM[\"WGS_1984\",ELLIPSOID[\"WGS " "84\",6378137,298.257223563]],UNIT[\"degree\",0." "0174532925199433]]"); // missing CONVERSION EXPECT_THROW(WKTParser().createFromWKT(startWKT + "]"), ParsingException); // not enough children in CONVERSION EXPECT_THROW(WKTParser().createFromWKT(startWKT + ",CONVERSION[\"x\"]]"), ParsingException); // not enough children in METHOD EXPECT_THROW( WKTParser().createFromWKT(startWKT + ",CONVERSION[\"x\",METHOD[]]]"), ParsingException); // not enough children in PARAMETER EXPECT_THROW( WKTParser().createFromWKT( startWKT + ",CONVERSION[\"x\",METHOD[\"y\"],PARAMETER[\"z\"]]]"), ParsingException); // non numeric value for PARAMETER EXPECT_THROW( WKTParser().createFromWKT( startWKT + ",CONVERSION[\"x\",METHOD[\"y\"],PARAMETER[\"z\",\"foo\"]]]"), ParsingException); // missing CS EXPECT_THROW(WKTParser().createFromWKT(startWKT + ",CONVERSION[\"x\",METHOD[\"y\"]]]"), ParsingException); // CS is not Cartesian EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",CONVERSION[\"x\",METHOD[\"y\"]],CS[" "ellipsoidal,2],AXIS[\"latitude\",north],AXIS[" "\"longitude\",east]]"), ParsingException); // not enough children in MERIDIAN EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",CONVERSION[\"x\",METHOD[\"y\"]],CS[" "Cartesian,2],AXIS[\"easting (X)\",south," "MERIDIAN[90]],AXIS[" "\"northing (Y)\",south]]"), ParsingException); // non numeric angle value for MERIDIAN EXPECT_THROW( WKTParser().createFromWKT( startWKT + ",CONVERSION[\"x\",METHOD[\"y\"]],CS[" "Cartesian,2],AXIS[\"easting (X)\",south," "MERIDIAN[\"x\",UNIT[\"degree\",0.0174532925199433]]],AXIS[" "\"northing (Y)\",south]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_PROJCS) { std::string startWKT( "PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"x\",0],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AXIS[\"latitude\",NORTH],\n" " AXIS[\"longitude\",EAST],\n" " AUTHORITY[\"EPSG\",\"4326\"]]\n"); // missing PROJECTION EXPECT_THROW(WKTParser().createFromWKT(startWKT + "]"), ParsingException); // not enough children in PROJECTION EXPECT_THROW(WKTParser().createFromWKT(startWKT + ",PROJECTION[],UNIT[\"metre\",1]]"), ParsingException); // not enough children in PARAMETER EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",PROJECTION[\"x\"],PARAMETER[\"z\"],UNIT[\"metre\",1]]"), ParsingException); // not enough children in PARAMETER EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",PROJECTION[\"x\"],PARAMETER[\"z\"],UNIT[\"metre\",1]]"), ParsingException); EXPECT_NO_THROW(WKTParser().createFromWKT( startWKT + ",PROJECTION[\"x\"],PARAMETER[\"z\",1],UNIT[\"metre\",1]]")); // missing UNIT EXPECT_THROW(WKTParser().createFromWKT( startWKT + ",PROJECTION[\"x\"],PARAMETER[\"z\",1]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_VERTCRS) { // missing VDATUM EXPECT_THROW(WKTParser().createFromWKT( "VERTCRS[\"foo\",CS[vertical,1],AXIS[\"x\",up]]"), ParsingException); // missing CS EXPECT_THROW(WKTParser().createFromWKT("VERTCRS[\"foo\",VDATUM[\"bar\"]]"), ParsingException); // CS is not of type vertical EXPECT_THROW(WKTParser().createFromWKT("VERTCRS[\"foo\",VDATUM[\"bar\"],CS[" "ellipsoidal,2],AXIS[\"latitude\"," "north],AXIS[" "\"longitude\",east]]"), ParsingException); // verticalCS should have only 1 axis EXPECT_THROW( WKTParser().createFromWKT("VERTCRS[\"foo\",VDATUM[\"bar\"],CS[vertical," "2],AXIS[\"latitude\",north],AXIS[" "\"longitude\",east]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_esri_VERTCS) { // VDATUM without child EXPECT_THROW(WKTParser().createFromWKT( "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\"," "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]]," "PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]," "VERTCS[\"EGM96_Geoid\",VDATUM," "PARAMETER[\"Vertical_Shift\",0.0]," "PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_VERT_CS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "VERT_CS[\"x\",VERT_DATUM[\"y\",2005],UNIT[\"metre\",1]]")); // Missing VERT_DATUM EXPECT_THROW(WKTParser().createFromWKT("VERT_CS[\"x\",UNIT[\"metre\",1]]"), ParsingException); // Missing UNIT EXPECT_THROW( WKTParser().createFromWKT("VERT_CS[\"x\",VERT_DATUM[\"y\",2005]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_COORDINATEOPERATION) { std::string src_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); src_wkt = GeographicCRS::EPSG_4326->exportToWKT(formatter.get()); } std::string dst_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); dst_wkt = GeographicCRS::EPSG_4807->exportToWKT(formatter.get()); } std::string interpolation_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); interpolation_wkt = GeographicCRS::EPSG_4979->exportToWKT(formatter.get()); } // Valid { auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[" + dst_wkt + "],\n" " METHOD[\"operationMethodName\"],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"]]"; EXPECT_NO_THROW(WKTParser().createFromWKT(wkt)); } // Missing SOURCECRS { auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " TARGETCRS[" + dst_wkt + "],\n" " METHOD[\"operationMethodName\"],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // Invalid content in SOURCECRS { auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[FOO],\n" " TARGETCRS[" + dst_wkt + "],\n" " METHOD[\"operationMethodName\"],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // Missing TARGETCRS { auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[" + src_wkt + "],\n" " METHOD[\"operationMethodName\"],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // Invalid content in TARGETCRS { auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[FOO],\n" " METHOD[\"operationMethodName\"],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // Missing METHOD { auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[" + dst_wkt + "]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // Invalid METHOD { auto wkt = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[" + dst_wkt + "],\n" " METHOD[],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_CONCATENATEDOPERATION) { // No STEP EXPECT_THROW(WKTParser().createFromWKT("CONCATENATEDOPERATION[\"name\"]"), ParsingException); auto transf_1 = Transformation::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "transf_1"), nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), nullptr, PropertyMap().set(IdentifiedObject::NAME_KEY, "operationMethodName"), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector()); // One single STEP { auto wkt = "CONCATENATEDOPERATION[\"name\",\n" " SOURCECRS[" + transf_1->sourceCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " TARGETCRS[" + transf_1->targetCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " STEP[" + transf_1->exportToWKT(WKTFormatter::create().get()) + "],\n" " ID[\"codeSpace\",\"code\"],\n" " REMARK[\"my remarks\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // empty STEP { auto wkt = "CONCATENATEDOPERATION[\"name\",\n" " SOURCECRS[" + transf_1->sourceCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " TARGETCRS[" + transf_1->targetCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " STEP[],\n" " STEP[],\n" " ID[\"codeSpace\",\"code\"],\n" " REMARK[\"my remarks\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } // Invalid content in STEP { auto wkt = "CONCATENATEDOPERATION[\"name\",\n" " SOURCECRS[" + transf_1->sourceCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " TARGETCRS[" + transf_1->targetCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " STEP[" + transf_1->sourceCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " STEP[" + transf_1->sourceCRS()->exportToWKT(WKTFormatter::create().get()) + "],\n" " ID[\"codeSpace\",\"code\"],\n" " REMARK[\"my remarks\"]]"; EXPECT_THROW(WKTParser().createFromWKT(wkt), ParsingException); } } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_BOUNDCRS) { auto projcrs = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my PROJCRS"), GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "my GEOGCRS"), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)), Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto valid_wkt = "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" + "TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT(WKTFormatter::create().get()) + "],\n" " ABRIDGEDTRANSFORMATION[\"foo\",\n" " METHOD[\"bar\"],PARAMETER[\"foo\",1.0]]]"; EXPECT_NO_THROW(WKTParser().createFromWKT(valid_wkt)) << valid_wkt; // Missing SOURCECRS EXPECT_THROW( WKTParser().createFromWKT("BOUNDCRS[TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT( WKTFormatter::create().get()) + "],\n" " ABRIDGEDTRANSFORMATION[\"foo\",\n" " METHOD[\"bar\"]," "PARAMETER[\"foo\",1.0]]]"), ParsingException); // Invalid SOURCECRS EXPECT_THROW( WKTParser().createFromWKT("BOUNDCRS[SOURCECRS[foo], TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT( WKTFormatter::create().get()) + "],\n" " ABRIDGEDTRANSFORMATION[\"foo\",\n" " METHOD[\"bar\"]," "PARAMETER[\"foo\",1.0]]]"), ParsingException); // Missing TARGETCRS EXPECT_THROW(WKTParser().createFromWKT( "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" " ABRIDGEDTRANSFORMATION[\"foo\",\n" " METHOD[\"bar\"]," "PARAMETER[\"foo\",1.0]]]"), ParsingException); // Invalid TARGETCRS EXPECT_THROW(WKTParser().createFromWKT( "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],TARGETCRS[\"foo\"],\n" " ABRIDGEDTRANSFORMATION[\"foo\",\n" " METHOD[\"bar\"]," "PARAMETER[\"foo\",1.0]]]"), ParsingException); // Missing ABRIDGEDTRANSFORMATION EXPECT_THROW(WKTParser().createFromWKT( "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" + "TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT( WKTFormatter::create().get()) + "]]"), ParsingException); // Missing METHOD EXPECT_THROW(WKTParser().createFromWKT( "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" + "TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT( WKTFormatter::create().get()) + "]," "ABRIDGEDTRANSFORMATION[\"foo\"]," "PARAMETER[\"foo\",1.0]]"), ParsingException); // Invalid METHOD EXPECT_THROW(WKTParser().createFromWKT( "BOUNDCRS[SOURCECRS[" + projcrs->exportToWKT(WKTFormatter::create().get()) + "],\n" + "TARGETCRS[" + GeographicCRS::EPSG_4326->exportToWKT( WKTFormatter::create().get()) + "]," "ABRIDGEDTRANSFORMATION[\"foo\",METHOD[]," "PARAMETER[\"foo\",1.0]]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_TOWGS84) { EXPECT_THROW(WKTParser().createFromWKT( "GEOGCS[\"WGS 84\"," " DATUM[\"WGS_1984\"," " SPHEROID[\"WGS 84\",6378137,298.257223563]," " TOWGS84[0]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"degree\",0.0174532925199433]]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT( "GEOGCS[\"WGS 84\"," " DATUM[\"WGS_1984\"," " SPHEROID[\"WGS 84\",6378137,298.257223563]," " TOWGS84[0,0,0,0,0,0,\"foo\"]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"degree\",0.0174532925199433]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DerivedGeographicCRS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]]],\n" " DERIVINGCONVERSION[\"foo\",\n" " METHOD[\"bar\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north],\n" " AXIS[\"longitude\",east],\n" " UNIT[\"degree\",0.0174532925199433]]")); // Missing DERIVINGCONVERSION EXPECT_THROW( WKTParser().createFromWKT( "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north],\n" " AXIS[\"longitude\",east],\n" " UNIT[\"degree\",0.0174532925199433]]"), ParsingException); // Missing CS EXPECT_THROW( WKTParser().createFromWKT( "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]]],\n" " DERIVINGCONVERSION[\"foo\",\n" " METHOD[\"bar\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]]"), ParsingException); // CS should be ellipsoidal given root node is GEOGCRS EXPECT_THROW( WKTParser().createFromWKT( "GEOGCRS[\"WMO Atlantic Pole\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]]],\n" " DERIVINGCONVERSION[\"foo\",\n" " METHOD[\"bar\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[Cartesian,3],\n" " AXIS[\"(X)\",geocentricX],\n" " AXIS[\"(Y)\",geocentricY],\n" " AXIS[\"(Z)\",geocentricZ],\n" " UNIT[\"metre\",1]]"), ParsingException); // CS should have 3 axis EXPECT_THROW( WKTParser().createFromWKT( "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]]],\n" " DERIVINGCONVERSION[\"foo\",\n" " METHOD[\"bar\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(X)\",geocentricX],\n" " AXIS[\"(Y)\",geocentricY],\n" " UNIT[\"metre\",1]]"), ParsingException); // Invalid CS type EXPECT_THROW( WKTParser().createFromWKT( "GEODCRS[\"WMO Atlantic Pole\",\n" " BASEGEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]]],\n" " DERIVINGCONVERSION[\"foo\",\n" " METHOD[\"bar\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up],\n" " UNIT[\"metre\",1]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_TemporalCRS) { EXPECT_NO_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]")); // Missing TDATUM EXPECT_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]"), ParsingException); // Missing CS EXPECT_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]]]"), ParsingException); // CS should be temporal EXPECT_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[Cartesian,2],\n" " AXIS[\"(X)\",geocentricX],\n" " AXIS[\"(Y)\",geocentricY],\n" " UNIT[\"metre\",1]]"), ParsingException); // CS should have 1 axis EXPECT_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[temporal,2],\n" " AXIS[\"time (T)\",future],\n" " AXIS[\"time2 (T)\",future]]"), ParsingException); // CS should have 1 axis EXPECT_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[TemporalDateTime,2],\n" " AXIS[\"time (T)\",future],\n" " AXIS[\"time2 (T)\",future]]"), ParsingException); // CS should have 1 axis EXPECT_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[TemporalCount,2],\n" " AXIS[\"time (T)\",future],\n" " AXIS[\"time2 (T)\",future]]"), ParsingException); // CS should have 1 axis EXPECT_THROW( WKTParser().createFromWKT("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " TIMEORIGIN[0000-01-01]],\n" " CS[TemporalMeasure,2],\n" " AXIS[\"time (T)\",future],\n" " AXIS[\"time2 (T)\",future]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_EngineeingCRS) { EXPECT_NO_THROW( WKTParser().createFromWKT("ENGCRS[\"name\",\n" " EDATUM[\"name\"],\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]")); // Missing EDATUM EXPECT_THROW( WKTParser().createFromWKT("ENGCRS[\"name\",\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]"), ParsingException); // Missing CS EXPECT_THROW(WKTParser().createFromWKT("ENGCRS[\"name\",\n" " EDATUM[\"name\"]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_LOCAL_CS) { EXPECT_THROW( WKTParser().createFromWKT("LOCAL_CS[\"name\",\n" " LOCAL_DATUM[\"name\",1234],\n" " AXIS[\"Geodetic latitude\",NORTH],\n" " AXIS[\"Geodetic longitude\",EAST],\n" " AXIS[\"Ellipsoidal height\",UP]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_ParametricCRS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "PARAMETRICCRS[\"name\",\n" " PDATUM[\"name\"],\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]")); // Missing PDATUM EXPECT_THROW(WKTParser().createFromWKT( "PARAMETRICCRS[\"name\",\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]"), ParsingException); // Missing CS EXPECT_THROW(WKTParser().createFromWKT("PARAMETRICCRS[\"name\",\n" " PDATUM[\"name\"]]"), ParsingException); // Invalid number of axis for CS EXPECT_THROW(WKTParser().createFromWKT( "PARAMETRICCRS[\"name\",\n" " PDATUM[\"name\"],\n" " CS[parametric,2],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]"), ParsingException); // Invalid CS type EXPECT_THROW( WKTParser().createFromWKT("PARAMETRICCRS[\"name\",\n" " PDATUM[\"name\"],\n" " CS[temporal,1],\n" " AXIS[\"time (T)\",future]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DERIVEDPROJCRS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "DERIVEDPROJCRS[\"derived projectedCRS\",\n" " BASEPROJCRS[\"BASEPROJCRS\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1]]")); EXPECT_THROW(WKTParser().createFromWKT( "DERIVEDPROJCRS[\"derived projectedCRS\",\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1]]"), ParsingException); // Missing DERIVINGCONVERSION EXPECT_THROW( WKTParser().createFromWKT( "DERIVEDPROJCRS[\"derived projectedCRS\",\n" " BASEPROJCRS[\"BASEPROJCRS\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " UNIT[\"metre\",1]]"), ParsingException); // Missing CS EXPECT_THROW( WKTParser().createFromWKT( "DERIVEDPROJCRS[\"derived projectedCRS\",\n" " BASEPROJCRS[\"BASEPROJCRS\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DerivedVerticalCRS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "VERTCRS[\"Derived vertCRS\",\n" " BASEVERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up],\n" " UNIT[\"metre\",1]]")); // Missing DERIVINGCONVERSION EXPECT_THROW(WKTParser().createFromWKT( "VERTCRS[\"Derived vertCRS\",\n" " BASEVERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up],\n" " UNIT[\"metre\",1]]"), ParsingException); // Missing CS EXPECT_THROW(WKTParser().createFromWKT( "VERTCRS[\"Derived vertCRS\",\n" " BASEVERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]]"), ParsingException); // Wrong CS type EXPECT_THROW(WKTParser().createFromWKT( "VERTCRS[\"Derived vertCRS\",\n" " BASEVERTCRS[\"ODN height\",\n" " VDATUM[\"Ordnance Datum Newlyn\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[parametric,1],\n" " AXIS[\"gravity-related height (H)\",up],\n" " UNIT[\"metre\",1]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DerivedEngineeringCRS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "ENGCRS[\"Derived EngineeringCRS\",\n" " BASEENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " LENGTHUNIT[\"metre\",1]]")); // Missing DERIVINGCONVERSION EXPECT_THROW( WKTParser().createFromWKT("ENGCRS[\"Derived EngineeringCRS\",\n" " BASEENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " LENGTHUNIT[\"metre\",1]]"), ParsingException); // Missing CS EXPECT_THROW(WKTParser().createFromWKT( "ENGCRS[\"Derived EngineeringCRS\",\n" " BASEENGCRS[\"Engineering CRS\",\n" " EDATUM[\"Engineering datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DerivedParametricCRS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "PARAMETRICCRS[\"Derived ParametricCRS\",\n" " BASEPARAMCRS[\"Parametric CRS\",\n" " PDATUM[\"Parametric datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]")); // Missing DERIVINGCONVERSION EXPECT_THROW(WKTParser().createFromWKT( "PARAMETRICCRS[\"Derived ParametricCRS\",\n" " BASEPARAMCRS[\"Parametric CRS\",\n" " PDATUM[\"Parametric datum\"]],\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]"), ParsingException); // Missing CS EXPECT_THROW(WKTParser().createFromWKT( "PARAMETRICCRS[\"Derived ParametricCRS\",\n" " BASEPARAMCRS[\"Parametric CRS\",\n" " PDATUM[\"Parametric datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]]"), ParsingException); // Wrong CS type EXPECT_THROW(WKTParser().createFromWKT( "PARAMETRICCRS[\"Derived ParametricCRS\",\n" " BASEPARAMCRS[\"Parametric CRS\",\n" " PDATUM[\"Parametric datum\"]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_DerivedTemporalCRS) { EXPECT_NO_THROW(WKTParser().createFromWKT( "TIMECRS[\"Derived TemporalCRS\",\n" " BASETIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]")); // Missing DERIVINGCONVERSION EXPECT_THROW(WKTParser().createFromWKT( "TIMECRS[\"Derived TemporalCRS\",\n" " BASETIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]"), ParsingException); // Missing CS EXPECT_THROW(WKTParser().createFromWKT( "TIMECRS[\"Derived TemporalCRS\",\n" " BASETIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]]]"), ParsingException); // Wrong CS type EXPECT_THROW(WKTParser().createFromWKT( "TIMECRS[\"Derived TemporalCRS\",\n" " BASETIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]]],\n" " DERIVINGCONVERSION[\"unnamed\",\n" " METHOD[\"PROJ unimplemented\"],\n" " PARAMETER[\"foo\",1.0,UNIT[\"metre\",1]]],\n" " CS[parametric,1],\n" " AXIS[\"pressure (hPa)\",up,\n" " PARAMETRICUNIT[\"HectoPascal\",100]]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(wkt_parse, invalid_CoordinateMetadata) { EXPECT_THROW(WKTParser().createFromWKT("COORDINATEMETADATA[]"), ParsingException); EXPECT_THROW(WKTParser().createFromWKT("COORDINATEMETADATA[ELLIPSOID[\"GRS " "1980\",6378137,298.257222101]]"), ParsingException); // Empty epoch EXPECT_THROW( WKTParser().createFromWKT( "COORDINATEMETADATA[\n" " GEOGCRS[\"ITRF2014\",\n" " DYNAMIC[\n" " FRAMEEPOCH[2010]],\n" " DATUM[\"International Terrestrial Reference Frame " "2014\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " USAGE[\n" " SCOPE[\"Geodesy.\"],\n" " AREA[\"World.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",9000]],\n" " EPOCH[]]"), ParsingException); // Invalid epoch EXPECT_THROW( WKTParser().createFromWKT( "COORDINATEMETADATA[\n" " GEOGCRS[\"ITRF2014\",\n" " DYNAMIC[\n" " FRAMEEPOCH[2010]],\n" " DATUM[\"International Terrestrial Reference Frame " "2014\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " USAGE[\n" " SCOPE[\"Geodesy.\"],\n" " AREA[\"World.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",9000]],\n" " EPOCH[invalid]]"), ParsingException); } // --------------------------------------------------------------------------- TEST(io, projstringformatter) { { auto fmt = PROJStringFormatter::create(); fmt->addStep("my_proj"); EXPECT_EQ(fmt->toString(), "+proj=my_proj"); } { auto fmt = PROJStringFormatter::create(); fmt->addStep("my_proj"); fmt->setCurrentStepInverted(true); EXPECT_EQ(fmt->toString(), "+proj=pipeline +step +inv +proj=my_proj"); } { auto fmt = PROJStringFormatter::create(); fmt->addStep("my_proj1"); fmt->addStep("my_proj2"); EXPECT_EQ(fmt->toString(), "+proj=pipeline +step +proj=my_proj1 +step +proj=my_proj2"); } { auto fmt = PROJStringFormatter::create(); fmt->addStep("my_proj1"); fmt->setCurrentStepInverted(true); fmt->addStep("my_proj2"); EXPECT_EQ( fmt->toString(), "+proj=pipeline +step +inv +proj=my_proj1 +step +proj=my_proj2"); } { auto fmt = PROJStringFormatter::create(); fmt->startInversion(); fmt->addStep("my_proj1"); fmt->setCurrentStepInverted(true); fmt->addStep("my_proj2"); fmt->stopInversion(); EXPECT_EQ( fmt->toString(), "+proj=pipeline +step +inv +proj=my_proj2 +step +proj=my_proj1"); } { auto fmt = PROJStringFormatter::create(); fmt->startInversion(); fmt->addStep("my_proj1"); fmt->setCurrentStepInverted(true); fmt->startInversion(); fmt->addStep("my_proj2"); fmt->stopInversion(); fmt->stopInversion(); EXPECT_EQ(fmt->toString(), "+proj=pipeline +step +proj=my_proj2 +step +proj=my_proj1"); } } // --------------------------------------------------------------------------- TEST(io, projstringformatter_helmert_3_param_noop) { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 0); fmt->addParam("y", 0); fmt->addParam("z", 0); EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_helmert_7_param_noop) { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 0); fmt->addParam("y", 0); fmt->addParam("z", 0); fmt->addParam("rx", 0); fmt->addParam("ry", 0); fmt->addParam("rz", 0); fmt->addParam("s", 0); fmt->addParam("convention", "position_vector"); EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_merge_consecutive_helmert_3_param) { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addStep("helmert"); fmt->addParam("x", -1); fmt->addParam("y", -2); fmt->addParam("z", -3); EXPECT_EQ(fmt->toString(), "+proj=helmert +x=9 +y=18 +z=27"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_merge_consecutive_helmert_3_param_noop) { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addStep("helmert"); fmt->addParam("x", -10); fmt->addParam("y", -20); fmt->addParam("z", -30); EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_merge_inverted_helmert_with_opposite_conventions) { { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", 1); fmt->addParam("ry", 2); fmt->addParam("rz", 3); fmt->addParam("s", 4); fmt->addParam("convention", "position_vector"); fmt->addStep("helmert"); fmt->setCurrentStepInverted(true); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", -1); fmt->addParam("ry", -2); fmt->addParam("rz", -3); fmt->addParam("s", 4); fmt->addParam("convention", "coordinate_frame"); EXPECT_EQ(fmt->toString(), "+proj=noop"); } { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->setCurrentStepInverted(true); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", 1); fmt->addParam("ry", 2); fmt->addParam("rz", 3); fmt->addParam("s", 4); fmt->addParam("convention", "coordinate_frame"); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", -1); fmt->addParam("ry", -2); fmt->addParam("rz", -3); fmt->addParam("s", 4); fmt->addParam("convention", "position_vector"); EXPECT_EQ(fmt->toString(), "+proj=noop"); } // Cannot be optimized { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", 1); fmt->addParam("ry", 2); fmt->addParam("rz", 3); fmt->addParam("s", 4); fmt->addParam("convention", "position_vector"); fmt->addStep("helmert"); // fmt->setCurrentStepInverted(true); <== CAUSE fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", -1); fmt->addParam("ry", -2); fmt->addParam("rz", -3); fmt->addParam("s", 4); fmt->addParam("convention", "coordinate_frame"); EXPECT_TRUE(fmt->toString() != "+proj=noop"); } // Cannot be optimized { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", 1); fmt->addParam("ry", 2); fmt->addParam("rz", 3); fmt->addParam("s", 4); fmt->addParam("convention", "position_vector"); fmt->addStep("helmert"); fmt->setCurrentStepInverted(true); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", -1); fmt->addParam("ry", -2); fmt->addParam("rz", -3); fmt->addParam("s", 4); fmt->addParam("convention", "position_vector"); // <== CAUSE EXPECT_TRUE(fmt->toString() != "+proj=noop"); } // Cannot be optimized { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", 1); fmt->addParam("ry", 2); fmt->addParam("rz", 3); fmt->addParam("s", 4); fmt->addParam("convention", "position_vector"); fmt->addStep("helmert"); fmt->setCurrentStepInverted(true); fmt->addParam("x", -10); // <== CAUSE fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", -1); fmt->addParam("ry", -2); fmt->addParam("rz", -3); fmt->addParam("s", 4); fmt->addParam("convention", "coordinate_frame"); EXPECT_TRUE(fmt->toString() != "+proj=noop"); } // Cannot be optimized { auto fmt = PROJStringFormatter::create(); fmt->addStep("helmert"); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", 1); fmt->addParam("ry", 3); fmt->addParam("rz", 2); fmt->addParam("s", 4); fmt->addParam("convention", "position_vector"); fmt->addStep("helmert"); fmt->setCurrentStepInverted(true); fmt->addParam("x", 10); fmt->addParam("y", 20); fmt->addParam("z", 30); fmt->addParam("rx", 1); // <== CAUSE fmt->addParam("ry", -2); fmt->addParam("rz", -3); fmt->addParam("s", 4); fmt->addParam("convention", "coordinate_frame"); EXPECT_TRUE(fmt->toString() != "+proj=noop"); } } // --------------------------------------------------------------------------- TEST(io, projstringformatter_cart_grs80_wgs84) { auto fmt = PROJStringFormatter::create(); fmt->addStep("cart"); fmt->addParam("ellps", "WGS84"); fmt->addStep("cart"); fmt->setCurrentStepInverted(true); fmt->addParam("ellps", "GRS80"); EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_axisswap_unitconvert_axisswap) { auto fmt = PROJStringFormatter::create(); fmt->addStep("axisswap"); fmt->addParam("order", "2,1"); fmt->addStep("unitconvert"); fmt->addParam("xy_in", "rad"); fmt->addParam("xy_out", "deg"); fmt->addStep("axisswap"); fmt->addParam("order", "2,1"); EXPECT_EQ(fmt->toString(), "+proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_axisswap_one_minus_two_inv) { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline +step +inv +proj=axisswap +order=1,-2"); EXPECT_EQ(fmt->toString(), "+proj=axisswap +order=1,-2"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_axisswap_two_one_followed_two_minus_one) { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString("+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=axisswap +order=2,-1"); EXPECT_EQ(fmt->toString(), "+proj=axisswap +order=1,-2"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_axisswap_minus_two_one_followed_two_one) { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString("+proj=pipeline " "+step +proj=axisswap +order=-2,1 " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(fmt->toString(), "+proj=axisswap +order=1,-2"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_axisswap_two_minus_one_followed_minus_two_one) { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString("+proj=pipeline " "+step +proj=axisswap +order=2,-1 " "+step +proj=axisswap +order=-2,1"); EXPECT_EQ(fmt->toString(), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_axisswap_two_minus_one_followed_one_minus_two) { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString("+proj=pipeline " "+step +proj=axisswap +order=2,-1 " "+step +proj=axisswap +order=1,-2"); EXPECT_EQ(fmt->toString(), "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(io, projstringformatter_unitconvert) { // +step +proj=unitconvert +xy_in=X1 +xy_out=X2 // +step +proj=unitconvert +xy_in=X2 +z_in=Z1 +xy_out=X1 +z_out=Z2 // ==> // +step +proj=unitconvert +z_in=Z1 +z_out=Z2 { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=ft"); EXPECT_EQ(fmt->toString(), "+proj=unitconvert +z_in=m +z_out=ft"); } // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z2 // +step +proj=unitconvert +z_in=Z2 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 // +z_out=Z3 { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=ft " "+step +proj=unitconvert +z_in=ft +z_out=us-ft"); EXPECT_EQ( fmt->toString(), "+proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=us-ft"); } // +step +proj=unitconvert +z_in=Z1 +z_out=Z2 // +step +proj=unitconvert +xy_in=X1 +z_in=Z2 +xy_out=X2 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 // +z_out=Z3 { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString("+proj=pipeline " "+step +proj=unitconvert +z_in=ft +z_out=m " "+step +proj=unitconvert +xy_in=deg +z_in=m " "+xy_out=rad +z_out=us-ft "); EXPECT_EQ( fmt->toString(), "+proj=unitconvert +xy_in=deg +z_in=ft +xy_out=rad +z_out=us-ft"); } // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z2 // +step +proj=unitconvert +xy_in=X2 +xy_out=X3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X3 // +z_out=Z2 { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=ft " "+step +proj=unitconvert +xy_in=rad +xy_out=grad"); EXPECT_EQ( fmt->toString(), "+proj=unitconvert +xy_in=deg +z_in=m +xy_out=grad +z_out=ft"); } // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z2 // +step +proj=unitconvert +xy_in=X2 +z_in=Z3 +xy_out=X3 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X3 +z_out=Z2 { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +z_in=ft +xy_out=rad " "+z_out=us-ft " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=grad +z_out=m"); EXPECT_EQ( fmt->toString(), "+proj=unitconvert +xy_in=deg +z_in=ft +xy_out=grad +z_out=us-ft"); } // +step +proj=unitconvert +xy_in=X1 +z_in=Z1 +xy_out=X2 +z_out=Z1 // +step +proj=unitconvert +xy_in=X2 +z_in=Z2 +xy_out=X3 +z_out=Z3 // ==> +step +proj=unitconvert +xy_in=X1 +z_in=Z2 +xy_out=X3 +z_out=Z3 { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad " "+z_out=m " "+step +proj=unitconvert +xy_in=rad +z_in=ft +xy_out=grad " "+z_out=us-ft"); EXPECT_EQ( fmt->toString(), "+proj=unitconvert +xy_in=deg +z_in=ft +xy_out=grad +z_out=us-ft"); } } // --------------------------------------------------------------------------- TEST(io, projstringformatter_unmodified) { const char *const strs[] = {"+proj=pipeline " "+step +proj=axisswap +order=2,-1 " "+step +proj=axisswap +order=2,1", "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=axisswap +order=-2,1", "+proj=pipeline " "+step +inv +proj=axisswap +order=-2,1 " "+step +proj=axisswap +order=2,1"}; for (const char *str : strs) { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString(str); EXPECT_EQ(fmt->toString(), str); } } // --------------------------------------------------------------------------- TEST(io, projstringformatter_optim_hgridshift_vgridshift_hgridshift_inv) { // Nominal case { auto fmt = PROJStringFormatter::create(); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo"); fmt->addStep("vgridshift"); fmt->addParam("grids", "bar"); fmt->startInversion(); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo"); fmt->stopInversion(); EXPECT_EQ(fmt->toString(), "+proj=pipeline " "+step +proj=push +v_1 +v_2 " "+step +proj=hgridshift +grids=foo +omit_inv " "+step +proj=vgridshift +grids=bar " "+step +inv +proj=hgridshift +grids=foo +omit_fwd " "+step +proj=pop +v_1 +v_2"); } // Test omit_fwd->omit_inv when inversing the pipeline { auto fmt = PROJStringFormatter::create(); fmt->startInversion(); fmt->ingestPROJString("+proj=hgridshift +grids=foo +omit_fwd"); fmt->stopInversion(); EXPECT_EQ(fmt->toString(), "+proj=pipeline " "+step +inv +proj=hgridshift +grids=foo +omit_inv"); } // Test omit_inv->omit_fwd when inversing the pipeline { auto fmt = PROJStringFormatter::create(); fmt->startInversion(); fmt->ingestPROJString("+proj=hgridshift +grids=foo +omit_inv"); fmt->stopInversion(); EXPECT_EQ(fmt->toString(), "+proj=pipeline " "+step +inv +proj=hgridshift +grids=foo +omit_fwd"); } // Variant with first hgridshift inverted, and second forward { auto fmt = PROJStringFormatter::create(); fmt->startInversion(); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo"); fmt->stopInversion(); fmt->addStep("vgridshift"); fmt->addParam("grids", "bar"); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo"); EXPECT_EQ(fmt->toString(), "+proj=pipeline " "+step +proj=push +v_1 +v_2 " "+step +inv +proj=hgridshift +grids=foo +omit_inv " "+step +proj=vgridshift +grids=bar " "+step +proj=hgridshift +grids=foo +omit_fwd " "+step +proj=pop +v_1 +v_2"); } // Do not apply ! not same grid name { auto fmt = PROJStringFormatter::create(); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo"); fmt->addStep("vgridshift"); fmt->addParam("grids", "bar"); fmt->startInversion(); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo2"); fmt->stopInversion(); EXPECT_EQ(fmt->toString(), "+proj=pipeline " "+step +proj=hgridshift +grids=foo " "+step +proj=vgridshift +grids=bar " "+step +inv +proj=hgridshift +grids=foo2"); } // Do not apply ! missing inversion { auto fmt = PROJStringFormatter::create(); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo"); fmt->addStep("vgridshift"); fmt->addParam("grids", "bar"); fmt->addStep("hgridshift"); fmt->addParam("grids", "foo"); EXPECT_EQ(fmt->toString(), "+proj=pipeline " "+step +proj=hgridshift +grids=foo " "+step +proj=vgridshift +grids=bar " "+step +proj=hgridshift +grids=foo"); } } // --------------------------------------------------------------------------- TEST(io, projstringformatter_optim_as_uc_vgridshift_uc_as_push_as_uc) { // Nominal case { auto fmt = PROJStringFormatter::create(); fmt->addStep("axisswap"); fmt->addParam("order", "2,1"); fmt->addStep("unitconvert"); fmt->addParam("xy_in", "deg"); fmt->addParam("xy_out", "rad"); fmt->addStep("vgridshift"); fmt->addParam("grids", "foo"); fmt->addStep("unitconvert"); fmt->addParam("xy_in", "rad"); fmt->addParam("xy_out", "deg"); fmt->addStep("axisswap"); fmt->addParam("order", "2,1"); fmt->addStep("push"); fmt->addParam("v_1"); fmt->addParam("v_2"); fmt->addStep("axisswap"); fmt->addParam("order", "2,1"); fmt->addStep("unitconvert"); fmt->addParam("xy_in", "deg"); fmt->addParam("xy_out", "rad"); EXPECT_EQ(fmt->toString(), "+proj=pipeline " "+step +proj=push +v_1 +v_2 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=foo"); } } // --------------------------------------------------------------------------- TEST(io, projstringformatter_krovak_to_krovak_east_north) { // Working case { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +inv +proj=krovak +axis=swu +lat_0=49.5 " "+lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+step +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel"); EXPECT_EQ(fmt->toString(), "+proj=axisswap +order=-2,-1"); } // Missing parameter { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +inv +proj=krovak +axis=swu +lat_0=49.5 " "+lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+step +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 "); // Not equal EXPECT_NE(fmt->toString(), "+proj=axisswap +order=-2,-1"); } // Different parameter values { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +inv +proj=krovak +axis=swu +lat_0=49.5 " "+lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+step +proj=krovak +lat_0=FOO +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel"); // Not equal EXPECT_NE(fmt->toString(), "+proj=axisswap +order=-2,-1"); } } // --------------------------------------------------------------------------- TEST(io, projstringformatter_krovak_east_north_to_krovak) { // Working case { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +inv +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+step +proj=krovak +axis=swu +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel"); EXPECT_EQ(fmt->toString(), "+proj=axisswap +order=-2,-1"); } // Missing parameter { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +inv +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+step +proj=krovak +axis=swu +lat_0=FOO +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0"); // Not equal EXPECT_NE(fmt->toString(), "+proj=axisswap +order=-2,-1"); } // Different parameter values { auto fmt = PROJStringFormatter::create(); fmt->ingestPROJString( "+proj=pipeline " "+step +inv +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel " "+step +proj=krovak +axis=swu +lat_0=FOO +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel"); // Not equal EXPECT_NE(fmt->toString(), "+proj=axisswap +order=-2,-1"); } } // --------------------------------------------------------------------------- TEST(io, projparse_longlat) { auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"; { auto obj = PROJStringParser().createFromPROJString("+proj=longlat +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), expected); } { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), expected); } } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_datum_NAD83) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +datum=NAD83 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEODCRS[\"unknown\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6269]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_datum_NAD27) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +datum=NAD27 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEODCRS[\"unknown\",\n" " DATUM[\"North American Datum 1927\",\n" " ELLIPSOID[\"Clarke 1866\",6378206.4,294.978698213898,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6267]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_datum_other) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +datum=carthage +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); crs->exportToWKT(f.get()); EXPECT_EQ(f->toString(), "GEODCRS[\"unknown\",\n" " DATUM[\"Carthage\",\n" " ELLIPSOID[\"Clarke 1880 (IGN)\",6378249.2,293.4660213,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6223]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_ellps_WGS84) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"Unknown based on WGS 84 ellipsoid\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_ellps_GRS80) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"Unknown based on GRS 1980 ellipsoid\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_b) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=2 +b=1.5 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"unknown\",\n" " ELLIPSOID[\"unknown\",2,4,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Reference meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); EXPECT_EQ(crs->ellipsoid()->celestialBody(), "Non-Earth body"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_rf_WGS84) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=6378137 +rf=298.257223563 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"Unknown based on WGS 84 ellipsoid\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); EXPECT_EQ(crs->ellipsoid()->celestialBody(), Ellipsoid::EARTH); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_rf) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=2 +rf=4 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"unknown\",\n" " ELLIPSOID[\"unknown\",2,4,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Reference meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_f_zero) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=2 +f=0 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"unknown\",\n" " ELLIPSOID[\"unknown\",2,0,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Reference meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_f_non_zero) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=2 +f=0.5 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); auto rf = crs->ellipsoid()->computedInverseFlattening(); EXPECT_EQ(rf, 2) << rf; } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_e) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=2 +e=0.5 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); auto rf = crs->ellipsoid()->computedInverseFlattening(); EXPECT_NEAR(rf, 7.46410161513775, 1e-14) << rf; } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_es) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=2 +es=0.5 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); auto rf = crs->ellipsoid()->computedInverseFlattening(); EXPECT_NEAR(rf, 3.4142135623730958, 1e-14) << rf; } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_R) { auto obj = PROJStringParser().createFromPROJString("+proj=longlat +R=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->ellipsoid()->isSphere()); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a) { auto obj = PROJStringParser().createFromPROJString("+proj=longlat +a=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->ellipsoid()->isSphere()); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_a_override_ellps) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +a=2 +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(!crs->ellipsoid()->isSphere()); EXPECT_EQ(crs->ellipsoid()->semiMajorAxis().getSIValue(), 2); EXPECT_EQ(crs->ellipsoid()->computedInverseFlattening(), 298.25722356300003) << crs->ellipsoid()->computedInverseFlattening(); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_pm_paris) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +pm=paris +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"Unknown based on WGS 84 ellipsoid\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Paris\",2.5969213,\n" " ANGLEUNIT[\"grad\",0.015707963267949]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_pm_ferro) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=bessel +pm=ferro +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"Unknown based on Bessel 1841 ellipsoid\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Ferro\",-17.6666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_pm_numeric) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +pm=2.5 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "GEODCRS[\"unknown\",\n" " DATUM[\"Unknown based on WGS 84 ellipsoid\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"unknown\",2.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_pm_overriding_datum) { // It is arguable that we allow the prime meridian of a datum defined by // its name to be overridden, but this is found at least in a regression // test // of GDAL. So let's keep the ellipsoid part of the datum in that case and // use the specified prime meridian. auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +pm=ferro +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->datum()->nameStr(), "Unknown based on WGS 84 ellipsoid"); EXPECT_EQ(crs->datum()->primeMeridian()->nameStr(), "Ferro"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_complex) { std::string input = "+step +proj=longlat +ellps=clrk80ign " "+pm=paris +step +proj=unitconvert +xy_in=rad +xy_out=grad +step " "+proj=axisswap +order=2,1"; auto obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline " + input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad " + input); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_towgs84_3_terms) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Geocentric translations") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"X-axis translation\",1.2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Y-axis translation\",2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Z-axis translation\",3") != std::string::npos) << wkt; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,0,0,0,0 +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_towgs84_7_terms) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,4,5,6,7 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Position Vector transformation") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"X-axis translation\",1.2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Y-axis translation\",2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Z-axis translation\",3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Scale difference\",1.000007") != std::string::npos) << wkt; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +ellps=GRS80 +towgs84=1.2,2,3,4,5,6,7 +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_towgs84_7_terms_autocorrect) { // Auto-correct wrong sign for rotation terms // Cf https://github.com/OSGeo/PROJ/issues/4170 auto dbContext = DatabaseContext::create(); auto obj = createFromUserInput( "+proj=lcc +lat_0=90 +lon_0=4.36748666666667 +lat_1=51.1666672333333 " "+lat_2=49.8333339 +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 +type=crs", dbContext, true); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=lcc +lat_0=90 +lon_0=4.36748666666667 +lat_1=51.1666672333333 " "+lat_2=49.8333339 +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 +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_nadgrids) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +nadgrids=foo.gsb +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"NTv2\"") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETERFILE[\"Latitude and longitude difference " "file\",\"foo.gsb\"]") != std::string::npos) << wkt; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +ellps=GRS80 +nadgrids=foo.gsb +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_nadgrids_towgs84_ignored) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +towgs84=1,2,3 +nadgrids=foo.gsb " "+type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(dynamic_cast(crs->baseCRS().get()) != nullptr); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_geoidgrids) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("ABRIDGEDTRANSFORMATION[\"unknown to WGS 84 " "ellipsoidal height\"") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETERFILE[\"Geoid (height correction) model " "file\",\"foo.gtx\"]") != std::string::npos) << wkt; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +geoid_crs=WGS84 " "+vunits=m +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_geoidgrids_vunits) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +geoidgrids=foo.gtx +vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("AXIS[\"gravity-related height " "(H)\",up,LENGTHUNIT[\"foot\",0.3048]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_vunits) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("AXIS[\"ellipsoidal height " "(h)\",up,ORDER[3],LENGTHUNIT[\"foot\",0.3048]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_vunits) { auto obj = PROJStringParser().createFromPROJString("+vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+vunits=ft +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_vto_meter) { auto obj = PROJStringParser().createFromPROJString("+vto_meter=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+vto_meter=2 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_axis_enu) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +axis=enu +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("AXIS[\"longitude\",east,ORDER[1]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("AXIS[\"latitude\",north,ORDER[2]") != std::string::npos) << wkt; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_axis_neu) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +axis=neu +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("AXIS[\"latitude\",north,ORDER[1]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("AXIS[\"longitude\",east,ORDER[2]") != std::string::npos) << wkt; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_axis_swu) { auto obj = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +axis=swu +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("AXIS[\"latitude\",south,ORDER[1]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("AXIS[\"longitude\",west,ORDER[2]") != std::string::npos) << wkt; auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=axisswap +order=-2,-1"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_unitconvert_deg) { auto obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=longlat +ellps=GRS80 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_unitconvert_grad) { auto obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=longlat +ellps=GRS80 +step " "+proj=unitconvert +xy_in=rad +xy_out=grad"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step " "+proj=unitconvert +xy_in=rad +xy_out=grad"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_unitconvert_rad) { auto obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=longlat +ellps=GRS80 +step " "+proj=unitconvert +xy_in=rad +xy_out=rad"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_axisswap) { for (auto order1 : {"1", "-1", "2", "-2"}) { for (auto order2 : {"1", "-1", "2", "-2"}) { if (std::abs(atoi(order1) * atoi(order2)) == 2 && !(atoi(order1) == 1 && atoi(order2) == 2)) { auto str = "+type=crs +proj=pipeline +step +proj=longlat +ellps=GRS80 " "+step +proj=axisswap +order=" + std::string(order1) + "," + order2; auto obj = PROJStringParser().createFromPROJString(str); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), (atoi(order1) == 2 && atoi(order2) == 1) ? "+proj=noop" : (atoi(order1) == 2 && atoi(order2) == -1) ? "+proj=axisswap +order=1,-2" : "+proj=pipeline +step +proj=axisswap " "+order=2,1 " "+step +proj=axisswap +order=" + std::string(order1) + "," + order2); } } } } // --------------------------------------------------------------------------- TEST(io, projparse_tmerc) { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +x_0=1 +lat_0=1 +k_0=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "PROJCRS[\"unknown\",\n" " BASEGEODCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",2,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",1,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]"; EXPECT_EQ(f->toString(), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_tmerc_south_oriented) { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +axis=wsu +x_0=1 +lat_0=1 +k_0=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); crs->exportToWKT(f.get()); auto expected = "PROJCRS[\"unknown\",\n" " BASEGEODCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Transverse Mercator (South Orientated)\",\n" " ID[\"EPSG\",9808]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",2,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",1,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"westing\",west,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"southing\",south,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]"; EXPECT_EQ(f->toString(), expected); obj = PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=tmerc +x_0=1 +lat_0=1 +k_0=2 " "+step " "+proj=axisswap +order=-1,-2"); crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Transverse Mercator (South Orientated)"); } // --------------------------------------------------------------------------- TEST(io, projparse_lcc_as_lcc1sp) { auto obj = PROJStringParser().createFromPROJString( "+proj=lcc +lat_0=45 +lat_1=45 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("Lambert Conic Conformal (1SP)") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_lcc_as_lcc1sp_variant_b) { auto obj = PROJStringParser().createFromPROJString( "+proj=lcc +lat_0=45 +lat_1=46 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("Lambert Conic Conformal (1SP variant B)") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_lcc_as_lcc2sp) { auto obj = PROJStringParser().createFromPROJString( "+proj=lcc +lat_0=45 +lat_1=46 +lat_2=44 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("Lambert Conic Conformal (2SP)") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_lcc_as_lcc2sp_michigan) { auto obj = PROJStringParser().createFromPROJString( "+proj=lcc +lat_0=45 +lat_1=46 +lat_2=44 +k_0=1.02 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("Lambert Conic Conformal (2SP Michigan)") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_aeqd_guam) { auto obj = PROJStringParser().createFromPROJString("+proj=aeqd +guam +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("Guam Projection") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_cea_spherical) { const std::string input( "+proj=cea +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +R=6371228 +units=m " "+no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); auto crs2 = ProjectedCRS::create( PropertyMap(), crs->baseCRS(), Conversion::createLambertCylindricalEqualArea( PropertyMap(), Angle(0), Angle(0), Length(0), Length(0)), crs->coordinateSystem()); EXPECT_EQ(crs2->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA); EXPECT_TRUE( crs->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs2->isEquivalentTo(crs.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(io, projparse_cea_spherical_on_ellipsoid) { std::string input("+proj=cea +R_A +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 " "+ellps=WGS84 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_cea_ellipsoidal) { auto obj = PROJStringParser().createFromPROJString( "+proj=cea +ellps=GRS80 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find( "METHOD[\"Lambert Cylindrical Equal Area\",ID[\"EPSG\",9835]]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_cea_ellipsoidal_with_k_0) { auto obj = PROJStringParser().createFromPROJString( "+proj=cea +ellps=GRS80 +k_0=0.99 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find("PARAMETER[\"Latitude of 1st standard parallel\",8.1365") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_merc_spherical_on_ellipsoid) { std::string input("+proj=merc +R_C +lat_0=1 +lon_0=2 +x_0=3 +y_0=4 " "+ellps=WGS84 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_MERCATOR_SPHERICAL); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_geos_sweep_x) { auto obj = PROJStringParser().createFromPROJString( "+proj=geos +sweep=x +h=1 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("Geostationary Satellite (Sweep X)") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_geos_sweep_y) { auto obj = PROJStringParser().createFromPROJString("+proj=geos +h=1 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("Geostationary Satellite (Sweep Y)") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_omerc_nouoff) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +no_uoff +alpha=2 +gamma=3 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Hotine Oblique Mercator (variant " "A)\",ID[\"EPSG\",9812]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Azimuth at projection centre\",2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Angle from Rectified to Skew Grid\",3") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_omerc_tpno) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +lat_1=1 +lat_2=2 +lon_1=3 +lon_2=4 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find( "METHOD[\"Hotine Oblique Mercator Two Point Natural Origin\"]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_omerc_variant_b) { auto obj = PROJStringParser().createFromPROJString( "+proj=omerc +alpha=2 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Hotine Oblique Mercator (variant " "B)\",ID[\"EPSG\",9815]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Angle from Rectified to Skew Grid\",2") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_somerc) { auto obj = PROJStringParser().createFromPROJString( "+proj=somerc +lat_0=1 +lon_0=2 +k_0=3 +x_0=4 +y_0=5 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Hotine Oblique Mercator (variant " "B)\",ID[\"EPSG\",9815]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Latitude of projection centre\",1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Longitude of projection centre\",2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Scale factor at projection centre\",3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Azimuth at projection centre\",90") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Angle from Rectified to Skew Grid\",90") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Easting at projection centre\",4") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Northing at projection centre\",5") != std::string::npos) << wkt; auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(wkt1.find("EXTENSION") == std::string::npos) << wkt1; } // --------------------------------------------------------------------------- TEST(io, projparse_krovak) { auto obj = PROJStringParser().createFromPROJString("+proj=krovak +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find("METHOD[\"Krovak (North Orientated)\",ID[\"EPSG\",1041]]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_krovak_axis_swu) { auto obj = PROJStringParser().createFromPROJString( "+proj=krovak +axis=swu +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Krovak\",ID[\"EPSG\",9819]]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_krovak_czech) { auto obj = PROJStringParser().createFromPROJString( "+proj=krovak +czech +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=krovak +czech +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 " "+ellps=bessel +units=m +no_defs +type=crs"); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Krovak\",ID[\"EPSG\",9819]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find(",AXIS[\"westing\",west,ORDER[1]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find(",AXIS[\"southing\",south,ORDER[2]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_krovak_modified) { auto obj = PROJStringParser().createFromPROJString("+proj=mod_krovak +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Krovak Modified (North " "Orientated)\",ID[\"EPSG\",1043]]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_krovak_modified_axis_swu) { auto obj = PROJStringParser().createFromPROJString( "+proj=mod_krovak +axis=swu +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Krovak Modified\",ID[\"EPSG\",1042]]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_krovak_modified_czech) { auto obj = PROJStringParser().createFromPROJString( "+proj=mod_krovak +czech +x_0=5000000 +y_0=5000000 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=mod_krovak +czech +lat_0=49.5 +lon_0=24.8333333333333 " "+alpha=30.2881397527778 +k=0.9999 +x_0=5000000 +y_0=5000000 " "+ellps=bessel +units=m +no_defs +type=crs"); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Krovak Modified\",ID[\"EPSG\",1042]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find(",AXIS[\"westing\",west,ORDER[1]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find(",AXIS[\"southing\",south,ORDER[2]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_etmerc) { auto obj = PROJStringParser().createFromPROJString("+proj=etmerc +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto wkt2 = crs->exportToWKT( &WKTFormatter::create()->simulCurNodeHasId().setMultiLine(false)); EXPECT_TRUE( wkt2.find("METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]]") != std::string::npos) << wkt2; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=tmerc +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 " "+datum=WGS84 +units=m +no_defs +type=crs"); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(wkt1.find("EXTENSION[\"PROJ4\"") == std::string::npos) << wkt1; } // --------------------------------------------------------------------------- TEST(io, projparse_tmerc_approx) { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +approx +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto wkt2 = crs->exportToWKT( &WKTFormatter::create()->simulCurNodeHasId().setMultiLine(false)); EXPECT_TRUE( wkt2.find("METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]]") != std::string::npos) << wkt2; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=tmerc +approx +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 " "+datum=WGS84 +units=m +no_defs +type=crs"); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(wkt1.find("EXTENSION[\"PROJ4\",\"+proj=tmerc +approx +lat_0=0 " "+lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m " "+no_defs\"]") != std::string::npos) << wkt1; } // --------------------------------------------------------------------------- TEST(io, projparse_merc_variant_B) { auto obj = PROJStringParser().createFromPROJString( "+proj=merc +lat_ts=1 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find("METHOD[\"Mercator (variant B)\",ID[\"EPSG\",9805]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Latitude of 1st standard parallel\",1") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_merc_google_mercator) { auto projString = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 " "+k=1 +units=m +nadgrids=@null +no_defs +type=crs"; auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Popular Visualisation Pseudo " "Mercator\",ID[\"EPSG\",1024]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("DATUM[\"World Geodetic System 1984\"") != std::string::npos) << wkt; EXPECT_EQ( replaceAll(crs->exportToPROJString(PROJStringFormatter::create().get()), " +wktext", ""), projString); } // --------------------------------------------------------------------------- TEST(io, projparse_merc_google_mercator_non_metre_unit) { auto projString = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 " "+k=1 +units=ft +nadgrids=@null +no_defs +type=crs"; auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / Pseudo-Mercator (unit ft)"); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), "Popular Visualisation Pseudo Mercator"); EXPECT_EQ( replaceAll(crs->exportToPROJString(PROJStringFormatter::create().get()), " +wktext", ""), projString); auto wkt = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); auto expected_wkt = "PROJCRS[\"WGS 84 / Pseudo-Mercator (unit ft)\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Popular Visualisation Pseudo Mercator\",\n" " ID[\"EPSG\",1024]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"foot\",0.3048,\n" " ID[\"EPSG\",9002]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"foot\",0.3048,\n" " ID[\"EPSG\",9002]]]]"; EXPECT_EQ(wkt, expected_wkt); auto objFromWkt = WKTParser().createFromWKT(wkt); auto crsFromWkt = nn_dynamic_pointer_cast(objFromWkt); ASSERT_TRUE(crsFromWkt != nullptr); EXPECT_TRUE(crs->isEquivalentTo(crsFromWkt.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(io, projparse_merc_not_quite_google_mercator) { auto projString = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=10 +x_0=0 +y_0=0 " "+k=1 +units=m +nadgrids=@null +no_defs +type=crs"; auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Popular Visualisation Pseudo " "Mercator\",ID[\"EPSG\",1024]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("DATUM[\"unknown using nadgrids=@null\",") != std::string::npos) << wkt; EXPECT_EQ( replaceAll(crs->exportToPROJString(PROJStringFormatter::create().get()), " +wktext", ""), projString); } // --------------------------------------------------------------------------- TEST(io, projparse_merc_stere_polar_variant_B) { auto obj = PROJStringParser().createFromPROJString( "+proj=stere +lat_0=90 +lat_ts=70 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find( "METHOD[\"Polar Stereographic (variant B)\",ID[\"EPSG\",9829]]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_merc_stere_polar_variant_A) { auto obj = PROJStringParser().createFromPROJString( "+proj=stere +lat_0=-90 +k=0.994 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find( "METHOD[\"Polar Stereographic (variant A)\",ID[\"EPSG\",9810]]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_merc_stere_polar_k_and_lat_ts) { auto obj = PROJStringParser().createFromPROJString( "+proj=stere +lat_0=90 +lat_ts=90 +k=1 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto wkt = crs->exportToWKT( &(WKTFormatter::create()->simulCurNodeHasId().setMultiLine(false))); EXPECT_TRUE( wkt.find( "METHOD[\"Polar Stereographic (variant B)\",ID[\"EPSG\",9829]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Latitude of standard parallel\",90") != std::string::npos) << wkt; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 " "+units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_merc_stere_polar_k_and_lat_ts_incompatible) { EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=stere +lat_0=90 +lat_ts=70 +k=0.994 +type=crs"), ParsingException); } // --------------------------------------------------------------------------- TEST(io, projparse_merc_stere) { auto obj = PROJStringParser().createFromPROJString( "+proj=stere +lat_0=30 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("METHOD[\"Stereographic\"]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_utm) { auto obj = PROJStringParser().createFromPROJString("+proj=utm +zone=1 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("CONVERSION[\"UTM zone 1N\",METHOD[\"Transverse " "Mercator\",ID[\"EPSG\",9807]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Longitude of natural origin\",-177,") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"False northing\",0,") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_utm_south) { auto obj = PROJStringParser().createFromPROJString( "+proj=utm +zone=1 +south +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("CONVERSION[\"UTM zone 1S\",METHOD[\"Transverse " "Mercator\",ID[\"EPSG\",9807]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Longitude of natural origin\",-177,") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"False northing\",10000000,") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_laea_north_pole) { auto obj = PROJStringParser().createFromPROJString( "+proj=laea +lat_0=90 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("AXIS[\"(E)\",south") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("AXIS[\"(N)\",south") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_laea_south_pole) { auto obj = PROJStringParser().createFromPROJString( "+proj=laea +lat_0=-90 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("AXIS[\"(E)\",north") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("AXIS[\"(N)\",north") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_laea_spherical) { auto obj = PROJStringParser().createFromPROJString( "+proj=laea +R=6371228 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL); auto crs2 = ProjectedCRS::create( PropertyMap(), crs->baseCRS(), Conversion::createLambertAzimuthalEqualArea( PropertyMap(), Angle(0), Angle(0), Length(0), Length(0)), crs->coordinateSystem()); EXPECT_EQ(crs2->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA); EXPECT_TRUE( crs->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs2->isEquivalentTo(crs.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(io, projparse_laea_ellipsoidal) { auto obj = PROJStringParser().createFromPROJString( "+proj=laea +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA); } // --------------------------------------------------------------------------- TEST(io, projparse_laea_spherical_on_ellipsoid) { std::string input("+proj=laea +R_A +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+ellps=WGS84 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_eqc_spherical) { auto obj = PROJStringParser().createFromPROJString( "+proj=eqc +R=6371228 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL); auto crs2 = ProjectedCRS::create( PropertyMap(), crs->baseCRS(), Conversion::createEquidistantCylindrical( PropertyMap(), Angle(0), Angle(0), Length(0), Length(0)), crs->coordinateSystem()); EXPECT_EQ(crs2->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL); EXPECT_TRUE( crs->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs2->isEquivalentTo(crs.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(io, projparse_eqc_ellipsoidal) { auto obj = PROJStringParser().createFromPROJString( "+proj=eqc +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL); } // --------------------------------------------------------------------------- TEST(io, projparse_non_earth_ellipsoid) { std::string input("+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +R=1 +units=m " "+no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_ortho_ellipsoidal) { std::string input("+proj=ortho +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+ellps=WGS84 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_ORTHOGRAPHIC); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_ortho_with_alpha) { std::string input("+proj=ortho +lat_0=0 +lon_0=0 +alpha=12 +k=1 +x_0=0 " "+y_0=0 +ellps=WGS84 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LOCAL_ORTHOGRAPHIC); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_ortho_with_scale) { std::string input("+proj=ortho +lat_0=0 +lon_0=0 +alpha=0 +k=0.9 +x_0=0 " "+y_0=0 +ellps=WGS84 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->getEPSGCode(), EPSG_CODE_METHOD_LOCAL_ORTHOGRAPHIC); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_ortho_spherical_on_ellipsoid) { std::string input("+proj=ortho +f=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+ellps=WGS84 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->method()->nameStr(), PROJ_WKT2_NAME_ORTHOGRAPHIC_SPHERICAL); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_ortho_spherical_on_sphere) { std::string input("+proj=ortho +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+R=6378137 +units=m +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_peirce_q_square) { std::string input("+proj=peirce_q +shape=square +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=peirce_q +shape=square +lat_0=90 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 " "+datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_peirce_q_diamond) { std::string input("+proj=peirce_q +shape=diamond +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=peirce_q +shape=diamond +lat_0=90 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 " "+datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_peirce_q_horizontal) { std::string input("+proj=peirce_q +shape=horizontal +datum=WGS84 +units=m " "+no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_peirce_q_invalid_lat_0) { std::string input("+proj=peirce_q +lat_0=0 +shape=square +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_THROW( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), FormattingException); } // --------------------------------------------------------------------------- TEST(io, projparse_peirce_q_invalid_k_0) { std::string input("+proj=peirce_q +k_0=0.5 +shape=square +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_THROW( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), FormattingException); } // --------------------------------------------------------------------------- TEST(io, projparse_axisswap_unitconvert_longlat_proj) { std::string input = "+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv +proj=longlat " "+ellps=clrk80ign +pm=paris +step +proj=lcc +lat_1=49.5 " "+lat_0=49.5 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 " "+ellps=clrk80ign +pm=paris"; auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=lcc " "+lat_1=49.5 +lat_0=49.5 +lon_0=0 +k_0=0.999877341 +x_0=600000 " "+y_0=200000 +ellps=clrk80ign +pm=paris"); } // --------------------------------------------------------------------------- TEST(io, projparse_axisswap_unitconvert_proj_axisswap) { std::string input = "+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=igh " "+lon_0=0 +x_0=0 +y_0=0 +ellps=GRS80 +step +proj=axisswap +order=2,1"; auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=igh " "+lon_0=0 +x_0=0 +y_0=0 +ellps=GRS80 +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(io, projparse_axisswap_unitconvert_proj_unitconvert) { std::string input = "+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=igh " "+lon_0=0 +x_0=0 +y_0=0 +ellps=GRS80 +step +proj=unitconvert +xy_in=m " "+xy_out=ft"; auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=igh " "+lon_0=0 +x_0=0 +y_0=0 +ellps=GRS80 +step +proj=unitconvert " "+xy_in=m +xy_out=ft"); } // --------------------------------------------------------------------------- TEST(io, projparse_axisswap_unitconvert_proj_unitconvert_numeric_axisswap) { std::string input = "+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=igh " "+lon_0=0 +x_0=0 +y_0=0 +ellps=GRS80 +step +proj=unitconvert +xy_in=m " "+xy_out=2.5 +step +proj=axisswap +order=-2,-1"; auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=igh " "+lon_0=0 +x_0=0 +y_0=0 +ellps=GRS80 +step +proj=unitconvert " "+xy_in=m +xy_out=2.5 +step +proj=axisswap " "+order=-2,-1"); } // --------------------------------------------------------------------------- TEST(io, projparse_projected_units) { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +x_0=0.304800609601219 +units=us-ft +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("PARAMETER[\"False easting\",1,LENGTHUNIT[\"US survey " "foot\",0.304800609601219]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("AXIS[\"(E)\",east,ORDER[1],LENGTHUNIT[\"US survey " "foot\",0.304800609601219]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_projected_to_meter_known) { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +to_meter=0.304800609601219 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE(wkt.find("PARAMETER[\"False easting\",0,LENGTHUNIT[\"US survey " "foot\",0.304800609601219]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("AXIS[\"(E)\",east,ORDER[1],LENGTHUNIT[\"US survey " "foot\",0.304800609601219]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_projected_to_meter_unknown) { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +to_meter=0.1234 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find( "PARAMETER[\"False easting\",0,LENGTHUNIT[\"unknown\",0.1234]") != std::string::npos) << wkt; EXPECT_TRUE( wkt.find("AXIS[\"(E)\",east,ORDER[1],LENGTHUNIT[\"unknown\",0.1234]") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(io, projparse_projected_vunits) { auto obj = PROJStringParser().createFromPROJString( "+proj=tmerc +vunits=ft +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto cs = crs->coordinateSystem(); ASSERT_EQ(cs->axisList().size(), 3U); EXPECT_EQ(cs->axisList()[2]->unit().name(), "foot"); } // --------------------------------------------------------------------------- TEST(io, projparse_projected_unknown) { auto obj = PROJStringParser().createFromPROJString( "+proj=mbt_s +unused_flag +lat_0=45 +lon_0=0 +k=1 +x_0=10 +y_0=0 " "+datum=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); { WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find("CONVERSION[\"unknown\",METHOD[\"PROJ mbt_s\"]," "PARAMETER[\"lat_0\",45,ANGLEUNIT[" "\"degree\",0.0174532925199433]],PARAMETER[\"lon_0\"," "0,ANGLEUNIT[\"degree\",0.0174532925199433]]," "PARAMETER[\"k\",1,SCALEUNIT[\"unity\",1]],PARAMETER[" "\"x_0\",10,LENGTHUNIT[\"metre\",1]],PARAMETER[\"y_0\"," "0,LENGTHUNIT[\"metre\",1]]]") != std::string::npos) << wkt; } std::string expected_wkt1 = "PROJCS[\"unknown\",GEOGCS[\"unknown\",DATUM[\"WGS_1984\",SPHEROID[" "\"WGS " "84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[" "\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\"," "\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\"," "\"9122\"]]]," "PROJECTION[\"custom_proj4\"],UNIT[\"metre\",1,AUTHORITY[\"EPSG\"," "\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],EXTENSION[" "\"PROJ4\",\"+proj=mbt_s +lat_0=45 " "+lon_0=0 +k=1 +x_0=10 +y_0=0 +datum=WGS84\"]]"; { WKTFormatterNNPtr f( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL)); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_EQ(wkt, expected_wkt1); } EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=mbt_s +lat_0=45 +lon_0=0 +k=1 +x_0=10 " "+y_0=0 +datum=WGS84 +type=crs"); { auto obj2 = WKTParser().createFromWKT(expected_wkt1); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs2->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find("CONVERSION[\"unknown\",METHOD[\"PROJ mbt_s\"]," "PARAMETER[\"lat_0\",45,ANGLEUNIT[" "\"degree\",0.0174532925199433]],PARAMETER[\"lon_0\"," "0,ANGLEUNIT[\"degree\",0.0174532925199433]]," "PARAMETER[\"k\",1,SCALEUNIT[\"unity\",1]],PARAMETER[" "\"x_0\",10,LENGTHUNIT[\"metre\",1]],PARAMETER[\"y_0\"," "0,LENGTHUNIT[\"metre\",1]]]") != std::string::npos) << wkt; } } // --------------------------------------------------------------------------- TEST(io, projparse_geocent) { auto obj = PROJStringParser().createFromPROJString( "+proj=geocent +ellps=WGS84 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_EQ(wkt, "GEODCRS[\"unknown\",DATUM[\"Unknown based on WGS 84 " "ellipsoid\",ELLIPSOID[\"WGS " "84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1]]]," "PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0." "0174532925199433]],CS[Cartesian,3],AXIS[\"(X)\"," "geocentricX,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"(Y)\"," "geocentricY,ORDER[2],LENGTHUNIT[\"metre\",1]],AXIS[\"(Z)\"," "geocentricZ,ORDER[3],LENGTHUNIT[\"metre\",1]]]"); } // --------------------------------------------------------------------------- TEST(io, projparse_geocent_towgs84) { auto obj = PROJStringParser().createFromPROJString( "+proj=geocent +ellps=WGS84 +towgs84=1,2,3 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); WKTFormatterNNPtr f(WKTFormatter::create()); f->simulCurNodeHasId(); f->setMultiLine(false); crs->exportToWKT(f.get()); auto wkt = f->toString(); EXPECT_TRUE( wkt.find("METHOD[\"Geocentric translations (geocentric domain)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"X-axis translation\",1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Y-axis translation\",2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("PARAMETER[\"Z-axis translation\",3") != std::string::npos) << wkt; EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=geocent +ellps=WGS84 +towgs84=1,2,3,0,0,0,0 +units=m +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_cart_unit) { std::string input( "+proj=pipeline +step +proj=cart +ellps=WGS84 +step " "+proj=unitconvert +xy_in=m +z_in=m +xy_out=km +z_out=km"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=m +z_in=m +xy_out=km +z_out=km"); } // --------------------------------------------------------------------------- TEST(io, projparse_cart_unit_numeric) { std::string input( "+proj=pipeline +step +proj=cart +ellps=WGS84 +step " "+proj=unitconvert +xy_in=m +z_in=m +xy_out=500 +z_out=500"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=m +z_in=m +xy_out=500 +z_out=500"); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_wktext) { std::string input("+proj=longlat +foo +wktext +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +datum=WGS84 +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_geocent_wktext) { std::string input("+proj=geocent +foo +wktext +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=geocent +datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_geoc) { std::string input("+proj=longlat +geoc +datum=WGS84 +no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->isSphericalPlanetocentric()); #if 1 EXPECT_THROW( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), FormattingException); #else EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), input); #endif } // --------------------------------------------------------------------------- TEST(io, projparse_topocentric) { auto obj = PROJStringParser().createFromPROJString( "+proj=topocentric +datum=WGS84 +X_0=-3982059.42 +Y_0=3331314.88 " "+Z_0=3692463.58 +no_defs +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto expected = "PROJCRS[\"unknown\",\n" " BASEGEODCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Geocentric/topocentric conversions\",\n" " ID[\"EPSG\",9836]],\n" " PARAMETER[\"Geocentric X of topocentric " "origin\",-3982059.42,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8837]],\n" " PARAMETER[\"Geocentric Y of topocentric origin\",3331314.88,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8838]],\n" " PARAMETER[\"Geocentric Z of topocentric origin\",3692463.58,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8839]]],\n" " CS[Cartesian,3],\n" " AXIS[\"topocentric East (U)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"topocentric North (V)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"topocentric Up (W)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), expected); } // --------------------------------------------------------------------------- TEST(io, projparse_projected_wktext) { std::string input("+proj=merc +foo +wktext +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_ob_tran_longlat) { for (const char *o_proj : {"longlat", "lonlat", "latlong", "latlon"}) { std::string input( "+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ob_tran " "+o_proj="); input += o_proj; input += " +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 +ellps=WGS84 " "+step +proj=axisswap +order=2,1"; auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_NO_CHECK(crs)); ASSERT_TRUE(op != nullptr); std::string expected( "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ob_tran " "+o_proj="); expected += o_proj; expected += " +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 " "+ellps=WGS84 +step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"; EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), expected); } } // --------------------------------------------------------------------------- TEST(io, projparse_ob_tran_rhealpix) { std::string input( "+proj=ob_tran +o_proj=rhealpix +o_lat_p=90 +o_lon_p=-180 +lon_0=180 " "+north_square=1 +south_square=0 +ellps=WGS84 +type=crs"); auto obj = PROJStringParser().createFromPROJString(input); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), input); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_title) { std::string projString("+title=Ile d'Amsterdam 1963 +proj=longlat " "+towgs84=109.7530,-528.1330,-362.2440 " "+a=6378388.0000 +rf=297.0000000000000 +units=m " "+no_defs +type=crs"); auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto baseCRS = nn_dynamic_pointer_cast(crs->baseCRS()); ASSERT_TRUE(baseCRS != nullptr); EXPECT_EQ(baseCRS->nameStr(), "Ile d'Amsterdam 1963"); EXPECT_EQ(baseCRS->datum()->nameStr(), "Ile d'Amsterdam 1963"); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=longlat +ellps=intl +towgs84=109.753,-528.133,-362.244,0,0,0,0 " "+no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_projected_title) { std::string projString( "+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 " "+type=crs"); auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto baseCRS = nn_dynamic_pointer_cast(crs->baseCRS()); ASSERT_TRUE(baseCRS != nullptr); EXPECT_EQ(baseCRS->nameStr(), "Amsterdam 1963"); EXPECT_EQ(baseCRS->baseCRS()->nameStr(), "unknown"); EXPECT_EQ( crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()), "+proj=utm +zone=43 +south +ellps=intl " "+towgs84=109.753,-528.133,-362.244,0,0,0,0 +units=m +no_defs " "+type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_init) { auto dbContext = DatabaseContext::create(); // Not allowed in non-compatibillity mode EXPECT_THROW( PROJStringParser().createFromPROJString("init=epsg:4326 +type=crs"), ParsingException); { // EPSG:4326 is normally latitude-longitude order with degree, // but in compatibillity mode it will be long-lat auto obj = createFromUserInput("init=epsg:4326", dbContext, true); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( EllipsoidalCS::createLongitudeLatitude(UnitOfMeasure::DEGREE) .get())); } { // Test that +no_defs +type=crs have no effect auto obj = createFromUserInput( "+init=epsg:4326 +no_defs +type=crs +wktext", dbContext, true); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto wkt = crs->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt.find("GEODCRS[\"WGS 84\"") == 0) << wkt; } { // EPSG:3040 is normally northing-easting order, but in compatibillity // mode it will be easting-northing auto obj = createFromUserInput("init=epsg:3040 +type=crs", dbContext, true); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_TRUE(crs->coordinateSystem()->isEquivalentTo( CartesianCS::createEastingNorthing(UnitOfMeasure::METRE).get())); } { auto obj = PROJStringParser().createFromPROJString("init=ITRF2000:ITRF2005"); auto co = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(co != nullptr); EXPECT_EQ(co->exportToPROJString(PROJStringFormatter::create().get()), "+proj=helmert +x=-0.0001 +y=0.0008 +z=0.0058 +s=-0.0004 " "+dx=0.0002 +dy=-0.0001 +dz=0.0018 +ds=-0.00008 " "+t_epoch=2000.0 +convention=position_vector"); } { auto obj = createFromUserInput("+title=mytitle +init=epsg:4326 +over", dbContext, true); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "mytitle"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=longlat +datum=WGS84 +over +no_defs +type=crs"); } { auto obj = createFromUserInput( "proj=pipeline step init=epsg:4326 step proj=longlat ellps=WGS84", dbContext, true); auto co = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(co != nullptr); EXPECT_EQ(co->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +init=epsg:4326 +step +proj=longlat " "+ellps=WGS84"); } } // --------------------------------------------------------------------------- TEST(io, projparse_errors) { EXPECT_THROW(PROJStringParser().createFromPROJString(""), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString("foo"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString("inv"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString("step"), ParsingException); EXPECT_THROW( PROJStringParser().createFromPROJString("proj=unknown +type=crs"), ParsingException); EXPECT_THROW( PROJStringParser().createFromPROJString( "proj=pipeline step proj=unitconvert step proj=longlat a=invalid"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "proj=pipeline step proj=pipeline"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "proj=pipeline step init=epsg:4326 init=epsg:4326"), ParsingException); EXPECT_THROW( PROJStringParser().createFromPROJString("proj=\tinit= +type=crs"), ParsingException); } // --------------------------------------------------------------------------- TEST(io, projparse_longlat_errors) { EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +datum=unknown +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +ellps=unknown +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +a=invalid +b=1 +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +a=1 +b=invalid +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +a=invalid +rf=1 +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +a=1 +rf=invalid +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +a=1 +f=invalid +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +R=invalid +type=crs"), ParsingException); EXPECT_THROW( PROJStringParser().createFromPROJString("+proj=longlat +b=1 +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +rf=1 +type=crs"), ParsingException); EXPECT_THROW( PROJStringParser().createFromPROJString("+proj=longlat +f=0 +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +pm=unknown +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 " "+towgs84=1.2,2,3,4,5,6,invalid +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=longlat +axis=foo +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=pipeline +step +proj=longlat +ellps=GRS80 +step " "+proj=unitconvert +xy_in=rad +xy_out=foo"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=pipeline +step +proj=longlat +ellps=GRS80 +step " "+proj=axisswap"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=pipeline +step +proj=longlat +ellps=GRS80 +step " "+proj=axisswap +order=0,0"), ParsingException); // We just want to check that we don't loop forever PROJStringParser().createFromPROJString( "+=x;proj=pipeline step proj=push +type=crs"); } // --------------------------------------------------------------------------- TEST(io, projparse_projected_errors) { EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=tmerc +units=foo +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=tmerc +x_0=foo +type=crs"), ParsingException); EXPECT_THROW(PROJStringParser().createFromPROJString( "+proj=tmerc +lat_0=foo +type=crs"), ParsingException); // Inconsistent pm values between geogCRS and projectedCRS EXPECT_THROW( PROJStringParser().createFromPROJString( "+type=crs +proj=pipeline +step +proj=longlat +ellps=WGS84 " "+step +proj=tmerc +ellps=WGS84 +lat_0=0 +pm=paris"), ParsingException); } // --------------------------------------------------------------------------- TEST(io, createFromUserInput) { auto dbContext = DatabaseContext::create(); EXPECT_THROW(createFromUserInput("foo", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("GEOGCRS", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("+proj=unhandled +type=crs", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("EPSG:4326", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("ESRI:103668+EPSG:5703", nullptr), ParsingException); EXPECT_THROW( createFromUserInput("urn:ogc:def:unhandled:EPSG::4326", dbContext), ParsingException); EXPECT_THROW(createFromUserInput("urn:ogc:def:crs:non_existing_auth::4326", dbContext), NoSuchAuthorityCodeException); EXPECT_THROW(createFromUserInput( "urn:ogc:def:crs,crs:EPSG::2393,unhandled_type:EPSG::5717", dbContext), ParsingException); EXPECT_THROW(createFromUserInput( "urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::unexisting_code", dbContext), NoSuchAuthorityCodeException); EXPECT_THROW( createFromUserInput( "urn:ogc:def:crs,crs:EPSG::2393::extra_element,crs:EPSG::EPSG", dbContext), ParsingException); EXPECT_THROW(createFromUserInput("urn:ogc:def:coordinateOperation," "coordinateOperation:EPSG::3895," "unhandled_type:EPSG::1618", dbContext), ParsingException); EXPECT_THROW( createFromUserInput("urn:ogc:def:coordinateOperation," "coordinateOperation:EPSG::3895," "coordinateOperation:EPSG::unexisting_code", dbContext), NoSuchAuthorityCodeException); EXPECT_THROW( createFromUserInput("urn:ogc:def:coordinateOperation," "coordinateOperation:EPSG::3895::extra_element," "coordinateOperation:EPSG::1618", dbContext), ParsingException); EXPECT_NO_THROW(createFromUserInput("+proj=longlat", nullptr)); EXPECT_NO_THROW(createFromUserInput("EPSG:4326", dbContext)); EXPECT_NO_THROW(createFromUserInput("epsg:4326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:crs:EPSG::4326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:crs:EPSG:10:4326", dbContext)); EXPECT_THROW(createFromUserInput("urn:ogc:def:crs:EPSG::4326", nullptr), ParsingException); EXPECT_NO_THROW(createFromUserInput( "urn:ogc:def:coordinateOperation:EPSG::1671", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:datum:EPSG::6326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:ensemble:EPSG::6326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:meridian:EPSG::8901", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:ellipsoid:EPSG::7030", dbContext)); EXPECT_NO_THROW(createFromUserInput("IAU:1000", dbContext)); EXPECT_NO_THROW(createFromUserInput("IAU_2015:1000", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:crs:IAU::1000", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:crs:IAU_2015::1000", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:crs:IAU:2015:1000", dbContext)); EXPECT_THROW(createFromUserInput("urn:ogc:def:crs:IAU_2015::xxxx", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("urn:ogc:def:crs:IAU:xxxx:1000", nullptr), ParsingException); // Found as srsName in some GMLs... EXPECT_NO_THROW( createFromUserInput("URN:OGC:DEF:CRS:OGC:1.3:CRS84", dbContext)); // Legacy formulations EXPECT_NO_THROW( createFromUserInput("urn:x-ogc:def:crs:EPSG::4326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:opengis:def:crs:EPSG::4326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:opengis:crs:EPSG::4326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:x-ogc:def:crs:EPSG:4326", dbContext)); EXPECT_THROW(createFromUserInput("urn:opengis:crs:EPSG::4326", nullptr), ParsingException); EXPECT_THROW( createFromUserInput("urn:opengis:unhandled:EPSG::4326", dbContext), ParsingException); { auto obj = createFromUserInput("EPSG:2393+5717", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "KKJ / Finland Uniform Coordinate System + N60 height"); } { auto obj = createFromUserInput("EPSG:2393+EPSG:5717", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "KKJ / Finland Uniform Coordinate System + N60 height"); } { auto obj = createFromUserInput("ESRI:103668+EPSG:5703", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAD_1983_HARN_Adj_MN_Ramsey_Meters + NAVD88 height"); } EXPECT_THROW(createFromUserInput("ESRI:42+EPSG:5703", dbContext), NoSuchAuthorityCodeException); EXPECT_THROW(createFromUserInput("ESRI:103668+EPSG:999999", dbContext), NoSuchAuthorityCodeException); { auto obj = createFromUserInput( "urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "KKJ / Finland Uniform Coordinate System + N60 height"); } { auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979," "cs:PROJ::ENh," "coordinateOperation:EPSG::16031", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 (3D) / UTM zone 31N"); EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 4979); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031); } // We accept non-conformant EPSG:4326+4326 { auto obj = createFromUserInput("EPSG:4326+4326", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84"); EXPECT_EQ(crs->getEPSGCode(), 4979); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); const auto wkt = "COMPD_CS[\"WGS 84 + WGS 84\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]]]"; EXPECT_EQ( crs->exportToWKT(WKTFormatter::create( WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()), wkt); } // Non consistent EXPECT_THROW(createFromUserInput("EPSG:4326+4258", dbContext), InvalidCompoundCRSException); // We accept non-conformant EPSG:32631+4326 { auto obj = createFromUserInput("EPSG:32631+4326", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UTM zone 31N"); EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 4979); EXPECT_EQ(crs->baseCRS()->coordinateSystem()->axisList().size(), 3U); EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U); const auto wkt = "COMPD_CS[\"WGS 84 / UTM zone 31N + WGS 84\",\n" " PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"EPSG\",\"32631\"]],\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]]]"; EXPECT_EQ( crs->exportToWKT(WKTFormatter::create( WKTFormatter::Convention::WKT1_GDAL, dbContext) .get()), wkt); } EXPECT_THROW(createFromUserInput( "urn:ogc:def:crs,crs:EPSG::4979," "cs:PROJ::ENh," "coordinateOperation:EPSG::1024", // not a conversion dbContext), ParsingException); EXPECT_THROW(createFromUserInput("urn:ogc:def:crs,crs:," "cs:PROJ::ENh," "coordinateOperation:EPSG::16031", dbContext), ParsingException); EXPECT_THROW(createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979," "cs:," "coordinateOperation:EPSG::16031", dbContext), ParsingException); EXPECT_THROW(createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979," "cs:PROJ::ENh," "coordinateOperation:", dbContext), ParsingException); { // Completely nonsensical from a geodesic point of view... auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::4978," "cs:EPSG::6500," "coordinateOperation:EPSG::16031", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 4978); EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 6500); EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031); } { // Completely nonsensical from a geodesic point of view... auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979," "cs:EPSG::6423," "coordinateOperation:EPSG::16031", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 4979); EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 6423); EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031); } { // Completely nonsensical from a geodesic point of view... auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::32631," "cs:EPSG::4400," "coordinateOperation:EPSG::16031", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 32631); EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 4400); EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031); } { // DerivedVerticalCRS based on "NAVD88 height", using a foot UP axis, // and EPSG:7813 "Vertical Axis Unit Conversion" conversion auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::5703," "cs:EPSG::1030," "coordinateOperation:EPSG::7813", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 height (ft)"); EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 5703); EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 1030); EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 7813); } { // DerivedVerticalCRS based on "NAVD88 height", using a ftUS UP axis, // and EPSG:7813 "Vertical Axis Unit Conversion" conversion auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::5703," "cs:EPSG::6497," "coordinateOperation:EPSG::7813", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 height (ftUS)"); } { // DerivedVerticalCRS based on "NAVD88 height (ftUS)", using a metre UP // axis, and EPSG:7813 "Vertical Axis Unit Conversion" conversion auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::6360," "cs:EPSG::6499," "coordinateOperation:EPSG::7813", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 height"); } { // DerivedVerticalCRS based on "NAVD88 height", using a metre DOWN axis, // and EPSG:7812 "Height / Depth reversal" conversion auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::5703," "cs:EPSG::6498," "coordinateOperation:EPSG::7812", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 depth"); } { // DerivedVerticalCRS based on "NAVD88 height (ftUS)", using a ftUS DOWN // axis, and EPSG:7812 "Height / Depth reversal" conversion auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::6360," "cs:EPSG::1043," "coordinateOperation:EPSG::7812", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 depth (ftUS)"); } { // DerivedVerticalCRS based on "NAVD88 depth (ftUS)", using a ftUS UP // axis, and EPSG:7812 "Height / Depth reversal" conversion auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::6358," "cs:EPSG::6497," "coordinateOperation:EPSG::7812", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NAVD88 height (ftUS)"); } { auto obj = createFromUserInput("urn:ogc:def:coordinateOperation," "coordinateOperation:EPSG::3895," "coordinateOperation:EPSG::1618", dbContext); auto concat = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(concat != nullptr); EXPECT_EQ(concat->nameStr(), "MGI (Ferro) to MGI (1) + MGI to WGS 84 (3)"); } EXPECT_NO_THROW(createFromUserInput( " \n\t\rGEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " UNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " UNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]", nullptr)); // Search names in the database EXPECT_THROW(createFromUserInput("foobar", dbContext), ParsingException); { // Official name auto obj = createFromUserInput("WGS 84", dbContext); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_TRUE(crs != nullptr); } { // PROJ alias auto obj = createFromUserInput("WGS84", dbContext); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_TRUE(crs != nullptr); } EXPECT_NO_THROW(createFromUserInput("UTM zone 31N", dbContext)); EXPECT_THROW(createFromUserInput("UTM zone 31", dbContext), ParsingException); EXPECT_NO_THROW(createFromUserInput("WGS84 UTM zone 31N", dbContext)); EXPECT_NO_THROW(createFromUserInput("ID74", dbContext)); { // Approximate match of a vertical CRS auto obj = createFromUserInput("NGF IGN69 height", dbContext); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NGF-IGN69 height"); // EPSG:5720 } { // Approximate match of a vertical CRS auto obj = createFromUserInput("NGF IGN1969", dbContext); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "NGF-IGN 1969"); // IGNF69:IGN69 } { // Approximate match of a vertical CRS auto obj = createFromUserInput("NGF IGN69", dbContext); auto crs = nn_dynamic_pointer_cast(obj); EXPECT_TRUE(crs != nullptr); // Questionnable if we shouldn't match EPSG:5720 instead EXPECT_EQ(crs->nameStr(), "NGF-IGN 1969"); // IGNF69:IGN69 } { // Exact match on each piece of the compound CRS auto obj = createFromUserInput("WGS 84 + EGM96 height", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 + EGM96 height"); } { // Approximate match auto obj = createFromUserInput("WGS 84 + EGM96", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 + EGM96 height"); } { // Approximate match on each piece of the compound CRS auto obj = createFromUserInput("WGS84 + NAVD88 height", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 + NAVD88 height"); } { // Exact match of a CompoundCRS object auto obj = createFromUserInput( "WGS 84 / World Mercator + EGM2008 height", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->identifiers().size(), 1U); } EXPECT_THROW(createFromUserInput("WGS 84 + foobar", dbContext), ParsingException); EXPECT_THROW(createFromUserInput("foobar + EGM96 height", dbContext), ParsingException); { auto obj = createFromUserInput("World Geodetic System 1984 ensemble", dbContext); auto ensemble = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ensemble != nullptr); EXPECT_EQ(ensemble->identifiers().size(), 1U); } // Check that "foo" doesn't match with "Amersfoort" EXPECT_THROW(createFromUserInput("foo", dbContext), ParsingException); // Check that "omerc" doesn't match with "WGS 84 / Pseudo-Mercator" EXPECT_THROW(createFromUserInput("omerc", dbContext), ParsingException); // Missing space, dash: OK EXPECT_NO_THROW(createFromUserInput("WGS84 PseudoMercator", dbContext)); // Invalid CoordinateMetadata EXPECT_THROW(createFromUserInput("@", dbContext), ParsingException); // Invalid CoordinateMetadata EXPECT_THROW(createFromUserInput("ITRF2014@", dbContext), ParsingException); // Invalid CoordinateMetadata EXPECT_THROW(createFromUserInput("ITRF2014@foo", dbContext), ParsingException); // Invalid CoordinateMetadata EXPECT_THROW(createFromUserInput("foo@2025", dbContext), ParsingException); // Invalid CoordinateMetadata EXPECT_THROW(createFromUserInput("@2025", dbContext), ParsingException); // Invalid CoordinateMetadata: static CRS not allowed EXPECT_THROW(createFromUserInput("RGF93@2025", dbContext), ParsingException); { auto obj = createFromUserInput("ITRF2014@2025.1", dbContext); auto coordinateMetadata = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(coordinateMetadata != nullptr); EXPECT_EQ(coordinateMetadata->coordinateEpochAsDecimalYear(), 2025.1); } { // Allow spaces before and after @ auto obj = createFromUserInput("ITRF2014 @ 2025.1", dbContext); auto coordinateMetadata = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(coordinateMetadata != nullptr); EXPECT_EQ(coordinateMetadata->coordinateEpochAsDecimalYear(), 2025.1); } { auto obj = createFromUserInput("EPSG:9000 @ 2025.1", dbContext); auto coordinateMetadata = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(coordinateMetadata != nullptr); EXPECT_EQ(coordinateMetadata->coordinateEpochAsDecimalYear(), 2025.1); } { // Approximate match involving using "north" instead of N and lacking // "zone" auto obj = createFromUserInput("WGS 84 UTM 31 north", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 / UTM zone 31N"); } // Should not match WGS84 or IGM85 EXPECT_THROW(createFromUserInput("WGS 85", dbContext), ParsingException); } // --------------------------------------------------------------------------- TEST(io, createFromUserInput_ogc_crs_url) { auto dbContext = DatabaseContext::create(); { auto obj = createFromUserInput( "http://www.opengis.net/def/crs/EPSG/0/4326", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } { auto obj = createFromUserInput( "http://www.opengis.net/def/crs/IAU/2015/49900", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } { // Not sure if this is intended to be valid (version=0), but let's // imitate the logic of EPSG, this will use the latest version of IAU // (if/when there will be several of them) auto obj = createFromUserInput( "http://www.opengis.net/def/crs/IAU/0/49900", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); } EXPECT_THROW( createFromUserInput("http://www.opengis.net/def/crs", dbContext), ParsingException); EXPECT_THROW( createFromUserInput("http://www.opengis.net/def/crs/EPSG/0", dbContext), ParsingException); EXPECT_THROW(createFromUserInput( "http://www.opengis.net/def/crs/EPSG/0/XXXX", dbContext), NoSuchAuthorityCodeException); EXPECT_THROW( createFromUserInput("http://www.opengis.net/def/crs/IAU/2015/invalid", dbContext), NoSuchAuthorityCodeException); { auto obj = createFromUserInput( "http://www.opengis.net/def/crs-compound?1=http://www.opengis.net/" "def/crs/EPSG/0/4326&2=http://www.opengis.net/def/crs/EPSG/0/3855", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->nameStr(), "WGS 84 + EGM2008 height"); } // No part EXPECT_THROW(createFromUserInput("http://www.opengis.net/def/crs-compound?", dbContext), ParsingException); // Just one part EXPECT_THROW( createFromUserInput("http://www.opengis.net/def/crs-compound?1=http://" "www.opengis.net/def/crs/EPSG/0/4326", dbContext), InvalidCompoundCRSException); // Invalid compound CRS EXPECT_THROW( createFromUserInput( "http://www.opengis.net/def/crs-compound?1=http://www.opengis.net/" "def/crs/EPSG/0/4326&2=http://www.opengis.net/def/crs/EPSG/0/4326", dbContext), InvalidCompoundCRSException); // Missing 2= EXPECT_THROW( createFromUserInput( "http://www.opengis.net/def/crs-compound?1=http://www.opengis.net/" "def/crs/EPSG/0/4326&3=http://www.opengis.net/def/crs/EPSG/0/3855", dbContext), ParsingException); // Invalid query parameter EXPECT_THROW( createFromUserInput("http://www.opengis.net/def/crs-compound?1=http://" "www.opengis.net/def/crs/EPSG/0/4326&bla", dbContext), ParsingException); // Invalid query parameter EXPECT_THROW( createFromUserInput("http://www.opengis.net/def/crs-compound?1=http://" "www.opengis.net/def/crs/EPSG/0/4326&two=http://" "www.opengis.net/def/crs/EPSG/0/3855", dbContext), ParsingException); } // --------------------------------------------------------------------------- TEST(io, createFromUserInput_OGC_AUTO) { // UTM north { auto obj = createFromUserInput("AUTO:42001,-117,33", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "UTM zone 11N"); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs +type=crs"); } // UTM south { auto obj = createFromUserInput("AUTO:42001,-117,-33", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "UTM zone 11S"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs " "+type=crs"); } // Explicit unit: metre { auto obj = createFromUserInput("AUTO:42001,9001,-117,33", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "UTM zone 11N"); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs +type=crs"); } // Explicit unit: foot { auto obj = createFromUserInput("AUTO:42001,9002,-117,33", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "UTM zone 11N"); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=11 +datum=WGS84 +units=ft +no_defs +type=crs"); } // Explicit unit: US survery foot { auto obj = createFromUserInput("AUTO:42001,9003,-117,33", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "UTM zone 11N"); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=11 +datum=WGS84 +units=us-ft +no_defs +type=crs"); } // Explicit unit: invalid EXPECT_THROW(createFromUserInput("AUTO:42001,0,-117,33", nullptr), ParsingException); // Invalid longitude EXPECT_THROW(createFromUserInput("AUTO:42001,-180.01,33", nullptr), ParsingException); EXPECT_NO_THROW(createFromUserInput("AUTO:42001,-180,33", nullptr)); EXPECT_THROW(createFromUserInput("AUTO:42001,180,33", nullptr), ParsingException); EXPECT_NO_THROW(createFromUserInput("AUTO:42001,179.999,33", nullptr)); // Too short EXPECT_THROW(createFromUserInput("AUTO:42001", nullptr), ParsingException); // TMerc / north { auto obj = createFromUserInput("AUTO:42002,1,2", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "Transverse Mercator"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tmerc +lat_0=0 +lon_0=1 +k=0.9996 +x_0=500000 +y_0=0 " "+datum=WGS84 +units=m +no_defs +type=crs"); } // TMerc / south { auto obj = createFromUserInput("AUTO:42002,1,-2", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->derivingConversion()->nameStr(), "Transverse Mercator"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tmerc +lat_0=0 +lon_0=1 +k=0.9996 +x_0=500000 " "+y_0=10000000 +datum=WGS84 +units=m +no_defs +type=crs"); } // Orthographic { auto obj = createFromUserInput("AUTO:42003,1,2", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=ortho +lat_0=2 +lon_0=1 +x_0=0 +y_0=0 +datum=WGS84 " "+units=m +no_defs +type=crs"); } // Equirectangular { auto obj = createFromUserInput("AUTO:42004,1,0", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=1 +x_0=0 +y_0=0 " "+datum=WGS84 +units=m +no_defs +type=crs"); } // Mollweide { auto obj = createFromUserInput("AUTO:42005,1", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=moll +lon_0=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m " "+no_defs +type=crs"); } // Mollweide with explicit unit { auto obj = createFromUserInput("AUTO:42005,9001,1", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=moll +lon_0=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m " "+no_defs +type=crs"); } // Invalid method id EXPECT_THROW(createFromUserInput("AUTO:42999,1,0", nullptr), ParsingException); // As urn:ogc:def:crs:OGC::AUTOxxxx:.... { auto obj = createFromUserInput("urn:ogc:def:crs:OGC::AUTO42001:-117:33", nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs +type=crs"); } } // --------------------------------------------------------------------------- TEST(io, createFromUserInput_hack_EPSG_102100) { auto dbContext = DatabaseContext::create(); auto obj = createFromUserInput("EPSG:102100", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); const auto &ids = crs->identifiers(); ASSERT_EQ(ids.size(), 1U); // we do not lie on the real authority EXPECT_EQ(*ids[0]->codeSpace(), "ESRI"); EXPECT_EQ(ids[0]->code(), "102100"); } // --------------------------------------------------------------------------- TEST(io, guessDialect) { EXPECT_EQ(WKTParser().guessDialect("LOCAL_CS[\"foo\"]"), WKTParser::WKTGuessedDialect::WKT1_GDAL); EXPECT_EQ(WKTParser().guessDialect( "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_" "1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0]," "UNIT[\"Degree\",0.0174532925199433]]"), WKTParser::WKTGuessedDialect::WKT1_ESRI); EXPECT_EQ(WKTParser().guessDialect( "GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north],\n" " AXIS[\"geodetic longitude (Lon)\",east],\n" " UNIT[\"degree\",0.0174532925199433]]"), WKTParser::WKTGuessedDialect::WKT2_2019); EXPECT_EQ( WKTParser().guessDialect("TIMECRS[\"Temporal CRS\",\n" " TDATUM[\"Gregorian calendar\",\n" " CALENDAR[\"proleptic Gregorian\"],\n" " TIMEORIGIN[0000-01-01]],\n" " CS[TemporalDateTime,1],\n" " AXIS[\"time (T)\",future]]"), WKTParser::WKTGuessedDialect::WKT2_2019); EXPECT_EQ(WKTParser().guessDialect( "GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north],\n" " AXIS[\"geodetic longitude (Lon)\",east],\n" " UNIT[\"degree\",0.0174532925199433]]"), WKTParser::WKTGuessedDialect::WKT2_2015); EXPECT_EQ(WKTParser().guessDialect("foo"), WKTParser::WKTGuessedDialect::NOT_WKT); EXPECT_EQ(WKTParser().guessDialect("ID74"), WKTParser::WKTGuessedDialect::NOT_WKT); } // --------------------------------------------------------------------------- // GDAL MITAB driver requires on rather excessive precision on parameter // values to implement a nasty trick... TEST(wkt_export, precision) { auto wkt = "PROJCS[\"RGF93 / Lambert-93\",\n" " GEOGCS[\"RGF93\",\n" " DATUM[\"Reseau_Geodesique_Francais_1993\",\n" " SPHEROID[\"GRS 80\",6378137,298.257222101],\n" " AUTHORITY[\"EPSG\",\"6171\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Lambert_Conformal_Conic_2SP\"],\n" " PARAMETER[\"standard_parallel_1\",49.00000000001],\n" " PARAMETER[\"standard_parallel_2\",44],\n" " PARAMETER[\"latitude_of_origin\",46.5],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"false_easting\",700000],\n" " PARAMETER[\"false_northing\",6600000],\n" " UNIT[\"Meter\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), wkt); } // --------------------------------------------------------------------------- // Avoid division by zero TEST(wkt_export, invalid_linear_unit) { auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"foo\",0]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- // Avoid division by zero TEST(wkt_export, invalid_angular_unit) { auto wkt = "PROJCS[\"WGS 84 / UTM zone 31N\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"foo\",0]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",0],\n" " PARAMETER[\"central_meridian\",3],\n" " PARAMETER[\"scale_factor\",0.9996],\n" " PARAMETER[\"false_easting\",500000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"meter\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_THROW( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(json_import, ellipsoid_flattened_sphere) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7030\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto ellps = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellps != nullptr); EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, ellipsoid_major_minor_custom_unit) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"foo\",\n" " \"semi_major_axis\": 6378137,\n" " \"semi_minor_axis\": {\n" " \"value\": 6370000,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"my_unit\",\n" " \"conversion_factor\": 2\n" " }\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto ellps = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellps != nullptr); EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, ellipsoid_sphere) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"Sphere\",\n" " \"radius\": 6371000,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7035\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto ellps = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellps != nullptr); EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, ellipsoid_errors) { EXPECT_THROW(createFromUserInput("{", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("{}", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("{ \"type\": \"Ellipsoid\" }", nullptr), ParsingException); EXPECT_THROW(createFromUserInput( "{ \"type\": \"Ellipsoid\", \"name\": \"foo\" }", nullptr), ParsingException); EXPECT_THROW( createFromUserInput( "{ \"type\": \"Ellipsoid\", \"name\": \"foo\", \"radius\": null }", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("{ \"type\": \"Ellipsoid\", \"name\": " "\"foo\", \"semi_major_axis\": 1 }", nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, axis_with_meridian) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Axis\",\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"south\",\n" " \"meridian\": {\n" " \"longitude\": 180\n" " },\n" " \"unit\": \"metre\"\n" "}"; auto obj = createFromUserInput(json, nullptr); auto axis = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(axis != nullptr); EXPECT_EQ(axis->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, axis_with_meridian_with_unit) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Axis\",\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"south\",\n" " \"meridian\": {\n" " \"longitude\": {\n" " \"value\": 200,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"grad\",\n" " \"conversion_factor\": 0.0157079632679489\n" " }\n" " }\n" " },\n" " \"unit\": \"metre\"\n" "}"; auto obj = createFromUserInput(json, nullptr); auto axis = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(axis != nullptr); EXPECT_EQ(axis->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, axis_with_minimum_value_maximum_value_range_meaning) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Axis\",\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\",\n" " \"minimum_value\": 0,\n" " \"maximum_value\": 360,\n" " \"range_meaning\": \"wraparound\"\n" "}"; auto obj = createFromUserInput(json, nullptr); auto axis = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(axis != nullptr); EXPECT_EQ(axis->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, axis_with_invalid_minimum_value) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Axis\",\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\",\n" " \"minimum_value\": \"invalid\"\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, axis_with_invalid_maximum_value) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Axis\",\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\",\n" " \"maximum_value\": \"invalid\"\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, axis_with_invalid_range_meaning_str) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Axis\",\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\",\n" " \"range_meaning\": \"invalid\"\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, axis_with_invalid_range_meaning_number) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Axis\",\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\",\n" " \"range_meaning\": 1\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, prime_meridian) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"PrimeMeridian\",\n" " \"name\": \"Paris\",\n" " \"longitude\": {\n" " \"value\": 2.5969213,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"grad\",\n" " \"conversion_factor\": 0.0157079632679489\n" " }\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto pm = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(pm != nullptr); EXPECT_EQ(pm->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, prime_meridian_errors) { EXPECT_THROW(createFromUserInput("{ \"type\": \"PrimeMeridian\", \"name\": " "\"foo\" }", nullptr), ParsingException); EXPECT_THROW(createFromUserInput("{ \"type\": \"PrimeMeridian\", \"name\": " "\"foo\", \"longitude\": null }", nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, geodetic_reference_frame_with_implicit_prime_meridian) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto grf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(grf != nullptr); EXPECT_EQ(grf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geodetic_reference_frame_with_explicit_prime_meridian) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Nouvelle Triangulation Francaise (Paris)\",\n" " \"ellipsoid\": {\n" " \"name\": \"Clarke 1880 (IGN)\",\n" " \"semi_major_axis\": 6378249.2,\n" " \"semi_minor_axis\": 6356515\n" " },\n" " \"prime_meridian\": {\n" " \"name\": \"Paris\",\n" " \"longitude\": {\n" " \"value\": 2.5969213,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"grad\",\n" " \"conversion_factor\": 0.0157079632679489\n" " }\n" " }\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto grf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(grf != nullptr); EXPECT_EQ(grf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geodetic_reference_frame_with_anchor_epoch) { // Use dummy anchor_epoch = 0 to avoid fp issues on some architectures // (cf https://github.com/OSGeo/PROJ/issues/3632) auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"my_name\",\n" " \"anchor_epoch\": 0,\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto grf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(grf != nullptr); EXPECT_EQ(grf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geodetic_reference_frame_with_invalid_anchor_epoch) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"my_name\",\n" " \"anchor_epoch\": \"invalid\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, dynamic_geodetic_reference_frame_with_implicit_prime_meridian) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DynamicGeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"frame_reference_epoch\": 1,\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto dgrf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(dgrf != nullptr); EXPECT_EQ(dgrf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_extent) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"vertical_extent\": {\n" " \"minimum\": -1000,\n" " \"maximum\": 0\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gdrf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gdrf != nullptr); EXPECT_EQ(gdrf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_extent_with_unit) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"vertical_extent\": {\n" " \"minimum\": -1000,\n" " \"maximum\": 0,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"my_metre\",\n" " \"conversion_factor\": 1\n" " }\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gdrf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gdrf != nullptr); EXPECT_EQ(gdrf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, temporal_extent) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"temporal_extent\": {\n" " \"start\": \"my start\",\n" " \"end\": \"my end\"\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gdrf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gdrf != nullptr); EXPECT_EQ(gdrf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geodetic_reference_frame_errors) { EXPECT_THROW( createFromUserInput( "{ \"type\": \"GeodeticReferenceFrame\", \"name\": \"foo\" }", nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, dynamic_vertical_reference_frame) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DynamicVerticalReferenceFrame\",\n" " \"name\": \"bar\",\n" " \"frame_reference_epoch\": 1\n" "}"; auto obj = createFromUserInput(json, nullptr); auto dvrf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(dvrf != nullptr); EXPECT_EQ(dvrf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, several_usages) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"usages\": [\n" " {\n" " \"area\": \"World\",\n" " \"bbox\": {\n" " \"south_latitude\": -90,\n" " \"west_longitude\": -180,\n" " \"north_latitude\": 90,\n" " \"east_longitude\": 180\n" " }\n" " },\n" " {\n" " \"scope\": \"my_scope\",\n" " \"area\": \"my_area\"\n" " }\n" " ]\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gdr = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gdr != nullptr); EXPECT_EQ(gdr->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geographic_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"area\": \"World\",\n" " \"bbox\": {\n" " \"south_latitude\": -90,\n" " \"west_longitude\": -180,\n" " \"north_latitude\": 90,\n" " \"east_longitude\": 180\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4326\n" " },\n" " \"remarks\": \"my_remarks\"\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gcrs != nullptr); EXPECT_EQ(gcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geographic_crs_with_deformation_models) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"test\",\n" " \"datum\": {\n" " \"type\": \"DynamicGeodeticReferenceFrame\",\n" " \"name\": \"test\",\n" " \"frame_reference_epoch\": 2005,\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"deformation_models\": [\n" " {\n" " \"name\": \"my_model\"\n" " }\n" " ]\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gcrs != nullptr); EXPECT_EQ(gcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, spherical_planetocentric) { const auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticCRS\",\n" " \"name\": \"Mercury (2015) / Ocentric\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Mercury (2015)\",\n" " \"anchor\": \"Hun Kal: 20.0\",\n" " \"ellipsoid\": {\n" " \"name\": \"Mercury (2015)\",\n" " \"semi_major_axis\": 2440530,\n" " \"inverse_flattening\": 1075.12334801762\n" " },\n" " \"prime_meridian\": {\n" " \"name\": \"Reference Meridian\",\n" " \"longitude\": 0\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"spherical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Planetocentric latitude\",\n" " \"abbreviation\": \"U\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Planetocentric longitude\",\n" " \"abbreviation\": \"V\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"IAU\",\n" " \"code\": 19902\n" " },\n" " \"remarks\": \"Source of IAU Coordinate systems: " "doi://10.1007/s10569-017-9805-5\"\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gcrs != nullptr); EXPECT_TRUE(gcrs->isSphericalPlanetocentric()); EXPECT_EQ(gcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geographic_crs_errors) { EXPECT_THROW( createFromUserInput( "{ \"type\": \"GeographicCRS\", \"name\": \"foo\" }", nullptr), ParsingException); EXPECT_THROW( createFromUserInput("{\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " }\n" "}", nullptr), ParsingException); EXPECT_THROW( createFromUserInput("{\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}", nullptr), ParsingException); } // --------------------------------------------------------------------------- TEST(json_import, geocentric_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeodeticCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geocentric X\",\n" " \"abbreviation\": \"X\",\n" " \"direction\": \"geocentricX\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Geocentric Y\",\n" " \"abbreviation\": \"Y\",\n" " \"direction\": \"geocentricY\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Geocentric Z\",\n" " \"abbreviation\": \"Z\",\n" " \"direction\": \"geocentricZ\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto gdcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gdcrs != nullptr); EXPECT_EQ(gdcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, projected_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"ProjectedCRS\",\n" " \"name\": \"WGS 84 / UTM zone 31N\",\n" " \"base_crs\": {\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4326\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"UTM zone 31N\",\n" " \"method\": {\n" " \"name\": \"Transverse Mercator\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9807\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of natural origin\",\n" " \"value\": 0,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8801\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude of natural origin\",\n" " \"value\": 3,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8802\n" " }\n" " },\n" " {\n" " \"name\": \"Scale factor at natural origin\",\n" " \"value\": 0.9996,\n" " \"unit\": \"unity\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8805\n" " }\n" " },\n" " {\n" " \"name\": \"False easting\",\n" " \"value\": 500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8806\n" " }\n" " },\n" " {\n" " \"name\": \"False northing\",\n" " \"value\": 0,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8807\n" " }\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto pcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(pcrs != nullptr); std::string got_json = pcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))); const char *typeGeogCRS = " \"type\": \"GeographicCRS\",\n"; const auto posTypeGeogCRS = got_json.find(typeGeogCRS); EXPECT_TRUE(posTypeGeogCRS != std::string::npos) << got_json; got_json = got_json.substr(0, posTypeGeogCRS) + got_json.substr(posTypeGeogCRS + strlen(typeGeogCRS)); EXPECT_STREQ(got_json.c_str(), json); } // --------------------------------------------------------------------------- TEST(json_import, conversion_utm_zone_south_wrong_id) { auto json = "{\n" " \"type\": \"Conversion\",\n" " \"name\": \"UTM zone 55S\",\n" " \"method\": {\n" " \"name\": \"Transverse Mercator\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9807\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of natural origin\",\n" " \"value\": 0,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"Degree\",\n" " \"conversion_factor\": 0.0174532925199433\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8801\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude of natural origin\",\n" " \"value\": 147,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"Degree\",\n" " \"conversion_factor\": 0.0174532925199433\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8802\n" " }\n" " },\n" " {\n" " \"name\": \"Scale factor at natural origin\",\n" " \"value\": 0.9996,\n" " \"unit\": \"unity\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8805\n" " }\n" " },\n" " {\n" " \"name\": \"False easting\",\n" " \"value\": 500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8806\n" " }\n" " },\n" " {\n" " \"name\": \"False northing\",\n" " \"value\": 10000000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8807\n" " }\n" " }\n" " ],\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 17055\n" // wrong code " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto conv = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(conv != nullptr); EXPECT_EQ(conv->getEPSGCode(), 16155); // code fixed on import } // --------------------------------------------------------------------------- TEST(json_import, projected_crs_with_geocentric_base) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"ProjectedCRS\",\n" " \"name\": \"EPSG topocentric example B\",\n" " \"base_crs\": {\n" " \"name\": \"WGS 84\",\n" " \"datum_ensemble\": {\n" " \"name\": \"World Geodetic System 1984 ensemble\",\n" " \"members\": [\n" " {\n" " \"name\": \"World Geodetic System 1984 (Transit)\"\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G730)\"\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G873)\"\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1150)\"\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1674)\"\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1762)\"\n" " }\n" " ],\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"accuracy\": \"2.0\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geocentric X\",\n" " \"abbreviation\": \"X\",\n" " \"direction\": \"geocentricX\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Geocentric Y\",\n" " \"abbreviation\": \"Y\",\n" " \"direction\": \"geocentricY\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Geocentric Z\",\n" " \"abbreviation\": \"Z\",\n" " \"direction\": \"geocentricZ\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4978\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"EPSG topocentric example B\",\n" " \"method\": {\n" " \"name\": \"Geocentric/topocentric conversions\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9836\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Geocentric X of topocentric origin\",\n" " \"value\": 3771793.97,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8837\n" " }\n" " },\n" " {\n" " \"name\": \"Geocentric Y of topocentric origin\",\n" " \"value\": 140253.34,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8838\n" " }\n" " },\n" " {\n" " \"name\": \"Geocentric Z of topocentric origin\",\n" " \"value\": 5124304.35,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8839\n" " }\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Topocentric East\",\n" " \"abbreviation\": \"U\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Topocentric North\",\n" " \"abbreviation\": \"V\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Topocentric height\",\n" " \"abbreviation\": \"W\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"scope\": \"Example only (fictitious).\",\n" " \"area\": \"Description of the extent of the CRS.\",\n" " \"bbox\": {\n" " \"south_latitude\": -90,\n" " \"west_longitude\": -180,\n" " \"north_latitude\": 90,\n" " \"east_longitude\": 180\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 5820\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto pcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(pcrs != nullptr); EXPECT_TRUE(pcrs->baseCRS()->isGeocentric()); std::string got_json = pcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))); const char *typeGeodCRS = " \"type\": \"GeodeticCRS\",\n"; const auto posTypeGeodCRS = got_json.find(typeGeodCRS); EXPECT_TRUE(posTypeGeodCRS != std::string::npos) << got_json; got_json = got_json.substr(0, posTypeGeodCRS) + got_json.substr(posTypeGeodCRS + strlen(typeGeodCRS)); EXPECT_STREQ(got_json.c_str(), json); } // --------------------------------------------------------------------------- TEST(json_import, compound_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"CompoundCRS\",\n" " \"name\": \"WGS 84 + EGM2008 height\",\n" " \"components\": [\n" " {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4326\n" " }\n" " },\n" " {\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"EGM2008 height\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"EGM2008 geoid\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 3855\n" " }\n" " }\n" " ]\n" "}"; auto obj = createFromUserInput(json, nullptr); auto compoundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(compoundCRS != nullptr); EXPECT_EQ( compoundCRS->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, bound_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"BoundCRS\",\n" " \"source_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"unknown\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Unknown based on GRS80 ellipsoid\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7019\n" " }\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" " },\n" " \"target_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4326\n" " }\n" " },\n" " \"transformation\": {\n" " \"name\": \"unknown to WGS84\",\n" " \"method\": {\n" " \"name\": \"NTv2\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9615\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude and longitude difference file\",\n" " \"value\": \"@foo\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8656\n" " }\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ( boundCRS->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, bound_crs_with_name_and_usage) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"BoundCRS\",\n" " \"name\": \"my bound crs\",\n" " \"source_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"unknown\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Unknown based on GRS80 ellipsoid\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7019\n" " }\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" " },\n" " \"target_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4326\n" " }\n" " },\n" " \"transformation\": {\n" " \"name\": \"unknown to WGS84\",\n" " \"method\": {\n" " \"name\": \"NTv2\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9615\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude and longitude difference file\",\n" " \"value\": \"@foo\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8656\n" " }\n" " }\n" " ]\n" " },\n" " \"scope\": \"Example only (fictitious).\",\n" " \"area\": \"Description of the extent of the CRS.\",\n" " \"bbox\": {\n" " \"south_latitude\": -90,\n" " \"west_longitude\": -180,\n" " \"north_latitude\": 90,\n" " \"east_longitude\": 180\n" " },\n" " \"id\": {\n" " \"authority\": \"foo\",\n" " \"code\": 1234\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ( boundCRS->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, bound_crs_with_source_crs_in_transformation) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"BoundCRS\",\n" " \"source_crs\": {\n" " \"type\": \"DerivedGeographicCRS\",\n" " \"name\": \"CH1903+ with height offset\",\n" " \"base_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"CH1903+\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"CH1903+\",\n" " \"ellipsoid\": {\n" " \"name\": \"Bessel 1841\",\n" " \"semi_major_axis\": 6377397.155,\n" " \"inverse_flattening\": 299.1528128\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"Ellipsoidal to gravity related height\",\n" " \"method\": {\n" " \"name\": \"Geographic3D offsets\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9660\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude offset\",\n" " \"value\": 0,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8601\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude offset\",\n" " \"value\": 0,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8602\n" " }\n" " },\n" " {\n" " \"name\": \"Vertical Offset\",\n" " \"value\": 10,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8603\n" " }\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"target_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum_ensemble\": {\n" " \"name\": \"World Geodetic System 1984 ensemble\",\n" " \"members\": [\n" " {\n" " \"name\": \"World Geodetic System 1984 (Transit)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1166\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G730)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1152\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G873)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1153\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1150)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1154\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1674)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1155\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1762)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1156\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G2139)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1309\n" " }\n" " }\n" " ],\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"accuracy\": \"2.0\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4979\n" " }\n" " },\n" " \"transformation\": {\n" " \"name\": \"CH1903+ to WGS 84 (1)\",\n" " \"source_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"CH1903+\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"CH1903+\",\n" " \"ellipsoid\": {\n" " \"name\": \"Bessel 1841\",\n" " \"semi_major_axis\": 6377397.155,\n" " \"inverse_flattening\": 299.1528128\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"method\": {\n" " \"name\": \"Geocentric translations (geog2D domain)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9603\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"X-axis translation\",\n" " \"value\": 674.374,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8605\n" " }\n" " },\n" " {\n" " \"name\": \"Y-axis translation\",\n" " \"value\": 15.056,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8606\n" " }\n" " },\n" " {\n" " \"name\": \"Z-axis translation\",\n" " \"value\": 405.346,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8607\n" " }\n" " }\n" " ],\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1676\n" " }\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ( boundCRS->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, transformation) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Transformation\",\n" " \"name\": \"GDA94 to GDA2020 (1)\",\n" " \"source_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"GDA94\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Geocentric Datum of Australia 1994\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" " },\n" " \"target_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"GDA2020\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Geocentric Datum of Australia 2020\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" " },\n" " \"method\": {\n" " \"name\": \"Coordinate Frame rotation (geog2D domain)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9607\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"X-axis translation\",\n" " \"value\": 61.55,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"millimetre\",\n" " \"conversion_factor\": 0.001\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8605\n" " }\n" " },\n" " {\n" " \"name\": \"Y-axis translation\",\n" " \"value\": -10.87,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"millimetre\",\n" " \"conversion_factor\": 0.001\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8606\n" " }\n" " },\n" " {\n" " \"name\": \"Z-axis translation\",\n" " \"value\": -40.19,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"millimetre\",\n" " \"conversion_factor\": 0.001\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8607\n" " }\n" " },\n" " {\n" " \"name\": \"X-axis rotation\",\n" " \"value\": -39.4924,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"milliarc-second\",\n" " \"conversion_factor\": 4.84813681109536e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8608\n" " }\n" " },\n" " {\n" " \"name\": \"Y-axis rotation\",\n" " \"value\": -32.7221,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"milliarc-second\",\n" " \"conversion_factor\": 4.84813681109536e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8609\n" " }\n" " },\n" " {\n" " \"name\": \"Z-axis rotation\",\n" " \"value\": -32.8979,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"milliarc-second\",\n" " \"conversion_factor\": 4.84813681109536e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8610\n" " }\n" " },\n" " {\n" " \"name\": \"Scale difference\",\n" " \"value\": -9.994,\n" " \"unit\": {\n" " \"type\": \"ScaleUnit\",\n" " \"name\": \"parts per billion\",\n" " \"conversion_factor\": 1e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8611\n" " }\n" " }\n" " ],\n" " \"accuracy\": \"0.01\",\n" " \"scope\": \"scope\",\n" " \"area\": \"Australia - GDA\",\n" " \"bbox\": {\n" " \"south_latitude\": -60.56,\n" " \"west_longitude\": 93.41,\n" " \"north_latitude\": -8.47,\n" " \"east_longitude\": 173.35\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8048\n" " },\n" " \"remarks\": \"foo\"\n" "}"; auto obj = createFromUserInput(json, nullptr); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ( transf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, concatenated_operation) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"ConcatenatedOperation\",\n" " \"name\": \"Inverse of Vicgrid + GDA94 to GDA2020 (1)\",\n" " \"source_crs\": {\n" " \"type\": \"ProjectedCRS\",\n" " \"name\": \"GDA94 / Vicgrid\",\n" " \"base_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"GDA94\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Geocentric Datum of Australia 1994\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4283\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"Vicgrid\",\n" " \"method\": {\n" " \"name\": \"Lambert Conic Conformal (2SP)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9802\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of false origin\",\n" " \"value\": -37,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8821\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude of false origin\",\n" " \"value\": 145,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8822\n" " }\n" " },\n" " {\n" " \"name\": \"Latitude of 1st standard parallel\",\n" " \"value\": -36,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8823\n" " }\n" " },\n" " {\n" " \"name\": \"Latitude of 2nd standard parallel\",\n" " \"value\": -38,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8824\n" " }\n" " },\n" " {\n" " \"name\": \"Easting at false origin\",\n" " \"value\": 2500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8826\n" " }\n" " },\n" " {\n" " \"name\": \"Northing at false origin\",\n" " \"value\": 2500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8827\n" " }\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 3111\n" " }\n" " },\n" " \"target_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"GDA2020\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Geocentric Datum of Australia 2020\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7844\n" " }\n" " },\n" " \"steps\": [\n" " {\n" " \"type\": \"Conversion\",\n" " \"name\": \"Inverse of Vicgrid\",\n" " \"method\": {\n" " \"name\": \"Inverse of Lambert Conic Conformal (2SP)\",\n" " \"id\": {\n" " \"authority\": \"INVERSE(EPSG)\",\n" " \"code\": 9802\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of false origin\",\n" " \"value\": -37,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8821\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude of false origin\",\n" " \"value\": 145,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8822\n" " }\n" " },\n" " {\n" " \"name\": \"Latitude of 1st standard parallel\",\n" " \"value\": -36,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8823\n" " }\n" " },\n" " {\n" " \"name\": \"Latitude of 2nd standard parallel\",\n" " \"value\": -38,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8824\n" " }\n" " },\n" " {\n" " \"name\": \"Easting at false origin\",\n" " \"value\": 2500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8826\n" " }\n" " },\n" " {\n" " \"name\": \"Northing at false origin\",\n" " \"value\": 2500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8827\n" " }\n" " }\n" " ],\n" " \"id\": {\n" " \"authority\": \"INVERSE(EPSG)\",\n" " \"code\": 17361\n" " }\n" " },\n" " {\n" " \"type\": \"Transformation\",\n" " \"name\": \"GDA94 to GDA2020 (1)\",\n" " \"source_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"GDA94\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Geocentric Datum of Australia 1994\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4283\n" " }\n" " },\n" " \"target_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"GDA2020\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"Geocentric Datum of Australia 2020\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7844\n" " }\n" " },\n" " \"method\": {\n" " \"name\": \"Coordinate Frame rotation (geog2D domain)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9607\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"X-axis translation\",\n" " \"value\": 61.55,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"millimetre\",\n" " \"conversion_factor\": 0.001\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8605\n" " }\n" " },\n" " {\n" " \"name\": \"Y-axis translation\",\n" " \"value\": -10.87,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"millimetre\",\n" " \"conversion_factor\": 0.001\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8606\n" " }\n" " },\n" " {\n" " \"name\": \"Z-axis translation\",\n" " \"value\": -40.19,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"millimetre\",\n" " \"conversion_factor\": 0.001\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8607\n" " }\n" " },\n" " {\n" " \"name\": \"X-axis rotation\",\n" " \"value\": -39.4924,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"milliarc-second\",\n" " \"conversion_factor\": 4.84813681109536e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8608\n" " }\n" " },\n" " {\n" " \"name\": \"Y-axis rotation\",\n" " \"value\": -32.7221,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"milliarc-second\",\n" " \"conversion_factor\": 4.84813681109536e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8609\n" " }\n" " },\n" " {\n" " \"name\": \"Z-axis rotation\",\n" " \"value\": -32.8979,\n" " \"unit\": {\n" " \"type\": \"AngularUnit\",\n" " \"name\": \"milliarc-second\",\n" " \"conversion_factor\": 4.84813681109536e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8610\n" " }\n" " },\n" " {\n" " \"name\": \"Scale difference\",\n" " \"value\": -9.994,\n" " \"unit\": {\n" " \"type\": \"ScaleUnit\",\n" " \"name\": \"parts per billion\",\n" " \"conversion_factor\": 1e-09\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8611\n" " }\n" " }\n" " ],\n" " \"accuracy\": \"0.01\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8048\n" " },\n" " \"remarks\": \"remarks\"\n" " }\n" " ],\n" " \"accuracy\": \"0.02\",\n" " \"area\": \"Australia - GDA\",\n" " \"bbox\": {\n" " \"south_latitude\": -60.56,\n" " \"west_longitude\": 93.41,\n" " \"north_latitude\": -8.47,\n" " \"east_longitude\": 173.35\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto concat = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(concat != nullptr); EXPECT_EQ( concat->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, geographic_crs_with_datum_ensemble) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum_ensemble\": {\n" " \"name\": \"WGS 84 ensemble\",\n" " \"members\": [\n" " {\n" " \"name\": \"World Geodetic System 1984 (Transit)\"\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G730)\"\n" " },\n" " {\n" " \"name\": \"Some unknown ensemble with unknown id\",\n" " \"id\": {\n" " \"authority\": \"UNKNOWN\",\n" " \"code\": 1234\n" " }\n" " }\n" " ],\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"accuracy\": \"2\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" "}"; auto expected_json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum_ensemble\": {\n" " \"name\": \"WGS 84 ensemble\",\n" " \"members\": [\n" " {\n" " \"name\": \"World Geodetic System 1984 (Transit)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1166\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G730)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1152\n" " }\n" " },\n" " {\n" " \"name\": \"Some unknown ensemble with unknown id\",\n" " \"id\": {\n" " \"authority\": \"UNKNOWN\",\n" " \"code\": 1234\n" " }\n" " }\n" " ],\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 7030\n" " }\n" " },\n" " \"accuracy\": \"2\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" "}"; { // No database auto obj = createFromUserInput(json, nullptr); auto gcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gcrs != nullptr); EXPECT_EQ( gcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } { auto obj = createFromUserInput(json, DatabaseContext::create()); auto gcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gcrs != nullptr); EXPECT_EQ( gcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), expected_json); } { auto obj = createFromUserInput(expected_json, DatabaseContext::create()); auto gcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(gcrs != nullptr); EXPECT_EQ( gcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), expected_json); } } // --------------------------------------------------------------------------- TEST(json_import, datum_ensemble_without_ellipsoid) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DatumEnsemble\",\n" " \"name\": \"ensemble\",\n" " \"members\": [\n" " {\n" " \"name\": \"member1\"\n" " },\n" " {\n" " \"name\": \"member2\"\n" " }\n" " ],\n" " \"accuracy\": \"2\"\n" "}"; // No database auto obj = createFromUserInput(json, nullptr); auto ensemble = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ensemble != nullptr); EXPECT_EQ( ensemble->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"EGM2008 height\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"EGM2008 geoid\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); auto datum = crs->datum(); auto datum_json = datum->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))); auto datum_obj = createFromUserInput(datum_json, nullptr); auto datum_got = nn_dynamic_pointer_cast(datum_obj); ASSERT_TRUE(datum_got != nullptr); } // --------------------------------------------------------------------------- TEST(json_import, vertical_crs_with_datum_ensemble) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"foo\",\n" " \"datum_ensemble\": {\n" " \"name\": \"ensemble\",\n" " \"members\": [\n" " {\n" " \"name\": \"member1\"\n" " },\n" " {\n" " \"name\": \"member2\"\n" " }\n" " ],\n" " \"accuracy\": \"2\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; // No database auto obj = createFromUserInput(json, nullptr); auto vcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(vcrs != nullptr); EXPECT_EQ(vcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_crs_with_geoid_model) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"CGVD2013\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"Canadian Geodetic Vertical Datum of 2013\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"geoid_model\": {\n" " \"name\": \"CGG2013\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 6648\n" " }\n" " }\n" "}"; // No database auto obj = createFromUserInput(json, nullptr); auto vcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(vcrs != nullptr); EXPECT_EQ(vcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_crs_with_geoid_models) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"CGVD2013\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"Canadian Geodetic Vertical Datum of 2013\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"geoid_models\": [\n" " {\n" " \"name\": \"CGG2013\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 6648\n" " }\n" " },\n" " {\n" " \"name\": \"other\"\n" " }\n" " ]\n" "}"; // No database auto obj = createFromUserInput(json, nullptr); auto vcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(vcrs != nullptr); EXPECT_EQ(vcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_crs_with_deformation_models) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"test\",\n" " \"datum\": {\n" " \"type\": \"DynamicVerticalReferenceFrame\",\n" " \"name\": \"test\",\n" " \"frame_reference_epoch\": 2005\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"deformation_models\": [\n" " {\n" " \"name\": \"my_model\"\n" " }\n" " ]\n" "}"; // No database auto obj = createFromUserInput(json, nullptr); auto vcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(vcrs != nullptr); EXPECT_EQ(vcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_crs_with_geoid_model_and_interpolation_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"foo\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"bar\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"geoid_model\": {\n" " \"name\": \"baz\",\n" " \"interpolation_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"NAD83(2011)\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"NAD83 (National Spatial Reference System " "2011)\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 6319\n" " }\n" " }\n" " }\n" "}"; // No database auto obj = createFromUserInput(json, nullptr); auto vcrs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(vcrs != nullptr); EXPECT_EQ(vcrs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, vertical_reference_frame_with_anchor_epoch) { // Use dummy anchor_epoch = 0 to avoid fp issues on some architectures // (cf https://github.com/OSGeo/PROJ/issues/3632) auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"my_name\",\n" " \"anchor\": \"my_anchor_definition\",\n" " \"anchor_epoch\": 0\n" "}"; auto obj = createFromUserInput(json, nullptr); auto vrf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(vrf != nullptr); EXPECT_EQ(vrf->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, parametric_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"ParametricCRS\",\n" " \"name\": \"WMO standard atmosphere layer 0\",\n" " \"datum\": {\n" " \"name\": \"Mean Sea Level\",\n" " \"anchor\": \"1013.25 hPa at 15°C\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"parametric\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Pressure\",\n" " \"abbreviation\": \"hPa\",\n" " \"direction\": \"up\",\n" " \"unit\": {\n" " \"type\": \"ParametricUnit\",\n" " \"name\": \"HectoPascal\",\n" " \"conversion_factor\": 100\n" " }\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); auto datum = crs->datum(); auto datum_json = datum->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))); auto datum_obj = createFromUserInput(datum_json, nullptr); auto datum_got = nn_dynamic_pointer_cast(datum_obj); ASSERT_TRUE(datum_got != nullptr); } // --------------------------------------------------------------------------- TEST(json_import, engineering_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"EngineeringCRS\",\n" " \"name\": \"Engineering CRS\",\n" " \"datum\": {\n" " \"name\": \"Engineering datum\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); auto datum = crs->datum(); auto datum_json = datum->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))); auto datum_obj = createFromUserInput(datum_json, nullptr); auto datum_got = nn_dynamic_pointer_cast(datum_obj); ASSERT_TRUE(datum_got != nullptr); } // --------------------------------------------------------------------------- TEST(json_import, engineering_crs_affine_CS) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"EngineeringCRS\",\n" " \"name\": \"myEngCRS\",\n" " \"datum\": {\n" " \"name\": \"myEngDatum\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"affine\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, temporal_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"TemporalCRS\",\n" " \"name\": \"Temporal CRS\",\n" " \"datum\": {\n" " \"name\": \"Gregorian calendar\",\n" " \"calendar\": \"proleptic Gregorian\",\n" " \"time_origin\": \"0000-01-01\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"TemporalDateTime\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Time\",\n" " \"abbreviation\": \"T\",\n" " \"direction\": \"future\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); auto datum = crs->datum(); auto datum_json = datum->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))); auto datum_obj = createFromUserInput(datum_json, nullptr); auto datum_got = nn_dynamic_pointer_cast(datum_obj); ASSERT_TRUE(datum_got != nullptr); } // --------------------------------------------------------------------------- TEST(json_import, derived_geodetic_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedGeodeticCRS\",\n" " \"name\": \"Derived geodetic CRS\",\n" " \"base_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"Some conversion\",\n" " \"method\": {\n" " \"name\": \"Some method\"\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"foo\",\n" " \"value\": 1,\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geocentric X\",\n" " \"abbreviation\": \"X\",\n" " \"direction\": \"geocentricX\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Geocentric Y\",\n" " \"abbreviation\": \"Y\",\n" " \"direction\": \"geocentricY\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Geocentric Z\",\n" " \"abbreviation\": \"Z\",\n" " \"direction\": \"geocentricZ\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, derived_geographic_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedGeographicCRS\",\n" " \"name\": \"WMO Atlantic Pole\",\n" " \"base_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"Atlantic pole\",\n" " \"method\": {\n" " \"name\": \"Pole rotation\"\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of rotated pole\",\n" " \"value\": 52,\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude of rotated pole\",\n" " \"value\": -30,\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Axis rotation\",\n" " \"value\": -25,\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, derived_projected_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedProjectedCRS\",\n" " \"name\": \"derived projectedCRS\",\n" " \"base_crs\": {\n" " \"type\": \"ProjectedCRS\",\n" " \"name\": \"WGS 84 / UTM zone 31N\",\n" " \"base_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"World Geodetic System 1984\",\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"UTM zone 31N\",\n" " \"method\": {\n" " \"name\": \"Transverse Mercator\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9807\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of natural origin\",\n" " \"value\": 0,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8801\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude of natural origin\",\n" " \"value\": 3,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8802\n" " }\n" " },\n" " {\n" " \"name\": \"Scale factor at natural origin\",\n" " \"value\": 0.9996,\n" " \"unit\": \"unity\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8805\n" " }\n" " },\n" " {\n" " \"name\": \"False easting\",\n" " \"value\": 500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8806\n" " }\n" " },\n" " {\n" " \"name\": \"False northing\",\n" " \"value\": 0,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8807\n" " }\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"unnamed\",\n" " \"method\": {\n" " \"name\": \"PROJ unimplemented\"\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"foo\",\n" " \"value\": 1,\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, derived_vertical_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedVerticalCRS\",\n" " \"name\": \"Derived vertCRS\",\n" " \"base_crs\": {\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"ODN height\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"Ordnance Datum Newlyn\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"unnamed\",\n" " \"method\": {\n" " \"name\": \"PROJ unimplemented\"\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"foo\",\n" " \"value\": 1,\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, derived_vertical_crs_EPSG_code_for_horizontal_CRS) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedVerticalCRS\",\n" " \"name\": \"Derived vertCRS\",\n" " \"base_crs\": {\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"ODN height\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"Ordnance Datum Newlyn\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 5101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"Conv Vertical Offset and Slope\",\n" " \"method\": {\n" " \"name\": \"Vertical Offset and Slope\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1046\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Ordinate 1 of evaluation point\",\n" " \"value\": 40.5,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8617\n" " }\n" " },\n" " {\n" " \"name\": \"EPSG code for Horizontal CRS\",\n" " \"value\": 4277,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1037\n" " }\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, DatabaseContext::create()); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); // "EPSG code for Horizontal CRS" is removed and set as interpolation CRS EXPECT_EQ(crs->derivingConversion()->parameterValues().size(), 1U); EXPECT_TRUE(crs->derivingConversion()->interpolationCRS() != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, derived_engineering_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedEngineeringCRS\",\n" " \"name\": \"Derived EngineeringCRS\",\n" " \"base_crs\": {\n" " \"type\": \"EngineeringCRS\",\n" " \"name\": \"Engineering CRS\",\n" " \"datum\": {\n" " \"name\": \"Engineering datum\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"unnamed\",\n" " \"method\": {\n" " \"name\": \"PROJ unimplemented\"\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"foo\",\n" " \"value\": 1,\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": \"metre\"\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, derived_parametric_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedParametricCRS\",\n" " \"name\": \"Derived ParametricCRS\",\n" " \"base_crs\": {\n" " \"type\": \"ParametricCRS\",\n" " \"name\": \"Parametric CRS\",\n" " \"datum\": {\n" " \"name\": \"Parametric datum\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"parametric\",\n" " \"axis\": [\n" " {\n" " \"name\": \"unknown parametric\",\n" " \"abbreviation\": \"\",\n" " \"direction\": \"unspecified\",\n" " \"unit\": {\n" " \"type\": \"ParametricUnit\",\n" " \"name\": \"unknown\",\n" " \"conversion_factor\": 1\n" " }\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"unnamed\",\n" " \"method\": {\n" " \"name\": \"PROJ unimplemented\"\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"foo\",\n" " \"value\": 1,\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"parametric\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Pressure\",\n" " \"abbreviation\": \"hPa\",\n" " \"direction\": \"up\",\n" " \"unit\": {\n" " \"type\": \"ParametricUnit\",\n" " \"name\": \"HectoPascal\",\n" " \"conversion_factor\": 100\n" " }\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, derived_temporal_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"DerivedTemporalCRS\",\n" " \"name\": \"Derived TemporalCRS\",\n" " \"base_crs\": {\n" " \"type\": \"TemporalCRS\",\n" " \"name\": \"Temporal CRS\",\n" " \"datum\": {\n" " \"name\": \"Gregorian calendar\",\n" " \"calendar\": \"proleptic Gregorian\",\n" " \"time_origin\": \"0000-01-01\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"TemporalDateTime\",\n" " \"axis\": [\n" " {\n" " \"name\": \"unknown temporal\",\n" " \"abbreviation\": \"\",\n" " \"direction\": \"future\",\n" " \"unit\": {\n" " \"type\": \"TimeUnit\",\n" " \"name\": \"unknown\",\n" " \"conversion_factor\": 1\n" " }\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"unnamed\",\n" " \"method\": {\n" " \"name\": \"PROJ unimplemented\"\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"foo\",\n" " \"value\": 1,\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"TemporalDateTime\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Time\",\n" " \"abbreviation\": \"T\",\n" " \"direction\": \"future\"\n" " }\n" " ]\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, id) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 6326,\n" " \"version\": 1,\n" " \"authority_citation\": \"my citation\",\n" " \"uri\": \"my uri\"\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto ellps = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellps != nullptr); EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, id_code_string_version_string) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": \"abc\",\n" " \"version\": \"def\",\n" " \"authority_citation\": \"my citation\",\n" " \"uri\": \"my uri\"\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto ellps = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellps != nullptr); EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, id_code_string_version_double) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": \"abc\",\n" " \"version\": 9.8,\n" " \"authority_citation\": \"my citation\",\n" " \"uri\": \"my uri\"\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto ellps = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellps != nullptr); EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, multiple_ids) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"Ellipsoid\",\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563,\n" " \"ids\": [\n" " {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4326\n" " },\n" " {\n" " \"authority\": \"FOO\",\n" " \"code\": \"BAR\"\n" " }\n" " ]\n" "}"; auto obj = createFromUserInput(json, nullptr); auto ellps = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(ellps != nullptr); EXPECT_EQ(ellps->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_export, coordinate_system_id) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"CoordinateSystem\",\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ],\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 6422\n" " }\n" "}"; auto dbContext = DatabaseContext::create(); auto obj = createFromUserInput("EPSG:4326", dbContext); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto cs = crs->coordinateSystem(); ASSERT_TRUE(cs != nullptr); EXPECT_EQ(cs->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } // --------------------------------------------------------------------------- TEST(json_import, invalid_CoordinateMetadata) { { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"CoordinateMetadata\"\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"CoordinateMetadata\",\n" " \"crs\": \"not quite a CRS...\"\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } { auto json = "{\n" " \"$schema\": " "\"https://proj.org/schemas/v0.6/projjson.schema.json\",\n" " \"type\": \"CoordinateMetadata\",\n" " \"crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"ITRF2014\",\n" " \"datum\": {\n" " \"type\": \"DynamicGeodeticReferenceFrame\",\n" " \"name\": \"International Terrestrial Reference " "Frame 2014\",\n" " \"frame_reference_epoch\": 2010,\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9000\n" " }\n" " },\n" " \"coordinateEpoch\": \"this should be a number\"\n" "}"; EXPECT_THROW(createFromUserInput(json, nullptr), ParsingException); } } // --------------------------------------------------------------------------- TEST(io, EXTENSION_PROJ4) { // Check that the PROJ string is preserved in the remarks auto obj = PROJStringParser().createFromPROJString( "+proj=utm +datum=NAD27 +zone=11 +over +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->remarks(), "PROJ CRS string: +proj=utm +datum=NAD27 +zone=11 +over"); // Chat that the PROJ string is detected when ingesting a WKT2 with // a REMARKS node that contains it auto wkt2 = crs->exportToWKT(WKTFormatter::create().get()); auto obj2 = WKTParser().createFromWKT(wkt2); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); EXPECT_EQ(crs2->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +datum=NAD27 +zone=11 +over +type=crs"); // Chat that the PROJ string is detected when ingesting a WKT2 with // a REMARKS node that contains it (in the middle of the remarks) auto wkt3 = "PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"North American Datum 1927\",\n" " ELLIPSOID[\"Clarke 1866\",6378206.4,294.978698213898,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6267]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"UTM zone 11N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-117,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",16011]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " REMARK[\"Prefix. PROJ CRS string: +proj=utm +datum=NAD27 +zone=11 " "+over. Suffix\"]]"; auto obj3 = WKTParser().createFromWKT(wkt3); auto crs3 = nn_dynamic_pointer_cast(obj3); ASSERT_TRUE(crs3 != nullptr); EXPECT_EQ(crs3->remarks(), "Prefix. PROJ CRS string: +proj=utm " "+datum=NAD27 +zone=11 +over. Suffix"); EXPECT_EQ(crs3->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +datum=NAD27 +zone=11 +over +type=crs"); } // --------------------------------------------------------------------------- TEST(wkt_parse, PointMotionOperation) { auto wkt = "POINTMOTIONOPERATION[\"Canada velocity grid v7\",\n" " SOURCECRS[\n" " GEOGCRS[\"NAD83(CSRS)v7\",\n" " DATUM[\"North American Datum of 1983 (CSRS) version 7\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",8254]]],\n" " METHOD[\"Point motion by grid (Canada NTv2_Vel)\",\n" " ID[\"EPSG\",1070]],\n" " PARAMETERFILE[\"Point motion velocity grid file\",\"foo.tif\"],\n" " OPERATIONACCURACY[0.01],\n" " USAGE[\n" " SCOPE[\"scope\"],\n" " AREA[\"area\"],\n" " BBOX[38.21,-141.01,86.46,-40.73]],\n" " ID[\"DERIVED_FROM(EPSG)\",9483],\n" " REMARK[\"remark.\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto pmo = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(pmo != nullptr); EXPECT_EQ( pmo->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt); } // --------------------------------------------------------------------------- TEST(json_import, PointMotionOperation) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"PointMotionOperation\",\n" " \"name\": \"Canada velocity grid v7\",\n" " \"source_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"NAD83(CSRS)v7\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"North American Datum of 1983 (CSRS) version 7\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8254\n" " }\n" " },\n" " \"method\": {\n" " \"name\": \"Point motion by grid (Canada NTv2_Vel)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1070\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Point motion velocity grid file\",\n" " \"value\": \"foo.tif\"\n" " }\n" " ],\n" " \"accuracy\": \"0.01\",\n" " \"scope\": \"scope\",\n" " \"area\": \"area\",\n" " \"bbox\": {\n" " \"south_latitude\": 38.21,\n" " \"west_longitude\": -141.01,\n" " \"north_latitude\": 86.46,\n" " \"east_longitude\": -40.73\n" " },\n" " \"id\": {\n" " \"authority\": \"DERIVED_FROM(EPSG)\",\n" " \"code\": 9483\n" " },\n" " \"remarks\": \"remark.\"\n" "}"; auto obj = createFromUserInput(json, nullptr); auto pmo = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(pmo != nullptr); EXPECT_EQ(pmo->exportToJSON(&(JSONFormatter::create()->setSchema("foo"))), json); } proj-9.6.0/test/unit/test_metadata.cpp000664 001754 001755 00000052315 14764566077 017710 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" using namespace osgeo::proj::io; using namespace osgeo::proj::metadata; using namespace osgeo::proj::util; // --------------------------------------------------------------------------- TEST(metadata, citation) { Citation c("my citation"); Citation c2(c); ASSERT_TRUE(c2.title().has_value()); ASSERT_EQ(*(c2.title()), "my citation"); } // --------------------------------------------------------------------------- static bool equals(ExtentNNPtr extent1, ExtentNNPtr extent2) { return extent1->contains(extent2) && extent2->contains(extent1); } static bool equals(GeographicExtentNNPtr extent1, GeographicExtentNNPtr extent2) { return extent1->contains(extent2) && extent2->contains(extent1); } static GeographicExtentNNPtr getBBox(ExtentNNPtr extent) { assert(extent->geographicElements().size() == 1); return extent->geographicElements()[0]; } TEST(metadata, extent) { Extent::create( optional(), std::vector(), std::vector(), std::vector()); auto world = Extent::createFromBBOX(-180, -90, 180, 90); EXPECT_TRUE(world->isEquivalentTo(world.get())); EXPECT_TRUE(world->contains(world)); auto west_hemisphere = Extent::createFromBBOX(-180, -90, 0, 90); EXPECT_TRUE(!world->isEquivalentTo(west_hemisphere.get())); EXPECT_TRUE(world->contains(west_hemisphere)); EXPECT_TRUE(!west_hemisphere->contains(world)); auto world_inter_world = world->intersection(world); ASSERT_TRUE(world_inter_world != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(world_inter_world), world)); auto france = Extent::createFromBBOX(-5, 40, 12, 51); EXPECT_TRUE(france->contains(france)); EXPECT_TRUE(world->contains(france)); EXPECT_TRUE(!france->contains( world)); // We are only speaking about geography here ;-) EXPECT_TRUE(world->intersects(france)); EXPECT_TRUE(france->intersects(world)); auto france_inter_france = france->intersection(france); ASSERT_TRUE(france_inter_france != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(france_inter_france), france)); auto france_inter_world = france->intersection(world); ASSERT_TRUE(france_inter_world != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(france_inter_world), france)); auto world_inter_france = world->intersection(france); ASSERT_TRUE(world_inter_france != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(world_inter_france), france)); auto france_shifted = Extent::createFromBBOX(-5 + 5, 40 + 5, 12 + 5, 51 + 5); EXPECT_TRUE(france->intersects(france_shifted)); EXPECT_TRUE(france_shifted->intersects(france)); EXPECT_TRUE(!france->contains(france_shifted)); EXPECT_TRUE(!france_shifted->contains(france)); auto europe = Extent::createFromBBOX(-30, 25, 30, 70); EXPECT_TRUE(europe->contains(france)); EXPECT_TRUE(!france->contains(europe)); auto france_inter_europe = france->intersection(europe); ASSERT_TRUE(france_inter_europe != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(france_inter_europe), france)); auto europe_intersects_france = europe->intersection(france); ASSERT_TRUE(europe_intersects_france != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(europe_intersects_france), france)); auto nz = Extent::createFromBBOX(155.0, -60.0, -170.0, -25.0); EXPECT_TRUE(nz->contains(nz)); EXPECT_TRUE(world->contains(nz)); EXPECT_TRUE(nz->intersects(world)); EXPECT_TRUE(world->intersects(nz)); EXPECT_TRUE(!nz->contains(world)); EXPECT_TRUE(!nz->contains(france)); EXPECT_TRUE(!france->contains(nz)); EXPECT_TRUE(!nz->intersects(france)); EXPECT_TRUE(!france->intersects(nz)); { auto nz_inter_world = nz->intersection(world); ASSERT_TRUE(nz_inter_world != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_inter_world), nz)); } { auto nz_inter_world = getBBox(nz)->intersection(getBBox(world)); ASSERT_TRUE(nz_inter_world != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_inter_world), getBBox(nz))); } { auto world_inter_nz = world->intersection(nz); ASSERT_TRUE(world_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(world_inter_nz), nz)); } { auto world_inter_nz = getBBox(world)->intersection(getBBox(nz)); ASSERT_TRUE(world_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(world_inter_nz), getBBox(nz))); } EXPECT_TRUE(nz->intersection(france) == nullptr); EXPECT_TRUE(france->intersection(nz) == nullptr); auto bbox_antimeridian_north = Extent::createFromBBOX(155.0, 10.0, -170.0, 30.0); EXPECT_TRUE(!nz->contains(bbox_antimeridian_north)); EXPECT_TRUE(!bbox_antimeridian_north->contains(nz)); EXPECT_TRUE(!nz->intersects(bbox_antimeridian_north)); EXPECT_TRUE(!bbox_antimeridian_north->intersects(nz)); EXPECT_TRUE(!nz->intersection(bbox_antimeridian_north)); EXPECT_TRUE(!bbox_antimeridian_north->intersection(nz)); auto nz_pos_long = Extent::createFromBBOX(155.0, -60.0, 180.0, -25.0); EXPECT_TRUE(nz->contains(nz_pos_long)); EXPECT_TRUE(!nz_pos_long->contains(nz)); EXPECT_TRUE(nz->intersects(nz_pos_long)); EXPECT_TRUE(nz_pos_long->intersects(nz)); auto nz_inter_nz_pos_long = nz->intersection(nz_pos_long); ASSERT_TRUE(nz_inter_nz_pos_long != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_inter_nz_pos_long), nz_pos_long)); auto nz_pos_long_inter_nz = nz_pos_long->intersection(nz); ASSERT_TRUE(nz_pos_long_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_pos_long_inter_nz), nz_pos_long)); auto nz_neg_long = Extent::createFromBBOX(-180.0, -60.0, -170.0, -25.0); EXPECT_TRUE(nz->contains(nz_neg_long)); EXPECT_TRUE(!nz_neg_long->contains(nz)); EXPECT_TRUE(nz->intersects(nz_neg_long)); EXPECT_TRUE(nz_neg_long->intersects(nz)); auto nz_inter_nz_neg_long = nz->intersection(nz_neg_long); ASSERT_TRUE(nz_inter_nz_neg_long != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_inter_nz_neg_long), nz_neg_long)); auto nz_neg_long_inter_nz = nz_neg_long->intersection(nz); ASSERT_TRUE(nz_neg_long_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_neg_long_inter_nz), nz_neg_long)); auto nz_smaller = Extent::createFromBBOX(160, -55.0, -175.0, -30.0); EXPECT_TRUE(nz->contains(nz_smaller)); EXPECT_TRUE(!nz_smaller->contains(nz)); auto nz_pos_long_shifted_west = Extent::createFromBBOX(150.0, -60.0, 175.0, -25.0); EXPECT_TRUE(!nz->contains(nz_pos_long_shifted_west)); EXPECT_TRUE(!nz_pos_long_shifted_west->contains(nz)); EXPECT_TRUE(nz->intersects(nz_pos_long_shifted_west)); EXPECT_TRUE(nz_pos_long_shifted_west->intersects(nz)); auto nz_smaller_shifted = Extent::createFromBBOX(165, -60.0, -170.0, -25.0); EXPECT_TRUE(!nz_smaller->contains(nz_smaller_shifted)); EXPECT_TRUE(!nz_smaller_shifted->contains(nz_smaller)); EXPECT_TRUE(nz_smaller->intersects(nz_smaller_shifted)); EXPECT_TRUE(nz_smaller_shifted->intersects(nz_smaller)); auto nz_shifted = Extent::createFromBBOX(165.0, -60.0, -160.0, -25.0); auto nz_intersect_nz_shifted = nz->intersection(nz_shifted); ASSERT_TRUE(nz_intersect_nz_shifted != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_intersect_nz_shifted), Extent::createFromBBOX(165, -60.0, -170.0, -25.0))); auto nz_inter_nz_smaller = nz->intersection(nz_smaller); ASSERT_TRUE(nz_inter_nz_smaller != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_inter_nz_smaller), nz_smaller)); auto nz_smaller_inter_nz = nz_smaller->intersection(nz); ASSERT_TRUE(nz_smaller_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_smaller_inter_nz), nz_smaller)); auto world_smaller = Extent::createFromBBOX(-179, -90, 179, 90); EXPECT_TRUE(!world_smaller->contains(nz)); EXPECT_TRUE(!nz->contains(world_smaller)); auto nz_inter_world_smaller = nz->intersection(world_smaller); ASSERT_TRUE(nz_inter_world_smaller != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_inter_world_smaller), Extent::createFromBBOX(155, -60, 179, -25))); auto world_smaller_inter_nz = world_smaller->intersection(nz); ASSERT_TRUE(world_smaller_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(world_smaller_inter_nz), Extent::createFromBBOX(155, -60, 179, -25))); auto world_smaller_east = Extent::createFromBBOX(-179, -90, 150, 90); EXPECT_TRUE(!world_smaller_east->contains(nz)); EXPECT_TRUE(!nz->contains(world_smaller_east)); auto nz_inter_world_smaller_east = nz->intersection(world_smaller_east); ASSERT_TRUE(nz_inter_world_smaller_east != nullptr); EXPECT_EQ(nn_dynamic_pointer_cast( nz_inter_world_smaller_east->geographicElements()[0]) ->westBoundLongitude(), -179); EXPECT_EQ(nn_dynamic_pointer_cast( nz_inter_world_smaller_east->geographicElements()[0]) ->eastBoundLongitude(), -170); EXPECT_TRUE(equals(NN_CHECK_ASSERT(nz_inter_world_smaller_east), Extent::createFromBBOX(-179, -60, -170, -25))); auto world_smaller_east_inter_nz = world_smaller_east->intersection(nz); ASSERT_TRUE(world_smaller_east_inter_nz != nullptr); EXPECT_EQ(nn_dynamic_pointer_cast( world_smaller_east_inter_nz->geographicElements()[0]) ->westBoundLongitude(), -179); EXPECT_EQ(nn_dynamic_pointer_cast( world_smaller_east_inter_nz->geographicElements()[0]) ->eastBoundLongitude(), -170); EXPECT_TRUE(equals(NN_CHECK_ASSERT(world_smaller_east_inter_nz), Extent::createFromBBOX(-179, -60, -170, -25))); auto east_hemisphere = Extent::createFromBBOX(0, -90, 180, 90); auto east_hemisphere_inter_nz = east_hemisphere->intersection(nz); ASSERT_TRUE(east_hemisphere_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(east_hemisphere_inter_nz), Extent::createFromBBOX(155.0, -60.0, 180.0, -25.0))); auto minus_180_to_156 = Extent::createFromBBOX(-180, -90, 156, 90); auto minus_180_to_156_inter_nz = minus_180_to_156->intersection(nz); ASSERT_TRUE(minus_180_to_156_inter_nz != nullptr); EXPECT_TRUE(equals(NN_CHECK_ASSERT(minus_180_to_156_inter_nz), Extent::createFromBBOX(-180.0, -60.0, -170.0, -25.0))); } // --------------------------------------------------------------------------- TEST(metadata, extent_edge_cases) { Extent::create( optional(), std::vector(), std::vector(), std::vector()); EXPECT_THROW(Extent::createFromBBOX( std::numeric_limits::quiet_NaN(), -90, 180, 90), InvalidValueTypeException); EXPECT_THROW(Extent::createFromBBOX( -180, std::numeric_limits::quiet_NaN(), 180, 90), InvalidValueTypeException); EXPECT_THROW(Extent::createFromBBOX( -180, -90, std::numeric_limits::quiet_NaN(), 90), InvalidValueTypeException); EXPECT_THROW(Extent::createFromBBOX( -180, -90, 180, std::numeric_limits::quiet_NaN()), InvalidValueTypeException); // South > north EXPECT_THROW(Extent::createFromBBOX(-100, 10, 100, 0), InvalidValueTypeException); // Scenario of https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57328 // and https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=60084 { auto A = Extent::createFromBBOX(0, 1, 2, 3); auto B = Extent::createFromBBOX(200, -80, -100, 80); EXPECT_FALSE(A->intersects(B)); EXPECT_FALSE(B->intersects(A)); EXPECT_TRUE(A->intersection(B) == nullptr); EXPECT_TRUE(B->intersection(A) == nullptr); } { auto A = Extent::createFromBBOX(0, 1, 2, 3); auto B = Extent::createFromBBOX(100, -80, -200, 80); EXPECT_FALSE(A->intersects(B)); EXPECT_FALSE(B->intersects(A)); EXPECT_TRUE(A->intersection(B) == nullptr); EXPECT_TRUE(B->intersection(A) == nullptr); } // Test degenerate bounding box on a point { auto A = Extent::createFromBBOX(1, 2, 1, 2); auto B = Extent::createFromBBOX(-10, -10, 10, 10); EXPECT_TRUE(A->intersects(B)); EXPECT_TRUE(B->intersects(A)); EXPECT_FALSE(A->contains(B)); EXPECT_TRUE(B->contains(A)); EXPECT_TRUE(A->intersection(B) != nullptr); EXPECT_TRUE(B->intersection(A) != nullptr); } // Test degenerate bounding box on a line at long=-180 { auto A = Extent::createFromBBOX(-180, 2, -180, 3); auto B = Extent::createFromBBOX(-180, -90, 180, 90); EXPECT_TRUE(A->intersects(B)); EXPECT_TRUE(B->intersects(A)); EXPECT_FALSE(A->contains(B)); EXPECT_TRUE(B->contains(A)); EXPECT_TRUE(A->intersection(B) != nullptr); EXPECT_TRUE(B->intersection(A) != nullptr); } // Test degenerate bounding box on a line at long=180 { auto A = Extent::createFromBBOX(180, 2, 180, 3); auto B = Extent::createFromBBOX(-180, -90, 180, 90); EXPECT_TRUE(A->intersects(B)); EXPECT_TRUE(B->intersects(A)); EXPECT_FALSE(A->contains(B)); EXPECT_TRUE(B->contains(A)); EXPECT_TRUE(A->intersection(B) != nullptr); EXPECT_TRUE(B->intersection(A) != nullptr); } // Test degenerate bounding box on a line at lat=90 { auto A = Extent::createFromBBOX(2, 90, 3, 90); auto B = Extent::createFromBBOX(-180, -90, 180, 90); EXPECT_TRUE(A->intersects(B)); EXPECT_TRUE(B->intersects(A)); EXPECT_FALSE(A->contains(B)); EXPECT_TRUE(B->contains(A)); EXPECT_TRUE(A->intersection(B) != nullptr); EXPECT_TRUE(B->intersection(A) != nullptr); } // Test degenerate bounding box on a line at lat=-90 { auto A = Extent::createFromBBOX(2, -90, 3, -90); auto B = Extent::createFromBBOX(-180, -90, 180, 90); EXPECT_TRUE(A->intersects(B)); EXPECT_TRUE(B->intersects(A)); EXPECT_FALSE(A->contains(B)); EXPECT_TRUE(B->contains(A)); EXPECT_TRUE(A->intersection(B) != nullptr); EXPECT_TRUE(B->intersection(A) != nullptr); } } // --------------------------------------------------------------------------- TEST(metadata, identifier_empty) { auto id(Identifier::create()); Identifier id2(*id); ASSERT_TRUE(!id2.authority().has_value()); ASSERT_TRUE(id2.code().empty()); ASSERT_TRUE(!id2.codeSpace().has_value()); ASSERT_TRUE(!id2.version().has_value()); ASSERT_TRUE(!id2.description().has_value()); } // --------------------------------------------------------------------------- TEST(metadata, identifier_properties) { PropertyMap properties; properties.set(Identifier::AUTHORITY_KEY, "authority"); properties.set(Identifier::CODESPACE_KEY, "codespace"); properties.set(Identifier::VERSION_KEY, "version"); properties.set(Identifier::DESCRIPTION_KEY, "description"); auto id(Identifier::create("my code", properties)); Identifier id2(*id); ASSERT_TRUE(id2.authority().has_value()); ASSERT_EQ(*(id2.authority()->title()), "authority"); ASSERT_EQ(id2.code(), "my code"); ASSERT_TRUE(id2.codeSpace().has_value()); ASSERT_EQ(*(id2.codeSpace()), "codespace"); ASSERT_TRUE(id2.version().has_value()); ASSERT_EQ(*(id2.version()), "version"); ASSERT_TRUE(id2.description().has_value()); ASSERT_EQ(*(id2.description()), "description"); } // --------------------------------------------------------------------------- TEST(metadata, identifier_code_integer) { PropertyMap properties; properties.set(Identifier::CODE_KEY, 1234); auto id(Identifier::create(std::string(), properties)); ASSERT_EQ(id->code(), "1234"); } // --------------------------------------------------------------------------- TEST(metadata, identifier_code_string) { PropertyMap properties; properties.set(Identifier::CODE_KEY, "1234"); auto id(Identifier::create(std::string(), properties)); ASSERT_EQ(id->code(), "1234"); } // --------------------------------------------------------------------------- TEST(metadata, identifier_code_invalid_type) { PropertyMap properties; properties.set(Identifier::CODE_KEY, true); ASSERT_THROW(Identifier::create(std::string(), properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(metadata, identifier_authority_citation) { PropertyMap properties; properties.set(Identifier::AUTHORITY_KEY, nn_make_shared("authority")); auto id(Identifier::create(std::string(), properties)); ASSERT_TRUE(id->authority().has_value()); ASSERT_EQ(*(id->authority()->title()), "authority"); } // --------------------------------------------------------------------------- TEST(metadata, identifier_authority_invalid_type) { PropertyMap properties; properties.set(Identifier::AUTHORITY_KEY, true); ASSERT_THROW(Identifier::create(std::string(), properties), InvalidValueTypeException); } // --------------------------------------------------------------------------- TEST(metadata, id) { auto in_wkt = "ID[\"EPSG\",4946,1.5,\n" " CITATION[\"my citation\"],\n" " URI[\"urn:ogc:def:crs:EPSG::4946\"]]"; auto id = nn_dynamic_pointer_cast(WKTParser().createFromWKT(in_wkt)); ASSERT_TRUE(id != nullptr); EXPECT_TRUE(id->authority().has_value()); EXPECT_EQ(*(id->authority()->title()), "my citation"); EXPECT_EQ(*(id->codeSpace()), "EPSG"); EXPECT_EQ(id->code(), "4946"); EXPECT_TRUE(id->version().has_value()); EXPECT_EQ(*(id->version()), "1.5"); EXPECT_TRUE(id->uri().has_value()); EXPECT_EQ(*(id->uri()), "urn:ogc:def:crs:EPSG::4946"); auto got_wkt = id->exportToWKT(WKTFormatter::create().get()); EXPECT_EQ(got_wkt, in_wkt); } // --------------------------------------------------------------------------- TEST(metadata, Identifier_isEquivalentName) { EXPECT_TRUE(Identifier::isEquivalentName("", "")); EXPECT_TRUE(Identifier::isEquivalentName("x", "x")); EXPECT_TRUE(Identifier::isEquivalentName("x", "X")); EXPECT_TRUE(Identifier::isEquivalentName("X", "x")); EXPECT_FALSE(Identifier::isEquivalentName("x", "")); EXPECT_FALSE(Identifier::isEquivalentName("", "x")); EXPECT_FALSE(Identifier::isEquivalentName("x", "y")); EXPECT_TRUE(Identifier::isEquivalentName("Central_Meridian", "Central_- ()/Meridian")); EXPECT_TRUE(Identifier::isEquivalentName("\xc3\xa1", "a")); EXPECT_FALSE(Identifier::isEquivalentName("\xc3", "a")); EXPECT_TRUE(Identifier::isEquivalentName("a", "\xc3\xa1")); EXPECT_FALSE(Identifier::isEquivalentName("a", "\xc3")); EXPECT_TRUE(Identifier::isEquivalentName("\xc3\xa4", "\xc3\xa1")); EXPECT_TRUE(Identifier::isEquivalentName( "Unknown based on International 1924 (Hayford 1909, 1910) ellipsoid", "Unknown_based_on_International_1924_Hayford_1909_1910_ellipsoid")); EXPECT_TRUE(Identifier::isEquivalentName("foo + ", "foo + ")); EXPECT_TRUE(Identifier::isEquivalentName("foo + bar", "foo + bar")); EXPECT_TRUE(Identifier::isEquivalentName("foo + bar", "foobar")); } proj-9.6.0/test/unit/test_misc.cpp000664 001754 001755 00000004342 14764566077 017060 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2021, 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 "gtest_include.h" #include "proj.h" namespace { TEST(misc, version) { EXPECT_EQ(PROJ_COMPUTE_VERSION(2200, 98, 76), 22009876); EXPECT_EQ(PROJ_VERSION_NUMBER, PROJ_VERSION_MAJOR * 10000 + PROJ_VERSION_MINOR * 100 + PROJ_VERSION_PATCH); EXPECT_TRUE(PROJ_AT_LEAST_VERSION(PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR, PROJ_VERSION_PATCH)); EXPECT_TRUE(PROJ_AT_LEAST_VERSION(PROJ_VERSION_MAJOR - 1, PROJ_VERSION_MINOR, PROJ_VERSION_PATCH)); EXPECT_FALSE(PROJ_AT_LEAST_VERSION(PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR, PROJ_VERSION_PATCH + 1)); } } // namespace proj-9.6.0/test/unit/test_network.cpp000664 001754 001755 00000227441 14764566077 017625 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test networking * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2019, 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 "gtest_include.h" #include #include #include #include "proj_internal.h" #include #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/internal/io_internal.hpp" #include #include #ifdef CURL_ENABLED #include #endif #ifdef _WIN32 #include #else #include #endif namespace { static const int byte_order_test = 1; #define IS_LSB \ (1 == (reinterpret_cast(&byte_order_test))[0]) static void swap_words(void *dataIn, size_t word_size, size_t word_count) { unsigned char *data = static_cast(dataIn); for (size_t word = 0; word < word_count; word++) { for (size_t i = 0; i < word_size / 2; i++) { unsigned char t; t = data[i]; data[i] = data[word_size - i - 1]; data[word_size - i - 1] = t; } data += word_size; } } // --------------------------------------------------------------------------- #ifdef CURL_ENABLED static bool networkAccessOK = false; static size_t noop_curl_write_func(void *, size_t, size_t nmemb, void *) { return nmemb; } TEST(networking, initial_check) { CURL *hCurlHandle = curl_easy_init(); if (!hCurlHandle) return; curl_easy_setopt(hCurlHandle, CURLOPT_URL, "https://cdn.proj.org/fr_ign_ntf_r93.tif"); curl_easy_setopt(hCurlHandle, CURLOPT_RANGE, "0-1"); curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, noop_curl_write_func); curl_easy_perform(hCurlHandle); long response_code = 0; curl_easy_getinfo(hCurlHandle, CURLINFO_HTTP_CODE, &response_code); curl_easy_cleanup(hCurlHandle); networkAccessOK = (response_code == 206); if (!networkAccessOK) { fprintf(stderr, "network access not working"); } } #endif // --------------------------------------------------------------------------- static void silent_logger(void *, int, const char *) {} // --------------------------------------------------------------------------- TEST(networking, basic) { const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=https://cdn.proj.org/fr_ign_ntf_r93.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; // network access disabled by default auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_log_func(ctx, nullptr, silent_logger); auto P = proj_create(ctx, pipeline); ASSERT_EQ(P, nullptr); proj_context_destroy(ctx); proj_cleanup(); #ifdef CURL_ENABLED // enable through env variable putenv(const_cast("PROJ_NETWORK=ON")); ctx = proj_context_create(); P = proj_create(ctx, pipeline); if (networkAccessOK) { ASSERT_NE(P, nullptr); } proj_destroy(P); proj_context_destroy(ctx); putenv(const_cast("PROJ_NETWORK=")); #endif proj_cleanup(); // still disabled ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_log_func(ctx, nullptr, silent_logger); P = proj_create(ctx, pipeline); ASSERT_EQ(P, nullptr); proj_context_destroy(ctx); proj_cleanup(); // enable through API ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); P = proj_create(ctx, pipeline); #ifdef CURL_ENABLED if (networkAccessOK) { ASSERT_NE(P, nullptr); } else { ASSERT_EQ(P, nullptr); proj_context_destroy(ctx); return; } double longitude = 2; double lat = 49; proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, nullptr, 0, 0, nullptr, 0, 0); EXPECT_NEAR(longitude, 1.9992776848, 1e-10); EXPECT_NEAR(lat, 48.9999322600, 1e-10); proj_destroy(P); #else ASSERT_EQ(P, nullptr); #endif proj_context_destroy(ctx); proj_cleanup(); } // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, curl_invalid_resource) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); proj_log_func(ctx, nullptr, silent_logger); auto P = proj_create( ctx, "+proj=hgridshift +grids=https://i_do_not.exist/my.tif"); proj_context_destroy(ctx); ASSERT_EQ(P, nullptr); } #endif // --------------------------------------------------------------------------- struct Event { virtual ~Event(); std::string type{}; PJ_CONTEXT *ctx = nullptr; }; Event::~Event() = default; struct OpenEvent : public Event { OpenEvent() { type = "OpenEvent"; } std::string url{}; unsigned long long offset = 0; size_t size_to_read = 0; std::vector response{}; std::string errorMsg{}; int file_id = 0; }; struct CloseEvent : public Event { CloseEvent() { type = "CloseEvent"; } int file_id = 0; }; struct GetHeaderValueEvent : public Event { GetHeaderValueEvent() { type = "GetHeaderValueEvent"; } int file_id = 0; std::string key{}; std::string value{}; }; struct ReadRangeEvent : public Event { ReadRangeEvent() { type = "ReadRangeEvent"; } unsigned long long offset = 0; size_t size_to_read = 0; std::vector response{}; std::string errorMsg{}; int file_id = 0; }; struct File {}; struct ExchangeWithCallback { std::vector> events{}; size_t nextEvent = 0; bool error = false; std::map mapIdToHandle{}; bool allConsumedAndNoError() const { return nextEvent == events.size() && !error; } }; static PROJ_NETWORK_HANDLE *open_cbk(PJ_CONTEXT *ctx, const char *url, unsigned long long offset, size_t size_to_read, void *buffer, size_t *out_size_read, size_t error_string_max_size, char *out_error_string, void *user_data) { auto exchange = static_cast(user_data); if (exchange->error) return nullptr; if (exchange->nextEvent >= exchange->events.size()) { fprintf(stderr, "unexpected call to open(%s, %ld, %ld)\n", url, (long)offset, (long)size_to_read); exchange->error = true; return nullptr; } auto openEvent = dynamic_cast(exchange->events[exchange->nextEvent].get()); if (!openEvent) { fprintf(stderr, "unexpected call to open(%s, %ld, %ld). " "Was expecting a %s event\n", url, (long)offset, (long)size_to_read, exchange->events[exchange->nextEvent]->type.c_str()); exchange->error = true; return nullptr; } exchange->nextEvent++; if (openEvent->ctx != ctx || openEvent->url != url || openEvent->offset != offset || openEvent->size_to_read != size_to_read) { fprintf(stderr, "wrong call to open(%s, %ld, %ld). Was expecting " "open(%s, %ld, %ld)\n", url, (long)offset, (long)size_to_read, openEvent->url.c_str(), (long)openEvent->offset, (long)openEvent->size_to_read); exchange->error = true; return nullptr; } if (!openEvent->errorMsg.empty()) { snprintf(out_error_string, error_string_max_size, "%s", openEvent->errorMsg.c_str()); return nullptr; } memcpy(buffer, openEvent->response.data(), openEvent->response.size()); *out_size_read = openEvent->response.size(); auto handle = reinterpret_cast(new File()); exchange->mapIdToHandle[openEvent->file_id] = handle; return handle; } static void close_cbk(PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, void *user_data) { auto exchange = static_cast(user_data); if (exchange->error) return; if (exchange->nextEvent >= exchange->events.size()) { fprintf(stderr, "unexpected call to close()\n"); exchange->error = true; return; } auto closeEvent = dynamic_cast(exchange->events[exchange->nextEvent].get()); if (!closeEvent) { fprintf(stderr, "unexpected call to close(). " "Was expecting a %s event\n", exchange->events[exchange->nextEvent]->type.c_str()); exchange->error = true; return; } if (closeEvent->ctx != ctx) { fprintf(stderr, "close() called with bad context\n"); exchange->error = true; return; } if (exchange->mapIdToHandle[closeEvent->file_id] != handle) { fprintf(stderr, "close() called with bad handle\n"); exchange->error = true; return; } exchange->nextEvent++; delete reinterpret_cast(handle); } static const char *get_header_value_cbk(PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, const char *header_name, void *user_data) { auto exchange = static_cast(user_data); if (exchange->error) return nullptr; if (exchange->nextEvent >= exchange->events.size()) { fprintf(stderr, "unexpected call to get_header_value()\n"); exchange->error = true; return nullptr; } auto getHeaderValueEvent = dynamic_cast( exchange->events[exchange->nextEvent].get()); if (!getHeaderValueEvent) { fprintf(stderr, "unexpected call to get_header_value(). " "Was expecting a %s event\n", exchange->events[exchange->nextEvent]->type.c_str()); exchange->error = true; return nullptr; } if (getHeaderValueEvent->ctx != ctx) { fprintf(stderr, "get_header_value() called with bad context\n"); exchange->error = true; return nullptr; } if (getHeaderValueEvent->key != header_name) { fprintf(stderr, "wrong call to get_header_value(%s). Was expecting " "get_header_value(%s)\n", header_name, getHeaderValueEvent->key.c_str()); exchange->error = true; return nullptr; } if (exchange->mapIdToHandle[getHeaderValueEvent->file_id] != handle) { fprintf(stderr, "get_header_value() called with bad handle\n"); exchange->error = true; return nullptr; } exchange->nextEvent++; return getHeaderValueEvent->value.c_str(); } static size_t read_range_cbk(PJ_CONTEXT *ctx, PROJ_NETWORK_HANDLE *handle, unsigned long long offset, size_t size_to_read, void *buffer, size_t error_string_max_size, char *out_error_string, void *user_data) { auto exchange = static_cast(user_data); if (exchange->error) return 0; if (exchange->nextEvent >= exchange->events.size()) { fprintf(stderr, "unexpected call to read_range(%ld, %ld)\n", (long)offset, (long)size_to_read); exchange->error = true; return 0; } auto readRangeEvent = dynamic_cast( exchange->events[exchange->nextEvent].get()); if (!readRangeEvent) { fprintf(stderr, "unexpected call to read_range(). " "Was expecting a %s event\n", exchange->events[exchange->nextEvent]->type.c_str()); exchange->error = true; return 0; } if (exchange->mapIdToHandle[readRangeEvent->file_id] != handle) { fprintf(stderr, "read_range() called with bad handle\n"); exchange->error = true; return 0; } if (readRangeEvent->ctx != ctx || readRangeEvent->offset != offset || readRangeEvent->size_to_read != size_to_read) { fprintf(stderr, "wrong call to read_range(%ld, %ld). Was expecting " "read_range(%ld, %ld)\n", (long)offset, (long)size_to_read, (long)readRangeEvent->offset, (long)readRangeEvent->size_to_read); exchange->error = true; return 0; } exchange->nextEvent++; if (!readRangeEvent->errorMsg.empty()) { snprintf(out_error_string, error_string_max_size, "%s", readRangeEvent->errorMsg.c_str()); return 0; } memcpy(buffer, readRangeEvent->response.data(), readRangeEvent->response.size()); return readRangeEvent->response.size(); } TEST(networking, custom) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); ExchangeWithCallback exchange; ASSERT_TRUE(proj_context_set_network_callbacks(ctx, open_cbk, close_cbk, get_header_value_cbk, read_range_cbk, &exchange)); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/my.tif"; event->offset = 0; event->size_to_read = 16384; event->response.resize(16384); event->file_id = 1; const char *proj_source_data = getenv("PROJ_SOURCE_DATA"); ASSERT_TRUE(proj_source_data != nullptr); std::string filename(proj_source_data); filename += "/tests/egm96_15_uncompressed_truncated.tif"; FILE *f = fopen(filename.c_str(), "rb"); ASSERT_TRUE(f != nullptr); ASSERT_EQ(fread(&event->response[0], 1, 956, f), 956U); fclose(f); exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } auto P = proj_create( ctx, "+proj=vgridshift +grids=https://foo/my.tif +multiplier=1"); ASSERT_NE(P, nullptr); ASSERT_TRUE(exchange.allConsumedAndNoError()); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/my.tif"; event->offset = 524288; event->size_to_read = 278528; event->response.resize(278528); event->file_id = 2; float f = 1.25; if (!IS_LSB) { swap_words(&f, sizeof(f), 1); } for (size_t i = 0; i < 278528 / sizeof(float); i++) { memcpy(&event->response[i * sizeof(float)], &f, sizeof(float)); } exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { double longitude = 2 / 180. * M_PI; double lat = 49 / 180. * M_PI; double z = 0; ASSERT_EQ(proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0), 1U); EXPECT_EQ(z, 1.25); } ASSERT_TRUE(exchange.allConsumedAndNoError()); { std::unique_ptr event(new ReadRangeEvent()); event->ctx = ctx; event->offset = 3670016; event->size_to_read = 278528; event->response.resize(278528); event->file_id = 2; float f = 2.25; if (!IS_LSB) { swap_words(&f, sizeof(f), 1); } for (size_t i = 0; i < 278528 / sizeof(float); i++) { memcpy(&event->response[i * sizeof(float)], &f, sizeof(float)); } exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { double longitude = 2 / 180. * M_PI; double lat = -49 / 180. * M_PI; double z = 0; ASSERT_EQ(proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0), 1U); EXPECT_EQ(z, 2.25); } { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } proj_destroy(P); ASSERT_TRUE(exchange.allConsumedAndNoError()); // Once again ! No network access P = proj_create(ctx, "+proj=vgridshift +grids=https://foo/my.tif +multiplier=1"); ASSERT_NE(P, nullptr); { double longitude = 2 / 180. * M_PI; double lat = 49 / 180. * M_PI; double z = 0; ASSERT_EQ(proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0), 1U); EXPECT_EQ(z, 1.25); } proj_destroy(P); ASSERT_TRUE(exchange.allConsumedAndNoError()); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, getfilesize) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); ExchangeWithCallback exchange; ASSERT_TRUE(proj_context_set_network_callbacks(ctx, open_cbk, close_cbk, get_header_value_cbk, read_range_cbk, &exchange)); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/getfilesize.tif"; event->offset = 0; event->size_to_read = 16384; event->response.resize(16384); event->file_id = 1; const char *proj_source_data = getenv("PROJ_SOURCE_DATA"); ASSERT_TRUE(proj_source_data != nullptr); std::string filename(proj_source_data); filename += "/tests/test_vgrid_single_strip_truncated.tif"; FILE *f = fopen(filename.c_str(), "rb"); ASSERT_TRUE(f != nullptr); ASSERT_EQ(fread(&event->response[0], 1, 550, f), 550U); fclose(f); exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes 0-16383/4153510"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } auto P = proj_create( ctx, "+proj=vgridshift +grids=https://foo/getfilesize.tif +multiplier=1"); ASSERT_NE(P, nullptr); ASSERT_TRUE(exchange.allConsumedAndNoError()); proj_destroy(P); P = proj_create( ctx, "+proj=vgridshift +grids=https://foo/getfilesize.tif +multiplier=1"); ASSERT_NE(P, nullptr); ASSERT_TRUE(exchange.allConsumedAndNoError()); proj_destroy(P); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, simul_open_error) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_log_func(ctx, nullptr, silent_logger); proj_context_set_enable_network(ctx, true); ExchangeWithCallback exchange; ASSERT_TRUE(proj_context_set_network_callbacks(ctx, open_cbk, close_cbk, get_header_value_cbk, read_range_cbk, &exchange)); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/open_error.tif"; event->offset = 0; event->size_to_read = 16384; event->errorMsg = "Cannot open file"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } auto P = proj_create( ctx, "+proj=vgridshift +grids=https://foo/open_error.tif +multiplier=1"); ASSERT_EQ(P, nullptr); ASSERT_TRUE(exchange.allConsumedAndNoError()); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, simul_read_range_error) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); ExchangeWithCallback exchange; ASSERT_TRUE(proj_context_set_network_callbacks(ctx, open_cbk, close_cbk, get_header_value_cbk, read_range_cbk, &exchange)); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/read_range_error.tif"; event->offset = 0; event->size_to_read = 16384; event->response.resize(16384); event->file_id = 1; const char *proj_source_data = getenv("PROJ_SOURCE_DATA"); ASSERT_TRUE(proj_source_data != nullptr); std::string filename(proj_source_data); filename += "/tests/egm96_15_uncompressed_truncated.tif"; FILE *f = fopen(filename.c_str(), "rb"); ASSERT_TRUE(f != nullptr); ASSERT_EQ(fread(&event->response[0], 1, 956, f), 956U); fclose(f); exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } auto P = proj_create(ctx, "+proj=vgridshift " "+grids=https://foo/read_range_error.tif " "+multiplier=1"); ASSERT_NE(P, nullptr); ASSERT_TRUE(exchange.allConsumedAndNoError()); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/read_range_error.tif"; event->offset = 524288; event->size_to_read = 278528; event->response.resize(278528); event->file_id = 2; float f = 1.25; if (!IS_LSB) { swap_words(&f, sizeof(f), 1); } for (size_t i = 0; i < 278528 / sizeof(float); i++) { memcpy(&event->response[i * sizeof(float)], &f, sizeof(float)); } exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { double longitude = 2 / 180. * M_PI; double lat = 49 / 180. * M_PI; double z = 0; ASSERT_EQ(proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0), 1U); EXPECT_EQ(z, 1.25); } ASSERT_TRUE(exchange.allConsumedAndNoError()); { std::unique_ptr event(new ReadRangeEvent()); event->ctx = ctx; event->offset = 3670016; event->size_to_read = 278528; event->errorMsg = "read range error"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { double longitude = 2 / 180. * M_PI; double lat = -49 / 180. * M_PI; double z = 0; proj_log_func(ctx, nullptr, silent_logger); ASSERT_EQ(proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0), 1U); EXPECT_EQ(z, HUGE_VAL); } { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } proj_destroy(P); ASSERT_TRUE(exchange.allConsumedAndNoError()); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, simul_file_change_while_opened) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); ExchangeWithCallback exchange; ASSERT_TRUE(proj_context_set_network_callbacks(ctx, open_cbk, close_cbk, get_header_value_cbk, read_range_cbk, &exchange)); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/file_change_while_opened.tif"; event->offset = 0; event->size_to_read = 16384; event->response.resize(16384); event->file_id = 1; const char *proj_source_data = getenv("PROJ_SOURCE_DATA"); ASSERT_TRUE(proj_source_data != nullptr); std::string filename(proj_source_data); filename += "/tests/egm96_15_uncompressed_truncated.tif"; FILE *f = fopen(filename.c_str(), "rb"); ASSERT_TRUE(f != nullptr); ASSERT_EQ(fread(&event->response[0], 1, 956, f), 956U); fclose(f); exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 1; exchange.events.emplace_back(std::move(event)); } auto P = proj_create(ctx, "+proj=vgridshift " "+grids=https://foo/file_change_while_opened.tif " "+multiplier=1"); ASSERT_NE(P, nullptr); ASSERT_TRUE(exchange.allConsumedAndNoError()); { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/file_change_while_opened.tif"; event->offset = 524288; event->size_to_read = 278528; event->response.resize(278528); event->file_id = 2; float f = 1.25; if (!IS_LSB) { swap_words(&f, sizeof(f), 1); } for (size_t i = 0; i < 278528 / sizeof(float); i++) { memcpy(&event->response[i * sizeof(float)], &f, sizeof(float)); } exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date CHANGED!!!!"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 2; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new OpenEvent()); event->ctx = ctx; event->url = "https://foo/file_change_while_opened.tif"; event->offset = 0; event->size_to_read = 16384; event->response.resize(16384); event->file_id = 3; const char *proj_source_data = getenv("PROJ_SOURCE_DATA"); ASSERT_TRUE(proj_source_data != nullptr); std::string filename(proj_source_data); filename += "/tests/egm96_15_uncompressed_truncated.tif"; FILE *f = fopen(filename.c_str(), "rb"); ASSERT_TRUE(f != nullptr); ASSERT_EQ(fread(&event->response[0], 1, 956, f), 956U); fclose(f); exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Content-Range"; event->value = "bytes=0-16383/10000000"; event->file_id = 3; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "Last-Modified"; event->value = "some_date CHANGED!!!!"; event->file_id = 3; exchange.events.emplace_back(std::move(event)); } { std::unique_ptr event(new GetHeaderValueEvent()); event->ctx = ctx; event->key = "ETag"; event->value = "some_etag"; event->file_id = 3; exchange.events.emplace_back(std::move(event)); } { double longitude = 2 / 180. * M_PI; double lat = 49 / 180. * M_PI; double z = 0; ASSERT_EQ(proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0), 1U); EXPECT_EQ(z, 1.25); } ASSERT_TRUE(exchange.allConsumedAndNoError()); { std::unique_ptr event(new CloseEvent()); event->ctx = ctx; event->file_id = 3; exchange.events.emplace_back(std::move(event)); } proj_destroy(P); ASSERT_TRUE(exchange.allConsumedAndNoError()); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, curl_hgridshift) { if (!networkAccessOK) { return; } auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); // NTF to RGF93 v1. Using fr_ign_gr3df97a.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:4275", "EPSG:4171", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyz.x = 49; // lat c.xyz.y = 2; // long c.xyz.z = 0; c = proj_trans(P, PJ_FWD, c); proj_assign_context(P, ctx); // (dummy) test context reassignment proj_destroy(P); proj_context_destroy(ctx); EXPECT_NEAR(c.xyz.x, 48.9999322600, 1e-8); EXPECT_NEAR(c.xyz.y, 1.9992776848, 1e-8); EXPECT_NEAR(c.xyz.z, 0, 1e-2); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, curl_vgridshift) { if (!networkAccessOK) { return; } auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); // WGS84 to EGM2008 height. Using egm08_25.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:4979", "EPSG:4326+3855", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyz.x = -30; // lat c.xyz.y = 150; // long c.xyz.z = 0; c = proj_trans(P, PJ_FWD, c); proj_assign_context(P, ctx); // (dummy) test context reassignment proj_destroy(P); proj_context_destroy(ctx); EXPECT_NEAR(c.xyz.x, -30, 1e-8); EXPECT_NEAR(c.xyz.y, 150, 1e-8); EXPECT_NEAR(c.xyz.z, -31.89, 1e-2); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, curl_vgridshift_vertcon) { if (!networkAccessOK) { return; } auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); // NGVD29 to NAVD88 height. Using vertcone.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:4269+7968", "EPSG:4269+5703", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyz.x = 40; // lat c.xyz.y = -80; // long c.xyz.z = 0; c = proj_trans(P, PJ_FWD, c); proj_destroy(P); proj_context_destroy(ctx); EXPECT_NEAR(c.xyz.x, 40, 1e-8); EXPECT_NEAR(c.xyz.y, -80, 1e-8); EXPECT_NEAR(c.xyz.z, -0.15, 1e-2); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, network_endpoint_env_variable) { putenv(const_cast("PROJ_NETWORK_ENDPOINT=http://0.0.0.0/")); auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); // NAD83 to NAD83(HARN) in West-Virginia. Using wvhpgn.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:4269", "EPSG:4152", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyz.x = 40; // lat c.xyz.y = -80; // long c.xyz.z = 0; c = proj_trans(P, PJ_FWD, c); putenv(const_cast("PROJ_NETWORK_ENDPOINT=")); proj_destroy(P); proj_context_destroy(ctx); EXPECT_EQ(c.xyz.x, HUGE_VAL); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, network_endpoint_api_and_not_reachable_gridshift) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); proj_context_set_url_endpoint(ctx, "http://0.0.0.0"); // NAD83 to NAD83(HARN) using // us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:4269", "EPSG:4152", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyzt.x = 40; // lat c.xyzt.y = -80; // long c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "NAD83 to NAD83(HARN) (47)"); proj_destroy(last_op); } proj_errno_reset(P); // Check again. Cf https://github.com/pyproj4/pyproj/issues/705 { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "NAD83 to NAD83(HARN) (47)"); proj_destroy(last_op); } proj_errno_reset(P); // Check also reverse direction { PJ_COORD c2 = proj_trans(P, PJ_INV, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "NAD83 to NAD83(HARN) (47)"); proj_destroy(last_op); } proj_destroy(P); proj_context_destroy(ctx); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, network_endpoint_api_and_not_reachable_xyzgridshift) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); proj_context_set_url_endpoint(ctx, "http://0.0.0.0"); // NTF to RGF93 using fr_ign_gr3df97a.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:4275", "EPSG:4171", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyzt.x = 49; // lat c.xyzt.y = 2; // long c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "NTF to RGF93 v1 (1)"); proj_destroy(last_op); } proj_errno_reset(P); // Check again. Cf https://github.com/pyproj4/pyproj/issues/705 { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "NTF to RGF93 v1 (1)"); proj_destroy(last_op); } proj_errno_reset(P); // Check also reverse direction { PJ_COORD c2 = proj_trans(P, PJ_INV, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "NTF to RGF93 v1 (1)"); proj_destroy(last_op); } proj_destroy(P); proj_context_destroy(ctx); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, network_endpoint_api_and_not_reachable_hgridshift) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); proj_context_set_url_endpoint(ctx, "http://0.0.0.0"); // MGI to ETRS89 using at_bev_AT_GIS_GRID_2021_09_28.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:4312", "EPSG:4258", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyzt.x = 48; // lat c.xyzt.y = 15; // long c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "MGI to ETRS89 (8)"); proj_destroy(last_op); } proj_errno_reset(P); // Check again. Cf https://github.com/pyproj4/pyproj/issues/705 { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "MGI to ETRS89 (8)"); proj_destroy(last_op); } proj_errno_reset(P); // Check also reverse direction { PJ_COORD c2 = proj_trans(P, PJ_INV, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "MGI to ETRS89 (8)"); proj_destroy(last_op); } proj_destroy(P); proj_context_destroy(ctx); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, network_endpoint_api_and_not_reachable_vgridshift) { auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); proj_context_set_url_endpoint(ctx, "http://0.0.0.0"); // "POSGAR 2007 to SRVN16 height (1)" using ar_ign_GEOIDE-Ar16.tif auto P = proj_create_crs_to_crs(ctx, "EPSG:5342", "EPSG:9521", nullptr); ASSERT_NE(P, nullptr); PJ_COORD c; c.xyzt.x = -40; // lat c.xyzt.y = -60; // long c.xyzt.z = 0; c.xyzt.t = HUGE_VAL; { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "POSGAR 2007 to SRVN16 height (1)"); proj_destroy(last_op); } proj_errno_reset(P); // Check again. Cf https://github.com/pyproj4/pyproj/issues/705 { PJ_COORD c2 = proj_trans(P, PJ_FWD, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "POSGAR 2007 to SRVN16 height (1)"); proj_destroy(last_op); } proj_errno_reset(P); // Check also reverse direction { PJ_COORD c2 = proj_trans(P, PJ_INV, c); EXPECT_EQ(c2.xyz.x, HUGE_VAL); EXPECT_EQ(proj_errno(P), PROJ_ERR_OTHER_NETWORK_ERROR); PJ *last_op = proj_trans_get_last_used_operation(P); EXPECT_STREQ(proj_pj_info(last_op).description, "POSGAR 2007 to SRVN16 height (1)"); proj_destroy(last_op); } proj_destroy(P); proj_context_destroy(ctx); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED static PROJ_NETWORK_HANDLE *dummy_open_cbk(PJ_CONTEXT *, const char *, unsigned long long, size_t, void *, size_t *, size_t, char *, void *pUserData) { *static_cast(pUserData) = true; return nullptr; } static void dummy_close_cbk(PJ_CONTEXT *, PROJ_NETWORK_HANDLE *, void *pUserData) { *static_cast(pUserData) = true; } static const char *dummy_get_header_value_cbk(PJ_CONTEXT *, PROJ_NETWORK_HANDLE *, const char *, void *pUserData) { *static_cast(pUserData) = true; return nullptr; } static size_t dummy_read_range_cbk(PJ_CONTEXT *, PROJ_NETWORK_HANDLE *, unsigned long long, size_t, void *, size_t, char *, void *pUserData) { *static_cast(pUserData) = true; return 0; } TEST(networking, cache_basic) { if (!networkAccessOK) { return; } proj_cleanup(); const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=https://cdn.proj.org/fr_ign_ntf_r93.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; auto ctx = proj_context_create(); proj_context_set_enable_network(ctx, true); auto P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); proj_destroy(P); EXPECT_TRUE(!pj_context_get_grid_cache_filename(ctx).empty()); sqlite3 *hDB = nullptr; sqlite3_open_v2(pj_context_get_grid_cache_filename(ctx).c_str(), &hDB, SQLITE_OPEN_READONLY, nullptr); ASSERT_NE(hDB, nullptr); sqlite3_stmt *hStmt = nullptr; sqlite3_prepare_v2(hDB, "SELECT url, offset FROM chunks WHERE id = (" "SELECT chunk_id FROM linked_chunks WHERE id = (" "SELECT head FROM linked_chunks_head_tail))", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_ROW); const char *url = reinterpret_cast(sqlite3_column_text(hStmt, 0)); ASSERT_NE(url, nullptr); ASSERT_EQ(std::string(url), "https://cdn.proj.org/fr_ign_ntf_r93.tif"); ASSERT_EQ(sqlite3_column_int64(hStmt, 1), 0); sqlite3_finalize(hStmt); sqlite3_close(hDB); proj_cleanup(); // Check that a second access doesn't trigger any network activity bool networkActivity = false; ASSERT_TRUE(proj_context_set_network_callbacks( ctx, dummy_open_cbk, dummy_close_cbk, dummy_get_header_value_cbk, dummy_read_range_cbk, &networkActivity)); P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); proj_destroy(P); EXPECT_FALSE(networkActivity); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, proj_grid_cache_clear) { if (!networkAccessOK) { return; } const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=https://cdn.proj.org/fr_ign_ntf_r93.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; proj_cleanup(); auto ctx = proj_context_create(); proj_context_set_enable_network(ctx, true); proj_grid_cache_set_filename(ctx, "tmp_proj_db_cache.db"); EXPECT_EQ(pj_context_get_grid_cache_filename(ctx), std::string("tmp_proj_db_cache.db")); proj_grid_cache_clear(ctx); auto P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); proj_destroy(P); // Check that the file exists { sqlite3 *hDB = nullptr; ASSERT_EQ( sqlite3_open_v2(pj_context_get_grid_cache_filename(ctx).c_str(), &hDB, SQLITE_OPEN_READONLY, nullptr), SQLITE_OK); sqlite3_close(hDB); } proj_grid_cache_clear(ctx); // Check that the file no longer exists { sqlite3 *hDB = nullptr; ASSERT_NE( sqlite3_open_v2(pj_context_get_grid_cache_filename(ctx).c_str(), &hDB, SQLITE_OPEN_READONLY, nullptr), SQLITE_OK); sqlite3_close(hDB); } proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, cache_saturation) { if (!networkAccessOK) { return; } const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=https://cdn.proj.org/fr_ign_ntf_r93.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; proj_cleanup(); auto ctx = proj_context_create(); proj_context_set_enable_network(ctx, true); proj_grid_cache_set_filename(ctx, "tmp_proj_db_cache.db"); proj_grid_cache_clear(ctx); // Limit to two chunks putenv(const_cast("PROJ_GRID_CACHE_MAX_SIZE_BYTES=32768")); proj_grid_cache_set_max_size(ctx, 0); putenv(const_cast("PROJ_GRID_CACHE_MAX_SIZE_BYTES=")); auto P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); double longitude = 2; double lat = 49; proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, nullptr, 0, 0, nullptr, 0, 0); EXPECT_NEAR(longitude, 1.9992776848, 1e-10); EXPECT_NEAR(lat, 48.9999322600, 1e-10); proj_destroy(P); sqlite3 *hDB = nullptr; sqlite3_open_v2(pj_context_get_grid_cache_filename(ctx).c_str(), &hDB, SQLITE_OPEN_READONLY, nullptr); ASSERT_NE(hDB, nullptr); sqlite3_stmt *hStmt = nullptr; sqlite3_prepare_v2(hDB, "SELECT COUNT(*) FROM chunk_data UNION ALL " "SELECT COUNT(*) FROM chunks UNION ALL " "SELECT COUNT(*) FROM linked_chunks", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_ROW); ASSERT_EQ(sqlite3_column_int64(hStmt, 0), 2); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_ROW); ASSERT_EQ(sqlite3_column_int64(hStmt, 0), 2); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_ROW); ASSERT_EQ(sqlite3_column_int64(hStmt, 0), 2); sqlite3_finalize(hStmt); sqlite3_close(hDB); proj_grid_cache_clear(ctx); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, cache_ttl) { if (!networkAccessOK) { return; } const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=https://cdn.proj.org/fr_ign_ntf_r93.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; proj_cleanup(); auto ctx = proj_context_create(); proj_context_set_enable_network(ctx, true); proj_grid_cache_set_filename(ctx, "tmp_proj_db_cache.db"); proj_grid_cache_clear(ctx); auto P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); double longitude = 2; double lat = 49; proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, nullptr, 0, 0, nullptr, 0, 0); EXPECT_NEAR(longitude, 1.9992776848, 1e-10); EXPECT_NEAR(lat, 48.9999322600, 1e-10); proj_destroy(P); sqlite3 *hDB = nullptr; sqlite3_open_v2(pj_context_get_grid_cache_filename(ctx).c_str(), &hDB, SQLITE_OPEN_READWRITE, nullptr); ASSERT_NE(hDB, nullptr); // Force lastChecked to the Epoch so that data is expired. sqlite3_stmt *hStmt = nullptr; sqlite3_prepare_v2(hDB, "UPDATE properties SET lastChecked = 0, " "lastModified = 'foo', etag = 'bar'", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_DONE); sqlite3_finalize(hStmt); // Put junk in already cached data to check that we will refresh it. hStmt = nullptr; sqlite3_prepare_v2(hDB, "UPDATE chunk_data SET data = zeroblob(16384)", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_DONE); sqlite3_finalize(hStmt); sqlite3_close(hDB); proj_cleanup(); // Set a never expire ttl proj_grid_cache_set_ttl(ctx, -1); // We'll get junk data, hence the pipeline initialization fails proj_log_func(ctx, nullptr, silent_logger); P = proj_create(ctx, pipeline); ASSERT_EQ(P, nullptr); proj_destroy(P); proj_cleanup(); // Set a normal ttl proj_grid_cache_set_ttl(ctx, 86400); // Pipeline creation succeeds P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); proj_destroy(P); hDB = nullptr; sqlite3_open_v2(pj_context_get_grid_cache_filename(ctx).c_str(), &hDB, SQLITE_OPEN_READWRITE, nullptr); ASSERT_NE(hDB, nullptr); hStmt = nullptr; sqlite3_prepare_v2(hDB, "SELECT lastChecked, lastModified, etag FROM properties", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_ROW); ASSERT_NE(sqlite3_column_int64(hStmt, 0), 0); ASSERT_NE(sqlite3_column_text(hStmt, 1), nullptr); ASSERT_NE(std::string(reinterpret_cast( sqlite3_column_text(hStmt, 1))), "foo"); ASSERT_NE(sqlite3_column_text(hStmt, 2), nullptr); ASSERT_NE(std::string(reinterpret_cast( sqlite3_column_text(hStmt, 2))), "bar"); sqlite3_finalize(hStmt); sqlite3_close(hDB); proj_grid_cache_clear(ctx); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, cache_lock) { if (!networkAccessOK) { return; } const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=https://cdn.proj.org/fr_ign_ntf_r93.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; proj_cleanup(); auto ctx = proj_context_create(); proj_context_set_enable_network(ctx, true); proj_grid_cache_set_filename(ctx, "tmp_proj_db_cache.db"); proj_grid_cache_clear(ctx); auto P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); double longitude = 2; double lat = 49; proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, nullptr, 0, 0, nullptr, 0, 0); EXPECT_NEAR(longitude, 1.9992776848, 1e-10); EXPECT_NEAR(lat, 48.9999322600, 1e-10); proj_destroy(P); // Take a lock sqlite3 *hDB = nullptr; sqlite3_open_v2(pj_context_get_grid_cache_filename(ctx).c_str(), &hDB, SQLITE_OPEN_READWRITE, nullptr); ASSERT_NE(hDB, nullptr); sqlite3_stmt *hStmt = nullptr; sqlite3_prepare_v2(hDB, "BEGIN EXCLUSIVE", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_DONE); sqlite3_finalize(hStmt); proj_cleanup(); time_t start; time(&start); // 2 lock attempts, so we must sleep for each at least 0.5 ms putenv(const_cast("PROJ_LOCK_MAX_ITERS=25")); P = proj_create(ctx, pipeline); putenv(const_cast("PROJ_LOCK_MAX_ITERS=")); ASSERT_NE(P, nullptr); proj_destroy(P); // Check that we have spend more than 1 sec time_t end; time(&end); ASSERT_GE(end - start, 1U); sqlite3_close(hDB); proj_grid_cache_clear(ctx); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(networking, download_whole_files) { if (!networkAccessOK) { return; } proj_cleanup(); unlink("proj_test_tmp/cache.db"); unlink("proj_test_tmp/dk_sdfe_dvr90.tif"); rmdir("proj_test_tmp"); putenv(const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=")); putenv(const_cast("PROJ_USER_WRITABLE_DIRECTORY=./proj_test_tmp")); putenv(const_cast("PROJ_FULL_FILE_CHUNK_SIZE=100000")); proj_context_set_enable_network(nullptr, true); const auto grid_info = proj_grid_info("dk_sdfe_dvr90.tif"); EXPECT_EQ(std::string(grid_info.filename), ""); EXPECT_EQ(std::string(grid_info.gridname), "dk_sdfe_dvr90.tif"); EXPECT_EQ(std::string(grid_info.format), "gtiff"); proj_context_set_enable_network(nullptr, false); auto ctx = proj_context_create(); auto dbContext = ctx->get_cpp_context()->getDatabaseContext(); std::string fullFilename; std::string packageName; std::string url; bool directDownload; bool openLicense; bool gridAvailable = false; EXPECT_FALSE(dbContext->lookForGridInfo( "dk_sdfe_dvr90.tif", false, fullFilename, packageName, url, directDownload, openLicense, gridAvailable)); EXPECT_FALSE(gridAvailable); proj_context_set_enable_network(ctx, true); ASSERT_TRUE(proj_is_download_needed(ctx, "dk_sdfe_dvr90.tif", false)); char out_full_filename[1024]; EXPECT_FALSE(pj_find_file(ctx, "dk_sdfe_dvr90.tif", out_full_filename, sizeof(out_full_filename))); EXPECT_STREQ(out_full_filename, ""); ASSERT_TRUE( proj_download_file(ctx, "dk_sdfe_dvr90.tif", false, nullptr, nullptr)); EXPECT_TRUE(pj_find_file(ctx, "dk_sdfe_dvr90.tif", out_full_filename, sizeof(out_full_filename))); EXPECT_NE(out_full_filename[0], 0); // lookForGridInfo() returns false because the grid is not known in the DB, // but it returns gridAvailable as it is found on the system. EXPECT_FALSE(dbContext->lookForGridInfo( "dk_sdfe_dvr90.tif", false, fullFilename, packageName, url, directDownload, openLicense, gridAvailable)); EXPECT_TRUE(gridAvailable); FILE *f = fopen("proj_test_tmp/dk_sdfe_dvr90.tif", "rb"); ASSERT_NE(f, nullptr); fclose(f); proj_context_set_enable_network(ctx, false); const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=dk_sdfe_dvr90.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; auto P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); double longitude = 12; double lat = 56; double z = 0; proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0); EXPECT_NEAR(z, 36.5909996032715, 1e-10); proj_destroy(P); proj_context_set_enable_network(ctx, true); ASSERT_FALSE(proj_is_download_needed(ctx, "dk_sdfe_dvr90.tif", false)); { sqlite3 *hDB = nullptr; sqlite3_open_v2("proj_test_tmp/cache.db", &hDB, SQLITE_OPEN_READWRITE, nullptr); ASSERT_NE(hDB, nullptr); // Force lastChecked to the Epoch so that data is expired. sqlite3_stmt *hStmt = nullptr; sqlite3_prepare_v2( hDB, "UPDATE downloaded_file_properties SET lastChecked = 0", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_DONE); sqlite3_finalize(hStmt); sqlite3_close(hDB); } // If we ignore TTL settings, then no network access will be done ASSERT_FALSE(proj_is_download_needed(ctx, "dk_sdfe_dvr90.tif", true)); { sqlite3 *hDB = nullptr; sqlite3_open_v2("proj_test_tmp/cache.db", &hDB, SQLITE_OPEN_READWRITE, nullptr); ASSERT_NE(hDB, nullptr); // Check that the lastChecked timestamp is still 0 sqlite3_stmt *hStmt = nullptr; sqlite3_prepare_v2(hDB, "SELECT lastChecked FROM downloaded_file_properties", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_ROW); ASSERT_EQ(sqlite3_column_int64(hStmt, 0), 0); sqlite3_finalize(hStmt); sqlite3_close(hDB); } // Should recheck from the CDN, update last_checked and do nothing ASSERT_FALSE(proj_is_download_needed(ctx, "dk_sdfe_dvr90.tif", false)); { sqlite3 *hDB = nullptr; sqlite3_open_v2("proj_test_tmp/cache.db", &hDB, SQLITE_OPEN_READWRITE, nullptr); ASSERT_NE(hDB, nullptr); sqlite3_stmt *hStmt = nullptr; // Check that the lastChecked timestamp has been updated sqlite3_prepare_v2(hDB, "SELECT lastChecked FROM downloaded_file_properties", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_ROW); ASSERT_NE(sqlite3_column_int64(hStmt, 0), 0); sqlite3_finalize(hStmt); hStmt = nullptr; // Now invalid lastModified. This should trigger a new download sqlite3_prepare_v2( hDB, "UPDATE downloaded_file_properties SET lastChecked = 0, " "lastModified = 'foo'", -1, &hStmt, nullptr); ASSERT_NE(hStmt, nullptr); ASSERT_EQ(sqlite3_step(hStmt), SQLITE_DONE); sqlite3_finalize(hStmt); sqlite3_close(hDB); } ASSERT_TRUE(proj_is_download_needed(ctx, "dk_sdfe_dvr90.tif", false)); // Redo download with a progress callback this time. unlink("proj_test_tmp/dk_sdfe_dvr90.tif"); const auto cbk = [](PJ_CONTEXT *l_ctx, double pct, void *user_data) -> int { auto vect = static_cast> *>( user_data); vect->push_back(std::pair(l_ctx, pct)); return true; }; std::vector> vectPct; ASSERT_TRUE( proj_download_file(ctx, "dk_sdfe_dvr90.tif", false, cbk, &vectPct)); ASSERT_EQ(vectPct.size(), 3U); ASSERT_EQ(vectPct.back().first, ctx); ASSERT_EQ(vectPct.back().second, 1.0); proj_context_destroy(ctx); putenv(const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES")); putenv(const_cast("PROJ_USER_WRITABLE_DIRECTORY=")); putenv(const_cast("PROJ_FULL_FILE_CHUNK_SIZE=")); unlink("proj_test_tmp/cache.db"); unlink("proj_test_tmp/dk_sdfe_dvr90.tif"); rmdir("proj_test_tmp"); } // --------------------------------------------------------------------------- TEST(networking, file_api) { if (!networkAccessOK) { return; } proj_cleanup(); unlink("proj_test_tmp/cache.db"); unlink("proj_test_tmp/dk_sdfe_dvr90.tif"); rmdir("proj_test_tmp"); putenv(const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=")); putenv(const_cast("PROJ_USER_WRITABLE_DIRECTORY=./proj_test_tmp")); putenv(const_cast("PROJ_FULL_FILE_CHUNK_SIZE=30000")); auto ctx = proj_context_create(); proj_context_set_enable_network(ctx, true); struct UserData { bool in_open = false; bool in_read = false; bool in_write = false; bool in_seek = false; bool in_tell = false; bool in_close = false; bool in_exists = false; bool in_mkdir = false; bool in_unlink = false; bool in_rename = false; }; struct PROJ_FILE_API api; api.version = 1; api.open_cbk = [](PJ_CONTEXT *, const char *filename, PROJ_OPEN_ACCESS access, void *user_data) -> PROJ_FILE_HANDLE * { static_cast(user_data)->in_open = true; return reinterpret_cast( fopen(filename, access == PROJ_OPEN_ACCESS_READ_ONLY ? "rb" : access == PROJ_OPEN_ACCESS_READ_UPDATE ? "r+b" : "w+b")); }; api.read_cbk = [](PJ_CONTEXT *, PROJ_FILE_HANDLE *handle, void *buffer, size_t sizeBytes, void *user_data) -> size_t { static_cast(user_data)->in_read = true; return fread(buffer, 1, sizeBytes, reinterpret_cast(handle)); }; api.write_cbk = [](PJ_CONTEXT *, PROJ_FILE_HANDLE *handle, const void *buffer, size_t sizeBytes, void *user_data) -> size_t { static_cast(user_data)->in_write = true; return fwrite(buffer, 1, sizeBytes, reinterpret_cast(handle)); }; api.seek_cbk = [](PJ_CONTEXT *, PROJ_FILE_HANDLE *handle, long long offset, int whence, void *user_data) -> int { static_cast(user_data)->in_seek = true; return fseek(reinterpret_cast(handle), static_cast(offset), whence) == 0; }; api.tell_cbk = [](PJ_CONTEXT *, PROJ_FILE_HANDLE *handle, void *user_data) -> unsigned long long { static_cast(user_data)->in_tell = true; return ftell(reinterpret_cast(handle)); }; api.close_cbk = [](PJ_CONTEXT *, PROJ_FILE_HANDLE *handle, void *user_data) -> void { static_cast(user_data)->in_close = true; fclose(reinterpret_cast(handle)); }; api.exists_cbk = [](PJ_CONTEXT *, const char *filename, void *user_data) -> int { static_cast(user_data)->in_exists = true; struct stat buf; return stat(filename, &buf) == 0; }; api.mkdir_cbk = [](PJ_CONTEXT *, const char *filename, void *user_data) -> int { static_cast(user_data)->in_mkdir = true; #ifdef _WIN32 return mkdir(filename) == 0; #else return mkdir(filename, 0755) == 0; #endif }; api.unlink_cbk = [](PJ_CONTEXT *, const char *filename, void *user_data) -> int { static_cast(user_data)->in_unlink = true; return unlink(filename) == 0; }; api.rename_cbk = [](PJ_CONTEXT *, const char *oldPath, const char *newPath, void *user_data) -> int { static_cast(user_data)->in_rename = true; return rename(oldPath, newPath) == 0; }; UserData userData; ASSERT_TRUE(proj_context_set_fileapi(ctx, &api, &userData)); ASSERT_TRUE(proj_is_download_needed(ctx, "dk_sdfe_dvr90.tif", false)); ASSERT_TRUE( proj_download_file(ctx, "dk_sdfe_dvr90.tif", false, nullptr, nullptr)); ASSERT_TRUE(userData.in_open); ASSERT_FALSE(userData.in_read); ASSERT_TRUE(userData.in_write); ASSERT_TRUE(userData.in_close); ASSERT_TRUE(userData.in_exists); ASSERT_TRUE(userData.in_mkdir); ASSERT_TRUE(userData.in_unlink); ASSERT_TRUE(userData.in_rename); proj_context_set_enable_network(ctx, false); const char *pipeline = "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=dk_sdfe_dvr90.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"; auto P = proj_create(ctx, pipeline); ASSERT_NE(P, nullptr); double longitude = 12; double lat = 56; double z = 0; proj_trans_generic(P, PJ_FWD, &longitude, sizeof(double), 1, &lat, sizeof(double), 1, &z, sizeof(double), 1, nullptr, 0, 0); EXPECT_NEAR(z, 36.5909996032715, 1e-10); proj_destroy(P); ASSERT_TRUE(userData.in_read); ASSERT_TRUE(userData.in_seek); proj_context_destroy(ctx); putenv(const_cast("PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES")); putenv(const_cast("PROJ_USER_WRITABLE_DIRECTORY=")); putenv(const_cast("PROJ_FULL_FILE_CHUNK_SIZE=")); unlink("proj_test_tmp/cache.db"); unlink("proj_test_tmp/dk_sdfe_dvr90.tif"); rmdir("proj_test_tmp"); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, proj_coordoperation_get_grid_used) { if (!networkAccessOK) { return; } auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); // Test bugfix for // https://github.com/OSGeo/PROJ/issues/3444#issuecomment-1309499342 for (int i = 0; i < 2; ++i) { // This file is not in grid_alternatives, but in the CDN const char *proj_string = "proj=vgridshift grids=nz_linz_nzgd2000-c120100904-grid01.tif"; PJ *P = proj_create(ctx, proj_string); const char *shortName = nullptr; const char *fullName = nullptr; const char *packageName = nullptr; const char *url = nullptr; int directDownload = 0; int openLicense = 0; int available = 0; proj_coordoperation_get_grid_used(ctx, P, 0, &shortName, &fullName, &packageName, &url, &directDownload, &openLicense, &available); EXPECT_EQ(std::string(shortName), "nz_linz_nzgd2000-c120100904-grid01.tif"); EXPECT_EQ(std::string(fullName), ""); EXPECT_EQ( std::string(url), "https://cdn.proj.org/nz_linz_nzgd2000-c120100904-grid01.tif"); proj_destroy(P); } proj_context_destroy(ctx); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, pyproj_issue_1192) { if (!networkAccessOK) { return; } const auto doTest = [](PJ_CONTEXT *ctxt) { auto factory_context = proj_create_operation_factory_context(ctxt, nullptr); proj_operation_factory_context_set_grid_availability_use( ctxt, factory_context, PROJ_GRID_AVAILABILITY_IGNORED); proj_operation_factory_context_set_spatial_criterion( ctxt, factory_context, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); auto from = proj_create(ctxt, "EPSG:4326"); auto to = proj_create(ctxt, "EPSG:2964"); auto pj_operations = proj_create_operations(ctxt, from, to, factory_context); proj_destroy(from); proj_destroy(to); auto num_operations = proj_list_get_count(pj_operations); for (int i = 0; i < num_operations; ++i) { PJ *P = proj_list_get(ctxt, pj_operations, i); int is_instantiable = proj_coordoperation_is_instantiable(ctxt, P); if (is_instantiable) { EXPECT_TRUE(proj_pj_info(P).id != nullptr); } proj_destroy(P); } proj_operation_factory_context_destroy(factory_context); proj_list_destroy(pj_operations); }; auto ctx = proj_context_create(); proj_grid_cache_set_enable(ctx, false); proj_context_set_enable_network(ctx, true); doTest(ctx); proj_context_set_enable_network(ctx, false); doTest(ctx); proj_context_destroy(ctx); } #endif // --------------------------------------------------------------------------- #ifdef CURL_ENABLED TEST(networking, do_not_attempt_network_access_known_available_network_on) { // Check that proj_create_operations() itself does not trigger network // activity in enable_network == true and // PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE mode when all grids are known. const auto doTest = [](PJ_CONTEXT *ctxt) { auto factory_context = proj_create_operation_factory_context(ctxt, nullptr); proj_operation_factory_context_set_grid_availability_use( ctxt, factory_context, PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE); proj_operation_factory_context_set_spatial_criterion( ctxt, factory_context, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); auto from = proj_create(ctxt, "EPSG:4326"); auto to = proj_create(ctxt, "EPSG:4267"); auto pj_operations = proj_create_operations(ctxt, from, to, factory_context); proj_destroy(from); proj_destroy(to); auto num_operations = proj_list_get_count(pj_operations); EXPECT_GE(num_operations, 10); proj_operation_factory_context_destroy(factory_context); proj_list_destroy(pj_operations); }; auto ctx = proj_context_create(); proj_context_set_enable_network(ctx, true); // Check that we don't trigger any network activity bool networkActivity = false; ASSERT_TRUE(proj_context_set_network_callbacks( ctx, dummy_open_cbk, dummy_close_cbk, dummy_get_header_value_cbk, dummy_read_range_cbk, &networkActivity)); doTest(ctx); EXPECT_FALSE(networkActivity); proj_context_destroy(ctx); } #endif } // namespace proj-9.6.0/test/unit/test_operation.cpp000664 001754 001755 00001050667 14764566077 020141 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" // to be able to use internal::replaceAll #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj_constants.h" #include #include using namespace osgeo::proj::common; using namespace osgeo::proj::crs; using namespace osgeo::proj::cs; using namespace osgeo::proj::datum; using namespace osgeo::proj::io; using namespace osgeo::proj::internal; using namespace osgeo::proj::metadata; using namespace osgeo::proj::operation; using namespace osgeo::proj::util; namespace { struct UnrelatedObject : public IComparable { UnrelatedObject() = default; bool _isEquivalentTo(const IComparable *, Criterion, const DatabaseContextPtr &) const override { assert(false); return false; } }; static nn> createUnrelatedObject() { return nn_make_shared(); } } // namespace // --------------------------------------------------------------------------- TEST(operation, method) { auto method = OperationMethod::create( PropertyMap(), std::vector{}); EXPECT_TRUE(method->isEquivalentTo(method.get())); EXPECT_FALSE(method->isEquivalentTo(createUnrelatedObject().get())); auto otherMethod = OperationMethod::create( PropertyMap(), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}); EXPECT_TRUE(otherMethod->isEquivalentTo(otherMethod.get())); EXPECT_FALSE(method->isEquivalentTo(otherMethod.get())); auto otherMethod2 = OperationMethod::create( PropertyMap(), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2"))}); EXPECT_FALSE(otherMethod->isEquivalentTo(otherMethod2.get())); EXPECT_FALSE(otherMethod->isEquivalentTo( otherMethod2.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, method_parameter_different_order) { auto method1 = OperationMethod::create( PropertyMap(), std::vector{ OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "paramName")), OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "paramName2"))}); auto method2 = OperationMethod::create( PropertyMap(), std::vector{ OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "paramName2")), OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "paramName"))}); auto method3 = OperationMethod::create( PropertyMap(), std::vector{ OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "paramName3")), OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "paramName"))}); EXPECT_FALSE(method1->isEquivalentTo(method2.get())); EXPECT_TRUE(method1->isEquivalentTo(method2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(method1->isEquivalentTo(method3.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, ParameterValue) { auto valStr1 = ParameterValue::create("str1"); auto valStr2 = ParameterValue::create("str2"); EXPECT_TRUE(valStr1->isEquivalentTo(valStr1.get())); EXPECT_FALSE(valStr1->isEquivalentTo(createUnrelatedObject().get())); EXPECT_FALSE(valStr1->isEquivalentTo(valStr2.get())); auto valMeasure1 = ParameterValue::create(Angle(-90.0)); auto valMeasure1Eps = ParameterValue::create(Angle(-90.0 - 1e-11)); auto valMeasure2 = ParameterValue::create(Angle(-89.0)); EXPECT_TRUE(valMeasure1->isEquivalentTo(valMeasure1.get())); EXPECT_TRUE(valMeasure1->isEquivalentTo( valMeasure1.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(valMeasure1->isEquivalentTo(valMeasure1Eps.get())); EXPECT_TRUE(valMeasure1->isEquivalentTo( valMeasure1Eps.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(valMeasure1->isEquivalentTo(valStr1.get())); EXPECT_FALSE(valMeasure1->isEquivalentTo(valMeasure2.get())); EXPECT_FALSE(valMeasure1->isEquivalentTo( valMeasure2.get(), IComparable::Criterion::EQUIVALENT)); auto valInt1 = ParameterValue::create(1); auto valInt2 = ParameterValue::create(2); EXPECT_TRUE(valInt1->isEquivalentTo(valInt1.get())); EXPECT_FALSE(valInt1->isEquivalentTo(valInt2.get())); auto valTrue = ParameterValue::create(true); auto valFalse = ParameterValue::create(false); EXPECT_TRUE(valTrue->isEquivalentTo(valTrue.get())); EXPECT_FALSE(valTrue->isEquivalentTo(valFalse.get())); } // --------------------------------------------------------------------------- TEST(operation, OperationParameter) { auto op1 = OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName")); auto op2 = OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2")); EXPECT_TRUE(op1->isEquivalentTo(op1.get())); EXPECT_FALSE(op1->isEquivalentTo(createUnrelatedObject().get())); EXPECT_FALSE(op1->isEquivalentTo(op2.get())); } // --------------------------------------------------------------------------- TEST(operation, OperationParameterValue) { auto op1 = OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName")); auto op2 = OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2")); auto valStr1 = ParameterValue::create("str1"); auto valStr2 = ParameterValue::create("str2"); auto opv11 = OperationParameterValue::create(op1, valStr1); EXPECT_TRUE(opv11->isEquivalentTo(opv11.get())); EXPECT_FALSE(opv11->isEquivalentTo(createUnrelatedObject().get())); auto opv12 = OperationParameterValue::create(op1, valStr2); EXPECT_FALSE(opv11->isEquivalentTo(opv12.get())); auto opv21 = OperationParameterValue::create(op2, valStr1); EXPECT_FALSE(opv11->isEquivalentTo(opv12.get())); } // --------------------------------------------------------------------------- TEST(operation, SingleOperation) { auto sop1 = Transformation::create( PropertyMap(), nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), static_cast(GeographicCRS::EPSG_4979.as_nullable()), PropertyMap(), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector{ PositionalAccuracy::create("0.1")}); EXPECT_TRUE(sop1->isEquivalentTo(sop1.get())); EXPECT_FALSE(sop1->isEquivalentTo(createUnrelatedObject().get())); EXPECT_TRUE( sop1->isEquivalentTo(sop1->CoordinateOperation::shallowClone().get())); EXPECT_TRUE(sop1->inverse()->isEquivalentTo( sop1->inverse()->CoordinateOperation::shallowClone().get())); auto sop2 = Transformation::create( PropertyMap(), nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), static_cast(GeographicCRS::EPSG_4979.as_nullable()), PropertyMap(), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector{ PositionalAccuracy::create("0.1")}); EXPECT_FALSE(sop1->isEquivalentTo(sop2.get())); auto sop3 = Transformation::create( PropertyMap(), nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), static_cast(GeographicCRS::EPSG_4979.as_nullable()), PropertyMap(), std::vector{ OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName")), OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2"))}, std::vector{ ParameterValue::createFilename("foo.bin"), ParameterValue::createFilename("foo2.bin")}, std::vector{ PositionalAccuracy::create("0.1")}); EXPECT_FALSE(sop1->isEquivalentTo(sop3.get())); auto sop4 = Transformation::create( PropertyMap(), nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), static_cast(GeographicCRS::EPSG_4979.as_nullable()), PropertyMap(), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo2.bin")}, std::vector{ PositionalAccuracy::create("0.1")}); EXPECT_FALSE(sop1->isEquivalentTo(sop4.get())); } // --------------------------------------------------------------------------- TEST(operation, SingleOperation_different_order) { auto sop1 = Transformation::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "ignored1"), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4807, nullptr, PropertyMap(), std::vector{ OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName")), OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2"))}, std::vector{ ParameterValue::createFilename("foo.bin"), ParameterValue::createFilename("foo2.bin")}, {}); auto sop2 = Transformation::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "ignored2"), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4807, nullptr, PropertyMap(), std::vector{ OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2")), OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo2.bin"), ParameterValue::createFilename("foo.bin")}, {}); auto sop3 = Transformation::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "ignored3"), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4807, nullptr, PropertyMap(), std::vector{ OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName")), OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName2"))}, std::vector{ ParameterValue::createFilename("foo2.bin"), ParameterValue::createFilename("foo.bin")}, {}); EXPECT_FALSE(sop1->isEquivalentTo(sop2.get())); EXPECT_TRUE( sop1->isEquivalentTo(sop2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( sop1->isEquivalentTo(sop3.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, transformation_to_wkt) { PropertyMap propertiesTransformation; propertiesTransformation .set(Identifier::CODESPACE_KEY, "codeSpaceTransformation") .set(Identifier::CODE_KEY, "codeTransformation") .set(IdentifiedObject::NAME_KEY, "transformationName") .set(IdentifiedObject::REMARKS_KEY, "my remarks"); auto transf = Transformation::create( propertiesTransformation, nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), static_cast(GeographicCRS::EPSG_4979.as_nullable()), PropertyMap() .set(Identifier::CODESPACE_KEY, "codeSpaceOperationMethod") .set(Identifier::CODE_KEY, "codeOperationMethod") .set(IdentifiedObject::NAME_KEY, "operationMethodName"), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector{ PositionalAccuracy::create("0.1")}); std::string src_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); src_wkt = GeographicCRS::EPSG_4326->exportToWKT(formatter.get()); } std::string dst_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); dst_wkt = GeographicCRS::EPSG_4807->exportToWKT(formatter.get()); } std::string interpolation_wkt; { auto formatter = WKTFormatter::create(); formatter->setOutputId(false); interpolation_wkt = GeographicCRS::EPSG_4979->exportToWKT(formatter.get()); } auto expected = "COORDINATEOPERATION[\"transformationName\",\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[" + dst_wkt + "],\n" " METHOD[\"operationMethodName\",\n" " ID[\"codeSpaceOperationMethod\",\"codeOperationMethod\"]],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"],\n" " INTERPOLATIONCRS[" + interpolation_wkt + "],\n" " OPERATIONACCURACY[0.1],\n" " ID[\"codeSpaceTransformation\",\"codeTransformation\"],\n" " REMARK[\"my remarks\"]]"; EXPECT_EQ( replaceAll(replaceAll(transf->exportToWKT(WKTFormatter::create().get()), " ", ""), "\n", ""), replaceAll(replaceAll(expected, " ", ""), "\n", "")); EXPECT_THROW( transf->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); EXPECT_TRUE(transf->isEquivalentTo(transf.get())); EXPECT_FALSE(transf->isEquivalentTo(createUnrelatedObject().get())); } // --------------------------------------------------------------------------- TEST(operation, concatenated_operation) { PropertyMap propertiesTransformation; propertiesTransformation .set(Identifier::CODESPACE_KEY, "codeSpaceTransformation") .set(Identifier::CODE_KEY, "codeTransformation") .set(IdentifiedObject::NAME_KEY, "transformationName") .set(IdentifiedObject::REMARKS_KEY, "my remarks"); auto transf_1 = Transformation::create( propertiesTransformation, nn_static_pointer_cast(GeographicCRS::EPSG_4326), nn_static_pointer_cast(GeographicCRS::EPSG_4807), nullptr, PropertyMap().set(IdentifiedObject::NAME_KEY, "operationMethodName"), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector()); auto transf_2 = Transformation::create( propertiesTransformation, nn_static_pointer_cast(GeographicCRS::EPSG_4807), nn_static_pointer_cast(GeographicCRS::EPSG_4979), nullptr, PropertyMap().set(IdentifiedObject::NAME_KEY, "operationMethodName"), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector()); auto concat = ConcatenatedOperation::create( PropertyMap() .set(Identifier::CODESPACE_KEY, "codeSpace") .set(Identifier::CODE_KEY, "code") .set(IdentifiedObject::NAME_KEY, "name") .set(IdentifiedObject::REMARKS_KEY, "my remarks"), std::vector{transf_1, transf_2}, std::vector{ PositionalAccuracy::create("0.1")}); std::string src_wkt; { auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); src_wkt = GeographicCRS::EPSG_4326->exportToWKT(formatter.get()); } std::string dst_wkt; { auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); dst_wkt = GeographicCRS::EPSG_4979->exportToWKT(formatter.get()); } std::string step1_wkt; { auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); step1_wkt = transf_1->exportToWKT(formatter.get()); } std::string step2_wkt; { auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); step2_wkt = transf_2->exportToWKT(formatter.get()); } auto expected = "CONCATENATEDOPERATION[\"name\",\n" " SOURCECRS[" + src_wkt + "],\n" " TARGETCRS[" + dst_wkt + "],\n" " STEP[" + step1_wkt + "],\n" " STEP[" + step2_wkt + "],\n" " OPERATIONACCURACY[0.1],\n" " ID[\"codeSpace\",\"code\"],\n" " REMARK[\"my remarks\"]]"; EXPECT_EQ(replaceAll(replaceAll(concat->exportToWKT( WKTFormatter::create( WKTFormatter::Convention::WKT2_2019) .get()), " ", ""), "\n", ""), replaceAll(replaceAll(expected, " ", ""), "\n", "")); EXPECT_THROW(concat->exportToWKT(WKTFormatter::create().get()), FormattingException); EXPECT_THROW(ConcatenatedOperation::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "name"), std::vector{transf_1, transf_1}, std::vector()), InvalidOperation); auto inv = concat->inverse(); EXPECT_EQ(inv->nameStr(), "Inverse of name"); EXPECT_EQ(inv->sourceCRS()->nameStr(), concat->targetCRS()->nameStr()); EXPECT_EQ(inv->targetCRS()->nameStr(), concat->sourceCRS()->nameStr()); auto inv_as_concat = nn_dynamic_pointer_cast(inv); ASSERT_TRUE(inv_as_concat != nullptr); ASSERT_EQ(inv_as_concat->operations().size(), 2U); EXPECT_EQ(inv_as_concat->operations()[0]->nameStr(), "Inverse of transformationName"); EXPECT_EQ(inv_as_concat->operations()[1]->nameStr(), "Inverse of transformationName"); EXPECT_TRUE(concat->isEquivalentTo(concat.get())); EXPECT_FALSE(concat->isEquivalentTo(createUnrelatedObject().get())); EXPECT_TRUE(concat->isEquivalentTo( concat->CoordinateOperation::shallowClone().get())); EXPECT_FALSE( ConcatenatedOperation::create(PropertyMap(), std::vector{ transf_1, transf_1->inverse()}, std::vector()) ->isEquivalentTo(ConcatenatedOperation::create( PropertyMap(), std::vector{ transf_1->inverse(), transf_1}, std::vector()) .get())); EXPECT_FALSE( ConcatenatedOperation::create(PropertyMap(), std::vector{ transf_1, transf_1->inverse()}, std::vector()) ->isEquivalentTo(ConcatenatedOperation::create( PropertyMap(), std::vector{ transf_1, transf_1->inverse(), transf_1}, std::vector()) .get())); } // --------------------------------------------------------------------------- TEST(operation, transformation_createGeocentricTranslations) { auto transf = Transformation::createGeocentricTranslations( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, std::vector()); EXPECT_TRUE(transf->validateParameters().empty()); auto params = transf->getTOWGS84Parameters(true); auto expected = std::vector{1.0, 2.0, 3.0, 0.0, 0.0, 0.0, 0.0}; EXPECT_EQ(params, expected); auto inv_transf = transf->inverse(); auto inv_transf_as_transf = nn_dynamic_pointer_cast(inv_transf); ASSERT_TRUE(inv_transf_as_transf != nullptr); EXPECT_EQ(transf->sourceCRS()->nameStr(), inv_transf_as_transf->targetCRS()->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), inv_transf_as_transf->sourceCRS()->nameStr()); auto expected_inv = std::vector{-1.0, -2.0, -3.0, 0.0, 0.0, 0.0, 0.0}; EXPECT_EQ(inv_transf_as_transf->getTOWGS84Parameters(true), expected_inv); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 +step +proj=helmert +x=1 +y=2 " "+z=3 +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg +step " "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- static GeodeticCRSNNPtr createGeocentricDatumWGS84() { PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 4328) .set(IdentifiedObject::NAME_KEY, "WGS 84"); return GeodeticCRS::create( propertiesCRS, GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- static GeodeticCRSNNPtr createGeocentricKM() { PropertyMap propertiesCRS; propertiesCRS.set(IdentifiedObject::NAME_KEY, "Based on WGS 84"); return GeodeticCRS::create( propertiesCRS, GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric( UnitOfMeasure("kilometre", 1000.0, UnitOfMeasure::Type::LINEAR))); } // --------------------------------------------------------------------------- TEST(operation, transformation_createGeocentricTranslations_between_geocentricCRS) { auto transf1 = Transformation::createGeocentricTranslations( PropertyMap(), createGeocentricDatumWGS84(), createGeocentricKM(), 1.0, 2.0, 3.0, std::vector()); EXPECT_EQ(transf1->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=helmert +x=1 +y=2 +z=3 +step " "+proj=unitconvert +xy_in=m +z_in=m +xy_out=km +z_out=km"); auto transf2 = Transformation::createGeocentricTranslations( PropertyMap(), createGeocentricKM(), createGeocentricDatumWGS84(), 1.0, 2.0, 3.0, std::vector()); EXPECT_EQ(transf2->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=km +z_in=km " "+xy_out=m +z_out=m +step +proj=helmert +x=1 +y=2 +z=3"); auto transf3 = Transformation::createGeocentricTranslations( PropertyMap(), createGeocentricKM(), createGeocentricKM(), 1.0, 2.0, 3.0, std::vector()); EXPECT_EQ(transf3->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=km +z_in=km " "+xy_out=m +z_out=m +step +proj=helmert +x=1 +y=2 +z=3 +step " "+proj=unitconvert +xy_in=m +z_in=m +xy_out=km +z_out=km"); } // --------------------------------------------------------------------------- TEST(operation, transformation_createGeocentricTranslations_null) { auto transf = Transformation::createGeocentricTranslations( PropertyMap(), createGeocentricDatumWGS84(), createGeocentricDatumWGS84(), 0.0, 0.0, 0.0, std::vector()); EXPECT_EQ(transf->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, transformation_createGeocentricTranslations_neg_zero) { auto transf = Transformation::createGeocentricTranslations( PropertyMap(), createGeocentricDatumWGS84(), createGeocentricDatumWGS84(), 1.0, -0.0, 0.0, std::vector()); EXPECT_EQ(transf->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=helmert +x=-1 +y=0 +z=0"); } // --------------------------------------------------------------------------- TEST(operation, transformation_createPositionVector) { auto transf = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, std::vector{ PositionalAccuracy::create("100")}); EXPECT_TRUE(transf->validateParameters().empty()); ASSERT_EQ(transf->coordinateOperationAccuracies().size(), 1U); auto expected = std::vector{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; EXPECT_EQ(transf->getTOWGS84Parameters(true), expected); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 +step +proj=helmert +x=1 +y=2 " "+z=3 +rx=4 +ry=5 +rz=6 +s=7 +convention=position_vector +step " "+inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); auto inv_transf = transf->inverse(); ASSERT_EQ(inv_transf->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(transf->sourceCRS()->nameStr(), inv_transf->targetCRS()->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), inv_transf->sourceCRS()->nameStr()); #ifdef USE_APPROXIMATE_HELMERT_INVERSE auto inv_transf_as_transf = nn_dynamic_pointer_cast(inv_transf); ASSERT_TRUE(inv_transf_as_transf != nullptr); #else EXPECT_EQ( inv_transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step " "+proj=cart +ellps=WGS84 +step +inv +proj=helmert +x=1 +y=2 +z=3 +rx=4 " "+ry=5 +rz=6 +s=7 +convention=position_vector +step +inv +proj=cart " "+ellps=GRS80 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); // In WKT, use approximate formula auto wkt = inv_transf->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE( wkt.find("Transformation from WGS 84 to NAD83 (approx. inversion)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("Position Vector transformation (geog2D domain)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("ID[\"EPSG\",9606]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis translation\",-1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis translation\",-2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis translation\",-3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis rotation\",-4") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis rotation\",-5") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis rotation\",-6") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Scale difference\",-7") != std::string::npos) << wkt; #endif } // --------------------------------------------------------------------------- TEST(operation, transformation_createCoordinateFrameRotation) { auto transf = Transformation::createCoordinateFrameRotation( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, -4.0, -5.0, -6.0, 7.0, std::vector()); EXPECT_TRUE(transf->validateParameters().empty()); auto params = transf->getTOWGS84Parameters(true); auto expected = std::vector{1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; EXPECT_EQ(params, expected); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 +step +proj=helmert +x=1 +y=2 " "+z=3 +rx=-4 +ry=-5 +rz=-6 +s=7 +convention=coordinate_frame " "+step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); auto inv_transf = transf->inverse(); ASSERT_EQ(inv_transf->coordinateOperationAccuracies().size(), 0U); EXPECT_EQ(transf->sourceCRS()->nameStr(), inv_transf->targetCRS()->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), inv_transf->sourceCRS()->nameStr()); #ifdef USE_APPROXIMATE_HELMERT_INVERSE auto inv_transf_as_transf = nn_dynamic_pointer_cast(inv_transf); ASSERT_TRUE(inv_transf_as_transf != nullptr); #else EXPECT_EQ( inv_transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step " "+proj=cart +ellps=WGS84 +step +inv +proj=helmert +x=1 +y=2 +z=3 " "+rx=-4 +ry=-5 +rz=-6 +s=7 +convention=coordinate_frame +step +inv " "+proj=cart +ellps=GRS80 +step +proj=pop +v_3 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); // In WKT, use approximate formula auto wkt = inv_transf->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE( wkt.find("Transformation from WGS 84 to NAD83 (approx. inversion)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("Coordinate Frame rotation (geog2D domain)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("ID[\"EPSG\",9607]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis translation\",-1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis translation\",-2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis translation\",-3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis rotation\",4") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis rotation\",5") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis rotation\",6") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Scale difference\",-7") != std::string::npos) << wkt; #endif } // --------------------------------------------------------------------------- TEST(operation, transformation_createTimeDependentPositionVector) { auto transf = Transformation::createTimeDependentPositionVector( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 2018.5, std::vector()); EXPECT_TRUE(transf->validateParameters().empty()); EXPECT_TRUE(transf->requiresPerCoordinateInputTime()); auto inv_transf = transf->inverse(); EXPECT_EQ(transf->sourceCRS()->nameStr(), inv_transf->targetCRS()->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), inv_transf->sourceCRS()->nameStr()); EXPECT_TRUE(inv_transf->requiresPerCoordinateInputTime()); auto projString = inv_transf->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_TRUE(projString.find("+proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 " "+rz=6 +s=7 +dx=0.1 +dy=0.2 +dz=0.3 +drx=0.4 " "+dry=0.5 +drz=0.6 +ds=0.7 +t_epoch=2018.5 " "+convention=position_vector") != std::string::npos) << projString; // In WKT, use approximate formula auto wkt = inv_transf->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE( wkt.find("Transformation from WGS 84 to NAD83 (approx. inversion)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("Time-dependent Position Vector tfm (geog2D)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("ID[\"EPSG\",1054]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis translation\",-1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis translation\",-2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis translation\",-3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis rotation\",-4") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis rotation\",-5") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis rotation\",-6") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Scale difference\",-7") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of X-axis translation\",-0.1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Y-axis translation\",-0.2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Z-axis translation\",-0.3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of X-axis rotation\",-0.4") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Y-axis rotation\",-0.5") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Z-axis rotation\",-0.6") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Scale difference\",-0.7") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Parameter reference epoch\",2018.5") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(operation, transformation_createTimeDependentCoordinateFrameRotation) { auto transf = Transformation::createTimeDependentCoordinateFrameRotation( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 2018.5, std::vector()); EXPECT_TRUE(transf->validateParameters().empty()); auto inv_transf = transf->inverse(); EXPECT_EQ(transf->sourceCRS()->nameStr(), inv_transf->targetCRS()->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), inv_transf->sourceCRS()->nameStr()); auto projString = inv_transf->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_TRUE(projString.find("+proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 " "+rz=6 +s=7 +dx=0.1 +dy=0.2 +dz=0.3 +drx=0.4 " "+dry=0.5 +drz=0.6 +ds=0.7 +t_epoch=2018.5 " "+convention=coordinate_frame") != std::string::npos) << projString; // In WKT, use approximate formula auto wkt = inv_transf->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE( wkt.find("Transformation from WGS 84 to NAD83 (approx. inversion)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("Time-dependent Coordinate Frame rotation (geog2D)") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("ID[\"EPSG\",1057]]") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis translation\",-1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis translation\",-2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis translation\",-3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"X-axis rotation\",-4") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Y-axis rotation\",-5") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Z-axis rotation\",-6") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Scale difference\",-7") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of X-axis translation\",-0.1") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Y-axis translation\",-0.2") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Z-axis translation\",-0.3") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of X-axis rotation\",-0.4") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Y-axis rotation\",-0.5") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Z-axis rotation\",-0.6") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Rate of change of Scale difference\",-0.7") != std::string::npos) << wkt; EXPECT_TRUE(wkt.find("\"Parameter reference epoch\",2018.5") != std::string::npos) << wkt; } // --------------------------------------------------------------------------- TEST(operation, transformation_successive_helmert_noop) { auto transf_1 = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4269, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, std::vector()); auto transf_2 = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, std::vector()); auto concat = ConcatenatedOperation::create( PropertyMap(), std::vector{transf_1, transf_2}, std::vector{}); EXPECT_EQ(concat->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, transformation_successive_helmert_non_trivial_1) { auto transf_1 = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4269, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, std::vector()); auto transf_2 = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, 7.0, std::vector()); auto concat = ConcatenatedOperation::create( PropertyMap(), std::vector{transf_1, transf_2}, std::vector{}); EXPECT_NE(concat->exportToPROJString(PROJStringFormatter::create().get()), ""); } // --------------------------------------------------------------------------- TEST(operation, transformation_successive_helmert_non_trivial_2) { auto transf_1 = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4269, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, std::vector()); auto transf_2 = Transformation::createCoordinateFrameRotation( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, std::vector()); auto concat = ConcatenatedOperation::create( PropertyMap(), std::vector{transf_1, transf_2}, std::vector{}); EXPECT_NE(concat->exportToPROJString(PROJStringFormatter::create().get()), ""); } // --------------------------------------------------------------------------- TEST(operation, transformation_createMolodensky) { auto transf = Transformation::createMolodensky( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4269, 1.0, 2.0, 3.0, 4.0, 5.0, std::vector()); EXPECT_TRUE(transf->validateParameters().empty()); auto wkt = transf->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(replaceAll(replaceAll(wkt, " ", ""), "\n", "") .find("METHOD[\"Molodensky\",ID[\"EPSG\",9604]]") != std::string::npos) << wkt; auto inv_transf = transf->inverse(); auto inv_transf_as_transf = nn_dynamic_pointer_cast(inv_transf); ASSERT_TRUE(inv_transf_as_transf != nullptr); EXPECT_EQ(transf->sourceCRS()->nameStr(), inv_transf_as_transf->targetCRS()->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), inv_transf_as_transf->sourceCRS()->nameStr()); auto projString = inv_transf_as_transf->exportToPROJString( PROJStringFormatter::create().get()); EXPECT_EQ(projString, "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=molodensky +ellps=GRS80 +dx=-1 +dy=-2 " "+dz=-3 +da=-4 +df=-5 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_createAbridgedMolodensky) { auto transf = Transformation::createAbridgedMolodensky( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4269, 1.0, 2.0, 3.0, 4.0, 5.0, std::vector()); auto wkt = transf->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(replaceAll(replaceAll(wkt, " ", ""), "\n", "") .find(replaceAll( "METHOD[\"Abridged Molodensky\",ID[\"EPSG\",9605]]", " ", "")) != std::string::npos) << wkt; auto inv_transf = transf->inverse(); auto inv_transf_as_transf = nn_dynamic_pointer_cast(inv_transf); ASSERT_TRUE(inv_transf_as_transf != nullptr); EXPECT_EQ(transf->sourceCRS()->nameStr(), inv_transf_as_transf->targetCRS()->nameStr()); EXPECT_EQ(transf->targetCRS()->nameStr(), inv_transf_as_transf->sourceCRS()->nameStr()); auto projString = inv_transf_as_transf->exportToPROJString( PROJStringFormatter::create().get()); EXPECT_EQ(projString, "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=molodensky +ellps=GRS80 +dx=-1 +dy=-2 " "+dz=-3 +da=-4 +df=-5 +abridged +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step " "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_inverse) { auto transf = Transformation::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "my transformation") .set(Identifier::CODESPACE_KEY, "my codeSpace") .set(Identifier::CODE_KEY, "my code"), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4269, nullptr, PropertyMap() .set(IdentifiedObject::NAME_KEY, "my operation") .set(Identifier::CODESPACE_KEY, "my codeSpace") .set(Identifier::CODE_KEY, "my code"), std::vector{OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "paramName"))}, std::vector{ ParameterValue::createFilename("foo.bin")}, std::vector{ PositionalAccuracy::create("0.1")}); auto inv = transf->inverse(); EXPECT_EQ(inv->inverse(), transf); EXPECT_EQ( inv->exportToWKT(WKTFormatter::create().get()), "COORDINATEOPERATION[\"Inverse of my transformation\",\n" " SOURCECRS[\n" " GEODCRS[\"NAD83\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n" " TARGETCRS[\n" " GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]],\n" " METHOD[\"Inverse of my operation\",\n" " ID[\"INVERSE(my codeSpace)\",\"my code\"]],\n" " PARAMETERFILE[\"paramName\",\"foo.bin\"],\n" " OPERATIONACCURACY[0.1],\n" " ID[\"INVERSE(my codeSpace)\",\"my code\"]]"); EXPECT_THROW(inv->exportToPROJString(PROJStringFormatter::create().get()), FormattingException); } // --------------------------------------------------------------------------- static VerticalCRSNNPtr createVerticalCRS() { PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5101) .set(IdentifiedObject::NAME_KEY, "Ordnance Datum Newlyn"); auto vdatum = VerticalReferenceFrame::create(propertiesVDatum); PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5701) .set(IdentifiedObject::NAME_KEY, "ODN height"); return VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(operation, transformation_createTOWGS84) { EXPECT_THROW(Transformation::createTOWGS84(GeographicCRS::EPSG_4326, std::vector()), InvalidOperation); EXPECT_THROW(Transformation::createTOWGS84(createVerticalCRS(), std::vector(7, 0)), InvalidOperation); } // --------------------------------------------------------------------------- TEST(operation, createAxisOrderReversal) { { auto conv = Conversion::createAxisOrderReversal(false); EXPECT_TRUE(conv->validateParameters().empty()); } { auto conv = Conversion::createAxisOrderReversal(true); EXPECT_TRUE(conv->validateParameters().empty()); } auto latLongDeg = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto longLatDeg = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLongitudeLatitude(UnitOfMeasure::DEGREE)); { auto op = CoordinateOperationFactory::create()->createOperation( latLongDeg, longLatDeg); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=2,1"); } { auto longLatRad = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::EPSG_6326, EllipsoidalCS::createLongitudeLatitude(UnitOfMeasure::RADIAN)); auto op = CoordinateOperationFactory::create()->createOperation( longLatRad, latLongDeg); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } } // --------------------------------------------------------------------------- TEST(operation, utm_export) { auto conv = Conversion::createUTM(PropertyMap(), 1, false); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=utm +zone=1 +south"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"UTM zone 1S\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-177,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",10000000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",16101]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Transverse_Mercator\"],\n" "PARAMETER[\"latitude_of_origin\",0],\n" "PARAMETER[\"central_meridian\",-177],\n" "PARAMETER[\"scale_factor\",0.9996],\n" "PARAMETER[\"false_easting\",500000],\n" "PARAMETER[\"false_northing\",10000000]"); } // --------------------------------------------------------------------------- TEST(operation, tmerc_export) { auto conv = Conversion::createTransverseMercator( PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tmerc +lat_0=1 +lon_0=2 +k=3 +x_0=4 +y_0=5"); { auto formatter = PROJStringFormatter::create(); formatter->setUseApproxTMerc(true); EXPECT_EQ(conv->exportToPROJString(formatter.get()), "+proj=tmerc +approx +lat_0=1 +lon_0=2 +k=3 +x_0=4 +y_0=5"); } EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Transverse Mercator\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Transverse_Mercator\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"scale_factor\",3],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, gstmerc_export) { auto conv = Conversion::createGaussSchreiberTransverseMercator( PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=gstmerc +lat_0=1 +lon_0=2 +k_0=3 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Gauss Schreiber Transverse Mercator\",\n" " METHOD[\"Gauss Schreiber Transverse Mercator\"],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Gauss_Schreiber_Transverse_Mercator\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"scale_factor\",3],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, tmerc_south_oriented_export) { auto conv = Conversion::createTransverseMercatorSouthOriented( PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); // False easting/northing != 0 not supported EXPECT_THROW(conv->exportToPROJString(PROJStringFormatter::create().get()), FormattingException); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Transverse Mercator (South Orientated)\",\n" " METHOD[\"Transverse Mercator (South Orientated)\",\n" " ID[\"EPSG\",9808]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Transverse_Mercator_South_Orientated\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"scale_factor\",3],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); auto wkt = "PROJCRS[\"Hartebeesthoek94 / Lo29\"," " BASEGEODCRS[\"Hartebeesthoek94\"," " DATUM[\"Hartebeesthoek94\"," " ELLIPSOID[\"WGS " "84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1.0]]]]," " CONVERSION[\"South African Survey Grid zone 29\"," " METHOD[\"Transverse Mercator (South " "Orientated)\",ID[\"EPSG\",9808]]," " PARAMETER[\"Latitude of natural " "origin\",0,ANGLEUNIT[\"degree\",0.01745329252]]," " PARAMETER[\"Longitude of natural " "origin\",29,ANGLEUNIT[\"degree\",0.01745329252]]," " PARAMETER[\"Scale factor at natural " "origin\",1,SCALEUNIT[\"unity\",1.0]]," " PARAMETER[\"False easting\",0,LENGTHUNIT[\"metre\",1.0]]," " PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1.0]]]," " CS[cartesian,2]," " AXIS[\"westing (Y)\",west,ORDER[1]]," " AXIS[\"southing (X)\",south,ORDER[2]]," " LENGTHUNIT[\"metre\",1.0]," " ID[\"EPSG\",2053]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tmerc +axis=wsu +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 " "+ellps=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(operation, tped_export) { auto conv = Conversion::createTwoPointEquidistant( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=tpeqd +lat_1=1 +lon_1=2 +lat_2=3 +lon_2=4 +x_0=5 +y_0=6"); auto formatter = WKTFormatter::create(); formatter->simulCurNodeHasId(); EXPECT_EQ(conv->exportToWKT(formatter.get()), "CONVERSION[\"Two Point Equidistant\",\n" " METHOD[\"Two Point Equidistant\"],\n" " PARAMETER[\"Latitude of 1st point\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Longitude of 1st point\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Latitude of 2nd point\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Longitude of 2nd point\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"False easting\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Two_Point_Equidistant\"],\n" "PARAMETER[\"Latitude_Of_1st_Point\",1],\n" "PARAMETER[\"Longitude_Of_1st_Point\",2],\n" "PARAMETER[\"Latitude_Of_2nd_Point\",3],\n" "PARAMETER[\"Longitude_Of_2nd_Point\",4],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, tmg_export) { auto conv = Conversion::createTunisiaMiningGrid( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_THROW(conv->exportToPROJString(PROJStringFormatter::create().get()), FormattingException); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Tunisia Mining Grid\",\n" " METHOD[\"Tunisia Mining Grid\",\n" " ID[\"EPSG\",9816]],\n" " PARAMETER[\"Latitude of false origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Easting at false origin\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Tunisia_Mining_Grid\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, aea_export) { auto conv = Conversion::createAlbersEqualArea(PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=aea +lat_0=1 +lon_0=2 +lat_1=3 +lat_2=4 +x_0=5 +y_0=6"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Albers Equal Area\",\n" " METHOD[\"Albers Equal Area\",\n" " ID[\"EPSG\",9822]],\n" " PARAMETER[\"Latitude of false origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Albers_Conic_Equal_Area\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"standard_parallel_1\",3],\n" "PARAMETER[\"standard_parallel_2\",4],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, azimuthal_equidistant_export) { auto conv = Conversion::createAzimuthalEquidistant( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=aeqd +lat_0=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Azimuthal Equidistant\",\n" " METHOD[\"Azimuthal Equidistant\",\n" " ID[\"EPSG\",1125]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Azimuthal_Equidistant\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, guam_projection_export) { auto conv = Conversion::createGuamProjection( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=aeqd +guam +lat_0=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Guam Projection\",\n" " METHOD[\"Guam Projection\",\n" " ID[\"EPSG\",9831]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_THROW( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(operation, bonne_export) { auto conv = Conversion::createBonne(PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=bonne +lat_1=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Bonne\",\n" " METHOD[\"Bonne\",\n" " ID[\"EPSG\",9827]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Bonne\"],\n" "PARAMETER[\"standard_parallel_1\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); auto obj = WKTParser().createFromWKT( "PROJCS[\"unnamed\"," "GEOGCS[\"unnamed ellipse\"," " DATUM[\"unknown\"," " SPHEROID[\"unnamed\",6378137,298.257223563]]," " PRIMEM[\"Greenwich\",0]," " UNIT[\"degree\",0.0174532925199433]]," "PROJECTION[\"Bonne\"]," "PARAMETER[\"standard_parallel_1\",1]," "PARAMETER[\"central_meridian\",2]," "PARAMETER[\"false_easting\",3]," "PARAMETER[\"false_northing\",4]," "UNIT[\"metre\",1]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=bonne +lat_1=1 +lon_0=2 +x_0=3 +y_0=4 +ellps=WGS84 " "+units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(operation, lambert_cylindrical_equal_area_spherical_export) { auto conv = Conversion::createLambertCylindricalEqualAreaSpherical( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=cea +R_A +lat_ts=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Cylindrical Equal Area (Spherical)\",\n" " METHOD[\"Lambert Cylindrical Equal Area (Spherical)\",\n" " ID[\"EPSG\",9834]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Cylindrical_Equal_Area\"],\n" "PARAMETER[\"standard_parallel_1\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, lambert_cylindrical_equal_area_export) { auto conv = Conversion::createLambertCylindricalEqualArea( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=cea +lat_ts=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Cylindrical Equal Area\",\n" " METHOD[\"Lambert Cylindrical Equal Area\",\n" " ID[\"EPSG\",9835]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Cylindrical_Equal_Area\"],\n" "PARAMETER[\"standard_parallel_1\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, lcc1sp_export) { auto conv = Conversion::createLambertConicConformal_1SP( PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=lcc +lat_1=1 +lat_0=1 +lon_0=2 +k_0=3 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Conic Conformal (1SP)\",\n" " METHOD[\"Lambert Conic Conformal (1SP)\",\n" " ID[\"EPSG\",9801]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Lambert_Conformal_Conic_1SP\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"scale_factor\",3],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, lcc1sp_variant_b_export) { auto conv = Conversion::createLambertConicConformal_1SP_VariantB( PropertyMap(), Angle(1), Scale(2), Angle(3), Angle(4), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=lcc +lat_1=1 +k_0=2 +lat_0=3 +lon_0=4 +x_0=5 +y_0=6"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Conic Conformal (1SP variant B)\",\n" " METHOD[\"Lambert Conic Conformal (1SP variant B)\",\n" " ID[\"EPSG\",1102]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Scale factor at natural origin\",2,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"Latitude of false origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Easting at false origin\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]]"); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_export) { auto conv = Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=lcc +lat_0=1 +lon_0=2 +lat_1=3 +lat_2=4 +x_0=5 +y_0=6"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Conic Conformal (2SP)\",\n" " METHOD[\"Lambert Conic Conformal (2SP)\",\n" " ID[\"EPSG\",9802]],\n" " PARAMETER[\"Latitude of false origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"standard_parallel_1\",3],\n" "PARAMETER[\"standard_parallel_2\",4],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_isEquivalentTo_parallels_switched) { auto conv1 = Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5), Length(6)); auto conv2 = Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(1), Angle(2), Angle(4), Angle(3), Length(5), Length(6)); EXPECT_TRUE( conv1->isEquivalentTo(conv2.get(), IComparable::Criterion::EQUIVALENT)); auto conv3 = Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(3), Length(5), Length(6)); EXPECT_FALSE( conv1->isEquivalentTo(conv3.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_michigan_export) { auto conv = Conversion::createLambertConicConformal_2SP_Michigan( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5), Length(6), Scale(7)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ( conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=lcc +lat_0=1 +lon_0=2 +lat_1=3 +lat_2=4 +x_0=5 +y_0=6 +k_0=7"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Conic Conformal (2SP Michigan)\",\n" " METHOD[\"Lambert Conic Conformal (2SP Michigan)\",\n" " ID[\"EPSG\",1051]],\n" " PARAMETER[\"Latitude of false origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]],\n" " PARAMETER[\"Ellipsoid scaling factor\",7,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",1038]]]"); EXPECT_THROW( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_belgium_export) { auto conv = Conversion::createLambertConicConformal_2SP_Belgium( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5), Length(6)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=lcc +lat_0=1 +lon_0=2 +lat_1=3 +lat_2=4 +x_0=5 +y_0=6"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Conic Conformal (2SP Belgium)\",\n" " METHOD[\"Lambert Conic Conformal (2SP Belgium)\",\n" " ID[\"EPSG\",9803]],\n" " PARAMETER[\"Latitude of false origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Lambert_Conformal_Conic_2SP_Belgium\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"standard_parallel_1\",3],\n" "PARAMETER[\"standard_parallel_2\",4],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, cassini_soldner_export) { auto conv = Conversion::createCassiniSoldner( PropertyMap(), Angle(1), Angle(2), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=cass +lat_0=1 +lon_0=2 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Cassini-Soldner\",\n" " METHOD[\"Cassini-Soldner\",\n" " ID[\"EPSG\",9806]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Cassini_Soldner\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, equidistant_conic_export) { auto conv = Conversion::createEquidistantConic(PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=eqdc +lat_0=1 +lon_0=2 +lat_1=3 +lat_2=4 +x_0=5 +y_0=6"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Equidistant Conic\",\n" " METHOD[\"Equidistant Conic\",\n" " ID[\"EPSG\",1119]],\n" " PARAMETER[\"Latitude of false origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Equidistant_Conic\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"standard_parallel_1\",3],\n" "PARAMETER[\"standard_parallel_2\",4],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, eckert_export) { std::vector numbers{"", "1", "2", "3", "4", "5", "6"}; std::vector latinNumbers{"", "I", "II", "III", "IV", "V", "VI"}; for (int i = 1; i <= 6; i++) { auto conv = (i == 1) ? Conversion::createEckertI(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 2) ? Conversion::createEckertII(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 3) ? Conversion::createEckertIII(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 4) ? Conversion::createEckertIV(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 5) ? Conversion::createEckertV(PropertyMap(), Angle(1), Length(2), Length(3)) : Conversion::createEckertVI(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=eck" + numbers[i] + " +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Eckert " + latinNumbers[i] + "\",\n" " METHOD[\"Eckert " + latinNumbers[i] + "\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ(conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) .get()), "PROJECTION[\"Eckert_" + latinNumbers[i] + "\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } } // --------------------------------------------------------------------------- TEST(operation, createEquidistantCylindrical) { auto conv = Conversion::createEquidistantCylindrical( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=eqc +lat_ts=1 +lat_0=0 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Equidistant Cylindrical\",\n" " METHOD[\"Equidistant Cylindrical\",\n" " ID[\"EPSG\",1028]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Equirectangular\"],\n" "PARAMETER[\"standard_parallel_1\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); EXPECT_TRUE(conv->validateParameters().empty()); } // --------------------------------------------------------------------------- TEST(operation, createEquidistantCylindricalSpherical) { auto conv = Conversion::createEquidistantCylindricalSpherical( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=eqc +lat_ts=1 +lat_0=0 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Equidistant Cylindrical (Spherical)\",\n" " METHOD[\"Equidistant Cylindrical (Spherical)\",\n" " ID[\"EPSG\",1029]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Equirectangular\"],\n" "PARAMETER[\"standard_parallel_1\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); EXPECT_TRUE(conv->validateParameters().empty()); } // --------------------------------------------------------------------------- TEST(operation, equidistant_cylindrical_lat_0) { auto obj = PROJStringParser().createFromPROJString( "+proj=eqc +ellps=sphere +lat_0=-2 +lat_ts=1 +lon_0=-10 +type=crs"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto wkt = crs->exportToWKT(WKTFormatter::create().get()); EXPECT_TRUE(wkt.find("PARAMETER[\"Latitude of natural origin\",-2") != std::string::npos) << wkt; auto projString = crs->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4) .get()); EXPECT_EQ(projString, "+proj=eqc +lat_ts=1 +lat_0=-2 +lon_0=-10 +x_0=0 +y_0=0 " "+ellps=sphere +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(operation, gall_export) { auto conv = Conversion::createGall(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=gall +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Gall Stereographic\",\n" " METHOD[\"Gall Stereographic\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Gall_Stereographic\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } // --------------------------------------------------------------------------- TEST(operation, goode_homolosine_export) { auto conv = Conversion::createGoodeHomolosine(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=goode +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Goode Homolosine\",\n" " METHOD[\"Goode Homolosine\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Goode_Homolosine\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } // --------------------------------------------------------------------------- TEST(operation, interrupted_goode_homolosine_export) { auto conv = Conversion::createInterruptedGoodeHomolosine( PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=igh +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Interrupted Goode Homolosine\",\n" " METHOD[\"Interrupted Goode Homolosine\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Interrupted_Goode_Homolosine\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } // --------------------------------------------------------------------------- TEST(operation, geostationary_satellite_sweep_x_export) { auto conv = Conversion::createGeostationarySatelliteSweepX( PropertyMap(), Angle(1), Length(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=geos +sweep=x +lon_0=1 +h=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Geostationary Satellite (Sweep X)\",\n" " METHOD[\"Geostationary Satellite (Sweep X)\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Satellite Height\",2,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); auto crs = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, conv, CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(wkt1.find("PROJECTION[\"Geostationary_Satellite\"]") != std::string::npos) << wkt1; EXPECT_TRUE(wkt1.find("EXTENSION[\"PROJ4\",\"+proj=geos +sweep=x +lon_0=1 " "+h=2 +x_0=3 +y_0=4 +datum=WGS84 +units=m " "+no_defs\"]]") != std::string::npos) << wkt1; } // --------------------------------------------------------------------------- TEST(operation, geostationary_satellite_sweep_y_export) { auto conv = Conversion::createGeostationarySatelliteSweepY( PropertyMap(), Angle(1), Length(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=geos +lon_0=1 +h=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Geostationary Satellite (Sweep Y)\",\n" " METHOD[\"Geostationary Satellite (Sweep Y)\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Satellite Height\",2,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Geostationary_Satellite\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"satellite_height\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, gnomonic_export) { auto conv = Conversion::createGnomonic(PropertyMap(), Angle(1), Angle(2), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=gnom +lat_0=1 +lon_0=2 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Gnomonic\",\n" " METHOD[\"Gnomonic\"],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Gnomonic\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, hotine_oblique_mercator_variant_A_export) { auto conv = Conversion::createHotineObliqueMercatorVariantA( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Scale(5), Length(6), Length(7)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=omerc +no_uoff +lat_0=1 +lonc=2 +alpha=3 +gamma=4 +k=5 " "+x_0=6 +y_0=7"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Hotine Oblique Mercator (variant A)\",\n" " METHOD[\"Hotine Oblique Mercator (variant A)\",\n" " ID[\"EPSG\",9812]],\n" " PARAMETER[\"Latitude of projection centre\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection centre\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth at projection centre\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Angle from Rectified to Skew Grid\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8814]],\n" " PARAMETER[\"Scale factor at projection centre\",5,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"False easting\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",7,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Hotine_Oblique_Mercator\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"azimuth\",3],\n" "PARAMETER[\"rectified_grid_angle\",4],\n" "PARAMETER[\"scale_factor\",5],\n" "PARAMETER[\"false_easting\",6],\n" "PARAMETER[\"false_northing\",7]"); } // --------------------------------------------------------------------------- TEST(operation, hotine_oblique_mercator_variant_A_export_swiss_mercator) { auto conv = Conversion::createHotineObliqueMercatorVariantA( PropertyMap(), Angle(1), Angle(2), Angle(90), Angle(90), Scale(5), Length(6), Length(7)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=somerc +lat_0=1 +lon_0=2 +k_0=5 " "+x_0=6 +y_0=7"); } // --------------------------------------------------------------------------- TEST(operation, hotine_oblique_mercator_variant_B_export) { auto conv = Conversion::createHotineObliqueMercatorVariantB( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Scale(5), Length(6), Length(7)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=omerc +lat_0=1 +lonc=2 +alpha=3 +gamma=4 +k=5 " "+x_0=6 +y_0=7"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Hotine Oblique Mercator (variant B)\",\n" " METHOD[\"Hotine Oblique Mercator (variant B)\",\n" " ID[\"EPSG\",9815]],\n" " PARAMETER[\"Latitude of projection centre\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection centre\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth at projection centre\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Angle from Rectified to Skew Grid\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8814]],\n" " PARAMETER[\"Scale factor at projection centre\",5,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"Easting at projection centre\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8816]],\n" " PARAMETER[\"Northing at projection centre\",7,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8817]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Hotine_Oblique_Mercator_Azimuth_Center\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"azimuth\",3],\n" "PARAMETER[\"rectified_grid_angle\",4],\n" "PARAMETER[\"scale_factor\",5],\n" "PARAMETER[\"false_easting\",6],\n" "PARAMETER[\"false_northing\",7]"); } // --------------------------------------------------------------------------- TEST(operation, hotine_oblique_mercator_variant_B_export_swiss_mercator) { auto conv = Conversion::createHotineObliqueMercatorVariantB( PropertyMap(), Angle(1), Angle(2), Angle(90), Angle(90), Scale(5), Length(6), Length(7)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=somerc +lat_0=1 +lon_0=2 +k_0=5 " "+x_0=6 +y_0=7"); } // --------------------------------------------------------------------------- TEST(operation, hotine_oblique_mercator_two_point_natural_origin_export) { auto conv = Conversion::createHotineObliqueMercatorTwoPointNaturalOrigin( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Angle(5), Scale(6), Length(7), Length(8)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=omerc +lat_0=1 +lat_1=2 +lon_1=3 +lat_2=4 +lon_2=5 +k=6 " "+x_0=7 +y_0=8"); auto formatter = WKTFormatter::create(); formatter->simulCurNodeHasId(); EXPECT_EQ( conv->exportToWKT(formatter.get()), "CONVERSION[\"Hotine Oblique Mercator Two Point Natural Origin\",\n" " METHOD[\"Hotine Oblique Mercator Two Point Natural Origin\"],\n" " PARAMETER[\"Latitude of projection centre\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Latitude of 1st point\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Longitude of 1st point\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Latitude of 2nd point\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Longitude of 2nd point\",5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Scale factor at projection centre\",6,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"Easting at projection centre\",7,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8816]],\n" " PARAMETER[\"Northing at projection centre\",8,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8817]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Hotine_Oblique_Mercator_Two_Point_Natural_Origin\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"latitude_of_point_1\",2],\n" "PARAMETER[\"longitude_of_point_1\",3],\n" "PARAMETER[\"latitude_of_point_2\",4],\n" "PARAMETER[\"longitude_of_point_2\",5],\n" "PARAMETER[\"scale_factor\",6],\n" "PARAMETER[\"false_easting\",7],\n" "PARAMETER[\"false_northing\",8]"); } // --------------------------------------------------------------------------- TEST(operation, laborde_oblique_mercator_export) { auto conv = Conversion::createLabordeObliqueMercator( PropertyMap(), Angle(1), Angle(2), Angle(3), Scale(4), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=labrd +lat_0=1 +lon_0=2 +azi=3 +k=4 +x_0=5 +y_0=6"); auto formatter = WKTFormatter::create(); formatter->simulCurNodeHasId(); EXPECT_EQ(conv->exportToWKT(formatter.get()), "CONVERSION[\"Laborde Oblique Mercator\",\n" " METHOD[\"Laborde Oblique Mercator\",\n" " ID[\"EPSG\",9813]],\n" " PARAMETER[\"Latitude of projection centre\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection centre\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth at projection centre\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Scale factor at projection centre\",4,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"False easting\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Laborde_Oblique_Mercator\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"azimuth\",3],\n" "PARAMETER[\"scale_factor\",4],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, imw_polyconic_export) { auto conv = Conversion::createInternationalMapWorldPolyconic( PropertyMap(), Angle(1), Angle(3), Angle(4), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=imw_p +lon_0=1 +lat_1=3 +lat_2=4 +x_0=5 +y_0=6"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"International Map of the World Polyconic\",\n" " METHOD[\"International Map of the World Polyconic\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Latitude of 1st point\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"Latitude of 2nd point\",4,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"False easting\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"International_Map_of_the_World_Polyconic\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"Latitude_Of_1st_Point\",3],\n" "PARAMETER[\"Latitude_Of_2nd_Point\",4],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, krovak_north_oriented_export) { auto conv = Conversion::createKrovakNorthOriented( PropertyMap(), Angle(49.5), Angle(42.5), Angle(30.2881397527778), Angle(78.5), Scale(0.9999), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.2881397527778 " "+k=0.9999 +x_0=5 +y_0=6"); EXPECT_EQ( conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Krovak (North Orientated)\",\n" " METHOD[\"Krovak (North Orientated)\",\n" " ID[\"EPSG\",1041]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",42.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Krovak\"],\n" "PARAMETER[\"latitude_of_center\",49.5],\n" "PARAMETER[\"longitude_of_center\",42.5],\n" "PARAMETER[\"azimuth\",30.2881397527778],\n" "PARAMETER[\"pseudo_standard_parallel_1\",78.5],\n" "PARAMETER[\"scale_factor\",0.9999],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, krovak_export) { auto conv = Conversion::createKrovak( PropertyMap(), Angle(49.5), Angle(42.5), Angle(30.2881397527778), Angle(78.5), Scale(0.9999), Length(5), Length(6)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=krovak +axis=swu +lat_0=49.5 +lon_0=42.5 " "+alpha=30.2881397527778 +k=0.9999 +x_0=5 " "+y_0=6"); EXPECT_EQ( conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Krovak\",\n" " METHOD[\"Krovak\",\n" " ID[\"EPSG\",9819]],\n" " PARAMETER[\"Latitude of projection centre\",49.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of origin\",42.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"Co-latitude of cone axis\",30.2881397527778,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",1036]],\n" " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8818]],\n" " PARAMETER[\"Scale factor on pseudo standard parallel\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8819]],\n" " PARAMETER[\"False easting\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Krovak\"],\n" "PARAMETER[\"latitude_of_center\",49.5],\n" "PARAMETER[\"longitude_of_center\",42.5],\n" "PARAMETER[\"azimuth\",30.2881397527778],\n" "PARAMETER[\"pseudo_standard_parallel_1\",78.5],\n" "PARAMETER[\"scale_factor\",0.9999],\n" "PARAMETER[\"false_easting\",5],\n" "PARAMETER[\"false_northing\",6]"); } // --------------------------------------------------------------------------- TEST(operation, lambert_azimuthal_equal_area_export) { auto conv = Conversion::createLambertAzimuthalEqualArea( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=laea +lat_0=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Lambert Azimuthal Equal Area\",\n" " METHOD[\"Lambert Azimuthal Equal Area\",\n" " ID[\"EPSG\",9820]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Lambert_Azimuthal_Equal_Area\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, miller_cylindrical_export) { auto conv = Conversion::createMillerCylindrical(PropertyMap(), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=mill +R_A +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Miller Cylindrical\",\n" " METHOD[\"Miller Cylindrical\"],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Miller_Cylindrical\"],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_A_export) { auto conv = Conversion::createMercatorVariantA( PropertyMap(), Angle(0), Angle(1), Scale(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +lon_0=1 +k=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Mercator (variant A)\",\n" " METHOD[\"Mercator (variant A)\",\n" " ID[\"EPSG\",9804]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",2,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Mercator_1SP\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"scale_factor\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_A_export_latitude_origin_non_zero) { auto conv = Conversion::createMercatorVariantA( PropertyMap(), Angle(10), Angle(1), Scale(2), Length(3), Length(4)); EXPECT_THROW(conv->exportToPROJString(PROJStringFormatter::create().get()), FormattingException); } // --------------------------------------------------------------------------- TEST(operation, wkt1_import_mercator_variant_A) { auto wkt = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"central_meridian\",1],\n" " PARAMETER[\"scale_factor\",2],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto conversion = crs->derivingConversion(); auto convRef = Conversion::createMercatorVariantA( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(0), Angle(1), Scale(2), Length(3), Length(4)); EXPECT_EQ(conversion->exportToWKT(WKTFormatter::create().get()), convRef->exportToWKT(WKTFormatter::create().get())); } // --------------------------------------------------------------------------- TEST(operation, wkt1_import_mercator_variant_A_that_is_variant_B) { // Addresses https://trac.osgeo.org/gdal/ticket/3026 auto wkt = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"latitude_of_origin\",-1],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto conversion = crs->derivingConversion(); auto convRef = Conversion::createMercatorVariantB( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(-1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conversion->isEquivalentTo(convRef.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_B_export) { auto conv = Conversion::createMercatorVariantB( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +lat_ts=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Mercator (variant B)\",\n" " METHOD[\"Mercator (variant B)\",\n" " ID[\"EPSG\",9805]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Mercator_2SP\"],\n" "PARAMETER[\"standard_parallel_1\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, odd_mercator_1sp_with_non_null_latitude) { auto obj = WKTParser().createFromWKT( "PROJCS[\"unnamed\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"latitude_of_origin\",30],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"scale_factor\",0.99],\n" " PARAMETER[\"false_easting\",0],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_THROW(crs->exportToPROJString(PROJStringFormatter::create().get()), FormattingException); } // --------------------------------------------------------------------------- TEST(operation, odd_mercator_2sp_with_latitude_of_origin) { auto obj = WKTParser().createFromWKT( "PROJCS[\"unnamed\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Mercator_2SP\"],\n" " PARAMETER[\"standard_parallel_1\",30],\n" " PARAMETER[\"latitude_of_origin\",40],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"false_easting\",0],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_THROW(crs->exportToPROJString(PROJStringFormatter::create().get()), FormattingException); } // --------------------------------------------------------------------------- TEST(operation, webmerc_export) { auto conv = Conversion::createPopularVisualisationPseudoMercator( PropertyMap(), Angle(0), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=webmerc +lat_0=0 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Popular Visualisation Pseudo Mercator\",\n" " METHOD[\"Popular Visualisation Pseudo Mercator\",\n" " ID[\"EPSG\",1024]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); auto projCRS = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Pseudo-Mercator"), GeographicCRS::EPSG_4326, conv, CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); EXPECT_EQ( projCRS->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJCS[\"Pseudo-Mercator\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS_1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563,\n" " AUTHORITY[\"EPSG\",\"7030\"]],\n" " AUTHORITY[\"EPSG\",\"6326\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4326\"]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " EXTENSION[\"PROJ4\",\"+proj=merc " "+a=6378137 +b=6378137 +lat_ts=0 +lon_0=2 " "+x_0=3 +y_0=4 +k=1 +units=m " "+nadgrids=@null +wktext +no_defs\"]]"); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, projCRS); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=webmerc " "+lat_0=0 +lon_0=2 +x_0=3 +y_0=4 +ellps=WGS84"); EXPECT_EQ( projCRS->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=2 +x_0=3 " "+y_0=4 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(operation, webmerc_import_from_GDAL_wkt1) { auto projCRS = ProjectedCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "Pseudo-Mercator"), GeographicCRS::EPSG_4326, Conversion::createPopularVisualisationPseudoMercator( PropertyMap(), Angle(0), Angle(0), Length(0), Length(0)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto wkt1 = projCRS->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); auto obj = WKTParser().createFromWKT(wkt1); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto convGot = crs->derivingConversion(); EXPECT_EQ(convGot->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"unnamed\",\n" " METHOD[\"Popular Visualisation Pseudo Mercator\",\n" " ID[\"EPSG\",1024]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); } // --------------------------------------------------------------------------- TEST(operation, webmerc_import_from_GDAL_wkt1_with_EPSG_code) { auto projCRS = ProjectedCRS::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "Pseudo-Mercator") .set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, "3857"), GeographicCRS::EPSG_4326, Conversion::createPopularVisualisationPseudoMercator( PropertyMap(), Angle(0), Angle(0), Length(0), Length(0)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto wkt1 = projCRS->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); EXPECT_TRUE(wkt1.find("3857") != std::string::npos) << wkt1; auto obj = WKTParser().createFromWKT(wkt1); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->identifiers().size(), 1U); } // --------------------------------------------------------------------------- TEST(operation, webmerc_import_from_GDAL_wkt1_EPSG_3785_deprecated) { auto wkt1 = "PROJCS[\"Popular Visualisation CRS / Mercator (deprecated)\"," " GEOGCS[\"Popular Visualisation CRS\"," " DATUM[\"Popular_Visualisation_Datum\"," " SPHEROID[\"Popular Visualisation Sphere\",6378137,0," " AUTHORITY[\"EPSG\",\"7059\"]]," " TOWGS84[0,0,0,0,0,0,0]," " AUTHORITY[\"EPSG\",\"6055\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9122\"]]," " AUTHORITY[\"EPSG\",\"4055\"]]," " PROJECTION[\"Mercator_1SP\"]," " PARAMETER[\"central_meridian\",0]," " PARAMETER[\"scale_factor\",1]," " PARAMETER[\"false_easting\",0]," " PARAMETER[\"false_northing\",0]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"X\",EAST]," " AXIS[\"Y\",NORTH]," " EXTENSION[\"PROJ4\",\"+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\"]]"; auto obj = WKTParser().createFromWKT(wkt1); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 " "+y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs"); auto convGot = crs->derivingConversion(); EXPECT_EQ(convGot->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"unnamed\",\n" " METHOD[\"Popular Visualisation Pseudo Mercator\",\n" " ID[\"EPSG\",1024]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); } // --------------------------------------------------------------------------- TEST(operation, webmerc_import_from_WKT2_EPSG_3785_deprecated) { auto wkt2 = "PROJCRS[\"Popular Visualisation CRS / Mercator\",\n" " BASEGEODCRS[\"Popular Visualisation CRS\",\n" " DATUM[\"Popular Visualisation Datum\",\n" " ELLIPSOID[\"Popular Visualisation Sphere\",6378137,0,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"Popular Visualisation Mercator\",\n" " METHOD[\"Mercator (1SP) (Spherical)\",\n" " ID[\"EPSG\",9841]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]"; auto obj = WKTParser().createFromWKT(wkt2); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ( crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 " "+y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2015).get()), wkt2); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, DatabaseContext::create()) .get()), "PROJCS[\"Popular Visualisation CRS / Mercator\",\n" " GEOGCS[\"Popular Visualisation CRS\",\n" " DATUM[\"Popular_Visualisation_Datum\",\n" " SPHEROID[\"Popular Visualisation Sphere\",6378137,0],\n" " TOWGS84[0,0,0,0,0,0,0]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"central_meridian\",0],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",0],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0 " "+lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext " "+no_defs\"]]"); } // --------------------------------------------------------------------------- TEST(operation, webmerc_import_from_broken_esri_WGS_84_Pseudo_Mercator) { // Likely the result of a broken export of GDAL morphToESRI() auto wkt1 = "PROJCS[\"WGS_84_Pseudo_Mercator\",GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\"," "6378137,298.257223563]],PRIMEM[\"Greenwich\",0]," "UNIT[\"Degree\",0.017453292519943295]]," "PROJECTION[\"Mercator\"],PARAMETER[\"central_meridian\",0]," "PARAMETER[\"false_easting\",0]," "PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]," "PARAMETER[\"standard_parallel_1\",0.0]]"; auto obj = WKTParser().setStrict(false).createFromWKT(wkt1); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto convGot = crs->derivingConversion(); EXPECT_EQ(convGot->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"unnamed\",\n" " METHOD[\"Popular Visualisation Pseudo Mercator\",\n" " ID[\"EPSG\",1024]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); } // --------------------------------------------------------------------------- TEST(operation, mercator_spherical_export) { auto conv = Conversion::createMercatorSpherical( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +R_C +lat_0=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Mercator (Spherical)\",\n" " METHOD[\"Mercator (Spherical)\",\n" " ID[\"EPSG\",1026]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); } // --------------------------------------------------------------------------- TEST(operation, mercator_spherical_import) { auto wkt2 = "PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Mercator (Spherical)\",\n" " ID[\"EPSG\",1026]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt2); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc +R_C +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 " "+units=m +no_defs +type=crs"); EXPECT_EQ( crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()), wkt2); } // --------------------------------------------------------------------------- TEST(operation, mollweide_export) { auto conv = Conversion::createMollweide(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=moll +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Mollweide\",\n" " METHOD[\"Mollweide\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Mollweide\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } // --------------------------------------------------------------------------- TEST(operation, nzmg_export) { auto conv = Conversion::createNewZealandMappingGrid( PropertyMap(), Angle(1), Angle(2), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=nzmg +lat_0=1 +lon_0=2 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"New Zealand Map Grid\",\n" " METHOD[\"New Zealand Map Grid\",\n" " ID[\"EPSG\",9811]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"New_Zealand_Map_Grid\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, oblique_stereographic_export) { auto conv = Conversion::createObliqueStereographic( PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=sterea +lat_0=1 +lon_0=2 +k=3 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Oblique Stereographic\",\n" " METHOD[\"Oblique Stereographic\",\n" " ID[\"EPSG\",9809]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Oblique_Stereographic\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"scale_factor\",3],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, orthographic_export) { auto conv = Conversion::createOrthographic(PropertyMap(), Angle(1), Angle(2), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=ortho +lat_0=1 +lon_0=2 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Orthographic\",\n" " METHOD[\"Orthographic\",\n" " ID[\"EPSG\",9840]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Orthographic\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, local_orthographic_export) { auto conv = Conversion::createLocalOrthographic( PropertyMap(), Angle(1), Angle(2), Angle(3), Scale(1.25), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=ortho +lat_0=1 +lon_0=2 +alpha=3 +k=1.25 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Local Orthographic\",\n" " METHOD[\"Local Orthographic\",\n" " ID[\"EPSG\",1130]],\n" " PARAMETER[\"Latitude of projection centre\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection centre\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth at projection centre\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Scale factor at projection centre\",1.25,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"Easting at projection centre\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8816]],\n" " PARAMETER[\"Northing at projection centre\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8817]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Local Orthographic\"],\n" "PARAMETER[\"latitude_of_center\",1],\n" "PARAMETER[\"longitude_of_center\",2],\n" "PARAMETER[\"azimuth\",3],\n" "PARAMETER[\"scale_factor\",1.25],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, american_polyconic_export) { auto conv = Conversion::createAmericanPolyconic( PropertyMap(), Angle(1), Angle(2), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=poly +lat_0=1 +lon_0=2 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"American Polyconic\",\n" " METHOD[\"American Polyconic\",\n" " ID[\"EPSG\",9818]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Polyconic\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, polar_stereographic_variant_A_export) { auto conv = Conversion::createPolarStereographicVariantA( PropertyMap(), Angle(90), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=stere +lat_0=90 +lon_0=2 +k=3 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Polar Stereographic (variant A)\",\n" " METHOD[\"Polar Stereographic (variant A)\",\n" " ID[\"EPSG\",9810]],\n" " PARAMETER[\"Latitude of natural origin\",90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Polar_Stereographic\"],\n" "PARAMETER[\"latitude_of_origin\",90],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"scale_factor\",3],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, polar_stereographic_variant_B_export_positive_lat) { auto conv = Conversion::createPolarStereographicVariantB( PropertyMap(), Angle(70), Angle(2), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=2 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Polar Stereographic (variant B)\",\n" " METHOD[\"Polar Stereographic (variant B)\",\n" " ID[\"EPSG\",9829]],\n" " PARAMETER[\"Latitude of standard parallel\",70,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8832]],\n" " PARAMETER[\"Longitude of origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8833]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Polar_Stereographic\"],\n" "PARAMETER[\"latitude_of_origin\",70],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, polar_stereographic_variant_B_export_negative_lat) { auto conv = Conversion::createPolarStereographicVariantB( PropertyMap(), Angle(-70), Angle(2), Length(4), Length(5)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=2 +x_0=4 +y_0=5"); } // --------------------------------------------------------------------------- TEST(operation, wkt1_import_polar_stereographic_variantA) { auto wkt = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",-90],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",3],\n" " PARAMETER[\"false_easting\",4],\n" " PARAMETER[\"false_northing\",5],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto conversion = crs->derivingConversion(); auto convRef = Conversion::createPolarStereographicVariantA( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(-90), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_EQ(conversion->exportToWKT(WKTFormatter::create().get()), convRef->exportToWKT(WKTFormatter::create().get())); } // --------------------------------------------------------------------------- TEST(operation, wkt1_import_polar_stereographic_variantB) { auto wkt = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",-70],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",4],\n" " PARAMETER[\"false_northing\",5],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto conversion = crs->derivingConversion(); auto convRef = Conversion::createPolarStereographicVariantB( PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(-70), Angle(2), Length(4), Length(5)); EXPECT_EQ(conversion->exportToWKT(WKTFormatter::create().get()), convRef->exportToWKT(WKTFormatter::create().get())); } // --------------------------------------------------------------------------- TEST(operation, wkt1_import_polar_stereographic_ambiguous) { auto wkt = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Polar_Stereographic\"],\n" " PARAMETER[\"latitude_of_origin\",-70],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",3],\n" " PARAMETER[\"false_easting\",4],\n" " PARAMETER[\"false_northing\",5],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto conversion = crs->derivingConversion(); EXPECT_EQ(conversion->method()->nameStr(), "Polar_Stereographic"); } // --------------------------------------------------------------------------- TEST(operation, wkt1_import_equivalent_parameters) { auto wkt = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Hotine Oblique Mercator Two Point Natural " "Origin\"],\n" " PARAMETER[\"latitude_of_origin\",1],\n" " PARAMETER[\"Latitude_Of_1st_Point\",2],\n" " PARAMETER[\"Longitude_Of_1st_Point\",3],\n" " PARAMETER[\"Latitude_Of_2nd_Point\",4],\n" " PARAMETER[\"Longitude_Of 2nd_Point\",5],\n" " PARAMETER[\"scale_factor\",6],\n" " PARAMETER[\"false_easting\",7],\n" " PARAMETER[\"false_northing\",8],\n" " UNIT[\"metre\",1]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto conversion = crs->derivingConversion(); auto convRef = Conversion::createHotineObliqueMercatorTwoPointNaturalOrigin( PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Angle(5), Scale(6), Length(7), Length(8)); EXPECT_EQ( conversion->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), convRef->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get())); } // --------------------------------------------------------------------------- TEST(operation, robinson_export) { auto conv = Conversion::createRobinson(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=robin +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Robinson\",\n" " METHOD[\"Robinson\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Robinson\"],\n" "PARAMETER[\"longitude_of_center\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } // --------------------------------------------------------------------------- TEST(operation, sinusoidal_export) { auto conv = Conversion::createSinusoidal(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=sinu +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Sinusoidal\",\n" " METHOD[\"Sinusoidal\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Sinusoidal\"],\n" "PARAMETER[\"longitude_of_center\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } // --------------------------------------------------------------------------- TEST(operation, stereographic_export) { auto conv = Conversion::createStereographic( PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=stere +lat_0=1 +lon_0=2 +k=3 +x_0=4 +y_0=5"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Stereographic\",\n" " METHOD[\"Stereographic\"],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Stereographic\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"scale_factor\",3],\n" "PARAMETER[\"false_easting\",4],\n" "PARAMETER[\"false_northing\",5]"); } // --------------------------------------------------------------------------- TEST(operation, vandergrinten_export) { auto conv = Conversion::createVanDerGrinten(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=vandg +R_A +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Van Der Grinten\",\n" " METHOD[\"Van Der Grinten\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"VanDerGrinten\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } // --------------------------------------------------------------------------- TEST(operation, wagner_export) { std::vector numbers{"", "1", "2", "3", "4", "5", "6", "7"}; std::vector latinNumbers{"", "I", "II", "III", "IV", "V", "VI", "VII"}; for (int i = 1; i <= 7; i++) { if (i == 3) continue; auto conv = (i == 1) ? Conversion::createWagnerI(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 2) ? Conversion::createWagnerII(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 4) ? Conversion::createWagnerIV(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 5) ? Conversion::createWagnerV(PropertyMap(), Angle(1), Length(2), Length(3)) : (i == 6) ? Conversion::createWagnerVI(PropertyMap(), Angle(1), Length(2), Length(3)) : Conversion::createWagnerVII(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=wag" + numbers[i] + " +lon_0=1 +x_0=2 +y_0=3"); auto formatter = WKTFormatter::create(); formatter->simulCurNodeHasId(); EXPECT_EQ(conv->exportToWKT(formatter.get()), "CONVERSION[\"Wagner " + latinNumbers[i] + "\",\n" " METHOD[\"Wagner " + latinNumbers[i] + "\"],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ(conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL) .get()), "PROJECTION[\"Wagner_" + latinNumbers[i] + "\"],\n" "PARAMETER[\"central_meridian\",1],\n" "PARAMETER[\"false_easting\",2],\n" "PARAMETER[\"false_northing\",3]"); } } // --------------------------------------------------------------------------- TEST(operation, wagnerIII_export) { auto conv = Conversion::createWagnerIII(PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=wag3 +lat_ts=1 +lon_0=2 +x_0=3 +y_0=4"); auto formatter = WKTFormatter::create(); formatter->simulCurNodeHasId(); EXPECT_EQ(conv->exportToWKT(formatter.get()), "CONVERSION[\"Wagner III\",\n" " METHOD[\"Wagner III\"],\n" " PARAMETER[\"Latitude of true scale\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Wagner_III\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, qsc_export) { auto conv = Conversion::createQuadrilateralizedSphericalCube( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=qsc +lat_0=1 +lon_0=2 +x_0=3 +y_0=4"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Quadrilateralized Spherical Cube\",\n" " METHOD[\"Quadrilateralized Spherical Cube\"],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Quadrilateralized_Spherical_Cube\"],\n" "PARAMETER[\"latitude_of_origin\",1],\n" "PARAMETER[\"central_meridian\",2],\n" "PARAMETER[\"false_easting\",3],\n" "PARAMETER[\"false_northing\",4]"); } // --------------------------------------------------------------------------- TEST(operation, sch_export) { auto conv = Conversion::createSphericalCrossTrackHeight( PropertyMap(), Angle(1), Angle(2), Angle(3), Length(4)); EXPECT_TRUE(conv->validateParameters().empty()); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=sch +plat_0=1 +plon_0=2 +phdg_0=3 +h_0=4"); auto formatter = WKTFormatter::create(); formatter->simulCurNodeHasId(); EXPECT_EQ(conv->exportToWKT(formatter.get()), "CONVERSION[\"Spherical Cross-Track Height\",\n" " METHOD[\"Spherical Cross-Track Height\"],\n" " PARAMETER[\"Peg point latitude\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Peg point longitude\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Peg point heading\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " PARAMETER[\"Peg point height\",4,\n" " LENGTHUNIT[\"metre\",1]]]"); EXPECT_EQ( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), "PROJECTION[\"Spherical_Cross_Track_Height\"],\n" "PARAMETER[\"peg_point_latitude\",1],\n" "PARAMETER[\"peg_point_longitude\",2],\n" "PARAMETER[\"peg_point_heading\",3],\n" "PARAMETER[\"peg_point_height\",4]"); } // --------------------------------------------------------------------------- TEST(operation, conversion_inverse) { auto conv = Conversion::createTransverseMercator( PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)); auto inv = conv->inverse(); EXPECT_EQ(inv->inverse(), conv); EXPECT_EQ(inv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Inverse of Transverse Mercator\",\n" " METHOD[\"Inverse of Transverse Mercator\",\n" " ID[\"INVERSE(EPSG)\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",3,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); EXPECT_EQ(inv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=tmerc +lat_0=1 +lon_0=2 +k=3 " "+x_0=4 +y_0=5"); EXPECT_TRUE(inv->isEquivalentTo(inv.get())); EXPECT_FALSE(inv->isEquivalentTo(createUnrelatedObject().get())); EXPECT_TRUE( conv->isEquivalentTo(conv->CoordinateOperation::shallowClone().get())); EXPECT_TRUE( inv->isEquivalentTo(inv->CoordinateOperation::shallowClone().get())); } // --------------------------------------------------------------------------- TEST(operation, eqearth_export) { auto conv = Conversion::createEqualEarth(PropertyMap(), Angle(1), Length(2), Length(3)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=eqearth +lon_0=1 +x_0=2 +y_0=3"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Equal Earth\",\n" " METHOD[\"Equal Earth\",\n" " ID[\"EPSG\",1078]],\n" " PARAMETER[\"Longitude of natural origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",2,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); } // --------------------------------------------------------------------------- TEST(operation, vertical_perspective_export) { auto conv = Conversion::createVerticalPerspective( PropertyMap(), Angle(1), Angle(2), Length(3), Length(4), Length(5), Length(6)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=nsper +lat_0=1 +lon_0=2 +h=4 +x_0=5 +y_0=6"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Vertical Perspective\",\n" " METHOD[\"Vertical Perspective\",\n" " ID[\"EPSG\",9838]],\n" " PARAMETER[\"Latitude of topocentric origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8834]],\n" " PARAMETER[\"Longitude of topocentric origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8835]],\n" " PARAMETER[\"Ellipsoidal height of topocentric origin\",3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8836]],\n" " PARAMETER[\"Viewpoint height\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8840]],\n" " PARAMETER[\"False easting\",5,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",6,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]]"); } // --------------------------------------------------------------------------- TEST( operation, vertical_perspective_export_no_topocentric_height_and_false_easting_northing) { auto conv = Conversion::createVerticalPerspective( PropertyMap(), Angle(1), Angle(2), Length(0), Length(4), Length(0), Length(0)); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=nsper +lat_0=1 +lon_0=2 +h=4 +x_0=0 +y_0=0"); // Check that False esting and False northing are not exported, when they // are 0. EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"Vertical Perspective\",\n" " METHOD[\"Vertical Perspective\",\n" " ID[\"EPSG\",9838]],\n" " PARAMETER[\"Latitude of topocentric origin\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8834]],\n" " PARAMETER[\"Longitude of topocentric origin\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8835]],\n" " PARAMETER[\"Ellipsoidal height of topocentric origin\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8836]],\n" " PARAMETER[\"Viewpoint height\",4,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8840]]]"); } // --------------------------------------------------------------------------- TEST(operation, laborde_oblique_mercator) { // Content of EPSG:29701 "Tananarive (Paris) / Laborde Grid" auto projString = "+proj=labrd +lat_0=-18.9 +lon_0=44.1 +azi=18.9 " "+k=0.9995 +x_0=400000 +y_0=800000 +ellps=intl +pm=paris " "+units=m +no_defs +type=crs"; auto obj = PROJStringParser().createFromPROJString(projString); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), projString); } // --------------------------------------------------------------------------- TEST(operation, adams_ws2_export) { auto dbContext = DatabaseContext::create(); // ESRI:54098 WGS_1984_Adams_Square_II auto crs = AuthorityFactory::create(dbContext, "ESRI") ->createProjectedCRS("54098"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=spilhaus +lat_0=0 +lon_0=0 +azi=0 +k_0=1.4142135623731 " "+rot=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(operation, spilhaus_esri_export) { auto dbContext = DatabaseContext::create(); // ESRI:54099 WGS_1984_Spilhaus_Ocean_Map_in_Square auto crs = AuthorityFactory::create(dbContext, "ESRI") ->createProjectedCRS("54099"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=spilhaus +lat_0=-49.56371678 +lon_0=66.94970198 " "+azi=40.17823482 +k_0=1.4142135623731 +rot=45 " "+x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(operation, hyperbolic_cassini_soldner) { auto dbContext = DatabaseContext::create(); auto crs = AuthorityFactory::create(dbContext, "EPSG")->createProjectedCRS("3139"); EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()), "+proj=cass +hyperbolic +lat_0=-16.25 +lon_0=179.333333333333 " "+x_0=251727.9155424 +y_0=334519.953768 " "+a=6378306.3696 +b=6356571.996 +units=link +no_defs +type=crs"); } // --------------------------------------------------------------------------- TEST(operation, PROJ_based) { auto conv = SingleOperation::createPROJBased(PropertyMap(), "+proj=merc", nullptr, nullptr); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=merc"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"PROJ-based coordinate operation\",\n" " METHOD[\"PROJ-based operation method: +proj=merc\"]]"); EXPECT_EQ(conv->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=merc"); auto str = "+proj=pipeline +step +proj=unitconvert +xy_in=grad +xy_out=rad " "+step +proj=axisswap +order=2,1 +step +proj=longlat " "+ellps=clrk80ign +pm=paris +step +proj=axisswap +order=2,1"; EXPECT_EQ( SingleOperation::createPROJBased(PropertyMap(), str, nullptr, nullptr) ->exportToPROJString(PROJStringFormatter::create().get()), str); EXPECT_THROW(SingleOperation::createPROJBased( PropertyMap(), "+proj=pipeline +step +proj=pipeline", nullptr, nullptr) ->exportToPROJString(PROJStringFormatter::create().get()), UnsupportedOperationException); } // --------------------------------------------------------------------------- TEST(operation, PROJ_based_empty) { auto conv = SingleOperation::createPROJBased(PropertyMap(), "", nullptr, nullptr); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ(conv->exportToWKT(WKTFormatter::create().get()), "CONVERSION[\"PROJ-based coordinate operation\",\n" " METHOD[\"PROJ-based operation method: \"]]"); EXPECT_THROW( conv->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()), FormattingException); EXPECT_EQ(conv->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, PROJ_based_with_global_parameters) { auto conv = SingleOperation::createPROJBased( PropertyMap(), "+proj=pipeline +ellps=WGS84 +step +proj=longlat", nullptr, nullptr); EXPECT_EQ(conv->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +ellps=WGS84 +step +proj=longlat"); } // --------------------------------------------------------------------------- TEST(operation, geographic_topocentric) { auto wkt = "PROJCRS[\"EPSG topocentric example A\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4979]],\n" " CONVERSION[\"EPSG topocentric example A\",\n" " METHOD[\"Geographic/topocentric conversions\",\n" " ID[\"EPSG\",9837]],\n" " PARAMETER[\"Latitude of topocentric origin\",55,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8834]],\n" " PARAMETER[\"Longitude of topocentric origin\",5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8835]],\n" " PARAMETER[\"Ellipsoidal height of topocentric origin\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8836]]],\n" " CS[Cartesian,3],\n" " AXIS[\"topocentric East (U)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"topocentric North (V)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"topocentric height (W)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"Example only (fictitious).\"],\n" " AREA[\"Description of the extent of the CRS.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",5819]]"; auto obj = WKTParser().createFromWKT(wkt); auto dst = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4979, NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=WGS84 " "+step +proj=topocentric +lat_0=55 +lon_0=5 +h_0=0 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, geocentric_topocentric) { auto wkt = "PROJCRS[\"EPSG topocentric example B\",\n" " BASEGEODCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4978]],\n" " CONVERSION[\"EPSG topocentric example B\",\n" " METHOD[\"Geocentric/topocentric conversions\",\n" " ID[\"EPSG\",9836]],\n" " PARAMETER[\"Geocentric X of topocentric origin\",3771793.97,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8837]],\n" " PARAMETER[\"Geocentric Y of topocentric origin\",140253.34,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8838]],\n" " PARAMETER[\"Geocentric Z of topocentric origin\",5124304.35,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8839]]],\n" " CS[Cartesian,3],\n" " AXIS[\"topocentric East (U)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"topocentric North (V)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"topocentric height (W)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"Example only (fictitious).\"],\n" " AREA[\"Description of the extent of the CRS.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",5820]]"; auto dbContext = DatabaseContext::create(); // Need a database so that EPSG:4978 is resolved auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto dst = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(dst != nullptr); auto f(NS_PROJ::io::WKTFormatter::create( NS_PROJ::io::WKTFormatter::Convention::WKT2_2019)); auto op = CoordinateOperationFactory::create()->createOperation( GeodeticCRS::EPSG_4978, NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=topocentric +X_0=3771793.97 +Y_0=140253.34 " "+Z_0=5124304.35 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_A_to_variant_B) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createMercatorVariantA(PropertyMap(), Angle(0), Angle(1), Scale(0.9), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto conv = projCRS->derivingConversion(); auto sameConv = conv->convertToOtherMethod(EPSG_CODE_METHOD_MERCATOR_VARIANT_A); ASSERT_TRUE(sameConv); EXPECT_TRUE(sameConv->isEquivalentTo(conv.get())); auto targetConv = conv->convertToOtherMethod(EPSG_CODE_METHOD_MERCATOR_VARIANT_B); ASSERT_TRUE(targetConv); auto lat_1 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_EQ(lat_1, 25.917499691810534) << lat_1; EXPECT_EQ(targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE), 1); EXPECT_EQ(targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_EASTING, UnitOfMeasure::METRE), 3); EXPECT_EQ(targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_NORTHING, UnitOfMeasure::METRE), 4); EXPECT_FALSE( conv->isEquivalentTo(targetConv.get(), IComparable::Criterion::STRICT)); EXPECT_TRUE(conv->isEquivalentTo(targetConv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(targetConv->isEquivalentTo(conv.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_A_to_variant_B_scale_1) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createMercatorVariantA(PropertyMap(), Angle(0), Angle(1), Scale(1.0), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_MERCATOR_VARIANT_B); ASSERT_TRUE(targetConv); auto lat_1 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_EQ(lat_1, 0.0) << lat_1; } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_A_to_variant_B_no_crs) { auto targetConv = Conversion::createMercatorVariantA(PropertyMap(), Angle(0), Angle(1), Scale(1.0), Length(3), Length(4)) ->convertToOtherMethod(EPSG_CODE_METHOD_MERCATOR_VARIANT_B); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_A_to_variant_B_invalid_scale) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createMercatorVariantA(PropertyMap(), Angle(0), Angle(1), Scale(0.0), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_MERCATOR_VARIANT_B); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- static GeographicCRSNNPtr geographicCRSInvalidEccentricity() { return GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::create( PropertyMap(), Ellipsoid::createFlattenedSphere(PropertyMap(), Length(6378137), Scale(0.1)), optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_A_to_variant_B_invalid_eccentricity) { auto projCRS = ProjectedCRS::create( PropertyMap(), geographicCRSInvalidEccentricity(), Conversion::createMercatorVariantA(PropertyMap(), Angle(0), Angle(1), Scale(1.0), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_MERCATOR_VARIANT_B); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_B_to_variant_A) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createMercatorVariantB(PropertyMap(), Angle(25.917499691810534), Angle(1), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_MERCATOR_VARIANT_A); ASSERT_TRUE(targetConv); EXPECT_EQ(targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE), 0); EXPECT_EQ(targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE), 1); auto k_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, UnitOfMeasure::SCALE_UNITY); EXPECT_EQ(k_0, 0.9) << k_0; EXPECT_EQ(targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_EASTING, UnitOfMeasure::METRE), 3); EXPECT_EQ(targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_NORTHING, UnitOfMeasure::METRE), 4); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_B_to_variant_A_invalid_std1) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createMercatorVariantB(PropertyMap(), Angle(100), Angle(1), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_MERCATOR_VARIANT_A); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, mercator_variant_B_to_variant_A_invalid_eccentricity) { auto projCRS = ProjectedCRS::create( PropertyMap(), geographicCRSInvalidEccentricity(), Conversion::createMercatorVariantB(PropertyMap(), Angle(0), Angle(1), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_MERCATOR_VARIANT_A); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp) { // equivalent to EPSG:2154 auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4269, // something using GRS80 Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.5), Angle(3), Angle(49), Angle(44), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto conv = projCRS->derivingConversion(); auto targetConv = conv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); ASSERT_TRUE(targetConv); { auto lat_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_0, 46.519430223986866, 1e-12) << lat_0; auto lon_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lon_0, 3.0, 1e-15) << lon_0; auto k_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, UnitOfMeasure::SCALE_UNITY); EXPECT_NEAR(k_0, 0.9990510286374692, 1e-15) << k_0; auto x_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_EASTING, UnitOfMeasure::METRE); EXPECT_NEAR(x_0, 700000, 1e-15) << x_0; auto y_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_NORTHING, UnitOfMeasure::METRE); EXPECT_NEAR(y_0, 6602157.8388103368, 1e-7) << y_0; } auto _2sp_from_1sp = targetConv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); ASSERT_TRUE(_2sp_from_1sp); { auto lat_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_0, 46.5, 1e-15) << lat_0; auto lon_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lon_0, 3, 1e-15) << lon_0; auto lat_1 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_1, 49, 1e-15) << lat_1; auto lat_2 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_2, 44, 1e-15) << lat_2; auto x_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, UnitOfMeasure::METRE); EXPECT_NEAR(x_0, 700000, 1e-15) << x_0; auto y_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, UnitOfMeasure::METRE); EXPECT_NEAR(y_0, 6600000, 1e-15) << y_0; } EXPECT_FALSE( conv->isEquivalentTo(targetConv.get(), IComparable::Criterion::STRICT)); EXPECT_TRUE(conv->isEquivalentTo(targetConv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(targetConv->isEquivalentTo(conv.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_phi0_eq_phi1_eq_phi2) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4269, // something using GRS80 Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.5), Angle(3), Angle(46.5), Angle(46.5), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto conv = projCRS->derivingConversion(); auto targetConv = conv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); ASSERT_TRUE(targetConv); { auto lat_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_0, 46.5, 1e-15) << lat_0; auto lon_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lon_0, 3.0, 1e-15) << lon_0; auto k_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, UnitOfMeasure::SCALE_UNITY); EXPECT_NEAR(k_0, 1.0, 1e-15) << k_0; auto x_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_EASTING, UnitOfMeasure::METRE); EXPECT_NEAR(x_0, 700000, 1e-15) << x_0; auto y_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_NORTHING, UnitOfMeasure::METRE); EXPECT_NEAR(y_0, 6600000, 1e-15) << y_0; } auto _2sp_from_1sp = targetConv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); ASSERT_TRUE(_2sp_from_1sp); { auto lat_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_0, 46.5, 1e-15) << lat_0; auto lon_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lon_0, 3, 1e-15) << lon_0; auto lat_1 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_1, 46.5, 1e-15) << lat_1; auto lat_2 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_2, 46.5, 1e-15) << lat_2; auto x_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, UnitOfMeasure::METRE); EXPECT_NEAR(x_0, 700000, 1e-15) << x_0; auto y_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, UnitOfMeasure::METRE); EXPECT_NEAR(y_0, 6600000, 1e-15) << y_0; } EXPECT_TRUE(conv->isEquivalentTo(targetConv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(targetConv->isEquivalentTo(conv.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_phi0_diff_phi1_and_phi1_eq_phi2) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4269, // something using GRS80 Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.123), Angle(3), Angle(46.4567), Angle(46.4567), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto conv = projCRS->derivingConversion(); auto targetConv = conv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); ASSERT_TRUE(targetConv); { auto lat_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_0, 46.4567, 1e-14) << lat_0; auto lon_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lon_0, 3.0, 1e-15) << lon_0; auto k_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN, UnitOfMeasure::SCALE_UNITY); EXPECT_NEAR(k_0, 1.0, 1e-15) << k_0; auto x_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_EASTING, UnitOfMeasure::METRE); EXPECT_NEAR(x_0, 700000, 1e-15) << x_0; auto y_0 = targetConv->parameterValueNumeric( EPSG_CODE_PARAMETER_FALSE_NORTHING, UnitOfMeasure::METRE); EXPECT_NEAR(y_0, 6637093.292952879, 1e-8) << y_0; } auto _2sp_from_1sp = targetConv->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); ASSERT_TRUE(_2sp_from_1sp); { auto lat_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_FALSE_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_0, 46.4567, 1e-14) << lat_0; auto lon_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LONGITUDE_FALSE_ORIGIN, UnitOfMeasure::DEGREE); EXPECT_NEAR(lon_0, 3, 1e-15) << lon_0; auto lat_1 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_1, 46.4567, 1e-14) << lat_1; auto lat_2 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_LATITUDE_2ND_STD_PARALLEL, UnitOfMeasure::DEGREE); EXPECT_NEAR(lat_2, 46.4567, 1e-14) << lat_2; auto x_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_EASTING_FALSE_ORIGIN, UnitOfMeasure::METRE); EXPECT_NEAR(x_0, 700000, 1e-15) << x_0; auto y_0 = _2sp_from_1sp->parameterValueNumeric( EPSG_CODE_PARAMETER_NORTHING_FALSE_ORIGIN, UnitOfMeasure::METRE); EXPECT_NEAR(y_0, 6637093.292952879, 1e-8) << y_0; } EXPECT_TRUE(conv->isEquivalentTo(targetConv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(targetConv->isEquivalentTo(conv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(_2sp_from_1sp->isEquivalentTo( targetConv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(targetConv->isEquivalentTo(_2sp_from_1sp.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(conv->isEquivalentTo(_2sp_from_1sp.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, lcc1sp_to_lcc2sp_invalid_eccentricity) { auto projCRS = ProjectedCRS::create( PropertyMap(), geographicCRSInvalidEccentricity(), Conversion::createLambertConicConformal_1SP(PropertyMap(), Angle(40), Angle(1), Scale(0.99), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc1sp_to_lcc2sp_invalid_scale) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_1SP( PropertyMap(), Angle(40), Angle(1), Scale(0), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc1sp_to_lcc2sp_invalid_lat0) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_1SP(PropertyMap(), Angle(100), Angle(1), Scale(0.99), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc1sp_to_lcc2sp_null_lat0) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_1SP(PropertyMap(), Angle(0), Angle(1), Scale(0.99), Length(3), Length(4)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_2SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_invalid_lat0) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(100), Angle(3), Angle(44), Angle(49), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_invalid_lat1) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.5), Angle(3), Angle(100), Angle(49), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_invalid_lat2) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.5), Angle(3), Angle(44), Angle(100), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_invalid_lat1_opposite_lat2) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.5), Angle(3), Angle(-49), Angle(49), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_invalid_lat1_and_lat2_close_to_zero) { auto projCRS = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.5), Angle(3), Angle(.0000000000000001), Angle(.0000000000000002), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, lcc2sp_to_lcc1sp_invalid_eccentricity) { auto projCRS = ProjectedCRS::create( PropertyMap(), geographicCRSInvalidEccentricity(), Conversion::createLambertConicConformal_2SP( PropertyMap(), Angle(46.5), Angle(3), Angle(44), Angle(49), Length(700000), Length(6600000)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto targetConv = projCRS->derivingConversion()->convertToOtherMethod( EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP); EXPECT_FALSE(targetConv != nullptr); } // --------------------------------------------------------------------------- TEST(operation, three_param_equivalent_to_seven_param) { auto three_param = Transformation::createGeocentricTranslations( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, {}); auto seven_param_pv = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 0.0, 0.0, 0.0, 0.0, {}); auto seven_param_cf = Transformation::createCoordinateFrameRotation( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 0.0, 0.0, 0.0, 0.0, {}); auto seven_param_non_eq = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 1.0, 0.0, 0.0, 0.0, {}); EXPECT_TRUE(three_param->isEquivalentTo( seven_param_pv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(three_param->isEquivalentTo( seven_param_cf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(seven_param_cf->isEquivalentTo( three_param.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE(seven_param_pv->isEquivalentTo( three_param.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(three_param->isEquivalentTo( seven_param_non_eq.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, position_vector_equivalent_coordinate_frame) { auto pv = Transformation::createPositionVector( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, {}); auto cf = Transformation::createCoordinateFrameRotation( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, -4 + 1e-11, -5.0, -6.0, 7.0, {}); auto cf_non_eq = Transformation::createCoordinateFrameRotation( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, {}); EXPECT_TRUE( pv->isEquivalentTo(cf.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( cf->isEquivalentTo(pv.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE(pv->isEquivalentTo(cf_non_eq.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, conversion_missing_parameter) { auto wkt1 = "PROJCS[\"NAD83(CSRS98) / UTM zone 20N (deprecated)\"," " GEOGCS[\"NAD83(CSRS98)\"," " DATUM[\"NAD83_Canadian_Spatial_Reference_System\"," " SPHEROID[\"GRS 1980\",6378137,298.257222101," " AUTHORITY[\"EPSG\",\"7019\"]]," " AUTHORITY[\"EPSG\",\"6140\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9108\"]]," " AUTHORITY[\"EPSG\",\"4140\"]]," " PROJECTION[\"Transverse_Mercator\"]," " PARAMETER[\"latitude_of_origin\",0]," " PARAMETER[\"central_meridian\",-63]," " PARAMETER[\"scale_factor\",0.9996]," " PARAMETER[\"false_easting\",500000]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]," " AUTHORITY[\"EPSG\",\"2038\"]]"; auto obj1 = WKTParser().createFromWKT(wkt1); auto crs1 = nn_dynamic_pointer_cast(obj1); ASSERT_TRUE(crs1 != nullptr); // Difference with wkt1: latitude_of_origin missing, but false_northing // added to 0 auto wkt2 = "PROJCS[\"NAD83(CSRS98) / UTM zone 20N (deprecated)\"," " GEOGCS[\"NAD83(CSRS98)\"," " DATUM[\"NAD83_Canadian_Spatial_Reference_System\"," " SPHEROID[\"GRS 1980\",6378137,298.257222101," " AUTHORITY[\"EPSG\",\"7019\"]]," " AUTHORITY[\"EPSG\",\"6140\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9108\"]]," " AUTHORITY[\"EPSG\",\"4140\"]]," " PROJECTION[\"Transverse_Mercator\"]," " PARAMETER[\"central_meridian\",-63]," " PARAMETER[\"scale_factor\",0.9996]," " PARAMETER[\"false_easting\",500000]," " PARAMETER[\"false_northing\",0]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]," " AUTHORITY[\"EPSG\",\"2038\"]]"; auto obj2 = WKTParser().createFromWKT(wkt2); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); // Difference with wkt1: false_northing added to 0 auto wkt3 = "PROJCS[\"NAD83(CSRS98) / UTM zone 20N (deprecated)\"," " GEOGCS[\"NAD83(CSRS98)\"," " DATUM[\"NAD83_Canadian_Spatial_Reference_System\"," " SPHEROID[\"GRS 1980\",6378137,298.257222101," " AUTHORITY[\"EPSG\",\"7019\"]]," " AUTHORITY[\"EPSG\",\"6140\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9108\"]]," " AUTHORITY[\"EPSG\",\"4140\"]]," " PROJECTION[\"Transverse_Mercator\"]," " PARAMETER[\"latitude_of_origin\",0]," " PARAMETER[\"central_meridian\",-63]," " PARAMETER[\"scale_factor\",0.9996]," " PARAMETER[\"false_easting\",500000]," " PARAMETER[\"false_northing\",0]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]," " AUTHORITY[\"EPSG\",\"2038\"]]"; auto obj3 = WKTParser().createFromWKT(wkt3); auto crs3 = nn_dynamic_pointer_cast(obj3); ASSERT_TRUE(crs3 != nullptr); // Difference with wkt1: UNKNOWN added to non-zero auto wkt4 = "PROJCS[\"NAD83(CSRS98) / UTM zone 20N (deprecated)\"," " GEOGCS[\"NAD83(CSRS98)\"," " DATUM[\"NAD83_Canadian_Spatial_Reference_System\"," " SPHEROID[\"GRS 1980\",6378137,298.257222101," " AUTHORITY[\"EPSG\",\"7019\"]]," " AUTHORITY[\"EPSG\",\"6140\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9108\"]]," " AUTHORITY[\"EPSG\",\"4140\"]]," " PROJECTION[\"Transverse_Mercator\"]," " PARAMETER[\"latitude_of_origin\",0]," " PARAMETER[\"central_meridian\",-63]," " PARAMETER[\"scale_factor\",0.9996]," " PARAMETER[\"false_easting\",500000]," " PARAMETER[\"false_northing\",0]," " PARAMETER[\"UNKNOWN\",13]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]," " AUTHORITY[\"EPSG\",\"2038\"]]"; auto obj4 = WKTParser().createFromWKT(wkt4); auto crs4 = nn_dynamic_pointer_cast(obj4); ASSERT_TRUE(crs4 != nullptr); // Difference with wkt1: latitude_of_origin missing, but false_northing // added to non-zero auto wkt5 = "PROJCS[\"NAD83(CSRS98) / UTM zone 20N (deprecated)\"," " GEOGCS[\"NAD83(CSRS98)\"," " DATUM[\"NAD83_Canadian_Spatial_Reference_System\"," " SPHEROID[\"GRS 1980\",6378137,298.257222101," " AUTHORITY[\"EPSG\",\"7019\"]]," " AUTHORITY[\"EPSG\",\"6140\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9108\"]]," " AUTHORITY[\"EPSG\",\"4140\"]]," " PROJECTION[\"Transverse_Mercator\"]," " PARAMETER[\"central_meridian\",-63]," " PARAMETER[\"scale_factor\",0.9996]," " PARAMETER[\"false_easting\",500000]," " PARAMETER[\"false_northing\",-99999]," " UNIT[\"metre\",1," " AUTHORITY[\"EPSG\",\"9001\"]]," " AXIS[\"Easting\",EAST]," " AXIS[\"Northing\",NORTH]," " AUTHORITY[\"EPSG\",\"2038\"]]"; auto obj5 = WKTParser().createFromWKT(wkt5); auto crs5 = nn_dynamic_pointer_cast(obj5); ASSERT_TRUE(crs5 != nullptr); EXPECT_TRUE( crs1->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs2->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs1->isEquivalentTo(crs3.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs3->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs2->isEquivalentTo(crs3.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs3->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs1->isEquivalentTo(crs4.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs4->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs1->isEquivalentTo(crs5.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs5->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, conversion_missing_parameter_scale) { auto wkt1 = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"latitude_of_origin\",-1],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1]]"; auto obj1 = WKTParser().createFromWKT(wkt1); auto crs1 = nn_dynamic_pointer_cast(obj1); ASSERT_TRUE(crs1 != nullptr); // Difference with wkt1: scale_factor missing auto wkt2 = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"latitude_of_origin\",-1],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1]]"; auto obj2 = WKTParser().createFromWKT(wkt2); auto crs2 = nn_dynamic_pointer_cast(obj2); ASSERT_TRUE(crs2 != nullptr); // Difference with wkt1: scale_factor set to non-1 auto wkt3 = "PROJCS[\"test\",\n" " GEOGCS[\"WGS 84\",\n" " DATUM[\"WGS 1984\",\n" " SPHEROID[\"WGS 84\",6378137,298.257223563]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"degree\",0.0174532925199433]],\n" " PROJECTION[\"Mercator_1SP\"],\n" " PARAMETER[\"latitude_of_origin\",-1],\n" " PARAMETER[\"central_meridian\",2],\n" " PARAMETER[\"scale_factor\",-1],\n" " PARAMETER[\"false_easting\",3],\n" " PARAMETER[\"false_northing\",4],\n" " UNIT[\"metre\",1]]"; auto obj3 = WKTParser().createFromWKT(wkt3); auto crs3 = nn_dynamic_pointer_cast(obj3); ASSERT_TRUE(crs3 != nullptr); EXPECT_TRUE( crs1->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_TRUE( crs2->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs1->isEquivalentTo(crs3.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs3->isEquivalentTo(crs1.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs2->isEquivalentTo(crs3.get(), IComparable::Criterion::EQUIVALENT)); EXPECT_FALSE( crs3->isEquivalentTo(crs2.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, hotine_oblique_mercator_variant_A_export_equivalent_modulo_360) { auto conv1 = Conversion::createHotineObliqueMercatorVariantA( PropertyMap(), Angle(1), Angle(2), Angle(-3), Angle(-4), Scale(5), Length(6), Length(7)); auto conv2 = Conversion::createHotineObliqueMercatorVariantA( PropertyMap(), Angle(1), Angle(2), Angle(-3 + 360), Angle(-4 + 360), Scale(5), Length(6), Length(7)); EXPECT_TRUE( conv1->isEquivalentTo(conv2.get(), IComparable::Criterion::EQUIVALENT)); } // --------------------------------------------------------------------------- TEST(operation, createChangeVerticalUnit) { auto conv = Conversion::createChangeVerticalUnit(PropertyMap(), Scale(1)); EXPECT_TRUE(conv->validateParameters().empty()); } // --------------------------------------------------------------------------- TEST(operation, createChangeVerticalUnitNoconvFactor) { auto conv = Conversion::createChangeVerticalUnit(PropertyMap()); EXPECT_TRUE(conv->validateParameters().empty()); } // --------------------------------------------------------------------------- TEST(operation, createGeographicGeocentric) { auto conv = Conversion::createGeographicGeocentric(PropertyMap()); EXPECT_TRUE(conv->validateParameters().empty()); } // --------------------------------------------------------------------------- TEST(operation, validateParameters) { { auto conv = Conversion::create( PropertyMap(), PropertyMap().set(IdentifiedObject::NAME_KEY, "unknown"), {}, {}); auto validation = conv->validateParameters(); EXPECT_EQ(validation, std::list{"Unknown method unknown"}); } { auto conv = Conversion::create(PropertyMap(), PropertyMap().set(IdentifiedObject::NAME_KEY, "change of vertical unit"), {}, {}); auto validation = conv->validateParameters(); auto expected = std::list{ "Method name change of vertical unit is equivalent to official " "Change of Vertical Unit but not strictly equal", "Cannot find expected parameter Unit conversion scalar"}; EXPECT_EQ(validation, expected); } { auto conv = Conversion::create( PropertyMap(), PropertyMap() .set(IdentifiedObject::NAME_KEY, EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT) .set(Identifier::CODESPACE_KEY, Identifier::EPSG) .set(Identifier::CODE_KEY, "1234"), {}, {}); auto validation = conv->validateParameters(); auto expected = std::list{ "Method of EPSG code 1234 does not match official code (1069)", "Cannot find expected parameter Unit conversion scalar"}; EXPECT_EQ(validation, expected); } { auto conv = Conversion::create( PropertyMap(), PropertyMap() .set(IdentifiedObject::NAME_KEY, "some fancy name") .set(Identifier::CODESPACE_KEY, Identifier::EPSG) .set(Identifier::CODE_KEY, EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT), {}, {}); auto validation = conv->validateParameters(); auto expected = std::list{ "Method name some fancy name, matched to Change of Vertical Unit, " "through its EPSG code has not an equivalent name", "Cannot find expected parameter Unit conversion scalar"}; EXPECT_EQ(validation, expected); } { auto conv = Conversion::create( PropertyMap(), PropertyMap().set(IdentifiedObject::NAME_KEY, EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT), {OperationParameter::create(PropertyMap().set( IdentifiedObject::NAME_KEY, "unit conversion scalar"))}, {ParameterValue::create(Measure(1.0, UnitOfMeasure::SCALE_UNITY))}); auto validation = conv->validateParameters(); auto expected = std::list{ "Parameter name unit conversion scalar is equivalent to official " "Unit conversion scalar but not strictly equal"}; EXPECT_EQ(validation, expected); } { auto conv = Conversion::create( PropertyMap(), PropertyMap().set(IdentifiedObject::NAME_KEY, EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT), {OperationParameter::create( PropertyMap() .set(IdentifiedObject::NAME_KEY, "fancy name") .set(Identifier::CODESPACE_KEY, Identifier::EPSG) .set(Identifier::CODE_KEY, EPSG_CODE_PARAMETER_UNIT_CONVERSION_SCALAR))}, {ParameterValue::create(Measure(1.0, UnitOfMeasure::SCALE_UNITY))}); auto validation = conv->validateParameters(); auto expected = std::list{ "Parameter name fancy name, matched to Unit conversion scalar, " "through its EPSG code has not an equivalent name"}; EXPECT_EQ(validation, expected); } { auto conv = Conversion::create( PropertyMap(), PropertyMap().set(IdentifiedObject::NAME_KEY, EPSG_NAME_METHOD_CHANGE_VERTICAL_UNIT), {OperationParameter::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "extra param"))}, {ParameterValue::create(Measure(1.0, UnitOfMeasure::SCALE_UNITY))}); auto validation = conv->validateParameters(); auto expected = std::list{ "Cannot find expected parameter Unit conversion scalar", "Parameter extra param found but not expected for this method"}; EXPECT_EQ(validation, expected); } } // --------------------------------------------------------------------------- TEST(operation, normalizeForVisualization) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); const auto checkThroughWKTRoundtrip = [](const CoordinateOperationNNPtr &opRef) { auto wkt = opRef->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); auto objFromWkt = WKTParser().createFromWKT(wkt); auto opFromWkt = nn_dynamic_pointer_cast(objFromWkt); ASSERT_TRUE(opFromWkt != nullptr); EXPECT_TRUE(opRef->_isEquivalentTo(opFromWkt.get())); EXPECT_EQ( opFromWkt->exportToPROJString(PROJStringFormatter::create().get()), opRef->exportToPROJString(PROJStringFormatter::create().get())); }; // Source(geographic) must be inverted { auto src = authFactory->createCoordinateReferenceSystem("4326"); auto dst = authFactory->createCoordinateReferenceSystem("32631"); auto op = CoordinateOperationFactory::create()->createOperation(src, dst); ASSERT_TRUE(op != nullptr); auto opNormalized = op->normalizeForVisualization(); EXPECT_FALSE(opNormalized->_isEquivalentTo(op.get())); EXPECT_EQ(opNormalized->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=utm +zone=31 +ellps=WGS84"); checkThroughWKTRoundtrip(opNormalized); } // Target(geographic) must be inverted { auto src = authFactory->createCoordinateReferenceSystem("32631"); auto dst = authFactory->createCoordinateReferenceSystem("4326"); auto op = CoordinateOperationFactory::create()->createOperation(src, dst); ASSERT_TRUE(op != nullptr); auto opNormalized = op->normalizeForVisualization(); EXPECT_FALSE(opNormalized->_isEquivalentTo(op.get())); EXPECT_EQ(opNormalized->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=31 +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); checkThroughWKTRoundtrip(opNormalized); } // Source(geographic) and target(projected) must be inverted { auto src = authFactory->createCoordinateReferenceSystem("4326"); auto dst = authFactory->createCoordinateReferenceSystem("3040"); auto op = CoordinateOperationFactory::create()->createOperation(src, dst); ASSERT_TRUE(op != nullptr); auto opNormalized = op->normalizeForVisualization(); EXPECT_FALSE(opNormalized->_isEquivalentTo(op.get())); EXPECT_EQ(opNormalized->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=utm +zone=28 +ellps=GRS80"); checkThroughWKTRoundtrip(opNormalized); } // No inversion { auto src = authFactory->createCoordinateReferenceSystem("32631"); auto dst = authFactory->createCoordinateReferenceSystem("32632"); auto op = CoordinateOperationFactory::create()->createOperation(src, dst); ASSERT_TRUE(op != nullptr); auto opNormalized = op->normalizeForVisualization(); EXPECT_TRUE(opNormalized->_isEquivalentTo(op.get())); } // Source(compoundCRS) and target(geographic 3D) must be inverted { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setUsePROJAlternativeGridNames(false); auto src = CompoundCRS::create( PropertyMap(), std::vector{ authFactory->createCoordinateReferenceSystem("4326"), // EGM2008 height authFactory->createCoordinateReferenceSystem("3855")}); auto list = CoordinateOperationFactory::create()->createOperations( src, authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 3D ctxt); ASSERT_GE(list.size(), 3U); auto op = list[1]; auto opNormalized = op->normalizeForVisualization(); EXPECT_FALSE(opNormalized->_isEquivalentTo(op.get())); EXPECT_EQ( opNormalized->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // Source(boundCRS) and target(geographic) must be inverted { auto src = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4269, std::vector{1, 2, 3, 4, 5, 6, 7}); auto dst = authFactory->createCoordinateReferenceSystem("4326"); auto op = CoordinateOperationFactory::create()->createOperation(src, dst); ASSERT_TRUE(op != nullptr); auto opNormalized = op->normalizeForVisualization(); EXPECT_FALSE(opNormalized->_isEquivalentTo(op.get())); EXPECT_EQ(opNormalized->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 " "+convention=position_vector " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } } // --------------------------------------------------------------------------- TEST(operation, export_of_Geographic3D_to_GravityRelatedHeight_gtx_unknown_grid) { auto wkt = "COORDINATEOPERATION[\"bla\",\n" " SOURCECRS[\n" " GEOGCRS[\"ETRS89\",\n" " DATUM[\"European Terrestrial Reference System 1989\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4937]]],\n" " TARGETCRS[\n" " VERTCRS[\"bar\",\n" " VDATUM[\"bar\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]]],\n" " METHOD[\"Geographic3D to GravityRelatedHeight (gtx)\",\n" " ID[\"EPSG\",9665]],\n" " PARAMETERFILE[\"Geoid (height correction) model " "file\",\"foo.gtx\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); // Test that even if the .gtx file is unknown, we export in the correct // direction EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift +grids=foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_FALSE(transf->requiresPerCoordinateInputTime()); } // --------------------------------------------------------------------------- TEST(operation, export_of_boundCRS_with_proj_string_method) { auto wkt = "BOUNDCRS[\n" " SOURCECRS[\n" " GEOGCRS[\"unknown\",\n" " DATUM[\"Unknown based on GRS80 ellipsoid\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",7019]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]],\n" " ABRIDGEDTRANSFORMATION[\"Transformation from unknown to WGS84\",\n" " METHOD[\"PROJ-based operation method: +proj=pipeline +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=axisswap " "+order=2,1 " "+step +proj=cart +ellps=GRS80 +step +proj=helmert " "+convention=coordinate_frame +exact +step +inv +proj=cart " "+ellps=WGS84 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); EXPECT_EQ(boundCRS->transformation()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=axisswap +order=2,1 " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +convention=coordinate_frame +exact " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, PointMotionOperation_with_epochs) { auto wkt = "POINTMOTIONOPERATION[\"Canada velocity grid v7 from epoch 2010 to " "epoch 2002\",\n" " SOURCECRS[\n" " GEOGCRS[\"NAD83(CSRS)v7\",\n" " DATUM[\"North American Datum of 1983 (CSRS) version 7\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",8254]]],\n" " METHOD[\"Point motion by grid (Canada NTv2_Vel)\",\n" " ID[\"EPSG\",1070]],\n" " PARAMETERFILE[\"Point motion velocity grid " "file\",\"ca_nrc_NAD83v70VG.tif\"],\n" " OPERATIONACCURACY[0.01],\n" " ID[\"DERIVED_FROM(EPSG)\",9483],\n" " REMARK[\"File initially published with name cvg70.cvb, later " "renamed to NAD83v70VG.gvb with no change of content.\"]]"; auto obj = WKTParser().createFromWKT(wkt); auto pmo = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(pmo != nullptr); EXPECT_EQ(pmo->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=set +v_4=2010 +omit_fwd " "+step +proj=deformation +dt=-8 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(pmo->inverse()->nameStr(), "Canada velocity grid v7 from epoch 2002 to epoch 2010"); EXPECT_EQ( pmo->inverse()->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_fwd " "+step +proj=deformation +dt=8 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2010 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, export_of_Cartesian_Grid_Offsets_with_EngineeringCRS) { auto wkt = "COORDINATEOPERATION[\"CIG85 to GDA94 / MGA zone 48\",\n" " VERSION[\"GA-Cxr\"],\n" " SOURCECRS[\n" " ENGCRS[\"Christmas Island Grid 1985\",\n" " EDATUM[\"Christmas Island Datum 1985\"],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6715]]],\n" " TARGETCRS[\n" " PROJCRS[\"GDA94 / MGA zone 48\",\n" " BASEGEOGCRS[\"GDA94\",\n" " DATUM[\"Geocentric Datum of Australia 1994\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4283]],\n" " CONVERSION[\"Map Grid of Australia zone 48\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",105,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",10000000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",28348]]],\n" " METHOD[\"Cartesian Grid Offsets\",\n" " ID[\"EPSG\",9656]],\n" " PARAMETER[\"Easting offset\",550015,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8728]],\n" " PARAMETER[\"Northing offset\",8780001,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8729]],\n" " OPERATIONACCURACY[5],\n" " ID[\"EPSG\",6724]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +xoff=550015 +yoff=8780001"); EXPECT_EQ(transf->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=affine +xoff=-550015 +yoff=-8780001"); } // --------------------------------------------------------------------------- TEST(operation, Geographic3DToGravityRelatedHeight) { auto wkt = "COORDINATEOPERATION[\"test\",\n" " SOURCECRS[\n" " GEOGCRS[\"foo\",\n" " DATUM[\"foo\",\n" " ELLIPSOID[\"International 1924\",6378388,297,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]]]],\n" " TARGETCRS[\n" " VERTCRS[\"foo height\",\n" " VDATUM[\"foo Vertical Datum\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]]],\n" " METHOD[\"Geographic3D to GravityRelatedHeight\",\n" " ID[\"EPSG\",1136]],\n" " PARAMETER[\"Geoid height\",10,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8604]]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +zoff=-10"); EXPECT_EQ(transf->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=affine +zoff=-10"); } // --------------------------------------------------------------------------- TEST(operation, inverse_of_Geographic3DToGravityRelatedHeight) { auto wkt = "COORDINATEOPERATION[\"test\",\n" " SOURCECRS[\n" " VERTCRS[\"foo height\",\n" " VDATUM[\"foo Vertical Datum\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"foo\",\n" " DATUM[\"foo\",\n" " ELLIPSOID[\"International 1924\",6378388,297,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]]]],\n" " METHOD[\"Inverse of Geographic3D to GravityRelatedHeight\",\n" " ID[\"INVERSE(EPSG)\",1136]],\n" " PARAMETER[\"Geoid height\",10,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8604]]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +zoff=10"); EXPECT_EQ(transf->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=affine +zoff=10"); } // --------------------------------------------------------------------------- TEST(operation, CoordinateFrameRotationFullMatrixGeog2D) { auto wkt = "COORDINATEOPERATION[\"Saba to WGS 84 (1)\",\n" " VERSION[\"IOGP-Bes Saba\"],\n" " SOURCECRS[\n" " GEOGCRS[\"Saba\",\n" " DATUM[\"Saba\",\n" " ELLIPSOID[\"International 1924\",6378388,297,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",10636]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2296)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]],\n" " METHOD[\"Coordinate Frame rotation full matrix (geog2D)\",\n" " ID[\"EPSG\",1133]],\n" " PARAMETER[\"X-axis translation\",1138.7432,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",-2064.4761,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",110.7016,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8607]],\n" " PARAMETER[\"X-axis rotation\",-214.615206,\n" " ANGLEUNIT[\"arc-second\",4.84813681109536E-06],\n" " ID[\"EPSG\",8608]],\n" " PARAMETER[\"Y-axis rotation\",479.360036,\n" " ANGLEUNIT[\"arc-second\",4.84813681109536E-06],\n" " ID[\"EPSG\",8609]],\n" " PARAMETER[\"Z-axis rotation\",-164.703951,\n" " ANGLEUNIT[\"arc-second\",4.84813681109536E-06],\n" " ID[\"EPSG\",8610]],\n" " PARAMETER[\"Scale difference\",-402.32073,\n" " SCALEUNIT[\"parts per million\",1E-06],\n" " ID[\"EPSG\",8611]],\n" " OPERATIONACCURACY[1.0]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 " "+step +proj=cart +ellps=intl " "+step +proj=helmert +exact " "+x=1138.7432 +y=-2064.4761 +z=110.7016 " "+rx=-214.615206 +ry=479.360036 +rz=-164.703951 +s=-402.32073 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(transf->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 " "+step +proj=cart +ellps=WGS84 " "+step +inv +proj=helmert +exact " "+x=1138.7432 +y=-2064.4761 +z=110.7016 " "+rx=-214.615206 +ry=479.360036 +rz=-164.703951 +s=-402.32073 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=intl " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, operation_Geog3D_to_Geog2D_GravityRelatedHeight_with_compoundCRS) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = factory->createCoordinateOperation("10753", false); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ( op->inverse()->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } proj-9.6.0/test/unit/test_operationfactory.cpp000664 001754 001755 00002030220 14764566077 021511 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" #include "test_primitives.hpp" // to be able to use internal::replaceAll #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/common.hpp" #include "proj/coordinateoperation.hpp" #include "proj/coordinates.hpp" #include "proj/coordinatesystem.hpp" #include "proj/crs.hpp" #include "proj/datum.hpp" #include "proj/io.hpp" #include "proj/metadata.hpp" #include "proj/util.hpp" #include "proj/internal/internal.hpp" #include "proj_constants.h" #include #include using namespace osgeo::proj::common; using namespace osgeo::proj::coordinates; using namespace osgeo::proj::crs; using namespace osgeo::proj::cs; using namespace osgeo::proj::datum; using namespace osgeo::proj::io; using namespace osgeo::proj::internal; using namespace osgeo::proj::metadata; using namespace osgeo::proj::operation; using namespace osgeo::proj::util; // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS) { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv +proj=longlat " "+ellps=clrk80ign +pm=paris +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_default) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::NEVER); // Directly found in database { auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4179"), // Pulkovo 42 authFactory->createCoordinateReferenceSystem("4258"), // ETRS89 ctxt); ASSERT_EQ(list.size(), 3U); // Romania has a larger area than Poland (given our approx formula) EXPECT_EQ(list[0]->getEPSGCode(), 15994); // Romania - 3m EXPECT_EQ(list[1]->getEPSGCode(), 1644); // Poland - 1m EXPECT_EQ(list[2]->nameStr(), "Ballpark geographic offset from Pulkovo 1942(58) to ETRS89"); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=krass +step +proj=helmert +x=2.3287 " "+y=-147.0425 +z=-92.0802 +rx=0.3092483 +ry=-0.32482185 " "+rz=-0.49729934 +s=5.68906266 +convention=coordinate_frame +step " "+inv +proj=cart +ellps=GRS80 +step +proj=pop +v_3 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // Reverse case { auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4258"), authFactory->createCoordinateReferenceSystem("4179"), ctxt); ASSERT_EQ(list.size(), 3U); // Romania has a larger area than Poland (given our approx formula) EXPECT_EQ(list[0]->nameStr(), "Inverse of Pulkovo 1942(58) to ETRS89 (4)"); // Romania - 3m EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=2.3287 " "+y=-147.0425 +z=-92.0802 +rx=0.3092483 +ry=-0.32482185 " "+rz=-0.49729934 +s=5.68906266 +convention=coordinate_frame +step " "+inv +proj=cart +ellps=krass +step +proj=pop +v_3 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_match_by_name) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::NEVER); auto NAD27 = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, GeographicCRS::EPSG_4267->nameStr()), GeographicCRS::EPSG_4267->datum(), GeographicCRS::EPSG_4267->datumEnsemble(), GeographicCRS::EPSG_4267->coordinateSystem()); auto list = CoordinateOperationFactory::create()->createOperations( NAD27, GeographicCRS::EPSG_4326, ctxt); auto listInv = CoordinateOperationFactory::create()->createOperations( GeographicCRS::EPSG_4326, NAD27, ctxt); auto listRef = CoordinateOperationFactory::create()->createOperations( GeographicCRS::EPSG_4267, GeographicCRS::EPSG_4326, ctxt); EXPECT_EQ(list.size(), listRef.size()); EXPECT_EQ(listInv.size(), listRef.size()); EXPECT_GE(listRef.size(), 2U); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_filter_accuracy) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 1.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4179"), authFactory->createCoordinateReferenceSystem("4258"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->getEPSGCode(), 1644); // Poland - 1m } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.9); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4179"), authFactory->createCoordinateReferenceSystem("4258"), ctxt); ASSERT_EQ(list.size(), 0U); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_filter_bbox) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // INSERT INTO "area" VALUES('EPSG','1197','Romania','Romania - onshore and // offshore.',43.44,48.27,20.26,31.41,0); { auto ctxt = CoordinateOperationContext::create( authFactory, Extent::createFromBBOX(20.26, 43.44, 31.41, 48.27), 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4179"), authFactory->createCoordinateReferenceSystem("4258"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->getEPSGCode(), 15994); // Romania - 3m } { auto ctxt = CoordinateOperationContext::create( authFactory, Extent::createFromBBOX(20.26 + .1, 43.44 + .1, 31.41 - .1, 48.27 - .1), 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4179"), authFactory->createCoordinateReferenceSystem("4258"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->getEPSGCode(), 15994); // Romania - 3m } { auto ctxt = CoordinateOperationContext::create( authFactory, Extent::createFromBBOX(20.26 - .1, 43.44 - .1, 31.41 + .1, 48.27 + .1), 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4179"), authFactory->createCoordinateReferenceSystem("4258"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_incompatible_area) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4267"), // NAD27 authFactory->createCoordinateReferenceSystem("4258"), // ETRS 89 ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_inverse_needed) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setUsePROJAlternativeGridNames(false); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4275"), // NTF authFactory->createCoordinateReferenceSystem("4258"), // ETRS89 ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign +step +proj=helmert +x=-168 " "+y=-60 +z=320 +step +inv +proj=cart +ellps=GRS80 +step +proj=pop " "+v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step " "+proj=axisswap +order=2,1"); EXPECT_EQ(list[1]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step " "+proj=hgridshift +grids=fr_ign_ntf_r93.tif +step " "+proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4275"), // NTF authFactory->createCoordinateReferenceSystem("4258"), // ETRS89 ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step " "+proj=hgridshift +grids=fr_ign_ntf_r93.tif +step " "+proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4258"), // ETRS89 authFactory->createCoordinateReferenceSystem("4275"), // NTF ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +inv " "+proj=hgridshift +grids=fr_ign_ntf_r93.tif +step " "+proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_ntv1_ntv2_ctable2) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4267"), // NAD27 authFactory->createCoordinateReferenceSystem("4269"), // NAD83 ctxt); ASSERT_EQ(list.size(), 10U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift " "+grids=ca_nrc_ntv2_0.tif +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift " "+grids=ca_nrc_ntv1_can.tif +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_EQ(list[2]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift " "+grids=us_noaa_conus.tif +step +proj=unitconvert +xy_in=rad " "+xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_NAD27_to_WGS84) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4267"), // NAD27 authFactory->createCoordinateReferenceSystem("4326"), // WGS84 ctxt); ASSERT_EQ(list.size(), 79U); EXPECT_EQ(list[0]->nameStr(), "NAD27 to WGS 84 (33)"); // 1.0 m, Canada - NAD27 EXPECT_EQ(list[1]->nameStr(), "NAD27 to WGS 84 (3)"); // 20.0 m, Canada - NAD27 EXPECT_EQ(list[2]->nameStr(), "NAD27 to WGS 84 (79)"); // 5.0 m, USA - CONUS including EEZ EXPECT_EQ(list[3]->nameStr(), "NAD27 to WGS 84 (4)"); // 10.0 m, USA - CONUS - onshore } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_NAD27_to_WGS84_G1762) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto authFactoryEPSG = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto list = CoordinateOperationFactory::create()->createOperations( // NAD27 authFactoryEPSG->createCoordinateReferenceSystem("4267"), // WGS84 (G1762) authFactoryEPSG->createCoordinateReferenceSystem("9057"), ctxt); ASSERT_GE(list.size(), 78U); EXPECT_EQ(list[0]->nameStr(), "NAD27 to WGS 84 (33) + WGS 84 to WGS 84 (G1762)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=ca_nrc_ntv2_0.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[1]->nameStr(), "NAD27 to WGS 84 (3) + WGS 84 to WGS 84 (G1762)"); EXPECT_EQ(list[2]->nameStr(), "NAD27 to WGS 84 (79) + WGS 84 to WGS 84 (G1762)"); EXPECT_EQ(list[3]->nameStr(), "NAD27 to WGS 84 (4) + WGS 84 to WGS 84 (G1762)"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_WGS84_G1674_to_WGS84_G1762) { // Check that particular behavior with WGS 84 (Gxxx) related to // 'geodetic_datum_preferred_hub' table and custom no-op transformations // between WGS 84 and WGS 84 (Gxxx) doesn't affect direct transformations // to those realizations. auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto authFactoryEPSG = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto list = CoordinateOperationFactory::create()->createOperations( // WGS84 (G1674) authFactoryEPSG->createCoordinateReferenceSystem("9056"), // WGS84 (G1762) authFactoryEPSG->createCoordinateReferenceSystem("9057"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=-0.004 +y=0.003 +z=0.004 +rx=0.00027 " "+ry=-0.00027 +rz=0.00038 +s=-0.0069 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_EPSG_4240_Indian1975_to_EPSG_4326) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4240"), // Indian 1975 authFactory->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 3U); // Indian 1975 to WGS 84 (4), 3.0 m, Thailand - onshore EXPECT_EQ(list[0]->getEPSGCode(), 1812); // The following is the one we want to see. It has a lesser accuracy than // the above one and the same bbox, but the name of its area of use is // slightly different // Indian 1975 to WGS 84 (2), 5.0 m, Thailand - onshore and Gulf of Thailand EXPECT_EQ(list[1]->getEPSGCode(), 1304); // Indian 1975 to WGS 84 (3), 1.0 m, Thailand - Bongkot field EXPECT_EQ(list[2]->getEPSGCode(), 1537); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_helmert_geog3D_crs) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4939"), // GDA94 3D authFactory->createCoordinateReferenceSystem("7843"), // GDA2020 3D ctxt); ASSERT_EQ(list.size(), 1U); // Check there is no push / pop of v_3 EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=0.06155 +y=-0.01087 +z=-0.04019 " "+rx=-0.0394924 +ry=-0.0327221 +rz=-0.0328979 +s=-0.009994 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_helmert_geocentric_3D) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); auto list = CoordinateOperationFactory::create()->createOperations( // GDA94 geocentric authFactory->createCoordinateReferenceSystem("4348"), // GDA2020 geocentric authFactory->createCoordinateReferenceSystem("7842"), ctxt); ASSERT_EQ(list.size(), 1U); // Check there is no push / pop of v_3 EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=helmert +x=0.06155 +y=-0.01087 +z=-0.04019 " "+rx=-0.0394924 +ry=-0.0327221 +rz=-0.0328979 +s=-0.009994 " "+convention=coordinate_frame"); EXPECT_EQ(list[0]->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=helmert +x=0.06155 +y=-0.01087 +z=-0.04019 " "+rx=-0.0394924 +ry=-0.0327221 +rz=-0.0328979 +s=-0.009994 " "+convention=coordinate_frame"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_helmert_geog3D_to_geocentirc) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); auto list = CoordinateOperationFactory::create()->createOperations( // GDA94 3D authFactory->createCoordinateReferenceSystem("4939"), // GDA2020 geocentric authFactory->createCoordinateReferenceSystem("7842"), ctxt); ASSERT_GE(list.size(), 1U); // Check there is no push / pop of v_3 EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=0.06155 +y=-0.01087 +z=-0.04019 " "+rx=-0.0394924 +ry=-0.0327221 +rz=-0.0328979 +s=-0.009994 " "+convention=coordinate_frame"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_invalid_EPSG_ID) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); // EPSG:4656 is incorrect. Should be EPSG:8997 auto obj = WKTParser().createFromWKT( "GEOGCS[\"ITRF2000\"," "DATUM[\"International_Terrestrial_Reference_Frame_2000\"," "SPHEROID[\"GRS 1980\",6378137,298.257222101," "AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6656\"]]," "PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.0174532925199433]," "AUTHORITY[\"EPSG\",\"4656\"]]"); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(crs), GeographicCRS::EPSG_4326, ctxt); ASSERT_EQ(list.size(), 1U); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_datum_ensemble) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); auto dst_wkt = "GEOGCRS[\"unknown\"," " ENSEMBLE[\"World Geodetic System 1984 ensemble\"," " MEMBER[\"World Geodetic System 1984 (Transit)\"," " ID[\"EPSG\",1166]]," " MEMBER[\"World Geodetic System 1984 (G730)\"," " ID[\"EPSG\",1152]]," " MEMBER[\"World Geodetic System 1984 (G873)\"," " ID[\"EPSG\",1153]]," " MEMBER[\"World Geodetic System 1984 (G1150)\"," " ID[\"EPSG\",1154]]," " MEMBER[\"World Geodetic System 1984 (G1674)\"," " ID[\"EPSG\",1155]]," " MEMBER[\"World Geodetic System 1984 (G1762)\"," " ID[\"EPSG\",1156]]," " ELLIPSOID[\"WGS 84\",6378137,298.257223563," " LENGTHUNIT[\"metre\",1,ID[\"EPSG\",9001]]," " ID[\"EPSG\",7030]]," " ENSEMBLEACCURACY[2]]," " PRIMEM[\"Greenwich\",0," " ANGLEUNIT[\"degree\",0.0174532925199433,ID[\"EPSG\",9102]]," " ID[\"EPSG\",8901]]," " CS[ellipsoidal,2," " ID[\"EPSG\",6422]]," " AXIS[\"Geodetic latitude (Lat)\",north," " ORDER[1]]," " AXIS[\"Geodetic longitude (Lon)\",east," " ORDER[2]]," " ANGLEUNIT[\"degree (supplier to define representation)\"," "0.0174532925199433,ID[\"EPSG\",9122]]]"; auto dstObj = WKTParser().createFromWKT(dst_wkt); auto dstCRS = nn_dynamic_pointer_cast(dstObj); ASSERT_TRUE(dstCRS != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4258"), // ETRS89 NN_NO_CHECK(dstCRS), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "ETRS89 to WGS 84 (1)"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_incompatible_celestial_body) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto authFactoryEPSG = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto authFactoryIAU_2015 = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); EXPECT_THROW( CoordinateOperationFactory::create()->createOperations( authFactoryEPSG->createCoordinateReferenceSystem("4326"), // WGS 84 authFactoryIAU_2015->createCoordinateReferenceSystem( "51200"), // Ananke ctxt), UnsupportedOperationException); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_incompatible_celestial_body_but_same_radius) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto authFactoryESRI = AuthorityFactory::create(DatabaseContext::create(), "ESRI"); auto authFactoryIAU_2015 = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); EXPECT_THROW(CoordinateOperationFactory::create()->createOperations( authFactoryESRI->createCoordinateReferenceSystem( "104936"), // GCS_Pan_2000 authFactoryIAU_2015->createCoordinateReferenceSystem( "51200"), // Ananke ctxt), UnsupportedOperationException); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_compatible_unknown_celestial_body) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto objSrc = createFromUserInput("+proj=longlat +R=10000 +type=crs", dbContext); auto srcCRS = nn_dynamic_pointer_cast(objSrc); auto objDst = createFromUserInput("+proj=longlat +R=10001 +type=crs", dbContext); const auto queryCounterBefore = dbContext->getQueryCounter(); auto dstCRS = nn_dynamic_pointer_cast(objDst); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), NN_NO_CHECK(dstCRS), ctxt); EXPECT_EQ(dbContext->getQueryCounter(), queryCounterBefore); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_incompatible_unknown_celestial_body) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto objSrc = createFromUserInput("+proj=longlat +R=10000 +type=crs", dbContext); auto srcCRS = nn_dynamic_pointer_cast(objSrc); auto objDst = createFromUserInput("+proj=longlat +R=99999 +type=crs", dbContext); auto dstCRS = nn_dynamic_pointer_cast(objDst); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); EXPECT_THROW(CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), NN_NO_CHECK(dstCRS), ctxt), UnsupportedOperationException); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_compatible_celestial_body_through_semi_major_axis) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto authFactoryIAU_2015 = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto dst_wkt = "GEOGCRS[\"unknown\",\n" " DATUM[\"unknown\",\n" " ELLIPSOID[\"unknown\",9999,0,\n" // Ananke is 10000 " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Reference_Meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"; auto dstObj = WKTParser().createFromWKT(dst_wkt); auto dstCRS = nn_dynamic_pointer_cast(dstObj); auto list = CoordinateOperationFactory::create()->createOperations( authFactoryIAU_2015->createCoordinateReferenceSystem("51200"), // Ananke NN_NO_CHECK(dstCRS), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_derived_geogCRS_3D) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto dst_wkt = "GEOGCRS[\"CH1903+ with 10m offset on ellipsoidal height\",\n" " BASEGEOGCRS[\"CH1903+\",\n" " DATUM[\"CH1903+\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6150]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " DERIVINGCONVERSION[\"Offset on ellipsoidal height\",\n" " METHOD[\"Geographic3D offsets\",\n" " ID[\"EPSG\",9660]],\n" " PARAMETER[\"Latitude offset\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8601]],\n" " PARAMETER[\"Longitude offset\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8602]],\n" " PARAMETER[\"Vertical Offset\",10,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8603]]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto dstObj = WKTParser().createFromWKT(dst_wkt); auto dstCRS = nn_dynamic_pointer_cast(dstObj); ASSERT_TRUE(dstCRS != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 3D NN_NO_CHECK(dstCRS), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ( list[0]->nameStr(), "Inverse of CH1903+ to WGS 84 (1) + Offset on ellipsoidal height"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=-674.374 +y=-15.056 +z=-405.346 " "+step +inv +proj=cart +ellps=bessel " "+step +proj=geogoffset +dlat=0 +dlon=0 +dh=10 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, vertCRS_to_geogCRS_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setUsePROJAlternativeGridNames(false); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "3855"), // EGM2008 height authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 ctxt); ASSERT_EQ(list.size(), 3U); EXPECT_EQ( list[1]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "3855"), // EGM2008 height authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 ctxt); ASSERT_EQ(list.size(), 3U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 authFactory->createCoordinateReferenceSystem( "3855"), // EGM2008 height ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift +grids=us_nga_egm08_25.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // NGVD29 depth (ftUS) authFactory->createCoordinateReferenceSystem("6359"), authFactory->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +s33=-0.304800609601219"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // NZVD2016 height authFactory->createCoordinateReferenceSystem("7839"), // NZGD2000 authFactory->createCoordinateReferenceSystem("4959"), ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=nz_linz_nzgeoid2016.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } { // Test actually the database where we derive records using the more // classic 'Geographic3D to GravityRelatedHeight' method from // records using EPSG:1088 //'Geog3D to Geog2D+GravityRelatedHeight (gtx)' method auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(DatabaseContext::create(), std::string()), nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // Baltic 1957 height authFactory->createCoordinateReferenceSystem("8357"), // ETRS89 authFactory->createCoordinateReferenceSystem("4937"), ctxt); ASSERT_EQ(list.size(), 3U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift " "+grids=cz_cuzk_CR-2005.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift " "+grids=sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } } // --------------------------------------------------------------------------- TEST(operation, geog3DCRS_to_geog2DCRS_plus_vertCRS_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // ETRS89 (3D) authFactory->createCoordinateReferenceSystem("4937"), // ETRS89 + Baltic 1957 height authFactory->createCoordinateReferenceSystem("8360"), ctxt); ASSERT_GE(list.size(), 2U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift " "+grids=cz_cuzk_CR-2005.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[0]->inverse()->nameStr(), "Inverse of ETRS89 to Baltic 1957 height (2)"); EXPECT_EQ( list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift " "+grids=sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[1]->inverse()->nameStr(), "Inverse of 'ETRS89 to ETRS89 + Baltic 1957 height (1)'"); } } // --------------------------------------------------------------------------- TEST(operation, geog3DCRS_to_vertCRS_depth_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4937"), // ETRS89 authFactory->createCoordinateReferenceSystem("9672"), // CD Norway deph ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift " "+grids=no_kv_CD_above_Ell_ETRS89_v2023b.tif +multiplier=1 " "+step +proj=axisswap +order=1,2,-3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("9672"), // CD Norway deph authFactory->createCoordinateReferenceSystem("4937"), // ETRS89 ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=axisswap +order=1,2,-3 " "+step +proj=vgridshift " "+grids=no_kv_CD_above_Ell_ETRS89_v2023b.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } } // --------------------------------------------------------------------------- TEST(operation, geog3DCRS_to_geog2DCRS_plus_vertCRS_depth_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4937"), // ETRS89 authFactory->createCoordinateReferenceSystem("9883"), // ETRS89 + CD Norway deph ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift " "+grids=no_kv_CD_above_Ell_ETRS89_v2023b.tif +multiplier=1 " "+step +proj=axisswap +order=1,2,-3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("9883"), // ETRS89 + CD Norway deph authFactory->createCoordinateReferenceSystem("4937"), // ETRS89 ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=axisswap +order=1,2,-3 " "+step +proj=vgridshift " "+grids=no_kv_CD_above_Ell_ETRS89_v2023b.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_noop) { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->nameStr(), "Null geographic offset from WGS 84 to WGS 84"); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ(op->inverse()->nameStr(), op->nameStr()); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_longitude_rotation) { auto src = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "A"), GeodeticReferenceFrame::create(PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto dest = GeographicCRS::create( PropertyMap().set(IdentifiedObject::NAME_KEY, "B"), GeodeticReferenceFrame::create(PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::PARIS), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto op = CoordinateOperationFactory::create()->createOperation(src, dest); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=longlat " "+ellps=WGS84 +pm=paris +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_EQ(op->inverse()->exportToWKT(WKTFormatter::create().get()), CoordinateOperationFactory::create() ->createOperation(dest, src) ->exportToWKT(WKTFormatter::create().get())); EXPECT_TRUE( op->inverse()->isEquivalentTo(CoordinateOperationFactory::create() ->createOperation(dest, src) .get())); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_longitude_rotation_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4807"), // NTF(Paris) authFactory->createCoordinateReferenceSystem("4275"), // NTF ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "NTF (Paris) to NTF (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv " "+proj=longlat +ellps=clrk80ign +pm=paris +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); EXPECT_EQ(list[1]->nameStr(), "NTF (Paris) to NTF (2)"); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv " "+proj=longlat +ellps=clrk80ign +pm=2.33720833333333 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_lonlat_vs_latlon_crs) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4749"), // RGNC91-93 authFactory->createCoordinateReferenceSystem("10310"), // RGNC15 ctxt); ASSERT_EQ(list.size(), 3U); EXPECT_EQ(list[0]->nameStr(), "RGNC91-93 to WGS 84 (1) + Inverse of RGNC15 to WGS 84 (1)"); // Check that we get direct transformation, and not only through WGS 84 // The difficulty here is that the transformation is registered between // "RGNC91-93 (lon-lat)" et "RGNC15 (lon-lat)" EXPECT_EQ(list[1]->nameStr(), "axis order change (2D) + RGNC91-93 to " "RGNC15 (2) + axis order change (2D)"); EXPECT_EQ(list[2]->nameStr(), "axis order change (2D) + RGNC91-93 to " "RGNC15 (1) + axis order change (2D)"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_concatenated_operation) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::ALWAYS); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4807"), // NTF(Paris) authFactory->createCoordinateReferenceSystem("4171"), // RGF93 ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "NTF (Paris) to RGF93 v1 (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=grad +xy_out=rad " "+step +inv +proj=longlat +ellps=clrk80ign +pm=paris " "+step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign " "+step +proj=xyzgridshift +grids=fr_ign_gr3df97a.tif " "+grid_ref=output_crs +ellps=GRS80 " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[1]->nameStr(), "NTF (Paris) to RGF93 v1 (2)"); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv " "+proj=longlat +ellps=clrk80ign +pm=paris +step +proj=hgridshift " "+grids=fr_ign_ntf_r93.tif +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_TRUE(nn_dynamic_pointer_cast(list[0]) != nullptr); auto grids = list[0]->gridsNeeded(DatabaseContext::create(), false); EXPECT_EQ(grids.size(), 1U); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_concatenated_operation_Egypt1907_to_WGS84) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4229"), // Egypt 1907 authFactory->createCoordinateReferenceSystem("4326"), // WGS84 ctxt); ASSERT_EQ(list.size(), 3U); // Concatenated operation EXPECT_EQ(list[1]->nameStr(), "Egypt 1907 to WGS 84 (2)"); ASSERT_EQ(list[1]->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(list[1]->coordinateOperationAccuracies()[0]->value(), "6.0"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_ED50_to_WGS72_no_NTF_intermediate) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4230"), // ED50 authFactory->createCoordinateReferenceSystem("4322"), // WGS 72 ctxt); ASSERT_GE(list.size(), 2U); // We should not use the ancient NTF as an intermediate when looking for // ED50 -> WGS 72 operations. for (const auto &op : list) { EXPECT_TRUE(op->nameStr().find("NTF") == std::string::npos) << op->nameStr(); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_same_grid_name) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4314"), // DHDN authFactory->createCoordinateReferenceSystem("4258"), // ETRS89 ctxt); ASSERT_TRUE(!list.empty()); EXPECT_EQ(list[0]->nameStr(), "DHDN to ETRS89 (8)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift " "+grids=de_adv_BETA2007.tif +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_geographic_offset_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4120"), // NTF(Paris) authFactory->createCoordinateReferenceSystem("4121"), // NTF ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Greek to GGRS87 (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=geogoffset " "+dlat=-5.86 +dlon=0.28 +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_CH1903_to_CH1903plus_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::ALWAYS); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4149"), // CH1903 authFactory->createCoordinateReferenceSystem("4150"), // CH1903+ ctxt); ASSERT_TRUE(list.size() == 1U); EXPECT_EQ(list[0]->nameStr(), "CH1903 to CH1903+ (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=ch_swisstopo_CHENyx06a.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_init_IGNF_to_init_IGNF_context) { auto dbContext = DatabaseContext::create(); auto sourceCRS_obj = PROJStringParser() .attachDatabaseContext(dbContext) .setUsePROJ4InitRules(true) .createFromPROJString("+init=IGNF:NTFG"); auto sourceCRS = nn_dynamic_pointer_cast(sourceCRS_obj); ASSERT_TRUE(sourceCRS != nullptr); auto targetCRS_obj = PROJStringParser() .attachDatabaseContext(dbContext) .setUsePROJ4InitRules(true) .createFromPROJString("+init=IGNF:RGF93G"); auto targetCRS = nn_dynamic_pointer_cast(targetCRS_obj); ASSERT_TRUE(targetCRS != nullptr); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( NN_CHECK_ASSERT(sourceCRS), NN_CHECK_ASSERT(targetCRS), ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "NOUVELLE TRIANGULATION DE LA FRANCE (NTF) vers RGF93 (ETRS89)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=fr_ign_ntf_r93.tif +step " "+proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_context_deprecated) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "4226"), // Cote d'Ivoire (deprecated) authFactory->createCoordinateReferenceSystem("4258"), // ETRS89 ctxt); ASSERT_TRUE(!list.empty()); EXPECT_EQ(list[0]->nameStr(), "Ballpark geographic offset from Cote d'Ivoire to ETRS89"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_3D) { auto geogcrs_m_obj = PROJStringParser().createFromPROJString( "+proj=longlat +vunits=m +type=crs"); auto geogcrs_m = nn_dynamic_pointer_cast(geogcrs_m_obj); ASSERT_TRUE(geogcrs_m != nullptr); auto geogcrs_ft_obj = PROJStringParser().createFromPROJString( "+proj=longlat +vunits=ft +type=crs"); auto geogcrs_ft = nn_dynamic_pointer_cast(geogcrs_ft_obj); ASSERT_TRUE(geogcrs_ft != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(geogcrs_m), NN_CHECK_ASSERT(geogcrs_ft)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +z_in=m +z_out=ft"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(geogcrs_ft), NN_CHECK_ASSERT(geogcrs_m)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +z_in=ft +z_out=m"); } auto geogcrs_m_with_pm_obj = PROJStringParser().createFromPROJString( "+proj=longlat +pm=paris +vunits=m +type=crs"); auto geogcrs_m_with_pm = nn_dynamic_pointer_cast(geogcrs_m_with_pm_obj); ASSERT_TRUE(geogcrs_m_with_pm != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(geogcrs_m_with_pm), NN_CHECK_ASSERT(geogcrs_ft)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +z_in=m " "+xy_out=rad +z_out=m +step +inv +proj=longlat +ellps=WGS84 " "+pm=paris +step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=ft"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_3D_lat_long_non_metre_to_geogCRS_longlat) { auto wkt = "GEOGCRS[\"my CRS\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563],\n" " ID[\"EPSG\",6326]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " LENGTHUNIT[\"my_vunit\",0.3]]]"; auto srcCRS_obj = WKTParser().createFromWKT(wkt); auto srcCRS = nn_dynamic_pointer_cast(srcCRS_obj); ASSERT_TRUE(srcCRS != nullptr); auto dstCRS_obj = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +type=crs"); auto dstCRS = nn_dynamic_pointer_cast(dstCRS_obj); ASSERT_TRUE(dstCRS != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(srcCRS), NN_CHECK_ASSERT(dstCRS)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +z_in=0.3 +z_out=m"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_without_id_to_geogCRS_3D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto src = authFactory->createCoordinateReferenceSystem("4289"); // Amersfoort auto dst = authFactory->createCoordinateReferenceSystem("4937"); // ETRS89 3D auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_GE(list.size(), 1U); auto wkt2 = "GEOGCRS[\"unnamed\",\n" " DATUM[\"Amersfoort\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]," " USAGE[\n" " SCOPE[\"unknown\"],\n" " AREA[\"Netherlands - onshore\"],\n" " BBOX[50.75,3.2,53.7,7.22]]]\n"; auto obj = WKTParser().createFromWKT(wkt2); auto src_from_wkt2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(src_from_wkt2 != nullptr); auto list2 = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src_from_wkt2), dst, ctxt); ASSERT_GE(list.size(), list2.size()); for (size_t i = 0; i < list.size(); i++) { const auto &op = list[i]; const auto &op2 = list2[i]; EXPECT_TRUE( op->isEquivalentTo(op2.get(), IComparable::Criterion::EQUIVALENT)) << op->nameStr() << " " << op2->nameStr(); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_promoted_to_3D_to_geogCRS_3D_context) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto authFactoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); { auto list = CoordinateOperationFactory::create()->createOperations( authFactoryEPSG->createCoordinateReferenceSystem("4269") ->promoteTo3D(std::string(), dbContext), // NAD83 (86) promoted to 3D authFactoryEPSG->createCoordinateReferenceSystem( "6319"), // NAD83 (2011) 3D ctxt); ASSERT_GE(list.size(), 1U); // Check we don't get an ESRI operation EXPECT_EQ(list[0]->nameStr(), "NAD83 to NAD83(HARN) (47) + " "NAD83(HARN) to NAD83(FBN) (1) + " "NAD83(FBN) to NAD83(NSRS2007) (1) + " "NAD83(NSRS2007) to NAD83(2011) (1)"); } { auto list = CoordinateOperationFactory::create()->createOperations( authFactoryEPSG->createCoordinateReferenceSystem( "6319"), // NAD83 (2011) 3D authFactoryEPSG->createCoordinateReferenceSystem("4269") ->promoteTo3D(std::string(), dbContext), // NAD83 (86) promoted to 3D ctxt); ASSERT_GE(list.size(), 1U); // Check we don't get an ESRI operation EXPECT_EQ(list[0]->nameStr(), "Inverse of NAD83(NSRS2007) to NAD83(2011) (1) + " "Inverse of NAD83(FBN) to NAD83(NSRS2007) (1) + " "Inverse of NAD83(HARN) to NAD83(FBN) (1) + " "Inverse of NAD83 to NAD83(HARN) (47)"); } } // --------------------------------------------------------------------------- static GeodeticCRSNNPtr createGeocentricDatumWGS84() { PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 4328) .set(IdentifiedObject::NAME_KEY, "WGS 84"); return GeodeticCRS::create( propertiesCRS, GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- static GeodeticCRSNNPtr createGeocentricKM() { PropertyMap propertiesCRS; propertiesCRS.set(IdentifiedObject::NAME_KEY, "Based on WGS 84"); return GeodeticCRS::create( propertiesCRS, GeodeticReferenceFrame::EPSG_6326, CartesianCS::createGeocentric( UnitOfMeasure("kilometre", 1000.0, UnitOfMeasure::Type::LINEAR))); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geogCRS_same_datum) { auto op = CoordinateOperationFactory::create()->createOperation( createGeocentricDatumWGS84(), GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=cart +ellps=WGS84 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geogCRS_different_datum) { auto op = CoordinateOperationFactory::create()->createOperation( createGeocentricDatumWGS84(), GeographicCRS::EPSG_4269); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->nameStr(), "Conversion from WGS 84 to WGS 84 (geographic) + " "Ballpark geographic offset from WGS 84 (geographic) to NAD83"); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geocentricCRS_different_datum) { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4269, createGeocentricDatumWGS84()); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->nameStr(), "Ballpark geographic offset from NAD83 to WGS 84 (geographic) + " "Conversion from WGS 84 (geographic) to WGS 84"); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geocentricCRS_same_noop) { auto op = CoordinateOperationFactory::create()->createOperation( createGeocentricDatumWGS84(), createGeocentricDatumWGS84()); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->nameStr(), "Null geocentric translation from WGS 84 to WGS 84"); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ(op->inverse()->nameStr(), op->nameStr()); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geocentricCRS_different_ballpark) { PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 4328) .set(IdentifiedObject::NAME_KEY, "unknown"); auto otherGeocentricCRS = GeodeticCRS::create( propertiesCRS, GeodeticReferenceFrame::EPSG_6269, CartesianCS::createGeocentric(UnitOfMeasure::METRE)); auto op = CoordinateOperationFactory::create()->createOperation( createGeocentricKM(), otherGeocentricCRS); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->nameStr(), "Ballpark geocentric translation from Based on WGS 84 to unknown"); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +xy_in=km +z_in=km +xy_out=m +z_out=m"); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geogCRS_same_datum_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4326"), // WGS84 geocentric authFactory->createCoordinateReferenceSystem("4978"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Conversion from WGS 84 (geog2D) to WGS 84 (geocentric)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart " "+ellps=WGS84"); EXPECT_EQ(list[0]->inverse()->nameStr(), "Conversion from WGS 84 (geocentric) to WGS 84 (geog2D)"); EXPECT_EQ(list[0]->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=cart +ellps=WGS84 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geogCRS_same_datum_context_all_auth) { // This is to check we don't use OGC:CRS84 as a pivot auto authFactoryEPSG = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto authFactoryAll = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactoryAll, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactoryEPSG->createCoordinateReferenceSystem("4326"), // WGS84 geocentric authFactoryEPSG->createCoordinateReferenceSystem("4978"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Conversion from WGS 84 (geog2D) to WGS 84 (geocentric)"); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geocentricCRS_different_datum_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // ITRF2000 (geocentric) authFactory->createCoordinateReferenceSystem("4919"), // ITRF2005 (geocentric) authFactory->createCoordinateReferenceSystem("4896"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "ITRF2000 to ITRF2005 (1)"); EXPECT_PRED_FORMAT2( ComparePROJString, list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=helmert +x=-0.0001 " "+y=0.0008 +z=0.0058 +rx=0 +ry=0 +rz=0 +s=-0.0004 +dx=0.0002 " "+dy=-0.0001 +dz=0.0018 +drx=0 +dry=0 +drz=0 +ds=-8e-05 " "+t_epoch=2000 +convention=position_vector"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_geocentricCRS_same_datum_to_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // WGS84 geocentric authFactory->createCoordinateReferenceSystem("4978"), authFactory->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Conversion from WGS 84 (geocentric) to WGS 84 (geog2D)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=cart +ellps=WGS84 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geog2D_to_geog3D_same_datum_but_with_potential_other_pivot_context) { // Check that when going from geog2D to geog3D of same datum, we don't // try to go through a WGS84 pivot... auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("5365"), // CR 05 2D authFactory->createCoordinateReferenceSystem("5364"), // CR 05 3D ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_different_datum_though_geocentric_transform_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // ITRF2000 (geog3D) authFactory->createCoordinateReferenceSystem("7909"), // ITRF2005 (geog3D) authFactory->createCoordinateReferenceSystem("7910"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Conversion from ITRF2000 (geog3D) to ITRF2000 (geocentric) + " "ITRF2000 to ITRF2005 (1) + " "Conversion from ITRF2005 (geocentric) to ITRF2005 (geog3D)"); EXPECT_PRED_FORMAT2( ComparePROJString, list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 +step +proj=helmert +x=-0.0001 " "+y=0.0008 +z=0.0058 +rx=0 +ry=0 +rz=0 +s=-0.0004 +dx=0.0002 " "+dy=-0.0001 +dz=0.0018 +drx=0 +dry=0 +drz=0 +ds=-8e-05 " "+t_epoch=2000 +convention=position_vector +step +inv " "+proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad " "+z_in=m +xy_out=deg +z_out=m +step +proj=axisswap +order=2,1"); EXPECT_TRUE(list[0]->requiresPerCoordinateInputTime()); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geocentricCRS_different_datum_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // ITRF2000 (geog3D) authFactory->createCoordinateReferenceSystem("7909"), // ITRF2005 (geocentric) authFactory->createCoordinateReferenceSystem("4896"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Conversion from ITRF2000 (geog3D) to ITRF2000 (geocentric) + " "ITRF2000 to ITRF2005 (1)"); EXPECT_PRED_FORMAT2( ComparePROJString, list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 +step +proj=helmert +x=-0.0001 " "+y=0.0008 +z=0.0058 +rx=0 +ry=0 +rz=0 +s=-0.0004 +dx=0.0002 " "+dy=-0.0001 +dz=0.0018 +drx=0 +dry=0 +drz=0 +ds=-8e-05 " "+t_epoch=2000 +convention=position_vector"); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_geogCRS_different_datum_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // ITRF2000 (geocentric) authFactory->createCoordinateReferenceSystem("4919"), // ITRF2005 (geog3D) authFactory->createCoordinateReferenceSystem("7910"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "ITRF2000 to ITRF2005 (1) + " "Conversion from ITRF2005 (geocentric) to ITRF2005 (geog3D)"); EXPECT_PRED_FORMAT2( ComparePROJString, list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=helmert +x=-0.0001 " "+y=0.0008 +z=0.0058 +rx=0 +ry=0 +rz=0 +s=-0.0004 +dx=0.0002 " "+dy=-0.0001 +dz=0.0018 +drx=0 +dry=0 +drz=0 +ds=-8e-05 " "+t_epoch=2000 +convention=position_vector +step +inv " "+proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad " "+z_in=m +xy_out=deg +z_out=m +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_3D_to_geogCRS_3D_different_datum_context) { // Test for https://github.com/OSGeo/PROJ/issues/2541 auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // RGF93 (3D) authFactory->createCoordinateReferenceSystem("4965"), // CH1903+ promoted to 3D authFactory->createCoordinateReferenceSystem("4150")->promoteTo3D( std::string(), dbContext), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "RGF93 v1 to ETRS89 (1) + Inverse of CH1903+ to ETRS89 (1)"); // Check that there is no +push +v_3 EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=-674.374 +y=-15.056 +z=-405.346 " "+step +inv +proj=cart +ellps=bessel " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[0]->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=674.374 +y=15.056 +z=405.346 " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geocentric_to_geogCRS_3D_different_datum_context) { // Test variant of https://github.com/OSGeo/PROJ/issues/2541 auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // RGF93 (geocentric) authFactory->createCoordinateReferenceSystem("4964"), // CH1903+ promoted to 3D authFactory->createCoordinateReferenceSystem("4150")->promoteTo3D( std::string(), dbContext), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Conversion from RGF93 v1 (geocentric) to RGF93 v1 (geog3D) + " "RGF93 v1 to ETRS89 (1) + " "Inverse of CH1903+ to ETRS89 (1)"); // Check that there is no +push +v_3 EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=helmert +x=-674.374 +y=-15.056 +z=-405.346 " "+step +inv +proj=cart +ellps=bessel " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[0]->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=674.374 +y=15.056 +z=405.346"); } // --------------------------------------------------------------------------- TEST(operation, createBetweenGeodeticCRSWithDatumBasedIntermediates) { auto dbContext = DatabaseContext::create(); auto authFactoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactoryEPSG, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // IG05/12 Intermediate CRS authFactoryEPSG->createCoordinateReferenceSystem("6990"), // ITRF2014 authFactoryEPSG->createCoordinateReferenceSystem("9000"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of ITRF2008 to IG05/12 Intermediate CRS + " "Conversion from ITRF2008 (geog2D) to ITRF2008 (geocentric) + " "ITRF2008 to ITRF2014 (1) + " "Conversion from ITRF2014 (geocentric) to ITRF2014 (geog2D)"); auto listInv = CoordinateOperationFactory::create()->createOperations( // ITRF2014 authFactoryEPSG->createCoordinateReferenceSystem("9000"), // IG05/12 Intermediate CRS authFactoryEPSG->createCoordinateReferenceSystem("6990"), ctxt); ASSERT_EQ(listInv.size(), 1U); EXPECT_EQ(listInv[0]->nameStr(), "Conversion from ITRF2014 (geog2D) to ITRF2014 (geocentric) + " "Inverse of ITRF2008 to ITRF2014 (1) + " "Conversion from ITRF2008 (geocentric) to ITRF2008 (geog2D) + " "ITRF2008 to IG05/12 Intermediate CRS"); } // --------------------------------------------------------------------------- TEST(operation, esri_projectedCRS_to_geogCRS_with_ITRF_intermediate_context) { auto dbContext = DatabaseContext::create(); auto authFactoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto authFactoryESRI = AuthorityFactory::create(dbContext, "ESRI"); auto ctxt = CoordinateOperationContext::create(authFactoryEPSG, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // NAD_1983_CORS96_StatePlane_North_Carolina_FIPS_3200_Ft_US (projected) authFactoryESRI->createCoordinateReferenceSystem("103501"), // ITRF2005 (geog3D) authFactoryEPSG->createCoordinateReferenceSystem("7910"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of NAD_1983_CORS96_StatePlane_North_Carolina_" "FIPS_3200_Ft_US + " "Conversion from NAD83(CORS96) (geog2D) to NAD83(CORS96) " "(geocentric) + Inverse of ITRF2000 to NAD83(CORS96) (1) + " "ITRF2000 to ITRF2005 (1) + " "Conversion from ITRF2005 (geocentric) to ITRF2005 (geog3D)"); EXPECT_PRED_FORMAT2( ComparePROJString, list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=us-ft " "+xy_out=m +step +inv +proj=lcc +lat_0=33.75 +lon_0=-79 " "+lat_1=34.3333333333333 +lat_2=36.1666666666667 " "+x_0=609601.219202438 +y_0=0 +ellps=GRS80 +step +proj=cart " "+ellps=GRS80 +step +inv +proj=helmert +x=0.9956 +y=-1.9013 " "+z=-0.5215 +rx=0.025915 +ry=0.009426 +rz=0.011599 +s=0.00062 " "+dx=0.0007 +dy=-0.0007 +dz=0.0005 +drx=6.7e-05 +dry=-0.000757 " "+drz=-5.1e-05 +ds=-0.00018 +t_epoch=1997 " "+convention=coordinate_frame +step +proj=helmert +x=-0.0001 " "+y=0.0008 +z=0.0058 +rx=0 +ry=0 +rz=0 +s=-0.0004 +dx=0.0002 " "+dy=-0.0001 +dz=0.0018 +drx=0 +dry=0 +drz=0 +ds=-8e-05 " "+t_epoch=2000 +convention=position_vector +step +inv +proj=cart " "+ellps=GRS80 +step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=m +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_WGS84_to_GDA2020) { // 2D reduction of use case of https://github.com/OSGeo/PROJ/issues/2348 auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); { auto list = CoordinateOperationFactory::create()->createOperations( // GDA2020 authFactory->createCoordinateReferenceSystem("7844"), // WGS 84 authFactory->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "GDA2020 to WGS 84 (2)"); } // Inverse { auto list = CoordinateOperationFactory::create()->createOperations( // WGS 84 authFactory->createCoordinateReferenceSystem("4326"), // GDA2020 authFactory->createCoordinateReferenceSystem("7844"), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of GDA2020 to WGS 84 (2)"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_geogCRS_with_intermediate_no_ids) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto objSrc = WKTParser().createFromWKT( "GEOGCRS[\"input\",\n" " DATUM[\"International Terrestrial Reference Frame 2014\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",1165]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]]]"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = WKTParser().createFromWKT( "GEOGCRS[\"output\",\n" " DATUM[\"Estonia 1997\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6180]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]]]"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); { auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dest), ctxt); ASSERT_GE(list.size(), 1U); // Test that a non-noop operation is returned EXPECT_EQ( list[0]->nameStr(), "axis order change (geographic3D horizontal) + " "Conversion from ITRF2014 (geog3D) to ITRF2014 (geocentric) + " "ITRF2014 to ETRF2014 (1) + " "Inverse of NKG_ETRF14 to ETRF2014 + " "NKG_ETRF14 to ETRF96@2000.0 (Estonia) + " "ETRF96@2000.0 to ETRF96@1997.56 using nkgrf17vel + " "Conversion from ETRS89 (geocentric) to ETRS89 (geog2D) + " "Inverse of EST97 to ETRS89 (1) + " "Null geographic offset from EST97 (geog2D) to EST97 (geog3D) + " "axis order change (geographic3D horizontal)"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_3D_source_datum_name_is_alias_to_geogCRS) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto objSrc = WKTParser().createFromWKT( "GEOGCRS[\"something\",\n" " DATUM[\"WGS84\",\n" " ELLIPSOID[\"WGS84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"Meter\",1,\n" " ID[\"EPSG\",9001]]]]"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), authFactory->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); EXPECT_EQ(list[0]->nameStr(), "Null geographic offset from something to WGS 84"); } // --------------------------------------------------------------------------- static ProjectedCRSNNPtr createUTM31_WGS84() { return ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- static ProjectedCRSNNPtr createUTM32_WGS84() { return ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 32, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_projCRS) { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, createUTM31_WGS84()); ASSERT_TRUE(op != nullptr); EXPECT_TRUE(std::dynamic_pointer_cast(op) != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=utm " "+zone=31 +ellps=WGS84"); PJ_CONTEXT *ctx = proj_context_create(); auto transformer = op->coordinateTransformer(ctx); PJ_COORD c; c.v[0] = 49; c.v[1] = 2; c.v[2] = 0; c.v[3] = HUGE_VAL; c = transformer->transform(c); EXPECT_NEAR(c.v[0], 426857.98771728, 1e-8); EXPECT_NEAR(c.v[1], 5427937.52346492, 1e-8); proj_context_destroy(ctx); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_longlat_to_geogCS_latlong) { auto sourceCRS = GeographicCRS::OGC_CRS84; auto targetCRS = GeographicCRS::EPSG_4326; auto op = CoordinateOperationFactory::create()->createOperation(sourceCRS, targetCRS); ASSERT_TRUE(op != nullptr); auto conv = std::dynamic_pointer_cast(op); ASSERT_TRUE(conv != nullptr); EXPECT_TRUE(op->sourceCRS() && op->sourceCRS()->isEquivalentTo(sourceCRS.get())); EXPECT_TRUE(op->targetCRS() && op->targetCRS()->isEquivalentTo(targetCRS.get())); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=2,1"); auto convInverse = nn_dynamic_pointer_cast(conv->inverse()); ASSERT_TRUE(convInverse != nullptr); EXPECT_TRUE(convInverse->sourceCRS() && convInverse->sourceCRS()->isEquivalentTo(targetCRS.get())); EXPECT_TRUE(convInverse->targetCRS() && convInverse->targetCRS()->isEquivalentTo(sourceCRS.get())); EXPECT_EQ(conv->method()->exportToWKT(WKTFormatter::create().get()), convInverse->method()->exportToWKT(WKTFormatter::create().get())); EXPECT_TRUE(conv->method()->isEquivalentTo(convInverse->method().get())); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_longlat_to_geogCS_latlong_database) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( AuthorityFactory::create(DatabaseContext::create(), "OGC") ->createCoordinateReferenceSystem("CRS84"), AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_longlat_to_projCRS) { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::OGC_CRS84, createUTM31_WGS84()); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=utm +zone=31 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_different_from_baseCRS_to_projCRS) { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4807, createUTM31_WGS84()); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv +proj=longlat " "+ellps=clrk80ign +pm=paris +step +proj=utm +zone=31 " "+ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_with_towgs84_to_geocentric) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto objSrc = WKTParser().createFromWKT( "GEOGCS[\"WGS84 Coordinate System\",DATUM[\"WGS_1984\"," "SPHEROID[\"WGS 1984\",6378137,298.257223563]," "TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433]," "AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST]," "AUTHORITY[\"EPSG\",\"4326\"]]"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto src3D = src->promoteTo3D(std::string(), dbContext); auto objDst = WKTParser().createFromWKT( "GEOCCS[\"WGS 84\",DATUM[\"WGS_1984\"," "SPHEROID[\"WGS 84\",6378137,298.257223563," "AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]]," "UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]]," "AXIS[\"Geocentric X\",OTHER],AXIS[\"Geocentric Y\",OTHER]," "AXIS[\"Geocentric Z\",NORTH],AUTHORITY[\"EPSG\",\"4978\"]]"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); { auto list = CoordinateOperationFactory::create()->createOperations( src3D, NN_NO_CHECK(dst), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m " "+xy_out=rad +z_out=m " "+step +proj=cart +ellps=WGS84"); } { auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(dst), src3D, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } } // --------------------------------------------------------------------------- TEST(operation, geogCRS_different_from_baseCRS_to_projCRS_context_compatible_area) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::ALWAYS); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4807"), // NTF(Paris) authFactory->createCoordinateReferenceSystem("32631"), // UTM31 WGS84 ctxt); ASSERT_EQ(list.size(), 4U); EXPECT_EQ( list[0]->nameStr(), "NTF (Paris) to NTF (1) + Inverse of WGS 84 to NTF (3) + UTM zone 31N"); ASSERT_EQ(list[0]->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(list[0]->coordinateOperationAccuracies()[0]->value(), "1"); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv " "+proj=longlat +ellps=clrk80ign +pm=paris +step +proj=hgridshift " "+grids=fr_ign_ntf_r93.tif +step +proj=utm +zone=31 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, geocentricCRS_to_projCRS) { auto op = CoordinateOperationFactory::create()->createOperation( createGeocentricDatumWGS84(), createUTM31_WGS84()); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=cart +ellps=WGS84 +step " "+proj=utm +zone=31 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_geogCRS) { auto op = CoordinateOperationFactory::create()->createOperation( createUTM31_WGS84(), GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=31 +ellps=WGS84 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_no_id_to_geogCRS_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto src = authFactory->createCoordinateReferenceSystem( "28992"); // Amersfoort / RD New auto dst = authFactory->createCoordinateReferenceSystem("4258"); // ETRS89 2D auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_GE(list.size(), 1U); auto wkt2 = "PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"Amersfoort\",\n" " DATUM[\"Amersfoort\",\n" " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Oblique Stereographic\"],\n" " PARAMETER[\"Latitude of natural origin\",52.1561605555556],\n" " PARAMETER[\"Longitude of natural origin\",5.38763888888889],\n" " PARAMETER[\"Scale factor at natural origin\",0.9999079],\n" " PARAMETER[\"False easting\",155000],\n" " PARAMETER[\"False northing\",463000]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",28992]]"; auto obj = WKTParser().createFromWKT(wkt2); auto src_from_wkt2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(src_from_wkt2 != nullptr); auto list2 = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src_from_wkt2), dst, ctxt); ASSERT_GE(list.size(), list2.size() - 1); for (size_t i = 0; i < list.size(); i++) { const auto &op = list[i]; const auto &op2 = list2[i]; EXPECT_TRUE( op->isEquivalentTo(op2.get(), IComparable::Criterion::EQUIVALENT)); } } // --------------------------------------------------------------------------- TEST(operation, projCRS_3D_to_geogCRS_3D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto wkt = "PROJCRS[\"NAD83(HARN) / Oregon GIC Lambert (ft)\",\n" " BASEGEOGCRS[\"NAD83(HARN)\",\n" " DATUM[\"NAD83 (High Accuracy Reference Network)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4957]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Lambert Conic Conformal (2SP)\",\n" " ID[\"EPSG\",9802]],\n" " PARAMETER[\"Latitude of false origin\",41.75,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",-120.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard parallel\",43,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\",45.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",1312335.958,\n" " LENGTHUNIT[\"foot\",0.3048],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",0,\n" " LENGTHUNIT[\"foot\",0.3048],\n" " ID[\"EPSG\",8827]]],\n" " CS[Cartesian,3],\n" " AXIS[\"easting\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"foot\",0.3048]],\n" " AXIS[\"northing\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"foot\",0.3048]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"foot\",0.3048]]]"; auto obj = WKTParser().createFromWKT(wkt); auto src = NN_CHECK_ASSERT(nn_dynamic_pointer_cast(obj)); auto dst = authFactory->createCoordinateReferenceSystem( "4957"); // NAD83(HARN) (3D) auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " // Check that z ft->m conversion is done (and just once) "+step +proj=unitconvert +xy_in=ft +z_in=ft +xy_out=m +z_out=m " "+step +inv +proj=lcc +lat_0=41.75 +lon_0=-120.5 +lat_1=43 " "+lat_2=45.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_3D_to_projCRS_2D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto wkt = "PROJCRS[\"Projected 3d CRS\",\n" " BASEGEOGCRS[\"JGD2000\",\n" " DATUM[\"Japanese Geodetic Datum 2000\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4947]],\n" // the code is what triggered the bug " CONVERSION[\"Japan Plane Rectangular CS zone VII\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",36,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",137.166666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",17807]],\n" " CS[Cartesian,3],\n" " AXIS[\"northing (X)\",north,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"easting (Y)\",east,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]"; auto obj = WKTParser().createFromWKT(wkt); auto src = NN_CHECK_ASSERT(nn_dynamic_pointer_cast(obj)); auto dst = authFactory->createCoordinateReferenceSystem("32653"); // WGS 84 UTM 53 // We just want to check that we don't get inconsistent chaining exception auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_GE(list.size(), 1U); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_3D_to_projCRS_with_2D_geocentric_translation) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto src = authFactory->createCoordinateReferenceSystem("4979"); // WGS 84 3D // Azores Central 1948 / UTM zone 26N auto dst = authFactory->createCoordinateReferenceSystem("2189"); auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=push +v_3 " // this is what we check. Due to the // target system being 2D only "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=104 +y=-167 +z=38 " "+step +inv +proj=cart +ellps=intl " "+step +proj=pop +v_3 " // this is what we check "+step +proj=utm +zone=26 +ellps=intl"); auto listReverse = CoordinateOperationFactory::create()->createOperations(dst, src, ctxt); ASSERT_GE(listReverse.size(), 1U); EXPECT_EQ( listReverse[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=26 +ellps=intl " "+step +proj=push +v_3 " // this is what we check "+step +proj=cart +ellps=intl " "+step +proj=helmert +x=-104 +y=167 +z=-38 " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " // this is what we check "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS) { auto op = CoordinateOperationFactory::create()->createOperation( createUTM31_WGS84(), createUTM32_WGS84()); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=31 +ellps=WGS84 +step " "+proj=utm +zone=32 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_different_baseCRS) { auto utm32 = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4807, Conversion::createUTM(PropertyMap(), 32, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto op = CoordinateOperationFactory::create()->createOperation( createUTM31_WGS84(), utm32); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=31 +ellps=WGS84 +step " "+proj=utm +zone=32 +ellps=clrk80ign +pm=paris"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_context_compatible_area) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("32634"), // UTM 34 authFactory->createCoordinateReferenceSystem( "2171"), // Pulkovo 42 Poland I ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "Inverse of UTM zone 34N + Inverse of Pulkovo 1942(58) to WGS 84 " "(1) + Poland zone I"); ASSERT_EQ(list[0]->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(list[0]->coordinateOperationAccuracies()[0]->value(), "1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_context_compatible_area_bis) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "3844"), // Pulkovo 42 Stereo 70 (Romania) authFactory->createCoordinateReferenceSystem("32634"), // UTM 34 ctxt); ASSERT_EQ(list.size(), 3U); EXPECT_EQ(list[0]->nameStr(), "Inverse of Stereo 70 + " "Pulkovo 1942(58) to WGS 84 " "(19) + UTM zone 34N"); ASSERT_EQ(list[0]->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(list[0]->coordinateOperationAccuracies()[0]->value(), "3"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_context_one_incompatible_area) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("32631"), // UTM 31 authFactory->createCoordinateReferenceSystem( "2171"), // Pulkovo 42 Poland I ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "Inverse of UTM zone 31N + Inverse of Pulkovo 1942(58) to WGS 84 " "(1) + Poland zone I"); ASSERT_EQ(list[0]->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(list[0]->coordinateOperationAccuracies()[0]->value(), "1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_context_incompatible_areas) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("32631"), // UTM 31 authFactory->createCoordinateReferenceSystem("32633"), // UTM 33 ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of UTM zone 31N + UTM zone 33N"); ASSERT_EQ(list[0]->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(list[0]->coordinateOperationAccuracies()[0]->value(), "0"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_context_incompatible_areas_ballpark) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("26711"), // UTM 11 NAD27 authFactory->createCoordinateReferenceSystem( "3034"), // ETRS89 / LCC Europe ctxt); ASSERT_GE(list.size(), 1U); EXPECT_TRUE(list[0]->hasBallparkTransformation()); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_context_grid_offsets) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); { auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "3392"), // Karbala 1979 / UTM zone 38N authFactory->createCoordinateReferenceSystem( "3891"), // IGRS / UTM zone 38N ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[1]->nameStr(), "Karbala 1979 / UTM zone 38N to IGRS / UTM zone 38N (1)"); EXPECT_EQ( list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +xoff=-287.54 +yoff=278.25"); } { auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "3891"), // IGRS / UTM zone 38N authFactory->createCoordinateReferenceSystem( "3392"), // Karbala 1979 / UTM zone 38N ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[1]->nameStr(), "Inverse of Karbala 1979 / UTM zone 38N " "to IGRS / UTM zone 38N (1)"); EXPECT_EQ( list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +xoff=287.54 +yoff=-278.25"); } } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_context_grid_offsets_non_metre_unit_noop) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "10516"), // NAD83(2011) / Adjusted Jackson (ftUS) authFactory->createCoordinateReferenceSystem( "8162"), // NAD83(HARN) / WISCRS Jackson (ftUS) ctxt); ASSERT_GE(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "NAD83(2011) / Adjusted Jackson (ftUS) to " "NAD83(HARN) / WISCRS Jackson (ftUS) (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST( operation, projCRS_to_projCRS_context_incompatible_areas_crs_extent_use_intersection) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSourceAndTargetCRSExtentUse( CoordinateOperationContext::SourceTargetCRSExtentUse::INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("26711"), // UTM 11 NAD27 authFactory->createCoordinateReferenceSystem( "3034"), // ETRS89 / LCC Europe ctxt); ASSERT_GE(list.size(), 0U); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_geogCRS_crs_extent_use_none) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("23031"), // ED50 UTM31 authFactory->createCoordinateReferenceSystem("4326"), ctxt); bool found_EPSG_15964 = false; for (const auto &op : list) { if (op->nameStr().find("ED50 to WGS 84 (42)") != std::string::npos) { found_EPSG_15964 = true; } } // not expected since doesn't intersect EPSG:23031 area of use EXPECT_FALSE(found_EPSG_15964); } { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); // Ignore source and target CRS extent ctxt->setSourceAndTargetCRSExtentUse( CoordinateOperationContext::SourceTargetCRSExtentUse::NONE); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("23031"), // ED50 UTM31 authFactory->createCoordinateReferenceSystem("4326"), ctxt); bool found_EPSG_15964 = false; for (const auto &op : list) { if (op->nameStr().find("ED50 to WGS 84 (42)") != std::string::npos) { found_EPSG_15964 = true; } } EXPECT_TRUE(found_EPSG_15964); } } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_north_pole_inverted_axis) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createCoordinateReferenceSystem("32661"), AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createCoordinateReferenceSystem("5041"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_south_pole_inverted_axis) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createCoordinateReferenceSystem("32761"), AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createCoordinateReferenceSystem("5042"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_to_projCRS_through_geog3D) { // Check that when going from projCRS to projCRS, using // geog2D-->geog3D-->geog3D-->geog2D we do not have issues with // inconsistent CRS chaining, due to how we 'hack' a bit some intermediate // steps auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("5367"), // CR05 / CRTM05 authFactory->createCoordinateReferenceSystem( "8908"), // CR-SIRGAS / CRTM05 ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +inv +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 " "+x_0=500000 +y_0=0 +ellps=WGS84 " "+step +proj=push +v_3 " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=-0.16959 +y=0.35312 +z=0.51846 " "+rx=-0.03385 +ry=0.16325 +rz=-0.03446 +s=0.03693 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_3 " "+step +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 " "+y_0=0 +ellps=GRS80"); } // --------------------------------------------------------------------------- TEST(operation, transform_from_amersfoort_rd_new_to_epsg_4326) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("28992"), authFactory->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 2U); // The order matters: "Amersfoort to WGS 84 (4)" replaces "Amersfoort to WGS // 84 (3)" EXPECT_EQ(list[0]->nameStr(), "Inverse of RD New + Amersfoort to WGS 84 (4)"); EXPECT_EQ(list[1]->nameStr(), "Inverse of RD New + Amersfoort to WGS 84 (3)"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_geogCRS_to_geogCRS) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto op = CoordinateOperationFactory::create()->createOperation( boundCRS, GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv " "+proj=longlat +ellps=clrk80ign +pm=paris +step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign +step +proj=helmert +x=1 +y=2 " "+z=3 +rx=4 +ry=5 +rz=6 +s=7 +convention=position_vector +step " "+inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_geogCRS_to_geodCRS) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto op = CoordinateOperationFactory::create()->createOperation( boundCRS, GeodeticCRS::EPSG_4978); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step " "+proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=grad +xy_out=rad " "+step +inv +proj=longlat +ellps=clrk80ign +pm=paris " "+step +proj=cart +ellps=clrk80ign " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 " "+convention=position_vector"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_geogCRS_to_geodCRS_not_related_to_hub) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( boundCRS, // ETRS89 geocentric authFactory->createCoordinateReferenceSystem("4936"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step " "+proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=grad +xy_out=rad " "+step +inv +proj=longlat +ellps=clrk80ign +pm=paris " "+step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 " "+convention=position_vector " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_3 " "+step +proj=cart +ellps=GRS80"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_geogCRS_to_geogCRS_with_area) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4267, std::vector{1, 2, 3, 4, 5, 6, 7}); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto op = CoordinateOperationFactory::create()->createOperation( boundCRS, authFactory->createCoordinateReferenceSystem("4326")); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=clrk66 +step +proj=helmert +x=1 +y=2 " "+z=3 +rx=4 +ry=5 +rz=6 +s=7 +convention=position_vector +step " "+inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_geogCRS_to_unrelated_geogCRS) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto op = CoordinateOperationFactory::create()->createOperation( boundCRS, GeographicCRS::EPSG_4269); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), CoordinateOperationFactory::create() ->createOperation(GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4269) ->exportToPROJString(PROJStringFormatter::create().get())); } // --------------------------------------------------------------------------- TEST(operation, createOperation_boundCRS_identified_by_datum) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=utm +zone=32 +a=6378249.2 +b=6356515 " "+towgs84=-263.0,6.0,431.0 +no_defs +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 +step +proj=cart +ellps=WGS84 +step " "+proj=helmert +x=263 +y=-6 +z=-431 +step +inv +proj=cart " "+ellps=clrk80ign +step +proj=pop +v_3 +step +proj=utm +zone=32 " "+ellps=clrk80ign"); auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); const auto queryCounterBefore = dbContext->getQueryCounter(); auto list = CoordinateOperationFactory::create()->createOperations( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest), ctxt); EXPECT_EQ(dbContext->getQueryCounter(), queryCounterBefore); ASSERT_EQ(list.size(), 1U); EXPECT_TRUE(list[0]->isEquivalentTo(op.get())); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_clrk_66_geogCRS_to_nad83_geogCRS) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=latlong +ellps=clrk66 +nadgrids=ntv1_can.dat,conus +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=latlong +datum=NAD83 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=ntv1_can.dat,conus " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); const auto queryCounterBefore = dbContext->getQueryCounter(); auto list = CoordinateOperationFactory::create()->createOperations( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest), ctxt); // Two extra queries related to the conus grid EXPECT_EQ(dbContext->getQueryCounter(), queryCounterBefore + 2); ASSERT_EQ(list.size(), 1U); EXPECT_TRUE(list[0]->isEquivalentTo(op.get())); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_clrk_66_projCRS_to_nad83_geogCRS) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=17 +ellps=clrk66 +nadgrids=ntv1_can.dat,conus " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=latlong +datum=NAD83 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=17 +ellps=clrk66 " "+step +proj=hgridshift +grids=ntv1_can.dat,conus " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_projCRS_to_geogCRS) { auto utm31 = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4807, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto boundCRS = BoundCRS::createFromTOWGS84( utm31, std::vector{1, 2, 3, 4, 5, 6, 7}); auto op = CoordinateOperationFactory::create()->createOperation( boundCRS, GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=31 +ellps=clrk80ign " "+pm=paris +step +proj=push +v_3 +step +proj=cart " "+ellps=clrk80ign +step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 " "+rz=6 +s=7 +convention=position_vector +step +inv +proj=cart " "+ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_geogCRS_to_projCRS) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto utm31 = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto op = CoordinateOperationFactory::create()->createOperation(boundCRS, utm31); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv " "+proj=longlat +ellps=clrk80ign +pm=paris +step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign +step +proj=helmert +x=1 +y=2 " "+z=3 +rx=4 +ry=5 +rz=6 +s=7 +convention=position_vector +step " "+inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step " "+proj=utm +zone=31 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_geogCRS_to_unrelated_geogCRS_context) { auto src = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // ETRS89 auto dst = authFactory->createCoordinateReferenceSystem("4258"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_EQ(list.size(), 1U); // Check with it is a concatenated operation, since it doesn't particularly // show up in the PROJ string EXPECT_TRUE(dynamic_cast(list[0].get()) != nullptr); EXPECT_EQ(list[0]->nameStr(), "Transformation from NTF (Paris) to WGS84 + " "Inverse of ETRS89 to WGS 84 (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=grad +xy_out=rad " "+step +inv +proj=longlat +ellps=clrk80ign +pm=paris " "+step +proj=push +v_3 +step +proj=cart +ellps=clrk80ign " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 " "+convention=position_vector " "+step +inv +proj=cart +ellps=GRS80 +step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_boundCRS_of_geogCRS) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, boundCRS); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 " "+step +proj=cart +ellps=WGS84 +step +inv +proj=helmert +x=1 " "+y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 +convention=position_vector " "+step +inv +proj=cart +ellps=clrk80ign +step +proj=pop +v_3 " "+step +proj=longlat +ellps=clrk80ign +pm=paris +step " "+proj=unitconvert +xy_in=rad +xy_out=grad +step +proj=axisswap " "+order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_to_geogCRS_same_datum_context) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4269, std::vector{1, 2, 3, 4, 5, 6, 7}); auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( boundCRS, GeographicCRS::EPSG_4269, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_to_geogCRS_hubCRS_and_targetCRS_same_but_baseCRS_not) { const char *wkt = "COMPD_CS[\"NAD83 + Ellipsoid (US Feet)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"Ellipsoid (US Feet)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Up\",UP]]]"; auto dbContext = DatabaseContext::create(); auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(boundCRS), GeographicCRS::EPSG_4979, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=deg +z_out=m"); } // --------------------------------------------------------------------------- TEST( operation, boundCRS_to_derived_geog_with_transformation_with_source_crs_being_base_crs_of_source_crs) { auto json = "{\n" " \"$schema\": \"foo\",\n" " \"type\": \"BoundCRS\",\n" " \"source_crs\": {\n" " \"type\": \"DerivedGeographicCRS\",\n" " \"name\": \"CH1903+ with height offset\",\n" " \"base_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"CH1903+\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"CH1903+\",\n" " \"ellipsoid\": {\n" " \"name\": \"Bessel 1841\",\n" " \"semi_major_axis\": 6377397.155,\n" " \"inverse_flattening\": 299.1528128\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"Ellipsoidal to gravity related height\",\n" " \"method\": {\n" " \"name\": \"Geographic3D offsets\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9660\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude offset\",\n" " \"value\": 0,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8601\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude offset\",\n" " \"value\": 0,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8602\n" " }\n" " },\n" " {\n" " \"name\": \"Vertical Offset\",\n" " \"value\": 10,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8603\n" " }\n" " }\n" " ]\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"target_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"WGS 84\",\n" " \"datum_ensemble\": {\n" " \"name\": \"World Geodetic System 1984 ensemble\",\n" " \"members\": [\n" " {\n" " \"name\": \"World Geodetic System 1984 (Transit)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1166\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G730)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1152\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G873)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1153\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1150)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1154\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1674)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1155\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G1762)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1156\n" " }\n" " },\n" " {\n" " \"name\": \"World Geodetic System 1984 (G2139)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1309\n" " }\n" " }\n" " ],\n" " \"ellipsoid\": {\n" " \"name\": \"WGS 84\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257223563\n" " },\n" " \"accuracy\": \"2.0\"\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 4979\n" " }\n" " },\n" " \"transformation\": {\n" " \"name\": \"CH1903+ to WGS 84 (1)\",\n" " \"source_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"CH1903+\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"CH1903+\",\n" " \"ellipsoid\": {\n" " \"name\": \"Bessel 1841\",\n" " \"semi_major_axis\": 6377397.155,\n" " \"inverse_flattening\": 299.1528128\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Latitude\",\n" " \"abbreviation\": \"lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Longitude\",\n" " \"abbreviation\": \"lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " }\n" " },\n" " \"method\": {\n" " \"name\": \"Geocentric translations (geog2D domain)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9603\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"X-axis translation\",\n" " \"value\": 674.374,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8605\n" " }\n" " },\n" " {\n" " \"name\": \"Y-axis translation\",\n" " \"value\": 15.056,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8606\n" " }\n" " },\n" " {\n" " \"name\": \"Z-axis translation\",\n" " \"value\": 405.346,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8607\n" " }\n" " }\n" " ],\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1676\n" " }\n" " }\n" "}"; auto obj = createFromUserInput(json, nullptr); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(boundCRS), GeographicCRS::EPSG_4979, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +inv +proj=geogoffset +dlat=0 +dlon=0 +dh=10 " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=674.374 +y=15.056 +z=405.346 " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_to_boundCRS) { auto utm31 = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4807, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto utm32 = ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4269, Conversion::createUTM(PropertyMap(), 32, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)); auto boundCRS1 = BoundCRS::createFromTOWGS84( utm31, std::vector{1, 2, 3, 4, 5, 6, 7}); auto boundCRS2 = BoundCRS::createFromTOWGS84( utm32, std::vector{8, 9, 10, 11, 12, 13, 14}); auto op = CoordinateOperationFactory::create()->createOperation(boundCRS1, boundCRS2); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=31 +ellps=clrk80ign " "+pm=paris +step +proj=push +v_3 +step +proj=cart " "+ellps=clrk80ign +step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 " "+rz=6 +s=7 +convention=position_vector +step +inv +proj=helmert " "+x=8 +y=9 +z=10 +rx=11 +ry=12 +rz=13 +s=14 " "+convention=position_vector +step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_3 +step +proj=utm +zone=32 +ellps=GRS80"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_to_boundCRS_noop_for_TOWGS84) { auto boundCRS1 = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto boundCRS2 = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4269, std::vector{1, 2, 3, 4, 5, 6, 7}); auto op = CoordinateOperationFactory::create()->createOperation(boundCRS1, boundCRS2); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step +inv " "+proj=longlat +ellps=clrk80ign +pm=paris +step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign +step +inv +proj=cart " "+ellps=GRS80 +step +proj=pop +v_3 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_to_boundCRS_unralated_hub) { auto boundCRS1 = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto boundCRS2 = BoundCRS::create( GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4979, Transformation::createGeocentricTranslations( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4979, 1.0, 2.0, 3.0, std::vector())); auto op = CoordinateOperationFactory::create()->createOperation(boundCRS1, boundCRS2); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), CoordinateOperationFactory::create() ->createOperation(boundCRS1->baseCRS(), boundCRS2->baseCRS()) ->exportToPROJString(PROJStringFormatter::create().get())); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_projCRS_towgs84_to_boundCRS_of_projCRS_nadgrids) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=15 +datum=NAD83 +units=m +no_defs +ellps=GRS80 " "+towgs84=0,0,0 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs +ellps=clrk66 " "+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=15 +ellps=GRS80 +step " "+inv +proj=hgridshift " "+grids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat +step +proj=utm " "+zone=15 +ellps=clrk66"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_of_projCRS_towgs84_non_metre_unit_to_geocentric) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=merc +ellps=GRS80 +towgs84=0,0,0 +units=ft +vunits=ft " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=geocent +datum=WGS84 +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=ft +z_in=ft +xy_out=m +z_out=m " "+step +inv +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 " "+step +proj=cart +ellps=WGS84"); } // --------------------------------------------------------------------------- static CRSNNPtr buildCRSFromProjStrThroughWKT(const std::string &projStr) { auto crsFromProj = nn_dynamic_pointer_cast( PROJStringParser().createFromPROJString(projStr)); if (crsFromProj == nullptr) { throw "crsFromProj == nullptr"; } auto crsFromWkt = nn_dynamic_pointer_cast( WKTParser().createFromWKT(crsFromProj->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()))); if (crsFromWkt == nullptr) { throw "crsFromWkt == nullptr"; } return NN_NO_CHECK(crsFromWkt); } TEST(operation, boundCRS_to_boundCRS_with_base_geog_crs_different_from_source_of_transf) { auto src = buildCRSFromProjStrThroughWKT( "+proj=lcc +lat_1=49 +lat_0=49 +lon_0=0 +k_0=0.999877499 +x_0=600000 " "+y_0=200000 +ellps=clrk80ign +pm=paris +towgs84=-168,-60,320,0,0,0,0 " "+units=m +no_defs +type=crs"); auto dst = buildCRSFromProjStrThroughWKT( "+proj=longlat +ellps=clrk80ign +pm=paris " "+towgs84=-168,-60,320,0,0,0,0 +no_defs +type=crs"); auto op = CoordinateOperationFactory::create()->createOperation(src, dst); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=lcc +lat_1=49 +lat_0=49 +lon_0=0 " "+k_0=0.999877499 +x_0=600000 +y_0=200000 +ellps=clrk80ign " "+pm=paris " "+step +proj=longlat +ellps=clrk80ign +pm=paris " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_with_basecrs_with_extent_to_geogCRS) { auto wkt = "BOUNDCRS[\n" " SOURCECRS[\n" " PROJCRS[\"NAD83 / California zone 3 (ftUS)\",\n" " BASEGEODCRS[\"NAD83\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"SPCS83 California zone 3 (US Survey " "feet)\",\n" " METHOD[\"Lambert Conic Conformal (2SP)\",\n" " ID[\"EPSG\",9802]],\n" " PARAMETER[\"Latitude of false origin\",36.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",-120.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard parallel\"," " 38.4333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard parallel\"," " 37.0666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",6561666.667,\n" " LENGTHUNIT[\"US survey foot\"," " 0.304800609601219],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",1640416.667,\n" " LENGTHUNIT[\"US survey foot\"," " 0.304800609601219],\n" " ID[\"EPSG\",8827]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"US survey foot\"," " 0.304800609601219]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"US survey foot\"," " 0.304800609601219]],\n" " SCOPE[\"unknown\"],\n" " AREA[\"USA - California - SPCS - 3\"],\n" " BBOX[36.73,-123.02,38.71,-117.83],\n" " ID[\"EPSG\",2227]]],\n" " TARGETCRS[\n" " GEODCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]],\n" " ABRIDGEDTRANSFORMATION[\"NAD83 to WGS 84 (1)\",\n" " METHOD[\"Geocentric translations (geog2D domain)\",\n" " ID[\"EPSG\",9603]],\n" " PARAMETER[\"X-axis translation\",0,\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",0,\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",0,\n" " ID[\"EPSG\",8607]],\n" " SCOPE[\"unknown\"],\n" " AREA[\"North America - Canada and USA (CONUS, Alaska " "mainland)\"],\n" " BBOX[23.81,-172.54,86.46,-47.74],\n" " ID[\"EPSG\",1188]]]"; auto obj = WKTParser().createFromWKT(wkt); auto boundCRS = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(boundCRS != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(boundCRS), GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->nameStr(), "Inverse of SPCS83 California zone 3 (US Survey " "feet) + NAD83 to WGS 84 (1)"); } // --------------------------------------------------------------------------- TEST(operation, ETRS89_3D_to_proj_string_with_geoidgrids_nadgrids) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // ETRS89 3D auto src = authFactory->createCoordinateReferenceSystem("4937"); auto objDst = PROJStringParser().createFromPROJString( "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 " "+k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel " "+nadgrids=rdtrans2008.gsb +geoidgrids=naptrans2008.gtx " "+geoid_crs=horizontal_crs +units=m " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( src, NN_NO_CHECK(dst), ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +inv +proj=hgridshift +grids=rdtrans2008.gsb " "+step +inv +proj=vgridshift +grids=naptrans2008.gtx " "+multiplier=1 " "+step +proj=sterea +lat_0=52.1561605555556 " "+lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 " "+y_0=463000 +ellps=bessel"); } // --------------------------------------------------------------------------- TEST(operation, nadgrids_with_pm) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto objSrc = PROJStringParser().createFromPROJString( "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 " "+y_0=300000 +ellps=intl +nadgrids=foo.gsb +pm=lisbon " "+units=m +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem("4326"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=39.6666666666667 +lon_0=1 " "+k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon " // Check that there is no extra +step +proj=longlat +pm=lisbon "+step +proj=hgridshift +grids=foo.gsb " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); // ETRS89 dst = authFactory->createCoordinateReferenceSystem("4258"); list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=39.6666666666667 +lon_0=1 " "+k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon " // Check that there is no extra +step +proj=longlat +pm=lisbon "+step +proj=hgridshift +grids=foo.gsb " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); // From WKT BOUNDCRS auto formatter = WKTFormatter::create(WKTFormatter::Convention::WKT2_2019); auto src_wkt = src->exportToWKT(formatter.get()); auto objFromWkt = WKTParser().createFromWKT(src_wkt); auto crsFromWkt = nn_dynamic_pointer_cast(objFromWkt); ASSERT_TRUE(crsFromWkt); list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(crsFromWkt), dst, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=39.6666666666667 +lon_0=1 " "+k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon " // Check that there is no extra +step +proj=longlat +pm=lisbon "+step +proj=hgridshift +grids=foo.gsb " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, towgs84_pm_3d) { // Test fix for https://github.com/OSGeo/gdal/issues/5408 auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto objSrc = PROJStringParser().createFromPROJString( "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 " "+ellps=bessel +pm=ferro " "+towgs84=1,2,3,4,5,6,7 " "+units=m +no_defs +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto src3D = src->promoteTo3D(std::string(), dbContext); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto dst3D = dst->promoteTo3D(std::string(), dbContext); // Import thing to check is that there's no push/pop v_3 const std::string expected_pipeline = "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 " "+ellps=bessel +pm=ferro " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 " "+ry=5 +rz=6 +s=7 +convention=position_vector " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m"; auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); { auto list = CoordinateOperationFactory::create()->createOperations( src3D, dst3D, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), expected_pipeline); } // Retry when creating objects from WKT { auto objSrcFromWkt = WKTParser().createFromWKT(src3D->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get())); auto srcFromWkt = nn_dynamic_pointer_cast(objSrcFromWkt); ASSERT_TRUE(srcFromWkt != nullptr); auto objDstFromWkt = WKTParser().createFromWKT(dst3D->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get())); auto dstFromWkt = nn_dynamic_pointer_cast(objDstFromWkt); ASSERT_TRUE(dstFromWkt != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcFromWkt), NN_NO_CHECK(dstFromWkt), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), expected_pipeline); } } // --------------------------------------------------------------------------- TEST(operation, WGS84_G1762_to_compoundCRS_with_bound_vertCRS) { auto authFactoryEPSG = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // WGS 84 (G1762) 3D auto src = authFactoryEPSG->createCoordinateReferenceSystem("7665"); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=NAD83 +geoidgrids=@foo.gtx +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( src, NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 53U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- static VerticalCRSNNPtr createVerticalCRS() { PropertyMap propertiesVDatum; propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5101) .set(IdentifiedObject::NAME_KEY, "Ordnance Datum Newlyn"); auto vdatum = VerticalReferenceFrame::create(propertiesVDatum); PropertyMap propertiesCRS; propertiesCRS.set(Identifier::CODESPACE_KEY, "EPSG") .set(Identifier::CODE_KEY, 5701) .set(IdentifiedObject::NAME_KEY, "ODN height"); return VerticalCRS::create( propertiesCRS, vdatum, VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS) { auto compound = CompoundCRS::create( PropertyMap(), std::vector{GeographicCRS::EPSG_4326, createVerticalCRS()}); auto op = CoordinateOperationFactory::create()->createOperation( compound, GeographicCRS::EPSG_4807); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), CoordinateOperationFactory::create() ->createOperation(GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4807) ->exportToPROJString(PROJStringFormatter::create().get())); } // --------------------------------------------------------------------------- static BoundCRSNNPtr createBoundVerticalCRS() { auto vertCRS = createVerticalCRS(); auto transformation = Transformation::createGravityRelatedHeightToGeographic3D( PropertyMap(), vertCRS, GeographicCRS::EPSG_4979, nullptr, "us_nga_egm08_25.tif", std::vector()); return BoundCRS::create(vertCRS, GeographicCRS::EPSG_4979, transformation); } // --------------------------------------------------------------------------- TEST(operation, transformation_height_to_PROJ_string) { auto transf = createBoundVerticalCRS()->transformation(); EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm08_25.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); auto grids = transf->gridsNeeded(DatabaseContext::create(), false); ASSERT_EQ(grids.size(), 1U); auto gridDesc = *(grids.begin()); EXPECT_EQ(gridDesc.shortName, "us_nga_egm08_25.tif"); EXPECT_TRUE(gridDesc.packageName.empty()); EXPECT_EQ(gridDesc.url, "https://cdn.proj.org/us_nga_egm08_25.tif"); if (gridDesc.available) { EXPECT_TRUE(!gridDesc.fullName.empty()) << gridDesc.fullName; EXPECT_TRUE(gridDesc.fullName.find(gridDesc.shortName) != std::string::npos) << gridDesc.fullName; } else { EXPECT_TRUE(gridDesc.fullName.empty()) << gridDesc.fullName; } EXPECT_EQ(gridDesc.directDownload, true); EXPECT_EQ(gridDesc.openLicense, true); } // --------------------------------------------------------------------------- TEST(operation, transformation_Geographic3D_to_GravityRelatedHeight_gtx) { auto wkt = "COORDINATEOPERATION[\"ETRS89 to NAP height (1)\",\n" " VERSION[\"RDNAP-Nld 2008\"],\n" " SOURCECRS[\n" " GEOGCRS[\"ETRS89\",\n" " DATUM[\"European Terrestrial Reference System 1989\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4937]]],\n" " TARGETCRS[\n" " VERTCRS[\"NAP height\",\n" " VDATUM[\"Normaal Amsterdams Peil\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5709]]],\n" " METHOD[\"Geographic3D to GravityRelatedHeight (US .gtx)\",\n" " ID[\"EPSG\",9665]],\n" " PARAMETERFILE[\"Geoid (height correction) model " "file\",\"naptrans2008.gtx\"],\n" " OPERATIONACCURACY[0.01],\n" " USAGE[\n" " SCOPE[\"unknown\"],\n" " AREA[\"Netherlands - onshore\"],\n" " BBOX[50.75,3.2,53.7,7.22]],\n" " ID[\"EPSG\",7001]]"; auto obj = WKTParser().createFromWKT(wkt); auto transf = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(transf != nullptr); // Check that we correctly inverse files in the case of // "Geographic3D to GravityRelatedHeight (US .gtx)" EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift " "+grids=naptrans2008.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_ntv2_to_PROJ_string) { auto transformation = Transformation::createNTv2( PropertyMap(), GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326, "foo.gsb", std::vector()); EXPECT_EQ( transformation->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=grad +xy_out=rad +step " "+proj=hgridshift +grids=foo.gsb +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_VERTCON_to_PROJ_string) { auto verticalCRS1 = createVerticalCRS(); auto verticalCRS2 = VerticalCRS::create( PropertyMap(), VerticalReferenceFrame::create(PropertyMap()), VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); // Use of this type of transformation is a bit of nonsense here // since it should normally be used with NGVD29 and NAVD88 for VerticalCRS, // and NAD27/NAD83 as horizontal CRS... auto vtransformation = Transformation::createVERTCON( PropertyMap(), verticalCRS1, verticalCRS2, "bla.gtx", std::vector()); EXPECT_EQ(vtransformation->exportToPROJString( PROJStringFormatter::create().get()), "+proj=vgridshift +grids=bla.gtx +multiplier=0.001"); } // --------------------------------------------------------------------------- TEST(operation, transformation_NZLVD_to_PROJ_string) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto op = factory->createCoordinateOperation("7860", false); EXPECT_EQ(op->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, dbContext) .get()), "+proj=vgridshift +grids=nz_linz_auckht1946-nzvd2016.tif " "+multiplier=1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_BEV_AT_to_PROJ_string) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); auto op = factory->createCoordinateOperation("9275", false); EXPECT_EQ(op->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, dbContext) .get()), "+proj=vgridshift +grids=at_bev_GV_Hoehengrid_V1.tif " "+multiplier=1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_longitude_rotation_to_PROJ_string) { auto src = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::create(PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto dest = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::create(PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::PARIS), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto transformation = Transformation::createLongitudeRotation( PropertyMap(), src, dest, Angle(10)); EXPECT_TRUE(transformation->validateParameters().empty()); EXPECT_EQ( transformation->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +inv " "+proj=longlat +ellps=WGS84 +pm=10 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_EQ(transformation->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +inv " "+proj=longlat +ellps=WGS84 +pm=-10 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_Geographic2D_offsets_to_PROJ_string) { auto transformation = Transformation::createGeographic2DOffsets( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4326, Angle(0.5), Angle(-1), {}); EXPECT_TRUE(transformation->validateParameters().empty()); EXPECT_EQ( transformation->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=geogoffset " "+dlat=1800 +dlon=-3600 +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_EQ(transformation->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=geogoffset " "+dlat=-1800 +dlon=3600 +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_Geographic3D_offsets_to_PROJ_string) { auto transformation = Transformation::createGeographic3DOffsets( PropertyMap(), GeographicCRS::EPSG_4326, GeographicCRS::EPSG_4326, Angle(0.5), Angle(-1), Length(2), {}); EXPECT_TRUE(transformation->validateParameters().empty()); EXPECT_EQ( transformation->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=geogoffset " "+dlat=1800 +dlon=-3600 +dh=2 +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_EQ(transformation->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=geogoffset " "+dlat=-1800 +dlon=3600 +dh=-2 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_Geographic2D_with_height_offsets_to_PROJ_string) { auto transformation = Transformation::createGeographic2DWithHeightOffsets( PropertyMap(), CompoundCRS::create(PropertyMap(), {GeographicCRS::EPSG_4326, createVerticalCRS()}), GeographicCRS::EPSG_4326, Angle(0.5), Angle(-1), Length(2), {}); EXPECT_TRUE(transformation->validateParameters().empty()); EXPECT_EQ( transformation->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=geogoffset " "+dlat=1800 +dlon=-3600 +dh=2 +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_EQ(transformation->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=geogoffset " "+dlat=-1800 +dlon=3600 +dh=-2 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, transformation_vertical_offset_to_PROJ_string) { auto transformation = Transformation::createVerticalOffset( PropertyMap(), createVerticalCRS(), createVerticalCRS(), Length(1), {}); EXPECT_TRUE(transformation->validateParameters().empty()); EXPECT_EQ( transformation->exportToPROJString(PROJStringFormatter::create().get()), "+proj=geogoffset +dh=1"); EXPECT_EQ(transformation->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=geogoffset +dh=-1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundVerticalCRS_to_geogCRS) { auto compound = CompoundCRS::create( PropertyMap(), std::vector{GeographicCRS::EPSG_4326, createBoundVerticalCRS()}); auto op = CoordinateOperationFactory::create()->createOperation( compound, GeographicCRS::EPSG_4979); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift " "+grids=us_nga_egm08_25.tif +multiplier=1 +step +proj=unitconvert " "+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundGeogCRS_to_geogCRS) { auto geogCRS = GeographicCRS::create( PropertyMap(), GeodeticReferenceFrame::create(PropertyMap(), Ellipsoid::WGS84, optional(), PrimeMeridian::GREENWICH), EllipsoidalCS::createLatitudeLongitude(UnitOfMeasure::DEGREE)); auto horizBoundCRS = BoundCRS::createFromTOWGS84( geogCRS, std::vector{1, 2, 3, 4, 5, 6, 7}); auto compound = CompoundCRS::create( PropertyMap(), std::vector{horizBoundCRS, createVerticalCRS()}); auto op = CoordinateOperationFactory::create()->createOperation( compound, GeographicCRS::EPSG_4979); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 " "+convention=position_vector " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundGeogCRS_and_boundVerticalCRS_to_geogCRS) { auto horizBoundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4807, std::vector{1, 2, 3, 4, 5, 6, 7}); auto compound = CompoundCRS::create( PropertyMap(), std::vector{horizBoundCRS, createBoundVerticalCRS()}); auto op = CoordinateOperationFactory::create()->createOperation( compound, GeographicCRS::EPSG_4979); ASSERT_TRUE(op != nullptr); // Not completely sure the order of horizontal and vertical operations // makes sense EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=grad +xy_out=rad " "+step +inv +proj=longlat +ellps=clrk80ign +pm=paris " "+step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 " "+convention=position_vector " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); auto grids = op->gridsNeeded(DatabaseContext::create(), false); EXPECT_EQ(grids.size(), 1U); auto opInverse = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4979, compound); ASSERT_TRUE(opInverse != nullptr); EXPECT_TRUE(opInverse->inverse()->isEquivalentTo(op.get())); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundProjCRS_and_boundVerticalCRS_to_geogCRS) { auto horizBoundCRS = BoundCRS::createFromTOWGS84( ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4807, Conversion::createUTM(PropertyMap(), 31, true), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)), std::vector{1, 2, 3, 4, 5, 6, 7}); auto compound = CompoundCRS::create( PropertyMap(), std::vector{horizBoundCRS, createBoundVerticalCRS()}); auto op = CoordinateOperationFactory::create()->createOperation( compound, GeographicCRS::EPSG_4979); ASSERT_TRUE(op != nullptr); // Not completely sure the order of horizontal and vertical operations // makes sense EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=31 +ellps=clrk80ign +pm=paris " "+step +proj=push +v_3 " "+step +proj=cart +ellps=clrk80ign " "+step +proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 +s=7 " "+convention=position_vector " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=vgridshift +grids=us_nga_egm08_25.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); auto opInverse = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4979, compound); ASSERT_TRUE(opInverse != nullptr); EXPECT_TRUE(opInverse->inverse()->isEquivalentTo(op.get())); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundVerticalCRS_from_geoidgrids_with_m_to_geogCRS) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +geoidgrids=@foo.gtx +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_NO_CHECK(src), GeographicCRS::EPSG_4979); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundVerticalCRS_from_geoidgrids_with_ftus_to_geogCRS) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +geoidgrids=@foo.gtx +vunits=us-ft " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_NO_CHECK(src), GeographicCRS::EPSG_4979); ASSERT_TRUE(op != nullptr); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=rad +z_out=m " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundProjCRS_with_ftus_and_boundVerticalCRS_to_geogCRS) { auto wkt = "COMPD_CS[\"NAD_1983_StatePlane_Alabama_West_FIPS_0102_Feet + " "NAVD88 height - Geoid12B (US Feet)\",\n" " PROJCS[\"NAD_1983_StatePlane_Alabama_West_FIPS_0102_Feet\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"Degree\",0.0174532925199433]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",30],\n" " PARAMETER[\"central_meridian\",-87.5],\n" " PARAMETER[\"scale_factor\",0.999933333333333],\n" " PARAMETER[\"false_easting\",1968500],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"ESRI\",\"102630\"]],\n" " VERT_CS[\"NAVD88 height (ftUS)\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"foo.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"6360\"]]]"; auto obj = WKTParser().createFromWKT(wkt); auto crs = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(crs != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_NO_CHECK(crs), GeographicCRS::EPSG_4979); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=us-ft +xy_out=m " "+step +inv +proj=tmerc +lat_0=30 +lon_0=-87.5 " "+k=0.999933333333333 +x_0=600000 +y_0=0 +ellps=GRS80 " "+step +proj=unitconvert +z_in=us-ft +z_out=m " "+step +proj=vgridshift +grids=foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundVerticalCRS_from_grids_to_geogCRS_with_ftus_ctxt) { auto dbContext = DatabaseContext::create(); const char *wktSrc = "COMPD_CS[\"NAD83 + NAVD88 height - Geoid12B (Meters)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"NAVD88 height - Geoid12B (Meters)\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"@foo.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"metre\",1.0,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5703\"]]]"; auto objSrc = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktSrc); auto srcCRS = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCRS != nullptr); const char *wktDst = "COMPD_CS[\"NAD83 + Ellipsoid (US Feet)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"Ellipsoid (US Feet)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Up\",UP]]]"; auto objDst = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktDst); auto dstCRS = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dstCRS != nullptr); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), NN_NO_CHECK(dstCRS), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=us-ft " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_with_boundGeogCRS_boundVerticalCRS_from_grids_to_boundGeogCRS_with_ftus_ctxt) { // Variant of above but with TOWGS84 in source & target CRS auto dbContext = DatabaseContext::create(); const char *wktSrc = "COMPD_CS[\"NAD83 + NAVD88 height - Geoid12B (Meters)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"NAVD88 height - Geoid12B (Meters)\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"@foo.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"metre\",1.0,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5703\"]]]"; auto objSrc = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktSrc); auto srcCRS = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCRS != nullptr); const char *wktDst = "COMPD_CS[\"NAD83 + Ellipsoid (US Feet)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"Ellipsoid (US Feet)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Up\",UP]]]"; auto objDst = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktDst); auto dstCRS = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dstCRS != nullptr); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), NN_NO_CHECK(dstCRS), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=us-ft " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_with_boundVerticalCRS_from_grids_to_boundGeogCRS_with_ftus_ctxt) { // Variant of above but with TOWGS84 in target CRS only auto dbContext = DatabaseContext::create(); const char *wktSrc = "COMPD_CS[\"NAD83 + NAVD88 height - Geoid12B (Meters)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"NAVD88 height - Geoid12B (Meters)\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"@foo.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"metre\",1.0,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5703\"]]]"; auto objSrc = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktSrc); auto srcCRS = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCRS != nullptr); const char *wktDst = "COMPD_CS[\"NAD83 + Ellipsoid (US Feet)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"Ellipsoid (US Feet)\",\n" " VERT_DATUM[\"Ellipsoid\",2002],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Up\",UP]]]"; auto objDst = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktDst); auto dstCRS = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dstCRS != nullptr); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), NN_NO_CHECK(dstCRS), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=us-ft " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_bound_of_projected_and_bound_of_vertical_to_geog3D) { auto dbContext = DatabaseContext::create(); const char *wktSrc = "COMPD_CS[\"TempTM + CGVD28 height - HT2_0\",\n" " PROJCS[\"Custom\",\n" " GEOGCS[\"NAD83(CSRS)\",\n" " DATUM[\"NAD83_Canadian_Spatial_Reference_System\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6140\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4617\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",49.351346659616],\n" " PARAMETER[\"central_meridian\",-123.20266499149],\n" " PARAMETER[\"scale_factor\",1],\n" " PARAMETER[\"false_easting\",15307.188],\n" " PARAMETER[\"false_northing\",6540.975],\n" " UNIT[\"Meters\",1],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH]],\n" " VERT_CS[\"CGVD28 height - HT2_0\",\n" " VERT_DATUM[\"Canadian Geodetic Vertical Datum of " "1928\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"HT2_0.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5114\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5713\"]]]"; auto objSrc = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktSrc); auto srcCRS = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCRS != nullptr); auto authFactoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); // NAD83(CSRS) 3D auto dstCRS = authFactoryEPSG->createCoordinateReferenceSystem("4955"); auto ctxt = CoordinateOperationContext::create(authFactoryEPSG, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), dstCRS, ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=49.351346659616 " "+lon_0=-123.20266499149 +k=1 " "+x_0=15307.188 +y_0=6540.975 +ellps=GRS80 " "+step +proj=vgridshift +grids=HT2_0.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_boundGeogCRS_and_geoid_to_geodCRS_NAD2011_ctxt) { auto dbContext = DatabaseContext::create(); const char *wktSrc = "COMPD_CS[\"NAD83 / California zone 5 (ftUS) + " "NAVD88 height - Geoid12B (ftUS)\"," " PROJCS[\"NAD83 / California zone 5 (ftUS)\"," " GEOGCS[\"NAD83\"," " DATUM[\"North_American_Datum_1983\"," " SPHEROID[\"GRS 1980\",6378137,298.257222101," " AUTHORITY[\"EPSG\",\"7019\"]]," " TOWGS84[0,0,0,0,0,0,0]," " AUTHORITY[\"EPSG\",\"6269\"]]," " PRIMEM[\"Greenwich\",0," " AUTHORITY[\"EPSG\",\"8901\"]]," " UNIT[\"degree\",0.0174532925199433," " AUTHORITY[\"EPSG\",\"9122\"]]," " AUTHORITY[\"EPSG\",\"4269\"]]," " PROJECTION[\"Lambert_Conformal_Conic_2SP\"]," " PARAMETER[\"standard_parallel_1\",35.46666666666667]," " PARAMETER[\"standard_parallel_2\",34.03333333333333]," " PARAMETER[\"latitude_of_origin\",33.5]," " PARAMETER[\"central_meridian\",-118]," " PARAMETER[\"false_easting\",6561666.667]," " PARAMETER[\"false_northing\",1640416.667]," " UNIT[\"US survey foot\",0.3048006096012192," " AUTHORITY[\"EPSG\",\"9003\"]]," " AXIS[\"X\",EAST]," " AXIS[\"Y\",NORTH]," " AUTHORITY[\"EPSG\",\"2229\"]]," "VERT_CS[\"NAVD88 height - Geoid12B (ftUS)\"," " VERT_DATUM[\"North American Vertical Datum 1988\",2005," " AUTHORITY[\"EPSG\",\"5103\"]]," " UNIT[\"US survey foot\",0.3048006096012192," " AUTHORITY[\"EPSG\",\"9003\"]]," " AXIS[\"Gravity-related height\",UP]," " AUTHORITY[\"EPSG\",\"6360\"]]]"; auto objSrc = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktSrc); auto srcCRS = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCRS != nullptr); auto authFactoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); // NAD83(2011) geocentric auto dstCRS = authFactoryEPSG->createCoordinateReferenceSystem("6317"); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), dstCRS, ctxt); bool found = false; for (const auto &op : list) { if (op->nameStr() == "Inverse of unnamed + " "Transformation from NAD83 to WGS84 + " "Inverse of NAD83(2011) to WGS 84 (1) + " "Conversion from NAVD88 height (ftUS) to NAVD88 height + " "Inverse of NAD83(2011) to NAVD88 height (1) + " "Conversion from NAD83(2011) (geog3D) to NAD83(2011) " "(geocentric)") { found = true; EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=us-ft +xy_out=m " "+step +inv +proj=lcc +lat_0=33.5 +lon_0=-118 " "+lat_1=35.4666666666667 +lat_2=34.0333333333333 " "+x_0=2000000.0001016 +y_0=500000.0001016 +ellps=GRS80 " "+step +proj=unitconvert +z_in=us-ft +z_out=m " "+step +proj=vgridshift +grids=us_noaa_g2012bu0.tif " "+multiplier=1 " "+step +proj=cart +ellps=GRS80"); } } EXPECT_TRUE(found); if (!found) { for (const auto &op : list) { std::cerr << op->nameStr() << std::endl; } } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_vert_bound_to_bound_geog3D) { // Test case of https://github.com/OSGeo/PROJ/issues/3927 auto dbContext = DatabaseContext::create(); const char *wktSrc = "COMPOUNDCRS[\"ENU (-77.410692720411:39.4145340892321) + EGM96 geoid " "height\",\n" " PROJCRS[\"ENU (-77.410692720411:39.4145340892321)\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " DATUM[\"unknown\",\n" " ELLIPSOID[\"WGS84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Orthographic\",\n" " ID[\"EPSG\",9840]],\n" " PARAMETER[\"Latitude of natural " "origin\",39.4145340892321,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural " "origin\",-77.410692720411,\n" " ANGLEUNIT[\"Degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"northing\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " BOUNDCRS[\n" " SOURCECRS[\n" " VERTCRS[\"EGM96 geoid height\",\n" " VDATUM[\"EGM96 geoid\"],\n" " CS[vertical,1],\n" " AXIS[\"up\",up,\n" " LENGTHUNIT[\"m\",1]],\n" " ID[\"EPSG\",5773]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[\"EGM96 geoid height to WGS 84 " "ellipsoidal height\",\n" " METHOD[\"GravityRelatedHeight to Geographic3D\"],\n" " PARAMETERFILE[\"Geoid (height correction) model " "file\",\"egm96_15.gtx\",\n" " ID[\"EPSG\",8666]]]]]"; auto objSrc = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktSrc); auto srcCRS = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCRS != nullptr); const char *wktDst = "BOUNDCRS[\n" " SOURCECRS[\n" " GEOGCRS[\"WGS84 Coordinate System\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 1984\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " REMARK[\"Promoted to 3D from EPSG:4326\"]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"Geodesy. Navigation and positioning using GPS " "satellite system.\"],\n" " AREA[\"World.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[\"Transformation from WGS84 Coordinate " "System to WGS84\",\n" " METHOD[\"Position Vector transformation (geog2D domain)\",\n" " ID[\"EPSG\",9606]],\n" " PARAMETER[\"X-axis translation\",0,\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",0,\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",0,\n" " ID[\"EPSG\",8607]],\n" " PARAMETER[\"X-axis rotation\",0,\n" " ID[\"EPSG\",8608]],\n" " PARAMETER[\"Y-axis rotation\",0,\n" " ID[\"EPSG\",8609]],\n" " PARAMETER[\"Z-axis rotation\",0,\n" " ID[\"EPSG\",8610]],\n" " PARAMETER[\"Scale difference\",1,\n" " ID[\"EPSG\",8611]]]]"; auto objDst = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wktDst); auto dstCRS = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dstCRS != nullptr); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCRS), NN_NO_CHECK(dstCRS), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=ortho +lat_0=39.4145340892321 " "+lon_0=-77.410692720411 +x_0=0 +y_0=0 +ellps=WGS84 " "+step +proj=vgridshift +grids=egm96_15.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_derivedVerticalCRS_ellipsoidal_height_to_geog) { // Test scenario of https://github.com/OSGeo/PROJ/issues/4175 // Note that the CompoundCRS with a DerivedVerticalCRS with a "Ellipsoid" // datum is an extension, not OGC Topic 2 compliant. auto wkt = "COMPOUNDCRS[\"UTM30 with vertical offset\",\n" " PROJCRS[\"WGS 84 / UTM zone 30N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2296)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]],\n" " CONVERSION[\"UTM zone 30N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32630]],\n" " VERTCRS[\"Derived verticalCRS\",\n" " BASEVERTCRS[\"Ellipsoid (metre)\",\n" " VDATUM[\"Ellipsoid\"]],\n" " DERIVINGCONVERSION[\"Conv Vertical Offset\",\n" " METHOD[\"Vertical Offset\",\n" " ID[\"EPSG\",9616]],\n" " PARAMETER[\"Vertical Offset\",42.3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8603]]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]]"; auto objDst = WKTParser().createFromWKT(wkt); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4979, NN_NO_CHECK(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=geogoffset +dh=42.3 " "+step +proj=utm +zone=30 +ellps=WGS84"); EXPECT_STREQ(op->nameStr().c_str(), "Conv Vertical Offset + UTM zone 30N"); EXPECT_FALSE(op->hasBallparkTransformation()); ASSERT_EQ(op->coordinateOperationAccuracies().size(), 1U); EXPECT_EQ(op->coordinateOperationAccuracies()[0]->value(), "0"); } // --------------------------------------------------------------------------- TEST(operation, geocent_to_compoundCRS) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=geocent +datum=WGS84 +units=m +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=cart +ellps=WGS84 " "+step +inv +proj=hgridshift +grids=@foo.gsb " "+step +inv +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, geocent_to_compoundCRS_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // WGS84 geocentric auto src = authFactory->createCoordinateReferenceSystem("4978"); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( src, NN_CHECK_ASSERT(dst), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=cart +ellps=WGS84 " "+step +inv +proj=hgridshift +grids=@foo.gsb " "+step +inv +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS) { auto compound1 = CompoundCRS::create( PropertyMap(), std::vector{createUTM31_WGS84(), createVerticalCRS()}); auto compound2 = CompoundCRS::create( PropertyMap(), std::vector{createUTM32_WGS84(), createVerticalCRS()}); auto op = CoordinateOperationFactory::create()->createOperation(compound1, compound2); ASSERT_TRUE(op != nullptr); auto opRef = CoordinateOperationFactory::create()->createOperation( createUTM31_WGS84(), createUTM32_WGS84()); ASSERT_TRUE(opRef != nullptr); EXPECT_TRUE(op->isEquivalentTo(opRef.get())); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_with_vertical_transform) { auto verticalCRS1 = createVerticalCRS(); auto verticalCRS2 = VerticalCRS::create( PropertyMap(), VerticalReferenceFrame::create(PropertyMap()), VerticalCS::createGravityRelatedHeight(UnitOfMeasure::METRE)); // Use of this type of transformation is a bit of nonsense here // since it should normally be used with NGVD29 and NAVD88 for VerticalCRS, // and NAD27/NAD83 as horizontal CRS... auto vtransformation = Transformation::createVERTCON( PropertyMap(), verticalCRS1, verticalCRS2, "bla.gtx", std::vector()); auto compound1 = CompoundCRS::create( PropertyMap(), std::vector{ ProjectedCRS::create( PropertyMap(), GeographicCRS::EPSG_4326, Conversion::createTransverseMercator(PropertyMap(), Angle(1), Angle(2), Scale(3), Length(4), Length(5)), CartesianCS::createEastingNorthing(UnitOfMeasure::METRE)), BoundCRS::create(verticalCRS1, verticalCRS2, vtransformation)}); auto compound2 = CompoundCRS::create( PropertyMap(), std::vector{createUTM32_WGS84(), verticalCRS2}); auto op = CoordinateOperationFactory::create()->createOperation(compound1, compound2); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=tmerc +lat_0=1 +lon_0=2 +k=3 " "+x_0=4 +y_0=5 +ellps=WGS84 +step " "+proj=vgridshift +grids=bla.gtx +multiplier=0.001 +step " "+proj=utm +zone=32 " "+ellps=WGS84"); { auto formatter = PROJStringFormatter::create(); formatter->setUseApproxTMerc(true); EXPECT_EQ( op->exportToPROJString(formatter.get()), "+proj=pipeline +step +inv +proj=tmerc +approx +lat_0=1 +lon_0=2 " "+k=3 +x_0=4 +y_0=5 +ellps=WGS84 +step " "+proj=vgridshift +grids=bla.gtx +multiplier=0.001 +step " "+proj=utm +approx +zone=32 " "+ellps=WGS84"); } { auto formatter = PROJStringFormatter::create(); formatter->setUseApproxTMerc(true); EXPECT_EQ( op->inverse()->exportToPROJString(formatter.get()), "+proj=pipeline +step +inv +proj=utm +approx +zone=32 +ellps=WGS84 " "+step +inv +proj=vgridshift +grids=bla.gtx " "+multiplier=0.001 +step +proj=tmerc +approx +lat_0=1 +lon_0=2 " "+k=3 +x_0=4 +y_0=5 +ellps=WGS84"); } auto opInverse = CoordinateOperationFactory::create()->createOperation( compound2, compound1); ASSERT_TRUE(opInverse != nullptr); { auto formatter = PROJStringFormatter::create(); auto formatter2 = PROJStringFormatter::create(); EXPECT_EQ(opInverse->inverse()->exportToPROJString(formatter.get()), op->exportToPROJString(formatter2.get())); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +nadgrids=@bar.gsb +geoidgrids=@bar.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=hgridshift +grids=@foo.gsb " "+step +inv +proj=hgridshift +grids=@bar.gsb " "+step +inv +proj=vgridshift +grids=@bar.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert_same_geoidgrids) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +nadgrids=@bar.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=hgridshift +grids=@foo.gsb " "+step +inv +proj=hgridshift +grids=@bar.gsb " "+step +inv +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert_same_geoidgrids_different_vunits) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +nadgrids=@bar.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+vunits=us-ft +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=hgridshift +grids=@foo.gsb " "+step +inv +proj=hgridshift +grids=@bar.gsb " "+step +inv +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=us-ft"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert_same_nadgrids_same_geoidgrids) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +nadgrids=@foo.gsb +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert_same_towgs84_same_geoidgrids) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +towgs84=0,0,0 +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +towgs84=0,0,0 +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=cart +ellps=GRS67 " "+step +inv +proj=cart +ellps=GRS80 " "+step +inv +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert_same_ellsp_but_different_towgs84_different_geoidgrids) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +towgs84=1,2,3 +geoidgrids=@foo.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +towgs84=4,5,6 +geoidgrids=@bar.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto srcGeog = src->extractGeographicCRS(); ASSERT_TRUE(srcGeog != nullptr); ASSERT_TRUE(srcGeog->datum() != nullptr); auto dstGeog = dst->extractGeographicCRS(); ASSERT_TRUE(dstGeog != nullptr); ASSERT_TRUE(dstGeog->datum() != nullptr); EXPECT_FALSE(srcGeog->datum()->isEquivalentTo( dstGeog->datum().get(), IComparable::Criterion::EQUIVALENT)); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); // Check there's no proj=push +v_1 +v_2 EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=@foo.gtx +multiplier=1 " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=-3 +y=-3 +z=-3 " "+step +inv +proj=cart +ellps=GRS80 " "+step +inv +proj=vgridshift +grids=@bar.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_with_bound_crs_in_horiz_and_vert_WKT1_same_geoidgrids_context) { auto objSrc = WKTParser().createFromWKT( "COMPD_CS[\"NAD83 / Alabama West + NAVD88 height - Geoid12B " "(Meters)\",\n" " PROJCS[\"NAD83 / Alabama West\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",30],\n" " PARAMETER[\"central_meridian\",-87.5],\n" " PARAMETER[\"scale_factor\",0.999933333],\n" " PARAMETER[\"false_easting\",600000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"X\",EAST],\n" " AXIS[\"Y\",NORTH],\n" " AUTHORITY[\"EPSG\",\"26930\"]],\n" " VERT_CS[\"NAVD88 height\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " " "EXTENSION[\"PROJ4_GRIDS\",\"g2012a_alaska.gtx,g2012a_hawaii.gtx," "g2012a_conus.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5703\"]]]"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = WKTParser().createFromWKT( "COMPD_CS[\"NAD_1983_StatePlane_Alabama_West_FIPS_0102_Feet + NAVD88 " "height - Geoid12B (US Feet)\",\n" " PROJCS[\"NAD_1983_StatePlane_Alabama_West_FIPS_0102_Feet\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0],\n" " UNIT[\"Degree\",0.0174532925199433]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",30],\n" " PARAMETER[\"central_meridian\",-87.5],\n" " PARAMETER[\"scale_factor\",0.999933333333333],\n" " PARAMETER[\"false_easting\",1968500],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Easting\",EAST],\n" " AXIS[\"Northing\",NORTH],\n" " AUTHORITY[\"ESRI\",\"102630\"]],\n" " VERT_CS[\"NAVD88 height (ftUS)\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " " "EXTENSION[\"PROJ4_GRIDS\",\"g2012a_alaska.gtx,g2012a_hawaii.gtx," "g2012a_conus.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"US survey foot\",0.304800609601219,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"6360\"]]]"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 " "+x_0=600000 +y_0=0 +ellps=GRS80 " "+step +proj=unitconvert +z_in=m +z_out=us-ft " "+step +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333333333 " "+x_0=600000 +y_0=0 +ellps=GRS80 " "+step +proj=unitconvert +xy_in=m +xy_out=us-ft"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_issue_2232) { auto objSrc = WKTParser().createFromWKT( "COMPD_CS[\"NAD83 / Alabama West + NAVD88 height - Geoid12B " "(Meters)\",\n" " PROJCS[\"NAD83 / Alabama West\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " PROJECTION[\"Transverse_Mercator\"],\n" " PARAMETER[\"latitude_of_origin\",30],\n" " PARAMETER[\"central_meridian\",-87.5],\n" " PARAMETER[\"scale_factor\",0.999933333],\n" " PARAMETER[\"false_easting\",600000],\n" " PARAMETER[\"false_northing\",0],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"X\",EAST],\n" " AXIS[\"Y\",NORTH],\n" " AUTHORITY[\"EPSG\",\"26930\"]],\n" " VERT_CS[\"NAVD88 height - Geoid12B (Meters)\",\n" " VERT_DATUM[\"North American Vertical Datum 1988\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"foo.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5103\"]],\n" " UNIT[\"metre\",1.0,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5703\"]]]"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = WKTParser().createFromWKT( "COMPD_CS[\"NAD83 + some CRS (US Feet)\",\n" " GEOGCS[\"NAD83\",\n" " DATUM[\"North_American_Datum_1983\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6269\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4269\"]],\n" " VERT_CS[\"some CRS (US Feet)\",\n" " VERT_DATUM[\"some datum\",2005],\n" " UNIT[\"US survey foot\",0.3048006096012192,\n" " AUTHORITY[\"EPSG\",\"9003\"]],\n" " AXIS[\"Up\",UP]]]"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst), ctxt); EXPECT_GE(list.size(), 1U); auto list2 = CoordinateOperationFactory::create()->createOperations( NN_CHECK_ASSERT(dst), NN_CHECK_ASSERT(src), ctxt); EXPECT_EQ(list2.size(), list.size()); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // NAD27 + NGVD29 height (ftUS) authFactory->createCoordinateReferenceSystem("7406"), // NAD83(NSRS2007) + NAVD88 height authFactory->createCoordinateReferenceSystem("5500"), ctxt); // 152 or 155 depending if the VERTCON grids are there ASSERT_GE(list.size(), 152U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->nameStr(), "NGVD29 height (ftUS) to NAVD88 height (3) + " "NAD27 to WGS 84 (79) + Inverse of " "NAD83(NSRS2007) to WGS 84 (1)"); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=rad +z_out=m " "+step +proj=vgridshift +grids=us_noaa_vertcone.tif +multiplier=1 " "+step +proj=hgridshift +grids=us_noaa_conus.tif +step " "+proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap " "+order=2,1"); { // Test that we can round-trip this through WKT and still get the same // PROJ string. auto wkt = list[0]->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); auto obj = WKTParser().createFromWKT(wkt); auto co = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(co != nullptr); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), co->exportToPROJString(PROJStringFormatter::create().get())); } bool foundApprox = false; for (size_t i = 0; i < list.size(); i++) { auto projString = list[i]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_TRUE( projString.find("+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=us-ft " "+xy_out=rad +z_out=m") == 0) << list[i]->nameStr(); if (list[i]->nameStr().find("Transformation from NGVD29 height (ftUS) " "to NAVD88 height (ballpark vertical " "transformation)") == 0) { EXPECT_TRUE(list[i]->hasBallparkTransformation()); EXPECT_EQ(list[i]->nameStr(), "Transformation from NGVD29 height (ftUS) to NAVD88 " "height (ballpark vertical transformation) + NAD27 to " "WGS 84 (79) + Inverse of NAD83(NSRS2007) to WGS 84 (1)"); EXPECT_EQ( projString, "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=rad " "+z_out=m +step +proj=hgridshift +grids=us_noaa_conus.tif " "+step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); foundApprox = true; break; } } EXPECT_TRUE(foundApprox); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_context_helmert_noop) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); // WGS84 + EGM96 auto objSrc = createFromUserInput("EPSG:4326+5773", dbContext); auto srcCrs = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCrs != nullptr); // ETRS89 + EGM96 auto objDest = createFromUserInput("EPSG:4258+5773", dbContext); auto destCrs = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(destCrs != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCrs), NN_NO_CHECK(destCrs), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- // EGM96 has a geoid model referenced to WGS84, and Belfast height has a // geoid model referenced to ETRS89 TEST(operation, compoundCRS_to_compoundCRS_WGS84_EGM96_to_ETRS89_Belfast) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); // WGS84 + EGM96 auto objSrc = createFromUserInput("EPSG:4326+5773", dbContext); auto srcCrs = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCrs != nullptr); // ETRS89 + Belfast height auto objDest = createFromUserInput("EPSG:4258+5732", dbContext); auto destCrs = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(destCrs != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCrs), NN_NO_CHECK(destCrs), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of WGS 84 to EGM96 height (1) + " "Inverse of ETRS89 to WGS 84 (1) + " "ETRS89 to Belfast height (2)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +inv +proj=vgridshift +grids=uk_os_OSGM15_Belfast.tif " "+multiplier=1 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- // Variant of above where source intermediate geog3D CRS == target intermediate // geog3D CRS TEST(operation, compoundCRS_to_compoundCRS_WGS84_EGM96_to_WGS84_Belfast) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); // WGS84 + EGM96 auto objSrc = createFromUserInput("EPSG:4326+5773", dbContext); auto srcCrs = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCrs != nullptr); // WGS84 + Belfast height auto objDest = createFromUserInput("EPSG:4326+5732", dbContext); auto destCrs = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(destCrs != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCrs), NN_NO_CHECK(destCrs), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of WGS 84 to EGM96 height (1) + " "ETRS89 to Belfast height (2) using ETRS89 to WGS 84 (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +inv +proj=vgridshift +grids=uk_os_OSGM15_Belfast.tif " "+multiplier=1 +step " "+proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_OSGB36_BNG_ODN_height_to_WGS84_EGM96) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // "OSGB36 / British National Grid + ODN height auto srcObj = createFromUserInput("EPSG:27700+5701", dbContext, false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto authFactoryEPSG = AuthorityFactory::create(dbContext, std::string("EPSG")); auto dst = authFactoryEPSG->createCoordinateReferenceSystem( "9707"); // "WGS 84 + EGM96 height" { auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of British National Grid + " "OSGB36 to ETRS89 (2) + " "Inverse of ETRS89 to ODN height (2) + " "ETRS89 to WGS 84 (1) + " "WGS 84 to EGM96 height (1)"); const char *expected_proj = "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 " "+x_0=400000 +y_0=-100000 +ellps=airy " "+step +proj=hgridshift +grids=uk_os_OSTN15_NTv2_OSGBtoETRS.tif " "+step +proj=vgridshift +grids=uk_os_OSGM15_GB.tif +multiplier=1 " "+step +inv +proj=vgridshift +grids=us_nga_egm96_15.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"; EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), expected_proj); } { auto list = CoordinateOperationFactory::create()->createOperations( dst, NN_NO_CHECK(src), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of WGS 84 to EGM96 height (1) + " "Inverse of ETRS89 to WGS 84 (1) + " "ETRS89 to ODN height (2) + " "Inverse of OSGB36 to ETRS89 (2) + " "British National Grid"); const char *expected_proj = "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +inv +proj=vgridshift +grids=uk_os_OSGM15_GB.tif " "+multiplier=1 " "+step +inv +proj=hgridshift " "+grids=uk_os_OSTN15_NTv2_OSGBtoETRS.tif " "+step +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 " "+x_0=400000 +y_0=-100000 +ellps=airy"; EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), expected_proj); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_context_helmert) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); // GDA94 + AHD height auto objSrc = createFromUserInput("EPSG:9464", dbContext); auto srcCrs = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(srcCrs != nullptr); // GDA2020 + AHD height auto objDest = createFromUserInput("EPSG:9463", dbContext); auto destCrs = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(destCrs != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCrs), NN_NO_CHECK(destCrs), ctxt); ASSERT_GE(list.size(), 1U); // Check presence of push/pop v_3 EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=0.06155 +y=-0.01087 +z=-0.04019 " "+rx=-0.0394924 +ry=-0.0327221 +rz=-0.0328979 +s=-0.009994 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_GDA94_AHD_to_GDA2020_AVWS) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // GDA94 + AHD height authFactory->createCoordinateReferenceSystem("9464"), // GDA2020 + AVWS height authFactory->createCoordinateReferenceSystem("9462"), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of 'GDA94 to GDA94 + AHD height (1)' + " "GDA94 to GDA2020 (1) + " "GDA2020 to AVWS height (2)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=au_ga_AUSGeoid09_V1.01.tif " "+multiplier=1 " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=0.06155 +y=-0.01087 +z=-0.04019 " "+rx=-0.0394924 +ry=-0.0327221 +rz=-0.0328979 +s=-0.009994 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=GRS80 " "+step +inv +proj=vgridshift +grids=au_ga_AGQG_20201120.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_concatenated_operation_with_two_vert_transformation) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // ETRS89 + Baltic 1957 height authFactory->createCoordinateReferenceSystem("8360"), // ETRS89 + EVRF2007 height authFactory->createCoordinateReferenceSystem("7423"), ctxt); ASSERT_GE(list.size(), 2U); // For Czechia EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vertoffset +lat_0=49.9166666666667 " "+lon_0=15.25 +dh=0.13 +slope_lat=0.026 +slope_lon=0 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[0]->nameStr(), "Baltic 1957 height to EVRF2007 height (1)"); // For Slovakia EXPECT_EQ( list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift " "+grids=sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif +multiplier=1 " "+step +inv +proj=vgridshift " "+grids=sk_gku_Slovakia_ETRS89h_to_EVRF2007.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( list[1]->nameStr(), "ETRS89 + Baltic 1957 height to ETRS89 + EVRF2007 height (1)"); EXPECT_EQ(list[1]->inverse()->nameStr(), "Inverse of 'ETRS89 + Baltic " "1957 height to ETRS89 + " "EVRF2007 height (1)'"); } } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_concatenated_operation_with_two_vert_transformation_and_different_source_dest_interp) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // "BD72 + Ostend height" auto srcObj = createFromUserInput("EPSG:4313+5710", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); // "Amersfoort + NAP height" auto dstObj = createFromUserInput("EPSG:4289+5709", authFactory->databaseContext(), false); auto dst = nn_dynamic_pointer_cast(dstObj); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "BD72 to ETRS89 (3) + " "Inverse of ETRS89 to Ostend height (1) + " "ETRS89 to NAP height (2) + " "Inverse of Amersfoort to ETRS89 (9)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=be_ign_bd72lb72_etrs89lb08.tif " "+step +proj=vgridshift +grids=be_ign_hBG18.tif +multiplier=1 " "+step +inv +proj=vgridshift +grids=nl_nsgi_nlgeo2018.tif " "+multiplier=1 " "+step +inv +proj=hgridshift +grids=nl_nsgi_rdtrans2018.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_issue_2720) { auto dbContext = DatabaseContext::create(); auto objSrc = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "COMPD_CS[\"Orthographic + EGM96 geoid height\"," "PROJCS[\"Orthographic\"," "GEOGCS[\"GCS_WGS_1984\"," "DATUM[\"D_unknown\"," "SPHEROID[\"WGS84\",6378137,298.257223563]]," "PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]," "PROJECTION[\"Orthographic\"]," "PARAMETER[\"Latitude_Of_Center\",36.1754430555555000]," "PARAMETER[\"Longitude_Of_Center\",-86.7740944444444000]," "PARAMETER[\"false_easting\",0]," "PARAMETER[\"false_northing\",0]," "UNIT[\"Meter\",1]]," "VERT_CS[\"EGM96 geoid height\"," "VERT_DATUM[\"EGM96 geoid\",2005," "EXTENSION[\"PROJ4_GRIDS\",\"egm96_15.gtx\"]," "AUTHORITY[\"EPSG\",\"5171\"]]," "UNIT[\"metre\",1," "AUTHORITY[\"EPSG\",\"9001\"]]," "AXIS[\"Up\",UP]," "AUTHORITY[\"EPSG\",\"5773\"]]]"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = WKTParser().attachDatabaseContext(dbContext).createFromWKT( "COMPD_CS[\"WGS84 Coordinate System + EGM96 geoid height\"," "GEOGCS[\"WGS84 Coordinate System\"," "DATUM[\"WGS 1984\"," "SPHEROID[\"WGS 1984\",6378137,298.257223563]," "TOWGS84[0,0,0,0,0,0,0]," "AUTHORITY[\"EPSG\",\"6326\"]]," "PRIMEM[\"Greenwich\",0]," "UNIT[\"degree\",0.0174532925199433]," "AUTHORITY[\"EPSG\",\"4326\"]]," "VERT_CS[\"EGM96 geoid height\"," "VERT_DATUM[\"EGM96 geoid\",2005," "EXTENSION[\"PROJ4_GRIDS\",\"egm96_15.gtx\"]," "AUTHORITY[\"EPSG\",\"5171\"]]," "UNIT[\"metre\",1," "AUTHORITY[\"EPSG\",\"9001\"]]," "AXIS[\"Up\",UP]," "AUTHORITY[\"EPSG\",\"5773\"]]]"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst), ctxt); EXPECT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=ortho +f=0 +lat_0=36.1754430555555 " "+lon_0=-86.7740944444444 +x_0=0 +y_0=0 +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_issue_3328) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); // "WGS 84 + EGM96 height" auto srcObj = createFromUserInput("EPSG:4326+5773", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); // "WGS 84 + CGVD28 height" auto dstObj = createFromUserInput("EPSG:4326+5713", authFactory->databaseContext(), false); auto dst = nn_dynamic_pointer_cast(dstObj); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of WGS 84 to EGM96 height (1) + " "NAD83(CSRS) to CGVD28 height (1) " "using NAD83(CSRS) to WGS 84 (2)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=push +v_1 +v_2 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +proj=cart +ellps=WGS84 " "+step +inv +proj=helmert +x=-0.991 +y=1.9072 +z=0.5129 " "+rx=-0.0257899075194932 " "+ry=-0.0096500989602704 +rz=-0.0116599432323421 +s=0 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=GRS80 " "+step +inv +proj=vgridshift +grids=ca_nrc_HT2_1997.tif " "+multiplier=1 " "+step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=-0.991 +y=1.9072 +z=0.5129 " "+rx=-0.0257899075194932 " "+ry=-0.0096500989602704 +rz=-0.0116599432323421 +s=0 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1 " "+step +proj=pop +v_1 +v_2"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_compoundCRS_concatenated_operation_with_two_vert_transformation_and_ballpark_geog) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // "NAD83(CSRS) + CGVD28 height" auto srcObj = createFromUserInput("EPSG:4617+5713", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); // "NAD83(CSRS) + CGVD2013(CGG2013) height" auto dstObj = createFromUserInput("EPSG:4617+6647", authFactory->databaseContext(), false); auto dst = nn_dynamic_pointer_cast(dstObj); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); { auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "Inverse of NAD83(CSRS)v6 to CGVD28 height (1) + " "NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) " "using Null geographic offset " "from NAD83(CSRS)v6 (geog3D) to NAD83(CSRS)v6 (geog2D) + " "Inverse of NAD83 to NAD83(CSRS)v6 (10) + " "NAD83 to NAD83(CSRS) (4)"); EXPECT_EQ(list[1]->nameStr(), "Inverse of NAD83(CSRS)v6 to CGVD28 height (1) + " "NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) " "using Ballpark geographic offset " "from NAD83(CSRS) to NAD83(CSRS)v6"); } #if 0 // Note: below situation is no longer triggered since EPSG v10.066 update // Not obvious to find an equivalent one. // That transformation involves doing CGVD28 height to CGVD2013(CGG2013) // height by doing: // - CGVD28 height to NAD83(CSRS): EPSG registered operation // - NAD83(CSRS) to CGVD2013(CGG2013) height by doing: // * NAD83(CSRS) to NAD83(CSRS)v6: ballpark // * NAD83(CSRS)v6 to CGVD2013(CGG2013): EPSG registered operation auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); { auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 1U); // Check that we have the transformation using NAD83(CSRS)v6 first // (as well as the one between NAD83(CSRS) to CGVD28 height) EXPECT_EQ(list[0]->nameStr(), "Inverse of NAD83(CSRS) to CGVD28 height (1) + " "Inverse of Ballpark geographic offset from NAD83(CSRS)v6 to " "NAD83(CSRS) + " "NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) + " "Inverse of Ballpark geographic offset from NAD83(CSRS) to " "NAD83(CSRS)v6"); } { auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(dst), NN_NO_CHECK(src), ctxt); ASSERT_GE(list.size(), 1U); // Check that we have the transformation using NAD83(CSRS)v6 first // (as well as the one between NAD83(CSRS) to CGVD28 height) EXPECT_EQ( list[0]->nameStr(), "Ballpark geographic offset from NAD83(CSRS) to NAD83(CSRS)v6 + " "Inverse of NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) + " "Ballpark geographic offset from NAD83(CSRS)v6 to NAD83(CSRS) + " "NAD83(CSRS) to CGVD28 height (1)"); } #endif } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_issue_3152_ch1903lv03_ln02_bound) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"CH1903 / LV03 + LN02 height\",\n" " BOUNDCRS[\n" " SOURCECRS[\n" " PROJCRS[\"CH1903 / LV03\",\n" " BASEGEOGCRS[\"CH1903\",\n" " DATUM[\"CH1903\",\n" " ELLIPSOID[\"Bessel " "1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4149]],\n" " CONVERSION[\"Map projection of CH1903 / LV03\",\n" " METHOD[\"Hotine Oblique Mercator (variant B)\",\n" " ID[\"EPSG\",9815]],\n" " PARAMETER[\"Latitude of projection " "centre\",46.9524055555556,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection " "centre\",7.43958333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth of initial line\",90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Angle from Rectified to Skew " "Grid\",90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8814]],\n" " PARAMETER[\"Scale factor on initial line\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"Easting at projection " "centre\",600000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8816]],\n" " PARAMETER[\"Northing at projection " "centre\",200000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8817]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",21781]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]],\n" " ABRIDGEDTRANSFORMATION[\"MyTransformation from CH1903 to " "WGS84\",\n" " METHOD[\"Position Vector transformation (geog2D " "domain)\",\n" " ID[\"EPSG\",9606]],\n" " PARAMETER[\"X-axis translation\",674.374,\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",15.056,\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",405.346,\n" " ID[\"EPSG\",8607]],\n" " PARAMETER[\"X-axis rotation\",0,\n" " ID[\"EPSG\",8608]],\n" " PARAMETER[\"Y-axis rotation\",0,\n" " ID[\"EPSG\",8609]],\n" " PARAMETER[\"Z-axis rotation\",0,\n" " ID[\"EPSG\",8610]],\n" " PARAMETER[\"Scale difference\",1,\n" " ID[\"EPSG\",8611]]]],\n" " VERTCRS[\"LN02 height\",\n" " VDATUM[\"Landesnivellement 1902\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",5728]]]"; auto srcObj = createFromUserInput(wkt, dbContext, false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto authFactoryEPSG = AuthorityFactory::create(dbContext, std::string("EPSG")); auto dst = authFactoryEPSG->createCoordinateReferenceSystem( "9518"); // "WGS 84 + EGM2008 height" auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_GE(list.size(), 1U); // Check that BoundCRS helmert transformation is used EXPECT_EQ(list[0]->nameStr(), "Inverse of Map projection of CH1903 / LV03 + " "MyTransformation from CH1903 to WGS84 + " "Inverse of ETRS89 to WGS 84 (1) + " "Inverse of ETRS89 to LN02 height + " "ETRS89 to WGS 84 (1) + " "WGS 84 to EGM2008 height (1)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=somerc +lat_0=46.9524055555556 " "+lon_0=7.43958333333333 +k_0=1 " "+x_0=600000 +y_0=200000 +ellps=bessel " "+step +proj=push +v_3 " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=674.374 +y=15.056 +z=405.346 " "+rx=0 +ry=0 +rz=0 +s=0 +convention=position_vector " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_3 " "+step +proj=vgridshift " "+grids=ch_swisstopo_chgeo2004_ETRS89_LN02.tif " "+multiplier=1 " "+step +inv +proj=vgridshift +grids=us_nga_egm08_25.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); auto listInv = CoordinateOperationFactory::create()->createOperations( dst, NN_NO_CHECK(src), ctxt); ASSERT_GE(listInv.size(), 1U); EXPECT_EQ(listInv[0]->nameStr(), "Inverse of WGS 84 to EGM2008 height (1) + " "Inverse of ETRS89 to WGS 84 (1) + " "ETRS89 to LN02 height + " "ETRS89 to WGS 84 (1) + " "Inverse of MyTransformation from CH1903 to WGS84 + " "Map projection of CH1903 / LV03"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_issue_3191_BD72_Ostend_height_to_WGS84_EGM96) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // BD72 + Ostend height auto srcObj = createFromUserInput("EPSG:4313+5710", dbContext, false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto authFactoryEPSG = AuthorityFactory::create(dbContext, std::string("EPSG")); auto dst = authFactoryEPSG->createCoordinateReferenceSystem( "9707"); // "WGS 84 + EGM96 height" { auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "BD72 to ETRS89 (3) + " "Inverse of ETRS89 to Ostend height (1) + " "ETRS89 to WGS 84 (1) + " "WGS 84 to EGM96 height (1)"); const char *expected_proj = "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=be_ign_bd72lb72_etrs89lb08.tif " "+step +proj=vgridshift +grids=be_ign_hBG18.tif +multiplier=1 " "+step +inv +proj=vgridshift +grids=us_nga_egm96_15.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"; EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), expected_proj); } { auto list = CoordinateOperationFactory::create()->createOperations( dst, NN_NO_CHECK(src), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of WGS 84 to EGM96 height (1) + " "Inverse of ETRS89 to WGS 84 (1) + " "ETRS89 to Ostend height (1) + " "Inverse of BD72 to ETRS89 (3)"); const char *expected_proj = "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +inv +proj=vgridshift +grids=be_ign_hBG18.tif +multiplier=1 " "+step +inv +proj=hgridshift +grids=be_ign_bd72lb72_etrs89lb08.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"; EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), expected_proj); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_compoundCRS_with_derivedVerticalCRS_ellipsoidal_height) { // Test scenario of https://github.com/OSGeo/PROJ/issues/4175 // Note that the CompoundCRS with a DerivedVerticalCRS with a "Ellipsoid" // datum is an extension, not OGC Topic 2 compliant. auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // WGS84 + EGM96 auto objSrc = createFromUserInput("EPSG:4326+5773", dbContext); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); // auto wkt = "COMPOUNDCRS[\"UTM30 with vertical offset\",\n" " PROJCRS[\"WGS 84 / UTM zone 30N\",\n" " BASEGEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2296)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]],\n" " CONVERSION[\"UTM zone 30N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",32630]],\n" " VERTCRS[\"Derived verticalCRS\",\n" " BASEVERTCRS[\"Ellipsoid (metre)\",\n" " VDATUM[\"Ellipsoid\"]],\n" " DERIVINGCONVERSION[\"Conv Vertical Offset\",\n" " METHOD[\"Vertical Offset\",\n" " ID[\"EPSG\",9616]],\n" " PARAMETER[\"Vertical Offset\",42.3,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8603]]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]]"; auto objDst = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +proj=geogoffset +dh=42.3 " "+step +proj=utm +zone=30 +ellps=WGS84"); EXPECT_STREQ(list[0]->nameStr().c_str(), "Inverse of WGS 84 to EGM96 height (1) + Conv Vertical Offset " "+ UTM zone 30N"); EXPECT_FALSE(list[0]->hasBallparkTransformation()); } // --------------------------------------------------------------------------- TEST(operation, vertCRS_to_vertCRS) { auto vertcrs_m_obj = PROJStringParser().createFromPROJString("+vunits=m"); auto vertcrs_m = nn_dynamic_pointer_cast(vertcrs_m_obj); ASSERT_TRUE(vertcrs_m != nullptr); auto vertcrs_ft_obj = PROJStringParser().createFromPROJString("+vunits=ft"); auto vertcrs_ft = nn_dynamic_pointer_cast(vertcrs_ft_obj); ASSERT_TRUE(vertcrs_ft != nullptr); auto vertcrs_us_ft_obj = PROJStringParser().createFromPROJString("+vunits=us-ft"); auto vertcrs_us_ft = nn_dynamic_pointer_cast(vertcrs_us_ft_obj); ASSERT_TRUE(vertcrs_us_ft != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(vertcrs_m), NN_CHECK_ASSERT(vertcrs_ft)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +z_in=m +z_out=ft"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(vertcrs_m), NN_CHECK_ASSERT(vertcrs_ft)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=unitconvert +z_in=ft +z_out=m"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(vertcrs_ft), NN_CHECK_ASSERT(vertcrs_m)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +z_in=ft +z_out=m"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(vertcrs_ft), NN_CHECK_ASSERT(vertcrs_us_ft)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +z_in=ft +z_out=us-ft"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(vertcrs_us_ft), NN_CHECK_ASSERT(vertcrs_ft)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=unitconvert +z_in=us-ft +z_out=ft"); } auto vertCRSMetreUp = nn_dynamic_pointer_cast(WKTParser().createFromWKT( "VERTCRS[\"my height\",VDATUM[\"my datum\"],CS[vertical,1]," "AXIS[\"gravity-related height (H)\",up," "LENGTHUNIT[\"metre\",1]]]")); ASSERT_TRUE(vertCRSMetreUp != nullptr); auto vertCRSMetreDown = nn_dynamic_pointer_cast(WKTParser().createFromWKT( "VERTCRS[\"my depth\",VDATUM[\"my datum\"],CS[vertical,1]," "AXIS[\"depth (D)\",down,LENGTHUNIT[\"metre\",1]]]")); ASSERT_TRUE(vertCRSMetreDown != nullptr); auto vertCRSMetreDownFtUS = nn_dynamic_pointer_cast(WKTParser().createFromWKT( "VERTCRS[\"my depth (ftUS)\",VDATUM[\"my datum\"],CS[vertical,1]," "AXIS[\"depth (D)\",down,LENGTHUNIT[\"US survey " "foot\",0.304800609601219]]]")); ASSERT_TRUE(vertCRSMetreDownFtUS != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(vertCRSMetreUp), NN_CHECK_ASSERT(vertCRSMetreDown)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=1,2,-3"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(vertCRSMetreUp), NN_CHECK_ASSERT(vertCRSMetreDownFtUS)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=affine +s33=-3.28083333333333"); } } // --------------------------------------------------------------------------- TEST(operation, vertCRS_to_vertCRS_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // NGVD29 height (m) authFactory->createCoordinateReferenceSystem("7968"), // NAVD88 height (1) authFactory->createCoordinateReferenceSystem("5703"), ctxt); ASSERT_EQ(list.size(), 4U); EXPECT_EQ(list[0]->nameStr(), "NGVD29 height (m) to NAVD88 height (3)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=vgridshift +grids=us_noaa_vertcone.tif +multiplier=1"); } // --------------------------------------------------------------------------- TEST(operation, vertCRS_to_vertCRS_New_Zealand_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( // NZVD2016 height authFactory->createCoordinateReferenceSystem("7839"), // Auckland 1946 height authFactory->createCoordinateReferenceSystem("5759"), ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=vgridshift +grids=nz_linz_auckht1946-nzvd2016.tif " "+multiplier=1"); } // --------------------------------------------------------------------------- TEST(operation, projCRS_3D_to_geogCRS_3D) { auto compoundcrs_ft_obj = PROJStringParser().createFromPROJString( "+proj=merc +vunits=ft +type=crs"); auto proj3DCRS_ft = nn_dynamic_pointer_cast(compoundcrs_ft_obj); ASSERT_TRUE(proj3DCRS_ft != nullptr); auto geogcrs_m_obj = PROJStringParser().createFromPROJString( "+proj=longlat +vunits=m +type=crs"); auto geogcrs_m = nn_dynamic_pointer_cast(geogcrs_m_obj); ASSERT_TRUE(geogcrs_m != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(proj3DCRS_ft), NN_CHECK_ASSERT(geogcrs_m)); ASSERT_TRUE(op != nullptr); EXPECT_FALSE(op->hasBallparkTransformation()); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=m +z_in=ft " "+xy_out=m +z_out=m " "+step +inv +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 " "+ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +z_in=m " "+xy_out=deg +z_out=m"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(geogcrs_m), NN_CHECK_ASSERT(proj3DCRS_ft)); ASSERT_TRUE(op != nullptr); EXPECT_FALSE(op->hasBallparkTransformation()); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 " "+step +proj=unitconvert +xy_in=m +z_in=m " "+xy_out=m +z_out=ft"); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D) { auto compoundcrs_ft_obj = WKTParser().createFromWKT( "COMPOUNDCRS[\"unknown\",\n" " PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Mercator (variant A)\",\n" " ID[\"EPSG\",9804]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " VERTCRS[\"unknown\",\n" " VDATUM[\"unknown\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"foot\",0.3048,\n" " ID[\"EPSG\",9002]]]]]"); auto compoundcrs_ft = nn_dynamic_pointer_cast(compoundcrs_ft_obj); ASSERT_TRUE(compoundcrs_ft != nullptr); auto geogcrs_m_obj = PROJStringParser().createFromPROJString( "+proj=longlat +vunits=m +type=crs"); auto geogcrs_m = nn_dynamic_pointer_cast(geogcrs_m_obj); ASSERT_TRUE(geogcrs_m != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(compoundcrs_ft), NN_CHECK_ASSERT(geogcrs_m)); ASSERT_TRUE(op != nullptr); EXPECT_TRUE(op->hasBallparkTransformation()); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=merc +lon_0=0 +k=1 +x_0=0 " "+y_0=0 +ellps=WGS84 +step +proj=unitconvert +xy_in=rad " "+z_in=ft +xy_out=deg +z_out=m"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(geogcrs_m), NN_CHECK_ASSERT(compoundcrs_ft)); ASSERT_TRUE(op != nullptr); EXPECT_TRUE(op->hasBallparkTransformation()); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=unitconvert +xy_in=deg +z_in=m " "+xy_out=rad +z_out=ft +step +proj=merc +lon_0=0 +k=1 +x_0=0 " "+y_0=0 +ellps=WGS84"); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); // CompoundCRS to Geog3DCRS, with vertical unit change, but without // ellipsoid height <--> vertical height correction { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "7406"), // NAD27 + NGVD29 height (ftUS) authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 ctxt); ASSERT_GE(list.size(), 1U); EXPECT_TRUE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->nameStr(), "NAD27 to WGS 84 (79) + Transformation from NGVD29 height " "(ftUS) to WGS 84 (ballpark vertical transformation, without " "ellipsoid height to vertical height correction)"); EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step " "+proj=hgridshift +grids=us_noaa_conus.tif " "+step +proj=unitconvert " "+xy_in=rad +z_in=us-ft +xy_out=deg +z_out=m +step " "+proj=axisswap +order=2,1"); } // CompoundCRS to Geog3DCRS, with same vertical unit, and with // direct ellipsoid height <--> vertical height correction and // direct horizontal transform (no-op here) { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "5500"), // NAD83(NSRS2007) + NAVD88 height authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 ctxt); ASSERT_GE(list.size(), 2U); EXPECT_EQ(list[1]->nameStr(), "Inverse of NAD83(NSRS2007) to NAVD88 height (1) + " "NAD83(NSRS2007) to WGS 84 (1)"); EXPECT_EQ(list[1]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_noaa_geoid09_conus.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ(list[1]->remarks(), "For NAD83(NSRS2007) to NAVD88 height (1) (EPSG:9173): Uses " "Geoid09 hybrid model. Replaced by 2012 model (CT code 6326)." "\n" "For NAD83(NSRS2007) to WGS 84 (1) (EPSG:15931): " "Approximation assuming that NAD83(NSRS2007) is equivalent " "to WGS 84 within the accuracy of the transformation."); } // NAD83 + NAVD88 height --> WGS 84 { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83 + NAVD88 height auto srcObj = createFromUserInput( "EPSG:4269+5703", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto list = CoordinateOperationFactory::create()->createOperations( nnSrc, authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 ctxt); ASSERT_GE(list.size(), 2U); EXPECT_EQ(list[0]->nameStr(), "NAD83 to NAD83(HARN) (47) + " "NAD83(HARN) to NAD83(FBN) (1) + " "Inverse of NAD83(FBN) to NAVD88 height (1) + " "Inverse of NAD83(HARN) to NAD83(FBN) (1) + " "NAD83(HARN) to WGS 84 (3)"); EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=gridshift " "+grids=us_noaa_nadcon5_nad83_1986_nad83_harn_conus.tif " "+step +proj=gridshift +no_z_transform " "+grids=us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif " "+step +proj=vgridshift +grids=us_noaa_geoid03_conus.tif " "+multiplier=1 " "+step +inv +proj=gridshift " "+grids=us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=-0.991 +y=1.9072 +z=0.5129 " "+rx=-0.0257899075194932 " "+ry=-0.0096500989602704 +rz=-0.0116599432323421 +s=0 " "+convention=coordinate_frame " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // Another variation, but post horizontal adjustment is in two steps { auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 height auto srcObj = createFromUserInput( "EPSG:6318+5703", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto list = CoordinateOperationFactory::create()->createOperations( nnSrc, authFactory->createCoordinateReferenceSystem("4985"), // WGS 72 3D ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of NAD83(2011) to NAVD88 height (3) + " "NAD83(2011) to WGS 84 (1) + " "Inverse of WGS 72 to WGS 84 (2)"); EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_noaa_g2018u0.tif " "+multiplier=1 " "+step +proj=cart +ellps=WGS84 " "+step +inv +proj=helmert +x=0 +y=0 +z=4.5 +rx=0 +ry=0 " "+rz=0.554 +s=0.219 +convention=position_vector " "+step +inv +proj=cart +ellps=WGS72 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // Check that we can handle vertical transformations where there is a // mix of available ones in the PROJ namespace (mx_inegi_ggm10) and in // in the EPSG namespace (us_noaa_g2018u0) // This test might no longer test this scenario if mx_inegi_ggm10 is // referenced one day by EPSG, but at least this tests a common use case. { auto authFactoryAll = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactoryAll, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 height auto srcObj = createFromUserInput( "EPSG:6318+5703", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto list = CoordinateOperationFactory::create()->createOperations( nnSrc, authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 3D ctxt); bool foundGeoid2018 = false; bool foundGGM10 = false; for (const auto &op : list) { try { const auto projString = op->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()); if (projString.find("us_noaa_g2018u0.tif") != std::string::npos) foundGeoid2018 = true; else if (projString.find("mx_inegi_ggm10.tif") != std::string::npos) foundGGM10 = true; } catch (const std::exception &) { } } EXPECT_TRUE(foundGeoid2018); EXPECT_TRUE(foundGGM10); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D_with_3D_helmert_context) { // Use case of https://github.com/OSGeo/PROJ/issues/2225 auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // WGS84 + EGM96 height auto srcObj = createFromUserInput("EPSG:4326+5773", dbContext, false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), // CH1903+ authFactory->createCoordinateReferenceSystem("4150")->promoteTo3D( std::string(), dbContext), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of WGS 84 to EGM96 height (1) + " "Inverse of CH1903+ to WGS 84 (1)"); // Check that there is no push v_3 / pop v_3 const char *expected_proj = "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=-674.374 +y=-15.056 +z=-405.346 " "+step +inv +proj=cart +ellps=bessel " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"; EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, dbContext) .get()), expected_proj); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D_with_3D_helmert_same_geog_src_target_context) { // Use case of https://github.com/OSGeo/PROJ/pull/2584 // From EPSG:XXXX+YYYY to EPSG:XXXX (3D), with a vertical shift grid // operation in another datum ZZZZ, and the XXXX<--->ZZZZ being an Helmert auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // CH1903+ + EGM96 height auto srcObj = createFromUserInput("EPSG:4150+5773", dbContext, false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), // CH1903+ authFactory->createCoordinateReferenceSystem("4150")->promoteTo3D( std::string(), dbContext), ctxt); ASSERT_GE(list.size(), 1U); // Check that there is push v_3 / pop v_3 in the step before vgridshift // Check that there is *no* push v_3 / pop v_3 after vgridshift const char *expected_proj = "+proj=pipeline " "+step +proj=push +v_1 +v_2 " // avoid any horizontal change "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=674.374 +y=15.056 +z=405.346 " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=-674.374 +y=-15.056 +z=-405.346 " "+step +inv +proj=cart +ellps=bessel " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1 " "+step +proj=pop +v_1 +v_2" // avoid any horizontal change ; EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, dbContext) .get()), expected_proj); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D_with_null_helmert_same_geog_src_target_context) { // Variation of previous case // From EPSG:XXXX+YYYY to EPSG:XXXX (3D), with a vertical shift grid // operation in another datum ZZZZ, and the XXXX<--->ZZZZ being a // null Helmert auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // ETRS89 + EGM96 height auto srcObj = createFromUserInput("EPSG:4258+5773", dbContext, false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), // ETRS89 3D authFactory->createCoordinateReferenceSystem("4937"), ctxt); ASSERT_GE(list.size(), 1U); // No push/pop needed const char *expected_proj = "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"; EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, dbContext) .get()), expected_proj); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D_with_same_geog_src_target_interp_context) { auto dbContext = DatabaseContext::create(); // Tests a mix of Datum and DatumEnsemble regarding WGS 84 when we compare // the datums used in the source -> interpolation_crs and // interpolation_crs -> target transformations. auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto dstObj = WKTParser().createFromWKT( "COMPOUNDCRS[\"WGS 84 + my_height\",\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]],\n" " BOUNDCRS[\n" " SOURCECRS[\n" " VERTCRS[\"my_height\",\n" " VDATUM[\"my_height\"],\n" " CS[vertical,1],\n" " AXIS[\"up\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[" "\"my_height to WGS84 ellipsoidal height\",\n" " METHOD[\"GravityRelatedHeight to Geographic3D\"],\n" " PARAMETERFILE[\"Geoid (height correction) model file\"," "\"fake.gtx\",\n" " ID[\"EPSG\",8666]]]]]"); auto dst = nn_dynamic_pointer_cast(dstObj); ASSERT_TRUE(dst != nullptr); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 3D NN_NO_CHECK(dst), ctxt); ASSERT_EQ(list.size(), 1U); const char *expected_proj = "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift +grids=fake.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"; EXPECT_EQ(list[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, dbContext) .get()), expected_proj); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D_WGS84_to_GDA2020_AHD_Height) { // Use case of https://github.com/OSGeo/PROJ/issues/2348 auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); { auto list = CoordinateOperationFactory::create()->createOperations( // GDA2020 + AHD height authFactory->createCoordinateReferenceSystem("9463"), // WGS 84 3D authFactory->createCoordinateReferenceSystem("4979"), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of GDA2020 to AHD height (1) + " "GDA2020 to WGS 84 (2)"); } // Inverse { auto list = CoordinateOperationFactory::create()->createOperations( // WGS 84 3D authFactory->createCoordinateReferenceSystem("4979"), // GDA2020 + AHD height authFactory->createCoordinateReferenceSystem("9463"), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Inverse of GDA2020 to WGS 84 (2) + " "GDA2020 to AHD height (1)"); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_2D_promote_to_3D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83 + NAVD88 height auto srcObj = createFromUserInput("EPSG:4269+5703", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("4269")->promoteTo3D( std::string(), authFactory->databaseContext()); // NAD83 auto listCompoundToGeog2D = CoordinateOperationFactory::create()->createOperations(nnSrc, dst, ctxt); // The checked value is not that important, but in case this changes, // likely due to a EPSG upgrade, worth checking EXPECT_EQ(listCompoundToGeog2D.size(), 199U); auto listGeog2DToCompound = CoordinateOperationFactory::create()->createOperations(dst, nnSrc, ctxt); EXPECT_EQ(listGeog2DToCompound.size(), listCompoundToGeog2D.size()); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_of_projCRS_to_geogCRS_3D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // SPCS83 California zone 1 (US Survey feet) + NAVD88 height (ftUS) auto srcObj = createFromUserInput("EPSG:2225+6360", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("4269")->promoteTo3D( std::string(), authFactory->databaseContext()); // NAD83 auto list = CoordinateOperationFactory::create()->createOperations( nnSrc, dst, ctxt); // The checked value is not that important, but in case this changes, // likely due to a EPSG upgrade, worth checking // We want to make sure that the horizontal adjustments before and after // the vertical transformation are the reverse of each other, and there are // not mixes with different alternative operations (like California grid // forward and Nevada grid reverse) ASSERT_EQ(list.size(), 21U); // Check that unit conversion is OK auto op_proj = list[0]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_EQ(op_proj, "+proj=pipeline " "+step +proj=unitconvert +xy_in=us-ft +xy_out=m " "+step +inv +proj=lcc +lat_0=39.3333333333333 +lon_0=-122 " "+lat_1=41.6666666666667 +lat_2=40 +x_0=2000000.0001016 " "+y_0=500000.0001016 +ellps=GRS80 " "+step +proj=hgridshift +grids=us_noaa_cnhpgn.tif " "+step +proj=gridshift +no_z_transform " "+grids=us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif " "+step +proj=unitconvert +z_in=us-ft +z_out=m " "+step +proj=vgridshift +grids=us_noaa_geoid03_conus.tif " "+multiplier=1 " "+step +inv +proj=gridshift " "+grids=us_noaa_nadcon5_nad83_harn_nad83_fbn_conus.tif " "+step +inv +proj=hgridshift +grids=us_noaa_cnhpgn.tif " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_3D_KNOWN_AVAILABLE_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse::KNOWN_AVAILABLE); auto list = CoordinateOperationFactory::create()->createOperations( authFactory->createCoordinateReferenceSystem( "9537"), // RGAF09 + Martinique 1987 height authFactory->createCoordinateReferenceSystem("4557"), // RRAF 1991 ctxt); ASSERT_GE(list.size(), 2U); // Make sure that "RGAF09 to Martinique 1987 height (2)" (using RAMART2016) // is listed first EXPECT_EQ(list[0]->nameStr(), "Inverse of RGAF09 to Martinique 1987 height (2) + " "Inverse of RRAF 1991 to RGAF09 (1)"); EXPECT_EQ(list[1]->nameStr(), "Inverse of RRAF 1991 to RGAF09 (1) + " "Inverse of RRAF 1991 to Martinique 1987 height (1)"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_from_wkt_without_id_to_geogCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"NAD83(2011) + NAVD88 height\",\n" " GEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System 2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " VERTCRS[\"NAVD88 height\",\n" " VDATUM[\"North American Vertical Datum 1988\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem("6319"); // NAD83(2011) auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); // NAD83(2011) + NAVD88 height auto srcRefObj = createFromUserInput("EPSG:6318+5703", authFactory->databaseContext(), false); auto srcRef = nn_dynamic_pointer_cast(srcRefObj); ASSERT_TRUE(srcRef != nullptr); ASSERT_TRUE( src->isEquivalentTo(srcRef.get(), IComparable::Criterion::EQUIVALENT)); auto listRef = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcRef), dst, ctxt); EXPECT_EQ(list.size(), listRef.size()); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_of_projCRS_from_wkt_without_id_or_extent_to_geogCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"NAD83 / Pennsylvania South + NAVD88 height\",\n" " PROJCRS[\"NAD83 / Pennsylvania South\",\n" " BASEGEOGCRS[\"NAD83\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"SPCS83 Pennsylvania South zone (meters)\",\n" " METHOD[\"Lambert Conic Conformal (2SP)\",\n" " ID[\"EPSG\",9802]],\n" " PARAMETER[\"Latitude of false origin\",39.3333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",-77.75,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard " "parallel\",40.9666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard " "parallel\",39.9333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",600000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]],\n" " VERTCRS[\"NAVD88 height\",\n" " VDATUM[\"North American Vertical Datum 1988\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem("4269"); // NAD83 auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); // NAD83 / Pennsylvania South + NAVD88 height auto srcRefObj = createFromUserInput("EPSG:32129+5703", authFactory->databaseContext(), false); auto srcRef = nn_dynamic_pointer_cast(srcRefObj); ASSERT_TRUE(srcRef != nullptr); ASSERT_TRUE( src->isEquivalentTo(srcRef.get(), IComparable::Criterion::EQUIVALENT)); auto listRef = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcRef), dst, ctxt); EXPECT_EQ(list.size(), listRef.size()); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_with_vertical_unit_change) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 height (ftUS) auto srcObj = createFromUserInput("EPSG:6318+6360", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("6319"); // NAD83(2011) 3D auto listCompoundToGeog = CoordinateOperationFactory::create()->createOperations(nnSrc, dst, ctxt); ASSERT_TRUE(!listCompoundToGeog.empty()); // NAD83(2011) + NAVD88 height auto srcObjCompoundVMetre = createFromUserInput( "EPSG:6318+5703", authFactory->databaseContext(), false); auto srcCompoundVMetre = nn_dynamic_pointer_cast(srcObjCompoundVMetre); ASSERT_TRUE(srcCompoundVMetre != nullptr); auto listCompoundMetreToGeog = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCompoundVMetre), dst, ctxt); // Check that we get the same and similar results whether we start from // regular NAVD88 height or its ftUs variant ASSERT_EQ(listCompoundToGeog.size(), listCompoundMetreToGeog.size()); EXPECT_EQ(listCompoundToGeog[0]->nameStr(), "Conversion from NAVD88 height (ftUS) to NAVD88 height + " + listCompoundMetreToGeog[0]->nameStr()); EXPECT_EQ( listCompoundToGeog[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), replaceAll(listCompoundMetreToGeog[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+step +proj=unitconvert +xy_in=deg +xy_out=rad", "+step +proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=rad " "+z_out=m")); // Check reverse path auto listGeogToCompound = CoordinateOperationFactory::create()->createOperations(dst, nnSrc, ctxt); EXPECT_EQ(listGeogToCompound.size(), listCompoundToGeog.size()); } // --------------------------------------------------------------------------- // Use case of https://github.com/OSGeo/PROJ/issues/3938 TEST(operation, compoundCRS_ftUS_to_geogCRS_ft) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 height (ftUS) auto srcObj = createFromUserInput("EPSG:6318+6360", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("6319")->alterCSLinearUnit( UnitOfMeasure::FOOT); // NAD83(2011) with foot auto res = CoordinateOperationFactory::create()->createOperations( nnSrc, dst, ctxt); ASSERT_TRUE(!res.empty()); EXPECT_EQ( res[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=rad +z_out=m " "+step +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=ft " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( res.back()->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=deg +z_out=ft"); auto resInv = CoordinateOperationFactory::create()->createOperations( dst, nnSrc, ctxt); ASSERT_TRUE(!resInv.empty()); EXPECT_EQ( resInv[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=ft +xy_out=rad +z_out=m " "+step +inv +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=us-ft " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( resInv.back()->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=unitconvert +xy_in=deg +z_in=ft +xy_out=deg +z_out=us-ft"); } // --------------------------------------------------------------------------- // Use case of https://github.com/OSGeo/PROJ/issues/3938 TEST(operation, compoundCRS_ft_to_geogCRS_ft) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 height (ft) auto srcObj = createFromUserInput("EPSG:6318+8228", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("6319")->alterCSLinearUnit( UnitOfMeasure::FOOT); // NAD83(2011) with foot auto res = CoordinateOperationFactory::create()->createOperations( nnSrc, dst, ctxt); ASSERT_TRUE(!res.empty()); EXPECT_EQ( res[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=ft +xy_out=rad +z_out=m " "+step +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=ft " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( res.back()->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=noop"); auto resInv = CoordinateOperationFactory::create()->createOperations( dst, nnSrc, ctxt); ASSERT_TRUE(!resInv.empty()); EXPECT_EQ( resInv[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=ft +xy_out=rad +z_out=m " "+step +inv +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=ft " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( resInv.back()->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=noop"); } // --------------------------------------------------------------------------- // Use case of https://github.com/OSGeo/PROJ/issues/3938 TEST(operation, compoundCRS_m_to_geogCRS_ft) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 height auto srcObj = createFromUserInput("EPSG:6318+5703", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("6319")->alterCSLinearUnit( UnitOfMeasure::FOOT); // NAD83(2011) with foot auto res = CoordinateOperationFactory::create()->createOperations( nnSrc, dst, ctxt); ASSERT_TRUE(!res.empty()); EXPECT_EQ( res[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=ft " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( res.back()->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=unitconvert +z_in=m +z_out=ft"); auto resInv = CoordinateOperationFactory::create()->createOperations( dst, nnSrc, ctxt); ASSERT_TRUE(!resInv.empty()); EXPECT_EQ( resInv[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=ft +xy_out=rad +z_out=m " "+step +inv +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( resInv.back()->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+proj=unitconvert +z_in=ft +z_out=m"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_geogCRS_with_vertical_unit_change_and_complex_horizontal_change) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 height (ftUS) auto srcObj = createFromUserInput("EPSG:6318+6360", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("7665"); // WGS84(G1762) 3D auto listCompoundToGeog = CoordinateOperationFactory::create()->createOperations(nnSrc, dst, ctxt); // NAD83(2011) + NAVD88 height auto srcObjCompoundVMetre = createFromUserInput( "EPSG:6318+5703", authFactory->databaseContext(), false); auto srcCompoundVMetre = nn_dynamic_pointer_cast(srcObjCompoundVMetre); ASSERT_TRUE(srcCompoundVMetre != nullptr); auto listCompoundMetreToGeog = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCompoundVMetre), dst, ctxt); // Check that we get the same and similar results whether we start from // regular NAVD88 height or its ftUs variant ASSERT_EQ(listCompoundToGeog.size(), listCompoundMetreToGeog.size()); ASSERT_GE(listCompoundToGeog.size(), 1U); EXPECT_EQ(listCompoundToGeog[0]->nameStr(), "Conversion from NAVD88 height (ftUS) to NAVD88 height + " + listCompoundMetreToGeog[0]->nameStr()); EXPECT_EQ( listCompoundToGeog[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), replaceAll(listCompoundMetreToGeog[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+step +proj=unitconvert +xy_in=deg +xy_out=rad", "+step +proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=rad " "+z_out=m")); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_geogCRS_with_height_depth_reversal) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 depth auto srcObj = createFromUserInput("EPSG:6318+6357", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("6319"); // NAD83(2011) 3D auto listCompoundToGeog = CoordinateOperationFactory::create()->createOperations(nnSrc, dst, ctxt); ASSERT_TRUE(!listCompoundToGeog.empty()); // NAD83(2011) + NAVD88 height auto srcObjCompoundVMetre = createFromUserInput( "EPSG:6318+5703", authFactory->databaseContext(), false); auto srcCompoundVMetre = nn_dynamic_pointer_cast(srcObjCompoundVMetre); ASSERT_TRUE(srcCompoundVMetre != nullptr); auto listCompoundMetreToGeog = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCompoundVMetre), dst, ctxt); // Check that we get the same and similar results whether we start from // regular NAVD88 height or its depth variant ASSERT_EQ(listCompoundToGeog.size(), listCompoundMetreToGeog.size()); EXPECT_EQ(listCompoundToGeog[0]->nameStr(), "Conversion from NAVD88 depth to NAVD88 height + " + listCompoundMetreToGeog[0]->nameStr()); EXPECT_EQ( listCompoundToGeog[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), replaceAll(listCompoundMetreToGeog[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+step +proj=unitconvert +xy_in=deg +xy_out=rad", "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=axisswap +order=1,2,-3")); // Check reverse path auto listGeogToCompound = CoordinateOperationFactory::create()->createOperations(dst, nnSrc, ctxt); EXPECT_EQ(listGeogToCompound.size(), listCompoundToGeog.size()); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_to_geogCRS_with_vertical_unit_change_and_height_depth_reversal) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); // NAD83(2011) + NAVD88 depth (ftUS) auto srcObj = createFromUserInput("EPSG:6318+6358", authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto nnSrc = NN_NO_CHECK(src); auto dst = authFactory->createCoordinateReferenceSystem("6319"); // NAD83(2011) 3D auto listCompoundToGeog = CoordinateOperationFactory::create()->createOperations(nnSrc, dst, ctxt); ASSERT_TRUE(!listCompoundToGeog.empty()); // NAD83(2011) + NAVD88 height auto srcObjCompoundVMetre = createFromUserInput( "EPSG:6318+5703", authFactory->databaseContext(), false); auto srcCompoundVMetre = nn_dynamic_pointer_cast(srcObjCompoundVMetre); ASSERT_TRUE(srcCompoundVMetre != nullptr); auto listCompoundMetreToGeog = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(srcCompoundVMetre), dst, ctxt); // Check that we get the same and similar results whether we start from // regular NAVD88 height or its depth (ftUS) variant ASSERT_EQ(listCompoundToGeog.size(), listCompoundMetreToGeog.size()); EXPECT_EQ(listCompoundToGeog[0]->nameStr(), "Conversion from NAVD88 depth (ftUS) to NAVD88 height + " + listCompoundMetreToGeog[0]->nameStr()); EXPECT_EQ( listCompoundToGeog[0]->exportToPROJString( PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), replaceAll(listCompoundMetreToGeog[0]->exportToPROJString( PROJStringFormatter::create( PROJStringFormatter::Convention::PROJ_5, authFactory->databaseContext()) .get()), "+step +proj=unitconvert +xy_in=deg +xy_out=rad", "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=affine +s33=-0.304800609601219")); // Check reverse path auto listGeogToCompound = CoordinateOperationFactory::create()->createOperations(dst, nnSrc, ctxt); EXPECT_EQ(listGeogToCompound.size(), listCompoundToGeog.size()); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_of_vertCRS_with_geoid_model_to_geogCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"NAD83 / Pennsylvania South + NAVD88 height\",\n" " PROJCRS[\"NAD83 / Pennsylvania South\",\n" " BASEGEOGCRS[\"NAD83\",\n" " DATUM[\"North American Datum 1983\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"SPCS83 Pennsylvania South zone (meters)\",\n" " METHOD[\"Lambert Conic Conformal (2SP)\",\n" " ID[\"EPSG\",9802]],\n" " PARAMETER[\"Latitude of false origin\",39.3333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false origin\",-77.75,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard " "parallel\",40.9666666666667,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard " "parallel\",39.9333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",600000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]],\n" " VERTCRS[\"NAVD88 height\",\n" " VDATUM[\"North American Vertical Datum 1988\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " GEOIDMODEL[\"GEOID12B\"]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem("4269")->promoteTo3D( std::string(), authFactory->databaseContext()); // NAD83 auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_TRUE(!list.empty()); EXPECT_EQ(list[0]->nameStr(), "Inverse of SPCS83 Pennsylvania South zone (meters) + " "Ballpark geographic offset from NAD83 to NAD83(2011) + " "Inverse of NAD83(2011) to NAVD88 height (1) + " "Ballpark geographic offset from NAD83(2011) to NAD83"); auto op_proj = list[0]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_EQ( op_proj, "+proj=pipeline " "+step +inv +proj=lcc +lat_0=39.3333333333333 +lon_0=-77.75 " "+lat_1=40.9666666666667 +lat_2=39.9333333333333 +x_0=600000 " "+y_0=0 +ellps=GRS80 " "+step +proj=vgridshift +grids=us_noaa_g2012bu0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_of_horizCRS_with_TOWGS84_vertCRS_with_geoid_model_to_geogCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPD_CS[\"NAD83(CSRS) + CGVD28 height - HT2_0\",\n" " GEOGCS[\"NAD83(CSRS)\",\n" " DATUM[\"NAD83_Canadian_Spatial_Reference_System\",\n" " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n" " AUTHORITY[\"EPSG\",\"7019\"]],\n" " TOWGS84[0,0,0,0,0,0,0],\n" " AUTHORITY[\"EPSG\",\"6140\"]],\n" " PRIMEM[\"Greenwich\",0,\n" " AUTHORITY[\"EPSG\",\"8901\"]],\n" " UNIT[\"degree\",0.0174532925199433,\n" " AUTHORITY[\"EPSG\",\"9122\"]],\n" " AUTHORITY[\"EPSG\",\"4617\"]],\n" " VERT_CS[\"CGVD28 height - HT2_0\",\n" " VERT_DATUM[\"Canadian Geodetic Vertical Datum of " "1928\",2005,\n" " EXTENSION[\"PROJ4_GRIDS\",\"HT2_0.gtx\"],\n" " AUTHORITY[\"EPSG\",\"5114\"]],\n" " UNIT[\"metre\",1,\n" " AUTHORITY[\"EPSG\",\"9001\"]],\n" " AXIS[\"Gravity-related height\",UP],\n" " AUTHORITY[\"EPSG\",\"5713\"]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); // NAD83(CSRS) 3D auto dst = authFactory->createCoordinateReferenceSystem("4955"); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_EQ(list.size(), 1U); auto op_proj = list[0]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_EQ(op_proj, "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=HT2_0.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_of_vertCRS_with_geoid_model_by_id_to_geogCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"NAD83(CSRS) / MTM zone 7 + CGVD28 height\",\n" " PROJCRS[\"NAD83(CSRS) / MTM zone 7\",\n" " BASEGEOGCRS[\"NAD83(CSRS)\",\n" " DATUM[\"North American Datum of 1983 (CSRS)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"MTM zone 7\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-70.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",304800,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (E(X))\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (N(Y))\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]],\n" " VERTCRS[\"CGVD28 height\",\n" " VDATUM[\"Canadian Geodetic Vertical Datum of 1928\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " GEOIDMODEL[\"HT2_2002v70\",\n" " ID[\"EPSG\",9985]],\n" " ID[\"EPSG\",5713]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem("4955")->promoteTo3D( std::string(), authFactory->databaseContext()); // NAD83(CSRS) 3d auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_TRUE(!list.empty()); EXPECT_EQ(list[0]->nameStr(), "Inverse of MTM zone 7 + " "Ballpark geographic offset from NAD83(CSRS) to NAD83(CSRS)v4 + " "Inverse of NAD83(CSRS)v4 to CGVD28 height (1) + " "Ballpark geographic offset from NAD83(CSRS)v4 to NAD83(CSRS)"); } // --------------------------------------------------------------------------- TEST( operation, compoundCRS_of_vertCRS_with_geoid_model_by_name_and_several_records_to_geogCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"Compound CRS NAD83(2011) / Puerto Rico and Virgin Is. + " "VIVD09 height + PROJ us_noaa_g2012bp0.tif\",\n" " PROJCRS[\"NAD83(2011) / Puerto Rico and Virgin Is.\",\n" " BASEGEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System " "2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",6318]],\n" " CONVERSION[\"SPCS83Puerto Rico & Virgin Islands zone " "(meter)\",\n" " METHOD[\"Lambert Conic Conformal (2SP)\",\n" " ID[\"EPSG\",9802]],\n" " PARAMETER[\"Latitude of false origin\",17.8333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8821]],\n" " PARAMETER[\"Longitude of false " "origin\",-66.4333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8822]],\n" " PARAMETER[\"Latitude of 1st standard " "parallel\",18.4333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8823]],\n" " PARAMETER[\"Latitude of 2nd standard " "parallel\",18.0333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8824]],\n" " PARAMETER[\"Easting at false origin\",200000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8826]],\n" " PARAMETER[\"Northing at false origin\",200000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8827]],\n" " ID[\"EPSG\",15230]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (X)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"northing (Y)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " VERTCRS[\"VIVD09 height + PROJ us_noaa_g2012bp0.tif\",\n" " VDATUM[\"Virgin Islands Vertical Datum of 2009\",\n" " ID[\"EPSG\",1124]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " GEOIDMODEL[\"PROJ us_noaa_g2012bp0.tif\"]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem("6319")->promoteTo3D( std::string(), authFactory->databaseContext()); // NAD83(2011) 3d auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_TRUE(!list.empty()); EXPECT_STREQ(list[0]->nameStr().c_str(), "Inverse of SPCS83Puerto Rico & Virgin Islands zone (meter) + " "Transformation from VIVD09 height + " "PROJ us_noaa_g2012bp0.tif to NAD83(2011)"); auto op_proj = list[0]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_STREQ(op_proj.c_str(), "+proj=pipeline " "+step +inv +proj=lcc +lat_0=17.8333333333333 " "+lon_0=-66.4333333333333 +lat_1=18.4333333333333 " "+lat_2=18.0333333333333 +x_0=200000 +y_0=200000 +ellps=GRS80 " "+step +proj=vgridshift +grids=us_noaa_g2012bp0.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); ASSERT_EQ(list[0]->domains().size(), 1U); auto domain = list[0]->domains()[0]; ASSERT_TRUE(domain->domainOfValidity() != nullptr); EXPECT_TRUE(domain->domainOfValidity()->description().has_value()); // This is the thing we actually want to check, that the area of use // is the one of Virgin Islands, and not Puerto Rico EXPECT_STREQ( domain->domainOfValidity()->description()->c_str(), "US Virgin Islands - onshore - St Croix, St John, and St Thomas."); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_of_vertCRS_with_geoid_model_by_name_and_datum_ensemble) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"Compound CRS OSGB36 / British National Grid + ODN " "height + PROJ uk_os_OSGM15_GB.tif\",\n" " PROJCRS[\"OSGB36 / British National Grid\",\n" " BASEGEOGCRS[\"OSGB36\",\n" " DATUM[\"Ordnance Survey of Great Britain 1936\",\n" " ELLIPSOID[\"Airy 1830\",6377563.396,299.3249646,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4277]],\n" " CONVERSION[\"British National Grid\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",49,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural " "origin\",0.9996012717,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",400000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",-100000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"Engineering survey, topographic mapping.\"],\n" " AREA[\"United Kingdom (UK) - offshore to boundary of UKCS " "within 49°45'N to 61°N and 9°W to 2°E; onshore Great Britain " "(England, Wales and Scotland). Isle of Man onshore.\"],\n" " BBOX[49.75,-9.01,61.01,2.01]],\n" " ID[\"EPSG\",27700]],\n" " VERTCRS[\"ODN height + PROJ uk_os_OSGM15_GB.tif\",\n" " VDATUM[\"Ordnance Datum Newlyn\",\n" " ID[\"EPSG\",5101]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " GEOIDMODEL[\"PROJ uk_os_OSGM15_GB.tif\"]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem("4936")->promoteTo3D( std::string(), authFactory->databaseContext()); // ETRS89 geocentric auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_TRUE(!list.empty()); auto op_proj = list[0]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_STREQ(op_proj.c_str(), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 " "+x_0=400000 +y_0=-100000 +ellps=airy " "+step +proj=hgridshift " "+grids=uk_os_OSTN15_NTv2_OSGBtoETRS.tif " "+step +proj=vgridshift " "+grids=uk_os_OSGM15_GB.tif +multiplier=1 " "+step +proj=cart +ellps=GRS80"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_of_bound_horizCRS_and_bound_vertCRS_to_geogCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "COMPOUNDCRS[\"CH1903 / LV03 + EGM96 height\",\n" " BOUNDCRS[\n" " SOURCECRS[\n" " PROJCRS[\"CH1903 / LV03\",\n" " BASEGEOGCRS[\"CH1903\",\n" " DATUM[\"CH1903\",\n" " ELLIPSOID[\"Bessel " "1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4149]],\n" " CONVERSION[\"Swiss Oblique Mercator 1903M\",\n" " METHOD[\"Hotine Oblique Mercator (variant B)\",\n" " ID[\"EPSG\",9815]],\n" " PARAMETER[\"Latitude of projection " "centre\",46.9524055555556,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection " "centre\",7.43958333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth of initial line\",90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Angle from Rectified to Skew " "Grid\",90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8814]],\n" " PARAMETER[\"Scale factor on initial line\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"Easting at projection " "centre\",600000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8816]],\n" " PARAMETER[\"Northing at projection " "centre\",200000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8817]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (Y)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1]],\n" " AXIS[\"northing (X)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",4326]]],\n" " ABRIDGEDTRANSFORMATION[\"CH1903 to WGS 84 (2)\",\n" " VERSION[\"BfL-CH 2\"],\n" " METHOD[\"Geocentric translations (geog2D domain)\",\n" " ID[\"EPSG\",9603]],\n" " PARAMETER[\"X-axis translation\",674.374,\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",15.056,\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",405.346,\n" " ID[\"EPSG\",8607]]]],\n" " BOUNDCRS[\n" " SOURCECRS[\n" " VERTCRS[\"EGM96 height\",\n" " VDATUM[\"EGM96 geoid\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"Geodesy.\"],\n" " AREA[\"World.\"],\n" " BBOX[-90,-180,90,180]],\n" " ID[\"EPSG\",5773]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[\"WGS 84 to EGM96 height (1)\",\n" " METHOD[\"Geographic3D to GravityRelatedHeight (EGM)\",\n" " ID[\"EPSG\",9661]],\n" " PARAMETERFILE[\"Geoid (height correction) model " "file\",\"us_nga_egm96_15.tif\"]]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); // WGS 84 3D auto dst = authFactory->createCoordinateReferenceSystem("4979"); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_EQ(list.size(), 1U); auto op_proj = list[0]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_EQ(op_proj, "+proj=pipeline " "+step +inv +proj=somerc +lat_0=46.9524055555556 " "+lon_0=7.43958333333333 +k_0=1 " "+x_0=600000 +y_0=200000 +ellps=bessel " "+step +proj=push +v_3 " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=674.374 +y=15.056 +z=405.346 " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_from_WKT2_to_geogCRS_3D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto src = authFactory->createCoordinateReferenceSystem( "7415"); // Amersfoort / RD New + NAP height auto dst = authFactory->createCoordinateReferenceSystem("4937"); // ETRS89 3D auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_GE(list.size(), 1U); auto wkt2 = src->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get()); auto obj = WKTParser().createFromWKT(wkt2); auto src_from_wkt2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(src_from_wkt2 != nullptr); auto list2 = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src_from_wkt2), dst, ctxt); ASSERT_GE(list.size(), list2.size()); for (size_t i = 0; i < list.size(); i++) { const auto &op = list[i]; const auto &op2 = list2[i]; EXPECT_TRUE( op->isEquivalentTo(op2.get(), IComparable::Criterion::EQUIVALENT)); } } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_from_WKT2_no_id_to_geogCRS_3D_context) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto src = authFactory->createCoordinateReferenceSystem( "7415"); // Amersfoort / RD New + NAP height auto dst = authFactory->createCoordinateReferenceSystem("4937"); // ETRS89 3D auto list = CoordinateOperationFactory::create()->createOperations(src, dst, ctxt); ASSERT_GE(list.size(), 1U); { auto op_proj = list[0]->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_EQ( op_proj, "+proj=pipeline +step +inv +proj=sterea +lat_0=52.1561605555556 " "+lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 " "+ellps=bessel " "+step +proj=hgridshift +grids=nl_nsgi_rdtrans2018.tif " "+step +proj=vgridshift +grids=nl_nsgi_nlgeo2018.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } auto wkt2 = "COMPOUNDCRS[\"unknown\",\n" " PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"Amersfoort\",\n" " DATUM[\"Amersfoort\",\n" " ELLIPSOID[\"Bessel " "1841\",6377397.155,299.1528128]]],\n" " CONVERSION[\"unknown\",\n" " METHOD[\"Oblique Stereographic\"],\n" " PARAMETER[\"Latitude of natural origin\",52.1561605555556],\n" " PARAMETER[\"Longitude of natural origin\",5.38763888888889],\n" " PARAMETER[\"Scale factor at natural origin\",0.9999079],\n" " PARAMETER[\"False easting\",155000],\n" " PARAMETER[\"False northing\",463000]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east],\n" " AXIS[\"(N)\",north],\n" " LENGTHUNIT[\"metre\",1]],\n" " VERTCRS[\"NAP height\",\n" " VDATUM[\"Normaal Amsterdams Peil\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]]],\n" " USAGE[\n" " SCOPE[\"unknown\"],\n" " AREA[\"Netherlands - onshore\"],\n" " BBOX[50.75,3.2,53.7,7.22]]]"; auto obj = WKTParser().createFromWKT(wkt2); auto src_from_wkt2 = nn_dynamic_pointer_cast(obj); ASSERT_TRUE(src_from_wkt2 != nullptr); auto list2 = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src_from_wkt2), dst, ctxt); ASSERT_EQ(list.size(), list2.size()); for (size_t i = 0; i < list.size(); i++) { const auto &op = list[i]; const auto &op2 = list2[i]; auto op_proj = op->exportToPROJString(PROJStringFormatter::create().get()); auto op2_proj = op2->exportToPROJString(PROJStringFormatter::create().get()); EXPECT_EQ(op_proj, op2_proj) << "op=" << op->nameStr() << " op2=" << op2->nameStr(); } } // --------------------------------------------------------------------------- TEST(operation, proj3DCRS_with_non_meter_horiz_and_vertical_to_geog) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=31 +datum=WGS84 +units=us-ft +vunits=us-ft +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), authFactory->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 1U); // Check that vertical unit conversion is done just once EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=us-ft +z_in=us-ft " "+xy_out=m +z_out=m " "+step +inv +proj=utm +zone=31 +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_non_meter_horiz_and_vertical_to_geog) { auto objSrc = WKTParser().createFromWKT( "COMPOUNDCRS[\"unknown\",\n" " PROJCRS[\"unknown\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"UTM zone 31N\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",3,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",500000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]],\n" " ID[\"EPSG\",16031]],\n" " CS[Cartesian,2],\n" " AXIS[\"(E)\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219,\n" " ID[\"EPSG\",9003]]],\n" " AXIS[\"(N)\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219,\n" " ID[\"EPSG\",9003]]]],\n" " VERTCRS[\"unknown\",\n" " VDATUM[\"unknown\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219,\n" " ID[\"EPSG\",9003]]]]]" ); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), authFactory->createCoordinateReferenceSystem("4979"), ctxt); ASSERT_EQ(list.size(), 1U); // Check that vertical unit conversion is done just once EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=us-ft +xy_out=m " "+step +inv +proj=utm +zone=31 +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +z_in=us-ft " "+xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_to_compoundCRS) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +nadgrids=@bar.gsb +geoidgrids=@bar.gtx " "+geoid_crs=horizontal_crs " "+type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=hgridshift +grids=@foo.gsb " "+step +inv +proj=hgridshift +grids=@bar.gsb " "+step +inv +proj=vgridshift +grids=@bar.gtx +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); auto opInverse = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(dst), NN_CHECK_ASSERT(src)); ASSERT_TRUE(opInverse != nullptr); EXPECT_TRUE(opInverse->inverse()->_isEquivalentTo(op.get())); } // --------------------------------------------------------------------------- TEST(operation, boundCRS_to_compoundCRS_with_hubCRS_same_as_compound_geographicCRS) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto wkt = "BOUNDCRS[\n" " SOURCECRS[\n" " PROJCRS[\"CH1903 / LV03\",\n" " BASEGEOGCRS[\"CH1903\",\n" " DATUM[\"CH1903\",\n" " ELLIPSOID[\"Bessel " "1841\",6377397.155,299.1528128,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6149]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " CONVERSION[\"unnamed\",\n" " METHOD[\"Hotine Oblique Mercator (variant B)\",\n" " ID[\"EPSG\",9815]],\n" " PARAMETER[\"Latitude of projection " "centre\",46.9524055555556,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8811]],\n" " PARAMETER[\"Longitude of projection " "centre\",7.43958333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8812]],\n" " PARAMETER[\"Azimuth of initial line\",90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8813]],\n" " PARAMETER[\"Angle from Rectified to Skew Grid\",90,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8814]],\n" " PARAMETER[\"Scale factor on initial line\",1,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8815]],\n" " PARAMETER[\"Easting at projection centre\",600000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8816]],\n" " PARAMETER[\"Northing at projection centre\",200000,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8817]]],\n" " CS[Cartesian,3],\n" " AXIS[\"y\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"x\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",4979]]],\n" " ABRIDGEDTRANSFORMATION[\"Transformation from CH1903 to WGS84\",\n" " METHOD[\"Position Vector transformation (geog2D domain)\",\n" " ID[\"EPSG\",9606]],\n" " PARAMETER[\"X-axis translation\",674.4,\n" " ID[\"EPSG\",8605]],\n" " PARAMETER[\"Y-axis translation\",15.1,\n" " ID[\"EPSG\",8606]],\n" " PARAMETER[\"Z-axis translation\",405.3,\n" " ID[\"EPSG\",8607]],\n" " PARAMETER[\"X-axis rotation\",0,\n" " ID[\"EPSG\",8608]],\n" " PARAMETER[\"Y-axis rotation\",0,\n" " ID[\"EPSG\",8609]],\n" " PARAMETER[\"Z-axis rotation\",0,\n" " ID[\"EPSG\",8610]],\n" " PARAMETER[\"Scale difference\",1,\n" " ID[\"EPSG\",8611]]]]"; auto srcObj = createFromUserInput(wkt, authFactory->databaseContext(), false); auto src = nn_dynamic_pointer_cast(srcObj); ASSERT_TRUE(src != nullptr); auto dst = authFactory->createCoordinateReferenceSystem( "9518"); // "WGS 84 + EGM2008 height" auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), dst, ctxt); ASSERT_GE(list.size(), 1U); // Check that BoundCRS helmert transformation is used EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=somerc +lat_0=46.9524055555556 " "+lon_0=7.43958333333333 +k_0=1 " "+x_0=600000 +y_0=200000 +ellps=bessel " "+step +proj=cart +ellps=bessel " "+step +proj=helmert +x=674.4 +y=15.1 +z=405.3 +rx=0 +ry=0 +rz=0 " "+s=0 +convention=position_vector " "+step +inv +proj=cart +ellps=WGS84 " "+step +inv +proj=vgridshift +grids=us_nga_egm08_25.tif " "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, IGNF_LAMB1_TO_EPSG_4326) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), std::string()); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); ctxt->setAllowUseIntermediateCRS( CoordinateOperationContext::IntermediateCRSUse::ALWAYS); auto list = CoordinateOperationFactory::create()->createOperations( AuthorityFactory::create(DatabaseContext::create(), "IGNF") ->createCoordinateReferenceSystem("LAMB1"), AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=lcc +lat_1=49.5 +lat_0=49.5 " "+lon_0=0 +k_0=0.99987734 +x_0=600000 +y_0=200000 " "+ellps=clrk80ign +pm=paris +step +proj=hgridshift " "+grids=fr_ign_ntf_r93.tif +step +proj=unitconvert +xy_in=rad " "+xy_out=deg +step +proj=axisswap +order=2,1"); EXPECT_FALSE(list[1]->hasBallparkTransformation()); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=lcc +lat_1=49.5 +lat_0=49.5 " "+lon_0=0 +k_0=0.99987734 +x_0=600000 +y_0=200000 " "+ellps=clrk80ign +pm=paris +step +proj=push +v_3 +step " "+proj=cart +ellps=clrk80ign +step +proj=helmert +x=-168 +y=-60 " "+z=320 +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg +step " "+proj=axisswap +order=2,1"); auto list2 = CoordinateOperationFactory::create()->createOperations( AuthorityFactory::create(DatabaseContext::create(), "EPSG") // NTF (Paris) / Lambert Nord France equivalent to IGNF:LAMB1 ->createCoordinateReferenceSystem("27561"), AuthorityFactory::create(DatabaseContext::create(), "EPSG") ->createCoordinateReferenceSystem("4326"), ctxt); ASSERT_GE(list2.size(), 3U); EXPECT_EQ(replaceAll(list2[0]->exportToPROJString( PROJStringFormatter::create().get()), "0.999877341", "0.99987734"), list[0]->exportToPROJString(PROJStringFormatter::create().get())); // The second entry in list2 (list2[1]) uses the // weird +pm=2.33720833333333 from "NTF (Paris) to NTF (2)" // so skip to the 3th method EXPECT_EQ(replaceAll(list2[2]->exportToPROJString( PROJStringFormatter::create().get()), "0.999877341", "0.99987734"), list[1]->exportToPROJString(PROJStringFormatter::create().get())); } // --------------------------------------------------------------------------- TEST(operation, NAD83_to_projeted_CRS_based_on_NAD83_2011) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( // NAD83 authFactory->createCoordinateReferenceSystem("4269"), // NAD83(2011) / California Albers authFactory->createCoordinateReferenceSystem("6414"), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "Ballpark geographic offset from NAD83 to " "NAD83(2011) + California Albers"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=aea +lat_0=0 +lon_0=-120 +lat_1=34 " "+lat_2=40.5 +x_0=0 +y_0=-4000000 +ellps=GRS80"); } // --------------------------------------------------------------------------- TEST(operation, isPROJInstantiable) { { auto transformation = Transformation::createGeocentricTranslations( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, 1.0, 2.0, 3.0, {}); EXPECT_TRUE(transformation->isPROJInstantiable( DatabaseContext::create(), false)); } // Missing grid { auto transformation = Transformation::createNTv2( PropertyMap(), GeographicCRS::EPSG_4807, GeographicCRS::EPSG_4326, "foo.gsb", std::vector()); EXPECT_FALSE(transformation->isPROJInstantiable( DatabaseContext::create(), false)); } // Unsupported method { auto transformation = Transformation::create( PropertyMap(), GeographicCRS::EPSG_4269, GeographicCRS::EPSG_4326, nullptr, OperationMethod::create(PropertyMap(), std::vector{}), std::vector{}, std::vector{}); EXPECT_FALSE(transformation->isPROJInstantiable( DatabaseContext::create(), false)); } } // --------------------------------------------------------------------------- TEST(operation, createOperation_on_crs_with_canonical_bound_crs) { auto boundCRS = BoundCRS::createFromTOWGS84( GeographicCRS::EPSG_4267, std::vector{1, 2, 3, 4, 5, 6, 7}); auto crs = boundCRS->baseCRSWithCanonicalBoundCRS(); { auto op = CoordinateOperationFactory::create()->createOperation( crs, GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_TRUE(op->isEquivalentTo(boundCRS->transformation().get())); { auto wkt1 = op->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019) .get()); auto wkt2 = boundCRS->transformation()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019) .get()); EXPECT_EQ(wkt1, wkt2); } } { auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, crs); ASSERT_TRUE(op != nullptr); EXPECT_TRUE( op->isEquivalentTo(boundCRS->transformation()->inverse().get())); { auto wkt1 = op->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019) .get()); auto wkt2 = boundCRS->transformation()->inverse()->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT2_2019) .get()); EXPECT_EQ(wkt1, wkt2); } } } // --------------------------------------------------------------------------- TEST(operation, createOperation_fallback_to_proj4_strings) { auto objDest = PROJStringParser().createFromPROJString( "+proj=longlat +over +datum=WGS84 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=longlat +over +datum=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_fallback_to_proj4_strings_bound_of_geog) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +over +ellps=GRS80 +towgs84=0,0,0 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=longlat +over +ellps=clrk66 +towgs84=0,0,0 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=longlat +over +ellps=GRS80 +towgs84=0,0,0 " "+step +proj=longlat +over +ellps=clrk66 +towgs84=0,0,0 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST( operation, createOperation_fallback_to_proj4_strings_regular_with_datum_to_projliteral) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=11 +datum=NAD27 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +over +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=11 +datum=NAD27 " "+step +proj=longlat +datum=WGS84 +over " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_fallback_to_proj4_strings_proj_NAD83_to_projliteral) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=11 +datum=NAD83 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +over +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=11 +ellps=GRS80 " "+step +proj=longlat +datum=WGS84 +over " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_fallback_to_proj4_strings_geog_NAD83_to_projliteral) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +datum=NAD83 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +over +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=longlat +datum=WGS84 +over " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST( operation, createOperation_fallback_to_proj4_strings_regular_with_nadgrids_to_projliteral) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=11 +ellps=clrk66 +nadgrids=@conus +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +over +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=11 +ellps=clrk66 +nadgrids=@conus " "+step +proj=longlat +datum=WGS84 +over " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_fallback_to_proj4_strings_projliteral_to_projliteral) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=11 +datum=NAD27 +over +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +over +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=11 +datum=NAD27 +over " "+step +proj=longlat +datum=WGS84 +over " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST( operation, createOperation_fallback_to_proj4_strings_regular_to_projliteral_with_towgs84) { auto objSrc = createFromUserInput("EPSG:4326", DatabaseContext::create(), false); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=utm +zone=31 +ellps=GRS80 +towgs84=1,2,3 +over +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=utm +zone=31 +ellps=GRS80 +towgs84=1,2,3 +over"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_on_crs_with_bound_crs_and_wktext) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 " "+units=m +no_defs +nadgrids=@GDA94_GDA2020_conformal.gsb +ignored1 " "+ignored2=val +wktext +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 " "+units=m +no_defs +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +inv +proj=utm +zone=55 +south " "+ellps=GRS80 +step +proj=hgridshift " "+grids=@GDA94_GDA2020_conformal.gsb +step +proj=utm +zone=55 " "+south +ellps=GRS80"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_fallback_to_proj4_strings_with_axis_inverted_projCRS) { auto objSrc = createFromUserInput("EPSG:2193", DatabaseContext::create(), false); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=WGS84 +lon_wrap=180 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +inv +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 " "+x_0=1600000 +y_0=10000000 +ellps=GRS80 " "+step +proj=longlat +ellps=WGS84 +lon_wrap=180 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_proj_string_with_non_metre_height) { auto objSrc = createFromUserInput("EPSG:6318+5703", DatabaseContext::create(), false); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +ellps=GRS80 +vunits=us-ft +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GT(list.size(), 1U); // What is important to check here is the vertical unit conversion EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=us-ft"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_with_derived_vertical_CRS) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, "EPSG"); // ETRS89 + EGM2008 height auto objSrc = createFromUserInput("EPSG:4258+3855", dbContext, false); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto wkt = "COMPOUNDCRS[\"WGS 84 + Custom Vertical\",\n" " GEOGCRS[\"WGS 84\",\n" " ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n" " MEMBER[\"World Geodetic System 1984 (Transit)\"],\n" " MEMBER[\"World Geodetic System 1984 (G730)\"],\n" " MEMBER[\"World Geodetic System 1984 (G873)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1150)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1674)\"],\n" " MEMBER[\"World Geodetic System 1984 (G1762)\"],\n" " MEMBER[\"World Geodetic System 1984 (G2139)\"],\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ENSEMBLEACCURACY[2.0]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"geodetic latitude (Lat)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"geodetic longitude (Lon)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " VERTCRS[\"Custom Vertical\",\n" " BASEVERTCRS[\"EGM2008 height\",\n" " VDATUM[\"EGM2008 geoid\"]],\n" " DERIVINGCONVERSION[\"vertical offs. and slope\",\n" " METHOD[\"Vertical Offset and Slope\",\n" " ID[\"EPSG\",1046]],\n" " PARAMETER[\"Ordinate 1 of evaluation point\",47,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8617]],\n" " PARAMETER[\"Ordinate 2 of evaluation point\",8,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8618]],\n" " PARAMETER[\"Vertical Offset\",-0.245,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8603]],\n" " PARAMETER[\"Inclination in latitude\",-0.21,\n" " ANGLEUNIT[\"arc-second\",4.84813681109536E-06],\n" " ID[\"EPSG\",8730]],\n" " PARAMETER[\"Inclination in longitude\",-0.032,\n" " ANGLEUNIT[\"arc-second\",4.84813681109536E-06],\n" " ID[\"EPSG\",8731]],\n" " PARAMETER[\"EPSG code for Horizontal CRS\",4326,\n" " ID[\"EPSG\",1037]]],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " USAGE[\n" " SCOPE[\"unknown\"],\n" " AREA[\"World\"],\n" " BBOX[-90,-180,90,180]]]]"; auto objDst = createFromUserInput(wkt, dbContext, false); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_EQ(list.size(), 1U); EXPECT_EQ(list[0]->nameStr(), "ETRS89 to WGS 84 (1) + vertical offs. and slope"); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vertoffset +lat_0=47 +lon_0=8 +dh=-0.245 +slope_lat=-0.21 " "+slope_lon=-0.032 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, compoundCRS_to_PROJJSON_with_non_metre_height) { auto srcPROJJSON = "{\n" " \"$schema\": " "\"https://proj.org/schemas/v0.2/projjson.schema.json\",\n" " \"type\": \"CompoundCRS\",\n" " \"name\": \"Compound CRS NAD83(2011) / Nebraska (ftUS) + North " "American Vertical Datum 1988 + PROJ us_noaa_g2012bu0.tif\",\n" " \"components\": [\n" " {\n" " \"type\": \"ProjectedCRS\",\n" " \"name\": \"NAD83(2011) / Nebraska (ftUS)\",\n" " \"base_crs\": {\n" " \"name\": \"NAD83(2011)\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"NAD83 (National Spatial Reference System " "2011)\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 6318\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"SPCS83 Nebraska zone (US Survey feet)\",\n" " \"method\": {\n" " \"name\": \"Lambert Conic Conformal (2SP)\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9802\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of false origin\",\n" " \"value\": 39.8333333333333,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8821\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude of false origin\",\n" " \"value\": -100,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8822\n" " }\n" " },\n" " {\n" " \"name\": \"Latitude of 1st standard parallel\",\n" " \"value\": 43,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8823\n" " }\n" " },\n" " {\n" " \"name\": \"Latitude of 2nd standard parallel\",\n" " \"value\": 40,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8824\n" " }\n" " },\n" " {\n" " \"name\": \"Easting at false origin\",\n" " \"value\": 1640416.6667,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8826\n" " }\n" " },\n" " {\n" " \"name\": \"Northing at false origin\",\n" " \"value\": 0,\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8827\n" " }\n" " }\n" " ],\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 15396\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"X\",\n" " \"direction\": \"east\",\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " }\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"Y\",\n" " \"direction\": \"north\",\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " }\n" " }\n" " ]\n" " }\n" " },\n" " {\n" " \"type\": \"VerticalCRS\",\n" " \"name\": \"North American Vertical Datum 1988 + PROJ " "us_noaa_g2012bu0.tif\",\n" " \"datum\": {\n" " \"type\": \"VerticalReferenceFrame\",\n" " \"name\": \"North American Vertical Datum 1988\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 5103\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"vertical\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Gravity-related height\",\n" " \"abbreviation\": \"H\",\n" " \"direction\": \"up\",\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " }\n" " }\n" " ]\n" " },\n" " \"geoid_model\": {\n" " \"name\": \"PROJ us_noaa_g2012bu0.tif\",\n" " \"interpolation_crs\": {\n" " \"type\": \"GeographicCRS\",\n" " \"name\": \"NAD83(2011)\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"NAD83 (National Spatial Reference System " "2011)\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": \"metre\"\n" " }\n" " ]\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 6319\n" " }\n" " }\n" " }\n" " }\n" " ]\n" "}"; auto objSrc = createFromUserInput(srcPROJJSON, DatabaseContext::create(), false); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); // The untypical potentially a bit buggy thing (and what caused a bug) // is the US-ft unit for the vertical axis of the base CRS ... // When outputting that to WKT, and // re-exporting to PROJJSON, one gets metre, which conforms more to the // official definition of NAD83(2011) 3D. // The vertical unit of the base CRS shouldn't matter much anyway, so this // is valid. auto dstPROJJSON = "{\n" " \"$schema\": " "\"https://proj.org/schemas/v0.2/projjson.schema.json\",\n" " \"type\": \"ProjectedCRS\",\n" " \"name\": \"Projected CRS NAD83(2011) / UTM zone 14N with " "ellipsoidal NAD83(2011) height\",\n" " \"base_crs\": {\n" " \"name\": \"NAD83(2011)\",\n" " \"datum\": {\n" " \"type\": \"GeodeticReferenceFrame\",\n" " \"name\": \"NAD83 (National Spatial Reference System 2011)\",\n" " \"ellipsoid\": {\n" " \"name\": \"GRS 1980\",\n" " \"semi_major_axis\": 6378137,\n" " \"inverse_flattening\": 298.257222101\n" " },\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 1116\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"ellipsoidal\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Geodetic latitude\",\n" " \"abbreviation\": \"Lat\",\n" " \"direction\": \"north\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Geodetic longitude\",\n" " \"abbreviation\": \"Lon\",\n" " \"direction\": \"east\",\n" " \"unit\": \"degree\"\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " }\n" " }\n" " ]\n" " }\n" " },\n" " \"conversion\": {\n" " \"name\": \"UTM zone 14N\",\n" " \"method\": {\n" " \"name\": \"Transverse Mercator\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 9807\n" " }\n" " },\n" " \"parameters\": [\n" " {\n" " \"name\": \"Latitude of natural origin\",\n" " \"value\": 0,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8801\n" " }\n" " },\n" " {\n" " \"name\": \"Longitude of natural origin\",\n" " \"value\": -99,\n" " \"unit\": \"degree\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8802\n" " }\n" " },\n" " {\n" " \"name\": \"Scale factor at natural origin\",\n" " \"value\": 0.9996,\n" " \"unit\": \"unity\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8805\n" " }\n" " },\n" " {\n" " \"name\": \"False easting\",\n" " \"value\": 500000,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8806\n" " }\n" " },\n" " {\n" " \"name\": \"False northing\",\n" " \"value\": 0,\n" " \"unit\": \"metre\",\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 8807\n" " }\n" " }\n" " ],\n" " \"id\": {\n" " \"authority\": \"EPSG\",\n" " \"code\": 16014\n" " }\n" " },\n" " \"coordinate_system\": {\n" " \"subtype\": \"Cartesian\",\n" " \"axis\": [\n" " {\n" " \"name\": \"Easting\",\n" " \"abbreviation\": \"E\",\n" " \"direction\": \"east\",\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " }\n" " },\n" " {\n" " \"name\": \"Northing\",\n" " \"abbreviation\": \"N\",\n" " \"direction\": \"north\",\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " }\n" " },\n" " {\n" " \"name\": \"Ellipsoidal height\",\n" " \"abbreviation\": \"h\",\n" " \"direction\": \"up\",\n" " \"unit\": {\n" " \"type\": \"LinearUnit\",\n" " \"name\": \"US survey foot\",\n" " \"conversion_factor\": 0.304800609601219\n" " }\n" " }\n" " ]\n" " }\n" "}"; auto objDst = createFromUserInput(dstPROJJSON, DatabaseContext::create(), false); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GT(list.size(), 1U); // What is important to check here is the vertical unit conversion EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=us-ft +xy_out=m " "+step +inv +proj=lcc +lat_0=39.8333333333333 +lon_0=-100 +lat_1=43 " "+lat_2=40 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 " "+step +proj=unitconvert +z_in=us-ft +z_out=m " "+step +proj=vgridshift +grids=us_noaa_g2012bu0.tif +multiplier=1 " "+step +proj=utm +zone=14 +ellps=GRS80 " "+step +proj=unitconvert +xy_in=m +z_in=m +xy_out=us-ft +z_out=us-ft"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_ossfuzz_18587) { auto objSrc = createFromUserInput("EPSG:4326", DatabaseContext::create(), false); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); // Extremely weird string ! We should likely reject it auto objDst = PROJStringParser().createFromPROJString( "type=crs proj=pipeline step proj=merc vunits=m nadgrids=@x " "proj=\"\nproj=pipeline step\n\""); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); // Just check that we don't go into an infinite recursion try { CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); } catch (const std::exception &) { } } // --------------------------------------------------------------------------- class derivedGeographicCRS_with_to_wgs84_to_geographicCRS : public ::testing::Test { protected: void run(const CRSNNPtr &src) { auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( src, NN_CHECK_ASSERT(dst)); ASSERT_TRUE(op != nullptr); std::string pipeline( "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=ob_tran +o_proj=latlon +over +lat_0=0 " "+lon_0=180 " "+o_lat_p=18 +o_lon_p=-200 +ellps=WGS84 " "+step +proj=push +v_3 " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=1 +y=2 +z=3 " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), pipeline); auto op2 = CoordinateOperationFactory::create()->createOperation( src, nn_static_pointer_cast(GeographicCRS::EPSG_4326)); ASSERT_TRUE(op2 != nullptr); EXPECT_EQ( op2->exportToPROJString(PROJStringFormatter::create().get()), pipeline + " +step +proj=axisswap +order=2,1"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(dst), src); ASSERT_TRUE(op != nullptr); std::string pipeline( "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_3 " "+step +proj=cart +ellps=WGS84 " "+step +proj=helmert +x=-1 +y=-2 +z=-3 " "+step +inv +proj=cart +ellps=WGS84 " "+step +proj=pop +v_3 " "+step +proj=ob_tran +o_proj=latlon +over +lat_0=0 +lon_0=180 " "+o_lat_p=18 +o_lon_p=-200 +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); EXPECT_EQ( op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " + pipeline); auto op2 = CoordinateOperationFactory::create()->createOperation( nn_static_pointer_cast(GeographicCRS::EPSG_4326), src); ASSERT_TRUE(op2 != nullptr); EXPECT_EQ( op2->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 " + pipeline); } } }; // --------------------------------------------------------------------------- TEST_F(derivedGeographicCRS_with_to_wgs84_to_geographicCRS, src_from_proj) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=ob_tran +o_proj=latlon +lat_0=0 +lon_0=180 +o_lat_p=18.0 " "+o_lon_p=-200.0 +ellps=WGS84 +towgs84=1,2,3 +over +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); run(NN_CHECK_ASSERT(src)); } // --------------------------------------------------------------------------- TEST_F(derivedGeographicCRS_with_to_wgs84_to_geographicCRS, src_from_wkt2) { // Same as above, but testing with a WKT CRS source // The subtle difference is that the base CRS of the DerivedGeographicCRS // will have a lat, long axis order auto objSrcProj = PROJStringParser().createFromPROJString( "+proj=ob_tran +o_proj=latlon +lat_0=0 +lon_0=180 +o_lat_p=18.0 " "+o_lon_p=-200.0 +ellps=WGS84 +towgs84=1,2,3 +over +type=crs"); auto srcFromProj = nn_dynamic_pointer_cast(objSrcProj); ASSERT_TRUE(srcFromProj != nullptr); auto srcWkt = srcFromProj->exportToWKT(WKTFormatter::create().get()); auto objSrc = createFromUserInput(srcWkt, DatabaseContext::create(), false); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); run(NN_CHECK_ASSERT(src)); } // --------------------------------------------------------------------------- TEST(operation, createOperation_spherical_ocentric_to_geographic) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +geoc +datum=WGS84 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), GeographicCRS::EPSG_4326); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=geoc +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_geographic_to_spherical_ocentric) { auto objDest = PROJStringParser().createFromPROJString( "+proj=longlat +geoc +datum=WGS84 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4326, NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=geoc +ellps=WGS84 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_spherical_ocentric_to_geocentric) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +geoc +datum=WGS84 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=geocent +datum=WGS84 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=geoc +ellps=WGS84 " "+step +proj=cart +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_bound_of_spherical_ocentric_to_same_type) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +geoc +ellps=GRS80 +towgs84=1,2,3 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=longlat +geoc +ellps=clrk66 +towgs84=4,5,6 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=geoc +ellps=GRS80 " "+step +proj=push +v_3 " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=-3 +y=-3 +z=-3 " "+step +inv +proj=cart +ellps=clrk66 " "+step +proj=pop +v_3 " "+step +proj=geoc +ellps=clrk66 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_spherical_ocentric_to_projected) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +geoc +datum=WGS84 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=utm +zone=11 +datum=WGS84 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=geoc +ellps=WGS84 " "+step +proj=utm +zone=11 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_spherical_ocentric_to_projected_of_spherical_ocentric) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=longlat +geoc +datum=WGS84 +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = PROJStringParser().createFromPROJString( "+proj=utm +geoc +zone=11 +datum=WGS84 +type=crs"); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=geoc +ellps=WGS84 " "+step +proj=utm +zone=11 +ellps=WGS84"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_spherical_ocentric_spherical_to_ellipsoidal_north_west) { auto objSrc = WKTParser().createFromWKT( "GEODCRS[\"Mercury (2015) - Sphere / Ocentric\",\n" " DATUM[\"Mercury (2015) - Sphere\",\n" " ELLIPSOID[\"Mercury (2015) - Sphere\",2440530,0,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Reference Meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[spherical,2],\n" " AXIS[\"planetocentric latitude (U)\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"planetocentric longitude (V)\",east,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = WKTParser().createFromWKT( "GEOGCRS[\"Mercury (2015) / Ographic\",\n" " DATUM[\"Mercury (2015)\",\n" " ELLIPSOID[\"Mercury (2015)\",2440530,1075.12334801762,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Reference Meridian\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,2],\n" " AXIS[\"latitude\",north,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " AXIS[\"longitude\",west,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]]" ); auto dest = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dest != nullptr); { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dest)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=1,-2"); } { auto op = CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(dest), NN_CHECK_ASSERT(src)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=axisswap +order=1,-2"); } } // --------------------------------------------------------------------------- TEST( operation, createOperation_ellipsoidal_ographic_west_to_projected_of_ellipsoidal_ographic_west) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); auto op = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19901"), authFactory->createCoordinateReferenceSystem("19911")); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=-2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260 " "+step +proj=axisswap +order=-1,2"); // Inverse auto op2 = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19911"), authFactory->createCoordinateReferenceSystem("19901")); ASSERT_TRUE(op2 != nullptr); EXPECT_EQ(op2->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=axisswap +order=-1,2 " "+step +inv +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,-1"); } // --------------------------------------------------------------------------- TEST( operation, createOperation_ellipsoidal_ographic_west_to_projected_of_ellipsoidal_ocentric) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); auto op = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19901"), authFactory->createCoordinateReferenceSystem("19912")); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=-2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260"); // Inverse auto op2 = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19912"), authFactory->createCoordinateReferenceSystem("19901")); ASSERT_TRUE(op2 != nullptr); EXPECT_EQ(op2->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,-1"); } // --------------------------------------------------------------------------- TEST( operation, createOperation_ellipsoidal_ocentric_to_projected_of_ellipsoidal_ocentric) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); auto op = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19902"), authFactory->createCoordinateReferenceSystem("19912")); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=geoc +a=2440530 +b=2438260 " "+step +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260"); // Inverse auto op2 = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19912"), authFactory->createCoordinateReferenceSystem("19902")); ASSERT_TRUE(op2 != nullptr); EXPECT_EQ(op2->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260 " "+step +proj=geoc +a=2440530 +b=2438260 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST( operation, createOperation_ellipsoidal_ocentric_to_projected_of_ellipsoidal_ographic_west) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "IAU_2015"); auto op = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19902"), authFactory->createCoordinateReferenceSystem("19911")); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=geoc +a=2440530 +b=2438260 " "+step +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260 " "+step +proj=axisswap +order=-1,2"); // Inverse auto op2 = CoordinateOperationFactory::create()->createOperation( authFactory->createCoordinateReferenceSystem("19911"), authFactory->createCoordinateReferenceSystem("19902")); ASSERT_TRUE(op2 != nullptr); EXPECT_EQ(op2->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=axisswap +order=-1,2 " "+step +inv +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 " "+a=2440530 +b=2438260 " "+step +proj=geoc +a=2440530 +b=2438260 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_ossfuzz_47873) { auto objSrc = PROJStringParser().createFromPROJString( "+proj=ob_tran +o_proj=longlat +o_lat_1=1 +o_lat_2=2 +datum=WGS84 " "+geoidgrids=@x +geoid_crs=horizontal_crs +type=crs"); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDst = PROJStringParser().createFromPROJString( "+proj=longlat +datum=WGS84 +geoidgrids=@y +type=crs"); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); // Just check that we don't go into an infinite recursion try { CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst)); } catch (const std::exception &) { } } // --------------------------------------------------------------------------- TEST(operation, createOperation_ossfuzz_47873_simplified_if_i_might_say) { auto wkt = "BOUNDCRS[\n" " SOURCECRS[\n" " VERTCRS[\"unknown\",\n" " VDATUM[\"unknown using geoidgrids=@x\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]],\n" " TARGETCRS[\n" " GEOGCRS[\"unnamed\",\n" " BASEGEOGCRS[\"unknown\",\n" " DATUM[\"World Geodetic System 1984\",\n" " ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",6326]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8901]]],\n" " DERIVINGCONVERSION[\"unknown\",\n" " METHOD[\"PROJ ob_tran o_proj=longlat\"],\n" " PARAMETER[\"o_lat_1\",1,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " PARAMETER[\"o_lat_2\",2,\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]]],\n" " CS[ellipsoidal,3],\n" " AXIS[\"longitude\",east,\n" " ORDER[1],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"latitude\",north,\n" " ORDER[2],\n" " ANGLEUNIT[\"degree\",0.0174532925199433,\n" " ID[\"EPSG\",9122]]],\n" " AXIS[\"ellipsoidal height (h)\",up,\n" " ORDER[3],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]]],\n" " ABRIDGEDTRANSFORMATION[\"unknown to unnamed ellipsoidal " "height\",\n" " METHOD[\"GravityRelatedHeight to Geographic3D\"],\n" " PARAMETERFILE[\"Geoid (height correction) model " "file\",\"@x\",\n" " ID[\"EPSG\",8666]]]]"; auto objSrc = WKTParser().createFromWKT(wkt); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto dst = authFactory->createCoordinateReferenceSystem("4979"); // Just check that we don't go into an infinite recursion try { CoordinateOperationFactory::create()->createOperation( NN_CHECK_ASSERT(src), dst); } catch (const std::exception &) { } } // --------------------------------------------------------------------------- TEST(operation, createOperation_derived_projected_crs) { auto authFactory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); auto src = authFactory->createCoordinateReferenceSystem("6507"); auto wkt = "DERIVEDPROJCRS[\"Custom Site Calibrated CRS\",\n" " BASEPROJCRS[\"NAD83(2011) / Mississippi East (ftUS)\",\n" " BASEGEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System " "2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"SPCS83 Mississippi East zone (US Survey " "feet)\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",29.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural " "origin\",-88.8333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.99995,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",984250,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8807]]]],\n" " DERIVINGCONVERSION[\"Affine transformation as PROJ-based\",\n" " METHOD[\"PROJ-based operation method: " "+proj=pipeline +step +proj=unitconvert +xy_in=m +xy_out=us-ft " "+step +proj=affine +xoff=20 " "+step +proj=unitconvert +xy_in=us-ft +xy_out=m\"]],\n" " CS[Cartesian,2],\n" " AXIS[\"northing (Y)\",north,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " AXIS[\"easting (X)\",east,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " REMARK[\"EPSG:6507 with 20 feet offset and axis inversion\"]]"; auto objDst = WKTParser().createFromWKT(wkt); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto op = CoordinateOperationFactory::create()->createOperation( src, NN_NO_CHECK(dst)); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=affine +xoff=20 " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, geogCRS_to_compoundCRS_with_boundVerticalCRS_and_derivedProjected) { auto wkt = "DERIVEDPROJCRS[\"Custom Site Calibrated CRS\",\n" " BASEPROJCRS[\"NAD83(2011) / Mississippi East (ftUS)\",\n" " BASEGEOGCRS[\"NAD83(2011)\",\n" " DATUM[\"NAD83 (National Spatial Reference System " "2011)\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]]],\n" " CONVERSION[\"SPCS83 Mississippi East zone (US Survey " "feet)\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",29.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural " "origin\",-88.8333333333333,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.99995,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",984250,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219],\n" " ID[\"EPSG\",8807]]]],\n" " DERIVINGCONVERSION[\"Affine transformation as PROJ-based\",\n" " METHOD[\"PROJ-based operation method: " "+proj=pipeline +step +proj=unitconvert +xy_in=m +xy_out=us-ft " "+step +proj=affine +xoff=20 " "+step +proj=unitconvert +xy_in=us-ft +xy_out=m\"]],\n" " CS[Cartesian,2],\n" " AXIS[\"northing (Y)\",north,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " AXIS[\"easting (X)\",east,\n" " LENGTHUNIT[\"US survey foot\",0.304800609601219]],\n" " REMARK[\"EPSG:6507 with 20 feet offset and axis inversion\"]]"; auto objDst = WKTParser().createFromWKT(wkt); auto dst = nn_dynamic_pointer_cast(objDst); ASSERT_TRUE(dst != nullptr); auto compound = CompoundCRS::create( PropertyMap(), std::vector{NN_NO_CHECK(dst), createBoundVerticalCRS()}); auto op = CoordinateOperationFactory::create()->createOperation( GeographicCRS::EPSG_4979, compound); ASSERT_TRUE(op != nullptr); EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +inv +proj=vgridshift +grids=us_nga_egm08_25.tif " "+multiplier=1 " "+step +proj=tmerc +lat_0=29.5 +lon_0=-88.8333333333333 " "+k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 " "+step +proj=unitconvert +xy_in=m +xy_out=us-ft " "+step +proj=affine +xoff=20 " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_point_motion_operation_geog2D) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); // "NAD83(CSRS)v7" auto crs = factory->createCoordinateReferenceSystem("8255"); auto crs_2002 = CoordinateMetadata::create(crs, 2002.0, dbContext); auto crs_2010 = CoordinateMetadata::create(crs, 2010.0, dbContext); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( crs_2002, crs_2010, ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=2002 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_fwd " "+step +proj=deformation +dt=8 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2010 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1 " "+step +proj=set +v_4=2010"); EXPECT_TRUE(list[1]->hasBallparkTransformation()); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_point_motion_operation_geog3D) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); // "NAD83(CSRS)v7" auto crs = factory->createCoordinateReferenceSystem("8254"); auto crs_2002 = CoordinateMetadata::create(crs, 2002.0, dbContext); auto crs_2010 = CoordinateMetadata::create(crs, 2010.0, dbContext); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( crs_2002, crs_2010, ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_fwd " "+step +proj=deformation +dt=8 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2010 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); EXPECT_TRUE(list[1]->hasBallparkTransformation()); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_point_motion_operation_geocentric) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); // "NAD83(CSRS)v7" auto crs = factory->createCoordinateReferenceSystem("8253"); auto crs_2002 = CoordinateMetadata::create(crs, 2002.0, dbContext); auto crs_2010 = CoordinateMetadata::create(crs, 2010.0, dbContext); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( crs_2002, crs_2010, ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=2002 " "+step +proj=set +v_4=2002 +omit_fwd " "+step +proj=deformation +dt=8 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2010 +omit_inv " "+step +proj=set +v_4=2010"); EXPECT_EQ(list[0]->inverse()->exportToPROJString( PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=2010 " "+step +proj=set +v_4=2010 +omit_fwd " "+step +proj=deformation +dt=-8 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_inv " "+step +proj=set +v_4=2002"); EXPECT_TRUE(list[1]->hasBallparkTransformation()); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_point_motion_operation_geocentric_to_geog3D) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); // "NAD83(CSRS)v7" auto crs_geocentric = factory->createCoordinateReferenceSystem("8253"); auto crs_2002 = CoordinateMetadata::create(crs_geocentric, 2002.0, dbContext); auto crs_geog3d = factory->createCoordinateReferenceSystem("8254"); auto crs_2010 = CoordinateMetadata::create(crs_geog3d, 2010.0, dbContext); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( crs_2002, crs_2010, ctxt); ASSERT_EQ(list.size(), 2U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=2002 " "+step +proj=set +v_4=2002 +omit_fwd " "+step +proj=deformation +dt=8 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2010 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1 " "+step +proj=set +v_4=2010"); EXPECT_TRUE(list[1]->hasBallparkTransformation()); EXPECT_EQ(list[1]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_point_motion_operation_NAD83_CSRS_v7_TO_ITRF2014) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); // "NAD83(CSRS)v7" auto sourceCRS = factory->createCoordinateReferenceSystem("8254"); auto crs_2002 = CoordinateMetadata::create(sourceCRS, 2002.0, dbContext); // ITRF2014 auto targetCRS = factory->createCoordinateReferenceSystem("7912"); auto crs_2005 = CoordinateMetadata::create(targetCRS, 2005.0, dbContext); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( crs_2002, crs_2005, ctxt); ASSERT_GE(list.size(), 2U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=2002 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_fwd " "+step +proj=deformation +dt=3 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2005 +omit_inv " "+step +inv +proj=helmert " "+x=1.0053 +y=-1.90921 +z=-0.54157 +rx=-0.02678138 " "+ry=0.00042027 +rz=-0.01093206 +s=0.00036891 +dx=0.00079 +dy=-0.0006 " "+dz=-0.00144 +drx=-6.667e-05 +dry=0.00075744 +drz=5.133e-05 " "+ds=-7.201e-05 +t_epoch=2010 +convention=position_vector " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1 " "+step +proj=set +v_4=2005"); EXPECT_TRUE(list[1]->hasBallparkTransformation()); } // --------------------------------------------------------------------------- TEST(operation, createOperation_point_motion_operation_ITRF2014_to_NAD83_CSRS_v7) { auto dbContext = DatabaseContext::create(); auto factory = AuthorityFactory::create(dbContext, "EPSG"); // ITRF2014 auto sourceCRS = factory->createCoordinateReferenceSystem("7912"); auto crs_2005 = CoordinateMetadata::create(sourceCRS, 2005.0, dbContext); // "NAD83(CSRS)v7" auto targetCRS = factory->createCoordinateReferenceSystem("8254"); auto crs_2002 = CoordinateMetadata::create(targetCRS, 2002.0, dbContext); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( crs_2005, crs_2002, ctxt); ASSERT_GE(list.size(), 2U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=2005 " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +proj=helmert +x=1.0053 +y=-1.90921 +z=-0.54157 +rx=-0.02678138 " "+ry=0.00042027 +rz=-0.01093206 +s=0.00036891 +dx=0.00079 +dy=-0.0006 " "+dz=-0.00144 +drx=-6.667e-05 +dry=0.00075744 +drz=5.133e-05 " "+ds=-7.201e-05 +t_epoch=2010 +convention=position_vector " "+step +proj=set +v_4=2005 +omit_fwd " "+step +proj=deformation +dt=-3 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1 " "+step +proj=set +v_4=2002"); EXPECT_TRUE(list[1]->hasBallparkTransformation()); } // --------------------------------------------------------------------------- TEST(operation, createOperation_compound_to_compound_with_point_motion_operation) { auto dbContext = DatabaseContext::create(); auto factoryNRCAN = AuthorityFactory::create(dbContext, "NRCAN"); auto sourceCM = factoryNRCAN->createCoordinateMetadata("NAD83_CSRS_1997_MTM7_HT2_1997"); auto targetCM = factoryNRCAN->createCoordinateMetadata( "NAD83_CSRS_2010_UTM19_CGVD2013_2010"); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( sourceCM, targetCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=1997 " "+step +inv +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80 " "+step +proj=vgridshift +grids=ca_nrc_HT2_1997.tif +multiplier=1 " "+step +proj=cart +ellps=GRS80 " "+step +proj=set +v_4=1997 +omit_fwd " "+step +proj=deformation +dt=13 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2010 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +inv +proj=vgridshift +grids=ca_nrc_CGG2013an83.tif " "+multiplier=1 " "+step +proj=utm +zone=19 +ellps=GRS80 " "+step +proj=set +v_4=2010"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_compound_to_compound_with_epoch_HT2_1997_CGG2013a) { auto dbContext = DatabaseContext::create(); auto factoryNRCAN = AuthorityFactory::create(dbContext, "NRCAN"); auto sourceCM = factoryNRCAN->createCoordinateMetadata("NAD83_CSRS_1997_MTM7_HT2_1997"); auto targetCM = factoryNRCAN->createCoordinateMetadata( "NAD83_CSRS_1997_UTM19_CGVD2013_1997"); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); { auto list = CoordinateOperationFactory::create()->createOperations( sourceCM, targetCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80 " "+step +proj=vgridshift +grids=ca_nrc_HT2_1997_CGG2013a.tif " "+multiplier=-1 " "+step +proj=utm +zone=19 +ellps=GRS80"); } { auto list = CoordinateOperationFactory::create()->createOperations( targetCM, sourceCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=19 +ellps=GRS80 " "+step +inv +proj=vgridshift " "+grids=ca_nrc_HT2_1997_CGG2013a.tif " "+multiplier=-1 " "+step +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80"); } } // --------------------------------------------------------------------------- TEST(operation, createOperation_compound_to_compound_with_epoch_HT2_2002_CGG2013a) { auto dbContext = DatabaseContext::create(); auto factoryNRCAN = AuthorityFactory::create(dbContext, "NRCAN"); auto sourceCM = factoryNRCAN->createCoordinateMetadata("NAD83_CSRS_2002_MTM7_HT2_2002"); auto targetCM = factoryNRCAN->createCoordinateMetadata( "NAD83_CSRS_2002_UTM19_CGVD2013_2002"); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); { auto list = CoordinateOperationFactory::create()->createOperations( sourceCM, targetCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80 " "+step +proj=vgridshift +grids=ca_nrc_HT2_2002v70_CGG2013a.tif " "+multiplier=-1 " "+step +proj=utm +zone=19 +ellps=GRS80"); } { auto list = CoordinateOperationFactory::create()->createOperations( targetCM, sourceCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=19 +ellps=GRS80 " "+step +inv +proj=vgridshift " "+grids=ca_nrc_HT2_2002v70_CGG2013a.tif " "+multiplier=-1 " "+step +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80"); } } // --------------------------------------------------------------------------- TEST(operation, createOperation_compound_to_compound_with_epoch_HT2_2010_CGG2013a) { auto dbContext = DatabaseContext::create(); auto factoryNRCAN = AuthorityFactory::create(dbContext, "NRCAN"); auto sourceCM = factoryNRCAN->createCoordinateMetadata("NAD83_CSRS_2010_MTM7_HT2_2010"); auto targetCM = factoryNRCAN->createCoordinateMetadata( "NAD83_CSRS_2010_UTM19_CGVD2013_2010"); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); { auto list = CoordinateOperationFactory::create()->createOperations( sourceCM, targetCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80 " "+step +proj=vgridshift +grids=ca_nrc_HT2_2010v70_CGG2013a.tif " "+multiplier=-1 " "+step +proj=utm +zone=19 +ellps=GRS80"); } { auto list = CoordinateOperationFactory::create()->createOperations( targetCM, sourceCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=utm +zone=19 +ellps=GRS80 " "+step +inv +proj=vgridshift " "+grids=ca_nrc_HT2_2010v70_CGG2013a.tif " "+multiplier=-1 " "+step +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80"); } } // --------------------------------------------------------------------------- TEST( operation, createOperation_compound_to_compound_with_Geographic3D_Offset_by_velocity_grid) { auto dbContext = DatabaseContext::create(); auto wkt = "COMPOUNDCRS[\"NAD83(CSRS)v3 / MTM zone 7 + CGVD28 height\",\n" " PROJCRS[\"NAD83(CSRS)v3 / MTM zone 7\",\n" " BASEGEOGCRS[\"NAD83(CSRS)v3\",\n" " DATUM[\"North American Datum of 1983 (CSRS) version 3\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" " LENGTHUNIT[\"metre\",1]]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " ID[\"EPSG\",8240]],\n" " CONVERSION[\"MTM zone 7\",\n" " METHOD[\"Transverse Mercator\",\n" " ID[\"EPSG\",9807]],\n" " PARAMETER[\"Latitude of natural origin\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8801]],\n" " PARAMETER[\"Longitude of natural origin\",-70.5,\n" " ANGLEUNIT[\"degree\",0.0174532925199433],\n" " ID[\"EPSG\",8802]],\n" " PARAMETER[\"Scale factor at natural origin\",0.9999,\n" " SCALEUNIT[\"unity\",1],\n" " ID[\"EPSG\",8805]],\n" " PARAMETER[\"False easting\",304800,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8806]],\n" " PARAMETER[\"False northing\",0,\n" " LENGTHUNIT[\"metre\",1],\n" " ID[\"EPSG\",8807]]],\n" " CS[Cartesian,2],\n" " AXIS[\"easting (E(X))\",east,\n" " ORDER[1],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]],\n" " AXIS[\"northing (N(Y))\",north,\n" " ORDER[2],\n" " LENGTHUNIT[\"metre\",1,\n" " ID[\"EPSG\",9001]]]],\n" " VERTCRS[\"CGVD28 height\",\n" " VDATUM[\"Canadian Geodetic Vertical Datum of 1928\"],\n" " CS[vertical,1],\n" " AXIS[\"gravity-related height (H)\",up,\n" " LENGTHUNIT[\"metre\",1]],\n" " GEOIDMODEL[\"HT2_1997\",\n" " ID[\"EPSG\",9983]],\n" " ID[\"EPSG\",5713]]]"; auto objSrc = WKTParser().createFromWKT(wkt); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = createFromUserInput( "NAD83(CSRS)v7 / UTM zone 19 + CGVD2013a(2010) height", dbContext); auto dst = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); // Very similar output pipeline as // createOperation_compound_to_compound_with_point_motion_operation EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +inv +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 " "+x_0=304800 +y_0=0 +ellps=GRS80 " "+step +proj=vgridshift +grids=ca_nrc_HT2_1997.tif +multiplier=1 " "+step +proj=cart +ellps=GRS80 " "+step +proj=deformation +dt=13 " "+grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +inv +proj=cart +ellps=GRS80 " "+step +inv +proj=vgridshift +grids=ca_nrc_CGG2013an83.tif " "+multiplier=1 " "+step +proj=utm +zone=19 +ellps=GRS80"); } // --------------------------------------------------------------------------- TEST( operation, createOperation_compound_to_compound_with_point_motion_operation_special_case_CGVD2013a) { auto dbContext = DatabaseContext::create(); auto factoryNRCAN = AuthorityFactory::create(dbContext, "NRCAN"); auto sourceCM = factoryNRCAN->createCoordinateMetadata( "NAD83_CSRS_1997_UTM17_CGVD2013_1997"); auto targetCM = factoryNRCAN->createCoordinateMetadata( "NAD83_CSRS_2002_UTM17_CGVD2013_2002"); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( sourceCM, targetCM, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=set +v_4=1997 " "+step +inv +proj=utm +zone=17 +ellps=GRS80 " "+step +proj=vgridshift +grids=ca_nrc_CGG2013an83.tif " "+multiplier=1 " "+step +proj=cart +ellps=GRS80 " "+step +proj=set +v_4=1997 +omit_fwd " "+step +proj=deformation +dt=5 +grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +proj=set +v_4=2002 +omit_inv " "+step +inv +proj=cart +ellps=GRS80 " "+step +inv +proj=vgridshift +grids=ca_nrc_CGG2013an83.tif " "+multiplier=1 " "+step +proj=utm +zone=17 +ellps=GRS80 " "+step +proj=set +v_4=2002"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_Geographic3D_Offset_by_velocity_grid) { auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto sourceCRS = factoryEPSG->createCoordinateReferenceSystem("8254"); // NAD83(CSRS)v7 auto targetCRS = factoryEPSG->createCoordinateReferenceSystem("8239"); // NAD83(CSRS)v3 auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( sourceCRS, targetCRS, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " "+step +inv +proj=deformation +dt=13 " "+grids=ca_nrc_NAD83v70VG.tif +ellps=GRS80 " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_test_createOperationsWithDatumPivot_iter_1) { // Test // CoordinateOperationFactory::Private::createOperationsWithDatumPivot() // iter=1, ie getType(candidateSrcGeod) == getType(candidateDstGeod) auto dbContext = DatabaseContext::create(); auto factoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); // NAD83(CSRS)v2 (2D) auto sourceCRS = factoryEPSG->createCoordinateReferenceSystem("8237"); // NAD83(CSRS)v3 (2D) auto targetCRS = factoryEPSG->createCoordinateReferenceSystem("8240"); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); // Do *NOT* set SpatialCriterion::PARTIAL_INTERSECTION, otherwise we'd // get the direct operations ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( sourceCRS, targetCRS, ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_STREQ(list[0]->nameStr().c_str(), "Conversion from NAD83(CSRS)v2 (geog2D) to " "NAD83(CSRS)v2 (geocentric) + " "NAD83(CSRS)v2 to NAD83(CSRS)v3 (3) + " "Conversion from NAD83(CSRS)v3 (geocentric) to " "NAD83(CSRS)v3 (geog2D)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=noop"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_Vrtical_Offset_by_velocity_grid) { auto dbContext = DatabaseContext::create(); auto objSrc = createFromUserInput("NAD83(CSRS)v7 + CGVD2013a(2002) height", dbContext); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = createFromUserInput("NAD83(CSRS)v7 + CGVD2013a(2010) height", dbContext); auto dst = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=push +v_1 +v_2 " "+step +proj=cart +ellps=GRS80 " "+step +inv +proj=deformation +dt=-8 " "+grids=ca_nrc_NAD83v70VG.tif +ellps=GRS80 " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=pop +v_1 +v_2 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_epsg_10622_local_orthographic) { auto dbContext = DatabaseContext::create(); auto objSrc = createFromUserInput("EPSG:6318", dbContext); auto src = nn_dynamic_pointer_cast(objSrc); ASSERT_TRUE(src != nullptr); auto objDest = createFromUserInput("EPSG:10622", dbContext); auto dst = nn_dynamic_pointer_cast(objDest); ASSERT_TRUE(dst != nullptr); auto ctxt = CoordinateOperationContext::create( AuthorityFactory::create(dbContext, std::string()), nullptr, 0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt); ASSERT_GE(list.size(), 1U); EXPECT_FALSE(list[0]->hasBallparkTransformation()); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline +step +proj=axisswap +order=2,1 +step " "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ortho " "+lat_0=37.6289686531 +lon_0=-122.3939412704 " "+alpha=27.7928209333 +k=0.9999968 +x_0=0 +y_0=0 +ellps=GRS80 " "+step +proj=unitconvert +xy_in=m +xy_out=us-ft"); } // --------------------------------------------------------------------------- TEST(operation, createOperation_ITRF2000_to_ETRS89) { auto dbContext = DatabaseContext::create(); auto authFactory = AuthorityFactory::create(dbContext, std::string()); auto authFactoryEPSG = AuthorityFactory::create(dbContext, "EPSG"); auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); ctxt->setSpatialCriterion( CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); ctxt->setGridAvailabilityUse( CoordinateOperationContext::GridAvailabilityUse:: IGNORE_GRID_AVAILABILITY); auto list = CoordinateOperationFactory::create()->createOperations( // ITRF2000 authFactoryEPSG->createCoordinateReferenceSystem("9989"), // ETRS89 authFactoryEPSG->createCoordinateReferenceSystem("4937"), ctxt); // Check that we find a mix of grid-based (NKG ones, with very narrow area // of use, but easier to lookup) and non-grid based operations (wider area // of use, but require more effort to infer) bool foundNonGridBasedOp = false; bool foundGridBaseOp = false; for (const auto &op : list) { if (!op->hasBallparkTransformation()) { if (op->gridsNeeded(dbContext, false).empty()) foundNonGridBasedOp = true; else foundGridBaseOp = true; } } EXPECT_TRUE(foundNonGridBasedOp); EXPECT_TRUE(foundGridBaseOp); } proj-9.6.0/test/unit/test_primitives.hpp000664 001754 001755 00000010172 14764566077 020323 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2018 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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. ****************************************************************************/ #ifndef TEST_PRIMITIVES_HPP_INCLUDED #define TEST_PRIMITIVES_HPP_INCLUDED #include "gtest_include.h" #ifndef FROM_PROJ_CPP #define FROM_PROJ_CPP #endif #include "proj/internal/internal.hpp" #include #include static ::testing::AssertionResult ComparePROJString(const char *m_expr, const char *n_expr, const std::string &m, const std::string &n) { // if (m == n) return ::testing::AssertionSuccess(); auto mTokens = osgeo::proj::internal::split(m, ' '); auto nTokens = osgeo::proj::internal::split(n, ' '); if (mTokens.size() == nTokens.size()) { bool success = true; for (size_t i = 0; i < mTokens.size(); i++) { auto mSubTokens = osgeo::proj::internal::split(mTokens[i], '='); auto nSubTokens = osgeo::proj::internal::split(nTokens[i], '='); if (mSubTokens.size() != nSubTokens.size()) { success = false; break; } if (mSubTokens.size() == 2 && nSubTokens.size() == 2) { if (mSubTokens[0] != nSubTokens[0]) { success = false; break; } double mValue = 0.0; bool mIsDouble = false; try { mValue = osgeo::proj::internal::c_locale_stod(mSubTokens[1]); mIsDouble = true; } catch (const std::exception &) { } double nValue = 0.0; bool nIsDouble = false; try { nValue = osgeo::proj::internal::c_locale_stod(nSubTokens[1]); nIsDouble = true; } catch (const std::exception &) { } if (mIsDouble != nIsDouble) { success = false; break; } if (mIsDouble) { success = std::abs(mValue - nValue) <= 1e-14 * std::abs(mValue); } else { success = mSubTokens[1] == nSubTokens[1]; } if (!success) { break; } } } if (success) { return ::testing::AssertionSuccess(); } } return ::testing::AssertionFailure() << m_expr << " and " << n_expr << " (" << m << " and " << n << ") are different"; } #endif /* TEST_PRIMITIVES_HPP_INCLUDED */ proj-9.6.0/test/unit/test_tinshift.cpp000664 001754 001755 00000023176 14764566077 017763 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test TIN shift * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2020, 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 "gtest_include.h" #define PROJ_COMPILATION #define TINSHIFT_NAMESPACE TestTINShift #include "transformations/tinshift.hpp" using namespace TINSHIFT_NAMESPACE; namespace { static json getMinValidContent() { json j; j["file_type"] = "triangulation_file"; j["format_version"] = "1.0"; j["input_crs"] = "EPSG:2393"; j["output_crs"] = "EPSG:3067"; j["transformed_components"] = {"horizontal"}; j["vertices_columns"] = {"source_x", "source_y", "target_x", "target_y"}; j["triangles_columns"] = {"idx_vertex1", "idx_vertex2", "idx_vertex3"}; j["vertices"] = {{0, 0, 101, 101}, {0, 1, 100, 101}, {1, 1, 100, 100}}; j["triangles"] = {{0, 1, 2}}; return j; } // --------------------------------------------------------------------------- TEST(tinshift, basic) { EXPECT_THROW(TINShiftFile::parse("foo"), ParsingException); EXPECT_THROW(TINShiftFile::parse("null"), ParsingException); EXPECT_THROW(TINShiftFile::parse("{}"), ParsingException); const auto jMinValid(getMinValidContent()); { auto f = TINShiftFile::parse(jMinValid.dump()); EXPECT_EQ(f->fileType(), "triangulation_file"); EXPECT_EQ(f->formatVersion(), "1.0"); EXPECT_EQ(f->inputCRS(), "EPSG:2393"); EXPECT_EQ(f->outputCRS(), "EPSG:3067"); EXPECT_EQ(f->fallbackStrategy(), FALLBACK_NONE); auto eval = Evaluator(std::move(f)); double x_out = 0; double y_out = 0; double z_out = 0; EXPECT_FALSE(eval.forward(-0.1, 0.0, 1000.0, x_out, y_out, z_out)); EXPECT_TRUE(eval.forward(0.0, 0.0, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 101.0); EXPECT_EQ(y_out, 101.0); EXPECT_EQ(z_out, 1000.0); EXPECT_TRUE(eval.forward(0.0, 1.0, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 100.0); EXPECT_EQ(y_out, 101.0); EXPECT_EQ(z_out, 1000.0); EXPECT_TRUE(eval.forward(1.0, 1.0, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 100.0); EXPECT_EQ(y_out, 100.0); EXPECT_EQ(z_out, 1000.0); EXPECT_TRUE(eval.forward(0.0, 0.5, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 100.5); EXPECT_EQ(y_out, 101.0); EXPECT_EQ(z_out, 1000.0); EXPECT_TRUE(eval.forward(0.5, 0.5, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 100.5); EXPECT_EQ(y_out, 100.5); EXPECT_EQ(z_out, 1000.0); EXPECT_TRUE(eval.forward(0.5, 0.75, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 100.25); EXPECT_EQ(y_out, 100.5); EXPECT_EQ(z_out, 1000.0); EXPECT_TRUE(eval.inverse(100.25, 100.5, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.5); EXPECT_EQ(y_out, 0.75); EXPECT_EQ(z_out, 1000.0); } // Vertical only, through source_z / target_z { auto j(jMinValid); j["transformed_components"] = {"vertical"}; j["vertices_columns"] = {"source_x", "source_y", "source_z", "target_z"}; j["triangles_columns"] = {"idx_vertex1", "idx_vertex2", "idx_vertex3"}; j["vertices"] = { {0, 0, 10.5, 10.6}, {0, 1, 15.0, 15.2}, {1, 1, 17.5, 18.0}}; j["triangles"] = {{0, 1, 2}}; auto f = TINShiftFile::parse(j.dump()); auto eval = Evaluator(std::move(f)); double x_out = 0; double y_out = 0; double z_out = 0; EXPECT_TRUE(eval.forward(0.0, 0.0, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.0); EXPECT_EQ(y_out, 0.0); EXPECT_EQ(z_out, 1000.1); EXPECT_TRUE(eval.forward(0.5, 0.75, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.5); EXPECT_EQ(y_out, 0.75); EXPECT_EQ(z_out, 1000.325); EXPECT_TRUE(eval.inverse(0.5, 0.75, 1000.325, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.5); EXPECT_EQ(y_out, 0.75); EXPECT_EQ(z_out, 1000.0); } // Vertical only, through offset_z { auto j(jMinValid); j["transformed_components"] = {"vertical"}; j["vertices_columns"] = {"source_x", "source_y", "offset_z"}; j["triangles_columns"] = {"idx_vertex1", "idx_vertex2", "idx_vertex3"}; j["vertices"] = {{0, 0, 0.1}, {0, 1, 0.2}, {1, 1, 0.5}}; j["triangles"] = {{0, 1, 2}}; auto f = TINShiftFile::parse(j.dump()); auto eval = Evaluator(std::move(f)); double x_out = 0; double y_out = 0; double z_out = 0; EXPECT_TRUE(eval.forward(0.0, 0.0, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.0); EXPECT_EQ(y_out, 0.0); EXPECT_EQ(z_out, 1000.1); EXPECT_TRUE(eval.forward(0.5, 0.75, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.5); EXPECT_EQ(y_out, 0.75); EXPECT_EQ(z_out, 1000.325); EXPECT_TRUE(eval.inverse(0.5, 0.75, 1000.325, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.5); EXPECT_EQ(y_out, 0.75); EXPECT_EQ(z_out, 1000.0); } // Horizontal + vertical { auto j(jMinValid); j["transformed_components"] = {"horizontal", "vertical"}; j["vertices_columns"] = {"source_x", "source_y", "target_x", "target_y", "offset_z"}; j["triangles_columns"] = {"idx_vertex1", "idx_vertex2", "idx_vertex3"}; j["vertices"] = {{0, 0, 101, 101, 0.1}, {0, 1, 100, 101, 0.2}, {1, 1, 100, 100, 0.5}}; j["triangles"] = {{0, 1, 2}}; auto f = TINShiftFile::parse(j.dump()); auto eval = Evaluator(std::move(f)); double x_out = 0; double y_out = 0; double z_out = 0; EXPECT_TRUE(eval.forward(0.0, 0.0, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 101.0); EXPECT_EQ(y_out, 101.0); EXPECT_EQ(z_out, 1000.1); EXPECT_TRUE(eval.forward(0.5, 0.75, 1000.0, x_out, y_out, z_out)); EXPECT_EQ(x_out, 100.25); EXPECT_EQ(y_out, 100.5); EXPECT_EQ(z_out, 1000.325); EXPECT_TRUE(eval.inverse(100.25, 100.5, 1000.325, x_out, y_out, z_out)); EXPECT_EQ(x_out, 0.5); EXPECT_EQ(y_out, 0.75); EXPECT_EQ(z_out, 1000.0); } // invalid fallback_strategy field with 1.0 version { auto j(jMinValid); j["fallback_strategy"] = "none"; EXPECT_THROW(TINShiftFile::parse(j.dump()), ParsingException); } // invalid fallback_strategy field with 1.1 version { auto j(jMinValid); j["format_version"] = "1.1"; j["fallback_strategy"] = "invalid"; EXPECT_THROW(TINShiftFile::parse(j.dump()), ParsingException); } // fail with no triangles and fallback nearest_side { auto j(jMinValid); j["format_version"] = "1.1"; j["fallback_strategy"] = "nearest_side"; j["triangles"] = json::array(); // empty auto f = TINShiftFile::parse(j.dump()); auto eval = Evaluator(std::move(f)); double x_out = 0; double y_out = 0; double z_out = 0; EXPECT_FALSE(eval.forward(1.0, 1.0, 1.0, x_out, y_out, z_out)); } // fail with only degenerate triangles (one size is zero length) and // fallback nearest_side { auto j(jMinValid); j["format_version"] = "1.1"; j["fallback_strategy"] = "nearest_side"; j["vertices"] = {{0, 0, 101, 101}, {0, 1, 100, 101}, {0, 1, 100, 100}}; auto f = TINShiftFile::parse(j.dump()); auto eval = Evaluator(std::move(f)); double x_out = 0; double y_out = 0; double z_out = 0; EXPECT_FALSE(eval.forward(1.0, 1.0, 1.0, x_out, y_out, z_out)); } // fail with only degenerate triangles (two angles are 0°) and fallback // nearest_side { auto j(jMinValid); j["format_version"] = "1.1"; j["fallback_strategy"] = "nearest_side"; j["vertices"] = { {0, 0, 101, 101}, {0, 0.5, 100, 101}, {0, 1, 100, 100}}; auto f = TINShiftFile::parse(j.dump()); auto eval = Evaluator(std::move(f)); double x_out = 0; double y_out = 0; double z_out = 0; EXPECT_FALSE(eval.forward(1.0, 1.0, 1.0, x_out, y_out, z_out)); } } } // namespace proj-9.6.0/test/unit/test_util.cpp000664 001754 001755 00000005403 14764566077 017101 0ustar00e012349e012349000000 000000 /****************************************************************************** * * Project: PROJ * Purpose: Test ISO19111:2019 implementation * Author: Even Rouault * ****************************************************************************** * Copyright (c) 2018, 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 "gtest_include.h" #include "proj/util.hpp" #include using namespace osgeo::proj::util; // --------------------------------------------------------------------------- TEST(util, NameFactory) { LocalNameNNPtr localname(NameFactory::createLocalName(nullptr, "foo")); auto ns = localname->scope(); EXPECT_EQ(ns->isGlobal(), true); EXPECT_EQ(ns->name()->toFullyQualifiedName()->toString(), "global"); EXPECT_EQ(localname->toFullyQualifiedName()->toString(), "foo"); } // --------------------------------------------------------------------------- TEST(util, NameFactory2) { PropertyMap map; map.set("separator", "/"); NameSpaceNNPtr nsIn(NameFactory::createNameSpace( NameFactory::createLocalName(nullptr, std::string("bar")), map)); LocalNameNNPtr localname( NameFactory::createLocalName(nsIn, std::string("foo"))); auto ns = localname->scope(); EXPECT_EQ(ns->isGlobal(), false); auto fullyqualifiedNS = ns->name()->toFullyQualifiedName(); EXPECT_EQ(fullyqualifiedNS->toString(), "bar"); EXPECT_EQ(fullyqualifiedNS->scope()->isGlobal(), true); EXPECT_EQ(fullyqualifiedNS->scope()->name()->scope()->isGlobal(), true); EXPECT_EQ(localname->toFullyQualifiedName()->toString(), "bar/foo"); }

@4:x;`<{j?@4:x;䃾Wv@@4:x;A@4:x;rNB@4:x;NC@4:x;-E@4:x;f+F@4:x;hG@4:x;@4&H@gET;xԘ;I@=;x<yK@=;xABX@;= =BY@;= =;CkY@;= =FDSY@;= =yE6Z@;= =GVZ@;= =zH1[@;= =Jp[@;= =ZgLQ[@;= ='NND\@;= =;Pѯ\@;= =.R]@;= ="Tj]@;= =V(]@;= ='?=d=^8 ?=d==js?=d=Χ?=d=̲,E?=d=#1?=d=ڼ4?=d=v?=d=8 ?=d=>?=d=] '?=d=`:-G?=d=F :O]?=d=F?=d=hS?=d=`al?=d=Ecm?=d=0z?=d=`l?=d=?=d=ԏ?=d=@ܕg?=d='?=d=?=d=k?=d=(~?=d=㧱0?=d=]?=d=2&?=d==׾?gET;;%ýq?gET;;Bǽ@?gET;;)Bʽ)%?4:;V̽?4:;9ͽ?4:;$н }?4:;įؽ?4:;d⽼?4:;.F?4:;?4:;?4:;N ?4:;?4:;@4:;(@4:;z1|@4:;q@4:;%p@4:;9q@4:;b@4:;M@4:;i@4:;? @4:;g  @4:;W N @4:;נ @4:;n @4:;M @4:;#y@4:;HWv@4:;d@4:;"EI@4:;=+@4:;F@4:;n @4:;!@4:;#L@4:;9 &@4:;K&I@4:;$@4:;[$!@4:;F'@4:;LU*@4:;"P-@4:;J|.@4:;/.ѓ@4:;`/} @4:;v1qr!@4:;044d"@4:;~888#@4:;U<:$@4:; ?5$@4:;@4:;*?@4:;TE@@4:;xA@4:;"S0C@4:;І\D@4:;&AE@4:;ĉF@4:;0G@4:;ama2I@4:;pa`uJ@=;<9 K@=;< L@=;S@=Id=tS@=Id=0lWT@=Id=SweJT@=Id=Ow^8U@=Id=X5U@=Id=URQU@=Id=̴M+LV@=Id=IנV@=d=3FV@=d=eDoJW@=d=}BǠW@=d= BnW@=d=TB2UX@=d=zBJX@=d=fCY@=d=D.vY@=d=ZFY@=d=,HAZ@=d=d6?/==M\V?/==,ŭ?/==?/==𧦽_?/==(+?/==v?/==?/==?/==}@}?/==Ľ ?/==Ƚ?gET;c;̽j?gET;c;8kн1?gET;c;ӽ?4:vk;ֽ?4:vk;ٽk?4:vk;޽o?4:vk;&?4:vk;-h?4:vk;yĘ?4:vk;?4:vk;?4:vk;^J?4:vk;M,@4:vk;S@4:vk;@4:vk; @4:vk;I @4:vk;5C Z@4:vk;L @4:vk;YW@4:vk; @4:vk;*V ,@4:vk;*, @4:vk;pe @4:vk;_ @4:vk;v @4:vk; @4:vk;ձ@4:vk;@4:vk;V@4:vk;!2@4:vk;#r@4:vk;D2$@4:vk;9#ob@4:vk;n3%V@4:vk;֨';T@4:vk;*p@4:vk;+@4:vk;,M@4:vk;C+~V@4:vk;x+tE@4:vk;[?-^/@4:vk;c/@4:vk;1"@4:vk;2U@4:vk;3C@4:vk;W5$ @4:vk;Q7&!@4:vk;z9"@4:vk;<u#@4:vk;?gE$@4:vk; B%@4:vk;UD%@4:vk;H&@4:vk;J'@4:vk;wMH(@4:vk;@4:vk; ?@4:vk;a?@4:vk;>χ@@4:vk;ω)B@4:vk;TqC@4:vk;I*D@4:vk;+jjE@4:vk;U0G@4:vk;boH@4:vk; _I@4:vk;J@=;ciT@/==QaX U@/==QZ|U@/==TU@/==N> V@/==&JnV@/==F V@/==C W@/==JB>ZW@/==uAW@/==#gAWX@/==B_X@/==)"CsX@/=='D:Y@/==XFY@/==aHY@/==@KNZ@/==MݶZ@/==^P)![@/== S[@/==U[@/==ysXb\@/=='[[\@/==]:]@/==`j]@/==Lc^@/==f?==μS?==E?==ӥ?==# 8?==?==4$k@4:;d@4:; ^@4:; V@4:;^ nL@4:;T@4:;%@4:;O'@4:;BBR@4:;u| @4:;9+ @4:;l @4:; @4:;P @4:;k @4:;&}@4:;j@4:;׽%TT@4:;* @4:;+,@4:;+@4:;%+<@4:;Z+V@4:;-,@4:;T/@4:;|1l@4:;2J@4:;2q@4:;2@4:;3s@4:;;57S@4:;6*@4:;8@4:;[9@4:;:;/ @4:;= !@4:;S?"@4:;ϠAD#@4:;AC|$@4:;Dt@%@4:;̵Hq&@4:;utL$&@4:;O='@4:;R(@4:;( U)@4:;WWZ*@4:;+Z<+@4:;[@4,@4:;&].-@4:;Y_!.@4:;@b/@4:;d@/@4:;f%0@4:;hh1@4:;j2@4:;+lY3@4:;Qo2Y4@4:;r?5@4:;%uWC6@4:;Yw"87@4:;'Oy,8@4:;*{-9@4:;| ;:@4:;~@4:;QM?@4:;Ng@@4:;wUA@4:;ٓqB@4:;̇aC@4:;kaE@4:;flXF@4:; ؚG@4:;ɋH@4:;#J@4:;/jK@gET;;¦WL@gET;;DZ?"=Kr=ؽz?"=Kr=Tܽ?"=Kr=!#_?"=Kr=?"=Kr=I轤?4T;;t콻`?4T;;7?4T;;{}?4T;;<?4T;;pظ?4T;;+h?4T;;, ?4:; rH?4:;?4:; 7@4:; f @4:;C[@4:;ƿ@4:;<`@4:;@4:;JE@4:;p@4:;N{&o@4:;aRF @4:;ӽ)@ @4:;I!L @4:;a# @4:;^% @4:;]& @4:;sI%@4:;'[@4:;gC.&@4:;2W@4:;H36@4:;2/@4:;2l>@4:;#2Q@4:;d2x@4:;^4i6@4:;6@4:; 8y@4:;>8@4:;&49-@4:;K:@4:;;@4:;0<$c@4:;8e>9@4:;c@] @4:;&A!@4:;(B!@4:;-Cm"@4:;u@4:;~t?@4:;mDŽ@@4:;@A@4:;솾TB@4:;<D@4:;ILPE@4:;tF@4:;CG@4:;N~5I@4:;$FzJ@4:;vŌeK@4T;;pM@4T;;ŽiN@4T;; yO@4T;;E+P@4T;; 7Q@4T;;XR@4T;;ޭS@"=Kr=S$j.T@"=Kr=>t;T@"=Kr=qjU@"=Kr="aYU@"=Kr=mXU@"=Kr=JQU@"=Kr=(K?V@"=Kr=UFmUV@"=Kr=BV@"=Kr=j@IV@"=Kr=@4:E;\>@4:E;e?0@4:E;$@?@4:E;,B@4:E;Cn@4:E; qEI @4:E;cE(!@4:E;JFM"@4:E;>G#@4:E;[CIj#@4:E;Lb$@4:E;N@K%@4:E;R&@4:E;QUm'@4:E;>YG(@4:E;@] (@4:E;I+^ҫ)@4:E;A^߉*@4:E;_s+@4:E;ah,@4:E;dd-@4:E;e a.@4:E;ѭgW/@4:E;vSj<0@4:E;9bm<1@4:E;!#p1@4:E;Kr2@4:E;Gu<3@4:E;Kx4@4:E;,{~n5@4:E;<} J6@4:E;5}7@4:E;<~8@4:E;<289@4:E;`倾`:@4:E;lZۅ;@4:E;ӣ<@4:E;Ӥ=@4:E;c>@4:E;:A?@4:E;cA@4:E;鄾B@4:E;`8C@4:E;)ND@4:E;ӆ|E@4:E;Rb@F@4:E;o,H@4:E;~eI@4:E; E-J@4:E;M܊L@4:E;bM@4:E;n`N@4:E;ҏ+P@4:E;^wQ@4:E;dR@4:E;D6gS@4T;.=;'T@=;.=mW@==p @W@==HmBX@==KE$}X@==HvX@==LbHY@==9OIJY@==pS`Z@==9WŌZ@==ZZ@==^k[@==yb[@==F(fMN\@==i\@==\m0]@==p]@==tI^@==1 x^@==0D?=(=F{<B?=(=@HL?=(=St?=(=J_j?=(=k?=(=]w.?=(=]ŏ?=(=aA?=(=!/P?=(=.璽>?=(=J ?=(=$k?=(=?=(=W'?=(=?=(=?=(= ḽB?=(=?=(=½c ?=(=ǽr?=(=̽?=(=aѽY?=(= ֽ?=(=[ڽd?=(=l\߽?=(=㽅?=(=PA?=(=콑?=(=ܝ?=(=OM?=(=n?=(=#?4T;;0"O?4T;;{?4T;;JA?4T;; C9?4:;F X?4:;J]?4:;?4:;S2?4:;!@4:;!@4:;@4:;H@4:;Q@4:;s@4:;O@4:;@4:;N""@4:;E%@4:; ( @4:;4+{j @4:;[$-"T @4:;eV/% @4:;01} @4:;3 @4:;B5@4:;r7@4:;q8@4:;7#h@4:;ۈ7@@4:;M:O@4:;#=Di@4:;@}@4:;@A&@4:;KuA5@4:;.Ah@4:;B@4:;C!@4:;pCc&@4:;B]D@4:;+EF@4:;NdF?@4:;G@4:;Iz @4:;JI W!@4:;I`<"@4:;I$#@4:;4+K#@4:;VbN9$@4:;Rv%@4:;OVl&@4:;cYhY'@4:;<\1(@4:;p `(@4:;78a)@4:; b+*@4:;2c+@4:;f,@4:;igӆ-@4:;Ji|.@4:;jh/@4:;lE0@4:;)\o1@4:;{q1@4:;-s2@4:;bwS3@4:;,{V4@4:;~Y5@4:;$&s6@4:;%wL7@4:;߀*8@4:;䄁%;9@4:;Mc:@4:;hZ!;@4:;}]<@4:;!=@4:;I8>@4:;Ra.@@4:;oMA@4:;LZB@4:;*8gC@4:;ߨsD@4:;W+E@4:;?sF@4:;4+H@4:;,}I@4:;B퇾J@4:;Ɉ+L@4:;W!M@4:;tyO@4:;yP@4:;:BQ@4:;S@4:;S@4T;;쀾W|T@=;\V@=(=k7oW@=(=AW@=(=S>D&X@=(=GX@=(=1KkX@=(=O\Y@=(=SdY@=(=W9Z@=(=$\ŪZ@=(=+4`e[@=(=>dO[@=(=r7h!\@=(=$lx\@=(=o\@=(=sa]@=(=-w]@=(=!Z{IJ^@=(=D^@=(=6M? ==ݱXh? ==PdZK? ==o? =={? =='Cs? ==G? ==5? ==:? ==[ab? ==V? ==R? ==J? == Ru? ==ܝ? ==*ɺ6? ==п? ==uĽn? ==ɽb? ==Pν? ==ҽ8? ==׽T? ==/ܽ=)? ==Tཆ? =={O?? ==? == ww? ==0? ==7i? ==? ==!YSB? ==A? == ?4T;,Ԛ;F?4T;,Ԛ;D ?4T;,Ԛ; Ҧ?4T;,Ԛ;oH?4:;#?4:;ywZ?4:;H.?4:;(/m@4:;Dg@4:;8N@4:;/N@4:;еO@4:;J!,@4:;]!w@4:;l!`>@4:;!@4:;& @4:;z+@4:;s/ @4:;1 @4:;4K2 @4:;L4b @4:;o64 @4:;d9@4:;:@4:;e;@4:;:@4:;9@4:;Lp:X@4:;=Z@4:;A@l@4:;E@4:;Ff@4:;NG@4:;HV@4:;'jI+@4:;"9I=@4:;H)@4:;MH@4:;JI`@4:; *J @4:; -K@4:;,(Le @4:;?L!@4:;Le"@4:;$LI#@4:;~7M%$@4:;W@Q$@4:;CV.%@4:;2Z&@4:;\Lk'@4:;@k^E(@4:;`|)@4:;b)@4:;dn*@4:;g+@4:;X;j%,@4:;u;k--@4:;Yl$.@4:;m~q/@4:;vRoG90@4:;p| 1@4:;vq1@4:;Hr2@4:;bu3@4:;m;}4@4:;P5@4:;Z6@4:; v7@4:;A8@4:;~89@4:;GhY:@4:;*Xz;@4:;l=<@4:;P8$=@4:;?@4:;}O@@4:;.儾vA@4:;B@4:;]˃C@4:;lD@4:;酾6E@4:;fG@4:;DH@4:;I@4:;tK@4:;"SL@4:;M@4:;%!]O@4:;ډP@4:;*NR@4:;džl]S@4T;,Ԛ;^*T@4T;,Ԛ;M|jT@=;$V@ ==-[;PV@ ==E:@V@ == :V@ ==]<W@ ==lw?zpW@ ==nBW@ ==F]2X@ ==6K X@ ==ܛOY@ ==&TtY@ ==XY@ ==o]YZ@ ==ua_Z@ ==`eD[@ ==djܻ[@ ==2nr3\@ ==|Fr\@ ==Uv"]@ ==iRz̚]@ ==1D~^@ ==~Š^@ ==_@ ==i*?==tΎ?==\?==ͅLT?==s?== ?==͖{?==s?==o>??==o?== ?==\ta?==ӷ?==&?==B!½?==ǽ?==˽S?==н?==Wս%?==ٽG?== \޽!?==c~?==/?==#?==- ?== g?==`>b?== Q?==5c?==ǃ?4T;H;D6?4T;H;(?4T;H;(* '?4:; M,?4:;r?4:;4L?4:;R8?4:;Z?4:;y)Y?4:;r3?4:;u@4:;A@4:;@4:;'"h@4:; %37@4:; '@4:;'@4:;Q)l@4:;1,e@4:;LT/@@4:;2% @4:;5 @4:; g7 @4:;e8. @4:;9= @4:;;lx @4:;pa=1\@4:;¦>?@4:; ?"@4:;>@4:;GV>l@4:;b?@4:;1 Bx@4:;VEz@4:;fHۋ@4:;K@4:;ʩM@4:;:"O-%@4:;(O_`@4:;OqV@4:;6M@4:;.M @4:;M @4:;M@4:;gN@4:;NDO @4:;O!@4:;AaPU"@4:;{Pb#@4:;CWR;$@4:;zV%@4:;Z%@4:;?]&@4:;I._/o'@4:; _N(@4:;`!)@4:;bM)@4:;$f*@4:; mi +@4:;jk,@4:;Vlw-@4:;n8.@4:;Tp~/@4:;q30@4:;Ir 1@4:;-r1@4:;oqS2@4:;Zq3@4:;`#y>4@4:;~ \5@4:;‾=G6@4:;?Ł=7@4:;V9'8@4:;@:$9@4:;ǻZI:@4:;I;@4:;/<@4:;q >@4:;퀃_'?@4:;O[@@4:;uA@4:;ǼB@4:;aᄾC@4:;B D@4:;NFN F@4:; IG@4:;݃\H@4:;ѱ3I@4:;MK@4:;L@4:;܂M@4:;=ԆSO@4:;b]Q@4:;R@4:;tC-S@4:;*ST@4T;H;7RvmT@=;z<}l{IU@=;z<$bU@=;zV@==IG9yV@==T:V@== =DW@==AuW@==FW@==JlAX@==_O2X@==9T2Y@==YKY@==]5Z@==bVZ@==&gZ@==vk.s[@== p[@==N^tsi\@==x\@==|`]@==CtY]@==N{X^@==^^@==?P_@==?===\v4?=== [?===阓?===*(`?===?===oK}%?===ͩL?===G?===E M?===<?===Y?===҉ĽSv?===Mɽ?===*νy@?===rnӽ?===ؽ?===ܽ~?===9ὁ?===ta?===?===7S?===A?===7_?===g?===G?===-T;?===ڪ?===y:X?===h {k?4T;b;Zg $?4T;b;MR?4T;b;rl?4:b;x?4:b;>!?4:b; ;?4:b;p?4:b;~J?4:b;v Vc?4:b;R#>w@4:b; $V@4:b;ij$?@4:b;U&_@4:b;CY(U@4:b;*>v@4:b;,AJ@4:b;.@4:b;0@4:b;k3>@4:b;N6$@4:b;y9[ @4:b;z9 @4:b;r?q @4:b;Q@£ @4:b;A@4:b;Bgb@4:b;`C;@4:b;¥C@4:b;Dy@4:b;E@4:b;Fӥ@4:b;4I @4:b;LI@4:b; P@4:b;-R,@4:b;T1@4:b;hT2Z@4:b;TL@4:b;1CS@4:b;@4:b;Q6?@4:b;J]@@4:b;U6A@4:b;SB@4:b;Tt.D@4:b;`?V+E@4:b;@>F@4:b;UG@4:b;R^I@4:b; J@4:b;MEK@4:b;~ML@4:b;ocN@4:b;O@4:b;sIQ@4:b;R@4:b;vÞS@4:b;ZxPT@4T;b;{pT@4;b< h.;U@4;b@4:;/?@4:;WK@@4:;JwA@4:;ٙ|B@4:;D@4:;Úq;E@4:;ׂ `F@4:;'G@4:;AJI@4:;~J@4:;ܷK@4:;;L@4:;4򁾢&N@4:;O@4:;jzpQ@4:;CR@4:;t`yrS@4:;+sT@4:;kclT@4T;G;dT@4T;G;:\MU@4T;G;ATU@4T;G;פKfU@4T;G;jCU@4T;G;L"6@4:;B@& @4:;UC @4:;R_F @4:;Hh @4:;`I# @4:;yJ @4:;(`K @4:;=L$@4:;pM@4:;Nj@4:;EP@4:;#Q\r@4:;IQUO@4:;!\Q @4:;yRY@4:;V&@4:;Xz7@4:;OYa5@4:;ƥZ9@4:;__[7@4:;h\7@4:;a]x@4:;*S\@4:; {Z@4:;B\Y @4:;-Y@4:;*Y @4:;&Z!@4:;z[rj"@4:;zr]*#@4:;,_#@4:;a$@4:;W|c8%@4:;( d&@4:;7d8'@4:;Bxdݶ(@4:;Td)@4:;e*@4:;dhhw+@4:;jkX,@4:;n1-@4:;/p-@4:;czr.@4:;ftZ/@4:;/v 0@4:;&w1@4:;yx2@4:;z3@4:;}3@4:;(i4@4:;Y 5@4:;k5@4:;QA6@4:;d8@4:;/0K9@4:;Ɓʌ:@4:;9;@4:;Yy=@4:;ѓ>@4:; E?@4:;\9*@@4:;I]PA@4:;V@4;<ALlV@4;^?j=W=]K?4T;FE;r m?4T;FE; f?4T;FE;?4T;FE;?4:M;ܟ?4:M;q@4:M;z;@4:M;d<T@4:M;D>d@4:M;A @4:M;,EBI@4:M;tyC*o@4:M;2ECX@4:M;BGB @4:M;wI @4:M;*K @4:M;֧L& @4:M;tzN6 @4:M;P @4:M;dQҪ @4:M;R@4:M;zSE@4:M;ZbU@4:M;=V@4:M;W@4:M;SW@4:M;*TWk@4:M;ZYj@4:M;|]ۋ@4:M;w\/@4:M;\c_@4:M;Q^&@4:M;n^N @4:M;^>@4:M;`̖@4:M;|_@4:M;j]c@4:M; [ˢ@4:M;Z@4:M;`[= @4:M;?]$|!@4:M;^J"@4:M;`#@4:M;b)#@4:M;d"$@4:M;;e%@4:M;zf>&@4:M;f'@4:M;eg(@4:M;h)@4:M;hI*@4:M;8j+@4:M;.mh,@4:M;4p-?-@4:M; r.@4:M;{so.@4:M;tu/@4:M;4vC0@4:M;wl$1@4:M;pyE2@4:M;_{|2@4:M;h}]3@4:M;64@4:M;)=5@4:M;wm6@4:M;,['7@4:M;a`8@4:M;g9@4:M;(:@4:M;;@4:M;u<@4:M;G=@4:M;iȀ>@4:M;@@4:M;~-&A@4:M;~LB@4:M;`|C@4:M;DD@4:M;V~E@4:M;`vNG@4:M;u䀾H@4:M;{I@4:M;Á>K@4:M; qL@4:M;tM@4:M;;}N@4:M;nzP@4:M;.w9GQ@4:M;:s/OR@4:M;nMS@4:M;iЛS@4:M;rdT@4:M;_^T@4:M;QY T@4:M;TSU@4:M;cNAU@4:M;IiV@4:M;FyFV@4T;FE;DF4V@4T;FE;MI|V@4;FE<:MV@4;FE *?䠄==J ;5?䠄==3R/?4T;Ő; UsL?4T;Ő;`?4T;Ő;h,a?4T;Ő;S?4:Ő;Cp?4:Ő;j?4:Ő;W ɒ?4:Ő;#,c?4:Ő;&.?4:Ő;t{)?4:Ő;b@4:Ő;T?!@4:Ő; AJ@4:Ő;B@4:Ő;C2@4:Ő;F@4:Ő;G@4:Ő;Ix@4:Ő;bjK,c@4:Ő;^ME @4:Ő;O @4:Ő;KrP @4:Ő;Q @4:Ő;SO @4:Ő;1U+ @4:Ő;R}W @4:Ő;7Xӟ@4:Ő;CYl@4:Ő;S[@4:Ő;\p@4:Ő;5]@4:Ő;x]@4:Ő;\ҋ@4:Ő;V,^@4:Ő;3`@4:Ő;`@4:Ő;vaJ@4:Ő;b;@4:Ő;wc@4:Ő;.Sc@4:Ő;4c9d@4:Ő;cc@4:Ő;#a?r@4:Ő;^@4:Ő;V^@4:Ő;_{ @4:Ő;+j`^d!@4:Ő;J b2"@4:Ő;Acy#@4:Ő;7Oec#@4:Ő;f1$@4:Ő;h%@4:Ő;7h#&@4:Ő;ph)'@4:Ő;mi(@4:Ő;xFk9)@4:Ő;kP*@4:Ő;l͒+@4:Ő;g n~s,@4:Ő;oN-@4:Ő;8q].@4:Ő;JEs.@4:Ő;@t/@4:Ő;˼ump0@4:Ő;ԸwK=1@4:Ő;y_ 2@4:Ő;e{2@4:Ő;}43@4:Ő;4Ui4@4:Ő;E5@4:Ő; D6@4:Ő;6"l7@4:Ő;38@4:Ő;h09@4:Ő;;@4:Ő;k;@4:Ő;R<@4:Ő;1x5=@4:Ő;uZ>@4:Ő;?@4:Ő; c~A@4:Ő;*t~-B@4:Ő;S$]C@4:Ő;~D@4:Ő;G ~E@4:Ő;~WG@4:Ő;k\H@4:Ő;:I@4:Ő;~;J@4:Ő;oL@4:Ő;u3M@4:Ő; |DN@4:Ő;'zKXO@4:Ő;;wfjP@4:Ő;ZsgQ@4:Ő;Fp;R@4:Ő;J@lR@4:Ő;&h*VS@4:Ő;ucS@4:Ő;_-@T@4:Ő;9\T@4:Ő;9XbU@4:Ő;TFU@4:Ő;RV@4;Ő<QIV@4T;Ő;SSV@4T;Ő;#KVV@4;Ő<ZN_W@䠄==:=_QW@䠄==`?d^X@䠄==ni2X@䠄==noY@䠄==}sY@䠄==xZ@䠄==}[@䠄==e90[@䠄==~/\@䠄==\@䠄==G臾*T]@䠄==<]@䠄==$EA^@䠄=={a_@䠄==/p_@䠄==OJ`@䠄==I;`@䠄==}a@䠄==Dɽ?؟=n=B%νߊ?؟=n=ӽ+?؟=n=׽5a?؟=n=ݽ6?؟=n=ά6?؟=n=?؟=n= ?؟=n=mt?؟=n=]?؟=n=K?؟=n=Nzx?؟=n=%%?؟=n=?؟=n==?؟=n= |?؟=n=R ?؟=n=Cs s?؟=n=.?؟=n=ʥ(|?؟=n= ?؟=n=$?4T;Dܜ;x%?4T;Dܜ;J?4T;Dܜ;cBA?4T;Dܜ;|e?4:; #L?4:;#?4:;&W?4:;)M?4:;,?4:;k/?4:;52k?4:;4?4:;we7O?4:;9[?4:;<?4:;3m?@4:;A#@4:;5&D'@4:;2!Ft@4:;hG34@4:;!H@4:;3I@4:;J0f@4:;L @4:;N@4:;Oh@4:;DQd@4:;S8 @4:;U @4:;nVQ @4:;W @4:;|Y7p @4:;i[0 @4:;:]q @4:;8e^$@4:;Z_@4:;_`@4:;ka@4:;+b@4:;TSb@@4:;ybs@4:;AcU@4:;dO@4:;OeFC@4:;fV@4:;f@4:;fKX@4:;+f,F@4:;SfA@4:;BfE@4:;~eT@4:;Sdo@4:;b@4:;b @4:;Rc[!@4:;d'"@4:;#0f"@4:;/g[#@4:;)ho$@4:;i%@4:;Bwi&@4:;i'@4:;jA(@4:;al)@4:;Km*@4:;n+@4:;On,@4:;0oj-@4:;ZpC.@4:;k}q/@4:;r/@4:;ht0@4:;9{w_1@4:;"zT2@4:;e|2@4:;N&~C3@4:;d\4@4:;bH5@4:;9%bj6@4:;_ &7@4:;I9@4:;ZH$:@4:;};@4:;j;@4:;o<@4:;ɀ2=@4:;L>@4:;ضc?@4:;iT@@4:;&T-&B@4:;7POXC@4:;:@ΎD@4:;5BE@4:;n7F@4:;jH@4:; jI@4:;\ ßJ@4:;ӀԹK@4:;F&L@4:;a~M@4:; |N@4:;y.O@4:;evP@4:;s]Q@4:;~pR@4:;)#n̚R@4:; lkS@4:;@iS@4:;cejT@4:;b&U@4:;_RU@4T;Dܜ;N^U@4T;Dܜ;]BV@4:;eS^kV@4:;`W@4:;c}W@4T;Dܜ;g:X@4;D<%XlX@4;D<*qY@4;D<"v2Y@4;D?4:';V@M?4:';1CC_?4:';EUN@4:';r7HN'@4:'; pJk@4:';F`LY@4:';NO<@4:';O@4:';=Q@4:';R@4:';zS5@4:';pUC@4:';Vѭ@4:';O?Xd@4:';Zl% @4:';[ @4:';F\X @4:';z] @4:';&^ @4:';y`@ @4:';(b@4:';c<@4:';c@4:';lvd@4:';u9e@4:';Ee@4:';Uf~@4:';Cqg:@4:';/h@4:';ChO@4:';Ji(@4:';yvi;@4:';7hH@4:';kgV@4:'; gB@4:';N hu:@4:';iRj+0@4:';zkK9@4:';jl_@4:';٘gL@4:';[f/ @4:';wfa!@4:';/g-"@4:';Ig#@4:';YPh#@4:';h&$@4:';Ci&@4:';i'@4:';΍i,'@4:';NEj(@4:';kl)@4:';n*@4:'; o֨+@4:';enn,@4:';,n-@4:';yn#j.@4:';&p9/@4:';q- 0@4:';x&tE0@4:';cwG1@4:';z92@4:';y!}`2@4:';~3@4:';n4@4:';J)`5@4:';7,6@4:';EH8@4:'; o9@4:';Ӆi;:@4:';2䀾:@4:';,;@4:';o<@4:';ŪV=@4:';du>@4:';?@4:';@@4:';tB@4:';cD3C@4:';LD@4:';dWE@4:';䁾)vF@4:';G@4:';$I@4:';!GJ@4:';2XPK@4:';vCL@4:';$M@4:';*M@4:';}PN@4:';x{@4:{;&?@4:{; Eܷ@@4:{;wA@4:{;)+B@4:{;傾D@4:{; %'E@4:{;CNF@4:{;_)ɑG@4:{;d悾.H@4:{;TI@4:{;CJ@4:{;11K@4:{;-L@4:{;2M@4:{;2=_N@4:{;48O@4:{;M~ P@4:{;c|yP@4:{;z5|Q@4:{;G!y+R@4:{;*Tw6R@4:{;ȖuYS@4:{;BxtTT@4:{;?toT@4:{;t(~U@4:{; vU@4:{;=vV@4:{;a@˞==`a@˞==Şb@˞==B&zRc@˞==9.?E=6=0?E=6=l?E=6=zÀ?E=6=b?E=6=pa?E=6=Kc?E=6=t B?E=6= F?E=6=1#?E=6=D-?E=6=?E=6==x?E=6= F?E=6=<1`?E=6=uY8?E=6=P?E=6= !?E=6=~T#L?E=6=͑%?E=6=':[?E=6=*?4T;&ǝ;`,Ԃ?4T;&ǝ;.} ?4T;&ǝ;1?4T;&ǝ;A*5d]?4:¾;k8?4:¾;UQ@4:¾;&m?@4:¾;Ԃχ@@4:¾;KAA@4:¾;ƒB@4:¾;#C@4:¾;K[ D@4:¾;$F@4:¾;MG@4:¾;8hH@4:¾;qI@4:¾;⒃nJ@4:¾;bK@4:¾;/ML@4:¾;惾-M@4:¾;hN@4:¾;WN@4:¾;.䁾 O@4:¾;+jP@4:¾;@>#Q@4:¾;{~Q@4:¾;O;|pzR@4:¾;d${D1S@4:¾;.{ S@4:¾;|T@4:¾;M}CXU@4:¾;od~U@4:¾;Ѳ~V@4:¾;~CW@4:¾;[W@4:¾;"ŀX@4:¾;U02g @4:;h@4:; i_C@4:; j@4:;l @4:;\o@4:;8pT @4:;l @4:; k @4:;?rkM @4:;sl @4:;m @4:;mni@4:;zmY@4:;m6#@4:;^n@4:;nn@4:;Jo_@4:;o1?@4:;np,@4:;pH@4:;p@4:;!pp@4:;fo@4:;n}@4:;)me@4:;ln0K@4:;mC@4:;mL@4:;upR@4:;q1`@4:;.qo@4:;)Aoz @4:;=lt{!@4:;'kp"@4:;~j\#@4:;jD$@4:;kv2%@4:;vl ,&@4:;$m''@4:;mm(@4:;)#n:)@4:;*o)@4:;co*@4:;{op+@4:;+OpYn,@4:;q[@-@4:;7s.@4:;'u.@4:;w/@4:;y0@4:;|^1@4:;|{2@4:;`h3@4:;dZ4@4:;Ub5@4:;1[}6@4:;4w7@4:;@8@4:;&䃾!8@4:;s 9@4:; ă :@4:;k;@4:;em<@4:;%=@4:;q>@4:;]?@4:;jhu`O@4:;܃ 'P@4:;9&P@4:; PQ@4:;}?R@4:;N'R@4:;3kS@4:;ہT@4:;D?U@4:;U@4:;֭V@4:;_W@4:;X@4:;siX@4:;6 tY@4:;eVmZ@4:;`>6Z@4:;&s[@4:;،\@4:;!\@4:;Ȑ {]@4:; {*^@4:;q;]^@4:;uW*_@4:;6E`@4T;;a@4T;;~wa@=,;c@=,;<c@=,;?4T;$^;W3J?4T;$^;5?4T;$^;;8L?4:f;Ֆ:?4:f;v>@4:f;a@4:f;Ec΍@4:f;d"eF@4:f;lgF @4:f;i9@4:f;jx@4:f;k>A@4:f;Ym@4:f;n!x@4:f;o@4:f;xql@4:f;sn@4:f;kr @4:f;[ nb @4:f;S!ne @4:f;o0 @4:f;p'q @4:f;Wr @4:f;~r@4:f; p@4:f;qz@4:f; r@4:f;kr9_@4:f;>r:@4:f;r%@4:f;Wr@4:f;r@4:f;r@4:f;rp@4:f;%rf@4:f;ir>@4:f;3r)y@4:f;5qR@4:f;mp$G@4:f;nZ@4:f;*p@4:f;8H?@4:f;31$@@4:f;s"A@4:f; aKB@4:f;3oC@4:f; D@4:f;E@4:f;FF@4:f;G@4:f;臾!H@4:f;R'ڌI@4:f;7J@4:f;.懾K@4:f;հ0L@4:f;KwGM@4:f;0ZN@4:f;Rӆ$O@4:f;kgO@4:f;ܻP@4:f;nQ@4:f;1:R@4:f;ꄾR@4:f;܄S@4:f;~iT@4:f;y<,U@4:f;rU@4:f;V@4:f;*qW@4:f;Ȇ.X@4:f;X@4:f;˽Y@4:f;-[]Z@4:f;勾0[@4:f;[@4:f;*\@4:f;;]@4:f;֒@]@4:f;ݔ^@4:f;K薾Eg_@4T;$^;'`@4T;$^;U`@4T;$^;ꝾUa@=,;Vb< Ghb@9=f=z#/c@9=f=c@9=f=ad@9=f=@{e@9=f=PS?=\= ?=\=??=\=F?=\=9*(?=\=<?=\=P?=\=;m?=\=˄r?=\=?!q?=\=#?=\= &\?=\=J(?=\=*E?=\= -A?=\=V/M/?=\=^2?=\=J4?=\=n7΍?4T;;*:?4T;;}u@4:;ju<@4:;Au@4:;so@4:;YqFa@4:;yoi@4:;]p#k@4:;‡r|@4:;fjrˁ@4:;D6pw @4:;Cmo!@4:;kn"@4:;kkf#@4:;lc`$@4:;#no%@4:;d#p&@4:;FDq.'@4:;!rq(@4:;rcC)@4:;s*@4:;֬s*@4:;2t+@4:;vx,@4:;Fx)-@4:;9 {:-@4:;}.@4:;'u/@4:;7߀0@4:;z8c1@4:;2@4:;=d!3@4:;o4@4:;5@4:;U6@4:;⫅?n7@4:;煾58@4:;+, 9@4:;=s9@4:;6B:@4:;ㆾ;@4:;s<@4:;F=@4:;Ѕӆ>@4:;b`?@4:;?p2@@4:;~ᅾ'A@4:;zCB@4:;͆TC@4:;`YD@4:;Y܇^E@4:;SWF@4:;hz AG@4:;V)H@4:;$I@4:;\Y4HJ@4:;BЉCpK@4:;J~L@4:;usOM@4:;(GN@4:;vN@4:;O@4:;P@4:;몈RFQ@4:;qXR@4:;AR@4:;sև!S@4:;5WT@4:;{܇!U@4:;%U@4:;|~V@4:;W@4:;IX@4:;jY@4:;_^Y@4:;`Z@4:;d̍>Z[@4:;"`\@4:;ݏ)\@4:;S]@4:;ʔ}^@4:;:"E_@4:;P_@4T;;Z󛾲`@4T;;bHa@4T;;ꗠRb@4T;;>뢾c@=\=Bc@=\=cBd@=\=@4:;↾o?@4:;s@@4:;CqeA@4:;nB@4:;n4dC@4:;ƈJD@4:;;q/E@4:;O4F@4:;A,F@4:;G@4:;gUH@4:;T勾]I@4:;K@4:;qL@4:;}\L@4:;RCM@4:;N@4:;؊‰O@4:;ҊZP@4:;S!Q@4:;PQ@4:;嵊=R@4:;S@4:;fLT@4:;<.UU@4:;uU@4:;(+V@4:;OW@4:;7gX@4:;{ی5Y@4:;dZ@4:;Z@4:;Տ [@4:;l|\@4:;SvCX]@4:;#h/^@4:;斾:_@4:;'O_@4:;d雾`@4:;t#ja@4:;@b@4:;`fc@4:;h[Pc@4T;;d@=,;< xe@=,;<^ Cf@=,;&? =#=aA? =#=;D?#T;iQ;y@4:iQ;yr@4:iQ;zԀ@4:iQ;Szi@4:iQ;y@4:iQ;Tws@4:iQ;Tte@4:iQ;ru@4:iQ;Sr@4:iQ;nr}@4:iQ;||r@4:iQ;qd@4:iQ;%oe @4:iQ;m@4:iQ;,s?@4:iQ;~?@4:iQ;@@4:iQ;A@4:iQ;/B@4:iQ;oC@4:iQ;񛊾QD@4:iQ;mXCE@4:iQ;.E@4:iQ;ߌF@4:iQ;NG@4:iQ;H@4:iQ;S I@4:iQ;ˆJ@4:iQ;STK@4:iQ;'L@4:iQ;ȗM@4:iQ;ruN@4:iQ;ˌUO@4:iQ;54P@4:iQ;jk Q@4:iQ;!Q@4:iQ;n:R@4:iQ;Š{S@4:iQ;!΋(DT@4:iQ;YLU@4:iQ;3U@4:iQ;n2V@4:iQ;TW@4:iQ;|X@4:iQ;obY@4:iQ;7Z@4:iQ;7[@4:iQ;W@\@4:iQ;\@4:iQ;i5]@4:iQ;1_s^@4:iQ;_@4:iQ;d`@4:iQ;na@4:iQ;D6Db@4:iQ;ʨc@4:iQ;O#c@4:iQ; d@#T;iQ;l驾xe@#T;iQ;u>,Ef@=,;iQ<g@=,;iQ<鰾g@ =#=$?=χ=@4:L;o%\?@4:L;-`0@@4:L;P5A@4:L;mUmA@4:L;,ԊB@4:L;ޏC@4:L;msD@4:L;}/0E@4:L;CE@4:L;W鎾F@4:L;vG@4:L;נH@4:L;=I@4:L;現qg@#T;霟;yh@=χ=Q+R_?=x=-?=x=a/|G?=x='1?=x=20?=x= 4?=x=67?=x=t]8ގ?=x=8:?=x=!?=x=9 @b?=x= B?=x=l%DJ?=x=TF?=,;<ǟH.?=,;< K?#T;;Ml?#T;;VPk?4:h;5S?4:h;5V=)?4:h;l?Y,?4:h;9)\?4:h;^]R?4:h;H4aG?4:h;bc}?4:h;d ?4:h;e?4:h;g?4:h;hkh?4:h;Yo7?4:h;r?4:h;tR ?4:h;u/?4:h;wT@4:h;z@4:h;}"@4:h;bL@4:h;F@4:h;|!Y@4:h;Rr@4:h;ȱ@4:h;Fx@4:h;ځ(E@4:h;s*@4:h;Vc4@4:h;t@4:h;`@4:h;r5 @4:h;݁ @4:h;IA @4:h;  @4:h; }y> @4:h;cU @4:h;5A @4:h;7@4:h;輸a@4:h;ǂ-@@4:h;n@4:h;@4:h;@@4:h;r@4:h;/xA@4:h;JC}b@4:h;|@4:h;w.|@4:h;dx|ݴ@4:h;y@4:h;\wN@4:h;ߨu5'@4:h;{t*@4:h;(r]m@4:h;,rє@4:h;+r@4:h;s@4:h;5s @4:h;bqr!@4:h;5r-w"@4:h;fsx#@4:h;ΩtU$@4:h; v%@4:h;sw%@4:h;*xB"'@4:h;+y<(@4:h;z)@4:h;~*@4:h;R1+@4:h;򳁾+@4:h;w*,@4:h;j-@4:h;.@4:h;X/@4:h;£0@4:h;b 1@4:h;dK2@4:h;a3@4:h;4@4:h;*5@4:h;>^6@4:h;늾7@4:h; ċhu8@4:h;ۇ.;9@4:h;)d:@4:h;:?:@4:h;$ct;@4:h;'<@4:h;ϤE=@4:h;[q>@4:h;?@4:h;q@@4:h;LA@4:h;]B@4:h;cB@4:h; C@4:h;+D@4:h;ۣ[E@4:h;dV(F@4:h;l$G@4:h;G@4:h;H@4:h;*sYI@4:h;סvJ@4:h;?aK@4:h;8FL@4:h;9L@4:h;EgM@4:h;ZN@4:h;؏O@4:h;.bP@4:h;zRIQ@4:h;\ R@4:h;ZS@4:h;TT@4:h;jdU@4:h;: U@4:h;4jV@4:h;/X@4:h;oY@4:h;Y@4:h;xTZ@4:h;x?[@4:h;P\@4:h;*q^@4:h;_@4:h;}^m_@4:h;/za@4:h;b@4:h;c c@#T;;袾c@#T;;HCd@#T;;a΋e@#T;;.;Rf@=x=g@=x=Fg@=x=%Zbh@=x= ´ni@=x=23*?=Q=4I?=Q=6Z?=Q=YP8?=Q=u:0?=Q=;h?=Q=F~=?=Q=5B?DN?=Q= A?=Q=B4?=Q=D3?=Q=8Fi?=Q=Hڍ?=Q=J?=Q=SLq?=,;}@ <>N]?=,;}@ !@4:K< ;gs["@4:K< ;r!=@4:K< ;5q;@4:K< ;qaR@4:K< ;cbs{@4:K< ;us @4:K< ; 5s!@4:K< ;s/"@4:K< ;Lu]#@4:K< ;R_vߤ$@4:K< ;?w%@4:K< ;jOyŪ&@4:K< ;}#z'@4:K< ;nzo(@4:K< ;>!{H)@4:K< ;ʀ4*@4:K< ;B+@4:K< ;₾M,@4:K< ;ga-@4:K< ;-O.@4:K< ;>/@4:K< ;߅80@4:K< ;߆:1@4:K< ;ԇRD2@4:K< ;S3@4:K< ;r]4@4:K< ;2W5@4:K< ;=6@4:K< ;坋 7@4:K< ;l8@4:K< ;(ҍt8@4:K< ;9@4:K< ;+\:@4:K< ;0;@4:K< ; n<@4:K< ;Y2=@4:K< ;bf'>@4:K< ;l?@4:K< ;6?@4:K< ;WΎb@@4:K< ;S<A@4:K< ;8RB@4:K< ;ˡ/C@4:K< ;ZD@4:K< ;[D@4:K< ; E@4:K< ;gF@4:K< ;(` G@4:K< ;˞]H@4:K< ;~I@4:K< ;I@4:K< ;ˡJ@4:K< ;]lK@4:K< ;$*K@4:K< ;L@4:K< ;Uݓ̷M@4:K< ;풾)N@4:K< ;둾O@4:K< ; P@4:K< ;]fQ@4:K< ;rR@4:K< ;'LS@4:K< ;'ېdvT@4:K< ;ÑGU@4:K< ;풾V@4:K< ;V@4:K< ;--X@4:K< ;'P^KY@4:K< ;yOZ@4:K< ;O唾YP[@4:K< ;]Z\@4:K< ;k]@4:K< ;S?~^@4:K< ;꘾_@4:K< ;`@4:K< ;s.*a@4:K< ;pz5b@4:K< ;ݡc@#T;D;ad@#T;D; ^e@#T;D;Tf@#T;D; ]"g@=Q=𮾮g@=Q=nh@=Q=峾ēi@=Q=[oej@=Q=: ?==<<8j?===?==1}?#K?==&A˺?==B+?==|DÜ?==1F1 ?==}G|?==I?==oK^?==IM?==$+O>?==HQͯ?==S?#;` </U?#;` S@4:. ;=@4:. ;[~@4:. ;@4:. ;G@4:. ;Ĵ@4:. ;{ @4:. ;͏- @4:. ;oy @4:. ;凾 @4:. ;g_ @4:. ;* @4:. ;臾s @4:. ;fi@4:. ;e@4:. ;1@4:. ;zy@4:. ;c@4:. ;29G@4:. ;k~Y@4:. ;T}@4:. ;{i@4:. ; y-@4:. ;xt@4:. ;bwh@4:. ;=eu$}@4:. ;r?@4:. ;&q3@4:. ;5q@4:. ;SR?@4:. ;x5E@@4:. ;Uk"A@4:. ;pA@4:. ;7+B@4:. ;h^C@4:. ;\ThD@4:. ;ɐGE@4:. ;Q.F@4:. ;nG@4:. ;SG@4:. ;q㖾oH@4:. ;GI@#T;.;/1J@#T;.;DJ@#T;.;ϽfK@#T;.;K@#T;.;ܽL@#T;.;EݶM@#T;.;cEN@#T;.;BEO@#T;.;^P@#T;.;@&Q@4:. ;rR@4:. ;yfS@4:. ;ϒץT@4:. ;PnQU@4:. ;^V@4:. ;pMW@4:. ;앾iX@4:. ;4Y@#T;.;J|Z@#T;.;jݖ[@#T;.;k\@#T;.;=]@#T;.;3k"^@#T;.; `@#T;.;.a@#T;.;l͞Bb@#T;.;) Pc@#T;.;dSd@==eߥKe@==l 4f@==lg@==# g@==5h@==Q i@==>mj@==˺Ck@==B?=!=C:?=!='E?=!=F?=!=THg?=!=I?=!=3K\?=!=+M?=!=Ne6?=!==P£?=!=O=Rk?=!=zS~?=!=U?=!=¡WX?=!=Y?#; <[/?#; <*]И?#; <_?#; /@4: ;Ug&0@4: ;|'1@4: ;戾#2@4: ;l鉾}%3@4: ;iz94@4: ;tb5@4: ;%U6@4: ;O#7@4: ;N7@4: ;ސ58@4: ;ɭ{9@4: ;񻑾7:@4: ;V~:@4: ;ȑf;@4: ;r<@4: ;[=@4: ;ƥp>@4: ;\?@4: ;}~@@4: ;;gA@4: ;==B@4: ;L5 C@4: ;0C@4: ; D@4: ;E@4: ;ﬕqF@4: ;eG@4: ;ݗXH@4: ;p@I@4: ;)VI@#T;;AJ@#T;;^ K@#T;;Έ[K@#T;;8L@#T;;{HL@#T;;rM@#T;;+N@#T;;hO@#T;;S땾VP@#T;;J4Q@4: ;,R@4: ;kה!S@4: ;OT@4: ;sU@4: ;@4:7!;w?@4:7!;6@@4:7!;}ۢA@4:7!;ꖾ߈B@4:7!;ƤfC@4:7!;BD@4:7!;E@4:7!;欗E@4:7!;$&F@4:7!;7UG@4:7!;^`H@4:7!;[nI@4:7!;(|'J@#T;7; J@#T;7;QK@#T;7;!K@=={L@==nߛPM@===J)N@==*7O@==JP@==Q@==뗾R@#T;7;Q~S@#T;7;VLT@#T;7;h<U@#T;7;NV@#T;7;.W@#T;7;eX@#T;7;U%Y@#T;7;-@Z@==jsc[@==\@==]@==2R^@==?ɝ_@==`ma@==W=b@== sdYc@==l;nd@==6{e@==ѨNf@==$'|g@==rh@===bi@==%uLj@==﴾4k@==del@==ܹm@==OQ?==rR?==sSG?==fU?=='VM?==PXt?==2Y?==ZI[C@4:֋!;}?@4:֋!;x?@4:֋!;I@@4:֋!;{hA@4:֋!;xB@4:֋!;DMC@4:֋!;W$|D@4:֋!;pљKE@4:֋!;6 F@4:֋!;0F@4:֋!; G@4:֋!;AH@4:֋!;ɝI@4:֋!;gOJ@#T;֋;ߞzJ@#T;֋;& K@#;֋!dY@#;֋!<9ЛTZ@==o%[@==s\@==}靾 ^@==fڞI_@==Ps`@==>>a@==ж׽b@==d]jc@==v4sd@==2Of@==Og@==ah@== Ϯi@=="j@==Z1k@==T㵾k@==VE l@==m@==+X5_?h=U=Z?h=U=Sy[?h=U=\5z?h=U=v4^?h=U=_7?h=U=aє?h=U=lbo?h=U=cQ?h=U=Te?h=U=f0?h=U=Wh+l?h=U=hi?h=U=k'?h=U=(m?h=U=wn?h=U=bpm9?h=U=-{r.?h=U=st?#;!:v@4:!;e@4:!;jO|D@4:!;)Z@4:!;Q {@4:!;@@4:!;^t@4:!;ԻU@4:!;ԐU@4:!;𥐾\@4:!;n4@4:!;*E@4:!;3/@4:!;O @4:!; @4:!;A @4:!;yO @4:!;͊ۇ @4:!;Bwc @4:!;F@4:!;#C;@4:!;5@4:!;ل@4:!;ل@4:!;p턾 @4:!;䃾@4:!;@4:!;!%?@4:!;CP@4:!;@4:!;f}U@4:!;RC{QL@4:!;x0@4:!;Ov1 @4:!;gEt@4:!;Gs@4:!;rI@4:!; Mrx@4:!;%?r@4:!;r^/ @4:!;at@!@4:!;v ]"@4:!;w{#@4:!;\x$@4:!;Yy%@4:!;+z&@4:!;{'@4:!;*~(@4:!;ޑ)@4:!;53+@4:!;#2.,@4:!;;-@4:!;DN.@4:!;x'b/@4:!;O?q0@4:!;N2v1@4:!;p?s2@4:!;ˀq3@4:!;4@4:!;5@4:!;'d6@4:!;Uk7@4:!;(C8@4:!;$ 9@4:!;Ֆ.9@4:!;:@4:!;;@4:!; !7<@4:!;ӽ<@4:!;߈=@4:!;Z>@4:!;X7?@4:!;@@4:!;T A@4:!;A@4:!;B@4:!;UC@4:!;ɚWD@4:!;Z/E@4:!;ygF@4:!;囝&7G@4:!;ƞH@4:!;H@4:!;$BI@4:!;;k}J@#T;ߡ;%=K@#;!-@:3";Ԕ!x@:3";{@:3";`擾υ@:3";ē+@:3";kk@:3";Iْ<@:3";WCy@:3";y@:3";흑^+@:3";/ᐾ@:3";#@:3";9EX@:3";LŎV @:3";RD @:3";+ @:3";lv @:3";K"d @:3";ß9E @:3";4k'@:3";ߣ @:3";-@:3";@:3"; K@:3";愾@:3";gͬ@:3";i@:3";p"u@:3";@:3";g+@:3";|?q@:3";z!Y@:3";lx<@:3";dyw@:3";;u@:3";t@:3";r@:3";wr>@:3";@:3";闾5]?@:3";HN@@:3";c՘>@A@:3";X/B@:3";-C@:3";pCD@:3";Hk!D@:3";E@:3";=F@:3";8ܟuG@:3";"P5H@:3";I@:3";\"I@:3";ùJ@#T;3;eRK@#;j/"<}wLL@#;j/"뒾@:";y@:";yz@:";)@:";@:";/1} @:";]_ @:";beH @:";8- @:";= @:";G- @:";p@:";9G @:";"K@:";2Y@:";xq@:";R 6V@:";;偾)@:";@:";@:";:|@:";Ֆz@:";Qyy@:";ExY@:";Kw.@:";Ju*@:"; tu@:";GrF@:";rl@:";s@:";}t @:";u!@:";@v"@:";lw2#@:";^Kx3%@:";yy\&@:";{v'@:";Pq|*(@:";$ ~ʦ)@:"; 1*@:";1+@:";,@:";9 .@:";1(/@:";ZeS0@:";3E1@:";Ӥ2@:";mʍ3@:";/P4@:";Ï=+5@:";;F(6@:";n27@:";58@:";E69@:";ퟗu::@:";Q8-;@:";ꚾ;@:";<@#T;;=@#T;;Uߙx=@#T;;[%>@:";4>@:";cb?@:";;™@@:";OzA@:"; fB@:";% QC@:";A8D@:";Gq E@:";ϟ F@:";F@:";꡾ͯG@:";KxrH@:";ᚣLI@:";[s,J@:";/6 K@#T;;ΉK@#;"@#T;bۢ;ꚾ-?@#T;bۢ;v?@#T;bۢ;q@@#T;bۢ; ˽A@#T;bۢ; ✾YB@#T;bۢ;ߋC@#T;bۢ;*"rD@:b";&VE@:b";b9F@:b";0G@:b";/_G@:b";TH@:b";j+I@:b";_料J@:b";ssgK@:b";`1?L@#T;bۢ;ꯧM@#T;bۢ;2M@#;b"<]PXN@#T;bۢ;tO@#T;bۢ;DP@#T;bۢ;<Q@Ք==eQ@Ք==W!OR@Ք==S@Ք==rNRT@Ք==;U@Ք==ƣ!V@Ք==ۧW@Ք==Y@Ք==У3Z@Ք==U[@Ք==z\@Ք==]@Ք==Z^@Ք==_@Ք==f&a@Ք==eUb@Ք==y=c@Ք==:d@Ք==4e@Ք==yWXf@Ք==RӮ>%h@Ք==esGi@Ք== gj@Ք==Ƴƅk@Ք==Xl@Ք==\Am@Ք==q:Zn@Ք==9o@Ք==q@Ք==w?O==x2>?O==F zg~?O=={?O==t#|?O==4};?O==^M~y?O==$a?O==FA8?O==Ҁ4?O==#gs?O==!?O==Z ?O==H(?O==d?O==6Ý?O==m?O==>?O==7C?O==y?O==ꈾu?O==߉@?O==Պo?O==]B?O==Yt?O==y?O==RW?O== L9?O==򕐾"?O==T?O==?O==v7?O==Ùc%?#T;E/;훛?#T;E/;/0d?#T;E/;@#T;E/;o@:E/#;Ӄ @:E/#;6 L@:E/#;@:E/#;| 0/@:E/#;O,@:E/#;㎗ @:E/#;\P@:E/#;O@:E/#;[^@:E/#;~n@:E/#;,,@:E/#;@@:E/#;L@:E/#;Y @:E/#;9ٔ @:E/#;Q܉y @:E/#;ʈmW @:E/#;#0 @:E/#;:@:E/#;$@:E/#;Hj@:E/#;@:E/#;@:E/#;ظ~@:E/#;:{h@:E/#;x@:E/#;wF@:E/#;;ut@:E/#;vltǛ@:E/#;(rߩ@:E/#;6@:E/#;g?7@:E/#;xX8@:E/#;Vl9@:E/#;Gtm:@:E/#;qfN;@:E/#;b<@:E/#;2L<@:E/#;\WW=@#T;E/;Й=@#;E/#@#;E/#<?@#;E/#<؟֩?@#;E/#<ڜQf@@#;E/#J@:E/#;HJ@:E/#;:dK@:E/#;L@:E/#;1wM@:E/#;|HN@#T;E/;YO@#T;E/;W [O@#T;E/;ﭨP@#T;E/;G-Q@O==ݧxR@O==itJaS@O==( ST@O==OU@O==UjSV@O==3`W@O==V6tX@O==4Y@O==/mZ@O== l[@O==ͦ\@O==+L^@O==5짾AG_@O=="s`@O== {a@O==mb@O==Ovc@O==A+e@O==ǭVf@O==Mg@O==?qh@O==P䱾i@O==jhj@O==qXl@O==@v;'#< X>@v;'#D@#T;';bVE@#T;'; dF@#T;';bfG@#T;';H@#T;';̩GsI@#T;';fJ@#T;';L3TK@#T;';ӆv6L@#T;'; M@#T;';vM@#T;';4ȴN@ɓ= f=RO@ɓ= f= p^P@ɓ= f=+.7Q@ɓ= f=Mh'R@ɓ= f=_ R@ɓ= f=ծS@ɓ= f=XT@ɓ=f=1U@ɓ=f=ĨV@ɓ=f=W@ɓ=f=t X@ɓ=f=q Z@ɓ=f=H([@ɓ=f=J\@ɓ=f=p]@ɓ=f=&^@ɓ= f=_@ɓ= f=˪`@ɓ= f=~b@ɓ= f=qLc@ɓ= f=hJ{d@ɓ= f=se@ɓ= f=ڐf@ɓ= f=Űh@ɓ= f=O/i@ɓ= f=]WZj@ɓ= f=k@ɓ= f=5Kl@ɓ= f=ٳtm@ɓ= f=P:n@ɓ= f=˺!p@ɓ= f=\sGq@ɓ= f=4nlr@ɓ= f=A?B= =a ?B= =ф9?B= =_B4d?B= =!?B= =l#x?B= =5?B= =( V ?B= =f6?B= =t^?B= =B|Q?B= =??B= =r?B= = ?B= =$?B= =QI?B= = ?n?B= =Hu?B= ='f?B= ="?B= =W鎾?B= =?B= =|+?B= =LhB?B= ='.T?B= =^?B= =i5J]?B= =L?B= = R)?B= =?B= =uɫ?B= =4mU?B= =Ef?B= =ǹ?B= =2w9@: #;ɔg~:@: #;f*X;@: #; m <@: #; <@#T; ף; b=@#T; ף;#>@v;<#<&>@v;<#<֭\?@v;<#=m@B= =hn@B= =S%lo@B= =Ցp@B= =q@B= =dvs@B= =rs?6= >=[?6= >=U?6= >=$7?6= >=V?6= >=u?6= >=R\?6= >=ؼ?6= >=R(h?6= >=і$?6= >= ?6= >=(?6= >=9E?6= >=g`?6= >=g hz?6= >=p>?6= >=7~?6= >=EՏ?6= >=B|?6= >=0*c?6= >=ܑ&?6= >=>?6= >=DR*?6= >=$?6= >=Q$?6= >=?6= >= ?6= >=^?6= >=ř?6= >=U3g?6= >=ׄ?6= >=9#?6= >=T^?6= >=Þ?6= >=8(?6= >=𞾯@?6= >=?6= >=LȔ?6= >=יִ%@6= >=7㜾@6= >=N@6= >=ۚj@6= >=!9@6= >=@6= >=u"@6= >=@6= >=ʒ@6= >=~@#T;Q3;xb@#T;Q3;|G@#T;Q3;j'@:*$;=҈ @:*$;v7y @:*$;h @:*$;Ńd @:*$;/܁ @:*$; @:*$;\|@:*$;x8@:*$;ZsR@:*$;)q"r@:*$;@6= >=Z+?@6= >=:?@6= >=Aas@@6= >=&A@6= >=A@6= >=âMB@6= >=@C@6= >=ܽ}D@6= >=䥾ND@6= >=-!E@6= >=&ofF@6= >=bG@6= >=lJH@6= >=67I@6= >=K;)J@6= >=\K@6= >=g L@6= >=(VL@6= >= M@6= >=.N@6= >=5'!O@6= >= HmP@6= >=e⮾8LQ@6= >=,R@6= >=qS@6= >=/S@6= >=ﭾT@6= >=~U@6= >=xV@6= >=GW@6= >=&X@6= >=#fY@6= >=[@6= >=&w-\@6= >=Q#N]@6= >=|q^@6= >=fx_@6= >=qT`@6= >=_a@6= >=맯c@6= >=fJd@6= >=j4:ze@6= >=2f@6= >=[ g@6= >=  i@6= >=;j@6= >=q9kk@6= >=a,l@6= >=m@6= >=Ϲn@6= >=^+p@6= >=K[6Zq@6= >=r@6= >=Hs@6= >=?==]?==S{?== V ?==b! ?==f1?==HD?==2rU?==ю i?==Y2x?===Ҋ?==h?==p?==*搾$?==`K?==z⑾?==fj?==fB?==΋?==N(H?==6Ȕ?==vo?==$2?==斾?==?==F`?==!ș^?==i?== &?==@#?==8?==t$?==.ra?==򵟾F`?==˟D?==հ?== g\>?==K螾%?==9(?==Z+1@==M@==#+@==@==T(@==ak@==*W{@==Ֆ=@==Á @#T;3;d2@#T;3;>Z@#T;3;~tM@:$;ͭ(@:$;憾=d @:$;̈́Y @:$;𣂾\ @:$;䁀k @:$;8|3 @:$;y@:$;0u@:$;pL@:$;KmL@:$;l@:$;j@:$;?g@:$; d@:$;|ab@:$; &a@:$;ja$@:$;b[@:$;c@:$;cu@:$;WdŠ@:$;6f^@:$;h" @:$;Tsi!@:$;c&#@:$;^)$@:$;&@:$;Mq'@:$;Eq0b)@:$;rL*@:$;nw,(,@:$;yJ@-@:$; V|G:.@:$;C/@:$;jbh0@:$;ӟ1@:$;E[2@:$;u3@:$;6e5@:$;_&6@:$;17@:$;G>8@#T;3;K_D9@v;3$:@v;3$@v;3$@==h#}?@==Sh<@@==fg?@@==8iA@==fAB@==aB@==]mC@==bSuD@==-`?E@==꨾F@==,)F@==jG@==H@==0I@==zJ@==oyK@==fL@==qQM@==Sv8N@==ΰ.O@==հ7O@==iȰP@==.*Q@==R@==XS@==(=T@==IrU@==PïiV@==[fW@==Lo/jX@==LTsY@==$F8Z@==J,[@==|`\@==@]@==Cʯ'^@== `@==ۋFa@==N qb@==c@==Rd@==^e@==ܳ -g@==l^h@==Hii@==|+j@==8k@==&m@==ǽYn@==4ںo@==p@==$q@==N"s@==Tt@==?*==d?*==ڮ?*==?*==cAO?*==W?*==DۑV?*==)M?*==x~?*==͒?*==y#?*==E>?*==ߓ ?*==kH ?*== ?*==!"?*==ᘕ ?*== ?*==ⓖ:?*==H`?*==K?*==F?*==옾?*==?*==Lp}?*==Sf?*== B.?*==ye%@:z$;H2k&@:z$;:n(-(@:z$;nzp)@:z$;n(*@:z$;o-',@:z$;:qS>-@:z$; t;.@:z$;zG/@:z$;͒k0@:z$;1@#T;z;G;2@#T;z;Z- 4@:z$;‰65@#T;z;tC2Y6@#T;z;،p7@#T;z;W8@*==i9@*==}:@*==jh;@*==FҖ9C<@*==<ژ=@*==Ś=@*==~ >@*==/JD?@*==A?@*==<@@*==YzSA@*==>B@*==cB@*==ڥkC@*==&D@*==x*D@*==-]ޯE@*==F@*==\ȫ&WG@*==5H@*==I@*==.J@*==%J@*==U@K@*==_L@*==ϱM@*=="N@*==3SO@*==fj/nP@*==mpUQ@*==0c=R@*==O-'S@*==-+T@*== \U@*==%汾U@*==&ñV@*== W@*==˂wX@*==qZ@*=='js[@*==?t-%\@*==臱>]@*==.B]^@*== 챾~_@*==9a`@*==1:a@*=='b@*==|#d@*== 3]Qe@*==ݴ|f@*==N1g@*==R_h@*==b0vj@*==(Ik@*===}l@*==6깾>m@*==Ến@*==~㻾vp@*==弾Nq@*==r@*==0s@*== Jt@*==/39?=Ɔ=mG?=Ɔ=?=Ɔ=甾_?=Ɔ=$?=Ɔ=ZbC?=Ɔ={4?=Ɔ=;ᕾ?=Ɔ="G?=Ɔ=i?=Ɔ=⮖p{?=Ɔ=q?=Ɔ=fN!&@:]7%; i J'@:]7%;k`w(@:]7%;lӢ)@:]7%;-yl[*@:]7%;k&+@:]7%;׉kN -@:]7%; m.@:]7%;lu/@:]7%;}@0@:]7%;Psy1@T;]7;fw2@T;]7;?LJ4@:]7%;ĉ?5@T;]7; r6@T;]7;A-7@T;]7; 8@=Ɔ=|򐾳9@=Ɔ=B:@=Ɔ=7;@=Ɔ= Z<@=Ɔ=9 aS=@=Ɔ=>@=Ɔ=ٜv>@=Ɔ=斞?@=Ɔ=u:S@@=Ɔ=áA@=Ɔ=L54A@=Ɔ=!aqB@=Ɔ=奾B&C@=Ɔ=|*QC@=Ɔ=+jgD@=Ɔ="%\E@=Ɔ=۪_$F@=Ɔ= F@=Ɔ=;!G@=Ɔ=O\H@=Ɔ=lI@=Ɔ=fLnJ@=Ɔ=DWK@=Ɔ=WCL@=Ɔ=.M@=Ɔ=N@=Ɔ=o~O@=Ɔ=쾳O@=Ɔ=賾zP@=Ɔ=Q@=Ɔ= зR@=Ɔ=ӥS@=Ɔ=5>T@=Ɔ=<۳?U@=Ɔ=ųV@=Ɔ=֬W@=Ɔ=X@=Ɔ=+UY@=Ɔ={ڎZ@=Ɔ=c}R[@=Ɔ=b\@=Ɔ=4!]@=Ɔ=ųd^@=Ɔ=`@=Ɔ=EZ-a@=Ɔ=Ub@=Ɔ=,~c@=Ɔ=id@=Ɔ= 'e@=Ɔ=񟶾dg@=Ɔ=G8h@=Ɔ=Mji@=Ɔ=4j@=Ɔ=J}k@=Ɔ=UKm@=Ɔ=%;n@=Ɔ=;qo@=Ɔ=伾p@=Ɔ=Ͻq@=Ɔ=s@=Ɔ=㩿Jt@=Ɔ=Au@=Ɔ=Q?=f=}?=f=צ?=f=ؘ?=f=By?=f=X8b?=f=,e@wN @T;;rc @T;;l} @:?%;g@:?%;)cE@:?%; ^@:?%;8Y@:?%;lW@:?%;VeU@:?%;V @:?%;WN*@:?%;/XI@:?%;X^@:?%;[CY*@:?%;d!ZS@:?%;j[V@:?%;]#@:?%;- ` @:?%;=b !@:?%;Ke"@:?%;fF"$@:?%;gR%@:?%;ghJ&@:?%;zj.'@:?%;iUk!(@:?%;l)@:?%;al*@:?%;k+@:?%;Yk,@:?%;>nϼ-@:?%;td.@:?%;7T|/@T;;5 C1@v;q%<̈́ٙ2@v;q%5@=f=~6@=f= 7@=f=8@=f=l9@=f=J`L:@=f=\:;@=f=W]N<@=f= ]d=@=f=N$b>@=f=5c+?@=f=?@=f=Ƞ@@=f=ohA@=f=:"B@=f=+B@=f=yC@=f=W"PD@=f=E@=f=E@=f=4pF@=f=giG@=f=ΌO>H@=f=ʧI@=f=I@=f=隱aJ@=f=uK@=f=]1dL@=f=(ԳAM@=f=>ZN@=f=ôtO@=f=scP@=f=S;RQ@=f=WzAR@=f=2S@=f=񜵾)%T@=f=鞵;U@=f=RV@=f=뎵 W@=f=#x X@=f=| Y@=f=%vZ@=f=x[@=f=z-\@=f='A]@=f=Y^@=f= ͵u_@=f=d`@=f=l>ظa@=f=jb@=f=[춾d@=f=X2e@=f=ӷ|`f@=f=Wg@=f=븾]h@=f=Di@=f=1p%k@=f=⺾Yl@=f=Rm@=f=Xn@=f=zo@=f=轾2q@=f=jr@=f=䆿4s@=f=\#t@=f=H4bv@=f=s?=e=B_?=e=a?=e=͜bf?=e=Ꜿl@?=e= ?=e=-b?=e=eP?=e=p?=e=ꖝI?=e=[?=e=}靾3?=e= ?=e=E?=e=x̷?=e=i?=e=랾_?=e=/4/?=e=~s?=e=7?=e=#T?=e=rN?=e=_Ҡ ?=e=??=e=k?=e=Q?=e=q̶?=e=S?=e=(?=e=E?=e= ?=e=袾*?=e=U??=e=@I?=e=|Tr?=e=_?=e=9I?=e=@=e=ۥr?@=e==@@=e=&WA@=e=HA@=e=äUB@=e=^BBC@=e= 槾D@=e=_QD@=e=rĪˁE@=e=FF@=e=b4G@=e=G@=e=UH@=e=ӰCI@=e=ϱvlJ@=e=OK@=e=.75L@=e= S*M@=e= N@=e=N@=e=O@=e=^P@=e=Q@=e=CⶾR@=e= S@=e='T@=e=T7U@=e=BtV@=e=VJOW@=e=KX@=e=rOVY@=e=RUZ@=e=[[@=e=g\@=e=y]@=e=B}^@=e=UG`@=e=뷾_$a@=e=x*Fb@=e=ojkc@=e=ødd@=e=#e@=e=ipf@=e=zh@=e=c @T;C;]W@T;C;jgX@T;C;gS:@T;C;O@:C&;M@:C&;L@:C&;MV@:C&;Mq@:C&;M@@:C&;J@Lt@:C&;O]@:C&;U)@:C&;C7[Yj@:C&;U] @:C&;_?!@:C&;a #@:C&;3d$@:C&;f%@:C&;hE*&@:C&;oj9'@:C&;:la7(@:C&;jmT)@:C&;n*@:C&;Ap*@:C&;ۤr+@:C&;vuP,@:C&;x,@:C&;{.@:C&;/@T;C;Tn0@T;C;ꄾ7n2@T;C;|{Q3@T;C;뉾~95@=E=5H6@=E=p\7@=E=wh8@=E=nh:@=E=[l!;@=E=Q!<@=E=F=@=E==i=@=E=/3U>@=E= ?@=E=p @@=E=u硾TA@=E=VB@=E=vB@=E=t$ʥC@=E=UhD@=E='J,E@=E=쾫E@=E=K |F@=E=~pG@=E=GVH@=E=а+I@=E=౾GJ@=E=߲J@=E=ȳ&K@=E=񡴾]L@=E=aM@=E= }N@=E=#kO@=E=$[P@=E=MQ@==$BR@== 77S@==p.T@==ǟ(U@==@=xE=غ ?@=xE=ޫ?@=xE=-@@=xE=||+A@=xE=UpB@=xE=K `@=xE=f'a@=xE=qEb@=xE=7Żfc@=xE=d@=xE=>İe@=xE=Yf@=xE=bټh@=xE=31i@=xE=`j@=xE=k@=xE=gl@=xE=ھm@=xE=CV,o@=xE=ӿ5bp@=xE=Tq@=xE=r@=xE=(byt@=xE=d?u@=xE=y¾vv@=xE= þ`w@=xE="ਾ?~===Ψo?~===E?~===?~===-?~===/WB?~===t5?~===Aa?~===P>?~===\7@~===Y9@~==='hC:@~==={j[;@~====ch<@~===[i=@~==="R`>@~===xDN?@~===8r4@@~===x%#A@~===A@~=== B@~===>C@~===RbD@~===w00E@~===ϫiE@~===WF@~===ɮG@~===t'3nH@~===kBI@~===񛲾PJ@~=== J@~===ȶcK@~==PJL@~==+M@~== TN@~== nO@~==5^P@~==QMPQ@~==gӹ$FR@~==I=S@~==!z7T@~== 3U@~==Uw1V@~==>1W@~==yͻ+4X@~==i8Y@~==$S@Z@~==YLfI[@~==oU\@~==~(d]@~==}u^@~==5м_@~==f`@~== ka@~==NFb@~==Swvc@~==e@~==H⽾Af@~==$ig@~==hh@~==$i@~== tj@~==`l@~==s Pm@~==2n@~==kJo@~==p@~==Z!r@~==Xs@~==@¾zt@~==A¾Cu@~==1þv@~==%þ'3x@~==z?=)=ା?=)=n/?=)=Z?=)=dx_?=)=Ub?=)=/2?=)= )?=)=嫾Y?=)=jY?=)=؜|?=)=x?=)=S?=)=1y?=)= $D?=)=Sꪾ?=)=`Ȫf?=)=L?=)=4?=)=Y ?=)=4?=)=B?=)=9ҩx?=)=a?=)=E?=)=樾?=)=t?=)= E?=)=RՒ?=)=؝{?=)=ϥ?=)=䤾k)?=)=⣾ ?=)=eâ*V?=)='?=)=,??=)=ᶞAb?=)=!(?=)=r\?=)=Ƣ?=)=0?=)=1~?=)=[?=)=f@=)=eJ@=)=Է_@=)=BL@=)=@=)=ۥ@=)=]@=)=U/{f@=)=oyY@=)=s2Z@=)=mfg@=)=Eh, @=)=@=)=ҝ?@=)=;ğn@@=)=mTA@=)=/4B@=)=|C@=)=3RXC@=)=wD@=)=ͪE@=)=pbF@=)=5G@=)=6xc H@=)=wܰH@=)=F$JI@=)=[J@=)=1|lK@=)=KL@=)=V}/M@=)=(dN@=)=7qN@=)=O@=)=窹]P@=)=JNQ@=)=D޺R@=)=VaϿS@=)=ԻoT@=)==U@=)=V@=)=:漾W@=)=o+YX@=)=8j\Y@=)=Z@=)=н[@=)=r\@=)=%^]@=)=Lh _@=)=o `@=)=B6a@=)=྾Pb@=)=d꾾lc@=)= 3d@=)=pDOe@=)=yxf@=)=g@=)=鿾$i@=)=,Oj@=)=p}k@=)=̵ml@=)=m@=)=zSwo@=)=FBp@=)=¾vq@=)=[¾r@=)=Ǹ¾*s@=)=þju@=)=|þ{Lv@=)=iþw@=)=Qľ̷x@=)='N ?r=N=)?r=N=?r=N=8?r=N=PRc'?r=N=;?r=N=㯾5?r=N=s?r=N=tA?r=N=6:?r=N=fL?r=N=PȮ?r=N=qV?r=N=S#?r=N=D:\?r=N=٭?r=N=홭[?r=N=\ZQ?r=N=?U?r=N=G̬h?r=N=AG?r=N=*?r=N=%ɫ3?r=N=Z ?r=N=ߪP?r=N=&R?r=N=窩?r=N=x~?r=N=%?r=N=;y?r=N=r@r=ԛ=/l=@r=ԛ= ='@;'<Ů=\@;'@r=N=e?@r=N=KWH@@r=N=\>A@r=N=&yB@r=N=ZC@r=N=ڧ8D@r=N=䟩0E@r=N=dZE@r=N=nF@r=N=˜G@r=N=:tH@r=N=w NI@r=N=Ʋ(J@r=N=K@r=N=+CK@r=N=?]L@r=N==M@r=N=+`N@r=N=x}O@r=N=9ҹkP@r=N=]Q@r=N=;RR@r=N=ػIS@r=N=fh DT@r=N=5뼾AU@r=N=pa:AV@r=N=ǽ=CW@r=N=#GX@r=N=FyUMY@r=N= žeUZ@r=N=B_[@r=N=Ak\@r=N=vz]@r=N=ʧn^@r=N=Կ_@r=N=ٳ`@r=N=(a@r=N=PRb@r=N=5{ud@r=N=!e@r=N=Cf@r=N='gg@r=N=*h@r=N=W[i@r=N=j@r=N= l@r=N=¾;m@r=N=q=¾kn@r=N=(¾o@r=N=¾p@r=N=þr@r=N=Rþ"5s@r=N=þit@r=N=þu@r=N=J@ľgv@r=N=ľx@r=N==ľ6Q@닄==hXy:@닄==wHAC@; (z&@:(;4gv'@:(;jc_(@:(;mp@)@:(;r.*@:(;xY*@:(;1|+@:(;+1,@:(;dZ-@:(;2 Q.@T;;/@T;;ɓ0@T;;o1@닄==؈2@닄==S{3@닄==狾u4@닄==|5@닄==d=(7@닄==DW8@닄==P89@닄==x):@닄==#;@닄==j<@닄===@닄==>@닄==x?@닄==D࠾@@닄==uǢA@닄==2IB@닄==rC@닄==uU D@닄==gE@닄==A֫FF@닄==|}$G@닄==GH@닄=='H@닄==I@닄==&UJ@닄==򙴾 yK@닄==ǵu[L@닄==ⶾ?M@닄==B&N@닄==rḾO@닄==CȹO@닄==8P@닄==eQ@닄==?MR@닄==CɼS@닄==eT@닄==gU@닄==xCV@닄== 뾾W@닄==qWVX@닄==VY@닄==R CZ@닄==Z5[@닄==, \@닄==nV^@닄==D_@닄==,JY3`@닄==OxIa@닄==ab@닄==x{c@닄==$d@닄==m¾,e@닄==E¾f@닄==/k¾"g@닄==ѓ¾"i@닄==¾Ij@닄==¾rk@닄==þ؞l@닄==Aþm@닄==nþn@닄==þ0*p@닄==þWZq@닄== ľ?r@닄==Dľs@닄==ľt@닄===ľh%v@닄==ľXw@닄==>žx@닄==žy@닄==eY1?e== ?e==򰸾0?e==XV?e==j?e==5 ?e===z?e==޶?e==|2=?e==?e==ղT?e==IKW`?e==vാ?e==qy?e==KN~?e==ڌ?e==V8?e==h?e==?e==muM?e==ذ ?e==-:?e==s`?e==𧮾?e==ḓ?e==ڬ?e==ԫ?e== GV?e==?e==8_@?e==Ҧ?e==[,I?e==ã?e==g|?e==zP['?e==]p?e==w"?e==i{?e==AFb?e==Z?e==4c?e==TM?e==vގu?e==7T?e==9E)@e==k @e==P]@e==w@e==9b}?U@e==+w@@e==Xq8@e== l?@e==OfT@e== `hy@e==[ @e==Uc @e==PD @e== LƦ @e==7G @e==C@e==@y@e===$@e==;Q@e==y:#@e==9p@e==X;:1?@e==;@e==n=z@e==A @;@i(<9E" @;@i(P@e==.?@e==~"@@e==AdA@e==E B@e==&B@e==LOC@e==TɨkD@e==7˹E@e==A|F@e==魾G@e==}bH@e==*1DI@e==:tl&J@e==гK@e==NK@e==SL@e==6x|M@e==;N@e==DO@e==N{ P@e==[pQ@e==b/0eR@e==\S@e=="WT@e==7RTU@e==ᄒTV@e=={VW@e==ml[X@e==dtbY@e==i]kZ@e===Fv[@e==\@e==]@e==5¾ˢ^@e==`w¾F_@e==W¾`@e==?¾a@e==þ'b@e==;þd@e==0fþ/e@e==׉þMNf@e==þng@e==þh@e==Rþöi@e==o ľ'j@e==,ľ}l@e==Oľ0m@e== qľO\n@e==ľۉo@e==ľEp@e==ľq@e==Gžs@e==+žHt@e==aUžzu@e==+žv@e==žw@e==žy@e==% ƾAz@e==5zNF?ߊ=n= ?ߊ=n=I?ߊ=n=3Q1?ߊ=n=?ߊ=n="R?ߊ=n=޺?ߊ=n=g$?ߊ=n=~p?ߊ=n=c?ߊ=n=?ߊ=n=~ಾ;V?ߊ=n=Ae?ߊ=n=|(?ߊ=n=/4I?ߊ=n=!?ߊ=n=?ߊ=n=6ȬZ?ߊ=n={?ߊ=n=-?ߊ=n=5n?ߊ=n=-!?ߊ=n=TT?ߊ=n==?ߊ=n=>{?ߊ=n=0n?ߊ=n=F?ߊ=n= ?ߊ=n=Sp?ߊ=n= ?ߊ=n=A?ߊ=n=1?ߊ=n=?ߊ=n=H?ߊ=n=bgk?ߊ=n=?ߊ=n=섾@ߊ=n=@ߊ=n=~~J`@ߊ=n=ZxD@ߊ=n=r6@ߊ=n=t&m?7@ߊ=n=|`gE@ߊ=n=5a_b@ߊ=n=-\ގ@ߊ=n=V. @ߊ=n=nQ @ߊ=n=0Lo @ߊ=n=H @ߊ=n=DN@ߊ=n=A(@ߊ=n=]>^@ߊ=n=5;@ߊ=n=#9@ߊ=n=86@ߊ=n=8^@ߊ=n=k9~@ߊ=n=;.@ߊ=n=z=@ߊ=n= AE@ߊ=n=IfEi @ߊ=n=VJ6"@ߊ=n=x{P#@ߊ=n=V2$@T;ɨ;%v]&@T;ɨ;EcxC'@T;ɨ;FhQ(@T;ɨ;l8L)@T;ɨ;q9*@T;ɨ;|u+@T;ɨ;z,@T;ɨ;Ow~,@T;ɨ;9-@T;ɨ;M.@T;ɨ; ф/@ߊ=n=%y0@ߊ=n=F 1@ߊ=n=H2@ߊ=n=ؚ3@ߊ=n=^ݗ4@ߊ=n=5@ߊ=n=i6@ߊ=n=FDa7@ߊ=n=f8@ߊ=n="9@ߊ=n=S| ;@ߊ=n=Ct%$<@ߊ=n=LU]6=@ߊ=n=O; D>@ߊ=n= L?@ߊ=n=O@@ߊ=n=᡾wNA@ߊ=n=׿GB@ߊ=n=- @Y=l=,I @Y=l=<E @Y=l=iA]@Y=l=)>>@Y=l=;Þ@Y=l=t9i6@Y=l=%A8@Y=l=z7Bv@Y=l=7&@Y=l=8@Y=l=e:Y@Y=l==E@Y=l=4A=@Y=l=E!@Y=l=Jt"@Y=l=P#@Y=l=V+%@Y=l= ]k&@Y=l=b'@Y=l=hhq(@Y=l=Tm)@Y=l=q*@Y=l=gv+@Y=Yl=z,@Y=Yl=8_z-@Y=Yl=Gj.@Y=Yl=ӡF]/@Y=Yl=sQ0@Y=Yl=U/9F1@Y=Yl=5Ԉ\92@Y=Yl=h=,3@Y=Yl=4@Y=Yl=>x5@Y=Yl=<6@Y=Yl=M7@Y=Yl=18@Y=Yl=Zؓ*9@Y=Yl=;:@Y=Yl=TQL;@Y=Yl=2"]<@Y=Yl=k"l=@Y=Yl=Μw>@Y=Yl=?@Y=Yl=wj@@Y=Yl=ZA@Y=Yl=/ςB@Y=Yl=X|C@Y=Yl=ȧrD@Y=Yl=ʊfE@Y=Yl=EVF@Y=Yl=4AFG@Y=Yl=>3H@Y=Yl=. I@Y=Yl=t J@Y=Yl=0J@Y=Yl=eK@Y=Yl=lxL@Y=Yl=i6wM@Y=Yl=kN@Y=Yl=Փ#O@Y=Yl=eP@Y=Yl=ݲfQ@Y=Yl=2F{R@Y=Yl=KsS@Y=Yl=GqoT@Y=Yl=AemU@Y=Yl=mV@Y=Yl=voW@Y=Yl=^tX@Y=Yl=v{Y@Y=Yl="¾Z@Y=Yl=þ[@Y=Yl= þ\@Y=Yl=Qþ]@Y=Yl=Wľػ^@Y=Yl=ľF_@Y=Yl="ľ`@Y=Yl=xDža@Y=Yl=žc@Y=Yl=xžJ(d@Y=Yl=žCe@Y=Yl=W ƾ `f@Y=Yl=-ƾA~g@Y=Yl=JFƾEh@Y=Yl=(aƾi@Y=Yl=yuƾj@Y=Yl=ƾl@Y=Yl=hƾ 0m@Y=Yl=ƾXn@Y=Yl=ڨƾo@Y=Yl=Ѳƾp@Y=Yl=ƾq@Y=Yl= ƾ2s@Y=Yl=tƾ1t@Y=Yl=ƾN_u@Y=Yl=_ƾv@Y=Yl=ƾIw@Y=Yl=Ǿx@Y=Yl=O!ǾTz@Y=Yl=9ǾgH{@Y=Yl=͑ž%t?҉=P=ľg?҉=P=#hľ?҉=P=þ)?҉=P=i:þV?҉=P=f¾8?҉=P=¾a?҉=P=b7?҉=P=@?҉=P=?҉=P=k?҉=P='?҉=P=O?҉=P=@w?҉=P=xb?҉=P=]:?҉=P=Ⱥ?҉=P=ݹu?҉=P=ḾQL?҉=P=۷z?҉=P=2?҉=P=?҉=P=7Te?҉=P=Z?҉=P=-˝?҉=P=#?҉=P=Fy:?҉=P=Ƭ_?҉=P= a?҉=P=0h?҉=P=x'e?҉=P=Uj?҉=P=?҉=P= ?҉=P=^S?҉=P=0D?҉=P=x?҉=P=dꖾW?҉=P=H?҉=P=_?҉=P=֎?҉=P=> Q2?҉=P=+/|?҉=P=MIu?҉=P=\d?҉=P=g }@҉=P=TzV@҉=P=t?;@҉=P= os/@҉=P=]3i0@҉=P=rncy@@҉=P=?] _@҉=P=%\X@҉=P=g'SK@҉=P="8N @҉=P=4Ik @҉=P=niEp @҉=P=@҉=P=;8M@҉=P=D9@҉=P=I7w@҉=P=6@@҉=P=(|6A@҉=P=J 7.X@҉=P=e8w@҉=P=:_@҉=P=k=*@҉=P=xcAȷ@҉=P=E:!@҉=P=K"@҉=P=ڮP$@҉=P=dVm%@҉=P=\&@҉=P=hZb'@҉=P=gy)@҉=P=4m *@҉=P=@1rT+@҉=P=v,@҉=P=o{f-@҉=P=>.@҉=P= .@҉=P= /@҉=P=D0@҉=P=ȇJ1@҉=P=؃r2@҉=P=4+O3@҉=P=XȌ4@҉=P=Z65@҉=P=돾6@҉=P=}7@҉=P=N8@҉=P=w9@҉=P=^:@҉=P=`;@҉=P=tԙ<@҉=P=ce=@҉=P=cK>@҉=P=M1E?@҉=P=Q@@҉=P=ˢA@҉=P=#B@҉=P=$^C@҉=P=PD@҉=P=/ܩE@҉=P=mDF@҉=P=9pG@҉=P=ٮH@҉=P=o9}I@҉=P=nJ@҉=P=Ov_K@҉=P=ാPL@҉=P=>BM@҉=P=u34N@҉=P=иx'O@҉=P=P@҉=P=S EQ@҉=P=7R@҉=P=;S@҉=P=0*S@҉=P=]T@҉=P=U@҉=P=V@҉=P=W@҉=P=<¾%Y@҉=P=?¾ Z@҉=P=|þ[@҉=P=gľO$\@҉=P=ľ1]@҉=P=žBA^@҉=P=wž.S_@҉=P=ž#f`@҉=P=0)ƾza@҉=P=6uƾb@҉=P=ȴƾ֨c@҉=P=gƾd@҉=P=Ǿ3e@҉=P=9EǾDf@҉=P=dǾh@҉=P=Ǿ7i@҉=P=)Ǿ6Yj@҉=P=נǾ{k@҉=P=;Ǿl@҉=P=XǾm@҉=P=ǾNn@҉=P=Ǿ#p@҉=P=Ǿ>q@҉=P=Ǿgr@҉=P=Ǿs@҉=P=Ǿt@҉=P=ǾBu@҉=P=PǾw@҉=P=ǾDx@҉=P=Ǿqy@҉=P=Ǿsz@҉=P=Ǿ{@҉=P=]ɾΌ?L=SY=ȾQ?L=SY=>Ⱦ?L=SY=Ǿ\?L=SY=ƾ?L=SY=;ƾW?L=SY=/že?L=SY=Nľ?L=SY={ľ(?L=SY=Xþ=?L=SY=ѓ¾R?L=SY=!8f?L=SY=[{?L=SY=u?L=SY=.L?L=SY=i;D?L=SY=`:Y?L=SY=Z)M?L=SY= +?L=SY=+ٹ3?L=SY=W?L=SY=G>,?L=SY=ѵd?L=SY=K?L=SY=?L=SY=B`?L=SY=8Ϊ?L=SY=mVa?L=SY=[_?L=SY=H?L=SY=C?L=SY=ޤ?L=SY=䇢]?L=SY=?L=SY=ݶ?L=SY=,}?L=SY=iTuV?L=SY=ȖA?L=SY=˒$B?L=SY=s񏾂V?L=SY= '?L=SY=?L=SY=m*?L=SY=֏?L=SY=?L=SY=|_@L=SY=u?@L=SY=(o,@L=SY=2j|(@L=SY=!d@2@L=SY=l^ZJ@L=SY= Xp@L=SY=-Sz@L=SY=N@L=SY=*Iy; @L=SY=Eؚ @L=SY=AF @L=SY=+>t~@L=SY=i:;.@L=SY=8@L=SY=,6@L=SY=з5Ǹ@L=SY=15 V@L=SY=[5@L=SY=L6@L=SY=74@L=SY=p:@L=SY=w=Nc@L=SY=7A@L=SY= Fr!@L=SY=K"@L=SY=ʇP S$@L=SY=3V%@L=SY=^[/&@L=SY=a2(@L=SY=cg^)@L=SY==l |*@L=SY= r"+@L=SY=YvO,@L=SY={:-@L=SY=i.@L=SY=DO^/@L=SY=kcw0@L=SY=,di1@L=SY=I Y2@L=SY= 8H3@L=SY=׋;64@L=SY=ρ#5@L=SY=$6@L=SY=6@L=SY=U7@L=SY=-꓾X8@L=SY=j9@L=SY=*L:@L=SY=Ҙ;@L=SY=<@L=SY=7q=@L=SY=^>@L=SY=?@L=SY=Ppw@@L=SY=2A@L=SY=w B@L=SY=C@L=SY=hD@L=SY=E@L=SY=̫F@L=SY=3oG@L=SY=H@L=SY=ףsI@L=SY=,[J@L=SY=뫳K@L=SY=L@L=SY=Ã_M@L=SY=bڷN@L=SY=#¡O@L=SY= _P@L=SY=Š>Q@L=SY=R@L=SY=0S@L=SY=Y@T@L=SY=,nU@L=SY=ܞ{V@L=SY={ W@L=SY=H¾SX@L=SY= þWY@L=SY=þZ@L=SY=gľm[@L=SY=ž\@L=SY=že]@L=SY=(ƾ,^@L=SY=Zƾ_@L=SY=Wƾ`@L=SY=EǾ+b@L=SY=Ǿ *c@L=SY=ǾBd@L=SY=Ⱦ[e@L=SY=HȾwf@L=SY=?qȾg@L=SY=Ⱦh@L=SY=Ⱦ(i@L=SY=1Ⱦcj@L=SY=Ⱦl@L=SY=Ⱦ7m@L=SY=Ⱦ\n@L=SY=4Ⱦo@L=SY=Ⱦ"p@L=SY=,Ⱦ(q@L=SY=>Ⱦr@L=SY=DŽȾ#t@L=SY=tȾMu@L=SY=IgȾxv@L=SY=YȾw@L=SY=MȾ x@L=SY=AȾ/y@L=SY=7ȾF%{@L=SY=z5ȾO|@L=SY=;v?@=W=a̾צ?@=W= ̾"?@=W=L˾U?@=W=ۉʾ'?@=W=eɾ?@=W=TȾ?@=W=75Ⱦע?@=W=bǾr?@=W=Όƾ?@=W=iž?@=W=ľ?@=W=þ3?@=W=¾K?@=W=0Ͱ?@=W=Q,?@=W=N?@=W=@@=W=6@@=W= 4_@@=W=3@@=W=_3@@=W=I4i5@@=W=5R@@=W=7;p@@=W=i7:@@=W=֏=@@=W=A& @@=W=*FH!@@=W=#J!#@@=W=i9P$@@=W=Ut%@@=W=^[\='@@=W=wax(@@=W=bfW)@@=W=Kl*@@=W=q+@@=W=Bv$ -@@=W={{j.@@=W=r7b/@@=W=Bz 0@@=W=r1@@=W=񺆾,1@@=W=`2@@=W=3@@=W=mػ4@@=W=-5@@=W=bڏލ6@@=W=fv7@@=W=a8@@=W=WO9@@=W=OB@:@@=W=痾5;@@=W=䄙b.<@@=W=)+=@@=W=ϜZ)>@@=W=}*?@@=W=Z-,@@@=W=ޡ/A@@=W=z2B@@=W=xD/5C@@=W=C7D@@=W=*"9E@@=W=vS9F@@=W=9G@@=W=Vv8H@@=W=67I@@=W=ʰ4J@@=W=S1K@@=W=ֳf-L@@=W=K(M@@=W=$N@@=W=O@@=W=fP@@=W=Q@@=W=2廾R@@=W=MMS@@=W=r1IT@@=W=S?U@@=W==CnV@@=W=6W@@=W=y ¾~X@@=W=¾#Y@@=W=þ4,Z@@=W=ľ?6[@@=W=<žB\@@=W=žeP]@@=W=Fyƾ_^@@=W=Ǿp_@@=W=,Ǿ`@@=W=Ǿa@@=W=PRȾ.b@@=W=֫Ⱦc@@=W=<Ⱦd@@=W=r2ɾe@@=W=eɾg@@=W=;ɾ.h@@=W=3ɾMLi@@=W=ɾrkj@@=W=ɾzk@@=W=ɾl@@=W=ɾm@@=W=ܼɾn@@=W=ɾp@@=W=ɾ>q@@=W=<ɾdr@@=W=@lɾs@@=W=Sɾ)t@@=W=m7ɾYu@@=W=ɾw@@=W=Ⱦ.x@@=W=Ⱦ Xy@@=W=Ⱦwz@@=W=pȾ{@@=W=Ⱦ|@@=W=^iѾ?=gH=pо?=gH=Ͼ?=gH='ξDŽ?=gH=G ξn?=gH=RI;Z?=gH=k̾E?=gH=˾32?=gH=ʾm?=gH=ɾ ?=gH=Ⱦ?=gH=Ǿ?=gH=Oƾ?=gH=>ž?=gH=+nľ?=gH=4þy?=gH==?=gH=c?=gH=) ?=gH=#?=gH=?=gH=`?=gH= ?=gH=?=gH=?=gH=OUK?=gH=Me?=gH=? ?=gH=竾*?=gH=rp?=gH=㦾C?=gH=G=?=gH=?=gH=?=gH=ӛt|?=gH=ݘH?=gH=ו4,?=gH=/Ēt$?=gH=ۣ1?=gH=vW?=gH= B?=gH=q?=gH=Tǂ\?=gH=?=gH=Jx??=gH= 2r5(@=gH=k@=gH=ߨe@=gH=_ @=gH=YYm;@=gH='Tc@=gH=N@=gH=I?@=gH=;E2 @=gH=A @=gH=C==~ @=gH=/9`s @=gH=27@=gH=4{@=gH=\3 @=gH=Y2@=gH=j1 :@=gH=O=2@=gH=*3s@=gH=4Z@=gH= 7@=gH=9B@=gH=b=@=gH=xcA] @=gH=^E*!@=gH=6JY#@=gH=O$@=gH=29U+&@=gH=Z0'@=gH=]`(@=gH=f *@=gH=ܟk;+@=gH=qa,@=gH=hv}-@=gH={.@=gH= 7:/@=gH=`0@=gH=0ՄҎ1@=gH=r2@=gH=0o3@=gH= Y4@=gH=V-B5@=gH=3Î'6@=gH=V 7@=gH=n27@=gH=֓8@=gH=!s9@=gH=Fۣ:@=gH=t:;@=gH=/ԁ<@=gH=%ɛ\w=@=gH=`p>@=gH= l?@=gH=bj@@=gH=5CkA@=gH=䣾nB@=gH="qC@=gH=f3vD@=gH=ר {E@=gH=|F@=gH=fG@=gH={ʈH@=gH=HQ&I@=gH=㰾TJ@=gH=myK@=gH=yL@=gH=rl}M@=gH=3޶[N@=gH=BO@=gH=^P@=gH=ﺾ>Q@=gH=4R@=gH=8jęS@=gH=̛͔T@=gH=U@=gH=V@=gH=XiW@=gH=E¾hX@=gH=þJY@=gH=(~ľZ@=gH=Jž2[@=gH=c ƾE\@=gH=Eƾ!]@=gH=SZǾ^@=gH= Ǿ= `@=gH=tȾa@=gH=}Ⱦ1b@=gH=QɾHc@=gH=qɾ`d@=gH=ɾ!xe@=gH=d<ʾf@=gH=*pʾg@=gH=9ʾh@=gH=ʾi@=gH=ʾ}k@=gH=ʾ['l@=gH=yʾxGm@=gH=+ʾsin@=gH=ʾao@=gH=Fʾhp@=gH=N{ʾq@=gH=Zʾr@=gH=&7ʾt@=gH=ʾAEu@=gH=ɾzlv@=gH=ɾՓw@=gH=ɾox@=gH=oɾy@=gH=Gɾ| {@=gH=!ɾD2|@=gH=ɾyY}@=gH=JCվ]?3==`ԾԸ?3==x|Ӿ?3==Ҿc?3==Ѿq:?3==fо?3==yϾ6?3==|ξZC@3==nTxA@3==\N~r@3==aI@3==D@3==bi@>Y @3==w< @3==b8b/ @3== 6 @3==3j.@3==1ù@3==l0+K@3==z/@3==c0{@3==0@3==2_@3==3L@3==7m6G@3==Q9 {@3=== @3==A @3==E"@3==QJ#@3==ZO%@3==ETk&@3==Z\'@3==V_P)@3==;e`*@3==jǛ+@3==lp),@3==Lu-@3==${/@3== 30@3==ݔ~1@3==2@3==2 3@3==y[3@3==n4@3==h65@3==K֪6@3==n7@3==Ԓh8@3==cEF9@3==%:@3==V ;@3==FD(;@3==К<@3==]=@3==C睾,>@3==t?@3== @@3==_A@3==+0B@3==mʥC@3==`ND@3==E@3==LF@3==;4G@3==ȭH@3==\I@3==J@3==}K@3==?'L@3==N@3==yO@3==Ed P@3==ǹkQ@3==$R@3==.qS@3==[. T@3==뾾 &U@3==+V@3==&42W@3==D¾:X@3==GþWBY@3==.;ľKZ@3==!žCW[@3==žc\@3==ƾeq]@3==Ǿ^@3==c+Ⱦ_@3==GȾ`@3==Uɾca@3==ɾ-b@3==5Cʾc@3==ʾad@3==ʾf@3==;˾M/g@3==p˾Jh@3== ˾Zgi@3==˾j@3==˾k@3==z˾Yl@3==Z˾ m@3==˾o@3==G˾%p@3==s˾Gq@3==P˾kr@3== $˾6s@3==kʾ}t@3==ʾu@3==ʾ]v@3==Vʾ!"x@3==[#ʾGy@3==Nɾmz@3==ɾu{@3==ӈɾM|@3==[ɾ}@3==پ?=:=PؾL?=:=#׾Z?=:=(־E?=:=R&վ?=:=)%Ծ?=:=ӾT?=:=_ Ҿ'O?=:=о?=:=Ͼ?=:=ξǝ?=:=6r;gd?=:= 0̾,?=:=ʾ?=:=?tɾ?=:=Ǿl?=:=lƾk?=:=\ľG?=:= þ&?=:=;$?=:=O ?=:=IZ?=:=(?=:=?=:=?=:=(6?=:=e?=:=?=:=v6?=:=p]Q?=:=k8?=:=fB?=:=QJ?=:=.?=:=wי??=:=Ɔ?=:="?=:=x?=:=!: ?=:=ZV?=:=7?=:=x?=:=g|(?=:= qu B?=:=Ėn?=:=g?=:=kGaJ@=:=>Z@=:=T@=:=NoH@=:=~I@=:=jD@=:=Q?`@=:=P;R @=:=d7 @=:=4tb @=:=L1 @=:= /i@=:=r.8@=:=-7@=:=2-"@=:=.b@=:=/W@=:=j0s@=:= 2Š@=:=j5!@=:=8S@=:=@=:=Ac?@=:=埾g?@=:=b@@=:=q碾A@=:=+n>B@=:=YC@=:=D@=:=\E@=:= G@=:=?7H@=:=!̭'I@=:=[`P6J@=:=>DK@=:=xCSL@=:=`M@=:=lN@=:=FxO@=:=uxwP@=:=h湾Q@=:=FR@=:=bS@=:=g&T@=:=v7>U@=:=HoV@=:=W@=:=S¾X@=:=þY@=:=ľeZ@=:=xž[@=:=ƾ\@=:=uǾW ^@=:=8Ⱦ_@=:=Ⱦs,`@=:=ɾ>a@=:=,ʾTb@=:=ʾMic@=:='˾cd@=:=˾xe@=:=˾lf@=:=N(̾g@=:=]̾h@=:=̾j@=:=̾!"k@=:=̾p@l@=:=̾^m@=:=b̾~n@=:=̾O;@'=ȴ=pIN@'=ȴ= D@'=ȴ=?@'=ȴ=:>>@'=ȴ=6r @'=ȴ=3H @'=ȴ=Z-0ݕ @'=ȴ=D-]@'=ȴ=m8,@'=ȴ=2+7@'=ȴ=m*@'=ȴ=+c@'=ȴ=+Y@'=ȴ=|b-@'=ȴ=Id/0@'=ȴ=1*@'=ȴ=W4:\@'=ȴ=mW8@'=ȴ=a<{@'=ȴ=P7@)!@'=ȴ=D"@'=ȴ=7I$@'=ȴ= N|%@'=ȴ=)"S&@'=ȴ=fX V(@'=ȴ=]N)@'=ȴ=ic+@'=ȴ=5 i>[,@'=ȴ=#nN-@'=ȴ=jt.@'=ȴ=z/@'=ȴ=,~1@'=ȴ= h)2@'=ȴ=#,-3@'=ȴ=n&4@'=ȴ=.ɉ5@'=ȴ=5@'=ȴ=%f6@'=ȴ=,,7@'=ȴ=Ή8@'=ȴ=F쓾O\9@'=ȴ=.:@'=ȴ=HQz;@'=ȴ=嘾;@'=ȴ=oq<@'=ȴ=p꛾/=@'=ȴ=`e>@'=ȴ=ҞUL?@'=ȴ=1B8@@'=ȴ=򳡾g,A@'=ȴ=|& &B@'=ȴ=힤%C@'=ȴ=*D@'=ȴ=@4E@'=ȴ=: AF@'=ȴ=iRG@'=ȴ=2dH@'=ȴ= ­xI@'=ȴ=P7J@'=ȴ=LްK@'=ȴ=jL@'=ȴ=M@'=ȴ=|N@'=ȴ=O@'=ȴ=|P@'=ȴ=, R@'=ȴ=^S@'=ȴ=6ȼ#T@'=ȴ=!0U@'=ȴ=~spȿYs?P*;yR5?8çڤ?ᱚA_ECA0?ceOA(?#-gqp?ʫ\HM?˒:)).}?5IO w|?6Krz?J#98\?޼pd[?puOI7KƧ?Hjܱ f'|?v??Ms>WS?2mK?$tSM ?(nrz%?vȴ9X^? /^JڹY?W qiC?H=p ?TѢ\崿stj~L᱿vjD">n~;dZnэ%?4hL?{Y?̷?UDRxQ?|ß`űH?Ē79-*?SnmHQ?ƣS&-*EN?ƧG?ƒ)IA"?4nfIi?{_I?Q??ײ?"SP?۹`G?ėAJM+?ܹMa?M3H+?IV`?lvJ?"?Crq6?#x ?ul?z$LD?*")?iDg8~?h3?㫟U=?uMUi?ί%;?9?-`?ֶZI?暕BC?Ùo.?C\N?4֡a?Q֌i/?۵y?d2m?µ '0?d?ʫ\?(n?nO?w1?y (?HU'(c?1?"`A?b͊?W}W?Ĵ:?(?ěS?DUGZ?As?=B?q!Ks?VWiJ?uO7u?laR*o/Y?4k? 4%;:?dE#N`?v ׈:S?($ xG{ ?\(73?"쪹vf?bDvtc4?Lnm忞+U??EwU{5*8?3]s?< (x?thH?D?($Jb?پ?b}?"a?\лo??*\?ulBZc @Z:э&?ł@(M?ߤ?@v ?i/n@OB?`N@d^ N1o@ł[BE@hjF @ͮ>lLYϿT @Y|@JA c 9_@v!.IY5;@sWq?z@.3_Ë@RJ˿K3z@Crq7s@27Ȋ¹M@Pեbḍ@mR~Rw;5Xy@6e8R~@.]\'gM@쿱[R*o?R@W}M:@uy(ʿK:@uK?gߏ@&p*ؿ_F@tNʖ@,x% @\¹MeU.r@~\N<@4n@ygt@@4nCk@-Š@ 'RT` =B@ \#uy(@ 0OYM@$=@ Ov_خֶZ@  ĽD">@ I Dđ)@ xTɅo@ b]r/Z@ 4.۵`sWq@ )JǺ4Ck'@ 32Wh@ _&i-@ Cz$LD@ ï#̍2@ Q֌ЛS@ ,'7Ѣi}@ uy(ʿҟh3@ 6CӍO;dZ@`G@N[W @mty@OXՕf@7 ܇U~=@Y^޽@P1;puO7@LD|0ӿ9@*"_Zjj@2"@j@ fI=iJA @(*")ׄ#π@HF4]N @mO;dZ@~@%1ÿxF]d@E8Cl@zNFs@UhƓtq@ A!laZ@&76g+jf@D#πܿ(9-*@cәo.@E#N\N<@jFlC@)r\ 8@PܜާG@_FߑUDR@i;d9@E*)s@l [6@:ĿD*0@%q!K䖑\л@AGz4J@b`,ÿ~+U@QX'@6̿9_@Ϫ͞a=1@. B @ZR@*߿ŗNe@ L/{?Ҟ@3LAݿ.3@]|匽D"@LXyU@+%A c S@颜wkQ@HQտ ֶZ@xf:tqp@%ם 6P%@DUGZZqxB@N;6jF4@GǸֿ*y@X:S&k@a Ec2W@4y3]$E@/D)C7!<@m(o@[W?޽@zG7@16پ@v [k@S;w5IHU@Ne]U\S@P8\g 9@лnwN;5@ud0+A5@ <0_A@ <ɿ{@ k@3rT@K @_!-w10#̍@G{JL@ { Z\%`A7L@<¹Mo@n3@N"S@ZCV@ +CH@@]x#}9@xJn@}A5 -Ww@0 4@(Q i@tAJMU@np"S 7[0H5hrYŠ>-b9&c%F L0MuO7vv5B_ôk΅3PHN&Ԁu"S9Cd0Vu)ͳ|l'!W /^do32ѷ鋬q fI=XOLnnRzcsm7T6xW)i/nd"쫿A2LfQnɯ{ 냥;KR /? qu"_?{ bM?o'=[|o'?"?{y?֌i/n]hƒ?m? ?At>= - ?.S.H?a=1pY5;O?ZěS?GXd灄?8 0ZpU?e+aGE85?m)?#uh?DUGZ6ݬ?7 ܇Uʁ?h3*zNz?2vtc5y~($ ?*\: RiY`?~Rv`?`jXaпsPܜ{ Z[4.۵pȿl!-woi-*ENn^ Fdkud0+A=x?],=?{npv?پL5Xy?!5`n?xn;?Y2}?ĝ.=x@?Vl!-]cf?Ō*EMq&x??g|ß`?}Vl!hƒ?#π3E˼+??gߏqxB?eUsБ}?JA c T6?4^?bw\ƍ?^t)<ȊG?ߤ?H2 F?a(9-S?5_õﲫ?Ɉhb|27?nY!?|hs?3H+JA c?ʁ!-w1?#π3<;Oag#?sh0H@r?IHU'KZ?6D=F?HouKۡ?ud0+.X/D?п Y?З2^Ր?r/YV\л?O"}K?-_v?A c }Fkw?ᆘ54y?Ϫy빌~($?wY*?GYT!D?C,zxl-?n V?f:|64?ߤ?)N?(9-*_1P?98Go*ZG?ٟU=ȿr<*?{ 9{z?vϿAt>=?ֶZIM@$>?R~RPH?m[-M?R~R?֌i/n[a?"`BƝsB?ᆘ51+?FVՐ?,<Q?[BEqu"?jOv`5?|h?؅H!߹8R?תy ҈?NtI?A [70{?NʖWh?b86z?~g,f'|?I{tӿCV3?܇Tw\˼+?5inX/Qy|?s28YK?X%[*c?f-b?hۋq ?[T?>W?7!B[iv@OG0@9{@ox^ȿomr@7!=8}H@cI{ oTK@ƈzdؿha@Nv޿ŕWh@˼+ٿų|O@=keE˼+@-ea Ec@atyQ@,]O}At>>@[$[ @.}7ue@u i@K@_Zjjä?@ a=1L@ 2 ě_o @ hbRv@ 0 q6@ 5o5I@ 64KƝsBZ@ rQ")n@ CPҝ&@ ʖ]^)@ G0@9o?R&W@ BT~׈@ tcI{tͦ Eb@ cVx @ l-вLP@ R&VѰ݂u@ 8?Gҭ٩T"@ + Iӗ+j@ \¹b@ <޿ =p @hbՕ@mhr!hJ@+P*@Bٿt);@+wd:@SZ޿֖\л@~Mߤ?@؎6FinX/E@ { Z\ ěT@*:э%3rS@FI'!W@3]$DB0@mhr!@Dg8~rQ@Wx-2m\@%o]r2L@eLWA@)Ie}3@M_@1o3 @y8R~%|@<ϖ@ >!yV@ ZqxBf{_J@ y}?FV@ G{]9@ MuP@ $6eىr@ xl"h wd@ S򐫴NYr@?R&VyЦv!@nN&ԀBT~@t)< k~@o07@K3a@6 V#^J82@k ͳ޽@OX7{@zNzEv @2WD*@K%4C@Xd `@ę̢ ı@S& H@Bh4 i4/@8 +v@, |O@ m <;Oag#@QVH *\|@F QN;5@s ݢr/Z@,?k&i@y`G@#$6eڐ@gw jOv@hwN&Vf@z@CLwpy, ҿa1;>-b8<}W柾vȴ9^0OY)k$ҲM_ZjjjfϿQ.Ƽbb˧!5`xl"h տulvK>鷿gSQ녿)r\=SP ,Ͽ+ʫx-8GoUqKW}W/nVceM:^"S/^ GQX*ި?|?g|H gws?\¹N{t?u!.׈?(n[BE?r\=xpSe?>ERk΅4?GG#5MUi?]U\6&,?l oTK&A)?*") zN{?RiY_ß`?ȟ@t)-b6}Vl?Ȏ6F L ٔ[?u%F LM ?k}9ӄv?˓ 햦Z?SP ,lϺ&?},{ !5`?pT[=K^?!.I@?Ɂv62a|?hƒsպ?KHӮT?l5&Y?ˍu"͊?aBn?к6;%CA0P?D">JA c? '/؃4D?xqK?27OV`W?КIf{_K?tSMj?O4z`?-b8?ξi;@'?ϝ^J82vZ1'?z9`tr?v-e?nY!֖2?)k9#w?ٿH˒:q?ٺ^5?|Ҳ?ٷk;pȿ?@qGNΚ,?+jfϿFV?.S@٩T?Չ Z[)D|0?a_G0@:?~RvʿyU?$LD|13]$E?{ 1Ͽ"`?vFQ? sGҲL?. <굝yh?Ve($J?Ԅ[-Mu g?ԴcI{tUGZ1?5~g4m?^)Ѣ?JDп\(?wr(+ ?zNzVCE?ԣ^ݿ*?ѷ`k&j?v5C{5*8?̍2"ߝ4X ?1;.݂ ?O;dZQX'?5~Q?΁ԪQ?CAԶ07?ϧ&҅ b?6CUDR?h?_ZjjNxW?Фk'j@?ԿâwkQ?,k}鿾P?p&yV?ѭB̿T?nYm?wd9? ҈?Fzd?.H?H˒:*?2m? ~?~"?پM?m?qp?c Sy?yЦv ?łU5?)I?7?wd?nD?uO7u?A c ? Z[(??u?]9?;%o^?j@?ʫ\?,?E?q?ÅQ?LXE@doai@$*mq@KZy@.۵^ N@$/ha@e@yDR?g@8q`2f=Ćf3@c{ 2Ŀ[W>@JwŸf:@A_FƷ%ם@Țu%FǸ<ϕ@76Ȭ0@Mk~($@.3u:>/0@lVϪοz@d@ _Zjj@_Av5C@5 g@.}]\@6fËX6@%[[տM@!.#ᆘ5@ 6bR@ 6FJvJ"@ _`:< (x@ ܱF^ə|o'@ ٔ[lɢr/Y@ ]ceɦ Eb@ d*U\R.@ 2Iʬ2"@@ yg˿˶@ }A5e@y@ E}2kv@ zs-ѿ*@ D*@ 86z @2@SP ,luO7u@%S-٩T"@N;5@S&Nv@U{5*a{ 9@E;¹M@  4*_@ Neپ@ a-w1ſ Eb@ "h5~@Cىr@*gbKX6@\u:?LI'@0#̎2kv@1Pd@ɯ{u@1bb˧sh@jd7jX@ pK]c@0X:QX'@f3]wd:@YbE*"@եc {5*8 @( N@5*8 {~$@^ Vl!@4Ck D(M@B9C \¹N@2V .}@{W} 6@B؃ >6z@$_Zjvȴ9@bpO4Y_a@k΅44fP@/g@Xa &V?@ mM@$>@;K% @^J82vuZ@5;OaE`A7L@t 4cI{tj@'UDR?V`WG 0j3:}P/{J#敿EwTCcܿ,IVWhIZz]z1zOs-p 9:)_SP ,Pr[%[[ڐ~($ x 48KX_F,?{ȿԪ3H+#Zŗ)Ier Ĝ{J#9u\(% i¿Q{?v_حUDR??(F]x?]cePr[?$tTe.r0?FdGߏG?s*F4?jfB B?ܱF^"ǣ ?P1;2LfQ?]r??) DD?ܹwr(xe+?/{J#:?$ xFrq6?);DGi,e?=B "?@?4J 4?vjSR~R?c1zN+ Jr)Ie앿E gb]99m ]IQe+aP]*cPlaR*o<+{ 2׈+g)Ie.< .}A$LD|!}r 6u:>/0b-*ENǎj?yZx_<+?ިc^eS?IQå;K?bw\:p?XdE?.3#*cP?à kH2 F?uO7vY!?ƻA>//?}?Up If{?͞%ݬ?ʵ '0R~R?]92P]?x?lLYt\?z$LD|,1&y?.3y ?Ȣ~mfA?e@xh$Jb?ȮG6ȴ9X?`sWq(},{ ?͉.EX?LfQmSeXO? Z1A_E?եb!.I?иϿT cI{t?Гȟ@o{J#:?mqbb)ᰉ'?HM?%1LѢY?İWӄv?z@d 8?όT6lE?3333339Ma?ٓ_ô1&?ٜu" \$_?ٗ+jտy*\}?ٕ1ۿrGE?ٓ ݿX/^ G?ٓݗ+k0@9?ٕ5;Oag?ٙXdE=?ٞ0OYUGZ1?٤ Ri?٫8q`Zx?ٲ,'_حV?ٰdiY_?ُoOQCr? 6P& 6P?ʖ\ѿ[BE?WSn?ՖБ}kfv!.I?d9䤿2f-b9?GX?+a@sGO?ώjiu ?ڤ*#?QQ֌T6?˯#cWgT?D(MۢZp?F4AthM?͚A_EൿF^"S?H替!5`?޽ 6P?ϒ 4Ck?i9C?\$_[Q?Т]yЦğh3?$_ZٿX ?&kȟ- qv?]r/Z?k}9뿞T:?D*V?a?D*?ĕEw?YJ?+U?tj?m3 A?M? A!la?' ?ŗNf?n~?r2L?ą]r/?B?șZx?27Ȋ?̩7~?);D?Y?hH?\=x@?HQ?[l7`]?_o ?VԪ?:)y?Il-?Up ?,d?H?bb˧3?61f?ݠ?^ N?^J82vu?\R-#?yg?%1? ҉? /^?n??y2?wFze?h ԕ+? |Z?P{?Zx_?1zN? '?%??˼+@??|hr?GX?>'!?rGE?vȴ9X?٩T!?:p?JA c?"?+U???"?2"??Y!~?QCrq?:v?z},|?&i-?a?䣃'g?ŬG?QR? ȊG?;:h?g*d?1&y? I^?{qu!S?}޽?af3]$?r2LfQD=Fl?BY޿\R-#?,'7[l7`? 2"lQ?e%1?wAJM+,?8\g?y+?r(?0#̎? @ G 0je@ [-Mke@ N<`N@ `͠'RT`@ |ؘIl-@ 1ۿL@@ G~mHE˼+@ xJa@ P{eU@ *cǿҗAJM+@ 2a|ڿ}ӄw@ Imqbb@ |&V@^t)<@ Ր76f@ .]\7 @ vȴ9֭+@ m|o'=տEwU@ dzRCjUp @Ev xF@Ra9&A)@z@c^Ӊ Z[)@5_Ŀ;Oag#%@ܱF^8R}@,Y|@iBʿҝ%@X2vtc<@v jF4@ř|ocA [@-#NjX@˿{ 2@>J0+@jU@ZS&'(@t618\h@jDg8}@#J!B@!BoX@VWjY@ߤ?ɿ@~@Jި^5?|@t֡a@G0@9SP ,l@Y¿l!-w@jj%ͳ|@g)^6C-@tK3L_@9Y ܇Tw@7!<޿ӄv@j:S|@⩓ ߿!R<@ 9m K]cA@>%)Ie@Jw잃%@ YǿQ.Ƽ@ L8@ <쿱[4Ck@ lvJ#e+a@ ce1m@ q!KssБ}k@*~"ѿud0+A@^CV灃d@uM' @]cAlvJ#@}3^޾@@ YJؿgM3H@ i> ȔG @ ÿrq6ܗ{@;KJm3 B@+xl"h @MM:+Jw@B1F^"@8JfP@qK1ڥ@/1 7!@k~($m+@앿XOL@OIH]q"@'%3H+@h]k; PbM@ I^ ˗xW)@Ŭ GDUG@4" 3ti@{y C`k@Jb# ?@e Ca@N@Z *0@\лn GJw@H@q ?@FԀuOAs@HԿ @:[7ɚ%@B2"2"@ 5@RCzFsB@NX/Dwd:@9&AȊGWp-w1|?$tTEKMjOѢTK:ֶZfPV. ai̷Do'=[29m˼+@tҳ&IQ-*EN |ZrͿD*UQ֌i//YsivHL@/l\g*-"˿C |Zr|Zqx9Cſ ׈!WhG#пpO4*:э%?"m%;?#IOQ?Կ ulq?EjEM`?$tS/?kT6?U2a|ޓ?{e@y?Y;:hA?ﲫvgB¤P3:}7Б}kf=p `V. M@$=}A5TvMUhǿ-#N&n~9.Цv YZx↓Tw[iv[W~oiDg8VϪS;>pƿhM{s곿8YJ&x?2f?1 Ro?L/{Jd9?F]ch3?{5*8ݗ+?~$ceO?Ѣ.}Vl?IVRyQ?:SJL_?<FV?shr ?ɻ &x?XdE#{5Xy?N>($ x?|0W?9#x?$Jb#}p =?T6H;D=G?B0X:T?hۋq H~?ϖ($J`H?zcsl&Ib?ЕEw 4?҃B?\$_[t?8\g*JRiY_?ѢhJ?!Wh98q?Ϥ?zv?fP5d0+@?,]N'=[?)Ie,d?ѢcM?Δ9.yg?i}עHH?A c SCrq7?X%[\JD _?vQX'?Τ*eں?M_Q]U\S?DR?gܿ{tҳ?`,u ?fP#x?t>=ćk~($?o~=0#?lCMfI=?k '!W?jfB/{J#:?l5ͿY?o䏿wFz?tya?z]yѿ=?فdoai?وhbX'?َ!R?Qm݂ag#$6?z@c ?nm3 A?Ӯh]k<y|ß?ӷ`?y|Ŀᆘ5?;L?)r\>鮼@?B¤T޿tj~?[($wpy,?Y!~ZIf{?:S|=?UGZ1!R<6?9Y ,R?Crq66z? ?]$D? k?ѯ#cW?T~M?ӫU=?X%[?եu?doa?ז|G?X?wY?*cP?:pd?¹M?c ?̷D?޵??7ޔ?IHU'?}9Y?=K]?pd?0OX?sBY?!-w1?t);?j?k;?$'?ȟ@?hA_F?)r\?1o?7`]x? gb?tqq?v? $ p?]cA ?Ǹզ?7ޓ?vtc4? ׈?uMU?;:h?+y?x ?? 9?uO7v?-#N?5?M:?zN?mY?灃d?лnwp??.r/?a 8C?T;7ɚ?0$j?rSnNP?b[l7`?[$U=K?OQD`bM?2-V?tpd?ȟ@?Jw?i?3 W?<`?)?4Ck?y}?ȊG?07?)^?^޾?^灃?5?ί%?0?_o?i}?]?ߏG0@?g l?tT?#?3 ?\(\??^޾?h?&/e?5B؄?}?sպ?M++?^ N?L_? 4?.3?RCQ?hۋq?Mj?bM? V?+CB?;wF{?|&V@?LP??5~@ O;dZ?1;.@3)? Fd@Y?OLnm@~<`?z`V. @7T7hW @">@eO=@o*ZF-V@,zxl"ŗ@QFV\(@v}Vl2W@LBlvJ@W}WzG@㢜wk_@ b#ᆘe@x@7[0H^ s@sߤx-8Go*@`sW濴#d@OG0@9*)s@a쿹Krz@J6&+@x@?ؿ//t@δcI{t2 E@EʿV?@+@x@WiJ[BE@UGZ2Ǥud0@䏿|o'=\@D)@oiDg܇Tw\@2K4.S@iT!D(ͱ1eәp@E˿),(@Jt}^Ǻ&@Sn4m@lLYt\ƠY@D*cP@盺 i;yR@ jeV@ 9rGE8̐եb@ `ٔ[l7 (@ f'|`kz]@ F]d1-@ O;ygt~@ 1PſЄ8 @ ~Eʿtc4@ ̭Wx}2f<@ $Jb#йhH@ Iѷ$Jb#@ xGo*ZGѰd@ i4.ܿU2a|@ т @ ~6r\=x@ 43Ծ7ޓ@ i4.۶ծ@@ ֟]s@ ᰉm݂v@ x>>WS@ H6e7!<@ CVq!Kr@ ҷOag#$@ 8ſ (wN'@>pu۠&@``Gb͊@RLA"@ߏGs4@c^t)8YK@@N=!@^CVŬ@iuͿ\=x@@i/nۦ76g@V9.O4@!.I"h ԕ@ϭl5r 6P@a nh@pP@&Yؿ@9ҿl@Oag#$ȿ?ײ@i;yRҿ߽'=["@G|ৰd@T`dÿwY@}H@ RiY`=ć@(߹9kP|@h]k<;'j@@u%F3@W  @8Clb}Vm@ŗNfQX'@U\RP1;@Go*ZGb#ᆘ5@e ؿ昝.@:mǣ(߹8@jqiC|ß`@r2M@ m{{@ ǎj{0@ h:S@ *1{,R@ ^5?|푿$'(@ aQ_p@F4A~鷿@!ntqq@Y|o'1.@]9@̈́M:]yЦv@ A!laU=@FT ǎ!Wh@Y!/@ěS>E@ wY@ H@񒃐B@ łU?b@ ҨCQh@ u%F @ cS 4@ "˿1&x@ Цv ]x@ GzHxvF@ hI3"@ (߹wpy@ 93]$Ed7@ ڐb#@ Ov_ٿUDR@ Y0U2a|@ ;@ ,CCV3@ Ж=[!Z@ 8 A7Kƨ@ elvJ@ i*0U2aUGZ2@ "mŬG@ %RmKHӮ@ o5KHӮ@>Eŗ@@WS@v @N9C ڐ@JE x@M_ $_Zj@2s p (@R Cy@sP l0@%Ck @y]N l\ @'/W@&-fo-V@a(9ᰊ@~;7ɚ%@7x-8G?2LPD,{ ZW>6zlja=1rGCcH\yguO7u&Qm݃ /oiDg8-w1xl"h 釽ah3N6F 8Go*ZG+jտT;"){ 2VH8}Hۋq ﲪ◿{T^r\=x [,]NuMU|E˼+1LW'ej?ɯ{ ﲪ?}9Y??3H+h$Jbj xq`l Р0 @D(M/nV @ѻײ V`WFg 2uO7v ]S $LD|1^ Fe6zX lިcwT6UGZ1=2f<&k x$'(^]q"Jw9f.} gb+ I^M>ǣ 5NP1W}Wx- TɅoi<#xAJM+ $ q 0j+vjY >!laR*ygK۠&[T鷿T!D(9.*ީ(\sl&khPܜc Sy=W$5inY%&ڿC,zxl+Q쿜r\=x\#?+n~?:*") ?پLIs33333?)?7~5~g,?¬hV?Z>-b9?q!Kr㍣?ȵho?ɯ{?h?$tS)Ie?ȴ:?P*O ?[-M@%a?nj?FV?E84֡)I?P]q[XdE$?OQCr<ϕ?Xe,LNx?w{j?H^Ց?K.Y!?=p =? ?+jgj ?ϲR&">i?o5_?1;.];D=?:XPH?ξi;A5Tu?ΊqiCfP?YJEb#ᆘ?,E84֡?!Bo?vs-?͸dti?ͮ1.x??$LD|15inX?}At>ul?գD=Fl^J82?ءbwĿ ?333333[ /^?Ev >WS?A [7>-b8-b8-b8<.3?@jUpz/?Ebh"h ԕ?Jm3 ]u?QQ֌Ϫ͞?W A_E?]N ̿RC?_IW&kȟ?RT`dÿ%?eU.$_Zjj?ZFsBեb?Y?Օ-#Nm8?/d?եb뤓ȟA? /^d0?C]Y2?qL/{J#? 0j+5Tu?nO߿9#w?ٿE?)4;,]?Ԓ7߿-`?2W¿_;dZ?Q_2I?ӡ27?ӍO;dZj?Ӕ@x+?ӭ $ [ ?+Цv ?VϪο鸺)?#c쿱[W?Ӥ RijF5?*0bh4?ҍ:wB¤T?6F&.?{5+?QX'QQ֌?}?) D?ʔVWj#x ?ɮ>lLYuW),??M ?CV3uO7u?ʸ1eԿL8\?6fI#ᆘ5?˾ʫ\`N?T~MحU?e@yӵ?ʹ% ѕWh?x>-b1z?;wF{ʲLP?N&Ԁz?ED">j?Јp:(\)?в̷ ?ЊP*?Ί?п' ?Ǒ>Eӄv? kba ?ʁ?=?+ʫ?LWx?䎊q?Ҳ?ѷX?#-#O?f'|?,Q?7ޔ?!R<6?$Jb#?$LD|1?Z?#ᆘ5?әo.?Q?[W~? ͳ}?$tS??yU??#?FIm?Q?{m]?41?4Ck&?6C?JM?Wx-8G??m??? RiY_?Y2?fQ?ɅoiD?vF?1e??L/{J?灃?$tT?x?G?x?ʫ\?]x?2f6z?"3࿇9m ֶ?> mZ?h?|Jw?&,s-?:?mHQ?TɅoi?o6?Ne???ȟ@?G ?E?nCz?&cI?䎊q?h?L8\? k~(?i4/?*ި?b}V? ?Z[(?l-?UDR??٩T!?9m ֶ?n?\¹?ϿT ?5~g?e?0_f;?C,zxi?|0m?E pl-?'=[!rB¤?y*\}uL_?HӮh^xf'|E@ /^ |Jw@5Y|.ƼS;@[Q"/@IQ.3@@4r2L@TɅoi,e@H%F L0@|0=b@,<쿱=x?@T G@|27gS@'gMm݂v@Eҿomr@:~w[0H@_F]r/@Eٿ{5*8@7Kƨ sG@UqK>-b8@UL_cHj@0#ͿD@If{_Y!@tj~̢a@a E27@׈ٿiB@`NUGZ1@If'#x @tIƶ%@vȴ9Ȗ@cA \ʂVW@@c^LYt[@.O"}v5B@qVHKHӮ@ٮO"}H@rR@jUp@U5ƌi/n@gwYdZ1@lC1P@1'ʔFs@  c\¹M@ 5B؄'(b@ ceOJ@ f3Pr[@ VInwpy@ <޿޽X@ KNʗ}A5T@ 4cHj@ Jj@ <ß`ty@ t}^_1)m@ Ҕ@ Ňݗ@ 0 ӿ`s@ /l5{_I@ ==Q@ m=>BZc @ R1;.]@ /lѷX@ r2LfL/{J#@ YLI(t[ @ łIV`@ ud I^5@;.]] @lvJ#?z@c4ұpO4@̷ӵsg@L_>WT@ B%[[@%P|O"@VБ}kfz9@iY_7 ܇T@ JD@dZ۪OB@Pl-a Ec@E#N٫ud0+A@ ,<@"쫿Z@>W٨M@cA SP -@Q> ;@E#Nɚ$(@Y >l5@;<ϖS&@a c Sygt~@LI'@ ]U\R ^@ b/^ @ 6P8{0@ 9Y}e@ cOJj@@ pd飿C$@ $9䤿Y|@ ti.ǹ@ ƍ[T@ sֿ eA@ e+.۵@ ,(IE@ ֫?ؿ{@ '!Wi;<@ &^J82@ ҝ&l!-@ cMeV@ X%[lk΅3@ Կ~@ <&V@@ {j|Q@ ͳ|Ke%@ YË`*\@ Yt[`,@AZRlzxl"@4X 2^@qSyD@5Im@>'IW@/]U!Bo@r/l5A5Tv@Q.ƽnǸ@,Q"&r@A!Bp RCQ@ۋq L/@Sn :NzVC@ؘ s@iu %u:>/@L X%[\@76g @W6&, ?@e y@= NU@SՐ dZ@!ZwQQ@W}W)@_KCWqH@n.`,z$ҝ%~vȴ9X"&qJf'|,'7b~Li:pd:镪wɚ$IVB74G#ρʖꞘ7ʿ{5^ NܿG 0j+H替98JrfI<9.<Jw?IV쎟j05Q.ǿ!5=Fk?඙ɰ?jF4FVG 6;%o7`]x eAȊG T:憿Wh ˿{ 2 v nCy #cWjUp wue|Q ?)r9 RCԁE{8hI}W^ygt- %hIPH&A(n~;Oag#>E_^J82!5_(]k;%ם 2m쿞lLYt\ٔ[l7p:fA(ؿ˼+@+p&PHdƿygt D/sy8JQ>WS~"ѷHjܱǮzHhƒ_Ë+jfUk΅ /^!~|⿶n~lvKڹY{ RiY_ N˿n~ İ{f3]$_ 4?m\π3r?;wF{6?mHQ"`B?.Se?»쪸(?ŭZjOv`?X:SK?J&'(?pϿT_I?K]cA;:h? qu"eP?sպ-?>?ǘ O"}?lj Z[)MjO?Ƿ-#N}At>>?ȓ ٔ[lXe+?ʿ3 WY|o'?ͳ|tn?σ'gM3qF^"S?%!GOIH?_| L_?ϯ#cWc Sz?m< (?*)sF$/?`V>P?ή9Crq6?v {0$?@c^J88d?9.$_Zj?߹8R ?ʹxB0k΅3?͌*EM'lC?gwYh4?F L/0OY?'>EY_a(?͞0OY ?RJmP]? I^5$ Ri?L/{J#XD*?zNz~+?)^(\)? ~4X!? 8Cn?FNΚ,g?p csl&? ͳ}n9.BZ?)^O7u?I'>Ck?ߤ?=?sֿhA_?Ե^޾>"?pϿTw|?n]ce?Ӵ% *c?thM'j@?Yr`N?]$DU\R.?sBY޿|H?ӌe@̿ԀuM?ӆnCy龠K?qu!褓ȟ@?Er(?ц`V.dZ1?`:CcHk?ϕ$'(?J!n?PH;dZ?͎[WֶZ?&Ԁu%F L0??) Dv ׈?m ֶ[s-?ί%;?;%o^ܞnp&?ʬ2"@y+?"}V??ˠ&4m?)kҿѢ?G 0j0?t>=ć϶E?7ޓֿ˂ӄv?<޿R&V?ej%o]?`d8|0?œ ҉Q?Q%F L0?g8}H˒:)z?Ĥ*1o5?#gm=?`,?~L?J"?$Jb$?[W~?mǣ?>E?^?y+?f:?eәo/?Ŝ8J?T`d?ɁZR?@jUp?f'|E˼?*EM`?Ф*?:S?ҕ*0?+j?ԀuMU?m\?]k;=?[?䎊r?[T?hH?*)?ۅ}2? ?Zjj&? >?>E?[W~?8\g?d?vj?:э&?uKۡ?QX'?eO ?csl&l?Sn?-Y?@q?Z?-*EM?:?Sn?,Q?LB?bh4?;D=F?JL_?T6?u:>/??TҲM?G#пtG 0j?'gM3Hwʁ?C,zxp- qv?i¿W?t^ N?TѢ?0+@j?pMUhƓ?RǸզ?zu%F ?n?vȴ9X?- qv?{u%F?*\! 8C? qu"0#̎?},{+U??ӿw[0H?k&i쿤D6z2m??FV#?1L c Sz?K]d'=[!?f'!HG?ӄvz$LD|?wN&ԀNzVC?(߹9~$?%b6?y"`İ?7ޔ>@q!Ksʫ\@7ue䎊q@]U\R翠 $ p@࿡hr Ĝ@N⿣pO@VCJ"@Jw@;L;@Ë :э@M Z+@zX٩@'|E˼P3:@С7TP*@duy(@%1pd@V3H+輿a@O@~MG 0j@Vϫ@m|o'=WS@:}PeU.r@[IVbM@ Sy2a|Q@H@q@x"}@(>BZcB¤T@NQŀB @ulvKިc^t@k;=\ y@0@9@պm3 A!@(F4J&@unhrz$@ϕE@{5* V@6&,@ei4/!laR*o@&ɘJA c@OQD>pu@FJGX@ #kFIl@ RyQSeXO@ ;.]]@ hH?>q@ )ҲLP@ EGGX%[@ >iQfA@ %2ҫ\$@ W4.۵ҍ@ &V޿Ҩ>@ GLA@ ݂udZ1@ #7 ܇@ tyԠY@ ? gߏG@ fIQHjܱF@ d5TuL@ }ӄ Nʗ@ nmǣ @ I.}׷AJM+,@ A_Fզa(9.@%[[տӆ@x ҧqp@8J䎊qj@,s-Ӳm\@ / Կ[W>@-ǣ rGE@QHo!<@v;%ocsl&l@٥q!K@hb҈p:@/ۯ{ 9@[(ѿej@=vڕEw@dyUFIm@^"Sױ+@Ov_خ_Ë@>ج>B[@(o,d@Ӹ{ݿX6F@,7ɚ@ߏG0@q @/Y߿ VE@+i@Hn@iQ ⨂jF@c4㓉 @W}WT`d@$5inY`N@<@2f<@G>E3ߤ@p*0U},|@jXQ@llLr[T@ ̝4XͿT^@ M_x>-@ ?B1@1zO!Kr@ϰ B؃4@ e@̿g#$6e@ KeAG0@9@ c Sz @ ~($ x_|@ xWSn@ RǸզSn@ ŬGGNΚ,@ ިc^t%1@ &i-񆢱pO@ pU2a|)*0U2a@ yR4_Ë@ +sl&k@ V=Ć. @ %1\¹N@ n~n`,@ H*);:h@ Q_|@ Y_ad0+@j@0O4jUp@c^ݿf`-@nX/D< @4r2Mf'|F@ 7~2f^ tiQX@ᰊ#ᆘ5@(c^t*"@GHjܱF@꫊\ܜM@)Y_a/^ G@iIeZR@v5CU@1zV. @0X@v8YJ.SeX@8S@1P ڐ@NVu xh@=b r Ĝ@+ XPH@3 RiY_@C, NzVC,fWѿ:э%f:lvJ3|O]ce; '0̷Կ c Sz11eәp`kz]pa$_ZjaqPWx-8GwFzŬGH'>EMWS?n+?P*Y >ϰd Wx-8l"h ԕ ]9o~= e|oь / /0>( KCҤk tj,'76 nYӲV Wm5Q.ƽ ƿԷVC?) 6z 6Pճ{m].]\D8 ֧, ~ivԟ]x>-n՘.L_H@qzN{ ɀB ,< 9&B?FgM3H,S&\лo.ӿ% zNzVa EbP7jY пX6F05Q.ǿǎjTuLOv_خL쿷k}9B .G)^vݬG0@9Mqu!U5Q/r*0U2a|Mjǣ %߿gߏGD3]$D CV?~L6&-?X6th?M Kr?#π ?7ɚc4?DŽvj$6e?P3:}KC?Ve*?S&ӞՐ?˶gw ?T61y?ɯRnO?"lvJ?Y2c4?i;ySf'|?I^5?}j@?ЀIf{_j?bM|UDR??fY0 )?Ϙ $7?.H&?T:=[!?Ζ\лe`A7L?Vt#9?JwK?,<?>?ͳ|O[=K^?̈́M:5?Wwdp ?.r/+?p N;5X?$_Z \?1;.d?̩7~¤T?rGE9:v?"S?c^J82V]9?1m?ظQ?Ϫ͞;'?4n_I?Asq6?FIlʿlC?Κ,fX]$D?鷿ҨCQ? /Gz@d?K3ۿ1o?ިc2B ?ŗ2P]?3rSοB? /^np?K3ۿoiDg?1;.{z?اG?j%|ri4?[-M@%M?PH?վLI'7!B[? 4֎`sW?ˈ+q`l o?1&xտU'(b?̘ $ pEʿJA c ?޽ 9?o5ImHQ?ŒL_ڤ?32֛R}A?f:ҕl oTL?N;5H˒:*?%?P*?}Vl!? 8C?ߤ??">iQ?Ne?tҲ?ɚ$(?uMU?O4?c^t)?q?b˧2P?}ke?|o'=\?#ᆘ5?̭U=?7ޔ?䎊q?ud0+@?Ѥȟ@?B1?SP ,l?0+@jU?~$?@NU?և#?l-?>BZc?e@y?KCV?C$?쿱[W??&i-?ܽ{ ?~($ ?ޞ7?Tw[?Bom?bh4?4\??ײ?&.?ŬG?3H+?@4?}ӄ?M?$5i?ěS?ŗNf?鷿a?s?ohی?ulv?Up ?G0@9?5Q.ƽ?ꩨgHH?Jwm\?ڹZ >lLY?!-w2Y2?l?&q?=?{J#9?P3:~?E?6&,s.?@$=?r/Y?\лn??*\|ؙ?sJm3 ?HQ:>//?!5Q?O;dV??1zOsPH?uKۡg?v_ح},{ Z?&fa?|ZqxoiDg?ܜMOv_@FV!Bp@9 9&A@_f俫.}At@4mƿt}^_@{ 9&Sy@fWx6z@W˿nY!@Zx￱ @\(ÿ@3,/Ys@gW %1@VWi3 W@˼+@?@lC|ᛐ@,nyP@d~鷿z]y@ԕ*ȎT;@竿ɶ_@gپLI@IQrGE8@5MUik΅3@ݗ+[0HA@ԿKHӮh^@{ R?g@4r2Mȸ' @y!laR*@b{@j̒%1@9`Ov_خ@ #D=FlϽ=@ MзVC@ zS|є]r@ 6zl"h ԕ@ p%o]@ +mϿӐ@ @ӄپ@ M'!Wh@ \g*T:@ KHӮhݬ@ V. @ +jgӐnp@ *0U2#9@ 16Б}ke@ P7TՕ-#N@ r/mmqbb@ ̸Q֌i/o@ +CB@ nhط+@ 7UqKiB@ mȴ9Xb@#S&¿?@vο޽X@ ^5?}e+a@C4CkfA@n9.<`@a@OCA@' Go*ZF@?}ke@(9-ڰJ@">WS@){tӿܕ*0@@٩TܒyQ@[ >'!W@{5Xy),(@ߤ@Jw@.SeڹZ@UhƓh3@~6!laR*o@TuLۊ2I@ x@uލd>@3RCQ@IGNΚ"`B@`)kǿ8q`@xa Ec⁃do@fI<\g*@Se;<ϖ@䏿&A(@(ӿ6&,@61fD(M@ o]U@y |@deڹ@әo/@fAk;<@,i/n,QI@ eu{ 9@ ?ѿ?ײ@ XKrz@ p +@ @ƿY6@ zmǣ޽X@ Xe!Wh@ 𳑒d3 A!@-믿}At>@ 98qmHQ@ gߏ#x@ gu @ Ay|ß;yR4@ g8}_a(9@ Ȥ~鸿퇽@ A c "@ U7~ᰉ'R@ ͳ}@ gM3H$D@ 2 ě c S@ rq6_Ft@ ͞%tq@ >'!vȴ9@ n3A|@ oa@n8\h@a5_Ŀ!ae@+%l5@ =p K@P^l<@6[v@YZx7ue@ S&2,'@ A%|pp0#̎@  $ pmq@ 3u:>}A5T@ y|ßa+8q`@ 9.l oT@;A5@">iVt@dE#l oTL@7ޔwpy@|H@>Eʿ]N @|PH#K۠@W>6z4m9@)r\>TɆ@IOQD@adomr@i4/?@CB~2ftqɿ]9 =p fA ՠ{5*p& E+jg k얿y 6f*)s eUſzxl"h mQQڿr2LfQ_zNzVnp&)/n`Ni4WSu%F;aп,dn$D=B gw4.۵vk X%[MZ[(̿E I7KƧ/ejky?g#w?uMUi?cHjv?;D=F6;%?OB99.?ςӄvpuO?M@$=1?V?R}?ҙZx5?tyRL?#x 0#? eAj?*0QH?ɯ{qR~R?7~6 ?Ed?֡afP3?҆hKoiDg?ŗNfRsպ?fQ&İ? =B@c^J?s ;?,|?2 FBB?̓QX'?HU'(c)r?ֶZ}H˒?Q;D=F?bE?̚u%F i?vFJtX ?U'(b1?8 2X?ѢYȟA?9䣃hr Ĝ?)Ieʖ?B9CsB?׍u5~g?q6l7`]y?ؔ9.ߙË?ؑ?W gb?؏Fag#$?؎6F FVI?؎`sWBZc ?؏\(5inX/?ؐեb\ ?ؒyQ#/D)?ؒ)I؃4D?ؒ%1ÿbM?؎ 4Y?؄[-M`N?r/mtҲ?U\R- ?'76c >l?{ 2 N?׀3rTaq?hr!SP ?Qi,?-Y2X?~|ᛑ\л?.2XQCrq7?.3`-?$5inXj%|?6;%oj?K ͳ]U\R?]\t?i/nO,]N?anHӮh^?7 ܇TLC?Y2\R-?Nʖc>P3?Ѣ"?ejԪ"?;'j@k΅3?;D=FS?R<648YJ?anǎj?.3鷕-#N?GNΚ,vݬ?r[T"?Y!]cA ?϶E9&A)?ϝ-V>(?όe@̿ <`?zcsm.۵?XOLno?ɼn.-w1?ȃ4Ckᯍ?Ȝn1e?eںXbM?Z[(ѿ9Y ?ɿEwUC,zx?'(beV?ʐ$tTḍ?ulvʁ?nwpyұ2W?#К:э&?q '/?rGE9{0?iQX(ȓȟ@?lCI{t?ĸ' B9C?i?z@c^?27?&V@?ٸ<ϕ?&A(?ڡae??;%o^? ҉?9.?S 4?x??$6e?i}?5?"`B?$5in?˧2P]?Y|?@\?% ?1?At>=?婨g?ܱF^?6;%?|ß`?+?Jw?Z1'*0U2?!Z^ s?m3 Bd2n?`Vտ`l oT?h_@? =?~$ty?/Zp̢a?@~忖?6F #?|ß`鿓bb˧2?1;.^n?Z<-M@$>?ͽsȟ@?E8YK[B? ;3rS?2,'͉/?`N俱B? b@x?p`?.rLnm?7,QIN;6?1zO%1?# ٔ[l7?5͉/wr(?} x1 R?R?gܿj |[?٩?kXdE#?cA [?~Q?j~#?PܜM?{5+?9m ֶ?u;L?' ?K3?' ?4,Q?\R-#?IQ?p#cV?!Wh_@? ^/ej?䣃'gw?zcsm'RT`e?>EpP?uD󡿱0H@r?ܜM|ß`?)K𙿱pa?j{5+?֡afb#ᆘ5@ZIf{_@<@\i4/@_zNzVZFsB@{yR4쿱$'@ty述R}A@ӄvQR@̍2_@@@\ $@)n̍2#@]U\SN&Ԁu@E}2 8C@|tTY2@zN7ɛ@F4Au%F @#Z gw@aR*o?SѷY@.2ʿþvȴ9X@o.ӿeO @mHW @.O"}o.@:憿yV@0 )ŗNe@ HӮh^lja=1@5~g,ZpT@\Tw\6@U5Q< @nzcsm@Eb&@ =@IQ!5@R?g RiY_@N&k@?˒:)ǿ!ZS@1&yʓՐ@^ N˿$ p@./^ F@ʡ!Bk @ڤμS;w@ =&@ >($ x`V@ eXOLш;D=G@ ZM:@ `ɯ@ 灃dn@ "]yЦ5B؄@ rV߿0#̍@ t)<ӷ-#N@ U2a|ڿE /@ LAݿ5~g,@ 8@ _oҿn.@ ;nwpzԥP@ [W>6z_Ë@ {5Xy+@jU@ `kz@ 5TuŗNf@ 灃dw@ <64xW)@ IB ٝ4X @ M>؜#-#@!Whֵ?@z@dvݬ@M++̿qbb˧@cA %[[@ʖ#M@A@&@ 4hƒ)@$%1ږ=Ć.@7KƧn@Jm3 Z@_YɿݚA_E@tc4ݟ@U=T~M@@jU*EM`@˗xW)ؾau@> ر$5in@_Ëم @ $ pڼj~#@-ZB@BFImݍu@XLW gb@nzGGG#@:ܿ sG@qxBQ֌i/@ί%vݬ@paq @_ËDR?g@"`Bf3]@Ewٿeں@2vf3@R&V޿-@vZI0H@@!Wh^)4@ٔ[l7aHG @fQ2I@sBZg@ P옝.@ :SP T6@ s#x 'gM3@ q },{ Z@ '=<64@"Rf'|E@^np&?) D@ „1Q@څݘlC@ *cOy @ j1{ (w@ ֶ[sBZ@ dƿfP@ 5nY@ zQ@ &IR $ p@ D _.}At@ TO M*_@ qu|hs@ >B[U䣃'g@ ;aпRJ@ Կ  V@ {!laR*o@-Ww@\@gߏVt@ǿp&@zN{unh@XŬG1.@vP%(.ǹ@[*\*0 @n,'7@W#d},{ @ trY@ &qr<*@ CV势ß`@ #xB@6-E@BCO7u@}ӄ/e@sg l\|ؘ@v  @-=@@i'RTa`V.@A7Kƨ@䣃'gM|ᛑ@# Z@doa|O"@,s-`@ϠQCr 9&A@u:>m8Go*Z@Yz$LD鷿@^_03MjO@蜡bXe,@24nQ@}1oa|Q@ɕǎj@k;< .Cy@f ' {5*@xW) B@ b f76g@];D= q!Ks@P] 9C@ y V@bK3 vݭ@m? zS|@2vtcrGEݗ+k: Q^"SO"}A7Kƨ򐫴VϪ$Di4.ܿp:3]$E&YؿLnmͿ(M잃%a\ſ4֡aGX>Eʿިc^?TK:*d?th+kȟA > 4֡aђd2n |O""&q If'үO M Б}kf9Y ^J82\( :~HjܱF |쿱[% Hp:Ma= Ʌoi̷CﲪIl-#Ѣwk;<<`Bײ,' d>&V? $ pؘ5r/YYlU'(bpP+Q_S&WhQHh)Ief.2X҈p:X3s곿ZqxBե ~T`di'-:~hb$_Zjҝ%Ŀ/^ F1P修sim?cV+ I?NxłV?q!KrCA0?8YK?Yt[ @?7ȊH?dVE?Ԫ"ɰ?łU5PH?ӝyg ҉?v5Bl oTL?O M;xW)?(Y+?ѷIf{?ߏG0@$?ҸϿT -V?҈~_;dZ?CV3"HG?t}^*0U2a?*f?@.3??ײUᰉ?HK¹M?@< ?},{ Zm?B¤T^%?nCz$D?z@cۛf3]?bw\>BZ?˷rGX $ p?˝ gbf?˄{n?o*ZFsx-8Go?&q9*\}?7KƧy(?'/V4c4?Qߤ??M 8)?K:Ͽa|Q?HG +a@?G 0j+*?GXd ?G{?GXdWT?ejY|?8CkpP?,{ Z\Mty?J!t}^?cA [P%?R~RwPܜ?a@N-#O?z$Ln?A(osT6?- =?{ 9ߙË?,BZc?ѥSٿ앿E?C.3?ѣn.3d?쁿h3?^ N{_I?6zTuK?/0İ?ZIf{vf?=x?(M?&},{ ?9n?IVȿȊG?^T:翠EwUqL?jOvnp&?= RiY#π3?򱤽 RJw?+ I^o?Sٿ% ?=K^ɯ?(wN'^)?:>/0D">?]cA (\)?ѢX6F?'qp+CB?$/oiDg8? Fd B ?-e蒿H?vtc4 ?氿;Oag#?DUGiu?Y_a(ɅoiD? 7+y? ?ye+a?jnp&v#-#?#9vm?,<쿱|}At>?₿ݗ?wkP޽X?߄{ȿ Z[)?uO7v^)4?#y|0?Km\?unhC\?әo.g,?.]\ʿ sG?Fs6&,s?$Dc^t)@HHz@c^@< >:pd@[{r/m@o0%F L0@z)yz@d@y|ß I^5@wFz]9@Q쿳lC@Ї8Ck@# ܇Tw@+uy3]$D@^Qh]k<@&qp*@#y9XbN@ݗ+A_E@JM++f3@YR*o?R@V. ƒ)I@x?~mH@Dg8}: @EwUqA!@?) ɦ Eb@)y j%|@TZ7ue@|Z@=@V`A5Tu@ 9D@$tSϧ2P]@A7Kƨ.3@x-8Go*3)k@ӎMj+y@pEwUq͗HH@sBZ9}@A"{ 9&@ˇs@ޓֿ ѷ@ z9Щ7~@ DŗNeO;dZ@ j_|lC@ - qҭ-e@ fbb˧2@ Fdʂ@ GԾ@ 9*\}6fI@ zҝ&@NU@ بmqbԻA@ R<64#@ 1;.-V@ ᰉ9_@ JB9C`V@ rGE85z]y@ =Ć.@98q@ rGE8@N@ >nC@ _EӮh]k@ 'j@ٶgw@ Ok}:څ b@ ~g,6;%o@ m3 Aȿڬ2"@@*F4'/V@k}:{z@@y w[0@:d=@s*If{_@0dX:S@EGGw\¹@Y|ۜu"@ma=ܿ @R<6@y|àޒ)I@mާ @^t)y2@o~=R}A5@`GپK@ىa=1@;=K^Cf@S1zOiu @j\ѿܻ¹M@2^">iQ@x-8Gߓ5IP@ v@ŏq!KEbh@ؘͿ<+@pd飿ty@ k΅3f@$7a@=ڹZ0+@jU@V /׿XOLn@p٩E@\ѿ筁v@*\|ٿ@ײ_Zjj@֞FJ_0X:@I`뇓ݗ+@.?@ C(@ ˼+ٿ&q@ 9OX7@ :SP z @ v0^ N@ պAJM+@v6i@@ѷX"@ c S x@ej ֶZ@  @ SeXOH@ JA c%@ np&5@ %lG#ρ@ nO;\>@ [BFud0+@@ եb@ PեbW&@ r J@ h]k-b8@u%F _a(@jfϿ_@@X>-b9@ pa{@@D _@= xyg@[W'=["@5Ib}Vm@XJA c bw]@űHAJM+,@*)sd:@Tqp5IP@5Iv ׈@˚mϿuɯ@7 (zc@G,g*@zdؿ?@2P]H#x @ Z[)%|p@L'76hS;wG@{쪸Ŷv @5#-#O@p Zc@Pv ᛐo@4Ck'Ay|ß@z$L$5@1c4ul@Yd'gM@)sБ6&-@ )i}@p08 e@@5inX ݂u@5;Oa UQ֌i/@oej C\@ڤ+ ôr@!bw }2@|8x^ FFs?SE B1Q񤽺 R}At>>(wN&տ98\g*zd[ gw=f'|E?>Phƒ?s-M_?$6e Z?߯@x?ŬGz9Ϳ`l oT th䎊q VW҂},{ QCrq7MUh vȴ9ӛ=K^ Y!# QοԩK HU'-w1 W gbծ@ % ^-_GE85֪d7>pȿ$6e8\לu"Xa B$ҲM؆/YX:TafPU'(ca@OSh]k>=ĆJڧGB /^ NP1rq6~tqɿHU'(c61fϪ͞ï^5?|ͽsZpT}6̿KƧ6z :ve%1}3e%1[-M@1 ǎkVH[$^ N#s*)tDg8}Sn8YJx^ d2m?`,)kud0+@Tտ"쪹$^ NwkPd9>WS:4Ck'? ܇Tw D1P?^)5 f'?ԙO"}zVC?b-"?- qvWhI?mǣ /^?uO7uFI?Әs*CV?jOv`e?=[!Z(M?nOU?bv5?*ީpEwUq?Қ2fI?rGE8|PH??) jUp?bb˧3pT?(~"?.]\dḍ?(߹95?|?׳|ݿXިc?׊ ҿv?P{LD|0?K]d?ֲᰊA?XOLnma?y|ß8Ck?մxB0 ܇T?q;Y?2 EÿFIl?1.~GX?ԃB¤Vbw\?6CDS?,]N`sX?ӯ:а{?ӭ $ d+?ӻ b?cA \fWx-?^ FemHQ?hH`?ӍO;dZ*cP?`kznVX?FsB.H?ћnǎj?3thY? k~(!-"?P3:~Y?8q`l 7ޓ?Z[(ѿmH?cVлnwp?2W? I^5?灃do?m\ڿU.r?eK:>//?bw\ÿ-_?A c S>WS?0H@rd9?6C-¤T?zN{ʖ\?ǀ4m9? 0j+;Oag#?}H̿ᆘ5?Ȥ*1vݬ?ǣ ܨ>?:}Oʿ/s?˨MԿי? ԕ*Յr(?6e ؿ eA?ÙXdEN;5X?HڜM>?õIHUڿQm݂?"ֶ%?8Go*ZGԦv ?,+jg?#{0?an?28?++%?e?^ N?mq?@\?lC?#π?KHӮh?&.?ﲪ?LD|0?uy)?C]?ί%;?M_?C?1??(?i}?Y!~?ceO?_a(9?i,e?ݎ!R6z?6zCV?g.2X?%灄6? =p?}9ݿ|H?6n~wpy?ohی[W}?Ʋkv`d8? x> $ p?Yҿ8J?l5C?Fs 4?dyUFs? ^8J?)^ VE?*0WS@9Y !ZS@Qm݂"`B@]\QR@di&kȟ@p=,@ե#@>BZc]9@ڐ:э&@Ma{ 9&@%ם gV2@Tk΅4@ѢP3:~@e ؿ)_@A!1&@)sБ}þʫ\@x?Gů{ 9@A7Kƨ@`dе^޾@<27$D@h]k;xF@@Nty@If{_ԀuM@&q#d@OoJw@2f($Jb@ ^J82vug#$6e@ }H̿<+@ A*ީ;wF{@ .4z@d@ Eÿ~LX@ Q_I{t@ nf@ &76gڐ@ L4\ᰉ'R@ rP]ǎj@ ިc^ۤȟ@@ nCyWiJ@ #܋[-M@@Mx>۲K4@-#NL@i/nغKC@#سg l@Ckd0+@j@aae\$_[@x̷ԿoTK:@nY܊qiC@]yЦݢY5@fޤk@ʆ6&cHj@ދi;߁v6@"{0$@ /{ 9&B@,4\>BZ@NǸx?)@n9. @C,ztj@CkXbM@"ʿޯ%;:@wpy埿 k~(@}Atrq6@ŗNfxF@Yɿ5inX/@7쁿$5i@PRJgw@ia=1{z@@FImC@Hjܱ >lLY@WiJ /^@1;笚@2mdo@͉.k @ k{J#9@_0X @+%,'77@ Snm\@ V`VXOLnn@ 42 F@ '/WY =@ CŬ@ KNʗF}2f@ t}^R&V@ ˌeA9}@ O;dZ?|h@ P(߹9Y>BZ@T (wN`sW@ 6P!R<@ 9HU'(鐫NP@ Dg@ ɪҿD<@ "*0U2a@ _!-w1gw@ uyǎj@ nDŗ@If{_xvF@K۠'İ@@jU#cW@=At>>IV@uy(ʿ6e@$%@IHV8Cl@%Hjܱ@%2Ig @5R&V@t3ֶZ@XdE<@xq`l WS@g )`@p@LE?h@;%o^t@ZSv6@IQ$ xF@=E˿+@v₿ma(9@8O M@i;yϕ@'z@df{_J@eHL4J@-#O'=["@LjJL@$mqb@e!laR*@bxF@d> L8@#kyhH@jB9Cf@^)5.mu@ʖ]@Fv@x@(At>=@ qu0OY@.tnwpz@!-w1Y0 )@)^py,@# ($J@xYJ ud0+@@Μ}At >lL@&9䣃 55@`: l8sɯ}2feәo/a@OԿ EA_EmZګ\$:$LD|"nCyyЦv yQݗ+jD/0= VEkz]™߹8&pƿï#cW8LW4wd:ĵ?2"4J Ů>lLYum?԰ ě U'(c?vtc4 Nqi?>=Ć uK?[T'(b?R~RË?Ӡ kdty?o]U)y ?@x}Vl?zcsmI?łw6f?Ҽ@\;5*8 ?ғJm3P3?l"h ԕŠ?Fs8YK?"h ԕH#x ? $Jb$?灃uy(?ѿb`A7?ѡoS]9?хr(*0?hƒ) =p?LD|07ɛ?+ I^ZzN{?>B Fd?У'gM??)rnC?Y5;ҝ%?U'(bRp:?ʇǸ#Y5;O?lLYt\cV?SeXO>P3?=p =bZp?*o?R&"w\? |?ם4X n~?ז},T61?׌e@̿ϵIHV?}At>>K ͳ?eXOLIl.?A [7A7Kƨ?'/WL?uO7v8\g*?~Rvʿ?&.0H@r?5Xy>GG#?|O"(jF?:pd6e? ͳ}!bw?},{ ?c4"i}?ԻL{?ԗO;dVL?Wx-8G"wkQ?+ʬ>'?ӯr,?ӄ#πܿI< ?y2Y2 ?Ӂoa?ӌ*EMf1.?Ӈ?Ҟ[ ?Wp+jfB?&kɿʁ?#cVT;?k #'gM?>WSG?пi,08?ж07Y}?7 ݿLPr[?L6zX?'gM3Hh3*?y+ҿ$5in?hHs2?0OXR4?ygSMj?.< l oTL??¿tqp?'j@ k? ~DUGZ2?Yɿ1;.]?V2_A?ǰ  8?>pu~6;?DUGiB?`,\лnw? (wN@c^J8?:S|cHj?9.<ݽv?.3q`l o?Ô@xJw|?ÊȊG,R?yVϪ͞?Fsã ?D;,lLYt濶?) E?0@98ud?}H̿;:h?F0p?VHC$?+ \=x@?i,俱~+U ?廊TɆ*)t?DG 0jh3*?yhtqq?& 'ud?JA ciB? D"K?u%F:?zcsx?Xe,٩T"?!Kr?ڹY,?VC}ke?gX:SY?o~=~mH?au٩T"?\eO?!vݬ´DR?g? bȴ9Xb?T:翿[0HA@@x.H@0y+5B؄@@NU74@H9Xb{@Sݗ+k{z@i D ,<@!laR*F4AJ@݂vW}W@"[ @n.Ŀǣ @-w1P3:~@Y`3:}P@ V׿9.<@5Ë`k@&ڿ½{ @P3:~7 ܇@X@Œ@J"GNΚ@O >HQ@ 91P@^ N˿KH@(*cP@&A)`V. @/¿ܱF^@ ϿG#ρ@4cI{tѽ=@^u.۵@$҅3ti@]cf҆<`@*ZFsC?) @ЫNPƿT!D(N@[@jUp@IVȿћf3]%@ . f@ \}At?Ҳ{5@ XKHӮh^@ qbb̿ᰉ'@ G 0Ԍ?>p@ ᛐ2m@ #^t)۠&@ K`k{օݗ@ sT6)a@ "S׵IHU@ ]qlC@ eXO׸f:@ vgw>WS@ ȊH]q"@ lzxl"d7@ { 1ί"&r@ Dגd2n@ !$5\N;@ Jm3 B2a|Q@ r?¿@ <޽@ ѷ^ Fe@ yܺ)_@H@q݊ڹY@F?r2Lf@K1;.^@}9ܙ̢b@&h3@$2W+@jU@fWx-}2f<@$5inYMs@> If{_@r P3:}@&V޿NT@Q녿/v@Xڐ@_ĿL@ |[ =@vȴݒ:)y@3l&kCy@Y} gw@oi#π3@Ր@c^J@ί% $@oCrq6@T;H@*JLߏG0@D{L/{J@^'!W[k@x)zG@ᰊ(߹9@?[W@sջO;dZ@f:@pd$@a|Q稗c^t*@K[ohی@{m]@,aR*o?٩T"@NSe@ ">i9m @ X6F̷C@ ?߿c^t*@ mȿ V@ ]%4@ лnw.@ 8;:h@ yg˿7!=@ _䎊r3@  >lzN@ RT`eMjO@ ,[m?>@ s#x KZ@ y3+jg@ R-#l@ ffffffǣ @ o6a@ WS7 ܇@L?>pο"`@{u%F @#&I@>+U Nʗ@cI{t@_ô@!<׿Q@:u%F { 9&B@R&V޿1;.@WUqKQ_@;_IϿ򱹶o6@=q@Sf3WsPH@R<6~\N<@;E @< ɿTk&j@$ḍIW@}bq5@ Eb ѷ@%O /@\#-#>iQY@ ǎkc @ Zy k~@E84׿iQX@B~m{@~fZ @@\KZ@ҝ&-w1@:^5?|F"@{Tп#@K[+U@&;Oag#%@DOQCyU@ڐIOQ@ڹ'*d@ ǣ }E@W$tSԊԿ@n.+@x@tyQ@:BCT@7~3 V@4֡bi/n@*2Ib@|L?wd:@X^ @&4@}W O,]N@# 8 @08\g| \]cer2Lf /mriJA <`D ^g $^?[!ZR?D:hA?(wN&lvJ?ݒsM:s A0Ps2 Up OX7 &,<Ԍi/n T6Z b՚$' 6ҿOv_خ jF4֟j ;s곿?> NʗךA_EG#п x I^؋mz}OChۋqIbsBYf'|Fk灃dQR%ٿھ (B1'/VRD">ۏq!Ks ߏG0큭vX%[[pdܹ#wե*0Tk&ju:>/0 0(߹9V)m^ ˒:)`kzԪ"P*0Uٗ+jbb˧2߿ѠQCrqʁ'>EtwT6W&B I^5 : ҈οx l oTLF]cQĊԿ gn!Bo0'RTŎ!R<[T L/{VW?ܱF^" ?g b? 7!= v ?֌i/n W?ӡLA ҈p;?m\2I?;K@? 9&Ar2LfQ?]ce8-8Go*?үx^{ ?҄[l?ZFsBG ?2"?Ma=? $T`d?p*Б}kf? 0j+ ?ѡ"S_&k?с$/"?bRWx-?DM,d?) D mV?/]U?\(^?~L5?ȊGw4m?дfP9UD?ЙO"}e@y?{ 9&Btq?GE84},{?ejJ6P&?NΚ,fP3:~?ɢr/Yy ?Ɍ /+?^)47ɚ$?NΚ,f' ?&x̷?!WhX' ?Q6F?!5`?F?4֡aM?th=Fkw?VCgdZ?XdE#9_?ErG?'/Vֿ0݂u?CAB?{)T!D(?3rSο;:i?֭-e ěT?o'=[wkP?$=iQX?π3rѢ?vݬ?"SPG0@9?ۋq %R?ԤҲM.}A?˒:)ǿ "S ?jUp e?a Eb3ti?a EblvJ?eO  e?fI?ZpT0tqq?2"?T?%1),?Ӗ|GؿȾ?^޽ gb?IV`Jİ?H+q"?C$ݿe@x?CVY?ҶZIfCA0?İݿ ?Ebh-*E?")K?ЇTw[IOQ?y+ҿQc4?Ѕ]r/̢b?МnxW)?к6;%|o'=\?܇Tw\lLYt\?> [6?#x JM++?9D4\?@N?i4.۶e%?:pd?wpy,Sy3?Q:?np&ɿ&A(?ΐ ^)?1.,?<+_o?ʅݗej?ɓ ҉{?Ȝbx">i?ĭ+˿Il-?ŷk;<\=x@?3th)y ?`:Zx_?ĤҲMݗxW)?r ě^޽?_|1z?پLI1P?HU'(K3?9.?‡Ǹ?եb?Ɨ9m ?K?ʤTɆ?cOJ?ί%;:?ҝ%?[k?|O"?^t)E'gM3H?0H@r¹M?)kҿy}?;:h=K]? 8C ?:޽?`GGNΚ,?ڐ￸YJ?B vȴ9X?mP3?ҝ&tSMj?JMs? L?pHL?12W?Ҟ?(bA [7?xW)ł?}ӄP*?[T(߹8?]$DT ǎ?}2fYr?--e鿶+ ?6俶2f-b8ڿQCrq7@y%1@*ܱF_m3 A!@6Fsؿ0@J"i,@i?) Evȴ@%;ײ@T6CP@ >ln~@F5@;T^K[@gŬGHNΚ,f@`d@EſÕ$/@ƼS;O4@% Zq@Sf3"0@&A(CA0P@ ׈ȮSeX@fyV@tj3 V@灃4m8@OŬ.ƼS;@?,s-@33333/s@eU.sQ@ t}^Т~m@6U\R.+ I^@bDѱ+@a+@jU@Б}keu g@7rGh3)@YؿA7Kƨ@}9ݿj+C@ ywpy@ _f\R-#@ 6 @ &ԅH@ ha Zq@ ׈տ`s@ 4NP1`VԪ@ \1&[l@ Q녿ץS@ C,zxl@ n~͞%@  V׿$'(@ A7Kƨ,@ WiJkP{@ <׸<ϕ@ (߹9ד ҉@ PH0@ 6P%ؠ- @ i/nf3]$@ : @ Jwa@ 鈏a/ej@5IP=@=!.Hݼn.@g ޘ_F@ڿR&V@SP ,Ͽߥ;K@ $ pK]d@+[W>6z@'qpn@}>'!۞Ր@ ҉ѢY@Ҁ,'v@RT`eݴNP1@ٿiB@np&Q@ﲫ%灄@s-ѿ1zO@ 4@@c4j~"@jUp#cV@%>-b8ڿ 7!=@YT!D7ȊH@r2MޥP@~S&@zcsl߿qu!@/"}Y5@UQ.ƽ8}H@w#duy)@'j@Ԫ@*107@`0@>B[(z@%1U5Q/@#Y5;O8Cl@<=x@'!Wi@LNxvݬ@7Fze;D=G@I{tT~@K3߿8YJ@ ܇TfC@ (߹D ^@ jQ ٔ[l@ hFgb@ b>iQY@ Ԁu q @ '8}HyUD@ h%1@ fBYuy)@ N&ԀʌL_@ 2^߿=[!Z@ x-8Go*eәo@ //t&cI@x>-)r\>@OLnm9.@P3:~Y@BU5Q<ϕ@H9Xb3th@bw\,d@[[(wN&@5Kۡ&f@E84׿&q@6CwFz@]rd>@; vj@_[W>mt@z6;%D@i4.ܿӮh]k@ox^@3v򥤿hƒ)@X=ĆVϪ͟ 9ޮ9Cٔ[l7aQ֌icIXe+s|Oߪ_@>-b92_ Nx$Jb#OLnm?ΝsBZ' ? VE*1?xF^ s?C]zI< ?bDپ?ݗ+jQ?\(\ o.?ѷY D=Fl?csl&l l>B[?( 6+jg?y|ßa 3 W? k~( #?ag#$6 ' ?,]N ` k?/ (\)?.3Se?ҙO"}' ?k΅3b}V??ײFYJ?"0 gw?,dӄv?oi?џ+_@?{ 1ί%%e?XdE#9m ?7KƧnC?uɯ??9"`?)4au?ҝ%®9C?Ш>S;?А J\?y=b6F ?cOIќu?O4Ѣ?=p =Ws?,<쿱??X%[\[? (j?ѷXa?_|#'gM?fAF L0?;D=?ͳ|_`N?B !-w1?TɅoH˒:?ҽf'|EuMU?Һs-@28?ҸϿT E?Ҹ{0?Һ)_\?th=H˒?&V@Sy?֨TɅtq?eK{ Z[?;%o^y|à?Y!omr?\(ÿnX/E?u:>/0c4? [6|?EҿY?x?)4.۵?3)kVl!-?f),?"`BX ?y jj&?i;yS\$_[?łU5ޓՑ?N;5_*c?.]\7?;Lb͊? VEv?W pϿT?# b? eLPr?[BEu?Yɿ6?=[!Zy]N ?vȴ6;%o?p Կ ?[ g k?ҋm鷿?kZS?!KrGy ?ДG 08WS?ag#$6㊛Կ ?䣃'g7ȊH?)y . ۵y?CV3m\?x-`?#Nv޿G?VԪ~6;?F4AJQX'?l'?P?B9C?7~?/?a?ڤ+?;'j?Z1'?? '/?,?Y?KH?jUp ??mqb?}Vl!?T ǎ?x ?9XbM?sBY?qi?m3 A!? >l?fQm݃?6?^?.}?V. ?̷C?@c^J8?o?+? ٔ?}A5Tv?ިc^t?"??R<64?4X ,]N? '0Q?y)?Y5;'j@?#$6e+?QeU.r?jXFs?o~=F?Q ׈?LM:?࿼T^?ꫴNP뿼pd?G 0}9?|hrS?dE#N*ީ?Jm3 )y ?07%R? ﲪ◿=?}^_0迸P*?6;%px-8Go?h%1񿷼wd?HQxW)?C%5_õ?4xB0D ^?y s?DѢ{ ?8 ?%i4/I< (?d"&?m3 AȿiB?jX%'RT?եb1??`sY_a(?/e'>E? ^#{0?n$5inY|??82vtѿ\¹N??>ZIf{?gSֿ,]O?*0U2aZ?aեb?N%;-V?T Ǐs򐫴NQ?2B VOv_خ?O!-w1?p bB¤?oat&q?iQY?jF5ܱF^?ݬѷY?hbzNzV?A c RJ@oiaR*o?S@%[[տł@,[iv@J-`Y|@oiDg8lD@+ $@ ^ygt~@ZpU@"nwpy@Kbw]4@x4֡bĀsWp@.1zO@]9Ŭ@nGXd@.t{z@`EQ@iBʿƓՐ@j~#ħqp@Hobw\@7`,~6;@2"@R~R@:>/0°tqq@+U=ý{ 1ί@[$܇Tw\@qiC*)@LW>pu@'|E˼},{ Z@VWjcA \@EvC$@t>=ſ*8 @`:s@?ѴxB0@x)4@ )T!D(@ 7uC\N@ .ƼS@q@ Ͽؿ3 W@ eb|Q@ vMZ@ fC$'(@Ktq@4n /^@_fݸ)@6&ޘ7ɛ@Xy=ٿu:>/0@łU6 :э@lC@Nʖk~($@fB߻ $@!0O@P]ܷ,QI@ b܋m@a=1ϕ@2~|@A_EE84֡@?]r/Z@C-݂ӄv@f'|Ϫ͞@ŧKK:@<쿱k΅3@iQYߝyg@*%ם g@!R<6sBY@R^߿഍:@>RJ@J!)Ie@*)tqbb˧@M^Ѣ@LD|1BB@*1ȴ9Xb@0OY^"S@)r@$ȟ@> @DѢY =@_Q@tm8͞%@mRJ˿Y@8\h">i@jFѢY6@!$5ٔ[l7a@ AJM+,@ + Iv@ TɅoR~Rv@ kҿ`:@ )a@ jj%6@ 1&yIHU'@ O;@ 2-V!LA@ v1fcI{t@ K ο6@>Pl!-w@JԿ cA @_ôOB9@IQ74@(]k;7AJM+,@tAJM98q@kuysWp@'wYb͊@w`]xTK:@ȔG H+@ .˿>-b8<@7sPH6F@b `kz@7jfB@*") %ם@ցԪ@?`@g mqbb@q`l 11eәp@ha/0@^z9j+C@d_Zjj}At>@[(ѿA|@͞&Y@$g8}If{_@V!.I4@q ^l<@_Ë{@&A)x@1m݂Jw@jnNe@XOL(9-*@Fd)y@|ؘM5Xy>@Yҿ@ gbwpy,@MؿfP@qKd7@T#J82vt@CQzVC@:pgmq@%˼+ٿ8@ksɯ{@]$D%S@ײs)k@EK @{v @Jw_Ë@*\>W@yz$LD<`@ɭBNzVC@=K^X@n$5inYO M@r/Y@)k@%[[N;5@oD)ⶮ}Vm@fAT~W}WEZIf{_At>=0tqq2"*\|ٿם gb۫!Z?jz1 ?;<ϖd{05~g, %n PHH o*ZFFIl nCzQX' oiDg8j BulK: 2^ sG꣭_A!laR1oٸ{-b8 (?K3 &c?ǘ  y|?ҫ`kz^ :э?yUD iᰉ'?Il- 2䎊q?2mj?N&Ԁ#π?a@NYt[?љË`TPܜN?qpB?Krz%sl&l?&fF4?[lq1?łU68Go*ZG?~6tq?Тa ^?ЅH=B?j%|P8?OQCr8K?6C-2m?KCW1ί%? VEdi?cHj)x? 0j+ $ ?ϟU=+?~=uK?`:9XbM?D)ß`?+U;? >lL74?7E}2?ﲪ9`V?Gz??O M@?zxl"hIͳ}?U\R-?R-"(b?Rvhc^t*?Q)ᰉ'?RJm I^?W&h?ҺKCoiDg8?[W~E?h?jOv`.H?лnwp ?|G\(?$_Zjj3?̍2#?z]yѿr{m?3zNǣ ?sպl-?K3ۿwpy?Ҿi;sGO?ҷ4mֿxl"h ?ҽD">?̢a $ p?s?m3 AȿQ?doa9??|hs)y ?a=1pr?ӂ ߿5h?Ӣi}tT?Ӿvȴ9XG͉.?(߹9J82vu?_Ë /?ө*0U2aae?d9䤿YLI(?IVNzVC?)Ie쿱[W?ҹhH;5X?ejrfIBZc?Т]yЦܱF^"?ƼS;`A7?C]oi?r 68R~?7ɚ$Ww?UqK矩~+V?l5Ϳ6F ?ѩlD???) E?ʿLPr =B?nO߿.4?eh?˹~($ 8q`l? 7!=C]?LJm3?l&k?@c^J8 A!la?$5inXp&?4Ck'?ȊGA0O?Ħv T?wd: '/?S?.?SMj?$')?XOLn? I^5??bw]?]9?Ŕ[l7`? =p ?ɚBC?AJM+,?͟?dE#N?лnwp?7T?лnwp?UDR??ϿT ?gb?ty??E? B?Ck?cI{t?ܿ3 W? gb?޷Cd?5Q.?W&?U\R-?R<64?xW*?M:?kP|?FsB?)r\>??FV?l-?7ɚ$?L?/D)?.3?&.?TɅoi?IV?X:S? 0j+?+CB?I{tӿ?6俼2W? 6PZx_?L_m\? Z[(̿OX6?ѷXQ?l{0?E>?? 𿒨CP?'!W?jfB$5inY?c4,QH?82vtc>-b8?6C /^?g ;5Xy@N;61@-M@$>¢ @PH6z@yrGE8é~+U@b>(@E Ďqi@JM++ b@/iDg8Ŋ6&@]x4J@rz%Ɯ}At?@R4뚿,QH@-"׿ǻ,]@\R-: @EQ녿r[T@yǿT Ǐ@P3:C]@)g;L@Y $ xF@8<ϕտx@\崿)@M:Y@%F La@#K۠ᰉ@PB¤U"@}!.H鿾IQ@y}I^5?}@Ϫ͟^޽@)‘Sy@5d0+@?F@q$5inƩ @պ˦z9@I'>Fzd@Hտ4.۵@ tr2M [6@ cA bw\@ }ZIf{@ H!laR*İ@ qo6'=[!@ l&k@ +ʬה[l7`@ kהO M@ ٿeh@ %ڹ}3@ Dۿs@ diϪ͞@ R4@ ]cAc Sy@ -٩T"<쿱[@ >Wק2P]@ 4% $tSM@  ޿n~@ :>/0ۂ@3g lr2LfQ@fLPr[@L¿#@nwpz2I@}ߨXy=@@q0@.O"}~"@Y&A(ud0@Ҳۿn~@n.GzH@QSy84֡b@eOx?@o~m@Tw[0@`sX~=@sgQ@ (wNܐեb@ag#$6@ȼ#OQCr@ۣD=FP ,k@IOQ,?@ oTK2W@(5~3ߤ@InX/E+@n[WX%[\@s-ѿzN@uO7vuO7u@ b k~(@Jv5CHQ@A c @k}:5_õ@ t}^_Z1'@>iQY*") @ibsPH@t}^_@*1sպ@Rᰊ^5?|@=ivӄv@/P]@ :4Ck'ײ@ &[ ,]O@ /YGE84@ -v eA@ eәo/$Jb#@ İ̢b@ 蜡bb@ +`kz^9@ o#cW~m\@ E@ R4뚿P]q@?;)_@Xd&A(@MUhǿsP@/lsWp@d'(o*ZFs@=灃@+U OIHV@&1.@MfI=Ma=@/@~鷿@/^ oi@پ_ô@Y >@I<`i4.۶@E˼+@jUp@ł_ô@yg˿;'j@@" G|@ Jwi@8dE#OX7@i̷D'gM3@uᛐ@Һ` =@ ӿD">@@Pƿ^ @x^)!<@sCB@A!5^޾@'Jwq@cQ¿M@FV7ɚ@bοn>W@Hӿn/@T$5i~鷿@ZPnwp@N_ô@kҿ2@R<6@鷿t$5i@/-"@@Y!U'(c@tiY_@t[ \}At?@%>-b8|E˼,@rGE85vtc5@8=@(߹97KƧ@a c SE@BY!}@mB@[{ 1D@ Ex>-@ ;yRҿ*\2mh3*i43rSOQD}҈pz$Lwud?sO;dZu%F L  !.H eUſׂ /׿>-b8 l\ fB M[Q vȴ9k]V߿>BZc)4aR*o?S{5+6&,k J#9=2f<ۺ^5?|gT'76}9ݿܒyQ;Oag>BP*`kz]ZfC灃,A!% bރ4Ck7uu!Fd:pdqmߓ_ôAdocHjjY5;tGXd6o5IjUp|GP%ǿwd< ɿq*EMhJ5Xy(bV`?ʝ`w\?iQX{ 9?ɗHH}?ɯ{Ir ?ȡ7T7l!-?+@jU ⶮ}Vm?Ǹ{ 2X?Jw| zhA_?ިc^t E8YK?w{ X?B ߏG0@?[-M@% ]k;?Ѽwd r ě?яG0@9 <#x?cV }2f?9Dtr?Ho5;Oa?np&b)n?Ck*Y ?С͉H+?wd:nwpz?^)4V3??ײJ/ ?"&q^)5?ل?bw\fB[F]c?Qs?ѻ,]K]d?SeB ?A_ETK:?i;ySa E?ρ0H@8Cl?χ^ N?ϰ_@Ҳ?#u?PܜN >lLY?6Fzcsm?Y` b?~($ x8?ЛԿ X?hA_F,s-? 4-`?++%y2?u k?_Ë|H?ͯ竿7 ܇U? L/{. B[ 1ί%?m\>(?ʽ<64pT?Y`k;l?Hjܱ27?2"@?/ej?T]?"&? x?#9?">i?^)?M_?Q?^ N?"S 5?#-#?$D?B؃4?В%1?h3*?Ґ$tT??ԎcI{t?0 (?֋xW)?R~R?؇7?u g?ځohی?]9?zVC?E?r ě?T61?4֡a? |Z?/s?*EM?),(?&,s-?#$6e?W?IV?S??n? eA?<ϕ?6;%o???73?OX7?B ?$5inX? ?eV`A7L?ᩓ ӿ>WT?T6 K? ^at?պ$5inX?ŗNe_?% B?S&¿ty?琁>=!?}ӄwK]d?hۋq V. ?S{ݿ3?=bqxB0?'(bC,zxl?{^ N?,fA?udo?1o?U'!Wix?ɺ^5?} '0?D">j1e?Ccܿ?S&|G?5ײ?x?E?_uMUi?1&鿿]x?D _KCV?"쪹>6z?e 08}H?т ῿6fI?=p =< #?FD)?"M3H+?}A5TvE84֡?پLI쿱[W??M_ËinX/E?"˿ ~?m\:S|?@xulv?뿛 ?X:SXbM?L@C?-࿚@c^J?ֶZ|ؘ?}Vl!5?|h?mHQ&?G%炿 ?ﳿHG ?ȿwkQ?sbb˧3KHӮh^?eY?:ҿnp??ѿ!laR*?z$7~@|ؘ)_@9~($ a@N@[QĞ쿱[W@U5JD@P]ί%;@ᆘ5K@?>qm3 B@?)rNvݭ@nG9.@;D=bM@cA \9.<@dZnX/D@+P{ɶv @^QEv @LC,z@{%1@,'7ʖ]@ᛐꞿN @c4ҲM@ Eb῵*EM@!D(N< @>P%1@0aB @]cA B1@m3 IOQ@`Hl5@䎊qjx?@ucA \@? ᛐo@nx?5Q.ƽ@q!KWiJ@`HʓJm3@ =`A7@;K2"@ qu!@x^ BFIm@:Ͽgߏ@ҝǿ=p =@viu@K?ײlLYuvjo?R&y+=!.Ha&:hA_3ߖY}^_1L)J$ pXn~NΚ,f*"'xl"h tҳLA4\ȟ@$D;mYPܜN>+U 8R}ʖ[ ѢY~Rv=៾vȴ9|`//tK3z?H ?5Xy>~GX?V2L?>p?>P3>BZ?s B؃? e SMj?Ş% ?9C M%?I'> _o?x?) b?% `l o?\( {iJA?}At> Fx>-?ТpO4 Crq7?{m]XdE$?V. ڹ?2"?o1?&98J?ݗ+j?ܱF^"6?KHԿM Z?8}Hŗ?i;yRҿi$')?ѝ4X +?䎊pO?DUGv?>iQYi4.?sպ3mǤ?ҧ-Ō /?ם gb])4?<`?wFzy ?m\S|?ěSRJ?_Ft?oi-"?\((b?- qvd%1?ag#$6F?P3:@?)Ie0OY?ʁY5;?OIHVJw?ώjkP|?sպ9m ? 4XͿ'/V?07 :э?NΚ,f&kȟ?߹8Rr/?{J#9kv?74?D(M?wd: I?¤T~ ܇Tw?O4N&Ԁu?#-P*?˸<ϕտeO ?˚mT:?˵]r/Z?ˑFVJ!B?ɯF]c?DUGZ2h3*?umqbc?ƅݗ>'?u%F L{z?fI<;?pdƿރ<`?ħŬGHܓ ٔ[l?Pܜ Sy?o5?iY_a?\$_[?Dg8}?a?Q ?D=Fl?Ww?Fs?İ8?ud0+?ȱA_E?hb?̱F^"S?)sБ}?W}W?ȴ9Xb?U\R-?gM3H,?R?g?>-b8?M ?7T7?H?< (x?B1Q?䣃'g?;Oag#%?nO;?2W?S&?6?3 ?'/W?.3? ֶZ?Y!??O;dZ??z?nY!?bb˧3?GXd??%2?mH?l7T?-_!}?dZ?4.۵ܿ@N? gb?}3?Y!$tS?#x E?aiCA0?ΤTʿ}3?;5Xy 8C?a?Zu ?B .Se?mϿ&k?TK39.? '0B ?#πܿ[l7`?Crq6i,d?π3rv ׈?t/l?RL¿A0O?}dob? &c4?thֿQ.Ƽ?RJ˿A?Sa@Ot}^?bE4֡a?`sX(wN&?[l0H@?nɯ?Krz%/s?_pO4@˼+ٿQ.ƼS@.G濼\¹M@Md>@isБ}61f@,LA"@)ybb˧3@rGE{_I@^)m\@HԿDŽ{@xxW* #y@mqbcȖg@Tտ&A(@hbx@< #Wwd@wT6˒:)z@nmͿ@Kgwd@۠&6C@F9䣃wpy@*EM꿷y (@ I^5ěS@fE@NPTw[@ُ>(o.@Tw[^"S@5 '0RCQ@b}VmQCrq7@`A7\>@Ɗ?@NP1&V?@:>BپLI(@:@C\(F@ :э% DU@ +CBaR*o?S@ _ôrPH@ ~mHͮ1@ -M@$̬1&y@ եcQ@ dob@ K ο9-*E@ "w\ÿ2 E@ J&͜8J@ tDΦL/{J@ !Bp%1@ V`WЭWw@ $ qэyЦv!@ 6e ؿҠ- @ rfI<{@ 2S@ >=ć֐$tT@ )9Y ׅoiDg@ P|ƿ@[@ onVCV@ #yـ^_0@ B%1L@ VEӮh]k@ P{ۈhb@ꉿ>lLYt@@n鷿@puOǸե@/Yۏ@ gK3z@oo:э%@܇TwC]@ͩ>!䣃'g@~mHZ@`Gb}@ҿv@3+U޿ʁ@Mqu"6&-@gi,e1zO@n߹8R@!51ί%@.¤T~@ԹhHT!D(N@񤽺 R6P%@T ȿtqp@/hۋq@Qy|Ŀ兇ݗ@x S#@Nv޿l&k@fAd,@ &wFz@6#M>!@zcs(z@=b+U@!6䎊qj@ ҈pߤ@@ 3rOLnm@ RD`,@ Qv @ i/nl6z@_@ Nʗ@76gkv@U=Z@64K0OX@wd:_ô@Eҿ\¹@ _])4@0"&,zxl@Wud*:э%@~n:)y@Ԁu 1ί%@D)dmH@JA cπ3r@!5_Ŀ;wF{@L"h ԕŬ@YiQ@n.2ʿłV@dtj |Zr@8F]d'/W@%=[!Z@1;ٞ@@n=v@?R&W/Ys@ѷ^J82@+GN@MUin)sБ@_ (@]cAoiDg@=ce*")@\$ S$@$'OLnm@+\$@}p =M@Л*u%F @%z$L]cA @z$'п{O7u݂u)Dg8~"}nP?D)%U5#Nv zcsl߿ty RJ)4 jUp 4J {{Y q6h3* a-w1ſڴ: #-nY!nʂaܱ2WWc^t)@xmȿڐ{@[N&Ԁ޵ '0%ؿ#$6eV₿ߌS$' koiDg8dob(M`k{VԪ/w<`onVh]k<Af:/^ GR~Ra Eb࠿(zc+N&Ԁubt>=ćZ[(ѿ+j+?ײẈ& xHjܱfI= 7"%8nt;K>m\?a(9-5Q.?Ԫ"$tS?|o'=\N?q!hƒ?Ħv  ?ײ?@[ ;'??ײ DUG? UqK?#̍2 "pO4?˧2P] .?vtc4 Zqx?%1L #π?{ 1 P=B?ϰ_@  B?hHS?"`AW?>WT} RiY?΢ HeO?eKǸզ?,s-$_[?U\R.IPpEwUq?͒d2n9~($ ?d=\(?9Y SP ,?un?A!\ B?ɅoiD$k?̩iu 빌~($?̋[-M@(n?q zcsl&?X AZR?B¤T sG?//s΅3t?ygt ?&Z3 ?3 sWq?*\}5~g?򐫴NQ[-M@%?R~Rwpj+?g 5O7u?Ϡ k s?XdE#ȟ@?=Ć-7?JMg(b?\¹N>?v5C2^?5~gUqK?XJA c?*EM`+?ᰉ'RNv?ulvE?u%Ff?q!1$5in?9}]cf?*)sO;dZ?ζZIfl?h3ƿcOI? ͳ}N;6?π3r?-"˿&V?b}VmVwpy?Ϝߤ@݂u?ڤ*e!Wh?zcs\?3rSݿvU\R.?ZIf{ |Zr?ЄaSy?аȊGeU.?"쫿 ?u/#cW?E /L?{tҳKrz%?ѳ(n-M@$?#cl!-w?#ᆘ5<`?Y!~_Zjj?҄?]ce?ҁEſU.r?O7u84֡b?o~=nD?ʤT~U.r?˝-Vs4?1o67`?w1?ҝ%߿ y?IOQD9wr(?Υi4/?1z̿"m?1ڤ1ί%?xF]div?66e ?pPmq?ʟvȴ92 E?ʳ,.9C??z:d9?ˣ3ti? 7!=;D=F? (wN'+a@?g*d-w1?`Gſj~"?GNΚ,ceO?ˎj/nV?KHӮhZFsB?5?|hU?hA_Fn?'!WiMs?ws䟩~+V?udFIl.?X:S丿x?u%F LZc ? ҿJ"?@~=Ć-?Ⱦau۶_?a Ebۛ=K^?uO7v?ɯ?m ֶ[?a? $??>p? ?HjܱF?G#ρ?If{_?}9?HjܱF?wd:?EwUqL?ɯ{? ěT?$_Zj?ѢY?LI'???:?Ѣ?zNzVC?zcs?zcs?[T?~m?}A5T?4J?z@c?2W?|o'=?RiY_?A [?ިc^t?C,z?a?䣃'gM?٩T!D?ѷY?&q?s?Zx??*o?R&?DUGZ?(\)?>-b8?)a?bM񪿳jF?D*0“򐫴N?jOv`-*EN?ڐ̢a?LnmͿą b?0+@jU3:}P?s-ѿߏG0?i,eþʫ\?k]Ìe@?WhI]x?D">j/s?27Ȋ3?uMUfC? =²LP?ʁŒD"?SiY_a?X%[GXd?f:($ xG?wkQ / ?e@̿.S?lLYt?(.ǹQ_p?*8P1;?.O"}K3z?laR*oEM_?O"}A(o?@&?\=xA c S?aeC\N?.ƼSH?@D(MP%?%;:W&?ѢY]9??>pοQm݂?Цv u%F ?dgS?ۿV2?uy(ʿa?H`Vտ_@?1zOK?sf:?XY21eә?nhH?(FD ^?7{ 1ί?zNzX%[?`VԪ.S?d,"}?. <3:}P?Fsܿ7ɚ?d2n?_EX?,zxlBY@ʖ (w@<ϕ鿶ae@[qu!t@k;<пM>!@`s5~g@D0X:T@T;)r\>@i;쿱[W@/hۋ#M@_G0@:lD@gS1-@°ȊG@xB0Jw@-b8pο_Ë@₿GX@p#̍㿹t@h]kiQX @49Y @Bejwr@qA_Eu%F @&ulvK@ϕV?@q=[!Z@-=);D@\ Bu @m3 yV@8J =p @MԿ@0 )rGE9@N_o !R<6@blLY{{@ {iJA $@ g[k@ /^ G]9@ پL׿hH@ 5K䣃'g@ d2mҥP@ )Ӈn@ |ᛐ@ ߏG0@:uMUi@ B ^ N@ "m5;Oag@ IֶZ8\h@ r̷Ԫ"@ &kɿ٦76g@ |[|0@ { 1ϿV2@+Krz1&x@][`kz@1zOݧڤ+@1Pݘs*@oD)NxW@7ɚ$A!laR@slC@v52LfQn@.S%F L0@-#Nw%ם g@Gn,zxl"@bEIV@|0#ͿY5;O@+,zxl"@ 6Pᷕ-#N@KDR?g@ (wǸզ@1;.b}Vm@">iQ (wN@?W}WnCy@\UDR?e+a@zkP|GG#@[l7a=Ć-@FsBNx@<64T ǎk@)kǿp:~@wr(&Ԁu@i4/82vtc@ƿJ&@~+U|@ MؿcI{t@ ($J sG@ 4Ck'{@ 6P%f{_J@ xեcl-b9QR@qbb̿ʖ]@ѷY<ϕ@l5]9@#r2#̍@XYJf3]$@.˿'ŬGH@v ׈}H@E -#N@0MUhǿ@fQm݃q!@G{AJM+@/{J#-Y@,QIۋq @)Ie]\@$tj@?_@ڿqiC@\(/ej@72^?g@㽿ʁ@(n0j+@ۿ>'@ᰉƲkv@лnw2/m@,Ri,e@CLhK@++ŗNe@*0Cy@$T~fQ@qlTK:@\(1zO@_P3:)I@*0UnO@MQ?@Ul6z?ߏG0@"9m ?̨TɅU=?xB0vF?J&74? 9M0j+?"쪹$tS?sպV. ?˰ :э%?ˏs]$D?rq6<@\?Wp+ڐ??z:0j+?),(GZ1?m]`?K$+?< @?C,zPH?ᛐoynD?/l@P?K3ᛐ?4nx>?э%Sk΅4?< #.?ѱ1eәpsg l?ѵIHU8?G?;yR5jj%?a@N9?Ѱ݂u^5?|?ѭB*") ?Ѣr/Yy=c?Ѷgw?>PW9m ?(߹9LPr?>PU\R?inX/Eo~=? k~`"&r?и[BF ﲪ? [W>?ͳ|gt}?-^?6ҿmq?WT?ҝ%߿CV3? M:])4?ɿbȿłU6?#x 1 R?]yЦv9wr(?ϕ Eb?PH#π3?b}VmB0 ?1 R>vȴ9X?.3#?ʚ,fWѿ@Y!?ŗNv?0ƿ;<ϖ?gS.H?Y2 ,d?+%7ɚ%?nYf?QR?A [1P?,RT Ǐ?.}Atvȴ9X?BomQ?0 (p&?tTqK?9䣃Ho~?`]xulv?Ŧa(9.Yt[ ?XWS?8J7?A [7ݢY5?{Nygt~?o~=?) D ? b?QCrq? 4?Ǹզ??o~=?Q?h3*?̷D?u:>/?P?2^?#-?LPr?[B?ᰉ'?=!?KHӮh?Ϫ͞?*c?_حV?٩T!D?`,?IOQ?|E˼+?f'|?5~g,?C?եb?߶v ?6?䣃'g?uy(?(߹9?5_õ?ʫ\?|H?y ?' ?̢a?&q?Jw?䎊q?CA c ?T:"'?@jUpr2Lf?Ov_خDUGZ?Hӿʖ\? $ qY?CFV?++%>'!W?nO;~L?䯍竿Ğ쿱[W?aĿlvJ#?=1o?FV?&^ N?d ?}A5TGNΚ?x?åS? BÄ{?ɅoiDeh?,QIHӮh]?q!K.}At?l oTLCA?#fQ??ײ??T Ǐ#?HG?N,=?HӮh]?,>B[\лnw?󶙄^t)?X:S丿F??F񿬩iu ?Wp[B?Yt[ f'|E˼?\N;?,0k}9?\лEwUqL? |Zr݂u?i/n|Q?R"??:I< 6z@ginX/E@LB@L?J82vt@~ ;u"@|O-f@{ 9.@C7 ݿ4AJM@5Tu#x @3 A!l8@cwk$/@Y2V?@灃1;.]@|ݿ 8@#^ݿnh@S ݿ|@v ׈ƼS;@d3Ǭx@ pȋxW)@Q֌i/`A7K@GzH,s-@|?T:@_@u%F y(@ݧeV@ qu"]yЦv@ PܜM~$@  4¿0@ rGE9@ r2L:}OC@ %i4/puO7@ UGZ1̰{@ oinD@ iKƧ@ ҲMRJm@ Ʌoi@ DY!ѹ@ tSMjtSMj@ SP7T6@ 7uRC@ v ؿ@ :S丿[BE@ 6FsؿֱF^"S@ XY2׋.}A@ x_@@ gwZ333333@ gb[T@_o 1P@?gۺ&@r Eÿܗc^t)@;:ithM@ٙFIl.@a@O/w@d2mް8@3 W]$D@lvJj~"@\g*ܪ:э%@4]tj~@Xިcgb@t[ eәo/@]q4AJM@NPQ@ I=Ć-@.4w@LXMs@3 D*@7ʂdoa@SE<*@p*䁘R@ՐnO@hH夓ȟ@@iu 7ɚ$@ߏG˧2P]@5~g,^)4@%hJC\@;f3]$@Qο芰ȊG@ Y_aY2 @7ᰉ@ !Bo$ xF@ 7KƧCk@ ^5?|푿jUp @ )4+@ : B@#MeO @hc^t*L@ @A~2f'9Y @ ҿ!6@7KƧ'\лn@@c^Jw+@m]޳"@%|`d8@0$1&x@-[<@]{ 9.@Qy@~ |Zr@]9V`V@&FV.Se@Z6C1&x@Qnp&@8GXIb@{ ϠQCr@L_@WXe(9-*@G@@WhIU=@{0$B0 @%;ʌL_@OBѿJn@+Ͽ @lI^5?!n@d0+@]q"@b?F@JQӄv@k;<t@uJRiY_@3ݗ+k:S@9Sȟ@@.mu\(@3rT/ @ԊԿK4XͿЪ:э% m'>E ^灃ѡ$5 :G{I{t jX [q ᛐo 7TĆ- 7ޓַCd d0׺{ 1Qʫ\ ?ѿS - $ m3 A g,tj NMj(be)sБ}yR4뚿*0"fI<wF{[($fv |/D*m$tTIbߤ?P*Q 8ſ*ީ =p׿D$5inXUOB9xl"h տxB0F6&-yCg=Bŗc < eA$/'(߹So.CA0P%l?Pr[Uth?5_õm??ҞSP?(9-*$/?x? ;L?s) 8YK?!-w1 '(b? e?q 4m?g do?/^ G ҽ<64?N 2^?̊ﲪ d^ N?LYt[ 15?08rq6?Y2̨??ˢwkQ[l7a?of76g??ҝ2NQ?zcsm=Ć?},{ RiY_?D.r?ʛԿ `>WT?y +a@?ZFsBo5J?=p =28?#9m3 ? $T6?y|à?>?SM3H,?m@98?.r0xs?ɹbEAi;yS?ɰ5Q. ?ɩT!D(}ke?ɭZ2 ?.]\jJL?ty]Sn?C,zxqeәo?Ѡ kA:S?ﲫ`?Y}Jw?Bomeם g?Ne! Eb?ѥbU=?эf'|F?юuy(YT!D?x-8Go*앿E?т ??ьe@*0?цDR?gSv?ю[W[l7`?}kesպ?O M; ?;dZj8 ?q!Kro?߹8Rȟ@?s4\R-?lC_@~?5,x?l oTKHL?9.weں?̓doKH?ʹ% ?ᰉ'q!Ks?!Bo x?ZFsB^)?Εᰉyg?,<π3? >lL(b?Y5;OaY?Ϡ&3|?Jw?#@D?EwUqLjܱF?o5IQ%S?FgKrz%?nY ?2a|Q ٔ?8 g?@?@98qj?wd:zVC?Ī"'b}V?a Ebɯ{? B 9Ma?<쿱[D ^?Ě0d?Q ul?ǷAJM+,(߹8?m?>0#?LI'?-#N?Ë`k%e?ʼn.}ZpT?+? :эWx-8G?;%o^HӮh]?,di?ȥ&ڿ'/W?9䣃ӄv?ɣ{ 9&?27X%[\?Cf\|ؘ?=ޟm?GXd8YJ?hr!kIV??27?Lnm?H?<ϕ?#̍2?pP??g#$6e?Ìe@?2_?Ljwr?D"?˂ӄv??{?^?ѹ~($ ?;Oag#%?ӴxB0?6e?ծO"}?S&?קڤ+?yg?٠QCrq?doa?ۗ9?x?ݎj?b}Vm?߄پ?t}^?ཐW?1?4Ck'?Fzd?⼩iu?CcH?ѷX?u?m%R?槆&İ?KZyB ?髟U=^ t?TɅo[BE?)sБ?fPɭZ?{ 9 x>?8\h sG?iJA1.?ke I^5??ǣ őhr ? 0j+J!B?IHU'z$LD?CAa?sպx??5~ī ~?앿EČ?>p?W'o'=[?{ U'(b?cI{t>=Ć?:*0 ?d>(?ﺝ` sG?gB؃F]c?Fsؿ)r?RiY_?? KjX?FQ?E1;.!-w1?ʡ!Bi?G#ρK3?_E#c?:)_f3?AJMù8R~?/vɿÜ[?8 ~$t?&z9^ Fd?Jb#ᇿ:pd?"pO4]9?5_Ŀ>P3?!ZS›Կ ?`:_o?ҲۿVWi?mR~RwH+?G|=x??:S8\g*?ygt)sБ}?P{H?N_o /s?`+$?#cVuO7v?G0@9vݬ?@c^'(b?fQm݃ިc^t?N;5ߤ@?;ײ뿴^ N?RK#Nv?q!KslvJ?wN&Ԁtc4?ݷk;=a(9-@yЦv64K@?i,俪hA_F@Dohܿzɯ{ @.X/D? ٔ[@'!Wh?[ @A\?bE@lA!?-f@#?CP@`sW?- q@ $ q?İ@3?rGE@e?`@}?̷@ҨCQ?de%1@If{#cV@CVtj~@={ 1ίty@ѷf3@M:) D @͉߹8R@0OY~g,@R<64O"}@*0 ٔ[l7@_׈@#$6ek}:@bMŭZ@HKHԿƎ 4Y@yY l7`]y@;<п> ;@sBZh@>Eɓ_ô@G eOv_@~tqɿʘa @4mֿ6&,s@ VyR4@=1o&V@@I< e+@ Ccܿm3 A!@ W>6zڤ*@ {0!-w2@ >=ć-b8 @ 84֡ /^@ H+٫!Z@$0+@j|Zqx@VԪOIHV@.}&.@ xGX@`ם gb@%+޲B @\ߤ@}ke@̢bF]c@竿߼K[@Jna Eb@ί%݋`k{@AR/^ G@{쪸οޣ'gM@oߓ ҉@QFd@XdEi}@2a|ڿHQ@VHSP ,@->lLYP%@JB9C֌i/n@g)^^"S@#πܿ)Ie@ohیsl&k@f;> @ؘͿ厊qi@Ov_خ@t[ x^@8LWAt>=@VZIfҝ%@o.ȿWp+@g>EY@WpfWx-@ jX%@0nC2^@ *cPx^ @ ¤T~9@ H˒:#w@C\ y@M}A5T@e@̿즋@ ٔ[lNʖ@Z/l'j@@<@j%M>!@`s@?`sUp @dM^@=Bn/@Sy^҈p;@?FT6@bM@',f,<@NzVC򷴢3@uWT@y ,{ Z\@[W/O M@w'j@t!-w2@=1o\=x@zxl"h e@FIm@.@ɿC`O@s곿Ck&@X6j@Zxm8@ZqxB¤T@L]Nv ׈@'|E˼<64@ĭ+tqq@ '"]yЦ@K&iL_@0#̎M:@~|᜿sbb˧3@!!6⡵͊@lVϪ(b@p+`@ȟ@s*@RfI<8\g@aefC@U5/l5@zd ͳ}@P=x? Pr[Uҷ,QI .H-e 1;.^ ׈qiB L8e@y qbb˧Ջ`k{ @NU ěT \崿ֿ3 W =Bhr Ĝ 3:}J I^5?}0 QοٹbE z9ڟm I (wۓ lܔpd {¹Mݜ[ yЦv!ަYDUGZ߫8q`-݂vSP ,l*")Yt[ 4mdᖻ4X!$5inYJ-`;<ϖ[!ZIf{_zS;wt\i47QQ׿"?`N㓿If{_T:㛥SrfI<%F$/?~޸Q?&cI2W?joh?n~V`V?($ xG(b?~g, VC?܇Tw\ #y?A5Tu 4X ?!Z mC\?Q >lLYt?VWj 3t?/l5 Ov_خ? 8Y? [6 |hr?}OB =,{ Z?HG :?">BZ?|H(߹?ɻ uinX/?ɑUDRBM?j{&?GNΚ,g*?%|oQ?̢atm?Q@4m?c4 ?>p?Ⱥs-xW)?Ȧ">imHQ?Ȕpdm1z?Ȅ?7z@c?wkPuy(?l-hH?d̢w[0?^_0X^?ײ?ZpT'G?Y!~ ?ɰ5Q.np?f:JE?qu!ST~?b8P3-KHӮ?&A(|E˼,?iv[BE?G0@9blvJ?T]P3?>q?KCV$tS?W& |Zr?T6uy(?_Ë+j?*o?R&U5Q?9Y }޽?#]!5?ѧ&!.H?ЈP*x^ ?Q֌i/wkP?̼j~#^? k~'/W?41~^ t?nh{ 1?ͨ\ ~$t?{ 2??!BoM?`, T6?Ρ!Bp$tT?ŗNH@q?hۋqZc?R<644X ?{m]n?~($ xR??gߏGG#?#wk0O?ĊG|v@c^J? 0H@r?S?bR)g?uMUi"?ú4Ck'4X!?[-M@$K?8CkF L/?#x b?&q׿h?}^_0tSMj?ōͳ|A!?]9wkP?. !?VuEbh?Ŋ2I=Ć-?=\R-#?{5*8 L8?'|E˼,DM?{z@'!Wh?`: ԕ*??)4?[W~?~LX?a(9?wpy,?M?7!E?gwZ.r/?cOJ!Wh?' ֶZ?'\лnֿMUh?^5?| b?Joh?ٿGX?\¹M'(?GſV. ?fI<ėc^t)?<*ÿ>BZc ?2^?N;6ÎK?sBZE /?&L/{JfQ?_")?41†/Y?Oag#%L/{J#?A(oѢ?Z1`G?KsGG#?Ώ k~($?LcA \ 7!?Q.Ƽ迿π3r? =B&? d>]r/?]cA\(\??) EƧ-?K3,]O?+KrzwkP? ٔ[lL? |Zr\(\?nCy{5*8 ?ܜM?Nt?J\崿)y ?{0u%F?%[BE쪸[?S&k}:?鷿%?iQX(?Կ o]U@A5Tup`@-hr!6;%@&B?u@K:?SMj@@~?͉.@Cİ?xW)@r9m?S@6e?u:>/@׼wd?v@ {{?޽@=2fWST~M@% Z[(@qxBޟ@~@o*ZF#x @o߻ײ@Il.Sy3@{0΅3t@!͉KZy@>Eʿ>WS@[aL/{J#@xf:Κ,fX@R~Rv@(n@*^޽@+lC@ 3H+qu!S@+:)z >@JRiY_f'@i[W~T@\ 禠Y@Hjݿ/D)@7`]y- q@FgtҲ@@E84֡@7UqKb@!7T7)^@%[[TɅo@]9\$_[@͉;'@:s*@,>B[8\g*@sT6ٔ[l7a@ 9&B|E˼+@v6 Fd@&9䣃ŗNe@K3zlLYt\@p* @o5J^~L@G=@QX'#@ G|[W}@1pO4񭖦Z@Xs*"`@~X;A@<`kp&@lvJa@JM++򌈤~@ ӄv@^ N`,@5v.2@ZS|6C-@D=FlB @A"ޓՑ@5*8 WS|H@&5W&@a|Q?>p@.H@v_حA@#x s@D6!"S?Ǔݗ+kƼS;?x^ Q?`]x'>E?KCVU䣃'g?8}H"M?'gM3Hr/?PHI< ? 0j+8YK?Q_p?z9 y?ŗNf?D,'77?n{Oag#%?@c^JE.r0?K۠'N;5?!laR*\m?? |Zrq6?$/7k;'!yU?-ek? 4[f3]?-#Nwp:?0Pr[?4J_?.ƼS;J ?Y5;OaX'?< (x\R-?Q֌i/oIV?NP1<`?J82vtA\?\>*_|? 7!b? (wN' Z[?m\?thM2#?NʖjܱF_?.SeC灃?Ь1&yk?hr!c ?_o12W?˳ ?ygtޓ?{0$kȟ?ß`O򐫴NQ?ѷj`V?@xKHӮ?YɿrNQ?;n< ?<`}ke?Y =ԊԿ?6y1eә?tSMj? oTK^?ײ?švݬ\ ?ķCd0?a EbH@r?򐫴NQVi/n?o*ZFs*?灃dMj?CA0v? I^5~|?"}98qa?$ pحU?Xe,Krz%?b}Vm{ 9?ֶZIj?,dͿt^ N?~+U H?R<64@n? sG 0j+?]x7-#N?ǢwkQ֡a?Q@?mHQhr ?np&h5~?0#̎s*?5 ?ɀB ʖ?cA \7T?iQXfP?ᛐꞿ_@?ʣ^ݿsl&k?V?ؿa?doaR<64?ʭ-eP8?"`OQCr? <`np?˶$/?.3v ׈?Ķn~⾠K?Šƿ{?Ũgpd?`d8F^"S?>տ:?.3sh?HLٸ)?Րm?>?$tS?$5inY?IHU? V?H@q?DR?g?r[T?ƍɰ?e+?ʰ ě?R4?6?\лnֿˈeO?G 0a@N?{_IϿ8Ck?Q u%F? xʻD ^?7~+&,s-?x?G!.H?R-"8q`l?ƒ)JQ?v_حƮ)sБ?y2w{?+%WS?$LD|1A(o?: 07?]U\R#?+H?5Q.ǿUGZ1?|ؘͿ‰"S ?+jfϿcOJ?1;. D?SE ~g,?پLI(WhI?\|ؘ:v?ܑN;Ϳ&x?Zݘ!5`?WiJMUh?Ov_ح$tS?ƒ)J?,{ Z\zcs?v W}W?x>-b8\g?Ov_خ $ q?f'|E̿ /^?*8hƒ?r2Lo?Vei4?74tj~?2B Up ?h ԕ*EM`?S&6z@ w|?9D@% ?|0@Pv ?k]@`,?n@IO?r 6@鲀,(?{5@+j? @Q ?c4@bh?앿Ex@gt~?|[-@9.q@gj@L8@doEM_@\HjܱŬGG@);DOQCr@؃4CԿɯ{ @Ez$L(߹8@@!.H@84֡f@+ҿ#@-3 A!ǭ $ @`'RT`ȅ]r/@+U޿R*o?R@VI@L\=x@@6)IezVC@tiʜwkP@BY޿},|@1ˏ@,>B[CP@ldͿ-*EN@䏿ͽv@պ2LfQn@ >7ޓ͟@ CBcV@ cŗN`sWq@ "}yR4@ liQ֌i@ Ys·Ǹ@ JwrGE8@ #kЯ%;:@ Z<]U\R@ > xF]@ bhҹMa@ ~($ hb@ ,{2m@ _;dZӄv@ <ɿՕ@ I< di@ E>WS@NUOv_@#{ 2v@N1Pٰ_@@}=xB0@'RT@$=@ҲM B @`ԀuM@Oq!ݠ k@8YKnmu@ (x;:hA@Ҳu%F @wpy埿bh4@4[l7`07@V >l@̢a೻,@a(߹8@Y&A(ߵ͉/@6eۿuy(@^J82`d8@+}At>҈p:@KƧJ&@iͳ}ŬGG@a=1B؃4@z$L@#¿@jUp@]xPr[@ߤ?ɿE#M@At>>GNΚ@;ߏG0@NΚ,f@ZpdϪ͞@y`G^ Fd@Ev _@r2LfQ@g*\}@2 Ei,d@UDwFze@{&+%@Jnp&X' @h4.۵@G hr Ĝ@mǣڐ@n.-#N@A-_@6eǸե@q!Ksbh4@ NPX:S@0H@r gb@TߏG0;'j@@zRDߏG0@@bȿ|ß`@Œ8\h>'@$_@@ 4nV@9R4뚿O"@_EwUDG 0j@?h@ҿGN@5_õb@i}k@)rʫ\@ҿv@9+@]yЦv^ Fd@RKs-@X:T,'7@݂uVH@ =B ě@9ҿ L/{@i D e+@+ @;yRҿ8@s곿暕BC@,'7S#@o. (@`-2 F@LB)_@jM3H+@'j@RiY_@zGl&k@{J#:%1@/`VhA_F@Dg8~@uhs@Cn.3N @4I@A2^(c^t*@a>E@j؃4D@v ׈Q֌i@>'!뤓ȟA@:6CP=B@ye+a V@6C3H+@bοx@?8Rڤ*@%1BZc )r\= ڐݪy ?76f R / 6+jg|hrSIV2 Fohی&A׿RJ($ x_oPMUhǿәo.KCWGE84mv gwU'(b?q`l o {t?\¹N&k?,=j?Ms{t?,<^ Fd?Uhƒ2a|Q?-`T ǎ?E#M >BZ?OIH #Nw?P ,k |Zr?ިc^t RJm?s- $6e? Ev ?) ?O"} +?UqK _a(?uy( j5_õ?d3 :pd?[BEd0+@?:)yCk?\|ؘѢ?.Hd xF?FV2 6P?V`Wdo?ŻYB9?ũgiv?ŚA_Ek`kz^?ōͳ|8)?Ń;K?h?{tҳ~Rv?ulvK쿱[W?r(k ~?q6C-?r 6Pu%F ?v5Bͳ|?ŔO M=K^?08YK?؃4C:}O?Z1  ?ЕfNP?ЗO;dptqq?С͉11eәp?ЋC%C?ТaS?ϕgKI?N$Z1?p *0U2a??ҝe?5;OagbZp?*ި\|ؘ?&kȟ7ޔ?ѿT ǏT"?ZFsBڤ?sl&kJ#9?,k}¤T?Ƨ-3?wd: |?lDtj?Ҷn~Zc? 4n?& 7?t}^_4X?К,fWs:}P??Oq!?v_ح" ?eUſ\?e+adi?EcI{t?ʢpO4 Ri?&7ޓ?˵yh;:h?2mҝ&?b[6?̤~鷿܇Tw\?$_Zٿag#$6?'!Wh{_J?/vɿѢY?*0U2a|[BE?zcsmb͊?Y_a(j+C?8e`A7L?Ã{J#9R^)5?¾7ޓß`?9Cſ?>?|GD|0?+d8?nxl"h ?bb˧3Y?nO;#w?[W~`L8?†6&-v5C?9䣃'w1?Ž 4Y8}H??ҝǿ4% ?#cLW? VE) ?XOLnmpoiDg8?\|ؘ V?Dž}2fA?Ǜ]9o*ZF?g*dK)^ ?gSȩK?`N0OX?At>=ſ gb?ɆDR?g{ 1?ɏq!KsCA0?hJQR?:S&8YJ?ɀB 5B؄?.r0:S&?䣃'g_0X:? Nʗk}9?VtkȟA?8\h ѷ?'gM3H&cI?<e+a?wN&Ԁ⿱[W>?sGO`s?švݬ"`B?i}},{ ?[ Qm݂?Pƿ?) ?~6;M?3rSοصK?i4.۶,?޽XD">?jj% b?5IP?8K?vJ"?'=["?}A5T?{z?Nt?++%?-*EN?:v?oiDg?5*8?;'?.}At?},{?'>E?͉?%o]?/?+?m?R&V?Y}?/^ GJ? |Zr//t?do+j?*o?R&P?n~7~+?7`,4X ?2W;.]]?)`IHU'?QCrq]N ?Whp`?`Կ|o'=\?"쪹ceO?^?ײ@x?OBѿe 0?C-X6?^J82vui;y?fCݗ+j?/a(9?9P3:~?#S&¿wFze?xF]߹8R?1eә{J#9?iJA 3th?>BZeV?J-`*") ?^5?|?h?*0U2a|G?o.ӿc ? V׿3 V?owsKZ?ǎjo~=?vFs+U@P?f@ fI=?~+U@1u!S?>-b8@`҈p?>'!W@61?gt}@ȩK?-#Nw@[!Z?٩T@2[T?OLnm@fP?}d@7ɚ%?d&q@B9dѢ@">jMUhƓ@:`ul@t:ۿ4Ck@L쿥O7u@$ /^ @Ίqi|O@xİ@WSI^5?}@MUhǿK[@uO74֡a@Ϙs#cW@ <*")@ ~($ xg@+!Z&f@Iͳ}䦋@ha'(߹@6eOB@fA.3@Ǔݗ+g l@ݗ+9Y @DUGau@`:6P%@pj@'@Hp  pϿ@&z9 |@rq6胥;K@dƿ @f3ߤ@@R%1ÿ- qv@Y228@EUp @tj~JL@7&:p@\64T@%|p݂u@x>-J82vt@'76ο{ 2@2LfQ}At>>@{0 RiY_@>灃SZ@e;'𖑧\л@b#ᆘΏ @˿>=ć@͔a=1ڥ@ֶZ.4@o%@z@U=@:}OCN<@^iBʿ\(@DR?gپLI(@7T)~+U@ܗ{|E˼+@ i}ϠQCr@7I'>%zxl"h@e{{ 1@7~^)5@u)iu @!RѷX@&P̸ؘ@Xa Ec0d@?п)_@Gl7`]y@B]yЦ륹b@(9-//s@6;%o#y@4nF@j9m _*c@LWz/@;dZVD@th;K@͙Ev&@cOJi,e@15s@dmH׼wd@ (x8{0@9m ׿CA@ xhM@RQQ_p@5w1@қ(¿ @SMjeO @WCA0O@`sBZ@Ey3]$E@$1Pۿ@kp&0#̍@m\S$@ Z[W @Ez$LB\(@ ;D=@Oag#%W)@'#R-"@uQ.ƽ8Go*Z@đ)؛(z a~|CA0 B1Q`]x #ٿT Ǐ =Fkygt sx?) ,zxl9C S 5'j@ { 1ί% _!-w15Xy> BZc?{mRT`e?եb_?Q"?/ek̨??;:h:p?Y}SeXO?"/ ?хHL`?%ƢpO?C\Nz)_? N;?ѹbE#x??ҝɯ? Z&c?32kU=?NxVg?R~R9?p&2/Y?Vl!-/0徠K?gwYv_ح?Q֌i/o?OLnmnY!?7wʁ?#πܿ?bw]>-b?OQC~^ t?l<d2?8JY5;O?¬>B[T?jfBѷ?ĻLl oT?}keX/D*?ƁԪCk?~$?AJM++@4n?C\/Y?ȟh3`N?PHm3 B??>;%o^?!Wh?YJEKZ?rGE8|O?ʅ3ti퓞Ր?x?G7 ?/vɿNzVC?u:>/0R-"?+ﳿnmu?"&r]U\R?Y`?_ËY`?ʮ9C9&A)?ʑSy0p?jUqK?4m8䣃'g?qxB0F4A?2fpο /?ygt~1eә?cVi?J!Bty?-M@$>̾? 9&A̴i?XOLnn̯O M?9C̩7~?1o6̐>?l oTK0+@jU?La"}?A!Ɍ~($ x?j~"ѿsGO??K3?v5BحU?`l oTİ?WiJǶgw?R}A5Ǭq ?I^5?}ǣ?6&,sǝ-V?iQXǙo.?08ǖБ}kf?zdǕ-#N?uMUǑFV?xl"h տDŽ{?>WSWp+?x73+ ??>BZ&.?z$Lzcsl?7T7y?OX6?$_[v ?[Tп7!!?]ceXOLnn? =ۋq ?_IϿi?yѢY6?LPr[? [M>!?r ěՐ?zNzVNP?N%;/l5?i;?.h]kp@H{Կ @濇i-@ BK@QjhH@"S 5?|h@1;.*0@j@1.@뿸VԪ@D ^Q@ yЦv!~($ x@nb˧2P@.۵ܿǞy@5ȟh3@mU=ɏq!Ks@̍2t);@b}@~@8t}^@K}At>򐫴NQ@sG׈@{8 @ڐG 0j@K[!Z@ |[m@0j+ڐ@ d2eU@ Vi/n+jf@ O;d%@ )r\>;@ 92ʫ\@ lLYtCrq6@ <0ʘ5@ qxB̷Cd@ ʿ},{ @ ?`s;@ @xF@ ԏ6]\@ dE#2 E@ XŬGs@ #Է`,@ D|0p`@~-8Go*Z@/ws?@Wx-8G8YK@{쪸ο؝%@8E@C,zxם gb@BHGÿb˧2P@h5~g@ /#-#O@wsDg8}@α2XN,fX@~+UJB9C@K]cA@(zaGz@9|ßa/^ @\nn@=Fkhr @Y]Y >@3]$E'76@wUqL*@2{mMs@` |ZrQCrq@P1l@84֡!bw@Yv ׈@^)5\¹N@ z]z[W@u_ô2m@r@sWpjX@"`BD">@Y+ },{@"˿>BZc@>տGNΚ,@=%&q@vR<6s@pR-"@Ϳ"'@) (w3rT@h$ xGWsPH@M3H, qv@_o8 @(Xy=Z @j0U2a|d@e@̿%@Se\ı@5L_kv@z B5~g@Wh]x@p:^@Q>E@:э&\Tw\@ 0th@08>-b8@|JwY!~@ʆ6&G 0j ӄv!} ҿ{ 1ί% C,zxҝ% ((wN& &kɿ{ 9&B |Zr˧2P] `ﲪ^ @8e 7 ܇Uݯ#cW ]x?) ?>;'j@ E˼+ `TɅo w!<׿d S*0U2?ҝ /s}ӄw ?п߹bE &ڿX $t*0 `V64K mC\TK: CPs $tSa=2%1yUD>տ:S k6?{ r ?ﲫ{ 9?u gwr(?z$LD|08?xW)g>E?M> (?0,=ć m3 ?6 ]N ?]x /s?tqp E?4m8 ҽ<64?%5~g,? |XŬG?ʖ(r Ĝ? $?5~g[T?%9?5~gf/e? / 5\(??>q=Fk?iQXiY_?">iQFd?. <mRJ?P3 ,k?+a@3th?_ĿL?+ Jz>B?d7ck?K X6?0j? 4< ?QX'??>qV?Ck&7ɛ?i4/),(?2"?\?0s2?[ =!?m݂v\g*?cOI.}At?tqɿ[-M@? ᱿`,?B؃~<`?zcsl߿+?0tI?:~^޾?Y!~B?k΅4:p?ɾnpy,? ׈sbb˧3?M++̿ B?t}^_1䎊q?F4AJ7ue?Krz%j+C?bR%o]?ᛐꞿ $ ?MUhƓłV?,fWxIQ?Ȳ̷{_I?Q焋[-M?&f*EM?iBO"}?")n]r/Z?DR?gܿf{_J??>q~LX?HG ᄋ[-M?<`{ 1ί?r 7"?T^܇+ I?zNzV-#Nw?7Tٱ1eәp?CcH#x ?fI=.S?ʫ\崿*0U2? Ho'=[?!Bo??ײ~mH?O;dZ;yR4?nCy5Q.ƽ?p ?;:h?Gz?ќ ٔ? 9&A?ռUDR??٩?eUſ؃4C?٩T!ċ[-M@?8Go*ZGq?|ؘͿr 6P?a/l5?㮧GVWiJ?>lLYuIl-?İ. },{ ?@4mƿ M:? A!l*ZFsC?"~m&kȟ?gbѿD?7ɚZRD?ʁԿ2"??ȊG1z?;D=I'>E? (翠&?G#iu?8\g㿞=?sw[0%?߹8Rc4?N+7ޔ?//tJb#ᆘ?.@ɿ8YJ?Y5;m=?K D _?}o~=??uy?VeSy?f:D<@hۋq>@ ?vg@+8q`?#-#O@Sy3?]ce@پ?|G@+?}IQ @?hTԿ@%RKWCcHk@\ߤ@xJA c @v@ sGj򐫴@shH@3u:>>BZc@j%|Ms@҈pᰉ@VWi'|E˼,@*\e@@t[ 򐫴N@> 5_õ@If{_h3@qڤ>WS@4ӿrGE9@9bEƄ[-M@y_o~=@rGE9@(:)y@'2P]:@eU.rڿEwUq@v5Ck΅3@{m0#̎@5Xy=ٿ͗+j@t (wNOB9@i4 I^5@ gϤȟ@@ =,{ Z@ [-M% @ "p&@  /׿̯0@ tӄv@ ޣY5;*c@ :ҝ&&k@ Qտʩ @ ӎMj̺KC@ "Mc @ sgЖ2I@ NΚ,gѯ@  /׿ҷ,QI@ cY5;OӨg@ Up Ԁ,'7@ DM@$̢ۿlC@Vwpy埿ֶ07@7ׅQ@h3*iB@ ҉Sy3@Ѣ4Ck&@:$LD|.3@ri4$Jb#@A!ܐ>@Wx-GNΚ,@݂u8q`l@/aޑN;6@NCy`:@nvݭߘR~@d> @$_Zj.r/@ؖ]cA @>'!1zN@!_E@D= 4@hm݂v@p&ɿ`,@ 7" 6P@>(PܜN@D ^>BZc @⁘R@˟U=0#@mC$@"}㮼@@I?) E\|ؘ@pW Z[)@m`H@mhr Ĝ@fffff7ɚ%@ ++̿P{@3:}P2 F@X%[[տCk@|X%[\ײ@I{tʂ@]v"0@($J]x@s*c@@98KZy@#IOQ@a|QYr@ı{ 9@@u!k&i@dg;L@buMU@/^ $@)INe@a Ec">iQ@ _@C`O,]N@hKHԿ~m@3 A!@D)73@ͮ>lLYB@333333@>pȿ0OX@vFWhI@6wpy埿画_@Y_ڐ@D(MRv@a=1VWi@/ek`A7L@2{5@+ʫ]9@Xtjp:~@RK-V@EmRJ@.H觿'!W@NPƿNP@?8RcZ@o>'d@m\`@hI@28@ k~(٩@<`CV@mqbFJ@ &q׿GG#@ ٩@ lC臨M@hb5@`wkP@Z1'gT@&f@sPHzX@O䏿 gw@ ӿ 4@qxB1pL@D(M0 @<Jw8Cl@zBCd7@sIO@B0&I@8a EcW+@y]N .ǹ@2mh@uIb@Ado0 )@)k$')@hH8P@ôrNP@Zy,'77 9CſF^"S mۿݙXdE 59Y {wF{6C- ]uނ" ?SP , !7,R 6;%oVCg ߘs* L/^ G *cP '/ m(F a EbEv @//ta J82vu|o'=\ .]]|G uy)௢Zp /z@d HĿߤ? l{Fs GQ֌i (h3*tj }3+U:}Oʿ=1oxW*N;5XyQ?|H .}A?>WST~?  x?doal oTL?}At>mgwZ?J#9D;?+.3?g m\?`]x pa?Cf {?pv ׈?hr Ĝm݂?-"f">i?ϓ D?Ϟy%zxl"h?2I?I^5?}GN?ß`O,?ۋq ,??hۋq ě?ǸզCQ? qu'RTa?z9JE?D~?'(bM%?˼+@/^ G?ŗNek?[S#?Ŀ Q?Ĕ{sպ?лnwp҈p;?ŋ.}Aʁ?M3H+F]cf?ɉ7KƧ ěT?k~($o'=[?[W>6z:э%?L0J?d%o^?޽XQ֌i/o?]ce&k?I< VWj?uX?ɰ[?ҲۿQ?]x$TɆ?g84֡?7~K?|Q?: "m?+Uگx_? 4\ŬGH?`A7LJ!B?u%F ěS?QOAs?.ƼS;ȴ9Xb?ȟ]scsl&l?>'!WfB?!Bo{z@?ʫ\$VW?bw\ÿQX?laR*o?_1P?2"٩T?B 61f?э%S۠&?0ƿS0?m3 A!W'?e🔅]s? M:홄?ˎj좇~m?ˤȟ@bh4?&꜡bx?ʜ}At?nwpy?ɉ7KƧf;?皪:э&?ȋ[-M@uMU?ƕᰉvȴ9X?iBx?|`sW?p R~?Ô1zNa Eb?Krz%EM_?+˿ޤ*?eәo/s?m?>M ?X Fd?<쿱[շrG?^ s~g,?0uy(?#-K?u g0#̎?SϿ#̍2?Z[(ѿ}9Y?O Miu ?Q֌i/oM3H+?6?qbb˧?p#cV?a EcG#ρ?쪸[ćTw[?ۘR~ǂӄv?k Ev ?Ԫ"C,zx?sBY޿$Jb$?<*ÿ(?GzHuy(?k~($Θ5?m݂vΐNP?^J82vu}2f-?p&>B?Y =>WS?Jw|a?y4֡a?"0#̎?27ɿw[0?a=1eں?;X?y(ӿɯ?MUiQ֌i/?x?)mqbb?Hotj~?ҝ%߿\?bȿ_Zjj?MÅQ?b@47ɚ$?!./s?vfCcHk?'=[d9?eڹÉ D?[òV?OAsQ_?Zcmǣ?2K4s?IVÜ[?ϿTE?r 61P?r[U@x?>//thA_F?bM&?` ?vȴ9E?_Ŀ@4m?9.<`k{?]k;=r2L?&Ԁutc4?>//t*?/s?/Vϫ?{俬[-?LXb}?kz]z.}?`A7m@Q"@)y ul@LS$*@FImpuO7@>//@|ݿ1&x@3Б}k+@W}W<@}sպ@[(ѿ< @ju%F@ w[02P]@ XUB0 @ sPHɧ\лn@ `V;<ϖ@ rPH@ `VԪQ@ \$|G@ &ь?@ K$ pпғtj~@ 6ҿ~6;@ mA(o@"8jB@7T7@BFIm?z@xvFQm݂@[Tu@p:~dob@+yP1;@g:pe箧G@W}W6@R@t}穨g@˼+ٿR<6@TɅoix@+jgjfB@\N<=@A$5p =q@eپM@y+@cI{t\N<@tj~냐B¤@6FDUG@ѢYa=1@CnPW}W@gnqiB@$}2f@ ֶ[#@ʫ\崿?) @{ 2u!@$'пם gb@)klC@1zNJ&@T!D(N<ϕ@z^5?|8 @ѷҝ%@Pr[(@쁿qR~R@#f@\@N*)tݗ+@{dZSa@O@3)@Y| 6P@ӄv>E@0'RTq!Ks@^np&.]\@k΅37Xe@fC9.@CPu @'(bGOIH@C<޿:I< @- qcOJ@A [ŬG@ ʫ\OQC@(ۋq 0 (@61},{ Z@Cɥe@ohۋ3H+@iBʿb*@'Y򺝿D)@`az@@BCH@q@%F LҲ@tqqG@L~-8Go*Z@^yR4@sջXdE#@bh)@D̢ۿ\7ɚ@SXy=@wUqLБ}k@(b>K@I{ k~(@^R~R@`l ou@i/ngX:S@\쿱[o@`Oҝ&@\$C`k@4hM׈@~7ޓR~R@> !< VuoTK: s#x ߺ4Ck' W}Wy|ß ;dZ$LD|1 灃Fs QRg#$6e ̢ۿ&I ̢aP jF¹M Eҿz9 j{/ K3zzG +@jU-*EM {{E˼+ %|[6 KHԿp =q qp_ zdؿ\( eU.rڿ_ô EM_#π (9-*LD|0 vi;yS &5 f> a}?l7`]y _Ë?*0 ud0+?hƒ7Kƨ?D">j[?KCVt?z`V. Lǎj?ueU.s%u?qUDR? ϕ?kIV zG?e7~+ @x?^Ov_ح K3?S*0U2a Xmqb sG %F L0Q (\) #cW3)k iJިc^t MPjX VБ}kfQn *v5CQ+ 9YP07 ܜMM)r\= sFH@q u?A [7"`R~~'!Whƒl&k?ohی9?ҲMh$ xG?8\g*? 7!;D=G?'!Wh9?[!Zq?_ôu:?<Dvj? (<64?P1;&?qp?>WSXe?D(Mhƒ?>//tu!R?ΈzdBej?zNzVC. ?Ϻ Bɠ'RTa?H@qz`?Ck&@,'7??ײFkw?WS#Nw? Ev}W?ƤkѢY?fQm݃u%F ?aR*o?S_*c?ɧd%`A7L?xB0ł?hHLP?wpy,r<*?)k6M?dE#N9C?%o]K^?&i-:S?shc ?Τkb?&V@ĻM?*0ߏG0?8 m?}OBJȊG?iQX([(?;Oag#%wAJM+,?tj~?d+!-w?d+K]d?ÀPƿ}ke?ý{ 1ί7?nCz [-M@?8Ka{ 9?gJw|?*o?R&R}A5?7ɛpd?)a oTK?mqbc?Ieh?P](>?@&łU5?Zpg-"?{ſLfQm?Ѣ5?|h?MԿϿT ?Tw[0cV?CPX%[\?K]cAFIm?F]c}޽?=B8J?Xe}2f? qu"? 4XͿ!RP3ȴ:?u:>/UqK? RiY9}?B؃ᆘ5?j@Asbzcsl?m3 A!?R}A??R&V? ?ᛐo?stj~?ΌD"<`?$'(zxl"h?zcsl&Ƴ"?)^앿?[TпK?"쪹/ek?/l5"?z9Ϳa?Dm?d7{?x>-b'gM3H?B¤T޿7ɚ$? k~(KCV?nY_IW?퐁>R&V?KHӮh^E?҈p:˧&?!5`X?Mjd=?$tT?|hs?^t)/0i4?ڹu%F ?VeI< (? sG%!?81eԿ|O?,(Zjj&?_oҿY2 ?&cr ě?ZxY@$%1G 0j+@@8_@@V|Gؿi@y8qaO#x @kҿku%F@ߟf}IQ @},+@NTʿgS@YJؿ"/@9Yʁ@inX/CV@,Ԫ"5_õ@dJb#ᇿd̢@(\I< @=Ć@ ohۋͳ|O@ ;B؃4@ -s-@ 7UqKCrq6@ W}W\N<@ êyҎ 4Y@q\(@41[!Z@cn.3`@~MI'>@Κ,f@p:eәo/@]yg˿`A7@HQ&V?@Ć-˿P ,k@&̢aB0 @NA c PH@u$/݆5@1&.S@ÐB¤Pr[U@靈;D޶n~@N&Ԁ/D)@1eәo߼iu@S A!l.Ǹ@sDR?g@&s@IOQE@*"'@O;zcsm@ f'| P@ ƿ!-w2@1`l ojj%@@ $ qiB@TTOv_ح@oIVȿʫ\@UhƓ-w1@M:固 @4֡a @\=xvtc4@AJM+,\@>|ᛑI< (@iֶZ)r\@s*th@[BEY =@ @ :w찞8@*F4?z@LicOI@rS&L@},|a Eb@òVQ@˿wkP@Tտ[l@C^t)Ks@nƼS;@u ﲪ@a(9.,>@vtc5z@Km3 B@J")}H@vv ؿr/m@˧2P]@RJ˿(b@󉀲B @"T~~=@K$ZfC@tPܜN82vt@ (M@xB05B؄@OQ~@_^"S@$*9.@VSP -@LPr< @7ud,@p /v@"S w,@Y¿ ;@nY!5@X N&Ԁu@3@X'?@Yɿ#@M1z̿j򐫴@)r\[W>6@$ud@ C= RiY@M }3@@98o~@_ô!R<@VCR /@\@\H@q@271'@u%F}H@0 ě`kz]@xtja@sણ_ Nڐ͉. 4ߏG0  ; |zcs:э%?.< $??laR*o?3?O"}İ?$5ie%1?>iQYc?m2ϕ?ܱF^"7Kƨq\лnkPhiQX(ŬGG?ШTɅ qu"?Y!ڐ ?¤T~u:>/?tj\n?ag#$6 V. ?)^_I?Z1 x?)?τ#π: RiY`?ε '02?j%|:?Ť^ NI< ?ƌL_4\?ƚIf{_n?ƒ)IZ1'?:~!R*o?S?́`?gSSe?,<t9XbN?YY0 )?j+a@?&IQ@P? DU1.S?Ck(J?{5*[l7a?ʁEY2?3)k ?ǁ0H@{?ƤTɆ[ /^?ҝ%F?&x ?ïd9Vg? 6PJw?[kϿ)^?2^?ZqxBT;?(9-*f?Ɩ\лFs?CcHk1?6C-:S?YJؿH?sֿC`k?4.۵ܿ.r?QCrqgn? ěT`H?FIm,Q?+jտtҲ?S+jf?$_Zj.H?T ǎkzG?%[[I{t?8\g*B ?n/ӄv? 1ί%E?9䣃EwUqL? ZY?4֡arq6?ulvKa|Q?ᛐou!S?KCWM?Ȇ-ffP?u]9?p`Ne?ί%;,w[0H?;Oag#%FV? >u!.?FIl.wN&Ԁ?DGZ1?’S&wY?nO;f3? ?xF]d؄??' xW*?iJA D _?Z޿#x ?ӿVH?qbb˧ϛf3]%?g /?1&xտK3z?iJA ŗNe? /#$6e? L/{~=?Jw| ,k~? gw/{J#:?D ^9_?QQ֌8Ck?e+a?LI'?As?i,?M3H+?,?vj?߹8R RiY?>'?<`δfP?y=bϚ3 ?\(ɚ$(?haڤ*?4.۵ܿ_|?s곿 x?D(M[T?پsP?Jm3 \|ؘ?Y $ p?Րڿν<64?tj~ۿ B ?vFv ?QCrqo?)> { 9&?j򐫴B؃?S{ݿ|?LYt[[T?f@]hƒ返yQ@AJM+)y @r 6?@ niY_a@CyD@|pd꿧KƧ@U\R.'>E@̷@73$tSM@G0@9Y5;O@~7ɛ@?a=1@$/?l-@t>=ć?T:@tT?ҲM@}OC?ou@4qph*0 @mw1~L@әo/-V@?ײ`V. @},+@P1;⿧(b@ 1.@k΅nY!@4);^_0@*C\N@ eu:>/sջ@ >-b9ߤ?@ p 7NxW@  łU6@ `kŵ͉/@ >鷿Ʈ)sБ@ wUqKǺ4Ck'@ @98лnwp@ ߹8s@ !LA]9@ ZpTD*0@ K:|Q@ <ɿθ1e@ ڹY7 ܇@ GRCЋi;y@ *0 I^5@ > T!D(N@ z@cђs@*o?R&k@\m?`d8@>E)^@ ͳ^ N@ =B 6P&@Qhr ſQR@mȿ׾LI'@o5J6&,s.@*L_ڑN;6@\ ۭٔZ@@ɿ܀,'7@t)< [6@f'|ݪ_@HĿ6;%o@5.r7ޔ@W%םpO4@x}H{@3k @0@՝yh+@x@ ǎkᏰ @%SQQ@,x?d7@A앿E@OmrO"}@\hr27@p- q0 7@`0OY@Jw 9&A@nCyx@v p*@ eTw[0@(PܜѢ@I.}3)k@k$磃'gM@uy(ʿ]9@^)5聘R@T6Y@6 X6@JL@@W}W?@ʖ]3H+@ƿ Z[(@&]cfM%@m}^_0@},ŬGG Jm3yU )y6;%o - Q }2f:)y vοT`d Xm uh⅜ Y^ ty =ke{ E %2pP ,ۋq =BSP - tqq x_[l7`] M;G0@9 $ p;Oag# .r0}At> "#¿zcs =")n f-b9? pp?_FtLB?{0$*0?N?CYuy)?Ƹ1eԿ7Ȋ?I{tӿ)a?VtݍyЦv?(߹9TK3?vݬEb?% 74m?"m?//tU.r? V臨M?>-b8E?9&A)?ʴfPcHj?/]9?Fzdؿ;:h?1ί%􂾋i?!Bop ?ͅoiDg%?m3 Bxl"h ?ЙZxz?Иa s?ЮGb.]\?4nXdE#?;'ƒ)J?>'!#?΋i;yR~Rv?ɥu(?;:hA,'76?nO;?4.۵ܿw[0H?ϼZG0@9?WhIE84֡?˶E6P%?¬2"@cI{t?LfQmp:? CV?ĵ?dob?č2"cI{t?:~پL?W eA?#x6fI?dpy+?õIHUڿh3*?_ôrҬ0?py+ъڹY?ԀuM%1?mqbb̿}A5Tv?SeXOmHQ?>Wͳ|?,<쿱ŗNf?r(¿8?E˿?H+[BE?_ôr˒:)?PH,-b?ʀ,'7?nʊ??I^5?ʕᰉ?pOʡ!Bp?n.ĿʦL/{J?m\ʖ\л?+ʫNzVC?H@qɉr ? !laR*o?\ƐNP?&ōyЦv!?r(¿'=[!?ĿֶZ?PH-w1?3H+輿R~Rv?]:{tҳ? V׿ťu?}ke.r0?7!?PH ?;'j?+ ~п"? d>BB?: B2a|Q?- qQ? gg ?aGzῚ?Κ,f@98q?//t?d2n@8B0?N @M|?E@wd:?Go*ZF@tq?v-@F]c?`jX@IpaUGZ1@>'忔s4@]9 @] 0j+@SPݿffffff@Le+@7|@Ԫ`s@l[W?U2a|@aev@or?"'@W?Ǹե@U7~?l@]s?T:@ިc^t?8Ck@JE?m>'!W@RT`dÿf VE@?п<64@<޿(߹8@:hA{@3w[0J82vt@k8q`䎊qj@+aNΚ,g@-w1ſ,d@&İ27@OQDGo*ZF@ +1;.^M@ %F LjF4@ <1@ 1z̿7T@ 0`e+a@ l?"}@ 㽿.Ǹ@ ygt?) D@ hIT ǎk@ OB9m3 A!@ *)̉'RTa@ ҝ%ĿͧKI@ *)sD@ 41ɚ$(@ n.2ʿU5Q/@ `-Ц/e@ ѷY /^@Ǹզ@Fx>-`l oT@{:hA@-Vn~@돛]Q@'dB؃@fPty@F4"`B@1f!5`@'K]d؇7@\27.H@JD@5IPOQCr@G:}O@24Cc@X73ރfQm@z'(b4j@[(ѿcHj@ QX'@>-błV@O;drGE9@r2Lr2LfQ@3ȟ@ם gb@NxWBom@d~鷿$_Zj@r(¿' @.H5@'(B1@?ײnX/D@[W~ިc@G BZc@~鸿-e@)$')f'|F@IHU'Q@ke%'(@nmͿ`@zG΅3t@ǿ>P3@[W>6O M@1zO pϿ@69.O"}@X@Q֌i@{XdE$ D _@#~LX@hֿ*1@VI>(@`k{菰 @d9cOJ@fP}H˒@9 k~E @Z]yѿ)r\=@|pddE#N@ʖ]v @gw^޽@ǣ 7~+@}3*o?R&@[GNΚ,@p+*EM@9XbMӿ(@]E˿^t)<@vj@x@L_Yr@SMjѷY@0#ͿeK@%}26;%p@N%; |Zr@w쁿8Cl@If{_2"@@ȾԿ%zxl"h@1;x@?FϠQCr@?W}W+@jU@d'($@?) `@ 4YZŗ@HoȾ@7 ܇9_@#a@@8y=cu@[Y疿T;@8Ck#x@f,<@ˊ\$z]y@:pd@}g@W}W4.۶@ɚ$)`@N_o i4.۶@mH @bο$')@#(jF@-UhƓgud0+@f̢ad7@ﲪ,d@J#9)^@ZIh#@Rϕ$ xG@s|H@3H+',@ >WSfA@JԀu@ҿM3H,@`(mqbc@ =BjUp @LcA \Ww@O;o@m݂7+@֡a}A5T@XʁԿ@<64ᆘ5 W>6z;Oag# 1ڥ^ N cI{.}At r 6F L/ wUqK[W>6z ] o~= C$/ )/nK +Jm3 Y|~mH doaX J!}9 Ӯh]پLI !5 >lLY m_@ Z1Ӆ Κ,f̷D FIm¶ZIf 7M>! 灃x-8Go [(ѿڐ x>-n ě㿴? ͳ|hM k ~пLD|0 Gzxl"h $5inXL $={{ ۥSϿ8K 1f+ʬ 5Xy2fp%F L0?)^ e?eںK[?.r0fI=?h/4֡a?NeL?*)`k{Y 6?߹8RY_o?1&(#?Zc QQ?ΚIf{_Ŝ ? BMj?:}Oa-w1?bR.VX?Ϧz9,]?쪸[;D=G?q73?=K]7Kƨ?gM3H,ȏ`?ωa=1m3 ?ϜbR-"?Q_^J82v?kXdE#C,?wAJM+,R~Rw?gSwk;//t5?_ZjjRJ?q thM? Zty?mH`G?"SP_F?/eku%?PܜNߪ?ȏ`Vݑhr ?Fg5?@~[W~?Цv u:>/?ĵ?Nx?NTʿL@?B1Qվn?B1QԌD"?QCrq7ӝ;D=?s)ܿ}?{5*8 X%[?ʁԿZIf{?I< (ʖ2I?D;mqbb?<`??nO;?tqɿ޽X?Jf3? ԕ*灃?JM,=?˥;KO"}?SeXO?m?6;%o?*cO?D">?fQ.4?ݖБ}kfP]q?1eәo#9?WhIЗc^t)?Zjj&Ьh?,zxl"д:?s곿кKC?̷Cоau?ꢜwkQTɅo?}ӄw")?[!Z")?=Ć-˿мpd?"&qУ'gM?Y!v ?!5G 0j+?G)^ e?Zݘε^޾?=K^̫`kz^?ǣ ֿdZ1?C,zx/ek?퇽sPH?[W>6z0?If{_6&,?쿱[WѷY?Ë`)Ie?G 0/ek? d? ȊG?C,zxř?RKŮ1?$TɆѢY6?J- ?2Iv?sGyV?ӄwŦa(9.?`>=Ć?T~K3? RJ?[7ɚ%B¤?z9ͿmZ?҈p;?WhI? RiY_?*\}?_zNzV?6F ?s?7T7?3mǤ?iP3:}?'gMf VE?@N%?l-? ⿘bM?^޽?8\#?8' X:S?.H觿 @d.@!m@+?@~? ?^ N?Xy=?x>-?$5inY?Q@+ ~?P ,k@h\)?D@[W??HӮh]@nh?w[0H@Cf?,QI@-b8s)@/ @2fKC,z@sg lAt>=@y}ѹbE@&qHG @Կ v@V"Ӑl-@f3GXd@jk΅4@ yS#@0#̍#̍2@^{؉f'@ŬGUGZ1@ق_zNzVC@%[[տܘ5@KC]{z@uA!6@|ßaz9@kP|ߴxB0@ 6e @MaՐ@LWR~R@7{Q@U DNP1@p$tTQ@Xd\$_@tc4sպ@؃4i4.۶@$5iE @ǣ :}OC@SP ,ϿLA@ Կ [T@*")omr@K`kz^/^ G@lNxA [7@yЦv!9m @T;a@|ƿ瀝IQ@V߿k΅3@hMY =@6ZIT ǎ@YC4X @| BS&@YɿD">@XOLnnҲ@JA c3ti@QοjUp@ ,PH@ tC%@2B (np@_mȿzX@:э3]$@7U{z@dg8}@Y527Ȋ@^ݿsBZ@&{_J b@J9m h)Ie@q 4s@P3:~䎊r@puOtc4@x^ȿi@+Q@9+ҿ-b@T1m@D _D@d,h@ gX:S@0ƿ-#N@fFs'j@@~+V74m@{xF@9mdZ@L!-w+ʬ@եE /@Y¿!R<@`sXٳ|@:ݘ(\)@vȴ9X|ß`@@N8K@^ Fǿ5Q.ƽ@,sG)r\>@ha @3tizd@~|>'@tTi}@W.Se޽ =[!Ҳ  *ZFsC xW);.]] `KƧ H9XbVCg 16;%pVWiJ vȴA c S Xdm3 A 64e ѷX*EM` #*cP8J r{mٻ $ hw[0 wFzegwZ 䎊r x ^ FeGo*ZF '(b* +cV !BD ^ ǣ .]\ ӳM ?¿gb zcsl& pnC&c N!Bo翺 +ud0+ASy uO7u 4Y  8 %|pu%F L 8Tw[ 檎cIm8Y y|ßNxW ty,<쿱 u׈ٿwd9 e&ڿcA \ L9} p*ؿȩK '(?r+tSMj?H6Fs?SP ,$? EbszN?¤T~m?,{ Z\($ x?ulvKx?? $ qZu ? I^5?()Ie?X;L?yR4|Zqx?Ϙ @//t?Ϩ.ǹ?υQZy?ύO;dZyQ?eU.rYLI(~쿱[W?l!-t[l7`]g#$6cUGZ1)r\?1+v[-?gֶZI@٩T?v /^ Sy?ɯ,=Ć`H?IOQDhb?KZy:>/0?@xՐ?ʒO"} V?!WhNe?̠- ȊG?gS;L?̧,êy?̥&ڿy2?DUGZ2*:э%?Α?J?Ϥȟ@nX/E?lvJ#%o]?7!<׿Rv?ѾLI'pa?ѾLI'Oag#%?x^  |?z$LD|S#?ͳ|,QI?ҽ RiY{?BFg?o]UA7Kƨ?ӏ>'8R}?wpy,7ue?Y`?ѩy}xF?a(9_حV?2_'(?H᧛ ?ɺ RiY`Ie?w\¹JL_?ʹMaQH?{ 9&Bڪ"'?ɅoiDgx?Ǻ4Ck'ӄv?(5B؄??gFs?X' }H˒?|ß`jUp ?Ń;KӖR<6?łU5Q҄?v5Bٿ?F L/Ι0 )?ķCd˧2P]?mHQȕ*0?)^ͧ\лn? (wN'ʨc^t*?[W>6zŬ?œ ҉{5+?ʧ Y|?LWx, ;a?($ xGh?f k~?/m3 A?Ash?kvÿD*?JnЕl oTL?y2GNΚ?u%F ͏q!Ks?lC򐫴NQ?hۋq C,zx?Y!~CV?QHĿ$ p?IV`+ I^? ٔ[l74j?𜡋bx@NU??FNvݭ?񓳦_o?ڐrz$?7KƧˈ+? bˠQCrq?95*8?SϿ?9o5ҿܱF^?a@ş?Ŷo5J?2"RJ?n-@`>WTR}A@$5sl&k@ ׈S;wF@ }ulvoi@ FpOQQ֌@ |ZrjOv`@ s7 ܇ҝ%@ EwUzN{@ 6z{0@ 9 ((@ s,@ ZF]c@ \лnֿq!@ !"Sf'|F@ Z,<sh@ A5Tu;L@ e@̿Pr[U@lvJЅ3ti@:/Щ @oazNzV@ҲM9m ֶ@]ceѲ,'@> ;@OԿ wpy@ڹYud0+@@Ƨ-nCz@_Ë}At>@!g#$6Ս@Cx r[T@j[Bד_ô@KϿ@ڑN;6@FkwnD@[nCzeU.@Wws@y(ڿ޿i,@f:z]y@-*EH@Uty@7ʁgT@W =p׿.3@u፸@Q1@cI{\(\@wF{>WS@`-73@py,@~@ȿ @ :gߏG@+NP@K0U2a|@l_啁$/@%?z@ta Eb@bM2 F@s0#̍@ xR~@6 QR@Xy=ck]@{wF{䣃'g@޽@4m@N2"@@2W?F@ם gb@ ^GNΚ,@0*,QI@T`d'(߹@xf:0 )@F^"3)k@x>L/{J@iBĿ=x?@r Ĝ%!@E˼+)4@j@[T@R*o?S\N;@ s-@B;yR5' @f3]$+@{ Z\)r\>@O"}ꠥ&@"쪹)y @|{@#NΚ,f@GdVϪ@kyd2n@[WA!laR@`>B@"?S;w@V߿Ck&@xB0h@0>ӄv@OzcsF]c@m=9.<@O;dZVe@2"UDR?@ǿ;D=@󳦋ynD@UqKэ%S@@q$LD|1@jJLs8q`l@sg (@>iQ8\h@aJ82vt@ 'RT` qv@Fsջ:@{wF{S&@KHӮh<`@˿>'!W@Å}3vݬ@>BZG@0X:TirGE@Zs-ѿK[@s+ J@ĸ{0vȴ9X@z9@.zVCPRJ@bh4D|0@DT!D(N@lD$')@o'=\i/n@.!Bo>K@^Y5;Jw@N&ԀϵIHV@ӄwzxl"@&i]r@hM:@FgxB0@s>WSlA!@+ʫvȴ w,$5inX b}+CB M|$Jb# :э%пuy( ,hͿzxl"h (Xy=! 4KU'(b `V[T Fze]q" .Se\g* vXy=c U{5*QR 4$_ZjHjܱF /l5<쿱[ 䏿-*EM 7ޔ# B1&x oiDg ѷ ԊԿ֌i/n Vϫ'RT` "d ee$Jb# ?wd:z@c S;g V߿\ <쿱+@x G ǧڤ+ (#nY + x n/Ą R~RT ӄv򦿾AsZ޿m?>sb˧2P{e@y@qIeڹZ D _m\Y )^~aub}V3(n9}u 5~g,2mWhIb]yЦ:э%0ǿ7}^_1. <mHp٩Te[[?uMUi |?~Y5;O2 F?ʁmt?sBZn2X?ejʁ? xo*ZF?f:U.r?̺)_#OI?X?J"qڤ?Ξnp&>6;?v \$_?),(GZ1?υ}2 Ebΐ5IOJ"_@gu%Fᰉ'Rʫ\?Ѣ-#N?fI<@N?Ŝu"OŬ?>B?ud0+@O;dZ?ӄv򥤿n?Yk[-M@%? 0j+-V?؃4Dn?L@}2?NeIڐ?Hӿsh?Y`Ӯh]?6&,rz$?{0$?Ӯh]k ?"&E#M?g $ q?º`m ֶ?ŘJA cP{?r[Tr2Lf?+j_|?Ȗ₿2I?HU'(?׈ٿ?Ҟ?ɯ{;:h?ί%;?3zNSn?ϋ`k{7 ܇U?zN{lA!?СbwĿfB?pO c?ѵIHUڿ ?4\V8YJ?҂@4nNΚ,g?Ҧv v_ح?Һ6;% ?k}:PܜN?am?{csl&l?9Y `]x?`]xbb˧2?ӛf3]%QR?7 ܇Tb}?ԎcI{tTɅ?k΅4sBY?7ޓm?>?ҟvȴ9+?zcsl߿#?ұmAs?Ŀ 8?D)"m?f3]r\=x?RiY_*0U2a|?Eҿa(9-?ǚmnwpy?f3կr?ȅ]r/?<`.H? Z[)5Xy=?nVX333333?S0H@r?< (x+?'!Wh&A(?^ N!Wh?B1Jw|?슆6&tҲ?g֢]yЦ?B؃?qp61f?CP[!Z?4Ck'̉LD|0?ҝ%Ŀ\(\?fA׿[0HA?a(9-]cA ?[BEa?Up hH?NexW)?]swd:?b}nCz?ȟ@ЇǸ?7~ ? #y?[ pa?r\=xsPH?ﲪ9ĀuMU?٩T!u:>/?HU'(a=1?[ 2"??>BZc 1zN?6%ٿPܜN? N˿p&?F]ceڹ?l?'/V@9m ?fI<@Ҏ 4?a@Vu?/Vϫ@Jm3 B?ZR@VE?ߤ?@c Sz?iu @.Se?'(߹@LPr?L_@1ί%?Q֌i@&:?qK@5?|?Ϫ͞@DCA0?>=Ć@Nx?eU.r@|Zq?]s@n/?r/l5@@)kǿV"@zC\ѿ~u%@Ck&{@3CcH@(>տ?@a.H觿?>p@ߏG0@ᆘ5@.rFzd@T ȿ[BF@IB :}OC@ѷa@PH@K οH@ Y@xӿ3@ 䣃'1;.^@ `A76;%o@ {aп9C@ h3ƿ@ 'X:SQ@ eәo/%ם g@ @N,QH@ ۖ($3rS@ f:S&@ PRJ>LWx@4% y=b@j")Л(z@1ί%,<@SP -1o6@E6;%o@\NW'@gߏd0+@j@T^m@Ԧv @:э%пTK:@[aпL_@~?> 7"@:pe'76@7ɚ%ٟ+@쪸ο0H@r@`j܋m@SnݚBC@]Nu!.@zN8Go*ZG@P%EwUq@6 /׿R~Rv@Vafx@v ׈K]d@XdZ1@<64G 0j@>*8 @░\л@fWxQR@@>'.Se@NPƿ{ 9&B@kvÿzNzV@4`dD)@Vi/n%ם @x앿EbM@nCz&I@zN{ܜM@ݒY@c^J8@#n.3/v@F '¤T@O'=[D;@s8Cl屯:@ӄvCV@XdE$挽D"@L8s@;'j%|@*#9ڹZ@ӄv򥤿ᛐo@ȟ@!5`@% D">@1[W>6+@x@TT~@xPH$6e@$DGG#@ c S:pd@tSM`A7@-"׿oiDg8@) Z[).Se@IlD`V@iOQDul@2 FFg@ŗNfwFz@^ Nߤ?@!BpX6F@iQYD@ $'=[!@:9`6&@ZKC̷D@{SϿD|0@"`V. @%1#c@)^ 8եc@u:>uy(@>?ײG#@j8C @< I^5?}@ŔO @XcHk@%o] @Q6Ev @ҲM{5*8 @/D*_@@:1zO@C,+@f:ag#$6@aR*o?@Б}kf{@@,}޽@hzdOk}:@π3r-Y@Mؿʂ@;Oag#@s;Oag#@'y+@N]\ʿVԪ@v#-@˒:)ǿ^ N@ܱF_rNQ@+jտ12W@'d,>WT@Y0 )@&@Z[(n@Hj˒:*@{ $ q [$KI PgTD) S]97!< r<*ÿKƧ E 2^߿u%F Rm :N5 R?gܿǼwd w\ÿŀ^_0 {0uKۡ 9 + jyûײ OoõIHU 3պíl5 Neí $ Dë!Z ۺ å;K 6̿Üߤ@ :}OʿÐ ~//tÁ ^ sɿpuO7 >au\лnw }H̿F4AJ !~|-M@$> VWi 4 7!տ? L_4n rSn{J#9 Ō /8Ck qx |S;w9. W#d= 2,'H YT!Dm `,ÿȭ+ / h I[W~1P IVE'/V LXŀ^_0 Ul oTLĨ> O;dZY '76ο=K] 1;⿲nO; 8ClSP 8)|J1zORS&nJwU5Q/FJTԿl[W?i/n!BoM3H+*") ŬGHYпR~RRp:1&yE pɯ 4?hmqbca@N?m<*"? ٔ[l7+a? /^.?M:w*1E3ti;<ϖ1zNЦv #¿`VԪ&xgwZ`s?!Booǣ ?laR*o?=?˼+@ (wN'?+ʫ]L"`S#IVLnmͿzNzV?Flj?!-w2Gy ?Y_a(H?Ǿvȴ9XB0?ǥ;KŇݗ?{z[=K^?ǎMjDR?g?8q`l6P&?ȊԿ  ҉?ȩKN&Ԁu?%o]Yt[?&V@wCd?Fs4\?&V@33333?y C\?.]\g-?`V. )y ?{_IϿjOv?6F7k;B?wpy,%?Ev .Se?ª9m ,<쿱?4֡a ě?Q i?/vɿS;wF?z9Np:~?π3rӎMj?nje@̿n.2?3E?ȞD$Jb?<64TE?Cf`?ϧڤ+(z?sWpMZ?Lˇ?ўՐ;:h?҄PH?fI=7-#N?,'77VWiJ?Ϳu/ej?+% ě?ɯE?;'jݬ?;'q ?;'j}W?<64yUD?ulvKc ?@?[W>6zsWp?7ޓ/D)?ӄv䚕BC?%o]y=b?D ^_@?ӕflC?//tT ǎk?K3߿B1Q?U\R.?~6C\?'(bej? x[[? ~Ǹզ? xӅ ?&kɿфvj? >l%ם g?0+@jUκ6;%?ᰉ'?hr Ĝͻ $?OX7F L/?SeXOc4?«\$QQ?nBom?>6zӁ0H@?䎊rѸեc?ɤi4.ܿ9?cA \ʜwkP?}ke±m?\¹NyQ?A [7?yQ?Ádo?an?2I?́$/ V?% PܜN?z9Ϳ [6?B1Q`l oT?IOQD^ Fd?76fUGZ1?#cVKCV?ɯ:v? %F L0?#¿7T?)sБ,]N?̍2#؍:w?ڐNPƿ٥S?G 0jٳ?Y2 ٫GN?ױ+٫Krz?بmqbc٧d?ةK/v?ٝyg˿G 0j?FVخ}Vl?ƒ)JgS?İרM?ʫ\崿OQC?!.H觿{ 2?#$6e2^?㩼K?J"n?Gz1zN?䒷a=1p?f'|Ր?ud0âHG?ӄv ?뗷AJM+")?r/mÅr(?+ J-V? ÌT6?t}^_1X?!.Hhr!?J?[W>?N_o `]x?+𿷸եc?{z@8 ?y+s)?RC?u?Y5;?SP -?M3H,?|?M_Ë?[!Z?H˒:?f3]%?5Xy=?P3:}?*EM?A?%LW?mǣ?np&?6?Б}kf?ygt?ڐ?l?BB@=?gwZ@d*1?fI<@%?Q_p@sБ}?~:}OC@$7?\B1@_p)^ @m]r/@ԤҲۿr[T@"}1e@I'RTa@Ѣί%;@$tɯ{@1eԿn~@2/m!Z@hQK@>!@nYzcs@x2vtcCrq6@{tӿT^@geں@ ˒:*d+@ :S&r/Y@ 8Go*Zi@ K>E@  IOQD@ jOvMs@ a EQCrq7@ DR*o?R@ ~'!WLfQm@ rGE85~g,@ ߤvF@,Ԫ"?FV@dLD|1ej@qxBЇ+ I@ƿ@F#̍2@At>=ſўy@|n.'|E˼,@k;<ҸϿT @MjOO M;@\¹5~@6r2LԆ<`@T\)^@t =p@E֚:э&@Ma׊2I@M&IR@IVCf@_8CkcA \@٩T! V@A5TvH@q@ \$Q@1x-8Goߥq!K@Sd3,k}@t,< @;'j*") @6@Pݿᐖ@zNy|à@oa^ Fd@ϕ`V@Ms.]\@2a|Q㏰ @LC 6P@k ͳMa=@ ~п\ @#c ׈@˯#cr\=x@@ @rq6ѷX@82vtc@>WT#c@tjJA c @6C[l@¹Mhr Ĝ@*") FIl@E4AJM@^J82{@&-ѷ@Iͳ}jܱF_@mgwZE @!Krſ<64@奏q!K@Ma{@H˒y+@"r/Y䣃'gM@GlCO4@lzxl"1P@ ٔ[lK۠&@8W  4@N E@@x@|oqu!S@fffffY@4AJ꼔pd@پp:~@"/¿,{ Z\@?b}VnC@[\|ؘ#w@v2I{@a|QPH@FIlʿ T6@m3 Bma(9@a ECV@wN&տ$ p@),(xvF@LC!laR*@qntj~@bMZqxB@//t`sX@;yRҿE@"sBZ@@KYjj%@mnY1zO@$/{J#@1{B¤@{9䣃'@+3zo4֡a@\g*")@*EM!5@!-w1>'@%߿@D@&YؿECk@rz%@BS 5i@ckzSP @U'!Wi@EM`!͉@О8r @!~D"@#cHk'&@S4@]yЦ6P%@>WSk@0@9 ѷ@e@x7ʁ@SMjOb}@@ŧKfWx@q /@=Vl!")@zzN{@O"}:}O sGbw] Q_j@' BL '/Vֿ9䣃 ٩ͮO"} "S I< ( r\=xȠ0 _oҿܜM? ˒:)zDžr( ue_ôr A7KǿO M; d,F]cf mw1@NU RǸզ7ue 7쁿.Se &#̍2 8Cksh MW}W ^Se q׿jj% u%FƿLPr iaƤk JRiY_ƅ3ti *~"ѿcsl&l #9?ײ Y_aH +oiDg8 Qm݃.r0 ѢŗHH alaR*o{ 9&B 1eәI< ( gѢ r[TiB M.˿m\ tj~ۿqxB1 OQ/ej ^J82v8J !WhǑFV NʗMs k&i<*" (CPÃ{J#9 ٿV`V 3LAݿŗNe ;yR5Ms OIHdoa ~LX($Jb / 6PEbh`A7LD ^ŗNfh3*pH@rPܜN2fI<'RTa7ȊlDeۿj@'Bulv VE"??^< &?qr 6P^%?i&A(tr?{f3]$łU6?ulJȊG?f; ֶZ?LWS䣃'gvtc4aFyM Q֌i/Y:ܿYϕ[-M@%7󌿪Up Nڐ#M? H`U5Qݬᆘ5`k?gߏO鷿Zx*\{ 2nS&33333>6z~au?ˠQCrqa? xF]KX6?`GK3?JA c LB? Evtj~?tyS*0U2?LYt[O"}? cͮ>lLY?yUD4J?&3mǤ? Vi?)rD(M? ?VD1ڤ?ڹY=Ć?lCA~6?)i}? ٔY!~?"S 7ɚ$?IHU'޽?Ę $ p͔a=?ChK?y2Rp:?Ǥȟ@{ 9&?"&qb͊?uAJM+?LfQm5IHU?˄vjEXdE#?eںF?ʖtr??¿_Zjj?tqɿ|hs?JA c RCQ?Њﲪ◿ﲪ9?pO |Zq?WiJ?>p?ғ򐫴NEoi?Ҭ\ Y_a(?^ F?Qy?ӕ[($?n">i?;D=FNP1j?̕*0 L/{?ʱ2WJL_?ȊԿ ʁ?l!-w>pu?ēȟ@m=?o5ҿsպ?MjO9m ֶ?B1Qk;W@i?҈p@*fB?},{ @Tk&j?4.۵@?y+@>WS?x?@!Z?6P%@jZFsC?eڹ@5;Oa?z$L@ >?R-"@ܬ1&?;Oag#@x{?'RTa@Ⱦ?9.@a=1?uvf@CfQm޿;nCy@~Kyo.@o5ҿ¤T~@پMB¤@/ܜMf'|E@jfBr 6@RKLPr@ ky|ß@!Z41@Sh]k&@v@c^Jg l@A~6ᰉ'@>BZc 0j+@>nzN{@2z$=@oZpk}9@ʫ\濹LD|0@ j~"ѿëud0+A@ csłU@ d*A [7@ P%@~*0@%߿?>q@mqbL_@InX/EX%[@g lU5Q/@ZSݎj@UqKtT@:!5`@~@OTK:*cP@h˒:*R}A5@g*5Q.@{{DUG@긥[B]9@XdE$ᰳd@<ɿ̢a@U2a|g#$6e@ÍحU@ohܿcHj@$Jb$@&پL׿'/W@|]cevȴ9X@氿h3*@D ^W@n}VlY5@ty]yЦ@x^ȿGE84@ 2I穓 @'j@nY@D3gwY@Z2_ @ڍdnX/D@)r\>N;5@ҝǿ4֡a@Bul7ɛ@f9䣃KZ@ҿb8LI'a@N@c'gM3uO7u@CP0+@jU@tj~#@Q7$6e@v},}A5Tv@u^޾/l5@HLӮh]k@SP,'7@$tS6@/Vп#@!.Cd@3:}~($ x@*G|D ^@DTɆKH@_T Ǐ͉.@|n.Ms@O"}ʂ@-*Ei?) @m' @hrQR@!ohیGե@G&ͳ}@o M;.3@2^r(@߹8R?z:@iwN&Ԁ@zNz2X@EH0+@j@sE a @KZy@Єa~$t@:tqq@0B¤Uᰉ'R@a}^ N@>EEbh@V3thM@:$6e@).3x-8Go@\쿱[nCz@@l]N5B@S9m ֶ@:<<@l GXί%; u:>/0`VԪ .O;!.IzNVCjUpL% IHU'P hb {*\}nm?jɯ{ .3?K3BT~?ceO?>WSf'|?bsPH D ?SMjd?oiDg8ե? (K:)z?D< HӮh^?Y!%ǿz@dIֶZQ.\|ؘŬGHBomFJhۋq Q녿vȴSJm3ceO!"Sy}G濩|o'=0$.ǸԿnCyUQ֌i/0!R<6},{ hr!$Jb#=b?EM_s?ʷVC*\|?),(Pɯ?ˈeOݘ?ˀP;dZ?M%[[?.ƼS;P8\g?57?2WYJ?ʁuB؄?)Ie jOv?ƍd>LW?ƺ`q5?}2f<(9-*?oa?{ 2k?ŘR~cn.3?z$LD)B?ěR}A7 ܇U? _??Ž`sWJw?{ 2?au)*0U2a?K۠'}At>>?]xVϪ?n~~$t?5Q.ƽZR? Z{?۠&#x ?i,?oaj~"?+U޿ *EM?ý=>E?ĺKC%[BE?6>?^)5E84֡?C$ݿ"]yЦ?$Jb#ᇿas?*0U2a|FsB?Ʉپdi?S{ݿ%[[?aĿ_F?q`l oT?_a(9 ?*o?R&?~$=Fk?İۿf{_?+@jUL7ޔ?I^5?}UGZ2?а8% ?Ƨ-^ѷY?5B؄\$_[?h3)ݬ?Ҙ7ɛ`E?ɅoiDS?`A7Kǿ^*") ?tqp?doa >lLY?84֡boi? ᱿ulvK?鷿@NU?SP ,ϿXOLn?Թ#w5IP?ԩ ӿ+ I^?L8?R&V?ԂjF5JL_?KCV?ԠYǿd+?s40j+?_o '/V?ӕڝsBZ?i;yRҿjF4?[ 5?U2a|ڿpP?򐫴NQ?z]yѿPr[U?At>=ſygt?Ma= ,k~?(nג 4?73?$5in?)Ie?lLYt\?qiBĿב7?_0X:ָ1e?ސWx-8zd?{m]쿱[W??խ $ ?#ᆘ5 #y?jF5??"?6tc4?y2ÍO;dZ?*0|ß`?$׈+?bb˧3E?gi/n?봢3|ؘ?؃4Duy(?\$_[Y >?M>꿸^)5?oTK!laR*o?>iQY4AJM?hA_h?>n B?-b8lLY@]r~np&@M[t]r/@v?) ?t);@fV??u%@NΚ,g?O M;?nY!?,'?<wd?ܜM?c ?/V@T]?pO4@V. ?٩@v_ح?]s@j~#?pd@Kr? '/@|;Oag#?mHQ@Z,Q?@Q?a@cV?k΅@q@a{ 9`#cV@u]r@&A(XdE#@G 0/ej@P]q$LD|1@Zy1ί%@Tw[=@˒:)ǿM:@ gbѿha@ ԕ+KƧ@+$$/@IQL@N;Ϳߤ?@ !~|@ɯ@"}A0O@fJ$5in@,qi@ڤ*@ " /^ @ ?+ʬ~$t@ //t\N<@ $T^@ dZ1@ v7ޓm3 B@ lvJX%[@ J82vu&@ [[а{@sG@Tw[N;5@Crq6\=x@@> },{ @Lv_ح@}nC@ k}Ѷv @DIV@C\ѿѹ8R~@̢aƼS;@&,s.%[[@[W}ŗ@پL׿պ4Ck'@c^t*]ce@shE@#x_Zjj@s6fI@@98u!.@U\R0 7@ϕ@K ~пud@&Bٿ2m@5^޾5~g@j:э%dob@ g k@ÐB¤M@7ȊE@0-e@kP|tj@d⒎ 4@ A"Q@'lC$/@ATɅof3@bl=ć|Q@XheU.s@}keC,zxl@]yЦKI@ǎj Nʗ@:o'=[@L¿h@WpN @3]$`V. @n~@Ex؃4D@m\ڿ\ y@qB@}H4.۵@W¿m@.+7ue@Lx?Q_@ksg@Ԫ"U5Q@wsFS;@)kth@rGE8oi@ f'!@dPr[@Y|m]@tSM*%ם @4fPXިc@d*1i,e@1zNJ@jVԪ@Xe 4\@)A!la73@[.]]b*@) @S+U޿Sn@nwpz}ڹZ@\=xİ@G&!<@{m3 B@}A5TlvK@,]s@.FIlʿH!laR*@f`V.o-V@i;Ov_@ם gbD=F@N;5A7K@K$_@)JeXO@)n$ḍ@doa4D@;BEE@x@Ζ=Ć. {5*Zݘ &z9b}Vm o~=M3H+ rGE99m ֶ Z*cO )Ievȴ ҈p:F K ο<  KHӮh>P3 uO7v˧2P] udαpO4 ]`̿Γ򐫴N Cdosպ *JLP1; *0U*") Y|!Bo 1'L WSͨ\ Rx-8Go* >-b8ڿE g-rGE9 Jf'|= +얿̝. |[aR*o?S "˿"쪸 { 9 v˞Ր CYr kjfϿ%[[ _˿Hjܱ yǑ>E a ED) e㽿/ B&IRƤ*  N˿R<64 |ßaڤ :>BɎuy( uy(< l5K usgł Fg% ᰊpa 1VԪ ZIf{l!-w ~$3 U=ȿ>' G͉.MjO .r08\h̲᱿9mO MҲLb*߿k;<.c &֡a~np&#cZ |[Vg?f: I^5??u%7ɛ?g k3t?u%F G{?v??z:xQ8\g*=TK:~LI'np&N`sW濵hb Fdbw믿{pd꿲<NʗOQCYO"}a Ec'/Vֿ sg=¤T޿aR*o?Sǿ},{\F^"~鷿)*0U2aŗNeO7u?ZFJ?\R-#0 ?jOv?=p =WXe,?kȟA2 ?;yR4w|? $҈?wsI.}?Ǭ)r\4m?xp;:h?Q|hs?8q`lDR?g?\(ÿkF4A?{mm?pdƿ]$D?s1?WhfQ?ԀuM唯O ?Fdfv?W),WS?c^t)CP?41B74?l<'ڤ+?t}^_v ?lvJ#C7!-b8<ʁ?;%o^i,?ˮzGmqbc?C,zԿ ?sպ")n?wpy,ϿT ?c 7~?˳mǤM>?̒7߿>iQ?c4+?e+aH!laR*?7ޔ)k?ϲRs? ,k~4i?%!v ?eh4cI{t?yN&Ԁ?<*"u\(?p 9C\?ңY5;O~mH?ڹYпj?"`A~LX?\(?T ǎkd?X 2 E?䎊r+@jU?^"/w?`VտHU'(c?{AJM+,?:pdhH?CcHk>pu?˧2P]`V. ?ԅ]r/6;%p?.3ᣭ^?ԯ0//s?ԏFH?(߹8ځE?9סo?ha2P]?Ҙ7ɛha? ciB?ΔFsܿMjO?nY/s?ɺ RiY`՞0OY?LjeO/?ŘJA c֏`V?5},{ Z?S*cP?¡͉3rS?EӞՐ?(nү0?į0??o~=ѱ:?`sWqSn?M ͠??>qmHQ?Ɔ<` |Z?Ʃ`ȈP*?"ńپ?Tw[0\?vȴSP ,l?\(\{?5 :?x?ws?ƥLW?p8\g*?mH?X?xl"h ? |[?u!? ?ͳ|?g*d?n/?l"h ԕ?Y5;?oiDg8?4Ck&?87ޓ9䣃?a8 ?J#9쿲.3?Ϫ͞*0U2?pdƿǣ ?n!Bo?_EX ?charv?@98q?4Ck?8)?o5J?N&Ԁ?c^t)?|#x?پL??v?tSMj?Zjj&?^t)? (?ܦı?-"?i?,]O?k;@B},{?Nʖ@R&V?e@,]? gw@9CſXe@l"h տ|ؘ@*ZFsCc4@pSe⿚K۠&@sl&l=K^@ |8K@PB¤U>'!W@3]$E?v VE@6?rv@*{?{@M@$>?yXdE$@Pv qHo~@ҿu"@ʁԿ\@u_ôMUh@敕f{z@@`u!}W@i4.ܿJw@ Nʖ&IQ@ FV5~g@ ҈p;@ NΚ,gV`W@ Ϳu%F@ p =nmu@ 3g l?@ py+&x@ %|p pϿ@ `l oTÌS$@ BE{5*@ [BE3 A!l@ u!B@ Q 6P@ &z9ũT!D(@ EoiDgrz$@avݬF L/@1iBĿςӄv@u<64@,Q98qa@jOBѿҋC%@pϿTE @ɯlC@ޓՑV?@B؃Ë`k@0ϿTض%@L /٥;K@mڤ*1@B¤۸f:@XbMӿ74@P3:t[ @A98qa@>LX#x @k`k{/l5@ I{ 9&B@+ʬ:@M?^ Fd@r\=x$Jb$@|o'CcHk@yҝ%@;nwpz3zN@cY5;O㗢HH@*")Y2@Jb#ᇿ+jf@ڐ07@Y5;@ej0@98@GgM3H/s@6_Cy@bFIm砥&@`:"@˼+ٿ)r\>@3#π@ "&r/@XF]di}@w2^@zN{$/@BZc <`@ὥs@m\ڿA c S@)Q QCrq@Ml5@q_a(9@J">-b9@]9 pϿ@Yǿ@Ps@*m3 BY@P8D ^@o;dZwpy,@VINt@ߤ@A"뷿`@dž&`V. @㢜wkѷX@d2^@ V. &@AXOLn)r\@dvj*ި@uO7uD=Fl@˿ '/@B;yR5@{weں@#İݿ1{@LI'?$D@v#-6F @ c S>BZc @mhr!@ud#-#@#rq6f'|@PWx-8z@c@}ke$T~@P1;@s|ß`@lCM@6R<6ԊԿ@eM_"@/ej) D @RL@Cg{e@y@'thֿ/@YdobJ!@>WSs)@f 5Xy>Ж2I -x>-b ($JYJE y"`8앿 zcsmᛐo 9. RiY_ nY! 5͉/ԀuM m>WS TɅoiϿT 7!<׿ڹY 3,FsBiQY+ JE#Nj򐫴X*0ae(>BZc\лn6zJw|?>-b8< ?䣃'gM̍2#?`HM?eںVm?@tҳ?zNzVU2a|?"&re;K?ȨTɅӄv?+@xғJm?uy(P*?ϹM81e?ı$5inn?S;wG\|ؘ?,{ Z\Yr?%F L0}W?6edE#?Ĉa EE?+$`&?;R~?k΅3G0@9?M ɥe?nCzB;yR5?mtɯ{ ?Y =P|?g8}H.ƼS?9:4Ck'?!~|y}?*")R4?zN"wkQ?M++̿ ?Jw|?ć#$tSM?BοM|?*\}$ p?.S"?ˎjҲL?s)ܿ]9?dE#NkP?PܜBn?o䏿 (?NvݭmR~Rw?˝^J82vsMjO?98qa 4?ܜMa=2?͡vݬg?G{ ȊG?*)sѿT~M?gT2?h3*9??lΖ\л?>P3|Zqx?tҲo5I?Ǘ9fIlLYu/ek?:g,?bw\ÿ䎊q?fQm޿#?KChmqbc?K:?vY?S?|ؘ?3 A!l?Xy=?f5~g?(߹8?$ p?7 ܇?ZIf{?=K^?u!S?̷?6&-??o 6P?b?JE?Цv ?豚A_F?7ޔ?bw\? ?B؃?&?u?Y!?ZpU?Fs?.}Vl?p`?[y?g8}H?{z??;?B?Gj?ڐ?S;wG?a Eb?|o'?M:?@C?>?>=ć?-Y??omr?&76g?2m?P3:~?nX/D?9m ?a=1?8d?> ?pO?I@^~L?'(b@*0?HU'(c@Ԫ"?Xe+@Y ?]9@:;'?B1@a?8R}@׼wd?T!D(@ L8?^)@p@:)y?CV@$t?Y`@Y&A(?2^@t}?|1&y@sPH\Jw@~RvJA c @{ 1ί:pe@e 0Ϫ͞@~g,jj%@ h3)R-"@ '!Wh@ L_(߹9@ l#*EM@ \g*FV@ .}AQ@ GOIHӄv@ /ldi@ ᆘ5hM@ #>P3?@ }f'|E̿6z@ _tqp@ |ؘTɅ@ Ҳۿvȴ9X@ R1z@ l"h ԕx?@ bb˧3ǘs*@ Wx-wUqK@SJm32m@738@3RCi}@D(MҎcI{t@XW ceO@ٿֱA_E@ac @IxnC@b I^5{@~Ov_خ[6@JA c/w@.r0%1@ C] 4@2ϕfI<@Uk΅},|@vMߙEv @//tT~M@ V0@Ѥ R&f@0l oTK@$M:s@BRw[0H@[<ϖ@zzN{@98q@rHL@&V޿ha@KCWC@l oTLwFze@- gwf@K ͳty@4\٩T!D@RCt}^@ŬNxW@VC,zxl"@)cHjӿޓՑ@Di愋[-M@rI1@BB3:}P@)k2"@Q @ q6@v5Xy>@Ag#$6)sБ}@eXdE#v@B @4@nY?gߏ@q6wkP@< *\}@@\W),@Ado洷,Q@fsջY@5Ϳ[-M@@&kȟ|?@HU'D*0@u @x@y=ceXOL@bM%1@+d7@j{ 9&@?eU.sJm3 @d=FkZIf@A c ?>@ (jF5@5{ 2@Y!ƿ!@)ӿPRJ@Rq6~2fߤ?@O dZ1@$tS%e@v1fIE@ۥSϿ$tT@Ir\=2̷@}.T!D(N@~Rvtc4@玟j@x@氿.۵@S--"@y =@ƿA c @6F*͞&@0٩F)J@iB a Eb@FIm{sպ@ܮGBB@!<׿e@R*o?Rӟ~+V 6Fπ3r %ǿRJ 98qa@N KHӮӱ: ڐ ӝyg ƃ<`ӈ+ +q!Kr M?XdE# ̢a>WS pj+"SP Yz$LD$/ AQR)Ie ),dȴ9Xb N;5Ҩ> ' ҆/Y np&c  2W>//t cHjӿ;:h ʖ` r7Ȋe% UѢHG 8?)x {Ms !!< r ɯ 6d, h3ƿC\N fI=e w1̓do x?!Wh  I^̽D"> .3W}W f,<1 Cˇ V L8Q j~#ʰȊG bM"&q 7YƦY :penp& <64Ŷv DB1)4 b}<쿱[ ܻ¹Mѷ VϪο pϿ wa(9. D3T61 2WP* ƼS;Xy= o1俲{m] 3LAݿF4AJLƿ- (ӿp nwpy?m16;%p?H|?[ko?3 A!lTE?rGE85R}?ʁEwU? Z[)r?AJM+,.Seo~=<`?Ӆr(|o'?%d7? VEz},|?K]cAJG|?ԍO"}?*0UTɅ?aue?UqK8YK?՘JA cS#?zN{!R<6? *)t?`G #?֤*12 F?W U2a|?*ZFsC!R*o?S?m#Nw?jUp "?aR*o?S2I?ﲪ94AJ?z]yt}^?Ǭ)r\L2#?Njq 앿?<ʆ6&?ľ (s?#d?CA0?!-w1Il?ëGNϿ;dZ?Ý-VBej?ѷX7~?ĀuMU*o?R&?{5+1ί%?Ccܿ"??YwUqL?*")Aҝ%?Fs?Nt?ӟU=ȿtI?VϪο??(߹8FVI?N&Ԁu=Fkw?\=x@?\$_[gwZ?9XbMӿ뙙?!Wh?Ӝbο̢a?ӖR<6/s?ӳmǤ:?p*ؿ޽? $冭-f?P{?;'j@䏛]:?m?>a|Q?jUp2^?sБ}k73?~=ۇ V?wUqK?h]k;lC?73omr?mHN&Ԁu??R&VwFz?mqbخ*)t?KHӮh^4?S#&q?ӅoiDgnp&?$ pty?s?_{ȿӝ;D=? e Eb?t[ ЋxW)?^ Nϖ($J? HѶ_?/sZ1 ?gM3H,"`A?ǐB¤U ?dz*)s?π3r)k?ǻ/Vп{_I?S!laR*?_o快]cA ?< #?پLI(?sg?lBZ? e?>-b9?vtc4?ٳ?u ?]cA ?앿Ex?[W}?Ck?gߏG?b?p 9M}H˒?ss򐫴NQ?e+ÿyO"}?r }d?ިc^tŗ?~Lk΅3?iBʿ'!Wh??ײϪ͞?[-M@%VWi?YJEn?P%ǿR~R?Wh?a]U\R?ʖ[l?m3 A? #yLI'?yQm݂?a\ſ-Y? xiv?h]k/?Zp?'RTa? qu"?SY2?ulvK?~Rv?%[[??xB0?u g?D?wkQ?`A7L?łU5?Ie?>W?z9?0?Y >?=?T:?oi?0?1th?nh?^҈p;?K4?m?TuK?|ؘ?0?Fs?J?Y >?ᛐ?eәo/? ^?䣃'g?[W?MuO7v??n?Q?jj%?*?I{t?m3 A?BE?f3]$@Uk΅?xW)@ӄv?Q@O7u??gߏ@*fB?W @tqp?-V@Ϻ&?:@ L/?@gqp?lC@6e?ͳ|@9.< ?3:}P@yV?Wwd@GG?`kz@?4.۵@ߩ~+V?K[@J?r/Y@HuO7u?Zx@M:?N&Ԁu@?2P]@DW}W?r ě@j%?2W@3rT?5?|h@ggM3H?tҲ@ƃ<`??@RC_䎊q@Ȯ*)|M>!@ E ڿ7~+@ ۛf3]E@ Ado@ ݘ/ej@ ? ׈@ %+a/@ N[W?@ ^?>8 @ ͉.?FV@ gߏGws@ !laR*X@ CA0{@ ҿZ@ >KhH@ b΅3t@ ؎6FŶv @ '>EC$@M7!=8Go*ZG@CVx>-@"e+ÿ앿Ex@/D*XOLn@a(9.@*@'ҷ%ם@.c 4m@F1.v5B@pEwUq5Xy=@q֌i/o;%o^@4m9Nx@Ǔݗ+!ZS@6076;%p@>BZc ZpU@O<ɿoa@If{_ސ @Whߵ D@nCz#wk@(n+U@j~#-#N@ #ᰉ@=hƒ$Jb#@Z1 ?ײ@zkP|j@TɅnh@>ㄠ1@ 4`N@n8R}@:If{_VWiJ@tcI{t`sW@>-b9"@ڐ9}@Pr[=Ć-@&ڿ幌~($ @(S;wG@@\Bο|@=p th@:э%5Xy>@Hjܱ07@ua=1@?Ҟy2@%ם g!Bo@4,Q[BE@XOLnmxB0@|# (@ |Zrg k@5inXi;yS@G \|ؘ@ %Rud0+@@1$5inϕ@V`V)r\=@|#-#8 @ޓՑ@?ҞT~M@\PHߏG0@uvK]cA@]U\,]N@E,<@s* @Li}@B!Bot}^@h&c)k@Κ,f&I@gᆘ5@޽:pd@*\|ٿ 4@.1$')@Xd#x@Jf'|@mϿs)@^ N}H@٩TƝsB@+얿^ s@W9m ׿@ 0j+?T Ǐ@`sWq $tе^޾1eәoЀIf{_J82vt A_EUGZ1 ɯϷAJM+, 䏿F4AJ ,Y2 l oTK`, Ik~(Q &V?t[  7" ޳"̄ )yǜ[ @4n&i- un Y+/l5 Կ  hƒͳ| /^,' ]9QH x1eԿ  Gj ěT )?) ESP ,l QX(y ]s8J a~|s x (?lb}?}A5T"?4mL?+jg=Ć.?"쪹[W>?laR*o?dk?LPr2?/ej1P?W}WB?ҝIQ? >l;:i?) D d?o*ZFs?ӵsgUeU.?{ 1%j?B0 n?Ԉp:puO?k}:R? V`9?\ı-ǣ ?գn.3nwpz?ᰉ'ȔG ?07l oTL?wpy,as?ҫ`kz^?B؃44>=ć?n/6@c^J?Η2^$/?Ov_خ|Zq?HG a=1?76fGXd?ʁ D"?#ȟ@?-M@$>?E84֡< #?O M;灄?xW)yU?ù`Gjv5C?üwdnp&?ómǤ?0+@jUwr(?ľ (EXdE#?ڐ¤T?ӄv^?ײ? Z[(̢̿b?Ũ\ b?8\g9?*ި-Ww?+v?]xU\R-?^ Nf'|F?zNzVY?H˒:1;?²kvÿ64?ôr2r/? gwl5?Ʃ`E?Ȫd7hr!?Y >JA c?ם gb|o'?:)ypT?^ siQX(? M:_ح?ξߤ?ɿ RiY`?VtK]c?^)4g#$6?+ I^m?"h ԕnO?t);OŬ?}2fBZc?0 7Bzcsl?j%|~6;?bb˧2߿3=?Go*ZF /^ ?Ҝ#-#tSMj? B~"?>'!ZqxB?gwY{ ?Ӿ"ʿ]:?#-Y =?^5?|푿`kz]?Ԍi/nHjܱF?ԣ'gMp =q?ԣ'gM9m ?Ԃ@4nXe?0U2a|%1?D(M$Jb#?~6;8YK?~6;\$_[?ӘR~CP?ӷ-#N芰ȊG?b}2I?Q¿:?2LfQn"?]\">i?ԁR}2f?Ԙ̷Կ98qa?ԗ2^@N?|0Ѣ?D|0q?.H??gT[0HA?(Mبmqbc?X:Sק&?פud0է\лn?Ϫ͞2LfQn?ɯڿިc?ҴcI{t>'!W?,<쿱U'(b?iѕ-#N?)k ԕ*?>-b8ڿ3?_0X:>BZ?wpy,V. ?IOQDЭ-e?űH͓?Ѣ@x?*ZFsCČ ٔ[?ǚkP|ƒ)J?lj D gw?A!6!.H?Ȉa Ex??!-w1LW?ǰd?:6C-?^ s?a ?Б}ke?i4/?ìq ?LW??K]d?l??}3?'!Wi?$'(?łU5?|ؘ?,fWx?c4?t?WhI?&IQ?{?,s-?LD|0?Ne?q6?q\лn? c Sz?IV?@$=?MUhƓ?RCQ?*6C-?<+~%?p*ؿ7ޔ?>P35Q.?@4OLnm?C,?$'(?DMhƒ?tqɿ0?,'76ο% ?i}},{ ?1俣#x ?I^5?p =q?: BҲM? h3*?bοP3:}?7 ܇T?n?Ї8?Z?mqbc?th?@q?h3*?v?pեb?CA?np?lLYt\?6F ? 4?/0?3]$E?"쪸?%|o?{tҳ?w1?b?B;yR5?HU'(?Y2?1&?v)Ie?QX'?Jw??>q?; $??s*?OX7?łU?<`?U=?HK?glC?"'@ c Sz?8 @dҲM?x>-@? gw@ L/{?hM@YUqK?uy)@a?*ީ@7 ?f'|@Ve?ﲪ@ ܇T?R&V@},?ѢY6@`pϿ?1@98q?ҲL@!~|?o'=[@ D?oa@)r\? VE@,[?Ŭ@ezxl"h?fA@s?[!Z@ /?g k@Sv? @EwU?`,@ gb?5@ E@ 6F ?_@@ Iv5B?@ Ć-˿!Z@ 6俪!Bp@ H@rY@ )K𙿾Q@ 3鷿@[G#пB @΅3tǧڤ+@8R<64@٩TB@P*0U A!la@'j@~Rv@ѥq!K@Hhb>-b8@5^ NҌ?>p@Uy(ڿB@>Pi,d@}KZدZp@LD|0ӿX%[\@݀^_0ڲ{5@PHt);@+U޿Կ @!-wʁ@z9ͿLB@W>6zKCV@˒:)ǿk&j@Վ!Rf'|E˼@e@yՐ@0+@jUE /@Sv򥤿LWx@VgwK۠@vfϕ@4mֿD(M@Y2@`2^@/l5ㆃ<`@C Syv@n 4Yʁ@!-wLPr[@:э%Ne@zVCپLI(@Ewٿ) D @2n8R~@\M>T ǎ@u_ô`:@x-8Go6C@ 4狂@s5IO@%1¹M@WsPH檣_@F*\|ٿ qu@QzNA(o@+_F@y(ڿ4֡a@jj%Fg@ڹZ`@!߹8R4@FfffffK]cA@kCV墜wkQ@ 9"`@2a|ڿQ_p@ڐ CP@"&r+ʬ@%oiDg07@ k~(@< \|ؘ@ɅoiO M@_Ak@G~mH<`@mv5Jm3@% Q@Qο=@,]O1@ Pܜ@461:S|@\K[[-M@@"7ɚ@ws#-@JE>vȴ9X@^t)fJ@-e蒿yЦv!@XYJ3@ ہ0HA@hۋ+ʫ@ڹYп(F@ 'O<@3&uX@_h3ިc^@٩T"n@xl"h 5~g@Hտw[0@z@c$/@F'|E˼7 ܇T@u5XbM@`kzx@ԀuMkm@SeS@D0_@@,J-`@2P]cS@Tп{z@@Os @E#NcI{@>(D@TK:bw\@%8\h&i@\M>W}W@ ݿ%1@F4A$_Zjj@'gM5͉/@/ hֿճ 2f<ՀB 9䤿LPr[ B ֶZ nmułU6 R7߿ԫ ~ 6sWp `:э% u:?%|p ޽Pr[UWNeL_8{0b}+ќu" R4뚿_ôr !Kr }HC, DУ'gM t[ csl&l R 4"쪸 /'=[a@N cA \?z: 蜡bqp x>-ú4Ck' R-Y 2m!5 D3UDR X6Ø@ gw¦/e a(9.+ʫ] nSeXŬGH /wz9` Hw[0H '>Eg q |ZĿd̢ v_ح. < e?L8 *\|?}OB <ؘ?ł!Kr?fP[BE?6zX/^ G?M (F4??gߏ}OC?hƒ%?gM3H,~=?ѱthPW??z!?EM_9m?ҏ`VfQm?پLI(ȟ@?$ pc?nVX3l&k?ӹfQ?puOѧ\лo?Mb}Vm?VH<쿱?æ76g+?QCrq7{_I?Ę $ p?9? /׿Y2?H替w?[-M@$&V?k΅s)? 9&Ao5?KHԿbM?H˒:A!?+ I^CB?cA [yHU'(??) DPܜM?!Bo+@jU? 4v?!laR*o婨h?vݬfA?;wF{灃?y(ӿlC?ŗNf ??;'䣃'gM?ω Z[)}3?<*"puO?xl"h տx>?}Vl!I{ ?doaJ\?}OBMUhƓ?7ɚ[0H?&A(fP?K]d /?J!>E?e%1jF?!-w1\л?Є?H+?єa=2f?VԪ9C?i}CV?%;:iM?Ӏ |ZrirGE?r `?@[??ԕ*0Tk&j?ϿT ȿ}OB?^ sa ?!-w2Q֌i?MؿܜM??ԉLD|0ӿ;5Xy?P%!?Ne?&IQIV`?OLnm@$=?l"h ԕe@?vFJ);D?^_0XR~R?A c +?ӐB¤U?Q]U\?̢a}At>?hHտs?ՠQCrq"/?Q5~g?y bD?Ho~_?үZpԣ/D)?l!-w_o?Q¿եu?Q_pF]cf?5ƷVC?np&ɿA [7?!.Ic Sy?jfB!-w1?7ޔM++?D~($ x?X:SQ? VE?.Ǹ?Lj++?Ȟ쿱[W٩T"?'(࿯]U\?țR}Atr?)Ie{*\}?ǽ{ 1ί?Tw[? 1ί%?`A7L?Ş%?ȟ@?wpy?sպ?E ?ߤ??w{?]ce?Fd??ԀuM?*?5Q.ƽ?ІhK? 7!?ҵ '0?Ebh?Y2?!laR*?9.p?ޭU=??o~=?-M@$>?ߤ??Hjܱ?y ?'RT?B?f:?ŬG?%灄? gb?3??LI'???MjOv?DUGZ?;dZ?9&A)?k?@[pjX?9_x-8Go*?Ma=Q_?탺4Cko.?͞&xW)?NxֶZI?nY?%P6?A [@NU?VEndoa?P3:~? 4?d9? DU?VD?Fs?a?e%1?jt}^_?- ?Цv ?Nx?W6&,?X' ?+a?^ N?Uhƒ?ם gb??g?' ?8{0?1?V9.?pɯ?¤T?xtj~?{5*e7~+?P3:~x7ɚ?Y!~%?Vl!_!-w1?l,d?YJ?<`?3th?AJM+?A5Tu??g?V`W?ԕ*1?!D(M?0$?.}?oiDg8?WS?;L?{?|ؘ?&?Jw?pd?laR*o??f'?v ?i??4֡a?.۵?\ y?y??p&?pd?/Ys@(g? 7!@oܜM?پLI(@R4?7ޓ@[?)sБ}@P?sg@򐫴??@I<`? ^#@ ?28@(?C,z@IOQD?t}^_1@ygt?}Vl@ws?n@E.r0?LfQm@ ?*cO@R4?{J#9@NQ?/@sWq?ěS@\¹?@Ck&?̷C@g?nY!@C?*o?R&@k+%?)y @\¹?{5+@{5*8 ? @ˌeA?y@ F^"S?B9C@ "?U=@ =?"?@ g8}H?z@ *0?r%1L@ ]9?=K]@ ۠&?b}Vm@ g?v-@ `'RT`?v5C@ =Ć-?u%F @ :N?M_@ "S ?' @ 7~?Y5;@ :TɅoi@ 0HA gb@ kﳿS$@u_ôϕ@ Ǯh]k<@߄{ȿ $ q@- ֶ[ ԕ*@xW)41@B9< @ɐl-a(9-@l7`]бF^"S@C4CknY@ZS|ӛty@X qu@э%пX@2^Ck@ԪڧG@++@%!@W}W*\|ؙ@Yпڮ)sБ@v+ Ju@F^"#x @bDM@K3߿|@F 0j+@S>WS,=@k&@mR~Rw`G@ <%;:@>WwkP@v ؿ:@ B̿($ xG@3=˒:)z@XdE#U'(b@s?@~|zcs@ xOag#$@doa$6e@K׈䕁$/@fپLI^ N@~6o?R&W@~"ѿ-"@׈sGO@f3]v @wd:v @ xuO7u@\}At? qu@؃4%灄@zS|V2@,d|H@T`dÿ;<ϖ@9.W@;'!5_@5;Lv5B@YË`ʖ\@~5?|푿CV@¤T޿sBY@ǫud0+ǣ @5ͿQ@Lp&@7`]x2W@]K]̿vf@%[[տƒ)J@WS]9@$ŗNee%1@KjfϿ '0@rO"}İ@o.ӿnO;@//t{@~鸿!Bo@8\ga(9-@8{5+cI{t@`6z@]U\SO M@VWi_Ë@ ,QH@-qu"W4.۵@VC-ӄv@3rT}At@6z"`B@Ϫ͞eO@Zq6F@+a@e$_Z@W< g@>P 0j+@9C@c^@/{ 9@o*ZFfP@4 @a c SܑN;@.< 1ί%@ߏGY2@ .}@[0H`V@>BZ(@, @`L8O;d@+y@]k;?`s@ xQj@2-VcV@gtc4@|)4@9XbNҲ@ )^ Nv@B?߿m@zu pu@4Xy=c k~(:}OC N*0U2 o?R& ;:hپ" ?Ҟّ7 $5ibD ZS3 A!l >lLY I^5 yHU'(=B dOQC؜n NcI{thA_F 8xW*3ߤ !łU6 x l$?JL`kzҦY ̢ۿb#ᆘ5 doSn aײ ?gёhr _!-w1Jm3 E?R/l5 >P3?򐫴NQ ;wF?z$LD| -#N?|o' +&i? Z[(濇i-?΅3t">i?ygc'gM >lLY (9-qxB0 s7 ܇k΅ F9䣃8Ck /^ G›Կ ;yRҿf6;%?fPx??̔pd??܇Tw\!q?_Ë,k΅3?T] gw?- qvJ?&A(?? ԕ*?]9EwU? $ qbe+?1o6$5in?K3z~mH?灃dr/Z?9Dp =q?ϠQCrq:^5?|?]\RK?zcsmdE#?ψ+1o?Y|e ?Ϫ͞&Y5;??2?,]NmH?'gM3H-`?[BE{?ȥ&3 W?P*5?B9C3/ek?pO4Y!?)r\=`l o?jUp|E˼+?ĞD<2 E?xI[W~?ƨF4:)y?hbu ?*!ZS?ŖYLB?&kɿfA5Tv?a(9-ag#$6?^"ȊH?>BZR*o?S?ђPܜN?@qg k?ᛐoTɅo?pO4nCz?RJ˿sT6?\g*Ⱦ?Է+#K۠?;')^?!}8?-M@$>Y?P3:~f{_J?پLI(T!D(?kvο*:э%?@}2f??) "}?!Bo޽?CPB1?X%[[տWh?O4RJ? Ev;%o^?Ӊ Z[)h ԕ+?Dd9?tTWh? L/{C\N?π3rfQ?䎊q޿jUp?Fd;L?g8}Hٗ9?8 _Ë?2a|Q,'76?ŗ?+{?FkvY}?eXOL+ ?ƣ^ݿ˼+@?ƓJm3ŗNf?1LGXd?(\)Є??ī`kz^.Se?ƁԪb8iQ?TE?o~=?lVϪ?&x?~鷿?,zxl"?\=x?ߏG0@?W gb?`sX?28?Цv ?.ƼS;?Pr[?c^t)?=B?VԪ?;D=?ygt?\|ؘ?sw[0?x-8Go*??L_@ i/n?g@Iڐ?A c S@nm?J#9@[l7`?0 )@2R?08@j?<`@ (?@f,s-?,R@q?'!Wi@F?ԀuM@_8R?ڐ@;yR5?+@x@wUqL?X:S@LS$?+ʫ@~L?A_E@s?2I@`>WT? gw@ɅoiD?}At>>@5*8?>//t@t}?łul@s-?{ 2@DG 0j?j~"@.? @ O;dZ?B@fFV?|G@9Y ?tc4@ JD _?E84֡@ 3?#-#O@ Jw?:)y@ 607?m@ ]?@c^J8@ Цv ?hr!@ Mqu"?}ke@ /?8R~@ ??{ 9@ `H?eڹ@ 5~g?4֡a@ sWq?@ @P*0UØ@@PH𿽬>@,C{u%F@ q!KsƩ?) E@73@xxW*tj@bMy(@PݿаȊG@R^)5д9XbN@W^ FeԴ,Q@$ݿ |[@`27@=&f@SP `VԪ@}2 @ d̢@^($ x۷-#N@")ܴfP@K $ q@{5GG#@4X 9.<@d9}A5T@Gn_o@ik~(u @R~R'gM3@ҝ&઎cI{@` $ p@&c@tqqqxB1@G{&IQ@[?zwFz@]9puO7@]U\ܱF^"@8dY!@S=%@oZp |Zq@ڤ_Zjj@Y5@HGÿn~@"0 >l@r\=xʖ@*8 gb@DqxB1_ô@ҿ獸@.'(b@.Vus@1o$/@.ȿ-@O;@W*0U@5=KB0 @\|ؘ{0@}3O"}@ȊGY@޽M>@o.ӿ{ 9@!}*o?R&@H9XbvJ"@p>wUqL@q`l *0@sWqnN&Ԁ@*)z@d@ 7$ud0@9rGE8Q@b H@͞&N_o @"B؄@$_[uMU@Il.@/1:>/0@Y`,@*1)Ie@%KCW@'76οU2a|@vg#$6e@FzC\@,Qǎj@믿`sX@ Kl5@TPܜN&@K]cϵIHV@iuͿޞ@r 65@&P@\@\@GE85:)y@ȼ# gb@yUD xF]NP1< O"% 쐁?Jw ۥSϿ۶gw 8CہZR Jm3  0k΅4 +/l }OBڠY i D di Sn)m =2f<uy '>E٭v5 ?>qnwpy s.Se ěTc  5~gجh 2Xj%| Ʌoi&Ԁu zS|2" _P]םyg Crq6XdE# ' ՛=K^+%TuKu p0#̎qxB1QFV{_I31ί%|H պӝ gb o~=Q /Y߿ _pҹvݬ o/sl!-w LPr[#x )4.۶䎊 nCyф#π @45Xy= "ʿپLI @xӿЗO;d sgH N˿Zx 't}P]q  c SeU. Q tSMj laR*o? A c E aZS?kv `G?(\) ԀuM?a :?:~ //t?[($ =[!?Y > c^t)?m\ 32?6P% :pe??e?M@$=oŻY  V׿3H+ Yb}q +?v5CBom?`V.  l-?P3:Ќ?>q?ˏG0@9TɅo?2 E7z@c?ͿEwUZ1?73e+a?ʁWS?E?Ѕݗ}ӄ?T ǎkm8Go*Z?Є[-M32?Э٩T"(M?)^ ޽?Y2Б}k?ЮGk}9?},{ Z,GG#?Y2 +a?T ǎkQ? qu",{ Z\?ϮzGKCW?^ Nb@4?3%zxl"h?{ 9&B#?ɽQ.Ƽh? sG!~|?Q_tr?DUG 4?j򐫴KeA?~LXbh?~6;™؃4?ĻL}`N?{{臨M?cA \U.r?r2LfQQN;5?¤TcA \?.]\!vݬ?kvοY!?͞% ?b}V?5TuL ٔ?E /9.?< (x9XbN?@N𽚕B?ěS@?\N;Ϳ Zq?dob0+@jU?Ӷo5J-*EN?ӚkP|6e?ӝ^J82v$ xF?ӳ|ݿ䎊r?Ccܿڤ?QQ׿?{5+sl&k?3H+d0+@j?D;|hr?FgR?Sn?ӠƿPH?gS>WS?1;.^{m?XdE$g?zcsl&?6;%oJ?m?>yUD?:pe);D? sGfP?O"}ڮ)sБ?6"`?sY2?ư ě1 R?:ܿSMj?]9np&?9DЖ?a@N͗HH?LJB?ǫud0+AyP?΅3t²kv?=U5Q?;:hhƒ)?a EbῪW&?-`tj~?Sy3?bM?D?VWi?ɠ{5*8?r2Lf?)m?mq?Dg8}?"h ԕ? 7!=?;?27?^"?Ib?Ж=Ć.?V2?ҟ]s?ƞFI?ԦY?~+U ?s-?ĵh?i}?é*0U2a?ڕf?[W~?ܐ ?a=2?޿ ?Q?/Y?Z?2I?6?xW)?`sX?㽐W?\?䀝IQ?ҲL?PH?hH?Ŭ?s?潐W?[BF?継?`s?輩iu?' ?ʫ\?CP?},{ ?x>-b?!~|??4?҈p:?#$6e?]r?&A(?dh?'gM3?H?FV?+j?qFV?73? ٔ[l7?+?B ?8Ck?ί%;?g?DM?π3?v? ?ud0+?(wN'?q`l o? ě?41?)sБ?cHj?+8q`?zNzV?l5?X:S?08?j?!?!Kr? ? gb?Gz?d?DS?GNΚ,?$/?!laR*o?ʡ!B?>P3?#D=Fl?a=2?vFs?r 6P?xW?.2X?.3?.3?q ?„[-M?7`]y?æz9?CV3?7 ܇?̍2?c ?KHӮh?>BZc@9HU'(?$5in@w< ?Fs@zG?z@c@?Fs@W=?=@ Ri?q@&IR?,=@bC,?MjO@0$?VH@~?[[@nG?f'|@Bo?¸1e@䎊q?”VWj@@uMU?}Vl!@?^ @3]$E?č[@cS?ƨc^t*@!5`??@YLI(?m=@?R&W?u%@?X:S?Y!~@V`?^@6z?ƷVC@X̷?ũ> @W ?ƈ&c@ ?ƴcI{t@ o1?A c @ ̈~?JM@ $Jb#?< (x@ ZE@OQDěS@ʫ]ygt@p:~-#N@h]kE@͉]x@hM3rT@.@ @jU`A7K@p 7U'(b@8,@<`Fs@&6&-FIl.@JF4g@n%;l@Ir[T@oiD*ީ@ nY#cW@2a|Q_Ft@W,孫U=@{&V@@Jw|@A(ؿ朡bx@N&ԀŗNf@򐫴NG|@#̍⬿I2 E@g lD@N&Ԁ!R<@-unh@sho@rKƧ@={ 1ίY}@abwĿ)T!D(@[BEo.@=p B @Qx?)@պ3]$@HӿS0@>{L@d#@m3 ᛐ@x-8Gofffff@ؓtjA27@9Ev @(VϪ@P8; @yo.ӿr(@˧2P˜@̠lLY@gwK$Jb$@!v6/Y@LiSP@nʿϕ@ʖ]l&k@w1D<@a_Ë@}ke @BT~$TɆ@t!D(N5 D@LWDڐ@%[[տS#@ ȊGb#ᆘ5@=+jo.@p݂u|e@x@eO@؋xW*8Cl@ !-wѢY@AD(Mސ$tT }A5[l7`] L!~| bb˧3u:>/ #¿ݨM ѧ\лok g,'76 \A! K۠'ܫ6z 5iY_a rLfQn&V? ]^J82v@4 G۝-V 1xB0XbM zN{u y-` 얿ڂ" E 9-*E 4Ck'IV ﲪ٤ Ri T ǎY| k\$חNeTuLJm3 o.ӿo~=ϕ֯0䎊ra|Q`,ÿBdJb#ᇿ>PEr 6P&v "}&Iэ%S ; ˼+ٿ. < LD|1۠& ӈhb `{5*85Xy= =%!CV pTҎ`sW ?) :)y d2n+ "˿ѐ٩ eO;.]] bpO4v B[4NP1?l7`]y4?r k~(?ɖ},kjf?\ıY0 )?ȖgL% ?c Sy*\?Tw[0q"?T ǎe?U'(bfł?ha+p&?KZy'(?ț*\c^t*?Njq /Vϫ?yU2 E?ȡ7T7)r?ɥbh]k;?[BEO"?ʗO;d%|?8Ck!vݬ?7!<޿oa?лA?c^J82{?z? IUDR??2I'(b?Ҙ_Fn?{0$π3r?ZFsBJL_?#ᆘ5R~R?;:hwd:?Vt鷿?ȊGd?O7u |Zq?Xg?CP ?ԣ/D)y?05Q.ƽ?ԚIf{_Q_?64K. ?Кu%F vݬ?WiJf3]%?XŬG?B z@c?V. gn? >l?2 F]9?7ɚf[ ?k&j`?}OB"&q? >l4?`sXI{t?@NU?O7u̢a?M@$=񰞘8?7T6%? ~R}?J!}2f?Ԅ?R&V?EwUqL ҉?Ov_خ@98q?&q|? O7u?:S|G|?U\R-p&?hۋq Xy=c?oiDg8K?f//t?!5_Ŀjj%?xܫ6z?7ɚ$ۺ RiY`?ƥLWfB?Ʃ?) EشfP?Q͞%?BE@x?ǀ3rTm?ǭ $ ͳ}?$Jb#b#ᆘ5?䎊q޿ʰ ě?{5* :?8\g*?Yt[ L/{?xB0??Ș $ p$ p?ȹ#wߏG0@?ȲB ?s)?ȱ$5in?|G?ȆhK?th?ȩiu ?8J?ȏ`V?76f?D*0?T`d?L8\?ʑ??")n?۠&?灃d?3)k?NzVC?S;wF?żUDR??j+C?Ĭ0?؟j?-8Go*Z?ڿi,?΅3t?1P?TK:?.3?x?a ?Ž`sW?lD?zNzV?u!?x>-?U2a|?B9C? $ p??_|?jj%?:?doa?>WS?^)5?&V@?'RTa??0#̍?+ J?m=?3zN?\|ؘ?@4n?+CB?wkP?ł?MjOv?{0$?Ѣ?K:? LD|0?=?ʫ\?~+V??>p?doa?:)_?b}?~=?ײ?de?J82vt?#?xB0?M:?hA_F?cA \?|Zqx?\$_[?x-8Go?d?v?#Y5;O?c4?6?#?`,?8?l[W??Q?Y??T6?8?BPr[?,<쿱?{?`jX?"Zp޿u$/?wpy,? G|T:?uMUO!-w1?݂v?앿Ex?l#?hA_F?̷D?8\g?kuy?҈p?ŗNe? ?VWi?uMU?P*?aR*o?S?V?Q?:6;%?ˆp:?Ev ?\ y?>P3?ܜM?K ͳ?)r\=? ?wd9?䎊q?·VC@Ok}:?}Vl!@łU6?uKۡ@^?_Ft@.wpy?D(M@tn?Ǹզ@EwU?X6@n?Ë`@fz9?eU.r@ß`?rGE8@$t?T~M@IVE?f{_J@Jm?),(@?:S@+C,z?@p ?ŋ.}A@E?/@o?5@P?>W@V V?3)k@)^?dž&I@hjF?#Nv@_?*\|ؙ@n?ƅ3ti@=W?@bb˧3?ɪ_@ 0X:?iu @ u?ɕf@ iJ?ȕ*0@ )T!D(??ҝ@ xq`l ?z9@ }ke?ņ5@ 3MjO?^@ zcsl?eU.@ x-8G?Ɵm@ .Se?(@ ȟ@?{z@@ n?//t@ 2I?<ϕ@ ?)k@ P]q?z@c@ As?`A7@ /{J#6@ CB?u%F @ "mHQ?T!D(N@ F L0?sջ@ ?T Ǐ/ek@*\|ٿh3)@\8ij=@f3 4@ǿ98qa@2R&Ԁu@G#ρX:S@|Qο~($ x@H׏]:@cI-_@)sБ҈p;@ѢYױ[W>6@ߏG0@?@3g lؗO;d@X_F//t@<ϖMUh@ ƿ-M@$>@KϿm?@iB'j@@Pځohی@e?@Yпܣ'gM@HJP3:}@vbw\[k@ulB@#̍⬿p`@x-8G¹M@6&,s@2O"} ҈@l7ޔ5TuL@)J/@_Euy(@Y¿ôr2@Mae@͊䥏q!K@%%1u@Sh]ki,e@}2f@e),(@?) u g@}At\@o~= Eb@n~]ce@%椽 Ri@C,]O{5*@?FV婨h@U=ȿ@98q@@ƍ/n@D _7~+@?R&W"@4&q2 F@Ym ֶ @YɿK]cA@ۿM@jfϿq@Sn'j@@(ӿ*")@@ﲪ[k@hFSy@U2a|,QI@' @laR*o gb@ w|1[W>6@3fV?@]^_0zmǣ@~mH8@N;6=@tTݍyЦv@lC 9@1 498R~@\QQ@ѷiͳ|@l oTLa@&IR<쿱@6;%pB@auY!@zxl"tq@m?9.@ :yg@!:@XGNΚ,@+@jUS&@s^"S@4fPi}@fP* r/Z/ej %;A c `s؃4C >Wߓ_ô ѷYM@$= x?$/ S|޾ ( &u%F L +@jU `G kjfϿݔ@x V#HU'(c @D(Ma )y ܬ>B[ ꉿ^5?|  9. 쪸۾LI' r m\ oiDg8٥e@PƿS&%RK>  nج>B[ 6PX ҷlvJlvKׯ:y=cY}z&٩T!\ B֭Ww=VԪsBZ.H [!Zէ\лn ܶ[O7u 7ޓ |o'Ԟu w`D; Uk΅#c 1ڤӑFV 1P8}H cOL ]r/҃fQm 7 ܇U(\) zS&1P TzGsBY -KHӮ*0 6&-?xB0 {~$?O;dZ _??/nV X_F?sl&k R䎊?"& :]y?V2 ?sWp B0?~$t r"??~$t h3?!Bo \(ÿQ ;D=Fɚ$' Q?p 9 ҈p:?+ J %1?[!Z mKHӮ?[BE !(9-?˖Б}kf,{ Z?ʖ]aD(M?QCrq7T`d?ж07E? ~%?cHjx-8Go*?D(MIHU'?J0OY?x>-bVX?LWxqo?I^5?}u?ғȟ@do?0_#x?KHӮh93]$E?v ׈S;w?ωa=1 ^?OQCr~M?*0UuXy=?Pr[ULnm?r[T=[!?R}A5^c^t?VϪ* :?|0Xy=?ȿ b?+$}f'|E?Krz%7< ?0@98Q.ƽ?ǣkP?W}W|n.?"S 5CcHk?f? =p G|?̧ŬGH5Tu?܇Tw\?HQk΅3?͕ffi-?R49.?N;5Xg?`sX&kȟ?ќߤ@ ??>q]u?1&ᆘ5?1;.]ιvݭ?ulvłU?/Ys0?Ղӄvq!Kr?>W6C?r ěWS?(z?C]?`V?ud0+?_?"쪹?6C-?Ǟy?ʚ,fW?=? I^5?jj%?Ѵr2M?o5I?h3*? >?X%[\?{ 1ί%?R?g??ڈzd?`?ܾ (?þvȴ9X?7ޓ?S?27?gwZ?DP?ty?#?}A5Tv? M:?T`d?8K?1eәo?vj? ?2"@?qu!?_Ë?">iQ?ѷX?5Q.ƽ?H˒:?B9C?Q֌i????Ҟ?ӄv?>WS?!5_? ?+CB?|??F?:~?q6?KCV? <`??͉?{?$i4.?S;wG?zX?D;?9.?")n?;K?TԿ?TɅo?C,zx?/v?Ϫ͞?$LD|1?p*?PH?L?a@N?7 ?82vt?sWp?#Y5;O?ڹY?wz@c?UDR??a@N?np&?y|à?1 8C?Jw8\g*?~qY =?d8q`l ?'gM3CP?/{J#?[2m?#M?|ؘ?Ne?*0? >?7 ?zG{?}At>>?۫!Z?nY?FsB?nVX?˒:*?GE84?yЦv!?\(\?)I?ŗ?3?q?qk?A [7?LYt\?\ y@,??@~@o~=? |@r2M?ohی@z?E#M@BFIm?9m@`k{?X%[\@ѧ\лo?ҲM@ 'RT`?fI=@p'RT?#-@w|?4֡a@ y?Sn@q;.]?‡~mH@#̍?ü+@y@[?#̍@QUDR?әo.@hr ?@:?ß`O@z RiY`?ʓ򐫴N@?Fs@ڤ?5?|h@:I< ?0j+@hۋq?32@z:?ʡae@uMU?FIm@U^ t?/Vϫ@ ,WT@ =!.H?AJM++@ 2W?`A7@ VC?=p =@ ?DM@ 쪸?+@ 5?|?"'@ A? ^#@ *1?}Z@ Ї8?79@ 6ҿȟ@@ sջSP -@ 8dO7u@jF5At>=@:ȶ[-@$ xGɕ1@u:>a@*fBwkP@L?_A@t61LWx@Tӝ gb@;dZ M:@ZRիU=@i-4m8@1]U\Sk΅3@Y>(27Ȋ@rz%دx^@o~="`@-Ck@7AJM+`]x@moTK@jUp@J"'>E@Up ٻ $@r2MsБ}k@S5IPqxB1@kC]thM@dѢX/D*@bw\z9`@Ԫ"@EM`9@:э&2 E@dqjV?@dE#np&@eں@hKnX/D@'8}HG|@C̍2}9@mȿ<`@i:pe@jj&L@LX˒:)z@+ud0+AOv_@O7u`kz]@s:}P䪎cI{@.Ses@dZ>iQY@ôri,e@M:|@)ѷKCW@M3H+@Bm (wN@g^ N@e@̿7-#N@nO߿AJM+@LB@c^J8@ngߏG@&$/`sW@LL_|@rB OLnm@ @MsՐ@*\|ٿ@ $ q@ EbałU6@4VWj+ʫ@\+@y5_@{ 2C@ =;dZ@X  >@ >؃4D@%1607@N@ɿQ@xbMl&k@5~g,@xF],s-@Y|i;@ôrbw\@JqiChr!@uinX/#π@d8u%F @2"@/:@ G@_T ǏlEx@ @jU@7+%S@! [75IHU@O3rC7 @~0OYQ֌i/o@0j+^޽@܄?k1;.^@ '76οvFJ@<yg:S@lnmͿR-" -8Y-" !-w1<+ Կ ᰉ'R LPr B : U\Rl oTK jοC\N |ßaqu! Qm݃KHӮh ~Rvߒ 4 ~*?) D h\)Q SJm3ޖg E?*EM` RiY?GG# Cg?`, p=?)I R,R?쿱[W =<64?wkP (M?ł n? ,?¿i, a?-V /mr?ͳ| m\˒ 4 V?ƁE u ?a@N }Vl?y( a?6&, x? *:э%?)m 8?eVZc ?ϴNP1&?,s-\ ?Ђi1?mHQ?KCV[n?ѳmǤ6gw?ʖkv?0#Oag#$?9.< 1Q?!-w23l&k?¤Tx' ?.SeVH?ͥe'>E?P%|ᛑ?k}9X%[\?D|0e@x?8ClZ3 ?Ov_ح (wN?D{dZ?d+ECk?5Xy> :w?ǟ`Nа{?CA0MUh?ƼS;Q_p?%;:iK:?灃sPH?ȶ07nY!?{ 2j8 ?^ FeG~mH?"S 5*%|?wUqKW?͖},}?XOLnnm?^"S9?s\8J?ϭ^؃4D?а{ſ8\?/{J#:?2mn?ժ_??)y pT?r\=xQX'?sl&k ?[Դ:?0fŗNf?ԤTɆ@x?Ԝ#-#>lLYt?Ժs-ѿ=[!?0#̎Ne?7T6??՝^J82v5? ,k~ᆘ5?cI{t-Ր?րuMU"??sGOc^t)?5jnp&?wd: qu?ffffff["`B?T:憿؃4C?pϿT]|?KZﲪ?vUQ֌i/?ӂ+ʫ,]?ԐWx-8,QH?ڐޓ?H˒:*["`B?gwYeU.?v-;P3`?5*8R-"?2^߿-V?>WSw\¹?Y_a(>WS?}At>>k#c?ՠ&?ջ ?\¹Nôr2?ձ[W>6`V?I^5?}NP1?R<6?bw\u g?)sБ}ud0+@?~鷿:э%?ȓ ٔ[lty?ȉ'RTaa?W),i;yR?/ejڐ ?o*ZFsT~M?䎊qj// ?Ma=l5?Y_a(K?[W>6zPH?P?rB¤?:>//?W'?eU.?͉/?{0?)m?ȥ[BE?cHj?[T?ڐ??0 7?ǫGN?Ρ!Bp?Lnm?шeO?灃d?ӿrq6?xl"h ??) ?27?/?ulvK?hM?KHӮ?ܠ0?oiDg8?K3?tq?,'7?Ô]r???P3:~?A_E?ffffff?a=2?bh4?{tҳ?8 ?Y5;Oa?r/m?=!??0H@r?61f?/Vϫ?l&k?<64?xB0?X' ?zG?j+C?FV?1 R?nmu? B??ײ?M@$=?+U?/?L????}A5Tv?A [7?X'?'RT`e???9C?'(b?}H?lC?yg?i̷D?}^_0?n?f?x ?VWi?u"?^޽?]9?r2LfQ?҈p:?'RT?27Ȋ??HH?q!? g?6C-?I{t?D?b?)4? 7KƧ?|1&y?zC\ѿS x?t}^_k&i?_0X: ٔ[l7?A7Kǿ¹M?U{zXe??ݗ+j?},|?9?NѢ?ulp?9.E?P@=Ć?ŋ@ݗ+?KHӮh@Xy=c?ƙ@W ?[0HA@LW?g*d@\Jw?@Q.Ƽ? sG@&?XdE#@Dg8}?9@tߏG0?7ޓ@ (wN?j򐫴@r\=?̟]s@\F^"?8@F]d?鷿@ /4֡a?B؃4@ ?}9@ i,e?ʁ@ [=K^?eV@ ם g?9XbM@ 쪸?$=@ F??쪸[@ 5IP?H˒:*@ hK?LB@ =2f>?rGE@ Ck&?`:@ b}?LP@ z@d?=x?@ .}A?m>'!W@ qu!p>@ ZjjJA c @ !Bo =p@.c ď27@/.ȿ82vtc@1&xg@p8DUGZ2@Hwr<@| 7" <`@ (xl@LD|0ӿs@^ N͉.@ paԡ7T7@0'RT"/@\8,<@=Fk׃QX'@hyU@܉ (xժ@#x׬x@R'(9@p*ؿپL@D|0"&@e@y?@1kl@X>-bcsl&l@o8YK@>W27Ȋ@)r\='j@@x~|᜿եb@ߏG0@sg@?) uy)@rz% [6@Ne߻ @*)t߻ @o5JP@$lvJsP@=iv @۠&₾i@vWiJj@dE#i@5*8 ^ N@߳mȿ Eb@t})Ie@8l"h տVH@yb}]9@@ɿ;yR5@Mi;yS@kϿLPr[@?W @Rf6z@9(ӿ㟾vȴ9@\?)Ie@>-b90@98@ڤx?G@qp俱[W>@[-M@% e@nVM @3唯O M@X ]U\S@Dwm@isБ}y3@!R<!-w2@)I]r@ʁ43@!.HT`d@"}n$5inY@H@qu@m(M@$>@ȟ@D|0@E `V@&hb@IQ&IQ@-#NwCy@SmǤ``G@{ |27@HGÿT@;yRҿ V@r 6FIl@Zx},{ @A~6!Bo@ir ;:h@q64:@G#пLcA \@_Zjjcڤ@ _zX@7I'>l-@a [7ם g@9&A`@_ôιvݭ@4m9e+@ ^پM@6H@qN+@ \,>@@0=f'|E@li2^@v?ؿ|o@ =p,'@Ki;@ 4ڐ@-qu",<@[{P1; C 0j+'(b 4n6 %2IҲL lqѢY6z$nwpyuKܿ eAu_ôب>V#DR?g6077 ܇Ush{ qpӄv ٔ[lֲLP M p:~rGE kUՃ,]O Gե`sX #^J82ԹMa W}WS# N&Ԁ NP1ӈwr 6F #$6e gud0+ҽW @~Wx-8G XdE?Q uO7v?QCrq 8\g*? Sy S?Б}ke ,j?iQX !R<6?ԀuM 8LI'?ͳ(n#OI?\o?(wN&zxl"?ΝsBZ¹M?9DLD|0?}A5T[LPr?Ѓ%26y|à?6fIX%[\?bM D|0?'!Wi*?`A7Kǿިc?İۿ?? oTKVWiJ?9XbMӿN&Ԁ?S 4¿iJA ?oiDg8w[0?Ԕ9.< #?ԉv5B^)?K۠&ݬ?Jb#ᆘcha?ԏ`Vyg??ҝǿo?R&W? ѷP?ӍO;dZ=<64?Ԟ7ʿ?;:hBFIm?Xe+Կ y?Yɿ1&x?ՕfN1P?՜u"3mǤ?Ֆ($J7VC?Ո;D=GIE?|QοVWiJ?wYLNx?y (%o]?Ձdoⶮ}Vm?Ռ /Fs?՝-Vl oTL?շrGȟ@?yg 2I?%ؿP3:?3H+Y ?^"S۵y?ֆ6&-鷿?֢3: ?h ԕ+ŗ?Ӓ8\g&IQ?L_͉/?̖g>P3?İݿ̢a?4.۵G0@9?ɋ.}A*0 ?Pݿͳ|?r\=x䇨M?ǹ8R~NT? 6P& 6P&?ƈzd76g?BZc?9䣃'bh4?i}ԿᏆ`V?qxB1।i4/?iQY?ũg?x>-b?4J?ޯ%;:?E?o~=?cA [?Ⴞi?1?T;?Ms?㏛]:?h ԕ+?䂩 ?Z[(?l&k?gS?ZRD?q!Kr?Q֌i/o?F?U2a|?l!?X%[[?+CB?m=? b?l!-w???},?Jw|?OLnm?2I?,R? 6P?f3]$?fQm݃?b}?,d? |Zq?o4֡a?\X%[[?[l? gw?m3 A?`]x?s>WS??gߏ?ѷY?$tS?&,s-?^Ov_ح?q.Srs?2Ix^?Eoi]9? RiY`T;?I2 EtҲ?9.CcH?j D? a=1?zLA?Wp+tn? >lLdZ?5*8 ? ,k~??u g?8R}?P8?`l o?ø{?-f?Éa=1?!vݬ?KCV?K]?³,@(9-*?_حV@s|O?}Vl!@ӄw?灃@Y|?\(@(ƒ)?JM++@R%1?GX@'j@?SeX@ E?*")@GNΚ,?>?UqK@^0OY?{z@@?C,zx@j0 ?//s@)^? sG@s-?f:@*)?/ej@qxB1?̬1&y@&v?VϪ@ʫ\?۵y@ A!6?!laR*@ R?qu!@ /{J#?ʵ^޾@ Xa ?+ J@ b?앿Ex@ vJ#?,'77@ ;Oag#%?Fg@ 'RTa?İ@ Hjܱ?[-M@$@ ! Eb?ʴfP@ d=?iu @ p&?0H@r@ QH?G 0j@ )*0U2a?ǏG0@9@ ZfC?|@ +@y?:S@Qm݂?N;6@s? |Zr@$6e>'@m|o'=>6z@v@]sBZq!Ks@`N@x>ûײ@#ᆘ5>P@mtyʓJm3@J!͘.@n~xW)@1eәpU@i}1eә@ k~)4@9#w#Nv@ryQ x@ڹYQR@؃4CԿhƒ)@ }ԿӰd@BPr[5;Oag@qCrq76e @tk}9@"쫿ѷX@p:As@?CA0תy@\?r2LfQ@؃4;5Xy@v5puO@@jUڑ}ke@LW1P@uݼK[@@4޸Q@f̢a x@cVލ@_IϿQ@g*OIHV@7+¹M@28@n/Y@ ﳿg8}H@bM⸥[BF@'( @XdE$9-*E@-_˿o'=[@j:э%^ N@np&ڐ @;:in@=[T@4&q $ q@Z<6&,s.@i}傔VW@X˼+@@ȊGX @٩T`N@#fQm޿mq@F?- qv@i4ӿthM@LYt\ B@{J#:ѷX@sPFsB@P%L_@Y 9C@= V@a58 @:BCt^ N@j򐫴e%1@9XbN@s¿Ӹ{@AJM+, 6P@¹Mʖ@ pϿƿ0_@@ECkN,fX@jB9Cl:@k}:<`@ (b@>//灃@h3A7K@%?h0$@K΅3c^t)@rR2kv@iQXM gw@f;gW @˼+ٿ,'7@ xu%F @3ᰊ@[\|ؘʡ!B@SPe+@͞&^ @sPG0@9@Tп$*@#$ݿ:@LLYt\N3t@uBBbXOLnn@t)(@{cI{@EGGLA"@@-Ր@m9wr(@〈PDG 0j@6N1P@<|ؘI^5?} ]}H̿IV OAsa(9 @Y!ƿ 0Lƿ {5*8`l oT ȿ0p sa 빌~($=B 7ɛj S&nmu ,'77<ϕ X%[\P ,k 4m9?>*8ײ ԕ*rz$Zqx Z[(tSMާqpZyA c SK4{ 9&!~sBY~'!W gwcA [ܣ =pHuO7u;D=F,k΅3E B9jj%(¿d~Mژ $ pF.]\İxGo*ZGZx_XOLnmSe7+؆YJSP -Q ?|hױ1eәp &Fzd 'RTߏG0@ jOvq iy 9䣃 EK՛f3]% Gſ0j+ ײŗNe 3H+輿ZIf{ H@rǣ  {tӿӄپ bb˧2߿!5` :э%? > 4m?Îj |[?Ý gb ֶZ?%! If{_?hۋq ҝ?j m?$ '?QX''qp?ѮO"}&vڐ8QqKw?ѢY,]N? ZqБ}k?JL_28?@CQ?ulvKf3]%?.r0_;dZ?cHj1VH?ϕ-?#|E˼,? '/5y(?ڐ㷕-#O?#x m?ȻnwpzqA_E?KHӮh3PH??jUp?'j@?shH?mgt}?zVCM7!=?D/:?'!Wi">j?3t?o~=;yR? |[W}W?y+h?MjOUEw?lCE8\h?$0O4??>p{?Қu%F V`?i4Y@x?O7utr?ӱ+3"?9ֿ׈?i4.۶:?VԪI'>E?*)P3?r 5??Ov_ٿj+?56?b͊rq6?nCy`V?VHD2W?.< êy?>'!Lj?Fsi?py+ I^5?ҋi;y5?Se%?ԹY}Otr?#$6ejj%?a=1pj{?Տo7 ?ձHyR4?a@Nɰ?a@Ndo?մr2M?բZp޿T6?ՙEv v ׈?՜[ qv?իU=v)Ie?|$T~?"`BA?z@c@q?{5+`G?=Ć-˿-Z?gSֿ~|?֒7߿#-?1 RB1Q?^ Feեb?ӪOBѿE?nh抆6&?.۵3H+?a&cI?#x vJ"?̯O My?D*0/l5?˵yh%|p?*)syU?Ov_ٿ!Wh?qu!2_?1&xJM?ڤ?C,zxDR?g?F ?5*8(n?ǐB¤UA(o?gD)?ȀsWpt}^_1?ɯڿQH?Y_a(*1{?ɩ> JM?SXOLnn?_on?ʂѢZp?r2LfJw? Evd,?yƃ%2?lvJ9_?RCa@O?[T8q`l ?)kǿ\R-#?x?濁??앿Ex?ɵ͉/? ?ɑUDR?k;lLY?)r\>?LD|0?T ǎ?Պ2I?d+?uO7u?"`? e?Ƌm?DR?g? :э?~($ x?żUDR??Y5;Oa?Z[(?o~=?A!?”IQ?]k;=?㊆6&?àQCrq?[-M@?D?6&-?,d?ohی?Ev ?灘R? /?7KƧ?b?0 )?6&,?곻,?ިc?f3?+ I?ݬ?k]?TɅo?o~=?j?fI"?),(?Õ$?-V?={ ? VE?|E˼+?`jX?0U2a|e"/?#-#O x?[l7`]?ڤA7Kƨ?ZQ_!Bo?迠7~?(o k~(?S#_o?-e蒿MUh?O;dZb}V?pϿ?doa? 9?_?8??P|?PܜM?"&?a=2?m ֶ?RT`d?\M??> ;?!.I?I'>@[{?qK@#x?`A7K@_?͉/@M??x?@I?'(b@Y_a?`sWq@- ?1P@??óRC@lC?лnwp@v5C?s@q ?X @/d9?LYt[@9.?]q"@wd?پM@Z,fW?ɇ?Ҟ@+jg?uy@ Z[)?:pd@t (wN?^t)<@\(?˗9@-w1?@{?ͤ Ri@U䣃'g?ͿH˒:@鷿?a@/^ G?̏27@wUqK?4@*1?䎊q@ UBB?̵?@ -8Go*??) @ A!la?͕f@ Otr?͢Y5@ ı?Crq6@ Zjj?̱$5in@ 3>WS?͉.@ eXO?Y@ Jw?LI'?@ 2LfQn?ʶ%@ pȊG?Ȥ~鷿@ ߏG0? k~(@ e?ʖ\л@  c? (@ (z?u!@ #c?!laR*o@o~?i,d@FIl?o.@>7ޓ?z@tR<64@Y2¤T~@ǿF@-WwpT@Uy(ڿ< @rsPkz]z@q`l 7ɚ@ ޿i/n@RJ@ 9m ̱F^"S@L_ V@ʴ,Q@#Q¿M@[5XybR@iuͿЀ,'7@6&,7 @%߿%@bh4`,@i,en@*0ԙ؃4D@״3Ԉzd@gӛ=K^@ik~(k~($@c<`Oag#$@qi7@$OQCם4X @E e%1@.H觿+ @ͻY-V@ިܸ' @R4ܥLW@L@ί%;ދC%@ h3ƿj@'@Xh¤T~@ Z[)DM@QuR~R@q1㨿l-@8-8Go*T~M@u:>*0@"m#x @aZRT^@;yR53H+@ڤ*r ě@ D a@N@2k΅4{@YZxZRD@xϿT x@< Ck@_|@c41@  5Xy=@0ZpU{ 1ί%@Rϕn@uaڿS&@ $ pJ#9@,<㎟j@ݷk;=Ǹզ@K#-@#HjݿZRD@GG#`@jy1P@u9m ֶ@k3zX¤T@%;w\¹@IOQ+ J@%ٿr2M@+ҿ 4@,=*@B I^5Vu@fT ǎ+jf@")H!laR*@YsdyU@ҲsWp@1eԿ*\@y ܇T@C9@hc^t*v@!R<n/@Y2f;@ٻ 7ɚ$@#xP*0U@& L/gfA@LvJ#Y@s]9sh@GN@0?g@. @~=j%@7ʂ*@^ ;$tT@/e#Nv@4֡a4m@׬E˼+@^_0U8K@)GNΚej@Rq6tҲ@{sպ{ 1ί%@VԪk@sg@98@ N˿<ϖ@h3*Il.@ A!lᰉ'R@b=B }6̿ $ oa+ `FdL/{J P1;s- @IQ?z: /ǣ  ҈ J82vus % )Ie\ B|ORO"}~|ᛑH@qIQ =޽f30*") (.ǹXy=ؘͿrSn9Cſ;.]]HLS&sߝ^J82v/ejH˒:\XOLS;wFtyn v ׈RJm̢a5ܗO;df'|F($ xG@c^۸f:ܡbxHKH˒̸ؘOv_خhA_F~RvʿvF]%و+-JM !BoՔO M Z[$Jb# Q֌i/Դ9XbN DR?g thֿk&j _#xd+ 7%םɯ zcs҅H .?^ N ;D=G?v ׈ ;:h?FIl e ^?~$t 6C-?0 &I?ȡ7T7 ֖2?\ı t)P"&?iv!|Q?m=SP ,?8YJ:~?]q"sP?CA0أ/D*?ӬGG#s*?MUhƓa@N?ƼS; $ q?X=v?6;%o灃?ԉ (w4i?Vl!-Ǹ?gS84֡b?҃4Ck? xF]?#cm?1;.^8?vFͳ|?Ҙ $ p$/?Ǹզm\?Ԋﲪ◿Zp?o~=W gb?VD@c^?Ֆ($J#d?2W6?K]c $?.]\UGZ2??d9?%ڿ'(?E˼+ٿrSn?`sWqt}?iY_aRJm?7ޓֿՐ?E /K[? >l#̍?eO K3z?C,za@O?@&8E? (wN'Ԫ"?^ N˿hr!?}At>,d?A [7߷AJM+,?ɲ-V݆?r2LfQ.ƼS?hA_FLB?ʤ*ł?qxB1Ե^޾?n҉'RTa?ʜwkPffffff?lLYt\̔pd?H替Y!~?;%o^ (wN'?<*"AJM++?A(oGXd?=Ć-˿vȴ9?.2X- ?e+a?gS?.4?*\|?5_õ?KI?_Ë?"S ?ɩ> ?İ?}ke?NT?KHӮh^?/w?@N?еh?Ԫ"?},|?ȍ[?>pu?<ϕ?׀3rT?*cP?Ë`k?ǃ,]O?;'?"`A?C\N?zcsl??>p?_{?Y?o?pO4?m\?ォ ?ʁ? ?]U\S?7ɛ?[-M@$?柩~+V?¿LPr?,??ײ?ȊG?f?s?z@c?c4?򐫴N?`A7L?;%o^?fA?#π3?s?;wF{?x???gߏ?h3*?{0$?gb?K?Q?n?#?ygt~? c?U=?ԕ*?GN?o~=?6?}At>>?u?"?;D=G?U5Q?n?s_!-w1?-b*\}?f''(߹?7~X?lC>?07*?Yuy) ǎj?2@~?%[BE?y&A(?Ov_?A5Tu? gb?]\?6?eh?R&V?4Ck?j%?Y}?<+?OB@"0?9@mKHӮ?,'77@ՆDR?h?o@Mj?½{ @8{0?`V@zS|?ÐB¤U@@bh?jUp@9.=Ć@v%?p @٩?HK@) ?_Ë@!6?ß`O@vȴ9X?˃{J#9@kU=?D)@t?uMUi@m"?Pܜ@I{t?@ V?^)4@ J#9?T:@ qi?},{ @ W#d?iQX@ :э&?̚VWi@ İ?f3]@ :>B?ɼiu@ ,]N?~6;@ q6?ɥu@ A7?< @ p:?m@ j?#x@ Xe?BY@ >LI'?ã @ $/?TK:@ y=c?{@f{_J?*ީ@fx?p*@zxl"h?a@~m:ިc^t@ ̷D*)t@ x?27@0(߹9py+@j+CEwUqL@szNC@*0U2(n@2^ 4@A c + I^@GX+$@Tw\?@płU@wN&տl<@n3ttj@ İ@p P{@bxЂ},{@W#dr\=x@CQҊԿ @=1p7ue@r(k&j@(jܱFkȟA@y#w 4\@B̿Ԭh@*)tj{@2/Y߿3ߤ@eO]9@I'>j@Tw\آpO4@ʖ] I^5@Ck&ٯ@jfϿ)k@'Jw%@Yt[fQm@"}]cA @Go*ZGu"@hֿj@:>B>6z@+aD@ g;'j@`Gf'|E˼@hͿ gb@NP1o~=@쿱[Ѣ@#9wd9@OV`WU\R.@whIn~@ ֡af@#P1;@`:٩T"@+޽@ c S6e @#S&¿zd@E 0W>6z@i,<@^t)*") @Ŵ$_Zٿ@~@M_@u%F5_ô@8Y¹M@.!R<)k@r&V޿k&i@^ N҈p@a$5 [6@K>//t@Ho\лnw@e%1z2_@~+{5+@@c^5@>np&}A5@blvJmu@n/ |Zq@ ӿ&@͎[Ai;yS@l\Hjܱ@ᰉv-@:NzVCNP@^fEM`@eOV3@]k;$@Z[(̿ (wN@~Rv q @+"pO4@=DUGZ9C@bmO7u@9Xbd'gM@%;ygt~@K3ۿ@(z7T7@!Kr$_Zj@H]k;}2f@o?R&Wިc@R<6}@BHU'(@;'p:@ [W?O;d@43%q!K@\#x2K4@ sh@A2^_حV@sMjOjF4@E˼+tn@wUqL}%!@1,'76 .]\׈  M7ޔ)4㕿Ewr2M^5?|?&kȟk&c zҝ&_q]U\S}^_0g ֿD*0]+j S8q`lҝ%HMEv =!_ôr22LfQ&.&#If{RX/DwN&ԀłU6=By}1ڥ{ߑhr y;:h =ަY|hr1&x`A7KǿݻYBulE /%&ڿϕS;YŬGH}9@qm\.ǹ,jڀ,'7ffffff =BDۿٔ]r"w\ÿdoa [W>بmqbc g*2LfQn ׼UDR? FsܿFzd osлnwp J[BE $Jb#ᇿ spy+ $tS*)s ^ F?Ʒ`, &I?Ǡ& ygt?nY CA? xF] ?}9 |Q?ļ# :?śty ?p* X_F?=[!Z *Y ?ߏG0 ?ϿT e?&x }KZ?ǙË` r\=x?zcs vȴ?,'77 l'76?ם gb >pu?ʾi; k}:?ˣ fB?н RiY@?(M?ײ?͆DR?gJw?VϪ͟ $ p?gb|G?%'>E?VH ?73ڤ?0+@jU{ 9&B? ѷdE#N?fAH*)?̲B p ?bQ%S?SeXOd,?̣ =pKHӮh?̸{0ҝ%?.S_;dZ?2a|Qʖ]?ɽv۵?0X:T73?̶07zS&?RT`dGz@d?VϪKC?D|0?kP{}A5?ejai?1-6U\R.?k΅a=2?gߏG;'?(n$_Z?m3 Aѱ+? 6P,? M:]U\S?hb_? #eO?z9`Y}?f3]mqb?+e%1?i}ZFsC?ӡvݬ(?^"H`V?{mzG?8Ck"r/Y?TɅo/V?Hjܱ9XbM?wYL?jj%4fP?(9-*??¤TB؃?Qdty?ҀIf{_^"S?tSMj0H@r?¤T~/V?8}H/{ 9?ӴxB0 /^?cA [Y ?,'76οÕ$?ոեc V?udyHU'(?BÿIb?L_@c^J8?Q¿at?JwsP?nY!)sБ?*cP0OY?s곿dyU?J /?G 0j+Y5?nCy)y}?֌D"76?֏`V?CPfB?#̍21-?&IRu!.?ygt~cOI??lq?\N;??M??=?VWi?&Ԁu?#? Nʗ?i,d?ͳ|?3??NΚ,f?ɓ ҉?ҙ؃4D?\>?>P3?[?+y?K3?sБ}k?ȁ>?ۻ/V?)Ie?QR?t}^?#Nv?eU.r?Cy?I?aR*o?S?tc4?zG{?2"?27?@$=?.?Ę $ p?槆&?*\}?l5?gM3H,?谉'RT?²kv?{?GZ1?9C?d?&?VH?S$?sպ?rq6?H?|ؘ?SMj?+@y?9_?}6?;5Xy?ؘ?-e?e`A7L?r[T?}A5? $?EwUqL?},|??|G?NT?䣃'gM?x??/v?Mab,Q?#$6e{R}A5?kp&I;:hA?Ō /?$D?1[W>6?쪸[?% ?>(?27Ȋ?vF? V?f'?䎊q?'?u/ej?.3?΅3?Jw?c>P3?^ s?K?b?gM3H?e@y@'ud0+?yU@tc4?zN@D ^?P]@G 0j?~mH@Iԕ*?Īd7@bM?h ԕ+@n~?. <@;T^?Ɖf'@rvtc5?eڹ@F^"S?ȴ:@j?ɗHH@{sպ?E@?ʧG@c9?VϪ@R?th@q ?ڐ@q R?~Rv@%?Η2^@w[0?6;%p@j ?͢r/Y@ |? |Z@EX?EwUqL@n?3:}P@Oag#$?2^@bE?7!<@ #'gM? M:@ =p ?ϳ@ HQ?ϑd2@ k I^?κ`@ /s?̺s-@ [W?F@ b˧2P?|o'=@ ?ɘJA c@ ؃4?ɲ,'@ Sȟ@?`V. @ LA?B@ o~=?L8\@ 3?Y2@ ~ߤ??ƜwkP@ İ?!Kr@>vȴ9X?m@&?xF]d@o~=?@VWi?nCy@P3:?vȴ9X@P3/^ F@"*߿_䎊q@_g?- qv@4?䣃'gM@i,e+@RO"}ʂ@>//$5inX@ιvݭhr @},{ 9.< @b`kz@ ;Oag#%@sPHč[@hCP >l@1eԿ- @"pO4ƞnp&@R;:hA@k+%4J@XbMӿЛS@hƒѪ_@wY"쪸@!R<6ҥi4/@AQR]N @KHӮh۵y@%8YK3 V@@> sP@jܱF@W) oTK@1oT:@3Jm3e@`ڤ@_؈P*@k&jm@OiDg8Nvݭ@5Tuݱ+@sБ}k9.< @;,]ݟ+@<Jw{5+@ȟ@g#$6e@flD@. 1@9.b@#w0@@:э333333@eٿXbM@yR4뚿 Eb@oiD"0@ם gϿT @hۋ =p @d>Ne@@ɿO"}@=Bbw\@1p /@SߤYr@u\R-4\@Vuvi@@98eO @aڐ@IV)^@bY2@Ptqq;@S;@oiD;.]]@$=U'(c@ڿ ѷ@OX&f@{mC@k΅`d8@`}At>>@:&z$LD@]p =^޾@n@`kv@d%@!}@ Z:v@1,'77T`d@Tim\@xhv@G.@E~g,@oĩfQm@ cHjӿ Sy@-_˿ k~@RNQuy(@w`]x#Nv@UDR?7-#N@qK>WS@淪%ؿ^T:@ % pϿT@1o6@Wz@c1zO@}hƒ xF@}9ݿ,@;yRҿ@5Q.ǿQ@Ϫ͟ޓՑ@=P{@d">jFze@bw]u%F @;wF!͉@p ě+6z@#d3zN@h3Yrm3 B< do:O"*0U2aimǣ  /2vtc5i4.ܿ?) !Z㺲{a~$t/nBBoKu\R-*")j/ S$`A7KǿNxWU7~Ir\=ԀuM>0OY{22LfQYr%%1IVMa?ײ cA \f6XSj@0#4[ `]x䎊qj07h]k;8K,d:>/0p&R~RIr{5xB0OIHV27,k}ـ3rT f{_S& o]؉f' jUpߤ? W}ד  v[-^) P8֞u *cO#-#O  0j+թg ۖ($/s ߤ?4AJM /s?gS N&Ԁ?|o'=\ %1?­-e Il.?ã c^t)?ę̢b 7`]y?Š{5*8 HL?ƞFI \лnw?Y} '!Wh?n (b?L M@$>?ʂVW pnC?($Jb :w?|G ;yR5?4.۵ % ?*cP U$/?̷,QI "쪸?̓;KD?#9??Ν`}2?π3rNA c ?ϗ9?KCWS 5?k΅3r/Y?r ěȟ@?ί%;-#N?ZݘH?HG D?гu:>E?0@98ƼS;?MjOپLI?CcHD?2 EwY?I{t?'>E?ӐB¤U- ?kgqp?S;wF.;?ԀIf{_#?7 ܇u/ej?Ӓ8\g (?~g,&?Ͻ=Rd2n?$_Zjjwpy?ϰ_@S_ô?. <.3?p 9?К:э& ě?Фk*\|?ЊG|c >l?S;wFGǸ?ߏG0/Vϫ?<+iJ?*\|ؙ_I?ʹ% GZ1?łU5Z1?K۠&ir\=?3zN'#$6e?;5Xy&A)? 8CO M??zd'gM?,o6?7 ܇UNΚ,g?ԤTɆi/n?6&,s.DUGZ?KZy`d8?0U.r?ԏ`V_zNzV?PܜMѢ?r2Lf 0j+?U\R.e?`\?y Yjj%?Hod3?i"&?[lsPH?2a|Ql oT?qu!SP*?f'| ,k?]ceKH?=bǸե? ѷ`ﲪ?Go*ZFnp&?3)kƈzd?8/?RC'|E˼,?Y!-b8?Զ07]:?ҕEwٿ%zxl"h?)Ie?g?OQCrUhƒ?7`]xq6?`V. d9?Ю}Vlp*? ~|?\ı)k?рPƿ#cW?m3 A!y|à?'=[!Y ?вLP 1ί%?zG㢜wkQ?έ-e[ ?ivIV?˲V߿lD?ʜ#-# B?kİ?ɫ8q`PH?ɴxB0K?oiDg8UqK?JL_F^"S?ʲLP($Jb?QF]c?ˀ4m9ݵyh?k&jdZ1? 8ſeU.?'RT`eɯ{ ?DUGԅ]r/?6V. ?ˀ4m9>//t?dZ1`VԪ?ag#$6/^ F?bR˒:)z?SP ,l1-?-M@$>>=Ć?P3:~鷿?T:fOv_خ?fI=?N?z$L?t[ ?ʽW?|Zqx?ʲkv??@x?- ?R<6?Wwd?獸?ĭ٩T"?}2flLY? D? 8C?݂u?5*8?g,?R?E?\3rS?n?-M@$?a?E84֡?ڤ?Ր?Nx?&kȟ?OLnm?'j@?t?r 6P?[l?DŗNe?}^_0? 0j+?hPH?S#Rn/?,fW?:?FI?07?kȟA?nY!?Jw?_Ë?LD|0?y|ßa?FV?Zp?l[?Ë`?ﲪ9?0OX?an?_Ë?y ?w1?J?_Ë?{tҳ?c ?hHo~=?vX%[[?=!?j+B ?-f#̍2?LłU̸ؘ?o?R&Jm3 ?0H@Έ =?VWiJ?aʖ]?Ho?~Q?پLI(?b͊?H*")?:э%? 0j+?fQ?]U\R?E84֡?\(?3??l//@G 0j?ΥP@{J#9?28@ D">?JA c @ ´fQ?ިc^@ Y5;Oa?ϒ:)y@ > ?͡"S@ [{?ިc^@ @N?o~=@ D)?)Ie@ 3LA?ʕf@ S?s@ _o?Vu@ hۋ?`@ Y2?ǩ*0U2a@ 򐫴?=Ć-@ ڹY? 7!=@I"S ?d>@l&k?ҲM@=ڐ?ڹZ@X? eA@ ,k~?[W@ )r\?q!@Eڹ?)^@da?~+U @w?E@s?m3 A!@8q`?䎊r@^_0|C,zxl@ѢY䣃'g@҈p;B1Q@#\N¹M@X1eԿS@yrGE8vi@]cAE@< `@) DN;6@U!.@&@o*ZFsv@ʁ x@lSeXO@ ,dM:@i/n)^@/fP//t@31zOB؃@5Ϳ`V@`s0@98@1ۿNP1<@ S$p @@^_0 (@wrGR&V@hb$LD|1@A׿ 0j+@DUGj+C@a˒:)z@+ҿgߏG@2 奤i4/@7ɛeU.@7uewkP@Tc4:pd@p"&f3@Hӿ&q@ڍd_Ë@l9Fkv@(䣃'gM@!<׿vݬ@BC1;.^@Xe,+@y@FsܿѷX@7@ӿeәo@LA@dƿl-@V߿,d@^ NܿI.3@6Mdty@XJ> @zR}A@`N㓿;Oag@=B@u%F :@!WhB¤@'_տ{@J=B5 D@mͳ|M@$=@=d=@$_Zj{@z@ca@6;%\ @%BZc @B6;%oE @f L/@<` @zGT;@LfQn!ZS@Y3d3@(zDw@?#xUb@d)eK@B uMUi@9.4Ck@f\лo@5;Oat@m\@jU@DyUn~@j\$_(o@gS˼+@@afj@'@0EwUqzG{@Vn~< #唯O ulvމ"S律i;$tSwd:d9@$=GŬGf4K0H@!-wA [7}9ݿjo5ҿ28If{_&ڿ?ײz`V. P3:oG0@9auc灃}^_0X%[[տ<쿱[L@ ?vȴ9ẝ`3"޿ygt~&`V.8\g*^)'j@ >WSpdtj~doa3 VohیtyŗNbb˧2X"g#$6e]k;=Gnv(PܜY_a(եsPHA׿UDR?hS&a@OSRT`d:p`A7]-VOB9:ҿί%;ٿMs KJ! @M: p*ؿ gw > M@$= Y>(uO7v 2a|QNT &Ϫ͞ ⌽DQ.ƼS Y ?żK[ ' k?ͳ| t?^J82vu p&?^ Fe .Y!?ć# )Ie?ňhb "?Ɲ% 0 )?PܜN Qc4?'( B?ǣ  RT`e?7!< M?y=b i}?qbb˧ 2<*?Ve py,?D=Fk o~=?4J "S ?d7 TPܜN?А- q T?ЉLD|0k?V?4.۵?"쪸R,R?`V. B¤U?!Boeڹ?nD/m? 0j+׈?{0$jJL?ŗ/#cW?ulvKﲫ?;wF{#OI?Zx_՛=K?L8?6C-jF4?Ҥk4$5i?7Tg,?|Q 0j+?mqեb?QHY>(?Ժ`!߹8R?#$6er\=?Հ |Zr;?r2LfQ qu?Ϻ&pP? ěT,Ex?ֶZI}޽?FgCdo?Т n? ֶZ8 ?tyڐ?Ѽ+@yn?ѱth!Bo?<64]!5?r[T:?FzdxW)?S 4k΅3?:)y?`Vz^5?|?sջ6J"?АեbS?nVX5 D?\$_?ӯr˧2P?^)5K۠&?հd8\? xOtr?[TG 0j?o~=*ި?ՖY|z9?HU'(ca?,k}qp?EiJA ?k np&?I{tӿ_1P?lL?ԑ)F?^ եb?Ceڹ?֛R}A);D?ֳg lH?֪:э%'-?`,ʖ\?_FtNv?o?R&WY6?֊G| Z[?֟h3a?֮G5 D?iQX(եb?m=;:h?p =qq޽?^ FdE˼+?P*"&?%1Lt)lLYt?S?<ϕ?P]q?ϿT ?Jw|?_E?@~? (?333333?ν{ ? H?Ѵr2M?<+? c?x?ZIf{?z$L?حՐ?ʚIf{_?oh?e 0?^ s?Ov_خ?߻ $?7!/0?ǟ`N?fI!?܇Tw\?,R?1e?D(M?럾vȴ9?LYt[?D=Fl?DUGZ2?҈p:?ҝ%?[?f?*[B?K۠'?^ F?hƒ)?IQ?m8Y?Y!?yЦv!?W}W?]yЦ?ᰊ?O"}?ߤ??6z?$ xF?BZc ?;K?@~? $ p?k[-M@%?A_E?~鷿?/l5?l?'2P]?)y ?ݗ??ul?x??ڹY?U? Y?ǣ ?%o^?ŗNf?P*?+@x@앿?KHӮh@]-V?b͊@!~|?EM_@=?ǭ $ @}W?kv@Tk&j?B؃4@GNΚ?64K@EXdE#?̔@?XbM@ 9?%@&?8Bת@ 򐫴HU'(@ N˿7T6@ (Q@=氿D@W}Wں6;%@ʖϪ͞@e ؿ@ƿm\@>E&@6C-CP@cO sG@q|o'=\@XOL(zc@npϿT@nPbw\@nr2L@);P]q@ +CXdE@*6&ﲪ@K ~п&.@kgwm݂v@LYt\v5@Z[(̿׈@X1zN@cK۠b8EGd,@İ]@ ٔ[s@7u7 @1-}H@TK3ۿ:@w9Ck@G{D*@?>np&@_Ee@x@6eۿ [@(S;wG?>@K%-Ր@oǣ <ϕ@thKhH@`HY!~@lCfJ@7 ܇UrQ@$`kz}H˒@IDg8~p @m+˿D">@P]R}A@rGth@6#-*0C,fAԿ yQ[l7`Oag#$C #yḍȴ9Xb.]]3ti ҉At>=Eҿ%!S#hHzu gGG#1 R>|o'=`VT!D(ʫ]eXOLA7Kǿ Zqtpd飿HjܱhM2^[0$Sy3O>'ڐB I^5ʁ41`V.'A(o k~KZ "){f:tqpگx_0U2a|`Y2}H̿P ,k~ (@^y?=ulvݸ<ϕR-#0]yѿܩ7~iQX!5_Xy=ٿۚ$'T`dÿe%1nVXڎ 4YJDUG%;Kق+ʫ 9z9 >BZwpy, |O򐫴NQ ٔ[nY! e&ڿ̷D =<64fj?%o]X6F?΅3tcڤ?<ϕqu!S?ЋxW)<`?Ϳf:?},|FV?ڐ.?CA0 $ p?۵yحU?ЕBBY5;Oa?8YJJw?ϛ]9t}^?η+ɰ?E =1o?]N 9C?:S|C\N?˩*0U2a_ô?RCQ>-b9?8CkfI=?Q27?ːnp㠺K?nnX/D?GG#1o?̠//v?,{ Z\n?Z")n?$_ZٿA(o?̝.𮿺IOQD?S;wF;L?uMU5? ,k~?R}A5?B1?Nt?>-b8?\?ᛐ?/s?ᛐ?L8\?B1?K]d?\Nj?xW)?:6;%?,Q?]9?rq6?1z?NxW?.>lLYu?4X!?poiDg8?27?DŽ#ρ?*EM`?5 '0?|o'?%? :?Б}k?Q_?Ew?P?5~g,?>W?uMU?p*?TuM?o5I?Cv ׈?n?:}OC?,<쿱?Jt}^?ҝ&?Q?zN?pEwUq?O7u?1;.?qK?CV?R4?Ck?1?n.?-b8j?zN{@(?s@WiJ?k΅3@پ?{5*@V9.?[W~@w1?A c S@?ЏF@SP ,l?)^@ 4?Ѓ%2@ 4m?3)k@ `A7K?Ƨ-@ +?φ`V.@ ag#$?ΠfE@,'7?Ĺ#w@1pO4?{@U2a|?پLI(@1?hJ@,% ?!laR*o@K?H@oa?RT`d@3?~|@r 6?:@Ȝb? @If{_?ʖ\@;dZT&q@wd,<@_LPrpO4@o#$6e@:)yZp@O;d?;Oag#%@Mؿf:@ [W~lLYt\@rq6k@+Q@DIJB @Csl&lA5Tu@5nY@UDȬ\ @;:hˑFV@Ls-Ǹզ@ty@fQmhM@&I6P%@ qiCѯ#cW@8?F"@;l7`]"쪸@sБ}?) @޽fI=@xW)ծO"}@#wkժ_@|ݿmq@;dZѷX@bh4;'@7ɛڣ'gM@ݶv @Ë`U5Q/@)4ܩ`@ qvP1;@!laR*oݑ>E@C{J#97ȊH@1eә㰳d@y|Ŀi}@.S傩 @ ?>pο{5@!uy(B؃4@"Y¿Nt@LI(V2@$oasPH@;ײ]yЦ@YP7ɚ@xCkLB@¤TS@5IP@ڹYп'(b@0+@jUW>6z@LL_D ^@y (at@0SP ,@Y >{5*@ K?) D@(Jㆃ<`@[-ҝ%@7ud,k~@jܱFv_ح@ *EMJw@.X/D9䣃@O4֡a!~|@p%ǿ;A@7U5Q/@䎊oiDg8@5IPwr@[l7`Kr@fKC@6L*o?R@X<ϕտ;yR@y8qa3rT@-M@$xW)@Ϳ-Z@iBʿCA0P@)kǿXOLnm@!27li@C%2@eSٿ[l7`@z@d2P]@#9wr(@i/nCV@Ѣyg@9Cſ:@3ȟ@0@Vtc4 9&A@y8R~>(@#'=[!@r 4$_Zj@)n@NU@`A7LK+@@(9XbVWiJ@L"h ԕ`7 ܇U@oIHVi9Y @eXO/D)@{|o'=#禵 'Կ _@Ck&mqb aR*o?x-8Go p2I Z[B¤TaiJAQ |߱[W>l7`]yտEwٿ$LD|1rz%7ɚV. *0lvKMUhƓԿ 8\hf;㽺 RiY]9u!.پLI.< zK۠'[ moTK➭Ր`A7KǿV`VRz$QD*ǣ 62IuMU(jF8JЦv A [ {{`!<׿b˧2PŬGf3]LWߩ*0U2a $ pqu!w1ލ2"UϪ͞ŬG37 ܇sБ}kc4X/DZIf{?п΅3tPB ڷ4m\7ɚ,?71١o$tT JL؍2" ?eK ?a E jX?ȊG 6P%?K3 {iJA?: O>'?qi 0#?bE 7?/s Jw?6e q$5in?.S =A5Tv?>P3 M++?n /^ ?Q.ƼS ~ (?ʌD" @j?˺4Ck' 0@9?ڐ ׈?>//t 2^??z: g(b? 607?Ћ^ oh? 7! j?X:S IQ?љo. dty?%o] M?vȴ= x?OIH~6?I^5?}x?йY}Sj@?P3:}j?#-ز̷?7 }9?^޽u??ʖ]M:?8!k&j?6CgwZ?ϸ<ϕտ#?0@98WS?Οmg?tjԪ"?aewFz?ŗNeE84֡?C,zxlm?>?R~Rw炩 ?9Ԫ?灃i}?.36C-?x?)$5inY?mHQ If{_?F L/L8\?͘.>(?ם gb۹~($ ? VEo*ZFs?&IQ3zN?*")٩T!?\|ؘٔ[l7a?*)ШTɅ?U\R.c4?'(b(\)?ͩ> QX'?ceO*1?[Կ ?C]?֡af?dPܜM?^)5? ?Q֌i/?P{?@x?ß`O?܇Tw\?) D ?L?vF?/w?ǎj?ۋq ?پL?ۋq ?$ p?i?|O"?ws??6;%o?/{J#:? c Sz?܌i/n?j?)Ie?Ѣ?'RT`?̈P*?2 F?8J?i}????z? ԕ*?T^?7 ܇T?i4?5Q.ƽ?5_õ?˺&?z9?ʏ ?ŬGG?Ȝn?G 0?э%S?m ֶ[?řEv ?`VԪ?&cI?Cy?Ÿm?C,?'RT?e@x?6e?Xe,? ?*?4֡a?5~?qu!?`,?<`?/l?>-b8?r(?LW?!߹8R?//t?6?y|ßa?4m8?Ho?=Ć.?/{J#?vFJ?pd?A [7?7~?"?k1;.^?E?'|E˼?X ? ɰ?c^J82?F?[-M@??\лo?:>//?Ë`?nO;?0?|hs?t}^?*\|ؙ?iDg8~?@98?iDg8~?nwpy?_o?1?s? ?o?-*EN?π3r?2"??Zp? (wN'?np?2m\?k}9?>BZc ?NzVC?A!laR?wpy?> ?UDR??//s?;:h?͉/?a??Cd?U.r?HU'(?@4n?hM?'RTa?¯%;:?sh?7!lLYuJA c @͎[ŬG@d2=@P ,l@1Kr(@Iy Ma@P ,k@N+HjܱF@K!Z$_Zj@N < ԕ*@^qJA c @}}H̿锅]r@5Xyπ3r@ ٔQX'@9jj%?g@Y|f@z;'@}95Xy=@ =p׿#x@O^ Fǿեb@nxW Eb@5BٿfA@<ß`!Bp@]`N㓿<@~y c S@*|Zqyg@J\崿ݬ@jfB4J@1;.^+6z@ϿD*0@҈ο^ѷY@I^5?vȴ9X@ D"27@-@$=j@@MRJ˿=Ć@nmuեb@vɿ,d@䏿6;%o@Л*9@u!S,k}@^)5ATɅo@3WpUQ֌i/@T`dhA_F@u{z{ Z[@?) ͳ|@rGj@;:htqq@*x@ygЇ8@=˿ߤ?@_P]Y!@7m]@a*)@Y!9.@S; pϿ@Ӯh]++%@*m3 B5*8@MEb>WS@oq!F-@Sn¹MEם gp*>i;&.62IzN{.t&vD*0=1eә\}Vl ]cAc40OŬG+̢a Zohی`,ÿ64KKƧY }9䟩~+V'RT`TuK A!la/Vֿ" 9&Bs4 <(zcK!5sf3O"}e.r0G#ρVi׿ >Hh3*V9[l7agߏG*t}^_ 9&Bo~= Ua=1?) ?|hsHQr2MXdE#E ŗNeqth3:}PN;5Xݠ k*fB'/W7}A5Tv9m Ԫ"v\(\/^ G% r-Vl?=[!ZVϪ͟??|hs ~?8\g̷?CV9m ֶ?Ҕpdt}?4X !-w2?$D~m\?'/WJf'|?nb?6&,R<6?з`,>lLYu?Й{ Z[?З{H&c?YgT?ҨTɅl-?CA0:pe?֍ɰ=v?P ,k΅3?;yR5[a? pϿƿ>-b9?؊G|u%?C,XOLn?RCQB?+$*\|ؙ?ھs8q`l?MjOXOL??|hsX/^ G?ۜ8J˒:*?-V3=?(wN&տT?LI'?d?jF4]$D?܋[-M@zcsl?ܨTɅ$ȟ@?ܶ07ѷ?;Oag#%.]\?ڟvȴ9#wk?C]g-"?hۋq g?؍ɰ+8q`?c4FV?ɯ{nD?ْd2ninX/E?%[[wr(?ڽf'|E̿|hr?1zO6P%?Zx_7 ܇T?(nd9?ZݘAs?N&ԀpD?Ю)sБ>?1o>=ć?.H*[B?Y`u ?ԀuMKۡ?H˒:*Mty?ϲ9m ?y);?&IQD;?7ȊHH@q?61ft}^_?% D?*?28 u?m3 A!`N?j@i?ί%;:N?;yR46;%p?͹o5ҿf:?41 V?27&?uO7u);D?Y!~>(?oiDg80#̎?̵5`?`:L/{J#?͘JA c>BZc?[TWx-8?d7ޘ5?έv2I?sPܜ?pOװ ?ĿՄM:?FZRD?쁿%|o?s͉.?ξ7ޓdoa?Ή"S _Ft?EM_Xe,?hJqbb˧?{ 9&ڤ*?%炿61f?>P?tҲ?8YK?U'(b?pa?k?j?Ր?j?Ƹ[BF?j?˘s*?y|?7`]x?䣃'gM?қ(z? RiY_?/ek?CV3?@~?΃B¤?ن`V.?εK?hH?˧2P]?f?z$L?/v?Ω`?T`d?Ξu?{5*8 ?Q?2P]?Ϲ~($ ?UqK?VԪ?5~g,?О쿱[W?#cV?Й؃4D?&,s-?7`]x? Nʗ?ΦY?y|?{5*?ꐖ?C?_Zjj?k;E?bw?pO4?i?s?0OY?P3:?08?Q.Ƽ? i;y?Ov_?a ?Ew?;.]]?8\g?n?+j?);?>W?sP?~$t?CV?X%[[?7 ?At>=?|?|O?5I?K??^_0?hۋq?84֡b?>B?0j+?䎊?1??) E?7?4AJM?حU?xW)?m3 A!?|ᛑ?_حV?g?y+??yg?@NU?QQ?OQD?Y?v?2LfQn??6?4?E?>lLY?D)@6e ?ǣ @P?İ@9?͉.@`G?l=?D|0@,'77?z9`@ Zݘ?R?g@ uO7u?4m8@ ;n@J5_õǣ @hMԿOv_@ =p߹8R@ڍd\@ 4YԸ[BF@$'(;'j@hzcջ $@\*"ʖ@.S{@uO7]yЦv@)4D*@Eb k~(@eOݕ@ QCrq!5_@F">iIOQ@V8YJp`@km7ޓ@s٩T!@4XͿx^ @Z[(̿~Rv@IVȿ5@T]@2/l5rG@RnO߿?ҝ@i D$5in@y;:hɯ{@l?>pοdo@Y+ҿ!Wh@^vȴ9Xd2m@i~+UE@e%1@Bej%!@L7`]y0#̍@t"᫴NP@zcsl߿%1@XOLnn7 ܇T@\N.Ǹ@X/D5Xy=@累q! $ q@Ҳۿ;L@4a=2+jf@`>-b91P@.]\㽥v@HGÿ?|h@FnCy鷿@f)kJL@ ڿB1@;KѢY@1Pۿ7`,@)OB9@E#Nh)Ie@$3@C9@c3G@sl&l84֡@V3LPr@F]c=@<`hK@A0Pvȴ@#Nv޿.G@CkBB@cB¤Up @İݿglC@9䤿ydob@T~G|@䰞ۿ,<@;:i)s@%Ne`G@F">iuO7u@fIKڐXd*ީy5;Oasl&kj%RK[,]n~L7`]y.}AiQY,[W?,'77{i4. "h ԕWx-8Gȴ9X xF]Կ ~6;'(پLIFOLnmkUݸ<ϕGG#!ZS"S 5܋xW)K]̿׈4.۵`l oT݂u% İ7ޓb͊?˒:)z =p?2LfQnnh?{ Z[E˼+?.Ǹ䣃'g?rq6 1?uO7v }9?1 ~ߤ?? SMj?" #>P3?+ h?ijd3 \¹?HK E˼+?tSMj m?ɍyЦv! Fs?ʡ͉ dE#?˲R i9Y ?̿ 9bE?C\ H?χ ﲪ?TԿ '!?W}W? 0j+VC?=")?`V. Jﲪ?Ck&sպ?r/YFsB?н{ 9?ygmR~Rw?zVC2/Y?l"h ԕtqq?Oag#$"h ԕ?䎊fŗNf??}H?ش9XbNd2n?qu!.2?rSnT`d?95?İbw\?7ueAeU?}ӄw͉/?ۼ+@y'd?/ejv?%ڿ<`?NzVCcsl&l?qxB0ŗNe?ܓ ٔ[l'KI?ܷ`,2I?֡afv5C? 7"NΚ,f?#x m\?==Ć.?KthM?#ȊG?Xe,ty?~Rvʿv7ޓ?T61ҽ<64?b˧2P0OX?ژ57?˧2P]*\|?얿a Eb?!-w1ſK۠'?hJcHj?ی?nP?ۮzG.H? $ qzcsm?۷-#NA!laR?ڸ{00?ӣ 8<ϕ? ٔ[l75~g?d+B¤?XdE#豚A_F? IE?*EM`,s-?;Oag#%Vl!?<쿱[O;dZ?.۵vȴ9?H@q:~?ZxDŗNe?ϲV߿䎊r?v ׈lLYt?n $?{5+uy)?*0U2Ѡ&?9䣃?0#Ϳ0 7?ϟf;ŘJA c?Y5;Oa 7!?Q ~?nƼS;?h3ƿGo*ZF?پLI(?:э%?sPH??ܱF^?}2f-b9?ʉv5B?#?[($?pd?dE#N?tqq?È+?qp?‹m?%1?E?E8YK?[-M?puO7?{?Pr[?m?>?)r\>?Nx?vFs?8 ?wpy?6&-?UDR?h?BB?#K۠?P{?:I< ?qbb˧?6%?iQX(?0X:???Gd,?k΅4??>p?8R~?I'??!Bp?$/?}At??}A5Tv? ^?Il.?^J82vu?&,s-?]U\R?W ?GG#??6&,?9Ma?`kz]?W}W?ù~($ ? ǎk?Fg?Ew?Ķn~?gM3H?!-w2?3? 7"?U?ŔO M?jj&?- ?tj~?2m?gmq?f?ԕ*1?+U?mgwZ? >?;LX?M @ۋq ?puO@iN?~L@徠K? k~@\$_[?XOLn@UhƓ?@Jﲪ?ԫ6z@ ě?vȴ9@bw]?ҹwr(@64?ɭv5@zjj&ohی@σ{J#:'76@#e@y@%ٿp 9@ V,zxl"@z@ce%1@Q]ce@Ր{_I@2,R͖},@b#¿ܱF^@6$5i@<޿=@:э%эyЦv!@W}W}9@1PbM@K]̿@91z@R&VӾLI'@(ԐNP@qK27@zcsl߿l@"i}^ Fd@BpO4doa@kjfϿڜn@ҿگZp@S&¿5?|h@nCy|à@;OagU\R.@Ͽzcsl@݂u`G@+}At>|@:6;%#@Rsh]k<@j\ѿ(M@M @vQR@ 4'=["@t@xͳ|@|hs);D@w[0H~+U@8̷ԿܱF^@A\@\LRJm@@{5*8O"}@"){ Z[@Fv  ě@# =p}ke@>R@%ٿulv@mb8@:K۠'tn@YR4뚿@x_F}@m)@[-zVC@գKۡZ@G 0vF@2 @3:}P [6@RV߿3 V@qHĿF L/@"&X@0#̎inX/E@φ`Vz/@QRiY_@Vu_o@-e蒿\ @MJ!n~@lԪ"R?g@k΅3_p@ oTK/w@˼+@},{ @xF]#x @ >WShr@+ @JDпA0Ou:>;NxbT~Ie|Bο,sUGZ1~鷿jOBѿQ֌i/o`CX:SW4.۵>M#NwZpTBM.37iJ?,c^J82!~6nQ.ƽ忇i, Bm݂vIQIVTB9C}3x>-b07'gM3Hȅ c#?ѿQD|04.۵}9[W)IbȿB؃4p%ǿ{m`VԪᢇ~mPEwUqRCQ?Jw1ڥ/D)u:>T:d+ ?>eU.Fzeߎuy(Ӿ"l.ȿU\R-`k{ݹo5eldoa@//t܃%2ʁ鷿a8q`lP ,k׈ڷ,QI0+@jJ{lC?fWx-V. ?`,m|o'=?.< C灃?ߏG0@:¤T?m= ")?;D=F C?'>E S&?CA0P <@\?nO ŬG?!Wh ^_0X?ߤ? `'RT`?OX7 27Ȋ? DU rq6?;5Xy ԹhH?V`V *?p:~ m*EM?Γ򐫴N 16?l7 ?Ŕa=2m(?Fg\Tw\?98qalk΅3?ο3 Wo:?υr(m"?+@jUh\ ?x?ohی?zNzrϕ?.r/Sf3?!5G+ I? 4mH?Zx[ ?؃4C׈? cI?ҲLPa$5?>BZ 4?D*ZI?4AJM,&k?{_I:~?,Kۡ?ϯd9z]y?8YJ??sպǸ?<+հ5Q/?է&Ft?$tS^ Fd?ףD=FlkP|?.]\ӣ?ظQD _?=!92?٧KIB9??ѿ2vtc5?ڽ RiYt4?/VϫȊG?c^t)?ۖYF]c?$Jb#4? / `N?>=Ćm3 ?j%|0H@r?ܐ$tTO"}?ܴfPi4?SP -Rm?sպj?#$6exW)?Kz]y?ty|?ݟU=ȿB;yR5?*\|ٿr\=?sպ?ݲK4|O"?R&V޿6?܃%2%e?(߹9m݂v?۔[l7`n?ە8\g?۴$_Zjvȴ9X?C\`?? Ev?g8}H7?ܔG 01L?ܵ5}At>?ܼ@\溝`?ܿLPr+?ڋm?h?iBa?&q=x@?;Oag#%C`k?Xy=c1?h3)7?h3)Uq ҈? RiY_Jިc^t???]yЦv?*cP?R?ϟ~+V? Z[)?Nʖ?#?Xe,?ƌL_?G#?-Y?y (?n?'(߹?Ҭ2"@?и' ?27Ȋ?2 E?׀3rT?уdo?ٺ&?*\|? |Zq?/l5?ވp:?vi?f;?e@y?a?ӫKrz?9.?e%1?n.?ʫ\?'76? >l? x?8?Gz?BZc ?_ô?1?j+C?}Vl??cZ?KZ?|o'=?76f?blvJ?p&?Y2?kP|?PgS?a Ec?Y2?±m?K:)z?J#9?G 0j?sl&k?7~+?R?g?~6;?œ?<ϕ?($Jb?Q? A!la??N&Ԁ?sg?Ǒd2?{ 2?,]N?E? /^?Mj?ƣY5;O??Ev ?m?b#ᆘ5?^ N?v5C?͞%?0j+?Nt?_Zjj?$_Z?ݗ+j?pnC?*cO?eXO?ƛ{?A0O?pT?p:~?^ ?5~g?ǥ;K?ٔ[l7?lvJ#?zҝ&?+a@?c^J82?ɔ[l7`@{?V. @;?ϨM@y|ß?`l oT@9&A)?@@g ?ԥi4/@"`B?ՎK@&.?ty@h?8@&?*EM`@bR?)k@r(?՝;D=@%o]??@H?T`d@4AJM?"쪸@?ײ?@4@ ?ӈwr@pL?u@y?]ce@ n?B0 @ u:>/?B1Q@ Ub?)sБ}@ :S?Ѥ?@ VБ}kf?UGZ1@ 9.?>'!W@ E}2?hƒ@ łU6?3]$E@ a?/w@ "a?ХLW@ `N?ЅH@ j?B @6?1eәo@f?PH@<64?zcsl&@!ZS?Г򐫴N@TҲ?0 7@E?#̍@ A!la?{J#9@C )a@~Ց;.]]@QMa=@G#п^"@٦ (o4֡a@ P3:@r2LfVu@4~Mn@SRC9m @qj}H@JěS@Κ,f|@Z[(̿ہ0HA@C]l@ v5CiDg8@)*0U2ah!-w13SKƧ*ZFsY|PmĆ-˿HԿi4Dп蜌 ٔ$/Fzdvv ؿZxl% ,<a2^E#MUB؄wsJJLm>T:D*02 Eÿǣ %u:>/嚿3 YJE KrzA [iv}At?ܜMH˒:*v6^ N-{5*8aLI'?IHUڿ]N Sٿ">i. S 41.S#uB؄ $ eS&[0HATxB0 k~(CQX'෪%ם1ڤfB //tZ3߇nrG[ sPEwUqL=ݥeG#X`u!fI<9MauO7uHĿ*)scHjӿڍ٩T?)IeOv_خ?F L/ R?RC#ρ?m\R-#?oa/'=[?m$/?oa ˬq ?ͳ| |??ð  <64?4X $Jb#?kȟA ?Ǖ qڤ? :)y?2I ??ϕ I^5?ha z},|?v K۠&?`sWq #-#O?-` h?XdE# ?{ 2 n>lLYu?k΅3 :csl&?ܜM #M?rz$ Կ ?!.I c ?#̍ dTɆ? gw +uy?ﲫ;.]? gb@x?IOQ4?^ s/{ 9?k΅3Ǹ?ᆘ5k&?ם gb2a|?!laR*mgwZ?ƿ3 WQ%S?ǘ@BPr[?DUG=At>>?z9`K$Jb$?ɣK۠f3]$?̫`kz^m?omrpuO7?łU6NjX?f:E ?/nV~M?JM++S?z$LD䣃'g?{ 1ί%);?g#$6e`QCrq? ?͓_ô\r\=x?Ov_ح d8?+ I^6e?|GaR*o??8R}t>=?B V"?יEv %?,s-}At??ا np?K]dD;?erS??:?OLnmU=K?nU5?84֡bZ{ 9&?ۜ ٔʫ]?ߏG0@: %R?Q¿oIV?*0U2Ώ ?2LfQn333333?^)4ިc^?܅vf?ܰȊGaq?sPH0O?X%[!Bo?#wkԪ?M@$=:?x^ Gy ?ݥu0 ?IOQ 2"?puOs2?:~ Fd?w\¹M Z?޳,'!W?D.h]ku;L?r\=x-b8lLY?$=sMjO?f=?L_쿱[W?mP*?5Xy>wkP?χi,eiu ??ҝǿW&?Fs>-b8(?k΅3S;wG?"嫊\$?[kϿej?¹MW ?#ᆘ5K]c?v uMUi?ECf?2P]ۧ&?|E˼+&f?ѦƼS;?ѲK4Ԃ},{?ѨXy=RiY_?ьT6,??dtj?6 =p? 6P&Ê ?S;wGU\R-?ѷXnY!?qxB1@?йY}1&?Ц/e?xW)?ЀIf{_?-V?K ͳ? gb?#?(M?puO?Đեb?1&x?^)?=B?V`W?*ީ?]x?р |Zr?E ?"m?J82vt?қ(z?лnwp?{?۠?͉.?*0U?Ԕpd?f?hr Ĝ?,?m8Y? qu"?a Ec?n.2?;dZ?s?L?b}V?|0?B؃?Չ.}?BB?ԉ'RTa?|?ӽ{ 1ί?ŗNe?P3:~?e%?J"?ȊG?н{ ?u? =p?$LD|1?X?jUp ?5Q.ƽ?ҲL?(\)?C$?B¤?5?`G?1 R?`-?񶙄?ŗN?I'>E?k΅4?i?o~=?Xe,? gb?73?v ?ɯ{ ? $?Q%S?I< (?т ??EGG?vi?AJM?gt}?11eәp?ű+?-#O?]yЦv?oiDg8?ǘs*??Z?>vȴ9X?Ɏ!R@dty?7ޓ@"0?K۠&@ e+a?Ӈ?Ҟ@ ]ce?)^@ R4n?~$@ v?J!B@ F?ӅoiDg@ |ᛐ?t>=ć@ )Ie?KH@ bS 5?ң/D)@ g?. <@ *?уQX'@ ?gߏ?Й0 )@ ~?¤T~@ܱF^?Pr[@wʁ?`A7L@LW?L@KHӮh^?[T@Կ ?ΜwkP@|Zq?·~mH@ke?s@&s?m3 A!@p݂u?6;%p@iQX?̂"@<64?@cHj?w@bM?P{@R4?[T@F<`?P ,k@Y?~|ᛑ@ 9? @ t}^_?"`A@tpd?Q@t)<f;@9C?2Y@p:9@'j@CA@J0@k@jU?ɯ@gB؃?@duvf@HӿnVX@F3]$cOI@}9$_Zjj@)< ()a@eOómǤ@<*ÿh3@:q`l o@ǣ !.I@Ǔݗ+k@|Q]N @ 'RT`ˈwr@9Ev c Sz@b.4Sn@ ]\@^߿Ѫ_@%[[տ7ue@=73@<&V@՛]9@b@wrضZIf@a@@4A_E@ D٣n.3@2K44@)sБ}ޡ͉@7ɛs@;J#9M@U.rhH@kHӮh^v @d*0<@+z]z(\)@3*0U2sg@Z޿1-@BC؃4C@V?퓉 @˩y>BZ@9CſbR@H+޽X@_eVIb@[ Z[_Ë@ۋq gw@|Ov_ح@D=FlU@wN&տ&V@@}3@b#ᆘ˼+@BY޿񃚿3@<#xnx?@g/VֿJw|@sPZx@03:}m@Ͱ݂vNe@1&yy|@XdE̢a@₿:~@4V. nX/D@Q$5in!Bp@o~= A!la@ Ƨ!o@)N9Y @FQH@dR?gܿhۋq @_Ë)r@E V@a?ײ@/JM++@~+#@ '0v5C@2vtc5\N<@O;dZ\лo@mHQ$_Zjj@\崿6F@+H+@u:>/Y!~@#¿iͳ|@7 ܇UyHU'(@BeO@: /@Xa EcTɆ@u\(2W@&-b8<@?>qOQD@fI=K3@[-M@%Ft@2 F\лn(M++!Whܻ¹MR~ x>P39m 6P%ohیm~+1ί%tyY274Y}H%ם g>i;ySsguڿ2mia=1¹M\LjUp P ,k/l5BѷI< 5fAbD'Xd '/b}䳻, e%\ıX%[\XO;dZO M Xe+Vu.4iBʿ٩T",Wh6;%oI'?-e{6XdE#j\$_3X̷Կ{ 9Fi-\ y4#u%F" j򐫴AswvF#xʖ{tҳ[Bם gbnP4AJMZŗے:)y27Ȋa ѷOv_حU=?W}Wj~#?|GѼUDR?a Ec?p&zG{?KHӮhNߤ??=ć İ?#ᆘ5 .S?{z nV?JL_ ~pu?$= CB¤?зVC n?HK ޽X?ם gb cI{?g*d tSMj?\( =!?Ӂdo Fs? Nʗ lL1A [?ŬG6z?Ől-"?!5_ws?Ɖv5B&x?0au?Q#y?ǃ,]Oιvݭ?i٩T?лnwp?shw+?7T9C?9CZx?|E˼+c ?A [Fkv?h]k;Se?پLIᰉ'?Ԙ5XPH?ɯ{ ?LWs V?+ JM>!?=n~?ׄM:2I?>-b8%S?؃4CkJM++?~6?v5BzNz?1;.^jv5C?d̢fP?:pe'gM3?$ pq |Z?ە$/?2_u?JA c p?܋^\ B?ܹhH\(?$Jb$-V?Ŭzcsl&?҈p:٩T!D?n~4?z9Ϳ]9?#M[T?MjOvR /?y2fP?ݩgֶZ?zN{|;Oag#? I^5?7 ܇U?>lLYtDS?tqpU=?ްȊG2I?{mYJ?7ue- ?|ß`lk΅3?߼UDR?ôr?XOLnnMty?udHo?udw,?ݚ$'п;.]]?4?73Y5;O?|0DR?g?-"˿ ^?ӖR<6 Z?ЅvT,:w?З9m ׿;L?КVWiL?Гȟ@Q.Ƽ?ЁEſŬGH?cI{tpd??gߏ?eK?_oCy?K3߿iQX?jOQC?2W¿䦋?nmu]$D?d,n/?;dZi}?ѷ-#N~鷿?!~|әo.?h ԕ+R}A5?ҌL_< ?ғJm3Թwr(?҄ҐNP?b͊u g?4AJM??QRȡbw?ԕ*1lvJ#?ѳRCJ?џf;v_ح?ёd2,{ Z\?сv6SP ,?a?XdE$?.}At?@4?"`??եb?!RiQ?!R<6? #y?A!laR?V??2a|Q?عwr(?eڹ?7ޔ?ł?؇M?fB?T6?#?-"?'/W?nmu?靲-V?tr?sPH?>6z?r2LfQ?ԇTw[?t[ ?Jw|?Krz%?1ڥ?n.?¹M?{ 9&?ƴcI{t?9}?bM? (?Б}ke? ?+ʫ]?:э&??&IQ? |[?ڤ?i}?AJM++?j?ײ?JD?o^ s?=? |Zr?ިc?İ?Wp+?bb˧3?H@q?< #?7KƧ?V8YJ? VE?~LX?YJE?-`?ʥi4/?@x?Y?aq?_ôr?.ƼS?nVX?lLYt\?C$? sG?a?v5B?ʽ<64?g*?ʃB¤?!Bo?U5Q/?&a(9.?0U2a|?)?) E?<`?3?e+a?:?ȃnP?u:??Կ ?$tSM?qp? ?[0HA?\=x@?5~g,?27?ǭl5?k?6fI?W?q!Kr?Mj?̢a?7ɛ?">iQ?~|?t>=ć@V. ?E@Zɯ{?Ho~@\(\?ӏ]:@"&?x-8Go@%?L8\@m?~Rv@2"?(\)@M/^ ?Q_@3ti?7`]x@j@?#π3@QX'?Ϫ͞@;:hA?m ֶ[@a@N?1o6@}?@pd?ԏ\(@ -HQ?5*8@ Jw?CA0P@ VE?fA@ o{J#:?ԏ27@ MjO?ԁԪ@ {t?Բkv@ weں?Z@ ǣ ?~6@ E8YK? @ 'RT`?]r/Z@ 1e?ҷVC@ FIl.?b}@ k?!-w2@ P3?Jw@[a?w[0@ڹZ?Ф~鷿@%`A7L?cOJ@6e?y@$6e?ʩ?) E@!~6?0#̍@OV`W?{m]@zQ_?BB@+?ěR}A@ӣ?ǚkP|@O;dZ?Ov_ح@)k?},{ Z@/D*?y(@2 4?\$_[@v9.?i,d@C,z?)^@$OQC?bw@?M@$=@> ?_Ë@3 W?˧2P]@>X?bn/@l2"@EM_@\(>W@_ËćM@ݲ-V;D=F@%ؿ@a=1@=B¤T~@{AWwd@?`N@ $ cOI@l4XͿbM@=ĆPH@ńڿQm݂@ᛐĠ- @+jgL@4.۵@8/^ G^ Fe@w`7KƧ@SPJM++@hђ 4@'|E˼,<쿱@)Kҥi4/@Mͳ|-Y@lYt[ԃnP@*\}՘@@0X:QX'@İj@c Szz@d@p:~rz$@4cI{t_IW@8f'|Fx?@]uuy)@o.H@x\g*Krz@7~=@ ǎkﲪ@H9D@ (w1&x@̓ ٔ[UDR?h@VԪ_Ë@seXOe+a@8\g*ͳ|@]b^)@`:@_[W>@V9.ƈzd@n*)tP3:@Qm݃X/D*@{2m @kvÿB¤@K۠'2-V@.`sW<#@R^߿]:@wd:oi@ϿTxLW@ts4n@7%םם gb@ҥi4&@dƿG0@9@< IOQ@؃4D I@6fI;:hA@S,nO;@p87T7@yЦv!pP@JL3@ V׿9Y @[AQH@xQhƒ)@1ۿ$tS@:Ŀᰉ@P1<ʫ]@ﲪ◿eU@#ρ@$0JL@@ $ q@]ӄwhr @yUD$ p@%ٿ6E@sպG@T;X @>WSi$')@Y򺝿xs@#do5~g@@L8|G@\M?Jb#@xW [W>6@/ej=@r 6{t@Ͱ݂viDg8~@r-VMa=ѷY-VdN;6 1z̿4.۵UGZ2֡af,QyR4$tTB`- ܄?b#ᆘ5ѾohJƧ-F47ɚ%L_nVaS甚VWjC-86PHXy=c$JbJwLW⧛ dž&OIHVtc4ʁz$Lᠥ&tj~Il-5?oQ ٔ\ؘͿFsBJOv`{ 97{7KƧ#ލd>3:}%1>-b;<ϖБ}keܔ*d(~6zF]cfTiڡae*{#x |ZrXe+K3ۿص?$')*0U2| 7"rSnPRJ?Ƚf'|E حU? > CB?:pd }K]?˞Ր TzG?{ 9 2fn?_A z@d?ԤT~ oTK?(F -"?}ӄw T61?tj}Vl?]$DR%?NP1<@x?/^ GVE?ם gb]Sn?%1?R&V?$5inY2{m?_o7'j@?M++ECk?0OLnm?ǞyJ|Zq?ȟ@~32?7!<T?P3:Ft?̋C%ߏG?")nh5~?һnwpzNU?4֡a?˒:)as?]N ?XdE#l7`]?ղK4nwp?' !.H?֫?ײN ? HV. ?חHHLa?*0U2NΚ,g?ؖg-b8BZ? $Jm3?o?R&WFs?ܦL/{J8{0?ܸϿT $Jb$?s2m\?4J;:h?k *?ݔa=2cs?ݏǿK]c?:S&eU.?/nViͳ|?MjOvwUqL?xW)$ȟ@?ݧڤ+`V.?۠&Up ?ꉿP]q?JL_}Vl?ށ>M>?޹#wXOLn?w[0QX(?2mT ?udv ׈?߼n.43?+ʬF L0? 4H?_տ6fI?ߜ ٔ_??sBY޿FI?:S'RT`?3H+輿V. ?Buy(?ߑUDRN;5?+DUGZ?Zjj&NP?zxl"h );D?8K:I< ? |ZĿO"}?D?SP >lLYt?Կ b?鷿U'(c?йMa ?Ь1&yY+?Ъ[B>B[?е^޾P*?`Vտj5_õ?u!а{?"`:)y?7T1L?!}?'j@ud?mȿp:~? k~(.ǹ?2I+?кI< n~?ВO"}X ?zcsl&@98q?y+ҿ 9?В7߿;L?"<64?.Ses)?цnCy6C?[T+?҄8 ޷`,? ^< ?$ p٬?DMYr?M@$=iv?B؃4LA?'!WhD? I^5̈́پ?̸ؘ\ı?ҵ '0$'(?Ҝ#-#D?Ҍ?>pοa?~|ᛑM ?hA_F!-w1?A(o?ba ? Eb?e?u?laR*o??¹M?߹8R?\(?ѷ?KHӮh?ʁ?8E?'|E˼,?!-w1?CA?Б}ke?6z?;:h?з+?1-?Wwd?즠Y?zNz?ݗ+k?ɠ'RT`?4m?ƒ)J?S?E#M?W}W?*EM`?j@?ȕEw?3?~g,?3u:>?ʂ@4n?*\|?C$?R4n?˹~($ ? 4?1&x?Cy?S#?:э&?̔G 0?׼wd?̚?.3?̀:p?ulvK?wd:?]q?̜n?$5inX?Y!?z?"&r?Q֌i/?Q֌i?+?qu!?sMjO? 8C?2W?8K?`,?̐- q?,)r\?@98q?fP?ŗNf? ҉?nwpy?K4?İ?;?!5_?WI'>?ɣK۠?۫!Z?Ɇ5?|;Oag#?Ck?{?ɇݗ+?Jw? 7!?ިc^?zN?$/?uO7v?C,zx?d@xW?QQ֌@Nuy(?ʋi;y@Ev?j+C@B I^5?Q@11?bM@ ?P@ a?ҲL@Vg?p*@%[[?+jf@3?CA0P@ڐ?"}@ ?0@Q?Ԗ\л@?Ԙ7ɛ@fL/{J?ԥi4/@x?//t@ YT!D?1ڥ@  4?,=@ `pϿ?g k@ ͳ|?թ> @ Ϫ͞?%1@ wue?@ nO?1@ 0݂u?gT@ Ev?JD@ *1?HjܱF@ H!laR*?TuK@ ߤ@?~"@ A7K?U.r@?]x?Y5;Oa@?ѷ@İ?Ѕv@] ?]U\@YJ?̡bw@?ǢwkQ@W=?B[@qc4?!Bo@@98?=[!Z@̓ ٔ[| ٔ[@ߏG0I< (@ۛf3]?@ ѷXIb@9PƄ[-M@F%ؿ}H@Fzdؿ-V@WAJM+,)k@ulѷX@D0+@jŬ@P&xF]d@gW ĸϿT @D ^c4@sňhb@:pƂ@4n@$=d+@) DșO"}@?G0@:!Bo@{0$inX/E@쪸ο 8@!-w18Ck@2nuMU@G|H?ҝ@r(¿ѯ#cW@wrr2L@ڧ ԍ[@csl&d9@ /{J# qu"@*cI{ًq @JcI{a|Q@ɯܻ쪸@ ;@;'jߏG0@:@JMd@Ë`8J@KHӮ!5@:S丿*1{@얿9-*E@DUG*\|ؙ@`sWke@d:ܿ@w1+ I^@{5*nc @:)z8\h@/+U@,QI;Y@_1PB@y^ Nvݭ@fI<8\@FpOcA @thH ^@dohܿ6&,s@WN&Ԁ5;Oag@YP3:~Qj@o]:n;@% #y@.}$Jb@ƅvbh@Zᰉ'R@NjX@ ěE@/B9uy)@:C\ѿ!Bo@Vi/nBB@rǸզuKۡ@xWXy=@^Q_@0@9 xF]@9;5Xy@8Ckk;<@(z؃4D@7{3@ÐB¤ʁ@`:Vϫ@"`BM_@n~FsB@2/Y߿`,@N&ԀuVW@iK^ N@HL($Jb@E; @=x@LWx@ת%ם]|@ ҉n9.<@e~+U @),(O;dZ@Dپty@`1ί%y @{dZ.r/@%SٿG#ρ@A_0X:@\;:hg Q R7KƧI7~'!Wh@'RT`ƼS;6ݬeh-8Go*ZQ֌i#9?zNzCk&.2ʿs")郐B¤`#̍28\G 0j;diӑd36&-,hHHG i/nJL?>p{.ǸZc$Jb#ss)d RiʂUy(ڿ亝`ESٿ^_0X6y|àu%F %8YKz9Y|KgZxv򥤿f)n;<ϖЄas7ʿP*cA \/v>BZbw\#$6e}A5Tvt%灄`xߜ8JM8Go*Zhr!9bE?%F L0ݒX:Tvեc:~[WېپLIy*\}=Ć-N<ٕ"쪸c zHɿbעr/Y ٔڐn۵?o. )?ȯO M ٩T!?eU.s a?ȝ. v0?t Uv?7ɚ$ +Krz?g*d z@d?͒8\g CV?+ I^ !~|?W}W M;?ѷX =?лA ?Uhƒ Qj?N&Ԁ |?Ҋﲪ N?/Vϫ l&k?j y`G?]ce =ulv?ڹY _Ë?U=K k&?.r0 !6?sP BVW?լx3?+ JyY ?Zx_$LD|1?">iQ}At?`H˂? F]c? (wN'?Ov_ǎj?//ss?Εᰉپ?Ѓ<`M? gw 7!=?At>=1;.?G 0jz)y?080?Y2HQ?Msv?{ 0j+?ՊȊGEM_?M"`?Wx-8G{_J?֯O MTK3? 4Y?פ^ N8Ck?+@xw[0H?بTɅ2<*?333333?{ 2<`?Q?ۡLA B?"?rV?܋C%1&x?ܜM+@jU?I{tY!?Y}as?udR~R?ݦa(9.#y?5_õ0+@j?=BCcHk?s-9?ޥi4/sպ?PܜNK:?ݧڤ+{?ݱH (?+ZQ_?ݼwd[?ndo?dE#Nx73?ޱF^"SDg8~? 7!տVZI?:vJM++?|Qο+@jU?߾K"?y|ß-*EN?:}Oʿl!-w?u%F)n?߇ V׿j@?~mH.?߱thSMj?ڤ$5in?y|ßeO?Vud9?&V?Y}?=x?+ʫ]?Q.ƼS#x?޶ZIf&?Ѩ.ǹmǣ ?1zOF L/?LFV?ֶZI?^ stj?7ɚ\??E(b?jj%?̷DTE?}307?#$6eIV?E84֡#π?eC?~6;R%?ы.}Ag l?хr( x>?l5Ϳ;yR5?D=FkjF4?Ho"`A?پLI(:?Ц">i!Wh?Ѓ%2-"?ЀIf{_Y?Р0gwZ?łU6灃?:pdQ.Ƽ?ѥSٿYJ?< ɿ=p =?қSϿk΅3? 4\?R&V?ceOܽ RiY?Ӟ%Ve?eUſ%?x-8GoT ǎ?k&jӑ7?_o d?vtc4?ӳRC#9?Ӧa(9.pa?ӛ m\?Ӑ٩2I?Ӏ4m9;yR5?dP ,k?;dZ~?>q? gw?{?>P3??FIl?>'!W?,?NP1 ?:v?΅3t?ܻA?، ٔ[?X?-M@$>?x>-b?ٰ ?⫟U=?f'|F?0?j%|?[ ?ڠK?҈p;?ڴcI{t?333333?ڡ7T7?v5B?mǣ ?łU5?!~|?+a@?ٿrq6?,?P8?8Go*ZG?)4?:?k΅3?y}?4?{tҳ?XbM?>6z?[BE?#x ?ŗNe?y|ß?/l?,?QX'?뺝`?Y`?#cW?qp?RJ?΄8 ?iJA?//?~g,?R?6?g8}H?s-?/Y??h?pD??s?&?Dڐ?0X:T?f3]? I^5?);?ζZIf?X%[[?Έp:?Oag#%?΃B¤?*0?Α\лo?f:?ή9C?h? :?x-8G?1ڤ?=?E?k΅4?"?\]ce?ζ%?pu??ײ?' ?Ͷv ?,k~?iv?Q֌i/?̀:p?U=?g ?ӄv?Jw|?4m9?7ޔ?5~g,?vȴ? i?6?Y@;wF?u%F @W^ Fe?AJM++@Ϫ͟?jF4@}A5?͂U5Q@ a=1?Q@?Nx@HjܱF?O7u@2_?յsg@ A7K?[!Z@e@x?@IQ?Ԍ@oa?&cI@#V?ӣK۠@VD?@nm?TuK@:}O?!.I@t?K:@)k? k~@ c*cP?^޽@ {5*8?վK@ Zc ?-b8iQY?Q@?Ѫy@`?"SP@\8J?xl"h @}H?},{ @T ?k@HӮh]?2"?@wFze?LA@n?sPH@E?U5Q/@$i4.?]9@NY?9D@??%@#?Fs@e+a?fOv_خ@'Tw[UGZ1@O0tZ@yʁ_uMUi@Cd? |[@VF? @ZIf?{5@׬F@*cǿdob@\N;@)kǿ,d@S;wG :э@lcA \9&A)@hbCy@̸{0@@x7ȊH@J!TԿ@ߊ ;D=F@98qaǬx@puOFs@ 4HQ@TտY!@o'=\S@ß`2W@VU\R.ʦ/e@`ƿ<`@n/8\h@4m9Xe,@Hӿ#x@0`A7ǎj@]!5_@@kҿ);D@^)M3H+@5;Oam\@ :ְ{@$ pظ[BF@M#NwUhƒ@X^)8R}@ ,kV. @8}H8R}@Ne}9Y@)^ P*@ʖ]IQ @ 4@Y}z]y@eKX%[@$5inY䕪@">i܇Tw\@l /8YK@A(ؿRC@!Wh$_Zjj@4Q%S@> 8 @0!!Bp@CQᰉ'R@Y]N kz]z@N$5inYq6@]`N㓿Zy@q 9`@7@&L/{J@d2n9o5@ ^TCc@j~ۿq6@jMj@ͩ>!%;:@QCr.]\@0l-~"@0L2#@WXehH@sd3`@}ԿG#@vHO;dZ@䃥;K@3H+䶮}Vl@˒:*b@ =pu @`sKCV@VWizG{@5{z`@Pƿ=@k;'@Wx-1;.]@|Q\g*@R-#&I@ʂ\¹@[J#9 ҈@u^ Nj@}ke2vtc5@C,zD ^@ŗNeVD@>-b9h ԕ+@csl&+@;<п /@}ӄ6;%p@߱[W>9.@䣃'*ި@R~RE˼+@-Y_Zjj@G-~鷿.3;dZiufPHlcA \bom뇨MX #Mw1EwUBu%F \g*7ʂ3]$E+hH=Ć.`:3 Vd$Jb#L/{JohۋC qu"$竟U=7ޓJb#ᆘ3:}x߹8Rp:;wF(E#NȊGhۋq m\ڿ u䪣_e[[L8\T~MYD^ N6342LfQn! Eb'!Wi]UxW)*IV΅3LPrMadZ1ƃ<` ѷrSݿ>lLYu9Sn~($ xT6x.@NUd|0ލ2"P 9r\=x;f3]%+y&{_J{0$K gw`H 4Yt[qiB{5*8ŬGGt!-w2K۠'GJwomrʁT ǎ,div{ v '/Wπ3r_䎊r?P]q =Fk?șZx zG?v cI{?D ڐ?ǣ  f[ ?5~g P?Ҵi n?8\g* b/?Ԫ" +\$?qK ڤ? 7!= i?Ԩmqbc v5B?6 5lvK?խB K?Ov_خ ^޾?{_I n l?ݒ:)yr ? gwY|o'? VEo*ZF?l"h ԕ@٩T?JLzmǣ??ҝǿJ!?8Ck'-?߳|OxF?׈+p+?[0HA,{ Z\?KƧjfB?,{ Z\$D?̸ؘM%?EwU?LnmͿ0p?ߖ},m?b} 6P&? Z[(̿uX?.۵;dZ?L/{J#F)k?8&IQ?^ tf'|E˼?s ~?n{?dK}At>?^)76?9D D?`:oǣ ?щa=1OLnm?ѱHA [7?әo.(b?ŗNf}ӄ?7VWiJ?ѼK[9?т- ?BBB?pO츥[BF?ѷX |Zr?Сaeq6?zG{ZR?kȟAQCrq?Ѐ:pߤ??DK3?%灄ݗ+j?џo~=V. ?%㴢3?җO;d,'7? A!6?oTK: I^5?nݐB¤U?+ʬ,]N?*1{6&,?Il-֊?aR*o?SA c S?uO7u{ 1?ԇ+ Ik}9?ԕᰉ>P3?Ԟ7ʿd2m?ԟvȴ9s?ԗO;dT]?Ԅ[-MwFz?d̢ۿwpy,?9䣃'np&? I^5??G#ρ?Pܜ?BB?^ Fe?5_õ?2^?'>E? ?L_?ZFsB?o*ZFs?[W~?ҝ%?Krz%?U5Q/?Ǹզ?v ?^"?Ѡ&?jUp?Up ?נ'RT`?C$?VϪ͟?If{_? gw?41?٫!Z?m?%ם g?İ?u g?p&?ڟvȴ9?%ם ?ڰJ?B¤T?ڴi?kv?ڴcI{t? '/?ڧŬGH?ulvK?چhK?%?M++?͉/?K3?wY?٫!Z?D*0?KCV?K۠'?3rS?C]?Fd?D=Fl?a?$Jb#?L_?n?ԝIQ?\?d=?g8}H?҈zd?Zݘ?Pܜ?s2?gM3H,?HH?},|?ﺝ`?Т ?laR*o??eK?R4?Rv?Y!?g*d? M:?Б}ke??>q?з`,? ?9C?#̍? >l?ͳ|?ﲪ9?Jİ?R~R?=?CV?)4?Ǹե?o*ZFs?Эv?c ?И_F??b?Ѝ:w?%1?ВyQ?%?Пh3?|H?О7?f?ЂVW?fI/0?&q@ R?m@ ?\¹N@  ?g@ ŬG?UDR?h@ % ?uMU@ ]IQ?:@ *o?R?ו@ L??Q@ š?ՠQCrq@1iB?I< (@%[[?+ @/ek?ѷX@U{z?=!@=b?Y`@ 4?΍ɰ@Gmq?L_@Ë? B @l&k?6@]\?BY@&/Y?#x @\;Oag#?M:@/^ ?uy(@V`?tj~@|?_o@=? >lLY@ib?},@xB0?y=b@+?!}@ {?o~=@?0X:?g@s33333`N@o忠Zx@8Go*Z0OY@2"VCg@q`l /^ F@m\a@/Y߿ʧ-@f:*)s@UDR? Z@y|ß+ʬ@p&ɿZc @u"Ѱ'RT@:csl&l@LYt\`@$/?g@ʁԿ̍2#@ SyP3:~@ sɿPH@ 8̩7~@Z1'Go*ZF@Lwpy@Б}kfGZ1@l oTL˲V@' kyV@V?) δfP@v iDg8~@*)t֡af@A5TuhA_F@C[l6@P ě5~g@0*0Uٌ~($ x@rISe@9h3)@;K]cA@F^"SD*@A5_Ŀ(߹9@M*EM0@o4֡aC\N@ywr(VH@u:>/2 E@)HU'GzH@3ȟ@!R<6@G' @inX/Ck@7ȊJw@zN>@s@ !-wֶZ@(n^"S@H@rfI<@!tjF4@G{ֶZ@+ I^ȟ@@+\0#@eU.s8Cl@',@3]$=s@O Zx_@ zN@Y疿wkQ@߹8=@or\л@nwpy!LA@=Ć-˿Q֌i/o@zpdOV`W@H@rj~"@'/]r/@LW@x RiY`@KϿcA \@[BEP3:@f@hK^ N@vȴ9B@9gt~B9C@Rm\h3)@l~($ x猓 ٔ[@RK{ 9@H˒:@եc`@2WY@fB07@7 ݿM>!@hriY_a@5׈ٿ k~(_E0' 8R}9.Цv 'gMhۋq X:S9m=3:}PyZxcA \mU=fBan.ĿUDA_EH`Կ4\;,]Ϫ͞.$5inYj{ sWpNΚ,gnO߿3^ N>WSnhŗsw\¹'j@ >lLǎj岪9mudP{o*ZF 6P`Vͳ|`V.,]NtEx?c$ݿlaR*o?Qڤ ?h3l5-"˿N ]90#̎>BZc%1"04jὥ^ FezGz]y'(bOv_خ߄پzNFIl|Ϳ?Fg 0j+c^t)R/Y߿ܯ%;:=)4]U\'E84׿IV`Crq7ژ̷ ׈h3* Z[)9&A)n؊?mtDUGZ?.H0X:THօ]r/N"`B.S1o6xԉ"S P*0U{ 9CV;K B̿Җg /V?B؃ v?CcHk cA \?FsB \$_[?QQ֌ 7ue?!-w1 ʖ]?ҤҲM :?r2L ,?_o hF4?2 F ,VϪ?e 0 Y!?? ~=?{tҳ l&k?4 %RK?v  laR*o?gwZ a(9?=1o ^c^t?ׄM: !vݬ?׺ RiY`I'?>?0j+xQ?2mGE84?o*ZFs#d?ץS̷D?_Ë4֡b?ŗNfPr[?+I?8gS?]q"պ?؍ɰEw?dZkP|?סvݬ)ͳ|?hr ĜJ?rSn^޾?׊6&m#Nw?ױth+ʫ]?o~=b?=B@N?ؤT~@D(M?P3:~ȴ9X?لM:LD|1?`V. Ai;yS?ڢ /D)?$/P]?cHj_{?۽vvȴ9?Y`N?`sWqQCrq?ܥ&`6ziJ?lC5yh?Pr[jF5?pO4L?ﲪ gb?A c _P]?5?|hfP?A(o̢a?XbMF??|G\|ؙ?kP|QX'?&ڿfQm݃?">iv?UqK'2P]?%灄QX'?.< ?Hoi$')?z9C?حUhS;wG?iu j ?}OBD _?`G?,<\F^"?6P%񩝈;D?ڹZ;L? VMZ?(FKƧ?3ߤ?M_˿e 0?ceO-M@$>?X:S丿ɰ?7 E?FsAt>>?ɯKZy?&i-pO4?F]cf?nwpydZ1?ћty3z?e%4\?mǣ`sX?'RT`ea=1?Jb#ᆘkm?XOLnmêy?BZcTw[?5Q.ƽ?Ѷgw]ce?qbb˧#M?@$= B?XdE$:p?aпpd?7ɚ%$/?Ѣzxl"h?ěS_o ??) ﲪ9?9Y _o?ѮO"}zG?4?ҳu:> >?%F L0R~R?ӌ*EMម7?g d=?>//tX?ԅ]r/-V?Կi,ٌ??VH-M@$>? 4Ѣ?IV`pϿT?o]UL_?ՍyЦv!˂ӄv?՟f;n?գ …ݗ?՜ ٔ|ؘ?Չ DT~M?k~($Ev ?E84֡;K??>?yz$LD|?8?{m?< ?cI{t? A!la?. ?nD?&V??+?IV?#9?N;6?.2X?U5Q?9?nX/E?D(M?IQ ?A(o?+?(\)?!߹8R?2f@ )_?\@ \1&?{{@ {?=B@ ;,]?؟vȴ9@ ce?؊Կ @ {yR4?؉"S @>(?K3@nCy?e+a@ܡbx?İ@6!.I?қR}A@?ѐ٩@?s@+C]?ŗN@\¹M?!.H@P3@ɝ;D?)^ @84֡?j~#@={ 1ί?uO7v@qK?*0U2a@߹8R?`:@?@[W>?pd@6-|8K@me蒿:hA_@s{ 9&B@?F}@E˼+@If{p*@Կ @qQ֌NzVC@ 7"?@]cA˒ 4@Ý^J82]k;=@vݬ̘ $ p@~͊6&@`szNz@]hƒ8PA c S@~=ԀuM@0Se;K@m ZˊȊG@sGgwZ@߄{ȿ*") @?)ϒs@HTɅ,@bhр |Zr@Ѣѱth@ kz]zN@i;ySүx^@fffffRiY_@pO4ّhr @₿ؾ7ޓ@/r٦76g@] gbE˼+@/s݁0H@@s4ɯ{@%|$/@^EM_@ ,k{@!Krſꕪ@L{0@a|QԿ @7mnp&@o~=NP1<@/Y߿Q@"`b˧2P@27v@a5~g@86FE@U*8|hr@q%Sڐ@7ʂ4@Y5;DŗNe@zՐ@='=["rQ@XW)aq@*qiCmǣ @!=1p%R@;($a@N@~J82vuԿ @Ë`Wx-8@}9ݿ7`]y@%KHӮhIQ@aZS==@ZFsB@Y\(\@䎊q޿w`H@3 A!s@lC $ @7Kƨ6e@KϿM@5~g,]U\@OQOv_ح@67ޓZR@PbMkv@ikҿ9m @fQm޿L@?@c^J8@ ׈m=@BZ@X%[@SٿY5;@*?@r2L^_0X@lLY 7!IQ鏛]:s8q`l'>Eezxl"hLPrWmXy=cI D |Z:Xﲪ+SP ,Ͽ$=W}ߤ? Yt[Yt[ e@xs"h ԕ台 ېn+ʳg ǸեrdE#N+OX7R<6FIB1<쿱[qLzN{_P]y Li/nW 9;:h{0%}2X/D* /3]$EyA_E;yRҿ;<ϖ7~߻Yhۋq> UFgy|à݌ /nԪ"j\ѿ}HT}^_1g#$6e>($ xڱ$5in'j%! (Jw|RCؘ_Fİۿmq=K6f5~gևǸ6y|à٩T!D}ӄ,k}ԏ6ԀIQ*cP䣃'gqPſ+%? ҃fQm Nx۠& &A(5*8 O Џ`V q1?BE T?B؃ c/D)?ҎT; ,)r\?:pd 5?d̢ ? e2I?ԶZIf +;q?d̢) D?_Ft*\|?A(o 4?`,W9m ?x?G4X!?doayU?;D=F^ F?u;Oag?{5*2z$?W}W9`?]cecOJ?عY}j?ت:э%A%|p?>-b98R~?}3Y?`]xb쪸?ٴ3hI?lvJqu"?VԪtj~?d2m d8?ڑ}ke3?͞%OQC?ڐeO ?GZ1'KI?ۉ Z[)gM3H?\¹N? g k?5%әo/?ܐ- q۵y?HӮh]}{ ??Nel!-?\=x@:4Ck'?k;<п.}?v5Bٿ_0X?ၘR8\g*? Z[) (w?=K^z@d?᩼KWwd?᪎cI{gS?8R~떑\л?Ї#lC?-`j~"? D _ם gb?t[ a?ѣ )k?8YJ-w1? / 2I?A c S_?vi׿mqbb?Ҧ/eϪ͞?Κ,fX:hA_?u!,R?Eҿҽ<64?҆<`rGE8?.ǸNe?mqD">j?ѻ,]CA?Ѣr/YԪ"?ю[W캲{?y|ßa>P?d0+@jk?[[π3r?m믿8J?Ѧ 'WS?DUGk ?҅]r/sWp?K]dl oTK?|ß`Q֌i/o?#¿&q?CP=?ԣ^ݿ൝yh?ƿ޽?V2zVC?բwkQcOJ?p*ؿה[l7`?#π3$'(?W}WҺKC?ր,'7WiJ?֜nJM?֫NPy2?֮SeXnO?֧,>lLYu?֖₿o?~|ᛑ#x?`V. ߏG0@:?D(MNJ!?1&x?!}?0p?v5B?H?(zc?{_I??Ck? sG?Q?qu!S??sh?S? M:?Jb#ᆘ?]x?عMa?iJA?4֡a?Y`?ټK[?֤~鷿?FIl.?ئ/e?ڸ{0?CP?eV?ۚ$'?u ?>W?m?hۋq ?1ڥ?>-b8?gwZ?߹8R?q?%?mH?b}V?VH?CP?`H?Ҳ?4֡a?e@y?6&,??گZp?쪸[?sGO?"`B?9?2W?ٍ?hb?`A7?g?8q`l?@~?&A(?Y_a(?^_0X??ײ? 0j+?D;?:v?T61?Ծau?^)4?P1;?-U=?+?𠯢Zq?Ӻ{?<`?ӛf3]%?c4?Ӕ[l7`?i,?ӗ9?$k?ӚkP|?r 6?әXdE??ӓ ?rϕ?Ӆ}2?k?iu ?\yg?;.]]?eU.s??iJA ?-`?6?Ҙ_F?k1;.^?u%F L?7ޔ?_0X:?VWi?J82vt?e ^?($Jb??5? ~?Ѡ k?Jn?D)?~($ x?=?앿Ex?Шc^t*?[q ?Ѐ:p?쿱[?љEv ?sl&k?ѓ_ô?%?љo.?IW?Ѡ{5*8?ɯ{?љo.?Rp:?8Ck@a@N?W>6z@^ygt?(F@*?eV@&kȟ?E@j?iDg8~@5;L?doa@{ ?&q@JqiC?ԓ򐫴N@^ N?փfQm@YP3:~?r/Y@䎊q?+U@)?մxB0@> ;?TɅoi@ ^?1L@C\?֬>B[@H sG?5~g,@!Z?~"@ 3Wp?8J@ Q֌i?ߤ?@ v?r\=x@ )N?t@ 䣃'g?8\g@ "?O4@ [f3]?g@ X?~鷿@ A:S?:pe@ (b?؍d>@ ?\|ؘ@ i/n?fP@(߹9?֫6z@Q֌?3H+@8\h?/^ F@:~?@NU@E?#x @_;?,'77@i}?ϩ~+U@J!?cOI@:}P?3 A!l@QL?q6@9?٩T@`l o?Ƽ@\@ӄv?R?g@?ﲫ?b#ᆘ5@r̷?9@%1?vJ"@=?\(\@CA0?Sn@0bM?^_0X@s-5{5*8@3r@ǣ >pu@ 6P3@4n~+V@@46Dg8}@WVC[-M@%@~($ xɾK@2_ʺ6;%@+ҿ˜ߤ@@`,ÿͅHL@ NPJL@i)a@S 5Y!@ӄwо7ޓ@#kȟA@,'76οЎT;@If{_+y@l^##-@.ǹ҅H@ 6zђ8\g@' 74@p:~jj%@}WQ@٩Tѱ[W>6@DUGZѕ-#N@.3]9@2W9䣃@KmϿٸեc@Qտ8q`l @,۰_@@A!laQ@gwހIQ@ƠYؿT!D(N@#`@0nC.r/@e+awr(@[-M>lLYu@Ml-@P6C@Bmm@ c Sa Eb@ 쪸[@ԟ]{@?>?R&V@&JO M@G{ڐ@en/AJM++@)n"@7ޓ]r/@0np#9@8h%1@74mֿ#9@a84֡b@v U@ȇMr(@x7@e@y1eәp@'(bm݂@8 T@U;Oag[W@qbb˧,@D"Ib@thֿe@&qlLYt\@;D=G@ȿ =p@ b@"}6@;z@#@TicI{t@n 4Y(wN&@NΚ,A!6@*cǿfC@\¹N xF]@;<ϖ@!Rk @u晄@Il.)^@~LLA@26&,s@.9.IV`@Fssl&k@^:}OʿԿ @ueU.L@jOvi}@ڐY@+@y2P]@bb˧3U5Q/@|Zqw[0H@y|ß9@Y2OX78\g2T`dÿ#9'#3IQFs<*ÿ̸ؘԀuk s곿ExW$tT$DտEwٿ긐եcȡ߹8LI'?-M@$ᆘ5d>vfE =եb$5&q82vtcrm\+c e%1S#ulvC٩T!l oTL3 V-_">Pƒ)JL_@B rGE8%;:䓞ՐQ.Ƽ.< .}A2 ECkd+yŬG"޿ gb1P9Y lA!I'>Xl"h տu:>/0DR?gܿ1zO/0kvOag#%Qi}*cP>E#̍2Կ eO gݨ.ǹ+@jUC]207eOvflԪ"ڽf'|EUlvK>-b8>N;5X'E84׿ؘ5]:SiDg8/s#̍⬿|ؘe>WS]4X ɯ{+]kP{|ßaӼK[π3rcOI`ﲪѸ{,0ڐ q`l ffffff ÿrq6?ѷAJM+, E84?҉v5B { 1ί%?ӢY5 -`?tSMj ;? V w|?ճ| KƧ?RC ?հ'RT s?_Ë `?wpy r`?׎[W +\$?,? s?ء!Bp Ց?zNzV ])r\>?`kz  ٔ?D?ؾi;!Kr?بTɅybE?ذ ě3E?SP ,}Vl?˱:?زkv ֶ[?ěS|`?^)Jl//o.??) @N?̸ؘ xF?iu j:э%?q60O4?7~+T?ۥ;KK?5~g,@?ۀ3rTOag#%?鷿q?wpy,98q?ڳd35׈?z9)4?.}Atzd?#NvGXd?ڏ27?9䣃'a?DR?g#cW?ZqxBrB ?ڪ[B0ϿT?PHSeX?S&_?۵IHUdty?,d-M@$??s?݃{J#9w< ?`G,=?gM3H,w+?j%|[?!ZS[?D=Fl?">iί%?{ 1ίOX7?}2f(? B ? Fd?ѢY6??ӥq!K?'/W?Ӊ Z[)?fJ?r 6P?u:>?Uhƒ?jX?&x?#̍?Z?>B?҃fQm?^z9?Y?[BE?ѭ^?mH?Y5;Oa?y8J?y (?˒:)z?ѵ D? L/{??{5*?r ?!D(N?Hjܱ?s?A5Tu?X' ?|@ʖ?ѧd@yD?эyЦv!@*?юMj@X̷?:@G?Ҧv @x^ ?7T6@FV?+ʫ]@ k~?Ib@L?Up @lLYt??) @zKC?)k@D?t}^@*͞&?@Pr[?*0 @ Zq?b}Vm@Ew?\N<@M_?؄@ y3?A_E@ ~ʫ\?K]c@ LYt\?אW@ 5;Oag?c4@ w[0?@  ?.Se@ Tk&j?׌?@ 2?,d@ NY?8J@ ??G 0j+@ 5?CcH@u%?@䎊q?bh4@?P3:?ŗNe@.r0?lC@doa? @[¹M?9_@1{?Dg8}@2I?+$@͊?XdE$@M=?J&@=Fk?ΝsBZ@6?҈p;@G#?ʒO"}@;L?64K@t?|H@.}?âZp@n~?K[@?*ZFsC@2ܱF^?^ @d:?bw\@_?@O MM>!@y|ĿE@<64Crq6@sH@q@9D $ q@`B ĊԿ @uyh @-b8<6&,s@yg˿n.@ۆnCzw[0@c^teh@\Tw\I@IGNΚr2LfQ@Xy=ᛐo@_3 WTw[0@K4y(@zN{ω D@K3ۿFIm@~($ @99Y}@-W^ Fe@jοts@5~geV@]N .3@LfQnGo*ZG@+C,zK3@C̍2iDg8@\` qiC@tc4%&@#Nw?rq6@U.rڿY_a(@ker/m@^޾^"S[.]]ߏG0Jv5C勗xW)8{"m&Fs予&j~ۿR43p&fPㄠ1K οOv_خ替{0BBS&R*o?SN&Ԁ^ x.&A(c٩T!74NYɿ`,9rlC#\N8q`l ,v ިcݴ% !laRn6z5inX/`dwr(N ̿ں`ڹtqnjXCcHkVaf؊qiC>=Ćy|&Qm݃vȴ ͳ|doa :ҿկ:73~$8YKHG SdӖ},8Rv1&y76fޓֿщ7KƧQX'3rSNP1 1{?qp tJ?" iQ?؊Կ ̢b?W}W QN;5? >l s?BE 1o?ud h$ xG?٣D=Fl T?ٗ+jty?Y_a(CV?ـ3rTq$5in?ٔO ML?>p?x 3Wp?RT`dZjj? I:S?ٓ?/l5s?l!-ww\¹?ڭWw8^ ?@c^J07?BYK?ۈ+kKrz?Ϫ͞%e?fќu?;%o^wUqL?ܒO"}5d?W 6P%?c !D(N?1&xGG#?{xW*? ԕ*ި?,d^`sX?ۨg&kȟ? T6?T ǎfI?wkP|Zqx?l&k⡵͊?پLI(H@q?=[!Z)sБ?>WS??8CljF5?*ިݍyЦv?D|07VC?S 4¿a?Zx_-?sBY޿OB9?7ɛC?;yR5&cI?t}^_Ѣ?n??7ȊHp =q?ӖR<6 ?eU.sܜM?'RT`e\??mtpa?Բᰊ5IO?r2L$5?҅3tik?"sPH?S&B>P?CA0PzG?ﲫH?ӻ ٩T!?$5ic ?O M;?6C-Ԁu?'76J?%1K?Ӓ8\g)7~?IeRv?6&,s($J? =n?1ڥŬ?o~=ۋq ?3?]96F?BBb͊?Ӑnp},{ Z?MnP?cA [uy(?fI=VWiJ?2a|Q(zc?՘s*gwZ? c> ?փ%2]U\R?8\g?wUqK߉ Z[)?6ҿ*)s?&ԀuyP?aR*o?S_Ë?؍d>Քa=2?خ9C.Se?@҈p:?/luy(?vx?앿Ex x?얿'=["?*߿˒:)z?ѷXb?غ)_pO?آa@?ؑ)?iJA?؍d>?|H?؝%?ͳ|?i}?nh? I?1ڤ?\|ؘ?E??g?1ί%?.2X?Ǯh]k'!W?ܻnwpz?ح٩T"?ܼj~#?C,zxl?ܫ`kz^? |Zq?܋^?n.?_0X:?rGE9?.۵?-#Nw???Qm݂?.]\?ud0+@?ͳ|?}ke?|?"S?۸d?$5?ۨXy=?瑧\лo?ۉ D?kz]z?T]?*ި?fQ?E ?ڌ ٔ[?}OB?L?ZFsB?Y}?ulvK?,'77?#-#?دłV??uy(?r ě?8?4J?ס?d'gM?iv?-V?֥LW?a?G{?HӮh]?5~g,?񣢜wk?r ? ܇Tw?*\|?ŬG?ղV?HU'(?՛=K^?rϕ?zN?|o'=?OIHV?k#c?m??1z?$_Z?k1;.^?ԴfP?[(?ԍ2"?4?nO;? b?J82vt?M? |?TԿ?iB?6?ӘJA c?pnC?ҕBB?o5I?&cI?A5Tu?//s?T`d?.H?7?ިc^?yR4?b#ᆘ5? *EM?fB?7 ܇U?d2m?Y?g*d?m1z?c^J82@".]\?U2a|@?EM_@%|p?L8\@u%F L?ҟvȴ9@r(?M@$=@8C?@%S?ʂ@~{?hA_F@t?Ԛ@n?Ե '0@3=?TɅoi@앿E?P@Ҳ?G#@O?Jb#ᆘ@puO? 7!=@׈+?&@V+ J?䎊r@Б}kf?޽@ IVE?׈`@ ?HQ@ (H?#x @ xl"h ?.3@ w?*EM`@ "HG?r/Y@ P?b@ \#?׵yh@ + ?.3@ m?؉ (w@U^ N?ؠl@y<ϕ@ RiYD">@-b86@‡~m1zO@?z%:э%@ﲫ ѷ@- ֶ[3@DCA0r2Lf@h},{ 5Xy>@fKrz@(.3͉.@,NxfQm݃@R?g$LD|1@|O"f'|E@ej' @„1Qi4.۶@ݬ˿ @ֳ-ם gb@?8R ^@];D=s@x.tT@oSeXO@DUGsPH@"8B[@puJD@ו-#NhQ@ 8ſcOJ@ \$_+ J@IQ V@53:}@Ma(9:@e c@}{ 1ί$*1@/ej?gߏ@?Z[(@-*ENtߏG0@yR4F@%߿TɅ@ i}F4@CPڤ*@P3 $@f;D=F@, =jF4@BXOLnn7ɛ@X4CԿ"@nqi<*@i4.ܿhƒ@'(bGXd@T ȿpϿT@1L蘝.@}OC远b@累q!KHӮh@TɆgSb˧2߿Zjj&+QHq 28#x֡ap:%1L_{$HGnڐ/l5a(o{ 1ίTfPKFfC7ɚ$iQX()'>Edob1 Z[) t}^>(Oag#%誣_e< #(zfI=ʞnp&`VԪË`8q`lu%F憭-f!<׿?`A7L9CsP ,lCrq6`>WT+ NN&Ԁoa;_IϿhJ(!laR*b]3)kV. ˼+@Pr[dZ1iQXKZOI2It1L˧2P]Jb#ᇿf:n,fXfQX/D*>puBmHQw\¹+׈ݲ,'iQY$̢ۿՅ}2 >WSp:~SiQX'=[ceO{<ϖү0G?ҞڹZT`dÿLnmJwМM>B؃?h]k; 7rG?'/W LPr?Ӹեc ;D=G?a(9- MUh? k~( X*0?ձH ı?`V. ?̢a SP ,l?`G -v5?&IR &,s.?Zݘ K:?ِ J{{?٬)r\ [?٥;K z9?v5C vF?Q 3պ?- qv1o?9ֱm?"R?9.:hA?٩>  ?ٵH??zu_ô?WS=ӄw?ڮ9CiQY?3]$E,]?8Ckv?) ?rz$0&?۬9-*?ᰉ'Q?-VS5IP?vȴ9X]r/?:pe^޾?6&,sdT~?}At>> ?gTF]c?*cPqP??$*?ܰ8ȅ c?ܦv zN?y FnCy?ۖБ}kf7QQ?1&x'M3H,?ڨmqbc?T]fA?2mCF]c?٩T!ud0+A?l?D)?5~g 4?a{j? sG;L?&.kC,z?LD|0?sl&kEv ?؃4D"??[6D|0?ԥ[BE8' ?9.<?5TuL'/W?{ 1ί%z9`?տrq6 0?K3߿O͞?Ӑ"wkQ?Цv D"?fP?) ?LfQm`VԪ?ԈP*V`?¤T~3"?~$.3?K]d?) ?6;%o-l5?ǸեZzN{?vtc4~g,?2"??[T9`?+jga(9-?Mn?gh3?$= ǎj?ZIf{/l5?ԤT~6zf?յyhł?策Z?փ4Ckj~"?KZY5;?ׁZRty?;'{5*8 ?{_IϿ,QH?ߏG0@sջ?%RKBE?^ Fd sG?ي ҿU2a|?٭v5%1?̷CӁZR?_տ DU?9͎!RBZ?hM?Y?R<64?/Ys?E˼+?<ϕ?;5Xy?7~+?07?G#? Fd?S?DUG?-#N?|?HG ?ے:)y?"}?)^?0p?ʁ?QH?ڈp:?[-M@$?FsB?=B?j?$tS?W}W?S{? =B?R}A?#cW?߹8R?GXd?.r/?hH??՜8J?鷿?լGG#?x73?mq?s?/{J#:?f[ ?dE#N?sPH?r2LfQ?M.?[($?Yt[?+@jU?P*?Jw?X'?եu?B¤T?ae?͉?$6e?^_0?C,z?hH?$ xF?s#x ?nC?}ke?=?VH?W}W?3]$E?q??g?w[0?%1?M3H+?l"h ԕ?\R-#?j ?D=Fk?`sX?8R}?+ ?84֡b?-#O?8}H@=s?0j+@h]k?N;5X@ݗ?ӟ@~?F]c@=b?B9C@lC?fB@HG?ԏ27@LPr?ۋq @$D?Б}ke@~7ޓ?ߏG0@@q?{ Z[@Stj~?f:@p@hM1@$tS氉'RT@nmͿԿ @21e@GG1;.^@+;<п3H+@hJw{@:э$'@{ x@5Ih@*d7D@Ez$Lo@߹8RRp:@JڹY|*@حVJw@-BY@- c^t)@2aB¤@Lk΅3 @f">ia@N@@(ӿU5Q@~Rv!ZS@˱:Ͽ@c^J8@7_Ft@%!}`N@+ Jqu!@/4֡a@A߹8R;5X@Yo.ӿ돛]@pƿ`@J%1L@>pȿA7Kƨ@5Bٿ]u@ ֶ[ydob@V[l7`@4Ck':@Tɯ{ @&ŗNf,d@~muMU@n~QR@.)sБfQm@Crq6fP@Y(ӿk@nmuB@eO@c^J8@{0m3 A!@B̢̿b@XOLn@ZIf|o'=@L/{Ov_@ʫ\a=2 ﯍?ײ7`]x 4T ǏvHG !5`ѷXd>[l7`]NU2IP]p 9;:i*)sCA놭-fG ayЦv mj[B,[Oag#%鹡vݬK]G#ρ;,]䣃'g+$ pпdis-ѿ^ N v5BM:' ѢSԤҲۿ7`]xmHQ[W~Vϫ[W}`̿ ҿӄvvYbul㫴NPO 6PA c S:э%пL&NΚ,gmHQH-*ENwkP᛺ %炿3zNяo̍2#m]eәo/O .H27ɿ3zNxեci4.۶av6ݠ kJv5C@x3#x 0HAMjOv`OډLD|0ﳿT ǎ ٔ[lohݘC\N'Rׄ1bƒ)JoO M U͉/Nʖ<BοԓՐ" I^5{ 9&"}jj&k΅3O Ѷo5Jomr6;%o9*\}O"}<`;wF{I^5?'(b{0$]$D 1ί%$*% k΅3pϿT w[0? k~ ׂӄv?$6e d_Zjj?ٟ %ڹ?1& -?cA [ /^?c  \m??ٔ@x 3)?ٲR `V?/{J#: [BE?ژ $ p n>W?Ѣ KxW)?}^_0 Gd,?!Wh Zx_?٥S W.Se?nY! 0T?> ;XbM?ڣY5;O+@y?|UDR??L_:)_?ېB¤U%ם?_Ë:}P?1&xl{?D;% ?܅ݗگx_?)^ %?+ J={ ?hƒ)C?¹M]9?$=Jt}^?ތ ٔ[ß`?[ SeX?ߏG0b?~$tK?m݂vsh?݄M:E1;.?/Vϫ$/? ěT5:?%]N ?t?B1Q==?߉7KƧ?sPHk΅3?"mCA0?6epd?Y2 -e?f3f'|F?4X 1P?>/v?٩TCA0?Fsؿ7 ܇U?'/Vֿ?LPr?V?ؿ/D)?fQm޿ k~(?aqxB0?|Gؿ۵y?p:~Gy ?~g,33333?kȟAİ?+ʫ(F?S 4¿K3?`V. V. ?s2V?㉠'RTa`kz?=IW?ޓՑDڐ?LAݿ1;.?ԐWx-8Bn?L#Nw?*0U2a|ŬG?tj~ۿ?վ"ʿ-?VSP -?LYt[ $ q?֑}ke*"'?EUGZ1?CAe@x?Wwde6P%?ז},uO7v?!Kr~+U?^ Fd\лo?ՙXdEy8J?ҝ%߿\? L/{H?A c SJ? 0j+ôr2?Ոhb{ 1?Q.ƼS=b?ӄv?F? D _ ??"}T6?H+եb?~+U !-w1?տbȿ gb? B ^?[Tп"?ַ`,vf?Q2"??ד+?Ѣ擞Ր?ؙ0 )?R&V?sh앿Ex?ـ^_0FI?9.WhI?Hӿ6?NP1<ݫ8q`?zG{3zN?ڢ~mؿ]x?ǎjM++?p&iB?!BotҲ?.< #9?J#9x-8Go*?_IWϕ?jj%'gM?iDg8~5TuL?Zjj&tr?@~⿦T ǎk?mȿ?ah?c ?#x ?/ek?sPH?u ?VϪ͟?eh?C$?Cc?ם gb?^5?|?޽? 7!?*ީ?ݕ1?2I?(wN&?ɵ D?ާ-?*ި? ~?98qa?Q?28?vf?&x?}W?tT?ke?սv?Dg8}?u ? '/?أ^?޾?n?_{?܅ b?Y|?Gz?ݏ]:?mǤ?=[!Z?T^?oh?9? >l?j~"?Y2?qiC?4n?{?܇Tw\??>p?ϕ?gM3H,?ɯ?/^ F?*ZFsC?ҝ&?/ej?~L??i?Z?r2L?ܒ%1?앿? ??'j@?lP?_A?qu!S?łV?W}W?3H+?d7?'RTa?տEwU?,]N?Oag#$?9vݬ?*)s?O"}?ԉf'?UD?-*EM?qp?ҝ&?SY2?cHj?MjOv?07?k΅?Ԏqi?G ?ԙ?L_?Ԉ&c?[BF?uy(?cs?`VԪ@ a=?GE84@p?07@LPr?&q@K?/^ F@0?H@)Dg8~?d7@X'?wkP@.۵?uy(@Qm݂?ԟ@~@B?,<@o6?8K@I{t?Z@5?9C@DR?g?ԩ`@b.]\? @^ t?^ s@x-8Go*?JD@f?Krz%@_?eO @ nc ?4X @ *ީ?ֈ~@ q,'77?^_0X@ ?>q?'(߹@ j_?ܜM?@ 7?@ \|ؘ?ֱ$5in@ ?5Xy=@ Ul oTL?׎[W@ eV?.r0@"*?cA [@E?nO;@#π3?ҝ&@qu"?Q֌i/o@ >?>BZc @@d8?A5Tu@ԕ*?m?@꫊\??F@6gw?e+@ʖ?VϪ͟@,?ם^J82v@ L8?1eә@ii}?{{@׈?j~"@{{?b#ᆘ5@L?.r/@J"?V`W@QH?e%1@"?ǟU=@(\?+a@@PH?jOv`@?X@6Ԫ?Z@nzG?_!-w1@kz]a E@$D(9-*@ =p'(߹@1Q;wF{@1ڥˮ@@#m3 A!@H߹8;Oag#@N!Rᰉ'R@ᛐꞿ oTK@u r\=x@łU5 @xW*6;%o@ۿzcsm@3 *@2[TW @M:wŗNe@]yg˿LfQn@zS|Jw@""Y5@@rz%EU5@b9m @dX:S@&Ԁu @ xFܿɚ$@2 eXO@/Ysh@DY! .}@Y2l-@2 ě0@Gݗ+Cc@\K οx>-@pD7ޓ@6P%hM@gt~ $ p@l5@Bo^ N@9.!~|@jܱFL_@ :s-S VrGE8GzH~|ᛑ;~$٩T!.Mjf'"n8\gK3ۿ$tS?Ҟ`sXUqKv e%.۵z9Ϳ뷿`͎[A [7Ov_خm3 B@ɿUqK'!W`Gjk}9~l<m=a\]U\r 6J0 m8F-8Go*Z&i-n.`dK3z'R /^vݭketҳPHnͳ|䎊r㲀,'\$Ev v /׿b}a|mǣ L[.47),_F!d.Ǹ X6Ck '0\N;|ᛑ9Y ǨM!5`LYt[C݀ |Zrv6ܴ:iEҿg Q2W!Kr9t[ ZFsB ƿٓݗ+k>տΚ,fX#cW =Blև7?߿sջ@Fnr/JL_T ǎkӎK9m ֶZ=ĆeOag#$6Ќ?>qЪd7rGEb8"?f'|rS? eAb˧2?ߗ9*EM`?0j+J?ޖeU.r?)Iem?2f?<ϕտFze?mq^iB?l?++%C$?e+aS?np&//SMj?hHտ);D?ۓݗ+kۭZ?۾ʫ\2 E?鷿aַCd?zG@&?=B5Xy>?csl&ld,?܃nP/l5?ܙʼnr ?ܤkA [7?ܠf>?݇ݗ+?76g?ݒd2n?EwU?ݵ?i}?nC? RiY`?7 ܇T?裭^?w\¹?钷?ޞ7?[l7`?ޡbw?y}?}^_0?f'|?'(߹?,'!W?=p =@?1P@wUqL? / @ ~?ٵ͉/@ jg ?9m @ $/??g@ U5Q/?th@ |[?EwUq@ #Y5;O?ռK[@ 2f//?kP{@M?՜8J@6_ح?֕Ew@u~g,?@Ȍ?_o@- qv?ڒO"}@CB?$5i@ֱm?ہv6@&/e?ؒ%1@q?'RT`e@:S?!Bo@C\?ᰉ'@9Ma?1&x@qN;6?^_0X@zVC?+@Q֌i/?ʽW@_F?ȡ7T7@8K?8YJ@8a ?IHU'@d:?5@LI(?Q@3 V@#d+@NN&Ԁ䣃'g@;,=@:)zhb@|N;Ϳ2LfQn@~+V8}H@쪸sջ@%K<`@">PӢi}@%]r/.H@ VIb@ǿء!Bp@Oag#$ȿn@a=1ҝ&@Б}kf8}H@`VIf{_@Gzٗ9@Ưłf'|F@2B n.@},˼+@@p>տH˒:@ Bݤi4.@jj&a@\u" ٔ[l7@ur 6@1P@u:? ~@ P{RJ@#^t)p:@vyЦv @92ޡ7T7@iuͿgM3H,@ 9_@s*sБ}k@Ø f;@b8PjOv@0HAx?@mǤ6z1ί%.3fﺈ&G#=Fkwz RiY`nlPlvJZpUy!-w1Ұ ěO M; ܀If{_]yЦ۲K44.۶łqQQX 7!տR*o?R>鷿؉ (w%S&>P U= 7"8Jׂӄvud0+@氿Գ,}8q`lM4.۵l_v QSyѹo55׈ٿq'(bD">jz9ͿTB1ͩlD$>BZc Ra{z&A(ohۋU=ȿ xF];:i?7 ܇ >-b8?]U\R Y[l7a?*) ?wY N?&,s- XdE#?ڇM E ?ڮ9C r2M?^_0X &,s.?=Ć- Y?l!-w 6z?Ms 1 ?~鷿 vM?ڙ̢b K$Jb$?~L Ev ?@$= o?۪y ߏG?n l!-w?p:~ 1F^"S?CkߏG0?Lr(?YrxzNz?ݞt8{0?{ 2\(?);DnC?o'=[fq?޶[-pT?$tS.}A?M@$=z`?ߢY5*+C?)r[?2P]?i;yRBZc?i}73?288 ?nY!^ Fe?҈pr(?> ;+C,z?AJM+лnw?LW&A(?o?R&WN?łS;w?e 03)?֌i/nRn?1ڤOB?}2f<!Z?㿱[W>Ye+a?"`ե?.ƼS;l"h ԕ?`kz][W~?Wx-8(zc?LPra E?^ s,d?6&,sQH?Oag#$ȿJ?Ms ?孖Z7 ?sպe?,<&A(?CAG 0j+?pPzcsl&?_ô ?yЦv!݂v?np&.Se?7 ݿ|G?>WScA \?'764J?atN ?娂jF$Jb?CcH'\лn?//tZx_?-e蒿^J82v?xQ֌i? oTK? ҿSpP?O4D?ؔG 0 -?ʁC?Z[(ѿRT`d?ٙEv rG?LSn?sP?MZ?ٍ.}At? oTKD*?]r/?䎊qj6P%?:pdJw?ۃ'gM3壃'gM?28^ s??) IV?($ xG{ 9&?WiJ7ɛ?܇~mHޭ+?ܷ%ם*")?S;wG٧KI?^)$D?GԦL/{J?sBY޿/?ݘR~ψeO?ݵ͉/jj%?y b˧2P?hH?"쪹?m?>WS?p&?*0?"?Wh?}? /?S 4?ߴ3?aR*o?S?P]q?M@$=?<+?u g?݂u?"S?ѷX?6e?ŗN?5~g?k΅4?vF?X' ?QR?ߨ.ǹ? ,k~?(?9? $?3 A!l?6?ٛf3]%?ʂ?k]?wʁ?F?"`A?؁Ԫ?`? =B? =?גd2n?7`]x?*?}A5?$Jb$?Jw|?̷֘?!-w1?27?|Zq?앿Ex?z9?@??֗O;d?y=b?y+?np&?lvJ#?z@d?ej@9~($ ?[($@tr?K@+C?4m@Jﲪ?CcH@~=?QQ@ܱF^?߹8R@uY|?ם gb@ɯ{?#@F]cf?ud@S;w?bM@?ﲫ?< @ɕ?&@H&c?`G@f=?תy@Ҳ?s@ZhA_?fI<@wpy?]9@/Y?Ƨ-@CQ?h@fP?Zx@Ԫ"?үO M@ oTK?Ѫ_@2i4?5B؄@y2?2flLYu@M>!-b8lL2a|Q@ʛԿ R䎊@ҝǿq1@%F L08@ :ҿ@쿱[WX%[@3 VA!@G- 8C@\#-#'>E@p(߹9D@{ 2a|Q@kP}޽@`k{XdE#@}v菆`V@NPƿ8YK@{J#9iJA@H0OX@˒:*cV@ڴ,Q|G@0uO7u@|ᛑvFs5I64K⩓ ߿maڿkȟAŬGH,d_oҿm\ﳿ;7ɚq!Kr qv/ek~`sXwFzenp&ɿ?z^޽NG`kz>*\$_-qu"?>qײNe G|Y5;l"h տ見=޶07&9䣃ᆘ5 Y!BoqKM[ϡ$516+jfqp̷Cdǣ G0@9??C,zxl /l?h Zjj?/^ F tAJM?4.۵ 7 ܇T?4m AJM+,?(zc ֡a?g qK?m\ 0J?_IW -8Go*?7 Ë`k?[BE i;y?ڿi, T? Zjj?$'( 햦Z?GzH Zqx?ۅ}2 앿?lvJ RiY_?N&Ԁu m?ܼ# }?$D d?݅r( n)sБ?r 44?4wr(?ކ-f{ 1ί?앿E˒:)?+?LPr?~='=["?trQQ?MUhnSeX?8YJ"͊?aBB?%RTw[?쪸9nD?  $ ?%o]K۠?E[ ?sl&k_?ZqxBL?$tS"?s`pϿ?NvݭF?ᮒO"}A5Tv??Fm^?kP|LPr?Ǹ?zcsl&v?>-b9'W ?*?98qay?k&i5?R}Aİ?t}^(g?},|5~g,?*ZFsC]k;?Zx_K?K R?6+j?xw\¹?"`;?QF]c?嫴NP2kv?0 )uɯ?LA},?ulvKM?BBv?J#9+\$?e+awFze?冘5ϕ?8q` =p ?ިcae?4J?Jbb˧?iJA hƒ?CA0҈p;?*)sѿ͞&?OQCrvJ"?/!-w1?< (xlvJ?ق+ʫix?)k;5X?[T2K4?If{_9m ?ڈp:_I?پL׿_P]?[l 0j+?>WS&Y?wUqK x?ۯ{ 9fC?p*ؿfl?ؐ$tT?p 9?;Oag#%?;D=G?e@x?y?$Jb#@,:?׳@Z1?נ{5*8@檎cI?טs*@K?ו1@mǤ?׃;K@y=c?[W}@uXy=?-M@$>@ѼUDR?F@3)k?'(@Ց?ud0+@եb?ᛐo@NΚ,?fC@ϕ?W'@mՐ?֨TɅ@fA?r ě@2`?+$@ sG?֗9m @{5*8?̷D@Jt}^?ثNP@%?ؙZx@NΚ,f?ز̷@&?؍@ \Tw\?z@ чn?Hjܱ@ fp*?G 0j+@ },{? (wN'@ g76? 1ί%@ hr?S@ *"?j@ * ?N@ Z?؋m@;L?.Ǹ@1&x?ןo~=@9wr(?ג:)y@zN{?ͳ|@RO"}?עHG@d2n?jOv`@m3 ?k @"_?CV@KI?!Bo@tT?@S;wG?ԮG@e8YK?ҨF4@- ?7@X%[\?R~Rv@5.r?ty@b*?6@$LD|?Υi4/@mq?ƒ)J@; ?v@c1ڥ?ôr2@C?GNΚ,@b?p&@_ô?$=@8F- @zhA_b@8R~ 7"@ /^ ~@V?ؿ`,@_ô?) @Y¿+jf@Cy@6},zcsl&@(\ ֮G@9.׍u@'4AJM@EHɅoiD@_m٩T!@LWx?z:@U\(Fkv@z~%|p@=1pr @ٱ1eә / @ s⹌~($ @>K/l@ >lL\(@50#̎@̷Կj@[BEw[0@LPrT:@ᰊ`,@%1^"@RD쪸@&V޿U5Q@&kɿe 0@|N;ͿzNz@  @:pe&A(@ D"Y|@MyЦv!fI=@VC⻃,]@paӄv@,QIs@a|Q9@ado0@98@WhI@fIgS@~|᜿ 4\@ia(9@?>ʁ@wpy?|hs@!~tj~@3#)I@J)sѿiJA@R*o?R#cW@lQH)4@G-sBY@q n.@ RiI{t@o~=y@r\=x%@ܮGM@!6pO4@K3ۿhH@KCB{@]cfϕ@X:SZR@ ǎk$*1@+$F}2f@CQ¿h%1@ZKCqiC@pX'76@ ֿ͔a=@"ʿ~@pd飿{5+@ȩK9XbM@Ć-˿ZFsB@9m{a@_of3]%@0$,]@0(߹9W>6z@D=FkSP @X  |@k΅38{@CA0WsPH@Bÿu/@q!Kj@@dE#݂u@`k{ $ q@:э&nD@I'?2m@҈p;j@'@Б}ke7T7@B4.۵@j@ ^#@ohܿL_A EbJB9C4&q*)&Il.T;ިc ܇Tw l-mx_ D _xF]qiC쪸ο =B oTKi;yײ EbP{\(u ,RIel oTLw+e+af)k.Su:>#$6eAy|ßF4.~/Ys ZIfeO>puپMT ǎ3rTO7ų?¤T' bh4^t)YN&Ԁy=bxsS&cS8\gMoTKuMU7CcH⭁v ѷX=ſnwpyFYJؿԥLW+`k{ޓՑx^ȿT󳦋S{׷AJM+ѐB¤U Z[p:~!-w1 (@4ΝsBZeH"S 5H\ ˩y}+ud0+A?gbx 7!?<64>$t?(\)(M?#$6e ȩK?litҳ?jUp ?KH̷?9m ֶqi?jj%R~Rw?DWS?\N-b8?82vtcgW ?r2LfQyQ?ܪcI{U'(b?ᛐoPH?CA۵y?JDпu?}W˿`,?ݮh]kEʿ |?u!RY2?ݪ_獣?eU.sGNΚ,?*0U2)k?J82vtѿd?ނ"oa?޺6;%%ם g?ϕߺ4Ck'?)a(n?]N ̿ښVWi?ߌ~($ xn?ߵ DՒ:)y?䣃'g!-w1?(پL?vF^)?y|àGX?*cP\ı?߾KQm݂?߉ Z[)9.?GZ19XbM?}3laR*o??)^ ۵y?ޭ-e鿳#?޵h 9?iY?V2Cf?L?nY5;O?Y5;Oa?;L?"?j?4\?[W~?ᚿ3 ?[BE?VH?mH?2I?Ưx^?_Ë?qiB?y(?*)?"?ЙO"}?}OB?|H?p =q?#Nv?^5?|?ԙO"}?Ebh?OQCr?"`A?9?\(?a@O?T ǎ?ۜ[?QCrq?ݞ%?ᇨM?حU?y ?CA?tSMj?D)?vJ"?p:~?~g,?䙙?\$_?n?ᖑ\л?A!?៩~+V?,Q?r/Y?NzVC?.??Ҟ?np?;yR5?xF?;'?Lnm?"}?:?!R<6?T!D(N? Z?޷`,??܂i?M?ڭWw?{?thM?Z1 ?ظ[BF?D(M?JL_?Bom? qu"? =?2_?_?@c^J8?:I< ?g,?B?Κ,fX?ƈzd?}ӄ?;nwpz?ܱF^"S?(\?FsB??7 ܇?V??۞t??5IO?LW?ڮ9C?+@x?9_?Q?E?o5I?۰'RT?7rG? DU?ί%?ڤTɆ?:v?=?Z?5~@=OB?٧ڤ+@O"}?zxl"h @ (?`]x@jnp&?XbM@Hjܱ?Q@I7KƧ?4J@?h@ '0?رm@Ca@N?m?>@ =?0 7@[-?ҝ&@Xf'|F?GNΚ@ x?נQCrq@#-#O?ׂӄv@`sW?hr Ĝ@I< ?@NU@_??@Цv ?ֹMa@ ͳ}?ؤT~@`?؋xW)@Ӿ"?ؤ*@OIHV?<쿱[@/e?sP@ Q ?m@ ʆ6&?*\}@ TVWj?/{J#:@ ېn?@ 16;%p?p 9@ 0$?S{@ /n?#@ $̢?1&@ j?٠@V#?`:@c4?޽@h>BZc?ء߹8R@+@jU?@_h3??@ڤ? qu@O M?a@? ?֍:w@^J82v?U.r@9&A?q6@# >l?X:S@~%?ѿb@Κ,fX?д9XbN@dZ?ЮSeX@Xם gb?Ёohی@6e?Тa@VC?lW,@($@ȟ@&V@@+Ƨ]s@BfQB>P@Y_eڹ@p#cWa E@5NP@LFIl@?¿T@hb@ޞA [7@o~=c^t)@_տS&@+@yKI@08\guO7u@D xFܿB@W& 6&@k ~п+CB@~7ޓK]cA@,'77kP{@cHkﲪ@l!-:э%@ȴ9Xb2 E@qxBI@ k0p@;:hlC@ʛԿ qp@6ᛐo@?u%@Vl!Sy3@ 8YԿ e ؿX' HտᰉyE İkJw"h ԕ[ty%Lk΅3\|ؘ '|E˼,dlvJ]N H`VտҔpd,#y5Xy>.ȿJw?¿B¤Tr2L?WSi4?^)xd?ѿrq6>f?Go*ZF- q?qu!=Ć.?k6?եb`҈p?ռK[%әo/?֞FI 靈;D?rGE85 [W??5?|h oYs?灃d 1o?و;D=G T6?Ov_ !R?ڏ6 wUqK?? :>B?]N iQY?uO7u 27?A_E g?G 0j Jw|?JM++ Ŭ?ͳ| !D(N?K۠& >(?G 0j _0X:?8}H $/?ߨM @'? ^# /s?D; s?~|ᛑ 7{?๡vݬhH?jUpOag#%?5{_I?uMUi9+?_gw?z@cz$?8}Hm=?vi(\ ?RZ?zNzV?QZ?N;5X2"?aR*o?R?a@NG 0j?+@jUul?漾a.Se?0OXHH?U.rVX?iQX()^?#̍⬿DG 0j?zG{W=?flL?T:憿xF]d?ڟvȴ9ڹY?N=1o?1eәouMU?wUqKy|ß?ۼZc4?S#ŗNe?B0 ÿ&,s-?܂i¿Jw?\H?P3:I.3?:v𩝈;D?ud0+@ <`?ݮzGk&j?u:>/픅]r?\|ؘT61?OQCr*0U2?ނjF5Ǹզ?޳,葒d2?sP ,k?ĿVu?qpke?ݝ gbVWj?R}A5?;! [6?atؙ0 )?r2LfQOv_خ?~=ӵ͉/?3tiiDg8~?hKΈ&c?8CkʪcI{?o䏿X6F?WSĬ0?6fI¥LW?+#M?yg꿿K]c?ߦa(9.++%?ߐ㿹>BZc?ߦ Eb࠿_?s?8 ^޽?yQ.ƼS;?ѷX?)Ie?x?d2m?k΅3?/^ F?Q?k;BZcK@:S丿qbb˧@p*0UCrq6@J٩@+'j@@ud0+x-8Go@#̍⬿T6@%;:ip:~@GY򺝿($Jb@NU޽@SI@[6*0@)r\$')@Y >@ߤ?ɿ |Zr@=`]x@f#@臨MHӮh]@3Pݿx^ @%K?@ ǎkʁ@$5inY?g@;%o9}@U=C,zx@>-b8ڿiQX@Wx 0j+@,vJ#s-@~|᜿{@6y|à- qv@Tm8G{@_@k ͳk}:@RaYt[ @bh40H@r@-vSMj@Ysڐ@uQ֌i/Nvݭ@,(#x @替/w@v ڐ@Pſat@+҈ο+ @A~|Mty@bw]g-"@2I`sW@پL׿tҲ@uO7U=@>6z@-Zr2L@C  |@Y>BZ=@oȿa2^@;'Y!@`b@O4D|0@?:~@UDR?1zN@q67T6@]k;k@np&@2/mm\@FپLI. @Z>B>-b@m/^ @x'9Ev M:&ꌨ?Ck& I^5?LA錨?Y! 7!=s-ѿq!Ksƒ)JfI<@xx?tj*0U2ant!-w2"&q^ʫ\ڤ+I*0U2a.H3E sg[=FkwpO8YK鷿NxWW 앿En.ĿceO\|ؙtO"}zNzA_Eൿa=1as9.I[W~#π30'RTcVxW)ނ},{"ʿݣn.3ȟ@Ck")%1d Z[(jUp3ߤ{ty[-M@$a [7؄8 F">i׮1*fBڹYv_ح1&xȟ@7KƧgSXdE$әo.rq6̢a>POX7f">i7ueI'>Eo?R&W+v?.۵-\?!-w2o?юuy(:?I^5?}e??vjUp?ӵIHU:э%?}A5Tvn?IV`F]c?iQXS;?CVI'RTa?עr/Y [-M@?U5Q/ ͩ>!?*)s Mj?ٔ1zN O4?$_Zjj )^?ڱm ѱ+??ҝ ?f3 S򐫴N?iY_a l oTL?eV 6&,?ݓ5IP H?!5_ [=K^?ު[B yЦv?.< o~=?߬> e?6 c^?R?g %+a? 思IQ?p:~ ŬGH? ( h5~?NΚ,f )K?>E`??D(9-?2I=ӄw?!BpT?,'77~6z?GE84 ?>p?6enY!?{np?@4n5!R?G#-?yUD?ײ?DFVI?E?3th$TɆ?eO h5~?p:S&?~鷿/w?ϿT ŬG?\(\.3? |Zq/:?ިc^t]cA ?Ϳm?@jj%?k;<Ԫ?nCy>=ć?cV3 A!?at ?>p?uy(ڿHQ?眡bxQ?9Cſd?n [?VԪ^z9?,k~($?[W>6z3H+?ۧKI.>lLYu?=>'?9_ǣ ?܀IQP3:}?"tqq? 8CwFz?LnmͿp:~?ݍO;dZԿ ?̍2#/:? |ZqjX?Fd|o'=?ށRLD|0?޺)_U?{msP?(ϕ?]$D[-M@?ߐB¤UHQ?|?s3 W?MUhǿzcsl&?&Ԁu5?|h?ެ\ #?Mؿl//t?t}^_۲R?SP -e?Jwָ{0?'/WY?Ŀ2m?, qu"?u%F y=b?a(9t>=ć?tr{?6z_a(9? sG?a(9-#?Jb#ᆘpO4?FVIOIHV?]q"ިc^t?٩Z?}9ݿ]U\?PܜM?Κ,fXf:?M++?;'j@?⾠K?/e?_o?/D)?]k;=?6C???&?[BE? #y?B ?ǒ 4?㱯:?[T? Eb?ːB¤U?㕿Ew?yЦv ?ㅱH?M:?vf?[BE?gwY?ԩK?Wh?Jw?GE84?\R-#?84֡b?۲,'?-M@$>??F?$ p?F L/?}H?<`?z$LD?~6?*0?$tS?PH?>-b8?绘A??a?ɯ{?:S&?j@?z?S&?rG?@?t?wd?#cW?c Sy?`N?ϿT ?K?K۠'?zxl"h ? Z[)?}OC?L8\?2I?S;wF?ce?u!.?-V?If{_?`,?ล[BF?@~?fI=? Fd?^ Fe?>iQ?łU?_Ft?;?)r?@N?98qa?ߴNP1??Z1 ?9C?r 6?Q?FIm?$LD|?a=1?`?5Xy=?t^ N?ݪ_?%&?o~=?RCQ?CA0P@%[[?ٔ[l7a@| #?k&i@r[U?g@+[-M@%?ݩy}@Lnm?Zjj&@6;%?D">@eu:>/?2 E@;D=G?}2f<@%@x?-*EM@v&,s.?a@O@=b?thM@o5?nO@>{?گ0@ѷ?M>!@m?VϪ@()Ie?ِl-@{ײ?HU'(c@Ë`?(@M gw?-#Nw@N;5?[l@=`N?w[0H@Q?%1@R/l5?VH@_?u g@ 'd?4@ ?ڇ~mH@ gS?iB@ UGZ2?ۇ V@ ][?%RK@ S 5?ڐWx-8@ Y`?]ce@ ߊ ?k@ ]}H?ټwd@ Ov_خ?KCV@q6?Jw|@ >lLY?7T6@OB?ZpU@@?ٔ[l7a@`Y?`N@C?ϕ@s?~鷿@t?!.I@Z:э&?קڤ+@?f:@!W?\R-#@OBZ@Y֖g@f4AJz@d@_.HU2a|@hr!ף@Ҳۿ{_I@uefE앿Ex@ ҈οyV@sB2I@v Z@N;6">i@n"h ԕ@)> [l7`]@jj&N;5@D)84֡b@{5*8ɯ@5~g,⣃'gM@UD73@zNޚ,fW@/n^"S@(&c֍@AR<6ׅQ@l5ͿڞD<@FtY@ |@Jb#ᇿ,>@$tg#$6e@G 0j+ @/ŬGG@B_Ŀsl&l@PnCCA0@[_IϿmqb@c-#O1;.]@kJwK>WS@s|ݿhr Ĝ@QCrq2I@R 7@v5Bg*@[ xF]@o*ZF~+UG 0j+d98_Ft(~鸿fPtj+CB)Iei}m [ i 7!=D=Fl+;.]QCV~鷿9?zyCxB0eLWy|àRd2nt}^_1>EʿT6*OBѿsWp׈ٿ7 ܇!BpuMUis!.I֡afyUDjX%[ ~п:p֡a8\h~WS`k{g|H 4P?>q+j9;:h !\ŬGH y}0 (xB0s-XbMӿD ^4mƿtrfA[ cI{t$Jb#uQ֌i/[ $DUGA_Ë%|o'ud0+D|0 O;dZeXOL^߿ڇ+ Iޓֿ٪y}At?k}:~6׈ivj2IGG#N6F qbb˧2RԞnp&_ôj앿E~$ y,fWxP3^ s͉ВyQ8 Ϗfv?n~e[BE?aI`?ygt+Zy?ٔ[l7a 7!=?Ӈe?G{ ?Q֌ig76?տEwU*y?{_IaR*o??3zNՐ?>BZcn۵?ؘa /{J#:?DM łV?t { 9?ڗc^t) oej??) D /~=? *ZFs?܊? @?,QH n>lLYu?pa -a(9?a|Q >B[?>WS ʫ]?߀^_0 j%ם ?-*EN 'X:S?FsB [[?Ǹ h ԕ?ȟ@ _Ë? ,k~ Sn?JA c Q?ዬq 2m?΅3t Zިc^?nO m?V`V $ p?]91zN?앿EOo?# ?L8S?+H?f'|Fnc ?k&inp&?y|3 W?Y_a(_r ?KZ)*0U2a?pϿTϕ?nmHQ?#cVݗ+k?㓳+?-Ve|o?Y`r[U?As?.Hm݂v?ߤ@?#̍2P%?*EM[qu!?1eәI< ?u!.k?>P3I.3?< # $ ?[l7`UDR?䣃'gM:hA_??) Dҝ%?鷪%םA0O?!Bo\лn?*o?R&t?[ ܜM??{ 1ί%P1!?9䣃'Fs?SMjT Ǐ?lvJ#xW)?10 (?ߤ@Q?ಪ9m堥&?ȊGX%[[?ݗ+j{? eAz9?!-w1g l?xB1Q?R~=?๶o5ҿ螃%?/lKƧ?rGE8s?CcH䦋?2W¿T:?L8\?b˧2Pg l?t[ B?HLN&Ԁu?:)yj?]cA ?៩~+V<+?tިc?},)4?Tw[U\R-?mǣ ˏ?LfQm|o'=\?%F L0T6?*Ƹ[BF?ޓՑb}V?Ŭ8\h?׈++ʫ]?<`#c?G{SP ?$5iniu?2fBZc?=@{J#9?3rS@$Jb?Ӹf:@eO?Zjj&@I;D?>pu@6F ?ӀP@ڗ2_?eڹ@Ѣ?)4@M?Ck@g?~6@d>?S{@Y?ѫU=@L? ԕ*@6_?̏6@J~"?R~R@\ #?ffffff@gGCk@/̥[BE@VXѦ@9wr(eXOL@`O"}@ڂ},|Θa @`k{A(o@qSyr(@f`V.3H+@IeY!@[쪸ο)r\>@wkQnh@s2fWx-@l?>pο D@IVȿK]d@eAoa@{0@&@8J@ 3z{5+@XdEsBY@n#@FtGG#@+}At>@H쿱[W?@1UDR<@H)Iewpy,@bulmǣ @oAs V@zxl"@Ҁ,'T61@S|^)@!y|ß+ I^@Fd5Xy>@G#пLA@7r(Ǹե@X/D*ߤ@@E84׿ ~@A c s-@H˒:L@#/D),?@FNΚ,g灃@P1<5IP@8Y2D=Fk@!WhLfQm@򐫴N{ 9@Y|@b8//t@Wx-8ud0+@@f&cI@Cd֦Y@n@ɿD)@v0H@@Fze鷿@ΧG$Jb#@<}At?QX(@`]xO"}@5I;dZ@cI{tc Sy@Ϫ͟iN@<`vtc4@/VпG|@D^ N@ّUD\(@pO4@uO7 @ѷ1F^"S@f:[k@1o6\$_@O{ 9{ 1ί@nO;z@@ $Dڐ@ԇ#ֶZ@ʁ"h ԕ@]/w7KƧ@y=cs2@ᆘ5M@RϋX6@=K^@ % @3tiBT~@t4@GRT`e},@W),m ֶ@fS;۠&@v9.ulv@ 0쿱[W@zNRT`eW}W`]xFsܿu 灃*0U2as ٔ[l?>b I^5ՐP =q ͳ}>쿱[W:p,&kvFIf{_puO7Ǹ̷ֿDc4c^J82doѷY_˿Y!~6ҿk΅灄QH;.]+|j~#LA"gOIH˒:)zQFVJD<64e%&q;LT[ ٔ[l773M K۠'|E˼+F^"Ьh)4ϼ+@yV. ?1;.-b8-b8?%1-B?Ho~۠&?{ 1ίH?5Q.ƽDپ?f3]%J?T:-Y?fI<\ y?trn.2?ꋬq eK?.Se_1P?zN{[&?2I\N;?cI{tan?=氿ii}? ZqsMjO?e@yoa?{Fsջ?1]q"?B9C򜡋bx?ߏG0%|?)4ӿBzcsl?F]cfn>W?s¿a@N?hr ſH?jT?88)?f/?d9䤿jF4?}Vl!ġ߹8R?L‘\лo?Ov_خSMj?FIײ?+ I^ ?㮧G濰T;?qu![k?l7`]y~쿱[W??n.3?6C-?ƒ)J?4֡a?"`B?Q?e?Ev ?ϕ?Ŋ6&? x>?ƯłV?B ?N&Ԁ?孁v?Ȓ7?^޾?r[T?傔VW?а{? 4X?Ҩmqbc?䢇~m?Ցd2?䊛Կ ?R<64?xl"h ?ɯ?o'=[?ݐnp?o*ZFs?#-?sGO?f'|E˼?}Vl!?ⷕ-#N?䋬q ? / ?䝲-V?_a(9?th?浝yh?¤T~? 6P&?tr?^)4?bw\?{?o~=?OX7?İ?Q.ƼS?v ?a?t[ ?vF?.< ?TɅ?D?Tk&j?|0??.}At?򙮒O"}?a?1+??)^?x-8Go?[[?⾋i;?!-w?⡠?}H˒?|E˼+?1zN?R4?8qa?'j@?r䎊q? ?:)y?͉.?ke?D=Fl?PH?+ʫ?گx_?ffffff?RD?At>=?($ xG?"0?پL?sPH?d? ?#9?i}?>BZ?py+?.*)t?$/@l?_F@v?wd9@Q ?Pr[U@IHU?+U@hCP?̢a@t?\(@OV`W?|E˼+@Q?2 E@H?As@_*c?WS@k?Q_@c^t)?c^t)@{?a@r䎊q?ܦL/{J@ݬ?cI{t@Xf'|F?)m@ =?;@T6?!laR*o@fWx?oTK:@Y?T6@ FS;?.Se@ #y?W @ $_[?ޖ\л@ m1z?1;.^@ *\}?E84֡@ GNΚ?Ѣ@ U-#N?ܺKC@ Vu?ܴi@ T]r?> ;@ 7T7?܍ɰ@ M|?8J@ 2^? V@'S?A_E@WS?#@]k;=?ـ |Zr@a?[-M@$@"M?p`@yE ?QQ@v ׈?C\@ڐ?͉.@5k΅?٫!Z@{s?iv@v?eO @򐫴NQ?x@4r2M?> ;@p*?v_ح@Ր?6P%@A_E?k&i@P ,k?A7Kƨ@FJ? :э@ ?MUhƓ@r/Z?!D(M@JF4?ڤ*@wKƧ?ӿT Ǐ@fQm?d=@,R??) D@l oTL?Ѝd>@X?7 @앿E?ɴ$_Zj@<8J?D=Fk@XPH?l @qK?g@vݭ73@R}ASP ,l@3 WԙO"}@p8ܱF^@>=ć#M@^"@Mty sG@j{e+a@w[09m ֶ@\"@˗xW)$Jb#@[6@LfQneXOL@vjKHӮh@>//:~@˼+ٿm@3rzNzVC@,02vtc5@D{0 k~(@f Eb࠿yUD@If{_nY!@@~pO@vݭ,?@B8R~@Ԣ3'76@׈ٿ~mH@!@Nڐ @Qmǣ @$5엷AJM+@*0[BE@`Aꉠ'RTa@u$Jb$@PaWx-8@\64T^@M&IQ@Б}kf緀4m@7rG-M@$>@9&A (@Κ,f(@uMUbb˧3@ʂa@6zq!Ks@ko~=@g:pe*ި@{I< (@p +U@Hӿ"/@ʿ9m@f3]%bCV@("@;yR52 F@v_ح`@9䣃&@~?R&W@ڲ{W@yQs4@?i,kv@eCkPH@M6[-@D _ts@J:э%@sWp1 @9.@ _1+@z9[y@3bb˧3;'@Hzcq @XR}Կק&@n`sW;'@̢a7-#N@ Risg@RJ˿¤T~@ v5C&.@^~L¹M@vzxl"h@6;%o`E@!-w`@Y!ƿ%1@aOX7@p (<@*cǿtq@~"HG@Vl!E /@2P] 4}9ݿWh^߿Wᛐod2n+@jU>-b8g,xFNx1z+ҿbR+ Ist!-w2N;5X`28XdE#M^=1o9dob?$Q֌i//s@98?) E_IϿ$ xF4AJ蟔]sлnwpQzN{7ɛud0#-O"}*0w+jտPܜNa!Bp[l7`Iᰉ' >lL2kvÿ|G{f'|FfQ㛺 o?R&uMU5dob)4&%;:i-5B؄m0j+{ 1ίS]$DEv 9Maߝ-Vz9ޱmlvJT ǎ靈;D)4ΒO"}Y|H+ڐ\¹*EM`|n.GNΚ,`>-b9eO C̍2ׅHL'\лnֿ֦/e g RJ˿гdzGbb˧3<64׈ٿejx{5+ѐB¤UZKCмpd;k΅W32z9?ivu? qu߇i,?ҡbw?bD\?#π3`,? >lbh4?բr/YC$6e?]\#?f3]s?/^ Gƃ<`?ؓ򐫴Nݗ?N;5XD-*EN?_ozcsl?ڿ n?ty}2f/0 :э?th 1P?R4 - $ ?*\ m3 B?*") z? qg?VCg:)z?f=p =?+LfQn?D8q`l?㛐n>!?Mj^CV?ܜM?(zc?YJEZ?hިc^t?c^t)$LD|?ʖ}Q.Ƽ?x^ $2m?ᛐo ?3rT'2P]?^  >l?v ׈M[?!laR*&? Fd"?~g,fJ?䎊qjW ?OB98C?<ϕw%ם?nFI?L_xW)?^_0XBC?CP/?<޿ݗ+k?vJ"?LYt[TuK?8{0?鰉'RT*ZFsC?遃do.ƼS;?hA_FGNΚ,?_{ȿl7`]y?TK:u%F ?Vtzcsm?tSMj?,<Ë`?¤T~&I?޽`V. ?X:SO M?ިc^t*OLnm?/4xB0?@jUpWx-8?ߊڹY oTK?f3G#ρ? |[i}?/{J#:޽?QCrq7X¤T?r2LfQg l?yQ 2"?+h3)?|ƿPr[?c C,zx? xF]v ׈?'/Vֿj?CA0PRiY_?]U\RCA0?wUqKk;WSS?Pr[UC$?Wwd7KƧ?h]k;?QQ֌>?hr ĜW&?}keQ?l-:?⡋bwĿ[ ?݂u ѷ?⾵m ֶ[?i;yS#$6e?T ǎعMa?Ƨ-pd?U'(b?ⳑd3y+?`̿JL?|ß`[0HA?Zjj&͹?3ߤf:?aH˒:*?n.Ŀ1&? ȼj~#?:ҿG#?FVK? EvHӮh]?㜡bxGX?'/Vֿ}^_0?4X ?׈ٿ0?2P]O;dZ?ZRD??q!Kr?.}A?~Rv?)I??m8Y? ?H@q?R~?%|o?r/Y?/D)?k&i? =p ?g8}H?ɂ_?61f?=?ty? gw?=?j~"? c Sz?ذȊG?tr?ۆnCy?k;P3?L_?M3H+?#?i}?6&,s.?Tw[?R~? =p?*)s?/V?[W>6z?ʖ\?<ϕ?|?n?n?g k?v ?ײ?B¤U?08?R&V?4m8?tq??8J? ҉?:}OC?B0 ?J?ǣ ??*0?r2LfQ?7~+?K:?bw\?*cO?rQ?[T? 0j+? ^?`? $ q?L8\?⛐n?4?vFJ?+?R&V?H!laR*?5*8?,?+@x?`l oT?:>//?PH?>lLYt?E?-Y?h>BZc? Nʗ?@jUp?͞%?^?ײ?^?׈?]9?֡a?AJM++@nwpy?0U2a|@nCy?%ם g@ZS?Y5;@9P?*0@#9?ɯ@ZQ_?`,@lvJ?@WO;d?{ 1ί@2vtc? V@nCy?E@Gj?]U\@UGZ2?jj%@ͳ}?x@*5_õ?އ+ I@%1?:)y@/~=?x?@9Y ?ݚ3 @?>E@n?3rS@V3? @ NMj?#x@ .VX?">i@ rkv?a@ ï?*cP@ !=1p?^ N@ P ,k?c^t)@ G 0?sl&k@ -`?ݔ1zN@ }s?ݡ$5@ U=?[BE@ g!Wh?nh@ "0?J@HjܱF?ڸ{0@]N ?Ov_@'M3H,? B @bb˧3?M>!@ [6?X@hb?:@ $ ?ڰJ@Wp?Wx-8G@)?) ?)k@pW?U\R.@2W?y2@f:?ؓȟ@@:6C?{ 1ί%@ qv?l@/m?N&Ԁu@Oag#%?ʖ]@dҲM?ոd@,?n.2@u?7ɚ$@wpy?@DUGZ2?ɯ@km?پLI(@+?ԴfP@Y!?k&j@OB?eh@؎6F?X@ܜM?ZFsB@oiDg8?jF4@,e@?6C-@GǸ?uO7v@ =b@Q֌@wd#@{tҳ@Q9C@"o]U@z$LD:}OC@kF4AN&Ԁu@?gܜbx@VZIfmH@`^_0D@b˧2߿m@1.4@:$')@y -_@-*Eo.@,.r0@4j ěT@At@D=Fk)sБ}@CcVAt>=@@If{_Y =@>Eʿ@>?ײ儠1@Vo5J%@.}FIm@ŧK傔VW@ \$mHQ@i[W~*ި@+jfϿ5@L{ Z\ (w@d0#@<ϖlaR*o?@PH@r҈p@`A7,@_ô|0@]N o@zG$tS@`O0+@jU@/{J#:If{_@7#x @dlC@ѷ΅3t@F^"S@1)z@c@k:)z\(@=%!u@vs4@Hb)^@\o'=\~($ @Z9`D=Fl@^\N<9Ma@iֶZ73@#,zxlk[-M@%@52a|ڿ}ڹZ@BٿeO@詼K%1@At>>=Ć@{5*8/7Te&ڿHQSm3 AAto./.ȿﲪ/wR?g _|ěSCcH7ɚ$k쫟U=*0U 1ί%ᛐ땕fud0+ gwm\ꂔVW~ N˿C\h7 r(S5IP#c=[!Zeh'8}H7 ܇UȊG[($sπ3TɅoiGNϿsպ;'jPe@x*0UJb#ᇿP ,kk[-M@`A7SH+RT`d:^5?|Ԫ"!5TuWwdŬGH۠&˿`,&q+Y}k~(${ȿu:>/Q֌iDiOQDyN`,~|3MjO,s-HHB؃46Y`ߟfr(D=Fl؍ɰłש*0U2ar ƼS;lI'?O̢a2,R)mk&jLA"Ԫr/Ya EcљPr[,]uy)|ß`0 7]=?Ь0_6&,s?f3<?ҙ̢bڹZ?^iQY?#ᆘ5iB?S;wGE?ի8q`_0X?oa~y?1eәo]ulv?EwUq=q"?ذ ěyg?nh ׈?+@x|O?-"p'RT?۠ k-3 A!?X nX/E?,&? $ q`,?n~m?ŬG  4?߻ײ {e@y?0 FIm? hM?ܜM? ty?$ p $Jb#?UqK hmqbc?sWp S 4?{ ()Ie?e% ⌽D?İ a@O?9&A) Bn?hA_F l5?tj~ =K?⼾a ;A?},{ Bo?jܱF?Q2<*?- qf;?әo.p:~?u ?;?cI{t?>B[RT`e?r2L\R-#?"S 5m?R&V ?v ׈9m?6;%oLfQn?e 0vi?VϪK$?s*-8Y?@x??~6M?7KƧK҈?[W~ ?Wp+><`? B gb? L/{ |[?[ >LX?鲪9mܜM?9.ôr?m=M5Xy>?ʖ\_ح?qu!U?T`d11?k~($~=?\>?+@jUnN&Ԁ?u!L?^'gM3H?:pd =p ? f?Ӯh]k ԕ*?")*͞&?T ǎ^ѷY?4.۵Կ ?#D|0?x>-Q?/^ Fǿ6_?c^J82O;dZ?R<6/???14Ck?պ5^޾?r 6&?7`]x,d?\|ؘCk&?:p?T~'j@?)^P|?b;D? 8C?*8 [W>6z?JA c 2?hۋq T6?6&-d̢?kiu?nVWj? B¤T?0&c?"&7!E?~+U 9??h73? 4XͿɥe?}^_0?? (wN'8YJ?(za@O?`V. Ŭ?|GW&? ѷ?c s? k~(?c x?tj? b?!-w1?ᰊ?,s-?&,s-?/e?9䣃?Ho~?\лnw?i,d?o~=?1z?1P?*1{?nC?> ?ڐ?Q?ae? (?*\|?T~?%1?'(߹?&kȟ?4X ?ޝIQ?j@'?T ǎk?RCQ?k ?9_?m?^ Fd?sБ}k?nP?҈p?LA?JD?涮}Vl?谞8?|?Ho?¹M?m3 A!?<ϕ?.r0??i}?\?FVI??%1L?/0?٩T!?4?-"?wFze?ޓՑ?#Nv??P3:?43?4n?P]q?⋂@2(?@q@ (? $@M:?Q@A(?ɯ@E84? B @ôr?mqb@p? ѷ@6Fs?݂u@/V?u@ ,k~?gt}@_U=?'76@v?{0@?Y@F$/?Up @tSM?<@#d?ߠ k@͞?2^@mǣ?E@W9?`G@QH??) @ؘ?ݔO M@ LD"?TԿ@ fB?஧G@ v?'76@ )nX/E?+@ If{_?hJ@ i/n? ҈@ 4AJ?+jg@ do?}At>>@ "0?iDg8~@ J#9? I^5@ Q?ީ @=K?݃;K@xvF?'(b@`?,d@LI(?P]@ 7"?ۑUDR@0 ,k?!5@q)?@?l/@ UhƓ?!<@C-#O?&.@ /^?ڤ@_p?eU.r@ )k?^)@r%1??@CA?yUD@ᛐo?ߤ?@'(?$@;ײ?sպ@fd?ձ:@r[U?]$D@)s?np&@E#N?kz]z@^t)? e@q`l ?̈́M:@:?ɨg@*EM`?Š@Oπ3r?[W>6z@5;Oag@kP| @sB͉@v|Gؿf'@o M;J!@ߤf3]$@a@O'(@hHӍ@4:ۿ*)@?gV@[,]`N@{ /^ H@pu"&@a=1}At?@$/XdE#@'Y򺝿iu @Ve+@s|O(zc@g V׿1@[%o^^J82v@X&IQ@ *0U2a-*EM@H˒:p:@Atdi@r*o?Rҝ%@7֌i/n@/mqbb@wpy埿C,z@陙@,WxXdE#@c`k9}@6&>iQY@@c^JaR*o?S@9Cſ+U@SZ޿K۠'@Ptqq+CB@kxW)`@n. gb@SϿ|o'=@&kɿ7@Կ RL@{ 9Ib@#x !o@I^5?`kz@a E ٔ[l@rq6̷@-a(9Ć-@n.GO@8dat@oyV@<쿱(o@tSMa(9@$tSb@߳mȿP@">i􌈤~@/G0@9Zy@R&V޿ ͳ}@n3Dw@3}Vl!@r(rS@#9?) @ݘu"@?ײMnY@S;w},{ Z@|#Nw@Ց@j+Pnwp@%Q녿SeX@RSn;/V@oiDg|hs@F^"wY@p&Q@>BZ6C-@zc^5?|@:HL@}9ݿ|ᛐIe2kv =p׿sպvj@xd20~Y#xj{{l-V},f:Bӄvsg.]\ʿپLI}ZpT<"}D=Fkwr(4Ck'ÀP0 7=訂jFm ěTLPr|o'h#fQSyuy(9 ( ͳ}!(o`V. v5B1ڥ{ſ,'7-8Go*+ʬ#̍⬿~mH8YKW}WD|0;rq6_ËX\g*M:>*RC#puOi;yb7T믿,zxl"2LfQ98qaafH˒:*э%пXy=c~m\jj%b}}A5TvELWْs)9Y ةiu  A! M;ۋq ѢY6!.ImǤ 2fPOLnm?Y|cV?^i?0EM_?a Ec}H?8nh?@[M5Xy>?csl&l6e?r(&V@?İSZ?OIHZFsC?`-:S?XW?#Mh]kWSฺ)?W}WPr[? VEsP?dc4?Qֳ,?nhպ B?u:>/,P?|G?)m?G 0?1?HG?*)s?S?\(\?{5*8?Q?FV?)^?x ?f{_J?Q_p?ﺝ`?l6?P*?]ce??[T?f{_J?5? ?{ 2??h?xW)??Jb#ᆘ?ffffff?a?5?pO??,WT@< ?㮒O"}@,fW?t[ @#{ 2?,@;%o?i;?L@@ ma(9? :э@ e?Ć-@ 3/ek?5IP@ H?R?g@|? 4\@h߹8?QQ֌@ɚ$(?ޒ%1@UBZc@'gM3?OX6@ HQ?BE@RiY_?,@VE?e+@m\?t}^_1@~($ ?,Q@ffffff?oi@?g?\>@4?*")@,nm?IOQ@e /?#̍2@tc4? b@fffff?؄1P@55Q/?"@`A7L?ו@#$6e?8Ck@L?*@+@y?E@9 (?֠K@^_0X?Ms@&?B1Q@HӮh^?u:>/0@T6?RCQ@]r?Q.ƼS@&q?Ϫy@!0O?B9C@60?oi@`j?mǣ @)^?}9Y@A7K?j򐫴@tҳ}IQ @G =@64꿿tq@6L ٔ[l7@7CcH?>q@>޽7ɚ%@]`N㓿Ӽiu@@x//t@h5~g<@sg]:@ke"@Y򺝿坝4X!@2B SP ,l@!Kr@I'RTad9@suy(@bDSn@(n`@f-fM++@d5inXVϪ͟@k)^ F4A@kϿ @b6;%oJw|@{ vtc4@}ӄfB@ƼS;LYt[@pϿƿ{ 2@ [7 I^5?@`H1ڤ@ЫNPƿѷY@ڲ{Fkv@zNzV蒣S&@]\ʿ̢a@55D;@QHĿu"@:4Ck';yR5@\M?/v@~auy|ßa@XdE!Wh@5;Oa M:@7 @k΅4@>qd,@L4\-"@`QCrqP ,k@R1o@.3ߏG@JM++/l5@Tw\<64@M?fŗNf@BMUGZ1@l1&y7!<@H+jg@#cW+U@i}an@څݘ^ @qu"K@zGFS;@-b8<W}W@-RJ˿.< @=At>>~mH@N$5inYj@im\лo@PH;D@ /^E˼+@͞%%RK@5XyOV`W@Bx@AJM+,R<6@-ai/{ 9YL0 ) aXeU.s-|\͞%PH̢b>-b9 p0p&ɿ߹8Ryjj% xc36&-MZ},|7ʂoa hۋq: nX/EZ[(-V9CڟvȴHӮh].4TɅoȊG:S&LfQn崢3y^ /nV`K!ZG&'>E.P?҄[-M#x?ӃQX'-V?QCrq7'=["?doa|e@x?g [iJA?ֵ?:?F L/ r[U?H >iQ?Qm݂ HӮh]?UqK ?ᓉ  r(?m\ =?uO7v iIe?Q W'?G# 6;%?R}A5 pȊG?- q )m?bw\~m?$Dı?zNWx-8G?Y2uM?<`)I?ud07?ڐS]9?ulvKnO?DB9?(߹8VI?'|E˼,a߹8R?8 [0HA?\ı@IQ?h3* ?Ǹեd?ϿT {?n.'>E?K0 9?*0U2a{J#9?PIOQD?xF]d֫??E nǸ?#-#O 4Y?gM3H,A_E?߹8RSpP?Zt? k~")?8\g,]N?ʂ<64? >lLY9.?U\R. a=1?Ϫ͞d?m\1 ?l oTL+?,]OԊԿ?jF5`N?KHӮhl5?ިc^ej?RJm3:}P?yR4뚿lN1P?eVwkQ?nCzRJ?6Fg?P{>iQY?jOv`l?ォ ߿d>?㚀If{_41?pO4۵y?ǣ ֿ悔VW?!5)4?oϪ͞?8\hu!.?mqb;:h?*ި߄#π?!ѭl5?$Jb#ᇿЯZp?y|àϲV?ƼS;5~g?P3:~Ϧ?[TпC$?̢aή9C?]x͑hr ?VH˟f;?xB0>P?K3ōͳ|?3H+輿nwpz?=氿π3r?T!D(NnCy?`l oTS?eәo/?#-?f?咷?Jl ?(F@DUG?ɚ$(@e ?j{@tq?]9@&q?Ƨ-@g ?ᆭ-f@hJ?NT@FIl.?wFz@KC?Κ,fX@S?\лo@Pl-?[0HA@İ?`sX@ BfQ?yV@ G#?@c^J8@ _Ë?`kz^@ {J#:?R*o?R@ jOv?ŬG@ Xy=c?kȟA@ _?#@ ?q @ +C,z?)m@ E?EwUq@?ŗNe@pL?fP@ܻ¹M?np@EGG?D*0@ ܇T?B؃@"}?W @A7T7?x?@VԪ?0+@jU@ ?ݚ3 @n? 8C@KU?ܛ(z@[?D">j@S?8\g@!Gz?9-*E@lvJ?۷Xe@NP?{0@JM?D|0@$/?٢Zp@^7?E@e+a?J&@PH?׾ʫ\@ 0?ף@${0?׭^@AłU6?ׅHL@`~?"S 5@jf?jj%@|ßa?0 7@^5?}? #y@ \|ؙ?X%[[@1p?зCd@X.?M++@{G#?{ 9&B@iJ?ľau@Q?/ej@)ᰉ'?LD|0@C}sBY@ k_o @27GX@1;B@1'_Ë@j򐬿}3@"zcsl߿Jw|@$qj1&x@@"&r3 A!l@D=Fl7@,0䳦@Z]yѿ6&,@raLPr@v Vz@UDR?H@ Eb࠿'(߹@[8YK@D맆&@"r/Y!Z@ @lcA \̢a@*cǿ;'j@@JҲM@$')4J@ s@% &q@=KX:S@GK]d`H@_s*@v|Gؿ=@p27@}OC 0@K4wQQ@lDt@氿>E@yl!-@=Ć.*0U2a|@9C]@t{*)s@`A𪣭_@6C徠K@4c4sg@Oq!Ks`@crq6uO7@x?)+GN@kϿY!~@Yt[Q@CV势B9@Pr[3]$D@PRJY>BZ@tzG8Ck@Qο/@¦/¿x?@tc4@^ t"]yЦ@r2LO͞@+CB0H@@==2W@P]q >l@b1QѢ@t~MG%@K]dR@1 ws@?п5͉/@ &kȟ@l@.S5sg@`V. @ Y[-M@@]9gw@(>տ?ҝe+ԿcHj;'SMjp`vȴ9X\?*ZFsCGŬGH},2B1[!Zr/Ydᆘ5XQCrq7vϿ|ud03]$D <饏q!K2ImqbzNzV~($ xgn7OejvFJ7z@c{쿱[Wd2m${TɅoiӞՐ[BE6ҿH7 1;.?ҝk}At>⼾aPuO7:}OC5eU.1e>B8Go*ZG>pȿ{0`k9m ֶǞY򺝿vfp&{m]݂ r^)5܋C%U{zە$/8\g*ڡaeٮ1keؾ7ޓߙË<ᛐoLQ֌i eAf">i#π3G8}H<64(>տVe7 sБ}k7KƧБN;6sБ}c SyB ͦa(9.VE쪸[hb6;%oHjܱFȃfQm'ud0+?ӈ`"CV?^)4i?Ne s?ygt^J82v?={ 1?׺ By|o'?؇+ IWrG?R*o?R5K?nCzP ,l?snwp?ۨ.ǹ)sБ?lvJ#9&A?/v?-Vd{0?ޭՐA@N?i;yR`?]U\S1?l7`]yg?XdE#\$_[? ,k?r(7Kƨ?sջs]$D?sWp `-?ᵲK Jm3 B?Wh %2?X%[\ B ? 4 ;'?iJA !5`?iu bw]?jj% y8R~?+ /.?LPr[ `?}2f< KCW?ǎj \n?Ov_ R~?j򐫴,E ٔ[?K3Ѣ?xB0pP?F4AT"?Y}{z?[6y?*EM Q?~Rv e2I?< ?}At>>XdE#?禵 '^ Fe?:p ~?辋i;|?KZo*ZFs?"?Y > ٔ[l7?쁿XdE#?ɯiQX(?),( oTK?At>=ſm?X6FT]?n~?8 $'?7ɛ=b?䬯0h3?T Ǐ'gM3? /%|o?haݏo?!-w2K3? #d?]9[k?!Whҟj?.ƼS;ŬGG?;yR4L/{J#?Go*ZF^)5?R~Rvtqq?\лnw+@y?ffffffuy(?o*ZFs?r 6P?w{?FsB?~Rv?W ?儵???\$_?f:?27?|0?5IP?~$?喑\л?Ӹեc?̢b?uKۡ?,=Ć?ߏG0?Ͱ'RT?JL?ѐ٩?灃?H?ܱF^?hۋq?7KƧ?Ў 4Y?P]q?f'|?'/W?Ւ8\g????Y5;?ʂ? I?l!-w?g ?@?\?oiDg?m?=?8q`l?F]cf?5?+? 7!?j@?پLI?퇨M?4.۵?ěS?8K??m\?ag#$?|?cŗN?o.??;<ϖ?VWj?$'(?uX???8Q?L?Sn?T ǎ?W?繡vݬ?wQQ?u%F ?%?x ?g8}?N&Ԁu?\R-#?")n?a(9?F]c?M>? ԕ*?r(?F?]?73?*\?{ 9?lLYt?oi?9}?橼K?A_E?BB?\??hK@X?tqp@_1P?[-M@$@|G?>-b8<@kP?޽@VWj?hH@Cg?kv@Q֌i?6@@?Sn@R,R?k΅4@`?@p ?S;w@k6z?tҲ@}A5T?8@}W?mǤ@pp?<쿱[@ˇ?Κ,fX@%b?}OB@)k?]cA @#?i4.۶@5Xy>?Zݘ@D?j+C@&?T`d@ }2f?@NU@ b8>?7T7@ CA?BE@ nzG?`s@ J?%1L@ z9?v @ .r0?4J@ |E˼,?D@ ? gw@M++?@E;'?3@s?ί%;@|ؘ?@E?M>!@~0OY?RC@ǵ?f3]$@27?ޢ]yЦ@pOX?B1@"S?[-M@$@L/{J#?ܥLW@kȟ?=Fkw@f'?۴% @u:??@!\?MUhƓ@+?ٻ @#? /@r/Z?k}:@=x@?XOLnm@ڤ? qu"@yU?#x @(a?m\@HjF?Gz@j"?B1@P?GNΚ,@¹M?ӣD=Fl@' ?i4@o?0@(zc?Њ@P1;?YJE@mqbb?ˬ)r\@*\}?(@`sW?bb˧3@&?CA0@C\?ʖ\@-(Qm݂@ /ej@\|ؙfQ@HoΞu@Q6L@^灃T^@`- 0@G0@: =p@ LPr@8YK*")@jg ᝝4X!@i;D$5in@XR}Կ锯O M@ b#ᆘE@a@N0@A_Eൿ $@T ǎ$Jb#@7ɛm@;,]l5@QxB0@&@I}ԿQQ֌@s-ffffff@fI<\ y@?D;@ת%םj򐫴@d0+@v5@W>6z@ZkP|瀝IQ@zxl"hxB0@o*ZF5@1&xտ @"S J@Ա$5iپLI@2IOQѢY@dḍ1 R@n @[Tߤ?@-#NAt>=@Ccܿtr@ eәo/@{5*8 QX'@ȟ@($J@7ɚ%޽@/D):v@&Ԁu^@, oTKpO4@8%[[տjUp@4]r?z:@R4n[ʖ]@ͳ}L/{@1ί%@VuR<6@ɯ{ϕ@vtc5앿E@ʁԿ~+V@Krz%{s@m/^ )k@l&k@[BFhH@S&- $ @sa\@s^޾@D*%S@R~R_ô@weK@Ho@+ Iq`l @"¤T޿(9-@;!Z xF]@R^߿6P%@hK]ca(9-@|Zπ3r@`l oKƧ@a Eлnwp@Se/0ߏG0@2_U'(b߳mȿgTĎqjLfQm*0U2avFsquŗNeUy(ڿCrq69P߇ݗ+r\=xވa E]s݌*EMw\ÿܑ)!Whۗ9Sֿڟh3b٩y}kNPصhMty>P.;B¤U@4VHD2LfQ ѷsPQE 6;%os|OOag#$S8Clj+C3P ,l M:-"IeO"}ˉ Dт gwaUGZ1Q]yЦvm(?ԝ`f,s-?tj~Dg8}?J&"r/Y?CVNU?u%F Y >? /ŗ?٠QCrq?F?l!-wuinX/?8}HRfIiQ wkQ?ュ;K d xF?s !$5?BE/w?ud0?&W9m ?儵? |?ѷX&k?`kz LW?e+a Pܜ?4X ^D/7?6&,s&Wx-?Ebhjf?]ce3GO?k;<ud?omr4xB0?l&k[B?eڹq"?`,m?`N %R?l&k sG?}2 :э?͞&IoiD?jj%tj?A c ˒:)z?F L/2m?~=o4֡a? D84֡?B؃[? / wUqK? !~?>EʿL_?gSֿ?>q?퓉 ݿm?4Ck'Uhƒ?7ɚ?{ 1Ͽİ?!-w1?CT*1?eXOLVC? (wM Z?syP?9ֿ[?928?[($d0+@j?|Zqx I?M>y}?Y疿LD|0?پLI(N&Ԁ?QQ׿ ? x1o?/^ FǿǸզ?JDп灃d?e+a(\)?伔pds?Q֌i/돰 ?1z̿/ej?-*ENϕ?`V. o?R&W?/^ Fǿ?D|0v5?XOLnmM:?kP{C]?}OB??FR<64?埩~+Vۏ?寍竿?律i; VE?łUE?Q_Ђ"?`-|O"?ϕ^ N?E˿l"h ԕ?1&xտ͉.?+ῥm\?`V. ?V#-#?">iQ?n~?)sБ}?}Vl!?/ej?ǎj?5TuL?P%?:?حU?>pu?а8?AJM++?t[ ?Cy?8?e%1?c*cP?R}A5? ٔ?<쿱[?? $?ۋq ?nC?v5?N;5?f:?F^"S?d?R<6?/{J#??>p?+%?{z@?kz]z?hA_F?$_Zjj?WiJ?ⶮ}Vm?KHӮh^?!Wh?5B؄?f1.?{?-V?_Ë?x>-b?W'?iQX?5?Qx-8Go?7ɛ?Y?~g,?ȴ9Xb?eәo/@F^"S?GzH@N?$LD|1@łV?@2I? oTK@j_|?݂u@eU.s?R4@sLA? 9@`V?8@2̷?/@.?QQ@GN?zNzV@ENe?h]k<@^ ?pT@A!?(@AXOLn?İ@kz]?$6e@r2?z@c^@a͉?j%|@|O?ԀuM@5IP?gt}@LPr?vݬ@?hr @N&Ԁ?㆘5@ Z3 ?M@$=@ #?n~@ `DU?͉.@ Tw\?vȴ@ p5Q.?䍣@ Ω?IHU'@ 2i4?0@?@4n@{?U2a|@R?ί%;@laR*o?Sn@ao?͉/@eXO?7ɛ@3?ﲪ9@cHj?;'@ %?K3@T.۵?u%F L@m8?`V@ud0?IQ@{ 9?[!Z@Ay|ß?|@{0?m@y k~?+$@#cHk?5Xy=@Ӈ V?@*)?ۮ@@1ڥ?b͊@@L8?{ 2@ sБ}?ل{@@$=?4.۵@Q? k~(@8̷?FIm@yU?E@Fs?"`B@7 ܇T?NΚ,g@X̷?)Ie@{ ? 4@̢?{0$@7ɛ?s@[ ?*ި@$'?c^J82@(zd?MUh@D9?<@a\?̝.@&?d0+@j@&ŗNf?ϝ^J82v@(?2LfQn@?kv@K۠&?o5J@Cy?>BZc @DB1Y2 @uKܿȭ+@Z޿BE@aC,@Kڐ @4K:?},{ @_f;E@rz%<ϕ@k!ZճmǤ@ .}Ao~=@hHJL_@氿4.۵@H+PܜM@l oTὺ RiY@!*ީ~=@@ěTMs@#6F@thM]r/@Wx-8o~=@|0e@y@vɯ{ @'gM36F @eO@@ :э%݂u@1[W>6sh@a$5hM@ ěK3@iŗN@łV:pe@EFs@ GNϿ $ @!t>=ſ gb@;u%9C@t@x#d@PMUhǿłU6@U~g,>-b8<@q:Ŀ6C-@qUDR쫊\$@g3]$D@7`]y~mH@5~g]k;=@+y"&@&<`4X @9؃4D4X!@]RCQ@Bӄv`G@N[Wpd@c;KY6@oǣ F@zpd@rYqbb@M:Zjj&@W}WƧ@8%[[տ@X%doa@vȴ9XYE @)`V@G#$6e=K^@a$5jܱF@(gM3H@ f'|@p+ @/s1ڥ@0YJE@"zcsl߿9-*E@j@z$LD@h*")qp@1r 6 c Sz@лnwp@{&\лo@_տENe@mn~@=6̿s/ek@9Y K@҈p;,'@M@$>~Rv@i/nB0@:]yѿ9Y @G_տNʗ@>E@~@8Rt}^_1@l"h ԕ@v[-{zqbb˧;5Xy\#K۠FŗNf $ p008s)XݬH@qD"볻,{z DUx?ɰ`V.aC\i4.۶u_ôb}\u"IOQDCcHkD ^*\崿-b8-b9?0+@jU;?Ve&a(9.?*1+U?d,RC?ᰉ'S;wF? xF]`?,QHN;6?LYt[07?kz]zAs?r m?qp eA?Ѣ?) E? quFkv?*)s͉.?vf:?.Se;%o^?GXdtҲ?^J82v갉'RT?xB0L_?n},{ ?"&r#π?پM#x?u%F/V?f3]VWiJ?- qv |Z??>pȿPH?O;dZNT?_@ل#π?nhֹvݬ?|hr ?\$_#wk?2Ḭ{?梱pO4K۠'? $ ;K?+UqK?i;ySVD?İwֶZI??bb˧2?앿E?&k?&k??䣃'gM?ŝ;D=?9Y ?4.۵?(?eO ?0#̎?0 (?{m?lC? (wN?پL?پM?ۑd2?$5i?\=x@?7 ܇?_ô?<*?vF?ǣ ?]x?쪸[?ej?#?'j@?{ 2?狗xW)?~L?nC?/^ G?TK:?Q?Q?2 E?C,zx? $ q?ﲫ?AJM+,?ha?^?Y5;O?3?TK3?|G?DR?g? (w?򷊰ȊH?|ؘ?hA_F?RL?iDg8~?5~g,? Z[)?پLI?L8\?ty?KC?꺲{?;Oag#%?͞&?fP?ꖻ?8Cl?,?LA?27? Z?)r\?41?ꝝ4X!?{m]?Б}kf?Yr?%R?"`B?_0X:? ﲪ?7ȊH?hPܜ??,x?.4??0#?Õ$?FIm?X6?/D)?+U=?t);?唯O ?ZqxB?Ր?X%[[?E#M?61f?K)^ ?cOJ?/d9?FIl?R-#?~+U?np?LA?cA [?0OY?D\¹N?%R?!߹8R?{J#9? 7KƧ?v-?#9?r 6P?s>WS?Zx_@uM?6;%o@wz@c? qu"@ڪ:э&? B@9rGE8?ŬGH@x?k΅3@.4?=@`9?{5*@*)s?oiDg8@n?@ka@?rGE8@s?MjO@'KI?˒:)z@{.]]?7ɛ@/?< @yV?ܜM?@4,Q?[T@f;?gb@"?Jw|@LPr?ͳ|@ LB?Ov_خ@ q ?ł@ ᛐo?d2m@ )J?|O"@%K?XdE#@c?.3@:?WS?/^ F@0:~?r @.r?ٵ@&?y(@wd:?/Vϫ@X%[\?u!@j@?;%o^@ RiY?~=@'S?Nx@8Ck?0#̍@XGo*ZG?՜8J@yt[ ?@^ Fe?Ԛ@VX?6;%o@ﲫ?(߹9@0?e+a@??`,@qxB1?ҧŬGH@R-#?B1Q@5ᰉ? 0j+@SWp?+%@tfP?Ѕ]r/@L?όe@@cA ?͢r/Y@uy(?ˣD=Fl@Ć-?.]\@'|H?$'(@ϢZp?*cP@$(?^@/27?*8 @>ߤ??TuK@)v5B?^ Fe@/O M?s@Nvݭ?ej@kNP?Y2@A"s䎊˧2P]8}H >lLt*") x>-3]$np&o~=/^ GW3Bom?ꭁv'E84׿e+aj`V.KE|ؘb8lLYuGE85ҽf'|Eq2W[BEQ i0%ǿJwڐm>!GG##yzcsl&d7Ȱ{wN&տC,zfV?(FD9䤿i,d!5O"}'!Wa(9{"S 5b?ـB jF?U5Q/d ^?) D A [7?2_,{ Z?ʁ?ݘs*\?diJ?/sq ?- fᛐ?_a(9A5_?¤T~X%[?$LD|1+?di?LWɯ?ٔ[l7aYz$LD?/l08?p:~A c ?̷@'?ᢱpO4S"?5Q. O"}?؃4C cD=Fl? rq6?MZ F?C,z ͳ?l?G ?:)y X:S?b} Sd?ɯ{ եc?X f'|F?` >=? ^ "h ԕ?@c^J8 \$_?#9 \(?0p xR}?iv "h ԕ?ev?< ԕ+?y(DM:?' n~?x?uD?yV?H?e%1&v?z]y%1?&İ?잘79?٩T"H?28F?䎊qjiB?Ҳۿ{s?HU'(c@x?z9`{? 0tqq?}At>nX/D?Sepd?nO߿ f'?3 VVe?T`d?o*ZFs*?|ؘͿl#?7߿ŗNf? Sf3?LAݿb8//t;?\R-# Z[)?yP"`A?*0wd? ěU.r?lBZc ?#Nv޿l oTK?1zNԙO"}?>'!WOIH?K]cA9Y ?W),Ck&?bRžnp&?l"h ԕk?uy(ڿKZy?~+U ,?,P3?tҲ?Ne?U'(b??1o?XOLn?#cW?5IHU?+?O"}?6F ???Zx_?1'?1o6?wkQ?^ N?VM?.Ǹ?/v?nX/D?1m?sl&k?-V?l5? qiC?Y!~?3?"`A@2^?i@eڹ?fp@ c?Wx-8G@[qu!? Fd@ (?ᛐo@H?Fs@*ީ?A c S@LA?o'=[@VD?*EM@/e?"&q@ sG?M_@P? gw@ <&V@? gb@ k?vȴ9X@ Ov_خ?ިc@ L~($ x?㚀If{_@ ?H@q@|*?6fI@پ?`sWq@rᰊ?u:>/0@G0@9?֖2@f&I?6@a@?P*@[ ?p =q@>鷿?LfQn@5h?(F@ [?Sn@9.?i/n@"Pr[?򐫴N@D?k}9@kQ?k @#,]O?އǸ@rW?ޤ*@dE#?ީiu @sպ?!~|@n?ݜ[@Ezxl"h?G#@ ;?eO @ =?@2%1?D=Fk@W+?ڷ,QI@X?"h ԕ@Sy?٩~+U@n?.3@W}W?V`W@|?-"@6y|à?},{ Z@H9-*?IOQ@\Q?3zN@y8J?֚VWi@5;Oa?ᛐ@C?ՂU5Q@gw?6@`,?ԭ-e@r2?:S|@lC?}2f@6. ?gM3H,@M8Y?vȴ@b?[W~@w3?]\@gT?֌i/n@ʖ?=1o@_?Н.@}At?iQX@ C?07@^ ?. <@3r?Չ.}@LX?A [7@|>?֟@~@ ?bD@1;.?N;5@˜?wUqK@3 ?d>@5~g? /^@oπ3rXy=@Fsջw1@!i;ySnCz@^)5o*ZFs@* $@Pj+u%@0 ÿ32@>P+@2vtc|G@'Gn~@vϿ7ޓ@7`HhM@YCE @x>-JM@vݬ%@ 9<+@Qm݃py+@Xy=e@@G0@9٩@`> 5TuL@_莊qi@rq6?@.2ʿ|ᛐ@p ~L@CV势"SP@"쪹#c@2WY!~@$E#NꕿEw@6+jgp&@UY|.@owshH@\(ÿԪ@C-b@oTKvFJ@LAQQ@z:&@ѱ+$'@nѢSR~R@|hs𒃐B@278\@;*)sX%[@bS 5&V?@GONt@*a=1@i.3@B؄n~@;?zQ@Zx2m@cŗN@{eU.@T^@yg˿ցԪ@P^*") @~6z},|@(wN'2W@oTKpT@Z޿Jw@Cyz:@8<ϕտyQ@gwx@f,s-PH@H@qԀu@sՐ#c@qu!-8Go*Z@ Rm@%&ڿ^T:@qY6th@y|ĿT6@9Ҳ@?zd@a=1NP@S2"쪹T,<[ =n% /& ͳ|쌓 ٔ[\(7 ܇ke\ ytyz$L}9/v ě|o'y8R~}ӄ_wd:r[TEo]zNzV+!ZM?>qD">sh-Vڗ2_u8Ckπ3r 䂔VWRCr2Lk\$j򐫴O"}"2yQV. ڿ5Xy>iQXE84֡[ (^J82v7ɚ$|hsd=_E[6cfTuKDlvJNxW%|oKHӮh^I< (GHo~ŬGHJL_ sGM_.3R-"g<+Y|G>Ebw\&3]$l5,s-x>-b&ڿц5 Жg@4O M;qu:>/0_Yɿ˟f;=)4cA \N xa Ec1P.ri/nI¤T~rGE9 >ll-J"Ik~(#%iDg8~&IRK3=翰/D)'(b\л䣃'g򐫴NQqx-8Go?F]cfaOX7?9< (x?łkP?߳mǤ~Rv??8Go*Z?ऽ Rit}?KH3?l oTK\r\=x?p:~6f?/ej|?l-B9C?gwq!Ks?J82vt4K:?쿱[W?$?:Wh? x>a ?8Ck)lD?g#$6e {t?⬯0 w'j@?v  񤽺 R?- qv ޽?ָϿT FV?֋C%?,h?֡߹8Rv6?ַCd~Rv?`V. E?`kzC%2?Қ:э&y?:v #9?b} xW)?vJ" &Qm݃?_ôr a?^ ^J82v?: H&c?;%o^ H?8Ck *0U2?ŗNe E?T!D( x>?'/V cI{t?r ě fI?衵͉ ^޾?fA}?/ejV3?uy( :w?Y2"?ڐ;0$?wstj~? Evf{_J?)a,?Jw|">j?mHQ">j?\(j9m ?2WA [?ڹYпX%[? 0j+j?A!laRBT~?sbM?7ʿuK?2m?h3*[ʖ]?İݿu ?2m$?0 (%e?> ;f'?B fWSa?pd飿m3 ?.ƼS;)^?ET*1?Wwd8J?X̸9Y ?ѷXG)^?%ؿFIm?1L% ?7~+W ?XOLnm?y2.Se?$'пh]kB[yg?5?K?>=Ć? 0j+?{ k&j?͞%>B?܇Tw\ ?np&GNΚ,?l!-w?B1%o]?rGE9p`?ɯ{ü+@y?$/ߤ??.< &?6F9.BZc ?' ?E?HH?KCV?:S?P]q?5?T~M?9Y ?Xy=c?ϝ-V?[W>6z?Ҩc^t*?]ce?ՂU5Q?^?[ ?_IW?5~g,?^ s?9.?]k;=?sպ?[k?"&r?Y!~?Lnm?U5Q/?丐եc?Qm݂?$tSM?LYt[?B¤U?Fzd?sպ???gM3H,?8YJ?҈p:?0U2a|?=!?'RT`e?Xy=?? B ?d?𾵲?FپL?Ne?@?#x?;%o^?/{J#:?>i;?gw?G 0j?`?:?5Xy>??e+?O;dZ?P?w\¹?Y}?bh4?#x?0 )?D=Fl?-*EN?e@x?VH?dZ1?/l?IOQ?ҝ%?Zx_?>?8J?zcsl&?(wN&?8Ck?k]?>B?7+?y|?j~?뵈h?")?뚀If{_?nt?o5I?Pv ?61f?+6z?/Vϫ?J?0X:T?Б}kf?2flLY?: ?Sn?I^5?}? A!la?Rv?41@m?:S@Q?cA \@P?>q?l oTL@OX7?Yt[ @+}9?٩T!@ D?sg@.H?*ZFsC@A~6?*@M?iQX@ͮ>lLY?UGZ1@ oiDg8?n/@ @D(M? @ >'?䨬\ @ hn?laR*o?@,VϪ? @)nX/E?1eәp@k:?pO4@;T^?S#@m:w?*@B¤U?SP @GwY?9@k]?fP@JUp ?΅3t@٩T?gwZ@J? ٔ[l@^Ր?nwpy@7c^t)?Lnm@s@N?$_Zjj@bU5Q?߮1@6?0 (@ud0?*@nX/E?d0+@j@CA0P?ZpU@Y5?u:>/@ $ ?ݥ;K@`?/@J{?sWp@5?ί%;@sB?^ N@eO?CcHk@ :w?˒:)@'?wkP@zNzV?$/@4uK?ً`k{@Qhr ?h@dT~?csl&l@xLW?uO7u@B ?+a@@?֔VWj@ϿT ? 7!=@ qv?՝-V@ 0j+?.< @0եb?ԩ`@X1e?3:}P@|[?`G@uM?ӭ^@(M?yR4@ ٔ[l?&kȟ@Fs?Ҳ{5@$=?1 R@ ?lC@RC?Xy=c@wr(?ӓ@ y?N@ V?ᛐ@CcH?!~|@4?`,@2W?VH@1Q?'(b@hۋ?@n`,?EJ&@bMA_E@~n< @6;%+@~$q@؛R}ԿzG@i쒷@Q֌@BE]9@"ﲪ9@1 O4@C")cI{t@XbMv5C@r`@@پM?`s@WiJ֫?@A@rGEy=c@ 9-V@6Y?ײ@c7 ݿvy|à@7l5@d9پLI(@ 9&B ͳ}@ ;@%ٿv5BȔG uy)'RT< (x5!Bp]scOJfcIliQ 4\&y}ӄw $(;ia Eb4GÏG0@9$-Ć-$/]U\Vl!tTwr(\(inX/}ӄwq.ƼS $LxB(1&xտ}2f<n.3 ށEʿ4mgt~s򐫴NQ!D(N?B¤Tn2X?hƒIֶZ?#QX'?d+f'|E?YQQ?%|pL??>)s?3)kd p?BE=ke?J82vt\л?zxl"h?">iQjܱF?Ûf3]% [7?uyO"}?ƃB¤R,R?򐫴NQ*d7?$5inYag#$?H gߏ?7T7 o%;:?]N ?ԀuMUHU'?-#Nw84֡b?Y2 k?ց>g?}H}b?v ׈+a@?g kىr? RiY_NΚ,?ԫ ~4Ck&?J#9 Bo?lC 4Y?փnP :`?S{ ٩T"?⟾vȴ9 !~?Q Eoi?5TuL 𳑒d? n?| "S?^_0 '=["?sPHӄv?% g?vj XPH?s z$L?/V %ם?TɅo vF? |Zq?1;.^b?$tSM?FV?VeZS?u gtX ?o. X6?n._p?@4"mHQ?K]d?-w100#̎?TԿk;=?}A5Tv-f??ײ}A5T?0#4?YɿfQm݃?@$=)k?q6`H?`N) ?)^Nʖ?ߤ?wFze?lÀP?+8f:?Zx,(?9䣃!R?ɯ{1H?2LfQno9?J"d9?c^J82hr!?{e@y*͞&?7߿jY ?Yؿ?zNh?JD?[W? '=[!?x"쪹?DH?m^ ?9}Ww?[Tп@4m?{R~R?#-#fA?¹M3]$E?<ﲪ?HU'(2m?⨗c^t*?73/^ F?\лnwR&V?6F A c ?y|Ŀj~"?l oTLԄ?=vмj~#?Y+ ʰ ě?nc EwUqL?x- '/?u%F 7KƧ?҈ο?F?9.?^ N?J"?sP?:S|?]\?_o?K3?)?LYt[?Je 0?H˒:?wd?zG? ?@98q?y?LYt\?Fg?.3?;?ӄv?RCQ?ߏG0@?4AJM?ha? /? :?ʁ?nC?ڹY?D??ײ???O7u? x?6?ӄv?d7?z$LD?F L/???'RT`e?ިc^?F?u ?rGE?&A(?d7?ʂ??PܜN?D ^?7T?䴷,Q? 4\?$Jb#? e?ݗ+k?j?1ڥ?/?rGE85?򐫴NQ?Gz?5_õ?P ,k?i?i;?6&,?g?cA \?jOv?&cI?ѐB¤U? .}?ٟ+?:?W}W?n.?>=Ć?Ŭ?Y2 ?쿱[W?{?큭v6??fI-b@j~#?QCrq7@{?!~|@l[W?? 6P@jF5?L@Tw\?肾i@-?E /@?HU'(@n>W? >l@҃B?=@7!?$_Zj@ }E?⯷r@ %?d̢@ ^"S?囥S@ 0?zNzVC@ N`sW?!Wh@ "?{{@ Q>E?i}@ ,?Yr@ 鷿?Sy@ Ov`?@ 0@9?@:pe?np&@lzxl"?¤T~@vȴ?]9@&A)?wr(@?%2@`G?˒:)z@G#?H@<лnw?QH@ x?@Ԫ?{ 9&@ϿT ?Ԫ@T?3@Q.ƽ?JA c @K?fI<@ɃQX(?ߦ76g@ D?f3]@%>-b8?+%@Цv ?f'|F@Rz$?r @X ?}9@J%|?ß`O@P{?G{@ao?ډLD|0@Y|?ڻ¹M@_0X:?ڼj~#@0np??F@0#̍?v-@KƧ?Ѣ@kZy?$5inX@@?}H˒@P?S;wG@"?}Vl!@KZ?zcs@ȟ@?b}V@5DR?h?X%[@p08?ԹMa@F?Ԗ2I@ ?v @9䣃?0 7@kz]?ŬGG@|?z@c^@y=c?D;@?֯O M@W}?ؓ ٔ[l@kv?4Ck&@r ?ԲLP@ ?ϕ@<7ɚ?O"}@5 '0?T:@[!Z?2"?@Ҳ?qxB1@$tS?3]$E@ﳿpW @6tc4#@ 4¿uKۡ@XOQCr@\|ؘT:@ǣ Q@Go*ZGܒ%1@[XdE$ 6P&@sҝ%@&q޾ߤ?@yR4ߙXdE@),}ӄw@'!W!Bo@H앿B9C@xdIV`@>-b˧2P]@ (Pr[U@ߡ.H@r[U@>y5@>?> [6@? m\@Auy(ł@cNv޿K:@k۠&Q@A׿P1;@ۿ辋i;@njSֿPr[U@a*")@hۋqJ82vt@(\iB@2)I#π@G8}H @[_IϿf@z`iu@l51P@1o[!Z@^ FǿZ@[BE&f@d5Q.@Yɿ䎊r@-VaR*o?S@9e+aU@W쁿6P%@o'=[CA0@NΚ,g5@޽TuM@XGG#@P>i;@o'=\>n@P{@bXOL@#^J82F@6\лq6@c{ 2ϵIHV@4f:@ԪA!6@Snn?!-w1If{_&1.1&y 7ޔtj~sg٦ (@x]s?gߏ6P%馋Sy9.o͞wpy,T}^_1Gz9̢bL8\N ̿淕-#NR*o?S$5inXu呒d2ȏ`ԿJw΅3o*ZFs[W;dZq P]qS xPr[65Bٿ5*82vtcF4|o'l7`] ٔ[l1& -VXOLn~|ᛑfI<_ mH?Zjjuy)rq6ѢP]}2fn//tau׻,]W˿ָ[BF|pdշ-#N[Y疿ԸQ9>BZӺ B?Fҿ3 Wbw\XdE#PܜNJ! /ϭ $ 5IڐldͿߏG0@:JcO޽&VI#xEM_98qnpdšIf{_f'|F{{t,Q >P>kP{,)r\ᛐoa=1^t)<˧2Poiyg˿BZc Ŵ$_Z?hr!F^"?ћ]9sT6?FsBJG|?v5C2_?A!6&?A [7`s?0Gz@d?Ն>=ć?($ xGFd?W qk?eU.r ~+?y|ß SP?؛S NX%[?4J -*E?㪸[B r\=?D T[l7`?C灃? b-Y?QH?嘲̷7Kƨ?u%F L 'gM?"} },|?ŬG a?f; qj?m' ?{_IS"?v<쿱?'(bH?[-M@%@?"yg?A(o")n?tҲߏG0?`iQYT6?fQm݃]U\S?̢?灃H?)Ie׼wd?a=2:)y?&/e;K?+8q`a\?+ ~пҲM?27Ȋl&k??gߏC\N?TK3XOLn?ii}th?,'7_?𙄠=? Eÿ8?B9CSh]k? Ebߤ???) ί%;?W}W x?```G?Vt!laR?;dZ/{J#:?~鷿 I^5?},HӮh^?)_?ߏG0@:d?ohܿIb?)kҿ{ 9&?OB9l oTK?u gulv?R}Au?T ǏX%[\? >lL/{J?ul'gM3H?eU.ᖻ?-U=t}^?N&Ԁu I^5??u/ej^ N??FPr[U?𰳑d?ƈzdؿQ_?`VQ?r ĜtSMj?hr??R~c^t)?A~6 x?}`N?ߏG0@:?*)t?4֡a?2?'!Wi?&İ?m??3mǤ?cOI?HH?a Ec? ԕ+?liQY? RiY?K4?Y!?'gM3H?&IR?*\?")?bM?a@N?{?¹M?s?uy)?VWiJ?SP -?B9C?a@O?>iQY?tr?䱯:?hH?%1L?1;.?s*?LPr? $?ϿT ?~|ᛑ?th?A [?mqbc?cOI?+?9.?1?$ xF?zcs?)m? RiY`?а ě?ʂ?.]\?F4A? VE?8YK?k;i?޴cI{t?tj~?f?.}??v-?R*o?R?`,?|H?M3H+?Y!~?9D?y ?2P]?#c?{0$?[k?b˧2P?پLI(?>E?_?*0U2?BB?JL?%|p?@?ϋX6?0OY?6z?ud?VE?Y2 ?H@?GNΚ,?U5Q?9&A)?)_?9Y ?y ?Vt??) D?D ^?!.?'=[!?? 4?y k~?8J?W@fQ?A [@Q?333333@u:??3@ 91eә?eh@ s?4m8@ ?$Jb#@ RL?At>=@ ~M?)a@ B?녜 @ eם g?a\@ qiC?Vwpy@ O͞?.H@ Wm?e@ +a@?kz]z@ qu"?x^ @D(M?]N @zVC?8J@$Jb$?[($@Y2?C@u\(?nO;@(b?B¤T@v?"@B؃?7ޓ@ ٔ[?Б}ke@0X:?]r/Z@Y2?9.< @>iQ?a@.3?,@r?\>@Cg?Y@ ?.2X@Se?D)@ ٔ?ۢZp@oiD?u!@{?ۡ$5@y?iB@=?6@ﲫ? ;@#Hj?`N@.P1P3@9?١$5@Z`V. ?׵@2_?j~"@^"?At>=@iK?uKۡ@ ?$_Z@HӮh^?++%@HL?ȸ' @ 4?SeXO@2?鷿a@l&k٩T!D@PܜJL_@>-b9+U@4,Q&q@ X6F@Pr[m3 B@iJd2m@k΅ܺ)_@ݗNe@8Clޜbx@+ﳿ灃@N1̍2#@U=ȿ 0j+@zNz2LfQn@f:2I@;OagR~R@{5*Jm3 @606;%p@hPܜW @!laREwUq@o]UDM@)ߤ@@y:)y@`-{@*1s@A [<*"@Q¿@$ȟ@.4@A0O[ @_8RSe@veN;6@u:>q!Kr@Gw[0@`děS@ 4Yu g@Jwپ@앿"&r@[BF^ Fd@2GE85鷿a@GB؃np@oV`W# @v p @D">n@HӮh^@űH+GN@vϿ<#@ܜMtT@}ke˒:)@3;wFǣ @G/Vֿ,fW@Z]yѿQQ@m(5~g@`:ҝ@pO4H*")@߮@lD@.r0@&IE@U0@= މ"S@MKHӮ ԕ+@dTɆ m@N;6fB@<ͿJA c@UfLnm@d-*EN̢a@r{5?>p@LPr{iJA@zGuO7u@~+VhJ@Zp޿Lnm\¹Bx?Qqi[W~'!WiN9}3h]k쿱[Wq`l >-b8QlvJ# [7Ԫ"ۿ=B#槆&% nOoLnm~=R2LfQQ4K3ۿX6F6f)^Zx6z:hAz9L*0BZc G|j򐬿ulv`S#qu!SA̷C!q޸Q EbݥSܕ*0_EۆnCyƿy=b4m9nY!_Ed7> Fd]$D?WS/VпSy3e+aQCrq7c^t)QQ֌/ejRiY_rz$UP#cWZc -O;dZ G|Q֌i/)^`Vâwk1ڥ |3rSο?gX2vtcc^t)4K36&Zpk;< z@dQm݃+$ae{|E˼+ 8CV},Jw1H앿 }9뿚4Ck&Bٿe+6?S+U`?xs?+@xM++?j~#&v?U8R?,'77¤T?/{J#: R?fP_|?9m b??EwU;_I?q ?2f6z {?|o'=IB ہ0HA?Jm3 9}?zcsl&Otr?nN&Ԁ?PH4C?2 E2,'?\ y")?x-8Go*H~?oHӮh^?|Yt[ ?6P%fP?퟾vȴ9(?Y {5*8?mqbb̿Ebh?1zNr/Z?݂ulj٩T!D?i/n!vݬ?-#Ni4.۶?Ckffffff?rGE8iJA?mqbd2n?5͉/*ZFsC?R4*ީ?nX/DT!D(N?Fs҈p;?*\ZpT?𭖦ZD ^?=1?trᆘ5?'|E˼ۿb?P3: (wN?̷Կԏ27?5?gt}?W}W̵??|;Oag#//t?#x6;%o?Ć-˿Q?Q֌i/NP1?LYt\{5? 8ſm?L2#|"?򉕪~Q?2"@?,8K?u?5IO?y8J?+?6n~?TɆ?v5C?y+?f'|F?¤T?KhH?0j+?Q?Ѿʫ\?Z1?&k?zcsm?- ?g#$6e? eA?Cy?{5+?'gM3H? ?)?ɯ?+ʬ?Wx-8?r(?CV?7?Ne?Ǹ?&?n?#? V??ݗ?x?G?nP?1?;?g?ꓳ?䯢Zp?Mj?&q?a=1?D?< (? Sy?XOLn??Gd,?ZpU?}A5T?䣃'g?AJM?Xe?l5?헍O;d?'qp?tT?#$6e?Ie?b?Q?csl&l?M?&">i?J!?h?j?ᰊ?k}9?ulvK?5TuL@c ?2f?肩 @n< ?瑼UDR@ؘ?F^"S@nwp?Y5;@jJL?ҲL@?H@ܜM?}At>@ hb?ŬGG@ ywr(?As@ 5?Ѣ@ `ٔ[l7?毢Zp@ 2LfQ?ƒ)J@ ;dZ?n@ ;D=?@ Xިc?wY@ 9&A?[$@ p`?o@j?ud0+A@ k;=?pϿT@?7 @; ?%|o@ TzG?_Zjj@oܜM?u@.}A?2vtc5@VБ}kf?٩T!@v ?#-@s?㗢HH@_vȴ9?fQm݃@|#-#? @m?L@E?:w@7?C@*0?LW@?IW?x@e?`A7K@VϪ?4J@ʖ?wd@BB?hƒ)@&d?&.@"?ߏo@X%[\?޺s-@o5J?ݳ|@?}ӄ@ > ?M@ c^J8?bD@%˼+?O4@*)s?b8@fپL?wpy,@v5B?`N@˒:*? 4@Ҳ?DUGZ2@/iDg8? gw@){t?ˆp:@Vi/n?t}^_@ӄvj!5_@GE85)r@2IK:@ ;K@9UqKϣD=Fl@V?ؿ@Cv ׈6!5`@A [sPH@lvK(@3:}E@hۋ^ @2/Y߿~鷿@R`JD@r 4Կ @.2ʿl oTL@!Wh ٔ[l7@eUſFI@< (NxW@i}΅3t@#I{tz$LD|@;D=FrGE9@W74@g_oAt>=@}>P@d9ֿGo*ZF@VOIH@(o3rS@P3D@!.H@>6zK$Jb$@>BZcȊG@kҿb.]\@|@7p+ڐ@Go*ZF(b@lW灃p*|a1PZ`V. zN{7ɚ$sֶZIRI'>9CϳRCjfϿͼn.(߹K]cd9䤿/^ G@DU#cQ.4xW)ѢY-"6z> sɿsgJEmLAݿ{e蒿l<K]dBCR<6+y[=K^Z?4:?D*0Y!?Цv (b?th"&r?lpqA_E?۠&J\|ؙ?#$6e"r/Y?d2m]y?4X ҭ?g*dcI{?6K3?ÏG0@9Y?iv1Sy?ƨCP@?/{J#:T Ǐ?ɳ(nSP -?2P]U=?̯Zpdi4.?(wN&;[?ϝ-VzN?ЇMǸ?>'!Wy? (wN?ҧ jA c ?Y_a(?ﲫ? VEf?\R-#/*ZFs?T6b?"h ԕ`k?x;'?xo?xFz;'?eәo/Qbb˧?ǣ -e?|ؘY6? =?~|ᛑP%?7ɚ-V?XOLnm =p ?ﲪ9 r,'?݅HL  ?H jF5?ޫ ~ j"'?t); _ô?nwpz \8?XOLn  ?GZ1ި?S$Qd2?Կ }H?zcsmygt?A7Kƨ2(?e,{ Z?ZR@:p?T~˼+@?KCWOIH?#π39-*?V߿?7KƧ[[?3rTdob?\N;l7`]? DʻD _?ZQ_g?}OBO ?𓉵 G?laR*oh ԕ? (|+@y?sj?Ŷv < #?ײud0+@?A! V?~=?");D?($ xG`V. ?=Bڐ?TA5Tu}Vl?l:d8?X [?Ր<n.? Dn$5inY?Ԁu?wF{B?tn7`?OIH]U\S?5Jw?$_Zjjp?' ?p ?'j@?a?%[BE?> ?$ p?|ᛐ?"&q?{z@? ?9m ֶ?Q_p?&?#.S?q?ڐ ?74?ᰉ'?CcHk?[W?Q?!ZS?7?!vݬ?'|E˼,?A*ީ?}A5Tv?Fd?Ռe@?F)k? ^?At>=?r2Lf?7%ם?5?(b?1;.]?9m ?⹌~($ ? ??<+?'gM3?iJA ?4֡a?n.?پL?*c?i,e??Zݘ?K۠&?B¤T?}2f?5B؄?E˼+?1o?_"?'>E?qu!?Xe,?b}?m??F?y|ß?ZzN{?l?!Bo?ߤ??w[0?I'>?֖2?`V?&?IV?K?Ǹզ?GO?R?-?($J?եb?w1?:}O?WhI?[W}?4m8?4X ?ڐ?"?ᰉ'R?'!W?r2M?k}?hb?gB؃?GzH?Pnwp?]U\S@ b#ᆘ?6P%@\#?쮧G@S|?qxB0@R}A??|hs@x}H? 4@յsh?Gz@>+U ?뮧G@<*?1P@g*?X @z}OC?f'|E˼@zcsl?n@< ?|G@ ?iu @yo5?+ʫ]@Y5?˒:)z@3g l?fP@z]y?,R@k}:?OB@/d9?.S@?8Cl@61?x@#??F@v?#c@ԕ*1??F@ NT?/D)@ WO;d?"@ lLYt\?4AJM@ k?牠'RTa@ i?禠Y@ (.ǹ?皀If{_@ >'?Z[(@ J6&?">iQ@ Cy?̷D@ eU?q!@ AeU?s@ Z?֡af@Ǹ?l@?"?㎊qi@hJ?܇Tw\@Ip@a//@j?;dZ@O"?8q`l @"?ފԿ @wpy?eU.s@5ᰉ?(@KNʗ?QR@Z@c^?hJ@mͳ|?ڌL_@:pe?#x @y?LB@ D ?؃fQm@Y? (@"?׫U=@6ȴ9X?2P]@Vy|à?֝4X!@vjUp?Y5;@u'!Wi?@n.?UqK@kv?s@D=F?bM@؃4D?<@L1&y?Fs@}ӄw?EM_@"S?a=1@;D?bD@ߤ??Fd@@4m9?гu:>@pϿ?Ljwr@7? ׈@qu!?i@m]?&V@@2 ě}ӄw@꿽{ 1ί%@Yb}82vtc@qn_حV@|.3<*"@v`VĆ-@(n3:}P@<`R~Rw@҈p")n@3rT܆hK@ EbłU@"h ԕ,{ Z\@ARan@_`N/w@}k;=FVI@ިc^EwU@VϪο]ce@Y5@ mqbb@ٱ1eә?@D=@{A7Kƨ@@P3@6f̷@Msd@b`A鸐եc@|j~#U'(b@^ NܿAJM+,@gS #y@K3e+@028@>6z]$D@:)yl6z@C7!<޿]:@avݬ0H@@Yt[#π3@*") k~(@{0<`@2vtcu@ {{s@*"mr@u:?S#@ߏG0@xW)@ 9UGZ2@e8J@).31H@:/lI{t@~f_"@hֿ}@MؿVX@߹8R- qv@~Rvo*ZFs@/eY!@'Xy=c@ "S m3 @57~8q`l @Eǣ "}O7ug ld9weں08[ rz$>Ց䣃'g!>9Y +tW Y!ɼKk]҈οZ7!=BZco~=U5Q/Y27 K3333333R~Rn.3sߤzGS"޿ x>2LfQnHoŗ Ć-Κ,fXڰ ěiٝ^J82v`k{،D"h5~}H˒F)JpϿT$9䤿eBo\=x@J82vuTɅoi O"}`HKHӮh^t&qIf{_PZpUΒS&,^#̖g.ǹʝ`̍2Ȩ>8Ckƶ}Vls-ѿ*")u~g,ިc^tPWx-8a Ec+`k{*")lB؃?]$DNP1?0 )D?Ϫ͞Z}OC? /^ "ӄv?߾K )y}?(b =B?pT vtc4?rG #?\N< `,?CcHk hzc?_IW?ZpQL?{?a=2;:h?43@?TK3唯O ?d0+@j7?l&k?>q?L_SMj?4AJM+U?l7`]yhƒ? <` xW)?)IexLW?!Bo9.?'!W}3?JwԿ ?9Ys>WS?H @$=? B +j?A_E5nh?07L/{J?F)J=1p?[-M@$?o 6PPܜM?ӄvu%F?"W?jfϿ(?i;ySB?E H@?7 ܇sպ? =?!߹8RϿT ?0p ??05Q.ǿNʖ?PH7ɛ?Z*??|o'=sE?$/QX(?r{mM gw?9u ?񷴢3հ5Q/?氿 a=1?*0?/^ G]U\S?.S^J82v?1Pۿ 8? 0j+Y =?cHj?'(0?]ceﲪ9?g*߿`s? ?>pοnC?lLYt\+@x?K]cԓ ٔ[l?ӄvG#ρ?$'(n~?9hHƛ(z?F]cf,?NP1<CA0?PܜM2 F?Qx-8Go ٔ[l7?Y[l7az3 W?yHU'((zc??>~($ ?R}AB ?pϿTWp+?.zG?9?lvJ?th?cI{t?B?>WS?Ŋ2I?g?K3?H?6?xB0?eK?HK]c?׍yЦv!?!}?ڮSeX?d?pa?h3*?o~=?Ʌoi? 7!?wUqL?~6;?_?3?H@r?n?? / ?r/Y?:w?`sW?&q?oTK?򐫴N?I^5??n?6&?FV?P*?*)?n/?HjܱF?v ?<64?\N;Ϳ+%?\¹MUDR?h?lA!?O7u??j%|?%|p?7ue?}A5T?mHQ? /?˹8R~?\$?ѩg?ߤ?84֡b?mǤ?d̢?,QI?ۓ??|h?D?jf?D?.?76g?׈?ZIf{?p0#̎?mqb?Uhƒ?^ Fe?A c S?}ke?+ I^?)^??&c?Q?!Bo? sG?i/n?{5?@ I?ŗNe@ PwFz?S&@ 4Y?{5@uy?4X @]9?|O"@d?d7@0oiDg8?LfQm@ ?c4@v6?(n@i/n?inX/E@پM?< @Jw?R~R@E;'?P*@m:?;.]]@پM?;@b?n.3@ k?W}W@?ײ?s@CQ?HK@-uO7v?n@>?ײ?{z@kZy?RJm@vJ#?>'!W@b}?:S@* :?bh4@M?޽{ @n)sБ?8Cl@y?a=1p@5?ܨmqbc@7 ܇U? @{ 9&?9&A)@)Ie?ڊԿ @o5J?ᰉ'@:u ?Zjj&@ceO?ǎj@y?)k@L?,@\(?$5inX@`kz?̷C@=x@?v ׈@v?G#ρ@3)?,@Qr 6?n~@l8\?ԐNP@IlLY@8R߳RC@u%;D=F@Ϫࣘ͞ @~RvPr[@<ם gb@M?Rv@f'|F3rS@4֡arGE85@Tjzcs@x ß`O@ﲫud0+@@Ƙ5?@Bÿ6;%@ :э%/l5@(@>P@Xa fWx-@`,ÿL@ȟ@Nvݭ@ƿ@5inX/@+˿qu!@wko?R&W@ uMUᰉ@J?п'!Wh@d+}9Y@ 4Yn@lLYu@Bgt}@Vga@hjFWiJ@V]9-*EN@':pe4AJM@9&A)^_0X@K.}A'(@cL#ᆘ5@yP3:~n@7ޓU8K@Κ,fJ{{@A [#π@M=@ `G%|o@Wʁr2LfQ@fcOJ]cf@sl&k%|o@`Nj@'76ο.2X-Yd> 8ſ(CcܿMsݬd9]N ʖf3]ud0+@}B>BZ_U=ȿ?>p@ѷX奏q!K" ܇TwfuMUi4Ck?ײ2WHjܱFoag llvJuMUd-*ENi/nCX"SPiu lvJ߱:V. ޓJm3j򐬿vf%[6{ B؃4YE +@x7ӄv+ JEQ?glIVȿlvJ#y,<ԿK]ce)4ҾauA\ſѶE`N㓿Я0+W پMR*o?R0#̎QQ֌c SzS&ffffffYrA:Sc4Qpy+Mؿv6ЎT,]N!B^t)<$tS^:}Oʿ =p7%m=Q.ƽ?İk?'RT`eA(9-?fAY?Ѧ1&y?c^J82E?Q_ح?/^ Gk]cA?ԏ @98q?Ebhr2M?rGE8 ?֫NP?>?,k΅3?4m9u7~?7T7Ҳ?cI{tpbM?视&u?zNz Y??) E~+V?҈p:3]$?f'|FԷ,Q?Q fC?ge?m* ?`kz߹8?1;.]<`?VHl =?|Q/ej? ěPH?d 7+?Ie n?$tT >?? ͉.?[!Z ,<쿱?߹8R|?n.ty?%1 Y? ٔ[l݂v?V. QHo?Ҳ,Q?T!D(NiJ?<t?yF L0?'|E˼,J? (wQ9C?ߤ?Q??z9-*?Y:)y?`V. Jm?1:Ӿ"?1;.&{_J?}`Nr ?oǣ #M?e ?)r\>}3?IA!6?ȴ9Xb|ß`?l?PƿK3?}ke7T6?!5`$?D-b?m?f:?CA?a=1?j?#cW? G|?($J?hJ?_A? ׈?줓ȟ@?qp?($ xG?/m?﫟U=?D?+ J?$5inY?XD*?4鷿?UhƓ0U2a|?1'-V?ͳ|?+jg?i?q!Kr? ?k΅?"?{5*8 ?^J82v?z]y?!ae?Q? Y?U2a|?1&?e?#-#?ڑSy?.Se?UqK??>q?FIm?<`?Ǹե?Zx?l?J82vu?u?J!?)^?~g,?U2a|??}Vl?K?OQC?gud0+?Ib?P{?"`B?A c S?1?6?k΅4?*")?VCg?.]\?X%[\??7ɚ%@!6?&@KH?N;6@n j@Ӿ"?٩T!@tҳ?nO;@iQ?:э%@QUDR?_IW@t.۵?ɯ@tj~?߄1@1eәp?{0@uO7v??@ԕ*?ݕ1@*\|?ha@#s?-*EM@B}?ud0+@@ba?ڽf'|E@7 ?OX7@jUp?ʁ@XOL?9䣃@T6?!5`@;?uy(@ʄ8 ?kv@L_?2I@8xW*?4m@mV??F@{?QQ֌@Q.Ƽ?ԣS&@)^?1P@X%[?;'j@@پL?FV@'xF]d@s =p@wd.3@ިc^\ı@0X:֝%@+C]@[رA_E@{m]ڦY@=x@pP@ϢZpLW@|ݿޑ)@ (4X @(Hտ߄M:@=cA ߿`s@P=Bd0+@j@]SnuO7v@w`HkP{@:!Bo@9ם gb@̀:˧2P]@}:w@,0 |@Nwpyeڹ@keA#@A!la#wk@HGÿ%@ 4$ p@v @ B Jw@*M++`kz^@H!~|@h>BZc^޾@[l7`i@p&?z:@E˿>WS@r\=-M@$>@oiэ%S@"@4.r/@DZ1np&@i,k~ 7!@~?>O M@8 a=1p@Pr[RJ@͛t^"S@پM\|ؘ@2X)Ie@ިc?`s@ 8ſqiB@)e̍2@BlvJ&Ԁu@Yҿ*@m.˿ֶZ@ƿG@@l oT,'7@s¿~($ @F L0 @<wd@W gb@3j@DR?g@j8 Dg8~@sБ}S&@̸~|@ɼKg#$6@֞FJ0'RT@Y¿`N33 W?>qygtr%߿~LXTm81P5;OagAsI'>*Tտ ѷdobnY! (R~RnD:э%y2i}Y2 xF]9XbMӿu:>/0 "K֙<ϕ7~%灄o.(bq_oO S;wG-d>t}^ "گO M$ xGٕ.r0~Rv_Ŀhr Ĝ~TԿ[ B؃479m ׿2LfQn5IP$ pڐʑSy Z[(oiDgY!ilC\ y<*6ݬ,dr 6 uyQ Eb࠿Zx&nDy+ҿ9䣃S ݿ.3,{鿸U'(bFVhK`:aLW?) QB¤i'RTa;%o^B ~:}OCC\?|B1Q?sg:э%?ڤ$5?^ ty??P{?vj(1&x?z9H˒:?lRv?X fQm?+j |?9Y +?B9CX¤T?L?Կ dzRC?9XbM Ƨ?T Ǐ'#$6e?ʫ]l1&y?`Nohۋ?32'j@?>BZcb}?> ;M?',э%S? M;D*0?Y?tqB9C?/mr?%;KcI{?9C?R&W?N /#cW?c}9ݿkuy?x73?08a|Q?򬐁?WS?ŗNe?Tп*EM`?Dm݂v?6F uO7v?9vݬ_{?bC,P?IQO"}?r ěa=1?,fWѿHG?*0U2a|D">?&I8q`l? ԕ+⌽D?q"#c?ܜMs2?#cVb}Vm?h ԕ+;?򕋂F4AJ?,fWѿhK?D"},?%2`V?a&q?:w⦋?0OY3 V?¹MtҲ?ᰉ'VԪ?#$6e /?\N;Ϳr\=x?/0?i,e?_Ë?)r?:w?yR4??tҲ?顠?o~=?*ި?ke?쳦?^޽?ohۋ?[LPr?$Jb#?Y`?y?QX?ѩ~+U?R*o?RBE?K:ϿՐ?OAs,{ Z\?eU.rڿvf?i$')?4m9?o~=?1eәo?tҲ?),(?tqp?ɵ D?vf?'(b??ӷ`?!Bo?wr(?zd?ڒ7?OX7?ݡvݬ?y=b?Xe+?jF4?)r\>?If{_???FپL?V`V??T Ǐ? k~?5?pT?CV?R?ȴ9X? ?pT?VD?(n?5IO?!Bp?K$Jb$?*0?:)y?ԕ*?ىr?A!la?+ ?G 0? Fd?.}A?HU'(?|ᛐ?' ?l:?v5B?Zŗ?Ebh??z:?l#?0d?GG#?"r/Y? bw]?($J?֫?? sG?wk?puO?Rm?t?>B?ѢY6?iu?ﳦ?LP?~($ x?< ?i/n@?R&V?Lnm@k?4X @|E˼,?m?@$0?#@d Ri?@?) ?@RT`e?x@*fB?vFJ@-#N?JA c @oD)?LB@ɋ.}?v5C@%h?cI{t@oh?sWp@F4?3H+@X $ p?KZ@!6?"@L#y?O"}@xF]?]cA @+[-M@%?+@jU@z$LD?,@/?C]@G{?pO4@ "&q?Y_a(@ yC?@ āoh?E@ =?o~=@ s:}P?;yR5@ <`?2P]@ W}?$'(@ eU.r?iY_a@ ?C,zx@ d9?oiDg8@ {?MUh@ v ׈?jfB@ Fs?W@ 7?İ@ Rk΅4?İ@ gw?ݷk;=@HF? S$@ R?yg@2LfQn?(F@XOLn?5IP@Eәo/?U2a|@rLP?1zN@>B?C,z@F4?E#M@_ح?ᰉ'R@:?e%1@_+ʬ?_o@h~?zd@*\|?!5`@e?*ި@OIH?伔pd@.ƼS?䔯O M@?8q`l@IHU?$ xF@>ߤ??eU@XOLn?'j@@3?<@ᰉ?5IO@gM3H?D@/fP?"@RSn?m8Y@onV?'76@OQD?@?2^@4X!?L@@̢b?vF@Ԫ?O M;@M?ޜwkP@8 ?\@[BE? 1ί%@~|ᛑ?Y@;dZ?ۋ.}A@CA?ګ`kz^@'(b?ٵ D@?ҝ%@.r0?5~@Fs?%灄@t}^_?q6@[ ?@ ǎk?Fkv@Ha E? /^@[s?ұ2W@ި?v ׈@m?C,@ޥLX?ôr2@?j%|@q+?9_@%S?O M;@t ǎk?,QI@X:S応z9`@A͉>-b8<@huO7ulC@I{tǮ@@Gݗ+ɏo@nʿpuO7@6zҚ@%hXe+@6#-X/D*@I DCP@T`dÿ'=[!@:)y4AJM@m8~($ x@},{ۮh]k<@!e܂i@@:pM_@^6;8\g@xU޷Cd@*1(F@n/a@O@xW)D)@ =@ḍn@ ]r/Z@07Tv_ح@\ #1 R@E䴷,Q@I^5? =B@fffffz@TɅo=@!5a Eb@2_5Xy>@5sh6z@MyЦv!th@i'>E#@}2f׈@vi@ܜM5~@YEM_@-*EIQ @ZIf9@)^5?}ǎj@;wF{/l@Uy(ڿ@x@wueTɅoi@6U\R.,<@O;dZ;K@\¹Nz$LD@b}!R<6@2(¿l-@Hmǣ@fDR?g*\|ؙ@er(L9@s>WStT@d2n@ՐQ֌@$tTVu@S#Wp+@+jr/Y@9.Wx-@,'76ο6P%@>t)<@M(ix@@x~|@۫!Z6v @Nv޿f'@ vs@ ם gb@ U=ȿ&I0#̍䣃'gM+C$In.3>WSB1^ NܿfB:憿*")t% ,?T])4610Mj]x9mwчn-w1+@jU},ʿdls-l-JF4߲V(]k;ތ8YKiDg8~G 0j+"&r(zc0#Ϳ RiY_yrc U:k&j2{5ּj~# <զ76gf'ԑ?S&d8oa{z@`kz]VZIS{1pO4Α\лo vο˒:)L/{JqiBngScsl&`V. t$_Zj^ NM_^)4' V׿c^J82If{_=JEܜM䎊q!m3 7KƧcD=FlNx;n뿣9Dthhb뤓ȟAXpuO?y;:hA 9&B?8r~Rv?paIf'?-*EN N?9ޓ?Sάh?,]NP?2"@{Կ ?$5inXR%1?{{(S;wG?MsY?0#̍;'j?|?) ?LJi,e?-w1TE?鷿*M++?nmuuMU? VExB0?Ϡ k[W~?КVWi~iQY?bb˧2R^?(wN&'0@9?i Z[?ӯd9ϿT ?p:~ =p?/D)w9?VϪKȟA?֧ X:S? 6P&G#?d9?+@y.G?8Cl $ p?i,d *ީ?sջ (J?!laR*o k&j?p =q ~q?쿱[W?_{? D _ƼS;?5Q.ƽދi;?넋[-M?*cP6F ?`:lq ?*Dg8~?پLzY?EOLnm?<64P]?r(]:?$Jb#*ީ?IVfP3 E?͞%Y?G 0jx?%;:iy?NP1<Xs*?+jfr Ĝ?=bwKƧ?$Jb#=b?s-fپLI?m\c^J8?]N iDg8~??~f? |VE?XeiDg8~?Ӹ{ Z[)?mr$Jb? $H[T?&x(߹?A(o:pe?[ߏG0@&ŗNf?tD?tj]?0OY %?>lLYuf,? 0aR*o??7k;<1th?UGZ1|27?gd,?wN&տڐ?>lLYuX?j{l{?W:}O?Ft ԕ+?qv5C?d '0? EbFS;?12W$tS?e2Id?qu! 0j+?쿱[Mj?ǮzHCcH?۠& ٔ[l?pP#cV?|ؘ1;.? ԕ+wr(?ɯڿ4.۵?;KvF?Ҳۿ|?*\|ؙͳ|?GZ1ޭ-e?qK2m?8 >E?"h ԕ% ?,)r\5*8?ii}b?cI{^ ?"h ԕS?̷ԿXy=c?SϿM?`HÑFV?SP -?m ֶ[y?0 )e"/?0 ?f'|?o*ZFs?gb?#x ?cHj?R*o?S?ʐ ?iu ?В7?{ Z[?պ?VZI?ɯ?9o5?EwUqL?#π3?t>=ć?n?O7u?%2?CV?HU'(?sպ?D?tj? :?Jm3?䎊qj?!R<6?1P?:?ہ0HA?%?z@d?ݬ?h#?s=B?񓳦VϪ?e@̿BB? gb*EM`?*0U? 7!տ>'?ʫ\崿s)??$6e?l!?x?;Oag?fI?.H?*1?6?l{?k~(?9?}2f?--e?/%;:@q?ygt@hƒ)?ڐ@Ќ?>q?^ t@5sg?*c@/D*? RiY`@3?O M@WI'>?Ԫ@ $?Wh@ե?4Ck&@P*0U? =p @8R?zN{@&V@?GG#@]sBZ?{_I@LPr?Ib@+?ײ?@)4?jj%@Lnm?!Bp@1;.?jUp @-8Go*?1ί%@fA(?*@ٙ?:pe@KxF]?7@`,?eәo/@ =Ć-?3zN@ [W>6?-V@ BVW?Y >@ |?ŬGG@ k}?뙄@ R/l5?XdE#@ 2?hH@ RsP?^5?|@ ~$?xF]d@ ̢b?D@r2?d2n@$tT?sWp@ OLnm?Lnm@ E?a@ ﲪ?K ͳ@ i?킔VW@vZIf? $ q@TuM?q@`d?齺 RiY@F L0?w1@?>q?/v@;dZ?u!@i (w?pd@QCr?!Bo@Ft?ôr2@7Xe,?*0@cF]c?sl&k@?~mH@'/W?Ԫ@Լj~?ڹY@6?N @$=?UGZ1@aҝ%?"SP@k~($?uO7v@hr!?#cW@?rG@ޛ{?E˼+@ḍ?s@2B ?M_@vR<6?⢜wkQ@Yvݬ?@Z?{J#9@L?S@\8J?A!@?k~($@ 1ί%?9䣃@ p?ud0+A@Q?KCV@/\(?T ǎ@Wpy,?5~g@{?+@;'?<@lvJ?yV@ם gb?#wk@@N?A_E@4AJ?hH@ 6P?ؕl oTL@A_F?T ǎ@$8 ?]N @B˧2P?#9@d%1?D">j@e?gT@2^?䎊qj@}At?o.@Q?;@)?Q@MWw?PܜM@n?Œi/n@T6?j@ae?ZIf@ '0bY@A࿅=K^@eCkR~R@ ڿõIHU@6 $@LI'5~g@.ǹ#ᆘ5@$0+@jsh@C̍2X@LI(1z@Б}kfdob@^ կd9@F4j@3 W.۵@QN;5ϕ@)sѿz]y@OLnmq!@uK:@=Ć),(@xݸf:@ƿ@[@|ßahH@bȟ@@XdE@yR4뚿ᑒd2@sպTɅo@B9C/Y@}9E84֡@4Ck'ҲL@%!: @6y|à嫟U=@Q[W>61o6@{ ܱF^@p =\ı@qK$tT@1&xտA!@:эm݂v@27k΅@:S丿8 @-KHӮ@L?>pοrGE85@{jF4AJ@4.۵eәo/@|Gﲪ9@x>-&q@ =G0@9@Ѣ*)@܇Tw~6@-*EN+ J@˒:*4X @7 ݿ`A7@CP5@A [*ި@bh>P3@/Vֿb#ᆘ5@Eſ,]O@=b豚A_F@6zOQD;KbwĿF]c =+p]q?xf'|EG#ρ?hƒE?y|àQ֌i/?Nts?L8\zcsl?cHjxϿT ?~mHOhۋ? /^ %oi?9.ŗ? gbЙZx?i}*\|?~鷿{ ?3ߤPD?ty%LW?ɒ8\g6;%?;<ϖǣ ?qyU?΄8 y-*E?]U\SMoTK?҈p;!͉?Ѫy'(b?t);r\=?<64iv?u%F q}ke?ƼS;E;:i?Չa=1?JA c 8q`?7 3 W?)kO"}?K ͳK?楤i4/]-V?m3 A1H?XdE#84֡?tqq1?YXs*?^_0XmH?<(߹?!-w2å;K?lpuewUqL?"`ݗ+?285Xy=? ԅ]r?pO4x{0?NΚ,f`V.?m!Gz?L Ć-?Q j͞&?.*)t ;?=K] <27?7!<6?. <8 ?6;%p|? 8/ej?nם gb?ʂm\?s NVu?{ NT?-b8ڿ6C?Pr[Uv5B?p bh4?ik}9?]!5jX?n/?thM?󴂾j?a=1p?lvJ#?uMUi?.*)t?($Jb?E˼+?e@x?ӄv?ӭ $ ?]$D?>W?`V. ?);D? V?^޽?xB0?G{?l-?ިc^t?cOI?sպ?\ı?<+?VL??R}A5?-M@$>?Ms?ʫ\?IOQD?O4?D\¹N?ۺ{?:>//ԚIf{_?I$(vȴ9X?8\g*Ѥȟ@?3mǤ#wk?/rat?.3_o?-B̿.3?++%pO4?'ŬGH?x-8Go*?"h ԕ?Y5;O?*\?D">j?@x?KHӮh^? ??;D=F?]r/?hƒ)? D?ֵK?^*") ?pO4?O3r?]ce?333333??4J?0OY?ul?BY?[l?!.I? .}?o5J?,'7?E84֡? ׈?nY?F4?VH?՛=K?/^ F?h5~? 8C?[ʖ]?O;dZ?NT?6&?A(o?Q.ƼS?61f?(TɅ?9}?i;yR?HjܱF? 4Y??[W>?XdE$?/?s?!Wh?p&???灃?nCy?#?8J?nt?s?A c S?鷿a?J?5~g? Z[)?؃4C?҈p;?o*ZF?CP?)?z ?kȟ@&1.?B¤U@Eb?z@\=x?iY_a@[]9?Wh@^_0?BFIm@ QCrq?/@q?*1{@)?}H@hjF?YJ@Il.?ײ@l"h ? @,??rq6@k~(?E@٩T"? ٔ[l7@iͳ|?T6@և+ J?LPr@K҈?@iB?]ce@E)4?+@jU@a?'(@]:?3@~i;?2I@^_0?Yt[ @ n۵?7T6@ G{? (wN'@ cx ?҈p;@ Ӿ"?+@ 8W)?lvJ@ Կ ?@ jUp?͉.@ bm?6&-@ ?G#ρ@ C?ŗN@j9m ?.r0@@[?E@ql?*\|ؙ@ s|?ﲪ@LI^5??ŬGG@%o^?Q@6?) ?VϪ@oa?ꚀIf{_@wY?Ov_ح@D">?q!@E˼+?k΅@O5I?fWS?Ǹզ@߹8R?Կ @tqq?]k;=@iB? ׈@ Eb?杲-V@?z?)k@.uy(?OIH@O{ 9?a(9.@ ?s-@ʖ?-*EM@>=?f3]$@Vr2L?);D@oIV?s@NP1?gb@ ٔ? @u%F?+@>Rv?ƒ)J@ ?pO@S?QH@ﲪ?ߐW@Jm?{_I@,?ۨ.ǹ@6y|à?]ce@LS$? x@c<`?Ie@}^J82v?{m]@|o'?\>@ ?.3@2a|?ծ@@X ?n/@SeXO?6&,@eV?e%1@py,?zN{@㢜wk?C@-?mHQ@+?>WS@AGz?lC@iY_a?եb@L|@zdؿuO7u@}a@̸8J@0uO7u!.@Oej俯#x @ܜMJm3 @1SyῶZIf@Q}ke5IO@ŬG x@!o ~@> Fd_o@\1&`sX@{\|ؘՏ@}4X!c @P0#̎q@s*@t)< Sy@ +@J"' 6P@&V@ @@5_ô@ 2P]f3@!5ZRD@ig͉@Il.)^@&A)_1P@P*r/@!OX7fQm@>-b8<7@dLD|1+@jU@\$_C@lC#-@âwkm?@ e[[iJA@ 8筁v:NzVC '/8qaiQX(¤T.3ן~+)sБ}=Ć.ڹYVWj=r<64P*P7Tr2M.KK۠' ~($ဈPF4fASٿP ,k͊r(#̍⬿FVI[nwpz[7ӄvY|]$Dk}:hۋ٫ud0+Aj%؉v5BiDg8~IQK ͳ[iJA.ƼS;5fzG_@&V@L_+Ć-`A7J82vu|O"wޓֿ[[QA [=K]*qiC#NvpuO 0j+@\>B~Mk΅3J!qe /sg=4X!O"}~g,3 A!f:ĻM:)y#nsBY޿ŬGJG|>E!i?zvȴ9ɚ$?IOQH?mHQ1?z6z| (x?CVQ?~L&?ƚIf{_W>6z?RJmrGE9? evj?˸<ϕx^)?eMx>?Y!~|?ZFsBX?+UӮh]?2_z9?@pOX?ӓ_ôCfQm?]9Y?$'(f'?Y }At??֯O Ml5?qbom?2"?5MUi?6;%pݗ+?٭ $ ʁ?`A7'(?7uej?)I7 ?0#̎x' ?İ??\лnwU?S{?;K=Ć.?پ+]?!$5jܱF_?ٔ[l7aY??FU?jX%&<`?.}AѢ?D?H@qX?x^ Hjܱ?`G6z?݂u"?ϕtA5Tu?,=D">?T]M_?{ D?#"a?#-#Oš?K:)zn}At?nVXIf{?DUG D|0?𚴷,Q uD?= TɅo?Q )rGE?cڤ /?]9؎6F? u:>?Ck&!Bo?>Kh ԕ?𶙄^_0? ﲪ (F4?~$ﲫ? 4sP?0p5D?]uR~?YT!D=?-8Go*\|ؘ?_ôx<ϕ?.)sБp ?H˒:*:?bb˧2N;5X?{lC)s? (wN';j?"i}2^?:6;%t (wN?RJm;dZ?i;yRU=?hۋqG%?|G>iQ?GN|*?u:?8Ck?7Kƨ#π3?Ͽͳ|?>=ćA c S?2 Eÿ07?+\$޽?z?ײ?ȾԿFd?:j?빌~($2m?mV`V?s8q`l?tꇓݗ+?WS?;:h?KZ?Y2 ?`G?hۋq?>?C?TuK?6C-?07?ӅQ?@x?Nx?+ʬ? Ev?*ZFs?IV`?9m ?@jUp?앿E?ۋq ?X'?tqp?CV? |Zq?š?BB?]x?-V?!@zmǣ?ܜM?@"?׈+@ '?DŽ#ρ@G 0?%;:@nh?pd@-*EN?|&V@@!R<6?g-"@;D=G?SP ,l@6?98R~@DŗNe? c@%[[? <`@ Jw?s@bM?Iiu@?"S @-R~Rw?P1;@d>?Ho@%?@x@Y_o?i4/@)r?q@ &5~g?,QH@ \|ؙ?D">@ %K?+@ ^?lՑ?yR4@n@3 Wqhr Ĝ@"HGÿ6@MEb迨s)@sEs*@Ϫ͞6&,@\$_[ RiY`@}%\¹M@)k =p @dob*0U2a|@A_EFV@juO7v@qpӰ5Q.@v A [@R-#6;%o@2f< 7!@ѧKI@#qp@J P1;@n;5Xm3 B@]\ʿ*\|@F4]ce@Q@NU֊ﲪS&jfBqpLI'?·Ǹ01&xտH@q\EZ6;%+4K3ͥb łUˀ3rT8\h_E?>As_ح(9-*n}VlFi}Jw($ xSQ.ƽ_o ?> $ qR?gܿ {Y疿yR4R4nT6(hb[0HAeU.s~< սQ.ƽ? 4\[-M@?$tSM5_?333333W??h-oTK?%|o?1POLnm?7M:?=x?\(?{ 9Wpy,?n,/{J#?É DěT?P3:}5?j@{t?ҲL}o~=?ʎ 4YQ?Fg%zxl"h?C\0 )?ϪyPr[?ЫNP1ί%?р4m9s|O?R-"FP?#wk8qa?`쐁??ԿLPrR&V?Ջ.}Ay|?TԿdvj?C,zx6n~?lvJ u ?إLW:hA?hH@$=?(wN&!-w1?PX:T?ۣ "\(?^"SCc?ӄvŇݗ?*")f?r(j?;dZ%|p?9-*ERs?Gzgj?B1*0?Q?'(b U=?WhwN&?},{<ϖ?Ie N?R}A3?!R< '0?LI'?Wx-?_oOej?c SyN;5?Neڟvȴ?G-? Sy^ ;?F-%? |Zq :?DѢ?Ckck? fł?Dg8~rLfQn?tAԪ?#cW @4?3H+ GNΚ?ZpT LL_? B?y-٩T"?dmH-5Xy>?licOJ?h4 Fs?ENe ?) D?J& v ?gW L/{J#?eO*?d9i D ?Crq7@4n?K-?+GNIB ?FپLmH?1'&?^ NP?,ʖ]?``G٩T?j@v4K?򌝝4X!Gz?̷LI'?˒:)zX@?.]\m?? [-M@ DU?ygR~Rw?)`ݗ+k?">iQ ?灄zcsm?)^ eڹ?dE#lk΅3?Gſ%b?}9TɅo?SP O M;? 7!=`kz^?$*1@?>puS&?\]ce;?f:=?A_E{z?'=[@q?==y+?̷Կ˒:)?lvK\=x@?E.r0$/?w쁿ty?r(׫!Z?pǿӥ;K?=p =ϔ1zN?Kۡ?pϿƿŗNe?EU5CA?돛]8q`l ?2^?m?M ?@~?]:?‚},{?ܦı?OX6?9XbN?JM?hH?Yr?|??֧ ?j ?ǣ ?[$?3 V?Q.ƼS?9䣃'?H?9.?@n?LPr[?*0 ?_IW?Cg?٤i4.?Z1 "m?L/{J#֯x^?qA [?u%F yU?vjԪ:э%?1c ?4Ckl"h ԕ?]cfحU?!R<ü+@y? ٔ+@y?tjՐ?8Cl~np&??L8?u%F?rGE9?fQ?RCQ?T^?B?8q`l?`sWq?uy?өT!D(?e??VC@Ex?Ms@ rz%?FIl.@ j ?lC@ #eO?_Ë@ ?[ @ Y >?Sy@ `?SP ,@ lLYt\?kP|@ եb?^5?|@ K?9C@ \лnw?eڹ@ ҉?펊qi@%$_Z? #y@P{? DU@?T!D(@\Npu@l?X%[@@~?_@oG0@9?gb@Ov_خ?UGZ1@5Xy>?灃@|?}H˒@%bh?PܜM@c}9?nCz@V. ?әo.@&V?Ww@c4?@3g l?4\@T:?np&@K?' @rq6?ם gb@T]r?DR?g@do?*)t@q!Ks?($Jb@ Nx?ଯ0@1N;6?3 V@XD*?rz$@~"S?z9`@ȟ@?݀^_0@d7?܋C%@{ 9?ۢr/Y@ߏG0?W'@9.< ?!Bo@\$_[?F L/@x?tSMj@rGE8?jfB@Ѣ?|G@?m3 A?앿Ex@P08?8q`l@uB؄?̷C@ ?eV@OB?28@?ȑN;6@??ņ5@,?? e@N`,?$@;($?@c^J8@i7KƧ?cd@}H_o @Y¿@hHyUD@k}~6;@u"z9@<쿱[D@bXOLnnʶ%@:)zx>-b@i ӿ䣃'gM@٩T"˒:)@6Z[(@e蒿ZqxB@IQ΃B¤@Eo]k}:@wAJM+,פ Ri@y=ck}9@(bgS@NΚ,g۽'=["@:peܡ߹8R@,9Vl!-@AR*@VR<6޲kv@oLnmߑFV@{_J|ß`@d8S#@LXP8@mJw@kϿ-*EM@@c^JTw[@%S҈p;@hۋqJD@|ؘ⢇~m@\=xpuO@E@5㝲-V@Il.1&@A_Eൿd@ҿ`@ӄvL8\@/\(I'>E@GM3H,1eә@sv򥤿~Rv@s)k@|06&,s.@`kz^)k@k; ?,fWx|ߤ@?N*)t?u!>?ҴfPhM?ӈ;D=G?ZIf{Ma?+ I^keA?*\}=OB?ƒ)J.?בd2ᆘ5?ZIf{E ?!.HmH?lCVbw\?ګ6z' 0j+?l&kuy)?-V%ם ?C,z*)s?ݧ&l?at=Y5;?Y!~3d3?lA!"?}OBT]r?ɰ'(b?^)H?Q}9Y?󏐖Qx-8Go?sMjO1L?SE &??]x]9?:S|!vݬ?={ {sպ?E1;..H?S'76?oǣ HӮh^?\лnֿ2^?*da@?W}W.r0?`Կ]ce? D _~*?Ho2_?Qp 9?. BZc ?8{\NBZc ?ͳ|Ȋﲪ?'|E˼,Ä{?`#x? RiY`If{_?g%1L?󆷪%?o?~LX?t?x?âZp?qR~R?WiJ?kp&?ШTɅ?dqj?8Cl?[$?]x?Rm?ڭՐ?FsB?Fd?;%o^?Q?1&x?Xy=?%b?+j?f3]?`sWq?N;6?$LD|1?3?E?xW*?c4?qp?fQm?򐫴NQ?DM?oiDg8?=p ?5~?f3]$?t?Nvݭ?/l?5inX/?"}? ҈?,zxl?e?Y}?[?K?߹8?1e?!5`?6z?9.?7Kƨ?5~g?EwU?RC?֡a?v ?򣍣?T61?ȊG?: RiY`?l:?m?WhI?LYt\?Crq6?E?2{5@EK?(zc@x>?LB@Ki;y? Nʗ@'gM3?"쪹@/?R&W?>P3@ߤ@?˒:)z@!7T7?]$D@zcs?;:h@*?a@QFV?l"h ԕ@(?X:S@>'!?RiY_@ Eb?>LI'@ HU'?%zxl"h@kP{? #y@s?mr@}At??gT@s V?𴬯1@ԚVWj?sh@8s?uY|@?O"}@K?`N@ Z{ 9&?E@ m3 A?l5@ zSP ?-b8iQY@7\¹?$5inY@i~+U?GG#@D?wd9@?=@Q֌i?>@4`d??gߏ@ =p?[T@;%o?깶o5@ŗN?jj%@np?iv@??fA@o3r?`sW@g#$6?A0O@<*?5@>P?謚@6%?v ׈@k ~?< (x@m\?DUG@ |?nY!@ 7"?Fs@M+?TK:@h3? xF]@ /?洢3@+?Oag#$@ӄw?n@#/D)?\$_[@7z@c?5?|h@}Vm?cHj@?[($@pa?ȟ@@7KƧ?J#9@}9?ߑd2@ќu?ރ<`@x_?m3 A!@&s?\¹M@Rz$?_ôr@}u?{m]@˼+?ٰ @ˬq ??@,]N?G 0j@5b?yU@n!Bo?CP@S?2vtc5@u!S?7T@W}?+ʬ@# >l?R<64@@l oT?-w1@d2m?27Ȋ@a?yUD@g#$6e?CA0@q R?HL@|G?!}@0 )?䎊r@؃4qSy3@!5`Y =@ n@5aR*o?S@7),ܜM@`1ί%82vtc@++@Liu @Fs&q@a 4n@2ϕʖ=Ć.@T!D(Nѡvݬ@g#ρԀIQ@|&V@.H@9.O M;@'RT?h@!Wh@qVu@u'76@ A7Kǿ:hA_@Ian.@VE̸ؘ@"X@ Bq6@˶gwfC@om~L@p&ɿ$5i@ٿR}A5@2W᭫U=@g*KI@]Uk΅@ @ _˿qK@"M⽥v@2&V޿P3:~@BD D@Yo5ҿu@iͳ|iQX(@{~$. <@C\ѿ@tҳ.}At@#䎊r@@c^HG@1UDRT!D(N@BfQ@V#-압f@{iJAth@͌*EM#@b}Vm@CP<*@hb-bGG#?FsBBE? EbAs?[ K۠?&IRSP -?Ěu%F jUp ?nCy=iv?> ;X? $UGZ2?Կ Y?͙|o'E?[0HA\??ЌD"/ 6P?i;yRohی?D;ӱth?doa[BE?׈w9?}At>Ie?՟+\|ؘ?q67ޔ?At>=lLYt?ej? B` k?٦28\g?o?R&WB[?#πY?&v 4n?sGOp:?c^t*Z,Q?ȩK'd,?ߤ?vtc5?P{2 ?keL/{J? .}U2a|?#̍2? `k{rS?1ֶZ?2"qL?ިc9Y}? ܇T^ F?[W>6CA0?x?&IR?"~m?Ks8Ck?[W>6ɘJA ?ʁ'zH?"`BzN?9vݬ7?9XbN䣃'g?If{_ W}?gW iN?iJA 'gM?`N Ov`?PX | #? < )k?Ws \лo? s &FV?A$ p?wF{o]U?s 6P&?ygv?oiDg8'qp?K]d3ti? k$?-٩T"|?CfG 0j?,]Oavݬ?QCrq7?AnVX?پLI(YJ??>\(?ᛐ)?`V.uY|? T;?%1f;?u\(?Y5;Dp?LͿ(\ ?Y` ?as6e?[ʖ]2B ?SY2?P`A77ɚ$?Q.ƼS~m?RǸզO;d?UqK󜌓 ٔ?[($-+?jt}^_]x?k~(??//tr/Y? eAI{t?hr Ĝu%F?İ6?)*0U2a??}3(zc?հ5Q/IV?&A(XdE?FپL׿/Ys?Z[(ѿཥv?R䎊ܜwkP?/Ysҝ%?nh+ I^?g\>?R&V޿Ck? k~ [6?/¿#?TɅoi?A?/l5?K ͳ?l7`]?Dg8}?l5?> ;?Ev?CV?sbb˧3?\(?_eU.s?SMj?P8?ي6&?Zjj&?#?Q͉.?{ Z\M:?|#xғ򐫴N?G 0j+!R<6?<+h?ٿCcHk?[-M2m? ֶ[v5B?DR?gԖ2I?_ôr?T:+CB?F4Aȵ5?_ô3rS?`VŨg? C%?_or ě?v6-#Nw?Q?@c^J8?p?;D=G??) D ? ?JA c ?0OY?ha?&c?;<ϖ?z$L?w[0H?ɅoiD?ۥe?&?ߒd2n?󳻃,?o]U?ɚ$?9.?h?݂u?e@?UGZ1?iDg8~?98qa?^_0X?&V??Wp+?Jw?Sv?:?H#x ?a|Q?Jİ?𒭁?JB9C?ri4?`ﲪ?u/ej?e+a?g-"?]r/Z?H+?Ub?+U=?]L?-l5?Z'(b?($J?U.r?wr?P]q?2fj@ѷY?^@R?Bo@"?Q@x}H?~+U @>W?jv5C@`VԪ?U=K@1;?@q@@ |Zr?,fWx@o?g@"?*@hr ?>BZc@VW??,d@kz]?@0d?X%[@eb?뙮O"}@Xe,?}ke@t?_@@łU6?(M@6`V?CV@k?1@ x?K3z@Ͷ_?th@+?ӄv@0gT?ᰉ@^ N?JA c @ᰊ? >@hr ?<ϕ@G?zxl"h @Cy?IV`@DR?g?27@}Vl?秛 @ѷ?Wx-8G@ 82vt?;<ϖ@C[l?fA@j?,QH@ZR?qbb˧@/^ ?䙙@w? B@O4?9.< @?^ N@9?6&,s.@ҝ%?ߌ /@.2?ޝ%@@Bh ԕi@Nx?ߏG0@v|Gؿ}@$tT%@9m ﲪ9@4.۶߹8R@ :ҿ,QI@m<`@FsBu"@EU.rڿn@x?G7@?Gvtc4@R~=!@Ck&{m@0 ' @U\RGzH@=%]yЦv@W{{@`FdzG@g2P]C`O@u'(b*)t@P*x@`Vq @ﲪ9c Sz@ thֿ_"@ *Yп0J@ L#sպ@ Zs-ѿd@ ̳u:?:>/0@ !<׿kP{ -  .2ʿ' #cǸ yP f[ Jw| S VZݘ @"&q -ڹZm b#ᆘ۷AJM+, 6&,ڄ[-M灃dT!D(N8%jj%zNzr8\g1PJ~"ѿԥzxl"h"쪸~$t)_Y2 Ҡf?32`A?eV=?`k?ܒ%1S,?X6F#̍2?)r\>2?1PÕ$?ߠ&MjO?/VϫbC,?qi2iY_?,d_Ë?Ib7?ud0A7K?9oTK:?>WSUQ֌i/?jfB$0+@j?ᰉ v?Ӯh];5X?'(4X!? .}Ay?NP0T? qu"*EM?#x /{J#?h},{ YZx?r\=xDU?0'RTp8?Jf'|*v5C?eKHӮh?| 7"vj?wʁA!?B#Z?!bwᰊ?y (BC?a=1p}4X ?"S RQ?ڹYA [?'KIQڤ?#Y5;O6&,?}9$_Zj?B؃4v ?mRJžK?t[ xl"h ?,<쿱-M@$?ᰊ< ?_ôrɯ{?3]$D E?4m8 _8R?`, Xmqb?BZc ?[-M+?H }o~=?j򐫴 'gM3H? ٔ[l7 #ρ?%e j?&Ԁu (wN?>vȴ9XKrz%?WhI\лn?k Κ,f?ynDBi?^? F?6앿E?g,d p?//tX6?Rd_Zjj?.3[W>?Qx-8GoPr[?q#4?"`V?K; ?*cn?[-Mv1f?&q!Wh?76f??3(nha?*")ײ?#x *0U2?JA cl?XOLnd?/w!PW&?lk΅3wN&Ԁ?O;d ?ʡ!B?3:}P?앿?o5?SpP?S#?(M?džnCy?5~g,?uy(?iDg8?İ?-"?v ׈? 1ί%?R}A5?Qx-8GoЧ,?o9 eA?PgTε^޾?rGE9*?nwpy' ?i/nܪ[B?Yuy)u ?;Y疿՜ߤ@?Up ej?T~!Bo?H@qǻ/V?R}Ay?UDR?s?,?b? 2I?DUGZ2?}2?p&?j?뒎 4?z@?9m ֶ?vr2L?7KƧ?B?"?)r\=?Jm3?"h ԕ?ܜM?8J?-e?>au? 7"?_?2"?հ5Q/?]9?rz%?$6e?E?`A7L?HU'?폆`V?R?g?c Sy?3H+?\¹N?`H?\(? k~(? ?a?GO?nX/E?H˒:?_a(?Vu?ͳ|?gX:S?ۋq ?NP?n?X:T?nY!?ɯ{?Κ,f?t$5i?Z?DqxB1?>E?\(?- q?҈p;?zҝ&?z:?gb?Ϫ͞?SY2?+?@>-b9@a?,'76@ͽs?AJM+@7ue?Y!@9-*?4@< ?~L@?2 F@(n?@hmqbc?*@Rv?򐖻@uKۡ?x73@UqK?_eU.s@<`?I@j@?98R~@?!~|@}Q.Ƽ? c@laR*o?*)s@TCc?8}H@-b8@ {?Aҝ%@ Xs*?U=@ 'j@?zNz@ty?&@z?Ie@*\?;'@EHL?ʫ\@5I?2^@ ]cA?yh@?r ??@p?wr(@LX? @x>?O;dZ@Ë?f//@93]$E?޽@iOQD? RiY`@SP ?q @<쿱?(M@!.H?T:@+?BB@X?Z[(@VE?'!Wh@BZc ?޽X@~=?;D=G@쿱[?&@FFs?7@i?) E?S;wG@|L?IQ @x%[[?);D@8Go*ZG?OIHV@ q ?m@L?J@0?^ @M?N&Ԁ@ '>E?;'@әo/?(@4Ck?m@H?vݬ@zN?LB@?sPH@3?ޟ@~@af:?ݸf:@d?7 @g?ʖ\@݈;D=?}At>@L?٫GN@(eO?t);@KZy?bh4@i<`?sWp@?ՐW@8 ?Գg l@˼+?T6@Ǹ?5inX/@ ě?Ԥ*1@Y&A)?!Bo@$tS?S@?ﲪ9@ #9?% @:pd?n@b˧2P?ѿb@,?η%ם@-?1 R@dJM?u!@)k?O4@4.۶?miu@;wF?NxW@)K?D@MEv?ʖ]@xf'|FU=K@Ϳ:pd@t}OB@ hHqp@+'/җ{@M|˒:)z@n)sБ:S&@Y_aƼS;@$6e[T@IWP{@׬o*ZFs@?>pοvJ"@RT`e̢a@ݧ28@]r/K3z@y|ĿrGE9@ qv |Zq@%%1ᰉ@1!Krſz@c@..2ʿwUqK@6l!- 7"@RT`dÿ′B @o͞rGE9@nX/E~6;@ xFܿ#c@uy(cV@~6;@Y!ƿ(\)@(zdud0@Rv7ue@w4.۵>BZc@v洍:@&xiu @R豅H@}^_1鎟j@0U2a|1z@BFImE@V1fa@m٩T"ƼS;@P*`A7K@ߤ?ɿb}V@D)!laR*@-8Go*RCQ@tj~ ěT@ ;'j0H@@ 6|Gؿ2,'@ $].3@ 5`A7L7 ܇T@ LD|0D"@ d{ @ inX/Sv@ ` [7@!fi2LfQ{ɥeS#N-ewʁ B N+ί%;%ݗˍuBοQ.ƼST`dÿTp ha~_0X²LPT!-w2 b){ Cdl-I);DT!D(LPr~0OYsPHRP]5?|h'b?|O"Vl!?؃%2 ?ىa=1?ڌD"Y_a(?ێK-V?܎ 4Yl oT?݋q 򐫴N?އM%?߁doz4Ck'?<*"M^?Cd9?2 EnO?6z/?#x 'j@?⚿3 iLD|0?4J;LPr?㆘5 %R?a)4?nhl-?Gz!6?R&VS&?ôr2$OQC?3 VQ֌i/?]yЦ4AJ?bMD?֤*1ڹ?|E˼+Vz?R<64&6&-?'=[!Xe?nD2P]?ʫ\1?ۙË`g,?f:6Б}kf?2 EnCy? ?")XdE#?߉ Z[)t]?&IQC?ݗ+sP?ud0+!laR?FVI*?;KU=?fQMY?_IWwkP?)_Y ?v+?E7?}}Y >?qiIGNΚ?*ZFsC{5?5_ô՛=K?:>//?DOԿ ?GzHo5J?@xF?_E|0#?f'|yXbM?Q]DUGZ?^J82vu*\$_?\ [0H?8JG 0j?TԿp =?5Ld?ZpTsP?Jw*8 ?+CB,Q?ߏG0@ /^? ҈ ,?6zA?V?+@?Ҳ?L+?i4R?g?mЦv ?3u:>?J-`Z'(b?Z[(I'>?n~앿E?YEv?uO7u1&y?VHb6;%o?Sy0:~?-v51f?s>WS 5*8?|#x %[[?/l5 rᰊ?͞& 3z?ffffff?`VLI'??{?qvC-?#M8YK?a(9-7ɚ%?`0j+?4֡a&V@?&ԀuF"?\лnwm?.}AmC\?1&y1Q?Ć-y=c?P% ?f1.̢a?$_ZjTw\?0#̎x{0?%_Ë?A~6H?Y_a(}A5?c `l o?Y!~hƒ?"HGVI?a(9.4i?W P1? #y?z$LD?0p?g ?䎊?#-#O?($ xG?:v?B?iͳ|?jܱF_?$tS?;'?}?n?}ӄw?Yuy)?Z[(?[ߏG0@?٩???y?X%[\?v+jg? 6&?q6?Y?{*)s?UQ֌i/?q ?NX%[?`l oT? K?O?5?=s?0 ?+y?ɯ?c^t)?\(\?G?Z1 ?ߏG?QH?@DY!?//t@y?T!D(@ :?٩@iiu ?zC\@̈~?kC]@[u%?a{ 9@*)?P8@򐫴N?:э%@؃4?#n.3@gqp? RiY_@ī`kz? |Z@%+?٩T!D@_Ë?®9C@mǣ?OB@b@4?|@ ί%?#d@R䎊?}ӄw@c4?blvJ@Y2?E@}KZ?'qp@u?P*@ LcA \?ܱF_@ `?ʖ@ JE?L@ zcsl?g@K3?9䣃@ FIl?r2Lf@ +?LW@ ⡵͊?!~@ E?h?m ֶ@ ߹8?;:h@ >WS?x @m|o'=?WS@27?2LP@0 9?"@B9?> @6?kP{@*_?uO7u@_&k?Krz%@1e?weں@ƥP?t#@m?^z9@5?|?>vȴ9X@M5Xy>? @{Q? @r\=?^@dob?A c S@T?,Q@M?ޓՑ@.]\?n@˼+?t}^_1@.Se?"}@)k~(?ѢY6@X?2"?@?mqb@~+?,d@=?`N@[T?ֈp:@)}?խ $ @EQ?.}At@N$5inY?*)s@[<ϖ?ԹY}@w1?ʖ@Ŷv ?[0HA@ (?Ҧİ@64K?Ѫ_@fA(?CA0@O%;:?iu @\??K@lA"?B9C@¹M?$'@У =q?M>!@ag#$?'|E˼,@POX?j+C@~Rv?KCV@ 9&B1P@uyy@ ҉̵5@.CyFs@^~LФҲM@xF]k&j@;'T!D(N@VC}A5Tv@IHVճmǤ@чnq!Kr@*cP٬>@e%̢a@-#N|o'=\@ B O4@wdBom@-0j+lE5?|h@ $uM}Vl@ 2Zcl-@ :LBnY@ DG 0jLW@ TK3ۿC\N@ g>E.@ }8Go*ZX앿E@ AJM+,X:S@!kvÿ?@!CY!!>$tcsl&l!+"`B߅oiDg!9ֿGG#!򐫴N =p 1ί%V`W T6ږg _F_o M:*o?R& "&r 0$T ǎ w}Wԗc^t) cpPj@' Nr/? 92 sh %oi0# (߹9͒d2ngKrz%Nxp _Ŀɯ{ wȊHĎT;LłUWS" $ xFCA#a@>EsWp㿳A0Ot[ ?Ԙ5($ xG?ըXy==x@?ֶ[-+@jU?¹M ?7ޔw+?fAJ/ ?ߏG0@:}O?ﲪX'? >lJb#?{ 2hI?*i D?߹8R<.3?mqbbB[l[?!}=;D=?1zN>lLYu?cOJ'!W?w\¹G0@9?)IeË?W&Oo?*\|o~=?3)kT ?fE?Q ʌL_?[-M@Zэ%?ohی!.?pd'gM? 1ί%ygt?U=2P]?y (H˒:?\3rSi/n?Q%SԹhH?v6 t}^_?90nC?G@.1?Zx ?v ׈1 ?b?3puO7?"Zp;z@?A5TucI?^c^t6?z$LD|,Q?bM_حV?JA cfA?}KZ:9`?-l5 RK?qxB1 cHj?~($ x hK?e@xS|?a\S#?H˒:*'(?f0?"r/YSZ?8[BF1{?Z[(~|ᛑ?cI{tY?˱:?Fze.t?_Ë?+$UDR?h?G%łV?8 䎊?4iлnwp?WsQCrq?jv5CȊG?~GXfffff?VWjzxl"h ?@xAs?C8qa?jʂ?++]cf?b#ᆘ5H˒?jUpU䣃'g?7 ܇Uj򐫴?vŗN?ȔG W gb?˒:)z.r0?E1zN? ǎj?Rv-^?>W'? %Rn;?]ce:p?6pnC?Cd]x?鷿W)?*߿!$5?#x ?rq6?!BoQX'?- qVCg?[g?' V2?/:;dZ?/0 9?%ڿ ѷ? L/{$/?"`Bٳ(n?9ֿj?GG#ŏo?hMT!D(N? D ?Q?j򐫴?y2?:`?a(9?̷?o~=?W&5Q.ƽ?#yLI'?R<67ޔ?Rsպ6&,s?OIH??e@x?v55B؄?sP*cO?tj~p*?6؍:w?=Ć.1ڤ?)r\>!.I?~+ULW?"'Cc?)r\>ɯ?[WM:?}%!P?ZRD?MUhƓ?$LD|1?i}?sպ?1 R?灃?K?1;.?;%o^?=?ӯd9??_@?:)y?|0?*ZFsC?ۜ ٔ?#π3?ߤ?? :э?π3r?%q!K?:э%?)lD?@~?!͉?ߏG0@:? ֶZ?7ȊH?*0???wkQ?1&?|?O"}?ڹY?_?E ?@NU?iDg8? x?vF?CP?%!?> ?B¤T?M++?J-`?Yr?7rG?#?&">i??>?HH?ƼS;? \$_?%?DR?g?L?S#?f?np&?ǙXd?䣃'g?wN&?qxB1?do?d9?H˒:*??<ϕ?;K?^c^t?ix@(Q?Uk΅@ɯ?@[@Ck?+NP@ao?9@.Se? ͳ}@y1eә? ׈@j%?>WT@Vg?˜@<`?@0U2a|?n@n? b@`V?l!-w@oǣ ?T`d@E?=Ć?-Ww@},|? @9D?A c @ ~?2_@+ J?eU.s@z>//?;yR5@IW?Nv@ E?򃯷@ x?d+@ Y?Bn@ }H˒?)Ie@ r ?΅3t@ 3H+?wN&@ ;%o?#π@ ^ѷY?`l oT@ $Jb$?M Z@ cŗN?2a|Q@ Xe,? ٔ[l@>Rv?X@'gM?g#$6@ Nʗ? |Zr@q6?^Ց@̽D"?fP@H?8@;7ɚ%?ֶZ@fᛐ? c@_o ?cŗN@qK?5TuL@b?9.<@6n~?@@iOQD?.H@If{_?l#@ّUD?DS@ y?5_ô@? ?t@rB?'j@@}ӄ?' @߹8?n@,>?q6@*8?KƧ@8J?"/@!\?:@WVC?젥&@w?[-M@$@޽?Xe,@\(?a@},?0 )@IIe?l"h ԕ@}2f-b9?y(@i?ܩ7~@L?ֶZI@,P@x?GJL@q 5B؄@ᰉ'MjOv@ȾԿk;<@'j@#$6e@쪸@XJw|@7p+ :@Ke@@g e*o?R&@3灃d@ZpnVX@̲᱿Q_p@ܱF_F]c@ "h ԕTw[@*|Zq x@J%ם +j@h},{ Sn@@qOB@y,zxl"@;:i&@m\ڿ!Bo@Msvtc4@ 0$v5C@ 8J/@ 0xf'@ ;sպ @ Fi׿&@ SpP++%@ `pJ@ m qva=1@ {J#9IQ@ f:D;@ ՑCV@ 8qaHG @! VESMj@!7hIA?g@!AA_E߁!f@&!rJm!^VXej!JVWiچ<`!69.L_!!v6Ҳ! 4X ިc^t @ժ_ A [x ) DH˒:* I< `V. O7u9.< =Bψ+ {]97~+ eϪ͞`V Ptqqȡ߹8R ;[]9 %wUqL.3 ^ Fǿr ;'jKƧȚu%FGzлnw?ҷ,QIM1z?1P ?C,VWj?y|à.3?Fstҳ?Ov_nj?#NvA0O?.2Xs?8}H I??FV^ ?E%?H^0OY?J!B0:~?%1LB??պ?"S 5j?jvϪ͟?nCzH.3?Б}kf=b? 882vt?\$_wF{?.4i;y?z9`\M>?L,C?fBZcؽf'|F?d2nma(9?5inX/U'(c?P3:}E#N?^~LBT~?[kپLI?S;wFՐ?[TATɅo?qR~RpϿ?LD|0vfI?#x 2I?'RT8YJ?`kz.@?t#'RT`e?1ڥ(9-?6e{L?3]$?6r/m?7Q?R?gu?|h?ڹZnD?*cOyrGE8?>P3d?8J k?„1QłU?bM ?J"ײ?7ɛRsպ?AA [?o9oiDg8?uMUVH?rz%d̢?iDg8>P? c Sz'/W? ƿL% ?2R~+U ?@4mƿmqbc?N_o A"?Z{ 9&Ԫ"?fp*ؿ#?r[T ?}6̿-v?<+32?N;6[0HA?ʁ*0 ?ՐěS?`̿"?08$tS?sպwUqK?Ai;ySQ?\(rGE?ٿ>P3?FVx-8Go?6?Ӹ{ݿN;5X?حV"쪹?앿Zx?$/~$?LB^ N?.@ɿ^"?i$'):?mKHӮA5Tu?mt᪎cI{?X g k?Ck&ݻY?D\¹N\ y?L9;'?Kvݬ?@nt}^?/O Mȹwr(?SϿb?Q֌i >l?4.۶R4?˜??*0U2a?'(b?v?FV?fپLI? c Sz?J\?*EM`?/d9?Ӥ Ri?ohی?֧ŬGH?A7K?ɚ$(?84֡?T^?:}P?m? ~?˼+@?i-?zd?߹8R?0j+?=K^?2^?CcH?z?v? ?9.?vݬ?a?&?+U?u?VI?^҈p;?_o ?<#?=?},?&k?)Ie?5?uMU?+a?fC?&?[-?E?gb?_?yUD?DU?x?G?)?iͳ|?%|p?SE ?p?>ߤ??\>?+`kz^?H`V?UGZ1?2{5?Zqx?*\?C,?3?/{J#?-@ZBC?8K@Δ9.?@AԪ?[B@#x ?f@'b?f:@ B?nCy@Կ ?Zc @ŗNe?E8YK@m8?0OX@ba?m@{?nP@KHӮh^?;<@#x?Կ @0*?$=@D?󬐁?@tr?Ë`@~lLYt? I@8Go*Z?sБ}k@\C,zx?[LPr@ɀB ??ҝ@ 4\?"}@ iB?> @ Ev?pT@ |ؘ?iu @ ]N ?@ g-"?P=B@ 9.?%LW@ AOX7?5*8 @ >W?Ӯh]k@ ɯ{?j+@ g? ҉@ ޽?˒:)@_o~=?|*@1?L/{@L_?ȩK@b?>@ᰉ?4.۶@A27? @m3H+?;K@F]d?'gM3@{ 9?5~g@#c?ί%@?zC\@O&?M:@6&?'!Wh@hۋq?},{@>WS?~L@'|E˼,?@ws?@h3*?mgwZ@6?Ie@ =?,2"@@Gy ?1&x@~D@j:э%?KZy@T?ޒO"}@28?!laR*@P1l?M@bӄv?IV`@t5~@ gb鿩LI'@ @"6;%o1;.^@Fᛐꞿjj%@rIOQC,@"`˲V@jUp@]U\S@`A7jUp @D΅3t@.uy(ʿ՟`N@Jqu!@k]5inX/@\$_ae@}H̿,?@jF5_Ë@f:?h@1&ސ- q@hֿ<@7~+YJ@]D">@zBCᰉ'R@䎊r@ҲM}ke@lvJ"S @&c;@(@mqb@9r?R&V@Y.< ͳ|@yЦv D<@/Q֌i/o@Ma*@r[T@ͳ|@ ?ӿ`G@ nX/E!R<6@ ',#cW@ 3=Fkw@ ?-V3 W@ K5Xyg@ ^p&ɿB1@ ln7 ܇T@ {۠&0#̎@ '=[lvJ#@ tT:~@ hm ֶ[@ ^ :э%@ {-Y@ )4`A7L@ [l7`x@!`Grq6@!uzxl"hVu@!Jḍ!vɿۣ!`e 0!t(b!R*o?Sa(9!|hͿִi!g~+~+U !RmI< (!=믿]9!(U'(cu:>/! ҉ж[- >!]9 -8Go*̽D"> қ(¿jF4 ># ,QIIOQ SyËX6 {aHK eY|?ѷXwT6?IVK\$? D _޽?$_Zjj-V?;.]];K?Q ?ejި?wkP=f'|E?هݗ+B9?ڕflvJ?ۡoҲ?ܬ1&y?ݴxB0W`H?޺)_)Q ?߿rq63 ?a@N1&y?q$D?`Nn< ?eU.s>޽?\$_[-V?ٔ[l7a"&r?U2a|a?鷿]x?IeP?\( x?:}OC*?[W>6If{_?'|E˼,?wkP_8Ck?08.}Vl?%2o~=?@c^J̠?7KƧH˒:?1&'/? (xvm?HjAo? ڹY q ?@٩Tݬ?+Eם g?[-M9P?sGO|o'=?YPj?FIl!R?Z?ײ?3H+?Ҟ? G|{ ?+-w1?-*ENL? Fs?T!D(N[ ?VWi%?ߤ?{ ?<RiY_?#}W?{{tqq?=p =dw?:}OfA? Yv?QO"}?:)y 6f?Se S#?!7T7 D">?􆢱pO zc?މ"S PNP?)a LD|0?g8}H N%;?ӄvQ?pdkGN?!~э%?5IJw?do٩?j?nr/Z?(ntSM?5h,vJ#?@qС7T?ʖ/r?=K] 3rT?fI= Q?„1Q n?ty #$6e?M>!Z ?If{_6P%?^ s4?2""?)Kg#$6e?i̷D ě?ygt~qo?rϕn?~|{0?⌽DWsPH? a=1OQC?'RT`eS?CV3A_E?["`B9Y?ows=K]?Eſr\=x?$tT&?mQ ?'76ο~?YJ??G 0j2m?ϠQCrQX'?ڐ n9.pοs?3ti\R-#?ѓ?x-8GoC,z?DUy ?Yɿ!R=Ć?},?55?FsB?*%ם ?@x? &?y+?o.?) D ?H@q?74?Ov_?FVI?π3r?+?]r/?|G? ?KHӮh^?a?`,?a?^??1?'/W?QX'?QR?]x?t}^_1?7Xe?eKHӮh?6?Sf3?|H?<wd?ƈzd?%1L?28?ݗ+k?ܱF^"?{?"h ԕ?SMj?~Rv?@4?4?Б}ke?i?B?`N?Xy=?8f:?O"}@&c?vjUp@ݗ?VM@kP|?@D@r ?+%@NP1?2I@`:?do@fI=?8Y@I[W~?_a(@{ ?êy@,!-w? <@KCW?n@1o6?$/@s?m=@ X6?TɅoi@ts?@D@%1?08@^Ց?!}@iQX? #y@KSP ,?-@z@c?Y2@ 0?쿱[@ D _? @ -?ѷ@5*8 ?|ᛐ@c{J#9?b}Vm@ ?; $@BY?nO@?`-@7 ?\@|O"?(wN'@Q?\ı@nP?4AJM@0W? 4Y@qF^"S?İ@M?{0$@Ǹզ?6@8?W}W@-+?}2f@^޽?i,e@/m?GXd@DUG? ׈@o~=?SP ,@2/m?`V.@ib?CV3@ ?쿱[W?@wd?;L@ I?IQ @*ި?$Jb#@G e?@~//t?l-@ם gb?|ß`@ M;?:w@IE?.2X@ңS&?1;.]@Hj? /^@5~g,?o'=[@#x ?Y_a(@C?z9`@x<ϕ?76g@Vu?*0@ٔ[l7?A [7@T;?ƼS;@; 1ί%?<64@hmqbc?nwpz@dE#?]$D@ߏG? gb@1zN?7KƧ@%i4/?;%o^@PD?f{_J@v;%o?ܪ[B@*EM?)r@B ?@~@y|ß?ځԪ@DUGZ?ٗxW)@(M?؝%@8}H?+y@֌i/o?%ם g@-=?+@Iv5B?#-@a.H?[l7`]@ͳ}?¤T~@"?ǎj@7?Nvݭ@qVH?LD|0@U5Q?m3 B@yJE?ħ,@sBY?D@d2m?a@f̢a?B @\N?!Bo@LW?O M@}iu @*Y|@>mHB @k>WS쿺&V@@Sٿ,?@E<@TcI{tjUp @v($JXOLnm@{%o^٩T!D@ @!WhȊG@ȡ߹80#̍@gM3H0 (@<@ "&r6&,@>Kݵ͉/@\쿱[}At>>@}k;=K@_o+jf@R0@wsc^t)@'=["0 7@L?d@sy3@ ٔ[lY!@6;%pCc@c yR4@5I@ ,QI$/@ bhzcsm@ "iY_w{@ /ﲫ?@ >($ xlaR*o?@ M[!Z병d3@ b!Bo&f@ vIl.Ǹե@ ]9^ N@ Md@ s7ޓ@ ٔ[lCy@ ,d1;.@ ĞDIf{_@ eәo1&@ x;'j@@ KC@x@ FkwVW@!) DKƧ@!j򐬿JA c@!rq6{tҳ@!fI<]cA@!Sn1ί%">BZc{m"8q`l׵IHU!˿y !*")@x!Ë`k ѷ!< ӄv!R}Կџo~=!ulnmu!mHQ}Vl!!Wz@c!D(M!AR<6n!+AwY!;L'>E Ys?y| TlvJ? |[ >+U ?/v ' ?O"} m?m\E?ԉv5BǙXd?գ;'?ּ@\lI^5??ҝ%>au?W MUh?nDn? D _GO?>(;:i?&A(Vbw\?1P'd?:S&y=c? ٔ[l7Ie?ࣃ'gM`?%1LjqiC?LW:?Y5;O ?UGZ1ѷ?U5Qv ?oiDg8dḍ?]yЦv15?EMs?5*8̕Ex?쟔]s ? ֶZfd?qxB03?UqKn?hHf?zxl"h ")?zNzV]:?CP[e@y?㦠Y(@q?7 hM?jOv`u!?l/?hƒNr/?]r/Z :?UhƓvm?OI32?GX>//?&OI?9.Կ ?g`K?&/e=4X!?\R-#:SP ?a(9>'?׈+lLYt\?:5?|?*l-b8<s-?U>($ x?hh3*nP?xhHo~?P*;dZ?ŬGW?$ xG]x?bEk[-M@%?Ƨ?ϵIHV`,?sh!Rl?@[?K2P][?Vbw\եc?`Eo~=?jY п?>?tI7?}`N㓿4X!?pO/D)?&9`G?9ֿ~|ᛑ?%q ?HGÿ=Ć-?$5π3r? c?,'7|H?+ I^n?|O"-*EM?ٿ웺 ?ɚ$P`A7?nKH?9CſCA0P?앿t?a灃??v;<ϖ? c}At??f/0?P?]/w?F?Qx-8Go?© ?H2 F?ɾLI'?A!6?a Eb?9.< ?u?? k~(?1 ?T`d?H?o~=?K]c?P?x?X/D*?I< ?GX?$_Zj?Б}kf?@x?B1Q?,?7?͞%?OB?҈p;?lLYt\?1;.^?5IO?lvJ?<`?F]d?l oT?-#Nw?SP ?(>? B?+?? >lL?Б}kf?*)?s??z?PH? ֶ[?,]N?ݗ+j? qiC?JM++?'\лn?=K^?uD?a=1?U?x 7!?2W?f{_J?Q?TuM?JL?BB?oi?/O M?!-w1?IV@mH?KCW@1&y? I@9.?VX@?՛=K@%ם ?74@Xmqb?2 F@ԅ]r?r/@(@h>BZc?y3]$E@ɿb?X:S@,QH?7,QI@6?-#N@~($ ?-@0$tT?fA@ee?i4/@Xe,?hb@Hjܱ?G@ ?8YJ@@Zq?򭖦Z@v#?nCy@ (w?`sWq@z9?;D ^@zVC?9@B8BZc @u?{5*@X/D?Ԫ"@?Ŷv @1N;5?@x@te%1?A!la@1?]N @㕁$?2kv@э%?~@Py+?6@*?sBY@X?+@gT?"쪹@-٩T"?;'@xJA c?nh@ӄv?,QI@CB?f?ȴ9Xb@z1'?꜌ ٔ@d?`V@hPܜ?靲-V@?쪸[@]ѢY?XOLnm@+hH?9C@=?㾠K@g#ρ?ulvK@?Q@ƭ-f?C,zxl@s?*8 @*-`? @Wʁ?ohی@3?@\$_?0H@@N;6?uy(@UqK?5@!i?Q@HF?0@98@p:~?B @hI?O7u@M?Fs@g l?~$@;:h?ٍ%R@ݗ+k?JA c @?ײ?;.]]@4Ck'?ۋq @- ?ְJ@g e?.]\@>BZc?`,@vj?"@{ 1ί?"}@K&i?pa@j#9?АNP@UGZ2? @ s?sպ@|?`,@?}W@Crq7?d0+@j@;:i?K3@O"}?yЦv!@NΚ,?ty@ |?(n@:x_?} @dohܿsPH@< !-w1@m\KH@!qƅݗ@cyf3]@uO7'/V@_a(=Fkw@2P]/@ p*ؿ3H+@ 3z^5?|@! i;yoh@!nD@!/MsSP ,@!F4K Zq@!P݂ua@O@!Z}OCuMU@!dhM$'(@!n0OY?G@!}Vlm3 A@!j򐫴"a5_Ŀ,s-"L\ D"6-Ӷgw" {ſ~"" ^I'>E!&ڿi!`s8YK!beh!zcsm ֶZ!q ưȊG! V?QH pa?΢]yЦ /m?wkP ,d?ќߤ@ inX/?Ҿi; ~ ?eU.s g~+?E P:э?ިc^ 9b}?5IO "M?NΚ,f u%?ehZ1?zG{y=c?ێKnX/E?ܟjZ>//?ݮ1*"?޼pd_I?z@d˱:?hۋq ߏG0@?쿱[W?k}9?o;XdE$?o }At>?r/m /^??|Zq?rGE85yË`?aH5~?m8Y?5_õ濇i-?ehv?"&r9?Y|Rvtc5?^)5 ěT?JA c puVWi?+\(? bqL?6P&:?.HvF?xa Ec3w[0?vM7ޓ?H@qXdE#?[+ʬ?kP|Xe+?hr"`A?IHU'?j~ۿLPr?VC|z9?KHӮ9}?SֿeO?YT!D{z?jg ɯ?ȔG l[?^5?|NX%[?ۋq GZ1? Nʗ ɰ?RCJn?S&{*)s?'76𳦋?jF4ҝ%?o]rz$?bM!Z? 4T ǎk?&xj~#?0{ſ{5+?<#s4?DŗNe8YK?R&V޿Ѣ?]!56F?\|ؘ=b?O͞ǢHG?D(M+@jU?O,]N1&x?UϪ͞a@N?F L/[?!laR*o쪸[?OI 7!=?;yR5?WS?th?m\?nP?K?.Se?eں?mu?Ϫ͞?4n?ԑN;6?pd?}At>?kz]z?ܜM?_ôr?B0 ?Y[l7a? ?U2a|?{5?[y?ud0+@?k΅3?Ne?tD?+@jU?|Zqx?F]c?f:?䎊?]r/?Б}kf?\$_?.>lLYu?7~?Zx?.?ӄv?1&?6?-#N?py,?6z?أ/D*?X%[\?Go*ZG?O;dZ?^ ?~<`?_?o^ s?zNzVC?[y?{s?A!laR?[l?$??]:?.3??!Kr?|O"?)4?]U\R?Q ?9?TuL@5~g?ٔ[l7@sE?<`@^ N?[7ɚ%@U=?AJM++@'wY?+@x@xW)?@uO7u?)r@}p =?$')@wr(?E @t$5i?]x@ qv?8Go*Z@hH?~+V@+C?X6@]ѢY?t$5i@Nʗ?csl&l@=?Pv @0#̎?A@$:?-Ww@yQ?ᰉ@:hA?e@y@ c ?sWq@ D|0?2W@ 5 g?A(@ M?`V.@ h]k?el@ <`?D*0@ k?!D(M@ \>?- @ u?@ @> ?ߤ?@  ?`l oT@ t}^?;L@oej?u%F @6&,?=b@>($ x?+@ڤ?iu@V3?Zp@4~M?f'@gTw[?=@j?iB@a|Q?#̍@q?`sW@;/V?#ᆘ5@nƼS;?%u@ c S?,@MjO?A!@-f?%@; ? @q!Kr?}E@l?%@e+?@sl&l?ۖ($@XdE$?@98@Ml5?puO@~ s?YUqK@uM?1m@ڹY?7T@)^5?}?nD@{G#?k&j@UqK?@}OC?oi@2vtc5?}^_0@d?VԪ@C? Z[(@'>E?2P]@Ov_?_@@,fWx?:}OC@Ӯh]?e%1@7T7?a(9.@: ?ʁ@I?doa@u/ej?~鷿@i}?> @ӱth?`V.@"&r?">iQ@-Y?ɚ$(@\F^"?mt@9m ?.4@Ne?Tw[@bw?y|ß@ ?yP@1x-8Go??@Xl"h ?p`@0X:?`@8YK?v-@<쿱?0@/l5?^ t@~+?lvJ@@ʻD _?ւ},{@Fs?Ղӄv@kU=?n@,=?.ƼS;@E ?ŗNf@@x?Б}ke@l!-? I^5@G 0j?E84֡@-#N?y (@1X?a@Pa?ڐ@vjUp?' @ʫ\?LWx@Y?[W>6z@VԪ?U=@Y?@?%@CA:~@A2^sպ@\лn@@Nl<@#:@ EΤT~@Keђ 4@wr(y|ßa@) D-M@$>@[`V@,=fB@A,'77@ Bws@;_AiQX(@]ѢY+@hۋqӄv@@Ne 0@ 1ί%jj%@@c^Juy)@9md@ RDA!6@ GY}@ 6 L/9_@ KJw2 F@ \nh ԕ+@ s ҉@ \|ؘ+ I@ pϿƿsBZ@ 6j~#@ ͪOBl"h ԕ@ ?) E:)y@ wN&տԕ*1@!mHQJw|@!ڐ빌~($ @!%o^@!,Pr[GE84@!Csl&lʁ@!LiGG#@!_B9q!Ks@!uQ֌i/@!ѢM>@! /׿VϪ@!{_J톭-f@!0H@GE84@!JEa@![lf@!U2a|m\@!}ӄԏ27";:hR&V"y|àW "gu!"iaT]"S'gM3m"<0ʆ6&-"& %1"x^?mH!a*ީ?>-b8-b8< Fd?aR*o?S ]cf?ՂU5Q +ʬ?֡bw d?׾ʫ\ [?/l x#x ?T6 aE? 6P& IB ? :э 1\?4.۵  ?Fg ?UJm3?1-74?dr,'?=A߹8R?TɅom?D)//t?ƼS;>'?H}{ ?ȊGL~?HQ ?ƒ)Ja=1?DUGZ29?Dh?lLYR-"?SR~RPy+?eOE?Eٖ}?.r'RTa?ZxHG?!laR*oV#?OV`W%?{ Z[WiJ?"'̷D?޳"!5? nO;?eK96?zNz?u  ܇T?HӮh]Y?TK3e2I?OT C7 ?X̸"?hA_FUqK?iDg8~{?ިc^*lP?#x#c?`]xYMa?+aM"?fł#?\ yZFsC?q?JLA [?TCD=Fl? Z[p&?[-MY? LD|0fcI?`?Ԫth?y(B ?KHӮh>lLYt?%[[ { 1?\ a?)y %|o?.3 T?poiDg8 os?E `H?th 'gM3H?%i4/ CP?=1o /#cW?R4T6?hJA?}^_0̓ ٔ[? ٔ[lX*0?TɅ?=qA_E?Q?P]?eU.s.mu?vݬ@?NѢ^ s?64+;?竿0 )?Zߤ??Q i}?泻,?DE?sj@'?+ʫty?`V. Jm3 ??ѿղ-V? DU?)VD?ȿϛf3]%??) .3?Cgb?\|ؙ>?w{]N ?Wp+?*)?A [7?U.r?5?0OY??ɪ?wY?b?b˧2P?ԃ<`?={ ?,d?LB?Ҳ?{?a?ﲪ9?U\R.?}9?*\|?6?奤i4/?d?do?>B?b͊?,]O?BB? oTK?iQX?5IP?s?&A(?Y}?$D?Ie?'76?41?1o?!-w1?4r2M?PܜN?1o6? LD|0?)T!D(? B ??޽? Կ ?-M@$?vF?˜??pu?ͳ|?s-?5?]x?n? 0j+?^_0?sպ?gM3H,?Դ:?P8?т ?9o5@hwN&?8J@|?q@uinX/?Zjj@N&Ԁ?uO7u@k;WS?Xם gb@py,?C\N@-"?/r@^t)?=K^@? (w@r[U?z@@ 0j+?cHj@QX'?ԟ]@IO?*0@k?O M@>'!?\л@ M5Xy>?}ӄw@ Ms?as@ 0`?DS@ h ԕ?&kȟ@ ^)5? @ qxB1?h3@ )_?R&V@ m_?mqb@ 6C?n`,@ @&?A c S@ E#N?f@y ?JL@jd7??g@p:~?#-#@4s?zNzVC@Կ ?Z*@'R?C`O@5X?5IO@fIl.?)`@l oTL?&v @4?3=@5?FIl.@9JE?Y[l7a@n9C?jQ@wk?{?z@׼wd?zN@ L_?h%1@=u?IHU'@rLP?%F L0@W'?W}W@1Q?؃4C@@x?ߤ@R}A5?򒭁@޽?o~=@,?HK]c@M?`:@;ߏG0@?Y@v5B?Κ,fX@VϪ?'gM@Ԫ?vFs@[l7a?IV`@Otr? @Up ?ϿT@H˒:?Ǹե@6?Y@'{?wr@`4m9?b˧2P@rS?3RC@9?oiDg8@?hr @??Wwd@N+?07@kKrz?>W@yo.?!5@pMUh?@eם g?:@mw1?. <@e+?8\g@8Ck? c@??zd@m3 ? c Sz@r2M?i/n@?9?08@lk΅3?a=2@JE?sh@76g?G 0@ϕ?&@K?&I@Ia=1?T^@r䎊q?o'=[@G#?FV@»쪸?`,@oiD?ݗ+j@6?^ Fd@5d?`G@Z?c Sy@;dZ?>WS@.4?c4@V??Q_@긥[B?`A7L@?EwUq@5?|h??@ZKC?j@E?~$@*0?עwkQ@ěS?¹M@بmqb?)r@@?D;@wkP?Ѝ2"@:?Rv@:{ 9&?˦76g@x5?!ZS@9䣃?¨c^t*@ ?mǤ@K?}A5T@3 ??>p@!~|?*")@FsB?ڹZ@f3]$?h3*@P%?q>E@z3 i,d@6@!եß`O@!,(*1@!&kɿjUp@!{P1;@!ͯR<64@!-Vws@"D(Mk@" =ć?gBo?wFz!R2a|?GNΚ98q?41K&i?+8K?lvJd8?8CkC%?l?ڐǎj?IQ2,'?`Vz]z?BBIx?&">ic^t)?nA0P?`a?rS=b?inX/V4K?T Ǐ0?6&,xl"h ?<76g?61q_p?VH9&A(?NP,?05Q.0@9?QX'?t^ NX%[[?j/]:?0 )c ?vtc5鷿?_o L/{J?bO:? ?)?:э&ƃ<`?0ȊG\??Dj~?VMT?eh*y?sպ y ?? b~m?쪸 /m?څݘ l0?[ FsB?OX6 Ra?ri4 ֜#-?>' _vȴ9??) E 򐫴?zcsl v ׈?7ɚ% _Ë?w[02"? 6P&K۠'? 0M3H,?3)k5Q.ƽ??>pP*?8{fIBZc ??'qp?6F ?lLYu?bM@%1?t>=@ȟ@?'76@-M@$?6@jj&?gwY@-Y?N3t@?6%@#S&?uMU@=Ć.? @3ti?ɯ@zv?kz]@+?ʁ@lQH?\@ qu?j@TzG?a=1@Q?rz$@:}OC?_o@o6?RCQ@2"??Dw@`,?43@ &x?M>@ 5?hۋq@ iY_? s@ s?K]@ !o?f;@ 1zN?n.@ !Bo?cŗN@ n9.BZ?%P@ G V?Y!@ !R?=1p@!t?gw@lvJ?fQ@G#?KhH@-^?!bw@a E?˒:)@GE85?l<@/#cW?pd@fzd?c^t*@ $?[l7`@۵?}At>>@ѷX?'RTa@5 D?k@n ?/Zp@fQ?K$Jb$@f?=1o@L/{J?^J82v@:m?>-b@o'/W?*o?R@d?0U2a|@w\?@BZc ?Y6@UGZ1?2m@cO? M:@!laR?k΅3@iB?ȩK@79?LA@nN&Ԁ?ud0+@@"'?A7Kƨ@ gw?jX@$~鷿??ײ@X\g*? 7@SP ,?@(o?dZ1@¤T?:@,@? 4\@\@\?ܑN;@5_õ?H@CcH?{~$@q?<wd@hJ?'j@@)i}?jF5@Sȟ@?ɯ@ qu?Wh@2I?F@W?di@U2a|?8q`@ &?p*@!E?"S 5@79?i4.۶@P (?6@n< ?#-#O@ej?>E@k΅?S&@Y >?}W@ڤ+?ud@3n?r[T@`n?Q@:?cV@XdE?ŗ@i4.?QR@cI{t?ڐ@7UqK?C,zxl@_?vȴ9X@/e?;dZ@O;dZ?Ma@PH?73@:S?v @b?7ue@?Zjj?v-@a|Q?ޅ3ti@Z?ݗ+j@KI?ܪ"'@Ƨ?۶gw@ڤ?ڷ,QI@ϿT ?ٖ($J@=cA ? VE@U '0?2 F@NX/D?өg@GߏG?/l5@ZQ_?b@wAJM+?{5*@K3?Ƴ"@bb˧?|G@AJM+,??R&V@>?)Ie@A2^?+ I^@x¤T?X6F@2 E?Ր@e%1? pϿ@ײ뿔,<쿱@ꉿGz@2%1ÿT!D(@Z>//d@+a!5@nCCf@ʁԿr 6P@`NGNΚ@%U.rڿƘa @J1zO@CyPr[U@KCW@ ӄv (@ _E7~@6z!Bo@MUi3 W@ٹE /@ :@ !@ #'=["@ FJ*ި@ ƒ)SeX@ ̥zxl"H˒:*@ (wN$Jb#@ zP ,k@ 2^X%[@ n9D@ iJA,<@!2}e%1@!P1;t@!fm,fWx@!zfC늛Կ @!A_Eൿy @!Ho:@!.SeI@!?) EV`W@" Fd?XOLnn?ᰉzN?fP3:}?j?0j+bY?a=2,% ??) BB?XdE#Dotr?ם gb87ɛ?-f27?5?|hI'??aqU? |[hA_F?LPrOYs?p*A$/? 0j+?LB??ײ&?r[T`DU?DŽ#ρ%灄?ֶZas?`l ob?VuH$ xG?5"쪹?`N6&?]IQ? (2W?t}^W'?_5Xy?mqbcsWp?qR~R|ᛑ?]q"I9Y ?^iB<ؘ?:hA_ y?@~">i?_1Ps?tj~vȴ9X? I^Iiu ?"}K?6`]x?'=["?(>go*ZF?BB1N;5?a Eb 7!?8鷿?쿱[W ?u:?LvJ#?}Wp?tc4#?BBom?-+=B?H]iv?c  0 ?|G vE?Ov_ c^J8?J ?hH f3?: N ?K3 (g?IQ m\?7ɚ$ >-b8?l oTL$6e?j+ʝ%?ʫ]>WS?{ ?7T7?\g*?x?,'?OX6?'76?&A(?o]?~Rv?0H@r?1&x?(\ ?עY5? ?0H@r?tj?޺6;%?yV?'(߹?%?a Ec?ӄw?Ѣ?#x ?)r\?+C?蔚VWj?/Y?깶o5?:?$'?Bn?NP1?6%?`V.?) ?ʫ]?[?;'j?Zc ?}Vl?d̢?X6F?ZRD?>vȴ9X?KSP ,?-B?<n.?Y?,h? ? gb?+C? Z[(? ^?]U\?u"?`G?rNQ?)^?nVX?V?eK?:}O?V8YJ?zd?NΚ,f?l&k@6ȴ9X?Otr@A c ?,1&y@cwk?0$@*0U?2I@M_?r[U@,?%o^@hM?i4/@ٮO"}?{@J=B?x- @n.?blvJ@-Ր?Pv @?@Ӯh]? @}K]?8ߤ??f@t$_Zj?ŬG@7 ?Y2 @Fkw?1+@r2M?1&x@T.۵?J82vu@m?inX/@˔@x?@-?gX:S@<B?@jUp@q9C?@76g?~@ߙË?P@,>?@h>?U䣃'g@a?+ʫ]@K?jF5@BZ@5=K? ě@hmqbc?@*0?Lx?@¦/?r 6@? =@W?e@AWh?r?@q6??FV@f:? \$_@eәo?e@4m9?//s@-_?Zp@YXbM?$tSM@}??>p@wr?|H@ oTK?8Ck@:?@ \ ?y @+`k{? 6P&@JOv`?Pr[U@k I^?IQ@s?!.I@W ?^)4@圌 ?tr@{m?C,zxl@='=["?% @e ?&f@?䛺 @Ov_?zG@`s?Mj@Xd?u%F@/v?;@U?^ N@{<ϖ?ffffff@?n~@ǖ|H?Ma=@Z?ߐW@??ޏ\(@7wd?ݐl-@[ ?܀:p@P]?Ebh@D=Fl?ɚ$(@ȅ c?L_@Q?QR@;L?ԯZp@4,Q?Ie@Dg8}?VϪ@E8\h?̍2#@Ix?;yR4@`$=?ŏ>'@1?cOI@+@jU?t}^@wkP?"`A@ ^5?}?wpy,@6?@b>iQ?|o'=@۠&?hۋq @1zO?|.3@Б}keo~=@0k}9@T65inX/@thd3@5?KZy@ZC\ѿ@~:}OʿtҲ@\2fiQY@"S -V@Цv ߟf;@!.[k@ `̿?ײ@ quha@ 6sջ-e@ O'=[;:h@ f)kᰉ'@ {*\XOLnm@ ᰉq!Ks@ { 1ί\@ s]9@ BEr\=x@ p:T ǎ@ ܱF_?) D@ FVi}@!P1@!h9Xb&q@!{ ~п{ @!q gwY@!yҝ&@!(\eәo/@!J82vu먂jF@!+˿;K@!$Jb#/s@"#cW?@"duM@&@"]xK]c@"9mbD@"G0@9fQ@"R~Б}kf@".۵ܿ.Ǹ@"ǿ'/V@"ߤ??əEv "0H@?9䣃"|ßa?o?R&W"xB0?j+C"ԕ*?њ$'"߹8R?ɯ{ "yԕ*?M"axB0?!ZS"I|ßa?Jb#ᆘ"11eәp?q"Q?ؖ2I"ZpU?ٺ4Ck'!+?۵y!/s??z!{_J?PH!|?4\!֡a?N !k?3]$D!Rs?au!9hH?HG ! h3?ѷX!b?Y` ?>?\ Ԭ1?g 6z?= ?qp bM?Y| ndoa?xF]d T'gM?*\} :э%?zd ?mǣ 3]$?y|ßa+?z@cv ?tqpqeәo?D<ϕ?l"h ԕ`V?vө*0U2?`҈p;?n~ir\=?P%4پM?G0@:?'ez$L?YJEf1.?ߤ?.۵?#k;iQlLYt?QRcOJ?dZ1t֡a?xh(&c?;K9C?F^"Sr[U?灄bzcsl?+[BE?>?*)srܱF^?CACV?<+K:?,{ Zd{?yUD<64?p+3)?7{?5@Fd?OŬ2 ?HU'(c_I?R4n#M?ՐnCy? Ri4.۶?ԀuM4?2I@?m=T}^_1?ޓ/?v6&IR?A\G|?h]k;q4J?3rT=p =?#-R*o?S?D\?tqpO4?y|ß7`,?`N7ɚ?>=Ć]yЦ?\F^"fA?z;'MB?gf?(9-*:}P?1P=Fk?:I< NP?:KC$')?7ɚ$Bul?@c^J8< (?,< ҉? 4¿\|ؘ?@x4n?~|᜿?Ë`ӣ?doa~$?#K۠!vݬ?(Xy=@q?-Y\7ɚ?3u:>wkP?9`G`V??R&Va?IbzN?nDg?A~tq?UqKnP?^"SRiY_?c򖦠Y?deۿi4/?g8}H-?7&k?֫?ؿ륤i4/?>=ćs?>'稗c^t*?<+@yY!?zVC㰳d?A(ؿ.?>lLYuj@'?<쿱ۯ:?%5~g?W>6zɯ{ ?D;:h?7ɚ$N&Ԁu? 7KƧ,k}? (x`sW?@x?kqu!S?uɯ?7?NE?4֡a@Ca@N?,@?t)<@8}H?Oag#%@% ?np@7\¹?r?@K?Y>BZ@6Fs?DUGZ2@j%?.r/@T:?Zx@7~?5~g,@r2Lf?Q֌i@̢??>q@2䎊q?oh@$5inY?h@!5_?أ/D*@p ?@!(9-?їH@ /?inX/@ Z[)?b@4@ O"}?A\@ Ѣ?~+V@ uK?ke@ lC? Fd@ YH?ߤ?@ ]cA?f@ >//t?3@ ߏG0?l[@ ,[W??R%@ 5?6e @K3?;:h@.3? 1ί%@nwpz?FsB@k}9?Z@X%[?pSe@h?; $@:)y?Z@m1z?\=x@VW?I'>@HU'(?@<64?'d@K!Z?doa@:S?tj~@ue?MJ!@ c?Wwd@Q?HG@QY6?HuO7u@9C?-_@G 0?~@?M@ N?dZ@Stj~?Jm3@3t?e ^@E?73@A_E? oTK@H1&x?E#N@|>?n.@}ke?tj~@LW?el@D">?+!Z@]9Y?@ ?|@\¹?|o@FIl?zG{@BS 5?PgS@v8YJ?& Eb@pa?rGE8@$LD|?ƝsB@cI?6@1?Z1 @_m?&@F?MjO@?lLYt@m?KH@!s?R /@Ra|Q?@>iQ?3 W@]U\S?F^"S@?!laR*@ i/n?B@7? '0@aD(M?@%|?zxl"h @?>q?ڐ@a? ͳ}@¤T?;5Xy@ty?hۋq @A?/e@m-e?1ڥ@{?rq6@jf?ᰉ'R@Ԫ?E@u"?u"@@?eں@c ?_Zjj@g?(߹9@ϿT?A!laR@D?Ⱎ8@n.?Q@ ﲪ?"S @Em\?z@c@k>WS?ha@%1?ߺ RiY`@`G?ޟj@!6?puO7@ Q ?/l5@/>'?oa@R(?آa@tɅoi?0#̎@rG?yЦv @D">?6;%o@%2?Q@ `kz^?J@1m݂?[T@M[?m=@OAs? >@Os?•f@h앿?`N@a??@7Ȋ?/^ G@ׅr(?0@?q`l o@"Zc?3 V@Hzd?u%F@n,fXɯ{@Me@qf3]@< (łU5Q@qbb̿պ@GE85)y @D{ Z[@ RiY9C@ vȴ9аJ@ 0 ,k쿱[W?@ 3$6eɚ$(@ eO۷k;<@ 3H+輿ݖR<6@ 7KƧ:S@ 29m ' @ J82vtѿ1P@ _yV@ zBC⿇i,@ )kǿ㕁$/@ pT%[[@ W>6z:@ DUZIf{@ W |hr@ kϿY!@ zxl"h @!ޓֿ&V@@!&!.I拂@!1UDR+ I^@!Ka@h3*@!r 6HL@!`,ÿSn@!oa/V@!6eۿUDR?h@!d3꠺K@!eud0+@@"Cg @"D=FVu@"0npIV@"#-#p =q@"I,<@";'bw\@"3`,@"byR4@"ee@# Ev at@#Ho?u:>/#;yR4?'j@##=?Yt[ # c ?Ӊr "/Y?ԸQ" RiY`?!Wh"y|ß?q!"^)?8YJ":?_o"wFze?ڄ?"^au?ۧڤ+"EinX/?2 E",Yt[?%1"8q`l?$/!u%F ?ɯ!K?%![0H?)y !u?% !g8}?> ;!zэ%?!laR*!a&x?P]q!Gk;1P?U䣃'g?:x?F^"Se?꧰d^#?.3sGO?J#9Pr[?y|ßas7 ܇?b:$'?Ϫ͟{ 9?1Pȴ9Xb?2a|Qv_ح?_{V&,s.?$$_[?KHӮh?̷?7ɚA7K? ٔ[K҈?J-`4K?@O4?,q T~?BZc 6wpy?FsБ}?q6^ ?EM_Wx-?}3=<64?niB?u guy(?H!laR*#^?p >Dp8f'|F?7ɚIQ?>-bt?d2T ǎ?&kȟJڹY?7ȊH27?G)^S?Xިc++%?l/0?'/W;0$?If{_ pa?o?R&WfC?^?ײt}^_?OLnmud0+@?C7 8-8Go*?=K]6?:S&VԪ?<@\Fi}?A?g6e?H#x |K[?RJmbM?]u,?ix-R~Rw?u:YJ?mBZc?q!Ks.}A?Z{ 9&?İd8?ߤfپLI?/Le@?Xy=Ԁu??glLYt\?"$tS?v*1?^ Fe)4.۶?ѷY1eә?婨hCdo?M4J?{dk? XOL?-eiK?fPb˧2?_ ?Fkw $ p?6<*"?v ׈])4?ǣ ֿu;L?@|Zq?En?q޽?) ?ڹYп?eۿNe?e0?5IUhƓ?T(? =q [?-8Go*JA c?4J?8B[ʂ?mm?Y!sպ?łU54.۵?2"@+%?zX?@28ty?6?uEwU?cHj?v?Y?!.H?/ ?h?b2"?ўՐ?MZ?֫6z?Fkv?>E?A*ީ?CcH?At>=?@NU?K2P]?T ǎk?W^ Fe?cA [?a?nVX?lEx?uMUi?xzNz?rGE85?~鷿?e 0?8?,>?XOLn?)`??$=?{?z?IQ?tn?^ N?lC?[W?cS?Ǹ?Y_a(?n.?Ok}:?;Oag#?EGG?>=ć??b?q6?: B? (wN?5*8?- ?-Ww?5*8 ?{?0#̎?~$???A7K?l&k?êy@ve ?k΅4@?tپM@rLfQn?T @76?!!Bp@n~?}ӄ@Jw?,d@k!Z?tr@큭v?D ^@h#?^@鲀,(?G#@jX%?@C\?g@oTK:?׈@hr!?nCy@j9m ?}o~=@'(?m(@_P]?\?@7~??) D@ eKHӮh?d2@ JA ?[ @ Zm?p =@ U'(c?Ov_@ 9?n>W@ .2?L_@ "D?+%@ }W? *EM@ :?=@ s?X@ ZIf?h@j")?>(@DWS@jX? Fd@Ӧ?S;wF@O"?]9@)V`?jUp@X' ?VϪ͟@FV?1@$tT?e@x@#w?J#9@9?]yЦ@%?g@Iڐ?l&k@m^?>BZ@nwp?Jm3 @Kۡ?=@B?0 7@? @+΅3?Vu@Te%1?ha@|Q?݉7KƧ@=?S#@ˏ]?R-"@*?ج2"@@Kۡ?1o@:6;%?@aGz?Է%ם@M?ӕ$/@wFz?o?R&W@~|? 4@nY!?Up @N;5?\@ |Zq?> ;@O4?L@,C?fWx-@Q6?2I@x?F?֌i/n@r ?fB@l?|Q@?ѢY6@ OBѿwkP@ F |[@ YɿŘJA c@ G T@ )< (ȣ/D)@ :~"ѿʓ򐫴N@ L oTK̫`kz^@ ^;5XΔVWj@ p٩j+C@ 'RT&kȟ@ z!BT6@ XD*ڶn~@ S|ON&Ԁu@ a!Bpej@ s&#x @ Ov_ٿ4m@ FSP -@ z@>B[@ ÈeO¤T@ W}W㠥&@ *") ɯ{@ wE@! ]yѿp:~@!)b䬯0@!MR~RwB@!g=[!eU@!"&r惥;K@! =p;'j@@!sպC]@!Nx@~@"D;dZ@"ײy|@":ިv ׈@"Uq!K{z@"qWhHQ@"CA@" k~s@"KZπ3r@"&a@"a=2[W>6z@# [ @#[-MF@#;wFTw[@"l!-ZpT@"=?*cO#"?[ #mQ.Ƽ?ՌS$#TxB0?ֺI< #;q ?p*#"~m?)^# pa?9XbM"EwUq?`:"CA?܄1P"?ݧd"Fs?ȴ9Xb"ɯ{?n"q:S?VW"W-#N?MUh"=޽? gb"$Ҳ?(F" 5_õ?u:>!EwUq?=b!A(?sջ!+@y?O"}!lvJ?bw\!ɚ$?\ı!m|o'=?lvJ!SQ?fWx-!8\ ? :!*") ?l-!Б}k?x? R~?oTK: =? tj~?n .?,d }%!?inX/E b`?+ G?`G ,_?v ohی?Up k΅3?͉.'(b?EM_&k?+@yHU'(c?2 Eeәo?,X?2m,zxl?uy(k}9?^_04}^_1?9&A) 7"?qVHXdE#?*0U2aEv?ﲪU\(?ӄvcA ?M b?3[?vݬuGZ1?~< >?#n.3g8}?W$Jb$?#cy|?RiY_+?Q`Fd?>'!'Jw?ZR3?䣃'gMX?FVI{{ 1?mqbcB]yЦ?ިc^vaf?ʶ&=[?$LD|puO?)mɲ,(?W&{ 9?}2U!.?rS*\?kz]e?DR?gd?)IelT6?4m9.p&?{5*8 ue?!-wT`d?wUqKl&k?󾠺KLD|0?ߏG0a?g?.}At:1 ?JM}?\лnw3:}?6' ?LWxK?tIŜ ?dek?Jm3 B.p&?WTK3?$LD|1?>p?BT~?^t)<sպ?v_ح7HH?ѷiJA?NeFI?'(7?*8AZS?o~ ?حVvF?- 2"@?nOc-#O?,QH ?EGG _@?]u n.3?r[T jo?R&?~mH kP?{ 1ί% Կ?^"S M>lLY?9} ?'2P] >E?&Y z&?,<쿱  s?1th x>-?2R u?.< .?%;Kl5?ŬG{?+sB?[0HT:? ԕ+쿱[W?ߏG0@D(M?Y22m?HJ&?ܜM=?2a|Ŭ?=x@&İ?wr(?0#̎HjܱF?e@yԹhH?P*_&k?iM?!D(Mp8?.r/\g*?9C1ڥ?OAs:X?nX/E<ϕ?-v5Nʖ?BE?N;5Xv4K?X:SLW?^t)<q?XgS?05Q.ǿkv?9~($ uɯ?Bom~=?5͉/e1?>ߤ?@98?Fdtm?MuO7vO4?SR~R/ej?X앿El"h ?\ Bs?]!57ޓ?_&kɿ);?yVհ5Q/?A*ީsMjO?T:憿wd:?_ZjjJA c?kC,zm8?u;L++?| 7"$D?7mH? ߿9Y ?<`;?D?/^ F?@?9C?@x?sպ?ce?hM?wpy?Z[(?=?_ôr?5?9m ?7T?vȴ9X?^ N?9XbN?UDR?&? sG?GG#? [?D*0?l-?Jİ? D"?MuO7v?`V.?MZ?GX?Jm3 ?O7u?GE84?`V?BE?{ 9?BB?ݷk;=?J\?ג ?SY2?#?| >?pP?ZS?ĻM?5?|O?~mH?LA?xvF?1P@3g?U5Q/@a?(CP@2{5? 4\@Y!?(@$e?- @ѷ?>-b8@Dg8}?m=@P3?X/^ G@6_?BFIm@k}?. <@$Z1?\|ؘ@J82vu? 7!=@q"? @Bo?Q@#wk?~$@Z?$5i@=9Y? ֶ[@ $ҲM?!@y}?`A7L@*1?μS;w@Ć-?>P3@np&?4.۵@ %F L?hJ@ \=x?ϿT @ <ϕ?4J@ <ϕ?sBZ@ )ڐ?}H@ <_rB¤@ OzNzV.]\@ W7T ǎ@ \ oTK'/V@ h앿EVϪ͟@ v,<+@jU@ B1Κ,fX@ j|ᛐ@ Ivf@ nhYr@ r P@ k}: '/@ ꁘ[[@ ݴ%!iv@ V3ܾ@ `8R}@ ҿ~mH@!% ]U\S@!$yf3]%@!.Ѣ<`@!Gn Z[)@!]^;yR4@!jLBp&@!vپLI9m @!ȊGAt>=@!:э&ud0+@@!f戏`@!+jgA [@!ᛐ؃4D@!R<6SP -@" 7T5_ô@"GեeU.@"fϪ͟鸥[BF@"|Q,'76@"f`kz^@"ǣ 0H@r@"Õ$ݿo5J@"֢pOIl-@"׈(@#t>BZc@#/@CA0P@#:FsBzG@#7p+&A(@#-Y6@#$پ+@#(>?qxB0# k?סLA#zH?<#N&Ԁ?ҝ&#@x?$tSM#kP{?LWx#Q(o?rz$#8Q?ޗ9m #>lLYu?߹o5#ḍ?m?>"y?z9"y+?ﲪ"fffff?~|"@\?u"[T?0 ("gwd?㻘A"M\?Ebh"2Y?[BE"jܱF?VWiJ!Ր?nY!!-?c^J82!uO7u?5~!OB?mHQ!ϕ?Se!w@?s-!\ >?ߏG0!AR~R?u!R!&-?nh! ?t>=ć @98?<* 9.?oiDg8 ~($ ?m iQY?f: 9m ?Gz gCA?ZqxB Ka?Z /[W>?K ͳ A [?ҝ%@98?7ɚ$4C?x&?wFzHK?JA c ?<`a Ec?'j@&?>=ćg ?,/Ŭ?csl&ltc4?kP|-V?`A7=?FsK҈?<쿱[ϕ?qp١vݬ?[6?G|,k~?޽o ?Xe+6Ov_?ߤ?r\=x?#ᆘ5¬2"?+p:?p&N+?M_Ʌoi?x^ڢ]y?8\gf?|Q?P*v ?Ѣ?m%[[?sp3:}?1&1Q֌?SeXON?gbd?wkQ*?m\!!Bp? <`P?KZC7 ??> |Zq?C灃͉/?haR?eArLfQn?CP{nwpz??g̢a?-M@$T$_Zj?>-bE l?bE 1A_E?W #?ej S$?qxB1 7\¹?27 ި?S& ?9C h3)?'RT` .< ?th?K3qp?w1mU=?pZpUu"?n.2!Bo?p0#̎^ygt?u gT6?~1ڥ?p ,]N?7ɛ?pϿ!laR*o?-eJA ?Y 2R?ƈzda?4DY!?q"҈p:?;L?1zNbw?T6UDR??v ׈zcsl?łU؃4?ԊԿ3rT?FsB{ 1ί?*czv?8}H@c^?R~Rwzs-?^ s ?ڐrGE8?JM++W#d?l?ᰉ'͞%?hۋБ}ke?Nӄv?>'_?n~FI?=1pʫ]?`]x?t}2f?`Hлnw?*)py,?uhM?/l59m ?oБ}ke? ǎjU5Q? ҿl!-w?Y򺝿`A7K?r(WiJ?a=1X6F?C`O1&y?^ .?wYË`k?HjݿCc?Gſ0?L#?pTE?ֶZIZ?ǸզA!laR?[BE9D?ȟ@Q?LfQn?;:hA?g_?1&x?}At??&A(?KƧ?Ie?u%?O M;?L?$tSM?=p ?s?@4n?b#ᆘ5?y*\}?Jb#ᆘ?p =q?3zN?i̷D?&,s-?N;6?xW)?(n?i4?M@$>? ^?(߹?L?RK?gd?*1?c^t)?u"?\ y?d2?Sh]k???KƧ?sWp?A?g?P]q?(߹8?6ZIf?iQX?9o5?@Y!?ud0+@?b?~tq??wd9?%?i4.۶?!7T7?Yjj%?2I?G@? G|?5yh?ؘ?Ր@~$t?5@-?G#@27?%@?+ʬ?{5*8 @ڹZ?b9m @6Fs?EU5@%ם ?3@Կ ?kz]@A!la?jܱF@(o?zN@wk;@پLI(?; @ ׈? b@;¹M?ȊG@iGNΚ?/Y@Y?Bom@s?B @?겕ᰊ@TuL?P3:~@ >l?郺4Ck@3Y2?Q@fA?H@q@&?R<6@̚?9.@Q_?"&@"?TɅoi@H+?~+U@m"? x>@yh?xW)@sWq?9m @>lLY?B؃4@W}?uy(@If'?C@u"0?eU@лnw?.H@ZS?_Zjj@j?C]@ np&?ٜߤ@@2n?`,@[m]?(@\лn?Pܜ@,Q?Ԗ\л@Z?2 E@ 5_õ?ѿT Ǐ@ #7!E@ + Jn`sW@ \ >@ 얿jF@ fK@ IK3z@ ŬG@ O4v@!+ JQQ@! $Ύ 4Y@!xB0٩T@!RJ˿f{_J@!.*") Ck@!?*ZFsnh@!L #ڵh@!McA W&@!J¹M@!R74zxl"h @!fБ}kfa@!~A c E84֡@!dͿ2m@!j~#-V@!B9C' @!m\Q_p@!)Ie{ 9@! M;o5I@!ƕf@!GX|O"@!ue 7!@!,P@"o{5*8@""Jm ܇Tw@"Ev ׈@"z$LD|Կ @"g lu%@"`A7Y@#sWqDUG@#bꯢZp@#$r2Mb˧2P@#2myg@#MW7ޔ@#V+jg$Jb#@#od+@#s٩T!TuK@#a:S/@#n}Atn.3@#|0?GNΚ$)r\?@c^J$LfQn?!laR*o#eO?J!B#lLYt?r[T#\¹N?ߗHH#:э%?]k;=#>-b9?`,#eQ.ƽ?~6;#Ka? /^ #0,'7?ߤ@#o5J?)^"Q?㵲K"2^?A c S"x>-?˧2P]"q ?UGZ1"uO7?ѷY"ul?eәo/"Z B?쿱[W?"?T Ǐ?r ě"$3?+" jj%?{!$5inY?CA0!W?遘R!`]x?=ć D? 8Y?gߏG ?u! {5*?XbM iwr(?Ѣ M>'!?"S 5 0`?\лnw 1? /wFz?r[U ? ~$t?BPr[Eo]?z2_ 4\?kvP]?;yRm ֶ? K_?W>6z&76g?EbsG?Yᰊ?"쪹x.?.]\-*EN?},J%|?m\'=[?eh\R-?˧2P]v?0p`Y!?*0%H?xW*Q?[TW?au*8?}H:'(b?}ke ?ܜM? =p?:э%?bb˧2V?7TvL?vȴ9X;T^?uym?@\N?EM_3)?q`l oLT6?%6z?fPc9?B28\g?[K?K۠&Ǹե?y8JzN?fIyP?{?g?W^ Fe^?KCWbY5?ZxE8\h?;%o^(G ?d2LfQn?Dwr?h,fW?_yY ?`d8Ft?")Wx-8?P]n?zN{d7?$/G V?(F4-1z?OAs t}^?``G:)z?M 9C?]k;=_ô?[($HA_F? 4\ j%?,]O(?J#9??ʖ]P? E@x?&c#?n?!Krm݂v?zҝ&S#?ɥe_Zjj?[ ^GX?74m??!R<hI?A [%|p?%i4/rLP?K ͳ 쪸[?I< ( hmqbc? gw `V. ?q AR?k;< mu?}A5T k~($?SP %?&k 7?%o] &fffff?Iڐ A [?O3r +a?H T?i;$_[?LpT?[a+?i?) |?xB0]ce?hKvݬ?+U)/n?]sLA?0U2a|BB??|hy|?]xd6e?ʁ"?LłU%[BE?X%[[ޓ?`h36_ح?gwYl&k?l&k/-V?q6 ?vi(]k;?~\N<G?vj$k?yb?v6+ J?~$t7?x4!-w2?w`Hr ?|Zqx`:?Ć-?R\¹N?IQa2^?İݿ[?xﲫ?ցԪ)iu ?#-t4?VL/s?[ߏG0@|?IV`$tS?5?h#?fJ?Ϳ% ?ěTß`O?Րl oTK?u"\|ؘ?nX%[[?BC[W}?Ev ^t)B[oiDg8?K#c?TɅoiLnm?SCA0P?N+Fs?9&A)IHU?#'gM?^Y5;O?)?h3?G?gS?w\?Ȗ?Ŷv ?fB?T!D(?q6?pϿT?ؙ?5yh?ʁ?$5inX?XdE#?3 ?F4AJ?r 6?7~+? 8C?,{ Z\? ěT?\g*?@98q?Y}?=p =?콐W?8{0?RC?49XbN?W?-w1?VD?"??T~M?a?UDR?h?PH?\Hjܱ?>BZc?_Zjj??]+j?Ӯh]?\g*? (x?a2^?Q?G 0?1 ?Ώ ??ײ?N?߹8R? 'RTa?sWq?7%ם?1 ?d%1?+@Crq6?ʫ]@SP -? I@hM?be+@4??@yP?f3]@䣃'?9Y@uMUi?^t)@r?#w@y.< ?w@ e?S@?5yh@lC?ߤ?@zd?yR4@7ue?7!=@P*?o9@J{{?_*c@ƃ<`?LD|1@ _"?@ RiY?лnwp@ y|ßa?P%@ K?b@ g_?tj@ /w?ma(9@ Q_p?R-"@ Sn?@ TK:?3rT@ &I!@[!Z?.Ǹ@np&?2f?ag#$6@ ?r @F4?U.r@) D?@TV. ?@@?kz]z@QQ?%;:@ᓳ?.S@3)?9-*E@. ? Z[)@W`?nY!@bh?.2X@py,?sպ@L_?[BE@{?T ǎ@L܇Tw?ŬGG@qxB0?;:h@?ܕl oTL@`sW?3]$D@`sW?*cP@Y6?ؕBB@ '76?< #@ !R?+@ :C\?OLnm@ W_o?{{@ x- ?P8@ @x?9@ q"?#x @ ڰȊG?nY!@ `O? Ev@!9? ֶZ@!%1?p:~@!ڐ?K]cA@!lWS@!ӄw=@!aӆDR?g@!?|h&,s-@!Ϫ͟1&x@! ֶ[);D@!0O @!X:Sݝ^J82v@!wd:պ@!)sѿ/l5@!thֿt}^@!̥zxl"Tw[0@!Jx?@!ξߤ?,'7@!ڂ},|]9@!r(&IR@!VES;wF@!٩Q֌i/@!B,?@" NB0 @".3d>@"-t7~@"Hgyg@"i*0U2a!~|@" $ q%ם @"mH#wk@#+jgqiC@#W gb I^5@#p8\gq @#sݗ+k{z@#s4lC@#vپL׿]q"@#L{@#-e@#O"}>-b8@#+U@#Ľ Ritqq@#0+@j?/ej$g~mH?Z1'$M%R?߂ӄv$2M?T:$:S?mq#a(9?x#? A!la#Go*ZG?R~#{ 1ί?'/V#(?㵝yh#wM?B؃4#\zxl"?Κ,fX#Auy(?Y}#&fffff?0# +%?mqbb";dZ?׈"ԀuM?}ke"rGE?tj"[?f'"27?9."fYJ?钎 4"J*?{5*".ߤ??9" A!l?H!$tS?o.!+%?W !&k?엍O;d!?7~!)Ie??!jȊG? (!NjX?a E!2v?Q!1?|o'=\ 9Y ?پM ܷC?6&,s. $=?qk 'gM?QH 0?I< j? Zq MHQ?ZFsB 0l-?_ô ?8\^?B1?<#xW ?sw[0>LX?ZFsCJb#?҈pԕ*?2IAs?m݂viv?b?A7Kƨ(>?%ם #Nw?ʖ8\g?xFv2I?҈p;;S?DUGZ2L8?Xy=ڐ? Q ?nX/DM>lLY?*0Ubb˧?0X:T&,s.?npA_E?^BZc ?'(b"0 ?U䣃'ghK?-*ENy ?Rmty?o1 8? sG:?9-*Eʁ?e+a{R}A?np>=Ć?+@yłU6?,mH?nV~g,?t[ Xs*?(\)[u%?)sБ!R? 5~?SMj 6P?#yپLI?#Y䣃'?%1*8 ?tj~:>/0?IHU'S;w?_Zjj#?O7ue /?C,zxl# >l?Ԫ*?}!.H0?d'gM|z9?M++,cA \?-w1˒:)?gYJ?VXUL_?-`ʁ?<64}2f?)r\_0X?XOLnz?w[0Hk`kz^?l!-w8}H?^*") Y?HuO7uѢY?*1{hۋq?P3:~Cᆘ5?M7?BE!-w1?j~J82vu?ݍyЦv,sG?B1 =p?OŬ2?dqjP?>q?FT ǎ?s ŗNe? ҉ 2a|?7ȊH @a?# d?"HG At>=?5IO ͳ|?kP| RܱF^?MUh &?as "?L9 ǮzH?T~M ]\?qbb˧ v_ح?j@!laR?ZpT?D">(\?9Uv?W}7!=?VϪFVI? 7"_E? [=?,=)y?- qv8{0?=p =d?Lnm84֡b?Zjj& 1ί%?hS;wG>'!W?uKۡ٩T!?@4nJ6&?!R<pP?Ev ]4X!?hƒ?Цv J#9?߮@ I^?]k;j\|ؙ?Se̷D?FiN?Ԫ9-*? S$fFV?gDU?u"T6?CVI'??#xJ8C?!5_ʖ\?sBZIa=1?Wx-8z$LD|?jj{?ʖ` qu?*0S?W HK?VWi4,Q?Ր]r?-"˿ ?76f]r?NΚ,f!5`?x732a|Q?IVPgT?BeU.r? ܇TwfŗNf?7 ܇T\]ce?>7ޓ[y?lLYu9Y ?1:Ŀ9?@//t.Se?Q=?_@2^?:p RiY`?ygt+U?2"@th?®9Cǎj?c4Кu%F ?ܜM?eں?|QD">?JEd7?+?>J!?vtc5?7T7?CA?*1?y k~?{?Z'(b?С7T7?3mǤ?Ԟu? e@?؍d>?앿Ex?ܗ{?X%[?VWiJ?nwpz?W&?_?R-"?)y?IHU'?{ 1ί?9&A)?i;yS?+?A0P?;wF{?D?]r/Z?{ 1ί?GXd??{e@y?j? x?Jb#?$'?j@??m?/D)?rQ? '?bh4?0U2a|?TE?fWx?N ?J?Otr?f?dqj?`"&r??Ҳ?7!=?VC?4\?P]?n>W?3]$E?B @k?ty@$_Z?NzVC@0@98?a@B؄?{ 1ί@8- ?7T7@ݬ?lvJ@3PH?PgS@ʌL_?lvK@??tr@0OY?inX/@>BZ?$/@ ?M%@¤T?#@}H? B @1&?nD@ JE?GO@ \л?T^@ ;:h?!͉@ +@jU?$=@ :v?P@ A?8Ck@ 9-*E?wY@ U\R?OQD@ $'? qv@ :)z?O"}@ -*EN?w< @ ?ZFsB@x ?;K@(n?b@n?o~=@^?z9@1iB?b@o6?̢b@*o?R?uO7u@앿?U'!Wi@)y?@D(M@R,'?. <@|o'=?VWi@7KƧ? @KI?.3@A\?UDR@ts?IV@ôr?!Bo@h ԕ?ѷY@:?<@ \?_@a$/?|Zq@8J?~"@1޽?_IW@m0j+?:s-@K?d@m3 A?i}@!(9-?~6@'gM3?3@6?`G@zd?̷@iY_?oiDg8@Fd?A(o@|ؘ?6@&q?ק&@mu?[l@8y=c?JL_@r7Ȋ?Xe,@o?l@9m ?&A)@uy(?:w@D~鷿?c Sy@zQ_?Bzcsl@'=[?!-w1@zd?@l@6ȴ9X?n/@lYt[?#9@n?i;y@׏?H@ L_?X%[@>7ޓ?OIHV@k΅3?6&@5IP?LPr@l?th@!ɯ?rq6@!$w[0?̸' @!D ^?ɓ ҉@!]b?әo.@!oO M?i;yR@!{ߏG0@?'RT`@!$')?C@!V`?4Ck'@!K?=Ć-@!4\Jm3@!sպ@x@!ڼpd̸ؘ@!@/w@!XNzVC@!= |[@!bɏ>'@!F '/@!iDg8Ы ~@" bDUGZ@"")ל8J@!=ڪcI{@!A"}ӄ@!\|ؘ%|o@!f?@!z@d[6@!'RTae+@!rq6>P3@!5łU5@"uMU`V.@"Wx-8G@"X !Bo@"$`kz`kz^@"3 0j+ZIf{@"Auy(0#@"JYпm@"eNe4.۵@"i;yS@"쿱[W6;%p@"6a=1@#<*"Yt[ @#Ys@#_ô@#͉.˿//t@#%|p؃4C@#F4KHӮ@#4nm@#b64K@#Hjݿ},{ Z@#m3 Aȿ&V?@# BDUG@$KHӮ뭁v@$- $ ?RT`d$nP?J$5?yP$}DUGZ? '/$b>iQ?#-#$G%?,fWx$+e@y?㻭 $$]x?JA c #o]?ם gb#A c ?d2m#,fX?ܜM# >l?zVC#}W?g#ka@?獎[#PW?sh#4M:?n#n~?#9":?騬\ "sWq?-8Go*Z"pd?{"OLnm?3th"yg?뵝yh"oLPr?6"SeO?v "7%?5;Oag"g ?NP1!1P?1ί%!?SeX!E?*\|ؙ!LW?ud0!q ?q!Ks!nX?KZy!QiB?+!4D?ÿrq6!ߏG?^ t t}^?9D RJ?tҲ 7?+ sl&l?灃d /Y? -  h*")?Y+ K~$?Sy .?>?b l oT?hۋqJ?7AJM+,Q?  ^3?;:h @a?+ I "Ǹզ? |Z E?Zc P1 N?9m ~|?"&D0?>ʫ\VI?lA!ɿb?Ev vJ#?1;.Ov?Snl?yg$_Zj?I2 Ei/n?t!-w2XzNz?7 1ί%?ȴ9XbN ?\=xgߏ?"?tҳ?c hƒ?QX'Ms?+KrzAi?RܱF^ѷ?y2ċ[-M?K1.?o~H$Jb? yЦv!ı?laR*o?9䣃fB?D2Wd8?is?w}W?33333QSy?R&V-UhƓ?D!5`?|ᛐ쪸?w1Ra?ܱF^"m\?ג c[l?/^ Gg*?]\?dn>W?CB̸?< حV?P]BY?3H+k@jU?iQX(iJ?h3))?) ?l[W?$?gn$5inY?iY_aDoa?_Ë5inX?) e?}\?@/3r?h3.r?2^S򐫴N?Y=?/sZQ_?pa ק&?v5C O3r?'|E˼, 'j@?jOv` V3?앿 5D?7 D">?ѢY< ?*0U%[[?f'|F#y?mRJ;5X?7ޔY?!<{ $?Q'2P]?jnp&a(9?{ 1ί%+;K?q1*?|G:`?~mH?\лo7ޓ?{K ?\лnB!Bo?{5T6?K]y ?zcslrq6?1;.ߤ?? mWw?r[T&v ?jQu%F ?pO4ڹZ?unD?zd!.?Yɿ2LfQ?B¤IV?K]dC?NPƿ݂v?D=F >lLY?&a(9.lP3?A_E?# =p?8R}?hb?ɟo~=?y?>W?7 ܇U?nh?x?+ ?a5?ܦ/e?C?fP?D)?g?Bzcsl?y?V. ?z?icHj?6?fł?H?^ Fd?{?Y?L?g?n?$_[?H?S;w?p ?"'??T6?|o'=\?'/W?p+? ?޽?Y?/??[ ?ƒ)?g?U5Q?唯O ??^z9??A_E??6e ? ͳ}?i?) ? gb?'(?;dZ?ej?Jw?=?]yЦv@n?qiB@ /?[ʖ]@i9Y ?B0 @W)?)T!D(@v-?>B@? ٔ[@ߟf?j򐫴@fa(9.?K:@思IQ? L/{@q6?V. @+?,]@u;L?F@GE85?B@ oO M?6@ 쐁??"0@ jUp ?-@ ^?G@ d=?g@ G#?HL@ E.r0?xF]d@ 6?a'R@ ϕ?Ev @ lA!?) D @ B؃? Nʗ@a\?ۋq @ގ`sX?\N@^J?.@{?/ @+bw]?m8Y@iE?GOIH@U'(c?H@ڹ?d0+@@" ?T`d@cM? ě@x??zG@?m@6?wkP@hg?qbb˧@#x ?w1@wr(?@ohی?r2Lf@[ ?N;6@T}^_1?w+@_?SZ@;K?.9C@D5inX? f'@~ʫ\?ty@a Ec?au@-V?@,[?l{@fi-?CcHk@0?Ҳ@eU?䎊qj@*?XbM@doa?L/{@!~|?U'(b@"?"Y5@ a@?^ t@Jd7?ىr@S&?Ck&@VWi?:w@r[U?h%1@,D"?B @iQX(?9@^J82? ֶ[@څݘ?Z1@ C?h]k<@?+ʬ? I^5@wk;pu@tk&j?:э%@pϿ?u%@CB? (w@-#N?E@ ?X%[[@MWw?4Ck'@~J82vu??>@iY_?酇ݗ@??#Nv@! ?Ŭ@!f?X' @!^? |[@!M3H,?7ޓ@!P?I@!-e鿂CP@"2P]y@"-{ 7T6@"Aaea@"L7`]y2 E@">jXň`@"9b}ɼiu@"N0OYj@"f: @"t/csl&l@"oLPrט@@"aHke@"_IHVݟf;@"cİݿG@"\?^"@"H6e6;%p@"=\jj%@"D$_Zj޽@"VQm݃RC@"s}3㮧G@"y|ß(n@"@i4.@"`sXcA [@"$A c @" )k@"!5裭^@"%1ÿpT@"%ם !D(M@" ٔ[ty@#gbѿ`,@#c+U޿t}^_@# tj@$ SyU5Q/@$ / L/{J#@#/ekHo~@#;Oag2P]@#~Vu{z@#eU.s{@# Y2@#8\gaR*o?S@$T# k@$2vtc?8Cl$'!W?LW$rS?7ue$#? sG$r\=x?Wx-8G$D?ł$u)4?tqp$Yjj%?f:$=+j?2"$!xB0?&A($Ew?磘 #?-V#͡"?赲K#x-8Go?=p =#K pd?x 7! ɰ?th V`W?ͳ| uy(?! -#O?YUqK e? 6?c^t) B?*0U 0?< # 8K?, wֶZ?Ho Ye?z]y ;hH? >l ?>?Jm3 ?Hx?ӄvA [?|O"Fsջ?҈p k?")nk}?SeXO?8 RB ?𴬯1ߏG0?+^ Fe?FshH?Ck\#-#?r'(doa?{5*8[?[BE/?sպd">j?(F4&f?UDR?hjܱF?f:2I?*EMk҈?앿E-Z?%2F?.h]k<#̍?X4Cqڤ?6;%o333333?pd?jfBQSy?_ônO?dZtj~?k&j? 2IUQ֌i/?0 7#?WS)Ie?}KZkP?G{`sX? D [W?ƝsB ?Zjj $ p?J#9hG?n9.'!?HU'(c uMU?ȟ@¹M?2 FtT?ôr2!q?8K։f?p&#x ? /G(b?'RT`B?FkwQ?$Jb#[BE?Il-g7??T Ǐ1 ?fA%1?< _o?IVϕ?Ev 73?RiY_ ;D=?iQY GX? 9 Np:~?KCW jj&?I^5?} 2^? TZ?{ 1ί g*?n )4?wFze K]c?7Kƨ H~?h39.??TA5Tu? r ԀuM?"pO4V2?9-*E},?L/{J#U"0?]r/ZD">?nX/DOB[CF]c?nwpzc^J8?ɚ$(=W?؎6F,?%10T? 6PWw?* :? gwMuO7v?a Ecy?4CkqxB?MjD?Ë`R<6?"?H?-WwJA c?6n~l!-?@DO M?IE??R /T;?m3 A!e?;'Go*ZG?j4r2M?~mHcI{t? \F^"?+U޿T`d?5Ke%? ٔ?ײ?R}A!~|? '/ͩ>!? LD|0ӿ^?!͉-?T]=D">?xWa?9`G؃4C?Yr*d?cVFV?zXa?Eb ٔ[?`kzڐ?v!.I1;.^?q6uy?9m ׿l-?1;wkP?gTyQ?+ V?D|0y2?2 Eӄv?ۿڬ2"@? (ֆYJ?u:>k&i?TɅ̮SeX?tč:w?YѷX?qu" ěT?oTK:?s?If{_??B?/Y?"&r?]9?5?t??i9Y ?#S&?3,?)K?`]x?l!-w?xzNz? ǎk? ҉?&A(?UDR??IE?6f?a?!.?QY6@*͞&?vȴ9@}ke? oTK@I'RTa?m\@u:>?Y2@0$?6@B ?߹8@fWx?MUh@pϿ?,Q@P%?k΅3@^ s?So~=@)i}?;,]@O ?.Se@4m?e@W)?Lx?@ GJw?EU5@ "?T*1@ F4AJ?fI<@ Ō /?[y@ @28?H*")@ =?7rG@  ?%i4/@ $tS??>q@ ]\?F@ a@N?1P@ ?=Fk@L_?e@CV?{ @Zu%F ?M_Ë@h?)> @8' ?Jw@x ?1;@L?@y?Vu@=?sLA@u'!Wi?XD*@M@$>?= RiY@I^5??"SP@4s? (@uf?d2n@LD|0?Ǹ@ѷY?s-@+?^5?|@ p?'/V@ qv?$6e@Ίqi?e+@P3:?&@A_E?Կ @پL?l oTK@Ħ">j?W@u%F ?'(b@E}ӄ?;K@/0@0 ?@6@/mr?`@sPH?*")@qp?`kz@9m ?Rp:@3"?7~@nzG?@S?Л*@ᓳ?l5@,@a?A@?F?Q_@-Y?=Ć.@d*0?`V. @W}?- qv@4?J#9@ T!D(?jܱF@?Ë?*0@u?`@:)z?)y @g#$6?gwZ@Fze?z9@M?>?SP ,l@D(M? k~@Q?mt@>'!? gb@?'RT@0U2a|?I'>E@]'=["?J!@jf?//t@!"XOLnn?"?@!2-"?@!Bi}?%1@!Qi;yS?U5Q/@!^BZc ?԰ȊG@!irGE8??ҝ@!s|?ѷX@!~K?C,@!JA ?όT6@!4AJ?w[0@!8 ?ɔa=2@!Y?`l oT@!eәo?,'77@!&? @!x-8Go?>BZc@!k~(?sP@"``#cV@"?-Vv@"_yVnX/D@"yM@"_@ :@"!R@"^ NâwkQ@"O"}Ƿ-#N@"}HrGE85@"<*ÿҔVWj@"vݭ>'!W@"v1.앿@"q.H觿ͳ|@"t333333@"LPr=Ć-@"%F Lhb@" @"q6@"]cf(b@"э%S3@"豚A_F}2f@"5;Oau@#t}RCQ@#;:hyV@#)LD|0ӿ䎊@#0C;yR5@#(mqbIOQ@# h3ƿ ě@#*ZFsCDR?g@#=f'|E̿LW@#Q+Y@#hԿz9`@#|8JPH@#toa;K@#{G#пKZ@#n_ôr@#D)&IQ@#z$UGZ1@#|ßa B@#k΅wFz@$ ߿4m9@$??"`B%J{?l"h ԕ%.'!W?&V@%ܱF^?m$Б}kf?$ڲ{?2P]$VX?3)k$B ?rq6$RK?JM++$ir?,<$M[?]9$0?>q?`A7L$/ek?l5#KƧ?#x #ڒS&?x #uO7v?`N#?0H@#3?tj#gY?/Y#I6?_o#,łU?#? I"{m?}2"1L?>"?@//t"o?R&?~($ x"|7ޔ?<ϖ"_q!Ks?zNz"A{ 9?5yh"$5inX?qiB"Ԫ? $ !>-b?$')!6;%?$ p!D">?^"!&k?^)!q*ީ?҈p:!S")? !5 ^?D">j!)Ie?+!FIm?>'!W!6?+!fDR?g?X%[\!G#d?f'!)oiD?U\R.! ]9?bR ٔ[? gw _o ?7!< nV?QCrq E?*) r{5?p:~ SZ?D 4)?doa ?P_??6?3qR?әo/3#?m.r?G)^?w,yC?Y:ŗ?.ro'=\?vj{ ?2W@~?`d8@ﲪ?,D(M?:hAh4?fA ?D ^??LPr˼+?kF4AƝsB?H@qZ1?xH5~g?Qb?O M"S ?>puJA ?f:I?) ?fP G|?ueʁ?&k)s?cOJJ`V?-B =B?S`V?y (g ?KCWJv5C?|0 RiY_?>ʫ\y8J?c 9C?H Krz?jJ82vt?r 6Ev ?,]OLA?pEwUqb&IR?v WTGG?KۡybE?[ &?eU.s ^?{0$ЫNP? '/@?vJ#'(?w\>p?1;.{?ϕ (F?rNQ-#N?@4n8?>ߤ?qH?M>!k}?_ ~6?#'=["?}'=["?wY7?N;6T@x?:}OrGE9?:э%K^?IO^#?ȟ@앿?NU?R&W?w1?`]?VZIQ֌?ZRD x>?0$G%?8 =<64? ?>pο3H+?ݗ+k)T!D(?u%j?RT`egW ?7T7J!B?ʖoa?9ŬG?w\¹7ޓ?vU\R.fI?xPr[?|ؘͿ@~?,'7g??Ҟ.ƼS?VWi`V. ?]x8Q?IQEb?ej?%|p ?? M: ?O MX앿E?\(?>p? i;ygߏG? e@̿8 ??>q(M?/D)g?^ FdbR?]Y >WhI?Wx-8G9_?P%ǿ1&x?FپL׿U\R.?>Eʿtr?76fѵIHU?-٩T"u%F?+jտ$/?4֡a忰p:~?E?$tSM?bw?m\?Q?]x?,]O?˧ڤ+?xl"h ?5~?mt?S#?xa Ec?f3]?rϕ?ZRD?Z'!?2m@ި? ҉@6&-?䎊r@ﲫ?*ި@l)r\?@ߤ@?27@EhJ? @O;d?m3 A@uy(?ôr@?@\$_[?KI@FI?cOJ@ d p?fA@ m?F]cf@ v?) ? A!la@ v%?#x @ ?߹8R@ [Կ ?d,@ ]9?< @ QFV?9m @ sG?X:S@=v?b@3]$E?@ $ q@1$5in?앿@nY?!D(N@\ߤ@?\@:э&?zG@O"}?pZx@74?I< (@>쿱[W?&,s-@>?wr@ B?9.<@K?ʁ@"T~?`,@Q+?3 A!@|?jj%@Ջ?n@E?1&@RD">?CA0@s?zҝ&@sPH?jQ@GZ1?BZc@L?Em\@;y?AJM+@}1o?ŗN@ÐB¤?֌i/o@~m?~@@IQ?:)y@??^X@0j+?hƒ@ '0?u!@X:S?5@_I?LD|0@?z?Q$Jb#@*8?\л@Op@C?m3 A@y|o'?K]cA@ ?($J@ۋq ?9@ `G?XdE@Y0 )??b@#?Կ @yQ?Tw[0@ ?﵈h@O]U?ߏG0@:@?ײ?;'j@@Òs?@gw?}At>>@&kv?M3H+@S2?>lLYt@s ҉?3 V@ 6P?i4@*ZFs?\ı@ôr?r2M@ &?!<@ &07?ZqxB@ =Ć@!{?IOQD@!Cc?۽v@!͉?ɯ@!iu?Y`@!`V?B¤T@!.]\?ҥP@!zVC?DUGZ2@!ud0+A?9.@!Ie?;'j@!*0?T:@"d9?ǧ&@"5?{m@"#6@"T^cOI@"ǸզVe@"ĒyB1@";Oag#q@"ʁܨF4@"먂jݠQCrq@#>WTY5;Oa@#U.rڿ#̍2@#% gA c @#44Ⓑ@#<ygL@#GNΚ,x^@#S{ 2W>6z@#`OX*@#mɰ@#fPKZ@#0@#}7!=燨M@#aQRWhI@#njX@#Ʌoi*)t@#_|"&q@#IVȿrq6@#4mƿɯ@#=#-#O@##`l oT@#X4AJM@#`E:v@#~m\1P@#vݬr2Lf@$xԿY_a(@%A9C?娬\ %d?82vtc%z\$_?%] qv?TԿ%ASy?ᆘ5%$=?mqbb%ŬG?- $?z?},{$lLYt? ^#$n?@x$y?#$wS?n.3$Zt}^_?)^$=M@$>?h]k<$ ?2f a|?+6z!?U.rf:?;ZS?,(a=1p?pP q?u!?$tSM"?L__gߏ?tI s?niQY?zcslSn?5~\#?ڐf3]?43ڧ ?Y}^ ?~6;X6F?$6eh?0@95B?`Vw[0? uSLA?,Kp&?-uy(?C[2m?f{_ 1;.^?SP ,mqb?D<RJ?pO4Í?6}VlXdE#?*cI{q 8?LWxd?^l<sWp?q6DJM?{ 9&B*8?˒:)ke%?pO4?vM$6e?d{0wpy?Mqk?,{ Z\27?#cRJ?DonV?`7 ܇U6;%o?Zpd?csl&lv6?.}Vlq%S? N(u?L2#B9C?r 6PحU?Z[(nY!?81e-C\?;nwpz.Cy?Q )4?zc ?+ J wFz?ii} [ /^?{~$ x?`,J|Zq? -#N?їH5?cI{tuy(?sBYbE?}^_0pO4?s#x ڪ:э&?!laR*ojcO?fIi;Cc?-+˿ڍd>?fOv_ح?TA5TuNzVC? <?)k앪?6f~g,?vݬi/n?]ce?I'>Q ?}ԿFIl.?fffff3zN?ިc^tHjܱF?#?替2"?KthM?[BEk;^ t?%o]@a@N?Yb}@/^ G?np@hb?O M@&?+ʬ@¤T?<64@ڕBC?-@K+@?U2a|@^_0?~=@65B?c4@_ح?Cv ׈@ =?#-#O@ ,zxl?&I@ FsB?Y @ ɠ'RTa?.r0@ eRK?~+V@ ί%?Q@ hF4?Wwd@ ~|?.]\@ ?H!laR*@,&k?-v@P3?XOLn@?P3:?q @Q?RT`d@*d?3u:>@#$6e?tj@I}?Zqx@np&?]ce@ɠ'RTa? (x@ Y_a?tqq@UϪ͞?@98@Ր? @B?rs@$-?`L8@A?W^ Fe@*\}?:э%@@H?@b`,?/n@D?%@ ? D @vȴ?'/W@7wd?l"h ԕ@^)4?Em\@v?j@1ڥ?򐫴N@9e+a?2^@?R&W?ȊH@]:?\лo@"w\?jܱF_@VԪ?A*ީ@)?Б}kf@Ѿo?F@ڐ?ͳ|@0gT?1ί%@Ck?jQ@ƐWx-?0݂u@4?@=cA ?VI@u\(?$/@>lLY?b2"@?vȴ@%1;.?+C@`f`,?o'=[@"F3H+?@&@"NSe?ǷAJM+,@"])4??) @"l0?¨CP@" 7?@"hƒ?hƒ@")Ie?m?@"9䣃?B0 @"a=1ם gb@#8\)~+U @#[CV5inX/@#pȊGH@#>-b8ڿײ@#&s@#8K{0@# ڿ>'!W@#Ez$L-w1@#08Ms@#B{m@#S1zOQ @#_1PNΚ,g@#e!Whڵ '0@#eXdE#m=@#i2KZ@#}Ebߛty@#{ſwY@#-VOQCr@#T6(M@# 9D@#{ty1@#F L0T61@#$/廘A@#D).]\@#!5`L/{J#@#Y!ƿ8R~@# k0OX@#+jѷX@#!-w1PH@#ǿ`Ë`@#4C]@"]U\S/ej@#{5NxW@#: ҿ%ם @#[C]/ek@#oT ȿe%1@#U\R.s@#Xy=j򐫴@$uO7u?{z@%Y? ͳ}%y|à?},%ѷ?#9%8q`?鮼@%n҈p;?9C%Q?74%4_Zjj?KƧ% e?a@O$g?Zjj&$3rS?i$%;?fP$~|?1;.^$tj~?nwpy$eEw?o$G ?sGO$*%ם ?ߏG0$ @\?:`#K?zX#H?vݬ#4n?xW*#UGZ2?7`,#uS?uX#W ?9m#9T!D(?ܜM#?,"C?i}"?>?ud0"ws?u!",'7? gw#0NU?$/#o?;L"a?iDg8~" ǎk? B"1L?Nʖ"H@q?H˒:"wQQ?/{J#:"XM?m"9< (? 7!="?{ Z[!LB?%1!ۼ+@?T:!wkP?>-b9!'=["?L_!}ڐ?J#9!^au?~$t!>p&?m!j?'|E˼ ܜM?Zx B¤U?L@ IQ?~|ᛑ =?tqq 1eәp?n ahr ? ҉ AR<6?Crq6 !f:?tҲ t?k÷-#O?o~=-#O?C;K?11eәp}9?_eU.sA0P?EbZp?{B?R?PܜNZS?@n҈p?lLYt\@'RT`?]x?¤T~E?3 A!}?Xe,J?F}2f4Ck'?\R-#2 ?U-b9?D H?Q W'?mHQ {{ 1?vj z@?CA0 ϿT ?ӄv ?% ͉/?~($ x 6? /a?h r/?5~g "wkQ?/O M W?blvJ лnwp?- q /iDg8?[W>ިc?]k;doa?2f<M?[-M0$?#π̸?i JL?Z }H?O;d )4?)lD N6F ?7ޓ 61?wFzz9?pT\R-?su;L?|E˼+X?M:Wc^t)?}ӄg>E?\ ZLB?\7ɚ[T?'\лn^u?7%םQX(?S`?^ N??IQk΅3?O"}8{?VϪοyrGE8?~=OT ?}E˿l6z?Ҳۿ ȊG?{ 9&B< #?v_حᛐ?kC,zT!D(N?_&kɿ D ?XdE#;,]?S r ?: g8}?\ #?,Z?LFIm?ՆDR?hK۠'?wpy埿ٔ[l7a?e֙0 )?6&,Y!~?2^JM++?U2a|ڿ*\|ؙ@FtI@1 |ZĿՐ@2NQ˒:)z@2,'@6%ٿ*0U2a|@:}OCj@@8xW*|Zqx@5=ć?锚VWj?np&?*1?䣃'g?7 ?S&?(F?xW)?9_?nx??𳑒d3?e`A7L?:S?\лnw? 6&?SMj?.3?KƧ?6gw?H sG?@q?E8YK?Pnwp?Ca@N?[W}?S?ia?o1?3?hƒ?İ? ?doa?J?M.?b?oǣ ?7ɛ@H9Xb?fQ@ڪ:э&?fł@hS;wG?>WS@i?O;d@y?eV@ <`?1P@8Y? 7!@rV@.9.<@ե@_p@-M@$?XOL@,1&y?JM++@Y?hH@ 3H+?3H+@2?B\(@;'j? &@;dZ?YJ@ Ϫ͞?_|@ ?% @ >BZc ?AJM@ KHӮ? <@ Gz?B @ NVu?OAs@ 6&-?$Jb#@ _?do@ lA!?N@ 'j@?~@4m9?π3@FIm?3ti@rq6?fA@+ʫ?GzH@Bej?$ud0@>P?B1@?S;wG@Pr[? gw@A?ȊG@n.?If{_@űH?n.@ b?a'R@IIe?B¤T@]N??@*?"@XdE?qu!S@X ?PH@J#9?.zG@E? @7ޓ?l@\#x?!laR@kP|?4X @؋xW*?xF]d@hI?R^)5@U_ô?,fWx@X ?}2@ /?޳"@QCr?AJM+,@M3H+?K3@ #9?T@K[-M@%?(wN&@:)z?2f@>Ov_خ?`A@;D=G?CA0@k?Se@;D=G?dmH@;Oag#?4AJM@6D? .}@s?|H@t?˼+@ [W??hb@ii}?K]cA@zG?"@ (?M@607?Sn@ri4?ȴ9X@~?Q@SeX??]x@4,/?LPr@ /IHV?d@ Hwr?KHӮ@ aQ֌?톃<`@ y=b?3zN@ L?Κ,fX@ d?v @ v?MjOv@ V?{5*8@! uy)?әo.@!+y?Cc@!NN&Ԁ?u@!sh]k?`V@!߹8R?ѢY@!2 E?QH@!?ײ?{z@!ן~+?4Ck&@!ƼS;?#-#O@!㯷?@!a?m\@"J>B?;.]]@"q ?ݠ@"ôr?ܿLPr@"䣃'g?ܼj~#@"4.۵? k~(@"> ?ڙ̢b@"\$_?Vl!-@"9Y ? gb@"0j+?ae@"^ N?iY_a@"[l7a?ohی@"nm?[W>6@"ke?HK@"EwU?nh@"'76?n@# ;:h?_o @#]x?~+V@#0ϿT (@#^!Rp@#<ϕտŗNe@#uMUҲ@#9m zG{@#U'(ciB@#t)-xW @$1ί%$=@$'gMʢpO4@# ;Oag#@#"쪹rGE85@#֠Yؿ1;.]@#ظ' ḍ@#$tT؅3ti@#辵Կ ѷ@#o5J&cI@#{ 1Ͽrz$@#N;5 @$ gb;D=G@$",R'RT`e@$7YZ@$ x?g@#&qۋq @#sջ=@#uO7u{J#9@#[-M@䘈a @#ȊGJw@#ҲM_o@#n0@#qp$@#!~61eәo@# ¹Mnmu@#6&-䗷AJM+@#'py,D@#=,{ Z2a|Q@#_B9g@#z}OC䣃'gM@#X2vtcu!R@#U*0?T!D(N&/*ZFs?h3&UDR?l7`]y%=Fk?,%֮}Vl?,'7%? <`%]cA?:)y%}4X!?^ %_˒:)?'RT`%A|?%ם g%#M?_%^ N?.2X$2^?+$ɿb?m$eA?Z<$KZ?(z$n*)t? /^$P:э??$2+ʫ?Y$^??F#Q?ցԪ#փ<`?Fs#?xF]d$I'>E?5$*_|?k $ ?S#a?Zjj&#ͯ?x-8Go#%;?GZ1#QCr?@\#pn?0j+#QWh?죭^#2䎊?3H+#a?n"eO?ʁ"(M?hA_F"M?="@x?FIl."ub?u:>"V&,s.?MUh"6v?F?"n~?{z@!6&,?݂u!Xe,?+!&?|o'!M?M!w`?OX7!WK]d?cI{t!7s?,!`H?P3:~ k?K)^ |E˼,?|O" M3H,?" ,?J82vu v̢a?< V{_J?>LI' 6g?mY b?򐫴?]cA$(??h`?'RT`e'o*ZF?T:9䣃?v6w?>lLYucs?fC"Y5?/YIQ?1of;?\|ؘ]Y >? eA?1eәphH?zN{p+?B1U?-8Go*Zg?U.rί%?}޽q!?i4/MgwZ?7ޔ ^?7 ܇ȼ#?kP|Il.?@nC̍2?f?`kzQQ?^ V??l oTL?EhPܜ?"s?rz$Ѣ?T;qK? I^-qbb?x?ha̍2?+ʫTA5Tu? o6?[W>6Ml5?pdhۋq ?sLAG#?Wx-8G?LI'?_?H@@V. ?F)k㢜wk?G%C`k?Qy| p?pZpU A c ?t4 t1?m O"?Z  ,k?P ai?HQ Kc Sz?}ӄw c ?L/{J wȊH?˒:* ?G? 'RTa ҉?> u5?׈+ 8Ck? gb ᛐ?:4Ck' F9䣃?c{ 2 g8}?{  B?eVѬ?mt{t?M5Xy>ud0+@?;yR "S? Zq &A(? 08?"&r "SP?xB0g ?\ y)?Ubq |Z?=[!ZM>?)4͊?Hj{?' 2R?hHs*?H@;*)s?zdhb?$6eۿ?lvJuY|?J 9?bb˧3ʌL_?bM~*?sպՐ?׈ٿ/?B9 ? {5*8n?&v }Vl?SyC`O?>-b8<@N?iv?^߿`sW?gwu!?fPwN&?vȴ9"'?>ߤ?ɿCA0?#x*0U2a?~鷿 ?~鷿r ? |ZroTK:?ѷX!}?EſܱF^?Eſ҅ b?,'7n~?hJcA [?l32?P*.Se@Ush۠&@`s&x@ԿLA@E84׿,=@ӄv!D(M@~($ xZ1 @x ̈́1@rfI@$2m?ש~+U@`:?π3r@%ڹ??F@ qu"?S@CA?ꕿEw@z`?9C@3rS?VH@ ٔ[l7?~g,@e+?py+@uK?qiC@+?Ev @+ I?э%S?eV?ʖ]?"쪹?iB?lvK?_?p? / ?RJ?~+V?&i?DѢ?Ԫ"?o?X%[?IV@??{ @gT?'(b@ʖ]?Jw@ =p?Jw@`A7?'76@ A"@.G@tr@ҝ@1@TɅ?N@8q`l ?Ć-@wUqL?wd@h]k;@{5*@q@ҝ@3H+@-#N@i@vJ#@Cr2@cI@>p@ﲪ@ }A5Tv@$@ RiY_@*\@ 0tqq@@ ͩ>!@g@ W.Se@O;dZ@ 9@v_ح@ -?n@ NΚ,g?(F@ f3?@ {wF{?b@4@ [BF?Κ,fX@ XiQX?K@ }W?,@W?tT@XbM?[v@9C?>lLYt@yD?!"S@􂾋j?B¤@: @ ?D _@>ʫ\?m1z@IW?PgS@?3(n@.H?!5`@BZc? e@@ x?@쪸?32@?;5Xy@dҲM?}At?@Nʗ?FJ@{ 9?ue@VFJ?bD@R}A?*%ם @7 ܇T? 6&@o*ZFs?Tw[@~?4J@z$'?>-b@VI?o~=@lvJ?k}@#π3?X@a?^iB@"?|O"@N;5X?T`d@cA \?+NP@l ?@ ;?>E@累q!??R&V@_@?fA@8\h?i@ ٔ[l?R4n@N}Vl?">iQ@/{J#?{ 2@K۠'?N;6@e ^?9@C?SMj@ gw?!<@)b?S@jo?R&?\@0j+?Ms@cI{t?FIl@8R}?]r/@m2"?/Ys@IQ?"h ԕ@,]N?vݬ@Fkw?Pnwp@ /?@ *3 ?@ A!Bp?R䎊@ XjܱF?@ pW?aR*o?S@ Q?5~@ ^)5??@ Ƨ?+$@ h ԕ?% @ Ϫ͞?2 E@ l5?Y5;O@! N?p:~@!U /?iu @!XOLnn?#@! x?e@! '?贍:@!+%?SMj@" #Nw? M:@")wr(?C\@"@ɯ?ۋq @"PsWq?.]\@"ggM3H?SeXO@"0X:?@",?y|ßa@#R@4?]k;=@#Abb˧?a@#;5*8 ?LPr@#BW?{@#MKHӮ?!~|@#b#ᆘ5?g*d@#t^ N6C-@#m ֶZjj&@#Pſke@#<`VWj@#ﲪ㿱R4@# @#qu";yR5@#ĀuM{@#ΒO"}Fs@#jj&zNz@#o.Y}@$0$=~$t@$ 2f=@$vtc5˰_@@$&tE@$8앿Ђ"@$K ͳ Eb@$Xf'|F9.@$kX6?>p@$q!6M@$=@$[ בFV@$ɚ$SP ,@$˿qHo~@&7~ިc^@&"ڹZ@'dƿҝ&@'%.r@';[8\g*@#SP{ 9&@#{`G@#0 9Vt@#Z,fWѿ3)k@#W%炿[T@#O)r$5i@#3,]O>B@#(:S丿d+@#(앿M++@#$k&jDM@#/X6M:@#=p = xF]@#PPƿ`,@#k($Y@#HӮh^a@#@~?1;.]&{yR4?+@y&]*EM?F4AJ&??k}:&!ZS?Wx-8G&bb˧3?eU.s%2a|?f'|E˼%/e?@%~?q %EM`?D%kk?lLYu$m4X!?&$NLI'?`$.Se?UGZ1$`V?숤~# ?KZ#Єa?p`#,'7?{ 2#OX7?Vt#q?OIH#Qe?7ɚ$#2,R?阮&#D">? $ p"`,?B&IR"om?x>-b"sպ?*)t"iY_?7"rT`d?!5`"R2LfQ?O"}"2lvJ?4Ck"p?ޓ!񂩓 ?뤓ȟA!0H@? 4!ѷX?R}A5!hۋq?[-M!o1?}Vl!Oq!Ks?},{ !.mH?_o!LI'?Jn OB?{?z e@?jf C,zx?-M@$ ? 6& j{?9m ֶ IE?gߏG (s?g 5~g?< ?!Kr@?yJ%|?JL_Ǹ?v-ŔO ?h ԕ<`?ͽs@D? \NlS]$D?_*c7~?YT!DN?Q%S[T?Go*ZF1P?>lLYtQ?PZ1?,=D*?D)o~?oTK:m3 A?$*1'd?7,QI*)t?M%A_E?f{_Jp8?yV =?Wx-p 9?zSP S?tjd*1?ȟ@{0?z9}At>>? >lL6&,s?0p#̍?Sa@O\ ?Bѷ?;5XE?-Y} RiY?ȟ@ |[?N I?-srS?7ɚ:?4K s?L_ 0?_Ë #S&?{z@ ")?,]O 7{?)r\> ڪ:э&?{t X%[\?ZR i,(?98R~ ,2"@?jj% B?j@ H˒:?9XbN &76g?͔a= k?}9 B[̟]s?+%rGE?*[Bffffff?-M@$>CcHk?[!Z? ?>2^@#xے:)y@j@@FsܿxF@φ`VQ@H@#mǣ @q6'RT`@ ;@ ͳ?D">@ b?/@~{?>P3@xa Ec?d@r<*?fP@np&?K:@r,'? ͳ}@qzN?LD|0@l[?o@gŬGH?`@g>E?쪸@f`-?a@N@bHG?`@ZBC?[@PH?P3@Go*ZF?Ck@?ҝ?y3@//@i@ l5@ʖ]@ D@䎊r@ nm@%ם g@ '(߹@2?@ }A5@?rq6@ bw]@%+@ 8d@C@ ɿb@Mͳ|@ Y}?q@ ]x?Q.ƼS@C$?9#w@4Ck'? 9@5y(? 'RTa@{5*8?ߏG0@Jw?s@E[[?@{?JA c@ߏG0@?Jw@ܜM?xzNz@G?}!.H@ :?m3 A!@K?Qx-8Go@9?2,'@{{?@`٩T? ׈@n?䣃'g@a@N?TuL@$g?PܜN@e1?r?@kv? 9&A@s@N?b@fP?@crq6?[l7`@BXOLnn?@т ?\(@ $?n @Ix?Rv@rs?6F@U=?*cI{@ݬ?X6F@q>E?uɯ@D*1?:@z]z?L% @+?,)r\@V? d>@ATɅo?N@6&,s?_E@?k}@e;:i?puO@Hj?Y@zcsl?/nV@ k?1P@_R&V?}@yЦv?}Vl@ۨj?fQ@vݬ?VԪ@Wue?)`@'!Wi?xW)@JE?T"@aWh?ʁ@:э%?Y@ ??@>-b9@(9-?8-@'(b?U'(b@o5J?$ҲM@2 4?l&k@n3t?@ZFsC?\(@hK?\¹M@ L?)K@ .p:~?J"@ L B?om@ i>(?I^5?}@")?nO@ؘ?΅3t@ tj?hƒ)@ "7?X@ GXd?Z@ _a?I^5?@ n?Ca@N@ Jw?E@ o?x^@ ;D?: B@ θQ?jF5@ I< ?@~@!fP?S@!IQ?@!9B ?E@!V&I?1o@!w6&,?nP@!,{ Z?^)5@! 7!?>P3@"" I^5?UDR?@">$t?5~g,@"WŬGH?Q_p@"n:}O?iJA @"8 ?a Eb@"Y5;O?Nx@"FsB?|@"1?&@"Wx-?P]@#7?P ,k@#׈?ި>@#'ue?1eәo@#%??J!@#_? ٔ[l7@#eA?p`@#5?ϭ $ @#Yᰉ'?!-w1@#cMjO?p:~@#Z`?"SP@#K;B?(\)@#wd?*\}@#-V? I^5?@#.< ?PܜN@#kv?3@#@jU? 7!=@#Ú3?S8Ck@#n.gwZ@#_Ë8\g@#־7ޓ?hJ@%Ϯ@?EM_@%ŬG? ٔ[l7@&3:}?ҝ&@&D*Ԫ@$iY_a]r/Z@$76o~=@$rLfQnR}A5@$Dɓ_ô@$& =p @$Dg8~͊ڹY@$!-w7 ܇@$?r(@&F4Aԩ?) E@$҈p@$<ϕ?>lLYu@'/D)?Y2@'E?R~Rw@'[C]? 6C-@'r Eÿg @' ԕ+\N<@'{ +U@'o.?@'+2 E@'ޚ,fX?g@#/D*P{@#G 0bM@#!R< sG@#Y[-M@$@#l?m@#T1< #@#^YɿK:@#f9.E @#\g*P3:}@#"\g*@#/l5VH@#ڿ>'@#<`?-"'|#?py+']? k~'?0X:?′B ' &?a=1' ?㍎[&]$D?zcsm&Ġ1?9m &?ɯ{&},?坈;D=&hbM?uMU&I7~?栐- &* ? ٔ[l7& Q?f?ʁ%u?($J%nՑ?n%O"}?*EM%/?%Y?~mH$tqq?,$E?nmu$7?e$Ho?Zx_$qt>=?ϕ$Q?Cy$1?Xe$n.?)a#R?=K^#р |Z?y#ZR?>iQY#&x?ud#pX:T?]N#P:э?OI#0B¤U?A_E#ܜM?PH"iDg8?"p&?%o^"`sW?]U"ڐ?$_Zjj"m'=["?Xn~"LwkP? ="++@?>p" D?Sn!#9?$LD|1!Ev ?Vi/n!\g*?1&x!gM3H?m ֶ!fg?@'!E]r/?:э&!$Fs?J&!&?zX n?;D ěT?n~ +ʬ?ᛐ ~6F ?4m \u"?bD ;0HA?6 Ov`?iuCrq7?/nFIl?7~k6z?@q(+?l,dڐ?CA?~6^2f6z?>=Ć*0U2?gdPOX?  GG#?' },{ ?حV1?+ I@?.zGu:??T"/D*?zҝ&tj?H0RJ??Y n?q!Ksca@N?3ߤ^ t?W^ Femǣ?zҝ&??%QA [?Y! ٔ[?f;Q?/ek s?S&{a?2B 6[-?Rsպf3?u%F L 4?nx>-b?M++CQX'? Ov`? LD|0˒:*?Vl!`k?)4BD?ΤT %ם ?/{J#3 W?K]U?#̍{ 9&?݂v4?ۋq ͉?5Tu7!=?ws}W?"}V},? bX?_쿱[W?5Xy= ,k?cڤl5?{?~Rvn?s~+V?HF4? 7KƧ $ p?nPɯ{?v5C 4Y?TɅo?T Ǐ?եb xF?chatX ?>au +?!R<6 b#ᆘ5? q i/n? x 84֡b?s 0#̎?QX' 8F]d?>'! bM?D">j tj~?y1eә "pO4?ʁ }?NFIl 0?Hj R%1@)y}csl&@P?>q 4@p:~v-@ O M@Y~m\@jUp/w@Ġ1d,@å;KXd@X'V`V@$5ingT@v ܱF_@*:@c^@j%i;yS@ŗ.>lLYu@H@qrI@6Cp:@IVvr2L@V`Ws@wdi;@Q.ƽ7Xe@  oTK@tҳեc@($ x\лo@4mƿoa@F]cQm݂@s-S#@JA c&,s.@ ?m?ß`zcs?zN{V?pﲀ,'?DR?gyU? ~i;yS?A5Tu #y?61v?bw\S?/^ Gpd?ىr:v?ڐ 8\h?"`B۠&?۵y/v?q"ҠK?(9-˘ ?ŗNfUDR?*dR}A?|Qe7~+?ԀuM? |[?y|?G?//@VWj͢r/Y@v`A7K@r2LfO"}@-a(9G|@Ϳ ^@fB?5@u!S?|o'=\@LPr?Īd7@Κ,f?ΑSy@ԤҲ? qu@V. ?/l5@$tT?Yt[ @@?@n?Wh@{?!}@ |Zr?$D@N?Krz%@D?sGO@nV?=K^@Dg8~?D@Hj?̷C@D?2^@6?0#@ 4?ud@ [7?8@s7 ܇??) D@i9Y ?bb˧2@Y^ ?LA@sWp?Ev @3?q@~lLYt?%1@}2?@D@?|27@wFz?f3]@6z@xʁ@ rq6@an@ Rp:@X @ b8P3?ӎMj@eU.?\(@ |[?Ww@=DUGZ?7~@vY?{tҳ@Cc?`]x@]9?EM_@2䎊q?) D @t!-w2? m@h?돛]@_Zjj?@\o'=\?h3@{?e@omr?G@e[BE?0O@@q?߹8R@0 ?>@,>B[?a=1p@ohۋ?@D(M@Q?< @4?6@4i?f@S8q`l?wd:@pH@r?jv5C@Zc?OX6@:?.r/@Ma? =p @27?S@Ezxl"h?łV@n?P|@7? ~@RiY_?t^ N@D ^?3rT@ i/n?l#@>^ t?. <@v\л?`@8Y?sg@〈P?s7 ܇@8 (@ -A5Tv? @ L;:h?؎6F@ jG|?1L@ eO?q |Z@ l!-?=Q.Ƽ@ `d?7 @ @4n?Y2@! |Zr?ygt@!H˒?h#@!;`kz^?v@c^J@ x??9-*E@ ̷D?Q@ =b?̍2#@ %1?񅱅H@!1;?&a(9.@!D?߹8@!1o?-8Go*Z@!h]k;?﮼@@!u!?5TuL@!q?E@!G#?KƧ@!ʁ?n@"W@#l'@']U\?vf@(DUGZ2@(*")pO4@(/#cWf3]%@(EQ녿̷D@([u% qu"@(puO75Xy=@(o5J2a|Q@(쪸ο5Xy>@(Eſה]r@# I++%@#>iQگ%;:@#hH"&q@#.4݇@$A_FC,@$oTKG#@$17T7@$D%1?Nx'ʰȊG?T ǎk'GN? /^' /?a(9-'me?p*'N2X?jfB'/X6? 'S#?q6& ?T6&ѷX?t[ &Pr[?D&ܱF^?t[ &sY5;O?E&S)k?qiB&4$_Zj? 6P&s?kz]z%:?-"%[ ?an% b? B%Q?UGZ1%u&?͞%%UQ?E84֡%5 '0?+@y%ud0?2"?$??\лn$xB0?XdE$$,(?Jt}^!-?y1eә FV?zc Ԓy?8K K4?B¤ ?0d o:?]u M\?r +v?B؄ oiD?|QŬ? D"'/?7ȊHF/e?asi}?S$%?Kz/?޽5llL?LBnC?@4m^?fB5~g?`k{@?s_A?no5J?kPqm?+~($?> (Il.?`d8E??[:hA?a2^- gw?ŬG $ p?ôr24Ck'?/Y]s?$i4.IGNΚ?O;dZth?`L8ܜM?Ipa,'7?9hH- ?H+_?blvJ'j@?~+U Z RiY`?mN?IHU=K^?}At>kP|?Ć-^iQY?ڤ+_m?9@?m3 A!.3?deoiDg?3)m?8\g% ?hPܜV3H+?64K!5?8-%oiDg?,QfP?_Zjj?Ѣp ?"d5inX?&A)0?=K^|o'=?w+n2X?W^ Fe2m?>-b8<Pr[U?)r\= jUp?;'j ӄv?l"h ty?I'> %? /'=[?a|Q n?g* '=[!?^_0X w\@RD r(@xϿT >'@'76 $̢@1PVԪ@j@9.@8o~@ᛐoxB0@T~XR~@ߏGK[@2X*_|@ 7" |Z@/^ Gb)n@:mǣ($ xG@PܜM۠&@W9D3@U"0}Vm@Lnm 7@?rq63@0EwUqn*)t@!5_ĿZ'(b@4.۵nX/E@HoFV@QCrP}ke@nwpt@E +jg@gIOQ@O"}ȊG@*Ր@ᰉMs@竿Q@i/n2 E@N&Ԁu0@ < (wFze?qu!=?W}W{ ?ŬG ?;KKƧ?`V.?1&xտy|? (w*0?S$SP ,l?ufA?'  x@C7!<޿5Q.ƽ@8\h?ӄv@~mH?vFJ@|H?u!R@)Ie?{@QX'?SP ,@?P]q@ ?-M@$>@qxB?ߏG0@:@NP1@W@L_?6&@0 ?S@y*\}?x@qbb˧?WiJ?mu@ß`?N @*")@JȊG@DѢ@A>@rGE9@8F]d@ZqxB@-e@ @!s@l!-w@S&@'=[@E@ k&i@Ie@ ud0@ŬG@ br/Y@Tw[@ cA @q@ t.۵@|`@ +jf@W4.۵@ fC@5;L@ sG@Ew@76f@ﲪ@2\=x@>P@+ @q6@^\N<@V /@+%@ Nʗ@ccHk?S&@Kp&?j{@~?R4n@ 7!?;5Xy@ ֶ[?& '@ S#?#cW@[sպ?d0+@@؃4D?:S@n~?}@!?0 )@q+?wd9@Ck?V8YJ@%ם?5@g#$6e? >lL@)^?'/W@Y?oܜM@[W>6?P3:}@4"?0 ě@w?]:@[?~@*?ty@@jUp?aGz@sGO?:s-@vF?},@nCz?\=x@>ʫ\?Zy@1Q?m@J?u%F L@ %|?>au@R^)5?@͉/?cI{@"CV?|?@j :?2LfQn@u?nC@ԕ*1?͞%@x-8Go?n@M(?KC@.3?@0@9?iu @Jw?\|ؙ@6wpy?d2@pMUh?ty@J?\ı@ 7"?SE @|ؘ?RT`d@aR<6?Rsպ@'(?H@q?1[W>6@*fB?]9@uϪ͞? ܇Tw@d?(@~? $ q@+s?eV@e]r/?B;yR5@|ᛑ?DR?g@ֻ? ,k@ 7ɛ?A(@ ' ?'|E˼@^_0?K@sպ?1P@ K[?S@ ,S$?!.H@ Jc ?]U@ if'?W@ tj?ȊG@ I'>?WsPH@ ᰉ?# =p@ vj?ǣ @!Zp?dZ@!!VH?򆍸@!?z:?QN;5@!]2"?S@!| B?+@!\|ؙ?/s@!?G?xW)@!)k?AeU@!k? v5B@"o?c4@"/4֡a?R~@"Lx?`:@"j@'?&z9@" ?fC@"D?%1@"_6?_E@"]q?@"|G?䎊r@"Ҳ?,fW@"hr?iJA @"s?昲̷@"X:T?}ӄ@"jOv?@# _o?th@#%%1?@#AA [?6&,@#Y?E @#km]?_E@#sPH?f{_J@#vzd?ܱpO4@#??rGE9@#zVC?A c S@#˼+?x @#($?s@$q?Ք[l7`@#`N?Ѭ)r\@#?) ?КIf{_@#ӯ?τ#π@#z?"@$[?͂_@$?py+@$$oh?>WS@$8B0?ƴ,Q@$Q%|p?Ć-f@$ke?V2@&VH?ߓ_ô@&hH?wN&Ԁ@&5\R-?Zjj&@&O6&,s?6@&Ω?֊?@&͉.?bD@'gT?8YJ@' D? x>@'2zcsl?7 ܇U@'KCV?бpO4@'c;K?`,@'| =?̞7@'OQC?7ޓ@'tT?͉.@'yU?`A7K@'\ ?@'Ѣ?|?@( ʫ]? xF]@(#=?Xe,@(:If{?Sn@(Q֌i/o?82vtc@(hKH?)k@(yV?:S|@(%ؿbM@(hƒ远O"}@(/ek6F @(^5?|m݂v@( =q,<@)"΅3t@)Pr[@)2wkQ$ p@)HOLnmսs@$ #hJ@$(c^t*ʁ@$F#ڕBB@$^au |Zq@$u}2w1@$/{J#?i(cHj?;wF{'%|?n'ڎcI{?D;' ~?ȴ9Xb'yR4?K'{ײ?uO7v'\&V@?O"}'WS!, =?ydob! ?Y RC?Ӯh]k y(?^_0 4?,0 `A7?X̸ ^?#π <(\?O M K?RD?lvJͳ|?.h]k<d|0?XX:S?:SKC?cO֡a?~RvO{?d ?"3ċ[-M?I{t~z9?pd9Zx?2I?K[2"?*hzc?.3")n?-^3rS?Q. ?u׈PW?O"} (w?üZ?,}{ 1ί?.47'j@?%u1;?FVIRiY_?h},{ ck?DUGZ?ʖ\7 =p?B؄΅3?_ô?g?O"}:,fW?y0U2a|?Ƨ-f:?֫?myЦv!?6ec?Pj?+Ki;y?wUqL̢?vMHQ?ϿTIf{_?,d?|h?XOLi?) E?pu3 W?z$LD/{J#?Q>?:>/0Nh]k6zy&A(@GM>g,@MfI=i;yS@Q}keZc@Sy3-w1@V#={ @Z7ޓ h]k@?$tS(9-@81e DU@1A_Eq`l o@3x@: ty@A0H@H+@Gi,e_Ft@LJ@Qd2Y@U8KTK:@Y+ @ZBCA5Tu@Zjj&s8q`l@Z,Q$Jb#@ZLB/{ 9@\yg" @^T:j%@aae)@dii;y@h߹8b.]\@lVϪο:6;%@o䏿l oTL@r䎊q޿A [@t[ Lnm@rm\ V@chax@-l5򾠺K@zd9@{Y疿@g/VֿKHӮ@nt[l7`@{Lf:@JM Z[)@6P&ҝ&@8\gXe,@u~+U @Ġ1CcHk@xl@s?gT@ ?,fWx@8YJ?Il-@@NU?*͞&@D*0?D|0@N,fX?'(@eם g? /@28?T6@m3 ?LW@9.?5~g,@+?I< @?<ϕ@H sG@CcHk~6@?9x>-@;5Xya E@7N&ԀŬGH@4#*\@1iB?fA@/iDg8?' @-3 A!?v ׈@+%?`kz@-^?J!B@8F]d?հ'RT@C7 ?/ek@Hp:? I^5?@L?j@KSP ,?İ@Gz@d?_0X:@Bn?k@9 k~?nY!@-8Y?z@c@?E @%S?%1@OIH?Zc @($ x?Jw@E?0 @kv? ܇T@Ԫ"?rz%@b?ł@%?'gM3@H@q? lLYt@ڐ?BY?.@K^?܇Tw@H@}@Ր@>(@!ae@]q@p&@@/?Y[l7a@\(??>p@ x?!"S@0$?Цv @h~?g@j?j{@[IV?K]d@:hA?:hA@-"? ٔ[l@!R>?xW*@fWx? / @Pܜ?LW@Hzd?~Rv@??@84֡?Y5@#x ?#-#@`>-b9? I^5@ae?km@D(M?M_Ë@D">? ͳ|@W4.۵?!@եb?}ke@i;y?Fkv@ nP?[W@ ulv?K3@ 5!.?Fd@ RLfQn?qR~R@ sK۠?I[W~@ H?98qa@ H c?`@ h 7!?e@ d?&@ 2I?rϕ@ 4AJ?@6@ o]? x>@!AJM?b}@!#^?|o@!B?qA [@!ao?BZ?rGE85@#7KI?"쪹@#TfP?}ӄw@#pG?}A5T@#Ć-?^_0@#6C?7 ܇@#ś=K?A5Tu@#ڐ?8Ck@#t?ڐ@#Ԁu?1ڤ@#?>p?C@$6&,?łU5@$̢b?@c^J8@$0? c Sz@$J\|ؙ?m@$e:?2^@$H?yV@$;L?X' @$Dg8~?`A7@$g?2_@%iB?q6@& QX(?@&$oh?[W}@&?d9?=B@&Z)y?C$@&tK3?07@&`:?(zc@&V`?2 E@&!D(N?B@&WS?VH@&mqbc?΅3t@'h ԕ?ڪ:э%@',C,zx?لM:@'F)k?\¹M@'_f?3 V@'ydob?앿@'?]ce@'i;y?Ӯh]k<@'Z?~"@',=?M_@'İ?2m@(?ͳ|@((1&x?bR@(@d?ϕ@(Y7~?ƀIQ@(qVH? xF]@(v5B? ҉@(u!S?. <@(Q ?0H@r@( ?,<쿱@(?Cy@)9?#π3@)py,?Pܜ@).Y5;A+@)EH DU@)\4XͿmHQ@)seXOD)@) ҿ@x@)'RTOv_@)پL׿Z1 @)?>Q@)1ڥ;'@)m֭٩T"@$]ceB1@$_ĿY@$Q_?f?/s'2^?ꮧG'gXd?,d'GAJM+,?d7'&]cf?'j@'g?S&&?%&S&?혈a &:?,R&J?ڹY&cH+?ѷ&B~Rv?z$LD|&! Eb?Zx&]x?3(n%˒:)?mt%[W?𧰳d%?\%|M??:э&%[qu!?SMj%:9`?L_%\)?2W$ ?e@y$E?3]$D$=?jJL$a@N?$q{ 9?hI$PIf{_? |[$.6z?BZc$ Jw?wpy,#HӮh^?#Ʉ?VԪ#?;'j#'(b?Gե#c򐫴N?zG{#A.H?Z# ?a(9"U\R?FV"҈?Cv ׈"K?t$5i">E?zxl"h"uY|?"S >l?"0ȊG?5Xy="mu?di! =?f!ɜ8J?Zc!#$6e?y+!D?0OY!b8\g?K:)z!?wd:?x!Z?1L %ם ?c4 o*ZF?6 +?(\ ڤ?S{ o M;?~g, L/{J#?n )Ev ?ҨCQ U\R.?0Ʋkv?%[[٩T?NX%[: ?vMcI{t?%$5inY?*\|gǸ?gwZ!ohی?FszN{?:)_s?`҈pMnY?55~g,?$}A5T?`A7y|?y(2ܱF^?^ 8q`?={ 1ί;?`>WT]x??doϪ͟?cIϰ ?#x wN&?Y A2^? i/n`G?-*EM{m?NP1<k ͳ?n`,#`k?cI{te@y?]\`d?L_|iu? 4eoiDg?KȟA?hH ;yR?)k&V?A`l oT?VԪinX/?c*cPNʗ?j :]x?n>W5͉/?e2Iݗ+?7k;<- q?臨M,]N?d7ͩ>!?bw\CV?=cB¤?,2d2n?nπ3r?u!e@[Tz:@w+MfI=@ l5@r 6#9@{'|E˼@yUA.H@ ֶ[}H@<ϕ@Rvrs@nCy+3z@yЦv!ǮzH@f38?G@Ne>@T@N ?@Ǹ If{_@ $ p Nʖ@:{ 2 E@vjUpsP@aEK@ =IOQ@5IW),@-Vb}V@a %@ |Zr %S@OB 5ɯ@g* ܜM@3rSO鷿@P]F@D(M8\h@ao@ḍH@r@n.39@Whn.@ěT|ؘ@>P3abw@Wx-_@@y}W@*EMSZ@iBĿh ԕ+@e ؿ4j@э%пCA0@ ם gb@<޿ʫ]@6&-y|ß@gbѿXY2@̈́M:0#̍@8\g4Ck@/l5IHU@Ϫ͟~\N<@j+wd:@ fE?q!K@fI/@'/W?~LX@܇Tw?ϰd@%R?ӄv@G0@9?.]\@ ?߂ @iJ?⬆h@dE#?D(M@Mj?FV@[?a@??M@|&V@?{_I@s"?5@jt}^_?oa@`VԪ?z@W+j?s*@Q}ke?Krz%@J?g#$6e@B&IR?j@'@9?n @1L?X6@2f@H+@S&@?Np:~@"=?̷@"*0U?E@"eV?E @" ?.@"b?R^)5@#D|0?@#:0 ?nY@#Y@x?Wh@#wǸ?񙮒O"}@#_ح?`L8@#4ŗNe?&f@#S]9?vJ#@#qOX7?$5in@#rq6?w,@#Z?;<ϖ@#tҳ?@#R4?@$mq?ߤ?@$$Ʌoi?r[T@#q!?eں@#$D?|ᛐ@#ڍd?eV@#DUG?悾i@$;'?JM@$22LfQ?3rT@$NFI?LA@$j8 ?Ma=@$&q?zd@$HU'?r2LfQ@$C%?L@@$?333333@$E ?ފ@$9?@$Z?ײ-V@$8-b9?B0 @'!5`?T@'!D(N?Ԫ"@(ѷY?ֿ[W>@(' 0j+?Ց7@(Aeәo?`G@(Z$'?/v@(tK:?{ 1@(W?ƒ)J@(-? 1ί%@(?̯Zp@(ؚu%F?%翸 $ p@*TZWwd@*k~$UqK@*bb˧QR@*FƱpO4@*q?`sW()^?Ho(?_ô(vV??Ѣ(US?l oTL(5`A7L?7~(Ѣ?Fs'.۵?a'}9?W'i? ǎj'L?툹wr'q7?3'P)k?~|ᛑ'/0X:?"쪹')sБ?q &1z?9Y &IV?0J&{?km&~+U?&h/^ G?@N&FԀu?=K^&%j?Up &7 ?`sW%om?d,%݂u? |Zr%>p?8Go*ZG%}?p0#̎%[uy?򧰳d%:/l? s%@q?$_ح?K۠&$s?_Ë$yQ?k;<$sWp?ҋm?Ë`k{n?Sn\?f;Ӹ{?ӎMjr Ĝ@5IP8K@?Jwp:~@kC,zŗNf@D">u䣃'g@BYW@Eb,I'?@FdF@ǣ +j@ʁtZ@m/QCr@ @.3@Q֌i/5@T:Y@'#$6eFV@0 ěϪ͟@: RiY`X@F6&-SP@Z?j{@{L0 )@8q`I D@,&,<@{@I<`݅!@\}At?&k@J|Zq GG#@@ #cW@7!< :@YJ  $ p@- !|Q@݂v GG#@Ր*@?R&Wt@'RTSMj@( @_ôNe@rGE8poiDg8@׍O;d@?Nuy(@ {{l"h @ :w,zxl@ [R}A@ :qxB1@`sWn@nOv_@R<6Vaf@?ѿ$T~@IW[ @"/¿L@%ڹ_ô@)ᰉ'Ve@1p)r\@Q;K@V. ),(@Q.Ƽ2fBZc?ke@gw?۠&@앿?K@?eV@&kȟ?@c^J@.~?6;%o@4?,zxl"@7ʁ?Y@;{ 1?sP@Ay|ß?1@h?H@q@uy(?fv@ym ֶ?jJL@XbM?ޓ@Z:э&?o^ s@X@?O;d@Vr2Lf?28@T?/n@'76?演pd@$mH? |[@!$5?]9@d8q`l@[-$5i@Б}k?2LfQn@1?np@ʫ]?ǂӄv@j@?ϿT @2"?Շݗ+@uMU?Y@|o?WiJ@j@?Q @D=Fl?͞&@޸Q?0@E ?B¤T@ԯO M?27@v_ح?݂u@f'?76g@!Bo?H2 F@ӄw?+C@6f?7`@d?fWx-@"'?6P&@^t)?\)@Hjܱ?S;w@?@>E?7ɚ@ >lLY?fP@ݗ?D _@1o?}At@1?IOQ@pEwUq@)@g\лn@i}@^?ײ@ 4I@Tw[0@ űH@Krz%@ V},@A>@ $ xG@7@ y8R~@-e@ (wN'@#'gM@ LB@H@ +ȟA@e@ ;Oag#@`k@L??`@>?{ 9&@m(@.]\@Ր?>WS@n?UqK@;5*8 ?ŗNe@p 9?a|Q@]9?f@At>>?|O"@ A0H@?_eU.s@ &q?607@ 5IP?J"@ \g*?@ <ϖ?hh3*@!9&A?3H+@!:hA_?2_@!]s?ѷ@!@N?Crq7@!7Kƨ?wk@!Y >?qA [@" >!?>E@"-KHӮ? Nʗ@"N6?o@#+ ?v@#HzNz?Q@#gm?D@#1.?VH@#{?w+@##?Ov_خ@#Ho?n@$- q?mqbc@$ M;?nVX@$=L?49XbN@$\ (x?61f@#JA ?z@$J?6@$6?-*EN@$T[ ?G@@$s(n? .}A@$R*o?S?#-#@$eU.s?!-w1@$^J82v?P@$BE?($Jb@% Z[)?爏`@$$5? RiY_@$G0@:?m@$q"? $@$xl"h ?^@$K]d? b@%E?䇓ݗ+@%2B? P@$Z?~$@$?CA0?fI<@$\ y?ud0+@$x2 F?LPr@$d0+@?͞%@$e?پ"@$J82vu?ح-e@$BC?ךBC@%ŗNf?ֆYJ@%"¤T?p =q@%>9C?Y!~@%Z)s?@NU@%vo5J?%1@%&q? k~(@%4X!?ײ@%.3?͘R~@%X ?W>6z@% ?D">@&vȴ?İ@&5Ne?~|ᛑ@&Pr[U?0OX@&k-M@$?'=["@& g?]9@&L8?c @&)s?طVC@(IQ?׈+@(&?W),@(ڪ:э&?$'(@(6?=@)Vu?һnwpz@)'+?ф#π@)Ado?K@)Z?"?@)t4?˪͞&@)Y >?/ej@)^"S?Ʊ2W@)CA0?0#̍@)?8q`@)7?H@* (?3]$D@*!n?CcH@*9Ë`?uy@*QiB?3 @*i䣃'?yP@*lbsPH@*[W~Fzd@*C'|E˼,@*W)\g*@*ߟf俵OB@*&Im\@+ |,d@+$n?~Rv) ׈?)r(@x?4m9(ḍ?Jw({J#9?~"(@4?6(azN?zVC(@c^J8?z@c(>p?s' WS?=f'|E&IR4?v &'[0H?}Vl&TuL?p*%BY??>%"S?UGZ1%n?#y%|¹M?™؃4%Zu ?h%8"쪹?.h]k<%\(?cOI$V3?f'|F$3rT?_Ë$WS?R$Ƨ?5inX/$i(?h5~$FM?B$#ȟ@?ιvݭ$th?#:}O?3"#a?d+#{0?^ N#u?#R\(?Fze#/ws?'\лn# vJ#?W6&,"Y_a?<`"1.?~g,"m\?2m"T ?Y"\vJ#?@98q"9#w?mY".r?ިc^!\=x?ǙXd!灃?)!jf? DU!@?K!dPܜN?v)Ie!@?o!q"?Nx _a(?tc4 էK? PH?gSP:~?PHgM3H?a%?7VCu_ô?X앿E,??z$LD|〈P?LB`V. ?nwpzQ6?v ?5*8 tq??uTuL?9_+Zy@o~L:@ިc@ :э+j@)?) m Z@/-V!ohی@1L\@/wY@/*ZFs:9`@4پM̷@;:hAr2M@>KriY_@<Q)?) E@< # @BfQ @MsJ?@[{ o?R&@l7`]yY@do@Y >qxB0@d9G @o~= [6@Fze@@Q_>'@98qaѾo@O<R<6@[T_m3 A@e!Whם gb@ohۋэ%S@xB0M++@uy(BjF5@L_@#4Ck@f%@x@7?) @v5B D@iu T@ eA݂v@)7~y@;yR4 @9=b͉/@)nX/E 6@#{ 2 ě@$= $TɆ@"&q oIV@Ϫ͞ R<6@4@2IV#-@M?+@ :(#@#ŗNOIH@'B@/%;:^Ր@?PܜN@O"}L@X{5+bh ԕ@]IQ#@a|Q- $ @e@xWCcH@g!Whwpy@hۋq S&@i^ڹY@mHQkP|@sH+_P]@yY U=@T Ǐ*@)4ڤ+@Yt[͉/@?ӿOIH@Ck,@%ٿУ'gM@ȊHdz@"忻8q`l @ ٔ[Y@m?zxl"h@>BZ?- qv@?>?ɽs@)*0U2a?($Jb@;5*8 ?׉ Z[)@NzVC?*1{@bm?X%[\@s)?r2Lf@~2f6z@ ?b9m @e@y?> @LX?;:h@eV?@g,?wpy@>-b?䣃'g@OI?a@پL?WsPH@7 ?fQm@x?O M@v;%o?A@Nuy(?2m@?P3:?ʖ\@4cI{t?֏6@-t?ܵ5@(%1?X6F@)> ?p:~@+ʫ]?@0 ?+@.@?&IQ@,>?tT@*9m ?@(9-*?CA@%b?.}A@!bw?{J#9@q ?/nV@?[LPr@Jm?@+ J?ﲪ@bw\?_o@'!@~@ p&@~au@ ul@s2@ @iN@(9-*@^ygt@ @Stj~@L7ޔ@H;D=G@&k@?]k;=@Ck&?Cf@[ ?'2P]@@4? (wN'@a E?8Y@.Vu?D*@tJ?'>E@_0X?եc@ ׈?.@Zݘ?D<@p&?gw@d?ZIf@jv5C?.@ x?tI@X?6f@Eoi?}A5@>!?CP@9C?}H˒@cI{t?NFIl@ThM? VE@?[k@,fX?]q@濇i-?<`@P*?X:S@X?-Z@ /?oh@+Ƨ?|ؘ@Q |Z?!5`@pd?K@r ? ͳ}@cOJ??@ H+?!!Bp@ eO?Б}k@ >K?|o@ Ne?JA c@ ? (x@ KZ?bE@ ؃4C? $ p@!6?z$LD|@!`=B?Vl!-@!oiD?#M@!{ 9?q6@!7Ȋ?5Tu@"o.?j@"4Ҳ?ej@"Tqj? ҉@"g{?.2@"u;K?)^ @"A [? $ p@");?cڤ@"W}W?/@"'gM?kP@#g?f@$6?a E@$j?-*EN@$C]?KZ@$"S ?oiDg8@%?D@*F}2f?> ;@*_B9?ź RiY`@*xs?1o@*27?v @*9m ?/{J#:@*é*0U2? 4\@*LYt\?@*Ѣ?f{_J@+ ,{ Z?E@+%inX/?}A5T@+=u{5*@+Uy(ڿ@+mKZ5*8@+*6;%p@+~?o)U D?ws)37 ܇?nVX)NQ?쪸[(2^?jOv`(o?ŗNf(H?b}Vm(a?u(k%o^?,2"@(I|ßa?irGE('ŬGH?q!K()k?',!&'d?1&9.?;/V%O"}?q`l o%Zp?=[!%i?ܱF^"%z#9?N;6%WQQ?Fzd%4qxB1?z%n?Se$ ?⌽D$ˋq ?l6##İ?`7 ܇U#)k?j"܃fQm?*""F?~""*0?2^"qSy?Dڐ"Mv?q |Z")g?%"\(?ɥe!N;6?/ej!/^ ? [6!ԕ*?KCV!u.r?u!R!Q?]s!-*EM?GNΚ! ^?( *8?n np?D(M a?laR*o? xP*?;'j S/ek? $ /?˧2P !Z? .}UhƓ?/VϫW}W?U;D ^?{ 䎊?ٔ[l7F4?Ŷv _z:?@'P%?uy(?2B puO?U5Q/9>BZ?x>-bO4?qu!P?Ć-\hr?߮@#x ?ELD|0?"}b}V?CV35nh?ckhH?doR*o?S?-#OW.Se? 0j+ {?R¾i?B xq`l ?f;.ʖ?n@ѢY ͳ}@1A [8 @0ƿ׶@/ܜMӨM@,-x?)@%1[!Z@1Ph ԕ+@/iDg8ߤ?@Dڐ?p =q@FhK?|@EwUqL?@x@MEv?y=b@d_Zjj?س=@+ J? /^ @?.3@},?puO7@=x@?I< @KCW?)r@F?!Wh@)r?Y!~@͞? e@i?&A(@($J?=K]@?(\ @ty?vȴ@x_?5 '0@wpy?C$@ {{?6;%p@}^_1?a=1@A?:э&@}?xB0@?Z1@X%[\?@PH?C@v?sbb˧3@S?VI@@j?t}@3GO?!LA@|?>pu@K:?07@?m3 A?\¹M@l#?砺K@tqp?@pX:T?Y @n@?>(@lzxl"?Q֌i/o@i̷D?g@i7~?X@icHj?'j@@h$ xG?`"&r@f'|E˼?Y5;@fI6z@g,@hr Ĝ@W@Ov`@Jﲪ@f@>//t@Z,<@2^@!~|@%o]@؃4C@6@ X6@@4n@=ѢY@8YJ@;:hA@~鷿@8>-b@ 4@|лnw@R?g@Ŝ @u5@Cy@eF L0@V@TCc@Y5;@A\@=@yЦv?@S?)4@QzN?dḍ@3]$E?,'@7}W?ƈzd@GNΚ?S 5@&?~\N<@?^z9@^iB?Ez$L@,WS?Կ @"u%F ?{ Z[@#1P?>=Ć@#*6P&?r(@#H*)?d@#c:}P?G|@#) D?N%;@#Y?a@#i;y?zcsm@#/m?zcsm@#ue?/D)@#j?H@@$*0U2a?puO@$7,QI?Q@$V̢a?P3?[[@%R{m??>@%q?d8@%Zq?m@%z:?Y5;O@#D?&A(@$QCr?Xy=@$.P1*") ?FV@%[҈? Nʗ@%y|ßa?K]d@%q?z@c@%g8}?2I@%ѳ(o?䎊@%mH?ڽD">@& %?٦a(9.@&(a E?؎6F @&E'(b?thM@&bm?Y!~@&H˒:?<64@&bw]?@&H?o~=@&ԞD?yg@&D?иϿT @' ϕ?(zc@'(#x ?7ɚ%@'DK3?ʋm@'`Zx?8\g*@'|@\?XOLnn@'9?É Z[)@'5IP?,{ Z\@'΅3t?|o'@'|?V. @(ŗNe?1&x@(r?mt@(:??L@(U@x?;Oag#@(o9?cUGZ1@(JLCrq6@(11P@(wpy濬tT@(앿E8q`l @(>P<ϕ@) [?^ N@+tj?k}9@+?"&r@+76&,?Q@+PoiDg8?@+i?U5Q/@+2"?%F L0@+xW)?u@+`d?bh4@+x>?{@+2I?Bv@+uqp@,*\|?bM)T~?`G)fWS?S(@x?*(4.۵?6&,s(ɯ?[a(rZp?ʂ(PϿT?~Rv(.r/? M:( #y?H+'K?'M3H,?tT'Ѣ?!.'CV?//s'_~+V?h ԕ+'=?󠅱H'NzVC?أ/D*&S?bM&ԻM?G͉.&iB?~鷿&;?sg&k%?΅3&H1e?!͉&%%1?WS&W?~($ x%ߟf?_E%g*?׈%$')?)k%uәo/?]|%Rvtc5? 4%/ M;?(M% xW)?0${5+?)m$ĉLD|1?[T$ܜM??$}IQ?{ $YJA ?`,$5v?@~$s?Oag#$#>lLYu?#̍#^5?|?Ǹ#s?ݗ+j#~Rv? ?>p#^|ᛑ?:`#:o?R&?hM#WiJ?Ov_"4n?a@N"*?0#̎"Цv ?"!R?H*")"aA [?tqp"7ޓ cI{?e+ Ew? `N?g l <ᛐ?پLI( ,?)rT~?%F L0`V. ?JPU2a|?oiDg89䣃?ݗ+kߤ@? qR~R?k'#ρ?8Ck$D?"HG^?EoiH3)?gW v?A!la4?9m hS;wG?@W?!-wz$? yЦv!!Wh?-Z< 7"?M_Ë??l-`-?bw][k?cI{Se?Ӯh]u:>/?ŗNfz1 @6;%o.T;@gT}9@;dZbM@-|o'=LEx@2q6R?g@@S#Xf'|F@N!Bo qu"@[nCzlaR*o@[$\쿱[@^Q1&@`DU6C@cD=Fl;0$@k[-M@%0@9@yHU'(5?|@+@^q@ ٔAt>>@=Kn~@`Y7@FsB c S@OQ0NP@l>:p@y k~&V@yPLC@qxB1m@{&@/^ Ȥ~@޽wh@[W>6>=ć@?) ͉.@]U\ fQm@,zxlJ#9@ l-%1@jKr@zGhjF@6 ;.]@#  _Ë@+ud0+A _o@3u:> /mr@CB¤ d@ggM3H uIHU@q A@V. ;:h@C,z Tpd@s @6 0@98@:Ō /@o'=\Z@b}V4m@?!q@lja=1c^t)@ͮ>lLYs)@(߹9,#@}W@S$^5?|@f:fi-@m3 Ay}@Mueb@Cr2ǨM@DlvJ sWq@F`V.u?@GthȚu%F@H[Te+a@HhbғJm@IGNΚrGE85@Ie1zN@ >lL_o@o*ZFsᚕBC@`kz]lC@A\n@#eO=B@Tʿn.3@9rGE9@eUſW}W@2a|ڿݖR<6@.Ǹg@G͉.iv@\(\?tr@c-#O?҈p@V??4m@<ß`?-_@'n? Fd@f?P8@*\|ؙ?1o@O? @u:?d=@RJm? pϿ@R<64?q @VWiJ?VWi@\yg?d+@^`sX?X@[IV?mǣ@T[l7`?mHQ@J{{?pO4@D`kz?R@ATɅo?$@>E?`V@; ?D2W@8vF?xF@5%F L?B@12W?^t)@.Y!? /@*Ov`?J-`@9? @XdE$?C,@%[[?yЦv @61? 4@bM?d̢@̢a?,QI@KH?@X?yP@Å}3?7KƧ@lLYt?- qv@LW?^@g l?>6z@A_E?$ xF@E?jt}^_@ ?bw\@pP?jv5C@8\g?#̍@ѷX?~($ x@p ?;'@ېn?sw[0@`A?{T^@Vϫ?U=@? ě@k&?0@LPr@7ȊH@Y@5h@ m3 @$tS@gߏ@@-V@MuO7v@Wh@<@7u@zNz@i,@d7@ >l@N`sW@uM@ϿT @@v_ح@) D@%ڹ@t4@e@x@irGE@ RCQ@]k;=@ M@R*o?R@ ~'!W@Fx>-@  @ңS&@$Jb#@ƈzd@$@9`@&kv@Q@ {5*8@Ѣ@5Tu@E@Ѣ@omr@CcH@Z,fW@]K]@J@8YK@WS@5\R-?qK@~n?1f@zd?9@FV?x 7!@[=K^?X%[[@yU?7rG@@gKI@@~5?|?ck@{0?Crq6@Փ_ô?/D)@?kP|@Wr(?},{@jj%?B@hI?6e@4?S&@PL?l&k@?3:}P@T^?*:э%@ ?Ҟ?7ȊH@ &af?!-w1@ B[T?f:@ ^iQY?ۋq @ }9?@\@ +?K@ I?W@!V5B?/w@!?R&V@"C,z?Կ @"@x?t4@"h9Xb?A\@"yh?do@"mqbc?//t@"i}?$ p@#"Y?pO4@#C{ 2?X6@#XK?hh3*@#la? M:@#Y?π3r@#x^?]:@#'j@?PgT@#!Wh?m@#i?V. @$j+?$tS@$(Go*ZG?.)sБ@$AP?Q@$_`s?h]k<@$~%;?s4@$|ᛑ?4$_Zj@$=x@? @$3]$E?Z@$m?LA@%#ᆘ5?g*d@%4}^_1?(c^t*@%]%?~=@%K3?R?g@%XCk?ښIf{@%FJ"?m@%fL/{J?c*cP@%76g?&Ԁu@% ׈?+C@%l?@&+e%?XdE$@&HW ?1&x@&f#-?ϕ@&9XbN?$@&o6?ß`O@&?٩g@&j~#?؎ 4Y@&?q!Kr@'-f?RiY_@'3;K?27Ȋ@'PsWq??>q@'mAt>>?1z@'OQD?K]c@'jUp?С͉@'ӄv?MjO@'?̟h3@'Oag#%?IOQD@(`]x?EwUq@(3S?œ@(O*ZFs?3zN@(jŗ?Q@(}2f?8K@(-? @(Vl!?+U@(ؔG ?O"}@(r2?FIl@)cI{t?bb˧3@))[l7a]Sn@)DV. K4@)^< ɿ֡af@)yx󶿮T:@)٩T!yUD@)翹r @)9-*ae@)8WS%o^ F?A(%KZy?Y2%'+? %\N?;yR4$4?lvJ#$?ײ?`$/V?ty$s?`N$OTK:?,>$+ /^?\3rS$S;?'/#a|Q?}#s?#oiD?$/#u ?B74#P#̍?p 9#+[-M@?}At?#KƧ?'>E"⡵͊?/ej"(? ٔ[l7"/n?L@"te%1?wY"O?"*g ?۠&"˼+?d!D?@~!۠&?H`V!Ԁu?q,'77!q2W?!Liu?\!'r(?cHj!V?08 Z?7` ޓ?^_0X VW?1 m@$=?cI{ G?*0U "~Rv?O7u1'?,fW/s?>6zd*1?b˧2P&A)?u?ki?7ޔ7xW)?."h ԕ??K?32U?|h?U a?vȴ9X Fd?AJM+ryQ?2vtc&i-?dE#@c^?-8Go*@ $Jb$C9@\|ؘFze@*[B@jU@9+_+@H ҉@WAJM+]cf@f[ z`@tc4.SeX@n@.ƼS_ô@IWIm@LX@PR{5@6zzxl"h@۠&F@e+l#y@b`:@a|QғJm@fn/@ RiY_98R~@'(b쐁?@  |Zr@+JwS2@4IŬGH@<쿱[yg@DB1pv @I"ul@<+@ye%1@ M;rq6@$/JM@?>WrG@'lCXy=@0y+*EM@8>-b?@@)k'j@@G VX@NzVC3"@W9@bk@n>W @yHU'(> (@+ʫ 6;%p@B9C  gb@n z2_@< ﲪ@,( ]k;=@(M )^ @[6 OIH@/Y bmHQ@iJA ׂӄv@Ć- )QX(@aa@N@+FV@9Y;@ia߹8R@Z1S#@ [VY@_pbS 5@{GG#@#Jf'|@P ,l@sg}`N@^v_ح@nma͉@<!R@08 @@ 4e&@DR?h@ $ p;Oag#%@XdE$C@% @DlvJ@/4֡aD*@3>WS{sպ@9dobIf{_@CfQm޿&f@Uڿm@l5Ϳպ@{J#9ٹ~($ @D">iQ@:w@͊qbb˧@.r")@A0Pr/m@rz$ M:@g>E{ 9&B@a EbΏ%1@h},{ pϿ@ђd2?X @[BE?z@d@a@?u:>@)r\?,QH@cI{? @F4?@(b?^5?|@[[?ty@x ?;:h@|Q?Up @o?􏥏q!@N ?s@T? @f'|F?H+@=Ć.?Tw[@1zO?d@NP?ݗ@.?Cv ׈@]cA ?_|@puO7?╪@%$_Z?LB@#cV?"?@%灄?ݖ},@)`?ᙄ@)u ?0X:T@#x ?搁>@ L8?辠K@!R<6? 0j+@eU.s?a@O@n~?@k&j? @ jOv?4֡a@5?ud0+A@ޓՑ?TɅoi@ֶZ?)^@hƒ?ue@ӳ?`@zcsm?_I@y|?wkP@f3?7AJM+,@r\=x?7`]x@ ׈?p:@%1L?k@T!D(N?ިc^@\=x@@qί%@SeXO@ @V#@&@F?@R~Rv@3/ek@ag#$@%1@@Ë`@b>iQ@ @2 F@@\@yR4@.S@Uᰉ@|E˼,@̷D@>@TɅo@*o?R@ [l7a@+ I@ l@#@ IB @D@ 7@u:>/@ x\g*@@ 3r@~@ JL@D(M@ AXOLn@ [-M@@d0+@@?@N`,@J"@(z@`@v@J@K@jU@pP@[-M@M:@g@s2@R4@e6P%@^%@VD@ֶZ@H@@Cc@:@>P3@$0@@Zq@ؘ@{@Y@f:@np&@,Nx@Mj@vfI@>p@7T7@^ s@ \$?FJ@ERK?H@ 9?*8@!5`?Zq@]x?PܜN@VϪ? <@ RiY_?inX/@c>P3?UGZ1@x ?pZpU@f?W+@2P]?*9m @q?A5Tu@qX?-#N@X6?3@〈P?{@#puO?zcsl&@g|E˼,?d̢@[T?O3r@2fpu@ 5B?*0@ ߋX6?GX@!SP ? m@!D"?#^@"5 '0? ^@"vFs?V. @"lj@#܇Tw?4@#ݍyЦv?a(9.@#1P?HQ@$ ٔ?3 A!@$&fI?bw@$B>iQ?V2@$Z)s?lvJ@$rZc?3@$?fv@$rG?;'@$bx?pu@$Q֌i/?e%1@$AJM+?f[ @$W?Vi/n@%%2a|?7`@%H5?lBZc@%?ôr2@%M?!@%g*?q.S@%o'=\?*OB@%ᰉ?=1p@&< ?=@&.3?MjOv@$0x?Y2@$Q!Bp?Yr@$q9C?~L@$K?b͊@$Gz?@$-w1?hM@$X?JL@%Zq?k;<@%0MUh?Q@%Oo~=?jX%@%oAs?i}@%=Ć?gS@%?䣃'gM@%7ޔ?`G@%n.?܇Tw\@& LB?WS@&)̷D?c4@&HxW*?JL_@&g1? 0j+@&Q.ƽ?:pd@&0+@j?ౚA_E@&‡~m?'/V@&ěT?:@&灃?#9@'0#? D _@':Y ?L@'X*)?'!Wi@'ve ?ٸd@'k?ؙ@'ZS?yR4@'mH?W}W@'+@y?4J@( XbM?6z@)wkP?k;<@)76te%1@*fQ(F@*迦Y@*8r Ĝb@*S ޿y(@*m>lLYBB@*ިcrG@*fIBZ@ $ q@9CaeU@!'Ry@1bb˧X:S@B I^5{\|ؘ@Qy|.h@a'R5_@qA [*0@~H6e@6G#@CVK@_a=1p@`!D(N@ڹYFs@+yLI(@RT`e,x?@D#̍@ 0j+2W@v DT~@ Nn~@+KrzN@8\g*[<ϖ@E>-b8@QRhۋq@^t)<r@a'RŧK@m=wx-8G@y䣃')k@Kᛐ@`V. O;dZ@[BEMs@LQA [@+@y*cP@;:ia@_vȴ9Gn@iY_a>BZc@q Rv`V@x{0[(@~//tk@z$LBC@:)z}H@nOgŬGH@FsBD*@K۠eU.s@vJ#Hjܱ@r2Li-@xGJw@I'?n@jj% gt~@m 3PH@`V 4.۵@kv =b@ \g*@" ҝ%@ Zy /5I@q ;L@1;.] T@A5Tu;:h@JJf'|@R:)y@X^) =@^X|Q@dkݍyЦv@e灄IGNΚ@UGZ13#x @Sn]N @L܇Tw#Nv@G~mHom@:S&^ N@;yRE@ZpQc4@ 'eәo@Up +@=rQ@+fBRiY_@uKܿY5;O@i;yS?ӡ"S@SeX?m@%?a|Q@_ô?uy)@T?S@}^_1?@ (wN?[-M@$@d3?r ě@??.< @7Ȋ?B @F^"S?I'>E@ ě?a@~?Hjܱ@?>?%b@9m ?iY_a@:?d2n@Jw?YUqK@Y5?Ub@SP ,?;yR4@{ ?T]@a@N?ӟo~=@#̍?؊?@z2_?w1@u:?1eәo@qA [?KI@m^?nCz@j`V?艠'RTa@l]N?k΅3@py+?Q.ƼS@oa?ʁ@i ?333333@`[6?q@OIHV?Wp+@7\¹? 7KƧ@"a?j+C@Z?ȟ@@ 9?7@u%F?--e@2 F??Ҟ@u%F?)4@84֡?(TɅ@#̍@2a|Q@ ܇T@Țu%F@9Y @Ul oTL@>BZ@@Lnm@U@Ƙ5@+@?@fQ@D(M@Ë@wFze@?[W>@lԪ"@HG@b8@`h3@iQY@$*1@ڐ@i@">j@YJ@(TɅ@/@b @%1@XOLnn@e+@K@Q@?{@İ@{a@[l@,s-@< @+a@=@+CB@n @ $ p@Zvȴ@O;d@LT6@>)4@=ulv@p @-Y@PH@_A@ӄw@Y @^< @\(@I@m@Wx-8@qA_E@`,@"`A@;dZ@eXO@#M@}ӄ@@[sպ?X̸@RK?%F L0@+?-@? ?XdE#@?g?@-?D"@ *\|ؙ?o 6P@ T?I@ zu%F ?U=@ _0X?@ &?},{ @ _@?t>=@ a@N?ʁ@!$ xG?s2@!/T ?Oag#$@!)?I@">BZc?TɅoi@"̷?cs@"Ov`?T6@#$5?tT@#nY?{@#f3]?{m]@#m\?K3@#{?_0X:@$Q.Ƽ?/l5@$?{ 9? 7"@$`nC?$_Zjj@$A7T7?f@$Cİ?at@$gQQ?.9C@$ﲪ?@$0OY?ʶ&@$(9-?f3]%@$1;?GG#@$-*EN?ݢr/Z@$NΚ,?Ho@$ŬG?Yjj%@$(z?!LA@%BZc ?%1@%ACrq7?NP1@%_QCr?u%F @%~6F ?e6P%@%n?J"@%LW?(CP@%&?3@&Q?R~R@&4D?LW@&\e@?t4@&sl&l?ʖ@&L/{?($ x@%a|Q?a@$˜a?YJ@$I{t? $ p@%ᆘ5?27@%$cI{t?nO@%Dty?1@%e!Wh?m@%\R-?藷AJM+@%$/?ֶZ@%Ō /?Ne@%$/?^ N@&\R-?ȟ@@&% D?"&@&D{?:w@&d\¹N?앿@&պ?䃐B¤@&5IP?o~=@&}?vȴ9X@&ᨬ\?IV@'a?f:@'?L@'>=Ć?S@']\?[W~@'|1&y?=x?@'0 ?ceO@'?I^5?}@'i,e?.H@'h?]U\S@(n?i4@(1+?ҝ%@(OT Ǐ?ذ{@(m+j?׍ͳ|@(Nʗ?i/n@(W ?BY@(e ?u%@()k?R~R@) 8?sջ@)1P?КIf{_@);;lLYu?JM++@)ʳg ?z9@) e?pd@*BY?\N<@*^ s?hH@*;Y?%1L@*W6f?_{@*rI?hۋq @*$t?>'@*"'}^J82vu@*nhnp@*٩T=@*뿱a@+İ3H+@+1 EbΏZݘ@+LbοCk&@+fq׿Y >@+y|ßyЦv @+$Jb$?}H*¤T?Z1 *o^ F?|G*Lǎj?~Rv*)g?!R<*z?If{_)=?W}W)1?n){?3]$E)y.< ?3(n)Ud?l5)20 ?LW)?҈p;(/ ?c^t)(Jw?OX6(T6?i,e(T ? ;([ty? ׈(7+?,d(a=2?c^t)' ?z$LD'8q`?As'fA??'ڤ?9hH'_o?n';)^ ?SP'Ԁu? =p&u%F ? D _&_o ?>iQY&~($ ?q!Kr&oi?̍2&`pϿ?#&;Կ ?.3&!%_W}W?,x%:A c ?\R-#% '0?eA$]U?hA_$G{?a$?ʂ$P?Dw$[J#9?rq6$6y|à? $NP?Yt[#Krz?F#eU.?$ud0#j+?Pv #zfB?|ᛐ#U\R-?,#/ôr?j# !5`?&V@"tSM?&,s-"X?OԿ "b?ydob"s-?&q"MWw?ʶ&"'ue??"7Kƨ?$'!۔@x?Bzcsl!_ô?ia! ??>q!iv5B?Xe!CWp?9!1o?nP 7?( 1;?M>! ?rq6 5inX?2I ]޽?6;% 7~mH?ިc^t eU@$/GZ1@p:U'(c@#Hj;Oag#%@5 '06F @F)k c S@VϪ͟S|@gqp<`@wrG(@1&xk~($@JA c:}O@>BZcЮSe@+nP@ǎj5a@D76@1.؃4D@?|hK%@Ѣ?>@4*0U@!Whb I^5@/l5/ek@=b[BE@K$Jb$wkP@Y^ )VE@gG @tj~?@_>=@>'ej@ B=1p@$JbR9m@^޾@!laR\R-@ufpO@RDޓ@S Z[)@oz/@D">+F4A@eOR-#@MjR~Rw@fWx'_o@,QIJA c@_Ë*0U2a@?>p9@. B؃@#x䎊q@CP6e@C\ D @rHhb@ZxҲL@sБ}k@{0"!Bo@|ᛑ?>@y "&r@٩+a@?5@&ł th@/. NMj@: CA0@F/Y /^ F@P3:} r 6@WNe Zp@]iv OŬ@jUp ;'@uO7u *g @{5Xy>@V. 6z@7 ܇U[@P ,l唯O @ݗ8\g@>f,s-@#ρڿ3 @Yt[[ʖ]@?ԹhH@f:#ᆘ5@|ᛐfB@tm8/@Z:э&Ίqi@RS&#V@Uk΅)K@W98[BF@Y+}At?@ﲪ}W@mHQ,@u:>/P{@Xy=8 @f3]$@M@$>>'!@*)t (@TK:)> @믿fA@nX/Ek;<@=#@7g*d@0X: @@~+ J@Y}?@9͉.@"RɮO"}@rG#@gѥ;K@{ 9%1@ae?5_ô@,1&y?xl"h @@S#?G@@8?-M@$>@@?2"@@?b}V?,s-@>6;?x^@>+U ?5@=ke?"@<ß`?%P@<#?l!-w@;%o^?ί%@8R}?ݗ+j@/?9.@wr?GzH@N;?g8}H@Ѣ? Z[(@H?앿@*\}?lja=1@P?Οm@pu?T61@t?x>-@`A7?)r\=@̝4X?@Z1?m8Y@puO?`-@[l?gwY@E84?0#̎@Nʗ?{tҳ@ˬq ? @\$_?QH@.r0?Ր@xl"h ?8d@+?빌~($@tSM?tj@*\?@"?^@/ ?,(@JM++? @wN&Ԁ?'&@k1;.^?l5@ZzN{?ĻM@P1;@c^J8@J#9@-٩T"@B!Bo@K3@6fI@d^ N@.c @hJ@-t@Ϫ͟@D\¹N@ *EM@`pϿ@#cW@s-@5K@cOJ@ 0@Q֌i/@@t)<@Dڐ@*cP@@}9@)^@pϿ@ (ƒ)@*\@ a Ec@ /@ E3ti@?>q@ Ӿ"@@ eb@$tS@ %o^@u^޾@ UGZ1@jj%@ -@^CV@ o~@NѢ@a@靈;D@M_@VR<6@A(@FFs@*|Zq@|ᛑ@%@vC-@lvȴ9X@_0X@1޽@Fa(9.@)a@|E˼,@$ty@앿@;D=@A [@3r@[_A?F4@xW)?P]@5Xy>? ٔ[@ Zy?&I@D^ N?s@E1L@Jgb@3-@GTw[@jcI{@1m@/m@Y2@J#9?T^@B~m?UGZ2@u ?,@ ě?Y>BZ@{5+?%灄@`3rT?ϿT@W'?э%@uM?tj@ ˒:)?K@ FWx-? ?@ oﲫ?},@ QX(?np&@ pu?,@ f?5~g@ ֶZ?`V. @!$;'j?A?g@!Wz@d?@!`N?P{@!Q?kv@!i?sG@" $')?hƒ@#=?`H@#>2X?e@x@#uם g?y+@#H?ĻM@# oTK? @$ { ?KH@$;L?m8@#^"S?aR*o?S@#Q?+%@$m?zNz@$B^?++@$jG{?4m@$+ʫ?@$e@y?N_o @$8q`l?ty@$?|]U\@$0?+GN@$UDR?^ s@$KCW?o5@% X:T?׈@%Ee?oܜM@%lA"?]x@%eO?@%ם gb?#ᆘ5@%s?=@&1P?XOLn@&Cy3?L7ޔ@&f<`?l oTL@&m?3rS@&n?M:@&{5?'RT`e@$rq6?h]k<@%"0?4\@%6o5J?I< @%W76??) D@%xƒ)?7!<@%V`?Fs@%n?#x @%ۛf3]?J&@%^#?˧2P]@& gb?KZy@&=4X!?SP ,@&^?IHU'@&~~L?@@&ʫ\?E@&z9?i;yS@&Ŭ?=K]@&v?Cd@'҈p;?6z@'^qi?#̍2@'~&Ԁu?㛐n@'OB?B@'1z?∹wr@'cA \?2fiQY@($6e?@(񂩓 ?nD@)o?եb@)-u?ׯr@)K$?ֈP*@)i?_E@)3?4\@)hJ?u%F@)?"`B@)y+?Ь1&y@)/^ ?)Ie@*T?̒%1@*8:S?+CB@*U>-b8?28@*r%1?S&@*vȴ9X*1 ?x * Sn?,')ͳ|?#)Źb?%F L0)R~R?^*") )}2"?Y)Yᰉ'?t)5IO?%)X?>7ޓ(ڹZ?ud0+@(R4?<쿱( b?ⶮ}Vm(08?7ɛ(\R-#?Nvݭ(72^?-*EN(cV?XbM't?.2'>//?"/'Ne?VD'*?Sy'\!~|?pu'7S?!Kr'vtc5?#ᆘ5&[?VWiJ&Ș̸?p &$?)y&~<`?돛]&Yjj%?bx&4A5Tu?M_Ë& 4?}ڐ%f'?Ր%|0?ݍyЦv%"}? %y ?;쪸%TI?jnp&%.ʫ\?PH% ?) E?sջ$*0U2?qp$y?!.H$Xy=?NxW$r%?{ $Lؘ?!Wh$'KI?Y2$,'77?wd:#D ^?*[B#Q֌i/?Ub#TK:?> #iLD|0?y#C7!pu!(M?d!"?Կ !w)^?j+!Ptqq?Ϫ͞!)y}?!")@Կ j~#@"lvJ h@4 (wN ߤ?@E h $ p@W A-w1@i7~ FsB@zhA_ł@:)zf'|F@N;JD _@\*@pu<@zVC`If{_@FI}A5@>Wçڤ@'!Wu @=[!ZYEv @I B @TO MO"}@ǣ Rᰊ@( @2W@ M;b}Vm@Ë`CQ@$E#N‘?@.O;rq6@8Ck"E@Bi E@JL/{{/V@M5Xy>P@IGNΚx-8Go@G<+ @KW>6z@Raf@Y`>@`ěTK3@gqpNߤ?@n`,Ŷv @u\(.۵@|27  4@g J@!Bo T6@{5+ ;'@XOLnn #@\$ #9@Wp 쐁?@ M.@eU@'>Eʂ@Կ rGE85@䣃'gͳ|@R}A*5_õ@t0@9@$_[@ȟ@:{@앿jX@Fkwᆘ5@L3th@`V$/@+%b@]U7kP@}^_1(CP@[BFn@KZ&A(@ݼiv-v5@A27h@DCA0# =p@Gz9@I<`@4n@K$ pпW@Iԕ* ҈@Ez$LE@>LXR-"@9vݬ?@5/c @2̷sP@/*ZFs⤽ Ri@4i=K]@Ai;ySӍu@N1P 9&A@WֶZٷAJM+,@Y1.@Xם gbGNΚ@Vi/n[T@uRC@B??Ӈi,e@[?ɯ@uy)?ulvK@&?yU@Ov_?T`d@zG?d,@Ǹզ?=[!Z@ܜM?xB0@3t?[W@ڐ?M>@zpd?(@Cdo?6;%p@v6?#̍@Ok}:?Z[(@(PܜC,zxl@k;=?Q@yg?@% ?`,@)N?8K@%LW?n@iB?<@e+?ۜߤ@@lp@P?ݗ+@5~?uO7v@-b8<@Cg@_o @8K@~g,@^J82v@K҈@(߹@@ǣ @lk}@rS@ @ B@}Vm@P@< 7"@\$_@@A5Tu@mZ@?@ +ʫ@t@ SP -@_ô@ -ǣ @'RT@ ɠ'RTa@J@ hzc@ygt@ ե@ ǎk@ $ xG@.3@ IVE@ulv@ gwZ@5_õ@wY@Y5;@{@")@;ߏG0@@*0@`kz^@'/@nD@~@FL/{J@p 7@?g@cڤ@Rv@Vg@*ި@H@q@wp+@9@Jb#@$ p@5Q/@ 'RTa@mǣ@vF@l>B[@&@R@"@Ʌoi@/Y@ej@=@ @ |[@Jw@A$/@+U @ E@Ʌoi@SeX@(},{ @K:@Ffffff@9m@\g*@x-8G@OX7@!6@ @smǤ@<*"@v07@n.3@̢a@@F@tr@x<ϕ@)4@_@lLYt\@P- q@IV@VY@d,@y+@ F4@Zp@'<+@{@Tc4@dzRC@ @Fkw@ݪOB@QX(@-w1@Sy@?@w%ם@"@_U=@7QQ@H@@H@2V@+%@y@ qj@tj@ &.?э%S@ mN ?@ O;d?VWiJ@!UL_?6C-@!T?U=@![W??@!33333?jOv@" GNΚ?-V@".2fW@$b??FV@$+ ?[W@$M?p @$뜶?9.@%4?T!D(N@% `A7?>E@%@=?]cA@%`sWp?@%~cI{t?H@@%?}ke@%1&y?!5@%??) E@%ygt?wd9@& X:T?K)^ @&C)?!LA@&gz@c?8q`l@&N?1o@&?Y@&EwU?:)_@&?T6@' ҉?84֡@&V3?5~g,@&8@?x@%Y?omr@%??;L@%Ov_خ?zcsl&@%"?q@&6?>@&3S&?B1@&ThM?`V.@&uv ?5~g,@&`V?~mH@& ?Fs@&?}2@&lD?@'ܱF_?$/@';]?ulv@'\64?y(@'|?!-w2@'5Xy>?nX/D@'W?fA@'ѢY?`kz]@'C\?Y2@(*?OX6@(=2fE'CA?qxB0'֌i/o?LD|1'|O"?hI'WQQ? A!la'1??;%o^' _?l?WsPH${t?<`$c9?@$/3H+@uMUi}@oh.1P@ȟ@ޥLX@m M;@ί%?`:@[累q!@"}LPr@ݍyЦvP @GN:@"` ě@`:@vtr@#حV@0_@oZp@=W`:@JԿ  M;@WxW)~tq@d p.Cy@p =q%@| 7"=@6z@CJԿ @F]dЦv @Lo~@eXިc@Zx-"@q-LX@|27M%@sջ27@4Jud0+A@G#ZNzVC@+a @>W2^@f:f,<@ߏG0C@/eT6@}H8YJ@;dZHj@;KB@ oTKB @ 6P@8qaC@Y!V@:perq6@Ѣ d%1@9 #M@XOLnn %LW@Ԫ" H@? Jb#@W B@ Z[) _Zjj@\  e@&qb}@(M |Zr@'j@@ c S$5@Z0Zx@o~=%o^@.315@nPH@ZRgw@T ǎP#cW@CP@7_E@:S[l7`]@DUGZy(@wkQ fI=@;yRҿɺ^5?}@ b7k;<@ 9@7uq!K@n\M?@]1zO@S&lvJ@ohیK)^ @a3rT@Syʖ@8- :@Oq!Ks:~@?+ʬ%2@W?) @T Ë`k@ ͳJ!@af{_J@-eٺ B@K#x @6@If{_̾@bXOLnn$'(@ =p׿ $ p@[XdE$?uKۡ@ٮO"}?+ I^@g?{@pd?hb@j@?޽@ ٔ[l?駰d@Jm3?W>6z@hr ?OB@|ᛑ?nmu@g!Wh?\N;@R}A?L_@R<6$5inY@8 Ӯh]k@~@{tҳ?<@xGo*ZG?@ti? Ev@ql? pϿ@oܜM?NΚ,g@q2W?؅ b@vjUp?ڋi;y@ud?a Eb@r[T?7T7@mKHӮ?07@jcO?ʁ@h$ xG?v_ح@q1eәp?r ě@X:S?T ǎ@| #?Zŗ@uMUi?C@n l@M@!+?l"h @!G#?llLY?J@"ŬG?B@"Ϫ͟?f@"d>?}ulv@#$Jb#?Q @#1m݂?$LD|1@#Qt>=?$tS@#kHӮh^?$@#a@O?Ck&@#q"?j@#ީ?u g@$UDR?N_o @$$ŗNe?*%ם @$I+?&@$l¹M?]\@$uMU?iQX(@$>E?$^ N@$D(M?cHj@$(n?&@%;L?_ô@%4?e%1@%Px?*9m @%rn?ܱF_@%61?j@@%@c^J?`"&r@%%[[?{5+@%?}A5@&jf?٩@&<[W??U@&](? @&~z9? 9@& ,k?D@&;.]?)^@&ⶮ}Vm?^t)<@'qj?)iu @'&ZI?Sn@'I&A)?1e@'k$?p@'k?I<@'yh?!R@'9&A(?g@&dn?$5in@&$E?7~+@&GG?pd@&iz$LD?@4m@&xW)?2W@&%?F]cf@&ό?2 F@&d?IHU'@'#x ?l@'}At??8Go*ZG@(e?粪9m@(>cI{t?,<쿱@(_+ʬ?&@(7 ܇U?>'!@(ѷX?唯O M@(TɅo? Nʗ@(ὥ?@) /?@c^J@)"?g?jF4@)BZc??ײ@)bZc?Q_p@)@4n?7!<@) I^5?4AJM@)?&@)R*o?S?i@*)^?F@* (߹9?ty@*?m3 A?>-b9@*^Ց?ۙË`@*}o~=?r[T@*27?H˒:*@*c Sz?@*f'|? |Z@*̷?Ë`k@+0@9?ԔFs@+5q!K?c^t)@+Sk&?0 7@+qn?KZ@+OX?Ϗ@+u?"S 5@+˹~($?ʱpO4@+iu ?=x?@,3]$?%@,$k&j?MjOv@,AD(M?лnwp@,^n?3@,| =? gb@,uy)??@,'(b?a@,ҐNQ?ѷX@,) D?[($@- $?r(+tj~??LPr+_6&,s?ynD+:v?th+f?(*Sn?&A(*͡"?_Ft*+ ?ӄv*|0?ϠQCr*_o~=?th*;C,z?> ;*U\R.?v ) |Z?>)̜M??sl&l)%ם?^ ) ?OX6)]B?;')8},{ ?>//)QX'?*ZFs(iQY?#(Q?W=(y3?bw](~iQY?rq6(X[BF? ě(3&?%i4/( B?X:S'ŬG?6&'XOLnn?tT'a?-b?{z#A\лo?ulv#ݘ@a"UGZ1@&A(")r\@9*\}"ڐ@Mqu""}ڹZ@`L8"V1.@sMjO".Κ,f@g"`]x@^)!h3@P{!eO@OB!D@Կ !iA!la@P3@LXq |Z@TCcܿM@}W˿j@m3 [-M@ ,k\¹M@ĿCV@&q. <@+jտ_Zjj@BEBB@qu!?) @e+Կ@e+a{5*@VC@&@3g*cP@- ?i4.۶@F4A?rSn@6z?ܱ2W@ E??ײ@>E?9C@'(b?(߹9@bM? =p@.r?{0@- ?fP@jv5C?#cV@ȟ@rz$@t>=ſg@P%?|hs@,Qi}@_r2M@!laRa@N@<+? b@HU'?Ov_ح@2I?)k@w|?PH@6P&?R<64@w|?ݶE@ǞY?8 @[l?'gM3H@E?4֡a@{ 1?9m ֶ@1o?Vt@a?%;:i@7 ?7ɛ@Q֌i? @cHk?T @ |Zr?^@4m?]N @t}?< (x@K3?@hJ?W>6z@y䣃'?}H@r E?$LD|1@mU=?򐫴NQ@k ~?灃@isБ}?-`@i}@98q@gG@&B@a͉@^#@Y_o@qu!S@Rd2n@=Ć.@Xם gb@{ 1ί@|iu@inX/E@n/@}ke@P3:@y(@t);@[q @dḍ@ӄv@V|G@.@Mqu"@GJw@[0HA@EwUq@a@ \@Mj@ Mɰ@L_@ 7 ܇@ZR@ ʁ@wCd@ A [7@m|o'=@ a@N@O3r@0X:T@HӮh^@\g*@G @8bM@xzNz@¹M@lEx@do@_*c@$?@R^)5@fi-@C,]O@IQ@32@\N@;dZ@";yR5@ E@keA@Կ @łU@nVX@$1@X5@qx-8Go@C$@¹M@1!Kr@әo/@'ڤ+@Qhr @)ᰉ'@J@,#@6z@(H@55@Zjj@~<`@T`d@> @8@r2M@ם g@`jUp@dob@@a@N@M:@䣃'g@@#M@TuL@t>=ć@Dg@c @2@Q֌i/o@#@@^_0@1ί%@.`,@@7ɚ@~=@ =B@0OY@2W@7{@|@t@?>p@2^@T Ǐ@(H@}<64@BE@@@eݗ@@"S@p0#̎@ ,*"@\#-#@ R`@GG#@ w@-݂v@ '(@ Z@ ,QI@)sБ@!xW*@P@!3@`@!_ôr@{0@!e@@@!@hXy=@!Ԁu@<`@" 4X!@Y@"CA0P@ łU@"r^)5?iB@"zd?rq6@">lLY?oܜM@"ǣ ?پM@"- q?š@#A c ?T~@#/?ݗ+@#P[6?Jw@#n? ҉@#Κ,f?_@#bh?Zŗ@#݁v?//s@$O ?Ԫ@$-nY!??g@$TD?@${[-M@?F@$fl@&&?,?@&L?lC@& ;?P1<@&F]d?;D=@'w[0?h@'#eO?3mǤ@'E=K?_@'gK]d?;wF@'??Ԁu@'ڹY?zd@' #?KƧ@';D=?&A(@(x^?6@'¹M?@&@'Q!6?KC@&|?}ke@&8R?@NU@&\(?ӄv@&M_? @'z@d? >lLY@'*v5C?>@'M)4?a@'oiDg8?򐫴N@'͉?6@'?pd@' V?1zO@'zc?FV@(<`?@(;k?i/n@(]?u%F@(8Ck?do@(:p?{@(;yR5?x@( ?l@)ڐ?j%|@)&t?łU6@)GhI?X/D*@)h sG?Ѣ@)?D=Fk@)8qa?{@)VWi?,k}@)6P&?`N@* Y?nO@*+NP?#π@*K$?ɯ@*l;:h?e@x@*#-#?Կ @*]U\?CP@*ty?bh4@*뜶?=Fkw@+ 7ɚ%?]9@+*Y?RJ@+J1'?@+ie+a?٘JA c@+եc?kP{@+~+?WS@,_Ë? e@,}=?͜8J@,W}?'gM3H@,;'?ȯ0@,{?5?|h@,v ?÷rG@-a@N?7KƧ@-0C?gwY@-NY?ZpT@-k2P]?H+@-M?J#9+X ?4r2M+9?nN&Ԁ+?\лn+f9䣃?:+Ag#$6?a +??P**>E?eO*ҐNQ?LPr*^_0?!.I*`V?-Ր*c33333?dOQC*=U\R??*mqb?gS)Nv?oiDg)KHӮ?;/V)mqbc?pnC)-"?=)]R~Rw?)7d9? )޽?@ $ q(=x@?s7 ܇(p*?z9(?b}(z:э&? ҈(T=?=x?(.Ր?o-V(R}? k'yQ?v'K ?.4'y?3='oT Ǐ?cI{t'Io.?]9'# Sy?„1Q&O"?l&J? {5*8&?N<&a E?}ӄw&bT`d?1{&;$?n~&mH? %?2vtc5%?Ҟ?^޽%[6?.}A%yjj%? ܇T%RnO?⡵͊%+dZ? /^ %OQC?8)$-e?cI{t$y|à?M:$ƼS;?ue$gd?@N$@0#̎@#M$Ӯh]@#laR*o@-v5#HU'@B I^5#yQ@Vt#zﲪ@i4.۶#SY5;O@}{ 1ί#+<ϖ@ɯ# xF@E#N"UDR?@py,"y@gb"?@9"dw@{ 9"=V@`,"!Wh@:!)r\>@&z9!'!Wi@8P3D@2`f@B I^5.SeX@Q4J 7"@`1ί%\$@ohۋ: |@}v},{ @#yݬ@pTE+a@%1j@@FR<6@\¹NOIHV@?|@uMUi;y@쿱[W?YO"}@+S@6&-\R-@cQ@ A7KuO7@,5np&@81el8\@Ez$Lr@Q 87@\}At?tm8@hb!!laR@s|Ŭ@|UDR?@(wN').}@ >lLֱm@o~=@d70D@% b@W}W͞&@b7AJM+@)Ig@ܬ1&eәo@76g>*") @5I6P&@Ck-#N@9nDs@BFImǸ@L_Y`@T&qth@Zިc^f@_P]e @a=1pue@aBoj@@`ěT g@a7U'!Wi@b} R@d~鷿 4\@fL/{J fp*@gڤ+ K3@iJA H@l<쿱 >p@ol5 Q@qڤ ;¹M@ołVa(9@hF E@^ svr2L@T,<eU.s@J(wN'D">j@Aohی@;dZxW)@9Y}D(M@;,]V. @>($ x>q@Adox_@EݗWp@JlpO4@%F L0b@T:Jİ@'ڤ+@;:h쪸[@!-w1|o'=\@0U2a|gw@[=K^($Jb@Ov`xLW@*߿jfB@9C-Z@LƿKC@2Wr2Lf@mr/m@-As@GO+U@$5i{J#9@e@yohۋ@)~+U6C@6x@=?TzG{@ D?u:>/0@`V?cHj@{?Ԃ},{@(c^t*?=1o@3T6?nCz@@uMU?~鷿@I{t?礓ȟ@@9Ma?#ᆘ5@Jw?́ZR@81eԿsպ@O"}@竿H@q@ud0+-V@>BZcҵ5@P]ZqxB@=BpO4@+1;.^?.@0uO7?ZqxB@/~=?D@,[W??3H+@'d?a Ec@ V. ?@ɯ{?1o@g?w[0@Fs?LPr@61?yQ@DR?h?TɅoi@XdE?Jw@!"S?+?ײ@'G?zxl"h @%&?W>6z@ѢY?0 (@Lnm?}ӄw@Ǹ?ǣ @Ŝ ?:@/ej?``G@nC?Կ @??@b?A0O@W @~L@k@:@@ >@2vtc@>@kP@JA c@ͳ|@AJM+,@nwp@X @v?) @ @d?@G0@:@YH@EU5@_]s@H@O"}@IQ@N@Fd@@1z@q!Ks@d@[-M@ 8{@y`G@ ޸Q@oZp@ [-M@g @ +&i@s7 ܇@ $ p@Cc@I'>E@$TɆ@jf@}H@Sݗ+k@T!D(@W@8@Y@wFz@]Y >@Ѣ@SP ,@%ם@JE@F4@GŬGH@8J@g@<`@e@x@LT6@$_[@ LD|0@Wh@+@jU@VZI@ߤ?@ $ q@1P@~"@csl&@3d3@ p@{_A@Pr[@í^@vC-@ ^@d~鷿@Xʁ@UWT@' /?cI{t@'ôr?mH@(m?eәo/@(5bh?@(Xzc?e@x@(z_?ŗN@( Z?at@(`V?z9@(ҝ%?[l7`]@)a=2?6&,@)&#?R}A5@)H' ?Nx@)j/l?E˼+@)}9?vȴ9X@)4X!?6z@)P@.CcH?5I,%1?(,v ?a=1p+ۋq ?+e ?ѢY6+*ީ? VE+k.]]?@x+F?wN&Ԁ+!$Jb#?@* $?6P%*($J?f3]%*8?QCrq7*ﲪ?̢a*eWS?Y>BZ)yg?()ޓ?)R~R?D)[ ?' )5?ZY)Ys?%R(7~?>p(*? (`?"}(uoiDg?Sh]k(Os?oh((W ? '0(O"}?@x'ۧ2P]?"0''(?D'0OY?sg'g_o?m'@n?т '}?˒:)&f#d{0@dZ#<_@3t#m8@!|Q"9@4I"do@FپL" $@Ye+a"sV3@kNP"JD@}b""p:@Կ !/l@Kr!ё@MjO!}@*0!n@Ov_!W+@M3H,!/#̍@LW!nCy@ "S ݯ@_o [ @*JL  y@:]y c7!<@J{{ :Q_@Zjj& `l o@j)sgT@z^5?|~ʫ\@r ,0@;:hڅݘ@h3*F@k;<58K@DR?g @w[0$Jb#@x >@R~R1&y@_a(@_o F-@ߏG0@ݗ+k@) }@7,N@DlvJ @Qu+@^Tr2M@kud0+Ao@x'  @">j[G#@$tT{@)r\>]r@*0U2aa!Bp@ .@٩TY}@/{J#fQm݃@ׂӄvf=Ć@@NU :@Hyh@=Ći4.@[T> @;<Sg l@Up D(M@GG#[ߏG0@@:~ᰊ@ D 'RTa@S| ałU6@P3: sպ@") +j@ƝsB u%F L@ɯ{ ?g@bw] /O M@xF] cI{t@"ߤ@nwpz\X%[\@tqq $ q@ :@Gv@SPe@cA 9|ßa@SnV. @u!iu @mHP@AJM+,C@V?B;yR5@h]k\F^"@ +GN@y D">@~ߤ?ɿ+U @y8JܜM?@nCեc@5;Oake@nc B@WiJ]r/@*84n@ӿ#d@5!Rq6@x^ȿD=Fk@ ҉do@'!WiQY@䎊@ F@E84@ ٩@;Oag#@ 8YJ@[[@g͉.@dmH@qx-8Go@X/D*@"@L/{J#@*@?H˒:@o`V@2s@Z1@$qj@C@Q֌i/@o]:@@˂@ܡbx@(KH@5@u@.}A@?@li@ިc^@U5Q/@ɚ$(@E;'@K4@3@]$D@)4@T~@]cf@G 0j@Ր@&I<@@n!R<@f@FsB@*@$Jb@KCW@W@ty@@{s@#@h>@AłU6@T]@p:~@@٩T@ڊ?@+%@%h@s@i~+U@5inX@wN&@X%[@c[l@M|@b2"@3bb˧3@puO@ 0@n@鷿@C @{@i@3 A!@4AJ@LPr@ jf@'>E@ C2@0@ l B@Jb#@ Ck&@n@ q @~vȴ9X@ ߏG0@kF4A@! Jw@W@!5*0@D=Fk@!]#Nw@P8@!1.@Y@!zxl"@pj+@"(YJ@Z6C@"Ql@CL@"z?@+Q@"!-w2@~Rv@"Ր@kP@"d@2 @#"z$@]N @#Js-@c @#a?g@s@#a 4@j~"@#dj@Q?@#x73@9dob@#;Oag@#D=Fl@#@bx@#<@6&,@$ DUGZ@cOJ@$9?) E?A [@$a?@$l?Ev@$FJ?a\@$4K?3)k@$檎cI?Q֌i@% =?պ@%+\|ؘ?^@%Gd9?y8J@%c5IP?'d@%?F?™؃4@%U'(c?vJ"@& b#ᆘ?=[!Z@&03rT? |[@&QHo?މ"S@&pv ?o?R&@&:S?b8@(rvtc5?Ov_خ@(eU.?コ RiY@(3]$E?>-b8<@(nm?s@(FV?B[@)tqq?'RT`e@)Zp?7T7@*S&?`V. @*7 gb?7@*Y̷D? gb@*{ty?ZR@*\?ud@*T Ǐ?m?>@*o?{ 9@+A0P?U@+$=?@+FT ǎ?;<ϖ@+g3?䭖Z@+PH?Q@+)y?>'@+:hA?m\@+0?m8Y@, V?$@,-ͳ|?If{_@,Nq?07@,n*)t?")n@,gߏ?LB@,8R?nC@,a(9?7 @,?ۖ($J@-?f:@-/{ 9?6P%@-OZp?B1@-oIV?лnwp@-҈p;?՛ @-=?e@x@-͉.?-w1@-s-? (wN@. ?йMa@.*3 ?/@.I?~鷿@.hK]c?ѷX@.:?e+,w?`V. ,R"??RiY_,,ı?8C,G#?t>=+ |Z?xW*+sպ?/Ys+?e+pL8?*\+JpT?֌i/o+$#?_o*?lLY@,{!3@>($ x!\$@O,]N!bh ԕ@`!9;:h@pSe!>-b9@5Tu v @d2 x@łU6 #π@ί% jqxB@\ AZR@c4 n@8@Jy @+ʬ6Y@9.v ׈@sBZ0#̎@,,d<ؘ@:pdk~(@I"S @WXe,Bb˧2@ej~@sRCwF{@7GM3H,@jw[0@B]s@Dg8~K@U\R.-#N@ [7@BCl]N@(b¤T@d3yU@gp ě@҈ @sE84@eOrLP@v*") @},|ɅoiD@?htK3@եb Y@ C%@&v vg@1th!|Q@;nwpz̆h@EGGw4m@OT "mHQ@YM@$>@c^t)x @l>"m@vP%ͣ@xQ@u%F"?@}ke͆@1 x{5+@쪸"VW@C,z ֶ[@RCwsPH@_I!t@<`"h ԕ@ﲪvl!-@sպ ٩T@[($AXOLn@RDcsl&l@=p aZS@u G#@  qp@$: :@'-" &Qm݃@!\ ݗ+@8Cl { 9@k WO;d@Vl!mǤ@9Y w|@\N<avݬ@64J#9@dZ@޽iK@Ԫo~=@nCyNP@ `k{cI{t@Q.ƽ@Y2 ֶZ@HHb@4@Y)k@4X!$ȟ@@₿F4AJ@Aҝ%ĿvM@kCBU.r@ȟ@T:@̢ۿڹ@/ei;y@$')1pO4@+%hI@{|G@h"3@&ǮzH@u!Sm(@f/0tj@98q.S@ިc^t΅v@M?@$=@E3ti @,x}Vl!@?FjX@U\R-@08.r0@ M;+jf@ UhƓ"@ mhH@ f{_98qa@75~@,]OvFJ@&4h@KZ?a E@!?m\@28?3rS@.r0?{ 9&B@K]d?Ҳ@)?7 @??ԗc^t)@4.۶?&k@T?ݱth@6?d2m@K]d?PH@_E?qiC@ B? 0j+@"?ZqxB@v?;wF{@9.@HuO7u?o@:v?Q@*`V?4m@e@|ؘ@ V@\@Q.Ƽ@q @kP@C @q6@ʁ@P{@@a@e@i`@2I@)QX(@%;:@'ڤ+@s@Xd@a=1@$@&c@ej@<`@dtSM@.]]@IO@'(@_F@G@ >ߤ?@ܜM?@ rGE@4n@ @ǞY@ ={ @L@ )Ie@Tpd@\?@IQ @n@>pu@}2f@2/Y@[dZ@&z9@=B@@}ӄ@>BZ@6C@I^5?@pȊG@m3 A@.@n@@8YJ@R8\g@V@7@k۠&@ѷY@1&y@hK@*o?R@_ô@!!laR@OQC@ol5@#cW@' @wud@If{@[IV@7Xe,@Aҝ%@wFze@,zxl"@"@ /^@zcs@ ?@`8@}OC@O"}@K@`k@y=c@T$_Zj@^"S@`O@^@gT@}@5@lx@Y#w@U@;-M@$@̍2#@(G @%@]U\R@Tw\@ @;dZ@d,@VW@^GX@t9XbN@򐫴N@d6e@ .۵@TzG@ -9Y@C}3@ WJw@2 E@ gS@ ,@ Y_a@!Bo@ %1@K@ ,<@F@!#j@@8K@!K @¤T@!tNP1@~=@!@$@!*0@6e@!>@k@"(LW@wXe@"*EM@ c@"ЮSe@uX@"XbM@_&k@#"R@G5~g,@#K/V@+m@#t[ @ fI=@#T@K4@#lja=1@LB@#b@oiDg@$%@J@$>2fE?}9Y@(H˒?A?g@(BB ?-*EN@(f}Vl?ƼS;@([?KH@(CA0?Jm3 @(k? ?>p@(|E˼,?jOv@)xF]?,@)?Zjj?N @)c'gM3?9.@) /? ٔ@)y?2m@)2fiQ@-k΅?T;@-&g?SP @-F?eڹ@-g?ߡ"S@-mqbc?t}^_1@-o~?Fkv@-pa?m@-y ?ł@. %|?ٴxB0@.*KC?؀,'7@.JKC?KZy@.j%|?v@.*\}?ݬ@.nX/E?Ӥi4.@.?iB@.b?-w1@/d?ҝ%, |? G|,A5Tu?A,~doa?x- ,XvF?Ys,2yQ?, j~#?*\+L/{J?Qj+%?_o+`G?pd+s1zO?6+M5Xy>?&,s-+&d?Z +L8?j*ٿb?Zc*")? g*wkP?(\)*eQ.ƽ?[6*>Mj?K*>?[)1eәp?{m)9`?$*1)33333?U{z)|yg?x>-)T;?,QI)-8Y? k)v?AJM+(4֡a?G#ρ(fA?wY(hۋq?76g(h앿E?hƒ(Ac4?4Ck(hH?1-'#ᆘ5?_a(9'pT?Ev'9C?6;%'zY ?X:S'S@ W''+]9@ - 'K۠@6FJ& @L~&m\@bHG&ڹY@wޓ&b9m@O;dZ&:mǣ@9m &%1@3%_o@̭Wx%i;yS@ZS%a E@&,s.%py+@ \%GN&Ԁ@f;%X:S@333333$-@G:pe$!Bo@[T$D@nwpy$|{ Z\@`,$S;K@.r$*")@ D $<@Q#'"`:@`ěT"e;Oag@rGE85"<27@3" >l@Ʌoi!l-@әo/!OX@}Vl!g@d,!lPr[@#d!C"@H!Y_a@ ]s@` .r@y=c 쪸@(3) r @7\¹ Hިc@G0@9 $5inY@Vl!-F@e2I,<@txB0@@7!<@֌i/oue@A7KCπ3@,fX@iu/l@2a|g#ρ@SPsP@ZxiQY@ (iDg8~@X6cI{t@~|o@u:>/jgb@GE85Q֌i/@ ;)k@ hHjQ@AJM+Xy=@# =pNU@/j6P&@;D=Fl oTL@GOIH*c@R7jJL@^u3@iIe쿱[W@tCk&i$')@P3:P ,l@bnY!@A5Tugy @`sXzN@#l7`]@^eS&@27'/W@4AJs@ϵIHVb9C@̢b ^#@.]\y|à@+%_$tS@) "S @iuflLYҲM@pU2a| 2I@w`]x"쪸@%߿q@ M;饹b@O"}f3]@th@=e@]r/ن`V.@<+:@u%Fם gb@uO7u.H@¤T٩T!@n1{ 2@usg!Wh@tsceO@sH+䥹b@q5%1@p_@WS@nGh3@l[puO7@jj%(\)@g kV`W@d%1c^t)@_o~=O#x @[6?Կ @Yjj%? ǎj@YXdE?Q@YEv ?Ǹե@VZI?Δ9.@O?bD@FsB?ۋq @>vȴ9X?sl&k@7QQ?ޏ\(@0d?#@*Ov`?l-@"D?JM@?Pܜ@ uO7v?UGZ1@YJ?f@?2m@y(?4X!@%|?}OB@n?$_[@ѧ\лo@΅3t@gb@pO4@f'|E?7Xe@>BZc?|E˼,@}W@Jt}^@Q֌i@]9@q @Œ8\h@bHG@d*1@XY2@Q֌i@PH@ fI=@HjܱF@ m@@4m9@ ;5X@7-#N@ F)J@.*)t@ -@&V?@ k΅3@%@PWx-8@H@޽@H@!@ ,k@H9Xb@ ̈~@@ŬG@ JL/{@6U\R.@ r(@+a@@ OQC@ï@O1@ϿT @9䣃@e@tT@9m @Rf@#@yQ@-#O@[W>6@VM@Xd@'2P]@>lLY@As@]9@@K}At>@8q`l@Jb#@g@r @l<@[f3]%@~M@tj@˗xW)@ ɯ{@_E@ 8- @!R@ ewUqL@g@ 6@R~@ n.@K@ B@wr(@!f@e灄@!8 @S1zO@!a͉@A@!j%@.SeX@!I@R}A@!W>6z@&c@" @پM@"+ @=1p@"S2@͎[@"{Կ @=b@"{ 2@E@" @uD@#O?@Pܜ@#1@"0@#*c@p8@#mqb@GǸ@$If{_@,q @$7ɚ$@ V@$^Ց@n.@$GO@KHӮ@$ʁ@ٔ[l7a@$Z[(@hJ@$PܜN@?h@%J@TɅo@%=ͳ|@#c@%e~g,@ @%{ @wȊH@%Q@P ,k@%޽@*{@&$G 0j@ A c @&QWh?/^ G@&{z]z?<@&]U\S?\ B@&7!@+/TK:?B؃@+R*?`d8@+v"?@x@+P3:~?QCrq7@+q ?ȊG@+zNzV?>P3@,h ԕ?% @,%lLY*sP??ҝ*j?q޽*di4.?^*=qu"?hƒ*Q.ƽ?/Y)Rv?7`,)Ԁu?gS)IV?)wzH?ǮzH)P>-b9?Fze)(LW?&Y)H?U=K(خ*)?a(E?LP(M?҈p(`V. @Z1(8¤T@u(~@4$5i'vF@K$ p'98q@aq'-@wkP'os@%'G0@9@sl&l'@@#w&9䣃@ί%;&ͪOB@0& ^@Ma&|aR*o?@`sW&Sڤ@#Nv&*G{@8?G& E@L%+@a-w1%=B@uy(%AJM+,@e%^9.<@%5"0@zN% S$@3ti$`A@ظ' $[l7a@)r\$L8@X:S$fFs@iY_$=a=@%U.r$%1@8?G#꫊\@J&#$Jb#@]$D#>E@onV#m.@#DFs@Mj# @e"x@ ܇T"!.I@ȔG "$D@>BZ"s=@C,z"ILD|0@&V@"P]@ x>!HL@iv!6z@.N&Ԁ!.S@>!vgw@NMj!Ls-@_ 4!"{m@n*)t 2vtc@~//t nY@Vu 8Cl@cA y7~@^ N @64 $$_Zj@.r A"@ȟ@ bY@8q`l 7@f: ӄw@ ,kty@:}Oo\(@7`]y䣃'@=Fk@n @GZ1^)@"͊@/^ Fm?>@B[[BE@FzeΚ,f@7KƨWs@ $٩T@QX(@P]RO"}@(5~u%@2V-#O@;ALVϪ@D?m@Mp =@VgE1;.@_f;X/D@gqp1f@or? 4@w+Tw[@eV5I@#ρ7@>'@i/nQ@ѢY0j@id@uy qu@('#@3]$Eôr@x^@?P3:@s %;@E84 P%@1zO _@t)<>B[@t/l5@cI{t| 7"@"`˗xW)@m\x_@PiB@Q- @ @ե@ uYEv @@% @|ᛑԿ@K[j5_õ@+ʬ{ 1@X:SWiJ@ߤ@7@گx_fB@)nr2L@gt~ 7!@J|Zq?h@)/n"&q@/YQX'@gB؃@gdA!la@n.2ʿ7@_Ël5@FsBq`l o@^_0If{_@"#¿O M;@C,]Ogt}@Crq6`N@JB9C߆nCy@Z ٜu"@f5~g,]N@iIe[T@hMnh@a@NϪ͞@Y?XdE$@K+@?mHQ@/D)?>(@.G?ِ٩@P?Fg@[f3]?m\@Z?/^ F@ul?߹8R@z@?$5i@/V?1ڤ@?ѷ@h? D _@`?l@@8Y?rϕ@?np@e+?Wh@"?At>>@ ?T;@?\ @&?^#@Fkw?|o@wkP?4$_Zj@|o?U@@9Y @' @`H@:SP @L@5@u;L@0#̍@-B@*np&@t@$k@@wkP@%1L@Ʌoi@F]c@ nY@ls-@+@"h4@,s-@Q_@"&@gmq@˒:)z@ &@n@ Mj@d@ zxl"h @^ @ z9@@ @(b@ blvJ@#x@ b@:S@ m@Wx-8@["`B@+@")@ײ@ZFsC@w{@( sG@nx?@xեc@f@_Ë@TCc@5Tu@$ p@֡a@!Bo@M@Y =@($@鷿@cI{t@kv@0O@]nY!@t^ N@Ҳ@f`-@ \@YZx@a0H@@D(M@Wx-@65B@0#@(Pܜ@S=@Ë`@v5B@ C@Zp@p =@W~+@>lLYu@܇Tw@z9@@ϛ]:@X\g*@EwU@[W@r@q@u@c7 @(wN'@΅3@tj@?gmq@)inX/?1A_E@)7p+?-@)Z?Fkw@)}x??gb@)?g?ag#$6@)A5Tu?H9Xb@)1f?*cI{@* hA_?"쪹@*0?c^J8@*WOIH?F@*}E?=f'|E@) /?1@*M?}At>@*.-b8?Xިc@*{{?,=@*n.?S@*ǵ?mqbc@*|?m?>@+o.?1H@+9k~(?;L@+_'/W?.< @+% ?|?@+\$_?,q @)?hۋ@) N?P@)V3?s-@*xW*?4\@*-OB?:@*RpO4?fI@*w k?wFze@*z9?7`]x@*:S?1@*䣃'g?@+ u ?u@+.^ t?4cI{t@+SQX'?+@+wkP?a Eb@+ʖ]?)4@+*c?W @+#?э%S@,ɚ$?Jm3 @,+($?L@,OKCW?;%o^@,rm?V@,g?(n@,V`?ꞃ%@,?>?8Cl@-RJ?n@-#k?~$@-Fkȟ?nmu@-iP3:~?h3@-Q?R*o?R@-t? 0j+@-`l o?333333@-zN?墱pO4@.9䣃?]U\S@.8~|?wd:@.ZL/{?Ԫ"@.|F^"?Yt[ @.Y5;?łU5@.x?0 (@.0 ?R}A@/̍2?>-b8@/%M_?nmu@/Fm?߭ $ @/gʁ?}^_0@/!~?K@//?iQX@/CV?ŗN@/Zy?٭v5@0R<6?{ Z\-qWh?h4-J͞&?PH-$2W?NΚ,f,?W}W,İ?},]U?VX,dob?#/D),b/l5?W gb,;/V?q ,Ѣ?rq6+K[?4+˼+?&A(+qi?Y++w8}H?bw]+OԿ ?-b8<+(a Ec?EwUq+݂u?" *JE?Sv*\лo??*Y}?yh*b2LfQ?E@^u(^)@tc4(VԪ@X6(W͉.@(/4֡a@ʁ(@ʖ'L@k'u@hH'?>p@q!Ks'c]$D@$i':mǣ@:C\'ohی@Ov_ح&b@d~鷿&IV@ybE& @!R<&lQ@}Vm&C@'j@&VWi@m%jUp@ߏG0@:%lja=1@T6%-b8#mHQ@c^t)#W)@^#~6F @:hA#Ta=2@ łU#)_o@iB"i,@/ǣ "6P%@A"ި@R8\g"n@bZp"ULW@sth"+v@G 0j"N@:!Qm݃@*!q @ɯ!G@;'!VDR?g@Z!+~$@v!YJ@{!k}At>@fI=!@ $ q@!5!K@)r\ ꫊\@~ q!@  *1@:S iz$LD@&,< >Vu@4c4 &@B},{6@PgTyR4@^"S"M@l"h ԕ oTK@yUDuIHU@6&-vȴ9X@R~RǑ>E@0p@U=r@I< jF5@&Ik9&A@ ҉@0X:*@+%e>-b8@`, 8Y@ ;%o@&Ԁu^Y5;@b}Fs@$TɆ"S@Ʌoi$/@ѷY݂v@,55@Vϫܤ*@- @5Tu+`kz^@ɕҪ9m@N;6yY @}!@D(M>BZc@xoV`W@ e @q`l ce@)rd\¹N@S; C%@ "?@`dX@c |hs@!R*o?SM:@'>EfC@} eV@%2 6@$oa `H@CB¤ *EM@J=B?Ms@Oag#$~mH@TFs\$_@Y =Ë@[G#tj~@Z`V.  x@Yhۋq@W}WI{t@U\R-k΅3@Xf'|F0oiDg8@]k;=' @aKrx@c$6e5*8@TG 0RJ@Ay|ßsպ@5lvK@"i}2a|@Ցr ě@*cǿ8\h@\|ؘѷX@IQ0@ İrGE9@/^ Gިc^@;'j@#-#@WI'>D ^@pdƿWh@W>6z\лnw@Dg8~ulvK@(nnCy@%|pQ@ȴ9XbRCQ@˂ϿӡLA@}At>%!@HӮh^' @cA \^ N@bw]KƧ@k?k΅4@Z?nCy@,6z@^doa?07@X7ɛ?doa@;z@?dty@/D*? V@]9?Ho@//t?:>/0@:?H sG@p?)k@3 A!?;D=@76?Tw[@LA?޽@BE?Y[l7a@0?XdE$@ ͳ|@ŗNe@ܱF^@v5B@ ǎk@hJ@$0+@j@Б}ke@]4X!@b@jv5C@c^J8@j~"@E b@_@D|0@҈p@t>=@Ҳ@PܜN@c4@Y|@c@*t}^_@LsG@:э%@BPr[@zVC@6E@ 4AJ@*JL@ ؃4@"@ 0݂u@*\@  >l@9.@ zG@ (@ EU5@VI@ @EwU@ |o@P@ƃ<`@;'@ȊG@0{@䎊r@cڤ@ ٔ[l@s@+@ (@}{ @T@s)k@;<@i/n@R@_r @ZIf{_@TZ@BY@.@M:@ѷ@=q"@x @.r@m ֶ[@mu@a<@GKI@Vwpy@FV@Jt}^@ 7!@?8Ck@Py+@3RC@M@'=[!@%|p@@Ye+a@ @d2@27@ { @5@a@QX(@n2X@b@ƝsB@@" @vP%@~($ x@]$D@T@H.3@0"&@'t}@3H+@ܜM?@׈@}At?@\ߤ@@ ^@g@jJL@)^@Nߤ?@j[B@9_@±pO4@(\ @@@p7T@ VE@|E˼,@ (@g,@v @CV@W@,@*"'@ k~@>'!@Xy=@y|ß@YJ@V. @ 3F]c@g@ c ٔ[l@sպ@ om@eKHӮh@ ej@Y@ @P@!"-"@I.3@!R+ʫ@@//t@!ܜM@5@!¹M@'|E˼,@!4K@T@! 6P@U'(c@"&C-@2vtc@"M%@臨M@"tfP@>BZ@"1 @̭Wx@"Zq@٩T@"{@%F L@#Y@> @#9}@a@#bD@׈@#cA \@z B@#]9@h},{ @#QCrq@Up @$ M++@@3rT@$49XbN@,fWx@$]+@wd@$@@!Bo@$o@VϪ@$D ^@i D @$:S@R-"@%2W@<27@%;?z@&B@%dTɆ@ag#$@%Y!@xW*@%Ne@|Q@%'RT@G|@& |@䎊q@&27@R}A@&[k@Yʁ@'nO@Bn@'T^@)lD@');@X@'>?/Y@(%?TɅo@(NA c ??>q@(v1f?ii}@(Y?B74@( >lL?$tT@(R~Rw?U\R@)|o?)s@)=?w{@)eb?CV3@)5Xy>?`V@)Fs?ہ0HA@)?ߙË@) Y ?\|ؙ@)2f"@)R?Y@)t[ ?лnwp@)X:T?@)JA c?an@*]s?OI@$?@$@28?r/m@$gx-8G?9Y @$t?IQ@$5Q/?VI@$܂#?@%<`?Rp:@%)ᰉ'?9@%Pr[U?ܻ¹M@%vgw?LA@%Q.Ƽ?e2I@%ß`O?)iu @%E?!-w@&]U?+@jU@&65~g?r?@&[W}?5sg@&!6?Q@'?'>E@(S&?򏥏q!@(1{?V. @)Oag#%?X%[\@)~"?ᛐo@*/?灄@*?hb@+!laR*?*OB@+[9&A?Jw@+q?ި@+PH?i,d@,[6?(mqbc@,?:?̷C@,jd?G@,x ?27@,")?;<ϖ@,oh?$_Zj@-J?+%@-,x?K۠@-P]x?z$LD@-t1?G0@9@-h3*?B1@-L_?x@-ߩ~+V?A!@.")?_E@.&M?x-8Go@.IË`?C@.lhr?mǤ@.ҝ?$5inX@.k΅4?擳@..r?m@.˒:*?puO7@/!Z?*") @/=a(9?K ͳ@/`&?Xe@/\=x?"?@/:?O;dZ@/ơaf?eں@/u%F?`]x@0:>/0?pa@0?1eәo@0& ;?1o@07?f@0H`G?Wh-_ح?)^ -zNzV?ŬG-x4C?5B؄-QzN?jY -*`V. ? -5IP?,v?.3,"?;쪸,KZ?o~=,ev?i},>[BE?.r,d?zd+%;:?: B+qp?m ֶ[+)r?CV+wֶZ?r[U+O1?f:+' ?2^*䎊r?csl&l*?ݗ+k*IHV?*}W?7 ܇*_4֡a@X*6ݬ@)^*uy(@@D)ڹ@X5)ulv@od9)~M@x>-)l7`]y@ce)CP@$_Zj)Y@?(ڤ@Bo(^ @-#N( |Zr@ 7!=(wNΚ,@#̍2(ME@91eә($ҲM@Ok}:'&@e 'a|Q@z}OC'P@o'IHV@i'VIl.@nD',X%[@Κ,f'E @}9&ٮO"}@ 7!& ,k@ x?&T ǎ@ K&\N;@4ߏG0&2*@HӮh]&hb@\bx%< @pJ%*@,]O%D@),%`q@d7%6S;@p =% ٔ@]q$O"}@K۠$g@K$U=@+$cF]c@u $8Ӯh]@,K#ȟ@@PwFz#/n@b.]\#"S@sE#c =p@z$L#9ֶZ@R<6#LI'@lC"tj~@W)"%1@""@پLI("bT~@5_õ"7 gb@Q"3@BB"yQX(@@x"NX/D@ɯ"#")@{!ޓ@V. !̐?@#-#O!7T7@2 6P!uәo/@B_!Jd7@Pnp! ;@_~+V eXO@nCy fA@|#x 9@m3 B pl oT@!~ DZ@mq *0U2a@mN@\(,zxl@j+z]z@hƒӳ@򐫴{Q@kP#@vj$@)sպ@k;= $@*\|ؙsl&l@6U\R.k$ p@Bejz$@NP1<S|@Z |a_Ë@ei4/ 7KƧ@qL}ke@|UDR?WֶZ@th 4@d2n1.@)r\>MEb@t}Fs@<*7ɚ%@27BB@ƭ-fKH@ЫNP @{ 9&6e @ p)4@"3@i* :@6Ж@ ve@y|Y >@*å;K@# iᰉ'@+*0U@3GO5B@; $\K @CB¤S 5@KC%P*@RǸզN>lLYu@Z!5`!-w2@aWhʁ@hb?ôr@o?R&W@u3z@|z90݂u@¤T]N@b?G@xa Ec@/wLI'@ҝ%@'!WiM.@=Ć.@W i@F^"@$=@ae@Ԁu% @hr!;tҳ@ D#@:ܿÿrq6@ejkm@e1L @hgB @j+U@nzG&q@q6 @s]$DjX@sGO2^@t4'(@t.۵ܿ,]N@s-[ @qu!SPH@os">iQ@lA!F@e`A7LB؃@c$6eюMj@c}9ݿ;wF{@dku@d_ZjjdzG{@=p =? @;yR?҉'RTa@Q_?'>E@iQX?޽@ײ?L_@wpy?*ި@-#N?1&x@ӳ?h3*@8\g?B9C@84֡?h@l<쿱?~"@VH?At>=@Sf3?KCW@O4?t@L4\?@G#?,=@CA0P?CV@>iQY?Fd@8)?!LA@3bb˧3?QCrq@.}Vl?.@,aR*o??j򐫴@5 D?5TuL@D*0?e @L@QN;5@\(\@l oTL@Y6@-gwZ@Zx@{J#:@!Kr@]u@?@-"@cI@x>-@䎊r@zv@7@S0@t@HF@U\R@$e@f'|F@Q@,R@лnw@^@ @x@@ uh@z@c^@ lvJ@s"@ >iQY@m(@ @gfA@ W@gŬGH@ p@_@ uO7u@Vwpy@ @ENe@=ڐ@.Se@ɿb@9@M>!@|@6z@Y!@(앿@D=F@7!<@a|Q@ݲ-V@\)@8?G@j@q6@պ@C@҈@Fx@Ԫ@7@"쪹@ 1ί%@l5@TxB0@b@ :@ݬ@Ѣ@zcsm@> N@1P@6m@T!D@#@Ë`@XdE$@">i@n@@̿[W?@hb@֌i/o@pj+@S5IP@^z9@եc@6r2L@n@F^"@me@gS@ʮ)s@a@N@$qxB1@IO@~Y@-"@ٮO"}@֜#-@6SP -@Ѣ@ܱF^@j+@@@N;@Di4.@|ß`@\@1bb˧@wFz@ ]cA@v+jg@H@؃4C@'(b@81e@!.@䎊q@1;@@tT@9@x@c}9@&@UDR?h@)^@M:@;0HA@NΚ,f@m3 B@T]r@rG@PX@ 3@D@ >}Vl@2 E@ j?@(\@ h@ [7@ ȱA_F@d8@ N@>p@!-@'gM@!^>W@`V@!%@eU@!=@usg@!+@@kJw@"fC@a͉@"I^@YO"}@"x@q@Q@""@HF@"\=x@@#V@&Ǹ@ T6@& @c4@&!Z@`@'O M@Ck@'.-b8<@8Go*Z@'WXd@E@'{@|pd@'-b9@(w gb?++@(y+?ʁ@(C?f[ @(??2kv@)vȴ?($ x@)C1ڥ?ɐl-@)k:?VWj@)?_E@)sG?^t)@#ͳ|?Ww@#f?wY@#?@NU@$&,s.? A!la@$>u?@$e?!5`@$uO7v?bR@$$/?);D@$$D?D@%$5i?`@%,,d?~GX@%SB¤?D|0@%z"? RiY_@%e+?Կ @%=b?i@%MUh?Y2 @&E84?D<@&>)sБ?XOLnn@&dپ?,s-@&q ?iJA @&LfQn?,0@&F?iDg8@&H˒:?ί%@'%i4/?sg@'K ?5yh@'r{5? @'ϲ9?!~|@(}ke?~6;@(\¹M?A@(Jw?>-b8@)"a?< (@)>W?@*({?Qy|@*^ ?eU.@+Gz@d?e+@+{?3 @,>"?[v@,!Bp?@,1ڥ?"@-8CP?.r/@-s^t)?jF@->6z?!Wh@-5~g?0 )@.LA?#cW@.*+C?/Y@.Qg#$6?~$@.wӄv?o]U@.>B[?0@.A0P?W),@.Xe?ɅoiD@/ ,@0> ?DR?g@0pT?䰞8@0#sպ?X%[\@05&?Tw[@0Fl!-?1@0W??[BE@0hp:?2W@0y5?,{ Z\@0?{*)s.Tw\?j+-GZ1?`A7L-Y? |-\л?NzVC-v?m-Wݗ+?[--/rGE9?Ov`-M?hƒ,}ke?Pr[U,¤T?<`,q?Q.ƽ,h4֡b?ߏG,@=?؃4D,ם gb?K+B ?| >+{0? <+3:}?҈p;+wUqK@zH+Oo@1P+&D@7ɚ$*iB@Oq!* g@gW * Z@~ ;*cI{t@R<6*[@x@t*2}Vm@Y!* 2 @6)E@ᰊ)`H@ LD|0),fX@)el oTL@6J")<+@y@L ٔ[)ܱF^@bpO4(~+U@xh(&@qi(Wx-@?(m@Цv (CfQm@7u(^5?}@~鷿'`N@8J'1.@9.'X%[\@#n.3'rnO@8}H'HvF@L?'np&@a7&Z1@uIHU&4Ck'@a=1&OX@Sn&uK@!Kr&Knwpz@{&!7@OLnm%@뤓ȟA%'76@ߤ?%@L%wY@$/%Lb@7kP%!:@J82vt$`-@\F^"$#y@o$Crq7@0H@$vZIf@0$KdZ@ ^$ _@@ȴ9X#M_@U'(c#/@Ë`#W}W@Jw#s@!~|#H c@ qu"#3 A!@},{ #sG@#w#a7@ e#5@6# @*0U2a|"zVC@:>//"ѷ@J#9"5~g,@Y"[@isБ}"/T @x{"򐫴N@1&x!ިc@Ne!7`]y@A(!Fd@!TK:@ÿrq6!(D*@?g 4\@:э :@t 2@Z w@ D _ K@s* 7u@&.˼+@3l&kɰ@@B 4A5Tu@Mͳ|\|ؘ@Z3 b˧2@gS)VE@t);3:}@~ve@7ޔk;=@XdEZ1@;:ij1{@{k@*Cd@+^-b8<@ӄvqxB1@޽XF4@y P)^@1n~@gߏؘ@ HU'Bi}@`d߹8@Y5;mu@(n4&q@2i4Цv @ߤ?@cA ca@N@*1@Up X4C@4\ pϿ@l<쿱 5Xy=@}2f g@o~= #OI@2 eF L0@ߏG0@:z9@әo/a E@vJ#ŬGH@bb˧s@:_Ft@f:bb˧@?>q@QX( Z@rGE9%әo/@t>=J82vu@ײ7 ܇@ >LI'@oi @z@de+a@v@Zy{~$@ξߤ?+ʬ@Q֌ͳ}@|ƿe@x@Nx[ʖ]@ɠ'RTal5@ I徠K@)49Y @8 Y2@7 ݿbD@ï9@ß`Oݎuy(@āohܿ8@bhiv@ŧKƂ@4n@|0S&@?Ho@2X?g,@{ ?ВO"}@If'?٠ k@:X?CP@5yh?Z1 @3 A!l?\R-#@0*?X/D*@.t?RJm@,?W+@+?1f@0X:?0X:T@kP|? R@ᰉ?2LP@H?7Ȋ@oTK?/d9@VE?y @K?!5`@qxB1?J@#y?{z@@($J??ײ@m?l&k@]9@<@$6e@11eәp@婨h@(wN'@@qk@@"C,@z@՛=K@eәo@ڐ@:~@BjF5@Sn@}3@1eәp@hb@M@$>@P1<@ @O7u@@KH@¹M@1;@-*E@ G 0j+@XbM@ ^_0@.< @ =p @ZIf@ pO4@=@ ix@@ d@)4@ dTɆ@w[0H@ g@lԪ"@#-#@d*@Qm݂@^_0X@̢a@W}W@eu@OIHV@u%F @GNΚ,@@=f'|E@{/V@2a|Q@6&,@${0@3+U@UDR@0#̎@[-@{ 9@ /@RD">@쪸@1zN@n@ȟ@@f'|F@q@&@#cW@SP @ᰉ'@T@ L/@>@F.@Wp@,fX@ |Z@h@iB@=4X @X%[@>@3@ 7@ b@gw@xYJ@؃4@r E@Tw[@cŗN@QVH@Y_o@@O @E @B!Bo@T*1@0oiDg8@Ϫ͞@@SJm3@ 4@sG@u;Oag@SБ}k@GJw@sջ@:{@+`kz^@2V@>@'X:S@@(z@H%1@ ^#@U5Q@ᛐ@PH@~"@L#y@ۥS@UqK@⌽D@~Rv@`kz^@ @wkQ@ /;dZ@ԅ]r@ Ul oTL@ß`O@ }3H+@x^@ :pe@ @ @~^ t@ BZc @bM@!-%!@?g@!_rGE9@W>6z@!^t)@z9@!nh@S@!]r/@՛=K@"#zN@앿@"Q@޽@"r @xB0@"N;@KHӮ@"ڶ&@_@# A c @M3H,@#:KC@G0@:@#i@"@#s@9䣃@#ğ]@w@#a(9@g@$JL@TuK@$E'(b@>g,@$tJb#@&IQ@$=K@ Z@$¤T@4@% }9@ۆnCz@%<<쿱@ĵ?@%e D@`l o@%q!Ks@=1p@% x@o@%h ԕ@{nwpz@%Ń;L@e$_Z@%np&@O3r@&>-b@9P@&CZ@"w\@&m{ @ :@&`V@j~@&.4@ݝ4X!@&!.H@NΚ,g@'i,e@O>'@'\$_[@7z@c@' e@?@'!Kr@zH@'$ p@{J#:@( 0@),@(.< @6z@(Xƒ)@ڹ@(B@ Z@(.3@t!-w2@(}2@Zc @(Ms@Auy(@)(TɅ@(g@)R!Bo@K@){p&?Q@)1?nx?@#lK ?9@#`A7L?3ti@#c ?%@#QQ?vȴ@$+@jU?dty@$8#x ?.}At@$a Eb?"쪹@$EM`?JM++@$`A?8C@$G#?RJm@%*0U2?:э&@%+'j@?w\@%T0+@j?`@%|T6?q6;%p@%a?7ɚ$@%\ ?2f'!?ᰉ-HL?o~-]At>>?sպ-5'!Wi?.h]k<- >?`d8,M?,j~#?qxB1,?:,k@x@Mj,C@,@,w|@DW}W+_Ë@\Tw\+H@ty+EwUq@~($ x+wh@E#N+Nygt@lC+%wUqL@eXO*fWx@")*D=Fl@QR*@ =*)^@0OX*Wth@F̢a*.!@n)sБ#q(o@~lLYt#EK@3t#i}@t)<"@>lLYu"_E@{ "*8@d>"h?)@ܶ["<4X@$"B¤U@6;%!ݗ+k@ V`!lC@6F!ﲪ@',!^g,@5!R!1N;6@C,]O!1L@QR ؆YJ@_*c Կ @m݂v  M;@{T^ R?g@앿 %fA@. th@^t)),@d=6@Fkw1ڥ@İ7~@֑\л.t@SPԜn@?R&WzC\@T^9@E84P@ 4jD _@" 9@*%ם TuL@5y(Z},|@@~@K$`kz@VwpyI'RTa@a"S3t@k#cWp@v ׈8?G@> ?@G|d@,<%@,=lʫ\xW)@E#M:ҝ&@KSP ,n.@]iv1&y@fA 7k;<@fC ގ`sX@"2" K@+U= 4m@1A [@8Jud0+@?;Jf'|@BU5Q٩@3/eks-@sP7@|S&@FsX%[[@ }H@k@4@P]&Qm݃@"S 5e;K@#{ 2")n@"S 5ݗ+k@˿ E@(z2P]@2m鷿@IVts@u" k@"S=D">@ >WT7@"`A98qa@#{ 25@$E#N e@#ڤQCrq@#Ze 0@$tSMѢ@$oav ׈@"b˧2߿УS&@!5ĥ&@1zO?ײ@?|G@M?i,d@b?RJm@C,zx?6&,@Q?ݍ%R@($ x?NzVC@݂v?8YJ@o?-V@ |?\ y@P ,l?0OY@D?=@-f? @@?Ck@Ne?tj@$? L/{@x??_8R@M Z?ZQ_@s?,]N@xW?7~+@āoh?vFs@#π?@)4?b͊@A"@OAs@$D@\@0@G@j~#?\M?@\(?<@&I@4qp@ >lLY@2^@Q@F@'&@sh@,i@n2X@2kv@=^_0@:&@mǣ@=W@<*@={ 1ί@qR~R@;{ 1@6Fs@1k@yU@v@/Vϫ@BZc @#$6e@m8@ BU5Q@?@ @S@f@Y6@k΅@Fy@X%[\@-M@$@kP|@7@ϰ @[ @Y!@jRiY_@2I@@\B@d@ud@6?) @)k@Ú3@r\=@-@m?@@N@ȟ@@Ma@~@_ôr@@-*EN@ybE@%r(@l0@@^t)<@7 ܇U@OQCr@ Z[(@FFs@ I|@?ײ@ u]r/@2̷@ <@i/n@ uK@&,s.@ ~+U@BZc @!5Q/@~@!π3r@v@!Gue@@@!t?@đ)@!&V@ =q@!Ѹf:@>P3@!0X:@ŗN@")Ev @nV@"Pv @*)s@"wO;d@@"?@ؘ@"C@l&k@"2m@2I@#;@1zN@#Lß`@R&V@#z{@eS@#y@F)k@#ܺs-@8R@$\@ʁ@$FWiJ@e%1@$yԕ*@y|à@$j~#@3 @$;@[@%i@gKI@%I Z[)@N+@%xD*@8s@%Ov_خ@%$_Z@%/l@*0U2@%K4@}A5T@%[T@uy@&`V@M@&B6;%o@S#@&m)r\>@%ם @&Y2@a@O@&ÌT6@}1o@&2X@e$_Z@'T!D@IHU'@'DK3@' @'kP{@2X@'x_@2{5@'lC?ҲL@'U?%2@' =p?D;@(gwZ?G 0@(GT6?E#N@(rmHQ@/l@(ࢇ~@ohی@) @\ @)5;K@Ϻ&@)_k}:@@).}@Sn@) ?~6@#`|?6F @#b#ᆘ?Z*@#5inX?& '@#U\R?fI<@$ ?=@$1=1p?앿@$Z")?So.@$4? @$a=?X:S@$ݬ?o6@%*0U?{s@%)5;Oa?DѢ@%RCV? ǎj@%{;@%>?d=@%h?,2"@@&N&Ԁ?8q`l@&Fz9?`G@&oX:S?4m9@&wd?F4AJ@& ? ҈@&D*?.ƼS@'gS?3H+@'8uO7u?Zjj&@'`kz]?+@'K]c?*cP@'?Ԁu@'s?j :@'d9?-#Nw@(&)Ie?@(NWS?{5@(uGG?tҲ@(A"?5͉/@(UGZ2?,@("`B?d@),R?xh@)8b?9-*E@)_ej? k~@)r2Lf?J@) gb?x 7!@)ӈeO?7`]x@*)^?5B@**&?% @*Ul?s-@*3?1eәo@* ^?5I@*U?_@+)?l oTK@+p{?*)s@+.r0?әo.@,)m?RJm@,s?҈p:@-!1?R-"@-@?Ǹզ@.@8\g?Qm݂@.ʎcI{?_o @/G!Wh?HG @/{?D@0P?6@0/V`W?`kz^@0P=B?:}O@0l"?o@0A5Tv?> @0G?o'=[@0Ԫ?~L@0 4Y?Lnm@0f{_?`G@0"?&A(@0a(9??@1l?< (x.L?pL.m?=.|S;w?n~.TѢ? ҈.,zxl"?>P3.g8}?qiB-#?ȟ@-V?`V-;<@oh-bL@nY!-:m@65B-hr @NT;,[BF@gb,o~=@T Ǐ,gw@,mY@ ě,DJM@.3,5Xy@"+m@%ם+_a(@'!*) =@rS) 6P@ B )i@j){{@55)h3@JڹY)V[ @`[6),ᛐ@ud)@ﲪ((b@(=@\ ٔ$^޾@m $ $=b@~ʫ\$ x@͞$`@kz]$4@th$)Ie@y|ß#@j#O M@s#FIm@$5in#V?@!laR#)^ @}ke">@!!Bp"D(M@0tqq"@?"vkv@NΚ,f"I䣃'@]|"hr@l?!rGE9@{5*8 !)I@ D!ᰉ@ $ p!hQ@A(!;!Z@NP1!ygt@+ʫ ;.]@鷿 򐫴N@}H sB@1{ Y=b@73 +$Jb$@S&u:?@O"}'R@!-w1Ff@+GNe@8LW ě@D">j4G 0@PR4@\$_[}cA @h$Jb"3@t#ƃ<`@6j{@1@SP -?@5_V},@&kv@%ם//t@Pr[B1Q@9䣃@6&,E@Gz-gwZ@P{`A7@*8tNP1@fud@eO@^ Fd@[Bo@$0W}W@,]NGZ1@5dM++@>LI'-e@FS;/tr@Nڐzcsm@Wʂuv@_r ިc@fz9x_@n}Vl]4X @u~+V@}At>>&q@lvJDoa@c SzS;@:)yo~@e++.}A@`:R~Rw@Kok}:@+S#@L_SJm3@[BE ׈@&,s- :~@3 x}H@B ɯ@OB9 fI<@Zm -3 A!@b)nIf{_@iu S@iiu E @lgS@u/f:@xq`l T@v k]@ołVf`-@nSeXk#c@nƼS;A_E@qthr{m@tsc4@w4mֿ4@y*\})sБ@{D ^-Ww@|e@x٩T"@}`N㓿+Krz@~2f-b9Y5;@28K]c@OX7s*@~xW*@|u:?֐>@s2ϒs@h߹8-V@^27@V]9?@MEb?łU5@>pu?Ѳ-V@%XOL?,]N@ >lLY?QX'@ c S?㸥[BF@fI?(9-*@u!?Wwd@pd?@c^J@l oTL?`H@G?T ǎk@LW?=b@"h ԕ?$')@AJM+,?iv@ c S?G#ρ@f?u @\(?jQ@j@?(TɅ@]r?xa Ec@6ZIf?ohۋ@K?ޓ@؈a ?np&@E?P ,k@Il@wsPH@^ Fe@֮}Vl@ =p @6ݬ@N@4֡b@M3H,@7ɚ@ /@`~@n@¾i@b86z@Xd@l2"@@:@K ͳ@UTuL@@٩T@.r0@5 '0@s@'8}H@I D@.3@.3@^)5@O @@@[5Xy@:pe@k@`ﲪ@g @de@Vݬ@Z,<@M@Nt@9XbN@B@4n@qUDR@5nh@ψws@)cHj@. <@.@ʖ@@iB@;D=G@]-V@ RiY@RJ@7@?+ʬ@o@M++@0@9@f:@2^@'!Wi@g>E@)^@(r Ĝ@ p@,{ Z@FhK@!Wh@Zx@"0@'(@lja=1@qX@X@`A7@k}@ ե@Y@ Fkȟ@t@ tVWj@) D@ >WS@qVH@ 9@g2P]@!3rT@[G#@!D|0@K.}A@!sȟ@@8l"h @!bb˧3@%[[@![ @wpy@"&I@Mj@"=+@rq6@"knCz@~($ @"K@6f@"R4@@".ƼS@!(9-@" @3ߤ@"9.@2i4@#L@%!Wh@#A7T7@֌i/o@#ob}V@¹M@#Ms@0@#//t@m3 B@$͉@y+@$3V@,<@$eڹ@u;L@$a Ec@T@x@$ZFsC@3|@$7ɚ%@:@%*ݘ@h@%XD*@h3@%% @2 E@%K@#x @%X%[\@$_[@&,@$/@&/o@n>W@&S@W&@&vϪ͟@ATɅo@&:@+GN@&ƫ?@2@&o@t>=@'x@8q`@'Gp+@Fs@'r7@#@'jf@;L@'̷D@4@'ȟ@@gmq@'8R~@G+ I@(#{J#9@-ǣ @(N{@ᰉ@(yԕ*?e@y@(CA0?% @(6?ty@(%o^?k[-M@%@)&g?:s-@)Qth? Z[)@){?S@)m?߹8R@#|x?Ww@#i,e?z2_@#27?Gj@#~($ x?@$&`V?`G@$QBo?\ @${ Z[?w@$n/?C,zxl@$LPr?!R<@$+?ظ' @%#zN?SP@%Ms?l&k@%wS?6z@%F^"S?eV@%t}^?ȩK@%zG?>E@&U\R?Yb}@&G\лn?!laR*o@&pSe?}@&ͳ}?U2a|@&π3?wFze@&!~|?=b@'ɯ?#π@'>ѷY?f'|@'fБ}kf? @'ws?TE@'+?|o'@'ව4m?މ"S@( ,k~?`A@(1bw?fA@(YE ?*o?R&@(lvJ?Y@(KC? (@(!Bo?sbb˧3@( |?5K@)!?d9@)I;D?XbM@)qA [?zVC@) ?;<ϖ@)@98?e@x@) gb?a@*ߤ??|X%[@*6 V?<wd@*]?lC@*^ N?6;%@*D?y1eә@*ѽ?8d@*jܱF?+jg@+hۋ?J@+H 7!?q6@+oIHV?.@@+@?뤓ȟA@+*?M@+(z?d7@,VC?!}@,F[ ?I< @,yQX(?2m@,NQ?͞&@,n?#wk@-??`@-Ë`?Xe,@.v ׈?쒣S&@.}gwZ?<@/;'?늆6&@/3?@027?ﲫ@0U;L?ʁ@0;'?m8Y@0FV?\@0B?S 4@1o~=? 0j+@17Y?HH/'o*ZF?K]cA.&k?~f.İ?{5.Y? 0.8YK@ .]>'!@%&.4y@>=. a@@W4.۵-d@p -@7 -$Jb#@Wh-h@hH->xW@,R-}2@EM`,#@U5Q,(n@A_E,K@2 E,p@98@I D,Fł@a7T7, gw@xR}+UGZ1@6+ɍͳ|@3]$+9@E+u}2@Ѣ+KƧ@\$+!xB0@B* @6F*\@.۵*]9@Eoi*xf'|F@[]9*NP1<@p`*#պ@S;)HU'(@]ce)ΧG@+)M@0@9)y4@g*)Nau@zN)#|O@i}(M@7ɚ%(̀^_0@/ܜM(iY_@Da(wAJM+,@X¤T(L1&y@l{( (@'d0+@@k΅'HU'@F'<@27'rI@W'GXe,@}9' $@7ޓ&䎊r@ ԕ*&&q@лnw&K]c@/Zp&laR*o?@BU5Q&@fj@g%({5+@np$ud0+A@{ 9$ƼS;@9m$ /@QX'$u?|h@f$Hf:@$0+@j$@4hM#qi@D|0#7Kƨ@T`d#xB0@d*1#gZ1@s>WS#:-`@A0P# n@a"߮@@łU6"Zc@ȊG";@)r"WS@e"*/l@>! (x@jf!;@o5!TɅo@Ǹ!s@Ϫ͞!ERK@#wk!' @1P Up @>f vJ#@L9 @Yo. `@fIQ 2Jm@sl&k -@4m9>B[@ /P}ke@Ev 1zN@O `H@o;/V@ RiYމ"S@ɕҝ%@GZ1%oi@$ xG@2"@k)^ @k;<X%[@X@ jOvSa@O@/^ Gz@"`AXdE@-B;!Z@7%@A(o[@K:"h4@UDR?h#M@_0X:gOIH@hn nX/E@rsxF]@{D ^MoTK@W}WV`W@5Xy>,'77@^ N2 6P@%ԤҲ@`-vE@4֡aUqK@FzeZx@8CkZN@7.3@Οju@H>m\@hƒҝ@LD|1i@Q"6;%o@\=xA0P@-*Ed:@+ʬ)4@!~!5`@ڐlLYt@WSqR~R@p ě #@x4֡b Lnm@ Ǔݗ+@XOLn ^҈p;@ ᰉ@z$L 4j~@? \@ɿb G 0j@VE5~g@If{_b˧2@cI{5_@Vu.Se@Vu9D@LYt\ɯ@b}V~+U @7 @٩T@ξߤ?vȴ@^)5ӄv@ӣ{ 1ί%@ҨCQ8Ck@+q@?P3:?&q@@3rT?L/{J#@?+ʬ?ܱF_@,5?uMU@K ?g@1?(M@V V?N;6@K]c?6;%o@< ?C`k@ם gb?#y@^J82v?|X%[@ḍ?ޓ@V?hK@ ??`s@%S?K}At>@);D?HU'(c@R-"?@Z? '0@?R&W@ol5@gt~@I.3@`,@r@7ޔ@.@a@O@G 0j@Օf@o.@ѱ+@Ub@ 4Y@$tS@˶gw@+ @ʆ6&@#-#@ I@`'RT`@|ᛑ@ $'gM@,@ nX/E@")@ ]U@}@ }`N@JA c@ TuM@fQm@ 0nC@&@ pa@qxB0@z9@_o~=@+@jU@KNʗ@@qd2@%F L0@%@v6@XB0@ﲪ@\$_@6&@jܱF@Zjj&@1;@?z:@~Y5;@-Z@- @ѷY@ ws@+@ N_0X@)r@ }-e@j+@ @@2^@ HӮh^@҃B@! @#M@!E@`H@!9.@n@!E@f@!*1@do@"#=@sRC@"PFd@eK@"~l<@\Hjܱ@"b@TE@"1@J/ @#*ZFs@= RiY@#=8Y@1L@#j=B@)nX/E@#*0@*򐫴@#@c^@1o@#<64@3@$ɯ@+Q@$)2 E@IV@$T[ @u%F@$3@T6@$`N@ݍyЦv@$Ć-@&I@% nwpz@*)t@%9rGE@ V@%f&I@{@%ȟ@@aLA@%vtc5@G V@%> @-ǣ @&Ev@^ N@&I (w@s@&t+@>P3@&U\R@`,@&9m @ B@&@w!<@'t@Xם gb@'I+@@&@'v V@*+C@'@@' /@nP@'e@VH@( @Б}kf@(CUGZ1@mB@(PW@8j?b#@- a@?D<@-3Z?ﲿLP@-[rz%?(b@-lvJ?-V@-~?Y@-T?6&-@. gb?s@.=+?o*ZFs@.wud?s@.$(?XOLnm@/f?ͳ|@/a$Jb#?CcHk@/jf?L@0"=B? /u:>@X/[F4A@*8 /2Jm@CcHk/ f'@]4X .ܜM@vZIf.+@ag#$.xW@H.eeU.@ c S.<@ٳ|.puO@7Ȋ-1'@ \-B @"a-5~g,@:~-mv@R&V-C)@jY -G|@؃4,{5*8@1 ,Ɯ#-@:,[@.3,ri4@-b9)jj&@Կ(R&V@F4(ø{@1o( 7!@N;5(lR-#@@x(@H@&A)(qp@ 'wr@ [6'#x@3)k'ŬG@G)^'d#@Z1 '8U'(c@m3 A!' @&&߿T @Ǹզ&^t)@o1',C@`,'DU@O M&tj~@Ԁu&Б}kf@/0@@a(M@LL_gb@WI'>l4\@bS 5 v5@m8Go*ZX6@wʁQ.S@\(򐫴NQ@e@򐫴N@CcH5BB@ae|G@[-M@%wHH@/ejh@'!W|@U'(cZ]y@ѱ+{@ިc^@\@ŗN @<ϕ 7 ܇U@DUGZ2"&r@L@`x@X~|ѷ@xa Ech]k<@fCgn@=f'|E!5`@uy(2@䣃'gIDg8~@/m) D@jэ%@ qu*"'@ KSP ,@p& sRC@B0 2m@A `l o@MjO S 5@G#at@޽4Ck&@1eٔ[l7@cOh3@+jj~"@*0U2(@}D">?ғJm@^J?XY2@]ce?f;@8?ިc^t@vtc4?[T@U*0?:~@P%?.4@V. ?jf@aR*o?S?$D@rf(@]:@;dZ@q6@%[[@M>lLY@*F4@!-w1@,{@qp@+Q@ƭ-f@%`A7L@ -V@0HA@ z$LD|@tr@ ZFsB@@ =@NP@3#x @J :@J@s*@ |Zq@ 4m9@X%[@a@N@j%@qiC@WS@\7ɚ@yC@@D;@Mu@_Ft@[-@ʖ@̯0@łU@)@}A5Tv@mw1@oTK:@İ@bmHQ@$پ@VϪ͟@LD|0@M @W}@Pnwp@U5Q@wQQ@߻ײ@k@) (w@!@bw@.S@h3@^@B/@nY@4@ϕ@+&i@j@T6@] @>"@C1ڥ@O"}@0&@k&j@@wiJ@ \$_@ދi;@{@Ov_ح@Ë`k@ͩ>!@Ft@ "~Rv@+@ VB@v@ @eRK@ ZI@UfA@ KI@Ebh@!76@6M@!I@)QX(@!|{ Z\@+@! (wN@c^t)@!c^J8@QCr@"-\@M_@"f ׈@W)@"8C@ @"v@ہ0HA@"?ײ@ Z@#,#@P3:@#\j~#@ |Z@#ϕ@ḍ@#t@@#,@$ p@$WS@~E@$MA5Tv@qu!S@$|x?@c =p@$JL@U.r@$^ Fe@Gi,e@%|@8- @%/ôr@) D @%[W>6z@@%Fs@\N@%}ke@Up @%wd@x>@&@q@ 6P@&461@l<@&^CV@Ev@&v@zX@&P1<@TE@&@4@+C,z@'#-#@ fQm@'Os@fWx@'{ /^@n.@'iJA@ʫ]@'7Ȋ@`@'ٹ@qi@(r2@xJ@(0*@bwkQ@(]x?@KCV@(}OC@(CP@(s@ңS&@(͎[@OT @(OB@ʫ\@(T@mHQ@)P3:@@)K Z[@C\@)v@ '@) @򐫴N@)`kz^@P@)'gM@nwpy@*+ʬ@XŬG@*K 1ί%@@98q@*k @#/D)@*X<ϕ?e @(4֡b?T*1@$b"??"?@$+?EwUq@$f'?B@$?Կ @%"S?WS@%灃?Jm3 @(hhb?$tT@(W?`V@(O"?wkP@(Qm݃?ałU6@)4?& '@)9|ßa?[-M@%@)bZp?l5@)LYt\?sLA@)?7KƧ@)޽X?>B@*x-8G? RiY@*0?hۋq@*Y|?B¤T@*?JM@*3z?Ƨ-@*|?.3@*R-#?IGNΚ@+$ Ri? @+Mq"?ʖ\@+uGZ1??@+f'|E?J\@+l oTL? =p @+Y >?{t@,+a?p @,lLYt@-?? Z[@-)ֶZ?Go*ZG@-PW?t$5i@-vq?0p@-ڐ?쪸[@-zG?.ǹ@-wF{?cha@.6?Ov_خ@.7rG?2W@.^*") ?&V?@.R?g?A_E@.^5?|? Ev@.MUh?퀲B @.^5?|?@/"v?d=@/Jvȴ?9.@/tlvJ@`&/@zKC/.}@tj~/>@[/gb@?h/>-b8<@޳"/ ^@.nCz@B¤U.s@(ۋq .xW*@ATɅo.n<@YT!D.ElLY+^ s@k+tZ1@䣃'+I@x@IHV+zG@%u:>/*K4@;s*ǂӄv@P}ke*)r\@eRK*p =q@{%o^*Ez$L@8\g*|ßa@1L)cA @2) @ί%;)4AJ@9)jNzVC@ud)>T:@ [-M@)HG@ qu(+jg@4fP(6@Gn(Y@[S(ahr @o?R&W(5oi@9C(6F@t'ᛐ@4'nV@;Oag#'z$@LI('h@:'߹8R@`s'1@їH'xPܜ@A ['Ks@&,s.'_o @;D=G&X:T@'(b&÷-#O@+C]&v @=W&i&A(@OŬ&;@`pϿ&SeX@ql%p@i%BY@*0U2%@yU%W<+@ D%*1 @Ŝ $b@8K$΅3t@76g$@E$r؃4@4AJ$D6@8K$tc4@%+#K]c@5 D#8C@D|0#5Xy@Sh]k#]x@b쪸#/a@q R# =q@n"#ᆘ5@F"Б}k@u"tT@uy"FR<6@;'" @ sG!M@!;'@ڤ!%o^@A [!\9@tq!->'!@ s 9.<@XdE %;:@&J @2I pٔ[l7@? A@L/{J# XOLnn@Xtjy@dҲMgRT`e@pX:T},{ @|ؘl-@@JL_@Fsp&@ôr?>p@CB,!-w@E͔a=@OX7nX%[@/{J# @2Ip&@|QO4֡a@$d9@+jg3r@D(M/ws@ 82vt{@a=2oV`W@-V@'-"wpy@0aNx?@91eәY!@BiZ@K,@TV. <쿱@\$_[k@eKHӮh )s@mhr!̷D@uXy=H앿@}BǸ@bhS;@:%O @zG\¹N@Ld xF@DXy=@돛]&k@Q>Eg@BBCx @kK@CA0Xy=@[W~$3@s-V@8U >lL@76@8q`l큭v@E 5@  A!la@ k ]@׈ ,k@3)w,@#ᆘ5j@ ]cA@䣃'gMڐ@3)07@@0T@'=[kP{@bb˧3Qm݃@07e+@0@9@6F ?j@Л*? x@Fs?[@2^?$/@ٔ[l7a?a=2@~|? @ԚVWj?4j@ty?^_0X@¹M?fł@inX/?R?g@|E˼,?.3@qxB?a=1@`V?ڤ@M??g@yXbM?1&@l{?sպ@`'RT`@"#@T;'j@2 F@LL_@=@L#y@[S@VБ}kf@̢@gqp@Y2@u_ô@^"@}A5Tv@3bb˧3@@M@jUp@^)@|hs@ŬGH@~@}o~=@~q@hH@|L@ ]\@vJ"@ v@k I^@ LA@]hƒ@ pO@QY6@ ^Y@FVI@,C@<ϕ@|O@3-@},|@'n@E6P%@T@% @wUqL@(ƒ)@F^"S@4C@#-#@CV@A c @^P3@K[@:@bb˧@#r2@[ @T!D(@&A(@:~@|@oQ@wd:@ᰉ@wY@Ve @gmq@P*@7Cd@tFs@ʖ@-#N@1eәp@ a@@؃4C@qhr @D">@0X:@kP|@HjF@qVH@B@Ie@m@*9m @\n.@T@^_0@`V@35IP@9C@ϓ5I@9@'|E˼@6z@<@So~=@"0@82vt@ y@*@@u!@%;:@~f@2"@ß`O@ $ p@X:S@Q@Ipa@̢a@9.<@|wd@K @os@4a=2@_~+V@9XbN@Km@G@1P@ 6nCy@ܱF^@ nh@KƧ@ !Bp@ᛐo@ c @δcI{t@ \|ؘ@wd@!) (w@[B@!ZRiY_@z$LD@!¹M@2 F@!?@xF@"U5Q@j[B@"T@`VԪ@"&I@X앿E@#H@P`A7@#5LW@H5~g@#Y5;Oa@?X:S@#yE @76f@#K@.@#~@$%1@#1eә@ $ p@$f@ L_@$C 4@ײ@$qq@GG#@$D(M@B@$@`k{@$ RiY@1e@%+.]]@ 0@%YsБ}@P1<@%R<6@uO7u@%},{@]IQ@%4@G͉.@& Ć-@3@&<ᛐ@G0@:@&j^5?|@ % @&4C@ RiY`@&+jg@cO@&\(@.@'CB@9C@'?IW@,d@'s4@G#@'!Kr@{iJA@'?@tSMj@(ݗ@fFV@(Cy3@Rs@(p)^@4fP@(_@tc4@(VϪ@uK@( $ p@}2@(pO4@_ô@( @{D=F@(KC@fz9@)%:@T*1@)Omr@@n@)z[B@)Y_a@)ߏG@?g@)@+Ov`?^@$QF^"S?r/m@$}C\?A\@$If{?8\g@$),?iB@%?GG#@%0 |Zr?y"`@%\]ce?G)^@%b? x@%6e?h3@%҈p?d@& u"?xF@&8p:?D|0@&dqp?o@&n?qxB@&)r\?o]@&AJM+?o@'=?9䣃'@'>Ր?B¤@'j ?7ޔ@'M_?g@'#̍?^҈p;@'A?'=[!@(#-?^ s@(A6?,QI@(laR*o??~6;@(#$6e?E@(_Ë? D"@(aR*o??P ,l@)ݬ?@)ACrq7?_o@)k ?%u@)˼+?Up @)Jw?Ys@) (w?s/ek@*u:>?8Q@*=H˒?Zqx@*g4m?6@*)?}3@*D _?F)J@*4? a=1@+ a=?@+6]cf? 4Y@+` ?O鷿@+"S ?r 6@+Y5?ҨCQ@+[?Ր@,n?TA5Tu@,,~($ x?6@,U 0?ԊԿ@,}W?;'j@,LW?S@,Cy?@,s?т @-"S?rGE9@-F[-?NX%[@-ng,? ׈@-,s-?ɅoiD@-b?̢a@-inX/?Cr2@. &k?S#@.49XbN?u:?@.[yR4?xh@.wkQ?4xB0@.e?ܜM@.В8?@.c^t)?eәo/@/iQY? QCrq@/D? D@/k-M@$?(\)@/uy(?8J@/x-8G?Y@/s@dzRC0!>@ k0 ?>@KC/3rT@+U/gM3H@,#/=@D1P/t9XbN@];D=/J},|@vr2L/ @3t.@Ԁu.>B[@P3.W@ =p.xmqb@*)t.Np:~@d.$ p@t)<-K@6y|à-E@MoTK-,Q@d Ri-zOv`@{쪸-O]x@)I-$y@ᰉ',1eә@٩T,κ6;@S,th@ qv,xtj@G 0j,M_Ë@ ,",R@0ϿT+i-@F%+Oag#%@\bx+˒:)@ra|Q+t5inX@Q+HG@u+}At?@䎊q*`@!laR**k΅@9*&A)@2LfQ*m x@ e*@C@6*{0@0U2a|)q`l @DŗNe);:h@Y+ )l5@m=)c-@JM++)6#-@2a|) ʁ@\)(@$=@O"(x@W(ߤ@x (V}Vl@-()O"}@`d(]k;@RT`e({:hA@)y(Ny@ I'?( (@`:'eXO@1p'@D'~|@V3H+'jQ@h.ǹ'=Sn@z RiY`'Zp@+@&XOLn@N &@~&07@ |Zr&X<ϕ@4J&*9`@3%% @PH%ѷY@,]O%łV@k&j%q7Kƨ@$=%C4@5*8%*0@EM_$ZIf@UWh$@e;K$Dg8~@tD$Zvȴ@-$+쪸@ x#,{ Z@I{t#Y@q6#zNzV@y|ß#pﲪ@Wx-8#Auy(@ 4#@4@a(9"fQm@]U\"=Fk@ \$_"X@4C"UK@&IQ"&kȟ@4X !KI@B I^5!Ǘ9@O]:!ިc@\Jw!h6F@jEM`!8\)@w`]x! N@\¹N ٜ8J@.ƼS E@L z |@ZFsC J0U2a|@1f I< @?ԧqp@Ftqp@c Կ@I<V. @VT (wN@=@ "S (n@K:2ᰊ@P]5@*0U2a|q&x@4[ MUh@?wd:\(@Ir NSeX@T!D(N8Go*Z@^?ײ@@h3)*D _@rR[W~@{jgn@#M^"S@<7@Cπ3@Gz@;Dm3 A@Q^_0@~$@QX'Yjj%@˗xW)CcH@ӳp @ۥS2<64@n.3]q@CBm(@E v@7QH@$iXa Ec@xJ n@"}NP1@yhɯ@ ifv @ k}:@ ;dZw[0@ R<6TuM@ $_[h]k@ #I{tr 6@ (\),x@ -Ww&@ /rol5@ 0 ě u@ 0O4 ¤T@ 1o Z@ 3H+2 @ 3w[0h]k<@ 0 =q%zxl"h@ (%1kC]@ 4.۵]x@Xe!(9-@)@tm3 W@16E#M@$ud0U䣃'g@EoiDg[v@m(8ǣ @*0>ʫ\@ܑN;Ϳ%|p@x np&@g@SeX0H@r@tqq严[BF@*)tY@n2a|Q@ܡbx,@ʑSy:@:>/0Sn@}9ݿǰ @`sXs*@̷D?QCrq7@\(?Y|@z9?Ӝ[@p?MUh@:hA?zNzV@ Pr[?$D@ #9?zVC@ iY_?s@ LPr?7 @ &">i?|?@ 1l?M@ 8?G?Mj@ 8@ $/@{ 1ί@ If{_@ ׈@KC@de@2@XOLn@h@@CB@|G@>@@[[@܂#@:@\(@@ [7@}@@ߩ~+V@ ٔ@7ɚ%@ Y|@'(b@ j%|@3:}@ TҲ@@ ,Ex@L@ @%o^@ m]@{J#:@cᆘ5@R*o?S@XdE#@1@ @K]c@Cha@vF@)I@d*@"@X @t@M@@CpuO@bb˧2@0y+@x^@+@5ᰉ@ < (@R&V@hA_@$_Zj@1@L/{@8q`@[[@Ր@'j@@@a@N@ /@IoiD@ ҈@. @`k@bw@C\@|ؘ@As@??@"h ԕ@|Jw@r2@hƒ@Q@o@#cV@O&@ Pr[@:@sPH@/"}@Bej@Y @sGO@n~@\$_@2vtc@.3@gd@~f@oTK@5 g@,~($ x@($ xG@Wʂ@kP|@@ _@1P@f@@L@Q.ƼS@ @پL@~M@  Eb@"@ 2m@[-@ e{z@LW@ ,(@uM@ 5?|@zcsl@!!Bo@poiDg8@!53ti@^J@!h}H@Mty@!g*@;nwpz@!Ԓy@&z9@"Y!@jX@"a5Tu@d@"6@HG@"1@Ӿ"@#=Z@Tw[@#pjUp@_I@#0X:@O M@#;<@9@#H@^)@${ 1ί@bM@$3cHk@XOL@$1uy(@B@$9e+a@>@$YB@@$lC@f:@$a@KƧ@$եc@5~g,@%{@?@%F%@:pe@%wݗ+@i@%1&x@@%AJM+,@K@&ߏG0@ oTK@&1}ke@6@&_@<+@&t@u!.@&+U @c>P3@&4X @OQCr@'?>p@3=@'IUD@,<@'m+j@61@'np@pa@'4X @gw@'jX@G@(?o@}@(wth@w|@(u%F@^ s@(>6z@@(߭l5@rLP@(h3@9"`@(>-b8@ 8C@){@ ě@)BZ@)j2_@%2@)c^t*@"@)Ƨ-@},@)w@0 @*!]U\S@{J#9@*AN;5@nr/@*fFV@X{5+@*_ô@@28@*%|p@)9Y @*t@d2@+x?@ӄv@+v6@ި@+) D@/@$LW@>6z@$L?ڹZ@% ?>q?D|0@%M?,Q@%zэ%?hQ@%ֶZ?6@%پM?@& R?9C@&.lLYt??>@&[ 1ί%?j򐫴@&`?6fI@&Jb#?fQ@&]x?FIl@' Z?@'9k~(?dyU@'e?/#cW@'>?rGE8@'ͳ|?k@'Ë`?qu"@(?VԪ@(Ak? @(m`?H@(#? (@(B1?xzNz@(ﲪ9?@٩T@) 9&B?1&x@)FM?k}:@)qx-8Go?H@q@)2#?\7ɚ@)lja=1?#$6e@)om?rGE@*>'!?2X@*GߏG?tҲ@*rJm?9&A)@*^?A5Tv@*dž&?0 @*!6?YJ@+Q?J#9@+F@c^J? Ev@+pNU?gT@+B9C?@+Ѣ?VCg@+޽?a @,+?څݘ@,A.S?.3@,jcI{?]u@,cHk?7@,-e?P]@,U\R.?#x@-d9?_a(9@-8Y2?#x@-a4J?P]@- (w?7@-؃4?]u@-&i?#-#@.$?څݘ@.+[-M@?a @.T&q?VM@.|E˼+?"@.I?ܜM@.0?7!=@.\N?JM++@/#c?5@/CD=Fl?\(@/j3 ?~2f?nV@0XdE$?i,d@0:pe?$ p@0*]y@,VϪ0SD=F@Er(0>Y@^np&0)HU'@wQQ0k΅@*0U0 ě@n/H@q@:S/7`]y@٤^ /8\g@5/WǸ@ 8C/-}H@"Y5/"@:;'.ؒ%1@Qj.C\@ix.MjO@.XxW*@n~.-݂v@r.zcsm@ᛐ-׼wd@u-bx@ߏG0-r 6@ 2P]-V,s-@"XOLnn-*э%@8zNz,ag#$@OG0@9,zN@eO ,@q@{{ 1,|27@,P)^@d,$'(@{ 1ί+ѷ@f3+Jw@+@ (+tM@P ,l+Hy=c@(r Ĝ+% @=p =*ﺈ&@RT`d*=@gj@*?@{m]*jcO@(߹9*=N @LD|1*sWq@>-b)㞭Ր@ /)cI@E)i}@n)\Tw\@P*)/Ys@Q)"@`G)İ@ %R)V[ @ QCrq)(e+@3RC(T^@F4AJ(Ͷ_@X(@k](r>iQ@~*(Dg8}@bM(|G@9m 'jF@qp't}^_@ƒ)J'UDR?@dE#'^$5inY@cO'/{ 9@ Z['%S@ A"&'gM3@%&@/D)&v'|E˼@@98q&GO;d@Q 8&hb@a%(wN'@rB %[-M@%@ %~($ x@k΅4%]W@ Sy%.Ց@4${@ѷ$f @؃4CG@ `Gn@ A%|p,h@ Ov_ح7~@ XD*w< @ _;dZQQ@ eo]|G@ jX%TcI{t@ p 98@ t.۵:э%@ vU\R. 6@ s(n^޽@ \1&YLI(@ 鷿 P@BE g@[ `sWq@K$ p `kz@H5~g`H@Gy v5C@EHLO"}@@B Cİ@6tc4fQm݃@%@xx@q!Ks9.@SP y@GG#X@ p+@YCk@ݧB @ۖ($l[W?@>BZ9&A@u%F b@߹8R;dZ@?R&W# =p@ i/ne @3th򃚿3@[kϿbe+@z~.ƼS;@Lnmi@LPr4.۵@CV势fA@x䳑d3@WwH+@1op:~@4J/D)@ZSѷ@@xOLnm@"??'RT`@73?tc4@ ul?Цv @ }?:}OC@ 7kP?);D@ NX%[?<*@ ]ce?^@ iiu ?$Jb#@ t (wN?bb˧3@ |K[?"0@ F]c? RiY`@ 0@9?v@c^J@ #?4i@ i,e?_I@ )k?%[[@ #π?A@ _Ë?B@ ~{?̷C@ z2_@P@ vU\R.@@ ra|Q@s8q`l@ oO M@2{5@ m1z@{ 9@ kKrz@5;Oa@ ia@X?F@ d2m@hb@ Q 8@| #@ ,@@kz]@ 9@Wx-@CA0@Z1@ $ q@_`N@ Q@ f{_J@ %1@ z^5?|@ ,{ Z\@ iY_a@ )̷D@ >vȴ9X@ $T~@ Zy@ :}O@ _F@ =@ ^@ j@u?|h@ ɰ@+:)z@ gS@=B@ A%|p@l?@ r\=x@f'@ n@)4@ D ^@i (w@ o'=\@G@ }W@҈p;@ 䎊r@6&,s@ ,(@_o@ CQX'@"S@ 8@u@ܡbx@l"h @:@iJA@d@oa@LX@6@iDg8@!7Kƨ@M>@VH@q@l-@ $ @x{0@%;:@h#@T!D@Y_o@kQ@LL_@(M@@@"S 5@5:>/0@M@*Q@G#@ L8@Jnp&@hƒ@>lLYu@ @v@޽@u\R-@"?@*\}@,s-@>?ײ@؃4D@9@cA \@ JL@Tw[@3@zs-@ !5_@m\@ L8J@`9@ vİ@R<64@ LP@EHL@ ٩@73@!6@* @!4!D(N@=x@@!i!~@6F @!@@!ֈzd@6@" Fkw@s@"CNv@э%S@"x6F@f@"8Go*Z@d@"-w1@ڐ@#@j+C@#@q@QN;5@#k]@@//t@#@2 6P@#pϿ@&:@#z@[@$,@ڐ@$BpO4@9C@$nzVC@r2L@$fC@$')@$tc4@IV@${m@zVC@%6z@6e @)S|@ A7K@*);:h@ (w@*Xd@|O@*6&-@7ɚ@*2I@"@**1@{z@+1=1p@au@+_r@#$6e@+ Fd@IHV@+tT@x"쪹@+긥[B@`kz]@,5~@H c@,G@Z[(@%<+@y?x@&?)4@&}DUGZ? c@&~i;?'G@&?8J@&K۠?=Q.Ƽ@&e ?6z@&"?%ם g@& #? ɰ@&X%[?݂v@' wFz?< (@'Fe ?&@'n*?tD@'3]$?FS;@'݂u?#-@'qu!?i@(v?{5@(Abb˧?~GX@(mB?I{ @(iu ?e%1@(O7u?~L@(>E?g@)o'=\?rq6@)H`?:v@)tAJM?<@)'RT?"@)cA \?d2n@)' ?Y@*#f? - @*OfP?-"@*z9m ?v@*H@q?s@*ѓ?9.< @*ǎj?{@+'?ôr2@+Rm? c@+}ѢY?M:@+/D*?4J@+]$D?k΅@+ ?̷@,(4C?[W}@,Rm?< @,}Fkw?ᰉ'R@,4m? xF@,ѢY6?f'|E˼@,y?' @-%Ne?x@-Oj?)s@-y$')?k]@-?,2"@@-GG#?:@-H?h@.f;?lA!@.H5?+y@.qN;5?ܱF_@.K۠'?g@.0?h>BZc@.'j@?&v @/'gM?oa@/=4X ?Y5@/eXy=?_{@/!Bo?{@/??_a(@/_0X?ᰉ@02m?Rv@0&k? 4Y@0+ ҉?ɯ{ @0>t?;'@0R2"?@6@0fg,@uy(0 e@lC0r/l@D(M0] ^@uy)0Gҝ@02Y @ 0$_Z@"@40~|@:)_/z@Rm/.]]@j/1eәp@ѷ/fi}@*/;\$@LfQn/@E.DR?h@Bo.b#ᆘ@.'/W@T .cպ@&Ԁu.8mqbc@=H˒. >@T6-X'@k;<-1@ҝ%-Y @?F-^+U @O"}-2%1@Y!-g@,<,cO@L,L@)J,o@C,zx,U5@1R~R,(7 @G?Ҟ+=x@@\N;+ϡ@qo+Zp@̢a+v+jg@y+IN@a+^#@.r0*Ys@ٳ|*@4n@< *u@ej*g+@+ J*:xl"h @*cI{* gb@>q)ߋX6@R/l5)QR@0d*6}Vl@C%2*#x @W>6z)$ p@jt}^_)@$=@}W)H˒:@>)Q=1p@S)# @%(i@ȔG (Ʃ?) @(Q@HQ(i+@rq6(;hH@r 6( ؘ@#S'6F @5'3r@F-f'4m@X%[['QiB@i~+U'"m@z>B&7 @+@&mH@1&&?h@qbb&fi/n@+U &7Fze@Κ,fX&-@< %؆YJ@4֡a% Z[)@H˒:%yQX(@7u%I`@Ft%9`@.2X${ 9&@>7ޓ$)s@MEv$͞&@\7ɚ$Zިc^@kC]$*"@zv#<@ D#ʯx_@dE##~"@`-#j>//@O7u#9nD@ÐB¤# l-@ѧ\лo""S @ߙË"/D*@l5"x@L"Gz@c@@"A@f!r2L@#9!L_@0O4!uK@=At>>!SMj@J !"(@Vm R@c4 8@o iDg8@{z@ ^=@Ǹ -@"ue@{% @&i2[T@*ZFs@Ԫl/{J#@3H+ @ oiDg@S&B @_H˒:@Q{sպ@MB0@ :VWj@$tSPD@!i{@*QrGE@4n% b@>"C@G#ρ\#x@Pnwpl"h @Y_o ǎk@c/q!@l7`]y3z@u?f̢a@ŬGm@(n@~+V<@\@%ם6;%@Ձ$/zv@T2m@ "&*@ &z9Y k~@ 8F]d< @ F5AJM+,@ UeU.<ß`@ gud0+$')@ zI< py,@ 8C@4m9@ Ew߹8R@ Ms@ x bx@ zxl"h(n@ 0d@ J!zN{@ o#cW 9.@ D#π Ж@ 8\g do@΅3 GTw[@;dZ @ݬ ѱ+@S 5 c Sz@%[[:hA_@__m@~P3}Ć-@k΅3p+@Yuy)Wp@KCVA5Tu@B},{>B@>au$ḍ@;J#9O`V@873{iJA@4% S;wF@16ʫ\@/TK:@D@/~=ƈzd@2V߿6gw@:hA_}2@N!Bo*)t@uyhË`k@@ɿa@ֶZ]N@{d2@ ᛐꞿm\@ եOIH@ G ?>p@ ԕ*F]cf@ @E @ 鷿+ @ hHϑFV@ LI(9Y @ !"S5inX/@ 1R~R?w1@ QSy?A5Tu@ vfI? k~@ Կ?IV@ t}?Ӯh]k@ hM?{z@ LX?Fkv@ 8C?I'>@ hƒ?}At>>@ 2m?zcsl&@ ߮@?vȴ9@ 㢜wk?Ħ">j@ Y?vFJ@ y}?61f@ ?եb@ nwpz? 4@ eA?73@ S?_Zjj@ &İ@w[0@ , oTK@a@ - ֶ[@QX'@ +`kz^@[u%@ &x@-ǣ @ H@{ 1ί@ %1@fI=@ ¾i@Jb#@ :~@@ q!K@g @ Q@ :mǣ@ o.@ Y@ y@ @ |64@ "@ 8YK@ ZFsC@ th@ K:@ ,]O@ N&Ԁ@ ﲫ@@ g@},{ @ @c^t)@ ѷY@4m@ ^޾@Kۡ@ ߙË@"eF L0@ Q@%#@O"}@&NRv@98q@&h $ p@ @&^pu@ ]N @&?E@ v5B@& / @ Oq!Ks@%[@ e@%P+@jU@ !.I@$”VW@ W>6z@$UGZ1@ 2"@@#GNΚ,@ y=b@"fi/n@ puO@! 4@ 8@ @ 't}@sh@ ˒:)z@nmu@ }1o@pZx@ :>//@H@ a@)@8Cl@@|O@s@_A@$tSM@o*ZF@oX6@u@}ӄ@h3)@"@4@^5?|@?@W9m @~@QX'@N!Bo@JA c @E @@> @OLnm@4m8@|yg@' @},{@쪸@ x)@ݍyЦv@ NzVC@ҭ@ ܶ[@͉.@! U\R@ϕ@!@&@-@!r/l5@ŗNf@!\¹N@nCz@!փ<`@l-@"jF@sB@"9Цv @~^ t@"i@w`,@"E @g*d@"$@QN;6@"͞@C`O@#._0X@3zN@#SP@7ʁ@#qA [@+p&@#쪸@i;@# (wN@;D=G@#ǣ @d8@$4lvJ@˒:*@$e~g,@xGo*ZG@$|O@kJw@$J@^t)<@$лnw@Qj@%cHj@Dڐ@%FJ@7kP@%spP@),d@%%@n@%UhƓ@ CV@%fC@X @&&@С7T@&PX@-w1@&y2 @r̷@&S&@N;5X@&̭Wx@1zN@&iQX@Y2@'& Eb@)k@'U@B @(9.<@@)inX/@=@)'#$6e@bw\@)L#@//t@)r#ᆘ5@l]N@)v @^@)5~@Y2 @)@de@*EwUq@y=b@*(d@|UDR?@*T!D(N@fi-@*ŗN@"}@*|*EM@8R~@*@$6e@*[-M@%?!-w1@&z&?\=x@& (w?M_@&LD|0?#d@'%1?j5_õ@'7ŬGH?<64@'f2I? (@'?E@'i?U2a|@'k?@("T~?Q @(Qc4?!Kr@( qu?3@((5?8J@(2ѷ?@C@(7`]x?pZpU@(6e ?76@(1JM++?C,@(* ?IQ@("m\?Rv@(lLYt?}W@(2fW?[-@(@0#̎?;.]@(VVI?<@(riY_?<`@(_Ë?k1;.^@(Z1?F]cf@(bE?0OY@)U2a|?޽@)(#?,zxl@)R7Ȋ?/l5@)|:?_G0@:@)[0H?+@x@)ҠfBZ?8C@*U\(?RܱF^@*? @*B?C,@*ه??:э%@+l oTL?q6@+1E?7ɚ$@+] x?2f<@+7 ?cHk@+e%1?v5B@+䎊r?Nt@, T^?ȟ@@,6?dE#@,b ?1&@,:w?`@,S;wG?$i4.@,S?fA@-:}O?@-9̢b?m8Y@-c-#O?0J@-P1@^)&ue@)N&W@9vݬ&'Xd@IE%j@Y|o'%sPH@i4.۶%Fze@yvݬ%gY@GNΚ%6%@@%U\R.@)Ie$S@eں$`A7L@x>-$t{@l oTL$D$_Zj@:$n.3@䎊q#/@d#ί%@B9#@y#Oa(9@,)r\#1@:"cA @Gn"*@U"l7`]@c >l"Z$LD|@ptqq"( @}%!!eں@?!oiDg@wd!k&j@LD|1!bsP@1eәp!14J@ {J#:@A c 7!=@Cg $@XOLnn jm@H 8-8Go*@ 3H+@GGXy=@)D0+@j@#Jw@'d{K@2`,@=o~=~Rv@H`VMRJ@R)I}@]hƒ#π@g&k@q+/l@{0$T[ @HQCr@fP@'@0 )$=@SPb}V@3 A!YY}@[BFG 0@پL- q@u ,Pr[@Xy= ~@ I'>jm3 @ 9=b L_@ UL_@ ilDE@ y]x@ ">j{%o^@ K '0@ 2Iߤ?@ < Hmqbc@ /e1Q@ iDg8}-V@ 4֡b<@ ú4Ck1'@ yЦv!YbE@ ם gbmqb@ ôr$/@ 佺 Ri.wpy@ Nv@ ڕBCP3:}@ Y!!Wh@ =K6C@ eO 򐫴N@ 98R~ %@ T`d 9m@\=x ʰȊG@ Zy@)鷿a@76v @\|ؘ$@RI< (@sGsE@'R@GNΚїH@˒:*a@N@OIH7`]x@1;.m٩T"@Q֌ik@-*ENtT@8 >iQY@.r0ÀP@`Vտ'!n@ 6E!Bo@ ?3 WA!@ H替^@ S5IP!Wh@ [kϿn@ aGzW @ d0+@j`d8@ fFVϳRC@ iy}r/m@ qp࿢ZpU@ _?eO@ 1&?=b@ 6z?Դ:@ ﲪ?7ޔ@ x?V`V@ j@?'j@@ % ^?;dZ@ 2̷?/Y@ =B?7@ F*\|?`L8@ NxW?>iQY@ [ /^?<n.@ k8q`?ag#$6@ ~6z?O;d@ a=?KƧ@ ^ N?G@ e+@Bu%F @ 4C@#sl&l@ WiJ@"@ UGZ1@@ ;dZ@,<@ %2@vJ#@ qm@4֡a@ *g @2^@ @@ @c^@ K3@ q!K@ r @ iB@ g@ ՛=K@ A [@ ^@ @ At>>@>"@ x@b@ BB@96@ .]]@s;wF@ _o@6_@ b]yЦ@ n.2@tT@&qK@]yЦ@& @h4@'7Kƨ@CV@'>c @]9@'n;@J!@'q@ÀP@'z9@F@'@ ֶ[@("Sn@#x@(H+@*@(ib}@~'!W@(hM@i;D@(i/n@OT @(@/Zp@(˧2P@5~g,@(s4@ 򐫴N@(7>6z@ &V@'S@ A@'L'76@ .@&jUp@ h]k;@%,<@ Jb#@$($J@ WI'>@#nCV@ JM@"<#@ (c^t*@ F@ پ@kHӮh^@ RiY_@R@/^ @dE#N@Sn@`V.@Z@@Y >@FWx-@CV@QCrq@*@: @ ^@*0@@ r/Y@alaR*o@ &,<@ ^)5@ Y!~@ RD">@ ;@ PRJ@ ƿi-@ Km@ KH@ DW}W@!+e@ ;A@!^?>@ 11@!"&@ &Y@!*cP@ @!s@ FIl@"yЦv!@ n@";;<@ |H@"RnO@ q@"sy@ -*EN@"!<@ /nV@"lD@їH@#0C@L_@#k/V@yo5@#k}@~mH@# (@ŬG@#`k{@LYt[@#D*@ @$#th@=B@$fs@-"@$@M.@$#cW@Q@%N9C@e%@%\N@.@%{ Z\@.@%zVC@y"`@&.,@f[ @&]5Xy>@OX6@&D|0@1o@&zN{@ե@&Fs@SP ,@'P1<@Lnm@'8\g*@hc^t*@'hiQX@KHӮh^@'Y}@,&k@')y@`V@',k~@ @(({5+@`A7L@(UϪ͞@Ё>@(.]\@Ć-@(a@sБ}@( c S@&V@)߹8R@yHU'(@)BM@\n@)rU5Q@@B @)U5Q@&IQ@)ҏ\(@ @*4@Q@*3ߤ@^t)@*dSMj@ϿT @*@x@޽@*Ɯ#-@RJ@*-@҃B@(sպ?"?@& ,k~? I@&9;D?[ʖ]@&ilD?0 ě@&FsB?-*EN@&ʁ?=@& ?U@'*D _?~|ᛑ@'ZD _?QCrq7@'F4?#̍2@'8 ?!.@'I< ?@@(6?z$LD@(I8J?j{@(y'>E?;<ϖ@(@? T6@(Q?ܱF^"@)QQ?s-@)6f?|z9@)e5Q/?o@)iЦv ?S$@)?z?}W@)2 F?wʁ@)\лo?|G@)%F L?D"@)^?c^t*@)%ם ?ϋX6@)?)r@)[BF?5yh@)Q?m=@)ﲪ?$5@)G 0?ϠQCr@)iB?8q`l@)>WS? 6P&@)l7`]?($J@)^ ?{5*@)A!? \$_@*3?lvK@*1ae?پLI(@*QD(M?6f@*uoi?&@*cI{?d0+@j@*ʖ?5h@*|Zq?lvJ@+?X'@+>vȴ9X?[@+iY_a?fپLI@+n?0OX@+ ě?W)@+Կ ?ҝ@,9?7@,Cn.3?M.@,oG0@9?Ր@,C,z?@x@,پL?%@,T~?csl&l@-Ov_خ?(g@-I>BZ?A!@-uj?5Q.@-D?sպ@-,d?7!<@-i,e?/@."m?ϕ@.M*EM?X:S@.x~|?A~6@.S?QX'@.?>?ڐ@.J?/Y@/#5IP?G%@/M%?DUG@/wN&Ԁ?@q@/Y5?eO@/4\?H@q@//Y?Ǹ@0?%@0$?$/@09o6?D ^@0N}2f?[l@0c33333?7Kƨ@0wڤ+?m3 A@0sG?=K]@0G?csl&@0yЦv!?ue@0FV?t>=ć@0D<@JԿ 0>P3@cY5;O0ǣ @{'j@0Ȓ%1@zG0(n@d0-V@)40.ǹ@Y >0rm@d0+@0]XOL@ UhƓ0GX:S@%&01i}@@kC]/hۋq@F]c/AJM@ݘ/U@ R/\1&@Ȥ~/0}ke@߄{/\¹N@J".+@ A". $@#sl&l.0X:@9"`.R%@P#cW.%oiDg@fL/{J-*0U2a@|UDR?-Nx@:)y-Zjj@ ԕ+-rM@%!-E+a@E --@\ ,`@s,4X @&,9@(3),bB@=!.H,4lvJ@QR,-@f,<+$Jb@{%o^+ި@+|X%[@Hj+N%;@ 7!+ x@L_*-V@򐫴+}UhƓ@\N<+N)4@}A5+ NU@2I*Kr@4֡b*m@ 4\*#π@U=*e>-b8@2\=x*6DR?g@E84֡*6f@W+j)d@j򐫴))y~($ @k}:)J)y@ Eb)g @,((z@űH( Z[@}W(a@@/n(\ #@pd(,/{J#@ *EM'@\@nY!'=x@@.O"}'&V@@?$tS'ks@PwFz';{ 1@a2^' m@qί%&u%@K3&Sy@%&zcO@`A&Iiu @P]&)@.4%z@d@ғJm%#$6e@8@pa"nǸ@ֱm"<~($ x@OI" fC@ (!<ϕ@ڹZ!t@ =p !sZ@D!Ad@# !P3@/^ s ܉ (x@;yR4 ;'@Gi,e wsPH@S0 D*0@^)4 䎊@jZFsCFI@udY+@,'7tj~@S$@`V'@'Rv6@QH[ Z[@ȴ9XIHU@ [7Se@Nʗ(˒:*@՛=KlvJ@䎊rR4@Y 1@`]x+@ i,e)v5B@  Œ8\h@ =K]c^J82@ aaea@ 7!<q@ >'!>"@ ܜM-*E@ Wr ě@ ȏ` y@ /:@ ڪ:э&@ 4m93#@ Fs[-M@%@ _ËbT~@ UGZ18qa@ ̷J@ q"&Il.@ 䎊r?z@ pϿN @ q"8Ck@  kNP@ B OI@ 7T7z9@ MjO ̢a@ z zNzV@ >g, uinX/@ {{ WI'>@+ N 4Y@xWYʁ@ÀPv @8CkC,zx@"?Ҟ@B E@'gM3@˼+K>WS@Fv+jg@ʡ!BěT@m3 @<J@9Cſ@x@ԕ*1n@;:hL@U.rڿؘ@_%[BE@iud@9Y >lL@ e@̿"wkQ@ &kȟ-*E@ JG|y+@ ydobb}@ B9Cn.2@ ($J$')@ D(MrGE8@ #}3@  VM@ ~+@ |ßaqiC@ >//wFze@ S&ɚ$(@ SP Sn@ _IϿ@ ß`?pd@ )k?NΚ,g@ Ǹ?ΒS&@ c^t)?׎!R<@ 7Ȋ?jܱF_@ wd?nP@ AZR?_@ j ?bw\@ ?y"`@ {?٩@ g*?G 0@ 𳑒d?tc4@ B0?IOQD@ r(?\N@ "?@̷D@ 돛]@'RT`@ +@Fs@ DU@ ě@ {@1@ T ǎ@zG@ B@.t@ r"?@+%@ W}W@ e@x@ ѷY@ Jm3 @ {@ -=@ HU'@ :hA_@ bw]@ \$@ 7Kƨ@7ޔ@ @]ce@ L/@5Q.@ ͳ|@X^)@ ~|@mH@ Vu@U@ Xd@b#ᆘ@ W)@2D">@ mqb@z@d@ 빌~($@$zVC@]ce@&6@ ܶ[@&f;@ zv@&Zp@ \}At?@&>P@ t);@' *\@ Gz@'cߤ@ s@'m@T@([:)z@͙Ev@(28@,]@)Lm?@N@)`O@ϿT@){m@ud0@)H@ם gb@*FJ@jܱF@** @z@*Fi-@K@*Yi}@8\h@*^$t@bC,@*O)r@5IO@*%MUi@ VC@)D@ "@)Toa@ K`k{@(:э%@ ЫNP@'g@ >//t@&g6f@ eO@$݄M:@ K@"vH@L@ D^ N@v ׈@i;yS@cHj@_ح@NcI{t@ "SP@C3@ X-8Go*@@[@ @eU.r@ ě@G 0j+@ Կ @ @ ׍O;d@ ߔ]s@ KCW@ m@!3eO@ 4AJ@!g@ HU'(@!lC@ ,d@!Ѝ[@ t@"}2@ N;5@";ʫ]@ `k@"r-V@ uh@"+@ g8}H@"ܓ ٔ[@ Xs*@#P3@ H@#@j@ 7,@#q6@ ҈p@#O M@ !Bo@#ܙO"@ L@$e+a@ 9@$W-@ Wh@$K3@ n@$l5@}K]@$27@)k@%&jUp@ȔG @%N@&Ēy@ﲫ@&RiY_@W@'/{J#:@4SMj@'d:@Ր@' @_@'΋i;@DUGZ@(nO@2 F@(5Q@`H@(e;Oag@}@(s@D@( @xYJ@(Цv @WxW)@(Y @*fB@)a|Q@tj@)AQ@ݗ@)rvtc5@'(@)a@~L@)P%@ʖ\@*+@e @*9nD@t@*k@@*1o@wUqK@*γ"@E1;.@*|G@Ǹ@*;'j@4n@)e@wk@'Ǹ@I@&VI<@4qp@&_@6&,s@&̢b@ e@&/l?fA@'u%? #@'KC]?rGE9@'|[W??cs@'|o'=?6n~@'($ x? r @(ߤ??ܑN;@(?As?*)t@(o[W>?7@( ?RܱF^@(QCrq?$_Zjj@)H?;L@)0~?i}@)`NP?},@)8?g8}H@)#̍?76f@)H?ᛐ@*`N?*d@*FFJ?a@*s33333?+U@*ߤ??k@*?G0@9@*}ke?&a(9.@+? \$_@+;Q?s@+[bw]?B@+x{5+?h3@+X6?`A7L@+6?D@+r/Z?bM@+Z?5B؄@+OQC?cڤ@+n?g@+ڐ?A c @+jF5?NzVC@+ (x?#Y5;O@+Ov`?Bzcsl@+vJ#?VH@+uK?]cA @+HG?Z'(b@+ũh?LD|0@+y?5~g,@+>B?CcH@,ިc^? 6P@,=x??ɯ{ @,c@N? ٔ@,RiY_?lVϪ@,?98qa@,#y?CA0@-DR?g?+@-0>WT?xW)@-\8\?_Ft@-Z1?%[BE@-/m?}9@-vȴ9X?eәo@. :?vU\R.@.5 g?: B@.au!S?"@.[?®9C@.~?hK@.!D(N?Ib@/? @/:"?1P@/fJ?MUh@/A [?Rv@/I^5??Ր@/9m ?~M@0 ̢b?@0_0X?VԪ@03#c? /@0Ha?D@0^"?Б}kf@0sH+?VM@0]k;?f@0f'|E?ԕ*1@0^)5?UGZ1@0I'>?Qj@0$_Zj?rGE9@0R~?nY@11?@1^5?|@oa1,yU@ӄw1q@ՠ{5*1t[ @p@;:h0#w@BY/8K@ RiY_/ɐl-@!Bo/V@8d/pr[U@NΚ,f/CZ@e`A7L/`-@{ײ.;'@/l5.)4@h3*.Jw@E.b@ԀuM.5j@_|.5~g@uMU-ډv5C@-!-w@+;<-D)@@IQ-Q~6@U'(b-#Ր@k I^,Xy=@,ǙXd@Z,pa@g,k3z@LI',<܇Tw@7,np&@2P]+h3@yR4+LA@+a@3,%|p@n+D">@+Jm3@)sБ}+:@<ϕ+U;'@PWx-8+%ם g@c *[-@v-*G#@{ *kP@ ٔ*hg@D)*8Y2@!6*c^t*@V. )TɅ@檎cI)F@zNz)x^)@ ﲪ)H)@u")@.2X(K]c@@^_0(ߏG@QR(a=1@cS(WY@tAJM(&tc4@n/'llL!sG@a!_@nN&Ԁ!M@z{!Sn.3@Fs! L8@]9 qu"@ 4 "`@9m @F S,zxl@B T @Z؃4C@ؽf'|Fqm݂@ =p :э%@VX @.< WS@ UG @ a'R*!B@ keZp@ tsV&,s.@ ]x\¹N@ [WBu%F @ !~]N @ ?tVWj@ Б}kfD@ 2);@ ivJ?@ *EM`;:h@ @ NK@ Xިcm@ ^҈p; ]x@ d'gM8K@ iͳ|JȊG@ m=ރ%@ n1p{@ ml5*ީ@ fq=@ XPH*8@ @4m9Ѣ@ u%F  6P&@ İ^ s@ <쿱 i;@ tCk& %S@ GY tߏG0@ )x m1z@ ިc wd9@ oV`W@ gw%;:@ ZӔ1zO@ ͞xl"h @ %"wkQ@ KNʗ@ UqKt4@ [/w@ `N`V.@ # @ &">i2^@ )}Կ_Ë@ +΅3Կ @ 0{ſJ\@ 7N&Ԁ豚A_F@ Fi},s-@ a$~鷿@ qp?|h@ vf(o@ ke@ CP8ϿT @ N&Ԁ@ ,m?>@ >WT@ '76οY!~@ ?(F@ ^_0Ë`@ r2ulv@ ^5?}Qm݂@ gTsBZ@ LI(ٿH˒:@ %+ѹ8R~@ 4c4u@ D8 ?=@ MfI=?JL_@ NVu?ӥq!K@ DCA0? 4@ 5_ô?+jg@ 'wY?e@ {? Sy@ R-#?{@ -V?d@ &a(9.?-٩T"@ :C\?u%F @ Vg?W>6z@ qί%? ﲪ@ ȊG@"3@ 6P%@82vt@ W@$@ $Jb$@CA0@ ͳ|@}@ ŧK@ A_E@ 1f@ &@ LD|1@ rfB@*1@ +@ ܇T@ @5"0@ uTuL@5Xy>@ mRJ@@ |@mty@ zs-@#!łU6@ 9@$Y@ N@%Q_Ë@ ,d@%d@ @%g@ HH@&J&@ Jn@&v5@ @'")@ |UDR?@&A_E@ 䎊q@'%nh@&:@'۶gw@ȴ9X@)6F@Ha E@) /^@Lx?@)R~Rw@G@@)?G@A*ީ@) B@9wr(@)Cy@2Q@)đ)@-KHӮ@)@@/#cW@*.`sW@7ue@*V`V@C4Ck@*i"`@Jw|@*lUDR?@?ײ@*jM++@@*giJ@͞%@*W{@W+j@*@ U\R.@)z:э%@  @(=p =@ 0@&F@ /Y@$H2vtc@ /@##*0U2@ $LD|1@ (x@ ; Z[@ *0U2@ M>lLY@ ܥzxl"@ Auy(@!!laR@ 5IHU@!FC-@ (M@!{Zy@ tqq@!'(b@  4@":@ i;y@"] qv@ ke@"Z1@ (@#|@ ݝ4X!@#dmH@ @#"@ *"@#ҌD@ d@$灃@ q @$5f@ hJ@$k@ =o~=@$8\h@ @$␫NQ@ 7~@%D<@ zN{@%T{@ eF L0@%m@ 6)Ie@%7ɚ%@  c@%|Q@nY@&#"@$@&Nl<@S ҉@&}Eb@r\=x@&Q.Ƽ@!R<@' b@j\|ؙ@'B@6[-@'ZW'@/D*@'l oT@%!@'c @}At@' >l@հ5Q/@(v@3H+@(.@Ňݗ@'ﲪ@r 6P@(@Y&A(@(T@x@@P@(؃4D@+jf@(^J82v@LB@(Ց@X@)Q@ ٔ[l@)Ai@,'76@)W?Ҟ@^D<@)\M?@%|@)PgT@r/m@)İ@_~+V@*@LNx@*9Ev @8ʁ@*k쪸@%&@*VX@@(G@8YJ@(9?) E@ @%ʁ@ ~@%GG#@?G@&%@'gM@&@Se@[W@&rz$@+@&Ʌoi@/@&ּS;@͞@'b@zS|@':hA_@d=@'l!~|@O,]N@'%@9bE@'X:S@#n.3@(D@ UhƓ@(2@4n?$5inY@(c ?_E@(@x?Fs@(5~g?fپLI@(!lLYu@)&?X:S@)f3]%?P3:}@*@? Zq@*L~?*@*| 7"?x@*R~Rw?bM@*ݖZ?_8R@+ 8Y?.@@+=nY?puO@+j")?n@+8qa?~鷿@+)Ie?u\(@+#?G 0j+@,#w[0?LB@,O;?-V@,{f3]%?s@,$/?DU@,_?}KZ@,);?_E@-wd?G)^@-8F]d?64K@-TK:?-"@-k}9?.Se@-~&Ԁu?: B@-_?QY6@-=1p?r/Y@-T`d?S@-t?A c @-q`l ?;'@-jUp?'gM3H@-z??N,fX@-wʂ?l[W?@-x$ xG?uMU@-~?#@-F4?Q֌i@-QH?w[0H@- Sy?`>WT@-0OY?BY@-V?`sX@.Mj?MUi@.3D=Fl?y @.Y{t?#-@.(9-?c @.k?-*EM@.Ӎ?J"@.8Y? RiY@/(n~?tj@/Sg l?I$(@/~9.?Vu@/?~Rv@/Ck? V@0U'(c?Y+@05~g?ty@0+gw?5?|@0A^?'RT`@0Vڐ?ałU6@0ly?#π3@0B?0@0Ë? Ri@0 gb?e!Wh@0mǣ?%P@0ôr?!Wh@0 '0?6e@1?g?d0@1k;E@Ck,{*)s@WI'>,KXdE$@kJw,Hjܱ@~LX+F^"@%1+)4@+@$=@>-b+]f'|E@۠&+-sBZ@t*hƒ@:*HQ@g8}*q"@CA*l@)x*BZ@٩T!)IP@DR?h))Ie@,(),@{0(g@ɿb(JM@$'(S*0U2@C]("T`d@X%['N@ ['j@0OY'L@.G'\,d@?W}W'*o?R&@O7u&.@_KCW&Ʒ%@o:& Ri@W}W&b ě@cI{t&0T@:}O%X/D@t%ߤ@@L%,(@s%gCcH@zN{%4\@̷D%*o?R@$ς+ʬ@)^$?@$/$iHU'@#̍2$7mq@1$5in$%1@?EwU# [7@MuO7v# <@[nCz#j"@iu #776@vf#Z1@٩T!" 7@$tT"yЦv@y"jA c @9m "6}2f@~+"a@8 !) D@H!L_@B!iLD|0@/e!7AJM+@tqq!b@UqK ܨ?@O" @mH ؃4@gߏ r<64@ )k R?g@ " /rq6@ n/ wr(@ .}A}A5T@ D">h sG@ vȴ Up @ #̍2mqbc@ -w1C}9@ mWwZ!5`@ z:o'=\@ %hTɅ@ _a(/@ ŗN=@ ="\(@ J\R-@ B1Kq @ O"}"@ ;:hl{@ 0O4M@ : ~L@ C`k1-@ MoTKdo@ WwdU@ ceO@ s,j(wN'@ {{^ N@ L8^t@ a@uO7u@ 2WyC@ /ej [B@ _ިc^@ bb˧3(b@ &iڤ@ ,<5DR?h@ b;.]@ W9#@ $mH6F @ (Up @ ?au@ _p a@ vy|à $'@ fkȟ ᆘ5@ _ 4 4֡b@ \7ɚ ժ@ ]-VC-@ `'RT`vȴ@ csl&l?z:@ gmqeU.r@ j9m HӮh^@ n VH@ rLfQn^ Fe@ u׈KZ@ yHU'(#9@ |pdI'>E@ T Ǐod9@ 74-Ր@ <`<`@ xF]q@ PܜNȟ@@ /^ F@ 7"Bom@ p+| 7"@ GI@ 98qK]d@ T;a=1p@ QuMU@ ,'76ο˒:)@ =޽nX/E@ Sf3+@x@ kGNϿ,Q@ ^"S"/@ +r/Y@ !KrſH@q@ MaזБ}kf@ a Ec/Vϫ@ Eÿǰ @ eL8\@ IQ?v@ }?+@ mqb?ŬG@ ?ԩK@ $?%1@ }D">?xF@ zVC?\(\@ |;Oag#?\R-#@ %2?m@ ݗ+k?TK3@ a?},@ A5Tv?͉.@ o~?TuK@ ͳ}?>WS@ T ǎ@O鷿@ @+z]z@ >lL@fQm@ cO@F}2f@ T Ǐ@ gT@ bM@ 2P]@ + @!Bp@ `@[ײ@ uK@N;@ qiC@=x@@ f'|E@BD@ Ǹ@m8@ ިc^t@Ѣ@ K@eO @ ϕ@A!la@ >P3@T6@ ^`sX@o^ F@ ;@jv5C@ !-w@L4\@ ,@m?@ xf:@@ di4.@D=@ SUGZ1@Q@ g|E˼,@yY}@ q2W@ "a@ 84֡@#07@ 5@#iu @ m݂@#a Ec@ BE@$$*1@ 3zN@$gS@ O"}@%M:@*`V@&*@//t@&r(@e%1@& B @ѧ\лo@&)s@5B@&4?@/@&RNQ@xJ@&g,@1o@&qk@Wh@&GE85@@\@&\|ؘ@ȊG@&sБ}@*np&@&}Vl@IcHj@' ٩T"@g 0j+@'C:}P@'R@'xJ@1zO@'K]d@%o^@'ם gb@@(C-@ #@(9x@g@(te%1@X6@(p:@<+@(5I@mZ@(,]@VWi@(&i@ 鷿@%2#@ OB@ g@ iB@!Կ @ >($ x@ h%[[@ 2[T@ zG@ }A5T@#wN&@ (wN@#SeX@ P@$պ@ @$GN&Ԁ@ { @$|ߤ@@ wʁ@$8Y@ b.]\@$ہ0HA@ G0@9@%*1@ (wN&@%)̢b@ Q @%N.2@ x@%w2P]@ ŬG@%BB@ T~@%앿E@ 7Cd@&VH@ wd:@&JQ_@ (\@&d2@ 9Y@&1@ 9m @&X6@ ZpT@' ȊG@ R@']݂v@ N@'p@Jm3 @'s*@R<6@(-iv@e @(ln.@U=@(~鷿@I^5?@(S;wG@(@)c^t)@|o@)3}3@-"@)b*o?R@1Q@)ޓ@s/ek@)ӌT6@eu:>/@*T @U.r@*H̷@D ^@*~au@3rS@*i@!@*J@π3r@+#x@H˒@+PB @\$@+VWj@&A(@+r Ĝ@vݬ@)*d@/e@)KxW)@@)j@zd@&'/V@f[ @&Z3 @Rn@&݂v@=^_0@&- @(M@&[l@a=2@'&g@@'X' @?) @'HӮh^@Դ:@'%@Ms@'1ί%@K@("/Y@a=2@(TɅoi@~-b8<@(Fs@h)Ie@(rGE@R}A5@(]9@;<ϖ@)٩T"@%F L0@)NT;@T@) =q?@)U5Q? @)A [?򐫴N@*u:>/?e2I@*FپL?6C-@*x?F?n@*?أ/D*@*ڲ{?7~@+ ʖ]?y=b@+<}At??Ib@+mk;=?mqb@+qi?_@+H˒:?gw@+a(9? @,0|?TK3@,`>WT?$ xF@,NU?/Y@,D(M?q@,DU?27@-?]u@-N҈p;?,@-}|?SP @-Hjܱ?#9@-Q_?m@.ե?k @.4X ?={ 1ί@._]U?@.^5?|?臨M@.-?\(@.%|?ěT@.\N?_1P@/VWx-?ZpT@/jܱF_?^z9@/yͳ|?mǣ @/? e@/X?\)@/*1?x-8Go@/~[W?At>>@/wc^t)?(n@/o䎊r?O4@/jt}^_?o]U@/h?nCy@/k?,R@/s?k΅4@/XOLn?LD|0@/!Wh?v+jg@/ Z?Zŗ@/;:h?8J@/7 ?٩@0?0+@j@0(߹?|@0*D?sWp@0>m\?J&@0S? ҉@0g˒:)?E @0|پM?j@0?) ?c{ 2@0I'>?'d@0u:??g @0-V?#Nw@0zH?o 6P@01L?0#̍@1{?6@1(- q?B @1="?r(@1S ҉?2f/ Eb@s.@c^t*.R4@-b8<.<@ӞՐ.\/{J#@b.-ulv@2f+}Vl@iᰉ'*[BE@|`*Q֌i@cI{t*sOI@>WT*Bf)4.۶@лnw(+@-C\(4AJ@?W}W(B1@O(R;yR5@`Zq( 9@qVH'9Y@ҝ%'&@4n'@x@r/Y'VfI@m'$E#N@„1Q&\лo@Y&n@ &,d@A_E&YQ @$/&&a(9.@RJ%]$D@uMU%B¤U@.x?%ӄw@=[!Z%Y䣃'@LL_%&Ԫ@Zx_$f3@i$')$QCr@wue$@K$Xq`l @$$j~@R<6#jUp@Ys#@K[#0 )@w|#U2a|@9#!!Kr@㍣"ײ@v5"ŬG@SMj"J@xB0"|GG#@"j8C@QX("Wd9@ƒ)";쪸@3 A!" Eb@MUi!Y_a@鷿!p:@ oiD!. @  !RY@ `G!@ ,VϪ r Ĝ@ 8 /@ E b |nm@ Q}ke E^ N@ ],= +@ jv5Cs@ x}H=B@ e@ ôrBzcsl@ 4灄@ ")Pj@ ϕ)y@ ,<`:p@ :n@ Qs/ek@ 7ɚ$")@ WCcH]y@ b/3ߤ@ kud0+Aɕ@ tc4\N;@ ~{@ 7 }4X @ PܜN ѷ@ %1I<@ + Igߏ@ t}3tj~@ {m䎊@ =x?@ .S@ 臨MPgS@ D*y|@ 2f<LL_@ 4Cyg@ i^(r Ĝ@ 5͉/ej@ M_jj%@ *") jf'|@ nPQ@ LP@ ͞& ܌ ٔ@ S;wG !R@ Dg8~ @ A! 5K@ U2a| YZx@ r2M ~+U @ *\}/D)@ i;&c@ nPvJ#@ Tw[#cW@ hH3MjO@ ϛ]:Ve@ Դ:}W@ ۫!Z @ o]!-w1@ "?x@ [a\@ ˿H@q@ AJM+wr(@  nO@ [_zNzV@ 7ɛ2 F@ Q~($ x@ +8q`M@ LD|0i;yS@ {{ 1Ͽ!-w@ (nnCy@ GſX%[\@ {@ ">j(mqbc@ ag_@ <쿱<`@ p+ RiY_@ +<`@ yD|0@ |GؿM++@ ʛ(z@ G|bb˧3@ ;wF?7KƧ@  V?+@  ?6C@ [?Ӯh]k@ "D?@ 'M3H,? (@ (9-*? 8C@ "D?cHj@ HH?ֶZ@ cA \?}ӄw@ İ?W =p@ `N?&v @ 7!?\(@ =?Q֌@ ?ɐl-@ "h ԕ@|ϕ@ &i@hJ@ \@["`B@ fP@_uMU@ ҝ@-@ #cW@ j@ !@ @ 08@@ :v@鷿a@ ?$tS@y@ >lLYt@}^_1@ 5Q.ƽ@RJ@ "D@FIl@ w@@ `G@sպ@ sg@b@ gqp@حV@ `-@p|@ T`d@7~@ x@oO M@ s A!l@5Q.@ }@xe+@ -e@A [7@ -Ww@BZc @ $/@$/@ ͽs@ M@ 0p@!hƒ@ Stj~@"(?G@ `1ί%@"dD@ r{5@"im ֶ@ +@"&3]$@ B.4@!ٯ{ @ @"@@ g@# j@z@$:@c^@D@%;'j@W @%\@).}@%r @7ޓ@&v@Fz9@&IrGE8@Vg@&s{ 2@eXOL@&Y@u{z@&0@cA \@&ŬGH@ Z@&Wh@t@'@Y5;O@'.灃@o?R&@'Vg@OB@'}Ć-@/e@'L@K3@'2X@Fkw@'$D@ךkP@(HG@bb˧@(.3t@,d@(^x?@?) E@(O;d@k@(lLYt@ g#$6@ zN@ qK@ ڧ @ LD|0@!hr @ "C,@$]u@ A7K@$Wx-8@ @%iu @ @%`p@ E˼+@%=1p@ 鲀,(@%!-w1@ pP@&ʖ]@ 4K@&V+ J@ ?>q@&6@ c*cP@&Mj@ (b@&IOQ@ Fs@'63H+@ D@'~?>@ =,{ Z@':p@ ŬG@'jG{@ Կ @'IQ@j@&¤T@ܻ¹M@'uQ.ƽ@ 6F@(8s@ ($ xG@(j_@F@( Ri@9m @( @X¤T@(%@Dg8}@) @44@)?"}@$9@)tVWj@h]k@)İ@1ڥ@)]x@m@*"@D(M@*IOQD@gT@*r @[W>@*,<@r/@*8R~@)4@+5?|@xF]@+S @yD@+iJ@g*d@+?@UeU.@+~6@Cr2@,&'|E˼@1[W>6@,Z3 @FV@)dZ@CA0@)حV@{ Z\@*;'j@ُ>(@*H@IֶZ@%owd:@5?@%@"w\@%n@Mj@& Ƨ@D ^@&?ײ@lC@&s`O@o~=@&o*ZF@Ms@&+%@ I^@''!W@2@'BjF5@_@'uRK@mB@'[W~@XiQX@'ܶ[@C[l@(`N@.3@(C-@e+@(vL/{J@fQm@(UqK@8Y@(I^5?@ŬG@)) D@"@)As@1&y@)tqp@@)G@wd:@)Цv @hb@* E˼+@RT`d@*>T@;K@*p=@$D@* @ .@*;K?C@+AJM+,?=@+9/n?[W@+ku%?_zNzV@+-?/^ F@+t)@.ڶ&?޽X@/ @'?@jU@/9r?wUqK@/h4C?D">j@/6&,?N;6@/IHU?߄{@/m? <@0rG?}OB@0%.?NΚ,f@0;o~=?!.H@0P@98?+@0d8 ?Q@0w!B?xB0@0mu?]:@0ue?/s@0$5inY?ԊԿ@0L?G@03 W?$k@0bb˧3?GG#@0 $ q?c@0~+?uKۡ@0̢b?~*@0z$L?{lC@0%2?oǣ @0D?Zݘ@0j?=f'|E@0淪%?@0'|E˼? 9@1},?27@1F4?8\g@1++@?[v@1?< ?$T~@1S@N?F4A@1gM?8@1|[l7`?tپM@1Dg8~?7rG@1Rv?/@1yR4?<ϖ@1а{@ 1حV@ 7!1R~R@r[U16@TɅ1 @,'71i,e@̢b1y(@0 71bި@H앿1LxB0@`:э16 <@x<ϕ1@o1 > @-"0d2n@|ᛑ0ۺ4Ck@ժ0:@쿱[W?09䣃@4Ck0c^t)@ 0#̍@1P0ibw@G<+0R@^t)<0;z]z@tߏG00$\ @$ p0 /w@LA/$@[0H/Ww@Eb/@ >l/_;dZ@ʁ/0 k@`sW/QR@# =p./m@9.< .wk@Ne.tM:@c'gM.D/@x{0.Q֌i/@Z[(-GG@e+-1;.@1f-y@9&A-VH@ߙË-&5~g@zN,v@#,ŕf@W},6P%@/{ 9,dj~@C;K,4(M@!߹8R,Eb@5d0+@,|ؘ@H7 ,kz@\ B,:]y@o*ZFs, >(@+ʫ+b@ >lL+{@(߹+uK@mǣ+DFs@ |[+}Vm@P]*Q@o*Ms@y*}ty@*KQ@'&*|ßa@9=b)[0H@JڹY)#M@\M>)K4@m")Pn@~f)ǣ @鷿([-M@%@ٔ[l7(*)@l(RK@U5Q(S"@s( $=@I{t'`@d3'u%F @r2'Б}kf@{'S @# ' +@jU@3RC&#x@BY&0 )@RiY_&8\h@a&Q߹8R@pX:T&@;%:э%@t%Il.@%CV@VϪ%N)sБ@SP %lD@7KƧ$d@m$c4@$| 7"@w[0$Hzd@ JM++$g@ Mj#E@ 1;.#@xW*#!@YJ#@$t#yN@ z@d#J @ ;wF#wY@ m"l&k@ +!Z"G@ 7AJM+,"yv5B@ CV3"D3@ O\("np&@ [BE!p:@ gj@!Q@ r̷!m<64@ ~ߤ?!7,@ / !n@ .Se ɲ,(@ D=Fl i}@ /s [Կ @ ҝ& $i@ hK@\@ $tTn9C@ ۰_AZS@ L/{J,<@ {m%RK@ s#cW@ F-f(9Xb@ s A!l}@ g7CcH@ q!Ksȗc^t*@ + Z!5`@ mHQ뜶@ }/w@ ^ N9C@ Vl!@ y -t@ h]k<@ F .}@ #FپL@ ?$tSYt[@ JL_4 (wN@ M>!rGE@ Ӯh]kqu!@ Ck&_Ë@ qxBc4@ ﲪ,s-@ 1ڥ;¹M@ Ր@ }Vl![¹M@ |K 盺 @ }!uhƒ@ Q@ s@ {5+@E@ 8YK@ 䎊q +@@ CA0OB9@ M++ q!Ks@ ӞՐ .3@ LPr @ { 9 )/n@ i} Vm@ !< T;@ Q@ |hK@ %@x0oiDg8@ .r/SUGZ1@ 7~+s@ A0OWh@ JnzNz@ Q\лoW}@ Y&A(*ީ@ jfB4xB0@ ȟ@ty@ ɅoiD+@ cI{tz/@ !laR*{0@ OBA!laR@ ߄{ȿQR@ ¤T~K3@ qvJM++@ حVQm݂@ v򥤿f@ 6e&A(@ ?h뤽 Ri@ _ôOQC@ ?) E֝%@  Ҳ@ Pr[?m@ B1?앿E@ ÿrq6?8@ hH?ӄv@ P=B?I.3@ >?sPH@ 0H@r?vf@ $5inX?!}@ e+a?ԕ*1@ ag#$?@ `V.@nV@ ڐ@1P@ ?) @6&,s@ L@I@ b8@!YZx@SՐ@!K@lC@!m3 A@Er(@"8U'(c@a(9@"yQ@&:@"ލ@65B@#lLYt@1;.]@#Vł@-8Go*@#a @D@#,R@P3@$T@' I@$L@X @$m\@},{@%0'RT@M_@%i2 E@!@%8q`@6e@%ח9@ɐl-@&ѷ@@&Y;D@<@&Xe@E@&E@bM@'İ@`l o@'9rGE@@'gֶZ@ҝ%@'Mj@&A(@'Z@| #@'~@ 뤓ȟA@!Oag#$@ ߄{@!sջ@ ;wF@!qi@ d@!9.@ /@"-@ !@&T% @ ;K@&j@@ SP@&Y@ @'].@ Ck&@'XbM@ /^ G@'"h ԕ@ puO7@(%$/@ ,@(Mqu"@ yh@(yLI(@ ޞ@(mH@ ̝4X@(@ },|@)GZ1@ =[!@)Dc4@ ɯ@)mk;=@ `u!@)p}ke@ ײ@)bb˧@ k;=@(s@Bo@(gߏ@„1Q@)6($J@-e@)lu:?@qxB@)")@n@)v5B@z`@*8R@jJL@*ERK@YE @*|@I< (@*'(@8vF@*-8Go*@'S@+!R<@|G@+T9@HL@+E@u:>@+b@b˧2@+M_@ж08@,*ﲪ@mH@,`#̍@i@,ڹ@ɯ{@,jf@{,]@* [@i7~@*Abb˧@VԪ@*w+ I@C@*Nx@T6@%d@H@%0@Z[(@&!u@y@&Vwpy@f@&=K^@Rk΅4@&EwU@?) D@&)@+;<@')@.Se@']W@74@'n@}At@'J"@m@'6&@r(@(.Ր@ =q@(b*@y@(D@sB@(ʨF4@q`l o@(}Vl@[*\@)2;yR5@Fs@)e@0L@)z$LD@LB@)7ޔ@;@*_@@>W@*3V@؝.@*f`-@6;%o@*8C@y@*!.H@i@+nC@~($ x@+2&V@g(b@+e}2@P ,k@+y=c@8ʁ@+s@!ae@+Ev@ ԕ*@,0>-b9?OQC@,bZc?3@,AJM?`kz@,ƼS;?Tk&j@,@?#@-*pd?#x @-\_?n@-Y?08@- ?_IW@-1?--e@.# 0j+?@c^@.Ti4.?˒:*@.1?l1K~($@cI{t14@ :1Y!@"h41@920*0U@Pɯ0}@g(߹0e@~i;0}Vm@2a|0y3@~($0|-*EN@!Bo0dҲM@n~0Mhƒ@}At05ǣ @`kz0i}@If{0҈p;@0oiDg8/[BE@F*\|/n@[6/q!Ks@qA [/Og@sB/ Y@Q.98q@ 7.B¤U@.//t@ŗ.`OX@Zp./IHV@M:-Ms@^)-t@-8Go*Z--b8<@A~6-mqbb@U-l,k}@?+,<@ c+>-b@]9+)J@-|o'=+TK:@?T Ǐ+!R@QR*q!Ks@cM*&k@u?*2I@Y*Wm@Ev *$)@`V)o@+@y)`sX@jOv)hH@ރ%)X*0@{J#:)$Q֌i@^_0(g#$6@_p(2"@!'R(EM`@2"?(V\л@Bu%F ("i}@RCQ'1@b}Vm'@ri4']cf@om'R@,R'|ᛑ@o&)y@ 7&?h@> &Bo@\(&L0@T:&5~g@-e%H+@.]]%t)<@ 2a|%O"}@ 8}H%@c^@ OAs%`V@ _ 4%zkP|@ ld%Ff@ yXbM%ZR@ Y!$jf@ FIl$~M@ qK$m|@ T!D$6?@ _a(#p:~@ P#ƚ,<@ p:~#@  #Z_|@ Crq7#&B@ l!-")n@ )4"K@ +"mǣ@ !-w"V@ O7u"#x @ ^_0!K@ !RJ@ ϐ!}@ "S@ wr(^)5@  lzxl"@ B9Cy@ 䎊h ԕ@ x_> Fd@ !łU6@ %%15@ &cI@c^@ ,0Gn@ 1iBRC@ 5sg[z@@ 7`Ԫ@ :KCh1&x@ =BoiDg8@ Asz-2m@ J!BV@ Nʖ@x@ P)^ B@ R7#3@ T!D(N ;@ dk `H@ gqp _Ë@ k@jU C,@ o-V "@ t$5i0#@ {J#96@ M_>//@ 1hr!@ Y_a٩T@ P3:>-b9@ Ҏ 4_ 4@ wkQL~@ |ݿfI<@ %2,k}@ >'2m@ >6z,@ DUGZO;d@ Y >{5*8@ H%2@ I^5?OI@ do]:@ 2:{@ $6e@x@ ȟ@sl&k@ M++w[0H@ \$_@ ߏG0@U.r@ |G@ ӄv?jj%@ iv?yЦv @ c^t?NΚ,f@ ygt?ۑhr @ .?d9@ $D?W}W@ Q?0 )@ LI(?1zN@ Ov_?ŗNe@ Կ ?İ@ >-b8?a5@ ڕBC?m@ &? @ }Q.Ƽ?/^ F@ g(߹?\@ \7ɚ?@ W9?c @ TzG? ě@ Qm݂@qth@ MUhƓ@[q @ G@9#w@ @[@ HӮh^@ 8a Ec@. @ 0T@$5@ *0 @wT6@ '#$6e@])4@ %$_Z@OAs@ %XOL@I$(@ #M@ IQ @ "#ᆘ5@ W@ `G@ !5`@ "~m@ `@ b@"9䣃@.H@#0H@@G@#RJ@ )sБ@#%yh@ /{J#@#P8@ /@ -B@)>'!@ J@)i@ 3:}@)zxl"@ t>=@*4B1@ m@*ksպ@ 0 =q@&&f@ !q@&] @ 8\g@&^޾@ X6@)@@* D @ @*@> @:@*wd,@rGE9@*x?@[W>@*~g,@D)@+r\=x@"@+SV3@fI=@+)y@}D">@+C@l oTK@+ gb@Zŗ@,.=@ < (x@)_&@ + ~@)76g@ o.@)̢a@ M@*&V@d@*9C@㢜wk@*ox^@m݂@* @Y@*۬q @h@+l@|ؘ@&:~@ @&6B@-@&kbw]@ @&n@RJ@&$tS@S;w@' G@Y_a@'B#ᆘ5@b@'w#ρ@_Ë@'лnw@me@' @YT!D@(,QI@E]r/@(L;Oag#@0=@(5Tu@]ce@(H@Y@($'@LP@)Zp@ݼiv@)TFs@Țu%F@)Ӯh]@MjO@)KZ@L@)v6@;D=G@*%LW@r/Y@*Z-`@\bx@*LI'@FsB@*T`d@0tqq@*DR?g@'(b@+*@r2@+] qv@?>@+6@]9@+;:i@+ʬ@+̸@},{ @,+s@X'@,_E@z RiY`@,yQ@bwkQ@,Œ8\h@K`k{@,G @3MjO@-+}At>@v@-^K@v ׈@-}?֫?@-áLA?">i@-$/?uO7u@.(`?D2W@.Z"?sP@.3H+?2^@.3 W?:@.5Tu?} x@/#:}P?J\@/Tm?ֶZ@/FJ?ty@/73?H@/ D?}E@0 ?J#9@0&/Y?g@0>ŗNf?@0WM3H,?V@0oǣ ?xLW@0'RT`?C7!<@0>? /^ @0 ?:S@07?]yЦ@04?lLYt\@1OX7?5;Oag@1X'?m3 A@11P?Ⱦ@1I4J?ʖ@1auy)?Zjj&@1x' ?#-#O@1T?앿Ex@1o~=?^޾@10X:?~GX@1fffff?Gd,@1m\?٩@2;'j?ښIf{@2)_?1L@20^ ?p =q@2F9C?=f'|E@2\% ? @2p݂u?r\=x@2Ԫ"?^ F@2DUG?6&-@2;yR?bCV@2B9C?C@2_p?*ZFsC@2C\?&A(@2u%F?B¤U@2n?l-@2$5inY?O"}@2앿?+\$@2PH?D">j@2`-?bh4@2MjO?fQm@2L?K۠@2m?@2),@6FJ2uD">@O>'2^cI@g&2H1ί%@g21l@2π3@nC2e%1@1U=@"1>W@`H1@fP1u @&/e1Y5@>au1{]9@U1c@l>1L}At?@15W@ /^1DR?g@bb˧1Q@ȹwr0}W@`:0@:0wN&@ ^#0݂u@"}Vm03]$E@8?)0yzN@O<0a+@d*0I{ 9@z B01bb˧@*027@, @*np&,][!Z@=b,+'/@Pɯ+K@c+'|E˼@vv + @{t+`p@ y+.ѷY@*]9@* $ p@f3*JM@ej+4 Ri@f:+hr @ӎMj*s@@x*o?R&@fI*f̢a@@q*3π3@>();dZ@*{)LPr@;z@)E84@L)c&@]x).쿱[W@n$5inY(`@~LX(3H+@ M;((o@P](]!5@nV((iQX@gߏ'LA@G0@9'~@z9'f'@O"}'TM@*'$tS@ Z[(&ZFsC@ #& @ ?X:S&k΅3@ _"&ۥS@ s:}P&CA@ ;yR5&61@ ?>q&NMj@ ?ײ& D @ C,z%<64@ 1f%*\@ n%tD@ z@d%<*@ cA \%Ҳ@ ̈~$t}^@ ɋ.}$@ '>E$Y;:h@ ͽs$"T`d@ ԊԿ#:@ (z#xW)@ K#RC@ 1L#P`G@ TɅ#灃@ vJ#":}O@ V"\ @ /V" @ "QXOLn@ N;5" B@ }At?!T6@ (9-*!L_@ 3!tLD|1@ >K!(pgS@ `[6H˒@ fv fP@ lVϪ!s@ rP]%S@ y"`?Ms@ }A5T˧2P]@ T ǎU=K@ qiCۆnCz@ I'?\yg@ Ŭ5;Oa@ ٔ[lV5B@ 5;OaJ@ HQFV@ .ǹ0@ -VOIV@ ;%o @ YV#@ g,@~@ ߤ?li@ ß`^ t@ ?) ǎk@ \)V`@ l{j@ EwUqiv@ T Y}@ [T ѱ+@ NP1 v @ !< }@ & )^ @ R&V ̢b@ KH@ U=m@ K]cxW)@ 4!-w2+y@ O6a@ ]q"̨?@ bi}L@ dud0RC@ e6P%Y@ d̢ۿe@ c^ݿ<ϕ@ b΅3t@ b*߿y=b@ cK۠#@ cHjݿ,]@ d=8)@ eRKJw@ g'(b@ g X@ h\):э%@ jj%ZpT@ lLYt\ڽD">@ nX/D7ޓ@ n9.lL?eU.@ RL?>(@ O;dZ?cI{t@ F6&-?:)_@ #I{t?;'j@ th?jX%@ SP?)k@ (n?(@ ?oIV@  @\u"@ af@R&V@ 9Xb@.)sБ@ ^޾@~+@ 9@y @ "?@OB9@ {5*@-#N@ X@B[@1;@"pT@:S@#TuL@ \=x@#A?@ v @#~[W@ tcI{t@#),@ l\ @#X%[\@ c^J82@$N @ T@$R\=x@ Fᛐ@$ ٔ[@ <ᛐ@$Ǥud@ 3LA@%@N@ -݂v@%?6@ ),(@%}DUGZ@ &İ@%pd@ )$')@%@ B_@&@@ B@&dT@ ɚ$@!MjO@ )r\@!k}@ L8@"DR?g@ K:@"?@@ +@"y Z[)@ {.]]@"a|Q@ onV@"2P]@ ba@#$mH@ Vg@#^@ ꎴcI{@%%K@ m?@%^[BE@ &Ԁu@%`,@ [W>@%ϛ]:@ !Kr@&$ xG@ b˧2@&@IQ@ y3@&y k~@ vj@&d@ uD@&1eә@ eRK@'!$5in@ Vl!-@'Z\|ؙ@ Fd@'7Ȋ@ 6!.I@'C\@ 'KI@(@4n@ @(:+C@ kv@(r @ P%@(Цv @ 灄@(7Kƨ@ >lL@)/n@ 8 @)P1;@ 8q`l@)H@ &q@)ײ@ )^@)G#@ X:S@*.h]k<@ m $ @*ei4/@ \ B@*@ J#9@*#@ 8}H@+ v@ %RK@+A<@ o.@+xA_F@  [7@+zNzV@q!Kr@&B9@^Y@&jUp@Krz%@& 7"@8a Ec@'#rS@%1L@'Y䣃'@֌i/o@''RT`@WS@'a(9.@g @'~@2I@(2a@74@(hG @1@(zVC@x_@(M:@T ǎ@) cO@qί%@)?)r@]$D@)u;K@H[T@),Q@3l&k@)H@r@Y@*a@ "S @*JBC@2@*m@?ײ@*hH@Țu%F@*骣@ϕ@+E@u"@+SA0P@̢a@+rG@pZx@+x?@ZA_E@+,'7@Crq6@,%P@-?>@,Y}@R<6@,8Y@m3 A@,ʖ@b@,׈@4J@-) @"`@-]!@b˧2@-5Tu@m3 @-ty@s@-JA c@[(z@.+q @C'gM3@.^;@*X%@.%1@@.84֡?y@.2vtc?k@/+ ?n@/]Ր?``G@/}A5T?.r/@/ ҉?E˼+@/}ӄ?V`@0 ?CA@0-K]?d9@0F?0ȊG@0_P3:?6@0x sG?pa@0R~?Wh@02 ?`G@0‘Sy?,q @0Krz?kP@0'j@?zcsl@1 *1?ɰ@1%#M?WsPH@1=i4/?!ZS@1V"?z]z@1np*?@1&I?~g,@1?Gj@16&,s?l-@1Xe,? =@1i,e?laR*o@1j?ii}@2Ys?1o@2/7u?R4@2Gf;?q@2^`,?;D=G@2vWiJ?Ov_ح@2\?\л@2Q.Ƽ?ݢr/Z@2zxl"?D@2٩T!?kȟA@2$'?2W@3ί%? @3jF?@3.},?ͳ}@3E+a?RǸզ@3[ ?bx@3puO7u?n@3ce?:@31eә?B¤@39?U\R-@3x-8G?*_@3A!la?8 @3OX7? @3IHV?+@3*1@|hr2LI(@{z2")@KHӮ2tT@?2}sh@ygt2f2I@2P @,fX29H@&2" |@>Rv2 @V V1sպ@mt1ܛS@z$L1Sn@|ؘ1@,1O"}@6P&1mq@s1gj@q@=1]x@Sy300@ir\=0@uMU0X@Cg0=@LYt\0Q@6;%o0x~@ŬG0`gS@_0Hިc@A0P0/`@̷0R&V@. . |o'=@np-9&A@$ҲM-앿@8-vYJ@L?>p-Crq6@_#x-$/@s33333,1P@x>-,?z@^ ,x1&x@[,E @FV,D(M@^)5+]\@XOL+ިc^@+wCcH@ HU'+CMj@ =x@+'=[@ .h]k<*Կ @ @hۋq*K]d@ RO"}*s;K@ d^ N*?iDg8@ ud*  @ :pe)֞FJ@ .)n@ r\=)ml5@ @c^)8\ @ ׈)|@ лnw()4@ *EM(Цv @ "(d"@ ,fX(/iDg8@ 쿱[W'"'@ /%;:'ğ]@ ?3 W'a@ O>''YsБ}@ ^쿱[W'#{@ nO;&KHӮ@ ~& @ Z&-@ &KߏG0@@ }9&GG@ ws&uO7v@ \N<&Wi,e@ 3H+& {@ ۥS%d7@ \|ؙ%@ f:%}K]@ )J%F76g@ ">j%n@ 6P&$=Ć.@ <$֡a@ gT$Ҳ@ 7u$T\@ + I$)}@ !-w2$QX'@ ңS&#@ 76#np&@ y=b#r @ Wm#<@ 9+#}9@ .$5inY#Yڐ@ MoTK#w\@ z$L"c^t)@ Ӕ1zO"ILI(@ HӮh^!?ײ@ '2P]!F4@ 7ȊH!l1&@ DR?g!3 ٔ[l@ P- q %ם @ [=K^ o@ f'|E˼ ^ @ p =q Pn@ y +@ EwU7@ y~($ Zv@ mBپLI@ cOJ{5@ |ؘ}At>>@ jܱF@ l"h ԕqp@ kp&">i@ s=pEwUq@ z>B'|E˼@ OX7doa@ M8եc@ QܮG@ zN{~mH@ QX('7@ ܇Tl"h @ E+a@ ɃQX(@ ֦YIoiD@ ٔ[l7f !Bo@ '>Ex~|@ ]U\SV. @ s"@ h34K@ &.{L@ +!Z/@ /hۋk΅3@ 1 |ZCd@ 34rq6@ 4^ N/`V@ 5͉/u%@ 6zFԀu@ 5%F L.@ 0ZpUS;w@ 'qp UhƓ@ ty Ǹզ@ Ho k}:@ \ i;y@ 7KƧ k}:@ 1P)4@ r 7Ȋ@ E b@ z;' Ƨ@ Nv'gM3@  ~@ [W>"S @ nY@ +U G<+@  >lLY@ (ӿJ@ =b!-w1@ %o^07@ %!ىr@ h3@ &rG@ i,yg@ 鷿L/{J#@ lLYteU.s@ { 8R}@ !~|*0U2a|@ 1ί%ɼiu@ ,]*)s@ #?әo.@ PH?ĜM>@ e@x?ܜM?@ sպ?ّFV@ wr(?=@ >WS?DM@ ]N??@ F?n.@ -"?Kr@ LW?++@ ud0?u:>@ V?}ke@ )n?kC,z@ `N?={ 1ί@ u?+ I@ ($?"}@ |o'@OLnm@ D@;%o^@ եb@&:@ cOJ@ xF]@ v0@|o@ _Ë@5B@ >BZc @>@ 4.۵@Xmqb@ w[0@K+@@ l oTL@UBB@ \g*@ ] gb@ Q֌i@ 6U\R.@ vtc4@  ǎk@ }H˒@ "/@ i/n@ U5Q/@ @pU2a|@ }!@}Fkw@ Q֌i/@NzVC@ ӄw@{J#9@ @4@v4K@ iu@(o@ n@3ti@ H@g#$6@ np@yXbM@ uy(@7@ a=1@h@ (o@7T7@ N&Ԁ@Zcsl&@ 鷿a@f3@ =@LcA \@ zcsl@[ @ 5~@@q@ D|0@ߏG0@@ m qv@7'j@@ O27@d2n@ 1xB0@-Ww@ QX'@@ j@@x@ zN@ \$@ $@+ʫ@ OI@¤T@Œ8\h@"?W}W@'=["@"z@'@:@"sg@hH@#!s@ T@#e@ ;:i@#t@ ߏG0@@#>B[@ iY_@$Ǹ@ ȴ9Xb@$RpO4@ q@$٩T"@ ej@$'RT`@ M@$MUh@ Ӯh]@%M_@ ~Rv@%O鷿@ s|@%L/{@ i4@%d0+@@ ^np&@&:@ 7{@!!޽@ , oTK@!\M?@ V. @!.Se@ qK@!ѷX@ @" 3rS@ BZc @"FpO@ kv@"th@ p*@"`kz^@ K۠'@"GG@  @#/Vϫ@ uy(@#j@ D@#E#N@ 3)@#]\@ LPr@$iQX@ A c @$Rh ԕ@ $/@$Yt[@ sth@$@(^@*_|@(&@Ԫ@(K@@)' @X/D@)^O"}@RD@)k΅@Ŝ @){@6;%p@*ί%@M>@*8 $ p@o*ZF@*n.2@rkv@*;'j@]IQ@*0U2a|@G#@+j@2m@+Eәo/@>@+{@E84@+7@pO4@+Wx-@qu!@,8q`@S&@,Q=1p@#cW@,o5J@mqb@,nCz@B@,H@kp&@-%inX/@T]@-Z4Ck'@=OB@-1@&f@-}9@\(@- @+@.,Zqx@{5*8@.` =q@*")@.*0@m@.e+@0 )@.ؘ@*ީ@/0@hb@/duK@PNP@/>@8<ϕ@/ˡ$@~+V@/Y@Fs@00H@?3rS@02W?EM`@0LVϪ?x 7!@0eA5Tv?ENe@0CcH?s@0~?*c@0QR?@0;@1/r?b@1HB ?sБ}k@1a;D?>i;@1zyQ? 7KƧ@1E ?әo.@1K3?ѢY@1İ?g@1O7u?1[W>6@1l?ҝ&@2]9?cHk@2&J? /@2?-"?U{z@2W~=?yg@2ovȴ9?ڹ@2-?+@2DU?u@2H@r?='=["@2*0U?W}W@2?SP ,@2?,R@3ud?X/D*@3/\(?쿱[W@3G7?XOL@3^)J?@3v?>?p =q@3x?6;%o@3{?j@3B?jUp@3#x ?/Y@3&IR?K]cA@47??>q@4ŬGH?䣃'g@4.YJ?\|ؘ@4DM?a(9-@4Zŗ?'gM3H@4p:p@z:3 >l@?F2A5Tu@ (2[[@ "S 2c @!g#$62Xe,@9}2<ϕ@Q\лo2Q@ii}2qV`@y|ß2Z}OC@;:h2C^@*2+;K@p 2yg@1-@,QI1/@e1!.H@%1U.r@<wd1wUqL@S_ô1.@j%ם 1m.@x1Uy(@^ Fe1=Vl!@RJ1%#M@Ѣ1 u"@VWi0 ٔ@oiDg80&q@i}0ñ:@Hjܱ0+U@2[T0VW@GM0y$5in@]4X 0a6@r(0Hn@@0/|H@q"0%;@Sn/nwpz@ e/^@Q/.Se@T/d1P@)4/2q6@.*c@-ǣ .6@B+ʫ.j%@VCg.g~mH@j:э%.4uK@~+U .N;5@N;6-*@o]-_@?)-g I@D|0-3P@߄{,ej@f'@ pd*RD@ ,*T֡a@ ߟf* @ `)!5`@ &IR)]@ ;wF)f;@ $*1)IHU'(@ 5)tj~@ EGG(݉.@ V8YJ(4m@ fP(q_E@ vgw(;$ p@ )^(Ѣ@ +@(X@ f3](JqiC@ `kz^(k@ ~'ӄw@ w|'DR?g@ _o'oZjj@ }'8W)@ ?G':S@ Fs& (w@ sh&?@ $5inX&Z@ 2q6&#")@ @4m9%{{@ M_Ë%{ 9@ Y%w@ d+%E@ o q @ Q.Ƽt!D(N@ eXO@~@ #x JD@ /.4m@ 9|ßa'lC@ B I^5?@ Iͳ}^ Fe@ Qc4DR?h@ X̸nh@ _ËIO@ fkȟ V@ mV g@ sT6 D(M@ S&$@ 6e2W@ VE_1P@ #9#Y5;O@ C% ?@ _'@ !Wh@ ,@ ^ t@ /V@ ŗN@ d8@ T`d@ uMU@ T ǎ@ 5_@ }v@Qm݃@ w4m@}9@ uK@y@ }E@ Eb@ ]U\S@1z@ S 5@{@ ?@Sn@ $@$g@ Y5;Oa@;'j@ &@Ka@@ { 9@ʫ\@ f@fsջ@ n@y @ E @crq6@ F@At>>@ ]cf@TV. @ )k@ɼK@ yhH@?m@ r/Y@JA c@ j%ם @37 ܇@ `9@,'77@ WNe@-t@ NT@Ie@ Fsջ@"n@ ?#̍@ɯ{@ <#x@JX%@ 4AJM@Ú3@ ,LYt\@<&V@@ # =p@3@ =K^@-ɰ@ yQ@m\@ l-@k;=@ }A5T@@ AJM+,@@ qv@,s-@ Z1@0OY@ ڤ*@vOv_@ gT@C\@ @ 2h4@ iu@ n6;@ \=x@ v5C@ !Wh@ NΚ,g@ IQ@!"[T@ B@!]_@ ݗ+@!Y_a@ |?@!'(@ qK@"}A5T@ e%1@"KW}@ Z`V. @"sPH@ NcI{t@"/m@ B¤T@"6F @ 6ݬ@#9@ *[B@#tپM@ iB@#]U@ y|@#$ p@ ]r/@$&=Ć.@ - @$aJM++@ 빌~($@$Hjܱ@ ިc^t@$9m @ x-8Go@%,R@ tj@%L>@ @%@ a@%h ԕ@ "`B@%q"@ ++@&7&@  @&r.]\@ pȊG@&ı@ b]yЦ@&,@ Sn@'!g#$6@ Ez$L@'[ $@ 6;%o@'䣃'g@ '=[!@' @ bM@( :@ 7 @(D%1@ Ma@(~@ 鲀,(@(ʁ@ `@(!laR@ A c @)+@ 2@)e2a|@ ̷D@)t@ t[ @)Q@ a E@*@ xW)@*K&i@ gS@*uK@ V#-@*݂v@ Eݗ@*n~@ 4NP1@+/Jw@ "Zp@+h앿E@ m݂@+@ eV@+گx_@ Y@,rS@ W}@,L!~|@ ͳ}@,hH@ %ם@,>'!@ KHӮh@,1@ zcsm@-.*@ @-fM@{ 9@'l oTL@Q@(-!@ԕ*@(eh@Fs@(ty@/D)@(KHӮh@q!@) gb@{e@y@)D=@h)Ie@)|D|0@T61@)"@@uMU@) 1ί%@+}9@*"kv@ӄv@*Y'RTa@f@*nwp@X/D@*ǽ@ىr@*@Ėg@+5{z@ws@+l64@K۠'@+sP@پ@+^@os@,1P@YE @,F#@DUGZ2@,|^#@.)sБ@,,'@ިc@,臨M@s@-vȴ9X@U=@-TJb#@-#N@-İ@$t@-Zp@ڤ+@-&@$tT@.* @y@._@bh4@.@K@.%ם @44@.!-w1@F^"@/4k@oi@/hCk@8Go*Z@/l5@GZ1@/QR@<64@033333@ @0\R-@C@07v_ح@tCk&@0Q @[!Z@0kP@B?@0oTK@*Ov`@0O M@ 4@0!~?]U@0ŗ?!@0g??@1;5X?Ws@1g?$LD|1@19VE?6;%p@1R͞&?Fkw@1l4\?7KƧ@1 /?TE@1'!W? {5*8@1j?#c@17T7?}Vl@1Q_?d@2[-M@%?K۠&@2T~? V@25>-b8? qu@2N?y @2f>W?sBY@2kP?<wd@2CP?r(@27ɛ?1P@2d?@2!6?^޽@2C\?&q@3If{?`,@3*h4?;%o@3C >l?}ڹZ@3[9?D)@3sMjO? c Sz@3Nv?}A5@3@N?JA c@3 ٔ[l?^iB@3 6P?$_Zjj@3S&? @4LfQn?x^@4ڤ?t$5i@41hr ?9o5@4H?|ᛑ@4`:S?@4w`V?i,e@4S;?K@4eU.?q!@4A"@tq3iu@Xe,3RcI{@/Vϫ3;l&k@H`V3$8J@`K3 '(@x^ 2/@ 42,@*0U2a2Ƭh@2G#@R~2v_ح@72T @F2g0@#x2PnC@7,QI28- q@NzVC2 .ǹ@eh2.3@|#x1ʁ@h]k1ej@v5C1{@JM++1!<@#d1`,@mu1v:}O@Q֌i1]U=@ 1E ^@1P1,Zqx@G_o1 @]Sn0qxB@s(n0r @hb0N@~L0@@mǤ0ʫ\@[W~0}"@ޞ0dg8}@20KQ@7 01@0VԪ@2vtc5/|@G I/ʚIf{@[_A/`]x@pnC/d9@lvJ/0?>q@̸. |[@[.5;Oa@IQ.[[@pd.aae@J.-HQ@<ϖ-@ '/W-ķ,Q@ "}-@98@ 5K-[y@ H2 F-&D@ [ ,"?@ nO"},0j+@ JM++,!laR*@ ݗ+k,R?@ L/{J,>!@ [BF+@q@ {{+M@ Q+}[@ ۵+GTw[@ ٩T+x-8Go@ Y*}At>@ #ŗN*fA@ 5Y|*o3 W@ F-*8hb@ Wx-8G*yQ@ hۋq )@ y*\})O7u@ L_)^$t@ 6)޼@@ [6)ŬGH@ ϿT)p4m@ j)9ͳ|@ _p)HG@ @N($'@ =(o~=@ $ q([Կ @ #cW($UGZ2@ uMU'(\@ .Ǹ' x@ =6'{iJA@ KNʗ'B/l5@ X~|'#d@ dtSM&'76@ n9C&$t@ wɚ$&OLnm@ EwU&>'@ +%Se@ gS%z9@ D*%N*") @ ~L% t}^@ }9$@ $')$^)5@ 0#̎$Aʖ@ `H$r2@ <`#Ʃ?) @ \N#@ #N?ײ@ Țu%F#ܱF_@ Zqx# hA_@ lC#/ @ G0@:#K4@ ҈p;"Ie@ u"鷿@ K۠'"ȹwr@ IQ"Б}k@ C,"wZ1@ ~"D p@ ߏG0" $ p@ 6;!?>@ ڐ!%@ eU!Wth@ E!(>@ 'RT` @ 7 qu@ cA \ jX@ s gY@ CcH +&@ b8K@ [W>Md>@ ڹYfiQ @ l-S&@ v7ޓ4@ //t_حV@ buy(@ m݂@>WT@ P3:~L@ ҈p.,@ 3)Q֌i@ ^ s5;Oa@ M$Jb$@ ^_0v@ 8 p=B@ qiC@ ;dZZ/@ 61 9@ 6&,D[-M@ JA ceU.@ m"D@ V. e@ >'R<6@ <+`V@ >p ATɅo@ yh ~=@ 8q` +@ S V\л@ {<@ ?F+@ WiJzcs@ 4.۵lC@  (wN@ YVC@ ^ Ӿ"@ y|Ms@ Ԫ"0@98@ ]cfCV@ $ȟ@]9@ B6}Vl@ MoTKM3H+@ Oon>W@ Q %R@ UeU.a @ _n.@ f-b8@ wF{@b*@ ^ N@4m9@ k}@^J82vu@ s@ޛ{@ Q@dvj@ mv5@"@ AR@lD@ @,Q@ i,@O"@ %F L@/ej@ *8@b#ᆘ@ ޓ@g@ i@YD@ Ր@\N@ @96@ P]@̷@ 9m @<X%[@ %R@ud0@ ҝ@Q?@ ě@㚿3@ D(M@oyV@ f3]@!=1p@ "@#@ +@@L@ B¤@H@ {:hA@ A!@ rz$@6&-@ j :@_E@ a\@{sպ@ XiQX@5B@ OV`W@pa@ F"@n@ @ C]@!i}@ (9-@!U\R.@ =Ć.@"ul@ $ p@"Os@ @"'76@ j@"ȫ @ b@# D@ DUGZ@#A6@ hr @#}KHӮ@ m\@#4Ck'@ yHU'(@#tc4@ l!-w@$2CQ@ `H@$nt@ SR~R@$ŗ@ G%@$@ :>//@%"m@ -3 A!@%^9C@ "@%>B@ S&@%z@ Q@&7Ȋ@ ue@&M{ @ g@&_@ ۰_A@&MUi@ ͙Ev@'?>q@ R&V@';*\@ =@'wVC@ ]yЦ@'flLY@ `d@+/V@ 1ڥ@+ѱ+@ q+@, @x@ `[6@,Ea@ Nvݭ@,IW@ < 7"@,@ + ~@,LfQn@ @-+XdE$@ d@-e'!Wi@ m8@-r/@ s@-רM@ Lnm@.ȊG@ ?@.IЦv @ ;D@.zcsm@+@(cI{t@@)'wY@fGX@+Y|o'@)a@+ R@"@+A!la@@,1;@~"@,8.ǹ@7~@,o~=@T Ǐ@,-@:э%@,ͳ|@Կ@-ty@~tq@-Km]@h#@-}@RS&@-+@@/jpd@H@/n@nCy@/hK@Vm@0K@>"@0 l"h @'(b@0; 9&B@27@0U=K@Xe@0p.3@CV@0 4@ƈzd@0 |[@WS@1`H?ŬG@1ZS?d@19&A?0 (@1łU?#x@1ygt?˒:*@2ŬG? x@2)x-8Go?_;dZ@2Bިc^?*EM`@2\5inX?X@2u{z?i,@2tq?ԕ*@2fA?SY2@2N?4X!@2,d?-"@2P]?#̍@3 6?y?@3$??Bej@3=O7u? ﲪ@3Uڹ?E @3n?f3]%@3%;:?c>P3@3f?*1{@3DU?Q@3]k;?_@3/D*?hۋq@4M?GG#@4a E? Ev@41.3?Y2@4I}?؃4D@4`R~?_?@4x$Jb?%1L@4tj?~"@4If{_?s@4Vϫ?t}^_1@4|hs?9#w@4sջ?ڹZ@5g@9nD3ǣ @R3pO@k[-M@%3CA0@cHk31P@X%[\3hF@$5i3P @ |[38PH@u3!9Y @ӄw3 d@12{t@,Ԫ"2~6@D[-M2ohی@\(\2LD|0@sLA2.S@`k{2xp:@M2`sWp@wr(2Hg@Ї82/#ρ@|E˼,2Se@Rv1J82vu@p 18\h@+y1?@B+ʫ1cHk@X6F1?@nwpy1ʁ@CA01hhb@ /^1O@ 7163t@̢a1<64@܂#1҈@Sn0s-@Xd0s@0#0d9@2-V0\(@GOIH0fP@\R-#0jJL@q1eәp0PuO7u@06`sX@vȴ0g@%;:0 4@ÐB¤/X:T@/pd@@/hJ@ &/3 V@ K3.Κ,f@ 't}.Y}@ ;yR4.T@ OF._{ 9@ b}.* @ u g-L_@ a E-@ B-82vt@ *)t-T}^_1@ !laR-T@ zG,\ @ ,VW@ wr(,|]ce@ i;y,F5~g@ .,]s@ 0OX+ѷ@ AԪ+Q@ S{+k,]@ ee+4g@ vgw*[@ P**fffff@ *"}@ {*W@ j+*C]@ OX7*R?g@ 8\g*lM?@ 2"*4Ʌoi@ -)>B[@ }3)Ѣ@ ")?@ #-#O)T?@ 3 V)NP@ CnP(a@ R/l5(ͳ|@ `&(o~=@ n$5inY(4Jb#@ zNzVC'|E˼,@ ;'M@ [BE'x/D*@ hI'7RC@ `N&e@ *0U2a&-@ [W>6&u*0@ /ej&.q@ 6%bM@ %%?g@ k}%Ky@ $_Zj% N@ `s$ʖ]@ Zy$?@ ٮO"}$Lh@ t}$ QH@ I#ѹo6@ B # @ q #jIf{_@ 1zN#E^޾@ +#&:@ "`B#n~@ ["N@ :"7@ %$_Z"Ҳ@ ,:"R @ 29m"#-@ 5!R!($ x@ 2Sn!ꚀIf{@ (!6&-@ ěT!ݟo~=@ V. !l<@ '#$6e!R~Rw@ 0nC!U ^@ 9Y}!1'@ D3 7ޓ@ N t@ X%[[ e*0@ be+ (ިc@ k8q`IO@ uyh[[@ ) D߇i,@ G bD@ y|jF5@ f3]%\+@y@ *̭Wx@ @3LA@ @ Bx_@ }At>fJ@ Դ:#d@ LMfI=@ :RK@ ^ F=.@ - n@ $/(@ Ӯh]z$LD@ 65~g,@ fs(n@ W>6zwd:@ Ma(9@ $^ NڹZ@ 'd._o @ * :+j@ + 9&A@ ,QHvl!-@ +n@ * :DJM@ 'wYO&@ #wk /@ u yR4@ k&j NY@ 3 MjO@ Krz|Q@ 8Q@ .4q6@ ͉.Oo@ >2#@ yR4gߏ@ q"YJ@ <&V@ b@ Vi/nyo5@ hbY5;@ n~}2@ as_ô@ PXڐ@ ^ Fd6C-@ sw[0`L8@ }A5TJM++@ lvJ"}@ |u:?bx@ eSٿzxl"h@ Jrq6@ ?$tS8J@ B_Ŀ5Xy>@ Gy e 0@ K۠&лnwp@ N!R<;LI'@ N`sW濺<*"@ M5Xy>?)a@ KHӮh^?ƐWx-8@ If{_?0@ HK]c?e@y@ Hu%F?@ Jlp@ q.S@ rI@ $ q@ _+@V`@ Oo@F@ C1ڥ@Ŷv @ 873@BC,@ . <@LX@ $5inX@9C@ If{_@0@ @,d@ NΚ,@پL@ `@"B@ ƼS;@ﲫ@ ٤^ @"b˧2@ ;Oag@@ 5@79@ an@ k@ M2"@Ho~@ D8 @IV@ 81e@RT`d@ *8 @Ұ ě@ @Sd3@ l-@8YJ@ +@Y;:h@ 7@֔Fs@ Цv @S7 ܇@ a|Q@ 4@ _@@n@ ߹8@Ƨ@ ěT@hM@ ظ' @X@ Ї8@bi@ 1&x@ߗ$tS@ )r@\b@ Y@+ @ 9.<@U@ @x@LfQn@ #-#@NƼS;@ s@.}A@ v5B@ #@ ﲫ@ a@ v&,s.@ 4@ lA!@ 2f<@ b>iQ@!%@ X $ p@!YnD@ M|@!ֶZ@ C7!<@!ձH@ 8եc@"P@ - $ @"QCrq7@ "`A@""@ AJM+@"̢a@ sG@# @'@  c S@#G+@ ~g,@#Q֌i/@ ̷D@#z$@ .@$+@jU@ R@$=M:@ ?h@$z͞&@ rGE8@$ @ ]N@$6P%@ `G@%2S 5@ Ր@%oag#$@ kv@%`@ yvݬ@%N@ lk΅3@&&07@ _r @&bm\@ Q%S@&vȴ9@ C%2@&k΅3@ 64K@' D @ (J@'U/@ RD@'&q@ i;y@'~L@ `N@( ި@ 9C@(G6&,@ 9@(S@ Crq7@(wd:@ E@(nCz@ #x @)7r(@ Hj@)spuO@ k&j@)H˒:@ *0@) ~@ uɯ@*&7ޓ@ e;K@*b\=x@ U7~@*,=@ E@*Zx@ 4\@+ Ri@ $Jb#@+P ,k@ @+BE@ ?@+e @ E@,t>=@ 7@,l@-W)@ @-@VԪ@73@-x;D=G@wkQ@->-b9@ /@-@i@.D)@0@.V%@D _@.?>@ts@.L_@^y@.k΅3@Go*ZF@/3l&k@0 (@/jOB@`@/.S@74@/n@}9@0%@Ԫ"@0"\$_@Q.Ƽ@0=M:@ם g@0Xb@;5X@0sS@vM@0j@^@06@FpO@0e@x@.VX@00@9@Cg@0,d@{ @1AJM@e@1/4.۵@Pr[@1Ib@)@1d;'j@ @1~-@B@1}@hb@1Oag#%@OIHV@1͉.@6U\R.@1索3@8@2ί%@1ڥ@2ײ?-"@25RJ?!-w1@2Oե?k&i@2io?6gw@2U?jF5@2 '0?ͽs@2%;?f'|F@2B0?cs@2Ë`?.zG@33z?a Ec@3 ٔ[?zcsl@35 qv?T6@3OIW?U䣃'g@3hF?@~@3^?r Ĝ@3d7?P@3Y5;O?y2@3<쿱?Bej@3 x? Կ @3˼+?ғJm@4x>-?K۠'@4/zcs?ałU6@4G]:?)7~@4`bM?nC@4xr Ĝ?@47 ?}W@4?CcHk@4,k~? 8C@4E? ,k@4JE?Ew@5 =1p?[7ɚ%@5!i? pϿ@58?)?@5P =q@q[W>64(n@82vt4'>E@SP3do@j3hH@1zN3<`@zxl"3@CA03'(@>'!3@5^޾3i.H@Md>3Q_Ë@e[[395@}'=["3!,'77@~M3f'|F@{ Z\2;D=G@do2פud@\|ؘ2*)t@i42=Ć.@ ԕ*2m\@ ҈p2t~@7Cd2[n@N%;2Bݘ@ee2)g#$6@|ᛐ25Q.@B1VI@F41ݙ|o@3 W1/{J#@\R-1{@e1"S @ZR1w@.Se1]e@,&k1D3@Bzcsl1*)n@W=1<ϕ@mHQ0>lLYu@0.3@0 @[0ֶZ@uy(0@M0s8q`l@0X@+ʬ0>SeX@ P0#Ƨ@ (.ǹ0 (9-@ p-1@ 8\g-#w@ $ Ri-R2LfQ@ 7Fze-!Z@ I^5?},򐫴N@ \B,bx@ n)sБ,u1L@ 98q,=r/Z@ %1,^ N@ +&Ԁu@ _ô+;%o@ G#+^0OY@ ~|+&hK@ ;yR*s@ G{*Y|@ *|8@ m݂+7@ ")n*B@ 2W*'gM3@ C<`*Z0U2a|@ S1zO*!_p@ c̍2)p+@ s7 ܇)7@ xF)qbb˧@ U5)6jUp@ ٩(1eә@ m(do@ (b9m@ Ѣ' ٔ@ |G'8R@ eU.s'Uɯ@ U'V. @ N&Ԁ&֮}Vl@ vj&Ev @ ܜM&[U@ l<&:)z@ y%۵y@ Ma%Pr[@ d%^^ t@  ǎk%"䎊@ !Gz$愋[-@ .t$@ <ϕ$v /@ K$DR?g@ Y+$B @ e#k@ pȊG#^)5@ {wF{#l B@ #8@@ Sy# j%@ Z"p @ n"ty@ :p"ǣ @ qL"6@ ałU6"|E˼,@ Y" ֶ[@ Yʁ"ؘ@ `A7K"}\@ ix"E%1@ sպ" @c^@ ~E!Ώ @ '>E!ZS@ !T@ u!+jg@ b s@ f@ \N+@ 5{@ y $TɆ@ 9䣃K3@ i m@ }At>> qxB1@ v_ح ={ @ oa)k@ i> &Ԁu@ fa(9.}H@ hn,@ o.m|o'=@ zcsl&:ҝ&@ v5B0 @ ]ce6@ *,2"@@ D<t@ { S0@ I{tӿ;@ (ny?@ [CcH@ SyZpT@  c (w@ ͳ}Ie@ 0ߙË@ V. )r\=@ 1u!S VE@ Cdoם gb@ WCA豅H@ hTɅ#π@ wk;<< (x@ ݛ=K^@ ͉.d̢@ ҿͳ|@ [TCcH@ ŗNe?ŗ@ eV?·+@ y2?FV@ t (wN?ڲB @ nSeX?2"@ i/n?$tT@ dҲM?a@ ag#$6?&Ԁu@ ^CV?D@ ][?#n.3@ [XdE$?bx@ Z*? ڹY@ Yt[ ?jF4@ Wp+?{@ Ul@ NQ@?ײ@ I< (@v@ A:S@v_ح@ 6o5J@Z1@ )> @P3:@ u @!bw@ yЦv!@ LYt[@ *0@ X:S@ @4n@ HU'(@ GG@ ue@ d>@5;L@ SP -@nh]k<@ zNzV@O*ZFs@ %l@ὥ@ )T!D(@o M;@ )y}@`H@ ' k@| ٔ@ # Sy@iQY@ =x@@|?@ @N@.@ #@qeәo@ 4Ck'@v@ 鲀,(@W6f@ 8YJ@K3@ n@'|E˼,@ 3H+@Կ @ uɯ@@ U=K@},{ Z@  ٔ@ʛԿ @z)y@&V@@s>WS@<;:h@mHQ@W}@ff@;Q@_ôr@j@X@@;dZ@QY6@]9@JW'@:{@B>P@>//@;J#9@9LI(@3 V@+@+m@8a @#@Cd@R}A@7 ܇T@m@5B@ l@ bR@#L'76@ VSP -@#Y @ K]cA@#Ʉ@ ?˒:)@$}H@ 4fP@$F?) @ (3)@$#M@ (\@$ÐB¤@ tr@%$5in@ y@%@=B@ 1@%~|ᛑ@ 򐫴@%[@ %@%m3 @ "&@&8앿@ @&v6&-@ Fs@&G 0@ 4@&S&@ !Z@'0n@ _o @'n($ x@ 4m9@'Կ @ r<*@'f{_@ d%1@(&`V@ UeU.@(d^ N@ Gy @(o@ 8?)@( 6P@ *:э%@)E˼+@ a@)Ym ֶ@ ^#@)IQ@ <64@)ӀP@ C\@*n@ މ"S@*MFkw@ Mj@* RiY`@ 8Ck@*Ƹ1f@ ^ s@+UGZ1@ Zjj@+?LPr@ 7u@+|K @ ~ ;@+@ nx?@+9.@ ]\@,1i@ M%R@,m8Go*Z@ P3@[-M@%@,L8@Ϫ͟@,P%@6;%o@, @qbb@,#x @a @-2,R@P@-k&i@nSeX@-Ҳ@Y̢b@-@C$@. @-+@.N5?|@OLnm@.ł@u%F @. 4@:@.M3H,@g@//o@)k@/gsPH@̷D@/Ys@P ,l@/ I@|G@0d,@eRK@0#*cP@O M;@0>ߤ?@8 @0Zݘ@ 0@0v_@ 'RTa@0i}@7Ȋ@0z$L@گx_@0˒:*@ 0j+@0 =p@@jU@0`s@Z@1Up @{T^@15{ 1ί@c*cP@1Pեc@J6P&@1k($@2{m@1i;@|o'@1pO4@E@1C,zx@},{ @1NΚ,@ϕ@1f:@F@2 Yt[@hƒ@2&x@#π@2Agt~@j[B@2[k@Q4J@2v1P@7@2{0@ѢY@2^@7 @2܇Tw?#@2Mj?f@2`?k&i@3̷?6o5J@3,{?y|ß@3F7?Nx@3`U'(c? /@3z}A5?a=1p@3 ?+Krz@3?>?/ej@3Ƒ\л?'!W@3䎊r?;D=G@3A!la?Qm݂@4}OC?`V. @4+2P]? >l@4DD"?U=@4] $ ?sg@4vm?;쪸@4j?4Ck@4Y2?SP ,@4H?@4ٵ͉?Y}@4E? @5 qxB?灃d@5#.}A? <@5;Q?tI@5Sz@?:S|@5k?)k@5UGZ2?˼+@52m@=4 ě@b4z/m@ֶZI4bc @{J#:4Jk΅4@+42#@ ]x4 @98R~4hA_@Qu3/l@ir\=3Ѧ Eb@ 3$')@/l3T@[T3!Wh@r 3o%;:@ᛐo3VP1<@8R~3=hJ@٩3$j~#@()Ie3 X6@?wd:21 @VY2@mY2&@?2D<@q 2ty@Q2sBY@#x 2Yn.@uMU2?EwU@lvK2&*\|@ /{J#2 PH@"XOLnn1b˧2@8l"h 1`G@N`sW1LI'@d5inX1$_Zj@ynD1ͳ}@X61o @XOL1U:w@csl&1:i}@ϥq!1 @98@6e1a(9@hH0SP@ %;0;D=G@ #x 0j@ 8}H0~m@ L?0FV@ a@N0dLD|1@ ud0+@0Io.@ l-0.DR?g@ 4X!0 @ H/nV@ S&/ @ ̢b/łU6@ 앿Ex/J{@ >-b9/s@ UGZ1.D|0@ &IQ.Q֌i@ 9}.mB@ LfQm.5!R@ _P]-@ q޽-?h@ [-M->!@ },-Unh@ Ie-1z@ yR4,g@ Z,s@ j,s>P3@ GG,돛]@ S,Jm@ (M,yv5B@ :9`,@98q@ K,z9@ \bx+d>@ ma(9+>WS@ ~E+Z/l@ *&k:hA@ N,fX&)P@ _&k%%ם@ o5I%(b@ m3 A%g\¹@ (%* @ jj&$e@ v $#@ =$|?@ 2$H9-*@ 28$(@ k&#rS@ eU#܇Tw\@ }Vl#'>E@ K#]cf@ ǎk#1f@ hb#y|à@ ᛐ#ݺ RiY@ ҈#@ Ѣ#}W@ #Cd@ ܱF_#g@ U\R."ߏG@ "P@ @$="Igt~@ أ/D*"wr@ k!Ԁu@ iDg8!E @ G{!=hr!@ x>- BB@ %1 A c @ \ [쪸@ )JA  @ 5*8o4@ @IQ>-b8@ KZyf@ WCcH_#x@ b2"HG@ n9.<k@ y ۠&@ 2s@ 䎊R"?@ Yke%@ 0 ~"S@ 1fI^5?@ om@ e@@ '!Wiom@ UqK$_Zj@ ZxL)r\@ c^t)sl&l@ 䣃'gҵ^@ տEw6@ SP -gmq@ _F$=@ لϿT @ =[ߏG0@@ '(b|Zqx@ ag#$ @N@ YJ o@ D"> ޽X@ {5@ \(qm@ tҳ~<`@ ƼS;#cW@ յsh`@ z9s@ Y|g#$6@)k/^ @`kX@ 5Xyq!Ks@ RJ 2 E@ S"SP@ %1G~mH@ `Gﲪ@ }W.2X@ 4Yߤ?@ w|.4@ :ygt~@ pP󈏆`@ qxBT~@ ⌽D?>p@ F4)Ie@ KKCV@ ׈ٿ^@ doh@ LWڐեb@ !.IłU6@ qpOQC@ :Ŀ4J@ zG?Ԫ@ QX(?;D=F@ Y5;O?֙@  ?E@ Цv ?㡵͉@ =Fk?`G@ n~?ӄv@ a? 7"@ .?!LA@ &q?T*1@ nm?O;d@ NΚ,g?P@ E?=f'|E@ |*"?{@ xxW*?TK:@ tX @!'R@ p 9@IGNΚ@ k@p@98@ fa(9.@y@ `@f3@ [qu!@S@ X_F@q&x@ Y@ [W~@ aZS@ yg@ os@ oTK:@ nP@ eV@ !~@ yЦv!@ hr!@)VE@ S;w@i@ 4AJ@XϿT @ b#ᆘ@76g@ D@nƼS;@ ֶZ@>WS@ hJ@u@ $=@E@ (@p =q@ :~@@@ ~鷿@XJ@ Go*ZG@=@ l@`sX@ t@" I^5@ :}P@Z@ ")@%O @Q֌i/@cA \@\(@nxW@LD|0@}ke@<@s/ek@쿱[@bw\@4K@x>-b@Ys@ 9&B@},{ @}KZ@vݬ@|hs@K۠'@o@)I@y@}At>@K@k&@ݗ+@| #@nX/E@t@ 6z@l@@A"@c@@[W>6z@nC@RǸզ@d2@J8C@)I@A5Tu@ #9@82vtc@ J3 @/@ Oag#%@%$_Z@ k@8J@! Nx@a@!LD"@p:@!?>@ ߤ?@!sBZ@ % @" Y@ 򐫴@"Mu@ ,@"&Ԁu@ ՠ{5*@"FIl@ ﲪ@#[BE@ 6@#N_0X@ D@#WS@ lD@#?ײ@ Ր@$u@ ;wF@$M,=@ @$@ {.]]@$Q.Ƽ@ pOX@% hr@ cM@%L|ؘ@ W@%*\@ Km@%hH@ > ;@& qxB@ 2GE85@&J/l@ %zxl"h@&Ma@ 6F@&wN&@ xF]@'>E@ =@'F5@ D@'!R@ Nv@'qxB1@ եb@(BY@ ͉.@(B}A5@ 䣃'@(٩T@ ~($@(E@ sBZ@(e@ M;@)<=x@@ }A5T@)zԿ @ q2W@)5~@ bZp@)G#@ SR~R@*5"@.Hp @ -gwZ@.*@ _A@.pO4@ ԕ*@.e@ Cd@/: |@ $_Z@/v4AJ@ j@@/CV@ $/@/9.<@ x?@0 gb@ XdE$@02@ #x @0P@ u;Oag@0n3t@ bh4@0=x@@ Oq!@05_@ /@ Zx@1Z͞&@GK]d@, #@3w[0@,愋[-@z9@- "&@ gb@-[CV@@-?|h@@-CA0@$Jb$@. '>E@}Vl@.BZp@g#$6@.|@8\@.&,s.@vM@.]s@`ٔ[l7@/(e+@K'/@/b&q@5%F L@/$ p@IW@/^ N@KH@0t)<@f-@Jw@1r |@ b@1@!-w@1ѷ@ @1ḍ@|j~#@1߳m@cM@1Q@KhH@2g@2^@21;.]@@2LE˼+@,'7@2g>p@*d@2#ᆘ5@ιvݭ@2i@inX/@2/V@*\@2kv@u%F @2 b@h$Jb@3@OF@3"R@5 D@3WS?Ë`k@4 ?>lLY@4&̢a?W @4@wFz?!7T7@4ZA c ?g @4s:)z?2@4XOL?|hr@4^"S?EGG@4.?6F @47ɛ?֌i/n@4<`?Ր@5 ~?fWx-@5$9?.>lLYu@5<m?d@5UQ.ƽ?ϕ@5nz? @5#̍?Jn@5ե?]U\S@58\g?ײ@5Ф~?,=@5PH@PܜN5$5i@qbb427@}2f4UDR?@j48\@8734U=@PܜM4#x @iͳ|4r @"4Y`@{ 9&4A'>E@W4(RJ@m3 B4gߏ@K۠3fffff@s3O;dZ@m3$_Zj@*[B3s@B`,36@Y`3x}H@q`l o3^#-@wr3Eoi@䎊r3+X6@ ܇T3}@ 4Y2eV@e2@{ 12k@iY_2D(M@(a29@?b}V2uY|@Ush2[<@kC]2@7T@ 2&&Ԁu@ŬG2 @=1ɯ@ß`O1>lLYu@;:h1tj~@~1@ (M1i4/@ o.1jm@ .O;1O`V@ C`O14Z1@ X6F1@ m\0uO7v@  0b˧2@ 20 ;@ ~0_ô@ X:S0@ Ӊ 0t0@ k0XM@ K0P3.]U\S@ .5~g@ #.N$t@ ,fW.e@ ,<쿱-;<@ >($ x-_E@ O4-gb@ a--B@ s(n,f@ ),߹8@ Ϫ͞,~< @ 3]$,C8Cl@ ʁ,f'|F@ 앿+nY@ ٙ+a@ 5_õ+W/V@ >B+~($ x@ m*༾a@ Y*A0P@ 3|*b6;%o@ RT`d*9䣃@ }v)`k{@ Ԫ")]^@ ԕ*1) &@ ]$D(Ø @ % (fQ@ ">iQ(D6@ 9Ma(-@ T&q'š@ m"'_p@ n'=%!@ q!&7ޔ@ doa&iu@ jf&~FI@ &@N@ m\&#@ ѼUDR%B0@ 0#%?R&W@ ,s-%[>WS@ %%0=B@ ?>%T`d@ 0 $27@ $')$K@ QH$Ƨ-@ m\$ŬGH@ ]y$d xF@ n.$08@ Tw[#@ rz%#v ׈@ _o #Q@ ag#$#%@ MUh#dk@ #>c^t@ 2a|#)@ ,<"Y5@ "pO4"ϿT @ ,VϪ"i D @ 71"$2m@ BM!wF{@ N !`sW@ Z{ 9&!= RiY@ fIQ !Wh@ rLP ]y@ |hs "@ qu"X4C@ BE @ 5hJ@ ]xSMj@ 򐫴NGZ1@ :3BY@ [7_;@bM%@.zG1@BCk&@TO Mİ@dk CA0@n< @$=@mY 4T@_ôrTe%1@N<kQ@ElB[@L4\Y2@O6!Wh@T6dty@YË`պ@_mi-@eK ~|@kp& xF@pd  y@u?|h zcs@x?) y@{ W=@}1o+ @}޽th@}=%F L@}f'|Et3@}K]7ue@|S;w0H@@}氿@}o~=W}W@~\N<g@H˒:Zjj@S#a|Q@y|ß,@\(ÿq1@{J#9[7ɚ%@tj쒎 4@M:s-@RJm@L(߹8@ I^5^ Fe@LI'?@|@\ c Sz@wAJM+,?[BE@p5Q.?A0O@fq?NxW@[ty?ܴfP@Ov_ح?k]@BE?fB@5X?X' @(jF?X@u?CP@D?RC@Q֌i/? [-M@@e+?B9C@5?|?,<@ @?@fI<@UDR?@7[0H@_ô@=x@@2X@A7@ k@X@kz]@J@ =@@чn@SGO@E@%[[@ @\ (x@ RiY`@҈p@5@ez$L@;D@A!la@-w1@mUhƓ@tj@Sy@Կ @ :Կ @VI@ |?@}{ @ _0X@t$5i@!//t@kU@!Abb˧@a<@!y@X*0@!U.r@N[BE@"i@Da@"HjF@:I< @";'@0OX@"z]z@%|o@# łU@u%@#N9.<@MUh@#{@m\@#п]x@ mǣ@$Ԫ@ ?R&W@$S A!l@ @$Cc@ s*@$@ /@%.@ c S@%Vᛐ@ D@%zH@ rGE@%jܱF@ 8@&+ @ |@&Y,(@ do@&:э%@ wKƧ@&ڰȊG@ j~"@'CB@ ];D=@'[iJA@ Pl-@'!Z@ C,zxl@'uy@ 5\(@($@ (9-*@([e@y@ ݘ@(Zy@ Wx@(sպ@ tq@)U=@ T@)[X6@ CV@)X%@ Y2@)ڍd@ Ck@* @ F@*Yo.@ d@*TɅ@ ̷@*#@ .}@+!<@ z>//@+V07@ j`V@+*8@ [2m@+@ KxF]@,/m@ ;A@,Q@ +m@,//t@ qu!@,ε@ $ p@- $D@ {@-K}At>@ :@- @ e+a@-@ ȊG@.@ ȊH@.CP@ a(9.@.łU6@ *0@.ws@ y@.3 A!@ r{5@/:qxB@ ``G@/x:S@ Nqi@/Ne@ < (x@//m@ *o?R&@0ŬG@ *0@06+ J@ ?h@0TJw@ =@0sk@ - @0p@ ͽs@0>@ )_@0[BE@ @027@ zG@1 ,Q@ [7@1(x@ m"@1FϪ͟@ Zu%F @1d*0@ F?@1쪸@ 2V@1Zx@ Ov_خ@1h]k<@ #9@1'76@ ׈@1+@ laR*o@2zNzV@ I'?@25 ^@ "쪹@2R\(@%RK@.o@X@.}OC@.]]@.&@檎cI@/[W>@N;5@/Z\|ؙ@sպ@/e%1@1.@/Ύ`sX@r[U@0M:@zS&@0!A [@dȟ@@0>%@Np:~@0ZzN{@82vtc@0wwd@!t@0oa@ Nʗ@0H@3@0͢r/Z@,=@0"?@sջ@1\л@]U@1"ﲪ@ם gb@1?W@2gߏ@.r@2򐫴@27@3@>P3@30d@f'@3K2P]@5Q.@3f+ J@+ J@3TɅo@|a@3ߤ@@b`A@3@H2 F@3Ho@. @3ȟ@@`d@44AJ? (wN@4 ? @4:4?ԕ*@4U?T`d@4o6&,?Q@4(?5~@4Q?LP@4K[?|o'=\@4İ?E1;.@4>?>'@5 %1?%[[@5#NP? k@5=/w?iQX(@5V9.?1$5in@5o?@5!Kr? @5I< ?b@5[-M@%?Q9C@5X ?a @5@x?ߤ?@6+U ?@69C?m3 A!@67y @5ud0+@̢b5g6&,s@27Ȋ5N?) @KNʗ56t@dE#N5HQ@}'=["5tSM@4 Z[@O;4҇~m@0@94nX/E@ߤ?4>BZc@F]d4< @B¤U4mEv@(h3*4T% @@n4:؃4@X_F4 a E@p0#̎4@~@n3qbb@3ӌeA@!.I3d2@`sW3+ʬ@i4/3[!Z@X%[3kCV@Y23Px@*͞&36doa@A0O3@XY23Sy@nSe26z@hJ2R~R@ʖ]2_p@[T21.@1&x2{5*8 @5?|2`"쪹@2D*@ OQD2)D@ G0@:2p*@ 5ɯ1 ~@ JL_1דݗ+@ _1ᛐ@ uMUi1eO@ (wN'10@ m1h@ 21M ֶ[@ Ȥ~11~|@ >'!11z@ o60j@ "0*0@ K۠'0եc@ .c 0?>p@ B`,0UqK@ V=Ć.0ka@ ~lLYt0r\=x@ /0Կ @ 0s#x @ zNz0V`sW@ @096@ 0X:0a@ -V/P]@ oi/7~@ wd/~@ *Up /P:э@ <X%[/"@ O"}.m@ aWh.~@ sl&k.esh@ XdE#.*_@ .Se-q!Ks@ ۋq -@ hA_-x~@ $Jb$-= gb@ !5-P@ /s,z$L@ jUp,>-b@  ,K!Z@ (%1, LYt\@ C٩T!+@ g\лn+zm@ +,pd@ _*+a@ {*S&@ z9*bsP@ P3*!4J@ '(b)jf@ Nuy()@ l{ Z\)M $ @ 1ڥ) zN{@ V(ʨF4@ FV(sBZ@ %(T9XbN@ b(%K@ ڐ(7~@ oi'Ne@ uy('R@ mH'6@ ¹M' 9@ ќu') D@ 앿Ex'$">j@ +&<`@ /ej&H@ I%)Ie@ Z,fW%N!Bo@ e;K%A@ l>B[$x@ rP]$#̍@ xl"h $X~@ ~($ x$ a@ G 0j#W)@ W'#27@ 3r#ﲪ@ CQ#W^ Fe@ ܱF^#8o~@ ;dZ#% /@ \# Z[)@ /# 7ɚ%@ Q"nP@ .r0".@ ""}At?@ 5IP"G,@ gb!/@ &!P ,l@ p!^t)@  hp @ k1$5in@ Z\лn@ ܬ1&g@ (n?@X6KI@+a@wXe@B I^5wd@QN;5;L@[Q^@cᆘ5AZR@jv5C SP ,@ptqqڐ @ulvKM@zэ%t4@) D?b@.4mu@˼+1ί%@RCr/Z@b0OY@G||X%[\@2P]Qn@ty*0@π3r̨?@<64m:w@. @!5`t9.@doajF5@/D)Krz%@S;wG\R-@*EM$@P]'mq@  @hr z]z@y|ß #x @Ō / Y@ֶZ hƒ)@L_(@δcI{tŗN@Q֌SP@0ke@'!Wi=B@"ZI@ֶZ@5`sX@ײQy|@bw\<`@ԟ](b@ 4¿Sf3@?g ,k~@D">˒:)z@-"/^ F@Ӿ"V. @PܜN}@#x @8\gۃdo@d>ҦL/{J@ŗNeF]cf@\¹ܜM@gM3H?O7u@3H+?6@? =@{wF{?&A(@s)k?݂u@q;.]?~6@su:>?t$5i@{0$?1;.]@ 0j+? (@Cc?-V@8J?m8@8?F)J@*0@Q@zd@j򐫴@s/ek@v_ح@`V. @W}W@Q$Jb#@]U\S@H*")@^5?|@Hhb@hr@Ma=@Kq @Pv @ )@K$Jb$@ !<@:>//@ :@ʖ]@ {lC@ 䣃'@ :},|@ &q@0@ D@ jOv@ %1@ $@ ξߤ?@LfQn@ t}^@~+@ Ʋkv@]y@ XOLn@x_@ *@`V@ 1@ 4Y@ 'RT@|@ $5inY@W< @ g@ߡ@ ^@g @ Fd@J@n@ 9@{T^@U'(c@vr2L@08@pSe@mqb@k!Z@@a@ej@ƒ)@_ @P٩@Y@ث @SZ@`P@Mx>@S;wG@Fzd@p 9@?@wd@9dob@X:S@2'(@z9@+ ~@Vu@#̍2@d@g*@K]@K3@$G 0j@ Z@m@>-b8@2,'@<64@b}@MUi@@f @ fC@+@ C%@+P]@ @+`V@ { Z\@,?Zp@ u"@,.@ Z@,]s@ }<64@,j@ m8Go*Z@-?'/W@ ]q"@-~t@ LD"@-WS@ @3Pf:@ { 9&B@3m2f<@Pܜ@0<n.@^)5@0Ywr(@?@0v]cf@Wx-@0/{J#@r[U@0q@z>//@0ΣY5;@cᆘ5@0¹M@MjOv@1gT@6fI@1%cA @ Y@1BVC@ < (@1_@B @1|VϪ@"`B@1 c S@ @1>lLY@?@1>iQ@hƒ@1@}!@2 'gM3@e[BE@2'4m@Mu@2C)k@6y|à@2_rGE9@u@2|@@n/@2' @l5@2"h ԕ@E@2 ԕ+@j~#@2ݗ+k@@3f@/ @3#L@r E@3>1@Y =@3Zl"@4 (wN@#Z@4@ 7KƧ@4i?/w@4Ӈ?ŬGH@4nY?rs@5}H?<+@y@5"HG?y@5<^#?ϵIHV@5V_ح?0 )@5pK]c?bb˧2@5!Bo?+jf@5ᆘ5?>=ć@5 /?Z@5!p5ٔ[l7@P5&@BZc 5n]\@ʂ5Te@@^ F5;0HA@zd5!$5in@!}5D(M@9rGE84Ԫ@Q4Ԩ?@ilD4}Vm@n4U@m4@-4lUDR?@ɺ^5?}4RcO@laR*o47~+@1e4"0@gS4cI{@'n3@>"3"0@Vg3JL@m1z3Zjj@do3|V. @Y3a:S@`l o3F5~g@n3*n@Y3c^t)@qp2 @ {{2eO@ 2ŗNe@ 6C-2H@ LC2Fkw@ bmHQ2ig#$6@ x 7!2Mqbb@ .21gt~@ m2HL@ "쪹1P@ @$=1}At?@ CV1n@ 'j@1s@V. 3p&@(b3'!W@< (2 $ p@5?|2k;K@92gt~@IQ1ɩT!D@ 7QQ1}_ô@ vF1CWp@ cV1Wh@ CA00@@ K۠0[(@ HU'(0]9@  4Y0M?@ !.H0nǸ@ 5sg0P- @ H*")02BC@ [f3]08@ n9.iQ@ P ,l/v;%o@ $_Z/:KC@ -8Go*.v5@ ʶ&.@ nY!.q+B@ ]k;=+:If{@ w< *:pe@ sG*mq@ t*yo.@ Ys*>7ޓ@ ޽*9m @ ʁ)"0@ -#N)^)@ U=)~iB@ )LD|0@ iu) @ }A5(T@ (]k;(aSy@ < 7"( \@ M '>@ Z1 '/Y@ `,'T_Zjj@ ^X';$@ V|G'7,@ KC%';f3]%@ Bm'6/e@ @c^J8'-V@ D?&+@ Ma=&L@ XiQX&k[-M@%@ d%1&#l&k@ o?R&W%݀^_0@ ybE% 9&B@ m%[U=@ xF]%[@ pd$޽@ \$<@ ԕ+$[*)s@ 9m$"@ 9Y#< @ ɐl-# c S@ Cg#$[l7`@ "D@ ,!u@>!Ndoa@  lC@iQX ?hۋ@#s$tS@0OX(`@=ӄwڹY@I^5?}8bM@U$/A!la@`sWq\C,zx@jި(@t3yR4@~+U qu!@o*ZFs|@np㍣@x_KGN@{06F @Se Eb@.< l*EM@")/s@̝4X93]$E@qKGN@}H&Y@=n@Jw,QH@j+A_E@پM5y(@B0fI@L5Wh@ڐVH@4m+e%@tji}@#4C@ T6)r\@ɯY@EwFsB@ ֡a@@~ ڹY@#ڤ \#@'ud0+ *")@+&ii@.Hī`kz@1 L_@3T6ig@5Q.ƽAE@7ȊH$'@8hD@8^ @8 I.3@5\(l@2LfQn$tS@.)sБ;'j@@)ᰉ'R@%[BE.}@!s08@Lg@U&k@N;52f=ć@$Z1@ uy)@!Z@ ݸ@ܱF^@!"a|Q@ r @!fq@a@!K@py,@!&@+@"4j@oa@"x@گx_@">'!@1;@#H@ƼS;@#EK@27@#`@7Ȋ@#ѷY@@$ /@q"@$Vt@IOQ@$,d@Tw[@$Ć-@|;Oag#@%!bw@p 7@%eBB@e|o@%5~@Z |@%x?@N[BE@&/"@B1Q@&sfQm@6f@&&I@*d7@& @ Fd@'=At>>@@'c^J8@z$L@'puO@ a Ec@(kȟ@ @(IQ @ ygt@(% @ N;5@(>W@ \N@)7Kƨ@ [-@)T@ F4@),<@ -M@$@)uy)@ Eb@*SP ,@ 8Ck@*][@ q @*m@ b}Vm@*>@ T61@+#4Ck@ E @+e|o@ 60@+b@ '_@+b@ e+@,*\@ @,l,d@ X@,a=@ ި@,t@ 7ɚ%@-06@ xF]@-q5Tu@ K@-8j@ z},|@.@x@ i`@.Ew@ Y&A(@/6&,s.@ H@q@/vo5J@ 76f@/sB@ & Eb@/}Vl@  @0RC@ L@0;>P3@ o6@0[ @ `N@0zc @ X%[@0 ě@ !~|@0b˧2@ lD@0RD@ AJM+@0u@ S&@1#w@ rz$@18*@ `:@1X @ MEb@1w\лn@ :S|@1Y@ '=[!@1@ a=2@1 '0@ ٩T@1%1@ -e@20@ ٔ[l7a@22+C@ X@2QeU@ $5in@2oEwU@ u@2I<@ ڐ@2sg@ u~g,@2@ a~|@2괷,Q@ L~@3 < (@ 7ޓ@3'9@ # >l@3FiQY@ &Ԁu@3dm?@ &A)@3 ě@ ŗN@3q@ Δ9.@3`,@ #w@3ɰ@ s@3 /^@ nY@4a E@ x 7!@46@ be+@4T̢@ L8\@4rNzVC@ 5׈@41@ @4U5@q @1bn@uɯ@1,@^doa@1!@Gj@1˧2P@08@1tr@>(@1`@`,@2,fW@ @2/'j@@ӞՐ@2L oTK@#@2hq@ḍ@2@_@2M@t$5i@2灃@\ı@2l7`]@Doh@2ܜM@,<쿱@3:@Y2@304C@T^@3L{0@ⶮ}Vm@3hٔ[l7@HU'@3$_[@m@37ɛ@%[[@3@Y@3؏`@eם g@3I@L~@4N&Ԁ@3PH@4+}9@[l7a@4F"@Jw@4b_|@'|E˼@4}5Q/@D|0@4F4@GE85@4]U\@*0@4"}@}E@41'@cwk@5@I7KƧ@5@.h@5:m@K3@5U/w?/Y@5o'=[?*"@54Ck'?6&-@5Ex?P{@5ᛐ?K۠'@5eU?V@53z?d@6 <64?u:@6',]N?>@6Ath?Jw@6Zm3 ?Ϫ͞@6twkP?9@6 (?_1P@6S?'&@6s?a@6C\@JA c 6 ^@c-#O6{m]@}Fkw6bgb@ZI6I6;%p@H@r6/{J#:@Q 6v5@w\58J@,]5mǣ@uK5ȉ'RT@-HQ5i;@F)k5uK@^5zFsB@w!<5_tr@`V5Eyh@(߹5+$6e@58@bM49Y@4&@@4L8@f4Y|@7AJM+,4O"}@N[W4o,]N@f1.4S򐫴N@}{ 1ί487T@"47~@~($4X@®9C3g@$56QOX7@yR46,]r@%16zd@(A_F5Zqx@?P3:5&c@UfA50$@o95F]c@j5|7ޔ@*c5]ڹ@ 5l+ZcO@ yR4+"@ 8\g*?ײ@ 'mq*[#c@ :SP * IV@ Mx>)$=@ ]DUGZ)yoiD@ kU)8M@ wXe(GX@ n(*\}@ zH(pd@ Z(o@ Y6(Eם g@ Ov_(=K^@ "`B'@ }'M@$>@ Pܜ'@ T'KK@ $'-#N@ f'|&uO7@ X%[\&LcA \@ 񤽺 R% @DUG%e]r/@¹M$i@.@$NU@=Fkw$:`@H.3#hJ@NxW#ª9m@QFV#-"@Q 4#JM@Np:~#>@L4X#@N!Bo#n۵@S&#B@[u%#%@doa"{J#:@nX/D"p8\g@x"쪹"ȊG@y|ß!NP@\$_!dhH@ 4! e@IV 4J@1L [iJA@p& =[!@f&I@Õ$!@`sWc4@_a(ado@䎊qj|o'=@Vϫl oTL@tҳ96@5~g,|u:?@ ҉`N@)46&-@*~"T@5Xy=JA @@zc@IB nY@Q+ܡbx@X4CO-V@]u[ @a.H?@dmH|o'@f:4y@hMO"}@inX/E'+ I@jy|@kNPy|@m3 A!;K@o灄@q1eәpEwU@sGO #-@vjUp j9m @yP : @|&V@ ͳ|@>p~|@U5QT@M_$(@+^"@=B3Wp@ Z)k@<@RJe+@"&@{ިc^t@ǿKHӮ@ڐԟ]@e (@zVCIOQD@ M;i/n@B9,fWx@H*1{@3:}Y2 @k}:bD@_˿ܜM@$?a@[T?ҡae@P?ܿi,@|Q?t);@q2W?p*@eK?As@ZIf{?py,@R4?J\@Oo?y@Qu?!@W&?P]@`{5*8?W4.۵@j@'?;@s=@NMj@zI< @&V@~mH@<`@0H@@cI{t@@P@S#@*j%@}9Y@:pd@z @ HG@w{@ W2^@sl&k@ j5_õ@oVϫ@ [@lfWx@ W}@ld@82vt@inX/E@{0@a$5@x^ @_m@@\ y@Y@W @ jcI{@< @+@$/@2I@h]k@ay|ß@p@&@@~ s@ 7!=@ \@ $@쪸@ nX/E@*o?R&@%@{@6e@GOIH@XOLnn@հ5Q/@z:@dk@xl"h @D">@ D@u!@-V@}At@?) @F^"@*1@*&@0OY@ @{5+@F@N;6@`d@c Sz@bY5@{@ǣ @+U @}`N@,QI@ 6P&@ ě@OLnm@a@%h@R<6@k΅4@/l@@:@iY_@-e@Կ @Z)y@T~@,@z&@ 9,d@rB @ Fd@iy}@ ƐWx-@a=1p@! k}@Xa @!S@Oq!@!#w@FsB@!8Ck@=p =@"%?|h@4Ҳ@"k6z@*np&@" [7@ k@"@),@#i@')k@YE @'Կ @MUhƓ@(@x@@B @(]U=@32@(R@'@(DR?g@`@)*pT@ D"@)n3t@ b}V@)1Q@ iB@)l!-@ :@*:>//@ l!-@*}C\@ ˒:*@*0O@ hA_@+)4@ ,d@+H.@ ѢY@+*\@ Lnm@+@ O,]N@0}ulv@ =%!@0s@ ,#@0l!-@ VWi@0@ uO7u@0'/W@ o5J@1nV@ E#N@1?q!@ ?@1_łV@ @1yV@ {@1#d@ K۠'@1@ y @1t}@ t}^_1@1HH@ ag#$6@2h@ N,@2?6&,@ :э%@2^ŗNf@ 'M3H,@2~YJ@ h]k@2nY@ Jw@2P@ @@2ܱ$5i@ ŬG@2@@ k&@3A0P@ @3:om@ "`B@3Ybw@ 5@3x@ q$5in@3G0@:@ ]`@3v @ H1&x@3J!@ 3:}P@3 oTK@ U\R@4<64@ ~@41[W>6@ 33333@4Op+@ ݢr/Z@4n_0X@ {@4ŗNe@ Sn@4PH@ (\@4Y_a@ `V.@4&@ oVϫ@5o~=@ Y@5#2P]@ C,zxl@5AA_E@ ,@5_zNzV@ ᰉ@5}Fkw@P3:@5m\@)Ie@5/D*@ 4@53@nD@5th@2"@6&A)@>WS@6.mu@ZIf@20 )@ޭՐ@2\N<@@3sl&l@ 6P@3 uO7u@CA@3=bh@~mH@3Z;yR5@fcI@3ve@NK@3 $@5׈@3Go*ZG@>'!@3}At?@-@39Y @빌~($@4_ô@7@4!4.۶@D@4>Y!@l oT@4Z1'@OIH@4v< @mǣ @4 I^5@Tpd@4lvK@:SP @4ɢY6@!i@4KZ@Jw@5҈p@Ww@5\ @P ,l@57ej@#w@5SnP@CV@5nL/{J@oh@5nX/E@j @5x?@Oq!Ks@5m3 A@4j~@5K3@ʁ@5ɰ?+U @6`? sG@6*VWi?ʖ@6D֡a?[l7`]@6_>6z?$6e@6yo?ǣ @6ȟ@?n~@6ᰉ?@6䎊r?H!laR*@6OQD?wFz@6{ 1?̸ؘ@7~g,?H@7/'/W@hF71:@i7+@#6Y@+jg6h@Ϻ&6ʘa@*0U2a6- @1Q6mu@XdE$6|0+@j@4[ 6a؃4D@M(6GfP@fz96,ڐ@)r64n@dE#5uMU@ 75ܚ@{t5g@߹8R5,<@VW8&g@4X!8 (@5Q.ƽ7l<@Ms7kv@e+7cI@}f'|E7ܱF_@k΅7vt@iQ3۠&@%3y@ZQ_3cF4A@i433e%@kv3*)@ E2䎊@ DQ֌i2*")@ np&2ʁ@ /29hH@ },1!Z@ 1.۵@ 012I@ S 1n`V.@ np&1KՐ@ .r01)?) @ P3:~1`A7@ 60_@ ̽D"0q!@ P0E@ ՛=K0,QI@ #w/%ם@ JM/B9@ $tT/f@ "R/aR@ 8R}/ Z@ V9..lvJ@ zNzVC.~vݭ@ P]. =@ If{_-Kۡ@ 0OY-?T Ǐ@ /,\|ؘ@ [l7`,a6@ -M@$>+!-w1@ E /+8@ \0#+DxB0@ sBY* @ K]d*Tw[@ ,Q*GB؃@ ,d)ިc^@ `)$Jb#@ ˧2P])hs@ A_E)!E@ h3*(dob@ ZIf(حV@=Fk(Ehƒ@8\g'uy)@o~='ᛐ@-M@$>'_Ŭ@:9`'sl&l@FDR?g&ʑSy@Q9C&hK@Zjj&&G`]x@b&3:}@iN%n@mhr!%iB@o%L/{J@o#cW%)Ie@mՐ%;Oag#@l0%v@l{%hmqbc@os%D%1@tAJM%?g@{D=F$]r/@8 $)^@ͳ|$G?Ҟ@bM#`V. @## B@+#Xu%F@wr(#nP@HL"b}@Sy"K@hƒ!~@?) E!`@:!+GN@CA0 @ pa } $ @eXO +$@IQ#@'RT`erS@1omY@<n.do@FpO ׈@Q]U\Sd7@\yg>6@fA4X!@qpO4JD@|n.&@)J]N@)B\(@6_I@FVFze@7V ׈@ҝ&QQ@āoh*@nYuMU@Б}kf6P%@`:Kc Sz@|HH@nV&@ݬ}W@A5Tv㚿3@"JcO@mHbh ԕ@:pe2f@#?|&V@@aR*o??hƒ@-e?@۵?:s-@#̍?hH@6?,d@ E@K'/@7Ȋ@|#@"?@Up @p@Cg@&x@98q@J@(c^t*@4֡a@O6@RJ@u/@C@ =x@@")@ 98q@蜡b@ >P3@@JD@V`W@@\@ T6@mw1@ < (@@B@ @ӄv@ Zq@ @H@73@BjF5@K@(n@0U2a|@c,]O@Zp@[l7`@ہ0HA@Q֌i@򐫴N@2a|@?>p@u:>/@\¹N@ э%@UDR?@ b/m@);@ {{@a@@ zcsm@^t)@!:]y@Y@!r/Y@L@!4Ck'@ѷ@"|@Jw@"Y~($ @v}Vl@" [7@mHQ@"/D*@cZ@#0W@Z |@#w|E˼,@P3:}@#鷿@F/Y@$4K@< #@$MB@1o@$`d@'M3H,@$nwpz@[@%"iY_@y|@%iR4@ e@%'RT`@n.@%`V@uO7@&=B@zxl"h@&5inX@ʁ@&ʼpd@P1<@'0H@@„1Q@'W@Fs@'b@~"@'fP@D<@(*/@@(p8\g@]r/@(,s-@x @( B@kuy@)At@^CV@)d@Q@)!5@Doh@*wkQ@7Xe@*X5~g@)a@*Y >@k@*Jm@  @+'3@>-b9@+lD"@ iB@+@ @+<`@ -#N@,;?z@ ƝsB@,*c@ rG@,k&j@ D @-BZc@0iQX@ e@0Kr@ @0ܱF^@ t!-w2@1W}@ b}@1%u@ P08@1Fg@ >ʫ\@1g@ ,5@1n@ ݘ@1ϿT@ 6e@1z$LD@ \(@1)y@ $6e@2 .4@ l-@2+Wp@ W@2Kk@ 򐫴@2lA5Tu@ sPH@2M?@ -*EN@2$_[@ puO7@2hƒ@ ]DUGZ@2Ck@ I'RTa@3 XdE#@ 5IO@3-[[@ !5_@3MJ!@ 2"@3m)4@ 1eә@3n@ `A7L@3O M@ ɯ@3V. @ e@x@3 @ @4 l7`]@ s@4*/m@ }x?@4J6;%o@ hۋq @4i~+U@ S*0U2@4d@ >WS@4fA@ (5~@4t@ P ,l@4޽@ B@5ŗNe@ ŬGH@5#A@ ֌i/o@5BW'@ ¹M@5aѷ@ q!K@5Ë@ >@4qp@ŗN@4"@l|G@@> 9^ N@\ ٔ9.H@u?9\N@zcs9x̷@.ǹ9]N @0H@9At@ٞ9(߹8@Sn9l!-@ D _89m @#48CcH@;쪸8,zxl@Te%18,QI@mV8")@H8f0OY@t)<8I=b@z@c8+f@8 RJ@g 7mq@z$L7ϏG0@:@ 'RT`7#$6e@;sպ7X@XbM7k!Z@t,Q7Hם gb@u7%!R@}Vl78\g@^6ޞFJ@=[!6rS@.46ϿT@6vWx-@7-#N6U '0@P1;642W@im6 =@~5y@Xe,5e@Ww5@7 5ڐ@⡵͊5ya=1@5Pިc@X55$ @_ô4π3@qK4[T@)4Ma@Z@ vy|à1r͞&@ u1xH@ N0Q֌i@ X0߀3r@ 0 90=@ Pl-0HU'(@ g_0cI{t@ >-b90[΅3@ @~0˼+@ ڹY/`x@ )_.)^@ ,-b}@ <wd-yE @ U2a|-ԕ*@ kC],@ ,'7,j2I@ k&j,¤T@ f+ʫ\@ ud+~<@ Ǹե+37 ܇@ },*B9C@ o]*n@ m\*\L_@ ײ*[W~@ :)z)"@+ J)Bo@ &)l5@),d)=HQ@2a|Q)~m@: RiY`($@@j(zNz@GJw(W)@M%R(@RIOQ(hR}@W+j(FD@]u(!|Q@doa' @ky'Y2@sߤ'Z@|Zqx'X6F@v' sG@ ,k&!6@$'&@{_J&4k&j@z$%gwZ@z:%f:@e@%"sP@kP|$¿LP@ k$co~=@Ck&$R<6@6#s@ ^#TNP1@L_"n@҈p;"m@'!Wh"Y_@0Se" k~@9XbM!ʁ@Bn!l;Oag#@Jt}^!9@Sݗ+k Cc@\0# rGE@f Eb >>lLYu@o/sWx-@x\g*Ox^@l!-@"mǣ@k&jzX@_0XK3@F(%1@!-w2t:@98q=b@++^ Fe@ɯ{1[W>6@Fi@,QI;K@쪸S#@ y !!Bp@v f^"S@>6za@^_0zNzV@#Y5;OS ҉@(2 F=B@-RJ/Y@2sպdLD|1@6v 1L@:)_'Xd@>%|G@A.H 4@E& =[!@G kʫ]@IB &[ @J"'ty@HGZ,fW@E /G 0@BjF5Sݗ+k@@'RT`qp@>//to@=ivEGG@<쿱[Fs@; /^ԕ*@8^)?>q@5ᰉ,<@2~Rv)k@.Κ,frq6@+CV{0@'ݗ+W}W@$ pNzVC@ ٩T7T7@1oᰉ'R@Ë`I'>@#->WS@K3?9䣃@'(?&,s-@m?hb@ȊG?\N<@ 7?`G@6?ҲL@?g?$_Zjj@m\?ܱF^"@h]k?K@A5Tu?6}Vl@$5i?K3@1?h)Ie@-#N@xʁ@7~@s@hƒ@ D@[ @- $ @6@cNv@@#@T6@ƃ<`@P]@y@{5@ f=@KNP@0OY@)k@,<@tj@h@2 F@u:>@n@O4@1 8@ ?@oi@F4@X{@;:i@쪸[@7T7@ @)k@}OC@ k@kv@ ӫGO@+C@!UhƓ@o@!fVI@;:h@!}A5T@Ї8@!2@ǮzH@"Cha@tq@"x@h@"4K@7`]y@#Ms@*@#hwN&@&A(@#@fP@#0 @}ӄ@$CB¤@{nwpz@$r\=x@q6@$D@fԀu@%!Bo@\X%[\@%f-f@Q\лo@%CA0@F6&-@%K]d@;.]]@&@7 ܇U@0L@&%1@%@&D@1'@' D @qi@'a%|p@¤T@'+@!.I@'m@@(8\)@҈p;@(K@҃B@(f:@"@)`N@|ßa@)Wz@c@[W?@)>W@@)07@4@*-f'|E@K@*t@xQ@* Z[@jY @+u%F @]>'!@+IGNΚ@O{@+@A@+֝sB@3 V@,!.H@%U.r@,cT6@e@,E@ c@, qu@ Y @-6$/@ !Z@-|#y@ 8J@-}A5@ ++@.\¹@ 2f<@.Mke@ G@.I@ +@.a Ec@ @/@ ˒:)@/bs@ omr@/+j@ _@/i@ O͞@0"&@ ?]x@0;;<@ .1@0]ݗ@ Ov_خ@0\¹@ a=@0L@ u:?@0 oTK@ #c@0H@ ڐ @1@ A!la@1*%|@ UqK@1KHj@ FV@1ma(9@ *1@1`:@ @17@ pȊG@1Ҡf@ "@4cD=F@ e+@4y@ @4@ a@4Ý^J82@ ʁ@4rz%@ Y!@54@ od9@5"G{@ Y>BZ@5Bzcsl@ DM:@5a޽@ .O;@5m ֶ@ f'|F@5ƒ)@ @5 @ 쪸[@5;dZ@ r2Lf@5Vu@ 6@6[[@ g@6Y@v @60OY@(\@6xB0@ohی@6 D@fY@6q`l @K:@7 y@0 =q@7&d@DR?h@7Ao?n@7\:?x?@7w#ρ? V@7:)y?P ,k@7Q֌i?@@7Tw[?R*o?S@7ử @.H;^tc4@gߏ;96;%p@ٮO"};9.@7 ܇;m\@ T6:.ƼS@%P:π3@?W}W:}A5T@X.:?@rs:-@m:pp @TɆ:Uv@ڐ::FIm@L:łV@ǣ :k}@K98qa@!laR*o9{_J@:KC9/D)@R<649n@k[-M@%9|(M@7 9`_F@N;9D\ @?|h9(?G@fI=9 q @ '8kv@8ы.}@s*8@@1VH8g@J2I8xn@b8Z~Rv@{ 8lLY&̷@̸%KH@"SP%y+@,>B[%(a@6+jg$(߹@>mH$inX/@Fsջ$1u!S@N<#[-M@@Uv#;'@\.3#-_@bC,"@ilD"iB@qA_E"/?R&W@yhH!"}@zcsl!m@m!DAJM@6 k~@| +@/e cQ@nC }H@3]$EO"}@U5Q$5@˜g#@Q֌i/`@`N$oa@쐁?rD">@UDR?#@FƧ@nҵ^@" I^5·Ǹ@.۵䎊q@9Ë` |[@Bc^t@I[W~cQX'@NT;r2M@SrSY@W^ Fem>!@Zэ%x^@]E3@`x&@ckлnw@eם gb3@h+Y@jcOWXe,@k@x BC@lk΅3 Sy@l1&y oTK:@j i}@f3]$Em\@d2m0+@j@bw\sBZ@b&qc4@bb˧2b.]\@bC,Q@cLߤ?@c7!<޿M++@bU5QłU6@`-b8-b@+^?@+CV?HL@+Jw@8 @*ި@#π@*Sy@AԪ@*+C@}[!Z@':pe@MjO@&)J@',@{ $@CA0@zG{@ A!l@y6@&İ@y̢b@Zݘ@wiJ@1P@v /@@uXy=@nh@t`d@ (b@s4@ \r\=x@qH@ 6@p*0U@ 1ڥ@nzVC@z@lk}@K3@k'/@`sW@i9Y @G@@gRT`e@Wh@eU.r@z3 @cD=Fl@@a"S@gwZ@^ ;@FpO@\M?@1P@Z0OY@otr@:LB@;D=G@7HH@^_0@4A5Tu@8iQX@0ȊG@]q@-@$=@h9-*@)i}@䎊r@%oiDg@-#N@")n@ j@Ov_خ@ cBY@`V. @ Q@bw\@ ~"@LfQn@!FhK@$5inY@!}ke@ ͳ}@!d@|o@"(;D=G@5Tu@"s@|ßa@"`,@oiDg8@# E@2P]@#Tm@L@#Vϫ@Fs@#jj&@ʛԿ @$5$_Z@28@$|@ȴ9X@$1;.^@zxl"@%IO@]yЦ@%`_@@#d@%ި@UhƓ@%lLYu@0@ D<@096;%p@ ,@0\9@ }9Y@0b@ m@0y@ \Jw@0@ LYt[@0u!@ ;K@1 [l@ *np&@1.0OY@ r@1P#x @ U'(c@1sȟA@ @1D<@ @1Ӯh]@ ݗ+k@1QX'@ B@1iv@ :~@2 H@r@ 5?|@2B]yЦ@ =@2dN;@ yD@2 '@ gRT`e@2Ck@ TG 0@2zcsm@ Bn@2Wx@ /?R&W@33t@ Hjܱ@30If{_@ 2 E@3Q2@ !.@3sA@ wkQ@3#Nw@ "}@3,fX@ ,]@3`N@ ŬGH@3LA@ #@4~m@ @4;h]k@ k@4\@ W}W@4}Ew@ CQ@4?) @ .O;@4~mH@ `@4> @ .r0@5np@ J@5!B @ G#@5B%|@ $/@5bmHQ@ ݂u@5")@ v@54@ oiDg@5.}A@ pJ@5BY@ Z?@6BE@ D1@6#+U@ . @6B@ 4C@6b`@ @4n@6`,@ }9@6s@ a@6gt~@ //t@62 F@ g@7Pܜ@ )@7G@ z4Ck'@7>doa@ cK۠@7]inX/@ K@7|VϪ@ 4y@7,zxl@ `@7Y @ Ne@7ؒ%1@v5@7 I@Ov_@8Z@2f!@0:n@a9=@*\9OB@3rS9?ײ@Jm3 9 RiY`@blvJ9-V@y#w9i6@#cW9L{@q9/Ǹ@Ć-9C,@e%18?@fB8ة7@TɅo8MjO@HH8ڐ@-Ր8%@CcHk8bIOQ@Y}8DLYt\@o'=[8&&,s.@U58ֶZ@"`B7_E@87ܱF^@y7fP@a7hƒ@Zx7n5~g@GG7NA@*7/rq6@/~=7䎊r@D8 6QCrq@X^)6ЎT@mR~Rw6d8@v66&@k&j6yH@6X6e@a67B؃@а{68YJ@ 5i}@ Z12eӄw@ $'2C4Ck@ .N&Ԁ2"E@ AR2nwp@ T 1ʂ@ gn1bh@ z]y1$@ J8C3y4J@ ][3W8Ck@ q+35 D@ !laR*3C,@ ]s2:э@ `]x23@ Ώ 25Xy@ T~2f'@ T62i̷D@ ?>p2Ktҳ@ 22[B@ +;<2uO7v@ @15*8 @ YË`1«\@ xF]d1W@ L_1\!-w@ ]U10`G@ 5Xy>1E@ 0.< @Ց0e@AeU0Z2_@Z,<0-Ր@o0:>/0@n/!5@>/p{@8R/#Wp@ 6P.@BZc .8}H@yЦv!.7 ܇T@ܡbx-)4@#c-?g@}OC-; I^@9Xb,$5@,sg@!,$ ^@+Jw+@15+VFs@6@c^J*(wN'@8J*|iu@:4Ck'*sWp@;.]])o*ZF@><`)B(@Bm( I^5@H6e(5@OG0@9(+7ɚ%@W+'$6e@`ěT'|@@jg '%Q֌i/@uX&)sБ@X:S&v76g@LD|0&At>>@sպ%o~=@kP|%i&A)@!Bp%2X@v $Ʌoi@CB$[m@r$-@^޾#X6@#S@ 0j+"@եb"!R@{_J"NG@m ֶ!$ xG@%!:)y@nwp!M4X @X .< @#I{t @+z]z R&q@34R}@:6CBR@A~6w@I< (@QF^"S@X?)07@_{LB@eXOLy3@iJA Zxl"h @m.Up @qthP]@t4W1@w!<D@y`G ȟA@|j~#g0@9@~ʫ\9@G]s@S&|(\@ ^R~@6&-41zN@˒:*N;6@]U@gwNѢ@HQ\B@@1 @]U g@٩ SP ,@nwp 3=@~=ڐ@C:mǣ@FC,zx@'gM@\@ $ ql?@|G);@x2vtc!5_@rB {lC@iͳ|9m @_j򐫴@TԿmǣ@I D|#x@C{J#9+ J@?`NTK:@=)r\>wN&Ԁ@;pd@<0#ͿLA"@=Lh3@>c^tK@?gߏ?,'76@@Y?S;wF@@ŬG?*)@A*ީ?4@AR?:@As?k&j@B6;%o?ڐ@Bh ԕ?ZY@B@4?f3@BD?Krz%@Q?TK:@/^ G?/@+?(z@3?@VC? ?>p@C-?{@]9?At>>@\(?ud@@,@PܜN@3BY@|O@oiDg8@NQ@\$@o@盺 @|@#wk@V`W@_Ë@@ nCz@-@ ^ Fe@e@  ٔ[l@,d@ NY@`V@qiC@i-@@ b@B @>P3@\N<@d@e@y@rq6@Yr@}ke@ ܇T@{R}A@}^_1@y#w@1iB@vC-@/s@tԿ@lnm@r"?@ $(@oZp@ '@mɰ@C4Ck@jl@ 6hK@9XbM@ ,@5v@ d@1}ke@!"@-ty@!l#@)T!D(@!ʁ@%!Wh@"\лn@ ٔ[l7@"T@wd@"s@d@""}@d3@#p@ڐ@#Ie@ Up @#A(@ @$#&@x@$o;@Cd@$@v5@% Zx@ =p@%U:@ٞ@%kv@As@%Y@ĻM@&;&i@@&c^t)@:@&Ӊ @?@'s@&A(@'k:)z@nY@'sPH@u%F @(<`@vC-@(N쿱[W@k+%@(ݘ@_P]@(hK@SE @)1m݂@G I@)|s-@:э%@)N&Ԁ@.]\@*<@!łU6@*^y@1@*F4@.3@*E@wF{@+>c @KHӮ@+\)@ﲪ@+l&k@]9@,%@r(@,h@d9@,&IR@;yR@,*EM@y@-Fy@Z@-^ F@) D@-ق_@pSe@.# ҉@blvJ@.lx?@S@N@.͉/@DW}W@.n@5D@/HF]d@&B@/,'7@@/ٿb@?Ҟ@05;Oa@ ud@05{z@ *d@0Y1eә@ +j@0}Ր@ {@05@ `H@0u@ gM3H@0r\=@ @1 iv@ YJ@116@ u/@1UGZ1@ d{0@1x,'7@ S@1 (x@ B\(@1bM@ 1F^"S@1v@ حV@21@ K@2*4n@ O"@2Mp =@ ")@2pu%F@ @2_A@ Ʋkv@2"@ xB0@2٢i}@ Y5@2~鷿@ ]:@3G0@9@ | 7"@3AlD@ j5_õ@3dn@ WNe@3),@ DG 0j@3Y6@ 1m@39@ ѢY@3Vu@ gb@4- @ n~@42}Vm@ *cP@4Tǎj@ V`W@4vv @ iJA@4d8@ \лn@4|Zq@ &@48 @ ~鷿@4޽@ j_|@5o@ Ul@58@ 6;%o@5u@ {@5<@ ׬@6z@d@ 6;%o@6(F@ zxl"@6Io@ D@6jK۠'@ @6ŗ@ k1;.^@6eXO@ Uhƒ@6n@ >^ t@6#y@ (߹8@7 Zqx@ /l5@7,|0@ j@7L-@ *@7lx?@ 1P@7R-#@ KƧ@7 y@ A7K@7˼Z@ "S @7MjO@ qiB@8 z$@ ZIf{_@8*#9@ C<@8Ihr @ +jf@8hl oT@ h]k@8.@0$@8 @@8łU5@۠&@8Hjܱ@th@9@f3]%@9!a@f@9@Q@j~"@9^a(9.@Q@9|zxl"@9#w@9ϕ@ QCrq@9zNz@Z1@9'!W@N&Ԁ@90@"0@:o?R&@0$@:0Pܜ@}@:M%@ѷ@:k 0j+@od9@:`V@Ush@:/@;lC@:¶&@!.H@:߷AJM+@z@d@:M?@=@;f{_@ӣ@;6g@R4@;Ri4@灃@;oG#@a@;tj~@i;yR@;[W>@OF@;sպ@44@;ֶZ@Ev @;"@=@<ws@ @<36z@n@E@2?<bx@L8\;@d'(;ﲪ@}Ć-;yg@Ԫ;~@;BE@ǙXd;eiv@;HY@Go*ZG;*B9C@r[U; Nx@(jF:7ޓ@@sWp:`N@XJA c:'RTa@p: @Y:t}^_1@m:U RiY@tc4:6Ԁu@ͽs:+@/9ŬG@lC9a=1@79?@)JA 9t}^_@@> 9zϕ@VSP -9[ ~@m8Go*Z9;*cP@P9)^ @O"}8 9&B@ej8ϕ@űH8w|@BE8_I@L8{'j@@YJ8[C,z@Կ 8:'(@1&x8u @FYJ7T6@[l7`]7ֲkv@p݂u7tq@GG70j+@ b3G 0j@ ڹZ3•ᰊ@ L3)^@ < @ ws2k@OX71{0@ܱF^1#@$?1f3@5_ô1LW@F]cf1`M@X/^ G1: ě@i 1b@{s0퇓ݗ@Wx0@"S0灄@Zx0tߏG0@¤T0K9&A@P3, }@ڤ+l7`]@ҝ+L*@͎[*|@ڐ *J@*0'RT`@m\)}A5@E)t̢@*0)/^ G@ 0U2a|(ؘ@\((b\=x@A5Tu(2^@U' @M>'Jgb@t&`@ `G&n5?|@!0O%v@#`O%8($ x#:S@D?#d^ N@IlD# 8Go*Z@OTK:"@TSMj"X_F@Y&A)! N@]H˒!@bM!PDU@f ' If{_@j9m -"@n@ FQm݃@r/l5/@uGZ1ߤ?@x*08\g@{L:!5`@~-b8<mfI=@g#$6.2@`kzp+@-Gݗ+@^If{_@&ԀuT;@ 8Cwk@2D*@E숤~@̸@hۋq@x_ x@ ٔ_o@c^t6z@'RT`i}@5f'|E@ѷ2IOQ@E#N#@}2@OIH9>BZ@ Z[)*@RiY_ 5?|@/{J# @Ր TPܜN@G0@9 !R<@ g`:@h af@r( Ӊ @jj%MUh@?zLA"@Jw f{_@6zűH@A7KXOLn@>=x?@1ڥ"`@[-MkF4A@X2"@YE @JgT@'>EGj@-b8<@X%4AJM@ƧU5Q/@~($ xAs@ Z-Y@>lLY3H+@&ԀuҲ@ʿFs@T;?#wk@v?r/m@As?ڝ`@Ys?cOI@V`W?y(@As?쎊qi@Ŭ?}A5@۵?\¹M@Ǹ?lC@!R%@"/5I@9>BZ@" 4@5f@"p:~@11eәp@#7!=@,C@#m:@(+@#+@y@#`k@$ BE@t@$ZC\@@$0 )@5@$5~g@H@%Fȴ9X@ C%@%sg@/Y@% (wN@7@&2~m@kP@&ܜM@]N@&@~@3@'yЦv!@I'>@'kA@9@''RTa@@(@Kۡ@(UfA@ :@(")@t)<@(ěT@CQ@)>N&Ԁ@-f@)+@@zS&@)@nSeX@*&FV@as@*sbb˧3@Ua@*c^J8@H*)@+ HQ@;sպ@+Z@.wpy@+I<@!͉@+H+@k&j@,?8R@sջ@, =@gt~@,>BZc@#c@-$T~@ѢY@-pJ@π3r@-"h ԕ@\@.ڤ+@]$D@.SrS@ud0@.Q@R<6@.A_E@Y@/5v@x>-b@/?>q@iK@/~$@ZBC@0 (n@KC%@00sWq@;ײ@0U%@,A!@0z&V@ ٔ@0uMU@ Wx@01o@ G@01 @ C@1`s@ Hjܱ@13s@ ۠&@1X7 @ Oag#%@1}{ 1ί@ np&@1Y5@ 2 @1Ưł@ p:@1.}A@ w3@2Xd@ fv @23A [@ U*0@2X5@ CB¤@2|e@x@ 15@2jF@ "&r@2ċC@ 6F @2˒:*@ &V@@3 `d@ lD@30-8Go*@ ק&@3S%2@ .r0@3wi,@ (@3 >l@ *c@3`sX@ x>@3`@ z RiY`@4@x@ fx@4(y+@ Sh]k@4K^J82@ @NU@4n6z@ ,-@4n.@ +@4]r@ bh@4QQ@ |Z@4n@ x@5Ҳ@ Q @5?,QI@ '0@5a0O@ &@5v@ @@5lLY@6vȴ9X@ rG@6˒:)@ .H@7.3@ S$@7:+ʫ@ u?@7[7!<@ _Ë@7|(\@ I2 E@7:@ 2^@7 $ @ ;:h@7g,@ ]r/@7Mj@ VX@8fP@ ׈+@8?`@ sWp@8_tr@ ?) E@8"쪹@ R@8- q@ z}OC@8J@ bZp@84@ KC%@8 @ 3@9QQ@ f3]@9>6&-@ 3@9^A(@ud0+A@9}hr!@@N@9?@v@9ߏG0@@r/Y@9ѷ@OQD@9b@q6@:YJ@XiQX@:70X:@?i,@:UEw@&@:t2W@ jOv@:p:@4@:L@ŗ@:>W@t>=@:łU@_@; )_@FIl@;(T@t:@;F9䣃@Zx_@;cOI@@a@;7T7@&ł@;i;@ ~@;@GE85@;@#d@;Ր@p =@<g @h4@=@Y|@`sW>0 )@N>mH@#π>p @t>suy@9rGE8>W,@S򐫴N>:>//@nSeX><64@@>H@r@`A=7@ >=`N@Ϫ͟=Ǹ@𳑒d="?@ qiC=lNx@$0=N[BE@=B=0D*@WCA= |@pO4<r2@B <;K@?`,@cA ;x>-@:>/0:@ 2#:ݦa(9@#-#O:D">@:N:`d@Q:{ @h%1:Z @CA0:9^ @:jF@GG#9D)@ 0j+9=[!@;:h9iv@ x?59@ Y25_@ )g5@@ ?Ms5} $ @ T@x5[<ϖ@ j@'59@ +ʬ5Tw[@ O M4*@ B4҈p:@ $t4iJ@ UGZ14Sn@ -4j?@ o'=\4GAJM+@ )^4$7@ % 4 D@ f53]$E@ &5e@ [BE5BIf{@ R5) D@ /4U=@ ѷ4`N@ M>4B1@ /nV4p @ Bom4lh@ UL_4H4C@ hh3*4#i;y@ { 1ί%3W @ 7!=3@ L83ѷY@ LP37@ )43k$Jb$@ ׈+3FQm݃@ ,d3 {0@ UDR?2B9C@+2y3@!vݬ261@442VϪ@G I2[ȟ@@ZA_E22@mhr!2},{ @1ݲ-V@VWj1I< @9-*1Ov_خ@5Xy1YiB@G0@91-u@@40ߏG@y(0Ҡf@ݘ0wKCW@,?0IIe@>LI'0]9@O /cHj@`K/|wkP@q`l o/@0O.FIm@m݂.fZIf@]x. 4Ck'@-Ov_خ@޽-R\(@ˬq ,0@,u%@әo/,?+@LfQn+Wp@lLYt+AJM+@)4+,h@ X%*$5in@d*w@E*&Ԁu@z)#@ ﲪ)g76@$Q֌i)S@(H(@*fB(6^"S@,{'},@/zcs'WAJM+,@1&6&@5ɯ&kv@9_&[W@> s%u@D7%]{ @K'/$%R@QCrq7$)r\@W6&,$<1&@\pd##̍@a>#=@fS;#28 Xեc@9m sպ@1P A!@j@[-M@@2 E ) D@9&A 2<*@0j+ !Wh@zcs 2^@݂uJ|Zq@ᰊhr@;'j:@l-b9@D*0@v6 A!la@HGÿ͉.@FIm#$6e@>P3Ъ[B@Ú3@@%2? @^ N?̀^_0@5inX?9m ֶ@B1?ٔ[l7a@8 ?H@q@tj?S&@ŗN?z@d@Ý^J82?ffffff@D=Fl?Y!@ӄv?π3@M?ATɅo@(o?߄{@$/@>'!W@Fd@nY@m3 A@8@%@+ʫ]@!@z`@o'=\@f{_@J#9@ @@ fi-@f'|F@ IHU@Xe,@ rq6@eU.@ R,R@PܜN@[6@ ě@}Vl@X@BZc @/s@E6P%@O;dZ@@@[-M@%@̷@`l o@ Y`G@(@ 5Xy>@$Jb@!n@?@!Sİ@ߏG0@:@!!.I@ڹY@!(wN'@յsh@"MJ!@Ќ?>q@"`G@>WS@"j@@?h@#Fi}@uMU@#Y_a@S|@#;Oag#@^ N@$?r @Cy@$+@g@$y@o@%7=[!@[@%؃4D@Fs@%e@x@jOv@&.ߤ?@YJ@&K@) D@&Ӧ@w+@'%@pJ@'x*0@h߹8@'Q_@`V. @(e@x@Xם gb@(nh]k<@P08@(VԪ@Hp @)3@?ҝ@)c{ 2@7eں@)5Q/@.G@*OIH@%灄@*Xۋq @[@*RiY_@v@*m]@ (wN'@+LK[@ŬG@+2fiQ@ v5B@2#x@ YJ@2=?|h@ wY@2b!B@ =Ć.@2@ ^@2'!Wi@ sl&k@2LfQn@ ao@2\(@ P ,k@3VϪ@ >($ x@3A;.]@ ,)r\@3f ׈@ ʁ@3i}@ M@3k;<@ ?|h@3mǤ@ 2"@3sWp@ rGE9@48@ ,{ Z@4A"S@ 5_õ@4eY >@ 6&,@4x-8Go@ cHk@4$/@ pT@4rGE8@ ][@4M@$>@ Iv5B@5rGE@ 5Q.ƽ@5^ t@6r 6@ )ͳ|@7҈@  ǎk@7&5?|@ q@7Hp @ 豚A_F@7jSy@ sP@7_@ ؘ@73t@ I<@7Wx-8@ |@78\g@ z$LD|@8#c@ c^@851o@ M3H+@8V,<@ 6e @8wn@ G0@:@8@ @@82LfQ@ o@8.}A@ fC@8ߤ@@ @9K3@ #c@9=}ӄ@ 1zN@9^ L/@ | (x@9~|ᛑ@ d6e@99C@ L |[@9 =p@ 4r2M@9&k@ u"@9'j@@ `kz@: =p@\ @:>Б}kf@򐫴N@:^zVC@iJA@:~%@i}@:v@İ@:*"@q,'77@: x@X5@:"@?`s@; E@%RK@;8N@ ?@;Wz:@BY@;vFIl@Ë`@;ǎj@$=@;*)s@v @;ohی@a@;-#N@r`@< @X̷@<+}3@>=Ć@6z@}OC@?DR?h@Y?oZp@t9XbN?Q8J@Κ,f?3tҳ@Ie?*8@å;K>7ޓ@,=>1&x@d>_@v>pO4@,@>{6@EX>\Wx@_{>=y(@yP>$/@p:=ł@$=v@#M=d,@:}O=j@< =9@%=_d@(F=?KƧ@Ado=Fs@Z |@ d87͊@ ,6 ě@ Z[(6̓;L@ #'gM6.4@ 9_6<+@ OfP6d{@ e&6As@ z)_6v @ H5|O@ i4/5>@ G{5VWj@ tr5> @ '(5mKHӮh@ hH5I{t@ zVC5%@ #π356@ 74m4j@ KƧ40H@@ oTK6O@ vݬ6+iJA@ Y|6ᛐ@ ֶZ5?g@ ¹M5M:@ 00#̎5Zq@ CB¤5s¹M@ VD5N@@ iy}5);D@ >p4\¹@ Ǹզ4_p@ [ 4<`@ 4csl&@ 7!=4b:)y@ Kr49vݬ@ 4d@ RiY_3Q֌i@҈p;3n.@3w[03k;=@H+3a$')@\$_[343@q63l!-@ L/2y+@Q_2<*@N&Ԁ2{a@O@272M 0@\R-2A(@mqbc1Q@%o^1J@ .1!Kr@G0@:1bQ@1;.]13,]O@BK31~g,@S+U0o~=@cڤ0np&@s20}A5Tv@k0Q^@L0% Z@o/s@ ě/r@GX/@ŬG@ =.~mH@t[ .k;=@.3S@Wp-l"h @ﲫ-}3 A!@`V.-!@ ,d,ƺI<@/l5,k*\@"쪹,_Ë@*+Q@#灃+_@)+I'>@/V`W*x^@4D*X5@:^5?|*ٔ[l7@?Ë)Q@D-)O27@I.3(Jm@L]N(G@P:~((.ǹ@RW')J@Ti'<Jw@Vr2Lf&Y @Y#w&A}@\#%`s@`x%e@dҲM%eO@iQ $i@l7ޔ$Eh@qn#%@uXy=#@yP3:~#M8Y@|`"8\@~Q"$'@7 ܇"C)@Y2!*0U@a!@d#π!z@c@h`V MjO@l~ _F@p8 x_@tnl:@xa {J#9@|`NzVC@$=p`@k&|E˼,@o*ZFyg@QtCc@e-`@ uMU@ >lLu@D*˟U=@dZ!*ީ@np&v@i;yS$@M:!eU@G#v($J@ԕ*CV@{ Z\"@ M;thH@6[W~@/ek9Y@H@qrY@a Ƶ '@,Q@c^@}At?D<@J x>-@a .}Vl@—9m  ]9@Z1 ~iQY@ L/%1@Ǧ76 Z@,k~tm8@ʡ!BS@%´fQ@HQi,(@}Vl}ke@ϛ]:nh@Щ7 #@ѢY6 7KƧ@҃BÿVCg@RC$6e@ (wN*c@ԯO My=b@?|hY@պVl!-@#ԇ#@tc4rq6@ֳ-?X' @ /?GNΚ@i?ֳu:>@i?@ݬ?)m@ֶZI?եb@tc4?|&V@@#?/Vϫ@սQ.ƽ?s@D?9m @Ա$5i?Jn@#k@}|@"fQ@*0 @!e@h@!}@0+@j@ qu@0=@W}W@ݟo~=@{ @M++@F^"@6)Ie@f3]%@{J#9@ |@OX@̸@//@4@ lC@4O7u@ ԀuM@4ʀ,'@ i;yS@4Ë@ 3@5@ ިc^@59@ d,@5^T:@ s>WS@5 0j+@ `Y@5@ L9@52W@ 873@57T@ $ p@6پ@ ;dZ@690H@@ ~$@6]Q֌i/@ q@6Y_a@ iY_@6GZ1@ v@6@ ƒ)@6Q֌i@ ȟ@@7s*@ ~LX@73*\@ iiu @7Wd9@ Ta=2@7zfQ@ >i;@7%1@ (F4@7ѷ@ 0@7k@ Vl!@8:@ W @8)8qa@ Crq7@8LW}W@ 9&B@8n)Ie@ =@8[W~@ ;5X@8NP@ w%ם@8oiDg@ `>WT@8bM@ J(wN'@9s@ 38q`l@9;do@ (\@9]\(@ CA0@9nV@ Y@9G@ R<6@9om@ 鷿@9İ@ 2P]@:e@@ q!Ks@:&"@ wkP@:G)^@ _?@:gN&Ԁ@ Gj@:Se@ /^ s@:N@ hI@:y}@6z@:6C@">i@; {m@̈́M:@;*S&@پM@;J9m@IV@;jJm@74@;]yЦ@i,d@;[T@P٩@;ɓ @7z@c@;^ @l<@<JA c@g@<'v_ح@ I^@0@C,]O@>% qv@(jF@>BM@ %R@>_py,@T ǎ=|oh@$5=^r2Lf@{ 1ί=@=B@e+=!OQD@4.۵=fQm@Oag#$<ß`@jt}^_<;Oag@hJ<)^@A7K<ŬG@ B@s A!l;@łU;j2I@f;I;yR@//t;)/n@٩T!D;zd@4:Zp@ D|0:Ʃ@ %`A7L:[@ >au:QH@ WCcH:bLB@ p:At>=@ K:o~=@ -w19ʖ@ UD9/{J#@ ֌i/o9,fW@ %|9 ,k@  9u8Y@ |o'9Sa@ 1xB090*")@ I[W~9:}O@ `҈p8w[0@ xB08ȔG @ X68_ô@ ł8qiC@ %!8_27@ ԕ*18;a@@ [-M@%8VԪ@ 277M@ ~|7uy)@ .۵7)r\>@ Ez$L74J@ [7ɚ%7e!Wh@ q1eәp7@ܜM@ e73@ 67 ܇U@ \=x6Ӯh]k@ K]d6 @ `6G|@ LfQn6ejOv@ Z16@p @ C,zx6Y5;O@ 1 5'|E˼@ EGG5ٔ[l7@ Z6C5p&@ nO"}51;.@ FIm5`K]c@ 2I5:NQ@ 9m 5¹M@ 4SP -@ d2n4٩@ 4Կ @ XbM4|]ce@ 4X4VhK@ vȴ94/ @ 2`4 th@ ENe3b˧2@ XJA c3ȟA@ jި3ty@ }KZ3ml@ 3FϪ͟@;<ϖ42@M4o^ Fe@_]s4H 7!@qK4 [BF@M++3׸ե@n3If{_@3|D@ 3O4֡a@V. 3!z$LD@kȟ2@Go*ZG2ƭՐ@ OQD2؃4D@7ɚ%2mx@,GG#2Ad2@=D">2< @M%1s@],=1h3*@mC\15~g@}=1kŗN@jOv18Q@R-#1Y@ I^0@|ßa0!~@Ǹե0%!@յsh0a_o@sl&l05ke@`08@7ޓ/#-@/[\|ؘ@ j.]s@fI<.w[0@ .G=[!@)4-CB@%oi-0X:@+CV-3h]k@. <,]9@4s,OFt@:)_+ި@p**$[l7`@z$)h3@"){U@U5)&af@ rz%(ί%@N;5(|7ɚ@ʂ('t}@лnw'ҙ؃4@"r/Y'}KZ@'X:S''2^@-yЦv!&V@2P]&|@82vtc&&@=p =%7@B؃4%{CB@GzH%%XOL@L$Y@Q$xa @Vz$"%1@[?z#˨j@_䎊r#uu@dqj#c @i7~"ǝ gb@m*EM"p (@qR"2 @v8YJ!»쪸@zpT!kxW)@~Ց!_Zjj@T~ q"@sB e@8 2f//t@+@jU>lLYu@f3ݚB@8K,܇Tw@>-b{e@y@tҳ I^@+U |o'@IQh#@nPpy,@u:>/ L/@ 0j+T6@HU'SP@)r\N;5@,?@&l7`]@ / kP@zN SՐ@Օf ~=@>6z >WS@^)&پLI@NzVCZc@۸<ϖ]iv@ gb^ @LI'&q@wd:/4֡a@[[l7`@uy(#9@}˒:)@V35?|h@2mjnp&@6eۿh3@bh%ם @%1PܜN@YJؿ~Rv@64K@ o~=@6WiJ@ E]r/@6f@ Q@6?@>@6-@vr2L@6Y@m@6+ J@ $ q@6R<6@]$D@6 V@g@5@87ɛ@5:>/0@xW)@4:@J82vu@4Cc@P`@3g l@3@2f=ć@('RT`@:@(ׅr(@̢@).鷿@ ٔ@)hK@V. @)$D@s@*4,<@v ׈@*CV@z)_@*n@qbb˧@+8#@hb@+gߏ@_o~=@+@V+ J@,iQ@2jF@ @2s@ V@2둒d3@ HU'(@3K[@ [-M@%@3>WiJ@ DUGZ@3gY@ <@3p@ ~@3 (w@ "?@3 I^@ sl&l@4 e@y@ Ҳ@44 >@ H@4]_@ vFs@4tc4@ g\лn@46&,@ WiJ@4׵IHV@ HuO7u@57 ܇U@ 8ʁ@5( =q@ (b@5Pb@ ̢b@5y=b@ KH@5k@ h@5ɃQX(@ Xy=@5H@ x-8G@6pa@ + I@6AGNΚ@ e @6i̢b@ zxl"h@6J@ e%1@6B¤U@ 7!<@6߾vȴ9@ qڤ@7#$6e@ `f3]$@ Ϻ&@8e@ x@8{ 2@ @'@8XOLnn@ I'>@8؛R}@ 2W@8m\@ p 7@9$Q֌i@ ]@9JN@ J-`@9p7@ 6F@9lLYt@ "`A@9L_@ xW@9n.@ \=x@@6cŗN@ H!laR*@6@x@ 3u:>@6M@ @6ӣD=F@ m3 B@6NP@ _ح@7Ev@ @7BjF5@ ̽D"@7g!-w1@ `@7,@ 9m @7:~@ Z[(@7Ԝn@ wT6@7*@ bw\@8 x@ LI'?@8A_p@ 7Xe@8e b@ !7T7@8݂u@ 9&A@8ȟ@@ D@8,@ CV@8j@ ȊG@9NΚ,@ s@9:GE85@ {@9]inX/@ Y!@9n~@ mǣ @9T^@ Ve@9J@ ?;@9ƒ)@ (ƒ)@: QX'@ x-8Go@:-Q.ƽ@ @:P $ p@ ~m@:r9`@ t}^@:Hjܱ@ (n@:7ޓ@ LPr@:DU@ QX'@:f:@ k;<@;I{t@ SpP@;pu@=.r0@#}9@={ 1@hb@>)y@)sБ@>8r[U@Z@>V2@vF@>tO"@x@>w|@Zc@>1ί%@g(b@>@K۠&@>;<@0#̍@?ﲪ@s>K[@L>C\@vݬ>鷿@Q֌i/>o@0*>PDU@LYt[>0iQX@g>&@?=)@?>=Ы @P=tqq@ x=W@ƼS;=os@ pa=NVI@$k=.&,s.@>q= 5Xy>@X¤T< p@r?~L@ /s4 @ _E3^޾@ j@3Ī"@ P3۠&@ ,3r@*)3Iy|@!5`3 zNz@+ud0+A2 @<쿱[2i}@M2 gb@^"S2{@x@oD)2R[T@LPr2(dE#@A0O.Ր@Q.$5in@b ..< @rR-$LD|@!6-;Oag@%S-1l@~|,-e@y+, c@ײ,3@Y+޸Q@%+ @쐁?+4E#N@/V*鷿@ { *2 E@*3l&k@&1.)݀^_0@4>=ć)lC@BB)12^@OԿ (,<@]hƒ(PܜN@jܱF_(-a(9@x?G'n~@3ti'mr@*o?R'(Q@޽&јR@m&z=)K۠@':pe):SP @,>(u%F @2 4( (w@8ިc(1TɅo@=W'ؗc^t*@B?'ײ@HCP'&ŗNf@MZ&ͯ@RS&&t~鷿@WAJM+&2m@\u:?%o@a0O%hGo*ZG@fs%6z@k3z$پ@o{ 9$["`B@t}^_1$:S@yuy)#8}H@}p =#M@o"C,@B"߹8@B9C">BZc @`sW!>WS@kv!=b@_ح!.{@A_E %2@ ( y&A)@łU6 7ޓ@hJ@\)|@q I< @^ Fc @&ty@bw\Ϫ͟@r@@M?4@Ë2LfQ@„1QwF{@XdE#ck@sG@")i@Z[(=ce@ܜMv @IOQv5@ԟ] V@C-^ N@H@-M@$@1o5f@!-w1}DUGZ@jb@ @vj /V@" 6[-@Y .r0@rGES"@o?R&.]\@빌~($pa@t)BZc@MuO7v@Y@N!R<@Ϫ͞@Nh]k<@ l-@NO;@DqxB1@Nvݭ@ c^J8@NƼS;@ ke@N~@ j@Nh@ ; 1ί%@N3t@{.]]@NK@E@M+@B @M@#Q@M5Xy>@76g@L5@jcO@L% @@K@ȟ@@J=B@Yo5@J @Y!@I4@ud0+@HP*@O.@GTw[@Q@FL/{J@@E1L@K]@D3@_@B@Bo@At>=@L7ޔ@@@=b@>K@5~g@=!5@SWp@;0HA@ [7@9䣃'@^ s@8}H@^?>@6M@ ++@4k&j@iu@2yQ@ 6Cg@0tqq@ ]\@.[BE@ 梱pO@,2"@@!? 4@)k@! gb@' @!L8@%@x@"IXdE@".4@" @ > @" ~@v@#T(M@LB@#Y >@5@$#-@^޾@$_EwU@sպ@$Q @x^@%LP@ i/n@%l8J@ GNΚ@%ź@y@&@~@.4@&x @'!W@&\=x@ʁ@'+쪸@=@'}ӄ@K@' 6P@mHQ@(8c^t*@c @(Sn@Jm3@(뜶@˂@)E@Ë`k@)<`@tҳ@){@33333@*QGz@͞&@*2_@CV@+٩T!@>(@+] x@{@+07@zH@,D)@~E@,hF@u5@,6@k~($@-8C@be+@-rܱF^@XT@-ˏ]@Ne@.$-*EN@DR?g@.|5@:@.%F L@/r@/-|o'=@%+a@/@{ 9&@/\@͞@0@`kz@0F<@~($ @0rި@+@0T@?@00@e@0¹M@C%@1 n@gߏ@1L9XbN@]$D@1w;dZ@2P]@1sl&l@ިc^@1Fs@e@1h ԕ@>@2%%@u@2Q7@hPܜ@2|OQC@[[@2wd:@Mͳ|@2Ҏ 4@@sWp@2hr!@2̷@3(>@%@x@3S]cA@xW)@3~'|E˼@ B @37ɛ@ nwpz@38Cl@ -e@3 Eb@ s@4(YJ@ =B@4RC,@ @4};K@ z$@4v_ح@ ̍2@4ќu@ O M@4h]k@ m\@5%h@ v%@5O@ fIQ@5y_a(@ VБ}kf@5^@ G7@5̽ Ri@ 7 ܇T@5J"@ &`-@6ej@ m@6I!Kr@ NΚ,g@6rjF5@ ͉/@6ߤ@ !Wh@6Ķ[@ PܜN@6@ a@N@7Y5;@ LfQn@7?v_ح@ @N@7h0#̎@ IHV@7Ӯh]@ ~7ޓ@7\@ lEx@7_o@ Z,<@8 %ם @ HKH@82d7@ 6)Ie@8Z@ ${0@8\@ iY_@8p:@ ;@8a|Q@ gwZ@8䎊@ گx_@9!2W@ @9IN;5@ i@9pf'|F@ łU6@9+@ 3t@9KCW@ {*)s@9iB@ g76@: l5@ Ta=2@:4T6@ @D(M@:[ 1ί%@ ,\ @:Цv @ _F@:dE#@ 8 @:۵@ Vϫ@:7~@ ۆnCz@;v@ 7@;AR@ V@;g-V@ yЦv@;DR?h@ ~@;QX'@ sߤ@;G@ ^t)<@;`sX@ I,k~@<$k@ 32@($ x@9&@ ($ xG@98]q@ }A5@9\;@ { 1@9x-8Go@ [[@9L@ T;@9"@ <ϕ@96F @ ZS@:6;%o@ !B@:6r2L@ sGO@:Y֌i/o@ \N;@:}v@ EXdE#@:\)@ . <@:T6@ 2@:5I@ @; ě@ b@;-GG@ ϕ@;P8@ d9@;sA0P@ @@;b@ j@;O4@ oO M@;ڤ*@ V},@;=@ ><`@<Q@ %@<@D@ Eb@ @@>-`A7L@e@>M 0@t (wN@>lTɆ@Y@>#@?Y@>_I@$ḍ@>ʂ},|@ e@>進B @t@?Y!@ݗ+k@?' ܇T@F@?EB@@?dK3@u%F @?D">@g#$6e@?`V@Kgw@?V?END FE/$zproj-9.6.0/data/tests/ntv2_0_downsampled.gsb000664 001754 001755 00000740100 14764566077 020700 0ustar00e012349e012349000000 000000 NUM_OREC NUM_SREC NUM_FILEGS_TYPE SECONDS VERSION NTv2.0 SYSTEM_F SYSTEM_T MAJOR_F TXAMINOR_F 333?XAMAJOR_T @TXAMINOR_T u?XASUB_NAMECAeast PARENT NONE CREATED 95-06-30UPDATED 95-07-05S_LAT bAN_LAT 3 AE_LONG ;AW_LONG (vb'@ALAT_INC @LONG_INC؉ק@GS_COUNT {@z=C > @YB`=O >\?rīB`=O >?B`=O >r?n= =P>a?ڬ`='>=I?)9= 0>S?? =v>>I?dx=`P>`?_O >>AC?GM>M>*:*?v>>#y>Io?Ƅ%==T?SˁC==:?K}C==h#?[v㥛=X9='f ?@o ף==:X>Hmf9=C=>M^S=%=>U>@=g>:zL?5^>1C1,><>1:=C =r>l0Q=u=ST>'>sh=L>Nb>\=d><Y=\Zm>D ܝo=-=~K>Do=E=fI@> ߿B`e=d;=X8>̿sh==9>x-=?5^>M>\>1l?=\ĿT=h=Q=01,=X9==j<<"=Y=">Y=;߇B`e:lo<;>EC<;%>o%}>=(~ > h==[>ܾ7>Sc>t=Fsh==C>st=9=h7>޽D=`=pwV><'=G="x>E=P==F> o>C ==>[Ӭ>h<<>>B`<+=?=C >6?8ۜ=C >*?oB`=O >-?B`=O >֧?2= =P>K?eS=w>R?9= 0>[h?"=^I>׆J?=Sc>:1?-7A>>?͘Zd;>+>fk?~u>}?5>F%M?#u#y==}6?fp%==b!?jC== ?eC==,>^ ף==5>PV9=C=e6>dO$>j<=ܝ>Gj<>+=v>/<> 7=C =ŏ>80X9=T=<~>`'C= ף=+>D>\=W>hҩ</]=>S;o==zl>|,B`e=d;=c>K׿sh==E/c>Șǿd;=>A=>zĿ>V?{=[ӿ=S=]P=CÿT=h==-%=v=H >rܡX9<<5>+j<[B`etB`eގPC<;>>82N>=g>h=P=4>== >1Ӿ9=)\>]3>W쟾== />19j<="=5J>k+v)\==g>xbV=h<<^.>Ƨ >/tF>t< ף< >">t< ףo>˭?ݑ=C >K?}B`=O >>?tB`=O >~?(= =P>b?=w>4D?=&1>P*?0x=`P>7?ޓ>>C?rj<>V>>uu>}?5>(D>܌t>=!)?Pdxi=h=I?j`q==3?&[%==_)>>VC==d>P㥛=X9=v>'I9=C=j>BI >X94=^>S;L7 >t=Ӣ>4F=+=Q>5.X9=T=:>+'C= ף=5҂>ԂZd;>`=CV>֋<+=N>xhY </]=>io==>0@="=3>sh==\~>lӿd;=J >t>,ǿSc>y?33> ޿A`>%>>a2ѿ=S=v >#¿=F=6>nݱO=\=#>墿1<j1_<hm= +>j4>|B`eYB`e;1< ף;N&>U0"=㥛=h=>1<j۾X9>hdt<㥛>o;㥛<}V>3o;B`e=o;t<>kH>o;t<> F>o;to> {z?n+>o>`?&=C >@H?QB`=O >v0?/i= =P>?4׍=">?ٍ=v>><>B=Sc>2>C>b> >u>}?5>d;>Y4t>=,e>`->=?mVxi=h=E>Sxi=h=@>Nxi=h=>6J#y==>YDO=9=q>Þ>v=+=YL>38=w=U>1S=t=>, ף=/]=>u&xi=9=> 9H=+>> +==}>#<㥛=,>{f R'+=T=Ì>D@="=->sh==>=ݿ=7>> п>sh>M9>v1>v?5>޿B`e==Υ>0Ͽsh=9=R,>㥛==qr> 㥛==ep4>գ #< ף<|?>bJX9<jv<jt=X9^.bT< ף;-W>oD ף;;E>B%t1<9H=E$>1̾u5 ף; #<" >'c #2>8'D;o:GE>)vD;o:!Y>e%=D;o:Al> >o;o;~>Jp>o;o;Y2?o؀+>o>?X+>o>  ?ф=C >>1B`=O >>!= =P>V>힇=">>Ux=`P>d>{.>>ԷL>qrI >y&>q $>]I >l=r=VH>{="=0u>>.>rLu=>(>`HB`e=)\>͖>z6EB`e=)\>>3Ahm=C >q d>9"7c>7I >Dl>*Wx>=2>?5^>ff>,x=;O>JA>G'1,==J>#'=sh>/>B`<=>)o==Bϖ> /<=1>}=m=K>Sj<=P>>9G=|>a>Co>I>> ݿn>Т>W>X9>'1(?0>+0P=n>_^ >ۿY=l=Xs >QkοC=j=>v㥛==Q>h)\==J B>&o;D;kI>!t冿</Aq)\=o<_>VuX>㥛[o;B`;S0>\B`;o<Ș>\˾D;B`;%->:o;o:>S\D;D;gD)>fo;D;9>4o;D;f>>*WX>= 0=+jP>ƿ>5^=o=eZ>y>oqy>=A>;}+>o>l>ߦ+>o>L6>:=C >)"><= =P>פ=]=&1>σ;=ԁNb>Ga>9b-=F~I >y&>4<#}>={1,>)\=컼yR>q=rm>a #=S==#^h<=k]>/Bj=S>+H>v@=J>;>?w=>k1>B!<=t=hy>>!7T=/]=PV>m1=9H=^i>o+=D=kf>p&y&>C >k># 0=>TW>Y=)\>>j/]==W> }=o>O;>!1=ʡ=-`>7q>n>[>/b>/?>W'>u>v>㿍n>o>x>-=`P>(D > +=>z#>ٿL==T!>[ο%==[>A¿Q==>o<=m1>>D< #B`eڬrX94*Uo:o;VQ>W7o;D;@>BB`; ף;$> 㥛Ͼ+=B`e דE=L=/>C9H=sh=e>-=D=!>6=G=1,=.9.>3>v=+=86>ɍ>o;o;?B>>o;o;Z<u>l={by>F=`g|>F=n'1>>| e= =u>m~>j<>~yF=->rww+>ʡ= v@>%=#u>)\= ?<^/]=O=rPB&[=h=ڬ"W<=4SB`=o=f=A=)\>ޫ=;5^=Ga=-!=c7/= #= >a1G==CW>~0J >b>Ϗ>˾/l=F>Y>)>7>W>!D>x>[>iRQ==>_={.>f>7 (>+>k>4?~j>aÃ>1>>rp>Sc>Zd>I`>SN>G>1&>q>Ը>>&}=m=>1,>w>û>׿㥛=~j>5>ͿJ >n>y#>1ÿ`P==E>u #=)\=3>3;o;>>B`;o<.⇿;o;`>6o #<;d>S#y=t=LA>3- ף<<2>So;o:F7>%S=Y=ö>վoUގT< ף<=q#y=Q8=c(>=P= >^/==+=>>o;o;z%>{>o;o;p.>(>D;o;Đ~u{.>"=_x{.>"=Q1{{.>/=k}5^:>=P>|sh>C>7w+>>a71|tj<>ʡ=xqiWuFs>P=Fush>C=1K]v=d;= [q=㥛=izWhj<=x#IE^I>>/Q4> 0=L7=$r:q=P=6q==o?>4?;>vO~>4{.>u>ӟ}>$b0fff>{.> >)">j>>>A >>tFT>[t>sh>R z>s$>1=k>V>x>N}>:#X>7A?C>^7>j>>->]T>">4>=R>0=duK7>`P>v= =>R=GZ޿5^:>S>>Կ>Ga= =ο$>+>yX=Yſ-2>Mb>g>E𷿃=}= 3->w #=L=F>\=/$>YiR> L=L7 >2[>pouRT<;IF>o6/]=u*X94;j<@>(IǾu=<= >9>X9<=/>1>J >'>Pxsh>-=^|B`>-=Օ>o=ξ;O>C=?M>Hz>¨ {+>ףp>nmw333>u=w(>%=Ql[Bb+=;ߏ>}e~` =+=^KH\_=B`e<9YP=/<(TD=t=9߽B #==T;F=-2>Fܼ7 >$>w9<ı0sh=#y=3P='9H=)\=M=>'>ˡ%?Ht>(1w>!>zn>)Nb>"[>r>Y4##?q=>c>|>R>eSn>tJ>v>T>`d;_>w>\>>$B`e>bX>G1>- 5^:>|?> (>N d;_>k>ގ0>%>>u= 0>>od=促===5ٿT=E=|=ӿ= =Zd>s=yѿ1Lƿ >>3>Է}?5>=b\> +>&1>Zb>9n>u>W v>MA`>-2>q>xxi>->Z>jNd;=->E~>I&>q= >~r>X94&X94˾˾O >=u>!>l=c=؁s#y===L=9H=^K>e;B`<>o<%>{.>!4>}=+>/]>:>]P=+>z>j9b33>D=\ ҍ> #==xE6>u=_(==j殀=R>K׾%u|t=x=XҾo{= ==shtĠ> #? {*ew=j>1mQ|>Hz>5c1rN?= W?0ܽM-='1?7>:47"?+?d#=i4\B?$?G;0'L7 >-2>R< X9^>AHV>'Zd>E?{U>8"&>>ZD>h >Ġ>+>hm>= W>I5>)\>Q8>41>V>:>R )\>Nb>:>A1,> #>>Z>)\> =񿁕>1,>帓=A?5^>X9> =p_ۿˡE>= >gпK>9?TR'><ʿw>u>!,><Ϳ)>l?3`>ƿ5^>q=> >&p-2>7A>s>J>>>J >d?>?5^>R>O>@IT%>=bJ>mh<Cs;B`;t<ً>u>ˡ>kI>dɾ\>-?f^>fNo; ף;>=1=|!>"7cD<=n>>/]>+?8>=َ>9E>>;<;L@g5^:>+=6C >=&+-= > ST=Zd;>3=w><ʀ-=x=NtH>-?`Ǿ3i9=<9b5cg<d;>i=+B`eF'b?> {>(j>o>C><$5^>o>TG>8 ?X9>ΪO>KQ>j>->K??X+>c y&>>$">@>/$>[>£S>Hz>=6.?B`>I=俦>G>Ɏ >4߿ >->E &>ҿ-=hm=H"=,Hl?@3>п?j@.n>Pʿj=R>9}>`=fff>'†>>µ>S>@>y>먪>zt'1>v>a>JMR>w>f> (d;=>s>G=T=T5> {ʾ #J҅=P=3>u\>Hz>̑>(1? ?='>˾k>V>&> ף;;25>ZoAoSp1HMaQ=B`e>,BJo={.> :=O >nQwm>(?xEo=o=du˾QNnP=Chj=t=~8e333>="q/#_ #> #>z+Vh<= ="RT+>Z>Io*:>ʡ=>4/]=>[>-C =L7 >'N>w'z>㥛= |>"5^>Q>s>@I>7>3h>+>T>}\;>k}d;>~j>)>͒ $>l>'>gV??u7>!-==?>c}?>ts?.>yuʿ>ƫ?;>7OݿĐ?%q@>KzT?p?A`>%ڿB`@І@o\>ȿ?T@p>Qȿn>%?7{>HC>>B>'ڥ->>]>R>Z?>u?j\?Ӥ>scZo>?> 9{.> 0?~>=~>ܫ>X94<=w>w=O=>ξD;B`e-=<园>t{iȶ>/>7>p)\?Zd?Pw>㥛=T=£m>U01,=1=xW> {.>X94> t=@>BxkԌ`=C>Xk!o={.>va"%=>Gfz=Cvz>T%>S־j0s}?5>x=¾p9H>'1>oؖi5^:>Zd;>4.|5{dY=`=^]H`9H=T=)-^@>rh> [>Sc>u}=WbX?>Ʈ=Nr>)\>wg=8-HS>L=mK>HF>>'W>?z>p=>g>7%=5^:>|>#g/X9==s>v(S>>ʉ>#sh>=複>*A`>)\>P>NEX?q=?j>K?A@?S<> `?p?q=b ?V?<Կd?+?=>DLſ@?>0ſV?F?>N׿>f?#>Rݿף>X9>I>E/Ͽ>j>g>v7V>?>)>-]?y>[B1>>%>[&Q?Y>>W?ƫ? K>Ɗ5^:??><}?G?>rz>I?>]hm=>é>OFD=Ga=̣>,Z>`=>>eL7?jh>'1> >x >{=b>}|?>^>|,}>W3x=o>)}>NY==p_g>$˼>P>7`=Ƌ>s=v>>HIӤ)\>ҍ>5t> #>#V>->F&1>x=y?~;O>>6vپuvR>{.>5{VrY==@o`P==[닾_lM>= W>u<| p$?= W>iW=ul>=x >Lhh==f,>a_=>j1>W[Y/ R>=WCb>=aMNb>`P=g>7G>%=J >9Mb>\B>>2q=Q8=`>,T%>Ga=5X>W!+ʡ>>2wm>N%E6>#y>4l>duT>->+5><w?%!?K>!1>t3?]m>}?U?{.?=-A?l?X!>ԷuX?ˡ?͒`>QX?Qx?>,?Nb?ɕ>̗ۿ>1>>!ο`>J >W><¿^I>T>ꕂ>=յ>'1?>臩>Q>B>;/?X?,>6Y[Hz??s>&{h>33s?#g>t>g?@>G 0=@go=C:K+=<>,0+>q=w>{??;>x&'18@V~@'O>"?5?V?G>_ؾ%>= 7?CK>R?A`?CQ>d>S?>M>u>QX?i5Tƒk?9h? `>y&>H&1>x=:|K>'1>%u* lg>/>*RD'1>>-`Y==YY=`=+<%́L7i?A`>ɓ$"O >1,=r3;~T= #=T=z=B`<5c=('v= #=*-> kjE>d==s2>IZr>->M>!V #>>@x>bQt==>K&>r>Ii>%u>b>d;_>^>Y8ף>^I>Gg>/%>D=X>2>sh>8gd>1>Il?6vI>:$>>0>>&(>=l>`P>"[>{>q z>>\{>ʡ>>C>Q)\>Z>$bJ>ep>">Œ> ^>= >U>Fݿm{>V->{N>ѿ ?33>>N>ff>>aOJ >Zd;>7>8> ?>֎>>W>~b>q= ?E>bƋ>?>/4^>z?W>E{.> >~> Y1 ?33S?=d@-@,N<$Z@@å>aO(@x@!W>9#z,@T@*X>P?!@r>>7A?0S>4׹?|??d@V>L7>>hT>: (>;>OXr֒K>'1>;6b(\>P>MM}y$>k>n5'N=>&Y=9=%z$Y=`=Hy#P=+=nd;=/<:zX/=<-4F=!><V ףY=,z<-==fNsX94=T=>FmD==\>h==Օ/>baL7 >{.>Q>ZG=K>y>!r>>M9H=㥛<>Gw=< >=;^I>hm>ms>4/0=B`=(>1y&>>ʧ> 4lg?5^:?{N>$%!?F>d>zSfff>k>w>3>>MS>)\?>6}>o >|>x>ez?V>B`>?x>O ><>*俰rh>=d>ҿsh>G>O̺>ſ$>B`=>Y>>>>Q8>>@|?>$>>~M>\=>J[P= ף=IK>5 0=C=k>$#y>Nb>a>}\J ?rh?>+6@yN@ =Υ(@R@MN>N NJ r@/}@˹T>q+#ۉ?Q?c>(S??5? m>3t??o>+Ѿw>G>+n>G\>~>Pl>.+>l>}nT:Fs>Zd>XY=\=3PITY==ܾ ܗ|_?u>]d;=i1< =7g@=㥛=4-=S=<+~9H===wC =D==%Xr<)\=0 #>_k`P=t>C>|ab 0=%=a>_jt>G?E>X=j=ߊ>B&S ף<<Q>MDD>I >>?t=>ˡE>Џ>/7X9>L7 ?n>3P3yf?33? >7'?Nbp?>X-n>y>@>!$?{>3>p>#y>3>_j?d;_>;>E ?d;=g>>L7 >Q>R>n>3>7V->-=E>ܿ>m{>;6>5ʿ >D>*>&1?w>>֨Q>)>j>yrh>G=+>?>&1> )>bb)\=sh=>F; ף=/=Y> $X9=X9=>F B`>Ck?>MH?O?p|>E$@uX@2>`tx?&?-σ>YiR?5?$@>2y?t?!>'1>"> {>yྤp>C>؞>: >J >>QOH>= >!D p?^I>ۊ x`?u>?پw-o>v>1T=;ߏ>nϙ1iGt=F>I:d=n>k`P=O >ѽ4C =)\=ё\TRC =D=!veB`<1,=/=Xʃot`P=7>58>io==R,W>b#=sh>rf>_+==>zY)\=1,=>WX9<= =>R=B`)L>>@>dAJ ? ?\>P;h-?v?7>GB`??M>Q=ȶ>>>:4jt>>`>x*/]>>(,>R"A@?ʡ>ٿ>}ף?n?x>  #?H:?*> J>?5^>"7>U^I>R>O>g\>E6>>߿+>%>>Kοp=>\=9>F>Q=o>ݵ"[>-=>fږ/=hm=n>E-==X>5j =sh=A+?eF5^=D=GZ?$=Y=?yw>tS?)>R&@?K?!ȡ>#}@^@>֐x9H?Nb>5A>ёT9?33@ޔ>:X7)\?p?=>w>T%>W>"q>>Ǻ>/ݤ>k>@>yg#y>;O>Cs1侇o=w>Ǿp|{=+> B`=&1>Ι5$=={\o=hm=[=J{Lq=ԃo=lg>=H=xi=>Iy9=}=D8>6sO >w=mJ> ohm=hm=n>yj`eC_X94=w=y>X<1<´>@jQ=v>>>I>M?V>D9?O?>=>I?>9l>jt> >/K?>y>(\"?F?{I>(D$Ġ>B`>Þ>_Т>9>>Ҍ>Q8>r>}? F>C>>2/]>Y>s?J>>?ՕO >L>?_ҿ\=1= ?,S=m=pB ?r\=o=/?C >%=k ?͒ +>9H=A ?y'>= W>@?(SVn?I>WC?A?X?b?Lqx?S??}@;ߟ?!>̾V@?†>tV@#?C>j?@C>?;>z@?:>+?9H>3>]3z>>>p_v>ff>ǵ>~>=>bLo==ž]ܩo=hm=N$(98#y=33>)<j==bg== =hm==I=q=4>in>= >΂1==D>itj<-=Vm>|N(vQ8==s>lwd㥛< #='>[[=+>>TQ8=u>a>%]Ku=}=*>Fb>u>>NDS=1,>{> =ff>w>n>95~>ˡ>(>0{.>7A>v>*`=v>>>UM >>?>l>H>+>1}> >>>p| F>m{>"7 ?r/]>V>t?;Sd;=>W&?ٿV>=Y?Uſv>>=V?ףq= >㥛=??0Q8=h=D?#>|> ?-uʱ?F3?o-?28@z?M:?σe@sh?;?$˾+~@j?(?E@l?aq?ho @Q?<?Ԍ@}??>ǺX$@?̗>+5˾?@P>f Dl>?>m~>>>AL7>33?_>~E>?;߷ m_B`e=K>üj =Z>^/= =hm=X;f/=q=I=2)\>L7=鷯=!>{= =Q\==P>Ԍt?<㥛=bp>Q8=C=8> #=J >>Rz@==>xzqj<=Q=a>hGa=o=0>+`C=D=>aZd;>= >9>UTFs>Hz>S>JO9H>>n>Z/JZd;>K>/>MC>ףp>nQ>ǀ>bX>T%>g> {5j=n>>^,%>h=l>>{%1 ?'?p?#n>C >[?2rl>>YL?d;_>(>"?`h==g%?LJ >=΍)?ZˡE>=Y(?ʿN>D=%?Ƌ>">b(?>d;>9-?Ft>= >.4?Qh?5?ף0?i? 7@L7I?g> p5@1?`Y>Hоb@!?O?O](,@?˜?cC @S?!?[l@K?<?Yff?X?#>WE?n?E>D4j<>~?al>yX94>j> ^>}\X9>#۹>>iˡE>->ľB`YQcY= > M{=b>== =hm=L$= =hm=[| =q=|=gM=NR>{== {9=B`==@ޙ/]=q= >P(> #=j=`P>ru= #>v>4L=C >|>@hm==>!1==F>x >= =>tyV->I >>sD>X94><>[mA`>N>>˜hI>D>>Gb>m=(D>Vn>T%>p?o*NA`>Q>o?H#y=w> ?rDL7=-2> ?H?>Q8> ?9"[>Zd;>O?B.q>>?1#$>o>#?p>?bg*?Y4J>+>x4? >v>S=?7E='1>@?}/$>Nb>#2= W>b8?28Y>~j>Y8?ɎˡE>>?? Yw>Zd;>G?]~^>9=J?@Y9?j<>26?~?ף>7?[|q=?> 9?`?-?؁;?58A?H?/??G 0>Zd>>u)1,>>>M 1,>`>>վR>sh> ʡ=5^>7uH=>8O= =hm=/=q=?W)\>L7= == q==~==ɰ=C=V>:>o/]=h=5>%Xxi= +>`>;hm==>ڕB`=E=)?>ё>=zǩ>+9H>>겸>~j>X9>L>5>L>>l>ˡ>ˡE>>Q>'>>v-> 0>3>zn>&1>>[e=Q8>z?Ysh>= ?? W/$>333?0?P">n>?~oKk>>S?j0C=|?>?G>y>q=>Q?6=-2>Y? {'R>Nb>"-? #L7>>:;?`vA>L>=IB?Ҍl== =FBK?3X9>L>:T?D ?K>J?_ b>Z>G?IĿ=q=>1BH?֨xi=$>K?Q8=X9=Y?`P>>g?s?5^>E?d?WZ(\>1 ?Fd?)BE6>?hyf?, 0>?rmh? {.>?Of?Ѿ ?X?f?;>e ?4 +>;>D ?KC >Nb> ?IL7 >>L7=̽ػ>=N!>{=޻ $>=|=[v=> =%=L7 >0=pP=X9>$>|-=>cEM>! >d;=uq>y@L>+>&Ǎ>G(\>(>>C9>|?>h>";ߏ>ˡE>>ԔC>ˡE>;>:S>/> >Ό5^:>/>>V>v>>M>Ih=^I>>L|F=Q>?brt>`P>?cgZ>u> ?^Q>Zd;>|'?7TS> >˹ ?*:P->C ?J$?EHP?X9T?3 ?I;tS?"?!?>r>q=>r,?H<>R>˹5^=@?(*@>t>I?!>y&>N?== U?Fs>\B>D_?}Z?>~Y?D>o?W?0ƿF=\>/n[?Fq=x=S_?'1>p?f?g k>G?k?R">  ?o?@>>q?4o->w>s?.HR>u>t?7 d;_>P>֭v?׆d;_>> x?d;_>µ>.x?O>I> =D<j<5>m>o:o;8>Щ>o:o;#ƾ)">9H==K>+=}=4u?h=j<=Dȵ1??'1>nNER?9=ˡE>\gDq?G=R>W?T%>q= >Kν:?>$>?>S=ڼ?>q=rh=^?+>=<1=?l=)>k=j?=V>GZ=(? >Ga>v>?L7 >=I> ?B`e=B`e=*> ? #=-=I=a?1=㥛=)=T?v=-="l=]@=w>PS=г@L7=Fs>w9=Ҍ@%=>KT<*+@=\B>=as5@"== >S"B@ =p=>>J@L=o>s׽vP@q= >=?V@x>L7 >NCz6]@">V>@0Ac@J >sh=tꪾk@!>S=G=Ծ1s@+>>xEIh}@(@w=q=>5O@\=V>5)EƓ@=P>X@->v>^g@T%>+=Ͻo_@n>E=_$|7O@!>%> @">"=Cį@K>S=Ԗ h@=n>@@5^=F=nl@= =+>@=j<>0o@=M>ȿX9@ʡ=>ȿW@u>O?jӿ@j>z?\޿a@A>/}?v`@(>A`?DQ@S?L?a@X9?jvONA?K7>f/>=_>oթ>;?<ξi> =>V;>C>T=K&?u>\B>ygaO ?=+= .I?}?5>b><|Dl?Sc>}> W?D>>ۮ՜?^>$>lb?rh>v=.s:m=?1= +>8=j?=Zd;>q>?z>{=>?D=@=4=?'=)\==X?sh=t=+=x@ʡ=P==+5 @ =C >=@q="=f1<_&@=m=&<ߦ/@B`=(>i9@x=}>sG@x=)>.P@@=Ga=Ž}W@D>#=Ș]@)\>hm=c@)\>I >X9t?j@j=-=ٙ@r@="=G1z@G>sh>޾@B`<">47@P=1,=.@P==$v@-=j=#2@ ף=v=P'v@w=T=d1&@ʡ=q=uD @V>5^=@MX@T%>v=VS@@V>==c@9H>l=r4@B`e>B`=r3@'>X94>DQ(a@J >&1>]@=u>:Xd@=D>ܝI@P=333>,+@ʡ=>fI5@jt>(\?f,@C>Ā?ę@M>k?ǿ'@x>1L?zϿ @  ?(r忍@?K7>ni@?K7> vvA#?L>#F>~=D;o;YJ>B&>I >}=\>>t>CJ >oY=O` ?>G={A?̌>y&>mr\?I>lg>Ifu?u>=-&6L?7A>>3?Ɏ?-> 0>K;G?B`=Nb>y&>&=?Ġ>Mb>=Y?o>V>=#?~j>-2>=ǀ?'>b> =?=>U=l?'1>=X=#2@}=/]== @X9>lg>x=-[@@>x>XN=!@(>=P2=VH)@h> > )"=3@>>5Zd>^5:XM@=<0AݵV@== =̑[@?}?5>R'6d@>>^"k@Nb>C>R7s@-=J >]n,y@->B`=^Uف@`==.ξ9ф@L7>~ ?+jw@j>PC@rh>M>IV@C<j<=ZT@o(\>-ɠ@%=/]= +~@Nb>T%>D@>9=O褭@^I>=keZ@>}?5>gx@I >>Kt7@P>Q>.@=`P> mJ@=?5^>u勿e@|?>D?=''@>%?䝿{@>o?oo@q=>J?|~wg@  ?( .9@?K7>ÿ˹@?K7>ȿ}@#?L>o̿w@r(?/]>sѿ?cAx)?}>LP>;=(\>T=ٱQ>ę>T=)\=pC>LO>>hm=k#>>r>9H>==u>z>o=P=?o>=S=G)?Y=<=Q=Y=?l=G=T=?C==-<C?ʡ==\8=-C?'>`=1=p? =v=,=&p?~>Zd;>>ʉ?X94>P>=@@=S=h=n@=m==@>/$>x=Z@v=-=K=:$@+>G=!>a.@ҍ>L7 >W*>:@!r>q=0=*B@ >D>>WQ@Dl>Z> =a7V@A`>n>)*=@ja@F==$=3g@S?+?vOUm@'?b>h90w@? ?ۅfj|@\>/>↾2@/]>M> /i@>>;E؊@-= 0>B΍@w==Kܒ@/>>sr@sh>>nQ@L7 ?d;?D-@`P>M>/ܦ@Nb?Il?X'@\"??:߫@)\=O= ?@>5^>WG@>w>?tQ:;@=R>jZM@9=?5^>%d@=>sT@ҍ>shq?@>Qx?Dn(a@>J?v)@>H:?s@l?Q8>-=I@?X9>_r@?5?p=>S?)"@?K7>«@#?L>֋j@x)?}>'@x)?}>cnn@#?n>%A#?n>"lX>]=T=C =vV>X>#y=B`M>==Л*>>G>D=L<>CK?h=M=l&??o>b=l+=SW?V>=bV=w-i?I >P=G+>}\=?==o>"=CD==c?(\>R>R,>?E=#y=` >w@P=>= @B`="==@rh>o>5>@R>=(->&%@C> =eN>Ԛ0@}?>>l>pB=@=[>mE@=-2>׆J>6Q@b>C=([> Z@ ף==O>b@CRh@X94=Tx=2/@|>Mb>?ǾH@O >=˾-`@X9>9> c˾g@!r>o>(,gՠ@tS?? @+>O @ @)\>?"-[@q= >T>.&囯@>o=g'@C>sh>/+@>q=>N;%@t>C >!B@R>r?}VK@X9>(|?"e@>X? qF@>O ?-}\@ff>C>R@l?Q8> )<@?5?p=>D4n@m?K7>NT@#?d;_>%@+'?$>zǝ@#?n>򵟿b@#?n>碿Q@?>dsc@ ?>[7O@ ?>V> ; #>k>T>>w>V>Q1N>~y>}?5>j=I,>>?9H>#>>T?m{>>?y> 0>ۢ >L:?>z>=J$Q?I>\> =h?P>>[V=?ˡE>>n<7?n>h=j%<Ԟ?C >E=; ?hm>X9=k`+=?'1>Y=d)]n?L7=L7 >c?='>>ض?o>'1>oP<\ ??F==I?\>V->T=@)>u>=# @)\>t>{>8@=Z>F7>&@S>C>I>b%@?5^>#=b>qU/@/=w=a>:@=>]>F@Zd;>7>yt>R@o\8Z@L=D=rP>8b@P=hm=S\5>fh@=-=Gr=Qo@}?>> ;H@? ?ɠ}@33>T>6 c@ts?>Z@K7>(\>Me@K>u>znn@!>%>H@}?5>E>GrW@N>`?@R>Ġ>yʾެ@>Ġ>[| @?- @g@?/}?-CA@\>|>Z P@9>Nb>cE%Zd@V>N>.@b>"=l7@x>= w?F@S>o>9SŬ@H>bX>I^HP@l>D> i@?Q8>tyQ@G!?@> u@+'?$>݉]@= ?>R @= ?>duO;@ ?>@A ?33>D|@(?Zd>'fX@(?Zd>A@?p>q7@n?>6a>֭>ȶ>Y^>=>>o\>R>Fs> >r3\>T>|?>ۊ]>4>)\/?\>&]>0?333?X>^U>,?b?33>4>G?lg?Т>>? >Wx_??v?p=f|? ? >:/=?B`>>0/>_=S?>>3"=;?(>L>?F=2w?l>/ݤ>$E=?= W>/>NB=T?>1,>£<7?Q8>\B>$ :K?1,=+=a=h?= +>=+?sh> >~>?@)\>=jJ>y @t=J>?b>@y>rh>i|>!@/$>%>>+@d;==|'>6@<=#|>k@@A`>O >5c>$O@o=w>Lj>B`@Cgg@uvj@V>$>czB>ȵw@ ף>w=>>c@Z?ˡE>= @~>I>>=jj@S>t> jV@F>=9@&Q?j|?, N(@%>>5$N@0@z>G>XqТ@M>w=)퍾@%>)>`Y Ĭ@u>/>@h>$f?$Ӿ@> ף>*5@??5>=-@>C>Q"@\=x=r6@sh?{>D#@/>= >k}Ad@J >fff>)E*@`?Nb>ii @C ?>{uB@Q>\>񝀿KY@D>>bdu@>1>@r> >3E*@>T>C9@b>T>%<@b>y>&6e@t> ף>/@t> ף>4K@>d;>zǕ@>d;>{>T/]>d;_>v>/={>>t>%>L7 ?^>> >?V>f>]3>j4?>ߔ>u?%A?>>/?j?+?p|>M?l?L7)?bk>\?q=j?{>'>%@}?u?-?r=?= W?j?D=_?Ev?5? =,?B`e>\B>=X?= 7?I >=o?->;O>6> ?}?>>t>W?+>J>aO>?>C>V&>T?>H:?S?/>e?Mb>V>ͯ&>?=/>)6>O@?P>>=>D@q>ҍ>5>@>n>.ť>!@9=y&>+0> -@C=1,>Pœ>S9@ #<<>D@X9=ˡE>P>GQ@o;o;h?>b@(>F=Pv>[j@X94q@)\=L=\r|>?x@>=p>@B`e==B>@1,>$>>NJ@+=<=1B@̌>m{>û@)\??@(?? @Zd;>$>@>fff>n> 5@ C?x?Jף@=T>?*@L7I?m?uݾd@%?>ZT@ #?J ?@hm=>bWM@?IL?܀Wu<@Mb?~J?4a@?+?>gs@w>= W>g#-@'1>X9=e@}?>㥛>3@ˡ>>zS@Nb>I>@>+>߇B@Ġ>d;> F@Ġ>d;>2rX@Ġ>d;>t^R'@Ġ>d;>V@Т>>勿nL@>l>0@>l>£>ݽK>}?>!>1;? ?>>x>V>>}>?{?[Υ>m>D ?^ ?j>D ?#y?h?e>=?w_?p}?3>[C?Nb?-?Q1>$F?^?l?ߴ>P?A??>i?^?r(?sX>p~??d;?+'>?O>(\>?W>?>(>;:>~t?>{>M>.?L>u>˜N>B?>m;?TRG>j0?&1>?h>?C >R>]>X?5^=1,>Q@>?>=<>?v=C >1v>֋@(>ff?@ޛ>ܝ@1>r?>L(@P>>Wx>8@F>X9>V>#D@<<ܥ>OQ@+>>(> [@=Ga>>f@=>g>8n@>>'>*x@= W>t>[>C@?5>R>;I>/i@/$?#y>2A>Z@?j<>/>ۍ@ˡ?{>H=<@>-r?S" b@X?p=>qr?y;@V->R>&SE@K>ff>qZ0z@b>t>J+i@K7>>b/@k>=7@َ>bX>蟽@/]=Ga=:@о@@I >=4@~ ?Nb>(@/? 0>3@m>K>vrb@>B`e>@+>&1>`v겾@v> ?6ݘ@ >L7>t@h ?H>4@d;>L7 ?@D>j(9?rxb@C>ff&?lψ@-2>"?Mf@-2>"?J҉Ǻ@G>?Ϡ(a@A`>S?1@A`>S?V>)>sh>`>=P!>;>>LT= ?D ?r>>Q>t>>y>>m[?/?>vT>?/]?r>?%?+?>B?5^>J ?>W'???J^> A?O ?'1?_>"[?w_?o#?Ӽ>fd?KW?#?_>U}?a?D?]P>ʒ?V>>!Y>]?(?/]>L7>:>?A>/d?X>j޵?= =>u>ŏ?)\=/=>? 0=X9<y>F?Q8=t=.f>?q=>M>R@M>p]?>1@+>>؟>"O*@>H>>??@ 0> >K>T:H@ҍ>5^=!>zQ@G=ʡ=\>*[@\=w>+>j@-=>!>x@n>=s>j0@tx@T==,>r@B`e=m=L=[B@fff>K>=t@@>>6;z@D;o<( l[@>{.>Wq@J >y&>Br@xi=/]=?:4@~ ?333>X@ >t<]5@l?>N@7?C>@=v>Ɗ@r>33>n@)>=w@}?5>=5FSh@ףp@Dt@Xo@?5?~?\"@&?j?93@J >h=W@rh>=H#J@P>rh>N@jT?x>J^1@j>Q>z @->/>88@>X?t҇@b>1? ׇqU@$>H:?鈿@$>H:?j4@D>(((?X9>T%?)>0pТ>?ö>h=d;_>ff>>k=D>~>J>(>!>K7> >>&>`>+>e>>>ܝ>>/ݤ>K>">U?^ ?nR??>B?7!?-R?]m>N?= >->>t X?L7I?G?`>s?Y?VN?>2?!?tS?>?ʁ?Nb?>~?v>sh1?޳> ?A>?N>?h=S=>^? #=1׆?jE?< ף<#>0d?v>l?ϝ>@>^?>>@>5?>&@K>">y>ް9@w>G>R>NE@=%> >~Q@%=t=>8J\@== W>R>|l@->Fs>?5>z@?J >>@=T>,}>d@n>fff>R >Β@?ҍ>hy>>@P>/$>@>3Ĝ@C =@=&%;O@+>)\=f @>j>FJ@ˡE>1,>£M|ժ@>=BxTr@>b8?WUlC@z?|>y@&>{.?,Bx@1l??du7q@?Q?xEc @>µ? @q=>ff?; u@?^ @y2D4@>#!@:@=F=:@{=X9=ݝ@m=@=8r@= ףp=>b@^?h>@}?>gՋa@Nb0?o?"G@>X?ҌQ@K>1,?y{N@>5?/P@$>H:?>8%hm>?]>l&߻sh>?">OɎ <-2>;O>>%=ff>㥛=?p}>`?z>-C>&>>J>5 >Ɏ>\>t>$> ?->u>Ӽ>t{)?>?>F|W?(>/>g>ʃ??K?1?sh?%> 0>J> ?H?B`E?u>M-?n?1> K>_?= ?/?>f?">S>&>Ѱ?|>Q8>%]>?M?>`=>`Y?p>B`E?w>Ǻ@Q>Mb?EG>vO@j>VN?RD>zp@>>8>3+@x>z>{k>7@G> +>>B@">= >>:Q@->d;>>jd@>x>O;>Csm@!>M>/>0*{@R>η>kԳ>@> >8>֌@u>->U>Ӕ@E6?ȶ>t>Z@n>"[>UT>H@L>>S=:@/?J>pf@33?u>9z6@E6? C?!ͨW@E>h-?ޓ)@Y>hm>ȾV@V>>9E P@Ev?j4?չ@İ?E? Q?-{k@A>µ>@2@G??c%@=+>q@+@E>@􉌿r@?b?1@`P=㥛=/@fff>̌>DQ,@P==k8@)\>5^=d#@G>+={>\@@>@>23@K>Y>|'@Q>><@C>Zd;?_A;@>o?@7?n?>ᙾq= >Nb>>=S=I>E>֨ǽ=/ݤ>>(D>'>2r?Z =ף>Q=?8gD>1 ?/ݤ>.s"?4O>?u?/?4>$?H??>>b>!?+?b>rh??|1?+>'1?1?O?j>?5> ?r?>|>NE?J$??Nb>o>?'1H?= ?>$?G>>&?ݘ?=r>'>j?C==>?>&1>>T?d;_>+>8>?>V>5{>@B`?Sc?>@P_@+@ڬ>+&@E>E?>>4@Ga>>}\>&<@V>7>W>uD@'>>i>SR@>?8>a@`=G>>kr@ףp>5^>>e@{=Ƌ>F>@@=x>>0 @>jt>p_>Ř@o>>T> @h<#y=r>a@ ף=sh>jJ>Л@"[>=s=ղ@d;??Ÿ@M?x@77@/$>9H? ƾ@z>%> \=@G?>K @~>Hz>!h@T?7?A0+@o?)\o?sI Y@L7>L7>R$xE@ff?#Y?"@I?$?>+)@{n?B`?@Ƌ>(>`C@q= >%>{N@">?F|׾$ @?{?\r@7?w?CW@=L7=%H@5^==28>@==&ǡD@=S>Kv{@=Fs>Ϧ|@=">$ѧ@/>@?@~>shQ?׆@w>K?jߦ@K>|?{ ?{G=C> ?=Dc\=j>O#?σ;?7>D"? '??5>>? ?V>FB?p?? B?W`=ff>= W>y#;?>~>Dl>;?>?Sc?.??/>>0?@?d;_>O > <7?c?`>}?>m1?S?ȶ>T>\"??B`>>???1,??}?@>>??= W>Z$?=D?o?/>K>!?U?'1>`?<1 ?V?>َ?C?pw@$v@/@]?X@98@H@Lì?5$j@O@?l&?=k@w? k?{?on@/,@?N}?d@e@ ??vU@P>`P=>4[@B`==>yj@$>= >ˡ>6v@O >P>s>q @7A>#y>>x@+=u>>+@=~>>B[@B`e=9>7T>p%@)\=> >{N@-= +>>@ʡ>O>x(>4h@(>R>Qڣ@->=B!ȧ@Dl>(>M@U?r?o*ӭ@ףp>"= .@Q8>h=ٱ@">z>Ae$d@?ˡ>Ga>!/>˻@>+>-Pb־@%?> V@L7)??Y4@M?@? ^Lh@!>E?3V@ff>?(Dh@I>>[@R>µ>.=D@9(??@@=<@ 0=㥛<_@(>>\b@?v>t X@hM?ˡ@Ƣ2@m>#ۙ?եc@|>q?Χ@p>`?ٱ5{@L7>]?&'?ZG徠?+?22?uvҾV-?J ?JE?ǾD,?X9>_^?Hף>Z>P_?y>>I>Ĕh?ɰ